@toolpath/viewer 1.3.0 → 1.5.0

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.
@@ -1,5 +1,5 @@
1
- import { P as PartModel, a as PartMeshRefs } from '../normalize-DHOSNiuO.js';
2
- export { E as EnginePart, b as EnginePartProps, M as MIN_KERNEL_VERSION, c as assertSupportedKernelVersion, n as normalizePartReport, s as smoothRegionNormals } from '../normalize-DHOSNiuO.js';
1
+ import { P as PartModel, a as PartMeshRefs } from '../normalize-CvnV9Ggh.js';
2
+ export { E as EnginePart, b as EnginePartProps, M as MIN_KERNEL_VERSION, c as assertSupportedKernelVersion, n as normalizePartReport, s as smoothRegionNormals } from '../normalize-CvnV9Ggh.js';
3
3
  import { BufferGeometry } from 'three';
4
4
  import 'react';
5
5
 
@@ -12,7 +12,7 @@ import {
12
12
  parsePartGeometry,
13
13
  partMeshAssets,
14
14
  smoothRegionNormals
15
- } from "../chunk-HWAEUJ4H.js";
15
+ } from "../chunk-4TBLMR4Z.js";
16
16
  export {
17
17
  EnginePart,
18
18
  MIN_KERNEL_VERSION,
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { P as PartModel, V as Vec3, d as ViewerTheme, S as SectionOptions, e as SectionState, f as PartModelRegion, T as TriangleRange, F as FeatureTag, R as RegionIndex, g as PartModelFeature, h as FeatureType } from './normalize-DHOSNiuO.js';
2
- export { A as AXES_PLANE_OFFSET, i as AXES_PLANE_SCALE, j as AxesPlane, B as BuildPickInput, C as CANDIDATE_WEIGHT, k as CAP_HATCH, D as DEFAULT_SECTION_NORMAL, l as DEFAULT_THEME, m as DIRECTION_COLORS, o as DISABLED_SECTION, E as EnginePart, p as FeatureHighlight, H as HANDLE_PIXELS, q as HIGHLIGHT_COLORS, r as HIGHLIGHT_WEIGHT, t as HOVER_WEIGHT, u as HighlightLayers, K as KnownFeatureType, v as KnownShapeKind, N as NO_MODIFIERS, O as OUTLINE_SCALE, w as PICKED_SURFACE_LABEL, x as PREVIEW_SCALE, y as PartMesh, z as PartMeshProps, a as PartMeshRefs, G as PartObject, I as PartPick, J as PickModifiers, L as REGION_ATTRIBUTE, Q as RegionHighlight, U as RegionPaint, W as SECTION_RENDER_ORDER, X as SectionAnchor, Y as SectionBounds, Z as SectionPlacement, _ as ShapeKind, $ as SurfaceHit, a0 as applyHighlightLayers, a1 as axesPlanes, a2 as buildPick, a3 as buildRegionAttribute, a4 as buildRegionTexels, a5 as createPart, a6 as directionColor, a7 as dragPlane, a8 as focusForPick, a9 as hitUnderRay, n as normalizePartReport, aa as pickedStartDepth, ab as resolveTheme, ac as sectionAnchor, ad as sectionBounds, ae as sectionConstant, af as sectionDepth, ag as sectionDepthConstant, ah as sectionDepthRange, ai as sectionFromPick, aj as sectionOffset, ak as sectionOptionsFromState, al as sectionPlane, s as smoothRegionNormals, am as surfaceUnderRay, an as themesEqual, ao as viewDirection } from './normalize-DHOSNiuO.js';
3
- import { BufferGeometry, CanvasTexture, Box3, Plane, Vector3, OrthographicCamera, PerspectiveCamera, Object3D, Matrix4, Vector2, Ray, ShaderMaterial, Texture, Color, MeshBasicMaterial, WebGLRenderTarget } from 'three';
1
+ import { P as PartModel, d as PartPick, V as Vec3, R as RegionHighlight, e as ViewerTheme, S as SectionOptions, f as SectionState, g as PartModelRegion, T as TriangleRange, F as FeatureTag, h as RegionIndex, i as PartModelFeature, j as FeatureType } from './normalize-CvnV9Ggh.js';
2
+ export { A as AXES_PLANE_OFFSET, k as AXES_PLANE_SCALE, l as AxesPlane, B as BuildPickInput, C as CANDIDATE_WEIGHT, m as CAP_HATCH, D as DEFAULT_SECTION_NORMAL, o as DEFAULT_THEME, p as DIRECTION_COLORS, q as DISABLED_SECTION, E as EnginePart, r as FeatureHighlight, t as FocusOptions, H as HANDLE_PIXELS, u as HIGHLIGHT_COLORS, v as HIGHLIGHT_WEIGHT, w as HOVER_WEIGHT, x as HighlightLayers, K as KnownFeatureType, y as KnownShapeKind, N as NO_MODIFIERS, O as OUTLINE_SCALE, z as PICKED_SURFACE_LABEL, G as PREVIEW_SCALE, I as PartDisplay, J as PartMesh, L as PartMeshProps, a as PartMeshRefs, Q as PartObject, U as PickModifiers, W as PointerLocation, X as REGION_ATTRIBUTE, Y as RegionPaint, Z as SECTION_GIZMO_FRAME_SCALE, _ as SECTION_RENDER_ORDER, $ as SectionAnchor, a0 as SectionBounds, a1 as SectionPlacement, a2 as ShapeKind, a3 as SurfaceHit, a4 as applyHighlightLayers, a5 as axesPlanes, a6 as buildPick, a7 as buildRegionAttribute, a8 as buildRegionTexels, a9 as createPart, aa as directionColor, ab as dragPlane, ac as focusForPick, ad as hitUnderRay, n as normalizePartReport, ae as pickedStartDepth, af as resolveTheme, ag as sectionAnchor, ah as sectionBounds, ai as sectionConstant, aj as sectionDepth, ak as sectionDepthConstant, al as sectionDepthRange, am as sectionFromPick, an as sectionMeasurement, ao as sectionOffset, ap as sectionOptionsFromState, aq as sectionPlane, s as smoothRegionNormals, ar as surfaceUnderRay, as as themesEqual, at as viewDirection } from './normalize-CvnV9Ggh.js';
3
+ import { BufferGeometry, Box3, CanvasTexture, Plane, Vector3, OrthographicCamera, PerspectiveCamera, Object3D, Matrix4, Vector2, Ray, ShaderMaterial, Texture, Color, MeshBasicMaterial, WebGLRenderTarget } from 'three';
4
4
  import * as react from 'react';
5
- import { RefObject, ReactNode, CSSProperties } from 'react';
5
+ import { ReactNode, PropsWithChildren, RefObject, CSSProperties } from 'react';
6
6
  import CameraControls from 'camera-controls';
7
7
 
8
8
  /**
@@ -13,6 +13,163 @@ import CameraControls from 'camera-controls';
13
13
  */
14
14
  declare function regionAdjacency(model: PartModel, geometry: BufferGeometry): Map<number, Set<number>>;
15
15
 
16
+ interface HoverCardProps {
17
+ /** The current `onHover` pick, or `null` after the pointer leaves the part. */
18
+ pick: PartPick | null;
19
+ /** Card content belongs to the application that understands the feature data. */
20
+ children: (pick: PartPick) => ReactNode;
21
+ /** Added beside the stable `viewer-hover-card` class. */
22
+ className?: string;
23
+ offset?: number;
24
+ }
25
+ /** A cursor-following shell for an application-owned part hover card. */
26
+ declare const HoverCard: ({ pick, children, className, offset }: HoverCardProps) => react.JSX.Element | null;
27
+
28
+ /** One action a toolbar button can read and invoke. */
29
+ interface ViewerToolbarControl {
30
+ /** Whether a toggle-style control is currently active. */
31
+ pressed?: boolean;
32
+ /** Invoked when the control is clicked. */
33
+ onClick: () => void;
34
+ }
35
+ /**
36
+ * The state and actions that toolbar controls read from their enclosing
37
+ * {@link ViewerToolbarProvider}.
38
+ *
39
+ * Controls are optional so an application can expose only the buttons it
40
+ * renders. Rendering a button without its matching control is an error.
41
+ */
42
+ interface ViewerToolbarControls {
43
+ stock?: ViewerToolbarControl;
44
+ axes?: ViewerToolbarControl;
45
+ grid?: ViewerToolbarControl;
46
+ banana?: ViewerToolbarControl;
47
+ directions?: ViewerToolbarControl;
48
+ hover?: ViewerToolbarControl;
49
+ focus?: ViewerToolbarControl;
50
+ wireframe?: ViewerToolbarControl;
51
+ section?: ViewerToolbarControl;
52
+ measure?: ViewerToolbarControl;
53
+ fit?: ViewerToolbarControl;
54
+ reset?: ViewerToolbarControl;
55
+ top?: ViewerToolbarControl;
56
+ }
57
+ /** Supplies viewer state and callbacks to a toolbar and its compound controls. */
58
+ declare const ViewerToolbarProvider: ({ controls, children, }: PropsWithChildren<{
59
+ controls: ViewerToolbarControls;
60
+ }>) => react.JSX.Element;
61
+ /**
62
+ * Read the state and callbacks configured for the enclosing viewer toolbar.
63
+ *
64
+ * Use this to build a toolbar control with an application's own component kit.
65
+ */
66
+ declare const useViewerToolbar: () => ViewerToolbarControls;
67
+ interface ViewerToolbarControlsProps extends PropsWithChildren {
68
+ /** Added to the standard toolbar control group. */
69
+ className?: string;
70
+ }
71
+ interface ViewerToolbarProps {
72
+ /** Added to the outer toolbar stack, beside `viewer-toolbar-stack`. */
73
+ className?: string;
74
+ /**
75
+ * Toolbar contents. Omit this for the standard control order, or compose
76
+ * `ViewerToolbar.Controls` with the individual button components.
77
+ */
78
+ children?: ReactNode;
79
+ }
80
+ declare const ViewerToolbar: (({ className, children }: ViewerToolbarProps) => react.JSX.Element) & {
81
+ Controls: ({ children, className }: ViewerToolbarControlsProps) => react.JSX.Element;
82
+ Divider: () => react.JSX.Element;
83
+ StockButton: () => react.JSX.Element;
84
+ AxesButton: () => react.JSX.Element;
85
+ GridButton: () => react.JSX.Element;
86
+ BananaButton: () => react.JSX.Element;
87
+ DirectionsButton: () => react.JSX.Element;
88
+ HoverButton: () => react.JSX.Element;
89
+ FocusButton: () => react.JSX.Element;
90
+ WireframeButton: () => react.JSX.Element;
91
+ SectionButton: () => react.JSX.Element;
92
+ MeasureButton: () => react.JSX.Element;
93
+ FitButton: () => react.JSX.Element;
94
+ ResetButton: () => react.JSX.Element;
95
+ TopButton: () => react.JSX.Element;
96
+ };
97
+
98
+ /**
99
+ * Per-side stock left in millimetres, in the part's coordinates.
100
+ *
101
+ * `wall` is radial stock on X/Y and `floor` is axial stock on Z. The number
102
+ * and `{ x, y, z }` forms remain accepted for callers using the original
103
+ * uniform/axis-specific box-stock API.
104
+ */
105
+ type StockAllowance = number | Vec3 | {
106
+ wall: number;
107
+ floor: number;
108
+ };
109
+ /** How an explicit box is positioned relative to the part's Z bounds. */
110
+ type StockPosition = 'model_centered' | 'offset_from_top' | 'offset_from_bottom';
111
+ /**
112
+ * Bounds for an explicit fixed box. X/Y are centered on the part's bounding
113
+ * box; Z is centered, offset from the top, or offset from the bottom. `offset`
114
+ * then translates the complete box in part coordinates.
115
+ */
116
+ declare function fixedBoxStockBounds(geometry: BufferGeometry, dimensions: Vec3, position?: StockPosition, positionOffset?: number, offset?: Vec3): Box3;
117
+ /** Per-side allowance and centre offset in millimetres, in the part's coordinates. */
118
+ declare function boxStockBounds(geometry: BufferGeometry, allowance?: StockAllowance, offset?: Vec3): Box3;
119
+
120
+ interface StockProps {
121
+ /** Caller-owned stock mesh in the same millimetre, Z-up coordinates as the part. */
122
+ geometry: BufferGeometry;
123
+ color?: number;
124
+ opacity?: number;
125
+ edgeColor?: number;
126
+ edgeOpacity?: number;
127
+ showEdges?: boolean;
128
+ }
129
+ /** Translucent stock, included in Fit but ignored by picking, sections and measurements. */
130
+ declare const Stock: ({ geometry, color, opacity, edgeColor, edgeOpacity, showEdges, }: StockProps) => react.JSX.Element;
131
+ interface BoxStockProps extends Omit<StockProps, 'geometry'> {
132
+ partGeometry: BufferGeometry;
133
+ /** Explicit X/Y/Z dimensions, in millimetres, for fixed-box stock. */
134
+ dimensions?: Vec3;
135
+ /** Position mode for explicit fixed-box stock. Defaults to model-centered. */
136
+ position?: StockPosition;
137
+ /** Distance from the selected top/bottom part bound, in millimetres. */
138
+ positionOffset?: number;
139
+ /**
140
+ * Stock left around the part, in millimetres. In the `{ wall, floor }` form,
141
+ * wall applies to X/Y and floor applies to Z. Number and `{ x, y, z }` forms
142
+ * are retained for compatibility. Defaults to zero.
143
+ */
144
+ allowance?: StockAllowance;
145
+ /** Translation from the part's bounding-box centre, in millimetres. */
146
+ offset?: Vec3;
147
+ }
148
+ /** An axis-aligned blank around the part. Use Stock for an arbitrary stock mesh. */
149
+ declare const BoxStock: ({ partGeometry, dimensions, position, positionOffset, allowance, offset, ...props }: BoxStockProps) => react.JSX.Element;
150
+
151
+ /** The six-inch (154 mm) reference model bundled with `@toolpath/viewer`. */
152
+ declare const BANANA_MODEL_URL: string;
153
+ interface BananaProps {
154
+ /** Bounds of the part and placed banana, for `ViewerHandle.frameBox`. */
155
+ onPlaced?: (bounds: Box3) => void;
156
+ }
157
+ /**
158
+ * A 154 mm banana beside the part, for immediate visual scale.
159
+ *
160
+ * It is excluded from normal part framing and overlay placement. Applications
161
+ * can use `onPlaced` to intentionally frame the comparison together. The model
162
+ * is fetched only when this component is mounted.
163
+ */
164
+ declare const Banana: ({ onPlaced }: BananaProps) => react.JSX.Element | null;
165
+
166
+ /**
167
+ * A stable direction wash, optionally scoped to one candidate direction.
168
+ * Shared faces take the most specific owner, then candidate order and tag.
169
+ * Unknown directions remain unpainted; no invented machining direction.
170
+ */
171
+ declare function directionHighlights(model: PartModel, activeDirection?: number | null): readonly RegionHighlight[];
172
+
16
173
  /**
17
174
  * The 26 standard views: the six faces of the cube, the twelve edges between
18
175
  * them, and its eight corners.
@@ -202,6 +359,8 @@ interface SectionViewProps {
202
359
  box: Box3;
203
360
  plane: Plane;
204
361
  theme: ViewerTheme;
362
+ /** An explicit `sectionHandle` override, if the caller supplied one. */
363
+ handleColor?: number;
205
364
  showHandle: boolean;
206
365
  onDrag?: (constant: number) => void;
207
366
  }
@@ -225,7 +384,7 @@ interface SectionViewProps {
225
384
  * no-op — the cut still happens and the part still looks hollow, which is a
226
385
  * confusing way to find out.
227
386
  */
228
- declare const SectionView: ({ geometry, box, plane, theme, showHandle, onDrag, }: SectionViewProps) => react.JSX.Element;
387
+ declare const SectionView: ({ geometry, box, plane, theme, handleColor, showHandle, onDrag, }: SectionViewProps) => react.JSX.Element;
229
388
 
230
389
  interface SectionToolProps {
231
390
  theme?: Partial<ViewerTheme>;
@@ -245,7 +404,9 @@ interface SectionToolProps {
245
404
  * the way to set or clear it from outside the canvas. While this is mounted
246
405
  * the part reports no hovers or picks: a click on a face cuts through it
247
406
  * without also selecting it, and a cut part is looked at rather than picked
248
- * at. Unmounting it hands the pointer back.
407
+ * at. Unmounting it hands the pointer back. While it is offering a cut — up,
408
+ * with none placed yet — a `<MeasureTool>` beside it waits too, so the click
409
+ * that chooses the cut does not also place a measurement point.
249
410
  */
250
411
  declare const SectionTool: ({ theme }: SectionToolProps) => react.JSX.Element | null;
251
412
 
@@ -687,7 +848,12 @@ interface MeasureToolProps {
687
848
  *
688
849
  * Nothing needs wiring. While it is mounted the part reports no hovers or
689
850
  * picks — a click that places a point is not a click that selects a face — and
690
- * unmounting it hands the pointer back. It snaps to the edges the part draws,
851
+ * unmounting it hands the pointer back. Beside a `<SectionTool>` that has no
852
+ * cut yet it waits: no snap is offered and no click places a point until the
853
+ * cut is chosen or the section tool is unmounted, and the click that chooses
854
+ * the cut — the one it wakes on — places nothing either: a click counts only
855
+ * when it was pressed as well as released while the tool was taking points.
856
+ * Measurements already made stay up meanwhile. It snaps to the edges the part draws,
691
857
  * which are the boundaries between analytic surfaces rather than the mesh's
692
858
  * triangles, so a corner is a corner of the part and not of a facet.
693
859
  *
@@ -723,6 +889,12 @@ declare const MeasureTool: ({ mode, measurements, onChange, showDeltas, format,
723
889
  * on a face is not a request to select the face — which is why the flag is a
724
890
  * count rather than a boolean: two tools up at once let go one at a time.
725
891
  *
892
+ * And whether a tool is **picking** — `<SectionTool>` is up with no cut in
893
+ * place, so the next click on the part chooses where the cut goes. That click
894
+ * is the section tool's alone: `<MeasureTool>` beside it offers no snap and
895
+ * places no point until the cut is chosen or the section tool is unmounted.
896
+ * Counted for the same reason as `engaged`.
897
+ *
726
898
  * A subscription rather than React state, so a drag re-renders the two
727
899
  * subscribers and not everything under the canvas.
728
900
  */
@@ -733,7 +905,11 @@ interface SectionStore {
733
905
  isEngaged(): boolean;
734
906
  /** Counted: a tool engages on mount and disengages on unmount, and the part waits for the last. */
735
907
  setEngaged(engaged: boolean): void;
736
- /** Notified on every change to either the cut or the engaged flag. */
908
+ /** Whether a section tool is waiting for a click to say where the cut goes. */
909
+ isPicking(): boolean;
910
+ /** Counted, as `setEngaged` is: raised while a section tool offers a cut, dropped once one is placed. */
911
+ setPicking(picking: boolean): void;
912
+ /** Notified on every change to the cut, the engaged flag, or the picking flag. */
737
913
  subscribe(listener: () => void): () => void;
738
914
  }
739
915
  declare function createSectionStore(): SectionStore;
@@ -879,7 +1055,7 @@ declare function arrowPlacement(direction: Vec3, box: Box3): ArrowPlacement;
879
1055
  * viewer's opening frame waits. Measured once: an overlay that re-fitted itself
880
1056
  * while the part was being orbited would be a grid that breathes.
881
1057
  *
882
- * Scene furniture is excluded, so the grid and the axes do not size each other.
1058
+ * Scene furniture and stock are excluded, so tools stay sized to the finished part.
883
1059
  */
884
1060
  declare function useContentBox(): Box3;
885
1061
 
@@ -1021,6 +1197,13 @@ declare function gridSpec(box: Box3): GridSpec;
1021
1197
  */
1022
1198
  declare function gridGeometry(spec: GridSpec): BufferGeometry;
1023
1199
 
1200
+ /** The clearance between a part and the banana, as a fraction of part reach. */
1201
+ declare const BANANA_GAP = 0.1;
1202
+ /** Places a banana on the same ground plane, just to the right of a part. */
1203
+ declare function bananaPosition(part: Box3, banana: Box3): Vector3;
1204
+ /** The bounds a consumer should frame when showing a banana for scale. */
1205
+ declare function bananaFrameBounds(part: Box3, banana: Box3, position: Vector3): Box3;
1206
+
1024
1207
  /**
1025
1208
  * The lines between regions, and nothing else.
1026
1209
  *
@@ -1060,16 +1243,36 @@ type SurfaceOf = ReadonlyMap<number, number>;
1060
1243
  */
1061
1244
  declare function visualSurfaces(regions: readonly PartModelRegion[]): SurfaceOf;
1062
1245
 
1063
- /**
1064
- * Mouse and trackpad presets.
1065
- *
1066
- * - `toolpath` — left-drag orbits, right- and middle-drag pan. The product
1067
- * default.
1068
- * - `fusion` — middle-drag and two-finger scroll pan, shift makes them orbit,
1069
- * pinch zooms. Matches Fusion 360, which is what most of our users have open
1070
- * in the other window.
1071
- */
1072
- type ControlScheme = 'toolpath' | 'fusion';
1246
+ /** A named CAD navigation preset a consumer may pass to `<Viewer controls>`. */
1247
+ declare const CONTROL_SCHEME_OPTIONS: readonly [{
1248
+ readonly value: "toolpath";
1249
+ readonly label: "Toolpath";
1250
+ }, {
1251
+ readonly value: "fusion";
1252
+ readonly label: "Fusion";
1253
+ }, {
1254
+ readonly value: "alias";
1255
+ readonly label: "Alias";
1256
+ }, {
1257
+ readonly value: "inventor";
1258
+ readonly label: "Inventor";
1259
+ }, {
1260
+ readonly value: "solidworks";
1261
+ readonly label: "SolidWorks";
1262
+ }, {
1263
+ readonly value: "tinkercad";
1264
+ readonly label: "Tinkercad";
1265
+ }, {
1266
+ readonly value: "powermill";
1267
+ readonly label: "PowerMill";
1268
+ }, {
1269
+ readonly value: "onshape";
1270
+ readonly label: "Onshape";
1271
+ }];
1272
+ /** The public values accepted by `<Viewer controls>` and `CadCameraControls`. */
1273
+ type ControlScheme = (typeof CONTROL_SCHEME_OPTIONS)[number]['value'];
1274
+ type ControlSchemeOption = (typeof CONTROL_SCHEME_OPTIONS)[number];
1275
+
1073
1276
  type ExtendedCameraControlsOptions = {
1074
1277
  /**
1075
1278
  * Orbit past the poles instead of stopping there. When enabled the up vector
@@ -1078,8 +1281,8 @@ type ExtendedCameraControlsOptions = {
1078
1281
  readonly freeOrbit?: boolean | undefined;
1079
1282
  };
1080
1283
  /**
1081
- * `CameraControls` with free orbit, camera-relative up, and the Fusion wheel
1082
- * scheme.
1284
+ * `CameraControls` with free orbit, camera-relative up, and CAD navigation
1285
+ * schemes.
1083
1286
  *
1084
1287
  * Two departures from the legacy implementation, both deliberate:
1085
1288
  *
@@ -1575,4 +1778,4 @@ declare const ORBIT_TARGET_FADE_MS = 1000;
1575
1778
  */
1576
1779
  declare function orbitTargetOpacity(sinceHold: number, fade?: number): number;
1577
1780
 
1578
- export { ANGLE_ARC_FRACTION, ANGLE_ARC_SEGMENTS, AXIS_COLORS, type AngleMeasurement, type ArrowPlacement, Axes, type AxesProps, type Axis, type AxisLock, CAD_CAMERA_UP, CHAMFER, CadCameraControls, type CadCameraControlsProps, type CameraLimits, type CapMaterial, type CapUniforms, type ControlScheme, type CubeZone, DEFAULT_FIT_MARGIN, DELTA_DASH_PIXELS, DOUBLE_TAP_MS, type DeltaLeg, DirectionArrows, type DirectionArrowsProps, type DirectionGroup, type DistanceMeasurement, type DoubleTapPoint, type DoubleTapTracker, EXCLUDE_FROM_FRAME, ExtendedCameraControls, type ExtendedCameraControlsOptions, FEATURE_TYPE_RANKS, FeatureTag, FeatureType, Grid, type GridProps, type GridSpec, MAX_FRAME_RATIO, MEASURE_LABEL_CLASS, MEASURE_LINE_PIXELS, MEASURE_MARKER_PIXELS, MEASURE_RENDER_ORDER, MIN_FRAME_RATIO, type MeasureLabelKind, type MeasureMode, MeasureTool, type MeasureToolProps, type Measurement, type NamedDirection, ORBIT_TARGET_COLOR, ORBIT_TARGET_FADE_MS, ORBIT_TARGET_FLASH_MS, ORBIT_TARGET_PIXELS, ORBIT_TARGET_RING_COLOR, ORBIT_TARGET_RING_OPACITY, ORBIT_TARGET_RING_PIXELS, ORBIT_TARGET_RING_WIDTH, PERSPECTIVE_FOV, POINTS_PER_MEASUREMENT, PartModel, PartModelFeature, PartModelRegion, PartReportFormatError, type Projection, type RankingContext, RegionIndex, type Retarget, type RetargetPose, SNAP_MARKER_PIXELS, SNAP_PIXELS, type SceneBounds, SectionOptions, type SectionSample, SectionState, type SectionStore, SectionTool, type SectionToolProps, SectionView, type Snap, type SnapEdges, type SnapHit, type SnapKind, type SurfaceOf, TAP_SLOP, type TapPoint, type TapTracker, TriangleRange, UnsupportedKernelVersionError, VIEW_NAMES, VIEW_SIGNS, Vec3, ViewCube, type ViewCubeProps, type ViewKind, type ViewName, Viewer, type ViewerCamera, type ViewerControls, type ViewerHandle, type ViewerProps, ViewerTheme, type ViewerView, type ViewportSize, adaptedUp, angleArc, angleArcRadius, angleAt, applyCapTheme, applyProjection, arrowPlacement, aspectRatio, bestOwner, boundsFromBox, buildRegionIndex, cadViewDirections, cameraLimits, capHit, clipSegments, contentBounds, createCapMaterial, createMaskMaterial, createMaskTarget, createSectionStore, createStencilMaterials, cubeOutlineGeometry, cubeZones, currentViewDirection, cycleOwner, defaultBounds, deltaBetween, deltaLegs, directionIndexOf, directionLabel, distanceBetween, excludedFromFrame, featureTypeRank, fitDistance, formatDegrees, formatMillimetres, gridGeometry, gridSpec, groupByDirection, labelGeometry, labelTexture, lockToAxis, measurementFromPoints, measurementLabel, measurementLabelAnchor, midpoint, movedFar, nextMeasurementId, orbitTargetOpacity, orthographicHalfHeight, panelGeometry, perspectiveFitDistance, pointInContour, rankOwners, regionAdjacency, regionEdgesGeometry, regionNormals, resolveSectionPlane, retargetPose, sameDirection, sampleSection, screenLength, screenPoint, sectionContour, snapAt, squaredUp, startPosition, targetBoundary, trackDoubleTaps, trackTaps, useContentBox, useRetarget, useSectionStore, useTapGuard, useViewerControls, viewKind, viewUp, viewVector, visualSurfaces };
1781
+ export { ANGLE_ARC_FRACTION, ANGLE_ARC_SEGMENTS, AXIS_COLORS, type AngleMeasurement, type ArrowPlacement, Axes, type AxesProps, type Axis, type AxisLock, BANANA_GAP, BANANA_MODEL_URL, Banana, type BananaProps, BoxStock, type BoxStockProps, CAD_CAMERA_UP, CHAMFER, CONTROL_SCHEME_OPTIONS, CadCameraControls, type CadCameraControlsProps, type CameraLimits, type CapMaterial, type CapUniforms, type ControlScheme, type ControlSchemeOption, type CubeZone, DEFAULT_FIT_MARGIN, DELTA_DASH_PIXELS, DOUBLE_TAP_MS, type DeltaLeg, DirectionArrows, type DirectionArrowsProps, type DirectionGroup, type DistanceMeasurement, type DoubleTapPoint, type DoubleTapTracker, EXCLUDE_FROM_FRAME, ExtendedCameraControls, type ExtendedCameraControlsOptions, FEATURE_TYPE_RANKS, FeatureTag, FeatureType, Grid, type GridProps, type GridSpec, HoverCard, type HoverCardProps, MAX_FRAME_RATIO, MEASURE_LABEL_CLASS, MEASURE_LINE_PIXELS, MEASURE_MARKER_PIXELS, MEASURE_RENDER_ORDER, MIN_FRAME_RATIO, type MeasureLabelKind, type MeasureMode, MeasureTool, type MeasureToolProps, type Measurement, type NamedDirection, ORBIT_TARGET_COLOR, ORBIT_TARGET_FADE_MS, ORBIT_TARGET_FLASH_MS, ORBIT_TARGET_PIXELS, ORBIT_TARGET_RING_COLOR, ORBIT_TARGET_RING_OPACITY, ORBIT_TARGET_RING_PIXELS, ORBIT_TARGET_RING_WIDTH, PERSPECTIVE_FOV, POINTS_PER_MEASUREMENT, PartModel, PartModelFeature, PartModelRegion, PartPick, PartReportFormatError, type Projection, type RankingContext, RegionHighlight, RegionIndex, type Retarget, type RetargetPose, SNAP_MARKER_PIXELS, SNAP_PIXELS, type SceneBounds, SectionOptions, type SectionSample, SectionState, type SectionStore, SectionTool, type SectionToolProps, SectionView, type Snap, type SnapEdges, type SnapHit, type SnapKind, Stock, type StockAllowance, type StockPosition, type StockProps, type SurfaceOf, TAP_SLOP, type TapPoint, type TapTracker, TriangleRange, UnsupportedKernelVersionError, VIEW_NAMES, VIEW_SIGNS, Vec3, ViewCube, type ViewCubeProps, type ViewKind, type ViewName, Viewer, type ViewerCamera, type ViewerControls, type ViewerHandle, type ViewerProps, ViewerTheme, ViewerToolbar, type ViewerToolbarControl, type ViewerToolbarControls, type ViewerToolbarControlsProps, type ViewerToolbarProps, ViewerToolbarProvider, type ViewerView, type ViewportSize, adaptedUp, angleArc, angleArcRadius, angleAt, applyCapTheme, applyProjection, arrowPlacement, aspectRatio, bananaFrameBounds, bananaPosition, bestOwner, boundsFromBox, boxStockBounds, buildRegionIndex, cadViewDirections, cameraLimits, capHit, clipSegments, contentBounds, createCapMaterial, createMaskMaterial, createMaskTarget, createSectionStore, createStencilMaterials, cubeOutlineGeometry, cubeZones, currentViewDirection, cycleOwner, defaultBounds, deltaBetween, deltaLegs, directionHighlights, directionIndexOf, directionLabel, distanceBetween, excludedFromFrame, featureTypeRank, fitDistance, fixedBoxStockBounds, formatDegrees, formatMillimetres, gridGeometry, gridSpec, groupByDirection, labelGeometry, labelTexture, lockToAxis, measurementFromPoints, measurementLabel, measurementLabelAnchor, midpoint, movedFar, nextMeasurementId, orbitTargetOpacity, orthographicHalfHeight, panelGeometry, perspectiveFitDistance, pointInContour, rankOwners, regionAdjacency, regionEdgesGeometry, regionNormals, resolveSectionPlane, retargetPose, sameDirection, sampleSection, screenLength, screenPoint, sectionContour, snapAt, squaredUp, startPosition, targetBoundary, trackDoubleTaps, trackTaps, useContentBox, useRetarget, useSectionStore, useTapGuard, useViewerControls, useViewerToolbar, viewKind, viewUp, viewVector, visualSurfaces };