@nextcloud/vue 9.9.0 → 9.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (655) hide show
  1. package/CHANGELOG.md +88 -65
  2. package/dist/assets/{NcActionButton-DLer-aUY.css → NcActionButton.css} +1 -0
  3. package/dist/assets/{NcActionCheckbox-wD8m_a8-.css → NcActionCheckbox.css} +1 -0
  4. package/dist/assets/{NcActionInput-t9WvlgV0.css → NcActionInput.css} +70 -66
  5. package/dist/assets/{NcActionLink-b4Ph5q10.css → NcActionLink.css} +1 -0
  6. package/dist/assets/{NcActionRadio-D2rLM1ci.css → NcActionRadio.css} +1 -0
  7. package/dist/assets/{NcActionRouter-BWXfCfxM.css → NcActionRouter.css} +1 -0
  8. package/dist/assets/{NcActionText-Dzegj6AY.css → NcActionText.css} +1 -0
  9. package/dist/assets/{NcActionTextEditable-BlZeHZ7J.css → NcActionTextEditable.css} +67 -65
  10. package/dist/assets/{NcActions-y7ehwPSp.css → NcActions.css} +12 -12
  11. package/dist/assets/{NcAppNavigation-OHw55TTZ.css → NcAppNavigation.css} +17 -17
  12. package/dist/assets/{NcAppNavigationItem-BZ1xj6Xi.css → NcAppNavigationItem.css} +58 -48
  13. package/dist/assets/NcAppNavigationList.css +52 -0
  14. package/dist/assets/{NcAppNavigationNewItem-MaYQVcKF.css → NcAppNavigationNewItem.css} +13 -3
  15. package/dist/assets/{NcAppNavigationSettings-mWFhcXm0.css → NcAppNavigationSettings.css} +6 -6
  16. package/dist/assets/{NcAppSettingsDialog-Dh_scIK4.css → NcAppSettingsDialog.css} +3 -3
  17. package/dist/assets/{NcAppSettingsShortcutsSection-BHxkQTg2.css → NcAppSettingsShortcutsSection.css} +1 -1
  18. package/dist/assets/{NcAppSidebar-oJQ8kUb0.css → NcAppSidebar.css} +132 -78
  19. package/dist/assets/{NcAppSidebarTab-Xd3HTDbw.css → NcAppSidebarTab.css} +4 -4
  20. package/dist/assets/{NcAssistantButton-CT25wqIs.css → NcAssistantButton.css} +9 -9
  21. package/dist/assets/{NcAssistantContent-FV00e96S.css → NcAssistantContent.css} +3 -3
  22. package/dist/assets/{NcAssistantIcon-BMLpMaMJ.css → NcAssistantIcon.css} +4 -4
  23. package/dist/assets/{NcAvatar-Bs7qEhkA.css → NcAvatar.css} +39 -24
  24. package/dist/assets/{NcBlurHash-RgrahjEp.css → NcBlurHash.css} +2 -2
  25. package/dist/assets/{NcButton-DOrlC_y5.css → NcButton.css} +52 -50
  26. package/dist/assets/{NcCheckboxRadioSwitch-BlQSZVW0.css → NcCheckboxRadioSwitch.css} +36 -36
  27. package/dist/assets/{NcDateTimePicker-BQ_y9Ihj.css → NcDateTimePicker.css} +234 -234
  28. package/dist/assets/NcDateTimePickerNative.css +38 -0
  29. package/dist/assets/{NcEllipsisedOption-CPWbbgBy.css → NcEllipsisedOption.css} +10 -5
  30. package/dist/assets/{NcFilePicker-BdjtiV3h.css → NcFilePicker.css} +1 -1
  31. package/dist/assets/{NcFormBox-TRgICDO3.css → NcFormBox.css} +11 -11
  32. package/dist/assets/{NcFormBoxButton-ClkxmO-H.css → NcFormBoxButton.css} +2 -2
  33. package/dist/assets/{NcFormBoxItem-CABDVZLe.css → NcFormBoxItem.css} +19 -15
  34. package/dist/assets/{NcFormBoxSwitch-NCjook_Z.css → NcFormBoxSwitch.css} +2 -2
  35. package/dist/assets/{NcFormGroup-eh8-PBGB.css → NcFormGroup.css} +7 -7
  36. package/dist/assets/{NcHeaderMenu-Hy0UKyUu.css → NcHeaderMenu.css} +22 -24
  37. package/dist/assets/{NcHotkey-Dm-26TVC.css → NcHotkey.css} +8 -8
  38. package/dist/assets/{NcHotkeyList-BigfRqyr.css → NcHotkeyList.css} +2 -2
  39. package/dist/assets/{NcIconToggleSwitch-zUXkaJHv.css → NcIconToggleSwitch.css} +4 -4
  40. package/dist/assets/{NcInputField-DpyFJ1xw.css → NcInputField.css} +43 -43
  41. package/dist/assets/{NcKbd-DcC56WbC.css → NcKbd.css} +3 -3
  42. package/dist/assets/NcPopover.css +108 -0
  43. package/dist/assets/NcProfileHoverCard.css +340 -0
  44. package/dist/assets/{NcProgressBar-B6wveIA1.css → NcProgressBar.css} +14 -14
  45. package/dist/assets/{NcRadioGroup-CtXZ4Y8D.css → NcRadioGroup.css} +2 -2
  46. package/dist/assets/{NcRadioGroupButton-BuB-aWeJ.css → NcRadioGroupButton.css} +19 -14
  47. package/dist/assets/NcReferenceWidget.css +150 -0
  48. package/dist/assets/{NcRichContenteditable-BCUBhRqg.css → NcRichContenteditable.css} +17 -17
  49. package/dist/assets/NcSelect.css +397 -0
  50. package/dist/assets/NcSelectUsers.css +12 -0
  51. package/dist/assets/{autolink-XS-VDSVB.css → autolink.css} +3 -3
  52. package/dist/assets/{referencePickerModal-BNPfxyni.css → referencePickerModal.css} +0 -149
  53. package/dist/chunks/{ArrowRight-B1ncAhus.mjs → ArrowRight.mjs} +2 -2
  54. package/dist/chunks/ArrowRight.mjs.map +1 -0
  55. package/dist/chunks/{ChevronDown-C6gc637b.mjs → ChevronDown.mjs} +2 -2
  56. package/dist/chunks/ChevronDown.mjs.map +1 -0
  57. package/dist/chunks/{ChevronUp-ChH8oB7p.mjs → ChevronUp.mjs} +2 -2
  58. package/dist/chunks/ChevronUp.mjs.map +1 -0
  59. package/dist/chunks/{Close-CuhcJnX2.mjs → Close.mjs} +2 -2
  60. package/dist/chunks/Close.mjs.map +1 -0
  61. package/dist/chunks/{NcActionButton-BO5T5ePT.mjs → NcActionButton.mjs} +7 -7
  62. package/dist/chunks/NcActionButton.mjs.map +1 -0
  63. package/dist/chunks/{NcActionButtonGroup-Dd03Oluy.mjs → NcActionButtonGroup.mjs} +6 -6
  64. package/dist/chunks/NcActionButtonGroup.mjs.map +1 -0
  65. package/dist/chunks/{NcActionCaption-f7L9gBlT.mjs → NcActionCaption.mjs} +4 -4
  66. package/dist/chunks/NcActionCaption.mjs.map +1 -0
  67. package/dist/chunks/{NcActionCheckbox-DBqiK-AZ.mjs → NcActionCheckbox.mjs} +8 -8
  68. package/dist/chunks/NcActionCheckbox.mjs.map +1 -0
  69. package/dist/chunks/{NcActionInput-Dr8Yrafu.mjs → NcActionInput.mjs} +14 -13
  70. package/dist/chunks/NcActionInput.mjs.map +1 -0
  71. package/dist/chunks/{NcActionLink-BFiaYt9A.mjs → NcActionLink.mjs} +5 -5
  72. package/dist/chunks/NcActionLink.mjs.map +1 -0
  73. package/dist/chunks/{NcActionRadio-BA08CAtA.mjs → NcActionRadio.mjs} +8 -8
  74. package/dist/chunks/NcActionRadio.mjs.map +1 -0
  75. package/dist/chunks/{NcActionRouter-vYFtIOzD.mjs → NcActionRouter.mjs} +5 -5
  76. package/dist/chunks/NcActionRouter.mjs.map +1 -0
  77. package/dist/chunks/{NcActionSeparator-B9pNQaji.mjs → NcActionSeparator.mjs} +3 -3
  78. package/dist/chunks/NcActionSeparator.mjs.map +1 -0
  79. package/dist/chunks/{NcActionText-CQ9qwJ0p.mjs → NcActionText.mjs} +5 -5
  80. package/dist/chunks/NcActionText.mjs.map +1 -0
  81. package/dist/chunks/{NcActionTextEditable-B8y_GEre.mjs → NcActionTextEditable.mjs} +8 -8
  82. package/dist/chunks/NcActionTextEditable.mjs.map +1 -0
  83. package/dist/chunks/{NcActions-C-wDqSrv.mjs → NcActions.mjs} +12 -12
  84. package/dist/chunks/NcActions.mjs.map +1 -0
  85. package/dist/chunks/{NcAppContent-DavgjaFX.mjs → NcAppContent.mjs} +11 -11
  86. package/dist/chunks/NcAppContent.mjs.map +1 -0
  87. package/dist/chunks/{NcAppContentDetails.vue_vue_type_script_setup_true_lang-BWl5Pw5g.mjs → NcAppContentDetails.vue_vue_type_script_setup_true_lang.mjs} +1 -1
  88. package/dist/chunks/NcAppContentDetails.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
  89. package/dist/chunks/{NcAppContentList-Copx3Ver.mjs → NcAppContentList.mjs} +2 -2
  90. package/dist/chunks/NcAppContentList.mjs.map +1 -0
  91. package/dist/chunks/{NcAppNavigation-g57j16pB.mjs → NcAppNavigation.mjs} +17 -16
  92. package/dist/chunks/NcAppNavigation.mjs.map +1 -0
  93. package/dist/chunks/{NcAppNavigationCaption-VjSWJ8R4.mjs → NcAppNavigationCaption.mjs} +4 -4
  94. package/dist/chunks/NcAppNavigationCaption.mjs.map +1 -0
  95. package/dist/chunks/{NcAppNavigationIconBullet-BmU-dPcY.mjs → NcAppNavigationIconBullet.mjs} +3 -3
  96. package/dist/chunks/NcAppNavigationIconBullet.mjs.map +1 -0
  97. package/dist/chunks/{NcAppNavigationItem-CDeYtA3E.mjs → NcAppNavigationItem.mjs} +53 -24
  98. package/dist/chunks/NcAppNavigationItem.mjs.map +1 -0
  99. package/dist/chunks/NcAppNavigationList.mjs +147 -0
  100. package/dist/chunks/NcAppNavigationList.mjs.map +1 -0
  101. package/dist/chunks/{NcAppNavigationNew-CBNppM7Q.mjs → NcAppNavigationNew.mjs} +4 -4
  102. package/dist/chunks/NcAppNavigationNew.mjs.map +1 -0
  103. package/dist/chunks/{NcAppNavigationNewItem-B1RfQkvu.mjs → NcAppNavigationNewItem.mjs} +5 -5
  104. package/dist/chunks/NcAppNavigationNewItem.mjs.map +1 -0
  105. package/dist/chunks/{NcAppNavigationSearch-CQQWb1Eq.mjs → NcAppNavigationSearch.mjs} +7 -7
  106. package/dist/chunks/NcAppNavigationSearch.mjs.map +1 -0
  107. package/dist/chunks/{NcAppNavigationSettings-DoMjRExO.mjs → NcAppNavigationSettings.mjs} +16 -16
  108. package/dist/chunks/NcAppNavigationSettings.mjs.map +1 -0
  109. package/dist/chunks/{NcAppNavigationSpacer-CIRC4ZEj.mjs → NcAppNavigationSpacer.mjs} +3 -3
  110. package/dist/chunks/NcAppNavigationSpacer.mjs.map +1 -0
  111. package/dist/chunks/{NcAppSettingsDialog-BPcEYLjP.mjs → NcAppSettingsDialog.mjs} +13 -13
  112. package/dist/chunks/NcAppSettingsDialog.mjs.map +1 -0
  113. package/dist/chunks/{NcAppSettingsSection-BosSmisT.mjs → NcAppSettingsSection.mjs} +5 -5
  114. package/dist/chunks/NcAppSettingsSection.mjs.map +1 -0
  115. package/dist/chunks/{NcAppSettingsShortcutsSection-DLwubKV9.mjs → NcAppSettingsShortcutsSection.mjs} +7 -7
  116. package/dist/chunks/NcAppSettingsShortcutsSection.mjs.map +1 -0
  117. package/dist/chunks/{NcAppSidebar-C8YzAzrZ.mjs → NcAppSidebar.mjs} +180 -46
  118. package/dist/chunks/NcAppSidebar.mjs.map +1 -0
  119. package/dist/chunks/{NcAppSidebarHeader.vue_vue_type_script_setup_true_lang-C-QhdyiN.mjs → NcAppSidebarHeader.vue_vue_type_script_setup_true_lang.mjs} +1 -1
  120. package/dist/chunks/NcAppSidebarHeader.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
  121. package/dist/chunks/{NcAppSidebarTab-DOSDDbGA.mjs → NcAppSidebarTab.mjs} +15 -8
  122. package/dist/chunks/NcAppSidebarTab.mjs.map +1 -0
  123. package/dist/chunks/{NcAssistantButton-iK491d2v.mjs → NcAssistantButton.mjs} +14 -14
  124. package/dist/chunks/NcAssistantButton.mjs.map +1 -0
  125. package/dist/chunks/{NcAssistantContent-iHA4O4cC.mjs → NcAssistantContent.mjs} +6 -6
  126. package/dist/chunks/NcAssistantContent.mjs.map +1 -0
  127. package/dist/chunks/{NcAssistantIcon-C6s4Qm7-.mjs → NcAssistantIcon.mjs} +9 -9
  128. package/dist/chunks/NcAssistantIcon.mjs.map +1 -0
  129. package/dist/chunks/{NcAvatar-1KxMUN7V.mjs → NcAvatar.mjs} +214 -80
  130. package/dist/chunks/NcAvatar.mjs.map +1 -0
  131. package/dist/chunks/{NcBlurHash-B30Ol8KP.mjs → NcBlurHash.mjs} +6 -6
  132. package/dist/chunks/NcBlurHash.mjs.map +1 -0
  133. package/dist/chunks/{NcBreadcrumb-3Y5NWXnV.mjs → NcBreadcrumb.mjs} +6 -6
  134. package/dist/chunks/NcBreadcrumb.mjs.map +1 -0
  135. package/dist/chunks/{NcBreadcrumbs-BaTp3Sya.mjs → NcBreadcrumbs.mjs} +8 -8
  136. package/dist/chunks/NcBreadcrumbs.mjs.map +1 -0
  137. package/dist/chunks/{NcButton-jvoYS2my.mjs → NcButton.mjs} +6 -6
  138. package/dist/chunks/NcButton.mjs.map +1 -0
  139. package/dist/chunks/{NcCheckboxRadioSwitch-DVdt5Hkq.mjs → NcCheckboxRadioSwitch.mjs} +22 -12
  140. package/dist/chunks/NcCheckboxRadioSwitch.mjs.map +1 -0
  141. package/dist/chunks/{NcChip-DKRlV47q.mjs → NcChip.mjs} +9 -9
  142. package/dist/chunks/NcChip.mjs.map +1 -0
  143. package/dist/chunks/{NcCollectionList-B9qCtjJw.mjs → NcCollectionList.mjs} +12 -12
  144. package/dist/chunks/NcCollectionList.mjs.map +1 -0
  145. package/dist/chunks/{NcColorPicker-BCkasLwT.mjs → NcColorPicker.mjs} +12 -12
  146. package/dist/chunks/NcColorPicker.mjs.map +1 -0
  147. package/dist/chunks/{NcContent-BYh5hWDN.mjs → NcContent.mjs} +9 -9
  148. package/dist/chunks/NcContent.mjs.map +1 -0
  149. package/dist/chunks/{NcCounterBubble-CV0YMrXW.mjs → NcCounterBubble.mjs} +3 -3
  150. package/dist/chunks/NcCounterBubble.mjs.map +1 -0
  151. package/dist/chunks/{NcDashboardWidget-zmbDEGL-.mjs → NcDashboardWidget.mjs} +8 -8
  152. package/dist/chunks/NcDashboardWidget.mjs.map +1 -0
  153. package/dist/chunks/{NcDashboardWidgetItem-DwDndrm_.mjs → NcDashboardWidgetItem.mjs} +6 -6
  154. package/dist/chunks/NcDashboardWidgetItem.mjs.map +1 -0
  155. package/dist/chunks/{NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7.mjs → NcDateTime.vue_vue_type_script_setup_true_lang.mjs} +1 -1
  156. package/dist/chunks/NcDateTime.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
  157. package/dist/chunks/NcDateTimePicker.mjs +2979 -0
  158. package/dist/chunks/NcDateTimePicker.mjs.map +1 -0
  159. package/dist/chunks/{NcDateTimePickerNative-B8CMOUnH.mjs → NcDateTimePickerNative.mjs} +21 -26
  160. package/dist/chunks/NcDateTimePickerNative.mjs.map +1 -0
  161. package/dist/chunks/{NcDialog-D617YI0t.mjs → NcDialog.mjs} +6 -6
  162. package/dist/chunks/NcDialog.mjs.map +1 -0
  163. package/dist/chunks/{NcDialogButton.vue_vue_type_script_setup_true_lang-Bqfy678u.mjs → NcDialogButton.vue_vue_type_script_setup_true_lang.mjs} +6 -6
  164. package/dist/chunks/NcDialogButton.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
  165. package/dist/chunks/{NcEllipsisedOption-D6Amb91K.mjs → NcEllipsisedOption.mjs} +5 -5
  166. package/dist/chunks/NcEllipsisedOption.mjs.map +1 -0
  167. package/dist/chunks/{NcEmojiPicker-UTxgju3f.mjs → NcEmojiPicker.mjs} +12 -12
  168. package/dist/chunks/NcEmojiPicker.mjs.map +1 -0
  169. package/dist/chunks/{NcEmptyContent-CGAPqk4S.mjs → NcEmptyContent.mjs} +4 -4
  170. package/dist/chunks/NcEmptyContent.mjs.map +1 -0
  171. package/dist/chunks/{NcFilePicker-bD2toutn.mjs → NcFilePicker.mjs} +9 -9
  172. package/dist/chunks/NcFilePicker.mjs.map +1 -0
  173. package/dist/chunks/{NcFormBox-Bmqar8nn.mjs → NcFormBox.mjs} +9 -9
  174. package/dist/chunks/NcFormBox.mjs.map +1 -0
  175. package/dist/chunks/{NcFormBoxButton-G_PkUiQy.mjs → NcFormBoxButton.mjs} +8 -8
  176. package/dist/chunks/NcFormBoxButton.mjs.map +1 -0
  177. package/dist/chunks/{NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang-BA_gWnmz.mjs → NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang.mjs} +4 -4
  178. package/dist/chunks/NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
  179. package/dist/chunks/{NcFormBoxItem-Cm8aZaVJ.mjs → NcFormBoxItem.mjs} +14 -14
  180. package/dist/chunks/NcFormBoxItem.mjs.map +1 -0
  181. package/dist/chunks/{NcFormBoxSwitch-DSXiQcnq.mjs → NcFormBoxSwitch.mjs} +8 -8
  182. package/dist/chunks/NcFormBoxSwitch.mjs.map +1 -0
  183. package/dist/chunks/{NcFormGroup-N7qIFAwN.mjs → NcFormGroup.mjs} +11 -11
  184. package/dist/chunks/NcFormGroup.mjs.map +1 -0
  185. package/dist/chunks/{NcGuestContent-CvT6VGt1.mjs → NcGuestContent.mjs} +3 -3
  186. package/dist/chunks/NcGuestContent.mjs.map +1 -0
  187. package/dist/chunks/{NcHeaderButton-BnLwYCog.mjs → NcHeaderButton.mjs} +5 -5
  188. package/dist/chunks/NcHeaderButton.mjs.map +1 -0
  189. package/dist/chunks/{NcHeaderMenu-ktQJV2SW.mjs → NcHeaderMenu.mjs} +14 -20
  190. package/dist/chunks/NcHeaderMenu.mjs.map +1 -0
  191. package/dist/chunks/{NcHighlight.vue_vue_type_script_lang-DnWQDM_2.mjs → NcHighlight.vue_vue_type_script_lang.mjs} +1 -1
  192. package/dist/chunks/NcHighlight.vue_vue_type_script_lang.mjs.map +1 -0
  193. package/dist/chunks/{NcHotkey-BDGeF3eH.mjs → NcHotkey.mjs} +8 -8
  194. package/dist/chunks/NcHotkey.mjs.map +1 -0
  195. package/dist/chunks/{NcHotkeyList-B4WjTLAp.mjs → NcHotkeyList.mjs} +8 -8
  196. package/dist/chunks/NcHotkeyList.mjs.map +1 -0
  197. package/dist/chunks/{NcIconSvgWrapper-g8ubWhoz.mjs → NcIconSvgWrapper.mjs} +3 -3
  198. package/dist/chunks/NcIconSvgWrapper.mjs.map +1 -0
  199. package/dist/chunks/{NcIconToggleSwitch-CRvGt4su.mjs → NcIconToggleSwitch.mjs} +6 -6
  200. package/dist/chunks/NcIconToggleSwitch.mjs.map +1 -0
  201. package/dist/chunks/{NcInputConfirmCancel-CGTllrXj.mjs → NcInputConfirmCancel.mjs} +9 -9
  202. package/dist/chunks/NcInputConfirmCancel.mjs.map +1 -0
  203. package/dist/chunks/{NcInputField-5Sg6EUP6.mjs → NcInputField.mjs} +9 -9
  204. package/dist/chunks/NcInputField.mjs.map +1 -0
  205. package/dist/chunks/{NcKbd-Bh_Tk6Ar.mjs → NcKbd.mjs} +8 -8
  206. package/dist/chunks/NcKbd.mjs.map +1 -0
  207. package/dist/chunks/{NcListItem-BliLJpvU.mjs → NcListItem.mjs} +7 -7
  208. package/dist/chunks/NcListItem.mjs.map +1 -0
  209. package/dist/chunks/{NcListItemIcon-Dl_tfkk9.mjs → NcListItemIcon.mjs} +7 -7
  210. package/dist/chunks/NcListItemIcon.mjs.map +1 -0
  211. package/dist/chunks/{NcLoadingIcon-BOVpFVQz.mjs → NcLoadingIcon.mjs} +3 -3
  212. package/dist/chunks/NcLoadingIcon.mjs.map +1 -0
  213. package/dist/chunks/{NcMentionBubble.vue_vue_type_style_index_0_scoped_3c4a673d_lang-DyqakLm5.mjs → NcMentionBubble.vue_vue_type_style_index_0_scoped_3c4a673d_lang.mjs} +2 -2
  214. package/dist/chunks/NcMentionBubble.vue_vue_type_style_index_0_scoped_3c4a673d_lang.mjs.map +1 -0
  215. package/dist/chunks/{NcModal-DiDvgcU8.mjs → NcModal.mjs} +12 -12
  216. package/dist/chunks/NcModal.mjs.map +1 -0
  217. package/dist/chunks/{NcNoteCard-mI7qVZ9j.mjs → NcNoteCard.mjs} +6 -6
  218. package/dist/chunks/NcNoteCard.mjs.map +1 -0
  219. package/dist/chunks/{NcPasswordField-BFyzHTOO.mjs → NcPasswordField.mjs} +9 -9
  220. package/dist/chunks/NcPasswordField.mjs.map +1 -0
  221. package/dist/chunks/{NcPopover-B87bEPLq.mjs → NcPopover.mjs} +9 -10
  222. package/dist/chunks/NcPopover.mjs.map +1 -0
  223. package/dist/chunks/NcProfileHoverCard.mjs +777 -0
  224. package/dist/chunks/NcProfileHoverCard.mjs.map +1 -0
  225. package/dist/chunks/{NcProgressBar-C-ane-Ni.mjs → NcProgressBar.mjs} +20 -10
  226. package/dist/chunks/NcProgressBar.mjs.map +1 -0
  227. package/dist/chunks/{NcRadioGroup-B4qmS2UD.mjs → NcRadioGroup.mjs} +8 -8
  228. package/dist/chunks/NcRadioGroup.mjs.map +1 -0
  229. package/dist/chunks/{NcRadioGroupButton-CZykGwv3.mjs → NcRadioGroupButton.mjs} +12 -12
  230. package/dist/chunks/NcRadioGroupButton.mjs.map +1 -0
  231. package/dist/chunks/NcReferenceWidget.mjs +292 -0
  232. package/dist/chunks/NcReferenceWidget.mjs.map +1 -0
  233. package/dist/chunks/{NcRelatedResourcesPanel-D_Ttpg5_.mjs → NcRelatedResourcesPanel.mjs} +13 -13
  234. package/dist/chunks/NcRelatedResourcesPanel.mjs.map +1 -0
  235. package/dist/chunks/{NcRichContenteditable-Qw614bJ5.mjs → NcRichContenteditable.mjs} +37 -35
  236. package/dist/chunks/NcRichContenteditable.mjs.map +1 -0
  237. package/dist/chunks/{NcRichText-BO_4KtBA.mjs → NcRichText.mjs} +12 -12
  238. package/dist/chunks/NcRichText.mjs.map +1 -0
  239. package/dist/chunks/{NcSavingIndicatorIcon.vue_vue_type_script_setup_true_lang-DbQnMYZm.mjs → NcSavingIndicatorIcon.vue_vue_type_script_setup_true_lang.mjs} +1 -1
  240. package/dist/chunks/NcSavingIndicatorIcon.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
  241. package/dist/chunks/{NcSelect--kERLlBK.mjs → NcSelect.mjs} +124 -29
  242. package/dist/chunks/NcSelect.mjs.map +1 -0
  243. package/dist/chunks/{NcSelectTags-I2hJaNax.mjs → NcSelectTags.mjs} +6 -6
  244. package/dist/chunks/NcSelectTags.mjs.map +1 -0
  245. package/dist/chunks/{NcSelectUsers-K14Bepkq.mjs → NcSelectUsers.mjs} +6 -6
  246. package/dist/chunks/NcSelectUsers.mjs.map +1 -0
  247. package/dist/chunks/{NcSettingsSection-Caz1fuWt.mjs → NcSettingsSection.mjs} +5 -5
  248. package/dist/chunks/NcSettingsSection.mjs.map +1 -0
  249. package/dist/chunks/{NcSettingsSelectGroup-SYJ8-XlR.mjs → NcSettingsSelectGroup.mjs} +7 -7
  250. package/dist/chunks/NcSettingsSelectGroup.mjs.map +1 -0
  251. package/dist/chunks/{NcTextArea-Dxzj4zdb.mjs → NcTextArea.mjs} +8 -8
  252. package/dist/chunks/NcTextArea.mjs.map +1 -0
  253. package/dist/chunks/{NcTextField.vue_vue_type_script_setup_true_lang-Bx2esFU2.mjs → NcTextField.vue_vue_type_script_setup_true_lang.mjs} +7 -7
  254. package/dist/chunks/NcTextField.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
  255. package/dist/chunks/{NcThemeProvider.vue_vue_type_script_setup_true_lang-wie70gn4.mjs → NcThemeProvider.vue_vue_type_script_setup_true_lang.mjs} +2 -2
  256. package/dist/chunks/NcThemeProvider.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
  257. package/dist/chunks/{NcTimezonePicker.vue_vue_type_script_setup_true_lang-D7ZHgnwW.mjs → NcTimezonePicker.vue_vue_type_script_setup_true_lang.mjs} +5 -5
  258. package/dist/chunks/NcTimezonePicker.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
  259. package/dist/chunks/{NcUserBubble-BXR7vT0V.mjs → NcUserBubble.mjs} +5 -5
  260. package/dist/chunks/NcUserBubble.mjs.map +1 -0
  261. package/dist/chunks/{NcUserStatusIcon-BF5OEQFU.mjs → NcUserStatusIcon.mjs} +7 -7
  262. package/dist/chunks/NcUserStatusIcon.mjs.map +1 -0
  263. package/dist/chunks/{NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs → NcVNodes.vue_vue_type_script_lang.mjs} +1 -1
  264. package/dist/chunks/NcVNodes.vue_vue_type_script_lang.mjs.map +1 -0
  265. package/dist/chunks/{_l10n-wdIzZwir.mjs → _l10n.mjs} +106 -104
  266. package/dist/chunks/_l10n.mjs.map +1 -0
  267. package/dist/chunks/{_plugin-vue_export-helper-1tPrXgE0.mjs → _plugin-vue_export-helper.mjs} +1 -1
  268. package/dist/chunks/_plugin-vue_export-helper.mjs.map +1 -0
  269. package/dist/chunks/{actionGlobal-BZFdtdJL.mjs → actionGlobal.mjs} +1 -1
  270. package/dist/chunks/actionGlobal.mjs.map +1 -0
  271. package/dist/chunks/{actionText-BXR0sWNu.mjs → actionText.mjs} +3 -3
  272. package/dist/chunks/actionText.mjs.map +1 -0
  273. package/dist/chunks/{appName-DyNMVZpX.mjs → appName.mjs} +2 -2
  274. package/dist/chunks/appName.mjs.map +1 -0
  275. package/dist/chunks/{autolink-DrIurosL.mjs → autolink.mjs} +7 -7
  276. package/dist/chunks/autolink.mjs.map +1 -0
  277. package/dist/chunks/{colors-Cv9F-jWS.mjs → colors.mjs} +3 -3
  278. package/dist/chunks/colors.mjs.map +1 -0
  279. package/dist/chunks/{constants-wIEKSp2G.mjs → constants.mjs} +1 -1
  280. package/dist/chunks/constants.mjs.map +1 -0
  281. package/dist/chunks/{constants-Ciwvl5xb.mjs → constants2.mjs} +1 -1
  282. package/dist/chunks/constants2.mjs.map +1 -0
  283. package/dist/chunks/{createElementId-DhjFt1I9.mjs → createElementId.mjs} +1 -1
  284. package/dist/chunks/createElementId.mjs.map +1 -0
  285. package/dist/chunks/customPickerElements.mjs +61 -0
  286. package/dist/chunks/customPickerElements.mjs.map +1 -0
  287. package/dist/chunks/{emoji-C8k9NUlo.mjs → emoji.mjs} +1 -1
  288. package/dist/chunks/emoji.mjs.map +1 -0
  289. package/dist/chunks/{focusTrap-HJQ4pqHV.mjs → focusTrap.mjs} +1 -1
  290. package/dist/chunks/focusTrap.mjs.map +1 -0
  291. package/dist/chunks/highlight.mjs +5 -0
  292. package/dist/chunks/highlight.mjs.map +1 -0
  293. package/dist/chunks/{legacy-BoqDmOCa.mjs → legacy.mjs} +4 -2
  294. package/dist/chunks/legacy.mjs.map +1 -0
  295. package/dist/chunks/{logger-D3RVzcfQ.mjs → logger.mjs} +1 -1
  296. package/dist/chunks/logger.mjs.map +1 -0
  297. package/dist/chunks/{mdi-CpchYUUV.mjs → mdi.mjs} +12 -14
  298. package/dist/chunks/mdi.mjs.map +1 -0
  299. package/dist/chunks/{platform-CC2ecGvV.mjs → platform.mjs} +1 -1
  300. package/dist/chunks/platform.mjs.map +1 -0
  301. package/dist/chunks/{referencePickerModal-CnKdEDwu.mjs → referencePickerModal.mjs} +60 -342
  302. package/dist/chunks/referencePickerModal.mjs.map +1 -0
  303. package/dist/chunks/{rtl-v0UOPAM7.mjs → rtl.mjs} +1 -1
  304. package/dist/chunks/rtl.mjs.map +1 -0
  305. package/dist/chunks/{useAppSettingsDialog-C73Wx6iQ.mjs → useAppSettingsDialog.mjs} +1 -1
  306. package/dist/chunks/useAppSettingsDialog.mjs.map +1 -0
  307. package/dist/chunks/{useCopy-6F-qWHq0.mjs → useCopy.mjs} +4 -4
  308. package/dist/chunks/useCopy.mjs.map +1 -0
  309. package/dist/chunks/{useNcActions-BzPO2c4h.mjs → useNcActions.mjs} +1 -1
  310. package/dist/chunks/useNcActions.mjs.map +1 -0
  311. package/dist/chunks/{useNcFormBox-Djlh582y.mjs → useNcFormBox.mjs} +1 -1
  312. package/dist/chunks/useNcFormBox.mjs.map +1 -0
  313. package/dist/chunks/{useNcRadioGroup-D6llQmAl.mjs → useNcRadioGroup.mjs} +1 -1
  314. package/dist/chunks/useNcRadioGroup.mjs.map +1 -0
  315. package/dist/chunks/{useTrapStackControl-B6cEicto.mjs → useTrapStackControl.mjs} +2 -2
  316. package/dist/chunks/useTrapStackControl.mjs.map +1 -0
  317. package/dist/chunks/widgets.mjs +66 -0
  318. package/dist/chunks/widgets.mjs.map +1 -0
  319. package/dist/components/NcActionButton/index.mjs +1 -1
  320. package/dist/components/NcActionButtonGroup/index.mjs +1 -1
  321. package/dist/components/NcActionCaption/index.mjs +1 -1
  322. package/dist/components/NcActionCheckbox/index.mjs +1 -1
  323. package/dist/components/NcActionInput/NcActionInput.vue.d.ts +302 -103
  324. package/dist/components/NcActionInput/index.mjs +1 -1
  325. package/dist/components/NcActionLink/index.mjs +1 -1
  326. package/dist/components/NcActionRadio/index.mjs +1 -1
  327. package/dist/components/NcActionRouter/index.mjs +1 -1
  328. package/dist/components/NcActionSeparator/index.mjs +1 -1
  329. package/dist/components/NcActionText/index.mjs +1 -1
  330. package/dist/components/NcActionTextEditable/index.mjs +1 -1
  331. package/dist/components/NcActions/NcActions.vue.d.ts +3 -3
  332. package/dist/components/NcActions/index.mjs +1 -1
  333. package/dist/components/NcAppContent/index.mjs +1 -1
  334. package/dist/components/NcAppContentDetails/index.mjs +1 -1
  335. package/dist/components/NcAppContentList/index.mjs +1 -1
  336. package/dist/components/NcAppNavigation/index.mjs +1 -1
  337. package/dist/components/NcAppNavigationCaption/NcAppNavigationCaption.vue.d.ts +3 -3
  338. package/dist/components/NcAppNavigationCaption/index.mjs +1 -1
  339. package/dist/components/NcAppNavigationIconBullet/index.mjs +1 -1
  340. package/dist/components/NcAppNavigationItem/NcAppNavigationItem.vue.d.ts +10 -6
  341. package/dist/components/NcAppNavigationItem/NcInputConfirmCancel.vue.d.ts +1 -1
  342. package/dist/components/NcAppNavigationItem/index.mjs +1 -1
  343. package/dist/components/NcAppNavigationList/NcAppNavigationList.vue.d.ts +57 -1
  344. package/dist/components/NcAppNavigationList/highlight.d.ts +12 -0
  345. package/dist/components/NcAppNavigationList/index.mjs +1 -1
  346. package/dist/components/NcAppNavigationNew/index.mjs +1 -1
  347. package/dist/components/NcAppNavigationNewItem/NcAppNavigationNewItem.vue.d.ts +1 -1
  348. package/dist/components/NcAppNavigationNewItem/index.mjs +1 -1
  349. package/dist/components/NcAppNavigationSearch/NcAppNavigationSearch.vue.d.ts +16 -16
  350. package/dist/components/NcAppNavigationSearch/index.mjs +1 -1
  351. package/dist/components/NcAppNavigationSettings/index.mjs +1 -1
  352. package/dist/components/NcAppNavigationSpacer/index.mjs +1 -1
  353. package/dist/components/NcAppSettingsDialog/index.mjs +1 -1
  354. package/dist/components/NcAppSettingsSection/index.mjs +1 -1
  355. package/dist/components/NcAppSettingsSectionShortcuts/index.mjs +1 -1
  356. package/dist/components/NcAppSettingsShortcutsSection/index.mjs +1 -1
  357. package/dist/components/NcAppSidebar/NcAppSidebar.vue.d.ts +23 -4
  358. package/dist/components/NcAppSidebar/NcAppSidebarTabs.vue.d.ts +43 -0
  359. package/dist/components/NcAppSidebar/NcAppSidebarTabsButton.vue.d.ts +5 -0
  360. package/dist/components/NcAppSidebar/index.mjs +1 -1
  361. package/dist/components/NcAppSidebarHeader/index.mjs +1 -1
  362. package/dist/components/NcAppSidebarTab/NcAppSidebarTab.vue.d.ts +14 -4
  363. package/dist/components/NcAppSidebarTab/index.mjs +1 -1
  364. package/dist/components/NcAssistantButton/index.mjs +1 -1
  365. package/dist/components/NcAssistantContent/index.mjs +1 -1
  366. package/dist/components/NcAssistantIcon/index.mjs +1 -1
  367. package/dist/components/NcAvatar/NcAvatar.vue.d.ts +53 -138
  368. package/dist/components/NcAvatar/index.mjs +1 -1
  369. package/dist/components/NcBlurHash/index.mjs +1 -1
  370. package/dist/components/NcBreadcrumb/NcBreadcrumb.vue.d.ts +4 -4
  371. package/dist/components/NcBreadcrumb/index.mjs +1 -1
  372. package/dist/components/NcBreadcrumbs/NcBreadcrumbs.vue.d.ts +7 -7
  373. package/dist/components/NcBreadcrumbs/index.mjs +1 -1
  374. package/dist/components/NcButton/index.mjs +1 -1
  375. package/dist/components/NcCheckboxRadioSwitch/index.mjs +1 -1
  376. package/dist/components/NcChip/index.mjs +1 -1
  377. package/dist/components/NcCollectionList/NcCollectionList.vue.d.ts +272 -280
  378. package/dist/components/NcCollectionList/NcCollectionListItem.vue.d.ts +38 -140
  379. package/dist/components/NcCollectionList/index.mjs +1 -1
  380. package/dist/components/NcColorPicker/index.mjs +1 -1
  381. package/dist/components/NcContent/index.mjs +1 -1
  382. package/dist/components/NcCounterBubble/index.mjs +1 -1
  383. package/dist/components/NcDashboardWidget/NcDashboardWidget.vue.d.ts +73 -277
  384. package/dist/components/NcDashboardWidget/index.mjs +1 -1
  385. package/dist/components/NcDashboardWidgetItem/NcDashboardWidgetItem.vue.d.ts +38 -140
  386. package/dist/components/NcDashboardWidgetItem/index.mjs +1 -1
  387. package/dist/components/NcDateTime/index.mjs +1 -1
  388. package/dist/components/NcDateTimePicker/NcDateTimePicker.vue.d.ts +82 -80
  389. package/dist/components/NcDateTimePicker/dateFnsLocaleLoader.d.ts +3 -0
  390. package/dist/components/NcDateTimePicker/format.d.ts +35 -0
  391. package/dist/components/NcDateTimePicker/index.mjs +1 -1
  392. package/dist/components/NcDateTimePicker/useDateFnsLocale.d.ts +16 -0
  393. package/dist/components/NcDateTimePickerNative/index.mjs +1 -1
  394. package/dist/components/NcDialog/index.mjs +1 -1
  395. package/dist/components/NcDialogButton/index.mjs +1 -1
  396. package/dist/components/NcEllipsisedOption/index.mjs +1 -1
  397. package/dist/components/NcEmojiPicker/NcEmojiPicker.vue.d.ts +14 -11
  398. package/dist/components/NcEmojiPicker/index.mjs +1 -1
  399. package/dist/components/NcEmptyContent/index.mjs +1 -1
  400. package/dist/components/NcFilePicker/index.mjs +1 -1
  401. package/dist/components/NcFormBox/index.mjs +1 -1
  402. package/dist/components/NcFormBoxButton/index.mjs +1 -1
  403. package/dist/components/NcFormBoxCopyButton/index.mjs +1 -1
  404. package/dist/components/NcFormBoxSwitch/index.mjs +1 -1
  405. package/dist/components/NcFormGroup/index.mjs +1 -1
  406. package/dist/components/NcGuestContent/index.mjs +1 -1
  407. package/dist/components/NcHeaderButton/index.mjs +1 -1
  408. package/dist/components/NcHeaderMenu/index.mjs +1 -1
  409. package/dist/components/NcHighlight/index.mjs +1 -1
  410. package/dist/components/NcHotkey/index.mjs +1 -1
  411. package/dist/components/NcHotkeyList/index.mjs +1 -1
  412. package/dist/components/NcIconSvgWrapper/index.mjs +1 -1
  413. package/dist/components/NcInputField/NcInputField.vue.d.ts +8 -5
  414. package/dist/components/NcInputField/index.mjs +1 -1
  415. package/dist/components/NcKbd/index.mjs +1 -1
  416. package/dist/components/NcListItem/NcListItem.vue.d.ts +3 -3
  417. package/dist/components/NcListItem/index.mjs +1 -1
  418. package/dist/components/NcListItemIcon/NcListItemIcon.vue.d.ts +36 -138
  419. package/dist/components/NcListItemIcon/index.mjs +1 -1
  420. package/dist/components/NcLoadingIcon/index.mjs +1 -1
  421. package/dist/components/NcModal/index.mjs +1 -1
  422. package/dist/components/NcNoteCard/index.mjs +1 -1
  423. package/dist/components/NcPasswordField/NcPasswordField.vue.d.ts +16 -16
  424. package/dist/components/NcPasswordField/index.mjs +1 -1
  425. package/dist/components/NcPopover/index.mjs +1 -1
  426. package/dist/components/NcProfileHoverCard/NcProfileHoverCard.vue.d.ts +80 -0
  427. package/dist/components/NcProfileHoverCard/index.d.ts +5 -0
  428. package/dist/components/NcProfileHoverCard/index.mjs +5 -0
  429. package/dist/components/NcProfileHoverCard/index.mjs.map +1 -0
  430. package/dist/components/NcProfileHoverCard/profileCache.d.ts +31 -0
  431. package/dist/components/NcProgressBar/NcProgressBar.vue.d.ts +27 -0
  432. package/dist/components/NcProgressBar/index.mjs +1 -1
  433. package/dist/components/NcRadioGroup/index.mjs +1 -1
  434. package/dist/components/NcRadioGroupButton/index.mjs +1 -1
  435. package/dist/components/NcRelatedResourcesPanel/NcRelatedResourcesPanel.vue.d.ts +1 -1
  436. package/dist/components/NcRelatedResourcesPanel/index.mjs +1 -1
  437. package/dist/components/NcRichContenteditable/NcRichContenteditable.vue.d.ts +1 -1
  438. package/dist/components/NcRichContenteditable/index.mjs +1 -1
  439. package/dist/components/NcRichText/NcReferencePicker/NcProviderList.vue.d.ts +199 -3
  440. package/dist/components/NcRichText/NcReferencePicker/NcRawLinkInput.vue.d.ts +14 -11
  441. package/dist/components/NcRichText/NcReferencePicker/NcReferencePicker.vue.d.ts +412 -17
  442. package/dist/components/NcRichText/NcReferencePicker/NcReferencePickerModal.vue.d.ts +412 -17
  443. package/dist/components/NcRichText/NcReferencePicker/NcSearch.vue.d.ts +199 -3
  444. package/dist/components/NcRichText/index.mjs +14 -12
  445. package/dist/components/NcRichText/index.mjs.map +1 -1
  446. package/dist/components/NcSavingIndicatorIcon/index.mjs +1 -1
  447. package/dist/components/NcSelect/NcSelect.vue.d.ts +208 -3
  448. package/dist/components/NcSelect/index.mjs +1 -1
  449. package/dist/components/NcSelectTags/NcSelectTags.vue.d.ts +201 -5
  450. package/dist/components/NcSelectTags/index.mjs +1 -1
  451. package/dist/components/NcSelectUsers/index.mjs +1 -1
  452. package/dist/components/NcSettingsSection/index.mjs +1 -1
  453. package/dist/components/NcSettingsSelectGroup/NcSettingsSelectGroup.vue.d.ts +199 -3
  454. package/dist/components/NcSettingsSelectGroup/index.mjs +1 -1
  455. package/dist/components/NcTextArea/index.mjs +1 -1
  456. package/dist/components/NcTextField/NcTextField.vue.d.ts +23 -17
  457. package/dist/components/NcTextField/index.mjs +1 -1
  458. package/dist/components/NcThemeProvider/index.mjs +1 -1
  459. package/dist/components/NcTimezonePicker/index.mjs +1 -1
  460. package/dist/components/NcUserBubble/index.mjs +1 -1
  461. package/dist/components/NcUserStatusIcon/index.mjs +1 -1
  462. package/dist/components/NcVNodes/index.mjs +1 -1
  463. package/dist/components/index.d.ts +1 -0
  464. package/dist/composables/useFormatDateTime/index.mjs +11 -5
  465. package/dist/composables/useFormatDateTime/index.mjs.map +1 -1
  466. package/dist/composables/useHotKey/index.mjs +1 -1
  467. package/dist/composables/useIsDarkTheme/index.mjs +1 -1
  468. package/dist/functions/contactsMenu/index.mjs +1 -1
  469. package/dist/functions/emoji/index.mjs +1 -1
  470. package/dist/functions/reference/index.mjs +13 -12
  471. package/dist/functions/reference/index.mjs.map +1 -1
  472. package/dist/functions/registerReference/index.mjs +10 -9
  473. package/dist/functions/registerReference/index.mjs.map +1 -1
  474. package/dist/functions/usernameToColor/index.mjs +1 -1
  475. package/dist/index.mjs +120 -116
  476. package/dist/index.mjs.map +1 -1
  477. package/dist/utils/legacy.d.ts +2 -0
  478. package/package.json +20 -19
  479. package/dist/assets/NcAppNavigationList--36j6Acm.css +0 -28
  480. package/dist/assets/NcDateTimePickerNative-BP6eg8aU.css +0 -60
  481. package/dist/assets/NcPopover-CAoHhjKa.css +0 -123
  482. package/dist/assets/NcSelect-CvDEQAjD.css +0 -245
  483. package/dist/assets/NcSelectUsers-YF5729PJ.css +0 -4
  484. package/dist/chunks/ArrowRight-B1ncAhus.mjs.map +0 -1
  485. package/dist/chunks/ChevronDown-C6gc637b.mjs.map +0 -1
  486. package/dist/chunks/ChevronUp-ChH8oB7p.mjs.map +0 -1
  487. package/dist/chunks/Close-CuhcJnX2.mjs.map +0 -1
  488. package/dist/chunks/NcActionButton-BO5T5ePT.mjs.map +0 -1
  489. package/dist/chunks/NcActionButtonGroup-Dd03Oluy.mjs.map +0 -1
  490. package/dist/chunks/NcActionCaption-f7L9gBlT.mjs.map +0 -1
  491. package/dist/chunks/NcActionCheckbox-DBqiK-AZ.mjs.map +0 -1
  492. package/dist/chunks/NcActionInput-Dr8Yrafu.mjs.map +0 -1
  493. package/dist/chunks/NcActionLink-BFiaYt9A.mjs.map +0 -1
  494. package/dist/chunks/NcActionRadio-BA08CAtA.mjs.map +0 -1
  495. package/dist/chunks/NcActionRouter-vYFtIOzD.mjs.map +0 -1
  496. package/dist/chunks/NcActionSeparator-B9pNQaji.mjs.map +0 -1
  497. package/dist/chunks/NcActionText-CQ9qwJ0p.mjs.map +0 -1
  498. package/dist/chunks/NcActionTextEditable-B8y_GEre.mjs.map +0 -1
  499. package/dist/chunks/NcActions-C-wDqSrv.mjs.map +0 -1
  500. package/dist/chunks/NcAppContent-DavgjaFX.mjs.map +0 -1
  501. package/dist/chunks/NcAppContentDetails.vue_vue_type_script_setup_true_lang-BWl5Pw5g.mjs.map +0 -1
  502. package/dist/chunks/NcAppContentList-Copx3Ver.mjs.map +0 -1
  503. package/dist/chunks/NcAppNavigation-g57j16pB.mjs.map +0 -1
  504. package/dist/chunks/NcAppNavigationCaption-VjSWJ8R4.mjs.map +0 -1
  505. package/dist/chunks/NcAppNavigationIconBullet-BmU-dPcY.mjs.map +0 -1
  506. package/dist/chunks/NcAppNavigationItem-CDeYtA3E.mjs.map +0 -1
  507. package/dist/chunks/NcAppNavigationList-CGSWabRB.mjs +0 -17
  508. package/dist/chunks/NcAppNavigationList-CGSWabRB.mjs.map +0 -1
  509. package/dist/chunks/NcAppNavigationNew-CBNppM7Q.mjs.map +0 -1
  510. package/dist/chunks/NcAppNavigationNewItem-B1RfQkvu.mjs.map +0 -1
  511. package/dist/chunks/NcAppNavigationSearch-CQQWb1Eq.mjs.map +0 -1
  512. package/dist/chunks/NcAppNavigationSettings-DoMjRExO.mjs.map +0 -1
  513. package/dist/chunks/NcAppNavigationSpacer-CIRC4ZEj.mjs.map +0 -1
  514. package/dist/chunks/NcAppSettingsDialog-BPcEYLjP.mjs.map +0 -1
  515. package/dist/chunks/NcAppSettingsSection-BosSmisT.mjs.map +0 -1
  516. package/dist/chunks/NcAppSettingsShortcutsSection-DLwubKV9.mjs.map +0 -1
  517. package/dist/chunks/NcAppSidebar-C8YzAzrZ.mjs.map +0 -1
  518. package/dist/chunks/NcAppSidebarHeader.vue_vue_type_script_setup_true_lang-C-QhdyiN.mjs.map +0 -1
  519. package/dist/chunks/NcAppSidebarTab-DOSDDbGA.mjs.map +0 -1
  520. package/dist/chunks/NcAssistantButton-iK491d2v.mjs.map +0 -1
  521. package/dist/chunks/NcAssistantContent-iHA4O4cC.mjs.map +0 -1
  522. package/dist/chunks/NcAssistantIcon-C6s4Qm7-.mjs.map +0 -1
  523. package/dist/chunks/NcAvatar-1KxMUN7V.mjs.map +0 -1
  524. package/dist/chunks/NcBlurHash-B30Ol8KP.mjs.map +0 -1
  525. package/dist/chunks/NcBreadcrumb-3Y5NWXnV.mjs.map +0 -1
  526. package/dist/chunks/NcBreadcrumbs-BaTp3Sya.mjs.map +0 -1
  527. package/dist/chunks/NcButton-jvoYS2my.mjs.map +0 -1
  528. package/dist/chunks/NcCheckboxRadioSwitch-DVdt5Hkq.mjs.map +0 -1
  529. package/dist/chunks/NcChip-DKRlV47q.mjs.map +0 -1
  530. package/dist/chunks/NcCollectionList-B9qCtjJw.mjs.map +0 -1
  531. package/dist/chunks/NcColorPicker-BCkasLwT.mjs.map +0 -1
  532. package/dist/chunks/NcContent-BYh5hWDN.mjs.map +0 -1
  533. package/dist/chunks/NcCounterBubble-CV0YMrXW.mjs.map +0 -1
  534. package/dist/chunks/NcDashboardWidget-zmbDEGL-.mjs.map +0 -1
  535. package/dist/chunks/NcDashboardWidgetItem-DwDndrm_.mjs.map +0 -1
  536. package/dist/chunks/NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7.mjs.map +0 -1
  537. package/dist/chunks/NcDateTimePicker-qaFC_wUt.mjs +0 -415
  538. package/dist/chunks/NcDateTimePicker-qaFC_wUt.mjs.map +0 -1
  539. package/dist/chunks/NcDateTimePickerNative-B8CMOUnH.mjs.map +0 -1
  540. package/dist/chunks/NcDialog-D617YI0t.mjs.map +0 -1
  541. package/dist/chunks/NcDialogButton.vue_vue_type_script_setup_true_lang-Bqfy678u.mjs.map +0 -1
  542. package/dist/chunks/NcEllipsisedOption-D6Amb91K.mjs.map +0 -1
  543. package/dist/chunks/NcEmojiPicker-UTxgju3f.mjs.map +0 -1
  544. package/dist/chunks/NcEmptyContent-CGAPqk4S.mjs.map +0 -1
  545. package/dist/chunks/NcFilePicker-bD2toutn.mjs.map +0 -1
  546. package/dist/chunks/NcFormBox-Bmqar8nn.mjs.map +0 -1
  547. package/dist/chunks/NcFormBoxButton-G_PkUiQy.mjs.map +0 -1
  548. package/dist/chunks/NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang-BA_gWnmz.mjs.map +0 -1
  549. package/dist/chunks/NcFormBoxItem-Cm8aZaVJ.mjs.map +0 -1
  550. package/dist/chunks/NcFormBoxSwitch-DSXiQcnq.mjs.map +0 -1
  551. package/dist/chunks/NcFormGroup-N7qIFAwN.mjs.map +0 -1
  552. package/dist/chunks/NcGuestContent-CvT6VGt1.mjs.map +0 -1
  553. package/dist/chunks/NcHeaderButton-BnLwYCog.mjs.map +0 -1
  554. package/dist/chunks/NcHeaderMenu-ktQJV2SW.mjs.map +0 -1
  555. package/dist/chunks/NcHighlight.vue_vue_type_script_lang-DnWQDM_2.mjs.map +0 -1
  556. package/dist/chunks/NcHotkey-BDGeF3eH.mjs.map +0 -1
  557. package/dist/chunks/NcHotkeyList-B4WjTLAp.mjs.map +0 -1
  558. package/dist/chunks/NcIconSvgWrapper-g8ubWhoz.mjs.map +0 -1
  559. package/dist/chunks/NcIconToggleSwitch-CRvGt4su.mjs.map +0 -1
  560. package/dist/chunks/NcInputConfirmCancel-CGTllrXj.mjs.map +0 -1
  561. package/dist/chunks/NcInputField-5Sg6EUP6.mjs.map +0 -1
  562. package/dist/chunks/NcKbd-Bh_Tk6Ar.mjs.map +0 -1
  563. package/dist/chunks/NcListItem-BliLJpvU.mjs.map +0 -1
  564. package/dist/chunks/NcListItemIcon-Dl_tfkk9.mjs.map +0 -1
  565. package/dist/chunks/NcLoadingIcon-BOVpFVQz.mjs.map +0 -1
  566. package/dist/chunks/NcMentionBubble.vue_vue_type_style_index_0_scoped_3c4a673d_lang-DyqakLm5.mjs.map +0 -1
  567. package/dist/chunks/NcModal-DiDvgcU8.mjs.map +0 -1
  568. package/dist/chunks/NcNoteCard-mI7qVZ9j.mjs.map +0 -1
  569. package/dist/chunks/NcPasswordField-BFyzHTOO.mjs.map +0 -1
  570. package/dist/chunks/NcPopover-B87bEPLq.mjs.map +0 -1
  571. package/dist/chunks/NcProgressBar-C-ane-Ni.mjs.map +0 -1
  572. package/dist/chunks/NcRadioGroup-B4qmS2UD.mjs.map +0 -1
  573. package/dist/chunks/NcRadioGroupButton-CZykGwv3.mjs.map +0 -1
  574. package/dist/chunks/NcRelatedResourcesPanel-D_Ttpg5_.mjs.map +0 -1
  575. package/dist/chunks/NcRichContenteditable-Qw614bJ5.mjs.map +0 -1
  576. package/dist/chunks/NcRichText-BO_4KtBA.mjs.map +0 -1
  577. package/dist/chunks/NcSavingIndicatorIcon.vue_vue_type_script_setup_true_lang-DbQnMYZm.mjs.map +0 -1
  578. package/dist/chunks/NcSelect--kERLlBK.mjs.map +0 -1
  579. package/dist/chunks/NcSelectTags-I2hJaNax.mjs.map +0 -1
  580. package/dist/chunks/NcSelectUsers-K14Bepkq.mjs.map +0 -1
  581. package/dist/chunks/NcSettingsSection-Caz1fuWt.mjs.map +0 -1
  582. package/dist/chunks/NcSettingsSelectGroup-SYJ8-XlR.mjs.map +0 -1
  583. package/dist/chunks/NcTextArea-Dxzj4zdb.mjs.map +0 -1
  584. package/dist/chunks/NcTextField.vue_vue_type_script_setup_true_lang-Bx2esFU2.mjs.map +0 -1
  585. package/dist/chunks/NcThemeProvider.vue_vue_type_script_setup_true_lang-wie70gn4.mjs.map +0 -1
  586. package/dist/chunks/NcTimezonePicker.vue_vue_type_script_setup_true_lang-D7ZHgnwW.mjs.map +0 -1
  587. package/dist/chunks/NcUserBubble-BXR7vT0V.mjs.map +0 -1
  588. package/dist/chunks/NcUserStatusIcon-BF5OEQFU.mjs.map +0 -1
  589. package/dist/chunks/NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs.map +0 -1
  590. package/dist/chunks/_l10n-wdIzZwir.mjs.map +0 -1
  591. package/dist/chunks/_plugin-vue_export-helper-1tPrXgE0.mjs.map +0 -1
  592. package/dist/chunks/actionGlobal-BZFdtdJL.mjs.map +0 -1
  593. package/dist/chunks/actionText-BXR0sWNu.mjs.map +0 -1
  594. package/dist/chunks/appName-DyNMVZpX.mjs.map +0 -1
  595. package/dist/chunks/autolink-DrIurosL.mjs.map +0 -1
  596. package/dist/chunks/colors-Cv9F-jWS.mjs.map +0 -1
  597. package/dist/chunks/constants-Ciwvl5xb.mjs.map +0 -1
  598. package/dist/chunks/constants-wIEKSp2G.mjs.map +0 -1
  599. package/dist/chunks/createElementId-DhjFt1I9.mjs.map +0 -1
  600. package/dist/chunks/customPickerElements-BqbDcaEu.mjs +0 -123
  601. package/dist/chunks/customPickerElements-BqbDcaEu.mjs.map +0 -1
  602. package/dist/chunks/emoji-C8k9NUlo.mjs.map +0 -1
  603. package/dist/chunks/focusTrap-HJQ4pqHV.mjs.map +0 -1
  604. package/dist/chunks/legacy-BoqDmOCa.mjs.map +0 -1
  605. package/dist/chunks/logger-D3RVzcfQ.mjs.map +0 -1
  606. package/dist/chunks/mdi-CpchYUUV.mjs.map +0 -1
  607. package/dist/chunks/platform-CC2ecGvV.mjs.map +0 -1
  608. package/dist/chunks/referencePickerModal-CnKdEDwu.mjs.map +0 -1
  609. package/dist/chunks/rtl-v0UOPAM7.mjs.map +0 -1
  610. package/dist/chunks/useAppSettingsDialog-C73Wx6iQ.mjs.map +0 -1
  611. package/dist/chunks/useCopy-6F-qWHq0.mjs.map +0 -1
  612. package/dist/chunks/useNcActions-BzPO2c4h.mjs.map +0 -1
  613. package/dist/chunks/useNcFormBox-Djlh582y.mjs.map +0 -1
  614. package/dist/chunks/useNcRadioGroup-D6llQmAl.mjs.map +0 -1
  615. package/dist/chunks/useTrapStackControl-B6cEicto.mjs.map +0 -1
  616. /package/dist/assets/{NcActionButtonGroup-Bt8kRk79.css → NcActionButtonGroup.css} +0 -0
  617. /package/dist/assets/{NcActionCaption-DnG2OyWa.css → NcActionCaption.css} +0 -0
  618. /package/dist/assets/{NcActionSeparator-Ct2RnclR.css → NcActionSeparator.css} +0 -0
  619. /package/dist/assets/{NcAppContent-TgcZd4AI.css → NcAppContent.css} +0 -0
  620. /package/dist/assets/{NcAppNavigationCaption-ggcWspH2.css → NcAppNavigationCaption.css} +0 -0
  621. /package/dist/assets/{NcAppNavigationIconBullet-DLQJkObX.css → NcAppNavigationIconBullet.css} +0 -0
  622. /package/dist/assets/{NcAppNavigationNew-Bn8zj5lM.css → NcAppNavigationNew.css} +0 -0
  623. /package/dist/assets/{NcAppNavigationSearch-DD7mo6OW.css → NcAppNavigationSearch.css} +0 -0
  624. /package/dist/assets/{NcAppNavigationSpacer-LST5uYYS.css → NcAppNavigationSpacer.css} +0 -0
  625. /package/dist/assets/{NcAppSettingsSection-DIw8GLHR.css → NcAppSettingsSection.css} +0 -0
  626. /package/dist/assets/{NcBreadcrumb-BxhZKQlW.css → NcBreadcrumb.css} +0 -0
  627. /package/dist/assets/{NcBreadcrumbs-B4eyDS9i.css → NcBreadcrumbs.css} +0 -0
  628. /package/dist/assets/{NcChip-DbSI4mFP.css → NcChip.css} +0 -0
  629. /package/dist/assets/{NcCollectionList-e5JFvzqX.css → NcCollectionList.css} +0 -0
  630. /package/dist/assets/{NcColorPicker-DVYGs8R3.css → NcColorPicker.css} +0 -0
  631. /package/dist/assets/{NcContent-DX4Rs6Pc.css → NcContent.css} +0 -0
  632. /package/dist/assets/{NcCounterBubble-ZnteskDR.css → NcCounterBubble.css} +0 -0
  633. /package/dist/assets/{NcDashboardWidget-nZuIL1UN.css → NcDashboardWidget.css} +0 -0
  634. /package/dist/assets/{NcDashboardWidgetItem-DpVmEBwQ.css → NcDashboardWidgetItem.css} +0 -0
  635. /package/dist/assets/{NcDialog-BSV74Bru.css → NcDialog.css} +0 -0
  636. /package/dist/assets/{NcEmojiPicker-vNKR9S87.css → NcEmojiPicker.css} +0 -0
  637. /package/dist/assets/{NcEmptyContent-DJMDuGVz.css → NcEmptyContent.css} +0 -0
  638. /package/dist/assets/{NcGuestContent-CM0uWLr1.css → NcGuestContent.css} +0 -0
  639. /package/dist/assets/{NcHeaderButton-CVOQgRjm.css → NcHeaderButton.css} +0 -0
  640. /package/dist/assets/{NcIconSvgWrapper-N3OwSN9O.css → NcIconSvgWrapper.css} +0 -0
  641. /package/dist/assets/{NcInputConfirmCancel-DZEDRf0t.css → NcInputConfirmCancel.css} +0 -0
  642. /package/dist/assets/{NcListItem-BjeejGlB.css → NcListItem.css} +0 -0
  643. /package/dist/assets/{NcListItemIcon-DJRcmlo1.css → NcListItemIcon.css} +0 -0
  644. /package/dist/assets/{NcLoadingIcon-CWUlo4XY.css → NcLoadingIcon.css} +0 -0
  645. /package/dist/assets/{NcMentionBubble-BeGb2xGc.css → NcMentionBubble.css} +0 -0
  646. /package/dist/assets/{NcModal-D81luiuU.css → NcModal.css} +0 -0
  647. /package/dist/assets/{NcNoteCard-DfescGKl.css → NcNoteCard.css} +0 -0
  648. /package/dist/assets/{NcPasswordField-BN4HFgU5.css → NcPasswordField.css} +0 -0
  649. /package/dist/assets/{NcRelatedResourcesPanel-BZKjkugM.css → NcRelatedResourcesPanel.css} +0 -0
  650. /package/dist/assets/{NcRichText-D0Bu5bbu.css → NcRichText.css} +0 -0
  651. /package/dist/assets/{NcSettingsSection-f5rBJsKJ.css → NcSettingsSection.css} +0 -0
  652. /package/dist/assets/{NcSettingsSelectGroup-D_fSrafm.css → NcSettingsSelectGroup.css} +0 -0
  653. /package/dist/assets/{NcTextArea-BxGe3Lqn.css → NcTextArea.css} +0 -0
  654. /package/dist/assets/{NcUserBubble-DFUmBxeb.css → NcUserBubble.css} +0 -0
  655. /package/dist/assets/{NcUserStatusIcon-B3aHoBAd.css → NcUserStatusIcon.css} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NcProfileHoverCard.mjs","sources":["../../node_modules/vue-material-design-icons/AccountOutline.vue","../../node_modules/vue-material-design-icons/BriefcaseOutline.vue","../../node_modules/vue-material-design-icons/ClockOutline.vue","../../node_modules/vue-material-design-icons/MapMarkerOutline.vue","../../node_modules/vue-material-design-icons/PencilOutline.vue","../../src/components/NcProfileHoverCard/profileCache.ts","../../src/components/NcProfileHoverCard/NcProfileHoverCard.vue"],"sourcesContent":["<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon account-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,6A2,2 0 0,0 10,8A2,2 0 0,0 12,10A2,2 0 0,0 14,8A2,2 0 0,0 12,6M12,13C14.67,13 20,14.33 20,17V20H4V17C4,14.33 9.33,13 12,13M12,14.9C9.03,14.9 5.9,16.36 5.9,17V18.1H18.1V17C18.1,16.36 14.97,14.9 12,14.9Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"AccountOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon briefcase-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M20,6C20.58,6 21.05,6.2 21.42,6.59C21.8,7 22,7.45 22,8V19C22,19.55 21.8,20 21.42,20.41C21.05,20.8 20.58,21 20,21H4C3.42,21 2.95,20.8 2.58,20.41C2.2,20 2,19.55 2,19V8C2,7.45 2.2,7 2.58,6.59C2.95,6.2 3.42,6 4,6H8V4C8,3.42 8.2,2.95 8.58,2.58C8.95,2.2 9.42,2 10,2H14C14.58,2 15.05,2.2 15.42,2.58C15.8,2.95 16,3.42 16,4V6H20M4,8V19H20V8H4M14,6V4H10V6H14Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"BriefcaseOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon clock-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22C6.47,22 2,17.5 2,12A10,10 0 0,1 12,2M12.5,7V12.25L17,14.92L16.25,16.15L11,13V7H12.5Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"ClockOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon map-marker-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M12,6.5A2.5,2.5 0 0,1 14.5,9A2.5,2.5 0 0,1 12,11.5A2.5,2.5 0 0,1 9.5,9A2.5,2.5 0 0,1 12,6.5M12,2A7,7 0 0,1 19,9C19,14.25 12,22 12,22C12,22 5,14.25 5,9A7,7 0 0,1 12,2M12,4A5,5 0 0,0 7,9C7,10 7,12 12,18.71C17,12 17,10 17,9A5,5 0 0,0 12,4Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"MapMarkerOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon pencil-outline-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M14.06,9L15,9.94L5.92,19H5V18.08L14.06,9M17.66,3C17.41,3 17.15,3.1 16.96,3.29L15.13,5.12L18.88,8.87L20.71,7.04C21.1,6.65 21.1,6 20.71,5.63L18.37,3.29C18.17,3.09 17.92,3 17.66,3M14.06,6.19L3,17.25V21H6.75L17.81,9.94L14.06,6.19Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"PencilOutlineIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","/*!\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { IProfileData } from './NcProfileHoverCard.vue'\n\n/** Default TTL for cached profile payloads (30 minutes). */\nexport const PROFILE_CACHE_TTL_MS = 30 * 60 * 1000\n\ninterface CacheEntry {\n\tdata: IProfileData\n\texpiresAt: number\n}\n\nconst cache = new Map<string, CacheEntry>()\nconst inflight = new Map<string, Promise<IProfileData | null>>()\n\n/**\n * Return a non-expired cached profile for the user, or null.\n *\n * @param userId - User id\n */\nexport function getCachedProfile(userId: string): IProfileData | null {\n\tconst entry = cache.get(userId)\n\tif (!entry) {\n\t\treturn null\n\t}\n\tif (Date.now() >= entry.expiresAt) {\n\t\tcache.delete(userId)\n\t\treturn null\n\t}\n\treturn entry.data\n}\n\n/**\n * Store profile data in the shared TTL cache.\n *\n * @param userId - User id\n * @param data - Profile payload\n * @param ttlMs - Time to live in milliseconds\n */\nexport function setCachedProfile(userId: string, data: IProfileData, ttlMs = PROFILE_CACHE_TTL_MS): void {\n\tcache.set(userId, {\n\t\tdata,\n\t\texpiresAt: Date.now() + ttlMs,\n\t})\n}\n\n/**\n * Clear all cached profiles and in-flight fetches. Used by tests.\n *\n * @internal\n */\nexport function clearProfileCache(): void {\n\tcache.clear()\n\tinflight.clear()\n}\n\n/**\n * Fetch a profile with shared TTL cache and in-flight request deduplication.\n *\n * @param userId - User id\n * @param fetcher - Network loader invoked on cache miss\n * @param ttlMs - Time to live for a successful result\n */\nexport async function fetchProfileCached(\n\tuserId: string,\n\tfetcher: () => Promise<IProfileData | null>,\n\tttlMs = PROFILE_CACHE_TTL_MS,\n): Promise<IProfileData | null> {\n\tconst cached = getCachedProfile(userId)\n\tif (cached) {\n\t\treturn cached\n\t}\n\n\tconst pending = inflight.get(userId)\n\tif (pending) {\n\t\treturn pending\n\t}\n\n\tconst promise = (async () => {\n\t\ttry {\n\t\t\tconst data = await fetcher()\n\t\t\tif (data) {\n\t\t\t\tsetCachedProfile(userId, data, ttlMs)\n\t\t\t}\n\t\t\treturn data\n\t\t} finally {\n\t\t\tinflight.delete(userId)\n\t\t}\n\t})()\n\n\tinflight.set(userId, promise)\n\treturn promise\n}\n","<!--\n - SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport type { RouteLocationRaw } from 'vue-router'\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport axios from '@nextcloud/axios'\nimport { getCapabilities } from '@nextcloud/capabilities'\nimport { getCanonicalLocale } from '@nextcloud/l10n'\nimport { generateOcsUrl, generateUrl } from '@nextcloud/router'\nimport { computed, onMounted, ref, watch } from 'vue'\nimport AccountIcon from 'vue-material-design-icons/AccountOutline.vue'\nimport BriefcaseIcon from 'vue-material-design-icons/BriefcaseOutline.vue'\nimport ClockIcon from 'vue-material-design-icons/ClockOutline.vue'\nimport MapMarkerIcon from 'vue-material-design-icons/MapMarkerOutline.vue'\nimport PencilIcon from 'vue-material-design-icons/PencilOutline.vue'\nimport NcActionButton from '../NcActionButton/NcActionButton.vue'\nimport NcActionLink from '../NcActionLink/NcActionLink.vue'\nimport NcActionRouter from '../NcActionRouter/NcActionRouter.vue'\nimport NcActions from '../NcActions/NcActions.vue'\nimport NcAvatar from '../NcAvatar/NcAvatar.vue'\nimport NcButton from '../NcButton/NcButton.vue'\nimport NcEmptyContent from '../NcEmptyContent/NcEmptyContent.vue'\nimport NcLoadingIcon from '../NcLoadingIcon/NcLoadingIcon.vue'\nimport NcRichText from '../NcRichText/NcRichText.vue'\nimport { useIsSmallMobile } from '../../composables/useIsMobile/index.ts'\nimport { t } from '../../l10n.ts'\nimport { logger } from '../../utils/logger.ts'\nimport NcIconSvgWrapper from '../NcIconSvgWrapper/index.ts'\nimport { fetchProfileCached, getCachedProfile, setCachedProfile } from './profileCache.ts'\n\nexport interface IProfileAction {\n\tid: string\n\tappId?: string\n\ticon: string\n\ttitle: string\n\ttarget: string | null\n}\n\nexport interface IProfileData {\n\tuserId: string\n\taddress?: string | null\n\tbiography?: string | null\n\tdisplayname?: string | null\n\theadline?: string | null\n\tisUserAvatarVisible?: boolean\n\torganisation?: string | null\n\tpronouns?: string | null\n\trole?: string | null\n\ttimezone?: string | null\n\ttimezoneOffset?: number | null\n\tactions: IProfileAction[]\n}\n\n/**\n * Action shown in the hover card sidebar (typically from NcAvatar's contacts menu).\n */\nexport interface IProfileHoverCardAction {\n\tid?: string\n\tappId?: string\n\ttext: string\n\thref?: string\n\tto?: RouteLocationRaw\n\ttarget?: string\n\trel?: string\n\ticon?: string\n\ticonSvg?: string\n\tonClick?: (event: MouseEvent) => void\n}\n\nexport interface IUserStatus {\n\ticon?: string | null\n\tmessage?: string | null\n\tstatus?: string | null\n}\n\nconst props = withDefaults(defineProps<{\n\t/**\n\t * User id whose profile to show.\n\t */\n\tuser?: string | null\n\n\t/**\n\t * Optional preloaded profile data (skips the profile API request when set).\n\t */\n\tprofile?: IProfileData | null\n\n\t/**\n\t * Optional preloaded user status (skips the status API request when set).\n\t * Pass an object with `status`, `icon`, and `message` set to null for a known empty status.\n\t */\n\tpreloadedUserStatus?: IUserStatus | null\n\n\t/**\n\t * Whether the popover that hosts this card is currently shown.\n\t * Profile data and user status are loaded when this becomes true.\n\t */\n\topen?: boolean\n\n\t/**\n\t * Actions to show in the card (e.g. NcAvatar contacts menu actions).\n\t * When omitted or empty, actions from the profile API are used.\n\t */\n\tactions?: IProfileHoverCardAction[] | null\n\n\t/**\n\t * True while parent actions (e.g. contacts menu) are still loading.\n\t */\n\tactionsLoading?: boolean\n}>(), {\n\tuser: null,\n\tprofile: null,\n\tpreloadedUserStatus: null,\n\topen: false,\n\tactions: null,\n\tactionsLoading: false,\n})\n\nconst loading = ref(false)\nconst error = ref(false)\nconst profileData = ref<IProfileData | null>(props.profile)\nconst userStatus = ref<IUserStatus>(props.preloadedUserStatus ?? {})\nconst isMobile = useIsSmallMobile()\n\nif (props.user && props.profile) {\n\tsetCachedProfile(props.user, props.profile)\n}\n\nconst isCurrentUser = computed(() => !!props.user && getCurrentUser()?.uid === props.user)\nconst settingsUrl = generateUrl('/settings/user')\n\nconst resolvedActions = computed((): IProfileHoverCardAction[] => {\n\tif (props.actions && props.actions.length > 0) {\n\t\treturn props.actions.filter((action) => action.appId !== 'timezone')\n\t}\n\treturn (profileData.value?.actions ?? [])\n\t\t.filter((action) => action.appId !== 'timezone')\n\t\t.map((action) => ({\n\t\t\tid: action.id,\n\t\t\tappId: action.appId,\n\t\t\ttext: action.title,\n\t\t\thref: action.target || undefined,\n\t\t\ticon: action.icon,\n\t\t\ttarget: action.id === 'phone' ? '_self' : '_blank',\n\t\t\trel: action.id === 'fediverse' ? 'me' : undefined,\n\t\t}))\n})\n\n/**\n * Local clock for the profile user (same format as Talk's right sidebar).\n */\nconst localTimeLabel = computed(() => {\n\tconst time = formatProfileLocalTime(new Date())\n\tif (!time) {\n\t\treturn null\n\t}\n\treturn t('Local time: {time}', { time })\n})\n\nconst primaryAction = computed(() => resolvedActions.value[0])\nconst otherActions = computed(() => resolvedActions.value.slice(1))\n\nconst primaryActionButtonProps = computed(() => {\n\tconst action = primaryAction.value\n\tif (!action) {\n\t\treturn {}\n\t}\n\tif (action.to) {\n\t\treturn { to: action.to }\n\t}\n\tif (action.href) {\n\t\treturn {\n\t\t\thref: action.href,\n\t\t\ttarget: action.target ?? (action.href.startsWith('tel:') ? '_self' : '_blank'),\n\t\t\trel: action.rel,\n\t\t}\n\t}\n\treturn {}\n})\n\nconst emptyProfileMessage = computed(() => {\n\tif (isCurrentUser.value) {\n\t\treturn t('You have not added any info yet')\n\t}\n\tconst name = profileData.value?.displayname || props.user || ''\n\treturn t('{user} has not added any info yet', { user: name })\n})\n\n/**\n * Pass status to NcAvatar so the badge matches the loaded status.\n * Always pass an object (null fields if empty) so NcAvatar does not fetch again.\n */\nconst avatarUserStatus = computed(() => ({\n\tstatus: userStatus.value.status ?? null,\n\ticon: userStatus.value.icon ?? null,\n\tmessage: userStatus.value.message ?? null,\n}))\n\n/**\n * Format the profile user's current time like Talk (`HH:MM` in their timezone)\n *\n * @param date - Instant to format\n */\nfunction formatProfileLocalTime(date: Date): string | null {\n\tconst timeZone = profileData.value?.timezone\n\tif (timeZone) {\n\t\ttry {\n\t\t\treturn new Intl.DateTimeFormat(getCanonicalLocale(), {\n\t\t\t\ttimeZone,\n\t\t\t\thour: '2-digit',\n\t\t\t\tminute: '2-digit',\n\t\t\t}).format(date)\n\t\t} catch {\n\t\t\t// Invalid timezone id from the server\n\t\t}\n\t}\n\n\tif (typeof profileData.value?.timezoneOffset === 'number') {\n\t\tconst shifted = new Date(date.getTime() + profileData.value.timezoneOffset * 1000)\n\t\treturn new Intl.DateTimeFormat(getCanonicalLocale(), {\n\t\t\ttimeZone: 'UTC',\n\t\t\thour: '2-digit',\n\t\t\tminute: '2-digit',\n\t\t}).format(shifted)\n\t}\n\n\treturn null\n}\n\n/**\n * Whether an action icon is an image URL rather than a CSS class\n *\n * @param icon - Icon value\n */\nfunction isIconUrl(icon?: string) {\n\treturn !!icon && (/^(https?:)?\\/\\//.test(icon) || icon.startsWith('/') || icon.startsWith('data:'))\n}\n\n/**\n * Resolve the NcAction component for a secondary hover-card action\n *\n * @param action - Hover card action\n */\nfunction otherActionComponent(action: IProfileHoverCardAction) {\n\tif (action.to) {\n\t\treturn NcActionRouter\n\t}\n\tif (action.onClick && !action.href) {\n\t\treturn NcActionButton\n\t}\n\treturn NcActionLink\n}\n\n/**\n * Props for a secondary hover-card action component\n *\n * @param action - Hover card action\n */\nfunction otherActionProps(action: IProfileHoverCardAction) {\n\tif (action.to) {\n\t\treturn { to: action.to, closeAfterClick: true }\n\t}\n\tif (action.onClick && !action.href) {\n\t\treturn { onClick: action.onClick, closeAfterClick: true }\n\t}\n\treturn {\n\t\thref: action.href,\n\t\ttarget: action.target ?? (action.href?.startsWith('tel:') ? '_self' : '_blank'),\n\t\trel: action.rel,\n\t\tcloseAfterClick: true,\n\t}\n}\n\nwatch(() => props.profile, (value) => {\n\tif (value) {\n\t\tprofileData.value = value\n\t\tif (props.user) {\n\t\t\tsetCachedProfile(props.user, value)\n\t\t}\n\t\terror.value = false\n\t}\n})\n\nwatch(() => props.preloadedUserStatus, (value) => {\n\tif (value) {\n\t\tuserStatus.value = value\n\t}\n})\n\nwatch(() => props.user, () => {\n\tprofileData.value = props.profile\n\tuserStatus.value = props.preloadedUserStatus ?? {}\n\terror.value = false\n\tif (props.user && props.profile) {\n\t\tsetCachedProfile(props.user, props.profile)\n\t}\n\tif (props.open) {\n\t\tloadProfile()\n\t}\n})\n\nwatch(() => props.open, (isOpen) => {\n\tif (isOpen) {\n\t\tloadProfile()\n\t}\n})\n\nonMounted(() => {\n\tif (props.open) {\n\t\tloadProfile()\n\t}\n})\n\n/**\n * Whether user status was already provided (including a known empty status).\n */\nfunction hasPreloadedUserStatus() {\n\treturn props.preloadedUserStatus !== null\n\t\t|| !!(userStatus.value.icon || userStatus.value.message || userStatus.value.status)\n}\n\n/**\n * Ensure user status is loaded when missing.\n *\n * @param userId - User id\n */\nasync function ensureUserStatus(userId: string) {\n\t// Skip the status request when already preloaded (e.g. from NcAvatar)\n\tif (!hasPreloadedUserStatus()) {\n\t\tuserStatus.value = await fetchUserStatus(userId)\n\t}\n}\n\n/**\n * Load profile fields and user status when the hovercard opens\n */\nasync function loadProfile() {\n\tif (!props.user || loading.value) {\n\t\treturn\n\t}\n\n\tconst userId = props.user\n\n\t// Use preloaded, instance, or shared-cache profile; only refresh status if needed\n\tif (!profileData.value) {\n\t\tconst cached = getCachedProfile(userId)\n\t\tif (cached) {\n\t\t\tprofileData.value = cached\n\t\t}\n\t}\n\tif (profileData.value) {\n\t\tawait ensureUserStatus(userId)\n\t\treturn\n\t}\n\n\tloading.value = true\n\terror.value = false\n\n\ttry {\n\t\tconst [profile, status] = await Promise.all([\n\t\t\tfetchProfileCached(userId, async () => {\n\t\t\t\tconst { data } = await axios.get(generateOcsUrl('/profile/{userId}', { userId }))\n\t\t\t\treturn data.ocs?.data ?? null\n\t\t\t}),\n\t\t\thasPreloadedUserStatus()\n\t\t\t\t? Promise.resolve(userStatus.value)\n\t\t\t\t: fetchUserStatus(userId),\n\t\t])\n\t\tprofileData.value = profile\n\t\tuserStatus.value = status\n\t\tif (!profileData.value) {\n\t\t\terror.value = true\n\t\t}\n\t} catch (e) {\n\t\tlogger.debug('Failed to load profile for hovercard', { error: e, user: userId })\n\t\terror.value = true\n\t} finally {\n\t\tloading.value = false\n\t}\n}\n\n/**\n * Fetch user status for the given user\n *\n * @param userId - User id\n */\nasync function fetchUserStatus(userId: string): Promise<IUserStatus> {\n\ttry {\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tif (!(getCapabilities() as any)?.user_status?.enabled || !getCurrentUser()) {\n\t\t\treturn {}\n\t\t}\n\t\tconst { data } = await axios.get(generateOcsUrl('/apps/user_status/api/v1/statuses/{userId}', { userId }))\n\t\treturn data.ocs?.data ?? {}\n\t} catch (e) {\n\t\tlogger.debug('Failed to load user status for hovercard', { error: e, userId })\n\t\treturn {}\n\t}\n}\n</script>\n\n<template>\n\t<div\n\t\tclass=\"profile-hover-card\"\n\t\trole=\"dialog\"\n\t\t:aria-label=\"t('Profile of {user}', { user: profileData?.displayname || user || '' })\">\n\t\t<div v-if=\"loading\" class=\"profile-hover-card__loading\">\n\t\t\t<NcLoadingIcon :size=\"32\" :name=\"t('Loading profile')\" />\n\t\t</div>\n\n\t\t<template v-else-if=\"profileData && !error\">\n\t\t\t<!-- Header band: name, pronouns, status (mirrors ProfileApp.vue) -->\n\t\t\t<div class=\"profile-hover-card__header\">\n\t\t\t\t<NcButton\n\t\t\t\t\tv-if=\"isCurrentUser\"\n\t\t\t\t\tclass=\"profile-hover-card__header__edit\"\n\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t:aria-label=\"t('Edit profile')\"\n\t\t\t\t\t:title=\"t('Edit profile')\"\n\t\t\t\t\t:href=\"settingsUrl\"\n\t\t\t\t\ttarget=\"_blank\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<PencilIcon :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcButton>\n\t\t\t\t<div class=\"profile-hover-card__header__container\">\n\t\t\t\t\t<NcAvatar\n\t\t\t\t\t\tv-if=\"isMobile\"\n\t\t\t\t\t\tclass=\"avatar profile-hover-card__header__container__avatar\"\n\t\t\t\t\t\t:user=\"profileData.userId\"\n\t\t\t\t\t\t:size=\"96\"\n\t\t\t\t\t\tdisableMenu\n\t\t\t\t\t\tdisableTooltip\n\t\t\t\t\t\t:preloadedUserStatus=\"avatarUserStatus\"\n\t\t\t\t\t\t:isNoUser=\"!profileData.isUserAvatarVisible\" />\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-else\n\t\t\t\t\t\tclass=\"profile-hover-card__header__container__placeholder\" />\n\t\t\t\t\t<div class=\"profile-hover-card__header__container__identity\">\n\t\t\t\t\t\t<div class=\"profile-hover-card__header__container__displayname\">\n\t\t\t\t\t\t\t<h2>{{ profileData.displayname || profileData.userId }}</h2>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tv-if=\"profileData.pronouns\"\n\t\t\t\t\t\t\t\tclass=\"profile-hover-card__header__container__pronoun-separator\">·</span>\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tv-if=\"profileData.pronouns\"\n\t\t\t\t\t\t\t\tclass=\"profile-hover-card__header__container__pronouns\">{{ profileData.pronouns }}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"userStatus.icon || userStatus.message\"\n\t\t\t\t\t\t\tclass=\"profile-hover-card__header__container__status\">\n\t\t\t\t\t\t\t<span class=\"profile-hover-card__header__container__status-content\">\n\t\t\t\t\t\t\t\t<span>{{ userStatus.icon }} {{ userStatus.message }}</span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class=\"profile-hover-card__body\">\n\t\t\t\t<div class=\"profile-hover-card__content\">\n\t\t\t\t\t<!-- Sidebar: avatar + actions (mirrors ProfileApp.vue) -->\n\t\t\t\t\t<div class=\"profile-hover-card__sidebar\">\n\t\t\t\t\t\t<NcAvatar\n\t\t\t\t\t\t\tv-if=\"!isMobile\"\n\t\t\t\t\t\t\tclass=\"avatar\"\n\t\t\t\t\t\t\t:user=\"profileData.userId\"\n\t\t\t\t\t\t\t:size=\"135\"\n\t\t\t\t\t\t\tdisableMenu\n\t\t\t\t\t\t\tdisableTooltip\n\t\t\t\t\t\t\t:preloadedUserStatus=\"avatarUserStatus\"\n\t\t\t\t\t\t\t:isNoUser=\"!profileData.isUserAvatarVisible\" />\n\n\t\t\t\t\t\t<div class=\"user-actions\">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tv-if=\"actionsLoading && resolvedActions.length === 0\"\n\t\t\t\t\t\t\t\tclass=\"user-actions__loading\">\n\t\t\t\t\t\t\t\t<NcLoadingIcon :size=\"20\" :name=\"t('Loading actions')\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<template v-else>\n\t\t\t\t\t\t\t\t<NcButton\n\t\t\t\t\t\t\t\t\tv-if=\"primaryAction\"\n\t\t\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\t\t\tclass=\"user-actions__primary\"\n\t\t\t\t\t\t\t\t\tv-bind=\"primaryActionButtonProps\"\n\t\t\t\t\t\t\t\t\t@click=\"primaryAction.onClick\">\n\t\t\t\t\t\t\t\t\t<template v-if=\"primaryAction.iconSvg || primaryAction.icon\" #icon>\n\t\t\t\t\t\t\t\t\t\t<NcIconSvgWrapper\n\t\t\t\t\t\t\t\t\t\t\tv-if=\"primaryAction.iconSvg\"\n\t\t\t\t\t\t\t\t\t\t\t:svg=\"primaryAction.iconSvg\" />\n\t\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t\tv-else-if=\"isIconUrl(primaryAction.icon)\"\n\t\t\t\t\t\t\t\t\t\t\t:src=\"primaryAction.icon\"\n\t\t\t\t\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"user-actions__primary__icon\">\n\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\tv-else\n\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"user-actions__primary__icon-class\"\n\t\t\t\t\t\t\t\t\t\t\t:class=\"primaryAction.icon\" />\n\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t{{ primaryAction.text }}\n\t\t\t\t\t\t\t\t</NcButton>\n\t\t\t\t\t\t\t\t<NcActions\n\t\t\t\t\t\t\t\t\tv-if=\"otherActions.length > 0\"\n\t\t\t\t\t\t\t\t\tclass=\"user-actions__other\"\n\t\t\t\t\t\t\t\t\t:inline=\"isMobile ? 5 : 4\">\n\t\t\t\t\t\t\t\t\t<component\n\t\t\t\t\t\t\t\t\t\t:is=\"otherActionComponent(action)\"\n\t\t\t\t\t\t\t\t\t\tv-for=\"(action, index) in otherActions\"\n\t\t\t\t\t\t\t\t\t\t:key=\"action.id || action.href || index\"\n\t\t\t\t\t\t\t\t\t\tv-bind=\"otherActionProps(action)\">\n\t\t\t\t\t\t\t\t\t\t<template v-if=\"action.iconSvg || action.icon\" #icon>\n\t\t\t\t\t\t\t\t\t\t\t<NcIconSvgWrapper\n\t\t\t\t\t\t\t\t\t\t\t\tv-if=\"action.iconSvg\"\n\t\t\t\t\t\t\t\t\t\t\t\t:svg=\"action.iconSvg\" />\n\t\t\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\t\t\t\tv-else-if=\"isIconUrl(action.icon)\"\n\t\t\t\t\t\t\t\t\t\t\t\t:src=\"action.icon\"\n\t\t\t\t\t\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"user-actions__other__icon\">\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tv-else\n\t\t\t\t\t\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"user-actions__other__icon-class\"\n\t\t\t\t\t\t\t\t\t\t\t\t:class=\"action.icon\" />\n\t\t\t\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\t\t\t\t{{ action.text }}\n\t\t\t\t\t\t\t\t\t</component>\n\t\t\t\t\t\t\t\t</NcActions>\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<!-- Content blocks: details + bio (mirrors ProfileApp.vue) -->\n\t\t\t\t\t<div class=\"profile-hover-card__blocks\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tv-if=\"profileData.organisation || profileData.role || profileData.address || localTimeLabel\"\n\t\t\t\t\t\t\tclass=\"profile-hover-card__blocks-details\">\n\t\t\t\t\t\t\t<div v-if=\"profileData.organisation || profileData.role\" class=\"detail\">\n\t\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\t\t<BriefcaseIcon\n\t\t\t\t\t\t\t\t\t\tclass=\"detail-icon\"\n\t\t\t\t\t\t\t\t\t\t:size=\"16\"\n\t\t\t\t\t\t\t\t\t\ttitle=\"\" />\n\t\t\t\t\t\t\t\t\t{{ profileData.organisation }} <span v-if=\"profileData.organisation && profileData.role\">•</span> {{ profileData.role }}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div v-if=\"profileData.address\" class=\"detail\">\n\t\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\t\t<MapMarkerIcon\n\t\t\t\t\t\t\t\t\t\tclass=\"detail-icon\"\n\t\t\t\t\t\t\t\t\t\t:size=\"16\"\n\t\t\t\t\t\t\t\t\t\ttitle=\"\" />\n\t\t\t\t\t\t\t\t\t{{ profileData.address }}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div v-if=\"localTimeLabel\" class=\"detail\">\n\t\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\t\t<ClockIcon\n\t\t\t\t\t\t\t\t\t\tclass=\"detail-icon\"\n\t\t\t\t\t\t\t\t\t\t:size=\"16\"\n\t\t\t\t\t\t\t\t\t\ttitle=\"\" />\n\t\t\t\t\t\t\t\t\t{{ localTimeLabel }}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<template v-if=\"profileData.headline || profileData.biography\">\n\t\t\t\t\t\t\t<h3 v-if=\"profileData.headline\" class=\"profile-hover-card__blocks-headline\">\n\t\t\t\t\t\t\t\t{{ profileData.headline }}\n\t\t\t\t\t\t\t</h3>\n\t\t\t\t\t\t\t<div v-if=\"profileData.biography\" class=\"profile-hover-card__blocks-biography\">\n\t\t\t\t\t\t\t\t<NcRichText :text=\"profileData.biography\" useExtendedMarkdown />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<NcEmptyContent\n\t\t\t\t\t\t\tv-else\n\t\t\t\t\t\t\tclass=\"profile-hover-card__blocks-empty-info\"\n\t\t\t\t\t\t\t:name=\"emptyProfileMessage\"\n\t\t\t\t\t\t\t:description=\"t('The headline and about sections will show up here')\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<AccountIcon :size=\"40\" />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</NcEmptyContent>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</template>\n\n\t\t<div v-else class=\"profile-hover-card__error\">\n\t\t\t{{ t('Failed to load profile') }}\n\t\t</div>\n\t</div>\n</template>\n\n<style lang=\"scss\" scoped>\n// Card-scaled mirror of apps/profile ProfileApp.vue layout\n$card-width: 560px;\n$card-height: 300px;\n$header-height: 127px;\n$sidebar-width: 180px;\n\n.profile-hover-card {\n\tbox-sizing: border-box;\n\tposition: relative;\n\twidth: $card-width;\n\tmax-width: min(#{$card-width}, 90vw);\n\tmin-height: $card-height;\n\toverflow: hidden;\n\tcolor: var(--color-main-text);\n\tbackground-color: var(--color-main-background);\n\tborder-radius: var(--border-radius-large);\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t&__header {\n\t\tdisplay: flex;\n\t\tflex-shrink: 0;\n\t\tposition: relative;\n\t\theight: $header-height;\n\t\tbackground-color: var(--color-primary-element-light);\n\n\t\t&__edit {\n\t\t\tposition: absolute;\n\t\t\tinset-block-start: 8px;\n\t\t\tinset-inline-end: 8px;\n\t\t\tz-index: 1;\n\t\t}\n\n\t\t&__container {\n\t\t\talign-self: flex-end;\n\t\t\tdisplay: flex;\n\t\t\talign-items: flex-end;\n\t\t\t// Match sidebar margin-inline-end so name/status line up with role/bio\n\t\t\tgap: 12px;\n\t\t\twidth: 100%;\n\t\t\tmargin: 8px 0;\n\t\t\tpadding-inline: 16px;\n\t\t\tbox-sizing: border-box;\n\n\t\t\t&__placeholder {\n\t\t\t\tflex: 0 0 $sidebar-width;\n\t\t\t\twidth: $sidebar-width;\n\t\t\t}\n\n\t\t\t&__avatar {\n\t\t\t\tflex-shrink: 0;\n\t\t\t}\n\n\t\t\t&__identity {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-direction: column;\n\t\t\t\tjustify-content: flex-end;\n\t\t\t\talign-items: flex-start;\n\t\t\t\tgap: 4px;\n\t\t\t\tmin-width: 0;\n\t\t\t\tflex: 1;\n\t\t\t\tpadding-inline: 0;\n\t\t\t}\n\n\t\t\t&__displayname {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: baseline;\n\t\t\t\tgap: 8px;\n\t\t\t\tmin-width: 0;\n\n\t\t\t\th2 {\n\t\t\t\t\tfont-size: 24px;\n\t\t\t\t\tmargin: 0;\n\t\t\t\t\toverflow-wrap: anywhere;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t&__pronouns {\n\t\t\t\tfont-size: 15px;\n\t\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\t}\n\n\t\t\t&__status {\n\t\t\t\tmin-width: 0;\n\t\t\t}\n\n\t\t\t&__status-content {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tgap: 8px;\n\t\t\t\tfont-size: 14px;\n\t\t\t\toverflow-wrap: anywhere;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__body {\n\t\tflex: 1;\n\t\tmin-height: 0;\n\t\tbackground-color: var(--color-main-background);\n\t}\n\n\t&__content {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tpadding-inline: 16px 16px;\n\t\tbox-sizing: border-box;\n\t}\n\n\t&__sidebar {\n\t\talign-self: flex-start;\n\t\tpadding-top: 8px;\n\t\twidth: $sidebar-width;\n\t\tmin-width: $sidebar-width;\n\t\tmargin-block: -100px 0;\n\t\tmargin-inline: 0 12px;\n\t}\n\n\t&__header,\n\t&__sidebar {\n\t\t// Specificity hack is needed to override Avatar component styles\n\t\t:deep(.avatar.avatardiv) {\n\t\t\ttext-align: center;\n\t\t\tmargin: auto;\n\t\t\tdisplay: block;\n\t\t\tpadding: 8px;\n\n\t\t\t.avatardiv__user-status {\n\t\t\t\tinset-inline-end: 10px;\n\t\t\t\tbottom: 10px;\n\t\t\t\twidth: 26px;\n\t\t\t\theight: 26px;\n\t\t\t\tbackground-size: 22px;\n\t\t\t\tborder: none;\n\t\t\t\tbackground-color: var(--color-main-background);\n\t\t\t\tline-height: 26px;\n\t\t\t\tfont-size: 16px;\n\t\t\t}\n\t\t}\n\t}\n\n\t&__blocks {\n\t\tmargin: 12px 0 12px 0;\n\t\tdisplay: grid;\n\t\tgap: 8px 0;\n\t\tmin-width: 0;\n\t\tflex: 1;\n\t\toverflow: hidden;\n\t\talign-content: start;\n\n\t\tp, h3 {\n\t\t\toverflow-wrap: anywhere;\n\t\t}\n\n\t\t&-details {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: 2px 0;\n\n\t\t\t.detail {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tcolor: var(--color-text-maxcontrast);\n\t\t\t\tfont-size: 14px;\n\n\t\t\t\tp .detail-icon {\n\t\t\t\t\tdisplay: inline-block;\n\t\t\t\t\tvertical-align: middle;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&-headline {\n\t\t\tmargin-inline: 0;\n\t\t\tmargin-block: 4px 0;\n\t\t\tfont-weight: bold;\n\t\t\tfont-size: 16px;\n\t\t}\n\n\t\t&-biography {\n\t\t\toverflow: hidden;\n\t\t\tfont-size: 14px;\n\t\t\tline-height: 1.4;\n\t\t\tdisplay: -webkit-box;\n\t\t\t-webkit-box-orient: vertical;\n\t\t\t-webkit-line-clamp: 4;\n\t\t\tline-clamp: 4;\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow-wrap: anywhere;\n\n\t\t\t:deep(p) {\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\n\t\t&-empty-info {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t}\n\t}\n\n\t&__loading,\n\t&__error {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tjustify-content: center;\n\t\theight: 100%;\n\t\tmin-height: $card-height;\n\t\tpadding: 16px;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n}\n\n.user-actions {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 8px 0;\n\tmargin-top: 12px;\n\tmax-width: $sidebar-width;\n\n\t&__loading {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\tpadding: 8px 0;\n\t}\n\n\t&__primary {\n\t\tmargin: 0 auto;\n\t\twidth: $sidebar-width !important;\n\n\t\t&__icon {\n\t\t\theight: 20px;\n\t\t\twidth: 20px;\n\t\t\tobject-fit: contain;\n\t\t\tfilter: var(--primary-invert-if-dark);\n\t\t}\n\n\t\t&__icon-class {\n\t\t\tdisplay: block;\n\t\t\theight: 20px;\n\t\t\twidth: 20px;\n\t\t\tbackground-size: 20px;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-position: center;\n\t\t\tfilter: var(--primary-invert-if-dark);\n\t\t}\n\t}\n\n\t&__other {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\tgap: 0 4px;\n\n\t\t&__icon {\n\t\t\theight: 20px;\n\t\t\twidth: 20px;\n\t\t\tobject-fit: contain;\n\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\talign-self: center;\n\t\t\tmargin: 8px; // compact 44px-ish hit target for the card\n\t\t}\n\n\t\t&__icon-class {\n\t\t\tdisplay: block;\n\t\t\theight: 20px;\n\t\t\twidth: 20px;\n\t\t\tmargin: 8px;\n\t\t\tbackground-size: 20px;\n\t\t\tbackground-repeat: no-repeat;\n\t\t\tbackground-position: center;\n\t\t\tfilter: var(--background-invert-if-dark);\n\t\t}\n\t}\n}\n\n// Mobile layout — uses MOBILE_SMALL_BREAKPOINT (512px), same as useIsSmallMobile()\n@media only screen and (max-width: 512px) {\n\t.profile-hover-card {\n\t\twidth: min(#{$card-width}, calc(100vw - 24px));\n\t\tmax-width: calc(100vw - 24px);\n\t\theight: auto;\n\t\tmin-height: 0;\n\t\tmax-height: min(80vh, 520px);\n\t\toverflow: auto;\n\n\t\t&__header {\n\t\t\theight: auto;\n\t\t\tmin-height: 112px;\n\n\t\t\t&__container {\n\t\t\t\talign-self: flex-end;\n\t\t\t\talign-items: flex-end;\n\t\t\t\tgap: 16px;\n\t\t\t\tmargin: 12px auto;\n\t\t\t\tpadding-inline: 12px;\n\n\t\t\t\t&__avatar {\n\t\t\t\t\talign-self: flex-end;\n\t\t\t\t}\n\n\t\t\t\t&__identity {\n\t\t\t\t\tgap: 6px;\n\t\t\t\t\tpadding-inline: 0;\n\t\t\t\t\t// Stack from the bottom: name, then pronouns, then status\n\t\t\t\t\tjustify-content: flex-end;\n\t\t\t\t}\n\n\t\t\t\t&__displayname {\n\t\t\t\t\tflex-direction: column;\n\t\t\t\t\talign-items: flex-start;\n\t\t\t\t\tgap: 4px;\n\n\t\t\t\t\th2 {\n\t\t\t\t\t\tfont-size: 20px;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t&__pronouns {\n\t\t\t\t\tfont-size: 16px;\n\t\t\t\t}\n\n\t\t\t\t&__pronoun-separator {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\n\t\t\t\t&__status-content {\n\t\t\t\t\tfont-size: 16px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&__content {\n\t\t\tdisplay: block;\n\t\t\theight: auto;\n\t\t\tpadding-inline: 12px;\n\t\t\tpadding-block-end: 12px;\n\t\t}\n\n\t\t&__sidebar {\n\t\t\tmargin: unset;\n\t\t\twidth: auto;\n\t\t\tmin-width: 0;\n\t\t\tpadding-top: 0;\n\t\t}\n\n\t\t&__blocks {\n\t\t\twidth: unset;\n\t\t\tmargin: 0;\n\t\t\tpadding: 8px 4px 12px;\n\t\t}\n\n\t\t&__header,\n\t\t&__sidebar {\n\t\t\t:deep(.avatar.avatardiv) {\n\t\t\t\t.avatardiv__user-status {\n\t\t\t\t\tinset-inline-end: 0;\n\t\t\t\t\tbottom: 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t&__loading,\n\t\t&__error {\n\t\t\tmin-height: 200px;\n\t\t}\n\t}\n\n\t.user-actions {\n\t\twidth: unset;\n\t\tmax-width: none;\n\t\tmargin: 8px auto 0;\n\t\tpadding: 0 4px;\n\n\t\t&__primary {\n\t\t\twidth: 100% !important;\n\t\t\tmax-width: 220px;\n\t\t}\n\n\t\t&__other {\n\t\t\tflex-wrap: wrap;\n\t\t}\n\t}\n}\n\n@media only screen and (max-width: 480px) {\n\t.profile-hover-card {\n\t\twidth: calc(100vw - 16px);\n\t\tmax-width: calc(100vw - 16px);\n\t\tborder-radius: var(--border-radius);\n\n\t\t&__header {\n\t\t\t&__container {\n\t\t\t\tgap: 8px;\n\t\t\t\tpadding-inline: 8px;\n\t\t\t}\n\t\t}\n\t}\n}\n</style>\n\n<docs>\n\n### Description\n\n`NcProfileHoverCard` is the **content** of a profile popover. It is not a trigger and does not wrap `NcPopover`.\n\nWhen `open` becomes `true`, the card loads the user's profile and user status itself.\nPass `profile` to skip the profile request.\nPass `preloadedUserStatus` to skip the status request (e.g. when `NcAvatar` already loaded it).\n\n`NcAvatar` already hosts this card on hover or focus for real users (unless `disable-menu` is set)\nand can pass contacts menu actions via `actions` / `actions-loading`.\nIf `actions` is omitted, actions from the profile API are used.\n\n### With NcAvatar\n\n```vue\n\t<NcAvatar user=\"alice\" display-name=\"Alice\" />\n```\n\n### Standalone as popover content\n\nBind `open` to the popover visibility so data is loaded only while the card is shown.\n\n```vue\n<template>\n\t<NcPopover v-model:shown=\"shown\"\n\t\t:triggers=\"['hover', 'focus', 'click']\"\n\t\t:popover-triggers=\"['hover']\"\n\t\t:delay=\"{ show: 400, hide: 200 }\"\n\t\tno-focus-trap\n\t\tpopup-role=\"dialog\">\n\t\t<template #trigger>\n\t\t\t<span tabindex=\"0\">Hover me</span>\n\t\t</template>\n\t\t<NcProfileHoverCard user=\"alice\" :open=\"shown\" />\n\t</NcPopover>\n</template>\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tshown: false,\n\t\t}\n\t},\n}\n</script>\n```\n\n</docs>\n"],"names":["_sfc_main","_hoisted_3","_createElementBlock","_mergeProps","_createElementVNode","_openBlock","_unref","_createVNode","_Fragment","_createBlock","_toDisplayString","_normalizeClass","_renderList","_resolveDynamicComponent","_createSlots","_createTextVNode"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
@@ -1,7 +1,7 @@
1
- import '../assets/NcProgressBar-B6wveIA1.css';
1
+ import '../assets/NcProgressBar.css';
2
2
  import { defineComponent, useCssVars, computed, openBlock, createElementBlock, normalizeClass, createElementVNode, toDisplayString, createCommentVNode } from "vue";
3
- import { _ as _export_sfc } from "./_plugin-vue_export-helper-1tPrXgE0.mjs";
4
- const _hoisted_1 = ["aria-valuenow"];
3
+ import { _ as _export_sfc } from "./_plugin-vue_export-helper.mjs";
4
+ const _hoisted_1 = ["aria-label", "aria-labelledby", "aria-describedby", "aria-valuenow"];
5
5
  const _hoisted_2 = ["height", "width"];
6
6
  const _hoisted_3 = ["stroke-dasharray", "stroke-dashoffset", "stroke-width", "r", "cx", "cy"];
7
7
  const _hoisted_4 = ["stroke-dasharray", "stroke-dashoffset", "stroke-width", "r", "cx", "cy"];
@@ -9,9 +9,10 @@ const _hoisted_5 = {
9
9
  key: 1,
10
10
  class: "progress-bar-container"
11
11
  };
12
- const _hoisted_6 = ["value"];
12
+ const _hoisted_6 = ["aria-label", "aria-labelledby", "aria-describedby", "value"];
13
13
  const _hoisted_7 = {
14
14
  key: 0,
15
+ "aria-hidden": "true",
15
16
  class: "progress-bar__value"
16
17
  };
17
18
  const gridBaseline = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue("--default-grid-baseline"));
@@ -20,6 +21,9 @@ const clickableAreaSmall = Number.parseInt(window.getComputedStyle(document.body
20
21
  const _sfc_main = /* @__PURE__ */ defineComponent({
21
22
  __name: "NcProgressBar",
22
23
  props: {
24
+ ariaLabel: { default: void 0 },
25
+ ariaLabelledby: { default: void 0 },
26
+ ariaDescribedby: { default: void 0 },
23
27
  value: { default: 0 },
24
28
  size: { default: "small" },
25
29
  error: { type: Boolean },
@@ -29,8 +33,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
29
33
  },
30
34
  setup(__props) {
31
35
  useCssVars((_ctx) => ({
32
- "v3a86fec2": _ctx.color,
33
- "v57442460": heightPx.value
36
+ "v737c16c0": _ctx.color,
37
+ "v0630ed12": heightPx.value
34
38
  }));
35
39
  const props = __props;
36
40
  const normalizedProgress = computed(() => Math.max(0, Math.min(100, props.value)) / 100);
@@ -58,9 +62,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
58
62
  return (_ctx, _cache) => {
59
63
  return __props.type === "circular" ? (openBlock(), createElementBlock("span", {
60
64
  key: 0,
61
- role: "progressbar",
65
+ class: normalizeClass(["progress-bar progress-bar--circular", { "progress-bar--error": __props.error }]),
66
+ "aria-label": __props.ariaLabel,
67
+ "aria-labelledby": __props.ariaLabelledby,
68
+ "aria-describedby": __props.ariaDescribedby,
62
69
  "aria-valuenow": __props.value,
63
- class: normalizeClass([{ "progress-bar--error": __props.error }, "progress-bar progress-bar--circular"])
70
+ role: "progressbar"
64
71
  }, [
65
72
  (openBlock(), createElementBlock("svg", {
66
73
  height: height.value,
@@ -90,6 +97,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
90
97
  ], 10, _hoisted_1)) : (openBlock(), createElementBlock("div", _hoisted_5, [
91
98
  createElementVNode("progress", {
92
99
  class: normalizeClass(["progress-bar progress-bar--linear vue", { "progress-bar--error": __props.error }]),
100
+ "aria-label": __props.ariaLabel,
101
+ "aria-labelledby": __props.ariaLabelledby,
102
+ "aria-describedby": __props.ariaDescribedby,
93
103
  value: __props.value,
94
104
  max: "100"
95
105
  }, null, 10, _hoisted_6),
@@ -98,8 +108,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
98
108
  };
99
109
  }
100
110
  });
101
- const NcProgressBar = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-353fa414"]]);
111
+ const NcProgressBar = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-461c5031"]]);
102
112
  export {
103
113
  NcProgressBar as N
104
114
  };
105
- //# sourceMappingURL=NcProgressBar-C-ane-Ni.mjs.map
115
+ //# sourceMappingURL=NcProgressBar.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NcProgressBar.mjs","sources":["../../src/components/NcProgressBar/NcProgressBar.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\nThis is a simple progress bar component.\n## Usage:\n\n### Linear\n```vue\n<template>\n\t<span>\n\t\tSmall\n\t\t<NcProgressBar :value=\"20\" />\n\t\t<br />\n\t\tError\n\t\t<NcProgressBar :value=\"80\" :error=\"true\" />\n\t\t<br />\n\t\tCustom color\n\t\t<NcProgressBar :value=\"55\" size=\"medium\" color=\"green\" />\n\t\t<br />\n\t\tMedium size\n\t\t<NcProgressBar :value=\"60\" size=\"medium\" />\n\t\t<br />\n\t\tCustom size (changes the progress bar height)\n\t\t<NcProgressBar :value=\"55\" :size=\"8\" showValue />\n\t</span>\n</template>\n```\n\n### Circular\n```vue\n<template>\n\t<span>\n\t\tDefault\n\t\t<NcProgressBar type=\"circular\" :value=\"25\" />\n\t\t<br />\n\t\tColor\n\t\t<NcProgressBar type=\"circular\" :value=\"42\" color=\"green\" />\n\t\t<br />\n\t\tError\n\t\t<NcProgressBar type=\"circular\" :value=\"80\" error />\n\t\t<br />\n\t\tMedium size\n\t\t<NcProgressBar type=\"circular\" :value=\"65\" size=\"medium\" />\n\t\t<br />\n\t\tCustom size (changes the diameter of the progress bar)\n\t\t<NcProgressBar type=\"circular\" :value=\"65\" :size=\"42\" />\n\t</span>\n</template>\n```\n</docs>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nconst props = withDefaults(defineProps<{\n\t/**\n\t * The accessible label for the progressbar.\n\t */\n\tariaLabel?: string | undefined\n\n\t/**\n\t * The id of the element that labels the progressbar.\n\t */\n\tariaLabelledby?: string | undefined\n\n\t/**\n\t * The id of the element that describes the progressbar.\n\t */\n\tariaDescribedby?: string | undefined\n\n\t/**\n\t * An integer between 0 and 100\n\t */\n\tvalue?: number\n\n\t/**\n\t * Determines the height of the progressbar.\n\t */\n\tsize?: 'small' | 'medium' | number\n\n\t/**\n\t * Applies an error color to the progressbar if true.\n\t */\n\terror?: boolean\n\n\t/**\n\t * Progress bar variant\n\t */\n\ttype?: 'linear' | 'circular'\n\n\t/**\n\t * The color of the progress bar\n\t */\n\tcolor?: string\n\n\t/**\n\t * Show value at the end of progress bar (only for linear type)\n\t */\n\tshowValue?: boolean\n}>(), {\n\tariaLabel: undefined,\n\tariaLabelledby: undefined,\n\tariaDescribedby: undefined,\n\tvalue: 0,\n\tcolor: 'var(--color-primary-element)',\n\tsize: 'small',\n\ttype: 'linear',\n\tshowValue: false,\n})\n\nconst normalizedProgress = computed(() => Math.max(0, Math.min(100, props.value)) / 100)\n\nconst height = computed(() => {\n\tif (typeof props.size === 'number') {\n\t\treturn Math.round(props.size)\n\t}\n\n\t// circular type\n\tif (props.type === 'circular') {\n\t\tif (props.size === 'medium') {\n\t\t\treturn clickableArea\n\t\t} else {\n\t\t\treturn clickableAreaSmall\n\t\t}\n\t}\n\n\t// linear type\n\tif (props.size === 'medium') {\n\t\treturn 1.5 * gridBaseline\n\t}\n\treturn gridBaseline\n})\n\nconst heightPx = computed(() => `${height.value}px`)\n\n// Variables for the circlur progressbar\nconst strokeWidth = computed(() => Math.max(gridBaseline, height.value / clickableArea * gridBaseline))\nconst circleCenterPosition = computed(() => height.value / 2)\nconst circleRadius = computed(() => (height.value / 2) - strokeWidth.value)\nconst circumference = computed(() => circleRadius.value * 2 * Math.PI)\n</script>\n\n<script lang=\"ts\">\n// design constants\nconst gridBaseline = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue('--default-grid-baseline'))\nconst clickableArea = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue('--default-clickable-area'))\nconst clickableAreaSmall = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue('--clickable-area-small'))\n</script>\n\n<template>\n\t<span\n\t\tv-if=\"type === 'circular'\"\n\t\tclass=\"progress-bar progress-bar--circular\"\n\t\t:class=\"{ 'progress-bar--error': error }\"\n\t\t:aria-label\n\t\t:aria-labelledby\n\t\t:aria-describedby\n\t\t:aria-valuenow=\"value\"\n\t\trole=\"progressbar\">\n\t\t<svg\n\t\t\t:height=\"height\"\n\t\t\t:width=\"height\">\n\t\t\t<circle\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\t:stroke-dasharray=\"`${normalizedProgress * circumference} ${(1 - normalizedProgress) * circumference}`\"\n\t\t\t\t:stroke-dashoffset=\"0.25 * circumference\"\n\t\t\t\t:stroke-width\n\t\t\t\t:r=\"circleRadius\"\n\t\t\t\t:cx=\"circleCenterPosition\"\n\t\t\t\t:cy=\"circleCenterPosition\" />\n\t\t\t<circle\n\t\t\t\tstroke=\"var(--color-background-darker)\"\n\t\t\t\tfill=\"transparent\"\n\t\t\t\t:stroke-dasharray=\"`${(1 - normalizedProgress) * circumference} ${normalizedProgress * circumference}`\"\n\t\t\t\t:stroke-dashoffset=\"(0.25 - normalizedProgress) * circumference\"\n\t\t\t\t:stroke-width\n\t\t\t\t:r=\"circleRadius\"\n\t\t\t\t:cx=\"circleCenterPosition\"\n\t\t\t\t:cy=\"circleCenterPosition\" />\n\t\t</svg>\n\t</span>\n\t<div v-else class=\"progress-bar-container\">\n\t\t<progress\n\t\t\tclass=\"progress-bar progress-bar--linear vue\"\n\t\t\t:class=\"{ 'progress-bar--error': error }\"\n\t\t\t:aria-label\n\t\t\t:aria-labelledby\n\t\t\t:aria-describedby\n\t\t\t:value\n\t\t\tmax=\"100\" />\n\n\t\t<span v-if=\"showValue\" aria-hidden=\"true\" class=\"progress-bar__value\">{{ value }}%</span>\n\t</div>\n</template>\n\n<style lang=\"scss\" scoped>\n\n.progress-bar {\n\tdisplay: block;\n\theight: var(--progress-bar-height);\n\n\t--progress-bar-color: v-bind(color);\n\t--progress-bar-height: v-bind(heightPx);\n\n\t&--linear {\n\t\twidth: 100%;\n\t\toverflow: hidden;\n\t\tborder: 0;\n\t\tpadding: 0;\n\t\tbackground: var(--color-background-dark);\n\t\tborder-radius: calc(var(--progress-bar-height) / 2);\n\n\t\t// Browser specific rules\n\t\t&::-webkit-progress-bar {\n\t\t\theight: var(--progress-bar-height);\n\t\t\tbackground-color: transparent;\n\t\t}\n\t\t&::-webkit-progress-value {\n\t\t\tbackground: var(--progress-bar-color, var(--gradient-primary-background));\n\t\t\tborder-radius: calc(var(--progress-bar-height) / 2);\n\t\t}\n\t\t&::-moz-progress-bar {\n\t\t\tbackground: var(--progress-bar-color, var(--gradient-primary-background));\n\t\t\tborder-radius: calc(var(--progress-bar-height) / 2);\n\t\t}\n\t}\n\t&--circular {\n\t\twidth: var(--progress-bar-height);\n\t\tcolor: var(--progress-bar-color);\n\t}\n\t&--error {\n\t\tcolor: var(--color-text-error, var(--color-error)) !important;\n\t\t// Override previous values\n\t\t&::-moz-progress-bar {\n\t\t\tbackground: var(--color-text-error, var(--color-error)) !important;\n\t\t}\n\t\t&::-webkit-progress-value {\n\t\t\tbackground: var(--color-text-error, var(--color-error)) !important;\n\t\t}\n\t}\n\n\t&-container {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: calc(2 * var(--default-grid-baseline));\n\t}\n\n\t&__value {\n\t\tfont-size: var(--font-size-small, 13px);\n\t\tfont-variant-numeric: tabular-nums;\n\t\tmin-width: 4ch;\n\t\ttext-align: end;\n\t}\n}\n\n</style>\n"],"names":["_createElementBlock","_normalizeClass","_createElementVNode","_openBlock","_toDisplayString"],"mappings":";;;;;;;;;;;;;;;;AAmJA,MAAM,eAAe,OAAO,SAAS,OAAO,iBAAiB,SAAS,IAAI,EAAE,iBAAiB,yBAAyB,CAAC;AACvH,MAAM,gBAAgB,OAAO,SAAS,OAAO,iBAAiB,SAAS,IAAI,EAAE,iBAAiB,0BAA0B,CAAC;AACzH,MAAM,qBAAqB,OAAO,SAAS,OAAO,iBAAiB,SAAS,IAAI,EAAE,iBAAiB,wBAAwB,CAAC;;;;;;;;;;;;;;;;;;;AA5F5H,UAAM,QAAQ;AAwDd,UAAM,qBAAqB,SAAS,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,MAAM,KAAK,CAAC,IAAI,GAAG;AAEvF,UAAM,SAAS,SAAS,MAAM;AAC7B,UAAI,OAAO,MAAM,SAAS,UAAU;AACnC,eAAO,KAAK,MAAM,MAAM,IAAI;AAAA,MAC7B;AAGA,UAAI,MAAM,SAAS,YAAY;AAC9B,YAAI,MAAM,SAAS,UAAU;AAC5B,iBAAO;AAAA,QACR,OAAO;AACN,iBAAO;AAAA,QACR;AAAA,MACD;AAGA,UAAI,MAAM,SAAS,UAAU;AAC5B,eAAO,MAAM;AAAA,MACd;AACA,aAAO;AAAA,IACR,CAAC;AAED,UAAM,WAAW,SAAS,MAAM,GAAG,OAAO,KAAK,IAAI;AAGnD,UAAM,cAAc,SAAS,MAAM,KAAK,IAAI,cAAc,OAAO,QAAQ,gBAAgB,YAAY,CAAC;AACtG,UAAM,uBAAuB,SAAS,MAAM,OAAO,QAAQ,CAAC;AAC5D,UAAM,eAAe,SAAS,MAAO,OAAO,QAAQ,IAAK,YAAY,KAAK;AAC1E,UAAM,gBAAgB,SAAS,MAAM,aAAa,QAAQ,IAAI,KAAK,EAAE;;aAY7D,QAAA,SAAI,2BADXA,mBA+BO,QAAA;AAAA;QA7BN,OAAKC,eAAA,CAAC,uCAAqC,EAAA,uBACV,QAAA,MAAA,CAAK,CAAA;AAAA,QACrC,cAAA,QAAA;AAAA,QACA,mBAAA,QAAA;AAAA,QACA,oBAAA,QAAA;AAAA,QACA,iBAAe,QAAA;AAAA,QAChB,MAAK;AAAA,MAAA;sBACLD,mBAqBM,OAAA;AAAA,UApBJ,QAAQ,OAAA;AAAA,UACR,OAAO,OAAA;AAAA,QAAA;UACRE,mBAQ8B,UAAA;AAAA,YAP7B,QAAO;AAAA,YACP,MAAK;AAAA,YACJ,uBAAqB,mBAAA,QAAqB,mBAAa,KAAA,IAAS,mBAAA,SAAsB,cAAA,KAAa;AAAA,YACnG,4BAA0B,cAAA;AAAA,YAC1B,gBAAA,YAAA;AAAA,YACA,GAAG,aAAA;AAAA,YACH,IAAI,qBAAA;AAAA,YACJ,IAAI,qBAAA;AAAA,UAAA;UACNA,mBAQ8B,UAAA;AAAA,YAP7B,QAAO;AAAA,YACP,MAAK;AAAA,YACJ,4BAA0B,mBAAA,SAAsB,mBAAa,IAAI,mBAAA,QAAqB,cAAA,KAAa;AAAA,YACnG,sBAAiB,OAAU,mBAAA,SAAsB,cAAA;AAAA,YACjD,gBAAA,YAAA;AAAA,YACA,GAAG,aAAA;AAAA,YACH,IAAI,qBAAA;AAAA,YACJ,IAAI,qBAAA;AAAA,UAAA;;6BAGRC,aAAAH,mBAWM,OAXN,YAWM;AAAA,QAVLE,mBAOa,YAAA;AAAA,UANZ,OAAKD,eAAA,CAAC,yCAAuC,EAAA,uBACZ,QAAA,MAAA,CAAK,CAAA;AAAA,UACrC,cAAA,QAAA;AAAA,UACA,mBAAA,QAAA;AAAA,UACA,oBAAA,QAAA;AAAA,UACA,OAAA,QAAA;AAAA,UACD,KAAI;AAAA,QAAA;QAEO,QAAA,aAAZE,UAAA,GAAAH,mBAAyF,QAAzF,YAAyFI,gBAAhB,QAAA,KAAK,IAAG,KAAC,CAAA;;;;;;"}
@@ -1,9 +1,9 @@
1
- import '../assets/NcRadioGroup-CtXZ4Y8D.css';
1
+ import '../assets/NcRadioGroup.css';
2
2
  import { defineComponent, useModel, ref, provide, computed, warn, openBlock, createBlock, withCtx, renderSlot, createElementBlock, normalizeClass, mergeModels } from "vue";
3
- import { N as NcFormBox } from "./NcFormBox-Bmqar8nn.mjs";
4
- import { N as NcFormGroup } from "./NcFormGroup-N7qIFAwN.mjs";
5
- import { I as INSIDE_RADIO_GROUP_KEY } from "./useNcRadioGroup-D6llQmAl.mjs";
6
- import { _ as _export_sfc } from "./_plugin-vue_export-helper-1tPrXgE0.mjs";
3
+ import { N as NcFormBox } from "./NcFormBox.mjs";
4
+ import { N as NcFormGroup } from "./NcFormGroup.mjs";
5
+ import { I as INSIDE_RADIO_GROUP_KEY } from "./useNcRadioGroup.mjs";
6
+ import { _ as _export_sfc } from "./_plugin-vue_export-helper.mjs";
7
7
  const _sfc_main = /* @__PURE__ */ defineComponent({
8
8
  __name: "NcRadioGroup",
9
9
  props: /* @__PURE__ */ mergeModels({
@@ -60,9 +60,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
60
60
  };
61
61
  }
62
62
  });
63
- const radioGroup_checkboxRadioContainer = "_radioGroup_checkboxRadioContainer_8C8Ku";
63
+ const radioGroup_checkboxRadioContainer = "_radioGroup_checkboxRadioContainer_AUPA7";
64
64
  const style0 = {
65
- "material-design-icon": "_material-design-icon_Mmjja",
65
+ "material-design-icon": "_material-design-icon_TUacq",
66
66
  radioGroup_checkboxRadioContainer
67
67
  };
68
68
  const cssModules = {
@@ -72,4 +72,4 @@ const NcRadioGroup = /* @__PURE__ */ _export_sfc(_sfc_main, [["__cssModules", cs
72
72
  export {
73
73
  NcRadioGroup as N
74
74
  };
75
- //# sourceMappingURL=NcRadioGroup-B4qmS2UD.mjs.map
75
+ //# sourceMappingURL=NcRadioGroup.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NcRadioGroup.mjs","sources":["../../src/components/NcRadioGroup/NcRadioGroup.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport type { Slot } from 'vue'\n\nimport { computed, provide, ref, warn } from 'vue'\nimport NcFormBox from '../NcFormBox/NcFormBox.vue'\nimport NcFormGroup from '../NcFormGroup/NcFormGroup.vue'\nimport { INSIDE_RADIO_GROUP_KEY } from './useNcRadioGroup.ts'\n\nconst modelValue = defineModel<string>({ required: false, default: '' })\n\ndefineProps<{\n\t/**\n\t * Label of the radio group (accessible name).\n\t * It can be hidden visually if needed using `hide-label` prop.\n\t */\n\tlabel: string\n\n\t/**\n\t * If set the label of the button group will not be shown visually but only for accessibility purposes.\n\t *\n\t * @deprecated Use `hide-label` instead.\n\t */\n\tlabelHidden?: boolean\n\n\t/**\n\t * If set the label of the button group will not be shown visually but only for accessibility purposes.\n\t */\n\thideLabel?: boolean\n\n\t/**\n\t * Optional visual description of the radio group.\n\t */\n\tdescription?: string\n}>()\n\ndefineSlots<{\n\t/**\n\t * Slot for the included radio buttons (`NcCheckboxRadioSwitch`).\n\t * The `type` prop of the `NcCheckboxRadioSwitch` will be automatically set (and forced) to `radio`.\n\t *\n\t * If you want the button variant, then you have to use `NcRadioGroupButton`.\n\t */\n\tdefault?: Slot\n}>()\n\nconst buttonVariant = ref<boolean>()\n\nprovide(INSIDE_RADIO_GROUP_KEY, computed(() => ({\n\tregister,\n\tmodelValue: modelValue.value,\n\tonUpdate,\n})))\n\n/**\n * Register a child component\n *\n * @param isButton - Whether the registered child component is a button or normal radio\n */\nfunction register(isButton: boolean): void {\n\tif (buttonVariant.value !== undefined && buttonVariant.value !== isButton) {\n\t\twarn('[NcRadioGroup] Mixing NcCheckboxRadioSwitch and NcRadioGroupButton is not possible!')\n\t}\n\tbuttonVariant.value = isButton\n}\n\n/**\n * Handle updating the current model value\n *\n * @param value - The new value\n */\nfunction onUpdate(value: string) {\n\tmodelValue.value = value\n}\n</script>\n\n<template>\n\t<NcFormGroup\n\t\t:label\n\t\t:description\n\t\t:hideLabel=\"labelHidden || hideLabel\">\n\t\t<NcFormBox v-if=\"buttonVariant\" row>\n\t\t\t<slot />\n\t\t</NcFormBox>\n\t\t<span v-else :class=\"$style.radioGroup_checkboxRadioContainer\">\n\t\t\t<slot />\n\t\t</span>\n\t</NcFormGroup>\n</template>\n\n<style module lang=\"scss\">\n.radioGroup_checkboxRadioContainer :global(.checkbox-content) {\n\tmax-width: unset !important;\n}\n</style>\n\n<docs>\n## Usage example\n\n### Grouping multiple radio buttons\n\nThe radio group allows to group radio buttons into semantical groups.\nThe `v-model` only needs to be bound to the group component, also the `type` will automatically be set to `radio`.\n\n```vue\n<template>\n\t<NcRadioGroup v-model=\"selectedSides\" class=\"radio-group\" label=\"Sides\" description=\"Please choose the sides for your menu.\">\n\t\t<NcCheckboxRadioSwitch value=\"fries\">\n\t\t\tFries\n\t\t</NcCheckboxRadioSwitch>\n\t\t<NcCheckboxRadioSwitch value=\"salad\">\n\t\t\tSalad\n\t\t</NcCheckboxRadioSwitch>\n\t\t<NcCheckboxRadioSwitch value=\"none\">\n\t\t\tNothing\n\t\t</NcCheckboxRadioSwitch>\n\t</NcRadioGroup>\n</template>\n\n<script>\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tselectedSides: 'none',\n\t\t}\n\t},\n}\n</script>\n\n<style scoped>\n.radio-group {\n\tmax-width: 400px\n}\n</style>\n```\n\n### Radio buttons with button styling\n\nThe radio group also allows to create a button like styling together with the `NcRadioGroupButton` component:\n\n```vue\n<template>\n\t<div>\n\t\t<h4>With text labels</h4>\n\t\t<div style=\"max-width: 400px\">\n\t\t\t<NcRadioGroup v-model=\"alignment\" label=\"Example alignment\" hide-label>\n\t\t\t\t<NcRadioGroupButton label=\"Start\" value=\"start\" />\n\t\t\t\t<NcRadioGroupButton label=\"Center\" value=\"center\" />\n\t\t\t\t<NcRadioGroupButton label=\"End\" value=\"end\" />\n\t\t\t</NcRadioGroup>\n\t\t</div>\n\n\t\t<br>\n\n\t\t<h4>With icons</h4>\n\t\t<div style=\"max-width: 250px\">\n\t\t\t<NcRadioGroup v-model=\"alignment\" label=\"Example alignment with icons\" hide-label>\n\t\t\t\t<NcRadioGroupButton aria-label=\"Start\" value=\"start\" disabled>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper directional :path=\"mdiAlignHorizontalLeft\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcRadioGroupButton>\n\t\t\t\t<NcRadioGroupButton aria-label=\"Center\" value=\"center\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiAlignHorizontalCenter\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcRadioGroupButton>\n\t\t\t\t<NcRadioGroupButton aria-label=\"End\" value=\"end\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper directional :path=\"mdiAlignHorizontalRight\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcRadioGroupButton>\n\t\t\t</NcRadioGroup>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport { mdiAlignHorizontalCenter, mdiAlignHorizontalLeft, mdiAlignHorizontalRight } from '@mdi/js'\n\nexport default {\n\tsetup() {\n\t\treturn {\n\t\t\tmdiAlignHorizontalCenter,\n\t\t\tmdiAlignHorizontalLeft,\n\t\t\tmdiAlignHorizontalRight,\n\t\t}\n\t},\n\tdata() {\n\t\treturn {\n\t\t\talignment: 'center',\n\t\t}\n\t},\n}\n</script>\n```\n</docs>\n"],"names":["_useModel","_createBlock","_renderSlot","_createElementBlock","_normalizeClass","$style"],"mappings":";;;;;;;;;;;;;;;;;;AAaA,UAAM,aAAaA,SAAmB,SAAA,YAAiC;AAqCvE,UAAM,gBAAgB,IAAA;AAEtB,YAAQ,wBAAwB,SAAS,OAAO;AAAA,MAC/C;AAAA,MACA,YAAY,WAAW;AAAA,MACvB;AAAA,IAAA,EACC,CAAC;AAOH,aAAS,SAAS,UAAyB;AAC1C,UAAI,cAAc,UAAU,UAAa,cAAc,UAAU,UAAU;AAC1E,aAAK,qFAAqF;AAAA,MAC3F;AACA,oBAAc,QAAQ;AAAA,IACvB;AAOA,aAAS,SAAS,OAAe;AAChC,iBAAW,QAAQ;AAAA,IACpB;;0BAICC,YAUc,aAAA;AAAA,QATZ,OAAA,QAAA;AAAA,QACA,aAAA,QAAA;AAAA,QACA,WAAW,QAAA,eAAe,QAAA;AAAA,MAAA;yBAC3B,MAEY;AAAA,UAFK,cAAA,sBAAjBA,YAEY,WAAA;AAAA;YAFoB,KAAA;AAAA,UAAA;6BAC/B,MAAQ;AAAA,cAARC,WAAQ,KAAA,QAAA,SAAA;AAAA,YAAA;;8BAETC,mBAEO,QAAA;AAAA;YAFO,OAAKC,eAAEC,KAAAA,OAAO,iCAAiC;AAAA,UAAA;YAC5DH,WAAQ,KAAA,QAAA,SAAA;AAAA,UAAA;;;;;;;;;;;;;;;;"}
@@ -1,9 +1,9 @@
1
- import '../assets/NcRadioGroupButton-BuB-aWeJ.css';
1
+ import '../assets/NcRadioGroupButton.css';
2
2
  import { defineComponent, onMounted, computed, openBlock, createElementBlock, normalizeClass, unref, renderSlot, createCommentVNode, toDisplayString, createElementVNode } from "vue";
3
- import { c as createElementId } from "./createElementId-DhjFt1I9.mjs";
4
- import { u as useNcFormBox } from "./useNcFormBox-Djlh582y.mjs";
5
- import { u as useInsideRadioGroup } from "./useNcRadioGroup-D6llQmAl.mjs";
6
- import { _ as _export_sfc } from "./_plugin-vue_export-helper-1tPrXgE0.mjs";
3
+ import { c as createElementId } from "./createElementId.mjs";
4
+ import { u as useNcFormBox } from "./useNcFormBox.mjs";
5
+ import { u as useInsideRadioGroup } from "./useNcRadioGroup.mjs";
6
+ import { _ as _export_sfc } from "./_plugin-vue_export-helper.mjs";
7
7
  const _hoisted_1 = ["id"];
8
8
  const _hoisted_2 = ["aria-labelledby", "aria-label", "checked", "disabled", "value"];
9
9
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -60,13 +60,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
60
60
  };
61
61
  }
62
62
  });
63
- const radioGroupButton = "_radioGroupButton_68Is2";
64
- const radioGroupButton__label = "_radioGroupButton__label_KtgfH";
65
- const radioGroupButton__icon = "_radioGroupButton__icon_ob6sk";
66
- const radioGroupButton_disabled = "_radioGroupButton_disabled_fGQyO";
67
- const radioGroupButton_active = "_radioGroupButton_active_rIE5T";
63
+ const radioGroupButton = "_radioGroupButton_YNoo0";
64
+ const radioGroupButton__label = "_radioGroupButton__label_8W6-c";
65
+ const radioGroupButton__icon = "_radioGroupButton__icon_lPjNx";
66
+ const radioGroupButton_disabled = "_radioGroupButton_disabled_8uxSh";
67
+ const radioGroupButton_active = "_radioGroupButton_active_qTVBh";
68
68
  const style0 = {
69
- "material-design-icon": "_material-design-icon_4nAOE",
69
+ "material-design-icon": "_material-design-icon_L0tBR",
70
70
  radioGroupButton,
71
71
  radioGroupButton__label,
72
72
  radioGroupButton__icon,
@@ -80,4 +80,4 @@ const NcRadioGroupButton = /* @__PURE__ */ _export_sfc(_sfc_main, [["__cssModule
80
80
  export {
81
81
  NcRadioGroupButton as N
82
82
  };
83
- //# sourceMappingURL=NcRadioGroupButton-CZykGwv3.mjs.map
83
+ //# sourceMappingURL=NcRadioGroupButton.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NcRadioGroupButton.mjs","sources":["../../src/components/NcRadioGroupButton/NcRadioGroupButton.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport type { Slot } from 'vue'\n\nimport { computed, onMounted } from 'vue'\nimport { createElementId } from '../../utils/createElementId.ts'\nimport { useNcFormBox } from '../NcFormBox/useNcFormBox.ts'\nimport { useInsideRadioGroup } from '../NcRadioGroup/useNcRadioGroup.ts'\n\nconst props = defineProps<{\n\t/**\n\t * Non visible label for accessibility when no `label` is passed.\n\t */\n\tariaLabel?: string\n\n\t/**\n\t * The visual label of the radio button\n\t */\n\tlabel?: string\n\n\t/**\n\t * The value that should be assigned to the `modelValue` of the `NcRadioGroup`.\n\t */\n\tvalue: string\n\n\t/**\n\t * Disabled state of the radio button\n\t */\n\tdisabled?: boolean\n}>()\n\ndefineSlots<{\n\t/**\n\t * Optional icon slot\n\t */\n\ticon?: Slot\n}>()\n\nconst labelId = createElementId()\nconst radioGroup = useInsideRadioGroup()\nconst { formBoxItemClass } = useNcFormBox()\n\nonMounted(() => radioGroup!.value.register(true))\n\nconst isChecked = computed(() => radioGroup?.value.modelValue === props.value)\n\n/**\n * Handle updating the current model value\n */\nfunction onUpdate() {\n\tif (props.disabled) {\n\t\treturn\n\t}\n\n\tradioGroup!.value.onUpdate(props.value)\n}\n</script>\n\n<template>\n\t<div\n\t\t:class=\"[{\n\t\t\t[$style.radioGroupButton_active]: isChecked,\n\t\t\t[$style.radioGroupButton_disabled]: disabled,\n\t\t}, $style.radioGroupButton, formBoxItemClass]\"\n\t\t@click=\"onUpdate\">\n\t\t<div v-if=\"$slots.icon\" :class=\"$style.radioGroupButton__icon\">\n\t\t\t<slot name=\"icon\" />\n\t\t</div>\n\n\t\t<div v-if=\"label\" :id=\"labelId\" :class=\"$style.radioGroupButton__label\">\n\t\t\t{{ label }}\n\t\t</div>\n\n\t\t<input\n\t\t\t:aria-labelledby=\"label ? labelId : undefined\"\n\t\t\t:aria-label=\"label ? undefined : ariaLabel\"\n\t\t\tclass=\"hidden-visually\"\n\t\t\t:checked=\"isChecked\"\n\t\t\ttype=\"radio\"\n\t\t\t:disabled\n\t\t\t:value\n\t\t\t@input=\"onUpdate\">\n\t</div>\n</template>\n\n<style module lang=\"scss\">\n.radioGroupButton {\n\t--radio-group-button--border-radius: var(--border-radius-small);\n\t--radio-group-button--border-width: 1px;\n\t--radio-group-button--color: var(--color-primary-element-light-text);\n\t--radio-group-button--background-color: var(--color-primary-element-light);\n\t--radio-group-button--background-color-hover: var(--color-primary-element-light-hover);\n\t--radio-group-button--padding: 1px;\n\tcursor: pointer;\n\tcolor: var(--radio-group-button--color);\n\tbackground-color: var(--radio-group-button--background-color);\n\twill-change: transform;\n\ttransition-property: color, background-color, transform;\n\ttransition-duration: var(--animation-quick);\n\tborder: var(--radio-group-button--border-width) solid var(--radio-group-button--background-color-hover);\n\tborder-bottom-width: 2px;\n\tborder-radius: var(--radio-group-button--border-radius);\n\tdisplay: flex;\n\tflex-direction: row;\n\talign-items: center;\n\tjustify-content: center;\n\ttext-align: center;\n\tmin-height: var(--default-clickable-area);\n\t// ensure that the content is centered because of uneven border\n\tpadding-block: var(--radio-group-button--padding) 0;\n\tpadding-inline: var(--radio-group-button--padding);\n\n\t* {\n\t\tcursor: pointer;\n\t}\n\n\t&:has(&__label) {\n\t\tpadding-inline: calc(var(--radio-group-button--padding) + var(--border-radius-element));\n\t}\n\n\t&:has(&__icon) {\n\t\tpadding-inline-start: var(--radio-group-button--padding);\n\t}\n\n\t&:hover:not(.radioGroupButton_disabled) {\n\t\tbackground-color: var(--radio-group-button--background-color-hover);\n\t}\n\n\t&:active:not(.radioGroupButton_disabled) {\n\t\t// TODO: add to theming with animation initiative\n\t\ttransform: scale(0.985);\n\t}\n\n\t&:focus-within {\n\t\t--radio-group-button--border-width: 2px;\n\t\t--radio-group-button--padding: 0px;\n\t\tborder: var(--radio-group-button--border-width) solid var(--color-main-text) !important;\n\t\toutline: calc(var(--default-grid-baseline) / 2) var(--color-main-background);\n\t}\n}\n\n.radioGroupButton_active {\n\t--radio-group-button--color: var(--color-primary-element-text);\n\t--radio-group-button--background-color: var(--color-primary-element);\n\t--radio-group-button--background-color-hover: var(--color-primary-element-hover);\n}\n\n.radioGroupButton__label {\n\tfont-weight: var(--font-weight-element, bold);\n}\n\n.radioGroupButton_disabled {\n\tfilter: saturate($opacity_normal);\n\topacity: $opacity_disabled;\n\n\t// Reset the cursor\n\tcursor: default;\n\t* {\n\t\tcursor: default;\n\t}\n}\n\n.radioGroupButton__icon {\n\t--radio-group-button--icon-size: calc(var(--default-clickable-area) - 4px);\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\theight: 100%;\n\twidth: var(--radio-group-button--icon-size);\n\n\t// make sure the icon is a bit smaller to account for border\n\t* {\n\t\t--default-clickable-area: var(--radio-group-button--icon-size);\n\t}\n}\n</style>\n"],"names":["_createElementBlock","_normalizeClass","$style","_unref","$slots","_renderSlot","_createElementVNode"],"mappings":";;;;;;;;;;;;;;;;AAaA,UAAM,QAAQ;AA6Bd,UAAM,UAAU,gBAAA;AAChB,UAAM,aAAa,oBAAA;AACnB,UAAM,EAAE,iBAAA,IAAqB,aAAA;AAE7B,cAAU,MAAM,WAAY,MAAM,SAAS,IAAI,CAAC;AAEhD,UAAM,YAAY,SAAS,MAAM,YAAY,MAAM,eAAe,MAAM,KAAK;AAK7E,aAAS,WAAW;AACnB,UAAI,MAAM,UAAU;AACnB;AAAA,MACD;AAEA,iBAAY,MAAM,SAAS,MAAM,KAAK;AAAA,IACvC;;0BAICA,mBAuBM,OAAA;AAAA,QAtBJ,OAAKC,eAAA,CAAA;AAAA,WAASC,KAAAA,OAAO,uBAAuB,GAAG,UAAA;AAAA,WAAeA,KAAAA,OAAO,yBAAyB,GAAG,QAAA;AAAA,QAAA,GAAeA,KAAAA,OAAO,kBAAkBC,MAAA,gBAAA,CAAgB,CAAA;AAAA,QAIzJ,SAAO;AAAA,MAAA;QACGC,KAAAA,OAAO,qBAAlBJ,mBAEM,OAAA;AAAA;UAFmB,OAAKC,eAAEC,KAAAA,OAAO,sBAAsB;AAAA,QAAA;UAC5DG,WAAoB,KAAA,QAAA,MAAA;AAAA,QAAA;QAGV,QAAA,sBAAXL,mBAEM,OAAA;AAAA;UAFa,IAAIG,MAAA,OAAA;AAAA,UAAU,OAAKF,eAAEC,KAAAA,OAAO,uBAAuB;AAAA,QAAA,mBAClE,QAAA,KAAK,GAAA,IAAA,UAAA;QAGTI,mBAQmB,SAAA;AAAA,UAPjB,mBAAiB,QAAA,QAAQH,MAAA,OAAA,IAAU;AAAA,UACnC,cAAY,QAAA,QAAQ,SAAY,QAAA;AAAA,UACjC,OAAM;AAAA,UACL,SAAS,UAAA;AAAA,UACV,MAAK;AAAA,UACJ,UAAA,QAAA;AAAA,UACA,OAAA,QAAA;AAAA,UACA,SAAO;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,292 @@
1
+ import '../assets/NcReferenceWidget.css';
2
+ import { defineComponent, inject, ref, useTemplateRef, nextTick, computed, watch, onBeforeUnmount, openBlock, createElementBlock, normalizeClass, normalizeStyle, createElementVNode, withKeys, withModifiers, unref, createCommentVNode, createBlock, resolveDynamicComponent, mergeProps, withCtx, toDisplayString, createTextVNode } from "vue";
3
+ import { useElementSize, useIntersectionObserver } from "@vueuse/core";
4
+ import { routerKey, RouterLink } from "vue-router";
5
+ import { N as NcButton } from "./NcButton.mjs";
6
+ import { r as register, m as t25, a as t } from "./_l10n.mjs";
7
+ import { c as createElementId } from "./createElementId.mjs";
8
+ import { b as hasFullWidth, c as isResizable, i as isWidgetRegistered, h as hasInteractiveView, a as renderWidget, d as destroyWidget } from "./widgets.mjs";
9
+ import { g as getRoute } from "./autolink.mjs";
10
+ import { _ as _export_sfc } from "./_plugin-vue_export-helper.mjs";
11
+ register(t25);
12
+ const _hoisted_1 = ["aria-label", "aria-valuenow", "aria-valuemin", "aria-valuemax"];
13
+ const _hoisted_2 = ["src"];
14
+ const _hoisted_3 = { class: "widget-default--details" };
15
+ const _hoisted_4 = { class: "widget-default--name" };
16
+ const _hoisted_5 = { class: "widget-default--link" };
17
+ const IDLE_TIMEOUT = 3 * 60 * 1e3;
18
+ const RESIZE_KEYBOARD_STEP = 10;
19
+ const _sfc_main = /* @__PURE__ */ defineComponent({
20
+ __name: "NcReferenceWidget",
21
+ props: {
22
+ reference: {},
23
+ interactive: { type: Boolean, default: true },
24
+ interactiveOptIn: { type: Boolean, default: false }
25
+ },
26
+ setup(__props) {
27
+ const props = __props;
28
+ const router = inject(routerKey, null);
29
+ const widgetId = `nc-reference-widget-${createElementId()}`;
30
+ const isVisible = ref(false);
31
+ const customWidget = useTemplateRef("customWidget");
32
+ const customWidgetContent = useTemplateRef("customWidgetContent");
33
+ const widgetRoot = useTemplateRef("widgetRoot");
34
+ const { width } = useElementSize(widgetRoot);
35
+ const { height: customWidgetHeight } = useElementSize(customWidget);
36
+ useIntersectionObserver(widgetRoot, ([entry]) => {
37
+ nextTick(() => {
38
+ isVisible.value = entry.isIntersecting;
39
+ });
40
+ });
41
+ const showInteractive = ref(false);
42
+ const rendered = ref(false);
43
+ let idleTimeout = null;
44
+ const isResizing = ref(false);
45
+ const resizedHeight = ref(null);
46
+ const resizeStartY = ref(0);
47
+ const resizeStartHeight = ref(0);
48
+ const resizeMinHeight = ref(100);
49
+ const resizeMaxHeight = ref(window.innerHeight - 120);
50
+ const isInteractive = computed(() => {
51
+ return !props.interactiveOptIn && props.interactive || showInteractive.value;
52
+ });
53
+ const referenceHasFullWidth = computed(() => {
54
+ return hasFullWidth(props.reference.richObjectType);
55
+ });
56
+ const isWidgetResizable = computed(() => {
57
+ return isResizable(props.reference.richObjectType);
58
+ });
59
+ const hasCustomWidget = computed(() => {
60
+ return isWidgetRegistered(props.reference.richObjectType);
61
+ });
62
+ const customWidgetStyle = computed(() => {
63
+ if (!resizedHeight.value) {
64
+ return null;
65
+ }
66
+ return { height: `${resizedHeight.value}px !important` };
67
+ });
68
+ const ariaValueNow = computed(() => {
69
+ return Math.round(resizedHeight.value ?? customWidgetHeight.value);
70
+ });
71
+ const referenceHasInteractiveView = computed(() => {
72
+ return hasCustomWidget.value && hasInteractiveView(props.reference.richObjectType);
73
+ });
74
+ const noAccess = computed(() => {
75
+ return !props.reference.accessible;
76
+ });
77
+ const numberOfLines = computed(() => {
78
+ const lineCountOffsets = [450, 550, 650, Infinity];
79
+ return lineCountOffsets.findIndex((max) => width.value < max);
80
+ });
81
+ const descriptionStyle = computed(() => {
82
+ if (numberOfLines.value === 0) {
83
+ return {
84
+ display: "none"
85
+ };
86
+ }
87
+ const lineClamp = numberOfLines.value;
88
+ return {
89
+ lineClamp,
90
+ webkitLineClamp: lineClamp
91
+ };
92
+ });
93
+ const compactLink = computed(() => {
94
+ const link = props.reference.openGraphObject.link;
95
+ if (!link) {
96
+ return "";
97
+ }
98
+ if (link.startsWith("https://")) {
99
+ return link.substring(8);
100
+ }
101
+ if (link.startsWith("http://")) {
102
+ return link.substring(7);
103
+ }
104
+ return link;
105
+ });
106
+ const route = computed(() => {
107
+ return getRoute(router, props.reference.openGraphObject.link);
108
+ });
109
+ const referenceWidgetLinkComponent = computed(() => {
110
+ return route.value ? RouterLink : "a";
111
+ });
112
+ const referenceWidgetLinkProps = computed(() => {
113
+ return route.value ? { to: route.value } : { href: props.reference.openGraphObject.link, target: "_blank" };
114
+ });
115
+ watch(isVisible, (val) => {
116
+ if (!val) {
117
+ idleTimeout = setTimeout(() => {
118
+ if (!isVisible.value) {
119
+ destroyReferenceWidget();
120
+ }
121
+ }, IDLE_TIMEOUT);
122
+ return;
123
+ }
124
+ if (idleTimeout) {
125
+ clearTimeout(idleTimeout);
126
+ idleTimeout = null;
127
+ }
128
+ if (!rendered.value) {
129
+ renderReferenceWidget();
130
+ }
131
+ }, { immediate: true });
132
+ onBeforeUnmount(() => {
133
+ if (idleTimeout) {
134
+ clearTimeout(idleTimeout);
135
+ idleTimeout = null;
136
+ }
137
+ stopResize();
138
+ destroyReferenceWidget();
139
+ });
140
+ function enableInteractive() {
141
+ showInteractive.value = true;
142
+ renderReferenceWidget();
143
+ }
144
+ function renderReferenceWidget() {
145
+ if (!customWidgetContent.value) {
146
+ return;
147
+ }
148
+ if (props.reference.richObjectType === "open-graph") {
149
+ return;
150
+ }
151
+ customWidgetContent.value.innerHTML = "";
152
+ const widget = document.createElement("div");
153
+ widget.style.width = "100%";
154
+ customWidgetContent.value.appendChild(widget);
155
+ nextTick(() => {
156
+ renderWidget(widget, {
157
+ ...props.reference,
158
+ interactive: isInteractive.value
159
+ });
160
+ rendered.value = true;
161
+ });
162
+ }
163
+ function destroyReferenceWidget() {
164
+ if (rendered.value && widgetRoot.value) {
165
+ destroyWidget(props.reference.richObjectType, widgetRoot.value);
166
+ rendered.value = false;
167
+ }
168
+ }
169
+ function initResizeLimits() {
170
+ const widgetEl = customWidgetContent.value?.firstElementChild;
171
+ if (widgetEl) {
172
+ const computedStyle = window.getComputedStyle(widgetEl);
173
+ const parsedMin = parseFloat(computedStyle.minHeight);
174
+ const parsedMax = parseFloat(computedStyle.maxHeight);
175
+ resizeMinHeight.value = parsedMin > 0 ? parsedMin : 100;
176
+ resizeMaxHeight.value = Number.isFinite(parsedMax) && parsedMax > 0 ? parsedMax : window.innerHeight - 120;
177
+ } else {
178
+ resizeMinHeight.value = 100;
179
+ resizeMaxHeight.value = window.innerHeight - 120;
180
+ }
181
+ }
182
+ function startResize(event) {
183
+ if (!isWidgetResizable.value || !customWidget.value) {
184
+ return;
185
+ }
186
+ initResizeLimits();
187
+ isResizing.value = true;
188
+ resizeStartY.value = event.clientY;
189
+ resizeStartHeight.value = customWidget.value.getBoundingClientRect().height;
190
+ window.addEventListener("pointermove", onResize);
191
+ window.addEventListener("pointerup", stopResize);
192
+ }
193
+ function onResizeKeydown(delta) {
194
+ if (!isWidgetResizable.value || !customWidget.value) {
195
+ return;
196
+ }
197
+ initResizeLimits();
198
+ const currentHeight = resizedHeight.value ?? resizeStartHeight.value;
199
+ const next = currentHeight + delta;
200
+ resizedHeight.value = Math.min(resizeMaxHeight.value, Math.max(resizeMinHeight.value, next));
201
+ }
202
+ function onResize(event) {
203
+ if (!isResizing.value || !customWidget.value) {
204
+ return;
205
+ }
206
+ const deltaY = event.clientY - resizeStartY.value;
207
+ resizedHeight.value = Math.min(resizeMaxHeight.value, Math.max(resizeMinHeight.value, resizeStartHeight.value + deltaY));
208
+ }
209
+ function stopResize() {
210
+ if (!isResizing.value) {
211
+ return;
212
+ }
213
+ isResizing.value = false;
214
+ window.removeEventListener("pointermove", onResize);
215
+ window.removeEventListener("pointerup", stopResize);
216
+ }
217
+ return (_ctx, _cache) => {
218
+ return openBlock(), createElementBlock("div", {
219
+ ref_key: "widgetRoot",
220
+ ref: widgetRoot,
221
+ class: normalizeClass({ "toggle-interactive": referenceHasInteractiveView.value && !isInteractive.value })
222
+ }, [
223
+ __props.reference && hasCustomWidget.value ? (openBlock(), createElementBlock("div", {
224
+ key: 0,
225
+ id: widgetId,
226
+ ref_key: "customWidget",
227
+ ref: customWidget,
228
+ class: normalizeClass(["widget-custom", { "full-width": referenceHasFullWidth.value }]),
229
+ style: normalizeStyle(customWidgetStyle.value)
230
+ }, [
231
+ createElementVNode("div", {
232
+ ref_key: "customWidgetContent",
233
+ ref: customWidgetContent,
234
+ class: "widget-custom__content"
235
+ }, null, 512),
236
+ isWidgetResizable.value ? (openBlock(), createElementBlock("div", {
237
+ key: 0,
238
+ class: "widget-custom__resize-handle",
239
+ role: "slider",
240
+ tabindex: "0",
241
+ "aria-orientation": "vertical",
242
+ "aria-label": unref(t)("Widget height"),
243
+ "aria-valuenow": ariaValueNow.value,
244
+ "aria-valuemin": resizeMinHeight.value,
245
+ "aria-valuemax": resizeMaxHeight.value,
246
+ "aria-controls": widgetId,
247
+ onPointerdown: withModifiers(startResize, ["stop", "prevent"]),
248
+ onKeydown: [
249
+ _cache[0] || (_cache[0] = withKeys(withModifiers(($event) => onResizeKeydown(-RESIZE_KEYBOARD_STEP), ["stop", "prevent"]), ["up"])),
250
+ _cache[1] || (_cache[1] = withKeys(withModifiers(($event) => onResizeKeydown(RESIZE_KEYBOARD_STEP), ["stop", "prevent"]), ["down"]))
251
+ ]
252
+ }, null, 40, _hoisted_1)) : createCommentVNode("", true)
253
+ ], 6)) : !noAccess.value && __props.reference && __props.reference.openGraphObject && !hasCustomWidget.value ? (openBlock(), createBlock(resolveDynamicComponent(referenceWidgetLinkComponent.value), mergeProps({ key: 1 }, referenceWidgetLinkProps.value, {
254
+ rel: "noopener noreferrer",
255
+ class: "widget-default"
256
+ }), {
257
+ default: withCtx(() => [
258
+ __props.reference.openGraphObject.thumb ? (openBlock(), createElementBlock("img", {
259
+ key: 0,
260
+ class: "widget-default--image",
261
+ src: __props.reference.openGraphObject.thumb
262
+ }, null, 8, _hoisted_2)) : createCommentVNode("", true),
263
+ createElementVNode("div", _hoisted_3, [
264
+ createElementVNode("p", _hoisted_4, toDisplayString(__props.reference.openGraphObject.name), 1),
265
+ createElementVNode("p", {
266
+ class: "widget-default--description",
267
+ style: normalizeStyle(descriptionStyle.value)
268
+ }, toDisplayString(__props.reference.openGraphObject.description), 5),
269
+ createElementVNode("p", _hoisted_5, toDisplayString(compactLink.value), 1)
270
+ ])
271
+ ]),
272
+ _: 1
273
+ }, 16)) : createCommentVNode("", true),
274
+ __props.interactiveOptIn && referenceHasInteractiveView.value && !isInteractive.value ? (openBlock(), createBlock(NcButton, {
275
+ key: 2,
276
+ class: "toggle-interactive--button",
277
+ onClick: enableInteractive
278
+ }, {
279
+ default: withCtx(() => [
280
+ createTextVNode(toDisplayString(unref(t)("Enable interactive view")), 1)
281
+ ]),
282
+ _: 1
283
+ })) : createCommentVNode("", true)
284
+ ], 2);
285
+ };
286
+ }
287
+ });
288
+ const NcReferenceWidget = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4b144346"]]);
289
+ export {
290
+ NcReferenceWidget as N
291
+ };
292
+ //# sourceMappingURL=NcReferenceWidget.mjs.map