structural-codes-viewer 0.1.0-alpha.1
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/README.md +102 -0
- package/package-dist/CorpusContent.d.ts +16 -0
- package/package-dist/CorpusContent.js +72 -0
- package/package-dist/CorpusContent.js.map +1 -0
- package/package-dist/NormativeViewer.d.ts +29 -0
- package/package-dist/NormativeViewer.js +330 -0
- package/package-dist/NormativeViewer.js.map +1 -0
- package/package-dist/corpusData.d.ts +235 -0
- package/package-dist/corpusData.js +40 -0
- package/package-dist/corpusData.js.map +1 -0
- package/package-dist/generate-artifacts.mjs +151 -0
- package/package-dist/styles.css +182 -0
- package/package.json +83 -0
package/README.md
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# structural-codes-viewer
|
|
2
|
+
|
|
3
|
+
`structural-codes-viewer` è la reference UI React per consultare il corpus
|
|
4
|
+
`structural-codes`. Il sottoprogetto contiene anche il consumer standalone
|
|
5
|
+
locale usato per la revisione editoriale.
|
|
6
|
+
|
|
7
|
+
- `structural-codes` contiene corpus, schema, provenance e relazioni canoniche;
|
|
8
|
+
- `structural-codes-viewer` contiene UI React, client lazy degli artefatti e
|
|
9
|
+
generatore deterministico;
|
|
10
|
+
- il viewer standalone Vinext/Vite è un consumer locale della stessa UI e può
|
|
11
|
+
aggiungere il PDF ufficiale tramite `OfficialPdfPanel`;
|
|
12
|
+
- un futuro `ocfem-website` consumerà la stessa UI senza Vinext, Cloudflare o
|
|
13
|
+
PDF.js.
|
|
14
|
+
|
|
15
|
+
## Uso React
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
import { NormativeViewer } from "structural-codes-viewer";
|
|
19
|
+
import "structural-codes-viewer/styles.css";
|
|
20
|
+
|
|
21
|
+
export function Normativa() {
|
|
22
|
+
return <NormativeViewer defaultMode="combined" dataBaseUrl="/data/codes" />;
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
La modalità predefinita è `combined`: la NTC resta la struttura principale e
|
|
27
|
+
la Circolare viene inserita soltanto tramite relazioni esplicite del corpus.
|
|
28
|
+
Le relazioni `proposed` restano tracciate nei dati senza aggiungere etichette
|
|
29
|
+
testuali alla lettura. Il client verifica `formatVersion`, schema e manifest; non usa
|
|
30
|
+
la uguaglianza delle versioni SemVer per interpretare i dati.
|
|
31
|
+
|
|
32
|
+
API intenzionale:
|
|
33
|
+
|
|
34
|
+
- `defaultMode`: `combined`, `ntc` o `circ`;
|
|
35
|
+
- `dataBaseUrl`: directory degli artefatti lazy, default `/data/codes`;
|
|
36
|
+
- `assetsBaseUrl`: directory delle figure, default `/assets`;
|
|
37
|
+
- `auxiliaryPanel`: pannello opzionale o render prop locale;
|
|
38
|
+
- `auxiliaryPanelDefaultVisible`: visibilità iniziale del pannello opzionale.
|
|
39
|
+
|
|
40
|
+
La ricerca è sempre visibile ma carica `search-index.json` soltanto con almeno
|
|
41
|
+
due caratteri. Manifest, indice documento, chunk e relazioni restano separati.
|
|
42
|
+
Le figure sono lazy e il package shared non importa `pdfjs-dist`, non conosce
|
|
43
|
+
`/api/source-pdf` e non dipende da Vinext o Cloudflare. React e ReactDOM sono
|
|
44
|
+
peer dependencies React 19. Nell’indice della consultazione comparata ogni
|
|
45
|
+
colonna segue la selezione corrente: capitolo → paragrafi → sottoparagrafi →
|
|
46
|
+
dettagli. I capitoli entro la soglia di caricamento sono continui; quelli più
|
|
47
|
+
grandi caricano il testo in continuità quando si seleziona il singolo paragrafo.
|
|
48
|
+
|
|
49
|
+
## Artefatti
|
|
50
|
+
|
|
51
|
+
`npm run sync:corpus` mantiene il consumer locale aggiornato sotto
|
|
52
|
+
`public/data/codes/`:
|
|
53
|
+
|
|
54
|
+
```text
|
|
55
|
+
manifest.json
|
|
56
|
+
relations.json
|
|
57
|
+
relation-diagnostics.json
|
|
58
|
+
search-index.json
|
|
59
|
+
ntc2018/index.json
|
|
60
|
+
ntc2018/chunks/*.json
|
|
61
|
+
circ2019/index.json
|
|
62
|
+
circ2019/chunks/*.json
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Il generatore condiviso legge soltanto i file pubblici del package
|
|
66
|
+
`structural-codes`, è deterministico e non richiede un checkout sibling. La
|
|
67
|
+
CLI inclusa nel package può materializzare gli stessi artefatti in un consumer:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npx structural-codes-viewer --source structural-codes \
|
|
71
|
+
--output public/data/codes --assets public/assets
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Il comando non copia il corpus completo nel package viewer: usa il package
|
|
75
|
+
`structural-codes` installato dal consumer come sorgente.
|
|
76
|
+
|
|
77
|
+
## Viewer standalone
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
npm run dev
|
|
81
|
+
npm run build
|
|
82
|
+
npm test
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
La route `/consultazione` usa `NormativeViewer` e compone il pannello PDF
|
|
86
|
+
locale opzionale. PDF.js e il file PDF vengono caricati solo dopo l’azione
|
|
87
|
+
esplicita “Apri PDF ufficiale”; il PDF non entra nel package shared.
|
|
88
|
+
|
|
89
|
+
## Package
|
|
90
|
+
|
|
91
|
+
La prerelease non viene pubblicata da questo repository. Per una futura
|
|
92
|
+
pubblicazione, dopo review:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npm run build:library
|
|
96
|
+
npm pack
|
|
97
|
+
npm publish --access public
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Il tarball contiene soltanto `package-dist/`, CSS, README e metadati del
|
|
101
|
+
package; non contiene app standalone, worker Cloudflare, test, cache, corpus
|
|
102
|
+
completo o `pdfjs-dist`.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { AssetBundle, CorpusBlock, CorpusUnit } from "./corpusData";
|
|
2
|
+
export interface BlockContentProps {
|
|
3
|
+
block: CorpusBlock;
|
|
4
|
+
assets: AssetBundle | null;
|
|
5
|
+
showRaw?: boolean;
|
|
6
|
+
assetsBaseUrl?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function BlockContent({ block, assets, showRaw, assetsBaseUrl }: BlockContentProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export declare function isRepeatedUnitTitle(unit: CorpusUnit, block: CorpusUnit["blocks"][number]): boolean;
|
|
10
|
+
export declare function UnitBlocks({ unit, assets, showRaw, compact, assetsBaseUrl }: {
|
|
11
|
+
unit: CorpusUnit;
|
|
12
|
+
assets: AssetBundle;
|
|
13
|
+
showRaw?: boolean;
|
|
14
|
+
compact?: boolean;
|
|
15
|
+
assetsBaseUrl?: string;
|
|
16
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/* eslint-disable @next/next/no-img-element */
|
|
3
|
+
import katex from "katex";
|
|
4
|
+
const editorialTableNotePatterns = [
|
|
5
|
+
/^\s*\[(?:TABELLA|ASSET)_[^\]]+\]/iu,
|
|
6
|
+
/\bevidence\b/iu,
|
|
7
|
+
/\b(?:revisione|review) (?:umana|visuale)\b/iu,
|
|
8
|
+
/\bverifica (?:manuale|umana|visuale)\b/iu,
|
|
9
|
+
/\bconfronto cella per cella\b/iu,
|
|
10
|
+
/\btrascritt[aoe]\b/iu,
|
|
11
|
+
/\btrascrizione\b/iu,
|
|
12
|
+
/\brender\b/iu,
|
|
13
|
+
/\bpagin[ae] PDF\b/iu,
|
|
14
|
+
/\bgriglia ricostruita automaticamente\b/iu,
|
|
15
|
+
/\bmodello corrente\b/iu,
|
|
16
|
+
/\bschema corrente\b/iu,
|
|
17
|
+
/\bdescrizion[ei] (?:testuali|strutturat[ae])\b/iu,
|
|
18
|
+
/\bissue bloccante\b/iu,
|
|
19
|
+
/\bprima della pubblicazione\b/iu,
|
|
20
|
+
];
|
|
21
|
+
function visibleTableNotes(notes) {
|
|
22
|
+
return notes.filter((note) => !editorialTableNotePatterns.some((pattern) => pattern.test(note)));
|
|
23
|
+
}
|
|
24
|
+
function latexMarkup(latex, displayMode) {
|
|
25
|
+
return { __html: katex.renderToString(latex, { displayMode, throwOnError: false, strict: "warn", output: "html" }) };
|
|
26
|
+
}
|
|
27
|
+
function MathCell({ cell }) {
|
|
28
|
+
if (!cell.latex)
|
|
29
|
+
return cell.text;
|
|
30
|
+
return _jsx("span", { className: "table-math", dangerouslySetInnerHTML: latexMarkup(cell.latex, false) });
|
|
31
|
+
}
|
|
32
|
+
export function BlockContent({ block, assets, showRaw = false, assetsBaseUrl = "/assets" }) {
|
|
33
|
+
var _a, _b, _c, _d;
|
|
34
|
+
if (block.text) {
|
|
35
|
+
if (showRaw || !block.text.inline)
|
|
36
|
+
return _jsx("p", { children: showRaw ? block.text.raw : block.text.normalized });
|
|
37
|
+
return _jsx("p", { children: block.text.inline.map((segment, index) => segment.kind === "math" ? (_jsx("span", { className: "inline-math", title: segment.value, dangerouslySetInnerHTML: latexMarkup(segment.latex, false) }, `${segment.value}-${index}`)) : _jsx("span", { children: segment.value }, `text-${index}`)) });
|
|
38
|
+
}
|
|
39
|
+
if (!block.assetId || !assets)
|
|
40
|
+
return _jsx("p", { className: "asset-missing", children: "Asset non disponibile." });
|
|
41
|
+
const formula = assets.formulas[block.assetId];
|
|
42
|
+
if (formula)
|
|
43
|
+
return (_jsxs("figure", { className: "formula-asset", children: [_jsxs("div", { className: "formula-row", children: [_jsx("div", { className: "formula-scroll", dangerouslySetInnerHTML: latexMarkup(formula.latex, true) }), formula.officialNumber && _jsxs("span", { className: "formula-number", children: ["[", formula.officialNumber, "]"] })] }), !formula.officialNumber && _jsx("figcaption", { children: _jsx("span", { children: "Formula non numerata" }) })] }));
|
|
44
|
+
const table = assets.tables[block.assetId];
|
|
45
|
+
if (table) {
|
|
46
|
+
const notes = visibleTableNotes(table.notes);
|
|
47
|
+
return (_jsxs("figure", { className: "table-asset", children: [_jsxs("figcaption", { children: [_jsx("strong", { children: table.officialNumber ? `Tab. ${table.officialNumber}` : "Tabella non numerata" }), table.caption && _jsxs("span", { children: [" \u2014 ", table.caption] })] }), _jsx("div", { className: "table-scroll", children: _jsxs("table", { children: [_jsx("thead", { children: table.headers.map((row, rowIndex) => _jsx("tr", { children: row.map((cell, cellIndex) => _jsx("th", { colSpan: cell.colSpan, rowSpan: cell.rowSpan, children: _jsx(MathCell, { cell: cell }) }, `head-${rowIndex}-${cellIndex}`)) }, `head-${rowIndex}`)) }), _jsx("tbody", { children: table.rows.map((row, rowIndex) => _jsx("tr", { children: row.map((cell, cellIndex) => _jsx("td", { colSpan: cell.colSpan, rowSpan: cell.rowSpan, children: _jsx(MathCell, { cell: cell }) }, `body-${rowIndex}-${cellIndex}`)) }, `body-${rowIndex}`)) })] }) }), notes.length > 0 && _jsx("ul", { className: "table-notes", children: notes.map((note) => _jsx("li", { children: note }, note)) })] }));
|
|
48
|
+
}
|
|
49
|
+
const figure = assets.figures[block.assetId];
|
|
50
|
+
if (figure) {
|
|
51
|
+
const width = Math.max(1, Math.round((_b = (_a = figure.region) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 800));
|
|
52
|
+
const height = Math.max(1, Math.round((_d = (_c = figure.region) === null || _c === void 0 ? void 0 : _c.height) !== null && _d !== void 0 ? _d : 600));
|
|
53
|
+
return _jsxs("figure", { className: "figure-asset", children: [_jsx("img", { loading: "lazy", src: `${assetsBaseUrl.replace(/\/+$/u, "")}/${figure.imagePath}`, alt: figure.alt, width: width, height: height }), _jsx("figcaption", { children: _jsx("span", { children: figure.caption }) })] });
|
|
54
|
+
}
|
|
55
|
+
return _jsxs("p", { className: "asset-missing", children: ["Asset non risolto: ", block.assetId] });
|
|
56
|
+
}
|
|
57
|
+
function comparableTitle(value) {
|
|
58
|
+
return value.normalize("NFKC").replace(/\s+/gu, " ").trim().toLocaleLowerCase("it");
|
|
59
|
+
}
|
|
60
|
+
export function isRepeatedUnitTitle(unit, block) {
|
|
61
|
+
if (block.kind !== "heading" || !block.text)
|
|
62
|
+
return false;
|
|
63
|
+
const renderedHeading = comparableTitle(block.text.normalized);
|
|
64
|
+
return renderedHeading === comparableTitle(unit.title) || renderedHeading === comparableTitle(`${unit.numbering.official} ${unit.title}`);
|
|
65
|
+
}
|
|
66
|
+
export function UnitBlocks({ unit, assets, showRaw = false, compact = false, assetsBaseUrl = "/assets" }) {
|
|
67
|
+
return _jsx("div", { className: `normative-copy ${compact ? "normative-copy-compact" : ""}`, children: unit.blocks.map((block, index) => {
|
|
68
|
+
var _a;
|
|
69
|
+
return _jsxs("section", { className: `text-block ${block.kind === "heading" ? "heading-block" : ""} ${block.kind === "list-item" ? "list-item-block" : ""} ${block.assetId ? "asset-block" : ""}`, children: [_jsxs("div", { className: "block-gutter", children: [_jsx("span", { children: String(index + 1).padStart(2, "0") }), block.evidence && _jsxs("span", { title: "Pagina PDF", children: ["p.", block.evidence.pdfPage] })] }), _jsxs("div", { children: [_jsx("span", { className: "block-kind", children: block.kind }), _jsx(BlockContent, { block: block, assets: assets, showRaw: showRaw, assetsBaseUrl: assetsBaseUrl }), ((_a = block.evidence) === null || _a === void 0 ? void 0 : _a.transformations) && block.evidence.transformations.length > 0 && _jsxs("details", { className: "transformations", children: [_jsxs("summary", { children: [block.evidence.transformations.length, " trasformazioni tracciate"] }), _jsx("ul", { children: block.evidence.transformations.map((transformation, transformationIndex) => _jsxs("li", { children: [_jsx("strong", { children: transformation.operation }), transformation.note] }, `${transformation.operation}-${transformationIndex}`)) })] })] })] }, block.blockId);
|
|
70
|
+
}) });
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=CorpusContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CorpusContent.js","sourceRoot":"","sources":["../shared/CorpusContent.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import { type CorpusChunk, type CorpusManifest, type DocumentId, type ViewerMode } from "./corpusData";
|
|
3
|
+
declare const modeOptions: Array<{
|
|
4
|
+
id: ViewerMode;
|
|
5
|
+
label: string;
|
|
6
|
+
}>;
|
|
7
|
+
export interface AuxiliaryPanelContext {
|
|
8
|
+
mode: ViewerMode;
|
|
9
|
+
documentId: DocumentId;
|
|
10
|
+
manifest: CorpusManifest;
|
|
11
|
+
chunk: CorpusChunk | null;
|
|
12
|
+
pageBounds: {
|
|
13
|
+
from: number;
|
|
14
|
+
to: number;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export type AuxiliaryPanel = ReactNode | ((context: AuxiliaryPanelContext) => ReactNode);
|
|
18
|
+
export interface NormativeViewerProps {
|
|
19
|
+
defaultMode?: ViewerMode;
|
|
20
|
+
dataBaseUrl?: string;
|
|
21
|
+
assetsBaseUrl?: string;
|
|
22
|
+
auxiliaryPanel?: AuxiliaryPanel;
|
|
23
|
+
auxiliaryPanelLabel?: string;
|
|
24
|
+
auxiliaryPanelDefaultVisible?: boolean;
|
|
25
|
+
analyticalHref?: string | ((mode: ViewerMode, unitId: string | null) => string);
|
|
26
|
+
className?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function NormativeViewer({ defaultMode, dataBaseUrl, assetsBaseUrl, auxiliaryPanel, auxiliaryPanelLabel, auxiliaryPanelDefaultVisible, analyticalHref, className, }: NormativeViewerProps): import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
export { modeOptions };
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
4
|
+
import { documentForMode, loadChunk, loadDocumentIndex, loadManifest, loadRelations, loadSearchIndex, } from "./corpusData";
|
|
5
|
+
import { BlockContent, isRepeatedUnitTitle } from "./CorpusContent";
|
|
6
|
+
const modeOptions = [
|
|
7
|
+
{ id: "combined", label: "NTC 2018 + Circolare 7/2019" },
|
|
8
|
+
{ id: "ntc", label: "Solo NTC 2018" },
|
|
9
|
+
{ id: "circ", label: "Solo Circolare 7/2019" },
|
|
10
|
+
];
|
|
11
|
+
const hierarchyLabels = ["Capitoli", "Paragrafi", "Sottoparagrafi", "Dettagli"];
|
|
12
|
+
const maxContinuousChapterBytes = 2500000;
|
|
13
|
+
const maxContinuousChapterUnits = 220;
|
|
14
|
+
function depth(unit) {
|
|
15
|
+
return unit.hierarchy.ancestorIds.length;
|
|
16
|
+
}
|
|
17
|
+
function ancestorIdAtDepth(unit, targetDepth) {
|
|
18
|
+
var _a;
|
|
19
|
+
return depth(unit) === targetDepth ? unit.id : (_a = unit.hierarchy.ancestorIds[targetDepth]) !== null && _a !== void 0 ? _a : null;
|
|
20
|
+
}
|
|
21
|
+
function containsUnit(unit, ancestorId) {
|
|
22
|
+
return unit.id === ancestorId || unit.hierarchy.ancestorIds.includes(ancestorId);
|
|
23
|
+
}
|
|
24
|
+
function normalizedQuery(value) {
|
|
25
|
+
return value.normalize("NFKC").trim().toLocaleLowerCase("it");
|
|
26
|
+
}
|
|
27
|
+
function updateDeepLink(mode, unitId, defaultMode) {
|
|
28
|
+
const url = new URL(window.location.href);
|
|
29
|
+
if (mode === defaultMode)
|
|
30
|
+
url.searchParams.delete("mode");
|
|
31
|
+
else
|
|
32
|
+
url.searchParams.set("mode", mode);
|
|
33
|
+
url.searchParams.set("unit", unitId);
|
|
34
|
+
window.history.replaceState(null, "", url);
|
|
35
|
+
}
|
|
36
|
+
function evidencePages(unit, chunk) {
|
|
37
|
+
const pages = unit.blocks.flatMap((block) => {
|
|
38
|
+
var _a, _b, _c;
|
|
39
|
+
if ((_a = block.evidence) === null || _a === void 0 ? void 0 : _a.pdfPage)
|
|
40
|
+
return [block.evidence.pdfPage];
|
|
41
|
+
if (!block.assetId)
|
|
42
|
+
return [];
|
|
43
|
+
const asset = (_c = (_b = chunk.assets.formulas[block.assetId]) !== null && _b !== void 0 ? _b : chunk.assets.tables[block.assetId]) !== null && _c !== void 0 ? _c : chunk.assets.figures[block.assetId];
|
|
44
|
+
return (asset === null || asset === void 0 ? void 0 : asset.pdfPage) ? [asset.pdfPage] : [];
|
|
45
|
+
});
|
|
46
|
+
return [...new Set(pages)].sort((left, right) => left - right);
|
|
47
|
+
}
|
|
48
|
+
function snippet(value) {
|
|
49
|
+
const compact = value.replace(/\s+/gu, " ").trim();
|
|
50
|
+
return compact.length > 145 ? `${compact.slice(0, 142)}…` : compact;
|
|
51
|
+
}
|
|
52
|
+
function relationTargets(resultId, relations) {
|
|
53
|
+
return relations
|
|
54
|
+
.filter((edge) => edge.sourceUnitId === resultId)
|
|
55
|
+
.sort((left, right) => left.targetUnitId.localeCompare(right.targetUnitId, "it", { numeric: true }));
|
|
56
|
+
}
|
|
57
|
+
export function NormativeViewer({ defaultMode = "combined", dataBaseUrl = "/data/codes", assetsBaseUrl = "/assets", auxiliaryPanel, auxiliaryPanelLabel = "PDF ufficiale", auxiliaryPanelDefaultVisible = false, analyticalHref, className, }) {
|
|
58
|
+
var _a, _b, _c, _d, _e;
|
|
59
|
+
const [manifest, setManifest] = useState(null);
|
|
60
|
+
const [index, setIndex] = useState(null);
|
|
61
|
+
const [chunk, setChunk] = useState(null);
|
|
62
|
+
const [scopeRecords, setScopeRecords] = useState([]);
|
|
63
|
+
const [loadedScopeKey, setLoadedScopeKey] = useState("");
|
|
64
|
+
const [mode, setMode] = useState(defaultMode);
|
|
65
|
+
const [activeUnitId, setActiveUnitId] = useState(null);
|
|
66
|
+
const [relations, setRelations] = useState([]);
|
|
67
|
+
const [relatedByTarget, setRelatedByTarget] = useState(new Map());
|
|
68
|
+
const [searchIndex, setSearchIndex] = useState(null);
|
|
69
|
+
const [query, setQuery] = useState("");
|
|
70
|
+
const [loadError, setLoadError] = useState(false);
|
|
71
|
+
const [settingsOpen, setSettingsOpen] = useState(false);
|
|
72
|
+
const [auxiliaryVisible, setAuxiliaryVisible] = useState(Boolean(auxiliaryPanel && auxiliaryPanelDefaultVisible));
|
|
73
|
+
const searchRef = useRef(null);
|
|
74
|
+
const settingsButtonRef = useRef(null);
|
|
75
|
+
const dialogCloseRef = useRef(null);
|
|
76
|
+
const requestedIdRef = useRef(null);
|
|
77
|
+
const deferredQuery = normalizedQuery(query);
|
|
78
|
+
const hasAuxiliary = Boolean(auxiliaryPanel);
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
loadManifest(dataBaseUrl).then((loaded) => {
|
|
81
|
+
const url = new URL(window.location.href);
|
|
82
|
+
const requestedMode = url.searchParams.get("mode");
|
|
83
|
+
if (modeOptions.some((option) => option.id === requestedMode))
|
|
84
|
+
setMode(requestedMode);
|
|
85
|
+
requestedIdRef.current = url.searchParams.get("unit");
|
|
86
|
+
setActiveUnitId(requestedIdRef.current);
|
|
87
|
+
setManifest(loaded);
|
|
88
|
+
}).catch(() => setLoadError(true));
|
|
89
|
+
}, [dataBaseUrl]);
|
|
90
|
+
const documentId = documentForMode(mode);
|
|
91
|
+
useEffect(() => {
|
|
92
|
+
if (!manifest)
|
|
93
|
+
return;
|
|
94
|
+
let cancelled = false;
|
|
95
|
+
loadDocumentIndex(manifest, documentId, dataBaseUrl).then((loaded) => {
|
|
96
|
+
var _a;
|
|
97
|
+
if (cancelled)
|
|
98
|
+
return;
|
|
99
|
+
setIndex(loaded);
|
|
100
|
+
const requested = loaded.units.find((unit) => unit.id === requestedIdRef.current);
|
|
101
|
+
const initial = (_a = requested !== null && requested !== void 0 ? requested : loaded.units.find((unit) => unit.numbering.official === (documentId === "ntc2018" ? "4.1" : "C4.1"))) !== null && _a !== void 0 ? _a : loaded.units[0];
|
|
102
|
+
if (initial) {
|
|
103
|
+
requestedIdRef.current = initial.id;
|
|
104
|
+
setActiveUnitId(initial.id);
|
|
105
|
+
updateDeepLink(mode, initial.id, defaultMode);
|
|
106
|
+
}
|
|
107
|
+
}).catch(() => setLoadError(true));
|
|
108
|
+
return () => { cancelled = true; };
|
|
109
|
+
}, [dataBaseUrl, defaultMode, documentId, manifest, mode]);
|
|
110
|
+
const activeSummary = (_a = index === null || index === void 0 ? void 0 : index.units.find((unit) => unit.id === activeUnitId)) !== null && _a !== void 0 ? _a : null;
|
|
111
|
+
const activeChapterId = activeSummary ? ancestorIdAtDepth(activeSummary, 0) : null;
|
|
112
|
+
const activeParagraphId = activeSummary && depth(activeSummary) >= 1 ? ancestorIdAtDepth(activeSummary, 1) : null;
|
|
113
|
+
const activeSubparagraphId = activeSummary && depth(activeSummary) >= 2 ? ancestorIdAtDepth(activeSummary, 2) : null;
|
|
114
|
+
const scope = useMemo(() => {
|
|
115
|
+
var _a;
|
|
116
|
+
if (!index || !activeSummary || !activeChapterId) {
|
|
117
|
+
return { mode: "paragraph", summaries: [], chapterId: null, paragraphId: null };
|
|
118
|
+
}
|
|
119
|
+
const chapterSummaries = index.units.filter((unit) => containsUnit(unit, activeChapterId));
|
|
120
|
+
const chunkBytes = new Map(((_a = manifest === null || manifest === void 0 ? void 0 : manifest.chunks) !== null && _a !== void 0 ? _a : []).map((entry) => [entry.path, entry.bytes]));
|
|
121
|
+
const chapterBytes = [...new Set(chapterSummaries.map((unit) => unit.chunkPath))].reduce((total, path) => { var _a; return total + ((_a = chunkBytes.get(path)) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
122
|
+
const chapterCanBeContinuous = chapterSummaries.length <= maxContinuousChapterUnits && chapterBytes <= maxContinuousChapterBytes;
|
|
123
|
+
if (depth(activeSummary) === 0 && chapterCanBeContinuous) {
|
|
124
|
+
return { mode: "chapter", summaries: chapterSummaries, chapterId: activeChapterId, paragraphId: null };
|
|
125
|
+
}
|
|
126
|
+
if (depth(activeSummary) === 0) {
|
|
127
|
+
const paragraphSummaries = index.units.filter((unit) => unit.hierarchy.parentId === activeChapterId && depth(unit) === 1);
|
|
128
|
+
const chapter = index.units.find((unit) => unit.id === activeChapterId);
|
|
129
|
+
return { mode: "paragraph", summaries: [chapter, ...paragraphSummaries].filter(Boolean), chapterId: activeChapterId, paragraphId: null };
|
|
130
|
+
}
|
|
131
|
+
const paragraphId = activeParagraphId !== null && activeParagraphId !== void 0 ? activeParagraphId : activeChapterId;
|
|
132
|
+
return { mode: "paragraph", summaries: index.units.filter((unit) => containsUnit(unit, paragraphId)), chapterId: activeChapterId, paragraphId };
|
|
133
|
+
}, [activeChapterId, activeParagraphId, activeSummary, index, manifest]);
|
|
134
|
+
const scopePaths = useMemo(() => [...new Set(scope.summaries.map((unit) => unit.chunkPath))], [scope.summaries]);
|
|
135
|
+
const scopeKey = useMemo(() => scope.summaries.map((unit) => unit.id).join("|"), [scope.summaries]);
|
|
136
|
+
const scopeLoading = scope.summaries.length > 0 && loadedScopeKey !== scopeKey;
|
|
137
|
+
useEffect(() => {
|
|
138
|
+
if (!activeSummary)
|
|
139
|
+
return;
|
|
140
|
+
let cancelled = false;
|
|
141
|
+
loadChunk(activeSummary.chunkPath, dataBaseUrl).then((loaded) => {
|
|
142
|
+
if (!cancelled)
|
|
143
|
+
setChunk(loaded);
|
|
144
|
+
}).catch(() => setLoadError(true));
|
|
145
|
+
return () => { cancelled = true; };
|
|
146
|
+
}, [activeSummary, dataBaseUrl]);
|
|
147
|
+
useEffect(() => {
|
|
148
|
+
if (!scope.summaries.length)
|
|
149
|
+
return;
|
|
150
|
+
let cancelled = false;
|
|
151
|
+
Promise.all(scopePaths.map(async (path) => [path, await loadChunk(path, dataBaseUrl)])).then((loadedChunks) => {
|
|
152
|
+
if (cancelled)
|
|
153
|
+
return;
|
|
154
|
+
const chunks = new Map(loadedChunks);
|
|
155
|
+
const records = scope.summaries.flatMap((summary) => {
|
|
156
|
+
const loadedChunk = chunks.get(summary.chunkPath);
|
|
157
|
+
const unit = loadedChunk === null || loadedChunk === void 0 ? void 0 : loadedChunk.units.find((candidate) => candidate.id === summary.id);
|
|
158
|
+
return loadedChunk && unit ? [{ summary, unit, chunk: loadedChunk }] : [];
|
|
159
|
+
});
|
|
160
|
+
setScopeRecords(records);
|
|
161
|
+
setLoadedScopeKey(scopeKey);
|
|
162
|
+
}).catch(() => {
|
|
163
|
+
if (!cancelled) {
|
|
164
|
+
setLoadError(true);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
return () => { cancelled = true; };
|
|
168
|
+
}, [dataBaseUrl, scope.summaries, scopeKey, scopePaths]);
|
|
169
|
+
useEffect(() => {
|
|
170
|
+
if (!manifest || mode !== "combined")
|
|
171
|
+
return;
|
|
172
|
+
let cancelled = false;
|
|
173
|
+
loadRelations(manifest, dataBaseUrl).then(({ relations: loadedRelations }) => {
|
|
174
|
+
if (!cancelled)
|
|
175
|
+
setRelations(loadedRelations);
|
|
176
|
+
}).catch(() => setLoadError(true));
|
|
177
|
+
return () => { cancelled = true; };
|
|
178
|
+
}, [dataBaseUrl, manifest, mode]);
|
|
179
|
+
useEffect(() => {
|
|
180
|
+
if (mode !== "combined" || scopeRecords.length === 0 || relations.length === 0)
|
|
181
|
+
return;
|
|
182
|
+
let cancelled = false;
|
|
183
|
+
const targetIds = new Set(scopeRecords.map(({ unit }) => unit.id));
|
|
184
|
+
const incoming = relations.filter((edge) => targetIds.has(edge.targetUnitId));
|
|
185
|
+
Promise.all([...new Set(incoming.map((edge) => edge.sourceChunkPath))].map(async (path) => [path, await loadChunk(path, dataBaseUrl)])).then((loadedChunks) => {
|
|
186
|
+
var _a;
|
|
187
|
+
if (cancelled)
|
|
188
|
+
return;
|
|
189
|
+
const relatedChunks = new Map(loadedChunks);
|
|
190
|
+
const grouped = new Map();
|
|
191
|
+
for (const edge of incoming) {
|
|
192
|
+
const sourceChunk = relatedChunks.get(edge.sourceChunkPath);
|
|
193
|
+
const unit = sourceChunk === null || sourceChunk === void 0 ? void 0 : sourceChunk.units.find((candidate) => candidate.id === edge.sourceUnitId);
|
|
194
|
+
if (!sourceChunk || !unit)
|
|
195
|
+
continue;
|
|
196
|
+
const group = (_a = grouped.get(edge.targetUnitId)) !== null && _a !== void 0 ? _a : [];
|
|
197
|
+
group.push({ edge, unit, chunk: sourceChunk });
|
|
198
|
+
grouped.set(edge.targetUnitId, group);
|
|
199
|
+
}
|
|
200
|
+
for (const group of grouped.values())
|
|
201
|
+
group.sort((left, right) => left.unit.numbering.sortKey.localeCompare(right.unit.numbering.sortKey, "it", { numeric: true }));
|
|
202
|
+
setRelatedByTarget(grouped);
|
|
203
|
+
}).catch(() => { if (!cancelled)
|
|
204
|
+
setLoadError(true); });
|
|
205
|
+
return () => { cancelled = true; };
|
|
206
|
+
}, [dataBaseUrl, mode, relations, scopeRecords]);
|
|
207
|
+
useEffect(() => {
|
|
208
|
+
if (!manifest || deferredQuery.length < 2 || searchIndex)
|
|
209
|
+
return;
|
|
210
|
+
loadSearchIndex(manifest, dataBaseUrl).then(setSearchIndex).catch(() => setLoadError(true));
|
|
211
|
+
}, [dataBaseUrl, deferredQuery, manifest, searchIndex]);
|
|
212
|
+
useEffect(() => {
|
|
213
|
+
const onKeyDown = (event) => {
|
|
214
|
+
var _a, _b;
|
|
215
|
+
if (event.key === "/" && ((_a = window.document.activeElement) === null || _a === void 0 ? void 0 : _a.tagName.toLowerCase()) !== "input") {
|
|
216
|
+
event.preventDefault();
|
|
217
|
+
(_b = searchRef.current) === null || _b === void 0 ? void 0 : _b.focus();
|
|
218
|
+
}
|
|
219
|
+
if (event.key === "Escape" && settingsOpen)
|
|
220
|
+
setSettingsOpen(false);
|
|
221
|
+
};
|
|
222
|
+
window.addEventListener("keydown", onKeyDown);
|
|
223
|
+
return () => window.removeEventListener("keydown", onKeyDown);
|
|
224
|
+
}, [settingsOpen]);
|
|
225
|
+
useEffect(() => {
|
|
226
|
+
var _a, _b;
|
|
227
|
+
if (settingsOpen)
|
|
228
|
+
(_a = dialogCloseRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
229
|
+
else
|
|
230
|
+
(_b = settingsButtonRef.current) === null || _b === void 0 ? void 0 : _b.focus();
|
|
231
|
+
}, [settingsOpen]);
|
|
232
|
+
const hierarchy = useMemo(() => {
|
|
233
|
+
if (!index)
|
|
234
|
+
return [[], [], [], []];
|
|
235
|
+
const chapters = index.units.filter((unit) => depth(unit) === 0);
|
|
236
|
+
const paragraphs = activeChapterId ? index.units.filter((unit) => depth(unit) === 1 && unit.hierarchy.parentId === activeChapterId) : [];
|
|
237
|
+
const subparagraphs = activeParagraphId ? index.units.filter((unit) => depth(unit) === 2 && unit.hierarchy.parentId === activeParagraphId) : [];
|
|
238
|
+
const detailsAnchor = activeSubparagraphId !== null && activeSubparagraphId !== void 0 ? activeSubparagraphId : activeParagraphId;
|
|
239
|
+
const details = detailsAnchor ? index.units.filter((unit) => depth(unit) >= 3 && unit.hierarchy.ancestorIds.includes(detailsAnchor)) : [];
|
|
240
|
+
return [chapters, paragraphs, subparagraphs, details];
|
|
241
|
+
}, [activeChapterId, activeParagraphId, activeSubparagraphId, index]);
|
|
242
|
+
const pageBounds = useMemo(() => {
|
|
243
|
+
if (!scopeRecords.length)
|
|
244
|
+
return { from: 1, to: 1 };
|
|
245
|
+
const pages = scopeRecords.flatMap(({ unit, chunk: loadedChunk }) => evidencePages(unit, loadedChunk));
|
|
246
|
+
return pages.length > 0 ? { from: Math.min(...pages), to: Math.max(...pages) } : { from: 1, to: 1 };
|
|
247
|
+
}, [scopeRecords]);
|
|
248
|
+
const searchResults = useMemo(() => {
|
|
249
|
+
if (!searchIndex || deferredQuery.length < 2)
|
|
250
|
+
return [];
|
|
251
|
+
return searchIndex.units.filter((unit) => {
|
|
252
|
+
if (mode === "ntc" && unit.document !== "ntc2018")
|
|
253
|
+
return false;
|
|
254
|
+
if (mode === "circ" && unit.document !== "circ2019")
|
|
255
|
+
return false;
|
|
256
|
+
return `${unit.numbering} ${unit.title} ${unit.text}`.normalize("NFKC").toLocaleLowerCase("it").includes(deferredQuery);
|
|
257
|
+
}).slice(0, 12);
|
|
258
|
+
}, [deferredQuery, mode, searchIndex]);
|
|
259
|
+
function selectUnit(unit) {
|
|
260
|
+
requestedIdRef.current = unit.id;
|
|
261
|
+
setActiveUnitId(unit.id);
|
|
262
|
+
updateDeepLink(mode, unit.id, defaultMode);
|
|
263
|
+
}
|
|
264
|
+
useEffect(() => {
|
|
265
|
+
if (scopeLoading || !activeUnitId || scopeRecords.length === 0)
|
|
266
|
+
return;
|
|
267
|
+
requestAnimationFrame(() => { var _a; return (_a = window.document.querySelector(`[data-scv-text-unit="${CSS.escape(activeUnitId)}"]`)) === null || _a === void 0 ? void 0 : _a.scrollIntoView({ block: "start" }); });
|
|
268
|
+
}, [activeUnitId, scopeLoading, scopeRecords]);
|
|
269
|
+
function changeMode(nextMode, preferredUnitId = null) {
|
|
270
|
+
var _a;
|
|
271
|
+
const keepCurrent = activeSummary && (nextMode === "combined" ? activeSummary.document === "ntc2018" : activeSummary.document === documentForMode(nextMode));
|
|
272
|
+
requestedIdRef.current = preferredUnitId !== null && preferredUnitId !== void 0 ? preferredUnitId : (keepCurrent ? (_a = activeSummary === null || activeSummary === void 0 ? void 0 : activeSummary.id) !== null && _a !== void 0 ? _a : null : null);
|
|
273
|
+
setMode(nextMode);
|
|
274
|
+
setIndex(null);
|
|
275
|
+
setChunk(null);
|
|
276
|
+
setScopeRecords([]);
|
|
277
|
+
setRelatedByTarget(new Map());
|
|
278
|
+
setSettingsOpen(false);
|
|
279
|
+
}
|
|
280
|
+
function selectSearchResult(result) {
|
|
281
|
+
setQuery("");
|
|
282
|
+
if (result.document === "ntc2018" && index) {
|
|
283
|
+
const summary = index.units.find((unit) => unit.id === result.id);
|
|
284
|
+
if (summary)
|
|
285
|
+
selectUnit(summary);
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
const explicit = mode === "combined" ? relationTargets(result.id, relations)[0] : null;
|
|
289
|
+
if (explicit && index) {
|
|
290
|
+
const summary = index.units.find((unit) => unit.id === explicit.targetUnitId);
|
|
291
|
+
if (summary)
|
|
292
|
+
selectUnit(summary);
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
if (mode === "combined")
|
|
296
|
+
changeMode("circ", result.id);
|
|
297
|
+
}
|
|
298
|
+
function submitSearch(event) {
|
|
299
|
+
event.preventDefault();
|
|
300
|
+
if (searchResults[0])
|
|
301
|
+
selectSearchResult(searchResults[0]);
|
|
302
|
+
}
|
|
303
|
+
const renderAuxiliary = !manifest
|
|
304
|
+
? null
|
|
305
|
+
: typeof auxiliaryPanel === "function"
|
|
306
|
+
? auxiliaryPanel({ mode, documentId, manifest, chunk, pageBounds })
|
|
307
|
+
: auxiliaryPanel;
|
|
308
|
+
const analyticalUrl = analyticalHref ? (typeof analyticalHref === "function" ? analyticalHref(mode, activeUnitId) : analyticalHref) : null;
|
|
309
|
+
const scopeNote = scope.mode === "chapter"
|
|
310
|
+
? `Continuità capitolo ${(_b = activeSummary === null || activeSummary === void 0 ? void 0 : activeSummary.numbering.official) !== null && _b !== void 0 ? _b : ""} · ${scope.summaries.length} unità · ${scopePaths.length} chunk`
|
|
311
|
+
: scope.paragraphId
|
|
312
|
+
? `Continuità paragrafo ${(_d = (_c = index === null || index === void 0 ? void 0 : index.units.find((unit) => unit.id === scope.paragraphId)) === null || _c === void 0 ? void 0 : _c.numbering.official) !== null && _d !== void 0 ? _d : ""} · ${scope.summaries.length} unità · ${scopePaths.length} chunk`
|
|
313
|
+
: `Capitolo ${(_e = activeSummary === null || activeSummary === void 0 ? void 0 : activeSummary.numbering.official) !== null && _e !== void 0 ? _e : ""} · continuità ridotta ai paragrafi per la dimensione del capitolo`;
|
|
314
|
+
function renderRecord({ unit, chunk: unitChunk }) {
|
|
315
|
+
var _a;
|
|
316
|
+
return _jsxs("section", { className: `scv-unit scv-unit-depth-${Math.min(depth(unit), 4)}`, "data-scv-text-unit": unit.id, children: [_jsxs("h2", { children: [_jsx("span", { children: unit.numbering.official }), unit.title] }), _jsx("div", { className: "scv-unit-blocks", children: unit.blocks.filter((block) => !isRepeatedUnitTitle(unit, block)).map((block) => _jsx("div", { className: `scv-block scv-block-${block.kind}`, children: _jsx(BlockContent, { block: block, assets: unitChunk.assets, assetsBaseUrl: assetsBaseUrl }) }, block.blockId)) }), mode === "combined" && ((_a = relatedByTarget.get(unit.id)) !== null && _a !== void 0 ? _a : []).map(({ edge, unit: relatedUnit, chunk: relatedChunk }) => _jsxs("section", { className: "scv-related-unit", "data-provenance": "Circolare 7/2019", children: [_jsx("header", { children: _jsxs("h3", { children: [_jsx("span", { children: relatedUnit.numbering.official }), relatedUnit.title] }) }), _jsx("div", { className: "scv-unit-blocks", children: relatedUnit.blocks.filter((block) => !isRepeatedUnitTitle(relatedUnit, block)).map((block) => _jsx("div", { className: `scv-block scv-block-${block.kind}`, children: _jsx(BlockContent, { block: block, assets: relatedChunk.assets, assetsBaseUrl: assetsBaseUrl }) }, block.blockId)) })] }, edge.relationId))] }, unit.id);
|
|
317
|
+
}
|
|
318
|
+
if (loadError)
|
|
319
|
+
return _jsxs("main", { className: "scv-fatal", children: [_jsx("strong", { children: "Il corpus non \u00E8 disponibile." }), _jsx("span", { children: "Rigenera gli artefatti del viewer e ricarica la pagina." })] });
|
|
320
|
+
return _jsxs("div", { className: `scv-root ${auxiliaryVisible ? "scv-has-auxiliary" : ""} ${className !== null && className !== void 0 ? className : ""}`, children: [_jsxs("aside", { className: "scv-index-pane", "aria-label": "Indice gerarchico", children: [_jsxs("div", { className: "scv-search-toolbar", children: [_jsxs("form", { className: "scv-search-form", role: "search", onSubmit: submitSearch, children: [_jsx("span", { "aria-hidden": "true", children: "\u2315" }), _jsx("input", { ref: searchRef, type: "search", value: query, onChange: (event) => setQuery(event.target.value), placeholder: "Cerca nella normativa\u2026", "aria-label": "Cerca nella normativa" }), query && _jsx("button", { type: "button", className: "scv-clear-search", onClick: () => setQuery(""), "aria-label": "Cancella ricerca", children: "\u00D7" }), _jsx("kbd", { children: "/" })] }), _jsx("button", { ref: settingsButtonRef, type: "button", className: "scv-settings-button", onClick: () => setSettingsOpen(true), "aria-label": "Impostazioni consultazione", "aria-haspopup": "dialog", children: _jsx("span", { "aria-hidden": "true", children: "\u2699" }) }), deferredQuery.length >= 2 && _jsx("div", { className: "scv-search-results", role: "listbox", "aria-label": "Risultati ricerca", children: !searchIndex ? _jsx("p", { className: "scv-search-status", children: "Caricamento indice di ricerca\u2026" }) : searchResults.length === 0 ? _jsx("p", { className: "scv-search-status", children: "Nessun risultato nella modalit\u00E0 corrente." }) : searchResults.map((result) => _jsxs("button", { type: "button", role: "option", "aria-selected": false, className: "scv-search-result", onClick: () => selectSearchResult(result), children: [_jsxs("span", { children: [result.document === "ntc2018" ? "NTC 2018" : "Circolare 7/2019", " \u00B7 ", result.numbering] }), _jsx("strong", { children: result.title }), _jsx("small", { children: snippet(result.text || result.title) })] }, result.id)) })] }), _jsx("div", { className: "scv-index-grid", children: hierarchy.map((level, levelIndex) => _jsxs("section", { className: "scv-index-cell", children: [_jsxs("header", { children: [_jsx("span", { children: hierarchyLabels[levelIndex] }), _jsx("b", { children: level.length })] }), _jsx("div", { className: "scv-index-list", children: !index ? _jsx(LoadingRows, {}) : level.map((unit) => _jsxs("button", { type: "button", "data-index-unit": unit.id, className: activeUnitId === unit.id ? "active" : "", onClick: () => selectUnit(unit), title: `${unit.numbering.official} ${unit.title}`, "aria-current": activeUnitId === unit.id ? "page" : undefined, children: [_jsx("strong", { children: unit.numbering.official }), _jsx("span", { children: unit.title })] }, unit.id)) })] }, levelIndex)) })] }), _jsx("article", { className: "scv-text-pane", "aria-label": "Corpus JSON", children: scopeLoading || scope.summaries.length === 0 || scopeRecords.length === 0 ? _jsx(LoadingPanel, { label: "Caricamento della continuit\u00E0 normativa\u2026" }) : _jsxs("div", { className: "scv-text-flow", children: [_jsxs("p", { className: "scv-chunk-note", children: [scopeNote, " \u00B7 structural-codes ", scopeRecords[0].chunk.structuralCodesVersion] }), scopeRecords.map(renderRecord), _jsx("div", { className: "scv-end-note", children: "Fine della continuit\u00E0 caricata." })] }) }), auxiliaryVisible && renderAuxiliary && _jsx("aside", { className: "scv-auxiliary-pane", "aria-label": auxiliaryPanelLabel, children: renderAuxiliary }), settingsOpen && _jsx("div", { className: "scv-dialog-backdrop", role: "presentation", onMouseDown: (event) => { if (event.target === event.currentTarget)
|
|
321
|
+
setSettingsOpen(false); }, children: _jsxs("section", { className: "scv-dialog", role: "dialog", "aria-modal": "true", "aria-labelledby": "scv-settings-title", children: [_jsxs("header", { children: [_jsx("h2", { id: "scv-settings-title", children: "Impostazioni consultazione" }), _jsx("button", { ref: dialogCloseRef, type: "button", onClick: () => setSettingsOpen(false), "aria-label": "Chiudi impostazioni", children: "\u00D7" })] }), _jsxs("fieldset", { children: [_jsx("legend", { children: "Visualizzazione" }), modeOptions.map((option) => _jsxs("label", { children: [_jsx("input", { type: "radio", name: "scv-mode", value: option.id, checked: mode === option.id, onChange: () => changeMode(option.id) }), option.label] }, option.id))] }), hasAuxiliary && _jsxs("label", { className: "scv-auxiliary-toggle", children: [_jsx("input", { type: "checkbox", checked: auxiliaryVisible, onChange: (event) => setAuxiliaryVisible(event.target.checked) }), "Mostra ", auxiliaryPanelLabel.toLowerCase()] }), analyticalUrl && _jsx("a", { className: "scv-analytical-link", href: analyticalUrl, children: "Apri viewer analitico" })] }) })] });
|
|
322
|
+
}
|
|
323
|
+
function LoadingRows() {
|
|
324
|
+
return _jsx("div", { className: "scv-loading-rows", "aria-label": "Caricamento", children: Array.from({ length: 7 }, (_, index) => _jsx("span", {}, index)) });
|
|
325
|
+
}
|
|
326
|
+
function LoadingPanel({ label }) {
|
|
327
|
+
return _jsxs("div", { className: "scv-loading", children: [_jsx("span", {}), _jsx("strong", { children: label })] });
|
|
328
|
+
}
|
|
329
|
+
export { modeOptions };
|
|
330
|
+
//# sourceMappingURL=NormativeViewer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NormativeViewer.js","sourceRoot":"","sources":["../shared/NormativeViewer.tsx"],"names":[],"mappings":"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"}
|