@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
@@ -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,KAAmE,MAAM,OAAO,CAAC;AAExF,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;AAuB3D,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,qBAuSA"}
@@ -0,0 +1,12 @@
1
+ export interface ModernSelectOption {
2
+ value: string;
3
+ label: string;
4
+ hint?: string;
5
+ iconUrl?: string;
6
+ iconMuted?: boolean;
7
+ }
8
+ /** Show a search field once a list is long enough to scan by eye. */
9
+ export declare const MODERN_SELECT_SEARCH_AFTER = 8;
10
+ export declare function filterModernSelectOptions(options: ModernSelectOption[], query: string): ModernSelectOption[];
11
+ export declare function modernSelectIsSearchable(optionCount: number, searchable?: boolean): boolean;
12
+ //# 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;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qEAAqE;AACrE,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAE5C,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,kBAAkB,EAAE,EAC7B,KAAK,EAAE,MAAM,GACZ,kBAAkB,EAAE,CAOtB;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,OAAO,GACnB,OAAO,CAET"}
@@ -18,7 +18,20 @@ export interface MapViewerProps {
18
18
  imageProxyUrl?: string | null;
19
19
  themeOverrides?: Partial<ThemeDefaults>;
20
20
  onExtractedAmenities?: (codes: string[]) => void;
21
- onSelectShape?: (shapeId: number) => void;
21
+ onSelectShape?: (shapeId: number | null, opts?: {
22
+ additive?: boolean;
23
+ }) => void;
24
+ /** Zoom to this shape (PORTAL default-map assign). */
25
+ selectedShapeId?: number | null;
26
+ /** Extra selected shapes when Shift-selecting in PORTAL assign. */
27
+ selectedShapeIds?: number[];
28
+ /** Highlight from the Map options list (same fill as pointer hover). */
29
+ hoveredShapeId?: number | null;
30
+ /**
31
+ * Bump when staff pick a row in the rail so the camera re-frames even if
32
+ * the same shape is already selected.
33
+ */
34
+ focusNonce?: number;
22
35
  /** Controlled floor when embedded (e.g. PORTAL default). */
23
36
  activeLevelId?: number | null;
24
37
  onActiveLevelChange?: (levelId: number) => void;
@@ -1 +1 @@
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"}
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;AAuBjB,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,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAChF,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,wEAAwE;IACxE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,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;AAuBD,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,qBAyV9C;AAED,eAAe,SAAS,CAAC"}
@@ -1,4 +1,4 @@
1
- import { SceneBounds, Vec2 } from '../core';
1
+ import { BBox, LevelTransform, SceneBounds, Vec2 } from '../core';
2
2
  /**
3
3
  * Stored geometry is raw SVG user space, where Y grows downward. The scene
4
4
  * mirrors Y once so the camera can keep a conventional `up = [0, 1, 0]`.
@@ -21,7 +21,90 @@ export declare function boundsExtent(bounds: SceneBounds): {
21
21
  width: number;
22
22
  height: number;
23
23
  };
24
+ export declare const VIEWER_ZOOM_ANIM_MS = 240;
25
+ /**
26
+ * Selection pan/zoom. v1 used 0.2s of linear travel (`CAMERA.animSpeed`).
27
+ * Ease-in-out over 200ms bunched the motion into the last frames and looked
28
+ * like a snap; ease-out over 400ms reads as a short, smooth glide.
29
+ */
30
+ export declare const VIEWER_FOCUS_ANIM_MS = 400;
31
+ /** Extra space around a small focused shape so it does not fill the canvas. */
32
+ export declare const FOCUS_BOUNDS_PADDING = 1;
33
+ /**
34
+ * Padding for a large store (extent ≥ `FOCUS_LARGE_EXTENT`).
35
+ * 2.0 → the store occupies about a third of the frame, so neighbors stay visible.
36
+ */
37
+ export declare const FOCUS_LARGE_PADDING = 2;
38
+ /** World size at which padding reaches `FOCUS_LARGE_PADDING`. */
39
+ export declare const FOCUS_LARGE_EXTENT = 400;
40
+ /**
41
+ * Padding stays tight until this size (typical small store). Kiosks and
42
+ * amenities below this still zoom closer via `FOCUS_MIN_EXTENT`.
43
+ */
44
+ export declare const FOCUS_PAD_SMALL_EXTENT = 80;
45
+ /**
46
+ * Floor for the framed world size. Tiny amenities keep neighbors in view
47
+ * instead of filling the canvas; anything larger frames to its own bbox.
48
+ */
49
+ export declare const FOCUS_MIN_EXTENT = 52;
50
+ /**
51
+ * Click-to-focus cap vs the full-map fit. A typical store stays at a
52
+ * neighborhood view; 64× filled the canvas on the default assign map.
53
+ */
54
+ export declare const FOCUS_MAX_ZOOM_MULTIPLE = 8;
55
+ /**
56
+ * Tiny kiosks/amenities may go closer than a store so they stay readable.
57
+ * Still far below a canvas-filling close-up.
58
+ */
59
+ export declare const FOCUS_SMALL_MAX_ZOOM_MULTIPLE = 14;
60
+ /** Manual +/− ceiling, independent of selection focus. */
61
+ export declare const VIEWER_MAX_ZOOM_MULTIPLE = 16;
62
+ /** More margin as the store grows so a department store is not edge-to-edge. */
63
+ export declare function focusPaddingRatio(width: number, height: number, paddingRatio?: number, smallExtent?: number, largePadding?: number, largeExtent?: number): number;
64
+ /**
65
+ * Expand a shape's bounds for a "click to assign" camera frame.
66
+ * Small units keep a tighter frame; large stores pull the camera back.
67
+ */
68
+ export declare function paddedFocusBounds(bounds: SceneBounds, paddingRatio?: number, minExtent?: number): SceneBounds;
69
+ /**
70
+ * How far a click may zoom relative to the fitted map. Smaller padded
71
+ * frames (kiosks) get more zoom; store-sized frames stay at 8×.
72
+ */
73
+ export declare function focusMaxZoomMultiple(paddedWidth: number, paddedHeight: number, typicalMultiple?: number, smallMultiple?: number): number;
74
+ export declare function clampFocusZoom(shapeFitZoom: number, mapFitZoom: number, maxMultiple?: number): number;
75
+ type FocusLevel = {
76
+ shapes: Array<{
77
+ id: number;
78
+ bbox: BBox;
79
+ }>;
80
+ transform: LevelTransform;
81
+ };
82
+ /** Stable key so adding/removing a Shift-selected shape re-frames the camera. */
83
+ export declare function selectionFocusKey(shapeIds: number[]): string | null;
84
+ /** View-space frame for one or more published shapes. */
85
+ export declare function viewFocusBoundsForShapes(levels: FocusLevel[], shapeIds: number[]): SceneBounds | null;
86
+ /** View-space frame for a published shape, ready for `CameraRig.focusBounds`. */
87
+ export declare function viewFocusBoundsForShape(levels: FocusLevel[], shapeId: number): SceneBounds | null;
88
+ export declare function easeOutCubic(t: number): number;
89
+ /** Symmetric ease so a selection pan is visible the whole way, like v1's lerp. */
90
+ export declare function easeInOutCubic(t: number): number;
91
+ export declare function lerp(a: number, b: number, t: number): number;
92
+ export interface CameraPose {
93
+ zoom: number;
94
+ position: [number, number, number];
95
+ target: [number, number, number];
96
+ }
97
+ /** Interpolate zoom + pan/orbit for a smooth +/− / Reset / selection focus. */
98
+ export declare function interpolateCameraPose(from: CameraPose, to: CameraPose, t: number, ease?: (t: number) => number): CameraPose;
99
+ export declare function cameraPosesNear(a: CameraPose, b: CameraPose, epsilon?: number): boolean;
24
100
  export declare function nextOrthoZoom(current: number, direction: 1 | -1, step: number, min: number, max: number): number;
101
+ /**
102
+ * Wheel zoom keeps the pointer over the same map point (Google Maps-style).
103
+ * Speed is three-stdlib `pow(0.95, zoomSpeed)` per event — same helper as
104
+ * Edit Map / Wayfinding (`nextZoomFromWheel`).
105
+ * +/− still zooms about the view centre because those buttons have no cursor.
106
+ */
107
+ export declare const ORBIT_ZOOM_TO_CURSOR = true;
25
108
  export declare function orbitMouseButtons(is3d: boolean): {
26
109
  LEFT: number;
27
110
  MIDDLE: number;
@@ -31,4 +114,5 @@ export declare function orbitTouches(is3d: boolean): {
31
114
  ONE: number;
32
115
  TWO: number;
33
116
  };
117
+ export {};
34
118
  //# sourceMappingURL=camera.d.ts.map
@@ -1 +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,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"}
1
+ {"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../../src/viewer/camera.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,20 @@ export interface MapCameraHandle {
5
5
  zoomIn: () => void;
6
6
  zoomOut: () => void;
7
7
  reset: () => void;
8
+ /** View-space bounds (already Y-flipped). Animates pan + zoom onto the shape. */
9
+ focusBounds: (focus: SceneBounds) => void;
8
10
  }
11
+ /** Survives Canvas / camera remounts so Settings color tweaks keep the view. */
12
+ export interface CameraViewSnapshot {
13
+ is3d: boolean;
14
+ boundsKey: string;
15
+ zoom: number;
16
+ position: [number, number, number];
17
+ target: [number, number, number];
18
+ userAdjusted: boolean;
19
+ focusKey?: string | number | null;
20
+ }
21
+ export declare function cameraBoundsKey(bounds: SceneBounds, is3d: boolean): string;
9
22
  export interface CameraRigProps {
10
23
  /** View-space bounds — already Y-flipped by the scene, so up is +Y. */
11
24
  bounds: SceneBounds;
@@ -13,6 +26,10 @@ export interface CameraRigProps {
13
26
  is3d: boolean;
14
27
  controlsRef: React.RefObject<OrbitControls | null>;
15
28
  cameraRef?: React.Ref<MapCameraHandle | null>;
29
+ persistedViewRef: React.MutableRefObject<CameraViewSnapshot | null>;
30
+ /** Selection key; when it changes the camera eases onto `focusViewBounds`. */
31
+ focusKey?: string | number | null;
32
+ focusViewBounds?: SceneBounds | null;
16
33
  }
17
- export declare function CameraRig({ bounds, theme, is3d, controlsRef, cameraRef, }: CameraRigProps): null;
34
+ export declare function CameraRig({ bounds, theme, is3d, controlsRef, cameraRef, persistedViewRef, focusKey, focusViewBounds, }: CameraRigProps): null;
18
35
  //# sourceMappingURL=CameraRig.d.ts.map
@@ -1 +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;AAG7D,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,QAuFhB"}
1
+ {"version":3,"file":"CameraRig.d.ts","sourceRoot":"","sources":["../../../src/viewer/components/CameraRig.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+E,MAAM,OAAO,CAAC;AAEpG,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAiB7D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,iFAAiF;IACjF,WAAW,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CAC3C;AAED,gFAAgF;AAChF,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAW1E;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;IAC9C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACpE,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAClC,eAAe,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CACtC;AAED,wBAAgB,SAAS,CAAC,EACxB,MAAM,EACN,KAAK,EACL,IAAI,EACJ,WAAW,EACX,SAAS,EACT,gBAAgB,EAChB,QAAe,EACf,eAAsB,GACvB,EAAE,cAAc,QAibhB"}
@@ -1,16 +1,27 @@
1
1
  import { default as React } from 'react';
2
- import { PublishedLevel, ThemeDefaults } from '../../core';
2
+ import { CmAmenityCatalogItem, PublishedLevel, ThemeDefaults } from '../../core';
3
3
  export interface LevelMeshesProps {
4
4
  level: PublishedLevel;
5
5
  theme: ThemeDefaults;
6
6
  is3d: boolean;
7
- selectedRetailerId?: number | null;
8
- onSelectShape?: (shapeId: number) => void;
7
+ onSelectShape?: (shapeId: number | null, opts?: {
8
+ additive?: boolean;
9
+ }) => void;
10
+ /** Assign-map selection — same highlight as hover so staff can see the set. */
11
+ selectedShapeIds?: readonly number[];
12
+ /** Rail / search hover — same darker fill as pointer hover. */
13
+ hoveredShapeId?: number | null;
14
+ /** Host that owns pointer events (and therefore the CSS cursor). */
15
+ eventSource?: React.RefObject<HTMLElement | null>;
9
16
  /**
10
17
  * When true (outdoor with live SVG), only interactive shapes are drawn —
11
18
  * decoration comes from SvgVectorLayer.
12
19
  */
13
20
  interactiveOnly?: boolean;
21
+ /** Same media proxy as outdoor SVGs — retailer logos are often cross-origin. */
22
+ imageProxyUrl?: string | null;
23
+ /** Published amenity catalog — used to resolve v1 amenity icons by code. */
24
+ amenities?: CmAmenityCatalogItem[];
14
25
  }
15
- export declare function LevelMeshes({ level, theme, is3d, selectedRetailerId, onSelectShape, interactiveOnly, }: LevelMeshesProps): React.JSX.Element;
26
+ export declare function LevelMeshes({ level, theme, is3d, onSelectShape, selectedShapeIds, hoveredShapeId: hoveredShapeIdProp, eventSource, interactiveOnly, imageProxyUrl, amenities, }: LevelMeshesProps): React.JSX.Element;
16
27
  //# 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;AAuC3E,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,qBA8FlB"}
1
+ {"version":3,"file":"LevelMeshes.d.ts","sourceRoot":"","sources":["../../../src/viewer/components/LevelMeshes.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAG5D,OAAO,KAAK,EACV,oBAAoB,EACpB,cAAc,EACd,aAAa,EAEd,MAAM,YAAY,CAAC;AA+EpB,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAChF,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,oEAAoE;IACpE,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAClD;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gFAAgF;IAChF,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,4EAA4E;IAC5E,SAAS,CAAC,EAAE,oBAAoB,EAAE,CAAC;CACpC;AAgCD,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,IAAI,EACJ,aAAa,EACb,gBAAqB,EACrB,cAAc,EAAE,kBAAyB,EACzC,WAAW,EACX,eAAuB,EACvB,aAAoB,EACpB,SAAc,GACf,EAAE,gBAAgB,qBA6TlB"}
@@ -1,17 +1,23 @@
1
1
  import { default as React } from 'react';
2
- import { PathResult, PublishedDocument, ThemeDefaults } from '../../core';
2
+ import { PathResult, PublishedDocument, SceneBounds, ThemeDefaults } from '../../core';
3
3
  import { MapCameraHandle } from './CameraRig';
4
4
  export interface MapSceneProps {
5
5
  doc: PublishedDocument;
6
6
  theme: ThemeDefaults;
7
7
  activeLevelId: number | null;
8
8
  route: PathResult | null;
9
- selectedRetailerId?: number | null;
9
+ selectedShapeId?: number | null;
10
+ selectedShapeIds?: number[];
11
+ hoveredShapeId?: number | null;
12
+ focusKey?: string | number | null;
13
+ focusViewBounds?: SceneBounds | null;
10
14
  cameraRef?: React.Ref<MapCameraHandle | null>;
11
- onSelectShape?: (shapeId: number, levelId: number) => void;
15
+ onSelectShape?: (shapeId: number | null, levelId: number, opts?: {
16
+ additive?: boolean;
17
+ }) => void;
12
18
  imageProxyUrl?: string | null;
13
19
  /** Keep pointer events inside the map canvas host so header/footer stay clickable. */
14
20
  eventSource?: React.RefObject<HTMLElement | null>;
15
21
  }
16
- export declare function MapScene({ doc, theme, activeLevelId, route, selectedRetailerId, cameraRef, onSelectShape, imageProxyUrl, eventSource, }: MapSceneProps): React.JSX.Element;
22
+ export declare function MapScene({ doc, theme, activeLevelId, route, selectedShapeId, selectedShapeIds, hoveredShapeId, focusKey, focusViewBounds, cameraRef, onSelectShape, imageProxyUrl, eventSource, }: MapSceneProps): React.JSX.Element;
17
23
  //# 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,KAA0B,MAAM,OAAO,CAAC;AAI/C,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAK/E,OAAO,EAAa,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAU9D,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,qBA0If"}
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,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAW5F,OAAO,EAAsC,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAevF,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,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAClC,eAAe,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAC9C,aAAa,CAAC,EAAE,CACd,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,KAC1B,IAAI,CAAC;IACV,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,eAAe,EACf,gBAAgB,EAChB,cAAqB,EACrB,QAAQ,EACR,eAAe,EACf,SAAS,EACT,aAAa,EACb,aAAa,EACb,WAAW,GACZ,EAAE,aAAa,qBAsNf"}
@@ -0,0 +1,7 @@
1
+ import { default as React } from 'react';
2
+ import { Vec2 } from '../../core';
3
+ export declare function OpeningWells({ polygons, }: {
4
+ polygons: Vec2[][];
5
+ is3d?: boolean;
6
+ }): React.JSX.Element | null;
7
+ //# sourceMappingURL=OpeningWell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OpeningWell.d.ts","sourceRoot":"","sources":["../../../src/viewer/components/OpeningWell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAElD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AA2HvC,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,4BASA"}
@@ -1 +1 @@
1
- {"version":3,"file":"RouteLine.d.ts","sourceRoot":"","sources":["../../../src/viewer/components/RouteLine.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,aAAa,EACb,KAAK,GACN,EAAE;IACD,KAAK,EAAE,UAAU,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf,4BAgBA"}
1
+ {"version":3,"file":"RouteLine.d.ts","sourceRoot":"","sources":["../../../src/viewer/components/RouteLine.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,aAAa,EACb,KAAK,GACN,EAAE;IACD,KAAK,EAAE,UAAU,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;CACf,4BAmBA"}
@@ -1,12 +1,14 @@
1
1
  import { default as React } from 'react';
2
- /** Same contract as v1 `getMediaProxyUrl`: proxy base + encoded URL, no query key. */
3
- export declare function resolveFetchUrl(url: string, imageProxyUrl?: string | null): string;
2
+ import { resolveFetchUrl } from '../../core';
3
+ export { resolveFetchUrl };
4
4
  export interface SvgVectorLayerProps {
5
5
  url: string;
6
6
  /** sourceSvgId values held in cm_shapes — skip drawing these (DB owns them). */
7
7
  suppressIds?: ReadonlySet<string>;
8
8
  imageProxyUrl?: string | null;
9
9
  is3d?: boolean;
10
+ /** Settings overrides for house outdoor colors. */
11
+ theme?: Partial<Record<string, string>> | null;
10
12
  }
11
13
  /**
12
14
  * Live outdoor SVG as real vector geometry (not a raster texture).
@@ -14,5 +16,5 @@ export interface SvgVectorLayerProps {
14
16
  * Illustrator fills. Skips route-path* and interactive ids owned by the DB.
15
17
  * Coordinates stay in SVG user space — `MapScene` flips the whole scene.
16
18
  */
17
- export declare function SvgVectorLayer({ url, suppressIds, imageProxyUrl, is3d, }: SvgVectorLayerProps): React.JSX.Element | null;
19
+ export declare function SvgVectorLayer({ url, suppressIds, imageProxyUrl, is3d, theme, }: SvgVectorLayerProps): React.JSX.Element | null;
18
20
  //# sourceMappingURL=SvgVectorLayer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SvgVectorLayer.d.ts","sourceRoot":"","sources":["../../../src/viewer/components/SvgVectorLayer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAoC5D,sFAAsF;AACtF,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGlF;AAED,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,4BAkHrB"}
1
+ {"version":3,"file":"SvgVectorLayer.d.ts","sourceRoot":"","sources":["../../../src/viewer/components/SvgVectorLayer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuC,MAAM,OAAO,CAAC;AAG5D,OAAO,EAOL,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;IACf,mDAAmD;IACnD,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;CAChD;AAWD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAC7B,GAAG,EACH,WAAW,EACX,aAAa,EACb,IAAY,EACZ,KAAK,GACN,EAAE,mBAAmB,4BAgIrB"}
@@ -0,0 +1,7 @@
1
+ import { Vec2 } from '../../core';
2
+ import * as THREE from 'three';
3
+ export declare function polygonToThreeShape(points: Vec2[]): THREE.Shape | null;
4
+ export declare function polygonToThreePath(points: Vec2[]): THREE.Path | null;
5
+ /** Punch overlapping openings out of a slab polygon. */
6
+ export declare function slabShapeWithHoles(outer: Vec2[], holes: Vec2[][]): THREE.Shape | null;
7
+ //# sourceMappingURL=openingGeometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openingGeometry.d.ts","sourceRoot":"","sources":["../../../src/viewer/components/openingGeometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAStE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,CASpE;AAED,wDAAwD;AACxD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,IAAI,EAAE,EACb,KAAK,EAAE,IAAI,EAAE,EAAE,GACd,KAAK,CAAC,KAAK,GAAG,IAAI,CAQpB"}