@tailor-platform/sdk 2.0.0-next.5 → 2.0.0-next.6

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 (118) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/{application-Bf8wxOi6.mjs → application-BJXRpQj5.mjs} +190 -1258
  3. package/dist/application-BJXRpQj5.mjs.map +1 -0
  4. package/dist/application-BV-AXawv.mjs +3 -0
  5. package/dist/cli/commands/deploy/deploy.d.mts +8 -3
  6. package/dist/cli/commands/generate/options.d.mts +0 -1
  7. package/dist/cli/commands/generate/service.d.mts +1 -1
  8. package/dist/cli/commands/staticwebsite/deploy.d.mts +19 -0
  9. package/dist/cli/commands/workspace/create.d.mts +3 -0
  10. package/dist/cli/commands/workspace/list.d.mts +1 -0
  11. package/dist/cli/commands/workspace/transform.d.mts +2 -0
  12. package/dist/cli/index.mjs +776 -1551
  13. package/dist/cli/index.mjs.map +1 -1
  14. package/dist/cli/lib.d.mts +7 -3
  15. package/dist/cli/lib.mjs +49 -3
  16. package/dist/cli/lib.mjs.map +1 -1
  17. package/dist/cli/shared/config-loader.d.mts +1 -1
  18. package/dist/cli/shared/readonly-guard.d.mts +25 -0
  19. package/dist/cli/shared/tailordb-namespaces.d.mts +37 -0
  20. package/dist/cli/shared/workspace-name.d.mts +1 -0
  21. package/dist/completion/zsh-worker.zsh +15 -303
  22. package/dist/configure/index.mjs +7 -6
  23. package/dist/configure/index.mjs.map +1 -1
  24. package/dist/configure/services/executor/executor.d.mts +2 -13
  25. package/dist/configure/services/executor/operation.d.mts +7 -2
  26. package/dist/configure/services/tailordb/schema.d.mts +1 -7
  27. package/dist/configure/services/tailordb/types.d.mts +1 -1
  28. package/dist/configure/services/workflow/execution-policy.d.mts +2 -2
  29. package/dist/configure/types/type.d.mts +1 -9
  30. package/dist/{crashreport-D3RjuSYb.mjs → crashreport-0ioNRZ4K.mjs} +1 -1
  31. package/dist/{crashreport-Cg-pqRJV.mjs → crashreport-CxHne11E.mjs} +4 -3
  32. package/dist/{crashreport-Cg-pqRJV.mjs.map → crashreport-CxHne11E.mjs.map} +1 -1
  33. package/dist/errors-DfnF4ibq.mjs +100 -0
  34. package/dist/errors-DfnF4ibq.mjs.map +1 -0
  35. package/dist/{globals-BjhJJ2dN.mjs → globals-D-YbJKW-.mjs} +16 -10
  36. package/dist/globals-D-YbJKW-.mjs.map +1 -0
  37. package/dist/{logger-BEiZZ3qT.mjs → logger-BwS4ppwO.mjs} +3 -3
  38. package/dist/logger-BwS4ppwO.mjs.map +1 -0
  39. package/dist/parser/service/tailordb/type-source.d.mts +10 -0
  40. package/dist/{register-ts-hook-BhzVkej0.mjs → register-ts-hook-DL31O2W9.mjs} +2623 -1645
  41. package/dist/register-ts-hook-DL31O2W9.mjs.map +1 -0
  42. package/dist/{registry-BSbq6SPo.mjs → registry-CC3CbQiF.mjs} +3 -3
  43. package/dist/registry-CC3CbQiF.mjs.map +1 -0
  44. package/dist/runtime/field-parse.d.mts +10 -0
  45. package/dist/runtime/globals.d.mts +5 -2
  46. package/dist/runtime/index.mjs +1 -1
  47. package/dist/runtime/workflow.d.mts +70 -10
  48. package/dist/runtime/workflow.mjs +1 -1
  49. package/dist/{schema-iCd1ugGp.mjs → schema--xYWRGfe.mjs} +42 -24
  50. package/dist/schema--xYWRGfe.mjs.map +1 -0
  51. package/dist/{secret-file-aoNXJmKa.mjs → secret-file-C3J4Gy8r.mjs} +2 -27
  52. package/dist/secret-file-C3J4Gy8r.mjs.map +1 -0
  53. package/dist/{secretmanager-Bd45j7an.mjs → secretmanager-IY4UvinW.mjs} +42 -9
  54. package/dist/secretmanager-IY4UvinW.mjs.map +1 -0
  55. package/dist/{service-CzZEVrp9.mjs → service-CnHz9rwz.mjs} +34 -12
  56. package/dist/service-CnHz9rwz.mjs.map +1 -0
  57. package/dist/{service-DeZeYa06.mjs → service-DaeJlBoH.mjs} +3 -3
  58. package/dist/{service-DeZeYa06.mjs.map → service-DaeJlBoH.mjs.map} +1 -1
  59. package/dist/service-nU6ITOHL.mjs +3 -0
  60. package/dist/service_pb-BoLM0X4K.mjs +167 -0
  61. package/dist/service_pb-BoLM0X4K.mjs.map +1 -0
  62. package/dist/{service_pb-DZkfjB_6.mjs → service_pb-r1T7kpJc.mjs} +1 -1
  63. package/dist/types/executor.generated.d.mts +60 -42
  64. package/dist/user-agent-Bgsszb5I.mjs +28 -0
  65. package/dist/user-agent-Bgsszb5I.mjs.map +1 -0
  66. package/dist/vitest/environment.mjs +1 -1
  67. package/dist/vitest/index.d.mts +8 -8
  68. package/dist/vitest/index.mjs +591 -173
  69. package/dist/vitest/index.mjs.map +1 -1
  70. package/dist/vitest/mock.d.mts +8 -8
  71. package/dist/vitest/mocks/aigateway.d.mts +14 -4
  72. package/dist/vitest/mocks/authconnection.d.mts +14 -4
  73. package/dist/vitest/mocks/file.d.mts +23 -6
  74. package/dist/vitest/mocks/iconv.d.mts +28 -4
  75. package/dist/vitest/mocks/idp.d.mts +25 -9
  76. package/dist/vitest/mocks/secretmanager.d.mts +13 -4
  77. package/dist/vitest/mocks/tailordb.d.mts +48 -7
  78. package/dist/vitest/mocks/workflow.d.mts +68 -22
  79. package/dist/vitest/setup.mjs +2 -2
  80. package/dist/workflow-9kHGKxF2.mjs +64 -0
  81. package/dist/workflow-9kHGKxF2.mjs.map +1 -0
  82. package/dist/{service_pb-Bk7dL-yT.mjs → workspace_resource_pb-Db3fv68L.mjs} +47 -165
  83. package/dist/workspace_resource_pb-Db3fv68L.mjs.map +1 -0
  84. package/docs/cli/application.md +61 -15
  85. package/docs/cli/tailordb.md +8 -140
  86. package/docs/cli/workspace.md +6 -4
  87. package/docs/cli-reference.md +11 -8
  88. package/docs/github-actions.md +8 -0
  89. package/docs/migration/v2.md +41 -0
  90. package/docs/runtime.md +5 -6
  91. package/docs/services/executor.md +5 -0
  92. package/docs/services/tailordb.md +44 -0
  93. package/docs/services/workflow.md +2 -2
  94. package/docs/testing.md +105 -89
  95. package/package.json +2 -5
  96. package/dist/application-Bf8wxOi6.mjs.map +0 -1
  97. package/dist/application-CUkjzfij.mjs +0 -3
  98. package/dist/cli/erd-viewer-assets/app.js +0 -1424
  99. package/dist/cli/erd-viewer-assets/index.html +0 -77
  100. package/dist/cli/erd-viewer-assets/serve.json +0 -13
  101. package/dist/cli/erd-viewer-assets/styles.css +0 -1036
  102. package/dist/configure/types/field-runtime.d.mts +0 -16
  103. package/dist/errors-118wUDRr.mjs +0 -42
  104. package/dist/errors-118wUDRr.mjs.map +0 -1
  105. package/dist/globals-BjhJJ2dN.mjs.map +0 -1
  106. package/dist/logger-BEiZZ3qT.mjs.map +0 -1
  107. package/dist/register-ts-hook-BhzVkej0.mjs.map +0 -1
  108. package/dist/registry-BSbq6SPo.mjs.map +0 -1
  109. package/dist/resource_pb-BRv7AMXK.mjs +0 -49
  110. package/dist/resource_pb-BRv7AMXK.mjs.map +0 -1
  111. package/dist/schema-iCd1ugGp.mjs.map +0 -1
  112. package/dist/secret-file-aoNXJmKa.mjs.map +0 -1
  113. package/dist/secretmanager-Bd45j7an.mjs.map +0 -1
  114. package/dist/service-BT0GPd01.mjs +0 -3
  115. package/dist/service-CzZEVrp9.mjs.map +0 -1
  116. package/dist/service_pb-Bk7dL-yT.mjs.map +0 -1
  117. package/dist/workflow-GNuSnsTx.mjs +0 -22
  118. package/dist/workflow-GNuSnsTx.mjs.map +0 -1
@@ -1,1036 +0,0 @@
1
- :root {
2
- color-scheme: dark;
3
- --bg: #111313;
4
- --canvas: #101111;
5
- --panel: #202322;
6
- --panel-raised: #262928;
7
- --line: #343938;
8
- --line-strong: #555d5b;
9
- --text: #e7ecea;
10
- --muted: #a0a7a4;
11
- --subtle: #2d3130;
12
- --accent: #4950e5;
13
- --accent-weak: rgba(73, 80, 229, 0.18);
14
- --accent-glow: rgba(73, 80, 229, 0.34);
15
- --warn: #f2b84b;
16
- --danger: #ff6b5f;
17
- --diff-added: #4ed983;
18
- --diff-added-bg: rgba(78, 217, 131, 0.14);
19
- --diff-changed: #f2b84b;
20
- --diff-changed-bg: rgba(242, 184, 75, 0.14);
21
- --diff-removed: #ff6b5f;
22
- --diff-removed-bg: rgba(255, 107, 95, 0.14);
23
- --shadow: 0 16px 34px rgba(0, 0, 0, 0.42);
24
- --card-width: 260px;
25
- --toolbar-height: 56px;
26
- }
27
-
28
- * {
29
- box-sizing: border-box;
30
- }
31
-
32
- html,
33
- body,
34
- #app {
35
- width: 100%;
36
- height: 100%;
37
- margin: 0;
38
- }
39
-
40
- body {
41
- background: var(--bg);
42
- color: var(--text);
43
- font-family:
44
- Inter,
45
- ui-sans-serif,
46
- system-ui,
47
- -apple-system,
48
- BlinkMacSystemFont,
49
- "Segoe UI",
50
- sans-serif;
51
- letter-spacing: 0;
52
- }
53
-
54
- button,
55
- input {
56
- font: inherit;
57
- }
58
-
59
- button {
60
- height: 34px;
61
- border: 1px solid var(--line);
62
- border-radius: 7px;
63
- background: #1a1d1c;
64
- color: var(--text);
65
- cursor: pointer;
66
- }
67
-
68
- button:hover {
69
- border-color: var(--line-strong);
70
- background: #242827;
71
- }
72
-
73
- .app {
74
- display: grid;
75
- grid-template-rows: var(--toolbar-height) 1fr;
76
- min-width: 0;
77
- }
78
-
79
- .toolbar {
80
- display: grid;
81
- grid-template-columns: minmax(220px, 1fr) minmax(240px, 360px) minmax(120px, 1fr);
82
- align-items: center;
83
- gap: 18px;
84
- padding: 8px 16px;
85
- border-bottom: 1px solid var(--line);
86
- background: #222525;
87
- }
88
-
89
- .brand {
90
- display: flex;
91
- align-items: center;
92
- gap: 12px;
93
- min-width: 0;
94
- }
95
-
96
- .brand-mark {
97
- display: inline-grid;
98
- width: 30px;
99
- height: 30px;
100
- place-items: center;
101
- border-radius: 35%;
102
- background: var(--accent);
103
- color: #fff;
104
- font-weight: 800;
105
- }
106
-
107
- .brand h1 {
108
- margin: 0;
109
- overflow: hidden;
110
- font-size: 16px;
111
- font-weight: 700;
112
- line-height: 1.2;
113
- text-overflow: ellipsis;
114
- white-space: nowrap;
115
- }
116
-
117
- .brand p {
118
- margin: 2px 0 0;
119
- overflow: hidden;
120
- color: var(--muted);
121
- font-size: 11px;
122
- text-overflow: ellipsis;
123
- white-space: nowrap;
124
- }
125
-
126
- .toolbar-search input {
127
- width: 100%;
128
- height: 34px;
129
- border: 1px solid var(--line);
130
- border-radius: 7px;
131
- padding: 0 12px;
132
- outline: none;
133
- background: #141716;
134
- color: var(--text);
135
- }
136
-
137
- .toolbar-search input::placeholder {
138
- color: #777e7b;
139
- }
140
-
141
- .toolbar-search input:focus {
142
- border-color: var(--accent);
143
- box-shadow: 0 0 0 3px var(--accent-weak);
144
- }
145
-
146
- .toolbar-actions {
147
- display: flex;
148
- align-items: center;
149
- gap: 10px;
150
- justify-content: flex-end;
151
- }
152
-
153
- .view-mode-control {
154
- display: inline-grid;
155
- grid-template-columns: repeat(2, minmax(72px, 1fr));
156
- min-width: 152px;
157
- border: 1px solid var(--line);
158
- border-radius: 8px;
159
- padding: 2px;
160
- background: #171a19;
161
- }
162
-
163
- .view-mode-control[hidden] {
164
- display: none;
165
- }
166
-
167
- .view-mode-button {
168
- height: 28px;
169
- border: 0;
170
- border-radius: 6px;
171
- background: transparent;
172
- color: var(--muted);
173
- font-size: 12px;
174
- font-weight: 800;
175
- }
176
-
177
- .view-mode-button:hover {
178
- background: #252a28;
179
- color: var(--text);
180
- }
181
-
182
- .view-mode-button[aria-pressed="true"] {
183
- background: var(--accent);
184
- color: #fff;
185
- }
186
-
187
- .primary-action {
188
- min-width: 104px;
189
- border-color: var(--accent);
190
- background: var(--accent);
191
- color: #fff;
192
- font-weight: 800;
193
- }
194
-
195
- .primary-action:hover {
196
- background: #5f65ee;
197
- }
198
-
199
- .main {
200
- display: grid;
201
- min-height: 0;
202
- grid-template-columns: 240px minmax(0, 1fr) 360px;
203
- }
204
-
205
- .main.is-details-collapsed {
206
- grid-template-columns: 240px minmax(0, 1fr);
207
- }
208
-
209
- .table-nav,
210
- .details {
211
- min-width: 0;
212
- overflow: auto;
213
- border-color: var(--line);
214
- background: var(--panel);
215
- }
216
-
217
- .table-nav {
218
- border-right: 1px solid var(--line);
219
- }
220
-
221
- .details {
222
- border-left: 1px solid var(--line);
223
- }
224
-
225
- .nav-head {
226
- display: flex;
227
- position: sticky;
228
- top: 0;
229
- z-index: 2;
230
- align-items: center;
231
- justify-content: space-between;
232
- gap: 8px;
233
- height: 52px;
234
- padding: 0 12px;
235
- border-bottom: 1px solid var(--line);
236
- background: var(--panel);
237
- }
238
-
239
- .nav-title {
240
- display: grid;
241
- min-width: 0;
242
- gap: 2px;
243
- }
244
-
245
- .nav-head h2 {
246
- margin: 0;
247
- font-size: 13px;
248
- }
249
-
250
- .nav-head span {
251
- color: var(--muted);
252
- font-size: 12px;
253
- }
254
-
255
- .table-list {
256
- display: grid;
257
- gap: 1px;
258
- padding: 8px 0;
259
- }
260
-
261
- .table-list-row {
262
- display: grid;
263
- grid-template-columns: minmax(0, 1fr) 32px;
264
- align-items: center;
265
- min-width: 0;
266
- }
267
-
268
- .table-select {
269
- display: grid;
270
- grid-template-columns: 16px minmax(0, 1fr);
271
- align-items: center;
272
- gap: 8px;
273
- width: 100%;
274
- height: 34px;
275
- border: 0;
276
- border-radius: 0;
277
- padding: 0 12px;
278
- background: transparent;
279
- color: var(--muted);
280
- text-align: left;
281
- }
282
-
283
- .table-select:hover {
284
- background: #252a28;
285
- color: var(--text);
286
- }
287
-
288
- .table-select[aria-current="true"] {
289
- background: linear-gradient(90deg, var(--accent-weak), rgba(73, 80, 229, 0.04));
290
- color: var(--text);
291
- font-weight: 700;
292
- }
293
-
294
- .table-list-label,
295
- .table-name-wrap,
296
- .field-name,
297
- .detail-name {
298
- display: flex;
299
- min-width: 0;
300
- align-items: center;
301
- gap: 6px;
302
- }
303
-
304
- .table-name-wrap {
305
- flex: 1 1 auto;
306
- }
307
-
308
- .table-list-name,
309
- .field-name-text {
310
- min-width: 0;
311
- overflow: hidden;
312
- text-overflow: ellipsis;
313
- white-space: nowrap;
314
- }
315
-
316
- .diff-badge {
317
- display: inline-grid;
318
- flex: 0 0 auto;
319
- min-width: 16px;
320
- height: 16px;
321
- place-items: center;
322
- border: 1px solid currentColor;
323
- border-radius: 999px;
324
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
325
- font-size: 11px;
326
- font-weight: 800;
327
- line-height: 1;
328
- }
329
-
330
- .diff-badge-added {
331
- background: var(--diff-added-bg);
332
- color: var(--diff-added);
333
- }
334
-
335
- .diff-badge-changed {
336
- background: var(--diff-changed-bg);
337
- color: var(--diff-changed);
338
- }
339
-
340
- .diff-badge-removed {
341
- background: var(--diff-removed-bg);
342
- color: var(--diff-removed);
343
- }
344
-
345
- .diff-detail {
346
- display: block;
347
- margin-top: 5px;
348
- color: var(--muted);
349
- font-size: 11px;
350
- line-height: 1.35;
351
- overflow-wrap: anywhere;
352
- }
353
-
354
- .detail-row.is-diff-added .diff-detail {
355
- color: var(--diff-added);
356
- }
357
-
358
- .detail-row.is-diff-changed .diff-detail {
359
- color: var(--diff-changed);
360
- }
361
-
362
- .detail-row.is-diff-removed .diff-detail {
363
- color: var(--diff-removed);
364
- }
365
-
366
- .table-list-row.is-diff-added .table-select {
367
- background: linear-gradient(90deg, var(--diff-added-bg), transparent);
368
- color: var(--text);
369
- }
370
-
371
- .table-list-row.is-diff-changed .table-select {
372
- background: linear-gradient(90deg, var(--diff-changed-bg), transparent);
373
- color: var(--text);
374
- }
375
-
376
- .table-list-row.is-diff-removed .table-select {
377
- background: linear-gradient(90deg, var(--diff-removed-bg), transparent);
378
- color: var(--text);
379
- }
380
-
381
- .table-list-row.is-hidden .table-select {
382
- color: #69716e;
383
- }
384
-
385
- .table-visibility-toggle {
386
- display: grid;
387
- width: 28px;
388
- height: 28px;
389
- place-items: center;
390
- border: 0;
391
- border-radius: 6px;
392
- padding: 0;
393
- background: transparent;
394
- color: var(--muted);
395
- }
396
-
397
- .table-visibility-toggle:hover:not(:disabled) {
398
- background: #252a28;
399
- color: var(--text);
400
- }
401
-
402
- .table-visibility-toggle:disabled {
403
- opacity: 0.42;
404
- }
405
-
406
- .eye-icon {
407
- width: 15px;
408
- height: 15px;
409
- fill: none;
410
- stroke: currentColor;
411
- stroke-linecap: round;
412
- stroke-linejoin: round;
413
- stroke-width: 1.8;
414
- }
415
-
416
- .table-list-icon,
417
- .table-icon {
418
- display: inline-block;
419
- width: 14px;
420
- height: 14px;
421
- border: 1px solid currentColor;
422
- border-radius: 2px;
423
- opacity: 0.86;
424
- background:
425
- linear-gradient(90deg, transparent 45%, currentColor 45%, currentColor 55%, transparent 55%),
426
- linear-gradient(transparent 45%, currentColor 45%, currentColor 55%, transparent 55%);
427
- }
428
-
429
- .canvas {
430
- position: relative;
431
- min-width: 0;
432
- overflow: hidden;
433
- background:
434
- radial-gradient(circle, rgba(255, 255, 255, 0.11) 1px, transparent 1.2px), var(--canvas);
435
- background-size: 22px 22px;
436
- cursor: grab;
437
- touch-action: none;
438
- user-select: none;
439
- }
440
-
441
- .canvas.is-panning {
442
- cursor: grabbing;
443
- }
444
-
445
- .world {
446
- position: absolute;
447
- top: 0;
448
- left: 0;
449
- transform-origin: 0 0;
450
- }
451
-
452
- .edges,
453
- .nodes {
454
- position: absolute;
455
- top: 0;
456
- left: 0;
457
- }
458
-
459
- .edges {
460
- overflow: visible;
461
- pointer-events: none;
462
- }
463
-
464
- .edge {
465
- fill: none;
466
- stroke: #4c5351;
467
- stroke-width: 2;
468
- }
469
-
470
- .edge.is-selected {
471
- filter: drop-shadow(0 0 7px var(--accent-glow));
472
- stroke: var(--accent);
473
- stroke-width: 3;
474
- }
475
-
476
- .edge.is-diff-added {
477
- stroke: var(--diff-added);
478
- }
479
-
480
- .edge.is-diff-changed {
481
- stroke: var(--diff-changed);
482
- }
483
-
484
- .edge.is-diff-removed {
485
- stroke: var(--diff-removed);
486
- stroke-dasharray: 8 5;
487
- }
488
-
489
- .edge.is-selected.is-diff-added,
490
- .edge.is-selected.is-diff-changed,
491
- .edge.is-selected.is-diff-removed {
492
- stroke-width: 3;
493
- }
494
-
495
- .edge-cardinality {
496
- pointer-events: none;
497
- }
498
-
499
- .edge-cardinality line,
500
- .edge-cardinality circle {
501
- fill: var(--canvas);
502
- stroke: #4c5351;
503
- stroke-linecap: square;
504
- stroke-linejoin: round;
505
- stroke-width: 2;
506
- }
507
-
508
- .edge-cardinality.is-selected line,
509
- .edge-cardinality.is-selected circle {
510
- fill: var(--canvas);
511
- stroke: var(--accent);
512
- stroke-width: 3;
513
- }
514
-
515
- .edge-cardinality.is-diff-added line,
516
- .edge-cardinality.is-diff-added circle {
517
- stroke: var(--diff-added);
518
- }
519
-
520
- .edge-cardinality.is-diff-changed line,
521
- .edge-cardinality.is-diff-changed circle {
522
- stroke: var(--diff-changed);
523
- }
524
-
525
- .edge-cardinality.is-diff-removed line,
526
- .edge-cardinality.is-diff-removed circle {
527
- stroke: var(--diff-removed);
528
- }
529
-
530
- .table-card {
531
- appearance: none;
532
- position: absolute;
533
- display: flex;
534
- flex-direction: column;
535
- width: var(--card-width);
536
- min-height: 62px;
537
- align-items: stretch;
538
- padding: 0;
539
- border: 1px solid var(--line-strong);
540
- border-radius: 8px;
541
- background: var(--panel-raised);
542
- box-shadow: 0 12px 26px rgba(0, 0, 0, 0.32);
543
- color: var(--muted);
544
- cursor: grab;
545
- font: inherit;
546
- text-align: left;
547
- touch-action: none;
548
- user-select: none;
549
- }
550
-
551
- .table-card:focus-visible {
552
- outline: 2px solid var(--accent);
553
- outline-offset: 3px;
554
- }
555
-
556
- .table-card.is-selected {
557
- border-color: var(--accent);
558
- box-shadow:
559
- 0 0 0 1px var(--accent),
560
- 0 0 26px var(--accent-glow),
561
- 0 18px 32px rgba(0, 0, 0, 0.44);
562
- color: var(--text);
563
- }
564
-
565
- .table-card.is-related {
566
- border-color: #55625d;
567
- color: var(--text);
568
- }
569
-
570
- .table-card.is-muted {
571
- opacity: 0.36;
572
- }
573
-
574
- .table-card.is-diff-added {
575
- border-color: var(--diff-added);
576
- box-shadow:
577
- 0 0 0 1px rgba(78, 217, 131, 0.32),
578
- 0 16px 30px rgba(0, 0, 0, 0.38);
579
- }
580
-
581
- .table-card.is-diff-changed {
582
- border-color: var(--diff-changed);
583
- box-shadow:
584
- 0 0 0 1px rgba(242, 184, 75, 0.3),
585
- 0 16px 30px rgba(0, 0, 0, 0.38);
586
- }
587
-
588
- .table-card.is-diff-removed {
589
- border-color: var(--diff-removed);
590
- box-shadow:
591
- 0 0 0 1px rgba(255, 107, 95, 0.32),
592
- 0 16px 30px rgba(0, 0, 0, 0.38);
593
- }
594
-
595
- .table-card.is-dragging {
596
- z-index: 4;
597
- cursor: grabbing;
598
- }
599
-
600
- .table-head {
601
- display: flex;
602
- min-width: 0;
603
- min-height: 60px;
604
- align-items: center;
605
- gap: 10px;
606
- padding: 0 16px;
607
- }
608
-
609
- .table-card.is-diff-added .table-head {
610
- background: linear-gradient(90deg, var(--diff-added-bg), transparent);
611
- }
612
-
613
- .table-card.is-diff-changed .table-head {
614
- background: linear-gradient(90deg, var(--diff-changed-bg), transparent);
615
- }
616
-
617
- .table-card.is-diff-removed .table-head {
618
- background: linear-gradient(90deg, var(--diff-removed-bg), transparent);
619
- }
620
-
621
- .table-card.is-diff-removed .table-name {
622
- text-decoration: line-through;
623
- text-decoration-color: var(--diff-removed);
624
- }
625
-
626
- .table-name {
627
- min-width: 0;
628
- overflow: hidden;
629
- font-size: 16px;
630
- font-weight: 700;
631
- text-overflow: ellipsis;
632
- white-space: nowrap;
633
- }
634
-
635
- .table-fields {
636
- display: grid;
637
- border-top: 1px solid var(--line);
638
- }
639
-
640
- .table-field {
641
- display: grid;
642
- min-width: 0;
643
- height: 28px;
644
- grid-template-columns: minmax(0, 1fr) auto;
645
- gap: 8px;
646
- align-items: center;
647
- padding: 0 10px 0 16px;
648
- color: var(--muted);
649
- font-size: 11px;
650
- }
651
-
652
- .table-field + .table-field {
653
- border-top: 1px solid #303534;
654
- }
655
-
656
- .table-field.is-key {
657
- color: var(--text);
658
- }
659
-
660
- .table-field.is-diff-added {
661
- background: var(--diff-added-bg);
662
- color: var(--text);
663
- }
664
-
665
- .table-field.is-diff-changed {
666
- background: var(--diff-changed-bg);
667
- color: var(--text);
668
- }
669
-
670
- .table-field.is-diff-removed {
671
- background: var(--diff-removed-bg);
672
- color: var(--text);
673
- }
674
-
675
- .table-field.is-diff-removed .field-name-text {
676
- text-decoration: line-through;
677
- text-decoration-color: var(--diff-removed);
678
- }
679
-
680
- .field-type {
681
- max-width: 92px;
682
- overflow: hidden;
683
- color: #7f8784;
684
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
685
- font-size: 10px;
686
- text-overflow: ellipsis;
687
- white-space: nowrap;
688
- }
689
-
690
- .details-inner {
691
- display: grid;
692
- gap: 18px;
693
- padding: 16px;
694
- }
695
-
696
- .details h2,
697
- .details h3 {
698
- margin: 0;
699
- line-height: 1.2;
700
- }
701
-
702
- .details h2 {
703
- display: flex;
704
- align-items: center;
705
- gap: 8px;
706
- font-size: 16px;
707
- }
708
-
709
- .details h3 {
710
- color: var(--text);
711
- font-size: 14px;
712
- }
713
-
714
- .details p {
715
- margin: 6px 0 0;
716
- color: var(--muted);
717
- font-size: 13px;
718
- line-height: 1.45;
719
- }
720
-
721
- .details-section {
722
- display: grid;
723
- gap: 10px;
724
- border-top: 1px solid var(--line);
725
- padding-top: 16px;
726
- }
727
-
728
- .detail-list {
729
- display: grid;
730
- gap: 8px;
731
- }
732
-
733
- .detail-row {
734
- display: grid;
735
- grid-template-columns: minmax(0, 1fr) auto;
736
- gap: 10px;
737
- align-items: start;
738
- border: 1px solid var(--line);
739
- border-radius: 4px;
740
- padding: 9px;
741
- background: #2a2d2c;
742
- }
743
-
744
- .detail-row.is-diff-added {
745
- border-color: rgba(78, 217, 131, 0.58);
746
- background: linear-gradient(90deg, var(--diff-added-bg), #2a2d2c 72%);
747
- }
748
-
749
- .detail-row.is-diff-changed {
750
- border-color: rgba(242, 184, 75, 0.58);
751
- background: linear-gradient(90deg, var(--diff-changed-bg), #2a2d2c 72%);
752
- }
753
-
754
- .detail-row.is-diff-removed {
755
- border-color: rgba(255, 107, 95, 0.58);
756
- background: linear-gradient(90deg, var(--diff-removed-bg), #2a2d2c 72%);
757
- }
758
-
759
- .detail-row.is-diff-removed strong {
760
- text-decoration: line-through;
761
- text-decoration-color: var(--diff-removed);
762
- }
763
-
764
- .detail-row strong {
765
- display: block;
766
- overflow-wrap: anywhere;
767
- font-size: 12px;
768
- }
769
-
770
- .detail-row code,
771
- .pill {
772
- border-radius: 4px;
773
- background: #363a39;
774
- padding: 2px 6px;
775
- color: var(--text);
776
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
777
- font-size: 11px;
778
- }
779
-
780
- .pill-wrap {
781
- display: flex;
782
- flex-wrap: wrap;
783
- gap: 5px;
784
- margin-top: 7px;
785
- }
786
-
787
- .muted {
788
- color: var(--muted);
789
- }
790
-
791
- .empty-state,
792
- .status {
793
- position: absolute;
794
- left: 50%;
795
- transform: translateX(-50%);
796
- border: 1px solid var(--line);
797
- border-radius: 8px;
798
- background: var(--panel);
799
- box-shadow: var(--shadow);
800
- }
801
-
802
- .empty-state {
803
- top: 45%;
804
- padding: 16px 20px;
805
- color: var(--muted);
806
- }
807
-
808
- .status {
809
- bottom: 78px;
810
- max-width: min(560px, calc(100% - 32px));
811
- padding: 10px 12px;
812
- color: var(--danger);
813
- font-size: 12px;
814
- }
815
-
816
- .canvas-toolbar {
817
- display: flex;
818
- position: absolute;
819
- bottom: 18px;
820
- left: 50%;
821
- z-index: 3;
822
- align-items: center;
823
- gap: 10px;
824
- height: 42px;
825
- border: 1px solid var(--line);
826
- border-radius: 10px;
827
- padding: 0 12px;
828
- background: rgba(38, 41, 40, 0.96);
829
- box-shadow: var(--shadow);
830
- transform: translateX(-50%);
831
- }
832
-
833
- .canvas-toolbar button {
834
- width: 28px;
835
- height: 28px;
836
- border: 0;
837
- padding: 0;
838
- background: transparent;
839
- color: var(--text);
840
- font-size: 17px;
841
- }
842
-
843
- #fit-view {
844
- width: auto;
845
- padding: 0 6px;
846
- font-size: 13px;
847
- font-weight: 700;
848
- }
849
-
850
- .show-mode-control {
851
- position: relative;
852
- display: flex;
853
- }
854
-
855
- .show-mode-button {
856
- display: flex;
857
- width: auto !important;
858
- min-width: 104px;
859
- align-items: center;
860
- justify-content: space-between;
861
- gap: 8px;
862
- padding: 0 8px !important;
863
- color: var(--text);
864
- font-size: 12px !important;
865
- font-weight: 700;
866
- }
867
-
868
- .show-mode-caret {
869
- width: 7px;
870
- height: 7px;
871
- border-right: 1.5px solid currentColor;
872
- border-bottom: 1.5px solid currentColor;
873
- transform: translateY(-2px) rotate(45deg);
874
- }
875
-
876
- .show-mode-menu {
877
- position: absolute;
878
- right: 0;
879
- bottom: calc(100% + 10px);
880
- z-index: 4;
881
- display: grid;
882
- width: 158px;
883
- gap: 2px;
884
- border: 1px solid var(--line);
885
- border-radius: 8px;
886
- padding: 5px;
887
- background: rgba(32, 35, 34, 0.98);
888
- box-shadow: var(--shadow);
889
- }
890
-
891
- .show-mode-menu[hidden] {
892
- display: none;
893
- }
894
-
895
- .show-mode-option {
896
- display: grid;
897
- width: 100% !important;
898
- height: 30px !important;
899
- grid-template-columns: minmax(0, 1fr) 14px;
900
- gap: 8px;
901
- align-items: center;
902
- border-radius: 6px !important;
903
- padding: 0 8px !important;
904
- color: var(--muted) !important;
905
- font-size: 12px !important;
906
- text-align: left;
907
- }
908
-
909
- .show-mode-option:hover,
910
- .show-mode-option[aria-checked="true"] {
911
- background: #2a2e2d !important;
912
- color: var(--text) !important;
913
- }
914
-
915
- .show-mode-check {
916
- display: grid;
917
- place-items: center;
918
- }
919
-
920
- .check-icon {
921
- width: 13px;
922
- height: 13px;
923
- fill: none;
924
- stroke: var(--accent);
925
- stroke-linecap: round;
926
- stroke-linejoin: round;
927
- stroke-width: 2.3;
928
- }
929
-
930
- #zoom-label {
931
- width: 48px;
932
- color: var(--text);
933
- font-size: 13px;
934
- font-weight: 700;
935
- text-align: center;
936
- }
937
-
938
- .toolbar-divider {
939
- width: 1px;
940
- height: 24px;
941
- background: var(--line);
942
- }
943
-
944
- @media (max-width: 980px) {
945
- .toolbar {
946
- grid-template-columns: minmax(180px, 1fr) minmax(220px, 320px) auto;
947
- }
948
-
949
- .main {
950
- grid-template-rows: minmax(0, 1fr) minmax(220px, 36vh);
951
- grid-template-columns: 220px minmax(0, 1fr);
952
- }
953
-
954
- .main.is-details-collapsed {
955
- grid-template-rows: minmax(0, 1fr);
956
- grid-template-columns: 220px minmax(0, 1fr);
957
- }
958
-
959
- .details {
960
- grid-column: 1 / -1;
961
- border-top: 1px solid var(--line);
962
- border-left: 0;
963
- }
964
- }
965
-
966
- @media (max-width: 700px) {
967
- html,
968
- body,
969
- #app {
970
- height: auto;
971
- min-height: 100%;
972
- }
973
-
974
- .app {
975
- grid-template-rows: auto auto;
976
- min-height: 100%;
977
- }
978
-
979
- .toolbar {
980
- grid-template-columns: 1fr auto;
981
- gap: 10px;
982
- padding: 8px;
983
- }
984
-
985
- .toolbar-actions {
986
- grid-column: 1 / -1;
987
- justify-content: stretch;
988
- }
989
-
990
- .view-mode-control {
991
- flex: 1 1 auto;
992
- }
993
-
994
- .toolbar-search {
995
- grid-column: 1 / -1;
996
- }
997
-
998
- .brand-mark {
999
- display: none;
1000
- }
1001
-
1002
- .brand h1 {
1003
- font-size: 16px;
1004
- }
1005
-
1006
- .brand p {
1007
- overflow-wrap: anywhere;
1008
- white-space: normal;
1009
- }
1010
-
1011
- .main {
1012
- min-height: auto;
1013
- grid-template-rows: auto minmax(520px, 64vh) auto;
1014
- grid-template-columns: 1fr;
1015
- }
1016
-
1017
- .main.is-details-collapsed {
1018
- grid-template-rows: auto minmax(520px, 64vh);
1019
- grid-template-columns: 1fr;
1020
- }
1021
-
1022
- .table-nav {
1023
- max-height: 240px;
1024
- border-right: 0;
1025
- border-bottom: 1px solid var(--line);
1026
- }
1027
-
1028
- .canvas {
1029
- min-height: 520px;
1030
- }
1031
-
1032
- .details {
1033
- max-height: none;
1034
- overflow: visible;
1035
- }
1036
- }