@babylonjs/shared-ui-components 9.0.0 → 9.2.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/colorPicker/colorComponentEntry.d.ts +1 -1
- package/colorPicker/colorComponentEntry.js.map +1 -1
- package/colorPicker/colorPicker.d.ts +1 -1
- package/colorPicker/colorPicker.js.map +1 -1
- package/colorPicker/hexColor.d.ts +1 -1
- package/colorPicker/hexColor.js.map +1 -1
- package/components/Button.d.ts +1 -1
- package/components/Button.js.map +1 -1
- package/components/Label.d.ts +1 -1
- package/components/Label.js.map +1 -1
- package/components/bars/CommandBarComponent.d.ts +1 -1
- package/components/bars/CommandBarComponent.js.map +1 -1
- package/components/bars/CommandButton.module.scss +2 -0
- package/components/colorPicker/ColorComponentEntry.d.ts +1 -1
- package/components/colorPicker/ColorComponentEntry.js.map +1 -1
- package/components/colorPicker/ColorPicker.d.ts +1 -1
- package/components/colorPicker/ColorPicker.js.map +1 -1
- package/components/colorPicker/HexColor.d.ts +1 -1
- package/components/colorPicker/HexColor.js.map +1 -1
- package/components/layout/DraggableIcon.d.ts +2 -2
- package/components/layout/DraggableIcon.js.map +1 -1
- package/components/layout/FlexibleColumn.d.ts +1 -1
- package/components/layout/FlexibleColumn.js.map +1 -1
- package/components/layout/FlexibleDragHandler.d.ts +1 -1
- package/components/layout/FlexibleDragHandler.js.map +1 -1
- package/components/layout/FlexibleDropZone.d.ts +1 -1
- package/components/layout/FlexibleDropZone.js.map +1 -1
- package/components/layout/FlexibleGridContainer.d.ts +1 -1
- package/components/layout/FlexibleGridContainer.js.map +1 -1
- package/components/layout/FlexibleGridLayout.d.ts +2 -2
- package/components/layout/FlexibleGridLayout.js.map +1 -1
- package/components/layout/FlexibleResizeBar.d.ts +1 -1
- package/components/layout/FlexibleResizeBar.js.map +1 -1
- package/components/layout/FlexibleTab.d.ts +2 -2
- package/components/layout/FlexibleTab.js.map +1 -1
- package/components/layout/FlexibleTabsContainer.d.ts +2 -2
- package/components/layout/FlexibleTabsContainer.js.map +1 -1
- package/components/layout/LayoutContext.d.ts +1 -1
- package/components/layout/LayoutContext.js.map +1 -1
- package/components/layout/types.d.ts +1 -1
- package/components/layout/types.js.map +1 -1
- package/components/layout/utils.d.ts +1 -1
- package/components/layout/utils.js.map +1 -1
- package/components/lines/ColorPickerLineComponent.d.ts +2 -2
- package/components/lines/ColorPickerLineComponent.js.map +1 -1
- package/components/lines/NumericInputComponent.d.ts +1 -1
- package/components/lines/NumericInputComponent.js.map +1 -1
- package/components/lines/OptionsLineComponent.js.map +1 -1
- package/components/propertyTabComponentBase.d.ts +1 -1
- package/components/propertyTabComponentBase.js.map +1 -1
- package/components/reactGraphSystem/GraphConnectorHandle.d.ts +1 -1
- package/components/reactGraphSystem/GraphConnectorHandle.js.map +1 -1
- package/components/reactGraphSystem/GraphContainer.d.ts +1 -1
- package/components/reactGraphSystem/GraphContainer.js.map +1 -1
- package/components/reactGraphSystem/GraphLine.d.ts +1 -1
- package/components/reactGraphSystem/GraphLine.js.map +1 -1
- package/components/reactGraphSystem/GraphLinesContainer.d.ts +1 -1
- package/components/reactGraphSystem/GraphLinesContainer.js.map +1 -1
- package/components/reactGraphSystem/GraphNode.d.ts +1 -1
- package/components/reactGraphSystem/GraphNode.js.map +1 -1
- package/components/reactGraphSystem/GraphNodesContainer.d.ts +1 -1
- package/components/reactGraphSystem/GraphNodesContainer.js.map +1 -1
- package/components/reactGraphSystem/NodeRenderer.d.ts +2 -2
- package/components/reactGraphSystem/NodeRenderer.js.map +1 -1
- package/constToOptionsMaps.js.map +1 -1
- package/copyCommandToClipboard.js.map +1 -1
- package/fluent/hoc/buttonLine.d.ts +2 -2
- package/fluent/hoc/buttonLine.js.map +1 -1
- package/fluent/hoc/childWindow.d.ts +1 -1
- package/fluent/hoc/childWindow.js +1 -3
- package/fluent/hoc/childWindow.js.map +1 -1
- package/fluent/hoc/fileUploadLine.d.ts +2 -2
- package/fluent/hoc/fileUploadLine.js.map +1 -1
- package/fluent/hoc/fluentToolWrapper.d.ts +2 -2
- package/fluent/hoc/fluentToolWrapper.js.map +1 -1
- package/fluent/hoc/gradientList.d.ts +2 -2
- package/fluent/hoc/gradientList.js.map +1 -1
- package/fluent/hoc/pane.d.ts +2 -2
- package/fluent/hoc/pane.js.map +1 -1
- package/fluent/hoc/propertyLines/booleanBadgePropertyLine.d.ts +3 -3
- package/fluent/hoc/propertyLines/booleanBadgePropertyLine.js.map +1 -1
- package/fluent/hoc/propertyLines/checkboxPropertyLine.d.ts +3 -3
- package/fluent/hoc/propertyLines/checkboxPropertyLine.js.map +1 -1
- package/fluent/hoc/propertyLines/colorPropertyLine.d.ts +4 -5
- package/fluent/hoc/propertyLines/colorPropertyLine.js.map +1 -1
- package/fluent/hoc/propertyLines/comboBoxPropertyLine.d.ts +3 -3
- package/fluent/hoc/propertyLines/comboBoxPropertyLine.js.map +1 -1
- package/fluent/hoc/propertyLines/dropdownPropertyLine.d.ts +3 -3
- package/fluent/hoc/propertyLines/dropdownPropertyLine.js.map +1 -1
- package/fluent/hoc/propertyLines/entitySelectorPropertyLine.d.ts +12 -12
- package/fluent/hoc/propertyLines/entitySelectorPropertyLine.js.map +1 -1
- package/fluent/hoc/propertyLines/hexPropertyLine.d.ts +2 -2
- package/fluent/hoc/propertyLines/hexPropertyLine.js.map +1 -1
- package/fluent/hoc/propertyLines/inputPropertyLine.d.ts +4 -4
- package/fluent/hoc/propertyLines/inputPropertyLine.js.map +1 -1
- package/fluent/hoc/propertyLines/linkPropertyLine.d.ts +3 -3
- package/fluent/hoc/propertyLines/linkPropertyLine.js.map +1 -1
- package/fluent/hoc/propertyLines/propertyLine.d.ts +3 -3
- package/fluent/hoc/propertyLines/propertyLine.js +2 -4
- package/fluent/hoc/propertyLines/propertyLine.js.map +1 -1
- package/fluent/hoc/propertyLines/spinButtonPropertyLine.d.ts +3 -3
- package/fluent/hoc/propertyLines/spinButtonPropertyLine.js.map +1 -1
- package/fluent/hoc/propertyLines/stringifiedPropertyLine.d.ts +3 -3
- package/fluent/hoc/propertyLines/stringifiedPropertyLine.js.map +1 -1
- package/fluent/hoc/propertyLines/switchPropertyLine.d.ts +3 -3
- package/fluent/hoc/propertyLines/switchPropertyLine.js.map +1 -1
- package/fluent/hoc/propertyLines/syncedSliderPropertyLine.d.ts +2 -2
- package/fluent/hoc/propertyLines/syncedSliderPropertyLine.js.map +1 -1
- package/fluent/hoc/propertyLines/textAreaPropertyLine.d.ts +3 -3
- package/fluent/hoc/propertyLines/textAreaPropertyLine.js.map +1 -1
- package/fluent/hoc/propertyLines/textPropertyLine.d.ts +3 -3
- package/fluent/hoc/propertyLines/textPropertyLine.js.map +1 -1
- package/fluent/hoc/propertyLines/vectorPropertyLine.d.ts +4 -5
- package/fluent/hoc/propertyLines/vectorPropertyLine.js +2 -2
- package/fluent/hoc/propertyLines/vectorPropertyLine.js.map +1 -1
- package/fluent/hoc/textureUpload.d.ts +3 -3
- package/fluent/hoc/textureUpload.js.map +1 -1
- package/fluent/hooks/keyboardHooks.d.ts +1 -1
- package/fluent/hooks/keyboardHooks.js +1 -1
- package/fluent/hooks/keyboardHooks.js.map +1 -1
- package/fluent/primitives/accordion.contexts.d.ts +2 -2
- package/fluent/primitives/accordion.contexts.js.map +1 -1
- package/fluent/primitives/accordion.d.ts +1 -1
- package/fluent/primitives/accordion.js +1 -1
- package/fluent/primitives/accordion.js.map +1 -1
- package/fluent/primitives/button.d.ts +3 -3
- package/fluent/primitives/button.js.map +1 -1
- package/fluent/primitives/checkbox.d.ts +2 -2
- package/fluent/primitives/checkbox.js.map +1 -1
- package/fluent/primitives/clusteredLightContainerSelector.d.ts +5 -5
- package/fluent/primitives/clusteredLightContainerSelector.js.map +1 -1
- package/fluent/primitives/collapse.d.ts +1 -1
- package/fluent/primitives/collapse.js.map +1 -1
- package/fluent/primitives/colorPicker.d.ts +2 -2
- package/fluent/primitives/colorPicker.js +1 -1
- package/fluent/primitives/colorPicker.js.map +1 -1
- package/fluent/primitives/comboBox.d.ts +1 -1
- package/fluent/primitives/comboBox.js.map +1 -1
- package/fluent/primitives/contextMenu.d.ts +4 -4
- package/fluent/primitives/contextMenu.js +2 -2
- package/fluent/primitives/contextMenu.js.map +1 -1
- package/fluent/primitives/dropdown.d.ts +2 -2
- package/fluent/primitives/dropdown.js.map +1 -1
- package/fluent/primitives/entitySelector.d.ts +2 -2
- package/fluent/primitives/entitySelector.js +2 -6
- package/fluent/primitives/entitySelector.js.map +1 -1
- package/fluent/primitives/gradient.d.ts +2 -2
- package/fluent/primitives/gradient.js.map +1 -1
- package/fluent/primitives/infoLabel.d.ts +1 -1
- package/fluent/primitives/infoLabel.js.map +1 -1
- package/fluent/primitives/lazyComponent.d.ts +2 -2
- package/fluent/primitives/lazyComponent.js.map +1 -1
- package/fluent/primitives/link.d.ts +1 -1
- package/fluent/primitives/link.js.map +1 -1
- package/fluent/primitives/list.d.ts +1 -1
- package/fluent/primitives/list.js +1 -1
- package/fluent/primitives/list.js.map +1 -1
- package/fluent/primitives/materialSelector.d.ts +6 -6
- package/fluent/primitives/materialSelector.js.map +1 -1
- package/fluent/primitives/messageBar.d.ts +1 -1
- package/fluent/primitives/messageBar.js.map +1 -1
- package/fluent/primitives/nodeSelector.d.ts +6 -6
- package/fluent/primitives/nodeSelector.js.map +1 -1
- package/fluent/primitives/popover.d.ts +3 -3
- package/fluent/primitives/popover.js +1 -1
- package/fluent/primitives/popover.js.map +1 -1
- package/fluent/primitives/positionedPopover.d.ts +1 -1
- package/fluent/primitives/positionedPopover.js.map +1 -1
- package/fluent/primitives/primitive.d.ts +1 -1
- package/fluent/primitives/primitive.js.map +1 -1
- package/fluent/primitives/searchBar.js.map +1 -1
- package/fluent/primitives/searchBox.d.ts +1 -1
- package/fluent/primitives/searchBox.js.map +1 -1
- package/fluent/primitives/skeletonSelector.d.ts +6 -6
- package/fluent/primitives/skeletonSelector.js.map +1 -1
- package/fluent/primitives/slider.d.ts +2 -2
- package/fluent/primitives/slider.js.map +1 -1
- package/fluent/primitives/spinButton.d.ts +1 -1
- package/fluent/primitives/spinButton.js +5 -2
- package/fluent/primitives/spinButton.js.map +1 -1
- package/fluent/primitives/switch.d.ts +2 -2
- package/fluent/primitives/switch.js.map +1 -1
- package/fluent/primitives/syncedSlider.d.ts +2 -2
- package/fluent/primitives/syncedSlider.js +1 -1
- package/fluent/primitives/syncedSlider.js.map +1 -1
- package/fluent/primitives/textInput.d.ts +2 -2
- package/fluent/primitives/textInput.js.map +1 -1
- package/fluent/primitives/textarea.d.ts +2 -2
- package/fluent/primitives/textarea.js.map +1 -1
- package/fluent/primitives/textureSelector.d.ts +6 -6
- package/fluent/primitives/textureSelector.js +2 -2
- package/fluent/primitives/textureSelector.js.map +1 -1
- package/fluent/primitives/toast.d.ts +34 -3
- package/fluent/primitives/toast.js +9 -4
- package/fluent/primitives/toast.js.map +1 -1
- package/fluent/primitives/toggleButton.d.ts +3 -3
- package/fluent/primitives/toggleButton.js.map +1 -1
- package/fluent/primitives/tooltip.d.ts +2 -2
- package/fluent/primitives/tooltip.js.map +1 -1
- package/fluent/primitives/uploadButton.d.ts +2 -2
- package/fluent/primitives/uploadButton.js.map +1 -1
- package/fluent/primitives/utils.d.ts +2 -2
- package/fluent/primitives/utils.js.map +1 -1
- package/historyStack.d.ts +9 -1
- package/historyStack.js +15 -0
- package/historyStack.js.map +1 -1
- package/lines/booleanLineComponent.js +2 -2
- package/lines/checkBoxLineComponent.d.ts +3 -3
- package/lines/checkBoxLineComponent.js.map +1 -1
- package/lines/color3LineComponent.d.ts +3 -3
- package/lines/color3LineComponent.js.map +1 -1
- package/lines/color4LineComponent.d.ts +3 -3
- package/lines/color4LineComponent.js.map +1 -1
- package/lines/colorLineComponent.d.ts +3 -3
- package/lines/colorLineComponent.js.map +1 -1
- package/lines/colorPickerComponent.d.ts +2 -2
- package/lines/colorPickerComponent.js.map +1 -1
- package/lines/draggableLineComponent.d.ts +1 -1
- package/lines/draggableLineComponent.js.map +1 -1
- package/lines/fileButtonLineComponent.js +1 -1
- package/lines/floatLineComponent.d.ts +3 -3
- package/lines/floatLineComponent.js.map +1 -1
- package/lines/hexLineComponent.d.ts +3 -3
- package/lines/hexLineComponent.js.map +1 -1
- package/lines/lineContainerComponent.d.ts +1 -1
- package/lines/lineContainerComponent.js.map +1 -1
- package/lines/lineWithFileButtonComponent.js +1 -1
- package/lines/lineWithFileButtonComponent.js.map +1 -1
- package/lines/linkButtonComponent.d.ts +1 -1
- package/lines/linkButtonComponent.js.map +1 -1
- package/lines/matrixLineComponent.d.ts +4 -5
- package/lines/matrixLineComponent.js.map +1 -1
- package/lines/messageLineComponent.d.ts +1 -1
- package/lines/messageLineComponent.js.map +1 -1
- package/lines/numericInputComponent.d.ts +1 -1
- package/lines/numericInputComponent.js.map +1 -1
- package/lines/optionsLineComponent.d.ts +3 -3
- package/lines/optionsLineComponent.js.map +1 -1
- package/lines/radioLineComponent.d.ts +1 -1
- package/lines/radioLineComponent.js.map +1 -1
- package/lines/sliderLineComponent.d.ts +3 -3
- package/lines/sliderLineComponent.js.map +1 -1
- package/lines/targetsProxy.d.ts +2 -2
- package/lines/targetsProxy.js.map +1 -1
- package/lines/textInputLineComponent.d.ts +4 -5
- package/lines/textInputLineComponent.js.map +1 -1
- package/lines/textureButtonLineComponent.d.ts +2 -2
- package/lines/textureButtonLineComponent.js.map +1 -1
- package/lines/vector2LineComponent.d.ts +3 -3
- package/lines/vector2LineComponent.js.map +1 -1
- package/lines/vector3LineComponent.d.ts +3 -3
- package/lines/vector3LineComponent.js.map +1 -1
- package/lines/vector4LineComponent.d.ts +3 -3
- package/lines/vector4LineComponent.js.map +1 -1
- package/nodeGraphSystem/automaticProperties.d.ts +2 -2
- package/nodeGraphSystem/automaticProperties.js.map +1 -1
- package/nodeGraphSystem/common.module.scss +3 -0
- package/nodeGraphSystem/frameNodePort.d.ts +6 -6
- package/nodeGraphSystem/frameNodePort.js.map +1 -1
- package/nodeGraphSystem/graphCanvas.d.ts +43 -6
- package/nodeGraphSystem/graphCanvas.js +139 -6
- package/nodeGraphSystem/graphCanvas.js.map +1 -1
- package/nodeGraphSystem/graphFrame.d.ts +4 -4
- package/nodeGraphSystem/graphFrame.js.map +1 -1
- package/nodeGraphSystem/graphMinimap.d.ts +79 -0
- package/nodeGraphSystem/graphMinimap.js +319 -0
- package/nodeGraphSystem/graphMinimap.js.map +1 -0
- package/nodeGraphSystem/graphMinimap.module.scss +30 -0
- package/nodeGraphSystem/graphNode.d.ts +24 -8
- package/nodeGraphSystem/graphNode.js +76 -1
- package/nodeGraphSystem/graphNode.js.map +1 -1
- package/nodeGraphSystem/graphNode.module.scss +61 -0
- package/nodeGraphSystem/graphSearch.d.ts +54 -0
- package/nodeGraphSystem/graphSearch.js +181 -0
- package/nodeGraphSystem/graphSearch.js.map +1 -0
- package/nodeGraphSystem/graphSearch.module.scss +86 -0
- package/nodeGraphSystem/graphStickyNote.d.ts +94 -0
- package/nodeGraphSystem/graphStickyNote.js +310 -0
- package/nodeGraphSystem/graphStickyNote.js.map +1 -0
- package/nodeGraphSystem/graphStickyNote.module.scss +87 -0
- package/nodeGraphSystem/interfaces/displayManager.d.ts +4 -4
- package/nodeGraphSystem/interfaces/displayManager.js.map +1 -1
- package/nodeGraphSystem/interfaces/nodeContainer.d.ts +2 -2
- package/nodeGraphSystem/interfaces/nodeContainer.js.map +1 -1
- package/nodeGraphSystem/interfaces/nodeData.d.ts +4 -2
- package/nodeGraphSystem/interfaces/nodeData.js.map +1 -1
- package/nodeGraphSystem/interfaces/nodeLocationInfo.d.ts +10 -0
- package/nodeGraphSystem/interfaces/nodeLocationInfo.js.map +1 -1
- package/nodeGraphSystem/interfaces/portData.d.ts +4 -3
- package/nodeGraphSystem/interfaces/portData.js +1 -0
- package/nodeGraphSystem/interfaces/portData.js.map +1 -1
- package/nodeGraphSystem/interfaces/propertyComponentProps.d.ts +2 -2
- package/nodeGraphSystem/interfaces/propertyComponentProps.js.map +1 -1
- package/nodeGraphSystem/interfaces/selectionChangedOptions.d.ts +8 -7
- package/nodeGraphSystem/interfaces/selectionChangedOptions.js.map +1 -1
- package/nodeGraphSystem/nodeLink.d.ts +16 -4
- package/nodeGraphSystem/nodeLink.js +77 -0
- package/nodeGraphSystem/nodeLink.js.map +1 -1
- package/nodeGraphSystem/nodePort.d.ts +8 -8
- package/nodeGraphSystem/nodePort.js +26 -1
- package/nodeGraphSystem/nodePort.js.map +1 -1
- package/nodeGraphSystem/nodePort.module.scss +37 -0
- package/nodeGraphSystem/propertyLedger.d.ts +2 -2
- package/nodeGraphSystem/propertyLedger.js.map +1 -1
- package/nodeGraphSystem/searchBox.d.ts +1 -1
- package/nodeGraphSystem/searchBox.js.map +1 -1
- package/nodeGraphSystem/stateManager.d.ts +18 -12
- package/nodeGraphSystem/stateManager.js +6 -0
- package/nodeGraphSystem/stateManager.js.map +1 -1
- package/nodeGraphSystem/tools.d.ts +4 -4
- package/nodeGraphSystem/tools.js.map +1 -1
- package/nodeGraphSystem/typeLedger.d.ts +4 -4
- package/nodeGraphSystem/typeLedger.js.map +1 -1
- package/nodeGraphSystem/types/framePortData.d.ts +2 -2
- package/nodeGraphSystem/types/framePortData.js.map +1 -1
- package/package.json +3 -4
- package/split/splitContainer.d.ts +1 -1
- package/split/splitContainer.js +3 -2
- package/split/splitContainer.js.map +1 -1
- package/split/splitter.d.ts +1 -1
- package/split/splitter.js.map +1 -1
- package/tabs/propertyGrids/gui/checkboxPropertyGridComponent.d.ts +4 -4
- package/tabs/propertyGrids/gui/checkboxPropertyGridComponent.js.map +1 -1
- package/tabs/propertyGrids/gui/colorPickerPropertyGridComponent.d.ts +4 -4
- package/tabs/propertyGrids/gui/colorPickerPropertyGridComponent.js.map +1 -1
- package/tabs/propertyGrids/gui/commonControlPropertyGridComponent.d.ts +3 -3
- package/tabs/propertyGrids/gui/commonControlPropertyGridComponent.js.map +1 -1
- package/tabs/propertyGrids/gui/controlPropertyGridComponent.d.ts +4 -4
- package/tabs/propertyGrids/gui/controlPropertyGridComponent.js.map +1 -1
- package/tabs/propertyGrids/gui/ellipsePropertyGridComponent.d.ts +4 -4
- package/tabs/propertyGrids/gui/ellipsePropertyGridComponent.js.map +1 -1
- package/tabs/propertyGrids/gui/gridPropertyGridComponent.d.ts +4 -4
- package/tabs/propertyGrids/gui/gridPropertyGridComponent.js.map +1 -1
- package/tabs/propertyGrids/gui/imageBasedSliderPropertyGridComponent.d.ts +4 -4
- package/tabs/propertyGrids/gui/imageBasedSliderPropertyGridComponent.js.map +1 -1
- package/tabs/propertyGrids/gui/imagePropertyGridComponent.d.ts +3 -3
- package/tabs/propertyGrids/gui/imagePropertyGridComponent.js.map +1 -1
- package/tabs/propertyGrids/gui/inputTextPropertyGridComponent.d.ts +4 -4
- package/tabs/propertyGrids/gui/inputTextPropertyGridComponent.js.map +1 -1
- package/tabs/propertyGrids/gui/linePropertyGridComponent.d.ts +4 -4
- package/tabs/propertyGrids/gui/linePropertyGridComponent.js.map +1 -1
- package/tabs/propertyGrids/gui/radioButtonPropertyGridComponent.d.ts +4 -4
- package/tabs/propertyGrids/gui/radioButtonPropertyGridComponent.js.map +1 -1
- package/tabs/propertyGrids/gui/rectanglePropertyGridComponent.d.ts +4 -4
- package/tabs/propertyGrids/gui/rectanglePropertyGridComponent.js.map +1 -1
- package/tabs/propertyGrids/gui/scrollViewerPropertyGridComponent.d.ts +4 -4
- package/tabs/propertyGrids/gui/scrollViewerPropertyGridComponent.js.map +1 -1
- package/tabs/propertyGrids/gui/sliderPropertyGridComponent.d.ts +4 -4
- package/tabs/propertyGrids/gui/sliderPropertyGridComponent.js.map +1 -1
- package/tabs/propertyGrids/gui/stackPanelPropertyGridComponent.d.ts +4 -4
- package/tabs/propertyGrids/gui/stackPanelPropertyGridComponent.js.map +1 -1
- package/tabs/propertyGrids/gui/textBlockPropertyGridComponent.d.ts +4 -4
- package/tabs/propertyGrids/gui/textBlockPropertyGridComponent.js.map +1 -1
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import * as styles from "./graphStickyNote.module.scss";
|
|
2
|
+
/**
|
|
3
|
+
* Auto-incrementing counter for unique sticky note IDs.
|
|
4
|
+
*/
|
|
5
|
+
let StickyNoteCounter = 0;
|
|
6
|
+
/**
|
|
7
|
+
* A free-floating sticky note annotation on the graph canvas.
|
|
8
|
+
*
|
|
9
|
+
* Sticky notes are lightweight, text-only overlays that live in the frame container.
|
|
10
|
+
* They support dragging, resizing, and inline editing of both title and body text.
|
|
11
|
+
* Unlike frames, they do not group or contain nodes.
|
|
12
|
+
*/
|
|
13
|
+
export class GraphStickyNote {
|
|
14
|
+
/** Unique ID for this sticky note */
|
|
15
|
+
get id() {
|
|
16
|
+
return this._id;
|
|
17
|
+
}
|
|
18
|
+
/** X position in canvas space */
|
|
19
|
+
get x() {
|
|
20
|
+
return this._x;
|
|
21
|
+
}
|
|
22
|
+
/** X position in canvas space */
|
|
23
|
+
set x(value) {
|
|
24
|
+
this._x = value;
|
|
25
|
+
this.element.style.left = `${this._ownerCanvas.getGridPosition(value)}px`;
|
|
26
|
+
}
|
|
27
|
+
/** Y position in canvas space */
|
|
28
|
+
get y() {
|
|
29
|
+
return this._y;
|
|
30
|
+
}
|
|
31
|
+
/** Y position in canvas space */
|
|
32
|
+
set y(value) {
|
|
33
|
+
this._y = value;
|
|
34
|
+
this.element.style.top = `${this._ownerCanvas.getGridPosition(value)}px`;
|
|
35
|
+
}
|
|
36
|
+
/** Width in pixels */
|
|
37
|
+
get width() {
|
|
38
|
+
return this._width;
|
|
39
|
+
}
|
|
40
|
+
/** Width in pixels */
|
|
41
|
+
set width(value) {
|
|
42
|
+
this._width = Math.max(100, value);
|
|
43
|
+
this.element.style.width = `${this._width}px`;
|
|
44
|
+
}
|
|
45
|
+
/** Height in pixels */
|
|
46
|
+
get height() {
|
|
47
|
+
return this._height;
|
|
48
|
+
}
|
|
49
|
+
/** Height in pixels */
|
|
50
|
+
set height(value) {
|
|
51
|
+
this._height = Math.max(60, value);
|
|
52
|
+
this.element.style.height = `${this._height}px`;
|
|
53
|
+
}
|
|
54
|
+
/** Display name */
|
|
55
|
+
get name() {
|
|
56
|
+
return this._name;
|
|
57
|
+
}
|
|
58
|
+
/** Display name */
|
|
59
|
+
set name(value) {
|
|
60
|
+
this._name = value;
|
|
61
|
+
this._titleElement.textContent = value;
|
|
62
|
+
}
|
|
63
|
+
/** Body text content */
|
|
64
|
+
get body() {
|
|
65
|
+
return this._body;
|
|
66
|
+
}
|
|
67
|
+
/** Body text content */
|
|
68
|
+
set body(value) {
|
|
69
|
+
this._body = value;
|
|
70
|
+
this._bodyElement.textContent = value;
|
|
71
|
+
}
|
|
72
|
+
/** Background color CSS value */
|
|
73
|
+
get color() {
|
|
74
|
+
return this._color;
|
|
75
|
+
}
|
|
76
|
+
/** Background color CSS value */
|
|
77
|
+
set color(value) {
|
|
78
|
+
this._color = value;
|
|
79
|
+
this.element.style.background = value;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Create a new sticky note on the canvas.
|
|
83
|
+
* @param canvas - the owning graph canvas component
|
|
84
|
+
*/
|
|
85
|
+
constructor(canvas) {
|
|
86
|
+
this._x = 0;
|
|
87
|
+
this._y = 0;
|
|
88
|
+
this._width = 180;
|
|
89
|
+
this._height = 120;
|
|
90
|
+
this._name = "Note";
|
|
91
|
+
this._body = "";
|
|
92
|
+
this._color = "rgba(255, 235, 130, 0.92)";
|
|
93
|
+
// Drag state
|
|
94
|
+
this._mouseStartX = 0;
|
|
95
|
+
this._mouseStartY = 0;
|
|
96
|
+
this._isDragging = false;
|
|
97
|
+
this._isResizing = false;
|
|
98
|
+
this._resizeStartW = 0;
|
|
99
|
+
this._resizeStartH = 0;
|
|
100
|
+
this._onDragMoveHandler = (evt) => {
|
|
101
|
+
if (!this._isDragging) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const zoom = this._ownerCanvas.zoom;
|
|
105
|
+
const dx = (evt.clientX - this._mouseStartX) / zoom;
|
|
106
|
+
const dy = (evt.clientY - this._mouseStartY) / zoom;
|
|
107
|
+
this._mouseStartX = evt.clientX;
|
|
108
|
+
this._mouseStartY = evt.clientY;
|
|
109
|
+
this.x += dx;
|
|
110
|
+
this.y += dy;
|
|
111
|
+
};
|
|
112
|
+
this._onDragEndHandler = (evt) => {
|
|
113
|
+
this._isDragging = false;
|
|
114
|
+
this._headerElement.releasePointerCapture(evt.pointerId);
|
|
115
|
+
this._headerElement.removeEventListener("pointermove", this._onDragMoveHandler);
|
|
116
|
+
this._headerElement.removeEventListener("pointerup", this._onDragEndHandler);
|
|
117
|
+
};
|
|
118
|
+
this._onResizeMoveHandler = (evt) => {
|
|
119
|
+
if (!this._isResizing) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const zoom = this._ownerCanvas.zoom;
|
|
123
|
+
const dx = (evt.clientX - this._mouseStartX) / zoom;
|
|
124
|
+
const dy = (evt.clientY - this._mouseStartY) / zoom;
|
|
125
|
+
this.width = this._resizeStartW + dx;
|
|
126
|
+
this.height = this._resizeStartH + dy;
|
|
127
|
+
};
|
|
128
|
+
this._onResizeEndHandler = (evt) => {
|
|
129
|
+
this._isResizing = false;
|
|
130
|
+
this._resizeHandle.releasePointerCapture(evt.pointerId);
|
|
131
|
+
this._resizeHandle.removeEventListener("pointermove", this._onResizeMoveHandler);
|
|
132
|
+
this._resizeHandle.removeEventListener("pointerup", this._onResizeEndHandler);
|
|
133
|
+
};
|
|
134
|
+
this._id = StickyNoteCounter++;
|
|
135
|
+
this._ownerCanvas = canvas;
|
|
136
|
+
const root = canvas.frameContainer;
|
|
137
|
+
const doc = root.ownerDocument;
|
|
138
|
+
// Root element
|
|
139
|
+
this.element = doc.createElement("div");
|
|
140
|
+
this.element.classList.add(styles["sticky-note"]);
|
|
141
|
+
root.appendChild(this.element);
|
|
142
|
+
// Header (drag handle + title + close button)
|
|
143
|
+
this._headerElement = doc.createElement("div");
|
|
144
|
+
this._headerElement.classList.add(styles["sticky-note-header"]);
|
|
145
|
+
this.element.appendChild(this._headerElement);
|
|
146
|
+
this._titleElement = doc.createElement("div");
|
|
147
|
+
this._titleElement.classList.add(styles["sticky-note-title"]);
|
|
148
|
+
this._titleElement.textContent = this._name;
|
|
149
|
+
this._titleElement.contentEditable = "false";
|
|
150
|
+
this._headerElement.appendChild(this._titleElement);
|
|
151
|
+
// Double-click title to edit
|
|
152
|
+
this._titleElement.addEventListener("dblclick", (evt) => {
|
|
153
|
+
evt.stopPropagation();
|
|
154
|
+
this._titleElement.contentEditable = "true";
|
|
155
|
+
this._titleElement.focus();
|
|
156
|
+
// Select all text
|
|
157
|
+
const range = doc.createRange();
|
|
158
|
+
range.selectNodeContents(this._titleElement);
|
|
159
|
+
const sel = doc.defaultView?.getSelection();
|
|
160
|
+
if (sel) {
|
|
161
|
+
sel.removeAllRanges();
|
|
162
|
+
sel.addRange(range);
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
this._titleElement.addEventListener("blur", () => {
|
|
166
|
+
this._titleElement.contentEditable = "false";
|
|
167
|
+
this._name = this._titleElement.textContent || "Note";
|
|
168
|
+
});
|
|
169
|
+
this._titleElement.addEventListener("keydown", (evt) => {
|
|
170
|
+
if (evt.key === "Enter") {
|
|
171
|
+
evt.preventDefault();
|
|
172
|
+
this._titleElement.blur();
|
|
173
|
+
}
|
|
174
|
+
evt.stopPropagation();
|
|
175
|
+
});
|
|
176
|
+
// Close button
|
|
177
|
+
const closeBtn = doc.createElement("div");
|
|
178
|
+
closeBtn.classList.add(styles["sticky-note-close"]);
|
|
179
|
+
closeBtn.textContent = "\u00D7"; // ×
|
|
180
|
+
closeBtn.addEventListener("pointerdown", (evt) => {
|
|
181
|
+
evt.stopPropagation();
|
|
182
|
+
});
|
|
183
|
+
closeBtn.addEventListener("click", (evt) => {
|
|
184
|
+
evt.stopPropagation();
|
|
185
|
+
this.dispose();
|
|
186
|
+
});
|
|
187
|
+
this._headerElement.appendChild(closeBtn);
|
|
188
|
+
// Body (editable text area)
|
|
189
|
+
this._bodyElement = doc.createElement("div");
|
|
190
|
+
this._bodyElement.classList.add(styles["sticky-note-body"]);
|
|
191
|
+
this._bodyElement.contentEditable = "true";
|
|
192
|
+
this._bodyElement.textContent = this._body;
|
|
193
|
+
this.element.appendChild(this._bodyElement);
|
|
194
|
+
this._bodyElement.addEventListener("input", () => {
|
|
195
|
+
this._body = this._bodyElement.textContent || "";
|
|
196
|
+
});
|
|
197
|
+
// Stop keyboard events from bubbling while editing body
|
|
198
|
+
this._bodyElement.addEventListener("keydown", (evt) => {
|
|
199
|
+
evt.stopPropagation();
|
|
200
|
+
});
|
|
201
|
+
// Resize handle
|
|
202
|
+
this._resizeHandle = doc.createElement("div");
|
|
203
|
+
this._resizeHandle.classList.add(styles["sticky-note-resize"]);
|
|
204
|
+
this.element.appendChild(this._resizeHandle);
|
|
205
|
+
// --- Event wiring ---
|
|
206
|
+
// Drag via header
|
|
207
|
+
this._headerElement.addEventListener("pointerdown", (evt) => this._onDragStart(evt));
|
|
208
|
+
// Resize via handle
|
|
209
|
+
this._resizeHandle.addEventListener("pointerdown", (evt) => this._onResizeStart(evt));
|
|
210
|
+
// Click to select
|
|
211
|
+
this.element.addEventListener("pointerdown", (evt) => {
|
|
212
|
+
evt.stopPropagation();
|
|
213
|
+
if (!this._ownerCanvas.selectedStickyNotes.includes(this)) {
|
|
214
|
+
this._ownerCanvas.stateManager.onSelectionChangedObservable.notifyObservers({ selection: this });
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
// Apply initial dimensions
|
|
218
|
+
this.element.style.width = `${this._width}px`;
|
|
219
|
+
this.element.style.height = `${this._height}px`;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Mark this note as visually selected or deselected.
|
|
223
|
+
* @param selected - whether the note is selected
|
|
224
|
+
*/
|
|
225
|
+
setIsSelected(selected) {
|
|
226
|
+
if (selected) {
|
|
227
|
+
this.element.classList.add(styles["selected"]);
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
this.element.classList.remove(styles["selected"]);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Serialize this sticky note to a plain data object.
|
|
235
|
+
* @returns the serialized data
|
|
236
|
+
*/
|
|
237
|
+
serialize() {
|
|
238
|
+
return {
|
|
239
|
+
x: this._x,
|
|
240
|
+
y: this._y,
|
|
241
|
+
width: this._width,
|
|
242
|
+
height: this._height,
|
|
243
|
+
name: this._name,
|
|
244
|
+
body: this._body,
|
|
245
|
+
color: this._color,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Create a sticky note from serialized data.
|
|
250
|
+
* @param data - the serialized sticky note data
|
|
251
|
+
* @param canvas - the owning graph canvas
|
|
252
|
+
* @returns the new sticky note instance
|
|
253
|
+
*/
|
|
254
|
+
static Parse(data, canvas) {
|
|
255
|
+
const note = new GraphStickyNote(canvas);
|
|
256
|
+
note.x = data.x;
|
|
257
|
+
note.y = data.y;
|
|
258
|
+
note.width = data.width;
|
|
259
|
+
note.height = data.height;
|
|
260
|
+
note.name = data.name;
|
|
261
|
+
note.body = data.body;
|
|
262
|
+
if (data.color) {
|
|
263
|
+
note.color = data.color;
|
|
264
|
+
}
|
|
265
|
+
return note;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Remove this sticky note from the canvas and clean up.
|
|
269
|
+
*/
|
|
270
|
+
dispose() {
|
|
271
|
+
this.element.parentElement?.removeChild(this.element);
|
|
272
|
+
const idx = this._ownerCanvas.stickyNotes.indexOf(this);
|
|
273
|
+
if (idx !== -1) {
|
|
274
|
+
this._ownerCanvas.stickyNotes.splice(idx, 1);
|
|
275
|
+
}
|
|
276
|
+
// Deselect if selected
|
|
277
|
+
const selIdx = this._ownerCanvas.selectedStickyNotes.indexOf(this);
|
|
278
|
+
if (selIdx !== -1) {
|
|
279
|
+
this._ownerCanvas.selectedStickyNotes.splice(selIdx, 1);
|
|
280
|
+
}
|
|
281
|
+
this._ownerCanvas.stateManager.onRebuildRequiredObservable.notifyObservers();
|
|
282
|
+
}
|
|
283
|
+
// --- Drag ---
|
|
284
|
+
_onDragStart(evt) {
|
|
285
|
+
// Don't drag if we're editing the title
|
|
286
|
+
if (this._titleElement.contentEditable === "true") {
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
this._isDragging = true;
|
|
290
|
+
this._mouseStartX = evt.clientX;
|
|
291
|
+
this._mouseStartY = evt.clientY;
|
|
292
|
+
this._headerElement.setPointerCapture(evt.pointerId);
|
|
293
|
+
this._headerElement.addEventListener("pointermove", this._onDragMoveHandler);
|
|
294
|
+
this._headerElement.addEventListener("pointerup", this._onDragEndHandler);
|
|
295
|
+
evt.stopPropagation();
|
|
296
|
+
}
|
|
297
|
+
// --- Resize ---
|
|
298
|
+
_onResizeStart(evt) {
|
|
299
|
+
this._isResizing = true;
|
|
300
|
+
this._mouseStartX = evt.clientX;
|
|
301
|
+
this._mouseStartY = evt.clientY;
|
|
302
|
+
this._resizeStartW = this._width;
|
|
303
|
+
this._resizeStartH = this._height;
|
|
304
|
+
this._resizeHandle.setPointerCapture(evt.pointerId);
|
|
305
|
+
this._resizeHandle.addEventListener("pointermove", this._onResizeMoveHandler);
|
|
306
|
+
this._resizeHandle.addEventListener("pointerup", this._onResizeEndHandler);
|
|
307
|
+
evt.stopPropagation();
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=graphStickyNote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphStickyNote.js","sourceRoot":"","sources":["../../../../dev/sharedUiComponents/src/nodeGraphSystem/graphStickyNote.ts"],"names":[],"mappings":"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","sourcesContent":["import * as styles from \"./graphStickyNote.module.scss\";\nimport { type GraphCanvasComponent } from \"./graphCanvas\";\nimport { type IStickyNoteData } from \"./interfaces/nodeLocationInfo\";\n\n/**\n * Auto-incrementing counter for unique sticky note IDs.\n */\nlet StickyNoteCounter = 0;\n\n/**\n * A free-floating sticky note annotation on the graph canvas.\n *\n * Sticky notes are lightweight, text-only overlays that live in the frame container.\n * They support dragging, resizing, and inline editing of both title and body text.\n * Unlike frames, they do not group or contain nodes.\n */\nexport class GraphStickyNote {\n /** The root DOM element for this sticky note. */\n public element: HTMLDivElement;\n\n private _ownerCanvas: GraphCanvasComponent;\n private _id: number;\n private _x = 0;\n private _y = 0;\n private _width = 180;\n private _height = 120;\n private _name = \"Note\";\n private _body = \"\";\n private _color = \"rgba(255, 235, 130, 0.92)\";\n\n // DOM\n private _headerElement: HTMLDivElement;\n private _titleElement: HTMLDivElement;\n private _bodyElement: HTMLDivElement;\n private _resizeHandle: HTMLDivElement;\n\n // Drag state\n private _mouseStartX = 0;\n private _mouseStartY = 0;\n private _isDragging = false;\n private _isResizing = false;\n private _resizeStartW = 0;\n private _resizeStartH = 0;\n\n /** Unique ID for this sticky note */\n public get id() {\n return this._id;\n }\n\n /** X position in canvas space */\n public get x() {\n return this._x;\n }\n\n /** X position in canvas space */\n public set x(value: number) {\n this._x = value;\n this.element.style.left = `${this._ownerCanvas.getGridPosition(value)}px`;\n }\n\n /** Y position in canvas space */\n public get y() {\n return this._y;\n }\n\n /** Y position in canvas space */\n public set y(value: number) {\n this._y = value;\n this.element.style.top = `${this._ownerCanvas.getGridPosition(value)}px`;\n }\n\n /** Width in pixels */\n public get width() {\n return this._width;\n }\n\n /** Width in pixels */\n public set width(value: number) {\n this._width = Math.max(100, value);\n this.element.style.width = `${this._width}px`;\n }\n\n /** Height in pixels */\n public get height() {\n return this._height;\n }\n\n /** Height in pixels */\n public set height(value: number) {\n this._height = Math.max(60, value);\n this.element.style.height = `${this._height}px`;\n }\n\n /** Display name */\n public get name() {\n return this._name;\n }\n\n /** Display name */\n public set name(value: string) {\n this._name = value;\n this._titleElement.textContent = value;\n }\n\n /** Body text content */\n public get body() {\n return this._body;\n }\n\n /** Body text content */\n public set body(value: string) {\n this._body = value;\n this._bodyElement.textContent = value;\n }\n\n /** Background color CSS value */\n public get color() {\n return this._color;\n }\n\n /** Background color CSS value */\n public set color(value: string) {\n this._color = value;\n this.element.style.background = value;\n }\n\n /**\n * Create a new sticky note on the canvas.\n * @param canvas - the owning graph canvas component\n */\n constructor(canvas: GraphCanvasComponent) {\n this._id = StickyNoteCounter++;\n this._ownerCanvas = canvas;\n\n const root = canvas.frameContainer;\n const doc = root.ownerDocument;\n\n // Root element\n this.element = doc.createElement(\"div\");\n this.element.classList.add(styles[\"sticky-note\"]);\n root.appendChild(this.element);\n\n // Header (drag handle + title + close button)\n this._headerElement = doc.createElement(\"div\");\n this._headerElement.classList.add(styles[\"sticky-note-header\"]);\n this.element.appendChild(this._headerElement);\n\n this._titleElement = doc.createElement(\"div\");\n this._titleElement.classList.add(styles[\"sticky-note-title\"]);\n this._titleElement.textContent = this._name;\n this._titleElement.contentEditable = \"false\";\n this._headerElement.appendChild(this._titleElement);\n\n // Double-click title to edit\n this._titleElement.addEventListener(\"dblclick\", (evt) => {\n evt.stopPropagation();\n this._titleElement.contentEditable = \"true\";\n this._titleElement.focus();\n // Select all text\n const range = doc.createRange();\n range.selectNodeContents(this._titleElement);\n const sel = doc.defaultView?.getSelection();\n if (sel) {\n sel.removeAllRanges();\n sel.addRange(range);\n }\n });\n\n this._titleElement.addEventListener(\"blur\", () => {\n this._titleElement.contentEditable = \"false\";\n this._name = this._titleElement.textContent || \"Note\";\n });\n\n this._titleElement.addEventListener(\"keydown\", (evt) => {\n if (evt.key === \"Enter\") {\n evt.preventDefault();\n this._titleElement.blur();\n }\n evt.stopPropagation();\n });\n\n // Close button\n const closeBtn = doc.createElement(\"div\");\n closeBtn.classList.add(styles[\"sticky-note-close\"]);\n closeBtn.textContent = \"\\u00D7\"; // ×\n closeBtn.addEventListener(\"pointerdown\", (evt) => {\n evt.stopPropagation();\n });\n closeBtn.addEventListener(\"click\", (evt) => {\n evt.stopPropagation();\n this.dispose();\n });\n this._headerElement.appendChild(closeBtn);\n\n // Body (editable text area)\n this._bodyElement = doc.createElement(\"div\");\n this._bodyElement.classList.add(styles[\"sticky-note-body\"]);\n this._bodyElement.contentEditable = \"true\";\n this._bodyElement.textContent = this._body;\n this.element.appendChild(this._bodyElement);\n\n this._bodyElement.addEventListener(\"input\", () => {\n this._body = this._bodyElement.textContent || \"\";\n });\n\n // Stop keyboard events from bubbling while editing body\n this._bodyElement.addEventListener(\"keydown\", (evt) => {\n evt.stopPropagation();\n });\n\n // Resize handle\n this._resizeHandle = doc.createElement(\"div\");\n this._resizeHandle.classList.add(styles[\"sticky-note-resize\"]);\n this.element.appendChild(this._resizeHandle);\n\n // --- Event wiring ---\n\n // Drag via header\n this._headerElement.addEventListener(\"pointerdown\", (evt) => this._onDragStart(evt));\n\n // Resize via handle\n this._resizeHandle.addEventListener(\"pointerdown\", (evt) => this._onResizeStart(evt));\n\n // Click to select\n this.element.addEventListener(\"pointerdown\", (evt) => {\n evt.stopPropagation();\n if (!this._ownerCanvas.selectedStickyNotes.includes(this)) {\n this._ownerCanvas.stateManager.onSelectionChangedObservable.notifyObservers({ selection: this });\n }\n });\n\n // Apply initial dimensions\n this.element.style.width = `${this._width}px`;\n this.element.style.height = `${this._height}px`;\n }\n\n /**\n * Mark this note as visually selected or deselected.\n * @param selected - whether the note is selected\n */\n public setIsSelected(selected: boolean) {\n if (selected) {\n this.element.classList.add(styles[\"selected\"]);\n } else {\n this.element.classList.remove(styles[\"selected\"]);\n }\n }\n\n /**\n * Serialize this sticky note to a plain data object.\n * @returns the serialized data\n */\n public serialize(): IStickyNoteData {\n return {\n x: this._x,\n y: this._y,\n width: this._width,\n height: this._height,\n name: this._name,\n body: this._body,\n color: this._color,\n };\n }\n\n /**\n * Create a sticky note from serialized data.\n * @param data - the serialized sticky note data\n * @param canvas - the owning graph canvas\n * @returns the new sticky note instance\n */\n public static Parse(data: IStickyNoteData, canvas: GraphCanvasComponent): GraphStickyNote {\n const note = new GraphStickyNote(canvas);\n note.x = data.x;\n note.y = data.y;\n note.width = data.width;\n note.height = data.height;\n note.name = data.name;\n note.body = data.body;\n if (data.color) {\n note.color = data.color;\n }\n return note;\n }\n\n /**\n * Remove this sticky note from the canvas and clean up.\n */\n public dispose() {\n this.element.parentElement?.removeChild(this.element);\n const idx = this._ownerCanvas.stickyNotes.indexOf(this);\n if (idx !== -1) {\n this._ownerCanvas.stickyNotes.splice(idx, 1);\n }\n // Deselect if selected\n const selIdx = this._ownerCanvas.selectedStickyNotes.indexOf(this);\n if (selIdx !== -1) {\n this._ownerCanvas.selectedStickyNotes.splice(selIdx, 1);\n }\n this._ownerCanvas.stateManager.onRebuildRequiredObservable.notifyObservers();\n }\n\n // --- Drag ---\n\n private _onDragStart(evt: PointerEvent) {\n // Don't drag if we're editing the title\n if (this._titleElement.contentEditable === \"true\") {\n return;\n }\n this._isDragging = true;\n this._mouseStartX = evt.clientX;\n this._mouseStartY = evt.clientY;\n this._headerElement.setPointerCapture(evt.pointerId);\n this._headerElement.addEventListener(\"pointermove\", this._onDragMoveHandler);\n this._headerElement.addEventListener(\"pointerup\", this._onDragEndHandler);\n evt.stopPropagation();\n }\n\n private _onDragMoveHandler = (evt: PointerEvent) => {\n if (!this._isDragging) {\n return;\n }\n const zoom = this._ownerCanvas.zoom;\n const dx = (evt.clientX - this._mouseStartX) / zoom;\n const dy = (evt.clientY - this._mouseStartY) / zoom;\n this._mouseStartX = evt.clientX;\n this._mouseStartY = evt.clientY;\n this.x += dx;\n this.y += dy;\n };\n\n private _onDragEndHandler = (evt: PointerEvent) => {\n this._isDragging = false;\n this._headerElement.releasePointerCapture(evt.pointerId);\n this._headerElement.removeEventListener(\"pointermove\", this._onDragMoveHandler);\n this._headerElement.removeEventListener(\"pointerup\", this._onDragEndHandler);\n };\n\n // --- Resize ---\n\n private _onResizeStart(evt: PointerEvent) {\n this._isResizing = true;\n this._mouseStartX = evt.clientX;\n this._mouseStartY = evt.clientY;\n this._resizeStartW = this._width;\n this._resizeStartH = this._height;\n this._resizeHandle.setPointerCapture(evt.pointerId);\n this._resizeHandle.addEventListener(\"pointermove\", this._onResizeMoveHandler);\n this._resizeHandle.addEventListener(\"pointerup\", this._onResizeEndHandler);\n evt.stopPropagation();\n }\n\n private _onResizeMoveHandler = (evt: PointerEvent) => {\n if (!this._isResizing) {\n return;\n }\n const zoom = this._ownerCanvas.zoom;\n const dx = (evt.clientX - this._mouseStartX) / zoom;\n const dy = (evt.clientY - this._mouseStartY) / zoom;\n this.width = this._resizeStartW + dx;\n this.height = this._resizeStartH + dy;\n };\n\n private _onResizeEndHandler = (evt: PointerEvent) => {\n this._isResizing = false;\n this._resizeHandle.releasePointerCapture(evt.pointerId);\n this._resizeHandle.removeEventListener(\"pointermove\", this._onResizeMoveHandler);\n this._resizeHandle.removeEventListener(\"pointerup\", this._onResizeEndHandler);\n };\n}\n"]}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
.sticky-note {
|
|
2
|
+
position: absolute;
|
|
3
|
+
min-width: 140px;
|
|
4
|
+
min-height: 80px;
|
|
5
|
+
background: rgba(255, 235, 130, 0.92);
|
|
6
|
+
border: 2px solid rgba(200, 180, 60, 0.7);
|
|
7
|
+
border-radius: 4px;
|
|
8
|
+
box-sizing: border-box;
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-direction: column;
|
|
11
|
+
z-index: 3;
|
|
12
|
+
box-shadow: 2px 3px 8px rgba(0, 0, 0, 0.25);
|
|
13
|
+
cursor: default;
|
|
14
|
+
user-select: none;
|
|
15
|
+
|
|
16
|
+
&.selected {
|
|
17
|
+
border-color: white;
|
|
18
|
+
box-shadow: 0 0 8px rgba(255, 255, 255, 0.5);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.sticky-note-header {
|
|
23
|
+
display: flex;
|
|
24
|
+
align-items: center;
|
|
25
|
+
padding: 4px 8px;
|
|
26
|
+
font-size: 11px;
|
|
27
|
+
font-weight: 700;
|
|
28
|
+
color: rgba(60, 50, 10, 0.85);
|
|
29
|
+
cursor: grab;
|
|
30
|
+
border-bottom: 1px solid rgba(200, 180, 60, 0.3);
|
|
31
|
+
flex-shrink: 0;
|
|
32
|
+
|
|
33
|
+
&:active {
|
|
34
|
+
cursor: grabbing;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.sticky-note-title {
|
|
39
|
+
flex: 1;
|
|
40
|
+
overflow: hidden;
|
|
41
|
+
text-overflow: ellipsis;
|
|
42
|
+
white-space: nowrap;
|
|
43
|
+
outline: none;
|
|
44
|
+
|
|
45
|
+
&[contenteditable="true"] {
|
|
46
|
+
cursor: text;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.sticky-note-close {
|
|
51
|
+
width: 16px;
|
|
52
|
+
height: 16px;
|
|
53
|
+
line-height: 16px;
|
|
54
|
+
text-align: center;
|
|
55
|
+
font-size: 14px;
|
|
56
|
+
cursor: pointer;
|
|
57
|
+
opacity: 0.5;
|
|
58
|
+
flex-shrink: 0;
|
|
59
|
+
margin-left: 4px;
|
|
60
|
+
|
|
61
|
+
&:hover {
|
|
62
|
+
opacity: 1;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.sticky-note-body {
|
|
67
|
+
flex: 1;
|
|
68
|
+
padding: 6px 8px;
|
|
69
|
+
font-size: 12px;
|
|
70
|
+
line-height: 1.4;
|
|
71
|
+
color: rgba(40, 35, 5, 0.9);
|
|
72
|
+
white-space: pre-wrap;
|
|
73
|
+
word-wrap: break-word;
|
|
74
|
+
overflow-y: auto;
|
|
75
|
+
outline: none;
|
|
76
|
+
cursor: text;
|
|
77
|
+
min-height: 40px;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.sticky-note-resize {
|
|
81
|
+
position: absolute;
|
|
82
|
+
right: 0;
|
|
83
|
+
bottom: 0;
|
|
84
|
+
width: 12px;
|
|
85
|
+
height: 12px;
|
|
86
|
+
cursor: nwse-resize;
|
|
87
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type
|
|
3
|
-
import type
|
|
4
|
-
import type
|
|
1
|
+
import { type Nullable } from "@babylonjs/core/types.js";
|
|
2
|
+
import { type StateManager } from "../stateManager.js";
|
|
3
|
+
import { type INodeData } from "./nodeData.js";
|
|
4
|
+
import { type IPortData } from "./portData.js";
|
|
5
5
|
export interface VisualContentDescription {
|
|
6
6
|
[key: string]: HTMLElement;
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"displayManager.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/nodeGraphSystem/interfaces/displayManager.ts"],"names":[],"mappings":"","sourcesContent":["import type
|
|
1
|
+
{"version":3,"file":"displayManager.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/nodeGraphSystem/interfaces/displayManager.ts"],"names":[],"mappings":"","sourcesContent":["import { type Nullable } from \"core/types\";\r\nimport { type StateManager } from \"../stateManager\";\r\nimport { type INodeData } from \"./nodeData\";\r\nimport { type IPortData } from \"./portData\";\r\n\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface VisualContentDescription {\r\n [key: string]: HTMLElement;\r\n}\r\n\r\nexport interface IDisplayManager {\r\n getHeaderClass(data: INodeData): string;\r\n shouldDisplayPortLabels(data: IPortData): boolean;\r\n updatePreviewContent(data: INodeData, contentArea: HTMLDivElement): void;\r\n updateFullVisualContent?(data: INodeData, visualContent: VisualContentDescription): void;\r\n getBackgroundColor(data: INodeData): string;\r\n getHeaderText(data: INodeData): string;\r\n onSelectionChanged?(data: INodeData, selectedData: Nullable<INodeData>, manager: StateManager): void;\r\n onDispose?(nodeData: INodeData, manager: StateManager): void;\r\n}\r\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type
|
|
1
|
+
import { type GraphNode } from "../graphNode.js";
|
|
2
|
+
import { type INodeData } from "./nodeData.js";
|
|
3
3
|
export interface INodeContainer {
|
|
4
4
|
nodes: GraphNode[];
|
|
5
5
|
appendNode(data: INodeData): GraphNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeContainer.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/nodeGraphSystem/interfaces/nodeContainer.ts"],"names":[],"mappings":"","sourcesContent":["import type
|
|
1
|
+
{"version":3,"file":"nodeContainer.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/nodeGraphSystem/interfaces/nodeContainer.ts"],"names":[],"mappings":"","sourcesContent":["import { type GraphNode } from \"../graphNode\";\r\nimport { type INodeData } from \"./nodeData\";\r\n\r\nexport interface INodeContainer {\r\n nodes: GraphNode[];\r\n appendNode(data: INodeData): GraphNode;\r\n}\r\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type
|
|
1
|
+
import { type Nullable } from "@babylonjs/core/types.js";
|
|
2
|
+
import { type IPortData } from "./portData.js";
|
|
3
3
|
export interface INodeData {
|
|
4
4
|
data: any;
|
|
5
5
|
name: string;
|
|
@@ -21,4 +21,6 @@ export interface INodeData {
|
|
|
21
21
|
canBeActivated?: boolean;
|
|
22
22
|
onInputCountChanged?: () => void;
|
|
23
23
|
onInputRemoved?: (index: number) => void;
|
|
24
|
+
onOutputCountChanged?: () => void;
|
|
25
|
+
onOutputRemoved?: (index: number) => void;
|
|
24
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeData.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/nodeGraphSystem/interfaces/nodeData.ts"],"names":[],"mappings":"","sourcesContent":["import type
|
|
1
|
+
{"version":3,"file":"nodeData.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/nodeGraphSystem/interfaces/nodeData.ts"],"names":[],"mappings":"","sourcesContent":["import { type Nullable } from \"core/types\";\r\nimport { type IPortData } from \"./portData\";\r\n\r\nexport interface INodeData {\r\n data: any;\r\n name: string;\r\n uniqueId: number;\r\n isInput: boolean;\r\n comments: string;\r\n executionTime?: number;\r\n\r\n refreshCallback?: () => void;\r\n\r\n prepareHeaderIcon: (iconDiv: HTMLDivElement, img: HTMLImageElement) => void;\r\n getClassName: () => string;\r\n dispose: () => void;\r\n\r\n getPortByName: (name: string) => Nullable<IPortData>;\r\n\r\n inputs: IPortData[];\r\n outputs: IPortData[];\r\n\r\n invisibleEndpoints?: Nullable<any[]>;\r\n\r\n isConnectedToOutput?: () => boolean;\r\n\r\n isActive?: boolean;\r\n setIsActive?: (value: boolean) => void;\r\n canBeActivated?: boolean;\r\n\r\n onInputCountChanged?: () => void;\r\n onInputRemoved?: (index: number) => void;\r\n onOutputCountChanged?: () => void;\r\n onOutputRemoved?: (index: number) => void;\r\n}\r\n"]}
|
|
@@ -15,12 +15,22 @@ export interface IFrameData {
|
|
|
15
15
|
blocks: number[];
|
|
16
16
|
comments: string;
|
|
17
17
|
}
|
|
18
|
+
export interface IStickyNoteData {
|
|
19
|
+
x: number;
|
|
20
|
+
y: number;
|
|
21
|
+
width: number;
|
|
22
|
+
height: number;
|
|
23
|
+
name: string;
|
|
24
|
+
body: string;
|
|
25
|
+
color?: string;
|
|
26
|
+
}
|
|
18
27
|
export interface IEditorData {
|
|
19
28
|
locations: INodeLocationInfo[];
|
|
20
29
|
x: number;
|
|
21
30
|
y: number;
|
|
22
31
|
zoom: number;
|
|
23
32
|
frames?: IFrameData[];
|
|
33
|
+
stickyNotes?: IStickyNoteData[];
|
|
24
34
|
map?: {
|
|
25
35
|
[key: number]: number;
|
|
26
36
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nodeLocationInfo.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/nodeGraphSystem/interfaces/nodeLocationInfo.ts"],"names":[],"mappings":"","sourcesContent":["export interface INodeLocationInfo {\r\n blockId: number;\r\n x: number;\r\n y: number;\r\n isCollapsed: boolean;\r\n}\r\n\r\nexport interface IFrameData {\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n color: number[];\r\n name: string;\r\n isCollapsed: boolean;\r\n blocks: number[];\r\n comments: string;\r\n}\r\n\r\nexport interface IEditorData {\r\n locations: INodeLocationInfo[];\r\n x: number;\r\n y: number;\r\n zoom: number;\r\n frames?: IFrameData[];\r\n map?: { [key: number]: number };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"nodeLocationInfo.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/nodeGraphSystem/interfaces/nodeLocationInfo.ts"],"names":[],"mappings":"","sourcesContent":["export interface INodeLocationInfo {\r\n blockId: number;\r\n x: number;\r\n y: number;\r\n isCollapsed: boolean;\r\n}\r\n\r\nexport interface IFrameData {\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n color: number[];\r\n name: string;\r\n isCollapsed: boolean;\r\n blocks: number[];\r\n comments: string;\r\n}\r\n\r\nexport interface IStickyNoteData {\r\n x: number;\r\n y: number;\r\n width: number;\r\n height: number;\r\n name: string;\r\n body: string;\r\n color?: string;\r\n}\r\n\r\nexport interface IEditorData {\r\n locations: INodeLocationInfo[];\r\n x: number;\r\n y: number;\r\n zoom: number;\r\n frames?: IFrameData[];\r\n stickyNotes?: IStickyNoteData[];\r\n map?: { [key: number]: number };\r\n}\r\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type
|
|
1
|
+
import { type Nullable } from "@babylonjs/core/types.js";
|
|
2
|
+
import { type GraphNode } from "../graphNode.js";
|
|
3
3
|
export declare enum PortDataDirection {
|
|
4
4
|
/** Input */
|
|
5
5
|
Input = 0,
|
|
@@ -8,7 +8,8 @@ export declare enum PortDataDirection {
|
|
|
8
8
|
}
|
|
9
9
|
export declare enum PortDirectValueTypes {
|
|
10
10
|
Float = 0,
|
|
11
|
-
Int = 1
|
|
11
|
+
Int = 1,
|
|
12
|
+
String = 2
|
|
12
13
|
}
|
|
13
14
|
export interface IPortDirectValueDefinition {
|
|
14
15
|
/**
|
|
@@ -9,5 +9,6 @@ export var PortDirectValueTypes;
|
|
|
9
9
|
(function (PortDirectValueTypes) {
|
|
10
10
|
PortDirectValueTypes[PortDirectValueTypes["Float"] = 0] = "Float";
|
|
11
11
|
PortDirectValueTypes[PortDirectValueTypes["Int"] = 1] = "Int";
|
|
12
|
+
PortDirectValueTypes[PortDirectValueTypes["String"] = 2] = "String";
|
|
12
13
|
})(PortDirectValueTypes || (PortDirectValueTypes = {}));
|
|
13
14
|
//# sourceMappingURL=portData.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portData.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/nodeGraphSystem/interfaces/portData.ts"],"names":[],"mappings":"AAGA,MAAM,CAAN,IAAY,iBAKX;AALD,WAAY,iBAAiB;IACzB,YAAY;IACZ,2DAAK,CAAA;IACL,aAAa;IACb,6DAAM,CAAA;AACV,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,QAK5B;AAED,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"portData.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/nodeGraphSystem/interfaces/portData.ts"],"names":[],"mappings":"AAGA,MAAM,CAAN,IAAY,iBAKX;AALD,WAAY,iBAAiB;IACzB,YAAY;IACZ,2DAAK,CAAA;IACL,aAAa;IACb,6DAAM,CAAA;AACV,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,QAK5B;AAED,MAAM,CAAN,IAAY,oBAIX;AAJD,WAAY,oBAAoB;IAC5B,iEAAK,CAAA;IACL,6DAAG,CAAA;IACH,mEAAM,CAAA;AACV,CAAC,EAJW,oBAAoB,KAApB,oBAAoB,QAI/B","sourcesContent":["import { type Nullable } from \"core/types\";\r\nimport { type GraphNode } from \"../graphNode\";\r\n\r\nexport enum PortDataDirection {\r\n /** Input */\r\n Input,\r\n /** Output */\r\n Output,\r\n}\r\n\r\nexport enum PortDirectValueTypes {\r\n Float,\r\n Int,\r\n String,\r\n}\r\n\r\nexport interface IPortDirectValueDefinition {\r\n /**\r\n * Gets the source object\r\n */\r\n source: any;\r\n /**\r\n * Gets the property name used to store the value\r\n */\r\n propertyName: string;\r\n\r\n /**\r\n * Gets or sets the min value accepted for this point if nothing is connected\r\n */\r\n valueMin: Nullable<any>;\r\n\r\n /**\r\n * Gets or sets the max value accepted for this point if nothing is connected\r\n */\r\n valueMax: Nullable<any>;\r\n\r\n /**\r\n * Gets or sets the type of the value\r\n */\r\n valueType: PortDirectValueTypes;\r\n}\r\n\r\nexport interface IPortData {\r\n data: any;\r\n name: string;\r\n internalName: string;\r\n isExposedOnFrame: boolean;\r\n exposedPortPosition: number;\r\n isConnected: boolean;\r\n isInactive: boolean;\r\n direction: PortDataDirection;\r\n ownerData: any;\r\n connectedPort: Nullable<IPortData>;\r\n needDualDirectionValidation: boolean;\r\n hasEndpoints: boolean;\r\n endpoints: Nullable<IPortData[]>;\r\n directValueDefinition?: IPortDirectValueDefinition;\r\n\r\n updateDisplayName: (newName: string) => void;\r\n canConnectTo: (port: IPortData) => boolean;\r\n connectTo: (port: IPortData) => void;\r\n disconnectFrom: (port: IPortData) => void;\r\n checkCompatibilityState(port: IPortData): number;\r\n getCompatibilityIssueMessage(issue: number, targetNode: GraphNode, targetPort: IPortData): string;\r\n}\r\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type
|
|
1
|
+
import { type StateManager } from "../stateManager.js";
|
|
2
|
+
import { type INodeData } from "./nodeData.js";
|
|
3
3
|
export interface IPropertyComponentProps {
|
|
4
4
|
stateManager: StateManager;
|
|
5
5
|
nodeData: INodeData;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"propertyComponentProps.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/nodeGraphSystem/interfaces/propertyComponentProps.ts"],"names":[],"mappings":"","sourcesContent":["import type
|
|
1
|
+
{"version":3,"file":"propertyComponentProps.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/nodeGraphSystem/interfaces/propertyComponentProps.ts"],"names":[],"mappings":"","sourcesContent":["import { type StateManager } from \"../stateManager\";\r\nimport { type INodeData } from \"./nodeData\";\r\n\r\nexport interface IPropertyComponentProps {\r\n stateManager: StateManager;\r\n nodeData: INodeData;\r\n}\r\n"]}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type
|
|
3
|
-
import type
|
|
4
|
-
import type
|
|
5
|
-
import type
|
|
6
|
-
import type
|
|
1
|
+
import { type Nullable } from "@babylonjs/core/types.js";
|
|
2
|
+
import { type GraphFrame } from "../graphFrame.js";
|
|
3
|
+
import { type GraphNode } from "../graphNode.js";
|
|
4
|
+
import { type GraphStickyNote } from "../graphStickyNote.js";
|
|
5
|
+
import { type NodeLink } from "../nodeLink.js";
|
|
6
|
+
import { type NodePort } from "../nodePort.js";
|
|
7
|
+
import { type FramePortData } from "../types/framePortData.js";
|
|
7
8
|
export interface ISelectionChangedOptions {
|
|
8
|
-
selection: Nullable<GraphNode | NodeLink | GraphFrame | NodePort | FramePortData>;
|
|
9
|
+
selection: Nullable<GraphNode | NodeLink | GraphFrame | NodePort | FramePortData | GraphStickyNote>;
|
|
9
10
|
forceKeepSelection?: boolean;
|
|
10
11
|
marqueeSelection?: boolean;
|
|
11
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectionChangedOptions.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/nodeGraphSystem/interfaces/selectionChangedOptions.ts"],"names":[],"mappings":"","sourcesContent":["import type
|
|
1
|
+
{"version":3,"file":"selectionChangedOptions.js","sourceRoot":"","sources":["../../../../../dev/sharedUiComponents/src/nodeGraphSystem/interfaces/selectionChangedOptions.ts"],"names":[],"mappings":"","sourcesContent":["import { type Nullable } from \"core/types\";\r\nimport { type GraphFrame } from \"../graphFrame\";\r\nimport { type GraphNode } from \"../graphNode\";\r\nimport { type GraphStickyNote } from \"../graphStickyNote\";\r\n\r\nimport { type NodeLink } from \"../nodeLink\";\r\nimport { type NodePort } from \"../nodePort\";\r\nimport { type FramePortData } from \"../types/framePortData\";\r\n\r\nexport interface ISelectionChangedOptions {\r\n selection: Nullable<GraphNode | NodeLink | GraphFrame | NodePort | FramePortData | GraphStickyNote>;\r\n forceKeepSelection?: boolean;\r\n marqueeSelection?: boolean;\r\n}\r\n"]}
|