@nextcloud/vue 8.0.0-beta.7 → 8.0.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -0
- package/dist/Components/NcActionButton.cjs +49 -1
- package/dist/Components/NcActionButton.cjs.map +1 -1
- package/dist/Components/NcActionButton.mjs +49 -13
- package/dist/Components/NcActionButton.mjs.map +1 -1
- package/dist/Components/NcActionButtonGroup.cjs +30 -1
- package/dist/Components/NcActionButtonGroup.cjs.map +1 -1
- package/dist/Components/NcActionButtonGroup.mjs +30 -9
- package/dist/Components/NcActionButtonGroup.mjs.map +1 -1
- package/dist/Components/NcActionCaption.cjs +29 -1
- package/dist/Components/NcActionCaption.cjs.map +1 -1
- package/dist/Components/NcActionCaption.mjs +29 -9
- package/dist/Components/NcActionCaption.mjs.map +1 -1
- package/dist/Components/NcActionCheckbox.cjs +78 -1
- package/dist/Components/NcActionCheckbox.cjs.map +1 -1
- package/dist/Components/NcActionCheckbox.mjs +80 -19
- package/dist/Components/NcActionCheckbox.mjs.map +1 -1
- package/dist/Components/NcActionInput.cjs +231 -1
- package/dist/Components/NcActionInput.cjs.map +1 -1
- package/dist/Components/NcActionInput.mjs +235 -70
- package/dist/Components/NcActionInput.mjs.map +1 -1
- package/dist/Components/NcActionLink.cjs +69 -1
- package/dist/Components/NcActionLink.cjs.map +1 -1
- package/dist/Components/NcActionLink.mjs +66 -14
- package/dist/Components/NcActionLink.mjs.map +1 -1
- package/dist/Components/NcActionRadio.cjs +85 -1
- package/dist/Components/NcActionRadio.cjs.map +1 -1
- package/dist/Components/NcActionRadio.mjs +87 -19
- package/dist/Components/NcActionRadio.mjs.map +1 -1
- package/dist/Components/NcActionRouter.cjs +42 -1
- package/dist/Components/NcActionRouter.cjs.map +1 -1
- package/dist/Components/NcActionRouter.mjs +41 -12
- package/dist/Components/NcActionRouter.mjs.map +1 -1
- package/dist/Components/NcActionSeparator.cjs +20 -1
- package/dist/Components/NcActionSeparator.cjs.map +1 -1
- package/dist/Components/NcActionSeparator.mjs +20 -9
- package/dist/Components/NcActionSeparator.mjs.map +1 -1
- package/dist/Components/NcActionText.cjs +23 -1
- package/dist/Components/NcActionText.cjs.map +1 -1
- package/dist/Components/NcActionText.mjs +21 -9
- package/dist/Components/NcActionText.mjs.map +1 -1
- package/dist/Components/NcActionTextEditable.cjs +81 -1
- package/dist/Components/NcActionTextEditable.cjs.map +1 -1
- package/dist/Components/NcActionTextEditable.mjs +79 -22
- package/dist/Components/NcActionTextEditable.mjs.map +1 -1
- package/dist/Components/NcActions.cjs +459 -1
- package/dist/Components/NcActions.cjs.map +1 -1
- package/dist/Components/NcActions.mjs +463 -100
- package/dist/Components/NcActions.mjs.map +1 -1
- package/dist/Components/NcAppContent.cjs +218 -1
- package/dist/Components/NcAppContent.cjs.map +1 -1
- package/dist/Components/NcAppContent.mjs +220 -66
- package/dist/Components/NcAppContent.mjs.map +1 -1
- package/dist/Components/NcAppContentDetails.cjs +19 -1
- package/dist/Components/NcAppContentDetails.cjs.map +1 -1
- package/dist/Components/NcAppContentDetails.mjs +18 -7
- package/dist/Components/NcAppContentDetails.mjs.map +1 -1
- package/dist/Components/NcAppContentList.cjs +29 -1
- package/dist/Components/NcAppContentList.cjs.map +1 -1
- package/dist/Components/NcAppContentList.mjs +29 -8
- package/dist/Components/NcAppContentList.mjs.map +1 -1
- package/dist/Components/NcAppNavigation.cjs +66 -1
- package/dist/Components/NcAppNavigation.cjs.map +1 -1
- package/dist/Components/NcAppNavigation.mjs +67 -28
- package/dist/Components/NcAppNavigation.mjs.map +1 -1
- package/dist/Components/NcAppNavigationCaption.cjs +44 -1
- package/dist/Components/NcAppNavigationCaption.cjs.map +1 -1
- package/dist/Components/NcAppNavigationCaption.mjs +40 -9
- package/dist/Components/NcAppNavigationCaption.mjs.map +1 -1
- package/dist/Components/NcAppNavigationIconBullet.cjs +40 -1
- package/dist/Components/NcAppNavigationIconBullet.cjs.map +1 -1
- package/dist/Components/NcAppNavigationIconBullet.mjs +40 -15
- package/dist/Components/NcAppNavigationIconBullet.mjs.map +1 -1
- package/dist/Components/NcAppNavigationItem.cjs +386 -1
- package/dist/Components/NcAppNavigationItem.cjs.map +1 -1
- package/dist/Components/NcAppNavigationItem.mjs +382 -81
- package/dist/Components/NcAppNavigationItem.mjs.map +1 -1
- package/dist/Components/NcAppNavigationNew.cjs +50 -1
- package/dist/Components/NcAppNavigationNew.cjs.map +1 -1
- package/dist/Components/NcAppNavigationNew.mjs +51 -14
- package/dist/Components/NcAppNavigationNew.mjs.map +1 -1
- package/dist/Components/NcAppNavigationNewItem.cjs +87 -1
- package/dist/Components/NcAppNavigationNewItem.cjs.map +1 -1
- package/dist/Components/NcAppNavigationNewItem.mjs +83 -17
- package/dist/Components/NcAppNavigationNewItem.mjs.map +1 -1
- package/dist/Components/NcAppNavigationSettings.cjs +69 -1
- package/dist/Components/NcAppNavigationSettings.cjs.map +1 -1
- package/dist/Components/NcAppNavigationSettings.mjs +60 -21
- package/dist/Components/NcAppNavigationSettings.mjs.map +1 -1
- package/dist/Components/NcAppNavigationSpacer.cjs +20 -1
- package/dist/Components/NcAppNavigationSpacer.cjs.map +1 -1
- package/dist/Components/NcAppNavigationSpacer.mjs +20 -9
- package/dist/Components/NcAppNavigationSpacer.mjs.map +1 -1
- package/dist/Components/NcAppNavigationToggle.cjs +25 -1
- package/dist/Components/NcAppNavigationToggle.cjs.map +1 -1
- package/dist/Components/NcAppNavigationToggle.mjs +21 -1
- package/dist/Components/NcAppNavigationToggle.mjs.map +1 -1
- package/dist/Components/NcAppSettingsDialog.cjs +156 -1
- package/dist/Components/NcAppSettingsDialog.cjs.map +1 -1
- package/dist/Components/NcAppSettingsDialog.mjs +160 -50
- package/dist/Components/NcAppSettingsDialog.mjs.map +1 -1
- package/dist/Components/NcAppSettingsSection.cjs +39 -1
- package/dist/Components/NcAppSettingsSection.cjs.map +1 -1
- package/dist/Components/NcAppSettingsSection.mjs +39 -13
- package/dist/Components/NcAppSettingsSection.mjs.map +1 -1
- package/dist/Components/NcAppSidebar.cjs +443 -1
- package/dist/Components/NcAppSidebar.cjs.map +1 -1
- package/dist/Components/NcAppSidebar.mjs +409 -92
- package/dist/Components/NcAppSidebar.mjs.map +1 -1
- package/dist/Components/NcAppSidebarTab.cjs +83 -1
- package/dist/Components/NcAppSidebarTab.cjs.map +1 -1
- package/dist/Components/NcAppSidebarTab.mjs +83 -20
- package/dist/Components/NcAppSidebarTab.mjs.map +1 -1
- package/dist/Components/NcAvatar.cjs +3 -1
- package/dist/Components/NcAvatar.cjs.map +1 -1
- package/dist/Components/NcAvatar.mjs +1 -1
- package/dist/Components/NcBreadcrumb.cjs +175 -1
- package/dist/Components/NcBreadcrumb.cjs.map +1 -1
- package/dist/Components/NcBreadcrumb.mjs +175 -35
- package/dist/Components/NcBreadcrumb.mjs.map +1 -1
- package/dist/Components/NcBreadcrumbs.cjs +372 -1
- package/dist/Components/NcBreadcrumbs.cjs.map +1 -1
- package/dist/Components/NcBreadcrumbs.mjs +373 -142
- package/dist/Components/NcBreadcrumbs.mjs.map +1 -1
- package/dist/Components/NcButton.cjs +226 -1
- package/dist/Components/NcButton.cjs.map +1 -1
- package/dist/Components/NcButton.mjs +226 -24
- package/dist/Components/NcButton.mjs.map +1 -1
- package/dist/Components/NcCheckboxRadioSwitch.cjs +352 -1
- package/dist/Components/NcCheckboxRadioSwitch.cjs.map +1 -1
- package/dist/Components/NcCheckboxRadioSwitch.mjs +360 -59
- package/dist/Components/NcCheckboxRadioSwitch.mjs.map +1 -1
- package/dist/Components/NcColorPicker.cjs +118 -1
- package/dist/Components/NcColorPicker.cjs.map +1 -1
- package/dist/Components/NcColorPicker.mjs +124 -46
- package/dist/Components/NcColorPicker.mjs.map +1 -1
- package/dist/Components/NcContent.cjs +25 -1
- package/dist/Components/NcContent.cjs.map +1 -1
- package/dist/Components/NcContent.mjs +24 -8
- package/dist/Components/NcContent.mjs.map +1 -1
- package/dist/Components/NcCounterBubble.cjs +47 -1
- package/dist/Components/NcCounterBubble.cjs.map +1 -1
- package/dist/Components/NcCounterBubble.mjs +46 -12
- package/dist/Components/NcCounterBubble.mjs.map +1 -1
- package/dist/Components/NcDashboardWidget.cjs +133 -1
- package/dist/Components/NcDashboardWidget.cjs.map +1 -1
- package/dist/Components/NcDashboardWidget.mjs +128 -39
- package/dist/Components/NcDashboardWidget.mjs.map +1 -1
- package/dist/Components/NcDashboardWidgetItem.cjs +138 -1
- package/dist/Components/NcDashboardWidgetItem.cjs.map +1 -1
- package/dist/Components/NcDashboardWidgetItem.mjs +130 -23
- package/dist/Components/NcDashboardWidgetItem.mjs.map +1 -1
- package/dist/Components/NcDateTime.cjs +125 -1
- package/dist/Components/NcDateTime.cjs.map +1 -1
- package/dist/Components/NcDateTime.mjs +126 -41
- package/dist/Components/NcDateTime.mjs.map +1 -1
- package/dist/Components/NcDateTimePicker.cjs +217 -1
- package/dist/Components/NcDateTimePicker.cjs.map +1 -1
- package/dist/Components/NcDateTimePicker.mjs +212 -53
- package/dist/Components/NcDateTimePicker.mjs.map +1 -1
- package/dist/Components/NcDateTimePickerNative.cjs +199 -1
- package/dist/Components/NcDateTimePickerNative.cjs.map +1 -1
- package/dist/Components/NcDateTimePickerNative.mjs +195 -58
- package/dist/Components/NcDateTimePickerNative.mjs.map +1 -1
- package/dist/Components/NcDialog.cjs +171 -0
- package/dist/Components/NcDialog.cjs.map +1 -0
- package/dist/Components/NcDialog.mjs +177 -0
- package/dist/Components/NcDialog.mjs.map +1 -0
- package/dist/Components/NcDialogButton.cjs +69 -0
- package/dist/Components/NcDialogButton.cjs.map +1 -0
- package/dist/Components/NcDialogButton.mjs +74 -0
- package/dist/Components/NcDialogButton.mjs.map +1 -0
- package/dist/Components/NcEllipsisedOption.cjs +74 -1
- package/dist/Components/NcEllipsisedOption.cjs.map +1 -1
- package/dist/Components/NcEllipsisedOption.mjs +73 -20
- package/dist/Components/NcEllipsisedOption.mjs.map +1 -1
- package/dist/Components/NcEmojiPicker.cjs +175 -1
- package/dist/Components/NcEmojiPicker.cjs.map +1 -1
- package/dist/Components/NcEmojiPicker.mjs +172 -52
- package/dist/Components/NcEmojiPicker.mjs.map +1 -1
- package/dist/Components/NcEmptyContent.cjs +54 -1
- package/dist/Components/NcEmptyContent.cjs.map +1 -1
- package/dist/Components/NcEmptyContent.mjs +46 -10
- package/dist/Components/NcEmptyContent.mjs.map +1 -1
- package/dist/Components/NcGuestContent.cjs +26 -1
- package/dist/Components/NcGuestContent.cjs.map +1 -1
- package/dist/Components/NcGuestContent.mjs +24 -11
- package/dist/Components/NcGuestContent.mjs.map +1 -1
- package/dist/Components/NcHeaderMenu.cjs +167 -1
- package/dist/Components/NcHeaderMenu.cjs.map +1 -1
- package/dist/Components/NcHeaderMenu.mjs +161 -49
- package/dist/Components/NcHeaderMenu.mjs.map +1 -1
- package/dist/Components/NcHighlight.cjs +3 -1
- package/dist/Components/NcHighlight.cjs.map +1 -1
- package/dist/Components/NcHighlight.mjs +1 -1
- package/dist/Components/NcIconSvgWrapper.cjs +59 -1
- package/dist/Components/NcIconSvgWrapper.cjs.map +1 -1
- package/dist/Components/NcIconSvgWrapper.mjs +60 -12
- package/dist/Components/NcIconSvgWrapper.mjs.map +1 -1
- package/dist/Components/NcInputField.cjs +210 -1
- package/dist/Components/NcInputField.cjs.map +1 -1
- package/dist/Components/NcInputField.mjs +211 -38
- package/dist/Components/NcInputField.mjs.map +1 -1
- package/dist/Components/NcListItem.cjs +237 -1
- package/dist/Components/NcListItem.cjs.map +1 -1
- package/dist/Components/NcListItem.mjs +233 -57
- package/dist/Components/NcListItem.mjs.map +1 -1
- package/dist/Components/NcListItemIcon.cjs +158 -1
- package/dist/Components/NcListItemIcon.cjs.map +1 -1
- package/dist/Components/NcListItemIcon.mjs +154 -30
- package/dist/Components/NcListItemIcon.mjs.map +1 -1
- package/dist/Components/NcLoadingIcon.cjs +54 -1
- package/dist/Components/NcLoadingIcon.cjs.map +1 -1
- package/dist/Components/NcLoadingIcon.mjs +54 -14
- package/dist/Components/NcLoadingIcon.mjs.map +1 -1
- package/dist/Components/NcModal.cjs +403 -1
- package/dist/Components/NcModal.cjs.map +1 -1
- package/dist/Components/NcModal.mjs +392 -96
- package/dist/Components/NcModal.mjs.map +1 -1
- package/dist/Components/NcNoteCard.cjs +71 -1
- package/dist/Components/NcNoteCard.cjs.map +1 -1
- package/dist/Components/NcNoteCard.mjs +72 -38
- package/dist/Components/NcNoteCard.mjs.map +1 -1
- package/dist/Components/NcPasswordField.cjs +163 -1
- package/dist/Components/NcPasswordField.cjs.map +1 -1
- package/dist/Components/NcPasswordField.mjs +169 -54
- package/dist/Components/NcPasswordField.mjs.map +1 -1
- package/dist/Components/NcPopover.cjs +125 -1
- package/dist/Components/NcPopover.cjs.map +1 -1
- package/dist/Components/NcPopover.mjs +124 -41
- package/dist/Components/NcPopover.mjs.map +1 -1
- package/dist/Components/NcProgressBar.cjs +57 -1
- package/dist/Components/NcProgressBar.cjs.map +1 -1
- package/dist/Components/NcProgressBar.mjs +57 -15
- package/dist/Components/NcProgressBar.mjs.map +1 -1
- package/dist/Components/NcRelatedResourcesPanel.cjs +184 -1
- package/dist/Components/NcRelatedResourcesPanel.cjs.map +1 -1
- package/dist/Components/NcRelatedResourcesPanel.mjs +183 -61
- package/dist/Components/NcRelatedResourcesPanel.mjs.map +1 -1
- package/dist/Components/NcRichContenteditable.cjs +478 -1
- package/dist/Components/NcRichContenteditable.cjs.map +1 -1
- package/dist/Components/NcRichContenteditable.mjs +447 -127
- package/dist/Components/NcRichContenteditable.mjs.map +1 -1
- package/dist/Components/NcRichText.cjs +44 -1
- package/dist/Components/NcRichText.cjs.map +1 -1
- package/dist/Components/NcRichText.mjs +25 -4
- package/dist/Components/NcRichText.mjs.map +1 -1
- package/dist/Components/NcSavingIndicatorIcon.cjs +59 -1
- package/dist/Components/NcSavingIndicatorIcon.cjs.map +1 -1
- package/dist/Components/NcSavingIndicatorIcon.mjs +56 -9
- package/dist/Components/NcSavingIndicatorIcon.mjs.map +1 -1
- package/dist/Components/NcSelect.cjs +411 -1
- package/dist/Components/NcSelect.cjs.map +1 -1
- package/dist/Components/NcSelect.mjs +405 -47
- package/dist/Components/NcSelect.mjs.map +1 -1
- package/dist/Components/NcSelectTags.cjs +251 -2
- package/dist/Components/NcSelectTags.cjs.map +1 -1
- package/dist/Components/NcSelectTags.mjs +236 -73
- package/dist/Components/NcSelectTags.mjs.map +1 -1
- package/dist/Components/NcSettingsInputText.cjs +90 -1
- package/dist/Components/NcSettingsInputText.cjs.map +1 -1
- package/dist/Components/NcSettingsInputText.mjs +88 -19
- package/dist/Components/NcSettingsInputText.mjs.map +1 -1
- package/dist/Components/NcSettingsSection.cjs +62 -1
- package/dist/Components/NcSettingsSection.cjs.map +1 -1
- package/dist/Components/NcSettingsSection.mjs +62 -15
- package/dist/Components/NcSettingsSection.mjs.map +1 -1
- package/dist/Components/NcSettingsSelectGroup.cjs +26 -1
- package/dist/Components/NcSettingsSelectGroup.cjs.map +1 -1
- package/dist/Components/NcSettingsSelectGroup.mjs +22 -1
- package/dist/Components/NcSettingsSelectGroup.mjs.map +1 -1
- package/dist/Components/NcTextArea.cjs +167 -0
- package/dist/Components/NcTextArea.cjs.map +1 -0
- package/dist/Components/NcTextArea.mjs +172 -0
- package/dist/Components/NcTextArea.mjs.map +1 -0
- package/dist/Components/NcTextField.cjs +98 -1
- package/dist/Components/NcTextField.cjs.map +1 -1
- package/dist/Components/NcTextField.mjs +102 -22
- package/dist/Components/NcTextField.mjs.map +1 -1
- package/dist/Components/NcTimezonePicker.cjs +4387 -614
- package/dist/Components/NcTimezonePicker.cjs.map +1 -1
- package/dist/Components/NcTimezonePicker.mjs +4372 -663
- package/dist/Components/NcTimezonePicker.mjs.map +1 -1
- package/dist/Components/NcUserBubble.cjs +189 -1
- package/dist/Components/NcUserBubble.cjs.map +1 -1
- package/dist/Components/NcUserBubble.mjs +190 -47
- package/dist/Components/NcUserBubble.mjs.map +1 -1
- package/dist/Components/NcVNodes.cjs +35 -1
- package/dist/Components/NcVNodes.cjs.map +1 -1
- package/dist/Components/NcVNodes.mjs +35 -8
- package/dist/Components/NcVNodes.mjs.map +1 -1
- package/dist/Directives/Focus.cjs +30 -1
- package/dist/Directives/Focus.cjs.map +1 -1
- package/dist/Directives/Focus.mjs +28 -5
- package/dist/Directives/Focus.mjs.map +1 -1
- package/dist/Directives/Linkify.cjs +8 -1
- package/dist/Directives/Linkify.cjs.map +1 -1
- package/dist/Directives/Linkify.mjs +6 -6
- package/dist/Directives/Linkify.mjs.map +1 -1
- package/dist/Directives/Tooltip.cjs +37 -1
- package/dist/Directives/Tooltip.cjs.map +1 -1
- package/dist/Directives/Tooltip.mjs +29 -4
- package/dist/Directives/Tooltip.mjs.map +1 -1
- package/dist/Functions/emoji.cjs +36 -1
- package/dist/Functions/emoji.cjs.map +1 -1
- package/dist/Functions/emoji.mjs +32 -11
- package/dist/Functions/emoji.mjs.map +1 -1
- package/dist/Functions/usernameToColor.cjs +39 -1
- package/dist/Functions/usernameToColor.cjs.map +1 -1
- package/dist/Functions/usernameToColor.mjs +32 -11
- package/dist/Functions/usernameToColor.mjs.map +1 -1
- package/dist/Mixins/clickOutsideOptions.cjs +40 -1
- package/dist/Mixins/clickOutsideOptions.cjs.map +1 -1
- package/dist/Mixins/clickOutsideOptions.mjs +39 -4
- package/dist/Mixins/clickOutsideOptions.mjs.map +1 -1
- package/dist/Mixins/isFullscreen.cjs +44 -1
- package/dist/Mixins/isFullscreen.cjs.map +1 -1
- package/dist/Mixins/isFullscreen.mjs +42 -11
- package/dist/Mixins/isFullscreen.mjs.map +1 -1
- package/dist/Mixins/isMobile.cjs +87 -1
- package/dist/Mixins/isMobile.cjs.map +1 -1
- package/dist/Mixins/isMobile.mjs +86 -11
- package/dist/Mixins/isMobile.mjs.map +1 -1
- package/dist/Mixins/richEditor.cjs +10 -1
- package/dist/Mixins/richEditor.cjs.map +1 -1
- package/dist/Mixins/richEditor.mjs +2 -2
- package/dist/assets/NcAppNavigationToggle-2cc5b864.css +35 -0
- package/dist/assets/NcInputConfirmCancel-2ba60a52.css +51 -0
- package/dist/assets/NcMentionBubble-6e887c5f.css +81 -0
- package/dist/assets/{index-23405a74.css → NcSettingsSelectGroup-0d38d76b.css} +15 -2
- package/dist/assets/index-0adc989c.css +96 -0
- package/dist/assets/index-1151d229.css +41 -0
- package/dist/assets/index-1beccc92.css +140 -0
- package/dist/assets/index-236620b0.css +150 -0
- package/dist/assets/{index-823ec431.css → index-24f6c355.css} +67 -3
- package/dist/assets/index-2a8e4ca1.css +540 -0
- package/dist/assets/{index-29421a2e.css → index-2d4de2fc.css} +19 -2
- package/dist/assets/{NcSettingsSelectGroup-e88cbf1a.css → index-30e099f7.css} +17 -2
- package/dist/assets/index-34dfc54e.css +88 -0
- package/dist/assets/index-3764a447.css +99 -0
- package/dist/assets/index-400b48a6.css +60 -0
- package/dist/assets/{index-1d28ce70.css → index-441b6552.css} +25 -2
- package/dist/assets/{NcInputConfirmCancel-c1d05dd9.css → index-4611417f.css} +31 -2
- package/dist/assets/index-4a775ba1.css +204 -0
- package/dist/assets/index-4b75fe20.css +79 -0
- package/dist/assets/index-4ebacc78.css +107 -0
- package/dist/assets/index-4ef32afd.css +128 -0
- package/dist/assets/index-50b0766d.css +202 -0
- package/dist/assets/index-574438d6.css +884 -0
- package/dist/assets/index-57b305d3.css +44 -0
- package/dist/assets/index-5ee8a575.css +295 -0
- package/dist/assets/index-5fa0ac5a.css +46 -0
- package/dist/assets/index-61b63a8f.css +57 -0
- package/dist/assets/index-6416f636.css +83 -0
- package/dist/assets/index-6c47e88a.css +46 -0
- package/dist/assets/index-6f721577.css +80 -0
- package/dist/assets/index-73867d38.css +133 -0
- package/dist/assets/index-76a58945.css +68 -0
- package/dist/assets/index-76dd9f11.css +5 -0
- package/dist/assets/index-7813bab3.css +66 -0
- package/dist/assets/index-793eae6b.css +234 -0
- package/dist/assets/index-8304db49.css +129 -0
- package/dist/assets/index-8aa4712e.css +51 -0
- package/dist/assets/{index-3e8ea1d6.css → index-8f52a20f.css} +16 -2
- package/dist/assets/index-93ad846c.css +259 -0
- package/dist/assets/index-9dcf6260.css +151 -0
- package/dist/assets/index-9e44e336.css +59 -0
- package/dist/assets/index-9e9587e1.css +45 -0
- package/dist/assets/index-a2b51bce.css +47 -0
- package/dist/assets/index-a2d55f92.css +204 -0
- package/dist/assets/index-a9e4fe04.css +46 -0
- package/dist/assets/index-abb90c97.css +164 -0
- package/dist/assets/{index-3b76db9b.css → index-af72a30b.css} +78 -3
- package/dist/assets/{NcAppNavigationToggle-110970cd.css → index-b8f13a1f.css} +13 -2
- package/dist/assets/index-b991895f.css +87 -0
- package/dist/assets/{index-25b448e3.css → index-baf8711a.css} +67 -3
- package/dist/assets/index-c06ad941.css +175 -0
- package/dist/assets/index-c5ae3bc4.css +303 -0
- package/dist/assets/index-c6f0da2e.css +69 -0
- package/dist/assets/index-d211cae8.css +93 -0
- package/dist/assets/index-d646553d.css +41 -0
- package/dist/assets/index-dc612aa3.css +112 -0
- package/dist/assets/index-e7c55791.css +243 -0
- package/dist/assets/index-e7eadba7.css +82 -0
- package/dist/assets/index-e828b286.css +76 -0
- package/dist/assets/index-ed4adf1d.css +115 -0
- package/dist/assets/{index-19f059f6.css → index-edee3304.css} +33 -2
- package/dist/assets/index-eea65531.css +129 -0
- package/dist/assets/index-f85aa003.css +78 -0
- package/dist/assets/index-fc61f2d8.css +41 -0
- package/dist/assets/referencePickerModal-3a127978.css +482 -0
- package/dist/chunks/GenColors-38246c38.mjs +46 -0
- package/dist/chunks/{GenColors-8097de04.cjs.map → GenColors-38246c38.mjs.map} +1 -1
- package/dist/chunks/GenColors-eedcc70a.cjs +45 -0
- package/dist/chunks/{GenColors-85cb6194.mjs.map → GenColors-eedcc70a.cjs.map} +1 -1
- package/dist/{assets/index-cb18d6f3.css → chunks/GenRandomId-c214d235.cjs} +8 -5
- package/dist/chunks/{GenRandomId-67df40eb.cjs.map → GenRandomId-c214d235.cjs.map} +1 -1
- package/dist/chunks/GenRandomId-cb9ccebe.mjs +25 -0
- package/dist/chunks/{GenRandomId-1e1b509a.mjs.map → GenRandomId-cb9ccebe.mjs.map} +1 -1
- package/dist/chunks/Linkify-39f20c9a.mjs +33 -0
- package/dist/chunks/{Linkify-a0faf443.mjs.map → Linkify-39f20c9a.mjs.map} +1 -1
- package/dist/chunks/Linkify-40cdd635.cjs +32 -0
- package/dist/chunks/{Linkify-a4db36a9.cjs.map → Linkify-40cdd635.cjs.map} +1 -1
- package/dist/chunks/NcAppNavigationToggle-841d3015.cjs +49 -0
- package/dist/chunks/NcAppNavigationToggle-841d3015.cjs.map +1 -0
- package/dist/chunks/NcAppNavigationToggle-e358aa47.mjs +55 -0
- package/dist/chunks/NcAppNavigationToggle-e358aa47.mjs.map +1 -0
- package/dist/chunks/NcInputConfirmCancel-44052477.mjs +96 -0
- package/dist/chunks/NcInputConfirmCancel-44052477.mjs.map +1 -0
- package/dist/chunks/NcInputConfirmCancel-6bea0fdc.cjs +90 -0
- package/dist/chunks/NcInputConfirmCancel-6bea0fdc.cjs.map +1 -0
- package/dist/chunks/NcRichText-332fe454.cjs +289 -0
- package/dist/chunks/{NcRichText-bb9d3893.mjs.map → NcRichText-332fe454.cjs.map} +1 -1
- package/dist/chunks/NcRichText-8fda53c8.mjs +302 -0
- package/dist/chunks/{NcRichText-3c54a3cc.cjs.map → NcRichText-8fda53c8.mjs.map} +1 -1
- package/dist/chunks/NcSettingsSelectGroup-a5ff8c36.cjs +183 -0
- package/dist/chunks/NcSettingsSelectGroup-a5ff8c36.cjs.map +1 -0
- package/dist/chunks/NcSettingsSelectGroup-fdd3309c.mjs +192 -0
- package/dist/chunks/NcSettingsSelectGroup-fdd3309c.mjs.map +1 -0
- package/dist/chunks/ScopeComponent-9519afcc.mjs +29 -0
- package/dist/chunks/{ScopeComponent-1f3a7612.mjs.map → ScopeComponent-9519afcc.mjs.map} +1 -1
- package/dist/chunks/ScopeComponent-e060526a.cjs +28 -0
- package/dist/chunks/{ScopeComponent-4b8bd1ee.cjs.map → ScopeComponent-e060526a.cjs.map} +1 -1
- package/dist/chunks/_plugin-vue2_normalizer-71e2aa87.mjs +32 -0
- package/dist/chunks/_plugin-vue2_normalizer-71e2aa87.mjs.map +1 -0
- package/dist/chunks/_plugin-vue2_normalizer-7f9efb60.cjs +31 -0
- package/dist/chunks/_plugin-vue2_normalizer-7f9efb60.cjs.map +1 -0
- package/dist/chunks/actionGlobal-8c1c28c9.mjs +50 -0
- package/dist/chunks/{actionGlobal-cda46023.mjs.map → actionGlobal-8c1c28c9.mjs.map} +1 -1
- package/dist/chunks/actionGlobal-9e29e11b.cjs +49 -0
- package/dist/chunks/{actionGlobal-ec7003e8.cjs.map → actionGlobal-9e29e11b.cjs.map} +1 -1
- package/dist/chunks/actionText-54bc24a6.cjs +120 -0
- package/dist/chunks/{actionText-bef01778.cjs.map → actionText-54bc24a6.cjs.map} +1 -1
- package/dist/chunks/actionText-a64be267.mjs +121 -0
- package/dist/chunks/{actionText-6c35d3fc.mjs.map → actionText-a64be267.mjs.map} +1 -1
- package/dist/chunks/focusTrap-14985831.cjs +26 -0
- package/dist/chunks/{focusTrap-173aba65.mjs.map → focusTrap-14985831.cjs.map} +1 -1
- package/dist/chunks/focusTrap-5d0f71d4.mjs +27 -0
- package/dist/chunks/{focusTrap-139520e2.cjs.map → focusTrap-5d0f71d4.mjs.map} +1 -1
- package/dist/chunks/index-032137a6.cjs +468 -0
- package/dist/chunks/index-032137a6.cjs.map +1 -0
- package/dist/chunks/index-20a9ace9.mjs +149 -0
- package/dist/chunks/{index-cd3f1f8f.mjs.map → index-20a9ace9.mjs.map} +1 -1
- package/dist/chunks/index-4398f925.cjs +149 -0
- package/dist/chunks/{index-858938bd.cjs.map → index-4398f925.cjs.map} +1 -1
- package/dist/chunks/index-5f2a5f57.mjs +155 -0
- package/dist/chunks/{index-377488aa.mjs.map → index-5f2a5f57.mjs.map} +1 -1
- package/dist/chunks/index-e894376a.cjs +148 -0
- package/dist/chunks/{index-df3f51c6.cjs.map → index-e894376a.cjs.map} +1 -1
- package/dist/chunks/index-fb2ee22c.mjs +481 -0
- package/dist/chunks/index-fb2ee22c.mjs.map +1 -0
- package/dist/chunks/l10n-05a09c66.mjs +31 -0
- package/dist/chunks/l10n-05a09c66.mjs.map +1 -0
- package/dist/chunks/l10n-9aa6482d.mjs +10 -0
- package/dist/chunks/l10n-9aa6482d.mjs.map +1 -0
- package/dist/chunks/l10n-b1d264c7.cjs +29 -0
- package/dist/chunks/l10n-b1d264c7.cjs.map +1 -0
- package/dist/chunks/l10n-c7bd0ea6.cjs +8 -0
- package/dist/chunks/l10n-c7bd0ea6.cjs.map +1 -0
- package/dist/chunks/logger-3612e664.mjs +25 -0
- package/dist/chunks/{logger-01af1a78.cjs.map → logger-3612e664.mjs.map} +1 -1
- package/dist/chunks/logger-4998b668.cjs +24 -0
- package/dist/chunks/{logger-ccc7ee65.mjs.map → logger-4998b668.cjs.map} +1 -1
- package/dist/chunks/referencePickerModal-279a483d.cjs +858 -0
- package/dist/chunks/referencePickerModal-279a483d.cjs.map +1 -0
- package/dist/chunks/referencePickerModal-443a4c57.mjs +877 -0
- package/dist/chunks/referencePickerModal-443a4c57.mjs.map +1 -0
- package/dist/index.cjs +257 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +301 -150
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -4
- package/dist/assets/NcMentionBubble-67378a12.css +0 -21
- package/dist/assets/index-2cedaf24.css +0 -21
- package/dist/assets/index-30d74459.css +0 -42
- package/dist/assets/index-317f55be.css +0 -21
- package/dist/assets/index-34f6bb3f.css +0 -21
- package/dist/assets/index-37970f20.css +0 -21
- package/dist/assets/index-3aba62de.css +0 -21
- package/dist/assets/index-47fab7bf.css +0 -21
- package/dist/assets/index-49a0d570.css +0 -21
- package/dist/assets/index-4a4c1700.css +0 -21
- package/dist/assets/index-4a4c2637.css +0 -21
- package/dist/assets/index-4efbac36.css +0 -21
- package/dist/assets/index-6140ff62.css +0 -21
- package/dist/assets/index-66b19339.css +0 -21
- package/dist/assets/index-6cb0dc4a.css +0 -21
- package/dist/assets/index-6f63d18f.css +0 -42
- package/dist/assets/index-76287c8f.css +0 -21
- package/dist/assets/index-7a7195d0.css +0 -21
- package/dist/assets/index-7e084b52.css +0 -21
- package/dist/assets/index-7f55fed2.css +0 -21
- package/dist/assets/index-7ffde264.css +0 -21
- package/dist/assets/index-81f5e4c8.css +0 -21
- package/dist/assets/index-82b5969a.css +0 -21
- package/dist/assets/index-852d8576.css +0 -21
- package/dist/assets/index-8f58dd75.css +0 -21
- package/dist/assets/index-935fa6f9.css +0 -42
- package/dist/assets/index-939ba6f0.css +0 -21
- package/dist/assets/index-a17dfbc4.css +0 -21
- package/dist/assets/index-a4a40fa3.css +0 -21
- package/dist/assets/index-a50a8de6.css +0 -1
- package/dist/assets/index-a513dcd5.css +0 -21
- package/dist/assets/index-a8c5cf75.css +0 -21
- package/dist/assets/index-a999ba9f.css +0 -21
- package/dist/assets/index-afc15e11.css +0 -21
- package/dist/assets/index-b814f5fa.css +0 -21
- package/dist/assets/index-ba6ad1b4.css +0 -21
- package/dist/assets/index-bf10e8e1.css +0 -21
- package/dist/assets/index-bf46edd7.css +0 -21
- package/dist/assets/index-c6d7f3b0.css +0 -21
- package/dist/assets/index-c736204a.css +0 -21
- package/dist/assets/index-cb76ef23.css +0 -21
- package/dist/assets/index-cc70a006.css +0 -21
- package/dist/assets/index-dd464a52.css +0 -21
- package/dist/assets/index-e0ceef85.css +0 -21
- package/dist/assets/index-ecdb616f.css +0 -42
- package/dist/assets/index-ee410fad.css +0 -21
- package/dist/assets/index-ef0bca81.css +0 -42
- package/dist/assets/index-f1030e54.css +0 -21
- package/dist/assets/index-f6ca40ca.css +0 -21
- package/dist/assets/index-f8466b88.css +0 -21
- package/dist/assets/referencePickerModal-41e4705a.css +0 -21
- package/dist/chunks/GenColors-8097de04.cjs +0 -1
- package/dist/chunks/GenColors-85cb6194.mjs +0 -25
- package/dist/chunks/GenRandomId-1e1b509a.mjs +0 -4
- package/dist/chunks/GenRandomId-67df40eb.cjs +0 -1
- package/dist/chunks/IsMobileState-151fc57d.cjs +0 -1
- package/dist/chunks/IsMobileState-151fc57d.cjs.map +0 -1
- package/dist/chunks/IsMobileState-e1fe5f58.mjs +0 -15
- package/dist/chunks/IsMobileState-e1fe5f58.mjs.map +0 -1
- package/dist/chunks/Linkify-a0faf443.mjs +0 -5
- package/dist/chunks/Linkify-a4db36a9.cjs +0 -1
- package/dist/chunks/NcAppNavigationToggle-5f3b9b9a.cjs +0 -1
- package/dist/chunks/NcAppNavigationToggle-5f3b9b9a.cjs.map +0 -1
- package/dist/chunks/NcAppNavigationToggle-86cc2542.mjs +0 -23
- package/dist/chunks/NcAppNavigationToggle-86cc2542.mjs.map +0 -1
- package/dist/chunks/NcInputConfirmCancel-0cd93e0e.mjs +0 -43
- package/dist/chunks/NcInputConfirmCancel-0cd93e0e.mjs.map +0 -1
- package/dist/chunks/NcInputConfirmCancel-17c8ddfb.cjs +0 -1
- package/dist/chunks/NcInputConfirmCancel-17c8ddfb.cjs.map +0 -1
- package/dist/chunks/NcMentionBubble.vue_vue_type_style_index_0_scoped_357e6d0e_lang-072bbb05.cjs.map +0 -1
- package/dist/chunks/NcMentionBubble.vue_vue_type_style_index_0_scoped_357e6d0e_lang-55016398.mjs.map +0 -1
- package/dist/chunks/NcRichText-3c54a3cc.cjs +0 -1
- package/dist/chunks/NcRichText-bb9d3893.mjs +0 -123
- package/dist/chunks/NcSettingsSelectGroup-0be1fe91.mjs +0 -58
- package/dist/chunks/NcSettingsSelectGroup-0be1fe91.mjs.map +0 -1
- package/dist/chunks/NcSettingsSelectGroup-62ca94a9.cjs +0 -1
- package/dist/chunks/NcSettingsSelectGroup-62ca94a9.cjs.map +0 -1
- package/dist/chunks/ScopeComponent-1f3a7612.mjs +0 -8
- package/dist/chunks/ScopeComponent-4b8bd1ee.cjs +0 -1
- package/dist/chunks/_plugin-vue2_normalizer-5b4c43a4.mjs +0 -24
- package/dist/chunks/_plugin-vue2_normalizer-5b4c43a4.mjs.map +0 -1
- package/dist/chunks/_plugin-vue2_normalizer-764a4c12.cjs +0 -1
- package/dist/chunks/_plugin-vue2_normalizer-764a4c12.cjs.map +0 -1
- package/dist/chunks/actionGlobal-cda46023.mjs +0 -15
- package/dist/chunks/actionGlobal-ec7003e8.cjs +0 -1
- package/dist/chunks/actionText-6c35d3fc.mjs +0 -23
- package/dist/chunks/actionText-bef01778.cjs +0 -1
- package/dist/chunks/focusTrap-139520e2.cjs +0 -1
- package/dist/chunks/focusTrap-173aba65.mjs +0 -6
- package/dist/chunks/index-197226c7.mjs +0 -171
- package/dist/chunks/index-197226c7.mjs.map +0 -1
- package/dist/chunks/index-377488aa.mjs +0 -46
- package/dist/chunks/index-858938bd.cjs +0 -3
- package/dist/chunks/index-cd3f1f8f.mjs +0 -43
- package/dist/chunks/index-cebd6e80.cjs +0 -1
- package/dist/chunks/index-cebd6e80.cjs.map +0 -1
- package/dist/chunks/index-df3f51c6.cjs +0 -1
- package/dist/chunks/l10n-05baf7da.mjs +0 -5
- package/dist/chunks/l10n-05baf7da.mjs.map +0 -1
- package/dist/chunks/l10n-46d0c1c0.cjs +0 -1
- package/dist/chunks/l10n-46d0c1c0.cjs.map +0 -1
- package/dist/chunks/l10n-9a5a6afc.mjs +0 -18
- package/dist/chunks/l10n-9a5a6afc.mjs.map +0 -1
- package/dist/chunks/l10n-dacb6440.cjs +0 -1
- package/dist/chunks/l10n-dacb6440.cjs.map +0 -1
- package/dist/chunks/logger-01af1a78.cjs +0 -1
- package/dist/chunks/logger-ccc7ee65.mjs +0 -5
- package/dist/chunks/referencePickerModal-6120a321.cjs +0 -1
- package/dist/chunks/referencePickerModal-6120a321.cjs.map +0 -1
- package/dist/chunks/referencePickerModal-d0573462.mjs +0 -428
- package/dist/chunks/referencePickerModal-d0573462.mjs.map +0 -1
|
@@ -0,0 +1,468 @@
|
|
|
1
|
+
var z = require("../assets/index-9dcf6260.css");
|
|
2
|
+
const m = require("../Components/NcActions.cjs"), y = require("../Components/NcActionLink.cjs"), U = require("../Components/NcButton.cjs"), _ = require("../Components/NcLoadingIcon.cjs"), c = require("../Functions/usernameToColor.cjs");
|
|
3
|
+
require("vue");
|
|
4
|
+
const o = require("@nextcloud/router");
|
|
5
|
+
/* empty css */const b = require("./_plugin-vue2_normalizer-7f9efb60.cjs");
|
|
6
|
+
require("linkify-string");
|
|
7
|
+
require("escape-html");
|
|
8
|
+
require("striptags");
|
|
9
|
+
const l = require("@nextcloud/auth"), N = require("@nextcloud/axios"), M = require("@nextcloud/capabilities"), i = require("./l10n-b1d264c7.cjs"), w = require("vue-material-design-icons/DotsHorizontal.vue"), n = require("@nextcloud/event-bus"), A = require("@nextcloud/browser-storage"), x = require("@vueuse/components"), h = (e) => e && e.__esModule ? e : { default: e }, f = /* @__PURE__ */ h(N), L = /* @__PURE__ */ h(w);
|
|
10
|
+
/**
|
|
11
|
+
* @copyright Copyright (c) 2020 Georg Ehrke <georg-nextcloud@ehrke.email>
|
|
12
|
+
*
|
|
13
|
+
* @author Georg Ehrke <georg-nextcloud@ehrke.email>
|
|
14
|
+
*
|
|
15
|
+
* @license AGPL-3.0-or-later
|
|
16
|
+
*
|
|
17
|
+
* This program is free software: you can redistribute it and/or modify
|
|
18
|
+
* it under the terms of the GNU Affero General Public License as
|
|
19
|
+
* published by the Free Software Foundation, either version 3 of the
|
|
20
|
+
* License, or (at your option) any later version.
|
|
21
|
+
*
|
|
22
|
+
* This program is distributed in the hope that it will be useful,
|
|
23
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
24
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
25
|
+
* GNU Affero General Public License for more details.
|
|
26
|
+
*
|
|
27
|
+
* You should have received a copy of the GNU Affero General Public License
|
|
28
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
29
|
+
*
|
|
30
|
+
*/
|
|
31
|
+
const p = {
|
|
32
|
+
data() {
|
|
33
|
+
return {
|
|
34
|
+
hasStatus: !1,
|
|
35
|
+
userStatus: {
|
|
36
|
+
status: null,
|
|
37
|
+
message: null,
|
|
38
|
+
icon: null
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
},
|
|
42
|
+
methods: {
|
|
43
|
+
/**
|
|
44
|
+
* Fetches the user-status from the server
|
|
45
|
+
*
|
|
46
|
+
* @param {string} userId UserId of the user to fetch the status for
|
|
47
|
+
*
|
|
48
|
+
* @return {Promise<void>}
|
|
49
|
+
*/
|
|
50
|
+
async fetchUserStatus(e) {
|
|
51
|
+
var s, a;
|
|
52
|
+
if (!e)
|
|
53
|
+
return;
|
|
54
|
+
const t = M.getCapabilities();
|
|
55
|
+
if (!(!Object.prototype.hasOwnProperty.call(t, "user_status") || !t.user_status.enabled) && l.getCurrentUser())
|
|
56
|
+
try {
|
|
57
|
+
const { data: r } = await f.default.get(o.generateOcsUrl("apps/user_status/api/v1/statuses/{userId}", { userId: e })), {
|
|
58
|
+
status: u,
|
|
59
|
+
message: g,
|
|
60
|
+
icon: S
|
|
61
|
+
} = r.ocs.data;
|
|
62
|
+
this.userStatus.status = u, this.userStatus.message = g || "", this.userStatus.icon = S || "", this.hasStatus = !0;
|
|
63
|
+
} catch (r) {
|
|
64
|
+
if (r.response.status === 404 && ((a = (s = r.response.data.ocs) == null ? void 0 : s.data) == null ? void 0 : a.length) === 0)
|
|
65
|
+
return;
|
|
66
|
+
console.error(r);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
const v = A.getBuilder("nextcloud").persist().build();
|
|
72
|
+
function C(e) {
|
|
73
|
+
const t = v.getItem("user-has-avatar." + e);
|
|
74
|
+
return typeof t == "string" ? !!t : null;
|
|
75
|
+
}
|
|
76
|
+
function d(e, t) {
|
|
77
|
+
e && v.setItem("user-has-avatar." + e, t);
|
|
78
|
+
}
|
|
79
|
+
const D = {
|
|
80
|
+
name: "NcAvatar",
|
|
81
|
+
directives: {
|
|
82
|
+
ClickOutside: x.vOnClickOutside
|
|
83
|
+
},
|
|
84
|
+
components: {
|
|
85
|
+
DotsHorizontal: L.default,
|
|
86
|
+
NcActions: m,
|
|
87
|
+
NcActionLink: y,
|
|
88
|
+
NcButton: U,
|
|
89
|
+
NcLoadingIcon: _
|
|
90
|
+
},
|
|
91
|
+
mixins: [p],
|
|
92
|
+
props: {
|
|
93
|
+
/**
|
|
94
|
+
* Set a custom url to the avatar image
|
|
95
|
+
* either the url, user or displayName property must be defined
|
|
96
|
+
*/
|
|
97
|
+
url: {
|
|
98
|
+
type: String,
|
|
99
|
+
default: void 0
|
|
100
|
+
},
|
|
101
|
+
/**
|
|
102
|
+
* Set a css icon-class for an icon to be used instead of the avatar.
|
|
103
|
+
*/
|
|
104
|
+
iconClass: {
|
|
105
|
+
type: String,
|
|
106
|
+
default: void 0
|
|
107
|
+
},
|
|
108
|
+
/**
|
|
109
|
+
* Set the user id to fetch the avatar
|
|
110
|
+
* either the url, user or displayName property must be defined
|
|
111
|
+
*/
|
|
112
|
+
user: {
|
|
113
|
+
type: String,
|
|
114
|
+
default: void 0
|
|
115
|
+
},
|
|
116
|
+
/**
|
|
117
|
+
* Whether or not to display the user-status
|
|
118
|
+
*/
|
|
119
|
+
showUserStatus: {
|
|
120
|
+
type: Boolean,
|
|
121
|
+
default: !0
|
|
122
|
+
},
|
|
123
|
+
/**
|
|
124
|
+
* Whether or not to the status-icon should be used instead of online/away
|
|
125
|
+
*/
|
|
126
|
+
showUserStatusCompact: {
|
|
127
|
+
type: Boolean,
|
|
128
|
+
default: !0
|
|
129
|
+
},
|
|
130
|
+
/**
|
|
131
|
+
* When the user status was preloaded via another source it can be handed in with this property to save the request.
|
|
132
|
+
* If this property is not set the status will be fetched automatically.
|
|
133
|
+
* If a preloaded no-status is available provide this object with properties "status", "icon" and "message" set to null.
|
|
134
|
+
*/
|
|
135
|
+
preloadedUserStatus: {
|
|
136
|
+
type: Object,
|
|
137
|
+
default: void 0
|
|
138
|
+
},
|
|
139
|
+
/**
|
|
140
|
+
* Is the user a guest user (then we have to user a different endpoint)
|
|
141
|
+
*/
|
|
142
|
+
isGuest: {
|
|
143
|
+
type: Boolean,
|
|
144
|
+
default: !1
|
|
145
|
+
},
|
|
146
|
+
/**
|
|
147
|
+
* Set a display name that will be rendered as a tooltip
|
|
148
|
+
* either the url, user or displayName property must be defined
|
|
149
|
+
* specify just the displayname to generate a placeholder avatar without
|
|
150
|
+
* trying to fetch the avatar based on the user id
|
|
151
|
+
*/
|
|
152
|
+
displayName: {
|
|
153
|
+
type: String,
|
|
154
|
+
default: void 0
|
|
155
|
+
},
|
|
156
|
+
/**
|
|
157
|
+
* Set a size in px for the rendered avatar
|
|
158
|
+
*/
|
|
159
|
+
size: {
|
|
160
|
+
type: Number,
|
|
161
|
+
default: 32
|
|
162
|
+
},
|
|
163
|
+
/**
|
|
164
|
+
* Placeholder avatars will be automatically generated when this is set to true
|
|
165
|
+
*/
|
|
166
|
+
allowPlaceholder: {
|
|
167
|
+
type: Boolean,
|
|
168
|
+
default: !0
|
|
169
|
+
},
|
|
170
|
+
/**
|
|
171
|
+
* Disable the tooltip
|
|
172
|
+
*/
|
|
173
|
+
disableTooltip: {
|
|
174
|
+
type: Boolean,
|
|
175
|
+
default: !1
|
|
176
|
+
},
|
|
177
|
+
/**
|
|
178
|
+
* Disable the menu
|
|
179
|
+
*/
|
|
180
|
+
disableMenu: {
|
|
181
|
+
type: Boolean,
|
|
182
|
+
default: !1
|
|
183
|
+
},
|
|
184
|
+
/**
|
|
185
|
+
* Declares a custom tooltip when not null
|
|
186
|
+
* Fallback will be the displayName
|
|
187
|
+
*
|
|
188
|
+
* requires disableTooltip not to be set to true
|
|
189
|
+
*/
|
|
190
|
+
tooltipMessage: {
|
|
191
|
+
type: String,
|
|
192
|
+
default: null
|
|
193
|
+
},
|
|
194
|
+
/**
|
|
195
|
+
* Declares username is not a user's name, when true.
|
|
196
|
+
* Prevents loading user's avatar from server and forces generating colored initials,
|
|
197
|
+
* i.e. if the user is a group
|
|
198
|
+
*/
|
|
199
|
+
isNoUser: {
|
|
200
|
+
type: Boolean,
|
|
201
|
+
default: !1
|
|
202
|
+
},
|
|
203
|
+
/**
|
|
204
|
+
* Selector for the popover menu container
|
|
205
|
+
*/
|
|
206
|
+
menuContainer: {
|
|
207
|
+
type: [String, Object, Element, Boolean],
|
|
208
|
+
default: "body"
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
data() {
|
|
212
|
+
return {
|
|
213
|
+
avatarUrlLoaded: null,
|
|
214
|
+
avatarSrcSetLoaded: null,
|
|
215
|
+
userDoesNotExist: !1,
|
|
216
|
+
isAvatarLoaded: !1,
|
|
217
|
+
isMenuLoaded: !1,
|
|
218
|
+
contactsMenuLoading: !1,
|
|
219
|
+
contactsMenuActions: [],
|
|
220
|
+
contactsMenuOpenState: !1
|
|
221
|
+
};
|
|
222
|
+
},
|
|
223
|
+
computed: {
|
|
224
|
+
avatarAriaLabel() {
|
|
225
|
+
var e, t;
|
|
226
|
+
if (this.hasMenu)
|
|
227
|
+
return this.canDisplayUserStatus || this.showUserStatusIconOnAvatar ? i.t("Avatar of {displayName}, {status}", { displayName: (e = this.displayName) != null ? e : this.user, status: this.userStatusText }) : i.t("Avatar of {displayName}", { displayName: (t = this.displayName) != null ? t : this.user });
|
|
228
|
+
},
|
|
229
|
+
/** Translated current user status */
|
|
230
|
+
userStatusText() {
|
|
231
|
+
switch (this.userStatus.status) {
|
|
232
|
+
case "away":
|
|
233
|
+
return i.t("away");
|
|
234
|
+
case "dnd":
|
|
235
|
+
return i.t("do not disturb");
|
|
236
|
+
case "online":
|
|
237
|
+
return i.t("online");
|
|
238
|
+
case "offline":
|
|
239
|
+
return i.t("offline");
|
|
240
|
+
default:
|
|
241
|
+
return this.userStatus.status;
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
/**
|
|
245
|
+
* If the avatar has no menu no aria-label is assigned, but for accessibility we still need the status to be accessible
|
|
246
|
+
* So this sets `role=img` on the status indicator (span with background) and the required `alt` and `aria-label` attributes.
|
|
247
|
+
*/
|
|
248
|
+
userStatusRole() {
|
|
249
|
+
if (this.hasMenu)
|
|
250
|
+
return;
|
|
251
|
+
const e = i.t("User status: {status}", { status: this.userStatusText });
|
|
252
|
+
return {
|
|
253
|
+
role: "img",
|
|
254
|
+
"aria-label": e,
|
|
255
|
+
alt: e
|
|
256
|
+
};
|
|
257
|
+
},
|
|
258
|
+
canDisplayUserStatus() {
|
|
259
|
+
return this.showUserStatus && this.hasStatus && ["online", "away", "dnd"].includes(this.userStatus.status);
|
|
260
|
+
},
|
|
261
|
+
showUserStatusIconOnAvatar() {
|
|
262
|
+
return this.showUserStatus && this.showUserStatusCompact && this.hasStatus && this.userStatus.status !== "dnd" && this.userStatus.icon;
|
|
263
|
+
},
|
|
264
|
+
getUserIdentifier() {
|
|
265
|
+
return this.isDisplayNameDefined ? this.displayName : this.isUserDefined ? this.user : "";
|
|
266
|
+
},
|
|
267
|
+
isUserDefined() {
|
|
268
|
+
return typeof this.user < "u";
|
|
269
|
+
},
|
|
270
|
+
isDisplayNameDefined() {
|
|
271
|
+
return typeof this.displayName < "u";
|
|
272
|
+
},
|
|
273
|
+
isUrlDefined() {
|
|
274
|
+
return typeof this.url < "u";
|
|
275
|
+
},
|
|
276
|
+
hasMenu() {
|
|
277
|
+
var e;
|
|
278
|
+
return this.disableMenu ? !1 : this.isMenuLoaded ? this.menu.length > 0 : !(this.user === ((e = l.getCurrentUser()) == null ? void 0 : e.uid) || this.userDoesNotExist || this.url);
|
|
279
|
+
},
|
|
280
|
+
shouldShowPlaceholder() {
|
|
281
|
+
return this.allowPlaceholder && this.userDoesNotExist;
|
|
282
|
+
},
|
|
283
|
+
avatarStyle() {
|
|
284
|
+
return {
|
|
285
|
+
"--size": this.size + "px",
|
|
286
|
+
lineHeight: this.size + "px",
|
|
287
|
+
fontSize: Math.round(this.size * 0.45) + "px"
|
|
288
|
+
};
|
|
289
|
+
},
|
|
290
|
+
initialsWrapperStyle() {
|
|
291
|
+
const { r: e, g: t, b: s } = c(this.getUserIdentifier);
|
|
292
|
+
return {
|
|
293
|
+
backgroundColor: `rgba(${e}, ${t}, ${s}, 0.1)`
|
|
294
|
+
};
|
|
295
|
+
},
|
|
296
|
+
initialsStyle() {
|
|
297
|
+
const { r: e, g: t, b: s } = c(this.getUserIdentifier);
|
|
298
|
+
return {
|
|
299
|
+
color: `rgb(${e}, ${t}, ${s})`
|
|
300
|
+
};
|
|
301
|
+
},
|
|
302
|
+
tooltip() {
|
|
303
|
+
return this.disableTooltip ? !1 : this.tooltipMessage ? this.tooltipMessage : this.displayName;
|
|
304
|
+
},
|
|
305
|
+
initials() {
|
|
306
|
+
let e;
|
|
307
|
+
if (this.shouldShowPlaceholder) {
|
|
308
|
+
const t = this.getUserIdentifier, s = t.indexOf(" ");
|
|
309
|
+
t === "" ? e = "?" : (e = String.fromCodePoint(t.codePointAt(0)), s !== -1 && (e = e.concat(String.fromCodePoint(t.codePointAt(s + 1)))));
|
|
310
|
+
}
|
|
311
|
+
return e.toUpperCase();
|
|
312
|
+
},
|
|
313
|
+
menu() {
|
|
314
|
+
const e = this.contactsMenuActions.map((s) => ({
|
|
315
|
+
href: s.hyperlink,
|
|
316
|
+
icon: s.icon,
|
|
317
|
+
text: s.title
|
|
318
|
+
}));
|
|
319
|
+
function t(s) {
|
|
320
|
+
const a = document.createTextNode(s), r = document.createElement("p");
|
|
321
|
+
return r.appendChild(a), r.innerHTML;
|
|
322
|
+
}
|
|
323
|
+
return this.showUserStatus && (this.userStatus.icon || this.userStatus.message) ? [{
|
|
324
|
+
href: "#",
|
|
325
|
+
icon: `data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg'><text x='0' y='14' font-size='14'>${t(this.userStatus.icon)}</text></svg>`,
|
|
326
|
+
text: `${this.userStatus.message}`
|
|
327
|
+
}].concat(e) : e;
|
|
328
|
+
}
|
|
329
|
+
},
|
|
330
|
+
watch: {
|
|
331
|
+
url() {
|
|
332
|
+
this.userDoesNotExist = !1, this.loadAvatarUrl();
|
|
333
|
+
},
|
|
334
|
+
user() {
|
|
335
|
+
this.userDoesNotExist = !1, this.isMenuLoaded = !1, this.loadAvatarUrl();
|
|
336
|
+
}
|
|
337
|
+
},
|
|
338
|
+
mounted() {
|
|
339
|
+
this.loadAvatarUrl(), n.subscribe("settings:avatar:updated", this.loadAvatarUrl), n.subscribe("settings:display-name:updated", this.loadAvatarUrl), this.showUserStatus && this.user && !this.isNoUser && (this.preloadedUserStatus ? (this.userStatus.status = this.preloadedUserStatus.status || "", this.userStatus.message = this.preloadedUserStatus.message || "", this.userStatus.icon = this.preloadedUserStatus.icon || "", this.hasStatus = this.preloadedUserStatus.status !== null) : this.fetchUserStatus(this.user), n.subscribe("user_status:status.updated", this.handleUserStatusUpdated));
|
|
340
|
+
},
|
|
341
|
+
beforeDestroy() {
|
|
342
|
+
n.unsubscribe("settings:avatar:updated", this.loadAvatarUrl), n.unsubscribe("settings:display-name:updated", this.loadAvatarUrl), this.showUserStatus && this.user && !this.isNoUser && n.unsubscribe("user_status:status.updated", this.handleUserStatusUpdated);
|
|
343
|
+
},
|
|
344
|
+
methods: {
|
|
345
|
+
t: i.t,
|
|
346
|
+
handleUserStatusUpdated(e) {
|
|
347
|
+
this.user === e.userId && (this.userStatus = {
|
|
348
|
+
status: e.status,
|
|
349
|
+
icon: e.icon,
|
|
350
|
+
message: e.message
|
|
351
|
+
});
|
|
352
|
+
},
|
|
353
|
+
/**
|
|
354
|
+
* Toggle the popover menu on click or enter
|
|
355
|
+
* @param {KeyboardEvent|MouseEvent} event the UI event
|
|
356
|
+
*/
|
|
357
|
+
async toggleMenu(e) {
|
|
358
|
+
e.type === "keydown" && e.key !== "Enter" || (this.contactsMenuOpenState || await this.fetchContactsMenu(), this.contactsMenuOpenState = !this.contactsMenuOpenState);
|
|
359
|
+
},
|
|
360
|
+
closeMenu() {
|
|
361
|
+
this.contactsMenuOpenState = !1;
|
|
362
|
+
},
|
|
363
|
+
async fetchContactsMenu() {
|
|
364
|
+
this.contactsMenuLoading = !0;
|
|
365
|
+
try {
|
|
366
|
+
const e = encodeURIComponent(this.user), { data: t } = await f.default.post(o.generateUrl("contactsmenu/findOne"), `shareType=0&shareWith=${e}`);
|
|
367
|
+
this.contactsMenuActions = t.topAction ? [t.topAction].concat(t.actions) : t.actions;
|
|
368
|
+
} catch {
|
|
369
|
+
this.contactsMenuOpenState = !1;
|
|
370
|
+
}
|
|
371
|
+
this.contactsMenuLoading = !1, this.isMenuLoaded = !0;
|
|
372
|
+
},
|
|
373
|
+
/**
|
|
374
|
+
* Handle avatar loading if user or url defined
|
|
375
|
+
*/
|
|
376
|
+
loadAvatarUrl() {
|
|
377
|
+
if (this.isAvatarLoaded = !1, !this.isUrlDefined && (!this.isUserDefined || this.isNoUser)) {
|
|
378
|
+
this.isAvatarLoaded = !0, this.userDoesNotExist = !0;
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
if (this.isUrlDefined) {
|
|
382
|
+
this.updateImageIfValid(this.url);
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
if (this.size <= 64) {
|
|
386
|
+
const e = this.avatarUrlGenerator(this.user, 64), t = [
|
|
387
|
+
e + " 1x",
|
|
388
|
+
this.avatarUrlGenerator(this.user, 512) + " 8x"
|
|
389
|
+
].join(", ");
|
|
390
|
+
this.updateImageIfValid(e, t);
|
|
391
|
+
} else {
|
|
392
|
+
const e = this.avatarUrlGenerator(this.user, 512);
|
|
393
|
+
this.updateImageIfValid(e);
|
|
394
|
+
}
|
|
395
|
+
},
|
|
396
|
+
/**
|
|
397
|
+
* Generate an avatar url from the server's avatar endpoint
|
|
398
|
+
*
|
|
399
|
+
* @param {string} user the user id
|
|
400
|
+
* @param {number} size the desired size
|
|
401
|
+
* @return {string}
|
|
402
|
+
*/
|
|
403
|
+
avatarUrlGenerator(e, t) {
|
|
404
|
+
var u;
|
|
405
|
+
const s = window.getComputedStyle(document.body).getPropertyValue("--background-invert-if-dark") === "invert(100%)";
|
|
406
|
+
let a = "/avatar/{user}/{size}" + (s ? "/dark" : "");
|
|
407
|
+
this.isGuest && (a = "/avatar/guest/{user}/{size}" + (s ? "/dark" : ""));
|
|
408
|
+
let r = o.generateUrl(
|
|
409
|
+
a,
|
|
410
|
+
{
|
|
411
|
+
user: e,
|
|
412
|
+
size: t
|
|
413
|
+
}
|
|
414
|
+
);
|
|
415
|
+
return e === ((u = l.getCurrentUser()) == null ? void 0 : u.uid) && typeof oc_userconfig < "u" && (r += "?v=" + oc_userconfig.avatar.version), r;
|
|
416
|
+
},
|
|
417
|
+
/**
|
|
418
|
+
* Check if the provided url is valid and update Avatar if so
|
|
419
|
+
*
|
|
420
|
+
* @param {string} url the avatar url
|
|
421
|
+
* @param {Array} srcset the avatar srcset
|
|
422
|
+
*/
|
|
423
|
+
updateImageIfValid(e, t = null) {
|
|
424
|
+
const s = C(this.user);
|
|
425
|
+
if (this.isUserDefined && typeof s == "boolean") {
|
|
426
|
+
this.isAvatarLoaded = !0, this.avatarUrlLoaded = e, t && (this.avatarSrcSetLoaded = t), s === !1 && (this.userDoesNotExist = !0);
|
|
427
|
+
return;
|
|
428
|
+
}
|
|
429
|
+
const a = new Image();
|
|
430
|
+
a.onload = () => {
|
|
431
|
+
this.avatarUrlLoaded = e, t && (this.avatarSrcSetLoaded = t), this.isAvatarLoaded = !0, d(this.user, !0);
|
|
432
|
+
}, a.onerror = () => {
|
|
433
|
+
console.debug("Invalid avatar url", e), this.avatarUrlLoaded = null, this.avatarSrcSetLoaded = null, this.userDoesNotExist = !0, this.isAvatarLoaded = !1, d(this.user, !1);
|
|
434
|
+
}, t && (a.srcset = t), a.src = e;
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
};
|
|
438
|
+
var k = function() {
|
|
439
|
+
var t = this, s = t._self._c;
|
|
440
|
+
return s("span", t._g({ directives: [{ name: "click-outside", rawName: "v-click-outside", value: t.closeMenu, expression: "closeMenu" }], ref: "main", staticClass: "avatardiv popovermenu-wrapper", class: {
|
|
441
|
+
"avatardiv--unknown": t.userDoesNotExist,
|
|
442
|
+
"avatardiv--with-menu": t.hasMenu,
|
|
443
|
+
"avatardiv--with-menu-loading": t.contactsMenuLoading
|
|
444
|
+
}, style: t.avatarStyle, attrs: { title: t.tooltip, tabindex: t.hasMenu ? "0" : void 0, "aria-label": t.avatarAriaLabel, role: t.hasMenu ? "button" : void 0 } }, t.hasMenu ? {
|
|
445
|
+
click: t.toggleMenu,
|
|
446
|
+
keydown: t.toggleMenu
|
|
447
|
+
} : null), [t._t("icon", function() {
|
|
448
|
+
return [t.iconClass ? s("span", { staticClass: "avatar-class-icon", class: t.iconClass }) : t.isAvatarLoaded && !t.userDoesNotExist ? s("img", { attrs: { src: t.avatarUrlLoaded, srcset: t.avatarSrcSetLoaded, alt: "" } }) : t._e()];
|
|
449
|
+
}), t.hasMenu && !t.menu.length ? s("NcButton", { staticClass: "action-item action-item__menutoggle", attrs: { "aria-label": t.t("Open contact menu"), type: "tertiary-no-background" }, scopedSlots: t._u([{ key: "icon", fn: function() {
|
|
450
|
+
return [t.contactsMenuLoading ? s("NcLoadingIcon") : s("DotsHorizontal", { attrs: { size: 20 } })];
|
|
451
|
+
}, proxy: !0 }], null, !1, 2617833509) }) : t.hasMenu ? s("NcActions", { attrs: { "force-menu": "", "manual-open": "", type: "tertiary-no-background", container: t.menuContainer, open: t.contactsMenuOpenState }, scopedSlots: t._u([t.contactsMenuLoading ? { key: "icon", fn: function() {
|
|
452
|
+
return [s("NcLoadingIcon")];
|
|
453
|
+
}, proxy: !0 } : null], null, !0) }, t._l(t.menu, function(a, r) {
|
|
454
|
+
return s("NcActionLink", { key: r, attrs: { href: a.href, icon: a.icon } }, [t._v(" " + t._s(a.text) + " ")]);
|
|
455
|
+
}), 1) : t._e(), t.showUserStatusIconOnAvatar ? s("span", { staticClass: "avatardiv__user-status avatardiv__user-status--icon" }, [t._v(" " + t._s(t.userStatus.icon) + " ")]) : t.canDisplayUserStatus ? s("span", t._b({ staticClass: "avatardiv__user-status", class: "avatardiv__user-status--" + t.userStatus.status }, "span", t.userStatusRole, !1)) : t._e(), t.userDoesNotExist && !(t.iconClass || t.$slots.icon) ? s("span", { staticClass: "avatardiv__initials-wrapper", style: t.initialsWrapperStyle }, [s("span", { staticClass: "unknown", style: t.initialsStyle }, [t._v(" " + t._s(t.initials) + " ")])]) : t._e()], 2);
|
|
456
|
+
}, I = [], O = /* @__PURE__ */ b.normalizeComponent(
|
|
457
|
+
D,
|
|
458
|
+
k,
|
|
459
|
+
I,
|
|
460
|
+
!1,
|
|
461
|
+
null,
|
|
462
|
+
"538ddb41",
|
|
463
|
+
null,
|
|
464
|
+
null
|
|
465
|
+
);
|
|
466
|
+
const q = O.exports;
|
|
467
|
+
exports.NcAvatar = q;
|
|
468
|
+
exports.userStatus = p;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-032137a6.cjs","sources":["../../src/mixins/userStatus.js","../../src/components/NcAvatar/NcAvatar.vue"],"sourcesContent":["/**\n * @copyright Copyright (c) 2020 Georg Ehrke <georg-nextcloud@ehrke.email>\n *\n * @author Georg Ehrke <georg-nextcloud@ehrke.email>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport axios from '@nextcloud/axios'\nimport { getCapabilities } from '@nextcloud/capabilities'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\thasStatus: false,\n\t\t\tuserStatus: {\n\t\t\t\tstatus: null,\n\t\t\t\tmessage: null,\n\t\t\t\ticon: null,\n\t\t\t},\n\t\t}\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Fetches the user-status from the server\n\t\t *\n\t\t * @param {string} userId UserId of the user to fetch the status for\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync fetchUserStatus(userId) {\n\t\t\tif (!userId) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst capabilities = getCapabilities()\n\t\t\tif (!Object.prototype.hasOwnProperty.call(capabilities, 'user_status') || !capabilities.user_status.enabled) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// User status endpoint is not available for guests.\n\t\t\tif (!getCurrentUser()) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst { data } = await axios.get(generateOcsUrl('apps/user_status/api/v1/statuses/{userId}', { userId }))\n\t\t\t\tconst {\n\t\t\t\t\tstatus,\n\t\t\t\t\tmessage,\n\t\t\t\t\ticon,\n\t\t\t\t} = data.ocs.data\n\t\t\t\tthis.userStatus.status = status\n\t\t\t\tthis.userStatus.message = message || ''\n\t\t\t\tthis.userStatus.icon = icon || ''\n\t\t\t\tthis.hasStatus = true\n\t\t\t} catch (e) {\n\t\t\t\tif (e.response.status === 404 && e.response.data.ocs?.data?.length === 0) {\n\t\t\t\t\t// User just has no status set, so don't log it\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconsole.error(e)\n\t\t\t}\n\t\t},\n\t},\n}\n","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<docs>\n\n### Basic user avatar\n\n```vue\n\t<NcAvatar user=\"willywonka\" display-name=\"Willy Wonka\" />\n```\n\n### Avatar with image\n\n```vue\n\t<NcAvatar url=\"https://nextcloud.com/wp-content/themes/next/assets/img/common/nextcloud-square-logo.png\" />\n```\n\n### Avatar with material design icon\n\n```\n <template>\n\t<NcAvatar>\n\t\t<template #icon>\n\t\t\t<AccountMultiple :size=\"20\" />\n\t\t</template>\n\t</NcAvatar>\n</template>\n<script>\nimport AccountMultiple from 'vue-material-design-icons/AccountMultiple'\n\nexport default {\n\tcomponents: {\n\t\tAccountMultiple,\n\t},\n }\n </script>\n```\n\n### Avatar with preloaded status\n```\n <template>\n\t<NcAvatar user=\"janedoe\"\n\t\tdisplay-name=\"Jane Doe\"\n\t\t:preloaded-user-status=\"status\">\n\t</NcAvatar>\n</template>\n<script>\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tstatus: {\n\t\t\t\ticon: '',\n\t\t\t\tstatus: 'dnd',\n\t\t\t\tmessage: 'Not busy',\n\t\t\t},\n\t\t}\n\t},\n }\n </script>\n```\n\n### Avatar for non-users\n\n```vue\n\t<NcAvatar display-name=\"Robbie Hyeon-Jeong\" :is-no-user=\"true\" />\n```\n\n### Avatar on complex background\n\n```\n<template>\n\t<div class=\"avatar-background\">\n\t\t<NcAvatar class=\"avatar\" :is-no-user=\"true\" display-name=\"Cecilia Rohese\" />\n\t</div>\n</template>\n<style scoped>\n.avatar-background {\n\twidth: 80px;\n\theight: 60px;\n\tbackground: linear-gradient(to bottom, #0057b8 0%, #0057b8 49.99%, #ffd700 50%, #ffd700 100%);\n}\n\n.avatar {\n\tmargin: 15px 25px;\n}\n</style>\n```\n\n</docs>\n<template>\n\t<span ref=\"main\"\n\t\tv-click-outside=\"closeMenu\"\n\t\t:class=\"{\n\t\t\t'avatardiv--unknown': userDoesNotExist,\n\t\t\t'avatardiv--with-menu': hasMenu,\n\t\t\t'avatardiv--with-menu-loading': contactsMenuLoading\n\t\t}\"\n\t\t:title=\"tooltip\"\n\t\t:style=\"avatarStyle\"\n\t\tclass=\"avatardiv popovermenu-wrapper\"\n\t\t:tabindex=\"hasMenu ? '0' : undefined\"\n\t\t:aria-label=\"avatarAriaLabel\"\n\t\t:role=\"hasMenu ? 'button' : undefined\"\n\t\tv-on=\"hasMenu ? {\n\t\t\tclick: toggleMenu,\n\t\t\tkeydown: toggleMenu,\n\t\t} : null\">\n\t\t<!-- @slot Icon slot -->\n\t\t<slot name=\"icon\">\n\t\t\t<!-- Avatar icon or image -->\n\t\t\t<span v-if=\"iconClass\" :class=\"iconClass\" class=\"avatar-class-icon\" />\n\t\t\t<img v-else-if=\"isAvatarLoaded && !userDoesNotExist\"\n\t\t\t\t:src=\"avatarUrlLoaded\"\n\t\t\t\t:srcset=\"avatarSrcSetLoaded\"\n\t\t\t\talt=\"\">\n\t\t</slot>\n\n\t\t<!-- Contact menu -->\n\t\t<!-- We show a button if the menu is not loaded yet. -->\n\t\t<NcButton v-if=\"hasMenu && !menu.length\"\n\t\t\t:aria-label=\"t('Open contact menu')\"\n\t\t\ttype=\"tertiary-no-background\"\n\t\t\tclass=\"action-item action-item__menutoggle\">\n\t\t\t<template #icon>\n\t\t\t\t<NcLoadingIcon v-if=\"contactsMenuLoading\" />\n\t\t\t\t<DotsHorizontal v-else :size=\"20\" />\n\t\t\t</template>\n\t\t</NcButton>\n\t\t<NcActions v-else-if=\"hasMenu\"\n\t\t\tforce-menu\n\t\t\tmanual-open\n\t\t\ttype=\"tertiary-no-background\"\n\t\t\t:container=\"menuContainer\"\n\t\t\t:open=\"contactsMenuOpenState\">\n\t\t\t<NcActionLink v-for=\"(item, key) in menu\"\n\t\t\t\t:key=\"key\"\n\t\t\t\t:href=\"item.href\"\n\t\t\t\t:icon=\"item.icon\">\n\t\t\t\t{{ item.text }}\n\t\t\t</NcActionLink>\n\t\t\t<template v-if=\"contactsMenuLoading\" #icon>\n\t\t\t\t<NcLoadingIcon />\n\t\t\t</template>\n\t\t</NcActions>\n\n\t\t<!-- Avatar status -->\n\t\t<span v-if=\"showUserStatusIconOnAvatar\" class=\"avatardiv__user-status avatardiv__user-status--icon\">\n\t\t\t{{ userStatus.icon }}\n\t\t</span>\n\t\t<span v-else-if=\"canDisplayUserStatus\"\n\t\t\tclass=\"avatardiv__user-status\"\n\t\t\t:class=\"'avatardiv__user-status--' + userStatus.status\"\n\t\t\tv-bind=\"userStatusRole\" />\n\n\t\t<!-- Show the letter if no avatar nor icon class -->\n\t\t<span v-if=\"userDoesNotExist && !(iconClass || $slots.icon)\"\n\t\t\t:style=\"initialsWrapperStyle\"\n\t\t\tclass=\"avatardiv__initials-wrapper\">\n\t\t\t<span :style=\"initialsStyle\" class=\"unknown\">\n\t\t\t\t{{ initials }}\n\t\t\t</span>\n\t\t</span>\n\t</span>\n</template>\n\n<script>\nimport NcActions from '../NcActions/index.js'\nimport NcActionLink from '../NcActionLink/index.js'\nimport NcButton from '../NcButton/index.js'\nimport NcLoadingIcon from '../NcLoadingIcon/index.js'\nimport usernameToColor from '../../functions/usernameToColor/index.js'\nimport { userStatus } from '../../mixins/index.js'\nimport { t } from '../../l10n.js'\n\nimport axios from '@nextcloud/axios'\nimport DotsHorizontal from 'vue-material-design-icons/DotsHorizontal.vue'\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport { getBuilder } from '@nextcloud/browser-storage'\nimport { generateUrl } from '@nextcloud/router'\nimport { vOnClickOutside as ClickOutside } from '@vueuse/components'\n\nconst browserStorage = getBuilder('nextcloud').persist().build()\n\n/**\n * @param {string} userId The id of the user\n */\nfunction getUserHasAvatar(userId) {\n\tconst flag = browserStorage.getItem('user-has-avatar.' + userId)\n\tif (typeof flag === 'string') {\n\t\treturn Boolean(flag)\n\t}\n\treturn null\n}\n\n/**\n * @param {string} userId The id of the user\n * @param {boolean} flag Has the user an avatar\n */\nfunction setUserHasAvatar(userId, flag) {\n\tif (userId) {\n\t\tbrowserStorage.setItem('user-has-avatar.' + userId, flag)\n\t}\n}\n\nexport default {\n\tname: 'NcAvatar',\n\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\tcomponents: {\n\t\tDotsHorizontal,\n\t\tNcActions,\n\t\tNcActionLink,\n\t\tNcButton,\n\t\tNcLoadingIcon,\n\t},\n\tmixins: [userStatus],\n\tprops: {\n\t\t/**\n\t\t * Set a custom url to the avatar image\n\t\t * either the url, user or displayName property must be defined\n\t\t */\n\t\turl: {\n\t\t\ttype: String,\n\t\t\tdefault: undefined,\n\t\t},\n\t\t/**\n\t\t * Set a css icon-class for an icon to be used instead of the avatar.\n\t\t */\n\t\ticonClass: {\n\t\t\ttype: String,\n\t\t\tdefault: undefined,\n\t\t},\n\t\t/**\n\t\t * Set the user id to fetch the avatar\n\t\t * either the url, user or displayName property must be defined\n\t\t */\n\t\tuser: {\n\t\t\ttype: String,\n\t\t\tdefault: undefined,\n\t\t},\n\t\t/**\n\t\t * Whether or not to display the user-status\n\t\t */\n\t\tshowUserStatus: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\t/**\n\t\t * Whether or not to the status-icon should be used instead of online/away\n\t\t */\n\t\tshowUserStatusCompact: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\t/**\n\t\t * When the user status was preloaded via another source it can be handed in with this property to save the request.\n\t\t * If this property is not set the status will be fetched automatically.\n\t\t * If a preloaded no-status is available provide this object with properties \"status\", \"icon\" and \"message\" set to null.\n\t\t */\n\t\tpreloadedUserStatus: {\n\t\t\ttype: Object,\n\t\t\tdefault: undefined,\n\t\t},\n\t\t/**\n\t\t * Is the user a guest user (then we have to user a different endpoint)\n\t\t */\n\t\tisGuest: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * Set a display name that will be rendered as a tooltip\n\t\t * either the url, user or displayName property must be defined\n\t\t * specify just the displayname to generate a placeholder avatar without\n\t\t * trying to fetch the avatar based on the user id\n\t\t */\n\t\tdisplayName: {\n\t\t\ttype: String,\n\t\t\tdefault: undefined,\n\t\t},\n\t\t/**\n\t\t * Set a size in px for the rendered avatar\n\t\t */\n\t\tsize: {\n\t\t\ttype: Number,\n\t\t\tdefault: 32,\n\t\t},\n\t\t/**\n\t\t * Placeholder avatars will be automatically generated when this is set to true\n\t\t */\n\t\tallowPlaceholder: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\t/**\n\t\t * Disable the tooltip\n\t\t */\n\t\tdisableTooltip: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * Disable the menu\n\t\t */\n\t\tdisableMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * Declares a custom tooltip when not null\n\t\t * Fallback will be the displayName\n\t\t *\n\t\t * requires disableTooltip not to be set to true\n\t\t */\n\t\ttooltipMessage: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Declares username is not a user's name, when true.\n\t\t * Prevents loading user's avatar from server and forces generating colored initials,\n\t\t * i.e. if the user is a group\n\t\t */\n\t\tisNoUser: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Selector for the popover menu container\n\t\t */\n\t\tmenuContainer: {\n\t\t\ttype: [String, Object, Element, Boolean],\n\t\t\tdefault: 'body',\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tavatarUrlLoaded: null,\n\t\t\tavatarSrcSetLoaded: null,\n\t\t\tuserDoesNotExist: false,\n\t\t\tisAvatarLoaded: false,\n\t\t\tisMenuLoaded: false,\n\t\t\tcontactsMenuLoading: false,\n\t\t\tcontactsMenuActions: [],\n\t\t\tcontactsMenuOpenState: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tavatarAriaLabel() {\n\t\t\t// aria-label is only allowed on interactive elements\n\t\t\tif (!this.hasMenu) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (this.canDisplayUserStatus || this.showUserStatusIconOnAvatar) {\n\t\t\t\treturn t('Avatar of {displayName}, {status}', { displayName: this.displayName ?? this.user, status: this.userStatusText })\n\t\t\t}\n\t\t\treturn t('Avatar of {displayName}', { displayName: this.displayName ?? this.user })\n\t\t},\n\t\t/** Translated current user status */\n\t\tuserStatusText() {\n\t\t\tswitch (this.userStatus.status) {\n\t\t\t// TRANSLATORS: User status if the user is currently away from keyboard\n\t\t\tcase 'away': return t('away')\n\t\t\tcase 'dnd': return t('do not disturb')\n\t\t\tcase 'online': return t('online')\n\t\t\tcase 'offline': return t('offline')\n\t\t\tdefault: return this.userStatus.status\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * If the avatar has no menu no aria-label is assigned, but for accessibility we still need the status to be accessible\n\t\t * So this sets `role=img` on the status indicator (span with background) and the required `alt` and `aria-label` attributes.\n\t\t */\n\t\tuserStatusRole() {\n\t\t\t// only needed if non-interactive, otherwise the aria-label is set\n\t\t\tif (this.hasMenu) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst label = t('User status: {status}', { status: this.userStatusText })\n\t\t\treturn {\n\t\t\t\trole: 'img',\n\t\t\t\t'aria-label': label,\n\t\t\t\talt: label,\n\t\t\t}\n\t\t},\n\t\tcanDisplayUserStatus() {\n\t\t\treturn this.showUserStatus\n\t\t\t\t&& this.hasStatus\n\t\t\t\t&& ['online', 'away', 'dnd'].includes(this.userStatus.status)\n\t\t},\n\t\tshowUserStatusIconOnAvatar() {\n\t\t\treturn this.showUserStatus\n\t\t\t\t&& this.showUserStatusCompact\n\t\t\t\t&& this.hasStatus\n\t\t\t\t&& this.userStatus.status !== 'dnd'\n\t\t\t\t&& this.userStatus.icon\n\t\t},\n\t\tgetUserIdentifier() {\n\t\t\tif (this.isDisplayNameDefined) {\n\t\t\t\treturn this.displayName\n\t\t\t}\n\t\t\tif (this.isUserDefined) {\n\t\t\t\treturn this.user\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\t\tisUserDefined() {\n\t\t\treturn typeof this.user !== 'undefined'\n\t\t},\n\t\tisDisplayNameDefined() {\n\t\t\treturn typeof this.displayName !== 'undefined'\n\t\t},\n\t\tisUrlDefined() {\n\t\t\treturn typeof this.url !== 'undefined'\n\t\t},\n\t\thasMenu() {\n\t\t\tif (this.disableMenu) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (this.isMenuLoaded) {\n\t\t\t\treturn this.menu.length > 0\n\t\t\t}\n\t\t\treturn !(this.user === getCurrentUser()?.uid || this.userDoesNotExist || this.url)\n\t\t},\n\t\tshouldShowPlaceholder() {\n\t\t\treturn this.allowPlaceholder && (\n\t\t\t\tthis.userDoesNotExist)\n\t\t},\n\t\tavatarStyle() {\n\t\t\tconst style = {\n\t\t\t\t'--size': this.size + 'px',\n\t\t\t\tlineHeight: this.size + 'px',\n\t\t\t\tfontSize: Math.round(this.size * 0.45) + 'px',\n\t\t\t}\n\t\t\treturn style\n\t\t},\n\t\tinitialsWrapperStyle() {\n\t\t\tconst { r, g, b } = usernameToColor(this.getUserIdentifier)\n\t\t\treturn {\n\t\t\t\tbackgroundColor: `rgba(${r}, ${g}, ${b}, 0.1)`,\n\t\t\t}\n\t\t},\n\t\tinitialsStyle() {\n\t\t\tconst { r, g, b } = usernameToColor(this.getUserIdentifier)\n\t\t\treturn {\n\t\t\t\tcolor: `rgb(${r}, ${g}, ${b})`,\n\t\t\t}\n\t\t},\n\t\ttooltip() {\n\t\t\tif (this.disableTooltip) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (this.tooltipMessage) {\n\t\t\t\treturn this.tooltipMessage\n\t\t\t}\n\n\t\t\treturn this.displayName\n\t\t},\n\t\tinitials() {\n\t\t\tlet initials\n\t\t\tif (this.shouldShowPlaceholder) {\n\t\t\t\tconst user = this.getUserIdentifier\n\t\t\t\tconst idx = user.indexOf(' ')\n\t\t\t\tif (user === '') {\n\t\t\t\t\tinitials = '?'\n\t\t\t\t} else {\n\t\t\t\t\tinitials = String.fromCodePoint(user.codePointAt(0))\n\t\t\t\t\tif (idx !== -1) {\n\t\t\t\t\t\tinitials = initials.concat(String.fromCodePoint(user.codePointAt(idx + 1)))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn initials.toUpperCase()\n\t\t},\n\t\tmenu() {\n\t\t\tconst actions = this.contactsMenuActions.map((item) => {\n\t\t\t\treturn {\n\t\t\t\t\thref: item.hyperlink,\n\t\t\t\t\ticon: item.icon,\n\t\t\t\t\ttext: item.title,\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t/**\n\t\t\t * @param {string} html The HTML to escape\n\t\t\t */\n\t\t\tfunction escape(html) {\n\t\t\t\tconst text = document.createTextNode(html)\n\t\t\t\tconst p = document.createElement('p')\n\t\t\t\tp.appendChild(text)\n\t\t\t\treturn p.innerHTML\n\t\t\t}\n\n\t\t\tif (this.showUserStatus && (this.userStatus.icon || this.userStatus.message)) {\n\t\t\t\treturn [{\n\t\t\t\t\thref: '#',\n\t\t\t\t\ticon: `data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg'><text x='0' y='14' font-size='14'>${escape(this.userStatus.icon)}</text></svg>`,\n\t\t\t\t\ttext: `${this.userStatus.message}`,\n\t\t\t\t}].concat(actions)\n\t\t\t}\n\n\t\t\treturn actions\n\t\t},\n\t},\n\n\twatch: {\n\t\turl() {\n\t\t\tthis.userDoesNotExist = false\n\t\t\tthis.loadAvatarUrl()\n\t\t},\n\t\tuser() {\n\t\t\tthis.userDoesNotExist = false\n\t\t\tthis.isMenuLoaded = false\n\t\t\tthis.loadAvatarUrl()\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.loadAvatarUrl()\n\t\tsubscribe('settings:avatar:updated', this.loadAvatarUrl)\n\t\tsubscribe('settings:display-name:updated', this.loadAvatarUrl)\n\t\tif (this.showUserStatus && this.user && !this.isNoUser) {\n\t\t\tif (!this.preloadedUserStatus) {\n\t\t\t\tthis.fetchUserStatus(this.user)\n\t\t\t} else {\n\t\t\t\tthis.userStatus.status = this.preloadedUserStatus.status || ''\n\t\t\t\tthis.userStatus.message = this.preloadedUserStatus.message || ''\n\t\t\t\tthis.userStatus.icon = this.preloadedUserStatus.icon || ''\n\t\t\t\tthis.hasStatus = this.preloadedUserStatus.status !== null\n\t\t\t}\n\t\t\tsubscribe('user_status:status.updated', this.handleUserStatusUpdated)\n\t\t}\n\t},\n\n\tbeforeDestroy() {\n\t\tunsubscribe('settings:avatar:updated', this.loadAvatarUrl)\n\t\tunsubscribe('settings:display-name:updated', this.loadAvatarUrl)\n\t\tif (this.showUserStatus && this.user && !this.isNoUser) {\n\t\t\tunsubscribe('user_status:status.updated', this.handleUserStatusUpdated)\n\t\t}\n\t},\n\n\tmethods: {\n\t\tt,\n\t\thandleUserStatusUpdated(state) {\n\t\t\tif (this.user === state.userId) {\n\t\t\t\tthis.userStatus = {\n\t\t\t\t\tstatus: state.status,\n\t\t\t\t\ticon: state.icon,\n\t\t\t\t\tmessage: state.message,\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Toggle the popover menu on click or enter\n\t\t * @param {KeyboardEvent|MouseEvent} event the UI event\n\t\t */\n\t\tasync toggleMenu(event) {\n\t\t\tif (event.type === 'keydown' && event.key !== 'Enter') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (!this.contactsMenuOpenState) {\n\t\t\t\tawait this.fetchContactsMenu()\n\t\t\t}\n\t\t\tthis.contactsMenuOpenState = !this.contactsMenuOpenState\n\t\t},\n\t\tcloseMenu() {\n\t\t\tthis.contactsMenuOpenState = false\n\t\t},\n\t\tasync fetchContactsMenu() {\n\t\t\tthis.contactsMenuLoading = true\n\t\t\ttry {\n\t\t\t\tconst user = encodeURIComponent(this.user)\n\t\t\t\tconst { data } = await axios.post(generateUrl('contactsmenu/findOne'), `shareType=0&shareWith=${user}`)\n\t\t\t\tthis.contactsMenuActions = data.topAction ? [data.topAction].concat(data.actions) : data.actions\n\t\t\t} catch (e) {\n\t\t\t\tthis.contactsMenuOpenState = false\n\t\t\t}\n\t\t\tthis.contactsMenuLoading = false\n\t\t\tthis.isMenuLoaded = true\n\t\t},\n\n\t\t/**\n\t\t * Handle avatar loading if user or url defined\n\t\t */\n\t\tloadAvatarUrl() {\n\t\t\tthis.isAvatarLoaded = false\n\n\t\t\t/** Only run avatar image loading if either user or url property is defined */\n\t\t\tif (!this.isUrlDefined && (!this.isUserDefined || this.isNoUser)) {\n\t\t\t\tthis.isAvatarLoaded = true\n\t\t\t\tthis.userDoesNotExist = true\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Directly use the url if defined\n\t\t\tif (this.isUrlDefined) {\n\t\t\t\tthis.updateImageIfValid(this.url)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.size <= 64) {\n\t\t\t\tconst avatarUrl = this.avatarUrlGenerator(this.user, 64)\n\t\t\t\tconst srcset = [\n\t\t\t\t\tavatarUrl + ' 1x',\n\t\t\t\t\tthis.avatarUrlGenerator(this.user, 512) + ' 8x',\n\t\t\t\t].join(', ')\n\n\t\t\t\tthis.updateImageIfValid(avatarUrl, srcset)\n\t\t\t} else {\n\t\t\t\tconst avatarUrl = this.avatarUrlGenerator(this.user, 512)\n\t\t\t\tthis.updateImageIfValid(avatarUrl)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Generate an avatar url from the server's avatar endpoint\n\t\t *\n\t\t * @param {string} user the user id\n\t\t * @param {number} size the desired size\n\t\t * @return {string}\n\t\t */\n\t\tavatarUrlGenerator(user, size) {\n\t\t\tconst darkTheme = window.getComputedStyle(document.body)\n\t\t\t\t.getPropertyValue('--background-invert-if-dark') === 'invert(100%)'\n\t\t\tlet url = '/avatar/{user}/{size}' + (darkTheme ? '/dark' : '')\n\t\t\tif (this.isGuest) {\n\t\t\t\turl = '/avatar/guest/{user}/{size}' + (darkTheme ? '/dark' : '')\n\t\t\t}\n\n\t\t\tlet avatarUrl = generateUrl(\n\t\t\t\turl,\n\t\t\t\t{\n\t\t\t\t\tuser,\n\t\t\t\t\tsize,\n\t\t\t\t})\n\n\t\t\t// eslint-disable-next-line camelcase\n\t\t\tif (user === getCurrentUser()?.uid && typeof oc_userconfig !== 'undefined') {\n\t\t\t\tavatarUrl += '?v=' + oc_userconfig.avatar.version\n\t\t\t}\n\n\t\t\treturn avatarUrl\n\t\t},\n\n\t\t/**\n\t\t * Check if the provided url is valid and update Avatar if so\n\t\t *\n\t\t * @param {string} url the avatar url\n\t\t * @param {Array} srcset the avatar srcset\n\t\t */\n\t\tupdateImageIfValid(url, srcset = null) {\n\t\t\t// skip loading\n\t\t\tconst userHasAvatar = getUserHasAvatar(this.user)\n\t\t\tif (this.isUserDefined && typeof userHasAvatar === 'boolean') {\n\t\t\t\tthis.isAvatarLoaded = true\n\t\t\t\tthis.avatarUrlLoaded = url\n\t\t\t\tif (srcset) {\n\t\t\t\t\tthis.avatarSrcSetLoaded = srcset\n\t\t\t\t}\n\t\t\t\tif (userHasAvatar === false) {\n\t\t\t\t\tthis.userDoesNotExist = true\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst img = new Image()\n\t\t\timg.onload = () => {\n\t\t\t\tthis.avatarUrlLoaded = url\n\t\t\t\tif (srcset) {\n\t\t\t\t\tthis.avatarSrcSetLoaded = srcset\n\t\t\t\t}\n\t\t\t\tthis.isAvatarLoaded = true\n\t\t\t\t// re-get to avoid concurrent access\n\t\t\t\tsetUserHasAvatar(this.user, true)\n\t\t\t}\n\t\t\timg.onerror = () => {\n\t\t\t\tconsole.debug('Invalid avatar url', url)\n\t\t\t\t// Avatar is invalid, reset\n\t\t\t\tthis.avatarUrlLoaded = null\n\t\t\t\tthis.avatarSrcSetLoaded = null\n\n\t\t\t\tthis.userDoesNotExist = true\n\t\t\t\tthis.isAvatarLoaded = false\n\t\t\t\tsetUserHasAvatar(this.user, false)\n\t\t\t}\n\n\t\t\tif (srcset) {\n\t\t\t\timg.srcset = srcset\n\t\t\t}\n\t\t\timg.src = url\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n.avatardiv {\n\tposition: relative;\n\tdisplay: inline-block;\n\twidth: var(--size);\n\theight: var(--size);\n\n\t&--unknown {\n\t\tposition: relative;\n\t\tbackground-color: var(--color-main-background);\n\t\twhite-space: normal;\n\t}\n\n\t&:not(&--unknown) {\n\t\t// White/black background for avatars with transparency\n\t\tbackground-color: var(--color-main-background) !important;\n\t\tbox-shadow: 0 0 5px rgba(0, 0, 0, 0.05) inset;\n\t}\n\n\t&--with-menu {\n\t\tcursor: pointer;\n\t\t.action-item {\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t}\n\t\t:deep(.action-item__menutoggle) {\n\t\t\tcursor: pointer;\n\t\t\topacity: 0;\n\t\t}\n\t\t&:focus,\n\t\t&:hover,\n\t\t&#{&}-loading {\n\t\t\t:deep(.action-item__menutoggle) {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t\timg {\n\t\t\t\topacity: 0.3;\n\t\t\t}\n\t\t}\n\t\t:deep(.action-item__menutoggle),\n\t\timg {\n\t\t\ttransition: opacity var(--animation-quick);\n\t\t}\n\t\t:deep() {\n\t\t\t.button-vue,\n\t\t\t.button-vue__icon {\n\t\t\t\theight: var(--size);\n\t\t\t\tmin-height: var(--size);\n\t\t\t\twidth: var(--size) !important;\n\t\t\t\tmin-width: var(--size);\n\t\t\t}\n\t\t}\n\t}\n\n\t.avatardiv__initials-wrapper {\n\t\tdisplay: block;\n\t\theight: var(--size);\n\t\twidth: var(--size);\n\t\tbackground-color: var(--color-main-background);\n\t\tborder-radius: 50%;\n\n\t\t.unknown {\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\tdisplay: block;\n\t\t\twidth: 100%;\n\t\t\ttext-align: center;\n\t\t\tfont-weight: normal;\n\t\t}\n\t}\n\n\timg {\n\t\t// Cover entire area\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\t// Keep ratio\n\t\tobject-fit: cover;\n\t}\n\n\t.material-design-icon {\n\t\twidth: var(--size);\n\t\theight: var(--size);\n\t}\n\n\t.avatardiv__user-status {\n\t\tposition: absolute;\n\t\tright: -4px;\n\t\tbottom: -4px;\n\t\tmax-height: 18px;\n\t\tmax-width: 18px;\n\t\theight: 40%;\n\t\twidth: 40%;\n\t\tline-height: 15px;\n\t\tfont-size: var(--default-font-size);\n\t\tborder: 2px solid var(--color-main-background);\n\t\tbackground-color: var(--color-main-background);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-size: 16px;\n\t\tbackground-position: center;\n\t\tborder-radius: 50%;\n\n\t\t.acli:hover & {\n\t\t\tborder-color: var(--color-background-hover);\n\t\t\tbackground-color: var(--color-background-hover);\n\t\t}\n\t\t.acli.active & {\n\t\t\tborder-color: var(--color-primary-element-light);\n\t\t\tbackground-color: var(--color-primary-element-light);\n\t\t}\n\n\t\t&--online{\n\t\t\tbackground-image: url('../../assets/status-icons/user-status-online.svg');\n\t\t}\n\t\t&--dnd{\n\t\t\tbackground-image: url('../../assets/status-icons/user-status-dnd.svg');\n\t\t\tbackground-color: #ffffff;\n\t\t}\n\t\t&--away{\n\t\t\tbackground-image: url('../../assets/status-icons/user-status-away.svg');\n\t\t}\n\t\t&--icon {\n\t\t\tborder: none;\n\t\t\tbackground-color: transparent;\n\t\t}\n\t}\n\n\t.popovermenu-wrapper {\n\t\tposition: relative;\n\t\tdisplay: inline-block;\n\t}\n}\n\n.avatar-class-icon {\n\tdisplay: block;\n\tborder-radius: 50%;\n\tbackground-color: var(--color-background-darker);\n\theight: 100%;\n}\n\n</style>\n"],"names":["userStatus","userId","capabilities$1","capabilities","auth","data","axios__default","router","status","message","icon","e","_b","_a","browserStorage","browserStorage$1","getUserHasAvatar","flag","setUserHasAvatar","_sfc_main","components","DotsHorizontal__default","Components_NcActions","Components_NcActionLink","Components_NcButton","Components_NcLoadingIcon","l10n","label","r","g","b","Functions_usernameToColor","initials","user","idx","actions","item","escape","html","text","p","eventBus","state","event","avatarUrl","srcset","size","darkTheme","url","userHasAvatar","img"],"mappings":"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"}
|