openxiangda-cli 2.0.0-alpha.61 → 2.0.0-alpha.66

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 (39) hide show
  1. package/dist/create-workspace.d.ts.map +1 -1
  2. package/dist/create-workspace.js +1 -0
  3. package/dist/create-workspace.js.map +1 -1
  4. package/package.json +4 -4
  5. package/template/AGENTS.md +1 -1
  6. package/template/README.md +7 -7
  7. package/template/apps/server/Dockerfile +2 -1
  8. package/template/apps/server/package.json +1 -1
  9. package/template/apps/server/src/app.module.ts +1 -3
  10. package/template/apps/server/test/smoke.test.ts +6 -23
  11. package/template/apps/web/e2e/resources.spec.ts +20 -0
  12. package/template/apps/web/index.html +1 -1
  13. package/template/apps/web/package.json +1 -1
  14. package/template/apps/web/src/AuthoritativeSelector.tsx +298 -41
  15. package/template/apps/web/src/Shell.tsx +39 -211
  16. package/template/apps/web/src/components/platform-fields/AttachmentFileList.tsx +1 -1
  17. package/template/apps/web/src/components/resource/GeneratedResourceCrud.tsx +229 -16
  18. package/template/apps/web/src/components/resource/SurfaceFields.tsx +142 -2
  19. package/template/apps/web/src/data-provider.ts +23 -102
  20. package/template/apps/web/src/main.tsx +35 -83
  21. package/template/apps/web/src/platform-client.ts +112 -424
  22. package/template/apps/web/src/runtime-meta.ts +1 -1
  23. package/template/apps/web/src/styles.css +285 -3
  24. package/template/apps/web/test/contracts.test.ts +43 -769
  25. package/template/openxiangda.config.ts +14 -81
  26. package/template/package.json +3 -3
  27. package/template/packages/contracts/src/generated.ts +7 -804
  28. package/template/apps/server/src/instrument-context.controller.ts +0 -25
  29. package/template/apps/web/e2e/instruments.spec.ts +0 -1338
  30. package/template/apps/web/src/CollegePage.tsx +0 -181
  31. package/template/apps/web/src/InstrumentDetailPage.tsx +0 -176
  32. package/template/apps/web/src/InstrumentForm.tsx +0 -380
  33. package/template/apps/web/src/InstrumentFormPage.tsx +0 -82
  34. package/template/apps/web/src/InstrumentListPage.tsx +0 -457
  35. package/template/apps/web/src/fields.ts +0 -18
  36. package/template/apps/web/src/instrument.ts +0 -56
  37. package/template/platform/data/colleges.ts +0 -21
  38. package/template/platform/data/instrument-surface.ts +0 -125
  39. package/template/platform/data/instruments.ts +0 -83
@@ -24,6 +24,25 @@ body {
24
24
  place-items: center;
25
25
  }
26
26
 
27
+ .oxa-global-request-loading {
28
+ position: fixed;
29
+ z-index: 1200;
30
+ top: 14px;
31
+ left: 50%;
32
+ display: inline-flex;
33
+ align-items: center;
34
+ gap: 8px;
35
+ padding: 7px 13px;
36
+ border: 1px solid #dbe7f7;
37
+ border-radius: 999px;
38
+ background: rgba(255, 255, 255, 0.96);
39
+ box-shadow: 0 8px 24px rgba(31, 59, 102, 0.15);
40
+ color: #355070;
41
+ font-size: 13px;
42
+ pointer-events: none;
43
+ transform: translateX(-50%);
44
+ }
45
+
27
46
  .oxa-app-layout {
28
47
  min-height: 100vh;
29
48
  background: #f3f7fd;
@@ -391,7 +410,7 @@ body {
391
410
  gap: 16px;
392
411
  }
393
412
 
394
- .oxa-instrument-form {
413
+ .oxa-resource-form {
395
414
  display: grid;
396
415
  gap: 16px;
397
416
  }
@@ -522,7 +541,7 @@ body {
522
541
  gap: 1px;
523
542
  }
524
543
 
525
- .oxa-resolved-college .oxa-resolved-item {
544
+ .oxa-resolved-resource .oxa-resolved-item {
526
545
  border-color: #cfe1ff;
527
546
  background: #eff6ff;
528
547
  color: #155fc7;
@@ -1029,7 +1048,7 @@ body {
1029
1048
  font-size: 22px;
1030
1049
  }
1031
1050
 
1032
- .oxa-instrument-name.ant-typography {
1051
+ .oxa-resource-name.ant-typography {
1033
1052
  margin-bottom: 2px;
1034
1053
  font-size: 18px;
1035
1054
  }
@@ -1075,6 +1094,61 @@ body {
1075
1094
  .oxa-audit-entry {
1076
1095
  display: grid;
1077
1096
  gap: 4px;
1097
+ padding: 10px 0;
1098
+ border-bottom: 1px solid #edf0f5;
1099
+ }
1100
+
1101
+ .oxa-audit-entry:last-child {
1102
+ border-bottom: 0;
1103
+ }
1104
+
1105
+ .oxa-audit-heading,
1106
+ .oxa-audit-meta,
1107
+ .oxa-audit-change-values {
1108
+ display: flex;
1109
+ align-items: center;
1110
+ gap: 8px;
1111
+ }
1112
+
1113
+ .oxa-audit-heading {
1114
+ justify-content: space-between;
1115
+ }
1116
+
1117
+ .oxa-audit-meta {
1118
+ flex-wrap: wrap;
1119
+ color: #7b879b;
1120
+ font-size: 12px;
1121
+ }
1122
+
1123
+ .oxa-audit-meta .ant-typography {
1124
+ font-size: 12px;
1125
+ }
1126
+
1127
+ .oxa-audit-changes {
1128
+ display: grid;
1129
+ gap: 7px;
1130
+ margin-top: 4px;
1131
+ }
1132
+
1133
+ .oxa-audit-change {
1134
+ display: grid;
1135
+ gap: 3px;
1136
+ padding: 7px 8px;
1137
+ border-radius: 6px;
1138
+ background: #f7f9fc;
1139
+ }
1140
+
1141
+ .oxa-audit-change-values {
1142
+ min-width: 0;
1143
+ color: #47566f;
1144
+ font-size: 12px;
1145
+ }
1146
+
1147
+ .oxa-audit-change-values > :not(svg) {
1148
+ min-width: 0;
1149
+ overflow: hidden;
1150
+ text-overflow: ellipsis;
1151
+ white-space: nowrap;
1078
1152
  }
1079
1153
 
1080
1154
  .oxa-audit-entry > span {
@@ -1082,6 +1156,214 @@ body {
1082
1156
  font-size: 12px;
1083
1157
  }
1084
1158
 
1159
+ .oxa-mobile-reference-trigger {
1160
+ display: flex;
1161
+ width: 100%;
1162
+ min-height: 42px;
1163
+ align-items: center;
1164
+ justify-content: space-between;
1165
+ gap: 8px;
1166
+ padding: 9px 12px;
1167
+ border: 1px solid #d9dfe9;
1168
+ border-radius: 8px;
1169
+ background: #fff;
1170
+ color: #1f2b3d;
1171
+ font: inherit;
1172
+ text-align: left;
1173
+ }
1174
+
1175
+ .oxa-mobile-reference-trigger:disabled {
1176
+ background: #f5f7fa;
1177
+ color: #9aa5b5;
1178
+ }
1179
+
1180
+ .oxa-mobile-reference-placeholder {
1181
+ color: #9aa5b5;
1182
+ }
1183
+
1184
+ .oxa-mobile-reference-backdrop {
1185
+ position: fixed;
1186
+ z-index: 1200;
1187
+ inset: 0;
1188
+ display: flex;
1189
+ align-items: flex-end;
1190
+ background: rgb(15 23 42 / 42%);
1191
+ }
1192
+
1193
+ .oxa-mobile-reference-sheet {
1194
+ display: grid;
1195
+ width: 100%;
1196
+ max-height: min(78vh, 640px);
1197
+ gap: 12px;
1198
+ padding: 16px 16px max(16px, env(safe-area-inset-bottom));
1199
+ overflow: auto;
1200
+ border-radius: 16px 16px 0 0;
1201
+ background: #fff;
1202
+ box-shadow: 0 -8px 32px rgb(15 23 42 / 18%);
1203
+ }
1204
+
1205
+ .oxa-mobile-reference-header {
1206
+ display: flex;
1207
+ align-items: center;
1208
+ justify-content: space-between;
1209
+ color: #1f2b3d;
1210
+ }
1211
+
1212
+ .oxa-mobile-reference-header button,
1213
+ .oxa-mobile-reference-more,
1214
+ .oxa-mobile-reference-confirm {
1215
+ border: 0;
1216
+ background: transparent;
1217
+ color: #2d6cdf;
1218
+ font: inherit;
1219
+ }
1220
+
1221
+ .oxa-mobile-reference-search {
1222
+ width: 100%;
1223
+ }
1224
+
1225
+ .oxa-mobile-reference-options {
1226
+ display: grid;
1227
+ gap: 4px;
1228
+ }
1229
+
1230
+ .oxa-mobile-reference-option {
1231
+ display: flex;
1232
+ min-height: 48px;
1233
+ align-items: center;
1234
+ gap: 10px;
1235
+ padding: 8px 4px;
1236
+ border: 0;
1237
+ border-radius: 8px;
1238
+ background: transparent;
1239
+ color: #1f2b3d;
1240
+ font: inherit;
1241
+ text-align: left;
1242
+ }
1243
+
1244
+ .oxa-mobile-reference-option.is-selected {
1245
+ background: #edf4ff;
1246
+ }
1247
+
1248
+ .oxa-mobile-reference-option:disabled {
1249
+ color: #aab3c0;
1250
+ opacity: 0.7;
1251
+ }
1252
+
1253
+ .oxa-mobile-reference-option-copy {
1254
+ display: grid;
1255
+ min-width: 0;
1256
+ flex: 1;
1257
+ gap: 2px;
1258
+ }
1259
+
1260
+ .oxa-mobile-reference-option-copy small {
1261
+ overflow: hidden;
1262
+ color: #7b879b;
1263
+ font-size: 12px;
1264
+ text-overflow: ellipsis;
1265
+ white-space: nowrap;
1266
+ }
1267
+
1268
+ .oxa-mobile-reference-loading,
1269
+ .oxa-mobile-reference-empty,
1270
+ .oxa-mobile-reference-error {
1271
+ padding: 12px 4px;
1272
+ color: #7b879b;
1273
+ font-size: 13px;
1274
+ text-align: center;
1275
+ }
1276
+
1277
+ .oxa-mobile-reference-error {
1278
+ color: #cf3c46;
1279
+ }
1280
+
1281
+ .oxa-mobile-reference-more,
1282
+ .oxa-mobile-reference-confirm {
1283
+ min-height: 42px;
1284
+ border-radius: 8px;
1285
+ background: #f0f5ff;
1286
+ font-weight: 600;
1287
+ text-align: center;
1288
+ }
1289
+
1290
+ .oxa-mobile-reference-confirm {
1291
+ background: #2d6cdf;
1292
+ color: #fff;
1293
+ }
1294
+
1295
+ .oxa-mobile-file-field {
1296
+ display: grid;
1297
+ gap: 8px;
1298
+ }
1299
+
1300
+ .oxa-mobile-file-button {
1301
+ display: inline-flex !important;
1302
+ width: 100%;
1303
+ min-height: 42px;
1304
+ align-items: center;
1305
+ justify-content: center;
1306
+ border: 1px solid #d9dfe9 !important;
1307
+ border-radius: 8px;
1308
+ background: #fff !important;
1309
+ color: #2d6cdf;
1310
+ font-weight: 600;
1311
+ }
1312
+
1313
+ .oxa-mobile-file-button.ant-btn:disabled {
1314
+ background: #f5f7fa;
1315
+ color: #9aa5b5;
1316
+ }
1317
+
1318
+ .oxa-mobile-pending-files {
1319
+ display: grid;
1320
+ gap: 8px;
1321
+ }
1322
+
1323
+ .oxa-mobile-pending-file {
1324
+ display: flex;
1325
+ min-height: 42px;
1326
+ align-items: center;
1327
+ gap: 8px;
1328
+ padding: 7px 9px;
1329
+ border: 1px solid #dbe3ee;
1330
+ border-radius: 8px;
1331
+ background: #fbfcfe;
1332
+ font-size: 13px;
1333
+ }
1334
+
1335
+ .oxa-mobile-pending-file-name {
1336
+ min-width: 0;
1337
+ overflow: hidden;
1338
+ text-overflow: ellipsis;
1339
+ white-space: nowrap;
1340
+ }
1341
+
1342
+ .oxa-mobile-pending-file-copy {
1343
+ display: grid;
1344
+ min-width: 0;
1345
+ flex: 1;
1346
+ gap: 2px;
1347
+ }
1348
+
1349
+ .oxa-mobile-pending-file-copy small {
1350
+ color: #7b879b;
1351
+ font-size: 12px;
1352
+ }
1353
+
1354
+ .oxa-mobile-pending-status {
1355
+ color: #2d6cdf;
1356
+ white-space: nowrap;
1357
+ }
1358
+
1359
+ .oxa-mobile-pending-error {
1360
+ max-width: 42%;
1361
+ overflow: hidden;
1362
+ color: #cf3c46;
1363
+ text-overflow: ellipsis;
1364
+ white-space: nowrap;
1365
+ }
1366
+
1085
1367
  @media (max-width: 1280px) {
1086
1368
  .oxa-grid,
1087
1369
  .oxa-filter-grid {