@tekkare/romulus 0.1.50 → 0.1.51
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/module.json
CHANGED
|
@@ -84,7 +84,15 @@ const props = withDefaults(
|
|
|
84
84
|
},
|
|
85
85
|
)
|
|
86
86
|
|
|
87
|
-
const emit = defineEmits<{
|
|
87
|
+
const emit = defineEmits<{
|
|
88
|
+
export: [config: RmExportConfig]
|
|
89
|
+
/** Relancer un export conserve, par son identifiant cote app. */
|
|
90
|
+
rerun: [id: string]
|
|
91
|
+
/** Ouvrir l'ecran d'origine d'un export tire d'ailleurs. */
|
|
92
|
+
open: [id: string]
|
|
93
|
+
/** Retirer un export de la liste. */
|
|
94
|
+
forget: [id: string]
|
|
95
|
+
}>()
|
|
88
96
|
|
|
89
97
|
const LABELS = {
|
|
90
98
|
fr: {
|
|
@@ -138,6 +146,10 @@ const LABELS = {
|
|
|
138
146
|
recentTitle: 'Exports récents',
|
|
139
147
|
recentEmpty: 'Aucun export lancé depuis ce navigateur.',
|
|
140
148
|
recentHint: 'Historique local à ce navigateur : les exports ne sont pas conservés sur nos serveurs.',
|
|
149
|
+
savedHint: 'Un export conservé garde ses filtres, pas son fichier : le rejouer repose ces filtres et régénère le document avec la donnée du jour.',
|
|
150
|
+
rerun: 'Rejouer',
|
|
151
|
+
openPage: 'Ouvrir l\'écran',
|
|
152
|
+
forget: 'Supprimer',
|
|
141
153
|
permalinkHint: 'Le lien reprend la vue courante, filtres compris. Rien à configurer.',
|
|
142
154
|
nothing: 'Aucun contenu disponible pour ce format sur cette page.',
|
|
143
155
|
},
|
|
@@ -192,6 +204,10 @@ const LABELS = {
|
|
|
192
204
|
recentTitle: 'Recent exports',
|
|
193
205
|
recentEmpty: 'No export run from this browser yet.',
|
|
194
206
|
recentHint: 'History is local to this browser: exports are not kept on our servers.',
|
|
207
|
+
savedHint: 'A kept export stores its filters, not its file: running it again re-applies those filters and rebuilds the document from today\'s data.',
|
|
208
|
+
rerun: 'Run again',
|
|
209
|
+
openPage: 'Open screen',
|
|
210
|
+
forget: 'Delete',
|
|
195
211
|
permalinkHint: 'The link points at the current view, filters included. Nothing to configure.',
|
|
196
212
|
nothing: 'No content available for this format on this page.',
|
|
197
213
|
},
|
|
@@ -238,6 +254,12 @@ watch(
|
|
|
238
254
|
)
|
|
239
255
|
|
|
240
256
|
const step = ref(1)
|
|
257
|
+
/**
|
|
258
|
+
* Onglet affiche. « Mes exports » n'est pas une etape du wizard : c'est la
|
|
259
|
+
* liste de ce qui a deja ete tire, et elle vit a cote plutot qu'en dessous
|
|
260
|
+
* pour ne pas allonger un panneau deja long de quatre etapes.
|
|
261
|
+
*/
|
|
262
|
+
const tab = ref<'export' | 'mine'>('export')
|
|
241
263
|
const mode = ref<'entry' | 'wizard'>(props.templates.length ? 'entry' : 'wizard')
|
|
242
264
|
const templateKey = ref<string | null>(null)
|
|
243
265
|
|
|
@@ -360,24 +382,89 @@ const recentDate = (at: string | Date) =>
|
|
|
360
382
|
<template>
|
|
361
383
|
<div class="rm-export">
|
|
362
384
|
<div class="rm-export__tabs" role="tablist">
|
|
363
|
-
<button
|
|
385
|
+
<button
|
|
386
|
+
class="rm-export__tab"
|
|
387
|
+
:class="{ 'rm-export__tab--active': tab === 'export' }"
|
|
388
|
+
type="button"
|
|
389
|
+
role="tab"
|
|
390
|
+
@click="tab = 'export'"
|
|
391
|
+
>
|
|
364
392
|
<RmIcon name="PlusCircle" :size="16" /> {{ t.tabExport }}
|
|
365
393
|
</button>
|
|
366
394
|
<button
|
|
367
395
|
class="rm-export__tab"
|
|
396
|
+
:class="{ 'rm-export__tab--active': tab === 'mine' }"
|
|
368
397
|
type="button"
|
|
369
398
|
role="tab"
|
|
370
|
-
|
|
371
|
-
:title="t.schedulingSoon"
|
|
399
|
+
@click="tab = 'mine'"
|
|
372
400
|
>
|
|
373
401
|
<RmIcon name="ClockClockwise" :size="16" /> {{ t.tabMine }}
|
|
402
|
+
<span v-if="recent.length" class="rm-export__tab-count">{{ recent.length }}</span>
|
|
374
403
|
</button>
|
|
375
404
|
</div>
|
|
376
405
|
|
|
377
|
-
<p class="rm-export__lead">{{ t.lead }}</p>
|
|
406
|
+
<p v-if="tab === 'export'" class="rm-export__lead">{{ t.lead }}</p>
|
|
378
407
|
|
|
379
408
|
<!-- Entree : modeles pre-remplis, ou le wizard a la main -->
|
|
380
|
-
<div v-if="
|
|
409
|
+
<div v-if="tab === 'mine'" class="rm-export__history">
|
|
410
|
+
<p class="rm-export__eyebrow">
|
|
411
|
+
<RmIcon name="DownloadSimple" :size="14" /> {{ t.recentTitle }}
|
|
412
|
+
</p>
|
|
413
|
+
<p v-if="!recent.length" class="rm-export__hint">{{ t.recentEmpty }}</p>
|
|
414
|
+
<div
|
|
415
|
+
v-for="(item, index) in recent"
|
|
416
|
+
:key="item.id ?? `${item.name}-${index}`"
|
|
417
|
+
class="rm-export__history-row"
|
|
418
|
+
>
|
|
419
|
+
<RmIcon name="File" :size="16" />
|
|
420
|
+
<span class="rm-export__history-body">
|
|
421
|
+
<span class="rm-export__history-name">{{ item.name }}</span>
|
|
422
|
+
<span class="rm-export__history-meta">
|
|
423
|
+
<template v-if="item.pageLabel">{{ item.pageLabel }} · </template>
|
|
424
|
+
<template v-if="item.rows">{{ item.rows.toLocaleString(lang === 'en' ? 'en-US' : 'fr-FR') }} {{ t.rows }} · </template>
|
|
425
|
+
<template v-if="item.size">{{ item.size }} · </template>
|
|
426
|
+
{{ recentDate(item.at) }}
|
|
427
|
+
</span>
|
|
428
|
+
</span>
|
|
429
|
+
<!-- Un export conserve se rejoue ; venu d'un autre ecran, il s'y ouvre,
|
|
430
|
+
parce que ses filtres ne veulent rien dire sur celui-ci. -->
|
|
431
|
+
<template v-if="item.id">
|
|
432
|
+
<RmButton
|
|
433
|
+
v-if="item.runnable !== false"
|
|
434
|
+
variant="secondary"
|
|
435
|
+
size="sm"
|
|
436
|
+
prefix-icon="ArrowClockwise"
|
|
437
|
+
:disabled="busy"
|
|
438
|
+
:title="t.rerun"
|
|
439
|
+
@click="emit('rerun', item.id)"
|
|
440
|
+
>
|
|
441
|
+
{{ t.rerun }}
|
|
442
|
+
</RmButton>
|
|
443
|
+
<RmButton
|
|
444
|
+
v-else
|
|
445
|
+
variant="secondary"
|
|
446
|
+
size="sm"
|
|
447
|
+
prefix-icon="ArrowSquareOut"
|
|
448
|
+
:title="t.openPage"
|
|
449
|
+
@click="emit('open', item.id)"
|
|
450
|
+
>
|
|
451
|
+
{{ t.openPage }}
|
|
452
|
+
</RmButton>
|
|
453
|
+
<RmButton
|
|
454
|
+
variant="ghost"
|
|
455
|
+
size="sm"
|
|
456
|
+
prefix-icon="Trash"
|
|
457
|
+
:title="t.forget"
|
|
458
|
+
@click="emit('forget', item.id)"
|
|
459
|
+
/>
|
|
460
|
+
</template>
|
|
461
|
+
</div>
|
|
462
|
+
<p v-if="recent.length" class="rm-export__hint">
|
|
463
|
+
{{ recent.some(item => item.id) ? t.savedHint : t.recentHint }}
|
|
464
|
+
</p>
|
|
465
|
+
</div>
|
|
466
|
+
|
|
467
|
+
<div v-else-if="mode === 'entry'" class="rm-export__entry">
|
|
381
468
|
<p class="rm-export__eyebrow">{{ t.entryTitle }}</p>
|
|
382
469
|
<div class="rm-export__templates">
|
|
383
470
|
<button
|
|
@@ -409,7 +496,7 @@ const recentDate = (at: string | Date) =>
|
|
|
409
496
|
</div>
|
|
410
497
|
|
|
411
498
|
<!-- Wizard -->
|
|
412
|
-
<div v-else class="rm-export__wizard">
|
|
499
|
+
<div v-else-if="tab === 'export'" class="rm-export__wizard">
|
|
413
500
|
<div v-if="templates.length" class="rm-export__wizard-head">
|
|
414
501
|
<button class="rm-export__back" type="button" @click="mode = 'entry'">
|
|
415
502
|
<RmIcon name="ArrowLeft" :size="14" /> {{ t.backToEntry }}
|
|
@@ -722,26 +809,9 @@ const recentDate = (at: string | Date) =>
|
|
|
722
809
|
</div>
|
|
723
810
|
</div>
|
|
724
811
|
|
|
725
|
-
<!-- Exports recents -->
|
|
726
|
-
<div class="rm-export__history">
|
|
727
|
-
<p class="rm-export__eyebrow">
|
|
728
|
-
<RmIcon name="DownloadSimple" :size="14" /> {{ t.recentTitle }}
|
|
729
|
-
</p>
|
|
730
|
-
<p v-if="!recent.length" class="rm-export__hint">{{ t.recentEmpty }}</p>
|
|
731
|
-
<div v-for="(item, index) in recent" :key="`${item.name}-${index}`" class="rm-export__history-row">
|
|
732
|
-
<RmIcon name="File" :size="16" />
|
|
733
|
-
<span class="rm-export__history-name">{{ item.name }}</span>
|
|
734
|
-
<span class="rm-export__history-meta">
|
|
735
|
-
<template v-if="item.rows">{{ item.rows.toLocaleString(lang === 'en' ? 'en-US' : 'fr-FR') }} {{ t.rows }} · </template>
|
|
736
|
-
<template v-if="item.size">{{ item.size }} · </template>
|
|
737
|
-
{{ recentDate(item.at) }}
|
|
738
|
-
</span>
|
|
739
|
-
</div>
|
|
740
|
-
<p v-if="recent.length" class="rm-export__hint">{{ t.recentHint }}</p>
|
|
741
|
-
</div>
|
|
742
812
|
</div>
|
|
743
813
|
</template>
|
|
744
814
|
|
|
745
815
|
<style scoped>
|
|
746
|
-
.rm-export{display:flex;flex-direction:column}.rm-export__tabs{border-bottom:1px solid var(--border-default);display:flex;margin-bottom:var(--space-16)}.rm-export__tab{align-items:center;background:none;border:none;border-bottom:3px solid transparent;color:var(--text-muted);cursor:pointer;display:inline-flex;font-family:inherit;font-size:var(--font-14);font-weight:600;gap:var(--space-6);padding:var(--space-12) var(--space-16)}.rm-export__tab--active{border-bottom-color:var(--color-primary);color:var(--color-secondary)}.rm-export__tab:disabled{cursor:not-allowed;opacity:.5}.rm-export__desc,.rm-export__lead{color:var(--text-secondary);font-size:12.5px;line-height:1.55;margin:0 0 var(--space-16)}.rm-export__eyebrow{align-items:center;color:var(--text-muted);display:flex;font-size:10.5px;font-weight:700;gap:var(--space-6);letter-spacing:.1em;margin:0 0 var(--space-8);text-transform:uppercase}.rm-export__hint{color:var(--text-muted);display:block;font-size:11.5px;line-height:1.45;margin:var(--space-8) 0 0}.rm-export__notice{color:var(--color-success)}.rm-export__error,.rm-export__notice{font-size:12px;margin:var(--space-8) 0 0}.rm-export__error{color:var(--color-danger)}.rm-export__templates{display:grid;gap:var(--space-8)}.rm-export__template{align-items:center;background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-xl);cursor:pointer;display:flex;font-family:inherit;gap:var(--space-12);padding:var(--space-12) var(--space-16);text-align:left;transition:border-color var(--duration-fast),background var(--duration-fast),transform var(--duration-fast)}.rm-export__template:hover{background:var(--bg-hover);border-color:var(--color-secondary);transform:translateY(-1px)}.rm-export__template--custom{background:transparent;border-style:dashed}.rm-export__template-body{display:flex;flex-direction:column;min-width:0}.rm-export__template-name{color:var(--text-primary);font-size:13.5px;font-weight:700;line-height:1.2}.rm-export__template-meta{color:var(--text-muted);font-size:11px;line-height:1.35;margin-top:3px}.rm-export__wizard{background:var(--bg-surface-2);border:1px solid var(--border-default);border-radius:var(--radius-2xl);padding:var(--space-16) var(--space-20)}.rm-export__wizard-head{align-items:center;border-bottom:1px solid var(--border-soft);display:flex;gap:var(--space-12);margin-bottom:var(--space-16);padding-bottom:var(--space-12)}.rm-export__back{align-items:center;background:none;border:none;color:var(--color-secondary);cursor:pointer;display:inline-flex;font-family:inherit;font-size:12px;font-weight:600;gap:var(--space-4);padding:0}.rm-export__back:hover{text-decoration:underline;text-underline-offset:3px}.rm-export__stepper{align-items:center;display:flex;gap:var(--space-4);margin-bottom:var(--space-20)}.rm-export__step{background:none;border:none;border-radius:var(--radius-pill);cursor:pointer;font-family:inherit;gap:var(--space-6);padding:var(--space-4) var(--space-8)}.rm-export__step,.rm-export__step-num{align-items:center;display:inline-flex}.rm-export__step-num{background:var(--bg-surface-3);border:1.5px solid var(--border-default);border-radius:50%;color:var(--text-muted);font-size:12px;font-weight:700;height:22px;justify-content:center;transition:background var(--duration-fast),color var(--duration-fast),border-color var(--duration-fast);width:22px}.rm-export__step-label{color:var(--text-muted);font-size:12px;font-weight:600}.rm-export__step:hover .rm-export__step-label{color:var(--text-primary)}.rm-export__step--active .rm-export__step-num{background:var(--color-primary);border-color:var(--color-primary);box-shadow:var(--shadow-focus);color:#fff}.rm-export__step--active .rm-export__step-label{color:var(--color-secondary)}.rm-export__step--done .rm-export__step-num{background:var(--color-secondary);border-color:var(--color-secondary);color:#fff}.rm-export__step--done .rm-export__step-label{color:var(--text-secondary)}.rm-export__step-divider{background:var(--border-default);border-radius:var(--radius-pill);flex:1;height:1.5px}.rm-export__panel{animation:rm-export-in var(--duration-base) var(--ease-out)}@keyframes rm-export-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.rm-export__formats{display:grid;gap:var(--space-8)}.rm-export__format{align-items:flex-start;background:var(--bg-surface);border:1.5px solid var(--border-default);border-radius:var(--radius-xl);cursor:pointer;display:flex;gap:var(--space-12);padding:var(--space-12) var(--space-16);transition:border-color var(--duration-fast),background var(--duration-fast),transform var(--duration-fast)}.rm-export__format:hover{border-color:var(--color-secondary);transform:translateY(-1px)}.rm-export__format--active{background:var(--bg-hover);border-color:var(--color-primary);box-shadow:var(--shadow-focus)}.rm-export__format--active .rm-export__format-name{color:var(--color-primary)}.rm-export__format--off{cursor:not-allowed;opacity:.55}.rm-export__format--off:hover{border-color:var(--border-default);transform:none}.rm-export__format input[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--bg-surface);border:1.5px solid var(--border-default);border-radius:50%;cursor:inherit;flex-shrink:0;height:18px;margin:1px 0 0;position:relative;width:18px}.rm-export__format input[type=radio]:checked{border-color:var(--color-primary)}.rm-export__format input[type=radio]:checked:after{background:var(--color-primary);border-radius:50%;content:"";inset:3px;position:absolute}.rm-export__format-text{display:flex;flex-direction:column;min-width:0}.rm-export__format-name{color:var(--text-primary);font-size:14px;font-weight:700;line-height:1.2}.rm-export__format-desc{color:var(--text-muted);font-size:11.5px;line-height:1.45;margin-top:3px}.rm-export__format-meta{border-top:1px solid var(--border-soft);color:var(--text-muted);font-size:10px;font-weight:700;letter-spacing:.08em;margin-top:var(--space-8);padding-top:var(--space-8);text-transform:uppercase}.rm-export__row{margin-bottom:var(--space-20)}.rm-export__row:last-child{margin-bottom:0}.rm-export__label{color:var(--text-secondary);display:block;font-size:11px;font-weight:700;letter-spacing:.06em;margin-bottom:var(--space-8);text-transform:uppercase}.rm-export__sub{margin-top:var(--space-12)}.rm-export__input{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);color:var(--text-primary);font-family:inherit;font-size:13px;padding:var(--space-8) var(--space-12);width:100%}.rm-export__input:focus{border-color:var(--color-primary);box-shadow:var(--shadow-focus);outline:none}.rm-export__checks{display:grid;gap:var(--space-6)}.rm-export__check{align-items:center;color:var(--text-primary);cursor:pointer;display:flex;font-size:12.5px;gap:var(--space-8)}.rm-export__check--off{cursor:not-allowed;opacity:.5}.rm-export__check input[type=checkbox]{accent-color:var(--color-primary);cursor:inherit;height:15px;width:15px}.rm-export__chips{display:flex;flex-wrap:wrap;gap:var(--space-6)}.rm-export__chip{align-items:center;border:1px solid var(--border-default);border-radius:var(--radius-pill);cursor:pointer;display:inline-flex;font-family:inherit;font-size:11.5px;font-weight:600;gap:var(--space-4);padding:3px var(--space-8)}.rm-export__chip--on{background:var(--bg-hover);border-color:var(--color-primary);color:var(--color-primary)}.rm-export__chip--off{background:var(--bg-surface);color:var(--text-muted)}.rm-export__chip--off:hover{border-color:var(--color-secondary);color:var(--color-secondary)}.rm-export__recap{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-xl);margin-top:var(--space-16);padding:var(--space-16)}.rm-export__recap-row{align-items:flex-start;border-bottom:1px solid var(--border-soft);color:var(--color-secondary);display:flex;gap:var(--space-12);padding:var(--space-8) 0}.rm-export__recap-row:last-child{border-bottom:none}.rm-export__recap-row>div{flex:1;min-width:0}.rm-export__recap-k{color:var(--text-muted);font-size:10.5px;font-weight:700;letter-spacing:.08em;margin-bottom:2px;text-transform:uppercase}.rm-export__recap-v{color:var(--text-primary);font-size:13px;font-weight:600;word-break:break-word}.rm-export__footer{align-items:center;border-top:1px solid var(--border-default);display:flex;gap:var(--space-8);margin-top:var(--space-20);padding-top:var(--space-16)}.rm-export__progress{color:var(--text-muted);flex:1;font-size:12px;text-align:center}.rm-export__progress b{color:var(--text-primary)}.rm-export__history{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-xl);
|
|
816
|
+
.rm-export{display:flex;flex-direction:column}.rm-export__tabs{border-bottom:1px solid var(--border-default);display:flex;margin-bottom:var(--space-16)}.rm-export__tab{align-items:center;background:none;border:none;border-bottom:3px solid transparent;color:var(--text-muted);cursor:pointer;display:inline-flex;font-family:inherit;font-size:var(--font-14);font-weight:600;gap:var(--space-6);padding:var(--space-12) var(--space-16)}.rm-export__tab--active{border-bottom-color:var(--color-primary);color:var(--color-secondary)}.rm-export__tab:disabled{cursor:not-allowed;opacity:.5}.rm-export__desc,.rm-export__lead{color:var(--text-secondary);font-size:12.5px;line-height:1.55;margin:0 0 var(--space-16)}.rm-export__eyebrow{align-items:center;color:var(--text-muted);display:flex;font-size:10.5px;font-weight:700;gap:var(--space-6);letter-spacing:.1em;margin:0 0 var(--space-8);text-transform:uppercase}.rm-export__hint{color:var(--text-muted);display:block;font-size:11.5px;line-height:1.45;margin:var(--space-8) 0 0}.rm-export__notice{color:var(--color-success)}.rm-export__error,.rm-export__notice{font-size:12px;margin:var(--space-8) 0 0}.rm-export__error{color:var(--color-danger)}.rm-export__templates{display:grid;gap:var(--space-8)}.rm-export__template{align-items:center;background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-xl);cursor:pointer;display:flex;font-family:inherit;gap:var(--space-12);padding:var(--space-12) var(--space-16);text-align:left;transition:border-color var(--duration-fast),background var(--duration-fast),transform var(--duration-fast)}.rm-export__template:hover{background:var(--bg-hover);border-color:var(--color-secondary);transform:translateY(-1px)}.rm-export__template--custom{background:transparent;border-style:dashed}.rm-export__template-body{display:flex;flex-direction:column;min-width:0}.rm-export__template-name{color:var(--text-primary);font-size:13.5px;font-weight:700;line-height:1.2}.rm-export__template-meta{color:var(--text-muted);font-size:11px;line-height:1.35;margin-top:3px}.rm-export__wizard{background:var(--bg-surface-2);border:1px solid var(--border-default);border-radius:var(--radius-2xl);padding:var(--space-16) var(--space-20)}.rm-export__wizard-head{align-items:center;border-bottom:1px solid var(--border-soft);display:flex;gap:var(--space-12);margin-bottom:var(--space-16);padding-bottom:var(--space-12)}.rm-export__back{align-items:center;background:none;border:none;color:var(--color-secondary);cursor:pointer;display:inline-flex;font-family:inherit;font-size:12px;font-weight:600;gap:var(--space-4);padding:0}.rm-export__back:hover{text-decoration:underline;text-underline-offset:3px}.rm-export__stepper{align-items:center;display:flex;gap:var(--space-4);margin-bottom:var(--space-20)}.rm-export__step{background:none;border:none;border-radius:var(--radius-pill);cursor:pointer;font-family:inherit;gap:var(--space-6);padding:var(--space-4) var(--space-8)}.rm-export__step,.rm-export__step-num{align-items:center;display:inline-flex}.rm-export__step-num{background:var(--bg-surface-3);border:1.5px solid var(--border-default);border-radius:50%;color:var(--text-muted);font-size:12px;font-weight:700;height:22px;justify-content:center;transition:background var(--duration-fast),color var(--duration-fast),border-color var(--duration-fast);width:22px}.rm-export__step-label{color:var(--text-muted);font-size:12px;font-weight:600}.rm-export__step:hover .rm-export__step-label{color:var(--text-primary)}.rm-export__step--active .rm-export__step-num{background:var(--color-primary);border-color:var(--color-primary);box-shadow:var(--shadow-focus);color:#fff}.rm-export__step--active .rm-export__step-label{color:var(--color-secondary)}.rm-export__step--done .rm-export__step-num{background:var(--color-secondary);border-color:var(--color-secondary);color:#fff}.rm-export__step--done .rm-export__step-label{color:var(--text-secondary)}.rm-export__step-divider{background:var(--border-default);border-radius:var(--radius-pill);flex:1;height:1.5px}.rm-export__panel{animation:rm-export-in var(--duration-base) var(--ease-out)}@keyframes rm-export-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.rm-export__formats{display:grid;gap:var(--space-8)}.rm-export__format{align-items:flex-start;background:var(--bg-surface);border:1.5px solid var(--border-default);border-radius:var(--radius-xl);cursor:pointer;display:flex;gap:var(--space-12);padding:var(--space-12) var(--space-16);transition:border-color var(--duration-fast),background var(--duration-fast),transform var(--duration-fast)}.rm-export__format:hover{border-color:var(--color-secondary);transform:translateY(-1px)}.rm-export__format--active{background:var(--bg-hover);border-color:var(--color-primary);box-shadow:var(--shadow-focus)}.rm-export__format--active .rm-export__format-name{color:var(--color-primary)}.rm-export__format--off{cursor:not-allowed;opacity:.55}.rm-export__format--off:hover{border-color:var(--border-default);transform:none}.rm-export__format input[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--bg-surface);border:1.5px solid var(--border-default);border-radius:50%;cursor:inherit;flex-shrink:0;height:18px;margin:1px 0 0;position:relative;width:18px}.rm-export__format input[type=radio]:checked{border-color:var(--color-primary)}.rm-export__format input[type=radio]:checked:after{background:var(--color-primary);border-radius:50%;content:"";inset:3px;position:absolute}.rm-export__format-text{display:flex;flex-direction:column;min-width:0}.rm-export__format-name{color:var(--text-primary);font-size:14px;font-weight:700;line-height:1.2}.rm-export__format-desc{color:var(--text-muted);font-size:11.5px;line-height:1.45;margin-top:3px}.rm-export__format-meta{border-top:1px solid var(--border-soft);color:var(--text-muted);font-size:10px;font-weight:700;letter-spacing:.08em;margin-top:var(--space-8);padding-top:var(--space-8);text-transform:uppercase}.rm-export__row{margin-bottom:var(--space-20)}.rm-export__row:last-child{margin-bottom:0}.rm-export__label{color:var(--text-secondary);display:block;font-size:11px;font-weight:700;letter-spacing:.06em;margin-bottom:var(--space-8);text-transform:uppercase}.rm-export__sub{margin-top:var(--space-12)}.rm-export__input{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md);color:var(--text-primary);font-family:inherit;font-size:13px;padding:var(--space-8) var(--space-12);width:100%}.rm-export__input:focus{border-color:var(--color-primary);box-shadow:var(--shadow-focus);outline:none}.rm-export__checks{display:grid;gap:var(--space-6)}.rm-export__check{align-items:center;color:var(--text-primary);cursor:pointer;display:flex;font-size:12.5px;gap:var(--space-8)}.rm-export__check--off{cursor:not-allowed;opacity:.5}.rm-export__check input[type=checkbox]{accent-color:var(--color-primary);cursor:inherit;height:15px;width:15px}.rm-export__chips{display:flex;flex-wrap:wrap;gap:var(--space-6)}.rm-export__chip{align-items:center;border:1px solid var(--border-default);border-radius:var(--radius-pill);cursor:pointer;display:inline-flex;font-family:inherit;font-size:11.5px;font-weight:600;gap:var(--space-4);padding:3px var(--space-8)}.rm-export__chip--on{background:var(--bg-hover);border-color:var(--color-primary);color:var(--color-primary)}.rm-export__chip--off{background:var(--bg-surface);color:var(--text-muted)}.rm-export__chip--off:hover{border-color:var(--color-secondary);color:var(--color-secondary)}.rm-export__recap{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-xl);margin-top:var(--space-16);padding:var(--space-16)}.rm-export__recap-row{align-items:flex-start;border-bottom:1px solid var(--border-soft);color:var(--color-secondary);display:flex;gap:var(--space-12);padding:var(--space-8) 0}.rm-export__recap-row:last-child{border-bottom:none}.rm-export__recap-row>div{flex:1;min-width:0}.rm-export__recap-k{color:var(--text-muted);font-size:10.5px;font-weight:700;letter-spacing:.08em;margin-bottom:2px;text-transform:uppercase}.rm-export__recap-v{color:var(--text-primary);font-size:13px;font-weight:600;word-break:break-word}.rm-export__footer{align-items:center;border-top:1px solid var(--border-default);display:flex;gap:var(--space-8);margin-top:var(--space-20);padding-top:var(--space-16)}.rm-export__progress{color:var(--text-muted);flex:1;font-size:12px;text-align:center}.rm-export__progress b{color:var(--text-primary)}.rm-export__history{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-xl);padding:var(--space-16)}.rm-export__history-row{align-items:center;color:var(--color-primary);display:flex;gap:var(--space-8);padding:var(--space-6) 0}.rm-export__history-body{display:flex;flex:1;flex-direction:column;min-width:0}.rm-export__history-name{color:var(--text-primary);font-size:12.5px;font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rm-export__history-meta{color:var(--text-muted);font-size:11px}.rm-export__tab-count{background:var(--bg-surface-3);border-radius:var(--radius-pill);color:var(--text-secondary);font-size:10.5px;padding:1px var(--space-6)}
|
|
747
817
|
</style>
|
|
@@ -155,14 +155,30 @@ export interface RmExportTemplate {
|
|
|
155
155
|
color?: string;
|
|
156
156
|
config: Partial<RmExportConfig>;
|
|
157
157
|
}
|
|
158
|
-
/**
|
|
158
|
+
/**
|
|
159
|
+
* Ligne de l'onglet « Mes exports ».
|
|
160
|
+
*
|
|
161
|
+
* Une entree sans `id` est un simple historique : elle se lit, rien de plus.
|
|
162
|
+
* Une entree avec `id` est conservee par l'app, donc rejouable — le panneau
|
|
163
|
+
* emet alors `rerun` / `forget`, et c'est l'app qui sait quoi en faire.
|
|
164
|
+
*/
|
|
159
165
|
export interface RmExportRecent {
|
|
166
|
+
/** Identifiant cote app. Absent : l'entree n'est qu'un historique. */
|
|
167
|
+
id?: string;
|
|
160
168
|
name: string;
|
|
161
169
|
format: string;
|
|
162
170
|
rows?: number;
|
|
163
171
|
size?: string;
|
|
164
172
|
/** Date de l'export, ISO ou Date. */
|
|
165
173
|
at: string | Date;
|
|
174
|
+
/**
|
|
175
|
+
* Ecran d'origine, nomme pour les entrees venues d'ailleurs. Le panneau ne
|
|
176
|
+
* connait qu'une page a la fois : un export tire d'un autre ecran ne peut
|
|
177
|
+
* pas se rejouer ici, il s'y ouvre.
|
|
178
|
+
*/
|
|
179
|
+
pageLabel?: string;
|
|
180
|
+
/** Faux : l'entree vient d'un autre ecran, elle s'ouvre au lieu de partir. */
|
|
181
|
+
runnable?: boolean;
|
|
166
182
|
}
|
|
167
183
|
/**
|
|
168
184
|
* Ce que les generateurs consomment. La page fournit le contenu, le wizard
|