@tekkare/romulus 0.1.109 → 0.1.111
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 +1 -1
- package/dist/runtime/components/CardActions.vue +3 -2
- package/dist/runtime/components/Table.vue +12 -4
- package/dist/runtime/composables/useRmCardActions.d.ts +4 -2
- package/dist/runtime/composables/useRmCardActions.js +1 -1
- package/dist/runtime/utils/cardData.js +1 -1
- package/package.json +1 -1
package/dist/module.json
CHANGED
|
@@ -41,9 +41,10 @@ const props = withDefaults(defineProps<{
|
|
|
41
41
|
* d'une carte se presente comme l'export global de la page.
|
|
42
42
|
*
|
|
43
43
|
* Une fonction est preferable des qu'une liste monte la meme carte vingt
|
|
44
|
-
* fois : elle n'est appelee qu'a l'export.
|
|
44
|
+
* fois : elle n'est appelee qu'a l'export. Elle peut etre asynchrone, le
|
|
45
|
+
* menu affichant « Preparation... » le temps de la requete.
|
|
45
46
|
*/
|
|
46
|
-
payload?: Partial<RmExportPayload> | (() => Partial<RmExportPayload> | null | undefined)
|
|
47
|
+
payload?: Partial<RmExportPayload> | (() => Partial<RmExportPayload> | null | undefined | Promise<Partial<RmExportPayload> | null | undefined>)
|
|
47
48
|
/**
|
|
48
49
|
* Force les items visuels. Non renseigne : ils suivent la presence d'un
|
|
49
50
|
* graphe dans la carte, ce qui est le bon defaut dans les deux sens.
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
tombent pas les unes sous les autres et la colonne ne se compare plus.
|
|
39
39
|
|
|
40
40
|
Les variantes de la reference sont des drapeaux : `compact`, `sticky-header`,
|
|
41
|
-
`selectable`, `expandable`, plus `groupBy` pour les sections et `heat`
|
|
42
|
-
colonne pour la carte de chaleur.
|
|
41
|
+
`selectable`, `expandable`, `flat`, plus `groupBy` pour les sections et `heat`
|
|
42
|
+
par colonne pour la carte de chaleur.
|
|
43
43
|
-->
|
|
44
44
|
<script setup lang="ts">
|
|
45
45
|
import { computed, ref } from 'vue'
|
|
@@ -82,6 +82,13 @@ export interface RmTableProps {
|
|
|
82
82
|
/** Rythme dense : 12px de texte, 6/12 de gouttiere. Pour les longues tables. */
|
|
83
83
|
compact?: boolean
|
|
84
84
|
stickyHeader?: boolean
|
|
85
|
+
/**
|
|
86
|
+
* Sans cadre : ni fond, ni bordure, ni rayon. A poser des que la table vit
|
|
87
|
+
* deja dans une carte, sinon les deux bordures se doublent et les coins
|
|
88
|
+
* arrondis dessinent une seconde carte a l'interieur de la premiere.
|
|
89
|
+
* `RmTableCard` le fait de lui-meme ; une carte maison doit le demander.
|
|
90
|
+
*/
|
|
91
|
+
flat?: boolean
|
|
85
92
|
maxHeight?: string
|
|
86
93
|
loading?: boolean
|
|
87
94
|
emptyText?: string
|
|
@@ -112,6 +119,7 @@ const props = withDefaults(defineProps<RmTableProps>(), {
|
|
|
112
119
|
hoverable: true,
|
|
113
120
|
compact: false,
|
|
114
121
|
stickyHeader: true,
|
|
122
|
+
flat: false,
|
|
115
123
|
maxHeight: '500px',
|
|
116
124
|
loading: false,
|
|
117
125
|
emptyText: 'Aucune donnée',
|
|
@@ -285,7 +293,7 @@ function heatClass(col: RmTableColumn, row: Record<string, any>) {
|
|
|
285
293
|
</script>
|
|
286
294
|
|
|
287
295
|
<template>
|
|
288
|
-
<div class="rm-table-wrapper">
|
|
296
|
+
<div class="rm-table-wrapper" :class="{ 'rm-table-wrapper--flat': flat }">
|
|
289
297
|
<!-- La barre d'actions groupees ne sort qu'a partir d'une ligne retenue :
|
|
290
298
|
posee en permanence, elle occuperait une bande vide en haut de table. -->
|
|
291
299
|
<div v-if="selectable && selected.length > 0" class="rm-table__bulk">
|
|
@@ -479,5 +487,5 @@ function heatClass(col: RmTableColumn, row: Record<string, any>) {
|
|
|
479
487
|
</template>
|
|
480
488
|
|
|
481
489
|
<style scoped>
|
|
482
|
-
.rm-table-wrapper{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md,8px);flex:1;overflow:hidden}.rm-table__scroll{overflow:auto}.rm-table{border-collapse:collapse;font-size:var(--font-13,13px);width:100%}.rm-sr-only{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0;white-space:nowrap}.rm-table caption{caption-side:top;color:var(--text-primary);font-size:var(--font-13,13px);font-weight:700;padding:0 0 var(--space-8,var(--space-8));text-align:left}.rm-table__th{background:var(--bg-surface-2);border-bottom:1px solid var(--border-default);color:var(--text-secondary);font-size:var(--font-11,11px);font-weight:700;letter-spacing:.08em;padding:var(--space-12) 14px;text-align:left;text-transform:uppercase;white-space:nowrap}.rm-table--sticky .rm-table__th{border-bottom:none;box-shadow:inset 0 -1px 0 var(--border-default);position:sticky;top:0;z-index:2}.rm-table__th--center{text-align:center}.rm-table__th--num,.rm-table__th--right{text-align:right}.rm-table__th--check,.rm-table__th--expand{padding-right:0;width:36px}.rm-table__sort{align-items:center;background:none;border:none;color:inherit;cursor:pointer;display:inline-flex;font:inherit;gap:var(--space-6,var(--space-6));letter-spacing:inherit;padding:0;text-transform:inherit}.rm-table__sort:hover{color:var(--text-primary)}.rm-table__sort:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid var(--text-muted);content:"";display:inline-block;height:0;opacity:.5;vertical-align:middle;width:0}.rm-table__th[aria-sort=ascending] .rm-table__sort:after{border-bottom:5px solid var(--color-primary);border-top:none;opacity:1}.rm-table__th[aria-sort=descending] .rm-table__sort:after{border-top:5px solid var(--color-primary);opacity:1}.rm-table a:focus-visible,.rm-table button:focus-visible{border-radius:var(--radius-sm,4px);outline:2px solid var(--color-primary);outline-offset:2px}.rm-table__td{border-bottom:1px solid var(--border-soft);color:var(--text-primary);padding:var(--space-12) 14px;text-align:left;vertical-align:top}th.rm-table__td{background:transparent;font-weight:700;letter-spacing:0;text-transform:none}.rm-table__td--center{text-align:center}.rm-table__td--right{text-align:right}.rm-table__td--num{font-variant-numeric:tabular-nums;text-align:right}.rm-table__td--check,.rm-table__td--expand{color:var(--text-muted);padding-right:0;width:36px}.rm-table__row--striped>.rm-table__td{background:var(--bg-surface-2)}.rm-table--hoverable .rm-table__row:hover>.rm-table__td,.rm-table__row--selected>.rm-table__td{background:var(--bg-hover)}.rm-table__row--expandable{cursor:pointer}.rm-table__caret{display:inline-flex;transition:transform .16s var(--ease-out,ease)}.rm-table__caret.is-open{color:var(--color-primary);transform:rotate(90deg)}.rm-table__group>th{background:var(--bg-hover);color:var(--color-primary);font-size:var(--font-11,11px);font-weight:700;letter-spacing:.08em;padding:var(--space-8,var(--space-8)) var(--space-12,var(--space-12));text-align:left;text-transform:uppercase}.rm-table__detail>td{background:var(--bg-surface-2);border-bottom:1px solid var(--border-soft);padding:0}.rm-table__detail-body{color:var(--text-secondary);font-size:var(--font-12,12px);line-height:1.6;padding:var(--space-12,var(--space-12)) var(--space-20,var(--space-20))}.rm-table__td--heat-1{background:#fee5e5!important;color:#911616}.rm-table__td--heat-2{background:#ffe7d2!important;color:#8a4309}.rm-table__td--heat-3{background:#fff6cc!important;color:#6b5400}.rm-table__td--heat-4{background:#d8f3dc!important;color:#1b5e25}.rm-table__td--heat-5{background:#b7e4c7!important;color:#0e4b19}body.night .rm-table__td--heat-1{background:#3f1414!important;color:#ffb4b4}body.night .rm-table__td--heat-2{background:#3d2410!important;color:#ffc58a}body.night .rm-table__td--heat-3{background:#3a3210!important;color:#ffe07a}body.night .rm-table__td--heat-4{background:#18351f!important;color:#8ae0a4}body.night .rm-table__td--heat-5{background:#0f4019!important;color:#b4f0c2}.rm-table--compact .rm-table__td,.rm-table--compact .rm-table__th{font-size:var(--font-12,12px);padding:var(--space-6,var(--space-6)) var(--space-12,var(--space-12))}.rm-table--compact .rm-table__th{font-size:var(--font-10,10px)}.rm-table__bulk{align-items:center;background:var(--bg-hover);border-bottom:1px solid var(--color-violet-pale);display:flex;font-size:var(--font-12,12px);justify-content:space-between;padding:var(--space-8,var(--space-8)) var(--space-16,var(--space-16))}.rm-table__bulk-count b{color:var(--color-primary)}.rm-table__bulk-actions{display:flex;gap:var(--space-4,var(--space-4))}.rm-table__pager{align-items:center;background:var(--bg-surface);border-top:1px solid var(--border-default);display:flex;font-size:var(--font-12,12px);gap:var(--space-12,var(--space-12));justify-content:space-between;padding:var(--space-8,var(--space-8)) var(--space-12,var(--space-12))}.rm-table__pager-count{color:var(--text-secondary);font-variant-numeric:tabular-nums}.rm-table__pager-controls{align-items:center;display:flex;gap:var(--space-4,var(--space-4))}.rm-table__pager-page{background:none;border:1px solid transparent;border-radius:var(--radius-sm,6px);color:var(--text-secondary);cursor:pointer;font:inherit;font-variant-numeric:tabular-nums;height:28px;min-width:28px;padding:0 var(--space-6)}.rm-table__pager-page:hover{background:var(--bg-hover);color:var(--color-secondary)}.rm-table__pager-page.is-current{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-text-inverse)}.rm-table__pager-gap{color:var(--text-muted);padding:0 var(--space-2)}.rm-table__empty{color:var(--text-muted);padding:var(--space-32) var(--space-16);text-align:center}.rm-table__skeleton{height:14px;width:80%}
|
|
490
|
+
.rm-table-wrapper{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:var(--radius-md,8px);flex:1;overflow:hidden}.rm-table-wrapper--flat{background:transparent;border:none;border-radius:0}.rm-table__scroll{overflow:auto}.rm-table{border-collapse:collapse;font-size:var(--font-13,13px);width:100%}.rm-sr-only{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0;white-space:nowrap}.rm-table caption{caption-side:top;color:var(--text-primary);font-size:var(--font-13,13px);font-weight:700;padding:0 0 var(--space-8,var(--space-8));text-align:left}.rm-table__th{background:var(--bg-surface-2);border-bottom:1px solid var(--border-default);color:var(--text-secondary);font-size:var(--font-11,11px);font-weight:700;letter-spacing:.08em;padding:var(--space-12) 14px;text-align:left;text-transform:uppercase;white-space:nowrap}.rm-table--sticky .rm-table__th{border-bottom:none;box-shadow:inset 0 -1px 0 var(--border-default);position:sticky;top:0;z-index:2}.rm-table__th--center{text-align:center}.rm-table__th--num,.rm-table__th--right{text-align:right}.rm-table__th--check,.rm-table__th--expand{padding-right:0;width:36px}.rm-table__sort{align-items:center;background:none;border:none;color:inherit;cursor:pointer;display:inline-flex;font:inherit;gap:var(--space-6,var(--space-6));letter-spacing:inherit;padding:0;text-transform:inherit}.rm-table__sort:hover{color:var(--text-primary)}.rm-table__sort:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid var(--text-muted);content:"";display:inline-block;height:0;opacity:.5;vertical-align:middle;width:0}.rm-table__th[aria-sort=ascending] .rm-table__sort:after{border-bottom:5px solid var(--color-primary);border-top:none;opacity:1}.rm-table__th[aria-sort=descending] .rm-table__sort:after{border-top:5px solid var(--color-primary);opacity:1}.rm-table a:focus-visible,.rm-table button:focus-visible{border-radius:var(--radius-sm,4px);outline:2px solid var(--color-primary);outline-offset:2px}.rm-table__td{border-bottom:1px solid var(--border-soft);color:var(--text-primary);padding:var(--space-12) 14px;text-align:left;vertical-align:top}th.rm-table__td{background:transparent;font-weight:700;letter-spacing:0;text-transform:none}.rm-table__td--center{text-align:center}.rm-table__td--right{text-align:right}.rm-table__td--num{font-variant-numeric:tabular-nums;text-align:right}.rm-table__td--check,.rm-table__td--expand{color:var(--text-muted);padding-right:0;width:36px}.rm-table__row--striped>.rm-table__td{background:var(--bg-surface-2)}.rm-table--hoverable .rm-table__row:hover>.rm-table__td,.rm-table__row--selected>.rm-table__td{background:var(--bg-hover)}.rm-table__row--expandable{cursor:pointer}.rm-table__caret{display:inline-flex;transition:transform .16s var(--ease-out,ease)}.rm-table__caret.is-open{color:var(--color-primary);transform:rotate(90deg)}.rm-table__group>th{background:var(--bg-hover);color:var(--color-primary);font-size:var(--font-11,11px);font-weight:700;letter-spacing:.08em;padding:var(--space-8,var(--space-8)) var(--space-12,var(--space-12));text-align:left;text-transform:uppercase}.rm-table__detail>td{background:var(--bg-surface-2);border-bottom:1px solid var(--border-soft);padding:0}.rm-table__detail-body{color:var(--text-secondary);font-size:var(--font-12,12px);line-height:1.6;padding:var(--space-12,var(--space-12)) var(--space-20,var(--space-20))}.rm-table__td--heat-1{background:#fee5e5!important;color:#911616}.rm-table__td--heat-2{background:#ffe7d2!important;color:#8a4309}.rm-table__td--heat-3{background:#fff6cc!important;color:#6b5400}.rm-table__td--heat-4{background:#d8f3dc!important;color:#1b5e25}.rm-table__td--heat-5{background:#b7e4c7!important;color:#0e4b19}body.night .rm-table__td--heat-1{background:#3f1414!important;color:#ffb4b4}body.night .rm-table__td--heat-2{background:#3d2410!important;color:#ffc58a}body.night .rm-table__td--heat-3{background:#3a3210!important;color:#ffe07a}body.night .rm-table__td--heat-4{background:#18351f!important;color:#8ae0a4}body.night .rm-table__td--heat-5{background:#0f4019!important;color:#b4f0c2}.rm-table--compact .rm-table__td,.rm-table--compact .rm-table__th{font-size:var(--font-12,12px);padding:var(--space-6,var(--space-6)) var(--space-12,var(--space-12))}.rm-table--compact .rm-table__th{font-size:var(--font-10,10px)}.rm-table__bulk{align-items:center;background:var(--bg-hover);border-bottom:1px solid var(--color-violet-pale);display:flex;font-size:var(--font-12,12px);justify-content:space-between;padding:var(--space-8,var(--space-8)) var(--space-16,var(--space-16))}.rm-table__bulk-count b{color:var(--color-primary)}.rm-table__bulk-actions{display:flex;gap:var(--space-4,var(--space-4))}.rm-table__pager{align-items:center;background:var(--bg-surface);border-top:1px solid var(--border-default);display:flex;font-size:var(--font-12,12px);gap:var(--space-12,var(--space-12));justify-content:space-between;padding:var(--space-8,var(--space-8)) var(--space-12,var(--space-12))}.rm-table__pager-count{color:var(--text-secondary);font-variant-numeric:tabular-nums}.rm-table__pager-controls{align-items:center;display:flex;gap:var(--space-4,var(--space-4))}.rm-table__pager-page{background:none;border:1px solid transparent;border-radius:var(--radius-sm,6px);color:var(--text-secondary);cursor:pointer;font:inherit;font-variant-numeric:tabular-nums;height:28px;min-width:28px;padding:0 var(--space-6)}.rm-table__pager-page:hover{background:var(--bg-hover);color:var(--color-secondary)}.rm-table__pager-page.is-current{background:var(--color-primary);border-color:var(--color-primary);color:var(--color-text-inverse)}.rm-table__pager-gap{color:var(--text-muted);padding:0 var(--space-2)}.rm-table__empty{color:var(--text-muted);padding:var(--space-32) var(--space-16);text-align:center}.rm-table__skeleton{height:14px;width:80%}
|
|
483
491
|
</style>
|
|
@@ -31,9 +31,11 @@ export interface RmCardActionContext {
|
|
|
31
31
|
*
|
|
32
32
|
* Une fonction est preferable des qu'une liste monte la meme carte vingt
|
|
33
33
|
* fois : elle n'est appelee qu'a l'export, alors qu'un objet lie en prop est
|
|
34
|
-
* recalcule a chaque rendu de chaque carte.
|
|
34
|
+
* recalcule a chaque rendu de chaque carte. Elle peut etre asynchrone : la
|
|
35
|
+
* donnee complete d'une carte demande parfois une requete, que seul
|
|
36
|
+
* l'export justifie de lancer.
|
|
35
37
|
*/
|
|
36
|
-
payload?: RmCardPayload | (() => RmCardPayload | null | undefined);
|
|
38
|
+
payload?: RmCardPayload | (() => RmCardPayload | null | undefined | Promise<RmCardPayload | null | undefined>);
|
|
37
39
|
}
|
|
38
40
|
export declare function useRmCardActions(): {
|
|
39
41
|
runCardAction: (action: RmCardAction, context: RmCardActionContext) => Promise<import("./useRmExport").RmExportResult>;
|
|
@@ -41,7 +41,7 @@ export function useRmCardActions() {
|
|
|
41
41
|
const { run } = useRmExport();
|
|
42
42
|
async function runCardAction(action, context) {
|
|
43
43
|
const { card, lang = "fr" } = context;
|
|
44
|
-
const provided = (typeof context.payload === "function" ? context.payload() : context.payload) ?? {};
|
|
44
|
+
const provided = await (typeof context.payload === "function" ? context.payload() : context.payload) ?? {};
|
|
45
45
|
const title = context.name || provided.title || rmCardTitle(card) || "Export";
|
|
46
46
|
const format = action === "link" ? "link" : action;
|
|
47
47
|
const sheets = action === "png" || action === "svg" ? [] : provided.sheets?.length ? provided.sheets : await rmCardSheets(card, title, lang);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const CARD_SELECTOR = ".chart-card, .rm-table-card, .rm-rcard";
|
|
1
|
+
const CARD_SELECTOR = ".chart-card, .rm-table-card, .rm-rcard, .rm-card";
|
|
2
2
|
const CHART_SELECTOR = ".rm-chart .echart";
|
|
3
3
|
const WORDS = {
|
|
4
4
|
fr: { label: "Libell\xE9", value: "Valeur", series: "S\xE9rie", table: "Tableau", field: "Champ", chart: "Graphique", title: "Intitul\xE9", subtitle: "Compl\xE9ment", source: "Provenance" },
|