@eyeon/map 2.0.2 → 2.0.4

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 (183) hide show
  1. package/dist/assets/MapViewer.css +1 -1
  2. package/dist/assets/index.css +1 -1
  3. package/dist/chunks/MapViewer.js +2656 -1290
  4. package/dist/chunks/MapViewer.js.map +1 -1
  5. package/dist/chunks/stacking.js +1496 -873
  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 +97 -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/filletPolygon.d.ts +10 -0
  16. package/dist/core/filletPolygon.d.ts.map +1 -0
  17. package/dist/core/hostChrome.d.ts +2 -4
  18. package/dist/core/hostChrome.d.ts.map +1 -1
  19. package/dist/core/import/index.d.ts +4 -0
  20. package/dist/core/import/index.d.ts.map +1 -1
  21. package/dist/core/index.d.ts +9 -0
  22. package/dist/core/index.d.ts.map +1 -1
  23. package/dist/core/index.js +160 -219
  24. package/dist/core/index.js.map +1 -1
  25. package/dist/core/labelAlign.d.ts +7 -0
  26. package/dist/core/labelAlign.d.ts.map +1 -0
  27. package/dist/core/layerStyles.d.ts +54 -5
  28. package/dist/core/layerStyles.d.ts.map +1 -1
  29. package/dist/core/mediaUrl.d.ts +3 -0
  30. package/dist/core/mediaUrl.d.ts.map +1 -0
  31. package/dist/core/outdoorDecoration.d.ts +16 -0
  32. package/dist/core/outdoorDecoration.d.ts.map +1 -0
  33. package/dist/core/publish/index.d.ts +6 -4
  34. package/dist/core/publish/index.d.ts.map +1 -1
  35. package/dist/core/routing/graph-tools.d.ts +23 -1
  36. package/dist/core/routing/graph-tools.d.ts.map +1 -1
  37. package/dist/core/routing/pathfinding.d.ts.map +1 -1
  38. package/dist/core/stacking.d.ts +50 -3
  39. package/dist/core/stacking.d.ts.map +1 -1
  40. package/dist/core/types.d.ts +34 -2
  41. package/dist/core/types.d.ts.map +1 -1
  42. package/dist/core/voids.d.ts +41 -0
  43. package/dist/core/voids.d.ts.map +1 -0
  44. package/dist/core/wheelZoom.d.ts +30 -0
  45. package/dist/core/wheelZoom.d.ts.map +1 -0
  46. package/dist/editor/FieldResetButton.d.ts +7 -0
  47. package/dist/editor/FieldResetButton.d.ts.map +1 -0
  48. package/dist/editor/MapEditor.d.ts +13 -3
  49. package/dist/editor/MapEditor.d.ts.map +1 -1
  50. package/dist/editor/canvas/EditorCanvas.d.ts +49 -7
  51. package/dist/editor/canvas/EditorCanvas.d.ts.map +1 -1
  52. package/dist/editor/canvas/OutdoorSvgUnderlay.d.ts +8 -0
  53. package/dist/editor/canvas/OutdoorSvgUnderlay.d.ts.map +1 -0
  54. package/dist/editor/canvas/coords.d.ts +56 -3
  55. package/dist/editor/canvas/coords.d.ts.map +1 -1
  56. package/dist/editor/canvas/editorFill.d.ts +12 -0
  57. package/dist/editor/canvas/editorFill.d.ts.map +1 -0
  58. package/dist/editor/canvas/editorHover.d.ts +18 -0
  59. package/dist/editor/canvas/editorHover.d.ts.map +1 -0
  60. package/dist/editor/canvas/underlayHint.d.ts +13 -0
  61. package/dist/editor/canvas/underlayHint.d.ts.map +1 -0
  62. package/dist/editor/connectorAssignments.d.ts +125 -0
  63. package/dist/editor/connectorAssignments.d.ts.map +1 -0
  64. package/dist/editor/draftOps.d.ts +12 -1
  65. package/dist/editor/draftOps.d.ts.map +1 -1
  66. package/dist/editor/editorSectionReturn.d.ts +12 -0
  67. package/dist/editor/editorSectionReturn.d.ts.map +1 -0
  68. package/dist/editor/ellipseDraw.d.ts +12 -0
  69. package/dist/editor/ellipseDraw.d.ts.map +1 -0
  70. package/dist/editor/entranceIcon.d.ts +15 -0
  71. package/dist/editor/entranceIcon.d.ts.map +1 -0
  72. package/dist/editor/floorsListReturn.d.ts +5 -0
  73. package/dist/editor/floorsListReturn.d.ts.map +1 -0
  74. package/dist/editor/geometryEdit.d.ts +23 -3
  75. package/dist/editor/geometryEdit.d.ts.map +1 -1
  76. package/dist/editor/hexColor.d.ts +6 -0
  77. package/dist/editor/hexColor.d.ts.map +1 -0
  78. package/dist/editor/history.d.ts +31 -0
  79. package/dist/editor/history.d.ts.map +1 -0
  80. package/dist/editor/index.css +1038 -68
  81. package/dist/editor/index.d.ts +6 -4
  82. package/dist/editor/index.d.ts.map +1 -1
  83. package/dist/editor/index.js +8744 -2136
  84. package/dist/editor/index.js.map +1 -1
  85. package/dist/editor/labelText.d.ts +25 -0
  86. package/dist/editor/labelText.d.ts.map +1 -0
  87. package/dist/editor/labels.d.ts +8 -0
  88. package/dist/editor/labels.d.ts.map +1 -1
  89. package/dist/editor/panels/AssignForm.d.ts +17 -0
  90. package/dist/editor/panels/AssignForm.d.ts.map +1 -0
  91. package/dist/editor/panels/AssignmentStyleFields.d.ts +14 -0
  92. package/dist/editor/panels/AssignmentStyleFields.d.ts.map +1 -0
  93. package/dist/editor/panels/BulkAssignForm.d.ts +11 -0
  94. package/dist/editor/panels/BulkAssignForm.d.ts.map +1 -0
  95. package/dist/editor/panels/CatalogKioskForm.d.ts +18 -0
  96. package/dist/editor/panels/CatalogKioskForm.d.ts.map +1 -0
  97. package/dist/editor/panels/ConnectorAssign.d.ts +16 -0
  98. package/dist/editor/panels/ConnectorAssign.d.ts.map +1 -0
  99. package/dist/editor/panels/CopyToLevelButton.d.ts +10 -0
  100. package/dist/editor/panels/CopyToLevelButton.d.ts.map +1 -0
  101. package/dist/editor/panels/EntranceIconForm.d.ts +11 -0
  102. package/dist/editor/panels/EntranceIconForm.d.ts.map +1 -0
  103. package/dist/editor/panels/FloorsPanel.d.ts +4 -0
  104. package/dist/editor/panels/FloorsPanel.d.ts.map +1 -1
  105. package/dist/editor/panels/ImportReviewPanel.d.ts.map +1 -1
  106. package/dist/editor/panels/Inspector.d.ts +24 -2
  107. package/dist/editor/panels/Inspector.d.ts.map +1 -1
  108. package/dist/editor/panels/LeftRail.d.ts +24 -11
  109. package/dist/editor/panels/LeftRail.d.ts.map +1 -1
  110. package/dist/editor/panels/PreviewOverlay.d.ts +9 -3
  111. package/dist/editor/panels/PreviewOverlay.d.ts.map +1 -1
  112. package/dist/editor/panels/TextLabelForm.d.ts +11 -0
  113. package/dist/editor/panels/TextLabelForm.d.ts.map +1 -0
  114. package/dist/editor/panels/formRows.d.ts +41 -0
  115. package/dist/editor/panels/formRows.d.ts.map +1 -0
  116. package/dist/editor/pathRings.d.ts +79 -0
  117. package/dist/editor/pathRings.d.ts.map +1 -0
  118. package/dist/editor/portalSurface.d.ts +37 -3
  119. package/dist/editor/portalSurface.d.ts.map +1 -1
  120. package/dist/editor/previewDocument.d.ts +2 -1
  121. package/dist/editor/previewDocument.d.ts.map +1 -1
  122. package/dist/editor/railAssignments.d.ts +29 -0
  123. package/dist/editor/railAssignments.d.ts.map +1 -0
  124. package/dist/editor/railKiosks.d.ts +27 -0
  125. package/dist/editor/railKiosks.d.ts.map +1 -0
  126. package/dist/editor/railListCopy.d.ts +31 -0
  127. package/dist/editor/railListCopy.d.ts.map +1 -0
  128. package/dist/editor/routeStubs.d.ts +103 -0
  129. package/dist/editor/routeStubs.d.ts.map +1 -0
  130. package/dist/editor/shapeCopy.d.ts +40 -0
  131. package/dist/editor/shapeCopy.d.ts.map +1 -0
  132. package/dist/editor/shapeSelection.d.ts +6 -0
  133. package/dist/editor/shapeSelection.d.ts.map +1 -0
  134. package/dist/editor/snapPoint.d.ts +5 -0
  135. package/dist/editor/snapPoint.d.ts.map +1 -0
  136. package/dist/editor/splitJoin.d.ts +78 -0
  137. package/dist/editor/splitJoin.d.ts.map +1 -0
  138. package/dist/editor/tools.d.ts +46 -7
  139. package/dist/editor/tools.d.ts.map +1 -1
  140. package/dist/fonts/assets.d.ts +4 -0
  141. package/dist/fonts/mapFont.d.ts +5 -0
  142. package/dist/fonts/mapFont.d.ts.map +1 -0
  143. package/dist/fonts/mapFontUrl.d.ts +8 -0
  144. package/dist/fonts/mapFontUrl.d.ts.map +1 -0
  145. package/dist/specialIcons.d.ts +39 -0
  146. package/dist/specialIcons.d.ts.map +1 -0
  147. package/dist/test-maps/shops-at-south-town/BASE - Shops At South Town.ai +6326 -6407
  148. package/dist/test-maps/shops-at-south-town/LF - Shops At South Town.ai +458 -484
  149. package/dist/test-maps/shops-at-south-town/SVG/BASE - Shops At South Town.svg +6 -6
  150. package/dist/test-maps/shops-at-south-town/SVG/LF - Shops At South Town.svg +52 -52
  151. package/dist/test-maps/shops-at-south-town/SVG/UF - Shops At South Town.svg +74 -74
  152. package/dist/test-maps/shops-at-south-town/UF - Shops At South Town.ai +341 -436
  153. package/dist/ui/ModernSelect.d.ts +14 -0
  154. package/dist/ui/ModernSelect.d.ts.map +1 -0
  155. package/dist/ui/selectSearch.d.ts +12 -0
  156. package/dist/ui/selectSearch.d.ts.map +1 -0
  157. package/dist/viewer/MapViewer.d.ts +14 -1
  158. package/dist/viewer/MapViewer.d.ts.map +1 -1
  159. package/dist/viewer/camera.d.ts +85 -1
  160. package/dist/viewer/camera.d.ts.map +1 -1
  161. package/dist/viewer/components/CameraRig.d.ts +18 -1
  162. package/dist/viewer/components/CameraRig.d.ts.map +1 -1
  163. package/dist/viewer/components/LevelMeshes.d.ts +15 -4
  164. package/dist/viewer/components/LevelMeshes.d.ts.map +1 -1
  165. package/dist/viewer/components/MapScene.d.ts +10 -4
  166. package/dist/viewer/components/MapScene.d.ts.map +1 -1
  167. package/dist/viewer/components/OpeningWell.d.ts +7 -0
  168. package/dist/viewer/components/OpeningWell.d.ts.map +1 -0
  169. package/dist/viewer/components/RouteLine.d.ts.map +1 -1
  170. package/dist/viewer/components/SvgVectorLayer.d.ts +5 -3
  171. package/dist/viewer/components/SvgVectorLayer.d.ts.map +1 -1
  172. package/dist/viewer/components/openingGeometry.d.ts +7 -0
  173. package/dist/viewer/components/openingGeometry.d.ts.map +1 -0
  174. package/dist/viewer/index.css +251 -9
  175. package/dist/viewer/index.d.ts +1 -1
  176. package/dist/viewer/index.d.ts.map +1 -1
  177. package/dist/viewer/index.js +5 -5
  178. package/dist/viewer/pointer.d.ts +26 -0
  179. package/dist/viewer/pointer.d.ts.map +1 -0
  180. package/dist/viewer/ui/MapControls.d.ts +11 -3
  181. package/dist/viewer/ui/MapControls.d.ts.map +1 -1
  182. package/dist/viewer/ui/RuntimeChrome.d.ts.map +1 -1
  183. package/package.json +4 -2
@@ -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;
@@ -184,11 +215,8 @@
184
215
  color: #475569;
185
216
  }
186
217
 
187
- .eyeon-map-chrome__route select {
188
- font-size: 12px;
189
- padding: 6px;
190
- border-radius: 6px;
191
- border: 1px solid #e2e8f0;
218
+ .eyeon-map-chrome__route .eyeon-map-select {
219
+ width: 100%;
192
220
  }
193
221
 
194
222
  .eyeon-map-chrome__accessible {
@@ -306,11 +334,12 @@
306
334
  overflow: hidden;
307
335
  background: #f8fafc;
308
336
  color: #0f172a;
309
- /* Inherit the host application's font; hosts may override with the variable. */
310
- font-family: var(--eyeon-map-font-family, inherit);
337
+ font-family: var(--eyeon-map-font-family, 'Montserrat', sans-serif);
311
338
  font-size: 12px;
312
339
  border: 1px solid #e2e8f0;
313
340
  border-radius: 8px;
341
+ -webkit-user-select: none;
342
+ user-select: none;
314
343
  }
315
344
 
316
345
  .eyeon-map-editor button,
@@ -320,6 +349,21 @@
320
349
  font-family: inherit;
321
350
  }
322
351
 
352
+ .eyeon-map-editor input,
353
+ .eyeon-map-editor textarea {
354
+ -webkit-user-select: text;
355
+ user-select: text;
356
+ }
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
+
323
367
  /* Admin / Storybook PORTAL editor — Map options (LeftRail) is in-library. */
324
368
  .eyeon-map-editor--PORTAL {
325
369
  grid-template-columns: 300px minmax(0, 1fr);
@@ -335,12 +379,18 @@
335
379
  background: #fff;
336
380
  }
337
381
 
382
+ .eyeon-map-rail__header,
383
+ .eyeon-map-editor__toolbar {
384
+ box-sizing: border-box;
385
+ height: 49px;
386
+ min-height: 49px;
387
+ }
388
+
338
389
  .eyeon-map-rail__header {
339
390
  display: flex;
340
391
  align-items: center;
341
392
  gap: 8px;
342
393
  flex-shrink: 0;
343
- min-height: 44px;
344
394
  padding: 8px 10px;
345
395
  border-bottom: 1px solid #e2e8f0;
346
396
  }
@@ -364,27 +414,29 @@
364
414
  }
365
415
 
366
416
  .eyeon-map-rail__header-title {
417
+ display: flex;
418
+ align-items: center;
419
+ min-width: 0;
420
+ flex: 1;
421
+ overflow: hidden;
422
+ text-overflow: ellipsis;
423
+ white-space: nowrap;
367
424
  font-size: 13px;
368
425
  font-weight: 700;
369
426
  color: #0f172a;
370
427
  }
371
428
 
372
- .eyeon-map-rail__edit-map {
373
- width: 100%;
374
- margin-bottom: 8px;
375
- border: 1px solid #0763b1;
376
- background: #0763b1;
377
- color: #fff;
378
- border-radius: 8px;
379
- padding: 10px 12px;
380
- font-size: 13px;
381
- font-weight: 700;
382
- cursor: pointer;
429
+ .eyeon-map-rail__header .eyeon-map-rail__tag {
430
+ flex-shrink: 0;
383
431
  }
384
432
 
385
- .eyeon-map-rail__edit-map:hover {
386
- background: #05508f;
387
- border-color: #05508f;
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;
388
440
  }
389
441
 
390
442
  .eyeon-map-rail__nav {
@@ -408,6 +460,16 @@
408
460
  cursor: pointer;
409
461
  }
410
462
 
463
+ .eyeon-map-rail__nav-icon {
464
+ display: inline-flex;
465
+ align-items: center;
466
+ justify-content: center;
467
+ width: 28px;
468
+ height: 28px;
469
+ color: #64748b;
470
+ flex-shrink: 0;
471
+ }
472
+
411
473
  .eyeon-map-rail__nav-item:hover {
412
474
  background: #f1f5f9;
413
475
  }
@@ -417,6 +479,7 @@
417
479
  flex-direction: column;
418
480
  gap: 2px;
419
481
  min-width: 0;
482
+ flex: 1;
420
483
  }
421
484
 
422
485
  .eyeon-map-rail__nav-title {
@@ -445,6 +508,12 @@
445
508
  color: #64748b;
446
509
  }
447
510
 
511
+ .eyeon-map-rail__nav-sep {
512
+ height: 1px;
513
+ margin: 8px 8px;
514
+ background: #cbd5e1;
515
+ }
516
+
448
517
  .eyeon-map-rail__stat {
449
518
  font-size: 12px;
450
519
  font-weight: 600;
@@ -461,11 +530,35 @@
461
530
 
462
531
  .eyeon-map-rail__footer {
463
532
  flex-shrink: 0;
533
+ margin-top: auto;
464
534
  padding: 8px 12px;
465
535
  border-top: 1px solid #e2e8f0;
466
536
  background: #f8fafc;
467
537
  }
468
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
+
469
562
  .eyeon-map-rail__heading {
470
563
  font-size: 10px;
471
564
  font-weight: 700;
@@ -483,7 +576,7 @@
483
576
  display: flex;
484
577
  justify-content: space-between;
485
578
  align-items: center;
486
- gap: 6px;
579
+ gap: 8px;
487
580
  width: 100%;
488
581
  text-align: left;
489
582
  border: 0;
@@ -493,6 +586,31 @@
493
586
  padding: 7px 8px;
494
587
  cursor: pointer;
495
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;
496
614
  }
497
615
 
498
616
  .eyeon-map-rail__row.is-active,
@@ -500,6 +618,80 @@
500
618
  background: #f1f5f9;
501
619
  }
502
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
+
503
695
  .eyeon-map-rail__muted {
504
696
  color: #94a3b8;
505
697
  font-size: 10px;
@@ -512,6 +704,24 @@
512
704
  margin: 0 0 10px;
513
705
  }
514
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
+
515
725
  .eyeon-map-rail__actions {
516
726
  display: grid;
517
727
  gap: 6px;
@@ -542,33 +752,108 @@
542
752
 
543
753
  .eyeon-map-rail__field {
544
754
  display: grid;
755
+ grid-template-columns: minmax(0, 1fr);
545
756
  gap: 4px;
546
757
  margin-bottom: 8px;
758
+ min-width: 0;
547
759
  font-size: 11px;
548
760
  font-weight: 600;
549
761
  color: #475569;
550
762
  }
551
763
 
552
- .eyeon-map-rail__field--color {
553
- grid-template-columns: 1fr 36px;
764
+ .eyeon-map-rail__field--inline {
765
+ display: flex;
554
766
  align-items: center;
767
+ justify-content: space-between;
768
+ gap: 10px;
769
+ margin-bottom: 6px;
555
770
  }
556
771
 
557
- .eyeon-map-rail__field--color input[type='color'] {
558
- width: 36px;
559
- height: 28px;
560
- padding: 2px;
772
+ .eyeon-map-rail__field-label {
773
+ display: inline-flex;
774
+ align-items: center;
775
+ gap: 4px;
776
+ min-width: 0;
777
+ flex: 1 1 auto;
778
+ }
779
+
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;
561
792
  cursor: pointer;
793
+ flex-shrink: 0;
794
+ }
795
+
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;
562
821
  }
563
822
 
564
- .eyeon-map-rail__field input,
565
- .eyeon-map-rail__field select {
823
+ .eyeon-map-rail__field--inline > input:not(.eyeon-map-select__input),
824
+ .eyeon-map-rail__field--inline > select {
566
825
  font-size: 12px;
567
826
  padding: 6px 8px;
568
827
  border: 1px solid #e2e8f0;
569
828
  border-radius: 6px;
570
829
  }
571
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
+
840
+ .eyeon-map-rail__field .eyeon-map-select {
841
+ width: 100%;
842
+ }
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
+
572
857
  .eyeon-map-editor__center {
573
858
  display: flex;
574
859
  flex-direction: column;
@@ -582,6 +867,7 @@
582
867
  z-index: 4;
583
868
  display: flex;
584
869
  justify-content: space-between;
870
+ align-items: center;
585
871
  gap: 8px;
586
872
  flex-shrink: 0;
587
873
  padding: 8px 10px;
@@ -605,6 +891,20 @@
605
891
  flex-wrap: wrap;
606
892
  }
607
893
 
894
+ .eyeon-map-editor__history {
895
+ display: flex;
896
+ gap: 4px;
897
+ align-items: center;
898
+ }
899
+
900
+ .eyeon-map-editor__tool-sep {
901
+ width: 1px;
902
+ height: 24px;
903
+ margin: 0 10px;
904
+ background: #94a3b8;
905
+ flex-shrink: 0;
906
+ }
907
+
608
908
  .eyeon-map-rail__tool-extras {
609
909
  margin-bottom: 10px;
610
910
  }
@@ -621,6 +921,7 @@
621
921
  color: #0f172a;
622
922
  border-radius: 6px;
623
923
  cursor: pointer;
924
+ outline: none;
624
925
  }
625
926
 
626
927
  .eyeon-map-editor__tool-icon:hover:not(:disabled) {
@@ -628,6 +929,11 @@
628
929
  border-color: #cbd5e1;
629
930
  }
630
931
 
932
+ .eyeon-map-editor__tool-icon:focus,
933
+ .eyeon-map-editor__tool-icon:focus-visible {
934
+ outline: none;
935
+ }
936
+
631
937
  .eyeon-map-editor__tool-icon.is-active {
632
938
  background: #eff6ff;
633
939
  border-color: #bfdbfe;
@@ -639,6 +945,19 @@
639
945
  cursor: not-allowed;
640
946
  }
641
947
 
948
+ .eyeon-map-editor__tool-icon--labeled {
949
+ width: auto;
950
+ gap: 6px;
951
+ padding: 0 8px;
952
+ }
953
+
954
+ .eyeon-map-editor__tool-caption {
955
+ font-size: 12px;
956
+ font-weight: 600;
957
+ line-height: 1;
958
+ white-space: nowrap;
959
+ }
960
+
642
961
  /* Immediate CSS tooltips — native title= is slow and often clipped in iframes. */
643
962
  .eyeon-map-editor [data-tooltip] {
644
963
  position: relative;
@@ -692,25 +1011,49 @@
692
1011
  padding: 0;
693
1012
  }
694
1013
 
695
- .eyeon-map-editor__toolbar button.is-active {
1014
+ .eyeon-map-editor__toolbar button.eyeon-map-editor__tool-icon--labeled {
1015
+ padding: 0 8px;
1016
+ }
1017
+
1018
+ .eyeon-map-editor__toolbar button.is-active {
696
1019
  background: #eff6ff;
697
1020
  border-color: #bfdbfe;
698
1021
  color: #1d4ed8;
699
1022
  }
700
1023
 
701
- .eyeon-map-editor__unsaved {
702
- color: #b45309;
703
- font-size: 11px;
704
- font-weight: 600;
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;
705
1034
  }
706
1035
 
707
1036
  .eyeon-map-editor__toolbar .eyeon-map-editor__save,
708
1037
  .eyeon-map-editor__toolbar .eyeon-map-editor__publish {
1038
+ position: relative;
709
1039
  background-color: #0763b1;
710
1040
  border-color: #0763b1;
711
1041
  color: #fff;
712
1042
  }
713
1043
 
1044
+ .eyeon-map-editor__save-badge {
1045
+ position: absolute;
1046
+ top: -4px;
1047
+ right: -4px;
1048
+ width: 10px;
1049
+ height: 10px;
1050
+ border-radius: 50%;
1051
+ background: #f59e0b;
1052
+ border: 2px solid #fff;
1053
+ box-shadow: 0 0 0 1px rgba(245, 158, 11, 0.35);
1054
+ pointer-events: none;
1055
+ }
1056
+
714
1057
  .eyeon-map-editor__toolbar .eyeon-map-editor__save:hover:not(:disabled),
715
1058
  .eyeon-map-editor__toolbar .eyeon-map-editor__publish:hover:not(:disabled) {
716
1059
  background-color: #05508f;
@@ -723,22 +1066,6 @@
723
1066
  cursor: not-allowed;
724
1067
  }
725
1068
 
726
- .eyeon-map-editor__angle {
727
- display: flex;
728
- align-items: center;
729
- gap: 4px;
730
- font-size: 11px;
731
- font-weight: 600;
732
- }
733
-
734
- .eyeon-map-editor__angle input {
735
- width: 56px;
736
- font-size: 11px;
737
- padding: 3px 6px;
738
- border: 1px solid #e2e8f0;
739
- border-radius: 4px;
740
- }
741
-
742
1069
  .eyeon-map-editor__hint {
743
1070
  flex-shrink: 0;
744
1071
  padding: 6px 12px;
@@ -761,6 +1088,10 @@
761
1088
  inset: 0;
762
1089
  overflow: hidden;
763
1090
  background-color: #f8fafc;
1091
+ touch-action: none;
1092
+ overscroll-behavior: none;
1093
+ -webkit-user-select: none;
1094
+ user-select: none;
764
1095
  }
765
1096
 
766
1097
  /* Graph paper is Edit Map only. PORTAL default is MapViewer (no grid). */
@@ -797,6 +1128,19 @@
797
1128
  width: 100%;
798
1129
  height: 100%;
799
1130
  touch-action: none;
1131
+ overscroll-behavior: none;
1132
+ -webkit-user-select: none;
1133
+ user-select: none;
1134
+ }
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
+
1141
+ .eyeon-map-canvas__svg.is-adding-route-point,
1142
+ .eyeon-map-canvas__svg.is-adding-route-point * {
1143
+ cursor: none !important;
800
1144
  }
801
1145
 
802
1146
  .eyeon-map-canvas__empty {
@@ -808,10 +1152,32 @@
808
1152
  color: #94a3b8;
809
1153
  }
810
1154
 
1155
+ .eyeon-map-canvas__underlay-tip {
1156
+ position: absolute;
1157
+ z-index: 8;
1158
+ transform: translate(-50%, calc(-100% - 10px));
1159
+ max-width: 240px;
1160
+ padding: 6px 10px;
1161
+ border-radius: 6px;
1162
+ background: rgba(15, 23, 42, 0.75);
1163
+ color: #fff;
1164
+ font-size: 12px;
1165
+ font-weight: 400;
1166
+ line-height: 1.35;
1167
+ letter-spacing: 0.01em;
1168
+ text-align: center;
1169
+ box-shadow: 0 4px 12px rgba(15, 23, 42, 0.22);
1170
+ pointer-events: none;
1171
+ }
1172
+
811
1173
  .eyeon-map-inspector {
812
1174
  padding: 0 0 8px;
813
1175
  }
814
1176
 
1177
+ .eyeon-map-inspector > .eyeon-map-assign__row {
1178
+ margin-top: 10px;
1179
+ }
1180
+
815
1181
  .eyeon-map-inspector__heading {
816
1182
  font-size: 10px;
817
1183
  font-weight: 700;
@@ -844,21 +1210,397 @@
844
1210
  cursor: pointer;
845
1211
  }
846
1212
 
847
- .eyeon-map-inspector__delete {
848
- margin: 0 0 8px;
1213
+ .eyeon-map-assign {
1214
+ display: flex;
1215
+ flex-direction: column;
1216
+ gap: 10px;
1217
+ min-width: 0;
1218
+ }
1219
+
1220
+ .eyeon-map-assign > .eyeon-map-select,
1221
+ .eyeon-map-assign > .eyeon-map-rail__field {
849
1222
  width: 100%;
850
- border: 1px solid #dc2626;
851
- border-radius: 6px;
1223
+ margin-bottom: 0;
1224
+ }
1225
+
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;
1234
+ }
1235
+
1236
+ .eyeon-map-assign__copy-wrap {
1237
+ display: flex;
1238
+ flex-direction: column;
1239
+ align-items: flex-start;
1240
+ gap: 4px;
1241
+ }
1242
+
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;
852
1262
  background: #fff;
853
- color: #dc2626;
854
- padding: 8px;
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;
855
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;
856
1564
  font-weight: 600;
857
1565
  cursor: pointer;
858
1566
  }
859
1567
 
860
- .eyeon-map-inspector__delete:hover {
861
- background: rgba(220, 38, 38, 0.08);
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;
862
1604
  }
863
1605
 
864
1606
  .eyeon-map-import-review {
@@ -877,16 +1619,29 @@
877
1619
  }
878
1620
 
879
1621
  .eyeon-map-floors__list {
1622
+ position: relative;
880
1623
  display: flex;
881
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;
1633
+ border-radius: 1px;
1634
+ background: #0763b1;
1635
+ pointer-events: none;
1636
+ z-index: 2;
882
1637
  }
883
1638
 
884
1639
  .eyeon-map-floors__row {
885
1640
  display: flex;
886
1641
  align-items: center;
887
- gap: 4px;
1642
+ gap: 2px;
888
1643
  border-radius: 6px;
889
- padding: 0;
1644
+ padding: 0 4px 0 8px;
890
1645
  height: 32px;
891
1646
  box-sizing: border-box;
892
1647
  }
@@ -894,7 +1649,6 @@
894
1649
  .eyeon-map-floors__entry {
895
1650
  display: grid;
896
1651
  margin-bottom: 2px;
897
- will-change: transform;
898
1652
  }
899
1653
 
900
1654
  .eyeon-map-floors__row:hover,
@@ -918,6 +1672,7 @@
918
1672
  .eyeon-map-floors.is-reordering {
919
1673
  user-select: none;
920
1674
  cursor: grabbing;
1675
+ overflow: hidden;
921
1676
  }
922
1677
 
923
1678
  .eyeon-map-floors__row--ghost {
@@ -958,8 +1713,9 @@
958
1713
  display: inline-flex;
959
1714
  align-items: center;
960
1715
  justify-content: center;
961
- width: 32px;
1716
+ width: 20px;
962
1717
  height: 32px;
1718
+ padding: 0;
963
1719
  border: 0;
964
1720
  background: transparent;
965
1721
  color: #64748b;
@@ -1382,3 +2138,217 @@
1382
2138
  justify-content: center;
1383
2139
  height: 100%;
1384
2140
  }
2141
+
2142
+ .eyeon-map-select {
2143
+ position: relative;
2144
+ display: block;
2145
+ box-sizing: border-box;
2146
+ width: 100%;
2147
+ min-width: 0;
2148
+ }
2149
+
2150
+ .eyeon-map-select *,
2151
+ .eyeon-map-select *::before,
2152
+ .eyeon-map-select *::after {
2153
+ box-sizing: border-box;
2154
+ }
2155
+
2156
+ .eyeon-map-select__trigger {
2157
+ position: relative;
2158
+ display: flex;
2159
+ align-items: center;
2160
+ justify-content: space-between;
2161
+ gap: 8px;
2162
+ width: 100%;
2163
+ min-width: 0;
2164
+ min-height: 34px;
2165
+ margin: 0;
2166
+ padding: 6px 8px;
2167
+ border: 1px solid #e2e8f0;
2168
+ border-radius: 6px;
2169
+ background: #fff;
2170
+ color: #0f172a;
2171
+ font: inherit;
2172
+ font-size: 12px;
2173
+ font-weight: 500;
2174
+ line-height: 1.3;
2175
+ text-align: left;
2176
+ cursor: pointer;
2177
+ }
2178
+
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) {
2186
+ opacity: 0.55;
2187
+ cursor: not-allowed;
2188
+ }
2189
+
2190
+ .eyeon-map-select__trigger:not(:disabled):hover,
2191
+ .eyeon-map-select__trigger:not(:has(.eyeon-map-select__input:disabled)):hover {
2192
+ border-color: #cbd5e1;
2193
+ }
2194
+
2195
+ .eyeon-map-select__trigger.is-open {
2196
+ border-color: #0763b1;
2197
+ }
2198
+
2199
+ .eyeon-map-select__trigger span {
2200
+ overflow: hidden;
2201
+ text-overflow: ellipsis;
2202
+ white-space: nowrap;
2203
+ }
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
+
2252
+ .eyeon-map-select__placeholder {
2253
+ color: #94a3b8;
2254
+ font-weight: 400;
2255
+ }
2256
+
2257
+ .eyeon-map-select__chevron {
2258
+ flex-shrink: 0;
2259
+ color: #64748b;
2260
+ opacity: 0.7;
2261
+ }
2262
+
2263
+ .eyeon-map-select__trigger[aria-expanded='true'] .eyeon-map-select__chevron,
2264
+ .eyeon-map-select__trigger.is-open .eyeon-map-select__chevron {
2265
+ transform: rotate(180deg);
2266
+ }
2267
+
2268
+ .eyeon-map-select__menu {
2269
+ position: fixed;
2270
+ z-index: 2147483000;
2271
+ display: flex;
2272
+ flex-direction: column;
2273
+ overflow: hidden;
2274
+ border: 1px solid #e2e8f0;
2275
+ border-radius: 8px;
2276
+ background: #fff;
2277
+ box-shadow: 0 10px 28px rgba(15, 23, 42, 0.14);
2278
+ }
2279
+
2280
+ .eyeon-map-select__list {
2281
+ margin: 0;
2282
+ padding: 4px;
2283
+ overflow: auto;
2284
+ list-style: none;
2285
+ }
2286
+
2287
+ .eyeon-map-select__value {
2288
+ display: inline-flex;
2289
+ align-items: center;
2290
+ gap: 8px;
2291
+ min-width: 0;
2292
+ }
2293
+
2294
+ .eyeon-map-select__option {
2295
+ display: flex;
2296
+ align-items: center;
2297
+ gap: 8px;
2298
+ width: 100%;
2299
+ padding: 7px 10px;
2300
+ border: 0;
2301
+ border-radius: 6px;
2302
+ background: transparent;
2303
+ color: #0f172a;
2304
+ font: inherit;
2305
+ font-size: 12px;
2306
+ text-align: left;
2307
+ cursor: pointer;
2308
+ }
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
+
2337
+ .eyeon-map-select__option:hover {
2338
+ background: #f1f5f9;
2339
+ }
2340
+
2341
+ .eyeon-map-select__option.is-active {
2342
+ background: #e0f2fe;
2343
+ font-weight: 600;
2344
+ }
2345
+
2346
+ .eyeon-map-select__option.is-highlight:not(.is-active) {
2347
+ background: #f1f5f9;
2348
+ }
2349
+
2350
+ .eyeon-map-select__empty {
2351
+ padding: 8px 10px;
2352
+ color: #94a3b8;
2353
+ font-size: 12px;
2354
+ }