@things-factory/board-ui 10.0.0-beta.7 → 10.0.0-beta.70

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 (93) hide show
  1. package/dist-client/apptools/favorite-tool.js +5 -5
  2. package/dist-client/apptools/favorite-tool.js.map +1 -1
  3. package/dist-client/board-list/board-tile-list.d.ts +6 -1
  4. package/dist-client/board-list/board-tile-list.js +291 -44
  5. package/dist-client/board-list/board-tile-list.js.map +1 -1
  6. package/dist-client/board-list/group-bar.js +3 -3
  7. package/dist-client/board-list/group-bar.js.map +1 -1
  8. package/dist-client/board-list/play-group-bar.d.ts +0 -1
  9. package/dist-client/board-list/play-group-bar.js +3 -6
  10. package/dist-client/board-list/play-group-bar.js.map +1 -1
  11. package/dist-client/board-provider.js +20 -8
  12. package/dist-client/board-provider.js.map +1 -1
  13. package/dist-client/data-grist/board-editor.js +4 -4
  14. package/dist-client/data-grist/board-editor.js.map +1 -1
  15. package/dist-client/data-grist/board-renderer.js +4 -4
  16. package/dist-client/data-grist/board-renderer.js.map +1 -1
  17. package/dist-client/graphql/board-template.js +1 -1
  18. package/dist-client/graphql/board-template.js.map +1 -1
  19. package/dist-client/graphql/board.d.ts +1 -0
  20. package/dist-client/graphql/board.js +28 -2
  21. package/dist-client/graphql/board.js.map +1 -1
  22. package/dist-client/graphql/group.js +1 -1
  23. package/dist-client/graphql/group.js.map +1 -1
  24. package/dist-client/graphql/play-group.js +3 -3
  25. package/dist-client/graphql/play-group.js.map +1 -1
  26. package/dist-client/pages/attachment-list-page.d.ts +16 -0
  27. package/dist-client/pages/attachment-list-page.js +63 -2
  28. package/dist-client/pages/attachment-list-page.js.map +1 -1
  29. package/dist-client/pages/board-action-dispatch.d.ts +31 -0
  30. package/dist-client/pages/board-action-dispatch.js +80 -0
  31. package/dist-client/pages/board-action-dispatch.js.map +1 -0
  32. package/dist-client/pages/board-action-dispatch.test.d.ts +1 -0
  33. package/dist-client/pages/board-action-dispatch.test.js +235 -0
  34. package/dist-client/pages/board-action-dispatch.test.js.map +1 -0
  35. package/dist-client/pages/board-edit-dispatch.d.ts +74 -0
  36. package/dist-client/pages/board-edit-dispatch.js +299 -0
  37. package/dist-client/pages/board-edit-dispatch.js.map +1 -0
  38. package/dist-client/pages/board-edit-dispatch.test.d.ts +1 -0
  39. package/dist-client/pages/board-edit-dispatch.test.js +858 -0
  40. package/dist-client/pages/board-edit-dispatch.test.js.map +1 -0
  41. package/dist-client/pages/board-list-page.d.ts +23 -3
  42. package/dist-client/pages/board-list-page.js +165 -77
  43. package/dist-client/pages/board-list-page.js.map +1 -1
  44. package/dist-client/pages/board-modeller-page.d.ts +134 -0
  45. package/dist-client/pages/board-modeller-page.js +725 -54
  46. package/dist-client/pages/board-modeller-page.js.map +1 -1
  47. package/dist-client/pages/board-player-by-name-page.js.map +1 -1
  48. package/dist-client/pages/board-player-page.js +14 -26
  49. package/dist-client/pages/board-player-page.js.map +1 -1
  50. package/dist-client/pages/board-viewer-by-name-page.d.ts +8 -1
  51. package/dist-client/pages/board-viewer-by-name-page.js +9 -1
  52. package/dist-client/pages/board-viewer-by-name-page.js.map +1 -1
  53. package/dist-client/pages/board-viewer-page.d.ts +2 -1
  54. package/dist-client/pages/board-viewer-page.js +52 -48
  55. package/dist-client/pages/board-viewer-page.js.map +1 -1
  56. package/dist-client/pages/play-list-page.d.ts +0 -1
  57. package/dist-client/pages/play-list-page.js +26 -33
  58. package/dist-client/pages/play-list-page.js.map +1 -1
  59. package/dist-client/pages/printable-board-viewer-page.js +2 -2
  60. package/dist-client/pages/printable-board-viewer-page.js.map +1 -1
  61. package/dist-client/route.d.ts +1 -1
  62. package/dist-client/route.js.map +1 -1
  63. package/dist-client/setting-let/board-view-setting-let.js +1 -1
  64. package/dist-client/setting-let/board-view-setting-let.js.map +1 -1
  65. package/dist-client/tsconfig.tsbuildinfo +1 -1
  66. package/dist-client/utils/notify-helper.d.ts +7 -0
  67. package/dist-client/utils/notify-helper.js +28 -0
  68. package/dist-client/utils/notify-helper.js.map +1 -0
  69. package/dist-client/utils/query-utils.d.ts +1 -0
  70. package/dist-client/utils/query-utils.js +20 -0
  71. package/dist-client/utils/query-utils.js.map +1 -0
  72. package/dist-client/viewparts/board-basic-info.js +9 -13
  73. package/dist-client/viewparts/board-basic-info.js.map +1 -1
  74. package/dist-client/viewparts/board-template-info.d.ts +0 -1
  75. package/dist-client/viewparts/board-template-info.js +5 -13
  76. package/dist-client/viewparts/board-template-info.js.map +1 -1
  77. package/dist-client/viewparts/board-versions.js +1 -1
  78. package/dist-client/viewparts/board-versions.js.map +1 -1
  79. package/dist-client/viewparts/group-info-basic.js +2 -2
  80. package/dist-client/viewparts/group-info-basic.js.map +1 -1
  81. package/dist-client/viewparts/group-info-import.js +2 -2
  82. package/dist-client/viewparts/group-info-import.js.map +1 -1
  83. package/dist-client/viewparts/link-builder.js +1 -1
  84. package/dist-client/viewparts/link-builder.js.map +1 -1
  85. package/dist-client/viewparts/play-group-info-basic.js +2 -2
  86. package/dist-client/viewparts/play-group-info-basic.js.map +1 -1
  87. package/dist-server/tsconfig.tsbuildinfo +1 -1
  88. package/package.json +5 -4
  89. package/translations/en.json +3 -29
  90. package/translations/ja.json +3 -29
  91. package/translations/ko.json +3 -29
  92. package/translations/ms.json +3 -29
  93. package/translations/zh.json +3 -29
@@ -1,8 +1,11 @@
1
1
  import './things-scene-components.import';
2
2
  import '@operato/board/ox-board-modeller.js';
3
3
  import '@operato/oops';
4
+ import '@things-factory/board-ai';
4
5
  import { BoardModeller } from '@operato/board/ox-board-modeller.js';
5
6
  import { PageView } from '@operato/shell';
7
+ import { findSceneComponent } from './board-action-dispatch.js';
8
+ export { findSceneComponent };
6
9
  export declare class BoardModellerPage extends PageView {
7
10
  constructor();
8
11
  static styles: import("lit").CSSResult[];
@@ -17,7 +20,40 @@ export declare class BoardModellerPage extends PageView {
17
20
  componentGroupList?: any[];
18
21
  propertyEditor: any;
19
22
  preparing?: boolean;
23
+ /** AI 협력 세션 id — 현재 활성 세션. boardId 변경 시 자동 ensure. 다중 세션 시 활성 1개. */
24
+ chatSessionId?: string;
25
+ /** 보드의 모든 ChatSession (탭으로 표시). */
26
+ chatSessions: Array<{
27
+ id: string;
28
+ name?: string;
29
+ createdAt?: string;
30
+ }>;
31
+ /** AI 채팅 패널 열림 상태 (기본 닫힘) */
32
+ aiPanelOpen: boolean;
33
+ /**
34
+ * 적용된 patch 별 inverse op 시퀀스 — Revert 기능용.
35
+ *
36
+ * Map<patchId, inverseOps[]>: 각 patch 적용 시점에 계산해 저장. revert 클릭
37
+ * 시 역순 in-place 적용. 페이지 reload 시 손실 — reload 후 revert 시도는
38
+ * notify 로 안내 (메모리 외 영속은 별개 작업).
39
+ */
40
+ private patchInverses;
41
+ /** 모델러에 등록된 컴포넌트 type 목록 — chat 호출 시 LLM 에 전달 (lazy cache) */
42
+ private _knownTypesCache?;
43
+ /** 등록된 type 의 group 분류 — categories 로 LLM 에 전달 */
44
+ private _knownCategoriesCache?;
45
+ private get knownTypes();
46
+ private get knownCategories();
47
+ /**
48
+ * type 별 유효 속성 스킴 — LLM 이 정확한 컴포넌트를 만들도록 (lazy cache).
49
+ *
50
+ * 핵심: 좌표 표현은 type 마다 다르다 (left/top vs cx/cy vs points 등).
51
+ * 따라서 OMIT 하지 않고 `geometryKeys` 로 별도 노출 → LLM 이 type 별 좌표 키 사용 가능.
52
+ */
53
+ private _componentSchemasCache?;
54
+ private get componentSchemas();
20
55
  private board;
56
+ private _loadTracker?;
21
57
  private _fontCtrl;
22
58
  modeller?: BoardModeller;
23
59
  get context(): {
@@ -31,6 +67,104 @@ export declare class BoardModellerPage extends PageView {
31
67
  description: string;
32
68
  };
33
69
  refresh(): Promise<void>;
70
+ /** 패널 토글 시 호출 — 열 때만 chatSession 보장 (세션 리스트 로드 + 활성 세션 결정) */
71
+ private toggleAIPanel;
72
+ /** 보드의 모든 ChatSession 목록을 로드 + 활성 세션 보장.
73
+ * - 세션이 0 개면 startBoardAISession 으로 첫 세션 생성 (단일 세션 UX 호환)
74
+ * - 활성 세션 미설정 시 첫 번째 세션을 활성으로
75
+ * - 이미 활성 세션 set 돼있고 list 에 포함되면 유지 */
76
+ private ensureChatSession;
77
+ /** `@` mention popup 의 도메인 사용자 후보 — chat 의 userProvider prop 으로 wire.
78
+ * query 변할 때마다 호출되므로 server query (`domainUsersForMention`) 를 그대로 위임. */
79
+ private fetchDomainUsersForMention;
80
+ /** 채팅 패널의 탭 클릭 — 활성 세션 전환. */
81
+ private onChatSessionSwitch;
82
+ /** 채팅 패널의 "+" 버튼 — 새 세션 생성 후 활성으로 전환. */
83
+ private onChatSessionCreate;
84
+ /**
85
+ * 모델러의 selected (things-scene Component 인스턴스 배열) 에서 refid 추출.
86
+ *
87
+ * refid 는 things-scene 이 모든 컴포넌트에 자동 발급하는 universal numeric handle.
88
+ * AI 의 selection 표현은 항상 refid 기반 (id 는 데이터 바인딩 이름이며 unique 가
89
+ * 아니라 targeting 에 부적합).
90
+ */
91
+ private extractSelectedRefids;
92
+ /**
93
+ * AI 채팅 mention popup (`#`) 검색 위임 — things-scene SceneSearchEngine 으로 wrap.
94
+ *
95
+ * F-key Finder 와 동일한 검색 룰 (id → name → tag → type → class → text → data → property)
96
+ * 을 그대로 mention popup 에 재사용. 컴포넌트 트리를 직접 순회하므로 model JSON 으로
97
+ * 변환할 필요 없음 — 일관성 + 성능 이점.
98
+ *
99
+ * 반환 구조 (FilterResult) 는 chat 의 mention-popup 표시 모델. host 는 things-scene
100
+ * Component 에서 refid/id/type/tag/class/text 를 뽑아 candidate 로 채워 넘긴다.
101
+ */
102
+ private searchSceneForMention;
103
+ /**
104
+ * 라이브 보드 모델 — things-scene 캔버스가 들고 있는 가장 최신 상태의 deep clone.
105
+ *
106
+ * 사용자 수작업 편집은 scene.model 에만 반영되고 this.model property 에는 자동
107
+ * 동기화되지 않는다. AI 한테 보드 상태를 넘기거나 patch 를 적용할 때는 반드시
108
+ * 이쪽을 쓴다.
109
+ *
110
+ * id 와 refid 는 별개 필드 — 컴포넌트는 model.id (선택, 사용자/AI 가 명시 설정)
111
+ * 와 model.refid (필수, things-scene 자동 발급) 를 둘 다 가질 수 있고 AI 가
112
+ * 양쪽을 구별해서 다룬다 (tool 인자가 분리됨). 따라서 여기서는 model 을 mutate
113
+ * 하지 않고 raw deep clone 만 반환.
114
+ */
115
+ private getLiveBoard;
116
+ /**
117
+ * 채팅에서 patch 도착 — things-scene 에 in-place 적용.
118
+ *
119
+ * 핵심: `this.model = next` 로 모델을 통째 교체하면 ox-scene-viewer 가 scene 을
120
+ * dispose → 재생성 → undo 히스토리/dirty 플래그가 모두 초기화된다.
121
+ * 따라서 일반 add/modify/remove 는 scene 의 in-place mutation API 로 적용 →
122
+ * commander 가 자동으로 snapshot push → CMD+Z 와 저장 안내 팝업이 정상 동작.
123
+ *
124
+ * 'replace' op (보드 전체 교체) 만은 부득이 wholesale 경로로 빠진다 — 이 경우는
125
+ * 사용자에게 명시적으로 안내 후 진행.
126
+ */
127
+ private onBoardEditPatch;
128
+ /**
129
+ * 'replace' op 적용 — scene 통째로 재생성 (undo 히스토리 초기화).
130
+ *
131
+ * AI 가 보드 전체 재구성을 요청한 경우. 사용자에게 history 손실 안내.
132
+ * board-import 데이터 wholesale 적용 등 드문 케이스에 한정.
133
+ *
134
+ * Revert 지원 — replace 직전 보드 model 을 inverse 로 보관 (또 다른 replace).
135
+ */
136
+ private applyPatchWholesale;
137
+ /**
138
+ * 채팅에서 board-edit-revert 도착 — 누적된 inverse 를 역순 in-place 적용.
139
+ *
140
+ * - 메모리상 patchInverses Map 만 본다. 페이지 reload 후엔 inverse 가 없어
141
+ * 되돌릴 수 없음 (사용자에게 안내).
142
+ * - 성공 시 서버 revertPatch mutation 호출 → PatchEntry.reverted=true 영속.
143
+ * - in-place 적용이라 undo/dirty/selection 보존 (chatViaTools 의 모든 강점 그대로).
144
+ */
145
+ private onBoardEditRevert;
146
+ /**
147
+ * inverse op 시퀀스를 things-scene 위에 in-place 적용 (snapshot/undo 보존).
148
+ * dispatcher 재사용 — inverse 누적은 무시 (revert 의 revert 는 redo, 별개 기능).
149
+ */
150
+ private applyInverseOpsInPlace;
151
+ /** 서버 PatchEntry.reverted=true 영속 — fail 해도 UI 는 이미 되돌렸으니 warn 만. */
152
+ private recordRevertOnServer;
153
+ /**
154
+ * AI 가 ephemeral scene action (selection / view / mode) 을 실행하라고 요청.
155
+ *
156
+ * board-edit-patch 와 별개 채널 — 모델 변경 X, undo 영향 X, dirty flag 무관.
157
+ * things-scene API 직접 호출. 잘못된 action / 누락된 컴포넌트는 console.warn 만.
158
+ */
159
+ private onBoardActionExecute;
160
+ /**
161
+ * AI 가 만든 컴포넌트를 things-scene 이 기대하는 완전한 형태로 normalize.
162
+ * BoardModeller 에 등록된 template.model (default 값) 위에 AI 응답을 덮어쓴다.
163
+ * 이 단계 없이 things-scene 에 넣으면 필수 속성 누락 시 render 에서 crash 가능
164
+ * (예: gauge-circle 의 value 가 undefined → toString() TypeError).
165
+ */
166
+ private normalizeComponent;
167
+ private findTemplateByType;
34
168
  updated(changes: any): Promise<void>;
35
169
  pageUpdated(changes: any, lifecycle: any): void;
36
170
  render(): import("lit-html").TemplateResult<1>;