@vertexvis/viewer-toolkit-react 0.0.5-canary.2 → 0.0.5-canary.21

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 (101) hide show
  1. package/dist/bundle.cjs.js +14 -2
  2. package/dist/bundle.cjs.js.map +1 -1
  3. package/dist/bundle.esm.js +14 -2
  4. package/dist/bundle.esm.js.map +1 -1
  5. package/dist/components/appearance/material/__tests__/scene-item-material-color-swatch.spec.d.ts +1 -0
  6. package/dist/components/appearance/material/__tests__/scene-item-material-color-swatches.spec.d.ts +1 -0
  7. package/dist/components/appearance/material/__tests__/scene-item-material-opacity-slider.spec.d.ts +1 -0
  8. package/dist/components/appearance/material/material-controls.d.ts +11 -0
  9. package/dist/components/appearance/material/material-panel-section.d.ts +13 -0
  10. package/dist/components/appearance/material/scene-item-material-color-swatch-context-menu.d.ts +4 -0
  11. package/dist/components/appearance/material/scene-item-material-color-swatch.d.ts +10 -0
  12. package/dist/components/appearance/material/scene-item-material-color-swatches.d.ts +7 -0
  13. package/dist/components/common/copy-button.d.ts +9 -0
  14. package/dist/components/context-menu/menu-items/show-properties-menu-item.d.ts +1 -0
  15. package/dist/components/measurement/measurement-details.d.ts +3 -2
  16. package/dist/components/measurement/point-to-point-measurement.d.ts +3 -2
  17. package/dist/components/measurement/precise-measurement.d.ts +3 -2
  18. package/dist/components/metadata/__tests__/metadata-panel.spec.d.ts +1 -0
  19. package/dist/components/metadata/__tests__/metadata-property-value.spec.d.ts +1 -0
  20. package/dist/components/metadata/metadata-panel-contents.d.ts +6 -0
  21. package/dist/components/metadata/metadata-panel.d.ts +4 -0
  22. package/dist/components/metadata/metadata-property-value.d.ts +6 -0
  23. package/dist/components/scene-tree/__tests__/scene-tree-secondary-panel.spec.d.ts +1 -0
  24. package/dist/components/scene-tree/scene-tree-columns/__tests__/scene-tree-custom-column.spec.d.ts +1 -0
  25. package/dist/components/scene-tree/scene-tree-columns/__tests__/scene-tree-metadata-columns.spec.d.ts +1 -0
  26. package/dist/components/scene-tree/scene-tree-columns/scene-tree-custom-column.d.ts +10 -0
  27. package/dist/components/scene-tree/scene-tree-columns/scene-tree-metadata-columns.d.ts +9 -0
  28. package/dist/components/scene-tree/scene-tree-secondary-panel.d.ts +6 -0
  29. package/dist/components/scene-tree/scene-tree-table-layout.d.ts +29 -0
  30. package/dist/components/scene-tree/scene-tree.d.ts +33 -0
  31. package/dist/components/sidebar/viewer-right-sidebar/viewer-right-open-panel.d.ts +14 -1
  32. package/dist/components/sidebar/viewer-right-sidebar/viewer-right-panel-header.d.ts +4 -1
  33. package/dist/components/sidebar/viewer-right-sidebar/viewer-right-sidebar.d.ts +17 -1
  34. package/dist/components/toolbar/cross-section/cross-section-alignment-popover-menu.d.ts +5 -1
  35. package/dist/components/toolbar/cross-section/cross-section-axis-popover-menu.d.ts +5 -1
  36. package/dist/components/toolbar/cross-section/cross-section-offset-stepper.d.ts +2 -1
  37. package/dist/components/transforms/transform-controls.d.ts +3 -1
  38. package/dist/components/transforms/transform-inputs.d.ts +5 -0
  39. package/dist/components/transforms/transform-numeric-field.d.ts +14 -0
  40. package/dist/components/transforms/transform-panel-section.d.ts +3 -1
  41. package/dist/components/viewer/vertex-viewer.d.ts +1 -1
  42. package/dist/index.css +2 -2
  43. package/dist/index.d.ts +31 -9
  44. package/dist/state/appearance/actions.d.ts +6 -0
  45. package/dist/state/appearance/index.d.ts +2 -0
  46. package/dist/state/appearance/material.d.ts +3 -0
  47. package/dist/state/appearance/types.d.ts +2 -0
  48. package/dist/state/context-menu/actions.d.ts +2 -1
  49. package/dist/state/context-menu/context-menu.d.ts +1 -0
  50. package/dist/state/messages/messages.d.ts +1 -0
  51. package/dist/state/metadata/__tests__/actions.spec.d.ts +1 -0
  52. package/dist/state/metadata/actions.d.ts +6 -0
  53. package/dist/state/metadata/index.d.ts +2 -0
  54. package/dist/state/metadata/metadata.d.ts +13 -0
  55. package/dist/state/metadata/types.d.ts +7 -0
  56. package/dist/state/panel/actions.d.ts +3 -1
  57. package/dist/state/panel/panel.d.ts +5 -3
  58. package/dist/state/scene-tree/columns/columns.d.ts +1 -0
  59. package/dist/state/scene-tree/columns/index.d.ts +1 -1
  60. package/dist/state/scene-tree/columns/{open-column-popover.d.ts → open-positioned-popover.d.ts} +4 -5
  61. package/dist/state/scene-tree/core/actions.d.ts +4 -0
  62. package/dist/state/scene-tree/core/core.d.ts +3 -0
  63. package/dist/state/scene-tree/index.d.ts +5 -0
  64. package/dist/state/scene-tree/metadata/index.d.ts +1 -0
  65. package/dist/state/scene-tree/metadata/metadata.d.ts +2 -0
  66. package/dist/state/scene-tree/search/actions.d.ts +3 -2
  67. package/dist/state/scene-tree/search/search.d.ts +1 -0
  68. package/dist/state/scene-tree/types.d.ts +5 -0
  69. package/dist/state/scene-view-item/actions.d.ts +8 -0
  70. package/dist/state/scene-view-item/index.d.ts +2 -0
  71. package/dist/state/scene-view-item/items.d.ts +2 -0
  72. package/dist/state/selection/selection.d.ts +3 -0
  73. package/dist/state/transforms/actions.d.ts +3 -1
  74. package/dist/state/transforms/edit-transforms.d.ts +10 -0
  75. package/dist/state/transforms/index.d.ts +1 -0
  76. package/dist/state/transforms/transforms.d.ts +55 -9
  77. package/dist/state/viewer/camera/__tests__/actions.spec.d.ts +1 -0
  78. package/dist/state/viewer/camera/actions.d.ts +1 -1
  79. package/dist/state/viewer/core/core.d.ts +1 -0
  80. package/dist/state/viewer/scene/scene.d.ts +0 -2
  81. package/dist/testing/color-materials.d.ts +1 -0
  82. package/dist/util/popover/popover.d.ts +1 -0
  83. package/dist/util/react/children.d.ts +5 -0
  84. package/dist/util/refs/__tests__/when-component-ready.spec.d.ts +1 -0
  85. package/dist/util/refs/when-component-ready.d.ts +1 -1
  86. package/dist/util/state/synced-value.d.ts +5 -0
  87. package/dist/util/transforms/transforms.d.ts +6 -0
  88. package/package.json +14 -9
  89. package/dist/components/appearance/material-controls.d.ts +0 -7
  90. package/dist/components/appearance/material-panel-section.d.ts +0 -9
  91. package/dist/components/scene-tree/vertex-scene-tree-table-layout.d.ts +0 -3
  92. package/dist/components/scene-tree/vertex-scene-tree.d.ts +0 -14
  93. /package/dist/components/appearance/{__tests__ → material/__tests__}/scene-item-material-color-picker.spec.d.ts +0 -0
  94. /package/dist/components/appearance/{__tests__/scene-item-material-opacity-slider.spec.d.ts → material/__tests__/scene-item-material-color-swatch-context-menu.spec.d.ts} +0 -0
  95. /package/dist/components/appearance/{scene-item-material-apply-all-confirmation-dialog.d.ts → material/scene-item-material-apply-all-confirmation-dialog.d.ts} +0 -0
  96. /package/dist/components/appearance/{scene-item-material-apply-all.d.ts → material/scene-item-material-apply-all.d.ts} +0 -0
  97. /package/dist/components/appearance/{scene-item-material-clear.d.ts → material/scene-item-material-clear.d.ts} +0 -0
  98. /package/dist/components/appearance/{scene-item-material-color-picker.d.ts → material/scene-item-material-color-picker.d.ts} +0 -0
  99. /package/dist/components/appearance/{scene-item-material-opacity-slider.d.ts → material/scene-item-material-opacity-slider.d.ts} +0 -0
  100. /package/dist/components/scene-tree/{vertex-scene-tree-header.d.ts → scene-tree-header.d.ts} +0 -0
  101. /package/dist/util/{measurement/units.d.ts → numbers/distance-units.d.ts} +0 -0
@@ -1,7 +1,13 @@
1
1
  import { ColorMaterialWithId } from '@util/appearance/color';
2
+ import { UUID } from '@vertexvis/utils';
2
3
  import { ColorMaterial } from '@vertexvis/viewer';
3
4
  export interface UseSceneItemMaterialActions {
4
5
  updateColor(color: ColorMaterialWithId): void;
6
+ saveRecentColor(color: ColorMaterialWithId): Promise<void>;
7
+ removeRecentColor(colorId: UUID.UUID): Promise<void>;
8
+ setCustomColors(colors: ColorMaterialWithId[]): Promise<void>;
9
+ saveCustomColor(color: ColorMaterialWithId): Promise<void>;
10
+ removeCustomColor(colorId: UUID.UUID): Promise<void>;
5
11
  clearCurrentColor(): void;
6
12
  clearCurrentOpacity(): void;
7
13
  clear(): void;
@@ -1,4 +1,6 @@
1
1
  export * from './actions';
2
2
  export * from './feature-edges';
3
3
  export * from './material';
4
+ export * from './selection-highlighting';
5
+ export * from './types';
4
6
  export * from './viewer-background';
@@ -1,7 +1,10 @@
1
1
  import { ColorMaterialWithId } from '@util/appearance/color';
2
2
  import { ColorMaterial } from '@vertexvis/viewer';
3
3
  export declare const MAXIMUM_MATERIAL_OVERRIDE_OPACITY = 255;
4
+ export declare const MAX_STORED_COLOR_ARRAY_LENGTH = 18;
4
5
  export declare const sceneItemAdjustmentsSelectedColor: import("recoil").RecoilState<ColorMaterialWithId | undefined>;
6
+ export declare const sceneItemAdjustmentsRecentColors: import("recoil").RecoilState<ColorMaterialWithId[]>;
7
+ export declare const sceneItemAdjustmentsCustomColors: import("recoil").RecoilState<ColorMaterialWithId[]>;
5
8
  export declare const sceneItemAdjustmentsSelectedOpacity: import("recoil").RecoilState<number | undefined>;
6
9
  /**
7
10
  * An atom that stores the modified material override for an item.
@@ -0,0 +1,2 @@
1
+ export declare function elementIsColorSwatch(el: Element | EventTarget | null): el is HTMLVertexColorSwatchElement;
2
+ export declare function elementHasColorAttribute(el: HTMLVertexColorSwatchElement): boolean;
@@ -1,4 +1,4 @@
1
- import { ContextMenuType } from '@state/context-menu/context-menu';
1
+ import { ContextMenuItem, ContextMenuType } from '@state/context-menu/context-menu';
2
2
  import { Point } from '@vertexvis/geometry';
3
3
  type ContextMenuEventPredicate = (event: MouseEvent | TouchEvent | Event) => boolean;
4
4
  export interface UseContextMenuActions {
@@ -6,6 +6,7 @@ export interface UseContextMenuActions {
6
6
  pointerUp(event: PointerEvent, type: ContextMenuType, predicate?: ContextMenuEventPredicate, onOpen?: (event: PointerEvent, point: Point.Point) => void): void;
7
7
  contextMenu(event: Event, predicate?: ContextMenuEventPredicate): void;
8
8
  longPress(event: TouchEvent, type: ContextMenuType, predicate?: ContextMenuEventPredicate, onOpen?: (event: TouchEvent, point: Point.Point) => void): void;
9
+ setContextMenuItem(item: ContextMenuItem): void;
9
10
  clearActiveContextMenu(dismissedFromWindowPointerEvent?: boolean): void;
10
11
  clearDismissedState(): void;
11
12
  }
@@ -5,6 +5,7 @@ export type ContextMenuType = 'color-swatch' | 'measurement' | 'scene-tree' | 'v
5
5
  export type ContextMenuItem = Row | Hit | HTMLElement;
6
6
  export type ContextMenuAction = (item: ContextMenuItem) => void | Promise<void> | boolean | Promise<boolean>;
7
7
  export declare function contextMenuItemIsRow(item?: ContextMenuItem): item is Row;
8
+ export declare function contextMenuItemIsElement(item?: ContextMenuItem): item is HTMLElement;
8
9
  export declare const contextMenuActive: import("recoil").RecoilState<ContextMenuType>;
9
10
  export declare const contextMenuPosition: import("recoil").RecoilState<Point.Point | undefined>;
10
11
  export declare const contextMenuTarget: import("recoil").RecoilState<HTMLElement | undefined>;
@@ -1,5 +1,6 @@
1
1
  export declare const LOW_SEVERITY_TOAST_MESSAGE_DURATION_MS = 3000;
2
2
  export declare const LOW_SEVERITY_BANNER_MESSAGE_DURATION_MS = 5000;
3
+ export declare const MEDIUM_SEVERITY_TOAST_MESSAGE_DURATION_MS = 8000;
3
4
  export type ToastSeverity = 'info' | 'warn' | 'error';
4
5
  export interface ToastMessage {
5
6
  id?: string;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ import { UUID } from '@vertexvis/utils';
2
+ export interface UseMetadataActions {
3
+ fetchInitialMetadata(itemId: UUID.UUID): Promise<void>;
4
+ fetchNextMetadata(itemId: UUID.UUID): Promise<void>;
5
+ }
6
+ export declare function useMetadataActions(): UseMetadataActions;
@@ -0,0 +1,2 @@
1
+ export * from './metadata';
2
+ export * from './types';
@@ -0,0 +1,13 @@
1
+ import { MetadataProperty } from '@state/metadata/types';
2
+ interface MetadataSceneItemResponse {
3
+ metadata: MetadataProperty[] | undefined;
4
+ cursor: string | undefined;
5
+ }
6
+ export declare const showMetadataSceneItemProperties: import("recoil").RecoilState<boolean>;
7
+ export declare const nextMetadataSceneItemProperties: (param: string) => import("recoil").RecoilValueReadOnly<MetadataSceneItemResponse | undefined>;
8
+ export declare const loadedMetadataSceneItemProperties: (param: string) => import("recoil").RecoilState<MetadataProperty[]>;
9
+ export declare const metadataSceneItemPropertiesCursor: (param: string) => import("recoil").RecoilState<string | undefined>;
10
+ export declare const hasMoreMetadataSceneItemProperties: (param: string) => import("recoil").RecoilValueReadOnly<boolean>;
11
+ export declare const isFetchingMetadataSceneItemProperties: (param: string) => import("recoil").RecoilState<boolean>;
12
+ export declare const metadataSceneItemName: import("recoil").RecoilValueReadOnly<string | undefined>;
13
+ export {};
@@ -0,0 +1,7 @@
1
+ import { DomainPropertyEntry, DomainPropertyValue } from '@vertexvis/viewer/dist/types/lib/scene-items';
2
+ export interface MetadataProperty {
3
+ key: string;
4
+ value: string;
5
+ }
6
+ export declare function fromApiProperty(property: DomainPropertyEntry): MetadataProperty;
7
+ export declare function apiMetadataPropertyDisplayValue(propertyValue?: DomainPropertyValue | null): string;
@@ -1,7 +1,9 @@
1
- import { PrimaryPanel } from '@state/panel/panel';
1
+ import { PrimaryPanel, SceneTreeSecondaryPanel } from '@state/panel/panel';
2
2
  export type PanelSide = 'left' | 'right';
3
3
  export interface UsePanelActions {
4
4
  openPrimary(panel: PrimaryPanel, side: PanelSide): void;
5
5
  closePrimary(side: PanelSide): void;
6
+ openSecondary(panel: SceneTreeSecondaryPanel): void;
7
+ closeSecondary(): void;
6
8
  }
7
9
  export declare function usePanelActions(): UsePanelActions;
@@ -1,3 +1,5 @@
1
- export type PrimaryPanel = 'appearance' | 'settings' | 'transforms';
2
- export declare const openedPanelActivePrimaryLeft: import("recoil").RecoilState<PrimaryPanel | undefined>;
3
- export declare const openedPanelActivePrimaryRight: import("recoil").RecoilState<PrimaryPanel | undefined>;
1
+ export type PrimaryPanel = 'appearance' | 'settings' | 'transforms' | string;
2
+ export type SceneTreeSecondaryPanel = 'Properties';
3
+ export declare const openedPanelActivePrimaryLeft: import("recoil").RecoilState<string | undefined>;
4
+ export declare const openedPanelActivePrimaryRight: import("recoil").RecoilState<string | undefined>;
5
+ export declare const openedPanelActiveSceneTreeSecondary: import("recoil").RecoilState<"Properties" | undefined>;
@@ -10,6 +10,7 @@ interface DefaultColumn extends ActiveColumn {
10
10
  }
11
11
  export declare function mapToColumn(label: string, width: number): ActiveColumn;
12
12
  export declare const sceneTreeColumnsRefreshTrigger: import("recoil").RecoilState<number>;
13
+ export declare const sceneTreeColumnsWhitelistedColumns: import("recoil").RecoilState<string[]>;
13
14
  export declare const sceneTreeColumnsAvailableColumns: import("recoil").RecoilValueReadOnly<string[]>;
14
15
  export declare const sceneTreeColumnsAvailableSortedColumns: import("recoil").RecoilValueReadOnly<string[]>;
15
16
  export declare const sceneTreeColumnsVisibleMetadataColumnNames: import("recoil").RecoilState<string[]>;
@@ -1,3 +1,3 @@
1
1
  export * from './actions';
2
2
  export * from './columns';
3
- export * from './open-column-popover';
3
+ export * from './open-positioned-popover';
@@ -6,16 +6,15 @@ export declare enum PlacementDirection {
6
6
  LEFT = "left",
7
7
  RIGHT = "right"
8
8
  }
9
- export interface UseOpenColumnPopoverProps {
9
+ export interface UseOpenPositionedPopoverProps {
10
+ open: boolean;
10
11
  buttonElement: HTMLVertexIconButtonElement | null;
11
12
  horizontalOffset?: number;
12
13
  verticalOffset?: number;
13
14
  }
14
- export interface UseOpenColumnPopover {
15
- open: boolean;
15
+ export interface UseOpenPositionedPopover {
16
16
  position?: Point.Point;
17
17
  direction?: PlacementDirection;
18
18
  handleOpen: React.EffectCallback;
19
- handleClose: React.EffectCallback;
20
19
  }
21
- export declare function useOpenColumnPopover({ buttonElement, horizontalOffset, verticalOffset, }: UseOpenColumnPopoverProps): UseOpenColumnPopover;
20
+ export declare function useOpenPositionedPopover({ open, buttonElement, horizontalOffset, verticalOffset, }: UseOpenPositionedPopoverProps): UseOpenPositionedPopover;
@@ -1,9 +1,13 @@
1
1
  import type { SceneTreeOperationHandler } from '@vertexvis/viewer/dist/types/components/scene-tree/lib/handlers';
2
+ import { SceneTreePopoverType } from './core';
2
3
  export interface UseSceneTreeActions {
3
4
  toggleSelection: SceneTreeOperationHandler;
4
5
  toggleExpansion: SceneTreeOperationHandler;
5
6
  toggleVisibility: SceneTreeOperationHandler;
6
7
  flyToRow: (rowClientY: number) => Promise<void>;
8
+ flyToFirstSelectedItem: () => Promise<void>;
7
9
  setContextMenuItem: (rowClientY: number) => Promise<void>;
10
+ openSceneTreePopover(sceneTreePopover: SceneTreePopoverType | undefined): void;
11
+ closeSceneTreePopover(): void;
8
12
  }
9
13
  export declare function useSceneTreeActions(): UseSceneTreeActions;
@@ -2,3 +2,6 @@ import type { SceneTreeController } from '@vertexvis/viewer';
2
2
  export declare const sceneTreeLoaderVisible: import("recoil").RecoilState<boolean>;
3
3
  export declare const sceneTreeElement: import("recoil").RecoilState<HTMLVertexSceneTreeElement | null | undefined>;
4
4
  export declare const sceneTreeController: import("recoil").RecoilState<SceneTreeController | undefined>;
5
+ export type SceneTreePopoverType = 'scene-tree-search' | 'scene-tree-columns';
6
+ export declare const sceneTreeOpenPopover: import("recoil").RecoilState<SceneTreePopoverType | undefined>;
7
+ export declare const sceneTreePopoverIsOpen: (param: SceneTreePopoverType) => import("recoil").RecoilValueReadOnly<boolean>;
@@ -1 +1,6 @@
1
+ import * as Columns from './columns';
2
+ import * as Core from './core';
3
+ import * as Metadata from './metadata';
4
+ import * as Search from './search';
1
5
  export * from './types';
6
+ export { Columns, Core, Metadata, Search };
@@ -0,0 +1 @@
1
+ export * from './metadata';
@@ -0,0 +1,2 @@
1
+ export declare const sceneTreeAdditionalMetadataKeys: import("recoil").RecoilState<string[]>;
2
+ export declare const sceneTreeActiveMetadataKeys: import("recoil").RecoilValueReadOnly<string[]>;
@@ -1,7 +1,8 @@
1
1
  export interface SceneTreeSearchActions {
2
2
  setMetadataSearchKeys(metadataSearchKeys: string[]): void;
3
- updateSearchForActiveColumns(searchTerm: string): Promise<void>;
4
- updateMetadataSearchAfterSearchKeysChange(columnName: string, enableColumn: boolean): Promise<void>;
3
+ updateMetadataSearchAfterSearchKeysChange(columnName: string, enableColumn: boolean, visibleColumns: string[], searchTerm?: string): Promise<void>;
4
+ updateMetadataSearchAfterColumnVisibilityChange(previousColumns: string[], updatedColumns: string[], searchTerm?: string): Promise<void>;
5
5
  setMetadataSearchExactMatch(exactMatch: boolean): void;
6
+ setMetadataSearchRemoveHiddenItems(removeHiddenItems: boolean): void;
6
7
  }
7
8
  export declare const useSceneTreeSearchActions: () => SceneTreeSearchActions;
@@ -2,6 +2,7 @@ export declare const sceneTreeSearchActive: import("recoil").RecoilState<boolean
2
2
  export declare const sceneTreeColumnsPartial: import("recoil").RecoilState<boolean>;
3
3
  export declare const sceneTreeSearchValue: import("recoil").RecoilState<string | undefined>;
4
4
  export declare const sceneTreeSearchExactMatch: import("recoil").RecoilState<boolean>;
5
+ export declare const sceneTreeSearchRemoveHiddenItems: import("recoil").RecoilState<boolean>;
5
6
  export declare const sceneTreeSearchResultCount: import("recoil").RecoilState<number>;
6
7
  export declare const sceneTreeSearchActiveColumns: import("recoil").RecoilState<string[]>;
7
8
  export declare const sceneTreeSearchNameColumnActive: import("recoil").RecoilValueReadOnly<boolean>;
@@ -12,3 +12,8 @@ export interface AssemblyBackgroundColors {
12
12
  hovered: string;
13
13
  selected: string;
14
14
  }
15
+ export interface MetadataColumn {
16
+ key: string;
17
+ initialWidth?: number;
18
+ minWidth?: number;
19
+ }
@@ -0,0 +1,8 @@
1
+ export interface UseSceneViewItemActions {
2
+ /**
3
+ * Invalidates the `fetchedItems` cache of scene items. This should be
4
+ * used when resetting the scene to the original state.
5
+ */
6
+ invalidateCachedItems(): void;
7
+ }
8
+ export declare function useSceneViewItemActions(): UseSceneViewItemActions;
@@ -0,0 +1,2 @@
1
+ export * from './actions';
2
+ export * from './items';
@@ -0,0 +1,2 @@
1
+ export declare const fetchedItemInvalidator: import("recoil").RecoilState<number>;
2
+ export declare const fetchedItem: (param: string) => import("recoil").RecoilValueReadOnly<import("@vertexvis/viewer").SceneViewItem | undefined>;
@@ -11,9 +11,12 @@ export declare const selectionSelectedItemIds: import("recoil").RecoilState<stri
11
11
  export declare const selectionLastSelected: import("recoil").RecoilState<SelectionItem | undefined>;
12
12
  export declare const selectionLastSelectionFromViewer: import("recoil").RecoilState<boolean>;
13
13
  export declare const selectionLastSelectWasMultiSelect: import("recoil").RecoilState<boolean>;
14
+ export declare const selectionHasMultipleSelected: import("recoil").RecoilValueReadOnly<boolean>;
15
+ export declare const selectionFirstSelectedItemInTreeId: import("recoil").RecoilState<string | undefined>;
14
16
  export declare const selectionHighestSelectedAncestor: import("recoil").RecoilValueReadOnly<string | undefined>;
15
17
  export declare const selectionPreviousVisibleSummary: import("recoil").RecoilState<SceneViewSummary.ItemSetSummary | undefined>;
16
18
  export declare const selectionVisibleSummary: import("recoil").RecoilState<SceneViewSummary.ItemSetSummary | undefined>;
17
19
  export declare const selectionVisibleCount: import("recoil").RecoilValueReadOnly<number>;
18
20
  export declare const selectionBoundingBoxCenter: import("recoil").RecoilValueReadOnly<Vector3.Vector3>;
19
21
  export declare const selectionIsActive: import("recoil").RecoilValueReadOnly<boolean>;
22
+ export declare const fetchedAndSelectedItems: import("recoil").RecoilValueReadOnly<(import("@vertexvis/viewer").SceneViewItem | undefined)[]>;
@@ -1,5 +1,6 @@
1
1
  import { Hit } from '@state/hits';
2
2
  import { Euler, Vector3 } from '@vertexvis/geometry';
3
+ import { UUID } from '@vertexvis/utils';
3
4
  export interface TransformActions {
4
5
  enableTransformWidget: (position?: Vector3.Vector3, setPositionToSelection?: boolean) => Promise<void>;
5
6
  disableTransformWidget: () => void;
@@ -7,7 +8,7 @@ export interface TransformActions {
7
8
  clearTransformWidgetOrientation: () => void;
8
9
  setTransformWidgetPosition: (position?: Vector3.Vector3, disableSync?: boolean) => Promise<void>;
9
10
  clearTransformWidgetPosition: () => void;
10
- invalidateTransforms: () => void;
11
+ invalidateTransforms: () => Promise<void>;
11
12
  setIsInteractivelyTransforming: (interacting: boolean) => void;
12
13
  setDefaultWidgetPosition: () => Promise<void>;
13
14
  setDefaultWidgetPositionToSelection: () => Promise<void>;
@@ -17,5 +18,6 @@ export interface TransformActions {
17
18
  orientToHitResult: (hit?: Hit) => Promise<void>;
18
19
  clearSelectedTransforms: () => Promise<void>;
19
20
  clearAllTransforms: () => Promise<void>;
21
+ applyTransformToItem: (itemId: UUID.UUID) => Promise<void>;
20
22
  }
21
23
  export declare const useTransformActions: () => TransformActions;
@@ -0,0 +1,10 @@
1
+ import { ItemTransforms, TransformCoordinateSpace } from '@state/transforms/transforms';
2
+ import { DistanceUnitType } from '@util/numbers/distance-units';
3
+ import { Matrix4 } from '@vertexvis/geometry';
4
+ import { Transform } from '@vertexvis/viewer';
5
+ export declare function pickLocalOrWorldTransform(transform: ItemTransforms, coordinateSpace: TransformCoordinateSpace): Transform;
6
+ export declare function mapItemTransforms(transforms: ItemTransforms, map: (t: Transform) => Transform): ItemTransforms;
7
+ export declare function makeItemTransforms(transform: Transform, parentWM: Matrix4.Matrix4, coordinateSpace: TransformCoordinateSpace): ItemTransforms;
8
+ export declare function convertTransformToUnits(transform: Transform, units: DistanceUnitType): Transform;
9
+ export declare function convertTransformFromUnits(transform: Transform, units: DistanceUnitType): Transform;
10
+ export declare function toValidTransform(transform: Transform): Transform;
@@ -1,2 +1,3 @@
1
1
  export * from './actions';
2
+ export * from './edit-transforms';
2
3
  export * from './transforms';
@@ -1,12 +1,7 @@
1
- import { Euler, Vector3 } from '@vertexvis/geometry';
2
- /**
3
- * A type that wraps the local and world transforms for an item.
4
- */
5
- export interface Transform {
6
- position: Vector3.Vector3;
7
- rotation: Vector3.Vector3;
8
- scale: number;
9
- }
1
+ import { DistanceUnitType } from '@util/numbers/distance-units';
2
+ import { Euler, Matrix4, Vector3 } from '@vertexvis/geometry';
3
+ import { UUID } from '@vertexvis/utils';
4
+ import { Transform } from '@vertexvis/viewer';
10
5
  /**
11
6
  * A type that wraps the local and world transforms for an item.
12
7
  */
@@ -14,7 +9,16 @@ export interface ItemTransforms {
14
9
  local: Transform;
15
10
  world: Transform;
16
11
  }
12
+ interface EditedItemTransform {
13
+ transform: Transform;
14
+ coordinateSpace: TransformCoordinateSpace;
15
+ units: DistanceUnitType;
16
+ }
17
17
  export type TransformCoordinateSpace = 'world' | 'local';
18
+ /**
19
+ * A transform that is equivalent to an identity matrix.
20
+ */
21
+ export declare const identityTransform: Transform;
18
22
  export declare const transformWidgetEnabled: import("recoil").RecoilState<boolean>;
19
23
  export declare const transformWidgetPosition: import("recoil").RecoilState<Vector3.Vector3 | undefined>;
20
24
  export declare const transformWidgetOrientationOverride: import("recoil").RecoilState<Euler.Euler | undefined>;
@@ -36,3 +40,45 @@ export declare const appliedItemTransformIds: import("recoil").RecoilState<strin
36
40
  * The state of the chosen coordinate space, e.g. local or world coordinates.
37
41
  */
38
42
  export declare const selectedCoordinateSpace: import("recoil").RecoilState<TransformCoordinateSpace>;
43
+ /**
44
+ * An atom that tracks the state of the transform that was edited through the
45
+ * UI.
46
+ *
47
+ * **Note:** The UI should use the `displayedItemTransform` selector for
48
+ * presentation and editing, as that selector contains the business logic for
49
+ * pulling the correct state of the transform.
50
+ */
51
+ export declare const editedItemTransform: (param: string) => import("recoil").RecoilState<EditedItemTransform | undefined>;
52
+ /**
53
+ * A selector that returns the transform that can be displayed in the UI. This
54
+ * selector supports a setter than can be used by the UI to update the edited
55
+ * transform state, and apply the transform to the scene item.
56
+ */
57
+ export declare const displayedItemTransform: (param: string | undefined) => import("recoil").RecoilState<Transform | undefined>;
58
+ /**
59
+ * An async selector that fetches the local and world transforms for an item.
60
+ */
61
+ export declare const fetchedItemTransforms: (param: string) => import("recoil").RecoilValueReadOnly<ItemTransforms | undefined>;
62
+ /**
63
+ * An invalidator state to increment when we want the current transforms to be updated
64
+ */
65
+ export declare const transformInvalidator: import("recoil").RecoilState<number>;
66
+ /**
67
+ * A selector that will return the world matrix of an item's parent. If an item
68
+ * doesn't have a parent, then an identity matrix will be returned.
69
+ *
70
+ * **Note:** if the parent item has not been loaded, then this will fetch the
71
+ * parent item.
72
+ */
73
+ export declare const parentItemWorldMatrix: (param: string | undefined) => import("recoil").RecoilValueReadOnly<Matrix4.Matrix4 | undefined>;
74
+ interface UseEditItemTransform {
75
+ transform: Transform | undefined;
76
+ loading: boolean;
77
+ error: unknown;
78
+ update(newTransform: Transform): Promise<void>;
79
+ }
80
+ /**
81
+ * Returns a hook that can be used to edit the transform of an item.
82
+ */
83
+ export declare function useEditItemTransform(itemId?: UUID.UUID): UseEditItemTransform;
84
+ export {};
@@ -4,6 +4,6 @@ export declare const DEFAULT_CAMERA_ANIMATION_DURATION = 500;
4
4
  export interface UseViewerCameraActions {
5
5
  flyToById(id: string, animationMs?: number): Promise<void>;
6
6
  flyToByBoundingBox(boundingBox: BoundingBox.BoundingBox, animationMs?: number): Promise<void>;
7
- updateCameraType(type: ViewType): void;
7
+ updateCameraType(type: ViewType, checkBoundingBox: boolean): Promise<void>;
8
8
  }
9
9
  export declare function useViewerCameraActions(): UseViewerCameraActions;
@@ -4,3 +4,4 @@ export declare const viewerElementId: import("recoil").RecoilState<string>;
4
4
  export declare const viewerInitialSceneReady: import("recoil").RecoilState<boolean>;
5
5
  export declare const viewerBaseInteractionHandlerProvider: import("recoil").RecoilState<Promise<BaseInteractionHandler | undefined>>;
6
6
  export declare const viewerPrimaryInteractionType: import("recoil").RecoilState<InteractionType>;
7
+ export declare const viewerSceneViewId: import("recoil").RecoilState<string | undefined>;
@@ -1,6 +1,4 @@
1
1
  import { BoundingBox } from '@vertexvis/geometry';
2
- import type { Scene } from '@vertexvis/viewer';
3
2
  import type { FrameScene } from '@vertexvis/viewer/dist/types/lib/types';
4
- export declare const viewerSceneProvider: import("recoil").RecoilValueReadOnly<() => Promise<Scene | undefined>>;
5
3
  export declare const viewerFrameScene: import("recoil").RecoilState<FrameScene | undefined>;
6
4
  export declare const viewerSceneVisibleBoundingBox: import("recoil").RecoilValueReadOnly<BoundingBox.BoundingBox | undefined>;
@@ -0,0 +1 @@
1
+ export declare const defaultColorMaterialsWithId: import("@util/appearance/color").ColorMaterialWithId[];
@@ -1,3 +1,4 @@
1
1
  import { Point } from '@vertexvis/geometry';
2
+ export type PopoverSize = 'sm' | 'md' | 'lg' | 'xl';
2
3
  export type DraggablePopoverPlacement = 'left' | 'right';
3
4
  export declare function useDockedPlacement(parent: HTMLElement | null, placement: DraggablePopoverPlacement): Point.Point;
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ export declare function childrenAsArray<T>(children: T): T[];
3
+ export declare function filterChildElements<P>(children: React.ReactNode, element: (props: P) => React.ReactElement<P>): Array<React.ReactElement<P>>;
4
+ export declare function findChildElement<P>(children: React.ReactNode, element: (props: P) => React.ReactElement<P>): React.ReactElement<P> | undefined;
5
+ export declare function cloneChildNodeOrFunction<P>(children: React.ReactElement<P> | ((props: P) => React.ReactNode), props: P & React.Attributes): React.ReactNode;
@@ -1,2 +1,2 @@
1
1
  import type { HTMLStencilElement } from '@vertexvis/viewer/dist/types/stencil-public-runtime';
2
- export declare function whenComponentReady<T extends HTMLStencilElement, R>(component: T | undefined | null, execute: () => R): Promise<R | undefined>;
2
+ export declare function whenComponentReady<T extends HTMLStencilElement, R>(component: T | undefined | null, execute: () => R, providedCustomElements?: CustomElementRegistry, providedRequestAnimationFrame?: typeof requestAnimationFrame, providedSetTimeout?: typeof setTimeout): Promise<R | undefined>;
@@ -0,0 +1,5 @@
1
+ import { RecoilState } from 'recoil';
2
+ export interface UseStateSyncedValueOptions<T> {
3
+ transform?: (value: T) => T;
4
+ }
5
+ export declare function useStateSyncedValue<T>(state: RecoilState<T>, value?: T, { transform }?: UseStateSyncedValueOptions<T>): T;
@@ -0,0 +1,6 @@
1
+ import { Matrix4, Vector3 } from '@vertexvis/geometry';
2
+ import { Transform } from '@vertexvis/viewer';
3
+ export declare function scale(matrix4: number[]): number;
4
+ export declare function translation(matrix4: number[]): Vector3.Vector3;
5
+ export declare function rotation(matrix4: number[]): Vector3.Vector3;
6
+ export declare function toTransformFromApiMatrix(matrix: Matrix4.Matrix4 | undefined): Transform | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vertexvis/viewer-toolkit-react",
3
- "version": "0.0.5-canary.2",
3
+ "version": "0.0.5-canary.21",
4
4
  "description": "Components for common Vertex viewer usage patterns.",
5
5
  "author": "Vertex Developers <support@vertexvis.com> (https://developer.vertexvis.com)",
6
6
  "repository": {
@@ -32,9 +32,10 @@
32
32
  "prebuild": "yarn clean"
33
33
  },
34
34
  "dependencies": {
35
- "@vertexvis/utils": "^0.23.3",
35
+ "@vertexvis/utils": "^0.23.6-canary.9",
36
36
  "classnames": "^2.3.1",
37
37
  "pino": "^9.7.0",
38
+ "react-infinite-scroller": "^1.2.6",
38
39
  "recoil": "^0.7.7"
39
40
  },
40
41
  "devDependencies": {
@@ -46,23 +47,27 @@
46
47
  "@tailwindcss/postcss": "^4.0.12",
47
48
  "@testing-library/react": "^16.2.0",
48
49
  "@testing-library/user-event": "^14.6.1",
50
+ "@types/chance": "^1.1.6",
49
51
  "@types/jest": "^27.5.1",
50
52
  "@types/react": "^18.3.0",
51
53
  "@types/react-dom": "^18.3.0",
54
+ "@types/react-infinite-scroller": "^1.2.5",
52
55
  "@vertexvis/build-tools": "^0.10.1",
53
56
  "@vertexvis/eslint-config-vertexvis-typescript": "^0.5.1",
54
57
  "@vertexvis/jest-config-vertexvis": "^0.5.5",
55
- "@vertexvis/tailwind-config": "^0.1.2",
56
- "@vertexvis/ui-react": "^0.1.2",
57
- "@vertexvis/viewer-react": "^0.23.6-canary.7",
58
- "@vertexwebtoolkit/build": "^0.0.5-canary.2",
58
+ "@vertexvis/tailwind-config": "^0.1.3",
59
+ "@vertexvis/ui-react": "^0.1.3",
60
+ "@vertexvis/viewer-react": "^0.24.3-canary.2",
61
+ "@vertexwebtoolkit/build": "^0.0.5-canary.21",
59
62
  "autoprefixer": "^10.4.20",
63
+ "chance": "^1.1.13",
60
64
  "eslint": "8.49.0",
61
65
  "eslint-plugin-react-hooks": "^5.2.0",
62
66
  "eslint-plugin-storybook": "0.6.15",
63
67
  "identity-obj-proxy": "^3.0.0",
64
68
  "jest": "^29.7.0",
65
69
  "jest-environment-jsdom": "^29.7.0",
70
+ "jest-fetch-mock": "^3.0.3",
66
71
  "postcss": "^8.5.3",
67
72
  "prettier": "^3.5.3",
68
73
  "react": "^18.3.0",
@@ -78,11 +83,11 @@
78
83
  "tslib": "^2.8.1"
79
84
  },
80
85
  "peerDependencies": {
81
- "@vertexvis/ui-react": ">=0.1.0 < 1.0.0",
82
- "@vertexvis/viewer-react": ">=0.23.0 <1.0.0",
86
+ "@vertexvis/ui-react": ">=0.1.3 < 1.0.0",
87
+ "@vertexvis/viewer-react": ">=0.24.2 <1.0.0",
83
88
  "react": ">=16.3.0 <19.0.0",
84
89
  "react-dom": ">=16.3.0 <19.0.0",
85
90
  "tslib": ">=2.1.0"
86
91
  },
87
- "gitHead": "ba32ebef83644d2e9a5bb2ef4ae90a475627be53"
92
+ "gitHead": "8c8ebfc14d685264a3691848242a4ecb71b1ab13"
88
93
  }
@@ -1,7 +0,0 @@
1
- import { ColorMaterial } from '@vertexvis/viewer';
2
- export interface Props {
3
- onApplyMaterial?: (color: ColorMaterial.ColorMaterial | undefined) => void;
4
- onApplyMaterialToAll?: (color: ColorMaterial.ColorMaterial | undefined) => void;
5
- onApplyOpacity?: (opacity: number) => void;
6
- }
7
- export declare function VertexMaterialControls({ onApplyMaterial, onApplyMaterialToAll, onApplyOpacity, }: Props): JSX.Element;
@@ -1,9 +0,0 @@
1
- import { ColorMaterial } from '@vertexvis/viewer';
2
- export interface Props {
3
- onClearMaterial?: VoidFunction;
4
- onClearAllMaterials?: VoidFunction;
5
- onApplyMaterial?: (color: ColorMaterial.ColorMaterial | undefined) => void;
6
- onApplyMaterialToAll?: (color: ColorMaterial.ColorMaterial | undefined) => void;
7
- onApplyOpacity?: (opacity: number) => void;
8
- }
9
- export declare function VertexMaterialPanelSection({ onClearMaterial, onClearAllMaterials, onApplyMaterial, onApplyMaterialToAll, onApplyOpacity, }: Props): JSX.Element;
@@ -1,3 +0,0 @@
1
- import { VertexSceneTreeTableLayout as SdkVertexSceneTreeTableLayout } from '@vertexvis/viewer-react';
2
- import React from 'react';
3
- export declare const VertexSceneTreeTableLayout: (sdkProps: React.ComponentProps<typeof SdkVertexSceneTreeTableLayout>) => JSX.Element;
@@ -1,14 +0,0 @@
1
- import { AssemblyBackgroundColors, AssemblyFont } from '@state/scene-tree/types';
2
- import type { SceneTreeOperationHandler } from '@vertexvis/viewer/dist/types/components/scene-tree/lib/handlers';
3
- import { VertexSceneTree as SdkVertexSceneTree } from '@vertexvis/viewer-react';
4
- import React from 'react';
5
- export interface Props {
6
- readonly id?: string;
7
- readonly font?: Partial<AssemblyFont>;
8
- readonly backgroundColors?: Partial<AssemblyBackgroundColors>;
9
- readonly onToggleSelection?: SceneTreeOperationHandler;
10
- readonly onToggleExpansion?: SceneTreeOperationHandler;
11
- readonly onToggleVisibility?: SceneTreeOperationHandler;
12
- readonly children?: React.ReactNode;
13
- }
14
- export declare const VertexSceneTree: ({ id, font, backgroundColors, children, style, onPointerDown, onClick, onToggleSelection, onToggleExpansion, onToggleVisibility, className, rowData, ...sdkProps }: Props & React.ComponentProps<typeof SdkVertexSceneTree>) => JSX.Element;