yaml-flow 3.1.1 → 5.0.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 (194) hide show
  1. package/README.md +81 -20
  2. package/board-live-cards-cli.js +37 -0
  3. package/browser/board-livegraph-runtime.js +1453 -0
  4. package/browser/board-livegraph-runtime.js.map +1 -0
  5. package/browser/card-compute.js +153 -433
  6. package/browser/live-cards.js +868 -115
  7. package/browser/live-cards.schema.json +90 -83
  8. package/dist/board-livegraph-runtime/index.cjs +1448 -0
  9. package/dist/board-livegraph-runtime/index.cjs.map +1 -0
  10. package/dist/board-livegraph-runtime/index.d.cts +101 -0
  11. package/dist/board-livegraph-runtime/index.d.ts +101 -0
  12. package/dist/board-livegraph-runtime/index.js +1441 -0
  13. package/dist/board-livegraph-runtime/index.js.map +1 -0
  14. package/dist/card-compute/index.cjs +266 -431
  15. package/dist/card-compute/index.cjs.map +1 -1
  16. package/dist/card-compute/index.d.cts +77 -49
  17. package/dist/card-compute/index.d.ts +77 -49
  18. package/dist/card-compute/index.js +263 -432
  19. package/dist/card-compute/index.js.map +1 -1
  20. package/dist/cli/board-live-cards-cli.cjs +2750 -0
  21. package/dist/cli/board-live-cards-cli.cjs.map +1 -0
  22. package/dist/cli/board-live-cards-cli.d.cts +205 -0
  23. package/dist/cli/board-live-cards-cli.d.ts +205 -0
  24. package/dist/cli/board-live-cards-cli.js +2702 -0
  25. package/dist/cli/board-live-cards-cli.js.map +1 -0
  26. package/dist/{constants-B2zqu10b.d.ts → constants-DuzE5n03.d.ts} +2 -2
  27. package/dist/{constants-DJZU1pwJ.d.cts → constants-ozjf1Ejw.d.cts} +2 -2
  28. package/dist/continuous-event-graph/index.cjs +258 -464
  29. package/dist/continuous-event-graph/index.cjs.map +1 -1
  30. package/dist/continuous-event-graph/index.d.cts +18 -358
  31. package/dist/continuous-event-graph/index.d.ts +18 -358
  32. package/dist/continuous-event-graph/index.js +255 -464
  33. package/dist/continuous-event-graph/index.js.map +1 -1
  34. package/dist/event-graph/index.cjs +4 -4
  35. package/dist/event-graph/index.cjs.map +1 -1
  36. package/dist/event-graph/index.d.cts +5 -5
  37. package/dist/event-graph/index.d.ts +5 -5
  38. package/dist/event-graph/index.js +4 -4
  39. package/dist/event-graph/index.js.map +1 -1
  40. package/dist/index.cjs +1684 -555
  41. package/dist/index.cjs.map +1 -1
  42. package/dist/index.d.cts +26 -7
  43. package/dist/index.d.ts +26 -7
  44. package/dist/index.js +1678 -555
  45. package/dist/index.js.map +1 -1
  46. package/dist/inference/index.cjs +138 -19
  47. package/dist/inference/index.cjs.map +1 -1
  48. package/dist/inference/index.d.cts +2 -2
  49. package/dist/inference/index.d.ts +2 -2
  50. package/dist/inference/index.js +138 -19
  51. package/dist/inference/index.js.map +1 -1
  52. package/dist/journal-DRfJiheM.d.cts +28 -0
  53. package/dist/journal-NLYuqege.d.ts +28 -0
  54. package/dist/live-cards-bridge-Or7fdEJV.d.ts +316 -0
  55. package/dist/live-cards-bridge-vGJ6tMzN.d.cts +316 -0
  56. package/dist/schedule-CMcZe5Ny.d.ts +21 -0
  57. package/dist/schedule-CiucyCan.d.cts +21 -0
  58. package/dist/step-machine/index.cjs +18 -1
  59. package/dist/step-machine/index.cjs.map +1 -1
  60. package/dist/step-machine/index.d.cts +2 -2
  61. package/dist/step-machine/index.d.ts +2 -2
  62. package/dist/step-machine/index.js +18 -1
  63. package/dist/step-machine/index.js.map +1 -1
  64. package/dist/stores/file.d.cts +1 -1
  65. package/dist/stores/file.d.ts +1 -1
  66. package/dist/stores/index.d.cts +1 -1
  67. package/dist/stores/index.d.ts +1 -1
  68. package/dist/stores/localStorage.d.cts +1 -1
  69. package/dist/stores/localStorage.d.ts +1 -1
  70. package/dist/stores/memory.d.cts +1 -1
  71. package/dist/stores/memory.d.ts +1 -1
  72. package/dist/{types-BwvgvlOO.d.cts → types-BzLD8bjb.d.cts} +1 -1
  73. package/dist/{types-ClRA8hzC.d.ts → types-C2eJ7DAV.d.ts} +1 -1
  74. package/dist/{types-DEj7OakX.d.cts → types-CMFSIjpc.d.cts} +39 -4
  75. package/dist/{types-DEj7OakX.d.ts → types-CMFSIjpc.d.ts} +39 -4
  76. package/dist/{types-FZ_eyErS.d.cts → types-ycun84cq.d.cts} +1 -0
  77. package/dist/{types-FZ_eyErS.d.ts → types-ycun84cq.d.ts} +1 -0
  78. package/dist/{validate-DEZ2Ymdb.d.ts → validate-DJQTQ6bP.d.ts} +1 -1
  79. package/dist/{validate-DqKTZg_o.d.cts → validate-ke92Cleg.d.cts} +1 -1
  80. package/examples/browser/boards/portfolio-tracker/cards/holdings-table.json +22 -0
  81. package/examples/browser/boards/portfolio-tracker/cards/portfolio-form.json +16 -0
  82. package/examples/browser/boards/portfolio-tracker/cards/portfolio-value.json +15 -0
  83. package/examples/browser/boards/portfolio-tracker/cards/price-fetch.json +15 -0
  84. package/examples/browser/boards/portfolio-tracker/fetch-prices.js +43 -0
  85. package/examples/browser/boards/portfolio-tracker/portfolio-tracker-task-executor.cjs +96 -0
  86. package/examples/browser/boards/portfolio-tracker/portfolio-tracker.bat +7 -0
  87. package/examples/browser/boards/portfolio-tracker/portfolio-tracker.js +217 -0
  88. package/examples/browser/livecards-browser/index.html +41 -0
  89. package/examples/browser/{index.html → step-machine-browser/index.html} +53 -53
  90. package/examples/cli/step-machine-cli/portfolio-tracker/cards/holdings-table.json +22 -0
  91. package/examples/cli/step-machine-cli/portfolio-tracker/cards/portfolio-form.json +43 -0
  92. package/examples/cli/step-machine-cli/portfolio-tracker/cards/portfolio-value.json +15 -0
  93. package/examples/cli/step-machine-cli/portfolio-tracker/cards/price-fetch.json +15 -0
  94. package/examples/cli/step-machine-cli/portfolio-tracker/fetch-prices.js +48 -0
  95. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/_board-cli.js +58 -0
  96. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/add-cards-cli.js +27 -0
  97. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/init-board-cli.js +25 -0
  98. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/reset-board-dir-cli.js +29 -0
  99. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/retrigger-cli.js +27 -0
  100. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/status-cli.js +25 -0
  101. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/update-holdings-cli.js +37 -0
  102. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/wait-completed-cli.js +53 -0
  103. package/examples/cli/step-machine-cli/portfolio-tracker/handlers/write-prices-cli.js +35 -0
  104. package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker.flow.yaml +227 -0
  105. package/examples/cli/step-machine-cli/portfolio-tracker/portfolio-tracker.input.json +38 -0
  106. package/examples/cli/step-machine-cli/portfolio-tracker/run-portfolio-tracker.bat +29 -0
  107. package/examples/cli/step-machine-demo/jsonata-init-board-cli.js +36 -0
  108. package/examples/cli/step-machine-demo/jsonata-init-board.flow.yaml +30 -0
  109. package/examples/cli/step-machine-demo/one-step-cli-only.flow.yaml +19 -0
  110. package/examples/cli/step-machine-demo/step-cli-echo-y.js +15 -0
  111. package/examples/cli/step-machine-demo/step2-double-cli.js +39 -0
  112. package/examples/cli/step-machine-demo/two-step-math-handlers.js +32 -0
  113. package/examples/cli/step-machine-demo/two-step-math.flow.yaml +31 -0
  114. package/examples/cli/step-machine-demo/two-step-mixed-handlers.js +24 -0
  115. package/examples/cli/step-machine-demo/two-step-mixed.flow.yaml +35 -0
  116. package/examples/example-board/board.yaml +23 -0
  117. package/examples/example-board/bootstrap_payload.json +1 -0
  118. package/examples/example-board/cards/card-chain-region-alert.json +39 -0
  119. package/examples/example-board/cards/card-chain-region-totals.json +26 -0
  120. package/examples/example-board/cards/card-chain-top-region.json +24 -0
  121. package/examples/example-board/cards/card-ex-actions.json +32 -0
  122. package/examples/example-board/cards/card-ex-chart.json +30 -0
  123. package/examples/example-board/cards/card-ex-filter.json +36 -0
  124. package/examples/example-board/cards/card-ex-filtered-by-preference.json +59 -0
  125. package/examples/example-board/cards/card-ex-form.json +91 -0
  126. package/examples/example-board/cards/card-ex-list.json +22 -0
  127. package/examples/example-board/cards/card-ex-markdown.json +17 -0
  128. package/examples/example-board/cards/card-ex-metric.json +19 -0
  129. package/examples/example-board/cards/card-ex-narrative.json +36 -0
  130. package/examples/example-board/cards/card-ex-source-http.json +28 -0
  131. package/examples/example-board/cards/card-ex-source.json +21 -0
  132. package/examples/example-board/cards/card-ex-status.json +35 -0
  133. package/examples/example-board/cards/card-ex-table.json +30 -0
  134. package/examples/example-board/cards/card-ex-todo.json +29 -0
  135. package/examples/example-board/demo-chat-handler.js +69 -0
  136. package/examples/example-board/demo-server.js +87 -0
  137. package/examples/example-board/demo-shell-browser.html +806 -0
  138. package/examples/example-board/demo-shell-with-server.html +280 -0
  139. package/examples/example-board/demo-shell.html +62 -0
  140. package/examples/example-board/demo-task-executor.js +255 -0
  141. package/examples/example-board/mock.db +15 -0
  142. package/examples/example-board/reusable-board-runtime-client.js +265 -0
  143. package/examples/example-board/reusable-runtime-artifacts-adapter.js +233 -0
  144. package/examples/example-board/reusable-server-runtime.js +1284 -0
  145. package/examples/index.html +799 -0
  146. package/examples/{batch → npm-libs/batch}/batch-step-machine.ts +1 -1
  147. package/examples/{continuous-event-graph → npm-libs/continuous-event-graph}/live-cards-board.ts +18 -18
  148. package/examples/{continuous-event-graph → npm-libs/continuous-event-graph}/live-portfolio-dashboard.ts +24 -24
  149. package/examples/{continuous-event-graph → npm-libs/continuous-event-graph}/portfolio-tracker.ts +1 -1
  150. package/examples/{continuous-event-graph → npm-libs/continuous-event-graph}/reactive-monitoring.ts +1 -1
  151. package/examples/{continuous-event-graph → npm-libs/continuous-event-graph}/reactive-pipeline.ts +1 -1
  152. package/examples/{continuous-event-graph → npm-libs/continuous-event-graph}/soc-incident-board.ts +1 -1
  153. package/examples/{continuous-event-graph → npm-libs/continuous-event-graph}/stock-dashboard.ts +1 -1
  154. package/examples/{event-graph → npm-libs/event-graph}/ci-cd-pipeline.ts +1 -1
  155. package/examples/{event-graph → npm-libs/event-graph}/executor-diamond.ts +1 -1
  156. package/examples/{event-graph → npm-libs/event-graph}/executor-pipeline.ts +1 -1
  157. package/examples/{event-graph → npm-libs/event-graph}/research-pipeline.ts +1 -1
  158. package/examples/{graph-of-graphs → npm-libs/graph-of-graphs}/multi-stage-etl.ts +1 -1
  159. package/examples/{graph-of-graphs → npm-libs/graph-of-graphs}/url-processing-pipeline.ts +1 -1
  160. package/examples/{inference → npm-libs/inference}/azure-deployment.ts +1 -1
  161. package/examples/{inference → npm-libs/inference}/copilot-cli.ts +1 -1
  162. package/examples/{inference → npm-libs/inference}/data-pipeline.ts +1 -1
  163. package/examples/{inference → npm-libs/inference}/pluggable-adapters.ts +1 -1
  164. package/examples/{node → npm-libs/node}/ai-conversation.ts +1 -1
  165. package/examples/{node → npm-libs/node}/simple-greeting.ts +2 -2
  166. package/examples/step-machine-cli/portfolio-tracker/cards/holdings-table.json +22 -0
  167. package/examples/step-machine-cli/portfolio-tracker/cards/portfolio-form.json +43 -0
  168. package/examples/step-machine-cli/portfolio-tracker/cards/portfolio-value.json +15 -0
  169. package/examples/step-machine-cli/portfolio-tracker/cards/price-fetch.json +15 -0
  170. package/examples/step-machine-cli/portfolio-tracker/fetch-prices.js +48 -0
  171. package/examples/step-machine-cli/portfolio-tracker/handlers/_board-cli.js +58 -0
  172. package/examples/step-machine-cli/portfolio-tracker/handlers/add-cards-cli.js +27 -0
  173. package/examples/step-machine-cli/portfolio-tracker/handlers/init-board-cli.js +25 -0
  174. package/examples/step-machine-cli/portfolio-tracker/handlers/reset-board-dir-cli.js +29 -0
  175. package/examples/step-machine-cli/portfolio-tracker/handlers/retrigger-cli.js +27 -0
  176. package/examples/step-machine-cli/portfolio-tracker/handlers/status-cli.js +25 -0
  177. package/examples/step-machine-cli/portfolio-tracker/handlers/update-holdings-cli.js +37 -0
  178. package/examples/step-machine-cli/portfolio-tracker/handlers/wait-completed-cli.js +53 -0
  179. package/examples/step-machine-cli/portfolio-tracker/handlers/write-prices-cli.js +35 -0
  180. package/examples/step-machine-cli/portfolio-tracker/portfolio-tracker-task-executor.cjs +96 -0
  181. package/examples/step-machine-cli/portfolio-tracker/portfolio-tracker.flow.yaml +227 -0
  182. package/examples/step-machine-cli/portfolio-tracker/portfolio-tracker.input.json +38 -0
  183. package/examples/step-machine-cli/portfolio-tracker/run-portfolio-tracker.bat +29 -0
  184. package/package.json +27 -2
  185. package/schema/board-status.schema.json +118 -0
  186. package/schema/card-runtime.schema.json +25 -0
  187. package/schema/flow.schema.json +5 -0
  188. package/schema/live-cards.schema.json +90 -83
  189. package/step-machine-cli.js +674 -0
  190. package/browser/ingest-board.js +0 -296
  191. package/examples/ingest.js +0 -733
  192. /package/examples/{flows → npm-libs/flows}/ai-conversation.yaml +0 -0
  193. /package/examples/{flows → npm-libs/flows}/order-processing.yaml +0 -0
  194. /package/examples/{flows → npm-libs/flows}/simple-greeting.yaml +0 -0
@@ -1,296 +0,0 @@
1
- // ingest-board.js — Ingest Board: a LiveCard Board type for batch ingest UIs
2
- //
3
- // Pure component. Zero I/O (no fetch, no EventSource, no polling).
4
- // All side-effects delegated to host via callbacks.
5
- //
6
- // API:
7
- // const ib = IngestBoard.create(containerEl, opts)
8
- //
9
- // ib.setBatches(batches) — rebuild board from batch array
10
- // ib.getChat(boardId) — get chat element API for a card
11
- // ib.getFileUpload(boardId) — get file-upload element API for a card
12
- // ib.getActions(boardId) — get actions element API for a card
13
- // ib.showChatModal(boardId, messages) — open Bootstrap modal with chat history
14
- // ib.destroy()
15
- //
16
- // Required opts:
17
- // onSend(boardId, { text, files }) — host handles: upload files + message → call getChat().appendMessage() with results
18
- // onConfirm(boardId) — host handles: POST confirm → SSE → update board
19
- // onDiscard(boardId) — host handles: POST discard → call ib.setBatches()
20
- //
21
- // Optional opts:
22
- // onViewChat(boardId) — host handles: fetch chat → call ib.showChatModal()
23
- // onRefresh() — host handles: fetch batches → call ib.setBatches()
24
- // compact — smaller card columns (default: false)
25
- // engine — existing LiveCard engine (one is created if omitted)
26
- // markdown — markdown renderer fn
27
- // sanitize — HTML sanitizer fn
28
-
29
- // eslint-disable-next-line no-unused-vars
30
- var IngestBoard = (function () {
31
- 'use strict';
32
-
33
- function create(containerEl, opts) {
34
- opts = opts || {};
35
- if (!opts.onSend) throw new Error('IngestBoard: opts.onSend is required');
36
- if (!opts.onConfirm) throw new Error('IngestBoard: opts.onConfirm is required');
37
- if (!opts.onDiscard) throw new Error('IngestBoard: opts.onDiscard is required');
38
-
39
- const compact = opts.compact || false;
40
- const onSend = opts.onSend;
41
- const onConfirm = opts.onConfirm;
42
- const onDiscard = opts.onDiscard;
43
- const onViewChat = opts.onViewChat || null;
44
- const onRefresh = opts.onRefresh || null;
45
- const mdFn = opts.markdown || (typeof marked !== 'undefined' ? function (t) { return marked.parse(t); } : null);
46
- const sanFn = opts.sanitize || (typeof DOMPurify !== 'undefined' ? function (h) { return DOMPurify.sanitize(h); } : null);
47
-
48
- let board = null;
49
- const nodes = {}; // id → node
50
-
51
- // ---- Engine ----
52
-
53
- const engine = opts.engine || LiveCard.init({
54
- resolve: function (id) { return nodes[id]; },
55
- onPatch: function () {},
56
- onPatchState: function () {},
57
- onRefresh: onRefresh || function () {},
58
- onAction: handleAction,
59
- markdown: mdFn,
60
- sanitize: sanFn,
61
- });
62
-
63
- // ---- Action dispatcher (pure — delegates to host callbacks) ----
64
-
65
- function handleAction(nodeId, actionType, payload) {
66
- if (actionType === 'chat-send') {
67
- // For the "new" card, boardId is null until host creates one
68
- var boardId = nodeId === '__new__' ? null : nodeId;
69
- onSend(boardId, { text: payload.text, files: payload.files });
70
- } else if (actionType === 'action') {
71
- if (payload.buttonId === 'confirm') onConfirm(nodeId);
72
- else if (payload.buttonId === 'discard') onDiscard(nodeId);
73
- else if (payload.buttonId === 'view-chat' && onViewChat) onViewChat(nodeId);
74
- }
75
- }
76
-
77
- // ---- Node builders ----
78
-
79
- function buildActiveNode(batch) {
80
- return {
81
- id: batch.id,
82
- type: 'card',
83
- meta: { title: batch.id, tags: [batch.status === 'open-items' ? 'open-items' : 'ready'] },
84
- state: {
85
- status: batch.processing ? 'loading' : 'fresh',
86
- messages: batch.chat || [],
87
- files: batch.files || [],
88
- batchStatus: batch.status,
89
- },
90
- view: {
91
- elements: [
92
- {
93
- id: 'chat',
94
- kind: 'chat',
95
- data: { bind: 'state.messages', fileAttach: true, placeholder: 'Add files or type a message...' }
96
- },
97
- {
98
- id: 'actions',
99
- kind: 'actions',
100
- data: {
101
- buttons: [
102
- { id: 'confirm', label: 'Confirm & Merge', style: 'success', disabled: batch.status !== 'ready' || !!batch.processing },
103
- { id: 'discard', label: 'Discard', style: 'outline-danger' }
104
- ]
105
- }
106
- }
107
- ],
108
- layout: { board: { col: compact ? 6 : 8, order: 0 } },
109
- features: { refresh: false }
110
- }
111
- };
112
- }
113
-
114
- function buildCompletedNode(batch, order) {
115
- var elements = [];
116
-
117
- if (batch.files && batch.files.length) {
118
- elements.push({
119
- id: 'files',
120
- kind: 'file-upload',
121
- data: { bind: 'state.files', upload: false }
122
- });
123
- }
124
-
125
- if (batch.summary) {
126
- elements.push({
127
- id: 'summary',
128
- kind: 'text',
129
- data: { bind: 'state.summary', style: 'muted' }
130
- });
131
- }
132
-
133
- if (batch.chatCount > 0 && onViewChat) {
134
- elements.push({
135
- id: 'card-actions',
136
- kind: 'actions',
137
- data: { buttons: [{ id: 'view-chat', label: '\uD83D\uDCAC ' + batch.chatCount + ' message(s)', style: 'outline-secondary' }] }
138
- });
139
- }
140
-
141
- return {
142
- id: batch.id,
143
- type: 'card',
144
- meta: { title: batch.id, tags: ['confirmed'] },
145
- state: {
146
- status: 'fresh',
147
- files: batch.files || [],
148
- summary: batch.summary || '',
149
- },
150
- view: {
151
- elements: elements,
152
- layout: { board: { col: compact ? 6 : 4, order: order } },
153
- features: { refresh: false }
154
- }
155
- };
156
- }
157
-
158
- function buildNewNode() {
159
- return {
160
- id: '__new__',
161
- type: 'card',
162
- meta: { title: 'New Batch', tags: ['new'] },
163
- state: { status: 'fresh', messages: [] },
164
- view: {
165
- elements: [
166
- {
167
- id: 'chat',
168
- kind: 'chat',
169
- data: { bind: 'state.messages', fileAttach: true, placeholder: 'Add files or type a message...' }
170
- }
171
- ],
172
- layout: { board: { col: compact ? 6 : 8, order: -1 } },
173
- features: { refresh: false }
174
- }
175
- };
176
- }
177
-
178
- // ---- setBatches — rebuild the board from data ----
179
-
180
- function setBatches(batches) {
181
- Object.keys(nodes).forEach(function (k) { delete nodes[k]; });
182
-
183
- var hasActive = batches.some(function (b) { return b.status === 'ready' || b.status === 'open-items'; });
184
- var allNodes = [];
185
-
186
- if (!hasActive) {
187
- var nn = buildNewNode();
188
- nodes.__new__ = nn;
189
- allNodes.push(nn);
190
- }
191
-
192
- var order = 1;
193
- batches.forEach(function (b) {
194
- var isActive = b.status === 'ready' || b.status === 'open-items';
195
- var n = isActive ? buildActiveNode(b) : buildCompletedNode(b, order++);
196
- nodes[b.id] = n;
197
- allNodes.push(n);
198
- });
199
-
200
- if (board) board.destroy();
201
- board = LiveCard.Board(engine, containerEl, {
202
- nodes: allNodes,
203
- mode: 'board',
204
- showNotes: false,
205
- showChat: false,
206
- });
207
- }
208
-
209
- // ---- Element accessors (host uses these to push data in) ----
210
-
211
- function getChat(boardId) {
212
- var el = engine.getElement(boardId, 'chat');
213
- return el && el._chat || null;
214
- }
215
-
216
- function getFileUpload(boardId) {
217
- var el = engine.getElement(boardId, 'files');
218
- return el && el._fileUpload || null;
219
- }
220
-
221
- function getActions(boardId) {
222
- var el = engine.getElement(boardId, 'actions') || engine.getElement(boardId, 'card-actions');
223
- return el && el._actions || null;
224
- }
225
-
226
- // ---- Chat modal (pure — caller passes messages) ----
227
-
228
- function showChatModal(boardId, messages) {
229
- var existing = document.getElementById('lc-chat-modal');
230
- if (existing) existing.remove();
231
- var bd = document.querySelector('.modal-backdrop');
232
- if (bd) bd.remove();
233
-
234
- var _e = function (t) { var d = document.createElement('div'); d.textContent = t; return d.innerHTML; };
235
-
236
- var wrap = document.createElement('div');
237
- wrap.innerHTML =
238
- '<div class="modal fade" id="lc-chat-modal" tabindex="-1">' +
239
- '<div class="modal-dialog modal-dialog-scrollable">' +
240
- '<div class="modal-content">' +
241
- '<div class="modal-header">' +
242
- '<h6 class="modal-title">' + _e(boardId) + '</h6>' +
243
- '<button type="button" class="btn-close" data-bs-dismiss="modal"></button>' +
244
- '</div>' +
245
- '<div class="modal-body"><div class="lc-chat-body" id="lc-chat-modal-body" style="max-height:none"></div></div>' +
246
- '</div>' +
247
- '</div>' +
248
- '</div>';
249
- document.body.appendChild(wrap.firstElementChild);
250
-
251
- var bodyEl = document.getElementById('lc-chat-modal-body');
252
- messages.forEach(function (msg) {
253
- var bub = document.createElement('div');
254
- var rc = msg.role === 'user' ? 'lc-chat-bubble-user'
255
- : msg.role === 'assistant' ? 'lc-chat-bubble-assistant'
256
- : 'lc-chat-bubble-system';
257
- bub.className = 'lc-chat-bubble ' + rc;
258
- if (msg.role === 'assistant' && mdFn) {
259
- var html = mdFn(msg.text);
260
- if (sanFn) html = sanFn(html);
261
- bub.innerHTML = html;
262
- } else {
263
- bub.textContent = msg.text;
264
- }
265
- bodyEl.appendChild(bub);
266
- });
267
-
268
- var modal = new bootstrap.Modal(document.getElementById('lc-chat-modal'));
269
- modal.show();
270
- document.getElementById('lc-chat-modal').addEventListener('hidden.bs.modal', function () {
271
- document.getElementById('lc-chat-modal').remove();
272
- });
273
- }
274
-
275
- // ---- Lifecycle ----
276
-
277
- function destroy() {
278
- if (board) board.destroy();
279
- board = null;
280
- Object.keys(nodes).forEach(function (k) { delete nodes[k]; });
281
- }
282
-
283
- return {
284
- setBatches: setBatches,
285
- getChat: getChat,
286
- getFileUpload: getFileUpload,
287
- getActions: getActions,
288
- showChatModal: showChatModal,
289
- destroy: destroy,
290
- get engine() { return engine; },
291
- get board() { return board; },
292
- };
293
- }
294
-
295
- return { create: create };
296
- })();