openxiangda 2.0.0-alpha.2 → 2.0.0-alpha.21

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 (88) hide show
  1. package/bin/run.js +6 -1
  2. package/dist/browser/AuthoritativeSelector.d.ts.map +1 -1
  3. package/dist/browser/AuthoritativeSelector.js +4 -2
  4. package/dist/browser/AuthoritativeSelector.js.map +1 -1
  5. package/dist/browser/Shell.d.ts.map +1 -1
  6. package/dist/browser/Shell.js +213 -56
  7. package/dist/browser/Shell.js.map +1 -1
  8. package/dist/browser/admin-contributions.d.ts +66 -0
  9. package/dist/browser/admin-contributions.d.ts.map +1 -0
  10. package/dist/browser/admin-contributions.js +196 -0
  11. package/dist/browser/admin-contributions.js.map +1 -0
  12. package/dist/browser/application.d.ts +7 -1
  13. package/dist/browser/application.d.ts.map +1 -1
  14. package/dist/browser/application.js +68 -23
  15. package/dist/browser/application.js.map +1 -1
  16. package/dist/browser/components/platform-fields/SubtableField.js +3 -3
  17. package/dist/browser/components/platform-fields/SubtableField.js.map +1 -1
  18. package/dist/browser/components/platform-fields/resource-query.d.ts +0 -1
  19. package/dist/browser/components/platform-fields/resource-query.d.ts.map +1 -1
  20. package/dist/browser/components/platform-fields/resource-query.js +7 -8
  21. package/dist/browser/components/platform-fields/resource-query.js.map +1 -1
  22. package/dist/browser/components/resource/GeneratedResourceCrud.d.ts.map +1 -1
  23. package/dist/browser/components/resource/GeneratedResourceCrud.js +134 -46
  24. package/dist/browser/components/resource/GeneratedResourceCrud.js.map +1 -1
  25. package/dist/browser/components/resource/StandardResourcePages.d.ts +3 -2
  26. package/dist/browser/components/resource/StandardResourcePages.d.ts.map +1 -1
  27. package/dist/browser/components/resource/StandardResourcePages.js +13 -13
  28. package/dist/browser/components/resource/StandardResourcePages.js.map +1 -1
  29. package/dist/browser/components/resource/SurfaceFields.d.ts.map +1 -1
  30. package/dist/browser/components/resource/SurfaceFields.js +6 -2
  31. package/dist/browser/components/resource/SurfaceFields.js.map +1 -1
  32. package/dist/browser/components/workflow/StandardWorkflowPages.d.ts +13 -0
  33. package/dist/browser/components/workflow/StandardWorkflowPages.d.ts.map +1 -0
  34. package/dist/browser/components/workflow/StandardWorkflowPages.js +407 -0
  35. package/dist/browser/components/workflow/StandardWorkflowPages.js.map +1 -0
  36. package/dist/browser/platform-client.d.ts +41 -2
  37. package/dist/browser/platform-client.d.ts.map +1 -1
  38. package/dist/browser/platform-client.js +117 -10
  39. package/dist/browser/platform-client.js.map +1 -1
  40. package/dist/browser/runtime-meta.d.ts +2 -0
  41. package/dist/browser/runtime-meta.d.ts.map +1 -1
  42. package/dist/browser/runtime-meta.js +12 -0
  43. package/dist/browser/runtime-meta.js.map +1 -1
  44. package/dist/browser/runtime.d.ts +8 -1
  45. package/dist/browser/runtime.d.ts.map +1 -1
  46. package/dist/browser/runtime.js +61 -13
  47. package/dist/browser/runtime.js.map +1 -1
  48. package/dist/browser/selector-copy.d.ts +6 -0
  49. package/dist/browser/selector-copy.d.ts.map +1 -0
  50. package/dist/browser/selector-copy.js +13 -0
  51. package/dist/browser/selector-copy.js.map +1 -0
  52. package/dist/browser/styles.css +449 -15
  53. package/dist/browser/workflow-definitions.d.ts +25 -0
  54. package/dist/browser/workflow-definitions.d.ts.map +1 -0
  55. package/dist/browser/workflow-definitions.js +32 -0
  56. package/dist/browser/workflow-definitions.js.map +1 -0
  57. package/dist/config.d.ts +1 -1
  58. package/dist/config.d.ts.map +1 -1
  59. package/dist/config.js +1 -1
  60. package/dist/config.js.map +1 -1
  61. package/dist/internal/web-build-verifier.d.ts +8 -0
  62. package/dist/internal/web-build-verifier.d.ts.map +1 -0
  63. package/dist/internal/web-build-verifier.js +55 -0
  64. package/dist/internal/web-build-verifier.js.map +1 -0
  65. package/dist/nest.d.ts +3 -4
  66. package/dist/nest.d.ts.map +1 -1
  67. package/dist/nest.js +2 -3
  68. package/dist/nest.js.map +1 -1
  69. package/dist/react.d.ts +3 -0
  70. package/dist/react.d.ts.map +1 -1
  71. package/dist/react.js +3 -0
  72. package/dist/react.js.map +1 -1
  73. package/dist/testing.d.ts +1 -0
  74. package/dist/testing.d.ts.map +1 -1
  75. package/dist/testing.js +1 -0
  76. package/dist/testing.js.map +1 -1
  77. package/package.json +7 -7
  78. package/skills/manifest.json +1 -1
  79. package/skills/openxiangda-v2/SKILL.md +18 -14
  80. package/skills/openxiangda-v2/references/appspec.md +67 -0
  81. package/skills/openxiangda-v2/references/backend.md +58 -9
  82. package/skills/openxiangda-v2/references/commands.md +21 -0
  83. package/skills/openxiangda-v2/references/data-authz.md +39 -5
  84. package/skills/openxiangda-v2/references/delivery.md +17 -1
  85. package/skills/openxiangda-v2/references/frontend.md +47 -1
  86. package/skills/openxiangda-v2/references/testing.md +46 -2
  87. package/skills/openxiangda-v2/references/{workflow-notification.md → workflow-events.md} +6 -3
  88. package/skills/openxiangda-v2/references/workspace.md +9 -5
@@ -73,7 +73,9 @@ body {
73
73
  .oxa-sider .ant-layout-sider-children {
74
74
  display: flex;
75
75
  flex-direction: column;
76
- min-height: 100%;
76
+ height: 100%;
77
+ min-height: 0;
78
+ overflow: hidden;
77
79
  }
78
80
 
79
81
  .oxa-brand {
@@ -148,12 +150,17 @@ body {
148
150
  white-space: nowrap;
149
151
  }
150
152
 
151
- .oxa-menu {
153
+ .oxa-menu-scroll {
152
154
  flex: 1;
155
+ min-height: 0;
153
156
  overflow-y: auto;
157
+ overscroll-behavior: contain;
158
+ }
159
+
160
+ .oxa-menu {
154
161
  border-inline-end: 0 !important;
155
162
  background: transparent !important;
156
- padding: 6px 12px 80px;
163
+ padding: 6px 12px 12px;
157
164
  }
158
165
 
159
166
  .oxa-menu .ant-menu-submenu-title,
@@ -175,10 +182,8 @@ body {
175
182
  }
176
183
 
177
184
  .oxa-sider-footer {
178
- position: absolute;
179
- right: 12px;
180
- bottom: 16px;
181
- left: 12px;
185
+ flex: 0 0 auto;
186
+ margin: 0 12px 16px;
182
187
  border-top: 1px solid var(--oxa-shell-border, #f0f0f0);
183
188
  background: var(--oxa-shell-surface, #fff);
184
189
  padding-top: 12px;
@@ -219,6 +224,304 @@ body {
219
224
  cursor: pointer;
220
225
  }
221
226
 
227
+ /* Workflow v2 standard surfaces. These pages consume only Workflow Surface
228
+ operations and keep mobile render trees independent from desktop tables. */
229
+ .oxa-workflow-page-heading,
230
+ .oxa-workflow-detail-header {
231
+ display: flex;
232
+ align-items: flex-start;
233
+ justify-content: space-between;
234
+ gap: 24px;
235
+ margin-bottom: 24px;
236
+ }
237
+
238
+ .oxa-workflow-page-heading .ant-typography,
239
+ .oxa-workflow-detail-header .ant-typography {
240
+ margin: 0;
241
+ }
242
+
243
+ .oxa-workflow-work-center,
244
+ .oxa-workflow-submission > .ant-card {
245
+ border: 1px solid var(--oxa-shell-border, #f0f0f0);
246
+ border-radius: 12px;
247
+ box-shadow: 0 2px 10px rgb(31 35 41 / 4%);
248
+ }
249
+
250
+ .oxa-workflow-work-center > .ant-card-body {
251
+ display: grid;
252
+ gap: 22px;
253
+ }
254
+
255
+ .oxa-workflow-detail {
256
+ position: relative;
257
+ display: grid;
258
+ gap: 18px;
259
+ max-width: 1240px;
260
+ margin: 0 auto;
261
+ padding-bottom: 88px;
262
+ }
263
+
264
+ .oxa-workflow-detail-grid {
265
+ display: grid;
266
+ grid-template-columns: minmax(0, 1.1fr) minmax(360px, 0.9fr);
267
+ gap: 18px;
268
+ }
269
+
270
+ .oxa-workflow-business,
271
+ .oxa-workflow-timeline-card,
272
+ .oxa-workflow-participants,
273
+ .oxa-workflow-preview {
274
+ border-color: var(--oxa-shell-border, #f0f0f0);
275
+ border-radius: 12px;
276
+ box-shadow: 0 2px 12px rgb(31 35 41 / 5%);
277
+ }
278
+
279
+ .oxa-workflow-business-grid {
280
+ display: grid;
281
+ grid-template-columns: repeat(2, minmax(0, 1fr));
282
+ gap: 0 28px;
283
+ }
284
+
285
+ .oxa-workflow-business-grid > div {
286
+ display: grid;
287
+ min-width: 0;
288
+ grid-template-columns: minmax(92px, 0.65fr) minmax(0, 1.35fr);
289
+ align-items: center;
290
+ gap: 16px;
291
+ border-bottom: 1px solid var(--oxa-shell-border, #f0f0f0);
292
+ padding: 14px 0;
293
+ }
294
+
295
+ .oxa-workflow-business-grid strong {
296
+ overflow-wrap: anywhere;
297
+ text-align: right;
298
+ }
299
+
300
+ .oxa-workflow-business-link {
301
+ min-height: 42px;
302
+ margin-top: 18px;
303
+ color: var(--oxa-shell-primary, #1677ff);
304
+ }
305
+
306
+ .oxa-workflow-timeline {
307
+ display: grid;
308
+ }
309
+
310
+ .oxa-workflow-timeline > div {
311
+ position: relative;
312
+ display: grid;
313
+ min-height: 64px;
314
+ grid-template-columns: 26px minmax(0, 1fr) auto;
315
+ align-items: start;
316
+ gap: 12px;
317
+ }
318
+
319
+ .oxa-workflow-timeline > div:not(:last-child)::before {
320
+ position: absolute;
321
+ top: 22px;
322
+ bottom: -4px;
323
+ left: 9px;
324
+ width: 2px;
325
+ background: #d9d9d9;
326
+ content: "";
327
+ }
328
+
329
+ .oxa-workflow-timeline-dot {
330
+ position: relative;
331
+ z-index: 1;
332
+ display: grid;
333
+ width: 20px;
334
+ height: 20px;
335
+ place-items: center;
336
+ border: 2px solid #bfbfbf;
337
+ border-radius: 50%;
338
+ background: var(--oxa-shell-surface, #fff);
339
+ color: #bfbfbf;
340
+ }
341
+
342
+ .oxa-workflow-timeline .is-completed .oxa-workflow-timeline-dot {
343
+ border-color: #22a559;
344
+ color: #22a559;
345
+ }
346
+
347
+ .oxa-workflow-timeline .is-active .oxa-workflow-timeline-dot {
348
+ border-color: #1677ff;
349
+ box-shadow: 0 0 0 4px rgb(22 119 255 / 12%);
350
+ }
351
+
352
+ .oxa-workflow-timeline .is-error .oxa-workflow-timeline-dot {
353
+ border-color: #ff4d4f;
354
+ }
355
+
356
+ .oxa-workflow-timeline > div > div {
357
+ display: grid;
358
+ gap: 4px;
359
+ }
360
+
361
+ .oxa-workflow-timeline > div > span:last-child {
362
+ color: var(--oxa-shell-text-secondary, #595959);
363
+ }
364
+
365
+ .oxa-workflow-actions {
366
+ position: sticky;
367
+ z-index: 10;
368
+ bottom: 16px;
369
+ display: flex;
370
+ min-height: 64px;
371
+ align-items: center;
372
+ justify-content: flex-end;
373
+ gap: 12px;
374
+ border: 1px solid var(--oxa-shell-border, #f0f0f0);
375
+ border-radius: 12px;
376
+ background: rgb(255 255 255 / 96%);
377
+ padding: 12px 16px;
378
+ box-shadow: 0 10px 32px rgb(31 35 41 / 12%);
379
+ backdrop-filter: blur(12px);
380
+ }
381
+
382
+ .oxa-workflow-actions .ant-btn {
383
+ min-width: 112px;
384
+ min-height: 40px;
385
+ }
386
+
387
+ .oxa-workflow-more-actions {
388
+ position: absolute;
389
+ right: 144px;
390
+ bottom: 58px;
391
+ display: grid;
392
+ min-width: 180px;
393
+ border: 1px solid var(--oxa-shell-border, #f0f0f0);
394
+ border-radius: 10px;
395
+ background: var(--oxa-shell-surface, #fff);
396
+ padding: 8px;
397
+ box-shadow: 0 10px 30px rgb(31 35 41 / 16%);
398
+ }
399
+
400
+ .oxa-workflow-more-actions .ant-btn {
401
+ justify-content: flex-start;
402
+ }
403
+
404
+ .oxa-workflow-operation-alert,
405
+ .oxa-workflow-submission .ant-alert {
406
+ margin-bottom: 20px;
407
+ }
408
+
409
+ .oxa-workflow-submission {
410
+ max-width: 960px;
411
+ margin: 0 auto;
412
+ }
413
+
414
+ .oxa-workflow-submission > .ant-card > .ant-card-body {
415
+ display: grid;
416
+ gap: 24px;
417
+ }
418
+
419
+ .oxa-workflow-mobile-page {
420
+ min-height: 100vh;
421
+ background: linear-gradient(180deg, #fffaf0 0, #f7f8fa 280px);
422
+ padding: 20px 18px 104px;
423
+ }
424
+
425
+ .oxa-workflow-work-center-mobile {
426
+ display: grid;
427
+ align-content: start;
428
+ gap: 18px;
429
+ }
430
+
431
+ .oxa-workflow-work-center-mobile header .ant-typography {
432
+ margin: 0;
433
+ }
434
+
435
+ .oxa-workflow-mobile-tasks {
436
+ display: grid;
437
+ gap: 12px;
438
+ }
439
+
440
+ .oxa-workflow-mobile-tasks .ant-card {
441
+ border: 1px solid #f0f0f0;
442
+ border-radius: 14px;
443
+ box-shadow: 0 4px 18px rgb(31 35 41 / 6%);
444
+ }
445
+
446
+ .oxa-workflow-mobile-tasks .ant-card-body {
447
+ display: grid;
448
+ gap: 10px;
449
+ }
450
+
451
+ .oxa-workflow-mobile-task-heading {
452
+ display: flex;
453
+ align-items: center;
454
+ justify-content: space-between;
455
+ gap: 12px;
456
+ font-size: 17px;
457
+ }
458
+
459
+ .oxa-workflow-detail-mobile {
460
+ gap: 14px;
461
+ padding-bottom: 88px;
462
+ }
463
+
464
+ .oxa-workflow-detail-mobile .oxa-workflow-detail-header {
465
+ display: grid;
466
+ grid-template-columns: auto minmax(0, 1fr) auto;
467
+ align-items: start;
468
+ gap: 8px;
469
+ margin: 4px -6px 4px;
470
+ }
471
+
472
+ .oxa-workflow-detail-mobile .oxa-workflow-detail-header > div {
473
+ padding-top: 4px;
474
+ }
475
+
476
+ .oxa-workflow-detail-mobile .oxa-workflow-detail-grid {
477
+ display: grid;
478
+ grid-template-columns: 1fr;
479
+ gap: 14px;
480
+ }
481
+
482
+ .oxa-workflow-detail-mobile .ant-card {
483
+ border-radius: 14px;
484
+ box-shadow: 0 4px 18px rgb(31 35 41 / 6%);
485
+ }
486
+
487
+ .oxa-workflow-detail-mobile .oxa-workflow-business-grid {
488
+ grid-template-columns: 1fr;
489
+ }
490
+
491
+ .oxa-workflow-detail-mobile .oxa-workflow-actions-mobile {
492
+ position: fixed;
493
+ right: 0;
494
+ bottom: 0;
495
+ left: 0;
496
+ z-index: 40;
497
+ min-height: 76px;
498
+ border-width: 1px 0 0;
499
+ border-radius: 0;
500
+ padding: 12px 18px max(12px, env(safe-area-inset-bottom));
501
+ }
502
+
503
+ .oxa-workflow-actions-mobile .ant-btn {
504
+ flex: 1;
505
+ }
506
+
507
+ .oxa-workflow-actions-mobile .oxa-workflow-more-actions {
508
+ right: auto;
509
+ bottom: 68px;
510
+ left: 18px;
511
+ }
512
+
513
+ @media (max-width: 980px) {
514
+ .oxa-workflow-detail-grid {
515
+ grid-template-columns: 1fr;
516
+ }
517
+ }
518
+
519
+ @media (prefers-reduced-motion: reduce) {
520
+ .oxa-global-request-loading span {
521
+ animation: none;
522
+ }
523
+ }
524
+
222
525
  .oxa-current-user {
223
526
  display: inline-flex;
224
527
  min-width: 0;
@@ -260,10 +563,10 @@ body {
260
563
  }
261
564
 
262
565
  .oxa-user-dropdown {
263
- width: 292px;
566
+ width: 400px;
264
567
  overflow: hidden;
265
568
  border: 1px solid var(--oxa-shell-border, #f0f0f0);
266
- border-radius: 8px;
569
+ border-radius: 12px;
267
570
  background: var(--oxa-shell-elevated, #fff);
268
571
  box-shadow: var(--oxa-shell-shadow, 0 1px 6px rgb(0 0 0 / 8%));
269
572
  padding-top: 4px;
@@ -272,15 +575,15 @@ body {
272
575
  .oxa-user-dropdown-profile {
273
576
  display: flex;
274
577
  align-items: center;
275
- gap: 12px;
276
- padding: 14px 16px 10px;
578
+ gap: 14px;
579
+ padding: 20px 20px 16px;
277
580
  }
278
581
 
279
- .oxa-user-dropdown-profile > div:last-child {
582
+ .oxa-user-profile-copy {
280
583
  display: grid;
281
584
  min-width: 0;
282
585
  flex: 1;
283
- gap: 2px;
586
+ gap: 4px;
284
587
  }
285
588
 
286
589
  .oxa-user-dropdown-profile strong,
@@ -291,15 +594,46 @@ body {
291
594
  white-space: nowrap;
292
595
  }
293
596
 
597
+ .oxa-user-dropdown-profile strong {
598
+ font-size: 18px;
599
+ }
600
+
601
+ .oxa-user-avatar-editor {
602
+ position: relative;
603
+ flex: 0 0 auto;
604
+ }
605
+
606
+ .oxa-avatar-camera {
607
+ position: absolute !important;
608
+ right: -4px;
609
+ bottom: -2px;
610
+ border-color: var(--oxa-shell-primary, #1677ff) !important;
611
+ color: var(--oxa-shell-primary, #1677ff) !important;
612
+ }
613
+
614
+ .oxa-user-role-tags {
615
+ display: flex;
616
+ flex-wrap: wrap;
617
+ gap: 6px;
618
+ }
619
+
620
+ .oxa-user-role-tags .ant-tag {
621
+ margin: 0;
622
+ border-radius: 6px;
623
+ padding: 3px 9px;
624
+ }
625
+
294
626
  .oxa-user-dropdown-profile span,
295
627
  .oxa-user-dropdown-profile small,
296
628
  .oxa-user-dropdown-roles > span,
629
+ .oxa-user-dropdown-perspective > span,
297
630
  .oxa-user-dropdown-theme > span {
298
631
  color: var(--oxa-shell-text-secondary, #595959);
299
632
  font-size: 12px;
300
633
  }
301
634
 
302
635
  .oxa-user-dropdown-roles,
636
+ .oxa-user-dropdown-perspective,
303
637
  .oxa-user-dropdown-theme {
304
638
  display: grid;
305
639
  gap: 7px;
@@ -308,6 +642,15 @@ body {
308
642
  padding: 10px 4px;
309
643
  }
310
644
 
645
+ .oxa-user-dropdown-perspective .ant-select {
646
+ width: 100%;
647
+ }
648
+
649
+ .oxa-user-dropdown-perspective .ant-typography {
650
+ font-size: 12px;
651
+ line-height: 1.5;
652
+ }
653
+
311
654
  .oxa-user-dropdown > .ant-dropdown-menu {
312
655
  border-top: 1px solid var(--oxa-shell-border, #f0f0f0);
313
656
  border-radius: 0;
@@ -523,13 +866,77 @@ body {
523
866
 
524
867
  .oxa-search-panel {
525
868
  display: grid;
526
- grid-template-columns: minmax(0, 1fr) auto;
527
- align-items: start;
528
869
  gap: 12px;
529
870
  border-bottom: 1px solid var(--oxa-shell-border, #f0f0f0);
530
871
  padding: 16px;
531
872
  }
532
873
 
874
+ .oxa-filter-primary-row {
875
+ display: flex;
876
+ min-width: 0;
877
+ align-items: center;
878
+ gap: 12px;
879
+ }
880
+
881
+ .oxa-filter-keyword {
882
+ min-width: 260px;
883
+ flex: 1 1 360px;
884
+ }
885
+
886
+ .oxa-filter-primary-item {
887
+ width: 220px;
888
+ min-width: 180px;
889
+ }
890
+
891
+ .oxa-filter-primary-item > .ant-select,
892
+ .oxa-filter-primary-item > .ant-picker,
893
+ .oxa-more-filter-field > .ant-select,
894
+ .oxa-more-filter-field > .ant-picker {
895
+ width: 100%;
896
+ }
897
+
898
+ .oxa-applied-filters {
899
+ display: flex;
900
+ min-width: 0;
901
+ align-items: center;
902
+ gap: 10px;
903
+ color: var(--oxa-shell-text-secondary, #595959);
904
+ }
905
+
906
+ .oxa-applied-filter-tags {
907
+ display: flex;
908
+ min-width: 0;
909
+ flex: 1;
910
+ flex-wrap: wrap;
911
+ gap: 8px;
912
+ }
913
+
914
+ .oxa-applied-filter-tags .ant-tag {
915
+ margin: 0;
916
+ border-radius: 6px;
917
+ padding: 3px 9px;
918
+ color: var(--oxa-shell-primary, #1677ff);
919
+ background: var(--oxa-shell-primary-bg, #e6f4ff);
920
+ }
921
+
922
+ .oxa-more-filter-grid {
923
+ display: grid;
924
+ grid-template-columns: repeat(2, minmax(0, 1fr));
925
+ gap: 22px 24px;
926
+ padding: 12px 0 8px;
927
+ }
928
+
929
+ .oxa-more-filter-field {
930
+ display: grid;
931
+ min-width: 0;
932
+ gap: 8px;
933
+ }
934
+
935
+ .oxa-more-filter-field > label {
936
+ color: var(--oxa-shell-text, #1f1f1f);
937
+ font-weight: 600;
938
+ }
939
+
533
940
  .oxa-filter-grid {
534
941
  display: grid;
535
942
  grid-template-columns: repeat(4, minmax(170px, 1fr));
@@ -556,6 +963,8 @@ body {
556
963
 
557
964
  .oxa-filter-actions {
558
965
  align-items: flex-start;
966
+ flex: 0 0 auto;
967
+ margin-left: auto;
559
968
  }
560
969
 
561
970
  .oxa-list-toolbar {
@@ -1853,6 +2262,14 @@ body {
1853
2262
  position: static;
1854
2263
  grid-template-columns: repeat(2, minmax(0, 1fr));
1855
2264
  }
2265
+
2266
+ .oxa-filter-primary-row {
2267
+ flex-wrap: wrap;
2268
+ }
2269
+
2270
+ .oxa-filter-actions {
2271
+ margin-left: 0;
2272
+ }
1856
2273
  }
1857
2274
 
1858
2275
  @media (max-width: 900px) {
@@ -1888,6 +2305,23 @@ body {
1888
2305
  grid-template-columns: 1fr;
1889
2306
  }
1890
2307
 
2308
+ .oxa-filter-primary-row,
2309
+ .oxa-applied-filters {
2310
+ align-items: stretch;
2311
+ flex-direction: column;
2312
+ }
2313
+
2314
+ .oxa-filter-keyword,
2315
+ .oxa-filter-primary-item {
2316
+ width: 100%;
2317
+ min-width: 0;
2318
+ flex: 0 0 auto;
2319
+ }
2320
+
2321
+ .oxa-more-filter-grid {
2322
+ grid-template-columns: 1fr;
2323
+ }
2324
+
1891
2325
  .oxa-filter-actions,
1892
2326
  .oxa-list-toolbar,
1893
2327
  .oxa-batch-bar {
@@ -0,0 +1,25 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { WorkflowStartInput } from './platform-client';
3
+ export interface WorkflowSubmissionContext {
4
+ workflowCode: string;
5
+ locationState: unknown;
6
+ searchParams: URLSearchParams;
7
+ }
8
+ export interface StandardWorkflowDefinition {
9
+ code: string;
10
+ title?: string;
11
+ description?: string;
12
+ /**
13
+ * Persists the business draft and returns the exact immutable revision-bound
14
+ * facts used by prepare/start. The Workflow page never owns business data.
15
+ */
16
+ saveBusinessRevision?: (context: WorkflowSubmissionContext) => Promise<WorkflowStartInput>;
17
+ }
18
+ export type StandardWorkflowDefinitionsInput = readonly (string | StandardWorkflowDefinition)[];
19
+ export declare function OpenXiangdaWorkflowDefinitionsProvider({ children, definitions, }: {
20
+ children: ReactNode;
21
+ definitions: StandardWorkflowDefinitionsInput;
22
+ }): import("react/jsx-runtime").JSX.Element;
23
+ export declare function useWorkflowDefinitions(): ReadonlyMap<string, StandardWorkflowDefinition>;
24
+ export declare function useWorkflowDefinition(code: string): StandardWorkflowDefinition | undefined;
25
+ //# sourceMappingURL=workflow-definitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-definitions.d.ts","sourceRoot":"","sources":["../../src/browser/workflow-definitions.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,eAAe,CAAC;CAC/B;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,CACrB,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAClC;AAED,MAAM,MAAM,gCAAgC,GAAG,SAAS,CACpD,MAAM,GACN,0BAA0B,CAC7B,EAAE,CAAC;AA2BJ,wBAAgB,sCAAsC,CAAC,EACrD,QAAQ,EACR,WAAW,GACZ,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,WAAW,EAAE,gCAAgC,CAAC;CAC/C,2CAQA;AAED,wBAAgB,sBAAsB,oDAErC;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,0CAEjD"}
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext } from 'react';
3
+ function normalizeWorkflowDefinitions(input) {
4
+ const definitions = new Map();
5
+ for (const entry of input) {
6
+ const definition = typeof entry === 'string' ? { code: entry } : { ...entry };
7
+ const code = String(definition.code || '').trim();
8
+ if (!/^[a-z][a-z0-9-]{2,63}$/.test(code)) {
9
+ throw new Error(`OPENXIANGDA_WORKFLOW_CODE_INVALID: ${code}`);
10
+ }
11
+ if (definitions.has(code)) {
12
+ throw new Error(`OPENXIANGDA_WORKFLOW_CODE_DUPLICATE: ${code}`);
13
+ }
14
+ definitions.set(code, {
15
+ ...definition,
16
+ code,
17
+ title: String(definition.title || code).trim(),
18
+ });
19
+ }
20
+ return definitions;
21
+ }
22
+ const WorkflowDefinitionsContext = createContext(new Map());
23
+ export function OpenXiangdaWorkflowDefinitionsProvider({ children, definitions, }) {
24
+ return (_jsx(WorkflowDefinitionsContext.Provider, { value: normalizeWorkflowDefinitions(definitions), children: children }));
25
+ }
26
+ export function useWorkflowDefinitions() {
27
+ return useContext(WorkflowDefinitionsContext);
28
+ }
29
+ export function useWorkflowDefinition(code) {
30
+ return useWorkflowDefinitions().get(code);
31
+ }
32
+ //# sourceMappingURL=workflow-definitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-definitions.js","sourceRoot":"","sources":["../../src/browser/workflow-definitions.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAkB,MAAM,OAAO,CAAC;AA2BlE,SAAS,4BAA4B,CAAC,KAAuC;IAC3E,MAAM,WAAW,GAAG,IAAI,GAAG,EAAsC,CAAC;IAClE,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,UAAU,GACd,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;QAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,sCAAsC,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE;YACpB,GAAG,UAAU;YACb,IAAI;YACJ,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE;SAC/C,CAAC,CAAC;IACL,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,0BAA0B,GAAG,aAAa,CAE9C,IAAI,GAAG,EAAE,CAAC,CAAC;AAEb,MAAM,UAAU,sCAAsC,CAAC,EACrD,QAAQ,EACR,WAAW,GAIZ;IACC,OAAO,CACL,KAAC,0BAA0B,CAAC,QAAQ,IAClC,KAAK,EAAE,4BAA4B,CAAC,WAAW,CAAC,YAE/C,QAAQ,GAC2B,CACvC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,UAAU,CAAC,0BAA0B,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,sBAAsB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC"}
package/dist/config.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export { defineOpenXiangdaApp, currentUserDataPolicy, resourceCapabilityCodes, type AppDataFieldAccessDeclaration, type AppDataFieldDeclaration, type AppDataResourceDeclaration, type OpenXiangdaAppConfig, type OpenXiangdaAppDeclaration, } from 'openxiangda-devkit-core';
1
+ export { defineOpenXiangdaApp, composeAppOperationSchemas, composeJsonSchema, currentUserDataPolicy, resourceRecordSchema, resourceCapabilityCodes, schemaRef, type AppDataFieldAccessDeclaration, type AppDataFieldDeclaration, type AppDataResourceDeclaration, type OpenXiangdaAppConfig, type OpenXiangdaAppDeclaration, type AppOperationSchemasInput, type JsonSchemaDefinitions, type ResourceRecordSchemaOptions, } from 'openxiangda-devkit-core';
2
2
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,KAAK,6BAA6B,EAClC,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,GAC/B,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,SAAS,EACT,KAAK,6BAA6B,EAClC,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,GACjC,MAAM,yBAAyB,CAAC"}
package/dist/config.js CHANGED
@@ -1,2 +1,2 @@
1
- export { defineOpenXiangdaApp, currentUserDataPolicy, resourceCapabilityCodes, } from 'openxiangda-devkit-core';
1
+ export { defineOpenXiangdaApp, composeAppOperationSchemas, composeJsonSchema, currentUserDataPolicy, resourceRecordSchema, resourceCapabilityCodes, schemaRef, } from 'openxiangda-devkit-core';
2
2
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,GAMxB,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,SAAS,GASV,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface OpenXiangdaWebBuildVerification {
2
+ assetFiles: number;
3
+ totalBytes: number;
4
+ totalJavaScriptGzipBytes: number;
5
+ initialJavaScriptGzipBytes: number;
6
+ }
7
+ export declare function verifyOpenXiangdaWebBuild(distInput: string | URL): OpenXiangdaWebBuildVerification;
8
+ //# sourceMappingURL=web-build-verifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-build-verifier.d.ts","sourceRoot":"","sources":["../../src/internal/web-build-verifier.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,+BAA+B;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,wBAAwB,EAAE,MAAM,CAAC;IACjC,0BAA0B,EAAE,MAAM,CAAC;CACpC;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,GAAG,GAAG,GACtB,+BAA+B,CAgEjC"}