@nextcloud/vue 9.0.0-rc.4 → 9.0.0-rc.5

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 (259) hide show
  1. package/CHANGELOG.md +45 -22
  2. package/dist/assets/{NcActionButtonGroup-BND4GQdv.css → NcActionButtonGroup-BLIEEeG3.css} +1 -1
  3. package/dist/assets/NcActionInput-BZCvMPVy.css +221 -0
  4. package/dist/assets/{NcActionTextEditable-BbOijUsB.css → NcActionTextEditable-D5stkJZK.css} +3 -8
  5. package/dist/assets/{NcActions-DfCOtp0b.css → NcActions-CG3xO48Y.css} +13 -13
  6. package/dist/assets/{NcAppContent-RmHDNYBp.css → NcAppContent-vj2DL4Yr.css} +4 -4
  7. package/dist/assets/{NcAppNavigationItem-B-slGJHZ.css → NcAppNavigationItem-CFT8K0Dn.css} +37 -37
  8. package/dist/assets/{NcAppNavigationNewItem-CYsA6ZGQ.css → NcAppNavigationNewItem-CCu1yQxq.css} +2 -2
  9. package/dist/assets/{NcAppNavigationSearch-BAzhDRd7.css → NcAppNavigationSearch-Ct6uMFNo.css} +5 -8
  10. package/dist/assets/{NcAppNavigationToggle-M0oDbwAS.css → NcAppNavigationToggle-B4XuIU5N.css} +3 -3
  11. package/dist/assets/{NcAppSettingsDialog-DfBJYMdm.css → NcAppSettingsDialog-BtS89pIY.css} +11 -11
  12. package/dist/assets/{NcAppSidebar-BeRME1Bx.css → NcAppSidebar-DlLDB8Ba.css} +61 -77
  13. package/dist/assets/{NcAvatar-g7MoHyFd.css → NcAvatar-j5lkSXJF.css} +24 -24
  14. package/dist/assets/{NcButton-Cpw_vPKw.css → NcButton-Cl53rV4b.css} +52 -53
  15. package/dist/assets/{NcCheckboxRadioSwitch-DKVMIvxJ.css → NcCheckboxRadioSwitch-Cbnc4p0H.css} +35 -35
  16. package/dist/assets/{NcChip-rGBYOr-Q.css → NcChip-1ZmWY_6e.css} +9 -9
  17. package/dist/assets/{NcCollectionList-DVlSPO13.css → NcCollectionList-C7_FPg95.css} +42 -42
  18. package/dist/assets/{NcColorPicker-DgByWqzp.css → NcColorPicker-DlQH2IqY.css} +31 -31
  19. package/dist/assets/{NcContent-1ivDf2e_.css → NcContent-D1ab_Xg2.css} +10 -10
  20. package/dist/assets/{NcCounterBubble-DpKQwKTI.css → NcCounterBubble-C0CtLaMW.css} +8 -8
  21. package/dist/assets/{NcDashboardWidget-BEYk4O95.css → NcDashboardWidget-CTP_ajin.css} +13 -13
  22. package/dist/assets/{NcDashboardWidgetItem-V_jSEH-7.css → NcDashboardWidgetItem-DYwI3Qof.css} +13 -13
  23. package/dist/assets/{NcDateTimePicker-_rRYVngX.css → NcDateTimePicker-D10v2GzZ.css} +231 -231
  24. package/dist/assets/NcDateTimePickerNative-B7hWPWho.css +60 -0
  25. package/dist/assets/{NcDialog-Ch6FuMQo.css → NcDialog-B9626mow.css} +16 -16
  26. package/dist/assets/{NcEmojiPicker-vTc7_EDA.css → NcEmojiPicker-CeVpBSVx.css} +5 -5
  27. package/dist/assets/{NcGuestContent-BZ26iXQi.css → NcGuestContent-bgqNfxTA.css} +3 -3
  28. package/dist/assets/{NcHeaderMenu-BAKwNTFx.css → NcHeaderMenu-CP5Nn6tY.css} +12 -13
  29. package/dist/assets/{NcInputConfirmCancel-9YyvRYjw.css → NcInputConfirmCancel-DNNS3DDJ.css} +5 -5
  30. package/dist/assets/{NcInputField-CvP4PFAO.css → NcInputField-BeU51nfg.css} +44 -38
  31. package/dist/assets/{NcModal-BMVfhs7c.css → NcModal-eBU7G0XQ.css} +62 -62
  32. package/dist/assets/{NcNoteCard-DlW6RBOO.css → NcNoteCard-BTnxwjLX.css} +10 -10
  33. package/dist/assets/{NcPasswordField-D7XrnwDs.css → NcPasswordField-CWRwNMKF.css} +2 -2
  34. package/dist/assets/{NcPopover-zFjgXDlM.css → NcPopover-BzkXE_af.css} +2 -2
  35. package/dist/assets/{NcRelatedResourcesPanel-BQkQvMMD.css → NcRelatedResourcesPanel-9I4RRIks.css} +26 -26
  36. package/dist/assets/{NcRichContenteditable-1zTxLjsG.css → NcRichContenteditable-Dj22Kx6E.css} +32 -32
  37. package/dist/assets/{NcRichText-cO2UCM_o.css → NcRichText-Fp8zf8zq.css} +87 -87
  38. package/dist/assets/{NcSelect-BCBpQnFL.css → NcSelect-DjCC5X0A.css} +2 -2
  39. package/dist/assets/{NcSettingsInputText-B-V6Y4MD.css → NcSettingsInputText-B2b1M_wK.css} +5 -5
  40. package/dist/assets/{NcSettingsSection-DLjgl3j1.css → NcSettingsSection-CxQtVrUq.css} +7 -7
  41. package/dist/assets/{NcSettingsSelectGroup-DZcNr_Dq.css → NcSettingsSelectGroup-BuKKmCtO.css} +3 -3
  42. package/dist/assets/{NcTextArea-DoBYU3IE.css → NcTextArea-BLRA2iY6.css} +22 -22
  43. package/dist/assets/{NcUserStatusIcon-CtJLt6AU.css → NcUserStatusIcon-BcLND4gJ.css} +3 -3
  44. package/dist/assets/{referencePickerModal-DIHQ6_wW.css → referencePickerModal-D80hwmre.css} +48 -48
  45. package/dist/chunks/{NcActionButtonGroup-BVbWDFaC.mjs → NcActionButtonGroup-zqttoOi7.mjs} +3 -3
  46. package/dist/chunks/{NcActionButtonGroup-BVbWDFaC.mjs.map → NcActionButtonGroup-zqttoOi7.mjs.map} +1 -1
  47. package/dist/chunks/{NcActionInput-B_f8z2fo.mjs → NcActionInput-uNqbQcU9.mjs} +10 -10
  48. package/dist/chunks/{NcActionInput-B_f8z2fo.mjs.map → NcActionInput-uNqbQcU9.mjs.map} +1 -1
  49. package/dist/chunks/{NcActionTextEditable-B4nTAiHu.mjs → NcActionTextEditable-rS1GklQ7.mjs} +2 -2
  50. package/dist/chunks/{NcActionTextEditable-B4nTAiHu.mjs.map → NcActionTextEditable-rS1GklQ7.mjs.map} +1 -1
  51. package/dist/chunks/{NcActions-BM3DmGLW.mjs → NcActions-CyXKvnrY.mjs} +6 -6
  52. package/dist/chunks/{NcActions-BM3DmGLW.mjs.map → NcActions-CyXKvnrY.mjs.map} +1 -1
  53. package/dist/chunks/{NcAppContent-BZZyPqOo.mjs → NcAppContent-BK8bOVDx.mjs} +5 -5
  54. package/dist/chunks/{NcAppContent-BZZyPqOo.mjs.map → NcAppContent-BK8bOVDx.mjs.map} +1 -1
  55. package/dist/chunks/{NcAppNavigation-BmACVQVW.mjs → NcAppNavigation-Ccjr0Wxc.mjs} +2 -2
  56. package/dist/chunks/{NcAppNavigation-BmACVQVW.mjs.map → NcAppNavigation-Ccjr0Wxc.mjs.map} +1 -1
  57. package/dist/chunks/{NcAppNavigationCaption-BrCiN8XK.mjs → NcAppNavigationCaption-DxfUoJBO.mjs} +2 -2
  58. package/dist/chunks/{NcAppNavigationCaption-BrCiN8XK.mjs.map → NcAppNavigationCaption-DxfUoJBO.mjs.map} +1 -1
  59. package/dist/chunks/{NcAppNavigationItem-ClySLuSM.mjs → NcAppNavigationItem-CSiMEh0V.mjs} +8 -8
  60. package/dist/chunks/{NcAppNavigationItem-ClySLuSM.mjs.map → NcAppNavigationItem-CSiMEh0V.mjs.map} +1 -1
  61. package/dist/chunks/{NcAppNavigationNew-CMjaAY5A.mjs → NcAppNavigationNew-CLbVKk5X.mjs} +2 -2
  62. package/dist/chunks/{NcAppNavigationNew-CMjaAY5A.mjs.map → NcAppNavigationNew-CLbVKk5X.mjs.map} +1 -1
  63. package/dist/chunks/{NcAppNavigationNewItem-BUgPntuN.mjs → NcAppNavigationNewItem-B4TH71qQ.mjs} +3 -3
  64. package/dist/chunks/{NcAppNavigationNewItem-BUgPntuN.mjs.map → NcAppNavigationNewItem-B4TH71qQ.mjs.map} +1 -1
  65. package/dist/chunks/{NcAppNavigationSearch-DpjlWi9j.mjs → NcAppNavigationSearch-BOZ5dS_m.mjs} +5 -5
  66. package/dist/chunks/{NcAppNavigationSearch-DpjlWi9j.mjs.map → NcAppNavigationSearch-BOZ5dS_m.mjs.map} +1 -1
  67. package/dist/chunks/{NcAppNavigationSettings-DGATbBqy.mjs → NcAppNavigationSettings-9FtV3wC6.mjs} +3 -3
  68. package/dist/chunks/{NcAppNavigationSettings-DGATbBqy.mjs.map → NcAppNavigationSettings-9FtV3wC6.mjs.map} +1 -1
  69. package/dist/chunks/{NcAppNavigationToggle-D9pouVyS.mjs → NcAppNavigationToggle-D8aIKSiz.mjs} +5 -5
  70. package/dist/chunks/{NcAppNavigationToggle-D9pouVyS.mjs.map → NcAppNavigationToggle-D8aIKSiz.mjs.map} +1 -1
  71. package/dist/chunks/{NcAppSettingsDialog-Dgh5jydA.mjs → NcAppSettingsDialog-B4rJQ7w_.mjs} +5 -5
  72. package/dist/chunks/{NcAppSettingsDialog-Dgh5jydA.mjs.map → NcAppSettingsDialog-B4rJQ7w_.mjs.map} +1 -1
  73. package/dist/chunks/{NcAppSidebar-DWRmX_-Y.mjs → NcAppSidebar-D0azvKne.mjs} +7 -7
  74. package/dist/chunks/NcAppSidebar-D0azvKne.mjs.map +1 -0
  75. package/dist/chunks/{NcAvatar-PCbT0J_-.mjs → NcAvatar-Ccw1N-kB.mjs} +12 -14
  76. package/dist/chunks/NcAvatar-Ccw1N-kB.mjs.map +1 -0
  77. package/dist/chunks/{NcBreadcrumb-D9gRzaYP.mjs → NcBreadcrumb-C9ma2_SJ.mjs} +3 -3
  78. package/dist/chunks/{NcBreadcrumb-D9gRzaYP.mjs.map → NcBreadcrumb-C9ma2_SJ.mjs.map} +1 -1
  79. package/dist/chunks/{NcBreadcrumbs-DjqDBMn-.mjs → NcBreadcrumbs-kg_aktAn.mjs} +3 -3
  80. package/dist/chunks/{NcBreadcrumbs-DjqDBMn-.mjs.map → NcBreadcrumbs-kg_aktAn.mjs.map} +1 -1
  81. package/dist/chunks/{NcButton-yN4vYgXb.mjs → NcButton-Df1eAyJ3.mjs} +3 -3
  82. package/dist/chunks/{NcButton-yN4vYgXb.mjs.map → NcButton-Df1eAyJ3.mjs.map} +1 -1
  83. package/dist/chunks/{NcCheckboxRadioSwitch-D9N_BDHh.mjs → NcCheckboxRadioSwitch-D8tOjXwB.mjs} +6 -6
  84. package/dist/chunks/{NcCheckboxRadioSwitch-D9N_BDHh.mjs.map → NcCheckboxRadioSwitch-D8tOjXwB.mjs.map} +1 -1
  85. package/dist/chunks/{NcChip-BPresRp1.mjs → NcChip-Bf2JVPf_.mjs} +5 -5
  86. package/dist/chunks/{NcChip-BPresRp1.mjs.map → NcChip-Bf2JVPf_.mjs.map} +1 -1
  87. package/dist/chunks/{NcCollectionList-BPDCogsB.mjs → NcCollectionList-DtD-RXl8.mjs} +9 -9
  88. package/dist/chunks/{NcCollectionList-BPDCogsB.mjs.map → NcCollectionList-DtD-RXl8.mjs.map} +1 -1
  89. package/dist/chunks/{NcColorPicker-BNpZzN-p.mjs → NcColorPicker-BRIu0Qel.mjs} +7 -7
  90. package/dist/chunks/{NcColorPicker-BNpZzN-p.mjs.map → NcColorPicker-BRIu0Qel.mjs.map} +1 -1
  91. package/dist/chunks/{NcContent-CZKDyVcI.mjs → NcContent-BmXFlXrh.mjs} +5 -5
  92. package/dist/chunks/{NcContent-CZKDyVcI.mjs.map → NcContent-BmXFlXrh.mjs.map} +1 -1
  93. package/dist/chunks/{NcCounterBubble-PBdqn9Nf.mjs → NcCounterBubble-Bop3e-Tr.mjs} +3 -3
  94. package/dist/chunks/{NcCounterBubble-PBdqn9Nf.mjs.map → NcCounterBubble-Bop3e-Tr.mjs.map} +1 -1
  95. package/dist/chunks/{NcDashboardWidget-DhZ5c4oF.mjs → NcDashboardWidget-cBZ_Ub8Q.mjs} +6 -6
  96. package/dist/chunks/{NcDashboardWidget-DhZ5c4oF.mjs.map → NcDashboardWidget-cBZ_Ub8Q.mjs.map} +1 -1
  97. package/dist/chunks/{NcDashboardWidgetItem-pJ-PctjL.mjs → NcDashboardWidgetItem-BnUtMMCC.mjs} +5 -5
  98. package/dist/chunks/{NcDashboardWidgetItem-pJ-PctjL.mjs.map → NcDashboardWidgetItem-BnUtMMCC.mjs.map} +1 -1
  99. package/dist/chunks/{NcDateTimePicker-CKOTExmB.mjs → NcDateTimePicker-Dliaj0xD.mjs} +6 -6
  100. package/dist/chunks/{NcDateTimePicker-CKOTExmB.mjs.map → NcDateTimePicker-Dliaj0xD.mjs.map} +1 -1
  101. package/dist/chunks/{NcDateTimePickerNative-NVYPDSmf.mjs → NcDateTimePickerNative-CEm70Aaw.mjs} +4 -4
  102. package/dist/chunks/{NcDateTimePickerNative-NVYPDSmf.mjs.map → NcDateTimePickerNative-CEm70Aaw.mjs.map} +1 -1
  103. package/dist/chunks/{NcDialog-DTbCOARa.mjs → NcDialog-B_4Lud9m.mjs} +5 -5
  104. package/dist/chunks/{NcDialog-DTbCOARa.mjs.map → NcDialog-B_4Lud9m.mjs.map} +1 -1
  105. package/dist/chunks/{NcDialogButton.vue_vue_type_script_setup_true_lang-DaU1luyJ.mjs → NcDialogButton.vue_vue_type_script_setup_true_lang-d1zLHPqM.mjs} +3 -3
  106. package/dist/chunks/{NcDialogButton.vue_vue_type_script_setup_true_lang-DaU1luyJ.mjs.map → NcDialogButton.vue_vue_type_script_setup_true_lang-d1zLHPqM.mjs.map} +1 -1
  107. package/dist/chunks/{NcEmojiPicker-DHXabPDE.mjs → NcEmojiPicker-DZXHV_Me.mjs} +9 -9
  108. package/dist/chunks/{NcEmojiPicker-DHXabPDE.mjs.map → NcEmojiPicker-DZXHV_Me.mjs.map} +1 -1
  109. package/dist/chunks/{NcGuestContent-B_S2nyJ4.mjs → NcGuestContent-mLXi-A-D.mjs} +3 -3
  110. package/dist/chunks/{NcGuestContent-B_S2nyJ4.mjs.map → NcGuestContent-mLXi-A-D.mjs.map} +1 -1
  111. package/dist/chunks/{NcHeaderButton-BTZ1WNux.mjs → NcHeaderButton-D6LMZ6iL.mjs} +2 -2
  112. package/dist/chunks/{NcHeaderButton-BTZ1WNux.mjs.map → NcHeaderButton-D6LMZ6iL.mjs.map} +1 -1
  113. package/dist/chunks/{NcHeaderMenu-Bf_rW093.mjs → NcHeaderMenu-O0loxc_q.mjs} +4 -4
  114. package/dist/chunks/{NcHeaderMenu-Bf_rW093.mjs.map → NcHeaderMenu-O0loxc_q.mjs.map} +1 -1
  115. package/dist/chunks/{NcInputConfirmCancel-DCUXeKPz.mjs → NcInputConfirmCancel-RRwim02d.mjs} +5 -5
  116. package/dist/chunks/{NcInputConfirmCancel-DCUXeKPz.mjs.map → NcInputConfirmCancel-RRwim02d.mjs.map} +1 -1
  117. package/dist/chunks/{NcInputField-BZWRHkmQ.mjs → NcInputField-DEHb834Z.mjs} +4 -4
  118. package/dist/chunks/NcInputField-DEHb834Z.mjs.map +1 -0
  119. package/dist/chunks/{NcListItem-7BHAmqB0.mjs → NcListItem-C6WoTIa4.mjs} +3 -3
  120. package/dist/chunks/{NcListItem-7BHAmqB0.mjs.map → NcListItem-C6WoTIa4.mjs.map} +1 -1
  121. package/dist/chunks/{NcListItemIcon-gkuv5FT8.mjs → NcListItemIcon-5OKjuvJE.mjs} +2 -2
  122. package/dist/chunks/{NcListItemIcon-gkuv5FT8.mjs.map → NcListItemIcon-5OKjuvJE.mjs.map} +1 -1
  123. package/dist/chunks/{NcModal-CX28vCtF.mjs → NcModal-n7KHhtoD.mjs} +6 -6
  124. package/dist/chunks/{NcModal-CX28vCtF.mjs.map → NcModal-n7KHhtoD.mjs.map} +1 -1
  125. package/dist/chunks/{NcNoteCard-oGt6biyJ.mjs → NcNoteCard-B5CvOJmh.mjs} +3 -3
  126. package/dist/chunks/{NcNoteCard-oGt6biyJ.mjs.map → NcNoteCard-B5CvOJmh.mjs.map} +1 -1
  127. package/dist/chunks/{NcPasswordField-w13_Lpyn.mjs → NcPasswordField-JRyxT6wU.mjs} +5 -5
  128. package/dist/chunks/{NcPasswordField-w13_Lpyn.mjs.map → NcPasswordField-JRyxT6wU.mjs.map} +1 -1
  129. package/dist/chunks/{NcPopover-BUlWWIxc.mjs → NcPopover-DLoAYZgv.mjs} +2 -2
  130. package/dist/chunks/{NcPopover-BUlWWIxc.mjs.map → NcPopover-DLoAYZgv.mjs.map} +1 -1
  131. package/dist/chunks/{NcRelatedResourcesPanel-CpOgjo9h.mjs → NcRelatedResourcesPanel-BBcAt5Fj.mjs} +8 -8
  132. package/dist/chunks/NcRelatedResourcesPanel-BBcAt5Fj.mjs.map +1 -0
  133. package/dist/chunks/{NcRichContenteditable-J9ILu0dF.mjs → NcRichContenteditable-BD6rWjXe.mjs} +25 -25
  134. package/dist/chunks/{NcRichContenteditable-J9ILu0dF.mjs.map → NcRichContenteditable-BD6rWjXe.mjs.map} +1 -1
  135. package/dist/chunks/{NcRichText-DvbC3aUR.mjs → NcRichText-BwC3HU1U.mjs} +67 -53
  136. package/dist/chunks/NcRichText-BwC3HU1U.mjs.map +1 -0
  137. package/dist/chunks/{NcSelect-D6XzjG4n.mjs → NcSelect-DlAtugnK.mjs} +3 -3
  138. package/dist/chunks/{NcSelect-D6XzjG4n.mjs.map → NcSelect-DlAtugnK.mjs.map} +1 -1
  139. package/dist/chunks/{NcSelectTags-SNTGRj-n.mjs → NcSelectTags-N96Vc2rX.mjs} +3 -3
  140. package/dist/chunks/{NcSelectTags-SNTGRj-n.mjs.map → NcSelectTags-N96Vc2rX.mjs.map} +1 -1
  141. package/dist/chunks/{NcSelectUsers-D_eu9Uqb.mjs → NcSelectUsers-BEoD3M8_.mjs} +3 -3
  142. package/dist/chunks/{NcSelectUsers-D_eu9Uqb.mjs.map → NcSelectUsers-BEoD3M8_.mjs.map} +1 -1
  143. package/dist/chunks/{NcSettingsInputText-D5N9XxkW.mjs → NcSettingsInputText-Dh5pxW31.mjs} +4 -4
  144. package/dist/chunks/{NcSettingsInputText-D5N9XxkW.mjs.map → NcSettingsInputText-Dh5pxW31.mjs.map} +1 -1
  145. package/dist/chunks/{NcSettingsSection-93UQoiwe.mjs → NcSettingsSection-DOYZpyIW.mjs} +4 -4
  146. package/dist/chunks/{NcSettingsSection-93UQoiwe.mjs.map → NcSettingsSection-DOYZpyIW.mjs.map} +1 -1
  147. package/dist/chunks/{NcSettingsSelectGroup-Dr4IRbi_.mjs → NcSettingsSelectGroup-CUvIP57B.mjs} +5 -5
  148. package/dist/chunks/{NcSettingsSelectGroup-Dr4IRbi_.mjs.map → NcSettingsSelectGroup-CUvIP57B.mjs.map} +1 -1
  149. package/dist/chunks/{NcTextArea-CWqnvMl2.mjs → NcTextArea-BTKWGbc1.mjs} +3 -3
  150. package/dist/chunks/{NcTextArea-CWqnvMl2.mjs.map → NcTextArea-BTKWGbc1.mjs.map} +1 -1
  151. package/dist/chunks/{NcTextField.vue_vue_type_script_setup_true_lang-B65hrkLW.mjs → NcTextField.vue_vue_type_script_setup_true_lang-DM5tkqJq.mjs} +3 -3
  152. package/dist/chunks/{NcTextField.vue_vue_type_script_setup_true_lang-B65hrkLW.mjs.map → NcTextField.vue_vue_type_script_setup_true_lang-DM5tkqJq.mjs.map} +1 -1
  153. package/dist/chunks/{NcTimezonePicker.vue_vue_type_script_setup_true_lang-BoH1Njbp.mjs → NcTimezonePicker.vue_vue_type_script_setup_true_lang-CZ5IafBy.mjs} +3 -3
  154. package/dist/chunks/{NcTimezonePicker.vue_vue_type_script_setup_true_lang-BoH1Njbp.mjs.map → NcTimezonePicker.vue_vue_type_script_setup_true_lang-CZ5IafBy.mjs.map} +1 -1
  155. package/dist/chunks/{NcUserBubble-BW0qu6mW.mjs → NcUserBubble-DpGJJxHd.mjs} +3 -3
  156. package/dist/chunks/{NcUserBubble-BW0qu6mW.mjs.map → NcUserBubble-DpGJJxHd.mjs.map} +1 -1
  157. package/dist/chunks/{NcUserStatusIcon-DqQYA-EE.mjs → NcUserStatusIcon-DJ_IKC46.mjs} +4 -4
  158. package/dist/chunks/{NcUserStatusIcon-DqQYA-EE.mjs.map → NcUserStatusIcon-DJ_IKC46.mjs.map} +1 -1
  159. package/dist/chunks/{_l10n-tXci8WM1.mjs → _l10n-_R1HqC4N.mjs} +3 -3
  160. package/dist/chunks/_l10n-_R1HqC4N.mjs.map +1 -0
  161. package/dist/chunks/{autolink-CKPk5rzg.mjs → autolink-Y0rlJ_CI.mjs} +5 -1
  162. package/dist/chunks/autolink-Y0rlJ_CI.mjs.map +1 -0
  163. package/dist/chunks/{colors-BaTbJhvg.mjs → colors-Bws_qBuw.mjs} +2 -2
  164. package/dist/chunks/{colors-BaTbJhvg.mjs.map → colors-Bws_qBuw.mjs.map} +1 -1
  165. package/dist/chunks/constants-Bls5liKo.mjs.map +1 -1
  166. package/dist/chunks/{referencePickerModal-DREcDQKg.mjs → referencePickerModal-BA3NmGQ-.mjs} +26 -30
  167. package/dist/chunks/referencePickerModal-BA3NmGQ-.mjs.map +1 -0
  168. package/dist/components/NcActionButtonGroup/index.mjs +1 -1
  169. package/dist/components/NcActionInput/index.mjs +1 -1
  170. package/dist/components/NcActionTextEditable/index.mjs +1 -1
  171. package/dist/components/NcActions/index.mjs +1 -1
  172. package/dist/components/NcAppContent/index.mjs +1 -1
  173. package/dist/components/NcAppNavigation/index.mjs +1 -1
  174. package/dist/components/NcAppNavigationCaption/index.mjs +1 -1
  175. package/dist/components/NcAppNavigationItem/index.mjs +1 -1
  176. package/dist/components/NcAppNavigationNew/index.mjs +1 -1
  177. package/dist/components/NcAppNavigationNewItem/index.mjs +1 -1
  178. package/dist/components/NcAppNavigationSearch/NcAppNavigationSearch.vue.d.ts +12 -12
  179. package/dist/components/NcAppNavigationSearch/index.mjs +1 -1
  180. package/dist/components/NcAppNavigationSettings/index.mjs +1 -1
  181. package/dist/components/NcAppNavigationToggle/index.mjs +1 -1
  182. package/dist/components/NcAppSettingsDialog/index.mjs +1 -1
  183. package/dist/components/NcAppSidebar/index.mjs +1 -1
  184. package/dist/components/NcAvatar/index.mjs +1 -1
  185. package/dist/components/NcBreadcrumb/index.mjs +1 -1
  186. package/dist/components/NcBreadcrumbs/index.mjs +1 -1
  187. package/dist/components/NcButton/index.mjs +1 -1
  188. package/dist/components/NcCheckboxRadioSwitch/index.mjs +1 -1
  189. package/dist/components/NcChip/index.mjs +1 -1
  190. package/dist/components/NcCollectionList/index.mjs +1 -1
  191. package/dist/components/NcColorPicker/index.mjs +1 -1
  192. package/dist/components/NcContent/index.mjs +1 -1
  193. package/dist/components/NcCounterBubble/index.mjs +1 -1
  194. package/dist/components/NcDashboardWidget/index.mjs +1 -1
  195. package/dist/components/NcDashboardWidgetItem/index.mjs +1 -1
  196. package/dist/components/NcDateTimePicker/NcDateTimePicker.vue.d.ts +2 -2
  197. package/dist/components/NcDateTimePicker/index.mjs +1 -1
  198. package/dist/components/NcDateTimePickerNative/index.mjs +1 -1
  199. package/dist/components/NcDialog/index.mjs +1 -1
  200. package/dist/components/NcDialogButton/index.mjs +1 -1
  201. package/dist/components/NcEmojiPicker/index.mjs +1 -1
  202. package/dist/components/NcGuestContent/index.mjs +1 -1
  203. package/dist/components/NcHeaderButton/index.mjs +1 -1
  204. package/dist/components/NcHeaderMenu/index.mjs +1 -1
  205. package/dist/components/NcInputField/index.mjs +1 -1
  206. package/dist/components/NcListItem/index.mjs +1 -1
  207. package/dist/components/NcListItemIcon/index.mjs +1 -1
  208. package/dist/components/NcModal/index.mjs +1 -1
  209. package/dist/components/NcNoteCard/index.mjs +1 -1
  210. package/dist/components/NcPasswordField/index.mjs +1 -1
  211. package/dist/components/NcPopover/index.mjs +1 -1
  212. package/dist/components/NcRelatedResourcesPanel/index.mjs +1 -1
  213. package/dist/components/NcRichContenteditable/index.mjs +1 -1
  214. package/dist/components/NcRichText/NcReferencePicker/utils.d.ts +6 -7
  215. package/dist/components/NcRichText/helpers.d.ts +7 -8
  216. package/dist/components/NcRichText/index.d.ts +4 -4
  217. package/dist/components/NcRichText/index.mjs +3 -3
  218. package/dist/components/NcRichText/remarkPlaceholder.d.ts +2 -0
  219. package/dist/components/NcRichText/remarkUnescape.d.ts +2 -1
  220. package/dist/components/NcSelect/index.mjs +1 -1
  221. package/dist/components/NcSelectTags/index.mjs +1 -1
  222. package/dist/components/NcSelectUsers/index.mjs +1 -1
  223. package/dist/components/NcSettingsInputText/index.mjs +1 -1
  224. package/dist/components/NcSettingsSection/index.mjs +1 -1
  225. package/dist/components/NcSettingsSelectGroup/index.mjs +1 -1
  226. package/dist/components/NcTextArea/index.mjs +1 -1
  227. package/dist/components/NcTextField/index.mjs +1 -1
  228. package/dist/components/NcTimezonePicker/index.mjs +1 -1
  229. package/dist/components/NcUserBubble/index.mjs +1 -1
  230. package/dist/components/NcUserStatusIcon/index.mjs +1 -1
  231. package/dist/composables/useFormatDateTime/index.mjs +1 -1
  232. package/dist/composables/useFormatDateTime/index.mjs.map +1 -1
  233. package/dist/composables/useIsDarkTheme/constants.d.ts +1 -1
  234. package/dist/composables/useIsDarkTheme/index.mjs +1 -1
  235. package/dist/composables/useIsDarkTheme/index.mjs.map +1 -1
  236. package/dist/functions/index.d.ts +2 -2
  237. package/dist/functions/reference/index.mjs +1 -1
  238. package/dist/functions/usernameToColor/index.d.ts +6 -3
  239. package/dist/functions/usernameToColor/index.mjs +19 -2
  240. package/dist/functions/usernameToColor/index.mjs.map +1 -1
  241. package/dist/index.mjs +60 -59
  242. package/dist/index.mjs.map +1 -1
  243. package/dist/l10n.d.ts +7 -2
  244. package/package.json +9 -10
  245. package/dist/assets/NcActionInput-BA67jS1l.css +0 -226
  246. package/dist/assets/NcDateTimePickerNative-BizATZfE.css +0 -60
  247. package/dist/chunks/NcAppSidebar-DWRmX_-Y.mjs.map +0 -1
  248. package/dist/chunks/NcAvatar-PCbT0J_-.mjs.map +0 -1
  249. package/dist/chunks/NcInputField-BZWRHkmQ.mjs.map +0 -1
  250. package/dist/chunks/NcRelatedResourcesPanel-CpOgjo9h.mjs.map +0 -1
  251. package/dist/chunks/NcRichText-DvbC3aUR.mjs.map +0 -1
  252. package/dist/chunks/_l10n-tXci8WM1.mjs.map +0 -1
  253. package/dist/chunks/autolink-CKPk5rzg.mjs.map +0 -1
  254. package/dist/chunks/referencePickerModal-DREcDQKg.mjs.map +0 -1
  255. package/dist/chunks/usernameToColor-2yV_Zdvb.mjs +0 -22
  256. package/dist/chunks/usernameToColor-2yV_Zdvb.mjs.map +0 -1
  257. package/dist/components/NcRichText/placeholder.d.ts +0 -5
  258. package/dist/components/NcRichText/remarkDisableBlocks.d.ts +0 -11
  259. package/dist/functions/usernameToColor/usernameToColor.d.ts +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"NcTextArea-CWqnvMl2.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 v-model=\"text\"\n\t\t\tlabel=\"Text area\"\n\t\t\tplaceholder=\"Placeholders are possible\"\n\t\t\thelper-text=\"This is a regular helper text.\" />\n\t\t<NcTextArea label=\"Success state\"\n\t\t\t:success=\"true\" />\n\t\t<NcTextArea label=\"Error state\"\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 label=\"Disabled\"\n\t\t\t:disabled=\"true\" />\n\t\t<NcTextArea label=\"Disabled + Success\"\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\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\tresize=\"none\"\n\t\t\trows=\"5\" />\n\t</div>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\ttext: 'This is text.',\n\t\t}\n\t},\n}\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<script setup lang=\"ts\">\nimport type { VueClassType } from '../../utils/VueTypes.ts'\n\nimport { mdiAlertCircle, mdiCheck } from '@mdi/js'\nimport { computed, useAttrs, useTemplateRef, watch } from 'vue'\nimport { createElementId } from '../../utils/createElementId.ts'\nimport NcIconSvgWrapper from '../NcIconSvgWrapper/NcIconSvgWrapper.vue'\nimport logger from '../../utils/logger.ts'\n\ndefineOptions({ inheritAttrs: false })\n\ndefineExpose({\n\tfocus,\n\tselect,\n})\n\nconst props = withDefaults(defineProps<{\n\t/**\n\t * Disable the text area\n\t */\n\tdisabled?: boolean\n\n\t/**\n\t * Toggles the error state of the component.\n\t * Adds an error icon.\n\t */\n\terror?: boolean\n\n\t/**\n\t * Additional helper text message\n\t *\n\t * This will be displayed beneath the input field. In case the field is\n\t * also marked as having an error, the text will be displayed in red.\n\t */\n\thelperText?: string\n\n\t/**\n\t * The id of the textarea element\n\t */\n\tid?: string\n\n\t/**\n\t * Class to add to the `<textarea>` element.\n\t */\n\tinputClass?: VueClassType\n\n\t/**\n\t * The input label, always provide one for accessibility purposes.\n\t * This will also be used as a placeholder unless the placeholder\n\t * prop is populated with a different string.\n\t */\n\tlabel?: string\n\n\t/**\n\t * Pass in true if you want to use an external label. This is useful\n\t * if you need a label that looks different from the one provided by\n\t * this component\n\t */\n\tlabelOutside?: boolean\n\n\t/**\n\t * The placeholder of the input. This defaults as the string that's\n\t * passed into the label prop. In order to remove the placeholder,\n\t * pass in an empty string.\n\t */\n\tplaceholder?: string\n\n\t/**\n\t * The resize CSS property sets whether an element is resizable, and if\n\t * so, in which directions.\n\t */\n\tresize?: 'both' | 'vertical' | 'horizontal' | 'none'\n\n\t/**\n\t * Toggles the success state of the component.\n\t * Adds a checkmark icon.\n\t */\n\tsuccess?: boolean\n}>(), {\n\thelperText: undefined,\n\tid: () => createElementId(),\n\tinputClass: '',\n\tlabel: undefined,\n\tplaceholder: undefined,\n\tresize: 'both',\n})\n\n/**\n * The value of the text area\n */\nconst modelValue = defineModel<string>({ required: true })\n\n/**\n * The native text area component instance\n */\nconst textAreaElement = useTemplateRef('input')\n\n// needs to be a getter as attrs are not reactive\nconst attrs = useAttrs()\n\n// warn about invalid labels (missing label and no label outside)\nwatch(() => props.labelOutside, () => {\n\tif (!props.labelOutside && !props.label) {\n\t\tlogger.warn('[NcTextArea] 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}\n})\n\nconst ariaDescribedby = computed(() => {\n\tconst ariaDescribedby: string[] = []\n\tif (props.helperText) {\n\t\tariaDescribedby.push(`${props.id}-helper-text`)\n\t}\n\tif (typeof attrs['aria-describedby'] === 'string') {\n\t\tariaDescribedby.push(attrs['aria-describedby'])\n\t}\n\treturn ariaDescribedby.join(' ') || undefined\n})\n\n/**\n * Update the model value to the text area value.\n *\n * @param event - The input event\n */\nfunction handleInput(event: Event) {\n\tconst { value } = event.target as HTMLTextAreaElement\n\tmodelValue.value = value\n}\n\n/**\n * Focus the input element\n *\n * @param options - Focus options\n * @public\n */\nfunction focus(options?: FocusOptions) {\n\ttextAreaElement.value!.focus(options)\n}\n\n/**\n * Select all the text in the input\n *\n * @public\n */\nfunction select() {\n\ttextAreaElement.value!.select()\n}\n</script>\n\n<template>\n\t<div class=\"textarea\" :class=\"[$attrs.class, { 'textarea--disabled': disabled }]\">\n\t\t<div class=\"textarea__main-wrapper\">\n\t\t\t<textarea v-bind=\"{ ...$attrs, class: undefined }\"\n\t\t\t\t:id\n\t\t\t\tref=\"input\"\n\t\t\t\t:aria-describedby\n\t\t\t\taria-live=\"polite\"\n\t\t\t\tclass=\"textarea__input\"\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:disabled\n\t\t\t\t:placeholder=\"placeholder || label\"\n\t\t\t\t:style=\"{ resize }\"\n\t\t\t\t:value=\"modelValue\"\n\t\t\t\t@input=\"handleInput\" />\n\t\t\t<!-- Label -->\n\t\t\t<label v-if=\"!labelOutside\"\n\t\t\t\tclass=\"textarea__label\"\n\t\t\t\t:for=\"id\">\n\t\t\t\t{{ label }}\n\t\t\t</label>\n\t\t</div>\n\t\t<p v-if=\"helperText\"\n\t\t\t:id=\"`${id}-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<NcIconSvgWrapper v-if=\"success\" class=\"textarea__helper-text-message__icon\" :path=\"mdiCheck\" />\n\t\t\t<NcIconSvgWrapper v-else-if=\"error\" class=\"textarea__helper-text-message__icon\" :path=\"mdiAlertCircle\" />\n\t\t\t{{ helperText }}\n\t\t</p>\n\t</div>\n</template>\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":["_useModel","ariaDescribedby"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoFa,aAAA;AAAA,MACZ;AAAA,MACA;AAAA,IAAA,CACA;AAED,UAAM,QAAQ;AA0ER,UAAA,aAAaA,SAAsC,SAAA,YAAA;AAKnD,UAAA,kBAAkB,eAAe,OAAO;AAG9C,UAAM,QAAQ,SAAS;AAGjB,UAAA,MAAM,MAAM,cAAc,MAAM;AACrC,UAAI,CAAC,MAAM,gBAAgB,CAAC,MAAM,OAAO;AACxC,eAAO,KAAK,gKAAgK;AAAA,MAAA;AAAA,IAC7K,CACA;AAEK,UAAA,kBAAkB,SAAS,MAAM;AACtC,YAAMC,mBAA4B,CAAC;AACnC,UAAI,MAAM,YAAY;AACrBA,yBAAgB,KAAK,GAAG,MAAM,EAAE,cAAc;AAAA,MAAA;AAE/C,UAAI,OAAO,MAAM,kBAAkB,MAAM,UAAU;AAClDA,yBAAgB,KAAK,MAAM,kBAAkB,CAAC;AAAA,MAAA;AAExCA,aAAAA,iBAAgB,KAAK,GAAG,KAAK;AAAA,IAAA,CACpC;AAOD,aAAS,YAAY,OAAc;AAC5B,YAAA,EAAE,UAAU,MAAM;AACxB,iBAAW,QAAQ;AAAA,IAAA;AASpB,aAAS,MAAM,SAAwB;AACtB,sBAAA,MAAO,MAAM,OAAO;AAAA,IAAA;AAQrC,aAAS,SAAS;AACjB,sBAAgB,MAAO,OAAO;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"NcTextArea-BTKWGbc1.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 v-model=\"text\"\n\t\t\tlabel=\"Text area\"\n\t\t\tplaceholder=\"Placeholders are possible\"\n\t\t\thelper-text=\"This is a regular helper text.\" />\n\t\t<NcTextArea label=\"Success state\"\n\t\t\t:success=\"true\" />\n\t\t<NcTextArea label=\"Error state\"\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 label=\"Disabled\"\n\t\t\t:disabled=\"true\" />\n\t\t<NcTextArea label=\"Disabled + Success\"\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\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\tresize=\"none\"\n\t\t\trows=\"5\" />\n\t</div>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\ttext: 'This is text.',\n\t\t}\n\t},\n}\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<script setup lang=\"ts\">\nimport type { VueClassType } from '../../utils/VueTypes.ts'\n\nimport { mdiAlertCircle, mdiCheck } from '@mdi/js'\nimport { computed, useAttrs, useTemplateRef, watch } from 'vue'\nimport { createElementId } from '../../utils/createElementId.ts'\nimport NcIconSvgWrapper from '../NcIconSvgWrapper/NcIconSvgWrapper.vue'\nimport logger from '../../utils/logger.ts'\n\ndefineOptions({ inheritAttrs: false })\n\ndefineExpose({\n\tfocus,\n\tselect,\n})\n\nconst props = withDefaults(defineProps<{\n\t/**\n\t * Disable the text area\n\t */\n\tdisabled?: boolean\n\n\t/**\n\t * Toggles the error state of the component.\n\t * Adds an error icon.\n\t */\n\terror?: boolean\n\n\t/**\n\t * Additional helper text message\n\t *\n\t * This will be displayed beneath the input field. In case the field is\n\t * also marked as having an error, the text will be displayed in red.\n\t */\n\thelperText?: string\n\n\t/**\n\t * The id of the textarea element\n\t */\n\tid?: string\n\n\t/**\n\t * Class to add to the `<textarea>` element.\n\t */\n\tinputClass?: VueClassType\n\n\t/**\n\t * The input label, always provide one for accessibility purposes.\n\t * This will also be used as a placeholder unless the placeholder\n\t * prop is populated with a different string.\n\t */\n\tlabel?: string\n\n\t/**\n\t * Pass in true if you want to use an external label. This is useful\n\t * if you need a label that looks different from the one provided by\n\t * this component\n\t */\n\tlabelOutside?: boolean\n\n\t/**\n\t * The placeholder of the input. This defaults as the string that's\n\t * passed into the label prop. In order to remove the placeholder,\n\t * pass in an empty string.\n\t */\n\tplaceholder?: string\n\n\t/**\n\t * The resize CSS property sets whether an element is resizable, and if\n\t * so, in which directions.\n\t */\n\tresize?: 'both' | 'vertical' | 'horizontal' | 'none'\n\n\t/**\n\t * Toggles the success state of the component.\n\t * Adds a checkmark icon.\n\t */\n\tsuccess?: boolean\n}>(), {\n\thelperText: undefined,\n\tid: () => createElementId(),\n\tinputClass: '',\n\tlabel: undefined,\n\tplaceholder: undefined,\n\tresize: 'both',\n})\n\n/**\n * The value of the text area\n */\nconst modelValue = defineModel<string>({ required: true })\n\n/**\n * The native text area component instance\n */\nconst textAreaElement = useTemplateRef('input')\n\n// needs to be a getter as attrs are not reactive\nconst attrs = useAttrs()\n\n// warn about invalid labels (missing label and no label outside)\nwatch(() => props.labelOutside, () => {\n\tif (!props.labelOutside && !props.label) {\n\t\tlogger.warn('[NcTextArea] 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}\n})\n\nconst ariaDescribedby = computed(() => {\n\tconst ariaDescribedby: string[] = []\n\tif (props.helperText) {\n\t\tariaDescribedby.push(`${props.id}-helper-text`)\n\t}\n\tif (typeof attrs['aria-describedby'] === 'string') {\n\t\tariaDescribedby.push(attrs['aria-describedby'])\n\t}\n\treturn ariaDescribedby.join(' ') || undefined\n})\n\n/**\n * Update the model value to the text area value.\n *\n * @param event - The input event\n */\nfunction handleInput(event: Event) {\n\tconst { value } = event.target as HTMLTextAreaElement\n\tmodelValue.value = value\n}\n\n/**\n * Focus the input element\n *\n * @param options - Focus options\n * @public\n */\nfunction focus(options?: FocusOptions) {\n\ttextAreaElement.value!.focus(options)\n}\n\n/**\n * Select all the text in the input\n *\n * @public\n */\nfunction select() {\n\ttextAreaElement.value!.select()\n}\n</script>\n\n<template>\n\t<div class=\"textarea\" :class=\"[$attrs.class, { 'textarea--disabled': disabled }]\">\n\t\t<div class=\"textarea__main-wrapper\">\n\t\t\t<textarea v-bind=\"{ ...$attrs, class: undefined }\"\n\t\t\t\t:id\n\t\t\t\tref=\"input\"\n\t\t\t\t:aria-describedby\n\t\t\t\taria-live=\"polite\"\n\t\t\t\tclass=\"textarea__input\"\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:disabled\n\t\t\t\t:placeholder=\"placeholder || label\"\n\t\t\t\t:style=\"{ resize }\"\n\t\t\t\t:value=\"modelValue\"\n\t\t\t\t@input=\"handleInput\" />\n\t\t\t<!-- Label -->\n\t\t\t<label v-if=\"!labelOutside\"\n\t\t\t\tclass=\"textarea__label\"\n\t\t\t\t:for=\"id\">\n\t\t\t\t{{ label }}\n\t\t\t</label>\n\t\t</div>\n\t\t<p v-if=\"helperText\"\n\t\t\t:id=\"`${id}-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<NcIconSvgWrapper v-if=\"success\" class=\"textarea__helper-text-message__icon\" :path=\"mdiCheck\" />\n\t\t\t<NcIconSvgWrapper v-else-if=\"error\" class=\"textarea__helper-text-message__icon\" :path=\"mdiAlertCircle\" />\n\t\t\t{{ helperText }}\n\t\t</p>\n\t</div>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.textarea {\n\tposition: relative;\n\twidth: 100%;\n\tborder-radius: var(--border-radius-element);\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-element);\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":["_useModel","ariaDescribedby"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoFa,aAAA;AAAA,MACZ;AAAA,MACA;AAAA,IAAA,CACA;AAED,UAAM,QAAQ;AA0ER,UAAA,aAAaA,SAAsC,SAAA,YAAA;AAKnD,UAAA,kBAAkB,eAAe,OAAO;AAG9C,UAAM,QAAQ,SAAS;AAGjB,UAAA,MAAM,MAAM,cAAc,MAAM;AACrC,UAAI,CAAC,MAAM,gBAAgB,CAAC,MAAM,OAAO;AACxC,eAAO,KAAK,gKAAgK;AAAA,MAAA;AAAA,IAC7K,CACA;AAEK,UAAA,kBAAkB,SAAS,MAAM;AACtC,YAAMC,mBAA4B,CAAC;AACnC,UAAI,MAAM,YAAY;AACrBA,yBAAgB,KAAK,GAAG,MAAM,EAAE,cAAc;AAAA,MAAA;AAE/C,UAAI,OAAO,MAAM,kBAAkB,MAAM,UAAU;AAClDA,yBAAgB,KAAK,MAAM,kBAAkB,CAAC;AAAA,MAAA;AAExCA,aAAAA,iBAAgB,KAAK,GAAG,KAAK;AAAA,IAAA,CACpC;AAOD,aAAS,YAAY,OAAc;AAC5B,YAAA,EAAE,UAAU,MAAM;AACxB,iBAAW,QAAQ;AAAA,IAAA;AASpB,aAAS,MAAM,SAAwB;AACtB,sBAAA,MAAO,MAAM,OAAO;AAAA,IAAA;AAQrC,aAAS,SAAS;AACjB,sBAAgB,MAAO,OAAO;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,8 +1,8 @@
1
1
  import { defineComponent, mergeModels, useModel, useTemplateRef, computed, createBlock, openBlock, unref, mergeProps, createSlots, withCtx, renderSlot } from "vue";
2
2
  import { m as mdiArrowRight, a as mdiUndo, b as mdiClose } from "./mdi-D6fu5i4r.mjs";
3
3
  import { N as NcIconSvgWrapper } from "./NcIconSvgWrapper-CprKb_SE.mjs";
4
- import { N as NcInputField } from "./NcInputField-BZWRHkmQ.mjs";
5
- import { r as register, a as t } from "./_l10n-tXci8WM1.mjs";
4
+ import { N as NcInputField } from "./NcInputField-DEHb834Z.mjs";
5
+ import { r as register, a as t } from "./_l10n-_R1HqC4N.mjs";
6
6
  register();
7
7
  const _sfc_main = /* @__PURE__ */ defineComponent({
8
8
  __name: "NcTextField",
@@ -89,4 +89,4 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
89
89
  export {
90
90
  _sfc_main as _
91
91
  };
92
- //# sourceMappingURL=NcTextField.vue_vue_type_script_setup_true_lang-B65hrkLW.mjs.map
92
+ //# sourceMappingURL=NcTextField.vue_vue_type_script_setup_true_lang-DM5tkqJq.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"NcTextField.vue_vue_type_script_setup_true_lang-B65hrkLW.mjs","sources":["../../src/components/NcTextField/NcTextField.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\n### Description\nSee [NcInputField](#/Components/NcFields?id=ncinputfield) for a list of all available props.\n\nGeneral purpose text field component.\nIt is recommended to not only provide a placeholder, but also a label.\nThe label should describe what input is expected and the placehold what format the input should have.\n\nNote: the inner html `input` element inherits all the attributes from the\nNcTextField component so you can add things like `autocomplete`, `maxlength`\nand `minlength`.\n\n```\n<template>\n\t<div class=\"wrapper\">\n\t\t<NcTextField v-model=\"text1\"\n\t\t\tlabel=\"Leading icon and clear trailing button\"\n\t\t\ttrailing-button-icon=\"close\"\n\t\t\t:show-trailing-button=\"text1 !== ''\"\n\t\t\t@trailing-button-click=\"clearText\">\n\t\t\t<template #icon>\n\t\t\t\t<Magnify :size=\"20\" />\n\t\t\t</template>\n\t\t</NcTextField>\n\t\t<NcTextField v-model=\"text4\"\n\t\t\tlabel=\"Internal label\"\n\t\t\tplaceholder=\"That can be used together with placeholder\"\n\t\t\ttrailing-button-icon=\"close\"\n\t\t\t:show-trailing-button=\"text4 !== ''\"\n\t\t\t@trailing-button-click=\"clearText\">\n\t\t\t<template #icon>\n\t\t\t\t<Lock :size=\"20\" />\n\t\t\t</template>\n\t\t</NcTextField>\n\t\t<NcTextField v-model=\"text2\"\n\t\t\tlabel=\"With helper text\"\n\t\t\thelper-text=\"This is an optional message to show e.g. validation errors.\"\n\t\t\t@trailing-button-click=\"clearText\">\n\t\t</NcTextField>\n\t\t<NcTextField v-model=\"text2\"\n\t\t\tlabel=\"Success state\"\n\t\t\tplaceholder=\"Placeholders are possible\"\n\t\t\t:success=\"true\"\n\t\t\t@trailing-button-click=\"clearText\">\n\t\t</NcTextField>\n\t\t<NcTextField v-model=\"text3\"\n\t\t\tlabel=\"Error state\"\n\t\t\tplaceholder=\"Enter something valid\"\n\t\t\t:error=\"true\"\n\t\t\t@trailing-button-click=\"clearText\">\n\t\t</NcTextField>\n\t\t<NcTextField :model-value=\"\"\n\t\t\tlabel=\"Disabled\"\n\t\t\t:disabled=\"true\" />\n\t\t<NcTextField :model-value=\"\"\n\t\t\tlabel=\"Disabled + Success\"\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<NcTextField v-model=\"text5\"\n\t\t\t\tid=\"textField\"\n\t\t\t\t:label-outside=\"true\"\n\t\t\t\tplaceholder=\"Input with external label\"\n\t\t\t\t@trailing-button-click=\"clearText\" />\n\t\t</div>\n\t</div>\n</template>\n<script>\nimport Magnify from 'vue-material-design-icons/Magnify'\nimport Lock from 'vue-material-design-icons/Lock'\nimport Close from 'vue-material-design-icons/Close'\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\ttext1: '',\n\t\t\ttext2: '',\n\t\t\ttext3: '',\n\t\t\ttext4: '',\n\t\t\ttext5: '',\n\t\t}\n\t},\n\n\tcomponents: {\n\t\tMagnify,\n\t\tLock,\n\t\tClose,\n\t},\n\n\tmethods: {\n\t\tclearText() {\n\t\t\tthis.text1 = ''\n\t\t\tthis.text3 = ''\n\t\t}\n\t}\n}\n</script>\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\tgap: 14px;\n\twidth: 100%;\n\tmargin-top: 1rem;\n}\n\n.external-label label {\n\tpadding-top: 7px;\n\twhite-space: nowrap;\n}\n</style>\n```\n</docs>\n\n<template>\n\t<NcInputField v-bind=\"propsToForward\"\n\t\tref=\"inputField\"\n\t\tv-model=\"modelValue\">\n\t\t<template v-if=\"!!$slots.icon\" #icon>\n\t\t\t<slot name=\"icon\" />\n\t\t</template>\n\n\t\t<!-- Trailing icon slot, except for search type input as the browser already adds a trailing close icon -->\n\t\t<template v-if=\"type !== 'search'\" #trailing-button-icon>\n\t\t\t<NcIconSvgWrapper v-if=\"trailingButtonIcon === 'arrowEnd'\" directional :path=\"mdiArrowRight\" />\n\t\t\t<NcIconSvgWrapper v-else :path=\"trailingButtonIcon === 'undo' ? mdiUndo : mdiClose\" />\n\t\t</template>\n\t</NcInputField>\n</template>\n\n<script setup lang=\"ts\">\nimport type { Slot } from 'vue'\nimport type { NcInputFieldProps } from '../NcInputField/index.ts'\n\nimport { mdiArrowRight, mdiClose, mdiUndo } from '@mdi/js'\nimport { computed, useTemplateRef } from 'vue'\nimport NcIconSvgWrapper from '../NcIconSvgWrapper/index.ts'\nimport NcInputField from '../NcInputField/index.ts'\nimport { t } from '../../l10n.js'\n\nconst props = withDefaults(defineProps<NcInputFieldProps & {\n\t/**\n\t * Specifies which material design icon should be used for the trailing button.\n\t */\n\ttrailingButtonIcon?: 'arrowEnd' | 'close' | 'undo'\n\n\t/**\n\t * The `aria-label` to set on the trailing button\n\t * If no explicit value is set it will default to the one matching the `trailingButtonIcon`:\n\t * - 'Clear text'\n\t * - 'Save changes'\n\t * - 'Undo changes'\n\t */\n\ttrailingButtonLabel?: string\n}>(), {\n\ttrailingButtonIcon: 'close',\n\ttrailingButtonLabel: undefined,\n})\n\n/**\n * The value of the input field\n * If type is 'number' and a number is passed as value than the type of `update:value` will also be 'number'\n */\nconst modelValue = defineModel<string | number>('modelValue', { default: '' })\n\n// public API\ndefineExpose({\n\tfocus,\n\tselect,\n})\n\ndefineSlots<{\n\t/**\n\t * Leading icon, set the size to 20.\n\t */\n\ticon?: Slot\n}>()\n\nconst inputField = useTemplateRef('inputField')\n\nconst defaultTrailingButtonLabels = {\n\tarrowEnd: t('Save changes'),\n\tclose: t('Clear text'),\n\tundo: t('Undo changes'),\n}\n\nconst NcInputFieldPropNames = new Set(Object.keys(NcInputField.props))\nconst propsToForward = computed<NcInputFieldProps>(() => {\n\tconst sharedProps = Object.fromEntries(\n\t\tObject.entries(props)\n\t\t\t.filter(([key]) => NcInputFieldPropNames.has(key)),\n\t)\n\n\tsharedProps.trailingButtonLabel ??= defaultTrailingButtonLabels[props.trailingButtonIcon]\n\treturn sharedProps satisfies NcInputFieldProps\n})\n\n/**\n * Focus the input element\n *\n * @param options - Focus options\n * @public\n */\nfunction focus(options?: FocusOptions) {\n\tinputField.value!.focus(options)\n}\n\n/**\n * Select all the text in the input\n *\n * @public\n */\nfunction select() {\n\tinputField.value!.select()\n}\n</script>\n"],"names":["_useModel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwJA,UAAM,QAAQ;AAuBR,UAAA,aAAaA,SAA4B,SAAC,YAA6B;AAGhE,aAAA;AAAA,MACZ;AAAA,MACA;AAAA,IAAA,CACA;AASK,UAAA,aAAa,eAAe,YAAY;AAE9C,UAAM,8BAA8B;AAAA,MACnC,UAAU,EAAE,cAAc;AAAA,MAC1B,OAAO,EAAE,YAAY;AAAA,MACrB,MAAM,EAAE,cAAc;AAAA,IACvB;AAEA,UAAM,wBAAwB,IAAI,IAAI,OAAO,KAAK,aAAa,KAAK,CAAC;AAC/D,UAAA,iBAAiB,SAA4B,MAAM;AACxD,YAAM,cAAc,OAAO;AAAA,QAC1B,OAAO,QAAQ,KAAK,EAClB,OAAO,CAAC,CAAC,GAAG,MAAM,sBAAsB,IAAI,GAAG,CAAC;AAAA,MACnD;AAEY,kBAAA,wBAAwB,4BAA4B,MAAM,kBAAkB;AACjF,aAAA;AAAA,IAAA,CACP;AAQD,aAAS,MAAM,SAAwB;AAC3B,iBAAA,MAAO,MAAM,OAAO;AAAA,IAAA;AAQhC,aAAS,SAAS;AACjB,iBAAW,MAAO,OAAO;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"NcTextField.vue_vue_type_script_setup_true_lang-DM5tkqJq.mjs","sources":["../../src/components/NcTextField/NcTextField.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\n### Description\nSee [NcInputField](#/Components/NcFields?id=ncinputfield) for a list of all available props.\n\nGeneral purpose text field component.\nIt is recommended to not only provide a placeholder, but also a label.\nThe label should describe what input is expected and the placehold what format the input should have.\n\nNote: the inner html `input` element inherits all the attributes from the\nNcTextField component so you can add things like `autocomplete`, `maxlength`\nand `minlength`.\n\n```\n<template>\n\t<div class=\"wrapper\">\n\t\t<NcTextField v-model=\"text1\"\n\t\t\tlabel=\"Leading icon and clear trailing button\"\n\t\t\ttrailing-button-icon=\"close\"\n\t\t\t:show-trailing-button=\"text1 !== ''\"\n\t\t\t@trailing-button-click=\"clearText\">\n\t\t\t<template #icon>\n\t\t\t\t<Magnify :size=\"20\" />\n\t\t\t</template>\n\t\t</NcTextField>\n\t\t<NcTextField v-model=\"text4\"\n\t\t\tlabel=\"Internal label\"\n\t\t\tplaceholder=\"That can be used together with placeholder\"\n\t\t\ttrailing-button-icon=\"close\"\n\t\t\t:show-trailing-button=\"text4 !== ''\"\n\t\t\t@trailing-button-click=\"clearText\">\n\t\t\t<template #icon>\n\t\t\t\t<Lock :size=\"20\" />\n\t\t\t</template>\n\t\t</NcTextField>\n\t\t<NcTextField v-model=\"text2\"\n\t\t\tlabel=\"With helper text\"\n\t\t\thelper-text=\"This is an optional message to show e.g. validation errors.\"\n\t\t\t@trailing-button-click=\"clearText\">\n\t\t</NcTextField>\n\t\t<NcTextField v-model=\"text2\"\n\t\t\tlabel=\"Success state\"\n\t\t\tplaceholder=\"Placeholders are possible\"\n\t\t\t:success=\"true\"\n\t\t\t@trailing-button-click=\"clearText\">\n\t\t</NcTextField>\n\t\t<NcTextField v-model=\"text3\"\n\t\t\tlabel=\"Error state\"\n\t\t\tplaceholder=\"Enter something valid\"\n\t\t\t:error=\"true\"\n\t\t\t@trailing-button-click=\"clearText\">\n\t\t</NcTextField>\n\t\t<NcTextField :model-value=\"\"\n\t\t\tlabel=\"Disabled\"\n\t\t\t:disabled=\"true\" />\n\t\t<NcTextField :model-value=\"\"\n\t\t\tlabel=\"Disabled + Success\"\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<NcTextField v-model=\"text5\"\n\t\t\t\tid=\"textField\"\n\t\t\t\t:label-outside=\"true\"\n\t\t\t\tplaceholder=\"Input with external label\"\n\t\t\t\t@trailing-button-click=\"clearText\" />\n\t\t</div>\n\t</div>\n</template>\n<script>\nimport Magnify from 'vue-material-design-icons/Magnify'\nimport Lock from 'vue-material-design-icons/Lock'\nimport Close from 'vue-material-design-icons/Close'\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\ttext1: '',\n\t\t\ttext2: '',\n\t\t\ttext3: '',\n\t\t\ttext4: '',\n\t\t\ttext5: '',\n\t\t}\n\t},\n\n\tcomponents: {\n\t\tMagnify,\n\t\tLock,\n\t\tClose,\n\t},\n\n\tmethods: {\n\t\tclearText() {\n\t\t\tthis.text1 = ''\n\t\t\tthis.text3 = ''\n\t\t}\n\t}\n}\n</script>\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\tgap: 14px;\n\twidth: 100%;\n\tmargin-top: 1rem;\n}\n\n.external-label label {\n\tpadding-top: 7px;\n\twhite-space: nowrap;\n}\n</style>\n```\n</docs>\n\n<template>\n\t<NcInputField v-bind=\"propsToForward\"\n\t\tref=\"inputField\"\n\t\tv-model=\"modelValue\">\n\t\t<template v-if=\"!!$slots.icon\" #icon>\n\t\t\t<slot name=\"icon\" />\n\t\t</template>\n\n\t\t<!-- Trailing icon slot, except for search type input as the browser already adds a trailing close icon -->\n\t\t<template v-if=\"type !== 'search'\" #trailing-button-icon>\n\t\t\t<NcIconSvgWrapper v-if=\"trailingButtonIcon === 'arrowEnd'\" directional :path=\"mdiArrowRight\" />\n\t\t\t<NcIconSvgWrapper v-else :path=\"trailingButtonIcon === 'undo' ? mdiUndo : mdiClose\" />\n\t\t</template>\n\t</NcInputField>\n</template>\n\n<script setup lang=\"ts\">\nimport type { Slot } from 'vue'\nimport type { NcInputFieldProps } from '../NcInputField/index.ts'\n\nimport { mdiArrowRight, mdiClose, mdiUndo } from '@mdi/js'\nimport { computed, useTemplateRef } from 'vue'\nimport NcIconSvgWrapper from '../NcIconSvgWrapper/index.ts'\nimport NcInputField from '../NcInputField/index.ts'\nimport { t } from '../../l10n.ts'\n\nconst props = withDefaults(defineProps<NcInputFieldProps & {\n\t/**\n\t * Specifies which material design icon should be used for the trailing button.\n\t */\n\ttrailingButtonIcon?: 'arrowEnd' | 'close' | 'undo'\n\n\t/**\n\t * The `aria-label` to set on the trailing button\n\t * If no explicit value is set it will default to the one matching the `trailingButtonIcon`:\n\t * - 'Clear text'\n\t * - 'Save changes'\n\t * - 'Undo changes'\n\t */\n\ttrailingButtonLabel?: string\n}>(), {\n\ttrailingButtonIcon: 'close',\n\ttrailingButtonLabel: undefined,\n})\n\n/**\n * The value of the input field\n * If type is 'number' and a number is passed as value than the type of `update:value` will also be 'number'\n */\nconst modelValue = defineModel<string | number>('modelValue', { default: '' })\n\n// public API\ndefineExpose({\n\tfocus,\n\tselect,\n})\n\ndefineSlots<{\n\t/**\n\t * Leading icon, set the size to 20.\n\t */\n\ticon?: Slot\n}>()\n\nconst inputField = useTemplateRef('inputField')\n\nconst defaultTrailingButtonLabels = {\n\tarrowEnd: t('Save changes'),\n\tclose: t('Clear text'),\n\tundo: t('Undo changes'),\n}\n\nconst NcInputFieldPropNames = new Set(Object.keys(NcInputField.props))\nconst propsToForward = computed<NcInputFieldProps>(() => {\n\tconst sharedProps = Object.fromEntries(\n\t\tObject.entries(props)\n\t\t\t.filter(([key]) => NcInputFieldPropNames.has(key)),\n\t)\n\n\tsharedProps.trailingButtonLabel ??= defaultTrailingButtonLabels[props.trailingButtonIcon]\n\treturn sharedProps satisfies NcInputFieldProps\n})\n\n/**\n * Focus the input element\n *\n * @param options - Focus options\n * @public\n */\nfunction focus(options?: FocusOptions) {\n\tinputField.value!.focus(options)\n}\n\n/**\n * Select all the text in the input\n *\n * @public\n */\nfunction select() {\n\tinputField.value!.select()\n}\n</script>\n"],"names":["_useModel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwJA,UAAM,QAAQ;AAuBR,UAAA,aAAaA,SAA4B,SAAC,YAA6B;AAGhE,aAAA;AAAA,MACZ;AAAA,MACA;AAAA,IAAA,CACA;AASK,UAAA,aAAa,eAAe,YAAY;AAE9C,UAAM,8BAA8B;AAAA,MACnC,UAAU,EAAE,cAAc;AAAA,MAC1B,OAAO,EAAE,YAAY;AAAA,MACrB,MAAM,EAAE,cAAc;AAAA,IACvB;AAEA,UAAM,wBAAwB,IAAI,IAAI,OAAO,KAAK,aAAa,KAAK,CAAC;AAC/D,UAAA,iBAAiB,SAA4B,MAAM;AACxD,YAAM,cAAc,OAAO;AAAA,QAC1B,OAAO,QAAQ,KAAK,EAClB,OAAO,CAAC,CAAC,GAAG,MAAM,sBAAsB,IAAI,GAAG,CAAC;AAAA,MACnD;AAEY,kBAAA,wBAAwB,4BAA4B,MAAM,kBAAkB;AACjF,aAAA;AAAA,IAAA,CACP;AAQD,aAAS,MAAM,SAAwB;AAC3B,iBAAA,MAAO,MAAM,OAAO;AAAA,IAAA;AAQhC,aAAS,SAAS;AACjB,iBAAW,MAAO,OAAO;AAAA,IAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,8 +1,8 @@
1
1
  import { defineComponent, mergeModels, useModel, computed, createBlock, openBlock, unref } from "vue";
2
2
  import { getTimezoneManager as getTimezoneManager$1, getReadableTimezoneName, getSortedTimezoneList } from "@nextcloud/timezones";
3
3
  import { c as createElementId } from "./createElementId-DhjFt1I9.mjs";
4
- import { r as register, a as t } from "./_l10n-tXci8WM1.mjs";
5
- import { N as NcSelect } from "./NcSelect-D6XzjG4n.mjs";
4
+ import { r as register, a as t } from "./_l10n-_R1HqC4N.mjs";
5
+ import { N as NcSelect } from "./NcSelect-DlAtugnK.mjs";
6
6
  register();
7
7
  const timezoneManager = getTimezoneManager$1();
8
8
  let initialized = false;
@@ -95,4 +95,4 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
95
95
  export {
96
96
  _sfc_main as _
97
97
  };
98
- //# sourceMappingURL=NcTimezonePicker.vue_vue_type_script_setup_true_lang-BoH1Njbp.mjs.map
98
+ //# sourceMappingURL=NcTimezonePicker.vue_vue_type_script_setup_true_lang-CZ5IafBy.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"NcTimezonePicker.vue_vue_type_script_setup_true_lang-BoH1Njbp.mjs","sources":["../../src/components/NcTimezonePicker/timezoneDataProviderService.ts","../../src/components/NcTimezonePicker/NcTimezonePicker.vue"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getTimezoneManager } from '@nextcloud/timezones'\n\nconst timezoneManager = getTimezoneManager()\nlet initialized = false\n\n/**\n * Gets the timezone-manager\n * initializes it if necessary\n *\n * @return {object}\n */\nexport default function() {\n\tif (!initialized) {\n\t\ttimezoneManager.registerDefaultTimezones()\n\t\tinitialized = true\n\t}\n\n\treturn timezoneManager\n}\n","<!--\n - SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\n### Example\n```vue\n<template>\n\t<span>\n\t\t<NcTimezonePicker v-model=\"tz\" />\n\t\t{{ tz }}\n\t</span>\n</template>\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\ttz: 'Hawaiian Standard Time',\n\t\t}\n\t},\n}\n</script>\n```\n</docs>\n\n<script setup lang=\"ts\">\nimport type {\n\tIContinent,\n\tITimezone,\n\tIRegion,\n} from '@nextcloud/timezones'\n\nimport {\n\tgetReadableTimezoneName,\n\tgetSortedTimezoneList,\n} from '@nextcloud/timezones'\nimport { computed } from 'vue'\nimport { createElementId } from '../../utils/createElementId.ts'\nimport { t } from '../../l10n.js'\nimport getTimezoneManager from './timezoneDataProviderService.js'\nimport NcSelect from '../NcSelect/index.js'\n\nconst props = withDefaults(defineProps<{\n\t/**\n\t * An array of additional timezones to include with the standard database. Useful if there is a custom timezone, e.g. read from user data\n\t */\n\tadditionalTimezones?: ITimezone[]\n\n\t/**\n\t * ID of the inner vue-select element, can be used for labels like: `vs-${uid}__combobox`\n\t */\n\tuid?: string\n}>(), {\n\tadditionalTimezones: () => [],\n\tuid: createElementId(),\n})\n\n/**\n * The selected timezone.\n * Use v-model for two-way binding.\n * The default timezone is floating, which means a time independent of timezone. See https://icalendar.org/CalDAV-Access-RFC-4791/7-3-date-and-floating-time.html for details.\n */\nconst modelValue = defineModel<string>({ default: 'floating' })\n\nconst selectedTimezone = computed({\n\tset(timezone: IRegion) {\n\t\tmodelValue.value = timezone.timezoneId\n\t},\n\tget(): IRegion {\n\t\tfor (const additionalTimezone of props.additionalTimezones) {\n\t\t\tif (additionalTimezone.timezoneId === modelValue.value) {\n\t\t\t\treturn {\n\t\t\t\t\tcities: [],\n\t\t\t\t\t...additionalTimezone,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tlabel: getReadableTimezoneName(modelValue.value),\n\t\t\ttimezoneId: modelValue.value,\n\t\t\tcities: [],\n\t\t}\n\t},\n})\n\nconst options = computed(() => {\n\tconst timezoneManager = getTimezoneManager()\n\tconst timezoneList: IContinent[] = getSortedTimezoneList(\n\t\ttimezoneManager.listAllTimezones(),\n\t\tprops.additionalTimezones,\n\t\tt('Global'), // TRANSLATORS: This refers to global timezones in the timezone picker\n\t)\n\t/**\n\t * Since NcSelect does not support groups,\n\t * we create an object with the grouped timezones and continent labels.\n\t *\n\t * NOTE for now we are removing the grouping from the fields to fix an accessibility issue\n\t * in the future, other options can be introduced to better display the different areas\n\t */\n\tconst timezonesGrouped: IRegion[] = []\n\tfor (const group of Object.values(timezoneList)) {\n\t\t// Add an entry as group label\n\t\t// const continent = `tz-group__${group.continent}`\n\t\t// timezonesGrouped.push({\n\t\t// label: group.continent,\n\t\t// continent,\n\t\t// timezoneId: continent,\n\t\t// regions: group.regions,\n\t\t// })\n\t\ttimezonesGrouped.push(...group.regions)\n\t}\n\treturn timezonesGrouped\n})\n\n/**\n * Returns whether this is a continent label,\n * or an actual timezone. Continent labels are not selectable.\n *\n * @param option The option\n */\nfunction isSelectable(option: IRegion): boolean {\n\treturn !option.timezoneId.startsWith('tz-group__')\n}\n\n/**\n * Function to filter the timezone list.\n * We search in the timezoneId, so both continent and region names can be matched.\n *\n * @param option - The timezone option\n * @param label - The label of the timezone\n * @param search - The search string\n */\nfunction filterBy(option: IContinent | IRegion, label: string, search: string): boolean {\n\t// We split the search term in case one searches \"<continent> <region>\".\n\tconst terms = search.trim().split(' ')\n\n\t// For the continent labels, we have to check if one region matches every search term.\n\tif ('continent' in option) {\n\t\treturn option.regions.some(region => {\n\t\t\treturn matchTimezoneId(region.timezoneId, terms)\n\t\t})\n\t}\n\n\t// For a region, every search term must be found.\n\treturn matchTimezoneId(option.timezoneId, terms)\n}\n\n/**\n * @param timezoneId - The timezone id to check\n * @param terms - Terms to validate\n */\nfunction matchTimezoneId(timezoneId: string, terms: string[]): boolean {\n\treturn terms.every((term) => timezoneId.toLowerCase().includes(term.toLowerCase()))\n}\n</script>\n\n<template>\n\t<NcSelect v-model=\"selectedTimezone\"\n\t\t:aria-label-combobox=\"t('Search for timezone')\"\n\t\t:clearable=\"false\"\n\t\t:filter-by\n\t\t:multiple=\"false\"\n\t\t:options\n\t\t:placeholder=\"t('Type to search time zone')\"\n\t\t:selectable=\"isSelectable\"\n\t\t:uid\n\t\tlabel=\"label\" />\n</template>\n"],"names":["getTimezoneManager","_useModel","timezoneManager"],"mappings":";;;;;;AAOA,MAAM,kBAAkBA,qBAAmB;AAC3C,IAAI,cAAc;AAQQ,SAAA,qBAAA;AACzB,MAAI,CAAC,aAAa;AACjB,oBAAgB,yBAAyB;AAC3B,kBAAA;AAAA,EAAA;AAGR,SAAA;AACR;;;;;;;;;;;;ACoBA,UAAM,QAAQ;AAoBR,UAAA,aAAaC,SAA2C,SAAA,YAAA;AAE9D,UAAM,mBAAmB,SAAS;AAAA,MACjC,IAAI,UAAmB;AACtB,mBAAW,QAAQ,SAAS;AAAA,MAC7B;AAAA,MACA,MAAe;AACH,mBAAA,sBAAsB,MAAM,qBAAqB;AACvD,cAAA,mBAAmB,eAAe,WAAW,OAAO;AAChD,mBAAA;AAAA,cACN,QAAQ,CAAC;AAAA,cACT,GAAG;AAAA,YACJ;AAAA,UAAA;AAAA,QACD;AAGM,eAAA;AAAA,UACN,OAAO,wBAAwB,WAAW,KAAK;AAAA,UAC/C,YAAY,WAAW;AAAA,UACvB,QAAQ,CAAA;AAAA,QACT;AAAA,MAAA;AAAA,IACD,CACA;AAEK,UAAA,UAAU,SAAS,MAAM;AAC9B,YAAMC,mBAAkB,mBAAmB;AAC3C,YAAM,eAA6B;AAAA,QAClCA,iBAAgB,iBAAiB;AAAA,QACjC,MAAM;AAAA,QACN,EAAE,QAAQ;AAAA;AAAA,MACX;AAQA,YAAM,mBAA8B,CAAC;AACrC,iBAAW,SAAS,OAAO,OAAO,YAAY,GAAG;AAS/B,yBAAA,KAAK,GAAG,MAAM,OAAO;AAAA,MAAA;AAEhC,aAAA;AAAA,IAAA,CACP;AAQD,aAAS,aAAa,QAA0B;AAC/C,aAAO,CAAC,OAAO,WAAW,WAAW,YAAY;AAAA,IAAA;AAWzC,aAAA,SAAS,QAA8B,OAAe,QAAyB;AAEvF,YAAM,QAAQ,OAAO,KAAK,EAAE,MAAM,GAAG;AAGrC,UAAI,eAAe,QAAQ;AACnB,eAAA,OAAO,QAAQ,KAAK,CAAU,WAAA;AAC7B,iBAAA,gBAAgB,OAAO,YAAY,KAAK;AAAA,QAAA,CAC/C;AAAA,MAAA;AAIK,aAAA,gBAAgB,OAAO,YAAY,KAAK;AAAA,IAAA;AAOvC,aAAA,gBAAgB,YAAoB,OAA0B;AAC/D,aAAA,MAAM,MAAM,CAAC,SAAS,WAAW,YAAY,EAAE,SAAS,KAAK,YAAY,CAAC,CAAC;AAAA,IAAA;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"NcTimezonePicker.vue_vue_type_script_setup_true_lang-CZ5IafBy.mjs","sources":["../../src/components/NcTimezonePicker/timezoneDataProviderService.ts","../../src/components/NcTimezonePicker/NcTimezonePicker.vue"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getTimezoneManager } from '@nextcloud/timezones'\n\nconst timezoneManager = getTimezoneManager()\nlet initialized = false\n\n/**\n * Gets the timezone-manager\n * initializes it if necessary\n *\n * @return {object}\n */\nexport default function() {\n\tif (!initialized) {\n\t\ttimezoneManager.registerDefaultTimezones()\n\t\tinitialized = true\n\t}\n\n\treturn timezoneManager\n}\n","<!--\n - SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\n### Example\n```vue\n<template>\n\t<span>\n\t\t<NcTimezonePicker v-model=\"tz\" />\n\t\t{{ tz }}\n\t</span>\n</template>\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\ttz: 'Hawaiian Standard Time',\n\t\t}\n\t},\n}\n</script>\n```\n</docs>\n\n<script setup lang=\"ts\">\nimport type {\n\tIContinent,\n\tITimezone,\n\tIRegion,\n} from '@nextcloud/timezones'\n\nimport {\n\tgetReadableTimezoneName,\n\tgetSortedTimezoneList,\n} from '@nextcloud/timezones'\nimport { computed } from 'vue'\nimport { createElementId } from '../../utils/createElementId.ts'\nimport { t } from '../../l10n.ts'\nimport getTimezoneManager from './timezoneDataProviderService.js'\nimport NcSelect from '../NcSelect/index.js'\n\nconst props = withDefaults(defineProps<{\n\t/**\n\t * An array of additional timezones to include with the standard database. Useful if there is a custom timezone, e.g. read from user data\n\t */\n\tadditionalTimezones?: ITimezone[]\n\n\t/**\n\t * ID of the inner vue-select element, can be used for labels like: `vs-${uid}__combobox`\n\t */\n\tuid?: string\n}>(), {\n\tadditionalTimezones: () => [],\n\tuid: createElementId(),\n})\n\n/**\n * The selected timezone.\n * Use v-model for two-way binding.\n * The default timezone is floating, which means a time independent of timezone. See https://icalendar.org/CalDAV-Access-RFC-4791/7-3-date-and-floating-time.html for details.\n */\nconst modelValue = defineModel<string>({ default: 'floating' })\n\nconst selectedTimezone = computed({\n\tset(timezone: IRegion) {\n\t\tmodelValue.value = timezone.timezoneId\n\t},\n\tget(): IRegion {\n\t\tfor (const additionalTimezone of props.additionalTimezones) {\n\t\t\tif (additionalTimezone.timezoneId === modelValue.value) {\n\t\t\t\treturn {\n\t\t\t\t\tcities: [],\n\t\t\t\t\t...additionalTimezone,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tlabel: getReadableTimezoneName(modelValue.value),\n\t\t\ttimezoneId: modelValue.value,\n\t\t\tcities: [],\n\t\t}\n\t},\n})\n\nconst options = computed(() => {\n\tconst timezoneManager = getTimezoneManager()\n\tconst timezoneList: IContinent[] = getSortedTimezoneList(\n\t\ttimezoneManager.listAllTimezones(),\n\t\tprops.additionalTimezones,\n\t\tt('Global'), // TRANSLATORS: This refers to global timezones in the timezone picker\n\t)\n\t/**\n\t * Since NcSelect does not support groups,\n\t * we create an object with the grouped timezones and continent labels.\n\t *\n\t * NOTE for now we are removing the grouping from the fields to fix an accessibility issue\n\t * in the future, other options can be introduced to better display the different areas\n\t */\n\tconst timezonesGrouped: IRegion[] = []\n\tfor (const group of Object.values(timezoneList)) {\n\t\t// Add an entry as group label\n\t\t// const continent = `tz-group__${group.continent}`\n\t\t// timezonesGrouped.push({\n\t\t// label: group.continent,\n\t\t// continent,\n\t\t// timezoneId: continent,\n\t\t// regions: group.regions,\n\t\t// })\n\t\ttimezonesGrouped.push(...group.regions)\n\t}\n\treturn timezonesGrouped\n})\n\n/**\n * Returns whether this is a continent label,\n * or an actual timezone. Continent labels are not selectable.\n *\n * @param option The option\n */\nfunction isSelectable(option: IRegion): boolean {\n\treturn !option.timezoneId.startsWith('tz-group__')\n}\n\n/**\n * Function to filter the timezone list.\n * We search in the timezoneId, so both continent and region names can be matched.\n *\n * @param option - The timezone option\n * @param label - The label of the timezone\n * @param search - The search string\n */\nfunction filterBy(option: IContinent | IRegion, label: string, search: string): boolean {\n\t// We split the search term in case one searches \"<continent> <region>\".\n\tconst terms = search.trim().split(' ')\n\n\t// For the continent labels, we have to check if one region matches every search term.\n\tif ('continent' in option) {\n\t\treturn option.regions.some(region => {\n\t\t\treturn matchTimezoneId(region.timezoneId, terms)\n\t\t})\n\t}\n\n\t// For a region, every search term must be found.\n\treturn matchTimezoneId(option.timezoneId, terms)\n}\n\n/**\n * @param timezoneId - The timezone id to check\n * @param terms - Terms to validate\n */\nfunction matchTimezoneId(timezoneId: string, terms: string[]): boolean {\n\treturn terms.every((term) => timezoneId.toLowerCase().includes(term.toLowerCase()))\n}\n</script>\n\n<template>\n\t<NcSelect v-model=\"selectedTimezone\"\n\t\t:aria-label-combobox=\"t('Search for timezone')\"\n\t\t:clearable=\"false\"\n\t\t:filter-by\n\t\t:multiple=\"false\"\n\t\t:options\n\t\t:placeholder=\"t('Type to search time zone')\"\n\t\t:selectable=\"isSelectable\"\n\t\t:uid\n\t\tlabel=\"label\" />\n</template>\n"],"names":["getTimezoneManager","_useModel","timezoneManager"],"mappings":";;;;;;AAOA,MAAM,kBAAkBA,qBAAmB;AAC3C,IAAI,cAAc;AAQQ,SAAA,qBAAA;AACzB,MAAI,CAAC,aAAa;AACjB,oBAAgB,yBAAyB;AAC3B,kBAAA;AAAA,EAAA;AAGR,SAAA;AACR;;;;;;;;;;;;ACoBA,UAAM,QAAQ;AAoBR,UAAA,aAAaC,SAA2C,SAAA,YAAA;AAE9D,UAAM,mBAAmB,SAAS;AAAA,MACjC,IAAI,UAAmB;AACtB,mBAAW,QAAQ,SAAS;AAAA,MAC7B;AAAA,MACA,MAAe;AACH,mBAAA,sBAAsB,MAAM,qBAAqB;AACvD,cAAA,mBAAmB,eAAe,WAAW,OAAO;AAChD,mBAAA;AAAA,cACN,QAAQ,CAAC;AAAA,cACT,GAAG;AAAA,YACJ;AAAA,UAAA;AAAA,QACD;AAGM,eAAA;AAAA,UACN,OAAO,wBAAwB,WAAW,KAAK;AAAA,UAC/C,YAAY,WAAW;AAAA,UACvB,QAAQ,CAAA;AAAA,QACT;AAAA,MAAA;AAAA,IACD,CACA;AAEK,UAAA,UAAU,SAAS,MAAM;AAC9B,YAAMC,mBAAkB,mBAAmB;AAC3C,YAAM,eAA6B;AAAA,QAClCA,iBAAgB,iBAAiB;AAAA,QACjC,MAAM;AAAA,QACN,EAAE,QAAQ;AAAA;AAAA,MACX;AAQA,YAAM,mBAA8B,CAAC;AACrC,iBAAW,SAAS,OAAO,OAAO,YAAY,GAAG;AAS/B,yBAAA,KAAK,GAAG,MAAM,OAAO;AAAA,MAAA;AAEhC,aAAA;AAAA,IAAA,CACP;AAQD,aAAS,aAAa,QAA0B;AAC/C,aAAO,CAAC,OAAO,WAAW,WAAW,YAAY;AAAA,IAAA;AAWzC,aAAA,SAAS,QAA8B,OAAe,QAAyB;AAEvF,YAAM,QAAQ,OAAO,KAAK,EAAE,MAAM,GAAG;AAGrC,UAAI,eAAe,QAAQ;AACnB,eAAA,OAAO,QAAQ,KAAK,CAAU,WAAA;AAC7B,iBAAA,gBAAgB,OAAO,YAAY,KAAK;AAAA,QAAA,CAC/C;AAAA,MAAA;AAIK,aAAA,gBAAgB,OAAO,YAAY,KAAK;AAAA,IAAA;AAOvC,aAAA,gBAAgB,YAAoB,OAA0B;AAC/D,aAAA,MAAM,MAAM,CAAC,SAAS,WAAW,YAAY,EAAE,SAAS,KAAK,YAAY,CAAC,CAAC;AAAA,IAAA;;;;;;;;;;;;;;;;;;"}
@@ -1,8 +1,8 @@
1
1
  import '../assets/NcUserBubble-CqaL0Oxv.css';
2
2
  import { createElementBlock, openBlock, renderSlot, defineComponent, mergeModels, useModel, computed, warn, watch, createBlock, resolveDynamicComponent, unref, withCtx, mergeProps, createVNode, createElementVNode, createCommentVNode, normalizeStyle, toDisplayString } from "vue";
3
3
  import { _ as _export_sfc } from "./_plugin-vue_export-helper-1tPrXgE0.mjs";
4
- import { N as NcAvatar } from "./NcAvatar-PCbT0J_-.mjs";
5
- import { N as NcPopover } from "./NcPopover-BUlWWIxc.mjs";
4
+ import { N as NcAvatar } from "./NcAvatar-Ccw1N-kB.mjs";
5
+ import { N as NcPopover } from "./NcPopover-DLoAYZgv.mjs";
6
6
  import { RouterLink } from "vue-router";
7
7
  const _sfc_main$1 = {};
8
8
  function _sfc_render(_ctx, _cache) {
@@ -133,4 +133,4 @@ const NcUserBubble = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data
133
133
  export {
134
134
  NcUserBubble as N
135
135
  };
136
- //# sourceMappingURL=NcUserBubble-BW0qu6mW.mjs.map
136
+ //# sourceMappingURL=NcUserBubble-DpGJJxHd.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"NcUserBubble-BW0qu6mW.mjs","sources":["../../src/components/NcUserBubble/NcUserBubbleDiv.vue","../../src/components/NcUserBubble/NcUserBubble.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\n</script>\n\n<template>\n\t<div>\n\t\t<slot name=\"trigger\" />\n\t</div>\n</template>\n","<!--\n - SPDX-FileCopyrightText: 2019 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 a user together with a small avatar in a grey bubble.\nIt's possible to use an actual user's avatar, just an image/icon as a url or an icon-class,\nto link the bubble to e.g. a users profile\nand to show a popover on hover with e.g. the full user name handle / email address or something else.\n\nThis component has the following slot:\n* a default slot which is for the content of the popover (this is passed to the popover component directly).\n\n### Examples\n\n```vue\n<p>\n\tSome text before <NcUserBubble user=\"admin\" display-name=\"Admin Example\" url=\"/test\">@admin@foreign-host.com</NcUserBubble> and after the bubble.\n\t<NcUserBubble avatar-image=\"icon-group\" display-name=\"test group xyz\" :primary=\"true\">Hey there!</NcUserBubble>\n</p>\n```\n\n### Example with name slot\n\n```vue\n<template>\n<NcUserBubble\n\t:size=\"34\"\n\tdisplay-name=\"Administrator\"\n\tuser=\"admin\">\n\t<template #name>\n\t\t<NcButton aria-label=\"Remove user\"\n\t\t\tvariant=\"tertiary-no-background\"\n\t\t\t@click=\"alert\">\n\t\t\t<template #icon>\n\t\t\t\t<NcIconSvgWrapper :path=\"mdiClose\" />\n\t\t\t</template>\n\t\t</NcButton>\n\t</template>\n</NcUserBubble>\n</template>\n<script>\nimport { mdiClose } from '@mdi/js'\n\nexport default {\n\tsetup() {\n\t\treturn {\n\t\t\tmdiClose,\n\t\t}\n\t},\n\tmethods: {\n\t\talert() {\n\t\t\talert('Removed')\n\t\t},\n\t},\n}\n</script>\n```\n\n</docs>\n\n<script setup lang=\"ts\">\nimport type { RouteLocation } from 'vue-router'\n\nimport NcUserBubbleDiv from './NcUserBubbleDiv.vue'\nimport NcAvatar from '../NcAvatar/index.js'\nimport NcPopover from '../NcPopover/index.js'\nimport { computed, warn, watch, type Slot } from 'vue'\nimport { RouterLink } from 'vue-router'\n\nconst props = withDefaults(defineProps<{\n\t/**\n\t * Override generated avatar, can be an url or an icon class\n\t */\n\tavatarImage?: string\n\n\t/**\n\t * Provide the user id if this is a user\n\t */\n\tuser?: string\n\n\t/**\n\t * Displayed label\n\t */\n\tdisplayName?: string\n\n\t/**\n\t * Whether or not to display the user-status\n\t */\n\tshowUserStatus?: boolean\n\n\t/**\n\t * Define the whole bubble as a link\n\t */\n\turl?: string\n\n\t/**\n\t * Use bubble as a router-link for in-app navigation\n\t */\n\tto?: RouteLocation\n\n\t/**\n\t * Use the primary colour\n\t */\n\tprimary?: boolean\n\n\t/**\n\t * This is the height of the component\n\t */\n\tsize?: number\n\n\t/**\n\t * This is the margin of the avatar (size - margin = avatar size)\n\t */\n\tmargin?: number\n}>(), {\n\tavatarImage: undefined,\n\tdisplayName: undefined,\n\tuser: undefined,\n\turl: undefined,\n\tto: undefined,\n\tmargin: 2,\n\tsize: 20,\n})\n\nconst emit = defineEmits<{\n\t/**\n\t * The mouse click event\n\t */\n\tclick: [event: MouseEvent]\n}>()\n\ndefineSlots<{\n\t/**\n\t * Main Popover content on userbubble hover/focus\n\t */\n\tdefault?: Slot\n\n\t/**\n\t * Optional slot just after the name\n\t */\n\tname?: Slot\n}>()\n\n/**\n * Default popover state. Requires the UserBubble\n * to have some content to render inside the popover\n */\nconst isOpen = defineModel<boolean>('open')\n\n/**\n * Is the provided avatar url valid or not\n */\nconst isAvatarUrl = computed(() => {\n\tif (!props.avatarImage) {\n\t\treturn false\n\t}\n\n\ttry {\n\t\tconst url = new URL(props.avatarImage)\n\t\treturn !!url\n\t} catch (error) {\n\t\treturn false\n\t}\n})\n\n/**\n * Do we have a custom avatar or not\n */\nconst isCustomAvatar = computed(() => !!props.avatarImage)\n\nconst avatarStyle = computed(() => ({\n\tmarginInlineStart: `${props.margin}px`,\n}))\n\n/**\n * Is the URL prop set\n */\nconst hasUrl = computed(() => {\n\tif (!props.url || props.url.trim() === '') {\n\t\treturn false\n\t}\n\ttry {\n\t\tconst url = new URL(props.url, props.url?.startsWith?.('/') ? window.location.href : undefined)\n\t\treturn !!url\n\t} catch (error) {\n\t\twarn('[NcUserBubble] Invalid URL passed', { url: props.url })\n\t\treturn false\n\t}\n})\n\n/**\n * href attribute to pass to content container\n */\nconst href = computed(() => hasUrl.value ? props.url : undefined)\n\nconst contentComponent = computed(() => {\n\tif (hasUrl.value) {\n\t\treturn 'a'\n\t} else if (props.to) {\n\t\treturn RouterLink\n\t} else {\n\t\treturn 'div'\n\t}\n})\n\nconst contentStyle = computed(() => ({\n\theight: `${props.size}px`,\n\tlineHeight: `${props.size}px`,\n\tborderRadius: `${props.size / 2}px`,\n}))\n\nwatch([() => props.displayName, () => props.user], () => {\n\tif (!props.displayName && !props.user) {\n\t\twarn('[NcUserBubble] At least `displayName` or `user` property should be set.')\n\t}\n})\n</script>\n\n<template>\n\t<component :is=\"!!$slots.default ? NcPopover : NcUserBubbleDiv\"\n\t\tv-model:shown=\"isOpen\"\n\t\tclass=\"user-bubble__wrapper\"\n\t\ttrigger=\"hover focus\">\n\t\t<!-- Main userbubble structure -->\n\t\t<template #trigger=\"{ attrs }\">\n\t\t\t<component :is=\"contentComponent\"\n\t\t\t\tclass=\"user-bubble__content\"\n\t\t\t\t:class=\"{ 'user-bubble__content--primary': primary }\"\n\t\t\t\t:style=\"contentStyle\"\n\t\t\t\t:to\n\t\t\t\t:href\n\t\t\t\tv-bind=\"attrs\"\n\t\t\t\t@click=\"emit('click', $event)\">\n\t\t\t\t<!-- NcAvatar -->\n\t\t\t\t<NcAvatar :url=\"isCustomAvatar && isAvatarUrl ? avatarImage : undefined\"\n\t\t\t\t\t:icon-class=\"isCustomAvatar && !isAvatarUrl ? avatarImage : undefined\"\n\t\t\t\t\t:user=\"user\"\n\t\t\t\t\t:display-name=\"displayName\"\n\t\t\t\t\t:size=\"size - (margin * 2)\"\n\t\t\t\t\t:style=\"avatarStyle\"\n\t\t\t\t\t:disable-tooltip=\"true\"\n\t\t\t\t\t:disable-menu=\"true\"\n\t\t\t\t\t:hide-status=\"!showUserStatus\"\n\t\t\t\t\tclass=\"user-bubble__avatar\" />\n\n\t\t\t\t<!-- Name -->\n\t\t\t\t<span class=\"user-bubble__name\">\n\t\t\t\t\t{{ displayName || user }}\n\t\t\t\t</span>\n\n\t\t\t\t<span v-if=\"!!$slots.name\" class=\"user-bubble__secondary\">\n\t\t\t\t\t<slot name=\"name\" />\n\t\t\t\t</span>\n\t\t\t</component>\n\t\t</template>\n\n\t\t<slot />\n\t</component>\n</template>\n\n<style lang=\"scss\" scoped>\n.user-bubble {\n\t&__wrapper {\n\t\t// align inline with text\n\t\tdisplay: inline-block;\n\t\tvertical-align: middle;\n\t\t// shrink and allow grow to fit\n\t\tmin-width: 0;\n\t\tmax-width: 100%;\n\t}\n\n\t&__content {\n\t\tdisplay: inline-flex;\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-background-dark);\n\n\t\t&--primary {\n\t\t\tcolor: var(--color-primary-element-text);\n\t\t\tbackground-color: var(--color-primary-element);\n\t\t}\n\n\t\t> :last-child {\n\t\t\t// border radius end padding\n\t\t\tpadding-inline-end: 8px;\n\t\t}\n\t}\n\n\t&__avatar {\n\t\talign-self: center;\n\t}\n\n\t&__name {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t&__name,\n\t&__secondary {\n\t\t// proper spacing between avatar, name & slot\n\t\tpadding-block: 0;\n\t\tpadding-inline: 4px 0;\n\t}\n}\n</style>\n"],"names":["_openBlock","_createElementBlock","_useModel"],"mappings":";;;;;;2BAWO,QAAA;SADkBA,UAAA,GAAAC,mBAAA,OAAA,MAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACgEzB,UAAM,QAAQ;AAuDd,UAAM,OAAO;AAuBP,UAAA,SAASC,SAAoB,SAAC,MAAM;AAKpC,UAAA,cAAc,SAAS,MAAM;AAC9B,UAAA,CAAC,MAAM,aAAa;AAChB,eAAA;AAAA,MAAA;AAGJ,UAAA;AACH,cAAM,MAAM,IAAI,IAAI,MAAM,WAAW;AACrC,eAAO,CAAC,CAAC;AAAA,eACD,OAAO;AACR,eAAA;AAAA,MAAA;AAAA,IACR,CACA;AAKD,UAAM,iBAAiB,SAAS,MAAM,CAAC,CAAC,MAAM,WAAW;AAEnD,UAAA,cAAc,SAAS,OAAO;AAAA,MACnC,mBAAmB,GAAG,MAAM,MAAM;AAAA,IAAA,EACjC;AAKI,UAAA,SAAS,SAAS,MAAM;AAC7B,UAAI,CAAC,MAAM,OAAO,MAAM,IAAI,WAAW,IAAI;AACnC,eAAA;AAAA,MAAA;AAEJ,UAAA;AACH,cAAM,MAAM,IAAI,IAAI,MAAM,KAAK,MAAM,KAAK,aAAa,GAAG,IAAI,OAAO,SAAS,OAAO,MAAS;AAC9F,eAAO,CAAC,CAAC;AAAA,eACD,OAAO;AACf,aAAK,qCAAqC,EAAE,KAAK,MAAM,KAAK;AACrD,eAAA;AAAA,MAAA;AAAA,IACR,CACA;AAKD,UAAM,OAAO,SAAS,MAAM,OAAO,QAAQ,MAAM,MAAM,MAAS;AAE1D,UAAA,mBAAmB,SAAS,MAAM;AACvC,UAAI,OAAO,OAAO;AACV,eAAA;AAAA,MAAA,WACG,MAAM,IAAI;AACb,eAAA;AAAA,MAAA,OACD;AACC,eAAA;AAAA,MAAA;AAAA,IACR,CACA;AAEK,UAAA,eAAe,SAAS,OAAO;AAAA,MACpC,QAAQ,GAAG,MAAM,IAAI;AAAA,MACrB,YAAY,GAAG,MAAM,IAAI;AAAA,MACzB,cAAc,GAAG,MAAM,OAAO,CAAC;AAAA,IAAA,EAC9B;AAEI,UAAA,CAAC,MAAM,MAAM,aAAa,MAAM,MAAM,IAAI,GAAG,MAAM;AACxD,UAAI,CAAC,MAAM,eAAe,CAAC,MAAM,MAAM;AACtC,aAAK,yEAAyE;AAAA,MAAA;AAAA,IAC/E,CACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"NcUserBubble-DpGJJxHd.mjs","sources":["../../src/components/NcUserBubble/NcUserBubbleDiv.vue","../../src/components/NcUserBubble/NcUserBubble.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\n</script>\n\n<template>\n\t<div>\n\t\t<slot name=\"trigger\" />\n\t</div>\n</template>\n","<!--\n - SPDX-FileCopyrightText: 2019 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 a user together with a small avatar in a grey bubble.\nIt's possible to use an actual user's avatar, just an image/icon as a url or an icon-class,\nto link the bubble to e.g. a users profile\nand to show a popover on hover with e.g. the full user name handle / email address or something else.\n\nThis component has the following slot:\n* a default slot which is for the content of the popover (this is passed to the popover component directly).\n\n### Examples\n\n```vue\n<p>\n\tSome text before <NcUserBubble user=\"admin\" display-name=\"Admin Example\" url=\"/test\">@admin@foreign-host.com</NcUserBubble> and after the bubble.\n\t<NcUserBubble avatar-image=\"icon-group\" display-name=\"test group xyz\" :primary=\"true\">Hey there!</NcUserBubble>\n</p>\n```\n\n### Example with name slot\n\n```vue\n<template>\n<NcUserBubble\n\t:size=\"34\"\n\tdisplay-name=\"Administrator\"\n\tuser=\"admin\">\n\t<template #name>\n\t\t<NcButton aria-label=\"Remove user\"\n\t\t\tvariant=\"tertiary-no-background\"\n\t\t\t@click=\"alert\">\n\t\t\t<template #icon>\n\t\t\t\t<NcIconSvgWrapper :path=\"mdiClose\" />\n\t\t\t</template>\n\t\t</NcButton>\n\t</template>\n</NcUserBubble>\n</template>\n<script>\nimport { mdiClose } from '@mdi/js'\n\nexport default {\n\tsetup() {\n\t\treturn {\n\t\t\tmdiClose,\n\t\t}\n\t},\n\tmethods: {\n\t\talert() {\n\t\t\talert('Removed')\n\t\t},\n\t},\n}\n</script>\n```\n\n</docs>\n\n<script setup lang=\"ts\">\nimport type { RouteLocation } from 'vue-router'\n\nimport NcUserBubbleDiv from './NcUserBubbleDiv.vue'\nimport NcAvatar from '../NcAvatar/index.js'\nimport NcPopover from '../NcPopover/index.js'\nimport { computed, warn, watch, type Slot } from 'vue'\nimport { RouterLink } from 'vue-router'\n\nconst props = withDefaults(defineProps<{\n\t/**\n\t * Override generated avatar, can be an url or an icon class\n\t */\n\tavatarImage?: string\n\n\t/**\n\t * Provide the user id if this is a user\n\t */\n\tuser?: string\n\n\t/**\n\t * Displayed label\n\t */\n\tdisplayName?: string\n\n\t/**\n\t * Whether or not to display the user-status\n\t */\n\tshowUserStatus?: boolean\n\n\t/**\n\t * Define the whole bubble as a link\n\t */\n\turl?: string\n\n\t/**\n\t * Use bubble as a router-link for in-app navigation\n\t */\n\tto?: RouteLocation\n\n\t/**\n\t * Use the primary colour\n\t */\n\tprimary?: boolean\n\n\t/**\n\t * This is the height of the component\n\t */\n\tsize?: number\n\n\t/**\n\t * This is the margin of the avatar (size - margin = avatar size)\n\t */\n\tmargin?: number\n}>(), {\n\tavatarImage: undefined,\n\tdisplayName: undefined,\n\tuser: undefined,\n\turl: undefined,\n\tto: undefined,\n\tmargin: 2,\n\tsize: 20,\n})\n\nconst emit = defineEmits<{\n\t/**\n\t * The mouse click event\n\t */\n\tclick: [event: MouseEvent]\n}>()\n\ndefineSlots<{\n\t/**\n\t * Main Popover content on userbubble hover/focus\n\t */\n\tdefault?: Slot\n\n\t/**\n\t * Optional slot just after the name\n\t */\n\tname?: Slot\n}>()\n\n/**\n * Default popover state. Requires the UserBubble\n * to have some content to render inside the popover\n */\nconst isOpen = defineModel<boolean>('open')\n\n/**\n * Is the provided avatar url valid or not\n */\nconst isAvatarUrl = computed(() => {\n\tif (!props.avatarImage) {\n\t\treturn false\n\t}\n\n\ttry {\n\t\tconst url = new URL(props.avatarImage)\n\t\treturn !!url\n\t} catch (error) {\n\t\treturn false\n\t}\n})\n\n/**\n * Do we have a custom avatar or not\n */\nconst isCustomAvatar = computed(() => !!props.avatarImage)\n\nconst avatarStyle = computed(() => ({\n\tmarginInlineStart: `${props.margin}px`,\n}))\n\n/**\n * Is the URL prop set\n */\nconst hasUrl = computed(() => {\n\tif (!props.url || props.url.trim() === '') {\n\t\treturn false\n\t}\n\ttry {\n\t\tconst url = new URL(props.url, props.url?.startsWith?.('/') ? window.location.href : undefined)\n\t\treturn !!url\n\t} catch (error) {\n\t\twarn('[NcUserBubble] Invalid URL passed', { url: props.url })\n\t\treturn false\n\t}\n})\n\n/**\n * href attribute to pass to content container\n */\nconst href = computed(() => hasUrl.value ? props.url : undefined)\n\nconst contentComponent = computed(() => {\n\tif (hasUrl.value) {\n\t\treturn 'a'\n\t} else if (props.to) {\n\t\treturn RouterLink\n\t} else {\n\t\treturn 'div'\n\t}\n})\n\nconst contentStyle = computed(() => ({\n\theight: `${props.size}px`,\n\tlineHeight: `${props.size}px`,\n\tborderRadius: `${props.size / 2}px`,\n}))\n\nwatch([() => props.displayName, () => props.user], () => {\n\tif (!props.displayName && !props.user) {\n\t\twarn('[NcUserBubble] At least `displayName` or `user` property should be set.')\n\t}\n})\n</script>\n\n<template>\n\t<component :is=\"!!$slots.default ? NcPopover : NcUserBubbleDiv\"\n\t\tv-model:shown=\"isOpen\"\n\t\tclass=\"user-bubble__wrapper\"\n\t\ttrigger=\"hover focus\">\n\t\t<!-- Main userbubble structure -->\n\t\t<template #trigger=\"{ attrs }\">\n\t\t\t<component :is=\"contentComponent\"\n\t\t\t\tclass=\"user-bubble__content\"\n\t\t\t\t:class=\"{ 'user-bubble__content--primary': primary }\"\n\t\t\t\t:style=\"contentStyle\"\n\t\t\t\t:to\n\t\t\t\t:href\n\t\t\t\tv-bind=\"attrs\"\n\t\t\t\t@click=\"emit('click', $event)\">\n\t\t\t\t<!-- NcAvatar -->\n\t\t\t\t<NcAvatar :url=\"isCustomAvatar && isAvatarUrl ? avatarImage : undefined\"\n\t\t\t\t\t:icon-class=\"isCustomAvatar && !isAvatarUrl ? avatarImage : undefined\"\n\t\t\t\t\t:user=\"user\"\n\t\t\t\t\t:display-name=\"displayName\"\n\t\t\t\t\t:size=\"size - (margin * 2)\"\n\t\t\t\t\t:style=\"avatarStyle\"\n\t\t\t\t\t:disable-tooltip=\"true\"\n\t\t\t\t\t:disable-menu=\"true\"\n\t\t\t\t\t:hide-status=\"!showUserStatus\"\n\t\t\t\t\tclass=\"user-bubble__avatar\" />\n\n\t\t\t\t<!-- Name -->\n\t\t\t\t<span class=\"user-bubble__name\">\n\t\t\t\t\t{{ displayName || user }}\n\t\t\t\t</span>\n\n\t\t\t\t<span v-if=\"!!$slots.name\" class=\"user-bubble__secondary\">\n\t\t\t\t\t<slot name=\"name\" />\n\t\t\t\t</span>\n\t\t\t</component>\n\t\t</template>\n\n\t\t<slot />\n\t</component>\n</template>\n\n<style lang=\"scss\" scoped>\n.user-bubble {\n\t&__wrapper {\n\t\t// align inline with text\n\t\tdisplay: inline-block;\n\t\tvertical-align: middle;\n\t\t// shrink and allow grow to fit\n\t\tmin-width: 0;\n\t\tmax-width: 100%;\n\t}\n\n\t&__content {\n\t\tdisplay: inline-flex;\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-background-dark);\n\n\t\t&--primary {\n\t\t\tcolor: var(--color-primary-element-text);\n\t\t\tbackground-color: var(--color-primary-element);\n\t\t}\n\n\t\t> :last-child {\n\t\t\t// border radius end padding\n\t\t\tpadding-inline-end: 8px;\n\t\t}\n\t}\n\n\t&__avatar {\n\t\talign-self: center;\n\t}\n\n\t&__name {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t&__name,\n\t&__secondary {\n\t\t// proper spacing between avatar, name & slot\n\t\tpadding-block: 0;\n\t\tpadding-inline: 4px 0;\n\t}\n}\n</style>\n"],"names":["_openBlock","_createElementBlock","_useModel"],"mappings":";;;;;;2BAWO,QAAA;SADkBA,UAAA,GAAAC,mBAAA,OAAA,MAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;ACgEzB,UAAM,QAAQ;AAuDd,UAAM,OAAO;AAuBP,UAAA,SAASC,SAAoB,SAAC,MAAM;AAKpC,UAAA,cAAc,SAAS,MAAM;AAC9B,UAAA,CAAC,MAAM,aAAa;AAChB,eAAA;AAAA,MAAA;AAGJ,UAAA;AACH,cAAM,MAAM,IAAI,IAAI,MAAM,WAAW;AACrC,eAAO,CAAC,CAAC;AAAA,eACD,OAAO;AACR,eAAA;AAAA,MAAA;AAAA,IACR,CACA;AAKD,UAAM,iBAAiB,SAAS,MAAM,CAAC,CAAC,MAAM,WAAW;AAEnD,UAAA,cAAc,SAAS,OAAO;AAAA,MACnC,mBAAmB,GAAG,MAAM,MAAM;AAAA,IAAA,EACjC;AAKI,UAAA,SAAS,SAAS,MAAM;AAC7B,UAAI,CAAC,MAAM,OAAO,MAAM,IAAI,WAAW,IAAI;AACnC,eAAA;AAAA,MAAA;AAEJ,UAAA;AACH,cAAM,MAAM,IAAI,IAAI,MAAM,KAAK,MAAM,KAAK,aAAa,GAAG,IAAI,OAAO,SAAS,OAAO,MAAS;AAC9F,eAAO,CAAC,CAAC;AAAA,eACD,OAAO;AACf,aAAK,qCAAqC,EAAE,KAAK,MAAM,KAAK;AACrD,eAAA;AAAA,MAAA;AAAA,IACR,CACA;AAKD,UAAM,OAAO,SAAS,MAAM,OAAO,QAAQ,MAAM,MAAM,MAAS;AAE1D,UAAA,mBAAmB,SAAS,MAAM;AACvC,UAAI,OAAO,OAAO;AACV,eAAA;AAAA,MAAA,WACG,MAAM,IAAI;AACb,eAAA;AAAA,MAAA,OACD;AACC,eAAA;AAAA,MAAA;AAAA,IACR,CACA;AAEK,UAAA,eAAe,SAAS,OAAO;AAAA,MACpC,QAAQ,GAAG,MAAM,IAAI;AAAA,MACrB,YAAY,GAAG,MAAM,IAAI;AAAA,MACzB,cAAc,GAAG,MAAM,OAAO,CAAC;AAAA,IAAA,EAC9B;AAEI,UAAA,CAAC,MAAM,MAAM,aAAa,MAAM,MAAM,IAAI,GAAG,MAAM;AACxD,UAAI,CAAC,MAAM,eAAe,CAAC,MAAM,MAAM;AACtC,aAAK,yEAAyE;AAAA,MAAA;AAAA,IAC/E,CACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,9 +1,9 @@
1
- import '../assets/NcUserStatusIcon-CtJLt6AU.css';
1
+ import '../assets/NcUserStatusIcon-BcLND4gJ.css';
2
2
  import { defineComponent, mergeModels, useModel, computed, watch, createElementBlock, createCommentVNode, openBlock, normalizeClass } from "vue";
3
3
  import axios from "@nextcloud/axios";
4
4
  import { generateOcsUrl } from "@nextcloud/router";
5
5
  import { getCapabilities } from "@nextcloud/capabilities";
6
- import { r as register, A as t10, a as t } from "./_l10n-tXci8WM1.mjs";
6
+ import { r as register, B as t10, a as t } from "./_l10n-_R1HqC4N.mjs";
7
7
  import { l as logger } from "./logger-D3RVzcfQ.mjs";
8
8
  import { _ as _export_sfc } from "./_plugin-vue_export-helper-1tPrXgE0.mjs";
9
9
  register(t10);
@@ -80,9 +80,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
80
80
  };
81
81
  }
82
82
  });
83
- const NcUserStatusIcon = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-350f3d1c"]]);
83
+ const NcUserStatusIcon = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-96a66bf4"]]);
84
84
  export {
85
85
  NcUserStatusIcon as N,
86
86
  getUserStatusText as g
87
87
  };
88
- //# sourceMappingURL=NcUserStatusIcon-DqQYA-EE.mjs.map
88
+ //# sourceMappingURL=NcUserStatusIcon-DJ_IKC46.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"NcUserStatusIcon-DqQYA-EE.mjs","sources":["../../src/utils/UserStatus.ts","../../src/assets/status-icons/user-status-online.svg?raw","../../src/assets/status-icons/user-status-away.svg?raw","../../src/assets/status-icons/user-status-dnd.svg?raw","../../src/assets/status-icons/user-status-invisible.svg?raw","../../src/components/NcUserStatusIcon/NcUserStatusIcon.vue"],"sourcesContent":["/**\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","export default \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"0 0 16 16\\\" 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 0 16 16\\\" 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 \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"0 0 16 16\\\" 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 0 16 16\\\" 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: 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=\"row\">\n\t\t<NcUserStatusIcon status=\"online\" />\n\t\t<NcUserStatusIcon status=\"away\" />\n\t\t<NcUserStatusIcon status=\"dnd\" />\n\t\t<NcUserStatusIcon status=\"invisible\" />\n\t</div>\n</template>\n\n<style>\n.row {\n\tdisplay: flex;\n\tgap: 10px;\n}\n</style>\n```\n</docs>\n\n<script setup lang=\"ts\">\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCapabilities } from '@nextcloud/capabilities'\nimport { computed, watch } from 'vue'\nimport { getUserStatusText } from '../../utils/UserStatus.ts'\nimport { t } from '../../l10n.js'\n\nimport onlineSvg from '../../assets/status-icons/user-status-online.svg?raw'\nimport awaySvg from '../../assets/status-icons/user-status-away.svg?raw'\nimport dndSvg from '../../assets/status-icons/user-status-dnd.svg?raw'\nimport invisibleSvg from '../../assets/status-icons/user-status-invisible.svg?raw'\nimport logger from '../../utils/logger.ts'\n\nconst props = withDefaults(defineProps<{\n\t/**\n\t * Set the user id to fetch the status\n\t */\n\tuser?: string\n\n\t/**\n\t * Set the `aria-hidden` attribute\n\t */\n\tariaHidden?: boolean | 'true' | 'false'\n}>(), {\n\tuser: undefined,\n\tariaHidden: false,\n})\n\n/**\n * The user preloaded user status.\n */\nconst status = defineModel<'online' | 'away' | 'busy' | 'dnd' | 'invisible' | 'offline'>('status')\nconst isInvisible = computed(() => status.value && ['invisible', 'offline'].includes(status.value))\n\n/**\n * Aria label to set on the element (will be set when ariaHidden is not set)\n */\nconst ariaLabel = computed(() => (\n\tstatus.value && (!props.ariaHidden || props.ariaHidden === 'false')\n\t\t? t('User status: {status}', { status: getUserStatusText(status.value) })\n\t\t: undefined\n))\n\nwatch(() => props.user, async (user) => {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tif (!status.value && user && (getCapabilities() as any)?.user_status?.enabled) {\n\t\ttry {\n\t\t\tconst { data } = await axios.get(generateOcsUrl('/apps/user_status/api/v1/statuses/{user}', { user }))\n\t\t\tstatus.value = data.ocs?.data?.status\n\t\t} catch (error) {\n\t\t\tlogger.debug('Error while fetching user status', { error })\n\t\t}\n\t}\n}, { immediate: true })\n\nconst matchSvg = {\n\tonline: onlineSvg,\n\taway: awaySvg,\n\tbusy: awaySvg,\n\tdnd: dndSvg,\n\tinvisible: invisibleSvg,\n\toffline: invisibleSvg,\n}\nconst activeSvg = computed(() => status.value && matchSvg[status.value])\n</script>\n\n<template>\n\t<span v-if=\"status\"\n\t\tclass=\"user-status-icon\"\n\t\t:class=\"{\n\t\t\t'user-status-icon--invisible': isInvisible,\n\t\t}\"\n\t\t:aria-hidden=\"!ariaLabel || undefined\"\n\t\t:aria-label\n\t\trole=\"img\"\n\t\tv-html=\"activeSvg\" /> <!-- eslint-disable-line vue/no-v-html -->\n</template>\n\n<style lang=\"scss\" scoped>\n.user-status-icon {\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tmin-width: 16px;\n\tmin-height: 16px;\n\tmax-width: 20px;\n\tmax-height: 20px;\n\n\t&--invisible {\n\t\tfilter: var(--background-invert-if-dark);\n\t}\n}\n</style>\n"],"names":["_useModel"],"mappings":";;;;;;;;AASa,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;;ACnBA,MAAe,YAAA;ACAf,MAAe,UAAA;ACAf,MAAe,SAAA;ACAf,MAAe,eAAA;;;;;;;;;;;;;AC6Cf,UAAM,QAAQ;AAkBR,UAAA,SAASA,SAAyE,SAAC,QAAQ;AACjG,UAAM,cAAc,SAAS,MAAM,OAAO,SAAS,CAAC,aAAa,SAAS,EAAE,SAAS,OAAO,KAAK,CAAC;AAK5F,UAAA,YAAY,SAAS,MAC1B,OAAO,UAAU,CAAC,MAAM,cAAc,MAAM,eAAe,WACxD,EAAE,yBAAyB,EAAE,QAAQ,kBAAkB,OAAO,KAAK,GAAG,IACtE,MACH;AAED,UAAM,MAAM,MAAM,MAAM,OAAO,SAAS;AAEvC,UAAI,CAAC,OAAO,SAAS,QAAS,gBAAgB,GAAW,aAAa,SAAS;AAC1E,YAAA;AACG,gBAAA,EAAE,SAAS,MAAM,MAAM,IAAI,eAAe,4CAA4C,EAAE,KAAK,CAAC,CAAC;AAC9F,iBAAA,QAAQ,KAAK,KAAK,MAAM;AAAA,iBACvB,OAAO;AACf,iBAAO,MAAM,oCAAoC,EAAE,MAAA,CAAO;AAAA,QAAA;AAAA,MAC3D;AAAA,IACD,GACE,EAAE,WAAW,MAAM;AAEtB,UAAM,WAAW;AAAA,MAChB,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,MACL,WAAW;AAAA,MACX,SAAS;AAAA,IACV;AACM,UAAA,YAAY,SAAS,MAAM,OAAO,SAAS,SAAS,OAAO,KAAK,CAAC;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"NcUserStatusIcon-DJ_IKC46.mjs","sources":["../../src/utils/UserStatus.ts","../../src/assets/status-icons/user-status-online.svg?raw","../../src/assets/status-icons/user-status-away.svg?raw","../../src/assets/status-icons/user-status-dnd.svg?raw","../../src/assets/status-icons/user-status-invisible.svg?raw","../../src/components/NcUserStatusIcon/NcUserStatusIcon.vue"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { t } from '../l10n.ts'\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","export default \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"0 0 16 16\\\" 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 0 16 16\\\" 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 \"<!--\\n - SPDX-FileCopyrightText: 2020 Google Inc.\\n - SPDX-License-Identifier: Apache-2.0\\n-->\\n<svg viewBox=\\\"0 0 16 16\\\" 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 0 16 16\\\" 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: 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=\"row\">\n\t\t<NcUserStatusIcon status=\"online\" />\n\t\t<NcUserStatusIcon status=\"away\" />\n\t\t<NcUserStatusIcon status=\"dnd\" />\n\t\t<NcUserStatusIcon status=\"invisible\" />\n\t</div>\n</template>\n\n<style>\n.row {\n\tdisplay: flex;\n\tgap: 10px;\n}\n</style>\n```\n</docs>\n\n<script setup lang=\"ts\">\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCapabilities } from '@nextcloud/capabilities'\nimport { computed, watch } from 'vue'\nimport { getUserStatusText } from '../../utils/UserStatus.ts'\nimport { t } from '../../l10n.ts'\n\nimport onlineSvg from '../../assets/status-icons/user-status-online.svg?raw'\nimport awaySvg from '../../assets/status-icons/user-status-away.svg?raw'\nimport dndSvg from '../../assets/status-icons/user-status-dnd.svg?raw'\nimport invisibleSvg from '../../assets/status-icons/user-status-invisible.svg?raw'\nimport logger from '../../utils/logger.ts'\n\nconst props = withDefaults(defineProps<{\n\t/**\n\t * Set the user id to fetch the status\n\t */\n\tuser?: string\n\n\t/**\n\t * Set the `aria-hidden` attribute\n\t */\n\tariaHidden?: boolean | 'true' | 'false'\n}>(), {\n\tuser: undefined,\n\tariaHidden: false,\n})\n\n/**\n * The user preloaded user status.\n */\nconst status = defineModel<'online' | 'away' | 'busy' | 'dnd' | 'invisible' | 'offline'>('status')\nconst isInvisible = computed(() => status.value && ['invisible', 'offline'].includes(status.value))\n\n/**\n * Aria label to set on the element (will be set when ariaHidden is not set)\n */\nconst ariaLabel = computed(() => (\n\tstatus.value && (!props.ariaHidden || props.ariaHidden === 'false')\n\t\t? t('User status: {status}', { status: getUserStatusText(status.value) })\n\t\t: undefined\n))\n\nwatch(() => props.user, async (user) => {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tif (!status.value && user && (getCapabilities() as any)?.user_status?.enabled) {\n\t\ttry {\n\t\t\tconst { data } = await axios.get(generateOcsUrl('/apps/user_status/api/v1/statuses/{user}', { user }))\n\t\t\tstatus.value = data.ocs?.data?.status\n\t\t} catch (error) {\n\t\t\tlogger.debug('Error while fetching user status', { error })\n\t\t}\n\t}\n}, { immediate: true })\n\nconst matchSvg = {\n\tonline: onlineSvg,\n\taway: awaySvg,\n\tbusy: awaySvg,\n\tdnd: dndSvg,\n\tinvisible: invisibleSvg,\n\toffline: invisibleSvg,\n}\nconst activeSvg = computed(() => status.value && matchSvg[status.value])\n</script>\n\n<template>\n\t<span v-if=\"status\"\n\t\tclass=\"user-status-icon\"\n\t\t:class=\"{\n\t\t\t'user-status-icon--invisible': isInvisible,\n\t\t}\"\n\t\t:aria-hidden=\"!ariaLabel || undefined\"\n\t\t:aria-label\n\t\trole=\"img\"\n\t\tv-html=\"activeSvg\" /> <!-- eslint-disable-line vue/no-v-html -->\n</template>\n\n<style lang=\"scss\" scoped>\n.user-status-icon {\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tmin-width: 16px;\n\tmin-height: 16px;\n\tmax-width: 20px;\n\tmax-height: 20px;\n\n\t&--invisible {\n\t\tfilter: var(--background-invert-if-dark);\n\t}\n}\n</style>\n"],"names":["_useModel"],"mappings":";;;;;;;;AASa,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;;ACnBA,MAAe,YAAA;ACAf,MAAe,UAAA;ACAf,MAAe,SAAA;ACAf,MAAe,eAAA;;;;;;;;;;;;;AC6Cf,UAAM,QAAQ;AAkBR,UAAA,SAASA,SAAyE,SAAC,QAAQ;AACjG,UAAM,cAAc,SAAS,MAAM,OAAO,SAAS,CAAC,aAAa,SAAS,EAAE,SAAS,OAAO,KAAK,CAAC;AAK5F,UAAA,YAAY,SAAS,MAC1B,OAAO,UAAU,CAAC,MAAM,cAAc,MAAM,eAAe,WACxD,EAAE,yBAAyB,EAAE,QAAQ,kBAAkB,OAAO,KAAK,GAAG,IACtE,MACH;AAED,UAAM,MAAM,MAAM,MAAM,OAAO,SAAS;AAEvC,UAAI,CAAC,OAAO,SAAS,QAAS,gBAAgB,GAAW,aAAa,SAAS;AAC1E,YAAA;AACG,gBAAA,EAAE,SAAS,MAAM,MAAM,IAAI,eAAe,4CAA4C,EAAE,KAAK,CAAC,CAAC;AAC9F,iBAAA,QAAQ,KAAK,KAAK,MAAM;AAAA,iBACvB,OAAO;AACf,iBAAO,MAAM,oCAAoC,EAAE,MAAA,CAAO;AAAA,QAAA;AAAA,MAC3D;AAAA,IACD,GACE,EAAE,WAAW,MAAM;AAEtB,UAAM,WAAW;AAAA,MAChB,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,MACL,WAAW;AAAA,MACX,SAAS;AAAA,IACV;AACM,UAAA,YAAY,SAAS,MAAM,OAAO,SAAS,SAAS,OAAO,KAAK,CAAC;;;;;;;;;;;;;;;;"}
@@ -66,8 +66,8 @@ const t45 = [{ "l": "af", "t": { "Submit": { "v": [""] } } }, { "l": "ar", "t":
66
66
  const t46 = [{ "l": "af", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "ar", "t": { "Unable to search the group": { "v": ["تعذّر البحث في المجموعة"] } } }, { "l": "ast", "t": { "Unable to search the group": { "v": ["Nun ye posible buscar el grupu"] } } }, { "l": "az", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "be", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "bg", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "bn_BD", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "br", "t": { "Unable to search the group": { "v": ["Dibosupl eo klask ar strollad"] } } }, { "l": "bs", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "ca", "t": { "Unable to search the group": { "v": ["No es pot cercar el grup"] } } }, { "l": "cs", "t": { "Unable to search the group": { "v": ["Nedaří se hledat skupinu"] } } }, { "l": "cs_CZ", "t": { "Unable to search the group": { "v": ["Nedaří se hledat skupinu"] } } }, { "l": "cy_GB", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "da", "t": { "Unable to search the group": { "v": ["Kan ikke søge på denne gruppe"] } } }, { "l": "de", "t": { "Unable to search the group": { "v": ["Die Gruppe kann nicht durchsucht werden"] } } }, { "l": "de_DE", "t": { "Unable to search the group": { "v": ["Die Gruppe kann nicht durchsucht werden"] } } }, { "l": "el", "t": { "Unable to search the group": { "v": ["Δεν είναι δυνατή η αναζήτηση της ομάδας"] } } }, { "l": "en_GB", "t": { "Unable to search the group": { "v": ["Unable to search the group"] } } }, { "l": "eo", "t": { "Unable to search the group": { "v": ["Ne eblas serĉi en la grupo"] } } }, { "l": "es", "t": { "Unable to search the group": { "v": ["No es posible buscar en el grupo"] } } }, { "l": "es_419", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "es_AR", "t": { "Unable to search the group": { "v": ["No se puede buscar el grupo"] } } }, { "l": "es_CL", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "es_CO", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "es_CR", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "es_DO", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "es_EC", "t": { "Unable to search the group": { "v": ["No se puede buscar en el grupo"] } } }, { "l": "es_GT", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "es_HN", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "es_MX", "t": { "Unable to search the group": { "v": ["No fue posible buscar en el grupo"] } } }, { "l": "es_NI", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "es_PA", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "es_PE", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "es_PR", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "es_PY", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "es_SV", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "es_UY", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "et_EE", "t": { "Unable to search the group": { "v": ["Gruppi ei ole võimalik otsida"] } } }, { "l": "eu", "t": { "Unable to search the group": { "v": ["Ezin izan da taldea bilatu"] } } }, { "l": "fa", "t": { "Unable to search the group": { "v": ["امکان جستجوی گروه وجود ندارد"] } } }, { "l": "fi", "t": { "Unable to search the group": { "v": ["Ryhmää ei voi hakea"] } } }, { "l": "fo", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "fr", "t": { "Unable to search the group": { "v": ["Impossible de chercher le groupe"] } } }, { "l": "ga", "t": { "Unable to search the group": { "v": ["Ní féidir an grúpa a chuardach"] } } }, { "l": "gd", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "gl", "t": { "Unable to search the group": { "v": ["Non foi posíbel buscar o grupo"] } } }, { "l": "he", "t": { "Unable to search the group": { "v": ["לא ניתן לחפש בקבוצה"] } } }, { "l": "hi_IN", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "hr", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "hsb", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "hu", "t": { "Unable to search the group": { "v": ["A csoport nem kereshető"] } } }, { "l": "hy", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "ia", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "id", "t": { "Unable to search the group": { "v": ["Tidak dapat mencari dalam grup"] } } }, { "l": "ig", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "is", "t": { "Unable to search the group": { "v": ["Get ekki leitað í hópnum"] } } }, { "l": "it", "t": { "Unable to search the group": { "v": ["Impossibile cercare il gruppo"] } } }, { "l": "ja", "t": { "Unable to search the group": { "v": ["グループを検索できません"] } } }, { "l": "ja_JP", "t": { "Unable to search the group": { "v": ["グループを検索できません"] } } }, { "l": "ka", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "ka_GE", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "kab", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "kk", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "km", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "kn", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "ko", "t": { "Unable to search the group": { "v": ["그룹을 검색할 수 없음"] } } }, { "l": "la", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "lb", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "lo", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "lt_LT", "t": { "Unable to search the group": { "v": ["Nepavyko atlikti paiešką grupėje"] } } }, { "l": "lv", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "mk", "t": { "Unable to search the group": { "v": ["Неможе да се принајде групата"] } } }, { "l": "mn", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "mr", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "ms_MY", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "my", "t": { "Unable to search the group": { "v": ["အဖွဲ့အား ရှာဖွေ၍ မရနိုင်ပါ"] } } }, { "l": "nb", "t": { "Unable to search the group": { "v": ["Kunne ikke søke i gruppen"] } } }, { "l": "ne", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "nl", "t": { "Unable to search the group": { "v": ["Kan niet zoeken in de groep"] } } }, { "l": "nn_NO", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "oc", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "pl", "t": { "Unable to search the group": { "v": ["Nie można przeszukać grupy"] } } }, { "l": "ps", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "pt_BR", "t": { "Unable to search the group": { "v": ["Não foi possível pesquisar o grupo"] } } }, { "l": "pt_PT", "t": { "Unable to search the group": { "v": ["Não é possível pesquisar o grupo"] } } }, { "l": "ro", "t": { "Unable to search the group": { "v": ["Imposibilitatea de a căuta în grup"] } } }, { "l": "ru", "t": { "Unable to search the group": { "v": ["Невозможно найти группу"] } } }, { "l": "sc", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "si", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "sk", "t": { "Unable to search the group": { "v": ["Skupinu sa nepodarilo nájsť"] } } }, { "l": "sl", "t": { "Unable to search the group": { "v": ["Ni mogoče iskati po skupini"] } } }, { "l": "sq", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "sr", "t": { "Unable to search the group": { "v": ["Група не може да се претражи"] } } }, { "l": "sr@latin", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "sv", "t": { "Unable to search the group": { "v": ["Kunde inte söka i gruppen"] } } }, { "l": "sw", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "ta", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "th", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "tk", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "tr", "t": { "Unable to search the group": { "v": ["Grupta arama yapılamadı"] } } }, { "l": "ug", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "uk", "t": { "Unable to search the group": { "v": ["Неможливо шукати в групі"] } } }, { "l": "ur_PK", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "uz", "t": { "Unable to search the group": { "v": ["Guruhni qidirish imkonsiz"] } } }, { "l": "vi", "t": { "Unable to search the group": { "v": [""] } } }, { "l": "zh_CN", "t": { "Unable to search the group": { "v": ["无法搜索分组"] } } }, { "l": "zh_HK", "t": { "Unable to search the group": { "v": ["無法搜尋群組"] } } }, { "l": "zh_TW", "t": { "Unable to search the group": { "v": ["無法搜尋群組"] } } }, { "l": "zu_ZA", "t": { "Unable to search the group": { "v": [""] } } }];
67
67
  const t47 = [{ "l": "af", "t": { "Undo changes": { "v": [""] } } }, { "l": "ar", "t": { "Undo changes": { "v": ["تراجَع عن التغييرات"] } } }, { "l": "ast", "t": { "Undo changes": { "v": ["Desfacer los cambeos"] } } }, { "l": "az", "t": { "Undo changes": { "v": [""] } } }, { "l": "be", "t": { "Undo changes": { "v": [""] } } }, { "l": "bg", "t": { "Undo changes": { "v": [""] } } }, { "l": "bn_BD", "t": { "Undo changes": { "v": [""] } } }, { "l": "br", "t": { "Undo changes": { "v": [""] } } }, { "l": "bs", "t": { "Undo changes": { "v": [""] } } }, { "l": "ca", "t": { "Undo changes": { "v": ["Desfés els canvis"] } } }, { "l": "cs", "t": { "Undo changes": { "v": ["Vzít změny zpět"] } } }, { "l": "cs_CZ", "t": { "Undo changes": { "v": ["Vzít změny zpět"] } } }, { "l": "cy_GB", "t": { "Undo changes": { "v": [""] } } }, { "l": "da", "t": { "Undo changes": { "v": ["Fortryd ændringer"] } } }, { "l": "de", "t": { "Undo changes": { "v": ["Änderungen rückgängig machen"] } } }, { "l": "de_DE", "t": { "Undo changes": { "v": ["Änderungen rückgängig machen"] } } }, { "l": "el", "t": { "Undo changes": { "v": ["Αναίρεση Αλλαγών"] } } }, { "l": "en_GB", "t": { "Undo changes": { "v": ["Undo changes"] } } }, { "l": "eo", "t": { "Undo changes": { "v": [""] } } }, { "l": "es", "t": { "Undo changes": { "v": ["Deshacer cambios"] } } }, { "l": "es_419", "t": { "Undo changes": { "v": [""] } } }, { "l": "es_AR", "t": { "Undo changes": { "v": ["Deshacer cambios"] } } }, { "l": "es_CL", "t": { "Undo changes": { "v": [""] } } }, { "l": "es_CO", "t": { "Undo changes": { "v": [""] } } }, { "l": "es_CR", "t": { "Undo changes": { "v": [""] } } }, { "l": "es_DO", "t": { "Undo changes": { "v": [""] } } }, { "l": "es_EC", "t": { "Undo changes": { "v": ["Deshacer cambios"] } } }, { "l": "es_GT", "t": { "Undo changes": { "v": [""] } } }, { "l": "es_HN", "t": { "Undo changes": { "v": [""] } } }, { "l": "es_MX", "t": { "Undo changes": { "v": ["Deshacer cambios"] } } }, { "l": "es_NI", "t": { "Undo changes": { "v": [""] } } }, { "l": "es_PA", "t": { "Undo changes": { "v": [""] } } }, { "l": "es_PE", "t": { "Undo changes": { "v": [""] } } }, { "l": "es_PR", "t": { "Undo changes": { "v": [""] } } }, { "l": "es_PY", "t": { "Undo changes": { "v": [""] } } }, { "l": "es_SV", "t": { "Undo changes": { "v": [""] } } }, { "l": "es_UY", "t": { "Undo changes": { "v": [""] } } }, { "l": "et_EE", "t": { "Undo changes": { "v": ["Pööra muudatused tagasi"] } } }, { "l": "eu", "t": { "Undo changes": { "v": ["Aldaketak desegin"] } } }, { "l": "fa", "t": { "Undo changes": { "v": ["لغو تغییرات"] } } }, { "l": "fi", "t": { "Undo changes": { "v": ["Kumoa muutokset"] } } }, { "l": "fo", "t": { "Undo changes": { "v": [""] } } }, { "l": "fr", "t": { "Undo changes": { "v": ["Annuler les changements"] } } }, { "l": "ga", "t": { "Undo changes": { "v": ["Cealaigh athruithe"] } } }, { "l": "gd", "t": { "Undo changes": { "v": [""] } } }, { "l": "gl", "t": { "Undo changes": { "v": ["Desfacer os cambios"] } } }, { "l": "he", "t": { "Undo changes": { "v": ["ביטול שינויים"] } } }, { "l": "hi_IN", "t": { "Undo changes": { "v": [""] } } }, { "l": "hr", "t": { "Undo changes": { "v": [""] } } }, { "l": "hsb", "t": { "Undo changes": { "v": [""] } } }, { "l": "hu", "t": { "Undo changes": { "v": ["Változtatások visszavonása"] } } }, { "l": "hy", "t": { "Undo changes": { "v": [""] } } }, { "l": "ia", "t": { "Undo changes": { "v": [""] } } }, { "l": "id", "t": { "Undo changes": { "v": ["Urungkan perubahan"] } } }, { "l": "ig", "t": { "Undo changes": { "v": [""] } } }, { "l": "is", "t": { "Undo changes": { "v": ["Afturkalla breytingar"] } } }, { "l": "it", "t": { "Undo changes": { "v": ["Cancella i cambiamenti"] } } }, { "l": "ja", "t": { "Undo changes": { "v": ["変更を取り消し"] } } }, { "l": "ja_JP", "t": { "Undo changes": { "v": ["変更を取り消し"] } } }, { "l": "ka", "t": { "Undo changes": { "v": [""] } } }, { "l": "ka_GE", "t": { "Undo changes": { "v": [""] } } }, { "l": "kab", "t": { "Undo changes": { "v": [""] } } }, { "l": "kk", "t": { "Undo changes": { "v": [""] } } }, { "l": "km", "t": { "Undo changes": { "v": [""] } } }, { "l": "kn", "t": { "Undo changes": { "v": [""] } } }, { "l": "ko", "t": { "Undo changes": { "v": ["변경 되돌리기"] } } }, { "l": "la", "t": { "Undo changes": { "v": [""] } } }, { "l": "lb", "t": { "Undo changes": { "v": [""] } } }, { "l": "lo", "t": { "Undo changes": { "v": [""] } } }, { "l": "lt_LT", "t": { "Undo changes": { "v": [""] } } }, { "l": "lv", "t": { "Undo changes": { "v": [""] } } }, { "l": "mk", "t": { "Undo changes": { "v": ["Врати ги промените"] } } }, { "l": "mn", "t": { "Undo changes": { "v": [""] } } }, { "l": "mr", "t": { "Undo changes": { "v": [""] } } }, { "l": "ms_MY", "t": { "Undo changes": { "v": [""] } } }, { "l": "my", "t": { "Undo changes": { "v": [""] } } }, { "l": "nb", "t": { "Undo changes": { "v": ["Tilbakestill endringer"] } } }, { "l": "ne", "t": { "Undo changes": { "v": [""] } } }, { "l": "nl", "t": { "Undo changes": { "v": ["Wijzigingen ongedaan maken"] } } }, { "l": "nn_NO", "t": { "Undo changes": { "v": [""] } } }, { "l": "oc", "t": { "Undo changes": { "v": [""] } } }, { "l": "pl", "t": { "Undo changes": { "v": ["Cofnij zmiany"] } } }, { "l": "ps", "t": { "Undo changes": { "v": [""] } } }, { "l": "pt_BR", "t": { "Undo changes": { "v": ["Desfazer modificações"] } } }, { "l": "pt_PT", "t": { "Undo changes": { "v": ["Anular alterações"] } } }, { "l": "ro", "t": { "Undo changes": { "v": ["Anularea modificărilor"] } } }, { "l": "ru", "t": { "Undo changes": { "v": ["Отменить изменения"] } } }, { "l": "sc", "t": { "Undo changes": { "v": [""] } } }, { "l": "si", "t": { "Undo changes": { "v": [""] } } }, { "l": "sk", "t": { "Undo changes": { "v": ["Vrátiť zmeny"] } } }, { "l": "sl", "t": { "Undo changes": { "v": ["Razveljavi spremembe"] } } }, { "l": "sq", "t": { "Undo changes": { "v": [""] } } }, { "l": "sr", "t": { "Undo changes": { "v": ["Поништи измене"] } } }, { "l": "sr@latin", "t": { "Undo changes": { "v": [""] } } }, { "l": "sv", "t": { "Undo changes": { "v": ["Ångra ändringar"] } } }, { "l": "sw", "t": { "Undo changes": { "v": [""] } } }, { "l": "ta", "t": { "Undo changes": { "v": [""] } } }, { "l": "th", "t": { "Undo changes": { "v": [""] } } }, { "l": "tk", "t": { "Undo changes": { "v": [""] } } }, { "l": "tr", "t": { "Undo changes": { "v": ["Değişiklikleri geri al"] } } }, { "l": "ug", "t": { "Undo changes": { "v": [""] } } }, { "l": "uk", "t": { "Undo changes": { "v": ["Скасувати зміни"] } } }, { "l": "ur_PK", "t": { "Undo changes": { "v": [""] } } }, { "l": "uz", "t": { "Undo changes": { "v": ["O'zgarishlarni bekor qilish"] } } }, { "l": "vi", "t": { "Undo changes": { "v": [""] } } }, { "l": "zh_CN", "t": { "Undo changes": { "v": ["撤销更改"] } } }, { "l": "zh_HK", "t": { "Undo changes": { "v": ["取消更改"] } } }, { "l": "zh_TW", "t": { "Undo changes": { "v": ["還原變更"] } } }, { "l": "zu_ZA", "t": { "Undo changes": { "v": [""] } } }];
68
68
  export {
69
- t10 as A,
70
- t14 as B,
69
+ t14 as A,
70
+ t10 as B,
71
71
  t39 as C,
72
72
  t36 as D,
73
73
  t8 as E,
@@ -105,4 +105,4 @@ export {
105
105
  t21 as y,
106
106
  t20 as z
107
107
  };
108
- //# sourceMappingURL=_l10n-tXci8WM1.mjs.map
108
+ //# sourceMappingURL=_l10n-_R1HqC4N.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_l10n-_R1HqC4N.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -2,6 +2,10 @@ import { getBaseUrl, getRootUrl } from "@nextcloud/router";
2
2
  import { u } from "unist-builder";
3
3
  import { visit, SKIP } from "unist-util-visit";
4
4
  import { defineComponent, h } from "vue";
5
+ /*!
6
+ * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
7
+ * SPDX-License-Identifier: AGPL-3.0-or-later
8
+ */
5
9
  const URL_PATTERN = /(\s|^)(https?:\/\/)([-A-Z0-9+_.]+(?::[0-9]+)?(?:\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\s|$)/ig;
6
10
  const URL_PATTERN_AUTOLINK = /(\s|\(|^)((https?:\/\/)([-A-Z0-9+_.]+[-A-Z0-9]+(?::[0-9]+)?(?:\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*))(?=\s|\)|$)/ig;
7
11
  const NcLink = defineComponent({
@@ -110,4 +114,4 @@ export {
110
114
  parseUrl as p,
111
115
  remarkAutolink as r
112
116
  };
113
- //# sourceMappingURL=autolink-CKPk5rzg.mjs.map
117
+ //# sourceMappingURL=autolink-Y0rlJ_CI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autolink-Y0rlJ_CI.mjs","sources":["../../src/components/NcRichText/helpers.ts","../../src/components/NcRichText/autolink.ts"],"sourcesContent":["/*!\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Literal } from 'unist'\n\n/**\n * Unist literal node with string value like code blocks or text nodes\n */\nexport interface TextNode extends Literal {\n\tvalue: string\n}\n\n/**\n * Regex pattern to match links to be resolved by the link-reference provider\n */\nexport const URL_PATTERN = /(\\s|^)(https?:\\/\\/)([-A-Z0-9+_.]+(?::[0-9]+)?(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\\s|$)/ig\n\n/**\n * Regex pattern to identify strings as links and then making them clickable\n */\nexport const URL_PATTERN_AUTOLINK = /(\\s|\\(|^)((https?:\\/\\/)([-A-Z0-9+_.]+[-A-Z0-9]+(?::[0-9]+)?(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*))(?=\\s|\\)|$)/ig\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { URL_PATTERN_AUTOLINK } from './helpers.js'\n\nimport type { Router } from 'vue-router'\nimport { getBaseUrl, getRootUrl } from '@nextcloud/router'\nimport { u } from 'unist-builder'\nimport { visit, SKIP } from 'unist-util-visit'\nimport { defineComponent, h } from 'vue'\n\nconst NcLink = defineComponent({\n\tname: 'NcLink',\n\tprops: {\n\t\thref: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\trender() {\n\t\treturn h('a', {\n\t\t\thref: this.href,\n\t\t\trel: 'noopener noreferrer',\n\t\t\ttarget: '_blank',\n\t\t\tclass: 'rich-text--external-link',\n\t\t}, [this.href.trim()])\n\t},\n})\n\nexport const remarkAutolink = function({ autolink, useMarkdown, useExtendedMarkdown }) {\n\treturn function(tree) {\n\t\t// remark-gfm has its own autolink parser which can not be disabled\n\t\t// and thus a local one is not needed\n\t\tif (useExtendedMarkdown || !useMarkdown || !autolink) {\n\t\t\treturn\n\t\t}\n\n\t\tvisit(tree, (node) => node.type === 'text', (node, index, parent) => {\n\t\t\tlet parsed = parseUrl(node.value)\n\t\t\tif (typeof parsed === 'string') {\n\t\t\t\tparsed = [u('text', parsed)]\n\t\t\t} else {\n\t\t\t\tparsed = parsed\n\t\t\t\t\t.map((n) => {\n\t\t\t\t\t\tif (typeof n === 'string') {\n\t\t\t\t\t\t\treturn u('text', n)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn u('link', {\n\t\t\t\t\t\t\turl: n.props.href,\n\t\t\t\t\t\t}, [u('text', n.props.href)])\n\t\t\t\t\t})\n\t\t\t\t\t.filter((x) => x)\n\t\t\t\t\t.flat()\n\t\t\t}\n\n\t\t\tparent.children.splice(index, 1, ...parsed)\n\t\t\treturn [SKIP, (index ?? 0) + parsed.length]\n\t\t})\n\t}\n}\n\nexport const parseUrl = (text: string) => {\n\tlet match = URL_PATTERN_AUTOLINK.exec(text)\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst list: (string|Record<string, any>)[] = []\n\tlet start = 0\n\twhile (match !== null) {\n\t\tlet href = match[2]\n\t\tlet textAfter\n\t\tlet textBefore = text.substring(start, match.index + match[1].length)\n\t\tif (href[0] === ' ') {\n\t\t\ttextBefore += href[0]\n\t\t\thref = href.substring(1).trim()\n\t\t}\n\t\tconst lastChar = href[(href.length - 1)]\n\t\tif (lastChar === '.' || lastChar === ',' || lastChar === ';' || (match[0][0] === '(' && lastChar === ')')) {\n\t\t\thref = href.substring(0, href.length - 1)\n\t\t\ttextAfter = lastChar\n\t\t}\n\t\tlist.push(textBefore)\n\t\tlist.push({ component: NcLink, props: { href } })\n\t\tif (textAfter) {\n\t\t\tlist.push(textAfter)\n\t\t}\n\t\tstart = match.index + match[0].length\n\t\tmatch = URL_PATTERN_AUTOLINK.exec(text)\n\t}\n\tlist.push(text.substring(start))\n\tconst joinedText = list.map((item) => typeof item === 'string' ? item : item.props.href).join('')\n\tif (text === joinedText) {\n\t\treturn list\n\t}\n\tconsole.error('Failed to reassemble the chunked text: ' + text)\n\treturn text\n}\n\n/**\n * Try to get path for router link from an absolute or relative URL.\n *\n * @param {Router} router - VueRouter instance of the router link\n * @param {string} url - absolute URL to parse\n * @return {string|null} a path that can be used in the router link or null if this URL doesn't match this router config\n * @example http://cloud.ltd/nextcloud/index.php/apps/files/favorites?fileid=2#fragment => /files/favorites?fileid=2#fragment\n */\nexport const getRoute = (router: Router, url: string): string | null => {\n\t/**\n\t * http://cloud.ltd /nextcloud /index.php /apps/files /favorites?fileid=2#fragment\n\t * |_____origin____|___________router-base____________| |\n\t * |__________base____________| |______________relative-url______________|\n\t * | |___root___|_optional_|__app-base__|_________router-path_______|\n\t */\n\n\tconst removePrefix = (str, prefix) => str.startsWith(prefix) ? str.slice(prefix.length) : str\n\tconst removePrefixes = (str, ...prefixes) => prefixes.reduce((acc, prefix) => removePrefix(acc, prefix), str)\n\n\t// Router is not defined in the app => not an app route\n\tif (!router) {\n\t\treturn null\n\t}\n\n\tconst isAbsoluteURL = /^https?:\\/\\//.test(url)\n\n\t// URL is a \"mailto:\", \"tel:\" or any custom app protocol link\n\tconst isNonHttpLink = /^[a-z][a-z0-9+.-]*:.+/.test(url)\n\tif (!isAbsoluteURL && isNonHttpLink) {\n\t\treturn null\n\t}\n\n\t// URL is not a link to this Nextcloud server instance => not an app route\n\tif (isAbsoluteURL && !url.startsWith(getBaseUrl())) {\n\t\treturn null\n\t}\n\n\tif (!isAbsoluteURL && !url.startsWith('/')) {\n\t\t// Relative URL without a leading slash are not allowed\n\t\t// VueRouter handles such urls according to the URL RFC,\n\t\t// for example, being on /call/abc page, link \"def\" is resolved as \"/call/def\" relative to \"/call/\".\n\t\t// We don't want to support such links,\n\t\t// so relative URL MUST start with a slash.\n\t\treturn null\n\t}\n\n\t// URL relative to the instance root\n\tconst relativeUrl = isAbsoluteURL ? removePrefixes(url, getBaseUrl(), '/index.php') : url\n\n\t// Router base relative to the instance root (app-base above)\n\tconst relativeRouterBase = removePrefixes(router.options.history.base, getRootUrl(), '/index.php')\n\n\t// Root route may have an empty '' path, fallback to '/'\n\tconst potentialRouterPath = removePrefixes(relativeUrl, relativeRouterBase) || '/'\n\n\t// Check if there is actually matching route in the router for this path\n\tconst route = router.resolve(potentialRouterPath)\n\n\tif (!route.matched.length) {\n\t\treturn null\n\t}\n\n\treturn route.fullPath\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { r as register, t as t3, a as t } from "./_l10n-tXci8WM1.mjs";
1
+ import { r as register, t as t3, a as t } from "./_l10n-_R1HqC4N.mjs";
2
2
  register(t3);
3
3
  class Color {
4
4
  /**
@@ -136,4 +136,4 @@ export {
136
136
  defaultPalette as d,
137
137
  generatePalette as g
138
138
  };
139
- //# sourceMappingURL=colors-BaTbJhvg.mjs.map
139
+ //# sourceMappingURL=colors-Bws_qBuw.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"colors-BaTbJhvg.mjs","sources":["../../src/utils/colors.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { t } from '../l10n.js'\n\nexport class Color {\n\n\t/**\n\t * @param r - The red value\n\t * @param g - The green value\n\t * @param b - The blue value\n\t * @param name - The name of the color\n\t */\n\tconstructor(\n\t\tpublic readonly r: number,\n\t\tpublic readonly g: number,\n\t\tpublic readonly b: number,\n\t\tpublic readonly name?: string,\n\t) {\n\t\tthis.r = Math.min(r, 255)\n\t\tthis.g = Math.min(g, 255)\n\t\tthis.b = Math.min(b, 255)\n\t\tthis.name = name\n\t}\n\n\t/**\n\t * The hexadecimal color string.\n\t */\n\tget color(): string {\n\t\tconst toHex = (int: number) => `00${int.toString(16)}`.slice(-2)\n\t\treturn `#${toHex(this.r)}${toHex(this.g)}${toHex(this.b)}`\n\t}\n\n}\n\n/**\n * Calculate the increment needed to blend color1 into color2 within specified number of steps.\n *\n * @param steps - The number of steps\n * @param color1 - The color to start with\n * @param color2 - The color to end at\n * @return The increment needed per color channel\n */\nfunction calculateStepIncrement(steps: number, color1: Color, color2: Color): { r: number, g: number, b: number } {\n\treturn {\n\t\tr: (color2.r - color1.r) / steps,\n\t\tg: (color2.g - color1.g) / steps,\n\t\tb: (color2.b - color1.b) / steps,\n\t}\n}\n\n/**\n * Create a color palette from two colors\n *\n * @param steps - The number of steps the palette should have\n * @param color1 - The first color to mix\n * @param color2 - The second color to mix\n * @return The created palette array (mixed `color1` and `color2` with `steps` steps)\n */\nfunction mixPalette(steps: number, color1: Color, color2: Color): Color[] {\n\tconst palette: Color[] = []\n\tpalette.push(color1)\n\tconst increment = calculateStepIncrement(steps, color1, color2)\n\tfor (let i = 1; i < steps; i++) {\n\t\tconst r = Math.floor(color1.r + increment.r * i)\n\t\tconst g = Math.floor(color1.g + increment.g * i)\n\t\tconst b = Math.floor(color1.b + increment.b * i)\n\t\tpalette.push(new Color(r, g, b))\n\t}\n\treturn palette\n}\n\n/**\n * Like GenColor(4) but with labels\n */\nexport const defaultPalette = [\n\tnew Color(182, 70, 157, t('Purple')),\n\tnew Color(\n\t\t191, 103, 139,\n\t\tt('Rosy brown'), // TRANSLATORS: A color name for RGB(191, 103, 139)\n\t),\n\tnew Color(\n\t\t201, 136, 121,\n\t\tt('Feldspar'), // TRANSLATORS: A color name for RGB(201, 136, 121)\n\t),\n\tnew Color(\n\t\t211, 169, 103,\n\t\tt('Whiskey'), // TRANSLATORS: A color name for RGB(211, 169, 103)\n\t),\n\tnew Color(\n\t\t221, 203, 85,\n\t\tt('Gold'),\n\t),\n\tnew Color(\n\t\t165, 184, 114,\n\t\tt('Olivine'), // TRANSLATORS: A color name for RGB(165, 184, 114)\n\t),\n\tnew Color(\n\t\t110, 166, 143,\n\t\tt('Acapulco'), // TRANSLATORS: A color name for RGB(110, 166, 143)\n\t),\n\tnew Color(\n\t\t55, 148, 172,\n\t\tt('Boston Blue'), // TRANSLATORS: A color name for RGB(55, 148, 172)\n\t),\n\tnew Color(\n\t\t0, 130, 201,\n\t\tt('Nextcloud blue'),\n\t),\n\tnew Color(\n\t\t45, 115, 190,\n\t\tt('Mariner'), // TRANSLATORS: A color name for RGB(45, 115, 190)\n\t),\n\tnew Color(\n\t\t91, 100, 179,\n\t\tt('Blue Violet'), // TRANSLATORS: A color name for RGB(91, 100, 179)\n\t),\n\tnew Color(\n\t\t136, 85, 168,\n\t\tt('Deluge'), // TRANSLATORS: A color name for RGB(136, 85, 168)\n\t),\n]\n\n/**\n * Generate colors from the official nextcloud color\n * You can provide how many colors you want (multiplied by 3).\n *\n * For example if steps is set to 6, then 3 colors * 6 will result in 18 generated colors.\n *\n * @param steps - Number of steps to go from a color to another\n */\nexport function generatePalette(steps: number): Color[] {\n\tif (steps <= 0) {\n\t\tsteps = 6\n\t}\n\n\tif (steps === 4) {\n\t\treturn [...defaultPalette]\n\t}\n\n\tconst red = new Color(182, 70, 157, t('Purple'))\n\tconst yellow = new Color(221, 203, 85, t('Gold'))\n\tconst blue = new Color(0, 130, 201, t('Nextcloud blue'))\n\n\tconst palette1 = mixPalette(steps, red, yellow)\n\tconst palette2 = mixPalette(steps, yellow, blue)\n\tconst palette3 = mixPalette(steps, blue, red)\n\n\treturn palette1.concat(palette2).concat(palette3)\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"colors-Bws_qBuw.mjs","sources":["../../src/utils/colors.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { t } from '../l10n.ts'\n\nexport class Color {\n\n\t/**\n\t * @param r - The red value\n\t * @param g - The green value\n\t * @param b - The blue value\n\t * @param name - The name of the color\n\t */\n\tconstructor(\n\t\tpublic readonly r: number,\n\t\tpublic readonly g: number,\n\t\tpublic readonly b: number,\n\t\tpublic readonly name?: string,\n\t) {\n\t\tthis.r = Math.min(r, 255)\n\t\tthis.g = Math.min(g, 255)\n\t\tthis.b = Math.min(b, 255)\n\t\tthis.name = name\n\t}\n\n\t/**\n\t * The hexadecimal color string.\n\t */\n\tget color(): string {\n\t\tconst toHex = (int: number) => `00${int.toString(16)}`.slice(-2)\n\t\treturn `#${toHex(this.r)}${toHex(this.g)}${toHex(this.b)}`\n\t}\n\n}\n\n/**\n * Calculate the increment needed to blend color1 into color2 within specified number of steps.\n *\n * @param steps - The number of steps\n * @param color1 - The color to start with\n * @param color2 - The color to end at\n * @return The increment needed per color channel\n */\nfunction calculateStepIncrement(steps: number, color1: Color, color2: Color): { r: number, g: number, b: number } {\n\treturn {\n\t\tr: (color2.r - color1.r) / steps,\n\t\tg: (color2.g - color1.g) / steps,\n\t\tb: (color2.b - color1.b) / steps,\n\t}\n}\n\n/**\n * Create a color palette from two colors\n *\n * @param steps - The number of steps the palette should have\n * @param color1 - The first color to mix\n * @param color2 - The second color to mix\n * @return The created palette array (mixed `color1` and `color2` with `steps` steps)\n */\nfunction mixPalette(steps: number, color1: Color, color2: Color): Color[] {\n\tconst palette: Color[] = []\n\tpalette.push(color1)\n\tconst increment = calculateStepIncrement(steps, color1, color2)\n\tfor (let i = 1; i < steps; i++) {\n\t\tconst r = Math.floor(color1.r + increment.r * i)\n\t\tconst g = Math.floor(color1.g + increment.g * i)\n\t\tconst b = Math.floor(color1.b + increment.b * i)\n\t\tpalette.push(new Color(r, g, b))\n\t}\n\treturn palette\n}\n\n/**\n * Like GenColor(4) but with labels\n */\nexport const defaultPalette = [\n\tnew Color(182, 70, 157, t('Purple')),\n\tnew Color(\n\t\t191, 103, 139,\n\t\tt('Rosy brown'), // TRANSLATORS: A color name for RGB(191, 103, 139)\n\t),\n\tnew Color(\n\t\t201, 136, 121,\n\t\tt('Feldspar'), // TRANSLATORS: A color name for RGB(201, 136, 121)\n\t),\n\tnew Color(\n\t\t211, 169, 103,\n\t\tt('Whiskey'), // TRANSLATORS: A color name for RGB(211, 169, 103)\n\t),\n\tnew Color(\n\t\t221, 203, 85,\n\t\tt('Gold'),\n\t),\n\tnew Color(\n\t\t165, 184, 114,\n\t\tt('Olivine'), // TRANSLATORS: A color name for RGB(165, 184, 114)\n\t),\n\tnew Color(\n\t\t110, 166, 143,\n\t\tt('Acapulco'), // TRANSLATORS: A color name for RGB(110, 166, 143)\n\t),\n\tnew Color(\n\t\t55, 148, 172,\n\t\tt('Boston Blue'), // TRANSLATORS: A color name for RGB(55, 148, 172)\n\t),\n\tnew Color(\n\t\t0, 130, 201,\n\t\tt('Nextcloud blue'),\n\t),\n\tnew Color(\n\t\t45, 115, 190,\n\t\tt('Mariner'), // TRANSLATORS: A color name for RGB(45, 115, 190)\n\t),\n\tnew Color(\n\t\t91, 100, 179,\n\t\tt('Blue Violet'), // TRANSLATORS: A color name for RGB(91, 100, 179)\n\t),\n\tnew Color(\n\t\t136, 85, 168,\n\t\tt('Deluge'), // TRANSLATORS: A color name for RGB(136, 85, 168)\n\t),\n]\n\n/**\n * Generate colors from the official nextcloud color\n * You can provide how many colors you want (multiplied by 3).\n *\n * For example if steps is set to 6, then 3 colors * 6 will result in 18 generated colors.\n *\n * @param steps - Number of steps to go from a color to another\n */\nexport function generatePalette(steps: number): Color[] {\n\tif (steps <= 0) {\n\t\tsteps = 6\n\t}\n\n\tif (steps === 4) {\n\t\treturn [...defaultPalette]\n\t}\n\n\tconst red = new Color(182, 70, 157, t('Purple'))\n\tconst yellow = new Color(221, 203, 85, t('Gold'))\n\tconst blue = new Color(0, 130, 201, t('Nextcloud blue'))\n\n\tconst palette1 = mixPalette(steps, red, yellow)\n\tconst palette2 = mixPalette(steps, yellow, blue)\n\tconst palette3 = mixPalette(steps, blue, red)\n\n\treturn palette1.concat(palette2).concat(palette3)\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants-Bls5liKo.mjs","sources":["../../src/composables/useIsDarkTheme/constants.ts"],"sourcesContent":["/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { ComputedRef, InjectionKey } from 'vue'\n\n/**\n * Enforced dark / light theme state\n *\n * @private\n */\nexport const INJECTION_KEY_THEME: InjectionKey<ComputedRef<'light' | 'dark' | ''>> = Symbol.for('nc:theme:enforced')\n"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAYa,MAAA,sBAAwE,OAAO,IAAI,mBAAmB;"}
1
+ {"version":3,"file":"constants-Bls5liKo.mjs","sources":["../../src/composables/useIsDarkTheme/constants.ts"],"sourcesContent":["/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { ComputedRef, InjectionKey } from 'vue'\n\n/**\n * Enforced dark / light theme state\n *\n * @private\n */\nexport const INJECTION_KEY_THEME: InjectionKey<ComputedRef<'light' | 'dark' | ''> | undefined> = Symbol.for('nc:theme:enforced')\n"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAYa,MAAA,sBAAoF,OAAO,IAAI,mBAAmB;"}