@kiberon-labs/behave-graph-flow 1.0.0 → 2.0.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/.fallowrc.json +16 -0
- package/.storybook/main.ts +32 -0
- package/.storybook/preview.ts +16 -0
- package/.storybook/styles.css +10 -0
- package/.storybook/vscode.css +814 -0
- package/.turbo/turbo-build.log +7 -0
- package/LICENSE +6 -0
- package/README.md +2 -2
- package/data/Polynomial.json +510 -0
- package/data/sequence.json +337 -0
- package/data/trigger-event.json +241 -0
- package/data/variable-change.json +210 -0
- package/dist/entry.css +4 -0
- package/dist/index.css +39 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.ts +2282 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14873 -0
- package/dist/index.js.map +1 -0
- package/docs/notifications.md +246 -0
- package/docs/protocol.md +679 -0
- package/docs/specifics.md +191 -0
- package/package.json +85 -21
- package/postcss.config.ts +3 -4
- package/src/annotations/index.ts +32 -0
- package/src/components/FloatingToolbar/index.module.css +45 -0
- package/src/components/FloatingToolbar/index.tsx +256 -0
- package/src/components/Flow.tsx +276 -75
- package/src/components/contextMenus/NodePicker.module.css +274 -0
- package/src/components/contextMenus/NodePicker.tsx +481 -0
- package/src/components/contextMenus/edge.tsx +108 -0
- package/src/components/contextMenus/node.tsx +155 -0
- package/src/components/contextMenus/selection.tsx +77 -0
- package/src/components/controls/any/index.tsx +8 -0
- package/src/components/controls/boolean/index.tsx +13 -0
- package/src/components/controls/colorPicker/InputPopover.module.css +100 -0
- package/src/components/controls/colorPicker/InputPopover.tsx +31 -0
- package/src/components/controls/colorPicker/index.module.css +18 -0
- package/src/components/controls/colorPicker/index.tsx +61 -0
- package/src/components/controls/number/index.tsx +35 -0
- package/src/components/controls/string/index.tsx +16 -0
- package/src/components/edges/index.tsx +469 -0
- package/src/components/edges/offsetBezier.ts +134 -0
- package/src/components/hotKeys.tsx +20 -0
- package/src/components/layoutController/index.module.css +10 -0
- package/src/components/layoutController/index.tsx +117 -0
- package/src/components/layoutController/utils.ts +205 -0
- package/src/components/menubar/defaults.tsx +480 -0
- package/src/components/menubar/index.tsx +49 -0
- package/src/components/menubar/menuItem.module.css +16 -0
- package/src/components/menubar/menuItem.tsx +32 -0
- package/src/components/nodes/behave/Node.module.css +23 -0
- package/src/components/nodes/behave/Node.tsx +176 -0
- package/src/components/nodes/behave/NodeContainer.module.css +87 -0
- package/src/components/nodes/behave/NodeContainer.tsx +46 -0
- package/src/components/nodes/behave/index.tsx +14 -0
- package/src/components/nodes/comment/FormatToolbar.tsx +118 -0
- package/src/components/nodes/comment/comment.tsx +103 -0
- package/src/components/nodes/comment/styles.module.css +150 -0
- package/src/components/nodes/group/index.tsx +109 -0
- package/src/components/nodes/wrapper/index.tsx +73 -0
- package/src/components/nodes/wrapper/styles.module.css +113 -0
- package/src/components/notifications/NotificationProvider.tsx +81 -0
- package/src/components/notifications/index.ts +2 -0
- package/src/components/notifications/utils.ts +71 -0
- package/src/components/panels/alignment/index.module.css +20 -0
- package/src/components/panels/alignment/index.tsx +244 -0
- package/src/components/panels/base/index.tsx +5 -0
- package/src/components/panels/base/styles.module.css +12 -0
- package/src/components/panels/conversation/index.module.css +151 -0
- package/src/components/panels/conversation/index.tsx +162 -0
- package/src/components/panels/events/CustomEventsEditor.tsx +384 -0
- package/src/components/panels/events/EditEventPanel.tsx +315 -0
- package/src/components/panels/events/ManageEventsPanel.tsx +98 -0
- package/src/components/panels/events/index.tsx +23 -0
- package/src/components/panels/events/styles.module.css +236 -0
- package/src/components/panels/history/index.tsx +92 -0
- package/src/components/panels/history/styles.module.css +106 -0
- package/src/components/panels/keymaps/index.module.css +78 -0
- package/src/components/panels/keymaps/index.tsx +167 -0
- package/src/components/panels/layers/index.tsx +240 -0
- package/src/components/panels/layers/styles.module.css +110 -0
- package/src/components/panels/legend/index.module.css +6 -0
- package/src/components/panels/legend/index.tsx +76 -0
- package/src/components/panels/logs/index.module.css +212 -0
- package/src/components/panels/logs/index.tsx +288 -0
- package/src/components/panels/nodeInputs/InputControl.tsx +63 -0
- package/src/components/panels/nodeInputs/InputsGroup.tsx +64 -0
- package/src/components/panels/nodeInputs/MultipleNodesView.tsx +37 -0
- package/src/components/panels/nodeInputs/NodeSettings.tsx +92 -0
- package/src/components/panels/nodeInputs/NodeTitleEditor.tsx +125 -0
- package/src/components/panels/nodeInputs/OutputsGroup.tsx +65 -0
- package/src/components/panels/nodeInputs/SocketGenerators.tsx +32 -0
- package/src/components/panels/nodeInputs/index.module.css +284 -0
- package/src/components/panels/nodeInputs/index.tsx +339 -0
- package/src/components/panels/nodeInputs/useNodeHandlers.ts +76 -0
- package/src/components/panels/nodeInputs/useNodeInputsData.ts +173 -0
- package/src/components/panels/nodePicker/index.tsx +115 -0
- package/src/components/panels/panel/index.module.css +66 -0
- package/src/components/panels/panel/index.tsx +88 -0
- package/src/components/panels/search/index.module.css +66 -0
- package/src/components/panels/search/index.tsx +215 -0
- package/src/components/panels/systemSettings/index.tsx +206 -0
- package/src/components/panels/systemSettings/styles.module.css +11 -0
- package/src/components/panels/traces/GridLines.tsx +38 -0
- package/src/components/panels/traces/TimeGrid.tsx +48 -0
- package/src/components/panels/traces/TraceLane.tsx +62 -0
- package/src/components/panels/traces/TraceTooltip.tsx +22 -0
- package/src/components/panels/traces/TracesHeader.tsx +56 -0
- package/src/components/panels/traces/index.module.css +166 -0
- package/src/components/panels/traces/index.tsx +294 -0
- package/src/components/panels/traces/types.ts +48 -0
- package/src/components/panels/traces/useDerivedSpans.ts +212 -0
- package/src/components/panels/traces/utils.ts +25 -0
- package/src/components/panels/variables/CreateVariableScreen.tsx +162 -0
- package/src/components/panels/variables/ManageVariablesScreen.tsx +144 -0
- package/src/components/panels/variables/index.tsx +125 -0
- package/src/components/panels/variables/styles.module.css +236 -0
- package/src/components/primitives/icon.module.css +45 -0
- package/src/components/primitives/icon.tsx +38 -0
- package/src/components/sockets/input/index.tsx +76 -0
- package/src/components/sockets/input/styles.module.css +27 -0
- package/src/components/sockets/output/index.tsx +61 -0
- package/src/components/sockets/output/styles.module.css +27 -0
- package/src/css/prosemirror.css +57 -0
- package/src/css/rc-dock.css +112 -0
- package/src/css/rc-menu.css +100 -0
- package/src/css/vars.css +14 -0
- package/src/css/vscode.css +13 -0
- package/src/entry.css +4 -0
- package/src/generators/CustomEventOnTriggeredGenerator.tsx +85 -0
- package/src/generators/SequenceGenerator.tsx +104 -0
- package/src/generators/SwitchOnIntegerGenerator.tsx +256 -0
- package/src/generators/SwitchOnStringGenerator.tsx +263 -0
- package/src/generators/registerDefaultGenerators.ts +34 -0
- package/src/hooks/useBehaveGraphFlow.ts +17 -16
- package/src/hooks/useDetachNodes.ts +39 -0
- package/src/hooks/useFlowHandlers.ts +115 -29
- package/src/hooks/useWasdPan.ts +188 -0
- package/src/index.css +146 -0
- package/src/index.ts +36 -18
- package/src/layout/dagre.tsx +119 -0
- package/src/layout/elk.ts +200 -0
- package/src/plugin/alignment/index.ts +81 -0
- package/src/plugin/docs/index.tsx +299 -0
- package/src/plugin/docs/panel/index.tsx +200 -0
- package/src/plugin/docs/panel/styles.module.css +174 -0
- package/src/plugin/graphrunner/actions.ts +253 -0
- package/src/plugin/graphrunner/buttons.tsx +87 -0
- package/src/plugin/graphrunner/client.ts +704 -0
- package/src/plugin/graphrunner/index.tsx +255 -0
- package/src/plugin/graphrunner/panel.tsx +386 -0
- package/src/plugin/graphrunner/runner.ts +358 -0
- package/src/plugin/graphrunner/session.ts +243 -0
- package/src/plugin/graphrunner/store.ts +206 -0
- package/src/plugin/graphrunner/styles.module.css +211 -0
- package/src/plugin/graphrunner/transport.ts +224 -0
- package/src/plugin/graphrunner/types.ts +672 -0
- package/src/plugin/graphrunner-local/execution-utils.ts +457 -0
- package/src/plugin/graphrunner-local/index.tsx +166 -0
- package/src/plugin/graphrunner-local/panel.tsx +231 -0
- package/src/plugin/graphrunner-local/store.ts +41 -0
- package/src/plugin/graphrunner-local/styles.module.css +101 -0
- package/src/plugin/graphrunner-local/transport.ts +1372 -0
- package/src/plugin/graphrunner-local/types.ts +10 -0
- package/src/plugin/graphrunner-webworker/graph-executor.worker.ts +633 -0
- package/src/plugin/graphrunner-webworker/index.tsx +146 -0
- package/src/plugin/graphrunner-webworker/panel.tsx +173 -0
- package/src/plugin/graphrunner-webworker/store.ts +89 -0
- package/src/plugin/graphrunner-webworker/types.ts +17 -0
- package/src/plugin/graphrunner-webworker/worker-transport.ts +123 -0
- package/src/plugin/realtime/realtimeRunner.ts +570 -0
- package/src/specifics/CustomEventOnTriggeredSpecific.tsx +92 -0
- package/src/specifics/CustomEventTriggerSpecific.tsx +141 -0
- package/src/specifics/VariableGetSpecific.tsx +110 -0
- package/src/specifics/VariableSetSpecific.tsx +110 -0
- package/src/specifics/registerDefaultSpecifics.ts +5 -0
- package/src/store/actions.tsx +698 -0
- package/src/store/chat.ts +73 -0
- package/src/store/controls.tsx +62 -0
- package/src/store/documentation.tsx +69 -0
- package/src/store/events.tsx +116 -0
- package/src/store/flow.tsx +245 -0
- package/src/store/graphRunnerClient.ts +110 -0
- package/src/store/hotKeys.tsx +323 -0
- package/src/store/layers.ts +259 -0
- package/src/store/legend.tsx +76 -0
- package/src/store/logs.ts +28 -0
- package/src/store/menubar.ts +41 -0
- package/src/store/refs.ts +84 -0
- package/src/store/registry.ts +43 -0
- package/src/store/selection.ts +22 -0
- package/src/store/settings.ts +99 -0
- package/src/store/socketGenerator.tsx +54 -0
- package/src/store/specific.tsx +75 -0
- package/src/store/specs.tsx +35 -0
- package/src/store/tabs.ts +278 -0
- package/src/store/toolbar.tsx +45 -0
- package/src/store/traces.ts +240 -0
- package/src/store/variables.ts +37 -0
- package/src/system/graph.ts +134 -0
- package/src/system/index.ts +3 -0
- package/src/system/notifications.ts +98 -0
- package/src/system/plugin.ts +27 -0
- package/src/system/provider.tsx +22 -0
- package/src/system/pubsub.ts +323 -0
- package/src/system/system.ts +223 -0
- package/src/system/tabLoader.tsx +265 -0
- package/src/system/undoRedo.ts +103 -0
- package/src/transformers/Uigraph.ts +60 -0
- package/src/transformers/behaveToFlow.ts +16 -4
- package/src/transformers/flowToBehave.ts +32 -12
- package/src/types/NodeMetadata.ts +27 -0
- package/src/types/graph.ts +49 -0
- package/src/types/nodes.ts +45 -0
- package/src/types.ts +16 -0
- package/src/util/colors.ts +1 -29
- package/src/util/downloadJson.ts +18 -0
- package/src/util/extractNodeMetadata.ts +16 -0
- package/src/util/getPickerFilters.ts +1 -1
- package/src/util/isBehaveNode.ts +6 -0
- package/src/util/isValidConnection.ts +28 -15
- package/src/util/mergeSockets.ts +29 -0
- package/src/util/serializeVariables.ts +66 -0
- package/src/util/sockets.ts +43 -0
- package/stories/apex/layoutController/example-graph.worker.ts +39 -0
- package/stories/apex/layoutController/index.stories.tsx +48 -0
- package/stories/apex/layoutController/webworker.stories.tsx +103 -0
- package/stories/apex/menubar/menubar.stories.tsx +19 -0
- package/stories/components/colorpicker/index.stories.tsx +20 -0
- package/stories/components/contextMenus/edge.stories.tsx +32 -0
- package/stories/components/contextMenus/node.stories.tsx +26 -0
- package/stories/components/contextMenus/nodePicker.stories.tsx +115 -0
- package/stories/components/controls/any/index.stories.tsx +19 -0
- package/stories/components/controls/boolean/index.stories.tsx +19 -0
- package/stories/components/controls/colorPicker/index.stories.tsx +49 -0
- package/stories/components/controls/number/index.stories.tsx +19 -0
- package/stories/components/controls/string/index.stories.tsx +19 -0
- package/stories/components/nodes/behaveNode.stories.tsx +108 -0
- package/stories/components/nodes/comment.stories.tsx +106 -0
- package/stories/components/panels/alignment.stories.tsx +24 -0
- package/stories/components/panels/events.stories.tsx +38 -0
- package/stories/components/panels/graphRunner.stories.tsx +317 -0
- package/stories/components/panels/history.stories.tsx +37 -0
- package/stories/components/panels/keymaps.stories.tsx +21 -0
- package/stories/components/panels/legend.stories.tsx +37 -0
- package/stories/components/panels/logs.stories.tsx +24 -0
- package/stories/components/panels/nodeInputs.stories.tsx +21 -0
- package/stories/components/panels/nodePicker.stories.tsx +37 -0
- package/stories/components/panels/panel.stories.tsx +39 -0
- package/stories/components/panels/search.stories.tsx +24 -0
- package/stories/components/panels/systemSettings.stories.tsx +26 -0
- package/stories/components/panels/traces.stories.tsx +225 -0
- package/stories/components/panels/variables.stories.tsx +24 -0
- package/stories/defaults/defaultStoryProvider.tsx +167 -0
- package/stories/defaults/systemGenerator.ts +38 -0
- package/tests/components/edges/offsetBezier.test.ts +51 -0
- package/tests/components/layoutController/utils.test.ts +68 -0
- package/tests/components/panels/traces/utils.test.ts +52 -0
- package/tests/flowToBehave.test.ts +26 -4
- package/tests/notifications.test.ts +87 -0
- package/tests/saveLoad.test.ts +372 -0
- package/tests/util/calculateNewEdge.test.ts +98 -0
- package/tests/util/getSocketsByNodeTypeAndHandleType.test.ts +31 -0
- package/tests/util/hasPositionMetaData.test.ts +33 -0
- package/tests/util/isBehaveNode.test.ts +22 -0
- package/tests/util/isHandleConnected.test.ts +37 -0
- package/tests/util/mergeSockets.test.ts +43 -0
- package/tests/visual/README.md +64 -0
- package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-alignment-chromium-win32.png +0 -0
- package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-conversation-chromium-win32.png +0 -0
- package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-events-chromium-win32.png +0 -0
- package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-history-chromium-win32.png +0 -0
- package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-keymaps-chromium-win32.png +0 -0
- package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-layers-chromium-win32.png +0 -0
- package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-legend-chromium-win32.png +0 -0
- package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-logs-chromium-win32.png +0 -0
- package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-nodeInputs-chromium-win32.png +0 -0
- package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-nodePicker-chromium-win32.png +0 -0
- package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-panel-chromium-win32.png +0 -0
- package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-search-chromium-win32.png +0 -0
- package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-systemSettings-chromium-win32.png +0 -0
- package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-traces-chromium-win32.png +0 -0
- package/tests/visual/__screenshots__/panels.visual.test.tsx/panel-variables-chromium-win32.png +0 -0
- package/tests/visual/panels.visual.test.tsx +76 -0
- package/tsconfig.base.json +39 -0
- package/tsconfig.json +18 -59
- package/tsconfig.prod.json +23 -0
- package/tsdown.config.ts +15 -3
- package/typedoc.json +7 -7
- package/vite.config.js +7 -0
- package/vitest.config.ts +5 -2
- package/vitest.visual.config.ts +48 -0
- package/src/components/AutoSizeInput.tsx +0 -65
- package/src/components/Controls.tsx +0 -87
- package/src/components/InputSocket.tsx +0 -142
- package/src/components/Node.tsx +0 -68
- package/src/components/NodeContainer.tsx +0 -46
- package/src/components/NodePicker.tsx +0 -77
- package/src/components/OutputSocket.tsx +0 -58
- package/src/components/modals/ClearModal.tsx +0 -40
- package/src/components/modals/HelpModal.tsx +0 -36
- package/src/components/modals/LoadModal.tsx +0 -96
- package/src/components/modals/Modal.tsx +0 -64
- package/src/components/modals/SaveModal.tsx +0 -60
- package/src/hooks/useCustomNodeTypes.tsx +0 -31
- package/src/hooks/useGraphRunner.ts +0 -104
- package/src/hooks/useMergeMap.ts +0 -14
- package/src/hooks/useNodeSpecJson.ts +0 -20
- package/src/hooks/useQueriableDefinitions.ts +0 -22
- package/src/styles.css +0 -8
- package/tailwind.config.ts +0 -19
- package/tests/tsconfig.json +0 -10
- /package/src/{types.d.ts → types-declarations.d.ts} +0 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
# Notification System
|
|
2
|
+
|
|
3
|
+
The notification system in `@kiberon-labs/behave-graph-flow` provides a simple way to display toast notifications throughout the application using react-hot-toast and a pubsub event-driven architecture.
|
|
4
|
+
|
|
5
|
+
## Architecture
|
|
6
|
+
|
|
7
|
+
The notification system consists of three main parts:
|
|
8
|
+
|
|
9
|
+
1. **NotificationProvider** - React component that subscribes to notification events and renders toasts
|
|
10
|
+
2. **Notification utilities** - Helper functions for publishing notification events
|
|
11
|
+
3. **PubSub integration** - Event-based communication system
|
|
12
|
+
|
|
13
|
+
## Setup
|
|
14
|
+
|
|
15
|
+
The `NotificationProvider` is automatically included in the `Flow` component, so no additional setup is required.
|
|
16
|
+
|
|
17
|
+
## Usage
|
|
18
|
+
|
|
19
|
+
### Basic Notifications
|
|
20
|
+
|
|
21
|
+
Import the notification utilities from the package:
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
import { notifySuccess, notifyError, notifyInfo, notifyLoading } from '@kiberon-labs/behave-graph-flow';
|
|
25
|
+
import { useSystem } from '@kiberon-labs/behave-graph-flow';
|
|
26
|
+
|
|
27
|
+
function MyComponent() {
|
|
28
|
+
const system = useSystem();
|
|
29
|
+
|
|
30
|
+
const handleSuccess = () => {
|
|
31
|
+
notifySuccess(system, 'Operation completed successfully');
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const handleError = () => {
|
|
35
|
+
notifyError(system, 'Something went wrong');
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const handleInfo = () => {
|
|
39
|
+
notifyInfo(system, 'Here is some information');
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const handleLoading = () => {
|
|
43
|
+
notifyLoading(system, 'Processing...');
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
// ... your component
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Advanced Options
|
|
53
|
+
|
|
54
|
+
All notification functions accept an optional `options` parameter:
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
notifySuccess(system, 'Custom notification', {
|
|
58
|
+
duration: 5000, // Duration in milliseconds
|
|
59
|
+
id: 'unique-id', // Custom ID for programmatic dismissal
|
|
60
|
+
icon: '🎉', // Custom icon
|
|
61
|
+
position: 'top-center', // Position on screen
|
|
62
|
+
style: { // Custom styles
|
|
63
|
+
background: '#333',
|
|
64
|
+
color: '#fff'
|
|
65
|
+
},
|
|
66
|
+
className: 'my-toast' // Custom CSS class
|
|
67
|
+
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Persistent Notifications
|
|
71
|
+
|
|
72
|
+
Create notifications that persist until manually dismissed:
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
const notificationId = 'persistent-notification';
|
|
76
|
+
|
|
77
|
+
notifyInfo(system, 'This will stay until dismissed', {
|
|
78
|
+
id: notificationId,
|
|
79
|
+
duration: Infinity
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
// Dismiss later
|
|
83
|
+
dismissNotification(system, notificationId);
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Async Operations with Loading States
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
async function saveGraph() {
|
|
90
|
+
const loadingId = 'save-operation';
|
|
91
|
+
|
|
92
|
+
notifyLoading(system, 'Saving graph...', { id: loadingId });
|
|
93
|
+
|
|
94
|
+
try {
|
|
95
|
+
await performSave();
|
|
96
|
+
dismissNotification(system, loadingId);
|
|
97
|
+
notifySuccess(system, 'Graph saved successfully');
|
|
98
|
+
} catch (error) {
|
|
99
|
+
dismissNotification(system, loadingId);
|
|
100
|
+
notifyError(system, 'Failed to save graph');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Direct PubSub Usage
|
|
106
|
+
|
|
107
|
+
You can also publish notifications directly via the pubsub system:
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
system.pubsub.publish('notification', {
|
|
111
|
+
type: 'success',
|
|
112
|
+
message: 'Direct notification',
|
|
113
|
+
options: {
|
|
114
|
+
duration: 3000
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
// Dismiss all notifications
|
|
119
|
+
system.pubsub.publish('notification:dismiss', {});
|
|
120
|
+
|
|
121
|
+
// Dismiss specific notification
|
|
122
|
+
system.pubsub.publish('notification:dismiss', { toastId: 'specific-id' });
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## API Reference
|
|
126
|
+
|
|
127
|
+
### Notification Functions
|
|
128
|
+
|
|
129
|
+
#### `notify(system, message, type, options?)`
|
|
130
|
+
Generic notification function.
|
|
131
|
+
|
|
132
|
+
- **system**: `System` - The behave-graph system instance
|
|
133
|
+
- **message**: `string` - The notification message
|
|
134
|
+
- **type**: `'info' | 'success' | 'error' | 'loading'` - Notification type
|
|
135
|
+
- **options**: `NotificationOptions` - Optional configuration
|
|
136
|
+
|
|
137
|
+
#### `notifySuccess(system, message, options?)`
|
|
138
|
+
Show a success notification (green with checkmark icon).
|
|
139
|
+
|
|
140
|
+
#### `notifyError(system, message, options?)`
|
|
141
|
+
Show an error notification (red with error icon).
|
|
142
|
+
|
|
143
|
+
#### `notifyInfo(system, message, options?)`
|
|
144
|
+
Show an info notification (default styling).
|
|
145
|
+
|
|
146
|
+
#### `notifyLoading(system, message, options?)`
|
|
147
|
+
Show a loading notification (with spinner icon).
|
|
148
|
+
|
|
149
|
+
#### `dismissNotification(system, toastId?)`
|
|
150
|
+
Dismiss a specific notification by ID, or all notifications if no ID provided.
|
|
151
|
+
|
|
152
|
+
### NotificationOptions
|
|
153
|
+
|
|
154
|
+
```typescript
|
|
155
|
+
interface NotificationOptions {
|
|
156
|
+
id?: string; // Custom ID for the toast
|
|
157
|
+
duration?: number; // Duration in ms (default: 4000)
|
|
158
|
+
position?: ToastPosition; // Position on screen
|
|
159
|
+
icon?: string | React.ReactNode; // Custom icon
|
|
160
|
+
style?: React.CSSProperties; // Custom inline styles
|
|
161
|
+
className?: string; // Custom CSS class
|
|
162
|
+
ariaLive?: 'polite' | 'assertive' | 'off'; // Accessibility
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Toast Positions
|
|
167
|
+
|
|
168
|
+
- `'top-left'`
|
|
169
|
+
- `'top-center'`
|
|
170
|
+
- `'top-right'`
|
|
171
|
+
- `'bottom-left'`
|
|
172
|
+
- `'bottom-center'`
|
|
173
|
+
- `'bottom-right'` (default)
|
|
174
|
+
|
|
175
|
+
## PubSub Events
|
|
176
|
+
|
|
177
|
+
The notification system uses the following pubsub events:
|
|
178
|
+
|
|
179
|
+
### `notification`
|
|
180
|
+
Emitted when a new notification should be displayed.
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
{
|
|
184
|
+
type: 'success' | 'error' | 'info' | 'loading',
|
|
185
|
+
message: string,
|
|
186
|
+
options?: NotificationOptions
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### `notification:dismiss`
|
|
191
|
+
Emitted when a notification should be dismissed.
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
{
|
|
195
|
+
toastId?: string // Omit to dismiss all
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Styling
|
|
200
|
+
|
|
201
|
+
The notification system uses CSS variables for theming to match your application's design:
|
|
202
|
+
|
|
203
|
+
- `--colors-bgSecondary`: Background color
|
|
204
|
+
- `--colors-text`: Text color
|
|
205
|
+
- `--colors-border`: Border color
|
|
206
|
+
- `--colors-success`: Success icon color
|
|
207
|
+
- `--colors-error`: Error icon color
|
|
208
|
+
|
|
209
|
+
You can override the default styles by passing custom styles in the options:
|
|
210
|
+
|
|
211
|
+
```typescript
|
|
212
|
+
notifySuccess(system, 'Custom styled', {
|
|
213
|
+
style: {
|
|
214
|
+
background: '#your-color',
|
|
215
|
+
color: '#your-text-color',
|
|
216
|
+
border: '1px solid #your-border-color'
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
## Examples
|
|
222
|
+
|
|
223
|
+
See [examples/notifications.ts](../examples/notifications.ts) for comprehensive usage examples.
|
|
224
|
+
|
|
225
|
+
## Best Practices
|
|
226
|
+
|
|
227
|
+
1. **Use appropriate notification types** - Choose the right type (success, error, info, loading) to match the context
|
|
228
|
+
2. **Keep messages concise** - Toast notifications should be brief and to the point
|
|
229
|
+
3. **Dismiss loading notifications** - Always dismiss loading notifications when the operation completes
|
|
230
|
+
4. **Use unique IDs for persistence** - When creating persistent notifications, use unique IDs for easy dismissal
|
|
231
|
+
5. **Consider timing** - Default duration is 4000ms (4 seconds), adjust based on message importance
|
|
232
|
+
6. **Avoid notification spam** - Don't overwhelm users with too many notifications at once
|
|
233
|
+
|
|
234
|
+
## Troubleshooting
|
|
235
|
+
|
|
236
|
+
### Styling issues
|
|
237
|
+
|
|
238
|
+
1. Ensure your CSS variables are defined
|
|
239
|
+
2. Check that custom styles are valid CSS properties
|
|
240
|
+
3. Verify className exists if using custom classes
|
|
241
|
+
|
|
242
|
+
### Notifications not dismissing
|
|
243
|
+
|
|
244
|
+
1. Ensure you're using the correct toast ID when dismissing
|
|
245
|
+
2. Check that `dismissNotification` is being called
|
|
246
|
+
3. Verify the notification wasn't created with `duration: Infinity` without a dismiss call
|