{"version":3,"file":"document-blank-B8M_rogp.js","sources":["../../../ui/src/stores/share-modal-store.ts","../../../ui/src/components/buttons/FavoriteButton.vue"],"sourcesContent":["import { defineStore } from 'pinia';\nimport type { Project } from '~/utilities/pyscript-api-models';\n\ninterface State {\n show: boolean;\n project: Project | null;\n version: string | null;\n excludeVersion: boolean;\n}\n\nexport const useShareModalStore = defineStore('share-modal', {\n state: (): State => ({\n show: false,\n project: null,\n version: null,\n\n // Determines if the version should be excluded from the URLs to be copied\n excludeVersion: false,\n }),\n\n getters: {\n /**\n * Constructs the URL to be copied. If it's a URL for a specific version,\n * the URL is constructed by utilizing the latest URL and replacing part\n * of the path with the specific version.\n *\n * Example 1: https://username.pyscriptapps.com/project-name/latest/\n * Example 2: https://username.pyscriptapps.com/project-name/v1/\n */\n siteUrlToCopy(state) {\n const latestUrl = state.project?.latest.url;\n\n if (!latestUrl) {\n return '';\n }\n\n const { origin } = new URL(latestUrl);\n return state.excludeVersion\n ? `${origin}/${state.project?.slug}/`\n : `${origin}/${state.project?.slug}/${state.version}/`;\n },\n\n codeUrlToCopy(state) {\n const origin = window.location.origin;\n const usernameOrId = state.project?.username || state.project?.user_id;\n\n return state.excludeVersion\n ? `${origin}/@${usernameOrId}/${state.project?.slug}/`\n : `${origin}/@${usernameOrId}/${state.project?.slug}/${state.version}`;\n },\n\n projectId(state) {\n return state.project?.id || '';\n },\n },\n\n actions: {\n open(project: Project, version = 'latest', excludeVersion = false) {\n this.version = version;\n this.project = project;\n this.show = true;\n this.excludeVersion = excludeVersion;\n },\n close() {\n // Reset the state back to the defaults\n this.$reset();\n },\n },\n});\n","<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { useFavoritesStore } from '~/stores/favorites-store';\nimport { useUserStore } from '~/stores/user-store';\nimport type { Project } from '~/utilities/pyscript-api-models';\nimport IconStar from '~icons/carbon/star';\nimport IconStarFilled from '~icons/carbon/star-filled';\n\nconst props = withDefaults(\n defineProps<{\n project: Project;\n size: 'sm' | 'md' | 'lg';\n }>(),\n {\n size: 'md',\n },\n);\n\nconst userStore = useUserStore();\nconst favoritesStore = useFavoritesStore();\nconst isFavorite = computed(() => favoritesStore.isFavorite(props.project.id));\n\nconst lg = 'text-base h-8 w-8';\nconst md = 'text-sm h-7 w-7';\nconst sm = 'text-xs h-6 w-6';\n\nfunction onFavoriteClick() {\n if (isFavorite.value) {\n favoritesStore.removeFavorite(props.project.id);\n } else {\n favoritesStore.addFavorite(props.project);\n }\n}\n</script>\n\n<template>\n <button\n v-if=\"userStore.isLoggedIn\"\n :class=\"{ [lg]: size === 'lg', [md]: size === 'md', [sm]: size === 'sm' }\"\n class=\"group flex items-center justify-center rounded-full text-new-gray-800 transition-colors hover:bg-new-gray-100/50 dark:text-new-gray-100\"\n @click=\"onFavoriteClick\"\n >\n <IconStarFilled\n v-if=\"isFavorite\"\n v-tooltip=\"{ content: 'Unfavorite' }\"\n class=\"shrink-0 text-yellow-500\"\n />\n <IconStar\n v-else\n v-tooltip=\"{ content: 'Favorite' }\"\n class=\"shrink-0 text-new-gray-400 transition-colors group-hover:text-slate-600 dark:group-hover:text-slate-100\"\n />\n </button>\n</template>\n\n<style scoped lang=\"postcss\"></style>\n"],"names":["useShareModalStore","defineStore","state","latestUrl","_a","origin","_b","_c","usernameOrId","_d","project","version","excludeVersion","lg","md","sm","props","__props","userStore","useUserStore","favoritesStore","useFavoritesStore","isFavorite","computed","onFavoriteClick"],"mappings":"mNAUa,MAAAA,GAAqBC,EAAY,cAAe,CAC3D,MAAO,KAAc,CACnB,KAAM,GACN,QAAS,KACT,QAAS,KAGT,eAAgB,EAAA,GAGlB,QAAS,CASP,cAAcC,EAAO,WACb,MAAAC,GAAYC,EAAAF,EAAM,UAAN,YAAAE,EAAe,OAAO,IAExC,GAAI,CAACD,EACI,MAAA,GAGT,KAAM,CAAE,OAAAE,CAAW,EAAA,IAAI,IAAIF,CAAS,EACpC,OAAOD,EAAM,eACT,GAAGG,CAAM,KAAIC,EAAAJ,EAAM,UAAN,YAAAI,EAAe,IAAI,IAChC,GAAGD,CAAM,KAAIE,EAAAL,EAAM,UAAN,YAAAK,EAAe,IAAI,IAAIL,EAAM,OAAO,GACvD,EAEA,cAAcA,EAAO,aACb,MAAAG,EAAS,OAAO,SAAS,OACzBG,IAAeJ,EAAAF,EAAM,UAAN,YAAAE,EAAe,aAAYE,EAAAJ,EAAM,UAAN,YAAAI,EAAe,SAExD,OAAAJ,EAAM,eACT,GAAGG,CAAM,KAAKG,CAAY,KAAID,EAAAL,EAAM,UAAN,YAAAK,EAAe,IAAI,IACjD,GAAGF,CAAM,KAAKG,CAAY,KAAIC,EAAAP,EAAM,UAAN,YAAAO,EAAe,IAAI,IAAIP,EAAM,OAAO,EACxE,EAEA,UAAUA,EAAO,OACR,QAAAE,EAAAF,EAAM,UAAN,YAAAE,EAAe,KAAM,EAC9B,CACF,EAEA,QAAS,CACP,KAAKM,EAAkBC,EAAU,SAAUC,EAAiB,GAAO,CACjE,KAAK,QAAUD,EACf,KAAK,QAAUD,EACf,KAAK,KAAO,GACZ,KAAK,eAAiBE,CACxB,EACA,OAAQ,CAEN,KAAK,OAAO,CACd,CACF,CACF,CAAC,2vDC9CKC,EAAK,oBACLC,EAAK,kBACLC,EAAK,gGAhBX,MAAMC,EAAQC,EAURC,EAAYC,IACZC,EAAiBC,IACjBC,EAAaC,EAAS,IAAMH,EAAe,WAAWJ,EAAM,QAAQ,EAAE,CAAC,EAM7E,SAASQ,GAAkB,CACrBF,EAAW,MACEF,EAAA,eAAeJ,EAAM,QAAQ,EAAE,EAE/BI,EAAA,YAAYJ,EAAM,OAAO,CAE5C"}