{"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"}