@toolpath/viewer 1.5.0 → 2.1.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.
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
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';
1
+ import { P as PartModel, F as FeatureTag, d as PartPick, V as Vec3, R as RegionHighlight, e as ViewerTheme, S as SectionOptions, f as SectionState, g as PartModelRegion, T as TriangleRange, h as RegionIndex, i as PartModelFeature, j as FeatureType } from './normalize--FiXUhO4.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--FiXUhO4.js';
3
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
5
  import { ReactNode, PropsWithChildren, RefObject, CSSProperties } from 'react';
@@ -13,6 +13,49 @@ import CameraControls from 'camera-controls';
13
13
  */
14
14
  declare function regionAdjacency(model: PartModel, geometry: BufferGeometry): Map<number, Set<number>>;
15
15
 
16
+ /**
17
+ * A feature's faces as plain triangles: what something placed on the part
18
+ * fits itself against, without needing three.js to read them.
19
+ */
20
+ interface FeatureTriangles {
21
+ /** Nine numbers a triangle — its three corners, x, y, z each — in the geometry's coordinates. */
22
+ readonly positions: Float32Array;
23
+ /** Three a triangle: its unit normal, pointing out of the part. */
24
+ readonly normals: Float32Array;
25
+ }
26
+ /**
27
+ * Every triangle of a feature's faces, read out of the mesh through the
28
+ * region index.
29
+ *
30
+ * Each normal is the mesh's own where it has them — the average of the three
31
+ * corners' — because they say which side is outside whatever order a
32
+ * triangle's corners are wound in. A mesh without normals gives each triangle
33
+ * its winding's. A triangle with no area has no normal and is left out.
34
+ *
35
+ * Indexed and non-indexed meshes both read: triangle `t` is corners `3t` to
36
+ * `3t + 2` of the index where there is one, of the positions where there is
37
+ * not. Empty for a tag the part does not have, or a geometry with no positions.
38
+ */
39
+ declare function featureTriangles(model: Pick<PartModel, 'regionIndex'>, geometry: BufferGeometry, tag: FeatureTag): FeatureTriangles;
40
+
41
+ /**
42
+ * The part an overlay is drawn on: its model and the mesh `<PartMesh>` draws.
43
+ *
44
+ * `<EnginePart>` loads its mesh itself, so a child of it has no other way to
45
+ * reach the geometry — and an overlay placed on the part, such as
46
+ * `<ToolMarks>` at a feature's faces, needs the triangles it is drawn against.
47
+ */
48
+ interface PartContextValue {
49
+ readonly model: PartModel;
50
+ /** In the coordinates the part is drawn in: the caller's, whatever it did to centre it. */
51
+ readonly geometry: BufferGeometry;
52
+ }
53
+ /**
54
+ * The part this is drawn inside: a child of `<PartMesh>` or `<EnginePart>`.
55
+ * Throws anywhere else, as `useViewerControls` does outside `<Viewer>`.
56
+ */
57
+ declare const usePartContext: () => PartContextValue;
58
+
16
59
  interface HoverCardProps {
17
60
  /** The current `onHover` pick, or `null` after the pointer leaves the part. */
18
61
  pick: PartPick | null;
@@ -44,6 +87,8 @@ interface ViewerToolbarControls {
44
87
  axes?: ViewerToolbarControl;
45
88
  grid?: ViewerToolbarControl;
46
89
  banana?: ViewerToolbarControl;
90
+ /** Tools drawn on the part: see `<ToolMarks>`. */
91
+ tools?: ViewerToolbarControl;
47
92
  directions?: ViewerToolbarControl;
48
93
  hover?: ViewerToolbarControl;
49
94
  focus?: ViewerToolbarControl;
@@ -84,6 +129,7 @@ declare const ViewerToolbar: (({ className, children }: ViewerToolbarProps) => r
84
129
  AxesButton: () => react.JSX.Element;
85
130
  GridButton: () => react.JSX.Element;
86
131
  BananaButton: () => react.JSX.Element;
132
+ ToolsButton: () => react.JSX.Element;
87
133
  DirectionsButton: () => react.JSX.Element;
88
134
  HoverButton: () => react.JSX.Element;
89
135
  FocusButton: () => react.JSX.Element;
@@ -106,8 +152,82 @@ type StockAllowance = number | Vec3 | {
106
152
  wall: number;
107
153
  floor: number;
108
154
  };
109
- /** How an explicit box is positioned relative to the part's Z bounds. */
155
+ /** How explicit fixed stock is positioned relative to the part's Z bounds. */
110
156
  type StockPosition = 'model_centered' | 'offset_from_top' | 'offset_from_bottom';
157
+ /**
158
+ * Round stock in part coordinates, in millimetres: the centre of its base, the
159
+ * direction from the base toward its far end, and its size. The Engine's
160
+ * resolved `StockCylinder` carries the same four figures.
161
+ */
162
+ interface CylinderStockFigure {
163
+ origin: Vec3;
164
+ axis: Vec3;
165
+ diameter: number;
166
+ length: number;
167
+ }
168
+ /**
169
+ * A block squared to a frame of its own rather than to the part, in
170
+ * millimetres. `lower` and `upper` are corners in `frame`, whose point
171
+ * `(x, y, z)` sits at `location + x·refDirection + y·(axis × refDirection) + z·axis`
172
+ * in part coordinates, with `axis` normalised and `refDirection` projected
173
+ * square to it and normalised. This is the shape of the Engine's plan
174
+ * `StockBox`, which is squared to the setup.
175
+ */
176
+ interface BoxStockFigure {
177
+ /** Omit for a box whose corners are already in part coordinates. */
178
+ frame?: {
179
+ location: Vec3;
180
+ axis: Vec3;
181
+ refDirection: Vec3;
182
+ };
183
+ lower: Vec3;
184
+ upper: Vec3;
185
+ }
186
+ /** Box preview around the part: explicit dimensions or per-side allowance. */
187
+ type BoxStockPreview = {
188
+ partGeometry: BufferGeometry;
189
+ offset?: Vec3;
190
+ } & ({
191
+ dimensions: Vec3;
192
+ position?: StockPosition;
193
+ positionOffset?: number;
194
+ allowance?: never;
195
+ } | {
196
+ allowance?: StockAllowance;
197
+ dimensions?: never;
198
+ position?: never;
199
+ positionOffset?: never;
200
+ });
201
+ /** Resolved corners or part-relative preview options, never both. */
202
+ type BoxStockInput = (BoxStockFigure & {
203
+ partGeometry?: never;
204
+ offset?: never;
205
+ allowance?: never;
206
+ dimensions?: never;
207
+ position?: never;
208
+ positionOffset?: never;
209
+ }) | (BoxStockPreview & {
210
+ lower?: never;
211
+ upper?: never;
212
+ frame?: never;
213
+ });
214
+ /** Upright cylinder preview centered on the part's bounding box. */
215
+ interface CylinderStockPreview {
216
+ partGeometry: BufferGeometry;
217
+ diameter: number;
218
+ length: number;
219
+ position?: StockPosition;
220
+ positionOffset?: number;
221
+ }
222
+ /** Resolved cylinder placement or part-relative preview options, never both. */
223
+ type CylinderStockInput = (CylinderStockFigure & {
224
+ partGeometry?: never;
225
+ position?: never;
226
+ positionOffset?: never;
227
+ }) | (CylinderStockPreview & {
228
+ origin?: never;
229
+ axis?: never;
230
+ });
111
231
  /**
112
232
  * Bounds for an explicit fixed box. X/Y are centered on the part's bounding
113
233
  * box; Z is centered, offset from the top, or offset from the bottom. `offset`
@@ -117,36 +237,38 @@ declare function fixedBoxStockBounds(geometry: BufferGeometry, dimensions: Vec3,
117
237
  /** Per-side allowance and centre offset in millimetres, in the part's coordinates. */
118
238
  declare function boxStockBounds(geometry: BufferGeometry, allowance?: StockAllowance, offset?: Vec3): Box3;
119
239
 
120
- interface StockProps {
121
- /** Caller-owned stock mesh in the same millimetre, Z-up coordinates as the part. */
122
- geometry: BufferGeometry;
240
+ interface StockAppearanceProps {
241
+ /** Keep the preceding decoded GLB visible until its replacement is ready. Key by part/run to reset. */
242
+ retainPrevious?: boolean;
243
+ /** Reproduce the legacy Workpiece's materials, duplicate surface pass and edge ordering. */
244
+ renderStyle?: 'overlay' | 'legacy-workpiece';
123
245
  color?: number;
246
+ /** Unlit surface contribution, useful for readable workpiece shading beside the CAD model. */
247
+ emissive?: number;
248
+ /** Shade each triangle independently without changing the source's vertices or normals. */
249
+ flatShading?: boolean;
124
250
  opacity?: number;
125
251
  edgeColor?: number;
126
252
  edgeOpacity?: number;
127
253
  showEdges?: boolean;
128
254
  }
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;
255
+ interface StockSources {
256
+ /** Caller-owned geometry; Stock never disposes it. */
257
+ geometry: BufferGeometry;
258
+ /** Caller-provided GLB bytes; Stock owns and cleans up the decoded geometry. */
259
+ glb: ArrayBuffer;
260
+ /** Resolved box corners/frame, or part-relative box preview options. */
261
+ box: BoxStockInput;
262
+ /** Resolved cylinder placement, or part-relative cylinder preview options. */
263
+ cylinder: CylinderStockInput;
147
264
  }
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;
265
+ /** Exactly one source, in the same millimetre, Z-up coordinates as the part. */
266
+ type StockSource = {
267
+ [K in keyof StockSources]: Pick<StockSources, K> & Partial<Record<Exclude<keyof StockSources, K>, never>>;
268
+ }[keyof StockSources];
269
+ type StockProps = StockAppearanceProps & StockSource;
270
+ /** Translucent stock, included in Fit but ignored by picking, sections and measurements. */
271
+ declare const Stock: ({ geometry, glb, box, cylinder, ...appearance }: StockProps) => react.JSX.Element;
150
272
 
151
273
  /** The six-inch (154 mm) reference model bundled with `@toolpath/viewer`. */
152
274
  declare const BANANA_MODEL_URL: string;
@@ -871,6 +993,81 @@ interface MeasureToolProps {
871
993
  */
872
994
  declare const MeasureTool: ({ mode, measurements, onChange, showDeltas, format, labelClassName, theme, }: MeasureToolProps) => react.JSX.Element | null;
873
995
 
996
+ /**
997
+ * A cutting tool drawn on the part: an end mill standing at a place, up an
998
+ * axis, to scale. What it stands for — the widest tool a pocket admits, the
999
+ * tool an operation uses — is the caller's; this is only where and how big.
1000
+ */
1001
+ interface ToolMark {
1002
+ /** The centre of the tool's bottom, in the coordinates the part is drawn in. */
1003
+ readonly base: Vec3;
1004
+ /** Up the tool, from its tip to its shank. Need not be unit length. */
1005
+ readonly axis: Vec3;
1006
+ readonly diameter: number;
1007
+ /** How tall the drawn tool stands from its tip. */
1008
+ readonly height: number;
1009
+ /**
1010
+ * The radius on the tool's corner: 0 for a flat end mill, half the diameter
1011
+ * for a ball, anything between for a bull nose. Held to that range.
1012
+ */
1013
+ readonly cornerRadius?: number;
1014
+ /**
1015
+ * Which way the dimension across the tool's top runs: toward what it
1016
+ * touches, say. Any direction square to the axis when left out or along it.
1017
+ */
1018
+ readonly across?: Vec3;
1019
+ /**
1020
+ * The tool's own side, to turn about its axis in place of the end mill
1021
+ * `diameter` and `cornerRadius` make: radius out from the axis and height
1022
+ * above the tip, from the tip up — `@toolpath/tool-drawing`'s outline of a
1023
+ * drill, a chamfer mill, a tool in its holder. `diameter` and `height` still
1024
+ * place the rims and the dimension.
1025
+ */
1026
+ readonly profile?: readonly ToolProfilePoint[];
1027
+ /** Written on the dimension: `⌀ 3.200 mm`. */
1028
+ readonly label?: string;
1029
+ /** After the label, quieter: `bull nose R 0.5 · 3 places`. */
1030
+ readonly note?: string;
1031
+ }
1032
+ /** A point on a tool's side: radius out from its axis and height above its tip. */
1033
+ interface ToolProfilePoint {
1034
+ readonly r: number;
1035
+ readonly z: number;
1036
+ }
1037
+
1038
+ interface ToolMarksProps {
1039
+ /** The tools to draw, in the coordinates the part is drawn in. */
1040
+ marks: readonly ToolMark[];
1041
+ /** Draws nothing while false, and keeps its place in the scene. On by default. */
1042
+ visible?: boolean;
1043
+ /**
1044
+ * Added to every label's `className`, beside {@link MEASURE_LABEL_CLASS} —
1045
+ * a Tailwind utility list, or a CSS module's class.
1046
+ */
1047
+ labelClassName?: string;
1048
+ /** `measure` colours the rims and the dimension, as it does the measure tool's lines. */
1049
+ theme?: Partial<ViewerTheme>;
1050
+ }
1051
+ /**
1052
+ * Cutting tools drawn on the part, each to scale where it stands: a
1053
+ * see-through end mill — flat, bull nose or ball — or any tool turned from its
1054
+ * `profile`, rimmed at its bottom and top, with a dimension across its top and
1055
+ * a label on it. Mount it inside
1056
+ * `<Viewer>`, beside or inside the part.
1057
+ *
1058
+ * What a tool stands for is the caller's. A DFM panel stands the widest tool
1059
+ * a pocket admits in its tightest place; a plan could show the tool an
1060
+ * operation uses. Nothing here reads a datasheet.
1061
+ *
1062
+ * Drawn as the measure tool draws: the lines show through the part, in the
1063
+ * theme's `measure` colour, and the labels are unstyled DOM elements with the
1064
+ * {@link MEASURE_LABEL_CLASS} class and `data-measure-label="tool"`, the
1065
+ * label's text in a `data-measure-value` span and its note in a
1066
+ * `data-measure-note` one. The marks take no pointer events and are left out
1067
+ * of framing, so fitting the view fits the part.
1068
+ */
1069
+ declare const ToolMarks: ({ marks, visible, labelClassName, theme }: ToolMarksProps) => react.JSX.Element;
1070
+
874
1071
  /**
875
1072
  * The cut a viewer holds for itself, when nobody else is holding it.
876
1073
  *
@@ -1778,4 +1975,4 @@ declare const ORBIT_TARGET_FADE_MS = 1000;
1778
1975
  */
1779
1976
  declare function orbitTargetOpacity(sinceHold: number, fade?: number): number;
1780
1977
 
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 };
1978
+ 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, type BoxStockFigure, type BoxStockInput, type BoxStockPreview, CAD_CAMERA_UP, CHAMFER, CONTROL_SCHEME_OPTIONS, CadCameraControls, type CadCameraControlsProps, type CameraLimits, type CapMaterial, type CapUniforms, type ControlScheme, type ControlSchemeOption, type CubeZone, type CylinderStockFigure, type CylinderStockInput, type CylinderStockPreview, 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, type FeatureTriangles, 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, type PartContextValue, 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 StockAppearanceProps, type StockPosition, type StockProps, type StockSource, type SurfaceOf, TAP_SLOP, type TapPoint, type TapTracker, type ToolMark, ToolMarks, type ToolMarksProps, type ToolProfilePoint, 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, featureTriangles, 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, usePartContext, useRetarget, useSectionStore, useTapGuard, useViewerControls, useViewerToolbar, viewKind, viewUp, viewVector, visualSurfaces };