@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.
- package/CHANGELOG.md +88 -65
- package/dist/assets/{NcActionButton-DLer-aUY.css → NcActionButton.css} +1 -0
- package/dist/assets/{NcActionCheckbox-wD8m_a8-.css → NcActionCheckbox.css} +1 -0
- package/dist/assets/{NcActionInput-t9WvlgV0.css → NcActionInput.css} +70 -66
- package/dist/assets/{NcActionLink-b4Ph5q10.css → NcActionLink.css} +1 -0
- package/dist/assets/{NcActionRadio-D2rLM1ci.css → NcActionRadio.css} +1 -0
- package/dist/assets/{NcActionRouter-BWXfCfxM.css → NcActionRouter.css} +1 -0
- package/dist/assets/{NcActionText-Dzegj6AY.css → NcActionText.css} +1 -0
- package/dist/assets/{NcActionTextEditable-BlZeHZ7J.css → NcActionTextEditable.css} +67 -65
- package/dist/assets/{NcActions-y7ehwPSp.css → NcActions.css} +12 -12
- package/dist/assets/{NcAppNavigation-OHw55TTZ.css → NcAppNavigation.css} +17 -17
- package/dist/assets/{NcAppNavigationItem-BZ1xj6Xi.css → NcAppNavigationItem.css} +58 -48
- package/dist/assets/NcAppNavigationList.css +52 -0
- package/dist/assets/{NcAppNavigationNewItem-MaYQVcKF.css → NcAppNavigationNewItem.css} +13 -3
- package/dist/assets/{NcAppNavigationSettings-mWFhcXm0.css → NcAppNavigationSettings.css} +6 -6
- package/dist/assets/{NcAppSettingsDialog-Dh_scIK4.css → NcAppSettingsDialog.css} +3 -3
- package/dist/assets/{NcAppSettingsShortcutsSection-BHxkQTg2.css → NcAppSettingsShortcutsSection.css} +1 -1
- package/dist/assets/{NcAppSidebar-oJQ8kUb0.css → NcAppSidebar.css} +132 -78
- package/dist/assets/{NcAppSidebarTab-Xd3HTDbw.css → NcAppSidebarTab.css} +4 -4
- package/dist/assets/{NcAssistantButton-CT25wqIs.css → NcAssistantButton.css} +9 -9
- package/dist/assets/{NcAssistantContent-FV00e96S.css → NcAssistantContent.css} +3 -3
- package/dist/assets/{NcAssistantIcon-BMLpMaMJ.css → NcAssistantIcon.css} +4 -4
- package/dist/assets/{NcAvatar-Bs7qEhkA.css → NcAvatar.css} +39 -24
- package/dist/assets/{NcBlurHash-RgrahjEp.css → NcBlurHash.css} +2 -2
- package/dist/assets/{NcButton-DOrlC_y5.css → NcButton.css} +52 -50
- package/dist/assets/{NcCheckboxRadioSwitch-BlQSZVW0.css → NcCheckboxRadioSwitch.css} +36 -36
- package/dist/assets/{NcDateTimePicker-BQ_y9Ihj.css → NcDateTimePicker.css} +234 -234
- package/dist/assets/NcDateTimePickerNative.css +38 -0
- package/dist/assets/{NcEllipsisedOption-CPWbbgBy.css → NcEllipsisedOption.css} +10 -5
- package/dist/assets/{NcFilePicker-BdjtiV3h.css → NcFilePicker.css} +1 -1
- package/dist/assets/{NcFormBox-TRgICDO3.css → NcFormBox.css} +11 -11
- package/dist/assets/{NcFormBoxButton-ClkxmO-H.css → NcFormBoxButton.css} +2 -2
- package/dist/assets/{NcFormBoxItem-CABDVZLe.css → NcFormBoxItem.css} +19 -15
- package/dist/assets/{NcFormBoxSwitch-NCjook_Z.css → NcFormBoxSwitch.css} +2 -2
- package/dist/assets/{NcFormGroup-eh8-PBGB.css → NcFormGroup.css} +7 -7
- package/dist/assets/{NcHeaderMenu-Hy0UKyUu.css → NcHeaderMenu.css} +22 -24
- package/dist/assets/{NcHotkey-Dm-26TVC.css → NcHotkey.css} +8 -8
- package/dist/assets/{NcHotkeyList-BigfRqyr.css → NcHotkeyList.css} +2 -2
- package/dist/assets/{NcIconToggleSwitch-zUXkaJHv.css → NcIconToggleSwitch.css} +4 -4
- package/dist/assets/{NcInputField-DpyFJ1xw.css → NcInputField.css} +43 -43
- package/dist/assets/{NcKbd-DcC56WbC.css → NcKbd.css} +3 -3
- package/dist/assets/NcPopover.css +108 -0
- package/dist/assets/NcProfileHoverCard.css +340 -0
- package/dist/assets/{NcProgressBar-B6wveIA1.css → NcProgressBar.css} +14 -14
- package/dist/assets/{NcRadioGroup-CtXZ4Y8D.css → NcRadioGroup.css} +2 -2
- package/dist/assets/{NcRadioGroupButton-BuB-aWeJ.css → NcRadioGroupButton.css} +19 -14
- package/dist/assets/NcReferenceWidget.css +150 -0
- package/dist/assets/{NcRichContenteditable-BCUBhRqg.css → NcRichContenteditable.css} +17 -17
- package/dist/assets/NcSelect.css +397 -0
- package/dist/assets/NcSelectUsers.css +12 -0
- package/dist/assets/{autolink-XS-VDSVB.css → autolink.css} +3 -3
- package/dist/assets/{referencePickerModal-BNPfxyni.css → referencePickerModal.css} +0 -149
- package/dist/chunks/{ArrowRight-B1ncAhus.mjs → ArrowRight.mjs} +2 -2
- package/dist/chunks/ArrowRight.mjs.map +1 -0
- package/dist/chunks/{ChevronDown-C6gc637b.mjs → ChevronDown.mjs} +2 -2
- package/dist/chunks/ChevronDown.mjs.map +1 -0
- package/dist/chunks/{ChevronUp-ChH8oB7p.mjs → ChevronUp.mjs} +2 -2
- package/dist/chunks/ChevronUp.mjs.map +1 -0
- package/dist/chunks/{Close-CuhcJnX2.mjs → Close.mjs} +2 -2
- package/dist/chunks/Close.mjs.map +1 -0
- package/dist/chunks/{NcActionButton-BO5T5ePT.mjs → NcActionButton.mjs} +7 -7
- package/dist/chunks/NcActionButton.mjs.map +1 -0
- package/dist/chunks/{NcActionButtonGroup-Dd03Oluy.mjs → NcActionButtonGroup.mjs} +6 -6
- package/dist/chunks/NcActionButtonGroup.mjs.map +1 -0
- package/dist/chunks/{NcActionCaption-f7L9gBlT.mjs → NcActionCaption.mjs} +4 -4
- package/dist/chunks/NcActionCaption.mjs.map +1 -0
- package/dist/chunks/{NcActionCheckbox-DBqiK-AZ.mjs → NcActionCheckbox.mjs} +8 -8
- package/dist/chunks/NcActionCheckbox.mjs.map +1 -0
- package/dist/chunks/{NcActionInput-Dr8Yrafu.mjs → NcActionInput.mjs} +14 -13
- package/dist/chunks/NcActionInput.mjs.map +1 -0
- package/dist/chunks/{NcActionLink-BFiaYt9A.mjs → NcActionLink.mjs} +5 -5
- package/dist/chunks/NcActionLink.mjs.map +1 -0
- package/dist/chunks/{NcActionRadio-BA08CAtA.mjs → NcActionRadio.mjs} +8 -8
- package/dist/chunks/NcActionRadio.mjs.map +1 -0
- package/dist/chunks/{NcActionRouter-vYFtIOzD.mjs → NcActionRouter.mjs} +5 -5
- package/dist/chunks/NcActionRouter.mjs.map +1 -0
- package/dist/chunks/{NcActionSeparator-B9pNQaji.mjs → NcActionSeparator.mjs} +3 -3
- package/dist/chunks/NcActionSeparator.mjs.map +1 -0
- package/dist/chunks/{NcActionText-CQ9qwJ0p.mjs → NcActionText.mjs} +5 -5
- package/dist/chunks/NcActionText.mjs.map +1 -0
- package/dist/chunks/{NcActionTextEditable-B8y_GEre.mjs → NcActionTextEditable.mjs} +8 -8
- package/dist/chunks/NcActionTextEditable.mjs.map +1 -0
- package/dist/chunks/{NcActions-C-wDqSrv.mjs → NcActions.mjs} +12 -12
- package/dist/chunks/NcActions.mjs.map +1 -0
- package/dist/chunks/{NcAppContent-DavgjaFX.mjs → NcAppContent.mjs} +11 -11
- package/dist/chunks/NcAppContent.mjs.map +1 -0
- package/dist/chunks/{NcAppContentDetails.vue_vue_type_script_setup_true_lang-BWl5Pw5g.mjs → NcAppContentDetails.vue_vue_type_script_setup_true_lang.mjs} +1 -1
- package/dist/chunks/NcAppContentDetails.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
- package/dist/chunks/{NcAppContentList-Copx3Ver.mjs → NcAppContentList.mjs} +2 -2
- package/dist/chunks/NcAppContentList.mjs.map +1 -0
- package/dist/chunks/{NcAppNavigation-g57j16pB.mjs → NcAppNavigation.mjs} +17 -16
- package/dist/chunks/NcAppNavigation.mjs.map +1 -0
- package/dist/chunks/{NcAppNavigationCaption-VjSWJ8R4.mjs → NcAppNavigationCaption.mjs} +4 -4
- package/dist/chunks/NcAppNavigationCaption.mjs.map +1 -0
- package/dist/chunks/{NcAppNavigationIconBullet-BmU-dPcY.mjs → NcAppNavigationIconBullet.mjs} +3 -3
- package/dist/chunks/NcAppNavigationIconBullet.mjs.map +1 -0
- package/dist/chunks/{NcAppNavigationItem-CDeYtA3E.mjs → NcAppNavigationItem.mjs} +53 -24
- package/dist/chunks/NcAppNavigationItem.mjs.map +1 -0
- package/dist/chunks/NcAppNavigationList.mjs +147 -0
- package/dist/chunks/NcAppNavigationList.mjs.map +1 -0
- package/dist/chunks/{NcAppNavigationNew-CBNppM7Q.mjs → NcAppNavigationNew.mjs} +4 -4
- package/dist/chunks/NcAppNavigationNew.mjs.map +1 -0
- package/dist/chunks/{NcAppNavigationNewItem-B1RfQkvu.mjs → NcAppNavigationNewItem.mjs} +5 -5
- package/dist/chunks/NcAppNavigationNewItem.mjs.map +1 -0
- package/dist/chunks/{NcAppNavigationSearch-CQQWb1Eq.mjs → NcAppNavigationSearch.mjs} +7 -7
- package/dist/chunks/NcAppNavigationSearch.mjs.map +1 -0
- package/dist/chunks/{NcAppNavigationSettings-DoMjRExO.mjs → NcAppNavigationSettings.mjs} +16 -16
- package/dist/chunks/NcAppNavigationSettings.mjs.map +1 -0
- package/dist/chunks/{NcAppNavigationSpacer-CIRC4ZEj.mjs → NcAppNavigationSpacer.mjs} +3 -3
- package/dist/chunks/NcAppNavigationSpacer.mjs.map +1 -0
- package/dist/chunks/{NcAppSettingsDialog-BPcEYLjP.mjs → NcAppSettingsDialog.mjs} +13 -13
- package/dist/chunks/NcAppSettingsDialog.mjs.map +1 -0
- package/dist/chunks/{NcAppSettingsSection-BosSmisT.mjs → NcAppSettingsSection.mjs} +5 -5
- package/dist/chunks/NcAppSettingsSection.mjs.map +1 -0
- package/dist/chunks/{NcAppSettingsShortcutsSection-DLwubKV9.mjs → NcAppSettingsShortcutsSection.mjs} +7 -7
- package/dist/chunks/NcAppSettingsShortcutsSection.mjs.map +1 -0
- package/dist/chunks/{NcAppSidebar-C8YzAzrZ.mjs → NcAppSidebar.mjs} +180 -46
- package/dist/chunks/NcAppSidebar.mjs.map +1 -0
- 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
- package/dist/chunks/NcAppSidebarHeader.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
- package/dist/chunks/{NcAppSidebarTab-DOSDDbGA.mjs → NcAppSidebarTab.mjs} +15 -8
- package/dist/chunks/NcAppSidebarTab.mjs.map +1 -0
- package/dist/chunks/{NcAssistantButton-iK491d2v.mjs → NcAssistantButton.mjs} +14 -14
- package/dist/chunks/NcAssistantButton.mjs.map +1 -0
- package/dist/chunks/{NcAssistantContent-iHA4O4cC.mjs → NcAssistantContent.mjs} +6 -6
- package/dist/chunks/NcAssistantContent.mjs.map +1 -0
- package/dist/chunks/{NcAssistantIcon-C6s4Qm7-.mjs → NcAssistantIcon.mjs} +9 -9
- package/dist/chunks/NcAssistantIcon.mjs.map +1 -0
- package/dist/chunks/{NcAvatar-1KxMUN7V.mjs → NcAvatar.mjs} +214 -80
- package/dist/chunks/NcAvatar.mjs.map +1 -0
- package/dist/chunks/{NcBlurHash-B30Ol8KP.mjs → NcBlurHash.mjs} +6 -6
- package/dist/chunks/NcBlurHash.mjs.map +1 -0
- package/dist/chunks/{NcBreadcrumb-3Y5NWXnV.mjs → NcBreadcrumb.mjs} +6 -6
- package/dist/chunks/NcBreadcrumb.mjs.map +1 -0
- package/dist/chunks/{NcBreadcrumbs-BaTp3Sya.mjs → NcBreadcrumbs.mjs} +8 -8
- package/dist/chunks/NcBreadcrumbs.mjs.map +1 -0
- package/dist/chunks/{NcButton-jvoYS2my.mjs → NcButton.mjs} +6 -6
- package/dist/chunks/NcButton.mjs.map +1 -0
- package/dist/chunks/{NcCheckboxRadioSwitch-DVdt5Hkq.mjs → NcCheckboxRadioSwitch.mjs} +22 -12
- package/dist/chunks/NcCheckboxRadioSwitch.mjs.map +1 -0
- package/dist/chunks/{NcChip-DKRlV47q.mjs → NcChip.mjs} +9 -9
- package/dist/chunks/NcChip.mjs.map +1 -0
- package/dist/chunks/{NcCollectionList-B9qCtjJw.mjs → NcCollectionList.mjs} +12 -12
- package/dist/chunks/NcCollectionList.mjs.map +1 -0
- package/dist/chunks/{NcColorPicker-BCkasLwT.mjs → NcColorPicker.mjs} +12 -12
- package/dist/chunks/NcColorPicker.mjs.map +1 -0
- package/dist/chunks/{NcContent-BYh5hWDN.mjs → NcContent.mjs} +9 -9
- package/dist/chunks/NcContent.mjs.map +1 -0
- package/dist/chunks/{NcCounterBubble-CV0YMrXW.mjs → NcCounterBubble.mjs} +3 -3
- package/dist/chunks/NcCounterBubble.mjs.map +1 -0
- package/dist/chunks/{NcDashboardWidget-zmbDEGL-.mjs → NcDashboardWidget.mjs} +8 -8
- package/dist/chunks/NcDashboardWidget.mjs.map +1 -0
- package/dist/chunks/{NcDashboardWidgetItem-DwDndrm_.mjs → NcDashboardWidgetItem.mjs} +6 -6
- package/dist/chunks/NcDashboardWidgetItem.mjs.map +1 -0
- package/dist/chunks/{NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7.mjs → NcDateTime.vue_vue_type_script_setup_true_lang.mjs} +1 -1
- package/dist/chunks/NcDateTime.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
- package/dist/chunks/NcDateTimePicker.mjs +2979 -0
- package/dist/chunks/NcDateTimePicker.mjs.map +1 -0
- package/dist/chunks/{NcDateTimePickerNative-B8CMOUnH.mjs → NcDateTimePickerNative.mjs} +21 -26
- package/dist/chunks/NcDateTimePickerNative.mjs.map +1 -0
- package/dist/chunks/{NcDialog-D617YI0t.mjs → NcDialog.mjs} +6 -6
- package/dist/chunks/NcDialog.mjs.map +1 -0
- package/dist/chunks/{NcDialogButton.vue_vue_type_script_setup_true_lang-Bqfy678u.mjs → NcDialogButton.vue_vue_type_script_setup_true_lang.mjs} +6 -6
- package/dist/chunks/NcDialogButton.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
- package/dist/chunks/{NcEllipsisedOption-D6Amb91K.mjs → NcEllipsisedOption.mjs} +5 -5
- package/dist/chunks/NcEllipsisedOption.mjs.map +1 -0
- package/dist/chunks/{NcEmojiPicker-UTxgju3f.mjs → NcEmojiPicker.mjs} +12 -12
- package/dist/chunks/NcEmojiPicker.mjs.map +1 -0
- package/dist/chunks/{NcEmptyContent-CGAPqk4S.mjs → NcEmptyContent.mjs} +4 -4
- package/dist/chunks/NcEmptyContent.mjs.map +1 -0
- package/dist/chunks/{NcFilePicker-bD2toutn.mjs → NcFilePicker.mjs} +9 -9
- package/dist/chunks/NcFilePicker.mjs.map +1 -0
- package/dist/chunks/{NcFormBox-Bmqar8nn.mjs → NcFormBox.mjs} +9 -9
- package/dist/chunks/NcFormBox.mjs.map +1 -0
- package/dist/chunks/{NcFormBoxButton-G_PkUiQy.mjs → NcFormBoxButton.mjs} +8 -8
- package/dist/chunks/NcFormBoxButton.mjs.map +1 -0
- 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
- package/dist/chunks/NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
- package/dist/chunks/{NcFormBoxItem-Cm8aZaVJ.mjs → NcFormBoxItem.mjs} +14 -14
- package/dist/chunks/NcFormBoxItem.mjs.map +1 -0
- package/dist/chunks/{NcFormBoxSwitch-DSXiQcnq.mjs → NcFormBoxSwitch.mjs} +8 -8
- package/dist/chunks/NcFormBoxSwitch.mjs.map +1 -0
- package/dist/chunks/{NcFormGroup-N7qIFAwN.mjs → NcFormGroup.mjs} +11 -11
- package/dist/chunks/NcFormGroup.mjs.map +1 -0
- package/dist/chunks/{NcGuestContent-CvT6VGt1.mjs → NcGuestContent.mjs} +3 -3
- package/dist/chunks/NcGuestContent.mjs.map +1 -0
- package/dist/chunks/{NcHeaderButton-BnLwYCog.mjs → NcHeaderButton.mjs} +5 -5
- package/dist/chunks/NcHeaderButton.mjs.map +1 -0
- package/dist/chunks/{NcHeaderMenu-ktQJV2SW.mjs → NcHeaderMenu.mjs} +14 -20
- package/dist/chunks/NcHeaderMenu.mjs.map +1 -0
- package/dist/chunks/{NcHighlight.vue_vue_type_script_lang-DnWQDM_2.mjs → NcHighlight.vue_vue_type_script_lang.mjs} +1 -1
- package/dist/chunks/NcHighlight.vue_vue_type_script_lang.mjs.map +1 -0
- package/dist/chunks/{NcHotkey-BDGeF3eH.mjs → NcHotkey.mjs} +8 -8
- package/dist/chunks/NcHotkey.mjs.map +1 -0
- package/dist/chunks/{NcHotkeyList-B4WjTLAp.mjs → NcHotkeyList.mjs} +8 -8
- package/dist/chunks/NcHotkeyList.mjs.map +1 -0
- package/dist/chunks/{NcIconSvgWrapper-g8ubWhoz.mjs → NcIconSvgWrapper.mjs} +3 -3
- package/dist/chunks/NcIconSvgWrapper.mjs.map +1 -0
- package/dist/chunks/{NcIconToggleSwitch-CRvGt4su.mjs → NcIconToggleSwitch.mjs} +6 -6
- package/dist/chunks/NcIconToggleSwitch.mjs.map +1 -0
- package/dist/chunks/{NcInputConfirmCancel-CGTllrXj.mjs → NcInputConfirmCancel.mjs} +9 -9
- package/dist/chunks/NcInputConfirmCancel.mjs.map +1 -0
- package/dist/chunks/{NcInputField-5Sg6EUP6.mjs → NcInputField.mjs} +9 -9
- package/dist/chunks/NcInputField.mjs.map +1 -0
- package/dist/chunks/{NcKbd-Bh_Tk6Ar.mjs → NcKbd.mjs} +8 -8
- package/dist/chunks/NcKbd.mjs.map +1 -0
- package/dist/chunks/{NcListItem-BliLJpvU.mjs → NcListItem.mjs} +7 -7
- package/dist/chunks/NcListItem.mjs.map +1 -0
- package/dist/chunks/{NcListItemIcon-Dl_tfkk9.mjs → NcListItemIcon.mjs} +7 -7
- package/dist/chunks/NcListItemIcon.mjs.map +1 -0
- package/dist/chunks/{NcLoadingIcon-BOVpFVQz.mjs → NcLoadingIcon.mjs} +3 -3
- package/dist/chunks/NcLoadingIcon.mjs.map +1 -0
- 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
- package/dist/chunks/NcMentionBubble.vue_vue_type_style_index_0_scoped_3c4a673d_lang.mjs.map +1 -0
- package/dist/chunks/{NcModal-DiDvgcU8.mjs → NcModal.mjs} +12 -12
- package/dist/chunks/NcModal.mjs.map +1 -0
- package/dist/chunks/{NcNoteCard-mI7qVZ9j.mjs → NcNoteCard.mjs} +6 -6
- package/dist/chunks/NcNoteCard.mjs.map +1 -0
- package/dist/chunks/{NcPasswordField-BFyzHTOO.mjs → NcPasswordField.mjs} +9 -9
- package/dist/chunks/NcPasswordField.mjs.map +1 -0
- package/dist/chunks/{NcPopover-B87bEPLq.mjs → NcPopover.mjs} +9 -10
- package/dist/chunks/NcPopover.mjs.map +1 -0
- package/dist/chunks/NcProfileHoverCard.mjs +777 -0
- package/dist/chunks/NcProfileHoverCard.mjs.map +1 -0
- package/dist/chunks/{NcProgressBar-C-ane-Ni.mjs → NcProgressBar.mjs} +20 -10
- package/dist/chunks/NcProgressBar.mjs.map +1 -0
- package/dist/chunks/{NcRadioGroup-B4qmS2UD.mjs → NcRadioGroup.mjs} +8 -8
- package/dist/chunks/NcRadioGroup.mjs.map +1 -0
- package/dist/chunks/{NcRadioGroupButton-CZykGwv3.mjs → NcRadioGroupButton.mjs} +12 -12
- package/dist/chunks/NcRadioGroupButton.mjs.map +1 -0
- package/dist/chunks/NcReferenceWidget.mjs +292 -0
- package/dist/chunks/NcReferenceWidget.mjs.map +1 -0
- package/dist/chunks/{NcRelatedResourcesPanel-D_Ttpg5_.mjs → NcRelatedResourcesPanel.mjs} +13 -13
- package/dist/chunks/NcRelatedResourcesPanel.mjs.map +1 -0
- package/dist/chunks/{NcRichContenteditable-Qw614bJ5.mjs → NcRichContenteditable.mjs} +37 -35
- package/dist/chunks/NcRichContenteditable.mjs.map +1 -0
- package/dist/chunks/{NcRichText-BO_4KtBA.mjs → NcRichText.mjs} +12 -12
- package/dist/chunks/NcRichText.mjs.map +1 -0
- package/dist/chunks/{NcSavingIndicatorIcon.vue_vue_type_script_setup_true_lang-DbQnMYZm.mjs → NcSavingIndicatorIcon.vue_vue_type_script_setup_true_lang.mjs} +1 -1
- package/dist/chunks/NcSavingIndicatorIcon.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
- package/dist/chunks/{NcSelect--kERLlBK.mjs → NcSelect.mjs} +124 -29
- package/dist/chunks/NcSelect.mjs.map +1 -0
- package/dist/chunks/{NcSelectTags-I2hJaNax.mjs → NcSelectTags.mjs} +6 -6
- package/dist/chunks/NcSelectTags.mjs.map +1 -0
- package/dist/chunks/{NcSelectUsers-K14Bepkq.mjs → NcSelectUsers.mjs} +6 -6
- package/dist/chunks/NcSelectUsers.mjs.map +1 -0
- package/dist/chunks/{NcSettingsSection-Caz1fuWt.mjs → NcSettingsSection.mjs} +5 -5
- package/dist/chunks/NcSettingsSection.mjs.map +1 -0
- package/dist/chunks/{NcSettingsSelectGroup-SYJ8-XlR.mjs → NcSettingsSelectGroup.mjs} +7 -7
- package/dist/chunks/NcSettingsSelectGroup.mjs.map +1 -0
- package/dist/chunks/{NcTextArea-Dxzj4zdb.mjs → NcTextArea.mjs} +8 -8
- package/dist/chunks/NcTextArea.mjs.map +1 -0
- package/dist/chunks/{NcTextField.vue_vue_type_script_setup_true_lang-Bx2esFU2.mjs → NcTextField.vue_vue_type_script_setup_true_lang.mjs} +7 -7
- package/dist/chunks/NcTextField.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
- package/dist/chunks/{NcThemeProvider.vue_vue_type_script_setup_true_lang-wie70gn4.mjs → NcThemeProvider.vue_vue_type_script_setup_true_lang.mjs} +2 -2
- package/dist/chunks/NcThemeProvider.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
- package/dist/chunks/{NcTimezonePicker.vue_vue_type_script_setup_true_lang-D7ZHgnwW.mjs → NcTimezonePicker.vue_vue_type_script_setup_true_lang.mjs} +5 -5
- package/dist/chunks/NcTimezonePicker.vue_vue_type_script_setup_true_lang.mjs.map +1 -0
- package/dist/chunks/{NcUserBubble-BXR7vT0V.mjs → NcUserBubble.mjs} +5 -5
- package/dist/chunks/NcUserBubble.mjs.map +1 -0
- package/dist/chunks/{NcUserStatusIcon-BF5OEQFU.mjs → NcUserStatusIcon.mjs} +7 -7
- package/dist/chunks/NcUserStatusIcon.mjs.map +1 -0
- package/dist/chunks/{NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs → NcVNodes.vue_vue_type_script_lang.mjs} +1 -1
- package/dist/chunks/NcVNodes.vue_vue_type_script_lang.mjs.map +1 -0
- package/dist/chunks/{_l10n-wdIzZwir.mjs → _l10n.mjs} +106 -104
- package/dist/chunks/_l10n.mjs.map +1 -0
- package/dist/chunks/{_plugin-vue_export-helper-1tPrXgE0.mjs → _plugin-vue_export-helper.mjs} +1 -1
- package/dist/chunks/_plugin-vue_export-helper.mjs.map +1 -0
- package/dist/chunks/{actionGlobal-BZFdtdJL.mjs → actionGlobal.mjs} +1 -1
- package/dist/chunks/actionGlobal.mjs.map +1 -0
- package/dist/chunks/{actionText-BXR0sWNu.mjs → actionText.mjs} +3 -3
- package/dist/chunks/actionText.mjs.map +1 -0
- package/dist/chunks/{appName-DyNMVZpX.mjs → appName.mjs} +2 -2
- package/dist/chunks/appName.mjs.map +1 -0
- package/dist/chunks/{autolink-DrIurosL.mjs → autolink.mjs} +7 -7
- package/dist/chunks/autolink.mjs.map +1 -0
- package/dist/chunks/{colors-Cv9F-jWS.mjs → colors.mjs} +3 -3
- package/dist/chunks/colors.mjs.map +1 -0
- package/dist/chunks/{constants-wIEKSp2G.mjs → constants.mjs} +1 -1
- package/dist/chunks/constants.mjs.map +1 -0
- package/dist/chunks/{constants-Ciwvl5xb.mjs → constants2.mjs} +1 -1
- package/dist/chunks/constants2.mjs.map +1 -0
- package/dist/chunks/{createElementId-DhjFt1I9.mjs → createElementId.mjs} +1 -1
- package/dist/chunks/createElementId.mjs.map +1 -0
- package/dist/chunks/customPickerElements.mjs +61 -0
- package/dist/chunks/customPickerElements.mjs.map +1 -0
- package/dist/chunks/{emoji-C8k9NUlo.mjs → emoji.mjs} +1 -1
- package/dist/chunks/emoji.mjs.map +1 -0
- package/dist/chunks/{focusTrap-HJQ4pqHV.mjs → focusTrap.mjs} +1 -1
- package/dist/chunks/focusTrap.mjs.map +1 -0
- package/dist/chunks/highlight.mjs +5 -0
- package/dist/chunks/highlight.mjs.map +1 -0
- package/dist/chunks/{legacy-BoqDmOCa.mjs → legacy.mjs} +4 -2
- package/dist/chunks/legacy.mjs.map +1 -0
- package/dist/chunks/{logger-D3RVzcfQ.mjs → logger.mjs} +1 -1
- package/dist/chunks/logger.mjs.map +1 -0
- package/dist/chunks/{mdi-CpchYUUV.mjs → mdi.mjs} +12 -14
- package/dist/chunks/mdi.mjs.map +1 -0
- package/dist/chunks/{platform-CC2ecGvV.mjs → platform.mjs} +1 -1
- package/dist/chunks/platform.mjs.map +1 -0
- package/dist/chunks/{referencePickerModal-CnKdEDwu.mjs → referencePickerModal.mjs} +60 -342
- package/dist/chunks/referencePickerModal.mjs.map +1 -0
- package/dist/chunks/{rtl-v0UOPAM7.mjs → rtl.mjs} +1 -1
- package/dist/chunks/rtl.mjs.map +1 -0
- package/dist/chunks/{useAppSettingsDialog-C73Wx6iQ.mjs → useAppSettingsDialog.mjs} +1 -1
- package/dist/chunks/useAppSettingsDialog.mjs.map +1 -0
- package/dist/chunks/{useCopy-6F-qWHq0.mjs → useCopy.mjs} +4 -4
- package/dist/chunks/useCopy.mjs.map +1 -0
- package/dist/chunks/{useNcActions-BzPO2c4h.mjs → useNcActions.mjs} +1 -1
- package/dist/chunks/useNcActions.mjs.map +1 -0
- package/dist/chunks/{useNcFormBox-Djlh582y.mjs → useNcFormBox.mjs} +1 -1
- package/dist/chunks/useNcFormBox.mjs.map +1 -0
- package/dist/chunks/{useNcRadioGroup-D6llQmAl.mjs → useNcRadioGroup.mjs} +1 -1
- package/dist/chunks/useNcRadioGroup.mjs.map +1 -0
- package/dist/chunks/{useTrapStackControl-B6cEicto.mjs → useTrapStackControl.mjs} +2 -2
- package/dist/chunks/useTrapStackControl.mjs.map +1 -0
- package/dist/chunks/widgets.mjs +66 -0
- package/dist/chunks/widgets.mjs.map +1 -0
- package/dist/components/NcActionButton/index.mjs +1 -1
- package/dist/components/NcActionButtonGroup/index.mjs +1 -1
- package/dist/components/NcActionCaption/index.mjs +1 -1
- package/dist/components/NcActionCheckbox/index.mjs +1 -1
- package/dist/components/NcActionInput/NcActionInput.vue.d.ts +302 -103
- package/dist/components/NcActionInput/index.mjs +1 -1
- package/dist/components/NcActionLink/index.mjs +1 -1
- package/dist/components/NcActionRadio/index.mjs +1 -1
- package/dist/components/NcActionRouter/index.mjs +1 -1
- package/dist/components/NcActionSeparator/index.mjs +1 -1
- package/dist/components/NcActionText/index.mjs +1 -1
- package/dist/components/NcActionTextEditable/index.mjs +1 -1
- package/dist/components/NcActions/NcActions.vue.d.ts +3 -3
- package/dist/components/NcActions/index.mjs +1 -1
- package/dist/components/NcAppContent/index.mjs +1 -1
- package/dist/components/NcAppContentDetails/index.mjs +1 -1
- package/dist/components/NcAppContentList/index.mjs +1 -1
- package/dist/components/NcAppNavigation/index.mjs +1 -1
- package/dist/components/NcAppNavigationCaption/NcAppNavigationCaption.vue.d.ts +3 -3
- package/dist/components/NcAppNavigationCaption/index.mjs +1 -1
- package/dist/components/NcAppNavigationIconBullet/index.mjs +1 -1
- package/dist/components/NcAppNavigationItem/NcAppNavigationItem.vue.d.ts +10 -6
- package/dist/components/NcAppNavigationItem/NcInputConfirmCancel.vue.d.ts +1 -1
- package/dist/components/NcAppNavigationItem/index.mjs +1 -1
- package/dist/components/NcAppNavigationList/NcAppNavigationList.vue.d.ts +57 -1
- package/dist/components/NcAppNavigationList/highlight.d.ts +12 -0
- package/dist/components/NcAppNavigationList/index.mjs +1 -1
- package/dist/components/NcAppNavigationNew/index.mjs +1 -1
- package/dist/components/NcAppNavigationNewItem/NcAppNavigationNewItem.vue.d.ts +1 -1
- package/dist/components/NcAppNavigationNewItem/index.mjs +1 -1
- package/dist/components/NcAppNavigationSearch/NcAppNavigationSearch.vue.d.ts +16 -16
- package/dist/components/NcAppNavigationSearch/index.mjs +1 -1
- package/dist/components/NcAppNavigationSettings/index.mjs +1 -1
- package/dist/components/NcAppNavigationSpacer/index.mjs +1 -1
- package/dist/components/NcAppSettingsDialog/index.mjs +1 -1
- package/dist/components/NcAppSettingsSection/index.mjs +1 -1
- package/dist/components/NcAppSettingsSectionShortcuts/index.mjs +1 -1
- package/dist/components/NcAppSettingsShortcutsSection/index.mjs +1 -1
- package/dist/components/NcAppSidebar/NcAppSidebar.vue.d.ts +23 -4
- package/dist/components/NcAppSidebar/NcAppSidebarTabs.vue.d.ts +43 -0
- package/dist/components/NcAppSidebar/NcAppSidebarTabsButton.vue.d.ts +5 -0
- package/dist/components/NcAppSidebar/index.mjs +1 -1
- package/dist/components/NcAppSidebarHeader/index.mjs +1 -1
- package/dist/components/NcAppSidebarTab/NcAppSidebarTab.vue.d.ts +14 -4
- package/dist/components/NcAppSidebarTab/index.mjs +1 -1
- package/dist/components/NcAssistantButton/index.mjs +1 -1
- package/dist/components/NcAssistantContent/index.mjs +1 -1
- package/dist/components/NcAssistantIcon/index.mjs +1 -1
- package/dist/components/NcAvatar/NcAvatar.vue.d.ts +53 -138
- package/dist/components/NcAvatar/index.mjs +1 -1
- package/dist/components/NcBlurHash/index.mjs +1 -1
- package/dist/components/NcBreadcrumb/NcBreadcrumb.vue.d.ts +4 -4
- package/dist/components/NcBreadcrumb/index.mjs +1 -1
- package/dist/components/NcBreadcrumbs/NcBreadcrumbs.vue.d.ts +7 -7
- package/dist/components/NcBreadcrumbs/index.mjs +1 -1
- package/dist/components/NcButton/index.mjs +1 -1
- package/dist/components/NcCheckboxRadioSwitch/index.mjs +1 -1
- package/dist/components/NcChip/index.mjs +1 -1
- package/dist/components/NcCollectionList/NcCollectionList.vue.d.ts +272 -280
- package/dist/components/NcCollectionList/NcCollectionListItem.vue.d.ts +38 -140
- package/dist/components/NcCollectionList/index.mjs +1 -1
- package/dist/components/NcColorPicker/index.mjs +1 -1
- package/dist/components/NcContent/index.mjs +1 -1
- package/dist/components/NcCounterBubble/index.mjs +1 -1
- package/dist/components/NcDashboardWidget/NcDashboardWidget.vue.d.ts +73 -277
- package/dist/components/NcDashboardWidget/index.mjs +1 -1
- package/dist/components/NcDashboardWidgetItem/NcDashboardWidgetItem.vue.d.ts +38 -140
- package/dist/components/NcDashboardWidgetItem/index.mjs +1 -1
- package/dist/components/NcDateTime/index.mjs +1 -1
- package/dist/components/NcDateTimePicker/NcDateTimePicker.vue.d.ts +82 -80
- package/dist/components/NcDateTimePicker/dateFnsLocaleLoader.d.ts +3 -0
- package/dist/components/NcDateTimePicker/format.d.ts +35 -0
- package/dist/components/NcDateTimePicker/index.mjs +1 -1
- package/dist/components/NcDateTimePicker/useDateFnsLocale.d.ts +16 -0
- package/dist/components/NcDateTimePickerNative/index.mjs +1 -1
- package/dist/components/NcDialog/index.mjs +1 -1
- package/dist/components/NcDialogButton/index.mjs +1 -1
- package/dist/components/NcEllipsisedOption/index.mjs +1 -1
- package/dist/components/NcEmojiPicker/NcEmojiPicker.vue.d.ts +14 -11
- package/dist/components/NcEmojiPicker/index.mjs +1 -1
- package/dist/components/NcEmptyContent/index.mjs +1 -1
- package/dist/components/NcFilePicker/index.mjs +1 -1
- package/dist/components/NcFormBox/index.mjs +1 -1
- package/dist/components/NcFormBoxButton/index.mjs +1 -1
- package/dist/components/NcFormBoxCopyButton/index.mjs +1 -1
- package/dist/components/NcFormBoxSwitch/index.mjs +1 -1
- package/dist/components/NcFormGroup/index.mjs +1 -1
- package/dist/components/NcGuestContent/index.mjs +1 -1
- package/dist/components/NcHeaderButton/index.mjs +1 -1
- package/dist/components/NcHeaderMenu/index.mjs +1 -1
- package/dist/components/NcHighlight/index.mjs +1 -1
- package/dist/components/NcHotkey/index.mjs +1 -1
- package/dist/components/NcHotkeyList/index.mjs +1 -1
- package/dist/components/NcIconSvgWrapper/index.mjs +1 -1
- package/dist/components/NcInputField/NcInputField.vue.d.ts +8 -5
- package/dist/components/NcInputField/index.mjs +1 -1
- package/dist/components/NcKbd/index.mjs +1 -1
- package/dist/components/NcListItem/NcListItem.vue.d.ts +3 -3
- package/dist/components/NcListItem/index.mjs +1 -1
- package/dist/components/NcListItemIcon/NcListItemIcon.vue.d.ts +36 -138
- package/dist/components/NcListItemIcon/index.mjs +1 -1
- package/dist/components/NcLoadingIcon/index.mjs +1 -1
- package/dist/components/NcModal/index.mjs +1 -1
- package/dist/components/NcNoteCard/index.mjs +1 -1
- package/dist/components/NcPasswordField/NcPasswordField.vue.d.ts +16 -16
- package/dist/components/NcPasswordField/index.mjs +1 -1
- package/dist/components/NcPopover/index.mjs +1 -1
- package/dist/components/NcProfileHoverCard/NcProfileHoverCard.vue.d.ts +80 -0
- package/dist/components/NcProfileHoverCard/index.d.ts +5 -0
- package/dist/components/NcProfileHoverCard/index.mjs +5 -0
- package/dist/components/NcProfileHoverCard/index.mjs.map +1 -0
- package/dist/components/NcProfileHoverCard/profileCache.d.ts +31 -0
- package/dist/components/NcProgressBar/NcProgressBar.vue.d.ts +27 -0
- package/dist/components/NcProgressBar/index.mjs +1 -1
- package/dist/components/NcRadioGroup/index.mjs +1 -1
- package/dist/components/NcRadioGroupButton/index.mjs +1 -1
- package/dist/components/NcRelatedResourcesPanel/NcRelatedResourcesPanel.vue.d.ts +1 -1
- package/dist/components/NcRelatedResourcesPanel/index.mjs +1 -1
- package/dist/components/NcRichContenteditable/NcRichContenteditable.vue.d.ts +1 -1
- package/dist/components/NcRichContenteditable/index.mjs +1 -1
- package/dist/components/NcRichText/NcReferencePicker/NcProviderList.vue.d.ts +199 -3
- package/dist/components/NcRichText/NcReferencePicker/NcRawLinkInput.vue.d.ts +14 -11
- package/dist/components/NcRichText/NcReferencePicker/NcReferencePicker.vue.d.ts +412 -17
- package/dist/components/NcRichText/NcReferencePicker/NcReferencePickerModal.vue.d.ts +412 -17
- package/dist/components/NcRichText/NcReferencePicker/NcSearch.vue.d.ts +199 -3
- package/dist/components/NcRichText/index.mjs +14 -12
- package/dist/components/NcRichText/index.mjs.map +1 -1
- package/dist/components/NcSavingIndicatorIcon/index.mjs +1 -1
- package/dist/components/NcSelect/NcSelect.vue.d.ts +208 -3
- package/dist/components/NcSelect/index.mjs +1 -1
- package/dist/components/NcSelectTags/NcSelectTags.vue.d.ts +201 -5
- package/dist/components/NcSelectTags/index.mjs +1 -1
- package/dist/components/NcSelectUsers/index.mjs +1 -1
- package/dist/components/NcSettingsSection/index.mjs +1 -1
- package/dist/components/NcSettingsSelectGroup/NcSettingsSelectGroup.vue.d.ts +199 -3
- package/dist/components/NcSettingsSelectGroup/index.mjs +1 -1
- package/dist/components/NcTextArea/index.mjs +1 -1
- package/dist/components/NcTextField/NcTextField.vue.d.ts +23 -17
- package/dist/components/NcTextField/index.mjs +1 -1
- package/dist/components/NcThemeProvider/index.mjs +1 -1
- package/dist/components/NcTimezonePicker/index.mjs +1 -1
- package/dist/components/NcUserBubble/index.mjs +1 -1
- package/dist/components/NcUserStatusIcon/index.mjs +1 -1
- package/dist/components/NcVNodes/index.mjs +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/composables/useFormatDateTime/index.mjs +11 -5
- package/dist/composables/useFormatDateTime/index.mjs.map +1 -1
- package/dist/composables/useHotKey/index.mjs +1 -1
- package/dist/composables/useIsDarkTheme/index.mjs +1 -1
- package/dist/functions/contactsMenu/index.mjs +1 -1
- package/dist/functions/emoji/index.mjs +1 -1
- package/dist/functions/reference/index.mjs +13 -12
- package/dist/functions/reference/index.mjs.map +1 -1
- package/dist/functions/registerReference/index.mjs +10 -9
- package/dist/functions/registerReference/index.mjs.map +1 -1
- package/dist/functions/usernameToColor/index.mjs +1 -1
- package/dist/index.mjs +120 -116
- package/dist/index.mjs.map +1 -1
- package/dist/utils/legacy.d.ts +2 -0
- package/package.json +20 -19
- package/dist/assets/NcAppNavigationList--36j6Acm.css +0 -28
- package/dist/assets/NcDateTimePickerNative-BP6eg8aU.css +0 -60
- package/dist/assets/NcPopover-CAoHhjKa.css +0 -123
- package/dist/assets/NcSelect-CvDEQAjD.css +0 -245
- package/dist/assets/NcSelectUsers-YF5729PJ.css +0 -4
- package/dist/chunks/ArrowRight-B1ncAhus.mjs.map +0 -1
- package/dist/chunks/ChevronDown-C6gc637b.mjs.map +0 -1
- package/dist/chunks/ChevronUp-ChH8oB7p.mjs.map +0 -1
- package/dist/chunks/Close-CuhcJnX2.mjs.map +0 -1
- package/dist/chunks/NcActionButton-BO5T5ePT.mjs.map +0 -1
- package/dist/chunks/NcActionButtonGroup-Dd03Oluy.mjs.map +0 -1
- package/dist/chunks/NcActionCaption-f7L9gBlT.mjs.map +0 -1
- package/dist/chunks/NcActionCheckbox-DBqiK-AZ.mjs.map +0 -1
- package/dist/chunks/NcActionInput-Dr8Yrafu.mjs.map +0 -1
- package/dist/chunks/NcActionLink-BFiaYt9A.mjs.map +0 -1
- package/dist/chunks/NcActionRadio-BA08CAtA.mjs.map +0 -1
- package/dist/chunks/NcActionRouter-vYFtIOzD.mjs.map +0 -1
- package/dist/chunks/NcActionSeparator-B9pNQaji.mjs.map +0 -1
- package/dist/chunks/NcActionText-CQ9qwJ0p.mjs.map +0 -1
- package/dist/chunks/NcActionTextEditable-B8y_GEre.mjs.map +0 -1
- package/dist/chunks/NcActions-C-wDqSrv.mjs.map +0 -1
- package/dist/chunks/NcAppContent-DavgjaFX.mjs.map +0 -1
- package/dist/chunks/NcAppContentDetails.vue_vue_type_script_setup_true_lang-BWl5Pw5g.mjs.map +0 -1
- package/dist/chunks/NcAppContentList-Copx3Ver.mjs.map +0 -1
- package/dist/chunks/NcAppNavigation-g57j16pB.mjs.map +0 -1
- package/dist/chunks/NcAppNavigationCaption-VjSWJ8R4.mjs.map +0 -1
- package/dist/chunks/NcAppNavigationIconBullet-BmU-dPcY.mjs.map +0 -1
- package/dist/chunks/NcAppNavigationItem-CDeYtA3E.mjs.map +0 -1
- package/dist/chunks/NcAppNavigationList-CGSWabRB.mjs +0 -17
- package/dist/chunks/NcAppNavigationList-CGSWabRB.mjs.map +0 -1
- package/dist/chunks/NcAppNavigationNew-CBNppM7Q.mjs.map +0 -1
- package/dist/chunks/NcAppNavigationNewItem-B1RfQkvu.mjs.map +0 -1
- package/dist/chunks/NcAppNavigationSearch-CQQWb1Eq.mjs.map +0 -1
- package/dist/chunks/NcAppNavigationSettings-DoMjRExO.mjs.map +0 -1
- package/dist/chunks/NcAppNavigationSpacer-CIRC4ZEj.mjs.map +0 -1
- package/dist/chunks/NcAppSettingsDialog-BPcEYLjP.mjs.map +0 -1
- package/dist/chunks/NcAppSettingsSection-BosSmisT.mjs.map +0 -1
- package/dist/chunks/NcAppSettingsShortcutsSection-DLwubKV9.mjs.map +0 -1
- package/dist/chunks/NcAppSidebar-C8YzAzrZ.mjs.map +0 -1
- package/dist/chunks/NcAppSidebarHeader.vue_vue_type_script_setup_true_lang-C-QhdyiN.mjs.map +0 -1
- package/dist/chunks/NcAppSidebarTab-DOSDDbGA.mjs.map +0 -1
- package/dist/chunks/NcAssistantButton-iK491d2v.mjs.map +0 -1
- package/dist/chunks/NcAssistantContent-iHA4O4cC.mjs.map +0 -1
- package/dist/chunks/NcAssistantIcon-C6s4Qm7-.mjs.map +0 -1
- package/dist/chunks/NcAvatar-1KxMUN7V.mjs.map +0 -1
- package/dist/chunks/NcBlurHash-B30Ol8KP.mjs.map +0 -1
- package/dist/chunks/NcBreadcrumb-3Y5NWXnV.mjs.map +0 -1
- package/dist/chunks/NcBreadcrumbs-BaTp3Sya.mjs.map +0 -1
- package/dist/chunks/NcButton-jvoYS2my.mjs.map +0 -1
- package/dist/chunks/NcCheckboxRadioSwitch-DVdt5Hkq.mjs.map +0 -1
- package/dist/chunks/NcChip-DKRlV47q.mjs.map +0 -1
- package/dist/chunks/NcCollectionList-B9qCtjJw.mjs.map +0 -1
- package/dist/chunks/NcColorPicker-BCkasLwT.mjs.map +0 -1
- package/dist/chunks/NcContent-BYh5hWDN.mjs.map +0 -1
- package/dist/chunks/NcCounterBubble-CV0YMrXW.mjs.map +0 -1
- package/dist/chunks/NcDashboardWidget-zmbDEGL-.mjs.map +0 -1
- package/dist/chunks/NcDashboardWidgetItem-DwDndrm_.mjs.map +0 -1
- package/dist/chunks/NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7.mjs.map +0 -1
- package/dist/chunks/NcDateTimePicker-qaFC_wUt.mjs +0 -415
- package/dist/chunks/NcDateTimePicker-qaFC_wUt.mjs.map +0 -1
- package/dist/chunks/NcDateTimePickerNative-B8CMOUnH.mjs.map +0 -1
- package/dist/chunks/NcDialog-D617YI0t.mjs.map +0 -1
- package/dist/chunks/NcDialogButton.vue_vue_type_script_setup_true_lang-Bqfy678u.mjs.map +0 -1
- package/dist/chunks/NcEllipsisedOption-D6Amb91K.mjs.map +0 -1
- package/dist/chunks/NcEmojiPicker-UTxgju3f.mjs.map +0 -1
- package/dist/chunks/NcEmptyContent-CGAPqk4S.mjs.map +0 -1
- package/dist/chunks/NcFilePicker-bD2toutn.mjs.map +0 -1
- package/dist/chunks/NcFormBox-Bmqar8nn.mjs.map +0 -1
- package/dist/chunks/NcFormBoxButton-G_PkUiQy.mjs.map +0 -1
- package/dist/chunks/NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang-BA_gWnmz.mjs.map +0 -1
- package/dist/chunks/NcFormBoxItem-Cm8aZaVJ.mjs.map +0 -1
- package/dist/chunks/NcFormBoxSwitch-DSXiQcnq.mjs.map +0 -1
- package/dist/chunks/NcFormGroup-N7qIFAwN.mjs.map +0 -1
- package/dist/chunks/NcGuestContent-CvT6VGt1.mjs.map +0 -1
- package/dist/chunks/NcHeaderButton-BnLwYCog.mjs.map +0 -1
- package/dist/chunks/NcHeaderMenu-ktQJV2SW.mjs.map +0 -1
- package/dist/chunks/NcHighlight.vue_vue_type_script_lang-DnWQDM_2.mjs.map +0 -1
- package/dist/chunks/NcHotkey-BDGeF3eH.mjs.map +0 -1
- package/dist/chunks/NcHotkeyList-B4WjTLAp.mjs.map +0 -1
- package/dist/chunks/NcIconSvgWrapper-g8ubWhoz.mjs.map +0 -1
- package/dist/chunks/NcIconToggleSwitch-CRvGt4su.mjs.map +0 -1
- package/dist/chunks/NcInputConfirmCancel-CGTllrXj.mjs.map +0 -1
- package/dist/chunks/NcInputField-5Sg6EUP6.mjs.map +0 -1
- package/dist/chunks/NcKbd-Bh_Tk6Ar.mjs.map +0 -1
- package/dist/chunks/NcListItem-BliLJpvU.mjs.map +0 -1
- package/dist/chunks/NcListItemIcon-Dl_tfkk9.mjs.map +0 -1
- package/dist/chunks/NcLoadingIcon-BOVpFVQz.mjs.map +0 -1
- package/dist/chunks/NcMentionBubble.vue_vue_type_style_index_0_scoped_3c4a673d_lang-DyqakLm5.mjs.map +0 -1
- package/dist/chunks/NcModal-DiDvgcU8.mjs.map +0 -1
- package/dist/chunks/NcNoteCard-mI7qVZ9j.mjs.map +0 -1
- package/dist/chunks/NcPasswordField-BFyzHTOO.mjs.map +0 -1
- package/dist/chunks/NcPopover-B87bEPLq.mjs.map +0 -1
- package/dist/chunks/NcProgressBar-C-ane-Ni.mjs.map +0 -1
- package/dist/chunks/NcRadioGroup-B4qmS2UD.mjs.map +0 -1
- package/dist/chunks/NcRadioGroupButton-CZykGwv3.mjs.map +0 -1
- package/dist/chunks/NcRelatedResourcesPanel-D_Ttpg5_.mjs.map +0 -1
- package/dist/chunks/NcRichContenteditable-Qw614bJ5.mjs.map +0 -1
- package/dist/chunks/NcRichText-BO_4KtBA.mjs.map +0 -1
- package/dist/chunks/NcSavingIndicatorIcon.vue_vue_type_script_setup_true_lang-DbQnMYZm.mjs.map +0 -1
- package/dist/chunks/NcSelect--kERLlBK.mjs.map +0 -1
- package/dist/chunks/NcSelectTags-I2hJaNax.mjs.map +0 -1
- package/dist/chunks/NcSelectUsers-K14Bepkq.mjs.map +0 -1
- package/dist/chunks/NcSettingsSection-Caz1fuWt.mjs.map +0 -1
- package/dist/chunks/NcSettingsSelectGroup-SYJ8-XlR.mjs.map +0 -1
- package/dist/chunks/NcTextArea-Dxzj4zdb.mjs.map +0 -1
- package/dist/chunks/NcTextField.vue_vue_type_script_setup_true_lang-Bx2esFU2.mjs.map +0 -1
- package/dist/chunks/NcThemeProvider.vue_vue_type_script_setup_true_lang-wie70gn4.mjs.map +0 -1
- package/dist/chunks/NcTimezonePicker.vue_vue_type_script_setup_true_lang-D7ZHgnwW.mjs.map +0 -1
- package/dist/chunks/NcUserBubble-BXR7vT0V.mjs.map +0 -1
- package/dist/chunks/NcUserStatusIcon-BF5OEQFU.mjs.map +0 -1
- package/dist/chunks/NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs.map +0 -1
- package/dist/chunks/_l10n-wdIzZwir.mjs.map +0 -1
- package/dist/chunks/_plugin-vue_export-helper-1tPrXgE0.mjs.map +0 -1
- package/dist/chunks/actionGlobal-BZFdtdJL.mjs.map +0 -1
- package/dist/chunks/actionText-BXR0sWNu.mjs.map +0 -1
- package/dist/chunks/appName-DyNMVZpX.mjs.map +0 -1
- package/dist/chunks/autolink-DrIurosL.mjs.map +0 -1
- package/dist/chunks/colors-Cv9F-jWS.mjs.map +0 -1
- package/dist/chunks/constants-Ciwvl5xb.mjs.map +0 -1
- package/dist/chunks/constants-wIEKSp2G.mjs.map +0 -1
- package/dist/chunks/createElementId-DhjFt1I9.mjs.map +0 -1
- package/dist/chunks/customPickerElements-BqbDcaEu.mjs +0 -123
- package/dist/chunks/customPickerElements-BqbDcaEu.mjs.map +0 -1
- package/dist/chunks/emoji-C8k9NUlo.mjs.map +0 -1
- package/dist/chunks/focusTrap-HJQ4pqHV.mjs.map +0 -1
- package/dist/chunks/legacy-BoqDmOCa.mjs.map +0 -1
- package/dist/chunks/logger-D3RVzcfQ.mjs.map +0 -1
- package/dist/chunks/mdi-CpchYUUV.mjs.map +0 -1
- package/dist/chunks/platform-CC2ecGvV.mjs.map +0 -1
- package/dist/chunks/referencePickerModal-CnKdEDwu.mjs.map +0 -1
- package/dist/chunks/rtl-v0UOPAM7.mjs.map +0 -1
- package/dist/chunks/useAppSettingsDialog-C73Wx6iQ.mjs.map +0 -1
- package/dist/chunks/useCopy-6F-qWHq0.mjs.map +0 -1
- package/dist/chunks/useNcActions-BzPO2c4h.mjs.map +0 -1
- package/dist/chunks/useNcFormBox-Djlh582y.mjs.map +0 -1
- package/dist/chunks/useNcRadioGroup-D6llQmAl.mjs.map +0 -1
- package/dist/chunks/useTrapStackControl-B6cEicto.mjs.map +0 -1
- /package/dist/assets/{NcActionButtonGroup-Bt8kRk79.css → NcActionButtonGroup.css} +0 -0
- /package/dist/assets/{NcActionCaption-DnG2OyWa.css → NcActionCaption.css} +0 -0
- /package/dist/assets/{NcActionSeparator-Ct2RnclR.css → NcActionSeparator.css} +0 -0
- /package/dist/assets/{NcAppContent-TgcZd4AI.css → NcAppContent.css} +0 -0
- /package/dist/assets/{NcAppNavigationCaption-ggcWspH2.css → NcAppNavigationCaption.css} +0 -0
- /package/dist/assets/{NcAppNavigationIconBullet-DLQJkObX.css → NcAppNavigationIconBullet.css} +0 -0
- /package/dist/assets/{NcAppNavigationNew-Bn8zj5lM.css → NcAppNavigationNew.css} +0 -0
- /package/dist/assets/{NcAppNavigationSearch-DD7mo6OW.css → NcAppNavigationSearch.css} +0 -0
- /package/dist/assets/{NcAppNavigationSpacer-LST5uYYS.css → NcAppNavigationSpacer.css} +0 -0
- /package/dist/assets/{NcAppSettingsSection-DIw8GLHR.css → NcAppSettingsSection.css} +0 -0
- /package/dist/assets/{NcBreadcrumb-BxhZKQlW.css → NcBreadcrumb.css} +0 -0
- /package/dist/assets/{NcBreadcrumbs-B4eyDS9i.css → NcBreadcrumbs.css} +0 -0
- /package/dist/assets/{NcChip-DbSI4mFP.css → NcChip.css} +0 -0
- /package/dist/assets/{NcCollectionList-e5JFvzqX.css → NcCollectionList.css} +0 -0
- /package/dist/assets/{NcColorPicker-DVYGs8R3.css → NcColorPicker.css} +0 -0
- /package/dist/assets/{NcContent-DX4Rs6Pc.css → NcContent.css} +0 -0
- /package/dist/assets/{NcCounterBubble-ZnteskDR.css → NcCounterBubble.css} +0 -0
- /package/dist/assets/{NcDashboardWidget-nZuIL1UN.css → NcDashboardWidget.css} +0 -0
- /package/dist/assets/{NcDashboardWidgetItem-DpVmEBwQ.css → NcDashboardWidgetItem.css} +0 -0
- /package/dist/assets/{NcDialog-BSV74Bru.css → NcDialog.css} +0 -0
- /package/dist/assets/{NcEmojiPicker-vNKR9S87.css → NcEmojiPicker.css} +0 -0
- /package/dist/assets/{NcEmptyContent-DJMDuGVz.css → NcEmptyContent.css} +0 -0
- /package/dist/assets/{NcGuestContent-CM0uWLr1.css → NcGuestContent.css} +0 -0
- /package/dist/assets/{NcHeaderButton-CVOQgRjm.css → NcHeaderButton.css} +0 -0
- /package/dist/assets/{NcIconSvgWrapper-N3OwSN9O.css → NcIconSvgWrapper.css} +0 -0
- /package/dist/assets/{NcInputConfirmCancel-DZEDRf0t.css → NcInputConfirmCancel.css} +0 -0
- /package/dist/assets/{NcListItem-BjeejGlB.css → NcListItem.css} +0 -0
- /package/dist/assets/{NcListItemIcon-DJRcmlo1.css → NcListItemIcon.css} +0 -0
- /package/dist/assets/{NcLoadingIcon-CWUlo4XY.css → NcLoadingIcon.css} +0 -0
- /package/dist/assets/{NcMentionBubble-BeGb2xGc.css → NcMentionBubble.css} +0 -0
- /package/dist/assets/{NcModal-D81luiuU.css → NcModal.css} +0 -0
- /package/dist/assets/{NcNoteCard-DfescGKl.css → NcNoteCard.css} +0 -0
- /package/dist/assets/{NcPasswordField-BN4HFgU5.css → NcPasswordField.css} +0 -0
- /package/dist/assets/{NcRelatedResourcesPanel-BZKjkugM.css → NcRelatedResourcesPanel.css} +0 -0
- /package/dist/assets/{NcRichText-D0Bu5bbu.css → NcRichText.css} +0 -0
- /package/dist/assets/{NcSettingsSection-f5rBJsKJ.css → NcSettingsSection.css} +0 -0
- /package/dist/assets/{NcSettingsSelectGroup-D_fSrafm.css → NcSettingsSelectGroup.css} +0 -0
- /package/dist/assets/{NcTextArea-BxGe3Lqn.css → NcTextArea.css} +0 -0
- /package/dist/assets/{NcUserBubble-DFUmBxeb.css → NcUserBubble.css} +0 -0
- /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
|
|
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
|
|
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
|
-
"
|
|
33
|
-
"
|
|
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
|
-
|
|
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
|
-
|
|
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-
|
|
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
|
|
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
|
|
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
|
|
4
|
-
import { N as NcFormGroup } from "./NcFormGroup
|
|
5
|
-
import { I as INSIDE_RADIO_GROUP_KEY } from "./useNcRadioGroup
|
|
6
|
-
import { _ as _export_sfc } from "./_plugin-vue_export-helper
|
|
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 = "
|
|
63
|
+
const radioGroup_checkboxRadioContainer = "_radioGroup_checkboxRadioContainer_AUPA7";
|
|
64
64
|
const style0 = {
|
|
65
|
-
"material-design-icon": "_material-design-
|
|
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
|
|
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
|
|
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
|
|
4
|
-
import { u as useNcFormBox } from "./useNcFormBox
|
|
5
|
-
import { u as useInsideRadioGroup } from "./useNcRadioGroup
|
|
6
|
-
import { _ as _export_sfc } from "./_plugin-vue_export-helper
|
|
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 = "
|
|
64
|
-
const radioGroupButton__label = "
|
|
65
|
-
const radioGroupButton__icon = "
|
|
66
|
-
const radioGroupButton_disabled = "
|
|
67
|
-
const radioGroupButton_active = "
|
|
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-
|
|
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
|
|
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
|