structural-codes-viewer 0.1.0-alpha.1 → 0.1.0-alpha.3
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/LICENSE +501 -0
- package/NOTICE +16 -0
- package/README.md +57 -68
- package/package-dist/CorpusContent.d.ts +44 -9
- package/package-dist/CorpusContent.js +452 -26
- package/package-dist/CorpusContent.js.map +1 -1
- package/package-dist/NormativeViewer.d.ts +23 -2
- package/package-dist/NormativeViewer.js +1699 -234
- package/package-dist/NormativeViewer.js.map +1 -1
- package/package-dist/ReferenceTools.d.ts +49 -0
- package/package-dist/ReferenceTools.js +14 -0
- package/package-dist/ReferenceTools.js.map +1 -0
- package/package-dist/annotations/AnnotationUi.d.ts +57 -0
- package/package-dist/annotations/AnnotationUi.js +114 -0
- package/package-dist/annotations/AnnotationUi.js.map +1 -0
- package/package-dist/annotations/annotationTargets.d.ts +39 -0
- package/package-dist/annotations/annotationTargets.js +94 -0
- package/package-dist/annotations/annotationTargets.js.map +1 -0
- package/package-dist/annotations/exportImport.d.ts +6 -0
- package/package-dist/annotations/exportImport.js +30 -0
- package/package-dist/annotations/exportImport.js.map +1 -0
- package/package-dist/annotations/index.d.ts +4 -0
- package/package-dist/annotations/index.js +5 -0
- package/package-dist/annotations/index.js.map +1 -0
- package/package-dist/annotations/indexedDb.d.ts +21 -0
- package/package-dist/annotations/indexedDb.js +210 -0
- package/package-dist/annotations/indexedDb.js.map +1 -0
- package/package-dist/annotations/schema.d.ts +8 -0
- package/package-dist/annotations/schema.js +102 -0
- package/package-dist/annotations/schema.js.map +1 -0
- package/package-dist/annotations/types.d.ts +52 -0
- package/package-dist/annotations/types.js +18 -0
- package/package-dist/annotations/types.js.map +1 -0
- package/package-dist/chunkNavigation.d.ts +12 -0
- package/package-dist/chunkNavigation.js +44 -0
- package/package-dist/chunkNavigation.js.map +1 -0
- package/package-dist/corpusData.d.ts +176 -33
- package/package-dist/corpusData.js +52 -0
- package/package-dist/corpusData.js.map +1 -1
- package/package-dist/crossReferences.d.ts +46 -0
- package/package-dist/crossReferences.js +198 -0
- package/package-dist/crossReferences.js.map +1 -0
- package/package-dist/generate-artifacts.mjs +47 -12
- package/package-dist/globalScrubber.d.ts +10 -0
- package/package-dist/globalScrubber.js +85 -0
- package/package-dist/globalScrubber.js.map +1 -0
- package/package-dist/permalinks.d.ts +22 -0
- package/package-dist/permalinks.js +36 -0
- package/package-dist/permalinks.js.map +1 -0
- package/package-dist/searchClient.d.ts +22 -0
- package/package-dist/searchClient.js +133 -0
- package/package-dist/searchClient.js.map +1 -0
- package/package-dist/searchEngine.d.ts +68 -0
- package/package-dist/searchEngine.js +558 -0
- package/package-dist/searchEngine.js.map +1 -0
- package/package-dist/searchWorker.d.ts +1 -0
- package/package-dist/searchWorker.js +32 -0
- package/package-dist/searchWorker.js.map +1 -0
- package/package-dist/styles.css +762 -182
- package/package-dist/tableCaptions.d.mts +3 -0
- package/package-dist/tableCaptions.mjs +35 -0
- package/package-dist/tableCaptions.mjs.map +1 -0
- package/package.json +18 -14
package/README.md
CHANGED
|
@@ -1,102 +1,91 @@
|
|
|
1
1
|
# structural-codes-viewer
|
|
2
2
|
|
|
3
|
-
`structural-codes-viewer` è
|
|
4
|
-
`structural-codes`.
|
|
5
|
-
locale usato per la revisione editoriale.
|
|
3
|
+
`structural-codes-viewer` è il package React per consultare il corpus
|
|
4
|
+
`structural-codes`. La stessa directory contiene l'applicazione standalone.
|
|
6
5
|
|
|
7
|
-
|
|
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.
|
|
6
|
+
## Boundary
|
|
14
7
|
|
|
15
|
-
|
|
8
|
+
- `structural-codes`: corpus, schema, provenance e helper non React;
|
|
9
|
+
- `structural-codes-viewer`: viewer React, ricerca, navigazione, annotazioni,
|
|
10
|
+
client lazy e generatore di artefatti;
|
|
11
|
+
- `viewer/app/`: composizione standalone non pubblicata nel package.
|
|
12
|
+
|
|
13
|
+
React e ReactDOM sono peer dependency. Il package non dipende a runtime da
|
|
14
|
+
Next/Vinext o `pdfjs-dist`.
|
|
15
|
+
|
|
16
|
+
## Viewer React
|
|
16
17
|
|
|
17
18
|
```tsx
|
|
18
|
-
import { NormativeViewer } from "structural-codes-viewer";
|
|
19
|
+
import { NormativeViewer, type AuxiliaryPanelContext } from "structural-codes-viewer";
|
|
19
20
|
import "structural-codes-viewer/styles.css";
|
|
20
21
|
|
|
22
|
+
function Panel({ context }: { context: AuxiliaryPanelContext }) {
|
|
23
|
+
return <aside><button onClick={context.close}>Chiudi</button></aside>;
|
|
24
|
+
}
|
|
25
|
+
|
|
21
26
|
export function Normativa() {
|
|
22
|
-
return <NormativeViewer
|
|
27
|
+
return <NormativeViewer
|
|
28
|
+
defaultMode="combined"
|
|
29
|
+
dataBaseUrl="/data/codes"
|
|
30
|
+
auxiliaryPanel={(context) => <Panel context={context} />}
|
|
31
|
+
auxiliaryPanelModes={["ntc", "circ", "combined"]}
|
|
32
|
+
/>;
|
|
23
33
|
}
|
|
24
34
|
```
|
|
25
35
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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.
|
|
36
|
+
`NormativeViewer` espone `dataBaseUrl`, `assetsBaseUrl`, `auxiliaryPanel`,
|
|
37
|
+
`AuxiliaryPanelContext`, controlli di visibilità del pannello e `annotationStore`.
|
|
38
|
+
Il pannello generico consente ai consumer di montare i propri componenti.
|
|
39
|
+
Navigazione, ricerca, annotazioni, note e segnalibri sono indipendenti dalla
|
|
40
|
+
composizione standalone. Sono pubblici anche `./annotations`, `./corpus-data`,
|
|
41
|
+
`./generate-artifacts` e `./styles.css`.
|
|
48
42
|
|
|
49
43
|
## Artefatti
|
|
50
44
|
|
|
51
|
-
|
|
52
|
-
|
|
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
|
|
45
|
+
```bash
|
|
46
|
+
npm run sync:corpus
|
|
63
47
|
```
|
|
64
48
|
|
|
65
|
-
Il
|
|
66
|
-
|
|
67
|
-
|
|
49
|
+
Il comando genera sotto `viewer/public/data/codes/` manifest, indici documento,
|
|
50
|
+
chunk, relazioni, riferimenti e indice di ricerca. `viewer/public/` è ignorato
|
|
51
|
+
da Git e rigenerabile dal corpus canonico.
|
|
52
|
+
|
|
53
|
+
Un consumer può usare la CLI inclusa:
|
|
68
54
|
|
|
69
55
|
```bash
|
|
70
56
|
npx structural-codes-viewer --source structural-codes \
|
|
71
57
|
--output public/data/codes --assets public/assets
|
|
72
58
|
```
|
|
73
59
|
|
|
74
|
-
Il
|
|
75
|
-
`structural-codes` installato
|
|
60
|
+
Il package viewer non include il corpus completo: il generatore legge il
|
|
61
|
+
package `structural-codes` installato nel consumer.
|
|
76
62
|
|
|
77
|
-
##
|
|
63
|
+
## Standalone
|
|
78
64
|
|
|
79
65
|
```bash
|
|
66
|
+
npm ci
|
|
80
67
|
npm run dev
|
|
81
|
-
npm run build
|
|
82
|
-
npm test
|
|
83
68
|
```
|
|
84
69
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
esplicita “Apri PDF ufficiale”; il PDF non entra nel package shared.
|
|
88
|
-
|
|
89
|
-
## Package
|
|
70
|
+
Il PDF ufficiale è un ausilio locale di debug e non entra nel build pubblico o
|
|
71
|
+
nel package.
|
|
90
72
|
|
|
91
|
-
|
|
92
|
-
pubblicazione, dopo review:
|
|
73
|
+
## Sviluppo e verifica
|
|
93
74
|
|
|
94
75
|
```bash
|
|
95
|
-
npm run
|
|
96
|
-
npm
|
|
97
|
-
npm
|
|
76
|
+
npm run typecheck
|
|
77
|
+
npm run lint
|
|
78
|
+
npm test
|
|
79
|
+
npm run check
|
|
80
|
+
npm run pack:verify
|
|
81
|
+
npm run test:consumer
|
|
98
82
|
```
|
|
99
83
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
84
|
+
`check` costruisce app e libreria ed esegue i test del viewer e del boundary.
|
|
85
|
+
`pack:verify` mostra il contenuto del tarball. `test:consumer` crea tarball
|
|
86
|
+
reali dei due package, li installa in una nuova app Next e verifica l'API
|
|
87
|
+
pubblica del viewer, inclusa l'integrazione tramite `auxiliaryPanel`.
|
|
88
|
+
|
|
89
|
+
Il tarball contiene soltanto `package-dist/`, README, licenza, notice e
|
|
90
|
+
manifest. Restano fuori `app/`, test, PDF, corpus completo, `.env` e output
|
|
91
|
+
standalone.
|
|
@@ -1,16 +1,51 @@
|
|
|
1
|
-
import type { AssetBundle, CorpusBlock, CorpusUnit } from "./corpusData";
|
|
1
|
+
import type { AssetBundle, CorpusBlock, DocumentId, InlineSegment, CorpusUnit } from "./corpusData";
|
|
2
|
+
export declare function leadingMathLabelEnd(inline: InlineSegment[]): number;
|
|
3
|
+
export declare function hasOfficialListMarker(block: CorpusBlock): boolean;
|
|
4
|
+
export declare function hasAlphaRatioListLayout(block: CorpusBlock, sourceUnitId?: string): boolean;
|
|
5
|
+
export declare function hasInferredAlphaRatioListMarker(block: CorpusBlock, sourceUnitId?: string): boolean;
|
|
6
|
+
export declare function hasAlphabeticListMarker(block: CorpusBlock): boolean;
|
|
7
|
+
export declare function hasSimpleDashMarker(block: CorpusBlock): boolean;
|
|
8
|
+
export declare function hasNoListMarker(block: CorpusBlock): boolean;
|
|
9
|
+
export declare function listMarkerClass(block: CorpusBlock): "" | "list-item-with-bullet";
|
|
10
|
+
export declare function listLevelClass(block: CorpusBlock): string;
|
|
11
|
+
export declare function indentLevelClass(block: CorpusBlock): string;
|
|
12
|
+
export declare function hasLeadingMath(block: CorpusBlock): boolean;
|
|
13
|
+
export declare function hasAlignedListContinuation(block: CorpusBlock): boolean;
|
|
14
|
+
export declare function hasLeadingEmphasisLabel(block: CorpusBlock): boolean;
|
|
15
|
+
export declare function leadingLabelKind(block: CorpusBlock): "math" | "emphasis" | null;
|
|
16
|
+
export type CorpusBlockGroup = {
|
|
17
|
+
kind: "label-list";
|
|
18
|
+
blocks: CorpusBlock[];
|
|
19
|
+
} | {
|
|
20
|
+
kind: "block";
|
|
21
|
+
block: CorpusBlock;
|
|
22
|
+
index: number;
|
|
23
|
+
};
|
|
24
|
+
export declare function groupAlignedLabelBlocks(blocks: CorpusBlock[]): CorpusBlockGroup[];
|
|
25
|
+
export declare function hasTrailingStrong(block: CorpusBlock): boolean;
|
|
26
|
+
export declare function hasTrailingMath(block: CorpusBlock): boolean;
|
|
2
27
|
export interface BlockContentProps {
|
|
3
28
|
block: CorpusBlock;
|
|
4
29
|
assets: AssetBundle | null;
|
|
5
|
-
showRaw?: boolean;
|
|
6
30
|
assetsBaseUrl?: string;
|
|
31
|
+
aligned?: boolean;
|
|
32
|
+
sourceUnitId?: string;
|
|
33
|
+
sourceDocument?: DocumentId;
|
|
7
34
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
35
|
+
type InlineSegments = InlineSegment[];
|
|
36
|
+
interface ReferenceContext {
|
|
37
|
+
sourceUnitId: string;
|
|
38
|
+
sourceDocument: DocumentId;
|
|
39
|
+
}
|
|
40
|
+
export declare function renderInlineSegments(inline: InlineSegments, context?: ReferenceContext | null): import("react").ReactNode[];
|
|
41
|
+
export declare function BlockContent({ block, assets, assetsBaseUrl, aligned, sourceUnitId, sourceDocument }: BlockContentProps): import("react/jsx-runtime").JSX.Element;
|
|
42
|
+
export declare function AlignedLabelList({ blocks, assets, assetsBaseUrl, sourceUnitId, sourceDocument, renderAccessory }: {
|
|
43
|
+
blocks: CorpusBlock[];
|
|
44
|
+
assets: AssetBundle | null;
|
|
15
45
|
assetsBaseUrl?: string;
|
|
46
|
+
sourceUnitId?: string;
|
|
47
|
+
sourceDocument?: DocumentId;
|
|
48
|
+
renderAccessory?: (block: CorpusBlock) => React.ReactNode;
|
|
16
49
|
}): import("react/jsx-runtime").JSX.Element;
|
|
50
|
+
export declare function isRepeatedUnitTitle(unit: CorpusUnit, block: CorpusUnit["blocks"][number]): boolean;
|
|
51
|
+
export {};
|