@operato/property-panel 10.0.0-beta.6 → 10.0.0-beta.61

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 (68) hide show
  1. package/CHANGELOG.md +404 -0
  2. package/dist/src/graphql/data-subscription.js +5 -1
  3. package/dist/src/graphql/data-subscription.js.map +1 -1
  4. package/dist/src/index.d.ts +4 -0
  5. package/dist/src/index.js +6 -0
  6. package/dist/src/index.js.map +1 -1
  7. package/dist/src/ox-property-panel.d.ts +7 -0
  8. package/dist/src/ox-property-panel.js +62 -34
  9. package/dist/src/ox-property-panel.js.map +1 -1
  10. package/dist/src/property-panel/abstract-property.js +11 -2
  11. package/dist/src/property-panel/abstract-property.js.map +1 -1
  12. package/dist/src/property-panel/data-binding/data-binding-mapper.js +11 -3
  13. package/dist/src/property-panel/data-binding/data-binding-mapper.js.map +1 -1
  14. package/dist/src/property-panel/data-binding/data-binding-popup.d.ts +63 -0
  15. package/dist/src/property-panel/data-binding/data-binding-popup.js +1414 -0
  16. package/dist/src/property-panel/data-binding/data-binding-popup.js.map +1 -0
  17. package/dist/src/property-panel/data-binding/data-binding.d.ts +1 -0
  18. package/dist/src/property-panel/data-binding/data-binding.js +37 -5
  19. package/dist/src/property-panel/data-binding/data-binding.js.map +1 -1
  20. package/dist/src/property-panel/effects/effects.js +1 -1
  21. package/dist/src/property-panel/effects/effects.js.map +1 -1
  22. package/dist/src/property-panel/effects/property-event-tap.js +21 -1
  23. package/dist/src/property-panel/effects/property-event-tap.js.map +1 -1
  24. package/dist/src/property-panel/effects/property-event.d.ts +15 -7
  25. package/dist/src/property-panel/effects/property-event.js +17 -38
  26. package/dist/src/property-panel/effects/property-event.js.map +1 -1
  27. package/dist/src/property-panel/effects/property-shadow.js +14 -5
  28. package/dist/src/property-panel/effects/property-shadow.js.map +1 -1
  29. package/dist/src/property-panel/event-handlers/event-handlers-help.d.ts +23 -0
  30. package/dist/src/property-panel/event-handlers/event-handlers-help.js +356 -0
  31. package/dist/src/property-panel/event-handlers/event-handlers-help.js.map +1 -0
  32. package/dist/src/property-panel/event-handlers/event-handlers-mapper.d.ts +31 -0
  33. package/dist/src/property-panel/event-handlers/event-handlers-mapper.js +238 -0
  34. package/dist/src/property-panel/event-handlers/event-handlers-mapper.js.map +1 -0
  35. package/dist/src/property-panel/event-handlers/event-handlers-popup.d.ts +42 -0
  36. package/dist/src/property-panel/event-handlers/event-handlers-popup.js +375 -0
  37. package/dist/src/property-panel/event-handlers/event-handlers-popup.js.map +1 -0
  38. package/dist/src/property-panel/event-handlers/event-handlers.d.ts +54 -0
  39. package/dist/src/property-panel/event-handlers/event-handlers.js +410 -0
  40. package/dist/src/property-panel/event-handlers/event-handlers.js.map +1 -0
  41. package/dist/src/property-panel/shapes/ox-placeholder-convert-editor.d.ts +20 -0
  42. package/dist/src/property-panel/shapes/ox-placeholder-convert-editor.js +125 -0
  43. package/dist/src/property-panel/shapes/ox-placeholder-convert-editor.js.map +1 -0
  44. package/dist/src/property-panel/shapes/placeholder-convert.d.ts +34 -0
  45. package/dist/src/property-panel/shapes/placeholder-convert.js +117 -0
  46. package/dist/src/property-panel/shapes/placeholder-convert.js.map +1 -0
  47. package/dist/src/property-panel/shapes/shapes.js +28 -10
  48. package/dist/src/property-panel/shapes/shapes.js.map +1 -1
  49. package/dist/src/property-panel/specifics/specifics.d.ts +1 -0
  50. package/dist/src/property-panel/specifics/specifics.js +2 -1
  51. package/dist/src/property-panel/specifics/specifics.js.map +1 -1
  52. package/dist/src/property-panel/styles/styles.js +2 -0
  53. package/dist/src/property-panel/styles/styles.js.map +1 -1
  54. package/dist/src/property-panel/threed/property-material3d.js +8 -1
  55. package/dist/src/property-panel/threed/property-material3d.js.map +1 -1
  56. package/dist/src/property-panel/threed/property-scene3d.d.ts +34 -6
  57. package/dist/src/property-panel/threed/property-scene3d.js +332 -201
  58. package/dist/src/property-panel/threed/property-scene3d.js.map +1 -1
  59. package/dist/src/property-panel/threed/threed.js +8 -0
  60. package/dist/src/property-panel/threed/threed.js.map +1 -1
  61. package/dist/tsconfig.tsbuildinfo +1 -1
  62. package/package.json +8 -7
  63. package/themes/grist-theme.css +1 -1
  64. package/translations/en.json +34 -1
  65. package/translations/ja.json +34 -1
  66. package/translations/ko.json +34 -1
  67. package/translations/ms.json +34 -1
  68. package/translations/zh.json +34 -1
package/CHANGELOG.md CHANGED
@@ -3,6 +3,410 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [10.0.0-beta.61](https://github.com/hatiolab/operato/compare/v10.0.0-beta.60...v10.0.0-beta.61) (2026-06-25)
7
+
8
+
9
+ ### :rocket: New Features
10
+
11
+ * **data-subscription:** query+record publish ts for data-lag monitoring ([d3e5bf9](https://github.com/hatiolab/operato/commit/d3e5bf9b1689f72049fc8333762cd5045f5d90ce))
12
+
13
+
14
+
15
+ ## [10.0.0-beta.60](https://github.com/hatiolab/operato/compare/v10.0.0-beta.59...v10.0.0-beta.60) (2026-06-08)
16
+
17
+ **Note:** Version bump only for package @operato/property-panel
18
+
19
+
20
+
21
+
22
+
23
+ ## [10.0.0-beta.59](https://github.com/hatiolab/operato/compare/v10.0.0-beta.58...v10.0.0-beta.59) (2026-06-03)
24
+
25
+
26
+ ### :bug: Bug Fix
27
+
28
+ * **property-panel/event-handlers:** popup 폭 / 높이 레이아웃 회귀 정리 ([799a2f2](https://github.com/hatiolab/operato/commit/799a2f2b5713fc6d56748f5ef8887e55c0eab8ab))
29
+
30
+
31
+ ### :rocket: New Features
32
+
33
+ * **property-panel/event-handlers:** help pane + UX 개선 + (none) 핸들러 제외 ([8c23f62](https://github.com/hatiolab/operato/commit/8c23f62008aea1dcbf4b305cce432eeda7807dd5))
34
+
35
+
36
+ ### :sparkles: Styling
37
+
38
+ * **property-panel/event-handlers:** popup + help pane 에 표준 ScrollbarStyles 적용 ([e11f4a6](https://github.com/hatiolab/operato/commit/e11f4a64a1a223498f02b9f02cdfedd441cef869))
39
+ * **property-panel/event-handlers:** popup 안 mapper 의 상단 모서리도 둥글림 ([717422c](https://github.com/hatiolab/operato/commit/717422cb96b698ae151293dcdf106c1b52a3f9e1))
40
+
41
+
42
+
43
+ ## [10.0.0-beta.58](https://github.com/hatiolab/operato/compare/v10.0.0-beta.57...v10.0.0-beta.58) (2026-05-28)
44
+
45
+
46
+ ### :rocket: New Features
47
+
48
+ * **property-panel:** event handlers panel — eventHandlers[] 편집기 + popup ([268ed3d](https://github.com/hatiolab/operato/commit/268ed3d2558e9b9eab1ad24810d20dda8cd17b04))
49
+
50
+
51
+
52
+ ## [10.0.0-beta.57](https://github.com/hatiolab/operato/compare/v10.0.0-beta.56...v10.0.0-beta.57) (2026-05-27)
53
+
54
+ **Note:** Version bump only for package @operato/property-panel
55
+
56
+
57
+
58
+
59
+
60
+ ## [10.0.0-beta.56](https://github.com/hatiolab/operato/compare/v10.0.0-beta.55...v10.0.0-beta.56) (2026-05-27)
61
+
62
+ **Note:** Version bump only for package @operato/property-panel
63
+
64
+
65
+
66
+
67
+
68
+ ## [10.0.0-beta.55](https://github.com/hatiolab/operato/compare/v10.0.0-beta.54...v10.0.0-beta.55) (2026-05-27)
69
+
70
+ **Note:** Version bump only for package @operato/property-panel
71
+
72
+
73
+
74
+
75
+
76
+ ## [10.0.0-beta.54](https://github.com/hatiolab/operato/compare/v10.0.0-beta.53...v10.0.0-beta.54) (2026-05-27)
77
+
78
+ **Note:** Version bump only for package @operato/property-panel
79
+
80
+
81
+
82
+
83
+
84
+ ## [10.0.0-beta.53](https://github.com/hatiolab/operato/compare/v10.0.0-beta.52...v10.0.0-beta.53) (2026-05-24)
85
+
86
+ **Note:** Version bump only for package @operato/property-panel
87
+
88
+
89
+
90
+
91
+
92
+ ## [10.0.0-beta.52](https://github.com/hatiolab/operato/compare/v10.0.0-beta.51...v10.0.0-beta.52) (2026-05-22)
93
+
94
+
95
+ ### :sparkles: Styling
96
+
97
+ * **data-grist:** record-card 시각 정돈 + danger hover 가독성 ([60cf583](https://github.com/hatiolab/operato/commit/60cf583d3096286f074d1b412e3737bc9b283258))
98
+
99
+
100
+
101
+ ## [10.0.0-beta.50](https://github.com/hatiolab/operato/compare/v10.0.0-beta.49...v10.0.0-beta.50) (2026-05-12)
102
+
103
+
104
+ ### :bug: Bug Fix
105
+
106
+ * **property-panel:** shapes 가드 보강 — selected[0] non-Component 방어 ([77f54e4](https://github.com/hatiolab/operato/commit/77f54e4aaf4a45cf1c44ae39db30dc29f499c07a))
107
+
108
+
109
+ ### :mega: Other
110
+
111
+ * **property-panel:** label.see-through 5 언어 다국어 추가 ([1c0106e](https://github.com/hatiolab/operato/commit/1c0106e451e3d4469e5a3705a4b07b382b8175c4))
112
+
113
+
114
+
115
+ ## [10.0.0-beta.49](https://github.com/hatiolab/operato/compare/v10.0.0-beta.48...v10.0.0-beta.49) (2026-05-07)
116
+
117
+ **Note:** Version bump only for package @operato/property-panel
118
+
119
+
120
+
121
+
122
+
123
+ ## [10.0.0-beta.48](https://github.com/hatiolab/operato/compare/v10.0.0-beta.47...v10.0.0-beta.48) (2026-05-05)
124
+
125
+
126
+ ### :rocket: New Features
127
+
128
+ * **property-panel:** generic-object 타입 변환 UI를 specifics 탭 전용 에디터로 이동 ([4b90f57](https://github.com/hatiolab/operato/commit/4b90f574c29f1677eb0dacc73b05e9fd10c9d2b2))
129
+
130
+
131
+ ### :house: Code Refactoring
132
+
133
+ * **property-panel:** placeholder-convert 아키텍처 정리 ([ec7c805](https://github.com/hatiolab/operato/commit/ec7c80550148fe2a13704999aafb940b26558729))
134
+
135
+
136
+
137
+ ## [10.0.0-beta.47](https://github.com/hatiolab/operato/compare/v10.0.0-beta.46...v10.0.0-beta.47) (2026-05-03)
138
+
139
+
140
+ ### :rocket: New Features
141
+
142
+ * **i18n:** popup-container + tooltip-3d component names + new property labels ([2e15e2b](https://github.com/hatiolab/operato/commit/2e15e2baad9d8f09a651f6f253015f8d7a8e5e32))
143
+ * **modeller:** popup-container palette + inline-popup tap actions ([737b081](https://github.com/hatiolab/operato/commit/737b0819c287d7703f404db266e79b12281070d3))
144
+ * **property-panel:** popup position option + inline-popup target list ([19778c5](https://github.com/hatiolab/operato/commit/19778c515ca38678bfd88b895639f1aa95032682))
145
+
146
+
147
+
148
+ ## [10.0.0-beta.46](https://github.com/hatiolab/operato/compare/v10.0.0-beta.45...v10.0.0-beta.46) (2026-05-01)
149
+
150
+ **Note:** Version bump only for package @operato/property-panel
151
+
152
+
153
+
154
+
155
+
156
+ ## [10.0.0-beta.45](https://github.com/hatiolab/operato/compare/v10.0.0-beta.44...v10.0.0-beta.45) (2026-04-30)
157
+
158
+
159
+ ### :rocket: New Features
160
+
161
+ * **board,property-panel:** logistics group split + NaN-safe number inputs ([aa3aa37](https://github.com/hatiolab/operato/commit/aa3aa376802d2296ee9a8315b4490b8a2a34b223))
162
+ * **board,property-panel:** manufacturing group + dynamic nature refresh ([a82cab7](https://github.com/hatiolab/operato/commit/a82cab79dded6b5996c554dfbcaf6f578f303861))
163
+
164
+
165
+
166
+ ## [10.0.0-beta.44](https://github.com/hatiolab/operato/compare/v10.0.0-beta.43...v10.0.0-beta.44) (2026-04-28)
167
+
168
+
169
+ ### :house: Code Refactoring
170
+
171
+ * **shadow:** property panel 에디터를 신규 키 (offsetX/offsetY/blur) 로 현행화 ([aee4dbe](https://github.com/hatiolab/operato/commit/aee4dbef842606bc31b6ad3f2161ffa22c2d3221))
172
+
173
+
174
+
175
+ ## [10.0.0-beta.43](https://github.com/hatiolab/operato/compare/v10.0.0-beta.42...v10.0.0-beta.43) (2026-04-24)
176
+
177
+ **Note:** Version bump only for package @operato/property-panel
178
+
179
+
180
+
181
+
182
+
183
+ ## [10.0.0-beta.42](https://github.com/hatiolab/operato/compare/v10.0.0-beta.41...v10.0.0-beta.42) (2026-04-18)
184
+
185
+ **Note:** Version bump only for package @operato/property-panel
186
+
187
+
188
+
189
+
190
+
191
+ ## [10.0.0-beta.41](https://github.com/hatiolab/operato/compare/v10.0.0-beta.40...v10.0.0-beta.41) (2026-04-18)
192
+
193
+
194
+ ### :rocket: New Features
195
+
196
+ * **property-panel:** environment + light mood 2-tier 프리셋 구조로 재설계 ([226bbab](https://github.com/hatiolab/operato/commit/226bbabbe8f198936d88e7d7c01b6365f910a71d))
197
+
198
+
199
+
200
+ ## [10.0.0-beta.40](https://github.com/hatiolab/operato/compare/v10.0.0-beta.39...v10.0.0-beta.40) (2026-04-18)
201
+
202
+
203
+ ### :rocket: New Features
204
+
205
+ * **property-panel:** scene 3d에 camera 섹션 + renderer exposure 슬라이더 추가 ([cc3ff97](https://github.com/hatiolab/operato/commit/cc3ff9738ff0dfc22a6bd563ec29c24e302873df))
206
+
207
+
208
+
209
+ ## [10.0.0-beta.39](https://github.com/hatiolab/operato/compare/v10.0.0-beta.38...v10.0.0-beta.39) (2026-04-18)
210
+
211
+
212
+ ### :rocket: New Features
213
+
214
+ * **property-panel:** hemisphere 색상 편집 + key light 방향/그림자 컨트롤 ([d0cc346](https://github.com/hatiolab/operato/commit/d0cc34651460e0b0d8aa290f0897c75aa7fb3fc7))
215
+ * **property-panel:** lighting preset UI 개선 — 값 범위 확장 + 버튼→select 전환 ([b866db9](https://github.com/hatiolab/operato/commit/b866db9a2871573095b415d0ead63401ae336c89)), closes [#ffaa55](https://github.com/hatiolab/operato/issues/ffaa55) [#88](https://github.com/hatiolab/operato/issues/88)
216
+
217
+
218
+ ### :house: Code Refactoring
219
+
220
+ * **property-panel:** scene3d 탭에서 bookmarks 섹션 제거 ([50d12de](https://github.com/hatiolab/operato/commit/50d12de7bc20a192503907db05a8506951931206))
221
+
222
+
223
+
224
+ ## [10.0.0-beta.38](https://github.com/hatiolab/operato/compare/v10.0.0-beta.37...v10.0.0-beta.38) (2026-04-17)
225
+
226
+
227
+ ### :rocket: New Features
228
+
229
+ * **property-panel:** scene3d 탭에 placement 모드 선택 추가 ([5f55786](https://github.com/hatiolab/operato/commit/5f55786500fc07e478b6d94a3518fb21598d7c59))
230
+
231
+
232
+
233
+ ## [10.0.0-beta.36](https://github.com/hatiolab/operato/compare/v10.0.0-beta.35...v10.0.0-beta.36) (2026-04-17)
234
+
235
+ **Note:** Version bump only for package @operato/property-panel
236
+
237
+
238
+
239
+
240
+
241
+ ## [10.0.0-beta.34](https://github.com/hatiolab/operato/compare/v10.0.0-beta.33...v10.0.0-beta.34) (2026-04-16)
242
+
243
+ **Note:** Version bump only for package @operato/property-panel
244
+
245
+
246
+
247
+
248
+
249
+ ## [10.0.0-beta.33](https://github.com/hatiolab/operato/compare/v10.0.0-beta.32...v10.0.0-beta.33) (2026-04-16)
250
+
251
+ **Note:** Version bump only for package @operato/property-panel
252
+
253
+
254
+
255
+
256
+
257
+ ## [10.0.0-beta.32](https://github.com/hatiolab/operato/compare/v10.0.0-beta.31...v10.0.0-beta.32) (2026-04-15)
258
+
259
+
260
+ ### :bug: Bug Fix
261
+
262
+ * **property-panel:** data-binding-popup의 Flow 탭이 "No scene"으로 빠지는 문제 수정 ([ac0bc78](https://github.com/hatiolab/operato/commit/ac0bc78e27a105657809157d3964b52857484c38))
263
+
264
+
265
+
266
+ ## [10.0.0-beta.31](https://github.com/hatiolab/operato/compare/v10.0.0-beta.30...v10.0.0-beta.31) (2026-04-15)
267
+
268
+ **Note:** Version bump only for package @operato/property-panel
269
+
270
+
271
+
272
+
273
+
274
+ ## [10.0.0-beta.30](https://github.com/hatiolab/operato/compare/v10.0.0-beta.29...v10.0.0-beta.30) (2026-04-14)
275
+
276
+ **Note:** Version bump only for package @operato/property-panel
277
+
278
+
279
+
280
+
281
+
282
+ ## [10.0.0-beta.29](https://github.com/hatiolab/operato/compare/v10.0.0-beta.28...v10.0.0-beta.29) (2026-04-13)
283
+
284
+ **Note:** Version bump only for package @operato/property-panel
285
+
286
+
287
+
288
+
289
+
290
+ ## [10.0.0-beta.26](https://github.com/hatiolab/operato/compare/v10.0.0-beta.25...v10.0.0-beta.26) (2026-04-09)
291
+
292
+ **Note:** Version bump only for package @operato/property-panel
293
+
294
+
295
+
296
+
297
+
298
+ ## [10.0.0-beta.25](https://github.com/hatiolab/operato/compare/v10.0.0-beta.24...v10.0.0-beta.25) (2026-04-08)
299
+
300
+
301
+ ### :bug: Bug Fix
302
+
303
+ * **property-panel:** group selection shows specific tab empty instead of full block ([cfe4a11](https://github.com/hatiolab/operato/commit/cfe4a11647928a301a3d19c80257887272ad619e))
304
+
305
+
306
+
307
+ ## [10.0.0-beta.24](https://github.com/hatiolab/operato/compare/v10.0.0-beta.23...v10.0.0-beta.24) (2026-04-06)
308
+
309
+ **Note:** Version bump only for package @operato/property-panel
310
+
311
+
312
+
313
+
314
+
315
+ ## [10.0.0-beta.23](https://github.com/hatiolab/operato/compare/v10.0.0-beta.22...v10.0.0-beta.23) (2026-04-06)
316
+
317
+
318
+ ### :bug: Bug Fix
319
+
320
+ * **property-panel:** 3D 모드 라벨 변경 — Enable 3D → Start in 3D ([044f29d](https://github.com/hatiolab/operato/commit/044f29de76e30e9457cd575bc5a8b567b4ba535a))
321
+ * **property-panel:** 3D 탭을 컴포넌트 전환 시에도 유지 ([002b30c](https://github.com/hatiolab/operato/commit/002b30c6768ff059707dc9c0236ea0852d66349f))
322
+ * **property-panel:** floor constraint label to keep above ground ([239d9c9](https://github.com/hatiolab/operato/commit/239d9c980a586bdc70bd0a2cee423074a30e2109))
323
+
324
+
325
+ ### :rocket: New Features
326
+
327
+ * **property-panel:** 3D mode labels i18n + keep above ground label fix ([57bbefc](https://github.com/hatiolab/operato/commit/57bbefc6dfe0b08ed10b23abc76735594c967404))
328
+
329
+
330
+
331
+ ## [10.0.0-beta.22](https://github.com/hatiolab/operato/compare/v10.0.0-beta.21...v10.0.0-beta.22) (2026-04-02)
332
+
333
+
334
+ ### :rocket: New Features
335
+
336
+ * **property-panel:** 3D 컴포넌트 다국어 추가 (en/ko/ja/zh/ms) ([f1e68f2](https://github.com/hatiolab/operato/commit/f1e68f25d555528ca7aebf1e31a0b8f740a94552))
337
+
338
+
339
+
340
+ ## [10.0.0-beta.21](https://github.com/hatiolab/operato/compare/v10.0.0-beta.20...v10.0.0-beta.21) (2026-04-02)
341
+
342
+ **Note:** Version bump only for package @operato/property-panel
343
+
344
+
345
+
346
+
347
+
348
+ ## [10.0.0-beta.18](https://github.com/hatiolab/operato/compare/v10.0.0-beta.17...v10.0.0-beta.18) (2026-03-25)
349
+
350
+
351
+ ### :rocket: New Features
352
+
353
+ * **property-panel:** cameraFloorConstraint UI 추가 ([8bb94e5](https://github.com/hatiolab/operato/commit/8bb94e59f8e356a9deb755a82e91939fcf2df7e6))
354
+
355
+
356
+
357
+ ## [10.0.0-beta.15](https://github.com/hatiolab/operato/compare/v10.0.0-beta.14...v10.0.0-beta.15) (2026-03-22)
358
+
359
+
360
+ ### :house: Code Refactoring
361
+
362
+ * **property-panel:** 3D 설정에서 bookmark 섹션 제거 ([14bbf5c](https://github.com/hatiolab/operato/commit/14bbf5c063f5afd5f77f15fc573e78f4da440ef5))
363
+
364
+
365
+ ### :rocket: New Features
366
+
367
+ * **board:** 데이터바인딩 팝업 에디터 + property 콤보박스 + D키 핫키 ([d467180](https://github.com/hatiolab/operato/commit/d467180e106b1d268099bf9895082e2c6cf8d07b))
368
+ * **property-panel:** 데이터바인딩 팝업 Flow 탭 + UI 개선 ([d52fadc](https://github.com/hatiolab/operato/commit/d52fadc24dd9ba4a658cbd5ac2edd8c53460f3fe))
369
+
370
+
371
+ ### :bug: Bug Fix
372
+
373
+ * **board:** 데이터바인딩 팝업 모델 반영 + GLTF animations 트리 + 사이드바 저장 조건 완화 ([46fe68e](https://github.com/hatiolab/operato/commit/46fe68ea8c3af43c5c4275a42cd7bb5e761ec118))
374
+ * **property-panel:** 데이터바인딩 팝업 GLTF Mesh 필터링 + fillStyleTargets 저장 조건 ([09afea6](https://github.com/hatiolab/operato/commit/09afea65d1cdf86d04e2e1606ba6e1b2063a4739))
375
+
376
+
377
+
378
+ ## [10.0.0-beta.12](https://github.com/hatiolab/operato/compare/v10.0.0-beta.11...v10.0.0-beta.12) (2026-03-17)
379
+
380
+
381
+ ### :rocket: New Features
382
+
383
+ * **property-panel:** 3D 탭에 Screen Fixed (HUD) 체크박스 추가 ([9f53d88](https://github.com/hatiolab/operato/commit/9f53d88e4690e9c07dba622e9d4d00d2dcc2afbb))
384
+
385
+
386
+ ### :bug: Bug Fix
387
+
388
+ * **property-panel:** screenFixed 체크박스 형태 통일 ([f1da9ce](https://github.com/hatiolab/operato/commit/f1da9ce748949e670b0a02560e012974b74adc27))
389
+
390
+
391
+
392
+ ## [10.0.0-beta.10](https://github.com/hatiolab/operato/compare/v10.0.0-beta.9...v10.0.0-beta.10) (2026-03-14)
393
+
394
+
395
+ ### :bug: Bug Fix
396
+
397
+ * **property-panel:** 다중 타입 선택 시 Component.Undefined 대신 적절한 레이블 표시 ([7bad969](https://github.com/hatiolab/operato/commit/7bad96938ee220b72fd5c68d84ec8d55d7d85cf9))
398
+
399
+
400
+
401
+ ## [10.0.0-beta.7](https://github.com/hatiolab/operato/compare/v10.0.0-beta.6...v10.0.0-beta.7) (2026-03-09)
402
+
403
+
404
+ ### :rocket: New Features
405
+
406
+ * **property-panel:** add cross arrow tip type to line style selector ([b70d3d7](https://github.com/hatiolab/operato/commit/b70d3d7efaa2fec705e5696ba98a8b5c3ea464dc))
407
+
408
+
409
+
6
410
  ## [10.0.0-beta.6](https://github.com/hatiolab/operato/compare/v10.0.0-beta.5...v10.0.0-beta.6) (2026-03-09)
7
411
 
8
412
 
@@ -8,13 +8,17 @@ export class DataSubscriptionProviderImpl {
8
8
  data(tag: "${tag}") {
9
9
  tag
10
10
  data
11
+ ts
11
12
  }
12
13
  }
13
14
  `
14
15
  }, {
15
16
  next: async ({ data }) => {
17
+ var _a, _b, _c;
16
18
  if (data) {
17
- component.data = data.data.data;
19
+ const payload = data.data;
20
+ (_c = (_b = (_a = component.app) === null || _a === void 0 ? void 0 : _a.lagTracker) === null || _b === void 0 ? void 0 : _b.record) === null || _c === void 0 ? void 0 : _c.call(_b, payload.tag, payload.ts);
21
+ component.data = payload.data;
18
22
  }
19
23
  }
20
24
  });
@@ -1 +1 @@
1
- {"version":3,"file":"data-subscription.js","sourceRoot":"","sources":["../../../src/graphql/data-subscription.ts"],"names":[],"mappings":"AAEA,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,MAAM,OAAO,4BAA4B;IACvC,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,SAAoB;QAC/C,OAAO,MAAM,SAAS,CACpB;YACE,KAAK,EAAE,GAAG,CAAA;;iCAEe,GAAG;;;;;iBAKnB;SACV,EACD;YACE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAiB,EAAE,EAAE;gBACtC,IAAI,IAAI,EAAE,CAAC;oBACT,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;gBACjC,CAAC;YACH,CAAC;SACF,CACF,CAAA;IACH,CAAC;IAED,OAAO,KAAI,CAAC;CACb","sourcesContent":["import { Component, DataSubscriptionProvider } from '@hatiolab/things-scene'\n\nimport gql from 'graphql-tag'\nimport { subscribe } from '@operato/graphql'\n\nexport class DataSubscriptionProviderImpl implements DataSubscriptionProvider {\n async subscribe(tag: string, component: Component) {\n return await subscribe(\n {\n query: gql`\n subscription {\n data(tag: \"${tag}\") {\n tag\n data\n }\n }\n `\n },\n {\n next: async ({ data }: { data: any }) => {\n if (data) {\n component.data = data.data.data\n }\n }\n }\n )\n }\n\n dispose() {}\n}\n"]}
1
+ {"version":3,"file":"data-subscription.js","sourceRoot":"","sources":["../../../src/graphql/data-subscription.ts"],"names":[],"mappings":"AAEA,OAAO,GAAG,MAAM,aAAa,CAAA;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,MAAM,OAAO,4BAA4B;IACvC,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,SAAoB;QAC/C,OAAO,MAAM,SAAS,CACpB;YACE,KAAK,EAAE,GAAG,CAAA;;iCAEe,GAAG;;;;;;iBAMnB;SACV,EACD;YACE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAiB,EAAE,EAAE;;gBACtC,IAAI,IAAI,EAAE,CAAC;oBACT,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CACxB;oBAAA,MAAA,MAAA,MAAC,SAAiB,CAAC,GAAG,0CAAE,UAAU,0CAAE,MAAM,mDAAG,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;oBACtE,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;gBAC/B,CAAC;YACH,CAAC;SACF,CACF,CAAA;IACH,CAAC;IAED,OAAO,KAAI,CAAC;CACb","sourcesContent":["import { Component, DataSubscriptionProvider } from '@hatiolab/things-scene'\n\nimport gql from 'graphql-tag'\nimport { subscribe } from '@operato/graphql'\n\nexport class DataSubscriptionProviderImpl implements DataSubscriptionProvider {\n async subscribe(tag: string, component: Component) {\n return await subscribe(\n {\n query: gql`\n subscription {\n data(tag: \"${tag}\") {\n tag\n data\n ts\n }\n }\n `\n },\n {\n next: async ({ data }: { data: any }) => {\n if (data) {\n const payload = data.data\n ;(component as any).app?.lagTracker?.record?.(payload.tag, payload.ts)\n component.data = payload.data\n }\n }\n }\n )\n }\n\n dispose() {}\n}\n"]}
@@ -1,5 +1,9 @@
1
1
  export { OxPropertyPanel } from './ox-property-panel.js';
2
2
  export * from './property-panel/data-binding/data-binding.js';
3
+ export * from './property-panel/event-handlers/event-handlers-mapper.js';
4
+ export * from './property-panel/event-handlers/event-handlers.js';
5
+ export * from './property-panel/event-handlers/event-handlers-popup.js';
6
+ export * from './property-panel/event-handlers/event-handlers-help.js';
3
7
  export * from './property-panel/effects/effects.js';
4
8
  export * from './property-panel/inspector/inspector.js';
5
9
  export * from './property-panel/shapes/shapes.js';
package/dist/src/index.js CHANGED
@@ -1,5 +1,11 @@
1
1
  export { OxPropertyPanel } from './ox-property-panel.js';
2
2
  export * from './property-panel/data-binding/data-binding.js';
3
+ // Event handlers — inline panel + popup (data-binding 패턴 동일). effects tab
4
+ // 의 PropertyEvent fieldset 에서 inline 으로 host. open_in_new 클릭 시 popup.
5
+ export * from './property-panel/event-handlers/event-handlers-mapper.js';
6
+ export * from './property-panel/event-handlers/event-handlers.js';
7
+ export * from './property-panel/event-handlers/event-handlers-popup.js';
8
+ export * from './property-panel/event-handlers/event-handlers-help.js';
3
9
  export * from './property-panel/effects/effects.js';
4
10
  export * from './property-panel/inspector/inspector.js';
5
11
  export * from './property-panel/shapes/shapes.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,cAAc,+CAA+C,CAAA;AAC7D,cAAc,qCAAqC,CAAA;AACnD,cAAc,yCAAyC,CAAA;AACvD,cAAc,mCAAmC,CAAA;AACjD,cAAc,yCAAyC,CAAA;AACvD,cAAc,mCAAmC,CAAA;AACjD,cAAc,mCAAmC,CAAA","sourcesContent":["export { OxPropertyPanel } from './ox-property-panel.js'\n\nexport * from './property-panel/data-binding/data-binding.js'\nexport * from './property-panel/effects/effects.js'\nexport * from './property-panel/inspector/inspector.js'\nexport * from './property-panel/shapes/shapes.js'\nexport * from './property-panel/specifics/specifics.js'\nexport * from './property-panel/styles/styles.js'\nexport * from './property-panel/threed/threed.js'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,cAAc,+CAA+C,CAAA;AAC7D,0EAA0E;AAC1E,sEAAsE;AACtE,cAAc,0DAA0D,CAAA;AACxE,cAAc,mDAAmD,CAAA;AACjE,cAAc,yDAAyD,CAAA;AACvE,cAAc,wDAAwD,CAAA;AACtE,cAAc,qCAAqC,CAAA;AACnD,cAAc,yCAAyC,CAAA;AACvD,cAAc,mCAAmC,CAAA;AACjD,cAAc,yCAAyC,CAAA;AACvD,cAAc,mCAAmC,CAAA;AACjD,cAAc,mCAAmC,CAAA","sourcesContent":["export { OxPropertyPanel } from './ox-property-panel.js'\n\nexport * from './property-panel/data-binding/data-binding.js'\n// Event handlers — inline panel + popup (data-binding 패턴 동일). effects tab\n// 의 PropertyEvent fieldset 에서 inline 으로 host. open_in_new 클릭 시 popup.\nexport * from './property-panel/event-handlers/event-handlers-mapper.js'\nexport * from './property-panel/event-handlers/event-handlers.js'\nexport * from './property-panel/event-handlers/event-handlers-popup.js'\nexport * from './property-panel/event-handlers/event-handlers-help.js'\nexport * from './property-panel/effects/effects.js'\nexport * from './property-panel/inspector/inspector.js'\nexport * from './property-panel/shapes/shapes.js'\nexport * from './property-panel/specifics/specifics.js'\nexport * from './property-panel/styles/styles.js'\nexport * from './property-panel/threed/threed.js'\n"]}
@@ -37,8 +37,15 @@ export declare class OxPropertyPanel extends OxPropertyPanel_base {
37
37
  'property-data-binding': typeof PropertyDataBinding;
38
38
  'scene-inspector': typeof SceneInspector;
39
39
  };
40
+ private hasGroup;
40
41
  render(): import("lit-html").TemplateResult<1>;
41
42
  private onPropertyChanged;
43
+ /**
44
+ * 새 properties 배열이 현재 specificProps 와 *구조상* 다른지 빠르게 검사.
45
+ * 단순히 length + 각 항목의 name 만 비교 — value 변경은 model 측에서 처리되므로
46
+ * specificProps 의 reference 를 바꿀 필요가 없다.
47
+ */
48
+ private specificPropsChanged;
42
49
  private onBoundsChanged;
43
50
  private onChangedByScene;
44
51
  private setPropertyTargetAsDefault;
@@ -50,6 +50,9 @@ let OxPropertyPanel = class OxPropertyPanel extends ScopedElementsMixin(LitEleme
50
50
  'scene-inspector': SceneInspector
51
51
  };
52
52
  }
53
+ hasGroup(selected) {
54
+ return selected.some(c => { var _a; return ((_a = c === null || c === void 0 ? void 0 : c.model) === null || _a === void 0 ? void 0 : _a.type) === 'group'; });
55
+ }
53
56
  render() {
54
57
  var tabName = this.tabName ? this.tabName : 'shape';
55
58
  return html `
@@ -61,9 +64,7 @@ let OxPropertyPanel = class OxPropertyPanel extends ScopedElementsMixin(LitEleme
61
64
  >
62
65
  <md-icon name="shape" ?selected=${tabName == 'shape'}>format_shapes</md-icon>
63
66
  <md-icon name="style" ?selected=${tabName == 'style'}>palette</md-icon>
64
- ${this.is3dish(this.selected)
65
- ? html `<md-icon name="threed" ?selected=${tabName == 'threed'}>view_in_ar</md-icon>`
66
- : html ``}
67
+ <md-icon name="threed" ?selected=${tabName == 'threed'}>view_in_ar</md-icon>
67
68
  <md-icon name="effect" ?selected=${tabName == 'effect'}>movie_filter</md-icon>
68
69
  <md-icon name="specific" ?selected=${tabName == 'specific'}>tune</md-icon>
69
70
  <md-icon name="data-binding" ?selected=${tabName == 'data-binding'}>share</md-icon>
@@ -92,39 +93,47 @@ let OxPropertyPanel = class OxPropertyPanel extends ScopedElementsMixin(LitEleme
92
93
  >
93
94
  </property-style>
94
95
  `,
95
- threed: this.isRootModel(this.selected)
96
+ threed: !this.is3dish(this.selected)
96
97
  ? html `
97
- <property-scene3d
98
- .value=${this.model}
99
- .scene=${this.scene}
100
- ?active=${tabName == 'threed'}
101
- >
102
- </property-scene3d>
98
+ <div style="display:flex;align-items:center;justify-content:center;height:100%;color:var(--md-sys-color-on-surface-variant,#666);font-size:12px;opacity:0.7;padding:16px;text-align:center;">
99
+ Selected component(s) do not support 3D properties
100
+ </div>
103
101
  `
102
+ : this.isRootModel(this.selected)
103
+ ? html `
104
+ <property-scene3d
105
+ .value=${this.model}
106
+ .scene=${this.scene}
107
+ ?active=${tabName == 'threed'}
108
+ >
109
+ </property-scene3d>
110
+ `
111
+ : html `
112
+ <property-3d
113
+ .value=${this.model}
114
+ .bounds=${this.bounds}
115
+ .selected=${this.selected}
116
+ ?active=${tabName == 'threed'}
117
+ >
118
+ </property-3d>
119
+ `,
120
+ effect: html `
121
+ <property-effect .value=${this.model} .scene=${this.scene} ?active=${tabName == 'effect'}>
122
+ </property-effect>
123
+ `,
124
+ specific: this.hasGroup(this.selected)
125
+ ? html ``
104
126
  : html `
105
- <property-3d
127
+ <property-specific
106
128
  .value=${this.model}
107
- .bounds=${this.bounds}
129
+ .scene=${this.scene}
108
130
  .selected=${this.selected}
109
- ?active=${tabName == 'threed'}
131
+ .props=${this.specificProps}
132
+ .propertyEditor=${this.propertyEditor}
133
+ ?active=${tabName == 'specific'}
110
134
  >
111
- </property-3d>
135
+ </property-specific>
112
136
  `,
113
- effect: html `
114
- <property-effect .value=${this.model} .scene=${this.scene} ?active=${tabName == 'effect'}>
115
- </property-effect>
116
- `,
117
- specific: html `
118
- <property-specific
119
- .value=${this.model}
120
- .scene=${this.scene}
121
- .selected=${this.selected}
122
- .props=${this.specificProps}
123
- .propertyEditor=${this.propertyEditor}
124
- ?active=${tabName == 'specific'}
125
- >
126
- </property-specific>
127
- `,
128
137
  'data-binding': html `
129
138
  <property-data-binding .scene=${this.scene} .value=${this.model} ?active=${tabName == 'data-binding'}>
130
139
  </property-data-binding>
@@ -138,16 +147,40 @@ let OxPropertyPanel = class OxPropertyPanel extends ScopedElementsMixin(LitEleme
138
147
  `;
139
148
  }
140
149
  onPropertyChanged(e) {
150
+ var _a;
141
151
  var detail = e.detail;
142
152
  if (this.propertyTarget) {
143
153
  /* 단일 컴포넌트의 경우에 적용 */
144
154
  this.scene && this.scene.undoableChange(() => this.propertyTarget.set(detail));
155
+ // nature.properties 가 동적인 컴포넌트(예: robot-arm 의 chainPreset
156
+ // 변경 시 joint 개수 변화)를 위해 set 직후 nature 재평가.
157
+ // 정적 nature 컴포넌트는 동일한 배열이 반환되어 비용 미미.
158
+ const nextProps = (_a = this.propertyTarget.nature) === null || _a === void 0 ? void 0 : _a.properties;
159
+ if (nextProps && this.specificPropsChanged(nextProps)) {
160
+ this.specificProps = deepClone(nextProps);
161
+ }
145
162
  }
146
163
  else {
147
164
  /* 여러 컴포넌트의 경우에 적용 */
148
165
  this.scene && this.scene.undoableChange(() => this.selected.forEach(component => component.set(detail)));
149
166
  }
150
167
  }
168
+ /**
169
+ * 새 properties 배열이 현재 specificProps 와 *구조상* 다른지 빠르게 검사.
170
+ * 단순히 length + 각 항목의 name 만 비교 — value 변경은 model 측에서 처리되므로
171
+ * specificProps 의 reference 를 바꿀 필요가 없다.
172
+ */
173
+ specificPropsChanged(next) {
174
+ var _a, _b;
175
+ const cur = this.specificProps;
176
+ if (!cur || cur.length !== next.length)
177
+ return true;
178
+ for (let i = 0; i < next.length; i++) {
179
+ if (((_a = cur[i]) === null || _a === void 0 ? void 0 : _a.name) !== ((_b = next[i]) === null || _b === void 0 ? void 0 : _b.name))
180
+ return true;
181
+ }
182
+ return false;
183
+ }
151
184
  onBoundsChanged(e) {
152
185
  var detail = e.detail;
153
186
  if (!this.scene) {
@@ -204,11 +237,6 @@ let OxPropertyPanel = class OxPropertyPanel extends ScopedElementsMixin(LitEleme
204
237
  }
205
238
  async onSelectedChanged(after) {
206
239
  await this.updateComplete;
207
- // 3D 탭 선택 중 비-3D 컴포넌트로 전환 시 shape 탭으로 복귀
208
- // (model-layer는 항상 3D 탭 표시 가능)
209
- if (this.tabName === 'threed' && !this.is3dish(after)) {
210
- this.tabName = 'shape';
211
- }
212
240
  if (after.length == 1) {
213
241
  this.setPropertyTarget(after[0]);
214
242
  // 컴포넌트 특성 속성(specific properties)을 먼저 바꾸고, 모델을 바꾸어준다.