@evotecit/canopyx 0.3.7 → 0.3.8

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.
@@ -0,0 +1,252 @@
1
+ // Type declarations for the change views (docs/changes.md): a text diff, a change list and a propagation view.
2
+
3
+ /** A note about a change that the lines cannot show, such as changed line endings. */
4
+ export interface ChangeNote {
5
+ text: string;
6
+ /** A CanopyX tone or a host tone; info when left out. */
7
+ tone?: string;
8
+ }
9
+
10
+ /** A run of lines: where it starts on each side and its lines, each beginning with " " (unchanged), "-" (removed) or "+" (added). */
11
+ export interface DiffHunk {
12
+ before: number;
13
+ after: number;
14
+ lines: string[];
15
+ }
16
+
17
+ /** The properties of a diff, as a diff document carries them and as a change list item's diff. */
18
+ export interface DiffBody {
19
+ id: string;
20
+ label: string;
21
+ path?: string;
22
+ previousPath?: string;
23
+ /** Text by default; the other states have no lines and show their message. */
24
+ content?: "binary" | "unavailable" | "identical";
25
+ message?: string;
26
+ beforeTitle?: string;
27
+ afterTitle?: string;
28
+ /** The whole earlier text: the browser compares the texts when there are no hunks (up to 5,000 lines each) and opens folded regions. */
29
+ before?: string;
30
+ after?: string;
31
+ hunks?: DiffHunk[];
32
+ /** Unchanged lines around each change, 0 to 20; 3 by default. */
33
+ context?: number;
34
+ /** Side by side when there is room, by default. */
35
+ layout?: "inline" | "split";
36
+ notes?: ChangeNote[];
37
+ truncated?: boolean;
38
+ /** The host's copy-ready unified diff. */
39
+ unified?: string;
40
+ labels?: Record<string, string>;
41
+ }
42
+
43
+ /** The diff document: `{ protocol: "canopyx/2", type: "diff" }`. */
44
+ export interface DiffDocument extends DiffBody {
45
+ protocol: "canopyx/2";
46
+ type: "diff";
47
+ }
48
+
49
+ /** Options of createDiff and CanopyX.configure for a diff fragment. */
50
+ export interface DiffOptions {
51
+ view: DiffDocument;
52
+ labels?: Record<string, string>;
53
+ onReady?: (detail: { diff: string }) => void;
54
+ onLayout?: (detail: { diff: string; layout: "inline" | "split" }) => void;
55
+ onCopy?: (detail: { diff: string; copied: boolean }) => void;
56
+ }
57
+
58
+ /** The API of a diff. A call made before the changes part is in waits for it and returns a promise instead. */
59
+ export interface DiffApi {
60
+ readonly element: HTMLElement;
61
+ readonly view: DiffDocument;
62
+ readonly ready: Promise<DiffApi>;
63
+ getLayout(): "inline" | "split";
64
+ setLayout(layout: "inline" | "split"): void;
65
+ /** Moves to the next or previous change; false when there is none. */
66
+ next(): boolean;
67
+ previous(): boolean;
68
+ /** Opens every folded region whose lines the diff has. */
69
+ expandAll(): void;
70
+ /** Copies the unified diff; resolves whether the clipboard took it. */
71
+ copy(): Promise<boolean>;
72
+ /** The hunks in effect: the document's, or those the browser compared. */
73
+ getHunks(): DiffHunk[];
74
+ update(view: DiffDocument): void;
75
+ destroy(): void;
76
+ }
77
+
78
+ /** One side of a change: size in bytes, content hash and time. */
79
+ export interface ChangeVersion {
80
+ size?: number;
81
+ hash?: string;
82
+ /** ISO 8601. */
83
+ time?: string;
84
+ }
85
+
86
+ /** A changed file or item. */
87
+ export interface ChangeItem {
88
+ id: string;
89
+ kind: "added" | "removed" | "modified" | "renamed";
90
+ path: string;
91
+ previousPath?: string;
92
+ kindLabel?: string;
93
+ secondary?: string;
94
+ before?: ChangeVersion;
95
+ after?: ChangeVersion;
96
+ /** Shown side by side; an added item shows only its after, a removed one only its before. `note` is quiet text under the values. */
97
+ facts?: { label: string; before?: string; after?: string; tone?: string; note?: string }[];
98
+ flags?: { id: string; label: string; reason: string; tone?: string }[];
99
+ /** A diff that opens in the item's details. */
100
+ diff?: DiffBody;
101
+ /** The ids of the list's actions this item offers; all of them when left out. */
102
+ actions?: string[];
103
+ /** Values that copy and link actions use by key. */
104
+ values?: Record<string, string>;
105
+ }
106
+
107
+ /**
108
+ * An action the items (or the list's bar) offer: a host action, one that asks for a reason first, a copy action ("path",
109
+ * "previousPath" or a value key), a link that opens a value (#, /, ./, ../, http(s):// or mailto: addresses), or one that reveals the
110
+ * item's details or diff. One of copy, link, reveal and reason at most.
111
+ */
112
+ export interface ChangeAction {
113
+ id: string;
114
+ label: string;
115
+ icon?: "none" | "copy" | "diff" | "check" | "open" | "download" | "compare" | "flag";
116
+ copy?: string;
117
+ link?: string;
118
+ reveal?: "none" | "details" | "diff";
119
+ reason?: boolean;
120
+ }
121
+
122
+ /** The change list document: `{ protocol: "canopyx/2", type: "changes" }`. */
123
+ export interface ChangeListDocument {
124
+ protocol: "canopyx/2";
125
+ type: "changes";
126
+ id: string;
127
+ label: string;
128
+ actions?: ChangeAction[];
129
+ /** The bar's actions: host actions, and copy and link actions on the list's values. */
130
+ toolbar?: ChangeAction[];
131
+ values?: Record<string, string>;
132
+ /** The files the bar offers to download: the items the filters keep. */
133
+ exports?: ("csv" | "json")[];
134
+ items: ChangeItem[];
135
+ groupByFolder?: boolean;
136
+ flaggedOnly?: boolean;
137
+ expandFlagged?: boolean;
138
+ hashLength?: number;
139
+ pageSize?: number;
140
+ timeZone?: "utc" | "local";
141
+ labels?: Record<string, string>;
142
+ }
143
+
144
+ /** The reader's filters and open items. */
145
+ export interface ChangeListState {
146
+ kinds: ChangeItem["kind"][];
147
+ flaggedOnly: boolean;
148
+ open: string[];
149
+ }
150
+
151
+ /** What canopyx:changeAction carries. */
152
+ export interface ChangeActionDetail {
153
+ list: string;
154
+ action: string;
155
+ /** The item, or null for an action of the list's bar. */
156
+ item: string | null;
157
+ kind: ChangeItem["kind"] | null;
158
+ path: string | null;
159
+ previousPath: string | null;
160
+ /** The item's values, or the list's for a bar action. */
161
+ values: Record<string, string>;
162
+ /** For a copy action, whether the clipboard took the value; null otherwise. */
163
+ copied: boolean | null;
164
+ /** The reason the reader gave, for an action that asks for one. */
165
+ reason?: string;
166
+ /** The address a link action opened. */
167
+ href?: string;
168
+ /** What a reveal action opened. */
169
+ reveal?: "details" | "diff";
170
+ }
171
+
172
+ /** What canopyx:changeExport carries. */
173
+ export interface ChangeExportDetail {
174
+ list: string;
175
+ format: "csv" | "json";
176
+ count: number;
177
+ /** Whether the browser was given the file. */
178
+ saved: boolean;
179
+ }
180
+
181
+ /** Options of createChangeList and CanopyX.configure for a change list fragment. */
182
+ export interface ChangeListOptions {
183
+ view: ChangeListDocument;
184
+ labels?: Record<string, string>;
185
+ state?: Partial<ChangeListState>;
186
+ onReady?: (detail: { list: string }) => void;
187
+ /** Receives every action; for a host action, having it claims the action (as cancelling canopyx:changeAction does). */
188
+ onAction?: (detail: ChangeActionDetail, event: CustomEvent<ChangeActionDetail>) => void;
189
+ onExport?: (detail: ChangeExportDetail) => void;
190
+ onToggle?: (detail: { list: string; item: string; open: boolean }) => void;
191
+ onStateChange?: (state: ChangeListState) => void;
192
+ }
193
+
194
+ /** The API of a change list. */
195
+ export interface ChangeListApi {
196
+ readonly element: HTMLElement;
197
+ readonly view: ChangeListDocument;
198
+ readonly ready: Promise<ChangeListApi>;
199
+ getState(): Readonly<ChangeListState>;
200
+ setState(state: Partial<ChangeListState>): void;
201
+ /** Opens, closes or switches an item's details; false for an unknown item. */
202
+ toggle(id: string, open?: boolean): boolean;
203
+ focusItem(id: string): boolean;
204
+ update(view: ChangeListDocument): void;
205
+ destroy(): void;
206
+ }
207
+
208
+ /** Where a change stands at a replica. */
209
+ export type PropagationState = "converged" | "propagating" | "fault" | "unknown";
210
+
211
+ /** The propagation document: `{ protocol: "canopyx/2", type: "propagation" }`. */
212
+ export interface PropagationDocument {
213
+ protocol: "canopyx/2";
214
+ type: "propagation";
215
+ id: string;
216
+ label: string;
217
+ /** ISO 8601: when the change happened; the delays count from it. */
218
+ start?: string;
219
+ /** ISO 8601: when the evidence is from. */
220
+ asOf?: string;
221
+ state?: PropagationState;
222
+ summary?: string;
223
+ title?: string;
224
+ /** How a group heading counts its replicas, with {count} and optional plural forms. */
225
+ groupCount?: string;
226
+ witnesses: { id: string; label: string; secondary?: string; state: PropagationState; firstSeen?: string; lastSeen?: string; note?: string; source?: boolean; group?: string }[];
227
+ timeZone?: "utc" | "local";
228
+ labels?: Record<string, string>;
229
+ }
230
+
231
+ /** Options of createPropagation and CanopyX.configure for a propagation fragment. */
232
+ export interface PropagationOptions {
233
+ view: PropagationDocument;
234
+ labels?: Record<string, string>;
235
+ onReady?: (detail: { propagation: string }) => void;
236
+ }
237
+
238
+ /** The API of a propagation view. */
239
+ export interface PropagationApi {
240
+ readonly element: HTMLElement;
241
+ readonly view: PropagationDocument;
242
+ readonly ready: Promise<PropagationApi>;
243
+ update(view: PropagationDocument): void;
244
+ destroy(): void;
245
+ }
246
+
247
+ /** Creates a text diff in a host element (docs/changes.md). Ships with the grid and reporting entry points. */
248
+ export declare function createDiff(host: HTMLElement, options: DiffOptions): DiffApi;
249
+ /** Creates a change list in a host element (docs/changes.md). Ships with the grid and reporting entry points. */
250
+ export declare function createChangeList(host: HTMLElement, options: ChangeListOptions): ChangeListApi;
251
+ /** Creates a propagation view in a host element (docs/changes.md). Ships with the grid and reporting entry points. */
252
+ export declare function createPropagation(host: HTMLElement, options: PropagationOptions): PropagationApi;
@@ -939,14 +939,15 @@ export function createDataGrid<Row extends GridRow = GridRow>(host: HTMLElement,
939
939
  export function createDataGrid<Row extends GridRow = GridRow>(host: HTMLElement, options: CursorGridOptions<GridNamedRow<Row>>): DataGrid<GridCursorQuery, Row>;
940
940
  /** A calendar from a list of events, with no grid schema to write: a preset (basic by default) and options over it (calendar.d.ts). */
941
941
  export function createCalendar(host: HTMLElement, options?: CalendarOptions): DataGrid<GridQuery, GridRow>;
942
- /** Registers options before a tree, flat-grid, flow or matrix fragment mounts. */
943
- export function configure(viewId: string, options: HostOptions | GridHostOptions | GridHostOptions<GridCursorQuery> | Partial<Omit<FlowOptions, "flow">> | Partial<Omit<MatrixOptions, "view">>): () => void;
942
+ /** Registers options before a tree, flat-grid, flow, matrix or change view fragment mounts. */
943
+ export function configure(viewId: string, options: HostOptions | GridHostOptions | GridHostOptions<GridCursorQuery> | Partial<Omit<FlowOptions, "flow">> | Partial<Omit<MatrixOptions, "view">>
944
+ | Partial<Omit<DiffOptions, "view">> | Partial<Omit<ChangeListOptions, "view">> | Partial<Omit<PropagationOptions, "view">>): () => void;
944
945
  /**
945
- * Mounts tree, flat-grid, flow and matrix fragments below root, or root itself when it is a fragment. Fragments marked
946
+ * Mounts tree, flat-grid, flow, matrix and change view fragments below root, or root itself when it is a fragment. Fragments marked
946
947
  * `data-cx-mount="visible"` below root wait until they come near the viewport; passing such a fragment as root mounts it at once.
947
948
  * Narrow a controller before using view-specific methods.
948
949
  */
949
- export function mount(root?: ParentNode): Array<TreeGrid | DataGrid<AcceptedGridQuery> | FlowApi | MatrixApi>;
950
+ export function mount(root?: ParentNode): Array<TreeGrid | DataGrid<AcceptedGridQuery> | FlowApi | MatrixApi | DiffApi | ChangeListApi | PropagationApi>;
950
951
 
951
952
  import type { createFlow, FlowApi, FlowOptions } from "./flow.js";
952
953
  export { createFlow } from "./flow.js";
@@ -954,5 +955,8 @@ export type { FlowDocument, FlowField, FlowStep, FlowSection, FlowOption, FlowCo
954
955
  import type { createMatrix, MatrixOptions, MatrixApi } from "./matrix.js";
955
956
  export { createMatrix } from "./matrix.js";
956
957
  export type { MatrixDocument, MatrixAxis, MatrixItem, MatrixAttribute, MatrixState, MatrixSort, MatrixNote, MatrixQueryState, MatrixStateInput, MatrixCellDetail, MatrixOptions, MatrixApi } from "./matrix.js";
957
- declare const gridRuntime: Omit<typeof CanopyX, "configure" | "mount"> & { createDataGrid: typeof createDataGrid; createCalendar: typeof createCalendar; createFlow: typeof createFlow; createMatrix: typeof createMatrix; enhance: typeof enhance; grid: typeof grid; configure: typeof configure; mount: typeof mount };
958
+ import type { createDiff, createChangeList, createPropagation, DiffOptions, DiffApi, ChangeListOptions, ChangeListApi, PropagationOptions, PropagationApi } from "./changes.js";
959
+ export { createDiff, createChangeList, createPropagation } from "./changes.js";
960
+ export type { ChangeNote, DiffHunk, DiffBody, DiffDocument, DiffOptions, DiffApi, ChangeVersion, ChangeItem, ChangeAction, ChangeListDocument, ChangeListState, ChangeActionDetail, ChangeExportDetail, ChangeListOptions, ChangeListApi, PropagationState, PropagationDocument, PropagationOptions, PropagationApi } from "./changes.js";
961
+ declare const gridRuntime: Omit<typeof CanopyX, "configure" | "mount"> & { createDataGrid: typeof createDataGrid; createCalendar: typeof createCalendar; createFlow: typeof createFlow; createMatrix: typeof createMatrix; createDiff: typeof createDiff; createChangeList: typeof createChangeList; createPropagation: typeof createPropagation; enhance: typeof enhance; grid: typeof grid; configure: typeof configure; mount: typeof mount };
958
962
  export default gridRuntime;
@@ -689,14 +689,86 @@ const labels = Object.freeze({
689
689
  matrixItemTotal: "{item}: {count}",
690
690
  matrixExpandGroup: "{group} aufklappen",
691
691
  matrixCollapseGroup: "{group} zuklappen",
692
- matrixGroupHeadingCount: "{count}",
693
- matrixGroupCount: "Elemente: {count}",
692
+ matrixGroupCount: "{count}",
693
+ matrixCellCount: "Zellen: {count}",
694
694
  matrixDetails: "Details",
695
695
  matrixClose: "Schließen",
696
696
  matrixValue: "Wert",
697
697
  matrixState: "Zustand",
698
698
  matrixAllClear: "Nichts erfordert Aufmerksamkeit",
699
699
  matrixShowMore: "Mehr anzeigen",
700
+ changeInline: "Inline",
701
+ changeSplit: "Nebeneinander",
702
+ changeLayout: "Ansicht",
703
+ changeCopyDiff: "Diff kopieren",
704
+ changeCopied: "Kopiert",
705
+ changeCopyFailed: "Kopieren nicht möglich",
706
+ changeNext: "Nächste Änderung",
707
+ changePrevious: "Vorherige Änderung",
708
+ changePosition: "Änderung {index} von {count}",
709
+ changeShowLines: "[one]{count} weitere Zeile anzeigen[other]{count} weitere Zeilen anzeigen",
710
+ changeHiddenLines: "[one]{count} unveränderte Zeile nicht enthalten[other]{count} unveränderte Zeilen nicht enthalten",
711
+ changeLineCounts: "Hinzugefügte Zeilen: {added}, entfernte: {removed}",
712
+ changeLineAdded: "Hinzugefügte Zeile {line}",
713
+ changeLineRemoved: "Entfernte Zeile {line}",
714
+ changeLineContext: "Zeile {line}",
715
+ changeBefore: "Vorher",
716
+ changeAfter: "Nachher",
717
+ changeBinary: "Binärdatei: nach Größe und Hash verglichen, nicht zeilenweise.",
718
+ changeUnavailable: "Der Inhalt dieser Datei ist nicht verfügbar.",
719
+ changeIdentical: "Der Text hat sich nicht geändert.",
720
+ changeTruncated: "Einige Änderungen fehlen: Der Vergleich war zu groß.",
721
+ changeTooLarge: "Diese Texte sind zu lang, um sie hier zu vergleichen.",
722
+ changeDiffOf: "Änderungen in {name}",
723
+ changeAdded: "Hinzugefügt",
724
+ changeRemoved: "Entfernt",
725
+ changeModified: "Geändert",
726
+ changeRenamed: "Umbenannt",
727
+ changeFlaggedOnly: "Nur markierte",
728
+ changeFlaggedCount: "{count} markiert",
729
+ changeNoItems: "Keine Änderungen anzuzeigen.",
730
+ changeSize: "Größe",
731
+ changeHash: "Hash",
732
+ changeTime: "Zeit",
733
+ changeCopyHash: "Vollständigen Hash kopieren",
734
+ changeDetails: "Details zu {name}",
735
+ changeFileCount: "[one]{count} Datei[other]{count} Dateien",
736
+ changeFrom: "von {path}",
737
+ changeShowMore: "Mehr anzeigen",
738
+ changeFlags: "Markierungen",
739
+ changeFacts: "Details",
740
+ changeRoot: "Oberste Ebene",
741
+ changeShown: "{shown} von {total} angezeigt",
742
+ changeFilter: "Änderungen anzeigen",
743
+ changeActions: "Aktionen für {name}",
744
+ changeConverged: "Konvergiert",
745
+ changePropagating: "Wird repliziert",
746
+ changeFault: "Fehler",
747
+ changeUnknown: "Unbekannt",
748
+ changeReplica: "Replikat",
749
+ changeState: "Zustand",
750
+ changeFirstSeen: "Zuerst gesehen",
751
+ changeLastSeen: "Zuletzt gesehen",
752
+ changeTimeline: "Verzögerung",
753
+ changeNotSeen: "Noch nicht gesehen",
754
+ changeDelay: "+{duration}",
755
+ changeSource: "Quelle",
756
+ changeProgress: "{converged} von {total} haben die Änderung",
757
+ changeSeconds: "{count} s",
758
+ changeMinutes: "{count} Min.",
759
+ changeHours: "{count} Std.",
760
+ changeDays: "{count} T.",
761
+ changeUtcTime: "{time} UTC",
762
+ changeExportCsv: "CSV exportieren",
763
+ changeExportJson: "JSON exportieren",
764
+ changeReason: "Grund",
765
+ changeReasonHint: "{action}: Begründen Sie die Aktion. Der Grund wird mit ihr gespeichert.",
766
+ changeReasonRequired: "Geben Sie zuerst einen Grund ein.",
767
+ changeCancel: "Abbrechen",
768
+ changeUnclaimed: "Diese Seite kann „{action}“ nicht selbst ausführen. Kopieren Sie die Anfrage, um sie weiterzugeben.",
769
+ changeCopyRequest: "Anfrage kopieren",
770
+ changeFiltered: "Gefiltert: {filters}",
771
+ changePrintLimit: "{count} weitere Zeilen werden nicht gedruckt.",
700
772
  });
701
773
  const staticLabels = Object.freeze({
702
774
  overflowNote: "{shown} Zeilen angezeigt. Gesamtzahl: {total}.",
@@ -689,14 +689,86 @@ const labels = Object.freeze({
689
689
  matrixItemTotal: "{item}: {count}",
690
690
  matrixExpandGroup: "Expandir {group}",
691
691
  matrixCollapseGroup: "Contraer {group}",
692
- matrixGroupHeadingCount: "{count}",
693
- matrixGroupCount: "Elementos: {count}",
692
+ matrixGroupCount: "{count}",
693
+ matrixCellCount: "Celdas: {count}",
694
694
  matrixDetails: "Detalles",
695
695
  matrixClose: "Cerrar",
696
696
  matrixValue: "Valor",
697
697
  matrixState: "Estado",
698
698
  matrixAllClear: "Nada requiere atención",
699
699
  matrixShowMore: "Mostrar más",
700
+ changeInline: "En línea",
701
+ changeSplit: "En paralelo",
702
+ changeLayout: "Diseño",
703
+ changeCopyDiff: "Copiar diff",
704
+ changeCopied: "Copiado",
705
+ changeCopyFailed: "No se pudo copiar",
706
+ changeNext: "Siguiente cambio",
707
+ changePrevious: "Cambio anterior",
708
+ changePosition: "Cambio {index} de {count}",
709
+ changeShowLines: "[one]Mostrar {count} línea más[other]Mostrar {count} líneas más",
710
+ changeHiddenLines: "[one]{count} línea sin cambios no incluida[other]{count} líneas sin cambios no incluidas",
711
+ changeLineCounts: "Líneas añadidas: {added}, eliminadas: {removed}",
712
+ changeLineAdded: "Línea añadida {line}",
713
+ changeLineRemoved: "Línea eliminada {line}",
714
+ changeLineContext: "Línea {line}",
715
+ changeBefore: "Antes",
716
+ changeAfter: "Después",
717
+ changeBinary: "Archivo binario: se compara por tamaño y hash, no por líneas.",
718
+ changeUnavailable: "El contenido de este archivo no está disponible.",
719
+ changeIdentical: "El texto no cambió.",
720
+ changeTruncated: "Algunos cambios no se muestran: la comparación era demasiado grande.",
721
+ changeTooLarge: "Estos textos son demasiado largos para compararlos aquí.",
722
+ changeDiffOf: "Cambios en {name}",
723
+ changeAdded: "Añadido",
724
+ changeRemoved: "Eliminado",
725
+ changeModified: "Modificado",
726
+ changeRenamed: "Renombrado",
727
+ changeFlaggedOnly: "Solo marcados",
728
+ changeFlaggedCount: "{count} marcados",
729
+ changeNoItems: "No hay cambios que mostrar.",
730
+ changeSize: "Tamaño",
731
+ changeHash: "Hash",
732
+ changeTime: "Hora",
733
+ changeCopyHash: "Copiar el hash completo",
734
+ changeDetails: "Detalles de {name}",
735
+ changeFileCount: "[one]{count} archivo[other]{count} archivos",
736
+ changeFrom: "desde {path}",
737
+ changeShowMore: "Mostrar más",
738
+ changeFlags: "Marcas",
739
+ changeFacts: "Detalles",
740
+ changeRoot: "Nivel superior",
741
+ changeShown: "{shown} de {total} mostrados",
742
+ changeFilter: "Mostrar cambios",
743
+ changeActions: "Acciones para {name}",
744
+ changeConverged: "Convergido",
745
+ changePropagating: "Propagándose",
746
+ changeFault: "Fallo",
747
+ changeUnknown: "Desconocido",
748
+ changeReplica: "Réplica",
749
+ changeState: "Estado",
750
+ changeFirstSeen: "Visto por primera vez",
751
+ changeLastSeen: "Visto por última vez",
752
+ changeTimeline: "Retraso",
753
+ changeNotSeen: "Aún no visto",
754
+ changeDelay: "+{duration}",
755
+ changeSource: "Origen",
756
+ changeProgress: "{converged} de {total} tienen el cambio",
757
+ changeSeconds: "{count} s",
758
+ changeMinutes: "{count} min",
759
+ changeHours: "{count} h",
760
+ changeDays: "{count} d",
761
+ changeUtcTime: "{time} UTC",
762
+ changeExportCsv: "Exportar CSV",
763
+ changeExportJson: "Exportar JSON",
764
+ changeReason: "Motivo",
765
+ changeReasonHint: "{action}: indique el motivo. El motivo se guarda con la acción.",
766
+ changeReasonRequired: "Indique primero un motivo.",
767
+ changeCancel: "Cancelar",
768
+ changeUnclaimed: "Esta página no puede realizar «{action}» por sí misma. Copie la solicitud para transmitirla.",
769
+ changeCopyRequest: "Copiar solicitud",
770
+ changeFiltered: "Filtrado: {filters}",
771
+ changePrintLimit: "{count} líneas más no se imprimen.",
700
772
  });
701
773
  const staticLabels = Object.freeze({
702
774
  overflowNote: "Filas mostradas: {shown}. Total: {total}.",
@@ -689,14 +689,86 @@ const labels = Object.freeze({
689
689
  matrixItemTotal: "{item} : {count}",
690
690
  matrixExpandGroup: "Développer {group}",
691
691
  matrixCollapseGroup: "Réduire {group}",
692
- matrixGroupHeadingCount: "{count}",
693
- matrixGroupCount: "Éléments : {count}",
692
+ matrixGroupCount: "{count}",
693
+ matrixCellCount: "Cellules : {count}",
694
694
  matrixDetails: "Détails",
695
695
  matrixClose: "Fermer",
696
696
  matrixValue: "Valeur",
697
697
  matrixState: "État",
698
698
  matrixAllClear: "Rien à examiner",
699
699
  matrixShowMore: "Afficher plus",
700
+ changeInline: "En ligne",
701
+ changeSplit: "Côte à côte",
702
+ changeLayout: "Disposition",
703
+ changeCopyDiff: "Copier le diff",
704
+ changeCopied: "Copié",
705
+ changeCopyFailed: "Copie impossible",
706
+ changeNext: "Modification suivante",
707
+ changePrevious: "Modification précédente",
708
+ changePosition: "Modification {index} sur {count}",
709
+ changeShowLines: "[one]Afficher {count} ligne de plus[other]Afficher {count} lignes de plus",
710
+ changeHiddenLines: "[one]{count} ligne inchangée non incluse[other]{count} lignes inchangées non incluses",
711
+ changeLineCounts: "Lignes ajoutées : {added}, supprimées : {removed}",
712
+ changeLineAdded: "Ligne ajoutée {line}",
713
+ changeLineRemoved: "Ligne supprimée {line}",
714
+ changeLineContext: "Ligne {line}",
715
+ changeBefore: "Avant",
716
+ changeAfter: "Après",
717
+ changeBinary: "Fichier binaire : comparé par taille et empreinte, pas par lignes.",
718
+ changeUnavailable: "Le contenu de ce fichier n'est pas disponible.",
719
+ changeIdentical: "Le texte n'a pas changé.",
720
+ changeTruncated: "Certaines modifications ne sont pas affichées : la comparaison était trop grande.",
721
+ changeTooLarge: "Ces textes sont trop longs pour être comparés ici.",
722
+ changeDiffOf: "Modifications dans {name}",
723
+ changeAdded: "Ajouté",
724
+ changeRemoved: "Supprimé",
725
+ changeModified: "Modifié",
726
+ changeRenamed: "Renommé",
727
+ changeFlaggedOnly: "Signalés uniquement",
728
+ changeFlaggedCount: "Signalés : {count}",
729
+ changeNoItems: "Aucune modification à afficher.",
730
+ changeSize: "Taille",
731
+ changeHash: "Empreinte",
732
+ changeTime: "Heure",
733
+ changeCopyHash: "Copier l'empreinte complète",
734
+ changeDetails: "Détails de {name}",
735
+ changeFileCount: "[one]{count} fichier[other]{count} fichiers",
736
+ changeFrom: "depuis {path}",
737
+ changeShowMore: "Afficher plus",
738
+ changeFlags: "Signalements",
739
+ changeFacts: "Détails",
740
+ changeRoot: "Niveau supérieur",
741
+ changeShown: "{shown} sur {total} affichés",
742
+ changeFilter: "Afficher les modifications",
743
+ changeActions: "Actions pour {name}",
744
+ changeConverged: "Convergé",
745
+ changePropagating: "En propagation",
746
+ changeFault: "Défaut",
747
+ changeUnknown: "Inconnu",
748
+ changeReplica: "Réplica",
749
+ changeState: "État",
750
+ changeFirstSeen: "Vu pour la première fois",
751
+ changeLastSeen: "Vu pour la dernière fois",
752
+ changeTimeline: "Délai",
753
+ changeNotSeen: "Pas encore vu",
754
+ changeDelay: "+{duration}",
755
+ changeSource: "Source",
756
+ changeProgress: "{converged} sur {total} ont la modification",
757
+ changeSeconds: "{count} s",
758
+ changeMinutes: "{count} min",
759
+ changeHours: "{count} h",
760
+ changeDays: "{count} j",
761
+ changeUtcTime: "{time} UTC",
762
+ changeExportCsv: "Exporter en CSV",
763
+ changeExportJson: "Exporter en JSON",
764
+ changeReason: "Motif",
765
+ changeReasonHint: "{action} : indiquez le motif. Le motif est conservé avec l'action.",
766
+ changeReasonRequired: "Indiquez d'abord un motif.",
767
+ changeCancel: "Annuler",
768
+ changeUnclaimed: "Cette page ne peut pas exécuter « {action} » elle-même. Copiez la demande pour la transmettre.",
769
+ changeCopyRequest: "Copier la demande",
770
+ changeFiltered: "Filtré : {filters}",
771
+ changePrintLimit: "{count} lignes de plus ne sont pas imprimées.",
700
772
  });
701
773
  const staticLabels = Object.freeze({
702
774
  overflowNote: "{shown} lignes affichées sur {total}.",
@@ -689,14 +689,86 @@ const labels = Object.freeze({
689
689
  matrixItemTotal: "{item}: {count}",
690
690
  matrixExpandGroup: "Espandi {group}",
691
691
  matrixCollapseGroup: "Comprimi {group}",
692
- matrixGroupHeadingCount: "{count}",
693
- matrixGroupCount: "Elementi: {count}",
692
+ matrixGroupCount: "{count}",
693
+ matrixCellCount: "Celle: {count}",
694
694
  matrixDetails: "Dettagli",
695
695
  matrixClose: "Chiudi",
696
696
  matrixValue: "Valore",
697
697
  matrixState: "Stato",
698
698
  matrixAllClear: "Niente richiede attenzione",
699
699
  matrixShowMore: "Mostra altro",
700
+ changeInline: "In linea",
701
+ changeSplit: "Affiancato",
702
+ changeLayout: "Layout",
703
+ changeCopyDiff: "Copia diff",
704
+ changeCopied: "Copiato",
705
+ changeCopyFailed: "Impossibile copiare",
706
+ changeNext: "Modifica successiva",
707
+ changePrevious: "Modifica precedente",
708
+ changePosition: "Modifica {index} di {count}",
709
+ changeShowLines: "[one]Mostra {count} altra riga[other]Mostra altre {count} righe",
710
+ changeHiddenLines: "[one]{count} riga invariata non inclusa[other]{count} righe invariate non incluse",
711
+ changeLineCounts: "Righe aggiunte: {added}, rimosse: {removed}",
712
+ changeLineAdded: "Riga aggiunta {line}",
713
+ changeLineRemoved: "Riga rimossa {line}",
714
+ changeLineContext: "Riga {line}",
715
+ changeBefore: "Prima",
716
+ changeAfter: "Dopo",
717
+ changeBinary: "File binario: confrontato per dimensione e hash, non per righe.",
718
+ changeUnavailable: "Il contenuto di questo file non è disponibile.",
719
+ changeIdentical: "Il testo non è cambiato.",
720
+ changeTruncated: "Alcune modifiche non sono mostrate: il confronto era troppo grande.",
721
+ changeTooLarge: "Questi testi sono troppo lunghi per essere confrontati qui.",
722
+ changeDiffOf: "Modifiche in {name}",
723
+ changeAdded: "Aggiunto",
724
+ changeRemoved: "Rimosso",
725
+ changeModified: "Modificato",
726
+ changeRenamed: "Rinominato",
727
+ changeFlaggedOnly: "Solo segnalati",
728
+ changeFlaggedCount: "{count} segnalati",
729
+ changeNoItems: "Nessuna modifica da mostrare.",
730
+ changeSize: "Dimensione",
731
+ changeHash: "Hash",
732
+ changeTime: "Ora",
733
+ changeCopyHash: "Copia l'hash completo",
734
+ changeDetails: "Dettagli di {name}",
735
+ changeFileCount: "[one]{count} file[other]{count} file",
736
+ changeFrom: "da {path}",
737
+ changeShowMore: "Mostra altro",
738
+ changeFlags: "Segnalazioni",
739
+ changeFacts: "Dettagli",
740
+ changeRoot: "Livello principale",
741
+ changeShown: "{shown} di {total} mostrati",
742
+ changeFilter: "Mostra modifiche",
743
+ changeActions: "Azioni per {name}",
744
+ changeConverged: "Convergente",
745
+ changePropagating: "In propagazione",
746
+ changeFault: "Errore",
747
+ changeUnknown: "Sconosciuto",
748
+ changeReplica: "Replica",
749
+ changeState: "Stato",
750
+ changeFirstSeen: "Visto per la prima volta",
751
+ changeLastSeen: "Visto per l'ultima volta",
752
+ changeTimeline: "Ritardo",
753
+ changeNotSeen: "Non ancora visto",
754
+ changeDelay: "+{duration}",
755
+ changeSource: "Origine",
756
+ changeProgress: "{converged} su {total} hanno la modifica",
757
+ changeSeconds: "{count} s",
758
+ changeMinutes: "{count} min",
759
+ changeHours: "{count} h",
760
+ changeDays: "{count} g",
761
+ changeUtcTime: "{time} UTC",
762
+ changeExportCsv: "Esporta CSV",
763
+ changeExportJson: "Esporta JSON",
764
+ changeReason: "Motivo",
765
+ changeReasonHint: "{action}: indica il motivo. Il motivo viene conservato con l'azione.",
766
+ changeReasonRequired: "Indica prima un motivo.",
767
+ changeCancel: "Annulla",
768
+ changeUnclaimed: "Questa pagina non può eseguire «{action}» da sola. Copia la richiesta per inoltrarla.",
769
+ changeCopyRequest: "Copia richiesta",
770
+ changeFiltered: "Filtrato: {filters}",
771
+ changePrintLimit: "Altre {count} righe non vengono stampate.",
700
772
  });
701
773
  const staticLabels = Object.freeze({
702
774
  overflowNote: "Righe mostrate: {shown} su {total}.",