@viamrobotics/motion-tools 1.7.0 → 1.9.1

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 (77) hide show
  1. package/dist/components/App.svelte +11 -6
  2. package/dist/components/CameraControls.svelte +1 -1
  3. package/dist/components/Focus.svelte +1 -1
  4. package/dist/components/Frame.svelte +1 -1
  5. package/dist/components/Geometry2.svelte +8 -5
  6. package/dist/components/HoveredEntities.svelte +19 -0
  7. package/dist/components/HoveredEntities.svelte.d.ts +3 -0
  8. package/dist/components/HoveredEntityTooltip.svelte +242 -0
  9. package/dist/components/HoveredEntityTooltip.svelte.d.ts +7 -0
  10. package/dist/components/Label.svelte +1 -1
  11. package/dist/components/{DotSprite.svelte → MeasureTool/MeasurePoint.svelte} +8 -18
  12. package/dist/components/MeasureTool/MeasurePoint.svelte.d.ts +8 -0
  13. package/dist/components/MeasureTool/MeasureTool.svelte +176 -0
  14. package/dist/components/Scene.svelte +1 -1
  15. package/dist/components/{Details.svelte → overlay/Details.svelte} +10 -10
  16. package/dist/components/{LiveUpdatesBanner.svelte → overlay/LiveUpdatesBanner.svelte} +2 -2
  17. package/dist/components/overlay/Popover.svelte +28 -0
  18. package/dist/components/overlay/Popover.svelte.d.ts +9 -0
  19. package/dist/components/overlay/ToggleGroup.svelte +60 -0
  20. package/dist/components/overlay/ToggleGroup.svelte.d.ts +13 -0
  21. package/dist/components/{__tests__ → overlay/__tests__}/__fixtures__/entity.js +1 -1
  22. package/dist/components/{dashboard → overlay/dashboard}/Button.svelte +8 -4
  23. package/dist/components/{dashboard → overlay/dashboard}/Button.svelte.d.ts +3 -2
  24. package/dist/components/{dashboard → overlay/dashboard}/Dashboard.svelte +2 -2
  25. package/dist/components/{Tree → overlay/left-pane}/AddFrames.svelte +2 -2
  26. package/dist/components/{Tree → overlay/left-pane}/Logs.svelte +1 -1
  27. package/dist/components/{RefreshRate.svelte → overlay/left-pane/RefreshRate.svelte} +1 -1
  28. package/dist/components/{Tree → overlay/left-pane}/Settings.svelte +12 -7
  29. package/dist/components/{Tree → overlay/left-pane}/Tree.svelte +3 -3
  30. package/dist/components/{Tree → overlay/left-pane}/TreeContainer.svelte +8 -8
  31. package/dist/components/{Tree → overlay/left-pane}/Widgets.svelte +3 -3
  32. package/dist/components/{Tree → overlay/left-pane}/buildTree.js +1 -1
  33. package/dist/components/{widgets → overlay/widgets}/ArmPositions.svelte +4 -4
  34. package/dist/components/{widgets → overlay/widgets}/Camera.svelte +5 -5
  35. package/dist/ecs/traits.d.ts +19 -12
  36. package/dist/ecs/traits.js +18 -11
  37. package/dist/ecs/useQuery.svelte.js +10 -10
  38. package/dist/hooks/useDrawAPI.svelte.js +1 -1
  39. package/dist/hooks/useFrames.svelte.js +1 -0
  40. package/dist/hooks/useGeometries.svelte.js +1 -1
  41. package/dist/hooks/useObjectEvents.svelte.d.ts +1 -0
  42. package/dist/hooks/useObjectEvents.svelte.js +24 -0
  43. package/dist/hooks/usePointcloudObjects.svelte.js +1 -1
  44. package/dist/hooks/usePointclouds.svelte.js +28 -41
  45. package/dist/hooks/usePose.svelte.js +1 -1
  46. package/dist/hooks/useSettings.svelte.d.ts +4 -0
  47. package/dist/hooks/useSettings.svelte.js +4 -0
  48. package/dist/hooks/useWorldState.svelte.js +1 -1
  49. package/dist/three/InstancedArrows/raycast.js +2 -6
  50. package/package.json +6 -2
  51. package/dist/components/DotSprite.svelte.d.ts +0 -10
  52. package/dist/components/MeasureTool.svelte +0 -123
  53. package/dist/components/null-states/Connection.svelte +0 -0
  54. package/dist/components/null-states/Connection.svelte.d.ts +0 -26
  55. /package/dist/components/{MeasureTool.svelte.d.ts → MeasureTool/MeasureTool.svelte.d.ts} +0 -0
  56. /package/dist/components/{Details.svelte.d.ts → overlay/Details.svelte.d.ts} +0 -0
  57. /package/dist/components/{LiveUpdatesBanner.svelte.d.ts → overlay/LiveUpdatesBanner.svelte.d.ts} +0 -0
  58. /package/dist/components/{shared → overlay}/Table.svelte +0 -0
  59. /package/dist/components/{shared → overlay}/Table.svelte.d.ts +0 -0
  60. /package/dist/components/{__tests__ → overlay/__tests__}/__fixtures__/entity.d.ts +0 -0
  61. /package/dist/components/{__tests__ → overlay/__tests__}/__fixtures__/resource.d.ts +0 -0
  62. /package/dist/components/{__tests__ → overlay/__tests__}/__fixtures__/resource.js +0 -0
  63. /package/dist/components/{dashboard → overlay/dashboard}/Dashboard.svelte.d.ts +0 -0
  64. /package/dist/components/{Tree → overlay/left-pane}/AddFrames.svelte.d.ts +0 -0
  65. /package/dist/components/{Tree → overlay/left-pane}/Drawer.svelte +0 -0
  66. /package/dist/components/{Tree → overlay/left-pane}/Drawer.svelte.d.ts +0 -0
  67. /package/dist/components/{Tree → overlay/left-pane}/Logs.svelte.d.ts +0 -0
  68. /package/dist/components/{RefreshRate.svelte.d.ts → overlay/left-pane/RefreshRate.svelte.d.ts} +0 -0
  69. /package/dist/components/{Tree → overlay/left-pane}/Settings.svelte.d.ts +0 -0
  70. /package/dist/components/{Tree → overlay/left-pane}/Tree.svelte.d.ts +0 -0
  71. /package/dist/components/{Tree → overlay/left-pane}/TreeContainer.svelte.d.ts +0 -0
  72. /package/dist/components/{Tree → overlay/left-pane}/Widgets.svelte.d.ts +0 -0
  73. /package/dist/components/{Tree → overlay/left-pane}/buildTree.d.ts +0 -0
  74. /package/dist/components/{Tree → overlay/left-pane}/useExpanded.svelte.d.ts +0 -0
  75. /package/dist/components/{Tree → overlay/left-pane}/useExpanded.svelte.js +0 -0
  76. /package/dist/components/{widgets → overlay/widgets}/ArmPositions.svelte.d.ts +0 -0
  77. /package/dist/components/{widgets → overlay/widgets}/Camera.svelte.d.ts +0 -0
@@ -2,6 +2,7 @@ import { useCursor } from '@threlte/extras';
2
2
  import { useFocusedEntity, useSelectedEntity } from './useSelection.svelte';
3
3
  import { useVisibility } from './useVisibility.svelte';
4
4
  import { Vector2 } from 'three';
5
+ import { traits } from '../ecs';
5
6
  export const useObjectEvents = (entity) => {
6
7
  const down = new Vector2();
7
8
  const selectedEntity = useSelectedEntity();
@@ -13,10 +14,32 @@ export const useObjectEvents = (entity) => {
13
14
  const onpointerenter = (event) => {
14
15
  event.stopPropagation();
15
16
  cursor.onPointerEnter();
17
+ if (currentEntity && !currentEntity.has(traits.Hover)) {
18
+ currentEntity.add(traits.Hover({
19
+ index: -1,
20
+ x: event.point.x,
21
+ y: event.point.y,
22
+ z: event.point.z,
23
+ }));
24
+ }
25
+ };
26
+ const onpointermove = (event) => {
27
+ event.stopPropagation();
28
+ if (currentEntity && currentEntity.has(traits.Hover)) {
29
+ currentEntity.set(traits.Hover, {
30
+ index: event.index ?? -1,
31
+ x: event.point.x,
32
+ y: event.point.y,
33
+ z: event.point.z,
34
+ });
35
+ }
16
36
  };
17
37
  const onpointerleave = (event) => {
18
38
  event.stopPropagation();
19
39
  cursor.onPointerLeave();
40
+ if (currentEntity?.has(traits.Hover)) {
41
+ currentEntity.remove(traits.Hover);
42
+ }
20
43
  };
21
44
  const ondblclick = (event) => {
22
45
  event.stopPropagation();
@@ -41,6 +64,7 @@ export const useObjectEvents = (entity) => {
41
64
  return visible;
42
65
  },
43
66
  onpointerenter,
67
+ onpointermove,
44
68
  onpointerleave,
45
69
  ondblclick,
46
70
  onpointerdown,
@@ -7,7 +7,7 @@ import { getContext, setContext } from 'svelte';
7
7
  import { traits, useWorld } from '../ecs';
8
8
  import { createBufferGeometry, updateBufferGeometry } from '../attribute';
9
9
  import { useEnvironment } from './useEnvironment.svelte';
10
- import { RefetchRates } from '../components/RefreshRate.svelte';
10
+ import { RefetchRates } from '../components/overlay/left-pane/RefreshRate.svelte';
11
11
  import { createPose } from '../transform';
12
12
  const key = Symbol('pointcloud-object-context');
13
13
  export const providePointcloudObjects = (partID) => {
@@ -1,10 +1,10 @@
1
1
  import { CameraClient } from '@viamrobotics/sdk';
2
- import { setContext, getContext } from 'svelte';
2
+ import { setContext, getContext, untrack } from 'svelte';
3
3
  import { createResourceClient, createResourceQuery, useResourceNames, } from '@viamrobotics/svelte-sdk';
4
4
  import { parsePcdInWorker } from '../loaders/pcd';
5
5
  import { RefreshRates, useMachineSettings } from './useMachineSettings.svelte';
6
6
  import { useLogs } from './useLogs.svelte';
7
- import { RefetchRates } from '../components/RefreshRate.svelte';
7
+ import { RefetchRates } from '../components/overlay/left-pane/RefreshRate.svelte';
8
8
  import { traits, useWorld } from '../ecs';
9
9
  import { useEnvironment } from './useEnvironment.svelte';
10
10
  import { createBufferGeometry, updateBufferGeometry } from '../attribute';
@@ -59,7 +59,7 @@ export const providePointclouds = (partID) => {
59
59
  }
60
60
  });
61
61
  const options = $derived({
62
- refetchInterval: interval,
62
+ refetchInterval: interval === RefetchRates.MANUAL ? false : interval,
63
63
  });
64
64
  const queries = $derived(enabledClients.map((client) => [client.current.name, createResourceQuery(client, 'getPointCloud', () => options)]));
65
65
  const queryMap = $derived(typeSafeObjectFromEntries(queries));
@@ -73,46 +73,33 @@ export const providePointclouds = (partID) => {
73
73
  }
74
74
  }
75
75
  });
76
- let pcObjects = $state.raw([]);
77
- $effect(() => {
78
- const binaries = [];
79
- for (const [name, query] of queries) {
80
- const { data } = query;
81
- if (name && data) {
82
- binaries.push([name, data]);
83
- }
84
- }
85
- Promise.allSettled(binaries.map(async ([name, uint8array]) => {
86
- const { positions, colors } = await parsePcdInWorker(new Uint8Array(uint8array));
87
- return { name, positions, colors };
88
- })).then((results) => {
89
- const fulfilledResults = [];
90
- for (const result of results) {
91
- if (result.status === 'fulfilled') {
92
- fulfilledResults.push(result.value);
93
- }
94
- else if (result.status === 'rejected') {
95
- logs.add(result.reason, 'error');
96
- }
97
- }
98
- pcObjects = fulfilledResults;
99
- });
100
- });
101
76
  const entities = new Map();
102
77
  $effect(() => {
103
- // Create or update entities
104
- for (const { name, positions, colors } of pcObjects) {
105
- const existing = entities.get(name);
106
- if (existing) {
107
- const geometry = existing.get(traits.BufferGeometry);
108
- if (geometry) {
109
- updateBufferGeometry(geometry, positions, colors);
110
- continue;
111
- }
112
- }
113
- const geometry = createBufferGeometry(positions, colors);
114
- const entity = world.spawn(traits.Parent(name), traits.Name(`${name} pointcloud`), traits.BufferGeometry(geometry), traits.Points);
115
- entities.set(name, entity);
78
+ for (const [name, query] of queries) {
79
+ untrack(() => {
80
+ $effect(() => {
81
+ const { data } = query;
82
+ if (!data || data.length === 0)
83
+ return;
84
+ parsePcdInWorker(data)
85
+ .then(({ positions, colors }) => {
86
+ const existing = entities.get(name);
87
+ if (existing) {
88
+ const geometry = existing.get(traits.BufferGeometry);
89
+ if (geometry) {
90
+ updateBufferGeometry(geometry, positions, colors);
91
+ return;
92
+ }
93
+ }
94
+ const geometry = createBufferGeometry(positions, colors);
95
+ const entity = world.spawn(traits.Parent(name), traits.Name(`${name} pointcloud`), traits.BufferGeometry(geometry), traits.Points);
96
+ entities.set(name, entity);
97
+ })
98
+ .catch((error) => {
99
+ logs.add(error.reason, 'error');
100
+ });
101
+ });
102
+ });
116
103
  }
117
104
  // Clean up old entities
118
105
  for (const [name, entity] of entities) {
@@ -6,7 +6,7 @@ import { useEnvironment } from './useEnvironment.svelte';
6
6
  import { observe } from '@threlte/core';
7
7
  import { untrack } from 'svelte';
8
8
  import { useFrames } from './useFrames.svelte';
9
- import { RefetchRates } from '../components/RefreshRate.svelte';
9
+ import { RefetchRates } from '../components/overlay/left-pane/RefreshRate.svelte';
10
10
  import { useLogs } from './useLogs.svelte';
11
11
  import { useResourceByName } from './useResourceByName.svelte';
12
12
  import { useRefetchPoses } from './useRefetchPoses';
@@ -13,6 +13,9 @@ export interface Settings {
13
13
  lineWidth: number;
14
14
  lineDotSize: number;
15
15
  enableMeasure: boolean;
16
+ enableMeasureAxisX: boolean;
17
+ enableMeasureAxisY: boolean;
18
+ enableMeasureAxisZ: boolean;
16
19
  enableLabels: boolean;
17
20
  enableKeybindings: boolean;
18
21
  enableQueryDevtools: boolean;
@@ -21,6 +24,7 @@ export interface Settings {
21
24
  openCameraWidgets: Record<string, string[]>;
22
25
  renderStats: boolean;
23
26
  renderArmModels: 'colliders' | 'colliders+model' | 'model';
27
+ renderSubEntityHoverDetail: boolean;
24
28
  }
25
29
  interface Context {
26
30
  current: Settings;
@@ -16,6 +16,9 @@ const defaults = () => ({
16
16
  lineWidth: 0.005,
17
17
  lineDotSize: 0.01,
18
18
  enableMeasure: false,
19
+ enableMeasureAxisX: true,
20
+ enableMeasureAxisY: true,
21
+ enableMeasureAxisZ: true,
19
22
  enableLabels: false,
20
23
  enableKeybindings: true,
21
24
  enableQueryDevtools: false,
@@ -24,6 +27,7 @@ const defaults = () => ({
24
27
  openCameraWidgets: {},
25
28
  renderStats: false,
26
29
  renderArmModels: 'colliders+model',
30
+ renderSubEntityHoverDetail: false,
27
31
  });
28
32
  export const provideSettings = () => {
29
33
  let settings = $state(defaults());
@@ -80,7 +80,7 @@ const createWorldState = (client) => {
80
80
  if (metadata.shape === 'arrow') {
81
81
  entityTraits.push(traits.Arrow);
82
82
  }
83
- entityTraits.push(traits.Name(transform.referenceFrame), traits.Pose(pose), traits.WorldStateStoreAPI);
83
+ entityTraits.push(traits.Name(transform.referenceFrame), traits.Pose(pose), traits.ShowAxesHelper, traits.WorldStateStoreAPI);
84
84
  const entity = world.spawn(...entityTraits);
85
85
  entities.set(transform.uuidString, entity);
86
86
  };
@@ -2,7 +2,6 @@ import { Object3D, BufferGeometry, Ray, Matrix4, Raycaster, Vector3, Box3, RawSh
2
2
  const vec3 = new Vector3();
3
3
  const inverseMatrix = new Matrix4();
4
4
  const localRay = new Ray();
5
- const ray = new Ray();
6
5
  const box = new Box3();
7
6
  const segmentStart = new Vector3();
8
7
  const segmentEnd = new Vector3();
@@ -46,17 +45,14 @@ export function meshBoundsRaycast(raycaster, intersects) {
46
45
  this.geometry.computeBoundingBox();
47
46
  }
48
47
  box.copy(this.geometry.boundingBox ?? box);
49
- box.applyMatrix4(this.matrixWorld);
50
48
  if (!raycaster.ray.intersectsBox(box)) {
51
49
  return;
52
50
  }
53
- inverseMatrix.copy(this.matrixWorld).invert();
54
- ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);
51
+ raycaster.ray.intersectBox(box, vec3);
55
52
  const distance = vec3.distanceTo(raycaster.ray.origin);
56
- const point = vec3.clone();
57
53
  intersects.push({
58
54
  distance,
59
- point,
55
+ point: vec3.clone(),
60
56
  object: this,
61
57
  });
62
58
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@viamrobotics/motion-tools",
3
- "version": "1.7.0",
3
+ "version": "1.9.1",
4
4
  "description": "Motion visualization with Viam",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -41,7 +41,9 @@
41
41
  "@vitest/coverage-v8": "^3.2.4",
42
42
  "@zag-js/collapsible": "1.22.1",
43
43
  "@zag-js/floating-panel": "1.22.1",
44
+ "@zag-js/popover": "1.22.1",
44
45
  "@zag-js/svelte": "1.22.1",
46
+ "@zag-js/toggle-group": "1.22.1",
45
47
  "@zag-js/tree-view": "1.22.1",
46
48
  "camera-controls": "3.1.0",
47
49
  "eslint": "9.34.0",
@@ -87,7 +89,9 @@
87
89
  "@zag-js/collapsible": ">=1",
88
90
  "@zag-js/dialog": ">=1.31",
89
91
  "@zag-js/floating-panel": ">=1",
92
+ "@zag-js/popover": ">=1",
90
93
  "@zag-js/svelte": ">=1",
94
+ "@zag-js/toggle-group": ">=1",
91
95
  "@zag-js/tree-view": ">=1",
92
96
  "camera-controls": ">=3",
93
97
  "idb-keyval": ">=6",
@@ -128,7 +132,7 @@
128
132
  "@bufbuild/protobuf": "1.10.1",
129
133
  "@neodrag/svelte": "^2.3.3",
130
134
  "@tanstack/svelte-query-devtools": "^6.0.2",
131
- "koota": "^0.5.3",
135
+ "koota": "0.6.5",
132
136
  "lodash-es": "4.17.23",
133
137
  "uuid-tool": "^2.0.3"
134
138
  },
@@ -1,10 +0,0 @@
1
- import { type Props as ThrelteProps } from '@threlte/core';
2
- import type { ColorRepresentation, Vector3Tuple, Group } from 'three';
3
- interface Props extends ThrelteProps<typeof Group> {
4
- position: Vector3Tuple;
5
- color?: ColorRepresentation;
6
- opacity?: number;
7
- }
8
- declare const DotSprite: import("svelte").Component<Props, {}, "ref">;
9
- type DotSprite = ReturnType<typeof DotSprite>;
10
- export default DotSprite;
@@ -1,123 +0,0 @@
1
- <script lang="ts">
2
- import { untrack } from 'svelte'
3
- import { Vector3, type Intersection } from 'three'
4
- import { T } from '@threlte/core'
5
- import { HTML, MeshLineGeometry, MeshLineMaterial, Portal } from '@threlte/extras'
6
- import { useSettings } from '../hooks/useSettings.svelte'
7
- import Button from './dashboard/Button.svelte'
8
- import DotSprite from './DotSprite.svelte'
9
- import { useMouseRaycaster } from '../hooks/useMouseRaycaster.svelte'
10
- import { useFocusedEntity } from '../hooks/useSelection.svelte'
11
-
12
- const focusedEntity = useFocusedEntity()
13
- const settings = useSettings()
14
-
15
- const htmlPosition = new Vector3()
16
-
17
- let step: 'idle' | 'p1' | 'p2' = 'idle'
18
-
19
- let intersection = $state.raw<Intersection>()
20
- let p1 = $state.raw<Vector3>()
21
- let p2 = $state.raw<Vector3>()
22
-
23
- const enabled = $derived(settings.current.enableMeasure)
24
-
25
- const { onclick, onmove, raycaster } = useMouseRaycaster(() => ({
26
- enabled,
27
- }))
28
- raycaster.firstHitOnly = true
29
- raycaster.params.Points.threshold = 0.005
30
-
31
- onmove((event) => {
32
- intersection = event.intersections[0]
33
- })
34
-
35
- onclick(() => {
36
- if (step === 'idle' && intersection) {
37
- p1 = intersection.point.clone()
38
- step = 'p1'
39
- } else if (step === 'p1' && intersection) {
40
- p2 = intersection.point.clone()
41
- step = 'p2'
42
- } else if (step === 'p2') {
43
- p1 = undefined
44
- p2 = undefined
45
- step = 'idle'
46
- }
47
- })
48
-
49
- const clear = () => {
50
- p1 = undefined
51
- p2 = undefined
52
- step = 'idle'
53
- }
54
-
55
- $effect(() => {
56
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions
57
- ;(focusedEntity.current, enabled)
58
- untrack(() => clear())
59
- })
60
- </script>
61
-
62
- <Portal id="dashboard">
63
- <fieldset>
64
- <Button
65
- active
66
- icon="ruler"
67
- class={enabled ? '' : 'text-gray-4!'}
68
- description="{enabled ? 'Disable' : 'Enable'} measurement"
69
- onclick={() => {
70
- settings.current.enableMeasure = !settings.current.enableMeasure
71
- }}
72
- />
73
- </fieldset>
74
- </Portal>
75
-
76
- {#if enabled}
77
- {#if intersection}
78
- <DotSprite
79
- position={intersection?.point.toArray()}
80
- opacity={0.5}
81
- />
82
- {/if}
83
-
84
- {#if p1}
85
- <DotSprite
86
- position={p1.toArray()}
87
- opacity={0.5}
88
- />
89
- {/if}
90
-
91
- {#if p2}
92
- <DotSprite
93
- position={p2.toArray()}
94
- opacity={0.5}
95
- />
96
- {/if}
97
-
98
- {#if p1 && p2}
99
- <T.Mesh
100
- raycast={() => null}
101
- bvh={{ enabled: false }}
102
- renderOrder={1}
103
- >
104
- <MeshLineGeometry points={[p1, p2]} />
105
- <MeshLineMaterial
106
- width={2.5}
107
- depthTest={false}
108
- color="black"
109
- opacity={0.5}
110
- attenuate={false}
111
- transparent
112
- />
113
- </T.Mesh>
114
- <HTML
115
- center
116
- position={htmlPosition.lerpVectors(p1, p2, 0.5).toArray()}
117
- >
118
- <div class="border border-black bg-white px-1 py-0.5 text-xs">
119
- {p1.distanceTo(p2).toFixed(2)}<span class="text-subtle-2">m</span>
120
- </div>
121
- </HTML>
122
- {/if}
123
- {/if}
File without changes
@@ -1,26 +0,0 @@
1
- export default Connection;
2
- type Connection = SvelteComponent<{
3
- [x: string]: never;
4
- }, {
5
- [evt: string]: CustomEvent<any>;
6
- }, {}> & {
7
- $$bindings?: string | undefined;
8
- };
9
- declare const Connection: $$__sveltets_2_IsomorphicComponent<{
10
- [x: string]: never;
11
- }, {
12
- [evt: string]: CustomEvent<any>;
13
- }, {}, {}, string>;
14
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
15
- new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
16
- $$bindings?: Bindings;
17
- } & Exports;
18
- (internal: unknown, props: {
19
- $$events?: Events;
20
- $$slots?: Slots;
21
- }): Exports & {
22
- $set?: any;
23
- $on?: any;
24
- };
25
- z_$$bindings?: Bindings;
26
- }