@@ -433,100 +433,173 @@ export default function Canvas() {
433
433
const theme = localStorage . getItem ( "theme" ) ;
434
434
435
435
return (
436
- < div className = "flex-grow h-full touch-none" id = "canvas" >
437
- < div ref = { canvas } className = "w-full h-full" >
438
- < svg
439
- onPointerMove = { handlePointerMove }
440
- onPointerDown = { handlePointerDown }
441
- onPointerUp = { handlePointerUp }
442
- className = "w-full h-full"
443
- style = { {
444
- cursor : cursor ,
445
- backgroundColor : theme === "dark" ? "rgba(22, 22, 26, 1)" : "white" ,
446
- } }
447
- >
448
- { settings . showGrid && (
449
- < >
450
- < defs >
451
- < pattern
452
- id = "pattern-circles"
453
- x = "0"
454
- y = "0"
455
- width = "24"
456
- height = "24"
457
- patternUnits = "userSpaceOnUse"
458
- patternContentUnits = "userSpaceOnUse"
459
- >
460
- < circle
461
- id = "pattern-circle"
462
- cx = "4"
463
- cy = "4"
464
- r = "0.85"
465
- fill = "rgb(99, 152, 191)"
466
- > </ circle >
467
- </ pattern >
468
- </ defs >
469
- < rect
470
- x = "0"
471
- y = "0"
472
- width = "100%"
473
- height = "100%"
474
- fill = "url(#pattern-circles)"
475
- > </ rect >
476
- </ >
477
- ) }
478
- < g
436
+ < >
437
+ < div className = "flex-grow h-full touch-none" id = "canvas" >
438
+ < div ref = { canvas } className = "w-full h-full" >
439
+ < svg
440
+ onPointerMove = { handlePointerMove }
441
+ onPointerDown = { handlePointerDown }
442
+ onPointerUp = { handlePointerUp }
443
+ className = "w-full h-full"
479
444
style = { {
480
- transform : `translate(${ transform . pan . x } px, ${ transform . pan . y } px) scale(${ transform . zoom } )` ,
481
- transformOrigin : "top left" ,
445
+ cursor : cursor ,
446
+ backgroundColor :
447
+ theme === "dark" ? "rgba(22, 22, 26, 1)" : "white" ,
482
448
} }
483
- id = "diagram"
484
449
>
485
- { areas . map ( ( a ) => (
486
- < Area
487
- key = { a . id }
488
- data = { a }
489
- onPointerDown = { ( e ) =>
490
- handlePointerDownOnElement ( e , a . id , ObjectType . AREA )
491
- }
492
- setResize = { setAreaResize }
493
- setInitCoords = { setInitCoords }
494
- />
495
- ) ) }
496
- { relationships . map ( ( e , i ) => (
497
- < Relationship key = { i } data = { e } />
498
- ) ) }
499
- { tables . map ( ( table ) => (
500
- < Table
501
- key = { table . id }
502
- tableData = { table }
503
- setHoveredTable = { setHoveredTable }
504
- handleGripField = { handleGripField }
505
- setLinkingLine = { setLinkingLine }
506
- onPointerDown = { ( e ) =>
507
- handlePointerDownOnElement ( e , table . id , ObjectType . TABLE )
508
- }
509
- />
510
- ) ) }
511
- { linking && (
512
- < path
513
- d = { `M ${ linkingLine . startX } ${ linkingLine . startY } L ${ linkingLine . endX } ${ linkingLine . endY } ` }
514
- stroke = "red"
515
- strokeDasharray = "8,8"
516
- />
450
+ { settings . showGrid && (
451
+ < >
452
+ < defs >
453
+ < pattern
454
+ id = "pattern-circles"
455
+ x = "0"
456
+ y = "0"
457
+ width = "24"
458
+ height = "24"
459
+ patternUnits = "userSpaceOnUse"
460
+ patternContentUnits = "userSpaceOnUse"
461
+ >
462
+ < circle
463
+ id = "pattern-circle"
464
+ cx = "4"
465
+ cy = "4"
466
+ r = "0.85"
467
+ fill = "rgb(99, 152, 191)"
468
+ > </ circle >
469
+ </ pattern >
470
+ </ defs >
471
+ < rect
472
+ x = "0"
473
+ y = "0"
474
+ width = "100%"
475
+ height = "100%"
476
+ fill = "url(#pattern-circles)"
477
+ > </ rect >
478
+ </ >
517
479
) }
518
- { notes . map ( ( n ) => (
519
- < Note
520
- key = { n . id }
521
- data = { n }
522
- onPointerDown = { ( e ) =>
523
- handlePointerDownOnElement ( e , n . id , ObjectType . NOTE )
524
- }
525
- />
526
- ) ) }
527
- </ g >
528
- </ svg >
480
+ < g
481
+ style = { {
482
+ transform : `translate(${ transform . pan . x } px, ${ transform . pan . y } px) scale(${ transform . zoom } )` ,
483
+ transformOrigin : "top left" ,
484
+ } }
485
+ id = "diagram"
486
+ >
487
+ { areas . map ( ( a ) => (
488
+ < Area
489
+ key = { a . id }
490
+ data = { a }
491
+ onPointerDown = { ( e ) =>
492
+ handlePointerDownOnElement ( e , a . id , ObjectType . AREA )
493
+ }
494
+ setResize = { setAreaResize }
495
+ setInitCoords = { setInitCoords }
496
+ />
497
+ ) ) }
498
+ { relationships . map ( ( e , i ) => (
499
+ < Relationship key = { i } data = { e } />
500
+ ) ) }
501
+ { tables . map ( ( table ) => (
502
+ < Table
503
+ key = { table . id }
504
+ tableData = { table }
505
+ setHoveredTable = { setHoveredTable }
506
+ handleGripField = { handleGripField }
507
+ setLinkingLine = { setLinkingLine }
508
+ onPointerDown = { ( e ) =>
509
+ handlePointerDownOnElement ( e , table . id , ObjectType . TABLE )
510
+ }
511
+ />
512
+ ) ) }
513
+ { linking && (
514
+ < path
515
+ d = { `M ${ linkingLine . startX } ${ linkingLine . startY } L ${ linkingLine . endX } ${ linkingLine . endY } ` }
516
+ stroke = "red"
517
+ strokeDasharray = "8,8"
518
+ />
519
+ ) }
520
+ { notes . map ( ( n ) => (
521
+ < Note
522
+ key = { n . id }
523
+ data = { n }
524
+ onPointerDown = { ( e ) =>
525
+ handlePointerDownOnElement ( e , n . id , ObjectType . NOTE )
526
+ }
527
+ />
528
+ ) ) }
529
+ </ g >
530
+ </ svg >
531
+ </ div >
532
+ { settings . showDebugCoordinates && (
533
+ < div className = "fixed flex flex-col flex-wrap gap-6 bg-[rgba(var(--semi-grey-1),var(--tw-bg-opacity))]/40 border border-color bottom-4 right-4 p-4 rounded-xl backdrop-blur-sm pointer-events-none select-none" >
534
+ < table className = "table-auto grow" >
535
+ < thead >
536
+ < tr >
537
+ < th className = "text-left" colSpan = { 3 } >
538
+ { t ( "transform" ) }
539
+ </ th >
540
+ </ tr >
541
+ < tr className = "italic [&_th]:font-normal [&_th]:text-right" >
542
+ < th > pan x</ th >
543
+ < th > pan y</ th >
544
+ < th > scale</ th >
545
+ </ tr >
546
+ </ thead >
547
+ < tbody className = "[&_td]:text-right [&_td]:min-w-[8ch]" >
548
+ < tr >
549
+ < td > { transform . pan . x . toFixed ( 2 ) } </ td >
550
+ < td > { transform . pan . y . toFixed ( 2 ) } </ td >
551
+ < td > { transform . zoom . toFixed ( 4 ) } </ td >
552
+ </ tr >
553
+ </ tbody >
554
+ </ table >
555
+ < table className = "table-auto grow [&_th]:text-left [&_th:not(:first-of-type)]:text-right [&_td:not(:first-of-type)]:text-right [&_td]:min-w-[8ch]" >
556
+ < thead >
557
+ < tr >
558
+ < th colSpan = { 4 } > { t ( "viewbox" ) } </ th >
559
+ </ tr >
560
+ < tr className = "italic [&_th]:font-normal" >
561
+ < th > left</ th >
562
+ < th > top</ th >
563
+ < th > width</ th >
564
+ < th > height</ th >
565
+ </ tr >
566
+ </ thead >
567
+ < tbody >
568
+ < tr >
569
+ < td > TODO</ td >
570
+ < td > TODO</ td >
571
+ < td > TODO</ td >
572
+ < td > TODO</ td >
573
+ </ tr >
574
+ </ tbody >
575
+ </ table >
576
+ < table className = "table-auto grow [&_th]:text-left [&_th:not(:first-of-type)]:text-right [&_td:not(:first-of-type)]:text-right [&_td]:min-w-[8ch]" >
577
+ < thead >
578
+ < tr >
579
+ < th colSpan = { 3 } > { t ( "cursor_coordinates" ) } </ th >
580
+ </ tr >
581
+ < tr className = "italic [&_th]:font-normal" >
582
+ < th > { t ( "coordinate_space" ) } </ th >
583
+ < th > x</ th >
584
+ < th > y</ th >
585
+ </ tr >
586
+ </ thead >
587
+ < tbody >
588
+ < tr >
589
+ < td > { t ( "coordinate_space_screen" ) } </ td >
590
+ < td > TODO</ td >
591
+ < td > TODO</ td >
592
+ </ tr >
593
+ < tr >
594
+ < td > { t ( "coordinate_space_diagram" ) } </ td >
595
+ < td > TODO</ td >
596
+ < td > TODO</ td >
597
+ </ tr >
598
+ </ tbody >
599
+ </ table >
600
+ </ div >
601
+ ) }
529
602
</ div >
530
- </ div >
603
+ </ >
531
604
) ;
532
605
}
0 commit comments