@tekkare/romulus 0.1.102 → 0.1.104

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
@@ -4,7 +4,7 @@
4
4
  "compatibility": {
5
5
  "nuxt": ">=3.16.0"
6
6
  },
7
- "version": "0.1.101",
7
+ "version": "0.1.103",
8
8
  "builder": {
9
9
  "@nuxt/module-builder": "0.8.4",
10
10
  "unbuild": "2.0.0"
@@ -86,6 +86,15 @@ const props = withDefaults(
86
86
 
87
87
  const emit = defineEmits<{
88
88
  export: [config: RmExportConfig]
89
+ /**
90
+ * Plage retenue a l'etape « Donnees ».
91
+ *
92
+ * Emis au choix, et pas seulement a l'export : une plage peut changer les
93
+ * colonnes disponibles (l'historique des prix ajoute la variation). Sans ce
94
+ * signal, l'etape « Colonnes » listerait celles de l'autre plage, et
95
+ * l'export perdrait silencieusement la colonne propre a celle-ci.
96
+ */
97
+ 'range-change': [key: string]
89
98
  /** Relancer un export conserve, par son identifiant cote app. */
90
99
  rerun: [id: string]
91
100
  /** Ouvrir l'ecran d'origine d'un export tire d'ailleurs. */
@@ -242,14 +251,28 @@ watch(
242
251
  },
243
252
  )
244
253
 
245
- // Les colonnes ne sont connues qu'une fois la page chargee : la selection
246
- // suit, sinon un export lance tot sort avec toutes les colonnes alors que le
247
- // panneau en montre cinq.
254
+ /*
255
+ Les colonnes ne sont connues qu'une fois la page chargee : la selection
256
+ suit, sinon un export lance tot sort avec toutes les colonnes alors que le
257
+ panneau en montre cinq.
258
+
259
+ Une colonne qui APPARAIT est cochee d'office. Le cas vient du changement de
260
+ plage : passer aux historiques ajoute la variation de prix, et la garder
261
+ decochee ferait sortir un fichier sans la seule colonne propre a la plage
262
+ qu'on vient de choisir. Decocher reste un geste, jamais un defaut.
263
+ */
248
264
  watch(
249
265
  () => props.columns,
250
- (next) => {
251
- config.columns = config.columns.filter(column => next.includes(column))
266
+ (next, previous) => {
267
+ const added = next.filter(column => !(previous ?? []).includes(column))
268
+ config.columns = [
269
+ ...config.columns.filter(column => next.includes(column)),
270
+ ...added,
271
+ ]
252
272
  if (!config.columns.length) config.columns = [...next]
273
+ // L'ordre de la page fait foi : concatener les nouvelles a la fin
274
+ // sortirait la variation apres la derniere colonne au lieu de sa place.
275
+ config.columns = next.filter(column => config.columns.includes(column))
253
276
  },
254
277
  )
255
278
 
@@ -296,6 +319,8 @@ const range = computed(
296
319
 
297
320
  const rows = computed(() => (showRange.value ? range.value?.rows ?? 0 : 0))
298
321
 
322
+ watch(() => config.range, key => emit('range-change', key))
323
+
299
324
  const sizeKb = computed(() =>
300
325
  rmExportSizeKb({
301
326
  format: config.format,
@@ -723,7 +748,7 @@ const recentDate = (at: string | Date) =>
723
748
  <div>
724
749
  <div class="rm-export__recap-k">{{ t.recapData }}</div>
725
750
  <div class="rm-export__recap-v">
726
- {{ rows.toLocaleString(lang === 'en' ? 'en-US' : 'fr-FR') }} {{ t.rows }}, {{ range?.label }}
751
+ {{ rows.toLocaleString(lang === 'en' ? 'en-US' : 'fr-FR') }} {{ range?.unit ?? t.rows }}, {{ range?.label }}
727
752
  </div>
728
753
  </div>
729
754
  </div>
@@ -72,6 +72,15 @@ const props = withDefaults(
72
72
  loading?: boolean
73
73
  /** Surligne la saisie dans le libelle de chaque suggestion. */
74
74
  highlightMatch?: boolean
75
+ /**
76
+ * Montre le choix d'operateur : la pastille devant le champ et le panneau
77
+ * qu'elle ouvre. A `false`, tous les termes entrent en ET, et l'operateur
78
+ * d'une etiquette posee reste modifiable. C'est l'etat des pages qui
79
+ * portent deja leurs operateurs ailleurs, dans le panneau
80
+ * « Recherche avancee » de RmFilterBar : deux endroits pour le meme
81
+ * reglage se contredisent.
82
+ */
83
+ showOperators?: boolean
75
84
  /** Id du champ, pour un `<label>` externe ou un test. */
76
85
  inputId?: string
77
86
  lang?: 'fr' | 'en'
@@ -81,6 +90,7 @@ const props = withDefaults(
81
90
  suggestions: undefined,
82
91
  loading: false,
83
92
  highlightMatch: false,
93
+ showOperators: true,
84
94
  inputId: 'rm-search-tags',
85
95
  lang: 'fr',
86
96
  },
@@ -197,7 +207,9 @@ function onInput() {
197
207
  suggOpen.value = true
198
208
  cursor.value = 0
199
209
  // Un prefixe tape a la main vaut selection dans le panneau.
200
- const hit = OPERATORS.find(o => text.value.startsWith(o.symbol))
210
+ const hit = props.showOperators
211
+ ? OPERATORS.find(o => text.value.startsWith(o.symbol))
212
+ : undefined
201
213
  if (hit) nextType.value = hit.type
202
214
  emit('typing', text.value)
203
215
  }
@@ -297,6 +309,7 @@ function move(step: 1 | -1) {
297
309
  : next > items.value.length ? 0 : next
298
310
  return
299
311
  }
312
+ if (!props.showOperators) return
300
313
  const at = OPERATORS.findIndex(o => o.type === nextType.value)
301
314
  const to = (at + step + OPERATORS.length) % OPERATORS.length
302
315
  nextType.value = OPERATORS[to]!.type
@@ -327,6 +340,7 @@ defineExpose({
327
340
  <!-- L'operateur du prochain terme, toujours visible : sans lui le
328
341
  lecteur tape « aspirine » sans savoir s'il ajoute ou exclut. -->
329
342
  <button
343
+ v-if="showOperators"
330
344
  type="button"
331
345
  class="rm-search-tags__operator"
332
346
  :aria-label="t.operator"
@@ -404,7 +418,7 @@ defineExpose({
404
418
  </div>
405
419
 
406
420
  <!-- Choix de l'operateur du prochain terme -->
407
- <div v-if="panelOpen" class="rm-search-tags__panel">
421
+ <div v-if="panelOpen && showOperators" class="rm-search-tags__panel">
408
422
  <div class="rm-search-tags__panel-head">
409
423
  <p class="rm-search-tags__panel-title">{{ t.options }}</p>
410
424
  <button
@@ -119,7 +119,17 @@ export interface RmExportSection {
119
119
  export interface RmExportRange {
120
120
  key: string;
121
121
  label: string;
122
+ /**
123
+ * Ce que la plage represente, en nombre. Pas toujours des lignes : un export
124
+ * qui deplie une entite en plusieurs lignes se plafonne par entite (500
125
+ * marques, pas 500 lignes), sans quoi il coupe la derniere en deux.
126
+ */
122
127
  rows: number;
128
+ /**
129
+ * Nom de ce que `rows` compte, au pluriel (« marques », « essais »). Absent,
130
+ * le recapitulatif dit « lignes ».
131
+ */
132
+ unit?: string;
123
133
  }
124
134
  /** Option de l'etape « Personnaliser » (logo, sources, ZIP...). */
125
135
  export interface RmExportOption {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tekkare/romulus",
3
- "version": "0.1.102",
3
+ "version": "0.1.104",
4
4
  "description": "Romulus Design System - Nuxt module by Tekkare",
5
5
  "license": "MIT",
6
6
  "type": "module",