@eyeon/map 2.0.3 → 2.0.5

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 (149) hide show
  1. package/dist/assets/MapViewer.css +1 -1
  2. package/dist/assets/index.css +1 -1
  3. package/dist/chunks/MapViewer.js +2558 -1431
  4. package/dist/chunks/MapViewer.js.map +1 -1
  5. package/dist/chunks/stacking.js +1262 -745
  6. package/dist/chunks/stacking.js.map +1 -1
  7. package/dist/chunks/wheelZoom.js +259 -0
  8. package/dist/chunks/wheelZoom.js.map +1 -0
  9. package/dist/core/assignment.d.ts +107 -0
  10. package/dist/core/assignment.d.ts.map +1 -0
  11. package/dist/core/color.d.ts +5 -0
  12. package/dist/core/color.d.ts.map +1 -0
  13. package/dist/core/entranceIcon.d.ts +12 -0
  14. package/dist/core/entranceIcon.d.ts.map +1 -0
  15. package/dist/core/hostChrome.d.ts +2 -4
  16. package/dist/core/hostChrome.d.ts.map +1 -1
  17. package/dist/core/index.d.ts +6 -0
  18. package/dist/core/index.d.ts.map +1 -1
  19. package/dist/core/index.js +161 -89
  20. package/dist/core/labelAlign.d.ts +7 -0
  21. package/dist/core/labelAlign.d.ts.map +1 -0
  22. package/dist/core/layerStyles.d.ts +41 -7
  23. package/dist/core/layerStyles.d.ts.map +1 -1
  24. package/dist/core/outdoorDecoration.d.ts +2 -1
  25. package/dist/core/outdoorDecoration.d.ts.map +1 -1
  26. package/dist/core/publish/index.d.ts +6 -4
  27. package/dist/core/publish/index.d.ts.map +1 -1
  28. package/dist/core/stacking.d.ts +50 -3
  29. package/dist/core/stacking.d.ts.map +1 -1
  30. package/dist/core/types.d.ts +29 -1
  31. package/dist/core/types.d.ts.map +1 -1
  32. package/dist/core/voids.d.ts +41 -0
  33. package/dist/core/voids.d.ts.map +1 -0
  34. package/dist/core/wheelZoom.d.ts +30 -0
  35. package/dist/core/wheelZoom.d.ts.map +1 -0
  36. package/dist/editor/FieldResetButton.d.ts +7 -0
  37. package/dist/editor/FieldResetButton.d.ts.map +1 -0
  38. package/dist/editor/MapEditor.d.ts +12 -2
  39. package/dist/editor/MapEditor.d.ts.map +1 -1
  40. package/dist/editor/canvas/EditorCanvas.d.ts +6 -2
  41. package/dist/editor/canvas/EditorCanvas.d.ts.map +1 -1
  42. package/dist/editor/canvas/OutdoorSvgUnderlay.d.ts +3 -1
  43. package/dist/editor/canvas/OutdoorSvgUnderlay.d.ts.map +1 -1
  44. package/dist/editor/canvas/coords.d.ts +26 -3
  45. package/dist/editor/canvas/coords.d.ts.map +1 -1
  46. package/dist/editor/canvas/editorFill.d.ts +3 -1
  47. package/dist/editor/canvas/editorFill.d.ts.map +1 -1
  48. package/dist/editor/canvas/editorHover.d.ts +4 -0
  49. package/dist/editor/canvas/editorHover.d.ts.map +1 -1
  50. package/dist/editor/canvas/underlayHint.d.ts +8 -0
  51. package/dist/editor/canvas/underlayHint.d.ts.map +1 -1
  52. package/dist/editor/connectorAssignments.d.ts +61 -0
  53. package/dist/editor/connectorAssignments.d.ts.map +1 -1
  54. package/dist/editor/draftOps.d.ts +8 -0
  55. package/dist/editor/draftOps.d.ts.map +1 -1
  56. package/dist/editor/editorSectionReturn.d.ts.map +1 -1
  57. package/dist/editor/ellipseDraw.d.ts +12 -0
  58. package/dist/editor/ellipseDraw.d.ts.map +1 -0
  59. package/dist/editor/entranceIcon.d.ts +15 -0
  60. package/dist/editor/entranceIcon.d.ts.map +1 -0
  61. package/dist/editor/hexColor.d.ts +2 -0
  62. package/dist/editor/hexColor.d.ts.map +1 -1
  63. package/dist/editor/index.css +824 -72
  64. package/dist/editor/index.d.ts +2 -0
  65. package/dist/editor/index.d.ts.map +1 -1
  66. package/dist/editor/index.js +6711 -4161
  67. package/dist/editor/index.js.map +1 -1
  68. package/dist/editor/labelText.d.ts +12 -2
  69. package/dist/editor/labelText.d.ts.map +1 -1
  70. package/dist/editor/labels.d.ts +8 -0
  71. package/dist/editor/labels.d.ts.map +1 -1
  72. package/dist/editor/panels/AssignForm.d.ts +17 -0
  73. package/dist/editor/panels/AssignForm.d.ts.map +1 -0
  74. package/dist/editor/panels/AssignmentStyleFields.d.ts +14 -0
  75. package/dist/editor/panels/AssignmentStyleFields.d.ts.map +1 -0
  76. package/dist/editor/panels/BulkAssignForm.d.ts +11 -0
  77. package/dist/editor/panels/BulkAssignForm.d.ts.map +1 -0
  78. package/dist/editor/panels/CatalogKioskForm.d.ts +18 -0
  79. package/dist/editor/panels/CatalogKioskForm.d.ts.map +1 -0
  80. package/dist/editor/panels/ConnectorAssign.d.ts +6 -2
  81. package/dist/editor/panels/ConnectorAssign.d.ts.map +1 -1
  82. package/dist/editor/panels/CopyToLevelButton.d.ts +10 -0
  83. package/dist/editor/panels/CopyToLevelButton.d.ts.map +1 -0
  84. package/dist/editor/panels/EntranceIconForm.d.ts +11 -0
  85. package/dist/editor/panels/EntranceIconForm.d.ts.map +1 -0
  86. package/dist/editor/panels/Inspector.d.ts +24 -3
  87. package/dist/editor/panels/Inspector.d.ts.map +1 -1
  88. package/dist/editor/panels/LeftRail.d.ts +17 -6
  89. package/dist/editor/panels/LeftRail.d.ts.map +1 -1
  90. package/dist/editor/panels/PreviewOverlay.d.ts +9 -3
  91. package/dist/editor/panels/PreviewOverlay.d.ts.map +1 -1
  92. package/dist/editor/panels/TextLabelForm.d.ts +11 -0
  93. package/dist/editor/panels/TextLabelForm.d.ts.map +1 -0
  94. package/dist/editor/panels/formRows.d.ts +41 -0
  95. package/dist/editor/panels/formRows.d.ts.map +1 -0
  96. package/dist/editor/portalSurface.d.ts +10 -2
  97. package/dist/editor/portalSurface.d.ts.map +1 -1
  98. package/dist/editor/previewDocument.d.ts +2 -1
  99. package/dist/editor/previewDocument.d.ts.map +1 -1
  100. package/dist/editor/railAssignments.d.ts +9 -2
  101. package/dist/editor/railAssignments.d.ts.map +1 -1
  102. package/dist/editor/railKiosks.d.ts +27 -0
  103. package/dist/editor/railKiosks.d.ts.map +1 -0
  104. package/dist/editor/railListCopy.d.ts +31 -0
  105. package/dist/editor/railListCopy.d.ts.map +1 -0
  106. package/dist/editor/routeStubs.d.ts +1 -1
  107. package/dist/editor/routeStubs.d.ts.map +1 -1
  108. package/dist/editor/shapeCopy.d.ts +40 -0
  109. package/dist/editor/shapeCopy.d.ts.map +1 -0
  110. package/dist/editor/shapeSelection.d.ts +6 -0
  111. package/dist/editor/shapeSelection.d.ts.map +1 -0
  112. package/dist/editor/tools.d.ts +12 -2
  113. package/dist/editor/tools.d.ts.map +1 -1
  114. package/dist/fonts/assets.d.ts +4 -0
  115. package/dist/fonts/mapFont.d.ts +5 -0
  116. package/dist/fonts/mapFont.d.ts.map +1 -0
  117. package/dist/fonts/mapFontUrl.d.ts +8 -0
  118. package/dist/fonts/mapFontUrl.d.ts.map +1 -0
  119. package/dist/specialIcons.d.ts +39 -0
  120. package/dist/specialIcons.d.ts.map +1 -0
  121. package/dist/ui/ModernSelect.d.ts.map +1 -1
  122. package/dist/ui/selectSearch.d.ts +3 -0
  123. package/dist/ui/selectSearch.d.ts.map +1 -1
  124. package/dist/viewer/MapViewer.d.ts +14 -1
  125. package/dist/viewer/MapViewer.d.ts.map +1 -1
  126. package/dist/viewer/camera.d.ts +82 -1
  127. package/dist/viewer/camera.d.ts.map +1 -1
  128. package/dist/viewer/components/CameraRig.d.ts +18 -1
  129. package/dist/viewer/components/CameraRig.d.ts.map +1 -1
  130. package/dist/viewer/components/LevelMeshes.d.ts +15 -4
  131. package/dist/viewer/components/LevelMeshes.d.ts.map +1 -1
  132. package/dist/viewer/components/MapScene.d.ts +10 -4
  133. package/dist/viewer/components/MapScene.d.ts.map +1 -1
  134. package/dist/viewer/components/OpeningWell.d.ts +7 -0
  135. package/dist/viewer/components/OpeningWell.d.ts.map +1 -0
  136. package/dist/viewer/components/RouteLine.d.ts.map +1 -1
  137. package/dist/viewer/components/SvgVectorLayer.d.ts +3 -1
  138. package/dist/viewer/components/SvgVectorLayer.d.ts.map +1 -1
  139. package/dist/viewer/components/openingGeometry.d.ts +7 -0
  140. package/dist/viewer/components/openingGeometry.d.ts.map +1 -0
  141. package/dist/viewer/index.css +151 -19
  142. package/dist/viewer/index.js +3 -3
  143. package/dist/viewer/pointer.d.ts +26 -0
  144. package/dist/viewer/pointer.d.ts.map +1 -0
  145. package/dist/viewer/ui/MapControls.d.ts.map +1 -1
  146. package/dist/viewer/ui/RuntimeChrome.d.ts.map +1 -1
  147. package/package.json +4 -2
  148. package/dist/chunks/graph-tools.js +0 -246
  149. package/dist/chunks/graph-tools.js.map +0 -1
@@ -5,8 +5,7 @@
5
5
  min-height: 320px;
6
6
  overflow: hidden;
7
7
  background: var(--map-bg, #FFFFFF);
8
- /* Inherit the host application's font; hosts may override with the variable. */
9
- font-family: var(--eyeon-map-font-family, inherit);
8
+ font-family: var(--eyeon-map-font-family, 'Montserrat', sans-serif);
10
9
  font-size: 13px;
11
10
  color: #0f172a;
12
11
  }
@@ -22,19 +21,40 @@
22
21
  position: absolute;
23
22
  inset: 0;
24
23
  cursor: grab;
24
+ touch-action: none;
25
+ overscroll-behavior: none;
25
26
  }
26
27
 
27
28
  .eyeon-map-viewer__canvas:active {
28
29
  cursor: grabbing;
29
30
  }
30
31
 
32
+ .eyeon-map-viewer__canvas.is-hover-shape,
33
+ .eyeon-map-viewer__canvas.is-hover-shape:active {
34
+ cursor: pointer;
35
+ }
36
+
31
37
  .eyeon-map-viewer__loading,
32
- .eyeon-map-viewer__error {
38
+ .eyeon-map-viewer__error,
39
+ .eyeon-map-viewer__empty {
33
40
  display: flex;
34
41
  align-items: center;
35
42
  justify-content: center;
36
43
  height: 100%;
37
- padding: 1rem;
44
+ padding: 1.5rem;
45
+ text-align: center;
46
+ }
47
+
48
+ .eyeon-map-viewer--empty {
49
+ display: flex;
50
+ align-items: center;
51
+ justify-content: center;
52
+ }
53
+
54
+ .eyeon-map-viewer__empty {
55
+ color: #64748b;
56
+ font-size: 14px;
57
+ line-height: 1.45;
38
58
  }
39
59
 
40
60
  .eyeon-map-chrome {
@@ -100,6 +120,17 @@
100
120
  font-weight: 600;
101
121
  }
102
122
 
123
+ .eyeon-map-chrome__amenity-icon {
124
+ display: flex;
125
+ width: 22px;
126
+ height: 22px;
127
+ }
128
+
129
+ .eyeon-map-chrome__amenity-icon svg {
130
+ width: 100%;
131
+ height: 100%;
132
+ }
133
+
103
134
  .eyeon-map-chrome__panel {
104
135
  background: #fff;
105
136
  border-radius: 12px;
@@ -303,8 +334,7 @@
303
334
  overflow: hidden;
304
335
  background: #f8fafc;
305
336
  color: #0f172a;
306
- /* Inherit the host application's font; hosts may override with the variable. */
307
- font-family: var(--eyeon-map-font-family, inherit);
337
+ font-family: var(--eyeon-map-font-family, 'Montserrat', sans-serif);
308
338
  font-size: 12px;
309
339
  border: 1px solid #e2e8f0;
310
340
  border-radius: 8px;
@@ -325,6 +355,15 @@
325
355
  user-select: text;
326
356
  }
327
357
 
358
+ .eyeon-map-editor input:focus,
359
+ .eyeon-map-editor input:focus-visible,
360
+ .eyeon-map-editor textarea:focus,
361
+ .eyeon-map-editor textarea:focus-visible,
362
+ .eyeon-map-editor select:focus,
363
+ .eyeon-map-editor select:focus-visible {
364
+ outline: none;
365
+ }
366
+
328
367
  /* Admin / Storybook PORTAL editor — Map options (LeftRail) is in-library. */
329
368
  .eyeon-map-editor--PORTAL {
330
369
  grid-template-columns: 300px minmax(0, 1fr);
@@ -375,6 +414,8 @@
375
414
  }
376
415
 
377
416
  .eyeon-map-rail__header-title {
417
+ display: flex;
418
+ align-items: center;
378
419
  min-width: 0;
379
420
  flex: 1;
380
421
  overflow: hidden;
@@ -385,6 +426,19 @@
385
426
  color: #0f172a;
386
427
  }
387
428
 
429
+ .eyeon-map-rail__header .eyeon-map-rail__tag {
430
+ flex-shrink: 0;
431
+ }
432
+
433
+ .eyeon-map-rail__header-title .eyeon-map-assign__tag {
434
+ min-width: 0;
435
+ max-width: 100%;
436
+ overflow: hidden;
437
+ text-overflow: ellipsis;
438
+ white-space: nowrap;
439
+ word-break: normal;
440
+ }
441
+
388
442
  .eyeon-map-rail__nav {
389
443
  display: flex;
390
444
  flex-direction: column;
@@ -476,11 +530,35 @@
476
530
 
477
531
  .eyeon-map-rail__footer {
478
532
  flex-shrink: 0;
533
+ margin-top: auto;
479
534
  padding: 8px 12px;
480
535
  border-top: 1px solid #e2e8f0;
481
536
  background: #f8fafc;
482
537
  }
483
538
 
539
+ .eyeon-map-rail__classic {
540
+ appearance: none;
541
+ display: block;
542
+ width: 100%;
543
+ border: 0;
544
+ background: transparent;
545
+ padding: 4px 0;
546
+ margin: 0;
547
+ font-size: 11px;
548
+ font-weight: 600;
549
+ line-height: 1.3;
550
+ color: #64748b;
551
+ cursor: pointer;
552
+ text-align: left;
553
+ text-decoration: underline;
554
+ text-underline-offset: 2px;
555
+ }
556
+
557
+ .eyeon-map-rail__classic:hover,
558
+ .eyeon-map-rail__classic:focus-visible {
559
+ color: #0763b1;
560
+ }
561
+
484
562
  .eyeon-map-rail__heading {
485
563
  font-size: 10px;
486
564
  font-weight: 700;
@@ -498,7 +576,7 @@
498
576
  display: flex;
499
577
  justify-content: space-between;
500
578
  align-items: center;
501
- gap: 6px;
579
+ gap: 8px;
502
580
  width: 100%;
503
581
  text-align: left;
504
582
  border: 0;
@@ -508,6 +586,31 @@
508
586
  padding: 7px 8px;
509
587
  cursor: pointer;
510
588
  font-size: 12px;
589
+ user-select: none;
590
+ }
591
+
592
+ .eyeon-map-rail__row-icon {
593
+ width: 20px;
594
+ height: 20px;
595
+ flex-shrink: 0;
596
+ object-fit: contain;
597
+ opacity: 0.45;
598
+ }
599
+
600
+ .eyeon-map-rail__row-icon.is-assigned {
601
+ opacity: 1;
602
+ }
603
+
604
+ .eyeon-map-rail__row--ride {
605
+ align-items: flex-start;
606
+ }
607
+
608
+ .eyeon-map-rail__row--ride .eyeon-map-rail__row-icon {
609
+ margin-top: 2px;
610
+ }
611
+
612
+ .eyeon-map-rail__row--ride .eyeon-map-rail__row-copy {
613
+ gap: 4px;
511
614
  }
512
615
 
513
616
  .eyeon-map-rail__row.is-active,
@@ -515,6 +618,80 @@
515
618
  background: #f1f5f9;
516
619
  }
517
620
 
621
+ .eyeon-map-rail__row-copy {
622
+ display: flex;
623
+ flex-direction: column;
624
+ align-items: stretch;
625
+ gap: 1px;
626
+ min-width: 0;
627
+ flex: 1;
628
+ }
629
+
630
+ .eyeon-map-rail__row-title {
631
+ overflow: hidden;
632
+ text-overflow: ellipsis;
633
+ white-space: nowrap;
634
+ max-width: 100%;
635
+ font-weight: 600;
636
+ }
637
+
638
+ .eyeon-map-rail__row-meta {
639
+ display: flex;
640
+ align-items: center;
641
+ justify-content: space-between;
642
+ gap: 8px;
643
+ min-width: 0;
644
+ width: 100%;
645
+ }
646
+
647
+ .eyeon-map-rail__row-id {
648
+ overflow: hidden;
649
+ text-overflow: ellipsis;
650
+ white-space: nowrap;
651
+ min-width: 0;
652
+ color: #64748b;
653
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
654
+ font-size: 11px;
655
+ font-weight: 600;
656
+ }
657
+
658
+ .eyeon-map-rail__row-id--lead {
659
+ color: #0f172a;
660
+ font-size: 12px;
661
+ }
662
+
663
+ .eyeon-map-rail__row-copy .eyeon-map-rail__muted {
664
+ flex-shrink: 1;
665
+ max-width: 100%;
666
+ overflow: hidden;
667
+ text-overflow: ellipsis;
668
+ white-space: nowrap;
669
+ }
670
+
671
+ .eyeon-map-rail__tags {
672
+ display: flex;
673
+ flex-wrap: wrap;
674
+ align-items: center;
675
+ gap: 4px;
676
+ flex-shrink: 0;
677
+ }
678
+
679
+ .eyeon-map-rail__tag {
680
+ display: inline-flex;
681
+ align-items: center;
682
+ max-width: 100%;
683
+ padding: 1px 7px;
684
+ border-radius: 999px;
685
+ background: #e2e8f0;
686
+ color: #475569;
687
+ font-size: 10px;
688
+ font-weight: 600;
689
+ line-height: 1.45;
690
+ overflow: hidden;
691
+ text-overflow: ellipsis;
692
+ white-space: nowrap;
693
+ }
694
+
518
695
  .eyeon-map-rail__muted {
519
696
  color: #94a3b8;
520
697
  font-size: 10px;
@@ -527,6 +704,24 @@
527
704
  margin: 0 0 10px;
528
705
  }
529
706
 
707
+ .eyeon-map-rail__alert {
708
+ margin: 0 0 10px;
709
+ padding: 10px 12px;
710
+ border: 1px solid #bfdbfe;
711
+ border-radius: 8px;
712
+ background: #eff6ff;
713
+ color: #1e40af;
714
+ font-size: 12px;
715
+ font-weight: 500;
716
+ line-height: 1.45;
717
+ }
718
+
719
+ .eyeon-map-rail__sep {
720
+ height: 1px;
721
+ margin: 10px 0;
722
+ background: #e2e8f0;
723
+ }
724
+
530
725
  .eyeon-map-rail__actions {
531
726
  display: grid;
532
727
  gap: 6px;
@@ -557,51 +752,108 @@
557
752
 
558
753
  .eyeon-map-rail__field {
559
754
  display: grid;
755
+ grid-template-columns: minmax(0, 1fr);
560
756
  gap: 4px;
561
757
  margin-bottom: 8px;
758
+ min-width: 0;
562
759
  font-size: 11px;
563
760
  font-weight: 600;
564
761
  color: #475569;
565
762
  }
566
763
 
567
- .eyeon-map-rail__field--color {
568
- grid-template-columns: 1fr;
569
- }
570
-
571
- .eyeon-map-rail__color-row {
764
+ .eyeon-map-rail__field--inline {
572
765
  display: flex;
573
766
  align-items: center;
574
- gap: 8px;
767
+ justify-content: space-between;
768
+ gap: 10px;
769
+ margin-bottom: 6px;
575
770
  }
576
771
 
577
- .eyeon-map-rail__color-row input[type='text'] {
578
- flex: 1;
772
+ .eyeon-map-rail__field-label {
773
+ display: inline-flex;
774
+ align-items: center;
775
+ gap: 4px;
579
776
  min-width: 0;
580
- font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
581
- letter-spacing: 0.02em;
582
- text-transform: uppercase;
777
+ flex: 1 1 auto;
583
778
  }
584
779
 
585
- .eyeon-map-rail__field--color input[type='color'] {
586
- width: 36px;
587
- height: 32px;
588
- padding: 2px;
780
+ .eyeon-map-rail__field-reset {
781
+ display: inline-flex;
782
+ align-items: center;
783
+ justify-content: center;
784
+ width: 18px;
785
+ height: 18px;
786
+ margin: 0;
787
+ padding: 0;
788
+ border: 0;
789
+ border-radius: 4px;
790
+ background: transparent;
791
+ color: #0763b1;
589
792
  cursor: pointer;
590
793
  flex-shrink: 0;
591
794
  }
592
795
 
593
- .eyeon-map-rail__field input,
594
- .eyeon-map-rail__field select {
796
+ .eyeon-map-rail__field-reset:hover {
797
+ color: #054983;
798
+ background: #eff6ff;
799
+ }
800
+
801
+ .eyeon-map-rail__field--inline .eyeon-map-assign__swatch {
802
+ flex: 0 0 120px;
803
+ width: 120px;
804
+ }
805
+
806
+ .eyeon-map-rail__id-input {
807
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
808
+ }
809
+
810
+ .eyeon-map-rail__field:not(.eyeon-map-rail__field--inline) input:not(.eyeon-map-select__input),
811
+ .eyeon-map-rail__field:not(.eyeon-map-rail__field--inline) select,
812
+ .eyeon-map-rail__field:not(.eyeon-map-rail__field--inline) textarea {
813
+ box-sizing: border-box;
814
+ width: 100%;
815
+ max-width: 100%;
816
+ min-width: 0;
817
+ font-size: 12px;
818
+ padding: 6px 8px;
819
+ border: 1px solid #e2e8f0;
820
+ border-radius: 6px;
821
+ }
822
+
823
+ .eyeon-map-rail__field--inline > input:not(.eyeon-map-select__input),
824
+ .eyeon-map-rail__field--inline > select {
595
825
  font-size: 12px;
596
826
  padding: 6px 8px;
597
827
  border: 1px solid #e2e8f0;
598
828
  border-radius: 6px;
599
829
  }
600
830
 
831
+ .eyeon-map-rail__field textarea {
832
+ box-sizing: border-box;
833
+ width: 100%;
834
+ max-width: 100%;
835
+ min-width: 0;
836
+ resize: vertical;
837
+ min-height: 54px;
838
+ }
839
+
601
840
  .eyeon-map-rail__field .eyeon-map-select {
602
841
  width: 100%;
603
842
  }
604
843
 
844
+ .eyeon-map-rail__field--inline .eyeon-map-select,
845
+ .eyeon-map-rail__field--inline input[type='number'] {
846
+ flex: 0 0 132px;
847
+ width: 132px;
848
+ }
849
+
850
+ .eyeon-map-rail__field--inline input.eyeon-map-rail__number-sm {
851
+ box-sizing: border-box;
852
+ width: 66px;
853
+ min-width: 0;
854
+ flex: 0 0 66px;
855
+ }
856
+
605
857
  .eyeon-map-editor__center {
606
858
  display: flex;
607
859
  flex-direction: column;
@@ -769,6 +1021,18 @@
769
1021
  color: #1d4ed8;
770
1022
  }
771
1023
 
1024
+ .eyeon-map-editor__toolbar .eyeon-map-editor__discard {
1025
+ background: #fff;
1026
+ border-color: #cbd5e1;
1027
+ color: #334155;
1028
+ }
1029
+
1030
+ .eyeon-map-editor__toolbar .eyeon-map-editor__discard:hover:not(:disabled) {
1031
+ background: #f8fafc;
1032
+ border-color: #94a3b8;
1033
+ color: #0f172a;
1034
+ }
1035
+
772
1036
  .eyeon-map-editor__toolbar .eyeon-map-editor__save,
773
1037
  .eyeon-map-editor__toolbar .eyeon-map-editor__publish {
774
1038
  position: relative;
@@ -825,6 +1089,7 @@
825
1089
  overflow: hidden;
826
1090
  background-color: #f8fafc;
827
1091
  touch-action: none;
1092
+ overscroll-behavior: none;
828
1093
  -webkit-user-select: none;
829
1094
  user-select: none;
830
1095
  }
@@ -863,10 +1128,16 @@
863
1128
  width: 100%;
864
1129
  height: 100%;
865
1130
  touch-action: none;
1131
+ overscroll-behavior: none;
866
1132
  -webkit-user-select: none;
867
1133
  user-select: none;
868
1134
  }
869
1135
 
1136
+ .eyeon-map-canvas__view {
1137
+ /* Consumer styles must not move the translate/scale pivot off the SVG origin. */
1138
+ transform-origin: 0 0;
1139
+ }
1140
+
870
1141
  .eyeon-map-canvas__svg.is-adding-route-point,
871
1142
  .eyeon-map-canvas__svg.is-adding-route-point * {
872
1143
  cursor: none !important;
@@ -903,6 +1174,10 @@
903
1174
  padding: 0 0 8px;
904
1175
  }
905
1176
 
1177
+ .eyeon-map-inspector > .eyeon-map-assign__row {
1178
+ margin-top: 10px;
1179
+ }
1180
+
906
1181
  .eyeon-map-inspector__heading {
907
1182
  font-size: 10px;
908
1183
  font-weight: 700;
@@ -935,50 +1210,426 @@
935
1210
  cursor: pointer;
936
1211
  }
937
1212
 
938
- .eyeon-map-inspector__delete {
939
- margin: 0 0 8px;
940
- width: 100%;
941
- border: 1px solid #dc2626;
942
- border-radius: 6px;
943
- background: #fff;
944
- color: #dc2626;
945
- padding: 8px;
946
- font-size: 12px;
947
- font-weight: 600;
948
- cursor: pointer;
949
- }
950
-
951
- .eyeon-map-inspector__delete:hover {
952
- background: rgba(220, 38, 38, 0.08);
953
- }
954
-
955
- .eyeon-map-import-review {
956
- display: grid;
1213
+ .eyeon-map-assign {
1214
+ display: flex;
1215
+ flex-direction: column;
957
1216
  gap: 10px;
1217
+ min-width: 0;
958
1218
  }
959
1219
 
960
- .eyeon-map-import-review__remap {
961
- flex-direction: column;
962
- align-items: stretch;
963
- gap: 6px;
1220
+ .eyeon-map-assign > .eyeon-map-select,
1221
+ .eyeon-map-assign > .eyeon-map-rail__field {
1222
+ width: 100%;
1223
+ margin-bottom: 0;
964
1224
  }
965
1225
 
966
- .eyeon-map-floors__block {
967
- margin-bottom: 14px;
1226
+ .eyeon-map-assign__actions {
1227
+ display: flex;
1228
+ flex-wrap: wrap;
1229
+ align-items: center;
1230
+ justify-content: space-between;
1231
+ gap: 8px;
1232
+ width: 100%;
1233
+ margin-top: 16px;
968
1234
  }
969
1235
 
970
- .eyeon-map-floors__list {
971
- position: relative;
1236
+ .eyeon-map-assign__copy-wrap {
972
1237
  display: flex;
973
1238
  flex-direction: column;
974
- overflow: hidden;
1239
+ align-items: flex-start;
1240
+ gap: 4px;
975
1241
  }
976
1242
 
977
- .eyeon-map-floors__drop-line {
978
- position: absolute;
979
- left: 8px;
980
- right: 8px;
981
- height: 2px;
1243
+ .eyeon-map-assign__copy,
1244
+ .eyeon-map-assign__unassign {
1245
+ box-sizing: border-box;
1246
+ display: inline-flex;
1247
+ align-items: center;
1248
+ justify-content: center;
1249
+ width: auto;
1250
+ height: 32px;
1251
+ padding: 0 12px;
1252
+ border-radius: 3px;
1253
+ font-size: 12px;
1254
+ font-weight: 600;
1255
+ line-height: 1;
1256
+ cursor: pointer;
1257
+ }
1258
+
1259
+ .eyeon-map-assign__copy {
1260
+ gap: 6px;
1261
+ border: 1px solid #cbd5e1;
1262
+ background: #fff;
1263
+ color: #0f172a;
1264
+ }
1265
+
1266
+ .eyeon-map-assign__copy:hover {
1267
+ border-color: #94a3b8;
1268
+ }
1269
+
1270
+ .eyeon-map-assign__copy.is-open {
1271
+ border-color: #0763b1;
1272
+ }
1273
+
1274
+ .eyeon-map-assign__copy.is-open .eyeon-map-select__chevron {
1275
+ transform: rotate(180deg);
1276
+ }
1277
+
1278
+ .eyeon-map-assign__copy:disabled {
1279
+ opacity: 0.45;
1280
+ cursor: default;
1281
+ }
1282
+
1283
+ .eyeon-map-assign__copy .eyeon-map-select__chevron {
1284
+ color: currentColor;
1285
+ }
1286
+
1287
+ .eyeon-map-assign__unassign {
1288
+ border: 0;
1289
+ background: #d22d3d;
1290
+ color: #fff;
1291
+ }
1292
+
1293
+ .eyeon-map-assign__unassign:disabled {
1294
+ opacity: 0.45;
1295
+ cursor: default;
1296
+ }
1297
+
1298
+ .eyeon-map-assign__tags {
1299
+ display: flex;
1300
+ flex-wrap: wrap;
1301
+ gap: 6px;
1302
+ }
1303
+
1304
+ .eyeon-map-assign__tag {
1305
+ display: inline-flex;
1306
+ align-items: center;
1307
+ max-width: 100%;
1308
+ padding: 3px 8px;
1309
+ border-radius: 4px;
1310
+ background: #e2e8f0;
1311
+ color: #0f172a;
1312
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1313
+ font-size: 11px;
1314
+ font-weight: 600;
1315
+ word-break: break-all;
1316
+ }
1317
+
1318
+ .eyeon-map-assign__tabs {
1319
+ display: flex;
1320
+ gap: 4px;
1321
+ }
1322
+
1323
+ .eyeon-map-assign__tabs button {
1324
+ flex: 1;
1325
+ border: 0;
1326
+ border-radius: 3px;
1327
+ padding: 6px 8px;
1328
+ background: rgba(7, 99, 177, 0.1);
1329
+ color: #0763b1;
1330
+ font-size: 11px;
1331
+ font-weight: 600;
1332
+ cursor: pointer;
1333
+ }
1334
+
1335
+ .eyeon-map-assign__tabs button.is-active {
1336
+ background: #0763b1;
1337
+ color: #fff;
1338
+ }
1339
+
1340
+ .eyeon-map-assign__tabs button:disabled {
1341
+ cursor: default;
1342
+ opacity: 0.7;
1343
+ }
1344
+
1345
+ .eyeon-map-assign__row {
1346
+ display: flex;
1347
+ align-items: center;
1348
+ justify-content: space-between;
1349
+ gap: 10px;
1350
+ }
1351
+
1352
+ .eyeon-map-assign__label {
1353
+ display: inline-flex;
1354
+ align-items: center;
1355
+ gap: 4px;
1356
+ flex: 0 0 auto;
1357
+ min-width: 0;
1358
+ color: #64748b;
1359
+ font-size: 11px;
1360
+ font-weight: 600;
1361
+ }
1362
+
1363
+ .eyeon-map-rail__field-reset:disabled {
1364
+ opacity: 0.45;
1365
+ cursor: default;
1366
+ }
1367
+
1368
+ .eyeon-map-assign__control {
1369
+ display: flex;
1370
+ align-items: center;
1371
+ justify-content: flex-end;
1372
+ gap: 8px;
1373
+ min-width: 0;
1374
+ margin-left: auto;
1375
+ }
1376
+
1377
+ .eyeon-map-assign__control > input {
1378
+ box-sizing: border-box;
1379
+ width: 120px;
1380
+ min-width: 0;
1381
+ height: 28px;
1382
+ border: 1px solid #ccc;
1383
+ border-radius: 3px;
1384
+ padding: 0 8px;
1385
+ font-size: 12px;
1386
+ }
1387
+
1388
+ .eyeon-map-assign__stepper {
1389
+ display: flex;
1390
+ align-items: stretch;
1391
+ width: 120px;
1392
+ height: 28px;
1393
+ }
1394
+
1395
+ .eyeon-map-assign__stepper button {
1396
+ flex: 0 0 28px;
1397
+ border: 1px solid #ccc;
1398
+ background: #eee;
1399
+ color: #334155;
1400
+ font-size: 16px;
1401
+ line-height: 1;
1402
+ cursor: pointer;
1403
+ }
1404
+
1405
+ .eyeon-map-assign__stepper button:first-child {
1406
+ border-radius: 3px 0 0 3px;
1407
+ border-right: 0;
1408
+ }
1409
+
1410
+ .eyeon-map-assign__stepper button:last-child {
1411
+ border-radius: 0 3px 3px 0;
1412
+ border-left: 0;
1413
+ }
1414
+
1415
+ .eyeon-map-assign__stepper input {
1416
+ width: 0;
1417
+ flex: 1;
1418
+ min-width: 0;
1419
+ border: 1px solid #ccc;
1420
+ border-radius: 0;
1421
+ padding: 0 6px;
1422
+ font-size: 12px;
1423
+ text-align: center;
1424
+ }
1425
+
1426
+ .eyeon-map-assign__floor {
1427
+ flex: 0 1 168px;
1428
+ min-width: 0;
1429
+ }
1430
+
1431
+ .eyeon-map-assign__align {
1432
+ display: flex;
1433
+ height: 28px;
1434
+ }
1435
+
1436
+ .eyeon-map-assign__align button {
1437
+ display: inline-flex;
1438
+ align-items: center;
1439
+ justify-content: center;
1440
+ width: 28px;
1441
+ height: 28px;
1442
+ padding: 0;
1443
+ margin-left: -1px;
1444
+ border: 1px solid #ccc;
1445
+ background: #fff;
1446
+ color: #334155;
1447
+ cursor: pointer;
1448
+ }
1449
+
1450
+ .eyeon-map-assign__align button:first-child {
1451
+ margin-left: 0;
1452
+ border-radius: 3px 0 0 3px;
1453
+ }
1454
+
1455
+ .eyeon-map-assign__align button:last-child {
1456
+ border-radius: 0 3px 3px 0;
1457
+ }
1458
+
1459
+ .eyeon-map-assign__align button.is-active {
1460
+ z-index: 1;
1461
+ background: #eff6ff;
1462
+ border-color: #bfdbfe;
1463
+ color: #1d4ed8;
1464
+ }
1465
+
1466
+ .eyeon-map-assign__align button:disabled {
1467
+ opacity: 0.45;
1468
+ cursor: not-allowed;
1469
+ }
1470
+
1471
+ .eyeon-map-assign__rotate {
1472
+ display: inline-flex;
1473
+ align-items: center;
1474
+ justify-content: center;
1475
+ width: 28px;
1476
+ height: 28px;
1477
+ padding: 0;
1478
+ border: 0;
1479
+ background: transparent;
1480
+ color: #0763b1;
1481
+ cursor: pointer;
1482
+ }
1483
+
1484
+ .eyeon-map-assign__swatch {
1485
+ position: relative;
1486
+ display: flex;
1487
+ align-items: stretch;
1488
+ width: 120px;
1489
+ height: 28px;
1490
+ }
1491
+
1492
+ .eyeon-map-assign__swatch-well {
1493
+ box-sizing: border-box;
1494
+ width: 32px;
1495
+ height: 28px;
1496
+ padding: 0;
1497
+ border: 1px solid #ccc;
1498
+ border-radius: 3px 0 0 3px;
1499
+ cursor: pointer;
1500
+ flex-shrink: 0;
1501
+ background-color: #fff;
1502
+ }
1503
+
1504
+ .eyeon-map-assign__swatch-native {
1505
+ position: absolute;
1506
+ width: 0;
1507
+ height: 0;
1508
+ opacity: 0;
1509
+ pointer-events: none;
1510
+ }
1511
+
1512
+ .eyeon-map-assign__color-popover-well {
1513
+ box-sizing: border-box;
1514
+ width: 100%;
1515
+ height: 32px;
1516
+ padding: 0;
1517
+ border: 1px solid #ccc;
1518
+ border-radius: 3px;
1519
+ cursor: pointer;
1520
+ background-color: #fff;
1521
+ }
1522
+
1523
+ .eyeon-map-assign__color-popover-well.is-transparent,
1524
+ .eyeon-map-assign__swatch-well.is-transparent {
1525
+ background-image: conic-gradient(
1526
+ #d1d5db 0.25turn,
1527
+ #ffffff 0.25turn 0.5turn,
1528
+ #d1d5db 0.5turn 0.75turn,
1529
+ #ffffff 0.75turn
1530
+ );
1531
+ background-size: 8px 8px;
1532
+ }
1533
+
1534
+ .eyeon-map-assign__swatch-well:disabled {
1535
+ cursor: default;
1536
+ opacity: 0.45;
1537
+ }
1538
+
1539
+ .eyeon-map-assign__color-popover {
1540
+ position: fixed;
1541
+ z-index: 40;
1542
+ display: flex;
1543
+ flex-direction: column;
1544
+ gap: 8px;
1545
+ min-width: 132px;
1546
+ padding: 8px;
1547
+ background: #fff;
1548
+ border: 1px solid #e2e8f0;
1549
+ border-radius: 6px;
1550
+ box-shadow: 0 8px 20px rgba(15, 23, 42, 0.12);
1551
+ }
1552
+
1553
+ .eyeon-map-assign__color-popover input[type='checkbox'] {
1554
+ margin: 0;
1555
+ }
1556
+
1557
+ .eyeon-map-assign__color-popover label {
1558
+ display: flex;
1559
+ align-items: center;
1560
+ gap: 6px;
1561
+ margin: 0;
1562
+ color: #475569;
1563
+ font-size: 11px;
1564
+ font-weight: 600;
1565
+ cursor: pointer;
1566
+ }
1567
+
1568
+ .eyeon-map-assign__color-popover label input {
1569
+ margin: 0;
1570
+ }
1571
+
1572
+ .eyeon-map-assign__swatch input[type='text'] {
1573
+ flex: 1;
1574
+ min-width: 0;
1575
+ border: 1px solid #ccc;
1576
+ border-left: 0;
1577
+ border-radius: 0 3px 3px 0;
1578
+ padding: 0 6px;
1579
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;
1580
+ font-size: 12px;
1581
+ letter-spacing: 0.02em;
1582
+ text-transform: uppercase;
1583
+ }
1584
+
1585
+ .eyeon-map-assign__swatch input[type='text']::placeholder {
1586
+ text-transform: none;
1587
+ letter-spacing: 0;
1588
+ color: #94a3b8;
1589
+ }
1590
+
1591
+ .eyeon-map-assign textarea {
1592
+ box-sizing: border-box;
1593
+ display: block;
1594
+ width: 100%;
1595
+ max-width: 100%;
1596
+ min-width: 0;
1597
+ min-height: 64px;
1598
+ resize: vertical;
1599
+ font: inherit;
1600
+ font-size: 12px;
1601
+ padding: 6px 8px;
1602
+ border: 1px solid #e2e8f0;
1603
+ border-radius: 6px;
1604
+ }
1605
+
1606
+ .eyeon-map-import-review {
1607
+ display: grid;
1608
+ gap: 10px;
1609
+ }
1610
+
1611
+ .eyeon-map-import-review__remap {
1612
+ flex-direction: column;
1613
+ align-items: stretch;
1614
+ gap: 6px;
1615
+ }
1616
+
1617
+ .eyeon-map-floors__block {
1618
+ margin-bottom: 14px;
1619
+ }
1620
+
1621
+ .eyeon-map-floors__list {
1622
+ position: relative;
1623
+ display: flex;
1624
+ flex-direction: column;
1625
+ overflow: hidden;
1626
+ }
1627
+
1628
+ .eyeon-map-floors__drop-line {
1629
+ position: absolute;
1630
+ left: 8px;
1631
+ right: 8px;
1632
+ height: 2px;
982
1633
  border-radius: 1px;
983
1634
  background: #0763b1;
984
1635
  pointer-events: none;
@@ -1490,17 +2141,28 @@
1490
2141
 
1491
2142
  .eyeon-map-select {
1492
2143
  position: relative;
2144
+ display: block;
2145
+ box-sizing: border-box;
1493
2146
  width: 100%;
1494
2147
  min-width: 0;
1495
2148
  }
1496
2149
 
2150
+ .eyeon-map-select *,
2151
+ .eyeon-map-select *::before,
2152
+ .eyeon-map-select *::after {
2153
+ box-sizing: border-box;
2154
+ }
2155
+
1497
2156
  .eyeon-map-select__trigger {
2157
+ position: relative;
1498
2158
  display: flex;
1499
2159
  align-items: center;
1500
2160
  justify-content: space-between;
1501
2161
  gap: 8px;
1502
2162
  width: 100%;
1503
- min-height: 32px;
2163
+ min-width: 0;
2164
+ min-height: 34px;
2165
+ margin: 0;
1504
2166
  padding: 6px 8px;
1505
2167
  border: 1px solid #e2e8f0;
1506
2168
  border-radius: 6px;
@@ -1509,25 +2171,84 @@
1509
2171
  font: inherit;
1510
2172
  font-size: 12px;
1511
2173
  font-weight: 500;
2174
+ line-height: 1.3;
1512
2175
  text-align: left;
1513
2176
  cursor: pointer;
1514
2177
  }
1515
2178
 
1516
- .eyeon-map-select__trigger:disabled {
2179
+ .eyeon-map-select__trigger:has(.eyeon-map-select__input) {
2180
+ display: block;
2181
+ padding: 0;
2182
+ }
2183
+
2184
+ .eyeon-map-select__trigger:disabled,
2185
+ .eyeon-map-select__trigger:has(.eyeon-map-select__input:disabled) {
1517
2186
  opacity: 0.55;
1518
2187
  cursor: not-allowed;
1519
2188
  }
1520
2189
 
1521
- .eyeon-map-select__trigger:not(:disabled):hover {
2190
+ .eyeon-map-select__trigger:not(:disabled):hover,
2191
+ .eyeon-map-select__trigger:not(:has(.eyeon-map-select__input:disabled)):hover {
1522
2192
  border-color: #cbd5e1;
1523
2193
  }
1524
2194
 
2195
+ .eyeon-map-select__trigger.is-open {
2196
+ border-color: #0763b1;
2197
+ }
2198
+
1525
2199
  .eyeon-map-select__trigger span {
1526
2200
  overflow: hidden;
1527
2201
  text-overflow: ellipsis;
1528
2202
  white-space: nowrap;
1529
2203
  }
1530
2204
 
2205
+ .eyeon-map-select input.eyeon-map-select__input {
2206
+ display: block;
2207
+ width: 100%;
2208
+ max-width: none;
2209
+ min-width: 0;
2210
+ height: 100%;
2211
+ min-height: 34px;
2212
+ margin: 0;
2213
+ padding: 7px 30px 7px 10px;
2214
+ border: 0;
2215
+ border-radius: inherit;
2216
+ background: transparent;
2217
+ color: inherit;
2218
+ font: inherit;
2219
+ font-size: 12px;
2220
+ font-weight: 500;
2221
+ line-height: 1.3;
2222
+ outline: none;
2223
+ appearance: none;
2224
+ -webkit-appearance: none;
2225
+ box-shadow: none;
2226
+ cursor: text;
2227
+ }
2228
+
2229
+ .eyeon-map-select__input::placeholder {
2230
+ color: #94a3b8;
2231
+ font-weight: 400;
2232
+ }
2233
+
2234
+ .eyeon-map-select__chevron-btn {
2235
+ position: absolute;
2236
+ top: 0;
2237
+ right: 0;
2238
+ bottom: 0;
2239
+ z-index: 1;
2240
+ display: inline-flex;
2241
+ align-items: center;
2242
+ justify-content: center;
2243
+ width: 28px;
2244
+ margin: 0;
2245
+ padding: 0;
2246
+ border: 0;
2247
+ background: transparent;
2248
+ color: inherit;
2249
+ cursor: pointer;
2250
+ }
2251
+
1531
2252
  .eyeon-map-select__placeholder {
1532
2253
  color: #94a3b8;
1533
2254
  font-weight: 400;
@@ -1539,7 +2260,8 @@
1539
2260
  opacity: 0.7;
1540
2261
  }
1541
2262
 
1542
- .eyeon-map-select__trigger[aria-expanded='true'] .eyeon-map-select__chevron {
2263
+ .eyeon-map-select__trigger[aria-expanded='true'] .eyeon-map-select__chevron,
2264
+ .eyeon-map-select__trigger.is-open .eyeon-map-select__chevron {
1543
2265
  transform: rotate(180deg);
1544
2266
  }
1545
2267
 
@@ -1555,16 +2277,6 @@
1555
2277
  box-shadow: 0 10px 28px rgba(15, 23, 42, 0.14);
1556
2278
  }
1557
2279
 
1558
- .eyeon-map-select__search {
1559
- flex-shrink: 0;
1560
- margin: 6px 6px 0;
1561
- padding: 6px 8px;
1562
- border: 1px solid #e2e8f0;
1563
- border-radius: 6px;
1564
- font: inherit;
1565
- font-size: 12px;
1566
- }
1567
-
1568
2280
  .eyeon-map-select__list {
1569
2281
  margin: 0;
1570
2282
  padding: 4px;
@@ -1572,8 +2284,17 @@
1572
2284
  list-style: none;
1573
2285
  }
1574
2286
 
2287
+ .eyeon-map-select__value {
2288
+ display: inline-flex;
2289
+ align-items: center;
2290
+ gap: 8px;
2291
+ min-width: 0;
2292
+ }
2293
+
1575
2294
  .eyeon-map-select__option {
1576
- display: block;
2295
+ display: flex;
2296
+ align-items: center;
2297
+ gap: 8px;
1577
2298
  width: 100%;
1578
2299
  padding: 7px 10px;
1579
2300
  border: 0;
@@ -1586,6 +2307,33 @@
1586
2307
  cursor: pointer;
1587
2308
  }
1588
2309
 
2310
+ .eyeon-map-select__option-icon {
2311
+ width: 18px;
2312
+ height: 18px;
2313
+ flex-shrink: 0;
2314
+ object-fit: contain;
2315
+ }
2316
+
2317
+ .eyeon-map-select__option-icon.is-muted {
2318
+ opacity: 0.45;
2319
+ }
2320
+
2321
+ .eyeon-map-select__option-copy {
2322
+ display: flex;
2323
+ align-items: baseline;
2324
+ justify-content: space-between;
2325
+ gap: 8px;
2326
+ min-width: 0;
2327
+ flex: 1;
2328
+ }
2329
+
2330
+ .eyeon-map-select__option-hint {
2331
+ color: #64748b;
2332
+ font-size: 11px;
2333
+ font-weight: 600;
2334
+ flex-shrink: 0;
2335
+ }
2336
+
1589
2337
  .eyeon-map-select__option:hover {
1590
2338
  background: #f1f5f9;
1591
2339
  }
@@ -1595,6 +2343,10 @@
1595
2343
  font-weight: 600;
1596
2344
  }
1597
2345
 
2346
+ .eyeon-map-select__option.is-highlight:not(.is-active) {
2347
+ background: #f1f5f9;
2348
+ }
2349
+
1598
2350
  .eyeon-map-select__empty {
1599
2351
  padding: 8px 10px;
1600
2352
  color: #94a3b8;