@certe/atmos-editor 0.1.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.
Files changed (234) hide show
  1. package/LICENCE +674 -0
  2. package/README.md +206 -0
  3. package/dist/asset-browser-client.d.ts +24 -0
  4. package/dist/asset-browser-client.d.ts.map +1 -0
  5. package/dist/asset-browser-client.js +60 -0
  6. package/dist/asset-browser-client.js.map +1 -0
  7. package/dist/asset-types.d.ts +33 -0
  8. package/dist/asset-types.d.ts.map +1 -0
  9. package/dist/asset-types.js +2 -0
  10. package/dist/asset-types.js.map +1 -0
  11. package/dist/bootstrap/default-factories.d.ts +38 -0
  12. package/dist/bootstrap/default-factories.d.ts.map +1 -0
  13. package/dist/bootstrap/default-factories.js +268 -0
  14. package/dist/bootstrap/default-factories.js.map +1 -0
  15. package/dist/bootstrap/editor-physics.d.ts +81 -0
  16. package/dist/bootstrap/editor-physics.d.ts.map +1 -0
  17. package/dist/bootstrap/editor-physics.js +512 -0
  18. package/dist/bootstrap/editor-physics.js.map +1 -0
  19. package/dist/bootstrap/geometry-cache.d.ts +5 -0
  20. package/dist/bootstrap/geometry-cache.d.ts.map +1 -0
  21. package/dist/bootstrap/geometry-cache.js +18 -0
  22. package/dist/bootstrap/geometry-cache.js.map +1 -0
  23. package/dist/bootstrap/keyboard-shortcuts.d.ts +4 -0
  24. package/dist/bootstrap/keyboard-shortcuts.d.ts.map +1 -0
  25. package/dist/bootstrap/keyboard-shortcuts.js +43 -0
  26. package/dist/bootstrap/keyboard-shortcuts.js.map +1 -0
  27. package/dist/bootstrap/model-import.d.ts +9 -0
  28. package/dist/bootstrap/model-import.d.ts.map +1 -0
  29. package/dist/bootstrap/model-import.js +55 -0
  30. package/dist/bootstrap/model-import.js.map +1 -0
  31. package/dist/bootstrap/start-editor.d.ts +3 -0
  32. package/dist/bootstrap/start-editor.d.ts.map +1 -0
  33. package/dist/bootstrap/start-editor.js +506 -0
  34. package/dist/bootstrap/start-editor.js.map +1 -0
  35. package/dist/bootstrap/start-player.d.ts +23 -0
  36. package/dist/bootstrap/start-player.d.ts.map +1 -0
  37. package/dist/bootstrap/start-player.js +205 -0
  38. package/dist/bootstrap/start-player.js.map +1 -0
  39. package/dist/bootstrap/types.d.ts +160 -0
  40. package/dist/bootstrap/types.d.ts.map +1 -0
  41. package/dist/bootstrap/types.js +2 -0
  42. package/dist/bootstrap/types.js.map +1 -0
  43. package/dist/camera-frustum-renderer.d.ts +15 -0
  44. package/dist/camera-frustum-renderer.d.ts.map +1 -0
  45. package/dist/camera-frustum-renderer.js +110 -0
  46. package/dist/camera-frustum-renderer.js.map +1 -0
  47. package/dist/camera-presets.d.ts +10 -0
  48. package/dist/camera-presets.d.ts.map +1 -0
  49. package/dist/camera-presets.js +15 -0
  50. package/dist/camera-presets.js.map +1 -0
  51. package/dist/collider-gizmo-renderer.d.ts +13 -0
  52. package/dist/collider-gizmo-renderer.d.ts.map +1 -0
  53. package/dist/collider-gizmo-renderer.js +217 -0
  54. package/dist/collider-gizmo-renderer.js.map +1 -0
  55. package/dist/color-utils.d.ts +5 -0
  56. package/dist/color-utils.d.ts.map +1 -0
  57. package/dist/color-utils.js +13 -0
  58. package/dist/color-utils.js.map +1 -0
  59. package/dist/components/asset-browser-panel.d.ts +14 -0
  60. package/dist/components/asset-browser-panel.d.ts.map +1 -0
  61. package/dist/components/asset-browser-panel.js +247 -0
  62. package/dist/components/asset-browser-panel.js.map +1 -0
  63. package/dist/components/context-menu.d.ts +14 -0
  64. package/dist/components/context-menu.d.ts.map +1 -0
  65. package/dist/components/context-menu.js +48 -0
  66. package/dist/components/context-menu.js.map +1 -0
  67. package/dist/components/editor-shell.d.ts +27 -0
  68. package/dist/components/editor-shell.d.ts.map +1 -0
  69. package/dist/components/editor-shell.js +327 -0
  70. package/dist/components/editor-shell.js.map +1 -0
  71. package/dist/components/fields/boolean-field.d.ts +8 -0
  72. package/dist/components/fields/boolean-field.d.ts.map +1 -0
  73. package/dist/components/fields/boolean-field.js +11 -0
  74. package/dist/components/fields/boolean-field.js.map +1 -0
  75. package/dist/components/fields/color-field.d.ts +8 -0
  76. package/dist/components/fields/color-field.d.ts.map +1 -0
  77. package/dist/components/fields/color-field.js +34 -0
  78. package/dist/components/fields/color-field.js.map +1 -0
  79. package/dist/components/fields/decimal-input.d.ts +13 -0
  80. package/dist/components/fields/decimal-input.d.ts.map +1 -0
  81. package/dist/components/fields/decimal-input.js +49 -0
  82. package/dist/components/fields/decimal-input.js.map +1 -0
  83. package/dist/components/fields/enum-field.d.ts +12 -0
  84. package/dist/components/fields/enum-field.d.ts.map +1 -0
  85. package/dist/components/fields/enum-field.js +20 -0
  86. package/dist/components/fields/enum-field.js.map +1 -0
  87. package/dist/components/fields/game-object-ref-field.d.ts +11 -0
  88. package/dist/components/fields/game-object-ref-field.d.ts.map +1 -0
  89. package/dist/components/fields/game-object-ref-field.js +73 -0
  90. package/dist/components/fields/game-object-ref-field.js.map +1 -0
  91. package/dist/components/fields/material-asset-field.d.ts +10 -0
  92. package/dist/components/fields/material-asset-field.d.ts.map +1 -0
  93. package/dist/components/fields/material-asset-field.js +114 -0
  94. package/dist/components/fields/material-asset-field.js.map +1 -0
  95. package/dist/components/fields/number-field.d.ts +10 -0
  96. package/dist/components/fields/number-field.d.ts.map +1 -0
  97. package/dist/components/fields/number-field.js +21 -0
  98. package/dist/components/fields/number-field.js.map +1 -0
  99. package/dist/components/fields/quat-field.d.ts +8 -0
  100. package/dist/components/fields/quat-field.d.ts.map +1 -0
  101. package/dist/components/fields/quat-field.js +43 -0
  102. package/dist/components/fields/quat-field.js.map +1 -0
  103. package/dist/components/fields/string-field.d.ts +7 -0
  104. package/dist/components/fields/string-field.d.ts.map +1 -0
  105. package/dist/components/fields/string-field.js +20 -0
  106. package/dist/components/fields/string-field.js.map +1 -0
  107. package/dist/components/fields/vec3-field.d.ts +8 -0
  108. package/dist/components/fields/vec3-field.d.ts.map +1 -0
  109. package/dist/components/fields/vec3-field.js +30 -0
  110. package/dist/components/fields/vec3-field.js.map +1 -0
  111. package/dist/components/hierarchy-node.d.ts +18 -0
  112. package/dist/components/hierarchy-node.d.ts.map +1 -0
  113. package/dist/components/hierarchy-node.js +77 -0
  114. package/dist/components/hierarchy-node.js.map +1 -0
  115. package/dist/components/hierarchy-panel.d.ts +14 -0
  116. package/dist/components/hierarchy-panel.d.ts.map +1 -0
  117. package/dist/components/hierarchy-panel.js +228 -0
  118. package/dist/components/hierarchy-panel.js.map +1 -0
  119. package/dist/components/inspector-panel.d.ts +14 -0
  120. package/dist/components/inspector-panel.d.ts.map +1 -0
  121. package/dist/components/inspector-panel.js +288 -0
  122. package/dist/components/inspector-panel.js.map +1 -0
  123. package/dist/components/material-inspector.d.ts +10 -0
  124. package/dist/components/material-inspector.d.ts.map +1 -0
  125. package/dist/components/material-inspector.js +130 -0
  126. package/dist/components/material-inspector.js.map +1 -0
  127. package/dist/components/post-process-panel.d.ts +9 -0
  128. package/dist/components/post-process-panel.d.ts.map +1 -0
  129. package/dist/components/post-process-panel.js +70 -0
  130. package/dist/components/post-process-panel.js.map +1 -0
  131. package/dist/components/project-gate.d.ts +8 -0
  132. package/dist/components/project-gate.d.ts.map +1 -0
  133. package/dist/components/project-gate.js +87 -0
  134. package/dist/components/project-gate.js.map +1 -0
  135. package/dist/components/settings-panel.d.ts +8 -0
  136. package/dist/components/settings-panel.d.ts.map +1 -0
  137. package/dist/components/settings-panel.js +108 -0
  138. package/dist/components/settings-panel.js.map +1 -0
  139. package/dist/components/use-splitter.d.ts +4 -0
  140. package/dist/components/use-splitter.d.ts.map +1 -0
  141. package/dist/components/use-splitter.js +22 -0
  142. package/dist/components/use-splitter.js.map +1 -0
  143. package/dist/editor-mount.d.ts +36 -0
  144. package/dist/editor-mount.d.ts.map +1 -0
  145. package/dist/editor-mount.js +161 -0
  146. package/dist/editor-mount.js.map +1 -0
  147. package/dist/editor-state.d.ts +55 -0
  148. package/dist/editor-state.d.ts.map +1 -0
  149. package/dist/editor-state.js +181 -0
  150. package/dist/editor-state.js.map +1 -0
  151. package/dist/gizmo-meshes.d.ts +9 -0
  152. package/dist/gizmo-meshes.d.ts.map +1 -0
  153. package/dist/gizmo-meshes.js +229 -0
  154. package/dist/gizmo-meshes.js.map +1 -0
  155. package/dist/gizmo-renderer.d.ts +16 -0
  156. package/dist/gizmo-renderer.d.ts.map +1 -0
  157. package/dist/gizmo-renderer.js +77 -0
  158. package/dist/gizmo-renderer.js.map +1 -0
  159. package/dist/gizmo-state.d.ts +25 -0
  160. package/dist/gizmo-state.d.ts.map +1 -0
  161. package/dist/gizmo-state.js +269 -0
  162. package/dist/gizmo-state.js.map +1 -0
  163. package/dist/index.d.ts +33 -0
  164. package/dist/index.d.ts.map +1 -0
  165. package/dist/index.js +22 -0
  166. package/dist/index.js.map +1 -0
  167. package/dist/joint-gizmo-renderer.d.ts +13 -0
  168. package/dist/joint-gizmo-renderer.d.ts.map +1 -0
  169. package/dist/joint-gizmo-renderer.js +133 -0
  170. package/dist/joint-gizmo-renderer.js.map +1 -0
  171. package/dist/material-manager.d.ts +22 -0
  172. package/dist/material-manager.d.ts.map +1 -0
  173. package/dist/material-manager.js +156 -0
  174. package/dist/material-manager.js.map +1 -0
  175. package/dist/object-picker.d.ts +11 -0
  176. package/dist/object-picker.d.ts.map +1 -0
  177. package/dist/object-picker.js +104 -0
  178. package/dist/object-picker.js.map +1 -0
  179. package/dist/orbit-camera.d.ts +38 -0
  180. package/dist/orbit-camera.d.ts.map +1 -0
  181. package/dist/orbit-camera.js +180 -0
  182. package/dist/orbit-camera.js.map +1 -0
  183. package/dist/overlay-renderer.d.ts +23 -0
  184. package/dist/overlay-renderer.d.ts.map +1 -0
  185. package/dist/overlay-renderer.js +95 -0
  186. package/dist/overlay-renderer.js.map +1 -0
  187. package/dist/player-entry.d.ts +6 -0
  188. package/dist/player-entry.d.ts.map +1 -0
  189. package/dist/player-entry.js +4 -0
  190. package/dist/player-entry.js.map +1 -0
  191. package/dist/project-fs.d.ts +28 -0
  192. package/dist/project-fs.d.ts.map +1 -0
  193. package/dist/project-fs.js +258 -0
  194. package/dist/project-fs.js.map +1 -0
  195. package/dist/project-seed.d.ts +3 -0
  196. package/dist/project-seed.d.ts.map +1 -0
  197. package/dist/project-seed.js +35 -0
  198. package/dist/project-seed.js.map +1 -0
  199. package/dist/project-settings.d.ts +29 -0
  200. package/dist/project-settings.d.ts.map +1 -0
  201. package/dist/project-settings.js +69 -0
  202. package/dist/project-settings.js.map +1 -0
  203. package/dist/property-setters.d.ts +4 -0
  204. package/dist/property-setters.d.ts.map +1 -0
  205. package/dist/property-setters.js +58 -0
  206. package/dist/property-setters.js.map +1 -0
  207. package/dist/scene-operations.d.ts +14 -0
  208. package/dist/scene-operations.d.ts.map +1 -0
  209. package/dist/scene-operations.js +195 -0
  210. package/dist/scene-operations.js.map +1 -0
  211. package/dist/scene-snapshot.d.ts +28 -0
  212. package/dist/scene-snapshot.d.ts.map +1 -0
  213. package/dist/scene-snapshot.js +97 -0
  214. package/dist/scene-snapshot.js.map +1 -0
  215. package/dist/script-discovery.d.ts +12 -0
  216. package/dist/script-discovery.d.ts.map +1 -0
  217. package/dist/script-discovery.js +81 -0
  218. package/dist/script-discovery.js.map +1 -0
  219. package/dist/selection-utils.d.ts +4 -0
  220. package/dist/selection-utils.d.ts.map +1 -0
  221. package/dist/selection-utils.js +19 -0
  222. package/dist/selection-utils.js.map +1 -0
  223. package/dist/simple-material-loader.d.ts +17 -0
  224. package/dist/simple-material-loader.d.ts.map +1 -0
  225. package/dist/simple-material-loader.js +85 -0
  226. package/dist/simple-material-loader.js.map +1 -0
  227. package/dist/wireframe-renderer.d.ts +18 -0
  228. package/dist/wireframe-renderer.d.ts.map +1 -0
  229. package/dist/wireframe-renderer.js +106 -0
  230. package/dist/wireframe-renderer.js.map +1 -0
  231. package/package.json +65 -0
  232. package/src/index.ts +48 -0
  233. package/vite-plugin.d.ts +15 -0
  234. package/vite-plugin.mjs +395 -0
@@ -0,0 +1,217 @@
1
+ import { createUnlitPipeline } from '@certe/atmos-renderer';
2
+ /** Bright green wireframe color. */
3
+ const COLOR = [0.2, 1.0, 0.3];
4
+ const FLOATS_PER_VERT = 6; // position(3) + color(3)
5
+ const CIRCLE_SEGS = 32;
6
+ const ARC_SEGS = 16;
7
+ // Max verts: 8 colliders × 264 verts (capsule worst case)
8
+ const MAX_VERTS = 8 * 264;
9
+ const VERTEX_BUF_SIZE = MAX_VERTS * FLOATS_PER_VERT * 4;
10
+ const UNIFORM_SIZE = 64; // mat4
11
+ // Scratch rotation matrix (3×3 from quaternion)
12
+ const _r = new Float32Array(9);
13
+ function quatToMat3(q) {
14
+ const x2 = q.x + q.x, y2 = q.y + q.y, z2 = q.z + q.z;
15
+ const xx = q.x * x2, xy = q.x * y2, xz = q.x * z2;
16
+ const yy = q.y * y2, yz = q.y * z2, zz = q.z * z2;
17
+ const wx = q.w * x2, wy = q.w * y2, wz = q.w * z2;
18
+ _r[0] = 1 - (yy + zz);
19
+ _r[1] = xy + wz;
20
+ _r[2] = xz - wy;
21
+ _r[3] = xy - wz;
22
+ _r[4] = 1 - (xx + zz);
23
+ _r[5] = yz + wx;
24
+ _r[6] = xz + wy;
25
+ _r[7] = yz - wx;
26
+ _r[8] = 1 - (xx + yy);
27
+ }
28
+ /** Transform a local point by rotation matrix _r + translation. */
29
+ function transformPoint(lx, ly, lz, pos) {
30
+ return [
31
+ _r[0] * lx + _r[3] * ly + _r[6] * lz + pos.x,
32
+ _r[1] * lx + _r[4] * ly + _r[7] * lz + pos.y,
33
+ _r[2] * lx + _r[5] * ly + _r[8] * lz + pos.z,
34
+ ];
35
+ }
36
+ function writeVert(buf, o, x, y, z) {
37
+ buf[o] = x;
38
+ buf[o + 1] = y;
39
+ buf[o + 2] = z;
40
+ buf[o + 3] = COLOR[0];
41
+ buf[o + 4] = COLOR[1];
42
+ buf[o + 5] = COLOR[2];
43
+ return o + FLOATS_PER_VERT;
44
+ }
45
+ function writeCircle(buf, o, segs, pos, radius, axisA, axisB, offset, offsetAxis) {
46
+ const local = [0, 0, 0];
47
+ local[offsetAxis] = offset;
48
+ for (let i = 0; i < segs; i++) {
49
+ const a0 = (i / segs) * Math.PI * 2;
50
+ const a1 = ((i + 1) / segs) * Math.PI * 2;
51
+ local[axisA] = Math.cos(a0) * radius;
52
+ local[axisB] = Math.sin(a0) * radius;
53
+ const p0 = transformPoint(local[0], local[1], local[2], pos);
54
+ local[axisA] = Math.cos(a1) * radius;
55
+ local[axisB] = Math.sin(a1) * radius;
56
+ const p1 = transformPoint(local[0], local[1], local[2], pos);
57
+ o = writeVert(buf, o, p0[0], p0[1], p0[2]);
58
+ o = writeVert(buf, o, p1[0], p1[1], p1[2]);
59
+ }
60
+ return o;
61
+ }
62
+ function writeBox(buf, o, d) {
63
+ const h = d.halfExtents;
64
+ // 8 corners
65
+ const corners = [];
66
+ for (let sx = -1; sx <= 1; sx += 2) {
67
+ for (let sy = -1; sy <= 1; sy += 2) {
68
+ for (let sz = -1; sz <= 1; sz += 2) {
69
+ corners.push(transformPoint(sx * h.x, sy * h.y, sz * h.z, d.position));
70
+ }
71
+ }
72
+ }
73
+ // 12 edges: connect corners that differ in exactly 1 axis
74
+ // Corner indexing: bit0=x, bit1=y, bit2=z
75
+ const edges = [
76
+ [0, 1], [2, 3], [4, 5], [6, 7], // x edges
77
+ [0, 2], [1, 3], [4, 6], [5, 7], // y edges
78
+ [0, 4], [1, 5], [2, 6], [3, 7], // z edges
79
+ ];
80
+ for (const edge of edges) {
81
+ const ca = corners[edge[0]];
82
+ const cb = corners[edge[1]];
83
+ o = writeVert(buf, o, ca[0], ca[1], ca[2]);
84
+ o = writeVert(buf, o, cb[0], cb[1], cb[2]);
85
+ }
86
+ return o;
87
+ }
88
+ function writeSphere(buf, o, d) {
89
+ const r = d.radius;
90
+ // 3 great circles: XY, XZ, YZ
91
+ o = writeCircle(buf, o, CIRCLE_SEGS, d.position, r, 0, 1, 0, 2); // XY
92
+ o = writeCircle(buf, o, CIRCLE_SEGS, d.position, r, 0, 2, 0, 1); // XZ
93
+ o = writeCircle(buf, o, CIRCLE_SEGS, d.position, r, 1, 2, 0, 0); // YZ
94
+ return o;
95
+ }
96
+ function writeCylinder(buf, o, d) {
97
+ const r = d.radius;
98
+ const hh = d.halfHeight;
99
+ // Top and bottom circles (XZ plane at ±halfHeight on Y)
100
+ o = writeCircle(buf, o, CIRCLE_SEGS, d.position, r, 0, 2, hh, 1);
101
+ o = writeCircle(buf, o, CIRCLE_SEGS, d.position, r, 0, 2, -hh, 1);
102
+ // 4 vertical lines
103
+ for (let i = 0; i < 4; i++) {
104
+ const angle = (i / 4) * Math.PI * 2;
105
+ const lx = Math.cos(angle) * r;
106
+ const lz = Math.sin(angle) * r;
107
+ const top = transformPoint(lx, hh, lz, d.position);
108
+ const bot = transformPoint(lx, -hh, lz, d.position);
109
+ o = writeVert(buf, o, top[0], top[1], top[2]);
110
+ o = writeVert(buf, o, bot[0], bot[1], bot[2]);
111
+ }
112
+ return o;
113
+ }
114
+ function writeCapsule(buf, o, d) {
115
+ const r = d.radius;
116
+ const hh = d.halfHeight;
117
+ // Cylinder body: top and bottom circles
118
+ o = writeCircle(buf, o, CIRCLE_SEGS, d.position, r, 0, 2, hh, 1);
119
+ o = writeCircle(buf, o, CIRCLE_SEGS, d.position, r, 0, 2, -hh, 1);
120
+ // 4 vertical lines
121
+ for (let i = 0; i < 4; i++) {
122
+ const angle = (i / 4) * Math.PI * 2;
123
+ const lx = Math.cos(angle) * r;
124
+ const lz = Math.sin(angle) * r;
125
+ const top = transformPoint(lx, hh, lz, d.position);
126
+ const bot = transformPoint(lx, -hh, lz, d.position);
127
+ o = writeVert(buf, o, top[0], top[1], top[2]);
128
+ o = writeVert(buf, o, bot[0], bot[1], bot[2]);
129
+ }
130
+ // 4 hemisphere arcs (2 on top in XY and ZY planes, 2 on bottom)
131
+ const writeArc = (centerY, startAngle, endAngle, axisH) => {
132
+ for (let i = 0; i < ARC_SEGS; i++) {
133
+ const a0 = startAngle + (i / ARC_SEGS) * (endAngle - startAngle);
134
+ const a1 = startAngle + ((i + 1) / ARC_SEGS) * (endAngle - startAngle);
135
+ const local0 = [0, 0, 0];
136
+ const local1 = [0, 0, 0];
137
+ local0[axisH] = Math.cos(a0) * r;
138
+ local0[1] = centerY + Math.sin(a0) * r;
139
+ local1[axisH] = Math.cos(a1) * r;
140
+ local1[1] = centerY + Math.sin(a1) * r;
141
+ const p0 = transformPoint(local0[0], local0[1], local0[2], d.position);
142
+ const p1 = transformPoint(local1[0], local1[1], local1[2], d.position);
143
+ o = writeVert(buf, o, p0[0], p0[1], p0[2]);
144
+ o = writeVert(buf, o, p1[0], p1[1], p1[2]);
145
+ }
146
+ };
147
+ // Top hemisphere arcs (0 to PI)
148
+ writeArc(hh, 0, Math.PI, 0); // XY plane
149
+ writeArc(hh, 0, Math.PI, 2); // ZY plane
150
+ // Bottom hemisphere arcs (PI to 2PI)
151
+ writeArc(-hh, Math.PI, Math.PI * 2, 0); // XY plane
152
+ writeArc(-hh, Math.PI, Math.PI * 2, 2); // ZY plane
153
+ return o;
154
+ }
155
+ export class ColliderGizmoRenderer {
156
+ _device;
157
+ _pipeline;
158
+ _vertexBuffer;
159
+ _uniformBuffer;
160
+ _bindGroup;
161
+ _verts = new Float32Array(MAX_VERTS * FLOATS_PER_VERT);
162
+ constructor(device, format) {
163
+ this._device = device;
164
+ this._pipeline = createUnlitPipeline(device, format, {
165
+ topology: 'line-list',
166
+ depthWrite: false,
167
+ depthCompare: 'always',
168
+ });
169
+ this._vertexBuffer = device.createBuffer({
170
+ size: VERTEX_BUF_SIZE,
171
+ usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST,
172
+ });
173
+ this._uniformBuffer = device.createBuffer({
174
+ size: UNIFORM_SIZE,
175
+ usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST,
176
+ });
177
+ this._bindGroup = device.createBindGroup({
178
+ layout: this._pipeline.bindGroupLayout,
179
+ entries: [{ binding: 0, resource: { buffer: this._uniformBuffer } }],
180
+ });
181
+ }
182
+ render(pass, vp, colliders) {
183
+ const v = this._verts;
184
+ let o = 0;
185
+ for (const d of colliders) {
186
+ quatToMat3(d.rotation);
187
+ switch (d.shapeType) {
188
+ case 'box':
189
+ o = writeBox(v, o, d);
190
+ break;
191
+ case 'sphere':
192
+ o = writeSphere(v, o, d);
193
+ break;
194
+ case 'cylinder':
195
+ o = writeCylinder(v, o, d);
196
+ break;
197
+ case 'capsule':
198
+ o = writeCapsule(v, o, d);
199
+ break;
200
+ }
201
+ }
202
+ const vertCount = o / FLOATS_PER_VERT;
203
+ if (vertCount === 0)
204
+ return;
205
+ this._device.queue.writeBuffer(this._vertexBuffer, 0, v.buffer, v.byteOffset, vertCount * FLOATS_PER_VERT * 4);
206
+ this._device.queue.writeBuffer(this._uniformBuffer, 0, vp.buffer, vp.byteOffset, vp.byteLength);
207
+ pass.setPipeline(this._pipeline.pipeline);
208
+ pass.setBindGroup(0, this._bindGroup);
209
+ pass.setVertexBuffer(0, this._vertexBuffer);
210
+ pass.draw(vertCount);
211
+ }
212
+ destroy() {
213
+ this._vertexBuffer.destroy();
214
+ this._uniformBuffer.destroy();
215
+ }
216
+ }
217
+ //# sourceMappingURL=collider-gizmo-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collider-gizmo-renderer.js","sourceRoot":"","sources":["../src/collider-gizmo-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Convert [r, g, b] (0–1 each) to a CSS hex color string. */
2
+ export declare function rgbToHex(r: number, g: number, b: number): string;
3
+ /** Parse a CSS hex color string to [r, g, b] (0–1 each). */
4
+ export declare function hexToRgb(hex: string): [number, number, number];
5
+ //# sourceMappingURL=color-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-utils.d.ts","sourceRoot":"","sources":["../src/color-utils.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED,4DAA4D;AAC5D,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAK9D"}
@@ -0,0 +1,13 @@
1
+ /** Convert [r, g, b] (0–1 each) to a CSS hex color string. */
2
+ export function rgbToHex(r, g, b) {
3
+ const clamp = (v) => Math.round(Math.max(0, Math.min(1, v)) * 255);
4
+ return `#${clamp(r).toString(16).padStart(2, '0')}${clamp(g).toString(16).padStart(2, '0')}${clamp(b).toString(16).padStart(2, '0')}`;
5
+ }
6
+ /** Parse a CSS hex color string to [r, g, b] (0–1 each). */
7
+ export function hexToRgb(hex) {
8
+ const r = parseInt(hex.slice(1, 3), 16) / 255;
9
+ const g = parseInt(hex.slice(3, 5), 16) / 255;
10
+ const b = parseInt(hex.slice(5, 7), 16) / 255;
11
+ return [r, g, b];
12
+ }
13
+ //# sourceMappingURL=color-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-utils.js","sourceRoot":"","sources":["../src/color-utils.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,MAAM,UAAU,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IACtD,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAC3E,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACxI,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IAC9C,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IAC9C,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;IAC9C,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACnB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import type { EditorState } from '../editor-state.js';
3
+ import type { AssetEntry, ScriptAsset } from '../asset-types.js';
4
+ import type { GameObject } from '@certe/atmos-core';
5
+ interface AssetBrowserPanelProps {
6
+ editorState: EditorState;
7
+ onAttachScript?: (script: ScriptAsset, go: GameObject) => void;
8
+ onLoadModel?: (entry: AssetEntry) => void;
9
+ onLoadScene?: (entry: AssetEntry) => void;
10
+ style?: React.CSSProperties;
11
+ }
12
+ export declare function AssetBrowserPanel({ editorState, onAttachScript, onLoadModel, onLoadScene, style }: AssetBrowserPanelProps): import("react/jsx-runtime").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=asset-browser-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-browser-panel.d.ts","sourceRoot":"","sources":["../../src/components/asset-browser-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,UAAU,sBAAsB;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,KAAK,IAAI,CAAC;IAC/D,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAmJD,wBAAgB,iBAAiB,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,sBAAsB,2CAqOzH"}
@@ -0,0 +1,247 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, { useState, useEffect, useMemo, useCallback } from 'react';
3
+ /* ── Styles ─────────────────────────────────────────── */
4
+ const panelStyle = {
5
+ background: '#1c1c1c',
6
+ borderTop: '1px solid #2a2a2a',
7
+ display: 'flex',
8
+ flexDirection: 'column',
9
+ overflow: 'hidden',
10
+ };
11
+ const headerStyle = {
12
+ display: 'flex',
13
+ alignItems: 'center',
14
+ gap: '8px',
15
+ padding: '5px 10px',
16
+ fontSize: '11px',
17
+ fontWeight: 600,
18
+ color: '#888',
19
+ letterSpacing: '0.5px',
20
+ borderBottom: '1px solid #2a2a2a',
21
+ background: '#1c1c1c',
22
+ flexShrink: 0,
23
+ };
24
+ const breadcrumbStyle = {
25
+ fontSize: '11px',
26
+ color: '#666',
27
+ fontWeight: 400,
28
+ letterSpacing: 0,
29
+ };
30
+ const breadcrumbLinkStyle = {
31
+ color: '#6ab0d6',
32
+ cursor: 'pointer',
33
+ background: 'none',
34
+ border: 'none',
35
+ fontSize: '11px',
36
+ fontFamily: 'inherit',
37
+ padding: 0,
38
+ };
39
+ const searchStyle = {
40
+ marginLeft: 'auto',
41
+ background: '#252525',
42
+ border: '1px solid #3a3a3a',
43
+ borderRadius: '3px',
44
+ color: '#b8b8b8',
45
+ fontSize: '10px',
46
+ padding: '2px 6px',
47
+ width: '120px',
48
+ fontFamily: 'inherit',
49
+ outline: 'none',
50
+ };
51
+ const listStyle = {
52
+ flex: 1,
53
+ overflow: 'auto',
54
+ padding: '2px 0',
55
+ };
56
+ const rowStyle = {
57
+ display: 'flex',
58
+ alignItems: 'center',
59
+ gap: '6px',
60
+ padding: '3px 10px',
61
+ fontSize: '11px',
62
+ color: '#b8b8b8',
63
+ cursor: 'pointer',
64
+ userSelect: 'none',
65
+ };
66
+ const rowHoverBg = '#2a2a3a';
67
+ const rowSelectedBg = '#1a4a7a';
68
+ const badgeBase = {
69
+ fontSize: '9px',
70
+ fontWeight: 700,
71
+ padding: '1px 4px',
72
+ borderRadius: '2px',
73
+ letterSpacing: '0.3px',
74
+ flexShrink: 0,
75
+ minWidth: '24px',
76
+ textAlign: 'center',
77
+ };
78
+ const BADGE_COLORS = {
79
+ ts: { bg: '#1a4a7a', color: '#7ab8e8' },
80
+ tsx: { bg: '#1a4a7a', color: '#7ab8e8' },
81
+ js: { bg: '#4a4a1a', color: '#d8d87a' },
82
+ json: { bg: '#3a3a3a', color: '#999' },
83
+ html: { bg: '#6a2a2a', color: '#e88' },
84
+ css: { bg: '#2a4a2a', color: '#8c8' },
85
+ wgsl: { bg: '#4a2a5a', color: '#b88ae8' },
86
+ glb: { bg: '#5a3a1a', color: '#e8a848' },
87
+ gltf: { bg: '#5a3a1a', color: '#e8a848' },
88
+ dir: { bg: '#3a3a2a', color: '#c8b888' },
89
+ };
90
+ const MODEL_EXTENSIONS = new Set(['glb', 'gltf']);
91
+ const MATERIAL_EXTENSION = '.mat.json';
92
+ const SCENE_EXTENSION = '.scene.json';
93
+ const TEXTURE_EXTENSIONS = new Set(['png', 'jpg', 'jpeg', 'webp']);
94
+ const contextMenuStyle = {
95
+ position: 'fixed',
96
+ background: '#252525',
97
+ border: '1px solid #3a3a3a',
98
+ borderRadius: '4px',
99
+ padding: '4px 0',
100
+ zIndex: 2000,
101
+ minWidth: '160px',
102
+ boxShadow: '0 6px 16px rgba(0,0,0,0.6)',
103
+ };
104
+ const contextItemStyle = {
105
+ padding: '5px 12px',
106
+ fontSize: '11px',
107
+ cursor: 'pointer',
108
+ color: '#b8b8b8',
109
+ };
110
+ /* ── Helpers ────────────────────────────────────────── */
111
+ function findEntryAtPath(entries, pathParts) {
112
+ let current = entries;
113
+ for (const part of pathParts) {
114
+ const dir = current.find((e) => e.name === part && e.kind === 'directory');
115
+ if (!dir?.children)
116
+ return [];
117
+ current = dir.children;
118
+ }
119
+ return current;
120
+ }
121
+ function badgeFor(entry) {
122
+ if (entry.kind === 'directory') {
123
+ const c = BADGE_COLORS['dir'];
124
+ return { label: 'DIR', ...c };
125
+ }
126
+ const ext = entry.extension.toLowerCase();
127
+ const c = BADGE_COLORS[ext] ?? { bg: '#333', color: '#888' };
128
+ return { label: ext.toUpperCase() || '---', ...c };
129
+ }
130
+ /* ── Component ──────────────────────────────────────── */
131
+ export function AssetBrowserPanel({ editorState, onAttachScript, onLoadModel, onLoadScene, style }) {
132
+ const [, setTick] = useState(0);
133
+ const [currentPath, setCurrentPath] = useState([]);
134
+ const [search, setSearch] = useState('');
135
+ const [selectedPath, setSelectedPath] = useState(null);
136
+ const [contextMenu, setContextMenu] = useState(null);
137
+ useEffect(() => {
138
+ const refresh = () => setTick((t) => t + 1);
139
+ const unsub1 = editorState.on('assetsChanged', refresh);
140
+ const unsub2 = editorState.on('scriptsChanged', refresh);
141
+ return () => { unsub1(); unsub2(); };
142
+ }, [editorState]);
143
+ // Close context menu on any click
144
+ useEffect(() => {
145
+ if (!contextMenu)
146
+ return;
147
+ const close = () => setContextMenu(null);
148
+ window.addEventListener('click', close);
149
+ return () => window.removeEventListener('click', close);
150
+ }, [contextMenu]);
151
+ const entries = editorState.assetEntries;
152
+ const scriptSet = useMemo(() => new Set(editorState.scriptAssets.map((s) => s.path)), [editorState.scriptAssets]);
153
+ const visibleEntries = useMemo(() => {
154
+ const items = findEntryAtPath(entries, currentPath);
155
+ if (!search)
156
+ return items;
157
+ const lower = search.toLowerCase();
158
+ return items.filter((e) => e.name.toLowerCase().includes(lower));
159
+ }, [entries, currentPath, search]);
160
+ const navigateInto = useCallback((entry) => {
161
+ if (entry.kind === 'directory') {
162
+ setCurrentPath((p) => [...p, entry.name]);
163
+ setSearch('');
164
+ setSelectedPath(null);
165
+ }
166
+ }, []);
167
+ const navigateTo = useCallback((index) => {
168
+ setCurrentPath((p) => p.slice(0, index));
169
+ setSearch('');
170
+ setSelectedPath(null);
171
+ }, []);
172
+ const findScript = useCallback((entry) => editorState.scriptAssets.find((s) => s.path === entry.path), [editorState.scriptAssets]);
173
+ const handleAttach = useCallback((entry) => {
174
+ const script = findScript(entry);
175
+ if (!script || !editorState.selected || !onAttachScript)
176
+ return;
177
+ onAttachScript(script, editorState.selected);
178
+ }, [findScript, editorState, onAttachScript]);
179
+ const handleContextMenu = useCallback((e, entry) => {
180
+ e.preventDefault();
181
+ setContextMenu({ x: e.clientX, y: e.clientY, entry });
182
+ }, []);
183
+ // Breadcrumb parts
184
+ const breadcrumbs = ['Project', ...currentPath];
185
+ return (_jsxs("div", { style: { ...panelStyle, ...style }, children: [_jsxs("div", { style: headerStyle, children: [_jsx("span", { style: { textTransform: 'uppercase' }, children: "Project" }), _jsx("span", { style: breadcrumbStyle, children: breadcrumbs.map((part, i) => (_jsxs(React.Fragment, { children: [i > 0 && _jsx("span", { style: { margin: '0 3px', color: '#555' }, children: "/" }), i < breadcrumbs.length - 1 ? (_jsx("button", { style: breadcrumbLinkStyle, onClick: () => navigateTo(i), children: part })) : (_jsx("span", { style: { color: '#999' }, children: part }))] }, i))) }), _jsx("input", { style: searchStyle, placeholder: "Filter...", value: search, onChange: (e) => setSearch(e.target.value) })] }), _jsxs("div", { style: listStyle, children: [visibleEntries.length === 0 && (_jsx("div", { style: { padding: '12px', color: '#555', fontSize: '11px' }, children: entries.length === 0 ? 'No assets available' : 'No matching files' })), visibleEntries.map((entry) => {
186
+ const badge = badgeFor(entry);
187
+ const isScript = scriptSet.has(entry.path);
188
+ const isModel = MODEL_EXTENSIONS.has(entry.extension.toLowerCase());
189
+ const isMaterial = entry.name.endsWith(MATERIAL_EXTENSION);
190
+ const isScene = entry.name.endsWith(SCENE_EXTENSION);
191
+ const isTexture = TEXTURE_EXTENSIONS.has(entry.extension.toLowerCase());
192
+ const isSelected = selectedPath === entry.path;
193
+ return (_jsxs("div", { draggable: isScript || isModel || isMaterial || isTexture, style: {
194
+ ...rowStyle,
195
+ background: isSelected ? rowSelectedBg : 'transparent',
196
+ }, onClick: () => {
197
+ setSelectedPath(entry.path);
198
+ if (entry.name.endsWith(MATERIAL_EXTENSION)) {
199
+ editorState.selectMaterial(entry.path);
200
+ }
201
+ else {
202
+ // Deselect material when clicking non-material files
203
+ if (editorState.selectedMaterialPath)
204
+ editorState.selectMaterial(null);
205
+ }
206
+ }, onDoubleClick: () => {
207
+ if (entry.kind === 'directory')
208
+ navigateInto(entry);
209
+ else if (isScene && onLoadScene) {
210
+ const name = entry.name.replace(/\.scene\.json$/, '');
211
+ if (confirm(`Load scene "${name}"?`))
212
+ onLoadScene(entry);
213
+ }
214
+ else if (isScript)
215
+ handleAttach(entry);
216
+ else if (isModel && onLoadModel)
217
+ onLoadModel(entry);
218
+ }, onContextMenu: (e) => handleContextMenu(e, entry), onDragStart: (e) => {
219
+ if (isScript) {
220
+ e.dataTransfer.setData('application/x-atmos-script', entry.path);
221
+ e.dataTransfer.effectAllowed = 'copy';
222
+ }
223
+ else if (isModel) {
224
+ e.dataTransfer.setData('application/x-atmos-model', entry.path);
225
+ e.dataTransfer.effectAllowed = 'copy';
226
+ }
227
+ else if (isMaterial) {
228
+ e.dataTransfer.setData('application/x-atmos-material', entry.path);
229
+ e.dataTransfer.effectAllowed = 'copy';
230
+ }
231
+ else if (isTexture) {
232
+ e.dataTransfer.setData('application/x-atmos-texture', entry.path);
233
+ e.dataTransfer.effectAllowed = 'copy';
234
+ }
235
+ else {
236
+ e.preventDefault();
237
+ }
238
+ }, onMouseEnter: (e) => {
239
+ if (!isSelected)
240
+ e.currentTarget.style.background = rowHoverBg;
241
+ }, onMouseLeave: (e) => {
242
+ if (!isSelected)
243
+ e.currentTarget.style.background = 'transparent';
244
+ }, children: [_jsx("span", { style: { ...badgeBase, background: badge.bg, color: badge.color }, children: badge.label }), _jsx("span", { style: isScript ? { color: '#8cd68c' } : isModel ? { color: '#e8a848' } : isMaterial ? { color: '#b888e8' } : undefined, children: entry.name }), isScript && (_jsx("span", { style: { fontSize: '9px', color: '#5a8a5a', marginLeft: '4px' }, children: "Script" })), isModel && (_jsx("span", { style: { fontSize: '9px', color: '#8a6a2a', marginLeft: '4px' }, children: "Model" })), isMaterial && (_jsx("span", { style: { fontSize: '9px', color: '#6a4a8a', marginLeft: '4px' }, children: "Material" })), isScene && (_jsx("span", { style: { fontSize: '9px', color: '#5a8a8a', marginLeft: '4px' }, children: "Scene" }))] }, entry.path));
245
+ })] }), contextMenu && (_jsxs("div", { style: { ...contextMenuStyle, left: contextMenu.x, top: contextMenu.y }, children: [scriptSet.has(contextMenu.entry.path) && editorState.selected && onAttachScript && (_jsxs("div", { style: contextItemStyle, onMouseEnter: (e) => { e.currentTarget.style.background = '#3a5a8a'; }, onMouseLeave: (e) => { e.currentTarget.style.background = 'transparent'; }, onClick: () => handleAttach(contextMenu.entry), children: ["Add to ", editorState.selected.name] })), MODEL_EXTENSIONS.has(contextMenu.entry.extension.toLowerCase()) && onLoadModel && (_jsx("div", { style: contextItemStyle, onMouseEnter: (e) => { e.currentTarget.style.background = '#3a5a8a'; }, onMouseLeave: (e) => { e.currentTarget.style.background = 'transparent'; }, onClick: () => onLoadModel(contextMenu.entry), children: "Add to Scene" })), _jsx("div", { style: { ...contextItemStyle, color: '#666' }, children: contextMenu.entry.path })] }))] }));
246
+ }
247
+ //# sourceMappingURL=asset-browser-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-browser-panel.js","sourceRoot":"","sources":["../../src/components/asset-browser-panel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface MenuItem {
2
+ label: string;
3
+ action: () => void;
4
+ disabled?: boolean;
5
+ }
6
+ interface ContextMenuProps {
7
+ x: number;
8
+ y: number;
9
+ items: MenuItem[];
10
+ onClose: () => void;
11
+ }
12
+ export declare function ContextMenu({ x, y, items, onClose }: ContextMenuProps): import("react/jsx-runtime").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=context-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-menu.d.ts","sourceRoot":"","sources":["../../src/components/context-menu.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,gBAAgB;IACxB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AA2BD,wBAAgB,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,gBAAgB,2CAqCrE"}
@@ -0,0 +1,48 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useEffect, useRef } from 'react';
3
+ const menuStyle = {
4
+ position: 'fixed',
5
+ background: '#252525',
6
+ border: '1px solid #3a3a3a',
7
+ borderRadius: '5px',
8
+ padding: '4px 0',
9
+ minWidth: '160px',
10
+ zIndex: 1000,
11
+ boxShadow: '0 6px 16px rgba(0,0,0,0.6)',
12
+ };
13
+ const itemStyle = {
14
+ padding: '5px 14px',
15
+ fontSize: '11px',
16
+ cursor: 'pointer',
17
+ color: '#b8b8b8',
18
+ userSelect: 'none',
19
+ };
20
+ const disabledItemStyle = {
21
+ ...itemStyle,
22
+ color: '#555',
23
+ cursor: 'default',
24
+ };
25
+ export function ContextMenu({ x, y, items, onClose }) {
26
+ const ref = useRef(null);
27
+ useEffect(() => {
28
+ const handleClickOutside = (e) => {
29
+ if (ref.current && !ref.current.contains(e.target)) {
30
+ onClose();
31
+ }
32
+ };
33
+ document.addEventListener('mousedown', handleClickOutside);
34
+ return () => document.removeEventListener('mousedown', handleClickOutside);
35
+ }, [onClose]);
36
+ return (_jsx("div", { ref: ref, style: { ...menuStyle, left: x, top: y }, children: items.map((item, i) => (_jsx("div", { style: item.disabled ? disabledItemStyle : itemStyle, onMouseEnter: (e) => {
37
+ if (!item.disabled)
38
+ e.currentTarget.style.background = '#3a5a8a';
39
+ }, onMouseLeave: (e) => {
40
+ e.currentTarget.style.background = 'transparent';
41
+ }, onClick: () => {
42
+ if (!item.disabled) {
43
+ item.action();
44
+ onClose();
45
+ }
46
+ }, children: item.label }, i))) }));
47
+ }
48
+ //# sourceMappingURL=context-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-menu.js","sourceRoot":"","sources":["../../src/components/context-menu.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAejD,MAAM,SAAS,GAAwB;IACrC,QAAQ,EAAE,OAAO;IACjB,UAAU,EAAE,SAAS;IACrB,MAAM,EAAE,mBAAmB;IAC3B,YAAY,EAAE,KAAK;IACnB,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,OAAO;IACjB,MAAM,EAAE,IAAI;IACZ,SAAS,EAAE,4BAA4B;CACxC,CAAC;AAEF,MAAM,SAAS,GAAwB;IACrC,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,SAAS;IAChB,UAAU,EAAE,MAAM;CACnB,CAAC;AAEF,MAAM,iBAAiB,GAAwB;IAC7C,GAAG,SAAS;IACZ,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAoB;IACpE,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAEzC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,kBAAkB,GAAG,CAAC,CAAa,EAAE,EAAE;YAC3C,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAc,CAAC,EAAE,CAAC;gBAC3D,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC;QACF,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAC3D,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;IAC7E,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,CACL,cAAK,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,YACpD,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,cAEE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,EACpD,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;gBAClB,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAG,CAAC,CAAC,aAA6B,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;YACpF,CAAC,EACD,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;gBACjB,CAAC,CAAC,aAA6B,CAAC,KAAK,CAAC,UAAU,GAAG,aAAa,CAAC;YACpE,CAAC,EACD,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACnB,IAAI,CAAC,MAAM,EAAE,CAAC;oBACd,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC,YAEA,IAAI,CAAC,KAAK,IAfN,CAAC,CAgBF,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}