@tekkare/romulus 0.1.10 → 0.1.12
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
|
@@ -1 +1 @@
|
|
|
1
|
-
.grid-2{grid-template-columns:repeat(2,1fr)}.grid-2,.grid-3{display:grid;gap:20px}.grid-3{grid-template-columns:repeat(3,1fr)}.grid-4{display:grid;gap:16px;grid-template-columns:repeat(4,1fr)}.grid-2-1{display:grid;gap:20px;grid-template-columns:2fr 1fr}.chart-card{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:10px;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;transition:box-shadow .18s,border-color .18s}.chart-card:hover{border-color:var(--color-violet-pale);box-shadow:0 6px 16px rgba(107,63,255,.1),0 1px 3px rgba(30,41,59,.04)}.chart-card-head{padding:22px 64px 14px 24px;position:relative}.chart-card-title{color:var(--text-primary);font-size:15px;font-weight:700;letter-spacing:-.01em;line-height:1.3;margin:0 0 5px}.chart-card-context{color:var(--text-muted);font-size:12px;line-height:1.55;margin:0}.chart-card-actions{position:absolute;right:12px;top:12px}.cc-export{align-items:center;background:var(--bg-surface);border:1px solid var(--border-default);border-radius:6px;color:var(--text-secondary);cursor:pointer;display:flex;font-size:14px;height:28px;justify-content:center;transition:background .15s,color .15s,border-color .15s;width:28px}.cc-export:hover{color:var(--color-secondary)}.cc-export:hover,.chart-card-actions.open .cc-export{background:var(--bg-hover);border-color:var(--color-violet-pale)}.chart-card-actions.open .cc-export{color:var(--color-primary)}.cc-menu{animation:cc-menu-in .12s cubic-bezier(.2,0,0,1);background:var(--bg-surface);border:1px solid var(--border-default);border-radius:8px;box-shadow:var(--shadow-lg);display:none;min-width:200px;padding:6px 0;position:absolute;right:0;top:34px;z-index:var(--z-modal)}.chart-card-actions.open .cc-menu{display:block}.cc-menu-section{color:var(--text-muted);font-size:10px;font-weight:700;letter-spacing:.08em;padding:8px 14px 4px;text-transform:uppercase}.cc-menu-item{align-items:center;background:none;border:0;color:var(--text-secondary);cursor:pointer;display:flex;font-family:var(--font-sans);font-size:13px;gap:10px;padding:7px 14px;text-align:left;width:100%}.cc-menu-item i{color:var(--text-muted);font-size:14px}.cc-menu-item:hover{background:var(--bg-surface-3);color:var(--text-primary)}.cc-menu-item:hover i{color:var(--text-secondary)}.cc-menu-divider{background:var(--bg-surface-3);height:1px;margin:4px 0}@keyframes cc-menu-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.chart-card-body{flex:1;padding:4px 12px 8px}.chart-card-foot{align-items:center;background:var(--bg-surface-2);border-radius:0 0 10px 10px;border-top:1px solid var(--border-soft);color:var(--text-muted);display:flex;flex-wrap:wrap;font-size:11px;gap:10px;padding:12px 24px}.chart-card-foot .src{align-items:center;display:flex;gap:4px}.chart-card-foot .src b{color:var(--text-secondary);font-weight:600}.chart-card-foot .dot{background:var(--border-default);border-radius:50%;height:3px;width:3px}.chart-card-foot .updated{color:var(--text-secondary);font-weight:500}.kpi-card{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:8px;box-shadow:0 2px 8px rgba(30,41,59,.06);padding:16px 18px}.kpi-label{color:var(--text-muted);font-size:11px;font-weight:600;letter-spacing:.1em;margin:0 0 6px;text-transform:uppercase}.kpi-value{color:var(--color-primary);font-family:var(--font-serif);font-size:28px;font-weight:700;line-height:1;margin:0}.kpi-value.healthcare{color:var(--color-healthcare)}.kpi-value.discovery{color:var(--color-discovery)}.kpi-value.pharma{color:var(--color-pharma)}.kpi-value.databank{color:var(--color-databank)}.kpi-trend{align-items:center;display:inline-flex;font-size:12px;font-weight:600;gap:4px;margin-top:6px}.kpi-trend i{font-size:11px}.kpi-trend--up{color:var(--color-success)}.kpi-trend--down{color:var(--color-danger)}.kpi-foot,.kpi-trend--flat{color:var(--text-muted)}.kpi-foot{font-size:11px;margin-top:4px}.badge{border-radius:4px;display:inline-block;font-size:10px;font-weight:600;padding:2px 8px}.badge-active{background:var(--color-success-bg);color:var(--color-success)}.badge-pending{background:var(--color-warning-bg);color:var(--color-warning)}.badge-error{background:var(--color-danger-bg);color:var(--color-danger)}.badge-info{background:var(--bg-hover);color:var(--color-primary)}.badge-grey{background:var(--bg-surface-3);color:var(--text-secondary)}table.tk{border-collapse:collapse;font-size:13px;width:100%}.sr-only,table.tk>caption.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}table.tk caption{caption-side:top;color:var(--text-primary);font-size:var(--font-13);font-weight:var(--weight-bold);padding:0 0 var(--space-8);text-align:left}table.tk th{background:var(--bg-surface-2);border-bottom:1px solid var(--border-default);color:var(--text-secondary);font-size:11px;font-weight:700;letter-spacing:.08em;padding:12px 14px;text-align:left;text-transform:uppercase}table.tk tbody th[scope=row]{background:transparent;font-size:var(--font-13);font-weight:var(--weight-bold);letter-spacing:0;text-transform:none}table.tk tbody th[scope=row],table.tk td{border-bottom:1px solid var(--border-soft);color:var(--text-primary)}table.tk td{padding:12px 14px}table.tk tbody tr:nth-child(2n) td,table.tk tbody tr:nth-child(2n) th[scope=row]{background:var(--bg-surface-2)}table.tk tbody tr:hover td,table.tk tbody tr:hover th[scope=row]{background:var(--bg-hover)}table.tk th[aria-sort]{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}table.tk th[aria-sort]:hover{color:var(--text-primary)}.tk-wrap{overflow-x:auto}.tk-num{font-variant-numeric:tabular-nums;text-align:right}.nav-group{display:flex;flex-direction:column}.nav-group-header{align-items:center;background:none;border:0;color:var(--text-muted);cursor:pointer;display:flex;font-family:var(--font-sans);font-size:11px;font-weight:700;gap:8px;letter-spacing:.08em;padding:8px 12px;text-align:left;text-transform:uppercase;transition:color var(--duration-fast) var(--ease-out);width:100%}.nav-group-header:hover{color:var(--text-secondary)}.nav-group-header .caret{display:inline-flex;margin-left:auto;transition:transform var(--duration-fast) var(--ease-out)}.nav-group[data-open=true]>.nav-group-header{color:var(--color-primary)}.nav-group[data-open=true]>.nav-group-header .caret{transform:rotate(180deg)}.nav-group-items{display:flex;flex-direction:column;gap:2px;padding:2px 0 8px}.cc-export:focus-visible,.cc-menu-item:focus-visible,.chart-card :focus-visible,.nav-group-header:focus-visible,table.tk th[aria-sort]:focus-visible{box-shadow:var(--shadow-focus);outline:2px solid var(--color-secondary);outline-offset:2px}.cc-menu-item,.nav-group-header{min-height:40px}body.text-large .kpi-label{font-size:13px}body.text-large .kpi-value{font-size:34px}body.text-large .kpi-trend{font-size:14px}body.text-large .kpi-foot{font-size:13px}body.text-large .chart-card-title{font-size:17px}body.text-large .chart-card-context{font-size:14px}body.text-large .chart-card-foot{font-size:12px}body.text-large .badge{font-size:12px;padding:3px 9px}body.text-large table.tk{font-size:15px}body.text-large table.tk th{font-size:13px}body.text-xl .kpi-label{font-size:14px}body.text-xl .kpi-value{font-size:40px}body.text-xl .kpi-trend{font-size:16px}body.text-xl .kpi-foot{font-size:14px}body.text-xl .chart-card-title{font-size:20px}body.text-xl .chart-card-context{font-size:16px}body.text-xl .chart-card-foot{font-size:14px}body.text-xl .badge{font-size:14px;padding:3px 10px}body.text-xl table.tk{font-size:16px}body.text-xl table.tk th{font-size:14px}body.high-contrast .cc-export,body.high-contrast .cc-menu,body.high-contrast .chart-card,body.high-contrast .kpi-card{border-width:2px}body.high-contrast .chart-card:hover{border-color:var(--border-default)}body.theme-switching,body.theme-switching *,body.theme-switching :after,body.theme-switching :before{transition:none!important}body.high-contrast *{box-shadow:none!important}
|
|
1
|
+
.grid-2{grid-template-columns:repeat(2,1fr)}.grid-2,.grid-3{display:grid;gap:20px}.grid-3{grid-template-columns:repeat(3,1fr)}.grid-4{display:grid;gap:16px;grid-template-columns:repeat(4,1fr)}.grid-2-1{display:grid;gap:20px;grid-template-columns:2fr 1fr}.pane-title{color:var(--text-primary);font-family:var(--font-serif);font-size:32px;font-weight:700;letter-spacing:-.02em;line-height:1.1;margin:0 0 16px}.pane-sub{color:var(--text-muted);font-size:13px;line-height:1.55;margin:0 0 24px;max-width:78ch}.chart-section{margin-inline:auto;max-width:var(--content-max-w,1440px);padding:0 0 40px;width:100%}.section-label{align-items:center;color:var(--text-secondary);display:flex;font-size:11px;font-weight:700;gap:8px;letter-spacing:.12em;margin:40px 0 18px;text-transform:uppercase}body.text-large .pane-title{font-size:38px}body.text-xl .pane-title{font-size:46px}body.text-large .section-label{font-size:13px}body.text-xl .section-label{font-size:14px}.chart-card{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:10px;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;transition:box-shadow .18s,border-color .18s}.chart-card:hover{border-color:var(--color-violet-pale);box-shadow:0 6px 16px rgba(107,63,255,.1),0 1px 3px rgba(30,41,59,.04)}.chart-card-head{padding:22px 64px 14px 24px;position:relative}.chart-card-title{color:var(--text-primary);font-size:15px;font-weight:700;letter-spacing:-.01em;line-height:1.3;margin:0 0 5px}.chart-card-context{color:var(--text-muted);font-size:12px;line-height:1.55;margin:0}.chart-card-actions{position:absolute;right:12px;top:12px}.cc-export{align-items:center;background:var(--bg-surface);border:1px solid var(--border-default);border-radius:6px;color:var(--text-secondary);cursor:pointer;display:flex;font-size:14px;height:28px;justify-content:center;transition:background .15s,color .15s,border-color .15s;width:28px}.cc-export:hover{color:var(--color-secondary)}.cc-export:hover,.chart-card-actions.open .cc-export{background:var(--bg-hover);border-color:var(--color-violet-pale)}.chart-card-actions.open .cc-export{color:var(--color-primary)}.cc-menu{animation:cc-menu-in .12s cubic-bezier(.2,0,0,1);background:var(--bg-surface);border:1px solid var(--border-default);border-radius:8px;box-shadow:var(--shadow-lg);display:none;min-width:200px;padding:6px 0;position:absolute;right:0;top:34px;z-index:var(--z-modal)}.chart-card-actions.open .cc-menu{display:block}.cc-menu-section{color:var(--text-muted);font-size:10px;font-weight:700;letter-spacing:.08em;padding:8px 14px 4px;text-transform:uppercase}.cc-menu-item{align-items:center;background:none;border:0;color:var(--text-secondary);cursor:pointer;display:flex;font-family:var(--font-sans);font-size:13px;gap:10px;padding:7px 14px;text-align:left;width:100%}.cc-menu-item i{color:var(--text-muted);font-size:14px}.cc-menu-item:hover{background:var(--bg-surface-3);color:var(--text-primary)}.cc-menu-item:hover i{color:var(--text-secondary)}.cc-menu-divider{background:var(--bg-surface-3);height:1px;margin:4px 0}@keyframes cc-menu-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.chart-card-body{flex:1;padding:4px 12px 8px}.chart-card-foot{align-items:center;background:var(--bg-surface-2);border-radius:0 0 10px 10px;border-top:1px solid var(--border-soft);color:var(--text-muted);display:flex;flex-wrap:wrap;font-size:11px;gap:10px;padding:12px 24px}.chart-card-foot .src{align-items:center;display:flex;gap:4px}.chart-card-foot .src b{color:var(--text-secondary);font-weight:600}.chart-card-foot .dot{background:var(--border-default);border-radius:50%;height:3px;width:3px}.chart-card-foot .updated{color:var(--text-secondary);font-weight:500}.kpi-card{background:var(--bg-surface);border:1px solid var(--border-default);border-radius:8px;box-shadow:0 2px 8px rgba(30,41,59,.06);padding:16px 18px}.kpi-label{color:var(--text-muted);font-size:11px;font-weight:600;letter-spacing:.1em;margin:0 0 6px;text-transform:uppercase}.kpi-value{color:var(--color-primary);font-family:var(--font-serif);font-size:28px;font-weight:700;line-height:1;margin:0}.kpi-value.healthcare{color:var(--color-healthcare)}.kpi-value.discovery{color:var(--color-discovery)}.kpi-value.pharma{color:var(--color-pharma)}.kpi-value.databank{color:var(--color-databank)}.kpi-trend{align-items:center;display:inline-flex;font-size:12px;font-weight:600;gap:4px;margin-top:6px}.kpi-trend i{font-size:11px}.kpi-trend--up{color:var(--color-success)}.kpi-trend--down{color:var(--color-danger)}.kpi-foot,.kpi-trend--flat{color:var(--text-muted)}.kpi-foot{font-size:11px;margin-top:4px}.badge{border-radius:4px;display:inline-block;font-size:10px;font-weight:600;padding:2px 8px}.badge-active{background:var(--color-success-bg);color:var(--color-success)}.badge-pending{background:var(--color-warning-bg);color:var(--color-warning)}.badge-error{background:var(--color-danger-bg);color:var(--color-danger)}.badge-info{background:var(--bg-hover);color:var(--color-primary)}.badge-grey{background:var(--bg-surface-3);color:var(--text-secondary)}table.tk{border-collapse:collapse;font-size:13px;width:100%}.sr-only,table.tk>caption.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}table.tk caption{caption-side:top;color:var(--text-primary);font-size:var(--font-13);font-weight:var(--weight-bold);padding:0 0 var(--space-8);text-align:left}table.tk th{background:var(--bg-surface-2);border-bottom:1px solid var(--border-default);color:var(--text-secondary);font-size:11px;font-weight:700;letter-spacing:.08em;padding:12px 14px;text-align:left;text-transform:uppercase}table.tk tbody th[scope=row]{background:transparent;font-size:var(--font-13);font-weight:var(--weight-bold);letter-spacing:0;text-transform:none}table.tk tbody th[scope=row],table.tk td{border-bottom:1px solid var(--border-soft);color:var(--text-primary)}table.tk td{padding:12px 14px}table.tk tbody tr:nth-child(2n) td,table.tk tbody tr:nth-child(2n) th[scope=row]{background:var(--bg-surface-2)}table.tk tbody tr:hover td,table.tk tbody tr:hover th[scope=row]{background:var(--bg-hover)}table.tk th[aria-sort]{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}table.tk th[aria-sort]:hover{color:var(--text-primary)}.tk-wrap{overflow-x:auto}.tk-num{font-variant-numeric:tabular-nums;text-align:right}.nav-group{display:flex;flex-direction:column}.nav-group-header{align-items:center;background:none;border:0;color:var(--text-muted);cursor:pointer;display:flex;font-family:var(--font-sans);font-size:11px;font-weight:700;gap:8px;letter-spacing:.08em;padding:8px 12px;text-align:left;text-transform:uppercase;transition:color var(--duration-fast) var(--ease-out);width:100%}.nav-group-header:hover{color:var(--text-secondary)}.nav-group-header .caret{display:inline-flex;margin-left:auto;transition:transform var(--duration-fast) var(--ease-out)}.nav-group[data-open=true]>.nav-group-header{color:var(--color-primary)}.nav-group[data-open=true]>.nav-group-header .caret{transform:rotate(180deg)}.nav-group-items{display:flex;flex-direction:column;gap:2px;padding:2px 0 8px}.cc-export:focus-visible,.cc-menu-item:focus-visible,.chart-card :focus-visible,.nav-group-header:focus-visible,table.tk th[aria-sort]:focus-visible{box-shadow:var(--shadow-focus);outline:2px solid var(--color-secondary);outline-offset:2px}.cc-menu-item,.nav-group-header{min-height:40px}body.text-large .kpi-label{font-size:13px}body.text-large .kpi-value{font-size:34px}body.text-large .kpi-trend{font-size:14px}body.text-large .kpi-foot{font-size:13px}body.text-large .chart-card-title{font-size:17px}body.text-large .chart-card-context{font-size:14px}body.text-large .chart-card-foot{font-size:12px}body.text-large .badge{font-size:12px;padding:3px 9px}body.text-large table.tk{font-size:15px}body.text-large table.tk th{font-size:13px}body.text-xl .kpi-label{font-size:14px}body.text-xl .kpi-value{font-size:40px}body.text-xl .kpi-trend{font-size:16px}body.text-xl .kpi-foot{font-size:14px}body.text-xl .chart-card-title{font-size:20px}body.text-xl .chart-card-context{font-size:16px}body.text-xl .chart-card-foot{font-size:14px}body.text-xl .badge{font-size:14px;padding:3px 10px}body.text-xl table.tk{font-size:16px}body.text-xl table.tk th{font-size:14px}body.high-contrast .cc-export,body.high-contrast .cc-menu,body.high-contrast .chart-card,body.high-contrast .kpi-card{border-width:2px}body.high-contrast .chart-card:hover{border-color:var(--border-default)}body.theme-switching,body.theme-switching *,body.theme-switching :after,body.theme-switching :before{transition:none!important}body.high-contrast *{box-shadow:none!important}
|
|
@@ -15,12 +15,18 @@ const props = withDefaults(defineProps<{
|
|
|
15
15
|
/** Marche d'escalier : prix, taux de remboursement, decisions datees. */
|
|
16
16
|
step?: boolean
|
|
17
17
|
smooth?: boolean
|
|
18
|
+
/**
|
|
19
|
+
* Libelles des axes gauche et droit. A fournir des qu'une serie porte
|
|
20
|
+
* `axis: 1` : deux unites sur un graphe sans libelle d'axe se lisent mal.
|
|
21
|
+
*/
|
|
22
|
+
axisLabels?: [string, string]
|
|
18
23
|
height?: keyof typeof RM_CHART_HEIGHTS | number
|
|
19
24
|
description?: string
|
|
20
25
|
}>(), {
|
|
21
26
|
area: false,
|
|
22
27
|
step: false,
|
|
23
28
|
smooth: true,
|
|
29
|
+
axisLabels: undefined,
|
|
24
30
|
height: 'standard',
|
|
25
31
|
description: undefined,
|
|
26
32
|
})
|
|
@@ -33,6 +39,7 @@ const option = computed(() =>
|
|
|
33
39
|
step: props.step,
|
|
34
40
|
smooth: props.smooth,
|
|
35
41
|
decal: decal.value,
|
|
42
|
+
axisLabels: props.axisLabels,
|
|
36
43
|
}),
|
|
37
44
|
)
|
|
38
45
|
</script>
|
|
@@ -100,6 +100,13 @@ export interface RmSeriesInput {
|
|
|
100
100
|
color?: string;
|
|
101
101
|
/** Cle d'empilement : deux series avec la meme cle s'empilent. */
|
|
102
102
|
stack?: string;
|
|
103
|
+
/**
|
|
104
|
+
* Axe des ordonnees, 0 a gauche et 1 a droite. A n'utiliser que pour deux
|
|
105
|
+
* series d'UNITES differentes : deux axes sur la meme unite laissent croire
|
|
106
|
+
* a un ecart qui n'existe pas. Le libelle de chaque axe est alors
|
|
107
|
+
* obligatoire, sinon le lecteur ne sait pas quelle courbe lire ou.
|
|
108
|
+
*/
|
|
109
|
+
axis?: 0 | 1;
|
|
103
110
|
}
|
|
104
111
|
/** Bar chart vertical, une ou plusieurs series, empilable. */
|
|
105
112
|
export declare function rmBarVerticalOption(categories: (string | number)[], series: RmSeriesInput[], theme: RmChartTheme, palette: string[], decal?: boolean): {
|
|
@@ -279,6 +286,8 @@ export declare function rmLineOption(categories: (string | number)[], series: Rm
|
|
|
279
286
|
step?: boolean;
|
|
280
287
|
smooth?: boolean;
|
|
281
288
|
decal?: boolean;
|
|
289
|
+
/** Libelles des deux axes, requis des qu'une serie porte `axis: 1`. */
|
|
290
|
+
axisLabels?: [string, string];
|
|
282
291
|
}): {
|
|
283
292
|
legend: {
|
|
284
293
|
top: number;
|
|
@@ -288,6 +297,13 @@ export declare function rmLineOption(categories: (string | number)[], series: Rm
|
|
|
288
297
|
fontFamily: string;
|
|
289
298
|
};
|
|
290
299
|
} | undefined;
|
|
300
|
+
grid: {
|
|
301
|
+
left: number;
|
|
302
|
+
right: number;
|
|
303
|
+
top: number;
|
|
304
|
+
bottom: number;
|
|
305
|
+
containLabel: boolean;
|
|
306
|
+
};
|
|
291
307
|
xAxis: {
|
|
292
308
|
splitLine: {
|
|
293
309
|
show: boolean;
|
|
@@ -307,6 +323,16 @@ export declare function rmLineOption(categories: (string | number)[], series: Rm
|
|
|
307
323
|
data: (string | number)[];
|
|
308
324
|
};
|
|
309
325
|
yAxis: {
|
|
326
|
+
type: string;
|
|
327
|
+
name: string | undefined;
|
|
328
|
+
nameLocation: string;
|
|
329
|
+
nameGap: number;
|
|
330
|
+
nameTextStyle: {
|
|
331
|
+
fontSize: number;
|
|
332
|
+
color: string;
|
|
333
|
+
fontFamily: string;
|
|
334
|
+
align: string;
|
|
335
|
+
};
|
|
310
336
|
axisLabel: {
|
|
311
337
|
fontSize: number;
|
|
312
338
|
color: string;
|
|
@@ -322,11 +348,61 @@ export declare function rmLineOption(categories: (string | number)[], series: Rm
|
|
|
322
348
|
color: string;
|
|
323
349
|
};
|
|
324
350
|
};
|
|
351
|
+
} | ({
|
|
325
352
|
type: string;
|
|
326
|
-
|
|
353
|
+
name: string | undefined;
|
|
354
|
+
nameLocation: string;
|
|
355
|
+
nameGap: number;
|
|
356
|
+
nameTextStyle: {
|
|
357
|
+
fontSize: number;
|
|
358
|
+
color: string;
|
|
359
|
+
fontFamily: string;
|
|
360
|
+
align: string;
|
|
361
|
+
};
|
|
362
|
+
axisLabel: {
|
|
363
|
+
fontSize: number;
|
|
364
|
+
color: string;
|
|
365
|
+
fontFamily: string;
|
|
366
|
+
};
|
|
367
|
+
axisLine: {
|
|
368
|
+
lineStyle: {
|
|
369
|
+
color: string;
|
|
370
|
+
};
|
|
371
|
+
};
|
|
372
|
+
splitLine: {
|
|
373
|
+
lineStyle: {
|
|
374
|
+
color: string;
|
|
375
|
+
};
|
|
376
|
+
};
|
|
377
|
+
} | {
|
|
378
|
+
splitLine: {
|
|
379
|
+
show: boolean;
|
|
380
|
+
};
|
|
381
|
+
type: string;
|
|
382
|
+
name: string | undefined;
|
|
383
|
+
nameLocation: string;
|
|
384
|
+
nameGap: number;
|
|
385
|
+
nameTextStyle: {
|
|
386
|
+
fontSize: number;
|
|
387
|
+
color: string;
|
|
388
|
+
fontFamily: string;
|
|
389
|
+
align: string;
|
|
390
|
+
};
|
|
391
|
+
axisLabel: {
|
|
392
|
+
fontSize: number;
|
|
393
|
+
color: string;
|
|
394
|
+
fontFamily: string;
|
|
395
|
+
};
|
|
396
|
+
axisLine: {
|
|
397
|
+
lineStyle: {
|
|
398
|
+
color: string;
|
|
399
|
+
};
|
|
400
|
+
};
|
|
401
|
+
})[];
|
|
327
402
|
series: {
|
|
328
403
|
type: string;
|
|
329
404
|
name: string | undefined;
|
|
405
|
+
yAxisIndex: 0 | 1 | undefined;
|
|
330
406
|
data: (number | null)[];
|
|
331
407
|
smooth: boolean;
|
|
332
408
|
step: string | undefined;
|
|
@@ -364,13 +440,6 @@ export declare function rmLineOption(categories: (string | number)[], series: Rm
|
|
|
364
440
|
textStyle: {
|
|
365
441
|
fontFamily: string;
|
|
366
442
|
};
|
|
367
|
-
grid: {
|
|
368
|
-
left: number;
|
|
369
|
-
right: number;
|
|
370
|
-
top: number;
|
|
371
|
-
bottom: number;
|
|
372
|
-
containLabel: boolean;
|
|
373
|
-
};
|
|
374
443
|
tooltip: {
|
|
375
444
|
trigger: string;
|
|
376
445
|
backgroundColor: string;
|
|
@@ -90,6 +90,16 @@ export function rmBaseOption(theme, decal = false) {
|
|
|
90
90
|
}
|
|
91
91
|
};
|
|
92
92
|
}
|
|
93
|
+
const valueAxis = (theme, label) => ({
|
|
94
|
+
type: "value",
|
|
95
|
+
name: label,
|
|
96
|
+
nameLocation: "end",
|
|
97
|
+
nameGap: 12,
|
|
98
|
+
nameTextStyle: { fontSize: 10, color: theme.dimmedColor, fontFamily: FONT, align: "left" },
|
|
99
|
+
axisLabel: { fontSize: 11, color: theme.mutedColor, fontFamily: FONT },
|
|
100
|
+
axisLine: { lineStyle: { color: theme.axisLine } },
|
|
101
|
+
splitLine: { lineStyle: { color: theme.splitLine } }
|
|
102
|
+
});
|
|
93
103
|
const axisCommon = (theme) => ({
|
|
94
104
|
axisLabel: { fontSize: 11, color: theme.mutedColor, fontFamily: FONT },
|
|
95
105
|
axisLine: { lineStyle: { color: theme.axisLine } },
|
|
@@ -135,17 +145,27 @@ export function rmBarHorizontalOption(labels, values, theme, palette, decal = fa
|
|
|
135
145
|
};
|
|
136
146
|
}
|
|
137
147
|
export function rmLineOption(categories, series, theme, palette, options = {}) {
|
|
138
|
-
const { area = false, step = false, smooth = true, decal = false } = options;
|
|
148
|
+
const { area = false, step = false, smooth = true, decal = false, axisLabels } = options;
|
|
149
|
+
const dual = series.some((s) => s.axis === 1);
|
|
139
150
|
return {
|
|
140
151
|
...rmBaseOption(theme, decal),
|
|
141
|
-
|
|
152
|
+
// Legende obligatoire en double axe : sans elle, rien ne dit quelle courbe
|
|
153
|
+
// se lit sur quel axe.
|
|
154
|
+
legend: series.length > 1 || dual ? { top: 0, textStyle: { color: theme.mutedColor, fontSize: 11, fontFamily: FONT } } : void 0,
|
|
155
|
+
grid: { left: 48, right: dual ? 56 : 16, top: dual ? 40 : 24, bottom: 36, containLabel: true },
|
|
142
156
|
xAxis: { type: "category", data: categories, ...axisCommon(theme), splitLine: { show: false }, boundaryGap: false },
|
|
143
|
-
yAxis:
|
|
157
|
+
yAxis: dual ? [
|
|
158
|
+
valueAxis(theme, axisLabels?.[0]),
|
|
159
|
+
// Le second axe ne rejoue pas la grille : deux grilles superposees
|
|
160
|
+
// rendent le fond illisible.
|
|
161
|
+
{ ...valueAxis(theme, axisLabels?.[1]), splitLine: { show: false } }
|
|
162
|
+
] : valueAxis(theme, axisLabels?.[0]),
|
|
144
163
|
series: series.map((s, i) => {
|
|
145
164
|
const color = s.color ?? palette[i % palette.length];
|
|
146
165
|
return {
|
|
147
166
|
type: "line",
|
|
148
167
|
name: s.name,
|
|
168
|
+
yAxisIndex: dual ? s.axis ?? 0 : void 0,
|
|
149
169
|
data: s.data,
|
|
150
170
|
smooth: step ? false : smooth,
|
|
151
171
|
step: step ? "end" : void 0,
|