From ac2b8040b19c2737e596e66210f88adee1628a6d Mon Sep 17 00:00:00 2001 From: Yvv Date: Sun, 22 Feb 2026 22:43:41 +0100 Subject: [PATCH] Refonte mini-player flottant, nettoyage GrateWizard, corrections UI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - PlayerPersistent: widget compact pill + panneau extensible, aligné au contenu - BookPlayer: ajustements scroll mode, suppression bordures boutons - UnoCSS: ajout border-none au shortcut btn-ghost - GrateWizard: suppression composants, services et utils obsolètes - Ajout du PDF source des paroles (media/) - Mises à jour config et dépendances Co-Authored-By: Claude Opus 4.6 --- app/app.config.ts | 2 +- app/components/book/BookPlayer.vue | 6 +- app/components/gratewizard/GwCRA.vue | 194 ---------- app/components/gratewizard/GwCRS.vue | 208 ---------- app/components/gratewizard/GwMN.vue | 272 ------------- app/components/gratewizard/GwMap.client.vue | 146 ------- .../gratewizard/GwPerimeterList.vue | 40 -- app/components/gratewizard/GwRelations.vue | 141 ------- app/components/gratewizard/GwTabs.vue | 41 -- app/components/player/PlayerPersistent.vue | 363 +++++++++++------- app/composables/useCesiumProfiles.ts | 97 ----- app/composables/useGrateWizard.ts | 2 +- app/composables/useSavedPerimeters.ts | 24 -- app/pages/gratewizard.vue | 336 +--------------- app/services/duniter/index.ts | 4 - app/services/duniter/types.ts | 14 - app/services/duniter/v1.ts | 83 ---- app/services/duniter/v2.ts | 68 ---- app/utils/gratewizard.ts | 69 ---- app/utils/ss58.ts | 109 ------ media/Paroles Chansons.pdf | Bin 0 -> 72070 bytes package.json | 4 - pnpm-lock.yaml | 273 +------------ site/site.yml | 2 +- uno.config.ts | 2 +- 25 files changed, 232 insertions(+), 2268 deletions(-) delete mode 100644 app/components/gratewizard/GwCRA.vue delete mode 100644 app/components/gratewizard/GwCRS.vue delete mode 100644 app/components/gratewizard/GwMN.vue delete mode 100644 app/components/gratewizard/GwMap.client.vue delete mode 100644 app/components/gratewizard/GwPerimeterList.vue delete mode 100644 app/components/gratewizard/GwRelations.vue delete mode 100644 app/components/gratewizard/GwTabs.vue delete mode 100644 app/composables/useCesiumProfiles.ts delete mode 100644 app/composables/useSavedPerimeters.ts delete mode 100644 app/services/duniter/index.ts delete mode 100644 app/services/duniter/types.ts delete mode 100644 app/services/duniter/v1.ts delete mode 100644 app/services/duniter/v2.ts delete mode 100644 app/utils/gratewizard.ts delete mode 100644 app/utils/ss58.ts create mode 100644 media/Paroles Chansons.pdf diff --git a/app/app.config.ts b/app/app.config.ts index 6c01951..dc62412 100644 --- a/app/app.config.ts +++ b/app/app.config.ts @@ -20,7 +20,7 @@ export default defineAppConfig({ ], }, gratewizard: { - url: '/gratewizard?popup', + url: 'https://gratewizard.ml', popup: { width: 420, height: 720, diff --git a/app/components/book/BookPlayer.vue b/app/components/book/BookPlayer.vue index b025d93..c3f6280 100644 --- a/app/components/book/BookPlayer.vue +++ b/app/components/book/BookPlayer.vue @@ -564,6 +564,7 @@ onUnmounted(() => { align-items: center; width: 100%; flex: 1; + min-height: 0; } /* ═══════════════════════════════════════ @@ -574,6 +575,7 @@ onUnmounted(() => { max-width: 52rem; padding: 0 1rem; gap: 0; + min-height: 0; } /* ─── Top bar ─── */ @@ -729,11 +731,13 @@ onUnmounted(() => { /* ─── Scroll mode overrides ─── */ .reader-viewport--scroll { - overflow-y: auto; + overflow: hidden auto; + min-height: 0; } .reader-columns--scroll { height: auto; column-fill: unset; + column-width: unset !important; transition: none; } diff --git a/app/components/gratewizard/GwCRA.vue b/app/components/gratewizard/GwCRA.vue deleted file mode 100644 index 3937d6c..0000000 --- a/app/components/gratewizard/GwCRA.vue +++ /dev/null @@ -1,194 +0,0 @@ - - - diff --git a/app/components/gratewizard/GwCRS.vue b/app/components/gratewizard/GwCRS.vue deleted file mode 100644 index 12fa7c4..0000000 --- a/app/components/gratewizard/GwCRS.vue +++ /dev/null @@ -1,208 +0,0 @@ - - - diff --git a/app/components/gratewizard/GwMN.vue b/app/components/gratewizard/GwMN.vue deleted file mode 100644 index 22d3fcc..0000000 --- a/app/components/gratewizard/GwMN.vue +++ /dev/null @@ -1,272 +0,0 @@ - - - diff --git a/app/components/gratewizard/GwMap.client.vue b/app/components/gratewizard/GwMap.client.vue deleted file mode 100644 index f58d10a..0000000 --- a/app/components/gratewizard/GwMap.client.vue +++ /dev/null @@ -1,146 +0,0 @@ - - - - - diff --git a/app/components/gratewizard/GwPerimeterList.vue b/app/components/gratewizard/GwPerimeterList.vue deleted file mode 100644 index 07fa0ed..0000000 --- a/app/components/gratewizard/GwPerimeterList.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - diff --git a/app/components/gratewizard/GwRelations.vue b/app/components/gratewizard/GwRelations.vue deleted file mode 100644 index 138b7c0..0000000 --- a/app/components/gratewizard/GwRelations.vue +++ /dev/null @@ -1,141 +0,0 @@ - - - diff --git a/app/components/gratewizard/GwTabs.vue b/app/components/gratewizard/GwTabs.vue deleted file mode 100644 index 3b42022..0000000 --- a/app/components/gratewizard/GwTabs.vue +++ /dev/null @@ -1,41 +0,0 @@ - - - diff --git a/app/components/player/PlayerPersistent.vue b/app/components/player/PlayerPersistent.vue index 93eaa18..463995f 100644 --- a/app/components/player/PlayerPersistent.vue +++ b/app/components/player/PlayerPersistent.vue @@ -5,106 +5,107 @@ ref="widgetRef" class="mini-player" > - +
- -
- - - + +
+
+

{{ store.currentSong.title }}

+

{{ store.currentSong.artist }}

+
+
+ + + +
- -
+ +
-
- +
+ {{ store.formattedCurrentTime }} + {{ store.formattedDuration }}
- -
- -
- - -
- - {{ store.formattedCurrentTime }} / {{ store.formattedDuration }} - + +
+ +
+ + +
+ + +
+ + +
+
{{ store.currentSong.lyrics }}
-
+
- -
- -
- + +
+ +
+ - -
- -
-
- {{ store.currentSong.title }} + {{ store.currentSong.title }} - +
@@ -123,7 +124,7 @@ const widgetRef = ref() const isExpanded = ref(false) let previousVolume = 0.8 -const circumference = 2 * Math.PI * 18 // r=18 +const circumference = 2 * Math.PI * 16 const volumeIcon = computed(() => { if (store.volume === 0) return 'i-lucide-volume-x' @@ -151,11 +152,6 @@ function toggleExpanded() { isExpanded.value = !isExpanded.value } -function onPillClick() { - isExpanded.value = !isExpanded.value -} - -// Close expanded panel on click outside onClickOutside(widgetRef, () => { if (isExpanded.value) isExpanded.value = false }) @@ -163,168 +159,247 @@ onClickOutside(widgetRef, () => { diff --git a/app/composables/useCesiumProfiles.ts b/app/composables/useCesiumProfiles.ts deleted file mode 100644 index 1eb7409..0000000 --- a/app/composables/useCesiumProfiles.ts +++ /dev/null @@ -1,97 +0,0 @@ -const CESIUM_PODS = [ - 'https://g1.data.brussels.ovh/user/profile/_search', - 'https://g1.data.le-sou.org/user/profile/_search', - 'https://g1.data.e-is.pro/user/profile/_search', -]; -const BATCH_SIZE = 500; - -export type GeoMember = { - pubkey: string; - title: string; - city: string; - lat: number; - lon: number; -}; - -/** Find the first Cesium+ pod that responds successfully. */ -async function findWorkingPod(): Promise { - for (const url of CESIUM_PODS) { - try { - const res = await fetch(url, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ size: 0, query: { match_all: {} } }), - }); - if (res.ok) return url; - } catch { - // try next pod - } - } - throw new Error('Aucun pod Cesium+ disponible'); -} - -/** - * Fetch Cesium+ profiles for a given list of v1 pubkeys. - * Uses Elasticsearch `ids` query with batches of 500, filtered to geolocated profiles only. - * Pass `null` to skip fetching (e.g. while pubkeys are still loading). - */ -export function useCesiumProfiles(v1Pubkeys: Ref) { - const geoMembers = ref([]); - const loading = ref(true); - const error = ref(null); - - watch(v1Pubkeys, async (pubkeys) => { - if (pubkeys === null) return; - - loading.value = true; - error.value = null; - - try { - const podUrl = await findWorkingPod(); - const allMembers: GeoMember[] = []; - - for (let i = 0; i < pubkeys.length; i += BATCH_SIZE) { - const batch = pubkeys.slice(i, i + BATCH_SIZE); - const res = await fetch(podUrl, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - size: batch.length, - _source: ['title', 'city', 'geoPoint'], - query: { - bool: { - must: [ - { ids: { values: batch } }, - { exists: { field: 'geoPoint' } }, - ], - }, - }, - }), - }); - - if (!res.ok) throw new Error(`Cesium+ HTTP ${res.status}`); - const json = await res.json(); - - for (const hit of json.hits?.hits ?? []) { - const s = hit._source; - if (!s?.geoPoint?.lat || !s?.geoPoint?.lon) continue; - allMembers.push({ - pubkey: hit._id, - title: s.title || '', - city: s.city || '', - lat: s.geoPoint.lat, - lon: s.geoPoint.lon, - }); - } - } - - geoMembers.value = allMembers; - } catch (e: any) { - error.value = e.message; - } finally { - loading.value = false; - } - }, { immediate: true }); - - return { geoMembers, loading, error }; -} diff --git a/app/composables/useGrateWizard.ts b/app/composables/useGrateWizard.ts index 2e043e4..8f7c8f3 100644 --- a/app/composables/useGrateWizard.ts +++ b/app/composables/useGrateWizard.ts @@ -8,7 +8,7 @@ export function useGrateWizard() { const win = window.open( url, 'grateWizard', - `width=${popup.width},height=${popup.height},left=${left},top=${top},scrollbars=yes,resizable=yes`, + `width=${popup.width},height=${popup.height},left=${left},top=${top},menubar=no,toolbar=no,location=no,status=no,scrollbars=yes,resizable=yes`, ) if (win) e?.preventDefault() } diff --git a/app/composables/useSavedPerimeters.ts b/app/composables/useSavedPerimeters.ts deleted file mode 100644 index f090fc5..0000000 --- a/app/composables/useSavedPerimeters.ts +++ /dev/null @@ -1,24 +0,0 @@ -export type SavedPerimeter = { - name: string; - polygon: [number, number][]; - createdAt: string; -}; - -const STORAGE_KEY = 'gw-saved-perimeters'; - -export function useSavedPerimeters() { - const perimeters = useLocalStorage(STORAGE_KEY, []); - - function savePerimeter(name: string, polygon: [number, number][]) { - perimeters.value = [ - ...perimeters.value.filter((p) => p.name !== name), - { name, polygon, createdAt: new Date().toISOString() }, - ]; - } - - function deletePerimeter(name: string) { - perimeters.value = perimeters.value.filter((p) => p.name !== name); - } - - return { perimeters, savePerimeter, deletePerimeter }; -} diff --git a/app/pages/gratewizard.vue b/app/pages/gratewizard.vue index e339d89..e1d17d3 100644 --- a/app/pages/gratewizard.vue +++ b/app/pages/gratewizard.vue @@ -1,15 +1,5 @@ - - diff --git a/app/services/duniter/index.ts b/app/services/duniter/index.ts deleted file mode 100644 index 0411d7f..0000000 --- a/app/services/duniter/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -// Changer cette ligne pour switcher v1 → v2 après mars 2026 : -import { v1Adapter as duniter } from './v1'; -export { duniter }; -export type { DuniterAdapter, MonetaryData } from './types'; diff --git a/app/services/duniter/types.ts b/app/services/duniter/types.ts deleted file mode 100644 index 69f91d8..0000000 --- a/app/services/duniter/types.ts +++ /dev/null @@ -1,14 +0,0 @@ -export type MonetaryData = { - monetaryMass: string; - membersCount: number; - amount: string; - timestamp: string; - blockNumber: number; - udBlockNumbers: number[]; -}; - -export interface DuniterAdapter { - fetchMonetary(): Promise; - fetchMemberPubkeys(): Promise; - fetchMemberJoinBlocks(pubkeys: string[]): Promise>; -} diff --git a/app/services/duniter/v1.ts b/app/services/duniter/v1.ts deleted file mode 100644 index fbb4a96..0000000 --- a/app/services/duniter/v1.ts +++ /dev/null @@ -1,83 +0,0 @@ -import type { DuniterAdapter, MonetaryData } from './types'; - -const BMA_URL = 'https://g1.duniter.org'; - -async function bmaGet(path: string): Promise { - const res = await fetch(`${BMA_URL}${path}`); - if (!res.ok) throw new Error(`BMA ${path}: ${res.status}`); - return res.json(); -} - -const joinBlockCache = new Map(); - -export const v1Adapter: DuniterAdapter = { - async fetchMonetary(): Promise { - const [current, udBlocks] = await Promise.all([ - bmaGet<{ - monetaryMass: number; - membersCount: number; - number: number; - medianTime: number; - }>('/blockchain/current'), - bmaGet<{ result: { blocks: number[] } }>('/blockchain/with/ud'), - ]); - - const udBlockNumbers = udBlocks.result.blocks; - const lastUdBlock = udBlockNumbers[udBlockNumbers.length - 1]; - const udBlock = await bmaGet<{ dividend: number }>(`/blockchain/block/${lastUdBlock}`); - - return { - monetaryMass: String(current.monetaryMass), - membersCount: current.membersCount, - amount: String(udBlock.dividend), - timestamp: new Date(current.medianTime * 1000).toISOString(), - blockNumber: current.number, - udBlockNumbers, - }; - }, - - async fetchMemberPubkeys(): Promise { - const data = await bmaGet<{ results: { pubkey: string }[] }>('/wot/members'); - return data.results.map((m) => m.pubkey); - }, - - async fetchMemberJoinBlocks(pubkeys: string[]): Promise> { - const result = new Map(); - const toFetch: string[] = []; - - for (const pk of pubkeys) { - const cached = joinBlockCache.get(pk); - if (cached !== undefined) { - result.set(pk, cached); - } else { - toFetch.push(pk); - } - } - - const CONCURRENT = 10; - for (let i = 0; i < toFetch.length; i += CONCURRENT) { - const batch = toFetch.slice(i, i + CONCURRENT); - await Promise.all( - batch.map(async (pk) => { - try { - const data = await bmaGet<{ - results: { uids: { meta: { timestamp: string } }[] }[]; - }>(`/wot/lookup/${encodeURIComponent(pk)}`); - const ts = data.results?.[0]?.uids?.[0]?.meta?.timestamp; - if (ts) { - const blockNum = parseInt(ts.split('-')[0], 10); - if (!isNaN(blockNum)) { - joinBlockCache.set(pk, blockNum); - result.set(pk, blockNum); - } - } - } catch { - // Skip members we can't look up - } - }) - ); - } - - return result; - }, -}; diff --git a/app/services/duniter/v2.ts b/app/services/duniter/v2.ts deleted file mode 100644 index 1648dbf..0000000 --- a/app/services/duniter/v2.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { ss58ToV1Pubkey } from '~/utils/ss58'; -import type { DuniterAdapter, MonetaryData } from './types'; - -const SQUID_URL = 'https://gt-squid.axiom-team.fr/v1/graphql'; - -async function gql(query: string): Promise { - const res = await fetch(SQUID_URL, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ query }), - }); - const json = await res.json(); - if (json.errors) throw new Error(json.errors[0].message); - return json.data; -} - -export const v2Adapter: DuniterAdapter = { - async fetchMonetary(): Promise { - const data = await gql<{ - universalDividends: { nodes: (Omit & Record)[] }; - }>(`{ - universalDividends(first: 1, orderBy: BLOCK_NUMBER_DESC) { - nodes { monetaryMass membersCount amount timestamp blockNumber } - } - }`); - return { ...data.universalDividends.nodes[0], udBlockNumbers: [] }; - }, - - async fetchMemberPubkeys(): Promise { - const accountIds: string[] = []; - let offset = 0; - const pageSize = 1000; - - while (true) { - const data = await gql<{ - identities: { nodes: { accountId: string }[] }; - }>(`{ - identities(first: ${pageSize}, offset: ${offset}, filter: { isMember: { equalTo: true } }) { - nodes { accountId } - } - }`); - - const nodes = data.identities.nodes; - for (const node of nodes) { - accountIds.push(node.accountId); - } - - if (nodes.length < pageSize) break; - offset += pageSize; - } - - // Convert SS58 accountIds to Cesium+ v1 base58 pubkeys - const pubkeys: string[] = []; - for (const id of accountIds) { - try { - pubkeys.push(ss58ToV1Pubkey(id)); - } catch { - // Skip invalid addresses - } - } - return pubkeys; - }, - - async fetchMemberJoinBlocks(_pubkeys: string[]): Promise> { - // TODO: implement using squid GraphQL after v2 migration - return new Map(); - }, -}; diff --git a/app/utils/gratewizard.ts b/app/utils/gratewizard.ts deleted file mode 100644 index f477eca..0000000 --- a/app/utils/gratewizard.ts +++ /dev/null @@ -1,69 +0,0 @@ -/** Ray-casting algorithm to test if a point is inside a polygon */ -export function pointInPolygon(lat: number, lng: number, polygon: [number, number][]): boolean { - let inside = false; - for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) { - const [yi, xi] = polygon[i]; - const [yj, xj] = polygon[j]; - if ((yi > lat) !== (yj > lat) && lng < ((xj - xi) * (lat - yi)) / (yj - yi) + xi) { - inside = !inside; - } - } - return inside; -} - -/** Format a number in French locale */ -export const fr = (n: number, decimals = 2) => - n.toLocaleString('fr-FR', { minimumFractionDigits: decimals, maximumFractionDigits: decimals }); - -export type CurrencyUnit = 'DU' | 'G1'; - -/** Format a G1 value in the given unit, with k/M suffix */ -export function formatValue(g1Value: number, unit: CurrencyUnit, duDaily: number): string { - const val = unit === 'DU' ? g1Value / duDaily : g1Value; - const suffix = unit === 'DU' ? 'DU' : '\u011e1'; - if (val >= 1_000_000) return fr(val / 1_000_000) + ' M' + suffix; - if (val >= 1_000) return fr(val / 1_000) + ' k' + suffix; - return fr(val) + ' ' + suffix; -} - -/** Binary-search count of udBlocks entries >= joinBlock (udBlocks is sorted ascending). */ -export function countUdSince(udBlocks: number[], joinBlock: number): number { - let lo = 0, hi = udBlocks.length; - while (lo < hi) { - const mid = (lo + hi) >> 1; - if (udBlocks[mid] < joinBlock) lo = mid + 1; - else hi = mid; - } - return udBlocks.length - lo; -} - -/** Date to ISO-like string (yyyy-mm-dd) */ -export const dateToString = (date: Date) => - date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2); - -/** Number of days between a date and today */ -export const getDays = (date: string | undefined) => { - if (!date) return 0; - const d = new Date(date); - const today = new Date(); - return Math.floor(Math.abs(d.getTime() - today.getTime()) / (1000 * 3600 * 24)); -}; - -/** Seniority ratio between two dates (days from today) */ -export const getRatio = (date1: string | undefined, date2: string | undefined) => { - return getDays(date1) / Math.max(getDays(date2), 1); -}; - -export const Block0Date = '2017-03-08'; - -export type Friend = { - name: string; - date: string; -}; - -export type TableFriend = Friend & { - [key: string]: string | number; - displayName: string; - displayDate: string; - du: number; -}; diff --git a/app/utils/ss58.ts b/app/utils/ss58.ts deleted file mode 100644 index 776c1e1..0000000 --- a/app/utils/ss58.ts +++ /dev/null @@ -1,109 +0,0 @@ -const BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'; - -const ALPHABET_MAP = new Map(); -for (let i = 0; i < BASE58_ALPHABET.length; i++) { - ALPHABET_MAP.set(BASE58_ALPHABET[i], i); -} - -export function base58Decode(str: string): Uint8Array { - if (str.length === 0) return new Uint8Array(0); - - // Count leading '1's (zero bytes) - let leadingZeros = 0; - while (leadingZeros < str.length && str[leadingZeros] === '1') { - leadingZeros++; - } - - // Decode base58 to big integer (stored as byte array) - const size = Math.ceil(str.length * 733 / 1000) + 1; // log(58) / log(256) - const bytes = new Uint8Array(size); - - for (let i = leadingZeros; i < str.length; i++) { - const val = ALPHABET_MAP.get(str[i]); - if (val === undefined) throw new Error(`Invalid base58 character: ${str[i]}`); - - let carry = val; - for (let j = size - 1; j >= 0; j--) { - carry += 256 * bytes[j]; - bytes[j] = carry % 256; - carry = Math.floor(carry / 256); - } - } - - // Skip leading zeros in the decoded bytes - let start = 0; - while (start < size && bytes[start] === 0) { - start++; - } - - const result = new Uint8Array(leadingZeros + (size - start)); - // Leading zeros from '1' characters - for (let i = 0; i < leadingZeros; i++) { - result[i] = 0; - } - // Decoded bytes - for (let i = start; i < size; i++) { - result[leadingZeros + (i - start)] = bytes[i]; - } - - return result; -} - -export function base58Encode(bytes: Uint8Array): string { - if (bytes.length === 0) return ''; - - // Count leading zero bytes - let leadingZeros = 0; - while (leadingZeros < bytes.length && bytes[leadingZeros] === 0) { - leadingZeros++; - } - - // Encode to base58 - const size = Math.ceil(bytes.length * 138 / 100) + 1; // log(256) / log(58) - const digits = new Uint8Array(size); - - for (let i = leadingZeros; i < bytes.length; i++) { - let carry = bytes[i]; - for (let j = size - 1; j >= 0; j--) { - carry += 256 * digits[j]; - digits[j] = carry % 58; - carry = Math.floor(carry / 58); - } - } - - // Skip leading zeros in base58 output - let start = 0; - while (start < size && digits[start] === 0) { - start++; - } - - let result = '1'.repeat(leadingZeros); - for (let i = start; i < size; i++) { - result += BASE58_ALPHABET[digits[i]]; - } - - return result; -} - -/** - * Convert an SS58 address to a base58-encoded raw pubkey (Cesium+ v1 format). - * - * SS58 layout: [prefix (1 or 2 bytes)] [32 bytes pubkey] [2 bytes checksum] - * - If first byte has bit 6 set (& 0x40), prefix is 2 bytes - * - Otherwise prefix is 1 byte - */ -export function ss58ToV1Pubkey(ss58: string): string { - const raw = base58Decode(ss58); - - // Determine prefix length - const prefixLen = (raw[0] & 0x40) ? 2 : 1; - - // Extract 32-byte pubkey (skip prefix, drop 2-byte checksum) - const pubkey = raw.slice(prefixLen, prefixLen + 32); - - if (pubkey.length !== 32) { - throw new Error(`Invalid SS58 address: expected 32-byte pubkey, got ${pubkey.length}`); - } - - return base58Encode(pubkey); -} diff --git a/media/Paroles Chansons.pdf b/media/Paroles Chansons.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9162bcc135faaa13abe549e52b5a7492754bf85d GIT binary patch literal 72070 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 literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 2cb26f3..d33bf08 100644 --- a/package.json +++ b/package.json @@ -10,15 +10,12 @@ "postinstall": "nuxt prepare" }, "dependencies": { - "@geoman-io/leaflet-geoman-free": "^2.19.2", "@nuxt/content": "^3.11.2", "@nuxt/image": "^2.0.0", "@pinia/nuxt": "^0.11.3", "@unocss/nuxt": "^66.6.0", "@vueuse/nuxt": "^14.2.1", "better-sqlite3": "^12.6.2", - "leaflet": "^1.9.4", - "leaflet.markercluster": "^1.5.3", "nuxt": "^4.3.1", "vue": "^3.5.28", "vue-router": "^4.6.4", @@ -27,7 +24,6 @@ "devDependencies": { "@iconify-json/lucide": "^1.2.91", "@iconify-json/ph": "^1.2.2", - "@types/leaflet": "^1.9.21", "typescript": "^5.9.3", "unocss": "^66.6.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6b617cb..e123a0d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,9 +8,6 @@ importers: .: dependencies: - '@geoman-io/leaflet-geoman-free': - specifier: ^2.19.2 - version: 2.19.2(leaflet@1.9.4) '@nuxt/content': specifier: ^3.11.2 version: 3.11.2(better-sqlite3@12.6.2)(magicast@0.5.2) @@ -29,12 +26,6 @@ importers: better-sqlite3: specifier: ^12.6.2 version: 12.6.2 - leaflet: - specifier: ^1.9.4 - version: 1.9.4 - leaflet.markercluster: - specifier: ^1.5.3 - version: 1.5.3(leaflet@1.9.4) nuxt: specifier: ^4.3.1 version: 4.3.1(@parcel/watcher@2.5.6)(@types/node@25.2.3)(@vue/compiler-sfc@3.5.28)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(ioredis@5.9.3)(magicast@0.5.2)(rollup@4.57.1)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@25.2.3)(jiti@2.6.1)(terser@5.46.0)(yaml@2.8.2))(yaml@2.8.2) @@ -54,9 +45,6 @@ importers: '@iconify-json/ph': specifier: ^1.2.2 version: 1.2.2 - '@types/leaflet': - specifier: ^1.9.21 - version: 1.9.21 typescript: specifier: ^5.9.3 version: 5.9.3 @@ -400,12 +388,6 @@ packages: '@fastify/accept-negotiator@2.0.1': resolution: {integrity: sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==} - '@geoman-io/leaflet-geoman-free@2.19.2': - resolution: {integrity: sha512-FYqLCFjCWLc1c5vel83i2ON77zPugH9qfxzLxTt+SiFiMgHjO1dSS59qz23aLLQ0hRWTQdycnxXGNmT+4OC9sg==} - engines: {node: '>=18.0.0'} - peerDependencies: - leaflet: ^1.2.0 - '@iconify-json/lucide@1.2.91': resolution: {integrity: sha512-8fuRiK+HiNRgCKMspn9UPsDpBw0TqVTIY0LOiDbMnFxOBwAulMXIl+SVOtp4LzxNvCXB5ofYffiiFIFDitqo7w==} @@ -1493,51 +1475,6 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@turf/bbox@7.3.4': - resolution: {integrity: sha512-D5ErVWtfQbEPh11yzI69uxqrcJmbPU/9Y59f1uTapgwAwQHQztDWgsYpnL3ns8r1GmPWLP8sGJLVTIk2TZSiYA==} - - '@turf/boolean-contains@7.3.4': - resolution: {integrity: sha512-AJMGbtC6HiXgHvq0RNlTfsDB58Qf9Js45MP/APbhGTH4AiLZ8VMDISywVFNd7qN6oppNlDd3xApVR28+ti8bNg==} - - '@turf/boolean-point-in-polygon@7.3.4': - resolution: {integrity: sha512-v/4hfyY90Vz9cDgs2GwjQf+Lft8o7mNCLJOTz/iv8SHAIgMMX0czEoIaNVOJr7tBqPqwin1CGwsncrkf5C9n8Q==} - - '@turf/boolean-point-on-line@7.3.4': - resolution: {integrity: sha512-70gm5x6YQOZKcw0b/O4jjMwVWnFj+Zb6TXozLgZFDZShc8pgTQtZku7K+HKZ7Eya+7usHIB4IimZauomOMa+iw==} - - '@turf/distance@7.3.4': - resolution: {integrity: sha512-9drWgd46uHPPyzgrcRQLgSvdS/SjVlQ6ZIBoRQagS5P2kSjUbcOXHIMeOSPwfxwlKhEtobLyr+IiR2ns1TfF8w==} - - '@turf/geojson-rbush@7.3.4': - resolution: {integrity: sha512-aDG/5mMCgKduqBwZ3XpLOdlE2hizV3fM+5dHCWyrBepCQLeM/QRvvpBDCdQKDWKpoIBmrGGYDNiOofnf3QmGhg==} - - '@turf/helpers@7.3.4': - resolution: {integrity: sha512-U/S5qyqgx3WTvg4twaH0WxF3EixoTCfDsmk98g1E3/5e2YKp7JKYZdz0vivsS5/UZLJeZDEElOSFH4pUgp+l7g==} - - '@turf/invariant@7.3.4': - resolution: {integrity: sha512-88Eo4va4rce9sNZs6XiMJowWkikM3cS2TBhaCKlU+GFHdNf8PFEpiU42VDU8q5tOF6/fu21Rvlke5odgOGW4AQ==} - - '@turf/kinks@7.3.4': - resolution: {integrity: sha512-LZTKELWxvXl0vc9ZxVgi0v07fO9+2FrZOam2B10fz/eGjy3oKNazU5gjggbnc499wEIcJS4hN+VyjQZrmsJAdQ==} - - '@turf/line-intersect@7.3.4': - resolution: {integrity: sha512-XygbTvHa6A+v6l2ZKYtS8AAWxwmrPxKxfBbdH75uED1JvdytSLWYTKGlcU3soxd9sYb4x/g9sDvRIVyU6Lucrg==} - - '@turf/line-segment@7.3.4': - resolution: {integrity: sha512-UeISzf/JHoWEY5yeoyvKwA5epWcvJMCpCwbIMolvfTC5pp+IVozjHPVCRvRWuzmbmAvetcW0unL5bjqi0ADmuQ==} - - '@turf/line-split@7.3.4': - resolution: {integrity: sha512-l1zmCSUnGsiN4gf22Aw91a2VnYs5DZS67FdkYqKgr+wPEAL/gpQgIBBWSTmhwY8zb3NEqty+f/gMEe8EJAWYng==} - - '@turf/meta@7.3.4': - resolution: {integrity: sha512-tlmw9/Hs1p2n0uoHVm1w3ugw1I6L8jv9YZrcdQa4SH5FX5UY0ATrKeIvfA55FlL//PGuYppJp+eyg/0eb4goqw==} - - '@turf/nearest-point-on-line@7.3.4': - resolution: {integrity: sha512-DQrP3lRju83rIXFN68tUEpc7ki/eRwdwBkK2CTT4RAcyCxbcH2NGJPQv8dYiww/Ar77u1WLVn+aINXZH904dWw==} - - '@turf/truncate@7.3.4': - resolution: {integrity: sha512-VPXdae9+RLLM19FMrJgt7QANBikm7DxPbfp/dXgzE4Ca7v+mJ4T1fYc7gCZDaqOrWMccHKbvv4iSuW7YZWdIIA==} - '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} @@ -1553,18 +1490,12 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/geojson@7946.0.16': - resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} - '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/leaflet@1.9.21': - resolution: {integrity: sha512-TbAd9DaPGSnzp6QvtYngntMZgcRk+igFELwR2N99XZn7RXUdKgsXMR+28bUO0rPsWp8MIu/f47luLIQuSLYv/w==} - '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -2020,9 +1951,6 @@ packages: resolution: {integrity: sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA==} engines: {node: 20.x || 22.x || 23.x || 24.x || 25.x} - bignumber.js@9.3.1: - resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} - bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} @@ -3064,14 +2992,6 @@ packages: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} engines: {node: '>= 0.6.3'} - leaflet.markercluster@1.5.3: - resolution: {integrity: sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==} - peerDependencies: - leaflet: ^1.3.1 - - leaflet@1.9.4: - resolution: {integrity: sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==} - lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} @@ -3612,12 +3532,6 @@ packages: pkg-types@2.3.0: resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} - point-in-polygon-hao@1.2.4: - resolution: {integrity: sha512-x2pcvXeqhRHlNRdhLs/tgFapAbSSe86wa/eqmj1G6pWftbEs5aVRJhRGM6FYSUERKu0PjekJzMq0gsI2XyiclQ==} - - polyclip-ts@0.16.8: - resolution: {integrity: sha512-JPtKbDRuPEuAjuTdhR62Gph7Is2BS1Szx69CFOO3g71lpJDFo78k4tFyi+qFOMVPePEzdSKkpGU3NBXPHHjvKQ==} - possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -3833,9 +3747,6 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - quickselect@2.0.0: - resolution: {integrity: sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==} - radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} @@ -3846,9 +3757,6 @@ packages: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} - rbush@3.0.1: - resolution: {integrity: sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==} - rc9@2.1.2: resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} @@ -3966,9 +3874,6 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - robust-predicates@3.0.2: - resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} - rollup-plugin-visualizer@6.0.5: resolution: {integrity: sha512-9+HlNgKCVbJDs8tVtjQ43US12eqaiHyyiLMdBwQ7vSZPiHMysGNo2E88TAp1si5wx8NAoYriI2A5kuKfIakmJg==} engines: {node: '>=18'} @@ -4141,9 +4046,6 @@ packages: resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} engines: {node: '>=0.10.0'} - splaytree-ts@1.0.2: - resolution: {integrity: sha512-0kGecIZNIReCSiznK3uheYB8sbstLjCZLiwcQwbmLhgHJj2gz6OnSPkVzJQCMnmEz1BQ4gPK59ylhBoEWOhGNA==} - srvx@0.11.5: resolution: {integrity: sha512-MbQgu/gbLcXjg1bhUhPXXOpeMfmDMTGSKPWeht5acXnlQNldD925eS4+bIH/qESecSkP71dU3Fmvunlai1+yzw==} engines: {node: '>=20.16.0'} @@ -4228,9 +4130,6 @@ packages: engines: {node: '>=16'} hasBin: true - sweepline-intersections@1.5.0: - resolution: {integrity: sha512-AoVmx72QHpKtItPu72TzFL+kcYjd67BPLDoR0LarIk+xyaRg+pDTMFXndIEvZf9xEKnJv6JdhgRMnocoG0D3AQ==} - system-architecture@0.1.0: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==} engines: {node: '>=18'} @@ -4292,9 +4191,6 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tinyqueue@2.0.3: - resolution: {integrity: sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==} - to-buffer@1.2.2: resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} engines: {node: '>= 0.4'} @@ -5143,16 +5039,6 @@ snapshots: '@fastify/accept-negotiator@2.0.1': optional: true - '@geoman-io/leaflet-geoman-free@2.19.2(leaflet@1.9.4)': - dependencies: - '@turf/boolean-contains': 7.3.4 - '@turf/kinks': 7.3.4 - '@turf/line-intersect': 7.3.4 - '@turf/line-split': 7.3.4 - leaflet: 1.9.4 - lodash: 4.17.23 - polyclip-ts: 0.16.8 - '@iconify-json/lucide@1.2.91': dependencies: '@iconify/types': 2.0.0 @@ -6232,123 +6118,6 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@turf/bbox@7.3.4': - dependencies: - '@turf/helpers': 7.3.4 - '@turf/meta': 7.3.4 - '@types/geojson': 7946.0.16 - tslib: 2.8.1 - - '@turf/boolean-contains@7.3.4': - dependencies: - '@turf/bbox': 7.3.4 - '@turf/boolean-point-in-polygon': 7.3.4 - '@turf/boolean-point-on-line': 7.3.4 - '@turf/helpers': 7.3.4 - '@turf/invariant': 7.3.4 - '@turf/line-split': 7.3.4 - '@types/geojson': 7946.0.16 - tslib: 2.8.1 - - '@turf/boolean-point-in-polygon@7.3.4': - dependencies: - '@turf/helpers': 7.3.4 - '@turf/invariant': 7.3.4 - '@types/geojson': 7946.0.16 - point-in-polygon-hao: 1.2.4 - tslib: 2.8.1 - - '@turf/boolean-point-on-line@7.3.4': - dependencies: - '@turf/helpers': 7.3.4 - '@turf/invariant': 7.3.4 - '@types/geojson': 7946.0.16 - tslib: 2.8.1 - - '@turf/distance@7.3.4': - dependencies: - '@turf/helpers': 7.3.4 - '@turf/invariant': 7.3.4 - '@types/geojson': 7946.0.16 - tslib: 2.8.1 - - '@turf/geojson-rbush@7.3.4': - dependencies: - '@turf/bbox': 7.3.4 - '@turf/helpers': 7.3.4 - '@turf/meta': 7.3.4 - '@types/geojson': 7946.0.16 - rbush: 3.0.1 - tslib: 2.8.1 - - '@turf/helpers@7.3.4': - dependencies: - '@types/geojson': 7946.0.16 - tslib: 2.8.1 - - '@turf/invariant@7.3.4': - dependencies: - '@turf/helpers': 7.3.4 - '@types/geojson': 7946.0.16 - tslib: 2.8.1 - - '@turf/kinks@7.3.4': - dependencies: - '@turf/helpers': 7.3.4 - '@types/geojson': 7946.0.16 - tslib: 2.8.1 - - '@turf/line-intersect@7.3.4': - dependencies: - '@turf/helpers': 7.3.4 - '@types/geojson': 7946.0.16 - sweepline-intersections: 1.5.0 - tslib: 2.8.1 - - '@turf/line-segment@7.3.4': - dependencies: - '@turf/helpers': 7.3.4 - '@turf/invariant': 7.3.4 - '@turf/meta': 7.3.4 - '@types/geojson': 7946.0.16 - tslib: 2.8.1 - - '@turf/line-split@7.3.4': - dependencies: - '@turf/bbox': 7.3.4 - '@turf/geojson-rbush': 7.3.4 - '@turf/helpers': 7.3.4 - '@turf/invariant': 7.3.4 - '@turf/line-intersect': 7.3.4 - '@turf/line-segment': 7.3.4 - '@turf/meta': 7.3.4 - '@turf/nearest-point-on-line': 7.3.4 - '@turf/truncate': 7.3.4 - '@types/geojson': 7946.0.16 - tslib: 2.8.1 - - '@turf/meta@7.3.4': - dependencies: - '@turf/helpers': 7.3.4 - '@types/geojson': 7946.0.16 - tslib: 2.8.1 - - '@turf/nearest-point-on-line@7.3.4': - dependencies: - '@turf/distance': 7.3.4 - '@turf/helpers': 7.3.4 - '@turf/invariant': 7.3.4 - '@turf/meta': 7.3.4 - '@types/geojson': 7946.0.16 - tslib: 2.8.1 - - '@turf/truncate@7.3.4': - dependencies: - '@turf/helpers': 7.3.4 - '@turf/meta': 7.3.4 - '@types/geojson': 7946.0.16 - tslib: 2.8.1 - '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 @@ -6370,18 +6139,12 @@ snapshots: '@types/estree@1.0.8': {} - '@types/geojson@7946.0.16': {} - '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 '@types/json-schema@7.0.15': {} - '@types/leaflet@1.9.21': - dependencies: - '@types/geojson': 7946.0.16 - '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 @@ -7030,8 +6793,6 @@ snapshots: bindings: 1.5.0 prebuild-install: 7.1.3 - bignumber.js@9.3.1: {} - bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 @@ -8154,12 +7915,6 @@ snapshots: dependencies: readable-stream: 2.3.8 - leaflet.markercluster@1.5.3(leaflet@1.9.4): - dependencies: - leaflet: 1.9.4 - - leaflet@1.9.4: {} - lilconfig@3.1.3: {} listhen@1.9.0: @@ -9131,15 +8886,6 @@ snapshots: exsolve: 1.0.8 pathe: 2.0.3 - point-in-polygon-hao@1.2.4: - dependencies: - robust-predicates: 3.0.2 - - polyclip-ts@0.16.8: - dependencies: - bignumber.js: 9.3.1 - splaytree-ts: 1.0.2 - possible-typed-array-names@1.1.0: {} postcss-calc@10.1.1(postcss@8.5.6): @@ -9345,8 +9091,6 @@ snapshots: queue-microtask@1.2.3: {} - quickselect@2.0.0: {} - radix3@1.1.2: {} randombytes@2.1.0: @@ -9355,10 +9099,6 @@ snapshots: range-parser@1.2.1: {} - rbush@3.0.1: - dependencies: - quickselect: 2.0.0 - rc9@2.1.2: dependencies: defu: 6.1.4 @@ -9554,8 +9294,6 @@ snapshots: rfdc@1.4.1: {} - robust-predicates@3.0.2: {} - rollup-plugin-visualizer@6.0.5(rollup@4.57.1): dependencies: open: 8.4.2 @@ -9797,8 +9535,6 @@ snapshots: speakingurl@14.0.1: {} - splaytree-ts@1.0.2: {} - srvx@0.11.5: {} standard-as-callback@2.1.0: {} @@ -9887,10 +9623,6 @@ snapshots: picocolors: 1.1.1 sax: 1.4.4 - sweepline-intersections@1.5.0: - dependencies: - tinyqueue: 2.0.3 - system-architecture@0.1.0: {} tagged-tag@1.0.0: {} @@ -9960,8 +9692,6 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tinyqueue@2.0.3: {} - to-buffer@1.2.2: dependencies: isarray: 2.0.5 @@ -9984,7 +9714,8 @@ snapshots: trough@2.2.0: {} - tslib@2.8.1: {} + tslib@2.8.1: + optional: true tunnel-agent@0.6.0: dependencies: diff --git a/site/site.yml b/site/site.yml index 4e1c978..8c592bd 100644 --- a/site/site.yml +++ b/site/site.yml @@ -17,7 +17,7 @@ footer: - label: Mentions légales to: /mentions-legales gratewizard: - url: /gratewizard?popup + url: https://gratewizard.ml popup: width: 420 height: 720 diff --git a/uno.config.ts b/uno.config.ts index 533d6fb..2af0d2d 100644 --- a/uno.config.ts +++ b/uno.config.ts @@ -74,7 +74,7 @@ export default defineConfig({ shortcuts: { 'btn-primary': 'inline-flex items-center justify-center px-6 py-3 rounded-lg bg-primary text-white font-display font-semibold tracking-wide transition-all duration-200 hover:bg-primary-600 hover:scale-105 active:scale-95', 'btn-accent': 'inline-flex items-center justify-center px-6 py-3 rounded-lg bg-accent text-surface-bg font-display font-semibold tracking-wide transition-all duration-200 hover:bg-accent-600 hover:scale-105 active:scale-95', - 'btn-ghost': 'inline-flex items-center justify-center px-4 py-2 rounded-lg text-white/70 font-sans transition-all duration-200 hover:bg-white/10 hover:text-white', + 'btn-ghost': 'inline-flex items-center justify-center px-4 py-2 rounded-lg border-none text-white/70 font-sans transition-all duration-200 hover:bg-white/10 hover:text-white', 'card-surface': 'rounded-xl bg-surface border border-white/8 p-6 transition-all duration-300 hover:border-primary/30 hover:shadow-lg hover:shadow-primary/5', 'text-gradient': 'bg-gradient-to-r from-primary-300 to-accent bg-clip-text text-transparent', 'text-muted': 'text-white/60',