@vived/component-pneumatic-panel 1.2.0 → 3.0.0
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/CHANGELOG.md +212 -0
- package/COMPONENT_KNOWLEDGE.md +642 -0
- package/LICENSE +15 -0
- package/README.md +62 -23
- package/dist/Domain/Adapters/pneumaticPanelPMAdapter.d.ts.map +1 -1
- package/dist/Domain/Controllers/applyPanelState.d.ts.map +1 -1
- package/dist/Domain/Controllers/getPanelState.d.ts.map +1 -1
- package/dist/Domain/Controllers/panelStateDefaults.d.ts +0 -1
- package/dist/Domain/Controllers/panelStateDefaults.d.ts.map +1 -1
- package/dist/Domain/Entities/PneumaticPanelEntity.d.ts +0 -4
- package/dist/Domain/Entities/PneumaticPanelEntity.d.ts.map +1 -1
- package/dist/Domain/Mocks/MockPneumaticPanelSelectUC.d.ts +0 -4
- package/dist/Domain/Mocks/MockPneumaticPanelSelectUC.d.ts.map +1 -1
- package/dist/Domain/PMs/PneumaticPanelPM.d.ts +0 -3
- package/dist/Domain/PMs/PneumaticPanelPM.d.ts.map +1 -1
- package/dist/Domain/UCs/PneumaticPanelCheckPressureUC.d.ts +4 -3
- package/dist/Domain/UCs/PneumaticPanelCheckPressureUC.d.ts.map +1 -1
- package/dist/Domain/UCs/PneumaticPanelSelectUC.d.ts +0 -14
- package/dist/Domain/UCs/PneumaticPanelSelectUC.d.ts.map +1 -1
- package/dist/Frameworks/Babylon/PneumaticPanelBabylonView.d.ts +9 -12
- package/dist/Frameworks/Babylon/PneumaticPanelBabylonView.d.ts.map +1 -1
- package/dist/Frameworks/Babylon/PneumaticPanelExhaustView.d.ts +2 -2
- package/dist/Frameworks/Babylon/PneumaticPanelExhaustView.d.ts.map +1 -1
- package/dist/Frameworks/Babylon/PneumaticPanelGaugeView.d.ts +2 -2
- package/dist/Frameworks/Babylon/PneumaticPanelGaugeView.d.ts.map +1 -1
- package/dist/Frameworks/Babylon/PneumaticPanelHitboxView.d.ts +5 -7
- package/dist/Frameworks/Babylon/PneumaticPanelHitboxView.d.ts.map +1 -1
- package/dist/Frameworks/Babylon/PneumaticPanelLockView.d.ts +2 -2
- package/dist/Frameworks/Babylon/PneumaticPanelLockView.d.ts.map +1 -1
- package/dist/PneumaticPanelFacade.d.ts +1 -13
- package/dist/PneumaticPanelFacade.d.ts.map +1 -1
- package/dist/index.d.ts +1 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1257 -51
- package/package.json +9 -2
- package/dist/.gitkeep +0 -0
- package/dist/Domain/Controllers/clearAllHighlights.d.ts +0 -9
- package/dist/Domain/Controllers/clearAllHighlights.d.ts.map +0 -1
- package/dist/Domain/Controllers/onPanelHoverEnter.d.ts +0 -7
- package/dist/Domain/Controllers/onPanelHoverEnter.d.ts.map +0 -1
- package/dist/Domain/Controllers/onPanelHoverExit.d.ts +0 -7
- package/dist/Domain/Controllers/onPanelHoverExit.d.ts.map +0 -1
- package/dist/Domain/Controllers/panelHitboxHoverEnter.d.ts +0 -7
- package/dist/Domain/Controllers/panelHitboxHoverEnter.d.ts.map +0 -1
- package/dist/Domain/Controllers/panelHitboxHoverExit.d.ts +0 -7
- package/dist/Domain/Controllers/panelHitboxHoverExit.d.ts.map +0 -1
- package/dist/Domain/Controllers/setHighlightedObject.d.ts +0 -11
- package/dist/Domain/Controllers/setHighlightedObject.d.ts.map +0 -1
- package/dist/Frameworks/Babylon/OutlinePulseController.d.ts +0 -18
- package/dist/Frameworks/Babylon/OutlinePulseController.d.ts.map +0 -1
- package/dist/Frameworks/Babylon/OverlayPulseController.d.ts +0 -17
- package/dist/Frameworks/Babylon/OverlayPulseController.d.ts.map +0 -1
- package/dist/Frameworks/Babylon/PanelOutlineController.d.ts +0 -32
- package/dist/Frameworks/Babylon/PanelOutlineController.d.ts.map +0 -1
- package/dist/Frameworks/Babylon/ScreenSpaceOutlinePulseController.d.ts +0 -17
- package/dist/Frameworks/Babylon/ScreenSpaceOutlinePulseController.d.ts.map +0 -1
- package/dist/clipPlaneFragment-BRmzi2tV.js +0 -55
- package/dist/clipPlaneFragment-CDdVuU0n.js +0 -55
- package/dist/clipPlaneVertex-CIEg9nQi.js +0 -358
- package/dist/clipPlaneVertex-CIarPzTc.js +0 -391
- package/dist/dumpTools-BUC-AUZt.js +0 -110
- package/dist/glowBlurPostProcess.fragment-DDhSDO38.js +0 -13
- package/dist/glowBlurPostProcess.fragment-fpk0xJVe.js +0 -13
- package/dist/glowMapGeneration.fragment-BBSNxu8K.js +0 -193
- package/dist/glowMapGeneration.fragment-Cl-xwsZp.js +0 -161
- package/dist/glowMapGeneration.vertex-CzQHgJdT.js +0 -85
- package/dist/glowMapGeneration.vertex-DErxE57o.js +0 -85
- package/dist/glowMapMerge.vertex-BQosy0g5.js +0 -14
- package/dist/glowMapMerge.vertex-tVYqLRGm.js +0 -13
- package/dist/index-CmNnQLDH.js +0 -36863
- package/dist/pass.fragment-D3pYn4R1.js +0 -10
- package/dist/pneumaticPanel.glb +0 -0
- package/dist/selection.fragment-CGZK1kVt.js +0 -45
- package/dist/selection.fragment-DjWRsu7R.js +0 -45
- package/dist/selection.vertex-DY_1B2lX.js +0 -84
- package/dist/selection.vertex-PhS5tOTA.js +0 -83
- package/dist/selectionOutline.fragment-Bp__J_pC.js +0 -53
- package/dist/selectionOutline.fragment-DmyQJACa.js +0 -54
- package/dist/studio.env +0 -0
- package/dist/thinEngine-dZnz-Owz.js +0 -4
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [3.0.0] - 2026-09-02
|
|
4
|
+
|
|
5
|
+
Smart Component conformance train. Three violations found in the conformance audit
|
|
6
|
+
of `demo_automation_cell` on 2026-09-02, fixed together because each changes the
|
|
7
|
+
consumer contract.
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- **BREAKING: `@vived/app` is now a required `peerDependency`** and is externalized
|
|
12
|
+
in the lib build instead of bundled. Its entire module graph was being inlined
|
|
13
|
+
into `dist/index.js` — 127 KB, 78% of the bundle — freezing a build-time copy
|
|
14
|
+
against which a host ran its own. Cross-copy resolution worked only because
|
|
15
|
+
`@vived/app` looks components up by string `type`; any `instanceof` check or
|
|
16
|
+
renamed `type` string would have failed silently. Hosts that relied on the
|
|
17
|
+
component carrying its own copy must install it; every VIVED host already
|
|
18
|
+
depends on it. `dist/index.js`: 163,144 → 34,714 bytes (gzip 29.58 → 7.29 kB).
|
|
19
|
+
|
|
20
|
+
### Removed
|
|
21
|
+
|
|
22
|
+
- **BREAKING: the pressure dialog moves to the Host (ADR-0010).** `checkPressure()`
|
|
23
|
+
no longer resolves `ShowAlertUC` and no longer renders anything — it fires
|
|
24
|
+
`pressureChecked` and returns. The Host subscribes and reads `pressure` from
|
|
25
|
+
`PneumaticPanelVM`, exactly as `@vived/component-abb-controller` does for
|
|
26
|
+
`voltageChecked`. Removed the `ShowAlertUC` / `ShowAlertDTO` local interfaces,
|
|
27
|
+
the `showAlertUC` getter and the "Missing ShowAlertUC" warning. The UC no longer
|
|
28
|
+
reads `PneumaticPanelEntity` at all. A Host that does not subscribe now shows
|
|
29
|
+
the learner nothing when the gauge is clicked.
|
|
30
|
+
- **BREAKING: the ghost-lock hover reveal moves to the Host (ADR-0010).** Removed
|
|
31
|
+
`bindGhostHoverActions` and its `OnPointerOverTrigger` / `OnPointerOutTrigger`
|
|
32
|
+
actions from `PneumaticPanelLockView`. Ghost-lock visibility is now driven only
|
|
33
|
+
by authored domain state (`showGhostLockHint`); the mesh stays enabled and
|
|
34
|
+
pickable, and the Host reveals it on hover through the existing `ghost_lock`
|
|
35
|
+
entry in `highlightGroupsByObjectId`. This completes the hover removal that
|
|
36
|
+
ADR-0009 scoped to `PneumaticPanelHitboxView` only.
|
|
37
|
+
|
|
38
|
+
### Unchanged
|
|
39
|
+
|
|
40
|
+
- Every `OnPickTrigger` handler — cutoff knob, lock children, ghost lock, hitbox.
|
|
41
|
+
A pick is domain intent and stays with the component.
|
|
42
|
+
- `setShowGhostLockHint()` and the `showGhostLockHint` VM field — authored domain
|
|
43
|
+
state, not interaction state.
|
|
44
|
+
- The facade's TypeScript surface. `checkPressure()`, `pressureChecked`,
|
|
45
|
+
`setShowGhostLockHint()` and `showGhostLockHint` all keep their shapes, which is
|
|
46
|
+
exactly why this is a major bump: the type checker will not flag it for
|
|
47
|
+
consumers, but two features go quiet until the Host wires them.
|
|
48
|
+
|
|
49
|
+
### Notes
|
|
50
|
+
|
|
51
|
+
- Host companion work for `demo_automation_cell` is tracked at
|
|
52
|
+
vivedlearning/demo_automation_cell#320 and must land before this is consumed.
|
|
53
|
+
- The dev playground (`dev/main.ts`) now wires both Host seams itself, so it
|
|
54
|
+
demonstrates the expected integration rather than relying on removed behaviour.
|
|
55
|
+
- ADR-0010 records both boundary decisions and the options rejected.
|
|
56
|
+
|
|
57
|
+
## [2.0.1] - 2026-09-02
|
|
58
|
+
|
|
59
|
+
### Fixed
|
|
60
|
+
|
|
61
|
+
- **The published package no longer ships 3D assets.** The lib build inherited Vite's
|
|
62
|
+
default `publicDir`, so `pneumaticPanel.glb` (406 KB) and `studio.env` (207 KB) were
|
|
63
|
+
copied into `dist/` on every build. Those files exist for the dev playground only —
|
|
64
|
+
at runtime the component fetches its asset by id via `getAssetBlobURL` — so
|
|
65
|
+
`vite.config.ts` now sets `publicDir: false`. Install footprint drops from 777 KB to
|
|
66
|
+
~165 KB. No runtime behaviour changes; hosts never loaded these files from the package.
|
|
67
|
+
- **Corrected the default asset id in `COMPONENT_KNOWLEDGE.md`.** The doc still carried
|
|
68
|
+
the pre-hitbox id `83790d2d-…`; the current GLB (which contains the `panel_hitbox`
|
|
69
|
+
mesh) is `db90a1dd-8cb9-4f56-954d-7a72610281a7`, as `src/component.config.ts` has had
|
|
70
|
+
since the hitbox feature landed.
|
|
71
|
+
|
|
72
|
+
### Added
|
|
73
|
+
|
|
74
|
+
- `publishConfig.access: "public"` in `package.json`, completing the Smart Component
|
|
75
|
+
Packaging & Distribution Convention checklist.
|
|
76
|
+
- A note in `COMPONENT_KNOWLEDGE.md` recording that shipping no assets is deliberate.
|
|
77
|
+
|
|
78
|
+
## [2.0.0] - 2026-07-07
|
|
79
|
+
|
|
80
|
+
### Removed
|
|
81
|
+
|
|
82
|
+
- **BREAKING: presentation-free interaction state (ADR-0009).** The component no longer
|
|
83
|
+
self-renders hover outlines or hint glows, or detects hover — the Host owns all
|
|
84
|
+
hover/hint/selection feedback. Removed the facade commands `setHighlightedObject()` /
|
|
85
|
+
`clearAllHighlights()`; the events `panelHoverEnter` / `panelHoverExit` and their
|
|
86
|
+
`onPanelHoverEnter` / `onPanelHoverExit` / `panelHitboxHoverEnter` /
|
|
87
|
+
`panelHitboxHoverExit` controllers; the `highlightedObject` field from
|
|
88
|
+
`PneumaticPanelState` and `PneumaticPanelVM`; the `PneumaticPanelHighlightedObject`
|
|
89
|
+
type; `PanelOutlineController`, `OverlayPulseController`, `OutlinePulseController`,
|
|
90
|
+
`ScreenSpaceOutlinePulseController`, and the `HighlightLayer` / glow config surface.
|
|
91
|
+
|
|
92
|
+
### Added
|
|
93
|
+
|
|
94
|
+
- **`highlightGroupsByObjectId`** on `PneumaticPanelBabylonView` — a
|
|
95
|
+
`ReadonlyMap<string, AbstractMesh[]>` from semantic `objectId` to the meshes the Host
|
|
96
|
+
should treat as one highlightable unit. The `panel_hitbox` entry maps to every visible
|
|
97
|
+
panel mesh, so the Host can outline the whole panel from the invisible hitbox.
|
|
98
|
+
|
|
99
|
+
### Changed
|
|
100
|
+
|
|
101
|
+
- `PNEUMATIC_PANEL_STATE_VERSION` bumped `1 → 2` (removed `highlightedObject`). Older v1
|
|
102
|
+
snapshots still restore cleanly via ADR-0008 best-effort apply.
|
|
103
|
+
- The `panel_hitbox` mesh is now genuinely invisible (`visibility = 0`); the `0.001`
|
|
104
|
+
epsilon (ADR-0004, now superseded) is no longer needed.
|
|
105
|
+
|
|
106
|
+
## [1.2.0] - 2026-06-26
|
|
107
|
+
|
|
108
|
+
### Added
|
|
109
|
+
|
|
110
|
+
- **`PneumaticPanelFacade`** — a host-facing `SmartComponent` class (Smart Component
|
|
111
|
+
Facade Contract v1), now exported from the package entry point. It is the canonical
|
|
112
|
+
way for a host to drive an instance and wraps the flat controllers behind one typed
|
|
113
|
+
object: `id`, `interfaceVersion`, `onEvent(event, cb)`, `onViewModel(cb)`,
|
|
114
|
+
`load(variant?)`, `destroy()`, `getState()`, `applyState(state)`, plus the
|
|
115
|
+
component-specific commands `toggleExhaust()`, `toggleLock()`, `checkPressure()`,
|
|
116
|
+
`setHighlightedObject()`, `clearAllHighlights()`, `setShowGhostLockHint()`,
|
|
117
|
+
`enableHitbox()`, and `disableHitbox()`. Construction is synchronous, headless, and
|
|
118
|
+
idempotent (constructing for an existing id returns a handle to the same instance).
|
|
119
|
+
- Exported types `SmartComponent` (the structural contract) and `PneumaticPanelEvents`
|
|
120
|
+
(the typed event catalog).
|
|
121
|
+
- **Versioned panel state snapshot/restore** — `PNEUMATIC_PANEL_STATE_VERSION`,
|
|
122
|
+
`PneumaticPanelState`, and the `getPanelState` / `applyPanelState` controllers
|
|
123
|
+
(surfaced on the facade as `getState()` / `applyState()`).
|
|
124
|
+
- **Panel hover events** — `panelHoverEnter` / `panelHoverExit`, with
|
|
125
|
+
`onPanelHoverEnter` / `onPanelHoverExit` subscribe controllers and
|
|
126
|
+
`panelHitboxHoverEnter` / `panelHitboxHoverExit` notify controllers, wired through
|
|
127
|
+
`PneumaticPanelSelectUC` and the Babylon hitbox view.
|
|
128
|
+
- `onCheckPressure` subscribe controller (gauge-click / pressure-check requests).
|
|
129
|
+
|
|
130
|
+
### Changed
|
|
131
|
+
|
|
132
|
+
- The reactive view model is now consumed through the facade's `onViewModel(cb)`. The
|
|
133
|
+
raw `pneumaticPanelPMAdapter` export remains for the framework/view boundary and
|
|
134
|
+
advanced use but is no longer the advertised consumer surface.
|
|
135
|
+
- Panel hover highlight now uses a `SelectionOutlineLayer` for a pixel-space,
|
|
136
|
+
see-through silhouette (`PanelOutlineController`), replacing the earlier
|
|
137
|
+
inverted-hull outline, which itself replaced the original hitbox glow.
|
|
138
|
+
- Panel construction is now idempotent (`getOrCreate` semantics in
|
|
139
|
+
`PneumaticPanelRepo`): creating an instance for an existing id returns the existing
|
|
140
|
+
entity instead of duplicating it.
|
|
141
|
+
|
|
142
|
+
## [1.1.1] - 2026-06-15
|
|
143
|
+
|
|
144
|
+
### Fixed
|
|
145
|
+
|
|
146
|
+
- `onCheckPressure` subscribe controller was missing — gauge click events now appear in the dev panel event log.
|
|
147
|
+
- Babylon Inspector is restored in the dev playground and opens automatically on load.
|
|
148
|
+
|
|
149
|
+
### Added
|
|
150
|
+
|
|
151
|
+
- Clear button in the dev panel Events header — clears the event log on click.
|
|
152
|
+
|
|
153
|
+
## [1.1.0] - 2026-06-15
|
|
154
|
+
|
|
155
|
+
### Added
|
|
156
|
+
|
|
157
|
+
- **Panel hitbox** (`PneumaticPanelHitboxView`) — an invisible mesh covering the entire panel for whole-panel selection mode. When enabled, the panel acts as a single clickable target and all sub-component interactions are disabled.
|
|
158
|
+
- `enablePanelHitbox(id, appObjects)` — enables the panel hitbox.
|
|
159
|
+
- `disablePanelHitbox(id, appObjects)` — disables the hitbox and restores sub-component interactivity.
|
|
160
|
+
- `onPanelSelected(id, appObjects, callback)` — subscribes to panel-hitbox click events; returns an unsubscribe function.
|
|
161
|
+
- `panelHitboxEnabled` property on `PneumaticPanelEntity` and `PneumaticPanelVM`.
|
|
162
|
+
- `subComponentsInteractive` derived property on `PneumaticPanelVM` (always `!panelHitboxEnabled`).
|
|
163
|
+
- `"panelHitbox"` added as a valid value for `setHighlightedObject`.
|
|
164
|
+
- `PneumaticPanelSelectUC` — new use case managing hitbox lifecycle and panel-selected events.
|
|
165
|
+
- `MockPneumaticPanelSelectUC` — mock for consumer integration tests.
|
|
166
|
+
- PRD-as-executable-spec tests for panel operation (`docs/prd/panel-operation.test.ts`).
|
|
167
|
+
|
|
168
|
+
### Changed
|
|
169
|
+
|
|
170
|
+
- Dev sandbox: replaced Babylon Inspector overlay with a lightweight HTML dev panel in the upper-right corner, exposing the three state controls and a live event log.
|
|
171
|
+
- Removed `@babylonjs/inspector` from dev dependencies.
|
|
172
|
+
|
|
173
|
+
## [1.0.1] - 2026-06-05
|
|
174
|
+
|
|
175
|
+
### Fixed
|
|
176
|
+
|
|
177
|
+
- Added `prepublishOnly` script to ensure the package is built before publishing, preventing accidental publishes of stale or missing `dist` output.
|
|
178
|
+
|
|
179
|
+
## [1.0.0] - 2026-05-28
|
|
180
|
+
|
|
181
|
+
### Added
|
|
182
|
+
|
|
183
|
+
- **Lock View** (`PneumaticPanelLockView`) — Manages lock/ghost-lock visibility, click-to-toggle, and ghost-lock hover preview.
|
|
184
|
+
- **Exhaust View** (`PneumaticPanelExhaustView`) — Manages exhaust knob interaction and rotation.
|
|
185
|
+
- **Gauge View** (`PneumaticPanelGaugeView`) — Click the gauge to trigger `checkPressure`.
|
|
186
|
+
- **Asset Cache** (`PneumaticPanelAssetCache`) — Caches loaded GLB assets to avoid redundant downloads across instances.
|
|
187
|
+
- Smooth animated rotation for exhaust knob open/close (cubic ease-in-out, ~250ms).
|
|
188
|
+
- Shake animation on the exhaust knob when toggling is blocked by a locked panel.
|
|
189
|
+
- Red overlay flash on lock meshes when a locked exhaust toggle is attempted.
|
|
190
|
+
- Ghost-lock hover preview: semi-transparent lock appears on pointer hover when exhaust is open and unlocked.
|
|
191
|
+
- `showGhostLockHint` property on `PneumaticPanelEntity` — when `true`, the ghost lock is shown immediately without requiring hover (training mode); when `false` (default), the ghost lock is only revealed on hover (assessment mode).
|
|
192
|
+
- Dev playground inspector setup (`setupInspector.ts`).
|
|
193
|
+
- Direct subscription hooks on domain UCs for Slide integration without a global event bus:
|
|
194
|
+
- `PneumaticPanelToggleLockUC.subscribeOnPanelLocked`
|
|
195
|
+
- `PneumaticPanelToggleLockUC.subscribeOnPanelUnlocked`
|
|
196
|
+
- `PneumaticPanelToggleExhaustUC.subscribeOnExhaustOpened`
|
|
197
|
+
- `PneumaticPanelToggleExhaustUC.subscribeOnExhaustClosed`
|
|
198
|
+
- `PneumaticPanelToggleExhaustUC.subscribeOnExhaustCloseBlockedByLock`
|
|
199
|
+
- `PneumaticPanelCheckPressureUC.subscribeOnCheckPressure`
|
|
200
|
+
- New dedicated UC test files:
|
|
201
|
+
- `PneumaticPanelToggleLockUC.test.ts`
|
|
202
|
+
- `PneumaticPanelToggleExhaustUC.test.ts`
|
|
203
|
+
|
|
204
|
+
### Changed
|
|
205
|
+
|
|
206
|
+
- `PneumaticPanelBabylonView` refactored to delegate per-element behavior to dedicated view components (`ExhaustView`, `LockView`, `GageView`).
|
|
207
|
+
- `createBabylonPneumaticPanel` simplified; view composition now handled by `PneumaticPanelBabylonView`.
|
|
208
|
+
- `PneumaticPanelToggleLockUC` — lock can only be engaged when exhaust is open.
|
|
209
|
+
- `PneumaticPanelToggleLockUC` now dispatches subscribed callbacks after lock/unlock transitions.
|
|
210
|
+
- `PneumaticPanelToggleExhaustUC` now dispatches subscribed callbacks for open/close and blocked-close attempts.
|
|
211
|
+
- `PneumaticPanelCheckPressureUC` now dispatches subscribed callbacks after every `checkPressure()` invocation.
|
|
212
|
+
- Updated `COMPONENT_KNOWLEDGE.md` with full API reference, recipes, and constraints.
|