@plotwork.official/viewer 0.0.0-stage → 0.1.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.
Files changed (45) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +100 -2
  3. package/dist/core/canvas-view.d.ts +154 -0
  4. package/dist/core/canvas-view.js +207 -0
  5. package/dist/core/fingerprint.d.ts +11 -0
  6. package/dist/core/fingerprint.js +20 -0
  7. package/dist/core/index.d.ts +13 -0
  8. package/dist/core/index.js +8 -0
  9. package/dist/core/limits.d.ts +19 -0
  10. package/dist/core/limits.js +19 -0
  11. package/dist/core/live-watch.d.ts +18 -0
  12. package/dist/core/live-watch.js +49 -0
  13. package/dist/core/picture-loader.d.ts +38 -0
  14. package/dist/core/picture-loader.js +58 -0
  15. package/dist/core/picture-map.d.ts +86 -0
  16. package/dist/core/picture-map.js +288 -0
  17. package/dist/core/picture-scheme.d.ts +18 -0
  18. package/dist/core/picture-scheme.js +31 -0
  19. package/dist/core/picture-source.d.ts +23 -0
  20. package/dist/core/picture-source.js +57 -0
  21. package/dist/element/copy.d.ts +22 -0
  22. package/dist/element/copy.js +28 -0
  23. package/dist/element/define.d.ts +7 -0
  24. package/dist/element/define.js +12 -0
  25. package/dist/element/dom.d.ts +12 -0
  26. package/dist/element/dom.js +25 -0
  27. package/dist/element/events.d.ts +39 -0
  28. package/dist/element/events.js +4 -0
  29. package/dist/element/gestures.d.ts +28 -0
  30. package/dist/element/gestures.js +142 -0
  31. package/dist/element/plotwork-diagram.d.ts +21 -0
  32. package/dist/element/plotwork-diagram.js +397 -0
  33. package/dist/element/shell.d.ts +22 -0
  34. package/dist/element/shell.js +30 -0
  35. package/dist/element/styles.d.ts +6 -0
  36. package/dist/element/styles.js +137 -0
  37. package/dist/element/trace-layer.d.ts +9 -0
  38. package/dist/element/trace-layer.js +45 -0
  39. package/dist/index.d.ts +7 -0
  40. package/dist/index.js +3 -0
  41. package/dist/react/index.d.ts +39 -0
  42. package/dist/react/index.js +52 -0
  43. package/dist/register.d.ts +1 -0
  44. package/dist/register.js +6 -0
  45. package/package.json +74 -4
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { definePlotworkDiagram, TAG_NAME } from './element/define.js';
2
+ export { DEFAULT_LABELS } from './element/copy.js';
3
+ export { fingerprintOf, isFingerprint, readEmbeddedSource, readTraceMap } from './core/index.js';
@@ -0,0 +1,39 @@
1
+ import type { CSSProperties } from 'react';
2
+ import type { ViewerLabels } from '../element/copy.js';
3
+ import type { ChangeDetail, DrillDetail, ErrorDetail, LoadDetail, TraceDetail } from '../element/events.js';
4
+ import type { PlotworkDiagramElement } from '../element/plotwork-diagram.js';
5
+ import type { ThemeChoice } from '../core/picture-scheme.js';
6
+ /**
7
+ * `<PlotworkDiagram>`: the `<plotwork-diagram>` element for React. It registers the element on first render, passes plain values as
8
+ * attributes, sets `svg` and `labels` as properties, and turns the element's events into callbacks. React is a peer dependency;
9
+ * nothing else is imported. The ref is the element itself, with `fit()`, `zoomIn()`, `zoomOut()`, `reload()` and `source()`.
10
+ */
11
+ export interface PlotworkDiagramProps {
12
+ /** The picture's address: a file beside the page, a hosted picture, a stable link, or an organisation embed link. */
13
+ src?: string | undefined;
14
+ /** The picture's text, for a picture the page already holds (a `.diagram` import). It wins over `src`. */
15
+ svg?: string | null | undefined;
16
+ theme?: ThemeChoice | undefined;
17
+ /** Check for a new version and show it without a reload. */
18
+ live?: boolean | undefined;
19
+ /** Seconds between checks for a live picture: 60 when left out, never below 15. */
20
+ interval?: number | undefined;
21
+ /** Show the picture only when its fingerprint is this one (`sha256-<hex>`). A pinned picture is never live. */
22
+ fingerprint?: string | undefined;
23
+ /** `zoom` when the viewer is the page and a plain wheel zooms; `modifier` (the default) leaves the wheel to the page. */
24
+ wheel?: 'zoom' | 'modifier' | undefined;
25
+ /** `none` hides the toolbar. */
26
+ controls?: 'none' | undefined;
27
+ /** What the diagram shows, for a screen reader. */
28
+ label?: string | undefined;
29
+ labels?: Partial<ViewerLabels> | undefined;
30
+ className?: string | undefined;
31
+ style?: CSSProperties | undefined;
32
+ onLoad?: ((detail: LoadDetail) => void) | undefined;
33
+ onChange?: ((detail: ChangeDetail) => void) | undefined;
34
+ onError?: ((detail: ErrorDetail) => void) | undefined;
35
+ onDrill?: ((detail: DrillDetail) => void) | undefined;
36
+ onTrace?: ((detail: TraceDetail) => void) | undefined;
37
+ }
38
+ export declare const PlotworkDiagram: import("react").ForwardRefExoticComponent<PlotworkDiagramProps & import("react").RefAttributes<PlotworkDiagramElement>>;
39
+ export type { PlotworkDiagramElement } from '../element/plotwork-diagram.js';
@@ -0,0 +1,52 @@
1
+ import { createElement, forwardRef, useEffect, useImperativeHandle, useLayoutEffect, useRef } from 'react';
2
+ import { definePlotworkDiagram, TAG_NAME } from '../element/define.js';
3
+ const EVENTS = { 'plotwork-load': 'onLoad', 'plotwork-change': 'onChange', 'plotwork-error': 'onError', 'plotwork-drill': 'onDrill', 'plotwork-trace': 'onTrace' };
4
+ const useClientLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;
5
+ function PlotworkDiagramInner(props, ref) {
6
+ const element = useRef(null);
7
+ const latest = useRef(props);
8
+ latest.current = props;
9
+ useImperativeHandle(ref, () => element.current, []);
10
+ useClientLayoutEffect(() => {
11
+ definePlotworkDiagram();
12
+ }, []);
13
+ useClientLayoutEffect(() => {
14
+ const node = element.current;
15
+ if (node === null)
16
+ return;
17
+ node.labels = props.labels;
18
+ node.svg = props.svg ?? null;
19
+ }, [props.svg, props.labels]);
20
+ useEffect(() => {
21
+ const node = element.current;
22
+ if (node === null)
23
+ return undefined;
24
+ const listeners = Object.entries(EVENTS).map(([type, prop]) => {
25
+ const listener = (event) => {
26
+ const handler = latest.current[prop];
27
+ handler?.(event.detail);
28
+ };
29
+ node.addEventListener(type, listener);
30
+ return () => node.removeEventListener(type, listener);
31
+ });
32
+ return () => {
33
+ for (const remove of listeners)
34
+ remove();
35
+ };
36
+ }, []);
37
+ return createElement(TAG_NAME, {
38
+ ref: element,
39
+ src: props.src,
40
+ theme: props.theme,
41
+ live: props.live === true ? '' : undefined,
42
+ interval: props.interval,
43
+ fingerprint: props.fingerprint,
44
+ wheel: props.wheel,
45
+ controls: props.controls,
46
+ label: props.label,
47
+ class: props.className,
48
+ style: props.style,
49
+ });
50
+ }
51
+ export const PlotworkDiagram = forwardRef(PlotworkDiagramInner);
52
+ PlotworkDiagram.displayName = 'PlotworkDiagram';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The side-effect entry: `import '@plotwork.official/viewer/register'` registers `<plotwork-diagram>`. It is the only module of the
3
+ * package with a side effect, and `sideEffects` in package.json names it, so a bundler keeps it and tree-shakes the rest.
4
+ */
5
+ import { definePlotworkDiagram } from './element/define.js';
6
+ definePlotworkDiagram();
package/package.json CHANGED
@@ -1,6 +1,76 @@
1
1
  {
2
2
  "name": "@plotwork.official/viewer",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.1",
4
+ "description": "Embed interactive Plotwork diagrams in any page: a <plotwork-diagram> web component and a React component, with no runtime dependencies.",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "homepage": "https://docs.plotwork.dev",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/plotwork-official/plotwork-sdk.git",
11
+ "directory": "packages/viewer"
12
+ },
13
+ "keywords": [
14
+ "plotwork",
15
+ "diagram",
16
+ "viewer",
17
+ "web-component",
18
+ "react",
19
+ "svg"
20
+ ],
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/index.d.ts",
24
+ "default": "./dist/index.js"
25
+ },
26
+ "./register": {
27
+ "types": "./dist/register.d.ts",
28
+ "default": "./dist/register.js"
29
+ },
30
+ "./react": {
31
+ "types": "./dist/react/index.d.ts",
32
+ "default": "./dist/react/index.js"
33
+ },
34
+ "./core": {
35
+ "types": "./dist/core/index.d.ts",
36
+ "default": "./dist/core/index.js"
37
+ },
38
+ "./package.json": "./package.json"
39
+ },
40
+ "files": [
41
+ "dist",
42
+ "!dist/**/__tests__",
43
+ "README.md",
44
+ "LICENSE"
45
+ ],
46
+ "sideEffects": [
47
+ "./dist/register.js"
48
+ ],
49
+ "engines": {
50
+ "node": ">=20"
51
+ },
52
+ "scripts": {
53
+ "build": "rm -rf dist && tsc -p tsconfig.build.json",
54
+ "typecheck": "tsc --noEmit",
55
+ "test": "vitest run"
56
+ },
57
+ "peerDependencies": {
58
+ "react": ">=18"
59
+ },
60
+ "peerDependenciesMeta": {
61
+ "react": {
62
+ "optional": true
63
+ }
64
+ },
65
+ "devDependencies": {
66
+ "@types/react": "19.3.0",
67
+ "@types/react-dom": "19.2.3",
68
+ "jsdom": "30.1.1",
69
+ "react": "19.3.0",
70
+ "react-dom": "19.3.0"
71
+ },
72
+ "publishConfig": {
73
+ "access": "public",
74
+ "provenance": true
75
+ }
76
+ }