@magicborn/dialogue-forge 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/README.md +233 -0
  2. package/bin/dialogue-forge.js +78 -0
  3. package/demo/app/layout.tsx +36 -0
  4. package/demo/app/page.tsx +440 -0
  5. package/demo/components/ThemeSwitcher.tsx +611 -0
  6. package/demo/next.config.mjs +7 -0
  7. package/demo/package.json +29 -0
  8. package/demo/postcss.config.mjs +7 -0
  9. package/demo/public/logo.svg +1 -0
  10. package/demo/styles/globals.css +19 -0
  11. package/demo/tailwind.config.ts +90 -0
  12. package/demo/tsconfig.json +42 -0
  13. package/dist/components/ChoiceEdgeV2.d.ts +3 -0
  14. package/dist/components/ChoiceEdgeV2.js +103 -0
  15. package/dist/components/CodeBlock.d.ts +8 -0
  16. package/dist/components/CodeBlock.js +24 -0
  17. package/dist/components/ConditionAutocomplete.d.ts +14 -0
  18. package/dist/components/ConditionAutocomplete.js +284 -0
  19. package/dist/components/ConditionalNodeV2.d.ts +16 -0
  20. package/dist/components/ConditionalNodeV2.js +147 -0
  21. package/dist/components/DialogueEditorV2.d.ts +22 -0
  22. package/dist/components/DialogueEditorV2.js +1170 -0
  23. package/dist/components/EdgeIcon.d.ts +8 -0
  24. package/dist/components/EdgeIcon.js +13 -0
  25. package/dist/components/ExampleLoader.d.ts +11 -0
  26. package/dist/components/ExampleLoader.js +52 -0
  27. package/dist/components/ExampleLoaderButton.d.ts +15 -0
  28. package/dist/components/ExampleLoaderButton.js +102 -0
  29. package/dist/components/FlagManager.d.ts +11 -0
  30. package/dist/components/FlagManager.js +282 -0
  31. package/dist/components/FlagSelector.d.ts +11 -0
  32. package/dist/components/FlagSelector.js +235 -0
  33. package/dist/components/GuidePanel.d.ts +7 -0
  34. package/dist/components/GuidePanel.js +1176 -0
  35. package/dist/components/Minimap.d.ts +16 -0
  36. package/dist/components/Minimap.js +93 -0
  37. package/dist/components/NPCEdgeV2.d.ts +3 -0
  38. package/dist/components/NPCEdgeV2.js +104 -0
  39. package/dist/components/NPCNodeV2.d.ts +26 -0
  40. package/dist/components/NPCNodeV2.js +86 -0
  41. package/dist/components/NodeEditor.d.ts +18 -0
  42. package/dist/components/NodeEditor.js +1025 -0
  43. package/dist/components/PlayView.d.ts +12 -0
  44. package/dist/components/PlayView.js +307 -0
  45. package/dist/components/PlayerNodeV2.d.ts +16 -0
  46. package/dist/components/PlayerNodeV2.js +139 -0
  47. package/dist/components/ReactFlowPOC.d.ts +61 -0
  48. package/dist/components/ReactFlowPOC.js +312 -0
  49. package/dist/components/ScenePlayer.d.ts +18 -0
  50. package/dist/components/ScenePlayer.js +196 -0
  51. package/dist/components/YarnView.d.ts +9 -0
  52. package/dist/components/YarnView.js +45 -0
  53. package/dist/components/ZoomControls.d.ts +11 -0
  54. package/dist/components/ZoomControls.js +34 -0
  55. package/dist/esm/components/ChoiceEdgeV2.d.ts +3 -0
  56. package/dist/esm/components/ChoiceEdgeV2.js +67 -0
  57. package/dist/esm/components/CodeBlock.d.ts +8 -0
  58. package/dist/esm/components/CodeBlock.js +18 -0
  59. package/dist/esm/components/ConditionAutocomplete.d.ts +14 -0
  60. package/dist/esm/components/ConditionAutocomplete.js +248 -0
  61. package/dist/esm/components/ConditionalNodeV2.d.ts +16 -0
  62. package/dist/esm/components/ConditionalNodeV2.js +111 -0
  63. package/dist/esm/components/DialogueEditorV2.d.ts +22 -0
  64. package/dist/esm/components/DialogueEditorV2.js +1134 -0
  65. package/dist/esm/components/EdgeIcon.d.ts +8 -0
  66. package/dist/esm/components/EdgeIcon.js +7 -0
  67. package/dist/esm/components/ExampleLoader.d.ts +11 -0
  68. package/dist/esm/components/ExampleLoader.js +46 -0
  69. package/dist/esm/components/ExampleLoaderButton.d.ts +15 -0
  70. package/dist/esm/components/ExampleLoaderButton.js +66 -0
  71. package/dist/esm/components/FlagManager.d.ts +11 -0
  72. package/dist/esm/components/FlagManager.js +246 -0
  73. package/dist/esm/components/FlagSelector.d.ts +11 -0
  74. package/dist/esm/components/FlagSelector.js +199 -0
  75. package/dist/esm/components/GuidePanel.d.ts +7 -0
  76. package/dist/esm/components/GuidePanel.js +1140 -0
  77. package/dist/esm/components/Minimap.d.ts +16 -0
  78. package/dist/esm/components/Minimap.js +57 -0
  79. package/dist/esm/components/NPCEdgeV2.d.ts +3 -0
  80. package/dist/esm/components/NPCEdgeV2.js +68 -0
  81. package/dist/esm/components/NPCNodeV2.d.ts +26 -0
  82. package/dist/esm/components/NPCNodeV2.js +80 -0
  83. package/dist/esm/components/NodeEditor.d.ts +18 -0
  84. package/dist/esm/components/NodeEditor.js +989 -0
  85. package/dist/esm/components/PlayView.d.ts +12 -0
  86. package/dist/esm/components/PlayView.js +271 -0
  87. package/dist/esm/components/PlayerNodeV2.d.ts +16 -0
  88. package/dist/esm/components/PlayerNodeV2.js +103 -0
  89. package/dist/esm/components/ReactFlowPOC.d.ts +61 -0
  90. package/dist/esm/components/ReactFlowPOC.js +275 -0
  91. package/dist/esm/components/ScenePlayer.d.ts +18 -0
  92. package/dist/esm/components/ScenePlayer.js +160 -0
  93. package/dist/esm/components/YarnView.d.ts +9 -0
  94. package/dist/esm/components/YarnView.js +39 -0
  95. package/dist/esm/components/ZoomControls.d.ts +11 -0
  96. package/dist/esm/components/ZoomControls.js +28 -0
  97. package/dist/esm/examples/example-loader.d.ts +29 -0
  98. package/dist/esm/examples/example-loader.js +103 -0
  99. package/dist/esm/examples/examples-registry.d.ts +38 -0
  100. package/dist/esm/examples/examples-registry.js +153 -0
  101. package/dist/esm/examples/index.d.ts +26 -0
  102. package/dist/esm/examples/index.js +50 -0
  103. package/dist/esm/examples/legacy-examples.d.ts +9 -0
  104. package/dist/esm/examples/legacy-examples.js +814 -0
  105. package/dist/esm/examples/yarn-examples.d.ts +35 -0
  106. package/dist/esm/examples/yarn-examples.js +181 -0
  107. package/dist/esm/index.d.ts +21 -0
  108. package/dist/esm/index.js +26 -0
  109. package/dist/esm/lib/flag-manager.d.ts +21 -0
  110. package/dist/esm/lib/flag-manager.js +93 -0
  111. package/dist/esm/lib/yarn-converter/__tests__/round-trip.test.d.ts +1 -0
  112. package/dist/esm/lib/yarn-converter/__tests__/round-trip.test.js +169 -0
  113. package/dist/esm/lib/yarn-converter.d.ts +17 -0
  114. package/dist/esm/lib/yarn-converter.js +521 -0
  115. package/dist/esm/lib/yarn-runner/__tests__/condition-evaluator.test.d.ts +1 -0
  116. package/dist/esm/lib/yarn-runner/__tests__/condition-evaluator.test.js +171 -0
  117. package/dist/esm/lib/yarn-runner/__tests__/node-processor.test.d.ts +1 -0
  118. package/dist/esm/lib/yarn-runner/__tests__/node-processor.test.js +237 -0
  119. package/dist/esm/lib/yarn-runner/__tests__/variable-manager.test.d.ts +1 -0
  120. package/dist/esm/lib/yarn-runner/__tests__/variable-manager.test.js +106 -0
  121. package/dist/esm/lib/yarn-runner/condition-evaluator.d.ts +12 -0
  122. package/dist/esm/lib/yarn-runner/condition-evaluator.js +56 -0
  123. package/dist/esm/lib/yarn-runner/index.d.ts +12 -0
  124. package/dist/esm/lib/yarn-runner/index.js +11 -0
  125. package/dist/esm/lib/yarn-runner/node-processor.d.ts +18 -0
  126. package/dist/esm/lib/yarn-runner/node-processor.js +129 -0
  127. package/dist/esm/lib/yarn-runner/variable-manager.d.ts +51 -0
  128. package/dist/esm/lib/yarn-runner/variable-manager.js +120 -0
  129. package/dist/esm/lib/yarn-runner/variable-operations.d.ts +16 -0
  130. package/dist/esm/lib/yarn-runner/variable-operations.js +88 -0
  131. package/dist/esm/types/conditionals.d.ts +29 -0
  132. package/dist/esm/types/conditionals.js +1 -0
  133. package/dist/esm/types/constants.d.ts +59 -0
  134. package/dist/esm/types/constants.js +55 -0
  135. package/dist/esm/types/flags.d.ts +49 -0
  136. package/dist/esm/types/flags.js +49 -0
  137. package/dist/esm/types/game-state.d.ts +62 -0
  138. package/dist/esm/types/game-state.js +6 -0
  139. package/dist/esm/types/index.d.ts +77 -0
  140. package/dist/esm/types/index.js +1 -0
  141. package/dist/esm/utils/constants.d.ts +5 -0
  142. package/dist/esm/utils/constants.js +5 -0
  143. package/dist/esm/utils/feature-flags.d.ts +11 -0
  144. package/dist/esm/utils/feature-flags.js +11 -0
  145. package/dist/esm/utils/game-state-flattener.d.ts +41 -0
  146. package/dist/esm/utils/game-state-flattener.js +135 -0
  147. package/dist/esm/utils/layout/collision.d.ts +27 -0
  148. package/dist/esm/utils/layout/collision.js +74 -0
  149. package/dist/esm/utils/layout/index.d.ts +82 -0
  150. package/dist/esm/utils/layout/index.js +98 -0
  151. package/dist/esm/utils/layout/registry.d.ts +91 -0
  152. package/dist/esm/utils/layout/registry.js +148 -0
  153. package/dist/esm/utils/layout/strategies/dagre.d.ts +19 -0
  154. package/dist/esm/utils/layout/strategies/dagre.js +182 -0
  155. package/dist/esm/utils/layout/strategies/force.d.ts +21 -0
  156. package/dist/esm/utils/layout/strategies/force.js +178 -0
  157. package/dist/esm/utils/layout/strategies/grid.d.ts +17 -0
  158. package/dist/esm/utils/layout/strategies/grid.js +91 -0
  159. package/dist/esm/utils/layout/strategies/index.d.ts +8 -0
  160. package/dist/esm/utils/layout/strategies/index.js +8 -0
  161. package/dist/esm/utils/layout/types.d.ts +100 -0
  162. package/dist/esm/utils/layout/types.js +7 -0
  163. package/dist/esm/utils/layout.d.ts +9 -0
  164. package/dist/esm/utils/layout.js +17 -0
  165. package/dist/esm/utils/node-helpers.d.ts +7 -0
  166. package/dist/esm/utils/node-helpers.js +94 -0
  167. package/dist/esm/utils/reactflow-converter.d.ts +42 -0
  168. package/dist/esm/utils/reactflow-converter.js +217 -0
  169. package/dist/examples/example-loader.d.ts +29 -0
  170. package/dist/examples/example-loader.js +109 -0
  171. package/dist/examples/examples-registry.d.ts +38 -0
  172. package/dist/examples/examples-registry.js +160 -0
  173. package/dist/examples/index.d.ts +26 -0
  174. package/dist/examples/index.js +63 -0
  175. package/dist/examples/legacy-examples.d.ts +9 -0
  176. package/dist/examples/legacy-examples.js +817 -0
  177. package/dist/examples/yarn-examples.d.ts +35 -0
  178. package/dist/examples/yarn-examples.js +189 -0
  179. package/dist/index.d.ts +21 -0
  180. package/dist/index.js +66 -0
  181. package/dist/lib/flag-manager.d.ts +21 -0
  182. package/dist/lib/flag-manager.js +99 -0
  183. package/dist/lib/yarn-converter/__tests__/round-trip.test.d.ts +1 -0
  184. package/dist/lib/yarn-converter/__tests__/round-trip.test.js +171 -0
  185. package/dist/lib/yarn-converter.d.ts +17 -0
  186. package/dist/lib/yarn-converter.js +525 -0
  187. package/dist/lib/yarn-runner/__tests__/condition-evaluator.test.d.ts +1 -0
  188. package/dist/lib/yarn-runner/__tests__/condition-evaluator.test.js +173 -0
  189. package/dist/lib/yarn-runner/__tests__/node-processor.test.d.ts +1 -0
  190. package/dist/lib/yarn-runner/__tests__/node-processor.test.js +239 -0
  191. package/dist/lib/yarn-runner/__tests__/variable-manager.test.d.ts +1 -0
  192. package/dist/lib/yarn-runner/__tests__/variable-manager.test.js +108 -0
  193. package/dist/lib/yarn-runner/condition-evaluator.d.ts +12 -0
  194. package/dist/lib/yarn-runner/condition-evaluator.js +60 -0
  195. package/dist/lib/yarn-runner/index.d.ts +12 -0
  196. package/dist/lib/yarn-runner/index.js +21 -0
  197. package/dist/lib/yarn-runner/node-processor.d.ts +18 -0
  198. package/dist/lib/yarn-runner/node-processor.js +133 -0
  199. package/dist/lib/yarn-runner/variable-manager.d.ts +51 -0
  200. package/dist/lib/yarn-runner/variable-manager.js +124 -0
  201. package/dist/lib/yarn-runner/variable-operations.d.ts +16 -0
  202. package/dist/lib/yarn-runner/variable-operations.js +92 -0
  203. package/dist/types/conditionals.d.ts +29 -0
  204. package/dist/types/conditionals.js +2 -0
  205. package/dist/types/constants.d.ts +59 -0
  206. package/dist/types/constants.js +58 -0
  207. package/dist/types/flags.d.ts +49 -0
  208. package/dist/types/flags.js +52 -0
  209. package/dist/types/game-state.d.ts +62 -0
  210. package/dist/types/game-state.js +7 -0
  211. package/dist/types/index.d.ts +77 -0
  212. package/dist/types/index.js +2 -0
  213. package/dist/utils/constants.d.ts +5 -0
  214. package/dist/utils/constants.js +8 -0
  215. package/dist/utils/feature-flags.d.ts +11 -0
  216. package/dist/utils/feature-flags.js +14 -0
  217. package/dist/utils/game-state-flattener.d.ts +41 -0
  218. package/dist/utils/game-state-flattener.js +140 -0
  219. package/dist/utils/layout/collision.d.ts +27 -0
  220. package/dist/utils/layout/collision.js +77 -0
  221. package/dist/utils/layout/index.d.ts +82 -0
  222. package/dist/utils/layout/index.js +109 -0
  223. package/dist/utils/layout/registry.d.ts +91 -0
  224. package/dist/utils/layout/registry.js +151 -0
  225. package/dist/utils/layout/strategies/dagre.d.ts +19 -0
  226. package/dist/utils/layout/strategies/dagre.js +189 -0
  227. package/dist/utils/layout/strategies/force.d.ts +21 -0
  228. package/dist/utils/layout/strategies/force.js +182 -0
  229. package/dist/utils/layout/strategies/grid.d.ts +17 -0
  230. package/dist/utils/layout/strategies/grid.js +95 -0
  231. package/dist/utils/layout/strategies/index.d.ts +8 -0
  232. package/dist/utils/layout/strategies/index.js +14 -0
  233. package/dist/utils/layout/types.d.ts +100 -0
  234. package/dist/utils/layout/types.js +8 -0
  235. package/dist/utils/layout.d.ts +9 -0
  236. package/dist/utils/layout.js +25 -0
  237. package/dist/utils/node-helpers.d.ts +7 -0
  238. package/dist/utils/node-helpers.js +101 -0
  239. package/dist/utils/reactflow-converter.d.ts +42 -0
  240. package/dist/utils/reactflow-converter.js +223 -0
  241. package/package.json +70 -0
@@ -0,0 +1,90 @@
1
+ import type { Config } from 'tailwindcss';
2
+
3
+ const config: Config = {
4
+ content: [
5
+ './app/**/*.{js,ts,jsx,tsx,mdx}',
6
+ './components/**/*.{js,ts,jsx,tsx,mdx}',
7
+ '../src/**/*.{js,ts,jsx,tsx,mdx}',
8
+ '../../packages-shared/server-template/**/*.{js,ts,jsx,tsx,mdx}',
9
+ ],
10
+ theme: {
11
+ extend: {
12
+ colors: {
13
+ 'df-base': 'var(--color-df-base)',
14
+ 'df-surface': 'var(--color-df-surface)',
15
+ 'df-elevated': 'var(--color-df-elevated)',
16
+ 'df-node-bg': 'var(--color-df-node-bg)',
17
+ 'df-node-border': 'var(--color-df-node-border)',
18
+ 'df-node-selected': 'var(--color-df-node-selected)',
19
+ 'df-node-dimmed': 'var(--color-df-node-dimmed)',
20
+ 'df-npc-bg': 'var(--color-df-npc-bg)',
21
+ 'df-npc-border': 'var(--color-df-npc-border)',
22
+ 'df-npc-header': 'var(--color-df-npc-header)',
23
+ 'df-npc-text': 'var(--color-df-npc-text)',
24
+ 'df-npc-selected': 'var(--color-df-npc-selected)',
25
+ 'df-player-bg': 'var(--color-df-player-bg)',
26
+ 'df-player-border': 'var(--color-df-player-border)',
27
+ 'df-player-header': 'var(--color-df-player-header)',
28
+ 'df-player-text': 'var(--color-df-player-text)',
29
+ 'df-player-selected': 'var(--color-df-player-selected)',
30
+ 'df-conditional-bg': 'var(--color-df-conditional-bg)',
31
+ 'df-conditional-border': 'var(--color-df-conditional-border)',
32
+ 'df-conditional-header': 'var(--color-df-conditional-header)',
33
+ 'df-conditional-text': 'var(--color-df-conditional-text)',
34
+ 'df-start': 'var(--color-df-start)',
35
+ 'df-start-bg': 'var(--color-df-start-bg)',
36
+ 'df-end': 'var(--color-df-end)',
37
+ 'df-end-bg': 'var(--color-df-end-bg)',
38
+ 'df-edge-default': 'var(--color-df-edge-default)',
39
+ 'df-edge-default-hover': 'var(--color-df-edge-default-hover)',
40
+ 'df-edge-choice-1': 'var(--color-df-edge-choice-1)',
41
+ 'df-edge-choice-2': 'var(--color-df-edge-choice-2)',
42
+ 'df-edge-choice-3': 'var(--color-df-edge-choice-3)',
43
+ 'df-edge-choice-4': 'var(--color-df-edge-choice-4)',
44
+ 'df-edge-choice-5': 'var(--color-df-edge-choice-5)',
45
+ 'df-edge-loop': 'var(--color-df-edge-loop)',
46
+ 'df-edge-dimmed': 'var(--color-df-edge-dimmed)',
47
+ 'df-error': 'var(--color-df-error)',
48
+ 'df-error-bg': 'var(--color-df-error-bg)',
49
+ 'df-warning': 'var(--color-df-warning)',
50
+ 'df-warning-bg': 'var(--color-df-warning-bg)',
51
+ 'df-success': 'var(--color-df-success)',
52
+ 'df-success-bg': 'var(--color-df-success-bg)',
53
+ 'df-info': 'var(--color-df-info)',
54
+ 'df-info-bg': 'var(--color-df-info-bg)',
55
+ 'df-text-primary': 'var(--color-df-text-primary)',
56
+ 'df-text-secondary': 'var(--color-df-text-secondary)',
57
+ 'df-text-tertiary': 'var(--color-df-text-tertiary)',
58
+ 'df-text-muted': 'var(--color-df-text-muted)',
59
+ 'df-control-bg': 'var(--color-df-control-bg)',
60
+ 'df-control-border': 'var(--color-df-control-border)',
61
+ 'df-control-hover': 'var(--color-df-control-hover)',
62
+ 'df-control-active': 'var(--color-df-control-active)',
63
+ 'df-flag-dialogue': 'var(--color-df-flag-dialogue)',
64
+ 'df-flag-dialogue-bg': 'var(--color-df-flag-dialogue-bg)',
65
+ 'df-flag-quest': 'var(--color-df-flag-quest)',
66
+ 'df-flag-quest-bg': 'var(--color-df-flag-quest-bg)',
67
+ 'df-flag-achievement': 'var(--color-df-flag-achievement)',
68
+ 'df-flag-achievement-bg': 'var(--color-df-flag-achievement-bg)',
69
+ 'df-flag-item': 'var(--color-df-flag-item)',
70
+ 'df-flag-item-bg': 'var(--color-df-flag-item-bg)',
71
+ 'df-flag-stat': 'var(--color-df-flag-stat)',
72
+ 'df-flag-stat-bg': 'var(--color-df-flag-stat-bg)',
73
+ 'df-flag-title': 'var(--color-df-flag-title)',
74
+ 'df-flag-title-bg': 'var(--color-df-flag-title-bg)',
75
+ 'df-flag-global': 'var(--color-df-flag-global)',
76
+ 'df-flag-global-bg': 'var(--color-df-flag-global-bg)',
77
+ 'df-canvas-bg': 'var(--color-df-canvas-bg)',
78
+ 'df-canvas-grid': 'var(--color-df-canvas-grid)',
79
+ 'df-sidebar-bg': 'var(--color-df-sidebar-bg)',
80
+ 'df-sidebar-border': 'var(--color-df-sidebar-border)',
81
+ 'df-editor-bg': 'var(--color-df-editor-bg)',
82
+ 'df-editor-border': 'var(--color-df-editor-border)',
83
+ },
84
+ },
85
+ },
86
+ plugins: [],
87
+ };
88
+
89
+ export default config;
90
+
@@ -0,0 +1,42 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2017",
4
+ "lib": [
5
+ "dom",
6
+ "dom.iterable",
7
+ "esnext"
8
+ ],
9
+ "allowJs": true,
10
+ "skipLibCheck": true,
11
+ "strict": true,
12
+ "noEmit": true,
13
+ "esModuleInterop": true,
14
+ "module": "esnext",
15
+ "moduleResolution": "bundler",
16
+ "resolveJsonModule": true,
17
+ "isolatedModules": true,
18
+ "jsx": "react-jsx",
19
+ "incremental": true,
20
+ "plugins": [
21
+ {
22
+ "name": "next"
23
+ }
24
+ ],
25
+ "paths": {
26
+ "@magicborn/*": [
27
+ "../../packages/*",
28
+ "../../packages-shared/*"
29
+ ]
30
+ }
31
+ },
32
+ "include": [
33
+ "next-env.d.ts",
34
+ "**/*.ts",
35
+ "**/*.tsx",
36
+ ".next/types/**/*.ts",
37
+ ".next/dev/types/**/*.ts"
38
+ ],
39
+ "exclude": [
40
+ "node_modules"
41
+ ]
42
+ }
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ import { EdgeProps } from 'reactflow';
3
+ export declare function ChoiceEdgeV2({ id, sourceX, sourceY, sourcePosition, targetX, targetY, targetPosition, data, selected, }: EdgeProps): React.JSX.Element;
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ChoiceEdgeV2 = ChoiceEdgeV2;
37
+ const react_1 = __importStar(require("react"));
38
+ const reactflow_1 = require("reactflow");
39
+ function ChoiceEdgeV2({ id, sourceX, sourceY, sourcePosition, targetX, targetY, targetPosition, data, selected, }) {
40
+ const [hovered, setHovered] = (0, react_1.useState)(false);
41
+ const isBackEdge = data?.isBackEdge ?? false;
42
+ // Use smooth step path for angular look (like the horizontal example)
43
+ // For back edges, use bezier for a more curved appearance
44
+ const [edgePath, labelX, labelY] = isBackEdge
45
+ ? (0, reactflow_1.getBezierPath)({
46
+ sourceX,
47
+ sourceY,
48
+ sourcePosition,
49
+ targetX,
50
+ targetY,
51
+ targetPosition,
52
+ curvature: 0.5,
53
+ })
54
+ : (0, reactflow_1.getSmoothStepPath)({
55
+ sourceX,
56
+ sourceY,
57
+ sourcePosition: sourcePosition || reactflow_1.Position.Bottom,
58
+ targetX,
59
+ targetY,
60
+ targetPosition: targetPosition || reactflow_1.Position.Top,
61
+ borderRadius: 8,
62
+ });
63
+ const choiceIndex = data?.choiceIndex ?? 0;
64
+ // Map choice index to CSS variable
65
+ const choiceColorVar = `var(--color-df-edge-choice-${Math.min(choiceIndex % 5, 4) + 1})`;
66
+ // Use loop color for back edges, otherwise use choice color
67
+ const colorVar = isBackEdge ? 'var(--color-df-edge-loop)' : choiceColorVar;
68
+ const isSelected = selected || hovered;
69
+ const isDimmed = data?.isDimmed ?? false;
70
+ // Make edge thicker and more opaque when hovered or selected
71
+ // Dim edges not in path when highlighting is on
72
+ const strokeWidth = isSelected ? 4 : 2;
73
+ const opacity = isDimmed ? 0.15 : (isSelected ? 1 : 0.7);
74
+ // Use dimmed color when dimmed
75
+ const strokeColor = isDimmed ? 'var(--color-df-edge-dimmed)' : colorVar;
76
+ // Add glow effect when hovered (only if not dimmed)
77
+ const filter = hovered && !isDimmed ? `drop-shadow(0 0 4px ${colorVar})` : undefined;
78
+ // For pulse animation, we'll use a slightly brighter version
79
+ // Since we can't easily brighten CSS variables, we'll use the same color with higher opacity
80
+ const pulseColor = colorVar;
81
+ const shouldAnimate = data?.isInPathToSelected ?? false;
82
+ return (react_1.default.createElement(react_1.default.Fragment, null,
83
+ react_1.default.createElement("path", { d: edgePath, fill: "none", stroke: "transparent", strokeWidth: 20, style: { cursor: 'pointer', pointerEvents: 'all' }, onMouseEnter: () => setHovered(true), onMouseLeave: () => setHovered(false) }),
84
+ react_1.default.createElement(reactflow_1.BaseEdge, { id: id, path: edgePath, style: {
85
+ stroke: strokeColor,
86
+ strokeWidth,
87
+ opacity,
88
+ cursor: 'pointer',
89
+ transition: 'all 0.2s ease',
90
+ pointerEvents: 'none',
91
+ filter,
92
+ // Dashed line for back edges
93
+ strokeDasharray: isBackEdge ? '8 4' : undefined,
94
+ }, markerEnd: isDimmed ? undefined : `url(#react-flow__arrowclosed-choice-${choiceIndex})` }),
95
+ isBackEdge && (react_1.default.createElement("g", { transform: `translate(${labelX - 10}, ${labelY - 10})` },
96
+ react_1.default.createElement("circle", { cx: "10", cy: "10", r: "12", fill: "var(--color-df-base)", stroke: strokeColor, strokeWidth: "2" }),
97
+ react_1.default.createElement("text", { x: "10", y: "14", textAnchor: "middle", fontSize: "12", fill: strokeColor }, "\u21BA"))),
98
+ shouldAnimate && (react_1.default.createElement("circle", { r: "6", fill: pulseColor, opacity: 0.9 },
99
+ react_1.default.createElement("animateMotion", { dur: "2s", repeatCount: "indefinite", path: edgePath }))),
100
+ react_1.default.createElement("defs", null,
101
+ react_1.default.createElement("marker", { id: `react-flow__arrowclosed-choice-${choiceIndex}`, markerWidth: "12.5", markerHeight: "12.5", viewBox: "-10 -10 20 20", markerUnits: "strokeWidth", orient: "auto", refX: "0", refY: "0" },
102
+ react_1.default.createElement("polyline", { stroke: colorVar, strokeLinecap: "round", strokeLinejoin: "round", fill: colorVar, points: "-5,-4 0,0 -5,4 -5,-4" })))));
103
+ }
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface CodeBlockProps {
3
+ code: string;
4
+ language?: string;
5
+ className?: string;
6
+ }
7
+ export declare function CodeBlock({ code, language, className }: CodeBlockProps): React.JSX.Element;
8
+ export {};
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.CodeBlock = CodeBlock;
7
+ const react_1 = __importDefault(require("react"));
8
+ const react_syntax_highlighter_1 = require("react-syntax-highlighter");
9
+ const prism_1 = require("react-syntax-highlighter/dist/esm/styles/prism");
10
+ function CodeBlock({ code, language = 'typescript', className = '' }) {
11
+ return (react_1.default.createElement("div", { className: `bg-[#12121a] rounded border border-[#2a2a3e] overflow-hidden ${className}` },
12
+ react_1.default.createElement(react_syntax_highlighter_1.Prism, { language: language, style: prism_1.vscDarkPlus, customStyle: {
13
+ margin: 0,
14
+ padding: '1rem',
15
+ background: '#12121a',
16
+ fontSize: '0.75rem',
17
+ lineHeight: '1.5',
18
+ borderRadius: 0,
19
+ }, codeTagProps: {
20
+ style: {
21
+ fontFamily: 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace',
22
+ }
23
+ }, PreTag: "div" }, code)));
24
+ }
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import { FlagSchema } from '../types/flags';
3
+ interface ConditionAutocompleteProps {
4
+ value: string;
5
+ onChange: (value: string) => void;
6
+ onBlur?: () => void;
7
+ placeholder?: string;
8
+ className?: string;
9
+ style?: React.CSSProperties;
10
+ flagSchema?: FlagSchema;
11
+ textarea?: boolean;
12
+ }
13
+ export declare function ConditionAutocomplete({ value, onChange, onBlur, placeholder, className, style, flagSchema, textarea }: ConditionAutocompleteProps): React.JSX.Element;
14
+ export {};
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ConditionAutocomplete = ConditionAutocomplete;
37
+ const react_1 = __importStar(require("react"));
38
+ const lucide_react_1 = require("lucide-react");
39
+ function getFlagIcon(flagType) {
40
+ switch (flagType) {
41
+ case 'quest':
42
+ return lucide_react_1.BookOpen;
43
+ case 'achievement':
44
+ return lucide_react_1.Trophy;
45
+ case 'item':
46
+ return lucide_react_1.Package;
47
+ case 'stat':
48
+ return lucide_react_1.TrendingUp;
49
+ case 'title':
50
+ return lucide_react_1.Crown;
51
+ case 'global':
52
+ return lucide_react_1.Globe;
53
+ case 'dialogue':
54
+ default:
55
+ return lucide_react_1.MessageSquare;
56
+ }
57
+ }
58
+ function getFlagColorClasses(flagType) {
59
+ switch (flagType) {
60
+ case 'quest':
61
+ return 'bg-blue-500/20 text-blue-400 border-blue-500/30';
62
+ case 'achievement':
63
+ return 'bg-yellow-500/20 text-yellow-400 border-yellow-500/30';
64
+ case 'item':
65
+ return 'bg-green-500/20 text-green-400 border-green-500/30';
66
+ case 'stat':
67
+ return 'bg-purple-500/20 text-purple-400 border-purple-500/30';
68
+ case 'title':
69
+ return 'bg-pink-500/20 text-pink-400 border-pink-500/30';
70
+ case 'global':
71
+ return 'bg-orange-500/20 text-orange-400 border-orange-500/30';
72
+ case 'dialogue':
73
+ default:
74
+ return 'bg-gray-500/20 text-gray-400 border-gray-500/30';
75
+ }
76
+ }
77
+ function ConditionAutocomplete({ value, onChange, onBlur, placeholder, className = '', style, flagSchema, textarea = false }) {
78
+ const [showSuggestions, setShowSuggestions] = (0, react_1.useState)(false);
79
+ const [selectedIndex, setSelectedIndex] = (0, react_1.useState)(0);
80
+ const [cursorPosition, setCursorPosition] = (0, react_1.useState)(0);
81
+ const [debouncedSearchTerm, setDebouncedSearchTerm] = (0, react_1.useState)('');
82
+ const containerRef = (0, react_1.useRef)(null);
83
+ const inputRef = (0, react_1.useRef)(null);
84
+ const debounceTimerRef = (0, react_1.useRef)(null);
85
+ // Extract the current word being typed (for autocomplete matching)
86
+ const currentWord = (0, react_1.useMemo)(() => {
87
+ const textBeforeCursor = value.substring(0, cursorPosition);
88
+ const match = textBeforeCursor.match(/(\$?\w*)$/);
89
+ return match ? match[1] : '';
90
+ }, [value, cursorPosition]);
91
+ // Debounce search term for better performance
92
+ (0, react_1.useEffect)(() => {
93
+ if (debounceTimerRef.current) {
94
+ clearTimeout(debounceTimerRef.current);
95
+ }
96
+ debounceTimerRef.current = setTimeout(() => {
97
+ setDebouncedSearchTerm(currentWord);
98
+ }, 300); // 300ms debounce for smoother experience
99
+ return () => {
100
+ if (debounceTimerRef.current) {
101
+ clearTimeout(debounceTimerRef.current);
102
+ }
103
+ };
104
+ }, [currentWord]);
105
+ // Generate suggestions based on current input (using debounced search term)
106
+ const suggestions = (0, react_1.useMemo)(() => {
107
+ const result = [];
108
+ const word = debouncedSearchTerm.toLowerCase();
109
+ const isTypingVariable = word.startsWith('$') || word.length > 0;
110
+ // If typing a variable (starts with $ or has text), show flags
111
+ if (flagSchema && (isTypingVariable || word === '')) {
112
+ const searchTerm = word.startsWith('$') ? word.substring(1) : word;
113
+ flagSchema.flags.forEach(flag => {
114
+ const flagId = flag.id.toLowerCase();
115
+ const flagName = flag.name.toLowerCase();
116
+ // Match if search term is empty (showing $ or empty field) or matches flag id/name
117
+ if (!searchTerm || flagId.includes(searchTerm) || flagName.includes(searchTerm)) {
118
+ result.push({
119
+ type: 'flag',
120
+ label: `$${flag.id}`, // Show with dollar sign
121
+ insert: `$${flag.id}`,
122
+ description: flag.name,
123
+ flagType: flag.type
124
+ });
125
+ }
126
+ });
127
+ }
128
+ // Show operators and keywords when user has typed $ or is actively typing
129
+ if (word === '$' || (word.startsWith('$') && word.length > 1)) {
130
+ // Operators - only show when user has typed $ and is looking for what comes next
131
+ result.push({ type: 'operator', label: '==', insert: ' == ', description: 'Equals' }, { type: 'operator', label: '!=', insert: ' != ', description: 'Not equals' }, { type: 'operator', label: '>=', insert: ' >= ', description: 'Greater than or equal' }, { type: 'operator', label: '<=', insert: ' <= ', description: 'Less than or equal' }, { type: 'operator', label: '>', insert: ' > ', description: 'Greater than' }, { type: 'operator', label: '<', insert: ' < ', description: 'Less than' });
132
+ // Keywords
133
+ result.push({ type: 'keyword', label: 'and', insert: ' and ', description: 'Logical AND' }, { type: 'keyword', label: 'not', insert: 'not ', description: 'Logical NOT' });
134
+ }
135
+ // Limit results
136
+ return result.slice(0, 20);
137
+ }, [debouncedSearchTerm, flagSchema]);
138
+ // Handle input change
139
+ const handleChange = (e) => {
140
+ const newValue = e.target.value;
141
+ const newCursorPos = e.target.selectionStart || 0;
142
+ // Mark that user has actively typed
143
+ setHasActivelyTyped(true);
144
+ onChange(newValue);
145
+ setCursorPosition(newCursorPos);
146
+ };
147
+ // Track if user has actively typed in this session (not just focused on existing content)
148
+ const [hasActivelyTyped, setHasActivelyTyped] = (0, react_1.useState)(false);
149
+ // Update suggestions visibility when value or cursor changes
150
+ // Show suggestions when typing $ or when actively typing
151
+ (0, react_1.useEffect)(() => {
152
+ const textBeforeCursor = value.substring(0, cursorPosition);
153
+ const match = textBeforeCursor.match(/(\$?\w*)$/);
154
+ const word = match ? match[1] : '';
155
+ // Show suggestions when:
156
+ // 1. User is typing a variable (starts with $) OR
157
+ // 2. User has actively typed something and we have suggestions OR
158
+ // 3. Field is empty and user just focused (allow showing on empty field when typing $)
159
+ const isTypingVariable = word.startsWith('$') || word === '$';
160
+ const isEmpty = value.trim() === '';
161
+ const shouldShow = (hasActivelyTyped || isTypingVariable || isEmpty) && suggestions.length > 0;
162
+ setShowSuggestions(shouldShow);
163
+ }, [value, cursorPosition, suggestions.length, hasActivelyTyped]);
164
+ // Handle selection change (for cursor tracking)
165
+ const handleSelect = (e) => {
166
+ const target = e.currentTarget;
167
+ setCursorPosition(target.selectionStart || 0);
168
+ };
169
+ // Handle keydown
170
+ const handleKeyDown = (e) => {
171
+ if (!showSuggestions || suggestions.length === 0) {
172
+ if (e.key === 'Escape' && onBlur) {
173
+ onBlur();
174
+ }
175
+ return;
176
+ }
177
+ if (e.key === 'ArrowDown') {
178
+ e.preventDefault();
179
+ setSelectedIndex(prev => (prev + 1) % suggestions.length);
180
+ }
181
+ else if (e.key === 'ArrowUp') {
182
+ e.preventDefault();
183
+ setSelectedIndex(prev => (prev - 1 + suggestions.length) % suggestions.length);
184
+ }
185
+ else if (e.key === 'Enter' || e.key === 'Tab') {
186
+ e.preventDefault();
187
+ insertSuggestion(suggestions[selectedIndex]);
188
+ }
189
+ else if (e.key === 'Escape') {
190
+ setShowSuggestions(false);
191
+ }
192
+ };
193
+ // Insert suggestion at cursor position
194
+ const insertSuggestion = (0, react_1.useCallback)((suggestion) => {
195
+ const textBeforeCursor = value.substring(0, cursorPosition);
196
+ const textAfterCursor = value.substring(cursorPosition);
197
+ // Find the start of the current word
198
+ const wordMatch = textBeforeCursor.match(/(\$?\w*)$/);
199
+ const wordStart = wordMatch ? cursorPosition - wordMatch[1].length : cursorPosition;
200
+ // Replace the current word with the suggestion
201
+ const newText = value.substring(0, wordStart) +
202
+ suggestion.insert +
203
+ textAfterCursor;
204
+ onChange(newText);
205
+ // Set cursor position after inserted text
206
+ const newCursorPos = wordStart + suggestion.insert.length;
207
+ setTimeout(() => {
208
+ if (inputRef.current) {
209
+ inputRef.current.setSelectionRange(newCursorPos, newCursorPos);
210
+ inputRef.current.focus();
211
+ }
212
+ }, 0);
213
+ setShowSuggestions(false);
214
+ setSelectedIndex(0);
215
+ }, [value, cursorPosition, onChange]);
216
+ // Handle drag start for draggable suggestions
217
+ const handleDragStart = (0, react_1.useCallback)((e, suggestion) => {
218
+ e.dataTransfer.setData('text/plain', suggestion.insert);
219
+ e.dataTransfer.effectAllowed = 'copy';
220
+ }, []);
221
+ // Handle click outside
222
+ (0, react_1.useEffect)(() => {
223
+ const handleClickOutside = (event) => {
224
+ if (containerRef.current && !containerRef.current.contains(event.target)) {
225
+ setShowSuggestions(false);
226
+ }
227
+ };
228
+ document.addEventListener('mousedown', handleClickOutside);
229
+ return () => document.removeEventListener('mousedown', handleClickOutside);
230
+ }, []);
231
+ const InputComponent = textarea ? 'textarea' : 'input';
232
+ const inputProps = {
233
+ ref: inputRef,
234
+ type: textarea ? undefined : 'text',
235
+ value,
236
+ onChange: handleChange,
237
+ onSelect: handleSelect,
238
+ onKeyDown: handleKeyDown,
239
+ onFocus: () => {
240
+ if (inputRef.current) {
241
+ setCursorPosition(inputRef.current.selectionStart || 0);
242
+ }
243
+ // Don't reset hasActivelyTyped on focus - allow showing suggestions if field is empty or has $
244
+ // This allows suggestions to show when user focuses and types $
245
+ },
246
+ onBlur: () => {
247
+ // Delay to allow click on suggestion
248
+ setTimeout(() => {
249
+ if (onBlur)
250
+ onBlur();
251
+ }, 200);
252
+ },
253
+ placeholder,
254
+ className,
255
+ };
256
+ if (style) {
257
+ inputProps.style = style;
258
+ }
259
+ return (react_1.default.createElement("div", { className: "relative", ref: containerRef },
260
+ react_1.default.createElement(InputComponent, { ...inputProps }),
261
+ showSuggestions && suggestions.length > 0 && (react_1.default.createElement("div", { className: "absolute z-50 mt-1 w-full bg-[#1a1a2e] border border-[#2a2a3e] rounded-lg shadow-xl max-h-64 overflow-y-auto" }, suggestions.map((suggestion, idx) => {
262
+ const isSelected = idx === selectedIndex;
263
+ const IconComponent = suggestion.type === 'flag' && suggestion.flagType
264
+ ? getFlagIcon(suggestion.flagType)
265
+ : null;
266
+ // Get color classes for operators and keywords
267
+ const operatorColorClasses = 'bg-purple-500/20 text-purple-400 border-purple-500/30';
268
+ const keywordColorClasses = 'bg-blue-500/20 text-blue-400 border-blue-500/30';
269
+ return (react_1.default.createElement("button", { key: `${suggestion.type}-${suggestion.label}-${idx}`, type: "button", onClick: () => insertSuggestion(suggestion), onMouseEnter: () => setSelectedIndex(idx), draggable: true, onDragStart: (e) => handleDragStart(e, suggestion), className: `w-full text-left px-3 py-2 text-sm flex items-center gap-2 transition-colors ${isSelected
270
+ ? 'bg-[#2a2a3e] text-white'
271
+ : 'text-gray-300 hover:bg-[#252538]'}`, style: { minHeight: 'auto', height: 'auto' } },
272
+ suggestion.type === 'flag' && suggestion.flagType && (react_1.default.createElement(react_1.default.Fragment, null,
273
+ IconComponent && (react_1.default.createElement(IconComponent, { size: 14, className: `flex-shrink-0 ${getFlagColorClasses(suggestion.flagType).split(' ')[1]}` })),
274
+ react_1.default.createElement("span", { className: `text-xs px-2 py-1 rounded border flex-shrink-0 font-medium whitespace-nowrap ${getFlagColorClasses(suggestion.flagType)}` }, suggestion.label),
275
+ suggestion.description && (react_1.default.createElement("span", { className: "text-[10px] text-gray-500 truncate flex-1 min-w-0 ml-1" }, suggestion.description)),
276
+ react_1.default.createElement("span", { className: `text-[10px] px-1.5 py-0.5 rounded border flex-shrink-0 whitespace-nowrap ${getFlagColorClasses(suggestion.flagType)}` }, suggestion.flagType === 'dialogue' ? 'temp' : suggestion.flagType))),
277
+ suggestion.type === 'operator' && (react_1.default.createElement(react_1.default.Fragment, null,
278
+ react_1.default.createElement("span", { className: `text-xs px-2 py-1 rounded border flex-shrink-0 font-mono font-medium whitespace-nowrap ${operatorColorClasses}` }, suggestion.label),
279
+ suggestion.description && (react_1.default.createElement("span", { className: "text-[10px] text-gray-500 truncate flex-1 min-w-0 ml-1" }, suggestion.description)))),
280
+ suggestion.type === 'keyword' && (react_1.default.createElement(react_1.default.Fragment, null,
281
+ react_1.default.createElement("span", { className: `text-xs px-2 py-1 rounded border flex-shrink-0 font-mono font-medium whitespace-nowrap ${keywordColorClasses}` }, suggestion.label),
282
+ suggestion.description && (react_1.default.createElement("span", { className: "text-[10px] text-gray-500 truncate flex-1 min-w-0 ml-1" }, suggestion.description))))));
283
+ })))));
284
+ }
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import { NodeProps } from 'reactflow';
3
+ import { DialogueNode } from '../types';
4
+ import { FlagSchema } from '../types/flags';
5
+ import { LayoutDirection } from '../utils/layout';
6
+ interface ConditionalNodeData {
7
+ node: DialogueNode;
8
+ flagSchema?: FlagSchema;
9
+ isDimmed?: boolean;
10
+ isInPath?: boolean;
11
+ layoutDirection?: LayoutDirection;
12
+ isStartNode?: boolean;
13
+ isEndNode?: boolean;
14
+ }
15
+ export declare function ConditionalNodeV2({ data, selected }: NodeProps<ConditionalNodeData>): React.JSX.Element;
16
+ export {};