@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,611 @@
1
+ 'use client';
2
+
3
+ import React, { useState, useEffect } from 'react';
4
+ import { Palette } from 'lucide-react';
5
+
6
+ // Theme presets
7
+ export const themes = {
8
+ 'dark-fantasy': {
9
+ name: 'Dark Fantasy',
10
+ description: 'Earthy tones, dark fantasy aesthetic',
11
+ css: `
12
+ :root {
13
+ /* Base Colors */
14
+ --color-df-base: oklch(0.15 0.02 250);
15
+ --color-df-surface: oklch(0.18 0.02 260);
16
+ --color-df-elevated: oklch(0.22 0.02 270);
17
+
18
+ /* NPC Node Colors (duller borders, bright when selected) */
19
+ --color-df-npc-bg: oklch(0.25 0.04 45);
20
+ --color-df-npc-border: oklch(0.35 0.05 35);
21
+ --color-df-npc-header: oklch(0.30 0.10 25);
22
+ --color-df-npc-selected: oklch(0.60 0.20 15);
23
+
24
+ /* Player Node Colors (duller borders, bright when selected) */
25
+ --color-df-player-bg: oklch(0.22 0.08 300);
26
+ --color-df-player-border: oklch(0.38 0.10 310);
27
+ --color-df-player-header: oklch(0.28 0.12 290);
28
+ --color-df-player-selected: oklch(0.65 0.25 280);
29
+
30
+ /* Conditional Node (duller borders, bright when selected) */
31
+ --color-df-conditional-bg: oklch(0.24 0.06 150);
32
+ --color-df-conditional-border: oklch(0.35 0.08 140);
33
+ --color-df-conditional-header: oklch(0.30 0.10 145);
34
+
35
+ /* Start/End */
36
+ --color-df-start: oklch(0.55 0.15 140);
37
+ --color-df-start-bg: oklch(0.25 0.08 140);
38
+ --color-df-end: oklch(0.50 0.15 45);
39
+ --color-df-end-bg: oklch(0.25 0.08 45);
40
+
41
+ /* Edges (duller default, bright on hover/selection) */
42
+ --color-df-edge-default: oklch(0.35 0.02 250);
43
+ --color-df-edge-default-hover: oklch(0.55 0.10 250);
44
+ --color-df-edge-choice-1: oklch(0.45 0.12 15);
45
+ --color-df-edge-choice-2: oklch(0.50 0.15 280);
46
+ --color-df-edge-choice-3: oklch(0.48 0.12 200);
47
+ --color-df-edge-choice-4: oklch(0.52 0.12 120);
48
+ --color-df-edge-choice-5: oklch(0.45 0.10 45);
49
+ --color-df-edge-loop: oklch(0.50 0.12 60);
50
+ --color-df-edge-dimmed: oklch(0.25 0.02 250);
51
+
52
+ /* Status */
53
+ --color-df-error: oklch(0.55 0.22 25);
54
+ --color-df-warning: oklch(0.65 0.18 70);
55
+ --color-df-success: oklch(0.60 0.18 150);
56
+ --color-df-info: oklch(0.55 0.15 220);
57
+
58
+ /* Text */
59
+ --color-df-text-primary: oklch(0.85 0.02 250);
60
+ --color-df-text-secondary: oklch(0.65 0.02 250);
61
+ --color-df-text-tertiary: oklch(0.45 0.02 250);
62
+
63
+ /* UI Controls */
64
+ --color-df-control-bg: oklch(0.18 0.02 260);
65
+ --color-df-control-border: oklch(0.30 0.03 250);
66
+ --color-df-control-hover: oklch(0.25 0.03 250);
67
+
68
+ /* Flags */
69
+ --color-df-flag-dialogue: oklch(0.45 0.03 250);
70
+ --color-df-flag-dialogue-bg: oklch(0.20 0.02 250);
71
+ --color-df-flag-quest: oklch(0.50 0.15 220);
72
+ --color-df-flag-quest-bg: oklch(0.22 0.08 220);
73
+ --color-df-flag-achievement: oklch(0.60 0.18 70);
74
+ --color-df-flag-achievement-bg: oklch(0.25 0.10 70);
75
+ --color-df-flag-item: oklch(0.55 0.15 150);
76
+ --color-df-flag-item-bg: oklch(0.25 0.08 150);
77
+ --color-df-flag-stat: oklch(0.55 0.18 280);
78
+ --color-df-flag-stat-bg: oklch(0.25 0.10 280);
79
+ --color-df-flag-title: oklch(0.55 0.18 330);
80
+ --color-df-flag-title-bg: oklch(0.25 0.10 330);
81
+ --color-df-flag-global: oklch(0.50 0.15 45);
82
+ --color-df-flag-global-bg: oklch(0.25 0.08 45);
83
+
84
+ /* Canvas */
85
+ --color-df-canvas-bg: oklch(0.12 0.01 250);
86
+ --color-df-canvas-grid: oklch(0.20 0.02 250);
87
+
88
+ /* Sidebar */
89
+ --color-df-sidebar-bg: oklch(0.18 0.02 260);
90
+ --color-df-sidebar-border: oklch(0.35 0.05 250);
91
+ --color-df-editor-bg: oklch(0.15 0.02 240);
92
+ --color-df-editor-border: oklch(0.30 0.03 250);
93
+ }
94
+ `,
95
+ },
96
+ 'light': {
97
+ name: 'Light',
98
+ description: 'Clean, bright theme',
99
+ css: `
100
+ :root {
101
+ /* Base Colors */
102
+ --color-df-base: oklch(0.98 0.01 250);
103
+ --color-df-surface: oklch(0.95 0.01 260);
104
+ --color-df-elevated: oklch(0.92 0.01 270);
105
+
106
+ /* NPC Node Colors */
107
+ --color-df-npc-bg: oklch(0.90 0.03 45);
108
+ --color-df-npc-border: oklch(0.60 0.08 35);
109
+ --color-df-npc-header: oklch(0.85 0.05 25);
110
+ --color-df-npc-selected: oklch(0.55 0.15 15);
111
+
112
+ /* Player Node Colors */
113
+ --color-df-player-bg: oklch(0.92 0.05 300);
114
+ --color-df-player-border: oklch(0.55 0.15 310);
115
+ --color-df-player-header: oklch(0.88 0.08 290);
116
+ --color-df-player-selected: oklch(0.45 0.20 280);
117
+
118
+ /* Conditional Node */
119
+ --color-df-conditional-bg: oklch(0.91 0.04 150);
120
+ --color-df-conditional-border: oklch(0.58 0.12 140);
121
+ --color-df-conditional-header: oklch(0.88 0.06 145);
122
+
123
+ /* Start/End */
124
+ --color-df-start: oklch(0.45 0.15 140);
125
+ --color-df-start-bg: oklch(0.90 0.05 140);
126
+ --color-df-end: oklch(0.50 0.15 45);
127
+ --color-df-end-bg: oklch(0.90 0.05 45);
128
+
129
+ /* Edges */
130
+ --color-df-edge-default: oklch(0.60 0.03 250);
131
+ --color-df-edge-default-hover: oklch(0.50 0.05 250);
132
+ --color-df-edge-choice-1: oklch(0.50 0.18 15);
133
+ --color-df-edge-choice-2: oklch(0.45 0.20 280);
134
+ --color-df-edge-choice-3: oklch(0.48 0.18 200);
135
+ --color-df-edge-choice-4: oklch(0.42 0.16 120);
136
+ --color-df-edge-choice-5: oklch(0.50 0.15 45);
137
+ --color-df-edge-loop: oklch(0.45 0.15 60);
138
+ --color-df-edge-dimmed: oklch(0.75 0.02 250);
139
+
140
+ /* Status */
141
+ --color-df-error: oklch(0.45 0.22 25);
142
+ --color-df-warning: oklch(0.35 0.18 70);
143
+ --color-df-success: oklch(0.40 0.18 150);
144
+ --color-df-info: oklch(0.45 0.15 220);
145
+
146
+ /* Text */
147
+ --color-df-text-primary: oklch(0.15 0.02 250);
148
+ --color-df-text-secondary: oklch(0.35 0.02 250);
149
+ --color-df-text-tertiary: oklch(0.55 0.02 250);
150
+
151
+ /* UI Controls */
152
+ --color-df-control-bg: oklch(0.95 0.01 260);
153
+ --color-df-control-border: oklch(0.70 0.03 250);
154
+ --color-df-control-hover: oklch(0.88 0.02 250);
155
+
156
+ /* Flags - same as dark */
157
+ --color-df-flag-dialogue: oklch(0.55 0.03 250);
158
+ --color-df-flag-dialogue-bg: oklch(0.90 0.01 250);
159
+ --color-df-flag-quest: oklch(0.50 0.15 220);
160
+ --color-df-flag-quest-bg: oklch(0.88 0.05 220);
161
+ --color-df-flag-achievement: oklch(0.40 0.18 70);
162
+ --color-df-flag-achievement-bg: oklch(0.90 0.08 70);
163
+ --color-df-flag-item: oklch(0.45 0.15 150);
164
+ --color-df-flag-item-bg: oklch(0.90 0.05 150);
165
+ --color-df-flag-stat: oklch(0.45 0.18 280);
166
+ --color-df-flag-stat-bg: oklch(0.90 0.08 280);
167
+ --color-df-flag-title: oklch(0.45 0.18 330);
168
+ --color-df-flag-title-bg: oklch(0.90 0.08 330);
169
+ --color-df-flag-global: oklch(0.50 0.15 45);
170
+ --color-df-flag-global-bg: oklch(0.90 0.05 45);
171
+
172
+ /* Canvas */
173
+ --color-df-canvas-bg: oklch(0.98 0.01 250);
174
+ --color-df-canvas-grid: oklch(0.85 0.01 250);
175
+
176
+ /* Sidebar */
177
+ --color-df-sidebar-bg: oklch(0.95 0.01 260);
178
+ --color-df-sidebar-border: oklch(0.65 0.05 250);
179
+ --color-df-editor-bg: oklch(0.98 0.01 240);
180
+ --color-df-editor-border: oklch(0.70 0.03 250);
181
+ }
182
+ `,
183
+ },
184
+ 'cyberpunk': {
185
+ name: 'Cyberpunk',
186
+ description: 'Neon colors, futuristic vibe',
187
+ css: `
188
+ :root {
189
+ /* Base Colors */
190
+ --color-df-base: oklch(0.10 0.02 280);
191
+ --color-df-surface: oklch(0.12 0.03 280);
192
+ --color-df-elevated: oklch(0.15 0.04 280);
193
+
194
+ /* NPC Node Colors */
195
+ --color-df-npc-bg: oklch(0.15 0.08 200);
196
+ --color-df-npc-border: oklch(0.50 0.20 200);
197
+ --color-df-npc-header: oklch(0.18 0.10 200);
198
+ --color-df-npc-selected: oklch(0.60 0.25 200);
199
+
200
+ /* Player Node Colors */
201
+ --color-df-player-bg: oklch(0.15 0.08 320);
202
+ --color-df-player-border: oklch(0.55 0.25 320);
203
+ --color-df-player-header: oklch(0.18 0.12 320);
204
+ --color-df-player-selected: oklch(0.65 0.30 320);
205
+
206
+ /* Conditional Node */
207
+ --color-df-conditional-bg: oklch(0.15 0.08 150);
208
+ --color-df-conditional-border: oklch(0.55 0.20 150);
209
+ --color-df-conditional-header: oklch(0.18 0.10 150);
210
+
211
+ /* Start/End */
212
+ --color-df-start: oklch(0.60 0.25 150);
213
+ --color-df-start-bg: oklch(0.20 0.10 150);
214
+ --color-df-end: oklch(0.55 0.25 30);
215
+ --color-df-end-bg: oklch(0.20 0.10 30);
216
+
217
+ /* Edges */
218
+ --color-df-edge-default: oklch(0.45 0.15 280);
219
+ --color-df-edge-default-hover: oklch(0.55 0.20 280);
220
+ --color-df-edge-choice-1: oklch(0.60 0.25 0);
221
+ --color-df-edge-choice-2: oklch(0.65 0.30 320);
222
+ --color-df-edge-choice-3: oklch(0.60 0.25 200);
223
+ --color-df-edge-choice-4: oklch(0.65 0.25 150);
224
+ --color-df-edge-choice-5: oklch(0.60 0.25 60);
225
+ --color-df-edge-loop: oklch(0.65 0.25 30);
226
+ --color-df-edge-dimmed: oklch(0.25 0.05 280);
227
+
228
+ /* Status */
229
+ --color-df-error: oklch(0.60 0.25 25);
230
+ --color-df-warning: oklch(0.65 0.25 70);
231
+ --color-df-success: oklch(0.60 0.25 150);
232
+ --color-df-info: oklch(0.60 0.25 220);
233
+
234
+ /* Text */
235
+ --color-df-text-primary: oklch(0.90 0.02 280);
236
+ --color-df-text-secondary: oklch(0.70 0.03 280);
237
+ --color-df-text-tertiary: oklch(0.50 0.03 280);
238
+
239
+ /* UI Controls */
240
+ --color-df-control-bg: oklch(0.12 0.03 280);
241
+ --color-df-control-border: oklch(0.40 0.10 280);
242
+ --color-df-control-hover: oklch(0.18 0.05 280);
243
+
244
+ /* Flags */
245
+ --color-df-flag-dialogue: oklch(0.50 0.15 280);
246
+ --color-df-flag-dialogue-bg: oklch(0.15 0.05 280);
247
+ --color-df-flag-quest: oklch(0.60 0.25 220);
248
+ --color-df-flag-quest-bg: oklch(0.18 0.08 220);
249
+ --color-df-flag-achievement: oklch(0.65 0.25 70);
250
+ --color-df-flag-achievement-bg: oklch(0.20 0.10 70);
251
+ --color-df-flag-item: oklch(0.60 0.25 150);
252
+ --color-df-flag-item-bg: oklch(0.18 0.08 150);
253
+ --color-df-flag-stat: oklch(0.65 0.30 320);
254
+ --color-df-flag-stat-bg: oklch(0.18 0.12 320);
255
+ --color-df-flag-title: oklch(0.65 0.30 330);
256
+ --color-df-flag-title-bg: oklch(0.18 0.12 330);
257
+ --color-df-flag-global: oklch(0.60 0.25 30);
258
+ --color-df-flag-global-bg: oklch(0.18 0.10 30);
259
+
260
+ /* Canvas */
261
+ --color-df-canvas-bg: oklch(0.08 0.01 280);
262
+ --color-df-canvas-grid: oklch(0.15 0.03 280);
263
+
264
+ /* Sidebar */
265
+ --color-df-sidebar-bg: oklch(0.12 0.03 280);
266
+ --color-df-sidebar-border: oklch(0.40 0.10 280);
267
+ --color-df-editor-bg: oklch(0.10 0.02 280);
268
+ --color-df-editor-border: oklch(0.35 0.08 280);
269
+ }
270
+ `,
271
+ },
272
+ 'darcula': {
273
+ name: 'Darcula',
274
+ description: 'IntelliJ-inspired dark theme',
275
+ css: `
276
+ :root {
277
+ /* Base Colors */
278
+ --color-df-base: oklch(0.20 0.01 250);
279
+ --color-df-surface: oklch(0.22 0.01 260);
280
+ --color-df-elevated: oklch(0.25 0.01 270);
281
+
282
+ /* NPC Node Colors - Muted Red */
283
+ --color-df-npc-bg: oklch(0.22 0.03 20);
284
+ --color-df-npc-border: oklch(0.35 0.05 20);
285
+ --color-df-npc-header: oklch(0.25 0.04 20);
286
+ --color-df-npc-selected: oklch(0.60 0.15 20);
287
+
288
+ /* Player Node Colors - Muted Blue */
289
+ --color-df-player-bg: oklch(0.22 0.03 240);
290
+ --color-df-player-border: oklch(0.35 0.05 240);
291
+ --color-df-player-header: oklch(0.25 0.04 240);
292
+ --color-df-player-selected: oklch(0.60 0.15 240);
293
+
294
+ /* Conditional Node - Muted Green */
295
+ --color-df-conditional-bg: oklch(0.22 0.03 150);
296
+ --color-df-conditional-border: oklch(0.35 0.05 150);
297
+ --color-df-conditional-header: oklch(0.25 0.04 150);
298
+
299
+ /* Start/End */
300
+ --color-df-start: oklch(0.55 0.12 150);
301
+ --color-df-start-bg: oklch(0.25 0.04 150);
302
+ --color-df-end: oklch(0.50 0.12 30);
303
+ --color-df-end-bg: oklch(0.25 0.04 30);
304
+
305
+ /* Edges - Duller borders */
306
+ --color-df-edge-default: oklch(0.35 0.02 250);
307
+ --color-df-edge-default-hover: oklch(0.50 0.05 250);
308
+ --color-df-edge-choice-1: oklch(0.50 0.12 20);
309
+ --color-df-edge-choice-2: oklch(0.50 0.12 240);
310
+ --color-df-edge-choice-3: oklch(0.50 0.12 150);
311
+ --color-df-edge-choice-4: oklch(0.50 0.12 60);
312
+ --color-df-edge-choice-5: oklch(0.50 0.12 300);
313
+ --color-df-edge-loop: oklch(0.50 0.12 30);
314
+ --color-df-edge-dimmed: oklch(0.25 0.01 250);
315
+
316
+ /* Status */
317
+ --color-df-error: oklch(0.55 0.18 25);
318
+ --color-df-warning: oklch(0.60 0.15 70);
319
+ --color-df-success: oklch(0.55 0.12 150);
320
+ --color-df-info: oklch(0.55 0.12 220);
321
+
322
+ /* Text */
323
+ --color-df-text-primary: oklch(0.85 0.01 250);
324
+ --color-df-text-secondary: oklch(0.60 0.01 250);
325
+ --color-df-text-tertiary: oklch(0.45 0.01 250);
326
+
327
+ /* UI Controls */
328
+ --color-df-control-bg: oklch(0.22 0.01 260);
329
+ --color-df-control-border: oklch(0.30 0.02 250);
330
+ --color-df-control-hover: oklch(0.28 0.02 250);
331
+
332
+ /* Flags */
333
+ --color-df-flag-dialogue: oklch(0.50 0.02 250);
334
+ --color-df-flag-dialogue-bg: oklch(0.22 0.01 250);
335
+ --color-df-flag-quest: oklch(0.55 0.12 220);
336
+ --color-df-flag-quest-bg: oklch(0.24 0.04 220);
337
+ --color-df-flag-achievement: oklch(0.60 0.15 70);
338
+ --color-df-flag-achievement-bg: oklch(0.25 0.05 70);
339
+ --color-df-flag-item: oklch(0.55 0.12 150);
340
+ --color-df-flag-item-bg: oklch(0.24 0.04 150);
341
+ --color-df-flag-stat: oklch(0.55 0.12 280);
342
+ --color-df-flag-stat-bg: oklch(0.24 0.04 280);
343
+ --color-df-flag-title: oklch(0.55 0.12 330);
344
+ --color-df-flag-title-bg: oklch(0.24 0.04 330);
345
+ --color-df-flag-global: oklch(0.50 0.12 30);
346
+ --color-df-flag-global-bg: oklch(0.24 0.04 30);
347
+
348
+ /* Canvas */
349
+ --color-df-canvas-bg: oklch(0.18 0.01 250);
350
+ --color-df-canvas-grid: oklch(0.22 0.01 250);
351
+
352
+ /* Sidebar */
353
+ --color-df-sidebar-bg: oklch(0.22 0.01 260);
354
+ --color-df-sidebar-border: oklch(0.30 0.02 250);
355
+ --color-df-editor-bg: oklch(0.20 0.01 240);
356
+ --color-df-editor-border: oklch(0.30 0.02 250);
357
+ }
358
+ `,
359
+ },
360
+ 'high-contrast': {
361
+ name: 'High Contrast',
362
+ description: 'High contrast for accessibility',
363
+ css: `
364
+ :root {
365
+ /* Base Colors */
366
+ --color-df-base: oklch(0.10 0.01 250);
367
+ --color-df-surface: oklch(0.12 0.01 260);
368
+ --color-df-elevated: oklch(0.15 0.01 270);
369
+
370
+ /* NPC Node Colors - Bright Red */
371
+ --color-df-npc-bg: oklch(0.15 0.05 20);
372
+ --color-df-npc-border: oklch(0.50 0.20 20);
373
+ --color-df-npc-header: oklch(0.20 0.08 20);
374
+ --color-df-npc-selected: oklch(0.70 0.25 20);
375
+
376
+ /* Player Node Colors - Bright Blue */
377
+ --color-df-player-bg: oklch(0.15 0.05 240);
378
+ --color-df-player-border: oklch(0.50 0.20 240);
379
+ --color-df-player-header: oklch(0.20 0.08 240);
380
+ --color-df-player-selected: oklch(0.70 0.25 240);
381
+
382
+ /* Conditional Node - Bright Green */
383
+ --color-df-conditional-bg: oklch(0.15 0.05 150);
384
+ --color-df-conditional-border: oklch(0.50 0.20 150);
385
+ --color-df-conditional-header: oklch(0.20 0.08 150);
386
+
387
+ /* Start/End */
388
+ --color-df-start: oklch(0.70 0.20 150);
389
+ --color-df-start-bg: oklch(0.20 0.08 150);
390
+ --color-df-end: oklch(0.70 0.20 30);
391
+ --color-df-end-bg: oklch(0.20 0.08 30);
392
+
393
+ /* Edges - High contrast */
394
+ --color-df-edge-default: oklch(0.60 0.05 250);
395
+ --color-df-edge-default-hover: oklch(0.75 0.10 250);
396
+ --color-df-edge-choice-1: oklch(0.70 0.25 20);
397
+ --color-df-edge-choice-2: oklch(0.70 0.25 240);
398
+ --color-df-edge-choice-3: oklch(0.70 0.25 150);
399
+ --color-df-edge-choice-4: oklch(0.70 0.25 60);
400
+ --color-df-edge-choice-5: oklch(0.70 0.25 300);
401
+ --color-df-edge-loop: oklch(0.70 0.25 30);
402
+ --color-df-edge-dimmed: oklch(0.40 0.02 250);
403
+
404
+ /* Status */
405
+ --color-df-error: oklch(0.70 0.25 25);
406
+ --color-df-warning: oklch(0.75 0.20 70);
407
+ --color-df-success: oklch(0.70 0.25 150);
408
+ --color-df-info: oklch(0.70 0.25 220);
409
+
410
+ /* Text */
411
+ --color-df-text-primary: oklch(0.95 0.01 250);
412
+ --color-df-text-secondary: oklch(0.80 0.01 250);
413
+ --color-df-text-tertiary: oklch(0.65 0.01 250);
414
+
415
+ /* UI Controls */
416
+ --color-df-control-bg: oklch(0.12 0.01 260);
417
+ --color-df-control-border: oklch(0.50 0.05 250);
418
+ --color-df-control-hover: oklch(0.18 0.02 250);
419
+
420
+ /* Flags */
421
+ --color-df-flag-dialogue: oklch(0.60 0.05 250);
422
+ --color-df-flag-dialogue-bg: oklch(0.15 0.02 250);
423
+ --color-df-flag-quest: oklch(0.70 0.25 220);
424
+ --color-df-flag-quest-bg: oklch(0.20 0.08 220);
425
+ --color-df-flag-achievement: oklch(0.75 0.20 70);
426
+ --color-df-flag-achievement-bg: oklch(0.20 0.10 70);
427
+ --color-df-flag-item: oklch(0.70 0.25 150);
428
+ --color-df-flag-item-bg: oklch(0.20 0.08 150);
429
+ --color-df-flag-stat: oklch(0.70 0.25 280);
430
+ --color-df-flag-stat-bg: oklch(0.20 0.10 280);
431
+ --color-df-flag-title: oklch(0.70 0.25 330);
432
+ --color-df-flag-title-bg: oklch(0.20 0.10 330);
433
+ --color-df-flag-global: oklch(0.70 0.25 30);
434
+ --color-df-flag-global-bg: oklch(0.20 0.08 30);
435
+
436
+ /* Canvas */
437
+ --color-df-canvas-bg: oklch(0.08 0.01 250);
438
+ --color-df-canvas-grid: oklch(0.25 0.01 250);
439
+
440
+ /* Sidebar */
441
+ --color-df-sidebar-bg: oklch(0.12 0.01 260);
442
+ --color-df-sidebar-border: oklch(0.50 0.05 250);
443
+ --color-df-editor-bg: oklch(0.10 0.01 240);
444
+ --color-df-editor-border: oklch(0.50 0.05 250);
445
+ }
446
+ `,
447
+ },
448
+ 'girly': {
449
+ name: 'Girly',
450
+ description: 'Soft pinks and pastels',
451
+ css: `
452
+ :root {
453
+ /* Base Colors */
454
+ --color-df-base: oklch(0.18 0.02 330);
455
+ --color-df-surface: oklch(0.20 0.02 340);
456
+ --color-df-elevated: oklch(0.23 0.02 350);
457
+
458
+ /* NPC Node Colors - Soft Pink */
459
+ --color-df-npc-bg: oklch(0.25 0.05 350);
460
+ --color-df-npc-border: oklch(0.45 0.12 350);
461
+ --color-df-npc-header: oklch(0.28 0.08 350);
462
+ --color-df-npc-selected: oklch(0.65 0.20 350);
463
+
464
+ /* Player Node Colors - Soft Purple */
465
+ --color-df-player-bg: oklch(0.25 0.05 300);
466
+ --color-df-player-border: oklch(0.45 0.12 300);
467
+ --color-df-player-header: oklch(0.28 0.08 300);
468
+ --color-df-player-selected: oklch(0.65 0.20 300);
469
+
470
+ /* Conditional Node - Soft Mint */
471
+ --color-df-conditional-bg: oklch(0.25 0.05 180);
472
+ --color-df-conditional-border: oklch(0.45 0.12 180);
473
+ --color-df-conditional-header: oklch(0.28 0.08 180);
474
+
475
+ /* Start/End */
476
+ --color-df-start: oklch(0.65 0.18 180);
477
+ --color-df-start-bg: oklch(0.28 0.08 180);
478
+ --color-df-end: oklch(0.60 0.18 20);
479
+ --color-df-end-bg: oklch(0.28 0.08 20);
480
+
481
+ /* Edges - Soft pastels */
482
+ --color-df-edge-default: oklch(0.45 0.05 330);
483
+ --color-df-edge-default-hover: oklch(0.55 0.10 330);
484
+ --color-df-edge-choice-1: oklch(0.60 0.18 350);
485
+ --color-df-edge-choice-2: oklch(0.60 0.18 300);
486
+ --color-df-edge-choice-3: oklch(0.60 0.18 180);
487
+ --color-df-edge-choice-4: oklch(0.60 0.18 60);
488
+ --color-df-edge-choice-5: oklch(0.60 0.18 20);
489
+ --color-df-edge-loop: oklch(0.60 0.18 30);
490
+ --color-df-edge-dimmed: oklch(0.30 0.02 330);
491
+
492
+ /* Status */
493
+ --color-df-error: oklch(0.60 0.20 20);
494
+ --color-df-warning: oklch(0.70 0.18 70);
495
+ --color-df-success: oklch(0.60 0.18 150);
496
+ --color-df-info: oklch(0.60 0.18 220);
497
+
498
+ /* Text */
499
+ --color-df-text-primary: oklch(0.85 0.02 330);
500
+ --color-df-text-secondary: oklch(0.65 0.02 330);
501
+ --color-df-text-tertiary: oklch(0.50 0.02 330);
502
+
503
+ /* UI Controls */
504
+ --color-df-control-bg: oklch(0.20 0.02 340);
505
+ --color-df-control-border: oklch(0.40 0.05 330);
506
+ --color-df-control-hover: oklch(0.25 0.03 330);
507
+
508
+ /* Flags */
509
+ --color-df-flag-dialogue: oklch(0.50 0.05 330);
510
+ --color-df-flag-dialogue-bg: oklch(0.22 0.02 330);
511
+ --color-df-flag-quest: oklch(0.60 0.18 220);
512
+ --color-df-flag-quest-bg: oklch(0.25 0.08 220);
513
+ --color-df-flag-achievement: oklch(0.70 0.18 70);
514
+ --color-df-flag-achievement-bg: oklch(0.28 0.10 70);
515
+ --color-df-flag-item: oklch(0.60 0.18 150);
516
+ --color-df-flag-item-bg: oklch(0.25 0.08 150);
517
+ --color-df-flag-stat: oklch(0.60 0.18 300);
518
+ --color-df-flag-stat-bg: oklch(0.25 0.08 300);
519
+ --color-df-flag-title: oklch(0.60 0.18 350);
520
+ --color-df-flag-title-bg: oklch(0.25 0.08 350);
521
+ --color-df-flag-global: oklch(0.60 0.18 20);
522
+ --color-df-flag-global-bg: oklch(0.25 0.08 20);
523
+
524
+ /* Canvas */
525
+ --color-df-canvas-bg: oklch(0.15 0.01 330);
526
+ --color-df-canvas-grid: oklch(0.22 0.02 330);
527
+
528
+ /* Sidebar */
529
+ --color-df-sidebar-bg: oklch(0.20 0.02 340);
530
+ --color-df-sidebar-border: oklch(0.40 0.05 330);
531
+ --color-df-editor-bg: oklch(0.18 0.02 330);
532
+ --color-df-editor-border: oklch(0.40 0.05 330);
533
+ }
534
+ `,
535
+ },
536
+ };
537
+
538
+ export type ThemeId = keyof typeof themes;
539
+
540
+ interface ThemeSwitcherProps {
541
+ currentTheme?: ThemeId;
542
+ onThemeChange?: (themeId: ThemeId) => void;
543
+ }
544
+
545
+ export function ThemeSwitcher({ currentTheme = 'dark-fantasy', onThemeChange }: ThemeSwitcherProps) {
546
+ const [selectedTheme, setSelectedTheme] = useState<ThemeId>(currentTheme);
547
+ const [showMenu, setShowMenu] = useState(false);
548
+
549
+ useEffect(() => {
550
+ // Apply theme CSS by updating CSS variables in :root
551
+ const theme = themes[selectedTheme];
552
+ if (theme) {
553
+ // Extract CSS variable values from the theme CSS
554
+ const root = document.documentElement;
555
+ const matches = theme.css.matchAll(/--color-df-([\w-]+):\s*([^;]+);/g);
556
+
557
+ for (const match of matches) {
558
+ const varName = `--color-df-${match[1]}`;
559
+ const value = match[2].trim();
560
+ root.style.setProperty(varName, value);
561
+ }
562
+ }
563
+ }, [selectedTheme]);
564
+
565
+ const handleThemeChange = (themeId: ThemeId) => {
566
+ setSelectedTheme(themeId);
567
+ onThemeChange?.(themeId);
568
+ setShowMenu(false);
569
+ };
570
+
571
+ return (
572
+ <div className="relative">
573
+ <button
574
+ onClick={() => setShowMenu(!showMenu)}
575
+ className="p-1.5 bg-zinc-800 border border-zinc-700 rounded text-zinc-400 hover:text-white hover:border-zinc-600 transition-colors"
576
+ title="Change Theme"
577
+ >
578
+ <Palette size={14} />
579
+ </button>
580
+
581
+ {showMenu && (
582
+ <>
583
+ <div
584
+ className="fixed inset-0 z-40"
585
+ onClick={() => setShowMenu(false)}
586
+ />
587
+ <div className="absolute right-0 top-full mt-2 z-50 bg-zinc-900 border border-zinc-700 rounded-lg shadow-xl p-1 min-w-[200px]">
588
+ <div className="px-3 py-1 text-[10px] text-zinc-500 uppercase border-b border-zinc-700">
589
+ Theme
590
+ </div>
591
+ {Object.entries(themes).map(([id, theme]) => (
592
+ <button
593
+ key={id}
594
+ onClick={() => handleThemeChange(id as ThemeId)}
595
+ className={`w-full text-left px-3 py-2 text-sm rounded transition-colors ${
596
+ selectedTheme === id
597
+ ? 'bg-indigo-600/20 text-indigo-400'
598
+ : 'text-zinc-300 hover:bg-zinc-800'
599
+ }`}
600
+ >
601
+ <div className="font-medium">{theme.name}</div>
602
+ <div className="text-[10px] text-zinc-500 mt-0.5">{theme.description}</div>
603
+ </button>
604
+ ))}
605
+ </div>
606
+ </>
607
+ )}
608
+ </div>
609
+ );
610
+ }
611
+
@@ -0,0 +1,7 @@
1
+ const nextConfig = {
2
+ pageExtensions: ['ts', 'tsx', 'js', 'jsx'],
3
+ transpilePackages: ['@magicborn/dialogue-forge', '@magicborn/server-template'],
4
+ };
5
+
6
+ export default nextConfig;
7
+
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "@magicborn/dialogue-forge-demo",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "dev": "next dev",
7
+ "build": "next build",
8
+ "start": "next start"
9
+ },
10
+ "dependencies": {
11
+ "@magicborn/dialogue-forge": "file:..",
12
+ "@magicborn/server-template": "file:../../packages-shared/server-template",
13
+ "next": "^16.0.9",
14
+ "react": "19.2.1",
15
+ "react-dom": "19.2.1",
16
+ "lucide-react": "^0.559.0",
17
+ "reactflow": "^11.11.4",
18
+ "react-tooltip": "^5.30.0"
19
+ },
20
+ "devDependencies": {
21
+ "@types/node": "^20",
22
+ "@types/react": "^19",
23
+ "@types/react-dom": "^19",
24
+ "typescript": "^5",
25
+ "tailwindcss": "^3.4.0",
26
+ "postcss": "^8.4.0",
27
+ "autoprefixer": "^10.4.0"
28
+ }
29
+ }
@@ -0,0 +1,7 @@
1
+ export default {
2
+ plugins: {
3
+ tailwindcss: {},
4
+ autoprefixer: {},
5
+ },
6
+ };
7
+
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12 2L2 7v10c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V7l-10-5z"/></svg>
@@ -0,0 +1,19 @@
1
+ /* Import dialogue-forge theme - must be before @tailwind */
2
+ @import '../../src/styles/theme.css';
3
+ @import '../../src/styles/scrollbar.css';
4
+
5
+ @tailwind base;
6
+ @tailwind components;
7
+ @tailwind utilities;
8
+
9
+ :root {
10
+ --background: #0a0a0f;
11
+ --foreground: #e4e4e7;
12
+ }
13
+
14
+ body {
15
+ color: var(--foreground);
16
+ background: var(--background);
17
+ font-family: system-ui, -apple-system, sans-serif;
18
+ }
19
+