@vscada/primitives 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/annotation/index.d.ts +9 -0
- package/dist/annotation/index.d.ts.map +1 -0
- package/dist/annotation/off-page/index.d.ts +3 -0
- package/dist/annotation/off-page/index.d.ts.map +1 -0
- package/dist/annotation/off-page/off-page.stories.d.ts +7 -0
- package/dist/annotation/off-page/off-page.stories.d.ts.map +1 -0
- package/dist/annotation/story-kit.d.ts +28 -0
- package/dist/annotation/story-kit.d.ts.map +1 -0
- package/dist/annotation.js +44 -0
- package/dist/base-CByO_2mM.js +87 -0
- package/dist/bevel-DnmDNvyc.js +14 -0
- package/dist/chrome/bevel.d.ts +21 -0
- package/dist/chrome/bevel.d.ts.map +1 -0
- package/dist/controls/index.d.ts +4 -0
- package/dist/controls/index.d.ts.map +1 -0
- package/dist/controls/motor-starter-panel/index.d.ts +4 -0
- package/dist/controls/motor-starter-panel/index.d.ts.map +1 -0
- package/dist/controls/motor-starter-panel/motor-starter-panel.stories.d.ts +10 -0
- package/dist/controls/motor-starter-panel/motor-starter-panel.stories.d.ts.map +1 -0
- package/dist/controls/pushbutton/index.d.ts +4 -0
- package/dist/controls/pushbutton/index.d.ts.map +1 -0
- package/dist/controls/pushbutton/pushbutton.stories.d.ts +7 -0
- package/dist/controls/pushbutton/pushbutton.stories.d.ts.map +1 -0
- package/dist/controls/selector-switch/index.d.ts +4 -0
- package/dist/controls/selector-switch/index.d.ts.map +1 -0
- package/dist/controls/selector-switch/selector-switch.stories.d.ts +8 -0
- package/dist/controls/selector-switch/selector-switch.stories.d.ts.map +1 -0
- package/dist/controls/story-kit.d.ts +31 -0
- package/dist/controls/story-kit.d.ts.map +1 -0
- package/dist/controls.js +149 -0
- package/dist/conveyance/conveyor/conveyor.stories.d.ts +9 -0
- package/dist/conveyance/conveyor/conveyor.stories.d.ts.map +1 -0
- package/dist/conveyance/conveyor/index.d.ts +4 -0
- package/dist/conveyance/conveyor/index.d.ts.map +1 -0
- package/dist/conveyance/duct/duct.stories.d.ts +7 -0
- package/dist/conveyance/duct/duct.stories.d.ts.map +1 -0
- package/dist/conveyance/duct/index.d.ts +4 -0
- package/dist/conveyance/duct/index.d.ts.map +1 -0
- package/dist/conveyance/index.d.ts +5 -0
- package/dist/conveyance/index.d.ts.map +1 -0
- package/dist/conveyance/pipe/dash.d.ts +28 -0
- package/dist/conveyance/pipe/dash.d.ts.map +1 -0
- package/dist/conveyance/pipe/flange.d.ts +9 -0
- package/dist/conveyance/pipe/flange.d.ts.map +1 -0
- package/dist/conveyance/pipe/index.d.ts +3 -0
- package/dist/conveyance/pipe/index.d.ts.map +1 -0
- package/dist/conveyance/pipe/wave.d.ts +29 -0
- package/dist/conveyance/pipe/wave.d.ts.map +1 -0
- package/dist/conveyance/screw-feeder/index.d.ts +4 -0
- package/dist/conveyance/screw-feeder/index.d.ts.map +1 -0
- package/dist/conveyance/screw-feeder/screw-feeder.stories.d.ts +7 -0
- package/dist/conveyance/screw-feeder/screw-feeder.stories.d.ts.map +1 -0
- package/dist/conveyance/story-kit.d.ts +28 -0
- package/dist/conveyance/story-kit.d.ts.map +1 -0
- package/dist/conveyance.js +345 -0
- package/dist/electrical/base.d.ts +54 -0
- package/dist/electrical/base.d.ts.map +1 -0
- package/dist/electrical/breaker/breaker.stories.d.ts +9 -0
- package/dist/electrical/breaker/breaker.stories.d.ts.map +1 -0
- package/dist/electrical/breaker/index.d.ts +4 -0
- package/dist/electrical/breaker/index.d.ts.map +1 -0
- package/dist/electrical/busbar/busbar.stories.d.ts +8 -0
- package/dist/electrical/busbar/busbar.stories.d.ts.map +1 -0
- package/dist/electrical/busbar/index.d.ts +4 -0
- package/dist/electrical/busbar/index.d.ts.map +1 -0
- package/dist/electrical/generator/generator.stories.d.ts +9 -0
- package/dist/electrical/generator/generator.stories.d.ts.map +1 -0
- package/dist/electrical/generator/index.d.ts +4 -0
- package/dist/electrical/generator/index.d.ts.map +1 -0
- package/dist/electrical/index.d.ts +4 -0
- package/dist/electrical/index.d.ts.map +1 -0
- package/dist/electrical/single-line.stories.d.ts +15 -0
- package/dist/electrical/single-line.stories.d.ts.map +1 -0
- package/dist/electrical/story-kit.d.ts +34 -0
- package/dist/electrical/story-kit.d.ts.map +1 -0
- package/dist/electrical/transformer/index.d.ts +4 -0
- package/dist/electrical/transformer/index.d.ts.map +1 -0
- package/dist/electrical/transformer/transformer.stories.d.ts +8 -0
- package/dist/electrical/transformer/transformer.stories.d.ts.map +1 -0
- package/dist/electrical.js +214 -0
- package/dist/filtration/bag-filter/bag-filter.stories.d.ts +6 -0
- package/dist/filtration/bag-filter/bag-filter.stories.d.ts.map +1 -0
- package/dist/filtration/bag-filter/index.d.ts +3 -0
- package/dist/filtration/bag-filter/index.d.ts.map +1 -0
- package/dist/filtration/base.d.ts +25 -0
- package/dist/filtration/base.d.ts.map +1 -0
- package/dist/filtration/cyclone/cyclone.stories.d.ts +6 -0
- package/dist/filtration/cyclone/cyclone.stories.d.ts.map +1 -0
- package/dist/filtration/cyclone/index.d.ts +3 -0
- package/dist/filtration/cyclone/index.d.ts.map +1 -0
- package/dist/filtration/index.d.ts +9 -0
- package/dist/filtration/index.d.ts.map +1 -0
- package/dist/filtration/scrubber/index.d.ts +3 -0
- package/dist/filtration/scrubber/index.d.ts.map +1 -0
- package/dist/filtration/scrubber/scrubber.stories.d.ts +6 -0
- package/dist/filtration/scrubber/scrubber.stories.d.ts.map +1 -0
- package/dist/filtration/stack/index.d.ts +3 -0
- package/dist/filtration/stack/index.d.ts.map +1 -0
- package/dist/filtration/stack/stack.stories.d.ts +6 -0
- package/dist/filtration/stack/stack.stories.d.ts.map +1 -0
- package/dist/filtration/story-kit.d.ts +27 -0
- package/dist/filtration/story-kit.d.ts.map +1 -0
- package/dist/filtration.js +163 -0
- package/dist/gradients/pipe-gradient.d.ts +35 -0
- package/dist/gradients/pipe-gradient.d.ts.map +1 -0
- package/dist/heat/base.d.ts +28 -0
- package/dist/heat/base.d.ts.map +1 -0
- package/dist/heat/boiler/boiler.stories.d.ts +8 -0
- package/dist/heat/boiler/boiler.stories.d.ts.map +1 -0
- package/dist/heat/boiler/index.d.ts +3 -0
- package/dist/heat/boiler/index.d.ts.map +1 -0
- package/dist/heat/coil/coil.stories.d.ts +6 -0
- package/dist/heat/coil/coil.stories.d.ts.map +1 -0
- package/dist/heat/coil/index.d.ts +3 -0
- package/dist/heat/coil/index.d.ts.map +1 -0
- package/dist/heat/condenser/condenser.stories.d.ts +6 -0
- package/dist/heat/condenser/condenser.stories.d.ts.map +1 -0
- package/dist/heat/condenser/index.d.ts +3 -0
- package/dist/heat/condenser/index.d.ts.map +1 -0
- package/dist/heat/cooling-tower/cooling-tower.stories.d.ts +6 -0
- package/dist/heat/cooling-tower/cooling-tower.stories.d.ts.map +1 -0
- package/dist/heat/cooling-tower/index.d.ts +3 -0
- package/dist/heat/cooling-tower/index.d.ts.map +1 -0
- package/dist/heat/furnace/furnace.stories.d.ts +8 -0
- package/dist/heat/furnace/furnace.stories.d.ts.map +1 -0
- package/dist/heat/furnace/index.d.ts +3 -0
- package/dist/heat/furnace/index.d.ts.map +1 -0
- package/dist/heat/index.d.ts +9 -0
- package/dist/heat/index.d.ts.map +1 -0
- package/dist/heat/shell-tube/index.d.ts +3 -0
- package/dist/heat/shell-tube/index.d.ts.map +1 -0
- package/dist/heat/shell-tube/shell-tube.stories.d.ts +6 -0
- package/dist/heat/shell-tube/shell-tube.stories.d.ts.map +1 -0
- package/dist/heat/story-kit.d.ts +27 -0
- package/dist/heat/story-kit.d.ts.map +1 -0
- package/dist/heat.js +290 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/instruments/bargraph/bargraph.stories.d.ts +8 -0
- package/dist/instruments/bargraph/bargraph.stories.d.ts.map +1 -0
- package/dist/instruments/bargraph/index.d.ts +3 -0
- package/dist/instruments/bargraph/index.d.ts.map +1 -0
- package/dist/instruments/face.d.ts +15 -0
- package/dist/instruments/face.d.ts.map +1 -0
- package/dist/instruments/gauge-analog/gauge-analog.stories.d.ts +11 -0
- package/dist/instruments/gauge-analog/gauge-analog.stories.d.ts.map +1 -0
- package/dist/instruments/gauge-analog/index.d.ts +3 -0
- package/dist/instruments/gauge-analog/index.d.ts.map +1 -0
- package/dist/instruments/gauge-digital/gauge-digital.stories.d.ts +7 -0
- package/dist/instruments/gauge-digital/gauge-digital.stories.d.ts.map +1 -0
- package/dist/instruments/gauge-digital/index.d.ts +3 -0
- package/dist/instruments/gauge-digital/index.d.ts.map +1 -0
- package/dist/instruments/index.d.ts +10 -0
- package/dist/instruments/index.d.ts.map +1 -0
- package/dist/instruments/indicator-lamp/index.d.ts +3 -0
- package/dist/instruments/indicator-lamp/index.d.ts.map +1 -0
- package/dist/instruments/indicator-lamp/indicator-lamp.stories.d.ts +9 -0
- package/dist/instruments/indicator-lamp/indicator-lamp.stories.d.ts.map +1 -0
- package/dist/instruments/readout-panel/index.d.ts +3 -0
- package/dist/instruments/readout-panel/index.d.ts.map +1 -0
- package/dist/instruments/readout-panel/readout-panel.stories.d.ts +6 -0
- package/dist/instruments/readout-panel/readout-panel.stories.d.ts.map +1 -0
- package/dist/instruments/story-kit.d.ts +29 -0
- package/dist/instruments/story-kit.d.ts.map +1 -0
- package/dist/instruments/trend-mini/index.d.ts +3 -0
- package/dist/instruments/trend-mini/index.d.ts.map +1 -0
- package/dist/instruments/trend-mini/trend-mini.stories.d.ts +6 -0
- package/dist/instruments/trend-mini/trend-mini.stories.d.ts.map +1 -0
- package/dist/instruments.js +347 -0
- package/dist/motion/seamless-loop.d.ts +14 -0
- package/dist/motion/seamless-loop.d.ts.map +1 -0
- package/dist/pipe-gradient-B538FEvi.js +18 -0
- package/dist/readout/index.d.ts +3 -0
- package/dist/readout/index.d.ts.map +1 -0
- package/dist/readout/readout.stories.d.ts +8 -0
- package/dist/readout/readout.stories.d.ts.map +1 -0
- package/dist/readout/story-kit.d.ts +27 -0
- package/dist/readout/story-kit.d.ts.map +1 -0
- package/dist/readout.js +33 -0
- package/dist/recipe-BxxL1vV1.js +383 -0
- package/dist/rotating/compressor/compressor.stories.d.ts +28 -0
- package/dist/rotating/compressor/compressor.stories.d.ts.map +1 -0
- package/dist/rotating/compressor/index.d.ts +3 -0
- package/dist/rotating/compressor/index.d.ts.map +1 -0
- package/dist/rotating/fan-axial/fan-axial.stories.d.ts +31 -0
- package/dist/rotating/fan-axial/fan-axial.stories.d.ts.map +1 -0
- package/dist/rotating/fan-axial/index.d.ts +3 -0
- package/dist/rotating/fan-axial/index.d.ts.map +1 -0
- package/dist/rotating/fan-centrifugal/fan-centrifugal.stories.d.ts +31 -0
- package/dist/rotating/fan-centrifugal/fan-centrifugal.stories.d.ts.map +1 -0
- package/dist/rotating/fan-centrifugal/index.d.ts +3 -0
- package/dist/rotating/fan-centrifugal/index.d.ts.map +1 -0
- package/dist/rotating/index.d.ts +12 -0
- package/dist/rotating/index.d.ts.map +1 -0
- package/dist/rotating/motor/index.d.ts +3 -0
- package/dist/rotating/motor/index.d.ts.map +1 -0
- package/dist/rotating/motor/motor.stories.d.ts +28 -0
- package/dist/rotating/motor/motor.stories.d.ts.map +1 -0
- package/dist/rotating/pump-centrifugal/index.d.ts +3 -0
- package/dist/rotating/pump-centrifugal/index.d.ts.map +1 -0
- package/dist/rotating/pump-centrifugal/pump-centrifugal.stories.d.ts +29 -0
- package/dist/rotating/pump-centrifugal/pump-centrifugal.stories.d.ts.map +1 -0
- package/dist/rotating/pump-positive-displacement/index.d.ts +3 -0
- package/dist/rotating/pump-positive-displacement/index.d.ts.map +1 -0
- package/dist/rotating/pump-positive-displacement/pump-positive-displacement.stories.d.ts +28 -0
- package/dist/rotating/pump-positive-displacement/pump-positive-displacement.stories.d.ts.map +1 -0
- package/dist/rotating/story-kit.d.ts +65 -0
- package/dist/rotating/story-kit.d.ts.map +1 -0
- package/dist/rotating/turbine/index.d.ts +3 -0
- package/dist/rotating/turbine/index.d.ts.map +1 -0
- package/dist/rotating/turbine/turbine.stories.d.ts +29 -0
- package/dist/rotating/turbine/turbine.stories.d.ts.map +1 -0
- package/dist/rotating.js +513 -0
- package/dist/rotation-drive/base.d.ts +110 -0
- package/dist/rotation-drive/base.d.ts.map +1 -0
- package/dist/valves/ball/ball.stories.d.ts +26 -0
- package/dist/valves/ball/ball.stories.d.ts.map +1 -0
- package/dist/valves/ball/index.d.ts +3 -0
- package/dist/valves/ball/index.d.ts.map +1 -0
- package/dist/valves/base.d.ts +70 -0
- package/dist/valves/base.d.ts.map +1 -0
- package/dist/valves/butterfly/butterfly.stories.d.ts +26 -0
- package/dist/valves/butterfly/butterfly.stories.d.ts.map +1 -0
- package/dist/valves/butterfly/index.d.ts +3 -0
- package/dist/valves/butterfly/index.d.ts.map +1 -0
- package/dist/valves/check/check.stories.d.ts +25 -0
- package/dist/valves/check/check.stories.d.ts.map +1 -0
- package/dist/valves/check/index.d.ts +3 -0
- package/dist/valves/check/index.d.ts.map +1 -0
- package/dist/valves/control/control.stories.d.ts +26 -0
- package/dist/valves/control/control.stories.d.ts.map +1 -0
- package/dist/valves/control/index.d.ts +3 -0
- package/dist/valves/control/index.d.ts.map +1 -0
- package/dist/valves/gate/gate.stories.d.ts +26 -0
- package/dist/valves/gate/gate.stories.d.ts.map +1 -0
- package/dist/valves/gate/index.d.ts +3 -0
- package/dist/valves/gate/index.d.ts.map +1 -0
- package/dist/valves/index.d.ts +8 -0
- package/dist/valves/index.d.ts.map +1 -0
- package/dist/valves/relief/index.d.ts +3 -0
- package/dist/valves/relief/index.d.ts.map +1 -0
- package/dist/valves/relief/relief.stories.d.ts +26 -0
- package/dist/valves/relief/relief.stories.d.ts.map +1 -0
- package/dist/valves/story-kit.d.ts +54 -0
- package/dist/valves/story-kit.d.ts.map +1 -0
- package/dist/valves.js +424 -0
- package/dist/vapor/base.d.ts +42 -0
- package/dist/vapor/base.d.ts.map +1 -0
- package/dist/vapor/billow-layer.d.ts +33 -0
- package/dist/vapor/billow-layer.d.ts.map +1 -0
- package/dist/vapor/billow-path.d.ts +36 -0
- package/dist/vapor/billow-path.d.ts.map +1 -0
- package/dist/vapor/index.d.ts +8 -0
- package/dist/vapor/index.d.ts.map +1 -0
- package/dist/vapor/plume/index.d.ts +3 -0
- package/dist/vapor/plume/index.d.ts.map +1 -0
- package/dist/vapor/plume/plume.stories.d.ts +9 -0
- package/dist/vapor/plume/plume.stories.d.ts.map +1 -0
- package/dist/vapor/steam-vent/index.d.ts +3 -0
- package/dist/vapor/steam-vent/index.d.ts.map +1 -0
- package/dist/vapor/steam-vent/steam-vent.stories.d.ts +9 -0
- package/dist/vapor/steam-vent/steam-vent.stories.d.ts.map +1 -0
- package/dist/vapor/story-kit.d.ts +28 -0
- package/dist/vapor/story-kit.d.ts.map +1 -0
- package/dist/vapor.js +194 -0
- package/dist/vessel-body/hardware.d.ts +13 -0
- package/dist/vessel-body/hardware.d.ts.map +1 -0
- package/dist/vessel-body/liquid/dished-bottom.d.ts +33 -0
- package/dist/vessel-body/liquid/dished-bottom.d.ts.map +1 -0
- package/dist/vessel-body/liquid/index.d.ts +11 -0
- package/dist/vessel-body/liquid/index.d.ts.map +1 -0
- package/dist/vessel-body/liquid/wave-layer.d.ts +57 -0
- package/dist/vessel-body/liquid/wave-layer.d.ts.map +1 -0
- package/dist/vessel-body/liquid/wave-path.d.ts +45 -0
- package/dist/vessel-body/liquid/wave-path.d.ts.map +1 -0
- package/dist/vessel-body/recipe.d.ts +85 -0
- package/dist/vessel-body/recipe.d.ts.map +1 -0
- package/dist/vessel-body/shapes.d.ts +78 -0
- package/dist/vessel-body/shapes.d.ts.map +1 -0
- package/dist/vessels/drum/drum.stories.d.ts +33 -0
- package/dist/vessels/drum/drum.stories.d.ts.map +1 -0
- package/dist/vessels/drum/index.d.ts +3 -0
- package/dist/vessels/drum/index.d.ts.map +1 -0
- package/dist/vessels/hopper/hopper.stories.d.ts +39 -0
- package/dist/vessels/hopper/hopper.stories.d.ts.map +1 -0
- package/dist/vessels/hopper/index.d.ts +3 -0
- package/dist/vessels/hopper/index.d.ts.map +1 -0
- package/dist/vessels/index.d.ts +10 -0
- package/dist/vessels/index.d.ts.map +1 -0
- package/dist/vessels/silo/index.d.ts +3 -0
- package/dist/vessels/silo/index.d.ts.map +1 -0
- package/dist/vessels/silo/silo.stories.d.ts +33 -0
- package/dist/vessels/silo/silo.stories.d.ts.map +1 -0
- package/dist/vessels/story-kit.d.ts +83 -0
- package/dist/vessels/story-kit.d.ts.map +1 -0
- package/dist/vessels/tank-horizontal/index.d.ts +3 -0
- package/dist/vessels/tank-horizontal/index.d.ts.map +1 -0
- package/dist/vessels/tank-horizontal/tank-horizontal.stories.d.ts +33 -0
- package/dist/vessels/tank-horizontal/tank-horizontal.stories.d.ts.map +1 -0
- package/dist/vessels/tank-spherical/index.d.ts +3 -0
- package/dist/vessels/tank-spherical/index.d.ts.map +1 -0
- package/dist/vessels/tank-spherical/tank-spherical.stories.d.ts +33 -0
- package/dist/vessels/tank-spherical/tank-spherical.stories.d.ts.map +1 -0
- package/dist/vessels/tank-vertical/index.d.ts +3 -0
- package/dist/vessels/tank-vertical/index.d.ts.map +1 -0
- package/dist/vessels/tank-vertical/tank-vertical.stories.d.ts +47 -0
- package/dist/vessels/tank-vertical/tank-vertical.stories.d.ts.map +1 -0
- package/dist/vessels.js +198 -0
- package/package.json +76 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"story-kit.d.ts","sourceRoot":"","sources":["../../src/vapor/story-kit.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,SAAS,EACT,KAAK,OAAO,EACZ,KAAK,QAAQ,EAEb,KAAK,QAAQ,EAEb,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AAoCtB,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,EAAE,CAAC;IACnB,gFAAgF;IAChF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAwCD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IACpC,QAAQ,IAAI,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,kIAAkI;IAClI,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,sBAA2B,GAAG,iBAAiB,CAkBxJ"}
|
package/dist/vapor.js
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { resolveEmissionIntensity as e, resolveMediumStyle as t } from "@vscada/core";
|
|
2
|
+
function n(e, t, n, r) {
|
|
3
|
+
return t + n * Math.sin(2 * Math.PI * e / r);
|
|
4
|
+
}
|
|
5
|
+
function r(e, t, r, i, a = 6) {
|
|
6
|
+
let o = [], s = a > 0 ? a : 6;
|
|
7
|
+
for (let a = 0; a < e; a += s) o.push({
|
|
8
|
+
x: n(a, t, r, i),
|
|
9
|
+
y: a
|
|
10
|
+
});
|
|
11
|
+
return o.push({
|
|
12
|
+
x: n(e, t, r, i),
|
|
13
|
+
y: e
|
|
14
|
+
}), o;
|
|
15
|
+
}
|
|
16
|
+
function i(e, t, n, i, a = 6) {
|
|
17
|
+
let o = r(e, t, n, i, a), s = [...o].reverse();
|
|
18
|
+
return [
|
|
19
|
+
...o.map((e, t) => `${t === 0 ? "M" : "L"}${e.x},${e.y}`),
|
|
20
|
+
...s.map((e) => `L${-e.x},${e.y}`),
|
|
21
|
+
"Z"
|
|
22
|
+
].join(" ");
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
//#region src/motion/seamless-loop.ts
|
|
26
|
+
function a(e, t, n, r, i) {
|
|
27
|
+
let a = t === "x" ? "translateX(0px)" : "translateY(0px)", o = t === "x" ? `translateX(-${n}px)` : `translateY(-${n}px)`;
|
|
28
|
+
return i.animateTransform(e, [a, o], r);
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
//#region src/vapor/billow-layer.ts
|
|
32
|
+
var o = "http://www.w3.org/2000/svg", s = 3e3;
|
|
33
|
+
function c(e, t) {
|
|
34
|
+
let { containerHeight: n, centerX: r, baseHalfWidth: c, wobble: l, period: u, color: d, durationMs: f = s } = e, p = i(n + u, c, l, u), m = document.createElementNS(o, "g");
|
|
35
|
+
m.setAttribute("class", "vscada-vapor-billow-carrier"), m.setAttribute("transform", `translate(${r}, 0)`);
|
|
36
|
+
let h = document.createElementNS(o, "g");
|
|
37
|
+
h.setAttribute("class", "vscada-vapor-billow-loop"), m.appendChild(h);
|
|
38
|
+
let g = document.createElementNS(o, "path");
|
|
39
|
+
return g.setAttribute("class", "vscada-vapor-billow-fill"), g.setAttribute("d", p), g.setAttribute("fill", d), g.setAttribute("fill-opacity", "0"), g.setAttribute("stroke", "none"), h.appendChild(g), {
|
|
40
|
+
carrier: m,
|
|
41
|
+
fill: g,
|
|
42
|
+
control: a(h, "y", u, f, t)
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//#endregion
|
|
46
|
+
//#region src/vapor/base.ts
|
|
47
|
+
function l(e) {}
|
|
48
|
+
function u(t) {
|
|
49
|
+
let { element: n, group: r, layers: i, staticGlyph: a, plumeStyle: o, brightnessFactor: s = 1, onWarning: c = l } = t, u = n.bindings.find((e) => e.type === "emission");
|
|
50
|
+
if (!u) return { handles: {} };
|
|
51
|
+
let d = {
|
|
52
|
+
kind: "numeric",
|
|
53
|
+
write(t, n) {
|
|
54
|
+
n < 0 && c({
|
|
55
|
+
code: "NEGATIVE_EMISSION_VALUE",
|
|
56
|
+
message: `Tag "${u.tag}": emission value ${n} is negative`,
|
|
57
|
+
tag: u.tag
|
|
58
|
+
});
|
|
59
|
+
let l = e(u, n);
|
|
60
|
+
t.setAttr(r, "opacity", l > 0 ? "1" : "0");
|
|
61
|
+
let d = Math.min(1, l * o.opacity * s);
|
|
62
|
+
for (let e of i) t.setAttr(e.fill, "fill-opacity", String(d)), e.control.setPlaybackRate(l * o.driftSpeed);
|
|
63
|
+
a && t.setAttr(a, "fill-opacity", String(d));
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
return { handles: { [u.tag]: d } };
|
|
67
|
+
}
|
|
68
|
+
function d(e, t, n) {
|
|
69
|
+
if (!n) return {};
|
|
70
|
+
let r = n, i = {
|
|
71
|
+
kind: "static-representation",
|
|
72
|
+
activate() {
|
|
73
|
+
for (let e of t) e.carrier.style.display = "none";
|
|
74
|
+
r.style.display = "";
|
|
75
|
+
},
|
|
76
|
+
deactivate() {
|
|
77
|
+
for (let e of t) e.carrier.style.display = "";
|
|
78
|
+
r.style.display = "none";
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
return { [`__vapor-static-representation-${e}`]: i };
|
|
82
|
+
}
|
|
83
|
+
function f(e, t) {
|
|
84
|
+
return t.length === 0 ? {} : { [`__vapor-drift-animation-${e}`]: {
|
|
85
|
+
kind: "animation",
|
|
86
|
+
pause() {
|
|
87
|
+
for (let e of t) e.control.pause();
|
|
88
|
+
},
|
|
89
|
+
resume() {
|
|
90
|
+
for (let e of t) e.control.resume();
|
|
91
|
+
},
|
|
92
|
+
seek(e) {
|
|
93
|
+
for (let n of t) n.control.seek(e);
|
|
94
|
+
}
|
|
95
|
+
} };
|
|
96
|
+
}
|
|
97
|
+
//#endregion
|
|
98
|
+
//#region src/vapor/plume/index.ts
|
|
99
|
+
var p = "http://www.w3.org/2000/svg", m = 3, h = .35, g = .9, _ = .6;
|
|
100
|
+
function v(e, n, r) {
|
|
101
|
+
let a = document.createElementNS(p, "g");
|
|
102
|
+
a.setAttribute("data-element-id", e.id), a.setAttribute("class", "vscada-vapor-plume"), a.setAttribute("opacity", "0");
|
|
103
|
+
let o = t(n.tokens.medium, e.medium);
|
|
104
|
+
if (!o?.plume) return {
|
|
105
|
+
svg: a,
|
|
106
|
+
handles: {}
|
|
107
|
+
};
|
|
108
|
+
let { w: l, h: v } = e, y = l / 2, b = Math.max(8, v * g), x = [];
|
|
109
|
+
for (let e = 0; e < m; e++) {
|
|
110
|
+
let t = Math.max(2, l / 2 * (1 - e * .18)), n = c({
|
|
111
|
+
containerHeight: v,
|
|
112
|
+
centerX: y,
|
|
113
|
+
baseHalfWidth: t,
|
|
114
|
+
wobble: t * h,
|
|
115
|
+
period: b,
|
|
116
|
+
color: o.color,
|
|
117
|
+
durationMs: s * (1 + e * _)
|
|
118
|
+
}, r);
|
|
119
|
+
a.appendChild(n.carrier), x.push(n);
|
|
120
|
+
}
|
|
121
|
+
let S = document.createElementNS(p, "path");
|
|
122
|
+
S.setAttribute("class", "vscada-vapor-plume-static"), S.setAttribute("transform", `translate(${y}, 0)`), S.setAttribute("d", i(v, l * .32, l * .32 * h, b)), S.setAttribute("fill", o.color), S.setAttribute("fill-opacity", "0"), S.setAttribute("stroke", "none"), S.style.display = "none", a.appendChild(S);
|
|
123
|
+
let C = u({
|
|
124
|
+
element: e,
|
|
125
|
+
group: a,
|
|
126
|
+
layers: x,
|
|
127
|
+
staticGlyph: S,
|
|
128
|
+
plumeStyle: o.plume
|
|
129
|
+
}), w = f(e.id, x), T = d(e.id, x, S);
|
|
130
|
+
return {
|
|
131
|
+
svg: a,
|
|
132
|
+
handles: {
|
|
133
|
+
...C.handles,
|
|
134
|
+
...w,
|
|
135
|
+
...T
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
var y = Object.freeze({
|
|
140
|
+
group: "vapor",
|
|
141
|
+
primitives: Object.freeze({ plume: { build: v } })
|
|
142
|
+
}), b = "http://www.w3.org/2000/svg", x = 2, S = .3, C = .7, w = .5, T = .4, E = 1.6, D = "steam";
|
|
143
|
+
function O(e, n, r) {
|
|
144
|
+
let a = document.createElementNS(b, "g");
|
|
145
|
+
a.setAttribute("data-element-id", e.id), a.setAttribute("class", "vscada-vapor-steam-vent"), a.setAttribute("opacity", "0");
|
|
146
|
+
let o = t(n.tokens.medium, e.medium ?? D);
|
|
147
|
+
if (!o?.plume) return {
|
|
148
|
+
svg: a,
|
|
149
|
+
handles: {}
|
|
150
|
+
};
|
|
151
|
+
let { w: l, h: p } = e, m = l / 2, h = Math.max(6, p * C), g = [];
|
|
152
|
+
for (let e = 0; e < x; e++) {
|
|
153
|
+
let t = Math.max(1.5, l / 2 * (1 - e * .2)), n = c({
|
|
154
|
+
containerHeight: p,
|
|
155
|
+
centerX: m,
|
|
156
|
+
baseHalfWidth: t,
|
|
157
|
+
wobble: t * S,
|
|
158
|
+
period: h,
|
|
159
|
+
color: o.color,
|
|
160
|
+
durationMs: s * w * (1 + e * T)
|
|
161
|
+
}, r);
|
|
162
|
+
a.appendChild(n.carrier), g.push(n);
|
|
163
|
+
}
|
|
164
|
+
let _ = document.createElementNS(b, "path");
|
|
165
|
+
_.setAttribute("class", "vscada-vapor-steam-vent-static"), _.setAttribute("transform", `translate(${m}, 0)`), _.setAttribute("d", i(p, l * .28, l * .28 * S, h)), _.setAttribute("fill", o.color), _.setAttribute("fill-opacity", "0"), _.setAttribute("stroke", "none"), _.style.display = "none", a.appendChild(_);
|
|
166
|
+
let v = u({
|
|
167
|
+
element: e,
|
|
168
|
+
group: a,
|
|
169
|
+
layers: g,
|
|
170
|
+
staticGlyph: _,
|
|
171
|
+
plumeStyle: o.plume,
|
|
172
|
+
brightnessFactor: E
|
|
173
|
+
}), y = f(e.id, g), O = d(e.id, g, _);
|
|
174
|
+
return {
|
|
175
|
+
svg: a,
|
|
176
|
+
handles: {
|
|
177
|
+
...v.handles,
|
|
178
|
+
...y,
|
|
179
|
+
...O
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
var k = Object.freeze({
|
|
184
|
+
group: "vapor",
|
|
185
|
+
primitives: Object.freeze({ "steam-vent": { build: O } })
|
|
186
|
+
}), A = Object.freeze({
|
|
187
|
+
group: "vapor",
|
|
188
|
+
primitives: Object.freeze({
|
|
189
|
+
...y.primitives,
|
|
190
|
+
...k.primitives
|
|
191
|
+
})
|
|
192
|
+
});
|
|
193
|
+
//#endregion
|
|
194
|
+
export { A as vapor };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { VesselTokens } from '@vscada/core';
|
|
2
|
+
/** §7.2 layer 6's "which small details" per vessel silhouette — one shared builder, a variant switch, never a per-vessel fork. */
|
|
3
|
+
export type VesselHardwareVariant = 'tank-vertical' | 'tank-horizontal' | 'drum' | 'sphere' | 'hopper' | 'silo';
|
|
4
|
+
/**
|
|
5
|
+
* §7.2 layer 6: "three or four small details convince more than a perfect
|
|
6
|
+
* outline" — deliberately NOT exhaustive per vessel. Every dimension is a
|
|
7
|
+
* function of `w`/`h` (parametric, AD-3); every color/width is a token
|
|
8
|
+
* (AD-7, via the small `rect`/`circle`/`weldLine`/… helpers above, which
|
|
9
|
+
* degrade to `'none'` exactly like every other primitive here when a token
|
|
10
|
+
* is unregistered).
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildHardwareLayer(w: number, h: number, variant: VesselHardwareVariant, tokens: VesselTokens | undefined): SVGGElement;
|
|
13
|
+
//# sourceMappingURL=hardware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hardware.d.ts","sourceRoot":"","sources":["../../src/vessel-body/hardware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,kIAAkI;AAClI,MAAM,MAAM,qBAAqB,GAAG,eAAe,GAAG,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAgFhH;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,WAAW,CA6DtI"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dished-bottom tank head clip geometry (Story 3.2 Task 3, §7.2: "Rim
|
|
3
|
+
* details — top and bottom ellipses for tank heads (ellipse ratio ~0.18 of
|
|
4
|
+
* width)"). Story 1.5 shipped a plain full-rect clip; that's fine at high
|
|
5
|
+
* fill but wrong at low fill — a real dished bottom narrows to a point, so
|
|
6
|
+
* a 2% level should read as a thin LENS at the vessel's horizontal center,
|
|
7
|
+
* not a full-width sliver. This module owns that shape as pure geometry so
|
|
8
|
+
* it's testable without a browser (jsdom does not rasterize clip-path).
|
|
9
|
+
*/
|
|
10
|
+
/** §7.2's constant — the dish's height as a fraction of the vessel's WIDTH (not height). */
|
|
11
|
+
export declare const DISH_WIDTH_RATIO = 0.18;
|
|
12
|
+
/** Clamped so a very short/squat vessel can't have a dish taller than the vessel itself. */
|
|
13
|
+
export declare function dishHeightFor(w: number, h: number, ratio?: number): number;
|
|
14
|
+
/**
|
|
15
|
+
* Clip path `d` for the vessel's liquid area: a flat-sided rect down to
|
|
16
|
+
* `h - dish`, then a half-ellipse (rx = w/2, ry = dish) sweeping through
|
|
17
|
+
* the bottom-center point (w/2, h) back up to the opposite side. Sweep
|
|
18
|
+
* flag 1 draws the LOWER half of the ellipse (the two endpoints sit on the
|
|
19
|
+
* ellipse's horizontal axis, so sweep alone picks top-half vs bottom-half
|
|
20
|
+
* for this exactly-180-degree arc) — i.e. the bulge goes down, not up.
|
|
21
|
+
* Built ONCE per element (cached by clip id, same pattern as Story 1.5's
|
|
22
|
+
* plain-rect clip) — never regenerated per frame or per level change.
|
|
23
|
+
*/
|
|
24
|
+
export declare function dishedBottomClipPathD(w: number, h: number, ratio?: number): string;
|
|
25
|
+
/**
|
|
26
|
+
* The visible liquid width at `depthFromTip` px above the vessel's very
|
|
27
|
+
* bottom point (0 at the tip, growing to the full `w` once `depthFromTip`
|
|
28
|
+
* reaches the dish's height). Pure ellipse cross-section math — exists so
|
|
29
|
+
* the "0-5% level" AC is verifiable directly (a thin puddle must compute
|
|
30
|
+
* to LESS than the full width) without needing real SVG rendering.
|
|
31
|
+
*/
|
|
32
|
+
export declare function dishWidthAtDepth(w: number, h: number, depthFromTip: number, ratio?: number): number;
|
|
33
|
+
//# sourceMappingURL=dished-bottom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dished-bottom.d.ts","sourceRoot":"","sources":["../../../src/vessel-body/liquid/dished-bottom.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,4FAA4F;AAC5F,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAErC,4FAA4F;AAC5F,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,MAAyB,GAAG,MAAM,CAE5F;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,MAAyB,GAAG,MAAM,CAKpG;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,GAAE,MAAyB,GAAG,MAAM,CAUrH"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Liquid wave module (Story 3.2) — shared by every vessel primitive with a
|
|
3
|
+
* clipped liquid `<g>` (tank-vertical today; tank-horizontal/spherical/etc.
|
|
4
|
+
* in Story 3.3+ reuse the same wave/clip geometry). Deliberately exports
|
|
5
|
+
* pure geometry (`wave-path`, `dished-bottom`) separately from the DOM
|
|
6
|
+
* builder (`wave-layer`) so both halves stay independently unit-testable.
|
|
7
|
+
*/
|
|
8
|
+
export { buildWaveCrestPathD, buildWaveCrestPoints, buildWavePathD, WAVE_SAMPLE_STEP_PX, type WavePoint } from './wave-path';
|
|
9
|
+
export { BASE_WAVE_DURATION_MS, DEFAULT_SPECULAR, DEFAULT_WAVE_AMPLITUDE, DEFAULT_WAVE_PERIOD, DEFAULT_WAVE_SPEED, buildWaveLayer, type WaveLayer, type WaveLayerParams, } from './wave-layer';
|
|
10
|
+
export { DISH_WIDTH_RATIO, dishedBottomClipPathD, dishHeightFor, dishWidthAtDepth } from './dished-bottom';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vessel-body/liquid/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,cAAc,EAAE,mBAAmB,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7H,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,KAAK,SAAS,EACd,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { AnimationControl, Renderer, SpecularStyle } from '@vscada/core';
|
|
2
|
+
/** Reference duration for one full `translateX(-period)` loop at playbackRate 1 — same "documented default, not spec-pinned" convention as the pipe's `BASE_DASH_DURATION_MS` (Story 1.4). */
|
|
3
|
+
export declare const BASE_WAVE_DURATION_MS = 4000;
|
|
4
|
+
/**
|
|
5
|
+
* Motion fallbacks used only when a vessel's resolved medium has no
|
|
6
|
+
* registered wave params (no `medium` tokens at all, or a medium missing
|
|
7
|
+
* these optional §7.4 fields) — plain px/dimensionless defaults, never a
|
|
8
|
+
* color (AD-7 bans literal COLORS in primitives; a documented motion
|
|
9
|
+
* magnitude is the same convention `dash.ts`'s `BASE_DASH_DURATION_MS`
|
|
10
|
+
* already uses).
|
|
11
|
+
*/
|
|
12
|
+
export declare const DEFAULT_WAVE_AMPLITUDE = 3;
|
|
13
|
+
export declare const DEFAULT_WAVE_PERIOD = 80;
|
|
14
|
+
export declare const DEFAULT_WAVE_SPEED = 1;
|
|
15
|
+
export declare const DEFAULT_SPECULAR: SpecularStyle;
|
|
16
|
+
export interface WaveLayerParams {
|
|
17
|
+
/**
|
|
18
|
+
* The vessel's own width — the path is built at LEAST 2x THIS (AC 1:
|
|
19
|
+
* "built once at 2x container width"), and wider still whenever `period`
|
|
20
|
+
* exceeds `containerWidth` (Bug 1 fix): the WAAPI loop translates the
|
|
21
|
+
* built path by `-period` px, so seamless coverage requires the built
|
|
22
|
+
* path to span at least `containerWidth + period`, not a fixed 2x.
|
|
23
|
+
*/
|
|
24
|
+
containerWidth: number;
|
|
25
|
+
amplitude: number;
|
|
26
|
+
period: number;
|
|
27
|
+
/** Multiplier applied to the loop's WAAPI playbackRate at build time — the medium's `waveSpeed` ("viscosity reads as slowness", §7.4's primary characterization lever). */
|
|
28
|
+
speedFactor: number;
|
|
29
|
+
/** Already-resolved theme/medium color — never a literal hex (AD-7). */
|
|
30
|
+
color: string;
|
|
31
|
+
/** Wave ribbon fill opacity. */
|
|
32
|
+
opacity: number;
|
|
33
|
+
specular: SpecularStyle;
|
|
34
|
+
}
|
|
35
|
+
export interface WaveLayer {
|
|
36
|
+
/** Y-translated by the tank's EXISTING level write (Story 1.5's tween) — never a second/new tween (Task 1). */
|
|
37
|
+
carrier: SVGGElement;
|
|
38
|
+
/** The one WAAPI loop control for this layer — pause/resume/seek reach it via the primitive's own `AnimationHandle`, which is core's AD-5 registry entry point. */
|
|
39
|
+
control: AnimationControl;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Builds ONE wave layer: a carrier group (Y, level-driven, transform-only)
|
|
43
|
+
* wrapping a loop group (X, WAAPI-driven seamless loop) wrapping the wave
|
|
44
|
+
* path(s). `buildWavePathD` is called exactly ONCE here — every other
|
|
45
|
+
* change to this layer (level, playback rate, freeze) is a transform or a
|
|
46
|
+
* WAAPI control call, never a re-build (AD-2/Task 1's hard constraint).
|
|
47
|
+
*
|
|
48
|
+
* `specular` strokes a SEPARATE crest-only path (Bug 7 fix — the closed
|
|
49
|
+
* fill ribbon's `d` also includes the flat `bandDepth` baseline and
|
|
50
|
+
* vertical end-caps, which a stroke pass would draw as straight seams, not
|
|
51
|
+
* "a soft band along the crest"): 'sharp' (water) = thin bright crest
|
|
52
|
+
* line, 'diffuse' (oil) = wide soft band, 'none' (slurry, AC 2's named
|
|
53
|
+
* case) = omitted entirely — matte is the ABSENCE of the element, not a
|
|
54
|
+
* muted version of it.
|
|
55
|
+
*/
|
|
56
|
+
export declare function buildWaveLayer(params: WaveLayerParams, renderer: Renderer): WaveLayer;
|
|
57
|
+
//# sourceMappingURL=wave-layer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wave-layer.d.ts","sourceRoot":"","sources":["../../../src/vessel-body/liquid/wave-layer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAK9E,8LAA8L;AAC9L,eAAO,MAAM,qBAAqB,OAAO,CAAC;AAE1C;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,gBAAgB,EAAE,aAAuB,CAAC;AAOvD,MAAM,WAAW,eAAe;IAC9B;;;;;;OAMG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,2KAA2K;IAC3K,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,+GAA+G;IAC/G,OAAO,EAAE,WAAW,CAAC;IACrB,mKAAmK;IACnK,OAAO,EAAE,gBAAgB,CAAC;CAC3B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAuDrF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sine-wave path geometry (Story 3.2 Task 1, §7.3's technique pulled into
|
|
3
|
+
* v1 per spec-amendments §B1): "each path built once at 2x container
|
|
4
|
+
* width, animated only via `transform: translateX(-period)`, linear
|
|
5
|
+
* infinite. Because the path is periodic, translating by exactly one
|
|
6
|
+
* period is seamless."
|
|
7
|
+
*
|
|
8
|
+
* Pure math — no DOM here — so the periodicity claim (AD-2's "structure
|
|
9
|
+
* once" hinges on it: if this weren't exactly periodic, a translateX loop
|
|
10
|
+
* would visibly jump at the seam) is directly unit-testable without a
|
|
11
|
+
* browser.
|
|
12
|
+
*/
|
|
13
|
+
/** Px between samples along the wave crest — small enough to read as a smooth curve at typical vessel widths, large enough to keep the `d` string short. */
|
|
14
|
+
export declare const WAVE_SAMPLE_STEP_PX = 6;
|
|
15
|
+
export interface WavePoint {
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The crest of the wave: `y = -amplitude * sin(2*pi*x/period)`, sampled
|
|
21
|
+
* from `x = 0` to `x = width` inclusive. Negative sign so a positive
|
|
22
|
+
* amplitude bulges the crest UP (toward the surface) at x=0, matching how
|
|
23
|
+
* the wave layer is anchored to the liquid surface (§7.3).
|
|
24
|
+
*/
|
|
25
|
+
export declare function buildWaveCrestPoints(width: number, amplitude: number, period: number, sampleStep?: number): WavePoint[];
|
|
26
|
+
/**
|
|
27
|
+
* The crest ALONE as an open path `d` (`M`/`L` polyline, no baseline, no
|
|
28
|
+
* close): what `buildWavePathD` draws as its top edge, exposed separately
|
|
29
|
+
* so a stroked "highlight the crest" pass (the specular treatment, Story
|
|
30
|
+
* 3.2 Bug 7 fix) can reuse just this curve instead of the closed fill
|
|
31
|
+
* ribbon — reusing the closed ribbon's `d` for a stroke also strokes its
|
|
32
|
+
* flat `bandDepth` baseline and vertical end-caps, which is NOT "a soft
|
|
33
|
+
* band along the crest."
|
|
34
|
+
*/
|
|
35
|
+
export declare function buildWaveCrestPathD(width: number, amplitude: number, period: number, sampleStep?: number): string;
|
|
36
|
+
/**
|
|
37
|
+
* The wave layer's fillable `d`: the crest polyline, then straight down to
|
|
38
|
+
* a flat `bandDepth` baseline and back — a shallow ribbon riding the
|
|
39
|
+
* surface, not a filled-to-the-floor shape (§7.3's "gentle wave layer",
|
|
40
|
+
* not a redrawn liquid body). Built exactly ONCE per element (AD-2); every
|
|
41
|
+
* subsequent level/playback change is transform-only — this function must
|
|
42
|
+
* never be called again outside `build()`.
|
|
43
|
+
*/
|
|
44
|
+
export declare function buildWavePathD(width: number, amplitude: number, period: number, bandDepth: number, sampleStep?: number): string;
|
|
45
|
+
//# sourceMappingURL=wave-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wave-path.d.ts","sourceRoot":"","sources":["../../../src/vessel-body/liquid/wave-path.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,4JAA4J;AAC5J,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,MAA4B,GAAG,SAAS,EAAE,CAS5I;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,MAA4B,GAAG,MAAM,CAGtI;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,MAA4B,GAAG,MAAM,CAGpJ"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { HandleMap, Renderer, SceneElement, ThemeContext } from '@vscada/core';
|
|
2
|
+
import { type VesselHardwareVariant } from './hardware';
|
|
3
|
+
/**
|
|
4
|
+
* Story 3.3 Task 1 — the shared §7.2 seven-layer vessel recipe. ONE module,
|
|
5
|
+
* every vessel (tank-vertical retrofitted, plus tank-horizontal/-spherical/
|
|
6
|
+
* hopper/silo/drum) parameterizes this with geometry only (Dev Notes: "if a
|
|
7
|
+
* vessel needs recipe-module changes, change the module — never fork it").
|
|
8
|
+
*
|
|
9
|
+
* Layers, back to front, exactly per §7.2:
|
|
10
|
+
* 1. body base — vertical gradient, mid-tone -> darker
|
|
11
|
+
* 2. cylindrical shading overlay — the "does most of the work" layer;
|
|
12
|
+
* linear (orientation-dependent axis) for cylinders, radial highlight
|
|
13
|
+
* for spheres
|
|
14
|
+
* 3. liquid group — Story 3.2's wave module, reused verbatim, clipped to
|
|
15
|
+
* THIS vessel's own shape (never the wave/dish code itself changed)
|
|
16
|
+
* 4. specular strip — narrow near-white band, opacity 0.12
|
|
17
|
+
* 5. rim ellipses — darker stroke + lighter upper arc + optional crown
|
|
18
|
+
* ribbing
|
|
19
|
+
* 6. hardware — nozzles/manway/lugs/skirt/weld seams (`hardware.ts`)
|
|
20
|
+
* 7. contact shadow at the base
|
|
21
|
+
*
|
|
22
|
+
* Threshold wall markers + the alarm-band-colored liquid surface indicator
|
|
23
|
+
* (AC2) are additive, built alongside layer 3/on top of layer 6 — not one
|
|
24
|
+
* of the seven, but driven by the SAME per-frame level write so no second
|
|
25
|
+
* tween/mechanism is introduced.
|
|
26
|
+
*
|
|
27
|
+
* Bug 1 fix (adversarial review, post-3.3): the surface-alarm indicator is
|
|
28
|
+
* carried by whichever element is ACTUALLY the visible surface read for
|
|
29
|
+
* this medium, never a second competing one — restoring the exact
|
|
30
|
+
* suppression rule Story 3.2's own review fix established
|
|
31
|
+
* (`hasMediumSpecularParams = mediumStyle?.specular !== undefined`, see
|
|
32
|
+
* `tank-vertical`'s pre-3.3 history): when the resolved medium has ANY
|
|
33
|
+
* specular field (the wave module's own crest-only highlight,
|
|
34
|
+
* `.vscada-liquid-wave-specular`, built by `buildWaveLayer` in
|
|
35
|
+
* `liquid/wave-layer.ts`), that highlight IS the surface read, and it's
|
|
36
|
+
* recolored per alarm band in place — the plain `surfaceLine` is omitted
|
|
37
|
+
* entirely. Only media with no resolved specular params at all (no
|
|
38
|
+
* `medium` tokens registered, or a medium with no `specular` field — e.g.
|
|
39
|
+
* steam/flue-gas) fall back to the plain, always-alarm-colored
|
|
40
|
+
* `surfaceLine`. The two are mutually exclusive by construction — never
|
|
41
|
+
* both present for the same build.
|
|
42
|
+
*/
|
|
43
|
+
export type VesselOrientation = 'vertical' | 'horizontal' | 'spherical';
|
|
44
|
+
export interface RimEllipse {
|
|
45
|
+
cx: number;
|
|
46
|
+
cy: number;
|
|
47
|
+
rx: number;
|
|
48
|
+
ry: number;
|
|
49
|
+
/** A handful of short radial tick lines near the ellipse's top arc — §7.2's "radial ribbing around the crown". */
|
|
50
|
+
crownRibbing?: boolean;
|
|
51
|
+
}
|
|
52
|
+
export interface VesselGeometry {
|
|
53
|
+
orientation: VesselOrientation;
|
|
54
|
+
/** The vessel's own silhouette — layers 1/2/4/5 (and the liquid clip, unless `liquidClipPathD` is given) are clipped/drawn to this. */
|
|
55
|
+
bodyPathD: string;
|
|
56
|
+
/** Defaults to `bodyPathD` — only silo's liquid clip (the straight cylindrical section, not the roofed outline) differs; see `shapes.ts`'s own doc. */
|
|
57
|
+
liquidClipPathD?: string;
|
|
58
|
+
/**
|
|
59
|
+
* Bug 2 fix — topmost Y (local element space, same units as `h`) a
|
|
60
|
+
* threshold wall marker may ever be drawn at. Defaults to `0` (no
|
|
61
|
+
* clamp): every vessel except silo has `liquidClipPathD` spanning the
|
|
62
|
+
* same y-range as `bodyPathD`, so a marker anywhere in `[0, h]` is
|
|
63
|
+
* always inside the actual silhouette. Silo's liquid clip plateaus at
|
|
64
|
+
* its roofline (`siloCylinderTop`) — without this clamp, a threshold
|
|
65
|
+
* above that fill-fraction draws its tick inside/above the conical
|
|
66
|
+
* roof, a region the liquid (and thus the marker it represents) can
|
|
67
|
+
* never actually reach.
|
|
68
|
+
*/
|
|
69
|
+
markerMinY?: number;
|
|
70
|
+
rims: readonly RimEllipse[];
|
|
71
|
+
hardware: VesselHardwareVariant;
|
|
72
|
+
}
|
|
73
|
+
export interface BuildVesselOptions {
|
|
74
|
+
element: SceneElement;
|
|
75
|
+
theme: ThemeContext;
|
|
76
|
+
renderer: Renderer;
|
|
77
|
+
geometry: VesselGeometry;
|
|
78
|
+
}
|
|
79
|
+
/** Layer class names, in the exact §7.2 back-to-front order — the single source of truth `recipe.ts` builds against and `recipe.test.ts` asserts against. */
|
|
80
|
+
export declare const VESSEL_LAYER_CLASSES: readonly ["vscada-vessel-body-base", "vscada-vessel-shading", "vscada-vessel-liquid", "vscada-vessel-specular", "vscada-vessel-rim", "vscada-vessel-hardware", "vscada-vessel-shadow"];
|
|
81
|
+
export declare function buildVesselRecipe({ element, theme, renderer, geometry }: BuildVesselOptions): {
|
|
82
|
+
svg: SVGElement;
|
|
83
|
+
handles: HandleMap;
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=recipe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recipe.d.ts","sourceRoot":"","sources":["../../src/vessel-body/recipe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4B,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAuB,YAAY,EAAgB,MAAM,cAAc,CAAC;AAEjJ,OAAO,EAAsB,KAAK,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAa5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,YAAY,GAAG,WAAW,CAAC;AAExE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,kHAAkH;IAClH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,iBAAiB,CAAC;IAC/B,uIAAuI;IACvI,SAAS,EAAE,MAAM,CAAC;IAClB,uJAAuJ;IACvJ,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5B,QAAQ,EAAE,qBAAqB,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,6JAA6J;AAC7J,eAAO,MAAM,oBAAoB,wLAQvB,CAAC;AAiPX,wBAAgB,iBAAiB,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,kBAAkB,GAAG;IAAE,GAAG,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,SAAS,CAAA;CAAE,CAqOrI"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Body-silhouette / liquid-clip geometry for the five Story 3.3 vessel
|
|
3
|
+
* shapes (tank-vertical's own dished-bottom head lives in `liquid/
|
|
4
|
+
* dished-bottom.ts` — Story 3.2 built it first and it's reused verbatim,
|
|
5
|
+
* not duplicated here). Pure path math, same convention as
|
|
6
|
+
* `dished-bottom.ts`: no DOM, independently unit-testable, called exactly
|
|
7
|
+
* once per element build (`recipe.ts` never regenerates a `d` per frame —
|
|
8
|
+
* AD-2).
|
|
9
|
+
*
|
|
10
|
+
* Every shape here reuses `DISH_WIDTH_RATIO` (§7.2's "ellipse ratio ~0.18 of
|
|
11
|
+
* width") as its own head/cap/roof proportion — one spec constant, five
|
|
12
|
+
* consumers, never five independently-tuned magic numbers.
|
|
13
|
+
*/
|
|
14
|
+
/** Fraction of a hopper's total height given to the straight cylindrical section before the converging cone starts. */
|
|
15
|
+
export declare const HOPPER_CYLINDER_RATIO = 0.5;
|
|
16
|
+
/** Fraction of a hopper's width left open at the discharge throat (bottom). */
|
|
17
|
+
export declare const HOPPER_THROAT_RATIO = 0.18;
|
|
18
|
+
/** Fraction of a silo's total height given to the conical roof. */
|
|
19
|
+
export declare const SILO_ROOF_RATIO = 0.18;
|
|
20
|
+
/**
|
|
21
|
+
* tank-horizontal / drum body+liquid-clip: a "stadium"/capsule shape — a
|
|
22
|
+
* straight mid-section with elliptical end caps bulging outward left and
|
|
23
|
+
* right. The vertical-tank equivalent of `dishedBottomClipPathD` rotated
|
|
24
|
+
* 90°: there the round cross-section is horizontal (left-right), so its
|
|
25
|
+
* dish is a bottom-only cap; here the cylinder's AXIS is horizontal, so the
|
|
26
|
+
* round cross-section is vertical (top-bottom) and BOTH ends get a cap.
|
|
27
|
+
* `ry` is always the full half-height — a true semicircular-ish end, not a
|
|
28
|
+
* shallow dish — since a horizontal vessel's end head is seen near
|
|
29
|
+
* side-on, not foreshortened the way a vertical tank's top/bottom is.
|
|
30
|
+
*/
|
|
31
|
+
export declare function capsulePathD(w: number, h: number, ratio?: number): string;
|
|
32
|
+
/** The capsule's own half-cap width, exposed so callers (rim placement) don't recompute/duplicate the clamp logic above. */
|
|
33
|
+
export declare function capsuleCapWidth(w: number, h: number, ratio?: number): number;
|
|
34
|
+
/**
|
|
35
|
+
* The sphere's actual inscribed-circle center/radius (diameter = min(w, h))
|
|
36
|
+
* — the SINGLE source of truth `spherePathD` builds its outline from.
|
|
37
|
+
* Bug 5 fix: `buildSpecular`'s spherical branch and tank-spherical's rim
|
|
38
|
+
* placement used to compute their own positions from `w`/`h` independently
|
|
39
|
+
* rather than calling this, so for a non-square element box (w !== h) the
|
|
40
|
+
* decorative glint/rim could land outside the visible circle (silently
|
|
41
|
+
* clipped away by the body clip-path). Every spherical-vessel consumer that
|
|
42
|
+
* needs "where is the circle" must call this, never re-derive `r`/center
|
|
43
|
+
* with its own math.
|
|
44
|
+
*/
|
|
45
|
+
export declare function sphereGeometry(w: number, h: number): {
|
|
46
|
+
cx: number;
|
|
47
|
+
cy: number;
|
|
48
|
+
r: number;
|
|
49
|
+
};
|
|
50
|
+
/** tank-spherical body+liquid-clip: a plain circle inscribed in the element's box (diameter = min(w, h)) — no foreshortening, spec §7.2's own "spherical vessels use the same recipe" carve-out replaces banding with a radial highlight instead, not the outline itself. */
|
|
51
|
+
export declare function spherePathD(w: number, h: number): string;
|
|
52
|
+
/**
|
|
53
|
+
* hopper body+liquid-clip: a straight-sided cylindrical top section down to
|
|
54
|
+
* `HOPPER_CYLINDER_RATIO * h`, then a converging trapezoid down to a
|
|
55
|
+
* narrow discharge throat (`HOPPER_THROAT_RATIO * w` wide) at the very
|
|
56
|
+
* bottom. The SAME path is used for the liquid clip (Dev Notes: level
|
|
57
|
+
* maps LINEARLY to height in v1 — see the hopper primitive's own doc for
|
|
58
|
+
* why that's a documented simplification, not volume-accurate).
|
|
59
|
+
*/
|
|
60
|
+
export declare function hopperPathD(w: number, h: number, cylinderRatio?: number, throatRatio?: number): string;
|
|
61
|
+
/** silo body outline: a tall straight cylinder with a triangular/conical roof. Bottom is flat (a real discharge cone, when drawn, is a `hardware` detail — see `hardware.ts` — not part of the outline). */
|
|
62
|
+
export declare function siloPathD(w: number, h: number, roofRatio?: number): string;
|
|
63
|
+
/** Y of the roofline / top of the straight cylindrical section — silo's liquid clip (see `siloLiquidClipPathD`) starts here, never inside the pointed roof. */
|
|
64
|
+
export declare function siloCylinderTop(h: number, roofRatio?: number): number;
|
|
65
|
+
/**
|
|
66
|
+
* silo liquid clip: a plain rect for JUST the straight cylindrical section
|
|
67
|
+
* (below the roofline) — deliberately NOT the same path as
|
|
68
|
+
* `siloPathD` (the one documented exception to "body path == liquid clip
|
|
69
|
+
* path" every other vessel here follows). A real silo's product never
|
|
70
|
+
* visibly fills into the pointed roof; clipping the liquid to the full
|
|
71
|
+
* roofed outline would let a near-full level narrow to a point at the top,
|
|
72
|
+
* which reads as wrong. The plain rect naturally plateaus the visible fill
|
|
73
|
+
* at the roofline for any level fraction whose unclipped top edge would
|
|
74
|
+
* otherwise land inside the roof — an acceptable v1 simplification (Dev
|
|
75
|
+
* Notes: "level maps linearly to height").
|
|
76
|
+
*/
|
|
77
|
+
export declare function siloLiquidClipPathD(w: number, h: number, roofRatio?: number): string;
|
|
78
|
+
//# sourceMappingURL=shapes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shapes.d.ts","sourceRoot":"","sources":["../../src/vessel-body/shapes.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAEH,uHAAuH;AACvH,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,OAAO,CAAC;AACxC,mEAAmE;AACnE,eAAO,MAAM,eAAe,OAAO,CAAC;AAEpC;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,MAAyB,GAAG,MAAM,CAK3F;AAED,4HAA4H;AAC5H,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,MAAyB,GAAG,MAAM,CAE9F;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAE1F;AAED,6QAA6Q;AAC7Q,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CACzB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,aAAa,GAAE,MAA8B,EAC7C,WAAW,GAAE,MAA4B,GACxC,MAAM,CAMR;AAED,4MAA4M;AAC5M,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,MAAwB,GAAG,MAAM,CAG3F;AAED,+JAA+J;AAC/J,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,MAAwB,GAAG,MAAM,CAEtF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,GAAE,MAAwB,GAAG,MAAM,CAGrG"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type VesselStory, type VesselStoryArgs, type VesselStoryMeta } from '../story-kit';
|
|
2
|
+
/** Story 3.3 Task 4 — same reference pattern as `tank-vertical.stories.ts`; see that file's doc. */
|
|
3
|
+
export declare const meta: VesselStoryMeta;
|
|
4
|
+
export declare const argTypes: {
|
|
5
|
+
readonly level: {
|
|
6
|
+
readonly control: {
|
|
7
|
+
readonly type: "range";
|
|
8
|
+
readonly min: 0;
|
|
9
|
+
readonly max: 100;
|
|
10
|
+
readonly step: 1;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
readonly medium: {
|
|
14
|
+
readonly control: {
|
|
15
|
+
readonly type: "select";
|
|
16
|
+
};
|
|
17
|
+
readonly options: readonly ["water", "oil", "fuel-diesel", "slurry-sludge", "acid-chemical", "molten-hot", "condensate", "feedwater", "hydraulic-oil"];
|
|
18
|
+
};
|
|
19
|
+
readonly thresholdDemo: {
|
|
20
|
+
readonly control: "boolean";
|
|
21
|
+
};
|
|
22
|
+
readonly stale: {
|
|
23
|
+
readonly control: "boolean";
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export declare const Default: VesselStory;
|
|
27
|
+
export declare const LevelSweep: VesselStory;
|
|
28
|
+
export declare const MediumSwitch: VesselStory;
|
|
29
|
+
export declare const ThresholdDemo: VesselStory;
|
|
30
|
+
export declare const StaleFreeze: VesselStory;
|
|
31
|
+
export declare function render(container: HTMLElement, args?: Partial<VesselStoryArgs>): import("../story-kit").MountedVesselStory;
|
|
32
|
+
export default meta;
|
|
33
|
+
//# sourceMappingURL=drum.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drum.stories.d.ts","sourceRoot":"","sources":["../../../src/vessels/drum/drum.stories.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAEtI,oGAAoG;AACpG,eAAO,MAAM,IAAI,EAAE,eAKlB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;CAAyB,CAAC;AAE/C,eAAO,MAAM,OAAO,EAAE,WAAiC,CAAC;AACxD,eAAO,MAAM,UAAU,EAAE,WAA0D,CAAC;AACpF,eAAO,MAAM,YAAY,EAAE,WAAoF,CAAC;AAChH,eAAO,MAAM,aAAa,EAAE,WAAyF,CAAC;AACtH,eAAO,MAAM,WAAW,EAAE,WAA0E,CAAC;AAErG,wBAAgB,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,GAAE,OAAO,CAAC,eAAe,CAAM,6CAEjF;AAED,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/vessels/drum/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,cAAc,EAAyD,MAAM,cAAc,CAAC;AAkCrH,eAAO,MAAM,IAAI,EAAE,cAGjB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type VesselStory, type VesselStoryArgs, type VesselStoryMeta } from '../story-kit';
|
|
2
|
+
/**
|
|
3
|
+
* Story 3.3 Task 4 — same reference pattern as `tank-vertical.stories.ts`;
|
|
4
|
+
* see that file's doc. The level sweep here also doubles as a demonstration
|
|
5
|
+
* of the documented v1 simplification (`hopper/index.ts`'s own doc): watch
|
|
6
|
+
* the fill visibly narrow through the funnel as the level drops — the
|
|
7
|
+
* PIXEL-height mapping is linear, not the true (smaller) volume fraction.
|
|
8
|
+
*/
|
|
9
|
+
export declare const meta: VesselStoryMeta;
|
|
10
|
+
export declare const argTypes: {
|
|
11
|
+
readonly level: {
|
|
12
|
+
readonly control: {
|
|
13
|
+
readonly type: "range";
|
|
14
|
+
readonly min: 0;
|
|
15
|
+
readonly max: 100;
|
|
16
|
+
readonly step: 1;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
readonly medium: {
|
|
20
|
+
readonly control: {
|
|
21
|
+
readonly type: "select";
|
|
22
|
+
};
|
|
23
|
+
readonly options: readonly ["water", "oil", "fuel-diesel", "slurry-sludge", "acid-chemical", "molten-hot", "condensate", "feedwater", "hydraulic-oil"];
|
|
24
|
+
};
|
|
25
|
+
readonly thresholdDemo: {
|
|
26
|
+
readonly control: "boolean";
|
|
27
|
+
};
|
|
28
|
+
readonly stale: {
|
|
29
|
+
readonly control: "boolean";
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
export declare const Default: VesselStory;
|
|
33
|
+
export declare const LevelSweep: VesselStory;
|
|
34
|
+
export declare const MediumSwitch: VesselStory;
|
|
35
|
+
export declare const ThresholdDemo: VesselStory;
|
|
36
|
+
export declare const StaleFreeze: VesselStory;
|
|
37
|
+
export declare function render(container: HTMLElement, args?: Partial<VesselStoryArgs>): import("../story-kit").MountedVesselStory;
|
|
38
|
+
export default meta;
|
|
39
|
+
//# sourceMappingURL=hopper.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hopper.stories.d.ts","sourceRoot":"","sources":["../../../src/vessels/hopper/hopper.stories.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAEtI;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,EAAE,eAKlB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;CAAyB,CAAC;AAE/C,eAAO,MAAM,OAAO,EAAE,WAAiC,CAAC;AACxD,eAAO,MAAM,UAAU,EAAE,WAA0D,CAAC;AACpF,eAAO,MAAM,YAAY,EAAE,WAA0F,CAAC;AACtH,eAAO,MAAM,aAAa,EAAE,WAAwF,CAAC;AACrH,eAAO,MAAM,WAAW,EAAE,WAA0E,CAAC;AAErG,wBAAgB,MAAM,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,GAAE,OAAO,CAAC,eAAe,CAAM,6CAEjF;AAED,eAAe,IAAI,CAAC"}
|