@eyeon/map 2.0.1 → 2.0.3

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 (139) hide show
  1. package/README.md +18 -1
  2. package/dist/assets/MapViewer.css +1 -1
  3. package/dist/assets/index.css +1 -1
  4. package/dist/chunks/MapViewer.js +1988 -358
  5. package/dist/chunks/MapViewer.js.map +1 -1
  6. package/dist/chunks/graph-tools.js +202 -109
  7. package/dist/chunks/graph-tools.js.map +1 -1
  8. package/dist/chunks/stacking.js +1426 -0
  9. package/dist/chunks/stacking.js.map +1 -0
  10. package/dist/core/filletPolygon.d.ts +10 -0
  11. package/dist/core/filletPolygon.d.ts.map +1 -0
  12. package/dist/core/geometry/index.d.ts +41 -4
  13. package/dist/core/geometry/index.d.ts.map +1 -1
  14. package/dist/core/hostChrome.d.ts +20 -0
  15. package/dist/core/hostChrome.d.ts.map +1 -0
  16. package/dist/core/import/index.d.ts +52 -3
  17. package/dist/core/import/index.d.ts.map +1 -1
  18. package/dist/core/import/svgStyle.d.ts +21 -0
  19. package/dist/core/import/svgStyle.d.ts.map +1 -0
  20. package/dist/core/import/svgTransform.d.ts +49 -0
  21. package/dist/core/import/svgTransform.d.ts.map +1 -0
  22. package/dist/core/index.d.ts +6 -0
  23. package/dist/core/index.d.ts.map +1 -1
  24. package/dist/core/index.js +89 -279
  25. package/dist/core/index.js.map +1 -1
  26. package/dist/core/layerStyles.d.ts +44 -0
  27. package/dist/core/layerStyles.d.ts.map +1 -0
  28. package/dist/core/mediaUrl.d.ts +3 -0
  29. package/dist/core/mediaUrl.d.ts.map +1 -0
  30. package/dist/core/outdoorDecoration.d.ts +16 -0
  31. package/dist/core/outdoorDecoration.d.ts.map +1 -0
  32. package/dist/core/publish/index.d.ts +8 -2
  33. package/dist/core/publish/index.d.ts.map +1 -1
  34. package/dist/core/routing/graph-tools.d.ts +28 -2
  35. package/dist/core/routing/graph-tools.d.ts.map +1 -1
  36. package/dist/core/routing/pathfinding.d.ts.map +1 -1
  37. package/dist/core/stacking.d.ts +61 -0
  38. package/dist/core/stacking.d.ts.map +1 -0
  39. package/dist/core/types.d.ts +31 -0
  40. package/dist/core/types.d.ts.map +1 -1
  41. package/dist/editor/MapEditor.d.ts +28 -16
  42. package/dist/editor/MapEditor.d.ts.map +1 -1
  43. package/dist/editor/canvas/EditorCanvas.d.ts +56 -6
  44. package/dist/editor/canvas/EditorCanvas.d.ts.map +1 -1
  45. package/dist/editor/canvas/OutdoorSvgUnderlay.d.ts +7 -0
  46. package/dist/editor/canvas/OutdoorSvgUnderlay.d.ts.map +1 -0
  47. package/dist/editor/canvas/coords.d.ts +51 -0
  48. package/dist/editor/canvas/coords.d.ts.map +1 -0
  49. package/dist/editor/canvas/editorFill.d.ts +10 -0
  50. package/dist/editor/canvas/editorFill.d.ts.map +1 -0
  51. package/dist/editor/canvas/editorHover.d.ts +14 -0
  52. package/dist/editor/canvas/editorHover.d.ts.map +1 -0
  53. package/dist/editor/canvas/underlayHint.d.ts +5 -0
  54. package/dist/editor/canvas/underlayHint.d.ts.map +1 -0
  55. package/dist/editor/connectorAssignments.d.ts +64 -0
  56. package/dist/editor/connectorAssignments.d.ts.map +1 -0
  57. package/dist/editor/draftOps.d.ts +22 -0
  58. package/dist/editor/draftOps.d.ts.map +1 -0
  59. package/dist/editor/editorSectionReturn.d.ts +12 -0
  60. package/dist/editor/editorSectionReturn.d.ts.map +1 -0
  61. package/dist/editor/floorsListReturn.d.ts +5 -0
  62. package/dist/editor/floorsListReturn.d.ts.map +1 -0
  63. package/dist/editor/geometryEdit.d.ts +54 -0
  64. package/dist/editor/geometryEdit.d.ts.map +1 -0
  65. package/dist/editor/hexColor.d.ts +4 -0
  66. package/dist/editor/hexColor.d.ts.map +1 -0
  67. package/dist/editor/history.d.ts +31 -0
  68. package/dist/editor/history.d.ts.map +1 -0
  69. package/dist/editor/index.css +1497 -143
  70. package/dist/editor/index.d.ts +9 -3
  71. package/dist/editor/index.d.ts.map +1 -1
  72. package/dist/editor/index.js +6377 -601
  73. package/dist/editor/index.js.map +1 -1
  74. package/dist/editor/labelText.d.ts +15 -0
  75. package/dist/editor/labelText.d.ts.map +1 -0
  76. package/dist/editor/labels.d.ts +5 -0
  77. package/dist/editor/labels.d.ts.map +1 -0
  78. package/dist/editor/panels/ConnectorAssign.d.ts +12 -0
  79. package/dist/editor/panels/ConnectorAssign.d.ts.map +1 -0
  80. package/dist/editor/panels/FloorsPanel.d.ts +64 -0
  81. package/dist/editor/panels/FloorsPanel.d.ts.map +1 -0
  82. package/dist/editor/panels/ImportReviewPanel.d.ts +22 -0
  83. package/dist/editor/panels/ImportReviewPanel.d.ts.map +1 -0
  84. package/dist/editor/panels/Inspector.d.ts +6 -3
  85. package/dist/editor/panels/Inspector.d.ts.map +1 -1
  86. package/dist/editor/panels/LeftRail.d.ts +26 -11
  87. package/dist/editor/panels/LeftRail.d.ts.map +1 -1
  88. package/dist/editor/panels/PreviewOverlay.d.ts +11 -2
  89. package/dist/editor/panels/PreviewOverlay.d.ts.map +1 -1
  90. package/dist/editor/pathRings.d.ts +79 -0
  91. package/dist/editor/pathRings.d.ts.map +1 -0
  92. package/dist/editor/portalSurface.d.ts +37 -0
  93. package/dist/editor/portalSurface.d.ts.map +1 -0
  94. package/dist/editor/previewDocument.d.ts +9 -0
  95. package/dist/editor/previewDocument.d.ts.map +1 -0
  96. package/dist/editor/railAssignments.d.ts +22 -0
  97. package/dist/editor/railAssignments.d.ts.map +1 -0
  98. package/dist/editor/routeStubs.d.ts +103 -0
  99. package/dist/editor/routeStubs.d.ts.map +1 -0
  100. package/dist/editor/snapPoint.d.ts +5 -0
  101. package/dist/editor/snapPoint.d.ts.map +1 -0
  102. package/dist/editor/splitJoin.d.ts +78 -0
  103. package/dist/editor/splitJoin.d.ts.map +1 -0
  104. package/dist/editor/tools.d.ts +49 -0
  105. package/dist/editor/tools.d.ts.map +1 -0
  106. package/dist/test-maps/shops-at-south-town/BASE - Shops At South Town.ai +26703 -28
  107. package/dist/test-maps/shops-at-south-town/LF - Shops At South Town.ai +4459 -0
  108. package/dist/test-maps/shops-at-south-town/SVG/BASE - Shops At South Town.svg +567 -0
  109. package/dist/test-maps/shops-at-south-town/SVG/LF - Shops At South Town.svg +238 -0
  110. package/dist/test-maps/shops-at-south-town/SVG/UF - Shops At South Town.svg +276 -0
  111. package/dist/test-maps/shops-at-south-town/UF - Shops At South Town.ai +4131 -1
  112. package/dist/ui/ModernSelect.d.ts +14 -0
  113. package/dist/ui/ModernSelect.d.ts.map +1 -0
  114. package/dist/ui/selectSearch.d.ts +9 -0
  115. package/dist/ui/selectSearch.d.ts.map +1 -0
  116. package/dist/viewer/MapViewer.d.ts +14 -3
  117. package/dist/viewer/MapViewer.d.ts.map +1 -1
  118. package/dist/viewer/camera.d.ts +37 -0
  119. package/dist/viewer/camera.d.ts.map +1 -0
  120. package/dist/viewer/components/CameraRig.d.ts +18 -0
  121. package/dist/viewer/components/CameraRig.d.ts.map +1 -0
  122. package/dist/viewer/components/LevelMeshes.d.ts +6 -1
  123. package/dist/viewer/components/LevelMeshes.d.ts.map +1 -1
  124. package/dist/viewer/components/MapScene.d.ts +6 -1
  125. package/dist/viewer/components/MapScene.d.ts.map +1 -1
  126. package/dist/viewer/components/SvgVectorLayer.d.ts +18 -0
  127. package/dist/viewer/components/SvgVectorLayer.d.ts.map +1 -0
  128. package/dist/viewer/index.css +236 -37
  129. package/dist/viewer/index.d.ts +4 -0
  130. package/dist/viewer/index.d.ts.map +1 -1
  131. package/dist/viewer/index.js +9 -4
  132. package/dist/viewer/index.js.map +1 -1
  133. package/dist/viewer/ui/MapControls.d.ts +22 -0
  134. package/dist/viewer/ui/MapControls.d.ts.map +1 -0
  135. package/dist/viewer/ui/RuntimeChrome.d.ts +3 -3
  136. package/dist/viewer/ui/RuntimeChrome.d.ts.map +1 -1
  137. package/package.json +7 -3
  138. package/dist/chunks/pathfinding.js +0 -343
  139. package/dist/chunks/pathfinding.js.map +0 -1
@@ -0,0 +1,14 @@
1
+ import { default as React } from 'react';
2
+ import { ModernSelectOption } from './selectSearch';
3
+ export type { ModernSelectOption } from './selectSearch';
4
+ export { filterModernSelectOptions } from './selectSearch';
5
+ export declare function ModernSelect({ value, options, onChange, disabled, placeholder, searchable, ariaLabel, }: {
6
+ value: string;
7
+ options: ModernSelectOption[];
8
+ onChange: (value: string) => void;
9
+ disabled?: boolean;
10
+ placeholder?: string;
11
+ searchable?: boolean;
12
+ ariaLabel?: string;
13
+ }): React.JSX.Element;
14
+ //# sourceMappingURL=ModernSelect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModernSelect.d.ts","sourceRoot":"","sources":["../../src/ui/ModernSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAEjF,OAAO,qBAAqB,CAAC;AAC7B,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,OAAO,EACP,QAAQ,EACR,QAAgB,EAChB,WAAuB,EACvB,UAAU,EACV,SAAS,GACV,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,qBA4KA"}
@@ -0,0 +1,9 @@
1
+ export interface ModernSelectOption {
2
+ value: string;
3
+ label: string;
4
+ }
5
+ /** Show a search field once a list is long enough to scan by eye. */
6
+ export declare const MODERN_SELECT_SEARCH_AFTER = 8;
7
+ export declare function filterModernSelectOptions(options: ModernSelectOption[], query: string): ModernSelectOption[];
8
+ export declare function modernSelectIsSearchable(optionCount: number, searchable?: boolean): boolean;
9
+ //# sourceMappingURL=selectSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectSearch.d.ts","sourceRoot":"","sources":["../../src/ui/selectSearch.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qEAAqE;AACrE,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,kBAAkB,EAAE,EAC7B,KAAK,EAAE,MAAM,GACZ,kBAAkB,EAAE,CAItB;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,OAAO,GACnB,OAAO,CAET"}
@@ -1,18 +1,29 @@
1
1
  import { default as React } from 'react';
2
- import { PublishedDocument, ThemeDefaults } from '../core';
2
+ import { MapViewerHost, PublishedDocument, ThemeDefaults } from '../core';
3
3
  export interface MapViewerProps {
4
4
  /** Published (or draft) document. If omitted, fetched from webApiURI. */
5
5
  document?: PublishedDocument | null;
6
6
  webApiURI?: string;
7
7
  /** Prefer fetching /v1/map/document */
8
8
  centerId?: number;
9
- role?: 'WP_SITE' | 'DISPLAY_APP' | 'PORTAL_PREVIEW' | 'DEMO';
9
+ /** Public / preview / kiosk surface. Never includes Map options (editor rail). */
10
+ host?: MapViewerHost;
10
11
  kioskId?: number | null;
11
12
  selectedRetailerId?: number | null;
12
- imageProxyUrl?: string;
13
+ /**
14
+ * Media proxy base, appended with the encoded SVG URL (v1 `IMAGE_PROXY_URL`
15
+ * contract, e.g. `/eyeon-portal/media?url=`). Needed wherever the outdoor
16
+ * SVG origin sends no CORS headers.
17
+ */
18
+ imageProxyUrl?: string | null;
13
19
  themeOverrides?: Partial<ThemeDefaults>;
14
20
  onExtractedAmenities?: (codes: string[]) => void;
15
21
  onSelectShape?: (shapeId: number) => void;
22
+ /** Controlled floor when embedded (e.g. PORTAL default). */
23
+ activeLevelId?: number | null;
24
+ onActiveLevelChange?: (levelId: number) => void;
25
+ /** Click a store/amenity to route. Off when PORTAL is assigning. Default true. */
26
+ routeOnSelect?: boolean;
16
27
  createRouteRef?: React.MutableRefObject<{
17
28
  createRouteToStore: (retailerId: number) => void;
18
29
  createRouteToAmenity: (amenityCode: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"MapViewer.d.ts","sourceRoot":"","sources":["../../src/viewer/MapViewer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AACtE,OAAO,KAAK,EAGV,iBAAiB,EACjB,aAAa,EACd,MAAM,SAAS,CAAC;AAIjB,OAAO,cAAc,CAAC;AAEtB,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,SAAS,GAAG,aAAa,GAAG,gBAAgB,GAAG,MAAM,CAAC;IAC7D,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACjD,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,cAAc,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC;QACtC,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;QACjD,oBAAoB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;QACpD,UAAU,EAAE,MAAM,IAAI,CAAC;KACxB,GAAG,IAAI,CAAC,CAAC;IACV,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAWD,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,qBAuO9C;AAED,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"MapViewer.d.ts","sourceRoot":"","sources":["../../src/viewer/MapViewer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyD,MAAM,OAAO,CAAC;AAC9E,OAAO,KAAK,EAEV,aAAa,EAEb,iBAAiB,EACjB,aAAa,EACd,MAAM,SAAS,CAAC;AAajB,OAAO,cAAc,CAAC;AAEtB,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACjD,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,kFAAkF;IAClF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC;QACtC,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;QACjD,oBAAoB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;QACpD,UAAU,EAAE,MAAM,IAAI,CAAC;KACxB,GAAG,IAAI,CAAC,CAAC;IACV,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAqBD,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,qBAqR9C;AAED,eAAe,SAAS,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { SceneBounds, Vec2 } from '../core';
2
+ /**
3
+ * Stored geometry is raw SVG user space, where Y grows downward. The scene
4
+ * mirrors Y once so the camera can keep a conventional `up = [0, 1, 0]`.
5
+ *
6
+ * Do not "fix" orientation by setting `up = [0, -1, 0]` instead: three.js
7
+ * derives the camera's right axis from `up × forward`, so a negative up also
8
+ * mirrors X and the map renders rotated 180° rather than flipped.
9
+ */
10
+ export declare const SCENE_FLIP_SCALE: [number, number, number];
11
+ /** Stored SVG-space point → view space, matching `SCENE_FLIP_SCALE`. */
12
+ export declare function dataToViewPoint(point: Vec2): Vec2;
13
+ /** Stored SVG-space bounds → view space, for camera and controls placement. */
14
+ export declare function viewBoundsFromData(bounds: SceneBounds): SceneBounds;
15
+ /**
16
+ * Fit an orthographic camera so the map fills the canvas on the limiting
17
+ * axis (width or height) with no extra inset.
18
+ */
19
+ export declare function fitOrthoZoom(viewWidth: number, viewHeight: number, worldWidth: number, worldHeight: number): number;
20
+ export declare function boundsExtent(bounds: SceneBounds): {
21
+ width: number;
22
+ height: number;
23
+ };
24
+ export declare const VIEWER_ZOOM_ANIM_MS = 240;
25
+ export declare function easeOutCubic(t: number): number;
26
+ export declare function lerp(a: number, b: number, t: number): number;
27
+ export declare function nextOrthoZoom(current: number, direction: 1 | -1, step: number, min: number, max: number): number;
28
+ export declare function orbitMouseButtons(is3d: boolean): {
29
+ LEFT: number;
30
+ MIDDLE: number;
31
+ RIGHT: number;
32
+ };
33
+ export declare function orbitTouches(is3d: boolean): {
34
+ ONE: number;
35
+ TWO: number;
36
+ };
37
+ //# sourceMappingURL=camera.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../../src/viewer/camera.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAEjD;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAc,CAAC;AAErE,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAEjD;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAOnE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,MAAM,CAIR;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAKnF;AAED,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,EACjB,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,MAAM,CAIR;AAUD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAKA;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAKxE"}
@@ -0,0 +1,18 @@
1
+ import { default as React } from 'react';
2
+ import { OrbitControls } from 'three-stdlib';
3
+ import { SceneBounds, ThemeDefaults } from '../../core';
4
+ export interface MapCameraHandle {
5
+ zoomIn: () => void;
6
+ zoomOut: () => void;
7
+ reset: () => void;
8
+ }
9
+ export interface CameraRigProps {
10
+ /** View-space bounds — already Y-flipped by the scene, so up is +Y. */
11
+ bounds: SceneBounds;
12
+ theme: ThemeDefaults;
13
+ is3d: boolean;
14
+ controlsRef: React.RefObject<OrbitControls | null>;
15
+ cameraRef?: React.Ref<MapCameraHandle | null>;
16
+ }
17
+ export declare function CameraRig({ bounds, theme, is3d, controlsRef, cameraRef, }: CameraRigProps): null;
18
+ //# sourceMappingURL=CameraRig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CameraRig.d.ts","sourceRoot":"","sources":["../../../src/viewer/components/CameraRig.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8D,MAAM,OAAO,CAAC;AAEnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAU7D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACnD,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;CAC/C;AAED,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,KAAK,EACL,IAAI,EACJ,WAAW,EACX,SAAS,GACV,EAAE,cAAc,QAsIhB"}
@@ -6,6 +6,11 @@ export interface LevelMeshesProps {
6
6
  is3d: boolean;
7
7
  selectedRetailerId?: number | null;
8
8
  onSelectShape?: (shapeId: number) => void;
9
+ /**
10
+ * When true (outdoor with live SVG), only interactive shapes are drawn —
11
+ * decoration comes from SvgVectorLayer.
12
+ */
13
+ interactiveOnly?: boolean;
9
14
  }
10
- export declare function LevelMeshes({ level, theme, is3d, selectedRetailerId, onSelectShape, }: LevelMeshesProps): React.JSX.Element;
15
+ export declare function LevelMeshes({ level, theme, is3d, selectedRetailerId, onSelectShape, interactiveOnly, }: LevelMeshesProps): React.JSX.Element;
11
16
  //# sourceMappingURL=LevelMeshes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LevelMeshes.d.ts","sourceRoot":"","sources":["../../../src/viewer/components/LevelMeshes.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAa,MAAM,YAAY,CAAC;AAsC3E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,IAAI,EACJ,kBAAkB,EAClB,aAAa,GACd,EAAE,gBAAgB,qBA2FlB"}
1
+ {"version":3,"file":"LevelMeshes.d.ts","sourceRoot":"","sources":["../../../src/viewer/components/LevelMeshes.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAa,MAAM,YAAY,CAAC;AA4C3E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,IAAI,EACJ,kBAAkB,EAClB,aAAa,EACb,eAAuB,GACxB,EAAE,gBAAgB,qBAgIlB"}
@@ -1,12 +1,17 @@
1
1
  import { default as React } from 'react';
2
2
  import { PathResult, PublishedDocument, ThemeDefaults } from '../../core';
3
+ import { MapCameraHandle } from './CameraRig';
3
4
  export interface MapSceneProps {
4
5
  doc: PublishedDocument;
5
6
  theme: ThemeDefaults;
6
7
  activeLevelId: number | null;
7
8
  route: PathResult | null;
8
9
  selectedRetailerId?: number | null;
10
+ cameraRef?: React.Ref<MapCameraHandle | null>;
9
11
  onSelectShape?: (shapeId: number, levelId: number) => void;
12
+ imageProxyUrl?: string | null;
13
+ /** Keep pointer events inside the map canvas host so header/footer stay clickable. */
14
+ eventSource?: React.RefObject<HTMLElement | null>;
10
15
  }
11
- export declare function MapScene({ doc, theme, activeLevelId, route, selectedRetailerId, onSelectShape, }: MapSceneProps): React.JSX.Element;
16
+ export declare function MapScene({ doc, theme, activeLevelId, route, selectedRetailerId, cameraRef, onSelectShape, imageProxyUrl, eventSource, }: MapSceneProps): React.JSX.Element;
12
17
  //# sourceMappingURL=MapScene.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MapScene.d.ts","sourceRoot":"","sources":["../../../src/viewer/components/MapScene.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI/E,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,iBAAiB,CAAC;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5D;AAED,wBAAgB,QAAQ,CAAC,EACvB,GAAG,EACH,KAAK,EACL,aAAa,EACb,KAAK,EACL,kBAAkB,EAClB,aAAa,GACd,EAAE,aAAa,qBAkFf"}
1
+ {"version":3,"file":"MapScene.d.ts","sourceRoot":"","sources":["../../../src/viewer/components/MapScene.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAI/C,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAU/E,OAAO,EAAa,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAa9D,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,iBAAiB,CAAC;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAC9C,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,sFAAsF;IACtF,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CACnD;AAED,wBAAgB,QAAQ,CAAC,EACvB,GAAG,EACH,KAAK,EACL,aAAa,EACb,KAAK,EACL,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,aAAa,EACb,WAAW,GACZ,EAAE,aAAa,qBAoKf"}
@@ -0,0 +1,18 @@
1
+ import { default as React } from 'react';
2
+ import { resolveFetchUrl } from '../../core';
3
+ export { resolveFetchUrl };
4
+ export interface SvgVectorLayerProps {
5
+ url: string;
6
+ /** sourceSvgId values held in cm_shapes — skip drawing these (DB owns them). */
7
+ suppressIds?: ReadonlySet<string>;
8
+ imageProxyUrl?: string | null;
9
+ is3d?: boolean;
10
+ }
11
+ /**
12
+ * Live outdoor SVG as real vector geometry (not a raster texture).
13
+ * Applies house-style colors for reserved layer names; otherwise keeps
14
+ * Illustrator fills. Skips route-path* and interactive ids owned by the DB.
15
+ * Coordinates stay in SVG user space — `MapScene` flips the whole scene.
16
+ */
17
+ export declare function SvgVectorLayer({ url, suppressIds, imageProxyUrl, is3d, }: SvgVectorLayerProps): React.JSX.Element | null;
18
+ //# sourceMappingURL=SvgVectorLayer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SvgVectorLayer.d.ts","sourceRoot":"","sources":["../../../src/viewer/components/SvgVectorLayer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAG5D,OAAO,EAML,eAAe,EAEhB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,CAAC;AA4B3B,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,gFAAgF;IAChF,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAWD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAC7B,GAAG,EACH,WAAW,EACX,aAAa,EACb,IAAY,GACb,EAAE,mBAAmB,4BAqHrB"}
@@ -4,15 +4,28 @@
4
4
  height: 100%;
5
5
  min-height: 320px;
6
6
  overflow: hidden;
7
- background: var(--map-bg, #f5f5f5);
8
- font-family: system-ui, -apple-system, sans-serif;
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);
9
10
  font-size: 13px;
10
11
  color: #0f172a;
11
12
  }
12
13
 
14
+ .eyeon-map-viewer button,
15
+ .eyeon-map-viewer input,
16
+ .eyeon-map-viewer select,
17
+ .eyeon-map-viewer textarea {
18
+ font-family: inherit;
19
+ }
20
+
13
21
  .eyeon-map-viewer__canvas {
14
22
  position: absolute;
15
23
  inset: 0;
24
+ cursor: grab;
25
+ }
26
+
27
+ .eyeon-map-viewer__canvas:active {
28
+ cursor: grabbing;
16
29
  }
17
30
 
18
31
  .eyeon-map-viewer__loading,
@@ -29,7 +42,7 @@
29
42
  z-index: 2;
30
43
  top: 12px;
31
44
  left: 12px;
32
- width: min(320px, calc(100% - 24px));
45
+ width: min(320px, calc(100% - 124px));
33
46
  display: flex;
34
47
  flex-direction: column;
35
48
  gap: 8px;
@@ -46,16 +59,20 @@
46
59
  gap: 8px;
47
60
  }
48
61
 
49
- .eyeon-map-chrome__search-toggle {
50
- align-self: flex-start;
51
- border: 0;
62
+ .eyeon-map-chrome__search-input {
63
+ width: 100%;
64
+ box-sizing: border-box;
65
+ border: 1px solid #e2e8f0;
52
66
  border-radius: 8px;
53
67
  background: #fff;
54
68
  box-shadow: 0 1px 4px rgba(15, 23, 42, 0.12);
55
- padding: 8px 12px;
56
- font-size: 12px;
57
- font-weight: 600;
58
- cursor: pointer;
69
+ padding: 10px 12px;
70
+ font-size: 13px;
71
+ outline: none;
72
+ }
73
+
74
+ .eyeon-map-chrome__search-input:focus {
75
+ border-color: #0763b1;
59
76
  }
60
77
 
61
78
  .eyeon-map-chrome__amenities {
@@ -69,6 +86,7 @@
69
86
  }
70
87
 
71
88
  .eyeon-map-chrome__amenity {
89
+ position: relative;
72
90
  width: 40px;
73
91
  height: 40px;
74
92
  border: 0;
@@ -103,13 +121,10 @@
103
121
  }
104
122
  }
105
123
 
106
- .eyeon-map-chrome__search-input {
107
- width: 100%;
108
- border: 1px solid #e2e8f0;
109
- border-radius: 8px;
110
- padding: 8px 10px;
111
- font-size: 13px;
112
- margin-bottom: 8px;
124
+ .eyeon-map-chrome__empty {
125
+ color: #64748b;
126
+ font-size: 12px;
127
+ padding: 8px 4px;
113
128
  }
114
129
 
115
130
  .eyeon-map-chrome__group-title {
@@ -133,7 +148,8 @@
133
148
  font-size: 13px;
134
149
  }
135
150
 
136
- .eyeon-map-chrome__item:hover {
151
+ .eyeon-map-chrome__item:hover,
152
+ .eyeon-map-chrome__item.is-selected {
137
153
  background: #f1f5f9;
138
154
  }
139
155
 
@@ -168,11 +184,8 @@
168
184
  color: #475569;
169
185
  }
170
186
 
171
- .eyeon-map-chrome__route select {
172
- font-size: 12px;
173
- padding: 6px;
174
- border-radius: 6px;
175
- border: 1px solid #e2e8f0;
187
+ .eyeon-map-chrome__route .eyeon-map-select {
188
+ width: 100%;
176
189
  }
177
190
 
178
191
  .eyeon-map-chrome__accessible {
@@ -182,29 +195,215 @@
182
195
  font-weight: 500 !important;
183
196
  }
184
197
 
185
- .eyeon-map-chrome__floors {
198
+ .eyeon-map-controls {
186
199
  position: absolute;
187
- right: 12px;
188
- bottom: 12px;
189
- left: auto;
190
- top: auto;
200
+ inset: 0;
201
+ z-index: 3;
202
+ pointer-events: none;
203
+ }
204
+
205
+ .eyeon-map-controls__stack {
206
+ pointer-events: auto;
207
+ position: absolute;
208
+ top: 10px;
209
+ right: 10px;
191
210
  display: flex;
192
- gap: 6px;
193
- width: auto;
211
+ flex-direction: column;
212
+ gap: 8px;
213
+ width: 94px;
214
+ }
215
+
216
+ .eyeon-map-controls__floors {
217
+ display: flex;
218
+ flex-direction: column;
194
219
  }
195
220
 
196
- .eyeon-map-chrome__floor {
221
+ .eyeon-map-controls__floor,
222
+ .eyeon-map-controls__reset,
223
+ .eyeon-map-controls__zoom-btn {
224
+ color: #fff;
225
+ background-color: #0763b1;
197
226
  border: 0;
227
+ font-size: 11px;
228
+ font-weight: 500;
229
+ letter-spacing: 0.02em;
230
+ cursor: pointer;
231
+ transition: background-color 200ms;
232
+ }
233
+
234
+ .eyeon-map-controls__floor,
235
+ .eyeon-map-controls__reset {
236
+ width: 100%;
237
+ min-height: 27px;
238
+ padding: 6px 10px;
239
+ text-align: center;
240
+ }
241
+
242
+ .eyeon-map-controls__floor:hover,
243
+ .eyeon-map-controls__reset:hover,
244
+ .eyeon-map-controls__zoom-btn:hover {
245
+ background-color: #054983;
246
+ }
247
+
248
+ .eyeon-map-controls__floor.is-active {
249
+ background-color: #054983;
250
+ cursor: default;
251
+ }
252
+
253
+ .eyeon-map-controls__floor:first-child {
254
+ border-radius: 5px 5px 0 0;
255
+ }
256
+
257
+ .eyeon-map-controls__floor:last-child {
258
+ border-radius: 0 0 5px 5px;
259
+ }
260
+
261
+ .eyeon-map-controls__floor:only-child {
262
+ border-radius: 5px;
263
+ }
264
+
265
+ .eyeon-map-controls__floor:not(:first-child):not(:last-child) {
266
+ border-radius: 0;
267
+ }
268
+
269
+ .eyeon-map-controls__reset {
270
+ border-radius: 5px;
271
+ text-transform: uppercase;
272
+ letter-spacing: 0.05em;
273
+ }
274
+
275
+ .eyeon-map-controls__zoom {
276
+ display: flex;
277
+ }
278
+
279
+ .eyeon-map-controls__zoom-btn {
280
+ flex: 1;
281
+ height: 27px;
282
+ display: flex;
283
+ align-items: center;
284
+ justify-content: center;
285
+ font-size: 14px;
286
+ font-weight: 400;
287
+ padding: 0;
288
+ }
289
+
290
+ .eyeon-map-controls__zoom-btn:first-child {
291
+ border-radius: 5px 0 0 5px;
292
+ }
293
+
294
+ .eyeon-map-controls__zoom-btn:last-child {
295
+ border-radius: 0 5px 5px 0;
296
+ }
297
+
298
+ .eyeon-map-select {
299
+ position: relative;
300
+ width: 100%;
301
+ min-width: 0;
302
+ }
303
+
304
+ .eyeon-map-select__trigger {
305
+ display: flex;
306
+ align-items: center;
307
+ justify-content: space-between;
308
+ gap: 8px;
309
+ width: 100%;
310
+ min-height: 32px;
311
+ padding: 6px 8px;
312
+ border: 1px solid #e2e8f0;
313
+ border-radius: 6px;
314
+ background: #fff;
315
+ color: #0f172a;
316
+ font: inherit;
317
+ font-size: 12px;
318
+ font-weight: 500;
319
+ text-align: left;
320
+ cursor: pointer;
321
+ }
322
+
323
+ .eyeon-map-select__trigger:disabled {
324
+ opacity: 0.55;
325
+ cursor: not-allowed;
326
+ }
327
+
328
+ .eyeon-map-select__trigger:not(:disabled):hover {
329
+ border-color: #cbd5e1;
330
+ }
331
+
332
+ .eyeon-map-select__trigger span {
333
+ overflow: hidden;
334
+ text-overflow: ellipsis;
335
+ white-space: nowrap;
336
+ }
337
+
338
+ .eyeon-map-select__placeholder {
339
+ color: #94a3b8;
340
+ font-weight: 400;
341
+ }
342
+
343
+ .eyeon-map-select__chevron {
344
+ flex-shrink: 0;
345
+ color: #64748b;
346
+ opacity: 0.7;
347
+ }
348
+
349
+ .eyeon-map-select__trigger[aria-expanded='true'] .eyeon-map-select__chevron {
350
+ transform: rotate(180deg);
351
+ }
352
+
353
+ .eyeon-map-select__menu {
354
+ position: fixed;
355
+ z-index: 2147483000;
356
+ display: flex;
357
+ flex-direction: column;
358
+ overflow: hidden;
359
+ border: 1px solid #e2e8f0;
198
360
  border-radius: 8px;
199
361
  background: #fff;
200
- box-shadow: 0 1px 4px rgba(15, 23, 42, 0.12);
201
- padding: 8px 10px;
362
+ box-shadow: 0 10px 28px rgba(15, 23, 42, 0.14);
363
+ }
364
+
365
+ .eyeon-map-select__search {
366
+ flex-shrink: 0;
367
+ margin: 6px 6px 0;
368
+ padding: 6px 8px;
369
+ border: 1px solid #e2e8f0;
370
+ border-radius: 6px;
371
+ font: inherit;
202
372
  font-size: 12px;
203
- font-weight: 600;
373
+ }
374
+
375
+ .eyeon-map-select__list {
376
+ margin: 0;
377
+ padding: 4px;
378
+ overflow: auto;
379
+ list-style: none;
380
+ }
381
+
382
+ .eyeon-map-select__option {
383
+ display: block;
384
+ width: 100%;
385
+ padding: 7px 10px;
386
+ border: 0;
387
+ border-radius: 6px;
388
+ background: transparent;
389
+ color: #0f172a;
390
+ font: inherit;
391
+ font-size: 12px;
392
+ text-align: left;
204
393
  cursor: pointer;
205
394
  }
206
395
 
207
- .eyeon-map-chrome__floor.is-active {
208
- background: var(--map-accent, #2563eb);
209
- color: #fff;
396
+ .eyeon-map-select__option:hover {
397
+ background: #f1f5f9;
398
+ }
399
+
400
+ .eyeon-map-select__option.is-active {
401
+ background: #e0f2fe;
402
+ font-weight: 600;
403
+ }
404
+
405
+ .eyeon-map-select__empty {
406
+ padding: 8px 10px;
407
+ color: #94a3b8;
408
+ font-size: 12px;
210
409
  }
@@ -1,4 +1,8 @@
1
1
  export { MapViewer, type MapViewerProps } from './MapViewer';
2
+ export type { MapViewerHost, MapHost, ViewerChrome } from '../core';
3
+ export { mapSurface, viewerChrome, isMapViewerHost } from '../core';
2
4
  export { MapScene } from './components/MapScene';
3
5
  export { RuntimeChrome } from './ui/RuntimeChrome';
6
+ export { MapControls, type MapControlsProps, type MapControlLevel } from './ui/MapControls';
7
+ export type { MapCameraHandle } from './components/CameraRig';
4
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/viewer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/viewer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC5F,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,cAAc,CAAC"}
@@ -1,7 +1,12 @@
1
- import { M as r, a as m, R as o } from "../chunks/MapViewer.js";
1
+ import { M as r, a as s, b as o, R as p } from "../chunks/MapViewer.js";
2
+ import { O as i, V as t, al as M } from "../chunks/stacking.js";
2
3
  export {
3
- r as MapScene,
4
- m as MapViewer,
5
- o as RuntimeChrome
4
+ r as MapControls,
5
+ s as MapScene,
6
+ o as MapViewer,
7
+ p as RuntimeChrome,
8
+ i as isMapViewerHost,
9
+ t as mapSurface,
10
+ M as viewerChrome
6
11
  };
7
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -0,0 +1,22 @@
1
+ import { default as React } from 'react';
2
+ import { StackLevel } from '../../core';
3
+ export interface MapControlLevel {
4
+ id: number;
5
+ name: string;
6
+ }
7
+ export interface MapControlsProps {
8
+ levels: Array<MapControlLevel & Partial<StackLevel>>;
9
+ activeLevelId: number | null;
10
+ onActiveLevelChange: (id: number) => void;
11
+ onZoomIn: () => void;
12
+ onZoomOut: () => void;
13
+ onReset: () => void;
14
+ showFloors?: boolean;
15
+ showZoomReset?: boolean;
16
+ /** Override the viewer building-floor list (e.g. Edit Map + Outdoor). */
17
+ floorOptions?: MapControlLevel[];
18
+ /** Show the floor list even when there is only one floor. */
19
+ alwaysShowFloors?: boolean;
20
+ }
21
+ export declare function MapControls({ levels, activeLevelId, onActiveLevelChange, onZoomIn, onZoomOut, onReset, showFloors, showZoomReset, floorOptions, alwaysShowFloors, }: MapControlsProps): React.JSX.Element | null;
22
+ //# sourceMappingURL=MapControls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapControls.d.ts","sourceRoot":"","sources":["../../../src/viewer/ui/MapControls.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,KAAK,CAAC,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;IACrD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,yEAAyE;IACzE,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;IACjC,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,aAAa,EACb,mBAAmB,EACnB,QAAQ,EACR,SAAS,EACT,OAAO,EACP,UAAiB,EACjB,aAAoB,EACpB,YAAY,EACZ,gBAAwB,GACzB,EAAE,gBAAgB,4BAoElB"}
@@ -3,8 +3,6 @@ import { CmAmenityCatalogItem, PathResult, PublishedDocument } from '../../core'
3
3
  export interface RuntimeChromeProps {
4
4
  doc: PublishedDocument;
5
5
  amenities: CmAmenityCatalogItem[];
6
- searchOpen: boolean;
7
- onSearchOpenChange: (open: boolean) => void;
8
6
  activeLevelId: number | null;
9
7
  onActiveLevelChange: (id: number) => void;
10
8
  fromAnchorId: number | null;
@@ -14,6 +12,8 @@ export interface RuntimeChromeProps {
14
12
  accessibleOnly: boolean;
15
13
  onAccessibleOnlyChange: (v: boolean) => void;
16
14
  route: PathResult | null;
15
+ showSearch?: boolean;
16
+ showAmenities?: boolean;
17
17
  }
18
- export declare function RuntimeChrome({ doc, amenities, searchOpen, onSearchOpenChange, activeLevelId, onActiveLevelChange, fromAnchorId, toAnchorId, onFromChange, onToChange, accessibleOnly, onAccessibleOnlyChange, route, }: RuntimeChromeProps): React.JSX.Element;
18
+ export declare function RuntimeChrome({ doc, amenities, onActiveLevelChange, fromAnchorId, toAnchorId, onFromChange, onToChange, accessibleOnly, onAccessibleOnlyChange, route, showSearch, showAmenities, }: RuntimeChromeProps): React.JSX.Element | null;
19
19
  //# sourceMappingURL=RuntimeChrome.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RuntimeChrome.d.ts","sourceRoot":"","sources":["../../../src/viewer/ui/RuntimeChrome.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,EACV,oBAAoB,EACpB,UAAU,EACV,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,iBAAiB,CAAC;IACvB,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1C,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACxC,cAAc,EAAE,OAAO,CAAC;IACxB,sBAAsB,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;CAC1B;AAWD,wBAAgB,aAAa,CAAC,EAC5B,GAAG,EACH,SAAS,EACT,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,sBAAsB,EACtB,KAAK,GACN,EAAE,kBAAkB,qBAgNpB"}
1
+ {"version":3,"file":"RuntimeChrome.d.ts","sourceRoot":"","sources":["../../../src/viewer/ui/RuntimeChrome.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,EACV,oBAAoB,EACpB,UAAU,EACV,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,iBAAiB,CAAC;IACvB,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1C,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACxC,cAAc,EAAE,OAAO,CAAC;IACxB,sBAAsB,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAyBD,wBAAgB,aAAa,CAAC,EAC5B,GAAG,EACH,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,UAAU,EACV,cAAc,EACd,sBAAsB,EACtB,KAAK,EACL,UAAiB,EACjB,aAAoB,GACrB,EAAE,kBAAkB,4BAmMpB"}