@bpmnkit/plugins 0.0.8

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 (140) hide show
  1. package/README.md +153 -0
  2. package/dist/ai-bridge/css.d.ts +2 -0
  3. package/dist/ai-bridge/css.js +366 -0
  4. package/dist/ai-bridge/index.d.ts +44 -0
  5. package/dist/ai-bridge/index.js +132 -0
  6. package/dist/ai-bridge/panel.d.ts +27 -0
  7. package/dist/ai-bridge/panel.js +715 -0
  8. package/dist/ascii-view/css.d.ts +4 -0
  9. package/dist/ascii-view/css.js +83 -0
  10. package/dist/ascii-view/index.d.ts +25 -0
  11. package/dist/ascii-view/index.js +92 -0
  12. package/dist/command-palette/css.d.ts +4 -0
  13. package/dist/command-palette/css.js +157 -0
  14. package/dist/command-palette/index.d.ts +53 -0
  15. package/dist/command-palette/index.js +378 -0
  16. package/dist/command-palette-editor/index.d.ts +35 -0
  17. package/dist/command-palette-editor/index.js +60 -0
  18. package/dist/config-panel/css.d.ts +4 -0
  19. package/dist/config-panel/css.js +719 -0
  20. package/dist/config-panel/index.d.ts +36 -0
  21. package/dist/config-panel/index.js +73 -0
  22. package/dist/config-panel/renderer.d.ts +127 -0
  23. package/dist/config-panel/renderer.js +1162 -0
  24. package/dist/config-panel/types.d.ts +118 -0
  25. package/dist/config-panel/types.js +2 -0
  26. package/dist/config-panel-bpmn/index.d.ts +58 -0
  27. package/dist/config-panel-bpmn/index.js +1320 -0
  28. package/dist/config-panel-bpmn/template-engine.d.ts +17 -0
  29. package/dist/config-panel-bpmn/template-engine.js +307 -0
  30. package/dist/config-panel-bpmn/template-to-service-task.d.ts +30 -0
  31. package/dist/config-panel-bpmn/template-to-service-task.js +92 -0
  32. package/dist/config-panel-bpmn/template-types.d.ts +126 -0
  33. package/dist/config-panel-bpmn/template-types.js +6 -0
  34. package/dist/config-panel-bpmn/templates/generated.d.ts +3 -0
  35. package/dist/config-panel-bpmn/templates/generated.js +57865 -0
  36. package/dist/config-panel-bpmn/util.d.ts +46 -0
  37. package/dist/config-panel-bpmn/util.js +195 -0
  38. package/dist/dmn-editor/css.d.ts +3 -0
  39. package/dist/dmn-editor/css.js +667 -0
  40. package/dist/dmn-editor/dmn-editor.d.ts +34 -0
  41. package/dist/dmn-editor/dmn-editor.js +646 -0
  42. package/dist/dmn-editor/drd-canvas.d.ts +85 -0
  43. package/dist/dmn-editor/drd-canvas.js +1087 -0
  44. package/dist/dmn-editor/index.d.ts +3 -0
  45. package/dist/dmn-editor/index.js +2 -0
  46. package/dist/dmn-viewer/css.d.ts +3 -0
  47. package/dist/dmn-viewer/css.js +151 -0
  48. package/dist/dmn-viewer/dmn-viewer.d.ts +30 -0
  49. package/dist/dmn-viewer/dmn-viewer.js +160 -0
  50. package/dist/dmn-viewer/feel.d.ts +3 -0
  51. package/dist/dmn-viewer/feel.js +2 -0
  52. package/dist/dmn-viewer/index.d.ts +14 -0
  53. package/dist/dmn-viewer/index.js +12 -0
  54. package/dist/element-docs/content.d.ts +20 -0
  55. package/dist/element-docs/content.js +1032 -0
  56. package/dist/element-docs/index.d.ts +7 -0
  57. package/dist/element-docs/index.js +643 -0
  58. package/dist/feel-playground/css.d.ts +4 -0
  59. package/dist/feel-playground/css.js +292 -0
  60. package/dist/feel-playground/index.d.ts +4 -0
  61. package/dist/feel-playground/index.js +3 -0
  62. package/dist/feel-playground/playground-plugin.d.ts +14 -0
  63. package/dist/feel-playground/playground-plugin.js +292 -0
  64. package/dist/form-editor/css.d.ts +3 -0
  65. package/dist/form-editor/css.js +703 -0
  66. package/dist/form-editor/form-editor.d.ts +48 -0
  67. package/dist/form-editor/form-editor.js +1039 -0
  68. package/dist/form-editor/index.d.ts +3 -0
  69. package/dist/form-editor/index.js +2 -0
  70. package/dist/form-viewer/css.d.ts +3 -0
  71. package/dist/form-viewer/css.js +303 -0
  72. package/dist/form-viewer/form-viewer.d.ts +29 -0
  73. package/dist/form-viewer/form-viewer.js +376 -0
  74. package/dist/form-viewer/index.d.ts +12 -0
  75. package/dist/form-viewer/index.js +11 -0
  76. package/dist/history/checkpoint.d.ts +10 -0
  77. package/dist/history/checkpoint.js +92 -0
  78. package/dist/history/css.d.ts +2 -0
  79. package/dist/history/css.js +130 -0
  80. package/dist/history/history-panel.d.ts +12 -0
  81. package/dist/history/history-panel.js +142 -0
  82. package/dist/history/index.d.ts +5 -0
  83. package/dist/history/index.js +3 -0
  84. package/dist/main-menu/css.d.ts +4 -0
  85. package/dist/main-menu/css.js +272 -0
  86. package/dist/main-menu/index.d.ts +59 -0
  87. package/dist/main-menu/index.js +285 -0
  88. package/dist/minimap/css.d.ts +10 -0
  89. package/dist/minimap/css.js +54 -0
  90. package/dist/minimap/index.d.ts +38 -0
  91. package/dist/minimap/index.js +69 -0
  92. package/dist/minimap/minimap.d.ts +35 -0
  93. package/dist/minimap/minimap.js +166 -0
  94. package/dist/optimize/index.d.ts +21 -0
  95. package/dist/optimize/index.js +304 -0
  96. package/dist/process-runner/css.d.ts +2 -0
  97. package/dist/process-runner/css.js +467 -0
  98. package/dist/process-runner/index.d.ts +56 -0
  99. package/dist/process-runner/index.js +549 -0
  100. package/dist/storage/auto-save.d.ts +11 -0
  101. package/dist/storage/auto-save.js +44 -0
  102. package/dist/storage/css.d.ts +2 -0
  103. package/dist/storage/css.js +2 -0
  104. package/dist/storage/db.d.ts +99 -0
  105. package/dist/storage/db.js +116 -0
  106. package/dist/storage/dialog.d.ts +15 -0
  107. package/dist/storage/dialog.js +201 -0
  108. package/dist/storage/export.d.ts +3 -0
  109. package/dist/storage/export.js +137 -0
  110. package/dist/storage/index.d.ts +44 -0
  111. package/dist/storage/index.js +201 -0
  112. package/dist/storage/sidebar.d.ts +2 -0
  113. package/dist/storage/sidebar.js +2 -0
  114. package/dist/storage/storage-api.d.ts +76 -0
  115. package/dist/storage/storage-api.js +342 -0
  116. package/dist/storage/types.d.ts +44 -0
  117. package/dist/storage/types.js +2 -0
  118. package/dist/storage-tabs-bridge/index.d.ts +96 -0
  119. package/dist/storage-tabs-bridge/index.js +502 -0
  120. package/dist/tabs/css.d.ts +3 -0
  121. package/dist/tabs/css.js +642 -0
  122. package/dist/tabs/file-resolver.d.ts +71 -0
  123. package/dist/tabs/file-resolver.js +46 -0
  124. package/dist/tabs/index.d.ts +15 -0
  125. package/dist/tabs/index.js +13 -0
  126. package/dist/tabs/tabs-plugin.d.ts +250 -0
  127. package/dist/tabs/tabs-plugin.js +1119 -0
  128. package/dist/token-highlight/css.d.ts +2 -0
  129. package/dist/token-highlight/css.js +81 -0
  130. package/dist/token-highlight/index.d.ts +44 -0
  131. package/dist/token-highlight/index.js +164 -0
  132. package/dist/watermark/css.d.ts +10 -0
  133. package/dist/watermark/css.js +54 -0
  134. package/dist/watermark/index.d.ts +48 -0
  135. package/dist/watermark/index.js +64 -0
  136. package/dist/zoom-controls/css.d.ts +4 -0
  137. package/dist/zoom-controls/css.js +48 -0
  138. package/dist/zoom-controls/index.d.ts +36 -0
  139. package/dist/zoom-controls/index.js +111 -0
  140. package/package.json +121 -0
@@ -0,0 +1,642 @@
1
+ export const TABS_CSS = `
2
+ .bpmnkit-tabs {
3
+ position: absolute;
4
+ top: 0;
5
+ left: 0;
6
+ right: 0;
7
+ height: 36px;
8
+ display: flex;
9
+ align-items: stretch;
10
+ background: var(--tabs-bg, var(--bpmnkit-surface-2, #1e1e2e));
11
+ border-bottom: 1px solid var(--tabs-border, #313244);
12
+ z-index: 100;
13
+ overflow-x: auto;
14
+ overflow-y: hidden;
15
+ scrollbar-width: none;
16
+ user-select: none;
17
+ }
18
+
19
+ .bpmnkit-tabs::-webkit-scrollbar {
20
+ display: none;
21
+ }
22
+
23
+ .bpmnkit-tabs[data-theme="light"] {
24
+ --tabs-bg: var(--bpmnkit-surface-2, #eeeef8);
25
+ --tabs-border: var(--bpmnkit-border, #d0d0e8);
26
+ --tab-fg: #4b5563;
27
+ --tab-active-bg: var(--bpmnkit-surface, #ffffff);
28
+ --tab-active-fg: #1c1c1c;
29
+ --tab-active-border: var(--bpmnkit-accent-bright, #3b82f6);
30
+ --tab-hover-bg: #e8edf2;
31
+ --tab-close-hover: var(--bpmnkit-panel-border, rgba(0,0,0,0.08));
32
+ --tab-warn-fg: var(--bpmnkit-warn, #d97706);
33
+ --tab-type-bpmn: var(--bpmnkit-accent-bright, #3b82f6);
34
+ --tab-type-dmn: #8b5cf6;
35
+ --tab-type-feel: var(--bpmnkit-warn, #d97706);
36
+ --tab-type-form: var(--bpmnkit-success, #16a34a);
37
+ }
38
+
39
+ .bpmnkit-tabs[data-theme="dark"] {
40
+ --tabs-bg: var(--bpmnkit-surface-2, #1e1e2e);
41
+ --tabs-border: #313244;
42
+ --tab-fg: #bac2de;
43
+ --tab-active-bg: var(--bpmnkit-surface, #161626);
44
+ --tab-active-fg: #cdd6f4;
45
+ --tab-active-border: var(--bpmnkit-accent-bright, #89b4fa);
46
+ --tab-hover-bg: #252535;
47
+ --tab-close-hover: rgba(255,255,255,0.08);
48
+ --tab-warn-fg: #fab387;
49
+ --tab-type-bpmn: var(--bpmnkit-accent-bright, #89b4fa);
50
+ --tab-type-dmn: #cba6f7;
51
+ --tab-type-feel: #fab387;
52
+ --tab-type-form: #a6e3a1;
53
+ }
54
+
55
+ /* ── Play mode: hide tab groups, show only center slot ───────────────── */
56
+
57
+ .bpmnkit-tabs.bpmnkit-play-mode .bpmnkit-tab {
58
+ display: none;
59
+ }
60
+
61
+ /* ── Center slot (e.g. process runner buttons) ───────────────────────── */
62
+
63
+ .bpmnkit-tabs-center {
64
+ position: absolute;
65
+ left: 50%;
66
+ top: 0;
67
+ height: 100%;
68
+ transform: translateX(-50%);
69
+ display: flex;
70
+ align-items: center;
71
+ pointer-events: none;
72
+ z-index: 1;
73
+ }
74
+
75
+ .bpmnkit-tabs-center > * {
76
+ pointer-events: all;
77
+ }
78
+
79
+ .bpmnkit-tab {
80
+ display: flex;
81
+ align-items: center;
82
+ gap: 6px;
83
+ padding: 0 10px 0 12px;
84
+ min-width: 80px;
85
+ max-width: 200px;
86
+ border-right: 1px solid var(--tabs-border);
87
+ cursor: pointer;
88
+ color: var(--tab-fg);
89
+ font-size: 12px;
90
+ white-space: nowrap;
91
+ position: relative;
92
+ flex-shrink: 0;
93
+ transition: background 0.1s;
94
+ }
95
+
96
+ .bpmnkit-tab:hover {
97
+ background: var(--tab-hover-bg);
98
+ }
99
+
100
+ .bpmnkit-tab.active {
101
+ background: var(--tab-active-bg);
102
+ color: var(--tab-active-fg);
103
+ border-bottom: 2px solid var(--tab-active-border);
104
+ }
105
+
106
+ .bpmnkit-tab-type {
107
+ font-size: 10px;
108
+ font-weight: 700;
109
+ text-transform: uppercase;
110
+ letter-spacing: 0.04em;
111
+ opacity: 0.7;
112
+ }
113
+
114
+ .bpmnkit-tab-type.bpmn { color: var(--tab-type-bpmn); }
115
+ .bpmnkit-tab-type.dmn { color: var(--tab-type-dmn); }
116
+ .bpmnkit-tab-type.feel { color: var(--tab-type-feel); }
117
+ .bpmnkit-tab-type.form { color: var(--tab-type-form); }
118
+
119
+ .bpmnkit-tab-name {
120
+ flex: 1;
121
+ overflow: hidden;
122
+ text-overflow: ellipsis;
123
+ }
124
+
125
+ .bpmnkit-tab-warn {
126
+ color: var(--tab-warn-fg);
127
+ font-size: 11px;
128
+ font-weight: 600;
129
+ flex-shrink: 0;
130
+ }
131
+
132
+ .bpmnkit-tab-close {
133
+ display: flex;
134
+ align-items: center;
135
+ justify-content: center;
136
+ width: 16px;
137
+ height: 16px;
138
+ border-radius: 3px;
139
+ font-size: 12px;
140
+ line-height: 1;
141
+ opacity: 0.5;
142
+ flex-shrink: 0;
143
+ }
144
+
145
+ .bpmnkit-tab-close:hover {
146
+ opacity: 1;
147
+ background: var(--tab-close-hover);
148
+ }
149
+
150
+ /* Content pane — fills remaining space below tabs */
151
+ .bpmnkit-tab-content {
152
+ position: absolute;
153
+ top: 36px;
154
+ left: 0;
155
+ right: 0;
156
+ bottom: 0;
157
+ overflow: hidden;
158
+ }
159
+
160
+ .bpmnkit-tab-pane {
161
+ position: absolute;
162
+ inset: 0;
163
+ overflow: hidden;
164
+ }
165
+
166
+ .bpmnkit-tab-pane.hidden {
167
+ display: none;
168
+ }
169
+
170
+ /* ── Welcome screen ──────────────────────────────────────────────────────── */
171
+
172
+ .bpmnkit-welcome {
173
+ position: absolute;
174
+ inset: 0;
175
+ display: flex;
176
+ align-items: center;
177
+ justify-content: center;
178
+ font-family: system-ui, -apple-system, sans-serif;
179
+ background: var(--welcome-bg, var(--bpmnkit-surface-2, #1e1e2e));
180
+ }
181
+
182
+ .bpmnkit-welcome[data-theme="light"] {
183
+ --welcome-bg: #f8f9fa;
184
+ --welcome-icon: var(--bpmnkit-accent-bright, #3b82f6);
185
+ --welcome-title: #111827;
186
+ --welcome-sub: #6b7280;
187
+ --welcome-btn-primary-bg: var(--bpmnkit-accent, #1a56db);
188
+ --welcome-btn-primary-fg: #ffffff;
189
+ --welcome-btn-secondary-bg: var(--bpmnkit-surface, #ffffff);
190
+ --welcome-btn-secondary-fg: #374151;
191
+ --welcome-btn-secondary-border: var(--bpmnkit-border, #d0d0e8);
192
+ }
193
+
194
+ .bpmnkit-welcome[data-theme="dark"] {
195
+ --welcome-bg: var(--bpmnkit-surface-2, #1e1e2e);
196
+ --welcome-icon: var(--bpmnkit-accent-bright, #89b4fa);
197
+ --welcome-title: #cdd6f4;
198
+ --welcome-sub: #6c7086;
199
+ --welcome-btn-primary-bg: var(--bpmnkit-accent-bright, #89b4fa);
200
+ --welcome-btn-primary-fg: var(--bpmnkit-surface-2, #1e1e2e);
201
+ --welcome-btn-secondary-bg: rgba(255,255,255,0.06);
202
+ --welcome-btn-secondary-fg: #bac2de;
203
+ --welcome-btn-secondary-border: rgba(255,255,255,0.12);
204
+ }
205
+
206
+ .bpmnkit-welcome-inner {
207
+ display: flex;
208
+ flex-direction: column;
209
+ align-items: center;
210
+ text-align: center;
211
+ width: 320px;
212
+ max-height: calc(100% - 48px);
213
+ padding: 32px 0;
214
+ overflow-y: auto;
215
+ scrollbar-width: none;
216
+ }
217
+
218
+ .bpmnkit-welcome-inner::-webkit-scrollbar { display: none; }
219
+
220
+ .bpmnkit-welcome-icon {
221
+ color: var(--welcome-icon);
222
+ margin-bottom: 20px;
223
+ opacity: 0.9;
224
+ }
225
+
226
+ .bpmnkit-welcome-icon svg {
227
+ width: 48px;
228
+ height: 48px;
229
+ }
230
+
231
+ .bpmnkit-welcome-title {
232
+ font-size: 20px;
233
+ font-weight: 700;
234
+ color: var(--welcome-title);
235
+ margin: 0 0 8px;
236
+ letter-spacing: -0.01em;
237
+ }
238
+
239
+ .bpmnkit-welcome-sub {
240
+ font-size: 13px;
241
+ color: var(--welcome-sub);
242
+ margin: 0 0 24px;
243
+ line-height: 1.5;
244
+ }
245
+
246
+ .bpmnkit-welcome-actions {
247
+ display: flex;
248
+ flex-direction: column;
249
+ gap: 8px;
250
+ width: 100%;
251
+ }
252
+
253
+ .bpmnkit-welcome-btn {
254
+ padding: 9px 20px;
255
+ border-radius: 6px;
256
+ font-size: 13px;
257
+ font-weight: 500;
258
+ font-family: inherit;
259
+ cursor: pointer;
260
+ border: 1px solid transparent;
261
+ transition: opacity 0.1s;
262
+ width: 100%;
263
+ }
264
+
265
+ .bpmnkit-welcome-btn.primary {
266
+ background: var(--welcome-btn-primary-bg);
267
+ color: var(--welcome-btn-primary-fg);
268
+ }
269
+ .bpmnkit-welcome-btn.primary:hover { opacity: 0.88; }
270
+
271
+ .bpmnkit-welcome-btn.secondary {
272
+ background: var(--welcome-btn-secondary-bg);
273
+ color: var(--welcome-btn-secondary-fg);
274
+ border-color: var(--welcome-btn-secondary-border);
275
+ }
276
+ .bpmnkit-welcome-btn.secondary:hover { opacity: 0.8; }
277
+ .bpmnkit-welcome-btn:disabled { opacity: 0.4; cursor: not-allowed; }
278
+ .bpmnkit-welcome-btn:disabled:hover { opacity: 0.4; }
279
+
280
+ .bpmnkit-welcome-recent-list {
281
+ width: 100%;
282
+ display: flex;
283
+ flex-direction: column;
284
+ gap: 4px;
285
+ margin-top: 4px;
286
+ }
287
+
288
+ .bpmnkit-welcome-divider {
289
+ width: 100%;
290
+ height: 1px;
291
+ background: var(--welcome-btn-secondary-border);
292
+ margin: 20px 0 16px;
293
+ }
294
+
295
+ .bpmnkit-welcome-examples-label {
296
+ font-size: 11px;
297
+ font-weight: 600;
298
+ text-transform: uppercase;
299
+ letter-spacing: 0.06em;
300
+ color: var(--welcome-sub);
301
+ margin-bottom: 8px;
302
+ align-self: flex-start;
303
+ }
304
+
305
+ .bpmnkit-welcome-examples {
306
+ display: flex;
307
+ flex-direction: column;
308
+ gap: 4px;
309
+ width: 100%;
310
+ }
311
+
312
+ .bpmnkit-welcome-example {
313
+ display: flex;
314
+ align-items: center;
315
+ gap: 10px;
316
+ padding: 9px 10px;
317
+ border-radius: 7px;
318
+ border: 1px solid var(--welcome-btn-secondary-border);
319
+ background: var(--welcome-btn-secondary-bg);
320
+ cursor: pointer;
321
+ text-align: left;
322
+ font-family: inherit;
323
+ transition: background 0.1s, border-color 0.1s;
324
+ }
325
+
326
+ .bpmnkit-welcome-example:hover {
327
+ border-color: var(--welcome-icon);
328
+ background: var(--welcome-example-hover, rgba(59,130,246,0.06));
329
+ }
330
+
331
+ .bpmnkit-welcome[data-theme="dark"] .bpmnkit-welcome-example:hover {
332
+ --welcome-example-hover: rgba(137,180,250,0.08);
333
+ }
334
+
335
+ .bpmnkit-welcome-example-badge {
336
+ flex-shrink: 0;
337
+ font-size: 9px;
338
+ font-weight: 700;
339
+ letter-spacing: 0.05em;
340
+ padding: 2px 5px;
341
+ border-radius: 3px;
342
+ text-transform: uppercase;
343
+ }
344
+
345
+ .bpmnkit-welcome-example-badge.bpmn { background: rgba(59,130,246,0.15); color: var(--bpmnkit-accent-bright, #3b82f6); }
346
+ .bpmnkit-welcome-example-badge.dmn { background: rgba(139,92,246,0.15); color: #8b5cf6; }
347
+ .bpmnkit-welcome-example-badge.feel { background: rgba(217,119,6,0.15); color: var(--bpmnkit-warn, #d97706); }
348
+ .bpmnkit-welcome-example-badge.form { background: rgba(16,185,129,0.15); color: var(--bpmnkit-success, #22c55e); }
349
+ .bpmnkit-welcome-example-badge.multi { background: rgba(249,115,22,0.15); color: #f97316; }
350
+
351
+ .bpmnkit-welcome[data-theme="dark"] .bpmnkit-welcome-example-badge.bpmn { color: var(--bpmnkit-accent-bright, #89b4fa); }
352
+ .bpmnkit-welcome[data-theme="dark"] .bpmnkit-welcome-example-badge.dmn { color: #cba6f7; }
353
+ .bpmnkit-welcome[data-theme="dark"] .bpmnkit-welcome-example-badge.feel { color: #fab387; }
354
+ .bpmnkit-welcome[data-theme="dark"] .bpmnkit-welcome-example-badge.form { color: #a6e3a1; }
355
+ .bpmnkit-welcome[data-theme="dark"] .bpmnkit-welcome-example-badge.multi { color: #fab387; }
356
+
357
+ .bpmnkit-welcome-example-text {
358
+ display: flex;
359
+ flex-direction: column;
360
+ gap: 2px;
361
+ flex: 1;
362
+ min-width: 0;
363
+ }
364
+
365
+ .bpmnkit-welcome-example-label {
366
+ font-size: 13px;
367
+ font-weight: 500;
368
+ color: var(--welcome-title);
369
+ white-space: nowrap;
370
+ overflow: hidden;
371
+ text-overflow: ellipsis;
372
+ }
373
+
374
+ .bpmnkit-welcome-example-desc {
375
+ font-size: 11px;
376
+ color: var(--welcome-sub);
377
+ white-space: nowrap;
378
+ overflow: hidden;
379
+ text-overflow: ellipsis;
380
+ }
381
+
382
+ .bpmnkit-welcome-example-arrow {
383
+ flex-shrink: 0;
384
+ color: var(--welcome-sub);
385
+ opacity: 0.5;
386
+ display: flex;
387
+ align-items: center;
388
+ }
389
+
390
+ .bpmnkit-welcome-example-arrow svg { width: 7px; height: 11px; }
391
+
392
+ /* ── Group tab chevron ───────────────────────────────────────────────────── */
393
+
394
+ .bpmnkit-tab-chevron {
395
+ display: flex;
396
+ align-items: center;
397
+ flex-shrink: 0;
398
+ opacity: 0.5;
399
+ }
400
+
401
+ .bpmnkit-tab-chevron svg {
402
+ width: 8px;
403
+ height: 5px;
404
+ }
405
+
406
+ /* ── Group tab dropdown (appended to document.body, position:fixed) ──────── */
407
+
408
+ .bpmnkit-tab-dropdown {
409
+ position: fixed;
410
+ display: none;
411
+ flex-direction: column;
412
+ min-width: 180px;
413
+ max-width: 280px;
414
+ border-radius: 0 0 6px 6px;
415
+ box-shadow: 0 6px 20px rgba(0,0,0,0.22);
416
+ z-index: 200;
417
+ overflow: hidden;
418
+ }
419
+
420
+ .bpmnkit-tab-dropdown.open { display: flex; }
421
+
422
+ .bpmnkit-tab-dropdown[data-theme="light"] {
423
+ background: var(--bpmnkit-surface-2, #eeeef8);
424
+ border: 1px solid var(--bpmnkit-border, #d0d0e8);
425
+ border-top: none;
426
+ }
427
+
428
+ .bpmnkit-tab-dropdown[data-theme="dark"] {
429
+ background: var(--bpmnkit-surface-2, #1e1e2e);
430
+ border: 1px solid #313244;
431
+ border-top: none;
432
+ }
433
+
434
+ .bpmnkit-tab-drop-item {
435
+ display: flex;
436
+ align-items: center;
437
+ gap: 6px;
438
+ padding: 7px 10px 7px 12px;
439
+ font-size: 12px;
440
+ font-family: system-ui, -apple-system, sans-serif;
441
+ cursor: pointer;
442
+ white-space: nowrap;
443
+ color: var(--tab-fg);
444
+ }
445
+
446
+ .bpmnkit-tab-drop-item:hover { background: var(--tab-hover-bg); }
447
+ .bpmnkit-tab-drop-item.active {
448
+ background: var(--tab-active-bg);
449
+ color: var(--tab-active-fg);
450
+ }
451
+
452
+ .bpmnkit-tab-dropdown[data-theme="light"] .bpmnkit-tab-drop-item {
453
+ color: #4b5563;
454
+ }
455
+ .bpmnkit-tab-dropdown[data-theme="light"] .bpmnkit-tab-drop-item:hover {
456
+ background: #e8edf2;
457
+ }
458
+ .bpmnkit-tab-dropdown[data-theme="light"] .bpmnkit-tab-drop-item.active {
459
+ background: #ffffff;
460
+ color: #1c1c1c;
461
+ }
462
+
463
+ .bpmnkit-tab-dropdown[data-theme="dark"] .bpmnkit-tab-drop-item {
464
+ color: #bac2de;
465
+ }
466
+ .bpmnkit-tab-dropdown[data-theme="dark"] .bpmnkit-tab-drop-item:hover {
467
+ background: #252535;
468
+ }
469
+ .bpmnkit-tab-dropdown[data-theme="dark"] .bpmnkit-tab-drop-item.active {
470
+ background: var(--bpmnkit-surface-2, #1e1e2e);
471
+ color: #cdd6f4;
472
+ }
473
+
474
+ .bpmnkit-tab-drop-name {
475
+ flex: 1;
476
+ overflow: hidden;
477
+ text-overflow: ellipsis;
478
+ }
479
+
480
+ /* ── Close confirmation dialog ────────────────────────────────────────────── */
481
+
482
+ .bpmnkit-close-overlay {
483
+ position: absolute;
484
+ inset: 0;
485
+ background: rgba(0, 0, 0, 0.35);
486
+ display: flex;
487
+ align-items: center;
488
+ justify-content: center;
489
+ z-index: 300;
490
+ }
491
+
492
+ .bpmnkit-close-dialog {
493
+ background: var(--cd-bg, #ffffff);
494
+ border: 1px solid var(--cd-border, var(--bpmnkit-panel-border, rgba(0,0,0,0.08)));
495
+ border-radius: 10px;
496
+ padding: 20px 24px;
497
+ width: min(400px, calc(100% - 48px));
498
+ box-shadow: 0 8px 32px rgba(0,0,0,0.18);
499
+ font-family: system-ui, -apple-system, sans-serif;
500
+ }
501
+
502
+ .bpmnkit-close-dialog[data-theme="light"] {
503
+ --cd-bg: #ffffff;
504
+ --cd-border: var(--bpmnkit-panel-border, rgba(0,0,0,0.08));
505
+ --cd-title: #111827;
506
+ --cd-body: #4b5563;
507
+ --cd-primary-bg: var(--bpmnkit-accent, #1a56db);
508
+ --cd-primary-fg: #ffffff;
509
+ --cd-secondary-bg: #f3f4f6;
510
+ --cd-secondary-fg: #374151;
511
+ --cd-secondary-hover: #e5e7eb;
512
+ --cd-ghost-fg: #6b7280;
513
+ --cd-ghost-hover: #f3f4f6;
514
+ }
515
+
516
+ .bpmnkit-close-dialog[data-theme="dark"] {
517
+ --cd-bg: var(--bpmnkit-surface-2, #1e1e2e);
518
+ --cd-border: rgba(255,255,255,0.1);
519
+ --cd-title: #cdd6f4;
520
+ --cd-body: #bac2de;
521
+ --cd-primary-bg: var(--bpmnkit-accent-bright, #89b4fa);
522
+ --cd-primary-fg: var(--bpmnkit-surface-2, #1e1e2e);
523
+ --cd-secondary-bg: rgba(255,255,255,0.06);
524
+ --cd-secondary-fg: #bac2de;
525
+ --cd-secondary-hover: rgba(255,255,255,0.1);
526
+ --cd-ghost-fg: #6c7086;
527
+ --cd-ghost-hover: rgba(255,255,255,0.05);
528
+ }
529
+
530
+ .bpmnkit-close-dialog-title {
531
+ font-size: 14px;
532
+ font-weight: 600;
533
+ color: var(--cd-title);
534
+ margin-bottom: 6px;
535
+ white-space: nowrap;
536
+ overflow: hidden;
537
+ text-overflow: ellipsis;
538
+ }
539
+
540
+ .bpmnkit-close-dialog-body {
541
+ font-size: 13px;
542
+ color: var(--cd-body);
543
+ line-height: 1.5;
544
+ margin-bottom: 18px;
545
+ }
546
+
547
+ .bpmnkit-close-dialog-actions {
548
+ display: flex;
549
+ gap: 8px;
550
+ justify-content: flex-end;
551
+ }
552
+
553
+ .bpmnkit-close-dialog-btn {
554
+ padding: 7px 14px;
555
+ border-radius: 6px;
556
+ font-size: 13px;
557
+ font-weight: 500;
558
+ font-family: inherit;
559
+ border: none;
560
+ cursor: pointer;
561
+ line-height: 1;
562
+ transition: background 0.1s, opacity 0.1s;
563
+ }
564
+
565
+ .bpmnkit-close-dialog-btn.ghost {
566
+ background: transparent;
567
+ color: var(--cd-ghost-fg);
568
+ }
569
+ .bpmnkit-close-dialog-btn.ghost:hover { background: var(--cd-ghost-hover); }
570
+
571
+ .bpmnkit-close-dialog-btn.secondary {
572
+ background: var(--cd-secondary-bg);
573
+ color: var(--cd-secondary-fg);
574
+ }
575
+ .bpmnkit-close-dialog-btn.secondary:hover { background: var(--cd-secondary-hover); }
576
+
577
+ .bpmnkit-close-dialog-btn.primary {
578
+ background: var(--cd-primary-bg);
579
+ color: var(--cd-primary-fg);
580
+ }
581
+ .bpmnkit-close-dialog-btn.primary:hover { opacity: 0.88; }
582
+
583
+ /* ── Raw source pane ─────────────────────────────────────────────────────── */
584
+
585
+ .bpmnkit-raw-pane {
586
+ position: absolute;
587
+ inset: 0;
588
+ z-index: 10;
589
+ overflow: auto;
590
+ background: var(--raw-bg, var(--bpmnkit-surface-2, #1e1e2e));
591
+ pointer-events: auto;
592
+ }
593
+
594
+ .bpmnkit-raw-pane[data-theme="light"] { --raw-bg: #f8f9fa; }
595
+
596
+ .bpmnkit-raw-copy-btn {
597
+ position: absolute;
598
+ top: 10px;
599
+ right: 14px;
600
+ z-index: 1;
601
+ padding: 4px 10px;
602
+ font-size: 11px;
603
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
604
+ background: rgba(255,255,255,0.1);
605
+ color: var(--raw-fg, #cdd6f4);
606
+ border: 1px solid rgba(255,255,255,0.2);
607
+ border-radius: 4px;
608
+ cursor: pointer;
609
+ }
610
+ .bpmnkit-raw-copy-btn:hover { background: rgba(255,255,255,0.18); }
611
+ .bpmnkit-raw-pane[data-theme="light"] .bpmnkit-raw-copy-btn {
612
+ background: rgba(0,0,0,0.06);
613
+ color: #374151;
614
+ border-color: rgba(0,0,0,0.15);
615
+ }
616
+ .bpmnkit-raw-pane[data-theme="light"] .bpmnkit-raw-copy-btn:hover { background: rgba(0,0,0,0.12); }
617
+
618
+ .bpmnkit-raw-content {
619
+ margin: 0;
620
+ padding: 16px 20px;
621
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
622
+ font-size: 12px;
623
+ line-height: 1.6;
624
+ color: var(--raw-fg, #cdd6f4);
625
+ white-space: pre;
626
+ tab-size: 2;
627
+ user-select: text;
628
+ }
629
+
630
+ .bpmnkit-raw-pane[data-theme="light"] .bpmnkit-raw-content { --raw-fg: #374151; }
631
+
632
+ `.trim();
633
+ const STYLE_ID = "bpmn-sdk-tabs-css";
634
+ export function injectTabsStyles() {
635
+ if (document.getElementById(STYLE_ID))
636
+ return;
637
+ const style = document.createElement("style");
638
+ style.id = STYLE_ID;
639
+ style.textContent = TABS_CSS;
640
+ document.head.appendChild(style);
641
+ }
642
+ //# sourceMappingURL=css.js.map
@@ -0,0 +1,71 @@
1
+ import type { DmnDefinitions, FormDefinition } from "@bpmnkit/core";
2
+ /** A resolved file that can be opened in a tab. */
3
+ export type ResolvedFile = {
4
+ type: "bpmn";
5
+ xml: string;
6
+ name?: string;
7
+ } | {
8
+ type: "dmn";
9
+ defs: DmnDefinitions;
10
+ name?: string;
11
+ } | {
12
+ type: "form";
13
+ form: FormDefinition;
14
+ name?: string;
15
+ };
16
+ /**
17
+ * Pluggable interface for resolving DMN decision IDs and Form IDs to their content.
18
+ *
19
+ * The default implementation (`InMemoryFileResolver`) keeps all files in-memory.
20
+ * Replace with a custom implementation for other environments:
21
+ * - Local file system (Electron / offline app): read from disk
22
+ * - SaaS: fetch from API/database
23
+ * - Version control: fetch from Git object store
24
+ */
25
+ export interface FileResolver {
26
+ /**
27
+ * Resolve a DMN decision ID to its parent DmnDefinitions.
28
+ * Returns `null` if the decision is not registered.
29
+ */
30
+ resolveDmn(decisionId: string): DmnDefinitions | null;
31
+ /**
32
+ * Resolve a Camunda Form ID to its FormDefinition.
33
+ * Returns `null` if the form is not registered.
34
+ */
35
+ resolveForm(formId: string): FormDefinition | null;
36
+ /**
37
+ * Resolve a BPMN process/definition ID to its XML string.
38
+ * Returns `null` if the process is not registered.
39
+ */
40
+ resolveBpmn(processId: string): string | null;
41
+ }
42
+ /**
43
+ * In-memory implementation of `FileResolver`.
44
+ *
45
+ * Register files by their IDs; tabs plugin will resolve references against this store.
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * const resolver = new InMemoryFileResolver();
50
+ * resolver.registerDmn(dmnDefs); // keyed by each decision's id
51
+ * resolver.registerForm(formDef); // keyed by form.id
52
+ * resolver.registerBpmn("proc_1", xmlString);
53
+ *
54
+ * const tabs = createTabsPlugin({ resolver });
55
+ * ```
56
+ */
57
+ export declare class InMemoryFileResolver implements FileResolver {
58
+ private readonly _dmn;
59
+ private readonly _forms;
60
+ private readonly _bpmn;
61
+ /** Register a DMN definitions object. Each decision's id is indexed. */
62
+ registerDmn(defs: DmnDefinitions): void;
63
+ /** Register a Camunda Form definition. */
64
+ registerForm(form: FormDefinition): void;
65
+ /** Register a BPMN XML by process/definition ID. */
66
+ registerBpmn(id: string, xml: string): void;
67
+ resolveDmn(decisionId: string): DmnDefinitions | null;
68
+ resolveForm(formId: string): FormDefinition | null;
69
+ resolveBpmn(processId: string): string | null;
70
+ }
71
+ //# sourceMappingURL=file-resolver.d.ts.map