@eyeon/map 2.0.2 → 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 (110) hide show
  1. package/dist/assets/MapViewer.css +1 -1
  2. package/dist/assets/index.css +1 -1
  3. package/dist/chunks/MapViewer.js +1332 -1091
  4. package/dist/chunks/MapViewer.js.map +1 -1
  5. package/dist/chunks/graph-tools.js +246 -0
  6. package/dist/chunks/graph-tools.js.map +1 -0
  7. package/dist/chunks/stacking.js +885 -780
  8. package/dist/chunks/stacking.js.map +1 -1
  9. package/dist/core/filletPolygon.d.ts +10 -0
  10. package/dist/core/filletPolygon.d.ts.map +1 -0
  11. package/dist/core/import/index.d.ts +4 -0
  12. package/dist/core/import/index.d.ts.map +1 -1
  13. package/dist/core/index.d.ts +3 -0
  14. package/dist/core/index.d.ts.map +1 -1
  15. package/dist/core/index.js +89 -220
  16. package/dist/core/index.js.map +1 -1
  17. package/dist/core/layerStyles.d.ts +16 -0
  18. package/dist/core/layerStyles.d.ts.map +1 -1
  19. package/dist/core/mediaUrl.d.ts +3 -0
  20. package/dist/core/mediaUrl.d.ts.map +1 -0
  21. package/dist/core/outdoorDecoration.d.ts +16 -0
  22. package/dist/core/outdoorDecoration.d.ts.map +1 -0
  23. package/dist/core/routing/graph-tools.d.ts +23 -1
  24. package/dist/core/routing/graph-tools.d.ts.map +1 -1
  25. package/dist/core/routing/pathfinding.d.ts.map +1 -1
  26. package/dist/core/types.d.ts +5 -1
  27. package/dist/core/types.d.ts.map +1 -1
  28. package/dist/editor/MapEditor.d.ts +1 -1
  29. package/dist/editor/MapEditor.d.ts.map +1 -1
  30. package/dist/editor/canvas/EditorCanvas.d.ts +45 -7
  31. package/dist/editor/canvas/EditorCanvas.d.ts.map +1 -1
  32. package/dist/editor/canvas/OutdoorSvgUnderlay.d.ts +7 -0
  33. package/dist/editor/canvas/OutdoorSvgUnderlay.d.ts.map +1 -0
  34. package/dist/editor/canvas/coords.d.ts +30 -0
  35. package/dist/editor/canvas/coords.d.ts.map +1 -1
  36. package/dist/editor/canvas/editorFill.d.ts +10 -0
  37. package/dist/editor/canvas/editorFill.d.ts.map +1 -0
  38. package/dist/editor/canvas/editorHover.d.ts +14 -0
  39. package/dist/editor/canvas/editorHover.d.ts.map +1 -0
  40. package/dist/editor/canvas/underlayHint.d.ts +5 -0
  41. package/dist/editor/canvas/underlayHint.d.ts.map +1 -0
  42. package/dist/editor/connectorAssignments.d.ts +64 -0
  43. package/dist/editor/connectorAssignments.d.ts.map +1 -0
  44. package/dist/editor/draftOps.d.ts +4 -1
  45. package/dist/editor/draftOps.d.ts.map +1 -1
  46. package/dist/editor/editorSectionReturn.d.ts +12 -0
  47. package/dist/editor/editorSectionReturn.d.ts.map +1 -0
  48. package/dist/editor/floorsListReturn.d.ts +5 -0
  49. package/dist/editor/floorsListReturn.d.ts.map +1 -0
  50. package/dist/editor/geometryEdit.d.ts +23 -3
  51. package/dist/editor/geometryEdit.d.ts.map +1 -1
  52. package/dist/editor/hexColor.d.ts +4 -0
  53. package/dist/editor/hexColor.d.ts.map +1 -0
  54. package/dist/editor/history.d.ts +31 -0
  55. package/dist/editor/history.d.ts.map +1 -0
  56. package/dist/editor/index.css +270 -52
  57. package/dist/editor/index.d.ts +4 -4
  58. package/dist/editor/index.d.ts.map +1 -1
  59. package/dist/editor/index.js +5746 -1678
  60. package/dist/editor/index.js.map +1 -1
  61. package/dist/editor/labelText.d.ts +15 -0
  62. package/dist/editor/labelText.d.ts.map +1 -0
  63. package/dist/editor/panels/ConnectorAssign.d.ts +12 -0
  64. package/dist/editor/panels/ConnectorAssign.d.ts.map +1 -0
  65. package/dist/editor/panels/FloorsPanel.d.ts +4 -0
  66. package/dist/editor/panels/FloorsPanel.d.ts.map +1 -1
  67. package/dist/editor/panels/ImportReviewPanel.d.ts.map +1 -1
  68. package/dist/editor/panels/Inspector.d.ts +3 -2
  69. package/dist/editor/panels/Inspector.d.ts.map +1 -1
  70. package/dist/editor/panels/LeftRail.d.ts +9 -7
  71. package/dist/editor/panels/LeftRail.d.ts.map +1 -1
  72. package/dist/editor/pathRings.d.ts +79 -0
  73. package/dist/editor/pathRings.d.ts.map +1 -0
  74. package/dist/editor/portalSurface.d.ts +29 -3
  75. package/dist/editor/portalSurface.d.ts.map +1 -1
  76. package/dist/editor/railAssignments.d.ts +22 -0
  77. package/dist/editor/railAssignments.d.ts.map +1 -0
  78. package/dist/editor/routeStubs.d.ts +103 -0
  79. package/dist/editor/routeStubs.d.ts.map +1 -0
  80. package/dist/editor/snapPoint.d.ts +5 -0
  81. package/dist/editor/snapPoint.d.ts.map +1 -0
  82. package/dist/editor/splitJoin.d.ts +78 -0
  83. package/dist/editor/splitJoin.d.ts.map +1 -0
  84. package/dist/editor/tools.d.ts +35 -6
  85. package/dist/editor/tools.d.ts.map +1 -1
  86. package/dist/test-maps/shops-at-south-town/BASE - Shops At South Town.ai +6326 -6407
  87. package/dist/test-maps/shops-at-south-town/LF - Shops At South Town.ai +458 -484
  88. package/dist/test-maps/shops-at-south-town/SVG/BASE - Shops At South Town.svg +6 -6
  89. package/dist/test-maps/shops-at-south-town/SVG/LF - Shops At South Town.svg +52 -52
  90. package/dist/test-maps/shops-at-south-town/SVG/UF - Shops At South Town.svg +74 -74
  91. package/dist/test-maps/shops-at-south-town/UF - Shops At South Town.ai +341 -436
  92. package/dist/ui/ModernSelect.d.ts +14 -0
  93. package/dist/ui/ModernSelect.d.ts.map +1 -0
  94. package/dist/ui/selectSearch.d.ts +9 -0
  95. package/dist/ui/selectSearch.d.ts.map +1 -0
  96. package/dist/viewer/camera.d.ts +3 -0
  97. package/dist/viewer/camera.d.ts.map +1 -1
  98. package/dist/viewer/components/CameraRig.d.ts.map +1 -1
  99. package/dist/viewer/components/LevelMeshes.d.ts.map +1 -1
  100. package/dist/viewer/components/MapScene.d.ts.map +1 -1
  101. package/dist/viewer/components/SvgVectorLayer.d.ts +2 -2
  102. package/dist/viewer/components/SvgVectorLayer.d.ts.map +1 -1
  103. package/dist/viewer/index.css +115 -5
  104. package/dist/viewer/index.d.ts +1 -1
  105. package/dist/viewer/index.d.ts.map +1 -1
  106. package/dist/viewer/index.js +3 -3
  107. package/dist/viewer/ui/MapControls.d.ts +11 -3
  108. package/dist/viewer/ui/MapControls.d.ts.map +1 -1
  109. package/dist/viewer/ui/RuntimeChrome.d.ts.map +1 -1
  110. package/package.json +1 -1
@@ -0,0 +1,15 @@
1
+ import { ShapeGeometry, ShapeLabel, Vec2, ViewBox } from '../core';
2
+ export declare const DEFAULT_LABEL_TEXT = "Text";
3
+ export declare function isTextLabel(shape: {
4
+ kind: string;
5
+ label?: {
6
+ text?: string;
7
+ } | null;
8
+ }): boolean;
9
+ export declare function defaultLabelSize(viewbox: ViewBox): number;
10
+ export declare function textLabelPolygon(origin: Vec2, text: string, size: number): Vec2[];
11
+ export declare function textLabelGeometry(origin: Vec2, text: string, size: number): ShapeGeometry;
12
+ export declare function defaultTextLabel(text: string, size: number, color?: string): ShapeLabel;
13
+ /** Keep the box anchored at the current bottom-left when the string changes. */
14
+ export declare function geometryForLabelText(geometry: ShapeGeometry, text: string, size: number): ShapeGeometry;
15
+ //# sourceMappingURL=labelText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labelText.d.ts","sourceRoot":"","sources":["../../src/editor/labelText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIxE,eAAO,MAAM,kBAAkB,SAAS,CAAC;AAEzC,wBAAgB,WAAW,CAAC,KAAK,EAAE;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAClC,GAAG,OAAO,CAEV;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAEzD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,CAUjF;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,IAAI,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,aAAa,CAEf;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,UAAU,CAOvF;AAED,gFAAgF;AAChF,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,aAAa,CAGf"}
@@ -0,0 +1,12 @@
1
+ import { default as React } from 'react';
2
+ import { BatchOp, CmShape } from '../../core';
3
+ import { ConnectorPlanContext, VerticalRailKind } from '../connectorAssignments';
4
+ export interface ConnectorAssignProps {
5
+ shape: CmShape;
6
+ railKind: VerticalRailKind;
7
+ ctx: ConnectorPlanContext;
8
+ canEdit: boolean;
9
+ onApplyOps: (ops: BatchOp[]) => void;
10
+ }
11
+ export declare function ConnectorAssign({ shape, railKind, ctx, canEdit, onApplyOps, }: ConnectorAssignProps): React.JSX.Element;
12
+ //# sourceMappingURL=ConnectorAssign.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectorAssign.d.ts","sourceRoot":"","sources":["../../../src/editor/panels/ConnectorAssign.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,EAQL,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,GAAG,EAAE,oBAAoB,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;CACtC;AAED,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,GAAG,EACH,OAAO,EACP,UAAU,GACX,EAAE,oBAAoB,qBAqNtB"}
@@ -35,6 +35,10 @@ export declare function visibleFloorCount(levels: Array<{
35
35
  export declare function placeLevelId(ids: number[], movedId: number, targetId: number, place: 'before' | 'after'): number[];
36
36
  /** Move `movedId` to `toIndex` in the list with that id removed. */
37
37
  export declare function moveLevelId(ids: number[], movedId: number, toIndex: number): number[];
38
+ /** Slot index from pointer Y. Uses the list box, not live row midpoints. */
39
+ export declare function insertIndexFromY(clientY: number, listTop: number, rowHeight: number, count: number): number;
40
+ /** Overlay Y for the drop line. Null when the item would stay put. */
41
+ export declare function dropLineTop(fromIndex: number, dropIndex: number, rowHeight: number, rowInnerHeight: number): number | null;
38
42
  export interface FloorsPanelProps {
39
43
  levels: CmLevel[];
40
44
  buildings: CmBuilding[];
@@ -1 +1 @@
1
- {"version":3,"file":"FloorsPanel.d.ts","sourceRoot":"","sources":["../../../src/editor/panels/FloorsPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAgE,MAAM,OAAO,CAAC;AAErF,OAAO,EAAyB,KAAK,UAAU,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAElF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC1C,MAAM,CAQR;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAEzE;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAC1B,GAAG,EAAE,MAAM,EAAE,EACb,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,QAAQ,GAAG,OAAO,GACxB,MAAM,EAAE,CAUV;AAED,oEAAoE;AACpE,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAQrF;AAkBD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACpE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D;AAsDD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACrC,UAAU,SAAI;;;;EAYf;AAED,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,MAAM,EACN,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,EACb,eAAe,GAChB,EAAE,gBAAgB,qBA2tBlB"}
1
+ {"version":3,"file":"FloorsPanel.d.ts","sourceRoot":"","sources":["../../../src/editor/panels/FloorsPanel.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ImportReviewPanel.d.ts","sourceRoot":"","sources":["../../../src/editor/panels/ImportReviewPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAC;AAE7D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,CAAC,OAAO,EAAE;QACjB,SAAS,EAAE,OAAO,CAAC;QACnB,KAAK,EAAE,KAAK,CAAC;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC9D,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAiBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,cAAsB,EACtB,cAAc,EACd,IAAY,EACZ,OAAO,EACP,QAAQ,GACT,EAAE,iBAAiB,qBAoJnB"}
1
+ {"version":3,"file":"ImportReviewPanel.d.ts","sourceRoot":"","sources":["../../../src/editor/panels/ImportReviewPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAkB,MAAM,YAAY,CAAC;AAG7D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,CAAC,OAAO,EAAE;QACjB,SAAS,EAAE,OAAO,CAAC;QACnB,KAAK,EAAE,KAAK,CAAC;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,aAAa,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC9D,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAiBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,cAAsB,EACtB,cAAc,EACd,IAAY,EACZ,OAAO,EACP,QAAQ,GACT,EAAE,iBAAiB,qBAuJnB"}
@@ -1,5 +1,5 @@
1
1
  import { default as React } from 'react';
2
- import { CmAmenityCatalogItem, CmShape, CmShapeAssignment, ShapeKind } from '../../core';
2
+ import { CmAmenityCatalogItem, CmShape, CmShapeAssignment, ShapeKind, ShapeLabel } from '../../core';
3
3
  export interface InspectorProps {
4
4
  shape: CmShape | null;
5
5
  assignment: CmShapeAssignment | null;
@@ -11,6 +11,7 @@ export interface InspectorProps {
11
11
  onChangeKind: (kind: ShapeKind) => void;
12
12
  onDelete?: () => void;
13
13
  onSaveAssignment: (assignment: CmShapeAssignment) => void;
14
+ onUpdateLabel?: (label: ShapeLabel) => void;
14
15
  }
15
- export declare function Inspector({ shape, assignment, amenities, levelShapeKeys, canEdit, onRename, onChangeKind, onDelete, onSaveAssignment, }: InspectorProps): React.JSX.Element;
16
+ export declare function Inspector({ shape, assignment, amenities, levelShapeKeys, canEdit, onRename, onChangeKind, onDelete, onSaveAssignment, onUpdateLabel, }: InspectorProps): React.JSX.Element;
16
17
  //# sourceMappingURL=Inspector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Inspector.d.ts","sourceRoot":"","sources":["../../../src/editor/panels/Inspector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,KAAK,EACV,oBAAoB,EACpB,OAAO,EACP,iBAAiB,EACjB,SAAS,EAEV,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,gBAAgB,EAAE,CAAC,UAAU,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC3D;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,UAAU,EACV,SAAS,EACT,cAAmB,EACnB,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,gBAAgB,GACjB,EAAE,cAAc,qBAuNhB"}
1
+ {"version":3,"file":"Inspector.d.ts","sourceRoot":"","sources":["../../../src/editor/panels/Inspector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,KAAK,EACV,oBAAoB,EACpB,OAAO,EACP,iBAAiB,EACjB,SAAS,EACT,UAAU,EAEX,MAAM,YAAY,CAAC;AAOpB,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACtB,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,gBAAgB,EAAE,CAAC,UAAU,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC1D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;CAC7C;AAED,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,UAAU,EACV,SAAS,EACT,cAAmB,EACnB,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,aAAa,GACd,EAAE,cAAc,qBAoPhB"}
@@ -1,7 +1,7 @@
1
1
  import { default as React, ReactNode } from 'react';
2
- import { CmAmenityCatalogItem, CmLevel, CmBuilding, ThemeDefaults } from '../../core';
2
+ import { CmAmenityCatalogItem, CmAnchor, CmConnector, CmLevel, CmBuilding, CmShapeAssignment, ThemeDefaults } from '../../core';
3
3
  import { CreateLevelInput, UpdateLevelInput } from './FloorsPanel';
4
- export type RailSection = 'floors' | 'stores' | 'amenities' | 'kiosks' | 'paths' | 'style' | 'selection' | 'edit-map';
4
+ export type RailSection = 'floors' | 'stores' | 'amenities' | 'kiosks' | 'escalators' | 'elevators' | 'paths' | 'style' | 'selection' | 'unassigned' | 'edit-map' | 'wayfinding';
5
5
  /** @deprecated Use RailSection */
6
6
  export type RailTab = RailSection;
7
7
  export interface LeftRailDraft {
@@ -12,16 +12,16 @@ export interface LeftRailDraft {
12
12
  levelId: number;
13
13
  key: string;
14
14
  kind: string;
15
+ sourceSvgId?: string | null;
15
16
  orphanedAt?: string | null;
16
17
  }>;
17
- anchors: Array<{
18
- id: number;
19
- levelId: number;
20
- }>;
18
+ anchors: Array<Pick<CmAnchor, 'id' | 'levelId' | 'shapeId' | 'connectorId'>>;
21
19
  edges: Array<{
22
20
  id: number;
23
21
  }>;
22
+ connectors: CmConnector[];
24
23
  amenities: CmAmenityCatalogItem[];
24
+ assignments: CmShapeAssignment[];
25
25
  }
26
26
  export interface LeftRailProps {
27
27
  section: RailSection | null;
@@ -43,7 +43,9 @@ export interface LeftRailProps {
43
43
  assignPanel: ReactNode;
44
44
  /** Draw/tools UI for Edit Map (icons + inspector). */
45
45
  editMapPanel?: ReactNode;
46
+ /** Route tools and path stats for Wayfinding. */
47
+ wayfindingPanel?: ReactNode;
46
48
  footer?: ReactNode;
47
49
  }
48
- export declare function LeftRail({ section, onSectionChange, draft, activeLevelId, selectedShapeId, onSelectShape, canFloors, canSettings, onCreateLevel, onUpdateLevel, onDeleteLevel, onReorderLevels, onAutoroute, theme, onThemeChange, assignPanel, editMapPanel, footer, }: LeftRailProps): React.JSX.Element;
50
+ export declare function LeftRail({ section, onSectionChange, draft, activeLevelId, selectedShapeId, onSelectShape, canFloors, canSettings, onCreateLevel, onUpdateLevel, onDeleteLevel, onReorderLevels, onAutoroute, theme, onThemeChange, assignPanel, editMapPanel, wayfindingPanel, footer, }: LeftRailProps): React.JSX.Element;
49
51
  //# sourceMappingURL=LeftRail.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LeftRail.d.ts","sourceRoot":"","sources":["../../../src/editor/panels/LeftRail.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LeftRail.d.ts","sourceRoot":"","sources":["../../../src/editor/panels/LeftRail.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { ShapeGeometry, Vec2 } from '../core';
2
+ export type PathEdge = {
3
+ kind: 'line';
4
+ } | {
5
+ kind: 'cubic';
6
+ c1: Vec2;
7
+ c2: Vec2;
8
+ };
9
+ /** One closed or open subpath as corner anchors + one edge between each pair. */
10
+ export interface PathRing {
11
+ closed: boolean;
12
+ anchors: Vec2[];
13
+ /** `edges[i]` runs from `anchors[i]` to the next anchor (wraps when closed). */
14
+ edges: PathEdge[];
15
+ }
16
+ export declare function vecEq(a: Vec2, b: Vec2, eps?: number): boolean;
17
+ export declare function cloneVec(p: Vec2): Vec2;
18
+ export declare function addVec(a: Vec2, b: Vec2): Vec2;
19
+ export declare function subVec(a: Vec2, b: Vec2): Vec2;
20
+ export declare function scaleVec(a: Vec2, s: number): Vec2;
21
+ export declare function lerpVec(a: Vec2, b: Vec2, t: number): Vec2;
22
+ export declare function edgeCount(ring: PathRing): number;
23
+ export declare function edgeFrom(ring: PathRing, edgeIndex: number): Vec2;
24
+ export declare function edgeTo(ring: PathRing, edgeIndex: number): Vec2;
25
+ export declare function edgeToPathD(ring: PathRing, edgeIndex: number): string;
26
+ export declare function fmtCoord(n: number): string;
27
+ export declare function ringFromPolygon(poly: Vec2[], closed?: boolean): PathRing;
28
+ /**
29
+ * Quadratic (p0, q, p2) → cubic handles.
30
+ */
31
+ export declare function quadraticToCubic(p0: Vec2, q: Vec2, p2: Vec2): {
32
+ c1: Vec2;
33
+ c2: Vec2;
34
+ };
35
+ /**
36
+ * Symmetric cubic that passes through `pull` at t = 0.5.
37
+ * Used when the user drags a straight side into an arch.
38
+ */
39
+ export declare function cubicHandlesForPull(from: Vec2, to: Vec2, pull: Vec2): {
40
+ c1: Vec2;
41
+ c2: Vec2;
42
+ };
43
+ export declare function cubicPoint(p0: Vec2, c1: Vec2, c2: Vec2, p3: Vec2, t: number): Vec2;
44
+ export declare function splitCubic(p0: Vec2, c1: Vec2, c2: Vec2, p3: Vec2, t: number): {
45
+ left: {
46
+ c1: Vec2;
47
+ c2: Vec2;
48
+ to: Vec2;
49
+ };
50
+ right: {
51
+ c1: Vec2;
52
+ c2: Vec2;
53
+ to: Vec2;
54
+ };
55
+ };
56
+ /**
57
+ * Split an SVG elliptical arc into cubics (one per ≤90° sweep) so Edit Map
58
+ * can treat each arch as two anchors + two handles.
59
+ */
60
+ export declare function ellipticalArcToCubics(p0: Vec2, rx: number, ry: number, xAxisRotationDeg: number, largeArc: boolean, sweep: boolean, p1: Vec2): Array<{
61
+ c1: Vec2;
62
+ c2: Vec2;
63
+ to: Vec2;
64
+ }>;
65
+ export declare function parsePathToRings(d: string): PathRing[];
66
+ export declare function ringToPathD(ring: PathRing): string;
67
+ export declare function ringsToGeometry(rings: PathRing[]): ShapeGeometry;
68
+ /** A cubic whose bulge is much longer than its chord is a leftover loop, not an arch. */
69
+ export declare function cubicIsRunaway(from: Vec2, c1: Vec2, c2: Vec2, to: Vec2): boolean;
70
+ export declare function collapseLineRunsToCubics(ring: PathRing): PathRing;
71
+ export declare function geometryToRings(geometry: ShapeGeometry): PathRing[];
72
+ /** Closest point on one ring edge — keeps the add-anchor preview on the line. */
73
+ export declare function pointOnRingEdge(ring: PathRing, edgeIndex: number, point: Vec2): Vec2;
74
+ export declare function nearestTOnCubic(point: Vec2, p0: Vec2, c1: Vec2, c2: Vec2, p3: Vec2): {
75
+ t: number;
76
+ point: Vec2;
77
+ distance: number;
78
+ };
79
+ //# sourceMappingURL=pathRings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pathRings.d.ts","sourceRoot":"","sources":["../../src/editor/pathRings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AASnD,MAAM,MAAM,QAAQ,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,IAAI,CAAA;CAAE,CAAC;AAE1C,iFAAiF;AACjF,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,IAAI,EAAE,CAAC;IAChB,gFAAgF;IAChF,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAID,wBAAgB,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,SAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAEtC;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAE7C;AAED,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,CAE7C;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAEzD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAGhD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAEhE;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAE9D;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAQrE;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG1C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,UAAO,GAAG,QAAQ,CAWrE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG;IAC7D,EAAE,EAAE,IAAI,CAAC;IACT,EAAE,EAAE,IAAI,CAAC;CACV,CAKA;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG;IACrE,EAAE,EAAE,IAAI,CAAC;IACT,EAAE,EAAE,IAAI,CAAC;CACV,CAQA;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAMlF;AAED,wBAAgB,UAAU,CACxB,EAAE,EAAE,IAAI,EACR,EAAE,EAAE,IAAI,EACR,EAAE,EAAE,IAAI,EACR,EAAE,EAAE,IAAI,EACR,CAAC,EAAE,MAAM,GACR;IACD,IAAI,EAAE;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,EAAE,EAAE,IAAI,CAAC;QAAC,EAAE,EAAE,IAAI,CAAA;KAAE,CAAC;IACvC,KAAK,EAAE;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,EAAE,EAAE,IAAI,CAAC;QAAC,EAAE,EAAE,IAAI,CAAA;KAAE,CAAC;CACzC,CAWA;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,IAAI,EACR,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE,OAAO,EACd,EAAE,EAAE,IAAI,GACP,KAAK,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,IAAI,CAAA;CAAE,CAAC,CAmFzC;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,QAAQ,EAAE,CA+NtD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAmBlD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,aAAa,CAiBhE;AA8ED,yFAAyF;AACzF,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,GAAG,OAAO,CAKhF;AAgBD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CA0EjE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,QAAQ,EAAE,CAQnE;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,CAQpF;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,IAAI,EACX,EAAE,EAAE,IAAI,EACR,EAAE,EAAE,IAAI,EACR,EAAE,EAAE,IAAI,EACR,EAAE,EAAE,IAAI,GACP;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAc9C"}
@@ -1,11 +1,37 @@
1
- import { MapEditorHost } from '../core';
1
+ import { MapEditorHost, StackLevel } from '../core';
2
2
  import { RailSection } from './panels/LeftRail';
3
3
  /** What occupies the PORTAL center pane (rail is always Map options). */
4
4
  export type PortalCenterSurface = 'viewer' | 'editor';
5
+ /** Geometry canvas: Edit Map (shapes) or Wayfinding (routes). */
6
+ export declare function isEditorSection(section: RailSection | null): boolean;
5
7
  /**
6
8
  * PORTAL default is MapViewer (assign on the real map, no editor grid).
7
- * Edit Map swaps in EditorCanvas + grid. Non-PORTAL editor hosts stay on
8
- * the geometry canvas.
9
+ * Edit Map and Wayfinding swap in EditorCanvas + grid. Non-PORTAL editor
10
+ * hosts stay on the geometry canvas.
9
11
  */
10
12
  export declare function portalCenterSurface(host: MapEditorHost, section: RailSection | null): PortalCenterSurface;
13
+ /** Building floors only — Outdoor is not routed. */
14
+ export declare function wayfindingSelectableLevels<T extends StackLevel>(levels: T[]): T[];
15
+ /** Floors in admin list order, then Outdoor at the bottom. */
16
+ export declare function editMapSelectableLevels<T extends StackLevel>(levels: T[]): T[];
17
+ /** Lowest building floor (bottom of the Floors list). */
18
+ export declare function defaultEditorFloorId(levels: StackLevel[]): number | null;
19
+ /**
20
+ * Wayfinding always opens on the ground floor (bottom of the Floors list),
21
+ * not Outdoor or the floor last used in Edit Map.
22
+ */
23
+ export declare function levelIdOnEnterWayfinding(levels: StackLevel[]): number | null;
24
+ /** Edit Map opens on the lowest building floor; Outdoor only if there are no floors. */
25
+ export declare function levelIdOnEnterEditMap(levels: StackLevel[]): number | null;
26
+ /** Top-right floor switcher: floors, then Outdoor. Same list in Edit Map and Wayfinding. */
27
+ export declare function editorFloorControlLevels<T extends StackLevel & {
28
+ name: string;
29
+ }>(_section: RailSection | null, levels: T[]): Array<{
30
+ id: number;
31
+ name: string;
32
+ }>;
33
+ /** Outdoor can be viewed in Wayfinding but routes and drawing stay off. */
34
+ export declare function wayfindingOutdoorReadOnly(section: RailSection | null, level: {
35
+ kind?: string;
36
+ } | null | undefined): boolean;
11
37
  //# sourceMappingURL=portalSurface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"portalSurface.d.ts","sourceRoot":"","sources":["../../src/editor/portalSurface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,yEAAyE;AACzE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEtD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,WAAW,GAAG,IAAI,GAC1B,mBAAmB,CAGrB"}
1
+ {"version":3,"file":"portalSurface.d.ts","sourceRoot":"","sources":["../../src/editor/portalSurface.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,yEAAyE;AACzE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEtD,iEAAiE;AACjE,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,OAAO,CAEpE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,WAAW,GAAG,IAAI,GAC1B,mBAAmB,CAGrB;AAED,oDAAoD;AACpD,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAEjF;AAED,8DAA8D;AAC9D,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAG9E;AAED,yDAAyD;AACzD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,GAAG,IAAI,CAExE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,GAAG,IAAI,CAM5E;AAED,wFAAwF;AACxF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,GAAG,IAAI,CAMzE;AAED,4FAA4F;AAC5F,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAC9E,QAAQ,EAAE,WAAW,GAAG,IAAI,EAC5B,MAAM,EAAE,CAAC,EAAE,GACV,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAKrC;AAED,2EAA2E;AAC3E,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,WAAW,GAAG,IAAI,EAC3B,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAET"}
@@ -0,0 +1,22 @@
1
+ import { CmShapeAssignment } from '../core';
2
+ export declare const ASSIGNABLE_SHAPE_KINDS: readonly ["unit", "parking_zone", "amenity", "kiosk_screen"];
3
+ export type AssignableShapeKind = (typeof ASSIGNABLE_SHAPE_KINDS)[number];
4
+ export type AssignmentLike = Pick<CmShapeAssignment, 'shapeId' | 'targetType' | 'retailerId' | 'amenityId' | 'kioskId'>;
5
+ export type AssignableShape = {
6
+ id: number;
7
+ kind: string;
8
+ orphanedAt?: string | null;
9
+ };
10
+ export declare function isAssignableKind(kind: string): kind is AssignableShapeKind;
11
+ export declare function isRetailerAssigned(assignment: AssignmentLike | null | undefined): boolean;
12
+ export declare function isAmenityAssigned(assignment: AssignmentLike | null | undefined): boolean;
13
+ export declare function isKioskAssigned(assignment: AssignmentLike | null | undefined): boolean;
14
+ export declare function isPolygonAssigned(assignment: AssignmentLike | null | undefined): boolean;
15
+ export declare function assignmentByShapeId(assignments: AssignmentLike[]): Map<number, AssignmentLike>;
16
+ /** Assigned store / amenity polygons, and assignable polygons with no link. */
17
+ export declare function railAssignmentGroups<T extends AssignableShape>(shapes: T[], assignments: AssignmentLike[]): {
18
+ stores: T[];
19
+ amenities: T[];
20
+ unassigned: T[];
21
+ };
22
+ //# sourceMappingURL=railAssignments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"railAssignments.d.ts","sourceRoot":"","sources":["../../src/editor/railAssignments.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,eAAO,MAAM,sBAAsB,8DAKzB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1E,MAAM,MAAM,cAAc,GAAG,IAAI,CAC/B,iBAAiB,EACjB,SAAS,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAClE,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,mBAAmB,CAE1E;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAIzF;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAIxF;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEtF;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAMxF;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,cAAc,EAAE,GAC5B,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAE7B;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,eAAe,EAC5D,MAAM,EAAE,CAAC,EAAE,EACX,WAAW,EAAE,cAAc,EAAE,GAC5B;IAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAAC,SAAS,EAAE,CAAC,EAAE,CAAC;IAAC,UAAU,EAAE,CAAC,EAAE,CAAA;CAAE,CAelD"}
@@ -0,0 +1,103 @@
1
+ import { AnchorKind, BatchOp, CmAnchor, CmRouteEdge, CmShape, ShapeKind, Vec2 } from '../core';
2
+ export declare const WAYFINDING_SNAP_PX = 28;
3
+ /**
4
+ * One pick radius (CSS pixels) for wayfinding: the anchor dot, the + on a
5
+ * route, and click-to-connect. On-route and off-route use the same circle.
6
+ */
7
+ export declare const WAYFINDING_ANCHOR_HIT_PX = 10;
8
+ export declare function showsWayfinding(tool: string, routeMode?: boolean): boolean;
9
+ /**
10
+ * First empty Create Route click is a preview. A second click commits both
11
+ * ends. Leaving the tool drops the draft so a lone start is never kept.
12
+ */
13
+ /** Esc and Undo share this: a lone preview start is local; anything else undoes. */
14
+ export declare function routeSessionUndoKind(session: {
15
+ routeDraftPoint: Vec2 | null;
16
+ storeLinkPreview: unknown;
17
+ }): 'clear-only' | 'clear-and-undo';
18
+ export declare function beginOrContinueRouteDraft(draft: Vec2 | null, world: Vec2): {
19
+ nextDraft: Vec2 | null;
20
+ start: Vec2 | null;
21
+ end: Vec2 | null;
22
+ };
23
+ /** Preview line from a started route/store-link to the cursor or snap. */
24
+ export declare function routeRubberBand(from: Vec2 | null | undefined, to: Vec2 | null | undefined): {
25
+ from: Vec2;
26
+ to: Vec2;
27
+ } | null;
28
+ export declare function isWayfindingShape(kind: ShapeKind): boolean;
29
+ /** Outdoor pad sites are not routed — helpers and store links stay indoor. */
30
+ export declare function wayfindingLinksShapes(level: {
31
+ kind?: string;
32
+ } | null | undefined): boolean;
33
+ export declare function anchorKindForShape(kind: ShapeKind): AnchorKind;
34
+ export declare function shapeRoutePoint(shape: Pick<CmShape, 'geometry'>): Vec2;
35
+ export declare function shapeRouteAnchor(shapeId: number, anchors: Array<Pick<CmAnchor, 'id' | 'shapeId'>>): Pick<CmAnchor, 'id' | 'shapeId'> | undefined;
36
+ export declare function anchorHasEdge(anchorId: number, edges: Array<Pick<CmRouteEdge, 'fromAnchorId' | 'toAnchorId'>>): boolean;
37
+ export declare function walkEdgeExists(edges: Array<Pick<CmRouteEdge, 'fromAnchorId' | 'toAnchorId'>>, a: number, b: number): boolean;
38
+ export type RouteSnapTarget = {
39
+ type: 'junction';
40
+ anchorId: number;
41
+ point: Vec2;
42
+ distance: number;
43
+ } | {
44
+ type: 'edge';
45
+ edgeId: number;
46
+ fromAnchorId: number;
47
+ toAnchorId: number;
48
+ point: Vec2;
49
+ distance: number;
50
+ };
51
+ /** The orange point we are linking from — not every destination on that store. */
52
+ export declare function storeLinkOriginIds(anchors: Array<Pick<CmAnchor, 'id' | 'shapeId' | 'x' | 'y'>>, preview: {
53
+ shapeId: number;
54
+ origin: Vec2;
55
+ } | null | undefined): Set<number>;
56
+ /**
57
+ * Nearest route point or edge within `maxDist` (same circular hit on and off
58
+ * the path). An existing anchor wins only when the cursor is inside that
59
+ * circle; otherwise a mid-edge hit stays a split so the + can sit close to
60
+ * a neighboring point.
61
+ */
62
+ export declare function nearestRouteSnap(point: Vec2, anchors: CmAnchor[], edges: CmRouteEdge[], excludeIds: ReadonlySet<number>, maxDist: number): RouteSnapTarget | null;
63
+ export interface ConnectShapeToRouteInput {
64
+ shape: CmShape;
65
+ anchors: CmAnchor[];
66
+ edges: CmRouteEdge[];
67
+ mapId: number;
68
+ from: Vec2;
69
+ drop: Vec2;
70
+ maxDist: number;
71
+ allocId: () => number;
72
+ }
73
+ /** Create a store/amenity route point at the click. Another click elsewhere adds another. */
74
+ export declare function ensureShapeRouteAnchorOps(input: {
75
+ shape: CmShape;
76
+ anchors: CmAnchor[];
77
+ allocId: () => number;
78
+ point?: Vec2;
79
+ }): {
80
+ ops: BatchOp[];
81
+ anchorId: number;
82
+ };
83
+ /**
84
+ * Ensure the shape has a destination anchor, then hook it to the walking path
85
+ * at `drop` (existing junction or a split in a walk edge).
86
+ */
87
+ export declare function connectShapeToRouteOps(input: ConnectShapeToRouteInput): BatchOp[];
88
+ export declare function linkRouteAnchorsOp(mapId: number, fromAnchorId: number, toAnchorId: number, edges: Array<Pick<CmRouteEdge, 'fromAnchorId' | 'toAnchorId'>>, allocId: () => number): BatchOp | null;
89
+ export declare function insertJunctionOnWalkEdgeOps(input: {
90
+ levelId: number;
91
+ mapId: number;
92
+ edge: CmRouteEdge;
93
+ point: Vec2;
94
+ allocId: () => number;
95
+ }): {
96
+ ops: BatchOp[];
97
+ junctionId: number;
98
+ };
99
+ /**
100
+ * Remove a route point. A 2-way corridor is healed so the path stays joined.
101
+ */
102
+ export declare function deleteRouteAnchorOps(anchorId: number, mapId: number, edges: CmRouteEdge[], allocId: () => number): BatchOp[];
103
+ //# sourceMappingURL=routeStubs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routeStubs.d.ts","sourceRoot":"","sources":["../../src/editor/routeStubs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,OAAO,EACP,QAAQ,EACR,WAAW,EACX,OAAO,EACP,SAAS,EACT,IAAI,EACL,MAAM,SAAS,CAAC;AAUjB,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC;;;GAGG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAE3C,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,OAAO,CASxE;AAED;;;GAGG;AACH,oFAAoF;AACpF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAC5C,eAAe,EAAE,IAAI,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;CAC3B,GAAG,YAAY,GAAG,gBAAgB,CAKlC;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,IAAI,GAAG,IAAI,EAClB,KAAK,EAAE,IAAI,GACV;IAAE,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAAA;CAAE,CAGlE;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAC7B,EAAE,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAC1B;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG,IAAI,CAIjC;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAE1D;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CACnC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAET;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAE9D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,IAAI,CAUtE;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,SAAS,CAAC,CAAC,GAC/C,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,SAAS,CAAC,GAAG,SAAS,CAE9C;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,YAAY,CAAC,CAAC,GAC7D,OAAO,CAIT;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,YAAY,CAAC,CAAC,EAC9D,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,OAAO,CAMT;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACrE;IACE,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,IAAI,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAUN,kFAAkF;AAClF,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,EAC5D,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAC5D,GAAG,CAAC,MAAM,CAAC,CAYb;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,IAAI,EACX,OAAO,EAAE,QAAQ,EAAE,EACnB,KAAK,EAAE,WAAW,EAAE,EACpB,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAC/B,OAAO,EAAE,MAAM,GACd,eAAe,GAAG,IAAI,CA0CxB;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,MAAM,CAAC;CACvB;AAqBD,6FAA6F;AAC7F,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,IAAI,CAAC;CACd,GAAG;IAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAmBvC;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,EAAE,CAsEjF;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,YAAY,CAAC,CAAC,EAC9D,OAAO,EAAE,MAAM,MAAM,GACpB,OAAO,GAAG,IAAI,CAOhB;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,IAAI,CAAC;IACZ,OAAO,EAAE,MAAM,MAAM,CAAC;CACvB,GAAG;IAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CA6BzC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,WAAW,EAAE,EACpB,OAAO,EAAE,MAAM,MAAM,GACpB,OAAO,EAAE,CA4BX"}
@@ -0,0 +1,5 @@
1
+ import { Vec2 } from '../core';
2
+ /** Closest candidate within `tol` world units, or null. */
3
+ export declare function nearestSnapPoint(point: Vec2, candidates: Vec2[], tol: number): Vec2 | null;
4
+ export declare function sameSnapPoint(a: Vec2 | null, b: Vec2 | null, eps?: number): boolean;
5
+ //# sourceMappingURL=snapPoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapPoint.d.ts","sourceRoot":"","sources":["../../src/editor/snapPoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAEpC,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,IAAI,EACX,UAAU,EAAE,IAAI,EAAE,EAClB,GAAG,EAAE,MAAM,GACV,IAAI,GAAG,IAAI,CASb;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,SAAO,GAAG,OAAO,CAGjF"}
@@ -0,0 +1,78 @@
1
+ import { ShapeGeometry, ShapeKind, ShapeStyle, Vec2 } from '../core';
2
+ export type OpenEndId = {
3
+ shapeId: number;
4
+ ringIndex: number;
5
+ end: 'start' | 'end';
6
+ };
7
+ export type OpenEndHit = OpenEndId & {
8
+ point: Vec2;
9
+ distance: number;
10
+ };
11
+ export type SplitJoinEdgeHit = {
12
+ shapeId: number;
13
+ ringIndex: number;
14
+ edgeIndex: number;
15
+ point: Vec2;
16
+ shared: boolean;
17
+ distance: number;
18
+ };
19
+ export type ShapeGeo = {
20
+ id: number;
21
+ kind: ShapeKind;
22
+ style?: ShapeStyle;
23
+ geometry: ShapeGeometry;
24
+ };
25
+ export type ShapeBatchEdit = {
26
+ action: 'update';
27
+ shapeId: number;
28
+ geometry: ShapeGeometry;
29
+ } | {
30
+ action: 'create';
31
+ kind: ShapeKind;
32
+ geometry: ShapeGeometry;
33
+ style?: ShapeStyle;
34
+ } | {
35
+ action: 'delete';
36
+ shapeId: number;
37
+ };
38
+ export declare function canSplitJoinKind(kind: ShapeKind): boolean;
39
+ export declare function sameOpenEnd(a: OpenEndId, b: OpenEndId): boolean;
40
+ export declare function listOpenEnds(geometry: ShapeGeometry): Array<{
41
+ ringIndex: number;
42
+ end: 'start' | 'end';
43
+ point: Vec2;
44
+ }>;
45
+ export declare function edgeLiesOnOtherShape(from: Vec2, to: Vec2, others: Array<{
46
+ geometry: ShapeGeometry;
47
+ }>, tol?: number): boolean;
48
+ export declare function openWholeEdge(geometry: ShapeGeometry, ringIndex: number, edgeIndex: number): ShapeGeometry;
49
+ export declare function cutEdgeOpen(geometry: ShapeGeometry, ringIndex: number, edgeIndex: number, point: Vec2, gap: number): ShapeGeometry;
50
+ export declare function joinOpenEndpoints(geometry: ShapeGeometry, a: {
51
+ ringIndex: number;
52
+ end: 'start' | 'end';
53
+ }, b: {
54
+ ringIndex: number;
55
+ end: 'start' | 'end';
56
+ }, tol?: number): ShapeGeometry;
57
+ export declare function weldCoincidentOpenEnds(shapes: ShapeGeo[], tol?: number): {
58
+ shapes: ShapeGeo[];
59
+ deleteIds: number[];
60
+ };
61
+ export declare function forkClosedRings(shape: ShapeGeo): {
62
+ keep: ShapeGeo;
63
+ extras: ShapeGeometry[];
64
+ };
65
+ export declare function applySplitJoinCut(shapes: ShapeGeo[], hit: {
66
+ shapeId: number;
67
+ ringIndex: number;
68
+ edgeIndex: number;
69
+ point: Vec2;
70
+ }, gap: number): ShapeBatchEdit[];
71
+ export declare function applySplitJoinJoin(shapes: ShapeGeo[], a: OpenEndId, b: OpenEndId): ShapeBatchEdit[];
72
+ export declare function hitOpenEnd(shapes: ShapeGeo[], point: Vec2, tol: number, skip?: OpenEndId | null): OpenEndHit | null;
73
+ export declare function hitSplitJoinEdge(shapes: ShapeGeo[], point: Vec2, tol: number): SplitJoinEdgeHit | null;
74
+ export declare function previewCutPoints(geometry: ShapeGeometry, ringIndex: number, edgeIndex: number, point: Vec2, gap: number): {
75
+ p1: Vec2;
76
+ p2: Vec2;
77
+ } | null;
78
+ //# sourceMappingURL=splitJoin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splitJoin.d.ts","sourceRoot":"","sources":["../../src/editor/splitJoin.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,49 @@
1
1
  import { default as React } from 'react';
2
- export type EditorTool = 'select' | 'pan' | 'draw-unit' | 'draw-polygon' | 'draw-line' | 'draw-route';
2
+ export type EditorTool = 'select' | 'pan' | 'draw-unit' | 'draw-polygon' | 'draw-line' | 'curve' | 'split-join' | 'draw-text' | 'draw-route' | 'create-route' | 'create-route-multi';
3
3
  export declare const EDITOR_TOOLS: Array<{
4
4
  id: EditorTool;
5
5
  label: string;
6
6
  draw?: boolean;
7
+ /** Route tools sit after a separator, apart from shape tools. */
8
+ group?: 'map' | 'route';
9
+ /** When set, the label is shown beside the icon instead of only as a tooltip. */
10
+ caption?: string;
7
11
  }>;
12
+ export declare function isRouteTool(tool: string): boolean;
13
+ /** Empty-canvas clicks start a new path with Create Route or Multi Route. */
14
+ export declare function canPlaceNewRoute(tool: string): boolean;
15
+ /** Multi Route keeps adding segments until Esc or another tool. */
16
+ export declare function canChainRoute(tool: string): boolean;
17
+ /** After a segment is committed, keep the end only for Multi Route. */
18
+ export declare function nextRouteChainAnchor(tool: string, endAnchorId: number | null | undefined): number | null;
19
+ /** Select and Curve can click a shape to make it the edit target. */
20
+ export declare function canSelectShapes(tool: EditorTool): boolean;
21
+ export declare function isSplitJoinTool(tool: EditorTool): boolean;
22
+ /** Click two open ends to join them — Select after a split, or Split / Join. */
23
+ export declare function canJoinOpenEnds(tool: EditorTool): boolean;
24
+ /** Corner anchors — Select, Curve, and Split / Join. */
25
+ export declare function showsShapeAnchors(tool: EditorTool): boolean;
26
+ /** Midpoint bend dots and cubic handles — only the Curve tool. */
27
+ export declare function showsCurveHandles(tool: EditorTool): boolean;
28
+ /** Empty-canvas drag pans in Select, Curve, Pan, and Wayfinding edit. */
29
+ export declare function emptyCanvasDragPans(tool: EditorTool): boolean;
30
+ /** Create Route or Multi Route again returns to Select. */
31
+ export declare function nextEditorTool(current: EditorTool, next: EditorTool): EditorTool;
8
32
  export declare function toolHint(tool: EditorTool): string;
9
33
  export interface EditorToolButtonsProps {
10
34
  tool: EditorTool;
11
35
  onToolChange: (tool: EditorTool) => void;
12
36
  canEdit: boolean;
37
+ /** Omit to show every tool. PORTAL Edit Map is `map`; Wayfinding is `route`. */
38
+ group?: 'map' | 'route';
13
39
  }
14
- export declare function EditorToolButtons({ tool, onToolChange, canEdit, }: EditorToolButtonsProps): React.JSX.Element;
15
- export interface JoinPointsButtonProps {
16
- disabled: boolean;
17
- onClick: () => void;
40
+ export declare function EditorToolButtons({ tool, onToolChange, canEdit, group, }: EditorToolButtonsProps): React.JSX.Element;
41
+ export interface EditorHistoryButtonsProps {
42
+ canUndo: boolean;
43
+ canRedo: boolean;
44
+ disabled?: boolean;
45
+ onUndo: () => void;
46
+ onRedo: () => void;
18
47
  }
19
- export declare function JoinPointsButton({ disabled, onClick }: JoinPointsButtonProps): React.JSX.Element;
48
+ export declare function EditorHistoryButtons({ canUndo, canRedo, disabled, onUndo, onRedo, }: EditorHistoryButtonsProps): React.JSX.Element;
20
49
  //# sourceMappingURL=tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/editor/tools.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,KAAK,GACL,WAAW,GACX,cAAc,GACd,WAAW,GACX,YAAY,CAAC;AAEjB,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC;IAC/B,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAOA,CAAC;AAkHF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAejD;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACzC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,YAAY,EACZ,OAAO,GACR,EAAE,sBAAsB,qBAsBxB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,qBAAqB,qBAa5E"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/editor/tools.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,KAAK,GACL,WAAW,GACX,cAAc,GACd,WAAW,GACX,OAAO,GACP,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,cAAc,GACd,oBAAoB,CAAC;AAEzB,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC;IAC/B,EAAE,EAAE,UAAU,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iEAAiE;IACjE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;IACxB,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CA2BA,CAAC;AAEF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMjD;AAED,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,mEAAmE;AACnE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,uEAAuE;AACvE,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACrC,MAAM,GAAG,IAAI,CAGf;AAmQD,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEzD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEzD;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEzD;AAED,wDAAwD;AACxD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAE3D;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAE3D;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAQ7D;AAED,2DAA2D;AAC3D,wBAAgB,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAGhF;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CA0BjD;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,gFAAgF;IAChF,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;CACzB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,KAAK,GACN,EAAE,sBAAsB,qBAyCxB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,OAAO,EACP,OAAO,EACP,QAAgB,EAChB,MAAM,EACN,MAAM,GACP,EAAE,yBAAyB,qBAyB3B"}