{"version":3,"file":"AppstoreSearch-vD_vrWIT.chunk.mjs","sources":["../node_modules/@nextcloud/vue/dist/chunks/NcActionCheckbox-D2Fu35M_.mjs","../build/frontend/apps/appstore/src/components/AppImage.vue","../build/frontend/apps/appstore/src/components/AppGrid/AppGridItem.vue","../build/frontend/apps/appstore/src/components/AppGrid/AppGrid.vue","../build/frontend/apps/appstore/src/components/AppToolbar.vue","../build/frontend/apps/appstore/src/composables/useFilteredApps.ts","../build/frontend/apps/appstore/src/views/AppstoreManage.vue","../build/frontend/apps/appstore/src/views/AppstoreSearch.vue"],"sourcesContent":["import '../assets/NcActionCheckbox-wD8m_a8-.css';\nimport { h as mdiCheckboxMarked, i as mdiCheckboxBlankOutline } from \"./mdi-CpchYUUV.mjs\";\nimport { resolveComponent, openBlock, createElementBlock, normalizeClass, createElementVNode, withDirectives, vModelCheckbox, createVNode, toDisplayString, useModel } from \"vue\";\nimport { N as NcIconSvgWrapper } from \"./NcIconSvgWrapper-De-2-ukl.mjs\";\nimport { A as ActionGlobalMixin } from \"./actionGlobal-BZFdtdJL.mjs\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { a as NC_ACTIONS_IS_SEMANTIC_MENU } from \"./useNcActions-BzPO2c4h.mjs\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nconst _sfc_main = {\n  name: \"NcActionCheckbox\",\n  components: {\n    NcIconSvgWrapper\n  },\n  mixins: [ActionGlobalMixin],\n  inject: {\n    isInSemanticMenu: {\n      from: NC_ACTIONS_IS_SEMANTIC_MENU,\n      default: false\n    }\n  },\n  props: {\n    /**\n     * id attribute of the checkbox element\n     */\n    id: {\n      type: String,\n      default: () => \"action-\" + createElementId(),\n      validator: (id) => id.trim() !== \"\"\n    },\n    /**\n     * checked state of the the checkbox element\n     */\n    modelValue: {\n      type: Boolean,\n      default: false\n    },\n    /**\n     * value of the checkbox input\n     */\n    value: {\n      type: [String, Number],\n      default: \"\"\n    },\n    /**\n     * disabled state of the checkbox element\n     */\n    disabled: {\n      type: Boolean,\n      default: false\n    }\n  },\n  emits: [\n    /** Native change event */\n    \"change\",\n    /** Checkbox is checked */\n    \"check\",\n    /** Checkbox is unchecked */\n    \"uncheck\",\n    /** Model value changed */\n    \"update:modelValue\"\n  ],\n  setup(props) {\n    const model = useModel(props, \"modelValue\");\n    return {\n      model,\n      mdiCheckboxBlankOutline,\n      mdiCheckboxMarked\n    };\n  },\n  methods: {\n    onChange(event) {\n      this.$emit(\"change\", event);\n      if (event.target.checked) {\n        this.$emit(\"check\");\n      } else {\n        this.$emit(\"uncheck\");\n      }\n    }\n  }\n};\nconst _hoisted_1 = [\"role\"];\nconst _hoisted_2 = [\"role\", \"aria-checked\"];\nconst _hoisted_3 = { class: \"action-checkbox__icon\" };\nconst _hoisted_4 = [\"id\", \"value\", \"disabled\"];\nconst _hoisted_5 = { class: \"action-checkbox__text\" };\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n  const _component_NcIconSvgWrapper = resolveComponent(\"NcIconSvgWrapper\");\n  return openBlock(), createElementBlock(\"li\", {\n    class: normalizeClass([\"action\", { \"action--disabled\": $props.disabled }]),\n    role: $options.isInSemanticMenu && \"presentation\"\n  }, [\n    createElementVNode(\"label\", {\n      class: \"action-checkbox\",\n      role: $options.isInSemanticMenu && \"menuitemcheckbox\",\n      \"aria-checked\": $options.isInSemanticMenu && $setup.model.toString()\n    }, [\n      createElementVNode(\"span\", _hoisted_3, [\n        withDirectives(createElementVNode(\"input\", {\n          id: $props.id,\n          \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event) => $setup.model = $event),\n          type: \"checkbox\",\n          class: normalizeClass([\"action-checkbox__input\", { focusable: !$props.disabled }]),\n          value: $props.value,\n          disabled: $props.disabled,\n          onChange: _cache[1] || (_cache[1] = (...args) => $options.onChange && $options.onChange(...args))\n        }, null, 42, _hoisted_4), [\n          [vModelCheckbox, $setup.model]\n        ]),\n        createVNode(_component_NcIconSvgWrapper, {\n          path: $setup.model ? $setup.mdiCheckboxMarked : $setup.mdiCheckboxBlankOutline,\n          size: 20\n        }, null, 8, [\"path\"])\n      ]),\n      createElementVNode(\"span\", _hoisted_5, toDisplayString(_ctx.text), 1)\n    ], 8, _hoisted_2)\n  ], 10, _hoisted_1);\n}\nconst NcActionCheckbox = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__scopeId\", \"data-v-2947bc3b\"]]);\nexport {\n  NcActionCheckbox as N\n};\n//# sourceMappingURL=NcActionCheckbox-D2Fu35M_.mjs.map\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 { IAppstoreApp, IAppstoreExApp } from '../apps.d.ts'\n\nimport { mdiCogOutline } from '@mdi/js'\nimport { NcLoadingIcon } from '@nextcloud/vue'\nimport PQueue from 'p-queue'\nimport { ref, watchEffect } from 'vue'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\n\nconst props = defineProps<{\n\tapp: IAppstoreApp | IAppstoreExApp\n}>()\n\nconst isError = ref(false)\nconst isLoading = ref(true)\nwatchEffect(() => {\n\tif (props.app.screenshot) {\n\t\tisError.value = false\n\t\tisLoading.value = true\n\t\tqueue.add(() => {\n\t\t\tconst image = new Image()\n\t\t\tconst { promise, resolve } = Promise.withResolvers<void>()\n\t\t\timage.onload = () => {\n\t\t\t\tisLoading.value = false\n\t\t\t\tresolve()\n\t\t\t}\n\t\t\timage.onerror = () => {\n\t\t\t\tisError.value = true\n\t\t\t\tisLoading.value = false\n\t\t\t\tresolve()\n\t\t\t}\n\t\t\timage.src = props.app.screenshot!\n\t\t\treturn promise\n\t\t})\n\t} else {\n\t\tisLoading.value = false\n\t\tisError.value = false\n\t}\n})\n</script>\n\n<script lang=\"ts\">\nconst queue = new PQueue({ concurrency: 4 })\n</script>\n\n<template>\n\t<div :class=\"$style.appImage\">\n\t\t<NcIconSvgWrapper\n\t\t\tv-if=\"isError || !props.app.screenshot\"\n\t\t\t:size=\"80\"\n\t\t\t:path=\"mdiCogOutline\" />\n\n\t\t<NcLoadingIcon v-else-if=\"isLoading\" :size=\"80\" />\n\n\t\t<img\n\t\t\tv-else\n\t\t\t:class=\"$style.appImage__image\"\n\t\t\t:src=\"props.app.screenshot\"\n\t\t\talt=\"\">\n\t</div>\n</template>\n\n<style module>\n.appImage {\n\tdisplay: flex;\n\tjustify-content: center;\n\twidth: 100%;\n\theight: 100%;\n}\n\n.appImage__image {\n\tobject-fit: cover;\n\theight: 100%;\n\twidth: 100%;\n}\n</style>\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 { IAppstoreApp, IAppstoreExApp } from '../../apps.d.ts'\n\nimport { computed } from 'vue'\nimport { useRoute } from 'vue-router'\nimport AppImage from '../AppImage.vue'\nimport BadgeAppDaemon from '../BadgeAppDaemon.vue'\nimport BadgeAppLevel from '../BadgeAppLevel.vue'\nimport BadgeAppScore from '../BadgeAppScore.vue'\nimport { useUserSettingsStore } from '../../store/userSettings.ts'\n\nconst { app } = defineProps<{\n\tapp: IAppstoreApp | IAppstoreExApp\n}>()\n\nconst userSettingsStore = useUserSettingsStore()\nconst route = useRoute()\nconst routeToDetails = computed(() => ({\n\t...route,\n\tparams: {\n\t\t...route.params,\n\t\tid: app.id,\n\t},\n\tquery: userSettingsStore.getQuery(),\n}))\n</script>\n\n<template>\n\t<li :class=\"$style.appGridItem\">\n\t\t<RouterLink :to=\"routeToDetails\">\n\t\t\t<AppImage :app :class=\"$style.appGridItem__image\" />\n\t\t\t<div :class=\"$style.appGridItem__content\">\n\t\t\t\t<h3 :class=\"$style.appGridItem__name\">\n\t\t\t\t\t{{ app.name }}\n\t\t\t\t</h3>\n\t\t\t\t<p>{{ app.summary }}</p>\n\t\t\t</div>\n\t\t</RouterLink>\n\t\t<div :class=\"$style.appGridItem__badges\">\n\t\t\t<BadgeAppScore :app />\n\t\t\t<BadgeAppLevel :level=\"app.level\" />\n\t\t\t<BadgeAppDaemon v-if=\"app.app_api && app.daemon\" :daemon=\"app.daemon\" />\n\t\t</div>\n\t</li>\n</template>\n\n<style module>\n.appGridItem {\n\tbackground-color: var(--color-primary-element-light);\n\tcolor: var(--color-primary-element-light-text);\n\tborder-radius: var(--border-radius-element);\n\tpadding-block-end: var(--border-radius-element);;\n\tdisplay: flex;\n\tflex-direction: column;\n\tjustify-content: space-between;\n\tgap: var(--default-grid-baseline);\n\n\t&:hover {\n\t\tbackground-color: var(--color-primary-element-light-hover);\n\t}\n}\n\n.appGridItem__content {\n\tpadding-inline: var(--border-radius-element);\n}\n\n.appGridItem__image {\n\taspect-ratio: 16 / 9;\n\theight: min-content;\n\tborder-start-start-radius: var(--border-radius-element);\n\tborder-start-end-radius: var(--border-radius-element);\n\toverflow: hidden;\n}\n\n.appGridItem__name {\n\tfont-size: 1.2em;\n\tfont-weight: var(--font-weight-heading, bold);\n\tmargin-block: var(--default-grid-baseline) calc(2 * var(--default-grid-baseline));\n}\n\n.appGridItem__badges {\n\tdisplay: flex;\n\tflex-direction: row;\n\tgap: var(--default-grid-baseline);\n\tpadding-inline: var(--border-radius-element);\n\twidth: 100%;\n}\n</style>\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 { IAppstoreApp, IAppstoreExApp } from '../../apps.d.ts'\n\nimport { computed } from 'vue'\nimport AppGridItem from './AppGridItem.vue'\nimport { useUserSettingsStore } from '../../store/userSettings.ts'\n\ndefineProps<{\n\tapps: (IAppstoreApp | IAppstoreExApp)[]\n}>()\n\nconst userSettings = useUserSettingsStore()\nconst gridSize = computed(() => userSettings.gridSizePx)\n</script>\n\n<template>\n\t<ul :class=\"$style.appGrid\">\n\t\t<AppGridItem\n\t\t\tv-for=\"app in apps\"\n\t\t\t:key=\"app.id\"\n\t\t\t:app />\n\t</ul>\n</template>\n\n<style module>\n.appGrid {\n\twidth: 100%;\n\tdisplay: grid;\n\tgap: calc(4 * var(--default-grid-baseline));\n\tgrid-template-columns: repeat(auto-fit, minmax(v-bind(gridSize), 1fr));\n\tpadding-inline-start: var(--app-navigation-padding);\n}\n</style>\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 { mdiFilterVariant, mdiSizeL, mdiSizeM, mdiSizeS, mdiViewGrid } from '@mdi/js'\nimport { t } from '@nextcloud/l10n'\nimport { watch } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport NcActionButton from '@nextcloud/vue/components/NcActionButton'\nimport NcActionButtonGroup from '@nextcloud/vue/components/NcActionButtonGroup'\nimport NcActionCheckbox from '@nextcloud/vue/components/NcActionCheckbox'\nimport NcActions from '@nextcloud/vue/components/NcActions'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcIconSvgWrapper from '@nextcloud/vue/components/NcIconSvgWrapper'\nimport { useUserSettingsStore } from '../store/userSettings.ts'\n\nconst route = useRoute()\nconst router = useRouter()\nconst userSettingsStore = useUserSettingsStore()\n\nwatch(() => userSettingsStore.isGridView, (enabled: boolean) => {\n\trouter.replace({\n\t\t...route,\n\t\tquery: {\n\t\t\t...route.query,\n\t\t\tgrid: enabled ? null : undefined,\n\t\t},\n\t})\n})\n\nwatch(() => userSettingsStore.defaultGridSize, (newSize) => {\n\tif (userSettingsStore.isGridView) {\n\t\trouter.replace({\n\t\t\t...route,\n\t\t\tquery: {\n\t\t\t\t...route.query,\n\t\t\t\tgrid: newSize || null,\n\t\t\t},\n\t\t})\n\t}\n})\n\nwatch(() => userSettingsStore.showIncompatible, (showIncompatible) => {\n\tif (showIncompatible) {\n\t\trouter.replace({\n\t\t\t...route,\n\t\t\tquery: {\n\t\t\t\t...route.query,\n\t\t\t\tcompatible: undefined,\n\t\t\t},\n\t\t})\n\t} else {\n\t\trouter.replace({\n\t\t\t...route,\n\t\t\tquery: {\n\t\t\t\t...route.query,\n\t\t\t\tcompatible: null,\n\t\t\t},\n\t\t})\n\t}\n})\n</script>\n\n<template>\n\t<div :class=\"$style.appToolbar\">\n\t\t<NcActions :class=\"$style.appToolbar__filterButton\" :aria-label=\"t('appstore', 'Filter view')\" forceMenu>\n\t\t\t<template #icon>\n\t\t\t\t<NcIconSvgWrapper :path=\"mdiFilterVariant\" />\n\t\t\t</template>\n\t\t\t<NcActionButtonGroup v-if=\"userSettingsStore.isGridView\" :name=\"t('appstore', 'Grid size')\">\n\t\t\t\t<NcActionButton\n\t\t\t\t\t:aria-label=\"t('appstore', 'Small grid size')\"\n\t\t\t\t\t:modelValue=\"userSettingsStore.defaultGridSize === ''\"\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\tvalue=\"\"\n\t\t\t\t\t@update:modelValue=\"userSettingsStore.defaultGridSize = ''\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiSizeS\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcActionButton>\n\t\t\t\t<NcActionButton\n\t\t\t\t\t:aria-label=\"t('appstore', 'Medium grid size')\"\n\t\t\t\t\t:modelValue=\"userSettingsStore.defaultGridSize === 'm'\"\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\tvalue=\"m\"\n\t\t\t\t\t@update:modelValue=\"userSettingsStore.defaultGridSize = 'm'\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiSizeM\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcActionButton>\n\t\t\t\t<NcActionButton\n\t\t\t\t\t:aria-label=\"t('appstore', 'Large grid size')\"\n\t\t\t\t\t:modelValue=\"userSettingsStore.defaultGridSize === 'l'\"\n\t\t\t\t\ttype=\"radio\"\n\t\t\t\t\tvalue=\"l\"\n\t\t\t\t\t@update:modelValue=\"userSettingsStore.defaultGridSize = 'l'\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :path=\"mdiSizeL\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcActionButton>\n\t\t\t</NcActionButtonGroup>\n\n\t\t\t<NcActionCheckbox v-model=\"userSettingsStore.showIncompatible\">\n\t\t\t\t{{ t('appstore', 'Show incompatible') }}\n\t\t\t</NcActionCheckbox>\n\t\t</NcActions>\n\n\t\t<NcButton\n\t\t\tv-model:pressed=\"userSettingsStore.isGridView\"\n\t\t\t:aria-label=\"t('appstore', 'Grid view')\"\n\t\t\tvariant=\"tertiary\">\n\t\t\t<template #icon>\n\t\t\t\t<NcIconSvgWrapper :path=\"mdiViewGrid\" />\n\t\t\t</template>\n\t\t</NcButton>\n\t</div>\n</template>\n\n<style module>\n.appToolbar {\n\tdisplay: flex;\n\tflex-direction: row;\n\tgap: calc(2 * var(--default-grid-baseline));\n\tposition: absolute;\n\tinset-block-start: var(--app-navigation-padding);\n\tinset-inline-end: var(--app-sidebar-padding);\n\n\tz-index: 999;\n\n\tbutton:not([aria-pressed=\"true\"]):not(:hover) {\n\t\tbackground-color: var(--color-main-background) !important;\n\t}\n}\n</style>\n","/*!\n * SPDX-License-Identifier: AGPL-3.0-or-later\n * SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n */\n\nimport type { MaybeRefOrGetter } from 'vue'\nimport type { IAppstoreApp, IAppstoreExApp } from '../apps.d.ts'\n\nimport { computed, toValue } from 'vue'\nimport { useRoute } from 'vue-router'\nimport { useUserSettingsStore } from '../store/userSettings.ts'\n\n/**\n * Get the filtered list of apps based on the user settings\n *\n * @param apps - The apps to filter\n */\nexport function useFilteredApps(apps: MaybeRefOrGetter<(IAppstoreApp | IAppstoreExApp)[]>) {\n\tconst store = useUserSettingsStore()\n\tconst route = useRoute()\n\treturn computed(() => {\n\t\tconst query = [route.query.q || ''].flat()[0]!\n\t\treturn toValue(apps)\n\t\t\t.filter((app) => {\n\t\t\t\tif (!store.showIncompatible && app.isCompatible === false) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (query) {\n\t\t\t\t\tconst needle = query.trim().toLocaleLowerCase()\n\t\t\t\t\treturn app.name.toLocaleLowerCase().includes(needle)\n\t\t\t\t\t\t|| app.id.toLocaleLowerCase().includes(needle)\n\t\t\t\t\t\t|| app.summary.toLocaleLowerCase().includes(needle)\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t})\n\t})\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 { t } from '@nextcloud/l10n'\nimport { computed } from 'vue'\nimport { useRoute } from 'vue-router'\nimport NcButton from '@nextcloud/vue/components/NcButton'\nimport NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\nimport AppGrid from '../components/AppGrid/AppGrid.vue'\nimport AppTable from '../components/AppTable/AppTable.vue'\nimport AppToolbar from '../components/AppToolbar.vue'\nimport { useFilteredApps } from '../composables/useFilteredApps.ts'\nimport { useAppsStore } from '../store/apps.ts'\nimport { useUserSettingsStore } from '../store/userSettings.ts'\n\nconst route = useRoute()\nconst store = useAppsStore()\nconst userSettings = useUserSettingsStore()\n\nconst currentCategory = computed(() => route.params!.category as 'enabled' | 'installed' | 'disabled' | 'updates')\nconst apps = computed(() => {\n\tif (currentCategory.value === 'installed') {\n\t\treturn store.apps.filter((app) => app.installed)\n\t} else if (currentCategory.value === 'enabled') {\n\t\treturn store.apps.filter((app) => app.active)\n\t} else if (currentCategory.value === 'disabled') {\n\t\treturn store.apps.filter((app) => app.installed && !app.active)\n\t} else if (currentCategory.value === 'updates') {\n\t\treturn store.apps.filter((app) => app.update)\n\t}\n\treturn []\n})\nconst visibleApps = useFilteredApps(apps)\n</script>\n\n<template>\n\t<AppToolbar />\n\n\t<!-- Apps list -->\n\t<NcEmptyContent\n\t\tv-if=\"store.isLoadingApps\"\n\t\t:name=\"t('appstore', 'Loading app list')\">\n\t\t<template #icon>\n\t\t\t<NcLoadingIcon :size=\"64\" />\n\t\t</template>\n\t</NcEmptyContent>\n\n\t<component\n\t\t:is=\"userSettings.isGridView ? AppGrid : AppTable\"\n\t\tv-else-if=\"visibleApps.length\"\n\t\t:class=\"$style.appstoreManage\"\n\t\t:apps=\"visibleApps\" />\n\t<NcEmptyContent\n\t\tv-else\n\t\t:name=\"t('appstore', 'No matching apps found')\">\n\t\t<template #action>\n\t\t\t<NcButton variant=\"primary\" @click=\"$router.push({ query: $route.query, name: 'apps-search' })\">\n\t\t\t\t{{ t('appstore', 'Search everywhere') }}\n\t\t\t</NcButton>\n\t\t</template>\n\t</NcEmptyContent>\n</template>\n\n<style module>\n.appstoreManage {\n\tmargin-bottom: var(--body-container-margin);\n}\n</style>\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 { t } from '@nextcloud/l10n'\nimport { watchDebounced } from '@vueuse/core'\nimport { ref, watch } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport NcEmptyContent from '@nextcloud/vue/components/NcEmptyContent'\nimport NcInputField from '@nextcloud/vue/components/NcInputField'\nimport NcLoadingIcon from '@nextcloud/vue/components/NcLoadingIcon'\nimport AppGrid from '../components/AppGrid/AppGrid.vue'\nimport AppTable from '../components/AppTable/AppTable.vue'\nimport AppToolbar from '../components/AppToolbar.vue'\nimport { useFilteredApps } from '../composables/useFilteredApps.ts'\nimport { useAppsStore } from '../store/apps.ts'\nimport { useUserSettingsStore } from '../store/userSettings.ts'\n\nconst route = useRoute()\nconst router = useRouter()\nconst store = useAppsStore()\nconst userSettings = useUserSettingsStore()\n\nconst visibleApps = useFilteredApps(() => store.apps)\nconst search = ref('')\n\nwatch(() => route.query.q, (newQuery) => {\n\tsearch.value = [newQuery || ''].flat()[0]!\n}, { immediate: true })\n\nwatchDebounced(search, (newValue) => {\n\trouter.replace({\n\t\t...route,\n\t\tquery: {\n\t\t\t...route.query,\n\t\t\tq: newValue.trim(),\n\t\t},\n\t})\n}, { debounce: 500 })\n</script>\n\n<template>\n\t<AppToolbar />\n\n\t<!-- Apps list -->\n\t<NcEmptyContent\n\t\tv-if=\"store.isLoadingApps\"\n\t\t:name=\"t('appstore', 'Loading app list')\">\n\t\t<template #icon>\n\t\t\t<NcLoadingIcon :size=\"64\" />\n\t\t</template>\n\t</NcEmptyContent>\n\n\t<component\n\t\t:is=\"userSettings.isGridView ? AppGrid : AppTable\"\n\t\tv-else-if=\"visibleApps.length && search.trim().length > 2\"\n\t\t:class=\"$style.appstoreSearch\"\n\t\t:apps=\"visibleApps\" />\n\t<NcEmptyContent\n\t\tv-else\n\t\t:name=\"t('appstore', 'No matching apps found')\"\n\t\t:description=\"search.trim().length <= 2 ? t('appstore', 'Please enter more characters to search.') : undefined\">\n\t\t<template #action>\n\t\t\t<NcInputField v-model=\"search\" type=\"search\" :label=\"t('appstore', 'Search apps')\" />\n\t\t</template>\n\t</NcEmptyContent>\n</template>\n\n<style module>\n.appstoreSearch {\n\tmargin-bottom: var(--body-container-margin);\n}\n</style>\n"],"names":["_sfc_main","NcIconSvgWrapper","ActionGlobalMixin","NC_ACTIONS_IS_SEMANTIC_MENU","createElementId","id","props","useModel","mdiCheckboxBlankOutline","mdiCheckboxMarked","event","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","_component_NcIconSvgWrapper","resolveComponent","openBlock","createElementBlock","normalizeClass","createElementVNode","withDirectives","$event","args","vModelCheckbox","createVNode","toDisplayString","NcActionCheckbox","_export_sfc","queue","PQueue","__props","isError","ref","isLoading","watchEffect","image","promise","resolve","_createElementBlock","_normalizeClass","$style","_createBlock","_unref","mdiCogOutline","NcLoadingIcon","userSettingsStore","useUserSettingsStore","route","useRoute","routeToDetails","computed","_createVNode","_component_RouterLink","AppImage","_createElementVNode","_toDisplayString","BadgeAppScore","BadgeAppLevel","BadgeAppDaemon","userSettings","gridSize","_Fragment","_renderList","app","AppGridItem","router","useRouter","watch","enabled","newSize","showIncompatible","NcActions","t","mdiFilterVariant","NcActionButtonGroup","NcActionButton","mdiSizeS","mdiSizeM","mdiSizeL","NcButton","mdiViewGrid","useFilteredApps","apps","store","query","toValue","needle","useAppsStore","currentCategory","visibleApps","AppToolbar","NcEmptyContent","_openBlock","_resolveDynamicComponent","AppGrid","AppTable","$router","$route","search","newQuery","watchDebounced","newValue","NcInputField"],"mappings":"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","x_google_ignoreList":[0]}