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 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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"}