create-aiaui-module 0.1.1-TEST → 0.1.2-TEST

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 (30) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/runtime/_runtime/host.py +7 -15
  4. package/templates/JobInformation/CUSTOMIZATION.md +98 -148
  5. package/templates/JobInformation/README.md +13 -0
  6. package/templates/JobInformation/api.py +63 -19
  7. package/templates/JobInformation/resources/dist/modules.js +1548 -954
  8. package/templates/JobInformation/resources/src/contract.ts +109 -37
  9. package/templates/JobInformation/resources/src/customization.ts +15 -10
  10. package/templates/JobInformation/resources/src/defaults/DefaultPanel.vue +122 -15
  11. package/templates/JobInformation/resources/src/defaults/Icons.vue +49 -0
  12. package/templates/JobInformation/resources/src/defaults/InputCarriers.vue +12 -9
  13. package/templates/JobInformation/resources/src/defaults/JobBottom.vue +32 -0
  14. package/templates/JobInformation/resources/src/defaults/JobCard.vue +48 -0
  15. package/templates/JobInformation/resources/src/defaults/JobHeader.vue +41 -0
  16. package/templates/JobInformation/resources/src/defaults/JobMiddle.vue +41 -0
  17. package/templates/JobInformation/resources/src/defaults/JobName.vue +9 -0
  18. package/templates/JobInformation/resources/src/defaults/LotId.vue +14 -0
  19. package/templates/JobInformation/resources/src/defaults/OutputCarriers.vue +15 -8
  20. package/templates/JobInformation/resources/src/defaults/Recipe.vue +6 -12
  21. package/templates/JobInformation/resources/src/defaults/Status.vue +29 -0
  22. package/templates/JobInformation/resources/src/defaults/Timeline.vue +57 -14
  23. package/templates/JobInformation/resources/src/defaults/board-data.ts +36 -0
  24. package/templates/JobInformation/resources/src/defaults/config-defaults.ts +36 -0
  25. package/templates/JobInformation/resources/src/defaults/format.ts +51 -0
  26. package/templates/JobInformation/resources/src/defaults/slots.ts +16 -6
  27. package/templates/JobInformation/resources/src/defaults/styles.css +576 -47
  28. package/templates/JobInformation/resources/src/index.ts +10 -18
  29. package/templates/JobInformation/resources/src/bus.ts +0 -38
  30. package/templates/JobInformation/resources/src/defaults/Header.vue +0 -12
@@ -1,90 +1,619 @@
1
- .aia-job-information {
1
+ /* Built-in default panel styles (ported from the legacy Job Information page). */
2
+
3
+ .legacy-jobs {
2
4
  display: grid;
3
- gap: 16px;
4
- padding: 20px;
5
- color: var(--aia-text, #222);
6
- font: inherit;
5
+ gap: 20px;
6
+ padding: 28px;
7
7
  }
8
8
 
9
- .aiaji-slot h3 {
10
- margin: 0 0 8px;
11
- font-size: 0.85rem;
12
- letter-spacing: 0.04em;
9
+ .legacy-toolbar {
10
+ display: flex;
11
+ align-items: center;
12
+ justify-content: space-between;
13
+ gap: 12px;
14
+ flex-wrap: wrap;
15
+ min-height: 42px;
16
+ }
17
+
18
+ .legacy-search:focus-within {
19
+ border-color: color-mix(in srgb, var(--workspace-accent) 40%, #ffffff);
20
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--workspace-accent) 8%, transparent);
21
+ }
22
+
23
+ .legacy-filters {
24
+ display: flex;
25
+ align-items: center;
26
+ gap: 8px;
27
+ font-size: 13px;
28
+ }
29
+
30
+ .legacy-search {
31
+ display: inline-flex;
32
+ align-items: stretch;
33
+ gap: 6px;
34
+ height: 30px;
35
+ color: var(--apple-muted, #62626b);
36
+ border: 1px solid rgba(14, 18, 32, 0.07);
37
+ border-radius: 8px;
38
+ background: var(--apple-card, #ffffff);
39
+ box-sizing: border-box;
40
+ padding: 0;
41
+ }
42
+
43
+ .legacy-search > svg {
44
+ align-self: center;
45
+ margin-left: 10px;
13
46
  }
14
47
 
15
- .aiaji-slot button {
48
+ .legacy-search input {
49
+ flex: none;
50
+ min-width: 0;
16
51
  font: inherit;
52
+ line-height: 28px;
53
+ border: 0;
54
+ outline: 0;
55
+ padding: 0 10px 0 0;
56
+ width: 220px;
57
+ color: var(--apple-text, #101014);
58
+ background: transparent;
59
+ }
60
+
61
+ .legacy-filter,
62
+ .legacy-refresh {
63
+ display: inline-flex;
64
+ align-items: center;
65
+ justify-content: center;
66
+ gap: 6px;
67
+ height: 30px;
68
+ min-height: 30px;
69
+ box-sizing: border-box;
70
+ font: inherit;
71
+ color: var(--apple-text, #101014);
72
+ background: var(--apple-card, #ffffff);
73
+ border: 1px solid rgba(14, 18, 32, 0.07);
74
+ border-radius: 8px;
75
+ padding: 0 10px;
17
76
  cursor: pointer;
77
+ line-height: 28px;
78
+ appearance: none;
79
+ vertical-align: middle;
80
+ }
81
+
82
+ .legacy-filter:active,
83
+ .legacy-refresh:hover {
84
+ background: var(--apple-canvas, #f5f5f7);
85
+ }
86
+
87
+ .legacy-filter:disabled,
88
+ .legacy-refresh:disabled {
89
+ opacity: 0.75;
90
+ cursor: not-allowed;
91
+ }
92
+
93
+ .legacy-card {
94
+ position: relative;
95
+ border: 1px solid rgba(14, 18, 32, 0.06);
96
+ border-radius: 14px;
97
+ background: var(--apple-card, #ffffff);
98
+ box-shadow: 0 1px 2px rgba(14, 18, 32, 0.04), 0 0 0 1px rgba(14, 18, 32, 0.02);
99
+ min-width: 0;
100
+ overflow: hidden;
18
101
  }
19
102
 
20
- .aiaji-header {
103
+
104
+
105
+ .legacy-job-head {
21
106
  display: flex;
22
107
  align-items: center;
23
108
  justify-content: space-between;
24
109
  gap: 12px;
25
- border-bottom: 1px solid var(--aia-border, #e5e7eb);
26
- padding-bottom: 12px;
110
+ flex-wrap: wrap;
111
+ padding: 22px 20px 14px;
112
+ }
113
+
114
+ .legacy-job-main {
115
+ display: flex;
116
+ align-items: center;
117
+ gap: 10px;
118
+ min-width: 0;
119
+ flex-wrap: wrap;
120
+ }
121
+
122
+ .legacy-job-name {
123
+ display: inline-flex;
124
+ align-items: center;
125
+ gap: 8px;
126
+ }
127
+
128
+ .legacy-job-main h2,
129
+ .legacy-job-name {
130
+ margin: 0;
131
+ display: inline-flex;
132
+ align-items: center;
133
+ gap: 8px;
134
+ font-size: 17px;
135
+ line-height: 1.2;
136
+ font-weight: 500;
137
+ font-style: italic;
138
+ letter-spacing: 0.01em;
139
+ color: var(--apple-text, #101014);
140
+ }
141
+
142
+ .legacy-job-main h2::before,
143
+ .legacy-job-name::before {
144
+ content: '';
145
+ width: 9px;
146
+ height: 9px;
147
+ border-radius: 999px;
148
+ flex: none;
149
+ background: var(--workspace-accent);
150
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--workspace-accent) 18%, transparent);
27
151
  }
28
152
 
29
- .aiaji-crumb {
153
+ .legacy-lot {
154
+ display: inline-flex;
155
+ align-items: center;
156
+ gap: 6px;
157
+ font-size: 12px;
158
+ line-height: 1;
159
+ color: var(--workspace-accent);
160
+ background: color-mix(in srgb, var(--workspace-accent) 6%, #ffffff);
161
+ border: 1px solid color-mix(in srgb, var(--workspace-accent) 14%, #ffffff);
162
+ border-radius: 10px;
163
+ padding: 5px 10px 5px 8px;
164
+ vertical-align: middle;
165
+ box-shadow: 0 1px 1px rgba(14, 18, 32, 0.03);
166
+ }
167
+
168
+ .legacy-lot-label {
169
+ color: var(--apple-muted, #62626b);
30
170
  font-weight: 600;
171
+ letter-spacing: 0.04em;
172
+ }
173
+
174
+ .legacy-lot-value {
175
+ color: var(--apple-text, #101014);
176
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
177
+ font-size: 12px;
178
+ letter-spacing: 0.02em;
31
179
  }
32
180
 
33
- .aiaji-state {
34
- border: 1px solid var(--aia-border, #e5e7eb);
181
+ .legacy-chip {
182
+ display: inline-flex;
183
+ align-items: center;
184
+ justify-content: center;
185
+ box-sizing: border-box;
186
+ min-width: 116px;
187
+ width: 116px;
188
+ height: 26px;
189
+ text-align: center;
190
+ font-size: 11px;
191
+ font-weight: 700;
192
+ letter-spacing: 0.06em;
193
+ text-transform: uppercase;
194
+ line-height: 1;
35
195
  border-radius: 999px;
36
- padding: 4px 12px;
37
- color: var(--aia-accent, #2563eb);
196
+ border: 1px solid transparent;
197
+ white-space: nowrap;
198
+ overflow: hidden;
199
+ text-overflow: ellipsis;
200
+ }
201
+
202
+ .legacy-chip-default {
203
+ color: #5b6472;
204
+ background: #f1f3f7;
205
+ border-color: #e2e5ec;
206
+ }
207
+
208
+ /* Executing / Running → 主蓝 */
209
+ .legacy-chip-executing {
210
+ color: #1d4ed8;
211
+ background: #e6efff;
212
+ border-color: color-mix(in srgb, #2563eb 12%, #ffffff);
213
+ }
214
+
215
+ /* Setup → 浅蓝 */
216
+ .legacy-chip-setup {
217
+ color: #0369a1;
218
+ background: #eaf5fd;
219
+ border-color: color-mix(in srgb, #0ea5e9 14%, #ffffff);
220
+ }
221
+
222
+ .legacy-chip-complete {
223
+ color: #166534;
224
+ background: #ecfdf3;
225
+ border-color: #b7edd0;
226
+ }
227
+
228
+ /* ── card body: left carriers | timeline | right carriers ── */
229
+
230
+ .legacy-body {
231
+ display: flex;
232
+ align-items: stretch;
233
+ gap: 18px;
234
+ padding: 22px 20px 24px;
235
+ }
236
+
237
+ .legacy-body > .legacy-carriers {
238
+ flex: 0 0 auto;
239
+ }
240
+
241
+ .legacy-body > .legacy-timeline {
242
+ flex: 1 1 0;
243
+ min-width: 0;
244
+ }
245
+
246
+ .legacy-carriers {
247
+ display: flex;
248
+ flex-direction: column;
249
+ justify-content: flex-start;
250
+ gap: 12px;
251
+ min-width: 0;
252
+ height: 124px;
253
+ padding: 14px 16px;
254
+ border: 1px solid rgba(14, 18, 32, 0.035);
255
+ border-radius: 12px;
256
+ background: #fbfbfc;
257
+ box-shadow:
258
+ 0 0 0 1px rgba(14, 18, 32, 0.02),
259
+ 0 1px 2px rgba(14, 18, 32, 0.02);
260
+ }
261
+
262
+ .legacy-carriers-out {
263
+ align-items: stretch;
264
+ }
265
+
266
+ .legacy-carriers-label {
267
+ display: inline-flex;
268
+ align-items: center;
269
+ gap: 7px;
270
+ font-size: 11px;
271
+ font-weight: 700;
272
+ letter-spacing: 0.08em;
273
+ color: var(--apple-muted, #62626b);
274
+ white-space: nowrap;
275
+ }
276
+
277
+ .legacy-carriers-label::before {
278
+ content: '';
279
+ display: inline-block;
280
+ width: 3px;
281
+ height: 13px;
282
+ border-radius: 2px;
283
+ background: var(--workspace-accent);
38
284
  }
39
285
 
40
- .aiaji-carriers {
41
- border: 1px solid var(--aia-border, #e5e7eb);
286
+ .legacy-carriers-label::after {
287
+ content: '';
288
+ display: inline-block;
289
+ flex: 1;
290
+ min-width: 8px;
291
+ height: 0;
292
+ border-bottom: 2px dotted color-mix(in srgb, var(--workspace-border) 70%, #ffffff);
293
+ }
294
+
295
+ .legacy-carriers-list {
296
+ flex: 1;
297
+ min-width: 0;
298
+ max-width: 100%;
299
+ display: grid;
300
+ place-items: center;
301
+ }
302
+
303
+ .legacy-carrier-chip {
304
+ display: block;
305
+ max-width: 100%;
306
+ font-size: 12px;
307
+ color: var(--apple-text, #101014);
308
+ background: var(--apple-canvas, #f5f5f7);
309
+ border: 1px solid var(--workspace-border);
42
310
  border-radius: 8px;
43
- padding: 12px;
311
+ padding: 3px 9px;
312
+ white-space: nowrap;
313
+ overflow: hidden;
314
+ text-overflow: ellipsis;
44
315
  }
45
316
 
46
- .aiaji-carriers ul {
317
+ .legacy-carrier-empty {
318
+ font-size: 12px;
319
+ color: var(--apple-muted, #9a9aa4);
320
+ }
321
+
322
+ .legacy-timeline {
323
+ display: grid;
324
+ grid-template-columns: repeat(4, minmax(0, 1fr)) max-content;
325
+ list-style: none;
47
326
  margin: 0;
48
- padding-left: 20px;
327
+ padding: 22px 18px 14px;
328
+ border: 1px solid rgba(14, 18, 32, 0.035);
329
+ border-radius: 12px;
330
+ background: #ffffff;
331
+ box-shadow:
332
+ 0 0 0 1px rgba(14, 18, 32, 0.02),
333
+ 0 1px 2px rgba(14, 18, 32, 0.02);
49
334
  }
50
335
 
51
- .aiaji-timeline ol {
336
+ .legacy-timeline li {
337
+ min-width: 0;
338
+ position: relative;
52
339
  display: flex;
53
- flex-wrap: wrap;
54
- gap: 8px;
55
- margin: 0;
56
- padding: 0;
57
- list-style: none;
340
+ flex-direction: column;
341
+ align-items: flex-start;
342
+ font-size: 12px;
343
+ animation: legacy-node-in 0.45s both;
58
344
  }
59
345
 
60
- .aiaji-timeline li {
61
- border: 1px solid var(--aia-border, #e5e7eb);
62
- border-radius: 999px;
63
- padding: 6px 12px;
346
+ .legacy-timeline li:nth-child(2) {
347
+ animation-delay: 0.06s;
348
+ }
349
+ .legacy-timeline li:nth-child(3) {
350
+ animation-delay: 0.12s;
351
+ }
352
+ .legacy-timeline li:nth-child(4) {
353
+ animation-delay: 0.18s;
354
+ }
355
+ .legacy-timeline li:nth-child(5) {
356
+ animation-delay: 0.24s;
64
357
  }
65
358
 
66
- .aiaji-timeline li.aiaji-active {
67
- border-color: var(--aia-accent, #2563eb);
68
- color: var(--aia-accent, #2563eb);
359
+ @keyframes legacy-node-in {
360
+ from {
361
+ opacity: 0;
362
+ transform: translateY(8px);
363
+ }
364
+ to {
365
+ opacity: 1;
366
+ transform: none;
367
+ }
69
368
  }
70
369
 
71
- .aiaji-recipe {
370
+ .legacy-timeline li::after {
371
+ content: '';
372
+ position: absolute;
373
+ height: 4px;
374
+ top: 16px;
375
+ left: 42px;
376
+ right: 6px;
377
+ border-radius: 2px;
378
+ background-image: repeating-linear-gradient(
379
+ 90deg,
380
+ #dfe3ea 0 10px,
381
+ #e7ebf1 10px 20px
382
+ );
383
+ background-size: 20px 4px;
384
+ }
385
+
386
+ @keyframes legacy-connector-flow {
387
+ to {
388
+ background-position: 20px 0;
389
+ }
390
+ }
391
+
392
+ .legacy-timeline li:last-child::after {
393
+ display: none;
394
+ }
395
+
396
+ /* active → pending(即将进入)静态,蓝色弱条纹 */
397
+ .legacy-step-active::after {
398
+ background-image: repeating-linear-gradient(
399
+ 90deg,
400
+ color-mix(in srgb, var(--workspace-accent) 55%, #ffffff) 0 10px,
401
+ color-mix(in srgb, var(--workspace-accent) 24%, #ffffff) 10px 20px
402
+ );
403
+ }
404
+
405
+ /* pending → pending 静态,中性灰条纹 */
406
+ .legacy-step-pending::after {
407
+ background-image: repeating-linear-gradient(90deg, #dfe3ea 0 10px, #e7ebf1 10px 20px);
408
+ }
409
+
410
+ .legacy-step-symbol-empty::after {
411
+ content: '';
412
+ width: 6px;
413
+ height: 6px;
414
+ border-radius: 999px;
415
+ background: #c9cfda;
416
+ }
417
+
418
+ .legacy-step-symbol {
72
419
  display: grid;
73
- gap: 10px;
74
- border: 1px solid var(--aia-border, #e5e7eb);
75
- border-radius: 8px;
76
- padding: 12px;
420
+ place-items: center;
421
+ z-index: 1;
422
+ width: 36px;
423
+ height: 36px;
424
+ border-radius: 10px;
425
+ color: #526176;
426
+ background: #f3f5f9;
427
+ border: 1px solid rgba(14, 18, 32, 0.06);
428
+ box-shadow: 0 1px 1px rgba(14, 18, 32, 0.03);
429
+ margin-bottom: 9px;
430
+ }
431
+
432
+ .legacy-step-pending .legacy-step-symbol {
433
+ background: transparent;
434
+ border-color: rgba(14, 18, 32, 0.04);
435
+ color: #9aa3b2;
436
+ box-shadow: none;
437
+ }
438
+
439
+ /* done → green */
440
+ .legacy-step-done .legacy-step-symbol {
441
+ color: #16a34a;
442
+ background: #ecfdf3;
443
+ border-color: #bbf3d1;
444
+ }
445
+
446
+ .legacy-step-done .legacy-step-label {
447
+ color: #15803d;
77
448
  }
78
449
 
79
- .aiaji-meta,
80
- .aiaji-recipe-row {
450
+ .legacy-step-done::after {
451
+ background-image: repeating-linear-gradient(90deg, #8fd3ac 0 10px, #b9e6cc 10px 20px);
452
+ animation: legacy-connector-flow 1.1s linear infinite;
453
+ }
454
+
455
+ .legacy-step-duration {
456
+ position: absolute;
457
+ top: -12px;
458
+ left: calc(21px + (100% - 42px) / 2);
459
+ transform: translateX(-50%);
460
+ font-size: 10px;
461
+ line-height: 1.4;
462
+ font-variant-numeric: tabular-nums;
463
+ font-weight: 600;
464
+ color: #15803d;
465
+ background: #f6fdf8;
466
+ border: 1px solid rgba(22, 163, 74, 0.16);
467
+ border-radius: 999px;
468
+ padding: 1px 8px;
469
+ box-shadow: 0 2px 4px rgba(21, 128, 61, 0.08);
470
+ white-space: nowrap;
471
+ z-index: 2;
472
+ }
473
+
474
+ .legacy-step-duration::after {
475
+ content: '';
476
+ position: absolute;
477
+ left: 50%;
478
+ top: 100%;
479
+ width: 7px;
480
+ height: 7px;
481
+ background: #f6fdf8;
482
+ border-right: 1px solid #cfe8d8;
483
+ border-bottom: 1px solid #cfe8d8;
484
+ transform: translate(-50%, -3.5px) rotate(45deg);
485
+ }
486
+
487
+ .legacy-step-active .legacy-step-symbol {
488
+ color: var(--workspace-accent);
489
+ background: color-mix(in srgb, var(--workspace-accent) 8%, #ffffff);
490
+ border-color: color-mix(in srgb, var(--workspace-accent) 18%, #ffffff);
491
+ animation: legacy-pulse 2s ease-in-out infinite;
492
+ }
493
+
494
+ @keyframes legacy-pulse {
495
+ 0%,
496
+ 100% {
497
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--workspace-accent) 6%, transparent);
498
+ }
499
+ 50% {
500
+ box-shadow: 0 0 0 8px color-mix(in srgb, var(--workspace-accent) 10%, transparent);
501
+ }
502
+ }
503
+
504
+ .legacy-step-active .legacy-step-label {
505
+ color: var(--workspace-accent);
506
+ }
507
+
508
+ .legacy-step-pending .legacy-step-label {
509
+ color: #9aa3b2;
510
+ }
511
+
512
+ .legacy-step-label {
513
+ color: var(--apple-muted, #62626b);
514
+ line-height: 18px;
515
+ overflow-wrap: anywhere;
516
+ }
517
+
518
+ .legacy-step-time {
519
+ color: var(--apple-text, #101014);
520
+ font-variant-numeric: tabular-nums;
521
+ margin-top: 3px;
522
+ }
523
+
524
+ .legacy-step-time {
525
+ position: relative;
526
+ }
527
+
528
+ .legacy-step-time-hoverable {
529
+ cursor: default;
530
+ outline: 0;
531
+ }
532
+
533
+ .legacy-step-time-hoverable:hover .legacy-step-popover,
534
+ .legacy-step-time-hoverable:focus-visible .legacy-step-popover,
535
+ .legacy-step-time-hoverable:focus-within .legacy-step-popover {
536
+ opacity: 1;
537
+ visibility: visible;
538
+ transform: translate(-50%, 0);
539
+ }
540
+
541
+ .legacy-step-popover {
542
+ position: absolute;
543
+ left: 50%;
544
+ bottom: calc(100% + 6px);
545
+ transform: translate(-50%, 4px);
546
+ background: #172033;
547
+ color: #ffffff;
548
+ font-size: 11px;
549
+ font-variant-numeric: tabular-nums;
550
+ line-height: 1;
551
+ padding: 5px 9px;
552
+ border-radius: 7px;
553
+ white-space: nowrap;
554
+ opacity: 0;
555
+ visibility: hidden;
556
+ transition:
557
+ opacity 0.16s ease,
558
+ transform 0.16s ease,
559
+ visibility 0.16s;
560
+ pointer-events: none;
561
+ z-index: 5;
562
+ }
563
+
564
+ .legacy-step-popover::after {
565
+ content: '';
566
+ position: absolute;
567
+ left: 50%;
568
+ top: 100%;
569
+ width: 7px;
570
+ height: 7px;
571
+ background: #172033;
572
+ transform: translateX(-50%) rotate(45deg) translate(-3px, -3px);
573
+ }
574
+
575
+ /* ── slim production progress strip ── */
576
+
577
+ .legacy-progress {
81
578
  display: flex;
82
- flex-wrap: wrap;
579
+ align-items: center;
83
580
  gap: 12px;
581
+ border-top: 1px solid var(--workspace-border);
582
+ padding: 14px 20px 16px;
583
+ font-size: 13px;
584
+ background: linear-gradient(90deg, #f9fafd 0%, #ffffff 45%);
585
+ }
586
+
587
+ .legacy-recipe-label {
588
+ display: inline-flex;
84
589
  align-items: center;
85
- justify-content: space-between;
590
+ gap: 8px;
591
+ font-size: 11px;
592
+ font-weight: 700;
593
+ letter-spacing: 0.1em;
594
+ text-transform: uppercase;
595
+ color: var(--apple-muted, #62626b);
86
596
  }
87
597
 
88
- .aiaji-recipe-name {
89
- font-weight: 600;
598
+
599
+
600
+ .legacy-recipe {
601
+ color: var(--apple-text, #101014);
602
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
603
+ font-size: 12px;
604
+ font-variant-numeric: tabular-nums;
605
+ letter-spacing: 0.02em;
606
+ overflow-wrap: anywhere;
607
+ }
608
+
609
+ @media (max-width: 900px) {
610
+ .legacy-body {
611
+ grid-template-columns: minmax(0, 1fr);
612
+ }
613
+ .legacy-timeline {
614
+ grid-template-columns: repeat(3, minmax(0, 1fr));
615
+ }
616
+ .legacy-timeline li::after {
617
+ display: none;
618
+ }
90
619
  }
@@ -1,9 +1,8 @@
1
1
  import { createApp, type App } from "vue";
2
2
  import DefaultPanel from "./defaults/DefaultPanel.vue";
3
- import { defaultSlots, slotOrder } from "./defaults/slots";
3
+ import { defaultSlots } from "./defaults/slots";
4
4
  import { customization } from "./customization";
5
- import { createBus } from "./bus";
6
- import type { HostModuleContext, ModuleContext } from "./contract";
5
+ import type { ModuleContext, HostModuleContext } from "./contract";
7
6
  import defaultStyles from "./defaults/styles.css?inline";
8
7
 
9
8
  let app: App | null = null;
@@ -16,28 +15,21 @@ function ensureStyles() {
16
15
  document.head.appendChild(styleElement);
17
16
  }
18
17
 
18
+ /**
19
+ * The one entry point the host loads. Slot resolution happens inside the
20
+ * defaults; `customization.slots` may override any card region or leaf.
21
+ */
19
22
  export function mount(container: HTMLElement, context: HostModuleContext) {
20
23
  context.place({ kind: "route", path: "/jobs", label: "Jobs", order: 20 });
21
-
22
- // One bus per mount: every slot component of this mount (built-in, custom,
23
- // or full-mode) shares it via `context.bus`, and it dies on unmount.
24
- const moduleContext: ModuleContext = { ...context, bus: createBus() };
25
-
26
- if (customization.mode === "full") {
27
- return customization.mount(container, moduleContext);
28
- }
29
-
30
24
  ensureStyles();
31
- const slots = { ...defaultSlots, ...(customization.slots ?? {}) };
32
- app = createApp(DefaultPanel, { context: moduleContext, slots, slotOrder });
25
+
26
+ const moduleContext: ModuleContext = context;
27
+ const slotMap = { ...defaultSlots, ...(customization.slots ?? {}) };
28
+ app = createApp(DefaultPanel, { context: moduleContext, slotMap });
33
29
  app.mount(container);
34
30
  }
35
31
 
36
32
  export function unmount() {
37
- if (customization.mode === "full") {
38
- customization.unmount();
39
- return;
40
- }
41
33
  app?.unmount();
42
34
  app = null;
43
35
  styleElement?.remove();