@vscada/core 0.0.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/dist/.tsbuildinfo +1 -0
- package/dist/a11y/contrast.d.ts +11 -0
- package/dist/a11y/contrast.d.ts.map +1 -0
- package/dist/a11y/live-region.d.ts +42 -0
- package/dist/a11y/live-region.d.ts.map +1 -0
- package/dist/a11y/reduced-motion.d.ts +55 -0
- package/dist/a11y/reduced-motion.d.ts.map +1 -0
- package/dist/a11y/static-representation-registry.d.ts +20 -0
- package/dist/a11y/static-representation-registry.d.ts.map +1 -0
- package/dist/bindings/binding-fixture.d.ts +3 -0
- package/dist/bindings/binding-fixture.d.ts.map +1 -0
- package/dist/bindings/binding-types.d.ts +52 -0
- package/dist/bindings/binding-types.d.ts.map +1 -0
- package/dist/bindings/color-ramp.d.ts +9 -0
- package/dist/bindings/color-ramp.d.ts.map +1 -0
- package/dist/bindings/transforms.d.ts +103 -0
- package/dist/bindings/transforms.d.ts.map +1 -0
- package/dist/constants-DMdpoOyH.js +4 -0
- package/dist/contracts/connection-renderer.d.ts +16 -0
- package/dist/contracts/connection-renderer.d.ts.map +1 -0
- package/dist/contracts/connection-state.d.ts +8 -0
- package/dist/contracts/connection-state.d.ts.map +1 -0
- package/dist/contracts/handles.d.ts +83 -0
- package/dist/contracts/handles.d.ts.map +1 -0
- package/dist/contracts/primitive.d.ts +37 -0
- package/dist/contracts/primitive.d.ts.map +1 -0
- package/dist/contracts/renderer.d.ts +34 -0
- package/dist/contracts/renderer.d.ts.map +1 -0
- package/dist/contracts/tag-value.d.ts +33 -0
- package/dist/contracts/tag-value.d.ts.map +1 -0
- package/dist/contracts/time-source.d.ts +14 -0
- package/dist/contracts/time-source.d.ts.map +1 -0
- package/dist/custom-elements.json +1068 -0
- package/dist/export/svg-export.d.ts +24 -0
- package/dist/export/svg-export.d.ts.map +1 -0
- package/dist/fsm/fsm.d.ts +45 -0
- package/dist/fsm/fsm.d.ts.map +1 -0
- package/dist/fsm/tween.d.ts +39 -0
- package/dist/fsm/tween.d.ts.map +1 -0
- package/dist/import/load-svg-import.d.ts +22 -0
- package/dist/import/load-svg-import.d.ts.map +1 -0
- package/dist/import/svg-source-registry.d.ts +4 -0
- package/dist/import/svg-source-registry.d.ts.map +1 -0
- package/dist/index.d.ts +61 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4549 -0
- package/dist/interaction/gesture-arbiter.d.ts +20 -0
- package/dist/interaction/gesture-arbiter.d.ts.map +1 -0
- package/dist/interaction/hit-area.d.ts +44 -0
- package/dist/interaction/hit-area.d.ts.map +1 -0
- package/dist/interaction/pan-zoom-gestures.d.ts +43 -0
- package/dist/interaction/pan-zoom-gestures.d.ts.map +1 -0
- package/dist/interaction/pointer-pipeline.d.ts +38 -0
- package/dist/interaction/pointer-pipeline.d.ts.map +1 -0
- package/dist/license/console-notice.d.ts +15 -0
- package/dist/license/console-notice.d.ts.map +1 -0
- package/dist/license/format.d.ts +29 -0
- package/dist/license/format.d.ts.map +1 -0
- package/dist/license/state.d.ts +43 -0
- package/dist/license/state.d.ts.map +1 -0
- package/dist/license/vendor-keys.d.ts +12 -0
- package/dist/license/vendor-keys.d.ts.map +1 -0
- package/dist/license/verify-fallback.d.ts +31 -0
- package/dist/license/verify-fallback.d.ts.map +1 -0
- package/dist/license/verify-webcrypto.d.ts +4 -0
- package/dist/license/verify-webcrypto.d.ts.map +1 -0
- package/dist/license/watermark.d.ts +20 -0
- package/dist/license/watermark.d.ts.map +1 -0
- package/dist/media/registry.d.ts +97 -0
- package/dist/media/registry.d.ts.map +1 -0
- package/dist/registry/connection-registry.d.ts +5 -0
- package/dist/registry/connection-registry.d.ts.map +1 -0
- package/dist/registry/element-catalog.d.ts +805 -0
- package/dist/registry/element-catalog.d.ts.map +1 -0
- package/dist/registry/primitive-registry.d.ts +7 -0
- package/dist/registry/primitive-registry.d.ts.map +1 -0
- package/dist/registry/theme-registry.d.ts +6 -0
- package/dist/registry/theme-registry.d.ts.map +1 -0
- package/dist/registry.d.ts +8 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/scada-view.d.ts +322 -0
- package/dist/scada-view.d.ts.map +1 -0
- package/dist/scene/connection-geometry.d.ts +95 -0
- package/dist/scene/connection-geometry.d.ts.map +1 -0
- package/dist/scene/constants.d.ts +10 -0
- package/dist/scene/constants.d.ts.map +1 -0
- package/dist/scene/crossing-jumps.d.ts +85 -0
- package/dist/scene/crossing-jumps.d.ts.map +1 -0
- package/dist/scene/dev-validate.d.ts +24 -0
- package/dist/scene/dev-validate.d.ts.map +1 -0
- package/dist/scene/errors.d.ts +15 -0
- package/dist/scene/errors.d.ts.map +1 -0
- package/dist/scene/groups.d.ts +90 -0
- package/dist/scene/groups.d.ts.map +1 -0
- package/dist/scene/lane-offset.d.ts +69 -0
- package/dist/scene/lane-offset.d.ts.map +1 -0
- package/dist/scene/orthogonal-router.d.ts +63 -0
- package/dist/scene/orthogonal-router.d.ts.map +1 -0
- package/dist/scene/scene-schema.d.ts +881 -0
- package/dist/scene/scene-schema.d.ts.map +1 -0
- package/dist/scene/structural-validator.d.ts +25 -0
- package/dist/scene/structural-validator.d.ts.map +1 -0
- package/dist/scene/validate-scene.d.ts +26 -0
- package/dist/scene/validate-scene.d.ts.map +1 -0
- package/dist/scene-authoring.d.ts +12 -0
- package/dist/scene-authoring.d.ts.map +1 -0
- package/dist/scene-authoring.js +952 -0
- package/dist/scheduler/alarm-band.d.ts +33 -0
- package/dist/scheduler/alarm-band.d.ts.map +1 -0
- package/dist/scheduler/animation-registry.d.ts +38 -0
- package/dist/scheduler/animation-registry.d.ts.map +1 -0
- package/dist/scheduler/lod.d.ts +25 -0
- package/dist/scheduler/lod.d.ts.map +1 -0
- package/dist/scheduler/quality-overlay.d.ts +19 -0
- package/dist/scheduler/quality-overlay.d.ts.map +1 -0
- package/dist/scheduler/quality.d.ts +15 -0
- package/dist/scheduler/quality.d.ts.map +1 -0
- package/dist/scheduler/scheduler.d.ts +243 -0
- package/dist/scheduler/scheduler.d.ts.map +1 -0
- package/dist/scheduler/visual-state-resolver.d.ts +31 -0
- package/dist/scheduler/visual-state-resolver.d.ts.map +1 -0
- package/dist/store/value-store.d.ts +65 -0
- package/dist/store/value-store.d.ts.map +1 -0
- package/dist/tokens.d.ts +703 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/topology/graph.d.ts +33 -0
- package/dist/topology/graph.d.ts.map +1 -0
- package/dist/topology/group-collapse.d.ts +15 -0
- package/dist/topology/group-collapse.d.ts.map +1 -0
- package/dist/topology/inference.d.ts +71 -0
- package/dist/topology/inference.d.ts.map +1 -0
- package/dist/topology/traversal.d.ts +29 -0
- package/dist/topology/traversal.d.ts.map +1 -0
- package/dist/topology/upstream-highlight.d.ts +75 -0
- package/dist/topology/upstream-highlight.d.ts.map +1 -0
- package/dist/units/formatter.d.ts +22 -0
- package/dist/units/formatter.d.ts.map +1 -0
- package/dist/units/registry.d.ts +21 -0
- package/dist/units/registry.d.ts.map +1 -0
- package/dist/view/group-view-state.d.ts +77 -0
- package/dist/view/group-view-state.d.ts.map +1 -0
- package/dist/view/viewport-state.d.ts +112 -0
- package/dist/view/viewport-state.d.ts.map +1 -0
- package/dist/vscada.umd.cjs +45 -0
- package/package.json +37 -0
|
@@ -0,0 +1,1068 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "1.0.0",
|
|
3
|
+
"readme": "",
|
|
4
|
+
"modules": [
|
|
5
|
+
{
|
|
6
|
+
"kind": "javascript-module",
|
|
7
|
+
"path": "src/scada-view.ts",
|
|
8
|
+
"declarations": [
|
|
9
|
+
{
|
|
10
|
+
"kind": "function",
|
|
11
|
+
"name": "inferAnimationPriority",
|
|
12
|
+
"return": {
|
|
13
|
+
"type": {
|
|
14
|
+
"text": "AnimationPriority"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"parameters": [
|
|
18
|
+
{
|
|
19
|
+
"name": "handleKey",
|
|
20
|
+
"type": {
|
|
21
|
+
"text": "string"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"description": "Story 4.3 Task 2 — infers each animation handle's LOD-cap priority\ntier from its OWN synthetic handle-map key, which every primitive that\nregisters an `AnimationHandle` already names systematically (never a\nreal tag): `recipe.ts`'s `__vessel-wave-animation-${id}`,\n`rotation-drive/base.ts`'s `__rotating-animations-${id}`, and\n`conveyance/pipe`'s `nextId('pipe-flow-animation')`. Zero primitive-\npackage changes needed for this — `_registerHandles` is the one place\nevery primitive's `HandleMap` already funnels through.\n\nKnown limitation, not introduced by this story: `rotation-drive/base.ts`\nbundles a driven-equipment element's rotation AND its state-lamp blink\ninto ONE combined pause/resume handle (pre-existing architecture), so\nthat handle is tagged `'rotation'`, not `'state-lamp'` — under a very\ntight LOD cap, a running pump's blink could pause alongside its\nrotation.\n\nArchitecture code audit (2026-08-27, AD-5 finding P1-1) — the STANDALONE\n`indicator-lamp` primitive used to never register through\n`AnimationRegistry` at all (its blink was driven by direct\n`AnimationControl` calls inline in its own state handler), which meant a\nstale/disconnected scene could not freeze it either — the exact failure\nAD-5 exists to prevent. It now registers its blink as a proper\n`AnimationHandle` (`__indicator-lamp-animation-${id}`), tagged\n`'state-lamp'` here so it both respects freeze-on-stale AND keeps the\noriginally-intended \"state-lamps survive longest\" property deliberately,\nvia the rank-0 tier `ANIMATION_PRIORITY_RANK` already defined for it,\nrather than accidentally via non-registration.\n\nStory 3.8 — `vapor/base.ts`'s `__vapor-drift-animation-${id}` (plume and\nsteam-vent's shared billow-drift handle) is tagged `'wave'`, the same\ntier as the vessel liquid wave: both are ambient, lowest-priority-to-\nsurvive continuous motion under a tight LOD cap, never safety-critical.\nExported so this mapping is directly unit-testable without standing up a\nfull scene (mirrors every other primitive-package registration site's\nown doc comment above — no primitive-package code needed here either)."
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"kind": "class",
|
|
29
|
+
"description": "Root element. Story 1.1 proved Lit + Shadow DOM wiring; Story 1.2 added\nthe `scene` validation pipeline (AD-8). This story wires the actual\nframe pipeline (AD-1): `values`/`setValues()` feed the store; the single\nper-instance scheduler reads it on each tick and writes through handles\n→ renderer. `TimeSource`/`Renderer` are constructor-injectable for\ntests (spec §8.4); real usage via `document.createElement`/markup uses\nthe live defaults.",
|
|
30
|
+
"name": "ScadaView",
|
|
31
|
+
"cssProperties": [
|
|
32
|
+
{
|
|
33
|
+
"description": "Keyboard focus ring color (§11), resolved from the active theme's `focusRing` token when declared.",
|
|
34
|
+
"name": "--vscada-focus-ring-color",
|
|
35
|
+
"default": "#2c7be5"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"description": "Keyboard focus ring width (§11).",
|
|
39
|
+
"name": "--vscada-focus-ring-width",
|
|
40
|
+
"default": "2px"
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"description": "Keyboard focus ring offset (§11).",
|
|
44
|
+
"name": "--vscada-focus-ring-offset",
|
|
45
|
+
"default": "2px"
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"cssParts": [
|
|
49
|
+
{
|
|
50
|
+
"description": "The root `<svg>` the whole scene renders into.",
|
|
51
|
+
"name": "canvas"
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"members": [
|
|
55
|
+
{
|
|
56
|
+
"kind": "field",
|
|
57
|
+
"name": "_scene",
|
|
58
|
+
"type": {
|
|
59
|
+
"text": "Scene | null"
|
|
60
|
+
},
|
|
61
|
+
"privacy": "private",
|
|
62
|
+
"default": "null"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"kind": "field",
|
|
66
|
+
"name": "_lastError",
|
|
67
|
+
"type": {
|
|
68
|
+
"text": "SceneErrorDetail | null"
|
|
69
|
+
},
|
|
70
|
+
"privacy": "private",
|
|
71
|
+
"default": "null"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"kind": "field",
|
|
75
|
+
"name": "_pendingDevValidation",
|
|
76
|
+
"type": {
|
|
77
|
+
"text": "Promise<void> | null"
|
|
78
|
+
},
|
|
79
|
+
"privacy": "private",
|
|
80
|
+
"default": "null"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"kind": "field",
|
|
84
|
+
"name": "_sceneGeneration",
|
|
85
|
+
"type": {
|
|
86
|
+
"text": "number"
|
|
87
|
+
},
|
|
88
|
+
"privacy": "private",
|
|
89
|
+
"default": "0"
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"kind": "field",
|
|
93
|
+
"name": "_renderer",
|
|
94
|
+
"type": {
|
|
95
|
+
"text": "Renderer"
|
|
96
|
+
},
|
|
97
|
+
"privacy": "private",
|
|
98
|
+
"readonly": true,
|
|
99
|
+
"default": "renderer"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"kind": "field",
|
|
103
|
+
"name": "_store",
|
|
104
|
+
"type": {
|
|
105
|
+
"text": "ValueStore"
|
|
106
|
+
},
|
|
107
|
+
"privacy": "private",
|
|
108
|
+
"readonly": true,
|
|
109
|
+
"default": "new ValueStore(timeSource, (detail) => this._dispatchValueWarning(detail))"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"kind": "field",
|
|
113
|
+
"name": "_scheduler",
|
|
114
|
+
"type": {
|
|
115
|
+
"text": "Scheduler"
|
|
116
|
+
},
|
|
117
|
+
"privacy": "private",
|
|
118
|
+
"readonly": true,
|
|
119
|
+
"default": "new Scheduler(timeSource, this._store, renderer, this._animations)"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"kind": "field",
|
|
123
|
+
"name": "_animations",
|
|
124
|
+
"type": {
|
|
125
|
+
"text": "AnimationRegistry"
|
|
126
|
+
},
|
|
127
|
+
"privacy": "private",
|
|
128
|
+
"readonly": true,
|
|
129
|
+
"default": "new AnimationRegistry()"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"kind": "field",
|
|
133
|
+
"name": "_staticRepresentations",
|
|
134
|
+
"privacy": "private",
|
|
135
|
+
"readonly": true,
|
|
136
|
+
"default": "new StaticRepresentationRegistry()",
|
|
137
|
+
"description": "Story 4.4 Task 1 — §11 reduced-motion's declared-static-swap registry, sibling to `_animations` but a distinct registration surface (see `StaticRepresentationRegistry`'s own doc)."
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
"kind": "field",
|
|
141
|
+
"name": "_reducedMotion",
|
|
142
|
+
"type": {
|
|
143
|
+
"text": "ReducedMotionController"
|
|
144
|
+
},
|
|
145
|
+
"privacy": "private",
|
|
146
|
+
"readonly": true,
|
|
147
|
+
"default": "new ReducedMotionController(this, this._staticRepresentations, matchMedia)"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"kind": "field",
|
|
151
|
+
"name": "_liveRegion",
|
|
152
|
+
"privacy": "private",
|
|
153
|
+
"readonly": true,
|
|
154
|
+
"default": "new LiveRegionController()",
|
|
155
|
+
"description": "Story 4.4 Task 3 — §11 ARIA live region; unsubscribed in `disconnectedCallback`."
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"kind": "field",
|
|
159
|
+
"name": "_unsubscribeConditionTransition",
|
|
160
|
+
"type": {
|
|
161
|
+
"text": "(() => void) | null"
|
|
162
|
+
},
|
|
163
|
+
"privacy": "private",
|
|
164
|
+
"default": "null"
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"kind": "field",
|
|
168
|
+
"name": "_builtElements",
|
|
169
|
+
"type": {
|
|
170
|
+
"text": "BuiltElement[]"
|
|
171
|
+
},
|
|
172
|
+
"privacy": "private",
|
|
173
|
+
"default": "[]"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"kind": "field",
|
|
177
|
+
"name": "_builtDefs",
|
|
178
|
+
"type": {
|
|
179
|
+
"text": "SVGDefsElement | null"
|
|
180
|
+
},
|
|
181
|
+
"privacy": "private",
|
|
182
|
+
"default": "null"
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"kind": "field",
|
|
186
|
+
"name": "_watermark",
|
|
187
|
+
"type": {
|
|
188
|
+
"text": "WatermarkOverlay | null"
|
|
189
|
+
},
|
|
190
|
+
"privacy": "private",
|
|
191
|
+
"default": "null"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"kind": "field",
|
|
195
|
+
"name": "_licenseVerdict",
|
|
196
|
+
"type": {
|
|
197
|
+
"text": "LicenseVerdict"
|
|
198
|
+
},
|
|
199
|
+
"privacy": "private",
|
|
200
|
+
"default": "{ status: 'unlicensed' }"
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"kind": "field",
|
|
204
|
+
"name": "_needsStructureInsert",
|
|
205
|
+
"type": {
|
|
206
|
+
"text": "boolean"
|
|
207
|
+
},
|
|
208
|
+
"privacy": "private",
|
|
209
|
+
"default": "false"
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"kind": "field",
|
|
213
|
+
"name": "_schedulerStarted",
|
|
214
|
+
"type": {
|
|
215
|
+
"text": "boolean"
|
|
216
|
+
},
|
|
217
|
+
"privacy": "private",
|
|
218
|
+
"default": "false"
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"kind": "field",
|
|
222
|
+
"name": "_unsubscribeLicense",
|
|
223
|
+
"type": {
|
|
224
|
+
"text": "(() => void) | null"
|
|
225
|
+
},
|
|
226
|
+
"privacy": "private",
|
|
227
|
+
"default": "null"
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
"kind": "field",
|
|
231
|
+
"name": "_interactive",
|
|
232
|
+
"type": {
|
|
233
|
+
"text": "boolean"
|
|
234
|
+
},
|
|
235
|
+
"privacy": "private",
|
|
236
|
+
"default": "true",
|
|
237
|
+
"description": "Story 4.2 — §3.2 `interactive`: \"Whether elements emit click events.\" A cheap global toggle (AC3) checked at dispatch time, never a rebuild trigger."
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"kind": "field",
|
|
241
|
+
"name": "_gestureArbiter",
|
|
242
|
+
"type": {
|
|
243
|
+
"text": "GestureArbiter"
|
|
244
|
+
},
|
|
245
|
+
"privacy": "private",
|
|
246
|
+
"readonly": true,
|
|
247
|
+
"description": "Story 4.2 Task 2 — one arbiter per instance, surviving rebuilds, so a drag begun before a mid-gesture rebuild still resolves correctly via the same tracked pointerId."
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"kind": "field",
|
|
251
|
+
"name": "_hitLayerGroup",
|
|
252
|
+
"type": {
|
|
253
|
+
"text": "SVGGElement | null"
|
|
254
|
+
},
|
|
255
|
+
"privacy": "private",
|
|
256
|
+
"default": "null"
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
"kind": "field",
|
|
260
|
+
"name": "_hitAreaEntries",
|
|
261
|
+
"type": {
|
|
262
|
+
"text": "{ rect: SVGRectElement; w: number; h: number; origin: { x: number; y: number } }[]"
|
|
263
|
+
},
|
|
264
|
+
"privacy": "private",
|
|
265
|
+
"default": "[]",
|
|
266
|
+
"description": "Hit rects built THIS structure build, with enough info to recompute their box in place on a zoom change (Story 4.3 Task 1) — never rebuilt for a zoom-only change, only for a real structural rebuild."
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"kind": "field",
|
|
270
|
+
"name": "_viewportState",
|
|
271
|
+
"type": {
|
|
272
|
+
"text": "ViewportStateController"
|
|
273
|
+
},
|
|
274
|
+
"privacy": "private",
|
|
275
|
+
"readonly": true,
|
|
276
|
+
"description": "Story 4.3 Task 1 — AD-4 view state (zoom/pan), reset on scene reload, NOT scene data. Owns its own tween-drive subscription independent of `_scheduler`'s start/stop lifecycle."
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"kind": "field",
|
|
280
|
+
"name": "_panZoomGestures",
|
|
281
|
+
"type": {
|
|
282
|
+
"text": "PanZoomGestureController"
|
|
283
|
+
},
|
|
284
|
+
"privacy": "private",
|
|
285
|
+
"readonly": true
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"kind": "field",
|
|
289
|
+
"name": "_viewportGroup",
|
|
290
|
+
"type": {
|
|
291
|
+
"text": "SVGGElement | null"
|
|
292
|
+
},
|
|
293
|
+
"privacy": "private",
|
|
294
|
+
"default": "null",
|
|
295
|
+
"description": "The one root `<g>` every built element/hit-layer renders inside — translate+scale is the ONLY thing zoom/pan ever touches (AD-2: never re-render on zoom). Rebuilt fresh each structure build, re-stamped with the CURRENT transform immediately (a rebuild mid-gesture must not visually snap to identity)."
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
"kind": "field",
|
|
299
|
+
"name": "_lodActive",
|
|
300
|
+
"type": {
|
|
301
|
+
"text": "boolean"
|
|
302
|
+
},
|
|
303
|
+
"privacy": "private",
|
|
304
|
+
"default": "false",
|
|
305
|
+
"description": "Story 4.3 Task 2 — previous LOD resolution, fed back into `resolveLodActive` for its hysteresis band."
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
"kind": "field",
|
|
309
|
+
"name": "_listenersAttached",
|
|
310
|
+
"type": {
|
|
311
|
+
"text": "boolean"
|
|
312
|
+
},
|
|
313
|
+
"privacy": "private",
|
|
314
|
+
"default": "false"
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
"kind": "field",
|
|
318
|
+
"name": "_isIntersecting",
|
|
319
|
+
"type": {
|
|
320
|
+
"text": "boolean"
|
|
321
|
+
},
|
|
322
|
+
"privacy": "private",
|
|
323
|
+
"default": "true",
|
|
324
|
+
"description": "Story 4.3 Task 3 — off-screen (`IntersectionObserver`) / hidden-tab (`visibilitychange`) pause. Assumed visible until the observer's first callback."
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
"kind": "field",
|
|
328
|
+
"name": "_intersectionObserver",
|
|
329
|
+
"type": {
|
|
330
|
+
"text": "IntersectionObserver | null"
|
|
331
|
+
},
|
|
332
|
+
"privacy": "private",
|
|
333
|
+
"default": "null"
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
"kind": "field",
|
|
337
|
+
"name": "_boundVisibilityChange",
|
|
338
|
+
"type": {
|
|
339
|
+
"text": "(() => void) | null"
|
|
340
|
+
},
|
|
341
|
+
"privacy": "private",
|
|
342
|
+
"default": "null"
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
"kind": "field",
|
|
346
|
+
"name": "_unsubscribeRenderStats",
|
|
347
|
+
"type": {
|
|
348
|
+
"text": "(() => void) | null"
|
|
349
|
+
},
|
|
350
|
+
"privacy": "private",
|
|
351
|
+
"default": "null",
|
|
352
|
+
"description": "Story 4.3 Task 4 — `render-stats` consumer, only subscribed while `debug` is on."
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
"kind": "field",
|
|
356
|
+
"name": "_groupViewState",
|
|
357
|
+
"type": {
|
|
358
|
+
"text": "GroupViewStateController | null"
|
|
359
|
+
},
|
|
360
|
+
"privacy": "private",
|
|
361
|
+
"default": "null",
|
|
362
|
+
"description": "Story 2.5 — view state (AD-4: collapse/expand), NOT scene data. Constructed lazily on first scene load, `reset()` on every subsequent one — never on a same-scene rebuild (e.g. a group toggle), which is what lets a toggle survive its own rebuild."
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
"kind": "field",
|
|
366
|
+
"name": "_flowInferenceCache",
|
|
367
|
+
"type": {
|
|
368
|
+
"text": "FlowInferenceCache | null"
|
|
369
|
+
},
|
|
370
|
+
"privacy": "private",
|
|
371
|
+
"default": "null",
|
|
372
|
+
"description": "Story 2.4 Task 2/3 — rebuilt fresh every structure build (tied to the currently-registered handles' lifecycle, unlike `_groupViewState` above)."
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
"kind": "field",
|
|
376
|
+
"name": "_flowStoppedSourceIds",
|
|
377
|
+
"privacy": "private",
|
|
378
|
+
"default": "new Set<string>()"
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
"kind": "field",
|
|
382
|
+
"name": "_flowClosedNodeIds",
|
|
383
|
+
"privacy": "private",
|
|
384
|
+
"default": "new Set<string>()"
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
"kind": "field",
|
|
388
|
+
"name": "_flowTrackedElementIds",
|
|
389
|
+
"type": {
|
|
390
|
+
"text": "string[]"
|
|
391
|
+
},
|
|
392
|
+
"privacy": "private",
|
|
393
|
+
"default": "[]",
|
|
394
|
+
"description": "Adversarial-review Fix 3 — ids that got a flow-state-tracking Fsm/handle registered this build, INCLUDING hidden children of a collapsed group (never in `_builtElements`, which only holds visually-built elements). Teardown needs this separately so a hidden source's tracking registration doesn't leak across rebuilds."
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
"kind": "field",
|
|
398
|
+
"name": "stalenessTimeout",
|
|
399
|
+
"type": {
|
|
400
|
+
"text": "number"
|
|
401
|
+
},
|
|
402
|
+
"description": "§3.2 — configuring the timeout is allowed; disabling the freeze behavior it drives is not (NFR4)."
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
"kind": "field",
|
|
406
|
+
"name": "snapThreshold",
|
|
407
|
+
"type": {
|
|
408
|
+
"text": "number"
|
|
409
|
+
},
|
|
410
|
+
"description": "Story 1.3 Task 4 — the tween-vs-snap `|Δ|` cap, as a component-level option (sensible default, see `DEFAULT_SNAP_THRESHOLD`)."
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
"kind": "field",
|
|
414
|
+
"name": "connectionState",
|
|
415
|
+
"type": {
|
|
416
|
+
"text": "ConnectionState"
|
|
417
|
+
},
|
|
418
|
+
"description": "§3.2 — parent-supplied upstream health. `'disconnected'` freezes the entire scene (§4.4) regardless of individual timestamps."
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
"kind": "field",
|
|
422
|
+
"name": "mode",
|
|
423
|
+
"type": {
|
|
424
|
+
"text": "SchedulerMode"
|
|
425
|
+
},
|
|
426
|
+
"description": "§3.2 `mode` (Story 4.1, §8.3 \"one code path\") — delegates entirely to\n`Scheduler.mode`, which owns the live↔static transition (snap-then-stop\n/ restart). Static mode is what makes `setValues()` below apply a\nsynchronous write pass instead of starting the rAF loop (AC1)."
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
"kind": "field",
|
|
430
|
+
"name": "animated",
|
|
431
|
+
"type": {
|
|
432
|
+
"text": "boolean"
|
|
433
|
+
},
|
|
434
|
+
"description": "§3.2 `animate` (Story 4.1 AC1) — master switch for continuous animation,\northogonal to `mode` (§8.1: static mode keeps animations running by\ndefault; this is the explicit opt-out for true snapshot capture).\nExposed as `animated`, not `animate` — `Element.prototype.animate()`\n(the native Web Animations API method every `HTMLElement` already has)\nwould otherwise collide with a same-named boolean property, breaking\nthe class's assignability to `Element`/`CustomElementConstructor`."
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
"kind": "field",
|
|
438
|
+
"name": "reducedMotionActive",
|
|
439
|
+
"type": {
|
|
440
|
+
"text": "boolean"
|
|
441
|
+
},
|
|
442
|
+
"description": "Story 4.4 Task 1 — current `prefers-reduced-motion` state as last observed by the core-owned listener (§11). Read-only: the OS/browser preference, not a settable switch — `animated` remains the one property that toggles continuous motion directly.",
|
|
443
|
+
"readonly": true
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
"kind": "method",
|
|
447
|
+
"name": "snapToTargets",
|
|
448
|
+
"return": {
|
|
449
|
+
"type": {
|
|
450
|
+
"text": "void"
|
|
451
|
+
}
|
|
452
|
+
},
|
|
453
|
+
"description": "AC4 — every in-flight tween and data interpolation completes to its target immediately (Story 4.1's static-mode switch depends on this). Story 4.3 — a mid-flight PROGRAMMATIC zoom tween (gesture-driven zoom is never mid-flight — it's already immediate) settles the same way."
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
"kind": "field",
|
|
457
|
+
"name": "interactive",
|
|
458
|
+
"type": {
|
|
459
|
+
"text": "boolean"
|
|
460
|
+
},
|
|
461
|
+
"description": "Story 4.2 AC3 — §3.2 `interactive`. Gates whether a tap/click ever dispatches `element-click` (checked at pointerup time); does not remove or rebuild the hit-area structure itself."
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
"kind": "field",
|
|
465
|
+
"name": "zoom",
|
|
466
|
+
"type": {
|
|
467
|
+
"text": "number"
|
|
468
|
+
},
|
|
469
|
+
"description": "Story 4.3 Task 1 — §3.2 `zoom`, two-way. A GESTURE update (pinch/\nwheel/drag-zoom) writes `_viewportState` directly and this getter\nreflects it immediately; an external `view.zoom = x` assignment\nanimates via the tween layer instead of jumping (`setZoomAnimated`).\nNever a structural rebuild (AD-2) — the root viewport `<g>` transform\nplus an in-place hit-area recompute (`_onViewportFrame`) are the ONLY\nthings a zoom change touches, superseding Story 4.2's rebuild-per-\nzoom-change behavior."
|
|
470
|
+
},
|
|
471
|
+
{
|
|
472
|
+
"kind": "field",
|
|
473
|
+
"name": "debug",
|
|
474
|
+
"type": {
|
|
475
|
+
"text": "boolean"
|
|
476
|
+
},
|
|
477
|
+
"description": "§3.2 `debug` — gates 1Hz `render-stats` accounting entirely; subscribes/unsubscribes the event-dispatching consumer on toggle."
|
|
478
|
+
},
|
|
479
|
+
{
|
|
480
|
+
"kind": "method",
|
|
481
|
+
"name": "seekAll",
|
|
482
|
+
"return": {
|
|
483
|
+
"type": {
|
|
484
|
+
"text": "void"
|
|
485
|
+
}
|
|
486
|
+
},
|
|
487
|
+
"parameters": [
|
|
488
|
+
{
|
|
489
|
+
"name": "timeMs",
|
|
490
|
+
"type": {
|
|
491
|
+
"text": "number"
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
],
|
|
495
|
+
"description": "Story 1.7 — the sanctioned deterministic-frame mechanism for visual\nregression: seeks every registered WAAPI animation (impeller\nrotation, flow dashes, lamp blink, …) to an absolute `currentTime`.\nDev/test utility — trivially small, never load-bearing for production\nrendering. If a screenshot still shows motion after this, something\nbypassed the animation registry (AD-5) and that's a real bug this\nmethod exists to catch, not a test to work around."
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
"kind": "method",
|
|
499
|
+
"name": "exportSVG",
|
|
500
|
+
"return": {
|
|
501
|
+
"type": {
|
|
502
|
+
"text": "string"
|
|
503
|
+
}
|
|
504
|
+
},
|
|
505
|
+
"description": "§3.3 `exportSVG` (Story 4.1 AC3) — works in ANY mode (live or static):\nserializes the current rendered `<svg>` to a standalone string. Returns\n`''` if no scene has been built yet (nothing to export)."
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
"kind": "field",
|
|
509
|
+
"name": "tagPrefix",
|
|
510
|
+
"type": {
|
|
511
|
+
"text": "string"
|
|
512
|
+
},
|
|
513
|
+
"description": "Story 2.6 AC2 — every tag lookup is prefixed by this string (`ValueStore.tagPrefix`); changing it at runtime re-resolves and resets interpolation state for affected tags (see `Scheduler`'s own doc on `syncTagPrefixIfChanged`)."
|
|
514
|
+
},
|
|
515
|
+
{
|
|
516
|
+
"kind": "field",
|
|
517
|
+
"name": "scene",
|
|
518
|
+
"type": {
|
|
519
|
+
"text": "Scene | null"
|
|
520
|
+
},
|
|
521
|
+
"description": "§3.2 `scene` — the currently-loaded, validated scene, or `null` if none has been assigned yet or the last assignment failed structural validation (AD-8; see the setter below)."
|
|
522
|
+
},
|
|
523
|
+
{
|
|
524
|
+
"kind": "field",
|
|
525
|
+
"name": "pendingDevValidation",
|
|
526
|
+
"type": {
|
|
527
|
+
"text": "Promise<void> | null"
|
|
528
|
+
},
|
|
529
|
+
"description": "Awaitable in tests; resolves once dev-only Zod diagnostics for the current scene have run.",
|
|
530
|
+
"readonly": true
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
"kind": "field",
|
|
534
|
+
"name": "values",
|
|
535
|
+
"type": {
|
|
536
|
+
"text": "TagValue[]"
|
|
537
|
+
},
|
|
538
|
+
"description": "Reconstructed from the store's current buffer — not a cached mirror of the last-pushed array (AD-4: no extra state)."
|
|
539
|
+
},
|
|
540
|
+
{
|
|
541
|
+
"kind": "method",
|
|
542
|
+
"name": "setValues",
|
|
543
|
+
"return": {
|
|
544
|
+
"type": {
|
|
545
|
+
"text": "void"
|
|
546
|
+
}
|
|
547
|
+
},
|
|
548
|
+
"parameters": [
|
|
549
|
+
{
|
|
550
|
+
"name": "values",
|
|
551
|
+
"type": {
|
|
552
|
+
"text": "TagValue[]"
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
],
|
|
556
|
+
"description": "Imperative equivalent of setting `values` (§3.3). Story 4.1 AC1 — in\nstatic mode this is the \"single synchronous write pass, no rAF\" §8.3\ndescribes: `Scheduler.snapToTargets()` (already the sanctioned\nimmediate-write path, AC4) writes every registration's current value\nwith zero tween, with no rAF loop ever started. `_viewportState` is\ndeliberately untouched here (unlike the public `snapToTargets()`\nbelow) — a value push must not also snap an unrelated in-flight zoom/\npan gesture."
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
"kind": "method",
|
|
560
|
+
"name": "clearValues",
|
|
561
|
+
"return": {
|
|
562
|
+
"type": {
|
|
563
|
+
"text": "void"
|
|
564
|
+
}
|
|
565
|
+
},
|
|
566
|
+
"description": "The only way values are cleared — never an empty `setValues([])` (§3.3, §4.2)."
|
|
567
|
+
},
|
|
568
|
+
{
|
|
569
|
+
"kind": "method",
|
|
570
|
+
"name": "_onLicenseVerdict",
|
|
571
|
+
"privacy": "private",
|
|
572
|
+
"return": {
|
|
573
|
+
"type": {
|
|
574
|
+
"text": "void"
|
|
575
|
+
}
|
|
576
|
+
},
|
|
577
|
+
"parameters": [
|
|
578
|
+
{
|
|
579
|
+
"name": "verdict",
|
|
580
|
+
"type": {
|
|
581
|
+
"text": "LicenseVerdict"
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
],
|
|
585
|
+
"description": "Story 6.3 — reacts to the module-level license verdict: toggles this instance's watermark and (once, page-wide) logs the trial notice."
|
|
586
|
+
},
|
|
587
|
+
{
|
|
588
|
+
"kind": "method",
|
|
589
|
+
"name": "_buildElements",
|
|
590
|
+
"privacy": "private",
|
|
591
|
+
"return": {
|
|
592
|
+
"type": {
|
|
593
|
+
"text": "void"
|
|
594
|
+
}
|
|
595
|
+
},
|
|
596
|
+
"parameters": [
|
|
597
|
+
{
|
|
598
|
+
"name": "scene",
|
|
599
|
+
"type": {
|
|
600
|
+
"text": "Scene"
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
]
|
|
604
|
+
},
|
|
605
|
+
{
|
|
606
|
+
"kind": "method",
|
|
607
|
+
"name": "_registerFlowStateTracking",
|
|
608
|
+
"privacy": "private",
|
|
609
|
+
"return": {
|
|
610
|
+
"type": {
|
|
611
|
+
"text": "void"
|
|
612
|
+
}
|
|
613
|
+
},
|
|
614
|
+
"parameters": [
|
|
615
|
+
{
|
|
616
|
+
"name": "element",
|
|
617
|
+
"type": {
|
|
618
|
+
"text": "SceneElement"
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
],
|
|
622
|
+
"description": "Story 2.4 Task 2/3 — drives `this._flowInferenceCache.update()` off an\nactual tag-value-driven state transition (never per tick — the cache's\nown doc requires \"on a source/valve FSM state-change event\"). The one\nevent-driven mechanism this codebase has for observing a value change\nIS a scheduler-registered handle's `write()` (exactly how\npump-centrifugal drives its own internal FSM); `FlowInferenceCache.update`\nis itself signature-guarded (a no-op unless the stopped/closed set\nactually changed), so calling it unconditionally here — rather than\ngating on `Fsm`'s own `changed` flag, which is `false` on a value's\nvery first resolution — is both safe and correct."
|
|
623
|
+
},
|
|
624
|
+
{
|
|
625
|
+
"kind": "method",
|
|
626
|
+
"name": "_toggleGroup",
|
|
627
|
+
"privacy": "private",
|
|
628
|
+
"return": {
|
|
629
|
+
"type": {
|
|
630
|
+
"text": "void"
|
|
631
|
+
}
|
|
632
|
+
},
|
|
633
|
+
"parameters": [
|
|
634
|
+
{
|
|
635
|
+
"name": "groupId",
|
|
636
|
+
"type": {
|
|
637
|
+
"text": "string"
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
],
|
|
641
|
+
"description": "Story 2.5 Task 3 — the `element-click`/`elementType:'group'` + `toggleGroup` wiring `group-view-state.ts` deferred to `<scada-view>`. A collapse-state change is a structure-once (AD-2) event exactly like a scene reload: full teardown + rebuild, just without resetting `_groupViewState` (only a genuinely new `scene` assignment does that)."
|
|
642
|
+
},
|
|
643
|
+
{
|
|
644
|
+
"kind": "method",
|
|
645
|
+
"name": "_handleConditionTransition",
|
|
646
|
+
"privacy": "private",
|
|
647
|
+
"return": {
|
|
648
|
+
"type": {
|
|
649
|
+
"text": "void"
|
|
650
|
+
}
|
|
651
|
+
},
|
|
652
|
+
"parameters": [
|
|
653
|
+
{
|
|
654
|
+
"name": "elementId",
|
|
655
|
+
"type": {
|
|
656
|
+
"text": "string"
|
|
657
|
+
}
|
|
658
|
+
},
|
|
659
|
+
{
|
|
660
|
+
"name": "next",
|
|
661
|
+
"type": {
|
|
662
|
+
"text": "Condition"
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
],
|
|
666
|
+
"description": "Story 4.4 Task 3 — resolves elementId -> a `LiveRegionController`\nannouncement. `next` alone can't distinguish \"stale because THIS tag\ntimed out\" from \"stale because the whole scene disconnected\" (both\ncollapse into the same `Condition` by the time `Scheduler` reports\nthem, §4.3's `worstOf`) — read `connectionState` at the moment of the\ntransition to disambiguate, exactly as `Scheduler.onConditionTransition`'s\nown doc says the caller must."
|
|
667
|
+
},
|
|
668
|
+
{
|
|
669
|
+
"kind": "method",
|
|
670
|
+
"name": "_wrapHandlesForLiveRegion",
|
|
671
|
+
"privacy": "private",
|
|
672
|
+
"return": {
|
|
673
|
+
"type": {
|
|
674
|
+
"text": "HandleMap"
|
|
675
|
+
}
|
|
676
|
+
},
|
|
677
|
+
"parameters": [
|
|
678
|
+
{
|
|
679
|
+
"name": "element",
|
|
680
|
+
"type": {
|
|
681
|
+
"text": "SceneElement"
|
|
682
|
+
}
|
|
683
|
+
},
|
|
684
|
+
{
|
|
685
|
+
"name": "handles",
|
|
686
|
+
"type": {
|
|
687
|
+
"text": "HandleMap"
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
],
|
|
691
|
+
"description": "Story 4.4 Task 3 — wraps every numeric handle whose tag has a declared\nthreshold with a thin band-transition check (`resolveAlarmBand`),\nannouncing only on an actual band CHANGE into a non-normal band (never\nevery write) before delegating to the primitive's own handle. The\nquantity word in the announcement (\"level\", \"needle\", …) is the tag's\nown binding `type` — the same vocabulary the scene author already\nchose, never a new naming scheme."
|
|
692
|
+
},
|
|
693
|
+
{
|
|
694
|
+
"kind": "method",
|
|
695
|
+
"name": "_registerHandles",
|
|
696
|
+
"privacy": "private",
|
|
697
|
+
"return": {
|
|
698
|
+
"type": {
|
|
699
|
+
"text": "void"
|
|
700
|
+
}
|
|
701
|
+
},
|
|
702
|
+
"parameters": [
|
|
703
|
+
{
|
|
704
|
+
"name": "elementId",
|
|
705
|
+
"type": {
|
|
706
|
+
"text": "string"
|
|
707
|
+
}
|
|
708
|
+
},
|
|
709
|
+
{
|
|
710
|
+
"name": "handles",
|
|
711
|
+
"type": {
|
|
712
|
+
"text": "HandleMap"
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
]
|
|
716
|
+
},
|
|
717
|
+
{
|
|
718
|
+
"kind": "method",
|
|
719
|
+
"name": "_teardownBuiltElements",
|
|
720
|
+
"privacy": "private",
|
|
721
|
+
"return": {
|
|
722
|
+
"type": {
|
|
723
|
+
"text": "void"
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
},
|
|
727
|
+
{
|
|
728
|
+
"kind": "method",
|
|
729
|
+
"name": "_maybeStartScheduler",
|
|
730
|
+
"privacy": "private",
|
|
731
|
+
"return": {
|
|
732
|
+
"type": {
|
|
733
|
+
"text": "void"
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
},
|
|
737
|
+
{
|
|
738
|
+
"kind": "method",
|
|
739
|
+
"name": "_dispatchValueWarning",
|
|
740
|
+
"privacy": "private",
|
|
741
|
+
"return": {
|
|
742
|
+
"type": {
|
|
743
|
+
"text": "void"
|
|
744
|
+
}
|
|
745
|
+
},
|
|
746
|
+
"parameters": [
|
|
747
|
+
{
|
|
748
|
+
"name": "detail",
|
|
749
|
+
"type": {
|
|
750
|
+
"text": "ValueWarningDetail"
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
]
|
|
754
|
+
},
|
|
755
|
+
{
|
|
756
|
+
"kind": "method",
|
|
757
|
+
"name": "_dispatchElementClick",
|
|
758
|
+
"privacy": "private",
|
|
759
|
+
"return": {
|
|
760
|
+
"type": {
|
|
761
|
+
"text": "void"
|
|
762
|
+
}
|
|
763
|
+
},
|
|
764
|
+
"parameters": [
|
|
765
|
+
{
|
|
766
|
+
"name": "detail",
|
|
767
|
+
"type": {
|
|
768
|
+
"text": "ElementClickDetail"
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
],
|
|
772
|
+
"description": "Story 4.2 Task 2 — §3.4 `element-click`."
|
|
773
|
+
},
|
|
774
|
+
{
|
|
775
|
+
"kind": "method",
|
|
776
|
+
"name": "_dispatchElementHover",
|
|
777
|
+
"privacy": "private",
|
|
778
|
+
"return": {
|
|
779
|
+
"type": {
|
|
780
|
+
"text": "void"
|
|
781
|
+
}
|
|
782
|
+
},
|
|
783
|
+
"parameters": [
|
|
784
|
+
{
|
|
785
|
+
"name": "elementId",
|
|
786
|
+
"type": {
|
|
787
|
+
"text": "string"
|
|
788
|
+
}
|
|
789
|
+
},
|
|
790
|
+
{
|
|
791
|
+
"name": "tags",
|
|
792
|
+
"type": {
|
|
793
|
+
"text": "string[]"
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
],
|
|
797
|
+
"description": "Story 4.2 Task 2 — §3.4 `element-hover`; only ever called for a fine (mouse) pointer entering (AC2 — `attachElementInteraction`'s own gate)."
|
|
798
|
+
},
|
|
799
|
+
{
|
|
800
|
+
"kind": "method",
|
|
801
|
+
"name": "_dispatchRenderStats",
|
|
802
|
+
"privacy": "private",
|
|
803
|
+
"return": {
|
|
804
|
+
"type": {
|
|
805
|
+
"text": "void"
|
|
806
|
+
}
|
|
807
|
+
},
|
|
808
|
+
"parameters": [
|
|
809
|
+
{
|
|
810
|
+
"name": "stats",
|
|
811
|
+
"type": {
|
|
812
|
+
"text": "RenderStats"
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
],
|
|
816
|
+
"description": "§3.4 `render-stats` (Story 4.3 Task 4) — only ever called while `debug` is on."
|
|
817
|
+
},
|
|
818
|
+
{
|
|
819
|
+
"kind": "method",
|
|
820
|
+
"name": "_onViewportFrame",
|
|
821
|
+
"privacy": "private",
|
|
822
|
+
"return": {
|
|
823
|
+
"type": {
|
|
824
|
+
"text": "void"
|
|
825
|
+
}
|
|
826
|
+
},
|
|
827
|
+
"parameters": [
|
|
828
|
+
{
|
|
829
|
+
"name": "transform",
|
|
830
|
+
"type": {
|
|
831
|
+
"text": "ViewportTransform"
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
],
|
|
835
|
+
"description": "Story 4.3 Task 1 — the ONE per-gesture-frame write path: stamps the\nviewport `<g>`'s transform, recomputes every hit-area's box in place\nfor the new zoom (no rebuild, AD-2), and re-evaluates the LOD\nthreshold. Called both from a live gesture (immediate) and from the\nexternal-set zoom tween's own per-tick callback."
|
|
836
|
+
},
|
|
837
|
+
{
|
|
838
|
+
"kind": "method",
|
|
839
|
+
"name": "_applyViewportTransform",
|
|
840
|
+
"privacy": "private",
|
|
841
|
+
"return": {
|
|
842
|
+
"type": {
|
|
843
|
+
"text": "void"
|
|
844
|
+
}
|
|
845
|
+
},
|
|
846
|
+
"parameters": [
|
|
847
|
+
{
|
|
848
|
+
"name": "transform",
|
|
849
|
+
"type": {
|
|
850
|
+
"text": "ViewportTransform"
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
]
|
|
854
|
+
},
|
|
855
|
+
{
|
|
856
|
+
"kind": "method",
|
|
857
|
+
"name": "_viewBoxScale",
|
|
858
|
+
"privacy": "private",
|
|
859
|
+
"return": {
|
|
860
|
+
"type": {
|
|
861
|
+
"text": "number"
|
|
862
|
+
}
|
|
863
|
+
},
|
|
864
|
+
"description": "Story 4.3 Task 1 — converts the SVG's live CSS-to-viewBox scale ratio\n(assumes uniform `xMidYMid meet` scaling — this component's own\n`render()` always sets `viewBox=\"0 0 canvasWidth canvasHeight\"` with\nno `preserveAspectRatio` override) so a gesture's CLIENT-space (CSS\npx) delta converts to the SAME viewBox-unit space `pan` lives in."
|
|
865
|
+
},
|
|
866
|
+
{
|
|
867
|
+
"kind": "method",
|
|
868
|
+
"name": "_toCanvasPoint",
|
|
869
|
+
"privacy": "private",
|
|
870
|
+
"return": {
|
|
871
|
+
"type": {
|
|
872
|
+
"text": "{ x: number; y: number }"
|
|
873
|
+
}
|
|
874
|
+
},
|
|
875
|
+
"parameters": [
|
|
876
|
+
{
|
|
877
|
+
"name": "clientX",
|
|
878
|
+
"type": {
|
|
879
|
+
"text": "number"
|
|
880
|
+
}
|
|
881
|
+
},
|
|
882
|
+
{
|
|
883
|
+
"name": "clientY",
|
|
884
|
+
"type": {
|
|
885
|
+
"text": "number"
|
|
886
|
+
}
|
|
887
|
+
}
|
|
888
|
+
],
|
|
889
|
+
"description": "Converts an absolute CLIENT-space point (pinch centroid / wheel cursor) into the viewBox-unit space `zoomAboutPoint`'s anchor expects."
|
|
890
|
+
},
|
|
891
|
+
{
|
|
892
|
+
"kind": "method",
|
|
893
|
+
"name": "_attachPanZoomListeners",
|
|
894
|
+
"privacy": "private",
|
|
895
|
+
"return": {
|
|
896
|
+
"type": {
|
|
897
|
+
"text": "void"
|
|
898
|
+
}
|
|
899
|
+
},
|
|
900
|
+
"parameters": [
|
|
901
|
+
{
|
|
902
|
+
"name": "svg",
|
|
903
|
+
"type": {
|
|
904
|
+
"text": "SVGSVGElement"
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
],
|
|
908
|
+
"description": "Story 4.3 Task 1 — attached ONCE (`firstUpdated`) on the root `<svg>`,\nnot per-element: Pointer Events bubble, so this observes every\ngesture including ones starting over an element's hit area (this\ncomponent has no drag-to-reposition affordance — any drag anywhere\npans the camera). `touch-action: none` (component styles) stops the\nbrowser's own native touch scroll/pinch from fighting this."
|
|
909
|
+
},
|
|
910
|
+
{
|
|
911
|
+
"kind": "method",
|
|
912
|
+
"name": "_syncVisibilityPause",
|
|
913
|
+
"privacy": "private",
|
|
914
|
+
"return": {
|
|
915
|
+
"type": {
|
|
916
|
+
"text": "void"
|
|
917
|
+
}
|
|
918
|
+
},
|
|
919
|
+
"description": "Story 4.3 Task 3 — off-screen (`IntersectionObserver`) OR hidden-tab\n(`document.hidden`) either one pauses; both must clear before\nresuming. Idempotent via `Scheduler`'s own `pauseForOffscreen`/\n`resumeFromOffscreen` guards, so calling this on every observer/\nvisibilitychange firing (even a redundant one) is safe."
|
|
920
|
+
}
|
|
921
|
+
],
|
|
922
|
+
"events": [
|
|
923
|
+
{
|
|
924
|
+
"name": "element-click",
|
|
925
|
+
"type": {
|
|
926
|
+
"text": "CustomEvent<ElementClickDetail>"
|
|
927
|
+
},
|
|
928
|
+
"description": "A scene element's (or collapsed group's) hit area was activated by click/tap/keyboard, while `interactive` is true (§3.4)."
|
|
929
|
+
},
|
|
930
|
+
{
|
|
931
|
+
"name": "value-warning",
|
|
932
|
+
"type": {
|
|
933
|
+
"text": "CustomEvent<ValueWarningDetail>"
|
|
934
|
+
},
|
|
935
|
+
"description": "Dev-only: a pushed `TagValue` didn't map to any declared binding/state/threshold for its element."
|
|
936
|
+
},
|
|
937
|
+
{
|
|
938
|
+
"name": "element-hover",
|
|
939
|
+
"type": {
|
|
940
|
+
"text": "CustomEvent<ElementHoverDetail>"
|
|
941
|
+
},
|
|
942
|
+
"description": "A fine (mouse) pointer entered a scene element's hit area (§3.4)."
|
|
943
|
+
},
|
|
944
|
+
{
|
|
945
|
+
"name": "render-stats",
|
|
946
|
+
"type": {
|
|
947
|
+
"text": "CustomEvent<RenderStats>"
|
|
948
|
+
},
|
|
949
|
+
"description": "Once per second while `debug` is true: frame-timing/element-count accounting for perf diagnostics (§3.2 `debug`)."
|
|
950
|
+
},
|
|
951
|
+
{
|
|
952
|
+
"type": {
|
|
953
|
+
"text": "CustomEvent<SceneErrorDetail>"
|
|
954
|
+
},
|
|
955
|
+
"description": "A structurally invalid `scene` assignment (AD-8), or a dev-only Zod diagnostic on an otherwise-valid one. Structural failures render nothing until a valid scene is assigned.",
|
|
956
|
+
"name": "scene-error"
|
|
957
|
+
}
|
|
958
|
+
],
|
|
959
|
+
"attributes": [
|
|
960
|
+
{
|
|
961
|
+
"name": "license-key",
|
|
962
|
+
"type": {
|
|
963
|
+
"text": "string"
|
|
964
|
+
},
|
|
965
|
+
"description": "Plain-HTML-attribute fallback for `setLicenseKey()` (Story 6.2 Task 2). Module-level, not per-instance."
|
|
966
|
+
},
|
|
967
|
+
{
|
|
968
|
+
"name": "tag-prefix",
|
|
969
|
+
"type": {
|
|
970
|
+
"text": "string"
|
|
971
|
+
},
|
|
972
|
+
"description": "Plain-HTML-attribute fallback for the `tagPrefix` property (Story 2.6 AC2)."
|
|
973
|
+
},
|
|
974
|
+
{
|
|
975
|
+
"name": "interactive",
|
|
976
|
+
"type": {
|
|
977
|
+
"text": "string"
|
|
978
|
+
},
|
|
979
|
+
"description": "Plain-HTML-attribute fallback for the `interactive` property. Any value other than the literal `\"false\"` means interactive."
|
|
980
|
+
},
|
|
981
|
+
{
|
|
982
|
+
"name": "mode",
|
|
983
|
+
"type": {
|
|
984
|
+
"text": "string"
|
|
985
|
+
},
|
|
986
|
+
"description": "Plain-HTML-attribute fallback for the `mode` property. `\"static\"` selects static mode; any other value (including absent) means live."
|
|
987
|
+
},
|
|
988
|
+
{
|
|
989
|
+
"name": "animated",
|
|
990
|
+
"type": {
|
|
991
|
+
"text": "string"
|
|
992
|
+
},
|
|
993
|
+
"description": "Plain-HTML-attribute fallback for the `animated` property. Any value other than the literal `\"false\"` means animated."
|
|
994
|
+
}
|
|
995
|
+
],
|
|
996
|
+
"superclass": {
|
|
997
|
+
"name": "LitElement",
|
|
998
|
+
"package": "lit"
|
|
999
|
+
},
|
|
1000
|
+
"tagName": "scada-view",
|
|
1001
|
+
"customElement": true
|
|
1002
|
+
},
|
|
1003
|
+
{
|
|
1004
|
+
"kind": "variable",
|
|
1005
|
+
"name": "tags",
|
|
1006
|
+
"type": {
|
|
1007
|
+
"text": "array"
|
|
1008
|
+
},
|
|
1009
|
+
"default": "[...new Set(element.bindings.map((binding) => binding.tag))]"
|
|
1010
|
+
},
|
|
1011
|
+
{
|
|
1012
|
+
"kind": "variable",
|
|
1013
|
+
"name": "elementId"
|
|
1014
|
+
},
|
|
1015
|
+
{
|
|
1016
|
+
"kind": "function",
|
|
1017
|
+
"name": "defineScadaView",
|
|
1018
|
+
"return": {
|
|
1019
|
+
"type": {
|
|
1020
|
+
"text": "void"
|
|
1021
|
+
}
|
|
1022
|
+
},
|
|
1023
|
+
"parameters": [
|
|
1024
|
+
{
|
|
1025
|
+
"name": "tagName",
|
|
1026
|
+
"default": "'scada-view'"
|
|
1027
|
+
}
|
|
1028
|
+
],
|
|
1029
|
+
"description": "Explicit registration — importing"
|
|
1030
|
+
}
|
|
1031
|
+
],
|
|
1032
|
+
"exports": [
|
|
1033
|
+
{
|
|
1034
|
+
"kind": "js",
|
|
1035
|
+
"name": "inferAnimationPriority",
|
|
1036
|
+
"declaration": {
|
|
1037
|
+
"name": "inferAnimationPriority",
|
|
1038
|
+
"module": "src/scada-view.ts"
|
|
1039
|
+
}
|
|
1040
|
+
},
|
|
1041
|
+
{
|
|
1042
|
+
"kind": "js",
|
|
1043
|
+
"name": "ScadaView",
|
|
1044
|
+
"declaration": {
|
|
1045
|
+
"name": "ScadaView",
|
|
1046
|
+
"module": "src/scada-view.ts"
|
|
1047
|
+
}
|
|
1048
|
+
},
|
|
1049
|
+
{
|
|
1050
|
+
"kind": "js",
|
|
1051
|
+
"name": "defineScadaView",
|
|
1052
|
+
"declaration": {
|
|
1053
|
+
"name": "defineScadaView",
|
|
1054
|
+
"module": "src/scada-view.ts"
|
|
1055
|
+
}
|
|
1056
|
+
},
|
|
1057
|
+
{
|
|
1058
|
+
"kind": "custom-element-definition",
|
|
1059
|
+
"name": "tagName",
|
|
1060
|
+
"declaration": {
|
|
1061
|
+
"name": "ScadaView",
|
|
1062
|
+
"module": "src/scada-view.ts"
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
1065
|
+
]
|
|
1066
|
+
}
|
|
1067
|
+
]
|
|
1068
|
+
}
|