@opsydyn/effect-three-foldkit 0.2.0 → 0.4.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 CHANGED
@@ -1,5 +1,23 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.4.0](https://github.com/opsydyn/fold-kit-experiments/compare/effect-three-foldkit-v0.3.0...effect-three-foldkit-v0.4.0) (2026-10-20)
4
+
5
+ ### Features
6
+
7
+ - **effect-three:** a HUD, and the viewport gizmo in it ([a1d99d4](https://github.com/opsydyn/fold-kit-experiments/commit/a1d99d477d80744652237c0718fe0f2418490ea8))
8
+ - **effect-three:** a measuring tape, the last widget of Beyond parity 5 ([0a05ae0](https://github.com/opsydyn/fold-kit-experiments/commit/0a05ae04b0ccfd616f945f26429b27acbe79f108))
9
+ - **effect-three:** a transform gizmo as data, and as a Foldkit submodel ([3b1e585](https://github.com/opsydyn/fold-kit-experiments/commit/3b1e58535b35669917c3325214199f9264fb314c))
10
+ - **effect-three:** an inspector generated from schemas ([64d1d3b](https://github.com/opsydyn/fold-kit-experiments/commit/64d1d3b8bf9991c57c1cf56b94a8b3f1c773b17d))
11
+ - **effect-three:** box select as data, and as a Foldkit submodel ([498a2ec](https://github.com/opsydyn/fold-kit-experiments/commit/498a2ecd7763208c17b54b85f5cc8af294c7ce9b))
12
+ - **effect-three:** edges, trails, points, sparkles and stars ([f976907](https://github.com/opsydyn/fold-kit-experiments/commit/f9769078724c7ef405728581574d50001f338e81))
13
+ - **effect-three:** pivot controls as data, and as a Foldkit submodel ([4284921](https://github.com/opsydyn/fold-kit-experiments/commit/42849211eed2b745c4a43ad42682e2508829901b))
14
+
15
+ ## [0.3.0](https://github.com/opsydyn/fold-kit-experiments/compare/effect-three-foldkit-v0.2.0...effect-three-foldkit-v0.3.0) (2026-10-19)
16
+
17
+ ### Features
18
+
19
+ - **effect-three:** Drei's Billboard, RoundedBox and Backdrop, Detailed, CameraShake and Clone ([3ec570e](https://github.com/opsydyn/fold-kit-experiments/commit/3ec570e14e7632565adf846ef48b66287713a291))
20
+
3
21
  ## [0.2.0](https://github.com/opsydyn/fold-kit-experiments/compare/effect-three-foldkit-v0.1.0...effect-three-foldkit-v0.2.0) (2026-10-19)
4
22
 
5
23
  ### ⚠ BREAKING CHANGES
@@ -66,5 +84,4 @@
66
84
  ### Bug Fixes
67
85
 
68
86
  - **effect-three-foldkit:** build the troika package before typechecking tests ([31df93f](https://github.com/opsydyn/fold-kit-experiments/commit/31df93f215dbedf865410e5384a21307ab367404))
69
- - **effect-three-foldkit:** draw real WebGPU in Linux e2e ([fdf82e7](https://github.com/opsydyn/fold-kit-experiments/commit/fdf82e7815a901d09bea5fbd50769f398eded5c6))
70
87
  - **effect-three-foldkit:** draw real WebGPU in Linux e2e ([186db41](https://github.com/opsydyn/fold-kit-experiments/commit/186db41bf649888f31e83c49db5bd4c23facd0e6))
package/README.md CHANGED
@@ -40,8 +40,9 @@ EffectThreeFoldkit.view(
40
40
 
41
41
  - **Updates are in place.** Foldkit hands the element a new scene on every render, and the core diffs it, so unchanged scenes cost no host changes and changed ones reuse their three.js objects.
42
42
  - **Animation never touches the Model.** Behaviours such as `spin` run in the frame loop, outside Foldkit's `update`.
43
- - **Events are typed and opt-in:** `onClick`, `onDoubleClick`, `onContextMenu`, `onPointerDown`, `onPointerUp`, `onPointerEnter`, `onPointerMove`, `onPointerLeave`, `onPointerMissed`, `onWheel`, `onDrag`, `onDragEnd`, `onGesture`, `onAutoRotated`, `onCollision`, `onContactForce`, `onMeasured`, `onLabelMeasured`, `onXRSession`, `onXRStick`, `onXRButton`, `onXRSurface`, `onXRMoved`, `onXRPlanes`, `onXRMeshes`, `onPerformanceChange`, `onError` and `onReconciled`. Only the handlers you pass are bound. Hits carry the mesh key (and instance), world-space point, distance, face normal and uv.
43
+ - **Events are typed and opt-in:** `onClick`, `onDoubleClick`, `onContextMenu`, `onPointerDown`, `onPointerUp`, `onPointerEnter`, `onPointerMove`, `onPointerLeave`, `onPointerMissed`, `onWheel`, `onDrag`, `onDragEnd`, `onGesture`, `onGestureEnd`, `onAutoRotated`, `onCollision`, `onContactForce`, `onMeasured`, `onLabelMeasured`, `onXRSession`, `onXRStick`, `onXRButton`, `onXRSurface`, `onXRMoved`, `onXRPlanes`, `onXRMeshes`, `onPerformanceChange`, `onError` and `onReconciled`. Only the handlers you pass are bound. Hits carry the mesh key (and instance), world-space point, distance, face normal and uv.
44
44
  - **Controls:** with `scene({ gestures: 'scene' })`, `onGesture` reports drags, the wheel and pinches; `orbit(model.camera, gesture)` moves a camera kept in the Model ([ADR-006](../../docs/effect-three/adr/006-controls-as-data.md)).
45
+ - **Editing widgets as submodels:** `TransformGizmo` (three's `TransformControls`), `PivotControls` (Drei's), `BoxSelect` (three's `SelectionBox`, from shift-drags), `ViewportGizmo` (Drei's `GizmoHelper`, in a scene's `hud`) and `MeasuringTape` each keep a Model, take Messages from the scene's events and report OutMessages (`Moved`, `Finished`, `Selected`, `Turned`, `Measured`) for the parent to apply; `inspectorView` draws the fields `Inspector.fields` reads from a schema as a form. The core keeps the maths pure and checked against three's and Drei's own ([ADR-006](../../docs/effect-three/adr/006-controls-as-data.md)).
45
46
  - **HTML overlays:** `overlays: [{ overlay, content }]` places Model-rendered HTML at points in the scene every drawn frame, as Drei's `Html`.
46
47
  - **Groups and drags:** hits carry their ancestor `path`, and an `interactive` group makes every mesh inside it pickable. A press on a mesh captures the pointer, so `onDrag` keeps firing off the mesh and off the canvas; pair its `ray` with `pointOnPlane` to drag along a plane.
47
48
  - **Pixel ratio:** `makeEnvironment(window, { pixelRatio: [1, 2] })` takes a fixed ratio or a `[min, max]` range around the device's (the default is `[1, 2]`, as React Three Fiber's `dpr`), and re-measures when the device ratio changes.
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Box selection as a Foldkit submodel (roadmap, "Beyond parity" 5), after Drei's `Select`
3
+ * over three.js's `SelectionBox`: a shift-drag that begins on nothing draws a box, and
4
+ * its release selects what the box holds, through the core's pure `boxSelect`. The parent
5
+ * owns what is selected; the submodel owns only the box:
6
+ *
7
+ * - `Dragged` (each scene `Drag` gesture the box `claims`, made with `dragOf`) starts the box
8
+ * where the press was and moves its far corner by the gesture's deltas;
9
+ * - `Ended` (the scene's `GestureEnd`, with the camera and what can be selected) reports
10
+ * `Selected { keys }`, which replaces the selection as Drei's box does, and clears the
11
+ * box;
12
+ * - `Cancelled` clears the box and selects nothing.
13
+ *
14
+ * `rectangle(model)` places the box on the canvas in CSS pixels, for an HTML outline, and
15
+ * `inside(model, camera, selectable)` says what the box holds so far, for highlighting
16
+ * while it is drawn (Drei selects as the box moves).
17
+ *
18
+ * @module
19
+ */
20
+ import { type Camera, type Gesture } from '@opsydyn/effect-three';
21
+ import { Option, Schema } from 'effect';
22
+ import type { ReturnWithOutMessage } from 'foldkit/update';
23
+ /** Something the box can select: its key, and the point that must fall inside. */
24
+ declare const Selectable: Schema.Struct<{
25
+ readonly key: Schema.String;
26
+ readonly at: Schema.Tuple<readonly [Schema.Finite, Schema.Finite, Schema.Finite]>;
27
+ }>;
28
+ /** A box being drawn: its corners in the canvas's normalised coordinates, −1 to 1, y up. */
29
+ export declare const Box: Schema.Struct<{
30
+ readonly from: Schema.Struct<{
31
+ readonly x: Schema.Finite;
32
+ readonly y: Schema.Finite;
33
+ }>;
34
+ readonly to: Schema.Struct<{
35
+ readonly x: Schema.Finite;
36
+ readonly y: Schema.Finite;
37
+ }>;
38
+ readonly width: Schema.Finite;
39
+ readonly height: Schema.Finite;
40
+ }>;
41
+ export type Box = typeof Box.Type;
42
+ export declare const Model: Schema.Struct<{
43
+ readonly box: Schema.Option<Schema.Struct<{
44
+ readonly from: Schema.Struct<{
45
+ readonly x: Schema.Finite;
46
+ readonly y: Schema.Finite;
47
+ }>;
48
+ readonly to: Schema.Struct<{
49
+ readonly x: Schema.Finite;
50
+ readonly y: Schema.Finite;
51
+ }>;
52
+ readonly width: Schema.Finite;
53
+ readonly height: Schema.Finite;
54
+ }>>;
55
+ }>;
56
+ export type Model = typeof Model.Type;
57
+ export declare const Message: import("foldkit/message").MessageUnion<{
58
+ readonly Dragged: {
59
+ x: Schema.Finite;
60
+ y: Schema.Finite;
61
+ deltaX: Schema.Finite;
62
+ deltaY: Schema.Finite;
63
+ width: Schema.Finite;
64
+ height: Schema.Finite;
65
+ };
66
+ readonly Ended: {
67
+ camera: Schema.Union<readonly [Schema.TaggedStruct<"Perspective", {
68
+ readonly fov: Schema.Finite;
69
+ readonly near: Schema.Finite;
70
+ readonly far: Schema.Finite;
71
+ readonly position: Schema.Tuple<readonly [Schema.Finite, Schema.Finite, Schema.Finite]>;
72
+ readonly lookAt: Schema.Tuple<readonly [Schema.Finite, Schema.Finite, Schema.Finite]>;
73
+ readonly damping: Schema.Finite;
74
+ readonly autoRotate: Schema.Finite;
75
+ readonly shake: Schema.withDecodingDefaultKey<Schema.NullOr<Schema.Struct<{
76
+ readonly intensity: Schema.Finite;
77
+ readonly decay: Schema.Boolean;
78
+ readonly decayRate: Schema.Finite;
79
+ readonly maxYaw: Schema.Finite;
80
+ readonly maxPitch: Schema.Finite;
81
+ readonly maxRoll: Schema.Finite;
82
+ readonly yawFrequency: Schema.Finite;
83
+ readonly pitchFrequency: Schema.Finite;
84
+ readonly rollFrequency: Schema.Finite;
85
+ readonly trigger: Schema.Finite;
86
+ }>>, never>;
87
+ }>, Schema.TaggedStruct<"Orthographic", {
88
+ readonly zoom: Schema.Finite;
89
+ readonly near: Schema.Finite;
90
+ readonly far: Schema.Finite;
91
+ readonly position: Schema.Tuple<readonly [Schema.Finite, Schema.Finite, Schema.Finite]>;
92
+ readonly lookAt: Schema.Tuple<readonly [Schema.Finite, Schema.Finite, Schema.Finite]>;
93
+ readonly damping: Schema.Finite;
94
+ readonly autoRotate: Schema.Finite;
95
+ readonly shake: Schema.withDecodingDefaultKey<Schema.NullOr<Schema.Struct<{
96
+ readonly intensity: Schema.Finite;
97
+ readonly decay: Schema.Boolean;
98
+ readonly decayRate: Schema.Finite;
99
+ readonly maxYaw: Schema.Finite;
100
+ readonly maxPitch: Schema.Finite;
101
+ readonly maxRoll: Schema.Finite;
102
+ readonly yawFrequency: Schema.Finite;
103
+ readonly pitchFrequency: Schema.Finite;
104
+ readonly rollFrequency: Schema.Finite;
105
+ readonly trigger: Schema.Finite;
106
+ }>>, never>;
107
+ }>]>;
108
+ selectable: Schema.$Array<Schema.Struct<{
109
+ readonly key: Schema.String;
110
+ readonly at: Schema.Tuple<readonly [Schema.Finite, Schema.Finite, Schema.Finite]>;
111
+ }>>;
112
+ };
113
+ readonly Cancelled: {};
114
+ }>;
115
+ export type Message = typeof Message.Type;
116
+ export declare const OutMessage: import("foldkit/message").MessageUnion<{
117
+ /** The box was let go: the keys inside it, for the new selection. */
118
+ readonly Selected: {
119
+ keys: Schema.$Array<Schema.String>;
120
+ };
121
+ }>;
122
+ export type OutMessage = typeof OutMessage.Type;
123
+ /** No box drawn. */
124
+ export declare const init: () => Model;
125
+ type Return = ReturnWithOutMessage<Model, Message, OutMessage>;
126
+ type Selectables = ReadonlyArray<typeof Selectable.Type>;
127
+ export declare const update: (model: Model, message: Message) => Return;
128
+ /** Whether a box is being drawn: the parent leaves the camera alone while it is. */
129
+ export declare const drawing: (model: Model) => boolean;
130
+ /** A scene `Drag` gesture: the only kind a box takes. */
131
+ export type DragGesture = Extract<Gesture, {
132
+ readonly _tag: 'Drag';
133
+ }>;
134
+ /** Whether the box takes `drag`: every drag while one is drawn, and one that starts it. */
135
+ export declare const claims: (model: Model, drag: DragGesture) => boolean;
136
+ /** The `Dragged` Message for a drag the box claims. */
137
+ export declare const dragOf: (gesture: DragGesture) => Message;
138
+ /** What the box holds so far, seen through `camera`: none while no box is drawn. */
139
+ export declare const inside: (model: Model, camera: Camera, selectable: Selectables) => ReadonlyArray<string>;
140
+ /** A box on the canvas, in CSS pixels from its top left. */
141
+ export type Rectangle = {
142
+ readonly left: number;
143
+ readonly top: number;
144
+ readonly width: number;
145
+ readonly height: number;
146
+ };
147
+ /** Where the box sits on the canvas, while one is drawn. */
148
+ export declare const rectangle: (model: Model) => Option.Option<Rectangle>;
149
+ export {};
150
+ //# sourceMappingURL=boxSelect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boxSelect.d.ts","sourceRoot":"","sources":["../src/boxSelect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAAa,KAAK,MAAM,EAAE,KAAK,OAAO,EAAe,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAI3D,kFAAkF;AAClF,QAAA,MAAM,UAAU;;;EAA8D,CAAC;AAE/E,4FAA4F;AAC5F,eAAO,MAAM,GAAG;;;;;;;;;;;EAKd,CAAC;AACH,MAAM,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC,IAAI,CAAC;AAElC,eAAO,MAAM,KAAK;;;;;;;;;;;;;EAA6C,CAAC;AAChE,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAC;AAEtC,eAAO,MAAM,OAAO;;QAEhB,CAAC;QACD,CAAC;QACD,MAAM;QACN,MAAM;QACN,KAAK;QACL,MAAM;;;QAEC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAAsB,UAAU;;;;;;EAE/C,CAAC;AACH,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC;AAE1C,eAAO,MAAM,UAAU;IACrB,qEAAqE;;QACzD,IAAI;;EAChB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAC;AAEhD,oBAAoB;AACpB,eAAO,MAAM,IAAI,QAAO,KAAiC,CAAC;AAE1D,KAAK,MAAM,GAAG,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAe/D,KAAK,WAAW,GAAG,aAAa,CAAC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC;AAczD,eAAO,MAAM,MAAM,UAAW,KAAK,WAAW,OAAO,KAAG,MAKpD,CAAC;AAEL,oFAAoF;AACpF,eAAO,MAAM,OAAO,UAAW,KAAK,KAAG,OAAmC,CAAC;AAE3E,yDAAyD;AACzD,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAStE,2FAA2F;AAC3F,eAAO,MAAM,MAAM,UAAW,KAAK,QAAQ,WAAW,KAAG,OACtB,CAAC;AAEpC,uDAAuD;AACvD,eAAO,MAAM,MAAM,YAAa,WAAW,KAAG,OAQ1C,CAAC;AAEL,oFAAoF;AACpF,eAAO,MAAM,MAAM,UACV,KAAK,UACJ,MAAM,cACF,WAAW,KACtB,aAAa,CAAC,MAAM,CAInB,CAAC;AAEL,4DAA4D;AAC5D,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAUF,4DAA4D;AAC5D,eAAO,MAAM,SAAS,UAAW,KAAK,KAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAC/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"webgl.d.ts","sourceRoot":"","sources":["../../src/dom/webgl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,uBAAuB,CAAC;AAE3F,OAAO,EASL,KAAK,uBAAuB,EAE7B,MAAM,OAAO,CAAC;AAaf,+FAA+F;AAC/F,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;AAyEnE,uGAAuG;AACvG,eAAO,MAAM,oBAAoB,WACvB,iBAAiB,YAChB,YAAY,KACpB,eA0GD,CAAC"}
1
+ {"version":3,"file":"webgl.d.ts","sourceRoot":"","sources":["../../src/dom/webgl.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,uBAAuB,CAAC;AAE3F,OAAO,EASL,KAAK,uBAAuB,EAE7B,MAAM,OAAO,CAAC;AAaf,+FAA+F;AAC/F,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;AAyEnE,uGAAuG;AACvG,eAAO,MAAM,oBAAoB,WACvB,iBAAiB,YAChB,YAAY,KACpB,eAyHD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"webgpu.d.ts","sourceRoot":"","sources":["../../src/dom/webgpu.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,uBAAuB,CAAC;AAwB3F,kFAAkF;AAClF,MAAM,MAAM,aAAa,GAAG;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AA+DF,oEAAoE;AACpE,eAAO,MAAM,qBAAqB,WACxB,iBAAiB,YAChB,aAAa,KACrB,eA8FD,CAAC"}
1
+ {"version":3,"file":"webgpu.d.ts","sourceRoot":"","sources":["../../src/dom/webgpu.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,uBAAuB,CAAC;AAwB3F,kFAAkF;AAClF,MAAM,MAAM,aAAa,GAAG;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AA+DF,oEAAoE;AACpE,eAAO,MAAM,qBAAqB,WACxB,iBAAiB,YAChB,aAAa,KACrB,eA6GD,CAAC"}
package/dist/element.d.ts CHANGED
@@ -81,6 +81,18 @@ export declare const sceneElement: CustomElement.CustomElementSpec<"effect-three
81
81
  readonly lookAt: Schema.Tuple<readonly [Schema.Finite, Schema.Finite, Schema.Finite]>;
82
82
  readonly damping: Schema.Finite;
83
83
  readonly autoRotate: Schema.Finite;
84
+ readonly shake: Schema.withDecodingDefaultKey<Schema.NullOr<Schema.Struct<{
85
+ readonly intensity: Schema.Finite;
86
+ readonly decay: Schema.Boolean;
87
+ readonly decayRate: Schema.Finite;
88
+ readonly maxYaw: Schema.Finite;
89
+ readonly maxPitch: Schema.Finite;
90
+ readonly maxRoll: Schema.Finite;
91
+ readonly yawFrequency: Schema.Finite;
92
+ readonly pitchFrequency: Schema.Finite;
93
+ readonly rollFrequency: Schema.Finite;
94
+ readonly trigger: Schema.Finite;
95
+ }>>, never>;
84
96
  }>, Schema.TaggedStruct<"Orthographic", {
85
97
  readonly zoom: Schema.Finite;
86
98
  readonly near: Schema.Finite;
@@ -89,6 +101,18 @@ export declare const sceneElement: CustomElement.CustomElementSpec<"effect-three
89
101
  readonly lookAt: Schema.Tuple<readonly [Schema.Finite, Schema.Finite, Schema.Finite]>;
90
102
  readonly damping: Schema.Finite;
91
103
  readonly autoRotate: Schema.Finite;
104
+ readonly shake: Schema.withDecodingDefaultKey<Schema.NullOr<Schema.Struct<{
105
+ readonly intensity: Schema.Finite;
106
+ readonly decay: Schema.Boolean;
107
+ readonly decayRate: Schema.Finite;
108
+ readonly maxYaw: Schema.Finite;
109
+ readonly maxPitch: Schema.Finite;
110
+ readonly maxRoll: Schema.Finite;
111
+ readonly yawFrequency: Schema.Finite;
112
+ readonly pitchFrequency: Schema.Finite;
113
+ readonly rollFrequency: Schema.Finite;
114
+ readonly trigger: Schema.Finite;
115
+ }>>, never>;
92
116
  }>]>;
93
117
  readonly gestures: Schema.Literals<readonly ["page", "scene"]>;
94
118
  readonly views: Schema.$Array<Schema.Struct<{
@@ -101,6 +125,18 @@ export declare const sceneElement: CustomElement.CustomElementSpec<"effect-three
101
125
  readonly lookAt: Schema.Tuple<readonly [Schema.Finite, Schema.Finite, Schema.Finite]>;
102
126
  readonly damping: Schema.Finite;
103
127
  readonly autoRotate: Schema.Finite;
128
+ readonly shake: Schema.withDecodingDefaultKey<Schema.NullOr<Schema.Struct<{
129
+ readonly intensity: Schema.Finite;
130
+ readonly decay: Schema.Boolean;
131
+ readonly decayRate: Schema.Finite;
132
+ readonly maxYaw: Schema.Finite;
133
+ readonly maxPitch: Schema.Finite;
134
+ readonly maxRoll: Schema.Finite;
135
+ readonly yawFrequency: Schema.Finite;
136
+ readonly pitchFrequency: Schema.Finite;
137
+ readonly rollFrequency: Schema.Finite;
138
+ readonly trigger: Schema.Finite;
139
+ }>>, never>;
104
140
  }>, Schema.TaggedStruct<"Orthographic", {
105
141
  readonly zoom: Schema.Finite;
106
142
  readonly near: Schema.Finite;
@@ -109,6 +145,18 @@ export declare const sceneElement: CustomElement.CustomElementSpec<"effect-three
109
145
  readonly lookAt: Schema.Tuple<readonly [Schema.Finite, Schema.Finite, Schema.Finite]>;
110
146
  readonly damping: Schema.Finite;
111
147
  readonly autoRotate: Schema.Finite;
148
+ readonly shake: Schema.withDecodingDefaultKey<Schema.NullOr<Schema.Struct<{
149
+ readonly intensity: Schema.Finite;
150
+ readonly decay: Schema.Boolean;
151
+ readonly decayRate: Schema.Finite;
152
+ readonly maxYaw: Schema.Finite;
153
+ readonly maxPitch: Schema.Finite;
154
+ readonly maxRoll: Schema.Finite;
155
+ readonly yawFrequency: Schema.Finite;
156
+ readonly pitchFrequency: Schema.Finite;
157
+ readonly rollFrequency: Schema.Finite;
158
+ readonly trigger: Schema.Finite;
159
+ }>>, never>;
112
160
  }>]>;
113
161
  readonly rect: Schema.Struct<{
114
162
  readonly x: Schema.Finite;
@@ -129,6 +177,18 @@ export declare const sceneElement: CustomElement.CustomElementSpec<"effect-three
129
177
  readonly lookAt: Schema.Tuple<readonly [Schema.Finite, Schema.Finite, Schema.Finite]>;
130
178
  readonly damping: Schema.Finite;
131
179
  readonly autoRotate: Schema.Finite;
180
+ readonly shake: Schema.withDecodingDefaultKey<Schema.NullOr<Schema.Struct<{
181
+ readonly intensity: Schema.Finite;
182
+ readonly decay: Schema.Boolean;
183
+ readonly decayRate: Schema.Finite;
184
+ readonly maxYaw: Schema.Finite;
185
+ readonly maxPitch: Schema.Finite;
186
+ readonly maxRoll: Schema.Finite;
187
+ readonly yawFrequency: Schema.Finite;
188
+ readonly pitchFrequency: Schema.Finite;
189
+ readonly rollFrequency: Schema.Finite;
190
+ readonly trigger: Schema.Finite;
191
+ }>>, never>;
132
192
  }>, Schema.TaggedStruct<"Orthographic", {
133
193
  readonly zoom: Schema.Finite;
134
194
  readonly near: Schema.Finite;
@@ -137,10 +197,27 @@ export declare const sceneElement: CustomElement.CustomElementSpec<"effect-three
137
197
  readonly lookAt: Schema.Tuple<readonly [Schema.Finite, Schema.Finite, Schema.Finite]>;
138
198
  readonly damping: Schema.Finite;
139
199
  readonly autoRotate: Schema.Finite;
200
+ readonly shake: Schema.withDecodingDefaultKey<Schema.NullOr<Schema.Struct<{
201
+ readonly intensity: Schema.Finite;
202
+ readonly decay: Schema.Boolean;
203
+ readonly decayRate: Schema.Finite;
204
+ readonly maxYaw: Schema.Finite;
205
+ readonly maxPitch: Schema.Finite;
206
+ readonly maxRoll: Schema.Finite;
207
+ readonly yawFrequency: Schema.Finite;
208
+ readonly pitchFrequency: Schema.Finite;
209
+ readonly rollFrequency: Schema.Finite;
210
+ readonly trigger: Schema.Finite;
211
+ }>>, never>;
140
212
  }>]>;
141
213
  readonly background: Schema.NullOr<Schema.Int>;
142
- readonly children: Schema.$Array<Schema.Codec<import("@opsydyn/effect-three").SceneNode, import("@opsydyn/effect-three").SceneNode, never, never>>;
214
+ readonly children: Schema.$Array<Schema.Codec<import("@opsydyn/effect-three").SceneNode, unknown, never, never>>;
143
215
  }>>;
216
+ readonly hud: Schema.withDecodingDefaultKey<Schema.NullOr<Schema.Struct<{
217
+ readonly alignment: Schema.Literals<readonly ["top-left", "top-center", "top-right", "center-left", "center-center", "center-right", "bottom-left", "bottom-center", "bottom-right"]>;
218
+ readonly margin: Schema.Tuple<readonly [Schema.Finite, Schema.Finite]>;
219
+ readonly children: Schema.$Array<Schema.Codec<import("@opsydyn/effect-three").SceneNode, unknown, never, never>>;
220
+ }>>, never>;
144
221
  readonly overlays: Schema.$Array<Schema.Struct<{
145
222
  readonly key: Schema.String;
146
223
  readonly node: Schema.NullOr<Schema.String>;
@@ -325,6 +402,18 @@ export declare const sceneElement: CustomElement.CustomElementSpec<"effect-three
325
402
  }>, Schema.TaggedStruct<"Circle", {
326
403
  readonly radius: Schema.Finite;
327
404
  readonly segments: Schema.Int;
405
+ }>, Schema.TaggedStruct<"RoundedBox", {
406
+ readonly width: Schema.Finite;
407
+ readonly height: Schema.Finite;
408
+ readonly depth: Schema.Finite;
409
+ readonly radius: Schema.Finite;
410
+ readonly smoothness: Schema.Int;
411
+ readonly bevelSegments: Schema.Int;
412
+ readonly steps: Schema.Int;
413
+ readonly creaseAngle: Schema.Finite;
414
+ }>, Schema.TaggedStruct<"Backdrop", {
415
+ readonly floor: Schema.Finite;
416
+ readonly segments: Schema.Int;
328
417
  }>]>;
329
418
  }>>;
330
419
  readonly materials: Schema.$Array<Schema.Struct<{
@@ -339,6 +428,7 @@ export declare const sceneElement: CustomElement.CustomElementSpec<"effect-three
339
428
  readonly wireframe: Schema.Boolean;
340
429
  readonly color: Schema.Int;
341
430
  readonly map: Schema.NullOr<Schema.String>;
431
+ readonly depthTest: Schema.withDecodingDefaultKey<Schema.Boolean, never>;
342
432
  }>, Schema.TaggedStruct<"Lambert", {
343
433
  readonly opacity: Schema.Finite;
344
434
  readonly transparent: Schema.Boolean;
@@ -396,7 +486,7 @@ export declare const sceneElement: CustomElement.CustomElementSpec<"effect-three
396
486
  }>]>;
397
487
  }>>;
398
488
  }>;
399
- readonly children: Schema.$Array<Schema.Codec<import("@opsydyn/effect-three").SceneNode, import("@opsydyn/effect-three").SceneNode, never, never>>;
489
+ readonly children: Schema.$Array<Schema.Codec<import("@opsydyn/effect-three").SceneNode, unknown, never, never>>;
400
490
  }>;
401
491
  }, {
402
492
  'scene-click': Schema.Struct<{
@@ -589,6 +679,17 @@ export declare const sceneElement: CustomElement.CustomElementSpec<"effect-three
589
679
  readonly deltaY: Schema.Finite;
590
680
  }>]>;
591
681
  }>;
682
+ 'scene-gesture-end': Schema.Struct<{
683
+ readonly button: Schema.Int;
684
+ readonly modifiers: Schema.Struct<{
685
+ readonly shift: Schema.Boolean;
686
+ readonly control: Schema.Boolean;
687
+ readonly meta: Schema.Boolean;
688
+ readonly alt: Schema.Boolean;
689
+ }>;
690
+ readonly key: Schema.optionalKey<Schema.String>;
691
+ readonly view: Schema.optionalKey<Schema.String>;
692
+ }>;
592
693
  'scene-auto-rotated': Schema.Struct<{
593
694
  readonly view: Schema.optionalKey<Schema.String>;
594
695
  readonly position: Schema.Tuple<readonly [Schema.Finite, Schema.Finite, Schema.Finite]>;
@@ -747,6 +848,7 @@ export declare const domEventName: {
747
848
  readonly Drag: 'scene-drag';
748
849
  readonly DragEnd: 'scene-drag-end';
749
850
  readonly Gesture: 'scene-gesture';
851
+ readonly GestureEnd: 'scene-gesture-end';
750
852
  readonly AutoRotated: 'scene-auto-rotated';
751
853
  readonly Collision: 'scene-collision';
752
854
  readonly ContactForce: 'scene-contact-force';
@@ -1 +1 @@
1
- {"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../src/element.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGxC,qFAAqF;AACrF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAGrB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAC;AAIhD,wEAAwE;AACxE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;EAW3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAC;AAE5D,oFAAoF;AACpF,eAAO,MAAM,eAAe;;EAE1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAC;AAE1D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCvB,CAAC;AAEH,sDAAsD;AACtD,eAAO,MAAM,YAAY;oBAChB,aAAa;0BACP,oBAAoB;0BACpB,oBAAoB;0BACpB,oBAAoB;wBACtB,kBAAkB;2BACf,qBAAqB;0BACtB,oBAAoB;2BACnB,qBAAqB;4BACpB,sBAAsB;oBAC9B,aAAa;mBACd,YAAY;sBACT,gBAAgB;sBAChB,eAAe;0BACX,oBAAoB;wBACtB,iBAAiB;2BACd,qBAAqB;uBACzB,gBAAgB;4BACX,sBAAsB;sBAC5B,gBAAgB;uBACf,iBAAiB;wBAChB,kBAAkB;sBACpB,gBAAgB;uBACf,iBAAiB;uBACjB,iBAAiB;iCACP,mBAAmB;CACwC,CAAC;AAElF,yFAAyF;AACzF,eAAO,MAAM,cAAc;;;QAEV,MAAM;;EACrB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAC"}
1
+ {"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../src/element.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGxC,qFAAqF;AACrF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAGrB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC,IAAI,CAAC;AAIhD,wEAAwE;AACxE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;EAW3B,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAC;AAE5D,oFAAoF;AACpF,eAAO,MAAM,eAAe;;EAE1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,eAAe,CAAC,IAAI,CAAC;AAE1D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkCvB,CAAC;AAEH,sDAAsD;AACtD,eAAO,MAAM,YAAY;oBAChB,aAAa;0BACP,oBAAoB;0BACpB,oBAAoB;0BACpB,oBAAoB;wBACtB,kBAAkB;2BACf,qBAAqB;0BACtB,oBAAoB;2BACnB,qBAAqB;4BACpB,sBAAsB;oBAC9B,aAAa;mBACd,YAAY;sBACT,gBAAgB;sBAChB,eAAe;yBACZ,mBAAmB;0BAClB,oBAAoB;wBACtB,iBAAiB;2BACd,qBAAqB;uBACzB,gBAAgB;4BACX,sBAAsB;sBAC5B,gBAAgB;uBACf,iBAAiB;wBAChB,kBAAkB;sBACpB,gBAAgB;uBACf,iBAAiB;uBACjB,iBAAiB;iCACP,mBAAmB;CACwC,CAAC;AAElF,yFAAyF;AACzF,eAAO,MAAM,cAAc;;;QAEV,MAAM;;EACrB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,cAAc,CAAC,IAAI,CAAC"}
package/dist/index.d.ts CHANGED
@@ -26,7 +26,13 @@ export { type XrMode } from './dom/xrHub.ts';
26
26
  export { type XrControls, XrUnavailable } from './xr.ts';
27
27
  export { summarise } from './dom/reconciled.ts';
28
28
  export { type Environment, type EnvironmentHost, type EnvironmentOptions, makeEnvironment, } from './environment.ts';
29
+ export { inspectorView, type OnEdit } from './inspector.ts';
29
30
  export { makeSceneMount, type SceneMount } from './mount.ts';
31
+ export * as BoxSelect from './boxSelect.ts';
32
+ export * as MeasuringTape from './measuringTape.ts';
33
+ export * as PivotControls from './pivotControls.ts';
34
+ export * as TransformGizmo from './transformGizmo.ts';
35
+ export * as ViewportGizmo from './viewportGizmo.ts';
30
36
  export { type OverlayView } from './overlayView.ts';
31
- export { type AutoRotatedDetail, type ButtonDetail, type CollisionDetail, type ContactForceDetail, type DragDetail, type Gesture, type HitDetail, type KeyDetail, type LabelMeasuredDetail, type MeasuredDetail, type MissDetail, type PerformanceDetail, view, type ViewConfig, type WheelDetail, type XrButtonDetail, type XrMeshesDetail, type XrMovedDetail, type XrPlanesDetail, type XrStickDetail, type XrSurfaceDetail, } from './view.ts';
37
+ export { type AutoRotatedDetail, type ButtonDetail, type CollisionDetail, type ContactForceDetail, type DragDetail, type Gesture, type GestureEndDetail, type HitDetail, type KeyDetail, type LabelMeasuredDetail, type MeasuredDetail, type MissDetail, type PerformanceDetail, view, type ViewConfig, type WheelDetail, type XrButtonDetail, type XrMeshesDetail, type XrMovedDetail, type XrPlanesDetail, type XrStickDetail, type XrSurfaceDetail, } from './view.ts';
32
38
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,cAAc,EAAE,KAAK,MAAM,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EAAE,uBAAuB,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,KAAK,IAAI,EACT,KAAK,EACL,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,KAAK,UAAU,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,KAAK,aAAa,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,cAAc,EACd,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,KAAK,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,IAAI,EACJ,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,cAAc,EAAE,KAAK,MAAM,EAAE,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EAAE,uBAAuB,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC5F,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,KAAK,IAAI,EACT,KAAK,EACL,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,KAAK,UAAU,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,KAAK,aAAa,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,cAAc,EACd,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,KAAK,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,KAAK,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,IAAI,EACJ,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,WAAW,CAAC"}