mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
1 line
No EOL
11 KiB
Text
1 line
No EOL
11 KiB
Text
{"version":3,"file":"DiscoverTypeShowcase-B9_f9sV6.chunk.mjs","sources":["../build/frontend/apps/appstore/src/components/AppLink.vue","../build/frontend/apps/appstore/src/components/DiscoverType/DiscoverTypeApp.vue","../build/frontend/apps/appstore/src/components/DiscoverType/DiscoverTypeShowcase.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\n/**\n * This component either shows a native link to the installed app or external size\n * or a router link to the appstore page of the app if not installed\n */\n\nimport type { RouterLinkProps } from 'vue-router'\nimport type { INavigationEntry } from '../../../../core/src/types/navigation.d.ts'\n\nimport { loadState } from '@nextcloud/initial-state'\nimport { generateUrl } from '@nextcloud/router'\nimport { ref, watchEffect } from 'vue'\nimport { RouterLink, useRoute } from 'vue-router'\n\nconst props = defineProps<{\n\thref: string\n}>()\n\nconst route = useRoute()\nconst knownRoutes = Object.fromEntries(loadState<INavigationEntry[]>('core', 'apps').map((app) => [app.app ?? app.id, app.href]))\n\nconst routerProps = ref<RouterLinkProps>()\nconst linkProps = ref<Record<string, string>>()\n\nwatchEffect(() => {\n\tconst match = props.href.match(/^app:(\\/\\/)?([^/]+)(\\/.+)?$/)\n\trouterProps.value = undefined\n\tlinkProps.value = undefined\n\n\t// not an app url\n\tif (match === null) {\n\t\tlinkProps.value = {\n\t\t\thref: props.href,\n\t\t\ttarget: '_blank',\n\t\t\trel: 'noreferrer noopener',\n\t\t}\n\t\treturn\n\t}\n\n\tconst appId = match[2]!\n\t// Check if specific route was requested\n\tif (match[3]) {\n\t\t// we do no know anything about app internal path so we only allow generic app paths\n\t\tlinkProps.value = {\n\t\t\thref: generateUrl(`/apps/${appId}${match[3]}`),\n\t\t}\n\t\treturn\n\t}\n\n\t// If we know any route for that app we open it\n\tif (appId in knownRoutes) {\n\t\tlinkProps.value = {\n\t\t\thref: knownRoutes[appId]!,\n\t\t}\n\t\treturn\n\t}\n\n\t// Fallback to show the app store entry\n\trouterProps.value = {\n\t\tto: {\n\t\t\tname: 'apps-discover',\n\t\t\tparams: {\n\t\t\t\tcategory: route.params?.category ?? 'discover',\n\t\t\t\tid: appId,\n\t\t\t},\n\t\t},\n\t}\n})\n</script>\n\n<template>\n\t<a v-if=\"linkProps\" v-bind=\"linkProps\">\n\t\t<slot />\n\t</a>\n\t<RouterLink v-else-if=\"routerProps\" v-bind=\"routerProps\">\n\t\t<slot />\n\t</RouterLink>\n</template>\n","<!--\n - SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport type { IAppDiscoverApp } from '../../apps-discover.d.ts'\n\nimport { computed } from 'vue'\nimport AppImage from '../AppImage.vue'\nimport AppLink from '../AppLink.vue'\nimport BadgeAppScore from '../BadgeAppScore.vue'\nimport { useAppsStore } from '../../store/apps.ts'\n\nconst props = defineProps<{\n\tmodelValue: IAppDiscoverApp\n}>()\n\nconst store = useAppsStore()\nconst app = computed(() => store.getAppById(props.modelValue.appId))\n\nconst appStoreLink = computed(() => props.modelValue.appId\n\t? `https://apps.nextcloud.com/apps/${props.modelValue.appId}`\n\t: '#')\n</script>\n\n<template>\n\t<a\n\t\tv-if=\"!app\"\n\t\tclass=\"app-discover-app app-discover-app__skeleton\"\n\t\t:href=\"appStoreLink\"\n\t\ttarget=\"_blank\"\n\t\t:title=\"modelValue.appId\"\n\t\trel=\"noopener noreferrer\">\n\t\t<!-- This is a fallback skeleton -->\n\t\t<span class=\"skeleton-element\" />\n\t\t<span class=\"skeleton-element\" />\n\t\t<span class=\"skeleton-element\" />\n\t\t<span class=\"skeleton-element\" />\n\t\t<span class=\"skeleton-element\" />\n\t</a>\n\n\t<article v-else class=\"app-discover-app\">\n\t\t<AppImage class=\"app-discover-app__image\" :app=\"app\" />\n\t\t<div class=\"app-discover-app__wrapper\">\n\t\t\t<h3 class=\"app-discover-app__name\">\n\t\t\t\t<AppLink :href=\"`app:${app.id}`\">\n\t\t\t\t\t{{ app.name }}\n\t\t\t\t</AppLink>\n\t\t\t</h3>\n\t\t\t<p>{{ app.summary }}</p>\n\t\t\t<BadgeAppScore\n\t\t\t\tclass=\"app-discover-app__score\"\n\t\t\t\t:app />\n\t\t</div>\n\t</article>\n</template>\n\n<style scoped lang=\"scss\">\n.app-discover-app {\n\tborder-radius: var(--border-radius-element);\n\tdisplay: flex;\n\tflex-direction: column;\n\toverflow: hidden;\n\twidth: 100% !important;\n\n\t&:hover {\n\t\tbackground: var(--color-background-hover);\n\t}\n\n\t&__image {\n\t\theight: 96px;\n\t\twidth: 100%;\n\t}\n\n\t&__name {\n\t\tmargin-block: 0.5rem;\n\t\tfont-size: 1.2rem;\n\t}\n\n\t&__score {\n\t\tmargin-top: auto;\n\t}\n\n\t&__wrapper {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tpadding: calc(2 * var(--default-grid-baseline));\n\t\tpadding-top: 0px;\n\t}\n\n\t&__skeleton {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: 8px;\n\n\t\tpadding: 30px; // Same as AppItem\n\n\t\t> :first-child {\n\t\t\theight: 50%;\n\t\t\tmin-height: 130px;\n\t\t}\n\n\t\t> :nth-child(2) {\n\t\t\twidth: 50px;\n\t\t}\n\n\t\t> :nth-child(5) {\n\t\t\theight: 20px;\n\t\t\twidth: 100px;\n\t\t}\n\n\t\t> :not(:first-child) {\n\t\t\tborder-radius: 4px;\n\t\t}\n\t}\n}\n\n.skeleton-element {\n\tmin-height: var(--default-font-size, 15px);\n\n\tbackground: linear-gradient(90deg, var(--color-background-dark), var(--color-background-darker), var(--color-background-dark));\n\tbackground-size: 400% 400%;\n\tanimation: gradient 6s ease infinite;\n}\n\n@keyframes gradient {\n\t0% {\n\t\tbackground-position: 0% 50%;\n\t}\n\t50% {\n\t\tbackground-position: 100% 50%;\n\t}\n\t100% {\n\t\tbackground-position: 0% 50%;\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n<template>\n\t<section\n\t\tref=\"container\"\n\t\tclass=\"app-discover-showcase\"\n\t\t:class=\"{\n\t\t\t'app-discover-showcase--small': isSmallWidth,\n\t\t\t'app-discover-showcase--extra-small': isExtraSmallWidth,\n\t\t}\">\n\t\t<h3 v-if=\"translatedHeadline\">\n\t\t\t{{ translatedHeadline }}\n\t\t</h3>\n\t\t<ul class=\"app-discover-showcase__list\">\n\t\t\t<li\n\t\t\t\tv-for=\"(item, index) of content\"\n\t\t\t\t:key=\"'id' in item ? item.id : index\"\n\t\t\t\tclass=\"app-discover-showcase__item\">\n\t\t\t\t<DiscoverTypePost\n\t\t\t\t\tv-if=\"item.type === 'post'\"\n\t\t\t\t\tv-bind=\"item\"\n\t\t\t\t\tinline />\n\t\t\t\t<DiscoverTypeApp v-else-if=\"item.type === 'app'\" :modelValue=\"item\" />\n\t\t\t</li>\n\t\t</ul>\n\t</section>\n</template>\n\n<script setup lang=\"ts\">\nimport type { PropType } from 'vue'\nimport type { IAppDiscoverShowcase } from '../../apps-discover.d.ts'\n\nimport { useElementSize } from '@vueuse/core'\nimport { computed, ref } from 'vue'\nimport DiscoverTypeApp from './DiscoverTypeApp.vue'\nimport DiscoverTypePost from './DiscoverTypePost.vue'\nimport { useLocalizedValue } from '../../composables/useGetLocalizedValue.ts'\nimport { commonAppDiscoverProps } from './common.ts'\n\nconst props = defineProps({\n\t...commonAppDiscoverProps,\n\n\t/**\n\t * The content of the carousel\n\t */\n\tcontent: {\n\t\ttype: Array as PropType<IAppDiscoverShowcase['content']>,\n\t\trequired: true,\n\t},\n})\n\nconst translatedHeadline = useLocalizedValue(computed(() => props.headline))\n\n/**\n * Make the element responsive based on the container width to also handle open navigation or sidebar\n */\nconst container = ref<HTMLElement>()\nconst { width: containerWidth } = useElementSize(container)\nconst isSmallWidth = computed(() => containerWidth.value < 768)\nconst isExtraSmallWidth = computed(() => containerWidth.value < 512)\n</script>\n\n<style scoped lang=\"scss\">\n$item-gap: calc(var(--default-clickable-area, 44px) / 2);\n\nh3 {\n\tfont-size: 24px;\n\tfont-weight: 600;\n\tmargin-block: 0 1em;\n}\n\n.app-discover-showcase {\n\t&__list {\n\t\tlist-style: none;\n\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: $item-gap;\n\t}\n\n\t&__item {\n\t\tdisplay: flex;\n\t\talign-items: stretch;\n\n\t\tposition: relative;\n\t\twidth: calc(33% - $item-gap);\n\t}\n}\n\n.app-discover-showcase--small {\n\t.app-discover-showcase__item {\n\t\twidth: calc(50% - $item-gap);\n\t}\n}\n\n.app-discover-showcase--extra-small {\n\t.app-discover-showcase__item {\n\t\twidth: 100%;\n\t}\n}\n</style>\n"],"names":["props","__props","route","useRoute","knownRoutes","loadState","app","routerProps","ref","linkProps","watchEffect","match","appId","generateUrl","_openBlock","_createElementBlock","_renderSlot","_ctx","_createBlock","_unref","store","useAppsStore","computed","appStoreLink","_hoisted_2","_createVNode","AppImage","_createElementVNode","_hoisted_3","_hoisted_4","AppLink","_createTextVNode","_toDisplayString","BadgeAppScore","translatedHeadline","useLocalizedValue","container","containerWidth","useElementSize","isSmallWidth","isExtraSmallWidth","_Fragment","_renderList","item","index","DiscoverTypePost","_mergeProps","DiscoverTypeApp"],"mappings":"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"} |