@ozdao/martyrs 0.2.565 → 0.2.566
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/martyrs/dist/main-B9o1iBAZ.js +943 -0
- package/dist/martyrs/dist/main-B9o1iBAZ.js.map +1 -0
- package/dist/martyrs/dist/web-BF3ijvEr.js +55 -0
- package/dist/martyrs/dist/web-BF3ijvEr.js.map +1 -0
- package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.js +96 -0
- package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.js.map +1 -0
- package/dist/martyrs/src/modules/core/views/components/layouts/App.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +1 -0
- package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/sections/Walkthrough.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
- package/dist/martyrs/src/modules/events/events.client.js +15 -12
- package/dist/martyrs/src/modules/events/events.client.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js +95 -0
- package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +5 -2
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +24 -24
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.js +31 -6
- package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +120 -205
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js +9 -13
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +166 -245
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +135 -220
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js +171 -0
- package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +31 -153
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js +96 -0
- package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +55 -27
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/player/tonar.png.js +5 -0
- package/dist/martyrs/src/modules/music/components/player/tonar.png.js.map +1 -0
- package/dist/martyrs/src/modules/music/store/albums.js +8 -2
- package/dist/martyrs/src/modules/music/store/albums.js.map +1 -1
- package/dist/martyrs/src/modules/music/store/player.js +83 -65
- package/dist/martyrs/src/modules/music/store/player.js.map +1 -1
- package/dist/martyrs/src/modules/music/store/tracks.js +4 -13
- package/dist/martyrs/src/modules/music/store/tracks.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/notifications.client.js +2 -2
- package/dist/martyrs.css +1 -1
- package/dist/music.server.js +33 -6
- package/dist/node_modules/.pnpm/{@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1 → @capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4}/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/definitions.js +1 -0
- package/dist/node_modules/.pnpm/@capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/definitions.js.map +1 -0
- package/dist/node_modules/.pnpm/{@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1 → @capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4}/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/index.js +1 -1
- package/dist/node_modules/.pnpm/{@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1 → @capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4}/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/index.js.map +1 -1
- package/dist/node_modules/.pnpm/{@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1 → @capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4}/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/web.js +16 -1
- package/dist/node_modules/.pnpm/@capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/web.js.map +1 -0
- package/dist/node_modules/.pnpm/{@capacitor_core@7.0.1 → @capacitor_core@7.4.4}/node_modules/@capacitor/core/dist/index.js +2 -1
- package/dist/node_modules/.pnpm/@capacitor_core@7.4.4/node_modules/@capacitor/core/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/{@capacitor_device@7.0.0_@capacitor_core@7.0.1 → @capacitor_device@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/device/dist/esm/index.js +1 -1
- package/dist/node_modules/.pnpm/{@capacitor_device@7.0.0_@capacitor_core@7.0.1 → @capacitor_device@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/device/dist/esm/index.js.map +1 -1
- package/dist/node_modules/.pnpm/{@capacitor_device@7.0.0_@capacitor_core@7.0.1 → @capacitor_device@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/device/dist/esm/web.js +1 -1
- package/dist/node_modules/.pnpm/{@capacitor_device@7.0.0_@capacitor_core@7.0.1 → @capacitor_device@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/device/dist/esm/web.js.map +1 -1
- package/dist/node_modules/.pnpm/{@capacitor_keyboard@7.0.0_@capacitor_core@7.0.1 → @capacitor_keyboard@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/keyboard/dist/esm/definitions.js.map +1 -1
- package/dist/node_modules/.pnpm/{@capacitor_keyboard@7.0.0_@capacitor_core@7.0.1 → @capacitor_keyboard@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/keyboard/dist/esm/index.js +1 -1
- package/dist/node_modules/.pnpm/{@capacitor_keyboard@7.0.0_@capacitor_core@7.0.1 → @capacitor_keyboard@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/keyboard/dist/esm/index.js.map +1 -1
- package/dist/node_modules/.pnpm/{@capacitor_push-notifications@7.0.0_@capacitor_core@7.0.1 → @capacitor_push-notifications@7.0.3_@capacitor_core@7.4.4}/node_modules/@capacitor/push-notifications/dist/esm/index.js +1 -1
- package/dist/node_modules/.pnpm/{@capacitor_push-notifications@7.0.0_@capacitor_core@7.0.1 → @capacitor_push-notifications@7.0.3_@capacitor_core@7.4.4}/node_modules/@capacitor/push-notifications/dist/esm/index.js.map +1 -1
- package/dist/node_modules/.pnpm/{capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.0.1 → capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.4.4}/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/index.js +1 -1
- package/dist/node_modules/.pnpm/{capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.0.1 → capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.4.4}/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/index.js.map +1 -1
- package/dist/node_modules/.pnpm/{capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.0.1 → capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.4.4}/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/web.js +1 -1
- package/dist/node_modules/.pnpm/{capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.0.1 → capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.4.4}/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/web.js.map +1 -1
- package/dist/style.css +214 -138
- package/package.json +1 -1
- package/src/components/BottomSheet/BottomSheet.vue +4 -4
- package/src/modules/LAYOUT.MD +767 -0
- package/src/modules/core/views/components/layouts/Client.vue +1 -1
- package/src/modules/events/events.client.js +3 -0
- package/src/modules/music/components/blocks/ActionButtons.vue +74 -0
- package/src/modules/music/components/cards/AlbumCard.vue +1 -1
- package/src/modules/music/components/cards/ArtistCardSmall.vue +8 -6
- package/src/modules/music/components/layouts/MusicBottomPlayer.vue +94 -4
- package/src/modules/music/components/pages/Album.vue +55 -67
- package/src/modules/music/components/pages/MusicHome.vue +4 -6
- package/src/modules/music/components/pages/Playlist.vue +61 -70
- package/src/modules/music/components/pages/Track.vue +54 -71
- package/src/modules/music/components/player/FullscreenPlayer.vue +248 -0
- package/src/modules/music/components/player/MusicPlayer.vue +21 -216
- package/src/modules/music/components/player/PlayerControls.vue +112 -0
- package/src/modules/music/components/player/Visualizer.vue +151 -0
- package/src/modules/music/components/player/VolumeControl.vue +75 -23
- package/src/modules/music/components/player/tonar.png +0 -0
- package/src/modules/music/routes/albums.routes.js +13 -12
- package/src/modules/music/routes/tracks.routes.js +39 -0
- package/src/modules/music/store/albums.js +10 -2
- package/src/modules/music/store/player.js +101 -89
- package/src/modules/music/store/tracks.js +5 -21
- package/src/styles/config.scss +6 -6
- package/dist/node_modules/.pnpm/@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/definitions.js.map +0 -1
- package/dist/node_modules/.pnpm/@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/web.js.map +0 -1
- package/dist/node_modules/.pnpm/@capacitor_core@7.0.1/node_modules/@capacitor/core/dist/index.js.map +0 -1
- /package/dist/node_modules/.pnpm/{@capacitor_keyboard@7.0.0_@capacitor_core@7.0.1 → @capacitor_keyboard@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/keyboard/dist/esm/definitions.js +0 -0
|
@@ -119,33 +119,34 @@ export default function setupAlbumsRoutes(app, db) {
|
|
|
119
119
|
handler: async (req, res) => {
|
|
120
120
|
try {
|
|
121
121
|
const limit = parseInt(req.query.limit) || 10;
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
122
|
+
const skip = parseInt(req.query.skip) || 0;
|
|
123
|
+
const sortParam = req.query.sortParam || 'releaseDate';
|
|
124
|
+
const sortOrder = req.query.sortOrder === 'asc' ? 1 : -1;
|
|
125
|
+
|
|
126
|
+
const sortObject = { [sortParam]: sortOrder };
|
|
127
|
+
|
|
125
128
|
const featuredAlbums = await db.album
|
|
126
|
-
.find({
|
|
127
|
-
status: 'published'
|
|
128
|
-
releaseDate: {
|
|
129
|
-
$gte: new Date(Date.now() - 90 * 24 * 60 * 60 * 1000) // последние 90 дней
|
|
130
|
-
}
|
|
129
|
+
.find({
|
|
130
|
+
status: 'published'
|
|
131
131
|
})
|
|
132
132
|
.populate('artists', 'name url photoUrl isVerified')
|
|
133
|
-
.sort(
|
|
133
|
+
.sort(sortObject)
|
|
134
|
+
.skip(skip)
|
|
134
135
|
.limit(limit);
|
|
135
136
|
|
|
136
137
|
// Update totalTracks count for each album
|
|
137
138
|
for (const album of featuredAlbums) {
|
|
138
|
-
const trackCount = await db.track.countDocuments({
|
|
139
|
+
const trackCount = await db.track.countDocuments({
|
|
139
140
|
album: album._id,
|
|
140
141
|
status: 'published'
|
|
141
142
|
});
|
|
142
|
-
|
|
143
|
+
|
|
143
144
|
if (album.totalTracks !== trackCount) {
|
|
144
145
|
album.totalTracks = trackCount;
|
|
145
146
|
await album.save();
|
|
146
147
|
}
|
|
147
148
|
}
|
|
148
|
-
|
|
149
|
+
|
|
149
150
|
res.json(featuredAlbums);
|
|
150
151
|
} catch (error) {
|
|
151
152
|
console.error(error);
|
|
@@ -49,6 +49,7 @@ export default function setupTracksRoutes(app, db) {
|
|
|
49
49
|
tracksCRUD.policies.disableForAction('recent');
|
|
50
50
|
tracksCRUD.policies.disableForAction('popular');
|
|
51
51
|
tracksCRUD.policies.disableForAction('by-genre');
|
|
52
|
+
tracksCRUD.policies.disableForAction('related');
|
|
52
53
|
|
|
53
54
|
// Перенос кастомных роутов через addAction для обратной совместимости
|
|
54
55
|
|
|
@@ -170,5 +171,43 @@ export default function setupTracksRoutes(app, db) {
|
|
|
170
171
|
}
|
|
171
172
|
});
|
|
172
173
|
|
|
174
|
+
// Get related tracks by track URL - /api/tracks/related/:trackUrl
|
|
175
|
+
tracksCRUD.addAction('related', {
|
|
176
|
+
method: 'get',
|
|
177
|
+
path: '/related/:trackUrl',
|
|
178
|
+
auth: false,
|
|
179
|
+
abac: { enabled: false },
|
|
180
|
+
handler: async (req, res) => {
|
|
181
|
+
try {
|
|
182
|
+
// Найти трек по URL
|
|
183
|
+
const track = await db.track.findOne({ url: req.params.trackUrl });
|
|
184
|
+
|
|
185
|
+
if (!track) {
|
|
186
|
+
return res.status(404).json({ error: 'Track not found' });
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const limit = parseInt(req.query.limit) || 10;
|
|
190
|
+
|
|
191
|
+
// Получить другие треки этого же артиста
|
|
192
|
+
const relatedTracks = await db.track
|
|
193
|
+
.find({
|
|
194
|
+
artist: track.artist,
|
|
195
|
+
_id: { $ne: track._id }, // Исключить текущий трек
|
|
196
|
+
status: 'published',
|
|
197
|
+
isPublic: true,
|
|
198
|
+
})
|
|
199
|
+
.populate('artist', 'name url photoUrl isVerified')
|
|
200
|
+
.populate('album', 'title url coverArt')
|
|
201
|
+
.sort({ playCount: -1, releaseDate: -1 })
|
|
202
|
+
.limit(limit);
|
|
203
|
+
|
|
204
|
+
res.json(relatedTracks);
|
|
205
|
+
} catch (error) {
|
|
206
|
+
console.error(error);
|
|
207
|
+
res.status(500).json({ error: error.message });
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
|
|
173
212
|
return tracksCRUD;
|
|
174
213
|
}
|
|
@@ -32,10 +32,18 @@ export const actions = {
|
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
34
|
|
|
35
|
-
async fetchFeaturedAlbums() {
|
|
35
|
+
async fetchFeaturedAlbums(options = {}) {
|
|
36
36
|
state.loadingFeatured = true;
|
|
37
37
|
try {
|
|
38
|
-
const
|
|
38
|
+
const queryParams = new URLSearchParams();
|
|
39
|
+
|
|
40
|
+
if (options.limit) queryParams.append('limit', options.limit);
|
|
41
|
+
if (options.skip) queryParams.append('skip', options.skip);
|
|
42
|
+
if (options.sortParam) queryParams.append('sortParam', options.sortParam);
|
|
43
|
+
if (options.sortOrder) queryParams.append('sortOrder', options.sortOrder);
|
|
44
|
+
|
|
45
|
+
const url = `${process.env.API_URL}/api/albums/featured${queryParams.toString() ? '?' + queryParams.toString() : ''}`;
|
|
46
|
+
const response = await fetch(url);
|
|
39
47
|
const albums = await response.json();
|
|
40
48
|
state.featured = albums;
|
|
41
49
|
return albums;
|
|
@@ -5,19 +5,23 @@ import { reactive } from 'vue';
|
|
|
5
5
|
// State
|
|
6
6
|
export const state = reactive({
|
|
7
7
|
currentTrack: null,
|
|
8
|
+
currentTrackIndex: 0,
|
|
8
9
|
queue: [],
|
|
9
10
|
isPlaying: false,
|
|
10
11
|
volume: 0.7,
|
|
11
12
|
muted: false,
|
|
12
13
|
currentTime: 0,
|
|
13
14
|
duration: 0,
|
|
14
|
-
repeat:
|
|
15
|
+
repeat: false,
|
|
15
16
|
shuffle: false,
|
|
16
17
|
initialQueue: [], // To keep original order when shuffle is toggled
|
|
17
18
|
audioElement: null,
|
|
18
19
|
audioContext: null,
|
|
19
20
|
listeningPartyId: null,
|
|
20
21
|
syncInProgress: false,
|
|
22
|
+
showFullPlayer: false,
|
|
23
|
+
rotationAngle: 0,
|
|
24
|
+
animationFrameId: null,
|
|
21
25
|
});
|
|
22
26
|
|
|
23
27
|
// Actions
|
|
@@ -53,15 +57,24 @@ export const actions = {
|
|
|
53
57
|
});
|
|
54
58
|
|
|
55
59
|
state.audioElement.addEventListener('ended', () => {
|
|
56
|
-
|
|
60
|
+
if (state.repeat) {
|
|
61
|
+
// Restart текущего трека
|
|
62
|
+
this.seek(0);
|
|
63
|
+
state.audioElement.play().catch(e => console.error(e));
|
|
64
|
+
} else {
|
|
65
|
+
// Следующий трек
|
|
66
|
+
this.playNext();
|
|
67
|
+
}
|
|
57
68
|
});
|
|
58
69
|
|
|
59
70
|
state.audioElement.addEventListener('play', () => {
|
|
60
71
|
state.isPlaying = true;
|
|
72
|
+
this.startRotation();
|
|
61
73
|
});
|
|
62
74
|
|
|
63
75
|
state.audioElement.addEventListener('pause', () => {
|
|
64
76
|
state.isPlaying = false;
|
|
77
|
+
this.stopRotation();
|
|
65
78
|
});
|
|
66
79
|
}
|
|
67
80
|
}
|
|
@@ -165,24 +178,11 @@ export const actions = {
|
|
|
165
178
|
setQueue(tracks, startIndex = 0) {
|
|
166
179
|
state.queue = [...tracks];
|
|
167
180
|
state.initialQueue = [...tracks];
|
|
181
|
+
state.currentTrackIndex = startIndex;
|
|
168
182
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
state.queue = [...tracksToPlay, ...state.queue];
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
// If shuffle is on, randomize the queue except the first track
|
|
176
|
-
if (state.shuffle && state.queue.length > 1) {
|
|
177
|
-
const firstTrack = state.queue[0];
|
|
178
|
-
const remainingTracks = state.queue.slice(1);
|
|
179
|
-
this.shuffleArray(remainingTracks);
|
|
180
|
-
state.queue = [firstTrack, ...remainingTracks];
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
// Start playing the first track in queue
|
|
184
|
-
if (state.queue.length > 0) {
|
|
185
|
-
this.playTrack(state.queue[0]);
|
|
183
|
+
// Start playing the track at startIndex
|
|
184
|
+
if (state.queue.length > 0 && state.queue[startIndex]) {
|
|
185
|
+
this.playTrack(state.queue[startIndex]);
|
|
186
186
|
}
|
|
187
187
|
},
|
|
188
188
|
|
|
@@ -199,6 +199,25 @@ export const actions = {
|
|
|
199
199
|
removeFromQueue(index) {
|
|
200
200
|
if (index >= 0 && index < state.queue.length) {
|
|
201
201
|
state.queue.splice(index, 1);
|
|
202
|
+
state.initialQueue.splice(index, 1);
|
|
203
|
+
|
|
204
|
+
// Корректируем currentTrackIndex если нужно
|
|
205
|
+
if (index < state.currentTrackIndex) {
|
|
206
|
+
// Удалили трек до текущего - сдвигаем индекс назад
|
|
207
|
+
state.currentTrackIndex--;
|
|
208
|
+
} else if (index === state.currentTrackIndex) {
|
|
209
|
+
// Удалили текущий трек - играем следующий (или первый если был последний)
|
|
210
|
+
if (state.queue.length > 0) {
|
|
211
|
+
if (state.currentTrackIndex >= state.queue.length) {
|
|
212
|
+
state.currentTrackIndex = 0;
|
|
213
|
+
}
|
|
214
|
+
this.playTrack(state.queue[state.currentTrackIndex]);
|
|
215
|
+
} else {
|
|
216
|
+
state.currentTrack = null;
|
|
217
|
+
state.isPlaying = false;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Если удалили трек после текущего - ничего не делаем
|
|
202
221
|
}
|
|
203
222
|
},
|
|
204
223
|
|
|
@@ -216,95 +235,46 @@ export const actions = {
|
|
|
216
235
|
},
|
|
217
236
|
|
|
218
237
|
playNext() {
|
|
219
|
-
if (state.queue.length
|
|
220
|
-
// Only one track or empty queue
|
|
221
|
-
if (state.repeat === 'one' || state.repeat === 'all') {
|
|
222
|
-
// Replay the current track
|
|
223
|
-
this.seek(0);
|
|
224
|
-
state.audioElement.play().catch(e => console.error(e));
|
|
225
|
-
} else {
|
|
226
|
-
// Stop playback
|
|
227
|
-
state.isPlaying = false;
|
|
228
|
-
}
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
238
|
+
if (state.queue.length === 0) return;
|
|
231
239
|
|
|
232
|
-
if (state.
|
|
233
|
-
//
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
// Play the next track if available
|
|
242
|
-
if (state.queue.length > 0) {
|
|
243
|
-
this.playTrack(state.queue[0]);
|
|
244
|
-
} else {
|
|
245
|
-
state.currentTrack = null;
|
|
246
|
-
state.isPlaying = false;
|
|
247
|
-
}
|
|
240
|
+
if (state.shuffle) {
|
|
241
|
+
// Случайный трек (кроме текущего)
|
|
242
|
+
let nextIndex;
|
|
243
|
+
do {
|
|
244
|
+
nextIndex = Math.floor(Math.random() * state.queue.length);
|
|
245
|
+
} while (nextIndex === state.currentTrackIndex && state.queue.length > 1);
|
|
246
|
+
state.currentTrackIndex = nextIndex;
|
|
248
247
|
} else {
|
|
249
|
-
//
|
|
250
|
-
|
|
251
|
-
state.audioElement.play().catch(e => console.error(e));
|
|
248
|
+
// По порядку (циклически)
|
|
249
|
+
state.currentTrackIndex = (state.currentTrackIndex + 1) % state.queue.length;
|
|
252
250
|
}
|
|
251
|
+
|
|
252
|
+
this.playTrack(state.queue[state.currentTrackIndex]);
|
|
253
253
|
},
|
|
254
254
|
|
|
255
255
|
playPrevious() {
|
|
256
|
+
if (state.queue.length === 0) return;
|
|
257
|
+
|
|
256
258
|
// If we're more than 3 seconds into the track, restart it
|
|
257
259
|
if (state.currentTime > 3) {
|
|
258
260
|
this.seek(0);
|
|
259
261
|
return;
|
|
260
262
|
}
|
|
261
263
|
|
|
262
|
-
//
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
264
|
+
// Move to previous track (циклически)
|
|
265
|
+
state.currentTrackIndex = state.currentTrackIndex - 1;
|
|
266
|
+
if (state.currentTrackIndex < 0) {
|
|
267
|
+
state.currentTrackIndex = state.queue.length - 1;
|
|
268
|
+
}
|
|
269
|
+
this.playTrack(state.queue[state.currentTrackIndex]);
|
|
266
270
|
},
|
|
267
271
|
|
|
268
272
|
toggleRepeat() {
|
|
269
|
-
|
|
270
|
-
if (state.repeat === 'none') {
|
|
271
|
-
state.repeat = 'all';
|
|
272
|
-
} else if (state.repeat === 'all') {
|
|
273
|
-
state.repeat = 'one';
|
|
274
|
-
} else {
|
|
275
|
-
state.repeat = 'none';
|
|
276
|
-
}
|
|
273
|
+
state.repeat = !state.repeat;
|
|
277
274
|
},
|
|
278
275
|
|
|
279
276
|
toggleShuffle() {
|
|
280
277
|
state.shuffle = !state.shuffle;
|
|
281
|
-
|
|
282
|
-
if (state.shuffle) {
|
|
283
|
-
// Save the current track
|
|
284
|
-
const currentTrack = state.queue[0];
|
|
285
|
-
|
|
286
|
-
// Shuffle the rest of the queue
|
|
287
|
-
const remainingTracks = state.queue.slice(1);
|
|
288
|
-
this.shuffleArray(remainingTracks);
|
|
289
|
-
|
|
290
|
-
// Reconstruct queue with current track at the front
|
|
291
|
-
state.queue = [currentTrack, ...remainingTracks];
|
|
292
|
-
} else {
|
|
293
|
-
// Restore original order but keep current track at front
|
|
294
|
-
if (state.currentTrack) {
|
|
295
|
-
const currentTrackIndex = state.initialQueue.findIndex(track => track._id === state.currentTrack._id);
|
|
296
|
-
|
|
297
|
-
if (currentTrackIndex !== -1) {
|
|
298
|
-
const tracksToPlay = state.initialQueue.slice(currentTrackIndex);
|
|
299
|
-
const previousTracks = state.initialQueue.slice(0, currentTrackIndex);
|
|
300
|
-
state.queue = [...tracksToPlay, ...previousTracks];
|
|
301
|
-
} else {
|
|
302
|
-
state.queue = [...state.initialQueue];
|
|
303
|
-
}
|
|
304
|
-
} else {
|
|
305
|
-
state.queue = [...state.initialQueue];
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
278
|
},
|
|
309
279
|
|
|
310
280
|
shuffleArray(array) {
|
|
@@ -398,4 +368,46 @@ export const actions = {
|
|
|
398
368
|
state.syncInProgress = false;
|
|
399
369
|
}, 1000);
|
|
400
370
|
},
|
|
371
|
+
|
|
372
|
+
// Fullscreen player
|
|
373
|
+
toggleFullPlayer() {
|
|
374
|
+
state.showFullPlayer = !state.showFullPlayer;
|
|
375
|
+
},
|
|
376
|
+
|
|
377
|
+
// Disk rotation animation
|
|
378
|
+
rotateDisk() {
|
|
379
|
+
if (state.isPlaying) {
|
|
380
|
+
state.rotationAngle = (state.rotationAngle + 1) % 360;
|
|
381
|
+
state.animationFrameId = requestAnimationFrame(() => this.rotateDisk());
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
|
|
385
|
+
startRotation() {
|
|
386
|
+
if (!state.animationFrameId && typeof window !== 'undefined') {
|
|
387
|
+
this.rotateDisk();
|
|
388
|
+
}
|
|
389
|
+
},
|
|
390
|
+
|
|
391
|
+
stopRotation() {
|
|
392
|
+
if (state.animationFrameId) {
|
|
393
|
+
cancelAnimationFrame(state.animationFrameId);
|
|
394
|
+
state.animationFrameId = null;
|
|
395
|
+
}
|
|
396
|
+
},
|
|
397
|
+
|
|
398
|
+
// Queue reordering
|
|
399
|
+
reorderQueue(fromIndex, toIndex) {
|
|
400
|
+
if (fromIndex >= 0 && fromIndex < state.queue.length && toIndex >= 0 && toIndex < state.queue.length) {
|
|
401
|
+
const track = state.queue.splice(fromIndex, 1)[0];
|
|
402
|
+
state.queue.splice(toIndex, 0, track);
|
|
403
|
+
}
|
|
404
|
+
},
|
|
405
|
+
|
|
406
|
+
// Jump to specific track in queue
|
|
407
|
+
jumpToTrack(index) {
|
|
408
|
+
if (index >= 0 && index < state.queue.length) {
|
|
409
|
+
state.currentTrackIndex = index;
|
|
410
|
+
this.playTrack(state.queue[index]);
|
|
411
|
+
}
|
|
412
|
+
},
|
|
401
413
|
};
|
|
@@ -233,27 +233,11 @@ export const actions = {
|
|
|
233
233
|
|
|
234
234
|
async fetchRelatedTracks(trackUrl) {
|
|
235
235
|
try {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
const queryParams = new URLSearchParams();
|
|
243
|
-
queryParams.append('artist', artistId);
|
|
244
|
-
queryParams.append('limit', '5');
|
|
245
|
-
|
|
246
|
-
const response = await fetch(`${process.env.API_URL}/api/tracks/read?${queryParams.toString()}`);
|
|
247
|
-
const tracks = await response.json();
|
|
248
|
-
|
|
249
|
-
// Исключаем текущий трек
|
|
250
|
-
const relatedTracks = tracks.filter(track => track._id !== state.currentTrack._id);
|
|
251
|
-
state.relatedTracks = relatedTracks;
|
|
252
|
-
return relatedTracks;
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
state.relatedTracks = [];
|
|
256
|
-
return [];
|
|
236
|
+
const response = await fetch(`${process.env.API_URL}/api/tracks/related/${trackUrl}`);
|
|
237
|
+
const relatedTracks = await response.json();
|
|
238
|
+
|
|
239
|
+
state.relatedTracks = relatedTracks;
|
|
240
|
+
return relatedTracks;
|
|
257
241
|
} catch (error) {
|
|
258
242
|
console.error('Error fetching related tracks:', error);
|
|
259
243
|
state.relatedTracks = [];
|
package/src/styles/config.scss
CHANGED
|
@@ -406,12 +406,12 @@ $order: (
|
|
|
406
406
|
);
|
|
407
407
|
|
|
408
408
|
$cols: (
|
|
409
|
-
'1': 1fr,
|
|
410
|
-
'2': 1fr 1fr,
|
|
411
|
-
'3': 1fr 1fr 1fr,
|
|
412
|
-
'4': 1fr 1fr 1fr 1fr,
|
|
413
|
-
'5': 1fr 1fr 1fr 1fr 1fr,
|
|
414
|
-
'6': 1fr 1fr 1fr 1fr 1fr 1fr,
|
|
409
|
+
'1': minmax(0, 1fr),
|
|
410
|
+
'2': minmax(0, 1fr) minmax(0, 1fr),
|
|
411
|
+
'3': minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr),
|
|
412
|
+
'4': minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr),
|
|
413
|
+
'5': minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr),
|
|
414
|
+
'6': minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr),
|
|
415
415
|
);
|
|
416
416
|
|
|
417
417
|
body {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sources":["../../../../../../../../../../node_modules/.pnpm/@capacitor-mlkit+barcode-scanning@7.1.0_@capacitor+core@7.0.1/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/definitions.js"],"sourcesContent":["/**\n * @since 0.0.1\n */\nexport var BarcodeFormat;\n(function (BarcodeFormat) {\n /**\n * Only available on Android and iOS.\n *\n * @since 0.0.1\n */\n BarcodeFormat[\"Aztec\"] = \"AZTEC\";\n /**\n * Only available on Android and iOS.\n *\n * @since 0.0.1\n */\n BarcodeFormat[\"Codabar\"] = \"CODABAR\";\n /**\n * Only available on Android and iOS.\n *\n * @since 0.0.1\n */\n BarcodeFormat[\"Code39\"] = \"CODE_39\";\n /**\n * Only available on Android and iOS.\n *\n * @since 0.0.1\n */\n BarcodeFormat[\"Code93\"] = \"CODE_93\";\n /**\n * Only available on Android and iOS.\n *\n * @since 0.0.1\n */\n BarcodeFormat[\"Code128\"] = \"CODE_128\";\n /**\n * Only available on Android and iOS.\n *\n * @since 0.0.1\n */\n BarcodeFormat[\"DataMatrix\"] = \"DATA_MATRIX\";\n /**\n * Only available on Android and iOS.\n *\n * @since 0.0.1\n */\n BarcodeFormat[\"Ean8\"] = \"EAN_8\";\n /**\n * Only available on Android and iOS.\n *\n * @since 0.0.1\n */\n BarcodeFormat[\"Ean13\"] = \"EAN_13\";\n /**\n * Only available on Android and iOS.\n *\n * @since 0.0.1\n */\n BarcodeFormat[\"Itf\"] = \"ITF\";\n /**\n * Only available on Android and iOS.\n *\n * @since 0.0.1\n */\n BarcodeFormat[\"Pdf417\"] = \"PDF_417\";\n /**\n * Only available on Android and iOS.\n *\n * @since 0.0.1\n */\n BarcodeFormat[\"QrCode\"] = \"QR_CODE\";\n /**\n * Only available on Android and iOS.\n *\n * @since 0.0.1\n */\n BarcodeFormat[\"UpcA\"] = \"UPC_A\";\n /**\n * Only available on Android and iOS.\n *\n * @since 0.0.1\n */\n BarcodeFormat[\"UpcE\"] = \"UPC_E\";\n})(BarcodeFormat || (BarcodeFormat = {}));\n/**\n * @since 0.0.1\n */\nexport var BarcodeValueType;\n(function (BarcodeValueType) {\n /**\n * @since 0.0.1\n */\n BarcodeValueType[\"CalendarEvent\"] = \"CALENDAR_EVENT\";\n /**\n * @since 0.0.1\n */\n BarcodeValueType[\"ContactInfo\"] = \"CONTACT_INFO\";\n /**\n * @since 0.0.1\n */\n BarcodeValueType[\"DriversLicense\"] = \"DRIVERS_LICENSE\";\n /**\n * @since 0.0.1\n */\n BarcodeValueType[\"Email\"] = \"EMAIL\";\n /**\n * @since 0.0.1\n */\n BarcodeValueType[\"Geo\"] = \"GEO\";\n /**\n * @since 0.0.1\n */\n BarcodeValueType[\"Isbn\"] = \"ISBN\";\n /**\n * @since 0.0.1\n */\n BarcodeValueType[\"Phone\"] = \"PHONE\";\n /**\n * @since 0.0.1\n */\n BarcodeValueType[\"Product\"] = \"PRODUCT\";\n /**\n * @since 0.0.1\n */\n BarcodeValueType[\"Sms\"] = \"SMS\";\n /**\n * @since 0.0.1\n */\n BarcodeValueType[\"Text\"] = \"TEXT\";\n /**\n * @since 0.0.1\n */\n BarcodeValueType[\"Url\"] = \"URL\";\n /**\n * @since 0.0.1\n */\n BarcodeValueType[\"Wifi\"] = \"WIFI\";\n /**\n * @since 0.0.1\n */\n BarcodeValueType[\"Unknown\"] = \"UNKNOWN\";\n})(BarcodeValueType || (BarcodeValueType = {}));\n/**\n * @since 7.0.0\n */\nexport var Resolution;\n(function (Resolution) {\n /**\n * @since 7.0.0\n */\n Resolution[Resolution[\"640x480\"] = 0] = \"640x480\";\n /**\n * @since 7.0.0\n */\n Resolution[Resolution[\"1280x720\"] = 1] = \"1280x720\";\n /**\n * @since 7.0.0\n */\n Resolution[Resolution[\"1920x1080\"] = 2] = \"1920x1080\";\n})(Resolution || (Resolution = {}));\n/**\n * @since 0.0.1\n */\nexport var LensFacing;\n(function (LensFacing) {\n /**\n * @since 0.0.1\n */\n LensFacing[\"Front\"] = \"FRONT\";\n /**\n * @since 0.0.1\n */\n LensFacing[\"Back\"] = \"BACK\";\n})(LensFacing || (LensFacing = {}));\n/**\n * @since 5.1.0\n */\nexport var GoogleBarcodeScannerModuleInstallState;\n(function (GoogleBarcodeScannerModuleInstallState) {\n /**\n * @since 5.1.0\n */\n GoogleBarcodeScannerModuleInstallState[GoogleBarcodeScannerModuleInstallState[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n /**\n * @since 5.1.0\n */\n GoogleBarcodeScannerModuleInstallState[GoogleBarcodeScannerModuleInstallState[\"PENDING\"] = 1] = \"PENDING\";\n /**\n * @since 5.1.0\n */\n GoogleBarcodeScannerModuleInstallState[GoogleBarcodeScannerModuleInstallState[\"DOWNLOADING\"] = 2] = \"DOWNLOADING\";\n /**\n * @since 5.1.0\n */\n GoogleBarcodeScannerModuleInstallState[GoogleBarcodeScannerModuleInstallState[\"CANCELED\"] = 3] = \"CANCELED\";\n /**\n * @since 5.1.0\n */\n GoogleBarcodeScannerModuleInstallState[GoogleBarcodeScannerModuleInstallState[\"COMPLETED\"] = 4] = \"COMPLETED\";\n /**\n * @since 5.1.0\n */\n GoogleBarcodeScannerModuleInstallState[GoogleBarcodeScannerModuleInstallState[\"FAILED\"] = 5] = \"FAILED\";\n /**\n * @since 5.1.0\n */\n GoogleBarcodeScannerModuleInstallState[GoogleBarcodeScannerModuleInstallState[\"INSTALLING\"] = 6] = \"INSTALLING\";\n /**\n * @since 5.1.0\n */\n GoogleBarcodeScannerModuleInstallState[GoogleBarcodeScannerModuleInstallState[\"DOWNLOAD_PAUSED\"] = 7] = \"DOWNLOAD_PAUSED\";\n})(GoogleBarcodeScannerModuleInstallState || (GoogleBarcodeScannerModuleInstallState = {}));\n/**\n * @since 7.0.0\n */\nexport var AddressType;\n(function (AddressType) {\n /**\n * @since 7.0.0\n */\n AddressType[AddressType[\"HOME\"] = 0] = \"HOME\";\n /**\n * @since 7.0.0\n */\n AddressType[AddressType[\"UNKNOWN\"] = 1] = \"UNKNOWN\";\n /**\n * @since 7.0.0\n */\n AddressType[AddressType[\"WORK\"] = 2] = \"WORK\";\n})(AddressType || (AddressType = {}));\n/**\n * @since 7.0.0\n */\nexport var EmailFormatType;\n(function (EmailFormatType) {\n /**\n * @since 7.0.0\n */\n EmailFormatType[EmailFormatType[\"HOME\"] = 0] = \"HOME\";\n /**\n * @since 7.0.0\n */\n EmailFormatType[EmailFormatType[\"UNKNOWN\"] = 1] = \"UNKNOWN\";\n /**\n * @since 7.0.0\n */\n EmailFormatType[EmailFormatType[\"WORK\"] = 2] = \"WORK\";\n})(EmailFormatType || (EmailFormatType = {}));\n/**\n * @since 7.0.0\n */\nexport var PhoneFormatType;\n(function (PhoneFormatType) {\n /**\n * @since 7.0.0\n */\n PhoneFormatType[PhoneFormatType[\"FAX\"] = 0] = \"FAX\";\n /**\n * @since 7.0.0\n */\n PhoneFormatType[PhoneFormatType[\"HOME\"] = 1] = \"HOME\";\n /**\n * @since 7.0.0\n */\n PhoneFormatType[PhoneFormatType[\"MOBILE\"] = 2] = \"MOBILE\";\n /**\n * @since 7.0.0\n */\n PhoneFormatType[PhoneFormatType[\"UNKNOWN\"] = 3] = \"UNKNOWN\";\n /**\n * @since 7.0.0\n */\n PhoneFormatType[PhoneFormatType[\"WORK\"] = 4] = \"WORK\";\n})(PhoneFormatType || (PhoneFormatType = {}));\n/**\n * @since 7.0.0\n */\nexport var WifiEncryptionType;\n(function (WifiEncryptionType) {\n /**\n * @since 7.0.0\n */\n WifiEncryptionType[WifiEncryptionType[\"OPEN\"] = 1] = \"OPEN\";\n /**\n * @since 7.0.0\n */\n WifiEncryptionType[WifiEncryptionType[\"WEP\"] = 2] = \"WEP\";\n /**\n * @since 7.0.0\n */\n WifiEncryptionType[WifiEncryptionType[\"WPA\"] = 3] = \"WPA\";\n})(WifiEncryptionType || (WifiEncryptionType = {}));\n//# sourceMappingURL=definitions.js.map"],"names":["BarcodeFormat","BarcodeValueType","Resolution","LensFacing","GoogleBarcodeScannerModuleInstallState","AddressType","EmailFormatType","PhoneFormatType","WifiEncryptionType"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sources":["../../../../../../../../../../node_modules/.pnpm/@capacitor-mlkit+barcode-scanning@7.1.0_@capacitor+core@7.0.1/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/web.js"],"sourcesContent":["import { CapacitorException, ExceptionCode, WebPlugin } from '@capacitor/core';\nimport { BarcodeValueType, LensFacing } from './definitions';\nexport class BarcodeScannerWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this._isSupported = 'BarcodeDetector' in window;\n this.errorVideoElementMissing = 'videoElement must be provided.';\n this.eventBarcodesScanned = 'barcodesScanned';\n }\n async startScan(options) {\n if (!this._isSupported) {\n throw this.createUnavailableException();\n }\n if (!(options === null || options === void 0 ? void 0 : options.videoElement)) {\n throw new Error(this.errorVideoElementMissing);\n }\n this.videoElement = options.videoElement;\n this.stream = await navigator.mediaDevices.getUserMedia({\n video: {\n facingMode: {\n ideal: (options === null || options === void 0 ? void 0 : options.lensFacing) === LensFacing.Front ? 'user' : 'environment',\n },\n },\n audio: false,\n });\n options.videoElement.srcObject = this.stream;\n await options.videoElement.play();\n const barcodeDetector = new BarcodeDetector();\n this.intervalId = window.setInterval(async () => {\n if (!options.videoElement) {\n return;\n }\n const barcodes = await barcodeDetector.detect(options.videoElement);\n if (barcodes.length === 0) {\n return;\n }\n else {\n this.handleScannedBarcodes(barcodes);\n }\n }, 500);\n }\n async stopScan() {\n if (!this._isSupported) {\n throw this.createUnavailableException();\n }\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = undefined;\n }\n if (this.stream) {\n this.stream.getTracks().forEach(track => track.stop());\n this.stream = undefined;\n }\n if (this.videoElement) {\n this.videoElement.srcObject = null;\n this.videoElement = undefined;\n }\n }\n async readBarcodesFromImage(_options) {\n throw this.createUnavailableException();\n }\n async scan() {\n throw this.createUnavailableException();\n }\n async isSupported() {\n return { supported: this._isSupported };\n }\n async setZoomRatio(_options) {\n throw this.createUnavailableException();\n }\n async getZoomRatio() {\n throw this.createUnavailableException();\n }\n async getMinZoomRatio() {\n throw this.createUnavailableException();\n }\n async getMaxZoomRatio() {\n throw this.createUnavailableException();\n }\n async openSettings() {\n throw this.createUnavailableException();\n }\n async isGoogleBarcodeScannerModuleAvailable() {\n throw this.createUnavailableException();\n }\n async installGoogleBarcodeScannerModule() {\n throw this.createUnavailableException();\n }\n async checkPermissions() {\n try {\n const result = await navigator.permissions.query({\n name: 'camera',\n });\n return {\n camera: result.state,\n };\n }\n catch (error) {\n return {\n camera: 'prompt',\n };\n }\n }\n async requestPermissions() {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ video: true });\n stream.getTracks().forEach(track => track.stop());\n return {\n camera: 'granted',\n };\n }\n catch (error) {\n return {\n camera: 'denied',\n };\n }\n }\n createUnavailableException() {\n return new CapacitorException('This plugin method is not available on this platform.', ExceptionCode.Unavailable);\n }\n handleScannedBarcodes(barcodes) {\n const result = {\n barcodes: barcodes.map(barcode => ({\n cornerPoints: [\n [barcode.cornerPoints[0].x, barcode.cornerPoints[0].y],\n [barcode.cornerPoints[1].x, barcode.cornerPoints[1].y],\n [barcode.cornerPoints[2].x, barcode.cornerPoints[2].y],\n [barcode.cornerPoints[3].x, barcode.cornerPoints[3].y],\n ],\n displayValue: barcode.rawValue,\n rawValue: barcode.rawValue,\n format: barcode.format.toUpperCase(),\n valueType: BarcodeValueType.Unknown,\n })),\n };\n this.notifyListeners(this.eventBarcodesScanned, result);\n }\n}\n//# sourceMappingURL=web.js.map"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/node_modules/.pnpm/@capacitor_core@7.0.1/node_modules/@capacitor/core/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../../../../node_modules/.pnpm/@capacitor+core@7.0.1/node_modules/@capacitor/core/dist/index.js"],"sourcesContent":["/*! Capacitor: https://capacitorjs.com/ - MIT License */\nvar ExceptionCode;\n(function (ExceptionCode) {\n /**\n * API is not implemented.\n *\n * This usually means the API can't be used because it is not implemented for\n * the current platform.\n */\n ExceptionCode[\"Unimplemented\"] = \"UNIMPLEMENTED\";\n /**\n * API is not available.\n *\n * This means the API can't be used right now because:\n * - it is currently missing a prerequisite, such as network connectivity\n * - it requires a particular platform or browser version\n */\n ExceptionCode[\"Unavailable\"] = \"UNAVAILABLE\";\n})(ExceptionCode || (ExceptionCode = {}));\nclass CapacitorException extends Error {\n constructor(message, code, data) {\n super(message);\n this.message = message;\n this.code = code;\n this.data = data;\n }\n}\nconst getPlatformId = (win) => {\n var _a, _b;\n if (win === null || win === void 0 ? void 0 : win.androidBridge) {\n return 'android';\n }\n else if ((_b = (_a = win === null || win === void 0 ? void 0 : win.webkit) === null || _a === void 0 ? void 0 : _a.messageHandlers) === null || _b === void 0 ? void 0 : _b.bridge) {\n return 'ios';\n }\n else {\n return 'web';\n }\n};\n\nconst createCapacitor = (win) => {\n const capCustomPlatform = win.CapacitorCustomPlatform || null;\n const cap = win.Capacitor || {};\n const Plugins = (cap.Plugins = cap.Plugins || {});\n const getPlatform = () => {\n return capCustomPlatform !== null ? capCustomPlatform.name : getPlatformId(win);\n };\n const isNativePlatform = () => getPlatform() !== 'web';\n const isPluginAvailable = (pluginName) => {\n const plugin = registeredPlugins.get(pluginName);\n if (plugin === null || plugin === void 0 ? void 0 : plugin.platforms.has(getPlatform())) {\n // JS implementation available for the current platform.\n return true;\n }\n if (getPluginHeader(pluginName)) {\n // Native implementation available.\n return true;\n }\n return false;\n };\n const getPluginHeader = (pluginName) => { var _a; return (_a = cap.PluginHeaders) === null || _a === void 0 ? void 0 : _a.find((h) => h.name === pluginName); };\n const handleError = (err) => win.console.error(err);\n const registeredPlugins = new Map();\n const registerPlugin = (pluginName, jsImplementations = {}) => {\n const registeredPlugin = registeredPlugins.get(pluginName);\n if (registeredPlugin) {\n console.warn(`Capacitor plugin \"${pluginName}\" already registered. Cannot register plugins twice.`);\n return registeredPlugin.proxy;\n }\n const platform = getPlatform();\n const pluginHeader = getPluginHeader(pluginName);\n let jsImplementation;\n const loadPluginImplementation = async () => {\n if (!jsImplementation && platform in jsImplementations) {\n jsImplementation =\n typeof jsImplementations[platform] === 'function'\n ? (jsImplementation = await jsImplementations[platform]())\n : (jsImplementation = jsImplementations[platform]);\n }\n else if (capCustomPlatform !== null && !jsImplementation && 'web' in jsImplementations) {\n jsImplementation =\n typeof jsImplementations['web'] === 'function'\n ? (jsImplementation = await jsImplementations['web']())\n : (jsImplementation = jsImplementations['web']);\n }\n return jsImplementation;\n };\n const createPluginMethod = (impl, prop) => {\n var _a, _b;\n if (pluginHeader) {\n const methodHeader = pluginHeader === null || pluginHeader === void 0 ? void 0 : pluginHeader.methods.find((m) => prop === m.name);\n if (methodHeader) {\n if (methodHeader.rtype === 'promise') {\n return (options) => cap.nativePromise(pluginName, prop.toString(), options);\n }\n else {\n return (options, callback) => cap.nativeCallback(pluginName, prop.toString(), options, callback);\n }\n }\n else if (impl) {\n return (_a = impl[prop]) === null || _a === void 0 ? void 0 : _a.bind(impl);\n }\n }\n else if (impl) {\n return (_b = impl[prop]) === null || _b === void 0 ? void 0 : _b.bind(impl);\n }\n else {\n throw new CapacitorException(`\"${pluginName}\" plugin is not implemented on ${platform}`, ExceptionCode.Unimplemented);\n }\n };\n const createPluginMethodWrapper = (prop) => {\n let remove;\n const wrapper = (...args) => {\n const p = loadPluginImplementation().then((impl) => {\n const fn = createPluginMethod(impl, prop);\n if (fn) {\n const p = fn(...args);\n remove = p === null || p === void 0 ? void 0 : p.remove;\n return p;\n }\n else {\n throw new CapacitorException(`\"${pluginName}.${prop}()\" is not implemented on ${platform}`, ExceptionCode.Unimplemented);\n }\n });\n if (prop === 'addListener') {\n p.remove = async () => remove();\n }\n return p;\n };\n // Some flair ✨\n wrapper.toString = () => `${prop.toString()}() { [capacitor code] }`;\n Object.defineProperty(wrapper, 'name', {\n value: prop,\n writable: false,\n configurable: false,\n });\n return wrapper;\n };\n const addListener = createPluginMethodWrapper('addListener');\n const removeListener = createPluginMethodWrapper('removeListener');\n const addListenerNative = (eventName, callback) => {\n const call = addListener({ eventName }, callback);\n const remove = async () => {\n const callbackId = await call;\n removeListener({\n eventName,\n callbackId,\n }, callback);\n };\n const p = new Promise((resolve) => call.then(() => resolve({ remove })));\n p.remove = async () => {\n console.warn(`Using addListener() without 'await' is deprecated.`);\n await remove();\n };\n return p;\n };\n const proxy = new Proxy({}, {\n get(_, prop) {\n switch (prop) {\n // https://github.com/facebook/react/issues/20030\n case '$$typeof':\n return undefined;\n case 'toJSON':\n return () => ({});\n case 'addListener':\n return pluginHeader ? addListenerNative : addListener;\n case 'removeListener':\n return removeListener;\n default:\n return createPluginMethodWrapper(prop);\n }\n },\n });\n Plugins[pluginName] = proxy;\n registeredPlugins.set(pluginName, {\n name: pluginName,\n proxy,\n platforms: new Set([...Object.keys(jsImplementations), ...(pluginHeader ? [platform] : [])]),\n });\n return proxy;\n };\n // Add in convertFileSrc for web, it will already be available in native context\n if (!cap.convertFileSrc) {\n cap.convertFileSrc = (filePath) => filePath;\n }\n cap.getPlatform = getPlatform;\n cap.handleError = handleError;\n cap.isNativePlatform = isNativePlatform;\n cap.isPluginAvailable = isPluginAvailable;\n cap.registerPlugin = registerPlugin;\n cap.Exception = CapacitorException;\n cap.DEBUG = !!cap.DEBUG;\n cap.isLoggingEnabled = !!cap.isLoggingEnabled;\n return cap;\n};\nconst initCapacitorGlobal = (win) => (win.Capacitor = createCapacitor(win));\n\nconst Capacitor = /*#__PURE__*/ initCapacitorGlobal(typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {});\nconst registerPlugin = Capacitor.registerPlugin;\n\n/**\n * Base class web plugins should extend.\n */\nclass WebPlugin {\n constructor() {\n this.listeners = {};\n this.retainedEventArguments = {};\n this.windowListeners = {};\n }\n addListener(eventName, listenerFunc) {\n let firstListener = false;\n const listeners = this.listeners[eventName];\n if (!listeners) {\n this.listeners[eventName] = [];\n firstListener = true;\n }\n this.listeners[eventName].push(listenerFunc);\n // If we haven't added a window listener for this event and it requires one,\n // go ahead and add it\n const windowListener = this.windowListeners[eventName];\n if (windowListener && !windowListener.registered) {\n this.addWindowListener(windowListener);\n }\n if (firstListener) {\n this.sendRetainedArgumentsForEvent(eventName);\n }\n const remove = async () => this.removeListener(eventName, listenerFunc);\n const p = Promise.resolve({ remove });\n return p;\n }\n async removeAllListeners() {\n this.listeners = {};\n for (const listener in this.windowListeners) {\n this.removeWindowListener(this.windowListeners[listener]);\n }\n this.windowListeners = {};\n }\n notifyListeners(eventName, data, retainUntilConsumed) {\n const listeners = this.listeners[eventName];\n if (!listeners) {\n if (retainUntilConsumed) {\n let args = this.retainedEventArguments[eventName];\n if (!args) {\n args = [];\n }\n args.push(data);\n this.retainedEventArguments[eventName] = args;\n }\n return;\n }\n listeners.forEach((listener) => listener(data));\n }\n hasListeners(eventName) {\n return !!this.listeners[eventName].length;\n }\n registerWindowListener(windowEventName, pluginEventName) {\n this.windowListeners[pluginEventName] = {\n registered: false,\n windowEventName,\n pluginEventName,\n handler: (event) => {\n this.notifyListeners(pluginEventName, event);\n },\n };\n }\n unimplemented(msg = 'not implemented') {\n return new Capacitor.Exception(msg, ExceptionCode.Unimplemented);\n }\n unavailable(msg = 'not available') {\n return new Capacitor.Exception(msg, ExceptionCode.Unavailable);\n }\n async removeListener(eventName, listenerFunc) {\n const listeners = this.listeners[eventName];\n if (!listeners) {\n return;\n }\n const index = listeners.indexOf(listenerFunc);\n this.listeners[eventName].splice(index, 1);\n // If there are no more listeners for this type of event,\n // remove the window listener\n if (!this.listeners[eventName].length) {\n this.removeWindowListener(this.windowListeners[eventName]);\n }\n }\n addWindowListener(handle) {\n window.addEventListener(handle.windowEventName, handle.handler);\n handle.registered = true;\n }\n removeWindowListener(handle) {\n if (!handle) {\n return;\n }\n window.removeEventListener(handle.windowEventName, handle.handler);\n handle.registered = false;\n }\n sendRetainedArgumentsForEvent(eventName) {\n const args = this.retainedEventArguments[eventName];\n if (!args) {\n return;\n }\n delete this.retainedEventArguments[eventName];\n args.forEach((arg) => {\n this.notifyListeners(eventName, arg);\n });\n }\n}\n\nconst WebView = /*#__PURE__*/ registerPlugin('WebView');\n/******** END WEB VIEW PLUGIN ********/\n/******** COOKIES PLUGIN ********/\n/**\n * Safely web encode a string value (inspired by js-cookie)\n * @param str The string value to encode\n */\nconst encode = (str) => encodeURIComponent(str)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n/**\n * Safely web decode a string value (inspired by js-cookie)\n * @param str The string value to decode\n */\nconst decode = (str) => str.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent);\nclass CapacitorCookiesPluginWeb extends WebPlugin {\n async getCookies() {\n const cookies = document.cookie;\n const cookieMap = {};\n cookies.split(';').forEach((cookie) => {\n if (cookie.length <= 0)\n return;\n // Replace first \"=\" with CAP_COOKIE to prevent splitting on additional \"=\"\n let [key, value] = cookie.replace(/=/, 'CAP_COOKIE').split('CAP_COOKIE');\n key = decode(key).trim();\n value = decode(value).trim();\n cookieMap[key] = value;\n });\n return cookieMap;\n }\n async setCookie(options) {\n try {\n // Safely Encoded Key/Value\n const encodedKey = encode(options.key);\n const encodedValue = encode(options.value);\n // Clean & sanitize options\n const expires = `; expires=${(options.expires || '').replace('expires=', '')}`; // Default is \"; expires=\"\n const path = (options.path || '/').replace('path=', ''); // Default is \"path=/\"\n const domain = options.url != null && options.url.length > 0 ? `domain=${options.url}` : '';\n document.cookie = `${encodedKey}=${encodedValue || ''}${expires}; path=${path}; ${domain};`;\n }\n catch (error) {\n return Promise.reject(error);\n }\n }\n async deleteCookie(options) {\n try {\n document.cookie = `${options.key}=; Max-Age=0`;\n }\n catch (error) {\n return Promise.reject(error);\n }\n }\n async clearCookies() {\n try {\n const cookies = document.cookie.split(';') || [];\n for (const cookie of cookies) {\n document.cookie = cookie.replace(/^ +/, '').replace(/=.*/, `=;expires=${new Date().toUTCString()};path=/`);\n }\n }\n catch (error) {\n return Promise.reject(error);\n }\n }\n async clearAllCookies() {\n try {\n await this.clearCookies();\n }\n catch (error) {\n return Promise.reject(error);\n }\n }\n}\nconst CapacitorCookies = registerPlugin('CapacitorCookies', {\n web: () => new CapacitorCookiesPluginWeb(),\n});\n// UTILITY FUNCTIONS\n/**\n * Read in a Blob value and return it as a base64 string\n * @param blob The blob value to convert to a base64 string\n */\nconst readBlobAsBase64 = async (blob) => new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => {\n const base64String = reader.result;\n // remove prefix \"data:application/pdf;base64,\"\n resolve(base64String.indexOf(',') >= 0 ? base64String.split(',')[1] : base64String);\n };\n reader.onerror = (error) => reject(error);\n reader.readAsDataURL(blob);\n});\n/**\n * Normalize an HttpHeaders map by lowercasing all of the values\n * @param headers The HttpHeaders object to normalize\n */\nconst normalizeHttpHeaders = (headers = {}) => {\n const originalKeys = Object.keys(headers);\n const loweredKeys = Object.keys(headers).map((k) => k.toLocaleLowerCase());\n const normalized = loweredKeys.reduce((acc, key, index) => {\n acc[key] = headers[originalKeys[index]];\n return acc;\n }, {});\n return normalized;\n};\n/**\n * Builds a string of url parameters that\n * @param params A map of url parameters\n * @param shouldEncode true if you should encodeURIComponent() the values (true by default)\n */\nconst buildUrlParams = (params, shouldEncode = true) => {\n if (!params)\n return null;\n const output = Object.entries(params).reduce((accumulator, entry) => {\n const [key, value] = entry;\n let encodedValue;\n let item;\n if (Array.isArray(value)) {\n item = '';\n value.forEach((str) => {\n encodedValue = shouldEncode ? encodeURIComponent(str) : str;\n item += `${key}=${encodedValue}&`;\n });\n // last character will always be \"&\" so slice it off\n item.slice(0, -1);\n }\n else {\n encodedValue = shouldEncode ? encodeURIComponent(value) : value;\n item = `${key}=${encodedValue}`;\n }\n return `${accumulator}&${item}`;\n }, '');\n // Remove initial \"&\" from the reduce\n return output.substr(1);\n};\n/**\n * Build the RequestInit object based on the options passed into the initial request\n * @param options The Http plugin options\n * @param extra Any extra RequestInit values\n */\nconst buildRequestInit = (options, extra = {}) => {\n const output = Object.assign({ method: options.method || 'GET', headers: options.headers }, extra);\n // Get the content-type\n const headers = normalizeHttpHeaders(options.headers);\n const type = headers['content-type'] || '';\n // If body is already a string, then pass it through as-is.\n if (typeof options.data === 'string') {\n output.body = options.data;\n }\n // Build request initializers based off of content-type\n else if (type.includes('application/x-www-form-urlencoded')) {\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(options.data || {})) {\n params.set(key, value);\n }\n output.body = params.toString();\n }\n else if (type.includes('multipart/form-data') || options.data instanceof FormData) {\n const form = new FormData();\n if (options.data instanceof FormData) {\n options.data.forEach((value, key) => {\n form.append(key, value);\n });\n }\n else {\n for (const key of Object.keys(options.data)) {\n form.append(key, options.data[key]);\n }\n }\n output.body = form;\n const headers = new Headers(output.headers);\n headers.delete('content-type'); // content-type will be set by `window.fetch` to includy boundary\n output.headers = headers;\n }\n else if (type.includes('application/json') || typeof options.data === 'object') {\n output.body = JSON.stringify(options.data);\n }\n return output;\n};\n// WEB IMPLEMENTATION\nclass CapacitorHttpPluginWeb extends WebPlugin {\n /**\n * Perform an Http request given a set of options\n * @param options Options to build the HTTP request\n */\n async request(options) {\n const requestInit = buildRequestInit(options, options.webFetchExtra);\n const urlParams = buildUrlParams(options.params, options.shouldEncodeUrlParams);\n const url = urlParams ? `${options.url}?${urlParams}` : options.url;\n const response = await fetch(url, requestInit);\n const contentType = response.headers.get('content-type') || '';\n // Default to 'text' responseType so no parsing happens\n let { responseType = 'text' } = response.ok ? options : {};\n // If the response content-type is json, force the response to be json\n if (contentType.includes('application/json')) {\n responseType = 'json';\n }\n let data;\n let blob;\n switch (responseType) {\n case 'arraybuffer':\n case 'blob':\n blob = await response.blob();\n data = await readBlobAsBase64(blob);\n break;\n case 'json':\n data = await response.json();\n break;\n case 'document':\n case 'text':\n default:\n data = await response.text();\n }\n // Convert fetch headers to Capacitor HttpHeaders\n const headers = {};\n response.headers.forEach((value, key) => {\n headers[key] = value;\n });\n return {\n data,\n headers,\n status: response.status,\n url: response.url,\n };\n }\n /**\n * Perform an Http GET request given a set of options\n * @param options Options to build the HTTP request\n */\n async get(options) {\n return this.request(Object.assign(Object.assign({}, options), { method: 'GET' }));\n }\n /**\n * Perform an Http POST request given a set of options\n * @param options Options to build the HTTP request\n */\n async post(options) {\n return this.request(Object.assign(Object.assign({}, options), { method: 'POST' }));\n }\n /**\n * Perform an Http PUT request given a set of options\n * @param options Options to build the HTTP request\n */\n async put(options) {\n return this.request(Object.assign(Object.assign({}, options), { method: 'PUT' }));\n }\n /**\n * Perform an Http PATCH request given a set of options\n * @param options Options to build the HTTP request\n */\n async patch(options) {\n return this.request(Object.assign(Object.assign({}, options), { method: 'PATCH' }));\n }\n /**\n * Perform an Http DELETE request given a set of options\n * @param options Options to build the HTTP request\n */\n async delete(options) {\n return this.request(Object.assign(Object.assign({}, options), { method: 'DELETE' }));\n }\n}\nconst CapacitorHttp = registerPlugin('CapacitorHttp', {\n web: () => new CapacitorHttpPluginWeb(),\n});\n/******** END HTTP PLUGIN ********/\n\nexport { Capacitor, CapacitorCookies, CapacitorException, CapacitorHttp, ExceptionCode, WebPlugin, WebView, buildRequestInit, registerPlugin };\n//# sourceMappingURL=index.js.map\n"],"names":["ExceptionCode","registerPlugin","p","headers"],"mappings":"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","x_google_ignoreList":[0]}
|