diff --git a/README.md b/README.md index 6a4bb7ce..ae322b4d 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,9 @@ GitHub Forks
- Buy Me A Coffee + Buy Me A Coffee Open Collective + GitHub Sponsor
Discord Twitter diff --git a/package.json b/package.json index ef2f2597..89aeaf73 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "cider", "applicationId": "Cider", "productName": "Cider", - "version": "1.2.1", + "version": "1.3.0", "description": "A new look into listening and enjoying music in style and performance.", "license": "AGPL-3.0", "main": "./build/index.js", @@ -48,6 +48,7 @@ "electron-notarize": "^1.1.1", "electron-store": "^8.0.1", "electron-updater": "^4.6.5", + "electron-vibrancy-updated": "git+https://github.com/ciderapp/electron-vibrancy-updated", "electron-window-state": "^5.0.3", "express": "^4.17.3", "get-port": "^5.1.1", @@ -75,7 +76,7 @@ "@types/express": "^4.17.13", "@types/qrcode-terminal": "^0.12.0", "@types/ws": "^8.5.1", - "electron": "git+https://github.com/castlabs/electron-releases.git", + "electron": "git+https://github.com/castlabs/electron-releases.git#16-x-y", "electron-builder": "^22.14.13", "electron-builder-notarize-pkg": "^1.2.0", "electron-webpack": "^2.8.2", diff --git a/src/i18n/en_OWO.json b/src/i18n/en_OWO.json index 1f30734f..303d1c58 100644 --- a/src/i18n/en_OWO.json +++ b/src/i18n/en_OWO.json @@ -352,6 +352,8 @@ "settings.option.experimental.compactUI": "Compact UI", "settings.option.experimental.close_button_hide": "Cwose Button Shouwd Hide the Appwication", "settings.option.experimental.inline_playlists": "Inwinye Pwaywists and Awbums", + "settings.option.advanced.playlistTrackMapping": "Pwaywist Twack Mapping", + "settings.option.advanced.playlistTrackMapping.description": "Enyabwes deep scannying of pwaywists to detewminye which twacks awe in which pwaywists.", "spatial.notTurnedOn": "Audio Spatiawization is disabwed. To use, pwease enyabwe it fiwst.", "spatial.spatialProperties": "Spatiaw Pwopewties", "spatial.width": "Width", @@ -375,4 +377,4 @@ "remote.web.title": "Cidew Wemote", "remote.web.description": "Scan the QW code to paiw youw phonye up with this Cidew instance", "about.thanks": "Majow thanks to the Cidew Cowwective Team and aww of ouw contwibutows." -} +} \ No newline at end of file diff --git a/src/i18n/en_PISS.json b/src/i18n/en_PISS.json index d8b0da70..7f061d86 100644 --- a/src/i18n/en_PISS.json +++ b/src/i18n/en_PISS.json @@ -164,8 +164,8 @@ "action.addToLibrary": "obtain piss", "action.addToLibrary.success": "piss obtained", "action.addToLibrary.error": "error obtaining piss", - "action.removeFromLibrary": "dump piss", - "action.removeFromLibrary.success": "piss dumped", + "action.removeFromLibrary": "unobtain piss", + "action.removeFromLibrary.success": "piss unobtained", "action.addToQueue": "add to toilet", "action.addToQueue.success": "added to toilet", "action.addToQueue.error": "error adding to toilet", diff --git a/src/i18n/en_SGA.json b/src/i18n/en_SGA.json index 6bc5d97b..257204bf 100644 --- a/src/i18n/en_SGA.json +++ b/src/i18n/en_SGA.json @@ -19,11 +19,10 @@ "term.learnMore": "|:ᒷᖋ∷リ ᒲᒍ∷ᒷ", "term.accountSettings": "ᖋᔮᔮᒍ⚍リᒣ ϟᒷᒣᒣ╎リ┤ϟ", "term.logout": "|:ᒍ┤ᒍ⚍ᒣ", - "term.login": "|:ᒍ┤ ╎リ", + "term.login": "|:ᒍ┤╎リ", "term.about": "ᖋᕊᒍ⚍ᒣ", "term.privateSession": "I!∷╎⍊ᖋᒣᒷ ϟᒷϟϟ╎ᒍリ", "term.queue": "ᑑ⚍ᒷ⚍ᒷ", - "term.history": "⍑╎ϟᒣᒍ∷॥", "term.search": "ϟᒷᖋ∷ᔮ⍑", "term.library": "|:╎ᕊ∷ᖋ∷॥", "term.listenNow": "|:╎ϟᒣᒷリ", @@ -36,11 +35,6 @@ "term.podcasts": "I!ᒍ↸ᔮᖋϟᒣϟ", "term.playlists": "i!|:ᖋ॥|:╎ϟᒣϟ", "term.playlist": "i!|:ᖋ॥|:╎ϟᒣ", - "term.newPlaylist": "リᒷ∴ i!|:ᖋ॥|:╎ϟᒣ", - "term.newPlaylistFolder": "リᒷ∴ i!|:ᖋ॥|:╎ϟᒣ ⎓ᒍ|:↸ᒷ∷", - "term.createNewPlaylist": "ᔮ∷ᒷᖋᒣᒷ リᒷ∴ i!|:ᖋ॥|:╎ϟᒣ", - "term.createNewPlaylistFolder": "ᔮ∷ᒷᖋᒣᒷ リᒷ∴ i!|:ᖋ॥|:╎ϟᒣ ⎓ᒍ|:↸ᒷ∷", - "term.deletePlaylist": "ᖋ∷ᒷ ॥ᒍ⚍ ϟ⚍∷ᒷ ॥ᒍ⚍ ∴ᖋリᒣ ᒣᒍ ↸ᒷ|:ᒷᒣᒷ ᒣ⍑╎ϟ i!|:ᖋ॥|:╎ϟᒣ?", "term.play": "i!|:ᖋ॥", "term.pause": "I!ᖋ⚍ϟᒷ", "term.previous": "I!∷ᒷ⍊╎ᒍ⚍ϟ", @@ -51,7 +45,6 @@ "term.mute": "ᒲ⚍ᒣᒷ", "term.unmute": "⚍リᒲ⚍ᒣᒷ", "term.share": "ϟ⍑ᖋ∷ᒷ", - "term.share.success": "ᔮᒍi!╎ᒷ↸ ᒣᒍ ᔮ|:╎i!ᕊᒍᖋ∷↸", "term.settings": "ϟᒷᒣᒣ╎リ┤ϟ", "term.seeAll": "ϟᒷᒷ ᖋ|:|:", "term.sortBy": "ϟᒍ∷ᒣ ᕊ॥", diff --git a/src/i18n/en_US.json b/src/i18n/en_US.json index 9acdad54..d224beb8 100644 --- a/src/i18n/en_US.json +++ b/src/i18n/en_US.json @@ -2,7 +2,7 @@ "i18n.languageName": "English (US)", "i18n.languageNameEnglish": "English (US)", "i18n.category": "main", - "i18n.authors": "@maikirakiwi @kyw504100 nosh118", + "i18n.authors": "@maikirakiwi @kyw504100 @nosh118", "app.name": "Cider", "date.format": "${m} ${d}, ${y}", "dialog.cancel": "Cancel", @@ -148,6 +148,7 @@ "term.noVideos": "No videos found.", "term.plugin": "Plug-in", "term.pluginMenu": "Plug-in Menu", + "term.pluginMenu.none": "No interactive plugins", "term.replay": "Replay", "term.uniqueAlbums": "Unique Albums", "term.uniqueArtists": "Unique Artists", @@ -200,11 +201,13 @@ "action.unfollow": "Unfollow", "action.unfollow.success": "Unfollowed", "action.unfollow.error": "Error Unfollowing", + "action.relaunch.confirm": "Do you want to relaunch Cider?", "action.playNext": "Play Next", "action.playLater": "Play Later", "action.startRadio": "Start Radio", "action.goToArtist": "Go to Artist", "action.goToAlbum": "Go to Album", + "action.showInPlaylist": "Show in Playlist", "action.moveToTop": "Move out of Folder", "action.share": "Share", "action.rename": "Rename", @@ -313,6 +316,8 @@ "settings.option.visual.hardwareAcceleration.description": "Requires relaunch", "settings.header.visual.hardwareAcceleration.default": "Default", "settings.header.visual.hardwareAcceleration.webGPU": "WebGPU", + "settings.option.visual.transparent": "Transparent frame", + "settings.option.visual.transparent.description": "Transparent frame (needs Theme Support , requires relaunch)", "settings.header.visual.theme": "Theme", "settings.option.visual.theme.github.download": "Install from GitHub URL", "settings.option.visual.theme.github.explore": "Explore GitHub Themes", @@ -353,7 +358,7 @@ "settings.option.experimental.close_button_hide": "Close Button Should Hide the Application", "settings.option.experimental.inline_playlists": "Inline Playlists and Albums", "settings.option.advanced.playlistTrackMapping": "Playlist Track Mapping", - "settings.option.advanced.playlistTrackMapping.description": "Enables deep scanning of playlists to determine which tracks are in which playlists.", + "settings.option.advanced.playlistTrackMapping.description": "Enables deep scanning of playlists to determine which tracks are in which playlists. Playlist cache build times can increase significantly.", "spatial.notTurnedOn": "Audio Spatialization is disabled. To use, please enable it first.", "spatial.spatialProperties": "Spatial Properties", "spatial.width": "Width", diff --git a/src/i18n/hu_HU.json b/src/i18n/hu_HU.json index 1d8f7ef7..45726d3e 100644 --- a/src/i18n/hu_HU.json +++ b/src/i18n/hu_HU.json @@ -365,4 +365,4 @@ "remote.web.title": "Cider Remote", "remote.web.description": "Olvasd be ezt a QR-kódot a telefonoddal, hogy tudd vezérelni a lejátszót.", "about.thanks": "Köszönet a Cider Collective csapatának és minden hozzájárulónak." -} \ No newline at end of file +} diff --git a/src/i18n/ko_KR.json b/src/i18n/ko_KR.json index 51396bc8..71376370 100644 --- a/src/i18n/ko_KR.json +++ b/src/i18n/ko_KR.json @@ -23,9 +23,8 @@ "term.about": "정보", "term.privateSession": "개인 세션", "term.queue": "대기열", - "term.history": "청취 기록", "term.search": "검색", - "term.library": "보관함", + "term.library": "라이브러리", "term.listenNow": "지금 듣기", "term.browse": "둘러보기", "term.radio": "라디오", @@ -34,77 +33,76 @@ "term.albums": "앨범", "term.artists": "아티스트", "term.podcasts": "팟캐스트", - "term.playlists": "재생 목록", - "term.playlist": "재생 목록", - "term.newPlaylist": "새 재생 목록", - "term.newPlaylistFolder": "새 재생 목록 폴더", - "term.createNewPlaylist": "새 재생 목록 만들기", - "term.createNewPlaylistFolder": "새 재생 목록 폴더 만들기", - "term.deletePlaylist": "정말로 이 재생 목록을 삭제하시겠습니까?", + "term.playlists": "플레이리스트", + "term.playlist": "플레이리스트", + "term.newPlaylist": "새 플레이리스트", + "term.newPlaylistFolder": "새 플레이리스트 폴더", + "term.createNewPlaylist": "새 플레이리스트 만들기", + "term.createNewPlaylistFolder": "새 플레이리스트 폴더 만들기", + "term.deletePlaylist": "정말 플레이리스트를 삭제하시겠습니까?", "term.play": "재생", - "term.pause": "일시 정지", + "term.pause": "정지", "term.previous": "이전", "term.next": "다음", "term.shuffle": "셔플", - "term.repeat": "반복", + "term.repeat": "반복재생", "term.volume": "볼륨", "term.mute": "음소거", "term.unmute": "음소거 해제", "term.share": "공유", - "term.share.success": "클립보드에 복사됨", "term.settings": "설정", "term.seeAll": "모두 보기", - "term.sortBy": "정렬", - "term.sortBy.album": "앨범명", - "term.sortBy.artist": "아티스트 이름", - "term.sortBy.name": "제목", + "term.sortBy": "정렬방식", + "term.sortBy.album": "앨범", + "term.sortBy.artist": "아티스트", + "term.sortBy.name": "이름", "term.sortBy.genre": "장르", - "term.sortBy.releaseDate": "발매일", - "term.sortBy.duration": "길이", - "term.sortOrder": "A-Z", + "term.sortBy.releaseDate": "출시일", + "term.sortBy.duration": "재생시간", + "term.sortOrder": "ㄱ-ㅎ", "term.sortOrder.ascending": "오름차순", "term.sortOrder.descending": "내림차순", - "term.viewAs": "표시", - "term.viewAs.coverArt": "커버 아트", + "term.viewAs": "표시방식", + "term.viewAs.coverArt": "커버아트", "term.viewAs.list": "리스트", "term.size": "크기", - "term.size.normal": "표준", + "term.size.normal": "일반", "term.size.compact": "컴팩트", - "term.enable": "켜기", - "term.disable": "끄기", - "term.enabled": "켜짐", - "term.disabled": "꺼짐", + "term.enable": "활성화", + "term.disable": "비활성화", + "term.enabled": "활성화", + "term.disabled": "비활성화", "term.connect": "연결", "term.connecting": "연결 중", - "term.disconnect": "연결 해제", + "term.disconnect": "연결 끊김", "term.authed": "인증됨", - "term.confirm": "진행하시겠습니까?", - "term.more": "추가", - "term.less": "줄이기", + "term.confirm": "확인하시겠습니까 ?", + "term.more": "더", + "term.less": "적게", "term.showMore": "더 보기", - "term.showLess": "덜 보기", - "term.topSongs": "많이 듣는 노래", - "term.latestReleases": "최근 발매된 노래", - "term.time.added": "추가됨", - "term.time.released": "발매됨", - "term.time.updated": "업데이트됨", + "term.showLess": "적게 보기", + "term.topSongs" : "인기곡", + "term.latestReleases": "최신곡", + "term.time.added": "추가", + "term.time.released": "발매일", + "term.time.updated": "업데이트일", "term.time.hours": "시간", "term.time.hour": "시간", "term.time.minutes": "분", "term.time.minute": "분", "term.time.seconds": "초", "term.time.second": "초", - "term.fullscreenView": "전체 화면 보기", - "term.defaultView": "윈도우 보기", + "term.fullscreenView": "전체화면", + "term.defaultView": "기본화면", "term.audioSettings": "오디오 설정", - "term.clearAll": "모두 지우기", + "term.clearAll": "비우기", "term.recentStations": "최근 스테이션", "term.language": "언어", - "term.funLanguages": "재미를 위한 언어", - "term.noLyrics": "로딩 중... / 가사를 찾지 못했습니다. / Instrumental 곡일 수 있습니다.", - "term.copyright": "저작권", + "term.funLanguages": "재미있는", + "term.noLyrics": "불러오는 중... / 가사를 찾을 수 없습니다/ 연주곡", + "term.copyright": "Copyright", "term.rightsReserved": "All Rights Reserved.", - "term.sponsor": "이 프로젝트를 후원하기", + "term.sponsor": "이 프로젝트를 후원하세요", "term.ciderTeam": "Cider 팀", "term.developer": "개발자", "term.socialTeam": "소셜 팀", @@ -133,12 +131,12 @@ "term.videoExtras": "추가 비디오", "term.top": "Top", "home.title": "홈", - "home.recentlyPlayed": "최근 재생한 항목", + "home.recentlyPlayed": "최근 재생된 항목", "home.recentlyAdded": "최근 추가된 항목", - "home.artistsFeed": "아티스트 피드", - "home.artistsFeed.noArtist": "좋아하는 아티스트를 팔로우해보세요.", + "home.artistsFeed": "내 아티스트 피드", + "home.artistsFeed.noArtist": "아티스트를 팔로우하면 최근 발매곡이 표시됩니다", "home.madeForYou": "나만을 위한 추천", - "home.friendsListeningTo": "친구가 듣는 음악", + "home.friendsListeningTo": "친구들이 듣는", "home.followedArtists": "팔로우한 아티스트", "error.appleMusicSubRequired": "Apple Music은 구독을 필요로 합니다.", "error.connectionError": "Apple Music에 연결하지 못했습니다.", @@ -154,21 +152,21 @@ "podcast.website": "팟캐스트 사이트", "action.addToLibrary": "보관함에 추가", "action.addToLibrary.success": "보관함에 추가됨", - "action.addToLibrary.error": "보관함에 추가하는데 실패함", + "action.addToLibrary.error": "보관함에 추가 실패", "action.removeFromLibrary": "보관함에서 삭제", "action.removeFromLibrary.success": "보관함에서 삭제됨", "action.addToQueue": "대기열에 추가", "action.addToQueue.success": "대기열에 추가됨", - "action.addToQueue.error": "대기열에 추가하는데 실패함", + "action.addToQueue.error": "대기열에 추가 실패", "action.removeFromQueue": "대기열에서 삭제", "action.removeFromQueue.success": "대기열에서 삭제됨", - "action.removeFromQueue.error": "대기열에서 삭제하는데 실패함", - "action.createPlaylist": "새 재생 목록 만들기", - "action.addToPlaylist": "재생 목록에 추가", - "action.removeFromPlaylist": "재생 목록에서 삭제", - "action.addToFavorites": "즐겨찾기에 추가", + "action.removeFromQueue.error": "대기열에서 삭제 실패", + "action.createPlaylist": "새 플레이리스트", + "action.addToPlaylist": "플레이리스트에 추가...", + "action.removeFromPlaylist": "플레이리스트에서 삭제", + "action.addToFavorites": "선호항목에 추가", "action.follow": "팔로우", - "action.follow.success": "팔로우 중", + "action.follow.success": "팔로우됨", "action.follow.error": "팔로우 실패", "action.unfollow": "언팔로우", "action.unfollow.success": "언팔로우됨", @@ -178,23 +176,23 @@ "action.startRadio": "스테이션 생성", "action.goToArtist": "아티스트 보기", "action.goToAlbum": "앨범 보기", - "action.moveToTop": "위로 가기", - "action.share": "공유", - "action.rename": "편집", + "action.moveToTop": "맨 위로 이동", + "action.share": "공유하기", + "action.rename": "이름 편집하기", "action.love": "좋아요", "action.unlove": "좋아요 취소", - "action.dislike": "싫어요", - "action.undoDislike": "싫어요 취소", + "action.dislike": "비슷한 항목의 제안 줄이기", + "action.undoDislike": "비슷한 항목의 제안 줄이기 실행 취소", "action.showWebRemoteQR": "웹 리모트", - "action.playTracksNext": "다음 ${app.selectedMediaItems.length}곡 재생", - "action.playTracksLater": "나중에 ${app.selectedMediaItems.length}곡 재생", - "action.removeTracks": "${self.selectedItems.length}곡을 대기열에서 삭제", - "action.import": "불러오기", + "action.playTracksNext": "${app.selectedMediaItems.length} 바로 다음에 재생", + "action.playTracksLater": "${app.selectedMediaItems.length} 맨 나중에 재생", + "action.removeTracks": "${self.selectedItems.length} 대기열에서 삭제", + "action.import": "가져오기", "action.export": "내보내기", "action.showAlbum": "전체 앨범 보기", - "action.tray.minimize": "트레이에 최소화", + "action.tray.minimize": "트레이로 최소화", "action.tray.quit": "종료", - "action.tray.show": "보기", + "action.tray.show": "", "action.update": "업데이트", "action.copy": "복사", "action.newpreset": "새 프리셋", @@ -223,7 +221,7 @@ "settings.header.visual.description": "Cider의 시각 기능을 설정합니다.", "settings.option.visual.windowBackgroundStyle": "윈도우 배경 스타일", "settings.header.visual.windowBackgroundStyle.none": "없음", - "settings.header.visual.windowBackgroundStyle.artwork": "앨범 아트", + "settings.header.visual.windowBackgroundStyle.artwork": "아트워크", "settings.header.visual.windowBackgroundStyle.image": "이미지", "settings.option.visual.animatedArtwork": "애니메이션 앨범 표지", "settings.header.visual.animatedArtwork.always": "항상 활성화", @@ -273,7 +271,7 @@ "spatial.width": "길이", "spatial.height": "높이", "spatial.depth": "깊이", - "spatial.gain": "출력", + "spatial.gain": "게인", "spatial.roomMaterials": "방 재질", "spatial.roomDimensions": "방 차원", "spatial.roomPositions": "방 위치", @@ -281,8 +279,8 @@ "spatial.setPositions": "위치 설정", "spatial.up": "위", "spatial.front": "앞", - "spatial.left": "좌", - "spatial.right": "우", + "spatial.left": "왼쪽", + "spatial.right": "오른쪽", "spatial.back": "뒤", "spatial.down": "아래", "spatial.listener": "사용자", @@ -291,4 +289,4 @@ "remote.web.title": "Cider 리모트", "remote.web.description": "QR 코드를 스캔해서 Cider와 스마트폰을 연결하기", "about.thanks": "Cider Collective Team과 모든 기여자들에게 감사합니다." -} \ No newline at end of file +} diff --git a/src/i18n/ro_RO.json b/src/i18n/ro_RO.json index 2a695350..e886f67d 100644 --- a/src/i18n/ro_RO.json +++ b/src/i18n/ro_RO.json @@ -1,14 +1,270 @@ { - "i18n.languageName": "Română", - "i18n.languageNameEnglish": "Romanian", - "i18n.category": "main", - "i18n.authors": "georgechrc, ", + "i18n.languageName": "Română", + "i18n.languageNameEnglish": "Romanian", + "i18n.category": "main", + "i18n.authors": "@SubZeroNexii georgechrc", + "app.name": "Cider", + "date.format": "${d} ${m}, ${y}", + "dialog.cancel": "Anulare", + "dialog.ok": "OK", + "notification.updatingLibrarySongs": "Actualizare bibliotecă muzică...", + "notification.updatingLibraryAlbums": "Actualizare bibliotecă albume...", + "notification.updatingLibraryArtists": "Actualizare bibliotecă artiști...", + "term.appleInc": "Apple Inc.", + "term.appleMusic": "Apple Music", + "term.applePodcasts": "Apple Podcasts", + "term.itunes": "iTunes", + "term.github": "GitHub", + "term.discord": "Discord", + "term.learnMore": "Află mai multe", + "term.accountSettings": "Setări cont", + "term.logout": "Deconectare", + "term.login": "Autentificare", + "term.about": "Despre", + "term.privateSession": "Sesiune Privată", + "term.queue": "în Coadă", + "term.search": "Căutare", + "term.library": "Bibliotecă", + "term.listenNow": "Ascultă acum", + "term.browse": "Navigați", + "term.radio": "Radio", + "term.recentlyAdded": "Recent Adăugate", + "term.songs": "Muzică", + "term.albums": "Albume", + "term.artists": "Artiști", + "term.podcasts": "Podcast-uri", + "term.playlists": "Playlist-uri", + "term.playlist": "Playlist", + "term.newPlaylist": "Playlist Nou", + "term.newPlaylistFolder": "Dosar Playlist Nou", + "term.createNewPlaylist": "Creează un Playlist Nou", + "term.createNewPlaylistFolder": "Creează un Dosar Playlist Nou", + "term.deletePlaylist": "Sunteți siguri că vreți să ștergeți acest Playlist?", + "term.play": "Redă", + "term.pause": "Pauză", + "term.previous": "Înapoi", + "term.next": "Înainte", + "term.shuffle": "Aleator", + "term.repeat": "Repetă", + "term.volume": "Volum", + "term.mute": "Fară sunet", + "term.unmute": "Activare sunet", + "term.share": "Partajează", + "term.settings": "Setări", + "term.seeAll": "Vedeți tot", + "term.sortBy": "Sortare după", + "term.sortBy.album": "Album", + "term.sortBy.artist": "Artist", + "term.sortBy.name": "Nume", + "term.sortBy.genre": "Gen", + "term.sortBy.releaseDate": "Data Lansării", + "term.sortBy.duration": "Durată", + "term.sortOrder": "A-Z", + "term.sortOrder.ascending": "Ascendent", + "term.sortOrder.descending": "Descendent", + "term.viewAs": "Vizualizare ca", + "term.viewAs.coverArt": "Artă Copertă", + "term.viewAs.list": "Listă", + "term.size": "Mărime", + "term.size.normal": "Normal", + "term.size.compact": "Compact", + "term.enable": "Activare", + "term.disable": "Dezactivare", + "term.enabled": "Activat", + "term.disabled": "Dezactivat", + "term.connect": "Conectare", + "term.connecting": "Se conectează", + "term.disconnect": "Deconectare", + "term.authed": "Autentificat", + "term.confirm": "Confirmați ?", + "term.more": "Mai mult", + "term.less": "Mai puțin", + "term.showMore": "Arată mai mult", + "term.showLess": "Arată mai puțin", + "term.topSongs" : "Top Muzică", + "term.latestReleases": "Ultimele Lansări", + "term.time.added": "Adăugate", + "term.time.released": "Lansate", + "term.time.updated": "Actualizate", + "term.time.hours": "ore", + "term.time.hour": "oră", + "term.time.minutes": "minute", + "term.time.minute": "minut", + "term.time.seconds": "secunde", + "term.time.second": "secundă", + "term.fullscreenView": "Vizualizare Ecran Complet", + "term.defaultView": "Vizualizare Standard", + "term.audioSettings": "Setări Audio", + "term.clearAll": "Ștergere toate", + "term.recentStations": "Stații Recente", + "term.language": "Limbă", + "term.funLanguages": "Amuzament", + "term.noLyrics": "Incărcare... / Versurile nu au fost găsite./ Instrumental.", + "term.copyright": "Copyright", + "term.rightsReserved": "Toate drepturile rezervate.", + "term.sponsor": "Sponsorizați acest proiect", + "term.ciderTeam": "Echipa Cider", + "term.developer": "Dezvoltatori", + "term.socialTeam": "Echipa de relații publice", + "term.socials": "Rețele Sociale", + "term.contributors": "Contribuitori", "term.equalizer": "Egalizator", - "settings.option.audio.enableAdvancedFunctionality.description": "Pornirea funcționalităților AudioContext va permite folosirea funcțiilor audio avansate precum Normalizare Volum , Egalizator și Vizualizator, pe unele sisteme mai slabe poate cauza probleme precum întreruperi în redare.", + "term.reset": "Reset", + "term.tracks": "melodii", + "term.videos": "Videoclipuri", + "term.menu": "Meniu", + "term.check": "Verificare", + "term.aboutArtist": "Despre {{artistName}}", + "term.updateCider": "Actualizare Cider", + "home.title": "Acasă", + "home.recentlyPlayed": "Asculate Recent", + "home.recentlyAdded": "Adăugate Recent", + "home.artistsFeed": "Fluxul Artiștilor tăi", + "home.artistsFeed.noArtist": "Urmărește prima oară cațiva artiști și ultimele lor lansări vor apărea aici", + "home.madeForYou": "Pentru tine", + "home.friendsListeningTo": "Prietenii tăi ascultă", + "home.followedArtists": "Artiști Urmăriți", + "error.appleMusicSubRequired": "Apple Music necesită un abonament.", + "error.connectionError": "A apărut o problemă în conectarea la Apple Music.", + "error.noResults": "Nici un rezultat.", + "error.noResults.description": "încearcă o nouă căutare.", + "podcast.followOnCider": "Urmărește pe Cider", + "podcast.followedOnCider": "Urmărit pe Cider", + "podcast.subscribeOnItunes": "Abonează-te pe iTunes", + "podcast.subscribedOnItunes": "Abonat pe iTunes", + "podcast.itunesStore": "Magazin iTunes", + "podcast.episodes": "Episoade", + "podcast.playEpisode": "Începe Episodul", + "podcast.website": "Pagină Podcast", + "action.addToLibrary": "Adaugă în Librărie", + "action.addToLibrary.success": "Adăugat în Librărie", + "action.addToLibrary.error": "Eroare la adăugarea în Librărie", + "action.removeFromLibrary": "Ștergere din Librărie", + "action.removeFromLibrary.success": "Șters din Librărie", + "action.addToQueue": "Adăugare la Coadă", + "action.addToQueue.success": "Adăugat la Coadă", + "action.addToQueue.error": "Eroare adăugare la Coadă", + "action.removeFromQueue": "Ștergere din Coadă", + "action.removeFromQueue.success": "Șters din Coadă", + "action.removeFromQueue.error": "Eroare Ștergere din Coadă", + "action.createPlaylist": "Creează un nou Playlist", + "action.addToPlaylist": "Adaugă la Playlist", + "action.removeFromPlaylist": "Ștergere din Playlist", + "action.addToFavorites": "Adaugă la Favorite", + "action.follow": "Urmărește", + "action.follow.success": "Urmărit", + "action.follow.error": "Eroare Urmărire", + "action.unfollow": "Nu mai urmăriți", + "action.unfollow.success": "Urmărire încetată", + "action.unfollow.error": "Eroare încetare Urmărire", + "action.playNext": "Ascultă în Continuare", + "action.playLater": "Ascultă Mai Târziu", + "action.startRadio": "Pornește Radio", + "action.goToArtist": "Du-te la Artist", + "action.goToAlbum": "Du-te la Album", + "action.moveToTop": "Mută în vârf", + "action.share": "Partajează", + "action.rename": "Redenumire", + "action.love": "Apreciază", + "action.unlove": "Elimină Apreciere", + "action.dislike": "Dislike", + "action.undoDislike": "Elimină dislike", + "action.showWebRemoteQR": "Telecomandă Web", + "action.playTracksNext": "Redă ${app.selectedMediaItems.length} de melodii în continuare", + "action.playTracksLater": "Redă ${app.selectedMediaItems.length} de melodii mai târziu", + "action.removeTracks": "Șterge ${self.selectedItems.length} de melodii din Coadă", + "action.import": "Import", + "action.export": "Export", + "action.showAlbum": "Arată Albumul Complet", + "action.tray.minimize": "Minimizează în Tray", + "action.tray.quit": "Ieșire", + "action.tray.show": "Arată", + "action.update": "Actualizează", + "settings.header.general": "General", + "settings.header.general.description": "Ajustează setările generale pentru Cider.", + "settings.option.general.language": "Limbă", + "settings.option.general.language.main": "Limbi", + "settings.option.general.language.fun": "Amuzant", + "settings.option.general.language.unsorted": "Nesortate", + "settings.header.audio": "Audio", + "settings.header.audio.description": "Ajustează setările audio pentru Cider.", + "settings.option.audio.quality": "Calitate Audio", + "settings.header.audio.quality.high": "Ridicată", + "settings.header.audio.quality.low": "Redusă", + "settings.header.audio.quality.auto": "Auto", + "settings.option.audio.seamlessTransition": "Tranziție Audio Neîntreruptă", + "settings.option.audio.enableAdvancedFunctionality": "Activează Funcționalitate Avansată", + "settings.option.audio.enableAdvancedFunctionality.description": "Pornirea funcționalității AudioContext va permite folosirea funcțiilor audio avansate precum Normalizare Volum , Egalizator și Vizualizator, dar pe unele sisteme poate cauza probleme precum întreruperi în redare.", "settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalizare Volum", "settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizează volumul maxim al melodiilor pentru a genera o experiență audio optimă.", - "settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Spațializare Sunet", - "settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Efect de spațializare tri-dimensională a sunetului(Atenție, nu e Dolby Atmos!)", - "spatial.notTurnedOn": "Spațializarea Sunetului e dezactivată, pentru a o utiliza pornește-o." -} \ No newline at end of file + "settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Spațializare Audio", + "settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spațializează sunetul și face sunetul 3-dimensional (notă: Nu este Dolby Atmos)", + "settings.header.visual": "Vizual", + "settings.header.visual.description": "Ajustează setările vizuale pentru Cider.", + "settings.option.visual.windowBackgroundStyle": "Stil Fundal Fereastră", + "settings.header.visual.windowBackgroundStyle.none": "Niciunul", + "settings.header.visual.windowBackgroundStyle.artwork": "Copertă Melodie", + "settings.header.visual.windowBackgroundStyle.image": "Imagine", + "settings.option.visual.animatedArtwork": "Copertă Animată", + "settings.header.visual.animatedArtwork.always": "Întotdeauna", + "settings.header.visual.animatedArtwork.limited": "Limitat la pagini și Albume speciale", + "settings.header.visual.animatedArtwork.disable": "Dezactivează peste tot", + "settings.option.visual.animatedArtworkQuality": "Calitate Copertă Animată", + "settings.header.visual.animatedArtworkQuality.low": "Redusă", + "settings.header.visual.animatedArtworkQuality.medium": "Medie", + "settings.header.visual.animatedArtworkQuality.high": "Ridicată", + "settings.header.visual.animatedArtworkQuality.veryHigh": "Foarte Ridicată", + "settings.header.visual.animatedArtworkQuality.extreme": "Extremă", + "settings.option.visual.animatedWindowBackground": "Fundal Fereastră Animat", + "settings.option.visual.hardwareAcceleration": "Accelerare Hardware", + "settings.option.visual.hardwareAcceleration.description": "Necesită Repornire", + "settings.header.visual.hardwareAcceleration.default": "Implitcit", + "settings.header.visual.hardwareAcceleration.webGPU": "WebGPU", + "settings.option.visual.showPersonalInfo": "Arată informații personale", + "settings.header.lyrics": "Versuri", + "settings.header.lyrics.description": "Ajustează setările versurilor pentru Cider.", + "settings.option.lyrics.enableMusixmatch": "Activează Versuri Musixmatch", + "settings.option.lyrics.enableMusixmatchKaraoke": "Activează Mod Karaoke (numai Musixmatch)", + "settings.option.lyrics.musixmatchPreferredLanguage": "Limbă Preferată Traducere Musixmatch", + "settings.option.lyrics.enableYoutubeLyrics": "Activează Versuri Youtube pentru Videoclipuri Muzică", + "settings.header.connectivity": "Conectivitate", + "settings.header.connectivity.description": "Ajustează setările de conectivitate pentru Cider.", + "settings.option.connectivity.discordRPC": "Discord Rich Presence", + "settings.option.connectivity.playbackNotifications": "Notificări Redare", + "settings.header.connectivity.discordRPC.cider": "Afișează ca 'Cider'", + "settings.header.connectivity.discordRPC.appleMusic": "Afișează ca 'Apple Music'", + "settings.option.connectivity.discordRPC.clearOnPause": "Curăță Discord Rich Presence la Pauză", + "settings.option.connectivity.lastfmScrobble": "Last.fm Scrobbling", + "settings.option.connectivity.lastfmScrobble.delay": "Last.fm Scrobble Delay (%)", + "settings.option.connectivity.lastfmScrobble.nowPlaying": "Activează Last.fm Now Playing", + "settings.option.connectivity.lastfmScrobble.removeFeatured": "Ștergeți artiștii invitat din titlul melodiei (Last.fm)", + "settings.option.connectivity.lastfmScrobble.filterLoop": "Filtrează melodii repetate (Last.fm)", + "settings.header.experimental": "Experimental", + "settings.header.experimental.description": "Ajustează setările experimentale pentru Cider.", + "settings.option.experimental.compactUI": "UI Compact", + "settings.option.experimental.close_button_hide": "Butonul de închidere ar trebui să ascundă aplicația", + "spatial.notTurnedOn": "Spațializarea Audio este dezactivată. Pentru a folosi opțiunea aceasta, activați-o mai întâi.", + "spatial.spatialProperties": "Proprietăți Spațiale", + "spatial.width": "Lățime", + "spatial.height": "Înălțime", + "spatial.depth": "Adâncime", + "spatial.gain": "Gain", + "spatial.roomMaterials": "Materiale Cameră", + "spatial.roomDimensions": "Dimensiuni Cameră", + "spatial.roomPositions": "Poziții Cameră", + "spatial.setDimensions": "Setează Dimensiunile", + "spatial.setPositions": "Setează Pozițiile", + "spatial.up": "Sus", + "spatial.front": "În Față", + "spatial.left": "Stânga", + "spatial.right": "Dreapta", + "spatial.back": "În Spate", + "spatial.down": "Jos", + "spatial.listener": "Ascultător", + "spatial.audioSource": "Sursă Audio", + "settings.header.unfinished": "Neterminat", + "remote.web.title": "Telecomandă Cider", + "remote.web.description": "Scanează codul QR pentru a împerechea telefonul tău cu această instanță Cider", + "about.thanks": "Multe Mulțumiri Echipei Colectiv Cider și a tuturor contribuitorilor." +} diff --git a/src/i18n/source/en_US.json b/src/i18n/source/en_US.json index 9acdad54..7e402929 100644 --- a/src/i18n/source/en_US.json +++ b/src/i18n/source/en_US.json @@ -2,7 +2,7 @@ "i18n.languageName": "English (US)", "i18n.languageNameEnglish": "English (US)", "i18n.category": "main", - "i18n.authors": "@maikirakiwi @kyw504100 nosh118", + "i18n.authors": "@maikirakiwi @kyw504100 @nosh118", "app.name": "Cider", "date.format": "${m} ${d}, ${y}", "dialog.cancel": "Cancel", @@ -148,6 +148,7 @@ "term.noVideos": "No videos found.", "term.plugin": "Plug-in", "term.pluginMenu": "Plug-in Menu", + "term.pluginMenu.none": "No interactive plugins", "term.replay": "Replay", "term.uniqueAlbums": "Unique Albums", "term.uniqueArtists": "Unique Artists", @@ -205,6 +206,7 @@ "action.startRadio": "Start Radio", "action.goToArtist": "Go to Artist", "action.goToAlbum": "Go to Album", + "action.showInPlaylist": "Show in Playlist", "action.moveToTop": "Move out of Folder", "action.share": "Share", "action.rename": "Rename", @@ -353,7 +355,7 @@ "settings.option.experimental.close_button_hide": "Close Button Should Hide the Application", "settings.option.experimental.inline_playlists": "Inline Playlists and Albums", "settings.option.advanced.playlistTrackMapping": "Playlist Track Mapping", - "settings.option.advanced.playlistTrackMapping.description": "Enables deep scanning of playlists to determine which tracks are in which playlists.", + "settings.option.advanced.playlistTrackMapping.description": "Enables deep scanning of playlists to determine which tracks are in which playlists. Playlist cache build times can increase significantly.", "spatial.notTurnedOn": "Audio Spatialization is disabled. To use, please enable it first.", "spatial.spatialProperties": "Spatial Properties", "spatial.width": "Width", diff --git a/src/i18n/zh_CN.json b/src/i18n/zh_CN.json index d08028b8..c1bf7bc3 100644 --- a/src/i18n/zh_CN.json +++ b/src/i18n/zh_CN.json @@ -146,7 +146,7 @@ "home.followedArtists": "关注的艺人", "error.appleMusicSubRequired": "需要订阅 Apple Music 以使用 Cider", "error.connectionError": "无法连接到 Apple Music。", - "error.noResults": "没有结果", + "error.noResults": "没有结果。", "error.noResults.description": "尝试更改搜索条件。", "podcast.followOnCider": "在 Cider 中关注", "podcast.followedOnCider": "已关注", @@ -192,7 +192,7 @@ "action.showWebRemoteQR": "显示远程控制的二维码", "action.playTracksNext": "插播 ${app.selectedMediaItems.length} 首歌曲", "action.playTracksLater": "最后播放 ${app.selectedMediaItems.length} 首歌曲", - "action.removeTracks": "从队列中移除 ${self.selectedItems.length} 首歌曲", + "action.removeTracks": "从待播清单中移除 ${self.selectedItems.length} 首歌曲", "action.import": "导入", "action.export": "导出", "action.showAlbum": "显示专辑", diff --git a/src/i18n/zh_HK.json b/src/i18n/zh_HK.json index d5986e96..8c063187 100644 --- a/src/i18n/zh_HK.json +++ b/src/i18n/zh_HK.json @@ -23,7 +23,6 @@ "term.about": "關於", "term.privateSession": "私人模式", "term.queue": "待播清單", - "term.history": "歷史紀錄", "term.search": "搜尋", "term.library": "資料庫", "term.listenNow": "立即聆聽", @@ -51,7 +50,6 @@ "term.mute": "靜音", "term.unmute": "取消靜音", "term.share": "分享", - "term.share.success": "已複製至剪貼簿", "term.settings": "設定", "term.seeAll": "顯示全部", "term.sortBy": "排序", @@ -191,7 +189,7 @@ "action.love": "喜愛", "action.unlove": "取消喜愛", "action.dislike": "減少此類建議", - "action.undoDislike": "還原減小此類建議", + "action.undoDislike": "還原減少此類建議", "action.showWebRemoteQR": "遙距控制", "action.playTracksNext": "插播 ${app.selectedMediaItems.length} 首歌曲", "action.playTracksLater": "稍後播放 ${app.selectedMediaItems.length} 首歌曲", diff --git a/src/i18n/zh_yue.json b/src/i18n/zh_yue.json index c83b4f56..0e3bbe24 100644 --- a/src/i18n/zh_yue.json +++ b/src/i18n/zh_yue.json @@ -1,290 +1,290 @@ -{ - "i18n.languageName": "廣東話(香港)", - "i18n.languageNameEnglish": "Cantonese (Hong Kong)", - "i18n.category": "main", - "i18n.authors": "@tszngaiyip @strikesnc", - "app.name": "Cider", - "date.format": "${y}年${m}月${d}日", - "dialog.cancel": "取消", - "dialog.ok": "確認", - "notification.updatingLibrarySongs": "更新緊資料庫嘅歌曲...", - "notification.updatingLibraryAlbums": "更新緊資料庫嘅專輯...", - "notification.updatingLibraryArtists": "更新緊資料庫嘅藝人...", - "term.appleInc": "Apple Inc.", - "term.appleMusic": "Apple Music", - "term.applePodcasts": "Apple Podcasts", - "term.itunes": "iTunes", - "term.github": "GitHub", - "term.discord": "Discord", - "term.learnMore": "想知更多", - "term.accountSettings": "帳號設定", - "term.logout": "登出", - "term.login": "登入", - "term.about": "關於", - "term.privateSession": "無痕模式", - "term.queue": "待播清單", - "term.history": "播放歷史", - "term.search": "搵野", - "term.library": "資料庫", - "term.listenNow": "即刻聽", - "term.browse": "瀏覽", - "term.radio": "電台", - "term.recentlyAdded": "最近加入", - "term.songs": "歌曲", - "term.albums": "專輯", - "term.artists": "藝人", - "term.podcasts": "Podcasts", - "term.playlists": "播放清單", - "term.playlist": "播放清單", - "term.newPlaylist": "新播放清單", - "term.newPlaylistFolder": "新資料夾", - "term.createNewPlaylist": "新增播放清單", - "term.createNewPlaylistFolder": "新增資料夾", - "term.deletePlaylist": "你係咪要刪除呢個播放清單?", - "term.play": "播放", - "term.pause": "暫停", - "term.previous": "前一首", - "term.next": "下一首", - "term.shuffle": "隨機播放", - "term.repeat": "重複播放", - "term.volume": "音量", - "term.mute": "靜音", - "term.unmute": "取消靜音", - "term.share": "分享", - "term.share.success": "複製咗喺剪貼簿", - "term.settings": "設定", - "term.seeAll": "睇哂全部", - "term.sortBy": "排序", - "term.sortBy.album": "專輯", - "term.sortBy.artist": "藝人", - "term.sortBy.name": "歌名", - "term.sortBy.genre": "音樂風格", - "term.sortBy.releaseDate": "幾時出", - "term.sortBy.duration": "幾長", - "term.sortOrder": "點排", - "term.sortOrder.ascending": "順序", - "term.sortOrder.descending": "倒序", - "term.viewAs": "想點樣顯示", - "term.viewAs.coverArt": "專輯封面", - "term.viewAs.list": "列表", - "term.size": "大細", - "term.size.normal": "正常", - "term.size.compact": "迫啲", - "term.enable": "開", - "term.disable": "熄", - "term.enabled": "開左", - "term.disabled": "熄左", - "term.connect": "連結", - "term.connecting": "連緊", - "term.disconnect": "取消連結", - "term.authed": "授權咗", - "term.confirm": "確認?", - "term.more": "多啲", - "term.less": "少啲", - "term.showMore": "顯示多啲", - "term.showLess": "顯示少啲", - "term.topSongs": "熱門歌曲", - "term.latestReleases": "最新出嘅", - "term.time.added": "加入於", - "term.time.released": "發行於", - "term.time.updated": "更新於", - "term.time.hours": "粒鐘", - "term.time.hour": "粒鐘", - "term.time.minutes": "分鐘", - "term.time.minute": "分鐘", - "term.time.seconds": "秒", - "term.time.second": "秒", - "term.fullscreenView": "用全螢幕睇", - "term.defaultView": "平時咁睇", - "term.audioSettings": "音訊設定", - "term.clearAll": "清除", - "term.recentStations": "呢排聽緊嘅", - "term.language": "語言", - "term.funLanguages": "惡搞", - "term.noLyrics": "搵緊... / 搵唔到歌詞。 / 純音樂黎。", - "term.copyright": "版權", - "term.rightsReserved": "保留一切權利", - "term.sponsor": "課金俾呢個Project", - "term.ciderTeam": "Cider 團隊", - "term.developer": "開發者", - "term.socialTeam": "PR", - "term.socials": "我哋嘅社群", - "term.contributors": "合作人", - "term.equalizer": "均衡器 (EQ)", - "term.reset": "重設", - "term.tracks": "首歌", - "term.videos": "影片", - "term.menu": "選項", - "term.check": "檢查", - "term.aboutArtist": "關於 {{artistName}}", - "term.topResult": "熱門搜尋結果", - "term.sharedPlaylists": "播放清單", - "term.people": "個人檔案", - "term.newpreset.name": "新EQ範本嘅名", - "term.addedpreset": "新增咗", - "term.deletepreset.warn": "你係咪要刪除呢個範本?", - "term.deletedpreset": "刪除咗", - "term.musicVideos": "MV", - "term.stations": "電台", - "term.radioShows": "電台單集", - "term.recordLabels": "唱片公司", - "term.videoExtras": "相關嘅片", - "home.title": "主頁", - "home.recentlyPlayed": "呢排播左", - "home.recentlyAdded": "呢排加嘅", - "home.artistsFeed": "藝人動態", - "home.artistsFeed.noArtist": "Follow 一啲藝人嚟獲得佢哋嘅最新歌曲資訊。 ", - "home.madeForYou": "為你而整", - "home.friendsListeningTo": "你啲Friend聽緊", - "home.followedArtists": "Follow左嘅藝人", - "error.appleMusicSubRequired": "需要訂閱Apple Music先可以用Cider。", - "error.connectionError": "連接唔到Apple Music。", - "error.noResults": "冇結果。", - "error.noResults.description": "重新搵過啦。", - "podcast.followOnCider": "喺Cider上Follow", - "podcast.followedOnCider": "喺Cider上Follow左", - "podcast.subscribeOnItunes": "喺iTunes上訂閱", - "podcast.subscribedOnItunes": "喺iTunes上訂閱左", - "podcast.itunesStore": "iTunes Store", - "podcast.episodes": "單集", - "podcast.playEpisode": "播呢集", - "podcast.website": "Podcast 網頁", - "action.addToLibrary": "加入資料庫", - "action.addToLibrary.success": "加入咗資料庫", - "action.addToLibrary.error": "加入唔到資料庫", - "action.removeFromLibrary": "喺資料庫到刪除", - "action.removeFromLibrary.success": "已經喺資料庫到刪除咗", - "action.addToQueue": "加入待播清單", - "action.addToQueue.success": "加入咗待播清單", - "action.addToQueue.error": "加入唔到待播清單", - "action.removeFromQueue": "喺待播清單刪除", - "action.removeFromQueue.success": "已經喺待播清單到刪除咗", - "action.removeFromQueue.error": "喺待播清單到刪除唔到", - "action.createPlaylist": "建立新嘅播放清單", - "action.addToPlaylist": "加入播放清單", - "action.removeFromPlaylist": "喺播放清單到刪除", - "action.addToFavorites": "加至收藏", - "action.follow": "Follow", - "action.follow.success": "Follow緊", - "action.follow.error": "Follow唔到", - "action.unfollow": "Unfollow", - "action.unfollow.success": "Unfollow咗", - "action.unfollow.error": "Unfollow唔到", - "action.playNext": "下首即刻播", - "action.playLater": "陣間先再播", - "action.startRadio": "建立電台", - "action.goToArtist": "前往藝人", - "action.goToAlbum": "前往專輯", - "action.moveToTop": "返最頂", - "action.share": "分享歌曲", - "action.rename": "重新命名", - "action.love": "鐘意", - "action.unlove": "唔鐘意", - "action.dislike": "唔想再睇到", - "action.undoDislike": "還原唔想再睇到", - "action.showWebRemoteQR": "遙距控制", - "action.playTracksNext": "插播 ${app.selectedMediaItems.length} 首歌曲", - "action.playTracksLater": "陣間播放 ${app.selectedMediaItems.length} 首歌曲", - "action.removeTracks": "喺待播清單到刪除 ${self.selectedItems.length} 首歌曲", - "action.import": "匯入", - "action.export": "匯出", - "action.showAlbum": "顯示完整嘅專輯", - "action.tray.minimize": "收埋喺系統托盤", - "action.tray.quit": "結束", - "action.tray.show": "顯示", - "action.update": "更新", - "action.copy": "複製", - "action.newpreset": "新增範本", - "action.deletepreset": "刪除範本", - "settings.header.general": "一般", - "settings.header.general.description": "調整Cider嘅一般設定", - "settings.option.general.language": "語言", - "settings.option.general.language.main": "語言", - "settings.option.general.language.fun": "惡搞語言", - "settings.option.general.language.unsorted": "未分類", - "settings.option.general.updateCider": "更新 Cider", - "settings.header.audio": "音訊", - "settings.header.audio.description": "調整Cider嘅音訊設定", - "settings.option.audio.quality": "音質", - "settings.header.audio.quality.high": "質素優先", - "settings.header.audio.quality.low": "流暢度優先", - "settings.header.audio.quality.auto": "自動", - "settings.option.audio.seamlessTransition": "無縫播放", - "settings.option.audio.enableAdvancedFunctionality": "進階功能", - "settings.option.audio.enableAdvancedFunctionality.description": "啟用AudioContext,解鎖類似音量平衡和均衡器嘅進階功能,但係會喺部分電腦造成音樂Lag機。", - "settings.option.audio.enableAdvancedFunctionality.audioNormalization": "音量平衡", - "settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "平衡輕柔同響亮嘅歌曲,令你有統一嘅聆聽體驗。", - "settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "空間音訊", - "settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "空間化音訊,製造一個更立體嘅聆聽體驗(注意:呢個功能唔係官方嘅杜比全景聲)", - "settings.header.visual": "外觀", - "settings.header.visual.description": "調整Cider嘅外觀", - "settings.option.visual.windowBackgroundStyle": "視窗背景樣式", - "settings.header.visual.windowBackgroundStyle.none": "空白", - "settings.header.visual.windowBackgroundStyle.artwork": "專輯封面", - "settings.header.visual.windowBackgroundStyle.image": "圖片", - "settings.option.visual.animatedArtwork": "動態專輯封面", - "settings.header.visual.animatedArtwork.always": "總是顯示", - "settings.header.visual.animatedArtwork.limited": "淨係喺藝人頁面同專輯封面顯示", - "settings.header.visual.animatedArtwork.disable": "熄左佢", - "settings.option.visual.animatedArtworkQuality": "動態專輯封面品質", - "settings.header.visual.animatedArtworkQuality.low": "低", - "settings.header.visual.animatedArtworkQuality.medium": "中", - "settings.header.visual.animatedArtworkQuality.high": "高", - "settings.header.visual.animatedArtworkQuality.veryHigh": "非常高", - "settings.header.visual.animatedArtworkQuality.extreme": "極高", - "settings.option.visual.animatedWindowBackground": "動態視窗背景", - "settings.option.visual.hardwareAcceleration": "硬體加速", - "settings.option.visual.hardwareAcceleration.description": "需要重開Cider先會生效", - "settings.header.visual.hardwareAcceleration.default": "預設", - "settings.header.visual.hardwareAcceleration.webGPU": "WebGPU", - "settings.header.visual.theme": "主題", - "settings.option.visual.theme.default": "預設", - "settings.option.visual.theme.dark": "黑色", - "settings.option.visual.showPersonalInfo": "顯示個人檔案", - "settings.header.lyrics": "歌詞", - "settings.header.lyrics.description": "調整Cider嘅歌詞設定", - "settings.option.lyrics.enableMusixmatch": "啟用 Musixmatch 歌詞", - "settings.option.lyrics.enableMusixmatchKaraoke": "開啟唱K模式(僅限Musixmatch)", - "settings.option.lyrics.musixmatchPreferredLanguage": "Musixmatch 歌詞語言偏好", - "settings.option.lyrics.enableYoutubeLyrics": "播放MV嘅時候用YouTube字幕", - "settings.header.connectivity": "外部連結", - "settings.header.connectivity.description": "調整Cider同外部嘅連結", - "settings.option.connectivity.discordRPC": "Discord 狀態", - "settings.option.connectivity.playbackNotifications": "喺播歌嘅時候通知你", - "settings.header.connectivity.discordRPC.cider": "顯示為'Cider'", - "settings.header.connectivity.discordRPC.appleMusic": "顯示為'Apple Music'", - "settings.option.connectivity.discordRPC.clearOnPause": "暫停時清除 Discord 狀態", - "settings.option.connectivity.lastfmScrobble": "Last.FM Scrobbling 記錄", - "settings.option.connectivity.lastfmScrobble.delay": "Last.FM Scrobble 延遲 (%)", - "settings.option.connectivity.lastfmScrobble.nowPlaying": "啟用 Last.FM 正在播放", - "settings.option.connectivity.lastfmScrobble.removeFeatured": "從歌名中移除藝人推薦 (Last.FM)", - "settings.option.connectivity.lastfmScrobble.filterLoop": "Filter looped track (Last.FM)", - "settings.header.experimental": "實驗性功能", - "settings.header.experimental.description": "調整Cider嘅實驗性功能", - "settings.option.experimental.compactUI": "逼啲既 UI", - "settings.option.experimental.close_button_hide": "㩒交叉制嚟隱藏 Cider", - "settings.option.experimental.copy_log": "將log複製喺剪貼簿", - "spatial.notTurnedOn": "唔該喺設定入面啟用左空間音訊先。", - "spatial.spatialProperties": "空間音訊屬性", - "spatial.width": "幾闊", - "spatial.height": "幾高", - "spatial.depth": "幾深", - "spatial.gain": "增益", - "spatial.roomMaterials": "空間材質", - "spatial.roomDimensions": "空間大小", - "spatial.roomPositions": "空間位置", - "spatial.setDimensions": "大小設定", - "spatial.setPositions": "位置設定", - "spatial.up": "上面", - "spatial.front": "前面", - "spatial.left": "左邊", - "spatial.right": "右邊", - "spatial.back": "後面", - "spatial.down": "下面", - "spatial.listener": "觀眾", - "spatial.audioSource": "音源", - "settings.header.unfinished": "未搞掂", - "remote.web.title": "遙距控制 Cider", - "remote.web.description": "Scan 呢個 QR Code 去控制 Cider", - "about.thanks": "多謝 Cider Collective 同埋所有合作人作出嘅貢獻。" -} \ No newline at end of file +{ + "i18n.languageName": "廣東話(香港)", + "i18n.languageNameEnglish": "Cantonese (Hong Kong)", + "i18n.category": "main", + "i18n.authors": "@tszngaiyip @strikesnc", + "app.name": "Cider", + "date.format": "${y}年${m}月${d}日", + "dialog.cancel": "取消", + "dialog.ok": "確認", + "notification.updatingLibrarySongs": "更新緊資料庫嘅歌曲...", + "notification.updatingLibraryAlbums": "更新緊資料庫嘅專輯...", + "notification.updatingLibraryArtists": "更新緊資料庫嘅藝人...", + "term.appleInc": "Apple Inc.", + "term.appleMusic": "Apple Music", + "term.applePodcasts": "Apple Podcasts", + "term.itunes": "iTunes", + "term.github": "GitHub", + "term.discord": "Discord", + "term.learnMore": "想知更多", + "term.accountSettings": "帳號設定", + "term.logout": "登出", + "term.login": "登入", + "term.about": "關於", + "term.privateSession": "無痕模式", + "term.queue": "待播清單", + "term.history": "播放歷史", + "term.search": "搵野", + "term.library": "資料庫", + "term.listenNow": "即刻聽", + "term.browse": "瀏覽", + "term.radio": "電台", + "term.recentlyAdded": "最近加入", + "term.songs": "歌曲", + "term.albums": "專輯", + "term.artists": "藝人", + "term.podcasts": "Podcasts", + "term.playlists": "播放清單", + "term.playlist": "播放清單", + "term.newPlaylist": "新播放清單", + "term.newPlaylistFolder": "新資料夾", + "term.createNewPlaylist": "新增播放清單", + "term.createNewPlaylistFolder": "新增資料夾", + "term.deletePlaylist": "你係咪要刪除呢個播放清單?", + "term.play": "播放", + "term.pause": "暫停", + "term.previous": "前一首", + "term.next": "下一首", + "term.shuffle": "隨機播放", + "term.repeat": "重複播放", + "term.volume": "音量", + "term.mute": "靜音", + "term.unmute": "取消靜音", + "term.share": "分享", + "term.share.success": "複製咗喺剪貼簿", + "term.settings": "設定", + "term.seeAll": "睇哂全部", + "term.sortBy": "排序", + "term.sortBy.album": "專輯", + "term.sortBy.artist": "藝人", + "term.sortBy.name": "歌名", + "term.sortBy.genre": "音樂風格", + "term.sortBy.releaseDate": "幾時出", + "term.sortBy.duration": "幾長", + "term.sortOrder": "點排", + "term.sortOrder.ascending": "順序", + "term.sortOrder.descending": "倒序", + "term.viewAs": "想點樣顯示", + "term.viewAs.coverArt": "專輯封面", + "term.viewAs.list": "列表", + "term.size": "大細", + "term.size.normal": "正常", + "term.size.compact": "迫啲", + "term.enable": "開", + "term.disable": "熄", + "term.enabled": "開左", + "term.disabled": "熄左", + "term.connect": "連結", + "term.connecting": "連緊", + "term.disconnect": "取消連結", + "term.authed": "授權咗", + "term.confirm": "確認?", + "term.more": "多啲", + "term.less": "少啲", + "term.showMore": "顯示多啲", + "term.showLess": "顯示少啲", + "term.topSongs": "熱門歌曲", + "term.latestReleases": "最新出嘅", + "term.time.added": "加入於", + "term.time.released": "發行於", + "term.time.updated": "更新於", + "term.time.hours": "粒鐘", + "term.time.hour": "粒鐘", + "term.time.minutes": "分鐘", + "term.time.minute": "分鐘", + "term.time.seconds": "秒", + "term.time.second": "秒", + "term.fullscreenView": "用全螢幕睇", + "term.defaultView": "平時咁睇", + "term.audioSettings": "音訊設定", + "term.clearAll": "清除", + "term.recentStations": "呢排聽緊嘅", + "term.language": "語言", + "term.funLanguages": "惡搞", + "term.noLyrics": "搵緊... / 搵唔到歌詞。 / 純音樂黎。", + "term.copyright": "版權", + "term.rightsReserved": "保留一切權利", + "term.sponsor": "課金俾呢個Project", + "term.ciderTeam": "Cider 團隊", + "term.developer": "開發者", + "term.socialTeam": "PR", + "term.socials": "我哋嘅社群", + "term.contributors": "合作人", + "term.equalizer": "均衡器 (EQ)", + "term.reset": "重設", + "term.tracks": "首歌", + "term.videos": "影片", + "term.menu": "選項", + "term.check": "檢查", + "term.aboutArtist": "關於 {{artistName}}", + "term.topResult": "熱門搜尋結果", + "term.sharedPlaylists": "播放清單", + "term.people": "個人檔案", + "term.newpreset.name": "新EQ範本嘅名", + "term.addedpreset": "新增咗", + "term.deletepreset.warn": "你係咪要刪除呢個範本?", + "term.deletedpreset": "刪除咗", + "term.musicVideos": "MV", + "term.stations": "電台", + "term.radioShows": "電台單集", + "term.recordLabels": "唱片公司", + "term.videoExtras": "相關嘅片", + "home.title": "主頁", + "home.recentlyPlayed": "呢排播左", + "home.recentlyAdded": "呢排加嘅", + "home.artistsFeed": "藝人動態", + "home.artistsFeed.noArtist": "Follow 一啲藝人嚟獲得佢哋嘅最新歌曲資訊。 ", + "home.madeForYou": "為你而整", + "home.friendsListeningTo": "你啲Friend聽緊", + "home.followedArtists": "Follow左嘅藝人", + "error.appleMusicSubRequired": "需要訂閱Apple Music先可以用Cider。", + "error.connectionError": "連接唔到Apple Music。", + "error.noResults": "冇結果。", + "error.noResults.description": "重新搵過啦。", + "podcast.followOnCider": "喺Cider上Follow", + "podcast.followedOnCider": "喺Cider上Follow左", + "podcast.subscribeOnItunes": "喺iTunes上訂閱", + "podcast.subscribedOnItunes": "喺iTunes上訂閱左", + "podcast.itunesStore": "iTunes Store", + "podcast.episodes": "單集", + "podcast.playEpisode": "播呢集", + "podcast.website": "Podcast 網頁", + "action.addToLibrary": "加入資料庫", + "action.addToLibrary.success": "加入咗資料庫", + "action.addToLibrary.error": "加入唔到資料庫", + "action.removeFromLibrary": "喺資料庫到刪除", + "action.removeFromLibrary.success": "已經喺資料庫到刪除咗", + "action.addToQueue": "加入待播清單", + "action.addToQueue.success": "加入咗待播清單", + "action.addToQueue.error": "加入唔到待播清單", + "action.removeFromQueue": "喺待播清單刪除", + "action.removeFromQueue.success": "已經喺待播清單到刪除咗", + "action.removeFromQueue.error": "喺待播清單到刪除唔到", + "action.createPlaylist": "建立新嘅播放清單", + "action.addToPlaylist": "加入播放清單", + "action.removeFromPlaylist": "喺播放清單到刪除", + "action.addToFavorites": "加至收藏", + "action.follow": "Follow", + "action.follow.success": "Follow緊", + "action.follow.error": "Follow唔到", + "action.unfollow": "Unfollow", + "action.unfollow.success": "Unfollow咗", + "action.unfollow.error": "Unfollow唔到", + "action.playNext": "下首即刻播", + "action.playLater": "陣間先再播", + "action.startRadio": "建立電台", + "action.goToArtist": "前往藝人", + "action.goToAlbum": "前往專輯", + "action.moveToTop": "返最頂", + "action.share": "分享歌曲", + "action.rename": "重新命名", + "action.love": "鐘意", + "action.unlove": "唔鐘意", + "action.dislike": "唔想再睇到", + "action.undoDislike": "還原唔想再睇到", + "action.showWebRemoteQR": "遙距控制", + "action.playTracksNext": "插播 ${app.selectedMediaItems.length} 首歌曲", + "action.playTracksLater": "陣間播放 ${app.selectedMediaItems.length} 首歌曲", + "action.removeTracks": "喺待播清單到刪除 ${self.selectedItems.length} 首歌曲", + "action.import": "匯入", + "action.export": "匯出", + "action.showAlbum": "顯示完整嘅專輯", + "action.tray.minimize": "收埋喺系統托盤", + "action.tray.quit": "結束", + "action.tray.show": "顯示", + "action.update": "更新", + "action.copy": "複製", + "action.newpreset": "新增範本", + "action.deletepreset": "刪除範本", + "settings.header.general": "一般", + "settings.header.general.description": "調整Cider嘅一般設定", + "settings.option.general.language": "語言", + "settings.option.general.language.main": "語言", + "settings.option.general.language.fun": "惡搞語言", + "settings.option.general.language.unsorted": "未分類", + "settings.option.general.updateCider": "更新 Cider", + "settings.header.audio": "音訊", + "settings.header.audio.description": "調整Cider嘅音訊設定", + "settings.option.audio.quality": "音質", + "settings.header.audio.quality.high": "質素優先", + "settings.header.audio.quality.low": "流暢度優先", + "settings.header.audio.quality.auto": "自動", + "settings.option.audio.seamlessTransition": "無縫播放", + "settings.option.audio.enableAdvancedFunctionality": "進階功能", + "settings.option.audio.enableAdvancedFunctionality.description": "啟用AudioContext,解鎖類似音量平衡和均衡器嘅進階功能,但係會喺部分電腦造成音樂Lag機。", + "settings.option.audio.enableAdvancedFunctionality.audioNormalization": "音量平衡", + "settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "平衡輕柔同響亮嘅歌曲,令你有統一嘅聆聽體驗。", + "settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "空間音訊", + "settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "空間化音訊,製造一個更立體嘅聆聽體驗(注意:呢個功能唔係官方嘅杜比全景聲)", + "settings.header.visual": "外觀", + "settings.header.visual.description": "調整Cider嘅外觀", + "settings.option.visual.windowBackgroundStyle": "視窗背景樣式", + "settings.header.visual.windowBackgroundStyle.none": "空白", + "settings.header.visual.windowBackgroundStyle.artwork": "專輯封面", + "settings.header.visual.windowBackgroundStyle.image": "圖片", + "settings.option.visual.animatedArtwork": "動態專輯封面", + "settings.header.visual.animatedArtwork.always": "總是顯示", + "settings.header.visual.animatedArtwork.limited": "淨係喺藝人頁面同專輯封面顯示", + "settings.header.visual.animatedArtwork.disable": "熄左佢", + "settings.option.visual.animatedArtworkQuality": "動態專輯封面品質", + "settings.header.visual.animatedArtworkQuality.low": "低", + "settings.header.visual.animatedArtworkQuality.medium": "中", + "settings.header.visual.animatedArtworkQuality.high": "高", + "settings.header.visual.animatedArtworkQuality.veryHigh": "非常高", + "settings.header.visual.animatedArtworkQuality.extreme": "極高", + "settings.option.visual.animatedWindowBackground": "動態視窗背景", + "settings.option.visual.hardwareAcceleration": "硬體加速", + "settings.option.visual.hardwareAcceleration.description": "需要重開Cider先會生效", + "settings.header.visual.hardwareAcceleration.default": "預設", + "settings.header.visual.hardwareAcceleration.webGPU": "WebGPU", + "settings.header.visual.theme": "主題", + "settings.option.visual.theme.default": "預設", + "settings.option.visual.theme.dark": "黑色", + "settings.option.visual.showPersonalInfo": "顯示個人檔案", + "settings.header.lyrics": "歌詞", + "settings.header.lyrics.description": "調整Cider嘅歌詞設定", + "settings.option.lyrics.enableMusixmatch": "啟用 Musixmatch 歌詞", + "settings.option.lyrics.enableMusixmatchKaraoke": "開啟唱K模式(僅限Musixmatch)", + "settings.option.lyrics.musixmatchPreferredLanguage": "Musixmatch 歌詞語言偏好", + "settings.option.lyrics.enableYoutubeLyrics": "播放MV嘅時候用YouTube字幕", + "settings.header.connectivity": "外部連結", + "settings.header.connectivity.description": "調整Cider同外部嘅連結", + "settings.option.connectivity.discordRPC": "Discord 狀態", + "settings.option.connectivity.playbackNotifications": "喺播歌嘅時候通知你", + "settings.header.connectivity.discordRPC.cider": "顯示為'Cider'", + "settings.header.connectivity.discordRPC.appleMusic": "顯示為'Apple Music'", + "settings.option.connectivity.discordRPC.clearOnPause": "暫停時清除 Discord 狀態", + "settings.option.connectivity.lastfmScrobble": "Last.FM Scrobbling 記錄", + "settings.option.connectivity.lastfmScrobble.delay": "Last.FM Scrobble 延遲 (%)", + "settings.option.connectivity.lastfmScrobble.nowPlaying": "啟用 Last.FM 正在播放", + "settings.option.connectivity.lastfmScrobble.removeFeatured": "從歌名中移除藝人推薦 (Last.FM)", + "settings.option.connectivity.lastfmScrobble.filterLoop": "Filter looped track (Last.FM)", + "settings.header.experimental": "實驗性功能", + "settings.header.experimental.description": "調整Cider嘅實驗性功能", + "settings.option.experimental.compactUI": "逼啲既 UI", + "settings.option.experimental.close_button_hide": "㩒交叉制嚟隱藏 Cider", + "settings.option.experimental.copy_log": "將log複製喺剪貼簿", + "spatial.notTurnedOn": "唔該喺設定入面啟用左空間音訊先。", + "spatial.spatialProperties": "空間音訊屬性", + "spatial.width": "幾闊", + "spatial.height": "幾高", + "spatial.depth": "幾深", + "spatial.gain": "增益", + "spatial.roomMaterials": "空間材質", + "spatial.roomDimensions": "空間大小", + "spatial.roomPositions": "空間位置", + "spatial.setDimensions": "大小設定", + "spatial.setPositions": "位置設定", + "spatial.up": "上面", + "spatial.front": "前面", + "spatial.left": "左邊", + "spatial.right": "右邊", + "spatial.back": "後面", + "spatial.down": "下面", + "spatial.listener": "觀眾", + "spatial.audioSource": "音源", + "settings.header.unfinished": "未搞掂", + "remote.web.title": "遙距控制 Cider", + "remote.web.description": "Scan 呢個 QR Code 去控制 Cider", + "about.thanks": "多謝 Cider Collective 同埋所有合作人作出嘅貢獻。" +} diff --git a/src/main/base/app.ts b/src/main/base/app.ts index 1856fe10..4ce18bd9 100644 --- a/src/main/base/app.ts +++ b/src/main/base/app.ts @@ -4,6 +4,12 @@ import * as path from 'path'; import * as log from 'electron-log'; import {utils} from './utils'; +/** + * @file Creates App instance + * @author CiderCollective + */ + +/** @namespace */ export class AppEvents { private protocols: string[] = [ "ame", @@ -17,6 +23,7 @@ export class AppEvents { private tray: any = undefined; private i18n: any = undefined; + /** @constructor */ constructor() { this.start(); } @@ -90,6 +97,7 @@ export class AppEvents { /*********************************************************************************************************************** * Protocols **********************************************************************************************************************/ + /** */ if (process.defaultApp) { if (process.argv.length >= 2) { this.protocols.forEach((protocol: string) => { diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts index a1cb7e23..c415e6bf 100644 --- a/src/main/base/browserwindow.ts +++ b/src/main/base/browserwindow.ts @@ -16,7 +16,12 @@ import {utils} from './utils'; const fileWatcher = require('chokidar'); const AdmZip = require("adm-zip"); +/** + * @file Creates the BrowserWindow + * @author CiderCollective + */ +/** @namespace */ export class BrowserWindow { public static win: any | undefined = null; private devMode: boolean = !app.isPackaged; @@ -273,6 +278,9 @@ export class BrowserWindow { /** * Creates the browser window + * @generator + * @function createWindow + * @yields {object} Electron browser window */ async createWindow(): Promise { this.clientPort = await getPort({port: 9000}); @@ -283,6 +291,7 @@ export class BrowserWindow { const windowState = windowStateKeeper({ defaultWidth: 1024, defaultHeight: 600, + fullScreen: false }); this.options.width = windowState.width; this.options.height = windowState.height; @@ -292,8 +301,9 @@ export class BrowserWindow { break; case "win32": - this.options.backgroundColor = "#1E1E1E"; - this.options.transparent = false; + if (!(utils.getStoreValue('visual.transparent') ?? false)){ + this.options.backgroundColor = "#1E1E1E";} else { + this.options.transparent = true;} break; case "linux": this.options.backgroundColor = "#1E1E1E"; @@ -312,6 +322,12 @@ export class BrowserWindow { this.startWebServer(); BrowserWindow.win = new bw(this.options); + // cant be built in CI + // if (process.platform === "win32" && (utils.getStoreValue('visual.transparent') ?? false)) { + // var electronVibrancy = require('electron-vibrancy-updated'); + // electronVibrancy.SetVibrancy(BrowserWindow.win, 0); + + // } const ws = new wsapi(BrowserWindow.win) ws.InitWebSockets() // and load the renderer. @@ -427,9 +443,8 @@ export class BrowserWindow { } }); - app.get("/themes/:theme/*", (req, res) => { + app.get("/themes/:theme/*", (req: {params: {theme: string, 0: string}}, res) => { const theme = req.params.theme; - // @ts-ignore const file = req.params[0]; const themePath = join(utils.getPath('srcPath'), "./renderer/themes/", theme); const userThemePath = join(utils.getPath('themes'), theme); @@ -442,9 +457,8 @@ export class BrowserWindow { } }); - app.get("/plugins/:plugin/*", (req, res) => { + app.get("/plugins/:plugin/*", (req: {params: {plugin: string, 0: string}}, res) => { const plugin = req.params.plugin; - // @ts-ignore const file = req.params[0]; const pluginPath = join(utils.getPath('plugins'), plugin); console.log(pluginPath) @@ -790,9 +804,15 @@ export class BrowserWindow { ipcMain.on('setFullScreen', (_event, flag) => { BrowserWindow.win.setFullScreen(flag) }) + //Fullscreen ipcMain.on('detachDT', (_event, _) => { BrowserWindow.win.webContents.openDevTools({mode: 'detach'}); + }) + + ipcMain.on('relaunchApp',(_event, _) => { + app.relaunch() + app.exit() }) @@ -927,11 +947,11 @@ export class BrowserWindow { ipcMain.on('get-remote-pair-url', (_event, _) => { let url = `http://${BrowserWindow.getIP()}:${this.remotePort}`; - if (app.isPackaged) { + //if (app.isPackaged) { BrowserWindow.win.webContents.send('send-remote-pair-url', (`https://cider.sh/pair-remote?url=${Buffer.from(encodeURI(url)).toString('base64')}`).toString()); - } else { - BrowserWindow.win.webContents.send('send-remote-pair-url', (`http://127.0.0.1:5500/pair-remote.html?url=${Buffer.from(encodeURI(url)).toString('base64')}`).toString()); - } + //} else { + // BrowserWindow.win.webContents.send('send-remote-pair-url', (`http://127.0.0.1:5500/pair-remote.html?url=${Buffer.from(encodeURI(url)).toString('base64')}`).toString()); + //} }); if (process.platform === "darwin") { @@ -958,6 +978,7 @@ export class BrowserWindow { await utils.checkForUpdate(); }); + ipcMain.on('disable-update', (event) => { // Check if using app store builds so people don't get pissy wen button go bonk if (app.isPackaged && !process.mas || !process.windowsStore) { @@ -967,6 +988,8 @@ export class BrowserWindow { } }) + + ipcMain.on('share-menu', async (_event, url) => { if (process.platform != 'darwin') return; //https://www.electronjs.org/docs/latest/api/share-menu @@ -975,7 +998,6 @@ export class BrowserWindow { title: 'Share', urls: [url] }; - // @ts-ignore const shareMenu = new ShareMenu(options); shareMenu.popup(); }) diff --git a/src/main/base/plugins.ts b/src/main/base/plugins.ts index a4affdde..ddaebf7c 100644 --- a/src/main/base/plugins.ts +++ b/src/main/base/plugins.ts @@ -3,6 +3,18 @@ import * as path from 'path'; import * as electron from 'electron' import {utils} from './utils'; +// +// Hello, this our loader for the various plugins that the Cider Development Team built for our +// numerous plugins internally and ones made by the community +// +// To learn how to make your own, visit https://github.com/ciderapp/Cider/wiki/Plugins +// +/** + * @class + * Plugin Loading + * @author booploops#7139 + * @see {@link https://github.com/ciderapp/Cider/wiki/Plugins|Documentation} + */ export class Plugins { private basePluginsPath = path.join(__dirname, '../plugins'); private userPluginsPath = path.join(electron.app.getPath('userData'), 'Plugins'); diff --git a/src/main/base/store.ts b/src/main/base/store.ts index f7bb8e36..f1ea8dc2 100644 --- a/src/main/base/store.ts +++ b/src/main/base/store.ts @@ -15,7 +15,15 @@ export class Store { "update_branch": "main", "resumeOnStartupBehavior": "local", "privateEnabled": false, - "themeUpdateNotification": true + "themeUpdateNotification": true, + "sidebarItems": { + "recentlyAdded": true, + "songs": true, + "albums": true, + "artists": true, + "videos": true, + "podcasts": true + } }, "home": { "followedArtists": [], @@ -97,6 +105,7 @@ export class Store { "bg_artwork_rotation": false, "hw_acceleration": "default", // default, webgpu, disabled "showuserinfo": true, + "transparent": false, "miniplayer_top_toggle": true, "directives": { "windowLayout": "default" diff --git a/src/main/base/utils.ts b/src/main/base/utils.ts index 98dc3a65..81bf8637 100644 --- a/src/main/base/utils.ts +++ b/src/main/base/utils.ts @@ -2,7 +2,7 @@ import * as fs from "fs"; import * as path from "path"; import {Store} from "./store"; import {BrowserWindow as bw} from "./browserwindow"; -import {app} from "electron"; +import {app, dialog, ipcMain, Notification, shell } from "electron"; import fetch from "electron-fetch"; import {AppImageUpdater, NsisUpdater} from "electron-updater"; import * as log from "electron-log"; @@ -115,7 +115,13 @@ export class utils { * Checks the application for updates */ static async checkForUpdate(): Promise { - + if (!app.isPackaged) { + new Notification({ title: "Application Update", body: "Can't update as app is in DEV mode. Please build or grab a copy by clicking me"}) + .on('click', () => {shell.openExternal('https://download.cider.sh/?utm_source=app&utm_medium=dev-mode-warning')}) + .show() + bw.win.webContents.send('update-response', "update-error") + return; + } // Get the artifacts const response = await fetch(`https://circleci.com/api/v1.1/project/gh/ciderapp/Cider/latest/artifacts?branch=${utils.getStoreValue('general.update_branch')}&filter=successful`) if (response.status != 200) { @@ -141,6 +147,10 @@ export class utils { autoUpdater = await new AppImageUpdater(options) //Linux and Mac (AppImages work on macOS btw) } + autoUpdater.on('checking-for-update', () => { + new Notification({ title: "Cider Update", body: "Cider is currently checking for updates."}).show() + }) + autoUpdater.on('error', (error: any) => { console.error(`[AutoUpdater] Error: ${error}`) bw.win.webContents.send('update-response', "update-error") @@ -150,10 +160,27 @@ export class utils { console.log('[AutoUpdater] Update not available.') bw.win.webContents.send('update-response', "update-not-available"); }) + autoUpdater.on('download-progress', (event: any, progress: any) => { + bw.win.setProgressBar(progress.percent / 100) + }) - autoUpdater.on('update-downloaded', () => { + autoUpdater.on('update-downloaded', (info: any) => { console.log('[AutoUpdater] Update downloaded.') bw.win.webContents.send('update-response', "update-downloaded"); + const dialogOpts = { + type: 'info', + buttons: ['Restart', 'Later'], + title: 'Application Update', + message: info, + detail: 'A new version has been downloaded. Restart the application to apply the updates.' + } + + dialog.showMessageBox(dialogOpts).then((returnValue) => { + if (returnValue.response === 0) autoUpdater.quitAndInstall() + }) + new Notification({ title: "Application Update", body: info}).on('click', () => { + bw.win.show() + }).show() }) log.transports.file.level = "debug" diff --git a/src/main/plugins/chromecast.ts b/src/main/plugins/chromecast.ts index 34e48c48..4bdb6113 100644 --- a/src/main/plugins/chromecast.ts +++ b/src/main/plugins/chromecast.ts @@ -41,7 +41,7 @@ export default class ChromecastPlugin { browser.on('ready', browser.discover); browser.on('update', (service :any) => { - if (service.addresses && service.fullname) { + if (service.addresses && service.fullname && service.fullname.includes('_googlecast._tcp')) { this.ondeviceup(service.addresses[0], service.fullname.substring(0, service.fullname.indexOf("._googlecast")) + " " + (service.type[0].description ?? ""), '', 'googlecast'); } }); diff --git a/src/renderer/audio/audio.js b/src/renderer/audio/audio.js index bb604e45..8f24d107 100644 --- a/src/renderer/audio/audio.js +++ b/src/renderer/audio/audio.js @@ -1,4 +1,4 @@ -var CiderAudio = { +const CiderAudio = { context : null, source : null, audioNodes : { @@ -304,7 +304,7 @@ var CiderAudio = { CiderAudio.audioNodes.analogWarmth = [] - for (i = 0; i < WARMTH_FREQUENCIES.length; i++) { + for (let i = 0; i < WARMTH_FREQUENCIES.length; i++) { CiderAudio.audioNodes.analogWarmth[i] = CiderAudio.context.createBiquadFilter(); CiderAudio.audioNodes.analogWarmth[i].type = 'peaking'; // 'peaking'; CiderAudio.audioNodes.analogWarmth[i].frequency.value = WARMTH_FREQUENCIES[i]; @@ -312,7 +312,7 @@ var CiderAudio = { CiderAudio.audioNodes.analogWarmth[i].gain.value = WARMTH_GAIN[i] * app.cfg.audio.maikiwiAudio.analogWarmth_value; } - for (i = 1; i < WARMTH_FREQUENCIES.length; i ++) { + for (let i = 1; i < WARMTH_FREQUENCIES.length; i ++) { CiderAudio.audioNodes.analogWarmth[i-1].connect(CiderAudio.audioNodes.analogWarmth[i]); } @@ -345,7 +345,7 @@ var CiderAudio = { CiderAudio.audioNodes.llpw = [] if (app.cfg.audio.maikiwiAudio.ciderPPE_value === 0.55) { - for (i = 0; i < c_LLPW_FREQUENCIES.length; i++) { + for (let i = 0; i < c_LLPW_FREQUENCIES.length; i++) { CiderAudio.audioNodes.llpw[i] = CiderAudio.context.createBiquadFilter(); CiderAudio.audioNodes.llpw[i].type = 'peaking'; // 'peaking'; CiderAudio.audioNodes.llpw[i].frequency.value = c_LLPW_FREQUENCIES[i]; @@ -354,7 +354,7 @@ var CiderAudio = { } - for (i = 1; i < c_LLPW_FREQUENCIES.length; i ++) { + for (let i = 1; i < c_LLPW_FREQUENCIES.length; i ++) { CiderAudio.audioNodes.llpw[i-1].connect(CiderAudio.audioNodes.llpw[i]); } @@ -373,7 +373,7 @@ var CiderAudio = { } else if (app.cfg.audio.maikiwiAudio.ciderPPE_value === 0.5) { - for (i = 0; i < LLPW_FREQUENCIES.length; i++) { + for (let i = 0; i < LLPW_FREQUENCIES.length; i++) { CiderAudio.audioNodes.llpw[i] = CiderAudio.context.createBiquadFilter(); CiderAudio.audioNodes.llpw[i].type = 'peaking'; // 'peaking'; CiderAudio.audioNodes.llpw[i].frequency.value = LLPW_FREQUENCIES[i]; @@ -382,7 +382,7 @@ var CiderAudio = { } - for (i = 1; i < LLPW_FREQUENCIES.length; i ++) { + for (let i = 1; i < LLPW_FREQUENCIES.length; i ++) { CiderAudio.audioNodes.llpw[i-1].connect(CiderAudio.audioNodes.llpw[i]); } @@ -408,7 +408,7 @@ var CiderAudio = { let VIBRANTBASSQ = app.cfg.audio.maikiwiAudio.vibrantBass.Q; CiderAudio.audioNodes.vibrantbassNode = [] - for (i = 0; i < VIBRANTBASSBANDS.length; i++) { + for (let i = 0; i < VIBRANTBASSBANDS.length; i++) { CiderAudio.audioNodes.vibrantbassNode[i] = CiderAudio.context.createBiquadFilter(); CiderAudio.audioNodes.vibrantbassNode[i].type = 'peaking'; // 'peaking'; CiderAudio.audioNodes.vibrantbassNode[i].frequency.value = VIBRANTBASSBANDS[i]; @@ -416,7 +416,7 @@ var CiderAudio = { CiderAudio.audioNodes.vibrantbassNode[i].gain.value = VIBRANTBASSGAIN[i] * app.cfg.audio.maikiwiAudio.vibrantBass.multiplier; } - for (i = 1; i < VIBRANTBASSBANDS.length; i ++) { + for (let i = 1; i < VIBRANTBASSBANDS.length; i ++) { CiderAudio.audioNodes.vibrantbassNode[i-1].connect(CiderAudio.audioNodes.vibrantbassNode[i]); } @@ -683,7 +683,7 @@ var CiderAudio = { CiderAudio.audioNodes.audioBands = []; - for (i = 0; i < BANDS.length; i++) { + for (let i = 0; i < BANDS.length; i++) { CiderAudio.audioNodes.audioBands[i] = CiderAudio.context.createBiquadFilter(); CiderAudio.audioNodes.audioBands[i].type = 'peaking'; // 'peaking'; CiderAudio.audioNodes.audioBands[i].frequency.value = BANDS[i]; @@ -694,14 +694,11 @@ var CiderAudio = { // Dynamic-ish loading CiderAudio.hierarchical_loading(); - for (i = 1; i < BANDS.length; i ++) { + for (let i = 1; i < BANDS.length; i ++) { CiderAudio.audioNodes.audioBands[i-1].connect(CiderAudio.audioNodes.audioBands[i]); } CiderAudio.audioNodes.audioBands[BANDS.length-1].connect(CiderAudio.context.destination); } } -if (app.cfg.advanced.AudioContext){ - CiderAudio.init() - -} \ No newline at end of file +export {CiderAudio} \ No newline at end of file diff --git a/src/renderer/index.js b/src/renderer/index.js index 538a4c6b..b1f3ccc6 100644 --- a/src/renderer/index.js +++ b/src/renderer/index.js @@ -1,29 +1,3 @@ -Vue.use(VueHorizontal); -Vue.use(VueObserveVisibility); - -const CiderCache = { - async getCache(file) { - let cache = await ipcRenderer.sendSync("get-cache", file) - if (isJson(cache)) { - cache = JSON.parse(cache) - if (Object.keys(cache).length === 0) { - cache = false - } - } else { - cache = false - } - return cache - }, - async putCache(file, data) { - console.log(`Caching ${file}`) - ipcRenderer.invoke("put-cache", { - file: file, - data: JSON.stringify(data) - }) - return true - } -} - var notyf = new Notyf(); const MusicKitObjects = { @@ -39,4443 +13,11 @@ const MusicKitObjects = { } } -const CiderFrontAPI = { - Objects: { - MenuEntry: function () { - this.id = "" - this.name = "" - this.onClick = () => { - } - } - }, - AddMenuEntry(entry) { - app.pluginMenuEntries.push(entry) - app.pluginInstalled = true - } -} - -const MusicKitTools = { - getHeader() { - return new Headers({ - Authorization: 'Bearer ' + MusicKit.getInstance().developerToken, - Accept: 'application/json', - 'Content-Type': 'application/json', - 'Music-User-Token': '' + MusicKit.getInstance().musicUserToken - }); - } -} - // limit an array to a certain number of items Array.prototype.limit = function (n) { return this.slice(0, n); }; -const store = new Vuex.Store({ - state: { - library: { - // songs: ipcRenderer.sendSync("get-library-songs"), - // albums: ipcRenderer.sendSync("get-library-albums"), - // recentlyAdded: ipcRenderer.sendSync("get-library-recentlyAdded"), - // playlists: ipcRenderer.sendSync("get-library-playlists") - }, - artwork: { - playerLCD: "" - } - }, - mutations: { - setLCDArtwork(state, artwork) { - state.artwork.playerLCD = artwork - } - } -}) -const app = new Vue({ - el: "#app", - store: store, - data: { - version: ipcRenderer.sendSync("get-version"), - appMode: "player", - ipcRenderer: ipcRenderer, - cfg: ipcRenderer.sendSync("getStore"), - isDev: ipcRenderer.sendSync("is-dev"), - drawertest: false, - platform: "", - mk: {}, - quickPlayQuery: "", - pluginInstalled: false, - pluginMenuEntries: [], - lz: ipcRenderer.sendSync("get-i18n", "en_US"), - lzListing: ipcRenderer.sendSync("get-i18n-listing"), - search: { - term: "", - hints: [], - showHints: false, - results: {}, - resultsSocial: {}, - limit: 10 - }, - fullscreenLyrics: false, - playerLCD: { - playbackDuration: 0, - desiredDuration: 0, - userInteraction: false - }, - drawer: { - open: false, - panel: "" - }, - browsepage: [], - listennow: [], - madeforyou: [], - radio: { - personal: [] - }, - mklang: 'en', - webview: { - url: "", - title: "", - loading: false - }, - showingPlaylist: [], - appleCurator: [], - artistPage: { - data: {}, - }, - library: { - backgroundNotification: { - show: false, - message: "", - total: 0, - progress: 0 - }, - songs: { - sortingOptions: { - "albumName": "0", - "artistName": "0", - "name": "0", - "genre": "0", - "releaseDate": "0", - "durationInMillis": "0", - "dateAdded": "0" - }, - sorting: "name", - sortOrder: "asc", - listing: [], - meta: { total: 0, progress: 0 }, - search: "", - displayListing: [], - downloadState: 0 // 0 = not started, 1 = in progress, 2 = complete, 3 = empty library - }, - albums: { - sortingOptions: { - "albumName": "0", - "artistName": "0", - "name": "0", - "genre": "0" - }, - viewAs: 'covers', - sorting: ["dateAdded", "name"], // [0] = recentlyadded page, [1] = albums page - sortOrder: ["desc", "asc"], // [0] = recentlyadded page, [1] = albums page - listing: [], - meta: { total: 0, progress: 0 }, - search: "", - displayListing: [], - downloadState: 0 // 0 = not started, 1 = in progress, 2 = complete, 3 = empty library - }, - artists: { - sortingOptions: { - "artistName": "0", - "name": "0", - "genre": "0", - "releaseDate": "0" - }, - viewAs: 'covers', - sorting: ["dateAdded", "name"], // [0] = recentlyadded page, [1] = albums page - sortOrder: ["desc", "asc"], // [0] = recentlyadded page, [1] = albums page - listing: [], - meta: { total: 0, progress: 0 }, - search: "", - displayListing: [], - downloadState: 0 // 0 = not started, 1 = in progress, 2 = complete, 3 = empty library - }, - }, - playlists: { - listing: [], - details: {}, - loadingState: 0, // 0 loading, 1 loaded, 2 error - id: "", - trackMapping: {} - }, - webremoteurl: "", - webremoteqr: "", - mxmtoken: "", - mkIsReady: false, - playerReady: false, - animateBackground: false, - currentArtUrl: '', - currentArtUrlRaw: '', - lyricon: false, - currentTrackID: '', - currentTrackIDBG: '', - lyrics: [], - currentLyricsLine: 0, - lyriccurrenttime: 0, - richlyrics: [], - lyricsMediaItem: {}, - lyricsDebug: { - current: 0, - start: 0, - end: 0 - }, - v3: { - requestBody: { - platform: "web" - } - }, - tmpHeight: '', - tmpWidth: '', - tmpVar: [], - notification: false, - chrome: { - appliedTheme: { - location: "", - info: {} - }, - desiredPageTransition: "wpfade_transform", - hideUserInfo: ipcRenderer.sendSync("is-dev") || false, - artworkReady: false, - userinfo: { - "id": "", - "attributes": { - "name": "Cider User", - "handle": "CiderUser", - "artwork": { "url": "./assets/logocut.png" } - } - }, - menuOpened: false, - maximized: false, - drawerOpened: false, - drawerState: "queue", - topChromeVisible: true, - progresshover: false, - windowControlPosition: "right", - contentAreaScrolling: true, - showCursor: false - }, - collectionList: { - response: {}, - title: "", - type: "" - }, - prevButtonBackIndicator: false, - currentSongInfo: {}, - page: "", - pageHistory: [], - songstest: false, - hangtimer: null, - selectedMediaItems: [], - routes: ["browse", "listen_now", "radio"], - musicBaseUrl: "https://api.music.apple.com/", - modals: { - addToPlaylist: false, - spatialProperties: false, - qrcode: false, - equalizer: false, - audioSettings: false, - pluginMenu: false, - audioControls: false, - showPlaylist: false, - castMenu: false - }, - socialBadges: { - badgeMap: {}, - version: "", - mediaItems: [], - mediaItemDLState: 0 // 0 = not started, 1 = in progress, 2 = complete - }, - menuPanel: { - visible: false, - event: null, - content: { - name: "", - items: {}, - headerItems: {} - } - }, - pauseButtonTimer: null, - activeCasts: [] - }, - watch: { - cfg: { - handler: function (val, oldVal) { - console.log(`cfg changed from ${oldVal} to ${val}`); - ipcRenderer.send("setStore", val); - }, - deep: true - }, - page: () => { - document.getElementById("app-content").scrollTo(0, 0); - app.resetState() - }, - showingPlaylist: () => { - if (!app.modals.showPlaylist) { - document.getElementById("app-content").scrollTo(0, 0); - app.resetState() - } - }, - artistPage: () => { - document.getElementById("app-content").scrollTo(0, 0); - app.resetState() - } - }, - methods: { - simulateController() { - this.chrome.showCursor = true - let cursorPos = [0, 0]; - let intTabIndex = 0 - let self = this - const cursorSpeedPvt = 8 - const cursorSize = 16 - let scrollSpeed = 8 - let buttonPressDelay = 500 - let stickDeadZone = 0.2 - let scrollGroup = null - let scrollGroupY = null - let elementFocusEnabled = true - - let cursorSpeed = cursorSpeedPvt - - let lastButtonPress = { - - } - - var sounds = { - Confirm: new Audio("./sounds/confirm.ogg"), - Menu: new Audio("./sounds/btn1.ogg"), - Hover: new Audio("./sounds/hover.ogg") - } - - let element = document.elementFromPoint(0, 0) - let elementType = 0 - - function appLoop() { - var gamepads = navigator.getGamepads ? navigator.getGamepads() : (navigator.webkitGetGamepads ? navigator.webkitGetGamepads() : []); - if (!gamepads) { - return; - } - - var gp = gamepads[0]; - - // LEFT STICK - if (gp.axes[0] > stickDeadZone) { - cursorPos[0] += (gp.axes[0] * cursorSpeed) - } else if (gp.axes[0] < -stickDeadZone) { - cursorPos[0] += (gp.axes[0] * cursorSpeed) - } - - if (gp.axes[1] > stickDeadZone) { - cursorPos[1] += (gp.axes[1] * cursorSpeed) - } else if (gp.axes[1] < -stickDeadZone) { - cursorPos[1] += (gp.axes[1] * cursorSpeed) - } - - if (cursorPos[0] < cursorSize) { - cursorPos[0] = cursorSize - } - if (cursorPos[1] < cursorSize) { - cursorPos[1] = cursorSize - } - if (cursorPos[0] > window.innerWidth - cursorSize) { - cursorPos[0] = window.innerWidth - cursorSize - } - if (cursorPos[1] > window.innerHeight - cursorSize) { - cursorPos[1] = window.innerHeight - cursorSize - } - - - // RIGHT STICK. - if (scrollGroupY) { - if (gp.axes[3] > stickDeadZone) { - $(scrollGroupY).scrollTop($(scrollGroupY).scrollTop() + (gp.axes[3] * scrollSpeed)) - elementFocusEnabled = false - } else if (gp.axes[3] < -stickDeadZone) { - $(scrollGroupY).scrollTop($(scrollGroupY).scrollTop() + (gp.axes[3] * scrollSpeed)) - elementFocusEnabled = false - } else { - elementFocusEnabled = true - } - } - - - - if (scrollGroup) { - if (gp.axes[2] > stickDeadZone) { - $(scrollGroup).scrollLeft($(scrollGroup).scrollLeft() + (gp.axes[2] * scrollSpeed)) - elementFocusEnabled = false - } else if (gp.axes[2] < -stickDeadZone) { - $(scrollGroup).scrollLeft($(scrollGroup).scrollLeft() + (gp.axes[2] * scrollSpeed)) - elementFocusEnabled = false - } else { - elementFocusEnabled = true - } - } - - - $(".cursor").css({ - top: cursorPos[1] + "px", - left: cursorPos[0] + "px", - display: "block" - }) - - // A BUTTON - if (gp.buttons[0].pressed) { - if (!lastButtonPress["A"]) { - lastButtonPress["A"] = 0 - } - if (Date.now() - lastButtonPress["A"] > buttonPressDelay) { - lastButtonPress["A"] = Date.now() - sounds.Confirm.play() - if (elementType == 0) { - document.activeElement.dispatchEvent(new Event("click")) - document.activeElement.dispatchEvent(new Event("controller-click")) - } else { - element.dispatchEvent(new Event("click")) - element.dispatchEvent(new Event("controller-click")) - } - } - } - - // B BUTTON - if (gp.buttons[1].pressed) { - - if (!lastButtonPress["B"]) { - lastButtonPress["B"] = 0 - } - if (Date.now() - lastButtonPress["B"] > buttonPressDelay) { - lastButtonPress["B"] = Date.now() - if (elementType == 0) { - document.activeElement.dispatchEvent(new Event("contextmenu")) - setTimeout(() => { - if ($(".menu-option").length > 0) { - let bounds = $(".menu-option")[0].getBoundingClientRect() - cursorPos[0] = bounds.left + (bounds.width / 2) - cursorPos[1] = bounds.top + (bounds.height / 2) - } - }, 100) - } else { - element.dispatchEvent(new Event("contextmenu")) - } - } - - } - - // right bumper - if (gp.buttons[5].pressed) { - if (!lastButtonPress["RB"]) { - lastButtonPress["RB"] = 0 - } - if (Date.now() - lastButtonPress["RB"] > buttonPressDelay) { - lastButtonPress["RB"] = Date.now() - app.navigateForward() - - } - } - - // left bumper - if (gp.buttons[4].pressed) { - if (!lastButtonPress["LB"]) { - lastButtonPress["LB"] = 0 - } - if (Date.now() - lastButtonPress["LB"] > buttonPressDelay) { - lastButtonPress["LB"] = Date.now() - app.navigateBack() - - } - } - - - - // cursor hover - if (elementFocusEnabled) { - element = document.elementFromPoint(cursorPos[0], cursorPos[1]) - } - - if (element) { - - let closest = element.closest("[tabindex], input, button, a") - - // VERT SCROLL - let scrollGroupCloY = element.closest(`[scrollaxis="y"]`) - if (scrollGroupCloY) { - scrollGroupY = scrollGroupCloY - } - - - // HOZ SCROLL - let scrollGroupClo = element.closest(".v-hl-container") - - if (scrollGroupClo) { - if (scrollGroupClo.classList.contains("v-hl-container")) { - scrollGroup = scrollGroupClo - scrollGroup.style["scroll-snap-type"] = "unset" - } else { - scrollGroup.style["scroll-snap-type"] = "" - scrollGroup = null - } - } - - if (closest) { - elementType = 0 - closest.focus() - } else { - if (closest) { - closest.blur() - } - elementType = 1 - element.focus() - } - cursorSpeed = cursorSpeedPvt - if (!element.classList.contains("app-chrome") - && !element.classList.contains("app-content")) { - cursorSpeed = cursorSpeedPvt - } - // console.log($._data($(element), "events")) - } else { - cursorSpeed = 12 - } - // console.log(gp.axes[0], gp.axes[1]) - start = requestAnimationFrame(appLoop); - } - - // controller pairing - notyf.error("Press the button on your controller to pair it to Cider.") - window.addEventListener("gamepadconnected", function (e) { - console.log("Gamepad connected at index %d: %s. %d buttons, %d axes.", - e.gamepad.index, e.gamepad.id, - e.gamepad.buttons.length, e.gamepad.axes.length); - notyf.success("Pairing successful!") - appLoop() - }, { once: true }); - - document.addEventListener("keydown", (e) => { - sounds.Confirm.currentTime = 0 - sounds.Menu.currentTime = 0 - sounds.Hover.currentTime = 0 - let tabbable = $("[tabindex]") - console.log(e.key) - switch (e.key) { - default: - break; - case "ArrowLeft": - e.preventDefault() - - cursorPos[0] -= cursorSpeed - break; - case "ArrowRight": - e.preventDefault() - - cursorPos[0] += cursorSpeed - break; - case "ArrowUp": - e.preventDefault() - - cursorPos[1] -= cursorSpeed - // sounds.Hover.play() - // if(intTabIndex <= 0) { - // intTabIndex = 0 - // }else{ - // intTabIndex-- - // } - // $(tabbable[intTabIndex]).focus() - // $("#app-content").scrollTop($(document.activeElement).offset().top) - break; - case "ArrowDown": - e.preventDefault() - - cursorPos[1] += cursorSpeed - // if(intTabIndex < tabbable.length) { - // intTabIndex++ - // }else{ - // intTabIndex = tabbable.length - // } - // $(tabbable[intTabIndex]).focus() - // $("#app-content").scrollTop($(document.activeElement).offset().top) - break; - case "c": - app.resetState() - break; - case "x": - // set cursorPos to the top right of the screen - // sounds.Menu.play() - if (elementType == 0) { - document.activeElement.dispatchEvent(new Event("contextmenu")) - } else { - element.dispatchEvent(new Event("contextmenu")) - } - - e.preventDefault() - break; - case "z": - sounds.Confirm.play() - if (elementType == 0) { - document.activeElement.dispatchEvent(new Event("click")) - document.activeElement.dispatchEvent(new Event("controller-click")) - } else { - element.dispatchEvent(new Event("click")) - element.dispatchEvent(new Event("controller-click")) - } - - e.preventDefault() - break; - } - - $(".cursor").css({ - top: cursorPos[1] + "px", - left: cursorPos[0] + "px" - }) - function lerp(a, b, n) { - return (1 - n) * a + n * b - } - - - element = document.elementFromPoint(cursorPos[0], cursorPos[1]) - - if (element) { - let closest = element.closest("[tabindex], input, button, a") - if (closest) { - elementType = 0 - closest.focus() - } else { - elementType = 1 - element.focus() - } - } - console.log(element) - }); - }, - songLinkShare(amUrl) { - notyf.open({ type: "info", className: "notyf-info", message: app.getLz('term.song.link.generate') }) - let self = this - httpRequest = new XMLHttpRequest(); - httpRequest.open('GET', `https://api.song.link/v1-alpha.1/links?url=${amUrl}&userCountry=US`, true); - httpRequest.send(); - httpRequest.onreadystatechange = function () { - if (httpRequest.readyState === 4) { - if (httpRequest.status === 200) { - let response = JSON.parse(httpRequest.responseText); - console.log(response); - self.copyToClipboard(response.pageUrl) - } else { - console.log('There was a problem with the request.'); - notyf.error(app.getLz('term.requestError')) - } - } - } - }, - mainMenuVisibility(val) { - if (val) { - (this.mk.isAuthorized) ? this.chrome.menuOpened = !this.chrome.menuOpened : false; - if (!this.mk.isAuthorized) { - this.mk.authorize() - } - } else { - setTimeout(() => { - this.chrome.menuOpened = false - }, 100) - } - }, - stringTemplateParser(expression, valueObj) { - const templateMatcher = /{{\s?([^{}\s]*)\s?}}/g; - let text = expression.replace(templateMatcher, (substring, value, index) => { - value = valueObj[value]; - return value; - }); - return text - // stringTemplateParser('my name is {{name}} and age is {{age}}', {name: 'Tom', age:100}) - }, - async setLz(lang) { - if (lang == "") { - lang = this.cfg.general.language - } - this.lz = ipcRenderer.sendSync("get-i18n", lang) - this.mklang = await this.MKJSLang() - }, - getLz(message, options = {}) { - if (this.lz[message]) { - if (options["count"]) { - if (typeof this.lz[message] === "object") { - let type = window.fastPluralRules.getPluralFormNameForCardinalByLocale(this.cfg.general.language.replace("_", "-"), options["count"]); - return this.lz[message][type] ?? ((this.lz[message])[Object.keys(this.lz[message])[0]] ?? this.lz[message]) - } else { - // fallback English plural forms ( old i18n ) - if (options["count"] > 1) { - return this.lz[message + "s"] ?? this.lz[message] - } else { - return this.lz[message] ?? this.lz[message + "s"] - } - } - } else if (typeof this.lz[message] === "object") { - return (this.lz[message])[Object.keys(this.lz[message])[0]] - } - return this.lz[message] - } else { - return message - } - }, - setLzManual() { - app.$data.library.songs.sortingOptions = { - "albumName": app.getLz('term.sortBy.album'), - "artistName": app.getLz('term.sortBy.artist'), - "name": app.getLz('term.sortBy.name'), - "genre": app.getLz('term.sortBy.genre'), - "releaseDate": app.getLz('term.sortBy.releaseDate'), - "durationInMillis": app.getLz('term.sortBy.duration'), - "dateAdded": app.getLz('term.sortBy.dateAdded') - } - - app.$data.library.albums.sortingOptions = { - "albumName": app.getLz('term.sortBy.album'), - "artistName": app.getLz('term.sortBy.artist'), - "name": app.getLz('term.sortBy.name'), - "genre": app.getLz('term.sortBy.genre') - } - - app.$data.library.artists.sortingOptions = { - "artistName": app.getLz('term.sortBy.artist'), - "name": app.getLz('term.sortBy.name'), - "genre": app.getLz('term.sortBy.genre'), - "releaseDate": app.getLz('term.sortBy.releaseDate') - } - }, - async showSocialListeningTo() { - let contentIds = Object.keys(app.socialBadges.badgeMap) - app.showCollection({ data: this.socialBadges.mediaItems }, "Friends Listening To", "albums") - if (this.socialBadges.mediaItemDLState == 1 || this.socialBadges.mediaItemDLState == 2) { - return - } - this.socialBadges.mediaItemDLState = 2 - await asyncForEach(contentIds, async (item) => { - try { - let type = "albums" - if (item.includes("pl.")) { - type = "playlists" - } - if (item.includes("ra.")) { - type = "stations" - } - let found = await app.mk.api.v3.music(`/v1/catalog/us/${type}/${item}`) - this.socialBadges.mediaItems.push(found.data.data[0]) - } catch (e) { - - } - }) - }, - async openAppleMusicURL(url) { - let properties = MusicKit.formattedMediaURL(url) - let item = { - id: properties.contentId, - attributes: { - playParams: { - id: properties.contentId, - kind: properties.kind, - } - }, - type: properties.kind, - kind: properties.kind - } - app.routeView(item) - }, - saveFile(fileName, urlFile) { - let a = document.createElement("a"); - a.style = "display: none"; - document.body.appendChild(a); - a.href = urlFile; - a.download = fileName; - a.click(); - window.URL.revokeObjectURL(url); - a.remove(); - }, - async showMenuPanel(data, event) { - app.menuPanel.visible = true; - app.menuPanel.content.name = data.name ?? ""; - app.menuPanel.content.items = data.items ?? {}; - app.menuPanel.content.headerItems = data.headerItems ?? {}; - if (event) { - app.menuPanel.event = event; - } - }, - async getSvgIcon(url) { - let response = await fetch(url); - let data = await response.text(); - return data; - }, - getSocialBadges(cb = () => { - }) { - let self = this - try { - app.mk.api.v3.music("/v1/social/badging-map").then(data => { - self.socialBadges.badgeMap = data.data.results.badgingMap - cb(data.data.results.badgingMap) - }) - } catch (ex) { - this.socialBadges.badgeMap = {} - } - }, - addFavorite(id, type) { - this.cfg.home.favoriteItems.push({ - id: id, - type: type - }); - }, - modularUITest(val = false) { - this.fullscreenLyrics = val; - if (val) { - document.querySelector("#app-main").classList.add("modular-fs") - } else { - document.querySelector("#app-main").classList.remove("modular-fs") - } - }, - navigateBack() { - this.chrome.desiredPageTransition = "wpfade_transform_backwards" - return new Promise((resolve, reject) => { - history.back() - setTimeout(() => { - - - resolve(this.chrome.desiredPageTransition = "wpfade_transform") - }, 100) - }) - }, - navigateForward() { - history.forward() - }, - getHTMLStyle() { - // document.querySelector("html").style.background = "#222"; - document.querySelector("body").classList.add("notransparency") - }, - resetState() { - this.menuPanel.visible = false; - app.selectedMediaItems = []; - this.chrome.contentAreaScrolling = true - for (let key in app.modals) { - app.modals[key] = false; - } - }, - promptAddToPlaylist() { - app.modals.addToPlaylist = true; - }, - async addSelectedToNewPlaylist() { - let self = this - let pl_items = [] - for (let i = 0; i < self.selectedMediaItems.length; i++) { - if (self.selectedMediaItems[i].kind == "song" || self.selectedMediaItems[i].kind == "songs") { - self.selectedMediaItems[i].kind = "songs" - pl_items.push({ - id: self.selectedMediaItems[i].id, - type: self.selectedMediaItems[i].kind - }) - } else if ((self.selectedMediaItems[i].kind == "album" || self.selectedMediaItems[i].kind == "albums") && self.selectedMediaItems[i].isLibrary != true) { - self.selectedMediaItems[i].kind = "albums" - let res = await self.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/albums/${self.selectedMediaItems[i].id}/tracks`); - let ids = res.data.data.map(function (i) { - return { id: i.id, type: i.type } - }) - pl_items = pl_items.concat(ids) - } else if (self.selectedMediaItems[i].kind == "library-song" || self.selectedMediaItems[i].kind == "library-songs") { - self.selectedMediaItems[i].kind = "library-songs" - pl_items.push({ - id: self.selectedMediaItems[i].id, - type: self.selectedMediaItems[i].kind - }) - } else if ((self.selectedMediaItems[i].kind == "library-album" || self.selectedMediaItems[i].kind == "library-albums") || (self.selectedMediaItems[i].kind == "album" && self.selectedMediaItems[i].isLibrary == true)) { - self.selectedMediaItems[i].kind = "library-albums" - let res = await self.mk.api.v3.music(`/v1/me/library/albums/${self.selectedMediaItems[i].id}/tracks`); - let ids = res.data.data.map(function (i) { - return { id: i.id, type: i.type } - }) - pl_items = pl_items.concat(ids) - } else { - pl_items.push({ - id: self.selectedMediaItems[i].id, - type: self.selectedMediaItems[i].kind - }) - } - } - this.modals.addToPlaylist = false - app.newPlaylist(app.getLz('term.newPlaylist'), pl_items) - }, - async addSelectedToPlaylist(playlist_id) { - let self = this - let pl_items = [] - for (let i = 0; i < self.selectedMediaItems.length; i++) { - if (self.selectedMediaItems[i].kind == "song" || self.selectedMediaItems[i].kind == "songs") { - self.selectedMediaItems[i].kind = "songs" - pl_items.push({ - id: self.selectedMediaItems[i].id, - type: self.selectedMediaItems[i].kind - }) - } else if ((self.selectedMediaItems[i].kind == "album" || self.selectedMediaItems[i].kind == "albums") && self.selectedMediaItems[i].isLibrary != true) { - self.selectedMediaItems[i].kind = "albums" - let res = await self.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/albums/${self.selectedMediaItems[i].id}/tracks`); - let ids = res.data.data.map(function (i) { - return { id: i.id, type: i.type } - }) - pl_items = pl_items.concat(ids) - } else if (self.selectedMediaItems[i].kind == "library-song" || self.selectedMediaItems[i].kind == "library-songs") { - self.selectedMediaItems[i].kind = "library-songs" - pl_items.push({ - id: self.selectedMediaItems[i].id, - type: self.selectedMediaItems[i].kind - }) - } else if ((self.selectedMediaItems[i].kind == "library-album" || self.selectedMediaItems[i].kind == "library-albums") || (self.selectedMediaItems[i].kind == "album" && self.selectedMediaItems[i].isLibrary == true)) { - self.selectedMediaItems[i].kind = "library-albums" - let res = await self.mk.api.v3.music(`/v1/me/library/albums/${self.selectedMediaItems[i].id}/tracks`); - let ids = res.data.data.map(function (i) { - return { id: i.id, type: i.type } - }) - pl_items = pl_items.concat(ids) - } else { - pl_items.push({ - id: self.selectedMediaItems[i].id, - type: self.selectedMediaItems[i].kind - }) - } - - } - this.modals.addToPlaylist = false - await app.mk.api.v3.music( - `/v1/me/library/playlists/${playlist_id}/tracks`, {}, { - fetchOptions: { - method: "POST", - body: JSON.stringify({ - data: pl_items - }) - } - } - ).then(() => { - if (this.page == 'playlist_' + this.showingPlaylist.id) { - this.getPlaylistFromID(this.showingPlaylist.id, true) - } - }) - }, - async init() { - let self = this - if (this.cfg.visual.theme != "default.less" && this.cfg.visual.theme != "") { - this.setTheme(this.cfg.visual.theme) - } - this.setLz(this.cfg.general.language) - this.setLzManual() - clearTimeout(this.hangtimer) - this.mk = MusicKit.getInstance() - let needsReload = (typeof localStorage["music.ampwebplay.media-user-token"] == "undefined") - this.mk.authorize().then(() => { - self.mkIsReady = true - if (needsReload) { - document.location.reload() - } - }) - this.$forceUpdate() - if (this.isDev) { - this.mk.privateEnabled = true - // Hide UserInfo if Dev mode - } else { - // Get Hide User from Settings - this.chrome.hideUserInfo = !this.cfg.visual.showuserinfo - this.mk.privateEnabled = this.cfg.general.privateEnabled - } - if (this.cfg.visual.hw_acceleration == "disabled") { - document.body.classList.add("no-gpu") - } - this.mk._services.timing.mode = 0 - this.platform = ipcRenderer.sendSync('cider-platform'); - - this.mklang = await this.MKJSLang() - - try { - // Set profile name - this.chrome.userinfo = (await app.mk.api.v3.music(`/v1/me/social-profile`)).data.data[0] - } catch (err) { - } - - this.mk._bag.features['seamless-audio-transitions'] = this.cfg.audio.seamless_audio - - // API Fallback - if (!this.chrome.userinfo) { - this.chrome.userinfo = { - "id": "", - "attributes": { - "name": "Cider User", - "handle": "CiderUser", - "artwork": { "url": "./assets/logocut.png" } - } - } - } - MusicKitInterop.init() - // Set the volume - - // Check the value of this.cfg.audio.muted - if (!this.cfg.audio.muted) { - // Set the mk.volume to the last stored volume data - this.mk.volume = this.cfg.audio.volume - } else if (this.cfg.audio.muted) { - // Set mk.volume to -1 (setting to 0 wont work, so temp solution setting to -1) - this.mk.volume = -1; - } - // ipcRenderer.invoke('getStoreValue', 'audio.volume').then((value) => { - // self.mk.volume = value - // }) - - // load cached library - let librarySongs = await CiderCache.getCache("library-songs") - let libraryAlbums = await CiderCache.getCache("library-albums") - if (librarySongs) { - this.library.songs.listing = librarySongs - this.library.songs.displayListing = this.library.songs.listing - } - if (libraryAlbums) { - this.library.albums.listing = libraryAlbums - this.library.albums.displayListing = this.library.albums.listing - } - - window.onbeforeunload = function (e) { - window.localStorage.setItem("currentTrack", JSON.stringify(app.mk.nowPlayingItem)) - window.localStorage.setItem("currentTime", JSON.stringify(app.mk.currentPlaybackTime)) - window.localStorage.setItem("currentQueue", JSON.stringify(app.mk.queue.items)) - }; - - if (typeof MusicKit.PlaybackBitrate[app.cfg.audio.quality] !== "string") { - app.mk.bitrate = MusicKit.PlaybackBitrate[app.cfg.audio.quality] - } else { - app.mk.bitrate = 256 - app.cfg.audio.quality = "HIGH" - } - - switch (this.cfg.general.resumeOnStartupBehavior) { - default: - case "local": - // load last played track - try { - let lastItem = window.localStorage.getItem("currentTrack") - let time = window.localStorage.getItem("currentTime") - let queue = window.localStorage.getItem("currentQueue") - if (lastItem != null) { - lastItem = JSON.parse(lastItem) - let kind = lastItem.attributes.playParams.kind; - let truekind = (!kind.endsWith("s")) ? (kind + "s") : kind; - app.mk.setQueue({ - [truekind]: [lastItem.attributes.playParams.id], - parameters: { l: app.mklang } - }) - app.mk.mute() - setTimeout(() => { - app.mk.play().then(() => { - app.mk.pause().then(() => { - if (time != null) { - app.mk.seekToTime(time) - } - app.mk.unmute() - if (queue != null) { - queue = JSON.parse(queue) - if (queue && queue.length > 0) { - let ids = queue.map(e => (e.playParams ? e.playParams.id : (e.attributes.playParams ? e.attributes.playParams.id : ''))) - let i = 0; - if (ids.length > 0) { - for (id of ids) { - if (!(i == 0 && ids[0] == lastItem.attributes.playParams.id)) { - try { - app.mk.playLater({ songs: [id] }) - } catch (err) { - } - } - i++; - } - } - } - } - - }) - - }) - }, 1500) - - } - - } catch (e) { - console.log(e) - } - break; - case "history": - let history = await app.mk.api.v3.music(`/v1/me/recent/played/tracks`, { l: app.mklang }) - if (history.data.data.length > 0) { - let lastItem = history.data.data[0] - let kind = lastItem.attributes.playParams.kind; - let truekind = (!kind.endsWith("s")) ? (kind + "s") : kind; - app.mk.setQueue({ - [truekind]: [lastItem.attributes.playParams.id], - parameters: { l: app.mklang } - }) - app.mk.mute() - setTimeout(() => { - app.mk.play().then(() => { - app.mk.pause().then(() => { - app.mk.unmute() - }) - }) - }, 1500) - } - - break; - case "disabled": - - break; - } - - MusicKit.getInstance().videoContainerElement = document.getElementById("apple-music-video-player") - - ipcRenderer.on('theme-update', (event, arg) => { - less.refresh(true, true, true) - self.setTheme(self.cfg.visual.theme, true) - }) - - ipcRenderer.on('SoundCheckTag', (event, tag) => { - // let replaygain = self.parseSCTagToRG(tag) - let soundcheck = tag.split(" ") - let numbers = [] - for (item of soundcheck) { - numbers.push(parseInt(item, 16)) - - } - numbers.shift() - let peak = Math.max(numbers[6], numbers[7]) / 32768.0 - let gain = Math.pow(10, ((-7.63 - (Math.log10(peak) * 20)) / 20))// EBU R 128 Compliant - console.debug(`[Cider][MaikiwiSoundCheck] Peak Gain: ${Math.log10(peak) * 20} | Adjusting '${Math.log10(gain) * 20}' dB`) - try { - //CiderAudio.audioNodes.gainNode.gain.value = (Math.min(Math.pow(10, (replaygain.gain / 20)), (1 / replaygain.peak))) - CiderAudio.audioNodes.gainNode.gain.value = gain - } catch (e) { - } - }) - - ipcRenderer.on('play', function (_event, mode, id) { - if (mode !== 'url') { - self.mk.setQueue({ [mode]: id, parameters: { l: self.mklang } }).then(() => { - app.mk.play() - }) - - } else { - app.openAppleMusicURL(id) - } - }); - - this.mk.addEventListener(MusicKit.Events.playbackStateDidChange, () => { - ipcRenderer.send('wsapi-updatePlaybackState', wsapi.getAttributes()); - }) - - this.mk.addEventListener(MusicKit.Events.playbackTimeDidChange, (a) => { - self.lyriccurrenttime = self.mk.currentPlaybackTime - this.currentSongInfo = a - self.playerLCD.playbackDuration = (self.mk.currentPlaybackTime) - // wsapi - ipcRenderer.send('wsapi-updatePlaybackState', wsapi.getAttributes()); - }) - - this.mk.addEventListener(MusicKit.Events.nowPlayingItemDidChange, (a) => { - if (self.$refs.queue) { - self.$refs.queue.updateQueue(); - } - this.currentSongInfo = a - - - if (app.cfg.audio.normalization) { - // get unencrypted audio previews to get SoundCheck's normalization tag - try { - let previewURL = null - try { - previewURL = app.mk.nowPlayingItem.previewURL - } catch (e) { - } - if (previewURL == null && ((app.mk.nowPlayingItem?._songId ?? (app.mk.nowPlayingItem["songId"] ?? app.mk.nowPlayingItem.relationships.catalog.data[0].id)) != -1)) { - app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/songs/${app.mk.nowPlayingItem?._songId ?? (app.mk.nowPlayingItem["songId"] ?? app.mk.nowPlayingItem.relationships.catalog.data[0].id)}`).then((response) => { - previewURL = response.data.data[0].attributes.previews[0].url - if (previewURL) - ipcRenderer.send('getPreviewURL', previewURL) - }) - } else { - if (previewURL) - ipcRenderer.send('getPreviewURL', previewURL) - } - - } catch (e) { - } - } - - - try { - a = a.item.attributes; - } catch (_) { - } - let type = (self.mk.nowPlayingItem != null) ? self.mk.nowPlayingItem["type"] ?? '' : ''; - - if (type.includes("musicVideo") || type.includes("uploadedVideo") || type.includes("music-movie")) { - document.getElementById("apple-music-video-container").style.display = "block"; - // app.chrome.topChromeVisible = false - } else { - document.getElementById("apple-music-video-container").style.display = "none"; - // app.chrome.topChromeVisible = true - } - self.chrome.artworkReady = false - self.lyrics = [] - self.richlyrics = [] - app.getCurrentArtURL(); - // app.getNowPlayingArtwork(42); - app.getNowPlayingArtworkBG(32); - app.loadLyrics(); - - // Playback Notifications - if (this.cfg.general.playbackNotifications && !document.hasFocus() && a.artistName && a.artwork && a.name) { - if (this.notification) { - this.notification.close() - } - this.notification = new Notification(a.name, { - body: a.artistName, - icon: a.artwork.url.replace('/{w}x{h}bb', '/512x512bb').replace('/2000x2000bb', '/35x35bb'), - silent: true, - }); - } - - }) - - - this.mk.addEventListener(MusicKit.Events.playbackVolumeDidChange, (_a) => { - this.cfg.audio.volume = this.mk.volume - }) - - this.refreshPlaylists(this.isDev) - document.body.removeAttribute("loading") - if (window.location.hash != "") { - this.appRoute(window.location.hash) - } else { - this.page = "home" - } - - this.mediaKeyFixes() - - setTimeout(() => { - this.getSocialBadges() - this.getBrowsePage(); - this.$forceUpdate() - }, 500) - ipcRenderer.invoke("renderer-ready", true) - document.querySelector("#LOADER").remove() - if (this.cfg.general.themeUpdateNotification) { - this.checkForThemeUpdates() - } - }, - async checkForThemeUpdates() { - let self = this - const themes = ipcRenderer.sendSync("get-themes") - await asyncForEach(themes, async (theme) => { - if (theme.commit != "") { - await fetch(`https://api.github.com/repos/${theme.github_repo}/commits`) - .then(res => res.json()) - .then(res => { - if (res[0].sha != theme.commit) { - const notify = notyf.open({ className: "notyf-info", type: "info", message: `[Themes] ${theme.name} has an update available.` }) - notify.on("click", () => { - app.appRoute("themes-github") - notyf.dismiss(notify) - }) - } - }) - } - }) - }, - async setTheme(theme = "", onlyPrefs = false) { - console.log(theme) - if (this.cfg.visual.theme == "") { - this.cfg.visual.theme = "default.less" - } - if (theme == "") { - theme = this.cfg.visual.theme - } else { - this.cfg.visual.theme = "" - this.cfg.visual.theme = theme - } - const info = {} - try { - const infoResponse = await fetch("themes/" + app.cfg.visual.theme.replace("index.less", "theme.json")) - this.chrome.appliedTheme.info = await infoResponse.json() - } catch (e) { - e = null - console.warn("failed to get theme.json") - this.chrome.appliedTheme.info = {} - } - - - if (!onlyPrefs) { - document.querySelector("#userTheme").href = `themes/${this.cfg.visual.theme}` - document.querySelectorAll(`[id*='less']`).forEach(el => { - el.remove() - }); - less.refresh() - } - }, - getThemeDirective(directive = "") { - let directives = {} - if (typeof this.chrome.appliedTheme.info.directives == "object") { - directives = this.chrome.appliedTheme.info.directives - } - if (directives[directive]) { - return this.chrome.appliedTheme.info.directives[directive].value - } else if (this.cfg.visual.directives[directive]) { - return this.cfg.visual.directives.windowLayout - } else { - return "" - } - }, - unauthorize() { - bootbox.confirm(app.getLz('term.confirmLogout'), function (result) { - if (result) { - app.mk.unauthorize() - document.location.reload() - } - }); - }, - getAppClasses() { - let classes = {} - if (this.cfg.advanced.experiments.includes('compactui')) { - classes.compact = true - } - if (this.cfg.visual.window_background_style == "none") { - classes.simplebg = true - } - - if (this.getThemeDirective('windowLayout') == 'twopanel') { - classes.twopanel = true - } - return classes - }, - invokeDrawer(panel) { - if (this.drawer.panel == panel && this.drawer.open) { - if (panel == "lyrics") { - this.lyricon = false - } - this.drawer.panel = "" - this.drawer.open = false - } else { - if (panel == "lyrics") { - this.lyricon = true - } else { - this.lyricon = false - } - this.drawer.open = true - this.drawer.panel = panel - } - }, - select_removeMediaItem(id) { - this.selectedMediaItems.filter(item => item.guid == id).forEach(item => { - this.selectedMediaItems.splice(this.selectedMediaItems.indexOf(item), 1) - }) - }, - select_hasMediaItem(id) { - let found = this.selectedMediaItems.find(item => item.guid == id) - if (found) { - return true - } else { - return false - } - }, - select_selectMediaItem(id, kind, index, guid, library) { - if (!this.select_hasMediaItem(guid)) { - this.selectedMediaItems.push({ - id: id, - kind: kind, - index: index, - guid: guid, - isLibrary: library - }) - } - }, - getPlaylistFolderChildren(id) { - return this.playlists.listing.filter(playlist => { - if (playlist.parent == id) { - return playlist - } - }) - }, - async refreshPlaylists(localOnly = false, trackMap = true) { - let self = this - let newListing = [] - let trackMapping = {} - const cachedPlaylist = await CiderCache.getCache("library-playlists") - const cachedTrackMapping = await CiderCache.getCache("library-playlists-tracks") - - if (cachedPlaylist) { - console.log("using cached playlists") - this.playlists.listing = cachedPlaylist - self.sortPlaylists() - } else { - console.log("playlist has no cache") - } - - if(cachedTrackMapping) { - console.log("using cached track mapping") - this.playlists.trackMapping = cachedTrackMapping - } - if (localOnly) { - return - } - - this.library.backgroundNotification.message = "Building playlist cache..." - this.library.backgroundNotification.show = true - - async function deepScan(parent = "p.playlistsroot") { - console.log(`scanning ${parent}`) - const playlistData = await app.mk.api.v3.music(`/v1/me/library/playlist-folders/${parent}/children/`) - await asyncForEach(playlistData.data.data, async (playlist) => { - playlist.parent = parent - playlist.children = [] - playlist.tracks = [] - try { - if (trackMap) { - let tracks = await app.mk.api.v3.music(playlist.href + "/tracks").catch(e => { - // no tracks - e = null - }) - tracks.data.data.forEach(track => { - if (!trackMapping[track.id]) { - trackMapping[track.id] = [] - } - trackMapping[track.id].push(playlist.id) - - if (typeof track.attributes.playParams.catalogId == "string") { - if (!trackMapping[track.attributes.playParams.catalogId]) { - trackMapping[track.attributes.playParams.catalogId] = [] - } - trackMapping[track.attributes.playParams.catalogId].push(playlist.id) - } - }) - } - } catch (e) { } - if (playlist.type == "library-playlist-folders") { - try { - await deepScan(playlist.id).catch(e => { }) - } catch (e) { - - } - } - newListing.push(playlist) - }) - } - - await deepScan() - - this.library.backgroundNotification.show = false - this.playlists.listing = newListing - self.sortPlaylists() - if (trackMap) { - CiderCache.putCache("library-playlists-tracks", trackMapping) - this.playlists.trackMapping = trackMapping - } - CiderCache.putCache("library-playlists", newListing) - }, - sortPlaylists() { - this.playlists.listing.sort((a, b) => { - if (a.type === "library-playlist-folders" && b.type !== "library-playlist-folders") { - return -1 - } else if (a.type !== "library-playlist-folders" && b.type === "library-playlist-folders") { - return 1 - } else { - return 0 - } - }) - }, - playlistHeaderContextMenu(event) { - let menu = { - items: [{ - name: app.getLz('term.createNewPlaylist'), - action: () => { - this.newPlaylist() - } - }, - { - name: app.getLz('term.createNewPlaylistFolder'), - action: () => { - this.newPlaylistFolder() - } - } - ] - } - this.showMenuPanel(menu, event) - }, - async editPlaylistFolder(id, name = app.getLz('term.newPlaylist')) { - let self = this - this.mk.api.v3.music( - `/v1/me/library/playlist-folders/${id}`, {}, { - fetchOptions: { - method: "PATCH", - body: JSON.stringify({ - attributes: { name: name } - }) - } - } - ).then(res => { - self.refreshPlaylists() - }) - }, - async editPlaylist(id, name = app.getLz('term.newPlaylist')) { - let self = this - this.mk.api.v3.music( - `/v1/me/library/playlists/${id}`, {}, { - fetchOptions: { - method: "PATCH", - body: JSON.stringify({ - attributes: { name: name } - }) - } - } - ).then(res => { - self.refreshPlaylists() - }) - }, - copyToClipboard(str) { - if (navigator.userAgent.includes('Darwin') || navigator.appVersion.indexOf("Mac") != -1) { - this.darwinShare(str) - } else { - notyf.success(app.getLz('term.share.success')) - navigator.clipboard.writeText(str).then(r => console.log("Copied to clipboard.")) - } - }, - newPlaylist(name = app.getLz('term.newPlaylist'), tracks = []) { - let self = this - let request = { - name: name - } - if (tracks.length > 0) { - request.tracks = tracks - } - app.mk.api.v3.music(`/v1/me/library/playlists`, {}, { - fetchOptions: { - method: "POST", - body: JSON.stringify({ - "attributes": { "name": name }, - "relationships": { - "tracks": { "data": tracks }, - } - }) - } - }).then(res => { - res = res.data.data[0] - console.log(res) - self.appRoute(`playlist_` + res.id); - self.showingPlaylist = []; - self.getPlaylistFromID(app.page.substring(9), true) - self.playlists.listing.push({ - id: res.id, - attributes: { - name: name - }, - parent: "p.playlistsroot" - }) - self.sortPlaylists() - setTimeout(() => { - app.refreshPlaylists() - }, 8000) - }) - }, - deletePlaylist(id) { - let self = this - if (confirm(app.getLz('term.deletePlaylist'))) { - app.mk.api.v3.music(`/v1/me/library/playlists/${id}`, {}, { - fetchOptions: { - method: "DELETE" - } - }).then(res => { - // remove this playlist from playlists.listing if it exists - let found = self.playlists.listing.find(item => item.id == id) - if (found) { - self.playlists.listing.splice(self.playlists.listing.indexOf(found), 1) - } - }) - } - }, - async showCollection(response, title, type, requestBody = {}) { - let self = this - console.log(response) - this.collectionList.requestBody = {} - this.collectionList.response = response - this.collectionList.title = title - this.collectionList.type = type - this.collectionList.requestBody = requestBody - app.appRoute("collection-list") - }, - async showArtistView(artist, title, view) { - let response = (await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/artists/${artist}/view/${view}?l=${this.mklang}`, {}, { includeResponseMeta: !0 })).data - console.log(response) - await this.showCollection(response, title, "artists") - }, - async showRecordLabelView(label, title, view) { - let response = (await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/record-labels/${label}/view/${view}?l=${this.mklang}`)).data - await this.showCollection(response, title, "record-labels") - }, - async showSearchView(term, group, title) { - - let requestBody = { - platform: "web", - groups: group, - types: "activities,albums,apple-curators,artists,curators,editorial-items,music-movies,music-videos,playlists,songs,stations,tv-episodes,uploaded-videos,record-labels", - limit: 25, - relate: { - editorialItems: ["contents"] - }, - include: { - albums: ["artists"], - songs: ["artists"], - "music-videos": ["artists"] - }, - extend: "artistUrl", - fields: { - artists: "url,name,artwork,hero", - albums: "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url" - }, - with: "serverBubbles,lyricHighlights", - art: { - "url": "cf" - }, - omit: { - resource: ["autos"] - }, - groups: group, - l: this.mklang - } - let response = await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/search?term=${term}`, requestBody, { - includeResponseMeta: !0 - }) - - console.log('searchres', response) - let responseFormat = { - data: response.data.results[group].data, - next: response.data.results[group].next, - groups: group - } - await this.showCollection(responseFormat, title, "search", requestBody) - }, - async getPlaylistContinuous(response, transient = false) { - response = response.data.data[0] - let self = this - let playlistId = response.id - this.playlists.loadingState = (!transient) ? 0 : 1 - this.showingPlaylist = response - if (!response.relationships?.tracks?.next) { - this.playlists.loadingState = 1 - return - } - - function getPlaylistTracks(next) { - app.apiCall(app.musicBaseUrl + next, res => { - if (self.showingPlaylist.id != playlistId) { - return - } - self.showingPlaylist.relationships.tracks.data = self.showingPlaylist.relationships.tracks.data.concat(res.data) - if (res.next) { - getPlaylistTracks(res.next) - } else { - self.playlists.loadingState = 1 - } - }) - } - - getPlaylistTracks(response.relationships.tracks.next) - - }, - async getPlaylistFromID(id, transient = false) { - let self = this - const params = { - include: "tracks", - platform: "web", - "include[library-playlists]": "catalog,tracks", - "fields[playlists]": "curatorName,playlistType,name,artwork,url,playParams", - "include[library-songs]": "catalog,artists,albums,playParams,name,artwork,url", - "fields[catalog]": "artistUrl,albumUrl,url", - "fields[songs]": "artistUrl,albumUrl,playParams,name,artwork,url,artistName,albumName,durationInMillis", - l: this.mklang - } - if (!transient) { - this.playlists.loadingState = 0; - } - app.mk.api.v3.music(`/v1/me/library/playlists/${id}`, params).then(res => { - self.getPlaylistContinuous(res, transient) - }).catch((e) => { - console.log(e); - try { - app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/playlists/${id}`, params).then(res => { - self.getPlaylistContinuous(res, transient) - }) - } catch (err) { - console.log(err) - } - }) - - }, - async getArtistFromID(id) { - this.page = "" - const artistData = await this.mkapi("artists", false, id, { - "views": "featured-release,full-albums,appears-on-albums,featured-albums,featured-on-albums,singles,compilation-albums,live-albums,latest-release,top-music-videos,similar-artists,top-songs,playlists,more-to-hear,more-to-see", - "extend": "artistBio,bornOrFormed,editorialArtwork,editorialVideo,isGroup,origin,hero", - "extend[playlists]": "trackCount", - "include[songs]": "albums", - "fields[albums]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,editorialVideo,name,playParams,releaseDate,url,trackCount", - "limit[artists:top-songs]": 20, - "art[url]": "f", - l: this.mklang - }, { includeResponseMeta: !0 }) - console.log(artistData.data.data[0]) - this.artistPage.data = artistData.data.data[0] - this.page = "artist-page" - }, - progressBarStyle() { - let val = this.playerLCD.playbackDuration - if (this.playerLCD.desiredDuration > 0) { - val = this.playerLCD.desiredDuration - } - let min = 0 - let max = this.mk.currentPlaybackDuration - let value = (val - min) / (max - min) * 100 - return { - 'background': ('linear-gradient(to right, var(--songProgressColor) 0%, var(--songProgressColor) ' + value + '%, var(--songProgressBackground) ' + value + '%, var(--songProgressBackground) 100%)') - } - }, - async getRecursive(response) { - // if response has a .next() property run it and keep running until .next is null or undefined - // and then return the response concatenated with the results of the next() call - function executeRequest() { - if (response.next) { - return response.next().then(executeRequest) - } else { - return response - } - } - - return executeRequest() - }, - async getRecursive2(response, sendTo) { - let returnData = { - "data": [], - "meta": {} - } - if (response.next) { - console.log("has next") - returnData.data.concat(response.data) - returnData.meta = response.meta - return await this.getRecursive(await response.next()) - } else { - console.log("no next") - returnData.data.concat(response.data) - return returnData - } - }, - async getSearchHints() { - if (this.search.term == "") { - this.search.hints = [] - return - } - let hints = await (await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/search/hints?term=${this.search.term}`)).data.results - this.search.hints = hints ? hints.terms : [] - }, - getSongProgress() { - if (this.playerLCD.userInteraction) { - return this.playerLCD.desiredDuration - } else { - return this.playerLCD.playbackDuration - } - }, - /** - * Converts seconds to dd:hh:mm:ss - * @param time (in seconds) - * @param format (short, long) - * @returns {string} - */ - convertTime(time, format = 'short') { - if (typeof time !== "number") { - time = parseInt(time) - } - - const timeGates = { - 600: 15, // 10 Minutes - 3600: 14, // Hour - 36000: 12, // 10 Hours - } - - const datetime = new Date(time * 1000) - - let returnTime = datetime.toISOString().substring(11, 19); - for (let key in timeGates) { - if (time < key) { - returnTime = datetime.toISOString().substring(timeGates[key], 19) - break - } - } - - // Add the days on the front - let day; - if (time >= 86400) { - day = datetime.toISOString().substring(8, 10) - day = parseInt(day) - 1 - returnTime = day + ":" + returnTime - } - - if (format === 'long') { - const longFormat = [] - - // Seconds - if (datetime.getSeconds() !== 0) { - longFormat.push(`${datetime.getSeconds()} ${app.getLz('term.time.seconds')}`) - } - - // Minutes - if (time >= 60) { - longFormat.push(`${datetime.getMinutes()} ${app.getLz('term.time.minute', options = { count: datetime.getMinutes() })}`) - } - - // Hours - if (time >= 3600) { - longFormat.push(`${datetime.getHours()} ${app.getLz('term.time.hour', options = { count: datetime.getHours() })}`) - } - - // Days - if (time >= 86400) { - longFormat.push(`${day} ${app.getLz('term.time.day', options = { count: day })}`) - } - returnTime = longFormat.reverse().join(', ') - } - - return returnTime - }, - hashCode(str) { - let hash = 0, - i, chr; - if (str.length === 0) return hash; - for (i = 0; i < str.length; i++) { - chr = str.charCodeAt(i); - hash = ((hash << 5) - hash) + chr; - hash |= 0; // Convert to 32bit integer - } - return hash; - }, - appRoute(route) { - console.log(route) - if (route == "" || route == "#" || route == "/") { - return; - } - route = route.replace(/#/g, "") - // if the route contains does not include a / then route to the page directly - if (route.indexOf("/") == -1) { - this.page = route - window.location.hash = this.page - // if (this.page == "settings") { - // this.version - // } - return - } - let hash = route.split("/") - let page = hash[0] - let id = hash[1] - let isLibrary = hash[2] ?? false - console.log(`page: ${page} id: ${id} isLibrary: ${isLibrary}`) - this.routeView({ - kind: page, - id: id, - attributes: { - playParams: { kind: page, id: id, isLibrary: isLibrary } - } - }) - }, - routeView(item) { - let kind = (item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')) : (item.type ?? '')); - let id = (item.attributes.playParams ? (item.attributes.playParams.id ?? (item.id ?? '')) : (item.id ?? '')); - ; - let isLibrary = item.attributes.playParams ? (item.attributes.playParams.isLibrary ?? false) : false; - console.log(kind, id, isLibrary) - if (kind.includes("playlist") || kind.includes("album")) { - app.showingPlaylist = []; - } - if (kind.toString().includes("apple-curator")) { - kind = "appleCurator" - app.getTypeFromID("appleCurator", (id), false, { - platform: "web", - include: "grouping,playlists", - extend: "editorialArtwork", - "art[url]": "f" - }); - window.location.hash = `${kind}/${id}` - document.querySelector("#app-content").scrollTop = 0 - } else if (kind.toString().includes("artist")) { - app.getArtistInfo(id, isLibrary) - window.location.hash = `${kind}/${id}${isLibrary ? "/" + isLibrary : ''}` - document.querySelector("#app-content").scrollTop = 0 - - } else if (kind.toString().includes("record-label") || kind.toString().includes("curator")) { - if (kind.toString().includes("record-label")) { - kind = "recordLabel" - } else { - kind = "curator" - } - app.page = (kind) + "_" + (id); - app.getTypeFromID((kind), (id), (isLibrary), { - extend: "editorialVideo", - include: 'grouping,playlists', - views: 'top-releases,latest-releases,top-artists' - }); - window.location.hash = `${kind}/${id}` - document.querySelector("#app-content").scrollTop = 0 - } else if (!kind.toString().includes("radioStation") && !kind.toString().includes("song") && !kind.toString().includes("musicVideo") && !kind.toString().includes("uploadedVideo") && !kind.toString().includes("music-movie")) { - let params = { - extend: "offers,editorialVideo", - "views": "appears-on,more-by-artist,related-videos,other-versions,you-might-also-like,video-extras,audio-extras", - } - if (kind.includes("playlist")) { - params["include"] = "tracks"; - } - if (kind.includes("album")) { - params["include[albums]"] = "artists" - params["fields[artists]"] = "name,url" - params["fields[albums]"] = "artistName,artistUrl,artwork,contentRating,editorialArtwork,editorialVideo,name,playParams,releaseDate,url,copyright" - } - - if (this.cfg.advanced.experiments.includes('inline-playlists')) { - let showModal = kind.toString().includes("album") || kind.toString().includes("playlist") - if (app.page.includes("playlist") || app.page.includes("album")) { - showModal = false - } - if (showModal) { - app.modals.showPlaylist = true - app.chrome.contentAreaScrolling = false - } else { - app.page = (kind) + "_" + (id); - window.location.hash = `${kind}/${id}${isLibrary ? "/" + isLibrary : ''}` - } - } else { - app.page = (kind) + "_" + (id); - window.location.hash = `${kind}/${id}${isLibrary ? "/" + isLibrary : ''}` - } - - - app.getTypeFromID((kind), (id), (isLibrary), params); - // document.querySelector("#app-content").scrollTop = 0 - } else { - app.playMediaItemById((id), (kind), (isLibrary), item.attributes.url ?? '') - } - }, - prevButton() { - if (!app.prevButtonBackIndicator && app.mk.nowPlayingItem && app.mk.currentPlaybackTime > 2) { - app.prevButtonBackIndicator = true; - try { - clearTimeout(app.pauseButtonTimer) - } catch (e) { - } - app.mk.seekToTime(0); - app.pauseButtonTimer = setTimeout(() => { - app.prevButtonBackIndicator = false - }, 3000); - } else { - try { - clearTimeout(app.pauseButtonTimer) - } catch (e) { - } - app.prevButtonBackIndicator = false; - app.skipToPreviousItem() - } - }, - async getNowPlayingItemDetailed(target) { - try { - let u = await app.mkapi(app.mk.nowPlayingItem.playParams.kind, - (app.mk.nowPlayingItem.songId == -1), - (app.mk.nowPlayingItem.songId != -1) ? app.mk.nowPlayingItem.songId : app.mk.nowPlayingItem["id"], - { "include[songs]": "albums,artists", l: app.mklang }); - app.searchAndNavigate(u.data.data[0], target) - } catch (e) { - app.searchAndNavigate(app.mk.nowPlayingItem, target) - } - }, - async searchAndNavigate(item, target) { - let self = this - app.tmpVar = item; - switch (target) { - case "artist": - let artistId = ''; - try { - if (item.relationships.artists && item.relationships.artists.data.length > 0 && !item.relationships.artists.data[0].type.includes("library")) { - if (item.relationships.artists.data[0].type === "artist" || item.relationships.artists.data[0].type === "artists") { - artistId = item.relationships.artists.data[0].id - } - } - if (artistId == '') { - const url = (item.relationships.catalog.data[0].attributes.artistUrl); - artistId = (url).substring(url.lastIndexOf('/') + 1) - if (artistId.includes('viewCollaboration')) { - artistId = artistId.substring(artistId.lastIndexOf('ids=') + 4, artistId.lastIndexOf('-')) - } - } - } catch (_) { - } - - if (artistId == "") { - let artistQuery = (await app.mk.api.v3.music(`v1/catalog/${app.mk.storefrontId}/search?term=${item.attributes.artistName}`, { - limit: 1, - types: 'artists' - })).data.results; - try { - if (artistQuery.artists.data.length > 0) { - artistId = artistQuery.artists.data[0].id; - console.log(artistId) - } - } catch (e) { - } - } - console.log(artistId); - if (artistId != "") - self.appRoute(`artist/${artistId}`) - break; - case "album": - let albumId = ''; - try { - if ((item.type ?? item.playParams?.kind ?? "") == "albums") { - albumId = item.id ?? "" - } else if (item.relationships.albums && item.relationships.albums.data.length > 0 && !item.relationships.albums.data[0].type.includes("library")) { - if (item.relationships.albums.data[0].type === "album" || item.relationships.albums.data[0].type === "albums") { - albumId = item.relationships.albums.data[0].id - } - } - if (albumId == '') { - const url = (item.relationships.catalog.data[0].attributes.url); - albumId = (url).substring(url.lastIndexOf('/') + 1) - if (albumId.includes("?i=")) { - albumId = albumId.substring(0, albumId.indexOf("?i=")) - } - } - } catch (_) { - } - - if (albumId == "") { - try { - let albumQuery = (await app.mk.api.v3.music(`v1/catalog/${app.mk.storefrontId}/search?term=${(item.attributes.albumName ?? item.attributes.name ?? "") + " " + (item.attributes.artistName ?? "")}`, { - limit: 1, - types: 'albums' - })).data.results; - if (albumQuery.albums.data.length > 0) { - albumId = albumQuery.albums.data[0].id; - console.log(albumId) - } - } catch (e) { - } - } - if (albumId != "") { - self.appRoute(`album/${albumId}`) - } - break; - case "recordLabel": - let labelId = ''; - try { - labelId = item.relationships['record-labels'].data[0].id - } catch (_) { - } - - if (labelId == "") { - try { - let labelQuery = (await app.mk.api.v3.music(`v1/catalog/${app.mk.storefrontId}/search?term=${item.attributes.recordLabel}`, { - limit: 1, - types: 'record-labels' - })).data.results; - if (labelQuery["record-labels"].data.length > 0) { - labelId = labelQuery["record-labels"].data[0].id; - console.log(labelId) - } - } catch (e) { - } - } - if (labelId != "") { - app.showingPlaylist = [] - await app.getTypeFromID("recordLabel", labelId, false, { views: 'top-releases,latest-releases,top-artists' }); - app.page = "recordLabel_" + labelId; - } - - break; - } - }, - exitMV() { - MusicKit.getInstance().stop() - document.getElementById("apple-music-video-container").style.display = "none"; - }, - getArtistInfo(id, isLibrary) { - this.getArtistFromID(id) - //this.getTypeFromID("artist",id,isLibrary,query) - }, - followArtistById(id, follow) { - if (follow && !this.followingArtist(id)) { - this.cfg.home.followedArtists.push(id) - } else { - let index = this.cfg.home.followedArtists.indexOf(id) - if (index > -1) { - this.cfg.home.followedArtists.splice(index, 1) - } - } - }, - followingArtist(id) { - console.log(`check for ${id}`) - return this.cfg.home.followedArtists.includes(id) - }, - playMediaItem(item) { - let kind = (item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')) : (item.type ?? '')); - let id = (item.attributes.playParams ? (item.attributes.playParams.id ?? (item.id ?? '')) : (item.id ?? '')); - ; - let isLibrary = item.attributes.playParams ? (item.attributes.playParams.isLibrary ?? false) : false; - let truekind = (!kind.endsWith("s")) ? (kind + "s") : kind; - console.log(kind, id, isLibrary) - app.mk.stop().then(() => { - if (kind.includes("artist")) { - app.mk.setStationQueue({ artist: 'a-' + id }).then(() => { - app.mk.play() - }) - } - // else if (kind.includes("playlist") && (id.startsWith("p.") || id.startsWith("pl."))){ - // /* Randomize array in-place using Durstenfeld shuffle algorithm */ - // function shuffleArray(array) { - // for (var i = array.length - 1; i > 0; i--) { - // var j = Math.floor(Math.random() * (i + 1)); - // var temp = array[i]; - // array[i] = array[j]; - // array[j] = temp; - // } - // } - // app.mk.clearQueue().then(function () { { - // app.mk.setQueue({[truekind]: [item.attributes.playParams.id ?? item.id]}).then(function () { - // app.mk.play().then(function (){ - // app.mk.clearQueue().then(function (){ - // var playlistId = id - // const params = { - // include: "tracks", - // platform: "web", - // "include[library-playlists]": "catalog,tracks", - // "fields[playlists]": "curatorName,playlistType,name,artwork,url", - // "include[library-songs]": "catalog,artists,albums", - // "fields[catalog]": "artistUrl,albumUrl", - // "fields[songs]": "artistUrl,albumUrl" - // } - // var playlistId = '' - - // try { - // function getPlaylist(id, params, isLibrary){ - // if (isLibrary){ - // return app.mk.api.library.playlist(id, params) - // } else { return app.mk.api.playlist(id, params)} - // } - // getPlaylist(id, params, isLibrary).then(res => { - // let query = res.relationships.tracks.data.map(item => new MusicKit.MediaItem(item)); - // if (app.mk.shuffleMode == 1){shuffleArray(query); console.log('shf')} - // app.mk.queue.append(query) - // if (!res.relationships.tracks.next) { - // return - // } else { - // getPlaylistTracks(res.relationships.tracks.next) - // } - - // function getPlaylistTracks(next) { - // app.apiCall(app.musicBaseUrl + next, res => { - // if (res.id != playlistId) { - // return - // } - // let query = res.data.map(item => new MusicKit.MediaItem(item)) - // if (app.mk.shuffleMode == 1){shuffleArray(query); console.log('shf')} - // app.mk.queue.append(query) - - // if (res.next) { - // getPlaylistTracks(res.next) - // } - // }) - // } - // }) - // } catch (e) {} - - - // }) - // }) - // }) - // } - // }) - // } - else { - app.playMediaItemById((id), (kind), (isLibrary), item.attributes.url ?? '') - } - }) - }, - async getTypeFromID(kind, id, isLibrary = false, params = {}, params2 = {}) { - let a; - if (kind == "album" | kind == "albums") { - params["include"] = "tracks,artists,record-labels,catalog"; - } - params['l'] = this.mklang; - try { - a = await this.mkapi(kind.toString(), isLibrary, id.toString(), params, params2); - } catch (e) { - console.log(e); - try { - a = await this.mkapi(kind.toString(), !isLibrary, id.toString(), params, params2); - } catch (err) { - console.log(err); - a = [] - } finally { - if (kind == "appleCurator") { - app.appleCurator = a.data.data[0] - } else { - this.getPlaylistContinuous(a, true) - } - } - } finally { - if (kind == "appleCurator") { - app.appleCurator = a.data.data[0] - } else { - this.getPlaylistContinuous(a, true) - } - } - ; - }, - searchLibrarySongs() { - let self = this - let prefs = this.cfg.libraryPrefs.songs - let albumAdded = self.library?.albums?.listing?.map(function (i) { - return { [i.id]: i.attributes?.dateAdded } - }) - let startTime = new Date().getTime() - - function sortSongs() { - // sort this.library.songs.displayListing by song.attributes[self.library.songs.sorting] in descending or ascending order based on alphabetical order and numeric order - // check if song.attributes[self.library.songs.sorting] is a number and if so, sort by number if not, sort by alphabetical order ignoring case - self.library.songs.displayListing.sort((a, b) => { - let aa = a.attributes[prefs.sort] - let bb = b.attributes[prefs.sort] - if (prefs.sort == "genre") { - aa = a.attributes.genreNames[0] - bb = b.attributes.genreNames[0] - } - if (prefs.sort == "dateAdded") { - let albumida = a.relationships?.albums?.data[0]?.id ?? '1970-01-01T00:01:01Z' - let albumidb = b.relationships?.albums?.data[0]?.id ?? '1970-01-01T00:01:01Z' - aa = startTime - new Date(((albumAdded.find(i => i[albumida])) ?? [])[albumida] ?? '1970-01-01T00:01:01Z').getTime() - bb = startTime - new Date(((albumAdded.find(i => i[albumidb])) ?? [])[albumidb] ?? '1970-01-01T00:01:01Z').getTime() - } - if (aa == null) { - aa = "" - } - if (bb == null) { - bb = "" - } - if (prefs.sortOrder == "asc") { - if (aa.toString().match(/^\d+$/) && bb.toString().match(/^\d+$/)) { - return aa - bb - } else { - return aa.toString().toLowerCase().localeCompare(bb.toString().toLowerCase()) - } - } else if (prefs.sortOrder == "desc") { - if (aa.toString().match(/^\d+$/) && bb.toString().match(/^\d+$/)) { - return bb - aa - } else { - return bb.toString().toLowerCase().localeCompare(aa.toString().toLowerCase()) - } - } - }) - } - - if (this.library.songs.search == "") { - this.library.songs.displayListing = this.library.songs.listing - sortSongs() - } else { - this.library.songs.displayListing = this.library.songs.listing.filter(item => { - let itemName = item.attributes.name.toLowerCase() - let searchTerm = this.library.songs.search.toLowerCase() - let artistName = "" - let albumName = "" - if (item.attributes.artistName != null) { - artistName = item.attributes.artistName.toLowerCase() - } - if (item.attributes.albumName != null) { - albumName = item.attributes.albumName.toLowerCase() - } - - // remove any non-alphanumeric characters and spaces from search term and item name - searchTerm = searchTerm.replace(/[^a-z0-9 ]/gi, "") - itemName = itemName.replace(/[^a-z0-9 ]/gi, "") - artistName = artistName.replace(/[^a-z0-9 ]/gi, "") - albumName = albumName.replace(/[^a-z0-9 ]/gi, "") - - if (itemName.includes(searchTerm) || artistName.includes(searchTerm) || albumName.includes(searchTerm)) { - return item - } - }) - sortSongs() - } - }, - getAlbumSort() { - this.library.albums.sortOrder[1] = this.cfg.libraryPrefs.albums.sortOrder; - this.library.albums.sorting[1] = this.cfg.libraryPrefs.albums.sort; - }, - // make a copy of searchLibrarySongs except use Albums instead of Songs - searchLibraryAlbums(index) { - let self = this - - function sortAlbums() { - // sort this.library.albums.displayListing by album.attributes[self.library.albums.sorting[index]] in descending or ascending order based on alphabetical order and numeric order - // check if album.attributes[self.library.albums.sorting[index]] is a number and if so, sort by number if not, sort by alphabetical order ignoring case - self.library.albums.displayListing.sort((a, b) => { - let aa = a.attributes[self.library.albums.sorting[index]] - let bb = b.attributes[self.library.albums.sorting[index]] - if (self.library.albums.sorting[index] == "genre") { - aa = a.attributes.genreNames[0] - bb = b.attributes.genreNames[0] - } - if (aa == null) { - aa = "" - } - if (bb == null) { - bb = "" - } - if (self.library.albums.sortOrder[index] == "asc") { - if (aa.toString().match(/^\d+$/) && bb.toString().match(/^\d+$/)) { - return aa - bb - } else { - return aa.toString().toLowerCase().localeCompare(bb.toString().toLowerCase()) - } - } else if (self.library.albums.sortOrder[index] == "desc") { - if (aa.toString().match(/^\d+$/) && bb.toString().match(/^\d+$/)) { - return bb - aa - } else { - return bb.toString().toLowerCase().localeCompare(aa.toString().toLowerCase()) - } - } - }) - } - - if (this.library.albums.search == "") { - this.library.albums.displayListing = this.library.albums.listing - sortAlbums() - } else { - this.library.albums.displayListing = this.library.albums.listing.filter(item => { - let itemName = item.attributes.name.toLowerCase() - let searchTerm = this.library.albums.search.toLowerCase() - let artistName = "" - let albumName = "" - if (item.attributes.artistName != null) { - artistName = item.attributes.artistName.toLowerCase() - } - if (item.attributes.albumName != null) { - albumName = item.attributes.albumName.toLowerCase() - } - - // remove any non-alphanumeric characters and spaces from search term and item name - searchTerm = searchTerm.replace(/[^a-z0-9 ]/gi, "") - itemName = itemName.replace(/[^a-z0-9 ]/gi, "") - artistName = artistName.replace(/[^a-z0-9 ]/gi, "") - albumName = albumName.replace(/[^a-z0-9 ]/gi, "") - - if (itemName.includes(searchTerm) || artistName.includes(searchTerm) || albumName.includes(searchTerm)) { - return item - } - }) - sortAlbums() - } - }, - // make a copy of searchLibrarySongs except use Albums instead of Songs - searchLibraryArtists(index) { - let self = this - - function sortArtists() { - // sort this.library.albums.displayListing by album.attributes[self.library.albums.sorting[index]] in descending or ascending order based on alphabetical order and numeric order - // check if album.attributes[self.library.albums.sorting[index]] is a number and if so, sort by number if not, sort by alphabetical order ignoring case - self.library.artists.displayListing.sort((a, b) => { - let aa = a.attributes[self.library.artists.sorting[index]] - let bb = b.attributes[self.library.artists.sorting[index]] - if (self.library.artists.sorting[index] == "genre") { - aa = a.attributes.genreNames[0] - bb = b.attributes.genreNames[0] - } - if (aa == null) { - aa = "" - } - if (bb == null) { - bb = "" - } - if (self.library.artists.sortOrder[index] == "asc") { - if (aa.toString().match(/^\d+$/) && bb.toString().match(/^\d+$/)) { - return aa - bb - } else { - return aa.toString().toLowerCase().localeCompare(bb.toString().toLowerCase()) - } - } else if (self.library.artists.sortOrder[index] == "desc") { - if (aa.toString().match(/^\d+$/) && bb.toString().match(/^\d+$/)) { - return bb - aa - } else { - return bb.toString().toLowerCase().localeCompare(aa.toString().toLowerCase()) - } - } - }) - } - - if (this.library.artists.search == "") { - this.library.artists.displayListing = this.library.artists.listing - sortArtists() - } else { - this.library.artists.displayListing = this.library.artists.listing.filter(item => { - let itemName = item.attributes.name.toLowerCase() - let searchTerm = this.library.artists.search.toLowerCase() - let artistName = "" - let albumName = "" - // if (item.attributes.artistName != null) { - // artistName = item.attributes.artistName.toLowerCase() - // } - // if (item.attributes.albumName != null) { - // albumName = item.attributes.albumName.toLowerCase() - // } - - // remove any non-alphanumeric characters and spaces from search term and item name - searchTerm = searchTerm.replace(/[^a-z0-9 ]/gi, "") - itemName = itemName.replace(/[^a-z0-9 ]/gi, "") - - - if (itemName.includes(searchTerm) || artistName.includes(searchTerm) || albumName.includes(searchTerm)) { - return item - } - }) - sortArtists() - } - }, - getSidebarItemClass(page) { - if (this.page == page) { - return ["active"] - } else { - return [] - } - }, - async mkapi(method, library = false, term, params = {}, params2 = {}, attempts = 0) { - if (method.includes(`recordLabel`)) { - method = `record-labels` - } - if (method.includes(`appleCurator`)) { - method = `apple-curators` - } - if (attempts > 3) { - return - } - let truemethod = (!method.endsWith("s")) ? (method + "s") : method; - try { - if (library) { - return await this.mk.api.v3.music(`v1/me/library/${truemethod}/${term.toString()}`, params, params2) - } else { - return await this.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/${truemethod}/${term.toString()}`, params, params2) - } - } catch (e) { - console.log(e) - return await this.mkapi(method, library, term, params, params2, attempts + 1) - } - }, - getLibraryGenres() { - let genres = [] - genres = [] - this.library.songs.listing.forEach((item) => { - item.attributes.genreNames.forEach((genre) => { - if (!genres.includes(genre)) { - genres.push(genre) - } - }) - }) - return genres - }, - async getLibrarySongsFull(force = false) { - let self = this - let library = [] - let cacheId = "library-songs" - let downloaded = null; - if ((this.library.songs.downloadState == 2) && !force) { - return - } - if (this.library.songs.downloadState == 1) { - return - } - let librarySongs = await CiderCache.getCache(cacheId) - if (librarySongs) { - this.library.songs.listing = librarySongs - this.searchLibrarySongs() - } - if (this.songstest) { - return - } - this.library.songs.downloadState = 1 - this.library.backgroundNotification.show = true - this.library.backgroundNotification.message = app.getLz('notification.updatingLibrarySongs') - - function downloadChunk() { - const params = { - "include[library-songs]": "catalog,artists,albums", - "fields[artists]": "name,url,id", - "fields[albums]": "name,url,id", - platform: "web", - "fields[catalog]": "artistUrl,albumUrl", - "fields[songs]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url", - limit: 100, - l: self.mklang - } - const safeparams = { - "platform": "web", - "limit": 80 - } - self.library.songs.downloadState = 1 - if (downloaded == null) { - app.mk.api.v3.music(`/v1/me/library/songs/`, params).then((response) => { - processChunk(response.data) - }).catch((error) => { - console.log('safe loading'); - app.mk.api.v3.music(`/v1/me/library/songs/`, safeparams).then((response) => { - processChunk(response.data) - }).catch((error) => { - console.log('safe loading failed', error) - app.library.songs.downloadState = 2 - app.library.backgroundNotification.show = false - }) - }) - } else { - if (downloaded.next != null) { - app.mk.api.v3.music(downloaded.next, params).then((response) => { - processChunk(response.data) - }).catch((error) => { - console.log('safe loading'); - app.mk.api.v3.music(downloaded.next, safeparams).then((response) => { - processChunk(response.data) - }).catch((error) => { - console.log('safe loading failed', error) - app.library.songs.downloadState = 2 - app.library.backgroundNotification.show = false - }) - }) - } else { - console.log("Download next", downloaded.next) - } - } - } - - function processChunk(response) { - downloaded = response - library = library.concat(downloaded.data) - self.library.backgroundNotification.show = true - self.library.backgroundNotification.message = app.getLz('notification.updatingLibrarySongs') - self.library.backgroundNotification.total = downloaded.meta.total - self.library.backgroundNotification.progress = library.length - - if (downloaded.meta.total == 0) { - self.library.songs.downloadState = 3 - return - } - if (typeof downloaded.next == "undefined") { - console.log("downloaded.next is undefined") - self.library.songs.listing = library - self.library.songs.downloadState = 2 - self.library.backgroundNotification.show = false - self.searchLibrarySongs() - CiderCache.putCache(cacheId, library) - } - if (downloaded.meta.total > library.length || typeof downloaded.meta.next != "undefined") { - console.log(`downloading next chunk - ${library.length} songs so far`) - downloadChunk() - } else { - self.library.songs.listing = library - self.library.songs.downloadState = 2 - self.library.backgroundNotification.show = false - self.searchLibrarySongs() - CiderCache.putCache(cacheId, library) - // console.log(library) - } - } - - downloadChunk() - }, - // copy the getLibrarySongsFull function except change Songs to Albums - async getLibraryAlbumsFull(force = false, index) { - let self = this - let library = [] - let cacheId = "library-albums" - let downloaded = null; - if ((this.library.albums.downloadState == 2 || this.library.albums.downloadState == 1) && !force) { - return - } - let libraryAlbums = await CiderCache.getCache(cacheId) - if (libraryAlbums) { - this.library.albums.listing = libraryAlbums - this.searchLibraryAlbums(index) - } - if (this.songstest) { - return - } - this.library.albums.downloadState = 1 - this.library.backgroundNotification.show = true - this.library.backgroundNotification.message = app.getLz('notification.updatingLibraryAlbums') - - function downloadChunk() { - self.library.albums.downloadState = 1 - const params = { - "include[library-albums]": "catalog,artists,albums", - "fields[artists]": "name,url,id", - "fields[albums]": "name,url,id", - platform: "web", - "fields[catalog]": "artistUrl,albumUrl", - "fields[albums]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url", - limit: 100, - l: self.mklang - } - const safeparams = { - platform: "web", - limit: "60", - "include[library-albums]": "artists", - "include[library-artists]": "catalog", - "include[albums]": "artists", - "fields[artists]": "name,url", - "fields[albums]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url", - "includeOnly": "catalog,artists" - } - if (downloaded == null) { - app.mk.api.v3.music(`/v1/me/library/albums/`, params).then((response) => { - processChunk(response.data) - }).catch((error) => { - console.log('safe loading'); - app.mk.api.v3.music(`/v1/me/library/albums/`, safeparams).then((response) => { - processChunk(response.data) - }).catch((error) => { - console.log('safe loading failed', error) - app.library.albums.downloadState = 2 - app.library.backgroundNotification.show = false - }) - }) - } else { - if (downloaded.next != null) { - app.mk.api.v3.music(downloaded.next, params).then((response) => { - processChunk(response.data) - }).catch((error) => { - console.log('safe loading'); - app.mk.api.v3.music(downloaded.next, safeparams).then((response) => { - processChunk(response.data) - }).catch((error) => { - console.log('safe loading failed', error); - app.library.albums.downloadState = 2 - app.library.backgroundNotification.show = false - }) - }) - } else { - console.log("Download next", downloaded.next) - } - } - } - - function processChunk(response) { - downloaded = response - library = library.concat(downloaded.data) - self.library.backgroundNotification.show = true - self.library.backgroundNotification.message = app.getLz('notification.updatingLibraryAlbums') - self.library.backgroundNotification.total = downloaded.meta.total - self.library.backgroundNotification.progress = library.length - if (downloaded.meta.total == 0) { - self.library.albums.downloadState = 3 - return - } - if (typeof downloaded.next == "undefined") { - console.log("downloaded.next is undefined") - self.library.albums.listing = library - self.library.albums.downloadState = 2 - self.library.backgroundNotification.show = false - CiderCache.putCache(cacheId, library) - self.searchLibraryAlbums(index) - } - if (downloaded.meta.total > library.length || typeof downloaded.meta.next != "undefined") { - console.log(`downloading next chunk - ${library.length - } albums so far`) - downloadChunk() - } else { - self.library.albums.listing = library - self.library.albums.downloadState = 2 - self.library.backgroundNotification.show = false - CiderCache.putCache(cacheId, library) - self.searchLibraryAlbums(index) - // console.log(library) - } - } - - downloadChunk() - }, - // copy the getLibrarySongsFull function except change Songs to Albums - async getLibraryArtistsFull(force = false, index) { - let self = this - let library = [] - let cacheId = "library-artists" - let downloaded = null; - if ((this.library.artists.downloadState == 2 || this.library.artists.downloadState == 1) && !force) { - return - } - let libraryArtists = await CiderCache.getCache(cacheId) - if (libraryArtists) { - this.library.artists.listing = libraryArtists - this.searchLibraryArtists(index) - } - if (this.songstest) { - return - } - this.library.artists.downloadState = 1 - this.library.backgroundNotification.show = true - this.library.backgroundNotification.message = app.getLz('notification.updatingLibraryArtists') - - function downloadChunk() { - self.library.artists.downloadState = 1 - const params = { - include: "catalog", - // "include[library-artists]": "catalog,artists,albums", - // "fields[artists]": "name,url,id", - // "fields[albums]": "name,url,id", - platform: "web", - // "fields[catalog]": "artistUrl,albumUrl", - // "fields[artists]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url", - limit: 100, - l: self.mklang - } - const safeparams = { - include: "catalog", - platform: "web", - limit: 50, - } - if (downloaded == null) { - app.mk.api.v3.music(`/v1/me/library/artists/`, params).then((response) => { - processChunk(response.data) - }).catch((error) => { - console.log('safe loading'); - app.mk.api.v3.music(`/v1/me/library/artists/`, safeparams).then((response) => { - processChunk(response.data) - }).catch((error) => { - console.log('safe loading failed', error) - app.library.artists.downloadState = 2 - app.library.backgroundNotification.show = false - }) - }) - - } else { - if (downloaded.next != null) { - app.mk.api.v3.music(downloaded.next, params).then((response) => { - processChunk(response.data) - }).catch((error) => { - console.log('safe loading'); - app.mk.api.v3.music(downloaded.next, safeparams).then((response) => { - processChunk(response.data) - }).catch((error) => { - console.log('safe loading failed', error) - app.library.artists.downloadState = 2 - app.library.backgroundNotification.show = false - }) - }) - } else { - console.log("Download next", downloaded.next) - } - - } - } - - function processChunk(response) { - downloaded = response - library = library.concat(downloaded.data) - self.library.backgroundNotification.show = true - self.library.backgroundNotification.message = app.getLz('notification.updatingLibraryArtists') - self.library.backgroundNotification.total = downloaded.meta.total - self.library.backgroundNotification.progress = library.length - if (downloaded.meta.total == 0) { - self.library.albums.downloadState = 3 - return - } - if (typeof downloaded.next == "undefined") { - console.log("downloaded.next is undefined") - self.library.artists.listing = library - self.library.artists.downloadState = 2 - self.library.artists.show = false - CiderCache.putCache(cacheId, library) - self.searchLibraryArtists(index) - } - if (downloaded.meta.total > library.length || typeof downloaded.meta.next != "undefined") { - console.log(`downloading next chunk - ${library.length - } artists so far`) - downloadChunk() - } else { - self.library.artists.listing = library - self.library.artists.downloadState = 2 - self.library.backgroundNotification.show = false - CiderCache.putCache(cacheId, library) - self.searchLibraryArtists(index) - // console.log(library) - } - } - - downloadChunk() - }, - getTotalTime() { - try { - if (app.showingPlaylist.relationships.tracks.data.length > 0) { - const timeInSeconds = Math.round([].concat(...app.showingPlaylist.relationships.tracks.data).reduce((a, { attributes: { durationInMillis } }) => a + durationInMillis, 0) / 1000); - return `${app.showingPlaylist.relationships.tracks.data.length} ${app.getLz('term.track', options = { count: app.showingPlaylist.relationships.tracks.data.length })}, ${this.convertTime(timeInSeconds, 'long')}` - } else return "" - } catch (err) { - return "" - } - }, - async getLibrarySongs() { - let response = await this.mkapi("songs", true, "", { limit: 100, l: this.mklang }, { includeResponseMeta: !0 }) - this.library.songs.listing = response.data.data - this.library.songs.meta = response.data.meta - }, - async getLibraryAlbums() { - let response = await this.mkapi("albums", true, "", { limit: 100, l: this.mklang }, { includeResponseMeta: !0 }) - this.library.albums.listing = response.data.data - this.library.albums.meta = response.data.meta - }, - async getListenNow(attempt = 0) { - if (this.listennow.timestamp > Date.now() - 120000) { - return - } - - if (attempt > 3) { - return - } - try { - this.listennow = (await this.mk.api.v3.music(`v1/me/recommendations?timezone=${encodeURIComponent(this.formatTimezoneOffset())}`, { - name: "listen-now", - with: "friendsMix,library,social", - "art[social-profiles:url]": "c", - "art[url]": "c,f", - "omit[resource]": "autos", - "relate[editorial-items]": "contents", - extend: ["editorialCard", "editorialVideo"], - "extend[albums]": ["artistUrl"], - "extend[library-albums]": ["artistUrl", "editorialVideo"], - "extend[playlists]": ["artistNames", "editorialArtwork", "editorialVideo"], - "extend[library-playlists]": ["artistNames", "editorialArtwork", "editorialVideo"], - "extend[social-profiles]": "topGenreNames", - "include[albums]": "artists", - "include[songs]": "artists", - "include[music-videos]": "artists", - "fields[albums]": ["artistName", "artistUrl", "artwork", "contentRating", "editorialArtwork", "editorialVideo", "name", "playParams", "releaseDate", "url"], - "fields[artists]": ["name", "url"], - "extend[stations]": ["airDate", "supportsAirTimeUpdates"], - "meta[stations]": "inflectionPoints", - types: "artists,albums,editorial-items,library-albums,library-playlists,music-movies,music-videos,playlists,stations,uploaded-audios,uploaded-videos,activities,apple-curators,curators,tv-shows,social-upsells", - platform: "web", - l: this.mklang - }, { - includeResponseMeta: !0, - reload: !0 - })).data; - this.listennow.timestamp = Date.now() - console.log(this.listennow) - } catch (e) { - console.log(e) - this.getListenNow(attempt + 1) - } - }, - async getBrowsePage(attempt = 0) { - if (this.browsepage.timestamp > Date.now() - 120000) { - return - } - if (attempt > 3) { - return - } - try { - let browse = await app.mk.api.v3.music(`/v1/editorial/${app.mk.storefrontId}/groupings`, { - platform: "web", - name: "music", - "omit[resource:artists]": "relationships", - "include[albums]": "artists", - "include[songs]": "artists", - "include[music-videos]": "artists", - extend: "editorialArtwork,artistUrl", - "fields[artists]": "name,url,artwork,editorialArtwork,genreNames,editorialNotes", - "art[url]": "f", - l: this.mklang - }); - this.browsepage = browse.data.data[0]; - this.browsepage.timestamp = Date.now() - console.log(this.browsepage) - } catch (e) { - console.log(e) - this.getBrowsePage(attempt + 1) - } - }, - async getRadioStations(attempt = 0) { - if (attempt > 3) { - return - } - try { - this.radio.personal = (await app.mk.api.v3.music(`/v1/me/recent/radio-stations`, { - "platform": "web", - "art[url]": "f", - l: this.mklang - })).data.data; - } catch (e) { - console.log(e) - this.getRadioStations(attempt + 1) - } - }, - async getMadeForYou(attempt = 0) { - if (attempt > 3) { - return - } - try { - mfu = await app.mk.api.v3.music("/v1/me/library/playlists?platform=web&extend=editorialVideo&fields%5Bplaylists%5D=lastModifiedDate&filter%5Bfeatured%5D=made-for-you&include%5Blibrary-playlists%5D=catalog&fields%5Blibrary-playlists%5D=artwork%2Cname%2CplayParams%2CdateAdded") - this.madeforyou = mfu.data - } catch (e) { - console.log(e) - this.getMadeForYou(attempt + 1) - } - }, - newPlaylistFolder(name = app.getLz('term.newPlaylistFolder')) { - let self = this - this.mk.api.v3.music( - "/v1/me/library/playlist-folders/", {}, { - fetchOptions: { - method: "POST", - body: JSON.stringify({ - attributes: { name: name } - }) - } - } - ).then((res) => { - let playlist = (res.data.data[0]) - self.playlists.listing.push({ - id: playlist.id, - attributes: { - name: playlist.attributes.name - }, - type: "library-playlist-folders", - parent: "p.playlistsroot" - }) - self.sortPlaylists() - setTimeout(() => { - app.refreshPlaylists() - }, 13000) - }) - }, - showSearch() { - this.page = "search" - }, - loadLyrics() { - const musicType = (MusicKit.getInstance().nowPlayingItem != null) ? MusicKit.getInstance().nowPlayingItem["type"] ?? '' : ''; - console.log("mt", musicType) - if (musicType === "musicVideo") { - this.loadYTLyrics(); - } else { - if (app.cfg.lyrics.enable_mxm) { - this.loadMXM(); - } else { - this.loadAMLyrics(); - } - } - }, - loadAMLyrics() { - const songID = (this.mk.nowPlayingItem != null) ? this.mk.nowPlayingItem["_songId"] ?? (this.mk.nowPlayingItem["songId"] ?? -1) : -1; - // this.getMXM( trackName, artistName, 'en', duration); - if (songID != -1) { - this.mk.api.v3.music(`v1/catalog/${this.mk.storefrontId}/songs/${songID}/lyrics`) - .then((response) => { - this.lyricsMediaItem = response.data?.data[0]?.attributes["ttml"] - this.parseTTML() - }) - } - }, - addToLibrary(id) { - let self = this - this.mk.addToLibrary(id).then((data) => { - self.getLibrarySongsFull(true) - }) - notyf.success(app.getLz('action.addToLibrary.success')); - }, - removeFromLibrary(kind, id) { - let self = this - let truekind = (!kind.endsWith("s")) ? (kind + "s") : kind; - app.mk.api.v3.music(`v1/me/library/${truekind}/${id.toString()}`, {}, { - fetchOptions: { - method: "DELETE" - } - }).then((data) => { - self.getLibrarySongsFull(true) - }) - notyf.success(app.getLz('action.removeFromLibrary.success')) - }, - async loadYTLyrics() { - const track = (this.mk.nowPlayingItem != null) ? this.mk.nowPlayingItem.title ?? '' : ''; - const artist = (this.mk.nowPlayingItem != null) ? this.mk.nowPlayingItem.artistName ?? '' : ''; - const time = (this.mk.nowPlayingItem != null) ? (Math.round((this.mk.nowPlayingItem.attributes["durationInMillis"] ?? -1000) / 1000) ?? -1) : -1; - ipcRenderer.invoke('getYTLyrics', track, artist).then((result) => { - if (result.length > 0) { - let ytid = result[0]['id']['videoId']; - if (app.cfg.lyrics.enable_yt) { - loadYT(ytid, app.cfg.lyrics.mxm_language ?? "en") - } else { - app.loadMXM() - } - } else { - app.loadMXM() - } - - function loadYT(id, lang) { - let req = new XMLHttpRequest(); - let url = `https://www.youtube.com/watch?&v=${id}`; - req.open('GET', url, true); - req.onerror = function (e) { - this.loadMXM(); - } - req.onload = function () { - // console.log(this.responseText); - res = this.responseText; - let captionurl1 = res.substring(res.indexOf(`{"playerCaptionsRenderer":{"baseUrl":"`) + (`{"playerCaptionsRenderer":{"baseUrl":"`).length); - let captionurl = captionurl1.substring(0, captionurl1.indexOf(`"`)); - if (captionurl.includes("timedtext")) { - let json = JSON.parse(`{"url": "${captionurl}"}`); - let newurl = json.url + `&lang=${lang}&format=ttml` - - let req2 = new XMLHttpRequest(); - - req2.open('GET', newurl, true); - req2.onerror = function (e) { - app.loadMXM(); - } - req2.onload = function () { - try { - const ttmlLyrics = this.responseText; - if (ttmlLyrics) { - this.lyricsMediaItem = ttmlLyrics - this.parseTTML() - } - } catch (e) { - app.loadMXM(); - } - - } - req2.send(); - } else { - - app.loadMXM(); - - } - } - req.send(); - } - - }) - - }, - loadMXM() { - let attempt = 0; - const track = encodeURIComponent((this.mk.nowPlayingItem != null) ? this.mk.nowPlayingItem.title ?? '' : ''); - const artist = encodeURIComponent((this.mk.nowPlayingItem != null) ? this.mk.nowPlayingItem.artistName ?? '' : ''); - const time = encodeURIComponent((this.mk.nowPlayingItem != null) ? (Math.round((this.mk.nowPlayingItem.attributes["durationInMillis"] ?? -1000) / 1000) ?? -1) : -1); - const id = encodeURIComponent((this.mk.nowPlayingItem != null) ? app.mk.nowPlayingItem._songId ?? (app.mk.nowPlayingItem["songId"] ?? '') : ''); - let lrcfile = ""; - let richsync = []; - const lang = app.cfg.lyrics.mxm_language // translation language - function revisedRandId() { - return Math.random().toString(36).replace(/[^a-z]+/g, '').slice(2, 10); - } - - /* get token */ - function getToken(mode, track, artist, songid, lang, time, id) { - if (attempt > 2) { - app.loadAMLyrics(); - } else { - attempt = attempt + 1; - let url = "https://apic-desktop.musixmatch.com/ws/1.1/token.get?app_id=web-desktop-app-v1.0&t=" + revisedRandId(); - let req = new XMLHttpRequest(); - req.overrideMimeType("application/json"); - req.open('GET', url, true); - req.setRequestHeader("authority", "apic-desktop.musixmatch.com"); - req.onload = function () { - let jsonResponse = JSON.parse(this.responseText); - let status2 = jsonResponse["message"]["header"]["status_code"]; - if (status2 == 200) { - let token = jsonResponse["message"]["body"]["user_token"] ?? ''; - if (token != "" && token != "UpgradeOnlyUpgradeOnlyUpgradeOnlyUpgradeOnly") { - console.log('200 token', mode); - // token good - app.mxmtoken = token; - - if (mode == 1) { - getMXMSubs(track, artist, app.mxmtoken, lang, time, id); - } else { - getMXMTrans(songid, lang, app.mxmtoken); - } - } else { - console.log('fake 200 token'); - getToken(mode, track, artist, songid, lang, time) - } - } else { - console.log('token 4xx'); - getToken(mode, track, artist, songid, lang, time) - } - - }; - req.onerror = function () { - console.log('error'); - app.loadAMLyrics(); - }; - req.send(); - } - } - - function getMXMSubs(track, artist, token, lang, time, id) { - let usertoken = encodeURIComponent(token); - let richsyncQuery = (app.cfg.lyrics.mxm_karaoke) ? "&optional_calls=track.richsync" : "" - let timecustom = (!time || (time && time < 0)) ? '' : `&f_subtitle_length=${time}&q_duration=${time}&f_subtitle_length_max_deviation=40`; - let itunesid = (id && id != "") ? `&track_itunes_id=${id}` : ''; - let url = "https://apic-desktop.musixmatch.com/ws/1.1/macro.subtitles.get?format=json&namespace=lyrics_richsynched" + richsyncQuery + "&subtitle_format=lrc&q_artist=" + artist + "&q_track=" + track + itunesid + "&usertoken=" + usertoken + timecustom + "&app_id=web-desktop-app-v1.0&t=" + revisedRandId(); - let req = new XMLHttpRequest(); - req.overrideMimeType("application/json"); - req.open('GET', url, true); - req.setRequestHeader("authority", "apic-desktop.musixmatch.com"); - req.onload = function () { - let jsonResponse = JSON.parse(this.responseText); - console.log(jsonResponse); - let status1 = jsonResponse["message"]["header"]["status_code"]; - - if (status1 == 200) { - let id = ''; - try { - if (jsonResponse["message"]["body"]["macro_calls"]["matcher.track.get"]["message"]["header"]["status_code"] == 200 && jsonResponse["message"]["body"]["macro_calls"]["track.subtitles.get"]["message"]["header"]["status_code"] == 200) { - id = jsonResponse["message"]["body"]["macro_calls"]["matcher.track.get"]["message"]["body"]["track"]["track_id"] ?? ''; - lrcfile = jsonResponse["message"]["body"]["macro_calls"]["track.subtitles.get"]["message"]["body"]["subtitle_list"][0]["subtitle"]["subtitle_body"]; - - try { - lrcrich = jsonResponse["message"]["body"]["macro_calls"]["track.richsync.get"]["message"]["body"]["richsync"]["richsync_body"]; - richsync = JSON.parse(lrcrich); - app.richlyrics = richsync; - } catch (_) { - } - } - - if (lrcfile == "") { - app.loadAMLyrics() - } else { - if (richsync == [] || richsync.length == 0) { - console.log("ok"); - // process lrcfile to json here - app.lyricsMediaItem = lrcfile - let u = app.lyricsMediaItem.split(/[\r\n]/); - let preLrc = [] - for (var i = u.length - 1; i >= 0; i--) { - let xline = (/(\[[0-9.:\[\]]*\])+(.*)/).exec(u[i]) - let end = (preLrc.length > 0) ? ((preLrc[preLrc.length - 1].startTime) ?? 99999) : 99999 - preLrc.push({ - startTime: app.toMS(xline[1].substring(1, xline[1].length - 2)) ?? 0, - endTime: end, - line: xline[2], - translation: '' - }) - } - if (preLrc.length > 0) - preLrc.push({ - startTime: 0, - endTime: preLrc[preLrc.length - 1].startTime, - line: "lrcInstrumental", - translation: '' - }); - app.lyrics = preLrc.reverse(); - } else { - preLrc = richsync.map(function (item) { - return { - startTime: item.ts, - endTime: item.te, - line: item.x, - translation: '' - } - }) - if (preLrc.length > 0) - preLrc.unshift({ - startTime: 0, - endTime: preLrc[0].startTime, - line: "lrcInstrumental", - translation: '' - }); - app.lyrics = preLrc; - } - if (lrcfile != null && lrcfile != '' && lang != "disabled") { - // load translation - getMXMTrans(id, lang, token); - } else { - app.loadAMLyrics() - } - } - } catch (e) { - console.log(e); - app.loadAMLyrics() - } - } else { //4xx rejected - getToken(1, track, artist, '', lang, time); - } - } - req.onerror = function () { - console.log('error'); - app.loadAMLyrics(); - }; - req.send(); - } - - function getMXMTrans(id, lang, token) { - if (lang != "disabled" && id != '') { - let usertoken = encodeURIComponent(token); - let url2 = "https://apic-desktop.musixmatch.com/ws/1.1/crowd.track.translations.get?translation_fields_set=minimal&selected_language=" + lang + "&track_id=" + id + "&comment_format=text&part=user&format=json&usertoken=" + usertoken + "&app_id=web-desktop-app-v1.0&t=" + revisedRandId(); - let req2 = new XMLHttpRequest(); - req2.overrideMimeType("application/json"); - req2.open('GET', url2, true); - req2.setRequestHeader("authority", "apic-desktop.musixmatch.com"); - req2.onload = function () { - let jsonResponse2 = JSON.parse(this.responseText); - console.log(jsonResponse2); - let status2 = jsonResponse2["message"]["header"]["status_code"]; - if (status2 == 200) { - try { - let preTrans = [] - let u = app.lyrics; - let translation_list = jsonResponse2["message"]["body"]["translations_list"]; - if (translation_list.length > 0) { - for (var i = 0; i < u.length - 1; i++) { - preTrans[i] = "" - for (var trans_line of translation_list) { - if (u[i].line == " " + trans_line["translation"]["matched_line"] || u[i].line == trans_line["translation"]["matched_line"]) { - u[i].translation = trans_line["translation"]["description"]; - break; - } - } - } - app.lyrics = u; - } - } catch (e) { - /// not found trans -> ignore - } - } else { //4xx rejected - getToken(2, '', '', id, lang, ''); - } - } - req2.send(); - } - - } - - if (track != "" & track != "No Title Found") { - if (app.mxmtoken != null && app.mxmtoken != '') { - getMXMSubs(track, artist, app.mxmtoken, lang, time, id) - } else { - getToken(1, track, artist, '', lang, time); - } - } - }, - toMS(str) { - let rawTime = str.match(/(\d+:)?(\d+:)?(\d+)(\.\d+)?/); - let hours = (rawTime[2] != null) ? (rawTime[1].replace(":", "")) : 0; - let minutes = (rawTime[2] != null) ? (hours * 60 + rawTime[2].replace(":", "") * 1) : ((rawTime[1] != null) ? rawTime[1].replace(":", "") : 0); - let seconds = (rawTime[3] != null) ? (rawTime[3]) : 0; - let milliseconds = (rawTime[4] != null) ? (rawTime[4].replace(".", "")) : 0 - return parseFloat(`${minutes * 60 + seconds * 1}.${milliseconds * 1}`); - }, - parseTTML() { - this.lyrics = []; - let preLrc = []; - let xml = this.stringToXml(this.lyricsMediaItem); - let lyricsLines = xml.getElementsByTagName('p'); - let synced = true; - let endTimes = []; - if (xml.getElementsByTagName('tt')[0].getAttribute("itunes:timing") === "None") { - synced = false; - } - endTimes.push(0); - if (synced) { - for (element of lyricsLines) { - start = this.toMS(element.getAttribute('begin')) - end = this.toMS(element.getAttribute('end')) - if (start - endTimes[endTimes.length - 1] > 5 && endTimes[endTimes.length - 1] != 0) { - preLrc.push({ - startTime: endTimes[endTimes.length - 1], - endTime: start, - line: "lrcInstrumental" - }); - } - preLrc.push({ startTime: start, endTime: end, line: element.textContent }); - endTimes.push(end); - } - // first line dot - if (preLrc.length > 0) - preLrc.unshift({ startTime: 0, endTime: preLrc[0].startTime, line: "lrcInstrumental" }); - } else { - for (element of lyricsLines) { - preLrc.push({ startTime: 9999999, endTime: 9999999, line: element.textContent }); - } - } - this.lyrics = preLrc; - - }, - parseLyrics() { - let xml = this.stringToXml(this.lyricsMediaItem) - let json = xmlToJson(xml); - this.lyrics = json - }, - stringToXml(st) { - // string to xml - let xml = (new DOMParser()).parseFromString(st, "text/xml"); - return xml; - - }, - getCurrentTime() { - return parseFloat(this.hmsToSecondsOnly(this.parseTime(this.mk.nowPlayingItem.attributes.durationInMillis - app.mk.currentPlaybackTimeRemaining * 1000))); - }, - seekTo(time) { - this.mk.seekToTime(time); - }, - parseTime(value) { - let minutes = Math.floor(value / 60000); - let seconds = ((value % 60000) / 1000).toFixed(0); - return minutes + ":" + (seconds < 10 ? '0' : '') + seconds; - }, - parseTimeDecimal(value) { - let minutes = Math.floor(value / 60000); - let seconds = ((value % 60000) / 1000).toFixed(0); - return minutes + "." + (seconds < 10 ? '0' : '') + seconds; - }, - hmsToSecondsOnly(str) { - let p = str.split(':'), - s = 0, - m = 1; - - while (p.length > 0) { - s += m * parseInt(p.pop(), 10); - m *= 60; - } - - return s; - }, - getLyricBGStyle(start, end) { - let currentTime = this.getCurrentTime(); - // let duration = this.mk.nowPlayingItem.attributes.durationInMillis - let start2 = this.hmsToSecondsOnly(start) - let end2 = this.hmsToSecondsOnly(end) - // let currentProgress = ((100 * (currentTime)) / (end2)) - // check if currenttime is between start and end - this.player.lyricsDebug.start = start2 - this.player.lyricsDebug.end = end2 - this.player.lyricsDebug.current = currentTime - if (currentTime >= start2 && currentTime <= end2) { - return { - "--bgSpeed": `${(end2 - start2)}s` - } - } else { - return {} - } - }, - playMediaItemById(id, kind, isLibrary, raurl = "") { - let truekind = (!kind.endsWith("s")) ? (kind + "s") : kind; - console.log(id, truekind, isLibrary) - try { - if (truekind.includes("artist")) { - app.mk.setStationQueue({ artist: 'a-' + id }).then(() => { - app.mk.play() - }) - } else if (truekind == "radioStations") { - this.mk.setStationQueue({ url: raurl }).then(function (queue) { - MusicKit.getInstance().play() - }); - } else { - this.mk.setQueue({ - [truekind]: [id], - parameters: { l: this.mklang } - }).then(function (queue) { - MusicKit.getInstance().play() - }) - } - } catch (err) { - console.log(err) - this.playMediaItemById(id, kind, isLibrary, raurl) - } - }, - queueParentandplayChild(parent, childIndex, item) { - - /* Randomize array in-place using Durstenfeld shuffle algorithm */ - function shuffleArray(array) { - for (var i = array.length - 1; i > 0; i--) { - var j = Math.floor(Math.random() * (i + 1)); - var temp = array[i]; - array[i] = array[j]; - array[j] = temp; - } - } - - let kind = parent.substring(0, parent.indexOf(":")) - let id = parent.substring(parent.indexOf(":") + 1, parent.length) - let truekind = (!kind.endsWith("s")) ? (kind + "s") : kind; - console.log(truekind, id) - - try { - if (app.library.songs.displayListing.length > childIndex && parent == "librarysongs") { - console.log(item) - if (item && ((app.library.songs.displayListing[childIndex].id != item.id))) { - childIndex = app.library.songs.displayListing.indexOf(item) - } - - let query = app.library.songs.displayListing.map(item => new MusicKit.MediaItem(item)); - - - app.mk.stop().then(() => { - if (item) { - app.mk.setQueue({ - [item.attributes.playParams.kind ?? item.type]: item.attributes.playParams.id ?? item.id, - parameters: { l: app.mklang } - }).then(function () { - app.mk.play().then(() => { - if (app.mk.shuffleMode == 1) { - shuffleArray(query) - } else { - for (let i = 0; i < query.length; i++) { - if (query[i].id == item.id) { - query.splice(0, i + 1); - break; - } - } - } - app.mk.queue.append(query) - }) - }) - } else { - app.mk.queue.splice(0, app.mk.queue._itemIDs.length) - if (app.mk.shuffleMode == 1) { - shuffleArray(query) - } - app.mk.queue.append(query) - if (childIndex != -1) { - app.mk.changeToMediaAtIndex(childIndex) - } else { - app.mk.play() - } - - } - }) - } else if (parent.startsWith('listitem-hr')) { - app.mk.stop().then(() => { - if (app.mk.shuffleMode == 1) { - app.mk.setQueue({ - [item.attributes.playParams.kind ?? item.type]: item.attributes.playParams.id ?? item.id - }).then(function () { - app.mk.play().then(() => { - let data = JSON.parse(parent.split('listitem-hr')[1] ?? '[]') - let itemsToPlay = {} - let u = data.map(x => x.id) - try { - data.splice(u.indexOf(item.attributes.playParams.id ?? item.id), 1) - } catch (e) { - } - if (app.mk.shuffleMode == 1) { - shuffleArray(data) - } - data.forEach(item => { - if (!itemsToPlay[item.kind]) { - itemsToPlay[item.kind] = [] - } - itemsToPlay[item.kind].push(item.id) - }) - // loop through itemsToPlay - for (let kind in itemsToPlay) { - let ids = itemsToPlay[kind] - if (ids.length > 0) { - app.mk.playLater({ [kind + "s"]: itemsToPlay[kind] }) - } - } - }) - }) - } else { - let data = JSON.parse(parent.split('listitem-hr')[1] ?? '[]') - let itemsToPlay = {} - data.forEach(item => { - if (!itemsToPlay[item.kind]) { - itemsToPlay[item.kind] = [] - } - itemsToPlay[item.kind].push(item.id) - }) - // loop through itemsToPlay - app.mk.queue.splice(0, app.mk.queue._itemIDs.length) - let ind = 0; - for (let kind in itemsToPlay) { - let ids = itemsToPlay[kind] - if (ids.length > 0) { - if (app.mk.queue._itemIDs.length > 0) { - app.mk.playLater({ [kind + "s"]: itemsToPlay[kind] }).then(function () { - ind += 1; - console.log(ind, Object.keys(itemsToPlay).length) - if (ind >= Object.keys(itemsToPlay).length) { - app.mk.changeToMediaAtIndex(app.mk.queue._itemIDs.indexOf(item.attributes.playParams.id ?? item.id)) - } - } - ) - } else { - app.mk.setQueue({ [kind + "s"]: itemsToPlay[kind] }).then(function () { - ind += 1; - console.log(ind, Object.keys(itemsToPlay).length) - if (ind >= Object.keys(itemsToPlay).length) { - app.mk.changeToMediaAtIndex(app.mk.queue._itemIDs.indexOf(item.attributes.playParams.id ?? item.id)) - } - } - ) - } - } - - } - } - }) - } else { - app.mk.stop().then(() => { - if (truekind == "playlists" && (id.startsWith("p.") || id.startsWith("pl.u"))) { - app.mk.setQueue({ - [item.attributes.playParams.kind ?? item.type]: item.attributes.playParams.id ?? item.id, - parameters: { l: app.mklang } - }).then(function () { - app.mk.changeToMediaAtIndex(app.mk.queue._itemIDs.indexOf(item.id) ?? 1).then(function () { - if ((app.showingPlaylist && app.showingPlaylist.id == id)) { - let query = app.showingPlaylist.relationships.tracks.data.map(item => new MusicKit.MediaItem(item)); - let u = query; - if (app.mk.shuffleMode == 1) { - shuffleArray(u) - } else { - for (let i = 0; i < app.showingPlaylist.relationships.tracks.data.length; i++) { - if (app.showingPlaylist.relationships.tracks.data[i].id == item.id) { - u.splice(0, i + 1); - break; - } - } - } - app.mk.queue.append(u) - } else { - app.getPlaylistFromID(id, true).then(function () { - let query = app.showingPlaylist.relationships.tracks.data.map(item => new MusicKit.MediaItem(item)); - let u = query; - if (app.mk.shuffleMode == 1) { - shuffleArray(u) - } else { - for (let i = 0; i < app.showingPlaylist.relationships.tracks.data.length; i++) { - if (app.showingPlaylist.relationships.tracks.data[i].id == item.id) { - u.splice(0, i + 1); - break; - } - } - } - app.mk.queue.append(u) - }) - } - }) - - }) - } else { - this.mk.setQueue({ - [truekind]: [id], - parameters: { l: this.mklang } - }).then(function (queue) { - if (item && ((queue._itemIDs[childIndex] != item.id))) { - childIndex = queue._itemIDs.indexOf(item.id) - } - if (childIndex != -1) { - app.mk.changeToMediaAtIndex(childIndex) - } else if (item) { - app.mk.playNext({ - [item.attributes.playParams.kind ?? item.type]: item.attributes.playParams.id ?? item.id - }).then(function () { - app.mk.changeToMediaAtIndex(app.mk.queue._itemIDs.indexOf(item.id) ?? 1) - app.mk.play() - }) - } else { - app.mk.play() - } - }) - } - }) - } - } catch (err) { - console.log(err) - try { - app.mk.stop() - } catch (e) { - } - this.playMediaItemById(item.attributes.playParams.id ?? item.id, item.attributes.playParams.kind ?? item.type, item.attributes.playParams.isLibrary ?? false, item.attributes.url) - } - - }, - friendlyTypes(type) { - // use switch statement to return friendly name for media types "songs,artists,albums,playlists,music-videos,stations,apple-curators,curators" - switch (type) { - case "song": - return app.getLz('term.songs') - break; - case "artist": - return app.getLz('term.artists') - break; - case "album": - return app.getLz('term.albums') - break; - case "playlist": - return app.getLz('term.playlists') - break; - case "music_video": - return app.getLz('term.musicVideos') - break; - case "station": - return app.getLz('term.stations') - break; - case "apple-curator": - return app.getLz('term.appleCurators') - break; - case "radio_show": - return app.getLz('term.radioShows') - break; - case "record_label": - return app.getLz('term.recordLabels') - break; - case "radio_episode": - return app.getLz('podcast.episodes') - break; - case "video_extra": - return app.getLz('term.videoExtras') - break; - case "curator": - return app.getLz('term.curators') - break; - case "top": - return app.getLz('term.top') - break; - default: - return type - break; - } - }, - async searchQuery(term = this.search.term) { - let self = this - if (term == "") { - return - } - //this.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/search?term=${this.search.term}` - this.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/search?term=${encodeURIComponent(this.search.term)}`, { - types: "activities,albums,apple-curators,artists,curators,editorial-items,music-movies,music-videos,playlists,songs,stations,tv-episodes,uploaded-videos,record-labels", - "relate[editorial-items]": "contents", - "include[editorial-items]": "contents", - "include[albums]": "artists", - "include[artists]": "artists", - "include[songs]": "artists,albums", - "include[music-videos]": "artists", - "extend": "artistUrl", - "fields[artists]": "url,name,artwork,hero", - "fields[albums]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,editorialVideo,name,playParams,releaseDate,url", - "with": "serverBubbles,lyricHighlights", - "art[url]": "c,f", - "omit[resource]": "autos", - "platform": "web", - limit: 25, - l: this.mklang - }).then(function (results) { - results.data.results["meta"] = results.data.meta - self.search.results = results.data.results - }) - - await app.mk.api.v3.music(`v1/social/${app.mk.storefrontId}/search?term=${app.search.term}`, { - types: ["playlists", "social-profiles"], - limit: 25, - with: ["serverBubbles", "lyricSnippet"], - "art[url]": "f", - "art[social-profiles:url]": "c" - }, { includeResponseMeta: !0 }).then(function (results) { - results.data.results["meta"] = results.data.meta - self.search.resultsSocial = results.data.results - }) - }, - async inLibrary(items = []) { - let types = [] - - for (let item of items) { - let type = item.type - if (type.slice(-1) != "s") { - type += "s" - } - type = type.replace("library-", "") - let id = item.attributes.playParams.catalogId ?? item.attributes.playParams.id ?? item.id - - let index = types.findIndex(function (type) { - return type.type == this - }, type) - if (index == -1) { - types.push({ type: type, id: [id] }) - } else { - types[index].id.push(id) - } - } - types2 = types.map(function (item) { - return { - [`ids[${item.type}]`]: [item.id] - } - }) - types2 = types2.reduce(function (result, item) { - var key = Object.keys(item)[0]; //first property: a, b, c - result[key] = item[key]; - return result; - }, {}); - return (await this.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}`, { - ...{ - "omit[resource]": "autos", - relate: "library", - fields: "inLibrary" - }, - ...types2 - })).data.data - }, - isInLibrary(playParams) { - let self = this - let id = "" - // ugly code to check if current playback item is in library - if (typeof playParams == "undefined") { - return true - } - if (playParams["isLibrary"]) { - return true - } else if (playParams["catalogId"]) { - id = playParams["catalogId"] - } else if (playParams["id"]) { - id = playParams["id"] - } - let found = this.library.songs.listing.filter((item) => { - if (item["attributes"]) { - if (item["attributes"]["playParams"] && (item["attributes"]["playParams"]["catalogId"] == id)) { - return item; - } - } - }) - if (found.length != 0) { - return true - } else { - return false - } - }, - mkReady() { - if (this.mk["nowPlayingItem"]) { - return true - } else { - return false - } - }, - getMediaItemArtwork(url, height = 64, width) { - if (typeof url == "undefined" || url == "") { - return "https://beta.music.apple.com/assets/product/MissingArtworkMusic.svg" - } - let newurl = `${url.replace('{w}', width ?? height).replace('{h}', height).replace('{f}', "webp").replace('{c}', ((width === 900) ? "sr" : "cc"))}`; - - if (newurl.includes("900x516")) { - newurl = newurl.replace("900x516cc", "900x516sr").replace("900x516bb", "900x516sr"); - } - return newurl - }, - _rgbToRgb(rgb = [0, 0, 0]) { - // if rgb - return `rgb(${rgb[0]},${rgb[1]},${rgb[2]})` - }, - getNowPlayingArtworkBG(size = 32, force = false) { - let self = this - if (typeof this.mk.nowPlayingItem === "undefined") return; - let bginterval = setInterval(() => { - if (!this.mkReady()) { - return "" - } - - try { - if ((this.mk.nowPlayingItem && this.mk.nowPlayingItem["id"] != this.currentTrackID && document.querySelector('.bg-artwork')) || force) { - if (document.querySelector('.bg-artwork')) { - clearInterval(bginterval); - } - this.currentTrackID = this.mk.nowPlayingItem["id"]; - document.querySelector('.bg-artwork').src = ""; - if (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"]) { - getBase64FromUrl(this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"].replace('{w}', size).replace('{h}', size)).then(img => { - document.querySelectorAll('.bg-artwork').forEach(artwork => { - artwork.src = img; - }) - self.$store.commit("setLCDArtwork", img) - }) - try { - clearInterval(bginterval); - } catch (err) { - } - } else { - this.setLibraryArtBG() - } - } else if (this.mk.nowPlayingItem["id"] == this.currentTrackID) { - try { - clearInterval(bginterval); - } catch (err) { - } - } - } catch (e) { - if (this.mk.nowPlayingItem && this.mk.nowPlayingItem["id"] && document.querySelector('.bg-artwork')) { - this.setLibraryArtBG() - try { - clearInterval(bginterval); - } catch (err) { - } - } - } - }, 200) - }, - async getCurrentArtURL() { - try { - let artworkSize = 50 - if (app.getThemeDirective("lcdArtworkSize") != "") { - artworkSize = app.getThemeDirective("lcdArtworkSize") - } else if (this.cfg.visual.directives.windowLayout == "twopanel") { - artworkSize = 70 - } - this.currentArtUrl = ''; - this.currentArtUrlRaw = ''; - if (app.mk.nowPlayingItem != null && app.mk.nowPlayingItem.attributes != null && app.mk.nowPlayingItem.attributes.artwork != null && app.mk.nowPlayingItem.attributes.artwork.url != null && app.mk.nowPlayingItem.attributes.artwork.url != '') { - this.currentArtUrlRaw = (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"] ?? '') - this.currentArtUrl = (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"] ?? '').replace('{w}', artworkSize).replace('{h}', artworkSize); - try { - document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', `url("${this.currentArtUrl}")`); - } catch (e) { - } - } else { - let data = await this.mk.api.v3.music(`/v1/me/library/songs/${this.mk.nowPlayingItem.id}`); - data = data.data.data[0]; - if (data != null && data !== "" && data.attributes != null && data.attributes.artwork != null) { - this.currentArtUrlRaw = (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"] ?? '') - this.currentArtUrl = (data["attributes"]["artwork"]["url"] ?? '').replace('{w}', artworkSize).replace('{h}', artworkSize); - ipcRenderer.send('updateRPCImage', this.currentArtUrl ?? ''); - try { - document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', `url("${this.currentArtUrl}")`); - } catch (e) { - } - } else { - this.currentArtUrlRaw = '' - this.currentArtUrl = ''; - try { - document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', `url("${this.currentArtUrl}")`); - } catch (e) { - } - } - } - } catch (e) { - - } - }, - async setLibraryArt() { - if (typeof this.mk.nowPlayingItem === "undefined") return; - try { - const data = await this.mk.api.v3.music(`/v1/me/library/songs/${this.mk.nowPlayingItem.id}`); - data = data.data.data[0]; - - if (data != null && data !== "") { - document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', 'url("' + (data["attributes"]["artwork"]["url"]).toString() + '")'); - } else { - document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', `url("")`); - } - } catch (e) { - } - }, - async setLibraryArtBG() { - if (typeof this.mk.nowPlayingItem === "undefined") return; - try { - const data = await this.mk.api.v3.music(`/v1/me/library/songs/${this.mk.nowPlayingItem.id}`); - data = data.data.data[0]; - - if (data != null && data !== "") { - getBase64FromUrl((data["attributes"]["artwork"]["url"]).toString()).then(img => { - document.querySelector('.bg-artwork').forEach(artwork => { - artwork.src = img; - }) - self.$store.commit("setLCDArtwork", img) - }) - } - } catch (e) { - } - - }, - quickPlay(query) { - let self = this - MusicKit.getInstance().api.search(query, { limit: 2, types: 'songs' }).then(function (data) { - MusicKit.getInstance().setQueue({ - song: data["songs"]['data'][0]["id"], - parameters: { l: app.mklang } - }).then(function (queue) { - MusicKit.getInstance().play() - setTimeout(() => { - self.$forceUpdate() - }, 1000) - }) - }) - }, - async getRating(item) { - let type = item.type.slice(-1) === "s" ? item.type : item.type + "s" - let id = item.attributes?.playParams?.catalogId ? item.attributes.playParams.catalogId : (item.attributes?.playParams?.id ?? item.id) - if (item.id != null && (item.id.toString()).startsWith("i.")) { - if (!type.startsWith("library-")) { - type = "library-" + type - } - id = item.id - } - let response = await this.mk.api.v3.music(`/v1/me/ratings/${type}?platform=web&ids=${type.includes('library') ? item.id : id}`) - if (response.data.data.length != 0) { - let value = response.data.data[0].attributes.value - return value - } else { - return 0 - } - }, - love(item) { - let type = item.type.slice(-1) === "s" ? item.type : item.type + "s" - let id = item.attributes?.playParams?.catalogId ? item.attributes.playParams.catalogId : (item.attributes?.playParams?.id ?? item.id) - if (item.id != null && (item.id.toString()).startsWith("i.")) { - if (!type.startsWith("library-")) { - type = "library-" + type - } - id = item.id - } - this.mk.api.v3.music(`/v1/me/ratings/${type}/${id}`, {}, { - fetchOptions: { - method: "PUT", - body: JSON.stringify({ - "type": "rating", - "attributes": { - "value": 1 - } - }) - } - }) - }, - dislike(item) { - let type = item.type.slice(-1) === "s" ? item.type : item.type + "s" - let id = item.attributes?.playParams?.catalogId ? item.attributes.playParams.catalogId : (item.attributes?.playParams?.id ?? item.id) - if (item.id != null && (item.id.toString()).startsWith("i.")) { - if (!type.startsWith("library-")) { - type = "library-" + type - } - id = item.id - } - this.mk.api.v3.music(`/v1/me/ratings/${type}/${id}`, {}, { - fetchOptions: { - method: "PUT", - body: JSON.stringify({ - "type": "rating", - "attributes": { - "value": -1 - } - }) - } - }) - }, - unlove(item) { - let type = item.type.slice(-1) === "s" ? item.type : item.type + "s" - let id = item.attributes.playParams.catalogId ? item.attributes.playParams.catalogId : item.id - if (item.id.startsWith("i.")) { - if (!type.startsWith("library-")) { - type = "library-" + type - } - id = item.id - } - this.mk.api.v3.music(`/v1/me/ratings/${type}/${id}`, {}, { - fetchOptions: { - method: "DELETE", - } - }) - }, - checkScrollDirectionIsUp(event) { - if (event.wheelDelta) { - return event.wheelDelta > 0; - } - return event.deltaY < 0; - }, - volumeUp() { - if ((app.mk.volume + app.cfg.audio.volumeStep) > 1) { - app.mk.volume = app.cfg.audio.maxVolume; - console.log('setting max volume') - } else { - console.log('volume up') - app.mk.volume = ((app.mk.volume * 100) + (app.cfg.audio.volumeStep * 100)) / 100 - } - }, - volumeDown() { - if ((app.mk.volume - app.cfg.audio.volumeStep) < 0) { - app.mk.volume = 0; - console.log('setting volume to 0') - } else { - console.log('volume down') - app.mk.volume = ((app.mk.volume * 100) - (app.cfg.audio.volumeStep * 100)) / 100 - } - }, - volumeWheel(event) { - app.checkScrollDirectionIsUp(event) ? this.volumeUp() : this.volumeDown() - }, - muteButtonPressed() { - if (this.cfg.audio.muted) { - this.mk.volume = this.cfg.audio.lastVolume; - this.cfg.audio.muted = false; - } else { - this.cfg.audio.lastVolume = this.cfg.audio.volume; - this.mk.volume = 0; - this.cfg.audio.muted = true; - } - }, - checkMuteChange() { - if (this.cfg.audio.muted) { - this.cfg.audio.muted = false; - } - }, - async apiCall(url, callback) { - const xmlHttp = new XMLHttpRequest(); - - xmlHttp.onreadystatechange = (e) => { - if (xmlHttp.readyState !== 4) { - return; - } - - if (xmlHttp.status === 200) { - // console.log('SUCCESS', xmlHttp.responseText); - callback(JSON.parse(xmlHttp.responseText)); - } else { - console.warn('request_error'); - } - }; - - xmlHttp.open("GET", url); - xmlHttp.setRequestHeader("Authorization", "Bearer " + MusicKit.getInstance().developerToken); - xmlHttp.setRequestHeader("Music-User-Token", "" + MusicKit.getInstance().musicUserToken); - xmlHttp.setRequestHeader("Accept", "application/json"); - xmlHttp.setRequestHeader("Content-Type", "application/json"); - xmlHttp.responseType = "text"; - xmlHttp.send(); - }, - fetchPlaylist(id, callback) { - // id can be found in playlist.attributes.playParams.globalId - // this.mk.api. - this.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/playlists/${id}`).then(res => { - callback(res.data.data[0]) - }) - - // tracks are found in relationship.data - }, - windowFocus(val) { - if (val) { - document.querySelectorAll(".animated-artwork-video").forEach(el => { - el.play() - }) - document.querySelector("body").classList.remove("stopanimation") - this.animateBackground = true - } else { - document.querySelectorAll(".animated-artwork-video").forEach(el => { - el.pause() - }) - document.querySelector("body").classList.add("stopanimation") - this.animateBackground = false - } - }, - async nowPlayingContextMenu(event) { - let self = this - let data_type = this.mk.nowPlayingItem.playParams.kind - let item_id = this.mk.nowPlayingItem.attributes.playParams.id ?? this.mk.nowPlayingItem.id - let isLibrary = this.mk.nowPlayingItem.attributes.playParams.isLibrary ?? false - let params = { "fields[songs]": "inLibrary", "fields[albums]": "inLibrary", "relate": "library", "t": "1" } - app.selectedMediaItems = [] - app.select_selectMediaItem(item_id, data_type, 0, '12344', isLibrary) - let useMenu = "normal" - let menus = { - multiple: { - items: [] - }, - normal: { - headerItems: [{ - "icon": "./assets/feather/heart.svg", - "id": "love", - "name": app.getLz('action.love'), - "hidden": false, - "disabled": true, - "action": function () { - app.love(app.mk.nowPlayingItem) - } - }, - { - "icon": "./assets/feather/heart.svg", - "id": "unlove", - "active": true, - "name": app.getLz('action.unlove'), - "hidden": true, - "action": function () { - app.unlove(app.mk.nowPlayingItem) - } - }, - { - "icon": "./assets/feather/thumbs-down.svg", - "id": "dislike", - "name": app.getLz('action.dislike'), - "hidden": false, - "disabled": true, - "action": function () { - app.dislike(app.mk.nowPlayingItem) - } - }, - { - "icon": "./assets/feather/thumbs-down.svg", - "id": "undo_dislike", - "name": app.getLz('action.undoDislike'), - "active": true, - "hidden": true, - "action": function () { - app.unlove(app.mk.nowPlayingItem) - } - }, - ], - items: [ - { - "icon": "./assets/feather/plus.svg", - "id": "addToLibrary", - "name": app.getLz('action.addToLibrary') + " ...", - "disabled": true, - "action": function () { - app.addToLibrary(app.mk.nowPlayingItem.id); - } - }, - { - "id": "removeFromLibrary", - "icon": "./assets/feather/x-circle.svg", - "name": app.getLz('action.removeFromLibrary'), - "hidden": true, - "action": function () { - self.removeFromLibrary() - } - }, - { - "icon": "./assets/feather/list.svg", - "name": app.getLz('action.addToPlaylist') + " ...", - "action": function () { - app.promptAddToPlaylist() - } - }, - { - "icon": "./assets/feather/radio.svg", - "name": app.getLz('action.startRadio'), - "action": function () { - app.mk.setStationQueue({ song: app.mk.nowPlayingItem.id }).then(() => { - app.mk.play() - app.selectedMediaItems = [] - }) - } - }, - { - "icon": "./assets/feather/user.svg", - "name": app.getLz('action.goToArtist'), - "action": function () { - app.appRoute(`artist/${app.mk.nowPlayingItem.relationships.artists.data[0].id}`) - } - }, - { - "icon": "./assets/feather/disc.svg", - "name": app.getLz('action.goToAlbum'), - "action": function () { - app.appRoute(`album/${app.mk.nowPlayingItem.relationships.albums.data[0].id}`) - } - }, - { - "icon": "./assets/feather/share.svg", - "name": app.getLz('action.share'), - "action": function () { - app.mkapi(app.mk.nowPlayingItem.attributes?.playParams?.kind ?? app.mk.nowPlayingItem.type ?? 'songs', false, app.mk.nowPlayingItem._songId ?? (app.mk.nowPlayingItem.songId ?? app.mk.nowPlayingItem.id) ?? '').then(u => { - app.copyToClipboard((u.data.data.length && u.data.data.length > 0) ? u.data.data[0].attributes.url : u.data.data.attributes.url) - }) - } - }, - { - "icon": "./assets/feather/share.svg", - "name": `${app.getLz('action.share')} (song.link)`, - "action": function () { - app.mkapi(app.mk.nowPlayingItem.attributes?.playParams?.kind ?? app.mk.nowPlayingItem.type ?? 'songs', false, app.mk.nowPlayingItem._songId ?? (app.mk.nowPlayingItem.songId ?? app.mk.nowPlayingItem.id) ?? '').then(u => { - app.songLinkShare((u.data.data.length && u.data.data.length > 0) ? u.data.data[0].attributes.url : u.data.data.attributes.url) - }) - } - } - ] - } - } - if (this.contextExt) { - if (this.contextExt.normal) { - menus.normal.items = menus.normal.items.concat(this.contextExt.normal) - } - } - this.showMenuPanel(menus[useMenu], event) - - try { - let result = await this.inLibrary([this.mk.nowPlayingItem]) - if (result[0].attributes.inLibrary) { - menus.normal.items.find(x => x.id == 'addToLibrary').hidden = true - menus.normal.items.find(x => x.id == 'removeFromLibrary').hidden = false - } else { - menus.normal.items.find(x => x.id == 'addToLibrary').disabled = false - } - } catch (e) { - e = null - } - - try { - let rating = await app.getRating(app.mk.nowPlayingItem) - if (rating == 0) { - menus.normal.headerItems.find(x => x.id == 'love').disabled = false - menus.normal.headerItems.find(x => x.id == 'dislike').disabled = false - } else if (rating == 1) { - menus.normal.headerItems.find(x => x.id == 'unlove').hidden = false - menus.normal.headerItems.find(x => x.id == 'love').hidden = true - } else if (rating == -1) { - menus.normal.headerItems.find(x => x.id == 'undo_dislike').hidden = false - menus.normal.headerItems.find(x => x.id == 'dislike').hidden = true - } - } catch (err) { - - } - }, - LastFMDeauthorize() { - ipcRenderer.invoke('setStoreValue', 'lastfm.enabled', false).catch((e) => console.error(e)); - ipcRenderer.invoke('setStoreValue', 'lastfm.auth_token', '').catch((e) => console.error(e)); - app.cfg.lastfm.auth_token = ""; - app.cfg.lastfm.enabled = false; - const element = document.getElementById('lfmConnect'); - element.innerHTML = app.getLz('term.connect'); - element.onclick = app.LastFMAuthenticate; - }, - LastFMAuthenticate() { - console.log("[LastFM] Received LastFM authentication callback") - const element = document.getElementById('lfmConnect'); - // new key : f9986d12aab5a0fe66193c559435ede3 - window.open('https://www.last.fm/api/auth?api_key=f9986d12aab5a0fe66193c559435ede3&cb=cider://auth/lastfm'); - element.innerText = app.getLz('term.connecting') + '...'; - - /* Just a timeout for the button */ - setTimeout(() => { - if (element.innerText === app.getLz('term.connecting') + '...') { - element.innerText = app.getLz('term.connect'); - console.warn('[LastFM] Attempted connection timed out.'); - } - }, 20000); - - ipcRenderer.on('LastfmAuthenticated', function (_event, lfmAuthKey) { - app.cfg.lastfm.auth_token = lfmAuthKey; - app.cfg.lastfm.enabled = true; - element.innerHTML = `${app.getLz('term.disconnect')}\n

(${app.getLz('term.authed')}: ${lfmAuthKey})

`; - element.onclick = app.LastFMDeauthorize; - }); - }, - /** - parseSCTagToRG: function (tag) { - let soundcheck = tag.split(" ") - let numbers = [] - for (item of soundcheck) { - numbers.push(parseInt(item, 16)) - - } - numbers.shift() - //let gain = Math.log10((Math.max(numbers[0], numbers[1]) ?? 1000) / 1000.0) * -10 - let peak = Math.max(numbers[6], numbers[7]) / 32768.0 - let gain = Math.pow(10, ((-7.63 - (Math.log10(peak) * 20)) / 20))// EBU R 128 Compliant - return { - gain: gain, - peak: peak - } - },*/ - fullscreen(flag) { - if (flag) { - ipcRenderer.send('setFullScreen', true); - if (app.mk.nowPlayingItem.type && app.mk.nowPlayingItem.type.toLowerCase().includes("video")) { - document.querySelector('video#apple-music-video-player').requestFullscreen() - } else { - app.appMode = 'fullscreen'; - } - document.addEventListener('keydown', event => { - if (event.key === 'Escape' && app.appMode === 'fullscreen') { - this.fullscreen(false); - } - }); - } else { - ipcRenderer.send('setFullScreen', false); - app.appMode = 'player'; - } - }, - miniPlayer(flag) { - if (flag) { - this.tmpWidth = window.innerWidth; - this.tmpHeight = window.innerHeight; - ipcRenderer.send('unmaximize'); - ipcRenderer.send('windowmin', 250, 250) - ipcRenderer.send('windowresize', 300, 300, false) - app.appMode = 'mini'; - } else { - ipcRenderer.send('windowmin', 844, 410) - ipcRenderer.send('windowresize', this.tmpWidth, this.tmpHeight, false) - ipcRenderer.send('windowontop', false) - this.cfg.visual.miniplayer_top_toggle = true; - app.appMode = 'player'; - } - }, - pinMiniPlayer() { - if (this.cfg.visual.miniplayer_top_toggle) { - ipcRenderer.send('windowontop', true) - this.cfg.visual.miniplayer_top_toggle = false - } else { - ipcRenderer.send('windowontop', false) - this.cfg.visual.miniplayer_top_toggle = true; - } - }, - formatTimezoneOffset: (e = new Date) => { - let leadingZeros = (e, s = 2) => { - let n = "" + e; - for (; n.length < s;) - n = "0" + n; - return n - } - - const s = e.getTimezoneOffset(), - n = Math.floor(Math.abs(s) / 60), - d = Math.round(Math.abs(s) % 60); - let h = "+"; - return 0 !== s && (h = s > 0 ? "-" : "+"), - `${h}${leadingZeros(n, 2)}:${leadingZeros(d, 2)}` - }, - toggleHideUserInfo() { - if (this.chrome.hideUserInfo) { - this.cfg.visual.showuserinfo = true - this.chrome.hideUserInfo = false - } else { - this.cfg.visual.showuserinfo = false - this.chrome.hideUserInfo = true - } - }, - isElementOverflowing(selector) { - try { - let element = document.querySelector(selector); - var overflowX = element.offsetWidth < element.scrollWidth, - overflowY = element.offsetHeight < element.scrollHeight; - element.setAttribute('data-value', '\xa0\xa0\xa0\xa0' + element.textContent); - - return (overflowX || overflowY); - } catch (e) { - return false - } - }, - async showWebRemoteQR() { - //this.webremoteqr = await ipcRenderer.invoke('setRemoteQR','') - this.webremoteurl = await ipcRenderer.invoke('showQR', '') - //this.modals.qrcode = true; - }, - checkMarquee() { - if (isElementOverflowing('#app-main > div.app-chrome > div.app-chrome--center > div > div > div.playback-info > div.song-artist') == true) { - document.getElementsByClassName('song-artist')[0].classList.add('marquee'); - document.getElementsByClassName('song-artist')[1].classList.add('marquee-after'); - } - if (isElementOverflowing('#app-main > div.app-chrome > div.app-chrome--center > div > div > div.playback-info > div.song-name') == true) { - document.getElementsByClassName('song-name')[0].classList.add('marquee'); - document.getElementsByClassName('song-name')[1].classList.add('marquee-after'); - } - }, - closeWindow() { - ipcRenderer.send('close'); - }, - darwinShare(url) { - ipcRenderer.send('share-menu', url) - }, - arrayToChunk(arr, chunkSize) { - let R = []; - for (let i = 0, len = arr.length; i < len; i += chunkSize) { - R.push(arr.slice(i, i + chunkSize)); - } - return R; - }, - SpacePause() { - const elems = document.querySelectorAll('input'); - for (elem of elems) { - if (elem === document.activeElement) { - return; - } - } - if (!this.isDev) // disable in dev mode to keep my sanity - MusicKitInterop.playPause(); - }, - async MKJSLang() { - let u = this.cfg.general.language; - // use MusicKit.getInstance or crash - try { - let item = await MusicKit.getInstance().api.v3.music(`v1/storefronts/${app.mk.storefrontId}`) - let langcodes = item.data.data[0].attributes.supportedLanguageTags; - if (langcodes) langcodes = langcodes.map(function (u) { - return u.replace(/-Han[s|t]/i, "").toLowerCase() - }) - console.log(langcodes) - let sellang = "" - if (u && langcodes.includes(u.toLowerCase().replace('_', "-"))) { - sellang = ((u.toLowerCase()).replace('_', "-")) - } else if (u && u.includes('_') && langcodes.includes(((u.toLowerCase()).replace('_', "-")).split("-")[0])) { - sellang = ((u.toLowerCase()).replace('_', "-")).split("-")[0] - } - if (sellang == "") sellang = (item.data.data[0].attributes.defaultLanguageTag).toLowerCase() - - // Fix weird locales: - if (sellang == "iw") sellang = "iw-il" - sellang = sellang.replace(/-Han[s|t]/i, "").toLowerCase() - - console.log(sellang) - return await sellang - } catch (err) { - console.log('locale err', err) - let langcodes = ['af', 'sq', 'ar', 'eu', 'bg', 'be', 'ca', 'zh', 'zh-tw', 'zh-cn', 'zh-hk', 'zh-sg', 'hr', 'cs', 'da', 'nl', 'nl-be', 'en', 'en-us', 'en-eg', 'en-au', 'en-gb', 'en-ca', 'en-nz', 'en-ie', 'en-za', 'en-jm', 'en-bz', 'en-tt', 'en-001', 'et', 'fo', 'fa', 'fi', 'fr', 'fr-ca', 'gd', 'de', 'de-ch', 'el', 'he', 'hi', 'hu', 'is', 'id', 'it', 'ja', 'ko', 'lv', 'lt', 'mk', 'mt', 'no', 'nb', 'nn', 'pl', 'pt-br', 'pt', 'rm', 'ro', 'ru', 'sr', 'sk', 'sl', 'es', 'es-mx', 'es-419', 'sv', 'th', 'ts', 'tn', 'tr', 'uk', 'ur', 've', 'vi', 'xh', 'yi', 'zu', 'ms', 'iw', 'lo', 'tl', 'kk', 'ta', 'te', 'bn', 'ga', 'ht', 'la', 'pa', 'sa']; - let sellang = "en" - if (u && langcodes.includes(u.toLowerCase().replace('_', "-"))) { - sellang = ((u.toLowerCase()).replace('_', "-")) - } else if (u && u.includes('_') && langcodes.includes(((u.toLowerCase()).replace('_', "-")).split("-")[0])) { - sellang = ((u.toLowerCase()).replace('_', "-")).split("-")[0] - } - if (sellang.startsWith("en") && this.mk.storefrontId != "us") sellang = "en-gb" - return await sellang - } - }, - skipToNextItem() { - app.prevButtonBackIndicator = false; - // app.mk.skipToNextItem() is buggy somehow so use this - if (this.mk.queue.nextPlayableItemIndex != -1 && this.mk.queue.nextPlayableItemIndex != null) - this.mk.changeToMediaAtIndex(this.mk.queue.nextPlayableItemIndex); - }, - skipToPreviousItem() { - // app.mk.skipToPreviousItem() is buggy somehow so use this - if (this.mk.queue.previousPlayableItemIndex != -1 && this.mk.queue.previousPlayableItemIndex != null) - this.mk.changeToMediaAtIndex(this.mk.queue.previousPlayableItemIndex); - }, - mediaKeyFixes() { - navigator.mediaSession.setActionHandler('previoustrack', function () { - app.prevButton() - }); - navigator.mediaSession.setActionHandler('nexttrack', function () { - app.skipToNextItem() - }); - }, - checkForUpdate() { - ipcRenderer.send('check-for-update') - ipcRenderer.on('update-response', (event, res) => { - if (res === "update-not-available") { - notyf.error(app.getLz(`settings.notyf.updateCider.${res}`)) - } else if (res === "update-downloaded") { - notyf.success(app.getLz(`settings.notyf.updateCider.${res}`)) - } else if (res === "update-error") { - notyf.error(app.getLz(`settings.notyf.updateCider.${res}`)) - } else if (res === "update-timeout") { - notyf.error(app.getLz(`settings.notyf.updateCider.${res}`)) - } - - }) - }, - } -}) - Vue.component('animated-number', { template: "
{{ displayNumber }}
", @@ -4546,27 +88,6 @@ Vue.component('sidebar-library-item', { methods: {} }); -// Key binds -document.addEventListener('keydown', function (e) { - if (e.keyCode === 70 && e.ctrlKey) { - app.$refs.searchInput.focus() - app.$refs.searchInput.select() - } -}); - -// Hang Timer -app.hangtimer = setTimeout(() => { - if (confirm("Cider is not responding. Reload the app?")) { - window.location.reload() - } -}, 10000) - -// add event listener for when window.location.hash changes -window.addEventListener("hashchange", function () { - app.appRoute(window.location.hash) -}); - - function fallbackinitMusicKit() { const request = new XMLHttpRequest(); @@ -4593,6 +114,7 @@ function fallbackinitMusicKit() { } document.addEventListener('musickitloaded', function () { + console.log('MusicKit loaded') // MusicKit global is now defined function initMusicKit() { let parsedJson = JSON.parse(this.responseText) @@ -4605,10 +127,17 @@ document.addEventListener('musickitloaded', function () { }, sourceType: 24, suppressErrorDialog: true - }); - setTimeout(() => { - app.init() - }, 1000) + }).then(() => { + function waitForApp() { + if (typeof app.init !== "undefined") { + app.init() + } + else { + setTimeout(waitForApp, 250); + } + } + waitForApp() + }) } @@ -4630,6 +159,9 @@ document.addEventListener('musickitloaded', function () { }); }); + + + if ('serviceWorker' in navigator) { // Use the window load event to keep the page load performant window.addEventListener('load', () => { @@ -4660,19 +192,6 @@ function uuidv4() { ); } -function refreshFocus() { - if (document.hasFocus() == false) { - app.windowFocus(false) - } else { - app.windowFocus(true) - } - setTimeout(refreshFocus, 200); -} - -app.getHTMLStyle() - -refreshFocus(); - function xmlToJson(xml) { // Create the return object @@ -4767,37 +286,3 @@ window.onerror = function (error) { console.log(error) bootbox.alert("Error occured: " + error) }; - - -// Key bind to unjam MusicKit in case it fails: CTRL+F10 -document.addEventListener('keydown', function (event) { - if (event.ctrlKey && event.keyCode == 121) { - try { - app.mk._services.mediaItemPlayback._currentPlayer.stop() - } catch (e) { - } - try { - app.mk._services.mediaItemPlayback._currentPlayer.destroy() - } catch (e) { - } - } -}); - -window.addEventListener("mouseup", (e) => { - if (e.button === 3) { - e.preventDefault() - app.navigateBack() - } else if (e.button === 4) { - e.preventDefault() - app.navigateForward() - } -}); - -document.addEventListener('keydown', function (event) { - if (event.ctrlKey && event.keyCode == 122) { - try { - ipcRenderer.send('detachDT', '') - } catch (e) { - } - } -}); diff --git a/src/renderer/less/bootstrap-vue.min.css b/src/renderer/less/bootstrap-vue.min.css new file mode 100644 index 00000000..c84a0f9f --- /dev/null +++ b/src/renderer/less/bootstrap-vue.min.css @@ -0,0 +1,2637 @@ +@charset "UTF-8"; +/*! + * BootstrapVue Custom CSS (https://bootstrap-vue.org) + */ +.bv-no-focus-ring:focus { + outline: none; +} + +@media (max-width: 575.98px) { + .bv-d-xs-down-none { + display: none !important; + } +} +@media (max-width: 767.98px) { + .bv-d-sm-down-none { + display: none !important; + } +} +@media (max-width: 991.98px) { + .bv-d-md-down-none { + display: none !important; + } +} +@media (max-width: 1199.98px) { + .bv-d-lg-down-none { + display: none !important; + } +} +.bv-d-xl-down-none { + display: none !important; +} + +.form-control.focus { + color: #495057; + background-color: #fff; + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} +.form-control.focus.is-valid { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} +.form-control.focus.is-invalid { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.b-avatar { + display: inline-flex; + align-items: center; + justify-content: center; + vertical-align: middle; + flex-shrink: 0; + width: 2.5rem; + height: 2.5rem; + font-size: inherit; + font-weight: 400; + line-height: 1; + max-width: 100%; + max-height: auto; + text-align: center; + overflow: visible; + position: relative; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +.b-avatar:focus { + outline: 0; +} +.b-avatar.btn, .b-avatar[href] { + padding: 0; + border: 0; +} +.b-avatar.btn .b-avatar-img img, .b-avatar[href] .b-avatar-img img { + transition: -webkit-transform 0.15s ease-in-out; + transition: transform 0.15s ease-in-out; + transition: transform 0.15s ease-in-out, -webkit-transform 0.15s ease-in-out; +} +.b-avatar.btn:not(:disabled):not(.disabled), .b-avatar[href]:not(:disabled):not(.disabled) { + cursor: pointer; +} +.b-avatar.btn:not(:disabled):not(.disabled):hover .b-avatar-img img, .b-avatar[href]:not(:disabled):not(.disabled):hover .b-avatar-img img { + -webkit-transform: scale(1.15); + transform: scale(1.15); +} +.b-avatar.disabled, .b-avatar:disabled, .b-avatar[disabled] { + opacity: 0.65; + pointer-events: none; +} +.b-avatar .b-avatar-custom, +.b-avatar .b-avatar-text, +.b-avatar .b-avatar-img { + border-radius: inherit; + width: 100%; + height: 100%; + overflow: hidden; + display: flex; + justify-content: center; + align-items: center; + -webkit-mask-image: radial-gradient(white, black); + mask-image: radial-gradient(white, black); +} +.b-avatar .b-avatar-text { + text-transform: uppercase; + white-space: nowrap; +} +.b-avatar[href] { + text-decoration: none; +} +.b-avatar > .b-icon { + width: 60%; + height: auto; + max-width: 100%; +} +.b-avatar .b-avatar-img img { + width: 100%; + height: 100%; + max-height: auto; + border-radius: inherit; + -o-object-fit: cover; + object-fit: cover; +} +.b-avatar .b-avatar-badge { + position: absolute; + min-height: 1.5em; + min-width: 1.5em; + padding: 0.25em; + line-height: 1; + border-radius: 10em; + font-size: 70%; + font-weight: 700; + z-index: 1; +} + +.b-avatar-sm { + width: 1.5rem; + height: 1.5rem; +} +.b-avatar-sm .b-avatar-text { + font-size: calc(0.6rem); +} +.b-avatar-sm .b-avatar-badge { + font-size: calc(0.42rem); +} + +.b-avatar-lg { + width: 3.5rem; + height: 3.5rem; +} +.b-avatar-lg .b-avatar-text { + font-size: calc(1.4rem); +} +.b-avatar-lg .b-avatar-badge { + font-size: calc(0.98rem); +} + +.b-avatar-group .b-avatar-group-inner { + display: flex; + flex-wrap: wrap; +} +.b-avatar-group .b-avatar { + border: 1px solid #dee2e6; +} +.b-avatar-group a.b-avatar:hover:not(.disabled):not(disabled), +.b-avatar-group .btn.b-avatar:hover:not(.disabled):not(disabled) { + z-index: 1; +} + +.b-calendar { + display: inline-flex; +} +.b-calendar .b-calendar-inner { + min-width: 250px; +} +.b-calendar .b-calendar-header, +.b-calendar .b-calendar-nav { + margin-bottom: 0.25rem; +} +.b-calendar .b-calendar-nav .btn { + padding: 0.25rem; +} +.b-calendar output { + padding: 0.25rem; + font-size: 80%; +} +.b-calendar output.readonly { + background-color: #e9ecef; + opacity: 1; +} +.b-calendar .b-calendar-footer { + margin-top: 0.5rem; +} +.b-calendar .b-calendar-grid { + padding: 0; + margin: 0; + overflow: hidden; +} +.b-calendar .b-calendar-grid .row { + flex-wrap: nowrap; +} +.b-calendar .b-calendar-grid-caption { + padding: 0.25rem; +} +.b-calendar .b-calendar-grid-body .col[data-date] .btn { + width: 32px; + height: 32px; + font-size: 14px; + line-height: 1; + margin: 3px auto; + padding: 9px 0; +} +.b-calendar .btn:disabled, .b-calendar .btn.disabled, .b-calendar .btn[aria-disabled=true] { + cursor: default; + pointer-events: none; +} + +.card-img-left { + border-top-left-radius: calc(0.25rem - 1px); + border-bottom-left-radius: calc(0.25rem - 1px); +} + +.card-img-right { + border-top-right-radius: calc(0.25rem - 1px); + border-bottom-right-radius: calc(0.25rem - 1px); +} + +.dropdown:not(.dropleft) .dropdown-toggle.dropdown-toggle-no-caret::after { + display: none !important; +} +.dropdown.dropleft .dropdown-toggle.dropdown-toggle-no-caret::before { + display: none !important; +} +.dropdown .dropdown-menu:focus { + outline: none; +} + +.b-dropdown-form { + display: inline-block; + padding: 0.25rem 1.5rem; + width: 100%; + clear: both; + font-weight: 400; +} +.b-dropdown-form:focus { + outline: 1px dotted !important; + outline: 5px auto -webkit-focus-ring-color !important; +} +.b-dropdown-form.disabled, .b-dropdown-form:disabled { + outline: 0 !important; + color: #6c757d; + pointer-events: none; +} + +.b-dropdown-text { + display: inline-block; + padding: 0.25rem 1.5rem; + margin-bottom: 0; + width: 100%; + clear: both; + font-weight: lighter; +} + +.custom-checkbox.b-custom-control-lg, +.input-group-lg .custom-checkbox { + font-size: 1.25rem; + line-height: 1.5; + padding-left: 1.875rem; +} +.custom-checkbox.b-custom-control-lg .custom-control-label::before, +.input-group-lg .custom-checkbox .custom-control-label::before { + top: 0.3125rem; + left: -1.875rem; + width: 1.25rem; + height: 1.25rem; + border-radius: 0.3rem; +} +.custom-checkbox.b-custom-control-lg .custom-control-label::after, +.input-group-lg .custom-checkbox .custom-control-label::after { + top: 0.3125rem; + left: -1.875rem; + width: 1.25rem; + height: 1.25rem; + background-size: 50% 50%; +} + +.custom-checkbox.b-custom-control-sm, +.input-group-sm .custom-checkbox { + font-size: 0.875rem; + line-height: 1.5; + padding-left: 1.3125rem; +} +.custom-checkbox.b-custom-control-sm .custom-control-label::before, +.input-group-sm .custom-checkbox .custom-control-label::before { + top: 0.21875rem; + left: -1.3125rem; + width: 0.875rem; + height: 0.875rem; + border-radius: 0.2rem; +} +.custom-checkbox.b-custom-control-sm .custom-control-label::after, +.input-group-sm .custom-checkbox .custom-control-label::after { + top: 0.21875rem; + left: -1.3125rem; + width: 0.875rem; + height: 0.875rem; + background-size: 50% 50%; +} + +.custom-switch.b-custom-control-lg, +.input-group-lg .custom-switch { + padding-left: 2.8125rem; +} +.custom-switch.b-custom-control-lg .custom-control-label, +.input-group-lg .custom-switch .custom-control-label { + font-size: 1.25rem; + line-height: 1.5; +} +.custom-switch.b-custom-control-lg .custom-control-label::before, +.input-group-lg .custom-switch .custom-control-label::before { + top: 0.3125rem; + height: 1.25rem; + left: -2.8125rem; + width: 2.1875rem; + border-radius: 0.625rem; +} +.custom-switch.b-custom-control-lg .custom-control-label::after, +.input-group-lg .custom-switch .custom-control-label::after { + top: calc( 0.3125rem + 2px ); + left: calc( -2.8125rem + 2px ); + width: calc( 1.25rem - 4px ); + height: calc( 1.25rem - 4px ); + border-radius: 0.625rem; + background-size: 50% 50%; +} +.custom-switch.b-custom-control-lg .custom-control-input:checked ~ .custom-control-label::after, +.input-group-lg .custom-switch .custom-control-input:checked ~ .custom-control-label::after { + -webkit-transform: translateX(0.9375rem); + transform: translateX(0.9375rem); +} + +.custom-switch.b-custom-control-sm, +.input-group-sm .custom-switch { + padding-left: 1.96875rem; +} +.custom-switch.b-custom-control-sm .custom-control-label, +.input-group-sm .custom-switch .custom-control-label { + font-size: 0.875rem; + line-height: 1.5; +} +.custom-switch.b-custom-control-sm .custom-control-label::before, +.input-group-sm .custom-switch .custom-control-label::before { + top: 0.21875rem; + left: -1.96875rem; + width: 1.53125rem; + height: 0.875rem; + border-radius: 0.4375rem; +} +.custom-switch.b-custom-control-sm .custom-control-label::after, +.input-group-sm .custom-switch .custom-control-label::after { + top: calc( 0.21875rem + 2px ); + left: calc( -1.96875rem + 2px ); + width: calc( 0.875rem - 4px ); + height: calc( 0.875rem - 4px ); + border-radius: 0.4375rem; + background-size: 50% 50%; +} +.custom-switch.b-custom-control-sm .custom-control-input:checked ~ .custom-control-label::after, +.input-group-sm .custom-switch .custom-control-input:checked ~ .custom-control-label::after { + -webkit-transform: translateX(0.65625rem); + transform: translateX(0.65625rem); +} + +.input-group > .input-group-prepend > .btn-group > .btn, +.input-group > .input-group-append:not(:last-child) > .btn-group > .btn, +.input-group > .input-group-append:last-child > .btn-group:not(:last-child):not(.dropdown-toggle) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group > .input-group-append > .btn-group > .btn, +.input-group > .input-group-prepend:not(:first-child) > .btn-group > .btn, +.input-group > .input-group-prepend:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.b-form-btn-label-control.form-control { + display: flex; + align-items: stretch; + height: auto; + padding: 0; + background-image: none; +} +.input-group .b-form-btn-label-control.form-control { + padding: 0; +} + +[dir=rtl] .b-form-btn-label-control.form-control, .b-form-btn-label-control.form-control[dir=rtl] { + flex-direction: row-reverse; +} +[dir=rtl] .b-form-btn-label-control.form-control > label, .b-form-btn-label-control.form-control[dir=rtl] > label { + text-align: right; +} + +.b-form-btn-label-control.form-control > .btn { + line-height: 1; + font-size: inherit; + box-shadow: none !important; + border: 0; +} +.b-form-btn-label-control.form-control > .btn:disabled { + pointer-events: none; +} +.b-form-btn-label-control.form-control.is-valid > .btn { + color: #28a745; +} +.b-form-btn-label-control.form-control.is-invalid > .btn { + color: #dc3545; +} +.b-form-btn-label-control.form-control > .dropdown-menu { + padding: 0.5rem; +} +.b-form-btn-label-control.form-control > .form-control { + height: auto; + min-height: calc(calc(1.5em + 0.75rem + 2px) - 2px); + padding-left: 0.25rem; + margin: 0; + border: 0; + outline: 0; + background: transparent; + word-break: break-word; + font-size: inherit; + white-space: normal; + cursor: pointer; +} +.b-form-btn-label-control.form-control > .form-control.form-control-sm { + min-height: calc(calc(1.5em + 0.5rem + 2px) - 2px); +} +.b-form-btn-label-control.form-control > .form-control.form-control-lg { + min-height: calc(calc(1.5em + 1rem + 2px) - 2px); +} +.input-group.input-group-sm .b-form-btn-label-control.form-control > .form-control { + min-height: calc(calc(1.5em + 0.5rem + 2px) - 2px); + padding-top: 0.25rem; + padding-bottom: 0.25rem; +} + +.input-group.input-group-lg .b-form-btn-label-control.form-control > .form-control { + min-height: calc(calc(1.5em + 1rem + 2px) - 2px); + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.b-form-btn-label-control.form-control[aria-disabled=true], .b-form-btn-label-control.form-control[aria-readonly=true] { + background-color: #e9ecef; + opacity: 1; +} +.b-form-btn-label-control.form-control[aria-disabled=true] { + pointer-events: none; +} +.b-form-btn-label-control.form-control[aria-disabled=true] > label { + cursor: default; +} + +.b-form-btn-label-control.btn-group > .dropdown-menu { + padding: 0.5rem; +} + +.custom-file-label { + white-space: nowrap; + overflow-x: hidden; +} + +.b-custom-control-lg.custom-file, +.b-custom-control-lg .custom-file-input, +.b-custom-control-lg .custom-file-label, +.input-group-lg.custom-file, +.input-group-lg .custom-file-input, +.input-group-lg .custom-file-label { + font-size: 1.25rem; + height: calc(1.5em + 1rem + 2px); +} +.b-custom-control-lg .custom-file-label, +.b-custom-control-lg .custom-file-label:after, +.input-group-lg .custom-file-label, +.input-group-lg .custom-file-label:after { + padding: 0.5rem 1rem; + line-height: 1.5; +} +.b-custom-control-lg .custom-file-label, +.input-group-lg .custom-file-label { + border-radius: 0.3rem; +} +.b-custom-control-lg .custom-file-label::after, +.input-group-lg .custom-file-label::after { + font-size: inherit; + height: calc( 1.5em + 1rem ); + border-radius: 0 0.3rem 0.3rem 0; +} + +.b-custom-control-sm.custom-file, +.b-custom-control-sm .custom-file-input, +.b-custom-control-sm .custom-file-label, +.input-group-sm.custom-file, +.input-group-sm .custom-file-input, +.input-group-sm .custom-file-label { + font-size: 0.875rem; + height: calc(1.5em + 0.5rem + 2px); +} +.b-custom-control-sm .custom-file-label, +.b-custom-control-sm .custom-file-label:after, +.input-group-sm .custom-file-label, +.input-group-sm .custom-file-label:after { + padding: 0.25rem 0.5rem; + line-height: 1.5; +} +.b-custom-control-sm .custom-file-label, +.input-group-sm .custom-file-label { + border-radius: 0.2rem; +} +.b-custom-control-sm .custom-file-label::after, +.input-group-sm .custom-file-label::after { + font-size: inherit; + height: calc( 1.5em + 0.5rem ); + border-radius: 0 0.2rem 0.2rem 0; +} + +.was-validated .form-control:invalid, .was-validated .form-control:valid, .form-control.is-invalid, .form-control.is-valid { + background-position: right calc(0.375em + 0.1875rem) center; +} + +input[type=color].form-control { + height: calc(1.5em + 0.75rem + 2px); + padding: 0.125rem 0.25rem; +} + +input[type=color].form-control.form-control-sm, +.input-group-sm input[type=color].form-control { + height: calc(1.5em + 0.5rem + 2px); + padding: 0.125rem 0.25rem; +} + +input[type=color].form-control.form-control-lg, +.input-group-lg input[type=color].form-control { + height: calc(1.5em + 1rem + 2px); + padding: 0.125rem 0.25rem; +} + +input[type=color].form-control:disabled { + background-color: #adb5bd; + opacity: 0.65; +} + +.input-group > .custom-range { + position: relative; + flex: 1 1 auto; + width: 1%; + margin-bottom: 0; +} +.input-group > .custom-range + .form-control, +.input-group > .custom-range + .form-control-plaintext, +.input-group > .custom-range + .custom-select, +.input-group > .custom-range + .custom-range, +.input-group > .custom-range + .custom-file { + margin-left: -1px; +} +.input-group > .form-control + .custom-range, +.input-group > .form-control-plaintext + .custom-range, +.input-group > .custom-select + .custom-range, +.input-group > .custom-range + .custom-range, +.input-group > .custom-file + .custom-range { + margin-left: -1px; +} +.input-group > .custom-range:focus { + z-index: 3; +} +.input-group > .custom-range:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group > .custom-range:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group > .custom-range { + height: calc(1.5em + 0.75rem + 2px); + padding: 0 0.75rem; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + height: calc(1.5em + 0.75rem + 2px); + border-radius: 0.25rem; + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .input-group > .custom-range { + transition: none; + } +} +.input-group > .custom-range:focus { + color: #495057; + background-color: #fff; + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} +.input-group > .custom-range:disabled, .input-group > .custom-range[readonly] { + background-color: #e9ecef; +} + +.input-group-lg > .custom-range { + height: calc(1.5em + 1rem + 2px); + padding: 0 1rem; + border-radius: 0.3rem; +} + +.input-group-sm > .custom-range { + height: calc(1.5em + 0.5rem + 2px); + padding: 0 0.5rem; + border-radius: 0.2rem; +} + +.was-validated .input-group .custom-range:valid, .input-group .custom-range.is-valid { + border-color: #28a745; +} +.was-validated .input-group .custom-range:valid:focus, .input-group .custom-range.is-valid:focus { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} + +.was-validated .custom-range:valid:focus::-webkit-slider-thumb, .custom-range.is-valid:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem #9be7ac; +} +.was-validated .custom-range:valid:focus::-moz-range-thumb, .custom-range.is-valid:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem #9be7ac; +} +.was-validated .custom-range:valid:focus::-ms-thumb, .custom-range.is-valid:focus::-ms-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem #9be7ac; +} +.was-validated .custom-range:valid::-webkit-slider-thumb, .custom-range.is-valid::-webkit-slider-thumb { + background-color: #28a745; + background-image: none; +} +.was-validated .custom-range:valid::-webkit-slider-thumb:active, .custom-range.is-valid::-webkit-slider-thumb:active { + background-color: #9be7ac; + background-image: none; +} +.was-validated .custom-range:valid::-webkit-slider-runnable-track, .custom-range.is-valid::-webkit-slider-runnable-track { + background-color: rgba(40, 167, 69, 0.35); +} +.was-validated .custom-range:valid::-moz-range-thumb, .custom-range.is-valid::-moz-range-thumb { + background-color: #28a745; + background-image: none; +} +.was-validated .custom-range:valid::-moz-range-thumb:active, .custom-range.is-valid::-moz-range-thumb:active { + background-color: #9be7ac; + background-image: none; +} +.was-validated .custom-range:valid::-moz-range-track, .custom-range.is-valid::-moz-range-track { + background: rgba(40, 167, 69, 0.35); +} +.was-validated .custom-range:valid ~ .valid-feedback, +.was-validated .custom-range:valid ~ .valid-tooltip, .custom-range.is-valid ~ .valid-feedback, +.custom-range.is-valid ~ .valid-tooltip { + display: block; +} +.was-validated .custom-range:valid::-ms-thumb, .custom-range.is-valid::-ms-thumb { + background-color: #28a745; + background-image: none; +} +.was-validated .custom-range:valid::-ms-thumb:active, .custom-range.is-valid::-ms-thumb:active { + background-color: #9be7ac; + background-image: none; +} +.was-validated .custom-range:valid::-ms-track-lower, .custom-range.is-valid::-ms-track-lower { + background: rgba(40, 167, 69, 0.35); +} +.was-validated .custom-range:valid::-ms-track-upper, .custom-range.is-valid::-ms-track-upper { + background: rgba(40, 167, 69, 0.35); +} + +.was-validated .input-group .custom-range:invalid, .input-group .custom-range.is-invalid { + border-color: #dc3545; +} +.was-validated .input-group .custom-range:invalid:focus, .input-group .custom-range.is-invalid:focus { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} + +.was-validated .custom-range:invalid:focus::-webkit-slider-thumb, .custom-range.is-invalid:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem #f6cdd1; +} +.was-validated .custom-range:invalid:focus::-moz-range-thumb, .custom-range.is-invalid:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem #f6cdd1; +} +.was-validated .custom-range:invalid:focus::-ms-thumb, .custom-range.is-invalid:focus::-ms-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem #f6cdd1; +} +.was-validated .custom-range:invalid::-webkit-slider-thumb, .custom-range.is-invalid::-webkit-slider-thumb { + background-color: #dc3545; + background-image: none; +} +.was-validated .custom-range:invalid::-webkit-slider-thumb:active, .custom-range.is-invalid::-webkit-slider-thumb:active { + background-color: #f6cdd1; + background-image: none; +} +.was-validated .custom-range:invalid::-webkit-slider-runnable-track, .custom-range.is-invalid::-webkit-slider-runnable-track { + background-color: rgba(220, 53, 69, 0.35); +} +.was-validated .custom-range:invalid::-moz-range-thumb, .custom-range.is-invalid::-moz-range-thumb { + background-color: #dc3545; + background-image: none; +} +.was-validated .custom-range:invalid::-moz-range-thumb:active, .custom-range.is-invalid::-moz-range-thumb:active { + background-color: #f6cdd1; + background-image: none; +} +.was-validated .custom-range:invalid::-moz-range-track, .custom-range.is-invalid::-moz-range-track { + background: rgba(220, 53, 69, 0.35); +} +.was-validated .custom-range:invalid ~ .invalid-feedback, +.was-validated .custom-range:invalid ~ .invalid-tooltip, .custom-range.is-invalid ~ .invalid-feedback, +.custom-range.is-invalid ~ .invalid-tooltip { + display: block; +} +.was-validated .custom-range:invalid::-ms-thumb, .custom-range.is-invalid::-ms-thumb { + background-color: #dc3545; + background-image: none; +} +.was-validated .custom-range:invalid::-ms-thumb:active, .custom-range.is-invalid::-ms-thumb:active { + background-color: #f6cdd1; + background-image: none; +} +.was-validated .custom-range:invalid::-ms-track-lower, .custom-range.is-invalid::-ms-track-lower { + background: rgba(220, 53, 69, 0.35); +} +.was-validated .custom-range:invalid::-ms-track-upper, .custom-range.is-invalid::-ms-track-upper { + background: rgba(220, 53, 69, 0.35); +} + +.custom-radio.b-custom-control-lg, +.input-group-lg .custom-radio { + font-size: 1.25rem; + line-height: 1.5; + padding-left: 1.875rem; +} +.custom-radio.b-custom-control-lg .custom-control-label::before, +.input-group-lg .custom-radio .custom-control-label::before { + top: 0.3125rem; + left: -1.875rem; + width: 1.25rem; + height: 1.25rem; + border-radius: 50%; +} +.custom-radio.b-custom-control-lg .custom-control-label::after, +.input-group-lg .custom-radio .custom-control-label::after { + top: 0.3125rem; + left: -1.875rem; + width: 1.25rem; + height: 1.25rem; + background: no-repeat 50%/50% 50%; +} + +.custom-radio.b-custom-control-sm, +.input-group-sm .custom-radio { + font-size: 0.875rem; + line-height: 1.5; + padding-left: 1.3125rem; +} +.custom-radio.b-custom-control-sm .custom-control-label::before, +.input-group-sm .custom-radio .custom-control-label::before { + top: 0.21875rem; + left: -1.3125rem; + width: 0.875rem; + height: 0.875rem; + border-radius: 50%; +} +.custom-radio.b-custom-control-sm .custom-control-label::after, +.input-group-sm .custom-radio .custom-control-label::after { + top: 0.21875rem; + left: -1.3125rem; + width: 0.875rem; + height: 0.875rem; + background: no-repeat 50%/50% 50%; +} + +.b-rating { + text-align: center; +} +.b-rating.d-inline-flex { + width: auto; +} +.b-rating .b-rating-star, +.b-rating .b-rating-value { + padding: 0 0.25em; +} +.b-rating .b-rating-value { + min-width: 2.5em; +} +.b-rating .b-rating-star { + display: inline-flex; + justify-content: center; + outline: 0; +} +.b-rating .b-rating-star .b-rating-icon { + display: inline-flex; + transition: all 0.15s ease-in-out; +} +.b-rating.disabled, .b-rating:disabled { + background-color: #e9ecef; + color: #6c757d; +} +.b-rating:not(.disabled):not(.readonly) .b-rating-star { + cursor: pointer; +} +.b-rating:not(.disabled):not(.readonly):focus:not(:hover) .b-rating-star.focused .b-rating-icon, +.b-rating:not(.disabled):not(.readonly) .b-rating-star:hover .b-rating-icon { + -webkit-transform: scale(1.5); + transform: scale(1.5); +} +.b-rating[dir=rtl] .b-rating-star-half { + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); +} + +.b-form-spinbutton { + text-align: center; + overflow: hidden; + background-image: none; + padding: 0; +} +[dir=rtl] .b-form-spinbutton:not(.flex-column), .b-form-spinbutton[dir=rtl]:not(.flex-column) { + flex-direction: row-reverse; +} + +.b-form-spinbutton output { + font-size: inherit; + outline: 0; + border: 0; + background-color: transparent; + width: auto; + margin: 0; + padding: 0 0.25rem; +} +.b-form-spinbutton output > div, +.b-form-spinbutton output > bdi { + display: block; + min-width: 2.25em; + height: 1.5em; +} +.b-form-spinbutton.flex-column { + height: auto; + width: auto; +} +.b-form-spinbutton.flex-column output { + margin: 0 0.25rem; + padding: 0.25rem 0; +} +.b-form-spinbutton:not(.d-inline-flex):not(.flex-column) { + output-width: 100%; +} +.b-form-spinbutton.d-inline-flex:not(.flex-column) { + width: auto; +} +.b-form-spinbutton .btn { + line-height: 1; + box-shadow: none !important; +} +.b-form-spinbutton .btn:disabled { + pointer-events: none; +} +.b-form-spinbutton .btn:hover:not(:disabled) > div > .b-icon { + -webkit-transform: scale(1.25); + transform: scale(1.25); +} +.b-form-spinbutton.disabled, .b-form-spinbutton.readonly { + background-color: #e9ecef; +} +.b-form-spinbutton.disabled { + pointer-events: none; +} + +.b-form-tags .b-form-tags-list { + margin-top: -0.25rem; +} +.b-form-tags .b-form-tags-list .b-from-tags-field, +.b-form-tags .b-form-tags-list .b-form-tag { + margin-top: 0.25rem; +} +.b-form-tags.focus { + color: #495057; + background-color: #fff; + border-color: #80bdff; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); +} +.b-form-tags.focus.is-valid { + border-color: #28a745; + box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); +} +.b-form-tags.focus.is-invalid { + border-color: #dc3545; + box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); +} +.b-form-tags.disabled { + background-color: #e9ecef; +} + +.b-form-tag { + font-size: 75%; + font-weight: normal; + line-height: 1.5; + margin-right: 0.25rem; +} +.b-form-tag.disabled { + opacity: 0.75; +} +.b-form-tag > button.b-form-tag-remove { + color: inherit; + font-size: 125%; + line-height: 1; + float: none; + margin-left: 0.25rem; +} + +.form-control-sm .b-form-tag { + line-height: 1.5; +} + +.form-control-lg .b-form-tag { + line-height: 1.5; +} + +.media-aside { + display: flex; + margin-right: 1rem; +} + +.media-aside-right { + margin-right: 0; + margin-left: 1rem; +} + +.modal-backdrop { + opacity: 0.5; +} + +.b-pagination-pills .page-item .page-link { + border-radius: 50rem !important; + margin-left: 0.25rem; + line-height: 1; +} +.b-pagination-pills .page-item:first-child .page-link { + margin-left: 0; +} + +.popover.b-popover { + display: block; + opacity: 1; + outline: 0; +} +.popover.b-popover.fade:not(.show) { + opacity: 0; +} +.popover.b-popover.show { + opacity: 1; +} + +.b-popover-primary.popover { + background-color: #cce5ff; + border-color: #b8daff; +} +.b-popover-primary.bs-popover-top > .arrow::before, .b-popover-primary.bs-popover-auto[x-placement^=top] > .arrow::before { + border-top-color: #b8daff; +} +.b-popover-primary.bs-popover-top > .arrow::after, .b-popover-primary.bs-popover-auto[x-placement^=top] > .arrow::after { + border-top-color: #cce5ff; +} +.b-popover-primary.bs-popover-right > .arrow::before, .b-popover-primary.bs-popover-auto[x-placement^=right] > .arrow::before { + border-right-color: #b8daff; +} +.b-popover-primary.bs-popover-right > .arrow::after, .b-popover-primary.bs-popover-auto[x-placement^=right] > .arrow::after { + border-right-color: #cce5ff; +} +.b-popover-primary.bs-popover-bottom > .arrow::before, .b-popover-primary.bs-popover-auto[x-placement^=bottom] > .arrow::before { + border-bottom-color: #b8daff; +} +.b-popover-primary.bs-popover-bottom > .arrow::after, .b-popover-primary.bs-popover-auto[x-placement^=bottom] > .arrow::after { + border-bottom-color: #bdddff; +} +.b-popover-primary.bs-popover-bottom .popover-header::before, .b-popover-primary.bs-popover-auto[x-placement^=bottom] .popover-header::before { + border-bottom-color: #bdddff; +} +.b-popover-primary.bs-popover-left > .arrow::before, .b-popover-primary.bs-popover-auto[x-placement^=left] > .arrow::before { + border-left-color: #b8daff; +} +.b-popover-primary.bs-popover-left > .arrow::after, .b-popover-primary.bs-popover-auto[x-placement^=left] > .arrow::after { + border-left-color: #cce5ff; +} +.b-popover-primary .popover-header { + color: #212529; + background-color: #bdddff; + border-bottom-color: #a3d0ff; +} +.b-popover-primary .popover-body { + color: #004085; +} + +.b-popover-secondary.popover { + background-color: #e2e3e5; + border-color: #d6d8db; +} +.b-popover-secondary.bs-popover-top > .arrow::before, .b-popover-secondary.bs-popover-auto[x-placement^=top] > .arrow::before { + border-top-color: #d6d8db; +} +.b-popover-secondary.bs-popover-top > .arrow::after, .b-popover-secondary.bs-popover-auto[x-placement^=top] > .arrow::after { + border-top-color: #e2e3e5; +} +.b-popover-secondary.bs-popover-right > .arrow::before, .b-popover-secondary.bs-popover-auto[x-placement^=right] > .arrow::before { + border-right-color: #d6d8db; +} +.b-popover-secondary.bs-popover-right > .arrow::after, .b-popover-secondary.bs-popover-auto[x-placement^=right] > .arrow::after { + border-right-color: #e2e3e5; +} +.b-popover-secondary.bs-popover-bottom > .arrow::before, .b-popover-secondary.bs-popover-auto[x-placement^=bottom] > .arrow::before { + border-bottom-color: #d6d8db; +} +.b-popover-secondary.bs-popover-bottom > .arrow::after, .b-popover-secondary.bs-popover-auto[x-placement^=bottom] > .arrow::after { + border-bottom-color: #dadbde; +} +.b-popover-secondary.bs-popover-bottom .popover-header::before, .b-popover-secondary.bs-popover-auto[x-placement^=bottom] .popover-header::before { + border-bottom-color: #dadbde; +} +.b-popover-secondary.bs-popover-left > .arrow::before, .b-popover-secondary.bs-popover-auto[x-placement^=left] > .arrow::before { + border-left-color: #d6d8db; +} +.b-popover-secondary.bs-popover-left > .arrow::after, .b-popover-secondary.bs-popover-auto[x-placement^=left] > .arrow::after { + border-left-color: #e2e3e5; +} +.b-popover-secondary .popover-header { + color: #212529; + background-color: #dadbde; + border-bottom-color: #ccced2; +} +.b-popover-secondary .popover-body { + color: #383d41; +} + +.b-popover-success.popover { + background-color: #d4edda; + border-color: #c3e6cb; +} +.b-popover-success.bs-popover-top > .arrow::before, .b-popover-success.bs-popover-auto[x-placement^=top] > .arrow::before { + border-top-color: #c3e6cb; +} +.b-popover-success.bs-popover-top > .arrow::after, .b-popover-success.bs-popover-auto[x-placement^=top] > .arrow::after { + border-top-color: #d4edda; +} +.b-popover-success.bs-popover-right > .arrow::before, .b-popover-success.bs-popover-auto[x-placement^=right] > .arrow::before { + border-right-color: #c3e6cb; +} +.b-popover-success.bs-popover-right > .arrow::after, .b-popover-success.bs-popover-auto[x-placement^=right] > .arrow::after { + border-right-color: #d4edda; +} +.b-popover-success.bs-popover-bottom > .arrow::before, .b-popover-success.bs-popover-auto[x-placement^=bottom] > .arrow::before { + border-bottom-color: #c3e6cb; +} +.b-popover-success.bs-popover-bottom > .arrow::after, .b-popover-success.bs-popover-auto[x-placement^=bottom] > .arrow::after { + border-bottom-color: #c9e8d1; +} +.b-popover-success.bs-popover-bottom .popover-header::before, .b-popover-success.bs-popover-auto[x-placement^=bottom] .popover-header::before { + border-bottom-color: #c9e8d1; +} +.b-popover-success.bs-popover-left > .arrow::before, .b-popover-success.bs-popover-auto[x-placement^=left] > .arrow::before { + border-left-color: #c3e6cb; +} +.b-popover-success.bs-popover-left > .arrow::after, .b-popover-success.bs-popover-auto[x-placement^=left] > .arrow::after { + border-left-color: #d4edda; +} +.b-popover-success .popover-header { + color: #212529; + background-color: #c9e8d1; + border-bottom-color: #b7e1c1; +} +.b-popover-success .popover-body { + color: #155724; +} + +.b-popover-info.popover { + background-color: #d1ecf1; + border-color: #bee5eb; +} +.b-popover-info.bs-popover-top > .arrow::before, .b-popover-info.bs-popover-auto[x-placement^=top] > .arrow::before { + border-top-color: #bee5eb; +} +.b-popover-info.bs-popover-top > .arrow::after, .b-popover-info.bs-popover-auto[x-placement^=top] > .arrow::after { + border-top-color: #d1ecf1; +} +.b-popover-info.bs-popover-right > .arrow::before, .b-popover-info.bs-popover-auto[x-placement^=right] > .arrow::before { + border-right-color: #bee5eb; +} +.b-popover-info.bs-popover-right > .arrow::after, .b-popover-info.bs-popover-auto[x-placement^=right] > .arrow::after { + border-right-color: #d1ecf1; +} +.b-popover-info.bs-popover-bottom > .arrow::before, .b-popover-info.bs-popover-auto[x-placement^=bottom] > .arrow::before { + border-bottom-color: #bee5eb; +} +.b-popover-info.bs-popover-bottom > .arrow::after, .b-popover-info.bs-popover-auto[x-placement^=bottom] > .arrow::after { + border-bottom-color: #c5e7ed; +} +.b-popover-info.bs-popover-bottom .popover-header::before, .b-popover-info.bs-popover-auto[x-placement^=bottom] .popover-header::before { + border-bottom-color: #c5e7ed; +} +.b-popover-info.bs-popover-left > .arrow::before, .b-popover-info.bs-popover-auto[x-placement^=left] > .arrow::before { + border-left-color: #bee5eb; +} +.b-popover-info.bs-popover-left > .arrow::after, .b-popover-info.bs-popover-auto[x-placement^=left] > .arrow::after { + border-left-color: #d1ecf1; +} +.b-popover-info .popover-header { + color: #212529; + background-color: #c5e7ed; + border-bottom-color: #b2dfe7; +} +.b-popover-info .popover-body { + color: #0c5460; +} + +.b-popover-warning.popover { + background-color: #fff3cd; + border-color: #ffeeba; +} +.b-popover-warning.bs-popover-top > .arrow::before, .b-popover-warning.bs-popover-auto[x-placement^=top] > .arrow::before { + border-top-color: #ffeeba; +} +.b-popover-warning.bs-popover-top > .arrow::after, .b-popover-warning.bs-popover-auto[x-placement^=top] > .arrow::after { + border-top-color: #fff3cd; +} +.b-popover-warning.bs-popover-right > .arrow::before, .b-popover-warning.bs-popover-auto[x-placement^=right] > .arrow::before { + border-right-color: #ffeeba; +} +.b-popover-warning.bs-popover-right > .arrow::after, .b-popover-warning.bs-popover-auto[x-placement^=right] > .arrow::after { + border-right-color: #fff3cd; +} +.b-popover-warning.bs-popover-bottom > .arrow::before, .b-popover-warning.bs-popover-auto[x-placement^=bottom] > .arrow::before { + border-bottom-color: #ffeeba; +} +.b-popover-warning.bs-popover-bottom > .arrow::after, .b-popover-warning.bs-popover-auto[x-placement^=bottom] > .arrow::after { + border-bottom-color: #ffefbe; +} +.b-popover-warning.bs-popover-bottom .popover-header::before, .b-popover-warning.bs-popover-auto[x-placement^=bottom] .popover-header::before { + border-bottom-color: #ffefbe; +} +.b-popover-warning.bs-popover-left > .arrow::before, .b-popover-warning.bs-popover-auto[x-placement^=left] > .arrow::before { + border-left-color: #ffeeba; +} +.b-popover-warning.bs-popover-left > .arrow::after, .b-popover-warning.bs-popover-auto[x-placement^=left] > .arrow::after { + border-left-color: #fff3cd; +} +.b-popover-warning .popover-header { + color: #212529; + background-color: #ffefbe; + border-bottom-color: #ffe9a4; +} +.b-popover-warning .popover-body { + color: #856404; +} + +.b-popover-danger.popover { + background-color: #f8d7da; + border-color: #f5c6cb; +} +.b-popover-danger.bs-popover-top > .arrow::before, .b-popover-danger.bs-popover-auto[x-placement^=top] > .arrow::before { + border-top-color: #f5c6cb; +} +.b-popover-danger.bs-popover-top > .arrow::after, .b-popover-danger.bs-popover-auto[x-placement^=top] > .arrow::after { + border-top-color: #f8d7da; +} +.b-popover-danger.bs-popover-right > .arrow::before, .b-popover-danger.bs-popover-auto[x-placement^=right] > .arrow::before { + border-right-color: #f5c6cb; +} +.b-popover-danger.bs-popover-right > .arrow::after, .b-popover-danger.bs-popover-auto[x-placement^=right] > .arrow::after { + border-right-color: #f8d7da; +} +.b-popover-danger.bs-popover-bottom > .arrow::before, .b-popover-danger.bs-popover-auto[x-placement^=bottom] > .arrow::before { + border-bottom-color: #f5c6cb; +} +.b-popover-danger.bs-popover-bottom > .arrow::after, .b-popover-danger.bs-popover-auto[x-placement^=bottom] > .arrow::after { + border-bottom-color: #f6cace; +} +.b-popover-danger.bs-popover-bottom .popover-header::before, .b-popover-danger.bs-popover-auto[x-placement^=bottom] .popover-header::before { + border-bottom-color: #f6cace; +} +.b-popover-danger.bs-popover-left > .arrow::before, .b-popover-danger.bs-popover-auto[x-placement^=left] > .arrow::before { + border-left-color: #f5c6cb; +} +.b-popover-danger.bs-popover-left > .arrow::after, .b-popover-danger.bs-popover-auto[x-placement^=left] > .arrow::after { + border-left-color: #f8d7da; +} +.b-popover-danger .popover-header { + color: #212529; + background-color: #f6cace; + border-bottom-color: #f2b4ba; +} +.b-popover-danger .popover-body { + color: #721c24; +} + +.b-popover-light.popover { + background-color: #fefefe; + border-color: #fdfdfe; +} +.b-popover-light.bs-popover-top > .arrow::before, .b-popover-light.bs-popover-auto[x-placement^=top] > .arrow::before { + border-top-color: #fdfdfe; +} +.b-popover-light.bs-popover-top > .arrow::after, .b-popover-light.bs-popover-auto[x-placement^=top] > .arrow::after { + border-top-color: #fefefe; +} +.b-popover-light.bs-popover-right > .arrow::before, .b-popover-light.bs-popover-auto[x-placement^=right] > .arrow::before { + border-right-color: #fdfdfe; +} +.b-popover-light.bs-popover-right > .arrow::after, .b-popover-light.bs-popover-auto[x-placement^=right] > .arrow::after { + border-right-color: #fefefe; +} +.b-popover-light.bs-popover-bottom > .arrow::before, .b-popover-light.bs-popover-auto[x-placement^=bottom] > .arrow::before { + border-bottom-color: #fdfdfe; +} +.b-popover-light.bs-popover-bottom > .arrow::after, .b-popover-light.bs-popover-auto[x-placement^=bottom] > .arrow::after { + border-bottom-color: #f6f6f6; +} +.b-popover-light.bs-popover-bottom .popover-header::before, .b-popover-light.bs-popover-auto[x-placement^=bottom] .popover-header::before { + border-bottom-color: #f6f6f6; +} +.b-popover-light.bs-popover-left > .arrow::before, .b-popover-light.bs-popover-auto[x-placement^=left] > .arrow::before { + border-left-color: #fdfdfe; +} +.b-popover-light.bs-popover-left > .arrow::after, .b-popover-light.bs-popover-auto[x-placement^=left] > .arrow::after { + border-left-color: #fefefe; +} +.b-popover-light .popover-header { + color: #212529; + background-color: #f6f6f6; + border-bottom-color: #eaeaea; +} +.b-popover-light .popover-body { + color: #818182; +} + +.b-popover-dark.popover { + background-color: #d6d8d9; + border-color: #c6c8ca; +} +.b-popover-dark.bs-popover-top > .arrow::before, .b-popover-dark.bs-popover-auto[x-placement^=top] > .arrow::before { + border-top-color: #c6c8ca; +} +.b-popover-dark.bs-popover-top > .arrow::after, .b-popover-dark.bs-popover-auto[x-placement^=top] > .arrow::after { + border-top-color: #d6d8d9; +} +.b-popover-dark.bs-popover-right > .arrow::before, .b-popover-dark.bs-popover-auto[x-placement^=right] > .arrow::before { + border-right-color: #c6c8ca; +} +.b-popover-dark.bs-popover-right > .arrow::after, .b-popover-dark.bs-popover-auto[x-placement^=right] > .arrow::after { + border-right-color: #d6d8d9; +} +.b-popover-dark.bs-popover-bottom > .arrow::before, .b-popover-dark.bs-popover-auto[x-placement^=bottom] > .arrow::before { + border-bottom-color: #c6c8ca; +} +.b-popover-dark.bs-popover-bottom > .arrow::after, .b-popover-dark.bs-popover-auto[x-placement^=bottom] > .arrow::after { + border-bottom-color: #ced0d2; +} +.b-popover-dark.bs-popover-bottom .popover-header::before, .b-popover-dark.bs-popover-auto[x-placement^=bottom] .popover-header::before { + border-bottom-color: #ced0d2; +} +.b-popover-dark.bs-popover-left > .arrow::before, .b-popover-dark.bs-popover-auto[x-placement^=left] > .arrow::before { + border-left-color: #c6c8ca; +} +.b-popover-dark.bs-popover-left > .arrow::after, .b-popover-dark.bs-popover-auto[x-placement^=left] > .arrow::after { + border-left-color: #d6d8d9; +} +.b-popover-dark .popover-header { + color: #212529; + background-color: #ced0d2; + border-bottom-color: #c1c4c5; +} +.b-popover-dark .popover-body { + color: #1b1e21; +} + +.b-sidebar-outer { + position: fixed; + top: 0; + left: 0; + right: 0; + height: 0; + overflow: visible; + z-index: calc(1030 + 5); +} + +.b-sidebar-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: -1; + width: 100vw; + height: 100vh; + opacity: 0.6; +} + +.b-sidebar { + display: flex; + flex-direction: column; + position: fixed; + top: 0; + width: 320px; + max-width: 100%; + height: 100vh; + max-height: 100%; + margin: 0; + outline: 0; + -webkit-transform: translateX(0); + transform: translateX(0); +} +.b-sidebar.slide { + transition: -webkit-transform 0.3s ease-in-out; + transition: transform 0.3s ease-in-out; + transition: transform 0.3s ease-in-out, -webkit-transform 0.3s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .b-sidebar.slide { + transition: none; + } +} +.b-sidebar:not(.b-sidebar-right) { + left: 0; + right: auto; +} +.b-sidebar:not(.b-sidebar-right).slide:not(.show) { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); +} +.b-sidebar:not(.b-sidebar-right) > .b-sidebar-header .close { + margin-left: auto; +} +.b-sidebar.b-sidebar-right { + left: auto; + right: 0; +} +.b-sidebar.b-sidebar-right.slide:not(.show) { + -webkit-transform: translateX(100%); + transform: translateX(100%); +} +.b-sidebar.b-sidebar-right > .b-sidebar-header .close { + margin-right: auto; +} +.b-sidebar > .b-sidebar-header { + font-size: 1.5rem; + padding: 0.5rem 1rem; + display: flex; + flex-direction: row; + flex-grow: 0; + align-items: center; +} +[dir=rtl] .b-sidebar > .b-sidebar-header { + flex-direction: row-reverse; +} + +.b-sidebar > .b-sidebar-header .close { + float: none; + font-size: 1.5rem; +} +.b-sidebar > .b-sidebar-body { + flex-grow: 1; + height: 100%; + overflow-y: auto; +} +.b-sidebar > .b-sidebar-footer { + flex-grow: 0; +} + +.b-skeleton-wrapper { + cursor: wait; +} + +.b-skeleton { + position: relative; + overflow: hidden; + background-color: rgba(0, 0, 0, 0.12); + cursor: wait; + -webkit-mask-image: radial-gradient(white, black); + mask-image: radial-gradient(white, black); +} +.b-skeleton::before { + content: " "; +} + +.b-skeleton-text { + height: 1rem; + margin-bottom: 0.25rem; + border-radius: 0.25rem; +} + +.b-skeleton-button { + width: 75px; + padding: 0.375rem 0.75rem; + font-size: 1rem; + line-height: 1.5; + border-radius: 0.25rem; +} + +.b-skeleton-avatar { + width: 2.5em; + height: 2.5em; + border-radius: 50%; +} + +.b-skeleton-input { + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 0.75rem; + line-height: 1.5; + border: #ced4da solid 1px; + border-radius: 0.25rem; +} + +.b-skeleton-icon-wrapper svg { + color: rgba(0, 0, 0, 0.12); +} + +.b-skeleton-img { + height: 100%; + width: 100%; +} + +.b-skeleton-animate-wave::after { + content: ""; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 0; + background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.4), transparent); + -webkit-animation: b-skeleton-animate-wave 1.75s linear infinite; + animation: b-skeleton-animate-wave 1.75s linear infinite; +} +@media (prefers-reduced-motion: reduce) { + .b-skeleton-animate-wave::after { + background: none; + -webkit-animation: none; + animation: none; + } +} + +@-webkit-keyframes b-skeleton-animate-wave { + from { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + } + to { + -webkit-transform: translateX(100%); + transform: translateX(100%); + } +} + +@keyframes b-skeleton-animate-wave { + from { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + } + to { + -webkit-transform: translateX(100%); + transform: translateX(100%); + } +} +.b-skeleton-animate-fade { + -webkit-animation: b-skeleton-animate-fade 0.875s ease-in-out alternate infinite; + animation: b-skeleton-animate-fade 0.875s ease-in-out alternate infinite; +} +@media (prefers-reduced-motion: reduce) { + .b-skeleton-animate-fade { + -webkit-animation: none; + animation: none; + } +} + +@-webkit-keyframes b-skeleton-animate-fade { + 0% { + opacity: 1; + } + 100% { + opacity: 0.4; + } +} + +@keyframes b-skeleton-animate-fade { + 0% { + opacity: 1; + } + 100% { + opacity: 0.4; + } +} +.b-skeleton-animate-throb { + -webkit-animation: b-skeleton-animate-throb 0.875s ease-in alternate infinite; + animation: b-skeleton-animate-throb 0.875s ease-in alternate infinite; +} +@media (prefers-reduced-motion: reduce) { + .b-skeleton-animate-throb { + -webkit-animation: none; + animation: none; + } +} + +@-webkit-keyframes b-skeleton-animate-throb { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(0.975); + transform: scale(0.975); + } +} + +@keyframes b-skeleton-animate-throb { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + } + 100% { + -webkit-transform: scale(0.975); + transform: scale(0.975); + } +} +.table.b-table.b-table-fixed { + table-layout: fixed; +} +.table.b-table.b-table-no-border-collapse { + border-collapse: separate; + border-spacing: 0; +} +.table.b-table[aria-busy=true] { + opacity: 0.55; +} +.table.b-table > tbody > tr.b-table-details > td { + border-top: none !important; +} +.table.b-table > caption { + caption-side: bottom; +} +.table.b-table.b-table-caption-top > caption { + caption-side: top !important; +} +.table.b-table > tbody > .table-active, +.table.b-table > tbody > .table-active > th, +.table.b-table > tbody > .table-active > td { + background-color: rgba(0, 0, 0, 0.075); +} +.table.b-table.table-hover > tbody > tr.table-active:hover td, +.table.b-table.table-hover > tbody > tr.table-active:hover th { + color: #212529; + background-image: linear-gradient(rgba(0, 0, 0, 0.075), rgba(0, 0, 0, 0.075)); + background-repeat: no-repeat; +} +.table.b-table > tbody > .bg-active, +.table.b-table > tbody > .bg-active > th, +.table.b-table > tbody > .bg-active > td { + background-color: rgba(255, 255, 255, 0.075) !important; +} +.table.b-table.table-hover.table-dark > tbody > tr.bg-active:hover td, +.table.b-table.table-hover.table-dark > tbody > tr.bg-active:hover th { + color: #fff; + background-image: linear-gradient(rgba(255, 255, 255, 0.075), rgba(255, 255, 255, 0.075)); + background-repeat: no-repeat; +} + +.b-table-sticky-header, +.table-responsive, +[class*=table-responsive-] { + margin-bottom: 1rem; +} +.b-table-sticky-header > .table, +.table-responsive > .table, +[class*=table-responsive-] > .table { + margin-bottom: 0; +} + +.b-table-sticky-header { + overflow-y: auto; + max-height: 300px; +} + +@media print { + .b-table-sticky-header { + overflow-y: visible !important; + max-height: none !important; + } +} +@supports ((position: -webkit-sticky) or (position: sticky)) { + .b-table-sticky-header > .table.b-table > thead > tr > th { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 2; + } + + .b-table-sticky-header > .table.b-table > thead > tr > .b-table-sticky-column, +.b-table-sticky-header > .table.b-table > tbody > tr > .b-table-sticky-column, +.b-table-sticky-header > .table.b-table > tfoot > tr > .b-table-sticky-column, +.table-responsive > .table.b-table > thead > tr > .b-table-sticky-column, +.table-responsive > .table.b-table > tbody > tr > .b-table-sticky-column, +.table-responsive > .table.b-table > tfoot > tr > .b-table-sticky-column, +[class*=table-responsive-] > .table.b-table > thead > tr > .b-table-sticky-column, +[class*=table-responsive-] > .table.b-table > tbody > tr > .b-table-sticky-column, +[class*=table-responsive-] > .table.b-table > tfoot > tr > .b-table-sticky-column { + position: -webkit-sticky; + position: sticky; + left: 0; + } + .b-table-sticky-header > .table.b-table > thead > tr > .b-table-sticky-column, +.table-responsive > .table.b-table > thead > tr > .b-table-sticky-column, +[class*=table-responsive-] > .table.b-table > thead > tr > .b-table-sticky-column { + z-index: 5; + } + .b-table-sticky-header > .table.b-table > tbody > tr > .b-table-sticky-column, +.b-table-sticky-header > .table.b-table > tfoot > tr > .b-table-sticky-column, +.table-responsive > .table.b-table > tbody > tr > .b-table-sticky-column, +.table-responsive > .table.b-table > tfoot > tr > .b-table-sticky-column, +[class*=table-responsive-] > .table.b-table > tbody > tr > .b-table-sticky-column, +[class*=table-responsive-] > .table.b-table > tfoot > tr > .b-table-sticky-column { + z-index: 2; + } + + .table.b-table > thead > tr > .table-b-table-default, +.table.b-table > tbody > tr > .table-b-table-default, +.table.b-table > tfoot > tr > .table-b-table-default { + color: #212529; + background-color: #fff; + } + .table.b-table.table-dark > thead > tr > .bg-b-table-default, +.table.b-table.table-dark > tbody > tr > .bg-b-table-default, +.table.b-table.table-dark > tfoot > tr > .bg-b-table-default { + color: #fff; + background-color: #343a40; + } + .table.b-table.table-striped > tbody > tr:nth-of-type(odd) > .table-b-table-default { + background-image: linear-gradient(rgba(0, 0, 0, 0.05), rgba(0, 0, 0, 0.05)); + background-repeat: no-repeat; + } + .table.b-table.table-striped.table-dark > tbody > tr:nth-of-type(odd) > .bg-b-table-default { + background-image: linear-gradient(rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.05)); + background-repeat: no-repeat; + } + .table.b-table.table-hover > tbody > tr:hover > .table-b-table-default { + color: #212529; + background-image: linear-gradient(rgba(0, 0, 0, 0.075), rgba(0, 0, 0, 0.075)); + background-repeat: no-repeat; + } + .table.b-table.table-hover.table-dark > tbody > tr:hover > .bg-b-table-default { + color: #fff; + background-image: linear-gradient(rgba(255, 255, 255, 0.075), rgba(255, 255, 255, 0.075)); + background-repeat: no-repeat; + } +} +.table.b-table > thead > tr > [aria-sort], +.table.b-table > tfoot > tr > [aria-sort] { + cursor: pointer; + background-image: none; + background-repeat: no-repeat; + background-size: 0.65em 1em; +} +.table.b-table > thead > tr > [aria-sort]:not(.b-table-sort-icon-left), +.table.b-table > tfoot > tr > [aria-sort]:not(.b-table-sort-icon-left) { + background-position: right calc(0.75rem / 2) center; + padding-right: calc(0.75rem + 0.65em); +} +.table.b-table > thead > tr > [aria-sort].b-table-sort-icon-left, +.table.b-table > tfoot > tr > [aria-sort].b-table-sort-icon-left { + background-position: left calc(0.75rem / 2) center; + padding-left: calc(0.75rem + 0.65em); +} +.table.b-table > thead > tr > [aria-sort=none], +.table.b-table > tfoot > tr > [aria-sort=none] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' view-box='0 0 101 101' preserveAspectRatio='none'%3e%3cpath fill='black' opacity='.3' d='M51 1l25 23 24 22H1l25-22zM51 101l25-23 24-22H1l25 22z'/%3e%3c/svg%3e"); +} +.table.b-table > thead > tr > [aria-sort=ascending], +.table.b-table > tfoot > tr > [aria-sort=ascending] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' view-box='0 0 101 101' preserveAspectRatio='none'%3e%3cpath fill='black' d='M51 1l25 23 24 22H1l25-22z'/%3e%3cpath fill='black' opacity='.3' d='M51 101l25-23 24-22H1l25 22z'/%3e%3c/svg%3e"); +} +.table.b-table > thead > tr > [aria-sort=descending], +.table.b-table > tfoot > tr > [aria-sort=descending] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' view-box='0 0 101 101' preserveAspectRatio='none'%3e%3cpath fill='black' opacity='.3' d='M51 1l25 23 24 22H1l25-22z'/%3e%3cpath fill='black' d='M51 101l25-23 24-22H1l25 22z'/%3e%3c/svg%3e"); +} +.table.b-table.table-dark > thead > tr > [aria-sort=none], .table.b-table.table-dark > tfoot > tr > [aria-sort=none], +.table.b-table > .thead-dark > tr > [aria-sort=none] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' view-box='0 0 101 101' preserveAspectRatio='none'%3e%3cpath fill='white' opacity='.3' d='M51 1l25 23 24 22H1l25-22zM51 101l25-23 24-22H1l25 22z'/%3e%3c/svg%3e"); +} +.table.b-table.table-dark > thead > tr > [aria-sort=ascending], .table.b-table.table-dark > tfoot > tr > [aria-sort=ascending], +.table.b-table > .thead-dark > tr > [aria-sort=ascending] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' view-box='0 0 101 101' preserveAspectRatio='none'%3e%3cpath fill='white' d='M51 1l25 23 24 22H1l25-22z'/%3e%3cpath fill='white' opacity='.3' d='M51 101l25-23 24-22H1l25 22z'/%3e%3c/svg%3e"); +} +.table.b-table.table-dark > thead > tr > [aria-sort=descending], .table.b-table.table-dark > tfoot > tr > [aria-sort=descending], +.table.b-table > .thead-dark > tr > [aria-sort=descending] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' view-box='0 0 101 101' preserveAspectRatio='none'%3e%3cpath fill='white' opacity='.3' d='M51 1l25 23 24 22H1l25-22z'/%3e%3cpath fill='white' d='M51 101l25-23 24-22H1l25 22z'/%3e%3c/svg%3e"); +} +.table.b-table > thead > tr > .table-dark[aria-sort=none], +.table.b-table > tfoot > tr > .table-dark[aria-sort=none] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' view-box='0 0 101 101' preserveAspectRatio='none'%3e%3cpath fill='white' opacity='.3' d='M51 1l25 23 24 22H1l25-22zM51 101l25-23 24-22H1l25 22z'/%3e%3c/svg%3e"); +} +.table.b-table > thead > tr > .table-dark[aria-sort=ascending], +.table.b-table > tfoot > tr > .table-dark[aria-sort=ascending] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' view-box='0 0 101 101' preserveAspectRatio='none'%3e%3cpath fill='white' d='M51 1l25 23 24 22H1l25-22z'/%3e%3cpath fill='white' opacity='.3' d='M51 101l25-23 24-22H1l25 22z'/%3e%3c/svg%3e"); +} +.table.b-table > thead > tr > .table-dark[aria-sort=descending], +.table.b-table > tfoot > tr > .table-dark[aria-sort=descending] { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='101' height='101' view-box='0 0 101 101' preserveAspectRatio='none'%3e%3cpath fill='white' opacity='.3' d='M51 1l25 23 24 22H1l25-22z'/%3e%3cpath fill='white' d='M51 101l25-23 24-22H1l25 22z'/%3e%3c/svg%3e"); +} +.table.b-table.table-sm > thead > tr > [aria-sort]:not(.b-table-sort-icon-left), +.table.b-table.table-sm > tfoot > tr > [aria-sort]:not(.b-table-sort-icon-left) { + background-position: right calc(0.3rem / 2) center; + padding-right: calc(0.3rem + 0.65em); +} +.table.b-table.table-sm > thead > tr > [aria-sort].b-table-sort-icon-left, +.table.b-table.table-sm > tfoot > tr > [aria-sort].b-table-sort-icon-left { + background-position: left calc(0.3rem / 2) center; + padding-left: calc(0.3rem + 0.65em); +} + +.table.b-table.b-table-selectable:not(.b-table-selectable-no-click) > tbody > tr { + cursor: pointer; +} +.table.b-table.b-table-selectable:not(.b-table-selectable-no-click).b-table-selecting.b-table-select-range > tbody > tr { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +@media (max-width: 575.98px) { + .table.b-table.b-table-stacked-sm { + display: block; + width: 100%; + } + .table.b-table.b-table-stacked-sm > caption, +.table.b-table.b-table-stacked-sm > tbody, +.table.b-table.b-table-stacked-sm > tbody > tr, +.table.b-table.b-table-stacked-sm > tbody > tr > td, +.table.b-table.b-table-stacked-sm > tbody > tr > th { + display: block; + } + .table.b-table.b-table-stacked-sm > thead, +.table.b-table.b-table-stacked-sm > tfoot { + display: none; + } + .table.b-table.b-table-stacked-sm > thead > tr.b-table-top-row, +.table.b-table.b-table-stacked-sm > thead > tr.b-table-bottom-row, +.table.b-table.b-table-stacked-sm > tfoot > tr.b-table-top-row, +.table.b-table.b-table-stacked-sm > tfoot > tr.b-table-bottom-row { + display: none; + } + .table.b-table.b-table-stacked-sm > caption { + caption-side: top !important; + } + .table.b-table.b-table-stacked-sm > tbody > tr > [data-label]::before { + content: attr(data-label); + width: 40%; + float: left; + text-align: right; + overflow-wrap: break-word; + font-weight: bold; + font-style: normal; + padding: 0 calc(1rem / 2) 0 0; + margin: 0; + } + .table.b-table.b-table-stacked-sm > tbody > tr > [data-label]::after { + display: block; + clear: both; + content: ""; + } + .table.b-table.b-table-stacked-sm > tbody > tr > [data-label] > div { + display: inline-block; + width: calc(100% - 40%); + padding: 0 0 0 calc(1rem / 2); + margin: 0; + } + .table.b-table.b-table-stacked-sm > tbody > tr.top-row, .table.b-table.b-table-stacked-sm > tbody > tr.bottom-row { + display: none; + } + .table.b-table.b-table-stacked-sm > tbody > tr > :first-child { + border-top-width: 3px; + } + .table.b-table.b-table-stacked-sm > tbody > tr > [rowspan] + td, +.table.b-table.b-table-stacked-sm > tbody > tr > [rowspan] + th { + border-top-width: 3px; + } +} +@media (max-width: 767.98px) { + .table.b-table.b-table-stacked-md { + display: block; + width: 100%; + } + .table.b-table.b-table-stacked-md > caption, +.table.b-table.b-table-stacked-md > tbody, +.table.b-table.b-table-stacked-md > tbody > tr, +.table.b-table.b-table-stacked-md > tbody > tr > td, +.table.b-table.b-table-stacked-md > tbody > tr > th { + display: block; + } + .table.b-table.b-table-stacked-md > thead, +.table.b-table.b-table-stacked-md > tfoot { + display: none; + } + .table.b-table.b-table-stacked-md > thead > tr.b-table-top-row, +.table.b-table.b-table-stacked-md > thead > tr.b-table-bottom-row, +.table.b-table.b-table-stacked-md > tfoot > tr.b-table-top-row, +.table.b-table.b-table-stacked-md > tfoot > tr.b-table-bottom-row { + display: none; + } + .table.b-table.b-table-stacked-md > caption { + caption-side: top !important; + } + .table.b-table.b-table-stacked-md > tbody > tr > [data-label]::before { + content: attr(data-label); + width: 40%; + float: left; + text-align: right; + overflow-wrap: break-word; + font-weight: bold; + font-style: normal; + padding: 0 calc(1rem / 2) 0 0; + margin: 0; + } + .table.b-table.b-table-stacked-md > tbody > tr > [data-label]::after { + display: block; + clear: both; + content: ""; + } + .table.b-table.b-table-stacked-md > tbody > tr > [data-label] > div { + display: inline-block; + width: calc(100% - 40%); + padding: 0 0 0 calc(1rem / 2); + margin: 0; + } + .table.b-table.b-table-stacked-md > tbody > tr.top-row, .table.b-table.b-table-stacked-md > tbody > tr.bottom-row { + display: none; + } + .table.b-table.b-table-stacked-md > tbody > tr > :first-child { + border-top-width: 3px; + } + .table.b-table.b-table-stacked-md > tbody > tr > [rowspan] + td, +.table.b-table.b-table-stacked-md > tbody > tr > [rowspan] + th { + border-top-width: 3px; + } +} +@media (max-width: 991.98px) { + .table.b-table.b-table-stacked-lg { + display: block; + width: 100%; + } + .table.b-table.b-table-stacked-lg > caption, +.table.b-table.b-table-stacked-lg > tbody, +.table.b-table.b-table-stacked-lg > tbody > tr, +.table.b-table.b-table-stacked-lg > tbody > tr > td, +.table.b-table.b-table-stacked-lg > tbody > tr > th { + display: block; + } + .table.b-table.b-table-stacked-lg > thead, +.table.b-table.b-table-stacked-lg > tfoot { + display: none; + } + .table.b-table.b-table-stacked-lg > thead > tr.b-table-top-row, +.table.b-table.b-table-stacked-lg > thead > tr.b-table-bottom-row, +.table.b-table.b-table-stacked-lg > tfoot > tr.b-table-top-row, +.table.b-table.b-table-stacked-lg > tfoot > tr.b-table-bottom-row { + display: none; + } + .table.b-table.b-table-stacked-lg > caption { + caption-side: top !important; + } + .table.b-table.b-table-stacked-lg > tbody > tr > [data-label]::before { + content: attr(data-label); + width: 40%; + float: left; + text-align: right; + overflow-wrap: break-word; + font-weight: bold; + font-style: normal; + padding: 0 calc(1rem / 2) 0 0; + margin: 0; + } + .table.b-table.b-table-stacked-lg > tbody > tr > [data-label]::after { + display: block; + clear: both; + content: ""; + } + .table.b-table.b-table-stacked-lg > tbody > tr > [data-label] > div { + display: inline-block; + width: calc(100% - 40%); + padding: 0 0 0 calc(1rem / 2); + margin: 0; + } + .table.b-table.b-table-stacked-lg > tbody > tr.top-row, .table.b-table.b-table-stacked-lg > tbody > tr.bottom-row { + display: none; + } + .table.b-table.b-table-stacked-lg > tbody > tr > :first-child { + border-top-width: 3px; + } + .table.b-table.b-table-stacked-lg > tbody > tr > [rowspan] + td, +.table.b-table.b-table-stacked-lg > tbody > tr > [rowspan] + th { + border-top-width: 3px; + } +} +@media (max-width: 1199.98px) { + .table.b-table.b-table-stacked-xl { + display: block; + width: 100%; + } + .table.b-table.b-table-stacked-xl > caption, +.table.b-table.b-table-stacked-xl > tbody, +.table.b-table.b-table-stacked-xl > tbody > tr, +.table.b-table.b-table-stacked-xl > tbody > tr > td, +.table.b-table.b-table-stacked-xl > tbody > tr > th { + display: block; + } + .table.b-table.b-table-stacked-xl > thead, +.table.b-table.b-table-stacked-xl > tfoot { + display: none; + } + .table.b-table.b-table-stacked-xl > thead > tr.b-table-top-row, +.table.b-table.b-table-stacked-xl > thead > tr.b-table-bottom-row, +.table.b-table.b-table-stacked-xl > tfoot > tr.b-table-top-row, +.table.b-table.b-table-stacked-xl > tfoot > tr.b-table-bottom-row { + display: none; + } + .table.b-table.b-table-stacked-xl > caption { + caption-side: top !important; + } + .table.b-table.b-table-stacked-xl > tbody > tr > [data-label]::before { + content: attr(data-label); + width: 40%; + float: left; + text-align: right; + overflow-wrap: break-word; + font-weight: bold; + font-style: normal; + padding: 0 calc(1rem / 2) 0 0; + margin: 0; + } + .table.b-table.b-table-stacked-xl > tbody > tr > [data-label]::after { + display: block; + clear: both; + content: ""; + } + .table.b-table.b-table-stacked-xl > tbody > tr > [data-label] > div { + display: inline-block; + width: calc(100% - 40%); + padding: 0 0 0 calc(1rem / 2); + margin: 0; + } + .table.b-table.b-table-stacked-xl > tbody > tr.top-row, .table.b-table.b-table-stacked-xl > tbody > tr.bottom-row { + display: none; + } + .table.b-table.b-table-stacked-xl > tbody > tr > :first-child { + border-top-width: 3px; + } + .table.b-table.b-table-stacked-xl > tbody > tr > [rowspan] + td, +.table.b-table.b-table-stacked-xl > tbody > tr > [rowspan] + th { + border-top-width: 3px; + } +} +.table.b-table.b-table-stacked { + display: block; + width: 100%; +} +.table.b-table.b-table-stacked > caption, +.table.b-table.b-table-stacked > tbody, +.table.b-table.b-table-stacked > tbody > tr, +.table.b-table.b-table-stacked > tbody > tr > td, +.table.b-table.b-table-stacked > tbody > tr > th { + display: block; +} +.table.b-table.b-table-stacked > thead, +.table.b-table.b-table-stacked > tfoot { + display: none; +} +.table.b-table.b-table-stacked > thead > tr.b-table-top-row, +.table.b-table.b-table-stacked > thead > tr.b-table-bottom-row, +.table.b-table.b-table-stacked > tfoot > tr.b-table-top-row, +.table.b-table.b-table-stacked > tfoot > tr.b-table-bottom-row { + display: none; +} +.table.b-table.b-table-stacked > caption { + caption-side: top !important; +} +.table.b-table.b-table-stacked > tbody > tr > [data-label]::before { + content: attr(data-label); + width: 40%; + float: left; + text-align: right; + overflow-wrap: break-word; + font-weight: bold; + font-style: normal; + padding: 0 calc(1rem / 2) 0 0; + margin: 0; +} +.table.b-table.b-table-stacked > tbody > tr > [data-label]::after { + display: block; + clear: both; + content: ""; +} +.table.b-table.b-table-stacked > tbody > tr > [data-label] > div { + display: inline-block; + width: calc(100% - 40%); + padding: 0 0 0 calc(1rem / 2); + margin: 0; +} +.table.b-table.b-table-stacked > tbody > tr.top-row, .table.b-table.b-table-stacked > tbody > tr.bottom-row { + display: none; +} +.table.b-table.b-table-stacked > tbody > tr > :first-child { + border-top-width: 3px; +} +.table.b-table.b-table-stacked > tbody > tr > [rowspan] + td, +.table.b-table.b-table-stacked > tbody > tr > [rowspan] + th { + border-top-width: 3px; +} + +.b-time { + min-width: 150px; +} +.b-time[aria-disabled=true] output, .b-time[aria-readonly=true] output, +.b-time output.disabled { + background-color: #e9ecef; + opacity: 1; +} +.b-time[aria-disabled=true] output { + pointer-events: none; +} +[dir=rtl] .b-time > .d-flex:not(.flex-column) { + flex-direction: row-reverse; +} + +.b-time .b-time-header { + margin-bottom: 0.5rem; +} +.b-time .b-time-header output { + padding: 0.25rem; + font-size: 80%; +} +.b-time .b-time-footer { + margin-top: 0.5rem; +} +.b-time .b-time-ampm { + margin-left: 0.5rem; +} + +.b-toast { + display: block; + position: relative; + max-width: 350px; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + background-clip: padding-box; + z-index: 1; + border-radius: 0.25rem; +} +.b-toast .toast { + background-color: rgba(255, 255, 255, 0.85); +} +.b-toast:not(:last-child) { + margin-bottom: 0.75rem; +} +.b-toast.b-toast-solid .toast { + background-color: white; +} +.b-toast .toast { + opacity: 1; +} +.b-toast .toast.fade:not(.show) { + opacity: 0; +} +.b-toast .toast .toast-body { + display: block; +} + +.b-toast-primary .toast { + background-color: rgba(230, 242, 255, 0.85); + border-color: rgba(184, 218, 255, 0.85); + color: #004085; +} +.b-toast-primary .toast .toast-header { + color: #004085; + background-color: rgba(204, 229, 255, 0.85); + border-bottom-color: rgba(184, 218, 255, 0.85); +} +.b-toast-primary.b-toast-solid .toast { + background-color: #e6f2ff; +} + +.b-toast-secondary .toast { + background-color: rgba(239, 240, 241, 0.85); + border-color: rgba(214, 216, 219, 0.85); + color: #383d41; +} +.b-toast-secondary .toast .toast-header { + color: #383d41; + background-color: rgba(226, 227, 229, 0.85); + border-bottom-color: rgba(214, 216, 219, 0.85); +} +.b-toast-secondary.b-toast-solid .toast { + background-color: #eff0f1; +} + +.b-toast-success .toast { + background-color: rgba(230, 245, 233, 0.85); + border-color: rgba(195, 230, 203, 0.85); + color: #155724; +} +.b-toast-success .toast .toast-header { + color: #155724; + background-color: rgba(212, 237, 218, 0.85); + border-bottom-color: rgba(195, 230, 203, 0.85); +} +.b-toast-success.b-toast-solid .toast { + background-color: #e6f5e9; +} + +.b-toast-info .toast { + background-color: rgba(229, 244, 247, 0.85); + border-color: rgba(190, 229, 235, 0.85); + color: #0c5460; +} +.b-toast-info .toast .toast-header { + color: #0c5460; + background-color: rgba(209, 236, 241, 0.85); + border-bottom-color: rgba(190, 229, 235, 0.85); +} +.b-toast-info.b-toast-solid .toast { + background-color: #e5f4f7; +} + +.b-toast-warning .toast { + background-color: rgba(255, 249, 231, 0.85); + border-color: rgba(255, 238, 186, 0.85); + color: #856404; +} +.b-toast-warning .toast .toast-header { + color: #856404; + background-color: rgba(255, 243, 205, 0.85); + border-bottom-color: rgba(255, 238, 186, 0.85); +} +.b-toast-warning.b-toast-solid .toast { + background-color: #fff9e7; +} + +.b-toast-danger .toast { + background-color: rgba(252, 237, 238, 0.85); + border-color: rgba(245, 198, 203, 0.85); + color: #721c24; +} +.b-toast-danger .toast .toast-header { + color: #721c24; + background-color: rgba(248, 215, 218, 0.85); + border-bottom-color: rgba(245, 198, 203, 0.85); +} +.b-toast-danger.b-toast-solid .toast { + background-color: #fcedee; +} + +.b-toast-light .toast { + background-color: rgba(255, 255, 255, 0.85); + border-color: rgba(253, 253, 254, 0.85); + color: #818182; +} +.b-toast-light .toast .toast-header { + color: #818182; + background-color: rgba(254, 254, 254, 0.85); + border-bottom-color: rgba(253, 253, 254, 0.85); +} +.b-toast-light.b-toast-solid .toast { + background-color: white; +} + +.b-toast-dark .toast { + background-color: rgba(227, 229, 229, 0.85); + border-color: rgba(198, 200, 202, 0.85); + color: #1b1e21; +} +.b-toast-dark .toast .toast-header { + color: #1b1e21; + background-color: rgba(214, 216, 217, 0.85); + border-bottom-color: rgba(198, 200, 202, 0.85); +} +.b-toast-dark.b-toast-solid .toast { + background-color: #e3e5e5; +} + +.b-toaster { + z-index: 1100; +} +.b-toaster .b-toaster-slot { + position: relative; + display: block; +} +.b-toaster .b-toaster-slot:empty { + display: none !important; +} + +.b-toaster.b-toaster-top-right, .b-toaster.b-toaster-top-left, .b-toaster.b-toaster-top-center, .b-toaster.b-toaster-top-full, .b-toaster.b-toaster-bottom-right, .b-toaster.b-toaster-bottom-left, .b-toaster.b-toaster-bottom-center, .b-toaster.b-toaster-bottom-full { + position: fixed; + left: 0.5rem; + right: 0.5rem; + margin: 0; + padding: 0; + height: 0; + overflow: visible; +} +.b-toaster.b-toaster-top-right .b-toaster-slot, .b-toaster.b-toaster-top-left .b-toaster-slot, .b-toaster.b-toaster-top-center .b-toaster-slot, .b-toaster.b-toaster-top-full .b-toaster-slot, .b-toaster.b-toaster-bottom-right .b-toaster-slot, .b-toaster.b-toaster-bottom-left .b-toaster-slot, .b-toaster.b-toaster-bottom-center .b-toaster-slot, .b-toaster.b-toaster-bottom-full .b-toaster-slot { + position: absolute; + max-width: 350px; + width: 100%; + /* IE 11 fix */ + left: 0; + right: 0; + padding: 0; + margin: 0; +} +.b-toaster.b-toaster-top-full .b-toaster-slot, .b-toaster.b-toaster-bottom-full .b-toaster-slot { + width: 100%; + max-width: 100%; +} +.b-toaster.b-toaster-top-full .b-toaster-slot .b-toast, +.b-toaster.b-toaster-top-full .b-toaster-slot .toast, .b-toaster.b-toaster-bottom-full .b-toaster-slot .b-toast, +.b-toaster.b-toaster-bottom-full .b-toaster-slot .toast { + width: 100%; + max-width: 100%; +} +.b-toaster.b-toaster-top-right, .b-toaster.b-toaster-top-left, .b-toaster.b-toaster-top-center, .b-toaster.b-toaster-top-full { + top: 0; +} +.b-toaster.b-toaster-top-right .b-toaster-slot, .b-toaster.b-toaster-top-left .b-toaster-slot, .b-toaster.b-toaster-top-center .b-toaster-slot, .b-toaster.b-toaster-top-full .b-toaster-slot { + top: 0.5rem; +} +.b-toaster.b-toaster-bottom-right, .b-toaster.b-toaster-bottom-left, .b-toaster.b-toaster-bottom-center, .b-toaster.b-toaster-bottom-full { + bottom: 0; +} +.b-toaster.b-toaster-bottom-right .b-toaster-slot, .b-toaster.b-toaster-bottom-left .b-toaster-slot, .b-toaster.b-toaster-bottom-center .b-toaster-slot, .b-toaster.b-toaster-bottom-full .b-toaster-slot { + bottom: 0.5rem; +} +.b-toaster.b-toaster-top-right .b-toaster-slot, .b-toaster.b-toaster-bottom-right .b-toaster-slot, .b-toaster.b-toaster-top-center .b-toaster-slot, .b-toaster.b-toaster-bottom-center .b-toaster-slot { + margin-left: auto; +} +.b-toaster.b-toaster-top-left .b-toaster-slot, .b-toaster.b-toaster-bottom-left .b-toaster-slot, .b-toaster.b-toaster-top-center .b-toaster-slot, .b-toaster.b-toaster-bottom-center .b-toaster-slot { + margin-right: auto; +} + +.b-toaster.b-toaster-top-right .b-toast.b-toaster-enter-active, .b-toaster.b-toaster-top-right .b-toast.b-toaster-leave-active, .b-toaster.b-toaster-top-right .b-toast.b-toaster-move, .b-toaster.b-toaster-top-left .b-toast.b-toaster-enter-active, .b-toaster.b-toaster-top-left .b-toast.b-toaster-leave-active, .b-toaster.b-toaster-top-left .b-toast.b-toaster-move, .b-toaster.b-toaster-bottom-right .b-toast.b-toaster-enter-active, .b-toaster.b-toaster-bottom-right .b-toast.b-toaster-leave-active, .b-toaster.b-toaster-bottom-right .b-toast.b-toaster-move, .b-toaster.b-toaster-bottom-left .b-toast.b-toaster-enter-active, .b-toaster.b-toaster-bottom-left .b-toast.b-toaster-leave-active, .b-toaster.b-toaster-bottom-left .b-toast.b-toaster-move { + transition: -webkit-transform 0.175s; + transition: transform 0.175s; + transition: transform 0.175s, -webkit-transform 0.175s; +} +.b-toaster.b-toaster-top-right .b-toast.b-toaster-enter-to .toast.fade, .b-toaster.b-toaster-top-right .b-toast.b-toaster-enter-active .toast.fade, .b-toaster.b-toaster-top-left .b-toast.b-toaster-enter-to .toast.fade, .b-toaster.b-toaster-top-left .b-toast.b-toaster-enter-active .toast.fade, .b-toaster.b-toaster-bottom-right .b-toast.b-toaster-enter-to .toast.fade, .b-toaster.b-toaster-bottom-right .b-toast.b-toaster-enter-active .toast.fade, .b-toaster.b-toaster-bottom-left .b-toast.b-toaster-enter-to .toast.fade, .b-toaster.b-toaster-bottom-left .b-toast.b-toaster-enter-active .toast.fade { + transition-delay: 0.175s; +} +.b-toaster.b-toaster-top-right .b-toast.b-toaster-leave-active, .b-toaster.b-toaster-top-left .b-toast.b-toaster-leave-active, .b-toaster.b-toaster-bottom-right .b-toast.b-toaster-leave-active, .b-toaster.b-toaster-bottom-left .b-toast.b-toaster-leave-active { + position: absolute; + transition-delay: 0.175s; +} +.b-toaster.b-toaster-top-right .b-toast.b-toaster-leave-active .toast.fade, .b-toaster.b-toaster-top-left .b-toast.b-toaster-leave-active .toast.fade, .b-toaster.b-toaster-bottom-right .b-toast.b-toaster-leave-active .toast.fade, .b-toaster.b-toaster-bottom-left .b-toast.b-toaster-leave-active .toast.fade { + transition-delay: 0s; +} +.tooltip.b-tooltip { + display: block; + opacity: 0.9; + outline: 0; +} +.tooltip.b-tooltip.fade:not(.show) { + opacity: 0; +} +.tooltip.b-tooltip.show { + opacity: 0.9; +} +.tooltip.b-tooltip.noninteractive { + pointer-events: none; +} +.tooltip.b-tooltip .arrow { + margin: 0 0.25rem; +} +.tooltip.b-tooltip.bs-tooltip-right .arrow, .tooltip.b-tooltip.b-tooltip-dark.bs-tooltip-auto[x-placement^=right] .arrow, .tooltip.b-tooltip.b-tooltip-light.bs-tooltip-auto[x-placement^=right] .arrow, .tooltip.b-tooltip.b-tooltip-danger.bs-tooltip-auto[x-placement^=right] .arrow, .tooltip.b-tooltip.b-tooltip-warning.bs-tooltip-auto[x-placement^=right] .arrow, .tooltip.b-tooltip.b-tooltip-info.bs-tooltip-auto[x-placement^=right] .arrow, .tooltip.b-tooltip.b-tooltip-success.bs-tooltip-auto[x-placement^=right] .arrow, .tooltip.b-tooltip.b-tooltip-secondary.bs-tooltip-auto[x-placement^=right] .arrow, .tooltip.b-tooltip.b-tooltip-primary.bs-tooltip-auto[x-placement^=right] .arrow, .tooltip.b-tooltip.bs-tooltip-left .arrow, .tooltip.b-tooltip.b-tooltip-dark.bs-tooltip-auto[x-placement^=left] .arrow, .tooltip.b-tooltip.b-tooltip-light.bs-tooltip-auto[x-placement^=left] .arrow, .tooltip.b-tooltip.b-tooltip-danger.bs-tooltip-auto[x-placement^=left] .arrow, .tooltip.b-tooltip.b-tooltip-warning.bs-tooltip-auto[x-placement^=left] .arrow, .tooltip.b-tooltip.b-tooltip-info.bs-tooltip-auto[x-placement^=left] .arrow, .tooltip.b-tooltip.b-tooltip-success.bs-tooltip-auto[x-placement^=left] .arrow, .tooltip.b-tooltip.b-tooltip-secondary.bs-tooltip-auto[x-placement^=left] .arrow, .tooltip.b-tooltip.b-tooltip-primary.bs-tooltip-auto[x-placement^=left] .arrow { + margin: 0.25rem 0; +} + +.tooltip.b-tooltip-primary.bs-tooltip-top .arrow::before, .tooltip.b-tooltip-primary.bs-tooltip-auto[x-placement^=top] .arrow::before { + border-top-color: #007bff; +} +.tooltip.b-tooltip-primary.bs-tooltip-right .arrow::before, .tooltip.b-tooltip-primary.bs-tooltip-auto[x-placement^=right] .arrow::before { + border-right-color: #007bff; +} +.tooltip.b-tooltip-primary.bs-tooltip-bottom .arrow::before, .tooltip.b-tooltip-primary.bs-tooltip-auto[x-placement^=bottom] .arrow::before { + border-bottom-color: #007bff; +} +.tooltip.b-tooltip-primary.bs-tooltip-left .arrow::before, .tooltip.b-tooltip-primary.bs-tooltip-auto[x-placement^=left] .arrow::before { + border-left-color: #007bff; +} +.tooltip.b-tooltip-primary .tooltip-inner { + color: #fff; + background-color: #007bff; +} + +.tooltip.b-tooltip-secondary.bs-tooltip-top .arrow::before, .tooltip.b-tooltip-secondary.bs-tooltip-auto[x-placement^=top] .arrow::before { + border-top-color: #6c757d; +} +.tooltip.b-tooltip-secondary.bs-tooltip-right .arrow::before, .tooltip.b-tooltip-secondary.bs-tooltip-auto[x-placement^=right] .arrow::before { + border-right-color: #6c757d; +} +.tooltip.b-tooltip-secondary.bs-tooltip-bottom .arrow::before, .tooltip.b-tooltip-secondary.bs-tooltip-auto[x-placement^=bottom] .arrow::before { + border-bottom-color: #6c757d; +} +.tooltip.b-tooltip-secondary.bs-tooltip-left .arrow::before, .tooltip.b-tooltip-secondary.bs-tooltip-auto[x-placement^=left] .arrow::before { + border-left-color: #6c757d; +} +.tooltip.b-tooltip-secondary .tooltip-inner { + color: #fff; + background-color: #6c757d; +} + +.tooltip.b-tooltip-success.bs-tooltip-top .arrow::before, .tooltip.b-tooltip-success.bs-tooltip-auto[x-placement^=top] .arrow::before { + border-top-color: #28a745; +} +.tooltip.b-tooltip-success.bs-tooltip-right .arrow::before, .tooltip.b-tooltip-success.bs-tooltip-auto[x-placement^=right] .arrow::before { + border-right-color: #28a745; +} +.tooltip.b-tooltip-success.bs-tooltip-bottom .arrow::before, .tooltip.b-tooltip-success.bs-tooltip-auto[x-placement^=bottom] .arrow::before { + border-bottom-color: #28a745; +} +.tooltip.b-tooltip-success.bs-tooltip-left .arrow::before, .tooltip.b-tooltip-success.bs-tooltip-auto[x-placement^=left] .arrow::before { + border-left-color: #28a745; +} +.tooltip.b-tooltip-success .tooltip-inner { + color: #fff; + background-color: #28a745; +} + +.tooltip.b-tooltip-info.bs-tooltip-top .arrow::before, .tooltip.b-tooltip-info.bs-tooltip-auto[x-placement^=top] .arrow::before { + border-top-color: #17a2b8; +} +.tooltip.b-tooltip-info.bs-tooltip-right .arrow::before, .tooltip.b-tooltip-info.bs-tooltip-auto[x-placement^=right] .arrow::before { + border-right-color: #17a2b8; +} +.tooltip.b-tooltip-info.bs-tooltip-bottom .arrow::before, .tooltip.b-tooltip-info.bs-tooltip-auto[x-placement^=bottom] .arrow::before { + border-bottom-color: #17a2b8; +} +.tooltip.b-tooltip-info.bs-tooltip-left .arrow::before, .tooltip.b-tooltip-info.bs-tooltip-auto[x-placement^=left] .arrow::before { + border-left-color: #17a2b8; +} +.tooltip.b-tooltip-info .tooltip-inner { + color: #fff; + background-color: #17a2b8; +} + +.tooltip.b-tooltip-warning.bs-tooltip-top .arrow::before, .tooltip.b-tooltip-warning.bs-tooltip-auto[x-placement^=top] .arrow::before { + border-top-color: #ffc107; +} +.tooltip.b-tooltip-warning.bs-tooltip-right .arrow::before, .tooltip.b-tooltip-warning.bs-tooltip-auto[x-placement^=right] .arrow::before { + border-right-color: #ffc107; +} +.tooltip.b-tooltip-warning.bs-tooltip-bottom .arrow::before, .tooltip.b-tooltip-warning.bs-tooltip-auto[x-placement^=bottom] .arrow::before { + border-bottom-color: #ffc107; +} +.tooltip.b-tooltip-warning.bs-tooltip-left .arrow::before, .tooltip.b-tooltip-warning.bs-tooltip-auto[x-placement^=left] .arrow::before { + border-left-color: #ffc107; +} +.tooltip.b-tooltip-warning .tooltip-inner { + color: #212529; + background-color: #ffc107; +} + +.tooltip.b-tooltip-danger.bs-tooltip-top .arrow::before, .tooltip.b-tooltip-danger.bs-tooltip-auto[x-placement^=top] .arrow::before { + border-top-color: #dc3545; +} +.tooltip.b-tooltip-danger.bs-tooltip-right .arrow::before, .tooltip.b-tooltip-danger.bs-tooltip-auto[x-placement^=right] .arrow::before { + border-right-color: #dc3545; +} +.tooltip.b-tooltip-danger.bs-tooltip-bottom .arrow::before, .tooltip.b-tooltip-danger.bs-tooltip-auto[x-placement^=bottom] .arrow::before { + border-bottom-color: #dc3545; +} +.tooltip.b-tooltip-danger.bs-tooltip-left .arrow::before, .tooltip.b-tooltip-danger.bs-tooltip-auto[x-placement^=left] .arrow::before { + border-left-color: #dc3545; +} +.tooltip.b-tooltip-danger .tooltip-inner { + color: #fff; + background-color: #dc3545; +} + +.tooltip.b-tooltip-light.bs-tooltip-top .arrow::before, .tooltip.b-tooltip-light.bs-tooltip-auto[x-placement^=top] .arrow::before { + border-top-color: #f8f9fa; +} +.tooltip.b-tooltip-light.bs-tooltip-right .arrow::before, .tooltip.b-tooltip-light.bs-tooltip-auto[x-placement^=right] .arrow::before { + border-right-color: #f8f9fa; +} +.tooltip.b-tooltip-light.bs-tooltip-bottom .arrow::before, .tooltip.b-tooltip-light.bs-tooltip-auto[x-placement^=bottom] .arrow::before { + border-bottom-color: #f8f9fa; +} +.tooltip.b-tooltip-light.bs-tooltip-left .arrow::before, .tooltip.b-tooltip-light.bs-tooltip-auto[x-placement^=left] .arrow::before { + border-left-color: #f8f9fa; +} +.tooltip.b-tooltip-light .tooltip-inner { + color: #212529; + background-color: #f8f9fa; +} + +.tooltip.b-tooltip-dark.bs-tooltip-top .arrow::before, .tooltip.b-tooltip-dark.bs-tooltip-auto[x-placement^=top] .arrow::before { + border-top-color: #343a40; +} +.tooltip.b-tooltip-dark.bs-tooltip-right .arrow::before, .tooltip.b-tooltip-dark.bs-tooltip-auto[x-placement^=right] .arrow::before { + border-right-color: #343a40; +} +.tooltip.b-tooltip-dark.bs-tooltip-bottom .arrow::before, .tooltip.b-tooltip-dark.bs-tooltip-auto[x-placement^=bottom] .arrow::before { + border-bottom-color: #343a40; +} +.tooltip.b-tooltip-dark.bs-tooltip-left .arrow::before, .tooltip.b-tooltip-dark.bs-tooltip-auto[x-placement^=left] .arrow::before { + border-left-color: #343a40; +} +.tooltip.b-tooltip-dark .tooltip-inner { + color: #fff; + background-color: #343a40; +} + +.b-icon.bi { + display: inline-block; + overflow: visible; + vertical-align: -0.15em; +} +.b-icon.b-icon-animation-cylon, .b-icon.b-iconstack .b-icon-animation-cylon > g { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-animation: 0.75s infinite ease-in-out alternate b-icon-animation-cylon; + animation: 0.75s infinite ease-in-out alternate b-icon-animation-cylon; +} +@media (prefers-reduced-motion: reduce) { + .b-icon.b-icon-animation-cylon, .b-icon.b-iconstack .b-icon-animation-cylon > g { + -webkit-animation: none; + animation: none; + } +} +.b-icon.b-icon-animation-cylon-vertical, .b-icon.b-iconstack .b-icon-animation-cylon-vertical > g { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-animation: 0.75s infinite ease-in-out alternate b-icon-animation-cylon-vertical; + animation: 0.75s infinite ease-in-out alternate b-icon-animation-cylon-vertical; +} +@media (prefers-reduced-motion: reduce) { + .b-icon.b-icon-animation-cylon-vertical, .b-icon.b-iconstack .b-icon-animation-cylon-vertical > g { + -webkit-animation: none; + animation: none; + } +} +.b-icon.b-icon-animation-fade, .b-icon.b-iconstack .b-icon-animation-fade > g { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-animation: 0.75s infinite ease-in-out alternate b-icon-animation-fade; + animation: 0.75s infinite ease-in-out alternate b-icon-animation-fade; +} +@media (prefers-reduced-motion: reduce) { + .b-icon.b-icon-animation-fade, .b-icon.b-iconstack .b-icon-animation-fade > g { + -webkit-animation: none; + animation: none; + } +} +.b-icon.b-icon-animation-spin, .b-icon.b-iconstack .b-icon-animation-spin > g { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-animation: 2s infinite linear normal b-icon-animation-spin; + animation: 2s infinite linear normal b-icon-animation-spin; +} +@media (prefers-reduced-motion: reduce) { + .b-icon.b-icon-animation-spin, .b-icon.b-iconstack .b-icon-animation-spin > g { + -webkit-animation: none; + animation: none; + } +} +.b-icon.b-icon-animation-spin-reverse, .b-icon.b-iconstack .b-icon-animation-spin-reverse > g { + -webkit-transform-origin: center; + transform-origin: center; + animation: 2s infinite linear reverse b-icon-animation-spin; +} +@media (prefers-reduced-motion: reduce) { + .b-icon.b-icon-animation-spin-reverse, .b-icon.b-iconstack .b-icon-animation-spin-reverse > g { + -webkit-animation: none; + animation: none; + } +} +.b-icon.b-icon-animation-spin-pulse, .b-icon.b-iconstack .b-icon-animation-spin-pulse > g { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-animation: 1s infinite steps(8) normal b-icon-animation-spin; + animation: 1s infinite steps(8) normal b-icon-animation-spin; +} +@media (prefers-reduced-motion: reduce) { + .b-icon.b-icon-animation-spin-pulse, .b-icon.b-iconstack .b-icon-animation-spin-pulse > g { + -webkit-animation: none; + animation: none; + } +} +.b-icon.b-icon-animation-spin-reverse-pulse, .b-icon.b-iconstack .b-icon-animation-spin-reverse-pulse > g { + -webkit-transform-origin: center; + transform-origin: center; + animation: 1s infinite steps(8) reverse b-icon-animation-spin; +} +@media (prefers-reduced-motion: reduce) { + .b-icon.b-icon-animation-spin-reverse-pulse, .b-icon.b-iconstack .b-icon-animation-spin-reverse-pulse > g { + -webkit-animation: none; + animation: none; + } +} +.b-icon.b-icon-animation-throb, .b-icon.b-iconstack .b-icon-animation-throb > g { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-animation: 0.75s infinite ease-in-out alternate b-icon-animation-throb; + animation: 0.75s infinite ease-in-out alternate b-icon-animation-throb; +} +@media (prefers-reduced-motion: reduce) { + .b-icon.b-icon-animation-throb, .b-icon.b-iconstack .b-icon-animation-throb > g { + -webkit-animation: none; + animation: none; + } +} + +@-webkit-keyframes b-icon-animation-cylon { + 0% { + -webkit-transform: translateX(-25%); + transform: translateX(-25%); + } + 100% { + -webkit-transform: translateX(25%); + transform: translateX(25%); + } +} + +@keyframes b-icon-animation-cylon { + 0% { + -webkit-transform: translateX(-25%); + transform: translateX(-25%); + } + 100% { + -webkit-transform: translateX(25%); + transform: translateX(25%); + } +} +@-webkit-keyframes b-icon-animation-cylon-vertical { + 0% { + -webkit-transform: translateY(25%); + transform: translateY(25%); + } + 100% { + -webkit-transform: translateY(-25%); + transform: translateY(-25%); + } +} +@keyframes b-icon-animation-cylon-vertical { + 0% { + -webkit-transform: translateY(25%); + transform: translateY(25%); + } + 100% { + -webkit-transform: translateY(-25%); + transform: translateY(-25%); + } +} +@-webkit-keyframes b-icon-animation-fade { + 0% { + opacity: 0.1; + } + 100% { + opacity: 1; + } +} +@keyframes b-icon-animation-fade { + 0% { + opacity: 0.1; + } + 100% { + opacity: 1; + } +} +@-webkit-keyframes b-icon-animation-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes b-icon-animation-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-webkit-keyframes b-icon-animation-throb { + 0% { + opacity: 0.5; + -webkit-transform: scale(0.5); + transform: scale(0.5); + } + 100% { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } +} +@keyframes b-icon-animation-throb { + 0% { + opacity: 0.5; + -webkit-transform: scale(0.5); + transform: scale(0.5); + } + 100% { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } +} +.btn .b-icon.bi, +.nav-link .b-icon.bi, +.dropdown-toggle .b-icon.bi, +.dropdown-item .b-icon.bi, +.input-group-text .b-icon.bi { + font-size: 125%; + vertical-align: text-bottom; +} + +/*# sourceMappingURL=bootstrap-vue.css.map */ \ No newline at end of file diff --git a/src/renderer/less/bootstrap.less b/src/renderer/less/bootstrap.less index fccdd2c6..af7ced21 100644 --- a/src/renderer/less/bootstrap.less +++ b/src/renderer/less/bootstrap.less @@ -1,911 +1,1359 @@ -// List Group -.list-group { - display: flex; - flex-direction: column; - padding-left: 0; - margin-bottom: 0; - border-radius: 0.25rem; +// Dropdown + +.dropup, +.dropend, +.dropdown, +.dropstart { + position: relative; } -.list-group-numbered { - list-style-type: none; - counter-reset: section; +.dropdown-toggle { + white-space: nowrap; } -.list-group-numbered > li::before { - content: counters(section, ".") ". "; - counter-increment: section; +.dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} +.dropdown-toggle:empty::after { + margin-left: 0; } -.list-group-item-action { - width: 100%; - color: #495057; - text-align: inherit; +.dropdown-menu { + position: absolute; + z-index: 1000; + display: none; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0; + font-size: 1rem; + color: #212529; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; } -.list-group-item-action:hover, .list-group-item-action:focus { - z-index: 1; - color: #495057; - text-decoration: none; - background-color: #f8f9fa; -} -.list-group-item-action:active { - color: #212529; - background-color: #e9ecef; +.dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: 0.125rem; } -.list-group-item { - position: relative; - display: block; - padding: 0.5rem 1rem; - color: #212529; - text-decoration: none; - background-color: #fff; - border: 1px solid rgba(0, 0, 0, 0.125); +.dropdown-menu-start { + --bs-position: start; } -.list-group-item:first-child { - border-top-left-radius: inherit; - border-top-right-radius: inherit; -} -.list-group-item:last-child { - border-bottom-right-radius: inherit; - border-bottom-left-radius: inherit; -} -.list-group-item.disabled, .list-group-item:disabled { - color: #6c757d; - pointer-events: none; - background-color: #fff; -} -.list-group-item.active { - z-index: 2; - color: #fff; - background-color: #0d6efd; - border-color: #0d6efd; -} -.list-group-item + .list-group-item { - border-top-width: 0; -} -.list-group-item + .list-group-item.active { - margin-top: -1px; - border-top-width: 1px; +.dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; } -.list-group-horizontal { - flex-direction: row; +.dropdown-menu-end { + --bs-position: end; } -.list-group-horizontal > .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; -} -.list-group-horizontal > .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; -} -.list-group-horizontal > .list-group-item.active { - margin-top: 0; -} -.list-group-horizontal > .list-group-item + .list-group-item { - border-top-width: 1px; - border-left-width: 0; -} -.list-group-horizontal > .list-group-item + .list-group-item.active { - margin-left: -1px; - border-left-width: 1px; +.dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; } @media (min-width: 576px) { - .list-group-horizontal-sm { - flex-direction: row; - } - .list-group-horizontal-sm > .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - .list-group-horizontal-sm > .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; - } - .list-group-horizontal-sm > .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-sm > .list-group-item + .list-group-item { - border-top-width: 1px; - border-left-width: 0; - } - .list-group-horizontal-sm > .list-group-item + .list-group-item.active { - margin-left: -1px; - border-left-width: 1px; - } + .dropdown-menu-sm-start { + --bs-position: start; + } + .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; + } + + .dropdown-menu-sm-end { + --bs-position: end; + } + .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; + } } @media (min-width: 768px) { - .list-group-horizontal-md { - flex-direction: row; - } - .list-group-horizontal-md > .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - .list-group-horizontal-md > .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; - } - .list-group-horizontal-md > .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-md > .list-group-item + .list-group-item { - border-top-width: 1px; - border-left-width: 0; - } - .list-group-horizontal-md > .list-group-item + .list-group-item.active { - margin-left: -1px; - border-left-width: 1px; - } + .dropdown-menu-md-start { + --bs-position: start; + } + .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; + } + + .dropdown-menu-md-end { + --bs-position: end; + } + .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; + } } @media (min-width: 992px) { - .list-group-horizontal-lg { - flex-direction: row; - } - .list-group-horizontal-lg > .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - .list-group-horizontal-lg > .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; - } - .list-group-horizontal-lg > .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-lg > .list-group-item + .list-group-item { - border-top-width: 1px; - border-left-width: 0; - } - .list-group-horizontal-lg > .list-group-item + .list-group-item.active { - margin-left: -1px; - border-left-width: 1px; - } + .dropdown-menu-lg-start { + --bs-position: start; + } + .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; + } + + .dropdown-menu-lg-end { + --bs-position: end; + } + .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; + } } @media (min-width: 1200px) { - .list-group-horizontal-xl { - flex-direction: row; - } - .list-group-horizontal-xl > .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - .list-group-horizontal-xl > .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; - } - .list-group-horizontal-xl > .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-xl > .list-group-item + .list-group-item { - border-top-width: 1px; - border-left-width: 0; - } - .list-group-horizontal-xl > .list-group-item + .list-group-item.active { - margin-left: -1px; - border-left-width: 1px; - } + .dropdown-menu-xl-start { + --bs-position: start; + } + .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; + } + + .dropdown-menu-xl-end { + --bs-position: end; + } + .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; + } } @media (min-width: 1400px) { - .list-group-horizontal-xxl { - flex-direction: row; - } - .list-group-horizontal-xxl > .list-group-item:first-child { - border-bottom-left-radius: 0.25rem; - border-top-right-radius: 0; - } - .list-group-horizontal-xxl > .list-group-item:last-child { - border-top-right-radius: 0.25rem; - border-bottom-left-radius: 0; - } - .list-group-horizontal-xxl > .list-group-item.active { - margin-top: 0; - } - .list-group-horizontal-xxl > .list-group-item + .list-group-item { - border-top-width: 1px; - border-left-width: 0; - } - .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { - margin-left: -1px; - border-left-width: 1px; - } + .dropdown-menu-xxl-start { + --bs-position: start; + } + .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; + } + + .dropdown-menu-xxl-end { + --bs-position: end; + } + .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; + } } +.dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: 0.125rem; +} +.dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} +.dropup .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: 0.125rem; +} +.dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} +.dropend .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropend .dropdown-toggle::after { + vertical-align: 0; +} + +.dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: 0.125rem; +} +.dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} +.dropstart .dropdown-toggle::after { + display: none; +} +.dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} +.dropstart .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropstart .dropdown-toggle::before { + vertical-align: 0; +} + +.dropdown-divider { + height: 0; + margin: 0.5rem 0; + overflow: hidden; + border-top: 1px solid rgba(0, 0, 0, 0.15); +} + +.dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1rem; + clear: both; + font-weight: 400; + color: #212529; + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; +} +.dropdown-item:hover, .dropdown-item:focus { + color: #1e2125; + background-color: #e9ecef; +} +.dropdown-item.active, .dropdown-item:active { + color: #fff; + text-decoration: none; + background-color: #0d6efd; +} +.dropdown-item.disabled, .dropdown-item:disabled { + color: #adb5bd; + pointer-events: none; + background-color: transparent; +} + +.dropdown-menu.show { + display: block; +} + +.dropdown-header { + display: block; + padding: 0.5rem 1rem; + margin-bottom: 0; + font-size: 0.875rem; + color: #6c757d; + white-space: nowrap; +} + +.dropdown-item-text { + display: block; + padding: 0.25rem 1rem; + color: #212529; +} + +.dropdown-menu-dark { + color: #dee2e6; + background-color: #343a40; + border-color: rgba(0, 0, 0, 0.15); +} +.dropdown-menu-dark .dropdown-item { + color: #dee2e6; +} +.dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus { + color: #fff; + background-color: rgba(255, 255, 255, 0.15); +} +.dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active { + color: #fff; + background-color: #0d6efd; +} +.dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled { + color: #adb5bd; +} +.dropdown-menu-dark .dropdown-divider { + border-color: rgba(0, 0, 0, 0.15); +} +.dropdown-menu-dark .dropdown-item-text { + color: #dee2e6; +} +.dropdown-menu-dark .dropdown-header { + color: #adb5bd; +} + + +// List Group +.list-group { + display : flex; + flex-direction: column; + padding-left : 0; + margin-bottom : 0; + border-radius : 0.25rem; +} + +.list-group-numbered { + list-style-type: none; + counter-reset : section; +} + +.list-group-numbered>li::before { + content : counters(section, ".") ". "; + counter-increment: section; +} + +.list-group-item-action { + width : 100%; + color : #495057; + text-align: inherit; +} + +.list-group-item-action:hover, +.list-group-item-action:focus { + z-index : 1; + color : #495057; + text-decoration : none; + background-color: #f8f9fa; +} + +.list-group-item-action:active { + color : #212529; + background-color: #e9ecef; +} + +.list-group-item { + position : relative; + display : block; + padding : 0.5rem 1rem; + color : #212529; + text-decoration : none; + background-color: #fff; + border : 1px solid rgba(0, 0, 0, 0.125); +} + +.list-group-item:first-child { + border-top-left-radius : inherit; + border-top-right-radius: inherit; +} + +.list-group-item:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius : inherit; +} + +.list-group-item.disabled, +.list-group-item:disabled { + color : #6c757d; + pointer-events : none; + background-color: #fff; +} + +.list-group-item.active { + z-index : 2; + color : #fff; + background-color: #0d6efd; + border-color : #0d6efd; +} + +.list-group-item+.list-group-item { + border-top-width: 0; +} + +.list-group-item+.list-group-item.active { + margin-top : -1px; + border-top-width: 1px; +} + +.list-group-horizontal { + flex-direction: row; +} + +.list-group-horizontal>.list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius : 0; +} + +.list-group-horizontal>.list-group-item:last-child { + border-top-right-radius : 0.25rem; + border-bottom-left-radius: 0; +} + +.list-group-horizontal>.list-group-item.active { + margin-top: 0; +} + +.list-group-horizontal>.list-group-item+.list-group-item { + border-top-width : 1px; + border-left-width: 0; +} + +.list-group-horizontal>.list-group-item+.list-group-item.active { + margin-left : -1px; + border-left-width: 1px; +} + +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; + } + + .list-group-horizontal-sm>.list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius : 0; + } + + .list-group-horizontal-sm>.list-group-item:last-child { + border-top-right-radius : 0.25rem; + border-bottom-left-radius: 0; + } + + .list-group-horizontal-sm>.list-group-item.active { + margin-top: 0; + } + + .list-group-horizontal-sm>.list-group-item+.list-group-item { + border-top-width : 1px; + border-left-width: 0; + } + + .list-group-horizontal-sm>.list-group-item+.list-group-item.active { + margin-left : -1px; + border-left-width: 1px; + } +} + +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; + } + + .list-group-horizontal-md>.list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius : 0; + } + + .list-group-horizontal-md>.list-group-item:last-child { + border-top-right-radius : 0.25rem; + border-bottom-left-radius: 0; + } + + .list-group-horizontal-md>.list-group-item.active { + margin-top: 0; + } + + .list-group-horizontal-md>.list-group-item+.list-group-item { + border-top-width : 1px; + border-left-width: 0; + } + + .list-group-horizontal-md>.list-group-item+.list-group-item.active { + margin-left : -1px; + border-left-width: 1px; + } +} + +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; + } + + .list-group-horizontal-lg>.list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius : 0; + } + + .list-group-horizontal-lg>.list-group-item:last-child { + border-top-right-radius : 0.25rem; + border-bottom-left-radius: 0; + } + + .list-group-horizontal-lg>.list-group-item.active { + margin-top: 0; + } + + .list-group-horizontal-lg>.list-group-item+.list-group-item { + border-top-width : 1px; + border-left-width: 0; + } + + .list-group-horizontal-lg>.list-group-item+.list-group-item.active { + margin-left : -1px; + border-left-width: 1px; + } +} + +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; + } + + .list-group-horizontal-xl>.list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius : 0; + } + + .list-group-horizontal-xl>.list-group-item:last-child { + border-top-right-radius : 0.25rem; + border-bottom-left-radius: 0; + } + + .list-group-horizontal-xl>.list-group-item.active { + margin-top: 0; + } + + .list-group-horizontal-xl>.list-group-item+.list-group-item { + border-top-width : 1px; + border-left-width: 0; + } + + .list-group-horizontal-xl>.list-group-item+.list-group-item.active { + margin-left : -1px; + border-left-width: 1px; + } +} + +@media (min-width: 1400px) { + .list-group-horizontal-xxl { + flex-direction: row; + } + + .list-group-horizontal-xxl>.list-group-item:first-child { + border-bottom-left-radius: 0.25rem; + border-top-right-radius : 0; + } + + .list-group-horizontal-xxl>.list-group-item:last-child { + border-top-right-radius : 0.25rem; + border-bottom-left-radius: 0; + } + + .list-group-horizontal-xxl>.list-group-item.active { + margin-top: 0; + } + + .list-group-horizontal-xxl>.list-group-item+.list-group-item { + border-top-width : 1px; + border-left-width: 0; + } + + .list-group-horizontal-xxl>.list-group-item+.list-group-item.active { + margin-left : -1px; + border-left-width: 1px; + } +} + .list-group-flush { - border-radius: 0; + border-radius: 0; } -.list-group-flush > .list-group-item { - border-width: 0 0 1px; + +.list-group-flush>.list-group-item { + border-width: 0 0 1px; } -.list-group-flush > .list-group-item:last-child { - border-bottom-width: 0; + +.list-group-flush>.list-group-item:last-child { + border-bottom-width: 0; } .list-group-item-primary { - color: #084298; - background-color: #cfe2ff; + color : #084298; + background-color: #cfe2ff; } -.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { - color: #084298; - background-color: #bacbe6; + +.list-group-item-primary.list-group-item-action:hover, +.list-group-item-primary.list-group-item-action:focus { + color : #084298; + background-color: #bacbe6; } + .list-group-item-primary.list-group-item-action.active { - color: #fff; - background-color: #084298; - border-color: #084298; + color : #fff; + background-color: #084298; + border-color : #084298; } .list-group-item-secondary { - color: #41464b; - background-color: #e2e3e5; + color : #41464b; + background-color: #e2e3e5; } -.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { - color: #41464b; - background-color: #cbccce; + +.list-group-item-secondary.list-group-item-action:hover, +.list-group-item-secondary.list-group-item-action:focus { + color : #41464b; + background-color: #cbccce; } + .list-group-item-secondary.list-group-item-action.active { - color: #fff; - background-color: #41464b; - border-color: #41464b; + color : #fff; + background-color: #41464b; + border-color : #41464b; } .list-group-item-success { - color: #0f5132; - background-color: #d1e7dd; + color : #0f5132; + background-color: #d1e7dd; } -.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { - color: #0f5132; - background-color: #bcd0c7; + +.list-group-item-success.list-group-item-action:hover, +.list-group-item-success.list-group-item-action:focus { + color : #0f5132; + background-color: #bcd0c7; } + .list-group-item-success.list-group-item-action.active { - color: #fff; - background-color: #0f5132; - border-color: #0f5132; + color : #fff; + background-color: #0f5132; + border-color : #0f5132; } .list-group-item-info { - color: #055160; - background-color: #cff4fc; + color : #055160; + background-color: #cff4fc; } -.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { - color: #055160; - background-color: #badce3; + +.list-group-item-info.list-group-item-action:hover, +.list-group-item-info.list-group-item-action:focus { + color : #055160; + background-color: #badce3; } + .list-group-item-info.list-group-item-action.active { - color: #fff; - background-color: #055160; - border-color: #055160; + color : #fff; + background-color: #055160; + border-color : #055160; } .list-group-item-warning { - color: #664d03; - background-color: #fff3cd; + color : #664d03; + background-color: #fff3cd; } -.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { - color: #664d03; - background-color: #e6dbb9; + +.list-group-item-warning.list-group-item-action:hover, +.list-group-item-warning.list-group-item-action:focus { + color : #664d03; + background-color: #e6dbb9; } + .list-group-item-warning.list-group-item-action.active { - color: #fff; - background-color: #664d03; - border-color: #664d03; + color : #fff; + background-color: #664d03; + border-color : #664d03; } .list-group-item-danger { - color: #842029; - background-color: #f8d7da; + color : #842029; + background-color: #f8d7da; } -.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { - color: #842029; - background-color: #dfc2c4; + +.list-group-item-danger.list-group-item-action:hover, +.list-group-item-danger.list-group-item-action:focus { + color : #842029; + background-color: #dfc2c4; } + .list-group-item-danger.list-group-item-action.active { - color: #fff; - background-color: #842029; - border-color: #842029; + color : #fff; + background-color: #842029; + border-color : #842029; } .list-group-item-light { - color: #636464; - background-color: #fefefe; + color : #636464; + background-color: #fefefe; } -.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { - color: #636464; - background-color: #e5e5e5; + +.list-group-item-light.list-group-item-action:hover, +.list-group-item-light.list-group-item-action:focus { + color : #636464; + background-color: #e5e5e5; } + .list-group-item-light.list-group-item-action.active { - color: #fff; - background-color: #636464; - border-color: #636464; + color : #fff; + background-color: #636464; + border-color : #636464; } .list-group-item-dark { - color: var(--textColor); - background-color: #333; -} -.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { - color: #141619; - background-color: #bebebf; -} -.list-group-item-dark.list-group-item-action.active { - color: #fff; - background-color: #141619; - border-color: #141619; + color : var(--textColor); + background-color: #333; } +.list-group-item-dark.list-group-item-action:hover, +.list-group-item-dark.list-group-item-action:focus { + color : #141619; + background-color: #bebebf; +} + +.list-group-item-dark.list-group-item-action.active { + color : #fff; + background-color: #141619; + border-color : #141619; +} + +// Toasts + +.toast { + width: 350px; + max-width: 100%; + font-size: 0.875rem; + pointer-events: auto; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.1); + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + border-radius: 0.25rem; +} +.toast.showing { + opacity: 0; +} +.toast:not(.show) { + display: none; +} + +.toast-container { + width: -webkit-max-content; + width: -moz-max-content; + width: max-content; + max-width: 100%; + pointer-events: none; +} +.toast-container > :not(:last-child) { + margin-bottom: 0.75rem; +} + +.toast-header { + display: flex; + align-items: center; + padding: 0.5rem 0.75rem; + color: #6c757d; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); + border-top-left-radius: calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); +} +.toast-header .btn-close { + margin-right: -0.375rem; + margin-left: 0.75rem; +} + +.toast-body { + padding: 0.75rem; + word-wrap: break-word; +} // Card .card { - position: relative; - display: flex; - flex-direction: column; - min-width: 0; - word-wrap: break-word; - background-color: #333; - background-clip: border-box; - border: 1px solid rgba(0, 0, 0, 0.125); - border-radius: 0.25rem; + position : relative; + display : flex; + flex-direction : column; + min-width : 0; + word-wrap : break-word; + background-color: #333; + background-clip : border-box; + border : 1px solid rgba(0, 0, 0, 0.125); + border-radius : 0.25rem; } -.card > hr { - margin-right: 0; - margin-left: 0; + +.card>hr { + margin-right: 0; + margin-left : 0; } -.card > .list-group { - border-top: inherit; - border-bottom: inherit; + +.card>.list-group { + border-top : inherit; + border-bottom: inherit; } -.card > .list-group:first-child { - border-top-width: 0; - border-top-left-radius: calc(0.25rem - 1px); - border-top-right-radius: calc(0.25rem - 1px); + +.card>.list-group:first-child { + border-top-width : 0; + border-top-left-radius : calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); } -.card > .list-group:last-child { - border-bottom-width: 0; - border-bottom-right-radius: calc(0.25rem - 1px); - border-bottom-left-radius: calc(0.25rem - 1px); + +.card>.list-group:last-child { + border-bottom-width : 0; + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius : calc(0.25rem - 1px); } -.card > .card-header + .list-group, -.card > .list-group + .card-footer { - border-top: 0; + +.card>.card-header+.list-group, +.card>.list-group+.card-footer { + border-top: 0; } .card-body { - flex: 1 1 auto; - padding: 1rem 1rem; + flex : 1 1 auto; + padding: 1rem 1rem; } .card-title { - margin-bottom: 0.5rem; + margin-bottom: 0.5rem; } .card-subtitle { - margin-top: -0.25rem; - margin-bottom: 0; + margin-top : -0.25rem; + margin-bottom: 0; } .card-text:last-child { - margin-bottom: 0; + margin-bottom: 0; } -.card-link + .card-link { - margin-left: 1rem; +.card-link+.card-link { + margin-left: 1rem; } .card-header { - padding: 0.5rem 1rem; - margin-bottom: 0; - background-color: rgba(0, 0, 0, 0.03); - border-bottom: 1px solid rgba(0, 0, 0, 0.125); + padding : 0.5rem 1rem; + margin-bottom : 0; + background-color: rgba(0, 0, 0, 0.03); + border-bottom : 1px solid rgba(0, 0, 0, 0.125); } + .card-header:first-child { - border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; + border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; } .card-footer { - padding: 0.5rem 1rem; - background-color: rgba(0, 0, 0, 0.03); - border-top: 1px solid rgba(0, 0, 0, 0.125); + padding : 0.5rem 1rem; + background-color: rgba(0, 0, 0, 0.03); + border-top : 1px solid rgba(0, 0, 0, 0.125); } + .card-footer:last-child { - border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); + border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); } .card-header-tabs { - margin-right: -0.5rem; - margin-bottom: -0.5rem; - margin-left: -0.5rem; - border-bottom: 0; + margin-right : -0.5rem; + margin-bottom: -0.5rem; + margin-left : -0.5rem; + border-bottom: 0; } .card-header-pills { - margin-right: -0.5rem; - margin-left: -0.5rem; + margin-right: -0.5rem; + margin-left : -0.5rem; } .card-img-overlay { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - padding: 1rem; - border-radius: calc(0.25rem - 1px); + position : absolute; + top : 0; + right : 0; + bottom : 0; + left : 0; + padding : 1rem; + border-radius: calc(0.25rem - 1px); } .card-img, .card-img-top, .card-img-bottom { - width: 100%; + width: 100%; } .card-img, .card-img-top { - border-top-left-radius: calc(0.25rem - 1px); - border-top-right-radius: calc(0.25rem - 1px); + border-top-left-radius : calc(0.25rem - 1px); + border-top-right-radius: calc(0.25rem - 1px); } .card-img, .card-img-bottom { - border-bottom-right-radius: calc(0.25rem - 1px); - border-bottom-left-radius: calc(0.25rem - 1px); + border-bottom-right-radius: calc(0.25rem - 1px); + border-bottom-left-radius : calc(0.25rem - 1px); } -.card-group > .card { - margin-bottom: 0.75rem; +.card-group>.card { + margin-bottom: 0.75rem; } + @media (min-width: 576px) { - .card-group { - display: flex; - flex-flow: row wrap; - } - .card-group > .card { - flex: 1 0 0%; - margin-bottom: 0; - } - .card-group > .card + .card { - margin-left: 0; - border-left: 0; - } - .card-group > .card:not(:last-child) { - border-top-right-radius: 0; - border-bottom-right-radius: 0; - } - .card-group > .card:not(:last-child) .card-img-top, - .card-group > .card:not(:last-child) .card-header { - border-top-right-radius: 0; - } - .card-group > .card:not(:last-child) .card-img-bottom, - .card-group > .card:not(:last-child) .card-footer { - border-bottom-right-radius: 0; - } - .card-group > .card:not(:first-child) { - border-top-left-radius: 0; - border-bottom-left-radius: 0; - } - .card-group > .card:not(:first-child) .card-img-top, - .card-group > .card:not(:first-child) .card-header { - border-top-left-radius: 0; - } - .card-group > .card:not(:first-child) .card-img-bottom, - .card-group > .card:not(:first-child) .card-footer { - border-bottom-left-radius: 0; - } + .card-group { + display : flex; + flex-flow: row wrap; + } + + .card-group>.card { + flex : 1 0 0%; + margin-bottom: 0; + } + + .card-group>.card+.card { + margin-left: 0; + border-left: 0; + } + + .card-group>.card:not(:last-child) { + border-top-right-radius : 0; + border-bottom-right-radius: 0; + } + + .card-group>.card:not(:last-child) .card-img-top, + .card-group>.card:not(:last-child) .card-header { + border-top-right-radius: 0; + } + + .card-group>.card:not(:last-child) .card-img-bottom, + .card-group>.card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; + } + + .card-group>.card:not(:first-child) { + border-top-left-radius : 0; + border-bottom-left-radius: 0; + } + + .card-group>.card:not(:first-child) .card-img-top, + .card-group>.card:not(:first-child) .card-header { + border-top-left-radius: 0; + } + + .card-group>.card:not(:first-child) .card-img-bottom, + .card-group>.card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; + } } .modal { - position: fixed; - top: 0; - left: 0; - z-index: 1055; - display: none; - width: 100%; - height: 100%; - overflow-x: hidden; - overflow-y: auto; - outline: 0; - user-select: none; + position : fixed; + top : 0; + left : 0; + z-index : 1055; + display : none; + width : 100%; + height : 100%; + overflow-x : hidden; + overflow-y : auto; + outline : 0; + user-select: none; - - .close { - width: 50px; - height: 42px; - background-image: var(--gfx-closeBtn); - background-position: center; - background-repeat: no-repeat; - -webkit-app-region: no-drag; - appearance: none; - border: 0; - background-color: transparent; - position: absolute; - top: 0; - right: 0; - - &:hover { - background-color: rgb(196, 43, 28) - } + + .close { + width : 50px; + height : 42px; + background-image : var(--gfx-closeBtn); + background-position: center; + background-repeat : no-repeat; + -webkit-app-region : no-drag; + appearance : none; + border : 0; + background-color : transparent; + position : absolute; + top : 0; + right : 0; + + &:hover { + background-color: rgb(196, 43, 28) } + } } .modal-dialog { - position: relative; - width: auto; - margin: 0.5rem; - pointer-events: none; - color: var(--textColor); + position : relative; + width : auto; + margin : 0.5rem; + pointer-events: none; + color : var(--textColor); } .modal.fade .modal-dialog { - transition: transform 0.1s var(--appleEase), opacity 0.1s var(--appleEase); - transform: scale(0.9); - opacity: 0; + transition: transform 0.1s var(--appleEase), opacity 0.1s var(--appleEase); + transform : scale(0.9); + opacity : 0; } @media (prefers-reduced-motion: reduce) { - .modal.fade .modal-dialog { - transition: none; - } + .modal.fade .modal-dialog { + transition: none; + } } .modal.show .modal-dialog { - transform: none; - opacity: 1; + transform: none; + opacity : 1; } .modal.modal-static .modal-dialog { - transform: scale(1.02); + transform: scale(1.02); } .modal-dialog-scrollable { - height: calc(100% - 1rem); + height: calc(100% - 1rem); } .modal-dialog-scrollable .modal-content { - max-height: 100%; - overflow: hidden; + max-height: 100%; + overflow : hidden; } .modal-dialog-scrollable .modal-body { - overflow-y: auto; + overflow-y: auto; } .modal-dialog-centered { - display: flex; - align-items: center; - min-height: calc(100% - 1rem); + display : flex; + align-items: center; + min-height : calc(100% - 1rem); } .modal-content { - position: relative; - display: flex; - flex-direction: column; - width: 100%; - pointer-events: auto; - background-color: var(--modalBackground); - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, 0.2); - border-radius: 0.3rem; - outline: 0; - box-shadow: var(--ciderShadow-Generic); - overflow: hidden; + position : relative; + display : flex; + flex-direction : column; + width : 100%; + pointer-events : auto; + background-color: var(--modalBackground); + background-clip : padding-box; + border : 1px solid rgba(0, 0, 0, 0.2); + border-radius : 0.3rem; + outline : 0; + box-shadow : var(--ciderShadow-Generic); + overflow : hidden; } .modal-backdrop { - position: fixed; - top: 0; - left: 0; - z-index: 1050; - width: 100vw; - height: 100vh; - background-color: #000; + position : fixed; + top : 0; + left : 0; + z-index : 1050; + width : 100vw; + height : 100vh; + background-color: #000; } .modal-backdrop.fade { - opacity: 0; + opacity: 0; } .modal-backdrop.show { - opacity: 0.5; + opacity: 0.5; } .modal-header { - display: flex; - flex-shrink: 0; - align-items: center; - justify-content: space-between; - padding: 1rem 1rem; - border-top-left-radius: calc(0.3rem - 1px); - border-top-right-radius: calc(0.3rem - 1px); + display : flex; + flex-shrink : 0; + align-items : center; + justify-content : space-between; + padding : 1rem 1rem; + border-top-left-radius : calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); } .modal-header .btn-close { - padding: 0.5rem 0.5rem; - margin: -0.5rem -0.5rem -0.5rem auto; + padding: 0.5rem 0.5rem; + margin : -0.5rem -0.5rem -0.5rem auto; } .modal-title { - line-height: 1.5; - margin: 0; + line-height: 1.5; + margin : 0; } .modal-body { - position: relative; - flex: 1 1 auto; - padding: 3rem 1rem 1rem 1rem; - font-size: 0.9em + position : relative; + flex : 1 1 auto; + padding : 3rem 1rem 1rem 1rem; + font-size: 0.9em } .modal-footer { - display: flex; - flex-wrap: wrap; - flex-shrink: 0; - align-items: center; - justify-content: flex-end; - padding: 0.75rem; - border-bottom-right-radius: calc(0.3rem - 1px); - border-bottom-left-radius: calc(0.3rem - 1px); + display : flex; + flex-wrap : wrap; + flex-shrink : 0; + align-items : center; + justify-content : flex-end; + padding : 0.75rem; + border-bottom-right-radius: calc(0.3rem - 1px); + border-bottom-left-radius : calc(0.3rem - 1px); } .modal-footer>* { - margin: 0.25rem; + margin: 0.25rem; } @media (min-width: 576px) { - .modal-dialog { - max-width: 500px; - margin: 1.75rem auto; - } + .modal-dialog { + max-width: 500px; + margin : 1.75rem auto; + } - .modal-dialog-scrollable { - height: calc(100% - 3.5rem); - } + .modal-dialog-scrollable { + height: calc(100% - 3.5rem); + } - .modal-dialog-centered { - min-height: calc(100% - 3.5rem); - } + .modal-dialog-centered { + min-height: calc(100% - 3.5rem); + } - .modal-sm { - max-width: 300px; - } + .modal-sm { + max-width: 300px; + } } @media (min-width: 992px) { - .modal-lg, - .modal-xl { - max-width: 800px; - } + .modal-lg, + .modal-xl { + max-width: 800px; + } } @media (min-width: 1200px) { - .modal-xl { - max-width: 1140px; - } + .modal-xl { + max-width: 1140px; + } } .modal-fullscreen { - width: 100vw; - max-width: none; - height: 100%; - margin: 0; + width : 100vw; + max-width: none; + height : 100%; + margin : 0; } .modal-fullscreen .modal-content { - height: 100%; - border: 0; - border-radius: 0; + height : 100%; + border : 0; + border-radius: 0; } .modal-fullscreen .modal-header { - border-radius: 0; + border-radius: 0; } .modal-fullscreen .modal-body { - overflow-y: auto; + overflow-y: auto; } .modal-fullscreen .modal-footer { - border-radius: 0; + border-radius: 0; } @media (max-width: 575.98px) { - .modal-fullscreen-sm-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0; - } + .modal-fullscreen-sm-down { + width : 100vw; + max-width: none; + height : 100%; + margin : 0; + } - .modal-fullscreen-sm-down .modal-content { - height: 100%; - border: 0; - border-radius: 0; - } + .modal-fullscreen-sm-down .modal-content { + height : 100%; + border : 0; + border-radius: 0; + } - .modal-fullscreen-sm-down .modal-header { - border-radius: 0; - } + .modal-fullscreen-sm-down .modal-header { + border-radius: 0; + } - .modal-fullscreen-sm-down .modal-body { - overflow-y: auto; - } + .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; + } - .modal-fullscreen-sm-down .modal-footer { - border-radius: 0; - } + .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; + } } @media (max-width: 767.98px) { - .modal-fullscreen-md-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0; - } + .modal-fullscreen-md-down { + width : 100vw; + max-width: none; + height : 100%; + margin : 0; + } - .modal-fullscreen-md-down .modal-content { - height: 100%; - border: 0; - border-radius: 0; - } + .modal-fullscreen-md-down .modal-content { + height : 100%; + border : 0; + border-radius: 0; + } - .modal-fullscreen-md-down .modal-header { - border-radius: 0; - } + .modal-fullscreen-md-down .modal-header { + border-radius: 0; + } - .modal-fullscreen-md-down .modal-body { - overflow-y: auto; - } + .modal-fullscreen-md-down .modal-body { + overflow-y: auto; + } - .modal-fullscreen-md-down .modal-footer { - border-radius: 0; - } + .modal-fullscreen-md-down .modal-footer { + border-radius: 0; + } } @media (max-width: 991.98px) { - .modal-fullscreen-lg-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0; - } + .modal-fullscreen-lg-down { + width : 100vw; + max-width: none; + height : 100%; + margin : 0; + } - .modal-fullscreen-lg-down .modal-content { - height: 100%; - border: 0; - border-radius: 0; - } + .modal-fullscreen-lg-down .modal-content { + height : 100%; + border : 0; + border-radius: 0; + } - .modal-fullscreen-lg-down .modal-header { - border-radius: 0; - } + .modal-fullscreen-lg-down .modal-header { + border-radius: 0; + } - .modal-fullscreen-lg-down .modal-body { - overflow-y: auto; - } + .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; + } - .modal-fullscreen-lg-down .modal-footer { - border-radius: 0; - } + .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; + } } @media (max-width: 1199.98px) { - .modal-fullscreen-xl-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0; - } + .modal-fullscreen-xl-down { + width : 100vw; + max-width: none; + height : 100%; + margin : 0; + } - .modal-fullscreen-xl-down .modal-content { - height: 100%; - border: 0; - border-radius: 0; - } + .modal-fullscreen-xl-down .modal-content { + height : 100%; + border : 0; + border-radius: 0; + } - .modal-fullscreen-xl-down .modal-header { - border-radius: 0; - } + .modal-fullscreen-xl-down .modal-header { + border-radius: 0; + } - .modal-fullscreen-xl-down .modal-body { - overflow-y: auto; - } + .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; + } - .modal-fullscreen-xl-down .modal-footer { - border-radius: 0; - } + .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; + } } @media (max-width: 1399.98px) { - .modal-fullscreen-xxl-down { - width: 100vw; - max-width: none; - height: 100%; - margin: 0; - } + .modal-fullscreen-xxl-down { + width : 100vw; + max-width: none; + height : 100%; + margin : 0; + } - .modal-fullscreen-xxl-down .modal-content { - height: 100%; - border: 0; - border-radius: 0; - } + .modal-fullscreen-xxl-down .modal-content { + height : 100%; + border : 0; + border-radius: 0; + } - .modal-fullscreen-xxl-down .modal-header { - border-radius: 0; - } + .modal-fullscreen-xxl-down .modal-header { + border-radius: 0; + } - .modal-fullscreen-xxl-down .modal-body { - overflow-y: auto; - } + .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; + } - .modal-fullscreen-xxl-down .modal-footer { - border-radius: 0; - } + .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; + } } .btn { - display: inline-block; - font-weight: 400; - line-height: 1.5; - color: #212529; - text-align: center; - text-decoration: none; - vertical-align: middle; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; - background-color: transparent; - border: 1px solid transparent; - padding: 0.375rem 0.75rem; - font-size: 1rem; - border-radius: 0.25rem; - font-family: inherit; - transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + display : inline-block; + font-weight : 400; + line-height : 1.5; + color : #212529; + text-align : center; + text-decoration : none; + vertical-align : middle; + cursor : pointer; + -webkit-user-select: none; + -moz-user-select : none; + user-select : none; + background-color : transparent; + border : 1px solid transparent; + padding : 0.375rem 0.75rem; + font-size : 1rem; + border-radius : 0.25rem; + font-family : inherit; + transition : color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { - .btn { - transition: none; - } + .btn { + transition: none; + } } .btn:hover { - color: #212529; + color: #212529; } .btn-check:focus+.btn, .btn:focus { - outline: 0; - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + outline : 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .btn:disabled, .btn.disabled, fieldset:disabled .btn { - pointer-events: none; - opacity: 0.65; + pointer-events: none; + opacity : 0.65; } .btn-primary { - color: #fff; - background-color: #0d6efd; - border-color: #0d6efd; + color : #fff; + background-color: #0d6efd; + border-color : #0d6efd; } .btn-primary:hover { - color: #fff; - background-color: #0b5ed7; - border-color: #0a58ca; + color : #fff; + background-color: #0b5ed7; + border-color : #0a58ca; } .btn-check:focus+.btn-primary, .btn-primary:focus { - color: #fff; - background-color: #0b5ed7; - border-color: #0a58ca; - box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5); + color : #fff; + background-color: #0b5ed7; + border-color : #0a58ca; + box-shadow : 0 0 0 0.25rem rgba(49, 132, 253, 0.5); } .btn-check:checked+.btn-primary, @@ -913,9 +1361,9 @@ fieldset:disabled .btn { .btn-primary:active, .btn-primary.active, .show>.btn-primary.dropdown-toggle { - color: #fff; - background-color: #0a58ca; - border-color: #0a53be; + color : #fff; + background-color: #0a58ca; + border-color : #0a53be; } .btn-check:checked+.btn-primary:focus, @@ -923,34 +1371,34 @@ fieldset:disabled .btn { .btn-primary:active:focus, .btn-primary.active:focus, .show>.btn-primary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5); + box-shadow: 0 0 0 0.25rem rgba(49, 132, 253, 0.5); } .btn-primary:disabled, .btn-primary.disabled { - color: #fff; - background-color: #0d6efd; - border-color: #0d6efd; + color : #fff; + background-color: #0d6efd; + border-color : #0d6efd; } .btn-secondary { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; + color : #fff; + background-color: #6c757d; + border-color : #6c757d; } .btn-secondary:hover { - color: #fff; - background-color: #5c636a; - border-color: #565e64; + color : #fff; + background-color: #5c636a; + border-color : #565e64; } .btn-check:focus+.btn-secondary, .btn-secondary:focus { - color: #fff; - background-color: #5c636a; - border-color: #565e64; - box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5); + color : #fff; + background-color: #5c636a; + border-color : #565e64; + box-shadow : 0 0 0 0.25rem rgba(130, 138, 145, 0.5); } .btn-check:checked+.btn-secondary, @@ -958,9 +1406,9 @@ fieldset:disabled .btn { .btn-secondary:active, .btn-secondary.active, .show>.btn-secondary.dropdown-toggle { - color: #fff; - background-color: #565e64; - border-color: #51585e; + color : #fff; + background-color: #565e64; + border-color : #51585e; } .btn-check:checked+.btn-secondary:focus, @@ -968,34 +1416,34 @@ fieldset:disabled .btn { .btn-secondary:active:focus, .btn-secondary.active:focus, .show>.btn-secondary.dropdown-toggle:focus { - box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5); + box-shadow: 0 0 0 0.25rem rgba(130, 138, 145, 0.5); } .btn-secondary:disabled, .btn-secondary.disabled { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; + color : #fff; + background-color: #6c757d; + border-color : #6c757d; } .btn-success { - color: #fff; - background-color: #198754; - border-color: #198754; + color : #fff; + background-color: #198754; + border-color : #198754; } .btn-success:hover { - color: #fff; - background-color: #157347; - border-color: #146c43; + color : #fff; + background-color: #157347; + border-color : #146c43; } .btn-check:focus+.btn-success, .btn-success:focus { - color: #fff; - background-color: #157347; - border-color: #146c43; - box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5); + color : #fff; + background-color: #157347; + border-color : #146c43; + box-shadow : 0 0 0 0.25rem rgba(60, 153, 110, 0.5); } .btn-check:checked+.btn-success, @@ -1003,9 +1451,9 @@ fieldset:disabled .btn { .btn-success:active, .btn-success.active, .show>.btn-success.dropdown-toggle { - color: #fff; - background-color: #146c43; - border-color: #13653f; + color : #fff; + background-color: #146c43; + border-color : #13653f; } .btn-check:checked+.btn-success:focus, @@ -1013,34 +1461,34 @@ fieldset:disabled .btn { .btn-success:active:focus, .btn-success.active:focus, .show>.btn-success.dropdown-toggle:focus { - box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5); + box-shadow: 0 0 0 0.25rem rgba(60, 153, 110, 0.5); } .btn-success:disabled, .btn-success.disabled { - color: #fff; - background-color: #198754; - border-color: #198754; + color : #fff; + background-color: #198754; + border-color : #198754; } .btn-info { - color: #000; - background-color: #0dcaf0; - border-color: #0dcaf0; + color : #000; + background-color: #0dcaf0; + border-color : #0dcaf0; } .btn-info:hover { - color: #000; - background-color: #31d2f2; - border-color: #25cff2; + color : #000; + background-color: #31d2f2; + border-color : #25cff2; } .btn-check:focus+.btn-info, .btn-info:focus { - color: #000; - background-color: #31d2f2; - border-color: #25cff2; - box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5); + color : #000; + background-color: #31d2f2; + border-color : #25cff2; + box-shadow : 0 0 0 0.25rem rgba(11, 172, 204, 0.5); } .btn-check:checked+.btn-info, @@ -1048,9 +1496,9 @@ fieldset:disabled .btn { .btn-info:active, .btn-info.active, .show>.btn-info.dropdown-toggle { - color: #000; - background-color: #3dd5f3; - border-color: #25cff2; + color : #000; + background-color: #3dd5f3; + border-color : #25cff2; } .btn-check:checked+.btn-info:focus, @@ -1058,34 +1506,34 @@ fieldset:disabled .btn { .btn-info:active:focus, .btn-info.active:focus, .show>.btn-info.dropdown-toggle:focus { - box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5); + box-shadow: 0 0 0 0.25rem rgba(11, 172, 204, 0.5); } .btn-info:disabled, .btn-info.disabled { - color: #000; - background-color: #0dcaf0; - border-color: #0dcaf0; + color : #000; + background-color: #0dcaf0; + border-color : #0dcaf0; } .btn-warning { - color: #000; - background-color: #ffc107; - border-color: #ffc107; + color : #000; + background-color: #ffc107; + border-color : #ffc107; } .btn-warning:hover { - color: #000; - background-color: #ffca2c; - border-color: #ffc720; + color : #000; + background-color: #ffca2c; + border-color : #ffc720; } .btn-check:focus+.btn-warning, .btn-warning:focus { - color: #000; - background-color: #ffca2c; - border-color: #ffc720; - box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5); + color : #000; + background-color: #ffca2c; + border-color : #ffc720; + box-shadow : 0 0 0 0.25rem rgba(217, 164, 6, 0.5); } .btn-check:checked+.btn-warning, @@ -1093,9 +1541,9 @@ fieldset:disabled .btn { .btn-warning:active, .btn-warning.active, .show>.btn-warning.dropdown-toggle { - color: #000; - background-color: #ffcd39; - border-color: #ffc720; + color : #000; + background-color: #ffcd39; + border-color : #ffc720; } .btn-check:checked+.btn-warning:focus, @@ -1103,34 +1551,34 @@ fieldset:disabled .btn { .btn-warning:active:focus, .btn-warning.active:focus, .show>.btn-warning.dropdown-toggle:focus { - box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5); + box-shadow: 0 0 0 0.25rem rgba(217, 164, 6, 0.5); } .btn-warning:disabled, .btn-warning.disabled { - color: #000; - background-color: #ffc107; - border-color: #ffc107; + color : #000; + background-color: #ffc107; + border-color : #ffc107; } .btn-danger { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; + color : #fff; + background-color: #dc3545; + border-color : #dc3545; } .btn-danger:hover { - color: #fff; - background-color: #bb2d3b; - border-color: #b02a37; + color : #fff; + background-color: #bb2d3b; + border-color : #b02a37; } .btn-check:focus+.btn-danger, .btn-danger:focus { - color: #fff; - background-color: #bb2d3b; - border-color: #b02a37; - box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5); + color : #fff; + background-color: #bb2d3b; + border-color : #b02a37; + box-shadow : 0 0 0 0.25rem rgba(225, 83, 97, 0.5); } .btn-check:checked+.btn-danger, @@ -1138,9 +1586,9 @@ fieldset:disabled .btn { .btn-danger:active, .btn-danger.active, .show>.btn-danger.dropdown-toggle { - color: #fff; - background-color: #b02a37; - border-color: #a52834; + color : #fff; + background-color: #b02a37; + border-color : #a52834; } .btn-check:checked+.btn-danger:focus, @@ -1148,34 +1596,34 @@ fieldset:disabled .btn { .btn-danger:active:focus, .btn-danger.active:focus, .show>.btn-danger.dropdown-toggle:focus { - box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5); + box-shadow: 0 0 0 0.25rem rgba(225, 83, 97, 0.5); } .btn-danger:disabled, .btn-danger.disabled { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; + color : #fff; + background-color: #dc3545; + border-color : #dc3545; } .btn-light { - color: #000; - background-color: #f8f9fa; - border-color: #f8f9fa; + color : #000; + background-color: #f8f9fa; + border-color : #f8f9fa; } .btn-light:hover { - color: #000; - background-color: #f9fafb; - border-color: #f9fafb; + color : #000; + background-color: #f9fafb; + border-color : #f9fafb; } .btn-check:focus+.btn-light, .btn-light:focus { - color: #000; - background-color: #f9fafb; - border-color: #f9fafb; - box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5); + color : #000; + background-color: #f9fafb; + border-color : #f9fafb; + box-shadow : 0 0 0 0.25rem rgba(211, 212, 213, 0.5); } .btn-check:checked+.btn-light, @@ -1183,9 +1631,9 @@ fieldset:disabled .btn { .btn-light:active, .btn-light.active, .show>.btn-light.dropdown-toggle { - color: #000; - background-color: #f9fafb; - border-color: #f9fafb; + color : #000; + background-color: #f9fafb; + border-color : #f9fafb; } .btn-check:checked+.btn-light:focus, @@ -1193,34 +1641,34 @@ fieldset:disabled .btn { .btn-light:active:focus, .btn-light.active:focus, .show>.btn-light.dropdown-toggle:focus { - box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5); + box-shadow: 0 0 0 0.25rem rgba(211, 212, 213, 0.5); } .btn-light:disabled, .btn-light.disabled { - color: #000; - background-color: #f8f9fa; - border-color: #f8f9fa; + color : #000; + background-color: #f8f9fa; + border-color : #f8f9fa; } .btn-dark { - color: #fff; - background-color: #212529; - border-color: #212529; + color : #fff; + background-color: #212529; + border-color : #212529; } .btn-dark:hover { - color: #fff; - background-color: #1c1f23; - border-color: #1a1e21; + color : #fff; + background-color: #1c1f23; + border-color : #1a1e21; } .btn-check:focus+.btn-dark, .btn-dark:focus { - color: #fff; - background-color: #1c1f23; - border-color: #1a1e21; - box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5); + color : #fff; + background-color: #1c1f23; + border-color : #1a1e21; + box-shadow : 0 0 0 0.25rem rgba(66, 70, 73, 0.5); } .btn-check:checked+.btn-dark, @@ -1228,9 +1676,9 @@ fieldset:disabled .btn { .btn-dark:active, .btn-dark.active, .show>.btn-dark.dropdown-toggle { - color: #fff; - background-color: #1a1e21; - border-color: #191c1f; + color : #fff; + background-color: #1a1e21; + border-color : #191c1f; } .btn-check:checked+.btn-dark:focus, @@ -1238,30 +1686,30 @@ fieldset:disabled .btn { .btn-dark:active:focus, .btn-dark.active:focus, .show>.btn-dark.dropdown-toggle:focus { - box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5); + box-shadow: 0 0 0 0.25rem rgba(66, 70, 73, 0.5); } .btn-dark:disabled, .btn-dark.disabled { - color: #fff; - background-color: #212529; - border-color: #212529; + color : #fff; + background-color: #212529; + border-color : #212529; } .btn-outline-primary { - color: #0d6efd; - border-color: #0d6efd; + color : #0d6efd; + border-color: #0d6efd; } .btn-outline-primary:hover { - color: #fff; - background-color: #0d6efd; - border-color: #0d6efd; + color : #fff; + background-color: #0d6efd; + border-color : #0d6efd; } .btn-check:focus+.btn-outline-primary, .btn-outline-primary:focus { - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5); + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5); } .btn-check:checked+.btn-outline-primary, @@ -1269,9 +1717,9 @@ fieldset:disabled .btn { .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show { - color: #fff; - background-color: #0d6efd; - border-color: #0d6efd; + color : #fff; + background-color: #0d6efd; + border-color : #0d6efd; } .btn-check:checked+.btn-outline-primary:focus, @@ -1279,29 +1727,29 @@ fieldset:disabled .btn { .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus { - box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5); + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.5); } .btn-outline-primary:disabled, .btn-outline-primary.disabled { - color: #0d6efd; - background-color: transparent; + color : #0d6efd; + background-color: transparent; } .btn-outline-secondary { - color: #6c757d; - border-color: #6c757d; + color : #6c757d; + border-color: #6c757d; } .btn-outline-secondary:hover { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; + color : #fff; + background-color: #6c757d; + border-color : #6c757d; } .btn-check:focus+.btn-outline-secondary, .btn-outline-secondary:focus { - box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5); + box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5); } .btn-check:checked+.btn-outline-secondary, @@ -1309,9 +1757,9 @@ fieldset:disabled .btn { .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-outline-secondary.dropdown-toggle.show { - color: #fff; - background-color: #6c757d; - border-color: #6c757d; + color : #fff; + background-color: #6c757d; + border-color : #6c757d; } .btn-check:checked+.btn-outline-secondary:focus, @@ -1319,29 +1767,29 @@ fieldset:disabled .btn { .btn-outline-secondary:active:focus, .btn-outline-secondary.active:focus, .btn-outline-secondary.dropdown-toggle.show:focus { - box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5); + box-shadow: 0 0 0 0.25rem rgba(108, 117, 125, 0.5); } .btn-outline-secondary:disabled, .btn-outline-secondary.disabled { - color: #6c757d; - background-color: transparent; + color : #6c757d; + background-color: transparent; } .btn-outline-success { - color: #198754; - border-color: #198754; + color : #198754; + border-color: #198754; } .btn-outline-success:hover { - color: #fff; - background-color: #198754; - border-color: #198754; + color : #fff; + background-color: #198754; + border-color : #198754; } .btn-check:focus+.btn-outline-success, .btn-outline-success:focus { - box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5); + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5); } .btn-check:checked+.btn-outline-success, @@ -1349,9 +1797,9 @@ fieldset:disabled .btn { .btn-outline-success:active, .btn-outline-success.active, .btn-outline-success.dropdown-toggle.show { - color: #fff; - background-color: #198754; - border-color: #198754; + color : #fff; + background-color: #198754; + border-color : #198754; } .btn-check:checked+.btn-outline-success:focus, @@ -1359,29 +1807,29 @@ fieldset:disabled .btn { .btn-outline-success:active:focus, .btn-outline-success.active:focus, .btn-outline-success.dropdown-toggle.show:focus { - box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5); + box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.5); } .btn-outline-success:disabled, .btn-outline-success.disabled { - color: #198754; - background-color: transparent; + color : #198754; + background-color: transparent; } .btn-outline-info { - color: #0dcaf0; - border-color: #0dcaf0; + color : #0dcaf0; + border-color: #0dcaf0; } .btn-outline-info:hover { - color: #000; - background-color: #0dcaf0; - border-color: #0dcaf0; + color : #000; + background-color: #0dcaf0; + border-color : #0dcaf0; } .btn-check:focus+.btn-outline-info, .btn-outline-info:focus { - box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5); + box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5); } .btn-check:checked+.btn-outline-info, @@ -1389,9 +1837,9 @@ fieldset:disabled .btn { .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show { - color: #000; - background-color: #0dcaf0; - border-color: #0dcaf0; + color : #000; + background-color: #0dcaf0; + border-color : #0dcaf0; } .btn-check:checked+.btn-outline-info:focus, @@ -1399,29 +1847,29 @@ fieldset:disabled .btn { .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus { - box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5); + box-shadow: 0 0 0 0.25rem rgba(13, 202, 240, 0.5); } .btn-outline-info:disabled, .btn-outline-info.disabled { - color: #0dcaf0; - background-color: transparent; + color : #0dcaf0; + background-color: transparent; } .btn-outline-warning { - color: #ffc107; - border-color: #ffc107; + color : #ffc107; + border-color: #ffc107; } .btn-outline-warning:hover { - color: #000; - background-color: #ffc107; - border-color: #ffc107; + color : #000; + background-color: #ffc107; + border-color : #ffc107; } .btn-check:focus+.btn-outline-warning, .btn-outline-warning:focus { - box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5); + box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5); } .btn-check:checked+.btn-outline-warning, @@ -1429,9 +1877,9 @@ fieldset:disabled .btn { .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show { - color: #000; - background-color: #ffc107; - border-color: #ffc107; + color : #000; + background-color: #ffc107; + border-color : #ffc107; } .btn-check:checked+.btn-outline-warning:focus, @@ -1439,29 +1887,29 @@ fieldset:disabled .btn { .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus { - box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5); + box-shadow: 0 0 0 0.25rem rgba(255, 193, 7, 0.5); } .btn-outline-warning:disabled, .btn-outline-warning.disabled { - color: #ffc107; - background-color: transparent; + color : #ffc107; + background-color: transparent; } .btn-outline-danger { - color: #dc3545; - border-color: #dc3545; + color : #dc3545; + border-color: #dc3545; } .btn-outline-danger:hover { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; + color : #fff; + background-color: #dc3545; + border-color : #dc3545; } .btn-check:focus+.btn-outline-danger, .btn-outline-danger:focus { - box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5); + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5); } .btn-check:checked+.btn-outline-danger, @@ -1469,9 +1917,9 @@ fieldset:disabled .btn { .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show { - color: #fff; - background-color: #dc3545; - border-color: #dc3545; + color : #fff; + background-color: #dc3545; + border-color : #dc3545; } .btn-check:checked+.btn-outline-danger:focus, @@ -1479,29 +1927,29 @@ fieldset:disabled .btn { .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus { - box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5); + box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.5); } .btn-outline-danger:disabled, .btn-outline-danger.disabled { - color: #dc3545; - background-color: transparent; + color : #dc3545; + background-color: transparent; } .btn-outline-light { - color: #f8f9fa; - border-color: #f8f9fa; + color : #f8f9fa; + border-color: #f8f9fa; } .btn-outline-light:hover { - color: #000; - background-color: #f8f9fa; - border-color: #f8f9fa; + color : #000; + background-color: #f8f9fa; + border-color : #f8f9fa; } .btn-check:focus+.btn-outline-light, .btn-outline-light:focus { - box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5); + box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5); } .btn-check:checked+.btn-outline-light, @@ -1509,9 +1957,9 @@ fieldset:disabled .btn { .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show { - color: #000; - background-color: #f8f9fa; - border-color: #f8f9fa; + color : #000; + background-color: #f8f9fa; + border-color : #f8f9fa; } .btn-check:checked+.btn-outline-light:focus, @@ -1519,29 +1967,29 @@ fieldset:disabled .btn { .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus { - box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5); + box-shadow: 0 0 0 0.25rem rgba(248, 249, 250, 0.5); } .btn-outline-light:disabled, .btn-outline-light.disabled { - color: #f8f9fa; - background-color: transparent; + color : #f8f9fa; + background-color: transparent; } .btn-outline-dark { - color: #212529; - border-color: #212529; + color : #212529; + border-color: #212529; } .btn-outline-dark:hover { - color: #fff; - background-color: #212529; - border-color: #212529; + color : #fff; + background-color: #212529; + border-color : #212529; } .btn-check:focus+.btn-outline-dark, .btn-outline-dark:focus { - box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5); + box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5); } .btn-check:checked+.btn-outline-dark, @@ -1549,9 +1997,9 @@ fieldset:disabled .btn { .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show { - color: #fff; - background-color: #212529; - border-color: #212529; + color : #fff; + background-color: #212529; + border-color : #212529; } .btn-check:checked+.btn-outline-dark:focus, @@ -1559,46 +2007,414 @@ fieldset:disabled .btn { .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus { - box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5); + box-shadow: 0 0 0 0.25rem rgba(33, 37, 41, 0.5); } .btn-outline-dark:disabled, .btn-outline-dark.disabled { - color: #212529; - background-color: transparent; + color : #212529; + background-color: transparent; } .btn-link { - font-weight: 400; - color: #0d6efd; - text-decoration: underline; + font-weight : 400; + color : #0d6efd; + text-decoration: underline; } .btn-link:hover { - color: #0a58ca; + color: #0a58ca; } .btn-link:disabled, .btn-link.disabled { - color: #6c757d; + color: #6c757d; } .btn-lg, .btn-group-lg>.btn { - padding: 0.5rem 1rem; - font-size: 1.25rem; - border-radius: 0.3rem; + padding : 0.5rem 1rem; + font-size : 1.25rem; + border-radius: 0.3rem; } .btn-sm, .btn-group-sm>.btn { - padding: 0.25rem 0.5rem; - font-size: 0.875rem; - border-radius: 0.2rem; + padding : 0.25rem 0.5rem; + font-size : 0.875rem; + border-radius: 0.2rem; } .form-control { - width:100%; + width: 100%; +} + +// Button Group + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + flex: 1 1 auto; +} +.btn-group > .btn-check:checked + .btn, +.btn-group > .btn-check:focus + .btn, +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn-check:checked + .btn, +.btn-group-vertical > .btn-check:focus + .btn, +.btn-group-vertical > .btn:hover, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 1; +} + +.btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} +.btn-toolbar .input-group { + width: auto; +} + +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) { + margin-left: -1px; +} +.btn-group > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:nth-child(n+3), +.btn-group > :not(.btn-check) + .btn, +.btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} +.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after { + margin-left: 0; +} +.dropstart .dropdown-toggle-split::before { + margin-right: 0; +} + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + width: 100%; +} +.btn-group-vertical > .btn:not(:first-child), +.btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; +} +.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn ~ .btn, +.btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +// Table +.table { + --bs-table-bg: transparent; + --bs-table-accent-bg: transparent; + --bs-table-striped-color: #212529; + --bs-table-striped-bg: rgba(0, 0, 0, 0.05); + --bs-table-active-color: #212529; + --bs-table-active-bg: rgba(0, 0, 0, 0.1); + --bs-table-hover-color: #212529; + --bs-table-hover-bg: rgba(0, 0, 0, 0.075); + width: 100%; + margin-bottom: 1rem; + color: #212529; + vertical-align: top; + border-color: #dee2e6; +} +.table > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + background-color: var(--bs-table-bg); + border-bottom-width: 1px; + box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg); +} +.table > tbody { + vertical-align: inherit; +} +.table > thead { + vertical-align: bottom; +} +.table > :not(:first-child) { + border-top: 2px solid currentColor; +} + +.caption-top { + caption-side: top; +} + +.table-sm > :not(caption) > * > * { + padding: 0.25rem 0.25rem; +} + +.table-bordered > :not(caption) > * { + border-width: 1px 0; +} +.table-bordered > :not(caption) > * > * { + border-width: 0 1px; +} + +.table-borderless > :not(caption) > * > * { + border-bottom-width: 0; +} +.table-borderless > :not(:first-child) { + border-top-width: 0; +} + +.table-striped > tbody > tr:nth-of-type(odd) > * { + --bs-table-accent-bg: var(--bs-table-striped-bg); + color: var(--bs-table-striped-color); +} + +.table-active { + --bs-table-accent-bg: var(--bs-table-active-bg); + color: var(--bs-table-active-color); +} + +.table-hover > tbody > tr:hover > * { + --bs-table-accent-bg: var(--bs-table-hover-bg); + color: var(--bs-table-hover-color); +} + +.table-primary { + --bs-table-bg: #cfe2ff; + --bs-table-striped-bg: #c5d7f2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bacbe6; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfd1ec; + --bs-table-hover-color: #000; + color: #000; + border-color: #bacbe6; +} + +.table-secondary { + --bs-table-bg: #e2e3e5; + --bs-table-striped-bg: #d7d8da; + --bs-table-striped-color: #000; + --bs-table-active-bg: #cbccce; + --bs-table-active-color: #000; + --bs-table-hover-bg: #d1d2d4; + --bs-table-hover-color: #000; + color: #000; + border-color: #cbccce; +} + +.table-success { + --bs-table-bg: #d1e7dd; + --bs-table-striped-bg: #c7dbd2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bcd0c7; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c1d6cc; + --bs-table-hover-color: #000; + color: #000; + border-color: #bcd0c7; +} + +.table-info { + --bs-table-bg: #cff4fc; + --bs-table-striped-bg: #c5e8ef; + --bs-table-striped-color: #000; + --bs-table-active-bg: #badce3; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfe2e9; + --bs-table-hover-color: #000; + color: #000; + border-color: #badce3; +} + +.table-warning { + --bs-table-bg: #fff3cd; + --bs-table-striped-bg: #f2e7c3; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e6dbb9; + --bs-table-active-color: #000; + --bs-table-hover-bg: #ece1be; + --bs-table-hover-color: #000; + color: #000; + border-color: #e6dbb9; +} + +.table-danger { + --bs-table-bg: #f8d7da; + --bs-table-striped-bg: #eccccf; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfc2c4; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5c7ca; + --bs-table-hover-color: #000; + color: #000; + border-color: #dfc2c4; +} + +.table-light { + --bs-table-bg: #f8f9fa; + --bs-table-striped-bg: #ecedee; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfe0e1; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5e6e7; + --bs-table-hover-color: #000; + color: #000; + border-color: #dfe0e1; +} + +.table-dark { + --bs-table-bg: #212529; + --bs-table-striped-bg: #2c3034; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #373b3e; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #323539; + --bs-table-hover-color: #fff; + color: #fff; + border-color: #373b3e; +} + +.table-responsive { + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +@media (max-width: 575.98px) { + .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 767.98px) { + .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 991.98px) { + .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1199.98px) { + .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1399.98px) { + .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} + +// Tabs + +.nav-tabs { + border-bottom: 1px solid #dee2e6; +} +.nav-tabs .nav-link { + margin-bottom: -1px; + background: none; + border: 1px solid transparent; + border-top-left-radius: 0.25rem; + border-top-right-radius: 0.25rem; +} +.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + border-color: #e9ecef #e9ecef #dee2e6; + isolation: isolate; +} +.nav-tabs .nav-link.disabled { + color: #6c757d; + background-color: transparent; + border-color: transparent; +} +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: #495057; + background-color: #fff; + border-color: #dee2e6 #dee2e6 #fff; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav-pills .nav-link { + background: none; + border: 0; + border-radius: 0.25rem; +} +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #fff; + background-color: #0d6efd; +} + +.nav-fill > .nav-link, +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} + +.nav-justified > .nav-link, +.nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} + +.nav-fill .nav-item .nav-link, +.nav-justified .nav-item .nav-link { + width: 100%; +} + +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; } /*! @@ -1607,5029 +2423,5347 @@ fieldset:disabled .btn { * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ - :root { - --bs-blue: #0d6efd; - --bs-indigo: #6610f2; - --bs-purple: #6f42c1; - --bs-pink: #d63384; - --bs-red: #dc3545; - --bs-orange: #fd7e14; - --bs-yellow: #ffc107; - --bs-green: #198754; - --bs-teal: #20c997; - --bs-cyan: #0dcaf0; - --bs-white: #fff; - --bs-gray: #6c757d; - --bs-gray-dark: #343a40; - --bs-gray-100: #f8f9fa; - --bs-gray-200: #e9ecef; - --bs-gray-300: #dee2e6; - --bs-gray-400: #ced4da; - --bs-gray-500: #adb5bd; - --bs-gray-600: #6c757d; - --bs-gray-700: #495057; - --bs-gray-800: #343a40; - --bs-gray-900: #212529; - --bs-primary: #0d6efd; - --bs-secondary: #6c757d; - --bs-success: #198754; - --bs-info: #0dcaf0; - --bs-warning: #ffc107; - --bs-danger: #dc3545; - --bs-light: #f8f9fa; - --bs-dark: #212529; - --bs-primary-rgb: 13, 110, 253; - --bs-secondary-rgb: 108, 117, 125; - --bs-success-rgb: 25, 135, 84; - --bs-info-rgb: 13, 202, 240; - --bs-warning-rgb: 255, 193, 7; - --bs-danger-rgb: 220, 53, 69; - --bs-light-rgb: 248, 249, 250; - --bs-dark-rgb: 33, 37, 41; - --bs-white-rgb: 255, 255, 255; - --bs-black-rgb: 0, 0, 0; - --bs-body-color-rgb: 33, 37, 41; - --bs-body-bg-rgb: 255, 255, 255; - --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; - --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; - --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); - --bs-body-font-family: var(--bs-font-sans-serif); - --bs-body-font-size: 1rem; - --bs-body-font-weight: 400; - --bs-body-line-height: 1.5; - --bs-body-color: #212529; - --bs-body-bg: #fff; +:root { + --bs-blue : #0d6efd; + --bs-indigo : #6610f2; + --bs-purple : #6f42c1; + --bs-pink : #d63384; + --bs-red : #dc3545; + --bs-orange : #fd7e14; + --bs-yellow : #ffc107; + --bs-green : #198754; + --bs-teal : #20c997; + --bs-cyan : #0dcaf0; + --bs-white : #fff; + --bs-gray : #6c757d; + --bs-gray-dark : #343a40; + --bs-gray-100 : #f8f9fa; + --bs-gray-200 : #e9ecef; + --bs-gray-300 : #dee2e6; + --bs-gray-400 : #ced4da; + --bs-gray-500 : #adb5bd; + --bs-gray-600 : #6c757d; + --bs-gray-700 : #495057; + --bs-gray-800 : #343a40; + --bs-gray-900 : #212529; + --bs-primary : #0d6efd; + --bs-secondary : #6c757d; + --bs-success : #198754; + --bs-info : #0dcaf0; + --bs-warning : #ffc107; + --bs-danger : #dc3545; + --bs-light : #f8f9fa; + --bs-dark : #212529; + --bs-primary-rgb : 13, 110, 253; + --bs-secondary-rgb : 108, 117, 125; + --bs-success-rgb : 25, 135, 84; + --bs-info-rgb : 13, 202, 240; + --bs-warning-rgb : 255, 193, 7; + --bs-danger-rgb : 220, 53, 69; + --bs-light-rgb : 248, 249, 250; + --bs-dark-rgb : 33, 37, 41; + --bs-white-rgb : 255, 255, 255; + --bs-black-rgb : 0, 0, 0; + --bs-body-color-rgb : 33, 37, 41; + --bs-body-bg-rgb : 255, 255, 255; + --bs-font-sans-serif : inherit; + --bs-font-monospace : SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient : linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: inherit; + --bs-body-font-size : 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color : #212529; + --bs-body-bg : #fff; +} + +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + width : 100%; + padding-right: var(--bs-gutter-x, 0.75rem); + padding-left : var(--bs-gutter-x, 0.75rem); + margin-right : auto; + margin-left : auto; +} + +@media (min-width: 576px) { + + .container-sm, + .container { + max-width: 540px; } - - .container, - .container-fluid, +} + +@media (min-width: 768px) { + + .container-md, + .container-sm, + .container { + max-width: 720px; + } +} + +@media (min-width: 992px) { + + .container-lg, + .container-md, + .container-sm, + .container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + + .container-xl, + .container-lg, + .container-md, + .container-sm, + .container { + max-width: 1140px; + } +} + +@media (min-width: 1400px) { + .container-xxl, .container-xl, .container-lg, .container-md, - .container-sm { - width: 100%; - padding-right: var(--bs-gutter-x, 0.75rem); - padding-left: var(--bs-gutter-x, 0.75rem); - margin-right: auto; - margin-left: auto; + .container-sm, + .container { + max-width: 1320px; } - - @media (min-width: 576px) { - .container-sm, .container { - max-width: 540px; - } - } - @media (min-width: 768px) { - .container-md, .container-sm, .container { - max-width: 720px; - } - } - @media (min-width: 992px) { - .container-lg, .container-md, .container-sm, .container { - max-width: 960px; - } - } - @media (min-width: 1200px) { - .container-xl, .container-lg, .container-md, .container-sm, .container { - max-width: 1140px; - } - } - @media (min-width: 1400px) { - .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { - max-width: 1320px; - } - } - - .col { +} + +.col { + flex: 1 0 0%; +} + +.row-cols-auto>* { + flex : 0 0 auto; + width: auto; +} + +.row-cols-1>* { + flex : 0 0 auto; + width: 100%; +} + +.row-cols-2>* { + flex : 0 0 auto; + width: 50%; +} + +.row-cols-3>* { + flex : 0 0 auto; + width: 33.3333333333%; +} + +.row-cols-4>* { + flex : 0 0 auto; + width: 25%; +} + +.row-cols-5>* { + flex : 0 0 auto; + width: 20%; +} + +.row-cols-6>* { + flex : 0 0 auto; + width: 16.6666666667%; +} + +.col-auto { + flex : 0 0 auto; + width: auto; +} + +.col-1 { + flex : 0 0 auto; + width: 8.33333333%; +} + +.col-2 { + flex : 0 0 auto; + width: 16.66666667%; +} + +.col-3 { + flex : 0 0 auto; + width: 25%; +} + +.col-4 { + flex : 0 0 auto; + width: 33.33333333%; +} + +.col-5 { + flex : 0 0 auto; + width: 41.66666667%; +} + +.col-6 { + flex : 0 0 auto; + width: 50%; +} + +.col-7 { + flex : 0 0 auto; + width: 58.33333333%; +} + +.col-8 { + flex : 0 0 auto; + width: 66.66666667%; +} + +.col-9 { + flex : 0 0 auto; + width: 75%; +} + +.col-10 { + flex : 0 0 auto; + width: 83.33333333%; +} + +.col-11 { + flex : 0 0 auto; + width: 91.66666667%; +} + +.col-12 { + flex : 0 0 auto; + width: 100%; +} + +.offset-1 { + margin-left: 8.33333333%; +} + +.offset-2 { + margin-left: 16.66666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.33333333%; +} + +.offset-5 { + margin-left: 41.66666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.33333333%; +} + +.offset-8 { + margin-left: 66.66666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.33333333%; +} + +.offset-11 { + margin-left: 91.66666667%; +} + +.g-0, +.gx-0 { + --bs-gutter-x: 0; +} + +.g-0, +.gy-0 { + --bs-gutter-y: 0; +} + +.g-1, +.gx-1 { + --bs-gutter-x: 0.25rem; +} + +.g-1, +.gy-1 { + --bs-gutter-y: 0.25rem; +} + +.g-2, +.gx-2 { + --bs-gutter-x: 0.5rem; +} + +.g-2, +.gy-2 { + --bs-gutter-y: 0.5rem; +} + +.g-3, +.gx-3 { + --bs-gutter-x: 1rem; +} + +.g-3, +.gy-3 { + --bs-gutter-y: 1rem; +} + +.g-4, +.gx-4 { + --bs-gutter-x: 1.5rem; +} + +.g-4, +.gy-4 { + --bs-gutter-y: 1.5rem; +} + +.g-5, +.gx-5 { + --bs-gutter-x: 3rem; +} + +.g-5, +.gy-5 { + --bs-gutter-y: 3rem; +} + +@media (min-width: 576px) { + .col-sm { flex: 1 0 0%; } - - .row-cols-auto > * { - flex: 0 0 auto; + + .row-cols-sm-auto>* { + flex : 0 0 auto; width: auto; } - - .row-cols-1 > * { - flex: 0 0 auto; + + .row-cols-sm-1>* { + flex : 0 0 auto; width: 100%; } - - .row-cols-2 > * { - flex: 0 0 auto; + + .row-cols-sm-2>* { + flex : 0 0 auto; width: 50%; } - - .row-cols-3 > * { - flex: 0 0 auto; + + .row-cols-sm-3>* { + flex : 0 0 auto; width: 33.3333333333%; } - - .row-cols-4 > * { - flex: 0 0 auto; + + .row-cols-sm-4>* { + flex : 0 0 auto; width: 25%; } - - .row-cols-5 > * { - flex: 0 0 auto; + + .row-cols-sm-5>* { + flex : 0 0 auto; width: 20%; } - - .row-cols-6 > * { - flex: 0 0 auto; + + .row-cols-sm-6>* { + flex : 0 0 auto; width: 16.6666666667%; } - - .col-auto { - flex: 0 0 auto; + + .col-sm-auto { + flex : 0 0 auto; width: auto; } - - .col-1 { - flex: 0 0 auto; + + .col-sm-1 { + flex : 0 0 auto; width: 8.33333333%; } - - .col-2 { - flex: 0 0 auto; + + .col-sm-2 { + flex : 0 0 auto; width: 16.66666667%; } - - .col-3 { - flex: 0 0 auto; + + .col-sm-3 { + flex : 0 0 auto; width: 25%; } - - .col-4 { - flex: 0 0 auto; + + .col-sm-4 { + flex : 0 0 auto; width: 33.33333333%; } - - .col-5 { - flex: 0 0 auto; + + .col-sm-5 { + flex : 0 0 auto; width: 41.66666667%; } - - .col-6 { - flex: 0 0 auto; + + .col-sm-6 { + flex : 0 0 auto; width: 50%; } - - .col-7 { - flex: 0 0 auto; + + .col-sm-7 { + flex : 0 0 auto; width: 58.33333333%; } - - .col-8 { - flex: 0 0 auto; + + .col-sm-8 { + flex : 0 0 auto; width: 66.66666667%; } - - .col-9 { - flex: 0 0 auto; + + .col-sm-9 { + flex : 0 0 auto; width: 75%; } - - .col-10 { - flex: 0 0 auto; + + .col-sm-10 { + flex : 0 0 auto; width: 83.33333333%; } - - .col-11 { - flex: 0 0 auto; + + .col-sm-11 { + flex : 0 0 auto; width: 91.66666667%; } - - .col-12 { - flex: 0 0 auto; + + .col-sm-12 { + flex : 0 0 auto; width: 100%; } - - .offset-1 { + + .offset-sm-0 { + margin-left: 0; + } + + .offset-sm-1 { margin-left: 8.33333333%; } - - .offset-2 { + + .offset-sm-2 { margin-left: 16.66666667%; } - - .offset-3 { + + .offset-sm-3 { margin-left: 25%; } - - .offset-4 { + + .offset-sm-4 { margin-left: 33.33333333%; } - - .offset-5 { + + .offset-sm-5 { margin-left: 41.66666667%; } - - .offset-6 { + + .offset-sm-6 { margin-left: 50%; } - - .offset-7 { + + .offset-sm-7 { margin-left: 58.33333333%; } - - .offset-8 { + + .offset-sm-8 { margin-left: 66.66666667%; } - - .offset-9 { + + .offset-sm-9 { margin-left: 75%; } - - .offset-10 { + + .offset-sm-10 { margin-left: 83.33333333%; } - - .offset-11 { + + .offset-sm-11 { margin-left: 91.66666667%; } - - .g-0, - .gx-0 { + + .g-sm-0, + .gx-sm-0 { --bs-gutter-x: 0; } - - .g-0, - .gy-0 { + + .g-sm-0, + .gy-sm-0 { --bs-gutter-y: 0; } - - .g-1, - .gx-1 { + + .g-sm-1, + .gx-sm-1 { --bs-gutter-x: 0.25rem; } - - .g-1, - .gy-1 { + + .g-sm-1, + .gy-sm-1 { --bs-gutter-y: 0.25rem; } - - .g-2, - .gx-2 { + + .g-sm-2, + .gx-sm-2 { --bs-gutter-x: 0.5rem; } - - .g-2, - .gy-2 { + + .g-sm-2, + .gy-sm-2 { --bs-gutter-y: 0.5rem; } - - .g-3, - .gx-3 { + + .g-sm-3, + .gx-sm-3 { --bs-gutter-x: 1rem; } - - .g-3, - .gy-3 { + + .g-sm-3, + .gy-sm-3 { --bs-gutter-y: 1rem; } - - .g-4, - .gx-4 { + + .g-sm-4, + .gx-sm-4 { --bs-gutter-x: 1.5rem; } - - .g-4, - .gy-4 { + + .g-sm-4, + .gy-sm-4 { --bs-gutter-y: 1.5rem; } - - .g-5, - .gx-5 { + + .g-sm-5, + .gx-sm-5 { --bs-gutter-x: 3rem; } - - .g-5, - .gy-5 { + + .g-sm-5, + .gy-sm-5 { --bs-gutter-y: 3rem; } - - @media (min-width: 576px) { - .col-sm { - flex: 1 0 0%; - } - - .row-cols-sm-auto > * { - flex: 0 0 auto; - width: auto; - } - - .row-cols-sm-1 > * { - flex: 0 0 auto; - width: 100%; - } - - .row-cols-sm-2 > * { - flex: 0 0 auto; - width: 50%; - } - - .row-cols-sm-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - - .row-cols-sm-4 > * { - flex: 0 0 auto; - width: 25%; - } - - .row-cols-sm-5 > * { - flex: 0 0 auto; - width: 20%; - } - - .row-cols-sm-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - - .col-sm-auto { - flex: 0 0 auto; - width: auto; - } - - .col-sm-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - - .col-sm-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - - .col-sm-3 { - flex: 0 0 auto; - width: 25%; - } - - .col-sm-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - - .col-sm-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - - .col-sm-6 { - flex: 0 0 auto; - width: 50%; - } - - .col-sm-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - - .col-sm-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - - .col-sm-9 { - flex: 0 0 auto; - width: 75%; - } - - .col-sm-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - - .col-sm-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - - .col-sm-12 { - flex: 0 0 auto; - width: 100%; - } - - .offset-sm-0 { - margin-left: 0; - } - - .offset-sm-1 { - margin-left: 8.33333333%; - } - - .offset-sm-2 { - margin-left: 16.66666667%; - } - - .offset-sm-3 { - margin-left: 25%; - } - - .offset-sm-4 { - margin-left: 33.33333333%; - } - - .offset-sm-5 { - margin-left: 41.66666667%; - } - - .offset-sm-6 { - margin-left: 50%; - } - - .offset-sm-7 { - margin-left: 58.33333333%; - } - - .offset-sm-8 { - margin-left: 66.66666667%; - } - - .offset-sm-9 { - margin-left: 75%; - } - - .offset-sm-10 { - margin-left: 83.33333333%; - } - - .offset-sm-11 { - margin-left: 91.66666667%; - } - - .g-sm-0, - .gx-sm-0 { - --bs-gutter-x: 0; - } - - .g-sm-0, - .gy-sm-0 { - --bs-gutter-y: 0; - } - - .g-sm-1, - .gx-sm-1 { - --bs-gutter-x: 0.25rem; - } - - .g-sm-1, - .gy-sm-1 { - --bs-gutter-y: 0.25rem; - } - - .g-sm-2, - .gx-sm-2 { - --bs-gutter-x: 0.5rem; - } - - .g-sm-2, - .gy-sm-2 { - --bs-gutter-y: 0.5rem; - } - - .g-sm-3, - .gx-sm-3 { - --bs-gutter-x: 1rem; - } - - .g-sm-3, - .gy-sm-3 { - --bs-gutter-y: 1rem; - } - - .g-sm-4, - .gx-sm-4 { - --bs-gutter-x: 1.5rem; - } - - .g-sm-4, - .gy-sm-4 { - --bs-gutter-y: 1.5rem; - } - - .g-sm-5, - .gx-sm-5 { - --bs-gutter-x: 3rem; - } - - .g-sm-5, - .gy-sm-5 { - --bs-gutter-y: 3rem; - } +} + +@media (min-width: 768px) { + .col-md { + flex: 1 0 0%; } - @media (min-width: 768px) { - .col-md { - flex: 1 0 0%; - } - - .row-cols-md-auto > * { - flex: 0 0 auto; - width: auto; - } - - .row-cols-md-1 > * { - flex: 0 0 auto; - width: 100%; - } - - .row-cols-md-2 > * { - flex: 0 0 auto; - width: 50%; - } - - .row-cols-md-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - - .row-cols-md-4 > * { - flex: 0 0 auto; - width: 25%; - } - - .row-cols-md-5 > * { - flex: 0 0 auto; - width: 20%; - } - - .row-cols-md-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - - .col-md-auto { - flex: 0 0 auto; - width: auto; - } - - .col-md-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - - .col-md-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - - .col-md-3 { - flex: 0 0 auto; - width: 25%; - } - - .col-md-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - - .col-md-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - - .col-md-6 { - flex: 0 0 auto; - width: 50%; - } - - .col-md-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - - .col-md-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - - .col-md-9 { - flex: 0 0 auto; - width: 75%; - } - - .col-md-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - - .col-md-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - - .col-md-12 { - flex: 0 0 auto; - width: 100%; - } - - .offset-md-0 { - margin-left: 0; - } - - .offset-md-1 { - margin-left: 8.33333333%; - } - - .offset-md-2 { - margin-left: 16.66666667%; - } - - .offset-md-3 { - margin-left: 25%; - } - - .offset-md-4 { - margin-left: 33.33333333%; - } - - .offset-md-5 { - margin-left: 41.66666667%; - } - - .offset-md-6 { - margin-left: 50%; - } - - .offset-md-7 { - margin-left: 58.33333333%; - } - - .offset-md-8 { - margin-left: 66.66666667%; - } - - .offset-md-9 { - margin-left: 75%; - } - - .offset-md-10 { - margin-left: 83.33333333%; - } - - .offset-md-11 { - margin-left: 91.66666667%; - } - - .g-md-0, + + .row-cols-md-auto>* { + flex : 0 0 auto; + width: auto; + } + + .row-cols-md-1>* { + flex : 0 0 auto; + width: 100%; + } + + .row-cols-md-2>* { + flex : 0 0 auto; + width: 50%; + } + + .row-cols-md-3>* { + flex : 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-md-4>* { + flex : 0 0 auto; + width: 25%; + } + + .row-cols-md-5>* { + flex : 0 0 auto; + width: 20%; + } + + .row-cols-md-6>* { + flex : 0 0 auto; + width: 16.6666666667%; + } + + .col-md-auto { + flex : 0 0 auto; + width: auto; + } + + .col-md-1 { + flex : 0 0 auto; + width: 8.33333333%; + } + + .col-md-2 { + flex : 0 0 auto; + width: 16.66666667%; + } + + .col-md-3 { + flex : 0 0 auto; + width: 25%; + } + + .col-md-4 { + flex : 0 0 auto; + width: 33.33333333%; + } + + .col-md-5 { + flex : 0 0 auto; + width: 41.66666667%; + } + + .col-md-6 { + flex : 0 0 auto; + width: 50%; + } + + .col-md-7 { + flex : 0 0 auto; + width: 58.33333333%; + } + + .col-md-8 { + flex : 0 0 auto; + width: 66.66666667%; + } + + .col-md-9 { + flex : 0 0 auto; + width: 75%; + } + + .col-md-10 { + flex : 0 0 auto; + width: 83.33333333%; + } + + .col-md-11 { + flex : 0 0 auto; + width: 91.66666667%; + } + + .col-md-12 { + flex : 0 0 auto; + width: 100%; + } + + .offset-md-0 { + margin-left: 0; + } + + .offset-md-1 { + margin-left: 8.33333333%; + } + + .offset-md-2 { + margin-left: 16.66666667%; + } + + .offset-md-3 { + margin-left: 25%; + } + + .offset-md-4 { + margin-left: 33.33333333%; + } + + .offset-md-5 { + margin-left: 41.66666667%; + } + + .offset-md-6 { + margin-left: 50%; + } + + .offset-md-7 { + margin-left: 58.33333333%; + } + + .offset-md-8 { + margin-left: 66.66666667%; + } + + .offset-md-9 { + margin-left: 75%; + } + + .offset-md-10 { + margin-left: 83.33333333%; + } + + .offset-md-11 { + margin-left: 91.66666667%; + } + + .g-md-0, .gx-md-0 { - --bs-gutter-x: 0; - } - - .g-md-0, + --bs-gutter-x: 0; + } + + .g-md-0, .gy-md-0 { - --bs-gutter-y: 0; - } - - .g-md-1, + --bs-gutter-y: 0; + } + + .g-md-1, .gx-md-1 { - --bs-gutter-x: 0.25rem; - } - - .g-md-1, + --bs-gutter-x: 0.25rem; + } + + .g-md-1, .gy-md-1 { - --bs-gutter-y: 0.25rem; - } - - .g-md-2, + --bs-gutter-y: 0.25rem; + } + + .g-md-2, .gx-md-2 { - --bs-gutter-x: 0.5rem; - } - - .g-md-2, + --bs-gutter-x: 0.5rem; + } + + .g-md-2, .gy-md-2 { - --bs-gutter-y: 0.5rem; - } - - .g-md-3, + --bs-gutter-y: 0.5rem; + } + + .g-md-3, .gx-md-3 { - --bs-gutter-x: 1rem; - } - - .g-md-3, + --bs-gutter-x: 1rem; + } + + .g-md-3, .gy-md-3 { - --bs-gutter-y: 1rem; - } - - .g-md-4, + --bs-gutter-y: 1rem; + } + + .g-md-4, .gx-md-4 { - --bs-gutter-x: 1.5rem; - } - - .g-md-4, + --bs-gutter-x: 1.5rem; + } + + .g-md-4, .gy-md-4 { - --bs-gutter-y: 1.5rem; - } - - .g-md-5, + --bs-gutter-y: 1.5rem; + } + + .g-md-5, .gx-md-5 { - --bs-gutter-x: 3rem; - } - - .g-md-5, + --bs-gutter-x: 3rem; + } + + .g-md-5, .gy-md-5 { - --bs-gutter-y: 3rem; - } + --bs-gutter-y: 3rem; } - @media (min-width: 992px) { - .col-lg { - flex: 1 0 0%; - } - - .row-cols-lg-auto > * { - flex: 0 0 auto; - width: auto; - } - - .row-cols-lg-1 > * { - flex: 0 0 auto; - width: 100%; - } - - .row-cols-lg-2 > * { - flex: 0 0 auto; - width: 50%; - } - - .row-cols-lg-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - - .row-cols-lg-4 > * { - flex: 0 0 auto; - width: 25%; - } - - .row-cols-lg-5 > * { - flex: 0 0 auto; - width: 20%; - } - - .row-cols-lg-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - - .col-lg-auto { - flex: 0 0 auto; - width: auto; - } - - .col-lg-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - - .col-lg-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - - .col-lg-3 { - flex: 0 0 auto; - width: 25%; - } - - .col-lg-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - - .col-lg-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - - .col-lg-6 { - flex: 0 0 auto; - width: 50%; - } - - .col-lg-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - - .col-lg-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - - .col-lg-9 { - flex: 0 0 auto; - width: 75%; - } - - .col-lg-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - - .col-lg-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - - .col-lg-12 { - flex: 0 0 auto; - width: 100%; - } - - .offset-lg-0 { - margin-left: 0; - } - - .offset-lg-1 { - margin-left: 8.33333333%; - } - - .offset-lg-2 { - margin-left: 16.66666667%; - } - - .offset-lg-3 { - margin-left: 25%; - } - - .offset-lg-4 { - margin-left: 33.33333333%; - } - - .offset-lg-5 { - margin-left: 41.66666667%; - } - - .offset-lg-6 { - margin-left: 50%; - } - - .offset-lg-7 { - margin-left: 58.33333333%; - } - - .offset-lg-8 { - margin-left: 66.66666667%; - } - - .offset-lg-9 { - margin-left: 75%; - } - - .offset-lg-10 { - margin-left: 83.33333333%; - } - - .offset-lg-11 { - margin-left: 91.66666667%; - } - - .g-lg-0, +} + +@media (min-width: 992px) { + .col-lg { + flex: 1 0 0%; + } + + .row-cols-lg-auto>* { + flex : 0 0 auto; + width: auto; + } + + .row-cols-lg-1>* { + flex : 0 0 auto; + width: 100%; + } + + .row-cols-lg-2>* { + flex : 0 0 auto; + width: 50%; + } + + .row-cols-lg-3>* { + flex : 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-lg-4>* { + flex : 0 0 auto; + width: 25%; + } + + .row-cols-lg-5>* { + flex : 0 0 auto; + width: 20%; + } + + .row-cols-lg-6>* { + flex : 0 0 auto; + width: 16.6666666667%; + } + + .col-lg-auto { + flex : 0 0 auto; + width: auto; + } + + .col-lg-1 { + flex : 0 0 auto; + width: 8.33333333%; + } + + .col-lg-2 { + flex : 0 0 auto; + width: 16.66666667%; + } + + .col-lg-3 { + flex : 0 0 auto; + width: 25%; + } + + .col-lg-4 { + flex : 0 0 auto; + width: 33.33333333%; + } + + .col-lg-5 { + flex : 0 0 auto; + width: 41.66666667%; + } + + .col-lg-6 { + flex : 0 0 auto; + width: 50%; + } + + .col-lg-7 { + flex : 0 0 auto; + width: 58.33333333%; + } + + .col-lg-8 { + flex : 0 0 auto; + width: 66.66666667%; + } + + .col-lg-9 { + flex : 0 0 auto; + width: 75%; + } + + .col-lg-10 { + flex : 0 0 auto; + width: 83.33333333%; + } + + .col-lg-11 { + flex : 0 0 auto; + width: 91.66666667%; + } + + .col-lg-12 { + flex : 0 0 auto; + width: 100%; + } + + .offset-lg-0 { + margin-left: 0; + } + + .offset-lg-1 { + margin-left: 8.33333333%; + } + + .offset-lg-2 { + margin-left: 16.66666667%; + } + + .offset-lg-3 { + margin-left: 25%; + } + + .offset-lg-4 { + margin-left: 33.33333333%; + } + + .offset-lg-5 { + margin-left: 41.66666667%; + } + + .offset-lg-6 { + margin-left: 50%; + } + + .offset-lg-7 { + margin-left: 58.33333333%; + } + + .offset-lg-8 { + margin-left: 66.66666667%; + } + + .offset-lg-9 { + margin-left: 75%; + } + + .offset-lg-10 { + margin-left: 83.33333333%; + } + + .offset-lg-11 { + margin-left: 91.66666667%; + } + + .g-lg-0, .gx-lg-0 { - --bs-gutter-x: 0; - } - - .g-lg-0, + --bs-gutter-x: 0; + } + + .g-lg-0, .gy-lg-0 { - --bs-gutter-y: 0; - } - - .g-lg-1, + --bs-gutter-y: 0; + } + + .g-lg-1, .gx-lg-1 { - --bs-gutter-x: 0.25rem; - } - - .g-lg-1, + --bs-gutter-x: 0.25rem; + } + + .g-lg-1, .gy-lg-1 { - --bs-gutter-y: 0.25rem; - } - - .g-lg-2, + --bs-gutter-y: 0.25rem; + } + + .g-lg-2, .gx-lg-2 { - --bs-gutter-x: 0.5rem; - } - - .g-lg-2, + --bs-gutter-x: 0.5rem; + } + + .g-lg-2, .gy-lg-2 { - --bs-gutter-y: 0.5rem; - } - - .g-lg-3, + --bs-gutter-y: 0.5rem; + } + + .g-lg-3, .gx-lg-3 { - --bs-gutter-x: 1rem; - } - - .g-lg-3, + --bs-gutter-x: 1rem; + } + + .g-lg-3, .gy-lg-3 { - --bs-gutter-y: 1rem; - } - - .g-lg-4, + --bs-gutter-y: 1rem; + } + + .g-lg-4, .gx-lg-4 { - --bs-gutter-x: 1.5rem; - } - - .g-lg-4, + --bs-gutter-x: 1.5rem; + } + + .g-lg-4, .gy-lg-4 { - --bs-gutter-y: 1.5rem; - } - - .g-lg-5, + --bs-gutter-y: 1.5rem; + } + + .g-lg-5, .gx-lg-5 { - --bs-gutter-x: 3rem; - } - - .g-lg-5, + --bs-gutter-x: 3rem; + } + + .g-lg-5, .gy-lg-5 { - --bs-gutter-y: 3rem; - } + --bs-gutter-y: 3rem; } - @media (min-width: 1200px) { - .col-xl { - flex: 1 0 0%; - } - - .row-cols-xl-auto > * { - flex: 0 0 auto; - width: auto; - } - - .row-cols-xl-1 > * { - flex: 0 0 auto; - width: 100%; - } - - .row-cols-xl-2 > * { - flex: 0 0 auto; - width: 50%; - } - - .row-cols-xl-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - - .row-cols-xl-4 > * { - flex: 0 0 auto; - width: 25%; - } - - .row-cols-xl-5 > * { - flex: 0 0 auto; - width: 20%; - } - - .row-cols-xl-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - - .col-xl-auto { - flex: 0 0 auto; - width: auto; - } - - .col-xl-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - - .col-xl-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - - .col-xl-3 { - flex: 0 0 auto; - width: 25%; - } - - .col-xl-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - - .col-xl-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - - .col-xl-6 { - flex: 0 0 auto; - width: 50%; - } - - .col-xl-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - - .col-xl-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - - .col-xl-9 { - flex: 0 0 auto; - width: 75%; - } - - .col-xl-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - - .col-xl-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - - .col-xl-12 { - flex: 0 0 auto; - width: 100%; - } - - .offset-xl-0 { - margin-left: 0; - } - - .offset-xl-1 { - margin-left: 8.33333333%; - } - - .offset-xl-2 { - margin-left: 16.66666667%; - } - - .offset-xl-3 { - margin-left: 25%; - } - - .offset-xl-4 { - margin-left: 33.33333333%; - } - - .offset-xl-5 { - margin-left: 41.66666667%; - } - - .offset-xl-6 { - margin-left: 50%; - } - - .offset-xl-7 { - margin-left: 58.33333333%; - } - - .offset-xl-8 { - margin-left: 66.66666667%; - } - - .offset-xl-9 { - margin-left: 75%; - } - - .offset-xl-10 { - margin-left: 83.33333333%; - } - - .offset-xl-11 { - margin-left: 91.66666667%; - } - - .g-xl-0, +} + +@media (min-width: 1200px) { + .col-xl { + flex: 1 0 0%; + } + + .row-cols-xl-auto>* { + flex : 0 0 auto; + width: auto; + } + + .row-cols-xl-1>* { + flex : 0 0 auto; + width: 100%; + } + + .row-cols-xl-2>* { + flex : 0 0 auto; + width: 50%; + } + + .row-cols-xl-3>* { + flex : 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-xl-4>* { + flex : 0 0 auto; + width: 25%; + } + + .row-cols-xl-5>* { + flex : 0 0 auto; + width: 20%; + } + + .row-cols-xl-6>* { + flex : 0 0 auto; + width: 16.6666666667%; + } + + .col-xl-auto { + flex : 0 0 auto; + width: auto; + } + + .col-xl-1 { + flex : 0 0 auto; + width: 8.33333333%; + } + + .col-xl-2 { + flex : 0 0 auto; + width: 16.66666667%; + } + + .col-xl-3 { + flex : 0 0 auto; + width: 25%; + } + + .col-xl-4 { + flex : 0 0 auto; + width: 33.33333333%; + } + + .col-xl-5 { + flex : 0 0 auto; + width: 41.66666667%; + } + + .col-xl-6 { + flex : 0 0 auto; + width: 50%; + } + + .col-xl-7 { + flex : 0 0 auto; + width: 58.33333333%; + } + + .col-xl-8 { + flex : 0 0 auto; + width: 66.66666667%; + } + + .col-xl-9 { + flex : 0 0 auto; + width: 75%; + } + + .col-xl-10 { + flex : 0 0 auto; + width: 83.33333333%; + } + + .col-xl-11 { + flex : 0 0 auto; + width: 91.66666667%; + } + + .col-xl-12 { + flex : 0 0 auto; + width: 100%; + } + + .offset-xl-0 { + margin-left: 0; + } + + .offset-xl-1 { + margin-left: 8.33333333%; + } + + .offset-xl-2 { + margin-left: 16.66666667%; + } + + .offset-xl-3 { + margin-left: 25%; + } + + .offset-xl-4 { + margin-left: 33.33333333%; + } + + .offset-xl-5 { + margin-left: 41.66666667%; + } + + .offset-xl-6 { + margin-left: 50%; + } + + .offset-xl-7 { + margin-left: 58.33333333%; + } + + .offset-xl-8 { + margin-left: 66.66666667%; + } + + .offset-xl-9 { + margin-left: 75%; + } + + .offset-xl-10 { + margin-left: 83.33333333%; + } + + .offset-xl-11 { + margin-left: 91.66666667%; + } + + .g-xl-0, .gx-xl-0 { - --bs-gutter-x: 0; - } - - .g-xl-0, + --bs-gutter-x: 0; + } + + .g-xl-0, .gy-xl-0 { - --bs-gutter-y: 0; - } - - .g-xl-1, + --bs-gutter-y: 0; + } + + .g-xl-1, .gx-xl-1 { - --bs-gutter-x: 0.25rem; - } - - .g-xl-1, + --bs-gutter-x: 0.25rem; + } + + .g-xl-1, .gy-xl-1 { - --bs-gutter-y: 0.25rem; - } - - .g-xl-2, + --bs-gutter-y: 0.25rem; + } + + .g-xl-2, .gx-xl-2 { - --bs-gutter-x: 0.5rem; - } - - .g-xl-2, + --bs-gutter-x: 0.5rem; + } + + .g-xl-2, .gy-xl-2 { - --bs-gutter-y: 0.5rem; - } - - .g-xl-3, + --bs-gutter-y: 0.5rem; + } + + .g-xl-3, .gx-xl-3 { - --bs-gutter-x: 1rem; - } - - .g-xl-3, + --bs-gutter-x: 1rem; + } + + .g-xl-3, .gy-xl-3 { - --bs-gutter-y: 1rem; - } - - .g-xl-4, + --bs-gutter-y: 1rem; + } + + .g-xl-4, .gx-xl-4 { - --bs-gutter-x: 1.5rem; - } - - .g-xl-4, + --bs-gutter-x: 1.5rem; + } + + .g-xl-4, .gy-xl-4 { - --bs-gutter-y: 1.5rem; - } - - .g-xl-5, + --bs-gutter-y: 1.5rem; + } + + .g-xl-5, .gx-xl-5 { - --bs-gutter-x: 3rem; - } - - .g-xl-5, + --bs-gutter-x: 3rem; + } + + .g-xl-5, .gy-xl-5 { - --bs-gutter-y: 3rem; - } + --bs-gutter-y: 3rem; } - @media (min-width: 1400px) { - .col-xxl { - flex: 1 0 0%; - } - - .row-cols-xxl-auto > * { - flex: 0 0 auto; - width: auto; - } - - .row-cols-xxl-1 > * { - flex: 0 0 auto; - width: 100%; - } - - .row-cols-xxl-2 > * { - flex: 0 0 auto; - width: 50%; - } - - .row-cols-xxl-3 > * { - flex: 0 0 auto; - width: 33.3333333333%; - } - - .row-cols-xxl-4 > * { - flex: 0 0 auto; - width: 25%; - } - - .row-cols-xxl-5 > * { - flex: 0 0 auto; - width: 20%; - } - - .row-cols-xxl-6 > * { - flex: 0 0 auto; - width: 16.6666666667%; - } - - .col-xxl-auto { - flex: 0 0 auto; - width: auto; - } - - .col-xxl-1 { - flex: 0 0 auto; - width: 8.33333333%; - } - - .col-xxl-2 { - flex: 0 0 auto; - width: 16.66666667%; - } - - .col-xxl-3 { - flex: 0 0 auto; - width: 25%; - } - - .col-xxl-4 { - flex: 0 0 auto; - width: 33.33333333%; - } - - .col-xxl-5 { - flex: 0 0 auto; - width: 41.66666667%; - } - - .col-xxl-6 { - flex: 0 0 auto; - width: 50%; - } - - .col-xxl-7 { - flex: 0 0 auto; - width: 58.33333333%; - } - - .col-xxl-8 { - flex: 0 0 auto; - width: 66.66666667%; - } - - .col-xxl-9 { - flex: 0 0 auto; - width: 75%; - } - - .col-xxl-10 { - flex: 0 0 auto; - width: 83.33333333%; - } - - .col-xxl-11 { - flex: 0 0 auto; - width: 91.66666667%; - } - - .col-xxl-12 { - flex: 0 0 auto; - width: 100%; - } - - .offset-xxl-0 { - margin-left: 0; - } - - .offset-xxl-1 { - margin-left: 8.33333333%; - } - - .offset-xxl-2 { - margin-left: 16.66666667%; - } - - .offset-xxl-3 { - margin-left: 25%; - } - - .offset-xxl-4 { - margin-left: 33.33333333%; - } - - .offset-xxl-5 { - margin-left: 41.66666667%; - } - - .offset-xxl-6 { - margin-left: 50%; - } - - .offset-xxl-7 { - margin-left: 58.33333333%; - } - - .offset-xxl-8 { - margin-left: 66.66666667%; - } - - .offset-xxl-9 { - margin-left: 75%; - } - - .offset-xxl-10 { - margin-left: 83.33333333%; - } - - .offset-xxl-11 { - margin-left: 91.66666667%; - } - - .g-xxl-0, +} + +@media (min-width: 1400px) { + .col-xxl { + flex: 1 0 0%; + } + + .row-cols-xxl-auto>* { + flex : 0 0 auto; + width: auto; + } + + .row-cols-xxl-1>* { + flex : 0 0 auto; + width: 100%; + } + + .row-cols-xxl-2>* { + flex : 0 0 auto; + width: 50%; + } + + .row-cols-xxl-3>* { + flex : 0 0 auto; + width: 33.3333333333%; + } + + .row-cols-xxl-4>* { + flex : 0 0 auto; + width: 25%; + } + + .row-cols-xxl-5>* { + flex : 0 0 auto; + width: 20%; + } + + .row-cols-xxl-6>* { + flex : 0 0 auto; + width: 16.6666666667%; + } + + .col-xxl-auto { + flex : 0 0 auto; + width: auto; + } + + .col-xxl-1 { + flex : 0 0 auto; + width: 8.33333333%; + } + + .col-xxl-2 { + flex : 0 0 auto; + width: 16.66666667%; + } + + .col-xxl-3 { + flex : 0 0 auto; + width: 25%; + } + + .col-xxl-4 { + flex : 0 0 auto; + width: 33.33333333%; + } + + .col-xxl-5 { + flex : 0 0 auto; + width: 41.66666667%; + } + + .col-xxl-6 { + flex : 0 0 auto; + width: 50%; + } + + .col-xxl-7 { + flex : 0 0 auto; + width: 58.33333333%; + } + + .col-xxl-8 { + flex : 0 0 auto; + width: 66.66666667%; + } + + .col-xxl-9 { + flex : 0 0 auto; + width: 75%; + } + + .col-xxl-10 { + flex : 0 0 auto; + width: 83.33333333%; + } + + .col-xxl-11 { + flex : 0 0 auto; + width: 91.66666667%; + } + + .col-xxl-12 { + flex : 0 0 auto; + width: 100%; + } + + .offset-xxl-0 { + margin-left: 0; + } + + .offset-xxl-1 { + margin-left: 8.33333333%; + } + + .offset-xxl-2 { + margin-left: 16.66666667%; + } + + .offset-xxl-3 { + margin-left: 25%; + } + + .offset-xxl-4 { + margin-left: 33.33333333%; + } + + .offset-xxl-5 { + margin-left: 41.66666667%; + } + + .offset-xxl-6 { + margin-left: 50%; + } + + .offset-xxl-7 { + margin-left: 58.33333333%; + } + + .offset-xxl-8 { + margin-left: 66.66666667%; + } + + .offset-xxl-9 { + margin-left: 75%; + } + + .offset-xxl-10 { + margin-left: 83.33333333%; + } + + .offset-xxl-11 { + margin-left: 91.66666667%; + } + + .g-xxl-0, .gx-xxl-0 { - --bs-gutter-x: 0; - } - - .g-xxl-0, - .gy-xxl-0 { - --bs-gutter-y: 0; - } - - .g-xxl-1, - .gx-xxl-1 { - --bs-gutter-x: 0.25rem; - } - - .g-xxl-1, - .gy-xxl-1 { - --bs-gutter-y: 0.25rem; - } - - .g-xxl-2, - .gx-xxl-2 { - --bs-gutter-x: 0.5rem; - } - - .g-xxl-2, - .gy-xxl-2 { - --bs-gutter-y: 0.5rem; - } - - .g-xxl-3, - .gx-xxl-3 { - --bs-gutter-x: 1rem; - } - - .g-xxl-3, - .gy-xxl-3 { - --bs-gutter-y: 1rem; - } - - .g-xxl-4, - .gx-xxl-4 { - --bs-gutter-x: 1.5rem; - } - - .g-xxl-4, - .gy-xxl-4 { - --bs-gutter-y: 1.5rem; - } - - .g-xxl-5, - .gx-xxl-5 { - --bs-gutter-x: 3rem; - } - - .g-xxl-5, - .gy-xxl-5 { - --bs-gutter-y: 3rem; - } + --bs-gutter-x: 0; } - .d-inline { + + .g-xxl-0, + .gy-xxl-0 { + --bs-gutter-y: 0; + } + + .g-xxl-1, + .gx-xxl-1 { + --bs-gutter-x: 0.25rem; + } + + .g-xxl-1, + .gy-xxl-1 { + --bs-gutter-y: 0.25rem; + } + + .g-xxl-2, + .gx-xxl-2 { + --bs-gutter-x: 0.5rem; + } + + .g-xxl-2, + .gy-xxl-2 { + --bs-gutter-y: 0.5rem; + } + + .g-xxl-3, + .gx-xxl-3 { + --bs-gutter-x: 1rem; + } + + .g-xxl-3, + .gy-xxl-3 { + --bs-gutter-y: 1rem; + } + + .g-xxl-4, + .gx-xxl-4 { + --bs-gutter-x: 1.5rem; + } + + .g-xxl-4, + .gy-xxl-4 { + --bs-gutter-y: 1.5rem; + } + + .g-xxl-5, + .gx-xxl-5 { + --bs-gutter-x: 3rem; + } + + .g-xxl-5, + .gy-xxl-5 { + --bs-gutter-y: 3rem; + } +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-grid { + display: grid !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: flex !important; +} + +.d-inline-flex { + display: inline-flex !important; +} + +.d-none { + display: none !important; +} + +.flex-fill { + flex: 1 1 auto !important; +} + +.flex-row { + flex-direction: row !important; +} + +.flex-column { + flex-direction: column !important; +} + +.flex-row-reverse { + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + flex-direction: column-reverse !important; +} + +.flex-grow-0 { + flex-grow: 0 !important; +} + +.flex-grow-1 { + flex-grow: 1 !important; +} + +.flex-shrink-0 { + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + flex-shrink: 1 !important; +} + +.flex-wrap { + flex-wrap: wrap !important; +} + +.flex-nowrap { + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.justify-content-start { + justify-content: flex-start !important; +} + +.justify-content-end { + justify-content: flex-end !important; +} + +.justify-content-center { + justify-content: center !important; +} + +.justify-content-between { + justify-content: space-between !important; +} + +.justify-content-around { + justify-content: space-around !important; +} + +.justify-content-evenly { + justify-content: space-evenly !important; +} + +.align-items-start { + align-items: flex-start !important; +} + +.align-items-end { + align-items: flex-end !important; +} + +.align-items-center { + align-items: center !important; +} + +.align-items-baseline { + align-items: baseline !important; +} + +.align-items-stretch { + align-items: stretch !important; +} + +.align-content-start { + align-content: flex-start !important; +} + +.align-content-end { + align-content: flex-end !important; +} + +.align-content-center { + align-content: center !important; +} + +.align-content-between { + align-content: space-between !important; +} + +.align-content-around { + align-content: space-around !important; +} + +.align-content-stretch { + align-content: stretch !important; +} + +.align-self-auto { + align-self: auto !important; +} + +.align-self-start { + align-self: flex-start !important; +} + +.align-self-end { + align-self: flex-end !important; +} + +.align-self-center { + align-self: center !important; +} + +.align-self-baseline { + align-self: baseline !important; +} + +.align-self-stretch { + align-self: stretch !important; +} + +.order-first { + order: -1 !important; +} + +.order-0 { + order: 0 !important; +} + +.order-1 { + order: 1 !important; +} + +.order-2 { + order: 2 !important; +} + +.order-3 { + order: 3 !important; +} + +.order-4 { + order: 4 !important; +} + +.order-5 { + order: 5 !important; +} + +.order-last { + order: 6 !important; +} + +.m-0 { + margin: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mx-0 { + margin-right: 0 !important; + margin-left : 0 !important; +} + +.mx-1 { + margin-right: 0.25rem !important; + margin-left : 0.25rem !important; +} + +.mx-2 { + margin-right: 0.5rem !important; + margin-left : 0.5rem !important; +} + +.mx-3 { + margin-right: 1rem !important; + margin-left : 1rem !important; +} + +.mx-4 { + margin-right: 1.5rem !important; + margin-left : 1.5rem !important; +} + +.mx-5 { + margin-right: 3rem !important; + margin-left : 3rem !important; +} + +.mx-auto { + margin-right: auto !important; + margin-left : auto !important; +} + +.my-0 { + margin-top : 0 !important; + margin-bottom: 0 !important; +} + +.my-1 { + margin-top : 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.my-2 { + margin-top : 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.my-3 { + margin-top : 1rem !important; + margin-bottom: 1rem !important; +} + +.my-4 { + margin-top : 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.my-5 { + margin-top : 3rem !important; + margin-bottom: 3rem !important; +} + +.my-auto { + margin-top : auto !important; + margin-bottom: auto !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mt-1 { + margin-top: 0.25rem !important; +} + +.mt-2 { + margin-top: 0.5rem !important; +} + +.mt-3 { + margin-top: 1rem !important; +} + +.mt-4 { + margin-top: 1.5rem !important; +} + +.mt-5 { + margin-top: 3rem !important; +} + +.mt-auto { + margin-top: auto !important; +} + +.me-0 { + margin-right: 0 !important; +} + +.me-1 { + margin-right: 0.25rem !important; +} + +.me-2 { + margin-right: 0.5rem !important; +} + +.me-3 { + margin-right: 1rem !important; +} + +.me-4 { + margin-right: 1.5rem !important; +} + +.me-5 { + margin-right: 3rem !important; +} + +.me-auto { + margin-right: auto !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.mb-1 { + margin-bottom: 0.25rem !important; +} + +.mb-2 { + margin-bottom: 0.5rem !important; +} + +.mb-3 { + margin-bottom: 1rem !important; +} + +.mb-4 { + margin-bottom: 1.5rem !important; +} + +.mb-5 { + margin-bottom: 3rem !important; +} + +.mb-auto { + margin-bottom: auto !important; +} + +.ms-0 { + margin-left: 0 !important; +} + +.ms-1 { + margin-left: 0.25rem !important; +} + +.ms-2 { + margin-left: 0.5rem !important; +} + +.ms-3 { + margin-left: 1rem !important; +} + +.ms-4 { + margin-left: 1.5rem !important; +} + +.ms-5 { + margin-left: 3rem !important; +} + +.ms-auto { + margin-left: auto !important; +} + +.p-0 { + padding: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.px-0 { + padding-right: 0 !important; + padding-left : 0 !important; +} + +.px-1 { + padding-right: 0.25rem !important; + padding-left : 0.25rem !important; +} + +.px-2 { + padding-right: 0.5rem !important; + padding-left : 0.5rem !important; +} + +.px-3 { + padding-right: 1rem !important; + padding-left : 1rem !important; +} + +.px-4 { + padding-right: 1.5rem !important; + padding-left : 1.5rem !important; +} + +.px-5 { + padding-right: 3rem !important; + padding-left : 3rem !important; +} + +.py-0 { + padding-top : 0 !important; + padding-bottom: 0 !important; +} + +.py-1 { + padding-top : 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.py-2 { + padding-top : 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.py-3 { + padding-top : 1rem !important; + padding-bottom: 1rem !important; +} + +.py-4 { + padding-top : 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.py-5 { + padding-top : 3rem !important; + padding-bottom: 3rem !important; +} + +.pt-0 { + padding-top: 0 !important; +} + +.pt-1 { + padding-top: 0.25rem !important; +} + +.pt-2 { + padding-top: 0.5rem !important; +} + +.pt-3 { + padding-top: 1rem !important; +} + +.pt-4 { + padding-top: 1.5rem !important; +} + +.pt-5 { + padding-top: 3rem !important; +} + +.pe-0 { + padding-right: 0 !important; +} + +.pe-1 { + padding-right: 0.25rem !important; +} + +.pe-2 { + padding-right: 0.5rem !important; +} + +.pe-3 { + padding-right: 1rem !important; +} + +.pe-4 { + padding-right: 1.5rem !important; +} + +.pe-5 { + padding-right: 3rem !important; +} + +.pb-0 { + padding-bottom: 0 !important; +} + +.pb-1 { + padding-bottom: 0.25rem !important; +} + +.pb-2 { + padding-bottom: 0.5rem !important; +} + +.pb-3 { + padding-bottom: 1rem !important; +} + +.pb-4 { + padding-bottom: 1.5rem !important; +} + +.pb-5 { + padding-bottom: 3rem !important; +} + +.ps-0 { + padding-left: 0 !important; +} + +.ps-1 { + padding-left: 0.25rem !important; +} + +.ps-2 { + padding-left: 0.5rem !important; +} + +.ps-3 { + padding-left: 1rem !important; +} + +.ps-4 { + padding-left: 1.5rem !important; +} + +.ps-5 { + padding-left: 3rem !important; +} + +@media (min-width: 576px) { + .d-sm-inline { display: inline !important; } - - .d-inline-block { + + .d-sm-inline-block { display: inline-block !important; } - - .d-block { + + .d-sm-block { display: block !important; } - - .d-grid { + + .d-sm-grid { display: grid !important; } - - .d-table { + + .d-sm-table { display: table !important; } - - .d-table-row { + + .d-sm-table-row { display: table-row !important; } - - .d-table-cell { + + .d-sm-table-cell { display: table-cell !important; } - - .d-flex { + + .d-sm-flex { display: flex !important; } - - .d-inline-flex { + + .d-sm-inline-flex { display: inline-flex !important; } - - .d-none { + + .d-sm-none { display: none !important; } - - .flex-fill { + + .flex-sm-fill { flex: 1 1 auto !important; } - - .flex-row { + + .flex-sm-row { flex-direction: row !important; } - - .flex-column { + + .flex-sm-column { flex-direction: column !important; } - - .flex-row-reverse { + + .flex-sm-row-reverse { flex-direction: row-reverse !important; } - - .flex-column-reverse { + + .flex-sm-column-reverse { flex-direction: column-reverse !important; } - - .flex-grow-0 { + + .flex-sm-grow-0 { flex-grow: 0 !important; } - - .flex-grow-1 { + + .flex-sm-grow-1 { flex-grow: 1 !important; } - - .flex-shrink-0 { + + .flex-sm-shrink-0 { flex-shrink: 0 !important; } - - .flex-shrink-1 { + + .flex-sm-shrink-1 { flex-shrink: 1 !important; } - - .flex-wrap { + + .flex-sm-wrap { flex-wrap: wrap !important; } - - .flex-nowrap { + + .flex-sm-nowrap { flex-wrap: nowrap !important; } - - .flex-wrap-reverse { + + .flex-sm-wrap-reverse { flex-wrap: wrap-reverse !important; } - - .justify-content-start { + + .justify-content-sm-start { justify-content: flex-start !important; } - - .justify-content-end { + + .justify-content-sm-end { justify-content: flex-end !important; } - - .justify-content-center { + + .justify-content-sm-center { justify-content: center !important; } - - .justify-content-between { + + .justify-content-sm-between { justify-content: space-between !important; } - - .justify-content-around { + + .justify-content-sm-around { justify-content: space-around !important; } - - .justify-content-evenly { + + .justify-content-sm-evenly { justify-content: space-evenly !important; } - - .align-items-start { + + .align-items-sm-start { align-items: flex-start !important; } - - .align-items-end { + + .align-items-sm-end { align-items: flex-end !important; } - - .align-items-center { + + .align-items-sm-center { align-items: center !important; } - - .align-items-baseline { + + .align-items-sm-baseline { align-items: baseline !important; } - - .align-items-stretch { + + .align-items-sm-stretch { align-items: stretch !important; } - - .align-content-start { + + .align-content-sm-start { align-content: flex-start !important; } - - .align-content-end { + + .align-content-sm-end { align-content: flex-end !important; } - - .align-content-center { + + .align-content-sm-center { align-content: center !important; } - - .align-content-between { + + .align-content-sm-between { align-content: space-between !important; } - - .align-content-around { + + .align-content-sm-around { align-content: space-around !important; } - - .align-content-stretch { + + .align-content-sm-stretch { align-content: stretch !important; } - - .align-self-auto { + + .align-self-sm-auto { align-self: auto !important; } - - .align-self-start { + + .align-self-sm-start { align-self: flex-start !important; } - - .align-self-end { + + .align-self-sm-end { align-self: flex-end !important; } - - .align-self-center { + + .align-self-sm-center { align-self: center !important; } - - .align-self-baseline { + + .align-self-sm-baseline { align-self: baseline !important; } - - .align-self-stretch { + + .align-self-sm-stretch { align-self: stretch !important; } - - .order-first { + + .order-sm-first { order: -1 !important; } - - .order-0 { + + .order-sm-0 { order: 0 !important; } - - .order-1 { + + .order-sm-1 { order: 1 !important; } - - .order-2 { + + .order-sm-2 { order: 2 !important; } - - .order-3 { + + .order-sm-3 { order: 3 !important; } - - .order-4 { + + .order-sm-4 { order: 4 !important; } - - .order-5 { + + .order-sm-5 { order: 5 !important; } - - .order-last { + + .order-sm-last { order: 6 !important; } - - .m-0 { + + .m-sm-0 { margin: 0 !important; } - - .m-1 { + + .m-sm-1 { margin: 0.25rem !important; } - - .m-2 { + + .m-sm-2 { margin: 0.5rem !important; } - - .m-3 { + + .m-sm-3 { margin: 1rem !important; } - - .m-4 { + + .m-sm-4 { margin: 1.5rem !important; } - - .m-5 { + + .m-sm-5 { margin: 3rem !important; } - - .m-auto { + + .m-sm-auto { margin: auto !important; } - - .mx-0 { + + .mx-sm-0 { margin-right: 0 !important; - margin-left: 0 !important; + margin-left : 0 !important; } - - .mx-1 { + + .mx-sm-1 { margin-right: 0.25rem !important; - margin-left: 0.25rem !important; + margin-left : 0.25rem !important; } - - .mx-2 { + + .mx-sm-2 { margin-right: 0.5rem !important; - margin-left: 0.5rem !important; + margin-left : 0.5rem !important; } - - .mx-3 { + + .mx-sm-3 { margin-right: 1rem !important; - margin-left: 1rem !important; + margin-left : 1rem !important; } - - .mx-4 { + + .mx-sm-4 { margin-right: 1.5rem !important; - margin-left: 1.5rem !important; + margin-left : 1.5rem !important; } - - .mx-5 { + + .mx-sm-5 { margin-right: 3rem !important; - margin-left: 3rem !important; + margin-left : 3rem !important; } - - .mx-auto { + + .mx-sm-auto { margin-right: auto !important; - margin-left: auto !important; + margin-left : auto !important; } - - .my-0 { - margin-top: 0 !important; + + .my-sm-0 { + margin-top : 0 !important; margin-bottom: 0 !important; } - - .my-1 { - margin-top: 0.25rem !important; + + .my-sm-1 { + margin-top : 0.25rem !important; margin-bottom: 0.25rem !important; } - - .my-2 { - margin-top: 0.5rem !important; + + .my-sm-2 { + margin-top : 0.5rem !important; margin-bottom: 0.5rem !important; } - - .my-3 { - margin-top: 1rem !important; + + .my-sm-3 { + margin-top : 1rem !important; margin-bottom: 1rem !important; } - - .my-4 { - margin-top: 1.5rem !important; + + .my-sm-4 { + margin-top : 1.5rem !important; margin-bottom: 1.5rem !important; } - - .my-5 { - margin-top: 3rem !important; + + .my-sm-5 { + margin-top : 3rem !important; margin-bottom: 3rem !important; } - - .my-auto { - margin-top: auto !important; + + .my-sm-auto { + margin-top : auto !important; margin-bottom: auto !important; } - - .mt-0 { + + .mt-sm-0 { margin-top: 0 !important; } - - .mt-1 { + + .mt-sm-1 { margin-top: 0.25rem !important; } - - .mt-2 { + + .mt-sm-2 { margin-top: 0.5rem !important; } - - .mt-3 { + + .mt-sm-3 { margin-top: 1rem !important; } - - .mt-4 { + + .mt-sm-4 { margin-top: 1.5rem !important; } - - .mt-5 { + + .mt-sm-5 { margin-top: 3rem !important; } - - .mt-auto { + + .mt-sm-auto { margin-top: auto !important; } - - .me-0 { + + .me-sm-0 { margin-right: 0 !important; } - - .me-1 { + + .me-sm-1 { margin-right: 0.25rem !important; } - - .me-2 { + + .me-sm-2 { margin-right: 0.5rem !important; } - - .me-3 { + + .me-sm-3 { margin-right: 1rem !important; } - - .me-4 { + + .me-sm-4 { margin-right: 1.5rem !important; } - - .me-5 { + + .me-sm-5 { margin-right: 3rem !important; } - - .me-auto { + + .me-sm-auto { margin-right: auto !important; } - - .mb-0 { + + .mb-sm-0 { margin-bottom: 0 !important; } - - .mb-1 { + + .mb-sm-1 { margin-bottom: 0.25rem !important; } - - .mb-2 { + + .mb-sm-2 { margin-bottom: 0.5rem !important; } - - .mb-3 { + + .mb-sm-3 { margin-bottom: 1rem !important; } - - .mb-4 { + + .mb-sm-4 { margin-bottom: 1.5rem !important; } - - .mb-5 { + + .mb-sm-5 { margin-bottom: 3rem !important; } - - .mb-auto { + + .mb-sm-auto { margin-bottom: auto !important; } - - .ms-0 { + + .ms-sm-0 { margin-left: 0 !important; } - - .ms-1 { + + .ms-sm-1 { margin-left: 0.25rem !important; } - - .ms-2 { + + .ms-sm-2 { margin-left: 0.5rem !important; } - - .ms-3 { + + .ms-sm-3 { margin-left: 1rem !important; } - - .ms-4 { + + .ms-sm-4 { margin-left: 1.5rem !important; } - - .ms-5 { + + .ms-sm-5 { margin-left: 3rem !important; } - - .ms-auto { + + .ms-sm-auto { margin-left: auto !important; } - - .p-0 { + + .p-sm-0 { padding: 0 !important; } - - .p-1 { + + .p-sm-1 { padding: 0.25rem !important; } - - .p-2 { + + .p-sm-2 { padding: 0.5rem !important; } - - .p-3 { + + .p-sm-3 { padding: 1rem !important; } - - .p-4 { + + .p-sm-4 { padding: 1.5rem !important; } - - .p-5 { + + .p-sm-5 { padding: 3rem !important; } - - .px-0 { + + .px-sm-0 { padding-right: 0 !important; - padding-left: 0 !important; + padding-left : 0 !important; } - - .px-1 { + + .px-sm-1 { padding-right: 0.25rem !important; - padding-left: 0.25rem !important; + padding-left : 0.25rem !important; } - - .px-2 { + + .px-sm-2 { padding-right: 0.5rem !important; - padding-left: 0.5rem !important; + padding-left : 0.5rem !important; } - - .px-3 { + + .px-sm-3 { padding-right: 1rem !important; - padding-left: 1rem !important; + padding-left : 1rem !important; } - - .px-4 { + + .px-sm-4 { padding-right: 1.5rem !important; - padding-left: 1.5rem !important; + padding-left : 1.5rem !important; } - - .px-5 { + + .px-sm-5 { padding-right: 3rem !important; - padding-left: 3rem !important; + padding-left : 3rem !important; } - - .py-0 { - padding-top: 0 !important; + + .py-sm-0 { + padding-top : 0 !important; padding-bottom: 0 !important; } - - .py-1 { - padding-top: 0.25rem !important; + + .py-sm-1 { + padding-top : 0.25rem !important; padding-bottom: 0.25rem !important; } - - .py-2 { - padding-top: 0.5rem !important; + + .py-sm-2 { + padding-top : 0.5rem !important; padding-bottom: 0.5rem !important; } - - .py-3 { - padding-top: 1rem !important; + + .py-sm-3 { + padding-top : 1rem !important; padding-bottom: 1rem !important; } - - .py-4 { - padding-top: 1.5rem !important; + + .py-sm-4 { + padding-top : 1.5rem !important; padding-bottom: 1.5rem !important; } - - .py-5 { - padding-top: 3rem !important; + + .py-sm-5 { + padding-top : 3rem !important; padding-bottom: 3rem !important; } - - .pt-0 { + + .pt-sm-0 { padding-top: 0 !important; } - - .pt-1 { + + .pt-sm-1 { padding-top: 0.25rem !important; } - - .pt-2 { + + .pt-sm-2 { padding-top: 0.5rem !important; } - - .pt-3 { + + .pt-sm-3 { padding-top: 1rem !important; } - - .pt-4 { + + .pt-sm-4 { padding-top: 1.5rem !important; } - - .pt-5 { + + .pt-sm-5 { padding-top: 3rem !important; } - - .pe-0 { + + .pe-sm-0 { padding-right: 0 !important; } - - .pe-1 { + + .pe-sm-1 { padding-right: 0.25rem !important; } - - .pe-2 { + + .pe-sm-2 { padding-right: 0.5rem !important; } - - .pe-3 { + + .pe-sm-3 { padding-right: 1rem !important; } - - .pe-4 { + + .pe-sm-4 { padding-right: 1.5rem !important; } - - .pe-5 { + + .pe-sm-5 { padding-right: 3rem !important; } - - .pb-0 { + + .pb-sm-0 { padding-bottom: 0 !important; } - - .pb-1 { + + .pb-sm-1 { padding-bottom: 0.25rem !important; } - - .pb-2 { + + .pb-sm-2 { padding-bottom: 0.5rem !important; } - - .pb-3 { + + .pb-sm-3 { padding-bottom: 1rem !important; } - - .pb-4 { + + .pb-sm-4 { padding-bottom: 1.5rem !important; } - - .pb-5 { + + .pb-sm-5 { padding-bottom: 3rem !important; } - - .ps-0 { + + .ps-sm-0 { padding-left: 0 !important; } - - .ps-1 { + + .ps-sm-1 { padding-left: 0.25rem !important; } - - .ps-2 { + + .ps-sm-2 { padding-left: 0.5rem !important; } - - .ps-3 { + + .ps-sm-3 { padding-left: 1rem !important; } - - .ps-4 { + + .ps-sm-4 { padding-left: 1.5rem !important; } - - .ps-5 { + + .ps-sm-5 { padding-left: 3rem !important; } - - @media (min-width: 576px) { - .d-sm-inline { - display: inline !important; - } - - .d-sm-inline-block { - display: inline-block !important; - } - - .d-sm-block { - display: block !important; - } - - .d-sm-grid { - display: grid !important; - } - - .d-sm-table { - display: table !important; - } - - .d-sm-table-row { - display: table-row !important; - } - - .d-sm-table-cell { - display: table-cell !important; - } - - .d-sm-flex { - display: flex !important; - } - - .d-sm-inline-flex { - display: inline-flex !important; - } - - .d-sm-none { - display: none !important; - } - - .flex-sm-fill { - flex: 1 1 auto !important; - } - - .flex-sm-row { - flex-direction: row !important; - } - - .flex-sm-column { - flex-direction: column !important; - } - - .flex-sm-row-reverse { - flex-direction: row-reverse !important; - } - - .flex-sm-column-reverse { - flex-direction: column-reverse !important; - } - - .flex-sm-grow-0 { - flex-grow: 0 !important; - } - - .flex-sm-grow-1 { - flex-grow: 1 !important; - } - - .flex-sm-shrink-0 { - flex-shrink: 0 !important; - } - - .flex-sm-shrink-1 { - flex-shrink: 1 !important; - } - - .flex-sm-wrap { - flex-wrap: wrap !important; - } - - .flex-sm-nowrap { - flex-wrap: nowrap !important; - } - - .flex-sm-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - - .justify-content-sm-start { - justify-content: flex-start !important; - } - - .justify-content-sm-end { - justify-content: flex-end !important; - } - - .justify-content-sm-center { - justify-content: center !important; - } - - .justify-content-sm-between { - justify-content: space-between !important; - } - - .justify-content-sm-around { - justify-content: space-around !important; - } - - .justify-content-sm-evenly { - justify-content: space-evenly !important; - } - - .align-items-sm-start { - align-items: flex-start !important; - } - - .align-items-sm-end { - align-items: flex-end !important; - } - - .align-items-sm-center { - align-items: center !important; - } - - .align-items-sm-baseline { - align-items: baseline !important; - } - - .align-items-sm-stretch { - align-items: stretch !important; - } - - .align-content-sm-start { - align-content: flex-start !important; - } - - .align-content-sm-end { - align-content: flex-end !important; - } - - .align-content-sm-center { - align-content: center !important; - } - - .align-content-sm-between { - align-content: space-between !important; - } - - .align-content-sm-around { - align-content: space-around !important; - } - - .align-content-sm-stretch { - align-content: stretch !important; - } - - .align-self-sm-auto { - align-self: auto !important; - } - - .align-self-sm-start { - align-self: flex-start !important; - } - - .align-self-sm-end { - align-self: flex-end !important; - } - - .align-self-sm-center { - align-self: center !important; - } - - .align-self-sm-baseline { - align-self: baseline !important; - } - - .align-self-sm-stretch { - align-self: stretch !important; - } - - .order-sm-first { - order: -1 !important; - } - - .order-sm-0 { - order: 0 !important; - } - - .order-sm-1 { - order: 1 !important; - } - - .order-sm-2 { - order: 2 !important; - } - - .order-sm-3 { - order: 3 !important; - } - - .order-sm-4 { - order: 4 !important; - } - - .order-sm-5 { - order: 5 !important; - } - - .order-sm-last { - order: 6 !important; - } - - .m-sm-0 { - margin: 0 !important; - } - - .m-sm-1 { - margin: 0.25rem !important; - } - - .m-sm-2 { - margin: 0.5rem !important; - } - - .m-sm-3 { - margin: 1rem !important; - } - - .m-sm-4 { - margin: 1.5rem !important; - } - - .m-sm-5 { - margin: 3rem !important; - } - - .m-sm-auto { - margin: auto !important; - } - - .mx-sm-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - - .mx-sm-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - - .mx-sm-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - - .mx-sm-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - - .mx-sm-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - - .mx-sm-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - - .mx-sm-auto { - margin-right: auto !important; - margin-left: auto !important; - } - - .my-sm-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - - .my-sm-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - - .my-sm-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - - .my-sm-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - - .my-sm-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - - .my-sm-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - - .my-sm-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - - .mt-sm-0 { - margin-top: 0 !important; - } - - .mt-sm-1 { - margin-top: 0.25rem !important; - } - - .mt-sm-2 { - margin-top: 0.5rem !important; - } - - .mt-sm-3 { - margin-top: 1rem !important; - } - - .mt-sm-4 { - margin-top: 1.5rem !important; - } - - .mt-sm-5 { - margin-top: 3rem !important; - } - - .mt-sm-auto { - margin-top: auto !important; - } - - .me-sm-0 { - margin-right: 0 !important; - } - - .me-sm-1 { - margin-right: 0.25rem !important; - } - - .me-sm-2 { - margin-right: 0.5rem !important; - } - - .me-sm-3 { - margin-right: 1rem !important; - } - - .me-sm-4 { - margin-right: 1.5rem !important; - } - - .me-sm-5 { - margin-right: 3rem !important; - } - - .me-sm-auto { - margin-right: auto !important; - } - - .mb-sm-0 { - margin-bottom: 0 !important; - } - - .mb-sm-1 { - margin-bottom: 0.25rem !important; - } - - .mb-sm-2 { - margin-bottom: 0.5rem !important; - } - - .mb-sm-3 { - margin-bottom: 1rem !important; - } - - .mb-sm-4 { - margin-bottom: 1.5rem !important; - } - - .mb-sm-5 { - margin-bottom: 3rem !important; - } - - .mb-sm-auto { - margin-bottom: auto !important; - } - - .ms-sm-0 { - margin-left: 0 !important; - } - - .ms-sm-1 { - margin-left: 0.25rem !important; - } - - .ms-sm-2 { - margin-left: 0.5rem !important; - } - - .ms-sm-3 { - margin-left: 1rem !important; - } - - .ms-sm-4 { - margin-left: 1.5rem !important; - } - - .ms-sm-5 { - margin-left: 3rem !important; - } - - .ms-sm-auto { - margin-left: auto !important; - } - - .p-sm-0 { - padding: 0 !important; - } - - .p-sm-1 { - padding: 0.25rem !important; - } - - .p-sm-2 { - padding: 0.5rem !important; - } - - .p-sm-3 { - padding: 1rem !important; - } - - .p-sm-4 { - padding: 1.5rem !important; - } - - .p-sm-5 { - padding: 3rem !important; - } - - .px-sm-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - - .px-sm-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - - .px-sm-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - - .px-sm-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - - .px-sm-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - - .px-sm-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - - .py-sm-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - - .py-sm-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - - .py-sm-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - - .py-sm-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - - .py-sm-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - - .py-sm-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - - .pt-sm-0 { - padding-top: 0 !important; - } - - .pt-sm-1 { - padding-top: 0.25rem !important; - } - - .pt-sm-2 { - padding-top: 0.5rem !important; - } - - .pt-sm-3 { - padding-top: 1rem !important; - } - - .pt-sm-4 { - padding-top: 1.5rem !important; - } - - .pt-sm-5 { - padding-top: 3rem !important; - } - - .pe-sm-0 { - padding-right: 0 !important; - } - - .pe-sm-1 { - padding-right: 0.25rem !important; - } - - .pe-sm-2 { - padding-right: 0.5rem !important; - } - - .pe-sm-3 { - padding-right: 1rem !important; - } - - .pe-sm-4 { - padding-right: 1.5rem !important; - } - - .pe-sm-5 { - padding-right: 3rem !important; - } - - .pb-sm-0 { - padding-bottom: 0 !important; - } - - .pb-sm-1 { - padding-bottom: 0.25rem !important; - } - - .pb-sm-2 { - padding-bottom: 0.5rem !important; - } - - .pb-sm-3 { - padding-bottom: 1rem !important; - } - - .pb-sm-4 { - padding-bottom: 1.5rem !important; - } - - .pb-sm-5 { - padding-bottom: 3rem !important; - } - - .ps-sm-0 { - padding-left: 0 !important; - } - - .ps-sm-1 { - padding-left: 0.25rem !important; - } - - .ps-sm-2 { - padding-left: 0.5rem !important; - } - - .ps-sm-3 { - padding-left: 1rem !important; - } - - .ps-sm-4 { - padding-left: 1.5rem !important; - } - - .ps-sm-5 { - padding-left: 3rem !important; - } +} + +@media (min-width: 768px) { + .d-md-inline { + display: inline !important; } - @media (min-width: 768px) { - .d-md-inline { - display: inline !important; - } - - .d-md-inline-block { - display: inline-block !important; - } - - .d-md-block { - display: block !important; - } - - .d-md-grid { - display: grid !important; - } - - .d-md-table { - display: table !important; - } - - .d-md-table-row { - display: table-row !important; - } - - .d-md-table-cell { - display: table-cell !important; - } - - .d-md-flex { - display: flex !important; - } - - .d-md-inline-flex { - display: inline-flex !important; - } - - .d-md-none { - display: none !important; - } - - .flex-md-fill { - flex: 1 1 auto !important; - } - - .flex-md-row { - flex-direction: row !important; - } - - .flex-md-column { - flex-direction: column !important; - } - - .flex-md-row-reverse { - flex-direction: row-reverse !important; - } - - .flex-md-column-reverse { - flex-direction: column-reverse !important; - } - - .flex-md-grow-0 { - flex-grow: 0 !important; - } - - .flex-md-grow-1 { - flex-grow: 1 !important; - } - - .flex-md-shrink-0 { - flex-shrink: 0 !important; - } - - .flex-md-shrink-1 { - flex-shrink: 1 !important; - } - - .flex-md-wrap { - flex-wrap: wrap !important; - } - - .flex-md-nowrap { - flex-wrap: nowrap !important; - } - - .flex-md-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - - .justify-content-md-start { - justify-content: flex-start !important; - } - - .justify-content-md-end { - justify-content: flex-end !important; - } - - .justify-content-md-center { - justify-content: center !important; - } - - .justify-content-md-between { - justify-content: space-between !important; - } - - .justify-content-md-around { - justify-content: space-around !important; - } - - .justify-content-md-evenly { - justify-content: space-evenly !important; - } - - .align-items-md-start { - align-items: flex-start !important; - } - - .align-items-md-end { - align-items: flex-end !important; - } - - .align-items-md-center { - align-items: center !important; - } - - .align-items-md-baseline { - align-items: baseline !important; - } - - .align-items-md-stretch { - align-items: stretch !important; - } - - .align-content-md-start { - align-content: flex-start !important; - } - - .align-content-md-end { - align-content: flex-end !important; - } - - .align-content-md-center { - align-content: center !important; - } - - .align-content-md-between { - align-content: space-between !important; - } - - .align-content-md-around { - align-content: space-around !important; - } - - .align-content-md-stretch { - align-content: stretch !important; - } - - .align-self-md-auto { - align-self: auto !important; - } - - .align-self-md-start { - align-self: flex-start !important; - } - - .align-self-md-end { - align-self: flex-end !important; - } - - .align-self-md-center { - align-self: center !important; - } - - .align-self-md-baseline { - align-self: baseline !important; - } - - .align-self-md-stretch { - align-self: stretch !important; - } - - .order-md-first { - order: -1 !important; - } - - .order-md-0 { - order: 0 !important; - } - - .order-md-1 { - order: 1 !important; - } - - .order-md-2 { - order: 2 !important; - } - - .order-md-3 { - order: 3 !important; - } - - .order-md-4 { - order: 4 !important; - } - - .order-md-5 { - order: 5 !important; - } - - .order-md-last { - order: 6 !important; - } - - .m-md-0 { - margin: 0 !important; - } - - .m-md-1 { - margin: 0.25rem !important; - } - - .m-md-2 { - margin: 0.5rem !important; - } - - .m-md-3 { - margin: 1rem !important; - } - - .m-md-4 { - margin: 1.5rem !important; - } - - .m-md-5 { - margin: 3rem !important; - } - - .m-md-auto { - margin: auto !important; - } - - .mx-md-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - - .mx-md-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - - .mx-md-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - - .mx-md-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - - .mx-md-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - - .mx-md-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - - .mx-md-auto { - margin-right: auto !important; - margin-left: auto !important; - } - - .my-md-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - - .my-md-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - - .my-md-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - - .my-md-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - - .my-md-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - - .my-md-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - - .my-md-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - - .mt-md-0 { - margin-top: 0 !important; - } - - .mt-md-1 { - margin-top: 0.25rem !important; - } - - .mt-md-2 { - margin-top: 0.5rem !important; - } - - .mt-md-3 { - margin-top: 1rem !important; - } - - .mt-md-4 { - margin-top: 1.5rem !important; - } - - .mt-md-5 { - margin-top: 3rem !important; - } - - .mt-md-auto { - margin-top: auto !important; - } - - .me-md-0 { - margin-right: 0 !important; - } - - .me-md-1 { - margin-right: 0.25rem !important; - } - - .me-md-2 { - margin-right: 0.5rem !important; - } - - .me-md-3 { - margin-right: 1rem !important; - } - - .me-md-4 { - margin-right: 1.5rem !important; - } - - .me-md-5 { - margin-right: 3rem !important; - } - - .me-md-auto { - margin-right: auto !important; - } - - .mb-md-0 { - margin-bottom: 0 !important; - } - - .mb-md-1 { - margin-bottom: 0.25rem !important; - } - - .mb-md-2 { - margin-bottom: 0.5rem !important; - } - - .mb-md-3 { - margin-bottom: 1rem !important; - } - - .mb-md-4 { - margin-bottom: 1.5rem !important; - } - - .mb-md-5 { - margin-bottom: 3rem !important; - } - - .mb-md-auto { - margin-bottom: auto !important; - } - - .ms-md-0 { - margin-left: 0 !important; - } - - .ms-md-1 { - margin-left: 0.25rem !important; - } - - .ms-md-2 { - margin-left: 0.5rem !important; - } - - .ms-md-3 { - margin-left: 1rem !important; - } - - .ms-md-4 { - margin-left: 1.5rem !important; - } - - .ms-md-5 { - margin-left: 3rem !important; - } - - .ms-md-auto { - margin-left: auto !important; - } - - .p-md-0 { - padding: 0 !important; - } - - .p-md-1 { - padding: 0.25rem !important; - } - - .p-md-2 { - padding: 0.5rem !important; - } - - .p-md-3 { - padding: 1rem !important; - } - - .p-md-4 { - padding: 1.5rem !important; - } - - .p-md-5 { - padding: 3rem !important; - } - - .px-md-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - - .px-md-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - - .px-md-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - - .px-md-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - - .px-md-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - - .px-md-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - - .py-md-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - - .py-md-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - - .py-md-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - - .py-md-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - - .py-md-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - - .py-md-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - - .pt-md-0 { - padding-top: 0 !important; - } - - .pt-md-1 { - padding-top: 0.25rem !important; - } - - .pt-md-2 { - padding-top: 0.5rem !important; - } - - .pt-md-3 { - padding-top: 1rem !important; - } - - .pt-md-4 { - padding-top: 1.5rem !important; - } - - .pt-md-5 { - padding-top: 3rem !important; - } - - .pe-md-0 { - padding-right: 0 !important; - } - - .pe-md-1 { - padding-right: 0.25rem !important; - } - - .pe-md-2 { - padding-right: 0.5rem !important; - } - - .pe-md-3 { - padding-right: 1rem !important; - } - - .pe-md-4 { - padding-right: 1.5rem !important; - } - - .pe-md-5 { - padding-right: 3rem !important; - } - - .pb-md-0 { - padding-bottom: 0 !important; - } - - .pb-md-1 { - padding-bottom: 0.25rem !important; - } - - .pb-md-2 { - padding-bottom: 0.5rem !important; - } - - .pb-md-3 { - padding-bottom: 1rem !important; - } - - .pb-md-4 { - padding-bottom: 1.5rem !important; - } - - .pb-md-5 { - padding-bottom: 3rem !important; - } - - .ps-md-0 { - padding-left: 0 !important; - } - - .ps-md-1 { - padding-left: 0.25rem !important; - } - - .ps-md-2 { - padding-left: 0.5rem !important; - } - - .ps-md-3 { - padding-left: 1rem !important; - } - - .ps-md-4 { - padding-left: 1.5rem !important; - } - - .ps-md-5 { - padding-left: 3rem !important; - } + + .d-md-inline-block { + display: inline-block !important; } - @media (min-width: 992px) { - .d-lg-inline { - display: inline !important; - } - - .d-lg-inline-block { - display: inline-block !important; - } - - .d-lg-block { - display: block !important; - } - - .d-lg-grid { - display: grid !important; - } - - .d-lg-table { - display: table !important; - } - - .d-lg-table-row { - display: table-row !important; - } - - .d-lg-table-cell { - display: table-cell !important; - } - - .d-lg-flex { - display: flex !important; - } - - .d-lg-inline-flex { - display: inline-flex !important; - } - - .d-lg-none { - display: none !important; - } - - .flex-lg-fill { - flex: 1 1 auto !important; - } - - .flex-lg-row { - flex-direction: row !important; - } - - .flex-lg-column { - flex-direction: column !important; - } - - .flex-lg-row-reverse { - flex-direction: row-reverse !important; - } - - .flex-lg-column-reverse { - flex-direction: column-reverse !important; - } - - .flex-lg-grow-0 { - flex-grow: 0 !important; - } - - .flex-lg-grow-1 { - flex-grow: 1 !important; - } - - .flex-lg-shrink-0 { - flex-shrink: 0 !important; - } - - .flex-lg-shrink-1 { - flex-shrink: 1 !important; - } - - .flex-lg-wrap { - flex-wrap: wrap !important; - } - - .flex-lg-nowrap { - flex-wrap: nowrap !important; - } - - .flex-lg-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - - .justify-content-lg-start { - justify-content: flex-start !important; - } - - .justify-content-lg-end { - justify-content: flex-end !important; - } - - .justify-content-lg-center { - justify-content: center !important; - } - - .justify-content-lg-between { - justify-content: space-between !important; - } - - .justify-content-lg-around { - justify-content: space-around !important; - } - - .justify-content-lg-evenly { - justify-content: space-evenly !important; - } - - .align-items-lg-start { - align-items: flex-start !important; - } - - .align-items-lg-end { - align-items: flex-end !important; - } - - .align-items-lg-center { - align-items: center !important; - } - - .align-items-lg-baseline { - align-items: baseline !important; - } - - .align-items-lg-stretch { - align-items: stretch !important; - } - - .align-content-lg-start { - align-content: flex-start !important; - } - - .align-content-lg-end { - align-content: flex-end !important; - } - - .align-content-lg-center { - align-content: center !important; - } - - .align-content-lg-between { - align-content: space-between !important; - } - - .align-content-lg-around { - align-content: space-around !important; - } - - .align-content-lg-stretch { - align-content: stretch !important; - } - - .align-self-lg-auto { - align-self: auto !important; - } - - .align-self-lg-start { - align-self: flex-start !important; - } - - .align-self-lg-end { - align-self: flex-end !important; - } - - .align-self-lg-center { - align-self: center !important; - } - - .align-self-lg-baseline { - align-self: baseline !important; - } - - .align-self-lg-stretch { - align-self: stretch !important; - } - - .order-lg-first { - order: -1 !important; - } - - .order-lg-0 { - order: 0 !important; - } - - .order-lg-1 { - order: 1 !important; - } - - .order-lg-2 { - order: 2 !important; - } - - .order-lg-3 { - order: 3 !important; - } - - .order-lg-4 { - order: 4 !important; - } - - .order-lg-5 { - order: 5 !important; - } - - .order-lg-last { - order: 6 !important; - } - - .m-lg-0 { - margin: 0 !important; - } - - .m-lg-1 { - margin: 0.25rem !important; - } - - .m-lg-2 { - margin: 0.5rem !important; - } - - .m-lg-3 { - margin: 1rem !important; - } - - .m-lg-4 { - margin: 1.5rem !important; - } - - .m-lg-5 { - margin: 3rem !important; - } - - .m-lg-auto { - margin: auto !important; - } - - .mx-lg-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - - .mx-lg-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - - .mx-lg-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - - .mx-lg-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - - .mx-lg-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - - .mx-lg-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - - .mx-lg-auto { - margin-right: auto !important; - margin-left: auto !important; - } - - .my-lg-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - - .my-lg-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - - .my-lg-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - - .my-lg-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - - .my-lg-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - - .my-lg-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - - .my-lg-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - - .mt-lg-0 { - margin-top: 0 !important; - } - - .mt-lg-1 { - margin-top: 0.25rem !important; - } - - .mt-lg-2 { - margin-top: 0.5rem !important; - } - - .mt-lg-3 { - margin-top: 1rem !important; - } - - .mt-lg-4 { - margin-top: 1.5rem !important; - } - - .mt-lg-5 { - margin-top: 3rem !important; - } - - .mt-lg-auto { - margin-top: auto !important; - } - - .me-lg-0 { - margin-right: 0 !important; - } - - .me-lg-1 { - margin-right: 0.25rem !important; - } - - .me-lg-2 { - margin-right: 0.5rem !important; - } - - .me-lg-3 { - margin-right: 1rem !important; - } - - .me-lg-4 { - margin-right: 1.5rem !important; - } - - .me-lg-5 { - margin-right: 3rem !important; - } - - .me-lg-auto { - margin-right: auto !important; - } - - .mb-lg-0 { - margin-bottom: 0 !important; - } - - .mb-lg-1 { - margin-bottom: 0.25rem !important; - } - - .mb-lg-2 { - margin-bottom: 0.5rem !important; - } - - .mb-lg-3 { - margin-bottom: 1rem !important; - } - - .mb-lg-4 { - margin-bottom: 1.5rem !important; - } - - .mb-lg-5 { - margin-bottom: 3rem !important; - } - - .mb-lg-auto { - margin-bottom: auto !important; - } - - .ms-lg-0 { - margin-left: 0 !important; - } - - .ms-lg-1 { - margin-left: 0.25rem !important; - } - - .ms-lg-2 { - margin-left: 0.5rem !important; - } - - .ms-lg-3 { - margin-left: 1rem !important; - } - - .ms-lg-4 { - margin-left: 1.5rem !important; - } - - .ms-lg-5 { - margin-left: 3rem !important; - } - - .ms-lg-auto { - margin-left: auto !important; - } - - .p-lg-0 { - padding: 0 !important; - } - - .p-lg-1 { - padding: 0.25rem !important; - } - - .p-lg-2 { - padding: 0.5rem !important; - } - - .p-lg-3 { - padding: 1rem !important; - } - - .p-lg-4 { - padding: 1.5rem !important; - } - - .p-lg-5 { - padding: 3rem !important; - } - - .px-lg-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - - .px-lg-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - - .px-lg-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - - .px-lg-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - - .px-lg-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - - .px-lg-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - - .py-lg-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - - .py-lg-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - - .py-lg-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - - .py-lg-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - - .py-lg-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - - .py-lg-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - - .pt-lg-0 { - padding-top: 0 !important; - } - - .pt-lg-1 { - padding-top: 0.25rem !important; - } - - .pt-lg-2 { - padding-top: 0.5rem !important; - } - - .pt-lg-3 { - padding-top: 1rem !important; - } - - .pt-lg-4 { - padding-top: 1.5rem !important; - } - - .pt-lg-5 { - padding-top: 3rem !important; - } - - .pe-lg-0 { - padding-right: 0 !important; - } - - .pe-lg-1 { - padding-right: 0.25rem !important; - } - - .pe-lg-2 { - padding-right: 0.5rem !important; - } - - .pe-lg-3 { - padding-right: 1rem !important; - } - - .pe-lg-4 { - padding-right: 1.5rem !important; - } - - .pe-lg-5 { - padding-right: 3rem !important; - } - - .pb-lg-0 { - padding-bottom: 0 !important; - } - - .pb-lg-1 { - padding-bottom: 0.25rem !important; - } - - .pb-lg-2 { - padding-bottom: 0.5rem !important; - } - - .pb-lg-3 { - padding-bottom: 1rem !important; - } - - .pb-lg-4 { - padding-bottom: 1.5rem !important; - } - - .pb-lg-5 { - padding-bottom: 3rem !important; - } - - .ps-lg-0 { - padding-left: 0 !important; - } - - .ps-lg-1 { - padding-left: 0.25rem !important; - } - - .ps-lg-2 { - padding-left: 0.5rem !important; - } - - .ps-lg-3 { - padding-left: 1rem !important; - } - - .ps-lg-4 { - padding-left: 1.5rem !important; - } - - .ps-lg-5 { - padding-left: 3rem !important; - } + + .d-md-block { + display: block !important; } - @media (min-width: 1200px) { - .d-xl-inline { - display: inline !important; - } - - .d-xl-inline-block { - display: inline-block !important; - } - - .d-xl-block { - display: block !important; - } - - .d-xl-grid { - display: grid !important; - } - - .d-xl-table { - display: table !important; - } - - .d-xl-table-row { - display: table-row !important; - } - - .d-xl-table-cell { - display: table-cell !important; - } - - .d-xl-flex { - display: flex !important; - } - - .d-xl-inline-flex { - display: inline-flex !important; - } - - .d-xl-none { - display: none !important; - } - - .flex-xl-fill { - flex: 1 1 auto !important; - } - - .flex-xl-row { - flex-direction: row !important; - } - - .flex-xl-column { - flex-direction: column !important; - } - - .flex-xl-row-reverse { - flex-direction: row-reverse !important; - } - - .flex-xl-column-reverse { - flex-direction: column-reverse !important; - } - - .flex-xl-grow-0 { - flex-grow: 0 !important; - } - - .flex-xl-grow-1 { - flex-grow: 1 !important; - } - - .flex-xl-shrink-0 { - flex-shrink: 0 !important; - } - - .flex-xl-shrink-1 { - flex-shrink: 1 !important; - } - - .flex-xl-wrap { - flex-wrap: wrap !important; - } - - .flex-xl-nowrap { - flex-wrap: nowrap !important; - } - - .flex-xl-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - - .justify-content-xl-start { - justify-content: flex-start !important; - } - - .justify-content-xl-end { - justify-content: flex-end !important; - } - - .justify-content-xl-center { - justify-content: center !important; - } - - .justify-content-xl-between { - justify-content: space-between !important; - } - - .justify-content-xl-around { - justify-content: space-around !important; - } - - .justify-content-xl-evenly { - justify-content: space-evenly !important; - } - - .align-items-xl-start { - align-items: flex-start !important; - } - - .align-items-xl-end { - align-items: flex-end !important; - } - - .align-items-xl-center { - align-items: center !important; - } - - .align-items-xl-baseline { - align-items: baseline !important; - } - - .align-items-xl-stretch { - align-items: stretch !important; - } - - .align-content-xl-start { - align-content: flex-start !important; - } - - .align-content-xl-end { - align-content: flex-end !important; - } - - .align-content-xl-center { - align-content: center !important; - } - - .align-content-xl-between { - align-content: space-between !important; - } - - .align-content-xl-around { - align-content: space-around !important; - } - - .align-content-xl-stretch { - align-content: stretch !important; - } - - .align-self-xl-auto { - align-self: auto !important; - } - - .align-self-xl-start { - align-self: flex-start !important; - } - - .align-self-xl-end { - align-self: flex-end !important; - } - - .align-self-xl-center { - align-self: center !important; - } - - .align-self-xl-baseline { - align-self: baseline !important; - } - - .align-self-xl-stretch { - align-self: stretch !important; - } - - .order-xl-first { - order: -1 !important; - } - - .order-xl-0 { - order: 0 !important; - } - - .order-xl-1 { - order: 1 !important; - } - - .order-xl-2 { - order: 2 !important; - } - - .order-xl-3 { - order: 3 !important; - } - - .order-xl-4 { - order: 4 !important; - } - - .order-xl-5 { - order: 5 !important; - } - - .order-xl-last { - order: 6 !important; - } - - .m-xl-0 { - margin: 0 !important; - } - - .m-xl-1 { - margin: 0.25rem !important; - } - - .m-xl-2 { - margin: 0.5rem !important; - } - - .m-xl-3 { - margin: 1rem !important; - } - - .m-xl-4 { - margin: 1.5rem !important; - } - - .m-xl-5 { - margin: 3rem !important; - } - - .m-xl-auto { - margin: auto !important; - } - - .mx-xl-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - - .mx-xl-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - - .mx-xl-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - - .mx-xl-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - - .mx-xl-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - - .mx-xl-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - - .mx-xl-auto { - margin-right: auto !important; - margin-left: auto !important; - } - - .my-xl-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - - .my-xl-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - - .my-xl-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - - .my-xl-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - - .my-xl-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - - .my-xl-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - - .my-xl-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - - .mt-xl-0 { - margin-top: 0 !important; - } - - .mt-xl-1 { - margin-top: 0.25rem !important; - } - - .mt-xl-2 { - margin-top: 0.5rem !important; - } - - .mt-xl-3 { - margin-top: 1rem !important; - } - - .mt-xl-4 { - margin-top: 1.5rem !important; - } - - .mt-xl-5 { - margin-top: 3rem !important; - } - - .mt-xl-auto { - margin-top: auto !important; - } - - .me-xl-0 { - margin-right: 0 !important; - } - - .me-xl-1 { - margin-right: 0.25rem !important; - } - - .me-xl-2 { - margin-right: 0.5rem !important; - } - - .me-xl-3 { - margin-right: 1rem !important; - } - - .me-xl-4 { - margin-right: 1.5rem !important; - } - - .me-xl-5 { - margin-right: 3rem !important; - } - - .me-xl-auto { - margin-right: auto !important; - } - - .mb-xl-0 { - margin-bottom: 0 !important; - } - - .mb-xl-1 { - margin-bottom: 0.25rem !important; - } - - .mb-xl-2 { - margin-bottom: 0.5rem !important; - } - - .mb-xl-3 { - margin-bottom: 1rem !important; - } - - .mb-xl-4 { - margin-bottom: 1.5rem !important; - } - - .mb-xl-5 { - margin-bottom: 3rem !important; - } - - .mb-xl-auto { - margin-bottom: auto !important; - } - - .ms-xl-0 { - margin-left: 0 !important; - } - - .ms-xl-1 { - margin-left: 0.25rem !important; - } - - .ms-xl-2 { - margin-left: 0.5rem !important; - } - - .ms-xl-3 { - margin-left: 1rem !important; - } - - .ms-xl-4 { - margin-left: 1.5rem !important; - } - - .ms-xl-5 { - margin-left: 3rem !important; - } - - .ms-xl-auto { - margin-left: auto !important; - } - - .p-xl-0 { - padding: 0 !important; - } - - .p-xl-1 { - padding: 0.25rem !important; - } - - .p-xl-2 { - padding: 0.5rem !important; - } - - .p-xl-3 { - padding: 1rem !important; - } - - .p-xl-4 { - padding: 1.5rem !important; - } - - .p-xl-5 { - padding: 3rem !important; - } - - .px-xl-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - - .px-xl-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - - .px-xl-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - - .px-xl-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - - .px-xl-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - - .px-xl-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - - .py-xl-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - - .py-xl-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - - .py-xl-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - - .py-xl-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - - .py-xl-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - - .py-xl-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - - .pt-xl-0 { - padding-top: 0 !important; - } - - .pt-xl-1 { - padding-top: 0.25rem !important; - } - - .pt-xl-2 { - padding-top: 0.5rem !important; - } - - .pt-xl-3 { - padding-top: 1rem !important; - } - - .pt-xl-4 { - padding-top: 1.5rem !important; - } - - .pt-xl-5 { - padding-top: 3rem !important; - } - - .pe-xl-0 { - padding-right: 0 !important; - } - - .pe-xl-1 { - padding-right: 0.25rem !important; - } - - .pe-xl-2 { - padding-right: 0.5rem !important; - } - - .pe-xl-3 { - padding-right: 1rem !important; - } - - .pe-xl-4 { - padding-right: 1.5rem !important; - } - - .pe-xl-5 { - padding-right: 3rem !important; - } - - .pb-xl-0 { - padding-bottom: 0 !important; - } - - .pb-xl-1 { - padding-bottom: 0.25rem !important; - } - - .pb-xl-2 { - padding-bottom: 0.5rem !important; - } - - .pb-xl-3 { - padding-bottom: 1rem !important; - } - - .pb-xl-4 { - padding-bottom: 1.5rem !important; - } - - .pb-xl-5 { - padding-bottom: 3rem !important; - } - - .ps-xl-0 { - padding-left: 0 !important; - } - - .ps-xl-1 { - padding-left: 0.25rem !important; - } - - .ps-xl-2 { - padding-left: 0.5rem !important; - } - - .ps-xl-3 { - padding-left: 1rem !important; - } - - .ps-xl-4 { - padding-left: 1.5rem !important; - } - - .ps-xl-5 { - padding-left: 3rem !important; - } + + .d-md-grid { + display: grid !important; } - @media (min-width: 1400px) { - .d-xxl-inline { - display: inline !important; - } - - .d-xxl-inline-block { - display: inline-block !important; - } - - .d-xxl-block { - display: block !important; - } - - .d-xxl-grid { - display: grid !important; - } - - .d-xxl-table { - display: table !important; - } - - .d-xxl-table-row { - display: table-row !important; - } - - .d-xxl-table-cell { - display: table-cell !important; - } - - .d-xxl-flex { - display: flex !important; - } - - .d-xxl-inline-flex { - display: inline-flex !important; - } - - .d-xxl-none { - display: none !important; - } - - .flex-xxl-fill { - flex: 1 1 auto !important; - } - - .flex-xxl-row { - flex-direction: row !important; - } - - .flex-xxl-column { - flex-direction: column !important; - } - - .flex-xxl-row-reverse { - flex-direction: row-reverse !important; - } - - .flex-xxl-column-reverse { - flex-direction: column-reverse !important; - } - - .flex-xxl-grow-0 { - flex-grow: 0 !important; - } - - .flex-xxl-grow-1 { - flex-grow: 1 !important; - } - - .flex-xxl-shrink-0 { - flex-shrink: 0 !important; - } - - .flex-xxl-shrink-1 { - flex-shrink: 1 !important; - } - - .flex-xxl-wrap { - flex-wrap: wrap !important; - } - - .flex-xxl-nowrap { - flex-wrap: nowrap !important; - } - - .flex-xxl-wrap-reverse { - flex-wrap: wrap-reverse !important; - } - - .justify-content-xxl-start { - justify-content: flex-start !important; - } - - .justify-content-xxl-end { - justify-content: flex-end !important; - } - - .justify-content-xxl-center { - justify-content: center !important; - } - - .justify-content-xxl-between { - justify-content: space-between !important; - } - - .justify-content-xxl-around { - justify-content: space-around !important; - } - - .justify-content-xxl-evenly { - justify-content: space-evenly !important; - } - - .align-items-xxl-start { - align-items: flex-start !important; - } - - .align-items-xxl-end { - align-items: flex-end !important; - } - - .align-items-xxl-center { - align-items: center !important; - } - - .align-items-xxl-baseline { - align-items: baseline !important; - } - - .align-items-xxl-stretch { - align-items: stretch !important; - } - - .align-content-xxl-start { - align-content: flex-start !important; - } - - .align-content-xxl-end { - align-content: flex-end !important; - } - - .align-content-xxl-center { - align-content: center !important; - } - - .align-content-xxl-between { - align-content: space-between !important; - } - - .align-content-xxl-around { - align-content: space-around !important; - } - - .align-content-xxl-stretch { - align-content: stretch !important; - } - - .align-self-xxl-auto { - align-self: auto !important; - } - - .align-self-xxl-start { - align-self: flex-start !important; - } - - .align-self-xxl-end { - align-self: flex-end !important; - } - - .align-self-xxl-center { - align-self: center !important; - } - - .align-self-xxl-baseline { - align-self: baseline !important; - } - - .align-self-xxl-stretch { - align-self: stretch !important; - } - - .order-xxl-first { - order: -1 !important; - } - - .order-xxl-0 { - order: 0 !important; - } - - .order-xxl-1 { - order: 1 !important; - } - - .order-xxl-2 { - order: 2 !important; - } - - .order-xxl-3 { - order: 3 !important; - } - - .order-xxl-4 { - order: 4 !important; - } - - .order-xxl-5 { - order: 5 !important; - } - - .order-xxl-last { - order: 6 !important; - } - - .m-xxl-0 { - margin: 0 !important; - } - - .m-xxl-1 { - margin: 0.25rem !important; - } - - .m-xxl-2 { - margin: 0.5rem !important; - } - - .m-xxl-3 { - margin: 1rem !important; - } - - .m-xxl-4 { - margin: 1.5rem !important; - } - - .m-xxl-5 { - margin: 3rem !important; - } - - .m-xxl-auto { - margin: auto !important; - } - - .mx-xxl-0 { - margin-right: 0 !important; - margin-left: 0 !important; - } - - .mx-xxl-1 { - margin-right: 0.25rem !important; - margin-left: 0.25rem !important; - } - - .mx-xxl-2 { - margin-right: 0.5rem !important; - margin-left: 0.5rem !important; - } - - .mx-xxl-3 { - margin-right: 1rem !important; - margin-left: 1rem !important; - } - - .mx-xxl-4 { - margin-right: 1.5rem !important; - margin-left: 1.5rem !important; - } - - .mx-xxl-5 { - margin-right: 3rem !important; - margin-left: 3rem !important; - } - - .mx-xxl-auto { - margin-right: auto !important; - margin-left: auto !important; - } - - .my-xxl-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - - .my-xxl-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; - } - - .my-xxl-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; - } - - .my-xxl-3 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; - } - - .my-xxl-4 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; - } - - .my-xxl-5 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; - } - - .my-xxl-auto { - margin-top: auto !important; - margin-bottom: auto !important; - } - - .mt-xxl-0 { - margin-top: 0 !important; - } - - .mt-xxl-1 { - margin-top: 0.25rem !important; - } - - .mt-xxl-2 { - margin-top: 0.5rem !important; - } - - .mt-xxl-3 { - margin-top: 1rem !important; - } - - .mt-xxl-4 { - margin-top: 1.5rem !important; - } - - .mt-xxl-5 { - margin-top: 3rem !important; - } - - .mt-xxl-auto { - margin-top: auto !important; - } - - .me-xxl-0 { - margin-right: 0 !important; - } - - .me-xxl-1 { - margin-right: 0.25rem !important; - } - - .me-xxl-2 { - margin-right: 0.5rem !important; - } - - .me-xxl-3 { - margin-right: 1rem !important; - } - - .me-xxl-4 { - margin-right: 1.5rem !important; - } - - .me-xxl-5 { - margin-right: 3rem !important; - } - - .me-xxl-auto { - margin-right: auto !important; - } - - .mb-xxl-0 { - margin-bottom: 0 !important; - } - - .mb-xxl-1 { - margin-bottom: 0.25rem !important; - } - - .mb-xxl-2 { - margin-bottom: 0.5rem !important; - } - - .mb-xxl-3 { - margin-bottom: 1rem !important; - } - - .mb-xxl-4 { - margin-bottom: 1.5rem !important; - } - - .mb-xxl-5 { - margin-bottom: 3rem !important; - } - - .mb-xxl-auto { - margin-bottom: auto !important; - } - - .ms-xxl-0 { - margin-left: 0 !important; - } - - .ms-xxl-1 { - margin-left: 0.25rem !important; - } - - .ms-xxl-2 { - margin-left: 0.5rem !important; - } - - .ms-xxl-3 { - margin-left: 1rem !important; - } - - .ms-xxl-4 { - margin-left: 1.5rem !important; - } - - .ms-xxl-5 { - margin-left: 3rem !important; - } - - .ms-xxl-auto { - margin-left: auto !important; - } - - .p-xxl-0 { - padding: 0 !important; - } - - .p-xxl-1 { - padding: 0.25rem !important; - } - - .p-xxl-2 { - padding: 0.5rem !important; - } - - .p-xxl-3 { - padding: 1rem !important; - } - - .p-xxl-4 { - padding: 1.5rem !important; - } - - .p-xxl-5 { - padding: 3rem !important; - } - - .px-xxl-0 { - padding-right: 0 !important; - padding-left: 0 !important; - } - - .px-xxl-1 { - padding-right: 0.25rem !important; - padding-left: 0.25rem !important; - } - - .px-xxl-2 { - padding-right: 0.5rem !important; - padding-left: 0.5rem !important; - } - - .px-xxl-3 { - padding-right: 1rem !important; - padding-left: 1rem !important; - } - - .px-xxl-4 { - padding-right: 1.5rem !important; - padding-left: 1.5rem !important; - } - - .px-xxl-5 { - padding-right: 3rem !important; - padding-left: 3rem !important; - } - - .py-xxl-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - - .py-xxl-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; - } - - .py-xxl-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; - } - - .py-xxl-3 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; - } - - .py-xxl-4 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; - } - - .py-xxl-5 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; - } - - .pt-xxl-0 { - padding-top: 0 !important; - } - - .pt-xxl-1 { - padding-top: 0.25rem !important; - } - - .pt-xxl-2 { - padding-top: 0.5rem !important; - } - - .pt-xxl-3 { - padding-top: 1rem !important; - } - - .pt-xxl-4 { - padding-top: 1.5rem !important; - } - - .pt-xxl-5 { - padding-top: 3rem !important; - } - - .pe-xxl-0 { - padding-right: 0 !important; - } - - .pe-xxl-1 { - padding-right: 0.25rem !important; - } - - .pe-xxl-2 { - padding-right: 0.5rem !important; - } - - .pe-xxl-3 { - padding-right: 1rem !important; - } - - .pe-xxl-4 { - padding-right: 1.5rem !important; - } - - .pe-xxl-5 { - padding-right: 3rem !important; - } - - .pb-xxl-0 { - padding-bottom: 0 !important; - } - - .pb-xxl-1 { - padding-bottom: 0.25rem !important; - } - - .pb-xxl-2 { - padding-bottom: 0.5rem !important; - } - - .pb-xxl-3 { - padding-bottom: 1rem !important; - } - - .pb-xxl-4 { - padding-bottom: 1.5rem !important; - } - - .pb-xxl-5 { - padding-bottom: 3rem !important; - } - - .ps-xxl-0 { - padding-left: 0 !important; - } - - .ps-xxl-1 { - padding-left: 0.25rem !important; - } - - .ps-xxl-2 { - padding-left: 0.5rem !important; - } - - .ps-xxl-3 { - padding-left: 1rem !important; - } - - .ps-xxl-4 { - padding-left: 1.5rem !important; - } - - .ps-xxl-5 { - padding-left: 3rem !important; - } + + .d-md-table { + display: table !important; } - @media print { - .d-print-inline { - display: inline !important; - } - - .d-print-inline-block { - display: inline-block !important; - } - - .d-print-block { - display: block !important; - } - - .d-print-grid { - display: grid !important; - } - - .d-print-table { - display: table !important; - } - - .d-print-table-row { - display: table-row !important; - } - - .d-print-table-cell { - display: table-cell !important; - } - - .d-print-flex { - display: flex !important; - } - - .d-print-inline-flex { - display: inline-flex !important; - } - - .d-print-none { - display: none !important; - } + + .d-md-table-row { + display: table-row !important; } - \ No newline at end of file + + .d-md-table-cell { + display: table-cell !important; + } + + .d-md-flex { + display: flex !important; + } + + .d-md-inline-flex { + display: inline-flex !important; + } + + .d-md-none { + display: none !important; + } + + .flex-md-fill { + flex: 1 1 auto !important; + } + + .flex-md-row { + flex-direction: row !important; + } + + .flex-md-column { + flex-direction: column !important; + } + + .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-md-grow-0 { + flex-grow: 0 !important; + } + + .flex-md-grow-1 { + flex-grow: 1 !important; + } + + .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-md-wrap { + flex-wrap: wrap !important; + } + + .flex-md-nowrap { + flex-wrap: nowrap !important; + } + + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-md-start { + justify-content: flex-start !important; + } + + .justify-content-md-end { + justify-content: flex-end !important; + } + + .justify-content-md-center { + justify-content: center !important; + } + + .justify-content-md-between { + justify-content: space-between !important; + } + + .justify-content-md-around { + justify-content: space-around !important; + } + + .justify-content-md-evenly { + justify-content: space-evenly !important; + } + + .align-items-md-start { + align-items: flex-start !important; + } + + .align-items-md-end { + align-items: flex-end !important; + } + + .align-items-md-center { + align-items: center !important; + } + + .align-items-md-baseline { + align-items: baseline !important; + } + + .align-items-md-stretch { + align-items: stretch !important; + } + + .align-content-md-start { + align-content: flex-start !important; + } + + .align-content-md-end { + align-content: flex-end !important; + } + + .align-content-md-center { + align-content: center !important; + } + + .align-content-md-between { + align-content: space-between !important; + } + + .align-content-md-around { + align-content: space-around !important; + } + + .align-content-md-stretch { + align-content: stretch !important; + } + + .align-self-md-auto { + align-self: auto !important; + } + + .align-self-md-start { + align-self: flex-start !important; + } + + .align-self-md-end { + align-self: flex-end !important; + } + + .align-self-md-center { + align-self: center !important; + } + + .align-self-md-baseline { + align-self: baseline !important; + } + + .align-self-md-stretch { + align-self: stretch !important; + } + + .order-md-first { + order: -1 !important; + } + + .order-md-0 { + order: 0 !important; + } + + .order-md-1 { + order: 1 !important; + } + + .order-md-2 { + order: 2 !important; + } + + .order-md-3 { + order: 3 !important; + } + + .order-md-4 { + order: 4 !important; + } + + .order-md-5 { + order: 5 !important; + } + + .order-md-last { + order: 6 !important; + } + + .m-md-0 { + margin: 0 !important; + } + + .m-md-1 { + margin: 0.25rem !important; + } + + .m-md-2 { + margin: 0.5rem !important; + } + + .m-md-3 { + margin: 1rem !important; + } + + .m-md-4 { + margin: 1.5rem !important; + } + + .m-md-5 { + margin: 3rem !important; + } + + .m-md-auto { + margin: auto !important; + } + + .mx-md-0 { + margin-right: 0 !important; + margin-left : 0 !important; + } + + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left : 0.25rem !important; + } + + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left : 0.5rem !important; + } + + .mx-md-3 { + margin-right: 1rem !important; + margin-left : 1rem !important; + } + + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left : 1.5rem !important; + } + + .mx-md-5 { + margin-right: 3rem !important; + margin-left : 3rem !important; + } + + .mx-md-auto { + margin-right: auto !important; + margin-left : auto !important; + } + + .my-md-0 { + margin-top : 0 !important; + margin-bottom: 0 !important; + } + + .my-md-1 { + margin-top : 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-md-2 { + margin-top : 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-md-3 { + margin-top : 1rem !important; + margin-bottom: 1rem !important; + } + + .my-md-4 { + margin-top : 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-md-5 { + margin-top : 3rem !important; + margin-bottom: 3rem !important; + } + + .my-md-auto { + margin-top : auto !important; + margin-bottom: auto !important; + } + + .mt-md-0 { + margin-top: 0 !important; + } + + .mt-md-1 { + margin-top: 0.25rem !important; + } + + .mt-md-2 { + margin-top: 0.5rem !important; + } + + .mt-md-3 { + margin-top: 1rem !important; + } + + .mt-md-4 { + margin-top: 1.5rem !important; + } + + .mt-md-5 { + margin-top: 3rem !important; + } + + .mt-md-auto { + margin-top: auto !important; + } + + .me-md-0 { + margin-right: 0 !important; + } + + .me-md-1 { + margin-right: 0.25rem !important; + } + + .me-md-2 { + margin-right: 0.5rem !important; + } + + .me-md-3 { + margin-right: 1rem !important; + } + + .me-md-4 { + margin-right: 1.5rem !important; + } + + .me-md-5 { + margin-right: 3rem !important; + } + + .me-md-auto { + margin-right: auto !important; + } + + .mb-md-0 { + margin-bottom: 0 !important; + } + + .mb-md-1 { + margin-bottom: 0.25rem !important; + } + + .mb-md-2 { + margin-bottom: 0.5rem !important; + } + + .mb-md-3 { + margin-bottom: 1rem !important; + } + + .mb-md-4 { + margin-bottom: 1.5rem !important; + } + + .mb-md-5 { + margin-bottom: 3rem !important; + } + + .mb-md-auto { + margin-bottom: auto !important; + } + + .ms-md-0 { + margin-left: 0 !important; + } + + .ms-md-1 { + margin-left: 0.25rem !important; + } + + .ms-md-2 { + margin-left: 0.5rem !important; + } + + .ms-md-3 { + margin-left: 1rem !important; + } + + .ms-md-4 { + margin-left: 1.5rem !important; + } + + .ms-md-5 { + margin-left: 3rem !important; + } + + .ms-md-auto { + margin-left: auto !important; + } + + .p-md-0 { + padding: 0 !important; + } + + .p-md-1 { + padding: 0.25rem !important; + } + + .p-md-2 { + padding: 0.5rem !important; + } + + .p-md-3 { + padding: 1rem !important; + } + + .p-md-4 { + padding: 1.5rem !important; + } + + .p-md-5 { + padding: 3rem !important; + } + + .px-md-0 { + padding-right: 0 !important; + padding-left : 0 !important; + } + + .px-md-1 { + padding-right: 0.25rem !important; + padding-left : 0.25rem !important; + } + + .px-md-2 { + padding-right: 0.5rem !important; + padding-left : 0.5rem !important; + } + + .px-md-3 { + padding-right: 1rem !important; + padding-left : 1rem !important; + } + + .px-md-4 { + padding-right: 1.5rem !important; + padding-left : 1.5rem !important; + } + + .px-md-5 { + padding-right: 3rem !important; + padding-left : 3rem !important; + } + + .py-md-0 { + padding-top : 0 !important; + padding-bottom: 0 !important; + } + + .py-md-1 { + padding-top : 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-md-2 { + padding-top : 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-md-3 { + padding-top : 1rem !important; + padding-bottom: 1rem !important; + } + + .py-md-4 { + padding-top : 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-md-5 { + padding-top : 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-md-0 { + padding-top: 0 !important; + } + + .pt-md-1 { + padding-top: 0.25rem !important; + } + + .pt-md-2 { + padding-top: 0.5rem !important; + } + + .pt-md-3 { + padding-top: 1rem !important; + } + + .pt-md-4 { + padding-top: 1.5rem !important; + } + + .pt-md-5 { + padding-top: 3rem !important; + } + + .pe-md-0 { + padding-right: 0 !important; + } + + .pe-md-1 { + padding-right: 0.25rem !important; + } + + .pe-md-2 { + padding-right: 0.5rem !important; + } + + .pe-md-3 { + padding-right: 1rem !important; + } + + .pe-md-4 { + padding-right: 1.5rem !important; + } + + .pe-md-5 { + padding-right: 3rem !important; + } + + .pb-md-0 { + padding-bottom: 0 !important; + } + + .pb-md-1 { + padding-bottom: 0.25rem !important; + } + + .pb-md-2 { + padding-bottom: 0.5rem !important; + } + + .pb-md-3 { + padding-bottom: 1rem !important; + } + + .pb-md-4 { + padding-bottom: 1.5rem !important; + } + + .pb-md-5 { + padding-bottom: 3rem !important; + } + + .ps-md-0 { + padding-left: 0 !important; + } + + .ps-md-1 { + padding-left: 0.25rem !important; + } + + .ps-md-2 { + padding-left: 0.5rem !important; + } + + .ps-md-3 { + padding-left: 1rem !important; + } + + .ps-md-4 { + padding-left: 1.5rem !important; + } + + .ps-md-5 { + padding-left: 3rem !important; + } +} + +@media (min-width: 992px) { + .d-lg-inline { + display: inline !important; + } + + .d-lg-inline-block { + display: inline-block !important; + } + + .d-lg-block { + display: block !important; + } + + .d-lg-grid { + display: grid !important; + } + + .d-lg-table { + display: table !important; + } + + .d-lg-table-row { + display: table-row !important; + } + + .d-lg-table-cell { + display: table-cell !important; + } + + .d-lg-flex { + display: flex !important; + } + + .d-lg-inline-flex { + display: inline-flex !important; + } + + .d-lg-none { + display: none !important; + } + + .flex-lg-fill { + flex: 1 1 auto !important; + } + + .flex-lg-row { + flex-direction: row !important; + } + + .flex-lg-column { + flex-direction: column !important; + } + + .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-lg-grow-0 { + flex-grow: 0 !important; + } + + .flex-lg-grow-1 { + flex-grow: 1 !important; + } + + .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-lg-wrap { + flex-wrap: wrap !important; + } + + .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-lg-start { + justify-content: flex-start !important; + } + + .justify-content-lg-end { + justify-content: flex-end !important; + } + + .justify-content-lg-center { + justify-content: center !important; + } + + .justify-content-lg-between { + justify-content: space-between !important; + } + + .justify-content-lg-around { + justify-content: space-around !important; + } + + .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + + .align-items-lg-start { + align-items: flex-start !important; + } + + .align-items-lg-end { + align-items: flex-end !important; + } + + .align-items-lg-center { + align-items: center !important; + } + + .align-items-lg-baseline { + align-items: baseline !important; + } + + .align-items-lg-stretch { + align-items: stretch !important; + } + + .align-content-lg-start { + align-content: flex-start !important; + } + + .align-content-lg-end { + align-content: flex-end !important; + } + + .align-content-lg-center { + align-content: center !important; + } + + .align-content-lg-between { + align-content: space-between !important; + } + + .align-content-lg-around { + align-content: space-around !important; + } + + .align-content-lg-stretch { + align-content: stretch !important; + } + + .align-self-lg-auto { + align-self: auto !important; + } + + .align-self-lg-start { + align-self: flex-start !important; + } + + .align-self-lg-end { + align-self: flex-end !important; + } + + .align-self-lg-center { + align-self: center !important; + } + + .align-self-lg-baseline { + align-self: baseline !important; + } + + .align-self-lg-stretch { + align-self: stretch !important; + } + + .order-lg-first { + order: -1 !important; + } + + .order-lg-0 { + order: 0 !important; + } + + .order-lg-1 { + order: 1 !important; + } + + .order-lg-2 { + order: 2 !important; + } + + .order-lg-3 { + order: 3 !important; + } + + .order-lg-4 { + order: 4 !important; + } + + .order-lg-5 { + order: 5 !important; + } + + .order-lg-last { + order: 6 !important; + } + + .m-lg-0 { + margin: 0 !important; + } + + .m-lg-1 { + margin: 0.25rem !important; + } + + .m-lg-2 { + margin: 0.5rem !important; + } + + .m-lg-3 { + margin: 1rem !important; + } + + .m-lg-4 { + margin: 1.5rem !important; + } + + .m-lg-5 { + margin: 3rem !important; + } + + .m-lg-auto { + margin: auto !important; + } + + .mx-lg-0 { + margin-right: 0 !important; + margin-left : 0 !important; + } + + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left : 0.25rem !important; + } + + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left : 0.5rem !important; + } + + .mx-lg-3 { + margin-right: 1rem !important; + margin-left : 1rem !important; + } + + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left : 1.5rem !important; + } + + .mx-lg-5 { + margin-right: 3rem !important; + margin-left : 3rem !important; + } + + .mx-lg-auto { + margin-right: auto !important; + margin-left : auto !important; + } + + .my-lg-0 { + margin-top : 0 !important; + margin-bottom: 0 !important; + } + + .my-lg-1 { + margin-top : 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-lg-2 { + margin-top : 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-lg-3 { + margin-top : 1rem !important; + margin-bottom: 1rem !important; + } + + .my-lg-4 { + margin-top : 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-lg-5 { + margin-top : 3rem !important; + margin-bottom: 3rem !important; + } + + .my-lg-auto { + margin-top : auto !important; + margin-bottom: auto !important; + } + + .mt-lg-0 { + margin-top: 0 !important; + } + + .mt-lg-1 { + margin-top: 0.25rem !important; + } + + .mt-lg-2 { + margin-top: 0.5rem !important; + } + + .mt-lg-3 { + margin-top: 1rem !important; + } + + .mt-lg-4 { + margin-top: 1.5rem !important; + } + + .mt-lg-5 { + margin-top: 3rem !important; + } + + .mt-lg-auto { + margin-top: auto !important; + } + + .me-lg-0 { + margin-right: 0 !important; + } + + .me-lg-1 { + margin-right: 0.25rem !important; + } + + .me-lg-2 { + margin-right: 0.5rem !important; + } + + .me-lg-3 { + margin-right: 1rem !important; + } + + .me-lg-4 { + margin-right: 1.5rem !important; + } + + .me-lg-5 { + margin-right: 3rem !important; + } + + .me-lg-auto { + margin-right: auto !important; + } + + .mb-lg-0 { + margin-bottom: 0 !important; + } + + .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + + .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + + .mb-lg-3 { + margin-bottom: 1rem !important; + } + + .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + + .mb-lg-5 { + margin-bottom: 3rem !important; + } + + .mb-lg-auto { + margin-bottom: auto !important; + } + + .ms-lg-0 { + margin-left: 0 !important; + } + + .ms-lg-1 { + margin-left: 0.25rem !important; + } + + .ms-lg-2 { + margin-left: 0.5rem !important; + } + + .ms-lg-3 { + margin-left: 1rem !important; + } + + .ms-lg-4 { + margin-left: 1.5rem !important; + } + + .ms-lg-5 { + margin-left: 3rem !important; + } + + .ms-lg-auto { + margin-left: auto !important; + } + + .p-lg-0 { + padding: 0 !important; + } + + .p-lg-1 { + padding: 0.25rem !important; + } + + .p-lg-2 { + padding: 0.5rem !important; + } + + .p-lg-3 { + padding: 1rem !important; + } + + .p-lg-4 { + padding: 1.5rem !important; + } + + .p-lg-5 { + padding: 3rem !important; + } + + .px-lg-0 { + padding-right: 0 !important; + padding-left : 0 !important; + } + + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left : 0.25rem !important; + } + + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left : 0.5rem !important; + } + + .px-lg-3 { + padding-right: 1rem !important; + padding-left : 1rem !important; + } + + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left : 1.5rem !important; + } + + .px-lg-5 { + padding-right: 3rem !important; + padding-left : 3rem !important; + } + + .py-lg-0 { + padding-top : 0 !important; + padding-bottom: 0 !important; + } + + .py-lg-1 { + padding-top : 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-lg-2 { + padding-top : 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-lg-3 { + padding-top : 1rem !important; + padding-bottom: 1rem !important; + } + + .py-lg-4 { + padding-top : 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-lg-5 { + padding-top : 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-lg-0 { + padding-top: 0 !important; + } + + .pt-lg-1 { + padding-top: 0.25rem !important; + } + + .pt-lg-2 { + padding-top: 0.5rem !important; + } + + .pt-lg-3 { + padding-top: 1rem !important; + } + + .pt-lg-4 { + padding-top: 1.5rem !important; + } + + .pt-lg-5 { + padding-top: 3rem !important; + } + + .pe-lg-0 { + padding-right: 0 !important; + } + + .pe-lg-1 { + padding-right: 0.25rem !important; + } + + .pe-lg-2 { + padding-right: 0.5rem !important; + } + + .pe-lg-3 { + padding-right: 1rem !important; + } + + .pe-lg-4 { + padding-right: 1.5rem !important; + } + + .pe-lg-5 { + padding-right: 3rem !important; + } + + .pb-lg-0 { + padding-bottom: 0 !important; + } + + .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + + .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + + .pb-lg-3 { + padding-bottom: 1rem !important; + } + + .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + + .pb-lg-5 { + padding-bottom: 3rem !important; + } + + .ps-lg-0 { + padding-left: 0 !important; + } + + .ps-lg-1 { + padding-left: 0.25rem !important; + } + + .ps-lg-2 { + padding-left: 0.5rem !important; + } + + .ps-lg-3 { + padding-left: 1rem !important; + } + + .ps-lg-4 { + padding-left: 1.5rem !important; + } + + .ps-lg-5 { + padding-left: 3rem !important; + } +} + +@media (min-width: 1200px) { + .d-xl-inline { + display: inline !important; + } + + .d-xl-inline-block { + display: inline-block !important; + } + + .d-xl-block { + display: block !important; + } + + .d-xl-grid { + display: grid !important; + } + + .d-xl-table { + display: table !important; + } + + .d-xl-table-row { + display: table-row !important; + } + + .d-xl-table-cell { + display: table-cell !important; + } + + .d-xl-flex { + display: flex !important; + } + + .d-xl-inline-flex { + display: inline-flex !important; + } + + .d-xl-none { + display: none !important; + } + + .flex-xl-fill { + flex: 1 1 auto !important; + } + + .flex-xl-row { + flex-direction: row !important; + } + + .flex-xl-column { + flex-direction: column !important; + } + + .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-xl-grow-0 { + flex-grow: 0 !important; + } + + .flex-xl-grow-1 { + flex-grow: 1 !important; + } + + .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-xl-wrap { + flex-wrap: wrap !important; + } + + .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-xl-start { + justify-content: flex-start !important; + } + + .justify-content-xl-end { + justify-content: flex-end !important; + } + + .justify-content-xl-center { + justify-content: center !important; + } + + .justify-content-xl-between { + justify-content: space-between !important; + } + + .justify-content-xl-around { + justify-content: space-around !important; + } + + .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + + .align-items-xl-start { + align-items: flex-start !important; + } + + .align-items-xl-end { + align-items: flex-end !important; + } + + .align-items-xl-center { + align-items: center !important; + } + + .align-items-xl-baseline { + align-items: baseline !important; + } + + .align-items-xl-stretch { + align-items: stretch !important; + } + + .align-content-xl-start { + align-content: flex-start !important; + } + + .align-content-xl-end { + align-content: flex-end !important; + } + + .align-content-xl-center { + align-content: center !important; + } + + .align-content-xl-between { + align-content: space-between !important; + } + + .align-content-xl-around { + align-content: space-around !important; + } + + .align-content-xl-stretch { + align-content: stretch !important; + } + + .align-self-xl-auto { + align-self: auto !important; + } + + .align-self-xl-start { + align-self: flex-start !important; + } + + .align-self-xl-end { + align-self: flex-end !important; + } + + .align-self-xl-center { + align-self: center !important; + } + + .align-self-xl-baseline { + align-self: baseline !important; + } + + .align-self-xl-stretch { + align-self: stretch !important; + } + + .order-xl-first { + order: -1 !important; + } + + .order-xl-0 { + order: 0 !important; + } + + .order-xl-1 { + order: 1 !important; + } + + .order-xl-2 { + order: 2 !important; + } + + .order-xl-3 { + order: 3 !important; + } + + .order-xl-4 { + order: 4 !important; + } + + .order-xl-5 { + order: 5 !important; + } + + .order-xl-last { + order: 6 !important; + } + + .m-xl-0 { + margin: 0 !important; + } + + .m-xl-1 { + margin: 0.25rem !important; + } + + .m-xl-2 { + margin: 0.5rem !important; + } + + .m-xl-3 { + margin: 1rem !important; + } + + .m-xl-4 { + margin: 1.5rem !important; + } + + .m-xl-5 { + margin: 3rem !important; + } + + .m-xl-auto { + margin: auto !important; + } + + .mx-xl-0 { + margin-right: 0 !important; + margin-left : 0 !important; + } + + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left : 0.25rem !important; + } + + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left : 0.5rem !important; + } + + .mx-xl-3 { + margin-right: 1rem !important; + margin-left : 1rem !important; + } + + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left : 1.5rem !important; + } + + .mx-xl-5 { + margin-right: 3rem !important; + margin-left : 3rem !important; + } + + .mx-xl-auto { + margin-right: auto !important; + margin-left : auto !important; + } + + .my-xl-0 { + margin-top : 0 !important; + margin-bottom: 0 !important; + } + + .my-xl-1 { + margin-top : 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-xl-2 { + margin-top : 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-xl-3 { + margin-top : 1rem !important; + margin-bottom: 1rem !important; + } + + .my-xl-4 { + margin-top : 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-xl-5 { + margin-top : 3rem !important; + margin-bottom: 3rem !important; + } + + .my-xl-auto { + margin-top : auto !important; + margin-bottom: auto !important; + } + + .mt-xl-0 { + margin-top: 0 !important; + } + + .mt-xl-1 { + margin-top: 0.25rem !important; + } + + .mt-xl-2 { + margin-top: 0.5rem !important; + } + + .mt-xl-3 { + margin-top: 1rem !important; + } + + .mt-xl-4 { + margin-top: 1.5rem !important; + } + + .mt-xl-5 { + margin-top: 3rem !important; + } + + .mt-xl-auto { + margin-top: auto !important; + } + + .me-xl-0 { + margin-right: 0 !important; + } + + .me-xl-1 { + margin-right: 0.25rem !important; + } + + .me-xl-2 { + margin-right: 0.5rem !important; + } + + .me-xl-3 { + margin-right: 1rem !important; + } + + .me-xl-4 { + margin-right: 1.5rem !important; + } + + .me-xl-5 { + margin-right: 3rem !important; + } + + .me-xl-auto { + margin-right: auto !important; + } + + .mb-xl-0 { + margin-bottom: 0 !important; + } + + .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + + .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + + .mb-xl-3 { + margin-bottom: 1rem !important; + } + + .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + + .mb-xl-5 { + margin-bottom: 3rem !important; + } + + .mb-xl-auto { + margin-bottom: auto !important; + } + + .ms-xl-0 { + margin-left: 0 !important; + } + + .ms-xl-1 { + margin-left: 0.25rem !important; + } + + .ms-xl-2 { + margin-left: 0.5rem !important; + } + + .ms-xl-3 { + margin-left: 1rem !important; + } + + .ms-xl-4 { + margin-left: 1.5rem !important; + } + + .ms-xl-5 { + margin-left: 3rem !important; + } + + .ms-xl-auto { + margin-left: auto !important; + } + + .p-xl-0 { + padding: 0 !important; + } + + .p-xl-1 { + padding: 0.25rem !important; + } + + .p-xl-2 { + padding: 0.5rem !important; + } + + .p-xl-3 { + padding: 1rem !important; + } + + .p-xl-4 { + padding: 1.5rem !important; + } + + .p-xl-5 { + padding: 3rem !important; + } + + .px-xl-0 { + padding-right: 0 !important; + padding-left : 0 !important; + } + + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left : 0.25rem !important; + } + + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left : 0.5rem !important; + } + + .px-xl-3 { + padding-right: 1rem !important; + padding-left : 1rem !important; + } + + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left : 1.5rem !important; + } + + .px-xl-5 { + padding-right: 3rem !important; + padding-left : 3rem !important; + } + + .py-xl-0 { + padding-top : 0 !important; + padding-bottom: 0 !important; + } + + .py-xl-1 { + padding-top : 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-xl-2 { + padding-top : 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-xl-3 { + padding-top : 1rem !important; + padding-bottom: 1rem !important; + } + + .py-xl-4 { + padding-top : 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-xl-5 { + padding-top : 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-xl-0 { + padding-top: 0 !important; + } + + .pt-xl-1 { + padding-top: 0.25rem !important; + } + + .pt-xl-2 { + padding-top: 0.5rem !important; + } + + .pt-xl-3 { + padding-top: 1rem !important; + } + + .pt-xl-4 { + padding-top: 1.5rem !important; + } + + .pt-xl-5 { + padding-top: 3rem !important; + } + + .pe-xl-0 { + padding-right: 0 !important; + } + + .pe-xl-1 { + padding-right: 0.25rem !important; + } + + .pe-xl-2 { + padding-right: 0.5rem !important; + } + + .pe-xl-3 { + padding-right: 1rem !important; + } + + .pe-xl-4 { + padding-right: 1.5rem !important; + } + + .pe-xl-5 { + padding-right: 3rem !important; + } + + .pb-xl-0 { + padding-bottom: 0 !important; + } + + .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + + .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + + .pb-xl-3 { + padding-bottom: 1rem !important; + } + + .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + + .pb-xl-5 { + padding-bottom: 3rem !important; + } + + .ps-xl-0 { + padding-left: 0 !important; + } + + .ps-xl-1 { + padding-left: 0.25rem !important; + } + + .ps-xl-2 { + padding-left: 0.5rem !important; + } + + .ps-xl-3 { + padding-left: 1rem !important; + } + + .ps-xl-4 { + padding-left: 1.5rem !important; + } + + .ps-xl-5 { + padding-left: 3rem !important; + } +} + +@media (min-width: 1400px) { + .d-xxl-inline { + display: inline !important; + } + + .d-xxl-inline-block { + display: inline-block !important; + } + + .d-xxl-block { + display: block !important; + } + + .d-xxl-grid { + display: grid !important; + } + + .d-xxl-table { + display: table !important; + } + + .d-xxl-table-row { + display: table-row !important; + } + + .d-xxl-table-cell { + display: table-cell !important; + } + + .d-xxl-flex { + display: flex !important; + } + + .d-xxl-inline-flex { + display: inline-flex !important; + } + + .d-xxl-none { + display: none !important; + } + + .flex-xxl-fill { + flex: 1 1 auto !important; + } + + .flex-xxl-row { + flex-direction: row !important; + } + + .flex-xxl-column { + flex-direction: column !important; + } + + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + + .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + + .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + + .flex-xxl-wrap { + flex-wrap: wrap !important; + } + + .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + + .justify-content-xxl-start { + justify-content: flex-start !important; + } + + .justify-content-xxl-end { + justify-content: flex-end !important; + } + + .justify-content-xxl-center { + justify-content: center !important; + } + + .justify-content-xxl-between { + justify-content: space-between !important; + } + + .justify-content-xxl-around { + justify-content: space-around !important; + } + + .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + + .align-items-xxl-start { + align-items: flex-start !important; + } + + .align-items-xxl-end { + align-items: flex-end !important; + } + + .align-items-xxl-center { + align-items: center !important; + } + + .align-items-xxl-baseline { + align-items: baseline !important; + } + + .align-items-xxl-stretch { + align-items: stretch !important; + } + + .align-content-xxl-start { + align-content: flex-start !important; + } + + .align-content-xxl-end { + align-content: flex-end !important; + } + + .align-content-xxl-center { + align-content: center !important; + } + + .align-content-xxl-between { + align-content: space-between !important; + } + + .align-content-xxl-around { + align-content: space-around !important; + } + + .align-content-xxl-stretch { + align-content: stretch !important; + } + + .align-self-xxl-auto { + align-self: auto !important; + } + + .align-self-xxl-start { + align-self: flex-start !important; + } + + .align-self-xxl-end { + align-self: flex-end !important; + } + + .align-self-xxl-center { + align-self: center !important; + } + + .align-self-xxl-baseline { + align-self: baseline !important; + } + + .align-self-xxl-stretch { + align-self: stretch !important; + } + + .order-xxl-first { + order: -1 !important; + } + + .order-xxl-0 { + order: 0 !important; + } + + .order-xxl-1 { + order: 1 !important; + } + + .order-xxl-2 { + order: 2 !important; + } + + .order-xxl-3 { + order: 3 !important; + } + + .order-xxl-4 { + order: 4 !important; + } + + .order-xxl-5 { + order: 5 !important; + } + + .order-xxl-last { + order: 6 !important; + } + + .m-xxl-0 { + margin: 0 !important; + } + + .m-xxl-1 { + margin: 0.25rem !important; + } + + .m-xxl-2 { + margin: 0.5rem !important; + } + + .m-xxl-3 { + margin: 1rem !important; + } + + .m-xxl-4 { + margin: 1.5rem !important; + } + + .m-xxl-5 { + margin: 3rem !important; + } + + .m-xxl-auto { + margin: auto !important; + } + + .mx-xxl-0 { + margin-right: 0 !important; + margin-left : 0 !important; + } + + .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left : 0.25rem !important; + } + + .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left : 0.5rem !important; + } + + .mx-xxl-3 { + margin-right: 1rem !important; + margin-left : 1rem !important; + } + + .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left : 1.5rem !important; + } + + .mx-xxl-5 { + margin-right: 3rem !important; + margin-left : 3rem !important; + } + + .mx-xxl-auto { + margin-right: auto !important; + margin-left : auto !important; + } + + .my-xxl-0 { + margin-top : 0 !important; + margin-bottom: 0 !important; + } + + .my-xxl-1 { + margin-top : 0.25rem !important; + margin-bottom: 0.25rem !important; + } + + .my-xxl-2 { + margin-top : 0.5rem !important; + margin-bottom: 0.5rem !important; + } + + .my-xxl-3 { + margin-top : 1rem !important; + margin-bottom: 1rem !important; + } + + .my-xxl-4 { + margin-top : 1.5rem !important; + margin-bottom: 1.5rem !important; + } + + .my-xxl-5 { + margin-top : 3rem !important; + margin-bottom: 3rem !important; + } + + .my-xxl-auto { + margin-top : auto !important; + margin-bottom: auto !important; + } + + .mt-xxl-0 { + margin-top: 0 !important; + } + + .mt-xxl-1 { + margin-top: 0.25rem !important; + } + + .mt-xxl-2 { + margin-top: 0.5rem !important; + } + + .mt-xxl-3 { + margin-top: 1rem !important; + } + + .mt-xxl-4 { + margin-top: 1.5rem !important; + } + + .mt-xxl-5 { + margin-top: 3rem !important; + } + + .mt-xxl-auto { + margin-top: auto !important; + } + + .me-xxl-0 { + margin-right: 0 !important; + } + + .me-xxl-1 { + margin-right: 0.25rem !important; + } + + .me-xxl-2 { + margin-right: 0.5rem !important; + } + + .me-xxl-3 { + margin-right: 1rem !important; + } + + .me-xxl-4 { + margin-right: 1.5rem !important; + } + + .me-xxl-5 { + margin-right: 3rem !important; + } + + .me-xxl-auto { + margin-right: auto !important; + } + + .mb-xxl-0 { + margin-bottom: 0 !important; + } + + .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + + .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + + .mb-xxl-3 { + margin-bottom: 1rem !important; + } + + .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + + .mb-xxl-5 { + margin-bottom: 3rem !important; + } + + .mb-xxl-auto { + margin-bottom: auto !important; + } + + .ms-xxl-0 { + margin-left: 0 !important; + } + + .ms-xxl-1 { + margin-left: 0.25rem !important; + } + + .ms-xxl-2 { + margin-left: 0.5rem !important; + } + + .ms-xxl-3 { + margin-left: 1rem !important; + } + + .ms-xxl-4 { + margin-left: 1.5rem !important; + } + + .ms-xxl-5 { + margin-left: 3rem !important; + } + + .ms-xxl-auto { + margin-left: auto !important; + } + + .p-xxl-0 { + padding: 0 !important; + } + + .p-xxl-1 { + padding: 0.25rem !important; + } + + .p-xxl-2 { + padding: 0.5rem !important; + } + + .p-xxl-3 { + padding: 1rem !important; + } + + .p-xxl-4 { + padding: 1.5rem !important; + } + + .p-xxl-5 { + padding: 3rem !important; + } + + .px-xxl-0 { + padding-right: 0 !important; + padding-left : 0 !important; + } + + .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left : 0.25rem !important; + } + + .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left : 0.5rem !important; + } + + .px-xxl-3 { + padding-right: 1rem !important; + padding-left : 1rem !important; + } + + .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left : 1.5rem !important; + } + + .px-xxl-5 { + padding-right: 3rem !important; + padding-left : 3rem !important; + } + + .py-xxl-0 { + padding-top : 0 !important; + padding-bottom: 0 !important; + } + + .py-xxl-1 { + padding-top : 0.25rem !important; + padding-bottom: 0.25rem !important; + } + + .py-xxl-2 { + padding-top : 0.5rem !important; + padding-bottom: 0.5rem !important; + } + + .py-xxl-3 { + padding-top : 1rem !important; + padding-bottom: 1rem !important; + } + + .py-xxl-4 { + padding-top : 1.5rem !important; + padding-bottom: 1.5rem !important; + } + + .py-xxl-5 { + padding-top : 3rem !important; + padding-bottom: 3rem !important; + } + + .pt-xxl-0 { + padding-top: 0 !important; + } + + .pt-xxl-1 { + padding-top: 0.25rem !important; + } + + .pt-xxl-2 { + padding-top: 0.5rem !important; + } + + .pt-xxl-3 { + padding-top: 1rem !important; + } + + .pt-xxl-4 { + padding-top: 1.5rem !important; + } + + .pt-xxl-5 { + padding-top: 3rem !important; + } + + .pe-xxl-0 { + padding-right: 0 !important; + } + + .pe-xxl-1 { + padding-right: 0.25rem !important; + } + + .pe-xxl-2 { + padding-right: 0.5rem !important; + } + + .pe-xxl-3 { + padding-right: 1rem !important; + } + + .pe-xxl-4 { + padding-right: 1.5rem !important; + } + + .pe-xxl-5 { + padding-right: 3rem !important; + } + + .pb-xxl-0 { + padding-bottom: 0 !important; + } + + .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + + .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + + .pb-xxl-3 { + padding-bottom: 1rem !important; + } + + .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + + .pb-xxl-5 { + padding-bottom: 3rem !important; + } + + .ps-xxl-0 { + padding-left: 0 !important; + } + + .ps-xxl-1 { + padding-left: 0.25rem !important; + } + + .ps-xxl-2 { + padding-left: 0.5rem !important; + } + + .ps-xxl-3 { + padding-left: 1rem !important; + } + + .ps-xxl-4 { + padding-left: 1.5rem !important; + } + + .ps-xxl-5 { + padding-left: 3rem !important; + } +} + +@media print { + .d-print-inline { + display: inline !important; + } + + .d-print-inline-block { + display: inline-block !important; + } + + .d-print-block { + display: block !important; + } + + .d-print-grid { + display: grid !important; + } + + .d-print-table { + display: table !important; + } + + .d-print-table-row { + display: table-row !important; + } + + .d-print-table-cell { + display: table-cell !important; + } + + .d-print-flex { + display: flex !important; + } + + .d-print-inline-flex { + display: inline-flex !important; + } + + .d-print-none { + display: none !important; + } +} + +// Tooltips +.tooltip { + position : absolute; + z-index : 1080; + display : block; + margin : 0; + font-family : var(--bs-font-sans-serif); + font-style : normal; + font-weight : 400; + line-height : 1.5; + text-align : left; + text-align : start; + text-decoration: none; + text-shadow : none; + text-transform : none; + letter-spacing : normal; + word-break : normal; + word-spacing : normal; + white-space : normal; + line-break : auto; + font-size : 0.875rem; + word-wrap : break-word; + opacity : 0; +} + +.tooltip.show { + opacity: 0.9; +} + +.tooltip .tooltip-arrow { + position: absolute; + display : block; + width : 0.8rem; + height : 0.4rem; +} + +.tooltip .tooltip-arrow::before { + position : absolute; + content : ""; + border-color: transparent; + border-style: solid; +} + +.bs-tooltip-top, +.bs-tooltip-auto[data-popper-placement^=top] { + padding: 0.4rem 0; +} + +.bs-tooltip-top .tooltip-arrow, +.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { + bottom: 0; +} + +.bs-tooltip-top .tooltip-arrow::before, +.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { + top : -1px; + border-width : 0.4rem 0.4rem 0; + border-top-color: #000; +} + +.bs-tooltip-end, +.bs-tooltip-auto[data-popper-placement^=right] { + padding: 0 0.4rem; +} + +.bs-tooltip-end .tooltip-arrow, +.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { + left : 0; + width : 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-end .tooltip-arrow::before, +.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { + right : -1px; + border-width : 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000; +} + +.bs-tooltip-bottom, +.bs-tooltip-auto[data-popper-placement^=bottom] { + padding: 0.4rem 0; +} + +.bs-tooltip-bottom .tooltip-arrow, +.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { + top: 0; +} + +.bs-tooltip-bottom .tooltip-arrow::before, +.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { + bottom : -1px; + border-width : 0 0.4rem 0.4rem; + border-bottom-color: #000; +} + +.bs-tooltip-start, +.bs-tooltip-auto[data-popper-placement^=left] { + padding: 0 0.4rem; +} + +.bs-tooltip-start .tooltip-arrow, +.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { + right : 0; + width : 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-start .tooltip-arrow::before, +.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { + left : -1px; + border-width : 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000; +} + +.tooltip-inner { + max-width : 200px; + padding : 0.25rem 0.5rem; + color : #fff; + text-align : center; + background-color: #000; + border-radius : 0.25rem; + -webkit-user-select: none; + user-select: none; + pointer-events: none; +} + +.popover { + position: absolute; + top : 0; + left : 0 + /* rtl:ignore */ + ; + z-index : 1070; + display : block; + max-width : 276px; + font-family : var(--bs-font-sans-serif); + font-style : normal; + font-weight : 400; + line-height : 1.5; + text-align : left; + text-align : start; + text-decoration : none; + text-shadow : none; + text-transform : none; + letter-spacing : normal; + word-break : normal; + word-spacing : normal; + white-space : normal; + line-break : auto; + font-size : 0.875rem; + word-wrap : break-word; + background-color: #fff; + background-clip : padding-box; + border : 1px solid rgba(0, 0, 0, 0.2); + border-radius : 0.3rem; +} + +.popover .popover-arrow { + position: absolute; + display : block; + width : 1rem; + height : 0.5rem; +} + +.popover .popover-arrow::before, +.popover .popover-arrow::after { + position : absolute; + display : block; + content : ""; + border-color: transparent; + border-style: solid; +} + +.bs-popover-top>.popover-arrow, +.bs-popover-auto[data-popper-placement^=top]>.popover-arrow { + bottom: calc(-0.5rem - 1px); +} + +.bs-popover-top>.popover-arrow::before, +.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before { + bottom : 0; + border-width : 0.5rem 0.5rem 0; + border-top-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-top>.popover-arrow::after, +.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after { + bottom : 1px; + border-width : 0.5rem 0.5rem 0; + border-top-color: #fff; +} + +.bs-popover-end>.popover-arrow, +.bs-popover-auto[data-popper-placement^=right]>.popover-arrow { + left : calc(-0.5rem - 1px); + width : 0.5rem; + height: 1rem; +} + +.bs-popover-end>.popover-arrow::before, +.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before { + left : 0; + border-width : 0.5rem 0.5rem 0.5rem 0; + border-right-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-end>.popover-arrow::after, +.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after { + left : 1px; + border-width : 0.5rem 0.5rem 0.5rem 0; + border-right-color: #fff; +} + +.bs-popover-bottom>.popover-arrow, +.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow { + top: calc(-0.5rem - 1px); +} + +.bs-popover-bottom>.popover-arrow::before, +.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before { + top : 0; + border-width : 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-bottom>.popover-arrow::after, +.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after { + top : 1px; + border-width : 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: #fff; +} + +.bs-popover-bottom .popover-header::before, +.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { + position : absolute; + top : 0; + left : 50%; + display : block; + width : 1rem; + margin-left : -0.5rem; + content : ""; + border-bottom: 1px solid #f0f0f0; +} + +.bs-popover-start>.popover-arrow, +.bs-popover-auto[data-popper-placement^=left]>.popover-arrow { + right : calc(-0.5rem - 1px); + width : 0.5rem; + height: 1rem; +} + +.bs-popover-start>.popover-arrow::before, +.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before { + right : 0; + border-width : 0.5rem 0 0.5rem 0.5rem; + border-left-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-start>.popover-arrow::after, +.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after { + right : 1px; + border-width : 0.5rem 0 0.5rem 0.5rem; + border-left-color: #fff; +} + +.popover-header { + padding : 0.5rem 1rem; + margin-bottom : 0; + font-size : 1rem; + background-color : #f0f0f0; + border-bottom : 1px solid rgba(0, 0, 0, 0.2); + border-top-left-radius : calc(0.3rem - 1px); + border-top-right-radius: calc(0.3rem - 1px); +} + +.popover-header:empty { + display: none; +} + +.popover-body { + padding: 1rem 1rem; + color : #212529; +} diff --git a/src/renderer/less/directives.less b/src/renderer/less/directives.less index 085f0833..3831816c 100644 --- a/src/renderer/less/directives.less +++ b/src/renderer/less/directives.less @@ -174,4 +174,9 @@ flex: 0 0 auto; } } + .collection-page { + .top-fab { + bottom:96px; + } + } } diff --git a/src/renderer/less/helpers.less b/src/renderer/less/helpers.less index 712d498c..08cd33c3 100644 --- a/src/renderer/less/helpers.less +++ b/src/renderer/less/helpers.less @@ -305,19 +305,19 @@ .menu-panel-body { display: flex; flex-flow: column; - background: rgb(38 38 38); + background: #262626; position: relative; min-width: 200px; box-shadow: var(--ciderShadow-Generic); border-radius: var(--mediaItemRadius); overflow: hidden; - font-size: 14px; + font-size: 13px; .menu-option { text-align: left; display: flex; width: 100%; - padding: 10px 16px; + padding: 9px 16px; appearance: none; border: 0px; font: inherit; diff --git a/src/renderer/js/bootbox.min.js b/src/renderer/lib/bootbox.min.js similarity index 100% rename from src/renderer/js/bootbox.min.js rename to src/renderer/lib/bootbox.min.js diff --git a/src/renderer/lib/bootstrap-vue.min.js b/src/renderer/lib/bootstrap-vue.min.js new file mode 100644 index 00000000..74575d56 --- /dev/null +++ b/src/renderer/lib/bootstrap-vue.min.js @@ -0,0 +1,11 @@ +/*! + * BootstrapVue 2.21.2 + * + * @link https://bootstrap-vue.org + * @source https://github.com/bootstrap-vue/bootstrap-vue + * @copyright (c) 2016-2021 BootstrapVue + * @license MIT + * https://github.com/bootstrap-vue/bootstrap-vue/blob/master/LICENSE + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("vue")):"function"==typeof define&&define.amd?define(["vue"],e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrapVue=e(t.Vue)}(this,(function(t){"use strict";function e(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var i=e(t);function n(t){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var i=0;it.length)&&(e=t.length);for(var i=0,n=new Array(e);i0,W=(/msie|trident/.test(j),function(){var t=!1;if(M)try{var e={get passive(){t=!0}};H.addEventListener("test",e,e),H.removeEventListener("test",e,e)}catch(e){t=!1}return t}()),Y=M&&("ontouchstart"in z.documentElement||N.maxTouchPoints>0),U=M&&Boolean(H.PointerEvent||H.MSPointerEvent),q=M&&"IntersectionObserver"in H&&"IntersectionObserverEntry"in H&&"intersectionRatio"in H.IntersectionObserverEntry.prototype,K="BvConfig",X=["xs","sm","md","lg","xl"],Z=/\[(\d+)]/g,J=/^(BV?)/,Q=/^\d+$/,tt=/^\..+/,et=/^#/,it=/^#[A-Za-z]+[\w\-:.]*$/,nt=/(<([^>]+)>)/gi,ot=/\B([A-Z])/g,rt=/([a-z])([A-Z])/g,st=/^[0-9]*\.?[0-9]+$/,at=/\+/g,lt=/[-/\\^$*+?.()|[\]{}]/g,ct=/[\s\uFEFF\xA0]+/g,ut=/\s+/,dt=/\/\*$/,ht=/(\s|^)(\w)/g,ft=/^\s+/,pt=/_/g,mt=/-(\w)/g,vt=/^\d+-\d\d?-\d\d?(?:\s|T|$)/,bt=/-|\s|T/,gt=/^([0-1]?[0-9]|2[0-3]):[0-5]?[0-9](:[0-5]?[0-9])?$/,yt=/^.*(#[^#]+)$/,wt=/%2C/g,Tt=/[!'()*]/g,Ct=/^(\?|#|&)/,xt=/^\d+(\.\d*)?[/:]\d+(\.\d*)?$/,St=/[/:]/,kt=/^col-/,$t=/^BIcon/,Bt=/-u-.+/,Element=V?H.Element:function(t){u(Element,t);var e=g(Element);function Element(){return o(this,Element),e.apply(this,arguments)}return Element}(m(Object)),HTMLElement=V?H.HTMLElement:function(t){u(HTMLElement,t);var e=g(HTMLElement);function HTMLElement(){return o(this,HTMLElement),e.apply(this,arguments)}return HTMLElement}(Element),SVGElement=V?H.SVGElement:function(t){u(SVGElement,t);var e=g(SVGElement);function SVGElement(){return o(this,SVGElement),e.apply(this,arguments)}return SVGElement}(Element),_t=V?H.File:function(t){u(i,t);var e=g(i);function i(){return o(this,i),e.apply(this,arguments)}return i}(m(Object)),Dt=function(t){return n(t)},Ft=function(t){return void 0===t},It=function(t){return null===t},Pt=function(t){return Ft(t)||It(t)},Ot=function(t){return"function"===Dt(t)},Vt=function(t){return"boolean"===Dt(t)},Et=function(t){return"string"===Dt(t)},Lt=function(t){return"number"===Dt(t)},At=function(t){return st.test(String(t))},Rt=function(t){return Array.isArray(t)},Mt=function(t){return null!==t&&"object"===n(t)},Ht=function(t){return"[object Object]"===Object.prototype.toString.call(t)},zt=function(t){return t instanceof Date},Nt=function(t){return t instanceof Event},jt=function(t){return"RegExp"===function(t){return Object.prototype.toString.call(t).slice(8,-1)}(t)},Gt=function(){return Object.assign.apply(Object,arguments)},Wt=function(t,e){return Object.create(t,e)},Yt=function(t,e){return Object.defineProperties(t,e)},Ut=function(t,e,i){return Object.defineProperty(t,e,i)},qt=function(t){return Object.getOwnPropertyNames(t)},Kt=function(t){return Object.keys(t)},Xt=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},Zt=function(t){return c({},t)},Jt=function(t,e){return Kt(t).filter((function(t){return-1!==e.indexOf(t)})).reduce((function(e,i){return c(c({},e),{},a({},i,t[i]))}),{})},Qt=function(t,e){return Kt(t).filter((function(t){return-1===e.indexOf(t)})).reduce((function(e,i){return c(c({},e),{},a({},i,t[i]))}),{})},te=function t(e,i){return Mt(e)&&Mt(i)&&Kt(i).forEach((function(n){Mt(i[n])?(e[n]&&Mt(e[n])||(e[n]=i[n]),t(e[n],i[n])):Gt(e,a({},n,i[n]))})),e},ee=function(t){return Kt(t).sort().reduce((function(e,i){return c(c({},e),{},a({},i,t[i]))}),{})},ie=function t(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:e;return Rt(e)?e.reduce((function(e,i){return[].concat(T(e),[t(i,i)])}),[]):Ht(e)?Kt(e).reduce((function(i,n){return c(c({},i),{},a({},n,t(e[n],e[n])))}),{}):i},ne=function(t){return t},oe=function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;if(!(e=Rt(e)?e.join("."):e)||!Mt(t))return i;if(e in t)return t[e];var n=(e=String(e).replace(Z,".$1")).split(".").filter(ne);return 0===n.length?i:n.every((function(e){return Mt(t)&&e in t&&!Pt(t=t[e])}))?t:It(t)?null:i},re=function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=oe(t,e);return Pt(n)?i:n},se=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i="undefined"!=typeof process&&process&&process.env||{};return t?i[t]||e:i},ae=function(){return se("BOOTSTRAP_VUE_NO_WARN")||"production"===se("NODE_ENV")},le=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;ae()||console.warn("[BootstrapVue warn]: ".concat(e?"".concat(e," - "):"").concat(t))},ce=function(t){return!M&&(le("".concat(t,": Can not be called during SSR.")),!0)},ue=function(t){return!A&&(le("".concat(t,": Requires Promise support.")),!0)},de=function(){function t(){o(this,t),this.$_config={}}return s(t,[{key:"setConfig",value:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(Ht(e)){var i=qt(e);i.forEach((function(i){var n=e[i];"breakpoints"===i?!Rt(n)||n.length<2||n.some((function(t){return!Et(t)||0===t.length}))?le('"breakpoints" must be an array of at least 2 breakpoint names',K):t.$_config[i]=ie(n):Ht(n)&&(t.$_config[i]=qt(n).reduce((function(t,e){return Ft(n[e])||(t[e]=ie(n[e])),t}),t.$_config[i]||{}))}))}}},{key:"resetConfig",value:function(){this.$_config={}}},{key:"getConfig",value:function(){return ie(this.$_config)}},{key:"getConfigValue",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0;return ie(oe(this.$_config,t,e))}}]),t}(),he=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.default;e.prototype.$bvConfig=i.default.prototype.$bvConfig=e.prototype.$bvConfig||i.default.prototype.$bvConfig||new de,e.prototype.$bvConfig.setConfig(t)},fe=(I=!1,P=["Multiple instances of Vue detected!","You may need to set up an alias for Vue in your bundler config.","See: https://bootstrap-vue.org/docs#using-module-bundlers"].join("\n"),function(t){I||i.default===t||G||le(P),I=!0}),pe=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.components,i=t.directives,n=t.plugins,o=function t(o){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t.installed||(t.installed=!0,fe(o),he(r,o),ge(o,e),we(o,i),ve(o,n))};return o.installed=!1,o},me=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return c(c({},e),{},{install:pe(t)})},ve=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(var i in e)i&&e[i]&&t.use(e[i])},be=function(t,e,i){t&&e&&i&&t.component(e,i)},ge=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(var i in e)be(t,i,e[i])},ye=function(t,e,i){t&&e&&i&&t.directive(e.replace(/^VB/,"B"),i)},we=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};for(var i in e)ye(t,i,e[i])},Te="BAlert",Ce="BAspect",xe="BAvatar",Se="BAvatarGroup",ke="BBadge",$e="BBreadcrumb",Be="BBreadcrumbItem",_e="BBreadcrumbLink",De="BButton",Fe="BButtonClose",Ie="BButtonGroup",Pe="BButtonToolbar",Oe="BCalendar",Ve="BCard",Ee="BCardBody",Le="BCardFooter",Ae="BCardGroup",Re="BCardHeader",Me="BCardImg",He="BCardImgLazy",ze="BCardSubTitle",Ne="BCardText",je="BCardTitle",Ge="BCarousel",We="BCarouselSlide",Ye="BCol",Ue="BCollapse",qe="BContainer",Ke="BDropdown",Xe="BDropdownDivider",Ze="BDropdownForm",Je="BDropdownGroup",Qe="BDropdownHeader",ti="BDropdownItem",ei="BDropdownItemButton",ii="BDropdownText",ni="BEmbed",oi="BForm",ri="BFormCheckbox",si="BFormCheckboxGroup",ai="BFormDatalist",li="BFormDatepicker",ci="BFormFile",ui="BFormGroup",di="BFormInput",hi="BFormInvalidFeedback",fi="BFormRadio",pi="BFormRadioGroup",mi="BFormRating",vi="BFormRow",bi="BFormSelect",gi="BFormSelectOption",yi="BFormSelectOptionGroup",wi="BFormSpinbutton",Ti="BFormTag",Ci="BFormTags",xi="BFormText",Si="BFormTextarea",ki="BFormTimepicker",$i="BFormValidFeedback",Bi="BIcon",_i="BImg",Di="BImgLazy",Fi="BInputGroup",Ii="BInputGroupAddon",Pi="BInputGroupAppend",Oi="BInputGroupPrepend",Vi="BInputGroupText",Ei="BJumbotron",Li="BLink",Ai="BListGroup",Ri="BListGroupItem",Mi="BMedia",Hi="BMediaAside",zi="BMediaBody",Ni="BModal",ji="BNav",Gi="BNavbar",Wi="BNavbarBrand",Yi="BNavbarNav",Ui="BNavbarToggle",qi="BNavForm",Ki="BNavItem",Xi="BNavItemDropdown",Zi="BOverlay",Ji="BPagination",Qi="BPaginationNav",tn="BPopover",en="BProgress",nn="BProgressBar",on="BRow",rn="BSidebar",sn="BSkeleton",an="BSkeletonIcon",ln="BSkeletonImg",cn="BSkeletonTable",un="BSkeletonWrapper",dn="BSpinner",hn="BTab",fn="BTable",pn="BTableCell",mn="BTableLite",vn="BTableSimple",bn="BTabs",gn="BTbody",yn="BTfoot",wn="BThead",Tn="BTime",Cn="BToast",xn="BToaster",Sn="BTooltip",kn="cancel",$n="change",Bn="click",_n="close",Dn="context",Fn="context-changed",In="destroyed",Pn="disable",On="disabled",Vn="enable",En="enabled",Ln="filtered",An="first",Rn="focusin",Mn="focusout",Hn="head-clicked",zn="hidden",Nn="hide",jn="input",Gn="last",Wn="mouseenter",Yn="mouseleave",Un="next",qn="open",Kn="page-click",Xn="prev",Zn="refreshed",Jn="row-clicked",Qn="selected",to="show",eo="shown",io="sliding-end",no="toggle",oo="hook:beforeDestroy",ro="hook:destroyed",so="bv",ao={passive:!0},lo={passive:!0,capture:!1},co=void 0,uo=Array,ho=Boolean,fo=Date,po=Function,mo=Number,vo=Object,bo=RegExp,go=String,yo=[uo,po],wo=[uo,vo],To=[uo,vo,go],Co=[uo,go],xo=[ho,mo],So=[ho,mo,go],ko=[ho,go],$o=[fo,go],Bo=[po,go],_o=[mo,go],Do=[mo,vo,go],Fo=[vo,po],Io=[vo,go],Po="append",Oo="badge",Vo="bottom-row",Eo="button-content",Lo="custom-foot",Ao="default",Ro="empty",Mo="file-name",Ho="first",zo="footer",No="header",jo="label",Go="lead",Wo="modal-cancel",Yo="modal-ok",Uo="modal-title",qo="prepend",Ko="row-details",Xo="table-busy",Zo="table-caption",Jo="table-colgroup",Qo="thead-top",tr="title",er="top-row",ir=function(){return Array.from.apply(Array,arguments)},nr=function(t,e){return-1!==t.indexOf(e)},or=function(){for(var t=arguments.length,e=new Array(t),i=0;i1&&void 0!==arguments[1]?arguments[1]:NaN,i=parseInt(t,10);return isNaN(i)?e:i},cr=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:NaN,i=parseFloat(t);return isNaN(i)?e:i},ur=function(t,e){return cr(t).toFixed(lr(e,0))},dr=function(t){return t.replace(ot,"-$1").toLowerCase()},hr=function(t){return(t=dr(t).replace(mt,(function(t,e){return e?e.toUpperCase():""}))).charAt(0).toUpperCase()+t.slice(1)},fr=function(t){return t.replace(pt," ").replace(rt,(function(t,e,i){return e+" "+i})).replace(ht,(function(t,e,i){return e+i.toUpperCase()}))},pr=function(t){return(t=Et(t)?t.trim():String(t)).charAt(0).toUpperCase()+t.slice(1)},mr=function(t){return t.replace(lt,"\\$&")},vr=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return Pt(t)?"":Rt(t)||Ht(t)&&t.toString===Object.prototype.toString?JSON.stringify(t,null,e):String(t)},br=function(t){return vr(t).trim()},gr=function(t){return vr(t).toLowerCase()},yr=Element.prototype,wr=["button","[href]:not(.disabled)","input","select","textarea","[tabindex]","[contenteditable]"].map((function(t){return"".concat(t,":not(:disabled):not([disabled])")})).join(", "),Tr=yr.matches||yr.msMatchesSelector||yr.webkitMatchesSelector,Cr=yr.closest||function(t){var e=this;do{if(Vr(e,t))return e;e=e.parentElement||e.parentNode}while(!It(e)&&e.nodeType===Node.ELEMENT_NODE);return null},xr=H.requestAnimationFrame||H.webkitRequestAnimationFrame||H.mozRequestAnimationFrame||H.msRequestAnimationFrame||H.oRequestAnimationFrame||function(t){return setTimeout(t,16)},Sr=H.MutationObserver||H.WebKitMutationObserver||H.MozMutationObserver||null,kr=function(t){return!(!t||t.nodeType!==Node.ELEMENT_NODE)},$r=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=z.activeElement;return e&&!t.some((function(t){return t===e}))?e:null},Br=function(t,e){return vr(t).toLowerCase()===vr(e).toLowerCase()},_r=function(t){return kr(t)&&t===$r()},Dr=function(t){if(!kr(t)||!t.parentNode||!Lr(z.body,t))return!1;if("none"===Ur(t,"display"))return!1;var e=qr(t);return!!(e&&e.height>0&&e.width>0)},Fr=function(t){return!kr(t)||t.disabled||Gr(t,"disabled")||Hr(t,"disabled")},Ir=function(t){return kr(t)&&t.offsetHeight},Pr=function(t,e){return ir((kr(e)?e:z).querySelectorAll(t))},Or=function(t,e){return(kr(e)?e:z).querySelector(t)||null},Vr=function(t,e){return!!kr(t)&&Tr.call(t,e)},Er=function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!kr(e))return null;var n=Cr.call(e,t);return i?n:n===e?null:n},Lr=function(t,e){return!(!t||!Ot(t.contains))&&t.contains(e)},Ar=function(t){return z.getElementById(/^#/.test(t)?t.slice(1):t)||null},Rr=function(t,e){e&&kr(t)&&t.classList&&t.classList.add(e)},Mr=function(t,e){e&&kr(t)&&t.classList&&t.classList.remove(e)},Hr=function(t,e){return!!(e&&kr(t)&&t.classList)&&t.classList.contains(e)},zr=function(t,e,i){e&&kr(t)&&t.setAttribute(e,i)},Nr=function(t,e){e&&kr(t)&&t.removeAttribute(e)},jr=function(t,e){return e&&kr(t)?t.getAttribute(e):null},Gr=function(t,e){return e&&kr(t)?t.hasAttribute(e):null},Wr=function(t,e,i){e&&kr(t)&&(t.style[e]=i)},Yr=function(t,e){e&&kr(t)&&(t.style[e]="")},Ur=function(t,e){return e&&kr(t)&&t.style[e]||null},qr=function(t){return kr(t)?t.getBoundingClientRect():null},Kr=function(t){var e=H.getComputedStyle;return e&&kr(t)?e(t):{}},Xr=function(){return H.getSelection?H.getSelection():null},Zr=function(t){var e={top:0,left:0};if(!kr(t)||0===t.getClientRects().length)return e;var i=qr(t);if(i){var n=t.ownerDocument.defaultView;e.top=i.top+n.pageYOffset,e.left=i.left+n.pageXOffset}return e},Jr=function(t){var e={top:0,left:0};if(!kr(t))return e;var i={top:0,left:0},n=Kr(t);if("fixed"===n.position)e=qr(t)||e;else{e=Zr(t);for(var o=t.ownerDocument,r=t.offsetParent||o.documentElement;r&&(r===o.body||r===o.documentElement)&&"static"===Kr(r).position;)r=r.parentNode;if(r&&r!==t&&r.nodeType===Node.ELEMENT_NODE){i=Zr(r);var s=Kr(r);i.top+=cr(s.borderTopWidth,0),i.left+=cr(s.borderLeftWidth,0)}}return{top:e.top-i.top-cr(n.marginTop,0),left:e.left-i.left-cr(n.marginLeft,0)}},Qr=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document;return Pr(wr,t).filter(Dr).filter((function(t){return t.tabIndex>-1&&!t.disabled}))},ts=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};try{t.focus(e)}catch(t){}return _r(t)},es=function(t){try{t.blur()}catch(t){}return!_r(t)},is=function(t){var e=Wt(null);return function(){for(var i=arguments.length,n=new Array(i),o=0;o1&&void 0!==arguments[1]?arguments[1]:void 0,i=ns.$bvConfig;return i?i.getConfigValue(t,e):ie(e)},rs=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0;return e?os("".concat(t,".").concat(e),i):os(t,{})},ss=function(){return os("breakpoints",X)},as=is((function(){return ss()})),ls=is((function(){var t=ie(as());return t[0]="",t})),cs=function(t,e){return t+pr(e)},us=function(t,e){return i=e.replace(t,""),(i=Et(i)?i.trim():String(i)).charAt(0).toLowerCase()+i.slice(1);var i},ds=function(t,e){return e+(t?pr(t):"")},hs=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:co,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0,o=!0===i;return n=o?n:i,c(c(c({},t?{type:t}:{}),o?{required:o}:Ft(e)?{}:{default:Mt(e)?function(){return e}:e}),Ft(n)?{}:{validator:n})},fs=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ne;if(Rt(t))return t.map(e);var i={};for(var n in t)Xt(t,n)&&(i[e(n)]=Mt(t[n])?Zt(t[n]):t[n]);return i},ps=function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:ne;return(Rt(t)?t.slice():Kt(t)).reduce((function(t,n){return t[i(n)]=e[n],t}),{})},ms=function(t,e,i){return c(c({},ie(t)),{},{default:function(){var n=rs(i,e,t.default);return Ot(n)?n():n}})},vs=function(t,e){return Kt(t).reduce((function(i,n){return c(c({},i),{},a({},n,ms(t[n],n,e)))}),{})},bs=ms({},"","").default.name,gs=function(t){return Ot(t)&&t.name!==bs},ys=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.type,o=void 0===n?co:n,r=e.defaultValue,s=void 0===r?void 0:r,l=e.validator,c=void 0===l?void 0:l,u=e.event,d=void 0===u?jn:u,h=a({},t,hs(o,s,c)),f=i.default.extend({model:{prop:t,event:d},props:h});return{mixin:f,props:h,prop:t,event:d}},ws=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return(t=or(t).filter(ne)).some((function(t){return e[t]||i[t]}))},Ts=function(t){var e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};t=or(t).filter(ne);for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:Ao,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.$scopedSlots,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.$slots;return ws(t,e,i)},normalizeSlot:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Ao,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:this.$scopedSlots,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:this.$slots,o=Ts(t,e,i,n);return o?or(o):o}}}),xs=function(t){return W?Mt(t)?t:{capture:!!t||!1}:!!(Mt(t)?t.capture:t)},Ss=function(t,e,i,n){t&&t.addEventListener&&t.addEventListener(e,i,xs(n))},ks=function(t,e,i,n){t&&t.removeEventListener&&t.removeEventListener(e,i,xs(n))},$s=function(t){for(var e=t?Ss:ks,i=arguments.length,n=new Array(i>1?i-1:0),o=1;o1&&void 0!==arguments[1]?arguments[1]:{},i=e.preventDefault,n=void 0===i||i,o=e.propagation,r=void 0===o||o,s=e.immediatePropagation,a=void 0!==s&&s;n&&t.preventDefault(),r&&t.stopPropagation(),a&&t.stopImmediatePropagation()},_s=function(t){return dr(t.replace(J,""))},Ds=function(t,e){return[so,_s(t),e].join("::")},Fs=function(t,e){return[so,e,_s(t)].join("::")},Is=vs({ariaLabel:hs(go,"Close"),content:hs(go,"×"),disabled:hs(ho,!1),textVariant:hs(go)},Fe),Ps=i.default.extend({name:Fe,functional:!0,props:Is,render:function(t,e){var i=e.props,n=e.data,o=e.slots,r=e.scopedSlots,s=o(),l=r||{},c={staticClass:"close",class:a({},"text-".concat(i.textVariant),i.textVariant),attrs:{type:"button",disabled:i.disabled,"aria-label":i.ariaLabel?String(i.ariaLabel):null},on:{click:function(t){i.disabled&&Nt(t)&&Bs(t)}}};return ws(Ao,l,s)||(c.domProps={innerHTML:i.content}),t("button",F(n,c),Ts(Ao,{},l,s))}}),Os={name:"",enterClass:"",enterActiveClass:"",enterToClass:"show",leaveClass:"show",leaveActiveClass:"",leaveToClass:""},Vs=c(c({},Os),{},{enterActiveClass:"fade",leaveActiveClass:"fade"}),Es={appear:hs(ho,!1),mode:hs(go),noFade:hs(ho,!1),transProps:hs(vo)},Ls=i.default.extend({name:"BVTransition",functional:!0,props:Es,render:function(t,e){var i=e.children,n=e.data,o=e.props,r=o.transProps;return Ht(r)||(r=o.noFade?Os:Vs,o.appear&&(r=c(c({},r),{},{appear:!0,appearClass:r.enterClass,appearActiveClass:r.enterActiveClass,appearToClass:r.enterToClass}))),t("transition",F(n,{props:r=c(c({mode:o.mode},r),{},{css:!0})}),i)}}),As=ys("show",{type:So,defaultValue:!1}),Rs=As.mixin,Ms=As.props,Hs=As.prop,zs=As.event,Ns=function(t){return""===t||Vt(t)?0:(t=lr(t,0))>0?t:0},js=function(t){return""===t||!0===t||!(lr(t,0)<1)&&!!t},Gs=vs(ee(c(c({},Ms),{},{dismissLabel:hs(go,"Close"),dismissible:hs(ho,!1),fade:hs(ho,!1),variant:hs(go,"info")})),Te),Ws=me({components:{BAlert:i.default.extend({name:Te,mixins:[Rs,Cs],props:Gs,data:function(){return{countDown:0,localShow:js(this[Hs])}},watch:(O={},a(O,Hs,(function(t){this.countDown=Ns(t),this.localShow=js(t)})),a(O,"countDown",(function(t){var e=this;this.clearCountDownInterval();var i=this[Hs];At(i)&&(this.$emit("dismiss-count-down",t),i!==t&&this.$emit(zs,t),t>0?(this.localShow=!0,this.$_countDownTimeout=setTimeout((function(){e.countDown--}),1e3)):this.$nextTick((function(){xr((function(){e.localShow=!1}))})))})),a(O,"localShow",(function(t){var e=this[Hs];t||!this.dismissible&&!At(e)||this.$emit("dismissed"),At(e)||e===t||this.$emit(zs,t)})),O),created:function(){this.$_filterTimer=null;var t=this[Hs];this.countDown=Ns(t),this.localShow=js(t)},beforeDestroy:function(){this.clearCountDownInterval()},methods:{dismiss:function(){this.clearCountDownInterval(),this.countDown=0,this.localShow=!1},clearCountDownInterval:function(){clearTimeout(this.$_countDownTimeout),this.$_countDownTimeout=null}},render:function(t){var e=t();if(this.localShow){var i=this.dismissible,n=this.variant,o=t();i&&(o=t(Ps,{attrs:{"aria-label":this.dismissLabel},on:{click:this.dismiss}},[this.normalizeSlot("dismiss")])),e=t("div",{staticClass:"alert",class:a({"alert-dismissible":i},"alert-".concat(n),n),attrs:{role:"alert","aria-live":"polite","aria-atomic":!0},key:this._uid},[o,this.normalizeSlot()])}return t(Ls,{props:{noFade:!this.fade}},[e])}})}}),Ys=Math.min,Us=Math.max,qs=Math.abs,Ks=Math.ceil,Xs=Math.floor,Zs=Math.pow,Js=Math.round,Qs="b-aspect",ta=vs({aspect:hs(_o,"1:1"),tag:hs(go,"div")},Ce),ea=i.default.extend({name:Ce,mixins:[Cs],props:ta,computed:{padding:function(){var t=this.aspect,e=1;if(xt.test(t)){var i=w(t.split(St).map((function(t){return cr(t)||1})),2);e=i[0]/i[1]}else e=cr(t)||1;return"".concat(100/qs(e),"%")}},render:function(t){var e=t("div",{staticClass:"".concat(Qs,"-sizer flex-grow-1"),style:{paddingBottom:this.padding,height:0}}),i=t("div",{staticClass:"".concat(Qs,"-content flex-grow-1 w-100 mw-100"),style:{marginLeft:"-100%"}},this.normalizeSlot());return t(this.tag,{staticClass:"".concat(Qs," d-flex")},[e,i])}}),ia=me({components:{BAspect:ea}}),na=function(t){return"%"+t.charCodeAt(0).toString(16)},oa=function(t){return encodeURIComponent(vr(t)).replace(Tt,na).replace(wt,",")},ra=decodeURIComponent,sa=function(t){if(!Ht(t))return"";var e=Kt(t).map((function(e){var i=t[e];return Ft(i)?"":It(i)?oa(e):Rt(i)?i.reduce((function(t,i){return It(i)?t.push(oa(e)):Ft(i)||t.push(oa(e)+"="+oa(i)),t}),[]).join("&"):oa(e)+"="+oa(i)})).filter((function(t){return t.length>0})).join("&");return e?"?".concat(e):""},aa=function(t){var e={};return(t=vr(t).trim().replace(Ct,""))?(t.split("&").forEach((function(t){var i=t.replace(at," ").split("="),n=ra(i.shift()),o=i.length>0?ra(i.join("=")):null;Ft(e[n])?e[n]=o:Rt(e[n])?e[n].push(o):e[n]=[e[n],o]})),e):e},la=function(t){return!(!t.href&&!t.to)},ca=function(t){return!(!t||Br(t,"a"))},ua=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.href,i=t.to,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"a",o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"#",r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"/";if(e)return e;if(ca(n))return null;if(Et(i))return i||r;if(Ht(i)&&(i.path||i.query||i.hash)){var s=vr(i.path),a=sa(i.query),l=vr(i.hash);return l=l&&"#"!==l.charAt(0)?"#".concat(l):l,"".concat(s).concat(a).concat(l)||r}return o},da={viewBox:"0 0 16 16",width:"1em",height:"1em",focusable:"false",role:"img","aria-label":"icon"},ha={width:null,height:null,focusable:null,role:null,"aria-label":null},fa={animation:hs(go),content:hs(go),flipH:hs(ho,!1),flipV:hs(ho,!1),fontScale:hs(_o,1),rotate:hs(_o,0),scale:hs(_o,1),shiftH:hs(_o,0),shiftV:hs(_o,0),stacked:hs(ho,!1),title:hs(go),variant:hs(go)},pa=i.default.extend({name:"BIconBase",functional:!0,props:fa,render:function(t,e){var i,n=e.data,o=e.props,r=e.children,s=o.animation,l=o.content,c=o.flipH,u=o.flipV,d=o.stacked,h=o.title,f=o.variant,p=Us(cr(o.fontScale,1),0)||1,m=Us(cr(o.scale,1),0)||1,v=cr(o.rotate,0),b=cr(o.shiftH,0),g=cr(o.shiftV,0),y=c||u||1!==m,w=y||v,T=b||g,C=!Pt(l),x=t("g",{attrs:{transform:[w?"translate(8 8)":null,y?"scale(".concat((c?-1:1)*m," ").concat((u?-1:1)*m,")"):null,v?"rotate(".concat(v,")"):null,w?"translate(-8 -8)":null].filter(ne).join(" ")||null},domProps:C?{innerHTML:l||""}:{}},r);T&&(x=t("g",{attrs:{transform:"translate(".concat(16*b/16," ").concat(-16*g/16,")")}},[x])),d&&(x=t("g",[x]));var S=[h?t("title",h):null,x].filter(ne);return t("svg",F({staticClass:"b-icon bi",class:(i={},a(i,"text-".concat(f),f),a(i,"b-icon-animation-".concat(s),s),i),attrs:da,style:d?{}:{fontSize:1===p?null:"".concat(100*p,"%")}},n,d?{attrs:ha}:{},{attrs:{xmlns:d?null:"http://www.w3.org/2000/svg",fill:"currentColor"}}),S)}}),ma=function(t,e){var n=dr(t),o="BIcon".concat(hr(t)),r="bi-".concat(n),s=n.replace(/-/g," "),a=br(e||"");return i.default.extend({name:o,functional:!0,props:Qt(fa,["content"]),render:function(t,e){var i=e.data,n=e.props;return t(pa,F({props:{title:s},attrs:{"aria-label":s}},i,{staticClass:r,props:c(c({},n),{},{content:a})}))}})},va=ma("Blank",""),ba=ma("Calendar",''),ga=ma("CalendarFill",''),ya=ma("ChevronBarLeft",''),wa=ma("ChevronDoubleLeft",''),Ta=ma("ChevronDown",''),Ca=ma("ChevronLeft",''),xa=ma("ChevronUp",''),Sa=ma("CircleFill",''),ka=ma("Clock",''),$a=ma("ClockFill",''),Ba=ma("Dash",''),_a=ma("PersonFill",''),Da=ma("Plus",''),Fa=ma("Star",''),Ia=ma("StarFill",''),Pa=ma("StarHalf",''),Oa=ma("X",''),Va=function t(e,i){return e?(e.$options||{}).components[i]||t(e.$parent,i):null},Ea=Qt(fa,["content"]),La=vs(ee(c(c({},Ea),{},{icon:hs(go)})),Bi),Aa=i.default.extend({name:Bi,functional:!0,props:La,render:function(t,e){var i=e.data,n=e.props,o=e.parent,r=hr(br(n.icon||"")).replace($t,"");return t(r&&Va(o,"BIcon".concat(r))||va,F(i,{props:ps(Ea,n)}))}}),Ra=40,Ma=35,Ha=13,za=36,Na=37,ja=39,Ga=32,Wa=38,Ya=function(t,e){if(t.length!==e.length)return!1;for(var i=!0,n=0;i&&n1?i-1:0),o=1;o0&&void 0!==arguments[0]?arguments[0]:{},e=t.target,i=t.rel;return"_blank"===e&&It(i)?"noopener":i||null}({target:this.target,rel:this.rel})},computedHref:function(){var t=this.to,e=this.href;return ua({to:t,href:e},this.computedTag)},computedProps:function(){var t=this.prefetch;return this.isRouterLink?c(c({},ps(c(c({},el),il),this)),{},{prefetch:Vt(t)?t:void 0,tag:this.routerTag}):{}},computedAttrs:function(){var t=this.bvAttrs,e=this.computedHref,i=this.computedRel,n=this.disabled,o=this.target,r=this.routerTag,s=this.isRouterLink;return c(c(c(c({},t),e?{href:e}:{}),s&&!Br(r,"a")?{}:{rel:i,target:o}),{},{tabindex:n?"-1":Ft(t.tabindex)?null:t.tabindex,"aria-disabled":n?"true":null})},computedListeners:function(){return c(c({},this.bvListeners),{},{click:this.onClick})}},methods:{onClick:function(t){var e=arguments,i=Nt(t),n=this.isRouterLink,o=this.bvListeners.click;i&&this.disabled?Bs(t,{immediatePropagation:!0}):(n&&t.currentTarget.__vue__&&t.currentTarget.__vue__.$emit(Bn,t),or(o).filter((function(t){return Ot(t)})).forEach((function(t){t.apply(void 0,T(e))})),this.emitOnRoot(tl,t),this.emitOnRoot("clicked::link",t)),i&&!n&&"#"===this.computedHref&&Bs(t,{propagation:!1})},focus:function(){ts(this.$el)},blur:function(){es(this.$el)}},render:function(t){var e=this.active,i=this.disabled;return t(this.computedTag,a({class:{active:e,disabled:i},attrs:this.computedAttrs,props:this.computedProps},this.isRouterLink?"nativeOn":"on",this.computedListeners),this.normalizeSlot())}}),rl=Qt(nl,["event","routerTag"]);delete rl.href.default,delete rl.to.default;var sl=vs(ee(c(c({},rl),{},{block:hs(ho,!1),disabled:hs(ho,!1),pill:hs(ho,!1),pressed:hs(ho,null),size:hs(go),squared:hs(ho,!1),tag:hs(go,"button"),type:hs(go,"button"),variant:hs(go,"secondary")})),De),al=function(t){"focusin"===t.type?Rr(t.target,"focus"):"focusout"===t.type&&Mr(t.target,"focus")},ll=function(t){return la(t)||Br(t.tag,"a")},cl=function(t){return Vt(t.pressed)},ul=function(t){return!(ll(t)||t.tag&&!Br(t.tag,"button"))},dl=function(t){return!ll(t)&&!ul(t)},hl=function(t){var e;return["btn-".concat(t.variant||"secondary"),(e={},a(e,"btn-".concat(t.size),t.size),a(e,"btn-block",t.block),a(e,"rounded-pill",t.pill),a(e,"rounded-0",t.squared&&!t.pill),a(e,"disabled",t.disabled),a(e,"active",t.pressed),e)]},fl=function(t){return ll(t)?ps(rl,t):{}},pl=function(t,e){var i=ul(t),n=ll(t),o=cl(t),r=dl(t),s=n&&"#"===t.href,a=e.attrs&&e.attrs.role?e.attrs.role:null,l=e.attrs?e.attrs.tabindex:null;return(r||s)&&(l="0"),{type:i&&!n?t.type:null,disabled:i?t.disabled:null,role:r||s?"button":a,"aria-disabled":r?String(t.disabled):null,"aria-pressed":o?String(t.pressed):null,autocomplete:o?"off":null,tabindex:t.disabled&&!i?"-1":l}},ml=i.default.extend({name:De,functional:!0,props:sl,render:function(t,e){var i=e.props,n=e.data,o=e.listeners,r=e.children,s=cl(i),a=ll(i),l=dl(i),c=a&&"#"===i.href,u={keydown:function(t){if(!i.disabled&&(l||c)){var e=t.keyCode;if(e===Ga||e===Ha&&l){var n=t.currentTarget||t.target;Bs(t,{propagation:!1}),n.click()}}},click:function(t){i.disabled&&Nt(t)?Bs(t):s&&o&&o["update:pressed"]&&or(o["update:pressed"]).forEach((function(t){Ot(t)&&t(!i.pressed)}))}};s&&(u.focusin=al,u.focusout=al);var d={staticClass:"btn",class:hl(i),props:fl(i),attrs:pl(i,n),on:u};return t(a?ol:i.tag,F(n,d),r)}}),vl="b-avatar",bl=["sm",null,"lg"],gl=function(t){return t=Et(t)&&At(t)?cr(t,0):t,Lt(t)?"".concat(t,"px"):t||null},yl=Qt(nl,["active","event","routerTag"]),wl=vs(ee(c(c({},yl),{},{alt:hs(go,"avatar"),ariaLabel:hs(go),badge:hs(ko,!1),badgeLeft:hs(ho,!1),badgeOffset:hs(go),badgeTop:hs(ho,!1),badgeVariant:hs(go,"primary"),button:hs(ho,!1),buttonType:hs(go,"button"),icon:hs(go),rounded:hs(ko,!1),size:hs(_o),square:hs(ho,!1),src:hs(go),text:hs(go),variant:hs(go,"secondary")})),xe),Tl=i.default.extend({name:xe,mixins:[Cs],inject:{bvAvatarGroup:{default:null}},props:wl,data:function(){return{localSrc:this.src||null}},computed:{computedSize:function(){var t=this.bvAvatarGroup;return gl(t?t.size:this.size)},computedVariant:function(){var t=this.bvAvatarGroup;return t&&t.variant?t.variant:this.variant},computedRounded:function(){var t=this.bvAvatarGroup,e=!(!t||!t.square)||this.square,i=t&&t.rounded?t.rounded:this.rounded;return e?"0":""===i||(i||"circle")},fontStyle:function(){var t=this.computedSize,e=-1===bl.indexOf(t)?"calc(".concat(t," * ").concat(.4,")"):null;return e?{fontSize:e}:{}},marginStyle:function(){var t=this.computedSize,e=this.bvAvatarGroup,i=e?e.overlapScale:0,n=t&&i?"calc(".concat(t," * -").concat(i,")"):null;return n?{marginLeft:n,marginRight:n}:{}},badgeStyle:function(){var t=this.computedSize,e=this.badgeTop,i=this.badgeLeft,n=this.badgeOffset||"0px";return{fontSize:-1===bl.indexOf(t)?"calc(".concat(t," * ").concat(.27999999999999997," )"):null,top:e?n:null,bottom:e?null:n,left:i?n:null,right:i?null:n}}},watch:{src:function(t,e){t!==e&&(this.localSrc=t||null)}},methods:{onImgError:function(t){this.localSrc=null,this.$emit("img-error",t)},onClick:function(t){this.$emit(Bn,t)}},render:function(t){var e,i=this.computedVariant,n=this.disabled,o=this.computedRounded,r=this.icon,s=this.localSrc,l=this.text,u=this.fontStyle,d=this.marginStyle,h=this.computedSize,f=this.button,p=this.buttonType,m=this.badge,v=this.badgeVariant,b=this.badgeStyle,g=!f&&la(this),y=f?ml:g?ol:"span",w=this.alt,T=this.ariaLabel||null,C=null;this.hasNormalizedSlot()?C=t("span",{staticClass:"b-avatar-custom"},[this.normalizeSlot()]):s?(C=t("img",{style:i?{}:{width:"100%",height:"100%"},attrs:{src:s,alt:w},on:{error:this.onImgError}}),C=t("span",{staticClass:"b-avatar-img"},[C])):C=r?t(Aa,{props:{icon:r},attrs:{"aria-hidden":"true",alt:w}}):l?t("span",{staticClass:"b-avatar-text",style:u},[t("span",l)]):t(_a,{attrs:{"aria-hidden":"true",alt:w}});var x=t(),S=this.hasNormalizedSlot(Oo);if(m||""===m||S){var k=!0===m?"":m;x=t("span",{staticClass:"b-avatar-badge",class:a({},"badge-".concat(v),v),style:b},[S?this.normalizeSlot(Oo):k])}return t(y,{staticClass:vl,class:(e={},a(e,"".concat(vl,"-").concat(h),h&&-1!==bl.indexOf(h)),a(e,"badge-".concat(i),!f&&i),a(e,"rounded",!0===o),a(e,"rounded-".concat(o),o&&!0!==o),a(e,"disabled",n),e),style:c(c({},d),{},{width:h,height:h}),attrs:{"aria-label":T||null},props:f?{variant:i,disabled:n,type:p}:g?ps(yl,this):{},on:f||g?{click:this.onClick}:{}},[C,x])}}),Cl=vs({overlap:hs(_o,.3),rounded:hs(ko,!1),size:hs(go),square:hs(ho,!1),tag:hs(go,"div"),variant:hs(go)},Se),xl=me({components:{BAvatar:Tl,BAvatarGroup:i.default.extend({name:Se,mixins:[Cs],provide:function(){return{bvAvatarGroup:this}},props:Cl,computed:{computedSize:function(){return gl(this.size)},overlapScale:function(){return Ys(Us(cr(this.overlap,0),0),1)/2},paddingStyle:function(){var t=this.computedSize;return(t=t?"calc(".concat(t," * ").concat(this.overlapScale,")"):null)?{paddingLeft:t,paddingRight:t}:{}}},render:function(t){var e=t("div",{staticClass:"b-avatar-group-inner",style:this.paddingStyle},this.normalizeSlot());return t(this.tag,{staticClass:"b-avatar-group",attrs:{role:"group"}},[e])}})}}),Sl=Qt(nl,["event","routerTag"]);delete Sl.href.default,delete Sl.to.default;var kl,$l=vs(ee(c(c({},Sl),{},{pill:hs(ho,!1),tag:hs(go,"span"),variant:hs(go,"secondary")})),ke),Bl=i.default.extend({name:ke,functional:!0,props:$l,render:function(t,e){var i=e.props,n=e.data,o=e.children,r=i.active,s=i.disabled,a=la(i),l=a?ol:i.tag,c=i.variant||"secondary";return t(l,F(n,{staticClass:"badge",class:["badge-".concat(c),{"badge-pill":i.pill,active:r,disabled:s}],props:a?ps(Sl,i):{}}),o)}}),_l=me({components:{BBadge:Bl}}),Dl=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return String(t).replace(nt,"")},Fl=function(t,e){return t?{innerHTML:t}:e?{textContent:e}:{}},Il=vs(ee(c(c({},Qt(nl,["event","routerTag"])),{},{ariaCurrent:hs(go,"location"),html:hs(go),text:hs(go)})),_e),Pl=i.default.extend({name:_e,functional:!0,props:Il,render:function(t,e){var i=e.props,n=e.data,o=e.children,r=i.active,s=r?"span":ol,a={attrs:{"aria-current":r?i.ariaCurrent:null},props:ps(Il,i)};return o||(a.domProps=Fl(i.html,i.text)),t(s,F(n,a),o)}}),Ol=vs(Il,Be),Vl=i.default.extend({name:Be,functional:!0,props:Ol,render:function(t,e){var i=e.props,n=e.data,o=e.children;return t("li",F(n,{staticClass:"breadcrumb-item",class:{active:i.active}}),[t(Pl,{props:i},o)])}}),El=vs({items:hs(uo)},$e),Ll=me({components:{BBreadcrumb:i.default.extend({name:$e,functional:!0,props:El,render:function(t,e){var i=e.props,n=e.data,o=e.children,r=i.items,s=o;if(Rt(r)){var a=!1;s=r.map((function(e,i){Mt(e)||(e={text:vr(e)});var n=e.active;return n&&(a=!0),n||a||(n=i+1===r.length),t(Vl,{props:c(c({},e),{},{active:n})})}))}return t("ol",F(n,{staticClass:"breadcrumb"}),s)}}),BBreadcrumbItem:Vl,BBreadcrumbLink:Pl}}),Al=me({components:{BButton:ml,BBtn:ml,BButtonClose:Ps,BBtnClose:Ps}}),Rl=vs(ee(c(c({},Jt(sl,["size"])),{},{ariaRole:hs(go,"group"),size:hs(go),tag:hs(go,"div"),vertical:hs(ho,!1)})),Ie),Ml=i.default.extend({name:Ie,functional:!0,props:Rl,render:function(t,e){var i=e.props,n=e.data,o=e.children;return t(i.tag,F(n,{class:a({"btn-group":!i.vertical,"btn-group-vertical":i.vertical},"btn-group-".concat(i.size),i.size),attrs:{role:i.ariaRole}}),o)}}),Hl=me({components:{BButtonGroup:Ml,BBtnGroup:Ml}}),zl=[".btn:not(.disabled):not([disabled]):not(.dropdown-item)",".form-control:not(.disabled):not([disabled])","select:not(.disabled):not([disabled])",'input[type="checkbox"]:not(.disabled)','input[type="radio"]:not(.disabled)'].join(","),Nl=vs({justify:hs(ho,!1),keyNav:hs(ho,!1)},Pe),jl=i.default.extend({name:Pe,mixins:[Cs],props:Nl,mounted:function(){this.keyNav&&this.getItems()},methods:{getItems:function(){var t=Pr(zl,this.$el);return t.forEach((function(t){t.tabIndex=-1})),t.filter((function(t){return Dr(t)}))},focusFirst:function(){var t=this.getItems();ts(t[0])},focusPrev:function(t){var e=this.getItems(),i=e.indexOf(t.target);i>-1&&(e=e.slice(0,i).reverse(),ts(e[0]))},focusNext:function(t){var e=this.getItems(),i=e.indexOf(t.target);i>-1&&(e=e.slice(i+1),ts(e[0]))},focusLast:function(){var t=this.getItems().reverse();ts(t[0])},onFocusin:function(t){var e=this.$el;t.target!==e||Lr(e,t.relatedTarget)||(Bs(t),this.focusFirst(t))},onKeydown:function(t){var e=t.keyCode,i=t.shiftKey;e===Wa||e===Na?(Bs(t),i?this.focusFirst(t):this.focusPrev(t)):e!==Ra&&e!==ja||(Bs(t),i?this.focusLast(t):this.focusNext(t))}},render:function(t){var e=this.keyNav;return t("div",{staticClass:"btn-toolbar",class:{"justify-content-between":this.justify},attrs:{role:"toolbar",tabindex:e?"0":null},on:e?{focusin:this.onFocusin,keydown:this.onKeydown}:{}},[this.normalizeSlot()])}}),Gl=me({components:{BButtonToolbar:jl,BBtnToolbar:jl}}),Wl="gregory",Yl="long",Ul="short",ql="2-digit",Kl="numeric",Xl=function(){for(var t=arguments.length,e=new Array(t),i=0;i1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return t=Zl(t),e=Zl(e)||t,i=Zl(i)||t,t?ti?i:t:null},dc=["ar","az","ckb","fa","he","ks","lrc","mzn","ps","sd","te","ug","ur","yi"].map((function(t){return t.toLowerCase()})),hc=function(t){var e=vr(t).toLowerCase().replace(Bt,"").split("-"),i=e.slice(0,2).join("-"),n=e[0];return nr(dc,i)||nr(dc,n)},fc={id:hs(go)},pc=i.default.extend({props:fc,data:function(){return{localId_:null}},computed:{safeId:function(){var t=this.id||this.localId_;return function(e){return t?(e=String(e||"").replace(/\s+/g,"_"))?t+"_"+e:t:null}}},mounted:function(){var t=this;this.$nextTick((function(){t.localId_="__BVID__".concat(t._uid)}))}}),mc=ys("value",{type:$o}),vc=mc.mixin,bc=mc.props,gc=mc.prop,yc=mc.event,wc=vs(ee(c(c(c({},fc),bc),{},{ariaControls:hs(go),block:hs(ho,!1),dateDisabledFn:hs(po),dateFormatOptions:hs(vo,{year:Kl,month:Yl,day:Kl,weekday:Yl}),dateInfoFn:hs(po),direction:hs(go),disabled:hs(ho,!1),hidden:hs(ho,!1),hideHeader:hs(ho,!1),initialDate:hs($o),labelCalendar:hs(go,"Calendar"),labelCurrentMonth:hs(go,"Current month"),labelHelp:hs(go,"Use cursor keys to navigate calendar dates"),labelNav:hs(go,"Calendar navigation"),labelNextDecade:hs(go,"Next decade"),labelNextMonth:hs(go,"Next month"),labelNextYear:hs(go,"Next year"),labelNoDateSelected:hs(go,"No date selected"),labelPrevDecade:hs(go,"Previous decade"),labelPrevMonth:hs(go,"Previous month"),labelPrevYear:hs(go,"Previous year"),labelSelected:hs(go,"Selected date"),labelToday:hs(go,"Today"),locale:hs(Co),max:hs($o),min:hs($o),navButtonVariant:hs(go,"secondary"),noHighlightToday:hs(ho,!1),noKeyNav:hs(ho,!1),readonly:hs(ho,!1),roleDescription:hs(go),selectedVariant:hs(go,"primary"),showDecadeNav:hs(ho,!1),startWeekday:hs(_o,0),todayVariant:hs(go),valueAsDate:hs(ho,!1),weekdayHeaderFormat:hs(go,Ul,(function(t){return nr([Yl,Ul,"narrow"],t)})),width:hs(go,"270px")})),Oe),Tc=i.default.extend({name:Oe,mixins:[Za,pc,vc,Cs],props:wc,data:function(){var t=Jl(this[gc])||"";return{selectedYMD:t,activeYMD:t||Jl(uc(this.initialDate||this.getToday()),this.min,this.max),gridHasFocus:!1,isLive:!1}},computed:{valueId:function(){return this.safeId()},widgetId:function(){return this.safeId("_calendar-wrapper_")},navId:function(){return this.safeId("_calendar-nav_")},gridId:function(){return this.safeId("_calendar-grid_")},gridCaptionId:function(){return this.safeId("_calendar-grid-caption_")},gridHelpId:function(){return this.safeId("_calendar-grid-help_")},activeId:function(){return this.activeYMD?this.safeId("_cell-".concat(this.activeYMD,"_")):null},selectedDate:function(){return Zl(this.selectedYMD)},activeDate:function(){return Zl(this.activeYMD)},computedMin:function(){return Zl(this.min)},computedMax:function(){return Zl(this.max)},computedWeekStarts:function(){return Us(lr(this.startWeekday,0),0)%7},computedLocale:function(){return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Wl;return t=or(t).filter(ne),new Intl.DateTimeFormat(t,{calendar:e}).resolvedOptions().locale}(or(this.locale).filter(ne),Wl)},computedDateDisabledFn:function(){var t=this.dateDisabledFn;return gs(t)?t:function(){return!1}},computedDateInfoFn:function(){var t=this.dateInfoFn;return gs(t)?t:function(){return{}}},calendarLocale:function(){var t=new Intl.DateTimeFormat(this.computedLocale,{calendar:Wl}),e=t.resolvedOptions().calendar,i=t.resolvedOptions().locale;return e!==Wl&&(i=i.replace(/-u-.+$/i,"").concat("-u-ca-gregory")),i},calendarYear:function(){return this.activeDate.getFullYear()},calendarMonth:function(){return this.activeDate.getMonth()},calendarFirstDay:function(){return Xl(this.calendarYear,this.calendarMonth,1,12)},calendarDaysInMonth:function(){var t=Xl(this.calendarFirstDay);return t.setMonth(t.getMonth()+1,0),t.getDate()},computedVariant:function(){return"btn-".concat(this.selectedVariant||"primary")},computedTodayVariant:function(){return"btn-outline-".concat(this.todayVariant||this.selectedVariant||"primary")},computedNavButtonVariant:function(){return"btn-outline-".concat(this.navButtonVariant||"primary")},isRTL:function(){var t=vr(this.direction).toLowerCase();return"rtl"===t||"ltr"!==t&&hc(this.computedLocale)},context:function(){var t=this.selectedYMD,e=this.activeYMD,i=Zl(t),n=Zl(e);return{selectedYMD:t,selectedDate:i,selectedFormatted:i?this.formatDateString(i):this.labelNoDateSelected,activeYMD:e,activeDate:n,activeFormatted:n?this.formatDateString(n):"",disabled:this.dateDisabled(n),locale:this.computedLocale,calendarLocale:this.calendarLocale,rtl:this.isRTL}},dateOutOfRange:function(){var t=this.computedMin,e=this.computedMax;return function(i){return i=Zl(i),t&&ie}},dateDisabled:function(){var t=this,e=this.dateOutOfRange;return function(i){i=Zl(i);var n=Jl(i);return!(!e(i)&&!t.computedDateDisabledFn(n,i))}},formatDateString:function(){return Ql(this.calendarLocale,c(c({year:Kl,month:ql,day:ql},this.dateFormatOptions),{},{hour:void 0,minute:void 0,second:void 0,calendar:Wl}))},formatYearMonth:function(){return Ql(this.calendarLocale,{year:Kl,month:Yl,calendar:Wl})},formatWeekdayName:function(){return Ql(this.calendarLocale,{weekday:Yl,calendar:Wl})},formatWeekdayNameShort:function(){return Ql(this.calendarLocale,{weekday:this.weekdayHeaderFormat||Ul,calendar:Wl})},formatDay:function(){var t=new Intl.NumberFormat([this.computedLocale],{style:"decimal",minimumIntegerDigits:1,minimumFractionDigits:0,maximumFractionDigits:0,notation:"standard"});return function(e){return t.format(e.getDate())}},prevDecadeDisabled:function(){var t=this.computedMin;return this.disabled||t&&ic(lc(this.activeDate))t},nextYearDisabled:function(){var t=this.computedMax;return this.disabled||t&&ec(ac(this.activeDate))>t},nextDecadeDisabled:function(){var t=this.computedMax;return this.disabled||t&&ec(cc(this.activeDate))>t},calendar:function(){for(var t=[],e=this.calendarFirstDay,i=e.getFullYear(),n=e.getMonth(),o=this.calendarDaysInMonth,r=e.getDay(),s=0-((this.computedWeekStarts>r?7:0)-this.computedWeekStarts)-r,a=0;a<6&&s',Ec=vs({alt:hs(go),blank:hs(ho,!1),blankColor:hs(go,"transparent"),block:hs(ho,!1),center:hs(ho,!1),fluid:hs(ho,!1),fluidGrow:hs(ho,!1),height:hs(_o),left:hs(ho,!1),right:hs(ho,!1),rounded:hs(ko,!1),sizes:hs(Co),src:hs(go),srcset:hs(Co),thumbnail:hs(ho,!1),width:hs(_o)},_i),Lc=i.default.extend({name:_i,functional:!0,props:Ec,render:function(t,e){var i,n=e.props,o=e.data,r=n.alt,s=n.src,l=n.block,c=n.fluidGrow,u=n.rounded,d=lr(n.width)||null,h=lr(n.height)||null,f=null,p=or(n.srcset).filter(ne).join(","),m=or(n.sizes).filter(ne).join(",");return n.blank&&(!h&&d?h=d:!d&&h&&(d=h),d||h||(d=1,h=1),s=function(t,e,i){var n=encodeURIComponent(Vc.replace("%{w}",vr(t)).replace("%{h}",vr(e)).replace("%{f}",i));return"data:image/svg+xml;charset=UTF-8,".concat(n)}(d,h,n.blankColor||"transparent"),p=null,m=null),n.left?f="float-left":n.right?f="float-right":n.center&&(f="mx-auto",l=!0),t("img",F(o,{attrs:{src:s,alt:r,width:d?vr(d):null,height:h?vr(h):null,srcset:p||null,sizes:m||null},class:(i={"img-thumbnail":n.thumbnail,"img-fluid":n.fluid||c,"w-100":c,rounded:""===u||!0===u},a(i,"rounded-".concat(u),Et(u)&&""!==u),a(i,f,f),a(i,"d-block",l),i)}))}}),Ac=vs(ee(c(c({},Jt(Ec,["src","alt","width","height","left","right"])),{},{bottom:hs(ho,!1),end:hs(ho,!1),start:hs(ho,!1),top:hs(ho,!1)})),Me),Rc=i.default.extend({name:Me,functional:!0,props:Ac,render:function(t,e){var i=e.props,n=e.data,o=i.src,r=i.alt,s=i.width,a=i.height,l="card-img";return i.top?l+="-top":i.right||i.end?l+="-right":i.bottom?l+="-bottom":(i.left||i.start)&&(l+="-left"),t("img",F(n,{class:l,attrs:{src:o,alt:r,width:s,height:a}}))}}),Mc=fs(Ac,cs.bind(null,"img"));Mc.imgSrc.required=!1;var Hc,zc,Nc,jc=vs(ee(c(c(c(c(c(c({},_c),Fc),Pc),Mc),xc),{},{align:hs(go),noBody:hs(ho,!1)})),Ve),Gc=i.default.extend({name:Ve,functional:!0,props:jc,render:function(t,e){var i,n=e.props,o=e.data,r=e.slots,s=e.scopedSlots,l=n.imgSrc,c=n.imgLeft,u=n.imgRight,d=n.imgStart,h=n.imgEnd,f=n.imgBottom,p=n.header,m=n.headerHtml,v=n.footer,b=n.footerHtml,g=n.align,y=n.textVariant,w=n.bgVariant,T=n.borderVariant,C=s||{},x=r(),S={},k=t(),$=t();if(l){var B=t(Rc,{props:ps(Mc,n,us.bind(null,"img"))});f?$=B:k=B}var _=t(),D=ws(No,C,x);(D||p||m)&&(_=t(Ic,{props:ps(Fc,n),domProps:D?{}:Fl(m,p)},Ts(No,S,C,x)));var I=Ts(Ao,S,C,x);n.noBody||(I=t(Dc,{props:ps(_c,n)},I),n.overlay&&l&&(I=t("div",{staticClass:"position-relative"},[k,I,$]),k=t(),$=t()));var P=t();return(ws(zo,C,x)||v||b)&&(P=t(Oc,{props:ps(Pc,n),domProps:D?{}:Fl(b,v)},Ts(zo,S,C,x))),t(n.tag,F(o,{staticClass:"card",class:(i={"flex-row":c||d,"flex-row-reverse":(u||h)&&!(c||d)},a(i,"text-".concat(g),g),a(i,"bg-".concat(w),w),a(i,"border-".concat(T),T),a(i,"text-".concat(y),y),i)}),[k,_,I,P,$])}}),Wc="__bv__visibility_observer",Yc=function(){function t(e,i,n){o(this,t),this.el=e,this.callback=i.callback,this.margin=i.margin||0,this.once=i.once||!1,this.observer=null,this.visible=void 0,this.doneOnce=!1,this.createObserver(n)}return s(t,[{key:"createObserver",value:function(t){var e=this;if(this.observer&&this.stop(),!this.doneOnce&&Ot(this.callback)){try{this.observer=new IntersectionObserver(this.handler.bind(this),{root:null,rootMargin:this.margin,threshold:0})}catch(t){return this.doneOnce=!0,this.observer=void 0,void this.callback(null)}t.context.$nextTick((function(){xr((function(){e.observer&&e.observer.observe(e.el)}))}))}}},{key:"handler",value:function(t){var e=t?t[0]:{},i=Boolean(e.isIntersecting||e.intersectionRatio>0);i!==this.visible&&(this.visible=i,this.callback(i),this.once&&this.visible&&(this.doneOnce=!0,this.stop()))}},{key:"stop",value:function(){this.observer&&this.observer.disconnect(),this.observer=null}}]),t}(),Uc=function(t){var e=t[Wc];e&&e.stop&&e.stop(),delete t[Wc]},qc=function(t,e,i){var n=e.value,o=e.modifiers,r={margin:"0px",once:!1,callback:n};Kt(o).forEach((function(t){Q.test(t)?r.margin="".concat(t,"px"):"once"===t.toLowerCase()&&(r.once=!0)})),Uc(t),t[Wc]=new Yc(t,r,i),t[Wc]._prevModifiers=Zt(o)},Kc={bind:qc,componentUpdated:function(t,e,i){var n=e.value,o=e.oldValue,r=e.modifiers;r=Zt(r),!t||n===o&&t[Wc]&&Ua(r,t[Wc]._prevModifiers)||qc(t,{value:n,modifiers:r},i)},unbind:function(t){Uc(t)}},Xc="show",Zc=Qt(Ec,["blank"]),Jc=vs(c(c({},Zc),{},a({blankColor:hs(go,"transparent"),blankHeight:hs(_o),blankSrc:hs(go,null),blankWidth:hs(_o),offset:hs(_o,360)},Xc,hs(ho,!1))),Di),Qc=i.default.extend({name:Di,directives:{"b-visible":Kc},props:Jc,data:function(){return{isShown:this.show}},computed:{computedSrc:function(){var t=this.blankSrc;return!t||this.isShown?this.src:t},computedBlank:function(){return!(this.isShown||this.blankSrc)},computedWidth:function(){var t=this.width;return this.isShown?t:this.blankWidth||t},computedHeight:function(){var t=this.height;return this.isShown?t:this.blankHeight||t},computedSrcset:function(){var t=or(this.srcset).filter(ne).join(",");return!this.blankSrc||this.isShown?t:null},computedSizes:function(){var t=or(this.sizes).filter(ne).join(",");return!this.blankSrc||this.isShown?t:null}},watch:(Hc={},a(Hc,Xc,(function(t,e){if(t!==e){var i=!q||t;this.isShown=i,i!==t&&this.$nextTick(this.updateShowProp)}})),a(Hc,"isShown",(function(t,e){t!==e&&this.updateShowProp()})),Hc),mounted:function(){this.isShown=!q||this.show},methods:{updateShowProp:function(){this.$emit("update:show",this.isShown)},doShow:function(t){!t&&null!==t||this.isShown||(this.isShown=!0)}},render:function(t){var e,i=[];this.isShown||i.push({name:"b-visible",value:this.doShow,modifiers:(e={},a(e,"".concat(lr(this.offset,0)),!0),a(e,"once",!0),e)});return t(Lc,{directives:i,props:c({src:this.computedSrc,blank:this.computedBlank,width:this.computedWidth,height:this.computedHeight,srcset:this.computedSrcset||null,sizes:this.computedSizes||null},ps(Zc,this.$props))})}}),tu=vs(ee(c(c({},Qt(Jc,Kt(Ec))),Qt(Ac,["src","alt","width","height"]))),He),eu=i.default.extend({name:He,functional:!0,props:tu,render:function(t,e){var i=e.props,n=e.data,o="card-img";return i.top?o+="-top":i.right||i.end?o+="-right":i.bottom?o+="-bottom":(i.left||i.start)&&(o+="-left"),t(Qc,F(n,{class:[o],props:Qt(i,["left","right"])}))}}),iu=vs({textTag:hs(go,"p")},Ne),nu=i.default.extend({name:Ne,functional:!0,props:iu,render:function(t,e){var i=e.props,n=e.data,o=e.children;return t(i.textTag,F(n,{staticClass:"card-text"}),o)}}),ou=vs({columns:hs(ho,!1),deck:hs(ho,!1),tag:hs(go,"div")},Ae),ru=me({components:{BCard:Gc,BCardHeader:Ic,BCardBody:Dc,BCardTitle:kc,BCardSubTitle:Bc,BCardFooter:Oc,BCardImg:Rc,BCardImgLazy:eu,BCardText:nu,BCardGroup:i.default.extend({name:Ae,functional:!0,props:ou,render:function(t,e){var i=e.props,n=e.data,o=e.children;return t(i.tag,F(n,{class:i.deck?"card-deck":i.columns?"card-columns":"card-group"}),o)}})}}),su=function(){},au=function(t,e,i){if(t=t?t.$el||t:null,!kr(t))return null;if(n="observeDom",!R&&(le("".concat(n,": Requires MutationObserver support.")),1))return null;var n,o=new Sr((function(t){for(var i=!1,n=0;n0||o.removedNodes.length>0))&&(i=!0)}i&&e()}));return o.observe(t,c({childList:!0,subtree:!0},i)),o},lu=ys("value",{type:mo,defaultValue:0}),cu=lu.mixin,uu=lu.props,du=lu.prop,hu=lu.event,fu={next:{dirClass:"carousel-item-left",overlayClass:"carousel-item-next"},prev:{dirClass:"carousel-item-right",overlayClass:"carousel-item-prev"}},pu={TOUCH:"touch",PEN:"pen"},mu={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"otransitionend oTransitionEnd",transition:"transitionend"},vu=vs(ee(c(c(c({},fc),uu),{},{background:hs(go),controls:hs(ho,!1),fade:hs(ho,!1),imgHeight:hs(_o),imgWidth:hs(_o),indicators:hs(ho,!1),interval:hs(mo,5e3),labelGotoSlide:hs(go,"Goto slide"),labelIndicators:hs(go,"Select a slide to display"),labelNext:hs(go,"Next slide"),labelPrev:hs(go,"Previous slide"),noAnimation:hs(ho,!1),noHoverPause:hs(ho,!1),noTouch:hs(ho,!1),noWrap:hs(ho,!1)})),Ge),bu=i.default.extend({name:Ge,mixins:[pc,cu,Cs],provide:function(){return{bvCarousel:this}},props:vu,data:function(){return{index:this[du]||0,isSliding:!1,transitionEndEvent:null,slides:[],direction:null,isPaused:!(lr(this.interval,0)>0),touchStartX:0,touchDeltaX:0}},computed:{numSlides:function(){return this.slides.length}},watch:(zc={},a(zc,du,(function(t,e){t!==e&&this.setSlide(lr(t,0))})),a(zc,"interval",(function(t,e){t!==e&&(t?(this.pause(!0),this.start(!1)):this.pause(!1))})),a(zc,"isPaused",(function(t,e){t!==e&&this.$emit(t?"paused":"unpaused")})),a(zc,"index",(function(t,e){t===e||this.isSliding||this.doSlide(t,e)})),zc),created:function(){this.$_interval=null,this.$_animationTimeout=null,this.$_touchTimeout=null,this.$_observer=null,this.isPaused=!(lr(this.interval,0)>0)},mounted:function(){this.transitionEndEvent=function(t){for(var e in mu)if(!Ft(t.style[e]))return mu[e];return null}(this.$el)||null,this.updateSlides(),this.setObserver(!0)},beforeDestroy:function(){this.clearInterval(),this.clearAnimationTimeout(),this.clearTouchTimeout(),this.setObserver(!1)},methods:{clearInterval:function(t){function e(){return t.apply(this,arguments)}return e.toString=function(){return t.toString()},e}((function(){clearInterval(this.$_interval),this.$_interval=null})),clearAnimationTimeout:function(){clearTimeout(this.$_animationTimeout),this.$_animationTimeout=null},clearTouchTimeout:function(){clearTimeout(this.$_touchTimeout),this.$_touchTimeout=null},setObserver:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.$_observer&&this.$_observer.disconnect(),this.$_observer=null,t&&(this.$_observer=au(this.$refs.inner,this.updateSlides.bind(this),{subtree:!1,childList:!0,attributes:!0,attributeFilter:["id"]}))},setSlide:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!(M&&document.visibilityState&&document.hidden)){var n=this.noWrap,o=this.numSlides;t=Xs(t),0!==o&&(this.isSliding?this.$once(io,(function(){xr((function(){return e.setSlide(t,i)}))})):(this.direction=i,this.index=t>=o?n?o-1:0:t<0?n?0:o-1:t,n&&this.index!==t&&this.index!==this[du]&&this.$emit(hu,this.index)))}},prev:function(){this.setSlide(this.index-1,"prev")},next:function(){this.setSlide(this.index+1,"next")},pause:function(t){t||(this.isPaused=!0),this.clearInterval()},start:function(t){t||(this.isPaused=!1),this.clearInterval(),this.interval&&this.numSlides>1&&(this.$_interval=setInterval(this.next,Us(1e3,this.interval)))},restart:function(){this.$el.contains($r())||this.start()},doSlide:function(t,e){var i=this,n=Boolean(this.interval),o=this.calcDirection(this.direction,e,t),r=o.overlayClass,s=o.dirClass,a=this.slides[e],l=this.slides[t];if(a&&l){if(this.isSliding=!0,n&&this.pause(!1),this.$emit("sliding-start",t),this.$emit(hu,this.index),this.noAnimation)Rr(l,"active"),Mr(a,"active"),this.isSliding=!1,this.$nextTick((function(){return i.$emit(io,t)}));else{Rr(l,r),Ir(l),Rr(a,s),Rr(l,s);var c=!1,u=function e(){if(!c){if(c=!0,i.transitionEndEvent)i.transitionEndEvent.split(/\s+/).forEach((function(t){return ks(l,t,e,lo)}));i.clearAnimationTimeout(),Mr(l,s),Mr(l,r),Rr(l,"active"),Mr(a,"active"),Mr(a,s),Mr(a,r),zr(a,"aria-current","false"),zr(l,"aria-current","true"),zr(a,"aria-hidden","true"),zr(l,"aria-hidden","false"),i.isSliding=!1,i.direction=null,i.$nextTick((function(){return i.$emit(io,t)}))}};if(this.transitionEndEvent)this.transitionEndEvent.split(/\s+/).forEach((function(t){return Ss(l,t,u,lo)}));this.$_animationTimeout=setTimeout(u,650)}n&&this.start(!1)}},updateSlides:function(){this.pause(!0),this.slides=Pr(".carousel-item",this.$refs.inner);var t=this.slides.length,e=Us(0,Ys(Xs(this.index),t-1));this.slides.forEach((function(i,n){var o=n+1;n===e?(Rr(i,"active"),zr(i,"aria-current","true")):(Mr(i,"active"),zr(i,"aria-current","false")),zr(i,"aria-posinset",String(o)),zr(i,"aria-setsize",String(t))})),this.setSlide(e),this.start(this.isPaused)},calcDirection:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;return t?fu[t]:i>e?fu.next:fu.prev},handleClick:function(t,e){var i=t.keyCode;"click"!==t.type&&i!==Ga&&i!==Ha||(Bs(t),e())},handleSwipe:function(){var t=qs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0?this.prev():e<0&&this.next()}},touchStart:function(t){U&&pu[t.pointerType.toUpperCase()]?this.touchStartX=t.clientX:U||(this.touchStartX=t.touches[0].clientX)},touchMove:function(t){t.touches&&t.touches.length>1?this.touchDeltaX=0:this.touchDeltaX=t.touches[0].clientX-this.touchStartX},touchEnd:function(t){U&&pu[t.pointerType.toUpperCase()]&&(this.touchDeltaX=t.clientX-this.touchStartX),this.handleSwipe(),this.pause(!1),this.clearTouchTimeout(),this.$_touchTimeout=setTimeout(this.start,500+Us(1e3,this.interval))}},render:function(t){var e=this,i=this.indicators,n=this.background,o=this.noAnimation,r=this.noHoverPause,s=this.noTouch,a=this.index,l=this.isSliding,c=this.pause,u=this.restart,d=this.touchStart,h=this.touchEnd,f=this.safeId("__BV_inner_"),p=t("div",{staticClass:"carousel-inner",attrs:{id:f,role:"list"},ref:"inner"},[this.normalizeSlot()]),m=t();if(this.controls){var v=function(i,n,o){var r=function(t){l?Bs(t,{propagation:!1}):e.handleClick(t,o)};return t("a",{staticClass:"carousel-control-".concat(i),attrs:{href:"#",role:"button","aria-controls":f,"aria-disabled":l?"true":null},on:{click:r,keydown:r}},[t("span",{staticClass:"carousel-control-".concat(i,"-icon"),attrs:{"aria-hidden":"true"}}),t("span",{class:"sr-only"},[n])])};m=[v("prev",this.labelPrev,this.prev),v("next",this.labelNext,this.next)]}var b=t("ol",{staticClass:"carousel-indicators",directives:[{name:"show",value:i}],attrs:{id:this.safeId("__BV_indicators_"),"aria-hidden":i?"false":"true","aria-label":this.labelIndicators,"aria-owns":f}},this.slides.map((function(n,o){var r=function(t){e.handleClick(t,(function(){e.setSlide(o)}))};return t("li",{class:{active:o===a},attrs:{role:"button",id:e.safeId("__BV_indicator_".concat(o+1,"_")),tabindex:i?"0":"-1","aria-current":o===a?"true":"false","aria-label":"".concat(e.labelGotoSlide," ").concat(o+1),"aria-describedby":n.id||null,"aria-controls":f},on:{click:r,keydown:r},key:"slide_".concat(o)})}))),g={mouseenter:r?su:c,mouseleave:r?su:u,focusin:c,focusout:u,keydown:function(t){if(!/input|textarea/i.test(t.target.tagName)){var i=t.keyCode;i!==Na&&i!==ja||(Bs(t),e[i===Na?"prev":"next"]())}}};return Y&&!s&&(U?(g["&pointerdown"]=d,g["&pointerup"]=h):(g["&touchstart"]=d,g["&touchmove"]=this.touchMove,g["&touchend"]=h)),t("div",{staticClass:"carousel",class:{slide:!o,"carousel-fade":!o&&this.fade,"pointer-event":Y&&U&&!s},style:{background:n},attrs:{role:"region",id:this.safeId(),"aria-busy":l?"true":"false"},on:g},[p,m,b])}}),gu={imgAlt:hs(go),imgBlank:hs(ho,!1),imgBlankColor:hs(go,"transparent"),imgHeight:hs(_o),imgSrc:hs(go),imgWidth:hs(_o)},yu=vs(ee(c(c(c({},fc),gu),{},{background:hs(go),caption:hs(go),captionHtml:hs(go),captionTag:hs(go,"h3"),contentTag:hs(go,"div"),contentVisibleUp:hs(go),text:hs(go),textHtml:hs(go),textTag:hs(go,"p")})),We),wu=me({components:{BCarousel:bu,BCarouselSlide:i.default.extend({name:We,mixins:[pc,Cs],inject:{bvCarousel:{default:function(){return{noTouch:!0}}}},props:yu,computed:{contentClasses:function(){return[this.contentVisibleUp?"d-none":"",this.contentVisibleUp?"d-".concat(this.contentVisibleUp,"-block"):""]},computedWidth:function(){return this.imgWidth||this.bvCarousel.imgWidth||null},computedHeight:function(){return this.imgHeight||this.bvCarousel.imgHeight||null}},render:function(t){var e=this.normalizeSlot("img");if(!e&&(this.imgSrc||this.imgBlank)){var i={};!this.bvCarousel.noTouch&&Y&&(i.dragstart=function(t){return Bs(t,{propagation:!1})}),e=t(Lc,{props:c(c({},ps(gu,this.$props,us.bind(null,"img"))),{},{width:this.computedWidth,height:this.computedHeight,fluidGrow:!0,block:!0}),on:i})}var n=[!(!this.caption&&!this.captionHtml)&&t(this.captionTag,{domProps:Fl(this.captionHtml,this.caption)}),!(!this.text&&!this.textHtml)&&t(this.textTag,{domProps:Fl(this.textHtml,this.text)}),this.normalizeSlot()||!1],o=t();return n.some(ne)&&(o=t(this.contentTag,{staticClass:"carousel-caption",class:this.contentClasses},n.map((function(e){return e||t()})))),t("div",{staticClass:"carousel-item",style:{background:this.background||this.bvCarousel.background||null},attrs:{id:this.safeId(),role:"listitem"}},[e,o])}})}}),Tu="show",Cu={css:!0,enterClass:"",enterActiveClass:"collapsing",enterToClass:"collapse show",leaveClass:"collapse show",leaveActiveClass:"collapsing",leaveToClass:"collapse"},xu={enter:function(t){Wr(t,"height",0),xr((function(){Ir(t),Wr(t,"height","".concat(t.scrollHeight,"px"))}))},afterEnter:function(t){Yr(t,"height")},leave:function(t){Wr(t,"height","auto"),Wr(t,"display","block"),Wr(t,"height","".concat(qr(t).height,"px")),Ir(t),Wr(t,"height",0)},afterLeave:function(t){Yr(t,"height")}},Su={appear:hs(ho,!1)},ku=i.default.extend({name:"BVCollapse",functional:!0,props:Su,render:function(t,e){var i=e.props,n=e.data,o=e.children;return t("transition",F(n,{props:Cu,on:xu},{props:i}),o)}}),$u=Fs(Ue,"toggle"),Bu=Fs(Ue,"request-state"),_u=Ds(Ue,"accordion"),Du=Ds(Ue,"state"),Fu=Ds(Ue,"sync-state"),Iu=ys("visible",{type:ho,defaultValue:!1}),Pu=Iu.mixin,Ou=Iu.props,Vu=Iu.prop,Eu=Iu.event,Lu=vs(ee(c(c(c({},fc),Ou),{},{accordion:hs(go),appear:hs(ho,!1),isNav:hs(ho,!1),tag:hs(go,"div")})),Ue),Au=i.default.extend({name:Ue,mixins:[pc,Pu,Cs,Ja],props:Lu,data:function(){return{show:this[Vu],transitioning:!1}},computed:{classObject:function(){var t=this.transitioning;return{"navbar-collapse":this.isNav,collapse:!t,show:this.show&&!t}},slotScope:function(){var t=this;return{visible:this.show,close:function(){t.show=!1}}}},watch:(Nc={},a(Nc,Vu,(function(t){t!==this.show&&(this.show=t)})),a(Nc,"show",(function(t,e){t!==e&&this.emitState()})),Nc),created:function(){this.show=this[Vu]},mounted:function(){var t=this;this.show=this[Vu],this.listenOnRoot($u,this.handleToggleEvt),this.listenOnRoot(_u,this.handleAccordionEvt),this.isNav&&(this.setWindowEvents(!0),this.handleResize()),this.$nextTick((function(){t.emitState()})),this.listenOnRoot(Bu,(function(e){e===t.safeId()&&t.$nextTick(t.emitSync)}))},updated:function(){this.emitSync()},deactivated:function(){this.isNav&&this.setWindowEvents(!1)},activated:function(){this.isNav&&this.setWindowEvents(!0),this.emitSync()},beforeDestroy:function(){this.show=!1,this.isNav&&M&&this.setWindowEvents(!1)},methods:{setWindowEvents:function(t){$s(t,window,"resize",this.handleResize,lo),$s(t,window,"orientationchange",this.handleResize,lo)},toggle:function(){this.show=!this.show},onEnter:function(){this.transitioning=!0,this.$emit(to)},onAfterEnter:function(){this.transitioning=!1,this.$emit(eo)},onLeave:function(){this.transitioning=!0,this.$emit(Nn)},onAfterLeave:function(){this.transitioning=!1,this.$emit(zn)},emitState:function(){var t=this.show,e=this.accordion,i=this.safeId();this.$emit(Eu,t),this.emitOnRoot(Du,i,t),e&&t&&this.emitOnRoot(_u,i,e)},emitSync:function(){this.emitOnRoot(Fu,this.safeId(),this.show)},checkDisplayBlock:function(){var t=this.$el,e=Hr(t,Tu);Mr(t,Tu);var i="block"===Kr(t).display;return e&&Rr(t,Tu),i},clickHandler:function(t){var e=t.target;this.isNav&&e&&"block"===Kr(this.$el).display&&(!Vr(e,".nav-link,.dropdown-item")&&!Er(".nav-link,.dropdown-item",e)||this.checkDisplayBlock()||(this.show=!1))},handleToggleEvt:function(t){t===this.safeId()&&this.toggle()},handleAccordionEvt:function(t,e){var i=this.accordion,n=this.show;if(i&&i===e){var o=t===this.safeId();(o&&!n||!o&&n)&&this.toggle()}},handleResize:function(){this.show="block"===Kr(this.$el).display}},render:function(t){var e=this.appear,i=t(this.tag,{class:this.classObject,directives:[{name:"show",value:this.show}],attrs:{id:this.safeId()},on:{click:this.clickHandler}},this.normalizeSlot(Ao,this.slotScope));return t(ku,{props:{appear:e},on:{enter:this.onEnter,afterEnter:this.onAfterEnter,leave:this.onLeave,afterLeave:this.onAfterLeave}},[i])}}),Ru="collapsed",Mu="not-collapsed",Hu="__BV_toggle",zu="".concat(Hu,"_HANDLER__"),Nu="".concat(Hu,"_CLICK__"),ju="".concat(Hu,"_STATE__"),Gu="".concat(Hu,"_TARGETS__"),Wu="aria-controls",Yu="aria-expanded",Uu="role",qu="tabindex",Ku="overflow-anchor",Xu=Fs(Ue,"toggle"),Zu=Ds(Ue,"state"),Ju=Ds(Ue,"sync-state"),Qu=Fs(Ue,"request-state"),td=[Ha,Ga],ed=function(t){return!nr(["button","a"],t.tagName.toLowerCase())},id=function(t){var e=t[Nu];e&&(ks(t,"click",e,ao),ks(t,"keydown",e,ao)),t[Nu]=null},nd=function(t,e){t[zu]&&e.context&&e.context.$root.$off([Zu,Ju],t[zu]),t[zu]=null},od=function(t,e){e?(Mr(t,Ru),Rr(t,Mu),zr(t,Yu,"true")):(Mr(t,Mu),Rr(t,Ru),zr(t,Yu,"false"))},rd=function(t,e){t[e]=null,delete t[e]},sd=function(t,e,i){if(M&&i.context){ed(t)&&(Gr(t,Uu)||zr(t,Uu,"button"),Gr(t,qu)||zr(t,qu,"0")),od(t,t[ju]);var n=function(t,e){var i=t.modifiers,n=t.arg,o=t.value,r=Kt(i||{});if(o=Et(o)?o.split(ut):o,Br(e.tagName,"a")){var s=jr(e,"href")||"";it.test(s)&&r.push(s.replace(et,""))}return or(n,o).forEach((function(t){return Et(t)&&r.push(t)})),r.filter((function(t,e,i){return t&&i.indexOf(t)===e}))}(e,t);n.length>0?(zr(t,Wu,n.join(" ")),Wr(t,Ku,"none")):(Nr(t,Wu),Yr(t,Ku)),xr((function(){!function(t,e){if(id(t),e.context){var i=function(i){"keydown"===i.type&&!nr(td,i.keyCode)||Fr(t)||(t[Gu]||[]).forEach((function(t){e.context.$root.$emit(Xu,t)}))};t[Nu]=i,Ss(t,"click",i,ao),ed(t)&&Ss(t,"keydown",i,ao)}}(t,i)})),Ua(n,t[Gu])||(t[Gu]=n,n.forEach((function(t){i.context.$root.$emit(Qu,t)})))}},ad={bind:function(t,e,i){t[ju]=!1,t[Gu]=[],function(t,e){if(nd(t,e),e.context){var i=function(e,i){nr(t[Gu]||[],e)&&(t[ju]=i,od(t,i))};t[zu]=i,e.context.$root.$on([Zu,Ju],i)}}(t,i),sd(t,e,i)},componentUpdated:sd,updated:sd,unbind:function(t,e,i){id(t),nd(t,i),rd(t,zu),rd(t,Nu),rd(t,ju),rd(t,Gu),Mr(t,Ru),Mr(t,Mu),Nr(t,Yu),Nr(t,Wu),Nr(t,Uu),Yr(t,Ku)}},ld=me({directives:{VBToggle:ad}}),cd=me({components:{BCollapse:Au},plugins:{VBTogglePlugin:ld}}),ud="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,dd=function(){for(var t=["Edge","Trident","Firefox"],e=0;e=0)return 1;return 0}();var hd=ud&&window.Promise?function(t){var e=!1;return function(){e||(e=!0,window.Promise.resolve().then((function(){e=!1,t()})))}}:function(t){var e=!1;return function(){e||(e=!0,setTimeout((function(){e=!1,t()}),dd))}};function fd(t){return t&&"[object Function]"==={}.toString.call(t)}function pd(t,e){if(1!==t.nodeType)return[];var i=t.ownerDocument.defaultView.getComputedStyle(t,null);return e?i[e]:i}function md(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}function vd(t){if(!t)return document.body;switch(t.nodeName){case"HTML":case"BODY":return t.ownerDocument.body;case"#document":return t.body}var e=pd(t),i=e.overflow,n=e.overflowX,o=e.overflowY;return/(auto|scroll|overlay)/.test(i+o+n)?t:vd(md(t))}function bd(t){return t&&t.referenceNode?t.referenceNode:t}var gd=ud&&!(!window.MSInputMethodContext||!document.documentMode),yd=ud&&/MSIE 10/.test(navigator.userAgent);function wd(t){return 11===t?gd:10===t?yd:gd||yd}function Td(t){if(!t)return document.documentElement;for(var e=wd(10)?document.body:null,i=t.offsetParent||null;i===e&&t.nextElementSibling;)i=(t=t.nextElementSibling).offsetParent;var n=i&&i.nodeName;return n&&"BODY"!==n&&"HTML"!==n?-1!==["TH","TD","TABLE"].indexOf(i.nodeName)&&"static"===pd(i,"position")?Td(i):i:t?t.ownerDocument.documentElement:document.documentElement}function Cd(t){return null!==t.parentNode?Cd(t.parentNode):t}function xd(t,e){if(!(t&&t.nodeType&&e&&e.nodeType))return document.documentElement;var i=t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING,n=i?t:e,o=i?e:t,r=document.createRange();r.setStart(n,0),r.setEnd(o,0);var s,a,l=r.commonAncestorContainer;if(t!==l&&e!==l||n.contains(o))return"BODY"===(a=(s=l).nodeName)||"HTML"!==a&&Td(s.firstElementChild)!==s?Td(l):l;var c=Cd(t);return c.host?xd(c.host,e):xd(t,Cd(e).host)}function Sd(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",i="top"===e?"scrollTop":"scrollLeft",n=t.nodeName;if("BODY"===n||"HTML"===n){var o=t.ownerDocument.documentElement,r=t.ownerDocument.scrollingElement||o;return r[i]}return t[i]}function kd(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=Sd(e,"top"),o=Sd(e,"left"),r=i?-1:1;return t.top+=n*r,t.bottom+=n*r,t.left+=o*r,t.right+=o*r,t}function $d(t,e){var i="x"===e?"Left":"Top",n="Left"===i?"Right":"Bottom";return parseFloat(t["border"+i+"Width"])+parseFloat(t["border"+n+"Width"])}function Bd(t,e,i,n){return Math.max(e["offset"+t],e["scroll"+t],i["client"+t],i["offset"+t],i["scroll"+t],wd(10)?parseInt(i["offset"+t])+parseInt(n["margin"+("Height"===t?"Top":"Left")])+parseInt(n["margin"+("Height"===t?"Bottom":"Right")]):0)}function _d(t){var e=t.body,i=t.documentElement,n=wd(10)&&getComputedStyle(i);return{height:Bd("Height",e,i,n),width:Bd("Width",e,i,n)}}var Dd=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},Fd=function(){function t(t,e){for(var i=0;i2&&void 0!==arguments[2]&&arguments[2],n=wd(10),o="HTML"===e.nodeName,r=Vd(t),s=Vd(e),a=vd(t),l=pd(e),c=parseFloat(l.borderTopWidth),u=parseFloat(l.borderLeftWidth);i&&o&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));var d=Od({top:r.top-s.top-c,left:r.left-s.left-u,width:r.width,height:r.height});if(d.marginTop=0,d.marginLeft=0,!n&&o){var h=parseFloat(l.marginTop),f=parseFloat(l.marginLeft);d.top-=c-h,d.bottom-=c-h,d.left-=u-f,d.right-=u-f,d.marginTop=h,d.marginLeft=f}return(n&&!i?e.contains(a):e===a&&"BODY"!==a.nodeName)&&(d=kd(d,e)),d}function Ld(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=t.ownerDocument.documentElement,n=Ed(t,i),o=Math.max(i.clientWidth,window.innerWidth||0),r=Math.max(i.clientHeight,window.innerHeight||0),s=e?0:Sd(i),a=e?0:Sd(i,"left"),l={top:s-n.top+n.marginTop,left:a-n.left+n.marginLeft,width:o,height:r};return Od(l)}function Ad(t){var e=t.nodeName;if("BODY"===e||"HTML"===e)return!1;if("fixed"===pd(t,"position"))return!0;var i=md(t);return!!i&&Ad(i)}function Rd(t){if(!t||!t.parentElement||wd())return document.documentElement;for(var e=t.parentElement;e&&"none"===pd(e,"transform");)e=e.parentElement;return e||document.documentElement}function Md(t,e,i,n){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],r={top:0,left:0},s=o?Rd(t):xd(t,bd(e));if("viewport"===n)r=Ld(s,o);else{var a=void 0;"scrollParent"===n?"BODY"===(a=vd(md(e))).nodeName&&(a=t.ownerDocument.documentElement):a="window"===n?t.ownerDocument.documentElement:n;var l=Ed(a,s,o);if("HTML"!==a.nodeName||Ad(s))r=l;else{var c=_d(t.ownerDocument),u=c.height,d=c.width;r.top+=l.top-l.marginTop,r.bottom=u+l.top,r.left+=l.left-l.marginLeft,r.right=d+l.left}}var h="number"==typeof(i=i||0);return r.left+=h?i:i.left||0,r.top+=h?i:i.top||0,r.right-=h?i:i.right||0,r.bottom-=h?i:i.bottom||0,r}function Hd(t){return t.width*t.height}function zd(t,e,i,n,o){var r=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===t.indexOf("auto"))return t;var s=Md(i,n,r,o),a={top:{width:s.width,height:e.top-s.top},right:{width:s.right-e.right,height:s.height},bottom:{width:s.width,height:s.bottom-e.bottom},left:{width:e.left-s.left,height:s.height}},l=Object.keys(a).map((function(t){return Pd({key:t},a[t],{area:Hd(a[t])})})).sort((function(t,e){return e.area-t.area})),c=l.filter((function(t){var e=t.width,n=t.height;return e>=i.clientWidth&&n>=i.clientHeight})),u=c.length>0?c[0].key:l[0].key,d=t.split("-")[1];return u+(d?"-"+d:"")}function Nd(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,o=n?Rd(e):xd(e,bd(i));return Ed(i,o,n)}function jd(t){var e=t.ownerDocument.defaultView.getComputedStyle(t),i=parseFloat(e.marginTop||0)+parseFloat(e.marginBottom||0),n=parseFloat(e.marginLeft||0)+parseFloat(e.marginRight||0);return{width:t.offsetWidth+n,height:t.offsetHeight+i}}function Gd(t){var e={left:"right",right:"left",bottom:"top",top:"bottom"};return t.replace(/left|right|bottom|top/g,(function(t){return e[t]}))}function Wd(t,e,i){i=i.split("-")[0];var n=jd(t),o={width:n.width,height:n.height},r=-1!==["right","left"].indexOf(i),s=r?"top":"left",a=r?"left":"top",l=r?"height":"width",c=r?"width":"height";return o[s]=e[s]+e[l]/2-n[l]/2,o[a]=i===a?e[a]-n[c]:e[Gd(a)],o}function Yd(t,e){return Array.prototype.find?t.find(e):t.filter(e)[0]}function Ud(t,e,i){return(void 0===i?t:t.slice(0,function(t,e,i){if(Array.prototype.findIndex)return t.findIndex((function(t){return t[e]===i}));var n=Yd(t,(function(t){return t[e]===i}));return t.indexOf(n)}(t,"name",i))).forEach((function(t){t.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var i=t.function||t.fn;t.enabled&&fd(i)&&(e.offsets.popper=Od(e.offsets.popper),e.offsets.reference=Od(e.offsets.reference),e=i(e,t))})),e}function qd(){if(!this.state.isDestroyed){var t={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};t.offsets.reference=Nd(this.state,this.popper,this.reference,this.options.positionFixed),t.placement=zd(this.options.placement,t.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),t.originalPlacement=t.placement,t.positionFixed=this.options.positionFixed,t.offsets.popper=Wd(this.popper,t.offsets.reference,t.placement),t.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",t=Ud(this.modifiers,t),this.state.isCreated?this.options.onUpdate(t):(this.state.isCreated=!0,this.options.onCreate(t))}}function Kd(t,e){return t.some((function(t){var i=t.name;return t.enabled&&i===e}))}function Xd(t){for(var e=[!1,"ms","Webkit","Moz","O"],i=t.charAt(0).toUpperCase()+t.slice(1),n=0;n1&&void 0!==arguments[1]&&arguments[1],i=lh.indexOf(t),n=lh.slice(i+1).concat(lh.slice(0,i));return e?n.reverse():n}var uh="flip",dh="clockwise",hh="counterclockwise";function fh(t,e,i,n){var o=[0,0],r=-1!==["right","left"].indexOf(n),s=t.split(/(\+|\-)/).map((function(t){return t.trim()})),a=s.indexOf(Yd(s,(function(t){return-1!==t.search(/,|\s/)})));s[a]&&-1===s[a].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,c=-1!==a?[s.slice(0,a).concat([s[a].split(l)[0]]),[s[a].split(l)[1]].concat(s.slice(a+1))]:[s];return(c=c.map((function(t,n){var o=(1===n?!r:r)?"height":"width",s=!1;return t.reduce((function(t,e){return""===t[t.length-1]&&-1!==["+","-"].indexOf(e)?(t[t.length-1]=e,s=!0,t):s?(t[t.length-1]+=e,s=!1,t):t.concat(e)}),[]).map((function(t){return function(t,e,i,n){var o=t.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+o[1],s=o[2];if(!r)return t;if(0===s.indexOf("%")){var a=void 0;switch(s){case"%p":a=i;break;case"%":case"%r":default:a=n}return Od(a)[e]/100*r}if("vh"===s||"vw"===s)return("vh"===s?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*r;return r}(t,o,e,i)}))}))).forEach((function(t,e){t.forEach((function(i,n){nh(i)&&(o[e]+=i*("-"===t[n-1]?-1:1))}))})),o}var ph={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(t){var e=t.placement,i=e.split("-")[0],n=e.split("-")[1];if(n){var o=t.offsets,r=o.reference,s=o.popper,a=-1!==["bottom","top"].indexOf(i),l=a?"left":"top",c=a?"width":"height",u={start:Id({},l,r[l]),end:Id({},l,r[l]+r[c]-s[c])};t.offsets.popper=Pd({},s,u[n])}return t}},offset:{order:200,enabled:!0,fn:function(t,e){var i=e.offset,n=t.placement,o=t.offsets,r=o.popper,s=o.reference,a=n.split("-")[0],l=void 0;return l=nh(+i)?[+i,0]:fh(i,r,s,a),"left"===a?(r.top+=l[0],r.left-=l[1]):"right"===a?(r.top+=l[0],r.left+=l[1]):"top"===a?(r.left+=l[0],r.top-=l[1]):"bottom"===a&&(r.left+=l[0],r.top+=l[1]),t.popper=r,t},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(t,e){var i=e.boundariesElement||Td(t.instance.popper);t.instance.reference===i&&(i=Td(i));var n=Xd("transform"),o=t.instance.popper.style,r=o.top,s=o.left,a=o[n];o.top="",o.left="",o[n]="";var l=Md(t.instance.popper,t.instance.reference,e.padding,i,t.positionFixed);o.top=r,o.left=s,o[n]=a,e.boundaries=l;var c=e.priority,u=t.offsets.popper,d={primary:function(t){var i=u[t];return u[t]l[t]&&!e.escapeWithReference&&(n=Math.min(u[i],l[t]-("right"===t?u.width:u.height))),Id({},i,n)}};return c.forEach((function(t){var e=-1!==["left","top"].indexOf(t)?"primary":"secondary";u=Pd({},u,d[e](t))})),t.offsets.popper=u,t},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(t){var e=t.offsets,i=e.popper,n=e.reference,o=t.placement.split("-")[0],r=Math.floor,s=-1!==["top","bottom"].indexOf(o),a=s?"right":"bottom",l=s?"left":"top",c=s?"width":"height";return i[a]r(n[a])&&(t.offsets.popper[l]=r(n[a])),t}},arrow:{order:500,enabled:!0,fn:function(t,e){var i;if(!sh(t.instance.modifiers,"arrow","keepTogether"))return t;var n=e.element;if("string"==typeof n){if(!(n=t.instance.popper.querySelector(n)))return t}else if(!t.instance.popper.contains(n))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),t;var o=t.placement.split("-")[0],r=t.offsets,s=r.popper,a=r.reference,l=-1!==["left","right"].indexOf(o),c=l?"height":"width",u=l?"Top":"Left",d=u.toLowerCase(),h=l?"left":"top",f=l?"bottom":"right",p=jd(n)[c];a[f]-ps[f]&&(t.offsets.popper[d]+=a[d]+p-s[f]),t.offsets.popper=Od(t.offsets.popper);var m=a[d]+a[c]/2-p/2,v=pd(t.instance.popper),b=parseFloat(v["margin"+u]),g=parseFloat(v["border"+u+"Width"]),y=m-t.offsets.popper[d]-b-g;return y=Math.max(Math.min(s[c]-p,y),0),t.arrowElement=n,t.offsets.arrow=(Id(i={},d,Math.round(y)),Id(i,h,""),i),t},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(t,e){if(Kd(t.instance.modifiers,"inner"))return t;if(t.flipped&&t.placement===t.originalPlacement)return t;var i=Md(t.instance.popper,t.instance.reference,e.padding,e.boundariesElement,t.positionFixed),n=t.placement.split("-")[0],o=Gd(n),r=t.placement.split("-")[1]||"",s=[];switch(e.behavior){case uh:s=[n,o];break;case dh:s=ch(n);break;case hh:s=ch(n,!0);break;default:s=e.behavior}return s.forEach((function(a,l){if(n!==a||s.length===l+1)return t;n=t.placement.split("-")[0],o=Gd(n);var c=t.offsets.popper,u=t.offsets.reference,d=Math.floor,h="left"===n&&d(c.right)>d(u.left)||"right"===n&&d(c.left)d(u.top)||"bottom"===n&&d(c.top)d(i.right),m=d(c.top)d(i.bottom),b="left"===n&&f||"right"===n&&p||"top"===n&&m||"bottom"===n&&v,g=-1!==["top","bottom"].indexOf(n),y=!!e.flipVariations&&(g&&"start"===r&&f||g&&"end"===r&&p||!g&&"start"===r&&m||!g&&"end"===r&&v),w=!!e.flipVariationsByContent&&(g&&"start"===r&&p||g&&"end"===r&&f||!g&&"start"===r&&v||!g&&"end"===r&&m),T=y||w;(h||b||T)&&(t.flipped=!0,(h||b)&&(n=s[l+1]),T&&(r=function(t){return"end"===t?"start":"start"===t?"end":t}(r)),t.placement=n+(r?"-"+r:""),t.offsets.popper=Pd({},t.offsets.popper,Wd(t.instance.popper,t.offsets.reference,t.placement)),t=Ud(t.instance.modifiers,t,"flip"))})),t},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(t){var e=t.placement,i=e.split("-")[0],n=t.offsets,o=n.popper,r=n.reference,s=-1!==["left","right"].indexOf(i),a=-1===["top","left"].indexOf(i);return o[s?"left":"top"]=r[i]-(a?o[s?"width":"height"]:0),t.placement=Gd(e),t.offsets.popper=Od(o),t}},hide:{order:800,enabled:!0,fn:function(t){if(!sh(t.instance.modifiers,"hide","preventOverflow"))return t;var e=t.offsets.reference,i=Yd(t.instance.modifiers,(function(t){return"preventOverflow"===t.name})).boundaries;if(e.bottomi.right||e.top>i.bottom||e.right2&&void 0!==arguments[2]?arguments[2]:{};Dd(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(n.update)},this.update=hd(this.update.bind(this)),this.options=Pd({},t.Defaults,o),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=e&&e.jquery?e[0]:e,this.popper=i&&i.jquery?i[0]:i,this.options.modifiers={},Object.keys(Pd({},t.Defaults.modifiers,o.modifiers)).forEach((function(e){n.options.modifiers[e]=Pd({},t.Defaults.modifiers[e]||{},o.modifiers?o.modifiers[e]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(t){return Pd({name:t},n.options.modifiers[t])})).sort((function(t,e){return t.order-e.order})),this.modifiers.forEach((function(t){t.enabled&&fd(t.onLoad)&&t.onLoad(n.reference,n.popper,n.options,t,n.state)})),this.update();var r=this.options.eventsEnabled;r&&this.enableEventListeners(),this.state.eventsEnabled=r}return Fd(t,[{key:"update",value:function(){return qd.call(this)}},{key:"destroy",value:function(){return Zd.call(this)}},{key:"enableEventListeners",value:function(){return eh.call(this)}},{key:"disableEventListeners",value:function(){return ih.call(this)}}]),t}();mh.Utils=("undefined"!=typeof window?window:global).PopperUtils,mh.placements=ah,mh.Defaults=ph;var vh,bh,gh,yh,wh,Th,Ch,xh,Sh,kh,$h,Bh,BvEvent=function(){function BvEvent(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(o(this,BvEvent),!t)throw new TypeError("Failed to construct '".concat(this.constructor.name,"'. 1 argument required, ").concat(arguments.length," given."));Gt(this,BvEvent.Defaults,this.constructor.Defaults,e,{type:t}),Yt(this,{type:{enumerable:!0,configurable:!1,writable:!1},cancelable:{enumerable:!0,configurable:!1,writable:!1},nativeEvent:{enumerable:!0,configurable:!1,writable:!1},target:{enumerable:!0,configurable:!1,writable:!1},relatedTarget:{enumerable:!0,configurable:!1,writable:!1},vueTarget:{enumerable:!0,configurable:!1,writable:!1},componentId:{enumerable:!0,configurable:!1,writable:!1}});var i=!1;this.preventDefault=function(){this.cancelable&&(i=!0)},Ut(this,"defaultPrevented",{enumerable:!0,get:function(){return i}})}return s(BvEvent,null,[{key:"Defaults",get:function(){return{type:"",cancelable:!0,nativeEvent:null,target:null,relatedTarget:null,vueTarget:null,componentId:null}}}]),BvEvent}(),_h=i.default.extend({data:function(){return{listenForClickOut:!1}},watch:{listenForClickOut:function(t,e){t!==e&&(ks(this.clickOutElement,this.clickOutEventName,this._clickOutHandler,lo),t&&Ss(this.clickOutElement,this.clickOutEventName,this._clickOutHandler,lo))}},beforeCreate:function(){this.clickOutElement=null,this.clickOutEventName=null},mounted:function(){this.clickOutElement||(this.clickOutElement=document),this.clickOutEventName||(this.clickOutEventName="click"),this.listenForClickOut&&Ss(this.clickOutElement,this.clickOutEventName,this._clickOutHandler,lo)},beforeDestroy:function(){ks(this.clickOutElement,this.clickOutEventName,this._clickOutHandler,lo)},methods:{isClickOut:function(t){return!Lr(this.$el,t.target)},_clickOutHandler:function(t){this.clickOutHandler&&this.isClickOut(t)&&this.clickOutHandler(t)}}}),Dh=i.default.extend({data:function(){return{listenForFocusIn:!1}},watch:{listenForFocusIn:function(t,e){t!==e&&(ks(this.focusInElement,"focusin",this._focusInHandler,lo),t&&Ss(this.focusInElement,"focusin",this._focusInHandler,lo))}},beforeCreate:function(){this.focusInElement=null},mounted:function(){this.focusInElement||(this.focusInElement=document),this.listenForFocusIn&&Ss(this.focusInElement,"focusin",this._focusInHandler,lo)},beforeDestroy:function(){ks(this.focusInElement,"focusin",this._focusInHandler,lo)},methods:{_focusInHandler:function(t){this.focusInHandler&&this.focusInHandler(t)}}}),Fh=Ds(Ke,eo),Ih=Ds(Ke,zn),Ph=[".dropdown-item",".b-dropdown-form"].map((function(t){return"".concat(t,":not(.disabled):not([disabled])")})).join(", "),Oh=vs(ee(c(c({},fc),{},{boundary:hs([HTMLElement,go],"scrollParent"),disabled:hs(ho,!1),dropleft:hs(ho,!1),dropright:hs(ho,!1),dropup:hs(ho,!1),noFlip:hs(ho,!1),offset:hs(_o,0),popperOpts:hs(vo,{}),right:hs(ho,!1)})),Ke),Vh=i.default.extend({mixins:[pc,Ja,_h,Dh],provide:function(){return{bvDropdown:this}},inject:{bvNavbar:{default:null}},props:Oh,data:function(){return{visible:!1,visibleChangePrevented:!1}},computed:{inNavbar:function(){return!It(this.bvNavbar)},toggler:function(){var t=this.$refs.toggle;return t?t.$el||t:null},directionClass:function(){return this.dropup?"dropup":this.dropright?"dropright":this.dropleft?"dropleft":""},boundaryClass:function(){return"scrollParent"===this.boundary||this.inNavbar?"":"position-static"}},watch:{visible:function(t,e){if(this.visibleChangePrevented)this.visibleChangePrevented=!1;else if(t!==e){var i=new BvEvent(t?to:Nn,{cancelable:!0,vueTarget:this,target:this.$refs.menu,relatedTarget:null,componentId:this.safeId?this.safeId():this.id||null});if(this.emitEvent(i),i.defaultPrevented)return this.visibleChangePrevented=!0,this.visible=e,void this.$off(zn,this.focusToggler);t?this.showMenu():this.hideMenu()}},disabled:function(t,e){t!==e&&t&&this.visible&&(this.visible=!1)}},created:function(){this.$_popper=null,this.$_hideTimeout=null},deactivated:function(){this.visible=!1,this.whileOpenListen(!1),this.destroyPopper()},beforeDestroy:function(){this.visible=!1,this.whileOpenListen(!1),this.destroyPopper(),this.clearHideTimeout()},methods:{emitEvent:function(t){var e=t.type;this.emitOnRoot(Ds(Ke,e),t),this.$emit(e,t)},showMenu:function(){var t=this;if(!this.disabled){if(!this.inNavbar)if("undefined"==typeof mh)le("Popper.js not found. Falling back to CSS positioning",Ke);else{var e=this.dropup&&this.right||this.split?this.$el:this.$refs.toggle;e=e.$el||e,this.createPopper(e)}this.emitOnRoot(Fh,this),this.whileOpenListen(!0),this.$nextTick((function(){t.focusMenu(),t.$emit(eo)}))}},hideMenu:function(){this.whileOpenListen(!1),this.emitOnRoot(Ih,this),this.$emit(zn),this.destroyPopper()},createPopper:function(t){this.destroyPopper(),this.$_popper=new mh(t,this.$refs.menu,this.getPopperConfig())},destroyPopper:function(){this.$_popper&&this.$_popper.destroy(),this.$_popper=null},updatePopper:function(){try{this.$_popper.scheduleUpdate()}catch(t){}},clearHideTimeout:function(){clearTimeout(this.$_hideTimeout),this.$_hideTimeout=null},getPopperConfig:function(){var t="bottom-start";this.dropup?t=this.right?"top-end":"top-start":this.dropright?t="right-start":this.dropleft?t="left-start":this.right&&(t="bottom-end");var e={placement:t,modifiers:{offset:{offset:this.offset||0},flip:{enabled:!this.noFlip}}},i=this.boundary;return i&&(e.modifiers.preventOverflow={boundariesElement:i}),te(e,this.popperOpts||{})},whileOpenListen:function(t){this.listenForClickOut=t,this.listenForFocusIn=t;var e=t?"$on":"$off";this.$root[e](Fh,this.rootCloseListener)},rootCloseListener:function(t){t!==this&&(this.visible=!1)},show:function(){var t=this;this.disabled||xr((function(){t.visible=!0}))},hide:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.disabled||(this.visible=!1,t&&this.$once(zn,this.focusToggler))},toggle:function(t){var e=t=t||{},i=e.type,n=e.keyCode;("click"===i||"keydown"===i&&-1!==[Ha,Ga,Ra].indexOf(n))&&(this.disabled?this.visible=!1:(this.$emit(no,t),Bs(t),this.visible?this.hide(!0):this.show()))},onMousedown:function(t){Bs(t,{propagation:!1})},onKeydown:function(t){var e=t.keyCode;27===e?this.onEsc(t):e===Ra?this.focusNext(t,!1):e===Wa&&this.focusNext(t,!0)},onEsc:function(t){this.visible&&(this.visible=!1,Bs(t),this.$once(zn,this.focusToggler))},onSplitClick:function(t){this.disabled?this.visible=!1:this.$emit(Bn,t)},hideHandler:function(t){var e=this,i=t.target;!this.visible||Lr(this.$refs.menu,i)||Lr(this.toggler,i)||(this.clearHideTimeout(),this.$_hideTimeout=setTimeout((function(){return e.hide()}),this.inNavbar?300:0))},clickOutHandler:function(t){this.hideHandler(t)},focusInHandler:function(t){this.hideHandler(t)},focusNext:function(t,e){var i=this,n=t.target;!this.visible||t&&Er(".dropdown form",n)||(Bs(t),this.$nextTick((function(){var t=i.getItems();if(!(t.length<1)){var o=t.indexOf(n);e&&o>0?o--:!e&&o1&&void 0!==arguments[1]?arguments[1]:null;if(Ht(t)){var i=re(t,this.valueField),n=re(t,this.textField);return{value:Ft(i)?e||n:i,text:Dl(String(Ft(n)?e:n)),html:re(t,this.htmlField),disabled:Boolean(re(t,this.disabledField))}}return{value:e||t,text:Dl(String(t)),disabled:!1}},normalizeOptions:function(t){var e=this;return Rt(t)?t.map((function(t){return e.normalizeOption(t)})):Ht(t)?(le('Setting prop "options" to an object is deprecated. Use the array format instead.',this.$options.name),Kt(t).map((function(i){return e.normalizeOption(t[i]||{},i)}))):[]}}}),lf=vs(ee(c(c({},sf),{},{id:hs(go,void 0,!0)})),ai),cf=i.default.extend({name:ai,mixins:[af,Cs],props:lf,render:function(t){var e=this.id,i=this.formOptions.map((function(e,i){var n=e.value,o=e.text,r=e.html,s=e.disabled;return t("option",{attrs:{value:n,disabled:s},domProps:Fl(r,o),key:"option_".concat(i)})}));return t("datalist",{attrs:{id:e}},[i,this.normalizeSlot()])}}),uf=vs({id:hs(go),inline:hs(ho,!1),tag:hs(go,"small"),textVariant:hs(go,"muted")},xi),df=i.default.extend({name:xi,functional:!0,props:uf,render:function(t,e){var i=e.props,n=e.data,o=e.children;return t(i.tag,F(n,{class:a({"form-text":!i.inline},"text-".concat(i.textVariant),i.textVariant),attrs:{id:i.id}}),o)}}),hf=vs({ariaLive:hs(go),forceShow:hs(ho,!1),id:hs(go),role:hs(go),state:hs(ho,null),tag:hs(go,"div"),tooltip:hs(ho,!1)},hi),ff=i.default.extend({name:hi,functional:!0,props:hf,render:function(t,e){var i=e.props,n=e.data,o=e.children,r=i.tooltip,s=i.ariaLive,a=!0===i.forceShow||!1===i.state;return t(i.tag,F(n,{class:{"d-block":a,"invalid-feedback":!r,"invalid-tooltip":r},attrs:{id:i.id||null,role:i.role||null,"aria-live":s||null,"aria-atomic":s?"true":null}}),o)}}),pf=vs({ariaLive:hs(go),forceShow:hs(ho,!1),id:hs(go),role:hs(go),state:hs(ho,null),tag:hs(go,"div"),tooltip:hs(ho,!1)},$i),mf=i.default.extend({name:$i,functional:!0,props:pf,render:function(t,e){var i=e.props,n=e.data,o=e.children,r=i.tooltip,s=i.ariaLive,a=!0===i.forceShow||!0===i.state;return t(i.tag,F(n,{class:{"d-block":a,"valid-feedback":!r,"valid-tooltip":r},attrs:{id:i.id||null,role:i.role||null,"aria-live":s||null,"aria-atomic":s?"true":null}}),o)}}),vf=vs({tag:hs(go,"div")},vi),bf=i.default.extend({name:vi,functional:!0,props:vf,render:function(t,e){var i=e.props,n=e.data,o=e.children;return t(i.tag,F(n,{staticClass:"form-row"}),o)}}),gf=me({components:{BForm:Uh,BFormDatalist:cf,BDatalist:cf,BFormText:df,BFormInvalidFeedback:ff,BFormFeedback:ff,BFormValidFeedback:mf,BFormRow:bf}}),yf=function(t,e){for(var i=0;i-1:Ua(e,t)},isRadio:function(){return!1}},watch:a({},Lf,(function(t,e){Ua(t,e)||this.setIndeterminate(t)})),mounted:function(){this.setIndeterminate(this.indeterminate)},methods:{computedLocalCheckedWatcher:function(t,e){if(!Ua(t,e)){this.$emit(Of,t);var i=this.$refs.input;i&&this.$emit(Af,i.indeterminate)}},handleChange:function(t){var e=this,i=t.target,n=i.checked,o=i.indeterminate,r=this.value,s=this.uncheckedValue,a=this.computedLocalChecked;if(Rt(a)){var l=yf(a,r);n&&l<0?a=a.concat(r):!n&&l>-1&&(a=a.slice(0,l).concat(a.slice(l+1)))}else a=n?r:s;this.computedLocalChecked=a,this.$nextTick((function(){e.$emit($n,a),e.isGroup&&e.bvGroup.$emit($n,a),e.$emit(Af,o)}))},setIndeterminate:function(t){Rt(this.computedLocalChecked)&&(t=!1);var e=this.$refs.input;e&&(e.indeterminate=t,this.$emit(Af,t))}}}),Hf=vs(ee(c(c(c(c(c({},fc),Tf),Vf),kf),Bf)),fi),zf=i.default.extend({name:fi,mixins:[pc,Ef,Cf,$f,_f],inject:{bvGroup:{from:"bvRadioGroup",default:!1}},props:Hf,watch:{computedLocalChecked:function(t,e){Ua(t,e)||this.$emit(Of,t)}}}),Nf=["aria-describedby","aria-labelledby"],jf=ys("checked"),Gf=jf.mixin,Wf=jf.props,Yf=jf.prop,Uf=jf.event,qf=vs(ee(c(c(c(c(c(c(c(c({},fc),Wf),Tf),sf),kf),Bf),xf),{},{ariaInvalid:hs(ko,!1),buttonVariant:hs(go),buttons:hs(ho,!1),stacked:hs(ho,!1),validated:hs(ho,!1)})),"formRadioCheckGroups"),Kf=i.default.extend({mixins:[pc,Gf,Cs,Cf,af,$f,_f,Sf],inheritAttrs:!1,props:qf,data:function(){return{localChecked:this[Yf]}},computed:{inline:function(){return!this.stacked},groupName:function(){return this.name||this.safeId()},groupClasses:function(){var t=this.inline,e=this.size,i={"was-validated":this.validated};return this.buttons&&(i=[i,"btn-group-toggle",a({"btn-group":t,"btn-group-vertical":!t},"btn-group-".concat(e),e)]),i}},watch:(yh={},a(yh,Yf,(function(t){Ua(t,this.localChecked)||(this.localChecked=t)})),a(yh,"localChecked",(function(t,e){Ua(t,e)||this.$emit(Uf,t)})),yh),render:function(t){var e=this,i=this.isRadioGroup,n=Jt(this.$attrs,Nf),o=i?zf:Mf,r=this.formOptions.map((function(i,r){var s="BV_option_".concat(r);return t(o,{props:{disabled:i.disabled||!1,id:e.safeId(s),value:i.value},attrs:n,key:s},[t("span",{domProps:Fl(i.html,i.text)})])}));return t("div",{class:[this.groupClasses,"bv-no-focus-ring"],attrs:c(c({},Qt(this.$attrs,Nf)),{},{"aria-invalid":this.computedAriaInvalid,"aria-required":this.required?"true":null,id:this.safeId(),role:i?"radiogroup":"group",tabindex:"-1"})},[this.normalizeSlot(Ho),r,this.normalizeSlot()])}}),Xf=vs(ee(c(c({},qf),{},(a(wh={},Yf,hs(uo,[])),a(wh,"switches",hs(ho,!1)),wh))),si),Zf=i.default.extend({name:si,mixins:[Kf],provide:function(){return{bvCheckGroup:this}},props:Xf,computed:{isRadioGroup:function(){return!1}}}),Jf=me({components:{BFormCheckbox:Mf,BCheckbox:Mf,BCheck:Mf,BFormCheckboxGroup:Zf,BCheckboxGroup:Zf,BCheckGroup:Zf}}),Qf="__BV_hover_handler__",tp="mouseenter",ep=function(t,e,i){$s(t,e,tp,i,lo),$s(t,e,"mouseleave",i,lo)},ip=function(t,e){var i=e.value,n=void 0===i?null:i;if(M){var o=t[Qf],r=Ot(o),s=!(r&&o.fn===n);r&&s&&(ep(!1,t,o),delete t[Qf]),Ot(n)&&s&&(t[Qf]=function(t){var e=function(e){t(e.type===tp,e)};return e.fn=t,e}(n),ep(!0,t,t[Qf]))}},np={bind:ip,componentUpdated:ip,unbind:function(t){ip(t,{value:null})}},op=ee(c(c(c(c(c(c({},fc),kf),Bf),Qt(Oh,["disabled"])),Qt(Tf,["autofocus"])),{},{buttonOnly:hs(ho,!1),buttonVariant:hs(go,"secondary"),formattedValue:hs(go),labelSelected:hs(go),lang:hs(go),menuClass:hs(To),placeholder:hs(go),readonly:hs(ho,!1),rtl:hs(ho,null),value:hs(go,"")})),rp=i.default.extend({name:"BVFormBtnLabelControl",directives:{"b-hover":np},mixins:[pc,$f,_f,Vh,Cs],props:op,data:function(){return{isHovered:!1,hasFocus:!1}},computed:{idButton:function(){return this.safeId()},idLabel:function(){return this.safeId("_value_")},idMenu:function(){return this.safeId("_dialog_")},idWrapper:function(){return this.safeId("_outer_")},computedDir:function(){return!0===this.rtl?"rtl":!1===this.rtl?"ltr":null}},methods:{focus:function(){this.disabled||ts(this.$refs.toggle)},blur:function(){this.disabled||es(this.$refs.toggle)},setFocus:function(t){this.hasFocus="focus"===t.type},handleHover:function(t){this.isHovered=t}},render:function(t){var e,i=this.idButton,n=this.idLabel,o=this.idMenu,r=this.idWrapper,s=this.disabled,l=this.readonly,c=this.required,u=this.name,d=this.state,h=this.visible,f=this.size,p=this.isHovered,m=this.hasFocus,v=this.labelSelected,b=this.buttonVariant,g=this.buttonOnly,y=vr(this.value)||"",w=!1===d||c&&!y,T={isHovered:p,hasFocus:m,state:d,opened:h},C=t("button",{staticClass:"btn",class:(e={},a(e,"btn-".concat(b),g),a(e,"btn-".concat(f),f),a(e,"h-auto",!g),a(e,"dropdown-toggle",g),a(e,"dropdown-toggle-no-caret",g),e),attrs:{id:i,type:"button",disabled:s,"aria-haspopup":"dialog","aria-expanded":h?"true":"false","aria-invalid":w?"true":null,"aria-required":c?"true":null},directives:[{name:"b-hover",value:this.handleHover}],on:{mousedown:this.onMousedown,click:this.toggle,keydown:this.toggle,"!focus":this.setFocus,"!blur":this.setFocus},ref:"toggle"},[this.hasNormalizedSlot(Eo)?this.normalizeSlot(Eo,T):t(Ta,{props:{scale:1.25}})]),x=t();u&&!s&&(x=t("input",{attrs:{type:"hidden",name:u||null,form:this.form||null,value:y}}));var S=t("div",{staticClass:"dropdown-menu",class:[this.menuClass,{show:h,"dropdown-menu-right":this.right}],attrs:{id:o,role:"dialog",tabindex:"-1","aria-modal":"false","aria-labelledby":n},on:{keydown:this.onKeydown},ref:"menu"},[this.normalizeSlot(Ao,{opened:h})]),k=t("label",{class:g?"sr-only":["form-control",{"text-muted":!y},this.stateClass,this.sizeFormClass],attrs:{id:n,for:i,"aria-invalid":w?"true":null,"aria-required":c?"true":null},directives:[{name:"b-hover",value:this.handleHover}],on:{"!click":function(t){Bs(t,{preventDefault:!1})}}},[y?this.formattedValue||y:this.placeholder||"",y&&v?t("bdi",{staticClass:"sr-only"},v):""]);return t("div",{staticClass:"b-form-btn-label-control dropdown",class:[this.directionClass,this.boundaryClass,[{"btn-group":g,"form-control":!g,focus:m&&!g,show:h,"is-valid":!0===d,"is-invalid":!1===d},g?null:this.sizeFormClass]],attrs:{id:r,role:g?null:"group",lang:this.lang||null,dir:this.computedDir,"aria-disabled":s,"aria-readonly":l&&!s,"aria-labelledby":n,"aria-invalid":!1===d||c&&!y?"true":null,"aria-required":c?"true":null}},[C,x,S,k])}}),sp=ys("value",{type:$o}),ap=sp.mixin,lp=sp.props,cp=sp.prop,up=sp.event,dp=Qt(wc,["block","hidden","id","noKeyNav","roleDescription","value","width"]),hp=Qt(op,["formattedValue","id","lang","rtl","value"]),fp=vs(ee(c(c(c(c(c({},fc),lp),dp),hp),{},{calendarWidth:hs(go,"270px"),closeButton:hs(ho,!1),closeButtonVariant:hs(go,"outline-secondary"),dark:hs(ho,!1),labelCloseButton:hs(go,"Close"),labelResetButton:hs(go,"Reset"),labelTodayButton:hs(go,"Select today"),noCloseOnSelect:hs(ho,!1),resetButton:hs(ho,!1),resetButtonVariant:hs(go,"outline-danger"),resetValue:hs($o),todayButton:hs(ho,!1),todayButtonVariant:hs(go,"outline-primary")})),li),pp=i.default.extend({name:li,mixins:[pc,ap],props:fp,data:function(){return{localYMD:Jl(this[cp])||"",isVisible:!1,localLocale:null,isRTL:!1,formattedValue:"",activeYMD:""}},computed:{calendarYM:function(){return this.activeYMD.slice(0,-3)},computedLang:function(){return(this.localLocale||"").replace(/-u-.*$/i,"")||null},computedResetValue:function(){return Jl(uc(this.resetValue))||""}},watch:(Th={},a(Th,cp,(function(t){this.localYMD=Jl(t)||""})),a(Th,"localYMD",(function(t){this.isVisible&&this.$emit(up,this.valueAsDate?Zl(t)||null:t||"")})),a(Th,"calendarYM",(function(t,e){if(t!==e&&e)try{this.$refs.control.updatePopper()}catch(t){}})),Th),methods:{focus:function(){this.disabled||ts(this.$refs.control)},blur:function(){this.disabled||es(this.$refs.control)},setAndClose:function(t){var e=this;this.localYMD=t,this.noCloseOnSelect||this.$nextTick((function(){e.$refs.control.hide(!0)}))},onSelected:function(t){var e=this;this.$nextTick((function(){e.setAndClose(t)}))},onInput:function(t){this.localYMD!==t&&(this.localYMD=t)},onContext:function(t){var e=t.activeYMD,i=t.isRTL,n=t.locale,o=t.selectedYMD,r=t.selectedFormatted;this.isRTL=i,this.localLocale=n,this.formattedValue=r,this.localYMD=o,this.activeYMD=e,this.$emit(Dn,t)},onTodayButton:function(){this.setAndClose(Jl(uc(Xl(),this.min,this.max)))},onResetButton:function(){this.setAndClose(this.computedResetValue)},onCloseButton:function(){this.$refs.control.hide(!0)},onShow:function(){this.isVisible=!0},onShown:function(){var t=this;this.$nextTick((function(){ts(t.$refs.calendar),t.$emit(eo)}))},onHidden:function(){this.isVisible=!1,this.$emit(zn)},defaultButtonFn:function(t){var e=t.isHovered,i=t.hasFocus;return this.$createElement(e||i?ga:ba,{attrs:{"aria-hidden":"true"}})}},render:function(t){var e=this.localYMD,i=this.disabled,n=this.readonly,o=this.dark,r=this.$props,s=this.$scopedSlots,l=Pt(this.placeholder)?this.labelNoDateSelected:this.placeholder,u=[];if(this.todayButton){var d=this.labelTodayButton;u.push(t(ml,{props:{disabled:i||n,size:"sm",variant:this.todayButtonVariant},attrs:{"aria-label":d||null},on:{click:this.onTodayButton}},d))}if(this.resetButton){var h=this.labelResetButton;u.push(t(ml,{props:{disabled:i||n,size:"sm",variant:this.resetButtonVariant},attrs:{"aria-label":h||null},on:{click:this.onResetButton}},h))}if(this.closeButton){var f=this.labelCloseButton;u.push(t(ml,{props:{disabled:i,size:"sm",variant:this.closeButtonVariant},attrs:{"aria-label":f||null},on:{click:this.onCloseButton}},f))}u.length>0&&(u=[t("div",{staticClass:"b-form-date-controls d-flex flex-wrap",class:{"justify-content-between":u.length>1,"justify-content-end":u.length<2}},u)]);var p=t(Tc,{staticClass:"b-form-date-calendar w-100",props:c(c({},ps(dp,r)),{},{hidden:!this.isVisible,value:e,valueAsDate:!1,width:this.calendarWidth}),on:{selected:this.onSelected,input:this.onInput,context:this.onContext},scopedSlots:Jt(s,["nav-prev-decade","nav-prev-year","nav-prev-month","nav-this-month","nav-next-month","nav-next-year","nav-next-decade"]),key:"calendar",ref:"calendar"},u);return t(rp,{staticClass:"b-form-datepicker",props:c(c({},ps(hp,r)),{},{formattedValue:e?this.formattedValue:"",id:this.safeId(),lang:this.computedLang,menuClass:[{"bg-dark":o,"text-light":o},this.menuClass],placeholder:l,rtl:this.isRTL,value:e}),on:{show:this.onShow,shown:this.onShown,hidden:this.onHidden},scopedSlots:a({},Eo,s["button-content"]||this.defaultButtonFn),ref:"control"},[p])}}),mp=me({components:{BFormDatepicker:pp,BDatepicker:pp}}),vp=ys("value",{type:[uo,_t],defaultValue:null,validator:function(t){return""===t?(le(Tp,ci),!0):Pt(t)||Cp(t)}}),bp=vp.mixin,gp=vp.props,yp=vp.prop,wp=vp.event,Tp='Setting "value"/"v-model" to an empty string for reset is deprecated. Set to "null" instead.',Cp=function t(e){return function(t){return t instanceof _t}(e)||Rt(e)&&e.every((function(e){return t(e)}))},xp=function(t){return Ot(t.getAsEntry)?t.getAsEntry():Ot(t.webkitGetAsEntry)?t.webkitGetAsEntry():null},Sp=function t(e){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return new Promise((function(n){var o=[];!function r(){e.readEntries((function(e){0===e.length?n(Promise.all(o).then((function(t){return sr(t)}))):(o.push(Promise.all(e.map((function(e){if(e){if(e.isDirectory)return t(e.createReader(),"".concat(i).concat(e.name,"/"));if(e.isFile)return new Promise((function(t){e.file((function(e){e.$path="".concat(i).concat(e.name),t(e)}))}))}return null})).filter(ne))),r())}))}()}))},kp=vs(ee(c(c(c(c(c(c(c({},fc),gp),Tf),xf),Bf),kf),{},{accept:hs(go,""),browseText:hs(go,"Browse"),capture:hs(ho,!1),directory:hs(ho,!1),dropPlaceholder:hs(go,"Drop files here"),fileNameFormatter:hs(po),multiple:hs(ho,!1),noDrop:hs(ho,!1),noDropPlaceholder:hs(go,"Not allowed"),noTraverse:hs(ho,!1),placeholder:hs(go,"No file chosen")})),ci),$p=i.default.extend({name:ci,mixins:[Za,pc,bp,Cs,Cf,_f,Sf,Cs],inheritAttrs:!1,props:kp,data:function(){return{files:[],dragging:!1,dropAllowed:!this.noDrop,hasFocus:!1}},computed:{computedAccept:function(){var t=this.accept;return 0===(t=(t||"").trim().split(/[,\s]+/).filter(ne)).length?null:t.map((function(t){var e="name",i="^",n="$";return tt.test(t)?i="":(e="type",dt.test(t)&&(n=".+$",t=t.slice(0,-1))),t=mr(t),{rx:new RegExp("".concat(i).concat(t).concat(n)),prop:e}}))},computedCapture:function(){var t=this.capture;return!0===t||""===t||(t||null)},computedAttrs:function(){var t=this.name,e=this.disabled,i=this.required,n=this.form,o=this.computedCapture,r=this.accept,s=this.multiple,a=this.directory;return c(c({},this.bvAttrs),{},{type:"file",id:this.safeId(),name:t,disabled:e,required:i,form:n||null,capture:o,accept:r||null,multiple:s,directory:a,webkitdirectory:a,"aria-required":i?"true":null})},computedFileNameFormatter:function(){var t=this.fileNameFormatter;return gs(t)?t:this.defaultFileNameFormatter},clonedFiles:function(){return ie(this.files)},flattenedFiles:function(){return ar(this.files)},fileNames:function(){return this.flattenedFiles.map((function(t){return t.name}))},labelContent:function(){if(this.dragging&&!this.noDrop)return this.normalizeSlot("drop-placeholder",{allowed:this.dropAllowed})||(this.dropAllowed?this.dropPlaceholder:this.$createElement("span",{staticClass:"text-danger"},this.noDropPlaceholder));if(0===this.files.length)return this.normalizeSlot("placeholder")||this.placeholder;var t=this.flattenedFiles,e=this.clonedFiles,i=this.fileNames,n=this.computedFileNameFormatter;return this.hasNormalizedSlot(Mo)?this.normalizeSlot(Mo,{files:t,filesTraversed:e,names:i}):n(t,e,i)}},watch:(Ch={},a(Ch,yp,(function(t){(!t||Rt(t)&&0===t.length)&&this.reset()})),a(Ch,"files",(function(t,e){if(!Ua(t,e)){var i=this.multiple,n=this.noTraverse,o=!i||n?ar(t):t;this.$emit(wp,i?o:o[0]||null)}})),Ch),created:function(){this.$_form=null},mounted:function(){var t=Er("form",this.$el);t&&(Ss(t,"reset",this.reset,ao),this.$_form=t)},beforeDestroy:function(){var t=this.$_form;t&&ks(t,"reset",this.reset,ao)},methods:{isFileValid:function(t){if(!t)return!1;var e=this.computedAccept;return!e||e.some((function(e){return e.rx.test(t[e.prop])}))},isFilesArrayValid:function(t){var e=this;return Rt(t)?t.every((function(t){return e.isFileValid(t)})):this.isFileValid(t)},defaultFileNameFormatter:function(t,e,i){return i.join(", ")},setFiles:function(t){this.dropAllowed=!this.noDrop,this.dragging=!1,this.files=this.multiple?this.directory?t:ar(t):ar(t).slice(0,1)},setInputFiles:function(t){try{var e=new ClipboardEvent("").clipboardData||new DataTransfer;ar(ie(t)).forEach((function(t){delete t.$path,e.items.add(t)})),this.$refs.input.files=e.files}catch(t){}},reset:function(){try{var t=this.$refs.input;t.value="",t.type="",t.type="file"}catch(t){}this.files=[]},handleFiles:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(e){var i=t.filter(this.isFilesArrayValid);i.length>0&&(this.setFiles(i),this.setInputFiles(i))}else this.setFiles(t)},focusHandler:function(t){this.plain||"focusout"===t.type?this.hasFocus=!1:this.hasFocus=!0},onChange:function(t){var e=this,i=t.type,n=t.target,o=t.dataTransfer,r=void 0===o?{}:o,s="drop"===i;this.$emit($n,t);var a=ir(r.items||[]);if(A&&a.length>0&&!It(xp(a[0])))(function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return Promise.all(ir(t).filter((function(t){return"file"===t.kind})).map((function(t){var i=xp(t);if(i){if(i.isDirectory&&e)return Sp(i.createReader(),"".concat(i.name,"/"));if(i.isFile)return new Promise((function(t){i.file((function(e){e.$path="",t(e)}))}))}return null})).filter(ne))})(a,this.directory).then((function(t){return e.handleFiles(t,s)}));else{var l=ir(n.files||r.files||[]).map((function(t){return t.$path=t.webkitRelativePath||"",t}));this.handleFiles(l,s)}},onDragenter:function(t){Bs(t),this.dragging=!0;var e=t.dataTransfer,i=void 0===e?{}:e;if(this.noDrop||this.disabled||!this.dropAllowed)return i.dropEffect="none",void(this.dropAllowed=!1);i.dropEffect="copy"},onDragover:function(t){Bs(t),this.dragging=!0;var e=t.dataTransfer,i=void 0===e?{}:e;if(this.noDrop||this.disabled||!this.dropAllowed)return i.dropEffect="none",void(this.dropAllowed=!1);i.dropEffect="copy"},onDragleave:function(t){var e=this;Bs(t),this.$nextTick((function(){e.dragging=!1,e.dropAllowed=!e.noDrop}))},onDrop:function(t){var e=this;Bs(t),this.dragging=!1,this.noDrop||this.disabled||!this.dropAllowed?this.$nextTick((function(){e.dropAllowed=!e.noDrop})):this.onChange(t)}},render:function(t){var e=this.custom,i=this.plain,n=this.size,o=this.dragging,r=this.stateClass,s=this.bvAttrs,l=t("input",{class:[{"form-control-file":i,"custom-file-input":e,focus:e&&this.hasFocus},r],style:e?{zIndex:-5}:{},attrs:this.computedAttrs,on:{change:this.onChange,focusin:this.focusHandler,focusout:this.focusHandler,reset:this.reset},ref:"input"});if(i)return l;var c=t("label",{staticClass:"custom-file-label",class:{dragging:o},attrs:{for:this.safeId(),"data-browse":this.browseText||null}},[t("span",{staticClass:"d-block form-file-text",style:{pointerEvents:"none"}},[this.labelContent])]);return t("div",{staticClass:"custom-file b-form-file",class:[a({},"b-custom-control-".concat(n),n),r,s.class],style:s.style,attrs:{id:this.safeId("_BV_file_outer_")},on:{dragenter:this.onDragenter,dragover:this.onDragover,dragleave:this.onDragleave,drop:this.onDrop}},[l,c])}}),Bp=me({components:{BFormFile:$p,BFile:$p}}),_p=function(t){return"\\"+t},Dp=function(t){var e=(t=vr(t)).length,i=t.charCodeAt(0);return t.split("").reduce((function(n,o,r){var s=t.charCodeAt(r);return 0===s?n+"�":127===s||s>=1&&s<=31||0===r&&s>=48&&s<=57||1===r&&s>=48&&s<=57&&45===i?n+_p("".concat(s.toString(16)," ")):0===r&&45===s&&1===e?n+_p(o):s>=128||45===s||95===s||s>=48&&s<=57||s>=65&&s<=90||s>=97&&s<=122?n+o:n+_p(o)}),"")},Fp=["auto","start","end","center","baseline","stretch"],Ip=is((function(t,e,i){var n=t;if(!Pt(i)&&!1!==i)return e&&(n+="-".concat(e)),"col"!==t||""!==i&&!0!==i?(n+="-".concat(i),gr(n)):gr(n)})),Pp=Wt(null),Op={name:Ye,functional:!0,get props(){return delete this.props,this.props=(t=ls().filter(ne),e=t.reduce((function(t,e){return t[e]=hs(So),t}),Wt(null)),i=t.reduce((function(t,e){return t[ds(e,"offset")]=hs(_o),t}),Wt(null)),n=t.reduce((function(t,e){return t[ds(e,"order")]=hs(_o),t}),Wt(null)),Pp=Gt(Wt(null),{col:Kt(e),offset:Kt(i),order:Kt(n)}),vs(ee(c(c(c(c({},e),i),n),{},{alignSelf:hs(go,null,(function(t){return nr(Fp,t)})),col:hs(ho,!1),cols:hs(_o),offset:hs(_o),order:hs(_o),tag:hs(go,"div")})),Ye));var t,e,i,n},render:function(t,e){var i,n=e.props,o=e.data,r=e.children,s=n.cols,l=n.offset,c=n.order,u=n.alignSelf,d=[];for(var h in Pp)for(var f=Pp[h],p=0;p0||Kt(this.labelColProps).length>0}},watch:{ariaDescribedby:function(t,e){t!==e&&this.updateAriaDescribedby(t,e)}},mounted:function(){var t=this;this.$nextTick((function(){t.updateAriaDescribedby(t.ariaDescribedby)}))},methods:{getAlignClasses:function(t,e){return ls().reduce((function(i,n){var o=t[ds(n,"".concat(e,"Align"))]||null;return o&&i.push(["text",n,o].filter(ne).join("-")),i}),[])},getColProps:function(t,e){return ls().reduce((function(i,n){var o=t[ds(n,"".concat(e,"Cols"))];return Vt(o=""===o||(o||!1))||"auto"===o||(o=(o=lr(o,0))>0&&o),o&&(i[n||(Vt(o)?"col":"cols")]=o),i}),{})},updateAriaDescribedby:function(t,e){var i=this.labelFor;if(M&&i){var n=Or("#".concat(Dp(i)),this.$refs.content);if(n){var o="aria-describedby",r=(t||"").split(ut),s=(e||"").split(ut),a=(jr(n,o)||"").split(ut).filter((function(t){return!nr(s,t)})).concat(r).filter((function(t,e,i){return i.indexOf(t)===e})).filter(ne).join(" ").trim();a?zr(n,o,a):Nr(n,o)}}},onLegendClick:function(t){if(!this.labelFor){var e=t.target,i=e?e.tagName:"";if(-1===Lp.indexOf(i)){var n=Pr(Ep,this.$refs.content).filter(Dr);1===n.length&&ts(n[0])}}}},render:function(t){var e=this.computedState,i=this.feedbackAriaLive,n=this.isHorizontal,o=this.labelFor,r=this.normalizeSlot,s=this.safeId,a=this.tooltip,l=s(),u=!o,d=t(),h=r(jo)||this.label,f=h?s("_BV_label_"):null;if(h||n){var p=this.labelSize,m=this.labelColProps,v=u?"legend":"label";this.labelSrOnly?(h&&(d=t(v,{class:"sr-only",attrs:{id:f,for:o||null}},[h])),d=t(n?Op:"div",{props:n?m:{}},[d])):d=t(n?Op:v,{on:u?{click:this.onLegendClick}:{},props:n?c(c({},m),{},{tag:v}):{},attrs:{id:f,for:o||null,tabindex:u?"-1":null},class:[u?"bv-no-focus-ring":"",n||u?"col-form-label":"",!n&&u?"pt-0":"",n||u?"":"d-block",p?"col-form-label-".concat(p):"",this.labelAlignClasses,this.labelClass]},[h])}var b=t(),g=r("invalid-feedback")||this.invalidFeedback,y=g?s("_BV_feedback_invalid_"):null;g&&(b=t(ff,{props:{ariaLive:i,id:y,role:i?"alert":null,state:e,tooltip:a},attrs:{tabindex:g?"-1":null}},[g]));var w=t(),T=r("valid-feedback")||this.validFeedback,C=T?s("_BV_feedback_valid_"):null;T&&(w=t(mf,{props:{ariaLive:i,id:C,role:i?"alert":null,state:e,tooltip:a},attrs:{tabindex:T?"-1":null}},[T]));var x=t(),S=r("description")||this.description,k=S?s("_BV_description_"):null;S&&(x=t(df,{attrs:{id:k,tabindex:"-1"}},[S]));var $=this.ariaDescribedby=[k,!1===e?y:null,!0===e?C:null].filter(ne).join(" ")||null,B=t(n?Op:"div",{props:n?this.contentColProps:{},ref:"content"},[r(Ao,{ariaDescribedby:$,descriptionId:k,id:l,labelId:f})||t(),b,w,x]);return t(u?"fieldset":n?bf:"div",{staticClass:"form-group",class:[{"was-validated":this.validated},this.stateClass],attrs:{id:l,disabled:u?this.disabled:null,role:u?null:"group","aria-invalid":this.computedAriaInvalid,"aria-labelledby":u&&n?f:null}},n&&u?[t(bf,[d,B])]:[d,B])}},Rp=me({components:{BFormGroup:Ap,BFormFieldset:Ap}}),Mp=i.default.extend({computed:{selectionStart:{cache:!1,get:function(){return this.$refs.input.selectionStart},set:function(t){this.$refs.input.selectionStart=t}},selectionEnd:{cache:!1,get:function(){return this.$refs.input.selectionEnd},set:function(t){this.$refs.input.selectionEnd=t}},selectionDirection:{cache:!1,get:function(){return this.$refs.input.selectionDirection},set:function(t){this.$refs.input.selectionDirection=t}}},methods:{select:function(){var t;(t=this.$refs.input).select.apply(t,arguments)},setSelectionRange:function(){var t;(t=this.$refs.input).setSelectionRange.apply(t,arguments)},setRangeText:function(){var t;(t=this.$refs.input).setRangeText.apply(t,arguments)}}}),Hp=ys("value",{type:_o,defaultValue:"",event:"update"}),zp=Hp.mixin,Np=Hp.props,jp=Hp.prop,Gp=Hp.event,Wp=vs(ee(c(c({},Np),{},{ariaInvalid:hs(ko,!1),autocomplete:hs(go),debounce:hs(_o,0),formatter:hs(po),lazy:hs(ho,!1),lazyFormatter:hs(ho,!1),number:hs(ho,!1),placeholder:hs(go),plaintext:hs(ho,!1),readonly:hs(ho,!1),trim:hs(ho,!1)})),"formTextControls"),Yp=i.default.extend({mixins:[zp],props:Wp,data:function(){var t=this[jp];return{localValue:vr(t),vModelValue:this.modifyValue(t)}},computed:{computedClass:function(){var t=this.plaintext,e=this.type,i="range"===e,n="color"===e;return[{"custom-range":i,"form-control-plaintext":t&&!i&&!n,"form-control":n||!t&&!i},this.sizeFormClass,this.stateClass]},computedDebounce:function(){return Us(lr(this.debounce,0),0)},hasFormatter:function(){return gs(this.formatter)}},watch:a({},jp,(function(t){var e=vr(t),i=this.modifyValue(t);e===this.localValue&&i===this.vModelValue||(this.clearDebounce(),this.localValue=e,this.vModelValue=i)})),created:function(){this.$_inputDebounceTimer=null},mounted:function(){this.$on(oo,this.clearDebounce)},beforeDestroy:function(){this.clearDebounce()},methods:{clearDebounce:function(){clearTimeout(this.$_inputDebounceTimer),this.$_inputDebounceTimer=null},formatValue:function(t,e){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return t=vr(t),!this.hasFormatter||this.lazyFormatter&&!i||(t=this.formatter(t,e)),t},modifyValue:function(t){return t=vr(t),this.trim&&(t=t.trim()),this.number&&(t=cr(t,t)),t},updateValue:function(t){var e=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.lazy;if(!n||i){this.clearDebounce();var o=function(){if((t=e.modifyValue(t))!==e.vModelValue)e.vModelValue=t,e.$emit(Gp,t);else if(e.hasFormatter){var i=e.$refs.input;i&&t!==i.value&&(i.value=t)}},r=this.computedDebounce;r>0&&!n&&!i?this.$_inputDebounceTimer=setTimeout(o,r):o()}},onInput:function(t){if(!t.target.composing){var e=t.target.value,i=this.formatValue(e,t);!1===i||t.defaultPrevented?Bs(t,{propagation:!1}):(this.localValue=i,this.updateValue(i),this.$emit(jn,i))}},onChange:function(t){var e=t.target.value,i=this.formatValue(e,t);!1===i||t.defaultPrevented?Bs(t,{propagation:!1}):(this.localValue=i,this.updateValue(i,!0),this.$emit($n,i))},onBlur:function(t){var e=t.target.value,i=this.formatValue(e,t,!0);!1!==i&&(this.localValue=vr(this.modifyValue(i)),this.updateValue(i,!0)),this.$emit("blur",t)},focus:function(){this.disabled||ts(this.$el)},blur:function(){this.disabled||es(this.$el)}}}),Up=i.default.extend({computed:{validity:{cache:!1,get:function(){return this.$refs.input.validity}},validationMessage:{cache:!1,get:function(){return this.$refs.input.validationMessage}},willValidate:{cache:!1,get:function(){return this.$refs.input.willValidate}}},methods:{setCustomValidity:function(){var t;return(t=this.$refs.input).setCustomValidity.apply(t,arguments)},checkValidity:function(){var t;return(t=this.$refs.input).checkValidity.apply(t,arguments)},reportValidity:function(){var t;return(t=this.$refs.input).reportValidity.apply(t,arguments)}}}),qp=["text","password","email","number","url","tel","search","range","color","date","time","datetime","datetime-local","month","week"],Kp=vs(ee(c(c(c(c(c(c({},fc),Tf),kf),Bf),Wp),{},{list:hs(go),max:hs(_o),min:hs(_o),noWheel:hs(ho,!1),step:hs(_o),type:hs(go,"text",(function(t){return nr(qp,t)}))})),di),Xp=i.default.extend({name:di,mixins:[Qa,pc,Cf,$f,_f,Yp,Mp,Up],props:Kp,computed:{localType:function(){var t=this.type;return nr(qp,t)?t:"text"},computedAttrs:function(){var t=this.localType,e=this.name,i=this.form,n=this.disabled,o=this.placeholder,r=this.required,s=this.min,a=this.max,l=this.step;return{id:this.safeId(),name:e,form:i,type:t,disabled:n,placeholder:o,required:r,autocomplete:this.autocomplete||null,readonly:this.readonly||this.plaintext,min:s,max:a,step:l,list:"password"!==t?this.list:null,"aria-required":r?"true":null,"aria-invalid":this.computedAriaInvalid}},computedListeners:function(){return c(c({},this.bvListeners),{},{input:this.onInput,change:this.onChange,blur:this.onBlur})}},watch:{noWheel:function(t){this.setWheelStopper(t)}},mounted:function(){this.setWheelStopper(this.noWheel)},deactivated:function(){this.setWheelStopper(!1)},activated:function(){this.setWheelStopper(this.noWheel)},beforeDestroy:function(){this.setWheelStopper(!1)},methods:{setWheelStopper:function(t){var e=this.$el;$s(t,e,"focus",this.onWheelFocus),$s(t,e,"blur",this.onWheelBlur),t||ks(document,"wheel",this.stopWheel)},onWheelFocus:function(){Ss(document,"wheel",this.stopWheel)},onWheelBlur:function(){ks(document,"wheel",this.stopWheel)},stopWheel:function(t){Bs(t,{propagation:!1}),es(this.$el)}},render:function(t){return t("input",{class:this.computedClass,attrs:this.computedAttrs,domProps:{value:this.localValue},on:this.computedListeners,ref:"input"})}}),Zp=me({components:{BFormInput:Xp,BInput:Xp}}),Jp=vs(qf,pi),Qp=i.default.extend({name:pi,mixins:[Kf],provide:function(){return{bvRadioGroup:this}},props:Jp,computed:{isRadioGroup:function(){return!0}}}),tm=me({components:{BFormRadio:zf,BRadio:zf,BFormRadioGroup:Qp,BRadioGroup:Qp}}),em=ys("value",{type:_o,event:$n}),im=em.mixin,nm=em.props,om=em.prop,rm=em.event,sm=function(t){return Us(3,lr(t,5))},am=function(t,e,i){return Us(Ys(t,i),e)},lm=i.default.extend({name:"BVFormRatingStar",mixins:[Cs],props:{disabled:hs(ho,!1),focused:hs(ho,!1),hasClear:hs(ho,!1),rating:hs(mo,0),readonly:hs(ho,!1),star:hs(mo,0),variant:hs(go)},methods:{onClick:function(t){this.disabled||this.readonly||(Bs(t,{propagation:!1}),this.$emit(Qn,this.star))}},render:function(t){var e=this.rating,i=this.star,n=this.focused,o=this.hasClear,r=this.variant,s=this.disabled,a=this.readonly,l=o?0:1,c=e>=i?"full":e>=i-.5?"half":"empty",u={variant:r,disabled:s,readonly:a};return t("span",{staticClass:"b-rating-star",class:{focused:n&&e===i||!lr(e)&&i===l,"b-rating-star-empty":"empty"===c,"b-rating-star-half":"half"===c,"b-rating-star-full":"full"===c},attrs:{tabindex:s||a?null:"-1"},on:{click:this.onClick}},[t("span",{staticClass:"b-rating-icon"},[this.normalizeSlot(c,u)])])}}),cm=vs(ee(c(c(c(c(c({},fc),nm),Qt(Tf,["required","autofocus"])),kf),{},{color:hs(go),iconClear:hs(go,"x"),iconEmpty:hs(go,"star"),iconFull:hs(go,"star-fill"),iconHalf:hs(go,"star-half"),inline:hs(ho,!1),locale:hs(Co),noBorder:hs(ho,!1),precision:hs(_o),readonly:hs(ho,!1),showClear:hs(ho,!1),showValue:hs(ho,!1),showValueMax:hs(ho,!1),stars:hs(_o,5,(function(t){return lr(t)>=3})),variant:hs(go)})),mi),um=i.default.extend({name:mi,components:{BIconStar:Fa,BIconStarHalf:Pa,BIconStarFill:Ia,BIconX:Oa},mixins:[pc,im,$f],props:cm,data:function(){var t=cr(this[om],null),e=sm(this.stars);return{localValue:It(t)?null:am(t,0,e),hasFocus:!1}},computed:{computedStars:function(){return sm(this.stars)},computedRating:function(){var t=cr(this.localValue,0),e=lr(this.precision,3);return am(cr(t.toFixed(e)),0,this.computedStars)},computedLocale:function(){var t=or(this.locale).filter(ne);return new Intl.NumberFormat(t).resolvedOptions().locale},isInteractive:function(){return!this.disabled&&!this.readonly},isRTL:function(){return hc(this.computedLocale)},formattedRating:function(){var t=lr(this.precision),e=this.showValueMax,i=this.computedLocale,n={notation:"standard",minimumFractionDigits:isNaN(t)?0:t,maximumFractionDigits:isNaN(t)?3:t},o=this.computedStars.toLocaleString(i),r=this.localValue;return r=It(r)?e?"-":"":r.toLocaleString(i,n),e?"".concat(r,"/").concat(o):r}},watch:(xh={},a(xh,om,(function(t,e){if(t!==e){var i=cr(t,null);this.localValue=It(i)?null:am(i,0,this.computedStars)}})),a(xh,"localValue",(function(t,e){t!==e&&t!==(this.value||0)&&this.$emit(rm,t||null)})),a(xh,"disabled",(function(t){t&&(this.hasFocus=!1,this.blur())})),xh),methods:{focus:function(){this.disabled||ts(this.$el)},blur:function(){this.disabled||es(this.$el)},onKeydown:function(t){var e=t.keyCode;if(this.isInteractive&&nr([Na,Ra,ja,Wa],e)){Bs(t,{propagation:!1});var i=lr(this.localValue,0),n=this.showClear?0:1,o=this.computedStars,r=this.isRTL?-1:1;e===Na?this.localValue=am(i-r,n,o)||null:e===ja?this.localValue=am(i+r,n,o):e===Ra?this.localValue=am(i-1,n,o)||null:e===Wa&&(this.localValue=am(i+1,n,o))}},onSelected:function(t){this.isInteractive&&(this.localValue=t)},onFocus:function(t){this.hasFocus=!!this.isInteractive&&"focus"===t.type},renderIcon:function(t){return this.$createElement(Aa,{props:{icon:t,variant:this.disabled||this.color?null:this.variant||null}})},iconEmptyFn:function(){return this.renderIcon(this.iconEmpty)},iconHalfFn:function(){return this.renderIcon(this.iconHalf)},iconFullFn:function(){return this.renderIcon(this.iconFull)},iconClearFn:function(){return this.$createElement(Aa,{props:{icon:this.iconClear}})}},render:function(t){var e=this,i=this.disabled,n=this.readonly,o=this.name,r=this.form,s=this.inline,a=this.variant,l=this.color,c=this.noBorder,u=this.hasFocus,d=this.computedRating,h=this.computedStars,f=this.formattedRating,p=this.showClear,m=this.isRTL,v=this.isInteractive,b=this.$scopedSlots,g=[];if(p&&!i&&!n){var y=t("span",{staticClass:"b-rating-icon"},[(b["icon-clear"]||this.iconClearFn)()]);g.push(t("span",{staticClass:"b-rating-star b-rating-star-clear flex-grow-1",class:{focused:u&&0===d},attrs:{tabindex:v?"-1":null},on:{click:function(){return e.onSelected(null)}},key:"clear"},[y]))}for(var w=0;w1&&void 0!==arguments[1]?arguments[1]:null;if(Ht(t)){var i=re(t,this.valueField),n=re(t,this.textField),o=re(t,this.optionsField,null);return It(o)?{value:Ft(i)?e||n:i,text:String(Ft(n)?e:n),html:re(t,this.htmlField),disabled:Boolean(re(t,this.disabledField))}:{label:String(re(t,this.labelField)||n),options:this.normalizeOptions(o)}}return{value:e||t,text:String(t),disabled:!1}}}}),ym=vs({disabled:hs(ho,!1),value:hs(co,void 0,!0)},gi),wm=i.default.extend({name:gi,functional:!0,props:ym,render:function(t,e){var i=e.props,n=e.data,o=e.children,r=i.value;return t("option",F(n,{attrs:{disabled:i.disabled},domProps:{value:r}}),o)}}),Tm=vs(ee(c(c({},sf),{},{label:hs(go,void 0,!0)})),yi),Cm=i.default.extend({name:yi,mixins:[Cs,af],props:Tm,render:function(t){var e=this.label,i=this.formOptions.map((function(e,i){var n=e.value,o=e.text,r=e.html,s=e.disabled;return t(wm,{attrs:{value:n,disabled:s},domProps:Fl(r,o),key:"option_".concat(i)})}));return t("optgroup",{attrs:{label:e}},[this.normalizeSlot(Ho),i,this.normalizeSlot()])}}),xm=vs(ee(c(c(c(c(c(c(c({},fc),pm),Tf),xf),kf),Bf),{},{ariaInvalid:hs(ko,!1),multiple:hs(ho,!1),selectSize:hs(mo,0)})),bi),Sm=i.default.extend({name:bi,mixins:[pc,fm,Cf,$f,_f,Sf,gm,Cs],props:xm,data:function(){return{localValue:this[mm]}},computed:{computedSelectSize:function(){return this.plain||0!==this.selectSize?this.selectSize:null},inputClass:function(){return[this.plain?"form-control":"custom-select",this.size&&this.plain?"form-control-".concat(this.size):null,this.size&&!this.plain?"custom-select-".concat(this.size):null,this.stateClass]}},watch:{value:function(t){this.localValue=t},localValue:function(){this.$emit(vm,this.localValue)}},methods:{focus:function(){ts(this.$refs.input)},blur:function(){es(this.$refs.input)},onChange:function(t){var e=this,i=t.target,n=ir(i.options).filter((function(t){return t.selected})).map((function(t){return"_value"in t?t._value:t.value}));this.localValue=i.multiple?n:n[0],this.$nextTick((function(){e.$emit($n,e.localValue)}))}},render:function(t){var e=this.name,i=this.disabled,n=this.required,o=this.computedSelectSize,r=this.localValue,s=this.formOptions.map((function(e,i){var n=e.value,o=e.label,r=e.options,s=e.disabled,a="option_".concat(i);return Rt(r)?t(Cm,{props:{label:o,options:r},key:a}):t(wm,{props:{value:n,disabled:s},domProps:Fl(e.html,e.text),key:a})}));return t("select",{class:this.inputClass,attrs:{id:this.safeId(),name:e,form:this.form||null,multiple:this.multiple||null,size:o,disabled:i,required:n,"aria-required":n?"true":null,"aria-invalid":this.computedAriaInvalid},on:{change:this.onChange},directives:[{name:"model",value:r}],ref:"input"},[this.normalizeSlot(Ho),s,this.normalizeSlot()])}}),km=me({components:{BFormSelect:Sm,BFormSelectOption:wm,BFormSelectOptionGroup:Cm,BSelect:Sm,BSelectOption:wm,BSelectOptionGroup:Cm}}),$m=ys("value",{type:xo}),Bm=$m.mixin,_m=$m.props,Dm=$m.prop,Fm=$m.event,Im=[Wa,Ra,za,Ma,33,34],Pm=vs(ee(c(c(c(c(c(c({},fc),_m),Qt(Tf,["required","autofocus"])),kf),Bf),{},{ariaControls:hs(go),ariaLabel:hs(go),formatterFn:hs(po),inline:hs(ho,!1),labelDecrement:hs(go,"Decrement"),labelIncrement:hs(go,"Increment"),locale:hs(Co),max:hs(_o,100),min:hs(_o,1),placeholder:hs(go),readonly:hs(ho,!1),repeatDelay:hs(_o,500),repeatInterval:hs(_o,100),repeatStepMultiplier:hs(_o,4),repeatThreshold:hs(_o,10),step:hs(_o,1),vertical:hs(ho,!1),wrap:hs(ho,!1)})),wi),Om=i.default.extend({name:wi,mixins:[Za,pc,Bm,$f,_f,Cs],inheritAttrs:!1,props:Pm,data:function(){return{localValue:cr(this[Dm],null),hasFocus:!1}},computed:{spinId:function(){return this.safeId()},computedInline:function(){return this.inline&&!this.vertical},computedReadonly:function(){return this.readonly&&!this.disabled},computedRequired:function(){return this.required&&!this.computedReadonly&&!this.disabled},computedStep:function(){return cr(this.step,1)},computedMin:function(){return cr(this.min,1)},computedMax:function(){var t=cr(this.max,100),e=this.computedStep,i=this.computedMin;return Xs((t-i)/e)*e+i},computedDelay:function(){var t=lr(this.repeatDelay,0);return t>0?t:500},computedInterval:function(){var t=lr(this.repeatInterval,0);return t>0?t:100},computedThreshold:function(){return Us(lr(this.repeatThreshold,10),1)},computedStepMultiplier:function(){return Us(lr(this.repeatStepMultiplier,4),1)},computedPrecision:function(){var t=this.computedStep;return Xs(t)===t?0:(t.toString().split(".")[1]||"").length},computedMultiplier:function(){return Zs(10,this.computedPrecision||0)},valueAsFixed:function(){var t=this.localValue;return It(t)?"":t.toFixed(this.computedPrecision)},computedLocale:function(){var t=or(this.locale).filter(ne);return new Intl.NumberFormat(t).resolvedOptions().locale},computedRTL:function(){return hc(this.computedLocale)},defaultFormatter:function(){var t=this.computedPrecision;return new Intl.NumberFormat(this.computedLocale,{style:"decimal",useGrouping:!1,minimumIntegerDigits:1,minimumFractionDigits:t,maximumFractionDigits:t,notation:"standard"}).format},computedFormatter:function(){var t=this.formatterFn;return gs(t)?t:this.defaultFormatter},computedAttrs:function(){return c(c({},this.bvAttrs),{},{role:"group",lang:this.computedLocale,tabindex:this.disabled?null:"-1",title:this.ariaLabel})},computedSpinAttrs:function(){var t=this.spinId,e=this.localValue,i=this.computedRequired,n=this.disabled,o=this.state,r=this.computedFormatter,s=!It(e);return c(c({dir:this.computedRTL?"rtl":"ltr"},this.bvAttrs),{},{id:t,role:"spinbutton",tabindex:n?null:"0","aria-live":"off","aria-label":this.ariaLabel||null,"aria-controls":this.ariaControls||null,"aria-invalid":!1===o||!s&&i?"true":null,"aria-required":i?"true":null,"aria-valuemin":vr(this.computedMin),"aria-valuemax":vr(this.computedMax),"aria-valuenow":s?e:null,"aria-valuetext":s?r(e):null})}},watch:(Sh={},a(Sh,Dm,(function(t){this.localValue=cr(t,null)})),a(Sh,"localValue",(function(t){this.$emit(Fm,t)})),a(Sh,"disabled",(function(t){t&&this.clearRepeat()})),a(Sh,"readonly",(function(t){t&&this.clearRepeat()})),Sh),created:function(){this.$_autoDelayTimer=null,this.$_autoRepeatTimer=null,this.$_keyIsDown=!1},beforeDestroy:function(){this.clearRepeat()},deactivated:function(){this.clearRepeat()},methods:{focus:function(){this.disabled||ts(this.$refs.spinner)},blur:function(){this.disabled||es(this.$refs.spinner)},emitChange:function(){this.$emit($n,this.localValue)},stepValue:function(t){var e=this.localValue;if(!this.disabled&&!It(e)){var i=this.computedStep*t,n=this.computedMin,o=this.computedMax,r=this.computedMultiplier,s=this.wrap;e=Js((e-n)/i)*i+n+i,e=Js(e*r)/r,this.localValue=e>o?s?n:o:e0&&void 0!==arguments[0]?arguments[0]:1,e=this.localValue;It(e)?this.localValue=this.computedMin:this.stepValue(1*t)},stepDown:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,e=this.localValue;It(e)?this.localValue=this.wrap?this.computedMax:this.computedMin:this.stepValue(-1*t)},onKeydown:function(t){var e=t.keyCode,i=t.altKey,n=t.ctrlKey,o=t.metaKey;if(!(this.disabled||this.readonly||i||n||o)&&nr(Im,e)){if(Bs(t,{propagation:!1}),this.$_keyIsDown)return;this.resetTimers(),nr([Wa,Ra],e)?(this.$_keyIsDown=!0,e===Wa?this.handleStepRepeat(t,this.stepUp):e===Ra&&this.handleStepRepeat(t,this.stepDown)):33===e?this.stepUp(this.computedStepMultiplier):34===e?this.stepDown(this.computedStepMultiplier):e===za?this.localValue=this.computedMin:e===Ma&&(this.localValue=this.computedMax)}},onKeyup:function(t){var e=t.keyCode,i=t.altKey,n=t.ctrlKey,o=t.metaKey;this.disabled||this.readonly||i||n||o||nr(Im,e)&&(Bs(t,{propagation:!1}),this.resetTimers(),this.$_keyIsDown=!1,this.emitChange())},handleStepRepeat:function(t,e){var i=this,n=t||{},o=n.type,r=n.button;if(!this.disabled&&!this.readonly){if("mousedown"===o&&r)return;this.resetTimers(),e(1);var s=this.computedThreshold,a=this.computedStepMultiplier,l=this.computedDelay,c=this.computedInterval;this.$_autoDelayTimer=setTimeout((function(){var t=0;i.$_autoRepeatTimer=setInterval((function(){e(t0&&i.indexOf(t)===e}))},Wm=function(t){return Et(t)?t:Nt(t)&&t.target.value||""},Ym=vs(ee(c(c(c(c(c(c({},fc),Mm),Tf),kf),Bf),{},{addButtonText:hs(go,"Add"),addButtonVariant:hs(go,"outline-secondary"),addOnChange:hs(ho,!1),duplicateTagText:hs(go,"Duplicate tag(s)"),ignoreInputFocusSelector:hs(Co,jm),inputAttrs:hs(vo,{}),inputClass:hs(To),inputId:hs(go),inputType:hs(go,"text",(function(t){return nr(Nm,t)})),invalidTagText:hs(go,"Invalid tag(s)"),limit:hs(mo),limitTagsText:hs(go,"Tag limit reached"),noAddOnEnter:hs(ho,!1),noOuterFocus:hs(ho,!1),noTagRemove:hs(ho,!1),placeholder:hs(go,"Add tag..."),removeOnDelete:hs(ho,!1),separator:hs(Co),tagClass:hs(To),tagPills:hs(ho,!1),tagRemoveLabel:hs(go,"Remove tag"),tagRemovedLabel:hs(go,"Tag removed"),tagValidator:hs(po),tagVariant:hs(go,"secondary")})),Ci),Um=i.default.extend({name:Ci,mixins:[pc,Rm,Cf,$f,_f,Cs],props:Ym,data:function(){return{hasFocus:!1,newTag:"",tags:[],removedTags:[],tagsState:{all:[],valid:[],invalid:[],duplicate:[]}}},computed:{computedInputId:function(){return this.inputId||this.safeId("__input__")},computedInputType:function(){return nr(Nm,this.inputType)?this.inputType:"text"},computedInputAttrs:function(){var t=this.disabled,e=this.form;return c(c({},this.inputAttrs),{},{id:this.computedInputId,value:this.newTag,disabled:t,form:e})},computedInputHandlers:function(){return{input:this.onInputInput,change:this.onInputChange,keydown:this.onInputKeydown,reset:this.reset}},computedSeparator:function(){return or(this.separator).filter(Et).filter(ne).join("")},computedSeparatorRegExp:function(){var t=this.computedSeparator;return t?new RegExp("[".concat(mr(t).replace(ct,"\\s"),"]+")):null},computedJoiner:function(){var t=this.computedSeparator.charAt(0);return" "!==t?"".concat(t," "):t},computeIgnoreInputFocusSelector:function(){return or(this.ignoreInputFocusSelector).filter(ne).join(",").trim()},disableAddButton:function(){var t=this,e=br(this.newTag);return""===e||!this.splitTags(e).some((function(e){return!nr(t.tags,e)&&t.validateTag(e)}))},duplicateTags:function(){return this.tagsState.duplicate},hasDuplicateTags:function(){return this.duplicateTags.length>0},invalidTags:function(){return this.tagsState.invalid},hasInvalidTags:function(){return this.invalidTags.length>0},isLimitReached:function(){var t=this.limit;return Lt(t)&&t>=0&&this.tags.length>=t}},watch:(kh={},a(kh,Hm,(function(t){this.tags=Gm(t)})),a(kh,"tags",(function(t,e){Ua(t,this[Hm])||this.$emit(zm,t),Ua(t,e)||(t=or(t).filter(ne),e=or(e).filter(ne),this.removedTags=e.filter((function(e){return!nr(t,e)})))})),a(kh,"tagsState",(function(t,e){Ua(t,e)||this.$emit("tag-state",t.valid,t.invalid,t.duplicate)})),kh),created:function(){this.tags=Gm(this[Hm])},mounted:function(){var t=this,e=Er("form",this.$el);e&&(Ss(e,"reset",this.reset,ao),this.$on(oo,(function(){ks(e,"reset",t.reset,ao)})))},methods:{addTag:function(t){if(t=Et(t)?t:this.newTag,!this.disabled&&""!==br(t)&&!this.isLimitReached){var e=this.parseTags(t);if(e.valid.length>0||0===e.all.length)if(Vr(this.getInput(),"select"))this.newTag="";else{var i=[].concat(T(e.invalid),T(e.duplicate));this.newTag=e.all.filter((function(t){return nr(i,t)})).join(this.computedJoiner).concat(i.length>0?this.computedJoiner.charAt(0):"")}e.valid.length>0&&(this.tags=or(this.tags,e.valid)),this.tagsState=e,this.focus()}},removeTag:function(t){var e=this;this.disabled||(this.tags=this.tags.filter((function(e){return e!==t})),this.$nextTick((function(){e.focus()})))},reset:function(){var t=this;this.newTag="",this.tags=[],this.$nextTick((function(){t.removedTags=[],t.tagsState={all:[],valid:[],invalid:[],duplicate:[]}}))},onInputInput:function(t){if(!(this.disabled||Nt(t)&&t.target.composing)){var e=Wm(t),i=this.computedSeparatorRegExp;this.newTag!==e&&(this.newTag=e),e=vr(e).replace(ft,""),i&&i.test(e.slice(-1))?this.addTag():this.tagsState=""===e?{all:[],valid:[],invalid:[],duplicate:[]}:this.parseTags(e)}},onInputChange:function(t){if(!this.disabled&&this.addOnChange){var e=Wm(t);this.newTag!==e&&(this.newTag=e),this.addTag()}},onInputKeydown:function(t){if(!this.disabled&&Nt(t)){var e=t.keyCode,i=t.target.value||"";this.noAddOnEnter||e!==Ha?!this.removeOnDelete||8!==e&&46!==e||""!==i||(Bs(t,{propagation:!1}),this.tags=this.tags.slice(0,-1)):(Bs(t,{propagation:!1}),this.addTag())}},onClick:function(t){var e=this,i=this.computeIgnoreInputFocusSelector,n=t.target;this.disabled||_r(n)||i&&Er(i,n,!0)||this.$nextTick((function(){e.focus()}))},onFocusin:function(){this.hasFocus=!0},onFocusout:function(){this.hasFocus=!1},handleAutofocus:function(){var t=this;this.$nextTick((function(){xr((function(){t.autofocus&&!t.disabled&&t.focus()}))}))},focus:function(){this.disabled||ts(this.getInput())},blur:function(){this.disabled||es(this.getInput())},splitTags:function(t){t=vr(t);var e=this.computedSeparatorRegExp;return(e?t.split(e):[t]).map(br).filter(ne)},parseTags:function(t){var e=this,i=this.splitTags(t),n={all:i,valid:[],invalid:[],duplicate:[]};return i.forEach((function(t){nr(e.tags,t)||nr(n.valid,t)?nr(n.duplicate,t)||n.duplicate.push(t):e.validateTag(t)?n.valid.push(t):nr(n.invalid,t)||n.invalid.push(t)})),n},validateTag:function(t){var e=this.tagValidator;return!gs(e)||e(t)},getInput:function(){return Or("#".concat(Dp(this.computedInputId)),this.$el)},defaultRender:function(t){var e=t.addButtonText,i=t.addButtonVariant,n=t.addTag,o=t.disableAddButton,r=t.disabled,s=t.duplicateTagText,a=t.inputAttrs,l=t.inputClass,u=t.inputHandlers,d=t.inputType,h=t.invalidTagText,f=t.isDuplicate,p=t.isInvalid,m=t.isLimitReached,v=t.limitTagsText,b=t.noTagRemove,g=t.placeholder,y=t.removeTag,w=t.tagClass,T=t.tagPills,C=t.tagRemoveLabel,x=t.tagVariant,S=t.tags,k=this.$createElement,$=S.map((function(t){return t=vr(t),k(Lm,{class:w,props:{disabled:r,noRemove:b,pill:T,removeLabel:C,tag:"li",title:t,variant:x},on:{remove:function(){return y(t)}},key:"tags_".concat(t)},t)})),B=h&&p?this.safeId("__invalid_feedback__"):null,_=s&&f?this.safeId("__duplicate_feedback__"):null,D=v&&m?this.safeId("__limit_feedback__"):null,F=[a["aria-describedby"],B,_,D].filter(ne).join(" "),I=k("input",{staticClass:"b-form-tags-input w-100 flex-grow-1 p-0 m-0 bg-transparent border-0",class:l,style:{outline:0,minWidth:"5rem"},attrs:c(c({},a),{},{"aria-describedby":F||null,type:d,placeholder:g||null}),domProps:{value:a.value},on:u,directives:[{name:"model",value:a.value}],ref:"input"}),P=k(ml,{staticClass:"b-form-tags-button py-0",class:{invisible:o},style:{fontSize:"90%"},props:{disabled:o||m,variant:i},on:{click:function(){return n()}},ref:"button"},[this.normalizeSlot("add-button-text")||e]),O=this.safeId("__tag_list__"),V=k("li",{staticClass:"b-from-tags-field flex-grow-1",attrs:{role:"none","aria-live":"off","aria-controls":O},key:"tags_field"},[k("div",{staticClass:"d-flex",attrs:{role:"group"}},[I,P])]),E=k("ul",{staticClass:"b-form-tags-list list-unstyled mb-0 d-flex flex-wrap align-items-center",attrs:{id:O},key:"tags_list"},[$,V]),L=k();if(h||s||v){var A=this.computedJoiner,R=k();B&&(R=k(ff,{props:{id:B,forceShow:!0},key:"tags_invalid_feedback"},[this.invalidTagText,": ",this.invalidTags.join(A)]));var M=k();_&&(M=k(df,{props:{id:_},key:"tags_duplicate_feedback"},[this.duplicateTagText,": ",this.duplicateTags.join(A)]));var H=k();D&&(H=k(df,{props:{id:D},key:"tags_limit_feedback"},[v])),L=k("div",{attrs:{"aria-live":"polite","aria-atomic":"true"},key:"tags_feedback"},[R,M,H])}return[E,L]}},render:function(t){var e=this.name,i=this.disabled,n=this.required,o=this.form,r=this.tags,s=this.computedInputId,a=this.hasFocus,l=this.noOuterFocus,u=c({tags:r.slice(),inputAttrs:this.computedInputAttrs,inputType:this.computedInputType,inputHandlers:this.computedInputHandlers,removeTag:this.removeTag,addTag:this.addTag,reset:this.reset,inputId:s,isInvalid:this.hasInvalidTags,invalidTags:this.invalidTags.slice(),isDuplicate:this.hasDuplicateTags,duplicateTags:this.duplicateTags.slice(),isLimitReached:this.isLimitReached,disableAddButton:this.disableAddButton},Jt(this.$props,["addButtonText","addButtonVariant","disabled","duplicateTagText","form","inputClass","invalidTagText","limit","limitTagsText","noTagRemove","placeholder","required","separator","size","state","tagClass","tagPills","tagRemoveLabel","tagVariant"])),d=this.normalizeSlot(Ao,u)||this.defaultRender(u),h=t("output",{staticClass:"sr-only",attrs:{id:this.safeId("__selected_tags__"),role:"status",for:s,"aria-live":a?"polite":"off","aria-atomic":"true","aria-relevant":"additions text"}},this.tags.join(", ")),f=t("div",{staticClass:"sr-only",attrs:{id:this.safeId("__removed_tags__"),role:"status","aria-live":a?"assertive":"off","aria-atomic":"true"}},this.removedTags.length>0?"(".concat(this.tagRemovedLabel,") ").concat(this.removedTags.join(", ")):""),p=t();if(e&&!i){var m=r.length>0;p=(m?r:[""]).map((function(i){return t("input",{class:{"sr-only":!m},attrs:{type:m?"hidden":"text",value:i,required:n,name:e,form:o},key:"tag_input_".concat(i)})}))}return t("div",{staticClass:"b-form-tags form-control h-auto",class:[{focus:a&&!l&&!i,disabled:i},this.sizeFormClass,this.stateClass],attrs:{id:this.safeId(),role:"group",tabindex:i||l?null:"-1","aria-describedby":this.safeId("__selected_tags__")},on:{click:this.onClick,focusin:this.onFocusin,focusout:this.onFocusout}},[h,f,d,p])}}),qm=me({components:{BFormTags:Um,BTags:Um,BFormTag:Lm,BTag:Lm}}),Km=vs(ee(c(c(c(c(c(c({},fc),Tf),kf),Bf),Wp),{},{maxRows:hs(_o),noAutoShrink:hs(ho,!1),noResize:hs(ho,!1),rows:hs(_o,2),wrap:hs(go,"soft")})),Si),Xm=i.default.extend({name:Si,directives:{"b-visible":Kc},mixins:[Qa,pc,Ja,Cf,$f,_f,Yp,Mp,Up],props:Km,data:function(){return{heightInPx:null}},computed:{computedStyle:function(){var t={resize:!this.computedRows||this.noResize?"none":null};return this.computedRows||(t.height=this.heightInPx,t.overflowY="scroll"),t},computedMinRows:function(){return Us(lr(this.rows,2),2)},computedMaxRows:function(){return Us(this.computedMinRows,lr(this.maxRows,0))},computedRows:function(){return this.computedMinRows===this.computedMaxRows?this.computedMinRows:null},computedAttrs:function(){var t=this.disabled,e=this.required;return{id:this.safeId(),name:this.name||null,form:this.form||null,disabled:t,placeholder:this.placeholder||null,required:e,autocomplete:this.autocomplete||null,readonly:this.readonly||this.plaintext,rows:this.computedRows,wrap:this.wrap||null,"aria-required":this.required?"true":null,"aria-invalid":this.computedAriaInvalid}},computedListeners:function(){return c(c({},this.bvListeners),{},{input:this.onInput,change:this.onChange,blur:this.onBlur})}},watch:{localValue:function(){this.setHeight()}},mounted:function(){this.setHeight()},methods:{visibleCallback:function(t){t&&this.$nextTick(this.setHeight)},setHeight:function(){var t=this;this.$nextTick((function(){xr((function(){t.heightInPx=t.computeHeight()}))}))},computeHeight:function(){if(this.$isServer||!It(this.computedRows))return null;var t=this.$el;if(!Dr(t))return null;var e=Kr(t),i=cr(e.lineHeight,1),n=cr(e.borderTopWidth,0)+cr(e.borderBottomWidth,0),o=cr(e.paddingTop,0)+cr(e.paddingBottom,0),r=n+o,s=i*this.computedMinRows+r,a=Ur(t,"height")||e.height;Wr(t,"height","auto");var l=t.scrollHeight;Wr(t,"height",a);var c=Us((l-o)/i,2),u=Ys(Us(c,this.computedMinRows),this.computedMaxRows),d=Us(Ks(u*i+r),s);return this.noAutoShrink&&cr(a,0)>d?a:"".concat(d,"px")}},render:function(t){return t("textarea",{class:this.computedClass,style:this.computedStyle,directives:[{name:"b-visible",value:this.visibleCallback,modifiers:{640:!0}}],attrs:this.computedAttrs,domProps:{value:this.localValue},on:this.computedListeners,ref:"input"})}}),Zm=me({components:{BFormTextarea:Xm,BTextarea:Xm}}),Jm=ys("value",{type:go,defaultValue:""}),Qm=Jm.mixin,tv=Jm.props,ev=Jm.prop,iv=Jm.event,nv="numeric",ov=function(t){return"00".concat(t||"").slice(-2)},rv=function(t){t=vr(t);var e=null,i=null,n=null;if(gt.test(t)){var o=w(t.split(":").map((function(t){return lr(t,null)})),3);e=o[0],i=o[1],n=o[2]}return{hours:Pt(e)?null:e,minutes:Pt(i)?null:i,seconds:Pt(n)?null:n,ampm:Pt(e)||e<12?0:1}},sv=vs(ee(c(c(c(c({},fc),tv),Jt(Pm,["labelIncrement","labelDecrement"])),{},{ariaLabelledby:hs(go),disabled:hs(ho,!1),hidden:hs(ho,!1),hideHeader:hs(ho,!1),hour12:hs(ho,null),labelAm:hs(go,"AM"),labelAmpm:hs(go,"AM/PM"),labelHours:hs(go,"Hours"),labelMinutes:hs(go,"Minutes"),labelNoTimeSelected:hs(go,"No time selected"),labelPm:hs(go,"PM"),labelSeconds:hs(go,"Seconds"),labelSelected:hs(go,"Selected time"),locale:hs(Co),minutesStep:hs(_o,1),readonly:hs(ho,!1),secondsStep:hs(_o,1),showSeconds:hs(ho,!1)})),Tn),av=i.default.extend({name:Tn,mixins:[pc,Qm,Cs],props:sv,data:function(){var t=rv(this[ev]||"");return{modelHours:t.hours,modelMinutes:t.minutes,modelSeconds:t.seconds,modelAmpm:t.ampm,isLive:!1}},computed:{computedHMS:function(){return function(t){var e=t.hours,i=t.minutes,n=t.seconds,o=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return It(e)||It(i)||o&&It(n)?"":[e,i,o?n:0].map(ov).join(":")}({hours:this.modelHours,minutes:this.modelMinutes,seconds:this.modelSeconds},this.showSeconds)},resolvedOptions:function(){var t=or(this.locale).filter(ne),e={hour:nv,minute:nv,second:nv};Pt(this.hour12)||(e.hour12=!!this.hour12);var i=new Intl.DateTimeFormat(t,e).resolvedOptions(),n=i.hour12||!1,o=i.hourCycle||(n?"h12":"h23");return{locale:i.locale,hour12:n,hourCycle:o}},computedLocale:function(){return this.resolvedOptions.locale},computedLang:function(){return(this.computedLocale||"").replace(/-u-.*$/,"")},computedRTL:function(){return hc(this.computedLang)},computedHourCycle:function(){return this.resolvedOptions.hourCycle},is12Hour:function(){return!!this.resolvedOptions.hour12},context:function(){return{locale:this.computedLocale,isRTL:this.computedRTL,hourCycle:this.computedHourCycle,hour12:this.is12Hour,hours:this.modelHours,minutes:this.modelMinutes,seconds:this.showSeconds?this.modelSeconds:0,value:this.computedHMS,formatted:this.formattedTimeString}},valueId:function(){return this.safeId()||null},computedAriaLabelledby:function(){return[this.ariaLabelledby,this.valueId].filter(ne).join(" ")||null},timeFormatter:function(){var t={hour12:this.is12Hour,hourCycle:this.computedHourCycle,hour:nv,minute:nv,timeZone:"UTC"};return this.showSeconds&&(t.second=nv),Ql(this.computedLocale,t)},numberFormatter:function(){return new Intl.NumberFormat(this.computedLocale,{style:"decimal",minimumIntegerDigits:2,minimumFractionDigits:0,maximumFractionDigits:0,notation:"standard"}).format},formattedTimeString:function(){var t=this.modelHours,e=this.modelMinutes,i=this.showSeconds&&this.modelSeconds||0;return this.computedHMS?this.timeFormatter(Xl(Date.UTC(0,0,1,t,e,i))):this.labelNoTimeSelected||" "},spinScopedSlots:function(){var t=this.$createElement;return{increment:function(e){var i=e.hasFocus;return t(xa,{props:{scale:i?1.5:1.25},attrs:{"aria-hidden":"true"}})},decrement:function(e){var i=e.hasFocus;return t(xa,{props:{flipV:!0,scale:i?1.5:1.25},attrs:{"aria-hidden":"true"}})}}}},watch:($h={},a($h,ev,(function(t,e){if(t!==e&&!Ua(rv(t),rv(this.computedHMS))){var i=rv(t),n=i.hours,o=i.minutes,r=i.seconds,s=i.ampm;this.modelHours=n,this.modelMinutes=o,this.modelSeconds=r,this.modelAmpm=s}})),a($h,"computedHMS",(function(t,e){t!==e&&this.$emit(iv,t)})),a($h,"context",(function(t,e){Ua(t,e)||this.$emit(Dn,t)})),a($h,"modelAmpm",(function(t,e){var i=this;if(t!==e){var n=It(this.modelHours)?0:this.modelHours;this.$nextTick((function(){0===t&&n>11?i.modelHours=n-12:1===t&&n<12&&(i.modelHours=n+12)}))}})),a($h,"modelHours",(function(t,e){t!==e&&(this.modelAmpm=t>11?1:0)})),$h),created:function(){var t=this;this.$nextTick((function(){t.$emit(Dn,t.context)}))},mounted:function(){this.setLive(!0)},activated:function(){this.setLive(!0)},deactivated:function(){this.setLive(!1)},beforeDestroy:function(){this.setLive(!1)},methods:{focus:function(){this.disabled||ts(this.$refs.spinners[0])},blur:function(){if(!this.disabled){var t=$r();Lr(this.$el,t)&&es(t)}},formatHours:function(t){var e=this.computedHourCycle;return t=0===(t=this.is12Hour&&t>12?t-12:t)&&"h12"===e?12:0===t&&"h24"===e?24:12===t&&"h11"===e?0:t,this.numberFormatter(t)},formatMinutes:function(t){return this.numberFormatter(t)},formatSeconds:function(t){return this.numberFormatter(t)},formatAmpm:function(t){return 0===t?this.labelAm:1===t?this.labelPm:""},setHours:function(t){this.modelHours=t},setMinutes:function(t){this.modelMinutes=t},setSeconds:function(t){this.modelSeconds=t},setAmpm:function(t){this.modelAmpm=t},onSpinLeftRight:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.type,i=t.keyCode;if(!this.disabled&&"keydown"===e&&(i===Na||i===ja)){Bs(t);var n=this.$refs.spinners||[],o=n.map((function(t){return!!t.hasFocus})).indexOf(!0);o=(o+=i===Na?-1:1)>=n.length?0:o<0?n.length-1:o,ts(n[o])}},setLive:function(t){var e=this;t?this.$nextTick((function(){xr((function(){e.isLive=!0}))})):this.isLive=!1}},render:function(t){var e=this;if(this.hidden)return t();var i=this.valueId,n=this.computedAriaLabelledby,o=[],r=function(n,r,s){var a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},l=e.safeId("_spinbutton_".concat(r,"_"))||null;return o.push(l),t(Om,{class:s,props:c({id:l,placeholder:"--",vertical:!0,required:!0,disabled:e.disabled,readonly:e.readonly,locale:e.computedLocale,labelIncrement:e.labelIncrement,labelDecrement:e.labelDecrement,wrap:!0,ariaControls:i,min:0},a),scopedSlots:e.spinScopedSlots,on:{change:n},key:r,ref:"spinners",refInFor:!0})},s=function(){return t("div",{staticClass:"d-flex flex-column",class:{"text-muted":e.disabled||e.readonly},attrs:{"aria-hidden":"true"}},[t(Sa,{props:{shiftV:4,scale:.5}}),t(Sa,{props:{shiftV:-4,scale:.5}})])},a=[];a.push(r(this.setHours,"hours","b-time-hours",{value:this.modelHours,max:23,step:1,formatterFn:this.formatHours,ariaLabel:this.labelHours})),a.push(s()),a.push(r(this.setMinutes,"minutes","b-time-minutes",{value:this.modelMinutes,max:59,step:this.minutesStep||1,formatterFn:this.formatMinutes,ariaLabel:this.labelMinutes})),this.showSeconds&&(a.push(s()),a.push(r(this.setSeconds,"seconds","b-time-seconds",{value:this.modelSeconds,max:59,step:this.secondsStep||1,formatterFn:this.formatSeconds,ariaLabel:this.labelSeconds}))),this.is12Hour&&a.push(r(this.setAmpm,"ampm","b-time-ampm",{value:this.modelAmpm,max:1,formatterFn:this.formatAmpm,ariaLabel:this.labelAmpm,required:!1})),a=t("div",{staticClass:"d-flex align-items-center justify-content-center mx-auto",attrs:{role:"group",tabindex:this.disabled||this.readonly?null:"-1","aria-labelledby":n},on:{keydown:this.onSpinLeftRight,click:function(t){t.target===t.currentTarget&&e.focus()}}},a);var l=t("output",{staticClass:"form-control form-control-sm text-center",class:{disabled:this.disabled||this.readonly},attrs:{id:i,role:"status",for:o.filter(ne).join(" ")||null,tabindex:this.disabled?null:"-1","aria-live":this.isLive?"polite":"off","aria-atomic":"true"},on:{click:this.focus,focus:this.focus}},[t("bdi",this.formattedTimeString),this.computedHMS?t("span",{staticClass:"sr-only"}," (".concat(this.labelSelected,") ")):""]),u=t("header",{staticClass:"b-time-header",class:{"sr-only":this.hideHeader}},[l]),d=this.normalizeSlot();return d=d?t("footer",{staticClass:"b-time-footer"},d):t(),t("div",{staticClass:"b-time d-inline-flex flex-column text-center",attrs:{role:"group",lang:this.computedLang||null,"aria-labelledby":n||null,"aria-disabled":this.disabled?"true":null,"aria-readonly":this.readonly&&!this.disabled?"true":null}},[u,a,d])}}),lv=ys("value",{type:go,defaultValue:""}),cv=lv.mixin,uv=lv.props,dv=lv.prop,hv=lv.event,fv=Qt(sv,["hidden","id","value"]),pv=Qt(op,["formattedValue","id","lang","rtl","value"]),mv=vs(ee(c(c(c(c(c({},fc),uv),fv),pv),{},{closeButtonVariant:hs(go,"outline-secondary"),labelCloseButton:hs(go,"Close"),labelNowButton:hs(go,"Select now"),labelResetButton:hs(go,"Reset"),noCloseButton:hs(ho,!1),nowButton:hs(ho,!1),nowButtonVariant:hs(go,"outline-primary"),resetButton:hs(ho,!1),resetButtonVariant:hs(go,"outline-danger"),resetValue:hs($o)})),ki),vv=i.default.extend({name:ki,mixins:[pc,cv],props:mv,data:function(){return{localHMS:this[dv]||"",localLocale:null,isRTL:!1,formattedValue:"",isVisible:!1}},computed:{computedLang:function(){return(this.localLocale||"").replace(/-u-.*$/i,"")||null}},watch:(Bh={},a(Bh,dv,(function(t){this.localHMS=t||""})),a(Bh,"localHMS",(function(t){this.isVisible&&this.$emit(hv,t||"")})),Bh),methods:{focus:function(){this.disabled||ts(this.$refs.control)},blur:function(){this.disabled||es(this.$refs.control)},setAndClose:function(t){var e=this;this.localHMS=t,this.$nextTick((function(){e.$refs.control.hide(!0)}))},onInput:function(t){this.localHMS!==t&&(this.localHMS=t)},onContext:function(t){var e=t.isRTL,i=t.locale,n=t.value,o=t.formatted;this.isRTL=e,this.localLocale=i,this.formattedValue=o,this.localHMS=n||"",this.$emit(Dn,t)},onNowButton:function(){var t=new Date,e=[t.getHours(),t.getMinutes(),this.showSeconds?t.getSeconds():0].map((function(t){return"00".concat(t||"").slice(-2)})).join(":");this.setAndClose(e)},onResetButton:function(){this.setAndClose(this.resetValue)},onCloseButton:function(){this.$refs.control.hide(!0)},onShow:function(){this.isVisible=!0},onShown:function(){var t=this;this.$nextTick((function(){ts(t.$refs.time),t.$emit(eo)}))},onHidden:function(){this.isVisible=!1,this.$emit(zn)},defaultButtonFn:function(t){var e=t.isHovered,i=t.hasFocus;return this.$createElement(e||i?$a:ka,{attrs:{"aria-hidden":"true"}})}},render:function(t){var e=this.localHMS,i=this.disabled,n=this.readonly,o=this.$props,r=Pt(this.placeholder)?this.labelNoTimeSelected:this.placeholder,s=[];if(this.nowButton){var l=this.labelNowButton;s.push(t(ml,{props:{size:"sm",disabled:i||n,variant:this.nowButtonVariant},attrs:{"aria-label":l||null},on:{click:this.onNowButton},key:"now-btn"},l))}if(this.resetButton){s.length>0&&s.push(t("span"," "));var u=this.labelResetButton;s.push(t(ml,{props:{size:"sm",disabled:i||n,variant:this.resetButtonVariant},attrs:{"aria-label":u||null},on:{click:this.onResetButton},key:"reset-btn"},u))}if(!this.noCloseButton){s.length>0&&s.push(t("span"," "));var d=this.labelCloseButton;s.push(t(ml,{props:{size:"sm",disabled:i,variant:this.closeButtonVariant},attrs:{"aria-label":d||null},on:{click:this.onCloseButton},key:"close-btn"},d))}s.length>0&&(s=[t("div",{staticClass:"b-form-date-controls d-flex flex-wrap",class:{"justify-content-between":s.length>1,"justify-content-end":s.length<2}},s)]);var h=t(av,{staticClass:"b-form-time-control",props:c(c({},ps(fv,o)),{},{value:e,hidden:!this.isVisible}),on:{input:this.onInput,context:this.onContext},ref:"time"},s);return t(rp,{staticClass:"b-form-timepicker",props:c(c({},ps(pv,o)),{},{id:this.safeId(),value:e,formattedValue:e?this.formattedValue:"",placeholder:r,rtl:this.isRTL,lang:this.computedLang}),on:{show:this.onShow,shown:this.onShown,hidden:this.onHidden},scopedSlots:a({},Eo,this.$scopedSlots["button-content"]||this.defaultButtonFn),ref:"control"},[h])}}),bv=me({components:{BFormTimepicker:vv,BTimepicker:vv}}),gv=me({components:{BImg:Lc,BImgLazy:Qc}}),yv=vs({tag:hs(go,"div")},Vi),wv=i.default.extend({name:Vi,functional:!0,props:yv,render:function(t,e){var i=e.props,n=e.data,o=e.children;return t(i.tag,F(n,{staticClass:"input-group-text"}),o)}}),Tv=vs({append:hs(ho,!1),id:hs(go),isText:hs(ho,!1),tag:hs(go,"div")},Ii),Cv=i.default.extend({name:Ii,functional:!0,props:Tv,render:function(t,e){var i=e.props,n=e.data,o=e.children,r=i.append;return t(i.tag,F(n,{class:{"input-group-append":r,"input-group-prepend":!r},attrs:{id:i.id}}),i.isText?[t(wv,o)]:o)}}),xv=vs(Qt(Tv,["append"]),Pi),Sv=i.default.extend({name:Pi,functional:!0,props:xv,render:function(t,e){var i=e.props,n=e.data,o=e.children;return t(Cv,F(n,{props:c(c({},i),{},{append:!0})}),o)}}),kv=vs(Qt(Tv,["append"]),Oi),$v=i.default.extend({name:Oi,functional:!0,props:kv,render:function(t,e){var i=e.props,n=e.data,o=e.children;return t(Cv,F(n,{props:c(c({},i),{},{append:!1})}),o)}}),Bv=vs({append:hs(go),appendHtml:hs(go),id:hs(go),prepend:hs(go),prependHtml:hs(go),size:hs(go),tag:hs(go,"div")},Fi),_v=me({components:{BInputGroup:i.default.extend({name:Fi,functional:!0,props:Bv,render:function(t,e){var i=e.props,n=e.data,o=e.slots,r=e.scopedSlots,s=i.prepend,l=i.prependHtml,c=i.append,u=i.appendHtml,d=i.size,h=r||{},f=o(),p={},m=t(),v=ws(qo,h,f);(v||s||l)&&(m=t($v,[v?Ts(qo,p,h,f):t(wv,{domProps:Fl(l,s)})]));var b=t(),g=ws(Po,h,f);return(g||c||u)&&(b=t(Sv,[g?Ts(Po,p,h,f):t(wv,{domProps:Fl(u,c)})])),t(i.tag,F(n,{staticClass:"input-group",class:a({},"input-group-".concat(d),d),attrs:{id:i.id||null,role:"group"}}),[m,Ts(Ao,p,h,f),b])}}),BInputGroupAddon:Cv,BInputGroupPrepend:$v,BInputGroupAppend:Sv,BInputGroupText:wv}}),Dv=vs({fluid:hs(ko,!1),tag:hs(go,"div")},qe),Fv=i.default.extend({name:qe,functional:!0,props:Dv,render:function(t,e){var i=e.props,n=e.data,o=e.children,r=i.fluid;return t(i.tag,F(n,{class:a({container:!(r||""===r),"container-fluid":!0===r||""===r},"container-".concat(r),r&&!0!==r)}),o)}}),Iv=vs({bgVariant:hs(go),borderVariant:hs(go),containerFluid:hs(ko,!1),fluid:hs(ho,!1),header:hs(go),headerHtml:hs(go),headerLevel:hs(_o,3),headerTag:hs(go,"h1"),lead:hs(go),leadHtml:hs(go),leadTag:hs(go,"p"),tag:hs(go,"div"),textVariant:hs(go)},Ei),Pv=me({components:{BJumbotron:i.default.extend({name:Ei,functional:!0,props:Iv,render:function(t,e){var i,n=e.props,o=e.data,r=e.slots,s=e.scopedSlots,l=n.header,c=n.headerHtml,u=n.lead,d=n.leadHtml,h=n.textVariant,f=n.bgVariant,p=n.borderVariant,m=s||{},v=r(),b={},g=t(),y=ws(No,m,v);if(y||l||c){var w=n.headerLevel;g=t(n.headerTag,{class:a({},"display-".concat(w),w),domProps:y?{}:Fl(c,l)},Ts(No,b,m,v))}var T=t(),C=ws(Go,m,v);(C||u||d)&&(T=t(n.leadTag,{staticClass:"lead",domProps:C?{}:Fl(d,u)},Ts(Go,b,m,v)));var x=[g,T,Ts(Ao,b,m,v)];return n.fluid&&(x=[t(Fv,{props:{fluid:n.containerFluid}},x)]),t(n.tag,F(o,{staticClass:"jumbotron",class:(i={"jumbotron-fluid":n.fluid},a(i,"text-".concat(h),h),a(i,"bg-".concat(f),f),a(i,"border-".concat(p),p),a(i,"border",p),i)}),x)}})}}),Ov=["start","end","center"],Vv=is((function(t,e){return(e=br(vr(e)))?gr(["row-cols",t,e].filter(ne).join("-")):null})),Ev=is((function(t){return gr(t.replace("cols",""))})),Lv=[],Av=me({components:{BContainer:Fv,BRow:{name:on,functional:!0,get props(){var t;return delete this.props,this.props=(t=ls().reduce((function(t,e){return t[ds(e,"cols")]=hs(_o),t}),Wt(null)),Lv=Kt(t),vs(ee(c(c({},t),{},{alignContent:hs(go,null,(function(t){return nr(or(Ov,"between","around","stretch"),t)})),alignH:hs(go,null,(function(t){return nr(or(Ov,"between","around"),t)})),alignV:hs(go,null,(function(t){return nr(or(Ov,"baseline","stretch"),t)})),noGutters:hs(ho,!1),tag:hs(go,"div")})),on)),this.props},render:function(t,e){var i,n=e.props,o=e.data,r=e.children,s=n.alignV,l=n.alignH,c=n.alignContent,u=[];return Lv.forEach((function(t){var e=Vv(Ev(t),n[t]);e&&u.push(e)})),u.push((a(i={"no-gutters":n.noGutters},"align-items-".concat(s),s),a(i,"justify-content-".concat(l),l),a(i,"align-content-".concat(c),c),i)),t(n.tag,F(o,{staticClass:"row",class:u}),r)}},BCol:Op,BFormRow:bf}}),Rv=me({components:{BLink:ol}}),Mv=vs({flush:hs(ho,!1),horizontal:hs(ko,!1),tag:hs(go,"div")},Ai),Hv=i.default.extend({name:Ai,functional:!0,props:Mv,render:function(t,e){var i=e.props,n=e.data,o=e.children,r=""===i.horizontal||i.horizontal;r=!i.flush&&r;var s={staticClass:"list-group",class:a({"list-group-flush":i.flush,"list-group-horizontal":!0===r},"list-group-horizontal-".concat(r),Et(r))};return t(i.tag,F(n,s),o)}}),zv=["a","router-link","button","b-link"],Nv=Qt(nl,["event","routerTag"]);delete Nv.href.default,delete Nv.to.default;var jv=vs(ee(c(c({},Nv),{},{action:hs(ho,!1),button:hs(ho,!1),tag:hs(go,"div"),variant:hs(go)})),Ri),Gv=me({components:{BListGroup:Hv,BListGroupItem:i.default.extend({name:Ri,functional:!0,props:jv,render:function(t,e){var i,n=e.props,o=e.data,r=e.children,s=n.button,l=n.variant,c=n.active,u=n.disabled,d=la(n),h=s?"button":d?ol:n.tag,f=!!(n.action||d||s||nr(zv,n.tag)),p={},m={};return Br(h,"button")?(o.attrs&&o.attrs.type||(p.type="button"),n.disabled&&(p.disabled=!0)):m=ps(Nv,n),t(h,F(o,{attrs:p,props:m,staticClass:"list-group-item",class:(i={},a(i,"list-group-item-".concat(l),l),a(i,"list-group-item-action",f),a(i,"active",c),a(i,"disabled",u),i)}),r)}})}}),Wv=vs({right:hs(ho,!1),tag:hs(go,"div"),verticalAlign:hs(go,"top")},Hi),Yv=i.default.extend({name:Hi,functional:!0,props:Wv,render:function(t,e){var i=e.props,n=e.data,o=e.children,r=i.verticalAlign,s="top"===r?"start":"bottom"===r?"end":r;return t(i.tag,F(n,{staticClass:"media-aside",class:a({"media-aside-right":i.right},"align-self-".concat(s),s)}),o)}}),Uv=vs({tag:hs(go,"div")},zi),qv=i.default.extend({name:zi,functional:!0,props:Uv,render:function(t,e){var i=e.props,n=e.data,o=e.children;return t(i.tag,F(n,{staticClass:"media-body"}),o)}}),Kv=vs({noBody:hs(ho,!1),rightAlign:hs(ho,!1),tag:hs(go,"div"),verticalAlign:hs(go,"top")},Mi),Xv=me({components:{BMedia:i.default.extend({name:Mi,functional:!0,props:Kv,render:function(t,e){var i=e.props,n=e.data,o=e.slots,r=e.scopedSlots,s=e.children,a=i.noBody,l=i.rightAlign,c=i.verticalAlign,u=a?s:[];if(!a){var d={},h=o(),f=r||{};u.push(t(qv,Ts(Ao,d,f,h)));var p=Ts("aside",d,f,h);p&&u[l?"push":"unshift"](t(Yv,{props:{right:l,verticalAlign:c}},p))}return t(i.tag,F(n,{staticClass:"media"}),u)}}),BMediaAside:Yv,BMediaBody:qv}}),Zv="$_bv_documentHandlers_",Jv=i.default.extend({created:function(){var t=this;M&&(this[Zv]={},this.$once(oo,(function(){var e=t[Zv]||{};delete t[Zv],Kt(e).forEach((function(t){(e[t]||[]).forEach((function(e){return ks(document,t,e,lo)}))}))})))},methods:{listenDocument:function(t,e,i){t?this.listenOnDocument(e,i):this.listenOffDocument(e,i)},listenOnDocument:function(t,e){this[Zv]&&Et(t)&&Ot(e)&&(this[Zv][t]=this[Zv][t]||[],nr(this[Zv][t],e)||(this[Zv][t].push(e),Ss(document,t,e,lo)))},listenOffDocument:function(t,e){this[Zv]&&Et(t)&&Ot(e)&&(ks(document,t,e,lo),this[Zv][t]=(this[Zv][t]||[]).filter((function(t){return t!==e})))}}}),Qv="$_bv_windowHandlers_",tb=i.default.extend({beforeCreate:function(){this[Qv]={}},beforeDestroy:function(){if(M){var t=this[Qv];delete this[Qv],Kt(t).forEach((function(e){(t[e]||[]).forEach((function(t){return ks(window,e,t,lo)}))}))}},methods:{listenWindow:function(t,e,i){t?this.listenOnWindow(e,i):this.listenOffWindow(e,i)},listenOnWindow:function(t,e){M&&this[Qv]&&Et(t)&&Ot(e)&&(this[Qv][t]=this[Qv][t]||[],nr(this[Qv][t],e)||(this[Qv][t].push(e),Ss(window,t,e,lo)))},listenOffWindow:function(t,e){M&&this[Qv]&&Et(t)&&Ot(e)&&(ks(window,t,e,lo),this[Qv][t]=(this[Qv][t]||[]).filter((function(t){return t!==e})))}}}),eb=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;return t&&t.$options._scopeId||e},ib=i.default.extend({computed:{scopedStyleAttrs:function(){var t=eb(this.$parent);return t?a({},t,""):{}}}}),nb=i.default.extend({abstract:!0,name:"BVTransporterTarget",props:{nodes:hs(yo)},data:function(t){return{updatedNodes:t.nodes}},destroyed:function(){var t;(t=this.$el)&&t.parentNode&&t.parentNode.removeChild(t)},render:function(t){var e=this.updatedNodes,i=Ot(e)?e({}):e;return(i=or(i).filter(ne))&&i.length>0&&!i[0].text?i[0]:t()}}),ob={container:hs([HTMLElement,go],"body"),disabled:hs(ho,!1),tag:hs(go,"div")},rb=i.default.extend({name:"BVTransporter",mixins:[Cs],props:ob,watch:{disabled:{immediate:!0,handler:function(t){t?this.unmountTarget():this.$nextTick(this.mountTarget)}}},created:function(){this.$_defaultFn=null,this.$_target=null},beforeMount:function(){this.mountTarget()},updated:function(){this.updateTarget()},beforeDestroy:function(){this.unmountTarget(),this.$_defaultFn=null},methods:{getContainer:function(){if(M){var t=this.container;return Et(t)?Or(t):t}return null},mountTarget:function(){if(!this.$_target){var t=this.getContainer();if(t){var e=document.createElement("div");t.appendChild(e),this.$_target=new nb({el:e,parent:this,propsData:{nodes:or(this.normalizeSlot())}})}}},updateTarget:function(){if(M&&this.$_target){var t=this.$scopedSlots.default;this.disabled||(t&&this.$_defaultFn!==t?this.$_target.updatedNodes=t:t||(this.$_target.updatedNodes=this.$slots.default)),this.$_defaultFn=t}},unmountTarget:function(){this.$_target&&this.$_target.$destroy(),this.$_target=null}},render:function(t){if(this.disabled){var e=or(this.normalizeSlot()).filter(ne);if(e.length>0&&!e[0].text)return e[0]}return t()}}),BvModalEvent=function(t){u(BvModalEvent,t);var e=g(BvModalEvent);function BvModalEvent(t){var i,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return o(this,BvModalEvent),i=e.call(this,t,n),Yt(v(i),{trigger:{enumerable:!0,configurable:!1,writable:!1}}),i}return s(BvModalEvent,null,[{key:"Defaults",get:function(){return c(c({},y(d(BvModalEvent),"Defaults",this)),{},{trigger:null})}}]),BvModalEvent}(BvEvent),sb=new(i.default.extend({data:function(){return{modals:[],baseZIndex:null,scrollbarWidth:null,isBodyOverflowing:!1}},computed:{modalCount:function(){return this.modals.length},modalsAreOpen:function(){return this.modalCount>0}},watch:{modalCount:function(t,e){M&&(this.getScrollbarWidth(),t>0&&0===e?(this.checkScrollbar(),this.setScrollbar(),Rr(document.body,"modal-open")):0===t&&e>0&&(this.resetScrollbar(),Mr(document.body,"modal-open")),zr(document.body,"data-modal-open-count",String(t)))},modals:function(t){var e=this;this.checkScrollbar(),xr((function(){e.updateModals(t||[])}))}},methods:{registerModal:function(t){var e=this;t&&-1===this.modals.indexOf(t)&&(this.modals.push(t),t.$once(oo,(function(){e.unregisterModal(t)})))},unregisterModal:function(t){var e=this.modals.indexOf(t);e>-1&&(this.modals.splice(e,1),t._isBeingDestroyed||t._isDestroyed||this.resetModal(t))},getBaseZIndex:function(){if(It(this.baseZIndex)&&M){var t=document.createElement("div");Rr(t,"modal-backdrop"),Rr(t,"d-none"),Wr(t,"display","none"),document.body.appendChild(t),this.baseZIndex=lr(Kr(t).zIndex,1040),document.body.removeChild(t)}return this.baseZIndex||1040},getScrollbarWidth:function(){if(It(this.scrollbarWidth)&&M){var t=document.createElement("div");Rr(t,"modal-scrollbar-measure"),document.body.appendChild(t),this.scrollbarWidth=qr(t).width-t.clientWidth,document.body.removeChild(t)}return this.scrollbarWidth||0},updateModals:function(t){var e=this,i=this.getBaseZIndex(),n=this.getScrollbarWidth();t.forEach((function(t,o){t.zIndex=i+o,t.scrollbarWidth=n,t.isTop=o===e.modals.length-1,t.isBodyOverflowing=e.isBodyOverflowing}))},resetModal:function(t){t&&(t.zIndex=this.getBaseZIndex(),t.isTop=!0,t.isBodyOverflowing=!1)},checkScrollbar:function(){var t=qr(document.body),e=t.left,i=t.right;this.isBodyOverflowing=e+i0&&void 0!==arguments[0]&&arguments[0];this.$_observer&&this.$_observer.disconnect(),this.$_observer=null,t&&(this.$_observer=au(this.$refs.content,this.checkModalOverflow.bind(this),bb))},updateModel:function(t){t!==this[ub]&&this.$emit(db,t)},buildEvent:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new BvModalEvent(t,c(c({cancelable:!1,target:this.$refs.modal||this.$el||null,relatedTarget:null,trigger:null},e),{},{vueTarget:this,componentId:this.modalId}))},show:function(){if(!this.isVisible&&!this.isOpening)if(this.isClosing)this.$once(zn,this.show);else{this.isOpening=!0,this.$_returnFocus=this.$_returnFocus||this.getActiveElement();var t=this.buildEvent(to,{cancelable:!0});if(this.emitEvent(t),t.defaultPrevented||this.isVisible)return this.isOpening=!1,void this.updateModel(!1);this.doShow()}},hide:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(this.isVisible&&!this.isClosing){this.isClosing=!0;var e=this.buildEvent(Nn,{cancelable:t!==hb,trigger:t||null});if(t===mb?this.$emit("ok",e):t===fb?this.$emit(kn,e):t===pb&&this.$emit(_n,e),this.emitEvent(e),e.defaultPrevented||!this.isVisible)return this.isClosing=!1,void this.updateModel(!0);this.setObserver(!1),this.isVisible=!1,this.updateModel(!1)}},toggle:function(t){t&&(this.$_returnFocus=t),this.isVisible?this.hide("toggle"):this.show()},getActiveElement:function(){var t=$r(M?[document.body]:[]);return t&&t.focus?t:null},doShow:function(){var t=this;sb.modalsAreOpen&&this.noStacking?this.listenOnRootOnce(Ds(Ni,zn),this.doShow):(sb.registerModal(this),this.isHidden=!1,this.$nextTick((function(){t.isVisible=!0,t.isOpening=!1,t.updateModel(!0),t.$nextTick((function(){t.setObserver(!0)}))})))},onBeforeEnter:function(){this.isTransitioning=!0,this.setResizeEvent(!0)},onEnter:function(){var t=this;this.isBlock=!0,xr((function(){xr((function(){t.isShow=!0}))}))},onAfterEnter:function(){var t=this;this.checkModalOverflow(),this.isTransitioning=!1,xr((function(){t.emitEvent(t.buildEvent(eo)),t.setEnforceFocus(!0),t.$nextTick((function(){t.focusFirst()}))}))},onBeforeLeave:function(){this.isTransitioning=!0,this.setResizeEvent(!1),this.setEnforceFocus(!1)},onLeave:function(){this.isShow=!1},onAfterLeave:function(){var t=this;this.isBlock=!1,this.isTransitioning=!1,this.isModalOverflowing=!1,this.isHidden=!0,this.$nextTick((function(){t.isClosing=!1,sb.unregisterModal(t),t.returnFocusTo(),t.emitEvent(t.buildEvent(zn))}))},emitEvent:function(t){var e=t.type;this.emitOnRoot(Ds(Ni,e),t,t.componentId),this.$emit(e,t)},onDialogMousedown:function(){var t=this,e=this.$refs.modal;Ss(e,"mouseup",(function i(n){ks(e,"mouseup",i,lo),n.target===e&&(t.ignoreBackdropClick=!0)}),lo)},onClickOut:function(t){this.ignoreBackdropClick?this.ignoreBackdropClick=!1:this.isVisible&&!this.noCloseOnBackdrop&&Lr(document.body,t.target)&&(Lr(this.$refs.content,t.target)||this.hide("backdrop"))},onOk:function(){this.hide(mb)},onCancel:function(){this.hide(fb)},onClose:function(){this.hide(pb)},onEsc:function(t){27===t.keyCode&&this.isVisible&&!this.noCloseOnEsc&&this.hide("esc")},focusHandler:function(t){var e=this.$refs.content,i=t.target;if(!(this.noEnforceFocus||!this.isTop||!this.isVisible||!e||document===i||Lr(e,i)||this.computeIgnoreEnforceFocusSelector&&Er(this.computeIgnoreEnforceFocusSelector,i,!0))){var n=Qr(this.$refs.content),o=this.$refs["bottom-trap"],r=this.$refs["top-trap"];if(o&&i===o){if(ts(n[0]))return}else if(r&&i===r&&ts(n[n.length-1]))return;ts(e,{preventScroll:!0})}},setEnforceFocus:function(t){this.listenDocument(t,"focusin",this.focusHandler)},setResizeEvent:function(t){this.listenWindow(t,"resize",this.checkModalOverflow),this.listenWindow(t,"orientationchange",this.checkModalOverflow)},showHandler:function(t,e){t===this.modalId&&(this.$_returnFocus=e||this.getActiveElement(),this.show())},hideHandler:function(t){t===this.modalId&&this.hide("event")},toggleHandler:function(t,e){t===this.modalId&&this.toggle(e)},modalListener:function(t){this.noStacking&&t.vueTarget!==this&&this.hide()},focusFirst:function(){var t=this;M&&xr((function(){var e=t.$refs.modal,i=t.$refs.content,n=t.getActiveElement();if(e&&i&&(!n||!Lr(i,n))){var o=t.$refs["ok-button"],r=t.$refs["cancel-button"],s=t.$refs["close-button"],a=t.autoFocusButton,l=a===mb&&o?o.$el||o:a===fb&&r?r.$el||r:a===pb&&s?s.$el||s:i;ts(l),l===i&&t.$nextTick((function(){e.scrollTop=0}))}}))},returnFocusTo:function(){var t=this.returnFocus||this.$_returnFocus||null;this.$_returnFocus=null,this.$nextTick((function(){(t=Et(t)?Or(t):t)&&(t=t.$el||t,ts(t))}))},checkModalOverflow:function(){if(this.isVisible){var t=this.$refs.modal;this.isModalOverflowing=t.scrollHeight>document.documentElement.clientHeight}},makeModal:function(t){var e=t();if(!this.hideHeader){var i=this.normalizeSlot("modal-header",this.slotScope);if(!i){var n=t();this.hideHeaderClose||(n=t(Ps,{props:{content:this.headerCloseContent,disabled:this.isTransitioning,ariaLabel:this.headerCloseLabel,textVariant:this.headerCloseVariant||this.headerTextVariant},on:{click:this.onClose},ref:"close-button"},[this.normalizeSlot("modal-header-close")])),i=[t(this.titleTag,{staticClass:"modal-title",class:this.titleClasses,attrs:{id:this.modalTitleId},domProps:this.hasNormalizedSlot(Uo)?{}:Fl(this.titleHtml,this.title)},this.normalizeSlot(Uo,this.slotScope)),n]}e=t("header",{staticClass:"modal-header",class:this.headerClasses,attrs:{id:this.modalHeaderId},ref:"header"},[i])}var o=t("div",{staticClass:"modal-body",class:this.bodyClasses,attrs:{id:this.modalBodyId},ref:"body"},this.normalizeSlot(Ao,this.slotScope)),r=t();if(!this.hideFooter){var s=this.normalizeSlot("modal-footer",this.slotScope);if(!s){var a=t();this.okOnly||(a=t(ml,{props:{variant:this.cancelVariant,size:this.buttonSize,disabled:this.cancelDisabled||this.busy||this.isTransitioning},domProps:this.hasNormalizedSlot(Wo)?{}:Fl(this.cancelTitleHtml,this.cancelTitle),on:{click:this.onCancel},ref:"cancel-button"},this.normalizeSlot(Wo))),s=[a,t(ml,{props:{variant:this.okVariant,size:this.buttonSize,disabled:this.okDisabled||this.busy||this.isTransitioning},domProps:this.hasNormalizedSlot(Yo)?{}:Fl(this.okTitleHtml,this.okTitle),on:{click:this.onOk},ref:"ok-button"},this.normalizeSlot(Yo))]}r=t("footer",{staticClass:"modal-footer",class:this.footerClasses,attrs:{id:this.modalFooterId},ref:"footer"},[s])}var l=t("div",{staticClass:"modal-content",class:this.contentClass,attrs:{id:this.modalContentId,tabindex:"-1"},ref:"content"},[e,o,r]),c=t(),u=t();this.isVisible&&!this.noEnforceFocus&&(c=t("span",{attrs:{tabindex:"0"},ref:"top-trap"}),u=t("span",{attrs:{tabindex:"0"},ref:"bottom-trap"}));var d=t("div",{staticClass:"modal-dialog",class:this.dialogClasses,on:{mousedown:this.onDialogMousedown},ref:"dialog"},[c,l,u]),h=t("div",{staticClass:"modal",class:this.modalClasses,style:this.modalStyles,attrs:this.computedModalAttrs,on:{keydown:this.onEsc,click:this.onClickOut},directives:[{name:"show",value:this.isVisible}],ref:"modal"},[d]);h=t("transition",{props:{enterClass:"",enterToClass:"",enterActiveClass:"",leaveClass:"",leaveActiveClass:"",leaveToClass:""},on:{beforeEnter:this.onBeforeEnter,enter:this.onEnter,afterEnter:this.onAfterEnter,beforeLeave:this.onBeforeLeave,leave:this.onLeave,afterLeave:this.onAfterLeave}},[h]);var f=t();return!this.hideBackdrop&&this.isVisible&&(f=t("div",{staticClass:"modal-backdrop",attrs:{id:this.modalBackdropId}},this.normalizeSlot("modal-backdrop"))),f=t(Ls,{props:{noFade:this.noFade}},[f]),t("div",{style:this.modalOuterStyle,attrs:this.computedAttrs,key:"modal-outer-".concat(this._uid)},[h,f])}},render:function(t){return this.static?this.lazy&&this.isHidden?t():this.makeModal(t):this.isHidden?t():t(rb,[this.makeModal(t)])}}),wb=Fs(Ni,to),Tb="__bv_modal_directive__",Cb=function(t){var e=t.modifiers,i=void 0===e?{}:e,n=t.arg,o=t.value;return Et(o)?o:Et(n)?n:Kt(i).reverse()[0]},xb=function(t){return t&&Vr(t,".dropdown-menu > li, li.nav-item")&&Or("a, button",t)||t},Sb=function(t){t&&"BUTTON"!==t.tagName&&(Gr(t,"role")||zr(t,"role","button"),"A"===t.tagName||Gr(t,"tabindex")||zr(t,"tabindex","0"))},kb=function(t){var e=t[Tb]||{},i=e.trigger,n=e.handler;i&&n&&(ks(i,"click",n,ao),ks(i,"keydown",n,ao),ks(t,"click",n,ao),ks(t,"keydown",n,ao)),delete t[Tb]},$b=function(t,e,i){var n=t[Tb]||{},o=Cb(e),r=xb(t);o===n.target&&r===n.trigger||(kb(t),function(t,e,i){var n=Cb(e),o=xb(t);if(n&&o){var r=function(t){var e=t.currentTarget;if(!Fr(e)){var o=t.type,r=t.keyCode;"click"!==o&&("keydown"!==o||r!==Ha&&r!==Ga)||i.context.$root.$emit(wb,n,e)}};t[Tb]={handler:r,target:n,trigger:o},Sb(o),Ss(o,"click",r,ao),"BUTTON"!==o.tagName&&"button"===jr(o,"role")&&Ss(o,"keydown",r,ao)}}(t,e,i)),Sb(r)},Bb={inserted:$b,updated:function(){},componentUpdated:$b,unbind:kb},_b="$bvModal",Db=["id"].concat(T(Kt(Qt(gb,["busy","lazy","noStacking","static","visible"])))),Fb=function(){},Ib={msgBoxContent:"default",title:"modal-title",okTitle:"modal-ok",cancelTitle:"modal-cancel"},Pb=function(t){return Db.reduce((function(e,i){return Ft(t[i])||(e[i]=t[i]),e}),{})},Ob=me({components:{BModal:yb},directives:{VBModal:Bb},plugins:{BVModalPlugin:me({plugins:{plugin:function(t){var e=t.extend({name:"BMsgBox",extends:yb,destroyed:function(){this.$el&&this.$el.parentNode&&this.$el.parentNode.removeChild(this.$el)},mounted:function(){var t=this,e=function(){t.$nextTick((function(){xr((function(){t.$destroy()}))}))};this.$parent.$once(ro,e),this.$once(zn,e),this.$router&&this.$route&&this.$once(oo,this.$watch("$router",e)),this.show()}}),i=function(t,i){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Fb;if(!ce(_b)&&!ue(_b)){var o=new e({parent:t,propsData:c(c(c({},Pb(rs(Ni))),{},{hideHeaderClose:!0,hideHeader:!(i.title||i.titleHtml)},Qt(i,Kt(Ib))),{},{lazy:!1,busy:!1,visible:!1,noStacking:!1,noEnforceFocus:!1})});return Kt(Ib).forEach((function(t){Ft(i[t])||(o.$slots[Ib[t]]=or(i[t]))})),new Promise((function(t,e){var i=!1;o.$once(ro,(function(){i||e(new Error("BootstrapVue MsgBox destroyed before resolve"))})),o.$on(Nn,(function(e){if(!e.defaultPrevented){var o=n(e);e.defaultPrevented||(i=!0,t(o))}}));var r=document.createElement("div");document.body.appendChild(r),o.$mount(r)}))}},n=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;if(e&&!ue(_b)&&!ce(_b)&&Ot(o))return i(t,c(c({},Pb(n)),{},{msgBoxContent:e}),o)},r=function(){function t(e){o(this,t),Gt(this,{_vm:e,_root:e.$root}),Yt(this,{_vm:{enumerable:!0,configurable:!1,writable:!1},_root:{enumerable:!0,configurable:!1,writable:!1}})}return s(t,[{key:"show",value:function(t){if(t&&this._root){for(var e,i=arguments.length,n=new Array(i>1?i-1:0),o=1;o1?i-1:0),o=1;o1&&void 0!==arguments[1]?arguments[1]:{},i=c(c({},e),{},{okOnly:!0,okDisabled:!1,hideFooter:!1,msgBoxContent:t});return n(this._vm,t,i,(function(){return!0}))}},{key:"msgBoxConfirm",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=c(c({},e),{},{okOnly:!1,okDisabled:!1,cancelDisabled:!1,hideFooter:!1});return n(this._vm,t,i,(function(t){var e=t.trigger;return"ok"===e||"cancel"!==e&&null}))}}]),t}();t.mixin({beforeCreate:function(){this._bv__modal=new r(this)}}),Xt(t.prototype,_b)||Ut(t.prototype,_b,{get:function(){return this&&this._bv__modal||le('"'.concat(_b,'" must be accessed from a Vue instance "this" context.'),Ni),this._bv__modal}})}}})}}),Vb=vs({align:hs(go),cardHeader:hs(ho,!1),fill:hs(ho,!1),justified:hs(ho,!1),pills:hs(ho,!1),small:hs(ho,!1),tabs:hs(ho,!1),tag:hs(go,"ul"),vertical:hs(ho,!1)},ji),Eb=i.default.extend({name:ji,functional:!0,props:Vb,render:function(t,e){var i,n,o=e.props,r=e.data,s=e.children,l=o.tabs,c=o.pills,u=o.vertical,d=o.align,h=o.cardHeader;return t(o.tag,F(r,{staticClass:"nav",class:(i={"nav-tabs":l,"nav-pills":c&&!l,"card-header-tabs":!u&&h&&l,"card-header-pills":!u&&h&&c&&!l,"flex-column":u,"nav-fill":!u&&o.fill,"nav-justified":!u&&o.justified},a(i,(n=d,"justify-content-".concat(n="left"===n?"start":"right"===n?"end":n)),!u&&d),a(i,"small",o.small),i)}),s)}}),Lb=Qt(nl,["event","routerTag"]),Ab=vs(ee(c(c({},Lb),{},{linkAttrs:hs(vo,{}),linkClasses:hs(To)})),Ki),Rb=i.default.extend({name:Ki,functional:!0,props:Ab,render:function(t,e){var i=e.props,n=e.data,o=e.listeners,r=e.children;return t("li",F(Qt(n,["on"]),{staticClass:"nav-item"}),[t(ol,{staticClass:"nav-link",class:i.linkClasses,attrs:i.linkAttrs,props:ps(Lb,i),on:o},r)])}}),Mb=i.default.extend({name:"BNavText",functional:!0,props:{},render:function(t,e){var i=e.data,n=e.children;return t("li",F(i,{staticClass:"navbar-text"}),n)}}),Hb=Qt(Yh,["inline"]),zb=vs(ee(c(c({},Hb),{},{formClass:hs(To)})),qi),Nb=i.default.extend({name:qi,functional:!0,props:zb,render:function(t,e){var i=e.props,n=e.data,o=e.children,r=e.listeners,s=t(Uh,{class:i.formClass,props:c(c({},ps(Hb,i)),{},{inline:!0}),attrs:n.attrs,on:r},o);return t("li",F(Qt(n,["attrs","on"]),{staticClass:"form-inline"}),[s])}}),jb=vs(ee(c(c({},fc),Jt(Eh,[].concat(T(Kt(Oh)),["html","lazy","menuClass","noCaret","role","text","toggleClass"])))),Xi),Gb=i.default.extend({name:Xi,mixins:[pc,Vh,Cs],props:jb,computed:{toggleId:function(){return this.safeId("_BV_toggle_")},dropdownClasses:function(){return[this.directionClass,this.boundaryClass,{show:this.visible}]},menuClasses:function(){return[this.menuClass,{"dropdown-menu-right":this.right,show:this.visible}]},toggleClasses:function(){return[this.toggleClass,{"dropdown-toggle-no-caret":this.noCaret}]}},render:function(t){var e=this.toggleId,i=this.visible,n=this.hide,o=t(ol,{staticClass:"nav-link dropdown-toggle",class:this.toggleClasses,props:{href:"#".concat(this.id||""),disabled:this.disabled},attrs:{id:e,role:"button","aria-haspopup":"true","aria-expanded":i?"true":"false"},on:{mousedown:this.onMousedown,click:this.toggle,keydown:this.toggle},ref:"toggle"},[this.normalizeSlot([Eo,"text"])||t("span",{domProps:Fl(this.html,this.text)})]),r=t("ul",{staticClass:"dropdown-menu",class:this.menuClasses,attrs:{tabindex:"-1","aria-labelledby":e},on:{keydown:this.onKeydown},ref:"menu"},!this.lazy||i?this.normalizeSlot(Ao,{hide:n}):[t()]);return t("li",{staticClass:"nav-item b-nav-dropdown dropdown",class:this.dropdownClasses,attrs:{id:this.safeId()}},[o,r])}}),Wb=me({components:{BNav:Eb,BNavItem:Rb,BNavText:Mb,BNavForm:Nb,BNavItemDropdown:Gb,BNavItemDd:Gb,BNavDropdown:Gb,BNavDd:Gb},plugins:{DropdownPlugin:tf}}),Yb=vs({fixed:hs(go),print:hs(ho,!1),sticky:hs(ho,!1),tag:hs(go,"nav"),toggleable:hs(ko,!1),type:hs(go,"light"),variant:hs(go)},Gi),Ub=i.default.extend({name:Gi,mixins:[Cs],provide:function(){return{bvNavbar:this}},props:Yb,computed:{breakpointClass:function(){var t=this.toggleable,e=ss()[0],i=null;return t&&Et(t)&&t!==e?i="navbar-expand-".concat(t):!1===t&&(i="navbar-expand"),i}},render:function(t){var e,i=this.tag,n=this.type,o=this.variant,r=this.fixed;return t(i,{staticClass:"navbar",class:[(e={"d-print":this.print,"sticky-top":this.sticky},a(e,"navbar-".concat(n),n),a(e,"bg-".concat(o),o),a(e,"fixed-".concat(r),r),e),this.breakpointClass],attrs:{role:Br(i,"nav")?null:"navigation"}},[this.normalizeSlot()])}}),qb=vs(Jt(Vb,["tag","fill","justified","align","small"]),Yi),Kb=i.default.extend({name:Yi,functional:!0,props:qb,render:function(t,e){var i,n,o=e.props,r=e.data,s=e.children,l=o.align;return t(o.tag,F(r,{staticClass:"navbar-nav",class:(i={"nav-fill":o.fill,"nav-justified":o.justified},a(i,(n=l,"justify-content-".concat(n="left"===n?"start":"right"===n?"end":n)),l),a(i,"small",o.small),i)}),s)}}),Xb=Qt(nl,["event","routerTag"]);Xb.href.default=void 0,Xb.to.default=void 0;var Zb,Jb,Qb,tg,eg,ig,ng,og,rg,sg=vs(ee(c(c({},Xb),{},{tag:hs(go,"div")})),Wi),ag=i.default.extend({name:Wi,functional:!0,props:sg,render:function(t,e){var i=e.props,n=e.data,o=e.children,r=i.to||i.href;return t(r?ol:i.tag,F(n,{staticClass:"navbar-brand",props:r?ps(Xb,i):{}}),o)}}),lg="navbar-toggler",cg=Ds(Ue,"state"),ug=Ds(Ue,"sync-state"),dg=vs({disabled:hs(ho,!1),label:hs(go,"Toggle navigation"),target:hs(Co,void 0,!0)},Ui),hg=i.default.extend({name:Ui,directives:{VBToggle:ad},mixins:[Ja,Cs],props:dg,data:function(){return{toggleState:!1}},created:function(){this.listenOnRoot(cg,this.handleStateEvt),this.listenOnRoot(ug,this.handleStateEvt)},methods:{onClick:function(t){this.disabled||this.$emit(Bn,t)},handleStateEvt:function(t,e){t===this.target&&(this.toggleState=e)}},render:function(t){var e=this.disabled;return t("button",{staticClass:lg,class:{disabled:e},directives:[{name:"VBToggle",value:this.target}],attrs:{type:"button",disabled:e,"aria-label":this.label},on:{click:this.onClick}},[this.normalizeSlot(Ao,{expanded:this.toggleState})||t("span",{staticClass:"".concat(lg,"-icon")})])}}),fg=me({components:{BNavbar:Ub,BNavbarNav:Kb,BNavbarBrand:ag,BNavbarToggle:hg,BNavToggle:hg},plugins:{NavPlugin:Wb,CollapsePlugin:cd,DropdownPlugin:tf}}),pg=vs({label:hs(go),role:hs(go,"status"),small:hs(ho,!1),tag:hs(go,"span"),type:hs(go,"border"),variant:hs(go)},dn),mg=i.default.extend({name:dn,functional:!0,props:pg,render:function(t,e){var i,n=e.props,o=e.data,r=e.slots,s=e.scopedSlots,l=r(),c=Ts(jo,{},s||{},l)||n.label;return c&&(c=t("span",{staticClass:"sr-only"},c)),t(n.tag,F(o,{attrs:{role:c?n.role||"status":null,"aria-hidden":c?null:"true"},class:(i={},a(i,"spinner-".concat(n.type),n.type),a(i,"spinner-".concat(n.type,"-sm"),n.small),a(i,"text-".concat(n.variant),n.variant),i)}),[c||t()])}}),vg={top:0,left:0,bottom:0,right:0},bg=vs({bgColor:hs(go),blur:hs(go,"2px"),fixed:hs(ho,!1),noCenter:hs(ho,!1),noFade:hs(ho,!1),noWrap:hs(ho,!1),opacity:hs(_o,.85,(function(t){var e=cr(t,0);return e>=0&&e<=1})),overlayTag:hs(go,"div"),rounded:hs(ko,!1),show:hs(ho,!1),spinnerSmall:hs(ho,!1),spinnerType:hs(go,"border"),spinnerVariant:hs(go),variant:hs(go,"light"),wrapTag:hs(go,"div"),zIndex:hs(_o,10)},Zi),gg=i.default.extend({name:Zi,mixins:[Cs],props:bg,computed:{computedRounded:function(){var t=this.rounded;return!0===t||""===t?"rounded":t?"rounded-".concat(t):""},computedVariant:function(){var t=this.variant;return t&&!this.bgColor?"bg-".concat(t):""},slotScope:function(){return{spinnerType:this.spinnerType||null,spinnerVariant:this.spinnerVariant||null,spinnerSmall:this.spinnerSmall}}},methods:{defaultOverlayFn:function(t){var e=t.spinnerType,i=t.spinnerVariant,n=t.spinnerSmall;return this.$createElement(mg,{props:{type:e,variant:i,small:n}})}},render:function(t){var e=this,i=this.show,n=this.fixed,o=this.noFade,r=this.noWrap,s=this.slotScope,a=t();if(i){var l=t("div",{staticClass:"position-absolute",class:[this.computedVariant,this.computedRounded],style:c(c({},vg),{},{opacity:this.opacity,backgroundColor:this.bgColor||null,backdropFilter:this.blur?"blur(".concat(this.blur,")"):null})}),u=t("div",{staticClass:"position-absolute",style:this.noCenter?c({},vg):{top:"50%",left:"50%",transform:"translateX(-50%) translateY(-50%)"}},[this.normalizeSlot("overlay",s)||this.defaultOverlayFn(s)]);a=t(this.overlayTag,{staticClass:"b-overlay",class:{"position-absolute":!r||r&&!n,"position-fixed":r&&n},style:c(c({},vg),{},{zIndex:this.zIndex||10}),on:{click:function(t){return e.$emit(Bn,t)}},key:"overlay"},[l,u])}return a=t(Ls,{props:{noFade:o,appear:!0},on:{"after-enter":function(){return e.$emit(eo)},"after-leave":function(){return e.$emit(zn)}}},[a]),r?a:t(this.wrapTag,{staticClass:"b-overlay-wrap position-relative",attrs:{"aria-busy":i?"true":null}},r?[a]:[this.normalizeSlot(),a])}}),yg=me({components:{BOverlay:gg}}),wg=ys("value",{type:So,defaultValue:null,validator:function(t){return!(!It(t)&&lr(t,0)<1)||(le('"v-model" value must be a number greater than "0"',Ji),!1)}}),Tg=wg.mixin,Cg=wg.props,xg=wg.prop,Sg=wg.event,kg=function(t){var e=lr(t)||1;return e<1?5:e},$g=function(t,e){var i=lr(t)||1;return i>e?e:i<1?1:i},Bg=function(t){if(t.keyCode===Ga)return Bs(t,{immediatePropagation:!0}),t.currentTarget.click(),!1},_g=vs(ee(c(c({},Cg),{},{align:hs(go,"left"),ariaLabel:hs(go,"Pagination"),disabled:hs(ho,!1),ellipsisClass:hs(To),ellipsisText:hs(go,"…"),firstClass:hs(To),firstNumber:hs(ho,!1),firstText:hs(go,"«"),hideEllipsis:hs(ho,!1),hideGotoEndButtons:hs(ho,!1),labelFirstPage:hs(go,"Go to first page"),labelLastPage:hs(go,"Go to last page"),labelNextPage:hs(go,"Go to next page"),labelPage:hs(Bo,"Go to page"),labelPrevPage:hs(go,"Go to previous page"),lastClass:hs(To),lastNumber:hs(ho,!1),lastText:hs(go,"»"),limit:hs(_o,5,(function(t){return!(lr(t,0)<1)||(le('Prop "limit" must be a number greater than "0"',Ji),!1)})),nextClass:hs(To),nextText:hs(go,"›"),pageClass:hs(To),pills:hs(ho,!1),prevClass:hs(To),prevText:hs(go,"‹"),size:hs(go)})),"pagination"),Dg=i.default.extend({mixins:[Tg,Cs],props:_g,data:function(){var t=lr(this[xg],0);return{currentPage:t=t>0?t:-1,localNumberOfPages:1,localLimit:5}},computed:{btnSize:function(){var t=this.size;return t?"pagination-".concat(t):""},alignment:function(){var t=this.align;return"center"===t?"justify-content-center":"end"===t||"right"===t?"justify-content-end":"fill"===t?"text-center":""},styleClass:function(){return this.pills?"b-pagination-pills":""},computedCurrentPage:function(){return $g(this.currentPage,this.localNumberOfPages)},paginationParams:function(){var t=this.localLimit,e=this.localNumberOfPages,i=this.computedCurrentPage,n=this.hideEllipsis,o=this.firstNumber,r=this.lastNumber,s=!1,a=!1,l=t,c=1;e<=t?l=e:i3?(n&&!r||(a=!0,l=t-(o?0:1)),l=Ys(l,t)):e-i+23?(n&&!o||(s=!0,l=t-(r?0:1)),c=e-l+1):(t>3&&(l=t-(n?0:2),s=!(n&&!o),a=!(n&&!r)),c=i-Xs(l/2)),c<1?(c=1,s=!1):c>e-l&&(c=e-l+1,a=!1),s&&o&&c<4&&(l+=2,c=1,s=!1);var u=c+l-1;return a&&r&&u>e-3&&(l+=u===e-2?2:3,a=!1),t<=3&&(o&&1===c?l=Ys(l+1,e,t+1):r&&e===c+l-1&&(c=Us(c-1,1),l=Ys(e-c+1,e,t+1))),{showFirstDots:s,showLastDots:a,numberOfLinks:l=Ys(l,e-c+1),startNumber:c}},pageList:function(){var t=this.paginationParams,e=t.numberOfLinks,i=t.startNumber,n=this.computedCurrentPage,o=function(t,e){return rr(e,(function(e,i){return{number:t+i,classes:null}}))}(i,e);if(o.length>3){var r=n-i,s="bv-d-xs-down-none";if(0===r)for(var a=3;ar+1;u--)o[u].classes=s}}return o}},watch:(Zb={},a(Zb,xg,(function(t,e){t!==e&&(this.currentPage=$g(t,this.localNumberOfPages))})),a(Zb,"currentPage",(function(t,e){t!==e&&this.$emit(Sg,t>0?t:null)})),a(Zb,"limit",(function(t,e){t!==e&&(this.localLimit=kg(t))})),Zb),created:function(){var t=this;this.localLimit=kg(this.limit),this.$nextTick((function(){t.currentPage=t.currentPage>t.localNumberOfPages?t.localNumberOfPages:t.currentPage}))},methods:{handleKeyNav:function(t){var e=t.keyCode,i=t.shiftKey;this.isNav||(e===Na||e===Wa?(Bs(t,{propagation:!1}),i?this.focusFirst():this.focusPrev()):e!==ja&&e!==Ra||(Bs(t,{propagation:!1}),i?this.focusLast():this.focusNext()))},getButtons:function(){return Pr("button.page-link, a.page-link",this.$el).filter((function(t){return Dr(t)}))},focusCurrent:function(){var t=this;this.$nextTick((function(){var e=t.getButtons().find((function(e){return lr(jr(e,"aria-posinset"),0)===t.computedCurrentPage}));ts(e)||t.focusFirst()}))},focusFirst:function(){var t=this;this.$nextTick((function(){var e=t.getButtons().find((function(t){return!Fr(t)}));ts(e)}))},focusLast:function(){var t=this;this.$nextTick((function(){var e=t.getButtons().reverse().find((function(t){return!Fr(t)}));ts(e)}))},focusPrev:function(){var t=this;this.$nextTick((function(){var e=t.getButtons(),i=e.indexOf($r());i>0&&!Fr(e[i-1])&&ts(e[i-1])}))},focusNext:function(){var t=this;this.$nextTick((function(){var e=t.getButtons(),i=e.indexOf($r());is,v=n<1?1:n>s?s:n,b={disabled:f,page:v,index:v-1},g=e.normalizeSlot(a,b)||vr(l)||t(),y=t(f?"span":r?ol:"button",{staticClass:"page-link",class:{"flex-grow-1":!r&&!f&&h},props:f||!r?{}:e.linkProps(n),attrs:{role:r?null:"menuitem",type:r||f?null:"button",tabindex:f||r?null:"-1","aria-label":o,"aria-controls":e.ariaControls||null,"aria-disabled":f?"true":null},on:f?{}:{"!click":function(t){e.onClick(t,n)},keydown:Bg}},[g]);return t("li",{key:d,staticClass:"page-item",class:[{disabled:f,"flex-fill":h,"d-flex":h&&!r&&!f},c],attrs:{role:r?null:"presentation","aria-hidden":f?"true":null}},[y])},b=function(i){return t("li",{staticClass:"page-item",class:["disabled","bv-d-xs-down-none",h?"flex-fill":"",e.ellipsisClass],attrs:{role:"separator"},key:"ellipsis-".concat(i?"last":"first")},[t("span",{staticClass:"page-link"},[e.normalizeSlot("ellipsis-text")||vr(e.ellipsisText)||t()])])},g=function(o,a){var l=o.number,c=p(l)&&!m,u=i?null:c||m&&0===a?"0":"-1",d={role:r?null:"menuitemradio",type:r||i?null:"button","aria-disabled":i?"true":null,"aria-controls":e.ariaControls||null,"aria-label":gs(n)?n(l):"".concat(Ot(n)?n():n," ").concat(l),"aria-checked":r?null:c?"true":"false","aria-current":r&&c?"page":null,"aria-posinset":r?null:l,"aria-setsize":r?null:s,tabindex:r?null:u},f=vr(e.makePage(l)),v={page:l,index:l-1,content:f,active:c,disabled:i},b=t(i?"span":r?ol:"button",{props:i||!r?{}:e.linkProps(l),staticClass:"page-link",class:{"flex-grow-1":!r&&!i&&h},attrs:d,on:i?{}:{"!click":function(t){e.onClick(t,l)},keydown:Bg}},[e.normalizeSlot("page",v)||f]);return t("li",{staticClass:"page-item",class:[{disabled:i,active:c,"flex-fill":h,"d-flex":h&&!r&&!i},o.classes,e.pageClass],attrs:{role:r?null:"presentation"},key:"page-".concat(l)},[b])},y=t();this.firstNumber||this.hideGotoEndButtons||(y=v(1,this.labelFirstPage,"first-text",this.firstText,this.firstClass,1,"pagination-goto-first")),f.push(y),f.push(v(a-1,this.labelPrevPage,"prev-text",this.prevText,this.prevClass,1,"pagination-goto-prev")),f.push(this.firstNumber&&1!==l[0]?g({number:1},0):t()),f.push(u?b(!1):t()),this.pageList.forEach((function(t,i){var n=u&&e.firstNumber&&1!==l[0]?1:0;f.push(g(t,i+n))})),f.push(d?b(!0):t()),f.push(this.lastNumber&&l[l.length-1]!==s?g({number:s},-1):t()),f.push(v(a+1,this.labelNextPage,"next-text",this.nextText,this.nextClass,s,"pagination-goto-next"));var w=t();this.lastNumber||this.hideGotoEndButtons||(w=v(s,this.labelLastPage,"last-text",this.lastText,this.lastClass,s,"pagination-goto-last")),f.push(w);var T=t("ul",{staticClass:"pagination",class:["b-pagination",this.btnSize,this.alignment,this.styleClass],attrs:{role:r?null:"menubar","aria-disabled":i?"true":"false","aria-label":r?null:o||null},on:r?{}:{keydown:this.handleKeyNav},ref:"ul"},f);return r?t("nav",{attrs:{"aria-disabled":i?"true":null,"aria-hidden":i?"true":"false","aria-label":r&&o||null}},[T]):T}}),Fg=function(t){return Us(lr(t)||20,1)},Ig=function(t){return Us(lr(t)||0,0)},Pg=vs(ee(c(c({},_g),{},{ariaControls:hs(go),perPage:hs(_o,20),totalRows:hs(_o,0)})),Ji),Og=i.default.extend({name:Ji,mixins:[Dg],props:Pg,computed:{numberOfPages:function(){var t=Ks(Ig(this.totalRows)/Fg(this.perPage));return t<1?1:t},pageSizeNumberOfPages:function(){return{perPage:Fg(this.perPage),totalRows:Ig(this.totalRows),numberOfPages:this.numberOfPages}}},watch:{pageSizeNumberOfPages:function(t,e){Pt(e)||(t.perPage!==e.perPage&&t.totalRows===e.totalRows||t.numberOfPages!==e.numberOfPages&&this.currentPage>t.numberOfPages)&&(this.currentPage=1),this.localNumberOfPages=t.numberOfPages}},created:function(){var t=this;this.localNumberOfPages=this.numberOfPages;var e=lr(this[xg],0);e>0?this.currentPage=e:this.$nextTick((function(){t.currentPage=0}))},methods:{onClick:function(t,e){var i=this;if(e!==this.currentPage){var n=t.target,o=new BvEvent(Kn,{cancelable:!0,vueTarget:this,target:n});this.$emit(o.type,o,e),o.defaultPrevented||(this.currentPage=e,this.$emit($n,this.currentPage),this.$nextTick((function(){Dr(n)&&i.$el.contains(n)?ts(n):i.focusCurrent()})))}},makePage:function(t){return t},linkProps:function(){return{}}}}),Vg=me({components:{BPagination:Og}}),Eg=Qt(nl,["event","routerTag"]),Lg=vs(ee(c(c(c({},_g),Eg),{},{baseUrl:hs(go,"/"),linkGen:hs(po),noPageDetect:hs(ho,!1),numberOfPages:hs(_o,1,(function(t){return!(lr(t,0)<1)||(le('Prop "number-of-pages" must be a number greater than "0"',Qi),!1)})),pageGen:hs(po),pages:hs(uo),useRouter:hs(ho,!1)})),Qi),Ag=i.default.extend({name:Qi,mixins:[Dg],props:Lg,computed:{isNav:function(){return!0},computedValue:function(){var t=lr(this.value,0);return t<1?null:t}},watch:{numberOfPages:function(){var t=this;this.$nextTick((function(){t.setNumberOfPages()}))},pages:function(){var t=this;this.$nextTick((function(){t.setNumberOfPages()}))}},created:function(){this.setNumberOfPages()},mounted:function(){var t=this;this.$router&&this.$watch("$route",(function(){t.$nextTick((function(){xr((function(){t.guessCurrentPage()}))}))}))},methods:{setNumberOfPages:function(){var t,e=this;Rt(this.pages)&&this.pages.length>0?this.localNumberOfPages=this.pages.length:this.localNumberOfPages=(t=this.numberOfPages,Us(lr(t,0),1)),this.$nextTick((function(){e.guessCurrentPage()}))},onClick:function(t,e){var i=this;if(e!==this.currentPage){var n=t.currentTarget||t.target,o=new BvEvent(Kn,{cancelable:!0,vueTarget:this,target:n});this.$emit(o.type,o,e),o.defaultPrevented||(xr((function(){i.currentPage=e,i.$emit($n,e)})),this.$nextTick((function(){es(n)})))}},getPageInfo:function(t){if(!Rt(this.pages)||0===this.pages.length||Ft(this.pages[t-1])){var e="".concat(this.baseUrl).concat(t);return{link:this.useRouter?{path:e}:e,text:vr(t)}}var i=this.pages[t-1];if(Mt(i)){var n=i.link;return{link:Mt(n)?n:this.useRouter?{path:n}:n,text:vr(i.text||t)}}return{link:vr(i),text:vr(t)}},makePage:function(t){var e=this.pageGen,i=this.getPageInfo(t);return gs(e)?e(t,i):i.text},makeLink:function(t){var e=this.linkGen,i=this.getPageInfo(t);return gs(e)?e(t,i):i.link},linkProps:function(t){var e=ps(Eg,this),i=this.makeLink(t);return this.useRouter||Mt(i)?e.to=i:e.href=i,e},resolveLink:function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";try{(t=document.createElement("a")).href=ua({to:e},"a","/","/"),document.body.appendChild(t);var i=t,n=i.pathname,o=i.hash,r=i.search;return document.body.removeChild(t),{path:n,hash:o,query:aa(r)}}catch(e){try{t&&t.parentNode&&t.parentNode.removeChild(t)}catch(t){}return{}}},resolveRoute:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";try{var e=this.$router.resolve(t,this.$route).route;return{path:e.path,hash:e.hash,query:e.query}}catch(t){return{}}},guessCurrentPage:function(){var t=this.$router,e=this.$route,i=this.computedValue;if(!this.noPageDetect&&!i&&(M||!M&&t))for(var n=t&&e?{path:e.path,hash:e.hash,query:e.query}:{},o=M?window.location||document.location:null,r=o?{path:o.pathname,hash:o.hash,query:aa(o.search)}:{},s=1;!i&&s<=this.localNumberOfPages;s++){var a=this.makeLink(s);i=t&&(Mt(a)||this.useRouter)?Ua(this.resolveRoute(a),n)?s:null:M?Ua(this.resolveLink(a),r)?s:null:-1}this.currentPage=i>0?i:0}}}),Rg=me({components:{BPaginationNav:Ag}}),Mg={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left",TOPLEFT:"top",TOPRIGHT:"top",RIGHTTOP:"right",RIGHTBOTTOM:"right",BOTTOMLEFT:"bottom",BOTTOMRIGHT:"bottom",LEFTTOP:"left",LEFTBOTTOM:"left"},Hg={AUTO:0,TOPLEFT:-1,TOP:0,TOPRIGHT:1,RIGHTTOP:-1,RIGHT:0,RIGHTBOTTOM:1,BOTTOMLEFT:-1,BOTTOM:0,BOTTOMRIGHT:1,LEFTTOP:-1,LEFT:0,LEFTBOTTOM:1},zg={arrowPadding:hs(_o,6),boundary:hs([HTMLElement,go],"scrollParent"),boundaryPadding:hs(_o,5),fallbackPlacement:hs(Co,"flip"),offset:hs(_o,0),placement:hs(go,"top"),target:hs([HTMLElement,SVGElement])},Ng=i.default.extend({name:"BVPopper",props:zg,data:function(){return{noFade:!1,localShow:!0,attachment:this.getAttachment(this.placement)}},computed:{templateType:function(){return"unknown"},popperConfig:function(){var t=this,e=this.placement;return{placement:this.getAttachment(e),modifiers:{offset:{offset:this.getOffset(e)},flip:{behavior:this.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{padding:this.boundaryPadding,boundariesElement:this.boundary}},onCreate:function(e){e.originalPlacement!==e.placement&&t.popperPlacementChange(e)},onUpdate:function(e){t.popperPlacementChange(e)}}}},created:function(){var t=this;this.$_popper=null,this.localShow=!0,this.$on(to,(function(e){t.popperCreate(e)}));var e=function(){t.$nextTick((function(){xr((function(){t.$destroy()}))}))};this.$parent.$once(ro,e),this.$once(zn,e)},beforeMount:function(){this.attachment=this.getAttachment(this.placement)},updated:function(){this.updatePopper()},beforeDestroy:function(){this.destroyPopper()},destroyed:function(){var t=this.$el;t&&t.parentNode&&t.parentNode.removeChild(t)},methods:{hide:function(){this.localShow=!1},getAttachment:function(t){return Mg[String(t).toUpperCase()]||"auto"},getOffset:function(t){if(!this.offset){var e=this.$refs.arrow||Or(".arrow",this.$el),i=cr(Kr(e).width,0)+cr(this.arrowPadding,0);switch(Hg[String(t).toUpperCase()]||0){case 1:return"+50%p - ".concat(i,"px");case-1:return"-50%p + ".concat(i,"px");default:return 0}}return this.offset},popperCreate:function(t){this.destroyPopper(),this.$_popper=new mh(this.target,t,this.popperConfig)},destroyPopper:function(){this.$_popper&&this.$_popper.destroy(),this.$_popper=null},updatePopper:function(){this.$_popper&&this.$_popper.scheduleUpdate()},popperPlacementChange:function(t){this.attachment=this.getAttachment(t.placement)},renderTemplate:function(t){return t("div")}},render:function(t){var e=this,i=this.noFade;return t(Ls,{props:{appear:!0,noFade:i},on:{beforeEnter:function(t){return e.$emit(to,t)},afterEnter:function(t){return e.$emit(eo,t)},beforeLeave:function(t){return e.$emit(Nn,t)},afterLeave:function(t){return e.$emit(zn,t)}}},[this.localShow?this.renderTemplate(t):t()])}}),jg={html:hs(ho,!1),id:hs(go)},Gg=i.default.extend({name:"BVTooltipTemplate",extends:Ng,mixins:[ib],props:jg,data:function(){return{title:"",content:"",variant:null,customClass:null,interactive:!0}},computed:{templateType:function(){return"tooltip"},templateClasses:function(){var t,e=this.variant,i=this.attachment,n=this.templateType;return[(t={noninteractive:!this.interactive},a(t,"b-".concat(n,"-").concat(e),e),a(t,"bs-".concat(n,"-").concat(i),i),t),this.customClass]},templateAttributes:function(){var t=this.id;return c(c({},this.$parent.$parent.$attrs),{},{id:t,role:"tooltip",tabindex:"-1"},this.scopedStyleAttrs)},templateListeners:function(){var t=this;return{mouseenter:function(e){t.$emit(Wn,e)},mouseleave:function(e){t.$emit(Yn,e)},focusin:function(e){t.$emit(Rn,e)},focusout:function(e){t.$emit(Mn,e)}}}},methods:{renderTemplate:function(t){var e=this.title,i=Ot(e)?e({}):e,n=this.html&&!Ot(e)?{innerHTML:e}:{};return t("div",{staticClass:"tooltip b-tooltip",class:this.templateClasses,attrs:this.templateAttributes,on:this.templateListeners},[t("div",{staticClass:"arrow",ref:"arrow"}),t("div",{staticClass:"tooltip-inner",domProps:n},[i])])}}}),Wg=".modal-content",Yg=Ds(Ni,zn),Ug=[Wg,".b-sidebar"].join(", "),qg="data-original-title",Kg={title:"",content:"",variant:null,customClass:null,triggers:"",placement:"auto",fallbackPlacement:"flip",target:null,container:null,noFade:!1,boundary:"scrollParent",boundaryPadding:5,offset:0,delay:0,arrowPadding:6,interactive:!0,disabled:!1,id:null,html:!1},Xg=i.default.extend({name:"BVTooltip",mixins:[Ja],data:function(){return c(c({},Kg),{},{activeTrigger:{hover:!1,click:!1,focus:!1},localShow:!1})},computed:{templateType:function(){return"tooltip"},computedId:function(){return this.id||"__bv_".concat(this.templateType,"_").concat(this._uid,"__")},computedDelay:function(){var t={show:0,hide:0};return Ht(this.delay)?(t.show=Us(lr(this.delay.show,0),0),t.hide=Us(lr(this.delay.hide,0),0)):(Lt(this.delay)||Et(this.delay))&&(t.show=t.hide=Us(lr(this.delay,0),0)),t},computedTriggers:function(){return or(this.triggers).filter(ne).join(" ").trim().toLowerCase().split(/\s+/).sort()},isWithActiveTrigger:function(){for(var t in this.activeTrigger)if(this.activeTrigger[t])return!0;return!1},computedTemplateData:function(){return{title:this.title,content:this.content,variant:this.variant,customClass:this.customClass,noFade:this.noFade,interactive:this.interactive}}},watch:{computedTriggers:function(t,e){var i=this;Ua(t,e)||this.$nextTick((function(){i.unListen(),e.forEach((function(e){nr(t,e)||i.activeTrigger[e]&&(i.activeTrigger[e]=!1)})),i.listen()}))},computedTemplateData:function(){this.handleTemplateUpdate()},title:function(t,e){t===e||t||this.hide()},disabled:function(t){t?this.disable():this.enable()}},created:function(){var t=this;this.$_tip=null,this.$_hoverTimeout=null,this.$_hoverState="",this.$_visibleInterval=null,this.$_enabled=!this.disabled,this.$_noop=su.bind(this),this.$parent&&this.$parent.$once(oo,(function(){t.$nextTick((function(){xr((function(){t.$destroy()}))}))})),this.$nextTick((function(){var e=t.getTarget();e&&Lr(document.body,e)?(t.scopeId=eb(t.$parent),t.listen()):le(Et(t.target)?'Unable to find target element by ID "#'.concat(t.target,'" in document.'):"The provided target is no valid HTML element.",t.templateType)}))},updated:function(){this.$nextTick(this.handleTemplateUpdate)},deactivated:function(){this.forceHide()},beforeDestroy:function(){this.unListen(),this.setWhileOpenListeners(!1),this.clearHoverTimeout(),this.clearVisibilityInterval(),this.destroyTemplate(),this.$_noop=null},methods:{getTemplate:function(){return Gg},updateData:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=!1;Kt(Kg).forEach((function(n){Ft(e[n])||t[n]===e[n]||(t[n]=e[n],"title"===n&&(i=!0))})),i&&this.localShow&&this.fixTitle()},createTemplateAndShow:function(){var t=this.getContainer(),e=this.getTemplate(),i=this.$_tip=new e({parent:this,propsData:{id:this.computedId,html:this.html,placement:this.placement,fallbackPlacement:this.fallbackPlacement,target:this.getPlacementTarget(),boundary:this.getBoundary(),offset:lr(this.offset,0),arrowPadding:lr(this.arrowPadding,0),boundaryPadding:lr(this.boundaryPadding,0)}});this.handleTemplateUpdate(),i.$once(to,this.onTemplateShow),i.$once(eo,this.onTemplateShown),i.$once(Nn,this.onTemplateHide),i.$once(zn,this.onTemplateHidden),i.$once(ro,this.destroyTemplate),i.$on(Rn,this.handleEvent),i.$on(Mn,this.handleEvent),i.$on(Wn,this.handleEvent),i.$on(Yn,this.handleEvent),i.$mount(t.appendChild(document.createElement("div")))},hideTemplate:function(){this.$_tip&&this.$_tip.hide(),this.clearActiveTriggers(),this.$_hoverState=""},destroyTemplate:function(){this.setWhileOpenListeners(!1),this.clearHoverTimeout(),this.$_hoverState="",this.clearActiveTriggers(),this.localPlacementTarget=null;try{this.$_tip.$destroy()}catch(t){}this.$_tip=null,this.removeAriaDescribedby(),this.restoreTitle(),this.localShow=!1},getTemplateElement:function(){return this.$_tip?this.$_tip.$el:null},handleTemplateUpdate:function(){var t=this,e=this.$_tip;if(e){["title","content","variant","customClass","noFade","interactive"].forEach((function(i){e[i]!==t[i]&&(e[i]=t[i])}))}},show:function(){var t=this.getTarget();if(t&&Lr(document.body,t)&&Dr(t)&&!this.dropdownOpen()&&(!Pt(this.title)&&""!==this.title||!Pt(this.content)&&""!==this.content)&&!this.$_tip&&!this.localShow){this.localShow=!0;var e=this.buildEvent(to,{cancelable:!0});this.emitEvent(e),e.defaultPrevented?this.destroyTemplate():(this.fixTitle(),this.addAriaDescribedby(),this.createTemplateAndShow())}},hide:function(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=this.getTemplateElement();if(e&&this.localShow){var i=this.buildEvent(Nn,{cancelable:!t});this.emitEvent(i),i.defaultPrevented||this.hideTemplate()}else this.restoreTitle()},forceHide:function(){this.getTemplateElement()&&this.localShow&&(this.setWhileOpenListeners(!1),this.clearHoverTimeout(),this.$_hoverState="",this.clearActiveTriggers(),this.$_tip&&(this.$_tip.noFade=!0),this.hide(!0))},enable:function(){this.$_enabled=!0,this.emitEvent(this.buildEvent(En))},disable:function(){this.$_enabled=!1,this.emitEvent(this.buildEvent(On))},onTemplateShow:function(){this.setWhileOpenListeners(!0)},onTemplateShown:function(){var t=this.$_hoverState;this.$_hoverState="","out"===t&&this.leave(null),this.emitEvent(this.buildEvent(eo))},onTemplateHide:function(){this.setWhileOpenListeners(!1)},onTemplateHidden:function(){this.destroyTemplate(),this.emitEvent(this.buildEvent(zn))},getTarget:function(){var t=this.target;return Et(t)?t=Ar(t.replace(/^#/,"")):Ot(t)?t=t():t&&(t=t.$el||t),kr(t)?t:null},getPlacementTarget:function(){return this.getTarget()},getTargetId:function(){var t=this.getTarget();return t&&t.id?t.id:null},getContainer:function(){var t=!!this.container&&(this.container.$el||this.container),e=document.body,i=this.getTarget();return!1===t?Er(Ug,i)||e:Et(t)&&Ar(t.replace(/^#/,""))||e},getBoundary:function(){return this.boundary?this.boundary.$el||this.boundary:"scrollParent"},isInModal:function(){var t=this.getTarget();return t&&Er(Wg,t)},isDropdown:function(){var t=this.getTarget();return t&&Hr(t,"dropdown")},dropdownOpen:function(){var t=this.getTarget();return this.isDropdown()&&t&&Or(".dropdown-menu.show",t)},clearHoverTimeout:function(){clearTimeout(this.$_hoverTimeout),this.$_hoverTimeout=null},clearVisibilityInterval:function(){clearInterval(this.$_visibleInterval),this.$_visibleInterval=null},clearActiveTriggers:function(){for(var t in this.activeTrigger)this.activeTrigger[t]=!1},addAriaDescribedby:function(){var t=this.getTarget(),e=jr(t,"aria-describedby")||"";e=e.split(/\s+/).concat(this.computedId).join(" ").trim(),zr(t,"aria-describedby",e)},removeAriaDescribedby:function(){var t=this,e=this.getTarget(),i=jr(e,"aria-describedby")||"";(i=i.split(/\s+/).filter((function(e){return e!==t.computedId})).join(" ").trim())?zr(e,"aria-describedby",i):Nr(e,"aria-describedby")},fixTitle:function(){var t=this.getTarget();if(Gr(t,"title")){var e=jr(t,"title");zr(t,"title",""),e&&zr(t,qg,e)}},restoreTitle:function(){var t=this.getTarget();if(Gr(t,qg)){var e=jr(t,qg);Nr(t,qg),e&&zr(t,"title",e)}},buildEvent:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new BvEvent(t,c({cancelable:!1,target:this.getTarget(),relatedTarget:this.getTemplateElement()||null,componentId:this.computedId,vueTarget:this},e))},emitEvent:function(t){var e=t.type;this.emitOnRoot(Ds(this.templateType,e),t),this.$emit(e,t)},listen:function(){var t=this,e=this.getTarget();e&&(this.setRootListener(!0),this.computedTriggers.forEach((function(i){"click"===i?Ss(e,"click",t.handleEvent,lo):"focus"===i?(Ss(e,"focusin",t.handleEvent,lo),Ss(e,"focusout",t.handleEvent,lo)):"blur"===i?Ss(e,"focusout",t.handleEvent,lo):"hover"===i&&(Ss(e,"mouseenter",t.handleEvent,lo),Ss(e,"mouseleave",t.handleEvent,lo))}),this))},unListen:function(){var t=this,e=this.getTarget();this.setRootListener(!1),["click","focusin","focusout","mouseenter","mouseleave"].forEach((function(i){e&&ks(e,i,t.handleEvent,lo)}),this)},setRootListener:function(t){var e=this.$root;if(e){var i=t?"$on":"$off",n=this.templateType;e[i](Fs(n,Nn),this.doHide),e[i](Fs(n,to),this.doShow),e[i](Fs(n,Pn),this.doDisable),e[i](Fs(n,Vn),this.doEnable)}},setWhileOpenListeners:function(t){this.setModalListener(t),this.setDropdownListener(t),this.visibleCheck(t),this.setOnTouchStartListener(t)},visibleCheck:function(t){var e=this;this.clearVisibilityInterval();var i=this.getTarget(),n=this.getTemplateElement();t&&(this.$_visibleInterval=setInterval((function(){!n||!e.localShow||i.parentNode&&Dr(i)||e.forceHide()}),100))},setModalListener:function(t){this.isInModal()&&this.$root[t?"$on":"$off"](Yg,this.forceHide)},setOnTouchStartListener:function(t){var e=this;"ontouchstart"in document.documentElement&&ir(document.body.children).forEach((function(i){$s(t,i,"mouseover",e.$_noop)}))},setDropdownListener:function(t){var e=this.getTarget();e&&this.$root&&this.isDropdown&&e.__vue__&&e.__vue__[t?"$on":"$off"](eo,this.forceHide)},handleEvent:function(t){var e=this.getTarget();if(e&&!Fr(e)&&this.$_enabled&&!this.dropdownOpen()){var i=t.type,n=this.computedTriggers;if("click"===i&&nr(n,"click"))this.click(t);else if("mouseenter"===i&&nr(n,"hover"))this.enter(t);else if("focusin"===i&&nr(n,"focus"))this.enter(t);else if("focusout"===i&&(nr(n,"focus")||nr(n,"blur"))||"mouseleave"===i&&nr(n,"hover")){var o=this.getTemplateElement(),r=t.target,s=t.relatedTarget;if(o&&Lr(o,r)&&Lr(e,s)||o&&Lr(e,r)&&Lr(o,s)||o&&Lr(o,r)&&Lr(o,s)||Lr(e,r)&&Lr(e,s))return;this.leave(t)}}},doHide:function(t){t&&this.getTargetId()!==t&&this.computedId!==t||this.forceHide()},doShow:function(t){t&&this.getTargetId()!==t&&this.computedId!==t||this.show()},doDisable:function(t){t&&this.getTargetId()!==t&&this.computedId!==t||this.disable()},doEnable:function(t){t&&this.getTargetId()!==t&&this.computedId!==t||this.enable()},click:function(t){this.$_enabled&&!this.dropdownOpen()&&(ts(t.currentTarget),this.activeTrigger.click=!this.activeTrigger.click,this.isWithActiveTrigger?this.enter(null):this.leave(null))},toggle:function(){this.$_enabled&&!this.dropdownOpen()&&(this.localShow?this.leave(null):this.enter(null))},enter:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;e&&(this.activeTrigger["focusin"===e.type?"focus":"hover"]=!0),this.localShow||"in"===this.$_hoverState?this.$_hoverState="in":(this.clearHoverTimeout(),this.$_hoverState="in",this.computedDelay.show?(this.fixTitle(),this.$_hoverTimeout=setTimeout((function(){"in"===t.$_hoverState?t.show():t.localShow||t.restoreTitle()}),this.computedDelay.show)):this.show())},leave:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;e&&(this.activeTrigger["focusout"===e.type?"focus":"hover"]=!1,"focusout"===e.type&&nr(this.computedTriggers,"blur")&&(this.activeTrigger.click=!1,this.activeTrigger.hover=!1)),this.isWithActiveTrigger||(this.clearHoverTimeout(),this.$_hoverState="out",this.computedDelay.hide?this.$_hoverTimeout=setTimeout((function(){"out"===t.$_hoverState&&t.hide()}),this.computedDelay.hide):this.hide())}}}),Zg="disabled",Jg="update:disabled",Qg="show",ty=vs((a(Jb={boundary:hs([HTMLElement,vo,go],"scrollParent"),boundaryPadding:hs(_o,50),container:hs([HTMLElement,vo,go]),customClass:hs(go),delay:hs(Do,50)},Zg,hs(ho,!1)),a(Jb,"fallbackPlacement",hs(Co,"flip")),a(Jb,"id",hs(go)),a(Jb,"noFade",hs(ho,!1)),a(Jb,"noninteractive",hs(ho,!1)),a(Jb,"offset",hs(_o,0)),a(Jb,"placement",hs(go,"top")),a(Jb,Qg,hs(ho,!1)),a(Jb,"target",hs([HTMLElement,SVGElement,po,vo,go],void 0,!0)),a(Jb,"title",hs(go)),a(Jb,"triggers",hs(Co,"hover focus")),a(Jb,"variant",hs(go)),Jb),Sn),ey=i.default.extend({name:Sn,mixins:[Cs],inheritAttrs:!1,props:ty,data:function(){return{localShow:this.show,localTitle:"",localContent:""}},computed:{templateData:function(){return c({title:this.localTitle,content:this.localContent,interactive:!this.noninteractive},Jt(this.$props,["boundary","boundaryPadding","container","customClass","delay","fallbackPlacement","id","noFade","offset","placement","target","target","triggers","variant",Zg]))},templateTitleContent:function(){return{title:this.title,content:this.content}}},watch:(Qb={},a(Qb,Qg,(function(t,e){t!==e&&t!==this.localShow&&this.$_toolpop&&(t?this.$_toolpop.show():this.$_toolpop.forceHide())})),a(Qb,Zg,(function(t){t?this.doDisable():this.doEnable()})),a(Qb,"localShow",(function(t){this.$emit("update:show",t)})),a(Qb,"templateData",(function(){var t=this;this.$nextTick((function(){t.$_toolpop&&t.$_toolpop.updateData(t.templateData)}))})),a(Qb,"templateTitleContent",(function(){this.$nextTick(this.updateContent)})),Qb),created:function(){this.$_toolpop=null},updated:function(){this.$nextTick(this.updateContent)},beforeDestroy:function(){this.$off(qn,this.doOpen),this.$off(_n,this.doClose),this.$off(Pn,this.doDisable),this.$off(Vn,this.doEnable),this.$_toolpop&&(this.$_toolpop.$destroy(),this.$_toolpop=null)},mounted:function(){var t=this;this.$nextTick((function(){var e=t.getComponent();t.updateContent();var i=eb(t)||eb(t.$parent),n=t.$_toolpop=new e({parent:t,_scopeId:i||void 0});n.updateData(t.templateData),n.$on(to,t.onShow),n.$on(eo,t.onShown),n.$on(Nn,t.onHide),n.$on(zn,t.onHidden),n.$on(On,t.onDisabled),n.$on(En,t.onEnabled),t.disabled&&t.doDisable(),t.$on(qn,t.doOpen),t.$on(_n,t.doClose),t.$on(Pn,t.doDisable),t.$on(Vn,t.doEnable),t.localShow&&n.show()}))},methods:{getComponent:function(){return Xg},updateContent:function(){this.setTitle(this.normalizeSlot()||this.title)},setTitle:function(t){t=Pt(t)?"":t,this.localTitle!==t&&(this.localTitle=t)},setContent:function(t){t=Pt(t)?"":t,this.localContent!==t&&(this.localContent=t)},onShow:function(t){this.$emit(to,t),t&&(this.localShow=!t.defaultPrevented)},onShown:function(t){this.localShow=!0,this.$emit(eo,t)},onHide:function(t){this.$emit(Nn,t)},onHidden:function(t){this.$emit(zn,t),this.localShow=!1},onDisabled:function(t){t&&t.type===On&&(this.$emit(Jg,!0),this.$emit(On,t))},onEnabled:function(t){t&&t.type===En&&(this.$emit(Jg,!1),this.$emit(En,t))},doOpen:function(){!this.localShow&&this.$_toolpop&&this.$_toolpop.show()},doClose:function(){this.localShow&&this.$_toolpop&&this.$_toolpop.hide()},doDisable:function(){this.$_toolpop&&this.$_toolpop.disable()},doEnable:function(){this.$_toolpop&&this.$_toolpop.enable()}},render:function(t){return t()}}),iy=i.default.extend({name:"BVPopoverTemplate",extends:Gg,computed:{templateType:function(){return"popover"}},methods:{renderTemplate:function(t){var e=this.title,i=this.content,n=Ot(e)?e({}):e,o=Ot(i)?i({}):i,r=this.html&&!Ot(e)?{innerHTML:e}:{},s=this.html&&!Ot(i)?{innerHTML:i}:{};return t("div",{staticClass:"popover b-popover",class:this.templateClasses,attrs:this.templateAttributes,on:this.templateListeners},[t("div",{staticClass:"arrow",ref:"arrow"}),Pt(n)||""===n?t():t("h3",{staticClass:"popover-header",domProps:r},[n]),Pt(o)||""===o?t():t("div",{staticClass:"popover-body",domProps:s},[o])])}}}),ny=i.default.extend({name:"BVPopover",extends:Xg,computed:{templateType:function(){return"popover"}},methods:{getTemplate:function(){return iy}}}),oy=vs(ee(c(c({},ty),{},{content:hs(go),placement:hs(go,"right"),triggers:hs(Co,Bn)})),tn),ry=i.default.extend({name:tn,extends:ey,inheritAttrs:!1,props:oy,methods:{getComponent:function(){return ny},updateContent:function(){this.setContent(this.normalizeSlot()||this.content),this.setTitle(this.normalizeSlot(tr)||this.title)}}}),sy="__BV_Popover__",ay={focus:!0,hover:!0,click:!0,blur:!0,manual:!0},ly=/^html$/i,cy=/^nofade$/i,uy=/^(auto|top(left|right)?|bottom(left|right)?|left(top|bottom)?|right(top|bottom)?)$/i,dy=/^(window|viewport|scrollParent)$/i,hy=/^d\d+$/i,fy=/^ds\d+$/i,py=/^dh\d+$/i,my=/^o-?\d+$/i,vy=/^v-.+$/i,by=/\s+/,gy=function(t,e,i){if(M){var n=function(t,e){var i={title:void 0,content:void 0,trigger:"",placement:"right",fallbackPlacement:"flip",container:!1,animation:!0,offset:0,disabled:!1,id:null,html:!1,delay:rs(tn,"delay",50),boundary:String(rs(tn,"boundary","scrollParent")),boundaryPadding:lr(rs(tn,"boundaryPadding",5),0),variant:rs(tn,"variant"),customClass:rs(tn,"customClass")};if(Et(t.value)||Lt(t.value)||Ot(t.value)?i.content=t.value:Ht(t.value)&&(i=c(c({},i),t.value)),t.arg&&(i.container="#".concat(t.arg)),Ft(i.title)){var n=e.data||{};i.title=n.attrs&&!Pt(n.attrs.title)?n.attrs.title:void 0}Ht(i.delay)||(i.delay={show:lr(i.delay,0),hide:lr(i.delay,0)}),Kt(t.modifiers).forEach((function(t){if(ly.test(t))i.html=!0;else if(cy.test(t))i.animation=!1;else if(uy.test(t))i.placement=t;else if(dy.test(t))t="scrollparent"===t?"scrollParent":t,i.boundary=t;else if(hy.test(t)){var e=lr(t.slice(1),0);i.delay.show=e,i.delay.hide=e}else fy.test(t)?i.delay.show=lr(t.slice(2),0):py.test(t)?i.delay.hide=lr(t.slice(2),0):my.test(t)?i.offset=lr(t.slice(1),0):vy.test(t)&&(i.variant=t.slice(2)||null)}));var o={};return or(i.trigger||"").filter(ne).join(" ").trim().toLowerCase().split(by).forEach((function(t){ay[t]&&(o[t]=!0)})),Kt(t.modifiers).forEach((function(t){t=t.toLowerCase(),ay[t]&&(o[t]=!0)})),i.trigger=Kt(o).join(" "),"blur"===i.trigger&&(i.trigger="focus"),i.trigger||(i.trigger="click"),i}(e,i);if(!t[sy]){var o=i.context;t[sy]=new ny({parent:o,_scopeId:eb(o,void 0)}),t[sy].__bv_prev_data__={},t[sy].$on(to,(function(){var e={};Ot(n.title)&&(e.title=n.title(t)),Ot(n.content)&&(e.content=n.content(t)),Kt(e).length>0&&t[sy].updateData(e)}))}var r={title:n.title,content:n.content,triggers:n.trigger,placement:n.placement,fallbackPlacement:n.fallbackPlacement,variant:n.variant,customClass:n.customClass,container:n.container,boundary:n.boundary,delay:n.delay,offset:n.offset,noFade:!n.animation,id:n.id,disabled:n.disabled,html:n.html},s=t[sy].__bv_prev_data__;if(t[sy].__bv_prev_data__=r,!Ua(r,s)){var a={target:t};Kt(r).forEach((function(e){r[e]!==s[e]&&(a[e]="title"!==e&&"content"!==e||!Ot(r[e])?r[e]:r[e](t))})),t[sy].updateData(a)}}},yy=me({directives:{VBPopover:{bind:function(t,e,i){gy(t,e,i)},componentUpdated:function(t,e,i){i.context.$nextTick((function(){gy(t,e,i)}))},unbind:function(t){!function(t){t[sy]&&(t[sy].$destroy(),t[sy]=null),delete t[sy]}(t)}}}}),wy=me({components:{BPopover:ry},plugins:{VBPopoverPlugin:yy}}),Ty=vs({animated:hs(ho,null),label:hs(go),labelHtml:hs(go),max:hs(_o,null),precision:hs(_o,null),showProgress:hs(ho,null),showValue:hs(ho,null),striped:hs(ho,null),value:hs(_o,0),variant:hs(go)},nn),Cy=i.default.extend({name:nn,mixins:[Cs],inject:{bvProgress:{default:function(){return{}}}},props:Ty,computed:{progressBarClasses:function(){var t=this.computedAnimated,e=this.computedVariant;return[e?"bg-".concat(e):"",this.computedStriped||t?"progress-bar-striped":"",t?"progress-bar-animated":""]},progressBarStyles:function(){return{width:this.computedValue/this.computedMax*100+"%"}},computedValue:function(){return cr(this.value,0)},computedMax:function(){var t=cr(this.max)||cr(this.bvProgress.max,0);return t>0?t:100},computedPrecision:function(){return Us(lr(this.precision,lr(this.bvProgress.precision,0)),0)},computedProgress:function(){var t=this.computedPrecision,e=Zs(10,t);return ur(100*e*this.computedValue/this.computedMax/e,t)},computedVariant:function(){return this.variant||this.bvProgress.variant},computedStriped:function(){return Vt(this.striped)?this.striped:this.bvProgress.striped||!1},computedAnimated:function(){return Vt(this.animated)?this.animated:this.bvProgress.animated||!1},computedShowProgress:function(){return Vt(this.showProgress)?this.showProgress:this.bvProgress.showProgress||!1},computedShowValue:function(){return Vt(this.showValue)?this.showValue:this.bvProgress.showValue||!1}},render:function(t){var e,i=this.label,n=this.labelHtml,o=this.computedValue,r=this.computedPrecision,s={};return this.hasNormalizedSlot()?e=this.normalizeSlot():i||n?s=Fl(n,i):this.computedShowProgress?e=this.computedProgress:this.computedShowValue&&(e=ur(o,r)),t("div",{staticClass:"progress-bar",class:this.progressBarClasses,style:this.progressBarStyles,attrs:{role:"progressbar","aria-valuemin":"0","aria-valuemax":vr(this.computedMax),"aria-valuenow":ur(o,r)},domProps:s},e)}}),xy=Qt(Ty,["label","labelHtml"]),Sy=vs(ee(c(c({},xy),{},{animated:hs(ho,!1),height:hs(go),max:hs(_o,100),precision:hs(_o,0),showProgress:hs(ho,!1),showValue:hs(ho,!1),striped:hs(ho,!1)})),en),ky=me({components:{BProgress:i.default.extend({name:en,mixins:[Cs],provide:function(){return{bvProgress:this}},props:Sy,computed:{progressHeight:function(){return{height:this.height||null}}},render:function(t){var e=this.normalizeSlot();return e||(e=t(Cy,{props:ps(xy,this.$props)})),t("div",{staticClass:"progress",style:this.progressHeight},[e])}}),BProgressBar:Cy}}),$y="b-sidebar",By=Fs(Ue,"request-state"),_y=Fs(Ue,"toggle"),Dy=Ds(Ue,"state"),Fy=Ds(Ue,"sync-state"),Iy=ys("visible",{type:ho,defaultValue:!1,event:$n}),Py=Iy.mixin,Oy=Iy.props,Vy=Iy.prop,Ey=Iy.event,Ly=vs(ee(c(c(c({},fc),Oy),{},{ariaLabel:hs(go),ariaLabelledby:hs(go),backdrop:hs(ho,!1),backdropVariant:hs(go,"dark"),bgVariant:hs(go,"light"),bodyClass:hs(To),closeLabel:hs(go),footerClass:hs(To),headerClass:hs(To),lazy:hs(ho,!1),noCloseOnBackdrop:hs(ho,!1),noCloseOnEsc:hs(ho,!1),noCloseOnRouteChange:hs(ho,!1),noEnforceFocus:hs(ho,!1),noHeader:hs(ho,!1),noHeaderClose:hs(ho,!1),noSlide:hs(ho,!1),right:hs(ho,!1),shadow:hs(ko,!1),sidebarClass:hs(To),tag:hs(go,"div"),textVariant:hs(go,"dark"),title:hs(go),width:hs(go),zIndex:hs(_o)})),rn),Ay=function(t,e){if(e.noHeader)return t();var i=e.normalizeSlot(No,e.slotScope);if(!i){var n=function(t,e){var i=e.normalizeSlot(tr,e.slotScope)||e.title;return i?t("strong",{attrs:{id:e.safeId("__title__")}},[i]):t("span")}(t,e),o=function(t,e){if(e.noHeaderClose)return t();var i=e.closeLabel,n=e.textVariant,o=e.hide;return t(Ps,{props:{ariaLabel:i,textVariant:n},on:{click:o},ref:"close-button"},[e.normalizeSlot("header-close")||t(Oa)])}(t,e);i=e.right?[o,n]:[n,o]}return t("header",{staticClass:"".concat($y,"-header"),class:e.headerClass,key:"header"},i)},Ry=function(t,e){return t("div",{staticClass:"".concat($y,"-body"),class:e.bodyClass,key:"body"},[e.normalizeSlot(Ao,e.slotScope)])},My=function(t,e){var i=e.normalizeSlot(zo,e.slotScope);return i?t("footer",{staticClass:"".concat($y,"-footer"),class:e.footerClass,key:"footer"},[i]):t()},Hy=function(t,e){var i=Ay(t,e);return e.lazy&&!e.isOpen?i:[i,Ry(t,e),My(t,e)]},zy=function(t,e){if(!e.backdrop)return t();var i=e.backdropVariant;return t("div",{directives:[{name:"show",value:e.localShow}],staticClass:"b-sidebar-backdrop",class:a({},"bg-".concat(i),i),on:{click:e.onBackdropClick}})},Ny=me({components:{BSidebar:i.default.extend({name:rn,mixins:[Za,pc,Py,Ja,Cs],inheritAttrs:!1,props:Ly,data:function(){var t=!!this[Vy];return{localShow:t,isOpen:t}},computed:{transitionProps:function(){return this.noSlide?{css:!0}:{css:!0,enterClass:"",enterActiveClass:"slide",enterToClass:"show",leaveClass:"show",leaveActiveClass:"slide",leaveToClass:""}},slotScope:function(){return{hide:this.hide,right:this.right,visible:this.localShow}},hasTitle:function(){var t=this.$scopedSlots,e=this.$slots;return!(this.noHeader||this.hasNormalizedSlot(No)||!this.normalizeSlot(tr,this.slotScope,t,e)&&!this.title)},titleId:function(){return this.hasTitle?this.safeId("__title__"):null},computedAttrs:function(){return c(c({},this.bvAttrs),{},{id:this.safeId(),tabindex:"-1",role:"dialog","aria-modal":this.backdrop?"true":"false","aria-hidden":this.localShow?null:"true","aria-label":this.ariaLabel||null,"aria-labelledby":this.ariaLabelledby||this.titleId||null})}},watch:(tg={},a(tg,Vy,(function(t,e){t!==e&&(this.localShow=t)})),a(tg,"localShow",(function(t,e){t!==e&&(this.emitState(t),this.$emit(Ey,t))})),a(tg,"$route",(function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this.noCloseOnRouteChange||t.fullPath===e.fullPath||this.hide()})),tg),created:function(){this.$_returnFocusEl=null},mounted:function(){var t=this;this.listenOnRoot(_y,this.handleToggle),this.listenOnRoot(By,this.handleSync),this.$nextTick((function(){t.emitState(t.localShow)}))},activated:function(){this.emitSync()},beforeDestroy:function(){this.localShow=!1,this.$_returnFocusEl=null},methods:{hide:function(){this.localShow=!1},emitState:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.localShow;this.emitOnRoot(Dy,this.safeId(),t)},emitSync:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.localShow;this.emitOnRoot(Fy,this.safeId(),t)},handleToggle:function(t){t&&t===this.safeId()&&(this.localShow=!this.localShow)},handleSync:function(t){var e=this;t&&t===this.safeId()&&this.$nextTick((function(){e.emitSync(e.localShow)}))},onKeydown:function(t){var e=t.keyCode;!this.noCloseOnEsc&&27===e&&this.localShow&&this.hide()},onBackdropClick:function(){this.localShow&&!this.noCloseOnBackdrop&&this.hide()},onTopTrapFocus:function(){var t=Qr(this.$refs.content);this.enforceFocus(t.reverse()[0])},onBottomTrapFocus:function(){var t=Qr(this.$refs.content);this.enforceFocus(t[0])},onBeforeEnter:function(){this.$_returnFocusEl=$r(M?[document.body]:[]),this.isOpen=!0},onAfterEnter:function(t){Lr(t,$r())||this.enforceFocus(t),this.$emit(eo)},onAfterLeave:function(){this.enforceFocus(this.$_returnFocusEl),this.$_returnFocusEl=null,this.isOpen=!1,this.$emit(zn)},enforceFocus:function(t){this.noEnforceFocus||ts(t)}},render:function(t){var e,i=this.bgVariant,n=this.width,o=this.textVariant,r=this.localShow,s=""===this.shadow||this.shadow,l=t(this.tag,{staticClass:$y,class:[(e={shadow:!0===s},a(e,"shadow-".concat(s),s&&!0!==s),a(e,"".concat($y,"-right"),this.right),a(e,"bg-".concat(i),i),a(e,"text-".concat(o),o),e),this.sidebarClass],style:{width:n},attrs:this.computedAttrs,directives:[{name:"show",value:r}],ref:"content"},[Hy(t,this)]);l=t("transition",{props:this.transitionProps,on:{beforeEnter:this.onBeforeEnter,afterEnter:this.onAfterEnter,afterLeave:this.onAfterLeave}},[l]);var c=t(Ls,{props:{noFade:this.noSlide}},[zy(t,this)]),u=t(),d=t();return this.backdrop&&r&&(u=t("div",{attrs:{tabindex:"0"},on:{focus:this.onTopTrapFocus}}),d=t("div",{attrs:{tabindex:"0"},on:{focus:this.onBottomTrapFocus}})),t("div",{staticClass:"b-sidebar-outer",style:{zIndex:this.zIndex},attrs:{tabindex:"-1"},on:{keydown:this.onKeydown}},[u,l,d,c])}})},plugins:{VBTogglePlugin:ld}}),jy=vs({animation:hs(go,"wave"),height:hs(go),size:hs(go),type:hs(go,"text"),variant:hs(go),width:hs(go)},sn),Gy=i.default.extend({name:sn,functional:!0,props:jy,render:function(t,e){var i,n=e.data,o=e.props,r=o.size,s=o.animation,l=o.variant;return t("div",F(n,{staticClass:"b-skeleton",style:{width:r||o.width,height:r||o.height},class:(i={},a(i,"b-skeleton-".concat(o.type),!0),a(i,"b-skeleton-animate-".concat(s),s),a(i,"bg-".concat(l),l),i)}))}}),Wy=(vs(Qt(fa,["content","stacked"]),"BIconstack"),vs({animation:hs(go,"wave"),icon:hs(go),iconProps:hs(vo,{})},an)),Yy=i.default.extend({name:an,functional:!0,props:Wy,render:function(t,e){var i=e.props,n=i.icon,o=i.animation,r=t(Aa,{staticClass:"b-skeleton-icon",props:c(c({},i.iconProps),{},{icon:n})});return t("div",{staticClass:"b-skeleton-icon-wrapper position-relative d-inline-block overflow-hidden",class:a({},"b-skeleton-animate-".concat(o),o)},[r])}}),Uy=vs({animation:hs(go),aspect:hs(go,"16:9"),cardImg:hs(go),height:hs(go),noAspect:hs(ho,!1),variant:hs(go),width:hs(go)},ln),qy=i.default.extend({name:ln,functional:!0,props:Uy,render:function(t,e){var i=e.props,n=i.aspect,o=i.width,r=i.height,s=i.animation,l=i.variant,c=i.cardImg,u=t(Gy,{props:{type:"img",width:o,height:r,animation:s,variant:l},class:a({},"card-img-".concat(c),c)});return i.noAspect?u:t(ea,{props:{aspect:n}},[u])}}),Ky=i.default.extend({methods:{hasListener:function(t){var e=this.$listeners||{},i=this._events||{};return!Ft(e[t])||Rt(i[t])&&i[t].length>0}}}),Xy="light",Zy="dark",Jy=vs({variant:hs(go)},"BTr"),Qy=i.default.extend({name:"BTr",mixins:[Za,Qa,Cs],provide:function(){return{bvTableTr:this}},inject:{bvTableRowGroup:{default:function(){return{}}}},inheritAttrs:!1,props:Jy,computed:{inTbody:function(){return this.bvTableRowGroup.isTbody},inThead:function(){return this.bvTableRowGroup.isThead},inTfoot:function(){return this.bvTableRowGroup.isTfoot},isDark:function(){return this.bvTableRowGroup.isDark},isStacked:function(){return this.bvTableRowGroup.isStacked},isResponsive:function(){return this.bvTableRowGroup.isResponsive},isStickyHeader:function(){return this.bvTableRowGroup.isStickyHeader},hasStickyHeader:function(){return!this.isStacked&&this.bvTableRowGroup.hasStickyHeader},tableVariant:function(){return this.bvTableRowGroup.tableVariant},headVariant:function(){return this.inThead?this.bvTableRowGroup.headVariant:null},footVariant:function(){return this.inTfoot?this.bvTableRowGroup.footVariant:null},isRowDark:function(){return this.headVariant!==Xy&&this.footVariant!==Xy&&(this.headVariant===Zy||this.footVariant===Zy||this.isDark)},trClasses:function(){var t=this.variant;return[t?"".concat(this.isRowDark?"bg":"table","-").concat(t):null]},trAttrs:function(){return c({role:"row"},this.bvAttrs)}},render:function(t){return t("tr",{class:this.trClasses,attrs:this.trAttrs,on:this.bvListeners},this.normalizeSlot())}}),tw={},ew=i.default.extend({props:tw,methods:{renderBottomRow:function(){var t=this.computedFields,e=this.stacked,i=this.tbodyTrClass,n=this.tbodyTrAttr,o=this.$createElement;return this.hasNormalizedSlot(Vo)&&!0!==e&&""!==e?o(Qy,{staticClass:"b-table-bottom-row",class:[Ot(i)?i(null,"row-bottom"):i],attrs:Ot(n)?n(null,"row-bottom"):n,key:"b-bottom-row"},this.normalizeSlot(Vo,{columns:t.length,fields:t})):o()}}}),iw=function(t){return(t=lr(t,0))>0?t:null},nw=function(t){return Pt(t)||iw(t)>0},ow=vs({colspan:hs(_o,null,nw),rowspan:hs(_o,null,nw),stackedHeading:hs(go),stickyColumn:hs(ho,!1),variant:hs(go)},pn),rw=i.default.extend({name:pn,mixins:[Za,Qa,Cs],inject:{bvTableTr:{default:function(){return{}}}},inheritAttrs:!1,props:ow,computed:{tag:function(){return"td"},inTbody:function(){return this.bvTableTr.inTbody},inThead:function(){return this.bvTableTr.inThead},inTfoot:function(){return this.bvTableTr.inTfoot},isDark:function(){return this.bvTableTr.isDark},isStacked:function(){return this.bvTableTr.isStacked},isStackedCell:function(){return this.inTbody&&this.isStacked},isResponsive:function(){return this.bvTableTr.isResponsive},isStickyHeader:function(){return this.bvTableTr.isStickyHeader},hasStickyHeader:function(){return this.bvTableTr.hasStickyHeader},isStickyColumn:function(){return!this.isStacked&&(this.isResponsive||this.hasStickyHeader)&&this.stickyColumn},rowVariant:function(){return this.bvTableTr.variant},headVariant:function(){return this.bvTableTr.headVariant},footVariant:function(){return this.bvTableTr.footVariant},tableVariant:function(){return this.bvTableTr.tableVariant},computedColspan:function(){return iw(this.colspan)},computedRowspan:function(){return iw(this.rowspan)},cellClasses:function(){var t=this.variant,e=this.headVariant,i=this.isStickyColumn;return(!t&&this.isStickyHeader&&!e||!t&&i&&this.inTfoot&&!this.footVariant||!t&&i&&this.inThead&&!e||!t&&i&&this.inTbody)&&(t=this.rowVariant||this.tableVariant||"b-table-default"),[t?"".concat(this.isDark?"bg":"table","-").concat(t):null,i?"b-table-sticky-column":null]},cellAttrs:function(){var t=this.stackedHeading,e=this.inThead||this.inTfoot,i=this.computedColspan,n=this.computedRowspan,o="cell",r=null;return e?(o="columnheader",r=i>0?"colspan":"col"):Br(this.tag,"th")&&(o="rowheader",r=n>0?"rowgroup":"row"),c(c({colspan:i,rowspan:n,role:o,scope:r},this.bvAttrs),{},{"data-label":this.isStackedCell&&!Pt(t)?vr(t):null})}},render:function(t){var e=[this.normalizeSlot()];return t(this.tag,{class:this.cellClasses,attrs:this.cellAttrs,on:this.bvListeners},[this.isStackedCell?t("div",[e]):e])}}),sw="busy",aw=a({},sw,hs(ho,!1)),lw=i.default.extend({props:aw,data:function(){return{localBusy:!1}},computed:{computedBusy:function(){return this.busy||this.localBusy}},watch:{localBusy:function(t,e){t!==e&&this.$emit("update:busy",t)}},methods:{stopIfBusy:function(t){return!!this.computedBusy&&(Bs(t),!0)},renderBusy:function(){var t=this.tbodyTrClass,e=this.tbodyTrAttr,i=this.$createElement;return this.computedBusy&&this.hasNormalizedSlot(Xo)?i(Qy,{staticClass:"b-table-busy-slot",class:[Ot(t)?t(null,Xo):t],attrs:Ot(e)?e(null,Xo):e,key:"table-busy-slot"},[i(rw,{props:{colspan:this.computedFields.length||null}},[this.normalizeSlot(Xo)])]):null}}}),cw={caption:hs(go),captionHtml:hs(go)},uw=i.default.extend({props:cw,computed:{captionId:function(){return this.isStacked?this.safeId("_caption_"):null}},methods:{renderCaption:function(){var t=this.caption,e=this.captionHtml,i=this.$createElement,n=i(),o=this.hasNormalizedSlot(Zo);return(o||t||e)&&(n=i("caption",{attrs:{id:this.captionId},domProps:o?{}:Fl(e,t),key:"caption",ref:"caption"},this.normalizeSlot(Zo))),n}}}),dw={},hw=i.default.extend({methods:{renderColgroup:function(){var t=this.computedFields,e=this.$createElement,i=e();return this.hasNormalizedSlot(Jo)&&(i=e("colgroup",{key:"colgroup"},[this.normalizeSlot(Jo,{columns:t.length,fields:t})])),i}}}),fw={emptyFilteredHtml:hs(go),emptyFilteredText:hs(go,"There are no records matching your request"),emptyHtml:hs(go),emptyText:hs(go,"There are no records to show"),showEmpty:hs(ho,!1)},pw=i.default.extend({props:fw,methods:{renderEmpty:function(){var t=this.computedItems,e=this.$createElement,i=e();if(this.showEmpty&&(!t||0===t.length)&&(!this.computedBusy||!this.hasNormalizedSlot(Xo))){var n=this.computedFields,o=this.isFiltered,r=this.emptyText,s=this.emptyHtml,a=this.emptyFilteredText,l=this.emptyFilteredHtml,c=this.tbodyTrClass,u=this.tbodyTrAttr;(i=this.normalizeSlot(o?"emptyfiltered":Ro,{emptyFilteredHtml:l,emptyFilteredText:a,emptyHtml:s,emptyText:r,fields:n,items:t}))||(i=e("div",{class:["text-center","my-2"],domProps:o?Fl(l,a):Fl(s,r)})),i=e(rw,{props:{colspan:n.length||null}},[e("div",{attrs:{role:"alert","aria-live":"polite"}},[i])]),i=e(Qy,{staticClass:"b-table-empty-row",class:[Ot(c)?c(null,"row-empty"):c],attrs:Ot(u)?u(null,"row-empty"):u,key:o?"b-empty-filtered-row":"b-empty-row"},[i])}return i}}}),mw=function t(e){return Pt(e)?"":Mt(e)&&!zt(e)?Kt(e).sort().map((function(i){return t(e[i])})).filter((function(t){return!!t})).join(" "):vr(e)},vw="_cellVariants",bw="_rowVariant",gw="_showDetails",yw=[vw,bw,gw].reduce((function(t,e){return c(c({},t),{},a({},e,!0))}),{}),ww=["a","a *","button","button *","input:not(.disabled):not([disabled])","select:not(.disabled):not([disabled])","textarea:not(.disabled):not([disabled])",'[role="link"]','[role="link"] *','[role="button"]','[role="button"] *',"[tabindex]:not(.disabled):not([disabled])"].join(","),Tw=function(t,e,i){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=Kt(n).reduce((function(e,i){var o=n[i],r=o.filterByFormatted,s=Ot(r)?r:r?o.formatter:null;return Ot(s)&&(e[i]=s(t[i],i,t)),e}),Zt(t)),r=Kt(o).filter((function(t){return!(yw[t]||Rt(e)&&e.length>0&&nr(e,t)||Rt(i)&&i.length>0&&!nr(i,t))}));return Jt(o,r)},Cw={filter:hs([].concat(T(To),[bo])),filterDebounce:hs(_o,0,(function(t){return Q.test(String(t))})),filterFunction:hs(po),filterIgnoredFields:hs(uo,[]),filterIncludedFields:hs(uo,[])},xw=i.default.extend({props:Cw,data:function(){return{isFiltered:!1,localFilter:this.filterSanitize(this.filter)}},computed:{computedFilterIgnored:function(){return or(this.filterIgnoredFields||[]).filter(ne)},computedFilterIncluded:function(){return or(this.filterIncludedFields||[]).filter(ne)},computedFilterDebounce:function(){var t=lr(this.filterDebounce,0);return t>0&&le('Prop "filter-debounce" is deprecated. Use the debounce feature of "" instead.',fn),t},localFiltering:function(){return!this.hasProvider||!!this.noProviderFiltering},filteredCheck:function(){return{filteredItems:this.filteredItems,localItems:this.localItems,localFilter:this.localFilter}},localFilterFn:function(){var t=this.filterFunction;return gs(t)?t:null},filteredItems:function(){var t=this.localItems,e=this.localFilter,i=this.localFiltering?this.filterFnFactory(this.localFilterFn,e)||this.defaultFilterFnFactory(e):null;return i&&t.length>0?t.filter(i):t}},watch:{computedFilterDebounce:function(t){!t&&this.$_filterTimer&&(this.clearFilterTimer(),this.localFilter=this.filterSanitize(this.filter))},filter:{deep:!0,handler:function(t){var e=this,i=this.computedFilterDebounce;this.clearFilterTimer(),i&&i>0?this.$_filterTimer=setTimeout((function(){e.localFilter=e.filterSanitize(t)}),i):this.localFilter=this.filterSanitize(t)}},filteredCheck:function(t){var e=t.filteredItems,i=t.localFilter,n=!1;i?Ua(i,[])||Ua(i,{})?n=!1:i&&(n=!0):n=!1,n&&this.$emit(Ln,e,e.length),this.isFiltered=n},isFiltered:function(t,e){if(!1===t&&!0===e){var i=this.localItems;this.$emit(Ln,i,i.length)}}},created:function(){var t=this;this.$_filterTimer=null,this.$nextTick((function(){t.isFiltered=Boolean(t.localFilter)}))},beforeDestroy:function(){this.clearFilterTimer()},methods:{clearFilterTimer:function(){clearTimeout(this.$_filterTimer),this.$_filterTimer=null},filterSanitize:function(t){return!this.localFiltering||this.localFilterFn||Et(t)||jt(t)?ie(t):""},filterFnFactory:function(t,e){if(!t||!Ot(t)||!e||Ua(e,[])||Ua(e,{}))return null;return function(i){return t(i,e)}},defaultFilterFnFactory:function(t){var e=this;if(!t||!Et(t)&&!jt(t))return null;var i=t;if(Et(i)){var n=mr(t).replace(ct,"\\s+");i=new RegExp(".*".concat(n,".*"),"i")}return function(t){return i.lastIndex=0,i.test((n=t,o=e.computedFilterIgnored,r=e.computedFilterIncluded,s=e.computedFieldsObj,Mt(n)?mw(Tw(n,o,r,s)):""));var n,o,r,s}}}}),Sw=function(t,e){var i=[];if(Rt(t)&&t.filter(ne).forEach((function(t){if(Et(t))i.push({key:t,label:fr(t)});else if(Mt(t)&&t.key&&Et(t.key))i.push(Zt(t));else if(Mt(t)&&1===Kt(t).length){var e=Kt(t)[0],n=function(t,e){var i=null;return Et(e)?i={key:t,label:e}:Ot(e)?i={key:t,formatter:e}:Mt(e)?(i=Zt(e)).key=i.key||t:!1!==e&&(i={key:t}),i}(e,t[e]);n&&i.push(n)}})),0===i.length&&Rt(e)&&e.length>0){var n=e[0];Kt(n).forEach((function(t){yw[t]||i.push({key:t,label:fr(t)})}))}var o={};return i.filter((function(t){return!o[t.key]&&(o[t.key]=!0,t.label=Et(t.label)?t.label:fr(t.key),!0)}))},kw=ys("value",{type:uo,defaultValue:[]}),$w=kw.mixin,Bw=kw.props,_w=kw.prop,Dw=kw.event,Fw=ee(c(c({},Bw),{},a({fields:hs(uo,null),items:hs(uo,[]),primaryKey:hs(go)},_w,hs(uo,[])))),Iw=i.default.extend({mixins:[$w],props:Fw,data:function(){var t=this.items;return{localItems:Rt(t)?t.slice():[]}},computed:{computedFields:function(){return Sw(this.fields,this.localItems)},computedFieldsObj:function(){var t=this.$parent;return this.computedFields.reduce((function(e,i){if(e[i.key]=Zt(i),i.formatter){var n=i.formatter;Et(n)&&Ot(t[n])?n=t[n]:Ot(n)||(n=void 0),e[i.key].formatter=n}return e}),{})},computedItems:function(){return(this.paginatedItems||this.sortedItems||this.filteredItems||this.localItems||[]).slice()},context:function(){return{filter:this.localFilter,sortBy:this.localSortBy,sortDesc:this.localSortDesc,perPage:Us(lr(this.perPage,0),0),currentPage:Us(lr(this.currentPage,0),1),apiUrl:this.apiUrl}}},watch:{items:function(t){this.localItems=Rt(t)?t.slice():[]},computedItems:function(t,e){Ua(t,e)||this.$emit(Dw,t)},context:function(t,e){Ua(t,e)||this.$emit(Fn,t)}},mounted:function(){this.$emit(Dw,this.computedItems)},methods:{getFieldFormatter:function(t){var e=this.computedFieldsObj[t];return e?e.formatter:void 0}}}),Pw={currentPage:hs(_o,1),perPage:hs(_o,0)},Ow=i.default.extend({props:Pw,computed:{localPaging:function(){return!this.hasProvider||!!this.noProviderPaging},paginatedItems:function(){var t=this.sortedItems||this.filteredItems||this.localItems||[],e=Us(lr(this.currentPage,1),1),i=Us(lr(this.perPage,0),0);return this.localPaging&&i&&(t=t.slice((e-1)*i,e*i)),t}}}),Vw=Ds(fn,Zn),Ew=Fs(fn,"refresh"),Lw={apiUrl:hs(go),items:hs(yo,[]),noProviderFiltering:hs(ho,!1),noProviderPaging:hs(ho,!1),noProviderSorting:hs(ho,!1)},Aw=i.default.extend({mixins:[Ja],props:Lw,computed:{hasProvider:function(){return Ot(this.items)},providerTriggerContext:function(){var t={apiUrl:this.apiUrl,filter:null,sortBy:null,sortDesc:null,perPage:null,currentPage:null};return this.noProviderFiltering||(t.filter=this.localFilter),this.noProviderSorting||(t.sortBy=this.localSortBy,t.sortDesc=this.localSortDesc),this.noProviderPaging||(t.perPage=this.perPage,t.currentPage=this.currentPage),Zt(t)}},watch:{items:function(t){(this.hasProvider||Ot(t))&&this.$nextTick(this._providerUpdate)},providerTriggerContext:function(t,e){Ua(t,e)||this.$nextTick(this._providerUpdate)}},mounted:function(){var t=this;!this.hasProvider||this.localItems&&0!==this.localItems.length||this._providerUpdate(),this.listenOnRoot(Ew,(function(e){e!==t.id&&e!==t||t.refresh()}))},methods:{refresh:function(){var t=this.items,e=this.refresh;this.$off(Zn,e),this.computedBusy?this.localBusy&&this.hasProvider&&this.$on(Zn,e):(this.clearSelected(),this.hasProvider?this.$nextTick(this._providerUpdate):this.localItems=Rt(t)?t.slice():[])},_providerSetLocal:function(t){this.localItems=Rt(t)?t.slice():[],this.localBusy=!1,this.$emit(Zn),this.id&&this.emitOnRoot(Vw,this.id)},_providerUpdate:function(){var t=this;this.hasProvider&&(this.computedBusy?this.$nextTick(this.refresh):(this.localBusy=!0,this.$nextTick((function(){try{var e=t.items(t.context,t._providerSetLocal);!Pt(i=e)&&Ot(i.then)&&Ot(i.catch)?e.then((function(e){t._providerSetLocal(e)})):Rt(e)?t._providerSetLocal(e):2!==t.items.length&&(le("Provider function didn't request callback and did not return a promise or data.",fn),t.localBusy=!1)}catch(e){le("Provider function error [".concat(e.name,"] ").concat(e.message,"."),fn),t.localBusy=!1,t.$off(Zn,t.refresh)}var i}))))}}}),Rw=["range","multi","single"],Mw={noSelectOnClick:hs(ho,!1),selectMode:hs(go,"multi",(function(t){return nr(Rw,t)})),selectable:hs(ho,!1),selectedVariant:hs(go,"active")},Hw=i.default.extend({props:Mw,data:function(){return{selectedRows:[],selectedLastRow:-1}},computed:{isSelectable:function(){return this.selectable&&this.selectMode},hasSelectableRowClick:function(){return this.isSelectable&&!this.noSelectOnClick},supportsSelectableRows:function(){return!0},selectableHasSelection:function(){var t=this.selectedRows;return this.isSelectable&&t&&t.length>0&&t.some(ne)},selectableIsMultiSelect:function(){return this.isSelectable&&nr(["range","multi"],this.selectMode)},selectableTableClasses:function(){var t,e=this.isSelectable;return a(t={"b-table-selectable":e},"b-table-select-".concat(this.selectMode),e),a(t,"b-table-selecting",this.selectableHasSelection),a(t,"b-table-selectable-no-click",e&&!this.hasSelectableRowClick),t},selectableTableAttrs:function(){return{"aria-multiselectable":this.isSelectable?this.selectableIsMultiSelect?"true":"false":null}}},watch:{computedItems:function(t,e){var i=!1;if(this.isSelectable&&this.selectedRows.length>0){i=Rt(t)&&Rt(e)&&t.length===e.length;for(var n=0;i&&n=0&&t0&&(this.selectedLastClicked=-1,this.selectedRows=this.selectableIsMultiSelect?rr(t,!0):[!0])},isRowSelected:function(t){return!(!Lt(t)||!this.selectedRows[t])},clearSelected:function(){this.selectedLastClicked=-1,this.selectedRows=[]},selectableRowClasses:function(t){if(this.isSelectable&&this.isRowSelected(t)){var e=this.selectedVariant;return a({"b-table-row-selected":!0},"".concat(this.dark?"bg":"table","-").concat(e),e)}return{}},selectableRowAttrs:function(t){return{"aria-selected":this.isSelectable?this.isRowSelected(t)?"true":"false":null}},setSelectionHandlers:function(t){var e=t&&!this.noSelectOnClick?"$on":"$off";this[e](Jn,this.selectionHandler),this[e](Ln,this.clearSelected),this[e](Fn,this.clearSelected)},selectionHandler:function(t,e,i){if(this.isSelectable&&!this.noSelectOnClick){var n=this.selectMode,o=this.selectedLastRow,r=this.selectedRows.slice(),s=!r[e];if("single"===n)r=[];else if("range"===n)if(o>-1&&i.shiftKey){for(var a=Ys(o,e);a<=Us(o,e);a++)r[a]=!0;s=!0}else i.ctrlKey||i.metaKey||(r=[],s=!0),this.selectedLastRow=s?e:-1;r[e]=s,this.selectedRows=r}else this.clearSelected()}}}),zw=function(t,e){return t.map((function(t,e){return[e,t]})).sort(function(t,e){return this(t[1],e[1])||t[0]-e[0]}.bind(e)).map((function(t){return t[1]}))},Nw=function(t){return Pt(t)?"":At(t)?cr(t,t):t},jw="sortBy",Gw="sortDesc",Ww="asc",Yw="desc",Uw=[Ww,Yw,"last"],qw=(a(eg={labelSortAsc:hs(go,"Click to sort Ascending"),labelSortClear:hs(go,"Click to clear sorting"),labelSortDesc:hs(go,"Click to sort Descending"),noFooterSorting:hs(ho,!1),noLocalSorting:hs(ho,!1),noSortReset:hs(ho,!1)},jw,hs(go)),a(eg,"sortCompare",hs(po)),a(eg,"sortCompareLocale",hs(Co)),a(eg,"sortCompareOptions",hs(vo,{numeric:!0})),a(eg,Gw,hs(ho,!1)),a(eg,"sortDirection",hs(go,Ww,(function(t){return nr(Uw,t)}))),a(eg,"sortIconLeft",hs(ho,!1)),a(eg,"sortNullLast",hs(ho,!1)),eg),Kw=i.default.extend({props:qw,data:function(){return{localSortBy:this.sortBy||"",localSortDesc:this.sortDesc||!1}},computed:{localSorting:function(){return this.hasProvider?!!this.noProviderSorting:!this.noLocalSorting},isSortable:function(){return this.computedFields.some((function(t){return t.sortable}))},sortedItems:function(){var t=this.localSortBy,e=this.localSortDesc,i=this.sortCompareLocale,n=this.sortNullLast,o=this.sortCompare,r=this.localSorting,s=(this.filteredItems||this.localItems||[]).slice(),a=c(c({},this.sortCompareOptions),{},{usage:"sort"});if(t&&r){var l=(this.computedFieldsObj[t]||{}).sortByFormatted,u=Ot(l)?l:l?this.getFieldFormatter(t):void 0;return zw(s,(function(r,s){var l=null;return Ot(o)&&(l=o(r,s,t,e,u,a,i)),(Pt(l)||!1===l)&&(l=function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=i.sortBy,o=void 0===n?null:n,r=i.formatter,s=void 0===r?null:r,a=i.locale,l=void 0===a?void 0:a,c=i.localeOptions,u=void 0===c?{}:c,d=i.nullLast,h=void 0!==d&&d,f=re(t,o,null),p=re(e,o,null);return Ot(s)&&(f=s(f,o,t),p=s(p,o,e)),f=Nw(f),p=Nw(p),zt(f)&&zt(p)||Lt(f)&&Lt(p)?fp?1:0:h&&""===f&&""!==p?1:h&&""!==f&&""===p?-1:mw(f).localeCompare(mw(p),l,u)}(r,s,{sortBy:t,formatter:u,locale:i,localeOptions:a,nullLast:n})),(l||0)*(e?-1:1)}))}return s}},watch:(ig={isSortable:function(t){t?this.isSortable&&this.$on(Hn,this.handleSort):this.$off(Hn,this.handleSort)}},a(ig,Gw,(function(t){t!==this.localSortDesc&&(this.localSortDesc=t||!1)})),a(ig,jw,(function(t){t!==this.localSortBy&&(this.localSortBy=t||"")})),a(ig,"localSortDesc",(function(t,e){t!==e&&this.$emit("update:sortDesc",t)})),a(ig,"localSortBy",(function(t,e){t!==e&&this.$emit("update:sortBy",t)})),ig),created:function(){this.isSortable&&this.$on(Hn,this.handleSort)},methods:{handleSort:function(t,e,i,n){var o=this;if(this.isSortable&&(!n||!this.noFooterSorting)){var r=!1,s=function(){var t=e.sortDirection||o.sortDirection;t===Ww?o.localSortDesc=!1:t===Yw&&(o.localSortDesc=!0)};if(e.sortable){var a=!this.localSorting&&e.sortKey?e.sortKey:t;this.localSortBy===a?this.localSortDesc=!this.localSortDesc:(this.localSortBy=a,s()),r=!0}else this.localSortBy&&!this.noSortReset&&(this.localSortBy="",s(),r=!0);r&&this.$emit("sort-changed",this.context)}},sortTheadThClasses:function(t,e,i){return{"b-table-sort-icon-left":e.sortable&&this.sortIconLeft&&!(i&&this.noFooterSorting)}},sortTheadThAttrs:function(t,e,i){if(!this.isSortable||i&&this.noFooterSorting)return{};var n=e.sortable;return{"aria-sort":n&&this.localSortBy===t?this.localSortDesc?"descending":"ascending":n?"none":null}},sortTheadThLabel:function(t,e,i){if(!this.isSortable||i&&this.noFooterSorting)return null;var n="";if(e.sortable)if(this.localSortBy===t)n=this.localSortDesc?this.labelSortAsc:this.labelSortDesc;else{n=this.localSortDesc?this.labelSortDesc:this.labelSortAsc;var o=this.sortDirection||e.sortDirection;o===Ww?n=this.labelSortAsc:o===Yw&&(n=this.labelSortDesc)}else this.noSortReset||(n=this.localSortBy?this.labelSortClear:"");return br(n)||null}}}),Xw={stacked:hs(ko,!1)},Zw=i.default.extend({props:Xw,computed:{isStacked:function(){var t=this.stacked;return""===t||t},isStackedAlways:function(){return!0===this.isStacked},stackedTableClasses:function(){var t=this.isStackedAlways;return a({"b-table-stacked":t},"b-table-stacked-".concat(this.stacked),!t&&this.isStacked)}}}),Jw={bordered:hs(ho,!1),borderless:hs(ho,!1),captionTop:hs(ho,!1),dark:hs(ho,!1),fixed:hs(ho,!1),hover:hs(ho,!1),noBorderCollapse:hs(ho,!1),outlined:hs(ho,!1),responsive:hs(ko,!1),small:hs(ho,!1),stickyHeader:hs(ko,!1),striped:hs(ho,!1),tableClass:hs(To),tableVariant:hs(go)},Qw=i.default.extend({mixins:[Za],provide:function(){return{bvTable:this}},inheritAttrs:!1,props:Jw,computed:{isResponsive:function(){var t=this.responsive;return""===t||t},isStickyHeader:function(){var t=this.stickyHeader;return t=""===t||t,!this.isStacked&&t},wrapperClasses:function(){var t=this.isResponsive;return[this.isStickyHeader?"b-table-sticky-header":"",!0===t?"table-responsive":t?"table-responsive-".concat(this.responsive):""].filter(ne)},wrapperStyles:function(){var t=this.isStickyHeader;return t&&!Vt(t)?{maxHeight:t}:{}},tableClasses:function(){var t=this.hover,e=this.tableVariant;return t=this.isTableSimple?t:t&&this.computedItems.length>0&&!this.computedBusy,[this.tableClass,{"table-striped":this.striped,"table-hover":t,"table-dark":this.dark,"table-bordered":this.bordered,"table-borderless":this.borderless,"table-sm":this.small,border:this.outlined,"b-table-fixed":this.fixed,"b-table-caption-top":this.captionTop,"b-table-no-border-collapse":this.noBorderCollapse},e?"".concat(this.dark?"bg":"table","-").concat(e):"",this.stackedTableClasses,this.selectableTableClasses]},tableAttrs:function(){var t=this.computedItems,e=this.filteredItems,i=this.computedFields,n=this.selectableTableAttrs,o=this.isTableSimple?{}:{"aria-busy":this.computedBusy?"true":"false","aria-colcount":vr(i.length),"aria-describedby":this.bvAttrs["aria-describedby"]||this.$refs.caption?this.captionId:null};return c(c(c({"aria-rowcount":t&&e&&e.length>t.length?vr(e.length):null},this.bvAttrs),{},{id:this.safeId(),role:"table"},o),n)}},render:function(t){var e=this.wrapperClasses,i=this.renderCaption,n=this.renderColgroup,o=this.renderThead,r=this.renderTbody,s=this.renderTfoot,a=[];this.isTableSimple?a.push(this.normalizeSlot()):(a.push(i?i():null),a.push(n?n():null),a.push(o?o():null),a.push(r?r():null),a.push(s?s():null));var l=t("table",{staticClass:"table b-table",class:this.tableClasses,attrs:this.tableAttrs,key:"b-table"},a.filter(ne));return e.length>0?t("div",{class:e,style:this.wrapperStyles,key:"wrap"},[l]):l}}),tT=vs({tbodyTransitionHandlers:hs(vo),tbodyTransitionProps:hs(vo)},gn),eT=i.default.extend({name:gn,mixins:[Za,Qa,Cs],provide:function(){return{bvTableRowGroup:this}},inject:{bvTable:{default:function(){return{}}}},inheritAttrs:!1,props:tT,computed:{isTbody:function(){return!0},isDark:function(){return this.bvTable.dark},isStacked:function(){return this.bvTable.isStacked},isResponsive:function(){return this.bvTable.isResponsive},isStickyHeader:function(){return!1},hasStickyHeader:function(){return!this.isStacked&&this.bvTable.stickyHeader},tableVariant:function(){return this.bvTable.tableVariant},isTransitionGroup:function(){return this.tbodyTransitionProps||this.tbodyTransitionHandlers},tbodyAttrs:function(){return c({role:"rowgroup"},this.bvAttrs)},tbodyProps:function(){var t=this.tbodyTransitionProps;return t?c(c({},t),{},{tag:"tbody"}):{}}},render:function(t){var e={props:this.tbodyProps,attrs:this.tbodyAttrs};return this.isTransitionGroup?(e.on=this.tbodyTransitionHandlers||{},e.nativeOn=this.bvListeners):e.on=this.bvListeners,t(this.isTransitionGroup?"transition-group":"tbody",e,this.normalizeSlot())}}),iT=["TD","TH","TR"],nT=function(t){if(!t||!t.target)return!1;var e=t.target;if(e.disabled||-1!==iT.indexOf(e.tagName))return!1;if(Er(".dropdown-menu",e))return!0;var i="LABEL"===e.tagName?e:Er("label",e);if(i){var n=jr(i,"for"),o=n?Ar(n):Or("input, select, textarea",i);if(o&&!o.disabled)return!0}return Vr(e,ww)},oT=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document,e=Xr();return!!(e&&""!==e.toString().trim()&&e.containsNode&&kr(t))&&e.containsNode(t,!0)},rT=vs(ow,"BTh"),sT=i.default.extend({name:"BTh",extends:rw,props:rT,computed:{tag:function(){return"th"}}}),aT={detailsTdClass:hs(To),tbodyTrAttr:hs(Fo),tbodyTrClass:hs([].concat(T(To),[po]))},lT=i.default.extend({props:aT,methods:{getTdValues:function(t,e,i,n){var o=this.$parent;if(i){var r=re(t,e,"");return Ot(i)?i(r,e,t):Et(i)&&Ot(o[i])?o[i](r,e,t):i}return n},getThValues:function(t,e,i,n,o){var r=this.$parent;if(i){var s=re(t,e,"");return Ot(i)?i(s,e,t,n):Et(i)&&Ot(r[i])?r[i](s,e,t,n):i}return o},getFormattedValue:function(t,e){var i=e.key,n=this.getFieldFormatter(i),o=re(t,i,null);return Ot(n)&&(o=n(o,i,t)),Pt(o)?"":o},toggleDetailsFactory:function(t,e){var i=this;return function(){t&&i.$set(e,gw,!e[gw])}},rowHovered:function(t){this.tbodyRowEvtStopped(t)||this.emitTbodyRowEvent("row-hovered",t)},rowUnhovered:function(t){this.tbodyRowEvtStopped(t)||this.emitTbodyRowEvent("row-unhovered",t)},renderTbodyRowCell:function(t,e,i,n){var o=this,r=this.isStacked,s=t.key,a=t.label,l=t.isRowHeader,u=this.$createElement,d=this.hasNormalizedSlot(Ko),h=this.getFormattedValue(i,t),f=!r&&(this.isResponsive||this.stickyHeader)&&t.stickyColumn,p=f?l?sT:rw:l?"th":"td",m=i[vw]&&i[vw][s]?i[vw][s]:t.variant||null,v={class:[t.class?t.class:"",this.getTdValues(i,s,t.tdClass,"")],props:{},attrs:c({"aria-colindex":String(e+1)},l?this.getThValues(i,s,t.thAttr,"row",{}):this.getTdValues(i,s,t.tdAttr,{})),key:"row-".concat(n,"-cell-").concat(e,"-").concat(s)};f?v.props={stackedHeading:r?a:null,stickyColumn:!0,variant:m}:(v.attrs["data-label"]=r&&!Pt(a)?vr(a):null,v.attrs.role=l?"rowheader":"cell",v.attrs.scope=l?"row":null,m&&v.class.push("".concat(this.dark?"bg":"table","-").concat(m)));var b={item:i,index:n,field:t,unformatted:re(i,s,""),value:h,toggleDetails:this.toggleDetailsFactory(d,i),detailsShowing:Boolean(i[gw])};this.supportsSelectableRows&&(b.rowSelected=this.isRowSelected(n),b.selectRow=function(){return o.selectRow(n)},b.unselectRow=function(){return o.unselectRow(n)});var g=this.$_bodyFieldSlotNameCache[s],y=g?this.normalizeSlot(g,b):vr(h);return this.isStacked&&(y=[u("div",[y])]),u(p,v,[y])},renderTbodyRow:function(t,e){var i=this,n=this.computedFields,o=this.striped,r=this.primaryKey,s=this.currentPage,a=this.perPage,l=this.tbodyTrClass,u=this.tbodyTrAttr,d=this.$createElement,h=this.hasNormalizedSlot(Ko),f=t[gw]&&h,p=this.$listeners["row-clicked"]||this.hasSelectableRowClick,m=[],v=f?this.safeId("_details_".concat(e,"_")):null,b=n.map((function(n,o){return i.renderTbodyRowCell(n,o,t,e)})),g=null;s&&a&&a>0&&(g=String((s-1)*a+e+1));var y=vr(re(t,r))||null,w=y||vr(e),T=y?this.safeId("_row_".concat(y)):null,C=this.selectableRowClasses?this.selectableRowClasses(e):{},x=this.selectableRowAttrs?this.selectableRowAttrs(e):{},S=Ot(l)?l(t,"row"):l,k=Ot(u)?u(t,"row"):u;if(m.push(d(Qy,{class:[S,C,f?"b-table-has-details":""],props:{variant:t[bw]||null},attrs:c(c({id:T},k),{},{tabindex:p?"0":null,"data-pk":y||null,"aria-details":v,"aria-owns":v,"aria-rowindex":g},x),on:{mouseenter:this.rowHovered,mouseleave:this.rowUnhovered},key:"__b-table-row-".concat(w,"__"),ref:"item-rows",refInFor:!0},b)),f){var $={item:t,index:e,fields:n,toggleDetails:this.toggleDetailsFactory(h,t)};this.supportsSelectableRows&&($.rowSelected=this.isRowSelected(e),$.selectRow=function(){return i.selectRow(e)},$.unselectRow=function(){return i.unselectRow(e)});var B=d(rw,{props:{colspan:n.length},class:this.detailsTdClass},[this.normalizeSlot(Ko,$)]);o&&m.push(d("tr",{staticClass:"d-none",attrs:{"aria-hidden":"true",role:"presentation"},key:"__b-table-details-stripe__".concat(w)}));var _=Ot(this.tbodyTrClass)?this.tbodyTrClass(t,Ko):this.tbodyTrClass,D=Ot(this.tbodyTrAttr)?this.tbodyTrAttr(t,Ko):this.tbodyTrAttr;m.push(d(Qy,{staticClass:"b-table-details",class:[_],props:{variant:t[bw]||null},attrs:c(c({},D),{},{id:v,tabindex:"-1"}),key:"__b-table-details__".concat(w)},[B]))}else h&&(m.push(d()),o&&m.push(d()));return m}}}),cT=function(t){return"cell(".concat(t||"",")")},uT=ee(c(c(c({},tT),aT),{},{tbodyClass:hs(To)})),dT=i.default.extend({mixins:[lT],props:uT,beforeDestroy:function(){this.$_bodyFieldSlotNameCache=null},methods:{getTbodyTrs:function(){var t=this.$refs,e=t.tbody?t.tbody.$el||t.tbody:null,i=(t["item-rows"]||[]).map((function(t){return t.$el||t}));return e&&e.children&&e.children.length>0&&i&&i.length>0?ir(e.children).filter((function(t){return nr(i,t)})):[]},getTbodyTrIndex:function(t){if(!kr(t))return-1;var e="TR"===t.tagName?t:Er("tr",t,!0);return e?this.getTbodyTrs().indexOf(e):-1},emitTbodyRowEvent:function(t,e){if(t&&this.hasListener(t)&&e&&e.target){var i=this.getTbodyTrIndex(e.target);if(i>-1){var n=this.computedItems[i];this.$emit(t,n,i,e)}}},tbodyRowEvtStopped:function(t){return this.stopIfBusy&&this.stopIfBusy(t)},onTbodyRowKeydown:function(t){var e=t.target,i=t.keyCode;if(!this.tbodyRowEvtStopped(t)&&"TR"===e.tagName&&_r(e)&&0===e.tabIndex)if(nr([Ha,Ga],i))Bs(t),this.onTBodyRowClicked(t);else if(nr([Wa,Ra,za,Ma],i)){var n=this.getTbodyTrIndex(e);if(n>-1){Bs(t);var o=this.getTbodyTrs(),r=t.shiftKey;i===za||r&&i===Wa?ts(o[0]):i===Ma||r&&i===Ra?ts(o[o.length-1]):i===Wa&&n>0?ts(o[n-1]):i===Ra&&n0&&void 0!==arguments[0]&&arguments[0],i=this.computedFields,n=this.isSortable,o=this.isSelectable,r=this.headVariant,s=this.footVariant,a=this.headRowVariant,l=this.footRowVariant,u=this.$createElement;if(this.isStackedAlways||0===i.length)return u();var d=n||this.hasListener(Hn),h=o?this.selectAllRows:su,f=o?this.clearSelected:su,p=function(i,o){var r=i.label,s=i.labelHtml,a=i.variant,l=i.stickyColumn,p=i.key,m=null;i.label.trim()||i.headerTitle||(m=fr(i.key));var v={};d&&(v.click=function(n){t.headClicked(n,i,e)},v.keydown=function(n){var o=n.keyCode;o!==Ha&&o!==Ga||t.headClicked(n,i,e)});var b=n?t.sortTheadThAttrs(p,i,e):{},g=n?t.sortTheadThClasses(p,i,e):null,y=n?t.sortTheadThLabel(p,i,e):null,w={class:[t.fieldClasses(i),g],props:{variant:a,stickyColumn:l},style:i.thStyle||{},attrs:c(c({tabindex:d&&i.sortable?"0":null,abbr:i.headerAbbr||null,title:i.headerTitle||null,"aria-colindex":o+1,"aria-label":m},t.getThValues(null,p,i.thAttr,e?"foot":"head",{})),b),on:v,key:p},C=[gT(p),gT(p.toLowerCase()),gT()];e&&(C=[yT(p),yT(p.toLowerCase()),yT()].concat(T(C)));var x={label:r,column:p,field:i,isFoot:e,selectAllRows:h,clearSelected:f},S=t.normalizeSlot(C,x)||u("div",{domProps:Fl(s,r)}),k=y?u("span",{staticClass:"sr-only"}," (".concat(y,")")):null;return u(sT,w,[S,k].filter(ne))},m=i.map(p).filter(ne),v=[];if(e)v.push(u(Qy,{class:this.tfootTrClass,props:{variant:Pt(l)?a:l}},m));else{var b={columns:i.length,fields:i,selectAllRows:h,clearSelected:f};v.push(this.normalizeSlot(Qo,b)||u()),v.push(u(Qy,{class:this.theadTrClass,props:{variant:a}},m))}return u(e?fT:bT,{class:(e?this.tfootClass:this.theadClass)||null,props:e?{footVariant:s||r||null}:{headVariant:r||null},key:e?"bv-tfoot":"bv-thead"},v)}}}),CT=i.default.extend({methods:{renderTopRow:function(){var t=this.computedFields,e=this.stacked,i=this.tbodyTrClass,n=this.tbodyTrAttr,o=this.$createElement;return this.hasNormalizedSlot(er)&&!0!==e&&""!==e?o(Qy,{staticClass:"b-table-top-row",class:[Ot(i)?i(null,"row-top"):i],attrs:Ot(n)?n(null,"row-top"):n,key:"b-top-row"},[this.normalizeSlot(er,{columns:t.length,fields:t})]):o()}}}),xT=vs(ee(c(c(c(c(c(c(c(c(c(c(c(c(c(c(c(c(c(c({},fc),tw),aw),cw),dw),fw),Cw),Fw),Pw),Lw),Mw),qw),Xw),Jw),uT),pT),wT),{})),fn),ST=i.default.extend({name:fn,mixins:[Za,Ky,pc,Cs,Iw,Qw,Zw,TT,mT,dT,Zw,xw,Kw,Ow,uw,hw,Hw,pw,CT,ew,lw,Aw],props:xT}),kT=vs(ee(c(c(c(c(c(c(c(c(c({},fc),cw),dw),Fw),Xw),Jw),uT),pT),wT)),mn),$T=i.default.extend({name:mn,mixins:[Za,Ky,pc,Cs,Iw,Qw,Zw,TT,mT,dT,uw,hw],props:kT}),BT=vs(ee(c(c(c({},fc),Xw),Jw)),vn),_T=i.default.extend({name:vn,mixins:[Za,Ky,pc,Cs,Qw,Zw],props:BT,computed:{isTableSimple:function(){return!0}}}),DT=me({components:{BTable:ST},plugins:{TableLitePlugin:me({components:{BTableLite:$T}}),TableSimplePlugin:me({components:{BTableSimple:_T,BTbody:eT,BThead:bT,BTfoot:fT,BTr:Qy,BTd:rw,BTh:sT}})}}),FT=function(t){return t>0},IT=vs({animation:hs(go),columns:hs(mo,5,FT),hideHeader:hs(ho,!1),rows:hs(mo,3,FT),showFooter:hs(ho,!1),tableProps:hs(vo,{})},cn),PT=i.default.extend({name:cn,functional:!0,props:IT,render:function(t,e){var i=e.props,n=i.animation,o=i.columns,r=t("th",[t(Gy,{props:{animation:n}})]),s=t("tr",rr(o,r)),a=t("td",[t(Gy,{props:{width:"75%",animation:n}})]),l=t("tr",rr(o,a)),u=t("tbody",rr(i.rows,l)),d=i.hideHeader?t():t("thead",[s]),h=i.showFooter?t("tfoot",[s]):t();return t(_T,{props:c({},i.tableProps)},[d,u,h])}}),OT=vs({loading:hs(ho,!1)},un),VT=me({components:{BSkeleton:Gy,BSkeletonIcon:Yy,BSkeletonImg:qy,BSkeletonTable:PT,BSkeletonWrapper:i.default.extend({name:un,functional:!0,props:OT,render:function(t,e){var i=e.data,n=e.props,o=e.slots,r=e.scopedSlots,s=o(),a=r||{},l={};return n.loading?t("div",F(i,{attrs:{role:"alert","aria-live":"polite","aria-busy":!0},staticClass:"b-skeleton-wrapper",key:"loading"}),Ts("loading",l,a,s)):Ts(Ao,l,a,s)}})}}),ET=me({components:{BSpinner:mg}}),LT=ys("value",{type:mo}),AT=LT.mixin,RT=LT.props,MT=LT.prop,HT=LT.event,zT=function(t){return!t.disabled},NT=i.default.extend({name:"BVTabButton",inject:{bvTabs:{default:function(){return{}}}},props:{controls:hs(go),id:hs(go),noKeyNav:hs(ho,!1),posInSet:hs(mo),setSize:hs(mo),tab:hs(),tabIndex:hs(mo)},methods:{focus:function(){ts(this.$refs.link)},handleEvt:function(t){if(!this.tab.disabled){var e=t.type,i=t.keyCode,n=t.shiftKey;"click"===e||"keydown"===e&&i===Ga?(Bs(t),this.$emit(Bn,t)):"keydown"!==e||this.noKeyNav||(-1!==[Wa,Na,za].indexOf(i)?(Bs(t),n||i===za?this.$emit(An,t):this.$emit(Xn,t)):-1!==[Ra,ja,Ma].indexOf(i)&&(Bs(t),n||i===Ma?this.$emit(Gn,t):this.$emit(Un,t)))}}},render:function(t){var e=this.id,i=this.tabIndex,n=this.setSize,o=this.posInSet,r=this.controls,s=this.handleEvt,a=this.tab,l=a.title,u=a.localActive,d=a.disabled,h=a.titleItemClass,f=a.titleLinkClass,p=a.titleLinkAttributes,m=t(ol,{staticClass:"nav-link",class:[{active:u&&!d,disabled:d},f,u?this.bvTabs.activeNavItemClass:null],props:{disabled:d},attrs:c(c({},p),{},{id:e,role:"tab",tabindex:i,"aria-selected":u&&!d?"true":"false","aria-setsize":n,"aria-posinset":o,"aria-controls":r}),on:{click:s,keydown:s},ref:"link"},[this.tab.normalizeSlot(tr)||l]);return t("li",{staticClass:"nav-item",class:[h],attrs:{role:"presentation"}},[m])}}),jT=Qt(Vb,["tabs","isNavBar","cardHeader"]),GT=vs(ee(c(c(c(c({},fc),RT),jT),{},{activeNavItemClass:hs(To),activeTabClass:hs(To),card:hs(ho,!1),contentClass:hs(To),end:hs(ho,!1),lazy:hs(ho,!1),navClass:hs(To),navWrapperClass:hs(To),noFade:hs(ho,!1),noKeyNav:hs(ho,!1),noNavStyle:hs(ho,!1),tag:hs(go,"div")})),bn),WT=i.default.extend({name:bn,mixins:[pc,AT,Cs],provide:function(){return{bvTabs:this}},props:GT,data:function(){return{currentTab:lr(this[MT],-1),tabs:[],registeredTabs:[]}},computed:{fade:function(){return!this.noFade},localNavClass:function(){var t=[];return this.card&&this.vertical&&t.push("card-header","h-100","border-bottom-0","rounded-0"),[].concat(t,[this.navClass])}},watch:(ng={},a(ng,MT,(function(t,e){if(t!==e){t=lr(t,-1),e=lr(e,0);var i=this.tabs[t];i&&!i.disabled?this.activateTab(i):t0&&void 0!==arguments[0])||arguments[0];if(this.$_observer&&this.$_observer.disconnect(),this.$_observer=null,e){var i=function(){t.$nextTick((function(){xr((function(){t.updateTabs()}))}))};this.$_observer=au(this.$refs.content,i,{childList:!0,subtree:!1,attributes:!0,attributeFilter:["id"]})}},getTabs:function(){var t=this.registeredTabs.filter((function(t){return 0===t.$children.filter((function(t){return t._isTab})).length})),e=[];if(M&&t.length>0){var i=t.map((function(t){return"#".concat(t.safeId())})).join(", ");e=Pr(i,this.$el).map((function(t){return t.id})).filter(ne)}return zw(t,(function(t,i){return e.indexOf(t.safeId())-e.indexOf(i.safeId())}))},updateTabs:function(){var t=this.getTabs(),e=t.indexOf(t.slice().reverse().find((function(t){return t.localActive&&!t.disabled})));if(e<0){var i=this.currentTab;i>=t.length?e=t.indexOf(t.slice().reverse().find(zT)):t[i]&&!t[i].disabled&&(e=i)}e<0&&(e=t.indexOf(t.find(zT))),t.forEach((function(t,i){t.localActive=i===e})),this.tabs=t,this.currentTab=e},getButtonForTab:function(t){return(this.$refs.buttons||[]).find((function(e){return e.tab===t}))},updateButton:function(t){var e=this.getButtonForTab(t);e&&e.$forceUpdate&&e.$forceUpdate()},activateTab:function(t){var e=this.currentTab,i=this.tabs,n=!1;if(t){var o=i.indexOf(t);if(o!==e&&o>-1&&!t.disabled){var r=new BvEvent("activate-tab",{cancelable:!0,vueTarget:this,componentId:this.safeId()});this.$emit(r.type,o,e,r),r.defaultPrevented||(this.currentTab=o,n=!0)}}return n||this[MT]===e||this.$emit(HT,e),n},deactivateTab:function(t){return!!t&&this.activateTab(this.tabs.filter((function(e){return e!==t})).find(zT))},focusButton:function(t){var e=this;this.$nextTick((function(){ts(e.getButtonForTab(t))}))},emitTabClick:function(t,e){Nt(e)&&t&&t.$emit&&!t.disabled&&t.$emit(Bn,e)},clickTab:function(t,e){this.activateTab(t),this.emitTabClick(t,e)},firstTab:function(t){var e=this.tabs.find(zT);this.activateTab(e)&&t&&(this.focusButton(e),this.emitTabClick(e,t))},previousTab:function(t){var e=Us(this.currentTab,0),i=this.tabs.slice(0,e).reverse().find(zT);this.activateTab(i)&&t&&(this.focusButton(i),this.emitTabClick(i,t))},nextTab:function(t){var e=Us(this.currentTab,-1),i=this.tabs.slice(e+1).find(zT);this.activateTab(i)&&t&&(this.focusButton(i),this.emitTabClick(i,t))},lastTab:function(t){var e=this.tabs.slice().reverse().find(zT);this.activateTab(e)&&t&&(this.focusButton(e),this.emitTabClick(e,t))}},render:function(t){var e=this,i=this.align,n=this.card,o=this.end,r=this.fill,s=this.firstTab,l=this.justified,c=this.lastTab,u=this.nextTab,d=this.noKeyNav,h=this.noNavStyle,f=this.pills,p=this.previousTab,m=this.small,v=this.tabs,b=this.vertical,g=v.find((function(t){return t.localActive&&!t.disabled})),y=v.find((function(t){return!t.disabled})),w=v.map((function(i,n){var o,r=i.safeId,l=null;return d||(l=-1,(i===g||!g&&i===y)&&(l=null)),t(NT,{props:{controls:r?r():null,id:i.controlledBy||(r?r("_BV_tab_button_"):null),noKeyNav:d,posInSet:n+1,setSize:v.length,tab:i,tabIndex:l},on:(o={},a(o,Bn,(function(t){e.clickTab(i,t)})),a(o,An,s),a(o,Xn,p),a(o,Un,u),a(o,Gn,c),o),key:i._uid||n,ref:"buttons",refInFor:!0})})),T=t(Eb,{class:this.localNavClass,attrs:{role:"tablist",id:this.safeId("_BV_tab_controls_")},props:{fill:r,justified:l,align:i,tabs:!h&&!f,pills:!h&&f,vertical:b,small:m,cardHeader:n&&!b},ref:"nav"},[this.normalizeSlot("tabs-start")||t(),w,this.normalizeSlot("tabs-end")||t()]);T=t("div",{class:[{"card-header":n&&!b&&!o,"card-footer":n&&!b&&o,"col-auto":b},this.navWrapperClass],key:"bv-tabs-nav"},[T]);var C=this.normalizeSlot()||[],x=t();0===C.length&&(x=t("div",{class:["tab-pane","active",{"card-body":n}],key:"bv-empty-tab"},this.normalizeSlot(Ro)));var S=t("div",{staticClass:"tab-content",class:[{col:b},this.contentClass],attrs:{id:this.safeId("_BV_tab_container_")},key:"bv-content",ref:"content"},[C,x]);return t(this.tag,{staticClass:"tabs",class:{row:b,"no-gutters":b&&n},attrs:{id:this.safeId()}},[o?S:t(),T,o?t():S])}}),YT="active",UT="update:active",qT=vs(ee(c(c({},fc),{},(a(og={},YT,hs(ho,!1)),a(og,"buttonId",hs(go)),a(og,"disabled",hs(ho,!1)),a(og,"lazy",hs(ho,!1)),a(og,"noBody",hs(ho,!1)),a(og,"tag",hs(go,"div")),a(og,"title",hs(go)),a(og,"titleItemClass",hs(To)),a(og,"titleLinkAttributes",hs(vo)),a(og,"titleLinkClass",hs(To)),og))),hn),KT=me({components:{BTabs:WT,BTab:i.default.extend({name:hn,mixins:[pc,Cs],inject:{bvTabs:{default:function(){return{}}}},props:qT,data:function(){return{localActive:this.active&&!this.disabled}},computed:{_isTab:function(){return!0},tabClasses:function(){var t=this.localActive;return[{active:t,disabled:this.disabled,"card-body":this.bvTabs.card&&!this.noBody},t?this.bvTabs.activeTabClass:null]},controlledBy:function(){return this.buttonId||this.safeId("__BV_tab_button__")},computedNoFade:function(){return!this.bvTabs.fade},computedLazy:function(){return this.bvTabs.lazy||this.lazy}},watch:(rg={},a(rg,YT,(function(t,e){t!==e&&(t?this.activate():this.deactivate()||this.$emit(UT,this.localActive))})),a(rg,"disabled",(function(t,e){if(t!==e){var i=this.bvTabs.firstTab;t&&this.localActive&&i&&(this.localActive=!1,i())}})),a(rg,"localActive",(function(t){this.$emit(UT,t)})),rg),mounted:function(){this.registerTab()},updated:function(){var t=this.bvTabs.updateButton;t&&this.hasNormalizedSlot(tr)&&t(this)},beforeDestroy:function(){this.unregisterTab()},methods:{registerTab:function(){var t=this.bvTabs.registerTab;t&&t(this)},unregisterTab:function(){var t=this.bvTabs.unregisterTab;t&&t(this)},activate:function(){var t=this.bvTabs.activateTab;return!(!t||this.disabled)&&t(this)},deactivate:function(){var t=this.bvTabs.deactivateTab;return!(!t||!this.localActive)&&t(this)}},render:function(t){var e=this.localActive,i=t(this.tag,{staticClass:"tab-pane",class:this.tabClasses,directives:[{name:"show",value:e}],attrs:{role:"tabpanel",id:this.safeId(),"aria-hidden":e?"false":"true","aria-labelledby":this.controlledBy||null},ref:"panel"},[e||!this.computedLazy?this.normalizeSlot():t()]);return t(Ls,{props:{mode:"out-in",noFade:this.computedNoFade}},[i])}})}}),XT=me({components:{BTime:av}});function ZT(t){return(ZT="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function JT(t){return function(t){if(Array.isArray(t)){for(var e=0,i=new Array(t.length);e1&&void 0!==arguments[1]&&arguments[1],i=t.to,n=t.from;if(i&&(n||!1!==e)&&this.transports[i])if(e)this.transports[i]=[];else{var o=this.$_getTransportIndex(t);if(o>=0){var r=this.transports[i].slice(0);r.splice(o,1),this.transports[i]=r}}},registerTarget:function(t,e,i){QT&&(this.trackInstances&&!i&&this.targets[t]&&console.warn("[portal-vue]: Target ".concat(t," already exists")),this.$set(this.targets,t,Object.freeze([e])))},unregisterTarget:function(t){this.$delete(this.targets,t)},registerSource:function(t,e,i){QT&&(this.trackInstances&&!i&&this.sources[t]&&console.warn("[portal-vue]: source ".concat(t," already exists")),this.$set(this.sources,t,Object.freeze([e])))},unregisterSource:function(t){this.$delete(this.sources,t)},hasTarget:function(t){return!(!this.targets[t]||!this.targets[t][0])},hasSource:function(t){return!(!this.sources[t]||!this.sources[t][0])},hasContentFor:function(t){return!!this.transports[t]&&!!this.transports[t].length},$_getTransportIndex:function(t){var e=t.to,i=t.from;for(var n in this.transports[e])if(this.transports[e][n].from===i)return+n;return-1}}}))(nC),aC=1,lC=i.default.extend({name:"portal",props:{disabled:{type:Boolean},name:{type:String,default:function(){return String(aC++)}},order:{type:Number,default:0},slim:{type:Boolean},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:"DIV"},to:{type:String,default:function(){return String(Math.round(1e7*Math.random()))}}},created:function(){var t=this;this.$nextTick((function(){sC.registerSource(t.name,t)}))},mounted:function(){this.disabled||this.sendUpdate()},updated:function(){this.disabled?this.clear():this.sendUpdate()},beforeDestroy:function(){sC.unregisterSource(this.name),this.clear()},watch:{to:function(t,e){e&&e!==t&&this.clear(e),this.sendUpdate()}},methods:{clear:function(t){var e={from:this.name,to:t||this.to};sC.close(e)},normalizeSlots:function(){return this.$scopedSlots.default?[this.$scopedSlots.default]:this.$slots.default},normalizeOwnChildren:function(t){return"function"==typeof t?t(this.slotProps):t},sendUpdate:function(){var t=this.normalizeSlots();if(t){var e={from:this.name,to:this.to,passengers:JT(t),order:this.order};sC.open(e)}else this.clear()}},render:function(t){var e=this.$slots.default||this.$scopedSlots.default||[],i=this.tag;return e&&this.disabled?e.length<=1&&this.slim?this.normalizeOwnChildren(e)[0]:t(i,[this.normalizeOwnChildren(e)]):this.slim?t():t(i,{class:{"v-portal":!0},style:{display:"none"},key:"v-portal-placeholder"})}}),cC=i.default.extend({name:"portalTarget",props:{multiple:{type:Boolean,default:!1},name:{type:String,required:!0},slim:{type:Boolean,default:!1},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:"div"},transition:{type:[String,Object,Function]}},data:function(){return{transports:sC.transports,firstRender:!0}},created:function(){var t=this;this.$nextTick((function(){sC.registerTarget(t.name,t)}))},watch:{ownTransports:function(){this.$emit("change",this.children().length>0)},name:function(t,e){sC.unregisterTarget(e),sC.registerTarget(t,this)}},mounted:function(){var t=this;this.transition&&this.$nextTick((function(){t.firstRender=!1}))},beforeDestroy:function(){sC.unregisterTarget(this.name)},computed:{ownTransports:function(){var t=this.transports[this.name]||[];return this.multiple?t:0===t.length?[]:[t[t.length-1]]},passengers:function(){return function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.reduce((function(t,i){var n=i.passengers[0],o="function"==typeof n?n(e):i.passengers;return t.concat(o)}),[])}(this.ownTransports,this.slotProps)}},methods:{children:function(){return 0!==this.passengers.length?this.passengers:this.$scopedSlots.default?this.$scopedSlots.default(this.slotProps):this.$slots.default||[]},noWrapper:function(){var t=this.slim&&!this.transition;return t&&this.children().length>1&&console.warn("[portal-vue]: PortalTarget with `slim` option received more than one child element."),t}},render:function(t){var e=this.noWrapper(),i=this.children(),n=this.transition||this.tag;return e?i[0]:this.slim&&!n?t():t(n,{props:{tag:this.transition&&this.tag?this.tag:void 0},class:{"vue-portal-target":!0}},i)}}),uC=0,dC=["disabled","name","order","slim","slotProps","tag","to"],hC=["multiple","transition"],fC=(i.default.extend({name:"MountingPortal",inheritAttrs:!1,props:{append:{type:[Boolean,String]},bail:{type:Boolean},mountTo:{type:String,required:!0},disabled:{type:Boolean},name:{type:String,default:function(){return"mounted_"+String(uC++)}},order:{type:Number,default:0},slim:{type:Boolean},slotProps:{type:Object,default:function(){return{}}},tag:{type:String,default:"DIV"},to:{type:String,default:function(){return String(Math.round(1e7*Math.random()))}},multiple:{type:Boolean,default:!1},targetSlim:{type:Boolean},targetSlotProps:{type:Object,default:function(){return{}}},targetTag:{type:String,default:"div"},transition:{type:[String,Object,Function]}},created:function(){if("undefined"!=typeof document){var t=document.querySelector(this.mountTo);if(t){var e=this.$props;if(sC.targets[e.name])e.bail?console.warn("[portal-vue]: Target ".concat(e.name," is already mounted.\n Aborting because 'bail: true' is set")):this.portalTarget=sC.targets[e.name];else{var i=e.append;if(i){var n="string"==typeof i?i:"DIV",o=document.createElement(n);t.appendChild(o),t=o}var r=tC(this.$props,hC);r.slim=this.targetSlim,r.tag=this.targetTag,r.slotProps=this.targetSlotProps,r.name=this.to,this.portalTarget=new cC({el:t,parent:this.$parent||this,propsData:r})}}else console.error("[portal-vue]: Mount Point '".concat(this.mountTo,"' not found in document"))}},beforeDestroy:function(){var t=this.portalTarget;if(this.append){var e=t.$el;e.parentNode.removeChild(e)}t.$destroy()},render:function(t){if(!this.portalTarget)return console.warn("[portal-vue] Target wasn't mounted"),t();if(!this.$scopedSlots.manual){var e=tC(this.$props,dC);return t(lC,{props:e,attrs:this.$attrs,on:this.$listeners,scopedSlots:this.$scopedSlots},this.$slots.default)}var i=this.$scopedSlots.manual({to:this.to});return Array.isArray(i)&&(i=i[0]),i||t()}}),i.default.extend({mixins:[Cs],data:function(){return{name:"b-toaster"}},methods:{onAfterEnter:function(t){var e=this;xr((function(){Mr(t,"".concat(e.name,"-enter-to"))}))}},render:function(t){return t("transition-group",{props:{tag:"div",name:this.name},on:{afterEnter:this.onAfterEnter}},this.normalizeSlot())}})),pC=vs({ariaAtomic:hs(go),ariaLive:hs(go),name:hs(go,void 0,!0),role:hs(go)},xn),mC=i.default.extend({name:xn,mixins:[Ja],props:pC,data:function(){return{doRender:!1,dead:!1,staticName:this.name}},beforeMount:function(){var t=this,e=this.name;this.staticName=e,sC.hasTarget(e)?(le('A "" with name "'.concat(e,'" already exists in the document.'),xn),this.dead=!0):(this.doRender=!0,this.$once(oo,(function(){t.emitOnRoot(Ds(xn,In),e)})))},destroyed:function(){var t=this.$el;t&&t.parentNode&&t.parentNode.removeChild(t)},render:function(t){var e=t("div",{class:["d-none",{"b-dead-toaster":this.dead}]});if(this.doRender){var i=t(cC,{staticClass:"b-toaster-slot",props:{name:this.staticName,multiple:!0,tag:"div",slim:!1,transition:fC}});e=t("div",{staticClass:"b-toaster",class:[this.staticName],attrs:{id:this.staticName,role:this.role||null,"aria-live":this.ariaLive,"aria-atomic":this.ariaAtomic}},[i])}return e}}),vC=ys("visible",{type:ho,defaultValue:!1,event:$n}),bC=vC.mixin,gC=vC.props,yC=vC.prop,wC=vC.event,TC=Jt(nl,["href","to"]),CC=vs(ee(c(c(c(c({},fc),gC),TC),{},{appendToast:hs(ho,!1),autoHideDelay:hs(_o,5e3),bodyClass:hs(To),headerClass:hs(To),isStatus:hs(ho,!1),noAutoHide:hs(ho,!1),noCloseButton:hs(ho,!1),noFade:hs(ho,!1),noHoverPause:hs(ho,!1),solid:hs(ho,!1),static:hs(ho,!1),title:hs(go),toastClass:hs(To),toaster:hs(go,"b-toaster-top-right"),variant:hs(go)})),Cn),xC=i.default.extend({name:Cn,mixins:[Za,pc,bC,Ja,Cs,ib],inheritAttrs:!1,props:CC,data:function(){return{isMounted:!1,doRender:!1,localShow:!1,isTransitioning:!1,isHiding:!1,order:0,dismissStarted:0,resumeDismiss:0}},computed:{toastClasses:function(){var t=this.appendToast,e=this.variant;return a({"b-toast-solid":this.solid,"b-toast-append":t,"b-toast-prepend":!t},"b-toast-".concat(e),e)},slotScope:function(){return{hide:this.hide}},computedDuration:function(){return Us(lr(this.autoHideDelay,0),1e3)},computedToaster:function(){return String(this.toaster)},transitionHandlers:function(){return{beforeEnter:this.onBeforeEnter,afterEnter:this.onAfterEnter,beforeLeave:this.onBeforeLeave,afterLeave:this.onAfterLeave}},computedAttrs:function(){return c(c({},this.bvAttrs),{},{id:this.safeId(),tabindex:"0"})}},watch:(eC={},a(eC,yC,(function(t){this[t?"show":"hide"]()})),a(eC,"localShow",(function(t){t!==this[yC]&&this.$emit(wC,t)})),a(eC,"toaster",(function(){this.$nextTick(this.ensureToaster)})),a(eC,"static",(function(t){t&&this.localShow&&this.ensureToaster()})),eC),created:function(){this.$_dismissTimer=null},mounted:function(){var t=this;this.isMounted=!0,this.$nextTick((function(){t[yC]&&xr((function(){t.show()}))})),this.listenOnRoot(Fs(Cn,to),(function(e){e===t.safeId()&&t.show()})),this.listenOnRoot(Fs(Cn,Nn),(function(e){e&&e!==t.safeId()||t.hide()})),this.listenOnRoot(Ds(xn,In),(function(e){e===t.computedToaster&&t.hide()}))},beforeDestroy:function(){this.clearDismissTimer()},methods:{show:function(){var t=this;if(!this.localShow){this.ensureToaster();var e=this.buildEvent(to);this.emitEvent(e),this.dismissStarted=this.resumeDismiss=0,this.order=Date.now()*(this.appendToast?1:-1),this.isHiding=!1,this.doRender=!0,this.$nextTick((function(){xr((function(){t.localShow=!0}))}))}},hide:function(){var t=this;if(this.localShow){var e=this.buildEvent(Nn);this.emitEvent(e),this.setHoverHandler(!1),this.dismissStarted=this.resumeDismiss=0,this.clearDismissTimer(),this.isHiding=!0,xr((function(){t.localShow=!1}))}},buildEvent:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return new BvEvent(t,c(c({cancelable:!1,target:this.$el||null,relatedTarget:null},e),{},{vueTarget:this,componentId:this.safeId()}))},emitEvent:function(t){var e=t.type;this.emitOnRoot(Ds(Cn,e),t),this.$emit(e,t)},ensureToaster:function(){if(!this.static){var t=this.computedToaster;if(!sC.hasTarget(t)){var e=document.createElement("div");document.body.appendChild(e),new mC({parent:this.$root,propsData:{name:t}}).$mount(e)}}},startDismissTimer:function(){this.clearDismissTimer(),this.noAutoHide||(this.$_dismissTimer=setTimeout(this.hide,this.resumeDismiss||this.computedDuration),this.dismissStarted=Date.now(),this.resumeDismiss=0)},clearDismissTimer:function(){clearTimeout(this.$_dismissTimer),this.$_dismissTimer=null},setHoverHandler:function(t){var e=this.$refs["b-toast"];$s(t,e,"mouseenter",this.onPause,lo),$s(t,e,"mouseleave",this.onUnPause,lo)},onPause:function(){if(!this.noAutoHide&&!this.noHoverPause&&this.$_dismissTimer&&!this.resumeDismiss){var t=Date.now()-this.dismissStarted;t>0&&(this.clearDismissTimer(),this.resumeDismiss=Us(this.computedDuration-t,1e3))}},onUnPause:function(){this.noAutoHide||this.noHoverPause||!this.resumeDismiss?this.resumeDismiss=this.dismissStarted=0:this.startDismissTimer()},onLinkClick:function(){var t=this;this.$nextTick((function(){xr((function(){t.hide()}))}))},onBeforeEnter:function(){this.isTransitioning=!0},onAfterEnter:function(){this.isTransitioning=!1;var t=this.buildEvent(eo);this.emitEvent(t),this.startDismissTimer(),this.setHoverHandler(!0)},onBeforeLeave:function(){this.isTransitioning=!0},onAfterLeave:function(){this.isTransitioning=!1,this.order=0,this.resumeDismiss=this.dismissStarted=0;var t=this.buildEvent(zn);this.emitEvent(t),this.doRender=!1},makeToast:function(t){var e=this,i=this.title,n=this.slotScope,o=la(this),r=[],s=this.normalizeSlot("toast-title",n);s?r.push(s):i&&r.push(t("strong",{staticClass:"mr-2"},i)),this.noCloseButton||r.push(t(Ps,{staticClass:"ml-auto mb-1",on:{click:function(){e.hide()}}}));var a=t();r.length>0&&(a=t("header",{staticClass:"toast-header",class:this.headerClass},r));var l=t(o?ol:"div",{staticClass:"toast-body",class:this.bodyClass,props:o?ps(TC,this):{},on:o?{click:this.onLinkClick}:{}},this.normalizeSlot(Ao,n));return t("div",{staticClass:"toast",class:this.toastClass,attrs:this.computedAttrs,key:"toast-".concat(this._uid),ref:"toast"},[a,l])}},render:function(t){if(!this.doRender||!this.isMounted)return t();var e=this.order,i=this.static,n=this.isHiding,o=this.isStatus,r="b-toast-".concat(this._uid),s=t("div",{staticClass:"b-toast",class:this.toastClasses,attrs:c(c({},i?{}:this.scopedStyleAttrs),{},{id:this.safeId("_toast_outer"),role:n?null:o?"status":"alert","aria-live":n?null:o?"polite":"assertive","aria-atomic":n?null:"true"}),key:r,ref:"b-toast"},[t(Ls,{props:{noFade:this.noFade},on:this.transitionHandlers},[this.localShow?this.makeToast(t):t()])]);return t(lC,{props:{name:r,to:this.computedToaster,order:e,slim:!0,disabled:i}},[s])}}),SC="$bvToast",kC=["id"].concat(T(Kt(Qt(CC,["static","visible"])))),$C={toastContent:"default",title:"toast-title"},BC=function(t){return kC.reduce((function(e,i){return Ft(t[i])||(e[i]=t[i]),e}),{})},_C=me({components:{BToast:xC,BToaster:mC},plugins:{BVToastPlugin:me({plugins:{plugin:function(t){var e=t.extend({name:"BVToastPop",extends:xC,destroyed:function(){var t=this.$el;t&&t.parentNode&&t.parentNode.removeChild(t)},mounted:function(){var t=this,e=function(){t.localShow=!1,t.doRender=!1,t.$nextTick((function(){t.$nextTick((function(){xr((function(){t.$destroy()}))}))}))};this.$parent.$once(ro,e),this.$once(zn,e),this.listenOnRoot(Ds(xn,In),(function(i){i===t.toaster&&e()}))}}),i=function(t,i){if(!ce(SC)){var n=new e({parent:i,propsData:c(c(c({},BC(rs(Cn))),Qt(t,Kt($C))),{},{static:!1,visible:!0})});Kt($C).forEach((function(e){var o=t[e];Ft(o)||("title"===e&&Et(o)&&(o=[i.$createElement("strong",{class:"mr-2"},o)]),n.$slots[$C[e]]=or(o))}));var o=document.createElement("div");document.body.appendChild(o),n.$mount(o)}},n=function(){function t(e){o(this,t),Gt(this,{_vm:e,_root:e.$root}),Yt(this,{_vm:{enumerable:!0,configurable:!1,writable:!1},_root:{enumerable:!0,configurable:!1,writable:!1}})}return s(t,[{key:"toast",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};t&&!ce(SC)&&i(c(c({},BC(e)),{},{toastContent:t}),this._vm)}},{key:"show",value:function(t){t&&this._root.$emit(Fs(Cn,to),t)}},{key:"hide",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this._root.$emit(Fs(Cn,Nn),t)}}]),t}();t.mixin({beforeCreate:function(){this._bv__toast=new n(this)}}),Xt(t.prototype,SC)||Ut(t.prototype,SC,{get:function(){return this&&this._bv__toast||le('"'.concat(SC,'" must be accessed from a Vue instance "this" context.'),Cn),this._bv__toast}})}}})}}),DC="__BV_Tooltip__",FC={focus:!0,hover:!0,click:!0,blur:!0,manual:!0},IC=/^html$/i,PC=/^noninteractive$/i,OC=/^nofade$/i,VC=/^(auto|top(left|right)?|bottom(left|right)?|left(top|bottom)?|right(top|bottom)?)$/i,EC=/^(window|viewport|scrollParent)$/i,LC=/^d\d+$/i,AC=/^ds\d+$/i,RC=/^dh\d+$/i,MC=/^o-?\d+$/i,HC=/^v-.+$/i,zC=/\s+/,NC=function(t,e,i){if(M){var n=function(t,e){var i={title:void 0,trigger:"",placement:"top",fallbackPlacement:"flip",container:!1,animation:!0,offset:0,id:null,html:!1,interactive:!0,disabled:!1,delay:rs(Sn,"delay",50),boundary:String(rs(Sn,"boundary","scrollParent")),boundaryPadding:lr(rs(Sn,"boundaryPadding",5),0),variant:rs(Sn,"variant"),customClass:rs(Sn,"customClass")};if(Et(t.value)||Lt(t.value)||Ot(t.value)?i.title=t.value:Ht(t.value)&&(i=c(c({},i),t.value)),Ft(i.title)){var n=e.data||{};i.title=n.attrs&&!Pt(n.attrs.title)?n.attrs.title:void 0}Ht(i.delay)||(i.delay={show:lr(i.delay,0),hide:lr(i.delay,0)}),t.arg&&(i.container="#".concat(t.arg)),Kt(t.modifiers).forEach((function(t){if(IC.test(t))i.html=!0;else if(PC.test(t))i.interactive=!1;else if(OC.test(t))i.animation=!1;else if(VC.test(t))i.placement=t;else if(EC.test(t))t="scrollparent"===t?"scrollParent":t,i.boundary=t;else if(LC.test(t)){var e=lr(t.slice(1),0);i.delay.show=e,i.delay.hide=e}else AC.test(t)?i.delay.show=lr(t.slice(2),0):RC.test(t)?i.delay.hide=lr(t.slice(2),0):MC.test(t)?i.offset=lr(t.slice(1),0):HC.test(t)&&(i.variant=t.slice(2)||null)}));var o={};return or(i.trigger||"").filter(ne).join(" ").trim().toLowerCase().split(zC).forEach((function(t){FC[t]&&(o[t]=!0)})),Kt(t.modifiers).forEach((function(t){t=t.toLowerCase(),FC[t]&&(o[t]=!0)})),i.trigger=Kt(o).join(" "),"blur"===i.trigger&&(i.trigger="focus"),i.trigger||(i.trigger="hover focus"),i}(e,i);if(!t[DC]){var o=i.context;t[DC]=new Xg({parent:o,_scopeId:eb(o,void 0)}),t[DC].__bv_prev_data__={},t[DC].$on(to,(function(){Ot(n.title)&&t[DC].updateData({title:n.title(t)})}))}var r={title:n.title,triggers:n.trigger,placement:n.placement,fallbackPlacement:n.fallbackPlacement,variant:n.variant,customClass:n.customClass,container:n.container,boundary:n.boundary,delay:n.delay,offset:n.offset,noFade:!n.animation,id:n.id,interactive:n.interactive,disabled:n.disabled,html:n.html},s=t[DC].__bv_prev_data__;if(t[DC].__bv_prev_data__=r,!Ua(r,s)){var a={target:t};Kt(r).forEach((function(e){r[e]!==s[e]&&(a[e]="title"===e&&Ot(r[e])?r[e](t):r[e])})),t[DC].updateData(a)}}},jC=me({directives:{VBTooltip:{bind:function(t,e,i){NC(t,e,i)},componentUpdated:function(t,e,i){i.context.$nextTick((function(){NC(t,e,i)}))},unbind:function(t){!function(t){t[DC]&&(t[DC].$destroy(),t[DC]=null),delete t[DC]}(t)}}}}),GC=me({plugins:{AlertPlugin:Ws,AspectPlugin:ia,AvatarPlugin:xl,BadgePlugin:_l,BreadcrumbPlugin:Ll,ButtonPlugin:Al,ButtonGroupPlugin:Hl,ButtonToolbarPlugin:Gl,CalendarPlugin:Cc,CardPlugin:ru,CarouselPlugin:wu,CollapsePlugin:cd,DropdownPlugin:tf,EmbedPlugin:rf,FormPlugin:gf,FormCheckboxPlugin:Jf,FormDatepickerPlugin:mp,FormFilePlugin:Bp,FormGroupPlugin:Rp,FormInputPlugin:Zp,FormRadioPlugin:tm,FormRatingPlugin:dm,FormSelectPlugin:km,FormSpinbuttonPlugin:Vm,FormTagsPlugin:qm,FormTextareaPlugin:Zm,FormTimepickerPlugin:bv,ImagePlugin:gv,InputGroupPlugin:_v,JumbotronPlugin:Pv,LayoutPlugin:Av,LinkPlugin:Rv,ListGroupPlugin:Gv,MediaPlugin:Xv,ModalPlugin:Ob,NavPlugin:Wb,NavbarPlugin:fg,OverlayPlugin:yg,PaginationPlugin:Vg,PaginationNavPlugin:Rg,PopoverPlugin:wy,ProgressPlugin:ky,SidebarPlugin:Ny,SkeletonPlugin:VT,SpinnerPlugin:ET,TablePlugin:DT,TabsPlugin:KT,TimePlugin:XT,ToastPlugin:_C,TooltipPlugin:me({components:{BTooltip:ey},plugins:{VBTooltipPlugin:jC}})}}),WC=me({directives:{VBHover:np}}),YC=me({directives:{VBModal:Bb}}),UC="active",qC=".nav-link",KC=".nav-item",XC=".list-group-item",ZC=".dropdown-item",JC=Ds("BVScrollspy","activate"),QC="position",tx={element:"body",offset:10,method:"auto",throttle:75},ex={element:"(string|element|component)",offset:"number",method:"string",throttle:"number"},ix=["webkitTransitionEnd","transitionend","otransitionend","oTransitionEnd"],nx=function(t){return function(t){return Object.prototype.toString.call(t)}(t).match(/\s([a-zA-Z]+)/)[1].toLowerCase()},ox=function(){function t(e,i,n){o(this,t),this.$el=e,this.$scroller=null,this.$selector=[qC,XC,ZC].join(","),this.$offsets=[],this.$targets=[],this.$activeTarget=null,this.$scrollHeight=0,this.$resizeTimeout=null,this.$scrollerObserver=null,this.$targetsObserver=null,this.$root=n||null,this.$config=null,this.updateConfig(i)}return s(t,[{key:"updateConfig",value:function(t,e){this.$scroller&&(this.unlisten(),this.$scroller=null);var i=c(c({},this.constructor.Default),t);if(e&&(this.$root=e),function(t,e,i){for(var n in i)if(Xt(i,n)){var o=i[n],r=e[n],s=r&&kr(r)?"element":nx(r);s=r&&r._isVue?"component":s,new RegExp(o).test(s)||le("".concat(t,': Option "').concat(n,'" provided type "').concat(s,'" but expected type "').concat(o,'"'))}}(this.constructor.Name,i,this.constructor.DefaultType),this.$config=i,this.$root){var n=this;this.$root.$nextTick((function(){n.listen()}))}else this.listen()}},{key:"dispose",value:function(){this.unlisten(),clearTimeout(this.$resizeTimeout),this.$resizeTimeout=null,this.$el=null,this.$config=null,this.$scroller=null,this.$selector=null,this.$offsets=null,this.$targets=null,this.$activeTarget=null,this.$scrollHeight=null}},{key:"listen",value:function(){var t=this,e=this.getScroller();e&&"BODY"!==e.tagName&&Ss(e,"scroll",this,lo),Ss(window,"scroll",this,lo),Ss(window,"resize",this,lo),Ss(window,"orientationchange",this,lo),ix.forEach((function(e){Ss(window,e,t,lo)})),this.setObservers(!0),this.handleEvent("refresh")}},{key:"unlisten",value:function(){var t=this,e=this.getScroller();this.setObservers(!1),e&&"BODY"!==e.tagName&&ks(e,"scroll",this,lo),ks(window,"scroll",this,lo),ks(window,"resize",this,lo),ks(window,"orientationchange",this,lo),ix.forEach((function(e){ks(window,e,t,lo)}))}},{key:"setObservers",value:function(t){var e=this;this.$scrollerObserver&&this.$scrollerObserver.disconnect(),this.$targetsObserver&&this.$targetsObserver.disconnect(),this.$scrollerObserver=null,this.$targetsObserver=null,t&&(this.$targetsObserver=au(this.$el,(function(){e.handleEvent("mutation")}),{subtree:!0,childList:!0,attributes:!0,attributeFilter:["href"]}),this.$scrollerObserver=au(this.getScroller(),(function(){e.handleEvent("mutation")}),{subtree:!0,childList:!0,characterData:!0,attributes:!0,attributeFilter:["id","style","class"]}))}},{key:"handleEvent",value:function(t){var e=Et(t)?t:t.type,i=this;"scroll"===e?(this.$scrollerObserver||this.listen(),this.process()):/(resize|orientationchange|mutation|refresh)/.test(e)&&(i.$resizeTimeout||(i.$resizeTimeout=setTimeout((function(){i.refresh(),i.process(),i.$resizeTimeout=null}),i.$config.throttle)))}},{key:"refresh",value:function(){var t=this,e=this.getScroller();if(e){var i=e!==e.window?QC:"offset",n="auto"===this.$config.method?i:this.$config.method,o=n===QC?Jr:Zr,r=n===QC?this.getScrollTop():0;return this.$offsets=[],this.$targets=[],this.$scrollHeight=this.getScrollHeight(),Pr(this.$selector,this.$el).map((function(t){return jr(t,"href")})).filter((function(t){return t&&yt.test(t||"")})).map((function(t){var i=t.replace(yt,"$1").trim();if(!i)return null;var n=Or(i,e);return n&&Dr(n)?{offset:lr(o(n).top,0)+r,target:i}:null})).filter(ne).sort((function(t,e){return t.offset-e.offset})).reduce((function(e,i){return e[i.target]||(t.$offsets.push(i.offset),t.$targets.push(i.target),e[i.target]=!0),e}),{}),this}}},{key:"process",value:function(){var t=this.getScrollTop()+this.$config.offset,e=this.getScrollHeight(),i=this.$config.offset+e-this.getOffsetHeight();if(this.$scrollHeight!==e&&this.refresh(),t>=i){var n=this.$targets[this.$targets.length-1];this.$activeTarget!==n&&this.activate(n)}else{if(this.$activeTarget&&t0)return this.$activeTarget=null,void this.clear();for(var o=this.$offsets.length;o--;){this.$activeTarget!==this.$targets[o]&&t>=this.$offsets[o]&&(Ft(this.$offsets[o+1])||t0&&this.$root&&this.$root.$emit(JC,t,i)}},{key:"clear",value:function(){var t=this;Pr("".concat(this.$selector,", ").concat(KC),this.$el).filter((function(t){return Hr(t,UC)})).forEach((function(e){return t.setActiveState(e,!1)}))}},{key:"setActiveState",value:function(t,e){t&&(e?Rr(t,UC):Mr(t,UC))}}],[{key:"Name",get:function(){return"v-b-scrollspy"}},{key:"Default",get:function(){return tx}},{key:"DefaultType",get:function(){return ex}}]),t}(),rx="__BV_ScrollSpy__",sx=/^\d+$/,ax=/^(auto|position|offset)$/,lx=function(t,e,i){if(M){var n=function(t){var e={};return t.arg&&(e.element="#".concat(t.arg)),Kt(t.modifiers).forEach((function(t){sx.test(t)?e.offset=lr(t,0):ax.test(t)&&(e.method=t)})),Et(t.value)?e.element=t.value:Lt(t.value)?e.offset=Js(t.value):Mt(t.value)&&Kt(t.value).filter((function(t){return!!ox.DefaultType[t]})).forEach((function(i){e[i]=t.value[i]})),e}(e);t[rx]?t[rx].updateConfig(n,i.context.$root):t[rx]=new ox(t,n,i.context.$root)}},cx={install:pe({plugins:{componentsPlugin:GC,directivesPlugin:me({plugins:{VBHoverPlugin:WC,VBModalPlugin:YC,VBPopoverPlugin:yy,VBScrollspyPlugin:me({directives:{VBScrollspy:{bind:function(t,e,i){lx(t,e,i)},inserted:function(t,e,i){lx(t,e,i)},update:function(t,e,i){e.value!==e.oldValue&&lx(t,e,i)},componentUpdated:function(t,e,i){e.value!==e.oldValue&&lx(t,e,i)},unbind:function(t){!function(t){t[rx]&&(t[rx].dispose(),t[rx]=null,delete t[rx])}(t)}}}}),VBTogglePlugin:ld,VBTooltipPlugin:jC,VBVisiblePlugin:me({directives:{VBVisible:Kc}})}})}}),NAME:"BootstrapVue"};return iC=cx,V&&window.Vue&&window.Vue.use(iC),V&&iC.NAME&&(window[iC.NAME]=iC),cx})); +//# sourceMappingURL=bootstrap-vue.min.js.map \ No newline at end of file diff --git a/src/renderer/js/bootstrap.min.js b/src/renderer/lib/bootstrap.min.js similarity index 100% rename from src/renderer/js/bootstrap.min.js rename to src/renderer/lib/bootstrap.min.js diff --git a/src/renderer/js/fast-plural-rules.js b/src/renderer/lib/fast-plural-rules.js similarity index 100% rename from src/renderer/js/fast-plural-rules.js rename to src/renderer/lib/fast-plural-rules.js diff --git a/src/renderer/js/jquery-3.2.1.slim.min.js b/src/renderer/lib/jquery-3.2.1.slim.min.js similarity index 100% rename from src/renderer/js/jquery-3.2.1.slim.min.js rename to src/renderer/lib/jquery-3.2.1.slim.min.js diff --git a/src/renderer/js/less.js b/src/renderer/lib/less.js similarity index 100% rename from src/renderer/js/less.js rename to src/renderer/lib/less.js diff --git a/src/renderer/js/notyf.min.js b/src/renderer/lib/notyf.min.js similarity index 100% rename from src/renderer/js/notyf.min.js rename to src/renderer/lib/notyf.min.js diff --git a/src/renderer/js/popper.min.js b/src/renderer/lib/popper.min.js similarity index 100% rename from src/renderer/js/popper.min.js rename to src/renderer/lib/popper.min.js diff --git a/src/renderer/lib/resonance-audio.min.js b/src/renderer/lib/resonance-audio.min.js new file mode 100644 index 00000000..7d4349e1 --- /dev/null +++ b/src/renderer/lib/resonance-audio.min.js @@ -0,0 +1,181 @@ +!function(A,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e=t();for(var i in e)("object"==typeof exports?exports:A)[i]=e[i]}}(this,function(){return function(A){function t(i){if(e[i])return e[i].exports;var n=e[i]={i:i,l:!1,exports:{}};return A[i].call(n.exports,n,n.exports,t),n.l=!0,n.exports}var e={};return t.m=A,t.c=e,t.d=function(A,e,i){t.o(A,e)||Object.defineProperty(A,e,{configurable:!1,enumerable:!0,get:i})},t.n=function(A){var e=A&&A.__esModule?function(){return A.default}:function(){return A};return t.d(e,"a",e),e},t.o=function(A,t){return Object.prototype.hasOwnProperty.call(A,t)},t.p="",t(t.s=10)}([function(A,t,e){"use strict";/** + * @license + * Copyright 2017 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +function i(){}i.DEFAULT_SOURCE_GAIN=1,i.LISTENER_MAX_OUTSIDE_ROOM_DISTANCE=1,i.SOURCE_MAX_OUTSIDE_ROOM_DISTANCE=1,i.DEFAULT_SOURCE_DISTANCE=1,i.DEFAULT_POSITION=[0,0,0],i.DEFAULT_FORWARD=[0,0,-1],i.DEFAULT_UP=[0,1,0],i.DEFAULT_RIGHT=[1,0,0],i.DEFAULT_SPEED_OF_SOUND=343,i.ATTENUATION_ROLLOFFS=["logarithmic","linear","none"],i.DEFAULT_ATTENUATION_ROLLOFF="logarithmic",i.DEFAULT_MIN_DISTANCE=1,i.DEFAULT_MAX_DISTANCE=1e3,i.DEFAULT_DIRECTIVITY_ALPHA=0,i.DEFAULT_DIRECTIVITY_SHARPNESS=1,i.DEFAULT_AZIMUTH=0,i.DEFAULT_ELEVATION=0,i.DEFAULT_AMBISONIC_ORDER=1,i.DEFAULT_SOURCE_WIDTH=0,i.DEFAULT_REFLECTION_MAX_DURATION=.5,i.DEFAULT_REFLECTION_CUTOFF_FREQUENCY=6400,i.DEFAULT_REFLECTION_COEFFICIENTS={left:0,right:0,front:0,back:0,down:0,up:0},i.DEFAULT_REFLECTION_MIN_DISTANCE=1,i.DEFAULT_ROOM_DIMENSIONS={width:0,height:0,depth:0},i.DEFAULT_REFLECTION_MULTIPLIER=1,i.DEFAULT_REVERB_BANDWIDTH=1,i.DEFAULT_REVERB_DURATION_MULTIPLIER=1,i.DEFAULT_REVERB_PREDELAY=1.5,i.DEFAULT_REVERB_TAIL_ONSET=3.8,i.DEFAULT_REVERB_GAIN=.01,i.DEFAULT_REVERB_MAX_DURATION=3,i.NUMBER_REVERB_FREQUENCY_BANDS=(i.DEFAULT_REVERB_FREQUENCY_BANDS=[31.25,62.5,125,250,500,1e3,2e3,4e3,8e3]).length,i.DEFAULT_REVERB_DURATIONS=new Float32Array(i.NUMBER_REVERB_FREQUENCY_BANDS),i.ROOM_MATERIAL_COEFFICIENTS={transparent:[1,1,1,1,1,1,1,1,1],"acoustic-ceiling-tiles":[.672,.675,.7,.66,.72,.92,.88,.75,1],"brick-bare":[.03,.03,.03,.03,.03,.04,.05,.07,.14],"brick-painted":[.006,.007,.01,.01,.02,.02,.02,.03,.06],"concrete-block-coarse":[.36,.36,.36,.44,.31,.29,.39,.25,.5],"concrete-block-painted":[.092,.09,.1,.05,.06,.07,.09,.08,.16],"curtain-heavy":[.073,.106,.14,.35,.55,.72,.7,.65,1],"fiber-glass-insulation":[.193,.22,.22,.82,.99,.99,.99,.99,1],"glass-thin":[.18,.169,.18,.06,.04,.03,.02,.02,.04],"glass-thick":[.35,.35,.35,.25,.18,.12,.07,.04,.08],grass:[.05,.05,.15,.25,.4,.55,.6,.6,.6],"linoleum-on-concrete":[.02,.02,.02,.03,.03,.03,.03,.02,.04],marble:[.01,.01,.01,.01,.01,.01,.02,.02,.04],metal:[.03,.035,.04,.04,.05,.05,.05,.07,.09],"parquet-on-concrete":[.028,.03,.04,.04,.07,.06,.06,.07,.14],"plaster-rough":[.017,.018,.02,.03,.04,.05,.04,.03,.06],"plaster-smooth":[.011,.012,.013,.015,.02,.03,.04,.05,.1],"plywood-panel":[.4,.34,.28,.22,.17,.09,.1,.11,.22],"polished-concrete-or-tile":[.008,.008,.01,.01,.015,.02,.02,.02,.04],"sheet-rock":[.29,.279,.29,.1,.05,.04,.07,.09,.18],"water-or-ice-surface":[.006,.006,.008,.008,.013,.015,.02,.025,.05],"wood-ceiling":[.15,.147,.15,.11,.1,.07,.06,.07,.14],"wood-panel":[.28,.28,.28,.22,.17,.09,.1,.11,.22],uniform:[.5,.5,.5,.5,.5,.5,.5,.5,.5]},i.DEFAULT_ROOM_MATERIALS={left:"transparent",right:"transparent",front:"transparent",back:"transparent",down:"transparent",up:"transparent"},i.NUMBER_REFLECTION_AVERAGING_BANDS=3,i.ROOM_STARTING_AVERAGING_BAND=4,i.ROOM_MIN_VOLUME=1e-4,i.ROOM_AIR_ABSORPTION_COEFFICIENTS=[6e-4,6e-4,7e-4,8e-4,.001,.0015,.0026,.006,.0207],i.ROOM_EYRING_CORRECTION_COEFFICIENT=1.38,i.TWO_PI=6.28318530717959,i.TWENTY_FOUR_LOG10=55.2620422318571,i.LOG1000=6.90775527898214,i.LOG2_DIV2=.346573590279973,i.DEGREES_TO_RADIANS=.017453292519943,i.RADIANS_TO_DEGREES=57.29577951308232,i.EPSILON_FLOAT=1e-8,i.log=function(){window.console.log.apply(window.console,["%c[ResonanceAudio]%c "+Array.prototype.slice.call(arguments).join(" ")+" %c(@"+performance.now().toFixed(2)+"ms)","background: #BBDEFB; color: #FF5722; font-weight: 700","font-weight: 400","color: #AAA"])},i.normalizeVector=function(A){let e=Math.sqrt(A[0]*A[0]+A[1]*A[1]+A[2]*A[2]);return e>t.EPSILON_FLOAT&&(e=1/e,A[0]*=e,A[1]*=e,A[2]*=e),A},i.crossProduct=function(A,t){return[A[1]*t[2]-A[2]*t[1],A[2]*t[0]-A[0]*t[2],A[0]*t[1]-A[1]*t[0]]},A.exports=i},function(A,t,e){"use strict";function i(A,t){void 0==t&&(t={}),void 0==t.ambisonicOrder&&(t.ambisonicOrder=s.DEFAULT_AMBISONIC_ORDER),void 0==t.azimuth&&(t.azimuth=s.DEFAULT_AZIMUTH),void 0==t.elevation&&(t.elevation=s.DEFAULT_ELEVATION),void 0==t.sourceWidth&&(t.sourceWidth=s.DEFAULT_SOURCE_WIDTH),this._context=A,this.input=A.createGain(),this._channelGain=[],this._merger=void 0,this.output=A.createGain(),this.setAmbisonicOrder(t.ambisonicOrder),this._azimuth=t.azimuth,this._elevation=t.elevation,this.setSourceWidth(t.sourceWidth)}/** + * @license + * Copyright 2017 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const n=e(3),s=e(0);i.prototype.setAmbisonicOrder=function(A){this._ambisonicOrder=i.validateAmbisonicOrder(A),this.input.disconnect();for(let e=0;en.SPHERICAL_HARMONICS_MAX_ORDER&&(s.log("Error: Unable to render ambisonic order",options.ambisonicOrder,"(Max order is",n.SPHERICAL_HARMONICS_MAX_ORDER,")\nUsing max order instead."),options.ambisonicOrder=n.SPHERICAL_HARMONICS_MAX_ORDER),A},A.exports=i},function(A,t,e){"use strict";function i(A,t){void 0==t&&(t={}),void 0==t.ambisonicOrder&&(t.ambisonicOrder=o.DEFAULT_AMBISONIC_ORDER),void 0==t.position&&(t.position=o.DEFAULT_POSITION.slice()),void 0==t.forward&&(t.forward=o.DEFAULT_FORWARD.slice()),void 0==t.up&&(t.up=o.DEFAULT_UP.slice()),this.position=new Float32Array(3),this._tempMatrix3=new Float32Array(9),this._ambisonicOrder=s.validateAmbisonicOrder(t.ambisonicOrder),this._context=A,1==this._ambisonicOrder?this._renderer=n.Omnitone.createFOARenderer(A,{}):this._ambisonicOrder>1&&(this._renderer=n.Omnitone.createHOARenderer(A,{ambisonicOrder:this._ambisonicOrder})),this.input=A.createGain(),this.output=A.createGain(),this.ambisonicOutput=A.createGain();let e=this;this._renderer.initialize().then(function(){e.input.connect(e._renderer.input),e._ambisonicOrder>1?e._renderer._hoaRotator.output.connect(e.ambisonicOutput):e._renderer._foaRotator.output.connect(e.ambisonicOutput),e._renderer.output.connect(e.output)}),this.setOrientation(t.forward[0],t.forward[1],t.forward[2],t.up[0],t.up[1],t.up[2])}/** + * @license + * Copyright 2017 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const n=e(12),s=e(1),o=e(0);i.prototype.setOrientation=function(A,t,e,i,n,s){let r=o.crossProduct([A,t,e],[i,n,s]);this._tempMatrix3[0]=r[0],this._tempMatrix3[1]=r[1],this._tempMatrix3[2]=r[2],this._tempMatrix3[3]=i,this._tempMatrix3[4]=n,this._tempMatrix3[5]=s,this._tempMatrix3[6]=A,this._tempMatrix3[7]=t,this._tempMatrix3[8]=e,this._renderer.setRotationMatrix3(this._tempMatrix3)},i.prototype.setFromMatrix=function(A){this._renderer.setRotationMatrix4(A.elements),this.position[0]=A.elements[12],this.position[1]=A.elements[13],this.position[2]=A.elements[14]},A.exports=i},function(A,t,e){"use strict";t.SPHERICAL_HARMONICS=[[[0,0,0,1,1,1],[.052336,.034899,.017452,.999848,.999391,.99863],[.104528,.069756,.034899,.999391,.997564,.994522],[.156434,.104528,.052336,.99863,.994522,.987688],[.207912,.139173,.069756,.997564,.990268,.978148],[.258819,.173648,.087156,.996195,.984808,.965926],[.309017,.207912,.104528,.994522,.978148,.951057],[.358368,.241922,.121869,.992546,.970296,.93358],[.406737,.275637,.139173,.990268,.961262,.913545],[.45399,.309017,.156434,.987688,.951057,.891007],[.5,.34202,.173648,.984808,.939693,.866025],[.544639,.374607,.190809,.981627,.927184,.838671],[.587785,.406737,.207912,.978148,.913545,.809017],[.62932,.438371,.224951,.97437,.898794,.777146],[.669131,.469472,.241922,.970296,.882948,.743145],[.707107,.5,.258819,.965926,.866025,.707107],[.743145,.529919,.275637,.961262,.848048,.669131],[.777146,.559193,.292372,.956305,.829038,.62932],[.809017,.587785,.309017,.951057,.809017,.587785],[.838671,.615661,.325568,.945519,.788011,.544639],[.866025,.642788,.34202,.939693,.766044,.5],[.891007,.669131,.358368,.93358,.743145,.45399],[.913545,.694658,.374607,.927184,.71934,.406737],[.93358,.71934,.390731,.920505,.694658,.358368],[.951057,.743145,.406737,.913545,.669131,.309017],[.965926,.766044,.422618,.906308,.642788,.258819],[.978148,.788011,.438371,.898794,.615661,.207912],[.987688,.809017,.45399,.891007,.587785,.156434],[.994522,.829038,.469472,.882948,.559193,.104528],[.99863,.848048,.48481,.87462,.529919,.052336],[1,.866025,.5,.866025,.5,0],[.99863,.882948,.515038,.857167,.469472,-.052336],[.994522,.898794,.529919,.848048,.438371,-.104528],[.987688,.913545,.544639,.838671,.406737,-.156434],[.978148,.927184,.559193,.829038,.374607,-.207912],[.965926,.939693,.573576,.819152,.34202,-.258819],[.951057,.951057,.587785,.809017,.309017,-.309017],[.93358,.961262,.601815,.798636,.275637,-.358368],[.913545,.970296,.615661,.788011,.241922,-.406737],[.891007,.978148,.62932,.777146,.207912,-.45399],[.866025,.984808,.642788,.766044,.173648,-.5],[.838671,.990268,.656059,.75471,.139173,-.544639],[.809017,.994522,.669131,.743145,.104528,-.587785],[.777146,.997564,.681998,.731354,.069756,-.62932],[.743145,.999391,.694658,.71934,.034899,-.669131],[.707107,1,.707107,.707107,0,-.707107],[.669131,.999391,.71934,.694658,-.034899,-.743145],[.62932,.997564,.731354,.681998,-.069756,-.777146],[.587785,.994522,.743145,.669131,-.104528,-.809017],[.544639,.990268,.75471,.656059,-.139173,-.838671],[.5,.984808,.766044,.642788,-.173648,-.866025],[.45399,.978148,.777146,.62932,-.207912,-.891007],[.406737,.970296,.788011,.615661,-.241922,-.913545],[.358368,.961262,.798636,.601815,-.275637,-.93358],[.309017,.951057,.809017,.587785,-.309017,-.951057],[.258819,.939693,.819152,.573576,-.34202,-.965926],[.207912,.927184,.829038,.559193,-.374607,-.978148],[.156434,.913545,.838671,.544639,-.406737,-.987688],[.104528,.898794,.848048,.529919,-.438371,-.994522],[.052336,.882948,.857167,.515038,-.469472,-.99863],[0,.866025,.866025,.5,-.5,-1],[-.052336,.848048,.87462,.48481,-.529919,-.99863],[-.104528,.829038,.882948,.469472,-.559193,-.994522],[-.156434,.809017,.891007,.45399,-.587785,-.987688],[-.207912,.788011,.898794,.438371,-.615661,-.978148],[-.258819,.766044,.906308,.422618,-.642788,-.965926],[-.309017,.743145,.913545,.406737,-.669131,-.951057],[-.358368,.71934,.920505,.390731,-.694658,-.93358],[-.406737,.694658,.927184,.374607,-.71934,-.913545],[-.45399,.669131,.93358,.358368,-.743145,-.891007],[-.5,.642788,.939693,.34202,-.766044,-.866025],[-.544639,.615661,.945519,.325568,-.788011,-.838671],[-.587785,.587785,.951057,.309017,-.809017,-.809017],[-.62932,.559193,.956305,.292372,-.829038,-.777146],[-.669131,.529919,.961262,.275637,-.848048,-.743145],[-.707107,.5,.965926,.258819,-.866025,-.707107],[-.743145,.469472,.970296,.241922,-.882948,-.669131],[-.777146,.438371,.97437,.224951,-.898794,-.62932],[-.809017,.406737,.978148,.207912,-.913545,-.587785],[-.838671,.374607,.981627,.190809,-.927184,-.544639],[-.866025,.34202,.984808,.173648,-.939693,-.5],[-.891007,.309017,.987688,.156434,-.951057,-.45399],[-.913545,.275637,.990268,.139173,-.961262,-.406737],[-.93358,.241922,.992546,.121869,-.970296,-.358368],[-.951057,.207912,.994522,.104528,-.978148,-.309017],[-.965926,.173648,.996195,.087156,-.984808,-.258819],[-.978148,.139173,.997564,.069756,-.990268,-.207912],[-.987688,.104528,.99863,.052336,-.994522,-.156434],[-.994522,.069756,.999391,.034899,-.997564,-.104528],[-.99863,.034899,.999848,.017452,-.999391,-.052336],[-1,0,1,0,-1,-0],[-.99863,-.034899,.999848,-.017452,-.999391,.052336],[-.994522,-.069756,.999391,-.034899,-.997564,.104528],[-.987688,-.104528,.99863,-.052336,-.994522,.156434],[-.978148,-.139173,.997564,-.069756,-.990268,.207912],[-.965926,-.173648,.996195,-.087156,-.984808,.258819],[-.951057,-.207912,.994522,-.104528,-.978148,.309017],[-.93358,-.241922,.992546,-.121869,-.970296,.358368],[-.913545,-.275637,.990268,-.139173,-.961262,.406737],[-.891007,-.309017,.987688,-.156434,-.951057,.45399],[-.866025,-.34202,.984808,-.173648,-.939693,.5],[-.838671,-.374607,.981627,-.190809,-.927184,.544639],[-.809017,-.406737,.978148,-.207912,-.913545,.587785],[-.777146,-.438371,.97437,-.224951,-.898794,.62932],[-.743145,-.469472,.970296,-.241922,-.882948,.669131],[-.707107,-.5,.965926,-.258819,-.866025,.707107],[-.669131,-.529919,.961262,-.275637,-.848048,.743145],[-.62932,-.559193,.956305,-.292372,-.829038,.777146],[-.587785,-.587785,.951057,-.309017,-.809017,.809017],[-.544639,-.615661,.945519,-.325568,-.788011,.838671],[-.5,-.642788,.939693,-.34202,-.766044,.866025],[-.45399,-.669131,.93358,-.358368,-.743145,.891007],[-.406737,-.694658,.927184,-.374607,-.71934,.913545],[-.358368,-.71934,.920505,-.390731,-.694658,.93358],[-.309017,-.743145,.913545,-.406737,-.669131,.951057],[-.258819,-.766044,.906308,-.422618,-.642788,.965926],[-.207912,-.788011,.898794,-.438371,-.615661,.978148],[-.156434,-.809017,.891007,-.45399,-.587785,.987688],[-.104528,-.829038,.882948,-.469472,-.559193,.994522],[-.052336,-.848048,.87462,-.48481,-.529919,.99863],[-0,-.866025,.866025,-.5,-.5,1],[.052336,-.882948,.857167,-.515038,-.469472,.99863],[.104528,-.898794,.848048,-.529919,-.438371,.994522],[.156434,-.913545,.838671,-.544639,-.406737,.987688],[.207912,-.927184,.829038,-.559193,-.374607,.978148],[.258819,-.939693,.819152,-.573576,-.34202,.965926],[.309017,-.951057,.809017,-.587785,-.309017,.951057],[.358368,-.961262,.798636,-.601815,-.275637,.93358],[.406737,-.970296,.788011,-.615661,-.241922,.913545],[.45399,-.978148,.777146,-.62932,-.207912,.891007],[.5,-.984808,.766044,-.642788,-.173648,.866025],[.544639,-.990268,.75471,-.656059,-.139173,.838671],[.587785,-.994522,.743145,-.669131,-.104528,.809017],[.62932,-.997564,.731354,-.681998,-.069756,.777146],[.669131,-.999391,.71934,-.694658,-.034899,.743145],[.707107,-1,.707107,-.707107,-0,.707107],[.743145,-.999391,.694658,-.71934,.034899,.669131],[.777146,-.997564,.681998,-.731354,.069756,.62932],[.809017,-.994522,.669131,-.743145,.104528,.587785],[.838671,-.990268,.656059,-.75471,.139173,.544639],[.866025,-.984808,.642788,-.766044,.173648,.5],[.891007,-.978148,.62932,-.777146,.207912,.45399],[.913545,-.970296,.615661,-.788011,.241922,.406737],[.93358,-.961262,.601815,-.798636,.275637,.358368],[.951057,-.951057,.587785,-.809017,.309017,.309017],[.965926,-.939693,.573576,-.819152,.34202,.258819],[.978148,-.927184,.559193,-.829038,.374607,.207912],[.987688,-.913545,.544639,-.838671,.406737,.156434],[.994522,-.898794,.529919,-.848048,.438371,.104528],[.99863,-.882948,.515038,-.857167,.469472,.052336],[1,-.866025,.5,-.866025,.5,0],[.99863,-.848048,.48481,-.87462,.529919,-.052336],[.994522,-.829038,.469472,-.882948,.559193,-.104528],[.987688,-.809017,.45399,-.891007,.587785,-.156434],[.978148,-.788011,.438371,-.898794,.615661,-.207912],[.965926,-.766044,.422618,-.906308,.642788,-.258819],[.951057,-.743145,.406737,-.913545,.669131,-.309017],[.93358,-.71934,.390731,-.920505,.694658,-.358368],[.913545,-.694658,.374607,-.927184,.71934,-.406737],[.891007,-.669131,.358368,-.93358,.743145,-.45399],[.866025,-.642788,.34202,-.939693,.766044,-.5],[.838671,-.615661,.325568,-.945519,.788011,-.544639],[.809017,-.587785,.309017,-.951057,.809017,-.587785],[.777146,-.559193,.292372,-.956305,.829038,-.62932],[.743145,-.529919,.275637,-.961262,.848048,-.669131],[.707107,-.5,.258819,-.965926,.866025,-.707107],[.669131,-.469472,.241922,-.970296,.882948,-.743145],[.62932,-.438371,.224951,-.97437,.898794,-.777146],[.587785,-.406737,.207912,-.978148,.913545,-.809017],[.544639,-.374607,.190809,-.981627,.927184,-.838671],[.5,-.34202,.173648,-.984808,.939693,-.866025],[.45399,-.309017,.156434,-.987688,.951057,-.891007],[.406737,-.275637,.139173,-.990268,.961262,-.913545],[.358368,-.241922,.121869,-.992546,.970296,-.93358],[.309017,-.207912,.104528,-.994522,.978148,-.951057],[.258819,-.173648,.087156,-.996195,.984808,-.965926],[.207912,-.139173,.069756,-.997564,.990268,-.978148],[.156434,-.104528,.052336,-.99863,.994522,-.987688],[.104528,-.069756,.034899,-.999391,.997564,-.994522],[.052336,-.034899,.017452,-.999848,.999391,-.99863],[0,-0,0,-1,1,-1],[-.052336,.034899,-.017452,-.999848,.999391,-.99863],[-.104528,.069756,-.034899,-.999391,.997564,-.994522],[-.156434,.104528,-.052336,-.99863,.994522,-.987688],[-.207912,.139173,-.069756,-.997564,.990268,-.978148],[-.258819,.173648,-.087156,-.996195,.984808,-.965926],[-.309017,.207912,-.104528,-.994522,.978148,-.951057],[-.358368,.241922,-.121869,-.992546,.970296,-.93358],[-.406737,.275637,-.139173,-.990268,.961262,-.913545],[-.45399,.309017,-.156434,-.987688,.951057,-.891007],[-.5,.34202,-.173648,-.984808,.939693,-.866025],[-.544639,.374607,-.190809,-.981627,.927184,-.838671],[-.587785,.406737,-.207912,-.978148,.913545,-.809017],[-.62932,.438371,-.224951,-.97437,.898794,-.777146],[-.669131,.469472,-.241922,-.970296,.882948,-.743145],[-.707107,.5,-.258819,-.965926,.866025,-.707107],[-.743145,.529919,-.275637,-.961262,.848048,-.669131],[-.777146,.559193,-.292372,-.956305,.829038,-.62932],[-.809017,.587785,-.309017,-.951057,.809017,-.587785],[-.838671,.615661,-.325568,-.945519,.788011,-.544639],[-.866025,.642788,-.34202,-.939693,.766044,-.5],[-.891007,.669131,-.358368,-.93358,.743145,-.45399],[-.913545,.694658,-.374607,-.927184,.71934,-.406737],[-.93358,.71934,-.390731,-.920505,.694658,-.358368],[-.951057,.743145,-.406737,-.913545,.669131,-.309017],[-.965926,.766044,-.422618,-.906308,.642788,-.258819],[-.978148,.788011,-.438371,-.898794,.615661,-.207912],[-.987688,.809017,-.45399,-.891007,.587785,-.156434],[-.994522,.829038,-.469472,-.882948,.559193,-.104528],[-.99863,.848048,-.48481,-.87462,.529919,-.052336],[-1,.866025,-.5,-.866025,.5,0],[-.99863,.882948,-.515038,-.857167,.469472,.052336],[-.994522,.898794,-.529919,-.848048,.438371,.104528],[-.987688,.913545,-.544639,-.838671,.406737,.156434],[-.978148,.927184,-.559193,-.829038,.374607,.207912],[-.965926,.939693,-.573576,-.819152,.34202,.258819],[-.951057,.951057,-.587785,-.809017,.309017,.309017],[-.93358,.961262,-.601815,-.798636,.275637,.358368],[-.913545,.970296,-.615661,-.788011,.241922,.406737],[-.891007,.978148,-.62932,-.777146,.207912,.45399],[-.866025,.984808,-.642788,-.766044,.173648,.5],[-.838671,.990268,-.656059,-.75471,.139173,.544639],[-.809017,.994522,-.669131,-.743145,.104528,.587785],[-.777146,.997564,-.681998,-.731354,.069756,.62932],[-.743145,.999391,-.694658,-.71934,.034899,.669131],[-.707107,1,-.707107,-.707107,0,.707107],[-.669131,.999391,-.71934,-.694658,-.034899,.743145],[-.62932,.997564,-.731354,-.681998,-.069756,.777146],[-.587785,.994522,-.743145,-.669131,-.104528,.809017],[-.544639,.990268,-.75471,-.656059,-.139173,.838671],[-.5,.984808,-.766044,-.642788,-.173648,.866025],[-.45399,.978148,-.777146,-.62932,-.207912,.891007],[-.406737,.970296,-.788011,-.615661,-.241922,.913545],[-.358368,.961262,-.798636,-.601815,-.275637,.93358],[-.309017,.951057,-.809017,-.587785,-.309017,.951057],[-.258819,.939693,-.819152,-.573576,-.34202,.965926],[-.207912,.927184,-.829038,-.559193,-.374607,.978148],[-.156434,.913545,-.838671,-.544639,-.406737,.987688],[-.104528,.898794,-.848048,-.529919,-.438371,.994522],[-.052336,.882948,-.857167,-.515038,-.469472,.99863],[-0,.866025,-.866025,-.5,-.5,1],[.052336,.848048,-.87462,-.48481,-.529919,.99863],[.104528,.829038,-.882948,-.469472,-.559193,.994522],[.156434,.809017,-.891007,-.45399,-.587785,.987688],[.207912,.788011,-.898794,-.438371,-.615661,.978148],[.258819,.766044,-.906308,-.422618,-.642788,.965926],[.309017,.743145,-.913545,-.406737,-.669131,.951057],[.358368,.71934,-.920505,-.390731,-.694658,.93358],[.406737,.694658,-.927184,-.374607,-.71934,.913545],[.45399,.669131,-.93358,-.358368,-.743145,.891007],[.5,.642788,-.939693,-.34202,-.766044,.866025],[.544639,.615661,-.945519,-.325568,-.788011,.838671],[.587785,.587785,-.951057,-.309017,-.809017,.809017],[.62932,.559193,-.956305,-.292372,-.829038,.777146],[.669131,.529919,-.961262,-.275637,-.848048,.743145],[.707107,.5,-.965926,-.258819,-.866025,.707107],[.743145,.469472,-.970296,-.241922,-.882948,.669131],[.777146,.438371,-.97437,-.224951,-.898794,.62932],[.809017,.406737,-.978148,-.207912,-.913545,.587785],[.838671,.374607,-.981627,-.190809,-.927184,.544639],[.866025,.34202,-.984808,-.173648,-.939693,.5],[.891007,.309017,-.987688,-.156434,-.951057,.45399],[.913545,.275637,-.990268,-.139173,-.961262,.406737],[.93358,.241922,-.992546,-.121869,-.970296,.358368],[.951057,.207912,-.994522,-.104528,-.978148,.309017],[.965926,.173648,-.996195,-.087156,-.984808,.258819],[.978148,.139173,-.997564,-.069756,-.990268,.207912],[.987688,.104528,-.99863,-.052336,-.994522,.156434],[.994522,.069756,-.999391,-.034899,-.997564,.104528],[.99863,.034899,-.999848,-.017452,-.999391,.052336],[1,0,-1,-0,-1,0],[.99863,-.034899,-.999848,.017452,-.999391,-.052336],[.994522,-.069756,-.999391,.034899,-.997564,-.104528],[.987688,-.104528,-.99863,.052336,-.994522,-.156434],[.978148,-.139173,-.997564,.069756,-.990268,-.207912],[.965926,-.173648,-.996195,.087156,-.984808,-.258819],[.951057,-.207912,-.994522,.104528,-.978148,-.309017],[.93358,-.241922,-.992546,.121869,-.970296,-.358368],[.913545,-.275637,-.990268,.139173,-.961262,-.406737],[.891007,-.309017,-.987688,.156434,-.951057,-.45399],[.866025,-.34202,-.984808,.173648,-.939693,-.5],[.838671,-.374607,-.981627,.190809,-.927184,-.544639],[.809017,-.406737,-.978148,.207912,-.913545,-.587785],[.777146,-.438371,-.97437,.224951,-.898794,-.62932],[.743145,-.469472,-.970296,.241922,-.882948,-.669131],[.707107,-.5,-.965926,.258819,-.866025,-.707107],[.669131,-.529919,-.961262,.275637,-.848048,-.743145],[.62932,-.559193,-.956305,.292372,-.829038,-.777146],[.587785,-.587785,-.951057,.309017,-.809017,-.809017],[.544639,-.615661,-.945519,.325568,-.788011,-.838671],[.5,-.642788,-.939693,.34202,-.766044,-.866025],[.45399,-.669131,-.93358,.358368,-.743145,-.891007],[.406737,-.694658,-.927184,.374607,-.71934,-.913545],[.358368,-.71934,-.920505,.390731,-.694658,-.93358],[.309017,-.743145,-.913545,.406737,-.669131,-.951057],[.258819,-.766044,-.906308,.422618,-.642788,-.965926],[.207912,-.788011,-.898794,.438371,-.615661,-.978148],[.156434,-.809017,-.891007,.45399,-.587785,-.987688],[.104528,-.829038,-.882948,.469472,-.559193,-.994522],[.052336,-.848048,-.87462,.48481,-.529919,-.99863],[0,-.866025,-.866025,.5,-.5,-1],[-.052336,-.882948,-.857167,.515038,-.469472,-.99863],[-.104528,-.898794,-.848048,.529919,-.438371,-.994522],[-.156434,-.913545,-.838671,.544639,-.406737,-.987688],[-.207912,-.927184,-.829038,.559193,-.374607,-.978148],[-.258819,-.939693,-.819152,.573576,-.34202,-.965926],[-.309017,-.951057,-.809017,.587785,-.309017,-.951057],[-.358368,-.961262,-.798636,.601815,-.275637,-.93358],[-.406737,-.970296,-.788011,.615661,-.241922,-.913545],[-.45399,-.978148,-.777146,.62932,-.207912,-.891007],[-.5,-.984808,-.766044,.642788,-.173648,-.866025],[-.544639,-.990268,-.75471,.656059,-.139173,-.838671],[-.587785,-.994522,-.743145,.669131,-.104528,-.809017],[-.62932,-.997564,-.731354,.681998,-.069756,-.777146],[-.669131,-.999391,-.71934,.694658,-.034899,-.743145],[-.707107,-1,-.707107,.707107,-0,-.707107],[-.743145,-.999391,-.694658,.71934,.034899,-.669131],[-.777146,-.997564,-.681998,.731354,.069756,-.62932],[-.809017,-.994522,-.669131,.743145,.104528,-.587785],[-.838671,-.990268,-.656059,.75471,.139173,-.544639],[-.866025,-.984808,-.642788,.766044,.173648,-.5],[-.891007,-.978148,-.62932,.777146,.207912,-.45399],[-.913545,-.970296,-.615661,.788011,.241922,-.406737],[-.93358,-.961262,-.601815,.798636,.275637,-.358368],[-.951057,-.951057,-.587785,.809017,.309017,-.309017],[-.965926,-.939693,-.573576,.819152,.34202,-.258819],[-.978148,-.927184,-.559193,.829038,.374607,-.207912],[-.987688,-.913545,-.544639,.838671,.406737,-.156434],[-.994522,-.898794,-.529919,.848048,.438371,-.104528],[-.99863,-.882948,-.515038,.857167,.469472,-.052336],[-1,-.866025,-.5,.866025,.5,-0],[-.99863,-.848048,-.48481,.87462,.529919,.052336],[-.994522,-.829038,-.469472,.882948,.559193,.104528],[-.987688,-.809017,-.45399,.891007,.587785,.156434],[-.978148,-.788011,-.438371,.898794,.615661,.207912],[-.965926,-.766044,-.422618,.906308,.642788,.258819],[-.951057,-.743145,-.406737,.913545,.669131,.309017],[-.93358,-.71934,-.390731,.920505,.694658,.358368],[-.913545,-.694658,-.374607,.927184,.71934,.406737],[-.891007,-.669131,-.358368,.93358,.743145,.45399],[-.866025,-.642788,-.34202,.939693,.766044,.5],[-.838671,-.615661,-.325568,.945519,.788011,.544639],[-.809017,-.587785,-.309017,.951057,.809017,.587785],[-.777146,-.559193,-.292372,.956305,.829038,.62932],[-.743145,-.529919,-.275637,.961262,.848048,.669131],[-.707107,-.5,-.258819,.965926,.866025,.707107],[-.669131,-.469472,-.241922,.970296,.882948,.743145],[-.62932,-.438371,-.224951,.97437,.898794,.777146],[-.587785,-.406737,-.207912,.978148,.913545,.809017],[-.544639,-.374607,-.190809,.981627,.927184,.838671],[-.5,-.34202,-.173648,.984808,.939693,.866025],[-.45399,-.309017,-.156434,.987688,.951057,.891007],[-.406737,-.275637,-.139173,.990268,.961262,.913545],[-.358368,-.241922,-.121869,.992546,.970296,.93358],[-.309017,-.207912,-.104528,.994522,.978148,.951057],[-.258819,-.173648,-.087156,.996195,.984808,.965926],[-.207912,-.139173,-.069756,.997564,.990268,.978148],[-.156434,-.104528,-.052336,.99863,.994522,.987688],[-.104528,-.069756,-.034899,.999391,.997564,.994522],[-.052336,-.034899,-.017452,.999848,.999391,.99863]],[[-1,-0,1,-0,0,-1,-0,0,-0],[-.999848,.017452,.999543,-.030224,264e-6,-.999086,.042733,-59e-5,4e-6],[-.999391,.034899,.998173,-.060411,.001055,-.996348,.085356,-.002357,34e-6],[-.99863,.052336,.995891,-.090524,.002372,-.991791,.127757,-.005297,113e-6],[-.997564,.069756,.992701,-.120527,.004214,-.985429,.169828,-.0094,268e-6],[-.996195,.087156,.988606,-.150384,.006578,-.977277,.21146,-.014654,523e-6],[-.994522,.104528,.983611,-.180057,.009462,-.967356,.252544,-.021043,903e-6],[-.992546,.121869,.977722,-.209511,.012862,-.955693,.292976,-.028547,.001431],[-.990268,.139173,.970946,-.238709,.016774,-.942316,.332649,-.037143,.002131],[-.987688,.156434,.963292,-.267617,.021193,-.927262,.371463,-.046806,.003026],[-.984808,.173648,.954769,-.296198,.026114,-.910569,.409317,-.057505,.00414],[-.981627,.190809,.945388,-.324419,.03153,-.892279,.446114,-.069209,.005492],[-.978148,.207912,.935159,-.352244,.037436,-.872441,.481759,-.08188,.007105],[-.97437,.224951,.924096,-.379641,.043823,-.851105,.516162,-.095481,.008999],[-.970296,.241922,.912211,-.406574,.050685,-.828326,.549233,-.109969,.011193],[-.965926,.258819,.899519,-.433013,.058013,-.804164,.580889,-.1253,.013707],[-.961262,.275637,.886036,-.458924,.065797,-.77868,.61105,-.141427,.016556],[-.956305,.292372,.871778,-.484275,.074029,-.75194,.639639,-.158301,.019758],[-.951057,.309017,.856763,-.509037,.082698,-.724012,.666583,-.175868,.023329],[-.945519,.325568,.841008,-.533178,.091794,-.694969,.691816,-.194075,.027281],[-.939693,.34202,.824533,-.55667,.101306,-.664885,.715274,-.212865,.03163],[-.93358,.358368,.807359,-.579484,.111222,-.633837,.736898,-.23218,.036385],[-.927184,.374607,.789505,-.601592,.121529,-.601904,.756637,-.25196,.041559],[-.920505,.390731,.770994,-.622967,.132217,-.569169,.774442,-.272143,.04716],[-.913545,.406737,.751848,-.643582,.143271,-.535715,.79027,-.292666,.053196],[-.906308,.422618,.732091,-.663414,.154678,-.501627,.804083,-.313464,.059674],[-.898794,.438371,.711746,-.682437,.166423,-.466993,.81585,-.334472,.066599],[-.891007,.45399,.690839,-.700629,.178494,-.431899,.825544,-.355623,.073974],[-.882948,.469472,.669395,-.717968,.190875,-.396436,.833145,-.376851,.081803],[-.87462,.48481,.647439,-.734431,.203551,-.360692,.838638,-.398086,.090085],[-.866025,.5,.625,-.75,.216506,-.32476,.842012,-.419263,.098821],[-.857167,.515038,.602104,-.764655,.229726,-.288728,.843265,-.440311,.108009],[-.848048,.529919,.578778,-.778378,.243192,-.252688,.842399,-.461164,.117644],[-.838671,.544639,.555052,-.791154,.256891,-.21673,.839422,-.481753,.127722],[-.829038,.559193,.530955,-.802965,.270803,-.180944,.834347,-.502011,.138237],[-.819152,.573576,.506515,-.813798,.284914,-.14542,.827194,-.521871,.149181],[-.809017,.587785,.481763,-.823639,.299204,-.110246,.817987,-.541266,.160545],[-.798636,.601815,.456728,-.832477,.313658,-.075508,.806757,-.560132,.172317],[-.788011,.615661,.431441,-.840301,.328257,-.041294,.793541,-.578405,.184487],[-.777146,.62932,.405934,-.847101,.342984,-.007686,.778379,-.596021,.19704],[-.766044,.642788,.380236,-.852869,.357821,.025233,.761319,-.612921,.209963],[-.75471,.656059,.35438,-.857597,.372749,.057383,.742412,-.629044,.223238],[-.743145,.669131,.328396,-.861281,.387751,.088686,.721714,-.644334,.23685],[-.731354,.681998,.302317,-.863916,.402807,.119068,.699288,-.658734,.250778],[-.71934,.694658,.276175,-.865498,.417901,.148454,.675199,-.67219,.265005],[-.707107,.707107,.25,-.866025,.433013,.176777,.649519,-.684653,.279508],[-.694658,.71934,.223825,-.865498,.448125,.203969,.622322,-.696073,.294267],[-.681998,.731354,.197683,-.863916,.463218,.229967,.593688,-.706405,.309259],[-.669131,.743145,.171604,-.861281,.478275,.254712,.5637,-.715605,.324459],[-.656059,.75471,.14562,-.857597,.493276,.278147,.532443,-.723633,.339844],[-.642788,.766044,.119764,-.852869,.508205,.300221,.500009,-.730451,.355387],[-.62932,.777146,.094066,-.847101,.523041,.320884,.46649,-.736025,.371063],[-.615661,.788011,.068559,-.840301,.537768,.340093,.431982,-.740324,.386845],[-.601815,.798636,.043272,-.832477,.552367,.357807,.396584,-.74332,.402704],[-.587785,.809017,.018237,-.823639,.566821,.373991,.360397,-.744989,.418613],[-.573576,.819152,-.006515,-.813798,.581112,.388612,.323524,-.745308,.434544],[-.559193,.829038,-.030955,-.802965,.595222,.401645,.286069,-.744262,.450467],[-.544639,.838671,-.055052,-.791154,.609135,.413066,.24814,-.741835,.466352],[-.529919,.848048,-.078778,-.778378,.622833,.422856,.209843,-.738017,.482171],[-.515038,.857167,-.102104,-.764655,.6363,.431004,.171288,-.732801,.497894],[-.5,.866025,-.125,-.75,.649519,.4375,.132583,-.726184,.51349],[-.48481,.87462,-.147439,-.734431,.662474,.44234,.093837,-.718167,.528929],[-.469472,.882948,-.169395,-.717968,.67515,.445524,.05516,-.708753,.544183],[-.45399,.891007,-.190839,-.700629,.687531,.447059,.016662,-.69795,.55922],[-.438371,.898794,-.211746,-.682437,.699602,.446953,-.02155,-.685769,.574011],[-.422618,.906308,-.232091,-.663414,.711348,.445222,-.059368,-.672226,.588528],[-.406737,.913545,-.251848,-.643582,.722755,.441884,-.096684,-.657339,.602741],[-.390731,.920505,-.270994,-.622967,.733809,.436964,-.133395,-.64113,.616621],[-.374607,.927184,-.289505,-.601592,.744496,.430488,-.169397,-.623624,.630141],[-.358368,.93358,-.307359,-.579484,.754804,.422491,-.204589,-.604851,.643273],[-.34202,.939693,-.324533,-.55667,.76472,.413008,-.238872,-.584843,.65599],[-.325568,.945519,-.341008,-.533178,.774231,.402081,-.27215,-.563635,.668267],[-.309017,.951057,-.356763,-.509037,.783327,.389754,-.304329,-.541266,.680078],[-.292372,.956305,-.371778,-.484275,.791997,.376077,-.335319,-.517778,.691399],[-.275637,.961262,-.386036,-.458924,.800228,.361102,-.365034,-.493216,.702207],[-.258819,.965926,-.399519,-.433013,.808013,.344885,-.393389,-.467627,.712478],[-.241922,.970296,-.412211,-.406574,.81534,.327486,-.420306,-.441061,.722191],[-.224951,.97437,-.424096,-.379641,.822202,.308969,-.445709,-.413572,.731327],[-.207912,.978148,-.435159,-.352244,.828589,.289399,-.469527,-.385215,.739866],[-.190809,.981627,-.445388,-.324419,.834495,.268846,-.491693,-.356047,.74779],[-.173648,.984808,-.454769,-.296198,.839912,.247382,-.512145,-.326129,.755082],[-.156434,.987688,-.463292,-.267617,.844832,.225081,-.530827,-.295521,.761728],[-.139173,.990268,-.470946,-.238709,.849251,.20202,-.547684,-.264287,.767712],[-.121869,.992546,-.477722,-.209511,.853163,.178279,-.562672,-.232494,.773023],[-.104528,.994522,-.483611,-.180057,.856563,.153937,-.575747,-.200207,.777648],[-.087156,.996195,-.488606,-.150384,.859447,.129078,-.586872,-.167494,.781579],[-.069756,.997564,-.492701,-.120527,.861811,.103786,-.596018,-.134426,.784806],[-.052336,.99863,-.495891,-.090524,.863653,.078146,-.603158,-.101071,.787324],[-.034899,.999391,-.498173,-.060411,.864971,.052243,-.608272,-.0675,.789126],[-.017452,.999848,-.499543,-.030224,.865762,.026165,-.611347,-.033786,.790208],[0,1,-.5,0,.866025,-0,-.612372,0,.790569],[.017452,.999848,-.499543,.030224,.865762,-.026165,-.611347,.033786,.790208],[.034899,.999391,-.498173,.060411,.864971,-.052243,-.608272,.0675,.789126],[.052336,.99863,-.495891,.090524,.863653,-.078146,-.603158,.101071,.787324],[.069756,.997564,-.492701,.120527,.861811,-.103786,-.596018,.134426,.784806],[.087156,.996195,-.488606,.150384,.859447,-.129078,-.586872,.167494,.781579],[.104528,.994522,-.483611,.180057,.856563,-.153937,-.575747,.200207,.777648],[.121869,.992546,-.477722,.209511,.853163,-.178279,-.562672,.232494,.773023],[.139173,.990268,-.470946,.238709,.849251,-.20202,-.547684,.264287,.767712],[.156434,.987688,-.463292,.267617,.844832,-.225081,-.530827,.295521,.761728],[.173648,.984808,-.454769,.296198,.839912,-.247382,-.512145,.326129,.755082],[.190809,.981627,-.445388,.324419,.834495,-.268846,-.491693,.356047,.74779],[.207912,.978148,-.435159,.352244,.828589,-.289399,-.469527,.385215,.739866],[.224951,.97437,-.424096,.379641,.822202,-.308969,-.445709,.413572,.731327],[.241922,.970296,-.412211,.406574,.81534,-.327486,-.420306,.441061,.722191],[.258819,.965926,-.399519,.433013,.808013,-.344885,-.393389,.467627,.712478],[.275637,.961262,-.386036,.458924,.800228,-.361102,-.365034,.493216,.702207],[.292372,.956305,-.371778,.484275,.791997,-.376077,-.335319,.517778,.691399],[.309017,.951057,-.356763,.509037,.783327,-.389754,-.304329,.541266,.680078],[.325568,.945519,-.341008,.533178,.774231,-.402081,-.27215,.563635,.668267],[.34202,.939693,-.324533,.55667,.76472,-.413008,-.238872,.584843,.65599],[.358368,.93358,-.307359,.579484,.754804,-.422491,-.204589,.604851,.643273],[.374607,.927184,-.289505,.601592,.744496,-.430488,-.169397,.623624,.630141],[.390731,.920505,-.270994,.622967,.733809,-.436964,-.133395,.64113,.616621],[.406737,.913545,-.251848,.643582,.722755,-.441884,-.096684,.657339,.602741],[.422618,.906308,-.232091,.663414,.711348,-.445222,-.059368,.672226,.588528],[.438371,.898794,-.211746,.682437,.699602,-.446953,-.02155,.685769,.574011],[.45399,.891007,-.190839,.700629,.687531,-.447059,.016662,.69795,.55922],[.469472,.882948,-.169395,.717968,.67515,-.445524,.05516,.708753,.544183],[.48481,.87462,-.147439,.734431,.662474,-.44234,.093837,.718167,.528929],[.5,.866025,-.125,.75,.649519,-.4375,.132583,.726184,.51349],[.515038,.857167,-.102104,.764655,.6363,-.431004,.171288,.732801,.497894],[.529919,.848048,-.078778,.778378,.622833,-.422856,.209843,.738017,.482171],[.544639,.838671,-.055052,.791154,.609135,-.413066,.24814,.741835,.466352],[.559193,.829038,-.030955,.802965,.595222,-.401645,.286069,.744262,.450467],[.573576,.819152,-.006515,.813798,.581112,-.388612,.323524,.745308,.434544],[.587785,.809017,.018237,.823639,.566821,-.373991,.360397,.744989,.418613],[.601815,.798636,.043272,.832477,.552367,-.357807,.396584,.74332,.402704],[.615661,.788011,.068559,.840301,.537768,-.340093,.431982,.740324,.386845],[.62932,.777146,.094066,.847101,.523041,-.320884,.46649,.736025,.371063],[.642788,.766044,.119764,.852869,.508205,-.300221,.500009,.730451,.355387],[.656059,.75471,.14562,.857597,.493276,-.278147,.532443,.723633,.339844],[.669131,.743145,.171604,.861281,.478275,-.254712,.5637,.715605,.324459],[.681998,.731354,.197683,.863916,.463218,-.229967,.593688,.706405,.309259],[.694658,.71934,.223825,.865498,.448125,-.203969,.622322,.696073,.294267],[.707107,.707107,.25,.866025,.433013,-.176777,.649519,.684653,.279508],[.71934,.694658,.276175,.865498,.417901,-.148454,.675199,.67219,.265005],[.731354,.681998,.302317,.863916,.402807,-.119068,.699288,.658734,.250778],[.743145,.669131,.328396,.861281,.387751,-.088686,.721714,.644334,.23685],[.75471,.656059,.35438,.857597,.372749,-.057383,.742412,.629044,.223238],[.766044,.642788,.380236,.852869,.357821,-.025233,.761319,.612921,.209963],[.777146,.62932,.405934,.847101,.342984,.007686,.778379,.596021,.19704],[.788011,.615661,.431441,.840301,.328257,.041294,.793541,.578405,.184487],[.798636,.601815,.456728,.832477,.313658,.075508,.806757,.560132,.172317],[.809017,.587785,.481763,.823639,.299204,.110246,.817987,.541266,.160545],[.819152,.573576,.506515,.813798,.284914,.14542,.827194,.521871,.149181],[.829038,.559193,.530955,.802965,.270803,.180944,.834347,.502011,.138237],[.838671,.544639,.555052,.791154,.256891,.21673,.839422,.481753,.127722],[.848048,.529919,.578778,.778378,.243192,.252688,.842399,.461164,.117644],[.857167,.515038,.602104,.764655,.229726,.288728,.843265,.440311,.108009],[.866025,.5,.625,.75,.216506,.32476,.842012,.419263,.098821],[.87462,.48481,.647439,.734431,.203551,.360692,.838638,.398086,.090085],[.882948,.469472,.669395,.717968,.190875,.396436,.833145,.376851,.081803],[.891007,.45399,.690839,.700629,.178494,.431899,.825544,.355623,.073974],[.898794,.438371,.711746,.682437,.166423,.466993,.81585,.334472,.066599],[.906308,.422618,.732091,.663414,.154678,.501627,.804083,.313464,.059674],[.913545,.406737,.751848,.643582,.143271,.535715,.79027,.292666,.053196],[.920505,.390731,.770994,.622967,.132217,.569169,.774442,.272143,.04716],[.927184,.374607,.789505,.601592,.121529,.601904,.756637,.25196,.041559],[.93358,.358368,.807359,.579484,.111222,.633837,.736898,.23218,.036385],[.939693,.34202,.824533,.55667,.101306,.664885,.715274,.212865,.03163],[.945519,.325568,.841008,.533178,.091794,.694969,.691816,.194075,.027281],[.951057,.309017,.856763,.509037,.082698,.724012,.666583,.175868,.023329],[.956305,.292372,.871778,.484275,.074029,.75194,.639639,.158301,.019758],[.961262,.275637,.886036,.458924,.065797,.77868,.61105,.141427,.016556],[.965926,.258819,.899519,.433013,.058013,.804164,.580889,.1253,.013707],[.970296,.241922,.912211,.406574,.050685,.828326,.549233,.109969,.011193],[.97437,.224951,.924096,.379641,.043823,.851105,.516162,.095481,.008999],[.978148,.207912,.935159,.352244,.037436,.872441,.481759,.08188,.007105],[.981627,.190809,.945388,.324419,.03153,.892279,.446114,.069209,.005492],[.984808,.173648,.954769,.296198,.026114,.910569,.409317,.057505,.00414],[.987688,.156434,.963292,.267617,.021193,.927262,.371463,.046806,.003026],[.990268,.139173,.970946,.238709,.016774,.942316,.332649,.037143,.002131],[.992546,.121869,.977722,.209511,.012862,.955693,.292976,.028547,.001431],[.994522,.104528,.983611,.180057,.009462,.967356,.252544,.021043,903e-6],[.996195,.087156,.988606,.150384,.006578,.977277,.21146,.014654,523e-6],[.997564,.069756,.992701,.120527,.004214,.985429,.169828,.0094,268e-6],[.99863,.052336,.995891,.090524,.002372,.991791,.127757,.005297,113e-6],[.999391,.034899,.998173,.060411,.001055,.996348,.085356,.002357,34e-6],[.999848,.017452,.999543,.030224,264e-6,.999086,.042733,59e-5,4e-6],[1,-0,1,-0,0,1,-0,0,-0]]],t.SPHERICAL_HARMONICS_AZIMUTH_RESOLUTION=t.SPHERICAL_HARMONICS[0].length,t.SPHERICAL_HARMONICS_ELEVATION_RESOLUTION=t.SPHERICAL_HARMONICS[1].length,t.SPHERICAL_HARMONICS_MAX_ORDER=t.SPHERICAL_HARMONICS[0][0].length/2,t.MAX_RE_WEIGHTS=[[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[1.003236,1.002156,.999152,.990038],[1.03237,1.021194,.990433,.898572],[1.062694,1.040231,.979161,.799806],[1.093999,1.058954,.964976,.693603],[1.126003,1.077006,.947526,.57989],[1.158345,1.093982,.926474,.45869],[1.19059,1.109437,.901512,.330158],[1.222228,1.12289,.87237,.194621],[1.252684,1.133837,.838839,.052614],[1.281987,1.142358,.801199,0],[1.312073,1.150207,.760839,0],[1.343011,1.157424,.717799,0],[1.374649,1.163859,.671999,0],[1.406809,1.169354,.623371,0],[1.439286,1.173739,.571868,0],[1.471846,1.176837,.517465,0],[1.504226,1.178465,.460174,0],[1.536133,1.178438,.400043,0],[1.567253,1.176573,.337165,0],[1.597247,1.172695,.271688,0],[1.625766,1.166645,.203815,0],[1.652455,1.158285,.133806,0],[1.676966,1.147506,.061983,0],[1.699006,1.134261,0,0],[1.720224,1.119789,0,0],[1.741631,1.10481,0,0],[1.763183,1.08933,0,0],[1.784837,1.073356,0,0],[1.806548,1.056898,0,0],[1.828269,1.039968,0,0],[1.849952,1.02258,0,0],[1.871552,1.004752,0,0],[1.893018,.986504,0,0],[1.914305,.967857,0,0],[1.935366,.948837,0,0],[1.956154,.929471,0,0],[1.976625,.90979,0,0],[1.996736,.889823,0,0],[2.016448,.869607,0,0],[2.035721,.849175,0,0],[2.054522,.828565,0,0],[2.072818,.807816,0,0],[2.090581,.786964,0,0],[2.107785,.766051,0,0],[2.124411,.745115,0,0],[2.140439,.724196,0,0],[2.155856,.703332,0,0],[2.170653,.682561,0,0],[2.184823,.661921,0,0],[2.198364,.641445,0,0],[2.211275,.621169,0,0],[2.223562,.601125,0,0],[2.23523,.581341,0,0],[2.246289,.561847,0,0],[2.256751,.542667,0,0],[2.266631,.523826,0,0],[2.275943,.505344,0,0],[2.284707,.487239,0,0],[2.292939,.469528,0,0],[2.300661,.452225,0,0],[2.307892,.435342,0,0],[2.314654,.418888,0,0],[2.320969,.40287,0,0],[2.326858,.387294,0,0],[2.332343,.372164,0,0],[2.337445,.357481,0,0],[2.342186,.343246,0,0],[2.346585,.329458,0,0],[2.350664,.316113,0,0],[2.354442,.303208,0,0],[2.357937,.290738,0,0],[2.361168,.278698,0,0],[2.364152,.26708,0,0],[2.366906,.255878,0,0],[2.369446,.245082,0,0],[2.371786,.234685,0,0],[2.37394,.224677,0,0],[2.375923,.215048,0,0],[2.377745,.20579,0,0],[2.379421,.196891,0,0],[2.380959,.188342,0,0],[2.382372,.180132,0,0],[2.383667,.172251,0,0],[2.384856,.164689,0,0],[2.385945,.157435,0,0],[2.386943,.150479,0,0],[2.387857,.143811,0,0],[2.388694,.137421,0,0],[2.38946,.131299,0,0],[2.39016,.125435,0,0],[2.390801,.11982,0,0],[2.391386,.114445,0,0],[2.391921,.1093,0,0],[2.39241,.104376,0,0],[2.392857,.099666,0,0],[2.393265,.09516,0,0],[2.393637,.090851,0,0],[2.393977,.086731,0,0],[2.394288,.082791,0,0],[2.394571,.079025,0,0],[2.394829,.075426,0,0],[2.395064,.071986,0,0],[2.395279,.068699,0,0],[2.395475,.065558,0,0],[2.395653,.062558,0,0],[2.395816,.059693,0,0],[2.395964,.056955,0,0],[2.396099,.054341,0,0],[2.396222,.051845,0,0],[2.396334,.049462,0,0],[2.396436,.047186,0,0],[2.396529,.045013,0,0],[2.396613,.042939,0,0],[2.396691,.040959,0,0],[2.396761,.039069,0,0],[2.396825,.037266,0,0],[2.396883,.035544,0,0],[2.396936,.033901,0,0],[2.396984,.032334,0,0],[2.397028,.030838,0,0],[2.397068,.02941,0,0],[2.397104,.028048,0,0],[2.397137,.026749,0,0],[2.397167,.025509,0,0],[2.397194,.024326,0,0],[2.397219,.023198,0,0],[2.397242,.022122,0,0],[2.397262,.021095,0,0],[2.397281,.020116,0,0],[2.397298,.019181,0,0],[2.397314,.01829,0,0],[2.397328,.017441,0,0],[2.397341,.01663,0,0],[2.397352,.015857,0,0],[2.397363,.015119,0,0],[2.397372,.014416,0,0],[2.397381,.013745,0,0],[2.397389,.013106,0,0],[2.397396,.012496,0,0],[2.397403,.011914,0,0],[2.397409,.01136,0,0],[2.397414,.010831,0,0],[2.397419,.010326,0,0],[2.397424,.009845,0,0],[2.397428,.009387,0,0],[2.397432,.008949,0,0],[2.397435,.008532,0,0],[2.397438,.008135,0,0],[2.397441,.007755,0,0],[2.397443,.007394,0,0],[2.397446,.007049,0,0],[2.397448,.006721,0,0],[2.39745,.006407,0,0],[2.397451,.006108,0,0],[2.397453,.005824,0,0],[2.397454,.005552,0,0],[2.397456,.005293,0,0],[2.397457,.005046,0,0],[2.397458,.004811,0,0],[2.397459,.004586,0,0],[2.39746,.004372,0,0],[2.397461,.004168,0,0],[2.397461,.003974,0,0],[2.397462,.003788,0,0],[2.397463,.003611,0,0],[2.397463,.003443,0,0],[2.397464,.003282,0,0],[2.397464,.003129,0,0],[2.397465,.002983,0,0],[2.397465,.002844,0,0],[2.397465,.002711,0,0],[2.397466,.002584,0,0],[2.397466,.002464,0,0],[2.397466,.002349,0,0],[2.397466,.002239,0,0],[2.397467,.002135,0,0],[2.397467,.002035,0,0],[2.397467,.00194,0,0],[2.397467,.001849,0,0],[2.397467,.001763,0,0],[2.397467,.001681,0,0],[2.397468,.001602,0,0],[2.397468,.001527,0,0],[2.397468,.001456,0,0],[2.397468,.001388,0,0],[2.397468,.001323,0,0],[2.397468,.001261,0,0],[2.397468,.001202,0,0],[2.397468,.001146,0,0],[2.397468,.001093,0,0],[2.397468,.001042,0,0],[2.397468,993e-6,0,0],[2.397468,947e-6,0,0],[2.397468,902e-6,0,0],[2.397468,86e-5,0,0],[2.397468,82e-5,0,0],[2.397469,782e-6,0,0],[2.397469,745e-6,0,0],[2.397469,71e-5,0,0],[2.397469,677e-6,0,0],[2.397469,646e-6,0,0],[2.397469,616e-6,0,0],[2.397469,587e-6,0,0],[2.397469,559e-6,0,0],[2.397469,533e-6,0,0],[2.397469,508e-6,0,0],[2.397469,485e-6,0,0],[2.397469,462e-6,0,0],[2.397469,44e-5,0,0],[2.397469,42e-5,0,0],[2.397469,4e-4,0,0],[2.397469,381e-6,0,0],[2.397469,364e-6,0,0],[2.397469,347e-6,0,0],[2.397469,33e-5,0,0],[2.397469,315e-6,0,0],[2.397469,3e-4,0,0],[2.397469,286e-6,0,0],[2.397469,273e-6,0,0],[2.397469,26e-5,0,0],[2.397469,248e-6,0,0],[2.397469,236e-6,0,0],[2.397469,225e-6,0,0],[2.397469,215e-6,0,0],[2.397469,205e-6,0,0],[2.397469,195e-6,0,0],[2.397469,186e-6,0,0],[2.397469,177e-6,0,0],[2.397469,169e-6,0,0],[2.397469,161e-6,0,0],[2.397469,154e-6,0,0],[2.397469,147e-6,0,0],[2.397469,14e-5,0,0],[2.397469,133e-6,0,0],[2.397469,127e-6,0,0],[2.397469,121e-6,0,0],[2.397469,115e-6,0,0],[2.397469,11e-5,0,0],[2.397469,105e-6,0,0],[2.397469,1e-4,0,0],[2.397469,95e-6,0,0],[2.397469,91e-6,0,0],[2.397469,87e-6,0,0],[2.397469,83e-6,0,0],[2.397469,79e-6,0,0],[2.397469,75e-6,0,0],[2.397469,71e-6,0,0],[2.397469,68e-6,0,0],[2.397469,65e-6,0,0],[2.397469,62e-6,0,0],[2.397469,59e-6,0,0],[2.397469,56e-6,0,0],[2.397469,54e-6,0,0],[2.397469,51e-6,0,0],[2.397469,49e-6,0,0],[2.397469,46e-6,0,0],[2.397469,44e-6,0,0],[2.397469,42e-6,0,0],[2.397469,4e-5,0,0],[2.397469,38e-6,0,0],[2.397469,37e-6,0,0],[2.397469,35e-6,0,0],[2.397469,33e-6,0,0],[2.397469,32e-6,0,0],[2.397469,3e-5,0,0],[2.397469,29e-6,0,0],[2.397469,27e-6,0,0],[2.397469,26e-6,0,0],[2.397469,25e-6,0,0],[2.397469,24e-6,0,0],[2.397469,23e-6,0,0],[2.397469,22e-6,0,0],[2.397469,21e-6,0,0],[2.397469,2e-5,0,0],[2.397469,19e-6,0,0],[2.397469,18e-6,0,0],[2.397469,17e-6,0,0],[2.397469,16e-6,0,0],[2.397469,15e-6,0,0],[2.397469,15e-6,0,0],[2.397469,14e-6,0,0],[2.397469,13e-6,0,0],[2.397469,13e-6,0,0],[2.397469,12e-6,0,0],[2.397469,12e-6,0,0],[2.397469,11e-6,0,0],[2.397469,11e-6,0,0],[2.397469,1e-5,0,0],[2.397469,1e-5,0,0],[2.397469,9e-6,0,0],[2.397469,9e-6,0,0],[2.397469,8e-6,0,0],[2.397469,8e-6,0,0],[2.397469,8e-6,0,0],[2.397469,7e-6,0,0],[2.397469,7e-6,0,0],[2.397469,7e-6,0,0],[2.397469,6e-6,0,0],[2.397469,6e-6,0,0],[2.397469,6e-6,0,0],[2.397469,5e-6,0,0],[2.397469,5e-6,0,0],[2.397469,5e-6,0,0],[2.397469,5e-6,0,0],[2.397469,4e-6,0,0],[2.397469,4e-6,0,0],[2.397469,4e-6,0,0],[2.397469,4e-6,0,0],[2.397469,4e-6,0,0],[2.397469,4e-6,0,0],[2.397469,3e-6,0,0],[2.397469,3e-6,0,0],[2.397469,3e-6,0,0],[2.397469,3e-6,0,0],[2.397469,3e-6,0,0],[2.397469,3e-6,0,0],[2.397469,3e-6,0,0],[2.397469,2e-6,0,0],[2.397469,2e-6,0,0],[2.397469,2e-6,0,0],[2.397469,2e-6,0,0],[2.397469,2e-6,0,0],[2.397469,2e-6,0,0],[2.397469,2e-6,0,0],[2.397469,2e-6,0,0],[2.397469,2e-6,0,0],[2.397469,2e-6,0,0],[2.397469,1e-6,0,0],[2.397469,1e-6,0,0],[2.397469,1e-6,0,0]],t.MAX_RE_WEIGHTS_RESOLUTION=t.MAX_RE_WEIGHTS.length},function(A,t,e){"use strict";function i(A,t){void 0==t&&(t={}),void 0==t.position&&(t.position=a.DEFAULT_POSITION.slice()),void 0==t.forward&&(t.forward=a.DEFAULT_FORWARD.slice()),void 0==t.up&&(t.up=a.DEFAULT_UP.slice()),void 0==t.minDistance&&(t.minDistance=a.DEFAULT_MIN_DISTANCE),void 0==t.maxDistance&&(t.maxDistance=a.DEFAULT_MAX_DISTANCE),void 0==t.rolloff&&(t.rolloff=a.DEFAULT_ROLLOFF),void 0==t.gain&&(t.gain=a.DEFAULT_SOURCE_GAIN),void 0==t.alpha&&(t.alpha=a.DEFAULT_DIRECTIVITY_ALPHA),void 0==t.sharpness&&(t.sharpness=a.DEFAULT_DIRECTIVITY_SHARPNESS),void 0==t.sourceWidth&&(t.sourceWidth=a.DEFAULT_SOURCE_WIDTH),this._scene=A,this._position=t.position,this._forward=t.forward,this._up=t.up,this._dx=new Float32Array(3),this._right=a.crossProduct(this._forward,this._up);let e=A._context;this.input=e.createGain(),this._directivity=new s(e,{alpha:t.alpha,sharpness:t.sharpness}),this._toEarly=e.createGain(),this._toLate=e.createGain(),this._attenuation=new o(e,{minDistance:t.minDistance,maxDistance:t.maxDistance,rolloff:t.rolloff}),this._encoder=new r(e,{ambisonicOrder:A._ambisonicOrder,sourceWidth:t.sourceWidth}),this.input.connect(this._toLate),this._toLate.connect(A._room.late.input),this.input.connect(this._attenuation.input),this._attenuation.output.connect(this._toEarly),this._toEarly.connect(A._room.early.input),this._attenuation.output.connect(this._directivity.input),this._directivity.output.connect(this._encoder.input),this._encoder.output.connect(A._listener.input),this.setPosition(t.position[0],t.position[1],t.position[2]),this.input.gain.value=t.gain}function n(A){let t=1;return A>a.EPSILON_FLOAT&&(t=1-A/a.SOURCE_MAX_OUTSIDE_ROOM_DISTANCE,t=Math.max(0,Math.min(1,t))),t}/** + * @license + * Copyright 2017 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const s=e(5),o=e(6),r=e(1),a=e(0);i.prototype.setPosition=function(A,t,e){this._position[0]=A,this._position[1]=t,this._position[2]=e;let i=n(this._scene._room.getDistanceOutsideRoom(this._position[0],this._position[1],this._position[2]));this._toLate.gain.value=i,this._toEarly.gain.value=i,this._update()},i.prototype._update=function(){for(let i=0;i<3;i++)this._dx[i]=this._position[i]-this._scene._listener.position[i];let A=Math.sqrt(this._dx[0]*this._dx[0]+this._dx[1]*this._dx[1]+this._dx[2]*this._dx[2]);A>0&&(this._dx[0]/=A,this._dx[1]/=A,this._dx[2]/=A);let t=Math.atan2(-this._dx[0],this._dx[2])*a.RADIANS_TO_DEGREES,e=Math.atan2(this._dx[1],Math.sqrt(this._dx[0]*this._dx[0]+this._dx[2]*this._dx[2]))*a.RADIANS_TO_DEGREES;this._attenuation.setDistance(A),this._directivity.computeAngle(this._forward,this._dx),this._encoder.setDirection(t,e)},i.prototype.setRolloff=function(A){this._attenuation.setRolloff(A)},i.prototype.setMinDistance=function(A){this._attenuation.minDistance=A},i.prototype.setMaxDistance=function(A){this._attenuation.maxDistance=A},i.prototype.setGain=function(A){this.input.gain.value=A},i.prototype.setOrientation=function(A,t,e,i,n,s){this._forward[0]=A,this._forward[1]=t,this._forward[2]=e,this._up[0]=i,this._up[1]=n,this._up[2]=s,this._right=a.crossProduct(this._forward,this._up)},i.prototype.setFromMatrix=function(A){this._right[0]=A.elements[0],this._right[1]=A.elements[1],this._right[2]=A.elements[2],this._up[0]=A.elements[4],this._up[1]=A.elements[5],this._up[2]=A.elements[6],this._forward[0]=A.elements[8],this._forward[1]=A.elements[9],this._forward[2]=A.elements[10],this._right=a.normalizeVector(this._right),this._up=a.normalizeVector(this._up),this._forward=a.normalizeVector(this._forward),this.setPosition(A.elements[12],A.elements[13],A.elements[14])},i.prototype.setSourceWidth=function(A){this._encoder.setSourceWidth(A),this.setPosition(this._position[0],this._position[1],this._position[2])},i.prototype.setDirectivityPattern=function(A,t){this._directivity.setPattern(A,t),this.setPosition(this._position[0],this._position[1],this._position[2])},A.exports=i},function(A,t,e){"use strict";function i(A,t){void 0==t&&(t={}),void 0==t.alpha&&(t.alpha=n.DEFAULT_DIRECTIVITY_ALPHA),void 0==t.sharpness&&(t.sharpness=n.DEFAULT_DIRECTIVITY_SHARPNESS),this._context=A,this._lowpass=A.createBiquadFilter(),this._lowpass.type="lowpass",this._lowpass.Q.value=0,this._lowpass.frequency.value=.5*A.sampleRate,this._cosTheta=0,this.setPattern(t.alpha,t.sharpness),this.input=this._lowpass,this.output=this._lowpass}/** + * @license + * Copyright 2017 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const n=e(0);i.prototype.computeAngle=function(A,t){let e=n.normalizeVector(A),i=n.normalizeVector(t),s=1;if(this._alpha>n.EPSILON_FLOAT){let A=e[0]*i[0]+e[1]*i[1]+e[2]*i[2];s=1-this._alpha+this._alpha*A,s=Math.pow(Math.abs(s),this._sharpness)}this._lowpass.frequency.value=.5*this._context.sampleRate*s},i.prototype.setPattern=function(A,t){this._alpha=Math.min(1,Math.max(0,A)),this._sharpness=Math.max(1,t),this.computeAngle([this._cosTheta*this._cosTheta,0,0],[1,0,0])},A.exports=i},function(A,t,e){"use strict";function i(A,t){void 0==t&&(t={}),void 0==t.minDistance&&(t.minDistance=n.DEFAULT_MIN_DISTANCE),void 0==t.maxDistance&&(t.maxDistance=n.DEFAULT_MAX_DISTANCE),void 0==t.rolloff&&(t.rolloff=n.DEFAULT_ATTENUATION_ROLLOFF),this.minDistance=t.minDistance,this.maxDistance=t.maxDistance,this.setRolloff(t.rolloff),this._gainNode=A.createGain(),this.setDistance(t.maxDistance),this.input=this._gainNode,this.output=this._gainNode}/** + * @license + * Copyright 2017 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const n=e(0);i.prototype.setDistance=function(A){let t=1;if("logarithmic"==this._rolloff){if(A>this.maxDistance)t=0;else if(A>this.minDistance){let e=this.maxDistance-this.minDistance;if(e>n.EPSILON_FLOAT){let i=1/(e+1);t=(1/(A-this.minDistance+1)-i)/(1-i)}}}else if("linear"==this._rolloff)if(A>this.maxDistance)t=0;else if(A>this.minDistance){let e=this.maxDistance-this.minDistance;e>n.EPSILON_FLOAT&&(t=(this.maxDistance-A)/e)}this._gainNode.gain.value=t},i.prototype.setRolloff=function(A){let t=~n.ATTENUATION_ROLLOFFS.indexOf(A);void 0!=A&&t?A=A.toString().toLowerCase():(t||n.log('Invalid rolloff model ("'+A+'"). Using default: "'+n.DEFAULT_ATTENUATION_ROLLOFF+'".'),A=n.DEFAULT_ATTENUATION_ROLLOFF),this._rolloff=A},A.exports=i},function(A,t,e){"use strict";function i(A){let t={};for(let e in _.DEFAULT_ROOM_MATERIALS)_.DEFAULT_ROOM_MATERIALS.hasOwnProperty(e)&&(t[e]=_.ROOM_MATERIAL_COEFFICIENTS[_.DEFAULT_ROOM_MATERIALS[e]]);void 0==A&&(A={},Object.assign(A,_.DEFAULT_ROOM_MATERIALS));for(let e in _.DEFAULT_ROOM_MATERIALS)_.DEFAULT_ROOM_MATERIALS.hasOwnProperty(e)&&A.hasOwnProperty(e)?A[e]in _.ROOM_MATERIAL_COEFFICIENTS?t[e]=_.ROOM_MATERIAL_COEFFICIENTS[A[e]]:_.log('Material "'+A[e]+'" on wall "'+e+'" not found. Using "'+_.DEFAULT_ROOM_MATERIALS[e]+'".'):_.log('Wall "'+e+'" is not defined. Default used.');return t}function n(A){void 0==A&&(A={});for(let t in _.DEFAULT_ROOM_MATERIALS)A.hasOwnProperty(t)||(A[t]=_.ROOM_MATERIAL_COEFFICIENTS[_.DEFAULT_ROOM_MATERIALS[t]]);return A}function s(A){void 0==A&&(A={});for(let t in _.DEFAULT_ROOM_DIMENSIONS)A.hasOwnProperty(t)||(A[t]=_.DEFAULT_ROOM_DIMENSIONS[t]);return A}function o(A,t,e){let i=new Float32Array(_.NUMBER_REVERB_FREQUENCY_BANDS);A=s(A),t=n(t),void 0==e&&(e=_.DEFAULT_SPEED_OF_SOUND);let o=_.TWENTY_FOUR_LOG10/e,r=A.width*A.height*A.depth;if(r<_.ROOM_MIN_VOLUME)return i;let a=A.width*A.height,h=A.width*A.depth,c=A.depth*A.height,f=2*(a+h+c);for(let n=0;n<_.NUMBER_REVERB_FREQUENCY_BANDS;n++){let A=((t.left[n]+t.right[n])*a+(t.down[n]+t.up[n])*h+(t.front[n]+t.back[n])*c)/f;i[n]=_.ROOM_EYRING_CORRECTION_COEFFICIENT*o*r/(-f*Math.log(1-A)+4*_.ROOM_AIR_ABSORPTION_COEFFICIENTS[n]*r)}return i}function r(A){let t=[];for(let e in _.DEFAULT_REFLECTION_COEFFICIENTS)if(_.DEFAULT_REFLECTION_COEFFICIENTS.hasOwnProperty(e)){t[e]=0;for(let i=0;i<_.NUMBER_REFLECTION_AVERAGING_BANDS;i++){let n=i+_.ROOM_STARTING_AVERAGING_BAND;t[e]+=A[e][n]}t[e]/=_.NUMBER_REFLECTION_AVERAGING_BANDS,t[e]=Math.sqrt(1-t[e])}return t}function a(A,t){void 0==t&&(t={}),void 0==t.listenerPosition&&(t.listenerPosition=_.DEFAULT_POSITION.slice()),void 0==t.dimensions&&(t.dimensions={},Object.assign(t.dimensions,_.DEFAULT_ROOM_DIMENSIONS)),void 0==t.materials&&(t.materials={},Object.assign(t.materials,_.DEFAULT_ROOM_MATERIALS)),void 0==t.speedOfSound&&(t.speedOfSound=_.DEFAULT_SPEED_OF_SOUND),t.dimensions=s(t.dimensions);let e=i(t.materials),n=r(e),a=o(t.dimensions,e,t.speedOfSound);this.early=new c(A,{dimensions:t.dimensions,coefficients:n,speedOfSound:t.speedOfSound,listenerPosition:t.listenerPosition}),this.late=new h(A,{durations:a}),this.speedOfSound=t.speedOfSound,this.output=A.createGain(),this.early.output.connect(this.output),this._merger=A.createChannelMerger(4),this.late.output.connect(this._merger,0,0),this._merger.connect(this.output)}/** + * @license + * Copyright 2017 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const h=e(8),c=e(9),_=e(0);a.prototype.setProperties=function(A,t){let e=i(t),n=o(A,e,this.speedOfSound);this.late.setDurations(n),this.early.speedOfSound=this.speedOfSound;let s=r(e);this.early.setRoomProperties(A,s)},a.prototype.setListenerPosition=function(A,t,e){this.early.speedOfSound=this.speedOfSound,this.early.setListenerPosition(A,t,e);let i=this.getDistanceOutsideRoom(A,t,e),n=1;i>_.EPSILON_FLOAT&&(n=1-i/_.LISTENER_MAX_OUTSIDE_ROOM_DISTANCE,n=Math.max(0,Math.min(1,n))),this.output.gain.value=n},a.prototype.getDistanceOutsideRoom=function(A,t,e){let i=Math.max(0,-this.early._halfDimensions.width-A,A-this.early._halfDimensions.width),n=Math.max(0,-this.early._halfDimensions.height-t,t-this.early._halfDimensions.height),s=Math.max(0,-this.early._halfDimensions.depth-e,e-this.early._halfDimensions.depth);return Math.sqrt(i*i+n*n+s*s)},A.exports=a},function(A,t,e){"use strict";function i(A,t){void 0==t&&(t={}),void 0==t.durations&&(t.durations=n.DEFAULT_REVERB_DURATIONS.slice()),void 0==t.predelay&&(t.predelay=n.DEFAULT_REVERB_PREDELAY),void 0==t.gain&&(t.gain=n.DEFAULT_REVERB_GAIN),void 0==t.bandwidth&&(t.bandwidth=n.DEFAULT_REVERB_BANDWIDTH),void 0==t.tailonset&&(t.tailonset=n.DEFAULT_REVERB_TAIL_ONSET);let e=t.predelay/1e3;this._bandwidthCoeff=t.bandwidth*n.LOG2_DIV2,this._tailonsetSamples=t.tailonset/1e3,this._context=A,this.input=A.createGain(),this._predelay=A.createDelay(e),this._convolver=A.createConvolver(),this.output=A.createGain(),this.output.gain.value=t.gain,this._convolver.normalize=!1,this.input.connect(this._predelay),this._predelay.connect(this._convolver),this._convolver.connect(this.output),this.setDurations(t.durations)}/** + * @license + * Copyright 2017 Google Inc. All Rights Reserved. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +const n=e(0);i.prototype.setDurations=function(A){if(A.length!==n.NUMBER_REVERB_FREQUENCY_BANDS)return void n.log("Warning: invalid number of RT60 values provided to reverb.");let t=new Float32Array(n.NUMBER_REVERB_FREQUENCY_BANDS),e=this._context.sampleRate;for(let h=0;hi&&(i=t[n]);i<1&&(i=1);let s=this._context.createBuffer(1,i,e),o=s.getChannelData(0),r=new Float32Array(i);for(let n=0;n32&&t.throw("Utils.mergeBuffer: Number of channels cannot exceed 32.(got "+s+")"),i!==e[a].length&&t.throw("Utils.mergeBuffer: AudioBuffer lengths are inconsistent. (expected "+i+" but got "+e[a].length+")"),n!==e[a].sampleRate&&t.throw("Utils.mergeBuffer: AudioBuffer sample rates are inconsistent. (expected "+n+" but got "+e[a].sampleRate+")"),s+=e[a].numberOfChannels;const o=A.createBuffer(s,i,n);let r=0;for(let t=0;te[i]=t.charCodeAt(i)),e.buffer}},function(A,t,e){"use strict";function i(A,t,e){this._context=n.isAudioContext(A)?A:n.throw("BufferList: Invalid BaseAudioContext."),this._options={dataType:s.BASE64,verbose:!1},e&&(e.dataType&&n.isDefinedENUMEntry(s,e.dataType)&&(this._options.dataType=e.dataType),e.verbose&&(this._options.verbose=Boolean(e.verbose))),this._bufferList=[],this._bufferData=this._options.dataType===s.BASE64?t:t.slice(0),this._numberOfTasks=this._bufferData.length,this._resolveHandler=null,this._rejectHandler=new Function}const n=e(0),s={BASE64:"base64",URL:"url"};i.prototype.load=function(){return new Promise(this._promiseGenerator.bind(this))},i.prototype._promiseGenerator=function(A,t){"function"!=typeof A?n.throw("BufferList: Invalid Promise resolver."):this._resolveHandler=A,"function"==typeof t&&(this._rejectHandler=t);for(let e=0;e=0?this._stereoSplitters[i].connect(this._positiveIndexSphericalHarmonics,e%2):this._stereoSplitters[i].connect(this._negativeIndexSphericalHarmonics,e%2)}this._positiveIndexSphericalHarmonics.connect(this._binauralMerger,0,0),this._positiveIndexSphericalHarmonics.connect(this._binauralMerger,0,1),this._negativeIndexSphericalHarmonics.connect(this._binauralMerger,0,0),this._negativeIndexSphericalHarmonics.connect(this._inverter),this._inverter.connect(this._binauralMerger,0,1),this._inverter.gain.value=-1,this.input=this._inputSplitter,this.output=this._outputGain},i.prototype.setHRIRBufferList=function(A){if(!this._isBufferLoaded){for(let t=0;t0){const s=i(t,1);return o(A,1,t-1,e,n)*Math.sqrt(1+s)-o(A,-1,1-t,e,n)*(1-s)}{const s=i(t,-1);return o(A,1,t+1,e,n)*(1-s)+o(A,-1,-t-1,e,n)*Math.sqrt(1+s)}}function h(A,t,e,i){return 0===t?0:t>0?o(A,1,t+1,e,i)+o(A,-1,-t-1,e,i):o(A,1,t-1,e,i)-o(A,-1,1-t,e,i)}function c(A,t,e){const n=i(A,0),s=Math.abs(t)===e?1/(2*e*(2*e-1)):1/((e+t)*(e-t));return[Math.sqrt((e+A)*(e-A)*s),.5*(1-2*n)*Math.sqrt((1+n)*(e+Math.abs(A)-1)*(e+Math.abs(A))*s),-.5*(1-n)*Math.sqrt((e-Math.abs(A)-1)*(e-Math.abs(A)))*s]}function _(A,t){for(let e=-t;e<=t;e++)for(let i=-t;i<=t;i++){const s=c(e,i,t);Math.abs(s[0])>0&&(s[0]*=r(A,e,i,t)),Math.abs(s[1])>0&&(s[1]*=a(A,e,i,t)),Math.abs(s[2])>0&&(s[2]*=h(A,e,i,t)),n(A,t,e,i,s[0]+s[1]+s[2])}}function f(A){for(let t=2;t<=A.length;t++)_(A,t)}function l(A,t){this._context=A,this._ambisonicOrder=t;const e=(t+1)*(t+1);this._splitter=this._context.createChannelSplitter(e),this._merger=this._context.createChannelMerger(e),this._gainNodeMatrix=[];let i,n,s,o,r;for(let a=1;a<=t;a++){i=a*a,n=2*a+1,this._gainNodeMatrix[a-1]=[];for(let A=0;A ["+A+"])"),this._audioElementSource=this._context.createMediaElementSource(this._videoElement),this._foaRouter=new s(this._context,this._channelMap),this._foaRotator=new o(this._context),this._foaPhaseMatchedFilter=new r(this._context),this._audioElementSource.connect(this._foaRouter.input),this._foaRouter.output.connect(this._foaRotator.input),this._foaRotator.output.connect(this._foaPhaseMatchedFilter.input),this._foaVirtualSpeakers=[],this._bypass=this._context.createGain(),this._audioElementSource.connect(this._bypass);const e=Math.pow(10,this._postGainDB/20);c.log("Gain compensation: "+e+" ("+this._postGainDB+"dB)");const i=this;return new Promise(function(A,t){new n(i._context,i._speakerData,function(t){for(let A=0;A ["+A.toString()+"])."),this._config.channelMap=A.slice(),this._foaRouter.setChannelMap(this._config.channelMap))},i.prototype.setRotationMatrix3=function(A){this._isRendererReady&&this._foaRotator.setRotationMatrix3(A)},i.prototype.setRotationMatrix4=function(A){this._isRendererReady&&this._foaRotator.setRotationMatrix4(A)},i.prototype.setRotationMatrixFromCamera=function(A){this._isRendererReady&&(h.invertMatrix4(this._tempMatrix4,A.elements),this._foaRotator.setRotationMatrix4(this._tempMatrix4))},i.prototype.setRenderingMode=function(A){if(A!==this._config.renderingMode){switch(A){case c.AMBISONIC:this._foaConvolver.enable(),this._bypass.disconnect();break;case c.BYPASS:this._foaConvolver.disable(),this._bypass.connect(this.output);break;case c.OFF:this._foaConvolver.disable(),this._bypass.disconnect();break;default:return void h.log('FOARenderer: Rendering mode "'+A+'" is not supported.')}this._config.renderingMode=A,h.log("FOARenderer: Rendering mode changed. ("+A+")")}},A.exports=i},function(A,t){A.exports=["UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD+/wIA9v8QAPv/CwD+/wcA/v8MAP//AQD7/wEACAAEAPj/+v8YABAA7v/n//v/9P/M/8D//f34/R38EvzxAfEBtA2lDTcBJQFJ9T71FP0D/cD1tfVo/Wv9uPTO9PPmOufc/U/+agL3Aisc/RxuGKEZBv3j/iYMzQ2gAzsEQQUABiQFrASzA5cB2QmyCy0AtgR4AeYGtfgAA2j5OQHP+scArPsMBJgEggIEBtz6+QVq/pj/aPg8BPP3gQEi+jEAof0fA1v9+/7S+8IBjvwd/xD4IADL/Pf9zvs+/l3+wgB7/+L+7fzFADH9kf6A+n3+DP6+/TP9xP68/pn+w/26/i39YgA0/u790Pt9/kD+7v1s/Wb+8f4C/1P+pf/x/cT+6/3p/Xz9ff5F/0f9G/4r/6v/4P5L/sL+ff7c/pj+Ov7X/UT+9P5G/oz+6v6A/2D+9/6P/8r/bP7m/ij+C//e/tj/Gf4e/9v+FwDP/lz/sP7F/2H+rv/G/s7/Hf7y/4P+NAD9/k0AK/6w/zP/hACh/sX/gf44AOP+dgCm/iUAk/5qAOD+PwC+/jEAWP4CAAr/bQBw/vv/zf5iACD/OgCS/uD/Cv9oAAb/CgDK/kwA//5tACH/TgCg/h4AHP9aABP/JADP/hEAYv9gAAj/3f8m/ysAYv8gACX/8/8k/ysAXv8bABH//v8j/ygAa/8qAAD/9f9g/1YAWf8JACH/AgB2/z4AXP/w/z3/FgB2/ykAX//9/z//EwCV/zUAS//n/1T/GACK/x4ATv/0/4P/QQB4//v/WP/2/3X/HAB8//P/V//3/2f/AQBh/9v/Tf/x/5P/IwCI/wMAf/8hAKP/JACZ/xUAiv8nAK//HgCr/yMAm/8uAMz/OACi/yQAqf87AMT/MwCY/yUAtP9FAMH/KgCu/ycAyP85AMv/IwCz/xoA1f8qAMn/FgC8/xQA4/8nAMX/CwDJ/xQA4f8ZAMH/BgDO/xQA4f8WAMP/BwDU/xQA4P8QAMH/AQDb/xQA3P8JAMP/AgDh/xIA2v8EAMj/AgDk/w0A1f/+/8v/AwDm/wwA0v/+/9H/BgDl/wkAzv/8/9T/BwDk/wcAzv/8/9r/CQDi/wQAzf/8/9//CADf////0P/9/+L/BwDd//7/0////+T/BgDb//z/1f8AAOf/BQDZ//v/2v8CAOb/AwDY//v/3v8EAOb/AgDY//3/4f8FAOX/AQDZ//7/5P8GAOP/AADb/wAA5/8GAOH////d/wIA5/8FAOD////f/wMA6P8FAOD////h/wQA6P8EAN7////h/wUA4v8DANv/AQDd/wQA3P8CANn/AgDb/wMA2/8CANv/AgDd/wIA3v8CAOH/AQDj/wEA","UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAAAAAAA/f8CAP//AQD//wEA//8BAP3/AAACAP7/+f8AAAIA/P8FAAQA8/8AABoA+f/V/wQAHQDO/xoAQQBO/ocA0Px1/ucHW/4UCm8HLO6kAjv8/fCRDdAAYfPiBIgFXveUCM0GBvh6/nz7rf0J/QcQSRVdBgoBSgFR62r9NP8m+LoEAvriBVAAiAPmABEGMf2l+SwBjva6/G4A//8P/CYDMgXm/R0CKAE6/fcBBwAtAND+kQA0A5UDhwFs/8IB8fydAEP/A/8v/e7/mP8j/2YBIwE3Av0AYv+uAOD8lgAg/wwAIf/L/n0Ae//OAJMB3P/XAF//XwCM/08AB/8NAEf/rf4jAT3/lgAJAP4AHgDpAO8AUf9L/07/Qf8KAOD/x/+D/3sATQCDAMoA0f79/+L/EQDt/7EAqv+S/7IAuv/o/wgAc//X//H/SwCm/+3/Yf/B/yoAAADI/7X/AwBg/5EATgCX/xYA/P+q/00AVACY/6v/BADD/zwALQCN/8z/KQDu/ygAEgCZ/6f/VQDC//T/KQCs/7P/UgAfAO7/NgC8/57/awAZAPP/+P/V/8z/bQBBAL//DgD0/+T/TABBAMz/CwAxAPz/SQBqALn/BgALAPz/EAA7AIz/3/8iAAUA//8kALf/y/9VABQA+v81AOj/0P9cAB4A+f8WAOr/vv83ABgAw/8JAOj/4f8nACIAsf/y/w4A3v8gACQAxP/n/ycA7P8WAC0Ayf/U/ycA9v/7/yUA0P/P/zUABADc/xUA5P/J/zcACwDS/xUA9P/m/zAACQDX/+3/9v/2/yQACgDZ/+P/AwAKABYA///b/9j/EQALABkADgD6/+7/GwD4/w4A8P/w//j/EgAEAAUA9f/1/wQAGgD4/wAA5////wAAGQD1////7f8FAAUAFQDv/wAA6v8LAAcAFQDs/wEA9P8SAAYACwDr//7/AQASAAYABQDv/wIAAwAWAAIAAgDv/wAABgATAAEA/f/u/wQABgAQAPr/+P/z/wUACQALAPj/9//4/wgABwAKAPT/+f/5/w4ABwAIAPT/+//9/w4AAwADAPH//f///w8A//8BAPP///8BAA0A/f/+//X/AgACAA0A+//8//b/BAADAAoA+f/7//n/BgADAAcA+P/7//v/BwABAAQA+P/8//3/CQABAAIA9//9////CQD/////+P///wAACAD9//7/+f8AAAAABwD8//3/+v8CAAAABgD7//z//P8EAAAABAD6//3//P8FAP//AgD6//7//v8FAP7/AQD7//////8GAP7/AAD7/wEA//8EAP3/AAD9/wEA/v8DAP3/AAD9/wIA/v8CAP3/AQD9/wIA/v8CAP7/AQD+/wEA"]},function(A,t,e){"use strict";function i(A,t){this._context=h.isAudioContext(A)?A:h.throw("HOARenderer: Invalid BaseAudioContext."),this._config={ambisonicOrder:3,renderingMode:c.AMBISONIC},t&&t.ambisonicOrder&&(_.includes(t.ambisonicOrder)?this._config.ambisonicOrder=t.ambisonicOrder:h.log("HOARenderer: Invalid ambisonic order. (got "+t.ambisonicOrder+") Fallbacks to 3rd-order ambisonic.")),this._config.numberOfChannels=(this._config.ambisonicOrder+1)*(this._config.ambisonicOrder+1),this._config.numberOfStereoChannels=Math.ceil(this._config.numberOfChannels/2),t&&t.hrirPathList&&(Array.isArray(t.hrirPathList)&&t.hrirPathList.length===this._config.numberOfStereoChannels?this._config.pathList=t.hrirPathList:h.throw("HOARenderer: Invalid HRIR URLs. It must be an array with "+this._config.numberOfStereoChannels+" URLs to HRIR files. (got "+t.hrirPathList+")")),t&&t.renderingMode&&(Object.values(c).includes(t.renderingMode)?this._config.renderingMode=t.renderingMode:h.log("HOARenderer: Invalid rendering mode. (got "+t.renderingMode+') Fallbacks to "ambisonic".')),this._buildAudioGraph(),this._isRendererReady=!1}const n=e(1),s=e(8),o=e(9),r=e(17),a=e(18),h=e(0),c={AMBISONIC:"ambisonic",BYPASS:"bypass",OFF:"off"},_=[2,3];i.prototype._buildAudioGraph=function(){this.input=this._context.createGain(),this.output=this._context.createGain(),this._bypass=this._context.createGain(),this._hoaRotator=new o(this._context,this._config.ambisonicOrder),this._hoaConvolver=new s(this._context,this._config.ambisonicOrder),this.input.connect(this._hoaRotator.input),this.input.connect(this._bypass),this._hoaRotator.output.connect(this._hoaConvolver.input),this._hoaConvolver.output.connect(this.output),this.input.channelCount=this._config.numberOfChannels,this.input.channelCountMode="explicit",this.input.channelInterpretation="discrete"},i.prototype._initializeCallback=function(A,t){let e;(e=this._config.pathList?new n(this._context,this._config.pathList,{dataType:"url"}):2===this._config.ambisonicOrder?new n(this._context,a):new n(this._context,r)).load().then(function(t){this._hoaConvolver.setHRIRBufferList(t),this.setRenderingMode(this._config.renderingMode),this._isRendererReady=!0,h.log("HOARenderer: HRIRs loaded successfully. Ready."),A()}.bind(this),function(){const A="HOARenderer: HRIR loading/decoding failed.";h.throw(A),t(A)})},i.prototype.initialize=function(){return h.log("HOARenderer: Initializing... (mode: "+this._config.renderingMode+", ambisonic order: "+this._config.ambisonicOrder+")"),new Promise(this._initializeCallback.bind(this),function(A){h.throw("HOARenderer: Initialization failed. ("+A+")")})},i.prototype.setRotationMatrix3=function(A){this._isRendererReady&&this._hoaRotator.setRotationMatrix3(A)},i.prototype.setRotationMatrix4=function(A){this._isRendererReady&&this._hoaRotator.setRotationMatrix4(A)},i.prototype.setRenderingMode=function(A){if(A!==this._config.renderingMode){switch(A){case c.AMBISONIC:this._hoaConvolver.enable(),this._bypass.disconnect();break;case c.BYPASS:this._hoaConvolver.disable(),this._bypass.connect(this.output);break;case c.OFF:this._hoaConvolver.disable(),this._bypass.disconnect();break;default:return void h.log('HOARenderer: Rendering mode "'+A+'" is not supported.')}this._config.renderingMode=A,h.log("HOARenderer: Rendering mode changed. ("+A+")")}},A.exports=i},function(A,t){A.exports=["UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD+/wQA8/8YAP3/CgACAAAA//8CAAYA8/8AAPH/CgDv/97/e/+y/9P+UQDwAHUBEwV7/pP8P/y09bsDwAfNBGYIFf/Y+736+fP890Hv8AGcC3T/vwYy+S70AAICA3AD4AagBw0R4w3ZEAcN8RVYAV8Q8P2z+kECHwdK/jIG0QNKAYUElf8IClj7BgjX+/f8j/l3/5f/6fkK+xz8FP0v/nj/Mf/n/FcBPfvH/1H3+gBP/Hf8cfiCAR/54QBh+UQAcvkzAWL8TP13+iD/V/73+wv9Kv+Y/hv+xPz7/UL83//a/z/9AP6R/5L+jf26/P3+rP26/tD8nP7B/Pv+WP1V/sP9gv91/3P9xP3J/nv/GP5S/sb+IP8v/9j/dv7U/pr+6v+u/Z3/sv5cAOr9Q/83/+n/zP5x/57+2//k/nwA/v01//L+SACB/sD/Ff81AJT+TgDp/ocAm/5dAFT+MgD+/pMAW/7o/yH/xQDA/kkA9P6LAL3+pAC0/iQAz/5UALD+UwAt/3UAhf4UAA//pwC+/joAz/5aAAv/fwDY/iMAIf+uAPP+ZAAc/0QAy/4xAB7/TgDs/goADP8wAEL/NwDo/ub/Uf9BAC3/+v9F/y4ARP9HAFP/EQA3/xMATP81AG3/HQAu/wgAaP9FACb/9f9B/y0AUP8rAED/CwBV/z4AW/8TAGH/BQBK/xsAfv8eAFn/AgB3/zwAff8RAGj//v+E/yAAb//0/3n/FwBz/xcAiv8PAHn/FQCJ/xgAg//x/3j/EQCa/ycAff/w/47/HwCI//X/iv/7/43/JQCM/+n/kP8AAJb/JACj//7/oP8ZAML/SwCo/w4Atv8tAMb/PACr/xcAwP9HAMP/OADF/y4A0f9IANL/NwC//zEA0f9LAMb/MAC8/y4A3f9GAMH/FQDQ/yYA2/8sAMT/AwDX/xkA3v8SAM3/9v/c/w8A4f8LAMj/8f/h/xQA2P8CAMn/8//j/xQA0v/7/9H//P/i/xEA0v/1/9L//f/j/w0A0f/x/9f//v/k/wgAz//u/9z/AwDg/wMA0P/v/9//BQDf////0v/y/+D/CADc//3/0v/2/+L/CgDa//r/1v/5/+T/CgDY//j/2f/9/+T/CADY//f/3P8AAOT/BwDY//f/4P8EAOP/BADZ//j/4v8GAOL/AwDa//r/5f8IAOH/AQDc//3/5v8JAOD//v/f////5v8IAOD//v/h/wIA5/8HAOD//f/j/wMA5/8GAOD//f/l/wYA5v8EAOD//v/m/wYA5f8CAOL////n/wYA5P8BAOH/AADl/wUA4f///+H/AQDk/wMA4f///+T/AQDm/wEA5////+r/AADt/wAA7/////P/AAD1////","UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD//////v///wAAAAAAAAAAAQAAAAAA///9/wAABAD+//n/AgAJAAAA+v/+//f/DAAdAPv/+v+l/8L+jf/4/vgAdwVPAQACLQBo+Qj/Ev7o/N3/VgCbA08Bxf+L+yn9J/2HCU8FmgBvDe30Rv5h/LT09gi5CxkA5gOi8/30kwEM+4YJMf2nBmkJJAQQBLoFtvvv+m4A7PF6/R0Bif3qAuf8WARAAf4GyABG/BIAwvr4Acv8U//c/yIC8AEn/B8Daf2CAgMBAf3MAN38vgLK/UT/QwCyAPYClPyvAW/+pQAoASD+zP+R/IYC1f7C/nEBQP96AZb+1QAIAM//yQE7/tkAZ/7TAXL/w/8+AIsAtwB7/24A4v9a/z4A7v4iADb/dwCj/23/kgBOANUAIv8lAKEAxP9gAK7/BwCP/5kA7/9v/0wAzv9DAGT/3/9vAHv/6P+q/xUA7P8XAO//uv/g/2UAEgCV/wEATADM/+7/+//j/+D/9v/i//j/IgD+/xoAxf/6/z4A5/+8/9D/QwDq/+3/OQDT/zUAIgA/APP/PgAjAPD/BwAGACAADAC3//b/HAA3AN//RgDN/w8AIAACAN//GQBDACEAIwA+ACoAJQAeAPz/KgAYAPr/DgAEABYAIgAcAMT/7f8OAOL/5P/2//L/9P8GAPT/7v/8/+7/6v/t//z/AgAUAOL//P8VAAMA4/8IAPb/+P8MAAoA5v8NAAsA9v///wEAAAD9//n/9/8JAAYA7v/6/wMA+f8GAAEA7f/7/xgACAD4/w8A///3/w0A+f8BAAIA/P/5/xIA///9//r/7v/+/xYACQD///H/CwDz/wEADgAHAPP/FADn/+3/AQD5//f/AgD7/wEABwAMAAEADQD8//n/8f8OAPX/BAD+//X/+v8WAAQA+f8CAAEA7/8QAAEA/P8DAAUA9f8KAAwA9v8DAAUA+f8OAAoA9f/7/w0A+v8EAAgA8P/6/woA+//8/wkA+P/3/woA+//8/wcA9//1/woAAwD5/wcA/P/3/w0AAwD3/wEABAD2/wkABgD3/wEABQD3/wUABQD3//v/BwD3/wMABQD3//r/CQD7////BQD6//n/CQD9//3/BAD9//j/BwAAAPv/AwD///j/BwABAPn/AQABAPn/BQACAPn///8DAPr/AwADAPr//v8EAPv/AQADAPv//P8FAP3///8DAPz/+/8FAP7//f8CAP7/+/8EAP///P8BAP//+/8DAAEA+/8AAAEA+/8CAAIA+////wIA/f8AAAIA/P/+/wIA/f8AAAIA/f/9/wMA/////wEA///+/wIA/////wAAAAD+/wAAAAD/////AAD//wAA//8AAP//AAD//wAA","UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD////////+//////8AAP////8AAP//AAAAAPz//f8IAAMA9////w4AAQD6/wwA8//+/y8Afv/0/2H/UP5gAbH+2QG1B2cAVAIh/l32FPyM/nACPQDV/+UEo/Q6AQwCu/oLD9kF8QJA/Uz+Wf2KCOcC+wUKBsL5aQBQ97rwOPiPAvn5CAl8AHEDkQPcAA8Bn/lIAdz7HQF1+xz9cAM4/94E4gDKAun+cgPYAYr9JgJr/bf+ivxz/MoBgv5UA8EBSgAQAJ7/UgEk/cQB7f63/sD/vf4XAhT/BQFCADYAnQGI/9EBtv3hALD/vP+c/3H/TgIN/1sBpf8yAP3/4f8qABr+1f8OAJ3/dwAGADEBnv9JAPz/IQBwAIH/jgAS/4wAsACTAOn/DQDCALn/ZQCSAAIAAwD1/9//jv9aADQA/v9EAB0AfgA8AAQACgB9APr/IAARAPT/5v9xACAABAAHAGUAt/89AC4ACgAjAMP/+v/9/xYA7f/1/+D/7P87AC0Auv8RAAcA9/8FAC8A2//y/xIAEwAaADQAJADp/zoAAgAfABIA2f/e/zUA+P/6/w4A9//A/zcA4//P//T/5f/R////EwDb/w4A8/8BABkANADh/xEA+f/0/wIAHADc//j/GwD1//f/GADs/+v/EAAAAPz/EgD3/+r/FgAMAAkAGAD9/+z/IQAQAPH/GQD3//z/CgAfAOX/AgD8//H/BAATAOv/+v///wIABAAdAOj/BQAPAAcAAQATAOz/8/8JAAkA6f8VAOv/+f8QABUA/v8OAO3/+P8KABUA9f8FAPv/5/8TAA0A7f8XAAkAAQAJABYA4/8WAAcACgANABEA7v8EAP7/AAD+/wMA9//7/xAAAQD8/wQA+f/7/wMABgDq/wAA+v/3/wYACQD1//3/BAD9/wgADgDw//r/AgD6/wEACADv//j/BQD///X/BwDu//j/AgACAPP/BAD2//n/BAAGAPb/BAD8//3/BQAJAPL/AwD+//3/BAAIAPP//f8DAPz/AAAGAPP/+/8CAP7//f8FAPX/+f8DAAAA/P8EAPf/+v8GAAMA+/8EAPv/+/8GAAQA+v8CAP///P8EAAUA+f8AAP///f8CAAUA+P///wEA/v8BAAUA+f/+/wIAAAD//wUA+v/9/wMAAQD9/wQA+//9/wMAAgD8/wMA/P/9/wMAAwD7/wEA/v/+/wIAAwD6/wEA///+/wAABAD6/wAAAQD//wAAAwD7////AQAAAP//AwD8//7/AgABAP3/AgD9//7/AQABAP3/AQD+//7/AAACAPz/AAD+//////8BAP3/AAD//wAA//8BAP7/AAD//wAA/v8AAP7/AAD//wAA//8AAP//","UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD//////P/9//3//////wAAAAAAAAIAAgACAP//CAAEAEEA//+cAAUAb/8HAAH9+P9eARkAogQUAJn8BwCd/gX/+QQNAKoC9gFdAtb/b/vd/936TP/6AsD/nfqn/un1W/0dA8IEsQLvAJv2bP72+WMAkP8dAcX+nQO2AIr6bP/EABX+NgK/Bdj2IQv2AE4EUAiD/xQAnwIm/B0B/wGNAoH7sQaP/b8CiQakAqD+R/9xA477KQL//6r75v/O/pcCgQCtAiMCBQAkANAARwHf//39hgBl/kUAJgEtAUEATgA/AgoASADK/zUAJv29/vL+l/9c/0cAUwBBAE8A6QE5/87/Wv9NAOf+5v7P/5P/4/9BAKYAQwDD/zYB5v+r/zYATwAp/1v/WQAEAB0AhwA0AA0AIAA3AAEAzv/u/+//5v9m/zwAIADQ/8T/SABiANb/SwAbAFf/MQDX/7L/hP8TAPr/AgAMAAsAHwAZAI3/VgDC/9v/5//x/6P/AwBlAMv/yf82AB4A+P9WAPj/NwDi/1EA0v9JANj/JwAcAAEADABYANj/4f8MAEwAmP82AN//3P8UADYA7//6/wIACADU/ygAyv82AN7/9v/2/ygAxv/9/+3/5//n/zUA6//g/y4ADgD5/wsABwDv/xIADwAGACoAJQD3/zIA+/8FABsAFgDO/zAAHAAIABQALADp/xcACAAAAPH/GADs/wkACQAFAAgAFQDp/wIAHAD1//P/EQDw/+3/GAD9/+f/HAD8//T/DAAQAPH/HwD4//r/DwAPAOj/EQACAOn/DAAXAOX/BAAOANH/9/8MAO//9f8LANT/9f8EAO//6f8NANb/+P8KAOz/5v8MAOD/7f8UAO//7//+//7/9v8YAPj/9f/z/wsA+v8SAPD/+v/x/xYA+f8SAPb/9//3/xEABQACAPn/9//y/xQACQD///b//v/7/xIACQD9//H/AAD7/xEAAgD5//P/AwD9/w8AAgD3//D/BAD//wUA/v/0//D/BgADAAMA/P/2//f/BwAGAP7/+//2//j/CAAFAPv/+f/5//v/BwAHAPn/9//7//7/BQAFAPf/9//+/wEABAACAPf/+P8BAAIAAgAAAPj/9/8CAAMAAAD+//n/+f8EAAQA/v/8//r/+/8EAAMA/P/7//z//P8EAAIA/P/5//7//v8DAAEA+//5//////8CAAAA+//5/wEAAAABAP//+//6/wIAAQD///3//P/7/wMAAQD///3//f/9/wIAAQD9//3//v/9/wMAAQD9//z/AAD//wEAAAD9//z/AAAAAAAA///9//3/AAD//wAA/v////7/AAD//wAA////////AAD//wAA//8AAP//","UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD+////+f////v//v///wAA/////wUAAQAIAAIABwACAHkATAAOAaMAAf9C/9X6QvwhArAAtghABW37nv/y+0wAWQNcAE8JRwSOC6AEJe8P8S/zrPWaBI/+LQA/+0L+P/4K8AgAb/8uCh78BQtC614GaQWfAin5UfzN8Tf+GQizAZ4MCQMbGJ4BoRS7AvcHyQARA6n9ZwHZ/z4DvwAZAlAB6gbNAS4GFADFATL7E/2K+j37C/xp/SD9Uv0VAOsDs//WAd3+bv7F/f79mP2X/KH+FwC0/1n+VgFcATABHQGaAET+nf8Y/hoAovpqAXj9CQKW/lsCl/4RApj+bAHk/RcAlv4BAG/+DgDi//3/GwAOAEIAq/+y/3z/8v8+/7T/Tv8//27/mgDZ/1sA+P+cAAAA/P/i/yMAi/85AMP/KgDM/9MA9P+QABoA4QAiACwACwBdAP7/TQDb/y0Ayf+SAA0AZwDg/4wA+/8/AAMAgQDp/w0ADAAQAAoANgAgAA4AKABIAB4A4v/3/+f/+v/c/+n/EADn/wgAFAAqAOz/IwDc/9//3f8XAND/2v/a/w0A5v8BANb/9P/m/wAA8P8ZAN3/RwAGAEsABgB/AP7/NAASAEgABAA3AP3/KgD9/1sA8P8lAOr/FgD1/xAA4/8kAOv/AwD4/xEA5f8NAPT/+v/3/x8A7f8PAPj/IwD5/yAA9/8ZAAEAGgD4/xoA9f8HAAMACAD0/xgA+P8AAPr/IQDp/w4A8v8HAPX/IgD1/wYA+P8GAPX/GgD3/woABQASAAcAGQDw/+v/9P8bAP3/HADs/+f/7/8LAPr//v/0//T/AgD2/wsA6P///+P/CADY//7/5v/3/wQA/v8LAPD/GgD1/yMA/P8QAOv/LADw/yQA+P8XAO7/MQD9/yEAAQAcAPD/IgD9/xMA+/8OAO//FQABAAoA+/8PAPP/FQABAAQA9/8PAPX/CAADAAEA+P8NAPv/CAAGAAUA9/8JAP//AAAFAPz/+f8HAAQA/f8FAP3//P8FAAYA+P8DAP7/+/8AAAcA9/8BAP///f///wgA9//+/wAA/v/8/wUA9//8/wIA///7/wUA+v/7/wIAAAD6/wMA/P/6/wEAAQD6/wEA/v/7/wIAAgD6////AAD7/wEAAgD7//7/AQD8/wAAAwD8//3/AwD9/wAAAgD9//z/AwD/////AgD+//z/AwAAAP7/AQD///3/AgABAP3/AAAAAP3/AgACAPz///8BAP3/AQACAP3//v8BAP7/AAABAP3//v8CAP7///8BAP7//f8CAP////8AAAAA/v8CAAAAAAAAAAAA/v8BAAAAAAD//wAA//8AAP//AAD//wAA//8AAP//","UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAAAAP//AAD//wAA//8AAAAA/////wAAAQD+////AAAGAP3/OAABAIIAAwBv//f/E/0QAK0ADQCzA/7/8P4u/0cBDQCJA6ABbQDg/w7/z/9o+Vn/SPnL/1//Ef+2+jr9RfZgA5QFZwILDFj+PAb2/nEFKgKk/R0Dlv6b/FUDsP6YAoj9SgAT/iL/tAPwAv8A0P6zAr7/dwAnAf39uP22/skA2v///2YCoP4UAUsAZgF2AJH+4P70/rz9+f+U/Xv/8v7CAcb+TACS/kwAv/+x/tX9oP71/oL/1f8nAEUAZwGtAAgAIgC/AD4BaP8GAGH/dQDF/64Arf8nAakAhAH9/+kAQQD3AFb/q/8p/yIAR/8FAPD/ZAA/AIYA3v8tADQADQBp/3f/CwABAP3/Wf8OANj/WwDH/xoAe/8DAKz/zv96/z8A3f/J/5X/IAD5//j/q//c/+//RADq//D/vv8pADUAFQDI/y8ACAAbANb/OwD3/+3/9f/e/wcAIAAeAMH/8/8xAC0AEADW/+3/HAADAPv/8P8DAOL/OwD3/xcACQAHAM//5f8XAAcAz//T/9D/HgD9////yf/e//v/AgD//9H/6/////H/+/8hAAIA9//7/w0AFgAQAPL/2v/8/xsAGQABANz/9P8YAAQA/v/y/wMA5v8YAAkAAAAAAAMA7/8KABgADwDs//j/BwATABsA8P/1//z/BAAMAAAA9P/s/xAA/v8GAAkA/v/p/wMACwALAP7/9P/p/wcADQAFAPb/7//4/w0ACAD8//b//v/1/wMACwD1//T/8P/8/wAACQDz/+f/5P8GAAkABQD5//D/+v8FAA0AAwD///T/AgACABAA/v8CAPD/+/8FAAoA9f/3//f//v8GAP7/9v/t//z/+f8AAPj/+v/3/wEA+v8HAPr//P/5/wQA//8DAPr/+P/3/wYA///+//X/+//5/wQA/f/7//X/+//4/wMA/f/8//j//v/9/wYA///8//f/AgAAAAUA/f/6//n/AwACAAIA/f/7//z/AwACAAAA/f/6//3/AgADAP7//f/7/wAAAwAFAPz////8/wMAAgAEAPv//v/+/wMAAgADAPv//v///wMAAQABAPv//f8AAAIAAAD///v//f8BAAIA///+//z//v8CAAIA/v/9//3///8CAAEA/v/9//7/AAACAAAA/v/9////AAABAAAA/f/9/wAAAQABAP///f/+/wEAAQAAAP///v/+/wEAAQD///7//v///wEAAQD///7//v///wEAAAD+//7///8AAAAAAAD+//7///8AAAAA///+//7///8AAAAA////////AAAAAP////////////8AAP//////////","UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAAAAAAAAAABAAAAAAD//////////////v////3/////////+//8////AQD9//z/9f8BAAIA+f8dACgAWQBxAJX/qv+Y/uz9aP9k/7UDUQQBAiQA4Pgi/AkB0gKaBsD/+fxp/vz9CQSp/I/+ywDO+vMD0fzK/PABcgBeBfoBv/+uAuH9Sf5gAy39awMmBWUBuP9fA9/9fgDj/2/+EACaACcCSv9Z/2j/rv7hAA0AWf55/7L84P7E/SIAT/67AMv/tf+FAA7/1v+7/gv/IP+E/sQA+P5aAXz/tP9XAFX/tP8o/4r/j//e/yQAMv9mAJT/rgCr/9X/EwCb//H/9f7F/6D/EAAoAK3//v+e/zsAh/+B/7r/if/C/2r/4P/z/6//HwCy/0IA7/9ZALT/y/80ACgA9v/J/9//DgA5ADUALQARADIACwAfAOf/NgArACMACQBBAEcAGAAjAC4AWQBUAHcAAAAfACEAIAAcAPj/CADk/yQA7v89AEEAFwD5/xYA6f8aAOX/AADF/zQADwAUAOT/BQDr/yUA6P8XAOf/HADR/0AA8P8nAAgACQDt/ycAKAAHAPH/IQDz/xsACADn//n/DgADAA4A8P///8z/GgDN/yMA/f8QANj/MwACAC0ACwAOAO3/JgAZAAUACgAAAA4AIgAaAAkADwACAAAAHQATAAUABQACAAgACwAjAO////8AAA8ABQAPAPL//f8GAAsABgAGAPD/8v8GAPz/CAD6//H/6v8PAAgABgD4//3/9v8aAAgABwD1//7//v8QAAoACAD//wUA9v8QAAoABAAFAAgAAgAJAAoAAwD//w0AAgD//wcA/v8DAAoABQAFABUABAAKAAYABwAHAA8ACgAGAAwADwAMAAkAEAAJAAgADwAMAAgADgAJAAUACQAPAAUACwAHAAEABgAIAAEABAAGAP//AgAJAAAAAgAEAP7///8IAAIA//8GAAEAAQAJAAIA/v8EAAMA//8JAAEA/v8DAAMA/v8HAAMA/f8BAAUA/v8FAAMA/v8BAAcA//8DAAMA/v8BAAYA//8CAAMA/////wcAAAAAAAMAAAD//wYAAQD+/wMAAQD//wUAAQD+/wIAAgD//wQAAgD+/wEAAwD//wMAAwD+/wEAAwD//wIAAwD//wEABAAAAAEABAD//wAABAABAAAAAwAAAAAABAABAP//AwABAAAAAwACAP//AgACAAAAAwACAP//AgACAAAAAgACAAAAAQADAAAAAQACAAAAAQADAAAAAQACAAAAAAACAAEAAAACAAEAAAACAAEAAAABAAEAAAABAAEAAAABAAEAAAABAAEAAAABAAEAAAABAAEAAAAAAAAAAAAAAAAA","UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAAAAP//AAD//wAA//8AAAAA//8AAP//AAACAAAA+f8BAAYA///4/wIA//8AAA8A/v/V/wEAEwA9AAEBRwA2AF7/kfog/3gBwv99CDYBU/qtAUX/AP7OAfkAX/o9B38FSfwaAuT14/60BAr8CQAI/tfyIQTzAXP+egdUBBwBof7TBMT8bAWi/5EEWwBRAAAKyfxE/8b88vp6ACP+PAF4/qD8MQNM/ygCJ/2XAPD9kP5gAVT/iP9I/lEB4P8qAD0BFAGa/+7/DgB2AOP98gFm/u/+Vv5/AG8ASP9gAM//qv9w//oAcv+2/jIBHgA7/6D/oAAGAKH/lADT/wAAggC8AAYAkP9yAEcAkf8BAOD/RAAr/zUANwDt/xQAJQAkAMT/zwA/AOH/xv9zAGsANQBTAIcALAAvACIATACy/xMADADg/xcAWABvAJL/7f9VAPb/EgDt/wcA4f8kAPP/5P+h/wgACQDy//r/LgAQAMn/8/9CAOX/5v/S/9//3P8pABYAuP/s/w8AFgDt/+3/7v/w/9j/5/8GAOf/2P/2//P//v8kABMAuf/m/xoADADZ/+r/3P8KAAUAKwDe/wsA3P8VAAAADgAfAB0ACAAMAF4AGgAhAPL/MwDz/0kABAAKAPX/LwAbAAkA9v/s/+3/8/8CABAAAADm//n/BQALAAUAAQDj//n/JQAVAPX/9v/+/wIAEQABAPP/8P/1/wAABgD6/+3/7//o//j/DAD8/+b/8P8IAAkABgD4//D/8P8UAAoAAwD4/wAA+f8OAAcAAAAFAPX/9v8TAAkA8v8EAPb/9/8dAA0A7/8CAPn/+f8SAAQA8/8CAOf/+v8DAAgA9P////H//P8IAAUA8//0/wIAAQAGAAgA9//7/wAA+/8EAP//+P/+////AgACAAsA8v/+/wIABQD7/wgA9v/7/wMABAD5/wAA/P/3/wEAAQD7//7//P/1/wQA///3//r////3/wMAAwD1//r/AwD6////AgD4//n/AwD8//7/AgD4//n/AwD+//3/AQD4//n/BQD///n/AAD6//j/BAABAPj/AAD9//v/AwADAPj//v/+//z/AwAEAPj//v8BAP7/AQADAPj//f8CAP////8EAPr//P8DAAAA/v8CAPv//P8DAAEA/f8BAP3//f8DAAIA/P8AAP7//f8DAAIA/P///wAA/f8BAAIA+//+/wEA//8AAAEA+//+/wEA/////wEA/P/+/wEA///+/wAA/f/9/wEAAAD9/wAA/f/+/wEAAQD8/////v/+/wAAAQD8////////////AQD9////AAD/////AAD+////AAAAAP//AAD///////8AAP//AAD//wAA//8AAP//"]},function(A,t){A.exports=["UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD+/wQA8/8ZAPr/DAD+/wMA/v8KAAQA/f8DAAMABADs//z/8v/z/8f/R/90/ob+//zAAWsDAwY3DKn9//tu93DvkwI6An4CuwJ0/BH7VPux92X0Gu7N/EX9mgfqCkkIiRMgBd4NQQGL/c0G/xBxAKELZATUA/sIHRSx+fkCyAUmBNEJIARlAdHz2AjNACcIsAW4AlECsvtJ/P/7K/tf++n8aP4W+g0FXAElAMn8nQHn/sT+Zv7N+9X2xvzM/O3+EvpqBBD7SQLd+vb/sPlw/JD72/3n+Rr+L/wS/vz6UQGg/Nf+Av5L/5X9Gv2//SP+mf3j/lf+v/2B/ZH/5P05/iL9MP9F/uf9UP4v/qv9mv7o/Xn+wP2k/8L+uP5J/tD+Dv/Y/bL+mP72/n3+pP+7/hAA+/5zAGH+Z/+u/g8Azv2y/6L+//9o/iIADP8VACz/CwCN/pb/1v4yAFP+wf+4/jsAcf5VAP3+bADa/nMA6f4sAOT+IQBd/v7/7v6aAIL+QADe/nEA0P4yAKz+CQCo/moAuf5xAN7+mAC8/jcANf9eAPX+IAA1/1kAAP9hAMz+PQD5/m0A2/4gAPr+UQDh/jQAEv9BAPH+FABN/zkASv9DADP/BABe/1IAGf8oAE3/RQAw/zIAQf8mADn/GgBE/xIAR/8hAD7/BABy/zEAKP/0/07/GwBX/z4ARf8mAFr/QQBV/zUAVP8eAFz/JABt/0EAUP8MAHz/KgBr/ycAYv8EAH3/MABl/x8Agv8bAIj/GgBv//z/ff8AAJX/IABu/+T/jv/r/4z/9/9n/77/pP8JAJD/EQCJ//r/q/8WAJ//GQCU/xYAtv8qAKr/PQCW/ysAwf8+ALb/OgC3/ygAz/8uAM7/OgDH/ygAz/8kAMz/OgC//xsA1f8qAMn/LwDN/xcA1f8oAMv/JQDR/xMAzf8bAM//HgDU/wUA2v8ZANL/EwDW/wEA1f8ZAMz/BwDX/wIA0v8SANT/BQDW/wMA0/8PANT/AADY/wIA1f8MANX/+f/a/wUA0v8IANf/+//Y/wUA0/8DANr/+f/Y/wQA1v8BANr/+f/Z/wUA1//8/9z/+v/Y/wYA2f/8/93//v/Y/wUA2v/9/93////Z/wUA3P/8/97/AgDa/wMA3v/8/97/AwDb/wIA3//9/97/BADd/wEA4f///9//BQDf/wAA4v8AAN//BQDf/wAA4/8CAN//BADh/wAA4/8DAOD/BADi////4/8DAOH/AwDk/wAA5P8FAOL/AgDl/wEA5P8FAOL/AQDl/wEA4/8EAOL/AQDj/wIA4P8DAN//AADg/wIA3v8CAOD/AADh/wEA4v8AAOP/AADm/wAA6P8AAOz/AADu/wAA","UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD//////f/+//7///8AAP////8BAAEA/f8AAAEAAQAFAAUA9//6/x0A2f/9/xMA3P+jAE//of9HAKP//gCj/77/Z/vi/28D9/ywDJAJIvr6AsX0Xec4BhcGzf23DZP7yfZ6C1//nwBDBIHyYgob/Tf3sQ41ANoKRA/A+E7yffAa9gD5EQUBDMwMygiqAHMAqPqhAGUB2/gE+a78H/+4APT6DwIUAA0HNwMhBfL8E/90A5n7dP9cALIC+v5C/q0AOv9kAogBHv01/+3/qAQD/ub8T/4vAOUA5P6KATv+ywEYAeT+KP6i/3gCFP6h/hr/+P83ACL/VADn/8UARQJI/4MAu/8qAlj+wf4iAPb/LgFJ/8QAUABAAI4ABf+k/3X/YgFK/ij/j/9HADoAi/+WAA0BVwC/ACL/LACe//cARv9i/xgAUgA0ACj/FgBgAIj/5P9M/7z/zv8/AKz/gv8sAEQA6/+I/yYAawDL/7T/xf8qAOv/FQCu/5n/EgAyAO3/i/9LAE4A+//R//P/FgDe/8z/u/8DADIALAAZALL/TAA8ABwAo//1/xwA/P/L/z0A6P8jAN7/7v+a/zAAwf/7/3//KQAuACwA9v8RAGYAIwBNADgAKgASAF0ADgANACEAMQDH//H/LQACAB0Ay////x0APAABAAQA2v8iAAcAEgDE/+v/FQD+/+P/DAD1/97/6v/4//X/EwD4/+7/5P8cAA0ACQDH//7/CQAXAAEA/P/5//j/CwAWAAEABQD9//n/AQAWAB0A7v/k/wAACQAmAP//9/8AAPn/8/8aAO//6/8fAOv/5v8hAP//5/8PAOf/AAAGAPn/6v8JAAYABgABAOv/1//1//L/+P8DABcA6f/8/wMACgD7/xAA3v/2//z/DADu//z/5v/5/wEA/P/6//7/7v/x/wQABgD5/wAA8v/w/wkAEQD2//j/+v8EAAcAEAD3//v/+v8CAAAACQD3//v//v/9/wUADAD2//X/AgAHAAAABwD2//T/BgAKAP7/AQD4//r/BAAIAPn/AAD3//f/BQAHAPv//v/7//n/BQAJAPj/+v/9//7/AgAGAPj/+f8BAAEAAgAFAPn/+v8BAAIAAAAEAPn/+f8CAAQA/v8BAPr/+v8CAAQA/P////v//P8CAAQA+//+//3//f8CAAUA+v/9//////8AAAQA+v/8////AAD//wIA+//8/wAAAQD+/wEA+//8/wAAAgD9/////P/9/wEAAgD8//7//f/9/wAAAgD8//3//v/+////AQD8//z/////////AAD8//3///8AAP7/AAD9//7///8AAP7////+//////8AAP7////+////////////////////","UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD//////v8AAP///////wAAAAAAAP7/AQABAAAABwD///X/BQAjAPL/CQDb/9D/GAAb/7sAYwCW/z0BcP/X/7T/2QDW+wH8yANCCCUJ5QT++UXmhPwhA78FuAxH+p78ifudBlAG9vmu/lAK2fdlB///cfjoCa0E7Akn9Yb/zvba+AkAHPywBGEBFwUNAL8AXAAGA20DFvmR/kz+F/06Ag/+GwHl/5EEKgJd/q0AP/ym/9n6EfxY/2H+/QFtAC4C6QBDAaMCo/20/+3/3f/p/fL9rv9V/6cBhQHuAX4AcwJYAaH/IP/P/gsApP0LAe7/sQBuAI0AAgGDAE4BzACe/5X//v+v/+f+Zf+gAOv/5QBhAOIApAANASYAuP+h/8b/HQBr/9//bACWAGEAFAB5AD0AWQDU/+D/Yf/p//D/s/+R/4QAMQBvABEAkQBfABQAJgDW/wwA8/8XALz/vf8zAFAAKwD1/zEAPwDJ/x0A7/8LAOX/FwDR//H/EQAdAO//6P8QAFEA2f8WABEAMgDy/xIA+f/s/xAALgDv////HQAvAPT/+f8iAAYAEgAFABoAGgD//w0A+f/0/xsAHgDx/9f/GAACAPH/8f8JAPf/GwALABEA7/8cAPT/CgD2//j/BQD8/+3/OgAgAAYA9f8PAN7/DgD9/9r/1//3/+3/9//1//b/8//5//f/AgAJAOf/+v8OAAMACwD9/+7/5f8eAAEA9//q//7/8P8WAP7/+//4/wIA+f8TAAIA9f/5/wcA+P8iAAgA9v/n/xoA//8gAAUABwDj/wAA9v8BAAUAFQDn/wMA7v8QABAAEQDm/wwA8f8aAAAABwDu/wcACgASAAEA7//w//f/BgARAAkA6P/3/wcADgAKAAYA4f/4/wYADgAAAPr/8P/9/xQACgAHAPn/7//9/xEAAgD+//L/8v/8/xUAAwDw//H/9f8CAAsA/v/q//L/+f8FAAYA/P/r//j///8GAAkA+//o//j/AQAIAP//+v/o//v/CAAIAPv/+P/w/wEACQAHAPj/+f/0/wIACwAFAPb/+f/4/wQACwACAPP/+f/+/wYACAD///L/+/8BAAYABQD9//P//P8FAAUAAgD7//T//f8HAAQA///7//f///8IAAMA/P/6//r/AQAIAAEA+v/6//3/AgAHAAAA+f/7/wAAAwAFAP7/+P/8/wIAAgACAP3/+f/9/wMAAwAAAPz/+v/+/wQAAgD+//z/+/8AAAQAAQD8//z//f8BAAQAAAD7//3///8BAAMA///7//3/AAACAAEA/v/7//7/AQABAAAA/v/9////AQAAAP///v/+////AAD/////////////////////////////","UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD////////+//////8AAAAA/v/+/wAAAQD8//3/CQAJAP3/+v8PAAcApABlABkBkwCO/i//lfqa/HQAcf/3BdkCzwJcBCMC0wMN/9/9wgI7AaECYfxV/Tf83vhn/xrt8Owx/8n7cgHABYb43QcZDh4WugNrA7P74gHu/9z/zv0t/acCiQHY/iv4qQOl/ysCE/0//XT9Sf4O//j9xfupAn394gHO+rsCXAFIAxQC9wIXBgcD2AQuAnb/9gJh/6wAVfxEAI4Bvf7oAFv/bALsAMQBe/88/joAT/4dAH39/v9LAXn/gwDI//QBdABcAA0A7f4lAMn///+9/tv/iABp/13/pP/dALv/w/8MAHv//f+y/6////7U/5AAZP+Z/8r/nQDR/5r/DwDr/xAA4v+s/3z/+P9uAOv/t/82AGcAHgCb/yQAFQBGAM7/CgD3/xoAegAaAOz/CgBHAA8Adv8/AAAABQC2/xIAAAA7ABQAKgCj/z4AAQAXAJz/JAADAAcA8f/1/2AAAQAlAPD/NgDx/1wA7v/4/wMAZADv//3/HQAkAFoA8P9FAPv/FgBIAPf/WQAHAEUACQD0/xIAQwDu/wMAwP9VALn/XwCw/yEA5f8sAPj/FgDD/1YAyv8rAOX/HQDo//j/IQAQACAAHwD9/yQAHQBAABgABQAiAAUAKAD3/wkACwAKAAMABwAJAPb/+f8GAOr/JQAHABMA6P8TAA4AGgD//woA8/8ZAP//GADu/w0A9v8SAAMABwD4/wQA5P8XAAQACgDq/wUA+/8VAAcACADs/xIAAAATAPH/+v/1//T/7f///+z/+v/y/+//9/8KAAcACgAJAPT/BAAKAAAABgAIAPL/9v8KAAMABAACAPr/9v8OAAIA+P/x//v/+f8MAPb/+P/w/wQA9f8MAPn////7/woA/v8PAAEAAgD1/xAAAQAPAP//AwD//xQABwALAAAABgADABAAAgAHAAAACAABAA8ABQAFAAMABwAEAA4ABwADAAEACQAFAAoAAwD//wAACQADAAUAAQD/////CAABAAMAAAD/////BwACAAEAAAD/////BwACAP7///8BAAAABgABAP7///8CAAAABAAAAP7///8DAAAAAwAAAP3///8DAAAAAQAAAP3//v8EAAAAAAD+//////8EAP/////+/wAA/v8EAP/////+/wEA/v8EAP///v/+/wIA//8DAP///v/+/wIA//8BAP///v/+/wMA//8BAP/////+/wMA//8AAP//AAD+/wQA//8AAP7/AQD//wIA////////AQD//wIA////////AQAAAAEAAAAAAP//AQD//wEAAAAAAP//AQAAAAEAAAAAAAAA","UklGRiQEAABXQVZFZm10IBAAAAABAAIAgLsAAADuAgAEABAAZGF0YQAEAAD+/wAA+v8AAPz/AAD//wAA/f8AAAEAAAD+/wAACQAAAAQAAAAZAAAAtgAAAFsBAABW/gAAH/oAAGcBAABoBwAAlAAAAO3/AAARAQAA+wIAAEoEAACe/gAAiv4AALD0AADJ8wAAkQQAAF34AABi8QAAPQAAAAH2AAD19AAADAMAAJwGAACTEAAA0AwAAJkHAACOBwAAuQEAANcDAAC6AgAAHwUAAHEFAAB0AwAAbgEAADz+AADYAQAAGAAAAJwCAADgAAAA//0AAMn+AAAT/AAAwP8AAOn9AAAJAAAAewEAAOn+AACN/wAAOv0AAO3+AADN/gAAcP8AACj/AACq/gAA+f4AAML9AACa/wAA/f4AAN7/AABo/wAA6/4AAE//AAAC/wAAEQAAAHX/AAB0AAAA5f8AAEwAAAB3AAAA5/8AAMIAAABCAAAAzgAAAE8AAAB3AAAAKAAAADMAAACqAAAALwAAAK4AAAASAAAAVgAAACgAAAAtAAAATAAAAP3/AAA7AAAA2/8AACQAAADw/wAALQAAADEAAAAlAAAAbAAAADMAAABUAAAAEAAAACgAAAD1/wAA9v8AAPr/AADu/wAALgAAABIAAABUAAAARAAAAGUAAABGAAAAOAAAAGAAAAAuAAAARQAAACEAAAAfAAAAAAAAAAkAAAAQAAAAAwAAABIAAADs/wAAEAAAAAYAAAASAAAAIgAAABEAAAADAAAABAAAAA8AAAD4/wAAHQAAAAsAAAAIAAAADgAAAP//AAAcAAAADwAAAAYAAAASAAAAFwAAAAMAAAAYAAAAEgAAAPr/AAAQAAAADQAAAAoAAAD3/wAABgAAAPb/AADf/wAA/v8AAPL/AAD6/wAAFAAAAAQAAAAEAAAAGwAAAAEAAAAMAAAAIAAAAAIAAAAdAAAAGAAAAAIAAAAcAAAAEgAAAAcAAAAeAAAADwAAAAQAAAAeAAAABAAAAAYAAAAZAAAAAQAAAA4AAAATAAAA/v8AAAoAAAAOAAAA+/8AAAsAAAAJAAAA+f8AAAsAAAABAAAA+f8AAAoAAAD9/wAA+v8AAAcAAAD5/wAA+v8AAAUAAAD3/wAA/f8AAAQAAAD2/wAAAAAAAAEAAAD3/wAAAgAAAAAAAAD4/wAAAwAAAP7/AAD6/wAABAAAAP3/AAD8/wAABAAAAPv/AAD+/wAAAwAAAPv/AAD//wAAAQAAAPv/AAAAAAAAAAAAAPv/AAACAAAA//8AAPz/AAACAAAA/v8AAP3/AAACAAAA/f8AAP7/AAABAAAA/f8AAP//AAABAAAA/f8AAAAAAAAAAAAA/v8AAAEAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA"]},function(A,t,e){"use strict";t.getBrowserInfo=function(){const A=navigator.userAgent;let t,e=A.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*([\d\.]+)/i)||[];if(/trident/i.test(e[1]))return t=/\brv[ :]+(\d+)/g.exec(A)||[],{name:"IE",version:t[1]||""};if("Chrome"===e[1]&&null!=(t=A.match(/\bOPR|Edge\/(\d+)/)))return{name:"Opera",version:t[1]};e=e[2]?[e[1],e[2]]:[navigator.appName,navigator.appVersion,"-?"],null!=(t=A.match(/version\/([\d.]+)/i))&&e.splice(1,1,t[1]);let i=A.match(/android|ipad|iphone/i);return i||(i=A.match(/cros|linux|mac os x|windows/i)),{name:e[0],version:e[1],platform:i?i[0]:"unknown"}},t.patchSafari=function(){window.webkitAudioContext&&window.webkitOfflineAudioContext&&(window.AudioContext=window.webkitAudioContext,window.OfflineAudioContext=window.webkitOfflineAudioContext)}},function(A,t,e){"use strict";A.exports="1.0.6"}])})},function(A,t,e){"use strict";A.exports="0.0.4"}])}); \ No newline at end of file diff --git a/src/renderer/js/showdown.min.js b/src/renderer/lib/showdown.min.js similarity index 100% rename from src/renderer/js/showdown.min.js rename to src/renderer/lib/showdown.min.js diff --git a/src/renderer/js/smoothscroll.js b/src/renderer/lib/smoothscroll.js similarity index 100% rename from src/renderer/js/smoothscroll.js rename to src/renderer/lib/smoothscroll.js diff --git a/src/renderer/js/sortable.min.js b/src/renderer/lib/sortable.min.js similarity index 100% rename from src/renderer/js/sortable.min.js rename to src/renderer/lib/sortable.min.js diff --git a/src/renderer/js/velocity.min.js b/src/renderer/lib/velocity.min.js similarity index 100% rename from src/renderer/js/velocity.min.js rename to src/renderer/lib/velocity.min.js diff --git a/src/renderer/js/vue-horizontal.js b/src/renderer/lib/vue-horizontal.js similarity index 100% rename from src/renderer/js/vue-horizontal.js rename to src/renderer/lib/vue-horizontal.js diff --git a/src/renderer/js/vue-observe-visibility.min.js b/src/renderer/lib/vue-observe-visibility.min.js similarity index 100% rename from src/renderer/js/vue-observe-visibility.min.js rename to src/renderer/lib/vue-observe-visibility.min.js diff --git a/src/renderer/js/vue.dev.js b/src/renderer/lib/vue.dev.js similarity index 100% rename from src/renderer/js/vue.dev.js rename to src/renderer/lib/vue.dev.js diff --git a/src/renderer/js/vue.js b/src/renderer/lib/vue.js similarity index 100% rename from src/renderer/js/vue.js rename to src/renderer/lib/vue.js diff --git a/src/renderer/js/vuedraggable.umd.min.js b/src/renderer/lib/vuedraggable.umd.min.js similarity index 100% rename from src/renderer/js/vuedraggable.umd.min.js rename to src/renderer/lib/vuedraggable.umd.min.js diff --git a/src/renderer/js/vuex.min.js b/src/renderer/lib/vuex.min.js similarity index 100% rename from src/renderer/js/vuex.min.js rename to src/renderer/lib/vuex.min.js diff --git a/src/renderer/main/app.js b/src/renderer/main/app.js new file mode 100644 index 00000000..c3c2b59b --- /dev/null +++ b/src/renderer/main/app.js @@ -0,0 +1,30 @@ +import { app } from "./vueapp.js" +import {CiderCache} from './cidercache.js' +import {CiderFrontAPI} from './ciderfrontapi.js' +import {simulateGamepad} from './gamepad.js' +import {CiderAudio} from '../audio/audio.js' +import {Events} from './events.js' +import { wsapi } from "./wsapi_interop.js" +import { MusicKitTools } from "./musickittools.js" + + +// Define window objects +window.app = app +window.MusicKitTools = MusicKitTools +window.CiderAudio = CiderAudio +window.CiderCache = CiderCache +window.CiderFrontAPI = CiderFrontAPI +window.wsapi = wsapi + +// Mount Vue to #app +app.$mount("#app") + +// Init CiderAudio +if (app.cfg.advanced.AudioContext){ + CiderAudio.init() +} + +// Import gamepad support +app.simulateGamepad = simulateGamepad + +Events.InitEvents() \ No newline at end of file diff --git a/src/renderer/main/cidercache.js b/src/renderer/main/cidercache.js new file mode 100644 index 00000000..c28550c1 --- /dev/null +++ b/src/renderer/main/cidercache.js @@ -0,0 +1,24 @@ +const CiderCache = { + async getCache(file) { + let cache = await ipcRenderer.sendSync("get-cache", file) + if (isJson(cache)) { + cache = JSON.parse(cache) + if (Object.keys(cache).length === 0) { + cache = false + } + } else { + cache = false + } + return cache + }, + async putCache(file, data) { + console.log(`Caching ${file}`) + ipcRenderer.invoke("put-cache", { + file: file, + data: JSON.stringify(data) + }) + return true + } +} + +export {CiderCache} \ No newline at end of file diff --git a/src/renderer/main/ciderfrontapi.js b/src/renderer/main/ciderfrontapi.js new file mode 100644 index 00000000..fc51f884 --- /dev/null +++ b/src/renderer/main/ciderfrontapi.js @@ -0,0 +1,16 @@ +const CiderFrontAPI = { + Objects: { + MenuEntry: function () { + this.id = "" + this.name = "" + this.onClick = () => { + } + } + }, + AddMenuEntry(entry) { + app.pluginMenuEntries.push(entry) + app.pluginInstalled = true + } +} + +export {CiderFrontAPI} \ No newline at end of file diff --git a/src/renderer/main/events.js b/src/renderer/main/events.js new file mode 100644 index 00000000..23236e41 --- /dev/null +++ b/src/renderer/main/events.js @@ -0,0 +1,74 @@ +const Events = { + InitEvents() { + const app = window.app + // Key binds + document.addEventListener('keydown', function (e) { + if (e.keyCode === 70 && e.ctrlKey) { + app.$refs.searchInput.focus() + app.$refs.searchInput.select() + } + }); + +// add event listener for when window.location.hash changes + window.addEventListener("hashchange", function () { + app.appRoute(window.location.hash) + }); + + // Key bind to unjam MusicKit in case it fails: CTRL+F10 + + document.addEventListener('keydown', function (event) { + if (event.ctrlKey && event.keyCode == 121) { + try { + app.mk._services.mediaItemPlayback._currentPlayer.stop() + } catch (e) { + } + try { + app.mk._services.mediaItemPlayback._currentPlayer.destroy() + } catch (e) { + } + } + }); + + window.addEventListener("mouseup", (e) => { + if (e.button === 3) { + e.preventDefault() + app.navigateBack() + } else if (e.button === 4) { + e.preventDefault() + app.navigateForward() + } + }); + + document.addEventListener('keydown', function (event) { + if (event.ctrlKey && event.keyCode == 122) { + try { + ipcRenderer.send('detachDT', '') + } catch (e) { + } + } + }); + + // Hang Timer + app.hangtimer = setTimeout(() => { + if (confirm("Cider is not responding. Reload the app?")) { + window.location.reload() + } + }, 10000) + +// Refresh Focus + function refreshFocus() { + if (document.hasFocus() == false) { + app.windowFocus(false) + } else { + app.windowFocus(true) + } + setTimeout(refreshFocus, 200); + } + + app.getHTMLStyle() + + refreshFocus(); + } +} + +export {Events} \ No newline at end of file diff --git a/src/renderer/main/gamepad.js b/src/renderer/main/gamepad.js new file mode 100644 index 00000000..a902cd5f --- /dev/null +++ b/src/renderer/main/gamepad.js @@ -0,0 +1,327 @@ +function simulateGamepad () { + const app = window.app + app.chrome.showCursor = true + let cursorPos = [0, 0]; + let intTabIndex = 0 + const cursorSpeedPvt = 8 + const cursorSize = 16 + let scrollSpeed = 8 + let buttonPressDelay = 500 + let stickDeadZone = 0.2 + let scrollGroup = null + let scrollGroupY = null + let elementFocusEnabled = true + let start; + + let cursorSpeed = cursorSpeedPvt + + let lastButtonPress = { + + } + + var sounds = { + Confirm: new Audio("./sounds/confirm.ogg"), + Menu: new Audio("./sounds/btn1.ogg"), + Hover: new Audio("./sounds/hover.ogg") + } + + let element = document.elementFromPoint(0, 0) + let elementType = 0 + + function appLoop() { + var gamepads = navigator.getGamepads ? navigator.getGamepads() : (navigator.webkitGetGamepads ? navigator.webkitGetGamepads() : []); + if (!gamepads) { + return; + } + + var gp = gamepads[0]; + + // LEFT STICK + if (gp.axes[0] > stickDeadZone) { + cursorPos[0] += (gp.axes[0] * cursorSpeed) + } else if (gp.axes[0] < -stickDeadZone) { + cursorPos[0] += (gp.axes[0] * cursorSpeed) + } + + if (gp.axes[1] > stickDeadZone) { + cursorPos[1] += (gp.axes[1] * cursorSpeed) + } else if (gp.axes[1] < -stickDeadZone) { + cursorPos[1] += (gp.axes[1] * cursorSpeed) + } + + if (cursorPos[0] < cursorSize) { + cursorPos[0] = cursorSize + } + if (cursorPos[1] < cursorSize) { + cursorPos[1] = cursorSize + } + if (cursorPos[0] > window.innerWidth - cursorSize) { + cursorPos[0] = window.innerWidth - cursorSize + } + if (cursorPos[1] > window.innerHeight - cursorSize) { + cursorPos[1] = window.innerHeight - cursorSize + } + + + // RIGHT STICK. + if (scrollGroupY) { + if (gp.axes[3] > stickDeadZone) { + $(scrollGroupY).scrollTop($(scrollGroupY).scrollTop() + (gp.axes[3] * scrollSpeed)) + elementFocusEnabled = false + } else if (gp.axes[3] < -stickDeadZone) { + $(scrollGroupY).scrollTop($(scrollGroupY).scrollTop() + (gp.axes[3] * scrollSpeed)) + elementFocusEnabled = false + } else { + elementFocusEnabled = true + } + } + + + + if (scrollGroup) { + if (gp.axes[2] > stickDeadZone) { + $(scrollGroup).scrollLeft($(scrollGroup).scrollLeft() + (gp.axes[2] * scrollSpeed)) + elementFocusEnabled = false + } else if (gp.axes[2] < -stickDeadZone) { + $(scrollGroup).scrollLeft($(scrollGroup).scrollLeft() + (gp.axes[2] * scrollSpeed)) + elementFocusEnabled = false + } else { + elementFocusEnabled = true + } + } + + + $(".cursor").css({ + top: cursorPos[1] + "px", + left: cursorPos[0] + "px", + display: "block" + }) + + // A BUTTON + if (gp.buttons[0].pressed) { + if (!lastButtonPress["A"]) { + lastButtonPress["A"] = 0 + } + if (Date.now() - lastButtonPress["A"] > buttonPressDelay) { + lastButtonPress["A"] = Date.now() + sounds.Confirm.play() + if (elementType == 0) { + document.activeElement.dispatchEvent(new Event("click")) + document.activeElement.dispatchEvent(new Event("controller-click")) + } else { + element.dispatchEvent(new Event("click")) + element.dispatchEvent(new Event("controller-click")) + } + } + } + + // B BUTTON + if (gp.buttons[1].pressed) { + + if (!lastButtonPress["B"]) { + lastButtonPress["B"] = 0 + } + if (Date.now() - lastButtonPress["B"] > buttonPressDelay) { + lastButtonPress["B"] = Date.now() + if (elementType == 0) { + document.activeElement.dispatchEvent(new Event("contextmenu")) + setTimeout(() => { + if ($(".menu-option").length > 0) { + let bounds = $(".menu-option")[0].getBoundingClientRect() + cursorPos[0] = bounds.left + (bounds.width / 2) + cursorPos[1] = bounds.top + (bounds.height / 2) + } + }, 100) + } else { + element.dispatchEvent(new Event("contextmenu")) + } + } + + } + + // right bumper + if (gp.buttons[5].pressed) { + if (!lastButtonPress["RB"]) { + lastButtonPress["RB"] = 0 + } + if (Date.now() - lastButtonPress["RB"] > buttonPressDelay) { + lastButtonPress["RB"] = Date.now() + app.navigateForward() + + } + } + + // left bumper + if (gp.buttons[4].pressed) { + if (!lastButtonPress["LB"]) { + lastButtonPress["LB"] = 0 + } + if (Date.now() - lastButtonPress["LB"] > buttonPressDelay) { + lastButtonPress["LB"] = Date.now() + app.navigateBack() + + } + } + + + + // cursor hover + if (elementFocusEnabled) { + element = document.elementFromPoint(cursorPos[0], cursorPos[1]) + } + + if (element) { + + let closest = element.closest("[tabindex], input, button, a") + + // VERT SCROLL + let scrollGroupCloY = element.closest(`[scrollaxis="y"]`) + if (scrollGroupCloY) { + scrollGroupY = scrollGroupCloY + } + + + // HOZ SCROLL + let scrollGroupClo = element.closest(".v-hl-container") + + if (scrollGroupClo) { + if (scrollGroupClo.classList.contains("v-hl-container")) { + scrollGroup = scrollGroupClo + scrollGroup.style["scroll-snap-type"] = "unset" + } else { + scrollGroup.style["scroll-snap-type"] = "" + scrollGroup = null + } + } + + if (closest) { + elementType = 0 + closest.focus() + } else { + if (closest) { + closest.blur() + } + elementType = 1 + element.focus() + } + cursorSpeed = cursorSpeedPvt + if (!element.classList.contains("app-chrome") + && !element.classList.contains("app-content")) { + cursorSpeed = cursorSpeedPvt + } + // console.log($._data($(element), "events")) + } else { + cursorSpeed = 12 + } + // console.log(gp.axes[0], gp.axes[1]) + start = requestAnimationFrame(appLoop); + } + +// controller pairing + notyf.error("Press the button on your controller to pair it to Cider.") + window.addEventListener("gamepadconnected", function (e) { + console.log("Gamepad connected at index %d: %s. %d buttons, %d axes.", + e.gamepad.index, e.gamepad.id, + e.gamepad.buttons.length, e.gamepad.axes.length); + notyf.success("Pairing successful!") + appLoop() + }, { once: true }); + + document.addEventListener("keydown", (e) => { + sounds.Confirm.currentTime = 0 + sounds.Menu.currentTime = 0 + sounds.Hover.currentTime = 0 + let tabbable = $("[tabindex]") + console.log(e.key) + switch (e.key) { + default: + break; + case "ArrowLeft": + e.preventDefault() + + cursorPos[0] -= cursorSpeed + break; + case "ArrowRight": + e.preventDefault() + + cursorPos[0] += cursorSpeed + break; + case "ArrowUp": + e.preventDefault() + + cursorPos[1] -= cursorSpeed + // sounds.Hover.play() + // if(intTabIndex <= 0) { + // intTabIndex = 0 + // }else{ + // intTabIndex-- + // } + // $(tabbable[intTabIndex]).focus() + // $("#app-content").scrollTop($(document.activeElement).offset().top) + break; + case "ArrowDown": + e.preventDefault() + + cursorPos[1] += cursorSpeed + // if(intTabIndex < tabbable.length) { + // intTabIndex++ + // }else{ + // intTabIndex = tabbable.length + // } + // $(tabbable[intTabIndex]).focus() + // $("#app-content").scrollTop($(document.activeElement).offset().top) + break; + case "c": + app.resetState() + break; + case "x": + // set cursorPos to the top right of the screen + // sounds.Menu.play() + if (elementType == 0) { + document.activeElement.dispatchEvent(new Event("contextmenu")) + } else { + element.dispatchEvent(new Event("contextmenu")) + } + + e.preventDefault() + break; + case "z": + sounds.Confirm.play() + if (elementType == 0) { + document.activeElement.dispatchEvent(new Event("click")) + document.activeElement.dispatchEvent(new Event("controller-click")) + } else { + element.dispatchEvent(new Event("click")) + element.dispatchEvent(new Event("controller-click")) + } + + e.preventDefault() + break; + } + + $(".cursor").css({ + top: cursorPos[1] + "px", + left: cursorPos[0] + "px" + }) + function lerp(a, b, n) { + return (1 - n) * a + n * b + } + + + element = document.elementFromPoint(cursorPos[0], cursorPos[1]) + + if (element) { + let closest = element.closest("[tabindex], input, button, a") + if (closest) { + elementType = 0 + closest.focus() + } else { + elementType = 1 + element.focus() + } + } + console.log(element) + }); +} + +export {simulateGamepad} \ No newline at end of file diff --git a/src/renderer/main/musickittools.js b/src/renderer/main/musickittools.js new file mode 100644 index 00000000..7e368fa5 --- /dev/null +++ b/src/renderer/main/musickittools.js @@ -0,0 +1,27 @@ +const MusicKitTools = { + async v3Continuous (href, options = {}, reqOptions = {}) { + let returnData = [] + async function sendReq(href, options) { + const response = await app.mk.api.v3.music(href, options) + + returnData = returnData.concat(response.data.data) + if(response.data.next) { + await sendReq(response.data.next, options) + } + } + + await sendReq(href, options) + + return returnData + }, + getHeader() { + return new Headers({ + Authorization: 'Bearer ' + MusicKit.getInstance().developerToken, + Accept: 'application/json', + 'Content-Type': 'application/json', + 'Music-User-Token': '' + MusicKit.getInstance().musicUserToken + }); + } +} + +export { MusicKitTools } \ No newline at end of file diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js new file mode 100644 index 00000000..f4ca97b2 --- /dev/null +++ b/src/renderer/main/vueapp.js @@ -0,0 +1,4033 @@ +import {store} from './vuex-store.js'; + +Vue.use(VueHorizontal); +Vue.use(VueObserveVisibility); +Vue.use(BootstrapVue) +/* @namespace */ +const app = new Vue({ + store: store, + data: { + version: ipcRenderer.sendSync("get-version"), + appMode: "player", + ipcRenderer: ipcRenderer, + cfg: ipcRenderer.sendSync("getStore"), + isDev: ipcRenderer.sendSync("is-dev"), + drawertest: false, + platform: "", + mk: {}, + quickPlayQuery: "", + pluginInstalled: false, + pluginMenuEntries: [], + lz: ipcRenderer.sendSync("get-i18n", "en_US"), + lzListing: ipcRenderer.sendSync("get-i18n-listing"), + search: { + term: "", + hints: [], + showHints: false, + results: {}, + resultsSocial: {}, + limit: 10 + }, + fullscreenLyrics: false, + playerLCD: { + playbackDuration: 0, + desiredDuration: 0, + userInteraction: false + }, + drawer: { + open: false, + panel: "" + }, + browsepage: [], + listennow: [], + madeforyou: [], + radio: { + personal: [] + }, + mklang: 'en', + webview: { + url: "", + title: "", + loading: false + }, + showingPlaylist: [], + appleCurator: [], + artistPage: { + data: {}, + }, + library: { + backgroundNotification: { + show: false, + message: "", + total: 0, + progress: 0 + }, + songs: { + sortingOptions: { + "albumName": "0", + "artistName": "0", + "name": "0", + "genre": "0", + "releaseDate": "0", + "durationInMillis": "0", + "dateAdded": "0" + }, + sorting: "name", + sortOrder: "asc", + listing: [], + meta: { total: 0, progress: 0 }, + search: "", + displayListing: [], + downloadState: 0 // 0 = not started, 1 = in progress, 2 = complete, 3 = empty library + }, + albums: { + sortingOptions: { + "albumName": "0", + "artistName": "0", + "name": "0", + "genre": "0" + }, + viewAs: 'covers', + sorting: ["dateAdded", "name"], // [0] = recentlyadded page, [1] = albums page + sortOrder: ["desc", "asc"], // [0] = recentlyadded page, [1] = albums page + listing: [], + meta: { total: 0, progress: 0 }, + search: "", + displayListing: [], + downloadState: 0 // 0 = not started, 1 = in progress, 2 = complete, 3 = empty library + }, + artists: { + sortingOptions: { + "artistName": "0", + "name": "0", + "genre": "0", + "releaseDate": "0" + }, + viewAs: 'covers', + sorting: ["dateAdded", "name"], // [0] = recentlyadded page, [1] = albums page + sortOrder: ["desc", "asc"], // [0] = recentlyadded page, [1] = albums page + listing: [], + meta: { total: 0, progress: 0 }, + search: "", + displayListing: [], + downloadState: 0 // 0 = not started, 1 = in progress, 2 = complete, 3 = empty library + }, + }, + playlists: { + listing: [], + details: {}, + loadingState: 0, // 0 loading, 1 loaded, 2 error + id: "", + trackMapping: {} + }, + webremoteurl: "", + webremoteqr: "", + mxmtoken: "", + mkIsReady: false, + playerReady: false, + animateBackground: false, + currentArtUrl: '', + currentArtUrlRaw: '', + lyricon: false, + currentTrackID: '', + currentTrackIDBG: '', + lyrics: [], + currentLyricsLine: 0, + lyriccurrenttime: 0, + richlyrics: [], + lyricsMediaItem: {}, + lyricsDebug: { + current: 0, + start: 0, + end: 0 + }, + v3: { + requestBody: { + platform: "web" + } + }, + tmpHeight: '', + tmpWidth: '', + tmpVar: [], + notification: false, + chrome: { + appliedTheme: { + location: "", + info: {} + }, + desiredPageTransition: "wpfade_transform", + hideUserInfo: ipcRenderer.sendSync("is-dev") || false, + artworkReady: false, + userinfo: { + "id": "", + "attributes": { + "name": "Cider User", + "handle": "CiderUser", + "artwork": { "url": "./assets/logocut.png" } + } + }, + menuOpened: false, + maximized: false, + drawerOpened: false, + drawerState: "queue", + topChromeVisible: true, + progresshover: false, + windowControlPosition: "right", + contentAreaScrolling: true, + showCursor: false + }, + collectionList: { + response: {}, + title: "", + type: "" + }, + prevButtonBackIndicator: false, + currentSongInfo: {}, + page: "", + pageHistory: [], + songstest: false, + hangtimer: null, + selectedMediaItems: [], + routes: ["browse", "listen_now", "radio"], + musicBaseUrl: "https://api.music.apple.com/", + modals: { + addToPlaylist: false, + spatialProperties: false, + qrcode: false, + equalizer: false, + audioSettings: false, + pluginMenu: false, + audioControls: false, + showPlaylist: false, + castMenu: false + }, + socialBadges: { + badgeMap: {}, + version: "", + mediaItems: [], + mediaItemDLState: 0 // 0 = not started, 1 = in progress, 2 = complete + }, + menuPanel: { + visible: false, + event: null, + content: { + name: "", + items: {}, + headerItems: {} + } + }, + pauseButtonTimer: null, + activeCasts: [] + }, + watch: { + cfg: { + handler: function (val, oldVal) { + console.log(`cfg changed from ${oldVal} to ${val}`); + ipcRenderer.send("setStore", val); + }, + deep: true + }, + page: () => { + document.getElementById("app-content").scrollTo(0, 0); + app.resetState() + }, + showingPlaylist: () => { + if (!app.modals.showPlaylist) { + document.getElementById("app-content").scrollTo(0, 0); + app.resetState() + } + }, + artistPage: () => { + document.getElementById("app-content").scrollTo(0, 0); + app.resetState() + } + }, + methods: { + songLinkShare(amUrl) { + notyf.open({ type: "info", className: "notyf-info", message: app.getLz('term.song.link.generate') }) + let self = this + let httpRequest = new XMLHttpRequest(); + httpRequest.open('GET', `https://api.song.link/v1-alpha.1/links?url=${amUrl}&userCountry=US`, true); + httpRequest.send(); + httpRequest.onreadystatechange = function () { + if (httpRequest.readyState === 4) { + if (httpRequest.status === 200) { + let response = JSON.parse(httpRequest.responseText); + console.log(response); + self.copyToClipboard(response.pageUrl) + } else { + console.log('There was a problem with the request.'); + notyf.error(app.getLz('term.requestError')) + } + } + } + }, + mainMenuVisibility(val) { + if (val) { + (this.mk.isAuthorized) ? this.chrome.menuOpened = !this.chrome.menuOpened : false; + if (!this.mk.isAuthorized) { + this.mk.authorize() + } + } else { + setTimeout(() => { + this.chrome.menuOpened = false + }, 100) + } + }, + stringTemplateParser(expression, valueObj) { + const templateMatcher = /{{\s?([^{}\s]*)\s?}}/g; + let text = expression.replace(templateMatcher, (substring, value, index) => { + value = valueObj[value]; + return value; + }); + return text + // stringTemplateParser('my name is {{name}} and age is {{age}}', {name: 'Tom', age:100}) + }, + async setLz(lang) { + if (lang == "") { + lang = this.cfg.general.language + } + this.lz = ipcRenderer.sendSync("get-i18n", lang) + this.mklang = await this.MKJSLang() + }, + /** + * Grabs translation for localization. + * @param {string} message - The key to grab the translated term + * @param {object} options - Optional options + * @author booploops#7139 + * @memberOf app + */ + getLz(message, options = {}) { + if (this.lz[message]) { + if (options["count"]) { + if (typeof this.lz[message] === "object") { + let type = window.fastPluralRules.getPluralFormNameForCardinalByLocale(this.cfg.general.language.replace("_", "-"), options["count"]); + return this.lz[message][type] ?? ((this.lz[message])[Object.keys(this.lz[message])[0]] ?? this.lz[message]) + } else { + // fallback English plural forms ( old i18n ) + if (options["count"] > 1) { + return this.lz[message + "s"] ?? this.lz[message] + } else { + return this.lz[message] ?? this.lz[message + "s"] + } + } + } else if (typeof this.lz[message] === "object") { + return (this.lz[message])[Object.keys(this.lz[message])[0]] + } + return this.lz[message] + } else { + return message + } + }, + setLzManual() { + app.$data.library.songs.sortingOptions = { + "albumName": app.getLz('term.sortBy.album'), + "artistName": app.getLz('term.sortBy.artist'), + "name": app.getLz('term.sortBy.name'), + "genre": app.getLz('term.sortBy.genre'), + "releaseDate": app.getLz('term.sortBy.releaseDate'), + "durationInMillis": app.getLz('term.sortBy.duration'), + "dateAdded": app.getLz('term.sortBy.dateAdded') + } + + app.$data.library.albums.sortingOptions = { + "albumName": app.getLz('term.sortBy.album'), + "artistName": app.getLz('term.sortBy.artist'), + "name": app.getLz('term.sortBy.name'), + "genre": app.getLz('term.sortBy.genre') + } + + app.$data.library.artists.sortingOptions = { + "artistName": app.getLz('term.sortBy.artist'), + "name": app.getLz('term.sortBy.name'), + "genre": app.getLz('term.sortBy.genre'), + "releaseDate": app.getLz('term.sortBy.releaseDate') + } + }, + async showSocialListeningTo() { + let contentIds = Object.keys(app.socialBadges.badgeMap) + app.showCollection({ data: this.socialBadges.mediaItems }, "Friends Listening To", "albums") + if (this.socialBadges.mediaItemDLState == 1 || this.socialBadges.mediaItemDLState == 2) { + return + } + this.socialBadges.mediaItemDLState = 2 + await asyncForEach(contentIds, async (item) => { + try { + let type = "albums" + if (item.includes("pl.")) { + type = "playlists" + } + if (item.includes("ra.")) { + type = "stations" + } + let found = await app.mk.api.v3.music(`/v1/catalog/us/${type}/${item}`) + this.socialBadges.mediaItems.push(found.data.data[0]) + } catch (e) { + + } + }) + }, + async openAppleMusicURL(url) { + let properties = MusicKit.formattedMediaURL(url) + let item = { + id: properties.contentId, + attributes: { + playParams: { + id: properties.contentId, + kind: properties.kind, + } + }, + type: properties.kind, + kind: properties.kind + } + app.routeView(item) + }, + saveFile(fileName, urlFile) { + let a = document.createElement("a"); + a.style = "display: none"; + document.body.appendChild(a); + a.href = urlFile; + a.download = fileName; + a.click(); + window.URL.revokeObjectURL(url); + a.remove(); + }, + async showMenuPanel(data, event) { + app.menuPanel.visible = true; + app.menuPanel.content.name = data.name ?? ""; + app.menuPanel.content.items = data.items ?? {}; + app.menuPanel.content.headerItems = data.headerItems ?? {}; + if (event) { + app.menuPanel.event = event; + } + }, + async getSvgIcon(url) { + let response = await fetch(url); + let data = await response.text(); + return data; + }, + getSocialBadges(cb = () => { + }) { + let self = this + try { + app.mk.api.v3.music("/v1/social/badging-map").then(data => { + self.socialBadges.badgeMap = data.data.results.badgingMap + cb(data.data.results.badgingMap) + }) + } catch (ex) { + this.socialBadges.badgeMap = {} + } + }, + addFavorite(id, type) { + this.cfg.home.favoriteItems.push({ + id: id, + type: type + }); + }, + modularUITest(val = false) { + this.fullscreenLyrics = val; + if (val) { + document.querySelector("#app-main").classList.add("modular-fs") + } else { + document.querySelector("#app-main").classList.remove("modular-fs") + } + }, + navigateBack() { + this.chrome.desiredPageTransition = "wpfade_transform_backwards" + return new Promise((resolve, reject) => { + history.back() + setTimeout(() => { + + + resolve(this.chrome.desiredPageTransition = "wpfade_transform") + }, 100) + }) + }, + navigateForward() { + history.forward() + }, + getHTMLStyle() { + // document.querySelector("html").style.background = "#222"; + document.querySelector("body").classList.add("notransparency") + }, + resetState() { + this.menuPanel.visible = false; + app.selectedMediaItems = []; + this.chrome.contentAreaScrolling = true + for (let key in app.modals) { + app.modals[key] = false; + } + }, + promptAddToPlaylist() { + app.modals.addToPlaylist = true; + }, + async addSelectedToNewPlaylist() { + let self = this + let pl_items = [] + for (let i = 0; i < self.selectedMediaItems.length; i++) { + if (self.selectedMediaItems[i].kind == "song" || self.selectedMediaItems[i].kind == "songs") { + self.selectedMediaItems[i].kind = "songs" + pl_items.push({ + id: self.selectedMediaItems[i].id, + type: self.selectedMediaItems[i].kind + }) + } else if ((self.selectedMediaItems[i].kind == "album" || self.selectedMediaItems[i].kind == "albums") && self.selectedMediaItems[i].isLibrary != true) { + self.selectedMediaItems[i].kind = "albums" + let res = await self.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/albums/${self.selectedMediaItems[i].id}/tracks`); + let ids = res.data.data.map(function (i) { + return { id: i.id, type: i.type } + }) + pl_items = pl_items.concat(ids) + } else if (self.selectedMediaItems[i].kind == "library-song" || self.selectedMediaItems[i].kind == "library-songs") { + self.selectedMediaItems[i].kind = "library-songs" + pl_items.push({ + id: self.selectedMediaItems[i].id, + type: self.selectedMediaItems[i].kind + }) + } else if ((self.selectedMediaItems[i].kind == "library-album" || self.selectedMediaItems[i].kind == "library-albums") || (self.selectedMediaItems[i].kind == "album" && self.selectedMediaItems[i].isLibrary == true)) { + self.selectedMediaItems[i].kind = "library-albums" + let res = await self.mk.api.v3.music(`/v1/me/library/albums/${self.selectedMediaItems[i].id}/tracks`); + let ids = res.data.data.map(function (i) { + return { id: i.id, type: i.type } + }) + pl_items = pl_items.concat(ids) + } else { + pl_items.push({ + id: self.selectedMediaItems[i].id, + type: self.selectedMediaItems[i].kind + }) + } + } + this.modals.addToPlaylist = false + app.newPlaylist(app.getLz('term.newPlaylist'), pl_items) + }, + async addSelectedToPlaylist(playlist_id) { + let self = this + let pl_items = [] + for (let i = 0; i < self.selectedMediaItems.length; i++) { + if (self.selectedMediaItems[i].kind == "song" || self.selectedMediaItems[i].kind == "songs") { + self.selectedMediaItems[i].kind = "songs" + pl_items.push({ + id: self.selectedMediaItems[i].id, + type: self.selectedMediaItems[i].kind + }) + } else if ((self.selectedMediaItems[i].kind == "album" || self.selectedMediaItems[i].kind == "albums") && self.selectedMediaItems[i].isLibrary != true) { + self.selectedMediaItems[i].kind = "albums" + let res = await self.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/albums/${self.selectedMediaItems[i].id}/tracks`); + let ids = res.data.data.map(function (i) { + return { id: i.id, type: i.type } + }) + pl_items = pl_items.concat(ids) + } else if (self.selectedMediaItems[i].kind == "library-song" || self.selectedMediaItems[i].kind == "library-songs") { + self.selectedMediaItems[i].kind = "library-songs" + pl_items.push({ + id: self.selectedMediaItems[i].id, + type: self.selectedMediaItems[i].kind + }) + } else if ((self.selectedMediaItems[i].kind == "library-album" || self.selectedMediaItems[i].kind == "library-albums") || (self.selectedMediaItems[i].kind == "album" && self.selectedMediaItems[i].isLibrary == true)) { + self.selectedMediaItems[i].kind = "library-albums" + let res = await self.mk.api.v3.music(`/v1/me/library/albums/${self.selectedMediaItems[i].id}/tracks`); + let ids = res.data.data.map(function (i) { + return { id: i.id, type: i.type } + }) + pl_items = pl_items.concat(ids) + } else { + pl_items.push({ + id: self.selectedMediaItems[i].id, + type: self.selectedMediaItems[i].kind + }) + } + + } + this.modals.addToPlaylist = false + await app.mk.api.v3.music( + `/v1/me/library/playlists/${playlist_id}/tracks`, {}, { + fetchOptions: { + method: "POST", + body: JSON.stringify({ + data: pl_items + }) + } + } + ).then(() => { + if (this.page == 'playlist_' + this.showingPlaylist.id) { + this.getPlaylistFromID(this.showingPlaylist.id, true) + } + }) + }, + async init() { + let self = this + if (this.cfg.visual.theme != "default.less" && this.cfg.visual.theme != "") { + this.setTheme(this.cfg.visual.theme) + } + + this.setLz(this.cfg.general.language) + this.setLzManual() + clearTimeout(this.hangtimer) + this.mk = MusicKit.getInstance() + let needsReload = (typeof localStorage["music.ampwebplay.media-user-token"] == "undefined") + this.mk.authorize().then(() => { + self.mkIsReady = true + if (needsReload) { + document.location.reload() + } + }) + this.$forceUpdate() + if (this.isDev) { + this.mk.privateEnabled = true + // Hide UserInfo if Dev mode + } else { + // Get Hide User from Settings + this.chrome.hideUserInfo = !this.cfg.visual.showuserinfo + this.mk.privateEnabled = this.cfg.general.privateEnabled + } + if (this.cfg.visual.hw_acceleration == "disabled") { + document.body.classList.add("no-gpu") + } + this.mk._services.timing.mode = 0 + this.platform = ipcRenderer.sendSync('cider-platform'); + + this.mklang = await this.MKJSLang() + + try { + // Set profile name + this.chrome.userinfo = (await app.mk.api.v3.music(`/v1/me/social-profile`)).data.data[0] + } catch (err) { + } + + this.mk._bag.features['seamless-audio-transitions'] = this.cfg.audio.seamless_audio + + // API Fallback + if (!this.chrome.userinfo) { + this.chrome.userinfo = { + "id": "", + "attributes": { + "name": "Cider User", + "handle": "CiderUser", + "artwork": { "url": "./assets/logocut.png" } + } + } + } + MusicKitInterop.init() + // Set the volume + + // Check the value of this.cfg.audio.muted + if (!this.cfg.audio.muted) { + // Set the mk.volume to the last stored volume data + this.mk.volume = this.cfg.audio.volume + } else if (this.cfg.audio.muted) { + // Set mk.volume to -1 (setting to 0 wont work, so temp solution setting to -1) + this.mk.volume = -1; + } + // ipcRenderer.invoke('getStoreValue', 'audio.volume').then((value) => { + // self.mk.volume = value + // }) + + // load cached library + let librarySongs = await CiderCache.getCache("library-songs") + let libraryAlbums = await CiderCache.getCache("library-albums") + if (librarySongs) { + this.library.songs.listing = librarySongs + this.library.songs.displayListing = this.library.songs.listing + } + if (libraryAlbums) { + this.library.albums.listing = libraryAlbums + this.library.albums.displayListing = this.library.albums.listing + } + + window.onbeforeunload = function (e) { + window.localStorage.setItem("currentTrack", JSON.stringify(app.mk.nowPlayingItem)) + window.localStorage.setItem("currentTime", JSON.stringify(app.mk.currentPlaybackTime)) + window.localStorage.setItem("currentQueue", JSON.stringify(app.mk.queue.items)) + }; + + if (typeof MusicKit.PlaybackBitrate[app.cfg.audio.quality] !== "string") { + app.mk.bitrate = MusicKit.PlaybackBitrate[app.cfg.audio.quality] + } else { + app.mk.bitrate = 256 + app.cfg.audio.quality = "HIGH" + } + + switch (this.cfg.general.resumeOnStartupBehavior) { + default: + case "local": + // load last played track + try { + let lastItem = window.localStorage.getItem("currentTrack") + let time = window.localStorage.getItem("currentTime") + let queue = window.localStorage.getItem("currentQueue") + if (lastItem != null) { + lastItem = JSON.parse(lastItem) + let kind = lastItem.attributes.playParams.kind; + let truekind = (!kind.endsWith("s")) ? (kind + "s") : kind; + app.mk.setQueue({ + [truekind]: [lastItem.attributes.playParams.id], + parameters: { l: app.mklang } + }) + app.mk.mute() + setTimeout(() => { + app.mk.play().then(() => { + app.mk.pause().then(() => { + if (time != null) { + app.mk.seekToTime(time) + } + app.mk.unmute() + if (queue != null) { + queue = JSON.parse(queue) + if (queue && queue.length > 0) { + let ids = queue.map(e => (e.playParams ? e.playParams.id : (e.attributes.playParams ? e.attributes.playParams.id : ''))) + let i = 0; + if (ids.length > 0) { + for (let id of ids) { + if (!(i == 0 && ids[0] == lastItem.attributes.playParams.id)) { + try { + app.mk.playLater({ songs: [id] }) + } catch (err) { + } + } + i++; + } + } + } + } + + }) + + }) + }, 1500) + + } + + } catch (e) { + console.log(e) + } + break; + case "history": + let history = await app.mk.api.v3.music(`/v1/me/recent/played/tracks`, { l: app.mklang }) + if (history.data.data.length > 0) { + let lastItem = history.data.data[0] + let kind = lastItem.attributes.playParams.kind; + let truekind = (!kind.endsWith("s")) ? (kind + "s") : kind; + app.mk.setQueue({ + [truekind]: [lastItem.attributes.playParams.id], + parameters: { l: app.mklang } + }) + app.mk.mute() + setTimeout(() => { + app.mk.play().then(() => { + app.mk.pause().then(() => { + app.mk.unmute() + }) + }) + }, 1500) + } + + break; + case "disabled": + + break; + } + + MusicKit.getInstance().videoContainerElement = document.getElementById("apple-music-video-player") + + ipcRenderer.on('theme-update', (event, arg) => { + less.refresh(true, true, true) + self.setTheme(self.cfg.visual.theme, true) + }) + + ipcRenderer.on('SoundCheckTag', (event, tag) => { + // let replaygain = self.parseSCTagToRG(tag) + let soundcheck = tag.split(" ") + let numbers = [] + for (let item of soundcheck) { + numbers.push(parseInt(item, 16)) + + } + numbers.shift() + let peak = Math.max(numbers[6], numbers[7]) / 32768.0 + let gain = Math.pow(10, ((-7.63 - (Math.log10(peak) * 20)) / 20))// EBU R 128 Compliant + console.debug(`[Cider][MaikiwiSoundCheck] Peak Gain: '${Math.log10(peak) * 20}' dB | Adjusting '${Math.log10(gain) * 20}' dB`) + try { + //CiderAudio.audioNodes.gainNode.gain.value = (Math.min(Math.pow(10, (replaygain.gain / 20)), (1 / replaygain.peak))) + CiderAudio.audioNodes.gainNode.gain.value = gain + } catch (e) { + } + }) + + ipcRenderer.on('play', function (_event, mode, id) { + if (mode !== 'url') { + self.mk.setQueue({ [mode]: id, parameters: { l: self.mklang } }).then(() => { + app.mk.play() + }) + + } else { + app.openAppleMusicURL(id) + } + }); + + this.mk.addEventListener(MusicKit.Events.playbackStateDidChange, () => { + ipcRenderer.send('wsapi-updatePlaybackState', wsapi.getAttributes()); + }) + + this.mk.addEventListener(MusicKit.Events.playbackTimeDidChange, (a) => { + self.lyriccurrenttime = self.mk.currentPlaybackTime + this.currentSongInfo = a + self.playerLCD.playbackDuration = (self.mk.currentPlaybackTime) + // wsapi + ipcRenderer.send('wsapi-updatePlaybackState', wsapi.getAttributes()); + }) + + this.mk.addEventListener(MusicKit.Events.nowPlayingItemDidChange, (a) => { + if (self.$refs.queue) { + self.$refs.queue.updateQueue(); + } + this.currentSongInfo = a + + + if (app.cfg.audio.normalization) { + // get unencrypted audio previews to get SoundCheck's normalization tag + try { + let previewURL = null + try { + previewURL = app.mk.nowPlayingItem.previewURL + } catch (e) { + } + if (previewURL == null && ((app.mk.nowPlayingItem?._songId ?? (app.mk.nowPlayingItem["songId"] ?? app.mk.nowPlayingItem.relationships.catalog.data[0].id)) != -1)) { + app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/songs/${app.mk.nowPlayingItem?._songId ?? (app.mk.nowPlayingItem["songId"] ?? app.mk.nowPlayingItem.relationships.catalog.data[0].id)}`).then((response) => { + previewURL = response.data.data[0].attributes.previews[0].url + if (previewURL) + ipcRenderer.send('getPreviewURL', previewURL) + }) + } else { + if (previewURL) + ipcRenderer.send('getPreviewURL', previewURL) + } + + } catch (e) { + } + } + + + try { + a = a.item.attributes; + } catch (_) { + } + let type = (self.mk.nowPlayingItem != null) ? self.mk.nowPlayingItem["type"] ?? '' : ''; + + if (type.includes("musicVideo") || type.includes("uploadedVideo") || type.includes("music-movie")) { + document.getElementById("apple-music-video-container").style.display = "block"; + // app.chrome.topChromeVisible = false + } else { + document.getElementById("apple-music-video-container").style.display = "none"; + // app.chrome.topChromeVisible = true + } + self.chrome.artworkReady = false + self.lyrics = [] + self.richlyrics = [] + app.getCurrentArtURL(); + // app.getNowPlayingArtwork(42); + app.getNowPlayingArtworkBG(32); + app.loadLyrics(); + + // Playback Notifications + if (this.cfg.general.playbackNotifications && !document.hasFocus() && a.artistName && a.artwork && a.name) { + if (this.notification) { + this.notification.close() + } + this.notification = new Notification(a.name, { + body: a.artistName, + icon: a.artwork.url.replace('/{w}x{h}bb', '/512x512bb').replace('/2000x2000bb', '/35x35bb'), + silent: true, + }); + } + + }) + + + this.mk.addEventListener(MusicKit.Events.playbackVolumeDidChange, (_a) => { + this.cfg.audio.volume = this.mk.volume + }) + + this.refreshPlaylists(this.isDev) + document.body.removeAttribute("loading") + if (window.location.hash != "") { + this.appRoute(window.location.hash) + } else { + this.page = "home" + } + + this.mediaKeyFixes() + + setTimeout(() => { + this.getSocialBadges() + this.getBrowsePage(); + this.$forceUpdate() + }, 500) + ipcRenderer.invoke("renderer-ready", true) + document.querySelector("#LOADER").remove() + if (this.cfg.general.themeUpdateNotification) { + this.checkForThemeUpdates() + } + }, + async checkForThemeUpdates() { + let self = this + const themes = ipcRenderer.sendSync("get-themes") + await asyncForEach(themes, async (theme) => { + if (theme.commit != "") { + await fetch(`https://api.github.com/repos/${theme.github_repo}/commits`) + .then(res => res.json()) + .then(res => { + if (res[0].sha != theme.commit) { + const notify = notyf.open({ className: "notyf-info", type: "info", message: `[Themes] ${theme.name} has an update available.` }) + notify.on("click", () => { + app.appRoute("themes-github") + notyf.dismiss(notify) + }) + } + }) + } + }) + }, + async setTheme(theme = "", onlyPrefs = false) { + console.log(theme) + if (this.cfg.visual.theme == "") { + this.cfg.visual.theme = "default.less" + } + if (theme == "") { + theme = this.cfg.visual.theme + } else { + this.cfg.visual.theme = "" + this.cfg.visual.theme = theme + } + const info = {} + try { + const infoResponse = await fetch("themes/" + app.cfg.visual.theme.replace("index.less", "theme.json")) + this.chrome.appliedTheme.info = await infoResponse.json() + } catch (e) { + e = null + console.warn("failed to get theme.json") + this.chrome.appliedTheme.info = {} + } + + + if (!onlyPrefs) { + document.querySelector("#userTheme").href = `themes/${this.cfg.visual.theme}` + document.querySelectorAll(`[id*='less']`).forEach(el => { + el.remove() + }); + less.refresh() + } + }, + getThemeDirective(directive = "") { + let directives = {} + if (typeof this.chrome.appliedTheme.info.directives == "object") { + directives = this.chrome.appliedTheme.info.directives + } + if (directives[directive]) { + return this.chrome.appliedTheme.info.directives[directive].value + } else if (this.cfg.visual.directives[directive]) { + return this.cfg.visual.directives.windowLayout + } else { + return "" + } + }, + unauthorize() { + bootbox.confirm(app.getLz('term.confirmLogout'), function (result) { + if (result) { + app.mk.unauthorize() + document.location.reload() + } + }); + }, + getAppClasses() { + let classes = {} + if (this.cfg.advanced.experiments.includes('compactui')) { + classes.compact = true + } + if (this.cfg.visual.window_background_style == "none") { + classes.simplebg = true + } + + if (this.getThemeDirective('windowLayout') == 'twopanel') { + classes.twopanel = true + } + return classes + }, + invokeDrawer(panel) { + if (this.drawer.panel == panel && this.drawer.open) { + if (panel == "lyrics") { + this.lyricon = false + } + this.drawer.panel = "" + this.drawer.open = false + } else { + if (panel == "lyrics") { + this.lyricon = true + } else { + this.lyricon = false + } + this.drawer.open = true + this.drawer.panel = panel + } + }, + select_removeMediaItem(id) { + this.selectedMediaItems.filter(item => item.guid == id).forEach(item => { + this.selectedMediaItems.splice(this.selectedMediaItems.indexOf(item), 1) + }) + }, + select_hasMediaItem(id) { + let found = this.selectedMediaItems.find(item => item.guid == id) + if (found) { + return true + } else { + return false + } + }, + select_selectMediaItem(id, kind, index, guid, library) { + if (!this.select_hasMediaItem(guid)) { + this.selectedMediaItems.push({ + id: id, + kind: kind, + index: index, + guid: guid, + isLibrary: library + }) + } + }, + getPlaylistFolderChildren(id) { + return this.playlists.listing.filter(playlist => { + if (playlist.parent == id) { + return playlist + } + }) + }, + async refreshPlaylists(localOnly = false) { + let self = this + let trackMap = this.cfg.advanced.playlistTrackMapping + let newListing = [] + let trackMapping = {} + const cachedPlaylist = await CiderCache.getCache("library-playlists") + const cachedTrackMapping = await CiderCache.getCache("library-playlists-tracks") + + if (cachedPlaylist) { + console.log("using cached playlists") + this.playlists.listing = cachedPlaylist + self.sortPlaylists() + } else { + console.log("playlist has no cache") + } + + if(cachedTrackMapping) { + console.log("using cached track mapping") + this.playlists.trackMapping = cachedTrackMapping + } + if (localOnly) { + return + } + + this.library.backgroundNotification.message = "Building playlist cache..." + this.library.backgroundNotification.show = true + + async function deepScan(parent = "p.playlistsroot") { + console.log(`scanning ${parent}`) + const playlistData = await app.mk.api.v3.music(`/v1/me/library/playlist-folders/${parent}/children/`) + await asyncForEach(playlistData.data.data, async (playlist) => { + playlist.parent = parent + if( + playlist.type != "library-playlist-folders" && + typeof playlist.attributes.playParams["versionHash"] != "undefined" + ) { + playlist.parent = "p.applemusic" + } + playlist.children = [] + playlist.tracks = [] + try { + if (trackMap) { + let tracks = await app.mk.api.v3.music(playlist.href + "/tracks").catch(e => { + // no tracks + e = null + }) + tracks.data.data.forEach(track => { + if (!trackMapping[track.id]) { + trackMapping[track.id] = [] + } + trackMapping[track.id].push(playlist.id) + + if (typeof track.attributes.playParams.catalogId == "string") { + if (!trackMapping[track.attributes.playParams.catalogId]) { + trackMapping[track.attributes.playParams.catalogId] = [] + } + trackMapping[track.attributes.playParams.catalogId].push(playlist.id) + } + }) + } + } catch (e) { } + if (playlist.type == "library-playlist-folders") { + try { + await deepScan(playlist.id).catch(e => { }) + } catch (e) { + + } + } + newListing.push(playlist) + }) + } + + await deepScan() + + this.library.backgroundNotification.show = false + this.playlists.listing = newListing + self.sortPlaylists() + if (trackMap) { + CiderCache.putCache("library-playlists-tracks", trackMapping) + this.playlists.trackMapping = trackMapping + } + CiderCache.putCache("library-playlists", newListing) + }, + sortPlaylists() { + this.playlists.listing.sort((a, b) => { + if (a.type === "library-playlist-folders" && b.type !== "library-playlist-folders") { + return -1 + } else if (a.type !== "library-playlist-folders" && b.type === "library-playlist-folders") { + return 1 + } else { + return 0 + } + }) + }, + playlistHeaderContextMenu(event) { + let menu = { + items: [{ + name: app.getLz('term.createNewPlaylist'), + action: () => { + this.newPlaylist() + } + }, + { + name: app.getLz('term.createNewPlaylistFolder'), + action: () => { + this.newPlaylistFolder() + } + } + ] + } + this.showMenuPanel(menu, event) + }, + async editPlaylistFolder(id, name = app.getLz('term.newPlaylist')) { + let self = this + this.mk.api.v3.music( + `/v1/me/library/playlist-folders/${id}`, {}, { + fetchOptions: { + method: "PATCH", + body: JSON.stringify({ + attributes: { name: name } + }) + } + } + ).then(res => { + self.refreshPlaylists() + }) + }, + async editPlaylist(id, name = app.getLz('term.newPlaylist')) { + let self = this + this.mk.api.v3.music( + `/v1/me/library/playlists/${id}`, {}, { + fetchOptions: { + method: "PATCH", + body: JSON.stringify({ + attributes: { name: name } + }) + } + } + ).then(res => { + self.refreshPlaylists() + }) + }, + copyToClipboard(str) { + if (navigator.userAgent.includes('Darwin') || navigator.appVersion.indexOf("Mac") != -1) { + this.darwinShare(str) + } else { + notyf.success(app.getLz('term.share.success')) + navigator.clipboard.writeText(str).then(r => console.log("Copied to clipboard.")) + } + }, + newPlaylist(name = app.getLz('term.newPlaylist'), tracks = []) { + let self = this + let request = { + name: name + } + if (tracks.length > 0) { + request.tracks = tracks + } + app.mk.api.v3.music(`/v1/me/library/playlists`, {}, { + fetchOptions: { + method: "POST", + body: JSON.stringify({ + "attributes": { "name": name }, + "relationships": { + "tracks": { "data": tracks }, + } + }) + } + }).then(res => { + res = res.data.data[0] + console.log(res) + self.appRoute(`playlist_` + res.id); + self.showingPlaylist = []; + self.getPlaylistFromID(app.page.substring(9), true) + self.playlists.listing.push({ + id: res.id, + attributes: { + name: name + }, + parent: "p.playlistsroot" + }) + self.sortPlaylists() + setTimeout(() => { + app.refreshPlaylists() + }, 8000) + }) + }, + deletePlaylist(id) { + let self = this + if (confirm(app.getLz('term.deletePlaylist'))) { + app.mk.api.v3.music(`/v1/me/library/playlists/${id}`, {}, { + fetchOptions: { + method: "DELETE" + } + }).then(res => { + // remove this playlist from playlists.listing if it exists + let found = self.playlists.listing.find(item => item.id == id) + if (found) { + self.playlists.listing.splice(self.playlists.listing.indexOf(found), 1) + } + }) + } + }, + async showCollection(response, title, type, requestBody = {}) { + let self = this + console.log(response) + this.collectionList.requestBody = {} + this.collectionList.response = response + this.collectionList.title = title + this.collectionList.type = type + this.collectionList.requestBody = requestBody + app.appRoute("collection-list") + }, + async showArtistView(artist, title, view) { + let response = (await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/artists/${artist}/view/${view}?l=${this.mklang}`, {}, { includeResponseMeta: !0 })).data + console.log(response) + await this.showCollection(response, title, "artists") + }, + async showRecordLabelView(label, title, view) { + let response = (await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/record-labels/${label}/view/${view}?l=${this.mklang}`)).data + await this.showCollection(response, title, "record-labels") + }, + async showSearchView(term, group, title) { + + let requestBody = { + platform: "web", + groups: group, + types: "activities,albums,apple-curators,artists,curators,editorial-items,music-movies,music-videos,playlists,songs,stations,tv-episodes,uploaded-videos,record-labels", + limit: 25, + relate: { + editorialItems: ["contents"] + }, + include: { + albums: ["artists"], + songs: ["artists"], + "music-videos": ["artists"] + }, + extend: "artistUrl", + fields: { + artists: "url,name,artwork,hero", + albums: "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url" + }, + with: "serverBubbles,lyricHighlights", + art: { + "url": "cf" + }, + omit: { + resource: ["autos"] + }, + l: this.mklang + } + let response = await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/search?term=${term}`, requestBody, { + includeResponseMeta: !0 + }) + + console.log('searchres', response) + let responseFormat = { + data: response.data.results[group].data, + next: response.data.results[group].next, + groups: group + } + await this.showCollection(responseFormat, title, "search", requestBody) + }, + async getPlaylistContinuous(response, transient = false) { + response = response.data.data[0] + let self = this + let playlistId = response.id + this.playlists.loadingState = (!transient) ? 0 : 1 + this.showingPlaylist = response + if (!response.relationships?.tracks?.next) { + this.playlists.loadingState = 1 + return + } + + function getPlaylistTracks(next) { + app.apiCall(app.musicBaseUrl + next, res => { + if (self.showingPlaylist.id != playlistId) { + return + } + self.showingPlaylist.relationships.tracks.data = self.showingPlaylist.relationships.tracks.data.concat(res.data) + if (res.next) { + getPlaylistTracks(res.next) + } else { + self.playlists.loadingState = 1 + } + }) + } + + getPlaylistTracks(response.relationships.tracks.next) + + }, + async getPlaylistFromID(id, transient = false) { + let self = this + const params = { + include: "tracks", + platform: "web", + "include[library-playlists]": "catalog,tracks", + "fields[playlists]": "curatorName,playlistType,name,artwork,url,playParams", + "include[library-songs]": "catalog,artists,albums,playParams,name,artwork,url", + "fields[catalog]": "artistUrl,albumUrl,url", + "fields[songs]": "artistUrl,albumUrl,playParams,name,artwork,url,artistName,albumName,durationInMillis", + l: this.mklang + } + if (!transient) { + this.playlists.loadingState = 0; + } + app.mk.api.v3.music(`/v1/me/library/playlists/${id}`, params).then(res => { + self.getPlaylistContinuous(res, transient) + }).catch((e) => { + console.log(e); + try { + app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/playlists/${id}`, params).then(res => { + self.getPlaylistContinuous(res, transient) + }) + } catch (err) { + console.log(err) + } + }) + + }, + async getArtistFromID(id) { + this.page = "" + const artistData = await this.mkapi("artists", false, id, { + "views": "featured-release,full-albums,appears-on-albums,featured-albums,featured-on-albums,singles,compilation-albums,live-albums,latest-release,top-music-videos,similar-artists,top-songs,playlists,more-to-hear,more-to-see", + "extend": "artistBio,bornOrFormed,editorialArtwork,editorialVideo,isGroup,origin,hero", + "extend[playlists]": "trackCount", + "include[songs]": "albums", + "fields[albums]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,editorialVideo,name,playParams,releaseDate,url,trackCount", + "limit[artists:top-songs]": 20, + "art[url]": "f", + l: this.mklang + }, { includeResponseMeta: !0 }) + console.log(artistData.data.data[0]) + this.artistPage.data = artistData.data.data[0] + this.page = "artist-page" + }, + progressBarStyle() { + let val = this.playerLCD.playbackDuration + if (this.playerLCD.desiredDuration > 0) { + val = this.playerLCD.desiredDuration + } + let min = 0 + let max = this.mk.currentPlaybackDuration + let value = (val - min) / (max - min) * 100 + return { + 'background': ('linear-gradient(to right, var(--songProgressColor) 0%, var(--songProgressColor) ' + value + '%, var(--songProgressBackground) ' + value + '%, var(--songProgressBackground) 100%)') + } + }, + async getRecursive(response) { + // if response has a .next() property run it and keep running until .next is null or undefined + // and then return the response concatenated with the results of the next() call + function executeRequest() { + if (response.next) { + return response.next().then(executeRequest) + } else { + return response + } + } + + return executeRequest() + }, + async getRecursive2(response, sendTo) { + let returnData = { + "data": [], + "meta": {} + } + if (response.next) { + console.log("has next") + returnData.data.concat(response.data) + returnData.meta = response.meta + return await this.getRecursive(await response.next()) + } else { + console.log("no next") + returnData.data.concat(response.data) + return returnData + } + }, + async getSearchHints() { + if (this.search.term == "") { + this.search.hints = [] + return + } + let hints = await (await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/search/hints?term=${this.search.term}`)).data.results + this.search.hints = hints ? hints.terms : [] + }, + getSongProgress() { + if (this.playerLCD.userInteraction) { + return this.playerLCD.desiredDuration + } else { + return this.playerLCD.playbackDuration + } + }, + /** + * Converts seconds to dd:hh:mm:ss + * @param time (in seconds) + * @param format (short, long) + * @returns {string} + */ + convertTime(time = 0, format = 'short') { + + if(isNaN(time)) { + time = 0 + } + if (typeof time !== "number") { + time = parseInt(time) + } + + const timeGates = { + 600: 15, // 10 Minutes + 3600: 14, // Hour + 36000: 12, // 10 Hours + } + + const datetime = new Date(time * 1000) + + let returnTime = datetime.toISOString().substring(11, 19); + for (let key in timeGates) { + if (time < key) { + returnTime = datetime.toISOString().substring(timeGates[key], 19) + break + } + } + + // Add the days on the front + let day; + if (time >= 86400) { + day = datetime.toISOString().substring(8, 10) + day = parseInt(day) - 1 + returnTime = day + ":" + returnTime + } + + if (format === 'long') { + const longFormat = [] + + // Seconds + if (datetime.getSeconds() !== 0) { + longFormat.push(`${datetime.getSeconds()} ${app.getLz('term.time.seconds')}`) + } + + // Minutes + if (time >= 60) { + longFormat.push(`${datetime.getMinutes()} ${app.getLz('term.time.minute', options = { count: datetime.getMinutes() })}`) + } + + // Hours + if (time >= 3600) { + longFormat.push(`${datetime.getHours()} ${app.getLz('term.time.hour', options = { count: datetime.getHours() })}`) + } + + // Days + if (time >= 86400) { + longFormat.push(`${day} ${app.getLz('term.time.day', options = { count: day })}`) + } + returnTime = longFormat.reverse().join(', ') + } + + return returnTime + }, + hashCode(str) { + let hash = 0, + i, chr; + if (str.length === 0) return hash; + for (i = 0; i < str.length; i++) { + chr = str.charCodeAt(i); + hash = ((hash << 5) - hash) + chr; + hash |= 0; // Convert to 32bit integer + } + return hash; + }, + appRoute(route) { + if (route == "" || route == "#" || route == "/") { + return; + } + route = route.replace(/#/g, "") + // if the route contains does not include a / then route to the page directly + if (route.indexOf("/") == -1) { + this.page = route + window.location.hash = this.page + // if (this.page == "settings") { + // this.version + // } + return + } + let hash = route.split("/") + let page = hash[0] + let id = hash[1] + let isLibrary = hash[2] ?? false + this.routeView({ + kind: page, + id: id, + attributes: { + playParams: { kind: page, id: id, isLibrary: isLibrary } + } + }) + }, + routeView(item) { + let kind = (item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')) : (item.type ?? '')); + let id = (item.attributes.playParams ? (item.attributes.playParams.id ?? (item.id ?? '')) : (item.id ?? '')); + ; + let isLibrary = item.attributes.playParams ? (item.attributes.playParams.isLibrary ?? false) : false; + if (kind.includes("playlist") || kind.includes("album")) { + app.showingPlaylist = []; + } + if (kind.toString().includes("apple-curator")) { + kind = "appleCurator" + app.getTypeFromID("appleCurator", (id), false, { + platform: "web", + include: "grouping,playlists", + extend: "editorialArtwork", + "art[url]": "f" + }); + window.location.hash = `${kind}/${id}` + document.querySelector("#app-content").scrollTop = 0 + } else if (kind == "editorial-elements") { + console.log(item) + if (item.relationships?.contents?.data != null && item.relationships?.contents?.data.length > 0){ + this.routeView(item.relationships.contents.data[0]) + } else if (item.attributes?.link?.url != null){ + window.open(item.attributes.link.url) + } + + } else if (kind.toString().includes("artist")) { + app.getArtistInfo(id, isLibrary) + window.location.hash = `${kind}/${id}${isLibrary ? "/" + isLibrary : ''}` + document.querySelector("#app-content").scrollTop = 0 + + } else if (kind.toString().includes("record-label") || kind.toString().includes("curator")) { + if (kind.toString().includes("record-label")) { + kind = "recordLabel" + } else { + kind = "curator" + } + app.page = (kind) + "_" + (id); + app.getTypeFromID((kind), (id), (isLibrary), { + extend: "editorialVideo", + include: 'grouping,playlists', + views: 'top-releases,latest-releases,top-artists' + }); + window.location.hash = `${kind}/${id}` + document.querySelector("#app-content").scrollTop = 0 + } else if (!kind.toString().includes("radioStation") && !kind.toString().includes("song") && !kind.toString().includes("musicVideo") && !kind.toString().includes("uploadedVideo") && !kind.toString().includes("music-movie")) { + let params = { + extend: "offers,editorialVideo", + "views": "appears-on,more-by-artist,related-videos,other-versions,you-might-also-like,video-extras,audio-extras", + } + if (kind.includes("playlist")) { + params["include"] = "tracks"; + } + if (kind.includes("album")) { + params["include[albums]"] = "artists" + params["fields[artists]"] = "name,url" + params["fields[albums]"] = "artistName,artistUrl,artwork,contentRating,editorialArtwork,editorialVideo,name,playParams,releaseDate,url,copyright" + } + + if (this.cfg.advanced.experiments.includes('inline-playlists')) { + let showModal = kind.toString().includes("album") || kind.toString().includes("playlist") + if (app.page.includes("playlist") || app.page.includes("album")) { + showModal = false + } + if (showModal) { + app.modals.showPlaylist = true + app.chrome.contentAreaScrolling = false + } else { + app.page = (kind) + "_" + (id); + window.location.hash = `${kind}/${id}${isLibrary ? "/" + isLibrary : ''}` + } + } else { + app.page = (kind) + "_" + (id); + window.location.hash = `${kind}/${id}${isLibrary ? "/" + isLibrary : ''}` + } + + + app.getTypeFromID((kind), (id), (isLibrary), params); + // document.querySelector("#app-content").scrollTop = 0 + } else { + app.playMediaItemById((id), (kind), (isLibrary), item.attributes.url ?? '') + } + }, + prevButton() { + if (!app.prevButtonBackIndicator && app.mk.nowPlayingItem && app.mk.currentPlaybackTime > 2) { + app.prevButtonBackIndicator = true; + try { + clearTimeout(app.pauseButtonTimer) + } catch (e) { + } + app.mk.seekToTime(0); + app.pauseButtonTimer = setTimeout(() => { + app.prevButtonBackIndicator = false + }, 3000); + } else { + try { + clearTimeout(app.pauseButtonTimer) + } catch (e) { + } + app.prevButtonBackIndicator = false; + app.skipToPreviousItem() + } + }, + async getNowPlayingItemDetailed(target) { + try { + let u = await app.mkapi(app.mk.nowPlayingItem.playParams.kind, + (app.mk.nowPlayingItem.songId == -1), + (app.mk.nowPlayingItem.songId != -1) ? app.mk.nowPlayingItem.songId : app.mk.nowPlayingItem["id"], + { "include[songs]": "albums,artists", l: app.mklang }); + app.searchAndNavigate(u.data.data[0], target) + } catch (e) { + app.searchAndNavigate(app.mk.nowPlayingItem, target) + } + }, + async searchAndNavigate(item, target) { + let self = this + app.tmpVar = item; + switch (target) { + case "artist": + let artistId = ''; + try { + if (item.relationships.artists && item.relationships.artists.data.length > 0 && !item.relationships.artists.data[0].type.includes("library")) { + if (item.relationships.artists.data[0].type === "artist" || item.relationships.artists.data[0].type === "artists") { + artistId = item.relationships.artists.data[0].id + } + } + if (artistId == '') { + const url = (item.relationships.catalog.data[0].attributes.artistUrl); + artistId = (url).substring(url.lastIndexOf('/') + 1) + if (artistId.includes('viewCollaboration')) { + artistId = artistId.substring(artistId.lastIndexOf('ids=') + 4, artistId.lastIndexOf('-')) + } + } + } catch (_) { + } + + if (artistId == "") { + let artistQuery = (await app.mk.api.v3.music(`v1/catalog/${app.mk.storefrontId}/search?term=${item.attributes.artistName}`, { + limit: 1, + types: 'artists' + })).data.results; + try { + if (artistQuery.artists.data.length > 0) { + artistId = artistQuery.artists.data[0].id; + console.log(artistId) + } + } catch (e) { + } + } + console.log(artistId); + if (artistId != "") + self.appRoute(`artist/${artistId}`) + break; + case "album": + let albumId = ''; + try { + if ((item.type ?? item.playParams?.kind ?? "") == "albums") { + albumId = item.id ?? "" + } else if (item.relationships.albums && item.relationships.albums.data.length > 0 && !item.relationships.albums.data[0].type.includes("library")) { + if (item.relationships.albums.data[0].type === "album" || item.relationships.albums.data[0].type === "albums") { + albumId = item.relationships.albums.data[0].id + } + } + if (albumId == '') { + const url = (item.relationships.catalog.data[0].attributes.url); + albumId = (url).substring(url.lastIndexOf('/') + 1) + if (albumId.includes("?i=")) { + albumId = albumId.substring(0, albumId.indexOf("?i=")) + } + } + } catch (_) { + } + + if (albumId == "") { + try { + let albumQuery = (await app.mk.api.v3.music(`v1/catalog/${app.mk.storefrontId}/search?term=${(item.attributes.albumName ?? item.attributes.name ?? "") + " " + (item.attributes.artistName ?? "")}`, { + limit: 1, + types: 'albums' + })).data.results; + if (albumQuery.albums.data.length > 0) { + albumId = albumQuery.albums.data[0].id; + console.log(albumId) + } + } catch (e) { + } + } + if (albumId != "") { + self.appRoute(`album/${albumId}`) + } + break; + case "recordLabel": + let labelId = ''; + try { + labelId = item.relationships['record-labels'].data[0].id + } catch (_) { + } + + if (labelId == "") { + try { + let labelQuery = (await app.mk.api.v3.music(`v1/catalog/${app.mk.storefrontId}/search?term=${item.attributes.recordLabel}`, { + limit: 1, + types: 'record-labels' + })).data.results; + if (labelQuery["record-labels"].data.length > 0) { + labelId = labelQuery["record-labels"].data[0].id; + console.log(labelId) + } + } catch (e) { + } + } + if (labelId != "") { + app.showingPlaylist = [] + await app.getTypeFromID("recordLabel", labelId, false, { views: 'top-releases,latest-releases,top-artists' }); + app.page = "recordLabel_" + labelId; + } + + break; + } + }, + exitMV() { + MusicKit.getInstance().stop() + document.getElementById("apple-music-video-container").style.display = "none"; + }, + getArtistInfo(id, isLibrary) { + this.getArtistFromID(id) + //this.getTypeFromID("artist",id,isLibrary,query) + }, + followArtistById(id, follow) { + if (follow && !this.followingArtist(id)) { + this.cfg.home.followedArtists.push(id) + } else { + let index = this.cfg.home.followedArtists.indexOf(id) + if (index > -1) { + this.cfg.home.followedArtists.splice(index, 1) + } + } + }, + followingArtist(id) { + console.log(`check for ${id}`) + return this.cfg.home.followedArtists.includes(id) + }, + playMediaItem(item) { + let kind = (item.attributes.playParams ? (item.attributes.playParams.kind ?? (item.type ?? '')) : (item.type ?? '')); + let id = (item.attributes.playParams ? (item.attributes.playParams.id ?? (item.id ?? '')) : (item.id ?? '')); + ; + let isLibrary = item.attributes.playParams ? (item.attributes.playParams.isLibrary ?? false) : false; + let truekind = (!kind.endsWith("s")) ? (kind + "s") : kind; + // console.log(kind, id, isLibrary) + app.mk.stop().then(() => { + if (kind.includes("artist")) { + app.mk.setStationQueue({ artist: 'a-' + id }).then(() => { + app.mk.play() + }) + } + else { + app.playMediaItemById((id), (kind), (isLibrary), item.attributes.url ?? '') + } + }) + }, + async getTypeFromID(kind, id, isLibrary = false, params = {}, params2 = {}) { + let a; + if (kind == "album" | kind == "albums") { + params["include"] = "tracks,artists,record-labels,catalog"; + } + params['l'] = this.mklang; + try { + a = await this.mkapi(kind.toString(), isLibrary, id.toString(), params, params2); + } catch (e) { + console.log(e); + try { + a = await this.mkapi(kind.toString(), !isLibrary, id.toString(), params, params2); + } catch (err) { + console.log(err); + a = [] + } finally { + if (kind == "appleCurator") { + app.appleCurator = a.data.data[0] + } else { + this.getPlaylistContinuous(a, true) + } + } + } finally { + if (kind == "appleCurator") { + app.appleCurator = a.data.data[0] + } else { + this.getPlaylistContinuous(a, true) + } + } + ; + }, + searchLibrarySongs() { + let self = this + let prefs = this.cfg.libraryPrefs.songs + let albumAdded = self.library?.albums?.listing?.map(function (i) { + return { [i.id]: i.attributes?.dateAdded } + }) + let startTime = new Date().getTime() + + function sortSongs() { + // sort this.library.songs.displayListing by song.attributes[self.library.songs.sorting] in descending or ascending order based on alphabetical order and numeric order + // check if song.attributes[self.library.songs.sorting] is a number and if so, sort by number if not, sort by alphabetical order ignoring case + self.library.songs.displayListing.sort((a, b) => { + let aa = a.attributes[prefs.sort] + let bb = b.attributes[prefs.sort] + if (prefs.sort == "genre") { + aa = a.attributes.genreNames[0] + bb = b.attributes.genreNames[0] + } + if (prefs.sort == "dateAdded") { + let albumida = a.relationships?.albums?.data[0]?.id ?? '1970-01-01T00:01:01Z' + let albumidb = b.relationships?.albums?.data[0]?.id ?? '1970-01-01T00:01:01Z' + aa = startTime - new Date(((albumAdded.find(i => i[albumida])) ?? [])[albumida] ?? '1970-01-01T00:01:01Z').getTime() + bb = startTime - new Date(((albumAdded.find(i => i[albumidb])) ?? [])[albumidb] ?? '1970-01-01T00:01:01Z').getTime() + } + if (aa == null) { + aa = "" + } + if (bb == null) { + bb = "" + } + if (prefs.sortOrder == "asc") { + if (aa.toString().match(/^\d+$/) && bb.toString().match(/^\d+$/)) { + return aa - bb + } else { + return aa.toString().toLowerCase().localeCompare(bb.toString().toLowerCase()) + } + } else if (prefs.sortOrder == "desc") { + if (aa.toString().match(/^\d+$/) && bb.toString().match(/^\d+$/)) { + return bb - aa + } else { + return bb.toString().toLowerCase().localeCompare(aa.toString().toLowerCase()) + } + } + }) + } + + if (this.library.songs.search == "") { + this.library.songs.displayListing = this.library.songs.listing + sortSongs() + } else { + this.library.songs.displayListing = this.library.songs.listing.filter(item => { + let itemName = item.attributes.name.toLowerCase() + let searchTerm = this.library.songs.search.toLowerCase() + let artistName = "" + let albumName = "" + if (item.attributes.artistName != null) { + artistName = item.attributes.artistName.toLowerCase() + } + if (item.attributes.albumName != null) { + albumName = item.attributes.albumName.toLowerCase() + } + + // remove any non-alphanumeric characters and spaces from search term and item name + searchTerm = searchTerm.replace(/[^a-z0-9 ]/gi, "") + itemName = itemName.replace(/[^a-z0-9 ]/gi, "") + artistName = artistName.replace(/[^a-z0-9 ]/gi, "") + albumName = albumName.replace(/[^a-z0-9 ]/gi, "") + + if (itemName.includes(searchTerm) || artistName.includes(searchTerm) || albumName.includes(searchTerm)) { + return item + } + }) + sortSongs() + } + }, + getAlbumSort() { + this.library.albums.sortOrder[1] = this.cfg.libraryPrefs.albums.sortOrder; + this.library.albums.sorting[1] = this.cfg.libraryPrefs.albums.sort; + }, + // make a copy of searchLibrarySongs except use Albums instead of Songs + searchLibraryAlbums(index) { + let self = this + + function sortAlbums() { + // sort this.library.albums.displayListing by album.attributes[self.library.albums.sorting[index]] in descending or ascending order based on alphabetical order and numeric order + // check if album.attributes[self.library.albums.sorting[index]] is a number and if so, sort by number if not, sort by alphabetical order ignoring case + self.library.albums.displayListing.sort((a, b) => { + let aa = a.attributes[self.library.albums.sorting[index]] + let bb = b.attributes[self.library.albums.sorting[index]] + if (self.library.albums.sorting[index] == "genre") { + aa = a.attributes.genreNames[0] + bb = b.attributes.genreNames[0] + } + if (aa == null) { + aa = "" + } + if (bb == null) { + bb = "" + } + if (self.library.albums.sortOrder[index] == "asc") { + if (aa.toString().match(/^\d+$/) && bb.toString().match(/^\d+$/)) { + return aa - bb + } else { + return aa.toString().toLowerCase().localeCompare(bb.toString().toLowerCase()) + } + } else if (self.library.albums.sortOrder[index] == "desc") { + if (aa.toString().match(/^\d+$/) && bb.toString().match(/^\d+$/)) { + return bb - aa + } else { + return bb.toString().toLowerCase().localeCompare(aa.toString().toLowerCase()) + } + } + }) + } + + if (this.library.albums.search == "") { + this.library.albums.displayListing = this.library.albums.listing + sortAlbums() + } else { + this.library.albums.displayListing = this.library.albums.listing.filter(item => { + let itemName = item.attributes.name.toLowerCase() + let searchTerm = this.library.albums.search.toLowerCase() + let artistName = "" + let albumName = "" + if (item.attributes.artistName != null) { + artistName = item.attributes.artistName.toLowerCase() + } + if (item.attributes.albumName != null) { + albumName = item.attributes.albumName.toLowerCase() + } + + // remove any non-alphanumeric characters and spaces from search term and item name + searchTerm = searchTerm.replace(/[^a-z0-9 ]/gi, "") + itemName = itemName.replace(/[^a-z0-9 ]/gi, "") + artistName = artistName.replace(/[^a-z0-9 ]/gi, "") + albumName = albumName.replace(/[^a-z0-9 ]/gi, "") + + if (itemName.includes(searchTerm) || artistName.includes(searchTerm) || albumName.includes(searchTerm)) { + return item + } + }) + sortAlbums() + } + }, + // make a copy of searchLibrarySongs except use Albums instead of Songs + searchLibraryArtists(index) { + let self = this + + function sortArtists() { + // sort this.library.albums.displayListing by album.attributes[self.library.albums.sorting[index]] in descending or ascending order based on alphabetical order and numeric order + // check if album.attributes[self.library.albums.sorting[index]] is a number and if so, sort by number if not, sort by alphabetical order ignoring case + self.library.artists.displayListing.sort((a, b) => { + let aa = a.attributes[self.library.artists.sorting[index]] + let bb = b.attributes[self.library.artists.sorting[index]] + if (self.library.artists.sorting[index] == "genre") { + aa = a.attributes.genreNames[0] + bb = b.attributes.genreNames[0] + } + if (aa == null) { + aa = "" + } + if (bb == null) { + bb = "" + } + if (self.library.artists.sortOrder[index] == "asc") { + if (aa.toString().match(/^\d+$/) && bb.toString().match(/^\d+$/)) { + return aa - bb + } else { + return aa.toString().toLowerCase().localeCompare(bb.toString().toLowerCase()) + } + } else if (self.library.artists.sortOrder[index] == "desc") { + if (aa.toString().match(/^\d+$/) && bb.toString().match(/^\d+$/)) { + return bb - aa + } else { + return bb.toString().toLowerCase().localeCompare(aa.toString().toLowerCase()) + } + } + }) + } + + if (this.library.artists.search == "") { + this.library.artists.displayListing = this.library.artists.listing + sortArtists() + } else { + this.library.artists.displayListing = this.library.artists.listing.filter(item => { + let itemName = item.attributes.name.toLowerCase() + let searchTerm = this.library.artists.search.toLowerCase() + let artistName = "" + let albumName = "" + // if (item.attributes.artistName != null) { + // artistName = item.attributes.artistName.toLowerCase() + // } + // if (item.attributes.albumName != null) { + // albumName = item.attributes.albumName.toLowerCase() + // } + + // remove any non-alphanumeric characters and spaces from search term and item name + searchTerm = searchTerm.replace(/[^a-z0-9 ]/gi, "") + itemName = itemName.replace(/[^a-z0-9 ]/gi, "") + + + if (itemName.includes(searchTerm) || artistName.includes(searchTerm) || albumName.includes(searchTerm)) { + return item + } + }) + sortArtists() + } + }, + getSidebarItemClass(page) { + if (this.page == page) { + return ["active"] + } else { + return [] + } + }, + async mkapi(method, library = false, term, params = {}, params2 = {}, attempts = 0) { + if (method.includes(`recordLabel`)) { + method = `record-labels` + } + if (method.includes(`appleCurator`)) { + method = `apple-curators` + } + if (attempts > 3) { + return + } + let truemethod = (!method.endsWith("s")) ? (method + "s") : method; + try { + if (library) { + return await this.mk.api.v3.music(`v1/me/library/${truemethod}/${term.toString()}`, params, params2) + } else { + return await this.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/${truemethod}/${term.toString()}`, params, params2) + } + } catch (e) { + console.log(e) + return await this.mkapi(method, library, term, params, params2, attempts + 1) + } + }, + getLibraryGenres() { + let genres = [] + genres = [] + this.library.songs.listing.forEach((item) => { + item.attributes.genreNames.forEach((genre) => { + if (!genres.includes(genre)) { + genres.push(genre) + } + }) + }) + return genres + }, + async getLibrarySongsFull(force = false) { + let self = this + let library = [] + let cacheId = "library-songs" + let downloaded = null; + if ((this.library.songs.downloadState == 2) && !force) { + return + } + if (this.library.songs.downloadState == 1) { + return + } + let librarySongs = await CiderCache.getCache(cacheId) + if (librarySongs) { + this.library.songs.listing = librarySongs + this.searchLibrarySongs() + } + if (this.songstest) { + return + } + this.library.songs.downloadState = 1 + this.library.backgroundNotification.show = true + this.library.backgroundNotification.message = app.getLz('notification.updatingLibrarySongs') + + function downloadChunk() { + const params = { + "include[library-songs]": "catalog,artists,albums", + "fields[artists]": "name,url,id", + "fields[albums]": "name,url,id", + platform: "web", + "fields[catalog]": "artistUrl,albumUrl", + "fields[songs]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url", + limit: 100, + l: self.mklang + } + const safeparams = { + "platform": "web", + "limit": 80 + } + self.library.songs.downloadState = 1 + if (downloaded == null) { + app.mk.api.v3.music(`/v1/me/library/songs/`, params).then((response) => { + processChunk(response.data) + }).catch((error) => { + console.log('safe loading'); + app.mk.api.v3.music(`/v1/me/library/songs/`, safeparams).then((response) => { + processChunk(response.data) + }).catch((error) => { + console.log('safe loading failed', error) + app.library.songs.downloadState = 2 + app.library.backgroundNotification.show = false + }) + }) + } else { + if (downloaded.next != null) { + app.mk.api.v3.music(downloaded.next, params).then((response) => { + processChunk(response.data) + }).catch((error) => { + console.log('safe loading'); + app.mk.api.v3.music(downloaded.next, safeparams).then((response) => { + processChunk(response.data) + }).catch((error) => { + console.log('safe loading failed', error) + app.library.songs.downloadState = 2 + app.library.backgroundNotification.show = false + }) + }) + } else { + console.log("Download next", downloaded.next) + } + } + } + + function processChunk(response) { + downloaded = response + library = library.concat(downloaded.data) + self.library.backgroundNotification.show = true + self.library.backgroundNotification.message = app.getLz('notification.updatingLibrarySongs') + self.library.backgroundNotification.total = downloaded.meta.total + self.library.backgroundNotification.progress = library.length + + if (downloaded.meta.total == 0) { + self.library.songs.downloadState = 3 + return + } + if (typeof downloaded.next == "undefined") { + console.log("downloaded.next is undefined") + self.library.songs.listing = library + self.library.songs.downloadState = 2 + self.library.backgroundNotification.show = false + self.searchLibrarySongs() + CiderCache.putCache(cacheId, library) + } + if (downloaded.meta.total > library.length || typeof downloaded.meta.next != "undefined") { + console.log(`downloading next chunk - ${library.length} songs so far`) + downloadChunk() + } else { + self.library.songs.listing = library + self.library.songs.downloadState = 2 + self.library.backgroundNotification.show = false + self.searchLibrarySongs() + CiderCache.putCache(cacheId, library) + // console.log(library) + } + } + + downloadChunk() + }, + // copy the getLibrarySongsFull function except change Songs to Albums + async getLibraryAlbumsFull(force = false, index) { + let self = this + let library = [] + let cacheId = "library-albums" + let downloaded = null; + if ((this.library.albums.downloadState == 2 || this.library.albums.downloadState == 1) && !force) { + return + } + let libraryAlbums = await CiderCache.getCache(cacheId) + if (libraryAlbums) { + this.library.albums.listing = libraryAlbums + this.searchLibraryAlbums(index) + } + if (this.songstest) { + return + } + this.library.albums.downloadState = 1 + this.library.backgroundNotification.show = true + this.library.backgroundNotification.message = app.getLz('notification.updatingLibraryAlbums') + + function downloadChunk() { + self.library.albums.downloadState = 1 + const params = { + "include[library-albums]": "catalog,artists,albums", + "fields[artists]": "name,url,id", + // "fields[albums]": "name,url,id", + platform: "web", + "fields[catalog]": "artistUrl,albumUrl", + "fields[albums]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url", + limit: 100, + l: self.mklang + } + const safeparams = { + platform: "web", + limit: "60", + "include[library-albums]": "artists", + "include[library-artists]": "catalog", + "include[albums]": "artists", + "fields[artists]": "name,url", + "fields[albums]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url", + "includeOnly": "catalog,artists" + } + if (downloaded == null) { + app.mk.api.v3.music(`/v1/me/library/albums/`, params).then((response) => { + processChunk(response.data) + }).catch((error) => { + console.log('safe loading'); + app.mk.api.v3.music(`/v1/me/library/albums/`, safeparams).then((response) => { + processChunk(response.data) + }).catch((error) => { + console.log('safe loading failed', error) + app.library.albums.downloadState = 2 + app.library.backgroundNotification.show = false + }) + }) + } else { + if (downloaded.next != null) { + app.mk.api.v3.music(downloaded.next, params).then((response) => { + processChunk(response.data) + }).catch((error) => { + console.log('safe loading'); + app.mk.api.v3.music(downloaded.next, safeparams).then((response) => { + processChunk(response.data) + }).catch((error) => { + console.log('safe loading failed', error); + app.library.albums.downloadState = 2 + app.library.backgroundNotification.show = false + }) + }) + } else { + console.log("Download next", downloaded.next) + } + } + } + + function processChunk(response) { + downloaded = response + library = library.concat(downloaded.data) + self.library.backgroundNotification.show = true + self.library.backgroundNotification.message = app.getLz('notification.updatingLibraryAlbums') + self.library.backgroundNotification.total = downloaded.meta.total + self.library.backgroundNotification.progress = library.length + if (downloaded.meta.total == 0) { + self.library.albums.downloadState = 3 + return + } + if (typeof downloaded.next == "undefined") { + console.log("downloaded.next is undefined") + self.library.albums.listing = library + self.library.albums.downloadState = 2 + self.library.backgroundNotification.show = false + CiderCache.putCache(cacheId, library) + self.searchLibraryAlbums(index) + } + if (downloaded.meta.total > library.length || typeof downloaded.meta.next != "undefined") { + console.log(`downloading next chunk - ${library.length + } albums so far`) + downloadChunk() + } else { + self.library.albums.listing = library + self.library.albums.downloadState = 2 + self.library.backgroundNotification.show = false + CiderCache.putCache(cacheId, library) + self.searchLibraryAlbums(index) + // console.log(library) + } + } + + downloadChunk() + }, + // copy the getLibrarySongsFull function except change Songs to Albums + async getLibraryArtistsFull(force = false, index) { + let self = this + let library = [] + let cacheId = "library-artists" + let downloaded = null; + if ((this.library.artists.downloadState == 2 || this.library.artists.downloadState == 1) && !force) { + return + } + let libraryArtists = await CiderCache.getCache(cacheId) + if (libraryArtists) { + this.library.artists.listing = libraryArtists + this.searchLibraryArtists(index) + } + if (this.songstest) { + return + } + this.library.artists.downloadState = 1 + this.library.backgroundNotification.show = true + this.library.backgroundNotification.message = app.getLz('notification.updatingLibraryArtists') + + function downloadChunk() { + self.library.artists.downloadState = 1 + const params = { + include: "catalog", + // "include[library-artists]": "catalog,artists,albums", + // "fields[artists]": "name,url,id", + // "fields[albums]": "name,url,id", + platform: "web", + // "fields[catalog]": "artistUrl,albumUrl", + // "fields[artists]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,name,playParams,releaseDate,url", + limit: 100, + l: self.mklang + } + const safeparams = { + include: "catalog", + platform: "web", + limit: 50, + } + if (downloaded == null) { + app.mk.api.v3.music(`/v1/me/library/artists/`, params).then((response) => { + processChunk(response.data) + }).catch((error) => { + console.log('safe loading'); + app.mk.api.v3.music(`/v1/me/library/artists/`, safeparams).then((response) => { + processChunk(response.data) + }).catch((error) => { + console.log('safe loading failed', error) + app.library.artists.downloadState = 2 + app.library.backgroundNotification.show = false + }) + }) + + } else { + if (downloaded.next != null) { + app.mk.api.v3.music(downloaded.next, params).then((response) => { + processChunk(response.data) + }).catch((error) => { + console.log('safe loading'); + app.mk.api.v3.music(downloaded.next, safeparams).then((response) => { + processChunk(response.data) + }).catch((error) => { + console.log('safe loading failed', error) + app.library.artists.downloadState = 2 + app.library.backgroundNotification.show = false + }) + }) + } else { + console.log("Download next", downloaded.next) + } + + } + } + + function processChunk(response) { + downloaded = response + library = library.concat(downloaded.data) + self.library.backgroundNotification.show = true + self.library.backgroundNotification.message = app.getLz('notification.updatingLibraryArtists') + self.library.backgroundNotification.total = downloaded.meta.total + self.library.backgroundNotification.progress = library.length + if (downloaded.meta.total == 0) { + self.library.albums.downloadState = 3 + return + } + if (typeof downloaded.next == "undefined") { + console.log("downloaded.next is undefined") + self.library.artists.listing = library + self.library.artists.downloadState = 2 + self.library.artists.show = false + CiderCache.putCache(cacheId, library) + self.searchLibraryArtists(index) + } + if (downloaded.meta.total > library.length || typeof downloaded.meta.next != "undefined") { + console.log(`downloading next chunk - ${library.length + } artists so far`) + downloadChunk() + } else { + self.library.artists.listing = library + self.library.artists.downloadState = 2 + self.library.backgroundNotification.show = false + CiderCache.putCache(cacheId, library) + self.searchLibraryArtists(index) + // console.log(library) + } + } + + downloadChunk() + }, + getTotalTime() { + try { + if (app.showingPlaylist.relationships.tracks.data.length > 0) { + const timeInSeconds = Math.round([].concat(...app.showingPlaylist.relationships.tracks.data).reduce((a, { attributes: { durationInMillis } }) => a + durationInMillis, 0) / 1000); + return `${app.showingPlaylist.relationships.tracks.data.length} ${app.getLz('term.track', options = { count: app.showingPlaylist.relationships.tracks.data.length })}, ${this.convertTime(timeInSeconds, 'long')}` + } else return "" + } catch (err) { + return "" + } + }, + async getLibrarySongs() { + let response = await this.mkapi("songs", true, "", { limit: 100, l: this.mklang }, { includeResponseMeta: !0 }) + this.library.songs.listing = response.data.data + this.library.songs.meta = response.data.meta + }, + async getLibraryAlbums() { + let response = await this.mkapi("albums", true, "", { limit: 100, l: this.mklang }, { includeResponseMeta: !0 }) + this.library.albums.listing = response.data.data + this.library.albums.meta = response.data.meta + }, + async getListenNow(attempt = 0) { + if (this.listennow.timestamp > Date.now() - 120000) { + return + } + + if (attempt > 3) { + return + } + try { + this.listennow = (await this.mk.api.v3.music(`v1/me/recommendations?timezone=${encodeURIComponent(this.formatTimezoneOffset())}`, { + name: "listen-now", + with: "friendsMix,library,social", + "art[social-profiles:url]": "c", + "art[url]": "c,f", + "omit[resource]": "autos", + "relate[editorial-items]": "contents", + extend: ["editorialCard", "editorialVideo"], + "extend[albums]": ["artistUrl"], + "extend[library-albums]": ["artistUrl", "editorialVideo"], + "extend[playlists]": ["artistNames", "editorialArtwork", "editorialVideo"], + "extend[library-playlists]": ["artistNames", "editorialArtwork", "editorialVideo"], + "extend[social-profiles]": "topGenreNames", + "include[albums]": "artists", + "include[songs]": "artists", + "include[music-videos]": "artists", + "fields[albums]": ["artistName", "artistUrl", "artwork", "contentRating", "editorialArtwork", "editorialVideo", "name", "playParams", "releaseDate", "url"], + "fields[artists]": ["name", "url"], + "extend[stations]": ["airDate", "supportsAirTimeUpdates"], + "meta[stations]": "inflectionPoints", + types: "artists,albums,editorial-items,library-albums,library-playlists,music-movies,music-videos,playlists,stations,uploaded-audios,uploaded-videos,activities,apple-curators,curators,tv-shows,social-upsells", + platform: "web", + l: this.mklang + }, { + includeResponseMeta: !0, + reload: !0 + })).data; + this.listennow.timestamp = Date.now() + console.log(this.listennow) + } catch (e) { + console.log(e) + this.getListenNow(attempt + 1) + } + }, + async getBrowsePage(attempt = 0) { + if (this.browsepage.timestamp > Date.now() - 120000) { + return + } + if (attempt > 3) { + return + } + try { + let browse = await app.mk.api.v3.music(`/v1/editorial/${app.mk.storefrontId}/groupings`, { + platform: "web", + name: "music", + "omit[resource:artists]": "relationships", + "include[albums]": "artists", + "include[songs]": "artists", + "include[music-videos]": "artists", + extend: "editorialArtwork,artistUrl", + "fields[artists]": "name,url,artwork,editorialArtwork,genreNames,editorialNotes", + "art[url]": "f", + l: this.mklang + }); + this.browsepage = browse.data.data[0]; + this.browsepage.timestamp = Date.now() + console.log(this.browsepage) + } catch (e) { + console.log(e) + this.getBrowsePage(attempt + 1) + } + }, + async getRadioStations(attempt = 0) { + if (attempt > 3) { + return + } + try { + this.radio.personal = (await app.mk.api.v3.music(`/v1/me/recent/radio-stations`, { + "platform": "web", + "art[url]": "f", + l: this.mklang + })).data.data; + } catch (e) { + console.log(e) + this.getRadioStations(attempt + 1) + } + }, + async getMadeForYou(attempt = 0) { + if (attempt > 3) { + return + } + try { + let mfu = await app.mk.api.v3.music("/v1/me/library/playlists?platform=web&extend=editorialVideo&fields%5Bplaylists%5D=lastModifiedDate&filter%5Bfeatured%5D=made-for-you&include%5Blibrary-playlists%5D=catalog&fields%5Blibrary-playlists%5D=artwork%2Cname%2CplayParams%2CdateAdded") + this.madeforyou = mfu.data + } catch (e) { + console.log(e) + this.getMadeForYou(attempt + 1) + } + }, + newPlaylistFolder(name = app.getLz('term.newPlaylistFolder')) { + let self = this + this.mk.api.v3.music( + "/v1/me/library/playlist-folders/", {}, { + fetchOptions: { + method: "POST", + body: JSON.stringify({ + attributes: { name: name } + }) + } + } + ).then((res) => { + let playlist = (res.data.data[0]) + self.playlists.listing.push({ + id: playlist.id, + attributes: { + name: playlist.attributes.name + }, + type: "library-playlist-folders", + parent: "p.playlistsroot" + }) + self.sortPlaylists() + setTimeout(() => { + app.refreshPlaylists() + }, 13000) + }) + }, + showSearch() { + this.page = "search" + }, + loadLyrics() { + const musicType = (MusicKit.getInstance().nowPlayingItem != null) ? MusicKit.getInstance().nowPlayingItem["type"] ?? '' : ''; + // console.log("mt", musicType) + if (musicType === "musicVideo") { + this.loadYTLyrics(); + } else { + if (app.cfg.lyrics.enable_mxm) { + this.loadMXM(); + } else { + this.loadAMLyrics(); + } + } + }, + loadAMLyrics() { + const songID = (this.mk.nowPlayingItem != null) ? this.mk.nowPlayingItem["_songId"] ?? (this.mk.nowPlayingItem["songId"] ?? -1) : -1; + // this.getMXM( trackName, artistName, 'en', duration); + if (songID != -1) { + this.mk.api.v3.music(`v1/catalog/${this.mk.storefrontId}/songs/${songID}/lyrics`) + .then((response) => { + this.lyricsMediaItem = response.data?.data[0]?.attributes["ttml"] + this.parseTTML() + }) + } + }, + addToLibrary(id) { + let self = this + this.mk.addToLibrary(id).then((data) => { + self.getLibrarySongsFull(true) + }) + notyf.success(app.getLz('action.addToLibrary.success')); + }, + removeFromLibrary(kind, id) { + let self = this + let truekind = (!kind.endsWith("s")) ? (kind + "s") : kind; + app.mk.api.v3.music(`v1/me/library/${truekind}/${id.toString()}`, {}, { + fetchOptions: { + method: "DELETE" + } + }).then((data) => { + self.getLibrarySongsFull(true) + }) + notyf.success(app.getLz('action.removeFromLibrary.success')) + }, + async loadYTLyrics() { + const track = (this.mk.nowPlayingItem != null) ? this.mk.nowPlayingItem.title ?? '' : ''; + const artist = (this.mk.nowPlayingItem != null) ? this.mk.nowPlayingItem.artistName ?? '' : ''; + const time = (this.mk.nowPlayingItem != null) ? (Math.round((this.mk.nowPlayingItem.attributes["durationInMillis"] ?? -1000) / 1000) ?? -1) : -1; + ipcRenderer.invoke('getYTLyrics', track, artist).then((result) => { + if (result.length > 0) { + let ytid = result[0]['id']['videoId']; + if (app.cfg.lyrics.enable_yt) { + loadYT(ytid, app.cfg.lyrics.mxm_language ?? "en") + } else { + app.loadMXM() + } + } else { + app.loadMXM() + } + + function loadYT(id, lang) { + let req = new XMLHttpRequest(); + let url = `https://www.youtube.com/watch?&v=${id}`; + req.open('GET', url, true); + req.onerror = function (e) { + this.loadMXM(); + } + req.onload = function () { + // console.log(this.responseText); + let res = this.responseText; + let captionurl1 = res.substring(res.indexOf(`{"playerCaptionsRenderer":{"baseUrl":"`) + (`{"playerCaptionsRenderer":{"baseUrl":"`).length); + let captionurl = captionurl1.substring(0, captionurl1.indexOf(`"`)); + if (captionurl.includes("timedtext")) { + let json = JSON.parse(`{"url": "${captionurl}"}`); + let newurl = json.url + `&lang=${lang}&format=ttml` + + let req2 = new XMLHttpRequest(); + + req2.open('GET', newurl, true); + req2.onerror = function (e) { + app.loadMXM(); + } + req2.onload = function () { + try { + const ttmlLyrics = this.responseText; + if (ttmlLyrics) { + this.lyricsMediaItem = ttmlLyrics + this.parseTTML() + } + } catch (e) { + app.loadMXM(); + } + + } + req2.send(); + } else { + + app.loadMXM(); + + } + } + req.send(); + } + + }) + + }, + loadMXM() { + let attempt = 0; + const track = encodeURIComponent((this.mk.nowPlayingItem != null) ? this.mk.nowPlayingItem.title ?? '' : ''); + const artist = encodeURIComponent((this.mk.nowPlayingItem != null) ? this.mk.nowPlayingItem.artistName ?? '' : ''); + const time = encodeURIComponent((this.mk.nowPlayingItem != null) ? (Math.round((this.mk.nowPlayingItem.attributes["durationInMillis"] ?? -1000) / 1000) ?? -1) : -1); + const id = encodeURIComponent((this.mk.nowPlayingItem != null) ? app.mk.nowPlayingItem._songId ?? (app.mk.nowPlayingItem["songId"] ?? '') : ''); + let lrcfile = ""; + let richsync = []; + const lang = app.cfg.lyrics.mxm_language // translation language + function revisedRandId() { + return Math.random().toString(36).replace(/[^a-z]+/g, '').slice(2, 10); + } + + /* get token */ + function getToken(mode, track, artist, songid, lang, time, id) { + if (attempt > 2) { + app.loadAMLyrics(); + } else { + attempt = attempt + 1; + let url = "https://apic-desktop.musixmatch.com/ws/1.1/token.get?app_id=web-desktop-app-v1.0&t=" + revisedRandId(); + let req = new XMLHttpRequest(); + req.overrideMimeType("application/json"); + req.open('GET', url, true); + req.setRequestHeader("authority", "apic-desktop.musixmatch.com"); + req.onload = function () { + let jsonResponse = JSON.parse(this.responseText); + let status2 = jsonResponse["message"]["header"]["status_code"]; + if (status2 == 200) { + let token = jsonResponse["message"]["body"]["user_token"] ?? ''; + if (token != "" && token != "UpgradeOnlyUpgradeOnlyUpgradeOnlyUpgradeOnly") { + console.log('200 token', mode); + // token good + app.mxmtoken = token; + + if (mode == 1) { + getMXMSubs(track, artist, app.mxmtoken, lang, time, id); + } else { + getMXMTrans(songid, lang, app.mxmtoken); + } + } else { + console.log('fake 200 token'); + getToken(mode, track, artist, songid, lang, time) + } + } else { + // console.log('token 4xx'); + getToken(mode, track, artist, songid, lang, time) + } + + }; + req.onerror = function () { + console.log('error'); + app.loadAMLyrics(); + }; + req.send(); + } + } + + function getMXMSubs(track, artist, token, lang, time, id) { + let usertoken = encodeURIComponent(token); + let richsyncQuery = (app.cfg.lyrics.mxm_karaoke) ? "&optional_calls=track.richsync" : "" + let timecustom = (!time || (time && time < 0)) ? '' : `&f_subtitle_length=${time}&q_duration=${time}&f_subtitle_length_max_deviation=40`; + let itunesid = (id && id != "") ? `&track_itunes_id=${id}` : ''; + let url = "https://apic-desktop.musixmatch.com/ws/1.1/macro.subtitles.get?format=json&namespace=lyrics_richsynched" + richsyncQuery + "&subtitle_format=lrc&q_artist=" + artist + "&q_track=" + track + itunesid + "&usertoken=" + usertoken + timecustom + "&app_id=web-desktop-app-v1.0&t=" + revisedRandId(); + let req = new XMLHttpRequest(); + req.overrideMimeType("application/json"); + req.open('GET', url, true); + req.setRequestHeader("authority", "apic-desktop.musixmatch.com"); + req.onload = function () { + let jsonResponse = JSON.parse(this.responseText); + console.log(jsonResponse); + let status1 = jsonResponse["message"]["header"]["status_code"]; + + if (status1 == 200) { + let id = ''; + try { + if (jsonResponse["message"]["body"]["macro_calls"]["matcher.track.get"]["message"]["header"]["status_code"] == 200 && jsonResponse["message"]["body"]["macro_calls"]["track.subtitles.get"]["message"]["header"]["status_code"] == 200) { + id = jsonResponse["message"]["body"]["macro_calls"]["matcher.track.get"]["message"]["body"]["track"]["track_id"] ?? ''; + lrcfile = jsonResponse["message"]["body"]["macro_calls"]["track.subtitles.get"]["message"]["body"]["subtitle_list"][0]["subtitle"]["subtitle_body"]; + + try { + let lrcrich = jsonResponse["message"]["body"]["macro_calls"]["track.richsync.get"]["message"]["body"]["richsync"]["richsync_body"]; + richsync = JSON.parse(lrcrich); + app.richlyrics = richsync; + } catch (_) { + } + } + + if (lrcfile == "") { + app.loadAMLyrics() + } else { + if (richsync == [] || richsync.length == 0) { + console.log("ok"); + // process lrcfile to json here + app.lyricsMediaItem = lrcfile + let u = app.lyricsMediaItem.split(/[\r\n]/); + let preLrc = [] + for (var i = u.length - 1; i >= 0; i--) { + let xline = (/(\[[0-9.:\[\]]*\])+(.*)/).exec(u[i]) + let end = (preLrc.length > 0) ? ((preLrc[preLrc.length - 1].startTime) ?? 99999) : 99999 + preLrc.push({ + startTime: app.toMS(xline[1].substring(1, xline[1].length - 2)) ?? 0, + endTime: end, + line: xline[2], + translation: '' + }) + } + if (preLrc.length > 0) + preLrc.push({ + startTime: 0, + endTime: preLrc[preLrc.length - 1].startTime, + line: "lrcInstrumental", + translation: '' + }); + app.lyrics = preLrc.reverse(); + } else { + let preLrc = richsync.map(function (item) { + return { + startTime: item.ts, + endTime: item.te, + line: item.x, + translation: '' + } + }) + if (preLrc.length > 0) + preLrc.unshift({ + startTime: 0, + endTime: preLrc[0].startTime, + line: "lrcInstrumental", + translation: '' + }); + app.lyrics = preLrc; + } + if (lrcfile != null && lrcfile != '' && lang != "disabled") { + // load translation + getMXMTrans(id, lang, token); + } else { + app.loadAMLyrics() + } + } + } catch (e) { + console.log(e); + app.loadAMLyrics() + } + } else { //4xx rejected + getToken(1, track, artist, '', lang, time); + } + } + req.onerror = function () { + console.log('error'); + app.loadAMLyrics(); + }; + req.send(); + } + + function getMXMTrans(id, lang, token) { + if (lang != "disabled" && id != '') { + let usertoken = encodeURIComponent(token); + let url2 = "https://apic-desktop.musixmatch.com/ws/1.1/crowd.track.translations.get?translation_fields_set=minimal&selected_language=" + lang + "&track_id=" + id + "&comment_format=text&part=user&format=json&usertoken=" + usertoken + "&app_id=web-desktop-app-v1.0&t=" + revisedRandId(); + let req2 = new XMLHttpRequest(); + req2.overrideMimeType("application/json"); + req2.open('GET', url2, true); + req2.setRequestHeader("authority", "apic-desktop.musixmatch.com"); + req2.onload = function () { + let jsonResponse2 = JSON.parse(this.responseText); + console.log(jsonResponse2); + let status2 = jsonResponse2["message"]["header"]["status_code"]; + if (status2 == 200) { + try { + let preTrans = [] + let u = app.lyrics; + let translation_list = jsonResponse2["message"]["body"]["translations_list"]; + if (translation_list.length > 0) { + for (var i = 0; i < u.length - 1; i++) { + preTrans[i] = "" + for (var trans_line of translation_list) { + if (u[i].line == " " + trans_line["translation"]["matched_line"] || u[i].line == trans_line["translation"]["matched_line"]) { + u[i].translation = trans_line["translation"]["description"]; + break; + } + } + } + app.lyrics = u; + } + } catch (e) { + /// not found trans -> ignore + } + } else { //4xx rejected + getToken(2, '', '', id, lang, ''); + } + } + req2.send(); + } + + } + + if (track != "" & track != "No Title Found") { + if (app.mxmtoken != null && app.mxmtoken != '') { + getMXMSubs(track, artist, app.mxmtoken, lang, time, id) + } else { + getToken(1, track, artist, '', lang, time); + } + } + }, + toMS(str) { + let rawTime = str.match(/(\d+:)?(\d+:)?(\d+)(\.\d+)?/); + let hours = (rawTime[2] != null) ? (rawTime[1].replace(":", "")) : 0; + let minutes = (rawTime[2] != null) ? (hours * 60 + rawTime[2].replace(":", "") * 1) : ((rawTime[1] != null) ? rawTime[1].replace(":", "") : 0); + let seconds = (rawTime[3] != null) ? (rawTime[3]) : 0; + let milliseconds = (rawTime[4] != null) ? (rawTime[4].replace(".", "")) : 0 + return parseFloat(`${minutes * 60 + seconds * 1}.${milliseconds * 1}`); + }, + parseTTML() { + this.lyrics = []; + let preLrc = []; + let xml = this.stringToXml(this.lyricsMediaItem); + let lyricsLines = xml.getElementsByTagName('p'); + let synced = true; + let endTimes = []; + if (xml.getElementsByTagName('tt')[0].getAttribute("itunes:timing") === "None") { + synced = false; + } + endTimes.push(0); + if (synced) { + for (let element of lyricsLines) { + let start = this.toMS(element.getAttribute('begin')) + let end = this.toMS(element.getAttribute('end')) + if (start - endTimes[endTimes.length - 1] > 5 && endTimes[endTimes.length - 1] != 0) { + preLrc.push({ + startTime: endTimes[endTimes.length - 1], + endTime: start, + line: "lrcInstrumental" + }); + } + preLrc.push({ startTime: start, endTime: end, line: element.textContent }); + endTimes.push(end); + } + // first line dot + if (preLrc.length > 0) + preLrc.unshift({ startTime: 0, endTime: preLrc[0].startTime, line: "lrcInstrumental" }); + } else { + for (let element of lyricsLines) { + preLrc.push({ startTime: 9999999, endTime: 9999999, line: element.textContent }); + } + } + this.lyrics = preLrc; + + }, + parseLyrics() { + let xml = this.stringToXml(this.lyricsMediaItem) + let json = xmlToJson(xml); + this.lyrics = json + }, + stringToXml(st) { + // string to xml + let xml = (new DOMParser()).parseFromString(st, "text/xml"); + return xml; + + }, + getCurrentTime() { + return parseFloat(this.hmsToSecondsOnly(this.parseTime(this.mk.nowPlayingItem.attributes.durationInMillis - app.mk.currentPlaybackTimeRemaining * 1000))); + }, + seekTo(time) { + this.mk.seekToTime(time); + }, + parseTime(value) { + let minutes = Math.floor(value / 60000); + let seconds = ((value % 60000) / 1000).toFixed(0); + return minutes + ":" + (seconds < 10 ? '0' : '') + seconds; + }, + parseTimeDecimal(value) { + let minutes = Math.floor(value / 60000); + let seconds = ((value % 60000) / 1000).toFixed(0); + return minutes + "." + (seconds < 10 ? '0' : '') + seconds; + }, + hmsToSecondsOnly(str) { + let p = str.split(':'), + s = 0, + m = 1; + + while (p.length > 0) { + s += m * parseInt(p.pop(), 10); + m *= 60; + } + + return s; + }, + getLyricBGStyle(start, end) { + let currentTime = this.getCurrentTime(); + // let duration = this.mk.nowPlayingItem.attributes.durationInMillis + let start2 = this.hmsToSecondsOnly(start) + let end2 = this.hmsToSecondsOnly(end) + // let currentProgress = ((100 * (currentTime)) / (end2)) + // check if currenttime is between start and end + this.player.lyricsDebug.start = start2 + this.player.lyricsDebug.end = end2 + this.player.lyricsDebug.current = currentTime + if (currentTime >= start2 && currentTime <= end2) { + return { + "--bgSpeed": `${(end2 - start2)}s` + } + } else { + return {} + } + }, + playMediaItemById(id, kind, isLibrary, raurl = "") { + let truekind = (!kind.endsWith("s")) ? (kind + "s") : kind; + console.log(id, truekind, isLibrary) + try { + if (truekind.includes("artist")) { + app.mk.setStationQueue({ artist: 'a-' + id }).then(() => { + app.mk.play() + }) + } else if (truekind == "radioStations") { + this.mk.setStationQueue({ url: raurl }).then(function (queue) { + MusicKit.getInstance().play() + }); + } else { + this.mk.setQueue({ + [truekind]: [id], + parameters: { l: this.mklang } + }).then(function (queue) { + MusicKit.getInstance().play() + }) + } + } catch (err) { + console.log(err) + this.playMediaItemById(id, kind, isLibrary, raurl) + } + }, + queueParentandplayChild(parent, childIndex, item) { + + /* Randomize array in-place using Durstenfeld shuffle algorithm */ + function shuffleArray(array) { + for (var i = array.length - 1; i > 0; i--) { + var j = Math.floor(Math.random() * (i + 1)); + var temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + } + + let kind = parent.substring(0, parent.indexOf(":")) + let id = parent.substring(parent.indexOf(":") + 1, parent.length) + let truekind = (!kind.endsWith("s")) ? (kind + "s") : kind; + console.log(truekind, id) + + try { + if (app.library.songs.displayListing.length > childIndex && parent == "librarysongs") { + console.log(item) + if (item && ((app.library.songs.displayListing[childIndex].id != item.id))) { + childIndex = app.library.songs.displayListing.indexOf(item) + } + + let query = app.library.songs.displayListing.map(item => new MusicKit.MediaItem(item)); + + + app.mk.stop().then(() => { + if (item) { + app.mk.setQueue({ + [item.attributes.playParams.kind ?? item.type]: item.attributes.playParams.id ?? item.id, + parameters: { l: app.mklang } + }).then(function () { + app.mk.play().then(() => { + if (app.mk.shuffleMode == 1) { + shuffleArray(query) + } else { + for (let i = 0; i < query.length; i++) { + if (query[i].id == item.id) { + query.splice(0, i + 1); + break; + } + } + } + app.mk.queue.append(query) + }) + }) + } else { + app.mk.queue.splice(0, app.mk.queue._itemIDs.length) + if (app.mk.shuffleMode == 1) { + shuffleArray(query) + } + app.mk.queue.append(query) + if (childIndex != -1) { + app.mk.changeToMediaAtIndex(childIndex) + } else { + app.mk.play() + } + + } + }) + } else if (parent.startsWith('listitem-hr')) { + app.mk.stop().then(() => { + if (app.mk.shuffleMode == 1) { + app.mk.setQueue({ + [item.attributes.playParams.kind ?? item.type]: item.attributes.playParams.id ?? item.id + }).then(function () { + app.mk.play().then(() => { + let data = JSON.parse(parent.split('listitem-hr')[1] ?? '[]') + let itemsToPlay = {} + let u = data.map(x => x.id) + try { + data.splice(u.indexOf(item.attributes.playParams.id ?? item.id), 1) + } catch (e) { + } + if (app.mk.shuffleMode == 1) { + shuffleArray(data) + } + data.forEach(item => { + if (!itemsToPlay[item.kind]) { + itemsToPlay[item.kind] = [] + } + itemsToPlay[item.kind].push(item.id) + }) + // loop through itemsToPlay + for (let kind in itemsToPlay) { + let ids = itemsToPlay[kind] + if (ids.length > 0) { + app.mk.playLater({ [kind + "s"]: itemsToPlay[kind] }) + } + } + }) + }) + } else { + let data = JSON.parse(parent.split('listitem-hr')[1] ?? '[]') + let itemsToPlay = {} + data.forEach(item => { + if (!itemsToPlay[item.kind]) { + itemsToPlay[item.kind] = [] + } + itemsToPlay[item.kind].push(item.id) + }) + // loop through itemsToPlay + app.mk.queue.splice(0, app.mk.queue._itemIDs.length) + let ind = 0; + for (let kind in itemsToPlay) { + let ids = itemsToPlay[kind] + if (ids.length > 0) { + if (app.mk.queue._itemIDs.length > 0) { + app.mk.playLater({ [kind + "s"]: itemsToPlay[kind] }).then(function () { + ind += 1; + console.log(ind, Object.keys(itemsToPlay).length) + if (ind >= Object.keys(itemsToPlay).length) { + app.mk.changeToMediaAtIndex(app.mk.queue._itemIDs.indexOf(item.attributes.playParams.id ?? item.id)) + } + } + ) + } else { + app.mk.setQueue({ [kind + "s"]: itemsToPlay[kind] }).then(function () { + ind += 1; + console.log(ind, Object.keys(itemsToPlay).length) + if (ind >= Object.keys(itemsToPlay).length) { + app.mk.changeToMediaAtIndex(app.mk.queue._itemIDs.indexOf(item.attributes.playParams.id ?? item.id)) + } + } + ) + } + } + + } + } + }) + } else { + app.mk.stop().then(() => { + if (truekind == "playlists" && (id.startsWith("p.") || id.startsWith("pl.u"))) { + app.mk.setQueue({ + [item.attributes.playParams.kind ?? item.type]: item.attributes.playParams.id ?? item.id, + parameters: { l: app.mklang } + }).then(function () { + app.mk.changeToMediaAtIndex(app.mk.queue._itemIDs.indexOf(item.id) ?? 1).then(function () { + if ((app.showingPlaylist && app.showingPlaylist.id == id)) { + let query = app.showingPlaylist.relationships.tracks.data.map(item => new MusicKit.MediaItem(item)); + let u = query; + if (app.mk.shuffleMode == 1) { + shuffleArray(u) + } else { + for (let i = 0; i < app.showingPlaylist.relationships.tracks.data.length; i++) { + if (app.showingPlaylist.relationships.tracks.data[i].id == item.id) { + u.splice(0, i + 1); + break; + } + } + } + app.mk.queue.append(u) + } else { + app.getPlaylistFromID(id, true).then(function () { + let query = app.showingPlaylist.relationships.tracks.data.map(item => new MusicKit.MediaItem(item)); + let u = query; + if (app.mk.shuffleMode == 1) { + shuffleArray(u) + } else { + for (let i = 0; i < app.showingPlaylist.relationships.tracks.data.length; i++) { + if (app.showingPlaylist.relationships.tracks.data[i].id == item.id) { + u.splice(0, i + 1); + break; + } + } + } + app.mk.queue.append(u) + }) + } + }) + + }) + } else { + this.mk.setQueue({ + [truekind]: [id], + parameters: { l: this.mklang } + }).then(function (queue) { + if (item && ((queue._itemIDs[childIndex] != item.id))) { + childIndex = queue._itemIDs.indexOf(item.id) + } + if (childIndex != -1) { + app.mk.changeToMediaAtIndex(childIndex) + } else if (item) { + app.mk.playNext({ + [item.attributes.playParams.kind ?? item.type]: item.attributes.playParams.id ?? item.id + }).then(function () { + app.mk.changeToMediaAtIndex(app.mk.queue._itemIDs.indexOf(item.id) ?? 1) + app.mk.play() + }) + } else { + app.mk.play() + } + }) + } + }) + } + } catch (err) { + console.log(err) + try { + app.mk.stop() + } catch (e) { + } + this.playMediaItemById(item.attributes.playParams.id ?? item.id, item.attributes.playParams.kind ?? item.type, item.attributes.playParams.isLibrary ?? false, item.attributes.url) + } + + }, + friendlyTypes(type) { + // use switch statement to return friendly name for media types "songs,artists,albums,playlists,music-videos,stations,apple-curators,curators" + switch (type) { + case "song": + return app.getLz('term.songs') + break; + case "artist": + return app.getLz('term.artists') + break; + case "album": + return app.getLz('term.albums') + break; + case "playlist": + return app.getLz('term.playlists') + break; + case "music_video": + return app.getLz('term.musicVideos') + break; + case "station": + return app.getLz('term.stations') + break; + case "apple-curator": + return app.getLz('term.appleCurators') + break; + case "radio_show": + return app.getLz('term.radioShows') + break; + case "record_label": + return app.getLz('term.recordLabels') + break; + case "radio_episode": + return app.getLz('podcast.episodes') + break; + case "video_extra": + return app.getLz('term.videoExtras') + break; + case "curator": + return app.getLz('term.curators') + break; + case "top": + return app.getLz('term.top') + break; + default: + return type + break; + } + }, + async searchQuery(term = this.search.term) { + let self = this + if (term == "") { + return + } + //this.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/search?term=${this.search.term}` + this.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/search?term=${encodeURIComponent(this.search.term)}`, { + types: "activities,albums,apple-curators,artists,curators,editorial-items,music-movies,music-videos,playlists,songs,stations,tv-episodes,uploaded-videos,record-labels", + "relate[editorial-items]": "contents", + "include[editorial-items]": "contents", + "include[albums]": "artists", + "include[artists]": "artists", + "include[songs]": "artists,albums", + "include[music-videos]": "artists", + "extend": "artistUrl", + "fields[artists]": "url,name,artwork,hero", + "fields[albums]": "artistName,artistUrl,artwork,contentRating,editorialArtwork,editorialVideo,name,playParams,releaseDate,url", + "with": "serverBubbles,lyricHighlights", + "art[url]": "c,f", + "omit[resource]": "autos", + "platform": "web", + limit: 25, + l: this.mklang + }).then(function (results) { + results.data.results["meta"] = results.data.meta + self.search.results = results.data.results + }) + + await app.mk.api.v3.music(`v1/social/${app.mk.storefrontId}/search?term=${app.search.term}`, { + types: ["playlists", "social-profiles"], + limit: 25, + with: ["serverBubbles", "lyricSnippet"], + "art[url]": "f", + "art[social-profiles:url]": "c" + }, { includeResponseMeta: !0 }).then(function (results) { + results.data.results["meta"] = results.data.meta + self.search.resultsSocial = results.data.results + }) + }, + async inLibrary(items = []) { + let types = [] + + for (let item of items) { + let type = item.type + if (type.slice(-1) != "s") { + type += "s" + } + type = type.replace("library-", "") + let id = item.attributes.playParams.catalogId ?? item.attributes.playParams.id ?? item.id + + let index = types.findIndex(function (type) { + return type.type == this + }, type) + if (index == -1) { + types.push({ type: type, id: [id] }) + } else { + types[index].id.push(id) + } + } + let types2 = types.map(function (item) { + return { + [`ids[${item.type}]`]: [item.id] + } + }) + types2 = types2.reduce(function (result, item) { + var key = Object.keys(item)[0]; //first property: a, b, c + result[key] = item[key]; + return result; + }, {}); + return (await this.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}`, { + ...{ + "omit[resource]": "autos", + relate: "library", + fields: "inLibrary" + }, + ...types2 + })).data.data + }, + isInLibrary(playParams) { + let self = this + let id = "" + // ugly code to check if current playback item is in library + if (typeof playParams == "undefined") { + return true + } + if (playParams["isLibrary"]) { + return true + } else if (playParams["catalogId"]) { + id = playParams["catalogId"] + } else if (playParams["id"]) { + id = playParams["id"] + } + let found = this.library.songs.listing.filter((item) => { + if (item["attributes"]) { + if (item["attributes"]["playParams"] && (item["attributes"]["playParams"]["catalogId"] == id)) { + return item; + } + } + }) + if (found.length != 0) { + return true + } else { + return false + } + }, + mkReady() { + if (this.mk["nowPlayingItem"]) { + return true + } else { + return false + } + }, + getMediaItemArtwork(url, height = 64, width) { + if (typeof url == "undefined" || url == "") { + return "https://beta.music.apple.com/assets/product/MissingArtworkMusic.svg" + } + let newurl = `${url.replace('{w}', width ?? height).replace('{h}', height).replace('{f}', "webp").replace('{c}', ((width === 900) ? "sr" : "cc"))}`; + + if (newurl.includes("900x516")) { + newurl = newurl.replace("900x516cc", "900x516sr").replace("900x516bb", "900x516sr"); + } + return newurl + }, + _rgbToRgb(rgb = [0, 0, 0]) { + // if rgb + return `rgb(${rgb[0]},${rgb[1]},${rgb[2]})` + }, + getNowPlayingArtworkBG(size = 32, force = false) { + let self = this + if (typeof this.mk.nowPlayingItem === "undefined") return; + let bginterval = setInterval(() => { + if (!this.mkReady()) { + return "" + } + + try { + if ((this.mk.nowPlayingItem && this.mk.nowPlayingItem["id"] != this.currentTrackID && document.querySelector('.bg-artwork')) || force) { + if (document.querySelector('.bg-artwork')) { + clearInterval(bginterval); + } + this.currentTrackID = this.mk.nowPlayingItem["id"]; + document.querySelector('.bg-artwork').src = ""; + if (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"]) { + getBase64FromUrl(this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"].replace('{w}', size).replace('{h}', size)).then(img => { + document.querySelectorAll('.bg-artwork').forEach(artwork => { + artwork.src = img; + }) + self.$store.commit("setLCDArtwork", img) + }) + try { + clearInterval(bginterval); + } catch (err) { + } + } else { + this.setLibraryArtBG() + } + } else if (this.mk.nowPlayingItem["id"] == this.currentTrackID) { + try { + clearInterval(bginterval); + } catch (err) { + } + } + } catch (e) { + if (this.mk.nowPlayingItem && this.mk.nowPlayingItem["id"] && document.querySelector('.bg-artwork')) { + this.setLibraryArtBG() + try { + clearInterval(bginterval); + } catch (err) { + } + } + } + }, 200) + }, + async getCurrentArtURL() { + try { + let artworkSize = 50 + if (app.getThemeDirective("lcdArtworkSize") != "") { + artworkSize = app.getThemeDirective("lcdArtworkSize") + } else if (this.cfg.visual.directives.windowLayout == "twopanel") { + artworkSize = 70 + } + this.currentArtUrl = ''; + this.currentArtUrlRaw = ''; + if (app.mk.nowPlayingItem != null && app.mk.nowPlayingItem.attributes != null && app.mk.nowPlayingItem.attributes.artwork != null && app.mk.nowPlayingItem.attributes.artwork.url != null && app.mk.nowPlayingItem.attributes.artwork.url != '') { + this.currentArtUrlRaw = (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"] ?? '') + this.currentArtUrl = (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"] ?? '').replace('{w}', artworkSize).replace('{h}', artworkSize); + try { + document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', `url("${this.currentArtUrl}")`); + } catch (e) { + } + } else { + let data = await this.mk.api.v3.music(`/v1/me/library/songs/${this.mk.nowPlayingItem.id}`); + data = data.data.data[0]; + if (data != null && data !== "" && data.attributes != null && data.attributes.artwork != null) { + this.currentArtUrlRaw = (this.mk["nowPlayingItem"]["attributes"]["artwork"]["url"] ?? '') + this.currentArtUrl = (data["attributes"]["artwork"]["url"] ?? '').replace('{w}', artworkSize).replace('{h}', artworkSize); + ipcRenderer.send('updateRPCImage', this.currentArtUrl ?? ''); + try { + document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', `url("${this.currentArtUrl}")`); + } catch (e) { + } + } else { + this.currentArtUrlRaw = '' + this.currentArtUrl = ''; + try { + document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', `url("${this.currentArtUrl}")`); + } catch (e) { + } + } + } + } catch (e) { + + } + }, + async setLibraryArt() { + if (typeof this.mk.nowPlayingItem === "undefined") return; + try { + let data = await this.mk.api.v3.music(`/v1/me/library/songs/${this.mk.nowPlayingItem.id}`); + data = data.data.data[0]; + + if (data != null && data !== "") { + document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', 'url("' + (data["attributes"]["artwork"]["url"]).toString() + '")'); + } else { + document.querySelector('.app-playback-controls .artwork').style.setProperty('--artwork', `url("")`); + } + } catch (e) { + } + }, + async setLibraryArtBG() { + if (typeof this.mk.nowPlayingItem === "undefined") return; + try { + let data = await this.mk.api.v3.music(`/v1/me/library/songs/${this.mk.nowPlayingItem.id}`); + data = data.data.data[0]; + + if (data != null && data !== "") { + getBase64FromUrl((data["attributes"]["artwork"]["url"]).toString()).then(img => { + document.querySelector('.bg-artwork').forEach(artwork => { + artwork.src = img; + }) + self.$store.commit("setLCDArtwork", img) + }) + } + } catch (e) { + } + + }, + quickPlay(query) { + let self = this + MusicKit.getInstance().api.search(query, { limit: 2, types: 'songs' }).then(function (data) { + MusicKit.getInstance().setQueue({ + song: data["songs"]['data'][0]["id"], + parameters: { l: app.mklang } + }).then(function (queue) { + MusicKit.getInstance().play() + setTimeout(() => { + self.$forceUpdate() + }, 1000) + }) + }) + }, + async getRating(item) { + let type = item.type.slice(-1) === "s" ? item.type : item.type + "s" + let id = item.attributes?.playParams?.catalogId ? item.attributes.playParams.catalogId : (item.attributes?.playParams?.id ?? item.id) + if (item.id != null && (item.id.toString()).startsWith("i.")) { + if (!type.startsWith("library-")) { + type = "library-" + type + } + id = item.id + } + let response = await this.mk.api.v3.music(`/v1/me/ratings/${type}?platform=web&ids=${type.includes('library') ? item.id : id}`) + if (response.data.data.length != 0) { + let value = response.data.data[0].attributes.value + return value + } else { + return 0 + } + }, + love(item) { + let type = item.type.slice(-1) === "s" ? item.type : item.type + "s" + let id = item.attributes?.playParams?.catalogId ? item.attributes.playParams.catalogId : (item.attributes?.playParams?.id ?? item.id) + if (item.id != null && (item.id.toString()).startsWith("i.")) { + if (!type.startsWith("library-")) { + type = "library-" + type + } + id = item.id + } + this.mk.api.v3.music(`/v1/me/ratings/${type}/${id}`, {}, { + fetchOptions: { + method: "PUT", + body: JSON.stringify({ + "type": "rating", + "attributes": { + "value": 1 + } + }) + } + }) + }, + dislike(item) { + let type = item.type.slice(-1) === "s" ? item.type : item.type + "s" + let id = item.attributes?.playParams?.catalogId ? item.attributes.playParams.catalogId : (item.attributes?.playParams?.id ?? item.id) + if (item.id != null && (item.id.toString()).startsWith("i.")) { + if (!type.startsWith("library-")) { + type = "library-" + type + } + id = item.id + } + this.mk.api.v3.music(`/v1/me/ratings/${type}/${id}`, {}, { + fetchOptions: { + method: "PUT", + body: JSON.stringify({ + "type": "rating", + "attributes": { + "value": -1 + } + }) + } + }) + }, + unlove(item) { + let type = item.type.slice(-1) === "s" ? item.type : item.type + "s" + let id = item.attributes.playParams.catalogId ? item.attributes.playParams.catalogId : item.id + if (item.id.startsWith("i.")) { + if (!type.startsWith("library-")) { + type = "library-" + type + } + id = item.id + } + this.mk.api.v3.music(`/v1/me/ratings/${type}/${id}`, {}, { + fetchOptions: { + method: "DELETE", + } + }) + }, + checkScrollDirectionIsUp(event) { + if (event.wheelDelta) { + return event.wheelDelta > 0; + } + return event.deltaY < 0; + }, + volumeUp() { + if ((app.mk.volume + app.cfg.audio.volumeStep) > app.cfg.audio.maxVolume) { + app.mk.volume = app.cfg.audio.maxVolume; + console.log('setting max volume') + } else { + console.log('volume up') + app.mk.volume = ((app.mk.volume * 100) + (app.cfg.audio.volumeStep * 100)) / 100 + } + }, + volumeDown() { + if ((app.mk.volume - app.cfg.audio.volumeStep) < 0) { + app.mk.volume = 0; + console.log('setting volume to 0') + } else { + console.log('volume down') + app.mk.volume = ((app.mk.volume * 100) - (app.cfg.audio.volumeStep * 100)) / 100 + } + }, + volumeWheel(event) { + app.checkScrollDirectionIsUp(event) ? this.volumeUp() : this.volumeDown() + }, + muteButtonPressed() { + if (this.cfg.audio.muted) { + this.mk.volume = this.cfg.audio.lastVolume; + this.cfg.audio.muted = false; + } else { + this.cfg.audio.lastVolume = this.cfg.audio.volume; + this.mk.volume = 0; + this.cfg.audio.muted = true; + } + }, + checkMuteChange() { + if (this.cfg.audio.muted) { + this.cfg.audio.muted = false; + } + }, + async apiCall(url, callback) { + const xmlHttp = new XMLHttpRequest(); + + xmlHttp.onreadystatechange = (e) => { + if (xmlHttp.readyState !== 4) { + return; + } + + if (xmlHttp.status === 200) { + // console.log('SUCCESS', xmlHttp.responseText); + callback(JSON.parse(xmlHttp.responseText)); + } else { + console.warn('request_error'); + } + }; + + xmlHttp.open("GET", url); + xmlHttp.setRequestHeader("Authorization", "Bearer " + MusicKit.getInstance().developerToken); + xmlHttp.setRequestHeader("Music-User-Token", "" + MusicKit.getInstance().musicUserToken); + xmlHttp.setRequestHeader("Accept", "application/json"); + xmlHttp.setRequestHeader("Content-Type", "application/json"); + xmlHttp.responseType = "text"; + xmlHttp.send(); + }, + fetchPlaylist(id, callback) { + // id can be found in playlist.attributes.playParams.globalId + // this.mk.api. + this.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/playlists/${id}`).then(res => { + callback(res.data.data[0]) + }) + + // tracks are found in relationship.data + }, + windowFocus(val) { + if (val) { + document.querySelectorAll(".animated-artwork-video").forEach(el => { + el.play() + }) + document.querySelector("body").classList.remove("stopanimation") + this.animateBackground = true + } else { + document.querySelectorAll(".animated-artwork-video").forEach(el => { + el.pause() + }) + document.querySelector("body").classList.add("stopanimation") + this.animateBackground = false + } + }, + async nowPlayingContextMenu(event) { + let self = this + let data_type = this.mk.nowPlayingItem.playParams.kind + let item_id = this.mk.nowPlayingItem.attributes.playParams.id ?? this.mk.nowPlayingItem.id + let isLibrary = this.mk.nowPlayingItem.attributes.playParams.isLibrary ?? false + let params = { "fields[songs]": "inLibrary", "fields[albums]": "inLibrary", "relate": "library", "t": "1" } + app.selectedMediaItems = [] + app.select_selectMediaItem(item_id, data_type, 0, '12344', isLibrary) + let useMenu = "normal" + let menus = { + multiple: { + items: [] + }, + normal: { + headerItems: [{ + "icon": "./assets/feather/heart.svg", + "id": "love", + "name": app.getLz('action.love'), + "hidden": false, + "disabled": true, + "action": function () { + app.love(app.mk.nowPlayingItem) + } + }, + { + "icon": "./assets/feather/heart.svg", + "id": "unlove", + "active": true, + "name": app.getLz('action.unlove'), + "hidden": true, + "action": function () { + app.unlove(app.mk.nowPlayingItem) + } + }, + { + "icon": "./assets/feather/thumbs-down.svg", + "id": "dislike", + "name": app.getLz('action.dislike'), + "hidden": false, + "disabled": true, + "action": function () { + app.dislike(app.mk.nowPlayingItem) + } + }, + { + "icon": "./assets/feather/thumbs-down.svg", + "id": "undo_dislike", + "name": app.getLz('action.undoDislike'), + "active": true, + "hidden": true, + "action": function () { + app.unlove(app.mk.nowPlayingItem) + } + }, + ], + items: [ + { + "icon": "./assets/feather/plus.svg", + "id": "addToLibrary", + "name": app.getLz('action.addToLibrary') + " ...", + "disabled": true, + "action": function () { + app.addToLibrary(app.mk.nowPlayingItem.id); + } + }, + { + "id": "removeFromLibrary", + "icon": "./assets/feather/x-circle.svg", + "name": app.getLz('action.removeFromLibrary'), + "hidden": true, + "action": function () { + self.removeFromLibrary() + } + }, + { + "icon": "./assets/feather/list.svg", + "name": app.getLz('action.addToPlaylist') + " ...", + "action": function () { + app.promptAddToPlaylist() + } + }, + { + "icon": "./assets/feather/radio.svg", + "name": app.getLz('action.startRadio'), + "action": function () { + app.mk.setStationQueue({ song: app.mk.nowPlayingItem.id }).then(() => { + app.mk.play() + app.selectedMediaItems = [] + }) + } + }, + { + "icon": "./assets/feather/user.svg", + "name": app.getLz('action.goToArtist'), + "action": function () { + app.appRoute(`artist/${app.mk.nowPlayingItem.relationships.artists.data[0].id}`) + } + }, + { + "icon": "./assets/feather/disc.svg", + "name": app.getLz('action.goToAlbum'), + "action": function () { + app.appRoute(`album/${app.mk.nowPlayingItem.relationships.albums.data[0].id}`) + } + }, + { + "icon": "./assets/feather/share.svg", + "name": app.getLz('action.share'), + "action": function () { + app.mkapi(app.mk.nowPlayingItem.attributes?.playParams?.kind ?? app.mk.nowPlayingItem.type ?? 'songs', false, app.mk.nowPlayingItem._songId ?? (app.mk.nowPlayingItem.songId ?? app.mk.nowPlayingItem.id) ?? '').then(u => { + app.copyToClipboard((u.data.data.length && u.data.data.length > 0) ? u.data.data[0].attributes.url : u.data.data.attributes.url) + }) + } + }, + { + "icon": "./assets/feather/share.svg", + "name": `${app.getLz('action.share')} (song.link)`, + "action": function () { + app.mkapi(app.mk.nowPlayingItem.attributes?.playParams?.kind ?? app.mk.nowPlayingItem.type ?? 'songs', false, app.mk.nowPlayingItem._songId ?? (app.mk.nowPlayingItem.songId ?? app.mk.nowPlayingItem.id) ?? '').then(u => { + app.songLinkShare((u.data.data.length && u.data.data.length > 0) ? u.data.data[0].attributes.url : u.data.data.attributes.url) + }) + } + } + ] + } + } + if (this.contextExt) { + if (this.contextExt.normal) { + menus.normal.items = menus.normal.items.concat(this.contextExt.normal) + } + } + this.showMenuPanel(menus[useMenu], event) + + try { + let result = await this.inLibrary([this.mk.nowPlayingItem]) + if (result[0].attributes.inLibrary) { + menus.normal.items.find(x => x.id == 'addToLibrary').hidden = true + menus.normal.items.find(x => x.id == 'removeFromLibrary').hidden = false + } else { + menus.normal.items.find(x => x.id == 'addToLibrary').disabled = false + } + } catch (e) { + e = null + } + + try { + let rating = await app.getRating(app.mk.nowPlayingItem) + if (rating == 0) { + menus.normal.headerItems.find(x => x.id == 'love').disabled = false + menus.normal.headerItems.find(x => x.id == 'dislike').disabled = false + } else if (rating == 1) { + menus.normal.headerItems.find(x => x.id == 'unlove').hidden = false + menus.normal.headerItems.find(x => x.id == 'love').hidden = true + } else if (rating == -1) { + menus.normal.headerItems.find(x => x.id == 'undo_dislike').hidden = false + menus.normal.headerItems.find(x => x.id == 'dislike').hidden = true + } + } catch (err) { + + } + }, + LastFMDeauthorize() { + ipcRenderer.invoke('setStoreValue', 'lastfm.enabled', false).catch((e) => console.error(e)); + ipcRenderer.invoke('setStoreValue', 'lastfm.auth_token', '').catch((e) => console.error(e)); + app.cfg.lastfm.auth_token = ""; + app.cfg.lastfm.enabled = false; + const element = document.getElementById('lfmConnect'); + element.innerHTML = app.getLz('term.connect'); + element.onclick = app.LastFMAuthenticate; + }, + LastFMAuthenticate() { + console.log("[LastFM] Received LastFM authentication callback") + const element = document.getElementById('lfmConnect'); + // new key : f9986d12aab5a0fe66193c559435ede3 + window.open('https://www.last.fm/api/auth?api_key=f9986d12aab5a0fe66193c559435ede3&cb=cider://auth/lastfm'); + element.innerText = app.getLz('term.connecting') + '...'; + + /* Just a timeout for the button */ + setTimeout(() => { + if (element.innerText === app.getLz('term.connecting') + '...') { + element.innerText = app.getLz('term.connect'); + console.warn('[LastFM] Attempted connection timed out.'); + } + }, 20000); + + ipcRenderer.on('LastfmAuthenticated', function (_event, lfmAuthKey) { + app.cfg.lastfm.auth_token = lfmAuthKey; + app.cfg.lastfm.enabled = true; + element.innerHTML = `${app.getLz('term.disconnect')}\n

(${app.getLz('term.authed')}: ${lfmAuthKey})

`; + element.onclick = app.LastFMDeauthorize; + }); + }, + /** + parseSCTagToRG: function (tag) { + let soundcheck = tag.split(" ") + let numbers = [] + for (item of soundcheck) { + numbers.push(parseInt(item, 16)) + + } + numbers.shift() + //let gain = Math.log10((Math.max(numbers[0], numbers[1]) ?? 1000) / 1000.0) * -10 + let peak = Math.max(numbers[6], numbers[7]) / 32768.0 + let gain = Math.pow(10, ((-7.63 - (Math.log10(peak) * 20)) / 20))// EBU R 128 Compliant + return { + gain: gain, + peak: peak + } + },*/ + fullscreen(flag) { + if (flag) { + ipcRenderer.send('setFullScreen', true); + if (app.mk.nowPlayingItem.type && app.mk.nowPlayingItem.type.toLowerCase().includes("video")) { + document.querySelector('video#apple-music-video-player').requestFullscreen() + } else { + app.appMode = 'fullscreen'; + } + document.addEventListener('keydown', event => { + if (event.key === 'Escape' && app.appMode === 'fullscreen') { + this.fullscreen(false); + } + }); + } else { + ipcRenderer.send('setFullScreen', false); + app.appMode = 'player'; + } + }, + miniPlayer(flag) { + if (flag) { + this.tmpWidth = window.innerWidth; + this.tmpHeight = window.innerHeight; + ipcRenderer.send('unmaximize'); + ipcRenderer.send('windowmin', 250, 250) + ipcRenderer.send('windowresize', 300, 300, false) + app.appMode = 'mini'; + } else { + ipcRenderer.send('windowmin', 844, 410) + ipcRenderer.send('windowresize', this.tmpWidth, this.tmpHeight, false) + ipcRenderer.send('windowontop', false) + //this.cfg.visual.miniplayer_top_toggle = true; + app.appMode = 'player'; + } + }, + pinMiniPlayer(status = false) { + if (!status){ + if (!this.cfg.visual.miniplayer_top_toggle) { + ipcRenderer.send('windowontop', true) + this.cfg.visual.miniplayer_top_toggle = true; + } else { + ipcRenderer.send('windowontop', false) + this.cfg.visual.miniplayer_top_toggle = false; + }} else { + ipcRenderer.send('windowontop', this.cfg.visual.miniplayer_top_toggle ?? false) + } + }, + formatTimezoneOffset: (e = new Date) => { + let leadingZeros = (e, s = 2) => { + let n = "" + e; + for (; n.length < s;) + n = "0" + n; + return n + } + + const s = e.getTimezoneOffset(), + n = Math.floor(Math.abs(s) / 60), + d = Math.round(Math.abs(s) % 60); + let h = "+"; + return 0 !== s && (h = s > 0 ? "-" : "+"), + `${h}${leadingZeros(n, 2)}:${leadingZeros(d, 2)}` + }, + toggleHideUserInfo() { + if (this.chrome.hideUserInfo) { + this.cfg.visual.showuserinfo = true + this.chrome.hideUserInfo = false + } else { + this.cfg.visual.showuserinfo = false + this.chrome.hideUserInfo = true + } + }, + isElementOverflowing(selector) { + try { + let element = document.querySelector(selector); + var overflowX = element.offsetWidth < element.scrollWidth, + overflowY = element.offsetHeight < element.scrollHeight; + element.setAttribute('data-value', '\xa0\xa0\xa0\xa0' + element.textContent); + + return (overflowX || overflowY); + } catch (e) { + return false + } + }, + async showWebRemoteQR() { + //this.webremoteqr = await ipcRenderer.invoke('setRemoteQR','') + this.webremoteurl = await ipcRenderer.invoke('showQR', '') + //this.modals.qrcode = true; + }, + checkMarquee() { + if (isElementOverflowing('#app-main > div.app-chrome > div.app-chrome--center > div > div > div.playback-info > div.song-artist') == true) { + document.getElementsByClassName('song-artist')[0].classList.add('marquee'); + document.getElementsByClassName('song-artist')[1].classList.add('marquee-after'); + } + if (isElementOverflowing('#app-main > div.app-chrome > div.app-chrome--center > div > div > div.playback-info > div.song-name') == true) { + document.getElementsByClassName('song-name')[0].classList.add('marquee'); + document.getElementsByClassName('song-name')[1].classList.add('marquee-after'); + } + }, + closeWindow() { + ipcRenderer.send('close'); + }, + darwinShare(url) { + ipcRenderer.send('share-menu', url) + }, + arrayToChunk(arr, chunkSize) { + let R = []; + for (let i = 0, len = arr.length; i < len; i += chunkSize) { + R.push(arr.slice(i, i + chunkSize)); + } + return R; + }, + SpacePause() { + const elems = document.querySelectorAll('input'); + for (let elem of elems) { + if (elem === document.activeElement) { + return; + } + } + if (!this.isDev) // disable in dev mode to keep my sanity + MusicKitInterop.playPause(); + }, + async MKJSLang() { + let u = this.cfg.general.language; + // use MusicKit.getInstance or crash + try { + let item = await MusicKit.getInstance().api.v3.music(`v1/storefronts/${app.mk.storefrontId}`) + let langcodes = item.data.data[0].attributes.supportedLanguageTags; + if (langcodes) langcodes = langcodes.map(function (u) { + return u.replace(/-Han[s|t]/i, "").toLowerCase() + }) + console.log(langcodes) + let sellang = "" + if (u && langcodes.includes(u.toLowerCase().replace('_', "-"))) { + sellang = ((u.toLowerCase()).replace('_', "-")) + } else if (u && u.includes('_') && langcodes.includes(((u.toLowerCase()).replace('_', "-")).split("-")[0])) { + sellang = ((u.toLowerCase()).replace('_', "-")).split("-")[0] + } + if (sellang == "") sellang = (item.data.data[0].attributes.defaultLanguageTag).toLowerCase() + + // Fix weird locales: + if (sellang == "iw") sellang = "iw-il" + sellang = sellang.replace(/-Han[s|t]/i, "").toLowerCase() + + console.log(sellang) + return await sellang + } catch (err) { + console.log('locale err', err) + let langcodes = ['af', 'sq', 'ar', 'eu', 'bg', 'be', 'ca', 'zh', 'zh-tw', 'zh-cn', 'zh-hk', 'zh-sg', 'hr', 'cs', 'da', 'nl', 'nl-be', 'en', 'en-us', 'en-eg', 'en-au', 'en-gb', 'en-ca', 'en-nz', 'en-ie', 'en-za', 'en-jm', 'en-bz', 'en-tt', 'en-001', 'et', 'fo', 'fa', 'fi', 'fr', 'fr-ca', 'gd', 'de', 'de-ch', 'el', 'he', 'hi', 'hu', 'is', 'id', 'it', 'ja', 'ko', 'lv', 'lt', 'mk', 'mt', 'no', 'nb', 'nn', 'pl', 'pt-br', 'pt', 'rm', 'ro', 'ru', 'sr', 'sk', 'sl', 'es', 'es-mx', 'es-419', 'sv', 'th', 'ts', 'tn', 'tr', 'uk', 'ur', 've', 'vi', 'xh', 'yi', 'zu', 'ms', 'iw', 'lo', 'tl', 'kk', 'ta', 'te', 'bn', 'ga', 'ht', 'la', 'pa', 'sa']; + let sellang = "en" + if (u && langcodes.includes(u.toLowerCase().replace('_', "-"))) { + sellang = ((u.toLowerCase()).replace('_', "-")) + } else if (u && u.includes('_') && langcodes.includes(((u.toLowerCase()).replace('_', "-")).split("-")[0])) { + sellang = ((u.toLowerCase()).replace('_', "-")).split("-")[0] + } + if (sellang.startsWith("en") && this.mk.storefrontId != "us") sellang = "en-gb" + return await sellang + } + }, + skipToNextItem() { + app.prevButtonBackIndicator = false; + // app.mk.skipToNextItem() is buggy somehow so use this + if (this.mk.queue.nextPlayableItemIndex != -1 && this.mk.queue.nextPlayableItemIndex != null) + this.mk.changeToMediaAtIndex(this.mk.queue.nextPlayableItemIndex); + }, + skipToPreviousItem() { + // app.mk.skipToPreviousItem() is buggy somehow so use this + if (this.mk.queue.previousPlayableItemIndex != -1 && this.mk.queue.previousPlayableItemIndex != null) + this.mk.changeToMediaAtIndex(this.mk.queue.previousPlayableItemIndex); + }, + mediaKeyFixes() { + navigator.mediaSession.setActionHandler('previoustrack', function () { + app.prevButton() + }); + navigator.mediaSession.setActionHandler('nexttrack', function () { + app.skipToNextItem() + }); + }, + checkForUpdate() { + ipcRenderer.send('check-for-update') + document.getElementById('settings.option.general.updateCider.check').innerHTML = 'Checking...' + notyf.success('Checking for update in background...') + ipcRenderer.on('update-response', (event, res) => { + if (res === "update-not-available") { + notyf.error(app.getLz(`settings.notyf.updateCider.${res}`)) + } else if (res === "update-downloaded") { + notyf.success(app.getLz(`settings.notyf.updateCider.${res}`)) + } else if (res === "update-error") { + notyf.error(app.getLz(`settings.notyf.updateCider.${res}`)) + } else if (res === "update-timeout") { + notyf.error(app.getLz(`settings.notyf.updateCider.${res}`)) + } + document.getElementById('settings.option.general.updateCider.check').innerHTML = app.getLz('term.check') + }) + }, + } +}) + + +export { app } \ No newline at end of file diff --git a/src/renderer/main/vuex-store.js b/src/renderer/main/vuex-store.js new file mode 100644 index 00000000..fb2b774f --- /dev/null +++ b/src/renderer/main/vuex-store.js @@ -0,0 +1,20 @@ +const store = new Vuex.Store({ + state: { + library: { + // songs: ipcRenderer.sendSync("get-library-songs"), + // albums: ipcRenderer.sendSync("get-library-albums"), + // recentlyAdded: ipcRenderer.sendSync("get-library-recentlyAdded"), + // playlists: ipcRenderer.sendSync("get-library-playlists") + }, + artwork: { + playerLCD: "" + } + }, + mutations: { + setLCDArtwork(state, artwork) { + state.artwork.playerLCD = artwork + } + } +}) + +export {store} \ No newline at end of file diff --git a/src/renderer/js/WSAPI_Interop.js b/src/renderer/main/wsapi_interop.js similarity index 92% rename from src/renderer/js/WSAPI_Interop.js rename to src/renderer/main/wsapi_interop.js index 16002fae..563b2e30 100644 --- a/src/renderer/js/WSAPI_Interop.js +++ b/src/renderer/main/wsapi_interop.js @@ -49,13 +49,13 @@ const wsapi = { }, musickitApi(method, id, params, library = false) { if (library) { - MusicKit.getInstance().api.library[method](id, params).then((results)=>{ - ipcRenderer.send('wsapi-returnMusicKitApi', JSON.stringify(results), method) - }) + MusicKit.getInstance().api.library[method](id, params).then((results)=>{ + ipcRenderer.send('wsapi-returnMusicKitApi', JSON.stringify(results), method) + }) } else { - MusicKit.getInstance().api[method](id, params).then((results)=>{ - ipcRenderer.send('wsapi-returnMusicKitApi', JSON.stringify(results), method) - }) + MusicKit.getInstance().api[method](id, params).then((results)=>{ + ipcRenderer.send('wsapi-returnMusicKitApi', JSON.stringify(results), method) + }) } }, getPlaybackState () { @@ -111,4 +111,6 @@ const wsapi = { getmaxVolume() { ipcRenderer.send('wsapi-returnvolumeMax',JSON.stringify(app.cfg.audio.maxVolume)); } -} \ No newline at end of file +} + +export {wsapi} \ No newline at end of file diff --git a/src/renderer/style.less b/src/renderer/style.less index 89633b1f..ba1f00f6 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -4,6 +4,7 @@ @import url("https://fonts.googleapis.com/css2?family=Noto+Sans+HK:wght@100;300;400;500;700;900&display=swap"); @import url("https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@100;300;400;500;700;900&display=swap"); @import url("https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap"); +@import url("less/bootstrap-vue.min.css"); @import url("less/ameframework.less"); @import url("less/codicon.css"); @import url("less/bootstrap.less"); @@ -777,18 +778,26 @@ input[type=range].web-slider::-webkit-slider-runnable-track { font-weight: 400; font-family: inherit; font-size: 14px; - margin: 6px 0px; + margin: 3px 0px; border: 1px solid transparent; border-radius: 6px; background: transparent; color: #eee; - transition: transform .1s; + transition: transform 0.1s; text-align: left; &.app-sidebar-item-playlist { -webkit-user-drag: element; overflow: hidden; text-overflow: ellipsis; + + .presentNotice { + align-self: center; + margin-left: 8px; + text-transform: uppercase; + font-size: 0.7em; + opacity: 0.6; + } } } @@ -1829,6 +1838,9 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { -webkit-box-orient: vertical; } +.no-animation { + animation: unset !important; +} .fullscreen-view-container { position: absolute; @@ -1868,6 +1880,10 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { height: 50vh; } + .bg-artwork-container { + display: block !important; + } + @media only screen and (max-width: 1121px) { .display--large { display: flex !important; @@ -1970,13 +1986,10 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { filter: brightness(85%) saturate(95%) blur(180px) contrast(0.9) opacity(0.9); } - .no-animation { - animation: unset; - } + } } - .lyrics-col { height: 62vh; @@ -2653,6 +2666,10 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { width: 200VH; height: 200VH; } + + .bg-artwork-container{ + display: block !important; + } } .lyric-body { @@ -2661,22 +2678,15 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { padding: 0px; margin: 0px; overflow: hidden; + filter: drop-shadow(0px 4px 6px rgb(0 0 0 / 70%)); .lyric-line { pointer-events: none; - font-weight: 500; + font-weight: 600; font-size: 2em; transform-origin: center; animation: fsLyricIn var(--appleEase) .2s; opacity: 0.9; - text-shadow: -1px -1px 0 #000, - 0 -1px 0 #000, - 1px -1px 0 #000, - 1px 0 0 #000, - 1px 1px 0 #000, - 0 1px 0 #000, - -1px 1px 0 #000, - -1px 0 0 #000; &:not(.active) { display: none; @@ -2962,6 +2972,10 @@ body.no-gpu { .bg-artwork-container { display: none; + animation: none !important; + .bg-artwork{ + animation: none !important; + } } #navigation-bar { @@ -3002,6 +3016,10 @@ body.no-gpu { .drawertransition-leave-to { right: -300px; } + + .lyric-line:hover::after { + display: none; + } } .qrimg { diff --git a/src/renderer/views/app/app-navigation.ejs b/src/renderer/views/app/app-navigation.ejs index b7d7f654..58833a1c 100644 --- a/src/renderer/views/app/app-navigation.ejs +++ b/src/renderer/views/app/app-navigation.ejs @@ -6,8 +6,9 @@ v-if="drawer.open && drawer.panel == 'lyrics' && lyrics && lyrics != [] && lyrics.length > 0">
- - + + +
+ v-model="mk.volume" v-if="typeof mk.volume != 'undefined'" @change="checkMuteChange()" + v-b-tooltip.hover :title="`${(Math.log10(mk.volume) * 20).toFixed(2)} dB`">
+ v-model="mk.volume" v-if="typeof mk.volume != 'undefined'" @change="checkMuteChange()" + v-b-tooltip.hover :title="`${(Math.log10(mk.volume) * 20).toFixed(2)} dB`">
diff --git a/src/renderer/views/components/add-to-playlist.ejs b/src/renderer/views/components/add-to-playlist.ejs index ee093413..f209f5b8 100644 --- a/src/renderer/views/components/add-to-playlist.ejs +++ b/src/renderer/views/components/add-to-playlist.ejs @@ -12,7 +12,7 @@
<%- include("../svg/plus.svg") %>
{{app.getLz('action.createPlaylist')}}
- + diff --git a/src/renderer/views/components/mediaitem-scroller-horizontal-mvview.ejs b/src/renderer/views/components/mediaitem-scroller-horizontal-mvview.ejs index 0f3e7bd7..da292a71 100644 --- a/src/renderer/views/components/mediaitem-scroller-horizontal-mvview.ejs +++ b/src/renderer/views/components/mediaitem-scroller-horizontal-mvview.ejs @@ -2,13 +2,13 @@ @@ -43,6 +43,8 @@ app: this.$root, } }, - methods: {} + // mounted(){ + // console.log('hes',this.items) + // } }); \ No newline at end of file diff --git a/src/renderer/views/components/mediaitem-square.ejs b/src/renderer/views/components/mediaitem-square.ejs index 3d8724cb..296d1780 100644 --- a/src/renderer/views/components/mediaitem-square.ejs +++ b/src/renderer/views/components/mediaitem-square.ejs @@ -36,7 +36,7 @@
-
{{ item.attributes.name }}
+
{{ item.attributes?.name ?? (item.relationships?.contents?.data[0]?.attributes?.name ?? '') }}