@truedat/core 8.11.6 → 8.11.9

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.
@@ -0,0 +1,558 @@
1
+ .td-lineage-group-node {
2
+ --td-lineage-group-accent: #2563eb;
3
+ --td-lineage-group-accent-strong: #1d4ed8;
4
+ --td-lineage-group-bg: rgba(248, 250, 252, 0.86);
5
+ --td-lineage-group-border: #cbd5e1;
6
+ --td-lineage-group-text: #334155;
7
+ --td-lineage-group-shadow: rgba(15, 23, 42, 0.14);
8
+
9
+ position: relative;
10
+ box-sizing: border-box;
11
+ width: 100%;
12
+ height: 100%;
13
+ overflow: hidden;
14
+ border: 1px solid var(--td-lineage-group-border);
15
+ border-radius: var(--td-graph-border-radius, 12px);
16
+ background: var(--td-lineage-group-bg);
17
+ pointer-events: auto;
18
+ cursor: pointer;
19
+ transition:
20
+ border-color 150ms ease,
21
+ background-color 150ms ease,
22
+ opacity 150ms ease;
23
+ }
24
+
25
+ .td-lineage-group-node__header {
26
+ display: grid;
27
+ min-height: 42px;
28
+ grid-template-columns: 18px minmax(0, 1fr) auto;
29
+ gap: 8px;
30
+ align-items: center;
31
+ padding: 0 12px;
32
+ border-bottom: 1px solid #dbe3ed;
33
+ background: #f8fafc;
34
+ color: #334155;
35
+ }
36
+
37
+ .td-lineage-group-node__type-icon.icon {
38
+ width: 18px;
39
+ margin: 0;
40
+ color: inherit;
41
+ font-size: 16px;
42
+ line-height: 1;
43
+ }
44
+
45
+ .td-lineage-group-node__label {
46
+ min-width: 0;
47
+ overflow: hidden;
48
+ font-size: 11px;
49
+ font-weight: 750;
50
+ letter-spacing: 0.01em;
51
+ line-height: 1.2;
52
+ text-overflow: ellipsis;
53
+ text-transform: uppercase;
54
+ white-space: nowrap;
55
+ }
56
+
57
+ .td-lineage-group-node__count {
58
+ display: inline-flex;
59
+ min-width: 22px;
60
+ height: 22px;
61
+ align-items: center;
62
+ justify-content: center;
63
+ padding: 0 6px;
64
+ border-radius: 6px;
65
+ background: #e2e8f0;
66
+ color: #334155;
67
+ font-size: 10px;
68
+ font-variant-numeric: tabular-nums;
69
+ font-weight: 750;
70
+ line-height: 1;
71
+ }
72
+
73
+ .td-lineage-group-node--absolute {
74
+ overflow: hidden;
75
+ border-color: var(--td-lineage-group-border);
76
+ background: rgba(255, 255, 255, 0.9);
77
+ }
78
+
79
+ .react-flow__node.td-lineage-group-node--entity-system .td-lineage-group-node {
80
+ border-style: dashed;
81
+ border-width: 2px;
82
+ background: #f4f6f8;
83
+ }
84
+ .react-flow__node.td-lineage-group-node--design-redesigned.td-lineage-group-node--entity-system
85
+ .td-lineage-group-node {
86
+ background: #f4f6f8;
87
+ }
88
+
89
+ .td-lineage-group-node__absolute-header .td-lineage-group-node__type-icon {
90
+ color: var(--td-lineage-group-accent);
91
+ }
92
+
93
+ .td-lineage-group-node__absolute-header {
94
+ position: absolute;
95
+ top: 0;
96
+ right: 0;
97
+ left: 0;
98
+ z-index: 1;
99
+ display: grid;
100
+ height: 42px;
101
+ grid-template-columns: 18px minmax(0, 1fr) auto;
102
+ gap: 9px;
103
+ align-items: center;
104
+ padding: 0 88px 0 14px;
105
+ background: var(--td-lineage-group-accent, #0f172a);
106
+ color: #ffffff;
107
+ overflow: hidden;
108
+ pointer-events: none;
109
+ box-shadow: inset 0 3px var(--td-lineage-group-accent);
110
+ }
111
+
112
+ .td-lineage-group-node__absolute-label {
113
+ min-width: 0;
114
+ overflow: hidden;
115
+ color: inherit;
116
+ font-size: 12px;
117
+ font-weight: 750;
118
+ letter-spacing: 0.01em;
119
+ line-height: 1.2;
120
+ text-overflow: ellipsis;
121
+ text-transform: uppercase;
122
+ white-space: nowrap;
123
+ }
124
+
125
+ .td-lineage-group-node__footer {
126
+ position: absolute;
127
+ right: 0;
128
+ bottom: 0;
129
+ left: 0;
130
+ z-index: 1;
131
+ display: flex;
132
+ height: 22px;
133
+ align-items: center;
134
+ justify-content: flex-end;
135
+ padding: 0 12px;
136
+ border-top: none;
137
+ background: #f8fafc;
138
+ pointer-events: none;
139
+ }
140
+
141
+ .td-lineage-group-node__content-summary {
142
+ overflow: hidden;
143
+ color: #64748b;
144
+ font-size: 10px;
145
+ font-weight: 650;
146
+ line-height: 1;
147
+ text-overflow: ellipsis;
148
+ white-space: nowrap;
149
+ }
150
+
151
+ .td-lineage-group-node__system-type {
152
+ max-width: 94px;
153
+ overflow: hidden;
154
+ padding: 3px 6px;
155
+ border: 1px solid #475569;
156
+ border-radius: 6px;
157
+ background: #1e293b;
158
+ color: #cbd5e1;
159
+ font-size: 9px;
160
+ font-weight: 650;
161
+ line-height: 1.1;
162
+ text-overflow: ellipsis;
163
+ white-space: nowrap;
164
+ }
165
+
166
+ .td-lineage-group-node--absolute.td-lineage-group-node--root {
167
+ border-color: #94a3b8;
168
+ background: rgba(248, 250, 252, 0.72);
169
+ }
170
+
171
+ .td-lineage-group-node--absolute.td-lineage-group-node--collapsed {
172
+ background: #ffffff;
173
+ box-shadow: 0 1px 3px rgba(15, 23, 42, 0.08);
174
+ }
175
+
176
+ .td-lineage-group-node--design-redesigned {
177
+ border-width: 1px;
178
+ border-color: #c7d5e5;
179
+ border-radius: 12px;
180
+ background: #ffffff;
181
+ box-shadow: 0 1px 3px rgba(15, 23, 42, 0.08);
182
+
183
+ .td-lineage-group-node__header {
184
+ grid-template-columns: 18px minmax(0, 1fr) auto;
185
+ }
186
+
187
+ .td-lineage-group-node__absolute-header {
188
+ height: 42px;
189
+ grid-template-columns: 18px minmax(0, 1fr) auto;
190
+ padding: 0 72px 0 14px;
191
+ border-bottom: 1px solid
192
+ color-mix(in srgb, var(--td-lineage-group-accent, #003882) 70%, #000);
193
+ border-radius: 11px 11px 0 0;
194
+ background: var(--td-lineage-group-accent, #003882);
195
+ box-shadow: inset 0 -1px 0 rgba(0, 26, 64, 0.5);
196
+ }
197
+
198
+ .td-lineage-group-node__absolute-label {
199
+ font-family: inherit;
200
+ font-size: 15px;
201
+ font-weight: 800;
202
+ letter-spacing: 0.01em;
203
+ }
204
+
205
+ .td-lineage-group-node__type-icon.icon {
206
+ color: #93c5fd;
207
+ }
208
+
209
+ .td-lineage-group-node__system-type {
210
+ display: none;
211
+ }
212
+
213
+ > .react-flow__handle {
214
+ width: 8px;
215
+ height: 8px;
216
+ border: 1px solid transparent;
217
+ border-radius: 50%;
218
+ background: transparent;
219
+ box-shadow: none;
220
+ opacity: 0;
221
+ pointer-events: none;
222
+ transition: opacity 150ms ease;
223
+ }
224
+
225
+ > .react-flow__handle-left {
226
+ left: 0;
227
+ transform: translate(0, -50%);
228
+ }
229
+
230
+ > .react-flow__handle-right {
231
+ right: 0;
232
+ transform: translate(0, -50%);
233
+ }
234
+
235
+ &:hover > .react-flow__handle.td-lineage-node-handle--connected {
236
+ border-color: #ffffff;
237
+ background: #f97316;
238
+ opacity: 1;
239
+ }
240
+ }
241
+
242
+ .td-lineage-group-node--design-redesigned.td-lineage-group-node--absolute.td-lineage-group-node--root {
243
+ border-color: #c7d5e5;
244
+ background: #ffffff;
245
+ }
246
+
247
+ .td-lineage-group-node--design-redesigned.td-lineage-group-node--depth-2,
248
+ .td-lineage-group-node--design-redesigned.td-lineage-group-node--depth-3,
249
+ .td-lineage-group-node--design-redesigned.td-lineage-group-node--depth-4,
250
+ .td-lineage-group-node--design-redesigned.td-lineage-group-node--depth-5,
251
+ .td-lineage-group-node--design-redesigned.td-lineage-group-node--depth-6 {
252
+ border-width: 1px;
253
+ border-radius: 12px;
254
+ border-color: #c7d5e5;
255
+ background: #f8fafc;
256
+ box-shadow: 0 1px 3px rgba(15, 23, 42, 0.06);
257
+
258
+ .td-lineage-group-node__absolute-header {
259
+ grid-template-columns: 18px minmax(0, 1fr);
260
+ gap: 9px;
261
+ padding: 0 52px 0 14px;
262
+ border-bottom: 1px solid #dbe3ed;
263
+ border-radius: 11px 11px 0 0;
264
+ background: #f8fafc;
265
+ box-shadow: none;
266
+ color: #1e1b4b;
267
+ }
268
+
269
+ .td-lineage-group-node__type-icon.icon {
270
+ color: #4f46e5;
271
+ }
272
+
273
+ .td-lineage-group-node__absolute-label {
274
+ font-size: 13px;
275
+ color: #1e1b4b;
276
+ }
277
+ }
278
+
279
+ .td-lineage-group-node--design-redesigned.td-lineage-group-node--resource-container {
280
+ border: 1px solid #c7d5e5;
281
+ border-radius: 12px;
282
+ background: #ffffff;
283
+ box-shadow: 0 1px 3px rgba(15, 23, 42, 0.08);
284
+
285
+ .td-lineage-group-node__absolute-header {
286
+ grid-template-columns: 18px minmax(0, 1fr);
287
+ gap: 9px;
288
+ padding: 0 52px 0 14px;
289
+ border-bottom: 1px solid #002b66;
290
+ border-radius: 11px 11px 0 0;
291
+ background: #003882;
292
+ box-shadow: inset 0 -1px 0 rgba(0, 26, 64, 0.48);
293
+ color: #ffffff;
294
+ }
295
+
296
+ .td-lineage-group-node__type-icon.icon {
297
+ color: #93c5fd;
298
+ }
299
+
300
+ .td-lineage-group-node__absolute-label {
301
+ color: #ffffff;
302
+ }
303
+ }
304
+
305
+ .td-lineage-group-node__actions {
306
+ position: absolute;
307
+ top: 9px;
308
+ right: 12px;
309
+ display: inline-flex;
310
+ gap: 4px;
311
+ z-index: 2;
312
+ }
313
+
314
+ .td-lineage-group-node__toggle {
315
+ display: inline-flex;
316
+ width: 24px;
317
+ height: 24px;
318
+ align-items: center;
319
+ justify-content: center;
320
+ padding: 0;
321
+ border: 0;
322
+ border-radius: 5px;
323
+ background: transparent;
324
+ color: #bfdbfe;
325
+ cursor: pointer;
326
+ font-size: 14px;
327
+ font-weight: 800;
328
+ line-height: 1;
329
+ transition:
330
+ background-color 150ms ease,
331
+ border-color 150ms ease,
332
+ color 150ms ease;
333
+
334
+ &:hover {
335
+ background: #002b66;
336
+ color: #ffffff;
337
+ }
338
+
339
+ &:focus-visible {
340
+ outline: 2px solid #38bdf8;
341
+ outline-offset: 2px;
342
+ }
343
+ }
344
+
345
+ .td-lineage-group-node--depth-2 .td-lineage-group-node__toggle,
346
+ .td-lineage-group-node--depth-3 .td-lineage-group-node__toggle,
347
+ .td-lineage-group-node--depth-4 .td-lineage-group-node__toggle,
348
+ .td-lineage-group-node--depth-5 .td-lineage-group-node__toggle,
349
+ .td-lineage-group-node--depth-6 .td-lineage-group-node__toggle {
350
+ background: transparent;
351
+ color: #475569;
352
+
353
+ &:hover {
354
+ background: #e2e8f0;
355
+ color: #1e1b4b;
356
+ }
357
+ }
358
+
359
+ .td-lineage-group-node--design-redesigned.td-lineage-group-node--resource-container
360
+ .td-lineage-group-node__toggle {
361
+ color: #bfdbfe;
362
+
363
+ &:hover {
364
+ background: #002b66;
365
+ color: #ffffff;
366
+ }
367
+ }
368
+
369
+ .td-lineage-group-node__toggle--descendants {
370
+ width: 30px;
371
+ }
372
+
373
+ .td-lineage-group-node__collapsed-relations {
374
+ position: absolute;
375
+ right: 14px;
376
+ display: inline-flex;
377
+ min-width: 24px;
378
+ height: 24px;
379
+ align-items: center;
380
+ justify-content: center;
381
+ padding: 0 6px;
382
+ border-radius: 6px;
383
+ background: var(--td-lineage-group-accent-strong);
384
+ color: #ffffff;
385
+ font-size: 10px;
386
+ font-variant-numeric: tabular-nums;
387
+ font-weight: 750;
388
+ line-height: 1;
389
+ pointer-events: none;
390
+ }
391
+
392
+ .td-lineage-group-node__collapsed-relations {
393
+ bottom: 42px;
394
+ background: var(--td-graph-accent, #ed5c17);
395
+ }
396
+
397
+ .td-lineage-group-node__oversized-warning {
398
+ position: absolute;
399
+ top: 0;
400
+ left: 0;
401
+ z-index: 3;
402
+ display: inline-flex;
403
+ width: 22px;
404
+ height: 22px;
405
+ align-items: center;
406
+ justify-content: center;
407
+ padding: 0;
408
+ border: 0;
409
+ border-radius: 0 0 8px 0;
410
+ background: #f59e0b;
411
+ color: #ffffff;
412
+ cursor: pointer;
413
+ box-shadow: 1px 1px 3px rgba(15, 23, 42, 0.35);
414
+ transition: background-color 150ms ease;
415
+
416
+ .icon {
417
+ margin: 0;
418
+ font-size: 12px;
419
+ }
420
+
421
+ &:hover {
422
+ background: #d97706;
423
+ }
424
+
425
+ &:focus-visible {
426
+ outline: 2px solid #38bdf8;
427
+ outline-offset: 1px;
428
+ }
429
+ }
430
+
431
+ .td-lineage-group-node__oversized-popup.ui.popup {
432
+ animation: td-oversized-popup-in 0.35s cubic-bezier(0.18, 0.89, 0.3, 1.4);
433
+ border-radius: 12px;
434
+ padding: 0;
435
+ box-shadow:
436
+ 0 4px 16px rgba(109, 91, 208, 0.2),
437
+ 0 2px 4px rgba(15, 23, 42, 0.12);
438
+ }
439
+
440
+ @keyframes td-oversized-popup-in {
441
+ from {
442
+ opacity: 0;
443
+ transform: translateY(6px) scale(0.92);
444
+ }
445
+ to {
446
+ opacity: 1;
447
+ transform: translateY(0) scale(1);
448
+ }
449
+ }
450
+
451
+ .td-lineage-group-node__oversized-content {
452
+ display: flex;
453
+ flex-direction: column;
454
+ gap: 8px;
455
+ max-width: 260px;
456
+ padding-bottom: 12px;
457
+ }
458
+
459
+ .td-lineage-group-node__oversized-header {
460
+ margin: 0;
461
+ padding: 8px 14px;
462
+ border-radius: 12px 12px 0 0;
463
+ background: #f59e0b;
464
+ color: #111827;
465
+ font-size: 11px;
466
+ font-weight: 800;
467
+ letter-spacing: 0.04em;
468
+ line-height: 1;
469
+ text-transform: uppercase;
470
+ }
471
+
472
+ .td-lineage-group-node__oversized-content
473
+ > span:not(.td-lineage-group-node__oversized-header) {
474
+ padding: 0 14px;
475
+ }
476
+
477
+ .td-lineage-group-node__oversized-open {
478
+ align-self: flex-end;
479
+ padding: 0 14px;
480
+ border: 0;
481
+ background: transparent;
482
+ color: #2563eb;
483
+ cursor: pointer;
484
+ font-size: 12px;
485
+ text-decoration: underline;
486
+
487
+ &:hover {
488
+ color: #1d4ed8;
489
+ }
490
+ }
491
+
492
+ .td-lineage-group-node--design-classic.td-lineage-group-node--absolute {
493
+ border-width: 2px;
494
+ background:
495
+ linear-gradient(
496
+ 90deg,
497
+ rgba(255, 255, 255, 0.62) 0,
498
+ rgba(255, 255, 255, 0.18) 45%,
499
+ rgba(255, 255, 255, 0.55) 100%
500
+ ),
501
+ var(--td-lineage-group-bg);
502
+
503
+ .td-lineage-group-node__absolute-header {
504
+ right: auto;
505
+ width: auto;
506
+ max-width: min(230px, calc(100% - 46px));
507
+ height: auto;
508
+ grid-template-columns: minmax(0, 1fr);
509
+ padding: 9px 22px 10px;
510
+ border-radius: 0 0 8px 0;
511
+ background: var(--td-lineage-group-accent);
512
+ box-shadow: 0 4px 10px var(--td-lineage-group-shadow);
513
+ }
514
+
515
+ .td-lineage-group-node__type-icon,
516
+ .td-lineage-group-node__system-type {
517
+ display: none;
518
+ }
519
+ }
520
+
521
+ .td-lineage-group-node--design-classic.td-lineage-group-node--collapsed {
522
+ .td-lineage-group-node__absolute-header {
523
+ top: 14px;
524
+ left: 22px;
525
+ max-width: calc(100% - 78px);
526
+ padding: 0;
527
+ background: #f4f6f8;
528
+ box-shadow: none;
529
+ color: var(--td-lineage-group-accent-strong);
530
+ }
531
+
532
+ .td-lineage-group-node__absolute-label {
533
+ font-size: 14px;
534
+ }
535
+ }
536
+
537
+ @media (prefers-reduced-motion: reduce) {
538
+ .td-lineage-group-node,
539
+ .td-lineage-group-node__toggle,
540
+ .td-lineage-group-node--design-redesigned .react-flow__handle,
541
+ .td-lineage-group-node__oversized-warning {
542
+ transition: none;
543
+ }
544
+
545
+ .td-lineage-group-node__oversized-warning:hover {
546
+ transform: none;
547
+ }
548
+
549
+ .td-lineage-group-node__oversized-popup.ui.popup {
550
+ animation: none;
551
+ }
552
+ }
553
+
554
+ @import "./lineageNodeStates.less";
555
+
556
+ .td-lineage-group-node.td-lineage-group-node {
557
+ .lineage-node-states(td-lineage-group-node);
558
+ }
@@ -1,30 +1,25 @@
1
- .td-graph-container {
2
- height: var(--td-graph-container-height, 760px);
3
-
4
- .react-flow {
5
- background: var(--td-graph-bg, #f7f8fa);
6
- }
1
+ .td-graph-minimap-shell--expanded .td-graph-minimap {
2
+ width: 288px;
3
+ height: 200px;
4
+ }
7
5
 
8
- .react-flow__controls {
9
- margin: 8px;
10
- border-radius: 12px;
11
- overflow: hidden;
6
+ .td-graph__space-pan-active {
7
+ .react-flow__node,
8
+ .react-flow__node *,
9
+ .react-flow__edges,
10
+ .react-flow__edges *,
11
+ .react-flow__edgelabel-renderer,
12
+ .react-flow__edgelabel-renderer *,
13
+ .react-flow__panel,
14
+ .react-flow__panel * {
15
+ pointer-events: none !important;
12
16
  }
13
- }
14
17
 
15
- .ui.modal.td-graph-modal > .content {
16
- padding: 0;
17
- }
18
+ .react-flow__pane {
19
+ cursor: grab;
18
20
 
19
- .td-graph-edge-label {
20
- position: absolute;
21
- background: rgba(0, 0, 0, 0.75);
22
- color: #fff;
23
- padding: 2px 6px;
24
- border-radius: 4px;
25
- font-size: 11px;
26
- font-weight: 500;
27
- pointer-events: none;
28
- white-space: nowrap;
29
- z-index: 1000;
21
+ &:active {
22
+ cursor: grabbing;
23
+ }
24
+ }
30
25
  }
@@ -0,0 +1,111 @@
1
+ // Shared precedence: related < hover < selected; keyboard focus is independent.
2
+ .lineage-node-states(@node) {
3
+ transition:
4
+ border-color 150ms ease,
5
+ background-color 150ms ease,
6
+ opacity 150ms ease;
7
+
8
+ &.@{node}--connected {
9
+ border-color: #94a3b8;
10
+ box-shadow: 0 1px 3px rgba(15, 23, 42, 0.08);
11
+ }
12
+
13
+ &:hover,
14
+ &.@{node}--hovered {
15
+ border-color: #64748b;
16
+ transform: none;
17
+ box-shadow: 0 1px 3px rgba(15, 23, 42, 0.08);
18
+ }
19
+
20
+ &.@{node}--focus-dimmed {
21
+ opacity: 0.82;
22
+ }
23
+
24
+ &.@{node}--query-origin,
25
+ &:hover,
26
+ &.@{node}--hovered {
27
+ opacity: 1;
28
+ }
29
+
30
+ &.@{node}--focus-direct {
31
+ border-color: color-mix(
32
+ in srgb,
33
+ var(--td-graph-accent, #ed5c17) 65%,
34
+ #ffffff
35
+ );
36
+ box-shadow: none;
37
+ opacity: 1;
38
+
39
+ > :is(
40
+ .td-lineage-resource-node__header,
41
+ .td-lineage-group-node__header,
42
+ .td-lineage-group-node__absolute-header
43
+ ) {
44
+ box-shadow: inset 0 0 0 100px
45
+ color-mix(in srgb, var(--td-graph-accent, #ed5c17) 6%, transparent);
46
+ }
47
+ }
48
+
49
+ &.@{node}--active,
50
+ &.@{node}--focus-selected {
51
+ border-color: var(--td-graph-accent, #ed5c17);
52
+ box-shadow:
53
+ 0 0 0 1px var(--td-graph-accent, #ed5c17),
54
+ 0 0 12px 2px
55
+ color-mix(in srgb, var(--td-graph-accent, #ed5c17) 24%, transparent);
56
+ opacity: 1;
57
+
58
+ > :is(
59
+ .td-lineage-resource-node__header,
60
+ .td-lineage-group-node__header,
61
+ .td-lineage-group-node__absolute-header
62
+ ) {
63
+ box-shadow: inset 0 0 0 100px
64
+ color-mix(in srgb, var(--td-graph-accent, #ed5c17) 12%, transparent);
65
+ }
66
+ }
67
+
68
+ .td-lineage-query-origin {
69
+ display: block;
70
+ min-width: 0;
71
+ overflow: hidden;
72
+ color: inherit;
73
+ font-size: 10px;
74
+ font-weight: 500;
75
+ letter-spacing: normal;
76
+ line-height: 12px;
77
+ text-overflow: ellipsis;
78
+ text-transform: none;
79
+ white-space: nowrap;
80
+
81
+ &::before {
82
+ display: inline-block;
83
+ width: 5px;
84
+ height: 5px;
85
+ margin-right: 5px;
86
+ border-radius: 50%;
87
+ background: var(--td-graph-accent, #ed5c17);
88
+ content: "";
89
+ vertical-align: 1px;
90
+ }
91
+ }
92
+
93
+ button:disabled {
94
+ cursor: default;
95
+ opacity: 0.55;
96
+ pointer-events: none;
97
+ }
98
+
99
+ @media (prefers-reduced-motion: reduce) {
100
+ &,
101
+ * {
102
+ transition: none;
103
+ }
104
+ }
105
+
106
+ .react-flow__node:focus-visible > & {
107
+ outline: 2px solid #0284c7;
108
+ outline-offset: 2px;
109
+ opacity: 1;
110
+ }
111
+ }