openxiangda-cli 2.0.0-alpha.89 → 2.0.0-alpha.90

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 (77) hide show
  1. package/README.md +2 -2
  2. package/bin/run.js +1 -0
  3. package/dist/commands/skill.d.ts +26 -0
  4. package/dist/commands/skill.d.ts.map +1 -0
  5. package/dist/commands/skill.js +43 -0
  6. package/dist/commands/skill.js.map +1 -0
  7. package/dist/create-workspace.d.ts.map +1 -1
  8. package/dist/create-workspace.js +3 -3
  9. package/dist/create-workspace.js.map +1 -1
  10. package/dist/toolchain-capsule.d.ts.map +1 -1
  11. package/dist/toolchain-capsule.js +4 -8
  12. package/dist/toolchain-capsule.js.map +1 -1
  13. package/package.json +6 -7
  14. package/template/AGENTS.md +2 -1
  15. package/template/README.md +3 -3
  16. package/template/apps/server/package.json +1 -1
  17. package/template/apps/server/src/app.module.ts +1 -1
  18. package/template/apps/server/src/main.ts +1 -1
  19. package/template/apps/web/e2e/client-fixture.ts +5 -0
  20. package/template/apps/web/e2e/data-api-live-fixture.tsx +19 -14
  21. package/template/apps/web/e2e/field-protocol-fixture.tsx +87 -20
  22. package/template/apps/web/e2e/field-protocol.spec.ts +86 -0
  23. package/template/apps/web/e2e/resources.spec.ts +20 -181
  24. package/template/apps/web/field-protocol.e2e.html +3 -0
  25. package/template/apps/web/package.json +2 -5
  26. package/template/apps/web/src/main.tsx +12 -60
  27. package/template/apps/web/test/contracts.test.ts +52 -104
  28. package/template/openxiangda.config.ts +1 -1
  29. package/template/package.json +1 -3
  30. package/template/packages/contracts/src/generated.ts +1 -0
  31. package/template/scripts/verify-template-budget.mjs +2 -2
  32. package/template/apps/web/src/AuthoritativeSelector.tsx +0 -661
  33. package/template/apps/web/src/FilePreviewPage.tsx +0 -324
  34. package/template/apps/web/src/RoleSubjectSelect.tsx +0 -128
  35. package/template/apps/web/src/Shell.tsx +0 -445
  36. package/template/apps/web/src/appearance.tsx +0 -147
  37. package/template/apps/web/src/components/platform-fields/AddressField.tsx +0 -338
  38. package/template/apps/web/src/components/platform-fields/AttachmentFileList.tsx +0 -245
  39. package/template/apps/web/src/components/platform-fields/CascadeField.tsx +0 -49
  40. package/template/apps/web/src/components/platform-fields/DateTimeField.tsx +0 -148
  41. package/template/apps/web/src/components/platform-fields/JsonField.tsx +0 -77
  42. package/template/apps/web/src/components/platform-fields/LocationField.tsx +0 -164
  43. package/template/apps/web/src/components/platform-fields/PlatformDirectoryPicker.tsx +0 -673
  44. package/template/apps/web/src/components/platform-fields/ResourceReferenceField.tsx +0 -67
  45. package/template/apps/web/src/components/platform-fields/RichTextField.tsx +0 -196
  46. package/template/apps/web/src/components/platform-fields/SignatureField.tsx +0 -315
  47. package/template/apps/web/src/components/platform-fields/SubtableField.tsx +0 -553
  48. package/template/apps/web/src/components/platform-fields/address-value.ts +0 -80
  49. package/template/apps/web/src/components/platform-fields/cascade-value.ts +0 -66
  50. package/template/apps/web/src/components/platform-fields/directory-value.ts +0 -53
  51. package/template/apps/web/src/components/platform-fields/field-form-codec.ts +0 -98
  52. package/template/apps/web/src/components/platform-fields/location-value.ts +0 -87
  53. package/template/apps/web/src/components/platform-fields/resource-query.ts +0 -131
  54. package/template/apps/web/src/components/platform-fields/rich-text-value.ts +0 -59
  55. package/template/apps/web/src/components/platform-fields/subtable-value.ts +0 -187
  56. package/template/apps/web/src/components/resource/GeneratedResourceCrud.tsx +0 -1184
  57. package/template/apps/web/src/components/resource/ResourceBatchActions.tsx +0 -326
  58. package/template/apps/web/src/components/resource/StandardResourcePages.tsx +0 -392
  59. package/template/apps/web/src/components/resource/SurfaceFields.tsx +0 -915
  60. package/template/apps/web/src/components/resource/generated-resource-definition.ts +0 -18
  61. package/template/apps/web/src/components/resource/resource-import.ts +0 -205
  62. package/template/apps/web/src/data-provider.ts +0 -72
  63. package/template/apps/web/src/platform-client.ts +0 -708
  64. package/template/apps/web/src/runtime-meta.ts +0 -75
  65. package/template/apps/web/src/runtime.tsx +0 -227
  66. package/template/apps/web/src/styles.css +0 -1941
  67. package/template/apps/web/test/address-field.test.ts +0 -66
  68. package/template/apps/web/test/cascade-value.test.ts +0 -68
  69. package/template/apps/web/test/directory-value.test.ts +0 -55
  70. package/template/apps/web/test/field-bounds.test.ts +0 -17
  71. package/template/apps/web/test/field-form-codec.test.ts +0 -85
  72. package/template/apps/web/test/location-field.test.ts +0 -83
  73. package/template/apps/web/test/resource-import.test.ts +0 -143
  74. package/template/apps/web/test/resource-query.test.ts +0 -144
  75. package/template/apps/web/test/rich-json-field.test.ts +0 -53
  76. package/template/apps/web/test/signature-serial-field.test.ts +0 -40
  77. package/template/apps/web/test/subtable-value.test.ts +0 -144
@@ -1,1941 +0,0 @@
1
- html,
2
- body,
3
- #root {
4
- min-height: 100%;
5
- margin: 0;
6
- background: var(--oxa-shell-bg, #f5f5f5);
7
- }
8
-
9
- body {
10
- color: var(--oxa-shell-text, #1f1f1f);
11
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
12
- "Helvetica Neue", Arial, "Noto Sans", "PingFang SC", "Microsoft YaHei",
13
- sans-serif;
14
- }
15
-
16
- * {
17
- box-sizing: border-box;
18
- }
19
-
20
- .oxa-loading,
21
- .oxa-page-loading {
22
- display: grid;
23
- min-height: 60vh;
24
- place-items: center;
25
- }
26
-
27
- .oxa-global-request-loading {
28
- position: fixed;
29
- z-index: 1300;
30
- top: 0;
31
- right: 0;
32
- left: 0;
33
- height: 2px;
34
- overflow: hidden;
35
- pointer-events: none;
36
- }
37
-
38
- .oxa-global-request-loading span {
39
- position: absolute;
40
- width: 38%;
41
- height: 100%;
42
- border-radius: 2px;
43
- background: var(--oxa-shell-primary, #1677ff);
44
- animation: oxa-request-progress 1.1s ease-in-out infinite;
45
- box-shadow: 0 0 8px var(--oxa-shell-primary, #1677ff);
46
- }
47
-
48
- @keyframes oxa-request-progress {
49
- from {
50
- transform: translateX(-120%);
51
- }
52
-
53
- to {
54
- transform: translateX(380%);
55
- }
56
- }
57
-
58
- .oxa-app-layout {
59
- min-height: 100vh;
60
- background: var(--oxa-shell-bg, #f5f5f5);
61
- }
62
-
63
- .oxa-sider {
64
- position: sticky !important;
65
- top: 0;
66
- z-index: 20;
67
- height: 100vh;
68
- border-right: 1px solid var(--oxa-shell-border, #f0f0f0);
69
- background: var(--oxa-shell-surface, #fff) !important;
70
- box-shadow: none;
71
- }
72
-
73
- .oxa-sider .ant-layout-sider-children {
74
- display: flex;
75
- flex-direction: column;
76
- min-height: 100%;
77
- }
78
-
79
- .oxa-brand {
80
- display: flex;
81
- min-height: 64px;
82
- align-items: center;
83
- gap: 12px;
84
- border-bottom: 1px solid var(--oxa-shell-border, #f0f0f0);
85
- padding: 12px 18px;
86
- }
87
-
88
- .oxa-brand-mark {
89
- position: relative;
90
- width: 32px;
91
- min-width: 32px;
92
- height: 36px;
93
- }
94
-
95
- .oxa-brand-mark::before,
96
- .oxa-brand-mark::after {
97
- position: absolute;
98
- bottom: 2px;
99
- width: 10px;
100
- height: 34px;
101
- border-radius: 3px 3px 1px 1px;
102
- background: var(--oxa-shell-primary, #1677ff);
103
- content: "";
104
- transform-origin: bottom;
105
- }
106
-
107
- .oxa-brand-mark::before {
108
- left: 5px;
109
- transform: rotate(27deg);
110
- }
111
-
112
- .oxa-brand-mark::after {
113
- right: 5px;
114
- transform: rotate(-27deg);
115
- }
116
-
117
- .oxa-brand-mark span {
118
- position: absolute;
119
- z-index: 1;
120
- right: 4px;
121
- bottom: 3px;
122
- width: 15px;
123
- height: 9px;
124
- background: var(--oxa-shell-surface, #fff);
125
- transform: skewX(-27deg);
126
- }
127
-
128
- .oxa-brand-copy {
129
- display: grid;
130
- min-width: 0;
131
- gap: 5px;
132
- }
133
-
134
- .oxa-brand-copy strong {
135
- overflow: hidden;
136
- color: var(--oxa-shell-text, #1f1f1f);
137
- font-size: 16px;
138
- line-height: 1.2;
139
- text-overflow: ellipsis;
140
- white-space: nowrap;
141
- }
142
-
143
- .oxa-brand-copy span {
144
- overflow: hidden;
145
- color: var(--oxa-shell-text-secondary, #595959);
146
- font-size: 12px;
147
- text-overflow: ellipsis;
148
- white-space: nowrap;
149
- }
150
-
151
- .oxa-menu {
152
- flex: 1;
153
- overflow-y: auto;
154
- border-inline-end: 0 !important;
155
- background: transparent !important;
156
- padding: 6px 12px 80px;
157
- }
158
-
159
- .oxa-menu .ant-menu-submenu-title,
160
- .oxa-menu .ant-menu-item {
161
- min-height: 44px;
162
- margin-inline: 0;
163
- margin-block: 4px;
164
- color: var(--oxa-shell-text-secondary, #595959);
165
- font-weight: 600;
166
- }
167
-
168
- .oxa-menu .ant-menu-submenu .ant-menu-item {
169
- font-weight: 500;
170
- }
171
-
172
- .oxa-menu .ant-menu-item-selected {
173
- color: var(--oxa-shell-primary, #1677ff);
174
- background: var(--oxa-shell-primary-bg, #e6f4ff) !important;
175
- }
176
-
177
- .oxa-sider-footer {
178
- position: absolute;
179
- right: 12px;
180
- bottom: 16px;
181
- left: 12px;
182
- border-top: 1px solid var(--oxa-shell-border, #f0f0f0);
183
- background: var(--oxa-shell-surface, #fff);
184
- padding-top: 12px;
185
- }
186
-
187
- .oxa-sider-footer .ant-btn {
188
- min-height: 42px;
189
- justify-content: flex-start;
190
- color: var(--oxa-shell-text-secondary, #595959);
191
- font-weight: 600;
192
- }
193
-
194
- .oxa-workspace {
195
- min-width: 0;
196
- background: var(--oxa-shell-bg, #f5f5f5);
197
- }
198
-
199
- .oxa-topbar {
200
- position: sticky;
201
- top: 0;
202
- z-index: 15;
203
- display: flex;
204
- height: 52px;
205
- align-items: center;
206
- justify-content: space-between;
207
- border-bottom: 1px solid var(--oxa-shell-border, #f0f0f0);
208
- background: var(--oxa-shell-surface, #fff) !important;
209
- padding: 0 20px !important;
210
- line-height: normal;
211
- }
212
-
213
- .oxa-topbar .ant-breadcrumb {
214
- color: var(--oxa-shell-text-secondary, #595959);
215
- font-weight: 500;
216
- }
217
-
218
- .oxa-topbar .ant-breadcrumb-link {
219
- cursor: pointer;
220
- }
221
-
222
- .oxa-current-user {
223
- display: inline-flex;
224
- min-width: 0;
225
- height: 36px;
226
- align-items: center;
227
- gap: 8px;
228
- justify-content: flex-end;
229
- border: 0;
230
- border-radius: 6px;
231
- background: transparent;
232
- padding: 3px 6px;
233
- color: var(--oxa-shell-text, #1f1f1f);
234
- cursor: pointer;
235
- transition: background 0.2s;
236
- }
237
-
238
- .oxa-current-user:hover,
239
- .oxa-current-user:focus-visible {
240
- background: var(--oxa-shell-hover, rgb(0 0 0 / 6%));
241
- outline: 0;
242
- }
243
-
244
- .oxa-current-user-avatar {
245
- background: var(--oxa-shell-primary, #1677ff);
246
- }
247
-
248
- .oxa-current-user strong {
249
- max-width: 96px;
250
- overflow: hidden;
251
- font-size: 13px;
252
- font-weight: 600;
253
- text-overflow: ellipsis;
254
- white-space: nowrap;
255
- }
256
-
257
- .oxa-current-user-chevron {
258
- color: var(--oxa-shell-text-tertiary, #8c8c8c);
259
- font-size: 10px;
260
- }
261
-
262
- .oxa-user-dropdown {
263
- width: 292px;
264
- overflow: hidden;
265
- border: 1px solid var(--oxa-shell-border, #f0f0f0);
266
- border-radius: 8px;
267
- background: var(--oxa-shell-elevated, #fff);
268
- box-shadow: var(--oxa-shell-shadow, 0 1px 6px rgb(0 0 0 / 8%));
269
- padding-top: 4px;
270
- }
271
-
272
- .oxa-user-dropdown-profile {
273
- display: flex;
274
- align-items: center;
275
- gap: 12px;
276
- padding: 14px 16px 10px;
277
- }
278
-
279
- .oxa-user-dropdown-profile > div:last-child {
280
- display: grid;
281
- min-width: 0;
282
- flex: 1;
283
- gap: 2px;
284
- }
285
-
286
- .oxa-user-dropdown-profile strong,
287
- .oxa-user-dropdown-profile span,
288
- .oxa-user-dropdown-profile small {
289
- overflow: hidden;
290
- text-overflow: ellipsis;
291
- white-space: nowrap;
292
- }
293
-
294
- .oxa-user-dropdown-profile span,
295
- .oxa-user-dropdown-profile small,
296
- .oxa-user-dropdown-roles > span,
297
- .oxa-user-dropdown-theme > span {
298
- color: var(--oxa-shell-text-secondary, #595959);
299
- font-size: 12px;
300
- }
301
-
302
- .oxa-user-dropdown-roles,
303
- .oxa-user-dropdown-theme {
304
- display: grid;
305
- gap: 7px;
306
- margin: 0 12px;
307
- border-top: 1px solid var(--oxa-shell-border, #f0f0f0);
308
- padding: 10px 4px;
309
- }
310
-
311
- .oxa-user-dropdown > .ant-dropdown-menu {
312
- border-top: 1px solid var(--oxa-shell-border, #f0f0f0);
313
- border-radius: 0;
314
- box-shadow: none;
315
- }
316
-
317
- .oxa-role-switch-select {
318
- width: 100%;
319
- }
320
-
321
- .oxa-role-switch-option {
322
- display: grid;
323
- min-width: 0;
324
- gap: 2px;
325
- padding: 2px 0;
326
- }
327
-
328
- .oxa-role-switch-option strong,
329
- .oxa-role-switch-option span {
330
- overflow: hidden;
331
- text-overflow: ellipsis;
332
- white-space: nowrap;
333
- }
334
-
335
- .oxa-role-switch-option span {
336
- color: var(--oxa-shell-text-secondary, #595959);
337
- font-size: 12px;
338
- }
339
-
340
- .oxa-role-switch-help {
341
- margin: 10px 0 0 !important;
342
- }
343
-
344
- .oxa-route-history {
345
- position: sticky;
346
- z-index: 14;
347
- top: 52px;
348
- height: 36px;
349
- overflow: hidden;
350
- border-bottom: 1px solid var(--oxa-shell-border, #f0f0f0);
351
- background: var(--oxa-shell-surface, #fff);
352
- padding: 0 12px;
353
- }
354
-
355
- .oxa-route-history .ant-tabs,
356
- .oxa-route-history .ant-tabs-nav {
357
- height: 35px;
358
- margin: 0;
359
- }
360
-
361
- .oxa-route-history .ant-tabs-content-holder {
362
- display: none;
363
- }
364
-
365
- .oxa-route-history .ant-tabs-tab {
366
- border: 0 !important;
367
- border-right: 1px solid var(--oxa-shell-border, #f0f0f0) !important;
368
- border-radius: 0 !important;
369
- background: transparent !important;
370
- padding: 5px 12px !important;
371
- }
372
-
373
- .oxa-route-history .ant-tabs-tab-active {
374
- background: var(--oxa-shell-primary-bg, #e6f4ff) !important;
375
- }
376
-
377
- .oxa-mobile-page {
378
- min-height: 100vh;
379
- box-sizing: border-box;
380
- background: var(--oxa-shell-bg, #f5f5f5);
381
- padding: 16px;
382
- }
383
-
384
- .oxa-mobile-header {
385
- display: grid;
386
- gap: 6px;
387
- margin-bottom: 14px;
388
- }
389
-
390
- .oxa-mobile-header .ant-typography {
391
- margin: 0;
392
- }
393
-
394
- .oxa-mobile-form {
395
- margin-top: 14px;
396
- }
397
-
398
- .oxa-mobile-field .ant-form-item-control-input-content {
399
- min-height: 44px;
400
- }
401
-
402
- .oxa-mobile-input {
403
- width: 100%;
404
- min-height: 42px;
405
- box-sizing: border-box;
406
- border: 1px solid var(--oxa-shell-border-strong, #d9d9d9);
407
- border-radius: 8px;
408
- background: var(--oxa-shell-surface, #fff);
409
- padding: 9px 11px;
410
- color: var(--oxa-shell-text, #1f1f1f);
411
- font: inherit;
412
- }
413
-
414
- .oxa-mobile-input:focus {
415
- border-color: var(--oxa-shell-primary, #1677ff);
416
- outline: 2px solid
417
- color-mix(in srgb, var(--oxa-shell-primary, #1677ff) 15%, transparent);
418
- }
419
-
420
- .oxa-mobile-filter,
421
- .oxa-mobile-pagination,
422
- .oxa-mobile-record-heading,
423
- .oxa-mobile-record-fields {
424
- display: grid;
425
- gap: 10px;
426
- }
427
-
428
- .oxa-mobile-filter {
429
- margin: 14px 0;
430
- }
431
-
432
- .oxa-mobile-record-list {
433
- display: grid;
434
- gap: 12px;
435
- margin-top: 14px;
436
- }
437
-
438
- .oxa-mobile-record-card {
439
- border-color: var(--oxa-shell-border, #f0f0f0);
440
- }
441
-
442
- .oxa-mobile-record-heading {
443
- grid-template-columns: minmax(0, 1fr) auto;
444
- align-items: center;
445
- }
446
-
447
- .oxa-mobile-record-heading a {
448
- overflow: hidden;
449
- color: var(--oxa-shell-primary, #1677ff);
450
- font-size: 16px;
451
- font-weight: 650;
452
- text-overflow: ellipsis;
453
- white-space: nowrap;
454
- }
455
-
456
- .oxa-mobile-record-fields {
457
- grid-template-columns: repeat(2, minmax(0, 1fr));
458
- margin: 12px 0;
459
- }
460
-
461
- .oxa-mobile-record-fields > div {
462
- min-width: 0;
463
- }
464
-
465
- .oxa-mobile-pagination {
466
- grid-template-columns: 1fr auto 1fr;
467
- align-items: center;
468
- margin-top: 14px;
469
- }
470
-
471
- .oxa-mobile-pagination .ant-btn:last-child {
472
- justify-self: end;
473
- }
474
-
475
- .oxa-content {
476
- min-width: 0;
477
- background: var(--oxa-shell-bg, #f5f5f5);
478
- }
479
-
480
- .oxa-main {
481
- width: 100%;
482
- max-width: 1680px;
483
- min-height: calc(100vh - 88px);
484
- margin: 0 auto;
485
- padding: 20px 24px 48px;
486
- }
487
-
488
- .oxa-title {
489
- margin: 0;
490
- color: var(--oxa-shell-text, #1f1f1f);
491
- font-size: 19px;
492
- }
493
-
494
- .oxa-muted {
495
- color: var(--oxa-shell-text-secondary, #595959);
496
- }
497
-
498
- .oxa-page-heading {
499
- display: flex;
500
- width: 100%;
501
- align-items: center;
502
- justify-content: space-between;
503
- gap: 16px;
504
- margin-bottom: 18px;
505
- }
506
-
507
- .oxa-list-card,
508
- .oxa-section-card,
509
- .oxa-detail-hero,
510
- .oxa-edit-hero {
511
- border-color: var(--oxa-shell-border, #f0f0f0);
512
- background: var(--oxa-shell-surface, #fff);
513
- box-shadow: var(--oxa-shell-shadow, 0 1px 6px rgb(0 0 0 / 8%));
514
- }
515
-
516
- .oxa-list-card > .ant-card-body {
517
- padding: 0;
518
- }
519
-
520
- .oxa-list-surface {
521
- display: grid;
522
- }
523
-
524
- .oxa-search-panel {
525
- display: grid;
526
- grid-template-columns: minmax(0, 1fr) auto;
527
- align-items: start;
528
- gap: 12px;
529
- border-bottom: 1px solid var(--oxa-shell-border, #f0f0f0);
530
- padding: 16px;
531
- }
532
-
533
- .oxa-filter-grid {
534
- display: grid;
535
- grid-template-columns: repeat(4, minmax(170px, 1fr));
536
- gap: 12px;
537
- }
538
-
539
- .oxa-filter-item > .ant-select,
540
- .oxa-filter-item > .ant-picker {
541
- width: 100%;
542
- }
543
-
544
- .oxa-filter-item.is-collapsed {
545
- display: none;
546
- }
547
-
548
- .oxa-filter-actions,
549
- .oxa-list-toolbar,
550
- .oxa-list-toolbar-primary,
551
- .oxa-list-toolbar-secondary {
552
- display: flex;
553
- align-items: center;
554
- gap: 8px;
555
- }
556
-
557
- .oxa-filter-actions {
558
- align-items: flex-start;
559
- }
560
-
561
- .oxa-list-toolbar {
562
- min-height: 56px;
563
- justify-content: space-between;
564
- border-bottom: 1px solid var(--oxa-shell-border, #f0f0f0);
565
- padding: 10px 16px;
566
- }
567
-
568
- .oxa-list-toolbar-secondary .ant-btn {
569
- color: var(--oxa-shell-text-secondary, #595959);
570
- }
571
-
572
- .oxa-batch-bar {
573
- display: flex;
574
- min-height: 52px;
575
- align-items: center;
576
- justify-content: space-between;
577
- gap: 12px;
578
- border-bottom: 1px solid var(--oxa-shell-border, #f0f0f0);
579
- background: var(--ant-color-primary-bg, #e6f4ff);
580
- padding: 8px 16px;
581
- }
582
-
583
- .oxa-import-errors {
584
- max-height: 180px;
585
- margin: 8px 0 0;
586
- overflow: auto;
587
- padding-left: 20px;
588
- }
589
-
590
- .oxa-list-card .ant-table-wrapper {
591
- border: 0;
592
- border-radius: 0;
593
- overflow: hidden;
594
- }
595
-
596
- .oxa-list-card .ant-table-thead > tr > th {
597
- background: var(--oxa-shell-subtle, #fafafa);
598
- color: var(--oxa-shell-text, #1f1f1f);
599
- font-weight: 600;
600
- }
601
-
602
- .oxa-list-card .ant-table-pagination {
603
- margin: 16px !important;
604
- }
605
-
606
- .oxa-sections {
607
- display: grid;
608
- gap: 16px;
609
- }
610
-
611
- .oxa-resource-form {
612
- display: grid;
613
- gap: 16px;
614
- }
615
-
616
- .oxa-section-card .ant-card-head {
617
- min-height: 48px;
618
- padding-inline: 18px;
619
- }
620
-
621
- .oxa-section-card .ant-card-body {
622
- padding: 18px;
623
- }
624
-
625
- .oxa-grid {
626
- display: grid;
627
- grid-template-columns: repeat(3, minmax(0, 1fr));
628
- column-gap: 20px;
629
- }
630
-
631
- .oxa-field-wide {
632
- grid-column: 1 / -1;
633
- }
634
-
635
- .oxa-actions {
636
- position: sticky;
637
- z-index: 5;
638
- bottom: 0;
639
- display: flex;
640
- justify-content: flex-end;
641
- gap: 10px;
642
- border-top: 1px solid var(--oxa-shell-border, #f0f0f0);
643
- background: color-mix(
644
- in srgb,
645
- var(--oxa-shell-surface, #fff) 96%,
646
- transparent
647
- );
648
- padding: 14px 0;
649
- backdrop-filter: blur(8px);
650
- }
651
-
652
- .oxa-form-full .oxa-actions {
653
- margin-top: 4px;
654
- padding-inline: 18px;
655
- box-shadow: 0 -3px 12px color-mix(in srgb, var(--oxa-shell-text, #1f1f1f) 4%, transparent);
656
- }
657
-
658
- .oxa-authoritative-selector {
659
- width: 100%;
660
- }
661
-
662
- .oxa-selector-option {
663
- display: flex;
664
- width: 100%;
665
- min-height: 40px;
666
- align-items: center;
667
- }
668
-
669
- .oxa-selector-option-copy {
670
- display: grid;
671
- min-width: 0;
672
- gap: 2px;
673
- }
674
-
675
- .oxa-selector-option-copy strong,
676
- .oxa-selector-option-copy small {
677
- overflow: hidden;
678
- text-overflow: ellipsis;
679
- white-space: nowrap;
680
- }
681
-
682
- .oxa-selector-option-copy small,
683
- .oxa-selector-tag small,
684
- .oxa-resolved-item small {
685
- color: var(--oxa-shell-text-secondary, #595959);
686
- font-size: 11px;
687
- }
688
-
689
- .oxa-selector-icon {
690
- display: grid;
691
- width: 28px;
692
- height: 28px;
693
- place-items: center;
694
- border-radius: 7px;
695
- background: var(--oxa-shell-primary-bg, #e6f4ff);
696
- color: var(--oxa-shell-primary, #1677ff);
697
- font-size: 14px;
698
- }
699
-
700
- .oxa-selector-avatar {
701
- background: var(--oxa-shell-primary-bg, #e6f4ff);
702
- color: var(--oxa-shell-primary, #1677ff);
703
- font-size: 12px;
704
- }
705
-
706
- .oxa-selector-tag {
707
- display: inline-flex;
708
- height: 26px;
709
- align-items: center;
710
- gap: 5px;
711
- border-color: var(--oxa-shell-border, #f0f0f0);
712
- background: var(--oxa-shell-subtle, #fafafa);
713
- padding-inline: 4px 7px;
714
- }
715
-
716
- .oxa-selector-tag .ant-avatar {
717
- width: 20px !important;
718
- min-width: 20px;
719
- height: 20px !important;
720
- font-size: 10px;
721
- line-height: 20px;
722
- }
723
-
724
- .oxa-resolved-values {
725
- display: inline-flex;
726
- flex-wrap: wrap;
727
- gap: 8px;
728
- }
729
-
730
- .oxa-resolved-item {
731
- display: inline-flex;
732
- min-height: 30px;
733
- align-items: center;
734
- gap: 7px;
735
- border: 1px solid var(--oxa-shell-border, #f0f0f0);
736
- border-radius: 7px;
737
- background: var(--oxa-shell-subtle, #fafafa);
738
- padding: 4px 8px;
739
- }
740
-
741
- .oxa-resolved-item > span:last-child {
742
- display: grid;
743
- gap: 1px;
744
- }
745
-
746
- .oxa-resolved-resource .oxa-resolved-item {
747
- border-color: var(--oxa-shell-primary-border, #91caff);
748
- background: var(--oxa-shell-primary-bg, #e6f4ff);
749
- color: var(--oxa-shell-primary, #1677ff);
750
- }
751
-
752
- .oxa-directory-trigger {
753
- display: flex;
754
- min-height: 38px;
755
- align-items: center;
756
- gap: 8px;
757
- border: 1px solid var(--oxa-shell-border-strong, #d9d9d9);
758
- border-radius: 8px;
759
- background: var(--oxa-shell-surface, #fff);
760
- color: var(--oxa-shell-text, #1f1f1f);
761
- padding: 3px 5px 3px 10px;
762
- cursor: pointer;
763
- transition: border-color 0.2s, box-shadow 0.2s;
764
- }
765
-
766
- .oxa-directory-trigger:hover,
767
- .oxa-directory-trigger:focus-visible {
768
- border-color: var(--oxa-shell-primary, #1677ff);
769
- box-shadow: 0 0 0 2px
770
- color-mix(in srgb, var(--oxa-shell-primary, #1677ff) 10%, transparent);
771
- outline: 0;
772
- }
773
-
774
- .oxa-directory-trigger.is-disabled {
775
- border-color: var(--oxa-shell-border-strong, #d9d9d9);
776
- background: var(--oxa-shell-subtle, #fafafa);
777
- color: var(--oxa-shell-text-disabled, rgb(0 0 0 / 25%));
778
- cursor: not-allowed;
779
- }
780
-
781
- .oxa-directory-trigger-icon {
782
- color: var(--oxa-shell-primary, #1677ff);
783
- }
784
-
785
- .oxa-directory-trigger-values {
786
- display: flex;
787
- min-width: 0;
788
- flex: 1;
789
- flex-wrap: wrap;
790
- align-items: center;
791
- gap: 4px;
792
- }
793
-
794
- .oxa-directory-placeholder {
795
- color: var(--oxa-shell-text-disabled, rgb(0 0 0 / 25%));
796
- }
797
-
798
- .oxa-directory-panel {
799
- display: grid;
800
- gap: 14px;
801
- }
802
-
803
- .oxa-directory-main {
804
- display: grid;
805
- min-height: 460px;
806
- grid-template-columns: 220px minmax(280px, 1fr) 240px;
807
- overflow: hidden;
808
- border: 1px solid var(--oxa-shell-border, #f0f0f0);
809
- border-radius: 8px;
810
- background: var(--oxa-shell-surface, #fff);
811
- }
812
-
813
- .oxa-directory-tree-pane,
814
- .oxa-directory-member-pane,
815
- .oxa-directory-selected-pane {
816
- min-width: 0;
817
- padding: 14px;
818
- }
819
-
820
- .oxa-directory-tree-pane {
821
- border-right: 1px solid var(--oxa-shell-border, #f0f0f0);
822
- background: var(--oxa-shell-subtle, #fafafa);
823
- }
824
-
825
- .oxa-directory-member-pane {
826
- display: grid;
827
- min-height: 460px;
828
- grid-template-rows: auto minmax(0, 1fr) auto;
829
- gap: 10px;
830
- }
831
-
832
- .oxa-directory-members {
833
- max-height: 364px;
834
- overflow: auto;
835
- }
836
-
837
- .oxa-directory-member-row {
838
- min-height: 58px;
839
- border-bottom: 1px solid var(--oxa-shell-border, #f0f0f0);
840
- padding: 8px 4px;
841
- }
842
-
843
- .oxa-directory-results {
844
- display: grid;
845
- gap: 6px;
846
- }
847
-
848
- .oxa-directory-department-row {
849
- display: flex;
850
- min-height: 54px;
851
- align-items: center;
852
- gap: 10px;
853
- border: 1px solid transparent;
854
- border-radius: 7px;
855
- padding: 8px;
856
- cursor: pointer;
857
- }
858
-
859
- .oxa-directory-department-row:hover,
860
- .oxa-directory-department-row:focus-visible {
861
- border-color: var(--oxa-shell-primary-border, #91caff);
862
- background: var(--oxa-shell-primary-bg, #e6f4ff);
863
- outline: 0;
864
- }
865
-
866
- .oxa-directory-department-row > span:nth-child(2) {
867
- display: grid;
868
- min-width: 0;
869
- flex: 1;
870
- gap: 2px;
871
- }
872
-
873
- .oxa-directory-department-row small {
874
- color: var(--oxa-shell-text-secondary, #595959);
875
- font-size: 11px;
876
- }
877
-
878
- .oxa-directory-selected-pane {
879
- border-left: 1px solid var(--oxa-shell-border, #f0f0f0);
880
- background: var(--oxa-shell-subtle, #fafafa);
881
- }
882
-
883
- .oxa-directory-pane-title,
884
- .oxa-directory-pagination,
885
- .oxa-directory-footer {
886
- display: flex;
887
- align-items: center;
888
- justify-content: space-between;
889
- gap: 10px;
890
- }
891
-
892
- .oxa-directory-pane-title {
893
- min-height: 32px;
894
- margin-bottom: 10px;
895
- color: var(--oxa-shell-text, #1f1f1f);
896
- font-weight: 600;
897
- }
898
-
899
- .oxa-directory-member-row {
900
- display: flex;
901
- width: 100%;
902
- align-items: center;
903
- gap: 10px;
904
- cursor: pointer;
905
- }
906
-
907
- .oxa-directory-member-row > span:last-child,
908
- .oxa-directory-selected-item > span:nth-child(2) {
909
- display: grid;
910
- min-width: 0;
911
- flex: 1;
912
- gap: 2px;
913
- }
914
-
915
- .oxa-directory-member-row small,
916
- .oxa-directory-selected-item small {
917
- overflow: hidden;
918
- color: var(--oxa-shell-text-secondary, #595959);
919
- font-size: 11px;
920
- text-overflow: ellipsis;
921
- white-space: nowrap;
922
- }
923
-
924
- .oxa-directory-selected-list {
925
- display: grid;
926
- gap: 8px;
927
- }
928
-
929
- .oxa-directory-selected-item {
930
- display: flex;
931
- align-items: center;
932
- gap: 8px;
933
- border: 1px solid var(--oxa-shell-border, #f0f0f0);
934
- border-radius: 7px;
935
- background: var(--oxa-shell-surface, #fff);
936
- padding: 7px;
937
- }
938
-
939
- .oxa-department-main {
940
- grid-template-columns: minmax(300px, 1fr) 240px;
941
- }
942
-
943
- .oxa-directory-footer {
944
- justify-content: flex-end;
945
- border-top: 1px solid var(--oxa-shell-border, #f0f0f0);
946
- padding-top: 14px;
947
- }
948
-
949
- .oxa-file-field {
950
- display: grid;
951
- gap: 10px;
952
- }
953
-
954
- .oxa-file-dropzone .ant-upload-drag {
955
- min-height: 72px;
956
- border-color: var(--oxa-shell-border-strong, #d9d9d9);
957
- background: var(--oxa-shell-subtle, #fafafa);
958
- padding: 12px;
959
- }
960
-
961
- .oxa-file-dropzone .ant-upload-drag-container {
962
- display: grid;
963
- gap: 5px;
964
- color: var(--oxa-shell-text-secondary, #595959);
965
- }
966
-
967
- .oxa-file-dropzone small {
968
- color: var(--oxa-shell-text-tertiary, #8c8c8c);
969
- }
970
-
971
- .oxa-file-dropzone kbd {
972
- border: 1px solid var(--oxa-shell-border-strong, #d9d9d9);
973
- border-bottom-width: 2px;
974
- border-radius: 4px;
975
- background: var(--oxa-shell-surface, #fff);
976
- padding: 1px 5px;
977
- color: var(--oxa-shell-text, #1f1f1f);
978
- font-family: inherit;
979
- }
980
-
981
- .oxa-file-list {
982
- display: grid;
983
- gap: 8px;
984
- }
985
-
986
- .oxa-file-item,
987
- .oxa-file-error {
988
- display: flex;
989
- min-height: 50px;
990
- align-items: center;
991
- gap: 10px;
992
- border: 1px solid var(--oxa-shell-border, #f0f0f0);
993
- border-radius: 8px;
994
- background: var(--oxa-shell-surface, #fff);
995
- padding: 7px 9px;
996
- }
997
-
998
- .oxa-file-kind {
999
- display: grid;
1000
- width: 32px;
1001
- height: 32px;
1002
- place-items: center;
1003
- border-radius: 7px;
1004
- background: var(--oxa-shell-primary-bg, #e6f4ff);
1005
- color: var(--oxa-shell-primary, #1677ff);
1006
- }
1007
-
1008
- .oxa-file-thumbnail {
1009
- display: block;
1010
- width: 32px;
1011
- height: 32px;
1012
- object-fit: cover;
1013
- }
1014
-
1015
- .oxa-file-meta {
1016
- display: grid;
1017
- min-width: 0;
1018
- flex: 1;
1019
- gap: 2px;
1020
- }
1021
-
1022
- .oxa-file-name-button {
1023
- border: 0;
1024
- background: transparent;
1025
- padding: 0;
1026
- color: inherit;
1027
- font: inherit;
1028
- text-align: left;
1029
- cursor: pointer;
1030
- }
1031
-
1032
- .oxa-file-name-button:hover strong {
1033
- color: var(--oxa-shell-primary, #1677ff);
1034
- }
1035
-
1036
- .oxa-file-name-button:disabled {
1037
- cursor: wait;
1038
- opacity: 0.65;
1039
- }
1040
-
1041
- .oxa-file-meta strong {
1042
- overflow: hidden;
1043
- text-overflow: ellipsis;
1044
- white-space: nowrap;
1045
- }
1046
-
1047
- .oxa-file-meta small,
1048
- .oxa-file-empty {
1049
- color: var(--oxa-shell-text-secondary, #595959);
1050
- font-size: 12px;
1051
- }
1052
-
1053
- .oxa-file-error {
1054
- border-color: var(--oxa-shell-error-border, #ffccc7);
1055
- background: var(--oxa-shell-error-bg, #fff2f0);
1056
- color: var(--oxa-shell-error, #ff4d4f);
1057
- }
1058
-
1059
- .oxa-file-error > span {
1060
- flex: 1;
1061
- }
1062
-
1063
- .oxa-file-empty {
1064
- border: 1px dashed var(--oxa-shell-border-strong, #d9d9d9);
1065
- border-radius: 8px;
1066
- padding: 10px;
1067
- text-align: center;
1068
- }
1069
-
1070
- .oxa-location-field {
1071
- display: grid;
1072
- gap: 10px;
1073
- }
1074
-
1075
- .oxa-location-field .ant-alert {
1076
- max-width: 520px;
1077
- }
1078
-
1079
- .oxa-location-value {
1080
- display: inline-grid;
1081
- max-width: 100%;
1082
- gap: 2px;
1083
- }
1084
-
1085
- .oxa-location-value > span {
1086
- overflow-wrap: anywhere;
1087
- }
1088
-
1089
- .oxa-location-value-readonly {
1090
- min-width: 160px;
1091
- }
1092
-
1093
- .oxa-address-field {
1094
- display: grid;
1095
- gap: 8px;
1096
- width: 100%;
1097
- }
1098
-
1099
- .oxa-address-field > .ant-cascader,
1100
- .oxa-address-field > .ant-select {
1101
- width: 100%;
1102
- }
1103
-
1104
- .oxa-address-value {
1105
- display: inline-flex;
1106
- flex-direction: column;
1107
- gap: 2px;
1108
- }
1109
-
1110
- .oxa-mobile-address-field {
1111
- grid-template-columns: minmax(0, 1fr) auto;
1112
- }
1113
-
1114
- .oxa-mobile-address-field > .ant-btn:first-child {
1115
- min-width: 0;
1116
- overflow: hidden;
1117
- text-align: left;
1118
- text-overflow: ellipsis;
1119
- white-space: nowrap;
1120
- }
1121
-
1122
- .oxa-address-mobile-levels {
1123
- display: grid;
1124
- gap: 12px;
1125
- }
1126
-
1127
- .oxa-address-mobile-levels > .ant-select {
1128
- width: 100%;
1129
- }
1130
-
1131
- .oxa-address-mobile-actions {
1132
- display: flex;
1133
- justify-content: flex-end;
1134
- margin-top: 20px;
1135
- width: 100%;
1136
- }
1137
-
1138
- .oxa-rich-text-field,
1139
- .oxa-json-field {
1140
- display: grid;
1141
- gap: 8px;
1142
- width: 100%;
1143
- }
1144
-
1145
- .oxa-rich-text-toolbar {
1146
- border: 1px solid var(--oxa-shell-border-strong, #d9d9d9);
1147
- border-bottom: 0;
1148
- border-radius: 6px 6px 0 0;
1149
- padding: 6px;
1150
- }
1151
-
1152
- .oxa-rich-text-editor {
1153
- border: 1px solid var(--oxa-shell-border-strong, #d9d9d9);
1154
- border-radius: 0 0 6px 6px;
1155
- min-height: 160px;
1156
- overflow-wrap: anywhere;
1157
- padding: 10px 12px;
1158
- }
1159
-
1160
- .oxa-rich-text-editor:focus {
1161
- border-color: var(--oxa-shell-primary, #1677ff);
1162
- box-shadow: 0 0 0 2px rgb(5 145 255 / 10%);
1163
- outline: 0;
1164
- }
1165
-
1166
- .oxa-rich-text-value {
1167
- max-width: 100%;
1168
- overflow-wrap: anywhere;
1169
- }
1170
-
1171
- .oxa-rich-text-value img {
1172
- height: auto;
1173
- max-width: 100%;
1174
- }
1175
-
1176
- .oxa-mobile-rich-text-field .oxa-rich-text-editor {
1177
- min-height: 220px;
1178
- }
1179
-
1180
- .oxa-json-field textarea,
1181
- .oxa-json-value {
1182
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1183
- }
1184
-
1185
- .oxa-json-value {
1186
- margin: 0;
1187
- max-height: 320px;
1188
- max-width: 100%;
1189
- overflow: auto;
1190
- white-space: pre-wrap;
1191
- word-break: break-word;
1192
- }
1193
-
1194
- .oxa-json-valid {
1195
- color: var(--oxa-shell-success, #389e0d);
1196
- }
1197
-
1198
- .oxa-signature-field,
1199
- .oxa-signature-value,
1200
- .oxa-signature-pad {
1201
- display: grid;
1202
- gap: 10px;
1203
- width: 100%;
1204
- }
1205
-
1206
- .oxa-signature-value {
1207
- justify-items: start;
1208
- }
1209
-
1210
- .oxa-signature-image {
1211
- max-height: 180px;
1212
- max-width: min(100%, 520px);
1213
- object-fit: contain;
1214
- }
1215
-
1216
- .oxa-signature-hash {
1217
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1218
- overflow-wrap: anywhere;
1219
- }
1220
-
1221
- .oxa-signature-canvas {
1222
- background: #fff;
1223
- border: 1px solid var(--oxa-shell-border-strong, #d9d9d9);
1224
- border-radius: 6px;
1225
- height: 240px;
1226
- touch-action: none;
1227
- user-select: none;
1228
- width: 100%;
1229
- }
1230
-
1231
- .oxa-subtable-field {
1232
- width: 100%;
1233
- min-width: 0;
1234
- }
1235
-
1236
- .oxa-subtable-toolbar {
1237
- display: flex;
1238
- min-height: 32px;
1239
- align-items: center;
1240
- justify-content: space-between;
1241
- margin-bottom: 8px;
1242
- }
1243
-
1244
- .oxa-subtable-loading {
1245
- display: flex;
1246
- min-height: 88px;
1247
- align-items: center;
1248
- justify-content: center;
1249
- }
1250
-
1251
- .oxa-mobile-subtable-list {
1252
- border-top: 1px solid #e5e7eb;
1253
- }
1254
-
1255
- .oxa-mobile-subtable-row {
1256
- padding: 12px 0;
1257
- border-bottom: 1px solid #e5e7eb;
1258
- }
1259
-
1260
- .oxa-mobile-subtable-values {
1261
- display: grid;
1262
- gap: 10px;
1263
- margin-bottom: 8px;
1264
- }
1265
-
1266
- .oxa-mobile-subtable-values > div {
1267
- display: grid;
1268
- grid-template-columns: minmax(88px, 32%) minmax(0, 1fr);
1269
- gap: 8px;
1270
- align-items: start;
1271
- }
1272
-
1273
- .oxa-mobile-subtable-editor {
1274
- display: grid;
1275
- gap: 4px;
1276
- }
1277
-
1278
- .oxa-mobile-number-field {
1279
- align-items: center;
1280
- border: 1px solid var(--oxa-shell-border-strong, #d9d9d9);
1281
- border-radius: 6px;
1282
- display: grid;
1283
- gap: 8px;
1284
- grid-template-columns: auto minmax(0, 1fr) auto;
1285
- min-height: 40px;
1286
- padding: 0 10px;
1287
- }
1288
-
1289
- .oxa-mobile-number-field > input {
1290
- border: 0;
1291
- min-width: 0;
1292
- outline: 0;
1293
- width: 100%;
1294
- }
1295
-
1296
- .oxa-mobile-location-field .ant-space {
1297
- width: 100%;
1298
- }
1299
-
1300
- .oxa-dictionary-drawer .ant-drawer-body {
1301
- padding: 22px;
1302
- }
1303
-
1304
- .oxa-detail-hero,
1305
- .oxa-edit-hero {
1306
- margin-bottom: 16px;
1307
- }
1308
-
1309
- .oxa-detail-hero .ant-card-body,
1310
- .oxa-edit-hero .ant-card-body {
1311
- padding: 18px 20px;
1312
- }
1313
-
1314
- .oxa-detail-hero-top,
1315
- .oxa-detail-hero-main,
1316
- .oxa-edit-hero-title {
1317
- display: flex;
1318
- align-items: center;
1319
- justify-content: space-between;
1320
- gap: 16px;
1321
- }
1322
-
1323
- .oxa-file-preview-page {
1324
- min-height: 100vh;
1325
- background: var(--oxa-shell-bg, #f5f5f5);
1326
- }
1327
-
1328
- .oxa-file-preview-toolbar {
1329
- position: sticky;
1330
- z-index: 10;
1331
- top: 0;
1332
- display: flex;
1333
- min-height: 66px;
1334
- align-items: center;
1335
- justify-content: space-between;
1336
- gap: 20px;
1337
- border-bottom: 1px solid var(--oxa-shell-border, #f0f0f0);
1338
- background: color-mix(
1339
- in srgb,
1340
- var(--oxa-shell-surface, #fff) 96%,
1341
- transparent
1342
- );
1343
- padding: 10px 20px;
1344
- box-shadow: var(--oxa-shell-shadow, 0 1px 6px rgb(0 0 0 / 8%));
1345
- backdrop-filter: blur(12px);
1346
- }
1347
-
1348
- .oxa-file-preview-toolbar > div:last-child {
1349
- display: flex;
1350
- gap: 8px;
1351
- }
1352
-
1353
- .oxa-file-preview-title {
1354
- display: flex;
1355
- min-width: 0;
1356
- align-items: center;
1357
- gap: 12px;
1358
- }
1359
-
1360
- .oxa-file-preview-title > .anticon {
1361
- color: var(--oxa-shell-primary, #1677ff);
1362
- font-size: 26px;
1363
- }
1364
-
1365
- .oxa-file-preview-title > div {
1366
- display: grid;
1367
- min-width: 0;
1368
- gap: 2px;
1369
- }
1370
-
1371
- .oxa-file-preview-title strong,
1372
- .oxa-file-preview-title span {
1373
- overflow: hidden;
1374
- text-overflow: ellipsis;
1375
- white-space: nowrap;
1376
- }
1377
-
1378
- .oxa-file-preview-title span {
1379
- color: var(--oxa-shell-text-secondary, #595959);
1380
- font-size: 12px;
1381
- }
1382
-
1383
- .oxa-file-preview-body {
1384
- display: grid;
1385
- min-height: calc(100vh - 66px);
1386
- place-items: center;
1387
- padding: 20px;
1388
- }
1389
-
1390
- .oxa-preview-frame {
1391
- width: 100%;
1392
- height: calc(100vh - 106px);
1393
- border: 0;
1394
- border-radius: 8px;
1395
- background: var(--oxa-shell-surface, #fff);
1396
- box-shadow: 0 8px 32px rgb(24 42 72 / 10%);
1397
- }
1398
-
1399
- .oxa-preview-image {
1400
- max-width: 100%;
1401
- max-height: calc(100vh - 106px);
1402
- border-radius: 8px;
1403
- object-fit: contain;
1404
- box-shadow: 0 8px 32px rgb(24 42 72 / 12%);
1405
- }
1406
-
1407
- .oxa-docx-preview,
1408
- .oxa-spreadsheet-preview {
1409
- width: 100%;
1410
- height: calc(100vh - 106px);
1411
- overflow: auto;
1412
- border-radius: 8px;
1413
- background: var(--oxa-shell-surface, #fff);
1414
- box-shadow: 0 8px 32px rgb(24 42 72 / 10%);
1415
- }
1416
-
1417
- .oxa-docx-preview .docx-wrapper {
1418
- min-height: 100%;
1419
- background: var(--oxa-shell-subtle, #fafafa);
1420
- padding: 24px;
1421
- }
1422
-
1423
- .oxa-spreadsheet-preview {
1424
- display: flex;
1425
- flex-direction: column;
1426
- }
1427
-
1428
- .oxa-spreadsheet-preview > .ant-segmented {
1429
- flex: 0 0 auto;
1430
- margin: 12px;
1431
- }
1432
-
1433
- .oxa-spreadsheet-scroll {
1434
- min-height: 0;
1435
- flex: 1;
1436
- overflow: auto;
1437
- border-top: 1px solid var(--oxa-shell-border, #f0f0f0);
1438
- }
1439
-
1440
- .oxa-spreadsheet-scroll table {
1441
- min-width: 100%;
1442
- border-spacing: 0;
1443
- border-collapse: separate;
1444
- font-size: 13px;
1445
- }
1446
-
1447
- .oxa-spreadsheet-scroll th,
1448
- .oxa-spreadsheet-scroll td {
1449
- min-width: 96px;
1450
- max-width: 360px;
1451
- border-right: 1px solid var(--oxa-shell-border, #f0f0f0);
1452
- border-bottom: 1px solid var(--oxa-shell-border, #f0f0f0);
1453
- padding: 7px 9px;
1454
- background: var(--oxa-shell-surface, #fff);
1455
- text-align: left;
1456
- vertical-align: top;
1457
- white-space: pre-wrap;
1458
- word-break: break-word;
1459
- }
1460
-
1461
- .oxa-spreadsheet-scroll th {
1462
- position: sticky;
1463
- z-index: 1;
1464
- left: 0;
1465
- min-width: 52px;
1466
- background: var(--oxa-shell-subtle, #fafafa);
1467
- color: var(--oxa-shell-text-secondary, #595959);
1468
- text-align: center;
1469
- }
1470
-
1471
- .oxa-detail-hero-top {
1472
- align-items: flex-start;
1473
- }
1474
-
1475
- .oxa-detail-hero-top > .ant-btn:first-child,
1476
- .oxa-edit-hero-title .ant-btn-link {
1477
- height: auto;
1478
- padding: 0;
1479
- }
1480
-
1481
- .oxa-detail-hero-main {
1482
- margin-top: 14px;
1483
- align-items: flex-end;
1484
- }
1485
-
1486
- .oxa-detail-hero-main .ant-typography,
1487
- .oxa-edit-hero-title .ant-typography {
1488
- margin-top: 0;
1489
- margin-bottom: 4px;
1490
- }
1491
-
1492
- .oxa-detail-hero-main h2.ant-typography {
1493
- font-size: 22px;
1494
- }
1495
-
1496
- .oxa-resource-name.ant-typography {
1497
- margin-bottom: 2px;
1498
- font-size: 18px;
1499
- }
1500
-
1501
- .oxa-record-meta {
1502
- color: var(--oxa-shell-text-secondary, #595959);
1503
- font-size: 12px;
1504
- }
1505
-
1506
- .oxa-edit-hero-title {
1507
- margin-bottom: 14px;
1508
- align-items: flex-end;
1509
- }
1510
-
1511
- .oxa-edit-hero-title h2.ant-typography {
1512
- margin-top: 8px;
1513
- font-size: 22px;
1514
- }
1515
-
1516
- .oxa-detail-layout {
1517
- display: block;
1518
- }
1519
-
1520
- .oxa-detail-main,
1521
- .oxa-detail-aside {
1522
- display: grid;
1523
- gap: 16px;
1524
- }
1525
-
1526
- .oxa-detail-aside {
1527
- position: sticky;
1528
- top: 108px;
1529
- }
1530
-
1531
- .oxa-detail-main .ant-descriptions-item-label,
1532
- .oxa-detail-aside .ant-descriptions-item-label {
1533
- color: var(--oxa-shell-text-secondary, #595959);
1534
- }
1535
-
1536
- .oxa-audit-collapse {
1537
- overflow: hidden;
1538
- border: 1px solid var(--oxa-shell-border, #f0f0f0);
1539
- border-radius: 8px;
1540
- background: var(--oxa-shell-surface, #fff);
1541
- }
1542
-
1543
- .oxa-audit-collapse > .ant-collapse-item > .ant-collapse-header {
1544
- min-height: 52px;
1545
- align-items: center;
1546
- padding: 14px 18px;
1547
- }
1548
-
1549
- .oxa-audit-collapse .ant-collapse-content-box {
1550
- padding: 0 18px 12px !important;
1551
- }
1552
-
1553
- .oxa-audit-collapse-heading {
1554
- display: flex;
1555
- min-width: 0;
1556
- flex: 1;
1557
- align-items: center;
1558
- justify-content: space-between;
1559
- gap: 16px;
1560
- }
1561
-
1562
- .oxa-audit-collapse-heading span {
1563
- color: var(--oxa-shell-text-secondary, #595959);
1564
- font-size: 12px;
1565
- }
1566
-
1567
- .oxa-audit-loading {
1568
- padding: 18px 0;
1569
- color: var(--oxa-shell-text-secondary, #595959);
1570
- text-align: center;
1571
- }
1572
-
1573
- .oxa-audit-entry {
1574
- display: grid;
1575
- gap: 4px;
1576
- padding: 10px 0;
1577
- border-bottom: 1px solid var(--oxa-shell-border, #f0f0f0);
1578
- }
1579
-
1580
- .oxa-audit-entry:last-child {
1581
- border-bottom: 0;
1582
- }
1583
-
1584
- .oxa-audit-heading,
1585
- .oxa-audit-meta,
1586
- .oxa-audit-change-values {
1587
- display: flex;
1588
- align-items: center;
1589
- gap: 8px;
1590
- }
1591
-
1592
- .oxa-audit-heading {
1593
- justify-content: space-between;
1594
- }
1595
-
1596
- .oxa-audit-meta {
1597
- flex-wrap: wrap;
1598
- color: var(--oxa-shell-text-secondary, #595959);
1599
- font-size: 12px;
1600
- }
1601
-
1602
- .oxa-audit-meta .ant-typography {
1603
- font-size: 12px;
1604
- }
1605
-
1606
- .oxa-audit-changes {
1607
- display: grid;
1608
- gap: 7px;
1609
- margin-top: 4px;
1610
- }
1611
-
1612
- .oxa-audit-change {
1613
- display: grid;
1614
- gap: 3px;
1615
- padding: 7px 8px;
1616
- border-radius: 6px;
1617
- background: var(--oxa-shell-subtle, #fafafa);
1618
- }
1619
-
1620
- .oxa-audit-change-values {
1621
- min-width: 0;
1622
- color: var(--oxa-shell-text-secondary, #595959);
1623
- font-size: 12px;
1624
- }
1625
-
1626
- .oxa-audit-change-values > :not(svg) {
1627
- min-width: 0;
1628
- overflow: hidden;
1629
- text-overflow: ellipsis;
1630
- white-space: nowrap;
1631
- }
1632
-
1633
- .oxa-audit-entry > span {
1634
- color: var(--oxa-shell-text-secondary, #595959);
1635
- font-size: 12px;
1636
- }
1637
-
1638
- .oxa-mobile-reference-trigger {
1639
- display: flex;
1640
- width: 100%;
1641
- min-height: 42px;
1642
- align-items: center;
1643
- justify-content: space-between;
1644
- gap: 8px;
1645
- padding: 9px 12px;
1646
- border: 1px solid var(--oxa-shell-border-strong, #d9d9d9);
1647
- border-radius: 8px;
1648
- background: var(--oxa-shell-surface, #fff);
1649
- color: var(--oxa-shell-text, #1f1f1f);
1650
- font: inherit;
1651
- text-align: left;
1652
- }
1653
-
1654
- .oxa-mobile-reference-trigger:disabled {
1655
- background: var(--oxa-shell-subtle, #fafafa);
1656
- color: var(--oxa-shell-text-disabled, rgb(0 0 0 / 25%));
1657
- }
1658
-
1659
- .oxa-mobile-reference-placeholder {
1660
- color: var(--oxa-shell-text-disabled, rgb(0 0 0 / 25%));
1661
- }
1662
-
1663
- .oxa-mobile-reference-backdrop {
1664
- position: fixed;
1665
- z-index: 1200;
1666
- inset: 0;
1667
- display: flex;
1668
- align-items: flex-end;
1669
- background: var(--oxa-shell-mask, rgb(0 0 0 / 45%));
1670
- }
1671
-
1672
- .oxa-mobile-reference-sheet {
1673
- display: grid;
1674
- width: 100%;
1675
- max-height: min(78vh, 640px);
1676
- gap: 12px;
1677
- padding: 16px 16px max(16px, env(safe-area-inset-bottom));
1678
- overflow: auto;
1679
- border-radius: 16px 16px 0 0;
1680
- background: var(--oxa-shell-elevated, #fff);
1681
- box-shadow: 0 -8px 32px rgb(15 23 42 / 18%);
1682
- }
1683
-
1684
- .oxa-mobile-reference-header {
1685
- display: flex;
1686
- align-items: center;
1687
- justify-content: space-between;
1688
- color: var(--oxa-shell-text, #1f1f1f);
1689
- }
1690
-
1691
- .oxa-mobile-reference-header button,
1692
- .oxa-mobile-reference-more,
1693
- .oxa-mobile-reference-confirm {
1694
- border: 0;
1695
- background: transparent;
1696
- color: var(--oxa-shell-primary, #1677ff);
1697
- font: inherit;
1698
- }
1699
-
1700
- .oxa-mobile-reference-search {
1701
- width: 100%;
1702
- }
1703
-
1704
- .oxa-mobile-reference-options {
1705
- display: grid;
1706
- gap: 4px;
1707
- }
1708
-
1709
- .oxa-mobile-reference-option {
1710
- display: flex;
1711
- min-height: 48px;
1712
- align-items: center;
1713
- gap: 10px;
1714
- padding: 8px 4px;
1715
- border: 0;
1716
- border-radius: 8px;
1717
- background: transparent;
1718
- color: var(--oxa-shell-text, #1f1f1f);
1719
- font: inherit;
1720
- text-align: left;
1721
- }
1722
-
1723
- .oxa-mobile-reference-option.is-selected {
1724
- background: var(--oxa-shell-primary-bg, #e6f4ff);
1725
- }
1726
-
1727
- .oxa-mobile-reference-option:disabled {
1728
- color: var(--oxa-shell-text-disabled, rgb(0 0 0 / 25%));
1729
- opacity: 0.7;
1730
- }
1731
-
1732
- .oxa-mobile-reference-option-copy {
1733
- display: grid;
1734
- min-width: 0;
1735
- flex: 1;
1736
- gap: 2px;
1737
- }
1738
-
1739
- .oxa-mobile-reference-option-copy small {
1740
- overflow: hidden;
1741
- color: var(--oxa-shell-text-secondary, #595959);
1742
- font-size: 12px;
1743
- text-overflow: ellipsis;
1744
- white-space: nowrap;
1745
- }
1746
-
1747
- .oxa-mobile-reference-loading,
1748
- .oxa-mobile-reference-empty,
1749
- .oxa-mobile-reference-error {
1750
- padding: 12px 4px;
1751
- color: var(--oxa-shell-text-secondary, #595959);
1752
- font-size: 13px;
1753
- text-align: center;
1754
- }
1755
-
1756
- .oxa-mobile-reference-error {
1757
- color: var(--oxa-shell-error, #ff4d4f);
1758
- }
1759
-
1760
- .oxa-mobile-reference-more,
1761
- .oxa-mobile-reference-confirm {
1762
- min-height: 42px;
1763
- border-radius: 8px;
1764
- background: var(--oxa-shell-primary-bg, #e6f4ff);
1765
- font-weight: 600;
1766
- text-align: center;
1767
- }
1768
-
1769
- .oxa-mobile-reference-confirm {
1770
- background: var(--oxa-shell-primary, #1677ff);
1771
- color: #fff;
1772
- }
1773
-
1774
- .oxa-mobile-file-field {
1775
- display: grid;
1776
- gap: 8px;
1777
- }
1778
-
1779
- .oxa-mobile-file-button {
1780
- display: inline-flex !important;
1781
- width: 100%;
1782
- min-height: 42px;
1783
- align-items: center;
1784
- justify-content: center;
1785
- border: 1px solid var(--oxa-shell-border-strong, #d9d9d9) !important;
1786
- border-radius: 8px;
1787
- background: var(--oxa-shell-surface, #fff) !important;
1788
- color: var(--oxa-shell-primary, #1677ff);
1789
- font-weight: 600;
1790
- }
1791
-
1792
- .oxa-mobile-file-button.ant-btn:disabled {
1793
- background: var(--oxa-shell-subtle, #fafafa);
1794
- color: var(--oxa-shell-text-disabled, rgb(0 0 0 / 25%));
1795
- }
1796
-
1797
- .oxa-mobile-pending-files {
1798
- display: grid;
1799
- gap: 8px;
1800
- }
1801
-
1802
- .oxa-mobile-pending-file {
1803
- display: flex;
1804
- min-height: 42px;
1805
- align-items: center;
1806
- gap: 8px;
1807
- padding: 7px 9px;
1808
- border: 1px solid var(--oxa-shell-border, #f0f0f0);
1809
- border-radius: 8px;
1810
- background: var(--oxa-shell-subtle, #fafafa);
1811
- font-size: 13px;
1812
- }
1813
-
1814
- .oxa-mobile-pending-file-name {
1815
- min-width: 0;
1816
- overflow: hidden;
1817
- text-overflow: ellipsis;
1818
- white-space: nowrap;
1819
- }
1820
-
1821
- .oxa-mobile-pending-file-copy {
1822
- display: grid;
1823
- min-width: 0;
1824
- flex: 1;
1825
- gap: 2px;
1826
- }
1827
-
1828
- .oxa-mobile-pending-file-copy small {
1829
- color: var(--oxa-shell-text-secondary, #595959);
1830
- font-size: 12px;
1831
- }
1832
-
1833
- .oxa-mobile-pending-status {
1834
- color: var(--oxa-shell-primary, #1677ff);
1835
- white-space: nowrap;
1836
- }
1837
-
1838
- .oxa-mobile-pending-error {
1839
- max-width: 42%;
1840
- overflow: hidden;
1841
- color: var(--oxa-shell-error, #ff4d4f);
1842
- text-overflow: ellipsis;
1843
- white-space: nowrap;
1844
- }
1845
-
1846
- @media (max-width: 1280px) {
1847
- .oxa-grid,
1848
- .oxa-filter-grid {
1849
- grid-template-columns: repeat(2, minmax(0, 1fr));
1850
- }
1851
-
1852
- .oxa-detail-aside {
1853
- position: static;
1854
- grid-template-columns: repeat(2, minmax(0, 1fr));
1855
- }
1856
- }
1857
-
1858
- @media (max-width: 900px) {
1859
- .oxa-topbar {
1860
- height: 52px;
1861
- padding: 0 12px !important;
1862
- }
1863
-
1864
- .oxa-current-user {
1865
- min-width: 0;
1866
- }
1867
-
1868
- .oxa-current-user strong,
1869
- .oxa-current-user-chevron {
1870
- display: none;
1871
- }
1872
-
1873
- .oxa-route-history {
1874
- top: 52px;
1875
- }
1876
-
1877
- .oxa-main {
1878
- padding: 16px;
1879
- }
1880
-
1881
- .oxa-grid,
1882
- .oxa-filter-grid,
1883
- .oxa-detail-aside {
1884
- grid-template-columns: 1fr;
1885
- }
1886
-
1887
- .oxa-search-panel {
1888
- grid-template-columns: 1fr;
1889
- }
1890
-
1891
- .oxa-filter-actions,
1892
- .oxa-list-toolbar,
1893
- .oxa-batch-bar {
1894
- align-items: stretch;
1895
- flex-direction: column;
1896
- }
1897
-
1898
- .oxa-list-toolbar-primary,
1899
- .oxa-list-toolbar-secondary {
1900
- flex-wrap: wrap;
1901
- }
1902
-
1903
- .oxa-detail-hero-main,
1904
- .oxa-detail-hero-top,
1905
- .oxa-edit-hero-title,
1906
- .oxa-page-heading {
1907
- align-items: flex-start;
1908
- flex-direction: column;
1909
- }
1910
-
1911
- .oxa-record-meta {
1912
- align-self: stretch;
1913
- }
1914
-
1915
- .oxa-directory-main,
1916
- .oxa-department-main {
1917
- min-height: 0;
1918
- grid-template-columns: 1fr;
1919
- }
1920
-
1921
- .oxa-directory-tree-pane,
1922
- .oxa-directory-selected-pane {
1923
- border: 0;
1924
- border-bottom: 1px solid var(--oxa-shell-border, #f0f0f0);
1925
- }
1926
-
1927
- .oxa-directory-tree-pane,
1928
- .oxa-directory-member-pane,
1929
- .oxa-directory-selected-pane {
1930
- max-height: 34vh;
1931
- overflow: auto;
1932
- }
1933
- }
1934
-
1935
- @media (prefers-reduced-motion: reduce) {
1936
- .oxa-global-request-loading span {
1937
- width: 100%;
1938
- animation: none;
1939
- transform: none;
1940
- }
1941
- }