{"version":3,"mappings":"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","names":["props","__props","computed","c","_a","CustomError","customData","ignoreError","params","__publicField","useDebug","log","args","trace","useBusyStore","defineStore","busy","ref","showBusy","hideBusy","LoadStatus","LoadStatus2","supportedBrowsers","detectedScrollbarWidth","detectScrollbarWidth","scrollDiv","scrollbarWidth","emitter","mitt","useModalStore","enabledModal","watch","nextTick","onModalMount","showModal","modalId","inProps","hideModal","disposeAllModals","useAppStore","showFooter","productionMode","isMobileApp","isIPadDevice","enableNewSSMessaging","updateTitleAndDescription","data","useHead","updateDescription","description","updateTitle","title","browserSupported","checkBrowserSupport","getWebpSupport","elem","webpSupported","isBeyondChristmasSeason","currentDate","afterChristmas","beforeChristmasStart","asyncWait","lengthMsec","res","loadFont","id","url","elId","link","loadScript","script","waitUntilTrue","fn","count","debug","escapePipelineInTranslations","libraryCode","phraseKey","cloneDeep","value","sortBy","items","a","b","ansA","ansB","shuffle","arr","i","j","uniqueId","prefix","padZeros","val","decodeHtmlCharCodes","str","match","capture","charCode","useHomeStore","api","useApiStore","status","getHomeData","err","useBetaStore","localEnabled","useLocalStorage","t","useI18n","profile","useProfileStore","enabled","getAlphaEnabled","enableAlphaFeatures","featureLUT","features","featuresInNew","key","isFeatureToggleIn","featureItemsInBeta","featuresInBeta","showBetaToggle","featureDescriptionsInBeta","feature","f","featureDescriptionsInNew","initialized","getFeatures","enabledFeatures","isFeatureToggleEnabled","updateToProfile","init","profileIsEnabled","name","state","__vite_import_meta_env__","betaEnabled","pinia","createPinia","app","setUser","userId","sendSilentError","errMsg","extraData","handleVueError","vm","info","raygunInit","__vitePreload","loadRayGun","RaygunFunctions","updateQueryParamOnUrl","urlString","queryParamName","queryParamValue","urlstr","StorageSerializers","home","route","useRoute","beta","enableInviteUser","translate","useTranslationStore","visibility","useDocumentVisibility","profilePromise","showUrgentAnnouncementsOnly","getProfile","_signedIn","_level","firstTime","_getProfile","response","_b","_c","_d","profileAttentionUrl","signInUrl","signUpUrl","signOutUrl","switchOrgUrl","getPing","showExpiredMessage","showExpiringSoonMessage","showProfileNeedsAttentionMessage","signIn","defaultLanguage","loadLanguage","langCode","enUS","profileStore","i18n","availableLanguages","loadedLanguageCodes","currentLanguageCode","getAvailableLanguages","seti18nLanguage","languageCode","lang","html","getLanguage","loadedMessages","messages","languageLookUpTable","setLanguage","matchedBrowserLanguages","l","matchedBrowserLanguage","refreshProfile","formatNumbers","v","useToastStore","toasts","successToast","message","closable","persist","actions","createToast","warningToast","errorToast","variant","removeToastAfterTimeout","removeToast","index","checkIfVersionIsOutdatedInResponseHeader","headers","currentAppBuildVersion","serverBuildNumber","requestWrapper","requestUrl","config","body","formData","k","searchParams","fetchOptions","request","options","secondAttempt","disableToasts","handleServerError","handleResponse","requestParams","clone","e","m","payload","get","_options","post","del","useFavStore","favSongNumbers","enableSharedFavorites","songs","selectedSongNumber","modals","sharedLists","getSharedLists","getListDetails","createList","deleteList","renameList","reorderList","songNumbers","addSongtoList","songNumber","removeSongFromList","getFavorites","s","item","getFavoriteSongNumbers","addToFavorites","removeFromFavorites","addSongToSharedList","openNewListModal","fav","SelectEmailModal","defineAsyncComponent","ConfirmDeleteFavoritesListModal","WelcomeModal","SignInModal","UpgradeRequiredModal","SSRequiredModal","SubscriberFeatureModal","UnsupportedBrowserModal","ShareModal","PreferenceModal","InviteUserModal","ChordProInfoModal","AddSongModal","MaxSongModal","NavGuardModal","NewListModal","RenameListModal","SelectListModal","SelectProfileModal","UniqueSongsAboutModal","AddFilterDropdownModal","ConfirmResetSettingsModal","ConfirmClearStylesModal","NewFeaturesModal","ConfirmDisconnectIntegrationModal","CCLITop100Modal","CCLITopSongsModal","SetlistDetailsModal","ConfirmDeleteSetlistModal","AddLyricVideosModal","store","complete","afterComplete","display","alertClasses","icon","restartAnimation","__expose","handleAction","action","routerlink","checkExpand","toggleExpand","expand","forceValue","onClick","signedIn","SSLogo","useMobileStore","mobileWidth","hideMenuOnBreakpoint","showMobileNav","searchBarFocus","setSearchBarFocus","focused","toggleMobileNav","show","LyricVideosEnabledOrgIds","LYRIC_VIDEOS_ENABLED_ORG_IDS","useLyricVideosStore","enableFeature","alwaysEnableForEnv","orgId","enabledOrg","useIndexedDBCacheStore","available","dbName","storeName","testIfIndexedDBAvailable","openDB","resolve","reject","event","set","ttl","fromDate","expires","clearExpired","cursor","result","OneDay","OneHour","tokenFetch","serveCacheIfAvailable","cache","uri","token","fullurl","AppConstants","slugify","recordedVersionPromise","getSongVersions","d","useChartStore","availableCountries","availableCharts","allCharts","charts","cc","defaultCountry","fallbackCountry","isCCLIChartAvailable","chartCountryCode","geoChartWeeks","getChartWeeks","dataWeeks","getMostRecentChartWeek","chartWeeks","dates","results","date","getChartData","getAvailableCountries","cachedChartData","countryCode","weekOf","transformedResults","r","badges","songVersion","DefaultLVCustomization","useLyricVideoMVPStore","openedDropdowns","dropdownOpen","backgroundImages","backgroundVideos","getLyricVideoBackgrounds","enable","inBetaMode","setlistFeaturesEnabled","allVideos","featuredVideos","latestVideos","onOpenDropdown","onCloseDropdown","getSetlist","setlistId","getSetlists","pageNumber","pageSize","archivedLists","getUpcomingSetlists","getAllVideos","prefetchedData","prefetchLyricVideoData","videoId","getLyricVideoData","clearPrefetchedData","video","section","createNewSetlist","firstVideo","router","useRouter","onNewSetlistCreated","removeFromSetlist","setListId","setListItemId","toggleShowSavedStatus","addToSetlist","hasCustomizationsOnClipboard","customizationsClipboard","setCopyCustomizations","getCopyCustomizations","updateSetlist","setlist","deleteSetlist","getCustomizations","savedData","browseCustomizations","saveCustomizations","updateSetlistOrder","updateSetlistItem","setlistItemId","customizations","showSavedStatus","showSavedStatusTimer","lyricVideos","betaStore","chartStore","lyricVideosMVPStore","width","useWindowSize","enableDOM","timer","checkEnableDOM","enableEaster","enableLyricVideoMVP","active","enableDom","timeout","_sfc_render","_ctx","_cache","_openBlock","_createElementBlock","_hoisted_1","version","year","aTagRegEx","copyrightNoticeObject","text","regexMatch","allowedElement","startIndex","endIndex","element","copyrightNotice","enablePricing","classes","component","attributes","SignedInProfileButton","mobile","SearchCategory","categoryLUT","winSize","input","emit","__emit","search","inputFocused","useFocus","inputFocusedDelayed","useDebounce","ignoreClick","onSubmit","searchPlaceholder","focus","onBlur","DropdownContents","btn","toggleDropdown","contents","emitClick","_useModel","category","form","onClickOutside","lyricVideoMVPStore","searchInput","newSearch","onFormSubmit","showMobileSearch","hideMobileSearch","updateSearchValue","hasFocus","img","modeLabel","useDarkModeStore","darkMode","storedDarkMode","systemDarkMode","usePreferredDark","isDarkModeEnabled","setTheme","saveDarkModeSettingToCloud","theme","handleErr","routes","createRouter","createWebHistory","afterFirstRoute","onLCPEvent","launchScripts","to","from","colorScheme","musicPlayerPreferences","nextPath","initialTranslations","enUSTranslations","i18nOptions","createI18n","isSafari","chromeIos","test","safarimatches","isAndroid","isFirefox","isBot","userAgent","createApp","App","head","createHead","appStore"],"ignoreList":[],"sources":["../../Vue/src/components/FAIcon.vue","../../Vue/src/models/frontend-only/CustomError.ts","../../Vue/src/functions/debug.ts","../../Vue/src/stores/BusyStore.ts","../../Vue/src/models/frontend-only/LoadStatus.ts","../../Vue/src/supportedBrowsers.ts","../../Vue/src/functions/scrollbar-width.ts","../../Vue/src/config/mitt.ts","../../Vue/src/stores/ModalStore.ts","../../Vue/src/stores/App.ts","../../Vue/src/functions/xmas-check.ts","../../Vue/src/functions/misc.ts","../../Vue/src/stores/HomeStore.ts","../../Vue/src/stores/BetaStore.ts","../../Vue/src/config/RayGun.ts","../../Vue/src/functions/urls.ts","../../Vue/src/stores/ProfileStore.ts","../../Vue/src/stores/TranslationStore.ts","../../Vue/src/stores/ToastStore.ts","../../Vue/src/stores/ApiStore.ts","../../Vue/src/stores/FavoriteStore.ts","../../Vue/src/components/Modals.vue","../../Vue/src/components/Common/BusyOverlay.vue","../../Vue/src/components/Common/Alert.vue","../../Vue/src/components/Common/Toasts.vue","../../Vue/src/components/Framing/SiteNavLink.vue","../../Vue/src/components/Framing/NewSiteToggle.vue","../../Vue/src/assets/sslogo.svg","../../Vue/src/stores/MobileStore.ts","../../Vue/src/assets/json/LyricVideos.ts","../../Vue/src/stores/LyricVideosStore.ts","../../Vue/src/stores/IndexedDBCacheStore.ts","../../Vue/src/functions/token-fetch.ts","../../Vue/src/config/AppConstants.ts","../../Vue/src/functions/slug.ts","../../Vue/src/functions/song-versions.ts","../../Vue/src/stores/chartStore.ts","../../Vue/src/models/frontend-only/LyricVideos.ts","../../Vue/src/stores/LyricVideosMVPStore.ts","../../Vue/src/components/Framing/SiteNav.vue","../../Vue/src/components/General/DarkenOverlay.vue","../../Vue/src/components/Common/Container.vue","../../Vue/src/components/Framing/Footer.vue","../../Vue/src/components/Buttons/Button.vue","../../Vue/src/components/Framing/ProfileNav.vue","../../Vue/src/assets/json/search-categories.ts","../../Vue/src/components/Framing/SearchInput.vue","../../Vue/src/components/Dropdown/Dropdown.vue","../../Vue/src/components/Dropdown/DropdownItem.vue","../../Vue/src/components/Framing/SearchInputCategories.vue","../../Vue/src/components/Framing/SearchBar.vue","../../Vue/src/assets/ccli-mark.svg","../../Vue/src/components/General/MobileNavButton.vue","../../Vue/src/components/Framing/Header.vue","../../Vue/src/App.vue","../../Vue/src/config/pinia.ts","../../Vue/src/stores/DarkModeStore.ts","../../Vue/src/config/router.ts","../../Vue/src/config/i18n.ts","../../Vue/src/functions/browser.ts","../../Vue/src/main.ts"],"sourcesContent":["\r\n\r\n\r\n\r\n\r\n","export class CustomError extends Error {\r\n customData: any;\r\n ignoreError: boolean;\r\n constructor(customData: any, ignoreError: boolean = false, ...params: any[]) {\r\n super(...params);\r\n this.customData = customData;\r\n this.ignoreError = ignoreError;\r\n }\r\n}","const productionMode = import.meta.env.MODE === \"production\";\r\n\r\ndeclare global {\r\n interface Window {\r\n debug: any;\r\n }\r\n}\r\n\r\nexport function useDebug() {\r\n function log(...args: any[]) {\r\n if (!productionMode || window.debug) {\r\n console.log(...args);\r\n }\r\n }\r\n function trace(...args: any[]) {\r\n if (!productionMode || window.debug) {\r\n console.trace(...args);\r\n }\r\n }\r\n\r\n return { log, trace };\r\n}\r\n","export const useBusyStore = defineStore('busy', () => {\r\n const busy = ref(false);\r\n\r\n function showBusy() {\r\n busy.value = true;\r\n }\r\n\r\n function hideBusy() {\r\n busy.value = false;\r\n }\r\n\r\n return { busy, showBusy, hideBusy };\r\n});\r\n","export enum LoadStatus { \r\n Loading = 0, \r\n Ready, \r\n Error,\r\n}","export default \r\n/Edge?\\/(1{2}9|1[2-9]\\d|[2-9]\\d{2}|\\d{4,})(\\.\\d+|)(\\.\\d+|)|Firefox\\/(1{2}9|1[2-9]\\d|[2-9]\\d{2}|\\d{4,})\\.\\d+(\\.\\d+|)|Chrom(ium|e)\\/(109|1[1-9]\\d|[2-9]\\d{2}|\\d{4,})\\.\\d+(\\.\\d+|)|(Maci|X1{2}).+ Version\\/(16\\.([6-9]|\\d{2,})|(1[7-9]|[2-9]\\d|\\d{3,})\\.\\d+)([,.]\\d+|)( \\(\\w+\\)|)( Mobile\\/\\w+|) Safari\\/|Chrome.+OPR\\/(10[3-9]|1[1-9]\\d|[2-9]\\d{2}|\\d{4,})\\.\\d+\\.\\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(16[._]([6-9]|\\d{2,})|(1[7-9]|[2-9]\\d|\\d{3,})[._]\\d+)([._]\\d+|)|Opera Mini|Android:?[ /-](1{2}9|1[2-9]\\d|[2-9]\\d{2}|\\d{4,})(\\.\\d+|)(\\.\\d+|)|Mobile Safari.+OPR\\/(7[3-9]|[89]\\d|\\d{3,})\\.\\d+\\.\\d+|Android.+Firefox\\/(1{2}9|1[2-9]\\d|[2-9]\\d{2}|\\d{4,})\\.\\d+(\\.\\d+|)|Android.+Chrom(ium|e)\\/(1{2}9|1[2-9]\\d|[2-9]\\d{2}|\\d{4,})\\.\\d+(\\.\\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(15\\.([5-9]|\\d{2,})|(1[6-9]|[2-9]\\d|\\d{3,})\\.\\d+)\\.\\d+|SamsungBrowser\\/(2[2-9]|[3-9]\\d|\\d{3,})\\.\\d+|Android.+MQ{2}Browser\\/(13(\\.([1-9]|\\d{2,})|)|(1[4-9]|[2-9]\\d|\\d{3,})(\\.\\d+|))(\\.\\d+|)|K[Aa][Ii]OS\\/(2\\.([5-9]|\\d{2,})|([3-9]|\\d{2,})\\.\\d+)(\\.\\d+|)/\r\n","let detectedScrollbarWidth = false;\r\nexport function detectScrollbarWidth() {\r\n if (detectedScrollbarWidth) {\r\n return;\r\n }\r\n detectedScrollbarWidth = true;\r\n const scrollDiv = document.createElement(\"div\");\r\n scrollDiv.className = \"scrollbar-measure\";\r\n scrollDiv.style.width = \"100px\";\r\n scrollDiv.style.height = \"100px\";\r\n scrollDiv.style.overflow = \"scroll\";\r\n scrollDiv.style.position = \"absolute\";\r\n scrollDiv.style.top = \"-9999px\";\r\n\r\n document.body.appendChild(scrollDiv);\r\n\r\n // Get the scrollbar width\r\n const scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\r\n // Delete the div\r\n document.body.removeChild(scrollDiv);\r\n document.documentElement.style.setProperty(\r\n \"--scrollbar-width\",\r\n `${scrollbarWidth}px`,\r\n );\r\n}\r\n","import { LyricVideoSetlistItem } from \"@/models/LyricVideoSetlistItem\";\r\nimport mitt, { Emitter } from \"mitt\";\r\n\r\nexport const emitter: Emitter<{\r\n languageUpdated: void;\r\n hideAllModals: void;\r\n songListUpdated: string;\r\n alwaysShowId: string;\r\n deactivateAllPreviews: void;\r\n readyToRunNonBlockingScripts: void;\r\n resetFontStylesConfirmed: void;\r\n resetAllSettingsConfirmed: void;\r\n youtubeVideoEnded: void;\r\n LCPEvent: void;\r\n disconnectIntegrationConfirmed: void;\r\n reloadSetlist: void;\r\n copyCurrentCustomizations: void;\r\n pasteCustomizations: void;\r\n goToSetlist: string;\r\n refreshSetlistView: void;\r\n updatedSetlistDetails: {\r\n setListId: string;\r\n setListName: string;\r\n setListNote: string;\r\n setListDate: string;\r\n displaySongTitles: boolean;\r\n displaySongCopyrights: boolean;\r\n };\r\n}> = mitt();\r\n","type ModalId =\r\n | \"WelcomeModal\"\r\n | \"SignInModal\"\r\n | \"UpgradeRequiredModal\"\r\n | \"SSRequiredModal\"\r\n | \"SubscriberFeatureModal\"\r\n | \"UnsupportedBrowserModal\"\r\n | \"ShareModal\"\r\n | \"PreferenceModal\"\r\n | \"SelectListModal\"\r\n | \"InviteUserModal\"\r\n | \"ChordProInfoModal\"\r\n | \"AddSongModal\"\r\n | \"MaxSongModal\"\r\n | \"ConfirmDeleteSetlistModal\"\r\n //| \"MediaPlayerSettingsModal\"\r\n | \"NavGuardModal\"\r\n | \"NewListModal\"\r\n | \"RenameListModal\"\r\n | \"SelectListModal\"\r\n | \"SelectProfileModal\"\r\n | \"UniqueSongsAboutModal\"\r\n | \"ConfirmDeleteFavoritesListModal\"\r\n | \"AddLyricVideosModal\"\r\n | \"AddFilterDropdownModal\"\r\n | \"SelectEmailModal\"\r\n | \"ConfirmResetSettingsModal\"\r\n | \"ConfirmClearStylesModal\"\r\n | \"NewFeaturesModal\"\r\n | \"ConfirmDisconnectIntegrationModal\"\r\n | \"CCLITop100Modal\"\r\n | \"SetlistDetailsModal\"\r\n | \"CCLITopSongsModal\";\r\n\r\nexport const useModalStore = defineStore(\"modal\", () => {\r\n const enabledModal = ref(\"\");\r\n const showBusy = ref(false);\r\n const props = ref({});\r\n\r\n watch(enabledModal, async () => {\r\n if (enabledModal.value) {\r\n await nextTick();\r\n document.body.classList.add(\"modal-open\");\r\n } else {\r\n document.body.classList.remove(\"modal-open\");\r\n }\r\n });\r\n\r\n function onModalMount() {\r\n showBusy.value = false;\r\n }\r\n\r\n function showModal(modalId: ModalId, inProps?: { [key: string]: any }) {\r\n detectScrollbarWidth();\r\n props.value = inProps || {};\r\n enabledModal.value = modalId;\r\n showBusy.value = true;\r\n }\r\n\r\n function hideModal() {\r\n emitter.emit(\"hideAllModals\");\r\n setTimeout(disposeAllModals, 300);\r\n }\r\n\r\n function disposeAllModals() {\r\n enabledModal.value = \"\";\r\n }\r\n\r\n return {\r\n showModal,\r\n hideModal,\r\n enabledModal,\r\n disposeAllModals,\r\n showBusy,\r\n onModalMount,\r\n props,\r\n };\r\n});\r\n","import supportedBrowsers from \"./../supportedBrowsers\";\r\n\r\nexport const useAppStore = defineStore(\"app\", () => {\r\n const showFooter = ref(false);\r\n const productionMode = import.meta.env.MODE === \"production\";\r\n const isMobileApp = import.meta.env.MODE === \"cap\";\r\n const isIPadDevice =\r\n /iPad|Macintosh/.test(navigator.userAgent) && \"ontouchend\" in document;\r\n const enableNewSSMessaging = import.meta.env.VITE_ENABLE_NEW_SS_MSG === \"1\";\r\n\r\n function updateTitleAndDescription(data: {\r\n title: string;\r\n description: string;\r\n }) {\r\n useHead({\r\n title: data.title,\r\n meta: [\r\n {\r\n name: \"description\",\r\n content: data.description,\r\n },\r\n ],\r\n });\r\n }\r\n\r\n function updateDescription(description: string) {\r\n useHead({\r\n meta: [\r\n {\r\n name: \"description\",\r\n content: description,\r\n },\r\n ],\r\n });\r\n }\r\n\r\n function updateTitle(title: string) {\r\n useHead({\r\n title: title,\r\n });\r\n }\r\n\r\n // const isImageWebPSupported = (() => {\r\n // const elem = document.createElement(\"canvas\");\r\n // let supported: boolean = false;\r\n // if (!!(elem.getContext && elem.getContext(\"2d\"))) {\r\n // supported = elem.toDataURL(\"image/webp\").indexOf(\"data:image/webp\") == 0;\r\n // } else {\r\n // // very old browser like IE 8, canvas not supported\r\n // supported = false;\r\n // }\r\n // return supported;\r\n // })();\r\n\r\n const browserSupported = supportedBrowsers.test(navigator.userAgent);\r\n\r\n function checkBrowserSupport() {\r\n if (!isMobileApp && !browserSupported) {\r\n const modals = useModalStore();\r\n modals.showModal(\"UnsupportedBrowserModal\");\r\n }\r\n }\r\n\r\n function getWebpSupport() {\r\n const elem = document.createElement(\"canvas\");\r\n\r\n if (elem.getContext && elem.getContext(\"2d\")) {\r\n // was able or not to get WebP representation\r\n return elem.toDataURL(\"image/webp\").indexOf(\"data:image/webp\") == 0;\r\n } else {\r\n // very old browser like IE 8, canvas not supported\r\n return false;\r\n }\r\n }\r\n const webpSupported = ref(getWebpSupport());\r\n\r\n return {\r\n checkBrowserSupport,\r\n browserSupported,\r\n productionMode,\r\n enableNewSSMessaging,\r\n updateTitleAndDescription,\r\n updateTitle,\r\n updateDescription,\r\n isMobileApp,\r\n showFooter,\r\n webpSupported,\r\n isIPadDevice,\r\n };\r\n});\r\n","export function isBeyondChristmasSeason() {\r\n const currentDate = new Date();\r\n const afterChristmas = new Date(currentDate.getFullYear(), 0, 10); // Jan 10,\r\n const beforeChristmasStart = new Date(currentDate.getFullYear(), 6, 1); // July 1\r\n\r\n return currentDate > afterChristmas && currentDate < beforeChristmasStart;\r\n}\r\n","export function asyncWait(lengthMsec = 200) {\r\n return new Promise((res) => setTimeout(res, lengthMsec));\r\n}\r\n\r\nexport function loadFont(id: string, url: string) {\r\n const elId = `fontScript${id}`;\r\n const el = document.querySelector(`#${elId}`);\r\n if (el) {\r\n return;\r\n }\r\n const link = document.createElement(\"link\");\r\n link.rel = \"stylesheet\";\r\n link.href = url;\r\n link.id = elId;\r\n document.head.appendChild(link);\r\n}\r\n\r\nexport function loadScript(url: string, id: string) {\r\n const el = document.querySelector(`#${id}`);\r\n if (el) {\r\n return Promise.resolve();\r\n }\r\n const script = document.createElement(\"script\");\r\n script.id = id;\r\n script.setAttribute(\"src\", url);\r\n\r\n return new Promise((res) => {\r\n script.addEventListener(\"load\", () => {\r\n res();\r\n });\r\n document.body.appendChild(script);\r\n });\r\n}\r\n\r\nexport async function waitUntilTrue(fn: () => any) {\r\n let count = 0;\r\n while (!fn()) {\r\n await new Promise((res) => setTimeout(() => res(), 100));\r\n count++;\r\n if (count === 50) {\r\n const debug = useDebug();\r\n debug.log(\"still waiting\");\r\n debug.trace(\"waitUntilTrue\");\r\n }\r\n }\r\n}\r\n\r\nexport function escapePipelineInTranslations(data: {\r\n [libraryCode: string]: { [phraseKey: string]: any };\r\n}) {\r\n //for (const countryCode of Object.keys(data)) {\r\n for (const libraryCode of Object.keys(data)) {\r\n for (const phraseKey of Object.keys(data[libraryCode])) {\r\n if (data[libraryCode][phraseKey] !== null) {\r\n if (data[libraryCode][phraseKey].replaceAll) {\r\n data[libraryCode][phraseKey] = data[libraryCode][\r\n phraseKey\r\n ].replaceAll(\"|\", \"{'|'}\");\r\n }\r\n }\r\n }\r\n }\r\n //}\r\n return data;\r\n}\r\n\r\nexport function cloneDeep(value: T) {\r\n return JSON.parse(JSON.stringify(value)) as T;\r\n}\r\n\r\nexport function sortBy(items: Array, fn: (data: T) => any) {\r\n const data = cloneDeep(items);\r\n data.sort((a, b) => {\r\n const ansA = fn(a);\r\n const ansB = fn(b);\r\n if (ansA < ansB) {\r\n return -1;\r\n } else if (ansB < ansA) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n return data as T[];\r\n}\r\n\r\nexport function shuffle(arr: Array) {\r\n const a = cloneDeep(arr);\r\n for (let i = a.length - 1; i > 0; i--) {\r\n const j = Math.floor(Math.random() * (i + 1));\r\n [a[i], a[j]] = [a[j], a[i]];\r\n }\r\n return a;\r\n}\r\n\r\nlet id = 0;\r\n\r\nexport function uniqueId(prefix?: string) {\r\n id++;\r\n const val = `${prefix || \"uniq\"}-${id}`;\r\n return val;\r\n}\r\n\r\nexport function padZeros(val: number) {\r\n if (val < 10) {\r\n return `0${val.toString()}`;\r\n }\r\n return val.toString();\r\n}\r\n\r\nexport function convertSecondsToDisplayTime(seconds: number) {\r\n const minutes = Math.floor(seconds / 60);\r\n const remainingSeconds = Math.round(seconds % 60);\r\n return `${minutes}:${padZeros(remainingSeconds)}`;\r\n}\r\n","import { LoadStatus } from \"@/models/frontend-only/LoadStatus\";\r\nimport { HomeData } from \"@/models/HomeData\";\r\n\r\nconst decodeHtmlCharCodes = (str: string) =>\r\n str.replace(/(&#(\\d+);)/g, (match, capture, charCode) =>\r\n String.fromCharCode(charCode),\r\n );\r\n\r\nexport const useHomeStore = defineStore(\"home\", () => {\r\n const busy = useBusyStore();\r\n const api = useApiStore();\r\n const status = ref(LoadStatus.Loading);\r\n const data = ref(null);\r\n\r\n async function getHomeData() {\r\n data.value = null;\r\n status.value = LoadStatus.Loading;\r\n busy.showBusy();\r\n try {\r\n data.value = await api.get(\"/GetHomeData\");\r\n if (!data.value) {\r\n throw new Error(\"Home data missing\");\r\n }\r\n if (isBeyondChristmasSeason()) {\r\n data.value.popularThemes = data.value.popularThemes.filter(\r\n (b) => !b.searchQuery.toLowerCase().includes(\"theme_christmas\"),\r\n );\r\n }\r\n data.value.banners.forEach((b) => {\r\n b.id = uniqueId(\"banner\");\r\n b.text.title = decodeHtmlCharCodes(b.text.title);\r\n b.text.subtitle = decodeHtmlCharCodes(b.text.subtitle);\r\n });\r\n status.value = LoadStatus.Ready;\r\n } catch (err) {\r\n status.value = LoadStatus.Error;\r\n }\r\n busy.hideBusy();\r\n }\r\n\r\n return {\r\n getHomeData,\r\n status,\r\n data,\r\n };\r\n});\r\n","import { defineStore } from \"pinia\";\r\nimport { useI18n } from \"vue-i18n\";\r\n\r\nexport const useBetaStore = defineStore(\"beta\", () => {\r\n const localEnabled = useLocalStorage(\"ss-beta-enabled\", false);\r\n\r\n const { t } = useI18n();\r\n const profile = useProfileStore();\r\n\r\n const enabled = computed({\r\n get: (): boolean =>\r\n (profile.profile && localEnabled.value && profile.profile.signedIn) ||\r\n false,\r\n set: (value) => {\r\n localEnabled.value = value;\r\n },\r\n });\r\n const api = useApiStore();\r\n\r\n function getAlphaEnabled() {\r\n const params = new URLSearchParams(window.location.search);\r\n const alpha = params.get(\"alpha\");\r\n return alpha === \"1\";\r\n }\r\n const enableAlphaFeatures = ref(getAlphaEnabled());\r\n\r\n const enableBetaToggle = import.meta.env.VITE_ENABLE_BETA_TOGGLE === \"1\";\r\n\r\n const featureLUT = computed<\r\n Record\r\n >(() => {\r\n return {\r\n recordingFocusLayout: {\r\n env: \"VITE_ENABLE_RECORDING_FOCUS_SONG_DETAIL_LAYOUT\",\r\n description: t(\"SV.MES_NewFeaturesRecordingFocus\"), // Chords, Lead sheets, and Vocal sheets based on recording.\r\n },\r\n fullSongPlayback: {\r\n env: \"VITE_ENABLE_FULL_SONG_PLAYBACK\",\r\n description:\r\n import.meta.env.VITE_ENABLE_SPOTIFY === \"1\"\r\n ? t(\"SV.MES_NewFeaturesFullSongPlayback\")\r\n : t(\"SV.MES_NewFeaturesFullSongPlaybackAppleMusicOnly\"),\r\n //\"Connect your Apple Music or Spotify account to enable full song playback.\",\r\n },\r\n ccliTop100New: {\r\n env: \"VITE_ENABLE_CCLI_TOP_100_NEW\",\r\n description: t(\"SV.MES_NewFeaturesCCLITop100Homepage\"),\r\n },\r\n\r\n inviteUser: {\r\n env: \"VITE_ENABLE_PROFILE_INVITE_USER\",\r\n description: t(\"SV.MES_NewFeaturesInviteUsers\"),\r\n },\r\n\r\n chordFontSettings: {\r\n env: \"VITE_ENABLE_SHEETMUSIC_CHORDS_FONT_SETTINGS\",\r\n description: t(\"SV.MES_NewFeaturesCustomizedFontsLyricsChords\"), //\"Customized fonts for lyrics and chords.\",\r\n },\r\n midiScrollImprovements: {\r\n env: \"VITE_ENABLE_SHEETMUSIC_MIDI_SCROLL_IMPROVEMENTS\",\r\n description: t(\"SV.MES_NewFeaturesAutoScrollMidi\"),\r\n },\r\n\r\n /** these are now officially on always - not new */\r\n\r\n lyricFontSettings: {\r\n env: \"VITE_ENABLE_SHEETMUSIC_LYRIC_FONT_SETTINGS\",\r\n description: \"\",\r\n },\r\n recentlyViewed: {\r\n env: \"VITE_ENABLE_HOME_RECENTLY_VIEWED\",\r\n description: t(\"SV.MES_NewFeaturesSeeRecentlyViewed\"),\r\n },\r\n sharedFavorites: {\r\n env: \"VITE_ENABLE_SHARED_FAVORITES\",\r\n description: t(\"SV.MES_NewFeaturesCreateAndSaveSongLists\"),\r\n },\r\n sheetmusicPipeline: {\r\n env: \"VITE_ENABLE_SHEETMUSIC_RENDERER_NEW_PIPELINE\",\r\n description:\r\n \"Enable the use of the new sheetmusic pipeline for rendering lead/vocal sheets.\",\r\n },\r\n lyricVideoMVP: {\r\n env: \"VITE_ENABLE_LYRIC_VIDEO_MVP\",\r\n description: \"Allow the use of lyric videos.\",\r\n },\r\n };\r\n });\r\n\r\n const features = ref<{ [key: string]: boolean }>({});\r\n const featuresInNew = computed(() => {\r\n const features: (typeof featureLUT.value)[] = [];\r\n Object.keys(featureLUT.value).forEach((key) => {\r\n if (isFeatureToggleIn((featureLUT.value as any)[key].env, \"new\")) {\r\n features.push((featureLUT.value as any)[key]);\r\n }\r\n });\r\n return features;\r\n });\r\n\r\n const featureItemsInBeta = computed(() => {\r\n const features: (typeof featureLUT.value)[] = [];\r\n Object.keys(featureLUT.value).forEach((key) => {\r\n if (isFeatureToggleIn((featureLUT.value as any)[key].env, \"beta\")) {\r\n features.push((featureLUT.value as any)[key]);\r\n }\r\n });\r\n return features;\r\n });\r\n\r\n const featuresInBeta = computed(() => {\r\n const items: string[] = [];\r\n Object.keys(featureLUT.value).forEach((key) => {\r\n if (isFeatureToggleIn((featureLUT.value as any)[key].env, \"beta\") || isFeatureToggleIn((featureLUT.value as any)[key].env, \"alpha-beta\")) {\r\n items.push(key);\r\n }\r\n });\r\n return items;\r\n });\r\n\r\n const showBetaToggle = computed(\r\n () => enableBetaToggle && featureItemsInBeta.value.length > 0,\r\n );\r\n\r\n const featureDescriptionsInBeta = computed(() =>\r\n featureItemsInBeta.value\r\n .flatMap((feature) => feature.description)\r\n .filter((f) => !!f),\r\n );\r\n\r\n const featureDescriptionsInNew = computed(() =>\r\n featuresInNew.value\r\n .flatMap((feature) => feature.description)\r\n .filter((f) => !!f),\r\n );\r\n const initialized = ref(false);\r\n\r\n function getFeatures() {\r\n const enabledFeatures: { [key: string]: boolean } = {};\r\n\r\n Object.keys(featureLUT.value).forEach((key) => {\r\n enabledFeatures[key] = isFeatureToggleEnabled(\r\n (featureLUT.value as any)[key].env,\r\n enabled.value,\r\n );\r\n });\r\n\r\n features.value = enabledFeatures;\r\n }\r\n getFeatures();\r\n watch(enabled, getFeatures);\r\n watch(enabled, updateToProfile);\r\n\r\n function init(profileIsEnabled: boolean) {\r\n enabled.value = profileIsEnabled;\r\n initialized.value = true;\r\n getFeatures();\r\n }\r\n\r\n function updateToProfile() {\r\n if (profile.profile?.signedIn && initialized.value) {\r\n api.post(\"/UpdateBetaToggle\", {\r\n betaToggle: enabled.value,\r\n });\r\n } else {\r\n initialized.value = false;\r\n }\r\n }\r\n\r\n function isFeatureToggleIn(name: string, state: string) {\r\n const val: string = import.meta.env[name];\r\n if (val.toLowerCase() === state) {\r\n if (name === \"VITE_ENABLE_LYRIC_VIDEO_MVP\") {\r\n return profile.profile?.featureToggles.enableLyricVideos || false;\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n function isFeatureToggleEnabled(name: string, betaEnabled: boolean): boolean {\r\n const val: string = import.meta.env[name];\r\n if (val) {\r\n if (\r\n val === \"1\" ||\r\n val.toLowerCase() === \"on\" ||\r\n val.toLowerCase() === \"new\"\r\n ) {\r\n return true;\r\n }\r\n if (val.toLowerCase() === \"alpha\") {\r\n return enableAlphaFeatures.value;\r\n }\r\n if (val.toLowerCase() === \"beta\" || val.toLowerCase() === 'alpha-beta') {\r\n if (!enableBetaToggle) {\r\n return false;\r\n }\r\n if (profile.profile?.signedIn) {\r\n return betaEnabled && (val.toLowerCase() !== 'alpha-beta' || enableAlphaFeatures.value);\r\n } else {\r\n return false;\r\n }\r\n }\r\n if (val === \"0\" || val.toLowerCase() === \"off\") {\r\n return false;\r\n }\r\n throw new Error(`Feature toggle state not recognized: ${name}:${val} `);\r\n }\r\n return false;\r\n }\r\n\r\n return {\r\n enabled,\r\n features,\r\n featuresInBeta,\r\n enableAlphaFeatures,\r\n featureDescriptionsInBeta,\r\n featureDescriptionsInNew,\r\n showBetaToggle,\r\n init,\r\n };\r\n});\r\n","import { CustomError } from \"@/models/frontend-only/CustomError\";\r\ndeclare const rg4js: any;\r\nconst pinia = createPinia();\r\nconst app = useAppStore(pinia);\r\n\r\nasync function setUser(userId: null | string) {\r\n if (import.meta.env.VITE_RAYGUN_KEY && app.browserSupported) {\r\n await waitUntilTrue(() => !!(window as any).rg4js);\r\n if (!userId) {\r\n rg4js(\"setUser\", {\r\n isAnonymous: true,\r\n identifier: \"\",\r\n uuid: \"\",\r\n });\r\n } else {\r\n rg4js(\"setUser\", {\r\n identifier: userId,\r\n isAnonymous: false,\r\n uuid: userId,\r\n });\r\n }\r\n }\r\n}\r\n\r\nasync function sendSilentError(errMsg: string, extraData: any) {\r\n if (app.browserSupported) {\r\n if (import.meta.env.VITE_RAYGUN_KEY) {\r\n await waitUntilTrue(() => !!(window as any).rg4js);\r\n rg4js(\"send\", {\r\n error: new Error(errMsg),\r\n customData: { extraData, silentError: true },\r\n });\r\n }\r\n }\r\n}\r\n\r\nasync function handleVueError(err: any, vm: any, info: string) {\r\n if (app.browserSupported) {\r\n console.error(err);\r\n if ((err as CustomError).ignoreError) {\r\n return;\r\n }\r\n\r\n if (import.meta.env.VITE_RAYGUN_KEY) {\r\n await waitUntilTrue(() => !!(window as any).rg4js);\r\n rg4js(\"send\", {\r\n error: err,\r\n customData: { err, info },\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport async function raygunInit() {\r\n if (app.browserSupported) {\r\n (await import(\"./RaygunLoadScript\")).loadRayGun();\r\n await waitUntilTrue(() => !!(window as any).rg4js);\r\n rg4js(\"enableCrashReporting\", true);\r\n rg4js(\"apiKey\", import.meta.env.VITE_RAYGUN_KEY);\r\n rg4js(\"enablePulse\", false);\r\n rg4js(\"setVersion\", import.meta.env.VITE_BUILD_VERSION);\r\n rg4js(\"withTags\", [\"js\"]);\r\n rg4js(\"options\", {\r\n captureUnhandledRejections: false,\r\n ignore3rdPartyErrors: true,\r\n saveIfOffline: true,\r\n ignoreAjaxAbort: true,\r\n });\r\n useDebug().log(\"raygun initialized\");\r\n }\r\n}\r\n\r\nexport const RaygunFunctions = {\r\n setUser,\r\n sendSilentError,\r\n handleVueError,\r\n};\r\n","export function updateQueryParamOnUrl(\r\n urlString: string,\r\n queryParamName: string,\r\n queryParamValue: string\r\n) {\r\n if (!urlString) {\r\n return \"\";\r\n }\r\n let urlstr = urlString;\r\n if (urlstr.match(/^\\//)) {\r\n urlstr = window.location.origin + urlstr;\r\n }\r\n const url = new URL(urlstr);\r\n url.searchParams.delete(queryParamName);\r\n url.searchParams.append(queryParamName, queryParamValue);\r\n return url.href;\r\n}\r\n","import { Profile } from \"@/models/Profile\";\r\nimport { LoadStatus } from \"@/models/frontend-only/LoadStatus\";\r\nimport { StorageSerializers } from \"@vueuse/core\";\r\n\r\nexport const useProfileStore = defineStore(\"profile\", () => {\r\n const profile = useLocalStorage(\"ss-profile\", null, {\r\n serializer: StorageSerializers.object,\r\n });\r\n\r\n const api = useApiStore();\r\n const app = useAppStore();\r\n const home = useHomeStore();\r\n const route = useRoute();\r\n const beta = useBetaStore();\r\n const enableInviteUser = computed(\r\n () => beta.features.inviteUser && profile.value?.isAdmin,\r\n );\r\n const translate = useTranslationStore();\r\n const visibility = useDocumentVisibility();\r\n const status = ref(LoadStatus.Loading);\r\n let profilePromise: Promise | null = null;\r\n\r\n const features = computed(() => profile.value?.featureToggles);\r\n\r\n watch(visibility, (visibility: \"visible\" | \"hidden\") => {\r\n if (\r\n visibility === \"visible\" &&\r\n profile.value?.signedIn &&\r\n route.path === \"/\" &&\r\n showUrgentAnnouncementsOnly.value\r\n ) {\r\n getProfile();\r\n }\r\n });\r\n\r\n async function getProfile(\r\n _signedIn?: boolean,\r\n _level?: string,\r\n firstTime?: boolean,\r\n ) {\r\n if (\r\n !profilePromise ||\r\n _signedIn !== undefined ||\r\n status.value !== LoadStatus.Loading\r\n ) {\r\n profilePromise = _getProfile(_signedIn, _level, firstTime);\r\n }\r\n await profilePromise;\r\n await translate.init();\r\n }\r\n\r\n async function _getProfile(\r\n _signedIn?: boolean,\r\n _level?: string,\r\n firstTime?: boolean,\r\n ) {\r\n try {\r\n if (firstTime && (window as any).initialSSProfile) {\r\n profile.value = (window as any).initialSSProfile;\r\n } else {\r\n const response = await api.get(\"/user/GetProfileDetails\");\r\n profile.value = response;\r\n\r\n (window as any).dataLayer = (window as any).dataLayer || [];\r\n (window as any).dataLayer.push({\r\n subscriptionLevel: profile.value?.subscriptionLevel || \"\",\r\n userId: profile.value?.userId || \"\",\r\n orgId: profile.value?.orgId || \"\",\r\n });\r\n }\r\n\r\n RaygunFunctions.setUser(profile.value?.userId || null);\r\n if (profile.value && profile.value.signedIn) {\r\n beta.init(profile.value.betaToggle || false);\r\n }\r\n\r\n status.value = LoadStatus.Ready;\r\n } catch (err) {\r\n status.value = LoadStatus.Error;\r\n throw err;\r\n }\r\n }\r\n\r\n const profileAttentionUrl = computed(() => {\r\n if (!profile.value?.profileAttentionUrl) {\r\n return \"\";\r\n }\r\n return updateQueryParamOnUrl(\r\n profile.value.profileAttentionUrl,\r\n \"returnUrl\",\r\n window.location.origin + route.fullPath,\r\n );\r\n });\r\n\r\n const signInUrl = computed(() => {\r\n if (!profile.value?.signInUrl) {\r\n return \"\";\r\n }\r\n return updateQueryParamOnUrl(\r\n profile.value.signInUrl,\r\n \"returnUrl\",\r\n window.location.origin + route.fullPath,\r\n );\r\n });\r\n\r\n const signUpUrl = computed(() => {\r\n if (!profile.value?.signUpUrl) {\r\n return \"\";\r\n }\r\n return updateQueryParamOnUrl(\r\n profile.value.signUpUrl,\r\n \"returnUrl\",\r\n window.location.origin + route.fullPath,\r\n );\r\n });\r\n\r\n const signOutUrl = computed(() => {\r\n if (!profile.value?.signOutUrl) {\r\n return \"\";\r\n }\r\n return updateQueryParamOnUrl(\r\n profile.value.signOutUrl,\r\n \"returnUrl\",\r\n window.location.origin,\r\n );\r\n });\r\n\r\n const switchOrgUrl = computed(() => {\r\n if (!profile.value?.switchOrgUrl) {\r\n return \"\";\r\n }\r\n return updateQueryParamOnUrl(\r\n profile.value.switchOrgUrl,\r\n \"returnUrl\",\r\n window.location.origin,\r\n );\r\n });\r\n\r\n // Helps to ensure server build is the same.\r\n async function getPing() {\r\n await api.get(\"/user/Ping\");\r\n }\r\n\r\n getProfile(undefined, undefined, true);\r\n\r\n //get ping every 5 minutes. Helps to ensure server build is the same.;\r\n if (!app.isMobileApp) {\r\n setInterval(() => getPing(), 1000 * 60 * 15);\r\n }\r\n setInterval(() => getProfile(), 1000 * 60 * 30);\r\n\r\n const showExpiredMessage = computed(\r\n () =>\r\n home.status === LoadStatus.Ready &&\r\n profile.value?.signedIn &&\r\n profile.value?.displayExpiredMessage,\r\n );\r\n\r\n const showExpiringSoonMessage = computed(\r\n () =>\r\n home.status === LoadStatus.Ready &&\r\n profile.value?.signedIn &&\r\n profile.value?.displayExpiringSoonMessage &&\r\n !showExpiredMessage.value,\r\n );\r\n\r\n const showProfileNeedsAttentionMessage = computed(\r\n () =>\r\n home.status === LoadStatus.Ready &&\r\n profile.value?.signedIn &&\r\n profile.value?.profileAttentionUrl &&\r\n !showExpiredMessage.value &&\r\n !showExpiringSoonMessage.value,\r\n );\r\n\r\n const showUrgentAnnouncementsOnly = computed(\r\n () =>\r\n home.status === LoadStatus.Ready &&\r\n (showExpiredMessage.value ||\r\n showExpiringSoonMessage.value ||\r\n showProfileNeedsAttentionMessage.value),\r\n );\r\n\r\n function signIn() {\r\n //if (app.isMobileApp) {\r\n // mobile.openBrowser(signInUrl.value);\r\n //} else {\r\n window.location.href = signInUrl.value;\r\n //}\r\n }\r\n\r\n return {\r\n profile,\r\n getProfile,\r\n profilePromise,\r\n getPing,\r\n features,\r\n signInUrl,\r\n profileAttentionUrl,\r\n signUpUrl,\r\n signOutUrl,\r\n switchOrgUrl,\r\n status,\r\n showExpiredMessage,\r\n showProfileNeedsAttentionMessage,\r\n showUrgentAnnouncementsOnly,\r\n showExpiringSoonMessage,\r\n enableInviteUser,\r\n signIn,\r\n };\r\n});\r\n","import { Language } from \"@/models/Language\";\r\n\r\nconst defaultLanguage = \"en-US\";\r\nconst locales = import.meta.glob(\"@/assets/locales/*.json\");\r\n\r\nasync function loadLanguage(langCode: string) {\r\n switch (langCode) {\r\n case \"af-ZA\":\r\n return await import(\"@/assets/locales/af.json\");\r\n case \"da-DK\":\r\n return await import(\"@/assets/locales/da.json\");\r\n case \"de-DE\":\r\n case \"de-CH\":\r\n return await import(\"@/assets/locales/de.json\");\r\n case \"en-AU\":\r\n return await import(\"@/assets/locales/en-AU.json\");\r\n case \"en-GB\":\r\n return await import(\"@/assets/locales/en-GB.json\");\r\n case \"en-IE\":\r\n return await import(\"@/assets/locales/en-IE.json\");\r\n case \"en-US\":\r\n return await import(\"@/assets/locales/en-US.json\");\r\n case \"es-US\":\r\n return await import(\"@/assets/locales/es.json\");\r\n case \"fi-FI\":\r\n return await import(\"@/assets/locales/fi.json\");\r\n case \"fr-FR\":\r\n return await import(\"@/assets/locales/fr.json\");\r\n case \"ko-KR\":\r\n return await import(\"@/assets/locales/ko.json\");\r\n case \"nl-NL\":\r\n return await import(\"@/assets/locales/nl.json\");\r\n case \"nn-NO\":\r\n case \"nb-NO\":\r\n return await import(\"@/assets/locales/no.json\");\r\n\r\n case \"pt-BR\":\r\n return await import(\"@/assets/locales/pt.json\");\r\n\r\n case \"sv-SE\":\r\n return await import(\"@/assets/locales/sv.json\");\r\n default:\r\n throw new Error(`Language ${langCode} not found`);\r\n }\r\n}\r\n\r\nexport const useTranslationStore = defineStore(\"translation\", () => {\r\n const initialized = ref(false);\r\n const api = useApiStore();\r\n const profileStore = useProfileStore();\r\n const i18n = useI18n();\r\n const availableLanguages = ref([]);\r\n const loadedLanguageCodes = ref([]);\r\n const currentLanguageCode = useLocalStorage(\"ss-language\", \"\");\r\n\r\n async function getAvailableLanguages() {\r\n availableLanguages.value = await api.get(\"/GetAvailableLanguages\");\r\n }\r\n\r\n async function seti18nLanguage(languageCode: string) {\r\n const lang = languageCode || defaultLanguage;\r\n i18n.locale.value = lang;\r\n const html = document.querySelector(\"html\");\r\n html?.setAttribute(\"lang\", lang);\r\n }\r\n\r\n async function getLanguage(languageCode: string) {\r\n if (!languageCode) {\r\n return;\r\n }\r\n if (loadedLanguageCodes.value.includes(languageCode)) {\r\n return;\r\n }\r\n\r\n const loadedMessages = (await loadLanguage(languageCode)).default;\r\n const messages: any = {};\r\n messages[languageCode] = loadedMessages || {};\r\n\r\n const languageLookUpTable: {\r\n [namespace: string]: { [key: string]: string };\r\n } = escapePipelineInTranslations(messages)[languageCode];\r\n\r\n i18n.setLocaleMessage(languageCode, languageLookUpTable);\r\n loadedLanguageCodes.value.push(languageCode);\r\n }\r\n\r\n watch(currentLanguageCode, setLanguage);\r\n async function setLanguage() {\r\n useDebug().log(\"setLanguage\");\r\n const languageCode = currentLanguageCode.value || \"en-US\";\r\n\r\n if (i18n.locale.value === languageCode) {\r\n seti18nLanguage(languageCode);\r\n return;\r\n }\r\n await getLanguage(languageCode);\r\n seti18nLanguage(languageCode);\r\n\r\n emitter.emit(\"languageUpdated\");\r\n //api.post('/SetLanguage', { userId: profile.profile.userId, language: languageCode});\r\n }\r\n\r\n async function init() {\r\n if (initialized.value) {\r\n return;\r\n }\r\n\r\n await Promise.all([getAvailableLanguages(), getLanguage(defaultLanguage)]);\r\n\r\n const matchedBrowserLanguages: string[] = [];\r\n\r\n navigator.languages.forEach((lang) => {\r\n if (availableLanguages.value.find((l) => l.code === lang)) {\r\n matchedBrowserLanguages.push(lang);\r\n }\r\n });\r\n\r\n const matchedBrowserLanguage =\r\n (matchedBrowserLanguages?.length && matchedBrowserLanguages[0]) || null;\r\n\r\n const languageCode =\r\n profileStore.profile?.language ||\r\n currentLanguageCode.value ||\r\n matchedBrowserLanguage ||\r\n defaultLanguage;\r\n\r\n let refreshProfile = false;\r\n if (currentLanguageCode.value !== languageCode) {\r\n refreshProfile = true;\r\n }\r\n useDebug().log(\"language code\", languageCode);\r\n await getLanguage(languageCode);\r\n currentLanguageCode.value = languageCode;\r\n await setLanguage();\r\n initialized.value = true;\r\n\r\n // need to wait for language to be set first before refreshing profile\r\n if (refreshProfile) {\r\n profileStore.getProfile();\r\n }\r\n watch(currentLanguageCode, () => profileStore.getProfile());\r\n }\r\n\r\n function formatNumbers(value?: number | string | null) {\r\n if (value === null) {\r\n return \"\";\r\n }\r\n if (!value) {\r\n return value;\r\n }\r\n\r\n if (typeof value === \"number\") {\r\n try {\r\n return value.toLocaleString(currentLanguageCode.value);\r\n } catch (err) {\r\n return value.toLocaleString(defaultLanguage);\r\n }\r\n } else {\r\n const v = parseInt(value);\r\n try {\r\n return v.toLocaleString(currentLanguageCode.value);\r\n } catch (err) {\r\n return v.toLocaleString(defaultLanguage);\r\n }\r\n }\r\n }\r\n\r\n return {\r\n init,\r\n availableLanguages,\r\n currentLanguageCode,\r\n formatNumbers,\r\n };\r\n});\r\n","import { ToastConfig } from \"@/models/frontend-only/ToastConfig\";\r\n\r\nexport const useToastStore = defineStore(\"toast\", () => {\r\n const toasts = ref([]);\r\n\r\n function successToast(\r\n message: string,\r\n closable = false,\r\n persist = false,\r\n actions?: {\r\n message: string;\r\n emitName: string;\r\n emitParams?: any;\r\n }[],\r\n ) {\r\n createToast(\"success\", message, closable, persist, actions);\r\n }\r\n\r\n function warningToast(\r\n message: string,\r\n closable = false,\r\n persist = false,\r\n actions?: {\r\n message: string;\r\n emitName: string;\r\n emitParams?: any;\r\n }[],\r\n ) {\r\n createToast(\"warning\", message, closable, persist, actions);\r\n }\r\n\r\n function errorToast(\r\n message: string,\r\n closable = false,\r\n persist = false,\r\n actions?: {\r\n message: string;\r\n emitName: string;\r\n emitParams?: any;\r\n }[],\r\n ) {\r\n createToast(\"error\", message, closable, persist, actions);\r\n }\r\n\r\n function createToast(\r\n variant: \"success\" | \"error\" | \"warning\" | \"info\",\r\n message: string,\r\n closable = false,\r\n persist = false,\r\n actions?: {\r\n message: string;\r\n emitName: string;\r\n emitParams?: any;\r\n }[],\r\n ) {\r\n const id = uniqueId(\"toast\");\r\n toasts.value.push({\r\n id: id,\r\n closable,\r\n message,\r\n persist,\r\n variant,\r\n actions,\r\n });\r\n if (!persist) {\r\n removeToastAfterTimeout(id);\r\n }\r\n }\r\n\r\n async function removeToastAfterTimeout(id: string) {\r\n await new Promise((res) => setTimeout(res, 5000));\r\n removeToast(id);\r\n }\r\n\r\n function removeToast(id: string) {\r\n const index = toasts.value.findIndex((t) => t.id === id);\r\n if (index >= 0) {\r\n toasts.value.splice(index, 1);\r\n }\r\n }\r\n\r\n return { toasts, successToast, errorToast, warningToast, removeToast };\r\n});\r\n","import { CCLIServerResponse } from \"@/models/frontend-only/CCLIServerResponse\";\r\nimport { CustomError } from \"@/models/frontend-only/CustomError\";\r\n\r\nexport interface ApiRequestOptions {\r\n method?: \"PUT\" | \"POST\" | \"GET\" | \"DELETE\" | \"PATCH\";\r\n disableHeaders?: boolean;\r\n disableToasts?: boolean;\r\n abort?: AbortController;\r\n headers?: { [key: string]: string };\r\n}\r\n\r\nexport const useApiStore = defineStore(\"api\", () => {\r\n const debug = useDebug();\r\n const { hideBusy } = useBusyStore();\r\n const translate = useTranslationStore();\r\n const { errorToast } = useToastStore();\r\n const { t } = useI18n();\r\n const profileStore = useProfileStore();\r\n\r\n function checkIfVersionIsOutdatedInResponseHeader(headers: any) {\r\n if (!headers) {\r\n return;\r\n }\r\n const currentAppBuildVersion = import.meta.env.VITE_BUILD_VERSION;\r\n\r\n if (currentAppBuildVersion === \"REPLACE_WITH_VERSION\") {\r\n return;\r\n }\r\n\r\n const serverBuildNumber =\r\n headers[\"SongSelect-Build-Id\"] || headers[\"songselect-build-id\"];\r\n\r\n debug.log(\r\n \"Current Build Check\",\r\n headers,\r\n serverBuildNumber,\r\n currentAppBuildVersion,\r\n );\r\n\r\n if (!serverBuildNumber) {\r\n return;\r\n }\r\n\r\n if (serverBuildNumber !== currentAppBuildVersion) {\r\n debug.log(\r\n \"Builds Don't Match\",\r\n serverBuildNumber,\r\n currentAppBuildVersion,\r\n );\r\n debug.log(serverBuildNumber, currentAppBuildVersion);\r\n document.location.reload();\r\n }\r\n }\r\n\r\n async function requestWrapper(\r\n requestUrl: string,\r\n params: { [key: string]: any } | string,\r\n config: ApiRequestOptions,\r\n ) {\r\n let body: string | FormData = params as unknown as string;\r\n let url = \"/api\" + requestUrl;\r\n let headers: { [key: string]: string } = config.headers || {};\r\n\r\n headers = {\r\n \"client-locale\": translate.currentLanguageCode,\r\n ...headers,\r\n };\r\n\r\n if (config.method === \"POST\") {\r\n headers = {\r\n RequestVerificationToken: profileStore.profile?.antiForgeryToken || \"\",\r\n ...headers,\r\n };\r\n }\r\n\r\n if (config.method === \"POST\" && params && typeof params === \"object\") {\r\n const formData = new FormData();\r\n Object.keys(params).forEach((k) => {\r\n if (Array.isArray(params![k])) {\r\n params![k].forEach((val: any) => {\r\n if (val !== null) {\r\n formData.append(k + \"[]\", val);\r\n }\r\n });\r\n } else if (params![k] !== null) {\r\n formData.append(k, params![k]);\r\n }\r\n });\r\n body = formData;\r\n }\r\n\r\n if (\r\n config.method === \"GET\" &&\r\n params &&\r\n typeof params === \"object\" &&\r\n Object.keys(params).length\r\n ) {\r\n const searchParams = new URLSearchParams();\r\n Object.keys(params).forEach((k) => {\r\n if (Array.isArray(params![k])) {\r\n params![k].forEach((val: any) => {\r\n if (val !== null) {\r\n searchParams.append(k + \"[]\", val);\r\n }\r\n });\r\n } else if (params![k] !== null) {\r\n searchParams.append(k, params![k]);\r\n }\r\n });\r\n url += \"?\" + searchParams.toString();\r\n }\r\n\r\n const fetchOptions = {\r\n method: config.method,\r\n headers: headers,\r\n body: (config.method !== \"GET\" && body) || undefined,\r\n signal: config.abort?.signal || undefined,\r\n };\r\n\r\n debug.log(\"request-wrapper\", url, config, fetchOptions);\r\n const response = await fetch(url, fetchOptions);\r\n return response;\r\n }\r\n\r\n async function request(\r\n url: string,\r\n options: ApiRequestOptions = {},\r\n params: { [key: string]: any } | string = {},\r\n secondAttempt?: boolean,\r\n ) {\r\n const { disableToasts = false } = options;\r\n const response: Response | null = await requestWrapper(\r\n url,\r\n params,\r\n options,\r\n );\r\n checkIfVersionIsOutdatedInResponseHeader(response.headers);\r\n if (!response.ok) {\r\n await handleServerError(response, url, options);\r\n if (!secondAttempt) {\r\n return request(url, options, params, true);\r\n } else {\r\n errorToast(t(\"SV.MES_ErrorProcessingRequest\").toString());\r\n throw new CustomError(\r\n { response, url: url },\r\n false,\r\n `API Request Error - 2nd try still failed (${response.status}): ${url}`,\r\n );\r\n }\r\n }\r\n return handleResponse(url, params, response, disableToasts);\r\n }\r\n\r\n async function handleServerError(\r\n err: Response,\r\n url: string,\r\n options: ApiRequestOptions = {},\r\n ) {\r\n const { disableToasts = false } = options;\r\n\r\n hideBusy();\r\n debug.log(\"API Response FAILED - handle server error\", url, err);\r\n\r\n if (!err.status) {\r\n if (\r\n err.statusText.toLowerCase().includes(\"request aborted\") ||\r\n err.statusText === \"ERR_CANCELED\"\r\n ) {\r\n throw err;\r\n }\r\n if (!disableToasts) {\r\n errorToast(t(\"SV.MES_ErrorProcessingRequest\").toString());\r\n }\r\n if (\r\n err.statusText.toLowerCase().includes(\"network error\") ||\r\n err.statusText.toLowerCase().includes(\"timeout exceeded\")\r\n ) {\r\n throw new CustomError(\r\n { err, url: url },\r\n true,\r\n `Status Missing: ${url}`,\r\n );\r\n } else {\r\n throw new CustomError(\r\n { err, url: url },\r\n false,\r\n `Status Missing: ${url}`,\r\n );\r\n }\r\n }\r\n\r\n switch (err.status) {\r\n //unauthenticated - get updated auth status\r\n case 401:\r\n profileStore.getProfile();\r\n errorToast(t(\"SV.MES_SignedOut\").toString());\r\n break;\r\n\r\n //conflict - antiforgery token is out of date\r\n case 409:\r\n profileStore.getProfile();\r\n break;\r\n\r\n default:\r\n if (!disableToasts) {\r\n errorToast(t(\"SV.MES_ErrorProcessingRequest\").toString());\r\n }\r\n\r\n throw new CustomError(\r\n { err, url, options },\r\n false,\r\n `${url} - ${err.status}`,\r\n );\r\n }\r\n }\r\n\r\n async function handleResponse(\r\n url: string,\r\n requestParams: any,\r\n response: Response,\r\n disableToasts: boolean,\r\n ) {\r\n if (response.status !== 204) {\r\n let data: any;\r\n const clone = response.clone();\r\n try {\r\n data = await response.json();\r\n } catch {\r\n data = await clone.text();\r\n }\r\n\r\n if (data?.isSuccess === false) {\r\n hideBusy();\r\n if (data.publicStatusMessages && data.publicStatusMessages.length) {\r\n if (!disableToasts) {\r\n data.publicStatusMessages.forEach((m: string) => errorToast(m));\r\n }\r\n } else {\r\n if (!disableToasts) {\r\n errorToast(t(\"SV.MES_ErrorProcessingRequest\").toString());\r\n }\r\n throw new Error(\"Missing Public Status Messages\");\r\n }\r\n\r\n debug.log(\"API Response FAILED - handle response\", url);\r\n debug.log(response);\r\n throw response;\r\n } else if (!response) {\r\n hideBusy();\r\n debug.log(\"API Response\", url, requestParams, null);\r\n return null;\r\n }\r\n\r\n const payload = data.payload;\r\n debug.log(\"API Response\", url, requestParams, data, payload);\r\n return payload;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n function get(\r\n url: string,\r\n params?: { [key: string]: any },\r\n options?: ApiRequestOptions,\r\n ) {\r\n const _options = Object.assign({ method: \"GET\" }, options || {});\r\n return request(url, _options, params);\r\n }\r\n\r\n function post(\r\n url: string,\r\n params?: { [key: string]: any } | string,\r\n options?: ApiRequestOptions,\r\n ) {\r\n const _options = Object.assign({ method: \"POST\" }, options || {});\r\n return request(url, _options, params);\r\n }\r\n function del(\r\n url: string,\r\n params?: { [key: string]: any },\r\n options?: ApiRequestOptions,\r\n ) {\r\n const _options = Object.assign({ method: \"DELETE\" }, options || {});\r\n return request(url, _options, params);\r\n }\r\n\r\n return {\r\n request,\r\n get,\r\n post,\r\n del,\r\n };\r\n});\r\n","import { SongSearchResult } from \"@/models/SongSearchResult\";\r\nimport { SharedList } from \"@/models/SharedList\";\r\n\r\nexport const useFavStore = defineStore(\"fav\", () => {\r\n const api = useApiStore();\r\n const profile = useProfileStore();\r\n const favSongNumbers = ref(null);\r\n const beta = useBetaStore();\r\n const enableSharedFavorites = computed(() => beta.features.sharedFavorites);\r\n\r\n const songs = ref([]);\r\n const selectedSongNumber = ref(\"\");\r\n const modals = useModalStore();\r\n\r\n const sharedLists = ref([\r\n {\r\n id: uniqueId(\"videoId\"),\r\n name: \"Name of List\",\r\n count: 10,\r\n images: [\r\n {\r\n src: \"https://is5-ssl.mzstatic.com/image/thumb/Music115/v4/d7/7d/63/d77d63d8-44f7-9f75-b4c7-19cc20239120/886449027057.jpg/170x170bb.jpg\",\r\n alt: \"Album Artwork\",\r\n },\r\n {\r\n src: \"https://is2-ssl.mzstatic.com/image/thumb/Music116/v4/f5/d0/bc/f5d0bc20-3641-c73a-6278-1247f9ba159f/23SYMIM04054.rgb.jpg/170x170bb.jpg\",\r\n alt: \"Album Artwork\",\r\n },\r\n {\r\n src: \"https://is4-ssl.mzstatic.com/image/thumb/Music124/v4/13/5b/90/135b90b3-191d-3f69-3a8d-a10f42d665a3/080688997168.png/170x170bb.jpg\",\r\n alt: \"Album Artwork\",\r\n },\r\n {\r\n src: \"https://is3-ssl.mzstatic.com/image/thumb/Music122/v4/9a/fb/a9/9afba90e-e219-c1b1-f99c-e6b152026aef/22UMGIM71001.rgb.jpg/170x170bb.jpg\",\r\n alt: \"Album Artwork\",\r\n },\r\n ],\r\n },\r\n {\r\n id: uniqueId(\"videoId\"),\r\n name: \"Name of List 2\",\r\n count: 3,\r\n images: [\r\n {\r\n src: \"https://is5-ssl.mzstatic.com/image/thumb/Music115/v4/d7/7d/63/d77d63d8-44f7-9f75-b4c7-19cc20239120/886449027057.jpg/170x170bb.jpg\",\r\n alt: \"\",\r\n },\r\n {\r\n src: \"https://is2-ssl.mzstatic.com/image/thumb/Music116/v4/f5/d0/bc/f5d0bc20-3641-c73a-6278-1247f9ba159f/23SYMIM04054.rgb.jpg/170x170bb.jpg\",\r\n alt: \"\",\r\n },\r\n {\r\n src: \"https://is4-ssl.mzstatic.com/image/thumb/Music124/v4/13/5b/90/135b90b3-191d-3f69-3a8d-a10f42d665a3/080688997168.png/170x170bb.jpg\",\r\n alt: \"\",\r\n },\r\n ],\r\n },\r\n {\r\n id: uniqueId(\"videoId\"),\r\n name: \"Name of List 3\",\r\n count: 2,\r\n images: [\r\n {\r\n src: \"https://is5-ssl.mzstatic.com/image/thumb/Music115/v4/d7/7d/63/d77d63d8-44f7-9f75-b4c7-19cc20239120/886449027057.jpg/170x170bb.jpg\",\r\n alt: \"\",\r\n },\r\n {\r\n src: \"https://is2-ssl.mzstatic.com/image/thumb/Music116/v4/f5/d0/bc/f5d0bc20-3641-c73a-6278-1247f9ba159f/23SYMIM04054.rgb.jpg/170x170bb.jpg\",\r\n alt: \"\",\r\n },\r\n ],\r\n },\r\n {\r\n id: uniqueId(\"videoId\"),\r\n name: \"Name of List 4\",\r\n count: 2,\r\n images: [\r\n {\r\n src: \"https://is5-ssl.mzstatic.com/image/thumb/Music115/v4/d7/7d/63/d77d63d8-44f7-9f75-b4c7-19cc20239120/886449027057.jpg/170x170bb.jpg\",\r\n alt: \"\",\r\n },\r\n {\r\n src: \"https://is2-ssl.mzstatic.com/image/thumb/Music116/v4/f5/d0/bc/f5d0bc20-3641-c73a-6278-1247f9ba159f/23SYMIM04054.rgb.jpg/170x170bb.jpg\",\r\n alt: \"\",\r\n },\r\n ],\r\n },\r\n {\r\n id: uniqueId(\"videoId\"),\r\n name: \"Name of List 5\",\r\n count: 2,\r\n images: [\r\n {\r\n src: \"https://is5-ssl.mzstatic.com/image/thumb/Music115/v4/d7/7d/63/d77d63d8-44f7-9f75-b4c7-19cc20239120/886449027057.jpg/170x170bb.jpg\",\r\n alt: \"\",\r\n },\r\n {\r\n src: \"https://is2-ssl.mzstatic.com/image/thumb/Music116/v4/f5/d0/bc/f5d0bc20-3641-c73a-6278-1247f9ba159f/23SYMIM04054.rgb.jpg/170x170bb.jpg\",\r\n alt: \"\",\r\n },\r\n ],\r\n },\r\n {\r\n id: uniqueId(\"videoId\"),\r\n name: \"Name of List 6\",\r\n count: 1,\r\n images: [\r\n {\r\n src: \"https://is5-ssl.mzstatic.com/image/thumb/Music115/v4/d7/7d/63/d77d63d8-44f7-9f75-b4c7-19cc20239120/886449027057.jpg/170x170bb.jpg\",\r\n alt: \"\",\r\n },\r\n ],\r\n },\r\n {\r\n id: uniqueId(\"videoId\"),\r\n name: \"Name of List 7\",\r\n count: 0,\r\n images: [],\r\n },\r\n ]);\r\n\r\n async function getSharedLists() {\r\n if (!profile.profile) {\r\n sharedLists.value = [];\r\n return;\r\n }\r\n sharedLists.value.splice;\r\n const response = (await api.get(\"/GetSharedLists\", {\r\n orgId: profile.profile?.orgId,\r\n })) as SharedList[];\r\n sharedLists.value.splice(0);\r\n sharedLists.value.push(...response);\r\n }\r\n\r\n async function getListDetails(id: string) {\r\n const response = (await api.get(\"/GetSharedList\", {\r\n id,\r\n })) as SharedList;\r\n return response;\r\n }\r\n\r\n async function createList(name: string) {\r\n const id = await api.post(\"/CreateList\", {\r\n orgId: profile.profile?.orgId,\r\n name: name,\r\n });\r\n return id;\r\n }\r\n async function deleteList(id: string) {\r\n await api.post(\"/DeleteList\", {\r\n id: id,\r\n });\r\n await getSharedLists();\r\n }\r\n async function renameList(id: string, name: string) {\r\n await api.post(\"/RenameList\", {\r\n id: id,\r\n name: name,\r\n });\r\n await getSharedLists();\r\n }\r\n async function reorderList(id: string, songNumbers: string[]) {\r\n await api.post(\"/ReorderList\", {\r\n id: id,\r\n songNumbers: songNumbers,\r\n });\r\n await getSharedLists();\r\n }\r\n async function addSongtoList(id: string, songNumber: string) {\r\n await api.post(\"AddSongToList\", {\r\n id: id,\r\n songNumber,\r\n });\r\n }\r\n async function removeSongFromList(id: string, songNumber: string) {\r\n await api.post(\"AddSongToList\", {\r\n id: id,\r\n songNumber,\r\n });\r\n }\r\n\r\n async function getFavorites() {\r\n const s: SongSearchResult[] = await api.get(\"/GetFavorites\");\r\n songs.value = sortBy(s, (item) => item.title);\r\n favSongNumbers.value = songs.value.map((s) => s.songNumber);\r\n }\r\n\r\n async function getFavoriteSongNumbers() {\r\n waitUntilTrue(() => profile.profile);\r\n if (profile.profile?.signedIn) {\r\n favSongNumbers.value = await api.get(\"/GetFavoriteSongNumbers\");\r\n }\r\n }\r\n\r\n async function addToFavorites(songNumber: string) {\r\n await api.post(\"/AddToFavorites\", { songNumber });\r\n await getFavoriteSongNumbers();\r\n }\r\n\r\n async function removeFromFavorites(songNumber: string) {\r\n await api.post(\"/RemoveFromFavorites\", { songNumber });\r\n await getFavoriteSongNumbers();\r\n }\r\n\r\n function addSongToSharedList(songNumber: string) {\r\n selectedSongNumber.value = songNumber;\r\n modals.showModal(\"SelectListModal\");\r\n }\r\n\r\n function openNewListModal() {\r\n selectedSongNumber.value = \"\";\r\n modals.showModal(\"NewListModal\");\r\n }\r\n\r\n getFavoriteSongNumbers();\r\n\r\n return {\r\n songs,\r\n sharedLists,\r\n favSongNumbers,\r\n getFavorites,\r\n addToFavorites,\r\n removeFromFavorites,\r\n enableSharedFavorites,\r\n getSharedLists,\r\n createList,\r\n deleteList,\r\n renameList,\r\n reorderList,\r\n getListDetails,\r\n addSongtoList,\r\n removeSongFromList,\r\n selectedSongNumber,\r\n addSongToSharedList,\r\n openNewListModal,\r\n };\r\n});\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","export default \"__VITE_ASSET__Cf16gyzF__\"","export const useMobileStore = defineStore(\"mobile\", () => {\r\n const mobileWidth = \"250px\";\r\n const hideMenuOnBreakpoint = \"lg\";\r\n const showMobileNav = ref(false);\r\n const searchBarFocus = ref(false);\r\n const debug = useDebug();\r\n\r\n function setSearchBarFocus(focused: boolean) {\r\n searchBarFocus.value = focused;\r\n }\r\n\r\n function toggleMobileNav(show?: boolean) {\r\n debug.log(\"toggling nav\");\r\n if (typeof show !== \"undefined\") {\r\n showMobileNav.value = !!show;\r\n } else {\r\n showMobileNav.value = !showMobileNav.value;\r\n }\r\n }\r\n\r\n return {\r\n showMobileNav,\r\n toggleMobileNav,\r\n mobileWidth,\r\n hideMenuOnBreakpoint,\r\n searchBarFocus,\r\n setSearchBarFocus,\r\n };\r\n});\r\n","import AvailableLyricVideos from \"./AvailableLyricVideos.json\";\r\nimport LYRIC_VIDEOS_ENABLED_ORG_IDS from \"./OrgIdsWithEnabledLyricVideos.json\";\r\nexport interface LyricVideoDescription {\r\n label: string;\r\n description: string;\r\n}\r\n\r\nexport interface LyricVideoItem {\r\n id: string;\r\n vimeoId: string;\r\n internalTitle: string;\r\n title: string;\r\n belowVideoDescriptions: LyricVideoDescription[];\r\n sideColumnDescription: string[];\r\n url?: string;\r\n mp4hd1080p?: string;\r\n duration: number;\r\n width: number;\r\n height: number;\r\n thumbnail: string;\r\n}\r\n\r\nexport interface LyricVideo {\r\n id: string;\r\n title: string;\r\n description: string;\r\n albumCoverUrl: string;\r\n availableVideos: LyricVideoItem[];\r\n}\r\nexport const AllLyricVideos: LyricVideo[] = AvailableLyricVideos;\r\nexport const LyricVideosEnabledOrgIds = LYRIC_VIDEOS_ENABLED_ORG_IDS;\r\n","import { LyricVideosEnabledOrgIds } from \"@/assets/json/LyricVideos\";\r\n\r\nexport const useLyricVideosStore = defineStore(\"lyric-videos\", () => {\r\n const enableFeature = ref(\r\n import.meta.env.VITE_ENABLE_LYRIC_VIDEO_TEST === \"1\",\r\n );\r\n\r\n const alwaysEnableForEnv = ref(\r\n import.meta.env.VITE_ENABLE_LYRIC_VIDEO_TEST_ALWAYS_SHOW === \"1\",\r\n );\r\n\r\n const profile = useProfileStore();\r\n const orgId = computed(() => profile.profile?.orgId?.toLowerCase() || \"\");\r\n const enabledOrg = computed(\r\n () =>\r\n (orgId.value &&\r\n LyricVideosEnabledOrgIds.map((id) => id.toLowerCase()).includes(\r\n orgId.value,\r\n )) ||\r\n profile.profile?.isTestOrg,\r\n );\r\n\r\n const enable = computed(\r\n () => enableFeature.value && (alwaysEnableForEnv.value || enabledOrg.value),\r\n );\r\n\r\n return { enable, enableFeature, alwaysEnableForEnv };\r\n});\r\n","import { defineStore } from \"pinia\";\r\n\r\nexport const useIndexedDBCacheStore = defineStore(\"cache-indexeddb\", () => {\r\n let available = false;\r\n const dbName = \"cacheDB\";\r\n const storeName = \"cacheStore\";\r\n\r\n function init() {\r\n testIfIndexedDBAvailable();\r\n }\r\n\r\n function openDB() {\r\n return new Promise((resolve, reject) => {\r\n const request = indexedDB.open(dbName, 2);\r\n request.onupgradeneeded = (event) => {\r\n const db = (event.target as IDBOpenDBRequest).result;\r\n\r\n db.createObjectStore(storeName, { keyPath: \"key\" });\r\n };\r\n request.onsuccess = () => {\r\n resolve(request.result);\r\n };\r\n request.onerror = () => {\r\n reject(request.error);\r\n };\r\n });\r\n }\r\n\r\n async function set(key: string, value: any, ttl: number, fromDate?: number) {\r\n await waitUntilTrue(() => available);\r\n const now = fromDate || Date.now();\r\n const expires = now + ttl * 1000;\r\n const db = await openDB();\r\n const transaction = db.transaction([storeName], \"readwrite\");\r\n const store = transaction.objectStore(storeName);\r\n store.put({ key, value, expires });\r\n }\r\n\r\n // function that clears expired cache\r\n async function clearExpired() {\r\n await waitUntilTrue(() => available);\r\n const db = await openDB();\r\n const transaction = db.transaction([storeName], \"readwrite\");\r\n const store = transaction.objectStore(storeName);\r\n const request = store.openCursor();\r\n request.onsuccess = () => {\r\n const cursor = request.result;\r\n if (cursor && cursor.value && cursor.value.expires) {\r\n if (cursor.value.expires < Date.now()) {\r\n store.delete(cursor.key);\r\n }\r\n cursor.continue();\r\n }\r\n };\r\n }\r\n\r\n async function get(key: string) {\r\n await clearExpired();\r\n await waitUntilTrue(() => available);\r\n const db = await openDB();\r\n const transaction = db.transaction([storeName], \"readwrite\");\r\n const store = transaction.objectStore(storeName);\r\n return new Promise((resolve, reject) => {\r\n const request = store.get(key);\r\n request.onsuccess = () => {\r\n const result = request.result;\r\n if (result && result.expires > Date.now()) {\r\n resolve(result.value);\r\n } else {\r\n store.delete(key);\r\n resolve(null);\r\n }\r\n };\r\n request.onerror = () => {\r\n reject(request.error);\r\n };\r\n });\r\n }\r\n\r\n function testIfIndexedDBAvailable() {\r\n try {\r\n const request = indexedDB.open(dbName);\r\n request.onsuccess = () => {\r\n available = true;\r\n };\r\n request.onerror = () => {\r\n available = false;\r\n };\r\n } catch (e) {\r\n available = false;\r\n }\r\n }\r\n\r\n const OneDay = 60 * 60 * 24;\r\n const OneHour = 60 * 60;\r\n\r\n init();\r\n\r\n return { set, get, OneDay, OneHour };\r\n});\r\n","export async function tokenFetch(\r\n url: string,\r\n serveCacheIfAvailable = false,\r\n ttl = 60 * 30, // 30 mins\r\n): Promise {\r\n const cache = useIndexedDBCacheStore();\r\n\r\n if (serveCacheIfAvailable) {\r\n const data = await cache.get(url);\r\n if (data !== null) {\r\n return data as T;\r\n }\r\n }\r\n\r\n const api = useApiStore();\r\n\r\n const urlObj = new URL(url);\r\n const uri = urlObj.pathname;\r\n\r\n const token = await api.post(\"/GetCCLITop100Token\", { url: uri });\r\n if (!token) {\r\n throw new Error(\"Error generating token\");\r\n }\r\n\r\n const fullurl = `${url}?verify=${token}`;\r\n const request = await fetch(fullurl);\r\n if (!request.ok) {\r\n console.error(\"Error fetching data: \" + fullurl, request.status);\r\n throw new Error(\"Error fetching data: \" + fullurl);\r\n }\r\n const data = (await request.json()) as T;\r\n\r\n await cache.set(url, data, ttl);\r\n return data;\r\n}\r\n","export const AppConstants = {\r\n LOCALSTORAGE_KEYS: {\r\n SPOTIFY: \"SS_Spotify\",\r\n AUTH_MEDIA: \"\",\r\n LYRICS_TWOCOLMODE: \"Lyrics-TwoColMode\",\r\n LYRICS_FONTSIZE: \"Lyrics-FontSize\",\r\n LYRICS_TEXTALIGN: \"Lyrics-TextAlign\",\r\n LYRICS_FONTSETTINGS: \"Lyrics-FontSettings\",\r\n CHORDS_FONTSETTINGS: \"Chords-FontSettings\",\r\n CHORDS_TWOCOLMODE: \"ss_chords_twocolmode\",\r\n CHORDS_CHARTTYPE: \"Chords-ChartType\",\r\n SHEETMUSIC_AUTOSCROLL: \"SheetMusic-AutoScroll\",\r\n TOP100_DISABLE_WELCOME_MODAL: \"Top100-DisableWelcomeModal\",\r\n },\r\n CHART_BASE_URL: \"https://cclitop100.ccli.com/charts\",\r\n SPOTIFY: {\r\n CLIENT_ID: \"d346144d2fbe411a9ffc8e061145d764\",\r\n },\r\n};\r\n","export function slugify(str: string) {\r\n return str\r\n .toLowerCase() // Convert to lowercase\r\n .replace(/[^a-z0-9\\s-]/g, \"\") // Remove all non-alphanumeric characters except spaces and hyphens\r\n .replace(/\\s+/g, \"-\") // Replace spaces with hyphens\r\n .replace(/-+/g, \"-\") // Ensure no two hyphens are back to back\r\n .replace(/^-+|-+$/g, \"\"); // Remove leading and trailing hyphens\r\n}\r\n","import { SongVersionItem } from \"@/models/frontend-only/SongVersion\";\r\n\r\nexport let recordedVersionPromise: null | Promise = null;\r\n\r\nexport async function getSongVersions(songNumber: string) {\r\n const beta = useBetaStore();\r\n if (!beta.features.recordingFocusLayout) {\r\n return null;\r\n }\r\n if (recordedVersionPromise) {\r\n await recordedVersionPromise;\r\n }\r\n\r\n recordedVersionPromise = tokenFetch(\r\n `${AppConstants.CHART_BASE_URL}/recordedVersions.json`,\r\n true,\r\n );\r\n\r\n const data = await recordedVersionPromise;\r\n\r\n if (!data) {\r\n throw new Error(\"Error fetching data\");\r\n }\r\n\r\n const songVersion =\r\n data.find((d) => d.SongID.toString() === songNumber) || null;\r\n return songVersion;\r\n}\r\n","import { ChartRowItem } from \"@/models/frontend-only/ChartRowItem\";\r\nimport {\r\n ChartBadge,\r\n FESearchResult,\r\n} from \"@/models/frontend-only/FESearchResult\";\r\nimport { ChartCountryInfo } from \"@/models/frontend-only/ChartCountryInfo\";\r\nimport { defineStore } from \"pinia\";\r\n\r\nexport const useChartStore = defineStore(\"chart\", () => {\r\n const beta = useBetaStore();\r\n const profile = useProfileStore();\r\n\r\n const availableCountries = ref([]);\r\n\r\n const availableCharts = computed(() => {\r\n const allCharts = availableCountries.value.map((c) => ({\r\n chartCountryCode: c.ChartCountryCode,\r\n chartCountryName: c.ChartCountryName,\r\n serviceCenter: c.ServiceCenter,\r\n chartType: c.ChartType,\r\n limitRanksTo: c.LimitRanksTo,\r\n visible: c.Visible,\r\n }));\r\n const charts: typeof allCharts = [];\r\n allCharts.forEach((c) => {\r\n if (\r\n !charts.find((cc) => cc.chartCountryCode === c.chartCountryCode) &&\r\n c.chartCountryCode !== null\r\n ) {\r\n charts.push(c);\r\n }\r\n });\r\n return sortBy(charts, (c) => c.serviceCenter);\r\n });\r\n\r\n const defaultCountry = computed(() => {\r\n const fallbackCountry: ChartCountryInfo = {\r\n Country: \"US\",\r\n ChartCountryName: \"United States\",\r\n ServiceCenter: \"United States\",\r\n ChartCountryCode: \"US\",\r\n ChartType: \"ccli-top-100\",\r\n LimitRanksTo: 100,\r\n Visible: true,\r\n };\r\n\r\n const country = availableCountries.value.find(\r\n (c) => c.Country === profile.profile?.countryCode,\r\n );\r\n\r\n return country || fallbackCountry;\r\n });\r\n\r\n function isCCLIChartAvailable(chartCountryCode: string) {\r\n if (\r\n availableCountries.value.findIndex(\r\n (c) => c.ChartCountryCode === chartCountryCode,\r\n ) === -1\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n const geoChartWeeks = ref<{ [chartCountryCode: string]: string[] }>({});\r\n\r\n async function getChartWeeks(chartCountryCode: string) {\r\n if (!isCCLIChartAvailable(chartCountryCode)) {\r\n console.error(\"Invalid country code\", chartCountryCode);\r\n throw new Error(\"Invalid country code\");\r\n }\r\n\r\n if (geoChartWeeks.value[chartCountryCode]) {\r\n return Array.from(geoChartWeeks.value[chartCountryCode]);\r\n }\r\n\r\n const data = await tokenFetch<{ WeekOf: string }[]>(\r\n `${AppConstants.CHART_BASE_URL}/${chartCountryCode}/chartWeeks.json`,\r\n true,\r\n );\r\n\r\n const dataWeeks = data.map((d) => d.WeekOf);\r\n\r\n geoChartWeeks.value[chartCountryCode] = dataWeeks;\r\n\r\n return Array.from(geoChartWeeks.value[chartCountryCode]);\r\n }\r\n\r\n async function getMostRecentChartWeek(chartCountryCode: string) {\r\n const chartWeeks = await getChartWeeks(chartCountryCode);\r\n const dates = sortBy(chartWeeks, (c) => c);\r\n let results: FESearchResult[] | null = null;\r\n let date: string = \"\";\r\n do {\r\n date = dates.pop() || \"\";\r\n if (!date) {\r\n throw new Error(\"No chart data available\");\r\n }\r\n try {\r\n results = await getChartData(chartCountryCode, date);\r\n } catch (e) {\r\n console.warn(\"Error fetching chart data\", chartCountryCode, date, e);\r\n }\r\n } while (!results || results.length === 0);\r\n return { date, results };\r\n }\r\n\r\n async function getAvailableCountries() {\r\n const data = await tokenFetch(\r\n `${AppConstants.CHART_BASE_URL}/countryConfig.json`,\r\n true,\r\n );\r\n\r\n availableCountries.value = data.filter((c) => c.Visible);\r\n }\r\n\r\n const cachedChartData = ref<{\r\n [countryCode: string]: { [weekOf: string]: FESearchResult[] };\r\n }>({});\r\n\r\n async function getChartData(countryCode: string, weekOf: string) {\r\n if (\r\n cachedChartData.value[countryCode] &&\r\n cachedChartData.value[countryCode][weekOf]\r\n ) {\r\n return Array.from(cachedChartData.value[countryCode][weekOf]);\r\n }\r\n\r\n if (!isCCLIChartAvailable(countryCode)) {\r\n console.error(\"Invalid country code\", countryCode);\r\n throw new Error(\"Invalid country code\");\r\n }\r\n\r\n const chartWeeks = await getChartWeeks(countryCode);\r\n\r\n if (chartWeeks.indexOf(weekOf) === -1) {\r\n throw new Error(\"Invalid week of date\");\r\n }\r\n\r\n const results = await tokenFetch(\r\n `${AppConstants.CHART_BASE_URL}/${countryCode}/${weekOf}.json`,\r\n true,\r\n ).catch((err) => {\r\n throw err;\r\n });\r\n\r\n if (!results) {\r\n console.error(\"no results found for\", countryCode, weekOf);\r\n throw new Error(\"No results found for this week\");\r\n }\r\n\r\n const transformedResults: FESearchResult[] = await Promise.all(\r\n results.map(async (r) => {\r\n const badges: ChartBadge[] = [];\r\n if (r.IsPublicDomain) {\r\n badges.push(\"public-domain\");\r\n }\r\n if (r.IsTrending) {\r\n badges.push(\"trending\");\r\n }\r\n if (r.IsReEntry) {\r\n badges.push(\"re-entry\");\r\n }\r\n if (r.IsNewEntry) {\r\n badges.push(\"new-entry\");\r\n }\r\n if (r.IsEvergreen) {\r\n badges.push(\"evergreen\");\r\n }\r\n\r\n const data: FESearchResult = {\r\n title: r.Title,\r\n authors: r.Authors.split(\"^\"),\r\n slug: slugify(r.SongTitle),\r\n rank: r.ChartPosition,\r\n rankMovement: r.ChartMovement,\r\n weeksOnChart: r.WeeksInChart,\r\n songNumber: r.SongNumber.toString(),\r\n soundSample: {\r\n audioUrl: r.SoundSampleURL,\r\n imageUrl: r.AlbumArtURL,\r\n },\r\n productExists: {\r\n chords: r.HasChordSheet,\r\n lead: r.HasLeadSheet,\r\n lyrics: r.HasLyrics,\r\n multitracks: false,\r\n vocal: r.HasHymnSheet,\r\n },\r\n badges,\r\n };\r\n\r\n const songVersion = await getSongVersions(r.SongNumber.toString());\r\n if (songVersion) {\r\n data.title = songVersion.SongTitle;\r\n data.artist = songVersion.Artist;\r\n data.album = songVersion.Album;\r\n data.soundSample = {\r\n audioUrl: songVersion.SoundSampleURL,\r\n imageUrl: songVersion.AlbumArtURL,\r\n };\r\n data.enableSongVersion = true;\r\n } else {\r\n data.enableSongVersion = false;\r\n }\r\n\r\n return data;\r\n }),\r\n );\r\n\r\n if (!cachedChartData.value[countryCode]) {\r\n cachedChartData.value[countryCode] = {};\r\n }\r\n cachedChartData.value[countryCode][weekOf] = transformedResults;\r\n\r\n return Array.from(cachedChartData.value[countryCode][weekOf]);\r\n }\r\n\r\n async function init() {\r\n await Promise.all([getAvailableCountries()]);\r\n }\r\n\r\n if (beta.features.ccliTop100New) {\r\n init();\r\n }\r\n\r\n return {\r\n defaultCountry,\r\n init,\r\n getChartData,\r\n availableCountries,\r\n getChartWeeks,\r\n getMostRecentChartWeek,\r\n availableCharts,\r\n };\r\n});\r\n","import { LyricVideoCustomization } from \"../LyricVideoCustomization\";\r\n\r\nexport interface TextTiming {\r\n text: string;\r\n start: number;\r\n end?: number;\r\n}\r\n\r\nexport interface LyricVideoSection {\r\n partName: string;\r\n textTiming: TextTiming[];\r\n}\r\n\r\nexport interface SSLyricVideoIndex {\r\n title: string;\r\n authors: string[];\r\n\r\n key: string;\r\n bpm: number;\r\n timeSignature: string;\r\n featured: boolean;\r\n featuredOrder: number | null;\r\n\r\n keyLyricSearchTerms: string[];\r\n ccliSongNumber: string;\r\n modified: string;\r\n leadVoice: string | null;\r\n duration: number;\r\n videoId: string;\r\n slideBackground: number | null;\r\n tags: string | null;\r\n releasePath: string;\r\n}\r\n\r\nexport interface SSLyricVideo {\r\n sampleStart: number;\r\n sampleDuration: number;\r\n key: string;\r\n bpm: number;\r\n videoId: string;\r\n isPreview: boolean;\r\n timeSignature: string;\r\n modified: string;\r\n leadVoice: string | null;\r\n basedOn: {\r\n artists: string[];\r\n songName: string;\r\n };\r\n\r\n tracks: {\r\n name: string;\r\n url: string;\r\n }[];\r\n\r\n duration: number;\r\n featured: boolean;\r\n featuredOrder: number | null;\r\n timemap: LyricVideoSection[];\r\n\r\n /**\r\n * SongSelect Data\r\n */\r\n ccliSongNumber: string;\r\n title: string;\r\n authors: string[];\r\n catalogs: string[];\r\n alsoKnownAs: string[];\r\n copyrights: {\r\n territories: number[];\r\n copyrights: string[];\r\n }[];\r\n themes: string[];\r\n songSelectLinks: {\r\n songSelectSong: string;\r\n songSelectSongLyrics: string | null;\r\n songSelectChordSheet: string | null;\r\n songSelectLeadSheet: string | null;\r\n songSelectVocalSheet: string | null;\r\n };\r\n k: string;\r\n slideBackground: number | null;\r\n tags: string | null;\r\n}\r\n\r\nexport interface SSLyricVideoSetlistIndex {\r\n title: string;\r\n description: string;\r\n createdTS: string;\r\n serviceDate: string;\r\n numVideos: number;\r\n setlistId: string;\r\n}\r\n\r\nexport const DefaultLVCustomization: LyricVideoCustomization = {\r\n bgSolidColor: \"black\",\r\n bgSource: \"solidcolor\",\r\n fontColor: \"white\",\r\n fontSize: \"25\",\r\n fontFamily: \"Sans-Serif\",\r\n instrumentsVolume: \"100\",\r\n vocalVolume: \"100\",\r\n bgVideoKey: \"block-gradient-purple\",\r\n bgImageKey: \"above-the-water-gray\",\r\n leadingLyricTiming: 0.5,\r\n linesPerSlide: \"1\",\r\n textAlign: \"center\",\r\n};\r\n","import {\r\n LVBackgroundMotion,\r\n LVBackgroundStill,\r\n} from \"@/assets/json/LyricVideoBackgrounds\";\r\nimport { GetLyricVideoSetlistsForOrgResponse } from \"@/models/frontend-only/GetLyricVideoSetlistsForOrgResponse\";\r\nimport {\r\n SSLyricVideo,\r\n SSLyricVideoIndex,\r\n} from \"@/models/frontend-only/LyricVideos\";\r\nimport { LyricVideoCustomization } from \"@/models/LyricVideoCustomization\";\r\nimport { LyricVideoSetlist } from \"@/models/LyricVideoSetlist\";\r\nimport { LyricVideoSetlistItem } from \"@/models/LyricVideoSetlistItem\";\r\n\r\nexport const useLyricVideoMVPStore = defineStore(\"lyric-videos-mvp\", () => {\r\n const profile = useProfileStore();\r\n const beta = useBetaStore();\r\n const api = useApiStore();\r\n const openedDropdowns = ref([]);\r\n const dropdownOpen = computed(() => !!openedDropdowns.value.length);\r\n\r\n const backgroundImages = ref([]);\r\n const backgroundVideos = ref([]);\r\n\r\n async function getLyricVideoBackgrounds() {\r\n const response: {\r\n images: LVBackgroundStill[];\r\n videos: LVBackgroundMotion[];\r\n } = await api.post(\"/GetLyricVideoBackgrounds\");\r\n backgroundImages.value = response.images;\r\n backgroundVideos.value = response.videos;\r\n }\r\n\r\n const enable = computed(\r\n () =>\r\n (\r\n beta.features.lyricVideoMVP &&\r\n profile.profile?.featureToggles.enableLyricVideos) ||\r\n false,\r\n );\r\n const inBetaMode = computed(\r\n () => !!beta.featuresInBeta.includes(\"lyricVideoMVP\") || false,\r\n );\r\n\r\n const setlistFeaturesEnabled = computed(\r\n () => profile.profile?.signedIn && profile.profile?.orgId,\r\n );\r\n\r\n const allVideos = ref([]);\r\n const featuredVideos = ref([]);\r\n const latestVideos = ref([]);\r\n\r\n function onOpenDropdown(key: string) {\r\n if (!openedDropdowns.value.includes(key)) {\r\n openedDropdowns.value.push(key);\r\n }\r\n }\r\n\r\n async function onCloseDropdown(key: string) {\r\n await asyncWait(25);\r\n if (openedDropdowns.value.includes(key)) {\r\n openedDropdowns.value = openedDropdowns.value.filter((k) => k !== key);\r\n }\r\n }\r\n\r\n async function getSetlist(setlistId: string): Promise {\r\n return await api.post(\"/GetLyricVideoSetlist\", {\r\n setListId: setlistId,\r\n });\r\n }\r\n\r\n async function getSetlists(\r\n pageNumber: number,\r\n pageSize: number,\r\n archivedLists: boolean,\r\n ) {\r\n if (!profile.profile?.orgId) {\r\n throw new Error(\"org id is missing\");\r\n }\r\n\r\n const response: GetLyricVideoSetlistsForOrgResponse = await api.post(\r\n \"/GetLyricVideoSetlistsForOrg\",\r\n {\r\n pageNumber: pageNumber,\r\n pageSize: pageSize,\r\n archivedLists: archivedLists,\r\n },\r\n );\r\n\r\n return response;\r\n }\r\n\r\n async function getUpcomingSetlists() {\r\n const response = await getSetlists(1, 3, false);\r\n return response.summaryList;\r\n }\r\n\r\n async function getAllVideos() {\r\n await profile.profilePromise;\r\n if (!enable.value) {\r\n return;\r\n }\r\n if (allVideos.value.length > 0) {\r\n return;\r\n }\r\n const data: SSLyricVideoIndex[] = await api.post(\"/GetAllLyricVideos\");\r\n allVideos.value = data;\r\n featuredVideos.value = data\r\n .filter((v) => v.featured)\r\n .sort((a, b) => (a.featuredOrder ?? 0) - (b.featuredOrder ?? 0));\r\n\r\n latestVideos.value = data\r\n .sort(\r\n (a, b) =>\r\n new Date(b.modified).getTime() - new Date(a.modified).getTime(),\r\n )\r\n .filter((a, i) => i < 5);\r\n }\r\n\r\n const prefetchedData: Record = {};\r\n\r\n async function prefetchLyricVideoData(videoId: string) {\r\n const data = await getLyricVideoData(videoId);\r\n prefetchedData[videoId] = data;\r\n return data;\r\n }\r\n\r\n function clearPrefetchedData() {\r\n Object.keys(prefetchedData).forEach((key) => {\r\n delete prefetchedData[key];\r\n });\r\n }\r\n\r\n async function getLyricVideoData(videoId: string) {\r\n if (prefetchedData[videoId]) {\r\n return prefetchedData[videoId];\r\n }\r\n\r\n console.log('mvp: gettin lyric video data', videoId);\r\n await profile.profilePromise;\r\n\r\n console.log('mvp: gettin lyric video data - profile ready', videoId);\r\n if (!enable.value) {\r\n throw new Error(\"Lyric Videos are not enabled\");\r\n }\r\n\r\n console.log('mvp: waiting for all videos', allVideos.value.length);\r\n\r\n await waitUntilTrue(() => allVideos.value.length > 0);\r\n\r\n console.log('mvp: waiting for all videos - done', allVideos.value.length);\r\n\r\n const video = allVideos.value.find((v) => v.videoId.toLowerCase() === videoId.toLowerCase());\r\n\r\n console.log('mvp: waiting for all videos - done - found', video);\r\n if (!video){ \r\n console.log('mvp: video not found', video);\r\n throw new Error(\"Video not found\");\r\n }\r\n\r\n const response: SSLyricVideo = await api.post(\"/GetLyricVideoData\", {\r\n releasePath: video.releasePath,\r\n videoId,\r\n });\r\n\r\n if (response.isPreview) {\r\n response.timemap.forEach((section) => {\r\n section.textTiming.forEach((t) => {\r\n t.start = t.start - response.sampleStart;\r\n if (t.end) {\r\n t.end = t.end - response.sampleStart;\r\n }\r\n });\r\n });\r\n }\r\n\r\n return response;\r\n }\r\n\r\n let firstVideoItem: LyricVideoSetlistItem | null = null;\r\n\r\n function createNewSetlist(firstVideo?: LyricVideoSetlistItem) {\r\n const modals = useModalStore();\r\n const date = new Date();\r\n\r\n modals.showModal(\"SetlistDetailsModal\", {\r\n mode: \"new\",\r\n setListId: \"new\",\r\n setlistName: \"\",\r\n setlistNote: \"\",\r\n displaySongTitles: true,\r\n displaySongCopyrights: true,\r\n setlistDate: date.toISOString().split(\"T\")[0],\r\n videos: (firstVideo && [firstVideo]) || [],\r\n });\r\n\r\n if (firstVideo) {\r\n firstVideoItem = firstVideo;\r\n } else {\r\n firstVideoItem = null;\r\n }\r\n }\r\n\r\n const router = useRouter();\r\n\r\n async function onNewSetlistCreated(data: {\r\n setListName: string;\r\n setListNote: string;\r\n setListDate: string;\r\n displaySongTitles: boolean;\r\n displaySongCopyrights: boolean;\r\n videos: LyricVideoSetlistItem[];\r\n }) {\r\n const payload = {\r\n title: data.setListName,\r\n description: data.setListNote || \"\",\r\n serviceDate: data.setListDate,\r\n setListMetadata: JSON.stringify({\r\n displaySongTitles: data.displaySongTitles,\r\n displaySongCopyrights: data.displaySongCopyrights,\r\n }),\r\n videos: JSON.stringify(data.videos),\r\n };\r\n\r\n const response: { setlistId: string } = await api.post(\r\n \"/CreateLyricVideoSetlist\",\r\n payload,\r\n );\r\n\r\n router.push(`/lyric-videos/setlists/${response.setlistId}?add=1`);\r\n }\r\n\r\n async function removeFromSetlist(setListId: string, setListItemId: string) {\r\n await api.post(\"/DeleteSetlistItem\", {\r\n setListId,\r\n setListItemId,\r\n });\r\n toggleShowSavedStatus();\r\n }\r\n\r\n async function addToSetlist(setlistId: string, video: LyricVideoSetlistItem) {\r\n await api.post(\"/AddLyricVideoToSetlist\", {\r\n setListId: setlistId,\r\n video: JSON.stringify(video),\r\n });\r\n (window as any).dataLayer.push({\r\n event: \"addLyricVideoToSetlist\",\r\n });\r\n toggleShowSavedStatus();\r\n\r\n // then take them to the page of interest\r\n // router.push(`/lyric-videos/setlists/${setlistId}?view=-1`);\r\n }\r\n\r\n const hasCustomizationsOnClipboard = ref(false);\r\n let customizationsClipboard: LyricVideoCustomization | null = null;\r\n\r\n function setCopyCustomizations(c: LyricVideoCustomization) {\r\n customizationsClipboard = cloneDeep(c);\r\n hasCustomizationsOnClipboard.value = true;\r\n }\r\n function getCopyCustomizations() {\r\n return customizationsClipboard;\r\n }\r\n\r\n async function updateSetlist(setlist: {\r\n setListId: string;\r\n setListName: string;\r\n setListNote: string;\r\n setListDate: string;\r\n displaySongTitles: boolean;\r\n displaySongCopyrights: boolean;\r\n videos: LyricVideoSetlistItem[];\r\n }) {\r\n await api.post(\"/UpdateLyricVideoSetlist\", {\r\n setlistId: setlist.setListId,\r\n setListName: setlist.setListName,\r\n setListNote: setlist.setListNote,\r\n setListDate: setlist.setListDate,\r\n setListMetadata: JSON.stringify({\r\n displaySongTitles: setlist.displaySongTitles,\r\n displaySongCopyrights: setlist.displaySongCopyrights,\r\n }),\r\n videos: setlist.videos,\r\n });\r\n toggleShowSavedStatus();\r\n emitter.emit(\"refreshSetlistView\");\r\n }\r\n\r\n async function deleteSetlist(setlistId: string) {\r\n await api.post(\"/DeleteSetlist\", {\r\n setListId: setlistId,\r\n });\r\n emitter.emit(\"refreshSetlistView\");\r\n }\r\n\r\n async function getCustomizations() {\r\n await waitUntilTrue(() => profile.profilePromise);\r\n\r\n if (!profile.profile) {\r\n return;\r\n }\r\n\r\n if (!profile.profile.signedIn) {\r\n return;\r\n }\r\n\r\n const savedData: string | null = await api.post(\r\n \"/GetLyricVideoPreferences\",\r\n );\r\n\r\n if (savedData) {\r\n browseCustomizations.value = JSON.parse(savedData);\r\n }\r\n }\r\n\r\n function saveCustomizations() {\r\n const response = api.post(\"/SaveLyricVideoPreferences\", {\r\n lyricVideoCustomization: JSON.stringify(browseCustomizations.value),\r\n });\r\n toggleShowSavedStatus();\r\n return response;\r\n }\r\n\r\n const browseCustomizations = useLocalStorage(\r\n \"lyric-video-browse-customizations\",\r\n DefaultLVCustomization,\r\n );\r\n\r\n function updateSetlistOrder(\r\n setlistId: string,\r\n items: {\r\n setlistItemId: string;\r\n sortOrder: number;\r\n }[],\r\n ) {\r\n const response = api.post(\"/UpdateLyricVideoSetlistSortOrder\", {\r\n setListId: setlistId,\r\n items: JSON.stringify(items),\r\n });\r\n return response;\r\n }\r\n\r\n function updateSetlistItem(\r\n setlistItemId: string,\r\n setlistId: string,\r\n customizations: LyricVideoCustomization,\r\n ) {\r\n const response = api.post(\"/UpdateLyricVideoSetlistItem\", {\r\n setListItemId: setlistItemId,\r\n setListId: setlistId,\r\n customizations: JSON.stringify(customizations),\r\n });\r\n toggleShowSavedStatus();\r\n return response;\r\n }\r\n\r\n const showSavedStatus = ref(false);\r\n let showSavedStatusTimer: number | null = null;\r\n function toggleShowSavedStatus() {\r\n showSavedStatus.value = true;\r\n if (showSavedStatusTimer) {\r\n clearTimeout(showSavedStatusTimer);\r\n }\r\n showSavedStatusTimer = window.setTimeout(() => {\r\n showSavedStatus.value = false;\r\n }, 3000);\r\n }\r\n return {\r\n hasCustomizationsOnClipboard,\r\n setCopyCustomizations,\r\n getCopyCustomizations,\r\n createNewSetlist,\r\n updateSetlist,\r\n deleteSetlist,\r\n enable,\r\n allVideos,\r\n featuredVideos,\r\n getAllVideos,\r\n getSetlist,\r\n addToSetlist,\r\n removeFromSetlist,\r\n onNewSetlistCreated,\r\n latestVideos,\r\n getCustomizations,\r\n saveCustomizations,\r\n browseCustomizations,\r\n updateSetlistOrder,\r\n updateSetlistItem,\r\n dropdownOpen,\r\n onOpenDropdown,\r\n onCloseDropdown,\r\n getUpcomingSetlists,\r\n getSetlists,\r\n showSavedStatus,\r\n getLyricVideoData,\r\n backgroundImages,\r\n backgroundVideos,\r\n getLyricVideoBackgrounds,\r\n prefetchLyricVideoData,\r\n clearPrefetchedData,\r\n inBetaMode,\r\n setlistFeaturesEnabled,\r\n };\r\n});\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","export enum SearchCategory {\r\n All = \"All\",\r\n Songs = \"Songs\",\r\n LyricVideos = \"LyricVideos\",\r\n}\r\n\r\nexport const categoryLUT = [\r\n {\r\n label: \"All\",\r\n value: SearchCategory.All,\r\n icon: \"fa-light fa-magnifying-glass\",\r\n },\r\n { label: \"Songs\", value: SearchCategory.Songs, icon: \"fa-light fa-music\" },\r\n {\r\n label: \"Lyric Videos\",\r\n value: SearchCategory.LyricVideos,\r\n icon: \"fa-light fa-film\",\r\n },\r\n];\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","export default \"data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='Layer_1'%20data-name='Layer%201'%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20127.99%20128.01'%3e%3cdefs%3e%3cstyle%3e%20.cls-1%20{%20fill:%20%2300a3e0;%20}%20.cls-1,%20.cls-2%20{%20stroke-width:%200px;%20}%20.cls-2%20{%20fill:%20%23004b87;%20}%20%3c/style%3e%3c/defs%3e%3cg%3e%3cpath%20class='cls-1'%20d='M18.75,18.74C10.51,26.98,5.01,36.93,2.21,47.44c-.18.67.65,1.15,1.15.66,5.53-5.53,22.37-22.37,22.37-22.37,20.97-20.97,54.86-21.13,76.03-.49.27.26.7.26.96,0l6.01-6.01c.27-.27.27-.72,0-.99-25.03-24.48-65.16-24.31-89.98.51Z'/%3e%3cpath%20class='cls-2'%20d='M74.31,74.31c-6.12,6.12-16.18,5.7-21.74-1.18-4.23-5.23-4.26-12.92-.08-18.19,5.4-6.8,15.2-7.39,21.36-1.76.27.25.69.25.95,0l6-6c.28-.28.27-.73,0-1-9.6-9.07-24.73-8.9-34.13.5,0,0,0,0,0,0h0S5.17,88.17,5.17,88.17c-.2.2-.26.5-.15.77,1.16,2.73,2.54,5.41,4.1,8,.23.38.77.45,1.09.13l30.05-30.05c-.23,5.2,2.53,10.41,6.42,14.29,9.57,9.57,24.94,9.66,34.63,0,.08-.08,37.63-37.63,41.5-41.5.2-.2.25-.49.14-.75-1.17-2.75-2.56-5.44-4.13-8.03-.23-.38-.77-.45-1.09-.13l-43.42,43.42Z'/%3e%3cpath%20class='cls-1'%20d='M39.68,39.71s.01-.01.02-.02c13.26-13.26,34.67-13.42,48.12-.47.27.26.69.26.96,0l6.01-6.01c.27-.27.27-.73,0-1-17.31-16.78-44.91-16.67-62.09.51L.21,65.2c-.14.14-.21.32-.21.51.1,3.65.51,7.33,1.23,10.92.11.54.78.74,1.17.35l37.28-37.28h0Z'/%3e%3cpath%20class='cls-1'%20d='M39.69,88.29c-.96-.96-1.85-1.96-2.67-3-.26-.32-.73-.36-1.02-.06l-6.04,6.04c-.25.25-.28.66-.05.93.88,1.06,1.8,2.09,2.79,3.08,17.28,17.28,45.27,17.25,62.55-.02l32.53-32.53c.14-.14.21-.33.21-.52-.11-3.81-.54-7.45-1.24-10.89-.11-.54-.78-.73-1.17-.34l-37.31,37.31c-13.42,13.41-35.16,13.43-48.58.01Z'/%3e%3cpath%20class='cls-1'%20d='M25.73,102.26c-.96-.96-1.86-1.96-2.73-2.98-.26-.31-.72-.33-1.01-.04l-6.02,6.02c-.26.26-.27.67-.03.95.9,1.03,1.83,2.05,2.81,3.03,24.99,24.99,65.58,25.06,90.5,0,8.24-8.29,13.82-18.24,16.62-28.8.18-.69-.66-1.18-1.16-.68l-22.46,22.46c-21.25,21.25-55.37,21.16-76.51.02Z'/%3e%3c/g%3e%3cpath%20class='cls-2'%20d='M115.99,118.39c.18-.42.43-.78.75-1.08.31-.31.68-.55,1.1-.72.42-.17.86-.26,1.33-.26s.91.09,1.33.26c.42.17.78.41,1.09.72.31.31.56.67.74,1.08.18.42.27.86.27,1.35s-.09.95-.27,1.37c-.18.42-.43.78-.74,1.09-.31.31-.68.55-1.09.72-.42.17-.86.26-1.33.26s-.92-.09-1.33-.26c-.42-.17-.78-.41-1.1-.72-.32-.31-.56-.67-.75-1.09-.18-.42-.27-.87-.27-1.37s.09-.93.27-1.35ZM116.55,120.91c.14.36.34.67.6.93.25.26.55.47.9.62.35.15.72.22,1.12.22s.77-.08,1.11-.22c.34-.15.64-.36.89-.62.25-.26.45-.57.6-.93.14-.36.22-.75.22-1.17s-.07-.79-.22-1.15c-.14-.35-.34-.66-.6-.92s-.55-.46-.89-.61c-.34-.15-.71-.23-1.11-.23s-.78.08-1.12.23c-.35.15-.64.35-.9.61s-.45.57-.6.92c-.14.35-.22.74-.22,1.15s.07.81.22,1.17ZM119.38,117.75c.48,0,.83.09,1.06.28.23.19.34.48.34.86,0,.36-.1.62-.3.79-.2.17-.45.27-.75.3l1.15,1.77h-.67l-1.09-1.72h-.66v1.72h-.62v-4.01h1.55ZM119.1,119.53c.14,0,.27,0,.4-.01.12,0,.24-.03.33-.08.1-.04.18-.11.23-.2.06-.09.09-.21.09-.37,0-.13-.03-.24-.08-.32-.05-.08-.12-.14-.2-.18-.08-.04-.18-.07-.28-.09-.11-.02-.21-.02-.32-.02h-.82v1.27h.65Z'/%3e%3c/svg%3e\"","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","\r\n\r\n\r\n\r\n\r\n","import { createPinia } from \"pinia\";\r\n\r\nexport const pinia = createPinia();\r\n","declare global {\r\n interface Window {\r\n dataLayer: any[];\r\n }\r\n}\r\n\r\nimport { DarkModeSetting } from \"@/models/frontend-only/DarkMode\";\r\nimport { StorageSerializers } from \"@vueuse/core\";\r\n\r\nexport const useDarkModeStore = defineStore(\"dark-mode\", () => {\r\n const darkMode = ref(\"system\");\r\n\r\n // now this variable is used to store for nonsigned in users and for people who are signed in but have not yet upgraded to new cloud based preferences\r\n const storedDarkMode = useLocalStorage(\r\n \"ss-ui-theme\",\r\n \"\",\r\n );\r\n\r\n const profile = useProfileStore();\r\n const systemDarkMode = usePreferredDark();\r\n const api = useApiStore();\r\n let initialized = false;\r\n\r\n const isDarkModeEnabled = computed(\r\n () =>\r\n darkMode.value === \"dark\" ||\r\n (darkMode.value === \"system\" && systemDarkMode.value),\r\n );\r\n setTheme();\r\n\r\n async function init() {\r\n await profile.profilePromise;\r\n\r\n if (profile.profile?.signedIn) {\r\n if (storedDarkMode.value) {\r\n darkMode.value = storedDarkMode.value;\r\n saveDarkModeSettingToCloud();\r\n storedDarkMode.value = \"\";\r\n } else {\r\n if ([\"dark\", \"light\", \"system\"].includes(profile.profile.uitheme)) {\r\n darkMode.value = profile.profile.uitheme as\r\n | \"dark\"\r\n | \"light\"\r\n | \"system\";\r\n } else {\r\n darkMode.value = \"system\";\r\n }\r\n }\r\n } else {\r\n darkMode.value = storedDarkMode.value || \"system\";\r\n }\r\n\r\n setTheme();\r\n initialized = true;\r\n watch(() => [darkMode.value, systemDarkMode.value], setTheme);\r\n\r\n watch(darkMode, () => {\r\n if (initialized) {\r\n saveDarkModeSettingToCloud();\r\n if (profile.profile && !profile.profile.signedIn) {\r\n storedDarkMode.value = darkMode.value;\r\n }\r\n }\r\n });\r\n }\r\n\r\n function saveDarkModeSettingToCloud() {\r\n if (profile.profile?.signedIn) {\r\n api.post(\"/UpdatePreferredUITheme\", {\r\n uitheme: darkMode.value,\r\n });\r\n }\r\n }\r\n\r\n function setTheme() {\r\n const html = document.querySelector(\"html\") as HTMLElement;\r\n const theme = isDarkModeEnabled.value ? \"dark\" : \"light\";\r\n if (isDarkModeEnabled.value) {\r\n import(\"@/styles/darkmode.css\");\r\n html.classList.add(\"dark\");\r\n html.setAttribute(\"data-theme\", \"ccli-dark\");\r\n } else {\r\n html.classList.remove(\"dark\");\r\n html.setAttribute(\"data-theme\", \"ccli-light\");\r\n }\r\n window.dataLayer = window.dataLayer || [];\r\n (window as any).dataLayer.push({\r\n event: \"toggleDarkMode\",\r\n preferred_color_scheme: theme,\r\n });\r\n }\r\n\r\n return { setTheme, init, darkMode, systemDarkMode, isDarkModeEnabled };\r\n});\r\n","import {\r\n createRouter,\r\n createWebHistory,\r\n RouteLocationNormalized,\r\n RouteRecordRaw,\r\n} from \"vue-router\";\r\n\r\nconst debug = useDebug();\r\n\r\nfunction handleErr(e: Error) {\r\n const profile = useProfileStore();\r\n profile.getPing();\r\n throw e;\r\n}\r\n\r\nconst routes: RouteRecordRaw[] = [\r\n {\r\n path: \"/\",\r\n children: [\r\n {\r\n path: \"\",\r\n component: () => import(\"@/pages/Home.vue\").catch(handleErr),\r\n name: \"Home\",\r\n },\r\n ...(import.meta.env.VITE_ENABLE_CCLI_TOP_100_NEW !== \"0\"\r\n ? [\r\n {\r\n path: \"ccli-top-100\",\r\n\r\n children: [\r\n {\r\n path: \"\",\r\n component: () =>\r\n import(\"@/pages/Top100/Base.vue\").catch(handleErr),\r\n },\r\n {\r\n name: \"ccli-top-100\",\r\n path: \":region\",\r\n component: () =>\r\n import(\"@/pages/Top100/Results.vue\").catch(handleErr),\r\n },\r\n ],\r\n },\r\n {\r\n path: \"ccli-top-songs\",\r\n\r\n children: [\r\n {\r\n path: \"\",\r\n component: () =>\r\n import(\"@/pages/Top100/Base.vue\").catch(handleErr),\r\n },\r\n {\r\n name: \"ccli-top-songs\",\r\n path: \":region\",\r\n component: () =>\r\n import(\"@/pages/Top100/Results.vue\").catch(handleErr),\r\n },\r\n ],\r\n },\r\n ]\r\n : []),\r\n ...(import.meta.env.VITE_ENABLE_LYRIC_VIDEO_TEST === \"1\"\r\n ? [\r\n {\r\n path: \"lyric-videos\",\r\n\r\n children: [\r\n {\r\n path: \"\",\r\n component: () =>\r\n import(\"@/pages/LyricVideos/AllLyricVideos.vue\").catch(\r\n handleErr,\r\n ),\r\n },\r\n {\r\n path: \":videoid\",\r\n\r\n children: [\r\n {\r\n path: \"\",\r\n component: () =>\r\n import(\"@/pages/LyricVideos/LyricVideo.vue\").catch(\r\n handleErr,\r\n ),\r\n },\r\n {\r\n path: \":videoitemid\",\r\n component: () =>\r\n import(\r\n \"@/pages/LyricVideos/LyricVideoVersion.vue\"\r\n ).catch(handleErr),\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n ]\r\n : []),\r\n ...(import.meta.env.VITE_ENABLE_LYRIC_VIDEO_MVP === \"1\" ||\r\n import.meta.env.VITE_ENABLE_LYRIC_VIDEO_MVP === \"beta\" ||\r\n import.meta.env.VITE_ENABLE_LYRIC_VIDEO_MVP === \"alpha\" ||\r\n import.meta.env.VITE_ENABLE_LYRIC_VIDEO_MVP === \"alpha-beta\" ||\r\n import.meta.env.VITE_ENABLE_LYRIC_VIDEO_MVP === \"new\"\r\n ? [\r\n {\r\n path: \"lyric-videos\",\r\n children: [\r\n {\r\n path: \"\",\r\n component: () =>\r\n import(\"@/pages/LyricVideosMVP/LyricVideosHome.vue\").catch(\r\n handleErr,\r\n ),\r\n },\r\n {\r\n path: \"setlists\",\r\n children: [\r\n {\r\n path: \"\",\r\n component: () =>\r\n import(\"@/pages/LyricVideosMVP/AllSetlists.vue\").catch(\r\n handleErr,\r\n ),\r\n },\r\n {\r\n path: \":setlistid\",\r\n name: \"lyric-video-setlist-view\",\r\n component: () =>\r\n import(\"@/pages/LyricVideosMVP/ViewSetlist.vue\").catch(\r\n handleErr,\r\n ),\r\n },\r\n ],\r\n },\r\n {\r\n path: \"videos\",\r\n children: [\r\n {\r\n path: \"\",\r\n component: () =>\r\n import(\r\n \"@/pages/LyricVideosMVP/AllLyricVideos.vue\"\r\n ).catch(handleErr),\r\n },\r\n {\r\n path: \":videoId\",\r\n component: () =>\r\n import(\r\n \"@/pages/LyricVideosMVP/BrowseLyricVideo.vue\"\r\n ).catch(handleErr),\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n ]\r\n : []),\r\n {\r\n path: \"search\",\r\n children: [\r\n {\r\n path: \"results\",\r\n name: \"search-results-page\",\r\n component: () =>\r\n import(\"@/pages/SearchResultsPage.vue\").catch(handleErr),\r\n },\r\n {\r\n path: \"topsongslists\",\r\n component: () => import(\"@/pages/TopSongs.vue\").catch(handleErr),\r\n },\r\n {\r\n path: \"liturgycalendar\",\r\n name: \"liturgycalendar\",\r\n component: () =>\r\n import(\"@/pages/LiturgyCalendar.vue\").catch(handleErr),\r\n },\r\n {\r\n path: \"responsorialpsalms\",\r\n component: () =>\r\n import(\"@/pages/ResponsorialPsalms.vue\").catch(handleErr),\r\n },\r\n {\r\n path: \"LiturgyDay\",\r\n children: [\r\n {\r\n path: \":id\",\r\n component: () =>\r\n import(\"@/pages/LiturgyDate.vue\").catch(handleErr),\r\n },\r\n {\r\n path: \":id/:slug\",\r\n component: () =>\r\n import(\"@/pages/LiturgyDate.vue\").catch(handleErr),\r\n },\r\n ],\r\n },\r\n {\r\n path: \"language\",\r\n component: () =>\r\n import(\"@/pages/SongsByLanguage.vue\").catch(handleErr),\r\n },\r\n {\r\n path: \"themes\",\r\n component: () => import(\"@/pages/Themes.vue\").catch(handleErr),\r\n },\r\n ],\r\n },\r\n {\r\n path: \"songs/:songNumber\",\r\n component: () => import(\"@/pages/SongTemplate.vue\").catch(handleErr),\r\n children: [\r\n {\r\n path: \"\",\r\n component: () => import(\"@/pages/General.vue\").catch(handleErr),\r\n },\r\n {\r\n path: \"viewlyrics\",\r\n component: () => import(\"@/pages/Lyrics.vue\").catch(handleErr),\r\n meta: {\r\n enablePrintView: true,\r\n },\r\n },\r\n {\r\n path: \"viewchordsheet\",\r\n component: () => import(\"@/pages/ChordSheet.vue\").catch(handleErr),\r\n },\r\n {\r\n path: \"viewleadsheet\",\r\n component: () => import(\"@/pages/LeadSheet.vue\").catch(handleErr),\r\n },\r\n {\r\n path: \"viewvocalsheet\",\r\n component: () => import(\"@/pages/VocalSheet.vue\").catch(handleErr),\r\n },\r\n ],\r\n },\r\n {\r\n path: \"songs/:songNumber/:slug\",\r\n component: () => import(\"@/pages/SongTemplate.vue\").catch(handleErr),\r\n children: [\r\n {\r\n path: \"\",\r\n component: () => import(\"@/pages/General.vue\").catch(handleErr),\r\n },\r\n {\r\n path: \"viewlyrics\",\r\n component: () => import(\"@/pages/Lyrics.vue\").catch(handleErr),\r\n meta: {\r\n enablePrintView: true,\r\n },\r\n },\r\n {\r\n path: \"viewchordsheet\",\r\n component: () => import(\"@/pages/ChordSheet.vue\").catch(handleErr),\r\n },\r\n {\r\n path: \"viewleadsheet\",\r\n component: () => import(\"@/pages/LeadSheet.vue\").catch(handleErr),\r\n },\r\n {\r\n path: \"viewvocalsheet\",\r\n component: () => import(\"@/pages/VocalSheet.vue\").catch(handleErr),\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n path: \"/cachehelp\",\r\n component: () => import(\"@/pages/Help.vue\").catch(handleErr),\r\n },\r\n {\r\n path: \"/favorites\",\r\n component: () =>\r\n import(\"@/pages/Favorites/FavoritesTemplate.vue\").catch(handleErr),\r\n children: [\r\n {\r\n path: \"\",\r\n redirect: \"/favorites/personal\",\r\n },\r\n {\r\n path: \"userfavorites\",\r\n redirect: \"/favorites/personal\",\r\n },\r\n {\r\n path: \"personal\",\r\n component: () =>\r\n import(\"@/pages/Favorites/Personal.vue\").catch(handleErr),\r\n },\r\n {\r\n path: \"shared\",\r\n children: [\r\n {\r\n path: \"\",\r\n component: () =>\r\n import(\"@/pages/Favorites/Shared.vue\").catch(handleErr),\r\n },\r\n {\r\n path: \":id\",\r\n name: \"favorites-list\",\r\n component: () =>\r\n import(\"@/pages/Favorites/Folder.vue\").catch(handleErr),\r\n },\r\n ],\r\n },\r\n ],\r\n },\r\n {\r\n path: \"/account/activity\",\r\n component: () =>\r\n import(\"@/pages/Activity/ActivityTemplate.vue\").catch(handleErr),\r\n children: [\r\n {\r\n path: \"\",\r\n redirect: \"/account/activity/unique-songs-used\",\r\n },\r\n {\r\n path: \"unique-songs-used\",\r\n component: () =>\r\n import(\"@/pages/Activity/UniqueSongs.vue\").catch(handleErr),\r\n },\r\n {\r\n path: \"activity-details\",\r\n component: () =>\r\n import(\"@/pages/Activity/ActivityDetail.vue\").catch(handleErr),\r\n },\r\n ],\r\n },\r\n\r\n {\r\n path: \"/callback/spotify\",\r\n component: () =>\r\n import(\"@/pages/callback/SpotifyCallback.vue\").catch(handleErr),\r\n },\r\n\r\n {\r\n path: \"/about\",\r\n children: [\r\n {\r\n path: \"pricing\",\r\n component: () => import(\"@/pages/Pricing.vue\").catch(handleErr),\r\n },\r\n {\r\n path: \"termsofuse\",\r\n component: () => import(\"@/pages/TermsOfUse.vue\").catch(handleErr),\r\n },\r\n {\r\n path: \"contact\",\r\n component: () => import(\"@/pages/Redirect.vue\").catch(handleErr),\r\n meta: {\r\n redirect: \"https://ccli.com/contact-ccli\",\r\n },\r\n },\r\n {\r\n path: \"\",\r\n component: () => import(\"@/pages/Redirect.vue\").catch(handleErr),\r\n meta: {\r\n redirect: \"https://ccli.com/songselect\",\r\n },\r\n },\r\n {\r\n path: \":catchAll(.*)\",\r\n component: () => import(\"@/pages/Redirect.vue\").catch(handleErr),\r\n meta: {\r\n redirect: \"https://ccli.com/songselect\",\r\n },\r\n },\r\n ],\r\n },\r\n {\r\n path: \"/:catchAll(.*)\",\r\n component: () => import(\"@/pages/NotFound.vue\").catch(handleErr),\r\n },\r\n];\r\n\r\nconst router = createRouter({\r\n history: createWebHistory(),\r\n routes,\r\n});\r\n\r\nlet afterFirstRoute = false;\r\nlet LCPEvent = false;\r\nemitter.on(\"LCPEvent\", onLCPEvent);\r\n\r\nfunction onLCPEvent() {\r\n emitter.off(\"LCPEvent\", onLCPEvent);\r\n LCPEvent = true;\r\n}\r\n\r\nasync function launchScripts() {\r\n if (!afterFirstRoute) {\r\n afterFirstRoute = true;\r\n const app = useAppStore();\r\n app.checkBrowserSupport();\r\n\r\n const route = useRoute();\r\n\r\n debug.log(\"wait\", route?.name);\r\n if (route?.name === \"Home\") {\r\n await waitUntilTrue(() => onLCPEvent);\r\n await asyncWait(2000);\r\n }\r\n debug.log(\"wait finished\");\r\n emitter.emit(\"readyToRunNonBlockingScripts\");\r\n }\r\n}\r\n\r\nrouter.afterEach(\r\n async (to: RouteLocationNormalized, from: RouteLocationNormalized) => {\r\n launchScripts();\r\n if (\r\n !(\r\n from.params.songNumber &&\r\n to.params.songNumber &&\r\n from.params.songNumber === to.params.songNumber\r\n ) &&\r\n !(from.name == \"liturgycalendar\" && to.name === \"liturgycalendar\") &&\r\n !router.options.history.state.historyNavigation &&\r\n !(\r\n (from.name === \"ccli-top-100\" || from.name === \"ccli-top-songs\") &&\r\n (to.name === \"ccli-top-100\" || to.name === \"ccli-top-songs\")\r\n )\r\n ) {\r\n window.scrollTo({ top: 0, left: 0, behavior: \"instant\" });\r\n }\r\n const colorScheme = useDarkModeStore().isDarkModeEnabled ? \"dark\" : \"light\";\r\n const musicPlayerPreferences =\r\n useProfileStore().profile?.musicPlayerPreferences;\r\n\r\n (window as any).dataLayer = (window as any).dataLayer || [];\r\n (window as any).dataLayer.push({\r\n preferred_color_scheme: colorScheme,\r\n is_beta_user: useBetaStore().enabled,\r\n userId: useProfileStore().profile?.userId || \"\",\r\n dsp_integration_status: musicPlayerPreferences?.service ? true : false,\r\n dsp_integration_platform: musicPlayerPreferences?.service || \"\",\r\n });\r\n (window as any).dataLayer.push({\r\n event: \"vue_page\",\r\n });\r\n if (to.fullPath.includes(\"/lyric-videos\")) {\r\n (window as any).dataLayer.push({\r\n lyric_video_interaction: \"yes\",\r\n });\r\n }\r\n },\r\n);\r\n\r\nlet nextPath = \"\";\r\n\r\nrouter.onError((e: Error) => {\r\n launchScripts();\r\n const app = useAppStore();\r\n const profile = useProfileStore();\r\n if (!app.productionMode) {\r\n throw e;\r\n }\r\n\r\n debug.log(\"router error\", e);\r\n profile.getPing();\r\n\r\n if (e.message.includes(\"Failed to fetch dynamically imported module:\")) {\r\n if (nextPath) {\r\n window.location.replace(window.location.origin + nextPath);\r\n } else {\r\n document.location.reload();\r\n }\r\n return;\r\n }\r\n});\r\n\r\nrouter.beforeEach((to) => {\r\n nextPath = to.fullPath;\r\n\r\n const mobile = useMobileStore();\r\n mobile.toggleMobileNav(false);\r\n\r\n if (to.meta.enablePrintView) {\r\n document.body.classList.add(\"print-mode\");\r\n } else {\r\n document.body.classList.remove(\"print-mode\");\r\n }\r\n});\r\n\r\nrouter.afterEach(() => {\r\n const app = useAppStore();\r\n app.showFooter = true;\r\n router.options.history.state.historyNavigation = false;\r\n});\r\n\r\nwindow.addEventListener(\"popstate\", () => {\r\n router.options.history.state.historyNavigation = true;\r\n});\r\n\r\nexport default router;\r\n","import { createI18n } from \"vue-i18n\";\r\nimport enUSTranslations from \"@/assets/locales/en-US.json\";\r\n\r\nconst initialTranslations = {\r\n \"en-US\": escapePipelineInTranslations(enUSTranslations),\r\n};\r\n\r\nconst i18nOptions = {\r\n globalInjection: true,\r\n legacy: false,\r\n locale: \"en-US\",\r\n fallbackLocale: \"en-US\",\r\n messages: initialTranslations,\r\n};\r\n\r\nexport const i18n = createI18n(i18nOptions);\r\n","export function isSafari(chromeIos?: boolean) {\r\n const test = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\r\n\r\n if (!test) {\r\n return false;\r\n }\r\n\r\n if(!chromeIos){\r\n return test;\r\n } else {\r\n // check to see if this is chrome running on ios\r\n const safarimatches = navigator.userAgent.match(/safari\\/(\\d+)/i) || [];\r\n if (safarimatches[1] && parseFloat(safarimatches[1]) > 100) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nexport function isAndroid() {\r\n return /android/i.test(navigator.userAgent);\r\n}\r\n\r\nexport function isFirefox() {\r\n return navigator.userAgent.toLowerCase().indexOf(\"firefox\") > -1;\r\n}\r\n\r\nexport function isBot() {\r\n if (navigator.webdriver) {\r\n return true;\r\n }\r\n const userAgent = navigator.userAgent.toLowerCase();\r\n if (\r\n userAgent.includes(\"bot\") ||\r\n userAgent.includes(\"crawler\") ||\r\n userAgent.includes(\"spider\") ||\r\n userAgent.includes(\"robot\") ||\r\n userAgent.includes(\"chrome-lighthouse\")\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n","import { createApp } from \"vue\";\r\nimport { createHead } from \"@vueuse/head\";\r\nimport App from \"./App.vue\";\r\nimport { pinia } from \"./config/pinia\";\r\nimport router from \"./config/router\";\r\nimport { RaygunFunctions, raygunInit } from \"./config/RayGun\";\r\n\r\n// hide potential messages of unsupported browser that was done on index.html\r\nconst element = document.querySelector(\"#UnsupportedBrowserMessage\");\r\nif (element) {\r\n (element as HTMLDivElement).style.display = \"none\";\r\n}\r\nconst app = createApp(App);\r\nconst head = createHead();\r\n\r\napp.use(pinia).use(router).use(i18n).use(head).mount(\"#app\");\r\n\r\nuseProfileStore();\r\n\r\nconst appStore = useAppStore();\r\nif (appStore.browserSupported) {\r\n app.config.errorHandler = RaygunFunctions.handleVueError;\r\n}\r\n\r\nconst darkMode = useDarkModeStore();\r\ndarkMode.init();\r\n\r\nemitter.on(\"readyToRunNonBlockingScripts\", () => {\r\n import(\"./styles/main.css\");\r\n\r\n if (!isBot()) {\r\n raygunInit();\r\n\r\n (window as any).loadGoogleAnalytics();\r\n } else {\r\n useDebug().log(\"Bot detected\");\r\n }\r\n});\r\n"],"file":"assets/index-CW-FoRA1.js"}