d1s 0.3.14 → 0.3.16

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 (182) hide show
  1. package/dist/.next/BUILD_ID +1 -1
  2. package/dist/.next/app-build-manifest.json +146 -127
  3. package/dist/.next/app-path-routes-manifest.json +8 -6
  4. package/dist/.next/build-manifest.json +14 -14
  5. package/dist/.next/prerender-manifest.json +3 -3
  6. package/dist/.next/react-loadable-manifest.json +36 -3
  7. package/dist/.next/routes-manifest.json +8 -0
  8. package/dist/.next/server/app/[...studio]/page.js +2 -0
  9. package/dist/.next/server/app/[...studio]/page.js.nft.json +1 -0
  10. package/dist/.next/server/app/[...studio]/page_client-reference-manifest.js +1 -0
  11. package/dist/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  12. package/dist/.next/server/app/_not-found.html +1 -1
  13. package/dist/.next/server/app/_not-found.rsc +12 -12
  14. package/dist/.next/server/app/api/cloudflare/route_client-reference-manifest.js +1 -1
  15. package/dist/.next/server/app/api/databases/route.js +1 -1
  16. package/dist/.next/server/app/api/databases/route_client-reference-manifest.js +1 -1
  17. package/dist/.next/server/app/api/migrations/list/route.js +1 -1
  18. package/dist/.next/server/app/api/migrations/list/route_client-reference-manifest.js +1 -1
  19. package/dist/.next/server/app/api/migrations/sync/route_client-reference-manifest.js +1 -1
  20. package/dist/.next/server/app/api/migrations/sync-files/route_client-reference-manifest.js +1 -1
  21. package/dist/.next/server/app/api/pro/route_client-reference-manifest.js +1 -1
  22. package/dist/.next/server/app/api/pull-data/confirm/route_client-reference-manifest.js +1 -1
  23. package/dist/.next/server/app/api/pull-remote/confirm/route.js +1 -1
  24. package/dist/.next/server/app/api/pull-remote/confirm/route_client-reference-manifest.js +1 -1
  25. package/dist/.next/server/app/api/pull-remote/preview/route_client-reference-manifest.js +1 -1
  26. package/dist/.next/server/app/api/push-remote/confirm/route.js +1 -1
  27. package/dist/.next/server/app/api/push-remote/confirm/route_client-reference-manifest.js +1 -1
  28. package/dist/.next/server/app/api/push-remote/preview/route_client-reference-manifest.js +1 -1
  29. package/dist/.next/server/app/api/query/route.js +2 -2
  30. package/dist/.next/server/app/api/query/route_client-reference-manifest.js +1 -1
  31. package/dist/.next/server/app/api/schema/route.js +55 -1
  32. package/dist/.next/server/app/api/schema/route.js.nft.json +1 -1
  33. package/dist/.next/server/app/api/schema/route_client-reference-manifest.js +1 -1
  34. package/dist/.next/server/app/api/tables/[name]/import/route.js +1 -1
  35. package/dist/.next/server/app/api/tables/[name]/import/route_client-reference-manifest.js +1 -1
  36. package/dist/.next/server/app/api/tables/[name]/route.js +2 -2
  37. package/dist/.next/server/app/api/tables/[name]/route_client-reference-manifest.js +1 -1
  38. package/dist/.next/server/app/api/tables/route.js +1 -1
  39. package/dist/.next/server/app/api/tables/route_client-reference-manifest.js +1 -1
  40. package/dist/.next/server/app/api/telemetry/route.js +1 -0
  41. package/dist/.next/server/app/api/telemetry/route.js.nft.json +1 -0
  42. package/dist/.next/server/app/api/telemetry/route_client-reference-manifest.js +1 -0
  43. package/dist/.next/server/app/api/time-travel/preview/route_client-reference-manifest.js +1 -1
  44. package/dist/.next/server/app/api/time-travel/restore/route.js +1 -1
  45. package/dist/.next/server/app/api/time-travel/restore/route_client-reference-manifest.js +1 -1
  46. package/dist/.next/server/app/api/update/route.js +1 -1
  47. package/dist/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  48. package/dist/.next/server/app/index.html +2 -2
  49. package/dist/.next/server/app/index.rsc +14 -14
  50. package/dist/.next/server/app/page.js +2 -59
  51. package/dist/.next/server/app/page.js.nft.json +1 -1
  52. package/dist/.next/server/app/page_client-reference-manifest.js +1 -1
  53. package/dist/.next/server/app-paths-manifest.json +8 -6
  54. package/dist/.next/server/chunks/366.js +1 -1
  55. package/dist/.next/server/chunks/386.js +2 -2
  56. package/dist/.next/server/chunks/560.js +54 -0
  57. package/dist/.next/server/chunks/602.js +5 -0
  58. package/dist/.next/server/chunks/839.js +1 -1
  59. package/dist/.next/server/middleware-build-manifest.js +1 -1
  60. package/dist/.next/server/middleware-react-loadable-manifest.js +1 -1
  61. package/dist/.next/server/next-font-manifest.js +1 -1
  62. package/dist/.next/server/next-font-manifest.json +1 -1
  63. package/dist/.next/server/pages/404.html +1 -1
  64. package/dist/.next/server/pages/500.html +1 -1
  65. package/dist/.next/server/server-reference-manifest.json +1 -1
  66. package/dist/.next/static/G1OnwcVv2tEZk5TPti3NX/_buildManifest.js +1 -0
  67. package/dist/.next/static/chunks/164f4fb6.ca8844c7aa0d818b.js +1 -0
  68. package/dist/.next/static/chunks/195.7e82e2247322aa7c.js +1 -0
  69. package/dist/.next/static/chunks/199.36887c084c5a42f2.js +1 -0
  70. package/dist/.next/static/chunks/1a258343.d8cc6367f6702160.js +1 -0
  71. package/dist/.next/static/chunks/241.8d5142e5ca2adc27.js +1 -0
  72. package/dist/.next/static/chunks/255-249e483089def0f6.js +1 -0
  73. package/dist/.next/static/chunks/2f0b94e8.ea60580ce276fab2.js +1 -0
  74. package/dist/.next/static/chunks/311.3fdc12abbef5cc96.js +1 -0
  75. package/dist/.next/static/chunks/421-0a458fb5e77c694a.js +1 -0
  76. package/dist/.next/static/chunks/4bd1b696-409494caf8c83275.js +1 -0
  77. package/dist/.next/static/chunks/654-687990059c93dd4a.js +1 -0
  78. package/dist/.next/static/chunks/675-8e205c837b6393a6.js +1 -0
  79. package/dist/.next/static/chunks/69-7a6ccf1639eeb906.js +1 -0
  80. package/dist/.next/static/chunks/823-dc74fc65f3694c6c.js +1 -0
  81. package/dist/.next/static/chunks/931.cf77a97cd839555d.js +1 -0
  82. package/dist/.next/static/chunks/950.76c5dbcabbb992b0.js +1 -0
  83. package/dist/.next/static/chunks/ad2866b8.635304a38afc0b68.js +1 -0
  84. package/dist/.next/static/chunks/app/[...studio]/page-38356f60d1fbc393.js +1 -0
  85. package/dist/.next/static/chunks/app/_not-found/page-97885f45f20098bb.js +1 -0
  86. package/dist/.next/static/chunks/app/api/cloudflare/route-baabb0d8a398f597.js +1 -0
  87. package/dist/.next/static/chunks/app/api/databases/route-baabb0d8a398f597.js +1 -0
  88. package/dist/.next/static/chunks/app/api/migrations/list/route-baabb0d8a398f597.js +1 -0
  89. package/dist/.next/static/chunks/app/api/migrations/sync/route-baabb0d8a398f597.js +1 -0
  90. package/dist/.next/static/chunks/app/api/migrations/sync-files/route-baabb0d8a398f597.js +1 -0
  91. package/dist/.next/static/chunks/app/api/pro/route-baabb0d8a398f597.js +1 -0
  92. package/dist/.next/static/chunks/app/api/pull-data/confirm/route-baabb0d8a398f597.js +1 -0
  93. package/dist/.next/static/chunks/app/api/pull-remote/confirm/route-baabb0d8a398f597.js +1 -0
  94. package/dist/.next/static/chunks/app/api/pull-remote/preview/route-baabb0d8a398f597.js +1 -0
  95. package/dist/.next/static/chunks/app/api/push-remote/confirm/route-baabb0d8a398f597.js +1 -0
  96. package/dist/.next/static/chunks/app/api/push-remote/preview/route-baabb0d8a398f597.js +1 -0
  97. package/dist/.next/static/chunks/app/api/query/route-baabb0d8a398f597.js +1 -0
  98. package/dist/.next/static/chunks/app/api/schema/route-baabb0d8a398f597.js +1 -0
  99. package/dist/.next/static/chunks/app/api/tables/[name]/import/route-baabb0d8a398f597.js +1 -0
  100. package/dist/.next/static/chunks/app/api/tables/[name]/route-baabb0d8a398f597.js +1 -0
  101. package/dist/.next/static/chunks/app/api/tables/route-baabb0d8a398f597.js +1 -0
  102. package/dist/.next/static/chunks/app/api/telemetry/route-baabb0d8a398f597.js +1 -0
  103. package/dist/.next/static/chunks/app/api/time-travel/preview/route-baabb0d8a398f597.js +1 -0
  104. package/dist/.next/static/chunks/app/api/time-travel/restore/route-baabb0d8a398f597.js +1 -0
  105. package/dist/.next/static/chunks/app/api/update/route-baabb0d8a398f597.js +1 -0
  106. package/dist/.next/static/chunks/app/layout-43778cd3861c1c13.js +1 -0
  107. package/dist/.next/static/chunks/app/page-0d3e101d89fb6b5c.js +1 -0
  108. package/dist/.next/static/chunks/bc98253f.d6fc8a0138855acd.js +1 -0
  109. package/dist/.next/static/chunks/framework-1ce91eb6f9ecda85.js +1 -0
  110. package/dist/.next/static/chunks/main-app-70845f4d3fb604e3.js +1 -0
  111. package/dist/.next/static/chunks/main-f7b2399a8f36d1ab.js +1 -0
  112. package/dist/.next/static/chunks/pages/_app-5addca2b3b969fde.js +1 -0
  113. package/dist/.next/static/chunks/pages/_error-022e4ac7bbb9914f.js +1 -0
  114. package/dist/.next/static/chunks/webpack-e5f3140484164ef5.js +1 -0
  115. package/dist/.next/static/css/e7ec8efa0df1ac51.css +3 -0
  116. package/dist/.next/static/media/013b72fa676f92e0-s.woff2 +0 -0
  117. package/dist/.next/static/media/22a5144ee8d83bca-s.p.woff2 +0 -0
  118. package/dist/.next/static/media/2b5b02fc7e511755-s.woff2 +0 -0
  119. package/dist/.next/static/media/65f03d54ccadf4a8-s.woff2 +0 -0
  120. package/dist/.next/static/media/7d4881bb7e1bf84d-s.p.woff2 +0 -0
  121. package/dist/.next/static/media/9766a7e9e2e0ad5a-s.woff2 +0 -0
  122. package/dist/.next/static/media/aa016aab0e6d1295-s.woff2 +0 -0
  123. package/dist/.next/static/media/b66cf8e69499582a-s.woff2 +0 -0
  124. package/dist/.next/static/media/b9408752a0c24fb9-s.woff2 +0 -0
  125. package/dist/.next/static/media/e038a29029a234f2-s.woff2 +0 -0
  126. package/dist/.next/static/media/f639721981034f88-s.woff2 +0 -0
  127. package/dist/.next/trace +4 -3
  128. package/dist/app/[...studio]/page.jsx +1 -0
  129. package/dist/app/api/query/route.js +67 -1
  130. package/dist/app/api/schema/route.js +108 -22
  131. package/dist/app/api/telemetry/route.js +42 -0
  132. package/dist/app/page.jsx +122 -6
  133. package/dist/lib/client-telemetry.js +13 -0
  134. package/dist/lib/local-db.js +14 -2
  135. package/dist/lib/telemetry.js +13 -8
  136. package/package.json +3 -1
  137. package/dist/.next/static/chunks/1a258343.234dd786cf6c097e.js +0 -1
  138. package/dist/.next/static/chunks/255-4f212684648fcab9.js +0 -1
  139. package/dist/.next/static/chunks/421-55f8ce492f5bd9c3.js +0 -1
  140. package/dist/.next/static/chunks/4bd1b696-c023c6e3521b1417.js +0 -1
  141. package/dist/.next/static/chunks/654-f2f8931465d44ae7.js +0 -1
  142. package/dist/.next/static/chunks/69-00a70b2df83ed9ee.js +0 -1
  143. package/dist/.next/static/chunks/823-77b9a2d152da81dd.js +0 -1
  144. package/dist/.next/static/chunks/95.8b08bca2768cb67c.js +0 -1
  145. package/dist/.next/static/chunks/950.edd33691c78c1807.js +0 -1
  146. package/dist/.next/static/chunks/app/_not-found/page-255a8a616fa8d3a5.js +0 -1
  147. package/dist/.next/static/chunks/app/api/cloudflare/route-58aca057db1e5530.js +0 -1
  148. package/dist/.next/static/chunks/app/api/databases/route-58aca057db1e5530.js +0 -1
  149. package/dist/.next/static/chunks/app/api/migrations/list/route-58aca057db1e5530.js +0 -1
  150. package/dist/.next/static/chunks/app/api/migrations/sync/route-58aca057db1e5530.js +0 -1
  151. package/dist/.next/static/chunks/app/api/migrations/sync-files/route-58aca057db1e5530.js +0 -1
  152. package/dist/.next/static/chunks/app/api/pro/route-58aca057db1e5530.js +0 -1
  153. package/dist/.next/static/chunks/app/api/pull-data/confirm/route-58aca057db1e5530.js +0 -1
  154. package/dist/.next/static/chunks/app/api/pull-remote/confirm/route-58aca057db1e5530.js +0 -1
  155. package/dist/.next/static/chunks/app/api/pull-remote/preview/route-58aca057db1e5530.js +0 -1
  156. package/dist/.next/static/chunks/app/api/push-remote/confirm/route-58aca057db1e5530.js +0 -1
  157. package/dist/.next/static/chunks/app/api/push-remote/preview/route-58aca057db1e5530.js +0 -1
  158. package/dist/.next/static/chunks/app/api/query/route-58aca057db1e5530.js +0 -1
  159. package/dist/.next/static/chunks/app/api/schema/route-58aca057db1e5530.js +0 -1
  160. package/dist/.next/static/chunks/app/api/tables/[name]/import/route-58aca057db1e5530.js +0 -1
  161. package/dist/.next/static/chunks/app/api/tables/[name]/route-58aca057db1e5530.js +0 -1
  162. package/dist/.next/static/chunks/app/api/tables/route-58aca057db1e5530.js +0 -1
  163. package/dist/.next/static/chunks/app/api/time-travel/preview/route-58aca057db1e5530.js +0 -1
  164. package/dist/.next/static/chunks/app/api/time-travel/restore/route-58aca057db1e5530.js +0 -1
  165. package/dist/.next/static/chunks/app/api/update/route-58aca057db1e5530.js +0 -1
  166. package/dist/.next/static/chunks/app/layout-a5219438265f0b6c.js +0 -1
  167. package/dist/.next/static/chunks/app/page-5f5e2a64d451ecb1.js +0 -1
  168. package/dist/.next/static/chunks/framework-a6e0b7e30f98059a.js +0 -1
  169. package/dist/.next/static/chunks/main-0bd218f776705cbf.js +0 -1
  170. package/dist/.next/static/chunks/main-app-d20e9d5e211da7c8.js +0 -1
  171. package/dist/.next/static/chunks/pages/_app-7d307437aca18ad4.js +0 -1
  172. package/dist/.next/static/chunks/pages/_error-cb2a52f75f2162e2.js +0 -1
  173. package/dist/.next/static/chunks/webpack-d5e8b5757f0fec83.js +0 -1
  174. package/dist/.next/static/css/262ae258bbcfd289.css +0 -3
  175. package/dist/.next/static/media/4cf2300e9c8272f7-s.p.woff2 +0 -0
  176. package/dist/.next/static/media/747892c23ea88013-s.woff2 +0 -0
  177. package/dist/.next/static/media/8d697b304b401681-s.woff2 +0 -0
  178. package/dist/.next/static/media/93f479601ee12b01-s.p.woff2 +0 -0
  179. package/dist/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
  180. package/dist/.next/static/media/ba015fad6dcf6784-s.woff2 +0 -0
  181. package/dist/.next/static/o_MkOiVF7_eRHovqofgAP/_buildManifest.js +0 -1
  182. /package/dist/.next/static/{o_MkOiVF7_eRHovqofgAP → G1OnwcVv2tEZk5TPti3NX}/_ssgManifest.js +0 -0
@@ -2,22 +2,117 @@
2
2
  // Returns all tables with column schemas and FK relationships.
3
3
 
4
4
  import { NextResponse } from 'next/server';
5
- import { exec } from 'child_process';
5
+ import { execFile } from 'child_process';
6
6
  import { promisify } from 'util';
7
7
  import { findWranglerConfig } from '@/lib/find-wrangler-config.js';
8
+ import { getLocalDb } from '@/lib/local-db.js';
8
9
 
9
- const execAsync = promisify(exec);
10
+ const execFileAsync = promisify(execFile);
10
11
 
11
- async function runPragma(databaseName, query, projectDir, source = 'local') {
12
+ // SQLite exposes PRAGMAs as table-valued functions, which lets us retrieve the
13
+ // complete schema in one query instead of starting Wrangler twice per table.
14
+ const SCHEMA_QUERY = `
15
+ WITH user_tables AS (
16
+ SELECT name
17
+ FROM sqlite_schema
18
+ WHERE type = 'table'
19
+ AND name NOT LIKE 'sqlite_%'
20
+ AND name NOT LIKE '_cf_%'
21
+ ),
22
+ schema_rows AS (
23
+ SELECT
24
+ 'column' AS kind,
25
+ t.name AS table_name,
26
+ p.cid,
27
+ p.name,
28
+ p.type,
29
+ p."notnull" AS "notnull",
30
+ p.dflt_value,
31
+ p.pk,
32
+ NULL AS id,
33
+ NULL AS seq,
34
+ NULL AS "table",
35
+ NULL AS "from",
36
+ NULL AS "to",
37
+ NULL AS on_update,
38
+ NULL AS on_delete,
39
+ NULL AS match
40
+ FROM user_tables t
41
+ JOIN pragma_table_info(t.name) p
42
+
43
+ UNION ALL
44
+
45
+ SELECT
46
+ 'foreign_key' AS kind,
47
+ t.name AS table_name,
48
+ NULL AS cid,
49
+ NULL AS name,
50
+ NULL AS type,
51
+ NULL AS "notnull",
52
+ NULL AS dflt_value,
53
+ NULL AS pk,
54
+ f.id,
55
+ f.seq,
56
+ f."table" AS "table",
57
+ f."from" AS "from",
58
+ f."to" AS "to",
59
+ f.on_update,
60
+ f.on_delete,
61
+ f.match
62
+ FROM user_tables t
63
+ JOIN pragma_foreign_key_list(t.name) f
64
+ )
65
+ SELECT *
66
+ FROM schema_rows
67
+ ORDER BY table_name, kind, cid, id, seq;
68
+ `;
69
+
70
+ async function runSchemaQuery(databaseName, projectDir, source) {
12
71
  const npxCmd = process.platform === 'win32' ? 'npx.cmd' : 'npx';
13
- const { stdout } = await execAsync(
14
- `${npxCmd} wrangler d1 execute ${databaseName} --${source} --command="${query.replace(/"/g, '\\"')}" --json`,
15
- { cwd: projectDir }
72
+ const { stdout } = await execFileAsync(
73
+ npxCmd,
74
+ ['wrangler', 'd1', 'execute', databaseName, `--${source}`, `--command=${SCHEMA_QUERY}`, '--json'],
75
+ { cwd: projectDir, maxBuffer: 10 * 1024 * 1024 }
16
76
  );
17
77
  const result = JSON.parse(stdout);
18
78
  return result[0]?.results || [];
19
79
  }
20
80
 
81
+ function buildTables(rows) {
82
+ const byName = new Map();
83
+
84
+ for (const row of rows) {
85
+ if (!byName.has(row.table_name)) {
86
+ byName.set(row.table_name, { name: row.table_name, columns: [], foreignKeys: [] });
87
+ }
88
+
89
+ const table = byName.get(row.table_name);
90
+ if (row.kind === 'column') {
91
+ table.columns.push({
92
+ cid: row.cid,
93
+ name: row.name,
94
+ type: row.type,
95
+ notnull: row.notnull,
96
+ dflt_value: row.dflt_value,
97
+ pk: row.pk,
98
+ });
99
+ } else if (row.kind === 'foreign_key') {
100
+ table.foreignKeys.push({
101
+ id: row.id,
102
+ seq: row.seq,
103
+ table: row.table,
104
+ from: row.from,
105
+ to: row.to,
106
+ on_update: row.on_update,
107
+ on_delete: row.on_delete,
108
+ match: row.match,
109
+ });
110
+ }
111
+ }
112
+
113
+ return [...byName.values()];
114
+ }
115
+
21
116
  export async function GET(request) {
22
117
  try {
23
118
  const { searchParams } = new URL(request.url);
@@ -46,22 +141,13 @@ export async function GET(request) {
46
141
  if (!dbConfig) throw new Error(`Database not found: ${dbParam}`);
47
142
  const databaseName = dbConfig.database_name;
48
143
 
49
- // Get all user tables
50
- const tableRows = await runPragma(
51
- databaseName,
52
- `SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' AND name NOT LIKE '_cf_%' ORDER BY name;`,
53
- projectDir,
54
- source
55
- );
56
- const tableNames = tableRows.map(r => r.name);
57
-
58
- // Run sequentially to avoid SQLITE_BUSY (database locked) errors
59
- const tables = [];
60
- for (const name of tableNames) {
61
- const columns = await runPragma(databaseName, `PRAGMA table_info(${name});`, projectDir, source);
62
- const foreignKeys = await runPragma(databaseName, `PRAGMA foreign_key_list(${name});`, projectDir, source);
63
- tables.push({ name, columns, foreignKeys });
64
- }
144
+ // Local schemas bypass Wrangler entirely when the Miniflare SQLite file is
145
+ // available. Remote schemas still need Wrangler, but now use one process.
146
+ const localDb = source === 'local' ? getLocalDb(projectDir, dbConfig) : null;
147
+ const rows = localDb
148
+ ? localDb.prepare(SCHEMA_QUERY).all()
149
+ : await runSchemaQuery(databaseName, projectDir, source);
150
+ const tables = buildTables(rows);
65
151
 
66
152
  return NextResponse.json({ success: true, tables, source });
67
153
  } catch (error) {
@@ -0,0 +1,42 @@
1
+ import { NextResponse } from 'next/server';
2
+ import { trackEvent } from '@/lib/telemetry.js';
3
+
4
+ const ALLOWED_EVENTS = new Set([
5
+ 'source_mode_switched',
6
+ 'database_switched',
7
+ 'query_template_selected',
8
+ ]);
9
+
10
+ function sanitizeProperties(value) {
11
+ if (!value || typeof value !== 'object' || Array.isArray(value)) return null;
12
+
13
+ const out = {};
14
+ for (const [k, v] of Object.entries(value)) {
15
+ if (!k || typeof k !== 'string') continue;
16
+ if (typeof v === 'string') out[k] = v.slice(0, 200);
17
+ else if (typeof v === 'number' && Number.isFinite(v)) out[k] = v;
18
+ else if (typeof v === 'boolean') out[k] = v;
19
+ }
20
+
21
+ return Object.keys(out).length ? out : null;
22
+ }
23
+
24
+ export async function POST(req) {
25
+ try {
26
+ const body = await req.json().catch(() => ({}));
27
+ const event = typeof body?.event === 'string' ? body.event.trim() : '';
28
+ if (!ALLOWED_EVENTS.has(event)) {
29
+ return NextResponse.json({ success: false, error: 'Event not allowed' }, { status: 400 });
30
+ }
31
+
32
+ const properties = sanitizeProperties(body?.properties);
33
+ trackEvent(event, undefined, properties);
34
+ return NextResponse.json({ success: true });
35
+ } catch {
36
+ return NextResponse.json({ success: false }, { status: 500 });
37
+ }
38
+ }
39
+
40
+ export async function OPTIONS() {
41
+ return new NextResponse(null, { status: 204 });
42
+ }
package/dist/app/page.jsx CHANGED
@@ -1,7 +1,7 @@
1
1
  // app/page.js
2
2
  'use client'
3
3
 
4
- import { useState } from 'react';
4
+ import { useCallback, useEffect, useRef, useState } from 'react';
5
5
  import { AppSidebar } from '../components/sidebar';
6
6
  import { SQLEditor } from '../components/sql-editor';
7
7
  import { TableView } from '../components/table-view';
@@ -10,20 +10,135 @@ import { SchemaView } from '../components/schema-view';
10
10
  import { TimeTravelView } from '../components/time-travel-view';
11
11
  import { RemoteSyncView } from '../components/remote-sync-view';
12
12
  import { StatusBar } from '../components/status-bar';
13
+ import { useDatabase } from '@/context/database-context';
14
+
15
+ const PATH_BY_VIEW = {
16
+ 'sql-editor': '/',
17
+ schema: '/schema',
18
+ migrations: '/migrations',
19
+ 'time-travel': '/time-travel',
20
+ 'remote-sync': '/remote-sync',
21
+ };
22
+
23
+ function readStudioLocation() {
24
+ if (typeof window === 'undefined') {
25
+ return { view: 'sql-editor', table: null };
26
+ }
27
+
28
+ const segments = window.location.pathname.split('/').filter(Boolean);
29
+ if (segments[0] === 'table' && segments.length > 1) {
30
+ return {
31
+ view: 'table-view',
32
+ table: decodeURIComponent(segments.slice(1).join('/')),
33
+ };
34
+ }
35
+
36
+ const viewByPath = {
37
+ schema: 'schema',
38
+ migrations: 'migrations',
39
+ 'time-travel': 'time-travel',
40
+ 'remote-sync': 'remote-sync',
41
+ sql: 'sql-editor',
42
+ };
43
+ const queryView = new URLSearchParams(window.location.search).get('view');
44
+ const view = viewByPath[segments[0]] || (PATH_BY_VIEW[queryView] ? queryView : 'sql-editor');
45
+ return { view, table: null };
46
+ }
47
+
48
+ function studioUrl(view, table, source, databaseName) {
49
+ const path = view === 'table-view' && table
50
+ ? `/table/${encodeURIComponent(table)}`
51
+ : PATH_BY_VIEW[view] || '/';
52
+ const params = new URLSearchParams();
53
+ params.set('source', source === 'remote' ? 'remote' : 'local');
54
+ if (databaseName) params.set('db', databaseName);
55
+ return `${path}?${params.toString()}`;
56
+ }
13
57
 
14
58
  export default function StudioPage() {
15
59
  const [currentView, setCurrentView] = useState('sql-editor');
16
60
  const [selectedTable, setSelectedTable] = useState(null);
17
61
  const [initialSqlQuery, setInitialSqlQuery] = useState('');
62
+ const [isUrlReady, setIsUrlReady] = useState(false);
63
+ const {
64
+ sourceMode,
65
+ setSourceMode,
66
+ databases,
67
+ currentDatabase,
68
+ switchDatabase,
69
+ } = useDatabase();
70
+ const navigationStateRef = useRef(null);
71
+ navigationStateRef.current = {
72
+ sourceMode,
73
+ setSourceMode,
74
+ databases,
75
+ currentDatabase,
76
+ switchDatabase,
77
+ };
78
+
79
+ const updateUrl = useCallback((method, view, table = null) => {
80
+ const requestedDatabase = new URLSearchParams(window.location.search).get('db');
81
+ const url = studioUrl(
82
+ view,
83
+ table,
84
+ sourceMode,
85
+ currentDatabase?.database_name || requestedDatabase
86
+ );
87
+ window.history[method === 'push' ? 'pushState' : 'replaceState']({}, '', url);
88
+ }, [currentDatabase?.database_name, sourceMode]);
89
+
90
+ const navigate = useCallback((view, table = null) => {
91
+ setCurrentView(view);
92
+ setSelectedTable(table);
93
+ updateUrl('push', view, table);
94
+ }, [updateUrl]);
95
+
96
+ useEffect(() => {
97
+ const restoreFromUrl = () => {
98
+ const location = readStudioLocation();
99
+ setCurrentView(location.view);
100
+ setSelectedTable(location.table);
101
+
102
+ const params = new URLSearchParams(window.location.search);
103
+ const requestedSource = params.get('source');
104
+ const requestedDatabase = params.get('db');
105
+ const state = navigationStateRef.current;
106
+
107
+ if (
108
+ (requestedSource === 'local' || requestedSource === 'remote') &&
109
+ requestedSource !== state.sourceMode
110
+ ) {
111
+ state.setSourceMode(requestedSource).catch(() => {});
112
+ }
113
+
114
+ if (
115
+ requestedDatabase &&
116
+ requestedDatabase !== state.currentDatabase?.database_name &&
117
+ state.databases.some(db => db.database_name === requestedDatabase)
118
+ ) {
119
+ state.switchDatabase(requestedDatabase).catch(() => {});
120
+ }
121
+
122
+ setIsUrlReady(true);
123
+ };
124
+
125
+ restoreFromUrl();
126
+ window.addEventListener('popstate', restoreFromUrl);
127
+ return () => window.removeEventListener('popstate', restoreFromUrl);
128
+ }, []);
129
+
130
+ useEffect(() => {
131
+ if (!isUrlReady || !currentDatabase) return;
132
+ updateUrl('replace', currentView, selectedTable);
133
+ }, [currentView, isUrlReady, selectedTable, sourceMode, currentDatabase?.database_name, updateUrl]);
18
134
 
19
135
  const handleTableSelect = (tableName) => {
20
- setSelectedTable(tableName);
21
- setCurrentView('table-view');
136
+ navigate('table-view', tableName);
22
137
  };
23
138
 
24
139
  const handleOpenInSQL = (sql) => {
25
140
  setInitialSqlQuery(sql);
26
- setCurrentView('sql-editor');
141
+ navigate('sql-editor');
27
142
  };
28
143
 
29
144
  return (
@@ -31,7 +146,8 @@ export default function StudioPage() {
31
146
  <AppSidebar
32
147
  className="w-64 border-r flex-shrink-0"
33
148
  currentView={currentView}
34
- onNavigate={setCurrentView}
149
+ selectedTable={selectedTable}
150
+ onNavigate={navigate}
35
151
  onTableSelect={handleTableSelect}
36
152
  />
37
153
  <div className="flex-1 flex flex-col overflow-hidden">
@@ -49,4 +165,4 @@ export default function StudioPage() {
49
165
  </div>
50
166
  </div>
51
167
  );
52
- }
168
+ }
@@ -0,0 +1,13 @@
1
+ export async function sendTelemetry(event, properties = null) {
2
+ if (!event || typeof event !== 'string') return;
3
+ try {
4
+ await fetch('/api/telemetry', {
5
+ method: 'POST',
6
+ headers: { 'Content-Type': 'application/json' },
7
+ body: JSON.stringify({
8
+ event,
9
+ ...(properties && typeof properties === 'object' ? { properties } : {})
10
+ }),
11
+ });
12
+ } catch {}
13
+ }
@@ -16,6 +16,15 @@ function sha256(input) {
16
16
  return crypto.createHash('sha256').update(input).digest('hex');
17
17
  }
18
18
 
19
+ // Miniflare stores each D1 database under its Durable Object ID. The ID is
20
+ // derived from the fixed D1 namespace key and the configured database ID.
21
+ function miniflareDurableObjectId(name) {
22
+ const key = crypto.createHash('sha256').update('miniflare-D1DatabaseObject').digest();
23
+ const nameHmac = crypto.createHmac('sha256', key).update(name).digest().subarray(0, 16);
24
+ const hmac = crypto.createHmac('sha256', key).update(nameHmac).digest().subarray(0, 16);
25
+ return Buffer.concat([nameHmac, hmac]).toString('hex');
26
+ }
27
+
19
28
  /**
20
29
  * Locate the SQLite file for a given database config under projectDir.
21
30
  * Wrangler/miniflare v3 stores D1 as:
@@ -40,7 +49,10 @@ function findSqliteFile(projectDir, databaseConfig) {
40
49
  'd1:',
41
50
  ];
42
51
  const candidates = ids.flatMap(id =>
43
- prefixes.map(prefix => sha256(`${prefix}${id}`))
52
+ [
53
+ miniflareDurableObjectId(id),
54
+ ...prefixes.map(prefix => sha256(`${prefix}${id}`)),
55
+ ]
44
56
  ).map(h => path.join(dir, `${h}.sqlite`));
45
57
 
46
58
  const found = candidates.find(p => fs.existsSync(p));
@@ -51,7 +63,7 @@ function findSqliteFile(projectDir, databaseConfig) {
51
63
  // the wrong one would mix up tables from different databases. In that case
52
64
  // return null so the caller falls back to wrangler CLI (which knows the mapping).
53
65
  const files = fs.readdirSync(dir)
54
- .filter(f => f.endsWith('.sqlite'))
66
+ .filter(f => f.endsWith('.sqlite') && f !== 'metadata.sqlite')
55
67
  .map(f => ({ name: f, fullPath: path.join(dir, f), mtime: fs.statSync(path.join(dir, f)).mtimeMs }))
56
68
  .sort((a, b) => b.mtime - a.mtime);
57
69
 
@@ -20,19 +20,24 @@ function getInstallId() {
20
20
  return installId;
21
21
  }
22
22
 
23
- export async function trackEvent(event, version) {
23
+ export async function trackEvent(event, version, properties = null) {
24
24
  if (process.env.D1_STUDIO_NO_TELEMETRY) return;
25
25
  try {
26
+ const payload = {
27
+ installId: getInstallId(),
28
+ event,
29
+ version,
30
+ node: process.version,
31
+ platform: process.platform,
32
+ };
33
+ if (properties && typeof properties === 'object') {
34
+ payload.properties = properties;
35
+ }
36
+
26
37
  await fetch(TRACK_URL, {
27
38
  method: 'POST',
28
39
  headers: { 'Content-Type': 'application/json' },
29
- body: JSON.stringify({
30
- installId: getInstallId(),
31
- event,
32
- version,
33
- node: process.version,
34
- platform: process.platform,
35
- }),
40
+ body: JSON.stringify(payload),
36
41
  signal: AbortSignal.timeout(3000),
37
42
  });
38
43
  } catch {} // silent fail, never block the user
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "d1s",
3
- "version": "0.3.14",
3
+ "version": "0.3.16",
4
4
  "license": "UNLICENSED",
5
5
  "type": "module",
6
6
  "description": "The first native studio for Cloudflare D1. Zero setup. No extra dependencies.",
@@ -77,7 +77,9 @@
77
77
  "esbuild": "^0.25.0",
78
78
  "express": "^4.21.2",
79
79
  "find-up": "^7.0.0",
80
+ "html-to-image": "^1.11.13",
80
81
  "inquirer": "^9.2.14",
82
+ "jspdf": "^4.2.1",
81
83
  "lucide-react": "^0.474.0",
82
84
  "next": "^15.5.15",
83
85
  "node": "^20.18.3",
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[862],{2539:(e,t,n)=>{n.d(t,{Gc:()=>th,H2:()=>t_,Ln:()=>tg,VH:()=>ee,VS:()=>tC,Zk:()=>C,_5:()=>o,ck:()=>tm,fM:()=>tv,h7:()=>ev});var o,l=n(5155),r=n(2115),a=n(3621),i=n(6122),s=n(3718),d=n(7459);n(7650);let c=(0,r.createContext)(null),u=c.Provider,g=i.xc.error001();function f(e,t){let n=(0,r.useContext)(c);if(null===n)throw Error(g);return(0,s.n)(n,e,t)}function p(){let e=(0,r.useContext)(c);if(null===e)throw Error(g);return(0,r.useMemo)(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe}),[e])}let h={display:"none"},m={position:"absolute",width:1,height:1,margin:-1,border:0,padding:0,overflow:"hidden",clip:"rect(0px, 0px, 0px, 0px)",clipPath:"inset(100%)"},v="react-flow__node-desc",b="react-flow__edge-desc",y=e=>e.ariaLiveMessage,x=e=>e.ariaLabelConfig;function S(e){let{rfId:t}=e,n=f(y);return(0,l.jsx)("div",{id:"".concat("react-flow__aria-live","-").concat(t),"aria-live":"assertive","aria-atomic":"true",style:m,children:n})}function w(e){let{rfId:t,disableKeyboardA11y:n}=e,o=f(x);return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("div",{id:"".concat(v,"-").concat(t),style:h,children:n?o["node.a11yDescription.default"]:o["node.a11yDescription.keyboardDisabled"]}),(0,l.jsx)("div",{id:"".concat(b,"-").concat(t),style:h,children:o["edge.a11yDescription.default"]}),!n&&(0,l.jsx)(S,{rfId:t})]})}let C=(0,r.forwardRef)((e,t)=>{let{position:n="top-left",children:o,className:r,style:i,...s}=e,d="".concat(n).split("-");return(0,l.jsx)("div",{className:(0,a.A)(["react-flow__panel",r,...d]),style:i,ref:t,...s,children:o})});function E(e){let{proOptions:t,position:n="bottom-right"}=e;return(null==t?void 0:t.hideAttribution)?null:(0,l.jsx)(C,{position:n,className:"react-flow__attribution","data-message":"Please only hide this attribution when you are subscribed to React Flow Pro: https://pro.reactflow.dev",children:(0,l.jsx)("a",{href:"https://reactflow.dev",target:"_blank",rel:"noopener noreferrer","aria-label":"React Flow attribution",children:"React Flow"})})}C.displayName="Panel";let N=e=>{let t=[],n=[];for(let[,n]of e.nodeLookup)n.selected&&t.push(n.internals.userNode);for(let[,t]of e.edgeLookup)t.selected&&n.push(t);return{selectedNodes:t,selectedEdges:n}},k=e=>e.id;function M(e,t){return(0,d.x)(e.selectedNodes.map(k),t.selectedNodes.map(k))&&(0,d.x)(e.selectedEdges.map(k),t.selectedEdges.map(k))}function P(e){let{onSelectionChange:t}=e,n=p(),{selectedNodes:o,selectedEdges:l}=f(N,M);return(0,r.useEffect)(()=>{let e={nodes:o,edges:l};null==t||t(e),n.getState().onSelectionChangeHandlers.forEach(t=>t(e))},[o,l,t]),null}let D=e=>!!e.onSelectionChangeHandlers;function j(e){let{onSelectionChange:t}=e,n=f(D);return t||n?(0,l.jsx)(P,{onSelectionChange:t}):null}let A=[0,0],_={x:0,y:0,zoom:1},I=["nodes","edges","defaultNodes","defaultEdges","onConnect","onConnectStart","onConnectEnd","onClickConnectStart","onClickConnectEnd","nodesDraggable","autoPanOnNodeFocus","nodesConnectable","nodesFocusable","edgesFocusable","edgesReconnectable","elevateNodesOnSelect","elevateEdgesOnSelect","minZoom","maxZoom","nodeExtent","onNodesChange","onEdgesChange","elementsSelectable","connectionMode","snapGrid","snapToGrid","translateExtent","connectOnClick","defaultEdgeOptions","fitView","fitViewOptions","onNodesDelete","onEdgesDelete","onDelete","onNodeDrag","onNodeDragStart","onNodeDragStop","onSelectionDrag","onSelectionDragStart","onSelectionDragStop","onMoveStart","onMove","onMoveEnd","noPanClassName","nodeOrigin","autoPanOnConnect","autoPanOnNodeDrag","onError","connectionRadius","isValidConnection","selectNodesOnDrag","nodeDragThreshold","connectionDragThreshold","onBeforeDelete","debug","autoPanSpeed","ariaLabelConfig","zIndexMode","rfId"],O=e=>({setNodes:e.setNodes,setEdges:e.setEdges,setMinZoom:e.setMinZoom,setMaxZoom:e.setMaxZoom,setTranslateExtent:e.setTranslateExtent,setNodeExtent:e.setNodeExtent,reset:e.reset,setDefaultNodesAndEdges:e.setDefaultNodesAndEdges}),R={translateExtent:i.ZO,nodeOrigin:A,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:"nopan",rfId:"1"};function L(e){let{setNodes:t,setEdges:n,setMinZoom:o,setMaxZoom:l,setTranslateExtent:a,setNodeExtent:s,reset:c,setDefaultNodesAndEdges:u}=f(O,d.x),g=p();(0,r.useEffect)(()=>(u(e.defaultNodes,e.defaultEdges),()=>{h.current=R,c()}),[]);let h=(0,r.useRef)(R);return(0,r.useEffect)(()=>{for(let r of I){let d=e[r];d!==h.current[r]&&void 0!==e[r]&&("nodes"===r?t(d):"edges"===r?n(d):"minZoom"===r?o(d):"maxZoom"===r?l(d):"translateExtent"===r?a(d):"nodeExtent"===r?s(d):"ariaLabelConfig"===r?g.setState({ariaLabelConfig:(0,i.Q6)(d)}):"fitView"===r?g.setState({fitViewQueued:d}):"fitViewOptions"===r?g.setState({fitViewOptions:d}):g.setState({[r]:d}))}h.current=e},I.map(t=>e[t])),null}function z(){return"undefined"!=typeof window&&window.matchMedia?window.matchMedia("(prefers-color-scheme: dark)"):null}let B="undefined"!=typeof document?document:null;function V(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{target:B,actInsideInputWithModifier:!0},[n,o]=(0,r.useState)(!1),l=(0,r.useRef)(!1),a=(0,r.useRef)(new Set([])),[s,d]=(0,r.useMemo)(()=>{if(null!==e){let t=(Array.isArray(e)?e:[e]).filter(e=>"string"==typeof e).map(e=>e.replace("+","\n").replace("\n\n","\n+").split("\n")),n=t.reduce((e,t)=>e.concat(...t),[]);return[t,n]}return[[],[]]},[e]);return(0,r.useEffect)(()=>{var n,r;let c=null!=(n=null==t?void 0:t.target)?n:B,u=null==(r=null==t?void 0:t.actInsideInputWithModifier)||r;if(null!==e){let e=e=>{if(l.current=e.ctrlKey||e.metaKey||e.shiftKey||e.altKey,(!l.current||l.current&&!u)&&(0,i.v5)(e))return!1;let n=T(e.code,d);if(a.current.add(e[n]),H(s,a.current,!1)){var r,c;let n=(null==(c=e.composedPath)||null==(r=c.call(e))?void 0:r[0])||e.target,a=(null==n?void 0:n.nodeName)==="BUTTON"||(null==n?void 0:n.nodeName)==="A";!1!==t.preventDefault&&(l.current||!a)&&e.preventDefault(),o(!0)}},n=e=>{let t=T(e.code,d);H(s,a.current,!0)?(o(!1),a.current.clear()):a.current.delete(e[t]),"Meta"===e.key&&a.current.clear(),l.current=!1},r=()=>{a.current.clear(),o(!1)};return null==c||c.addEventListener("keydown",e),null==c||c.addEventListener("keyup",n),window.addEventListener("blur",r),window.addEventListener("contextmenu",r),()=>{null==c||c.removeEventListener("keydown",e),null==c||c.removeEventListener("keyup",n),window.removeEventListener("blur",r),window.removeEventListener("contextmenu",r)}}},[e,o]),n}function H(e,t,n){return e.filter(e=>n||e.length===t.size).some(e=>e.every(e=>t.has(e)))}function T(e,t){return t.includes(e)?"code":"key"}function F(e,t){let n=[],o=new Map,l=[];for(let t of e)if("add"===t.type){l.push(t);continue}else if("remove"===t.type||"replace"===t.type)o.set(t.id,[t]);else{let e=o.get(t.id);e?e.push(t):o.set(t.id,[t])}for(let e of t){let t=o.get(e.id);if(!t){n.push(e);continue}if("remove"===t[0].type)continue;if("replace"===t[0].type){n.push({...t[0].item});continue}let l={...e};for(let e of t){var r=e,a=l;switch(r.type){case"select":a.selected=r.selected;break;case"position":void 0!==r.position&&(a.position=r.position),void 0!==r.dragging&&(a.dragging=r.dragging);break;case"dimensions":void 0!==r.dimensions&&(a.measured={...r.dimensions},r.setAttributes&&((!0===r.setAttributes||"width"===r.setAttributes)&&(a.width=r.dimensions.width),(!0===r.setAttributes||"height"===r.setAttributes)&&(a.height=r.dimensions.height))),"boolean"==typeof r.resizing&&(a.resizing=r.resizing)}}n.push(l)}return l.length&&l.forEach(e=>{void 0!==e.index?n.splice(e.index,0,{...e.item}):n.push({...e.item})}),n}function Z(e,t){return{id:e,type:"select",selected:t}}function X(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Set,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=[];for(let[l,r]of e){let e=t.has(l);(void 0!==r.selected||e)&&r.selected!==e&&(n&&(r.selected=e),o.push(Z(r.id,e)))}return o}function K(e){let{items:t=[],lookup:n}=e,o=[],l=new Map(t.map(e=>[e.id,e]));for(let[e,l]of t.entries()){var r,a;let t=n.get(l.id),i=null!=(a=null==t||null==(r=t.internals)?void 0:r.userNode)?a:t;void 0!==i&&i!==l&&o.push({id:l.id,item:l,type:"replace"}),void 0===i&&o.push({item:l,type:"add",index:e})}for(let[e]of n)void 0===l.get(e)&&o.push({id:e,type:"remove"});return o}function W(e){return{id:e.id,type:"remove"}}let Y=e=>(0,i.oB)(e);function Q(e){return(0,r.forwardRef)(e)}let U="undefined"!=typeof window?r.useLayoutEffect:r.useEffect;function G(e){let[t,n]=(0,r.useState)(BigInt(0)),[o]=(0,r.useState)(()=>{var e;let t;return e=()=>n(e=>e+BigInt(1)),t=[],{get:()=>t,reset:()=>{t=[]},push:n=>{t.push(n),e()}}});return U(()=>{let t=o.get();t.length&&(e(t),o.reset())},[t]),o}let q=(0,r.createContext)(null);function $(e){let{children:t}=e,n=p(),o=G((0,r.useCallback)(e=>{let{nodes:t=[],setNodes:o,hasDefaultNodes:l,onNodesChange:r,nodeLookup:a,fitViewQueued:i,onNodesChangeMiddlewareMap:s}=n.getState(),d=t;for(let t of e)d="function"==typeof t?t(d):t;let c=K({items:d,lookup:a});for(let e of s.values())c=e(c);l&&o(d),c.length>0?null==r||r(c):i&&window.requestAnimationFrame(()=>{let{fitViewQueued:e,nodes:t,setNodes:o}=n.getState();e&&o(t)})},[])),a=G((0,r.useCallback)(e=>{let{edges:t=[],setEdges:o,hasDefaultEdges:l,onEdgesChange:r,edgeLookup:a}=n.getState(),i=t;for(let t of e)i="function"==typeof t?t(i):t;l?o(i):r&&r(K({items:i,lookup:a}))},[])),i=(0,r.useMemo)(()=>({nodeQueue:o,edgeQueue:a}),[]);return(0,l.jsx)(q.Provider,{value:i,children:t})}let J=e=>!!e.panZoom;function ee(){let e=(()=>{let e=p();return(0,r.useMemo)(()=>({zoomIn:t=>{let{panZoom:n}=e.getState();return n?n.scaleBy(1.2,{duration:null==t?void 0:t.duration}):Promise.resolve(!1)},zoomOut:t=>{let{panZoom:n}=e.getState();return n?n.scaleBy(1/1.2,{duration:null==t?void 0:t.duration}):Promise.resolve(!1)},zoomTo:(t,n)=>{let{panZoom:o}=e.getState();return o?o.scaleTo(t,{duration:null==n?void 0:n.duration}):Promise.resolve(!1)},getZoom:()=>e.getState().transform[2],setViewport:async(t,n)=>{var o,l,r;let{transform:[a,i,s],panZoom:d}=e.getState();return d?(await d.setViewport({x:null!=(o=t.x)?o:a,y:null!=(l=t.y)?l:i,zoom:null!=(r=t.zoom)?r:s},n),Promise.resolve(!0)):Promise.resolve(!1)},getViewport:()=>{let[t,n,o]=e.getState().transform;return{x:t,y:n,zoom:o}},setCenter:async(t,n,o)=>e.getState().setCenter(t,n,o),fitBounds:async(t,n)=>{var o;let{width:l,height:r,minZoom:a,maxZoom:s,panZoom:d}=e.getState(),c=(0,i.R4)(t,l,r,a,s,null!=(o=null==n?void 0:n.padding)?o:.1);return d?(await d.setViewport(c,{duration:null==n?void 0:n.duration,ease:null==n?void 0:n.ease,interpolate:null==n?void 0:n.interpolate}),Promise.resolve(!0)):Promise.resolve(!1)},screenToFlowPosition:function(t){var n,o;let l=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},{transform:r,snapGrid:a,snapToGrid:s,domNode:d}=e.getState();if(!d)return t;let{x:c,y:u}=d.getBoundingClientRect(),g={x:t.x-c,y:t.y-u},f=null!=(n=l.snapGrid)?n:a,p=null!=(o=l.snapToGrid)?o:s;return(0,i.Ff)(g,r,p,f)},flowToScreenPosition:t=>{let{transform:n,domNode:o}=e.getState();if(!o)return t;let{x:l,y:r}=o.getBoundingClientRect(),a=(0,i.zj)(t,n);return{x:a.x+l,y:a.y+r}}}),[])})(),t=p(),n=function(){let e=(0,r.useContext)(q);if(!e)throw Error("useBatchContext must be used within a BatchProvider");return e}(),o=f(J),l=(0,r.useMemo)(()=>{let e=e=>t.getState().nodeLookup.get(e),o=e=>{n.nodeQueue.push(e)},l=e=>{n.edgeQueue.push(e)},r=e=>{var n,o,l,r;let{nodeLookup:a,nodeOrigin:s}=t.getState(),d=Y(e)?e:a.get(e.id),c=d.parentId?(0,i.us)(d.position,d.measured,d.parentId,a,s):d.position,u={...d,position:c,width:null!=(l=null==(n=d.measured)?void 0:n.width)?l:d.width,height:null!=(r=null==(o=d.measured)?void 0:o.height)?r:d.height};return(0,i.kM)(u)},a=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{replace:!1};o(o=>o.map(o=>{if(o.id===e){let e="function"==typeof t?t(o):t;return n.replace&&Y(e)?e:{...o,...e}}return o}))},s=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{replace:!1};l(o=>o.map(o=>{if(o.id===e){let e="function"==typeof t?t(o):t;return n.replace&&(0,i.b$)(e)?e:{...o,...e}}return o}))};return{getNodes:()=>t.getState().nodes.map(e=>({...e})),getNode:t=>{var n;return null==(n=e(t))?void 0:n.internals.userNode},getInternalNode:e,getEdges:()=>{let{edges:e=[]}=t.getState();return e.map(e=>({...e}))},getEdge:e=>t.getState().edgeLookup.get(e),setNodes:o,setEdges:l,addNodes:e=>{let t=Array.isArray(e)?e:[e];n.nodeQueue.push(e=>[...e,...t])},addEdges:e=>{let t=Array.isArray(e)?e:[e];n.edgeQueue.push(e=>[...e,...t])},toObject:()=>{let{nodes:e=[],edges:n=[],transform:o}=t.getState(),[l,r,a]=o;return{nodes:e.map(e=>({...e})),edges:n.map(e=>({...e})),viewport:{x:l,y:r,zoom:a}}},deleteElements:async e=>{let{nodes:n=[],edges:o=[]}=e,{nodes:l,edges:r,onNodesDelete:a,onEdgesDelete:s,triggerNodeChanges:d,triggerEdgeChanges:c,onDelete:u,onBeforeDelete:g}=t.getState(),{nodes:f,edges:p}=await (0,i.Tq)({nodesToRemove:n,edgesToRemove:o,nodes:l,edges:r,onBeforeDelete:g}),h=p.length>0,m=f.length>0;if(h){let e=p.map(W);null==s||s(p),c(e)}if(m){let e=f.map(W);null==a||a(f),d(e)}return(m||h)&&(null==u||u({nodes:f,edges:p})),{deletedNodes:f,deletedEdges:p}},getIntersectingNodes:function(e){let n=!(arguments.length>1)||void 0===arguments[1]||arguments[1],o=arguments.length>2?arguments[2]:void 0,l=(0,i.mW)(e),a=l?e:r(e),s=void 0!==o;return a?(o||t.getState().nodes).filter(o=>{let r=t.getState().nodeLookup.get(o.id);if(r&&!l&&(o.id===e.id||!r.internals.positionAbsolute))return!1;let d=(0,i.kM)(s?o:r),c=(0,i.X6)(d,a);return n&&c>0||c>=d.width*d.height||c>=a.width*a.height}):[]},isNodeIntersecting:function(e,t){let n=!(arguments.length>2)||void 0===arguments[2]||arguments[2],o=(0,i.mW)(e)?e:r(e);if(!o)return!1;let l=(0,i.X6)(o,t);return n&&l>0||l>=t.width*t.height||l>=o.width*o.height},updateNode:a,updateNodeData:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{replace:!1};a(e,e=>{let o="function"==typeof t?t(e):t;return n.replace?{...e,data:o}:{...e,data:{...e.data,...o}}},n)},updateEdge:s,updateEdgeData:function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{replace:!1};s(e,e=>{let o="function"==typeof t?t(e):t;return n.replace?{...e,data:o}:{...e,data:{...e.data,...o}}},n)},getNodesBounds:e=>{let{nodeLookup:n,nodeOrigin:o}=t.getState();return(0,i.Jo)(e,{nodeLookup:n,nodeOrigin:o})},getHandleConnections:e=>{var n,o;let{type:l,id:r,nodeId:a}=e;return Array.from(null!=(o=null==(n=t.getState().connectionLookup.get("".concat(a,"-").concat(l).concat(r?"-".concat(r):"")))?void 0:n.values())?o:[])},getNodeConnections:e=>{var n,o;let{type:l,handleId:r,nodeId:a}=e;return Array.from(null!=(o=null==(n=t.getState().connectionLookup.get("".concat(a).concat(l?r?"-".concat(l,"-").concat(r):"-".concat(l):"")))?void 0:n.values())?o:[])},fitView:async e=>{var o;let l=null!=(o=t.getState().fitViewResolver)?o:(0,i.YN)();return t.setState({fitViewQueued:!0,fitViewOptions:e,fitViewResolver:l}),n.nodeQueue.push(e=>[...e]),l.promise}}},[]);return(0,r.useMemo)(()=>({...l,...e,viewportInitialized:o}),[o])}let et=e=>e.selected,en="undefined"!=typeof window?window:void 0,eo={position:"absolute",width:"100%",height:"100%",top:0,left:0},el=e=>({userSelectionActive:e.userSelectionActive,lib:e.lib,connectionInProgress:e.connection.inProgress});function er(e){let{onPaneContextMenu:t,zoomOnScroll:n=!0,zoomOnPinch:o=!0,panOnScroll:a=!1,panOnScrollSpeed:s=.5,panOnScrollMode:c=i.ny.Free,zoomOnDoubleClick:u=!0,panOnDrag:g=!0,defaultViewport:h,translateExtent:m,minZoom:v,maxZoom:b,zoomActivationKeyCode:y,preventScrolling:x=!0,children:S,noWheelClassName:w,noPanClassName:C,onViewportChange:E,isControlledViewport:N,paneClickDistance:k,selectionOnDrag:M}=e,P=p(),D=(0,r.useRef)(null),{userSelectionActive:j,lib:A,connectionInProgress:_}=f(el,d.x),I=V(y),O=(0,r.useRef)(),R=p();(0,r.useEffect)(()=>{let e=()=>{var e,t,n,o,l;if(!D.current||!(null==(n=null==(e=(t=D.current).checkVisibility)?void 0:e.call(t))||n))return!1;let r=(0,i.Eo)(D.current);(0===r.height||0===r.width)&&(null==(o=(l=R.getState()).onError)||o.call(l,"004",i.xc.error004())),R.setState({width:r.width||500,height:r.height||500})};if(D.current){e(),window.addEventListener("resize",e);let t=new ResizeObserver(()=>e());return t.observe(D.current),()=>{window.removeEventListener("resize",e),t&&D.current&&t.unobserve(D.current)}}},[]);let L=(0,r.useCallback)(e=>{null==E||E({x:e[0],y:e[1],zoom:e[2]}),N||P.setState({transform:e})},[E,N]);return(0,r.useEffect)(()=>{if(D.current){O.current=(0,i.kO)({domNode:D.current,minZoom:v,maxZoom:b,translateExtent:m,viewport:h,onDraggingChange:e=>P.setState(t=>t.paneDragging===e?t:{paneDragging:e}),onPanZoomStart:(e,t)=>{let{onViewportChangeStart:n,onMoveStart:o}=P.getState();null==o||o(e,t),null==n||n(t)},onPanZoom:(e,t)=>{let{onViewportChange:n,onMove:o}=P.getState();null==o||o(e,t),null==n||n(t)},onPanZoomEnd:(e,t)=>{let{onViewportChangeEnd:n,onMoveEnd:o}=P.getState();null==o||o(e,t),null==n||n(t)}});let{x:e,y:t,zoom:n}=O.current.getViewport();return P.setState({panZoom:O.current,transform:[e,t,n],domNode:D.current.closest(".react-flow")}),()=>{var e;null==(e=O.current)||e.destroy()}}},[]),(0,r.useEffect)(()=>{var e;null==(e=O.current)||e.update({onPaneContextMenu:t,zoomOnScroll:n,zoomOnPinch:o,panOnScroll:a,panOnScrollSpeed:s,panOnScrollMode:c,zoomOnDoubleClick:u,panOnDrag:g,zoomActivationKeyPressed:I,preventScrolling:x,noPanClassName:C,userSelectionActive:j,noWheelClassName:w,lib:A,onTransformChange:L,connectionInProgress:_,selectionOnDrag:M,paneClickDistance:k})},[t,n,o,a,s,c,u,g,I,x,C,j,w,A,L,_,M,k]),(0,l.jsx)("div",{className:"react-flow__renderer",ref:D,style:eo,children:S})}let ea=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function ei(){let{userSelectionActive:e,userSelectionRect:t}=f(ea,d.x);return e&&t?(0,l.jsx)("div",{className:"react-flow__selection react-flow__container",style:{width:t.width,height:t.height,transform:"translate(".concat(t.x,"px, ").concat(t.y,"px)")}}):null}let es=(e,t)=>n=>{n.target===t.current&&(null==e||e(n))},ed=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,connectionInProgress:e.connection.inProgress,dragging:e.paneDragging});function ec(e){let{isSelecting:t,selectionKeyPressed:n,selectionMode:o=i.Qc.Full,panOnDrag:s,paneClickDistance:c,selectionOnDrag:u,onSelectionStart:g,onSelectionEnd:h,onPaneClick:m,onPaneContextMenu:v,onPaneScroll:b,onPaneMouseEnter:y,onPaneMouseMove:x,onPaneMouseLeave:S,children:w}=e,C=p(),{userSelectionActive:E,elementsSelectable:N,dragging:k,connectionInProgress:M}=f(ed,d.x),P=N&&(t||E),D=(0,r.useRef)(null),j=(0,r.useRef)(),A=(0,r.useRef)(new Set),_=(0,r.useRef)(new Set),I=(0,r.useRef)(!1),O=e=>{if(I.current||M){I.current=!1;return}null==m||m(e),C.getState().resetSelectedElements(),C.setState({nodesSelectionActive:!1})},R=!0===s||Array.isArray(s)&&s.includes(0);return(0,l.jsxs)("div",{className:(0,a.A)(["react-flow__pane",{draggable:R,dragging:k,selection:t}]),onClick:P?void 0:es(O,D),onContextMenu:es(e=>{if(Array.isArray(s)&&(null==s?void 0:s.includes(2)))return void e.preventDefault();null==v||v(e)},D),onWheel:es(b?e=>b(e):void 0,D),onPointerEnter:P?void 0:y,onPointerMove:P?e=>{var t,l;let{userSelectionRect:r,transform:a,nodeLookup:s,edgeLookup:d,connectionLookup:u,triggerNodeChanges:f,triggerEdgeChanges:p,defaultEdgeOptions:h,resetSelectedElements:m}=C.getState();if(!j.current||!r)return;let{x:v,y:b}=(0,i.q1)(e.nativeEvent,j.current),{startX:y,startY:x}=r;if(!I.current){if(Math.hypot(v-y,b-x)<=(n?0:c))return;m(),null==g||g(e)}I.current=!0;let S={startX:y,startY:x,x:v<y?v:y,y:b<x?b:x,width:Math.abs(v-y),height:Math.abs(b-x)},w=A.current,E=_.current;A.current=new Set((0,i.U$)(s,S,a,o===i.Qc.Partial,!0).map(e=>e.id)),_.current=new Set;let N=null==(t=null==h?void 0:h.selectable)||t;for(let e of A.current){let t=u.get(e);if(t)for(let{edgeId:e}of t.values()){let t=d.get(e);t&&(null!=(l=t.selectable)?l:N)&&_.current.add(e)}}(0,i._s)(w,A.current)||f(X(s,A.current,!0)),(0,i._s)(E,_.current)||p(X(d,_.current)),C.setState({userSelectionRect:S,userSelectionActive:!0,nodesSelectionActive:!1})}:x,onPointerUp:P?e=>{var t,n;0===e.button&&(null==(n=e.target)||null==(t=n.releasePointerCapture)||t.call(n,e.pointerId),!E&&e.target===D.current&&C.getState().userSelectionRect&&(null==O||O(e)),C.setState({userSelectionActive:!1,userSelectionRect:null}),I.current&&(null==h||h(e),C.setState({nodesSelectionActive:A.current.size>0})))}:void 0,onPointerDownCapture:P?e=>{var o,l;let{domNode:r}=C.getState();if(j.current=null==r?void 0:r.getBoundingClientRect(),!j.current)return;let a=e.target===D.current;if(!a&&e.target.closest(".nokey")||!t||!(u&&a||n)||0!==e.button||!e.isPrimary)return;null==(l=e.target)||null==(o=l.setPointerCapture)||o.call(l,e.pointerId),I.current=!1;let{x:s,y:d}=(0,i.q1)(e.nativeEvent,j.current);C.setState({userSelectionRect:{width:0,height:0,startX:s,startY:d,x:s,y:d}}),a||(e.stopPropagation(),e.preventDefault())}:void 0,onClickCapture:P?e=>{I.current&&(e.stopPropagation(),I.current=!1)}:void 0,onPointerLeave:S,ref:D,style:eo,children:[w,(0,l.jsx)(ei,{})]})}function eu(e){let{id:t,store:n,unselect:o=!1,nodeRef:l}=e,{addSelectedNodes:r,unselectNodesAndEdges:a,multiSelectionActive:s,nodeLookup:d,onError:c}=n.getState(),u=d.get(t);if(!u){null==c||c("012",i.xc.error012(t));return}n.setState({nodesSelectionActive:!1}),u.selected?(o||u.selected&&s)&&(a({nodes:[u],edges:[]}),requestAnimationFrame(()=>{var e;return null==l||null==(e=l.current)?void 0:e.blur()})):r([t])}function eg(e){let{nodeRef:t,disabled:n=!1,noDragClassName:o,handleSelector:l,nodeId:a,isSelectable:s,nodeClickDistance:d}=e,c=p(),[u,g]=(0,r.useState)(!1),f=(0,r.useRef)();return(0,r.useEffect)(()=>{f.current=(0,i.I$)({getStoreItems:()=>c.getState(),onNodeMouseDown:e=>{eu({id:e,store:c,nodeRef:t})},onDragStart:()=>{g(!0)},onDragStop:()=>{g(!1)}})},[]),(0,r.useEffect)(()=>{if(!n&&t.current&&f.current)return f.current.update({noDragClassName:o,handleSelector:l,domNode:t.current,isSelectable:s,nodeId:a,nodeClickDistance:d}),()=>{var e;null==(e=f.current)||e.destroy()}},[o,l,n,s,t,a,d]),u}function ef(){let e=p();return(0,r.useCallback)(t=>{let{nodeExtent:n,snapToGrid:o,snapGrid:l,nodesDraggable:r,onError:a,updateNodePositions:s,nodeLookup:d,nodeOrigin:c}=e.getState(),u=new Map,g=e=>e.selected&&(e.draggable||r&&void 0===e.draggable),f=o?l[0]:5,p=o?l[1]:5,h=t.direction.x*f*t.factor,m=t.direction.y*p*t.factor;for(let[,e]of d){if(!g(e))continue;let t={x:e.internals.positionAbsolute.x+h,y:e.internals.positionAbsolute.y+m};o&&(t=(0,i.s_)(t,l));let{position:r,positionAbsolute:s}=(0,i.aE)({nodeId:e.id,nextPosition:t,nodeLookup:d,nodeExtent:n,nodeOrigin:c,onError:a});e.position=r,e.internals.positionAbsolute=s,u.set(e.id,e)}s(u)},[])}let ep=(0,r.createContext)(null),eh=ep.Provider;ep.Consumer;let em=e=>({connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName,rfId:e.rfId}),ev=(0,r.memo)(Q(function(e,t){let{type:n="source",position:o=i.yX.Top,isValidConnection:s,isConnectable:c=!0,isConnectableStart:u=!0,isConnectableEnd:g=!0,id:h,onConnect:m,children:v,className:b,onMouseDown:y,onTouchStart:x,...S}=e,w=h||null,C="target"===n,E=p(),N=(0,r.useContext)(ep),{connectOnClick:k,noPanClassName:M,rfId:P}=f(em,d.x),{connectingFrom:D,connectingTo:j,clickConnecting:A,isPossibleEndHandle:_,connectionInProcess:I,clickConnectionInProcess:O,valid:R}=f(e=>{let{connectionClickStartHandle:t,connectionMode:o,connection:l}=e,{fromHandle:r,toHandle:a,isValid:s}=l,d=(null==a?void 0:a.nodeId)===N&&(null==a?void 0:a.id)===w&&(null==a?void 0:a.type)===n;return{connectingFrom:(null==r?void 0:r.nodeId)===N&&(null==r?void 0:r.id)===w&&(null==r?void 0:r.type)===n,connectingTo:d,clickConnecting:(null==t?void 0:t.nodeId)===N&&(null==t?void 0:t.id)===w&&(null==t?void 0:t.type)===n,isPossibleEndHandle:o===i.WZ.Strict?(null==r?void 0:r.type)!==n:N!==(null==r?void 0:r.nodeId)||w!==(null==r?void 0:r.id),connectionInProcess:!!r,clickConnectionInProcess:!!t,valid:d&&s}},d.x);if(!N){var L,z;null==(L=(z=E.getState()).onError)||L.call(z,"010",i.xc.error010())}let B=e=>{let{defaultEdgeOptions:t,onConnect:n,hasDefaultEdges:o}=E.getState(),l={...t,...e};if(o){let{edges:e,setEdges:t}=E.getState();t((0,i.rN)(l,e))}null==n||n(l),null==m||m(l)},V=e=>{if(!N)return;let t=(0,i.Er)(e.nativeEvent);if(u&&(t&&0===e.button||!t)){let t=E.getState();i.aQ.onPointerDown(e.nativeEvent,{handleDomNode:e.currentTarget,autoPanOnConnect:t.autoPanOnConnect,connectionMode:t.connectionMode,connectionRadius:t.connectionRadius,domNode:t.domNode,nodeLookup:t.nodeLookup,lib:t.lib,isTarget:C,handleId:w,nodeId:N,flowId:t.rfId,panBy:t.panBy,cancelConnection:t.cancelConnection,onConnectStart:t.onConnectStart,onConnectEnd:function(){for(var e,t,n=arguments.length,o=Array(n),l=0;l<n;l++)o[l]=arguments[l];return null==(e=(t=E.getState()).onConnectEnd)?void 0:e.call(t,...o)},updateConnection:t.updateConnection,onConnect:B,isValidConnection:s||function(){for(var e,t,n,o=arguments.length,l=Array(o),r=0;r<o;r++)l[r]=arguments[r];return null==(n=null==(e=(t=E.getState()).isValidConnection)?void 0:e.call(t,...l))||n},getTransform:()=>E.getState().transform,getFromHandle:()=>E.getState().connection.fromHandle,autoPanSpeed:t.autoPanSpeed,dragThreshold:t.connectionDragThreshold})}t?null==y||y(e):null==x||x(e)};return(0,l.jsx)("div",{"data-handleid":w,"data-nodeid":N,"data-handlepos":o,"data-id":"".concat(P,"-").concat(N,"-").concat(w,"-").concat(n),className:(0,a.A)(["react-flow__handle","react-flow__handle-".concat(o),"nodrag",M,b,{source:!C,target:C,connectable:c,connectablestart:u,connectableend:g,clickconnecting:A,connectingfrom:D,connectingto:j,valid:R,connectionindicator:c&&(!I||_)&&(I||O?g:u)}]),onMouseDown:V,onTouchStart:V,onClick:k?e=>{let{onClickConnectStart:t,onClickConnectEnd:o,connectionClickStartHandle:l,connectionMode:r,isValidConnection:a,lib:d,rfId:c,nodeLookup:g,connection:f}=E.getState();if(!N||!l&&!u)return;if(!l){null==t||t(e.nativeEvent,{nodeId:N,handleId:w,handleType:n}),E.setState({connectionClickStartHandle:{nodeId:N,type:n,id:w}});return}let p=(0,i.oj)(e.target),h=s||a,{connection:m,isValid:v}=i.aQ.isValid(e.nativeEvent,{handle:{nodeId:N,id:w,type:n},connectionMode:r,fromNodeId:l.nodeId,fromHandleId:l.id||null,fromType:l.type,isValidConnection:h,flowId:c,doc:p,lib:d,nodeLookup:g});v&&m&&B(m);let b=structuredClone(f);delete b.inProgress,b.toPosition=b.toHandle?b.toHandle.position:null,null==o||o(e,b),E.setState({connectionClickStartHandle:null})}:void 0,ref:t,...S,children:v})})),eb={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},ey={input:function(e){let{data:t,isConnectable:n,sourcePosition:o=i.yX.Bottom}=e;return(0,l.jsxs)(l.Fragment,{children:[null==t?void 0:t.label,(0,l.jsx)(ev,{type:"source",position:o,isConnectable:n})]})},default:function(e){let{data:t,isConnectable:n,targetPosition:o=i.yX.Top,sourcePosition:r=i.yX.Bottom}=e;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(ev,{type:"target",position:o,isConnectable:n}),null==t?void 0:t.label,(0,l.jsx)(ev,{type:"source",position:r,isConnectable:n})]})},output:function(e){let{data:t,isConnectable:n,targetPosition:o=i.yX.Top}=e;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(ev,{type:"target",position:o,isConnectable:n}),null==t?void 0:t.label]})},group:function(){return null}},ex=e=>{let{width:t,height:n,x:o,y:l}=(0,i.aZ)(e.nodeLookup,{filter:e=>!!e.selected});return{width:(0,i.kf)(t)?t:null,height:(0,i.kf)(n)?n:null,userSelectionActive:e.userSelectionActive,transformString:"translate(".concat(e.transform[0],"px,").concat(e.transform[1],"px) scale(").concat(e.transform[2],") translate(").concat(o,"px,").concat(l,"px)")}};function eS(e){let{onSelectionContextMenu:t,noPanClassName:n,disableKeyboardA11y:o}=e,i=p(),{width:s,height:c,transformString:u,userSelectionActive:g}=f(ex,d.x),h=ef(),m=(0,r.useRef)(null);(0,r.useEffect)(()=>{if(!o){var e;null==(e=m.current)||e.focus({preventScroll:!0})}},[o]);let v=!g&&null!==s&&null!==c;if(eg({nodeRef:m,disabled:!v}),!v)return null;let b=t?e=>{t(e,i.getState().nodes.filter(e=>e.selected))}:void 0;return(0,l.jsx)("div",{className:(0,a.A)(["react-flow__nodesselection","react-flow__container",n]),style:{transform:u},children:(0,l.jsx)("div",{ref:m,className:"react-flow__nodesselection-rect",onContextMenu:b,tabIndex:o?void 0:-1,onKeyDown:o?void 0:e=>{Object.prototype.hasOwnProperty.call(eb,e.key)&&(e.preventDefault(),h({direction:eb[e.key],factor:e.shiftKey?4:1}))},style:{width:s,height:c}})})}let ew="undefined"!=typeof window?window:void 0,eC=e=>({nodesSelectionActive:e.nodesSelectionActive,userSelectionActive:e.userSelectionActive});function eE(e){let{children:t,onPaneClick:n,onPaneMouseEnter:o,onPaneMouseMove:a,onPaneMouseLeave:i,onPaneContextMenu:s,onPaneScroll:c,paneClickDistance:u,deleteKeyCode:g,selectionKeyCode:h,selectionOnDrag:m,selectionMode:v,onSelectionStart:b,onSelectionEnd:y,multiSelectionKeyCode:x,panActivationKeyCode:S,zoomActivationKeyCode:w,elementsSelectable:C,zoomOnScroll:E,zoomOnPinch:N,panOnScroll:k,panOnScrollSpeed:M,panOnScrollMode:P,zoomOnDoubleClick:D,panOnDrag:j,defaultViewport:A,translateExtent:_,minZoom:I,maxZoom:O,preventScrolling:R,onSelectionContextMenu:L,noWheelClassName:z,noPanClassName:B,disableKeyboardA11y:H,onViewportChange:T,isControlledViewport:F}=e,{nodesSelectionActive:Z,userSelectionActive:X}=f(eC,d.x),K=V(h,{target:ew}),W=V(S,{target:ew}),Y=W||j,Q=W||k,U=m&&!0!==Y,G=K||X||U;return!function(e){let{deleteKeyCode:t,multiSelectionKeyCode:n}=e,o=p(),{deleteElements:l}=ee(),a=V(t,{actInsideInputWithModifier:!1}),i=V(n,{target:en});(0,r.useEffect)(()=>{if(a){let{edges:e,nodes:t}=o.getState();l({nodes:t.filter(et),edges:e.filter(et)}),o.setState({nodesSelectionActive:!1})}},[a]),(0,r.useEffect)(()=>{o.setState({multiSelectionActive:i})},[i])}({deleteKeyCode:g,multiSelectionKeyCode:x}),(0,l.jsx)(er,{onPaneContextMenu:s,elementsSelectable:C,zoomOnScroll:E,zoomOnPinch:N,panOnScroll:Q,panOnScrollSpeed:M,panOnScrollMode:P,zoomOnDoubleClick:D,panOnDrag:!K&&Y,defaultViewport:A,translateExtent:_,minZoom:I,maxZoom:O,zoomActivationKeyCode:w,preventScrolling:R,noWheelClassName:z,noPanClassName:B,onViewportChange:T,isControlledViewport:F,paneClickDistance:u,selectionOnDrag:U,children:(0,l.jsxs)(ec,{onSelectionStart:b,onSelectionEnd:y,onPaneClick:n,onPaneMouseEnter:o,onPaneMouseMove:a,onPaneMouseLeave:i,onPaneContextMenu:s,onPaneScroll:c,panOnDrag:Y,isSelecting:!!G,selectionMode:v,selectionKeyPressed:K,paneClickDistance:u,selectionOnDrag:U,children:[t,Z&&(0,l.jsx)(eS,{onSelectionContextMenu:L,noPanClassName:B,disableKeyboardA11y:H})]})})}eE.displayName="FlowRenderer";let eN=(0,r.memo)(eE),ek=e=>e.updateNodeInternals;var eM=(0,r.memo)(function(e){var t,n,o,s,c,u,g,h,m,b,y,x,S;let{id:w,onClick:C,onMouseEnter:E,onMouseMove:N,onMouseLeave:k,onContextMenu:M,onDoubleClick:P,nodesDraggable:D,elementsSelectable:j,nodesConnectable:A,nodesFocusable:_,resizeObserver:I,noDragClassName:O,noPanClassName:R,disableKeyboardA11y:L,rfId:z,nodeTypes:B,nodeClickDistance:V,onError:H}=e,{node:T,internals:F,isParent:Z}=f(e=>{let t=e.nodeLookup.get(w),n=e.parentLookup.has(w);return{node:t,internals:t.internals,isParent:n}},d.x),X=T.type||"default",K=(null==B?void 0:B[X])||ey[X];void 0===K&&(null==H||H("003",i.xc.error003(X)),X="default",K=(null==B?void 0:B.default)||ey.default);let W=!!(T.draggable||D&&void 0===T.draggable),Y=!!(T.selectable||j&&void 0===T.selectable),Q=!!(T.connectable||A&&void 0===T.connectable),U=!!(T.focusable||_&&void 0===T.focusable),G=p(),q=(0,i.QE)(T),$=function(e){let{node:t,nodeType:n,hasDimensions:o,resizeObserver:l}=e,a=p(),i=(0,r.useRef)(null),s=(0,r.useRef)(null),d=(0,r.useRef)(t.sourcePosition),c=(0,r.useRef)(t.targetPosition),u=(0,r.useRef)(n),g=o&&!!t.internals.handleBounds;return(0,r.useEffect)(()=>{!i.current||t.hidden||g&&s.current===i.current||(s.current&&(null==l||l.unobserve(s.current)),null==l||l.observe(i.current),s.current=i.current)},[g,t.hidden]),(0,r.useEffect)(()=>()=>{s.current&&(null==l||l.unobserve(s.current),s.current=null)},[]),(0,r.useEffect)(()=>{if(i.current){let e=u.current!==n,o=d.current!==t.sourcePosition,l=c.current!==t.targetPosition;(e||o||l)&&(u.current=n,d.current=t.sourcePosition,c.current=t.targetPosition,a.getState().updateNodeInternals(new Map([[t.id,{id:t.id,nodeElement:i.current,force:!0}]])))}},[t.id,n,t.sourcePosition,t.targetPosition]),i}({node:T,nodeType:X,hasDimensions:q,resizeObserver:I}),J=eg({nodeRef:$,disabled:T.hidden||!W,noDragClassName:O,handleSelector:T.dragHandle,nodeId:w,isSelectable:Y,nodeClickDistance:V}),ee=ef();if(T.hidden)return null;let et=(0,i.uD)(T),en=void 0===T.internals.handleBounds?{width:null!=(m=null!=(h=T.width)?h:T.initialWidth)?m:null==(u=T.style)?void 0:u.width,height:null!=(y=null!=(b=T.height)?b:T.initialHeight)?y:null==(g=T.style)?void 0:g.height}:{width:null!=(x=T.width)?x:null==(s=T.style)?void 0:s.width,height:null!=(S=T.height)?S:null==(c=T.style)?void 0:c.height},eo=Y||W||C||E||N||k,el=E?e=>E(e,{...F.userNode}):void 0,er=N?e=>N(e,{...F.userNode}):void 0,ea=k?e=>k(e,{...F.userNode}):void 0,ei=M?e=>M(e,{...F.userNode}):void 0,es=P?e=>P(e,{...F.userNode}):void 0;return(0,l.jsx)("div",{className:(0,a.A)(["react-flow__node","react-flow__node-".concat(X),{[R]:W},T.className,{selected:T.selected,selectable:Y,parent:Z,draggable:W,dragging:J}]),ref:$,style:{zIndex:F.z,transform:"translate(".concat(F.positionAbsolute.x,"px,").concat(F.positionAbsolute.y,"px)"),pointerEvents:eo?"all":"none",visibility:q?"visible":"hidden",...T.style,...en},"data-id":w,"data-testid":"rf__node-".concat(w),onMouseEnter:el,onMouseMove:er,onMouseLeave:ea,onContextMenu:ei,onClick:e=>{let{selectNodesOnDrag:t,nodeDragThreshold:n}=G.getState();Y&&(!t||!W||n>0)&&eu({id:w,store:G,nodeRef:$}),C&&C(e,{...F.userNode})},onDoubleClick:es,onKeyDown:U?e=>{if(!(0,i.v5)(e.nativeEvent)&&!L){if(i.tn.includes(e.key)&&Y)eu({id:w,store:G,unselect:"Escape"===e.key,nodeRef:$});else if(W&&T.selected&&Object.prototype.hasOwnProperty.call(eb,e.key)){e.preventDefault();let{ariaLabelConfig:t}=G.getState();G.setState({ariaLiveMessage:t["node.a11yDescription.ariaLiveMessage"]({direction:e.key.replace("Arrow","").toLowerCase(),x:~~F.positionAbsolute.x,y:~~F.positionAbsolute.y})}),ee({direction:eb[e.key],factor:e.shiftKey?4:1})}}}:void 0,tabIndex:U?0:void 0,onFocus:U?()=>{var e;if(L||!(null==(e=$.current)?void 0:e.matches(":focus-visible")))return;let{transform:t,width:n,height:o,autoPanOnNodeFocus:l,setCenter:r}=G.getState();l&&((0,i.U$)(new Map([[w,T]]),{x:0,y:0,width:n,height:o},t,!0).length>0||r(T.position.x+et.width/2,T.position.y+et.height/2,{zoom:t[2]}))}:void 0,role:null!=(t=T.ariaRole)?t:U?"group":void 0,"aria-roledescription":"node","aria-describedby":L?void 0:"".concat(v,"-").concat(z),"aria-label":T.ariaLabel,...T.domAttributes,children:(0,l.jsx)(eh,{value:w,children:(0,l.jsx)(K,{id:w,data:T.data,type:X,positionAbsoluteX:F.positionAbsolute.x,positionAbsoluteY:F.positionAbsolute.y,selected:null!=(n=T.selected)&&n,selectable:Y,draggable:W,deletable:null==(o=T.deletable)||o,isConnectable:Q,sourcePosition:T.sourcePosition,targetPosition:T.targetPosition,dragging:J,dragHandle:T.dragHandle,zIndex:F.z,parentId:T.parentId,...et})})})});let eP=e=>({nodesDraggable:e.nodesDraggable,nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,onError:e.onError});function eD(e){var t;let{nodesDraggable:n,nodesConnectable:o,nodesFocusable:a,elementsSelectable:s,onError:c}=f(eP,d.x),u=(t=e.onlyRenderVisibleElements,f((0,r.useCallback)(e=>t?(0,i.U$)(e.nodeLookup,{x:0,y:0,width:e.width,height:e.height},e.transform,!0).map(e=>e.id):Array.from(e.nodeLookup.keys()),[t]),d.x)),g=function(){let e=f(ek),[t]=(0,r.useState)(()=>"undefined"==typeof ResizeObserver?null:new ResizeObserver(t=>{let n=new Map;t.forEach(e=>{let t=e.target.getAttribute("data-id");n.set(t,{id:t,nodeElement:e.target,force:!0})}),e(n)}));return(0,r.useEffect)(()=>()=>{null==t||t.disconnect()},[t]),t}();return(0,l.jsx)("div",{className:"react-flow__nodes",style:eo,children:u.map(t=>(0,l.jsx)(eM,{id:t,nodeTypes:e.nodeTypes,nodeExtent:e.nodeExtent,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,resizeObserver:g,nodesDraggable:n,nodesConnectable:o,nodesFocusable:a,elementsSelectable:s,nodeClickDistance:e.nodeClickDistance,onError:c},t))})}eD.displayName="NodeRenderer";let ej=(0,r.memo)(eD),eA={[i.TG.Arrow]:e=>{let{color:t="none",strokeWidth:n=1}=e,o={strokeWidth:n,...t&&{stroke:t}};return(0,l.jsx)("polyline",{className:"arrow",style:o,strokeLinecap:"round",fill:"none",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4"})},[i.TG.ArrowClosed]:e=>{let{color:t="none",strokeWidth:n=1}=e,o={strokeWidth:n,...t&&{stroke:t,fill:t}};return(0,l.jsx)("polyline",{className:"arrowclosed",style:o,strokeLinecap:"round",strokeLinejoin:"round",points:"-5,-4 0,0 -5,4 -5,-4"})}},e_=e=>{let{id:t,type:n,color:o,width:a=12.5,height:s=12.5,markerUnits:d="strokeWidth",strokeWidth:c,orient:u="auto-start-reverse"}=e,g=function(e){let t=p();return(0,r.useMemo)(()=>{if(!Object.prototype.hasOwnProperty.call(eA,e)){var n,o;return null==(n=(o=t.getState()).onError)||n.call(o,"009",i.xc.error009(e)),null}return eA[e]},[e])}(n);return g?(0,l.jsx)("marker",{className:"react-flow__arrowhead",id:t,markerWidth:"".concat(a),markerHeight:"".concat(s),viewBox:"-10 -10 20 20",markerUnits:d,orient:u,refX:"0",refY:"0",children:(0,l.jsx)(g,{color:o,strokeWidth:c})}):null},eI=e=>{let{defaultColor:t,rfId:n}=e,o=f(e=>e.edges),a=f(e=>e.defaultEdgeOptions),s=(0,r.useMemo)(()=>(0,i.Hm)(o,{id:n,defaultColor:t,defaultMarkerStart:null==a?void 0:a.markerStart,defaultMarkerEnd:null==a?void 0:a.markerEnd}),[o,a,n,t]);return s.length?(0,l.jsx)("svg",{className:"react-flow__marker","aria-hidden":"true",children:(0,l.jsx)("defs",{children:s.map(e=>(0,l.jsx)(e_,{id:e.id,type:e.type,color:e.color,width:e.width,height:e.height,markerUnits:e.markerUnits,strokeWidth:e.strokeWidth,orient:e.orient},e.id))})}):null};eI.displayName="MarkerDefinitions";var eO=(0,r.memo)(eI);function eR(e){let{x:t,y:n,label:o,labelStyle:i,labelShowBg:s=!0,labelBgStyle:d,labelBgPadding:c=[2,4],labelBgBorderRadius:u=2,children:g,className:f,...p}=e,[h,m]=(0,r.useState)({x:1,y:0,width:0,height:0}),v=(0,a.A)(["react-flow__edge-textwrapper",f]),b=(0,r.useRef)(null);return((0,r.useEffect)(()=>{if(b.current){let e=b.current.getBBox();m({x:e.x,y:e.y,width:e.width,height:e.height})}},[o]),o)?(0,l.jsxs)("g",{transform:"translate(".concat(t-h.width/2," ").concat(n-h.height/2,")"),className:v,visibility:h.width?"visible":"hidden",...p,children:[s&&(0,l.jsx)("rect",{width:h.width+2*c[0],x:-c[0],y:-c[1],height:h.height+2*c[1],className:"react-flow__edge-textbg",style:d,rx:u,ry:u}),(0,l.jsx)("text",{className:"react-flow__edge-text",y:h.height/2,dy:"0.3em",ref:b,style:i,children:o}),g]}):null}eR.displayName="EdgeText";let eL=(0,r.memo)(eR);function ez(e){let{path:t,labelX:n,labelY:o,label:r,labelStyle:s,labelShowBg:d,labelBgStyle:c,labelBgPadding:u,labelBgBorderRadius:g,interactionWidth:f=20,...p}=e;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("path",{...p,d:t,fill:"none",className:(0,a.A)(["react-flow__edge-path",p.className])}),f?(0,l.jsx)("path",{d:t,fill:"none",strokeOpacity:0,strokeWidth:f,className:"react-flow__edge-interaction"}):null,r&&(0,i.kf)(n)&&(0,i.kf)(o)?(0,l.jsx)(eL,{x:n,y:o,label:r,labelStyle:s,labelShowBg:d,labelBgStyle:c,labelBgPadding:u,labelBgBorderRadius:g}):null]})}function eB(e){let{pos:t,x1:n,y1:o,x2:l,y2:r}=e;return t===i.yX.Left||t===i.yX.Right?[.5*(n+l),o]:[n,.5*(o+r)]}function eV(e){let{sourceX:t,sourceY:n,sourcePosition:o=i.yX.Bottom,targetX:l,targetY:r,targetPosition:a=i.yX.Top}=e,[s,d]=eB({pos:o,x1:t,y1:n,x2:l,y2:r}),[c,u]=eB({pos:a,x1:l,y1:r,x2:t,y2:n}),[g,f,p,h]=(0,i.e_)({sourceX:t,sourceY:n,targetX:l,targetY:r,sourceControlX:s,sourceControlY:d,targetControlX:c,targetControlY:u});return["M".concat(t,",").concat(n," C").concat(s,",").concat(d," ").concat(c,",").concat(u," ").concat(l,",").concat(r),g,f,p,h]}function eH(e){return(0,r.memo)(t=>{let{id:n,sourceX:o,sourceY:r,targetX:a,targetY:i,sourcePosition:s,targetPosition:d,label:c,labelStyle:u,labelShowBg:g,labelBgStyle:f,labelBgPadding:p,labelBgBorderRadius:h,style:m,markerEnd:v,markerStart:b,interactionWidth:y}=t,[x,S,w]=eV({sourceX:o,sourceY:r,sourcePosition:s,targetX:a,targetY:i,targetPosition:d}),C=e.isInternal?void 0:n;return(0,l.jsx)(ez,{id:C,path:x,labelX:S,labelY:w,label:c,labelStyle:u,labelShowBg:g,labelBgStyle:f,labelBgPadding:p,labelBgBorderRadius:h,style:m,markerEnd:v,markerStart:b,interactionWidth:y})})}let eT=eH({isInternal:!1}),eF=eH({isInternal:!0});function eZ(e){return(0,r.memo)(t=>{let{id:n,sourceX:o,sourceY:r,targetX:a,targetY:s,label:d,labelStyle:c,labelShowBg:u,labelBgStyle:g,labelBgPadding:f,labelBgBorderRadius:p,style:h,sourcePosition:m=i.yX.Bottom,targetPosition:v=i.yX.Top,markerEnd:b,markerStart:y,pathOptions:x,interactionWidth:S}=t,[w,C,E]=(0,i.oN)({sourceX:o,sourceY:r,sourcePosition:m,targetX:a,targetY:s,targetPosition:v,borderRadius:null==x?void 0:x.borderRadius,offset:null==x?void 0:x.offset,stepPosition:null==x?void 0:x.stepPosition}),N=e.isInternal?void 0:n;return(0,l.jsx)(ez,{id:N,path:w,labelX:C,labelY:E,label:d,labelStyle:c,labelShowBg:u,labelBgStyle:g,labelBgPadding:f,labelBgBorderRadius:p,style:h,markerEnd:b,markerStart:y,interactionWidth:S})})}eT.displayName="SimpleBezierEdge",eF.displayName="SimpleBezierEdgeInternal";let eX=eZ({isInternal:!1}),eK=eZ({isInternal:!0});function eW(e){return(0,r.memo)(t=>{var n;let{id:o,...a}=t,i=e.isInternal?void 0:o;return(0,l.jsx)(eX,{...a,id:i,pathOptions:(0,r.useMemo)(()=>{var e;return{borderRadius:0,offset:null==(e=a.pathOptions)?void 0:e.offset}},[null==(n=a.pathOptions)?void 0:n.offset])})})}eX.displayName="SmoothStepEdge",eK.displayName="SmoothStepEdgeInternal";let eY=eW({isInternal:!1}),eQ=eW({isInternal:!0});function eU(e){return(0,r.memo)(t=>{let{id:n,sourceX:o,sourceY:r,targetX:a,targetY:s,label:d,labelStyle:c,labelShowBg:u,labelBgStyle:g,labelBgPadding:f,labelBgBorderRadius:p,style:h,markerEnd:m,markerStart:v,interactionWidth:b}=t,[y,x,S]=(0,i.ah)({sourceX:o,sourceY:r,targetX:a,targetY:s}),w=e.isInternal?void 0:n;return(0,l.jsx)(ez,{id:w,path:y,labelX:x,labelY:S,label:d,labelStyle:c,labelShowBg:u,labelBgStyle:g,labelBgPadding:f,labelBgBorderRadius:p,style:h,markerEnd:m,markerStart:v,interactionWidth:b})})}eY.displayName="StepEdge",eQ.displayName="StepEdgeInternal";let eG=eU({isInternal:!1}),eq=eU({isInternal:!0});function e$(e){return(0,r.memo)(t=>{let{id:n,sourceX:o,sourceY:r,targetX:a,targetY:s,sourcePosition:d=i.yX.Bottom,targetPosition:c=i.yX.Top,label:u,labelStyle:g,labelShowBg:f,labelBgStyle:p,labelBgPadding:h,labelBgBorderRadius:m,style:v,markerEnd:b,markerStart:y,pathOptions:x,interactionWidth:S}=t,[w,C,E]=(0,i.Fp)({sourceX:o,sourceY:r,sourcePosition:d,targetX:a,targetY:s,targetPosition:c,curvature:null==x?void 0:x.curvature}),N=e.isInternal?void 0:n;return(0,l.jsx)(ez,{id:N,path:w,labelX:C,labelY:E,label:u,labelStyle:g,labelShowBg:f,labelBgStyle:p,labelBgPadding:h,labelBgBorderRadius:m,style:v,markerEnd:b,markerStart:y,interactionWidth:S})})}eG.displayName="StraightEdge",eq.displayName="StraightEdgeInternal";let eJ=e$({isInternal:!1}),e0=e$({isInternal:!0});eJ.displayName="BezierEdge",e0.displayName="BezierEdgeInternal";let e1={default:e0,straight:eq,step:eQ,smoothstep:eK,simplebezier:eF},e3={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null},e2="react-flow__edgeupdater";function e4(e){let{position:t,centerX:n,centerY:o,radius:r=10,onMouseDown:s,onMouseEnter:d,onMouseOut:c,type:u}=e;return(0,l.jsx)("circle",{onMouseDown:s,onMouseEnter:d,onMouseOut:c,className:(0,a.A)([e2,"".concat(e2,"-").concat(u)]),cx:t===i.yX.Left?n-r:t===i.yX.Right?n+r:n,cy:t===i.yX.Top?o-r:t===i.yX.Bottom?o+r:o,r:r,stroke:"transparent",fill:"transparent"})}function e5(e){let{isReconnectable:t,reconnectRadius:n,edge:o,sourceX:r,sourceY:a,targetX:s,targetY:d,sourcePosition:c,targetPosition:u,onReconnect:g,onReconnectStart:f,onReconnectEnd:h,setReconnecting:m,setUpdateHover:v}=e,b=p(),y=(e,t)=>{if(0!==e.button)return;let{autoPanOnConnect:n,domNode:l,connectionMode:r,connectionRadius:a,lib:s,onConnectStart:d,cancelConnection:c,nodeLookup:u,rfId:p,panBy:v,updateConnection:y}=b.getState(),x="target"===t.type;i.aQ.onPointerDown(e.nativeEvent,{autoPanOnConnect:n,connectionMode:r,connectionRadius:a,domNode:l,handleId:t.id,nodeId:t.nodeId,nodeLookup:u,isTarget:x,edgeUpdaterType:t.type,lib:s,flowId:p,cancelConnection:c,panBy:v,isValidConnection:function(){for(var e,t,n,o=arguments.length,l=Array(o),r=0;r<o;r++)l[r]=arguments[r];return null==(n=null==(e=(t=b.getState()).isValidConnection)?void 0:e.call(t,...l))||n},onConnect:e=>null==g?void 0:g(o,e),onConnectStart:(n,l)=>{m(!0),null==f||f(e,o,t.type),null==d||d(n,l)},onConnectEnd:function(){for(var e,t,n=arguments.length,o=Array(n),l=0;l<n;l++)o[l]=arguments[l];return null==(e=(t=b.getState()).onConnectEnd)?void 0:e.call(t,...o)},onReconnectEnd:(e,n)=>{m(!1),null==h||h(e,o,t.type,n)},updateConnection:y,getTransform:()=>b.getState().transform,getFromHandle:()=>b.getState().connection.fromHandle,dragThreshold:b.getState().connectionDragThreshold,handleDomNode:e.currentTarget})},x=()=>v(!0),S=()=>v(!1);return(0,l.jsxs)(l.Fragment,{children:[(!0===t||"source"===t)&&(0,l.jsx)(e4,{position:c,centerX:r,centerY:a,radius:n,onMouseDown:e=>{var t;return y(e,{nodeId:o.target,id:null!=(t=o.targetHandle)?t:null,type:"target"})},onMouseEnter:x,onMouseOut:S,type:"source"}),(!0===t||"target"===t)&&(0,l.jsx)(e4,{position:u,centerX:s,centerY:d,radius:n,onMouseDown:e=>{var t;return y(e,{nodeId:o.source,id:null!=(t=o.sourceHandle)?t:null,type:"source"})},onMouseEnter:x,onMouseOut:S,type:"target"})]})}var e6=(0,r.memo)(function(e){var t,n;let{id:o,edgesFocusable:s,edgesReconnectable:c,elementsSelectable:u,onClick:g,onDoubleClick:h,onContextMenu:m,onMouseEnter:v,onMouseMove:y,onMouseLeave:x,reconnectRadius:S,onReconnect:w,onReconnectStart:C,onReconnectEnd:E,rfId:N,edgeTypes:k,noPanClassName:M,onError:P,disableKeyboardA11y:D}=e,j=f(e=>e.edgeLookup.get(o)),A=f(e=>e.defaultEdgeOptions),_=(j=A?{...A,...j}:j).type||"default",I=(null==k?void 0:k[_])||e1[_];void 0===I&&(null==P||P("011",i.xc.error011(_)),_="default",I=(null==k?void 0:k.default)||e1.default);let O=!!(j.focusable||s&&void 0===j.focusable),R=void 0!==w&&(j.reconnectable||c&&void 0===j.reconnectable),L=!!(j.selectable||u&&void 0===j.selectable),z=(0,r.useRef)(null),[B,V]=(0,r.useState)(!1),[H,T]=(0,r.useState)(!1),F=p(),{zIndex:Z,sourceX:X,sourceY:K,targetX:W,targetY:Y,sourcePosition:Q,targetPosition:U}=f((0,r.useCallback)(e=>{let t=e.nodeLookup.get(j.source),n=e.nodeLookup.get(j.target);if(!t||!n)return{zIndex:j.zIndex,...e3};let l=(0,i.b5)({id:o,sourceNode:t,targetNode:n,sourceHandle:j.sourceHandle||null,targetHandle:j.targetHandle||null,connectionMode:e.connectionMode,onError:P});return{zIndex:(0,i.qX)({selected:j.selected,zIndex:j.zIndex,sourceNode:t,targetNode:n,elevateOnSelect:e.elevateEdgesOnSelect,zIndexMode:e.zIndexMode}),...l||e3}},[j.source,j.target,j.sourceHandle,j.targetHandle,j.selected,j.zIndex]),d.x),G=(0,r.useMemo)(()=>j.markerStart?"url('#".concat((0,i.aW)(j.markerStart,N),"')"):void 0,[j.markerStart,N]),q=(0,r.useMemo)(()=>j.markerEnd?"url('#".concat((0,i.aW)(j.markerEnd,N),"')"):void 0,[j.markerEnd,N]);if(j.hidden||null===X||null===K||null===W||null===Y)return null;let $=h?e=>{h(e,{...j})}:void 0,J=m?e=>{m(e,{...j})}:void 0,ee=v?e=>{v(e,{...j})}:void 0,et=y?e=>{y(e,{...j})}:void 0,en=x?e=>{x(e,{...j})}:void 0;return(0,l.jsx)("svg",{style:{zIndex:Z},children:(0,l.jsxs)("g",{className:(0,a.A)(["react-flow__edge","react-flow__edge-".concat(_),j.className,M,{selected:j.selected,animated:j.animated,inactive:!L&&!g,updating:B,selectable:L}]),onClick:e=>{let{addSelectedEdges:t,unselectNodesAndEdges:n,multiSelectionActive:l}=F.getState();if(L)if(F.setState({nodesSelectionActive:!1}),j.selected&&l){var r;n({nodes:[],edges:[j]}),null==(r=z.current)||r.blur()}else t([o]);g&&g(e,j)},onDoubleClick:$,onContextMenu:J,onMouseEnter:ee,onMouseMove:et,onMouseLeave:en,onKeyDown:O?e=>{if(!D&&i.tn.includes(e.key)&&L){let{unselectNodesAndEdges:n,addSelectedEdges:l}=F.getState();if("Escape"===e.key){var t;null==(t=z.current)||t.blur(),n({edges:[j]})}else l([o])}}:void 0,tabIndex:O?0:void 0,role:null!=(t=j.ariaRole)?t:O?"group":"img","aria-roledescription":"edge","data-id":o,"data-testid":"rf__edge-".concat(o),"aria-label":null===j.ariaLabel?void 0:j.ariaLabel||"Edge from ".concat(j.source," to ").concat(j.target),"aria-describedby":O?"".concat(b,"-").concat(N):void 0,ref:z,...j.domAttributes,children:[!H&&(0,l.jsx)(I,{id:o,source:j.source,target:j.target,type:j.type,selected:j.selected,animated:j.animated,selectable:L,deletable:null==(n=j.deletable)||n,label:j.label,labelStyle:j.labelStyle,labelShowBg:j.labelShowBg,labelBgStyle:j.labelBgStyle,labelBgPadding:j.labelBgPadding,labelBgBorderRadius:j.labelBgBorderRadius,sourceX:X,sourceY:K,targetX:W,targetY:Y,sourcePosition:Q,targetPosition:U,data:j.data,style:j.style,sourceHandleId:j.sourceHandle,targetHandleId:j.targetHandle,markerStart:G,markerEnd:q,pathOptions:"pathOptions"in j?j.pathOptions:void 0,interactionWidth:j.interactionWidth}),R&&(0,l.jsx)(e5,{edge:j,isReconnectable:R,reconnectRadius:S,onReconnect:w,onReconnectStart:C,onReconnectEnd:E,sourceX:X,sourceY:K,targetX:W,targetY:Y,sourcePosition:Q,targetPosition:U,setUpdateHover:V,setReconnecting:T})]})})});let e7=e=>({edgesFocusable:e.edgesFocusable,edgesReconnectable:e.edgesReconnectable,elementsSelectable:e.elementsSelectable,connectionMode:e.connectionMode,onError:e.onError});function e8(e){let{defaultMarkerColor:t,onlyRenderVisibleElements:n,rfId:o,edgeTypes:a,noPanClassName:s,onReconnect:c,onEdgeContextMenu:u,onEdgeMouseEnter:g,onEdgeMouseMove:p,onEdgeMouseLeave:h,onEdgeClick:m,reconnectRadius:v,onEdgeDoubleClick:b,onReconnectStart:y,onReconnectEnd:x,disableKeyboardA11y:S}=e,{edgesFocusable:w,edgesReconnectable:C,elementsSelectable:E,onError:N}=f(e7,d.x),k=f((0,r.useCallback)(e=>{if(!n)return e.edges.map(e=>e.id);let t=[];if(e.width&&e.height)for(let n of e.edges){let o=e.nodeLookup.get(n.source),l=e.nodeLookup.get(n.target);o&&l&&(0,i.uj)({sourceNode:o,targetNode:l,width:e.width,height:e.height,transform:e.transform})&&t.push(n.id)}return t},[n]),d.x);return(0,l.jsxs)("div",{className:"react-flow__edges",children:[(0,l.jsx)(eO,{defaultColor:t,rfId:o}),k.map(e=>(0,l.jsx)(e6,{id:e,edgesFocusable:w,edgesReconnectable:C,elementsSelectable:E,noPanClassName:s,onReconnect:c,onContextMenu:u,onMouseEnter:g,onMouseMove:p,onMouseLeave:h,onClick:m,reconnectRadius:v,onDoubleClick:b,onReconnectStart:y,onReconnectEnd:x,rfId:o,onError:N,edgeTypes:a,disableKeyboardA11y:S},e))]})}e8.displayName="EdgeRenderer";let e9=(0,r.memo)(e8),te=e=>"translate(".concat(e.transform[0],"px,").concat(e.transform[1],"px) scale(").concat(e.transform[2],")");function tt(e){let{children:t}=e,n=f(te);return(0,l.jsx)("div",{className:"react-flow__viewport xyflow__viewport react-flow__container",style:{transform:n},children:t})}let tn=e=>{var t;return null==(t=e.panZoom)?void 0:t.syncViewport};function to(e){return e.connection.inProgress?{...e.connection,to:(0,i.Ff)(e.connection.to,e.transform)}:{...e.connection}}let tl=e=>({nodesConnectable:e.nodesConnectable,isValid:e.connection.isValid,inProgress:e.connection.inProgress,width:e.width,height:e.height});function tr(e){let{containerStyle:t,style:n,type:o,component:r}=e,{nodesConnectable:s,width:c,height:u,isValid:g,inProgress:p}=f(tl,d.x);return c&&s&&p?(0,l.jsx)("svg",{style:t,width:c,height:u,className:"react-flow__connectionline react-flow__container",children:(0,l.jsx)("g",{className:(0,a.A)(["react-flow__connection",(0,i.HF)(g)]),children:(0,l.jsx)(ta,{style:n,type:o,CustomComponent:r,isValid:g})})}):null}let ta=e=>{let{style:t,type:n=i.Do.Bezier,CustomComponent:o,isValid:r}=e,{inProgress:a,from:s,fromNode:c,fromHandle:u,fromPosition:g,to:p,toNode:h,toHandle:m,toPosition:v,pointer:b}=function(e){return f(to,d.x)}();if(!a)return;if(o)return(0,l.jsx)(o,{connectionLineType:n,connectionLineStyle:t,fromNode:c,fromHandle:u,fromX:s.x,fromY:s.y,toX:p.x,toY:p.y,fromPosition:g,toPosition:v,connectionStatus:(0,i.HF)(r),toNode:h,toHandle:m,pointer:b});let y="",x={sourceX:s.x,sourceY:s.y,sourcePosition:g,targetX:p.x,targetY:p.y,targetPosition:v};switch(n){case i.Do.Bezier:[y]=(0,i.Fp)(x);break;case i.Do.SimpleBezier:[y]=eV(x);break;case i.Do.Step:[y]=(0,i.oN)({...x,borderRadius:0});break;case i.Do.SmoothStep:[y]=(0,i.oN)(x);break;default:[y]=(0,i.ah)(x)}return(0,l.jsx)("path",{d:y,fill:"none",className:"react-flow__connection-path",style:t})};ta.displayName="ConnectionLine";let ti={};function ts(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ti;(0,r.useRef)(e),p(),(0,r.useEffect)(()=>{},[e])}function td(e){let{nodeTypes:t,edgeTypes:n,onInit:o,onNodeClick:a,onEdgeClick:i,onNodeDoubleClick:s,onEdgeDoubleClick:d,onNodeMouseEnter:c,onNodeMouseMove:u,onNodeMouseLeave:g,onNodeContextMenu:h,onSelectionContextMenu:m,onSelectionStart:v,onSelectionEnd:b,connectionLineType:y,connectionLineStyle:x,connectionLineComponent:S,connectionLineContainerStyle:w,selectionKeyCode:C,selectionOnDrag:E,selectionMode:N,multiSelectionKeyCode:k,panActivationKeyCode:M,zoomActivationKeyCode:P,deleteKeyCode:D,onlyRenderVisibleElements:j,elementsSelectable:A,defaultViewport:_,translateExtent:I,minZoom:O,maxZoom:R,preventScrolling:L,defaultMarkerColor:z,zoomOnScroll:B,zoomOnPinch:V,panOnScroll:H,panOnScrollSpeed:T,panOnScrollMode:F,zoomOnDoubleClick:Z,panOnDrag:X,onPaneClick:K,onPaneMouseEnter:W,onPaneMouseMove:Y,onPaneMouseLeave:Q,onPaneScroll:U,onPaneContextMenu:G,paneClickDistance:q,nodeClickDistance:$,onEdgeContextMenu:J,onEdgeMouseEnter:et,onEdgeMouseMove:en,onEdgeMouseLeave:eo,reconnectRadius:el,onReconnect:er,onReconnectStart:ea,onReconnectEnd:ei,noDragClassName:es,noWheelClassName:ed,noPanClassName:ec,disableKeyboardA11y:eu,nodeExtent:eg,rfId:ef,viewport:ep,onViewportChange:eh}=e;ts(t),ts(n),p(),(0,r.useRef)(!1),(0,r.useEffect)(()=>{},[]);let em=ee(),ev=(0,r.useRef)(!1);return(0,r.useEffect)(()=>{!ev.current&&em.viewportInitialized&&o&&(setTimeout(()=>o(em),1),ev.current=!0)},[o,em.viewportInitialized]),!function(e){let t=f(tn),n=p();(0,r.useEffect)(()=>{e&&(null==t||t(e),n.setState({transform:[e.x,e.y,e.zoom]}))},[e,t])}(ep),(0,l.jsx)(eN,{onPaneClick:K,onPaneMouseEnter:W,onPaneMouseMove:Y,onPaneMouseLeave:Q,onPaneContextMenu:G,onPaneScroll:U,paneClickDistance:q,deleteKeyCode:D,selectionKeyCode:C,selectionOnDrag:E,selectionMode:N,onSelectionStart:v,onSelectionEnd:b,multiSelectionKeyCode:k,panActivationKeyCode:M,zoomActivationKeyCode:P,elementsSelectable:A,zoomOnScroll:B,zoomOnPinch:V,zoomOnDoubleClick:Z,panOnScroll:H,panOnScrollSpeed:T,panOnScrollMode:F,panOnDrag:X,defaultViewport:_,translateExtent:I,minZoom:O,maxZoom:R,onSelectionContextMenu:m,preventScrolling:L,noDragClassName:es,noWheelClassName:ed,noPanClassName:ec,disableKeyboardA11y:eu,onViewportChange:eh,isControlledViewport:!!ep,children:(0,l.jsxs)(tt,{children:[(0,l.jsx)(e9,{edgeTypes:n,onEdgeClick:i,onEdgeDoubleClick:d,onReconnect:er,onReconnectStart:ea,onReconnectEnd:ei,onlyRenderVisibleElements:j,onEdgeContextMenu:J,onEdgeMouseEnter:et,onEdgeMouseMove:en,onEdgeMouseLeave:eo,reconnectRadius:el,defaultMarkerColor:z,noPanClassName:ec,disableKeyboardA11y:eu,rfId:ef}),(0,l.jsx)(tr,{style:x,type:y,component:S,containerStyle:w}),(0,l.jsx)("div",{className:"react-flow__edgelabel-renderer"}),(0,l.jsx)(ej,{nodeTypes:t,onNodeClick:a,onNodeDoubleClick:s,onNodeMouseEnter:c,onNodeMouseMove:u,onNodeMouseLeave:g,onNodeContextMenu:h,nodeClickDistance:$,onlyRenderVisibleElements:j,noPanClassName:ec,noDragClassName:es,disableKeyboardA11y:eu,nodeExtent:eg,rfId:ef}),(0,l.jsx)("div",{className:"react-flow__viewport-portal"})]})})}td.displayName="GraphView";let tc=(0,r.memo)(td),tu=function(){var e,t,n;let{nodes:o,edges:l,defaultNodes:r,defaultEdges:a,width:s,height:d,fitView:c,fitViewOptions:u,minZoom:g=.5,maxZoom:f=2,nodeOrigin:p,nodeExtent:h,zIndexMode:m="basic"}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},v=new Map,b=new Map,y=new Map,x=new Map,S=null!=(e=null!=a?a:l)?e:[],w=null!=(t=null!=r?r:o)?t:[],C=null!=p?p:[0,0],E=null!=h?h:i.ZO;(0,i.qn)(y,x,S);let N=(0,i.bi)(w,v,b,{nodeOrigin:C,nodeExtent:E,zIndexMode:m}),k=[0,0,1];if(c&&s&&d){let e=(0,i.aZ)(v,{filter:e=>!!((e.width||e.initialWidth)&&(e.height||e.initialHeight))}),{x:t,y:o,zoom:l}=(0,i.R4)(e,s,d,g,f,null!=(n=null==u?void 0:u.padding)?n:.1);k=[t,o,l]}return{rfId:"1",width:null!=s?s:0,height:null!=d?d:0,transform:k,nodes:w,nodesInitialized:N,nodeLookup:v,parentLookup:b,edges:S,edgeLookup:x,connectionLookup:y,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:void 0!==r,hasDefaultEdges:void 0!==a,panZoom:null,minZoom:g,maxZoom:f,translateExtent:i.ZO,nodeExtent:E,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:i.WZ.Strict,domNode:null,paneDragging:!1,noPanClassName:"nopan",nodeOrigin:C,nodeDragThreshold:1,connectionDragThreshold:1,snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesReconnectable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,elevateEdgesOnSelect:!0,selectNodesOnDrag:!0,multiSelectionActive:!1,fitViewQueued:null!=c&&c,fitViewOptions:u,fitViewResolver:null,connection:{...i.bK},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:"",autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:i.KE,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:"react",debug:!1,ariaLabelConfig:i.tM,zIndexMode:m,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map}};function tg(e){let{initialNodes:t,initialEdges:n,defaultNodes:o,defaultEdges:a,initialWidth:d,initialHeight:c,initialMinZoom:g,initialMaxZoom:f,initialFitViewOptions:p,fitView:h,nodeOrigin:m,nodeExtent:v,zIndexMode:b,children:y}=e,[x]=(0,r.useState)(()=>(e=>{let{nodes:t,edges:n,defaultNodes:o,defaultEdges:l,width:r,height:a,fitView:d,fitViewOptions:c,minZoom:u,maxZoom:g,nodeOrigin:f,nodeExtent:p,zIndexMode:h}=e;return(0,s.h)((e,s)=>{async function m(){let{nodeLookup:t,panZoom:n,fitViewOptions:o,fitViewResolver:l,width:r,height:a,minZoom:d,maxZoom:c}=s();n&&(await (0,i.IO)({nodes:t,width:r,height:a,panZoom:n,minZoom:d,maxZoom:c},o),null==l||l.resolve(!0),e({fitViewResolver:null}))}return{...tu({nodes:t,edges:n,width:r,height:a,fitView:d,fitViewOptions:c,minZoom:u,maxZoom:g,nodeOrigin:f,nodeExtent:p,defaultNodes:o,defaultEdges:l,zIndexMode:h}),setNodes:t=>{let{nodeLookup:n,parentLookup:o,nodeOrigin:l,elevateNodesOnSelect:r,fitViewQueued:a,zIndexMode:d}=s(),c=(0,i.bi)(t,n,o,{nodeOrigin:l,nodeExtent:p,elevateNodesOnSelect:r,checkEquality:!0,zIndexMode:d});a&&c?(m(),e({nodes:t,nodesInitialized:c,fitViewQueued:!1,fitViewOptions:void 0})):e({nodes:t,nodesInitialized:c})},setEdges:t=>{let{connectionLookup:n,edgeLookup:o}=s();(0,i.qn)(n,o,t),e({edges:t})},setDefaultNodesAndEdges:(t,n)=>{if(t){let{setNodes:n}=s();n(t),e({hasDefaultNodes:!0})}if(n){let{setEdges:t}=s();t(n),e({hasDefaultEdges:!0})}},updateNodeInternals:t=>{let{triggerNodeChanges:n,nodeLookup:o,parentLookup:l,domNode:r,nodeOrigin:a,nodeExtent:d,debug:c,fitViewQueued:u,zIndexMode:g}=s(),{changes:f,updatedInternals:p}=(0,i.uL)(t,o,l,r,a,d,g);p&&((0,i.vS)(o,l,{nodeOrigin:a,nodeExtent:d,zIndexMode:g}),u?(m(),e({fitViewQueued:!1,fitViewOptions:void 0})):e({}),(null==f?void 0:f.length)>0&&(c&&console.log("React Flow: trigger node changes",f),null==n||n(f)))},updateNodePositions:function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],o=[],{nodeLookup:l,triggerNodeChanges:r,connection:a,updateConnection:d,onNodesChangeMiddlewareMap:c}=s();for(let[r,s]of e){let e=l.get(r),c=!!((null==e?void 0:e.expandParent)&&(null==e?void 0:e.parentId)&&(null==s?void 0:s.position)),f={id:r,type:"position",position:c?{x:Math.max(0,s.position.x),y:Math.max(0,s.position.y)}:s.position,dragging:t};if(e&&a.inProgress&&a.fromNode.id===e.id){let t=(0,i.M_)(e,a.fromHandle,i.yX.Left,!0);d({...a,from:t})}if(c&&e.parentId){var u,g;n.push({id:r,parentId:e.parentId,rect:{...s.internals.positionAbsolute,width:null!=(u=s.measured.width)?u:0,height:null!=(g=s.measured.height)?g:0}})}o.push(f)}if(n.length>0){let{parentLookup:e,nodeOrigin:t}=s(),r=(0,i.r8)(n,l,e,t);o.push(...r)}for(let e of c.values())o=e(o);r(o)},triggerNodeChanges:e=>{let{onNodesChange:t,setNodes:n,nodes:o,hasDefaultNodes:l,debug:r}=s();(null==e?void 0:e.length)&&(l&&n(F(e,o)),r&&console.log("React Flow: trigger node changes",e),null==t||t(e))},triggerEdgeChanges:e=>{let{onEdgesChange:t,setEdges:n,edges:o,hasDefaultEdges:l,debug:r}=s();(null==e?void 0:e.length)&&(l&&n(F(e,o)),r&&console.log("React Flow: trigger edge changes",e),null==t||t(e))},addSelectedNodes:e=>{let{multiSelectionActive:t,edgeLookup:n,nodeLookup:o,triggerNodeChanges:l,triggerEdgeChanges:r}=s();if(t)return void l(e.map(e=>Z(e,!0)));l(X(o,new Set([...e]),!0)),r(X(n))},addSelectedEdges:e=>{let{multiSelectionActive:t,edgeLookup:n,nodeLookup:o,triggerNodeChanges:l,triggerEdgeChanges:r}=s();if(t)return void r(e.map(e=>Z(e,!0)));r(X(n,new Set([...e]))),l(X(o,new Set,!0))},unselectNodesAndEdges:function(){let{nodes:e,edges:t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{edges:n,nodes:o,nodeLookup:l,triggerNodeChanges:r,triggerEdgeChanges:a}=s(),i=[];for(let t of e||o){if(!t.selected)continue;let e=l.get(t.id);e&&(e.selected=!1),i.push(Z(t.id,!1))}let d=[];for(let e of t||n)e.selected&&d.push(Z(e.id,!1));r(i),a(d)},setMinZoom:t=>{let{panZoom:n,maxZoom:o}=s();null==n||n.setScaleExtent([t,o]),e({minZoom:t})},setMaxZoom:t=>{let{panZoom:n,minZoom:o}=s();null==n||n.setScaleExtent([o,t]),e({maxZoom:t})},setTranslateExtent:t=>{var n;null==(n=s().panZoom)||n.setTranslateExtent(t),e({translateExtent:t})},resetSelectedElements:()=>{let{edges:e,nodes:t,triggerNodeChanges:n,triggerEdgeChanges:o,elementsSelectable:l}=s();if(!l)return;let r=t.reduce((e,t)=>t.selected?[...e,Z(t.id,!1)]:e,[]),a=e.reduce((e,t)=>t.selected?[...e,Z(t.id,!1)]:e,[]);n(r),o(a)},setNodeExtent:t=>{let{nodes:n,nodeLookup:o,parentLookup:l,nodeOrigin:r,elevateNodesOnSelect:a,nodeExtent:d,zIndexMode:c}=s();(t[0][0]!==d[0][0]||t[0][1]!==d[0][1]||t[1][0]!==d[1][0]||t[1][1]!==d[1][1])&&((0,i.bi)(n,o,l,{nodeOrigin:r,nodeExtent:t,elevateNodesOnSelect:a,checkEquality:!1,zIndexMode:c}),e({nodeExtent:t}))},panBy:e=>{let{transform:t,width:n,height:o,panZoom:l,translateExtent:r}=s();return(0,i.No)({delta:e,panZoom:l,transform:t,translateExtent:r,width:n,height:o})},setCenter:async(e,t,n)=>{let{width:o,height:l,maxZoom:r,panZoom:a}=s();if(!a)return Promise.resolve(!1);let i=void 0!==(null==n?void 0:n.zoom)?n.zoom:r;return await a.setViewport({x:o/2-e*i,y:l/2-t*i,zoom:i},{duration:null==n?void 0:n.duration,ease:null==n?void 0:n.ease,interpolate:null==n?void 0:n.interpolate}),Promise.resolve(!0)},cancelConnection:()=>{e({connection:{...i.bK}})},updateConnection:t=>{e({connection:t})},reset:()=>e({...tu()})}},Object.is)})({nodes:t,edges:n,defaultNodes:o,defaultEdges:a,width:d,height:c,fitView:h,minZoom:g,maxZoom:f,fitViewOptions:p,nodeOrigin:m,nodeExtent:v,zIndexMode:b}));return(0,l.jsx)(u,{value:x,children:(0,l.jsx)($,{children:y})})}function tf(e){let{children:t,nodes:n,edges:o,defaultNodes:a,defaultEdges:i,width:s,height:d,fitView:u,fitViewOptions:g,minZoom:f,maxZoom:p,nodeOrigin:h,nodeExtent:m,zIndexMode:v}=e;return(0,r.useContext)(c)?(0,l.jsx)(l.Fragment,{children:t}):(0,l.jsx)(tg,{initialNodes:n,initialEdges:o,defaultNodes:a,defaultEdges:i,initialWidth:s,initialHeight:d,fitView:u,initialFitViewOptions:g,initialMinZoom:f,initialMaxZoom:p,nodeOrigin:h,nodeExtent:m,zIndexMode:v,children:t})}let tp={width:"100%",height:"100%",overflow:"hidden",position:"relative",zIndex:0};var th=Q(function(e,t){let{nodes:n,edges:o,defaultNodes:s,defaultEdges:d,className:c,nodeTypes:u,edgeTypes:g,onNodeClick:f,onEdgeClick:p,onInit:h,onMove:m,onMoveStart:v,onMoveEnd:b,onConnect:y,onConnectStart:x,onConnectEnd:S,onClickConnectStart:C,onClickConnectEnd:N,onNodeMouseEnter:k,onNodeMouseMove:M,onNodeMouseLeave:P,onNodeContextMenu:D,onNodeDoubleClick:I,onNodeDragStart:O,onNodeDrag:R,onNodeDragStop:B,onNodesDelete:V,onEdgesDelete:H,onDelete:T,onSelectionChange:F,onSelectionDragStart:Z,onSelectionDrag:X,onSelectionDragStop:K,onSelectionContextMenu:W,onSelectionStart:Y,onSelectionEnd:Q,onBeforeDelete:U,connectionMode:G,connectionLineType:q=i.Do.Bezier,connectionLineStyle:$,connectionLineComponent:J,connectionLineContainerStyle:ee,deleteKeyCode:et="Backspace",selectionKeyCode:en="Shift",selectionOnDrag:eo=!1,selectionMode:el=i.Qc.Full,panActivationKeyCode:er="Space",multiSelectionKeyCode:ea=(0,i.Ue)()?"Meta":"Control",zoomActivationKeyCode:ei=(0,i.Ue)()?"Meta":"Control",snapToGrid:es,snapGrid:ed,onlyRenderVisibleElements:ec=!1,selectNodesOnDrag:eu,nodesDraggable:eg,autoPanOnNodeFocus:ef,nodesConnectable:ep,nodesFocusable:eh,nodeOrigin:em=A,edgesFocusable:ev,edgesReconnectable:eb,elementsSelectable:ey=!0,defaultViewport:ex=_,minZoom:eS=.5,maxZoom:ew=2,translateExtent:eC=i.ZO,preventScrolling:eE=!0,nodeExtent:eN,defaultMarkerColor:ek="#b1b1b7",zoomOnScroll:eM=!0,zoomOnPinch:eP=!0,panOnScroll:eD=!1,panOnScrollSpeed:ej=.5,panOnScrollMode:eA=i.ny.Free,zoomOnDoubleClick:e_=!0,panOnDrag:eI=!0,onPaneClick:eO,onPaneMouseEnter:eR,onPaneMouseMove:eL,onPaneMouseLeave:ez,onPaneScroll:eB,onPaneContextMenu:eV,paneClickDistance:eH=1,nodeClickDistance:eT=0,children:eF,onReconnect:eZ,onReconnectStart:eX,onReconnectEnd:eK,onEdgeContextMenu:eW,onEdgeDoubleClick:eY,onEdgeMouseEnter:eQ,onEdgeMouseMove:eU,onEdgeMouseLeave:eG,reconnectRadius:eq=10,onNodesChange:e$,onEdgesChange:eJ,noDragClassName:e0="nodrag",noWheelClassName:e1="nowheel",noPanClassName:e3="nopan",fitView:e2,fitViewOptions:e4,connectOnClick:e5,attributionPosition:e6,proOptions:e7,defaultEdgeOptions:e8,elevateNodesOnSelect:e9=!0,elevateEdgesOnSelect:te=!1,disableKeyboardA11y:tt=!1,autoPanOnConnect:tn,autoPanOnNodeDrag:to,autoPanSpeed:tl,connectionRadius:tr,isValidConnection:ta,onError:ti,style:ts,id:td,nodeDragThreshold:tu,connectionDragThreshold:tg,viewport:th,onViewportChange:tm,width:tv,height:tb,colorMode:ty="light",debug:tx,onScroll:tS,ariaLabelConfig:tw,zIndexMode:tC="basic",...tE}=e,tN=td||"1",tk=function(e){var t;let[n,o]=(0,r.useState)("system"===e?null:e);return(0,r.useEffect)(()=>{if("system"!==e)return void o(e);let t=z(),n=()=>o((null==t?void 0:t.matches)?"dark":"light");return n(),null==t||t.addEventListener("change",n),()=>{null==t||t.removeEventListener("change",n)}},[e]),null!==n?n:(null==(t=z())?void 0:t.matches)?"dark":"light"}(ty),tM=(0,r.useCallback)(e=>{e.currentTarget.scrollTo({top:0,left:0,behavior:"instant"}),null==tS||tS(e)},[tS]);return(0,l.jsx)("div",{"data-testid":"rf__wrapper",...tE,onScroll:tM,style:{...ts,...tp},ref:t,className:(0,a.A)(["react-flow",c,tk]),id:td,role:"application",children:(0,l.jsxs)(tf,{nodes:n,edges:o,width:tv,height:tb,fitView:e2,fitViewOptions:e4,minZoom:eS,maxZoom:ew,nodeOrigin:em,nodeExtent:eN,zIndexMode:tC,children:[(0,l.jsx)(tc,{onInit:h,onNodeClick:f,onEdgeClick:p,onNodeMouseEnter:k,onNodeMouseMove:M,onNodeMouseLeave:P,onNodeContextMenu:D,onNodeDoubleClick:I,nodeTypes:u,edgeTypes:g,connectionLineType:q,connectionLineStyle:$,connectionLineComponent:J,connectionLineContainerStyle:ee,selectionKeyCode:en,selectionOnDrag:eo,selectionMode:el,deleteKeyCode:et,multiSelectionKeyCode:ea,panActivationKeyCode:er,zoomActivationKeyCode:ei,onlyRenderVisibleElements:ec,defaultViewport:ex,translateExtent:eC,minZoom:eS,maxZoom:ew,preventScrolling:eE,zoomOnScroll:eM,zoomOnPinch:eP,zoomOnDoubleClick:e_,panOnScroll:eD,panOnScrollSpeed:ej,panOnScrollMode:eA,panOnDrag:eI,onPaneClick:eO,onPaneMouseEnter:eR,onPaneMouseMove:eL,onPaneMouseLeave:ez,onPaneScroll:eB,onPaneContextMenu:eV,paneClickDistance:eH,nodeClickDistance:eT,onSelectionContextMenu:W,onSelectionStart:Y,onSelectionEnd:Q,onReconnect:eZ,onReconnectStart:eX,onReconnectEnd:eK,onEdgeContextMenu:eW,onEdgeDoubleClick:eY,onEdgeMouseEnter:eQ,onEdgeMouseMove:eU,onEdgeMouseLeave:eG,reconnectRadius:eq,defaultMarkerColor:ek,noDragClassName:e0,noWheelClassName:e1,noPanClassName:e3,rfId:tN,disableKeyboardA11y:tt,nodeExtent:eN,viewport:th,onViewportChange:tm}),(0,l.jsx)(L,{nodes:n,edges:o,defaultNodes:s,defaultEdges:d,onConnect:y,onConnectStart:x,onConnectEnd:S,onClickConnectStart:C,onClickConnectEnd:N,nodesDraggable:eg,autoPanOnNodeFocus:ef,nodesConnectable:ep,nodesFocusable:eh,edgesFocusable:ev,edgesReconnectable:eb,elementsSelectable:ey,elevateNodesOnSelect:e9,elevateEdgesOnSelect:te,minZoom:eS,maxZoom:ew,nodeExtent:eN,onNodesChange:e$,onEdgesChange:eJ,snapToGrid:es,snapGrid:ed,connectionMode:G,translateExtent:eC,connectOnClick:e5,defaultEdgeOptions:e8,fitView:e2,fitViewOptions:e4,onNodesDelete:V,onEdgesDelete:H,onDelete:T,onNodeDragStart:O,onNodeDrag:R,onNodeDragStop:B,onSelectionDrag:X,onSelectionDragStart:Z,onSelectionDragStop:K,onMove:m,onMoveStart:v,onMoveEnd:b,noPanClassName:e3,nodeOrigin:em,rfId:tN,autoPanOnConnect:tn,autoPanOnNodeDrag:to,autoPanSpeed:tl,onError:ti,connectionRadius:tr,isValidConnection:ta,selectNodesOnDrag:eu,nodeDragThreshold:tu,connectionDragThreshold:tg,onBeforeDelete:U,debug:tx,ariaLabelConfig:tw,zIndexMode:tC}),(0,l.jsx)(j,{onSelectionChange:F}),eF,(0,l.jsx)(E,{proOptions:e7,position:e6}),(0,l.jsx)(w,{rfId:tN,disableKeyboardA11y:tt})]})})});function tm(e){let[t,n]=(0,r.useState)(e),o=(0,r.useCallback)(e=>n(t=>F(e,t)),[]);return[t,n,o]}function tv(e){let[t,n]=(0,r.useState)(e),o=(0,r.useCallback)(e=>n(t=>F(e,t)),[]);return[t,n,o]}function tb(e){let{dimensions:t,lineWidth:n,variant:o,className:r}=e;return(0,l.jsx)("path",{strokeWidth:n,d:"M".concat(t[0]/2," 0 V").concat(t[1]," M0 ").concat(t[1]/2," H").concat(t[0]),className:(0,a.A)(["react-flow__background-pattern",o,r])})}function ty(e){let{radius:t,className:n}=e;return(0,l.jsx)("circle",{cx:t,cy:t,r:t,className:(0,a.A)(["react-flow__background-pattern","dots",n])})}i.xc.error014(),function(e){e.Lines="lines",e.Dots="dots",e.Cross="cross"}(o||(o={}));let tx={[o.Dots]:1,[o.Lines]:1,[o.Cross]:6},tS=e=>({transform:e.transform,patternId:"pattern-".concat(e.rfId)});function tw(e){let{id:t,variant:n=o.Dots,gap:i=20,size:s,lineWidth:c=1,offset:u=0,color:g,bgColor:p,style:h,className:m,patternClassName:v}=e,b=(0,r.useRef)(null),{transform:y,patternId:x}=f(tS,d.x),S=s||tx[n],w=n===o.Dots,C=n===o.Cross,E=Array.isArray(i)?i:[i,i],N=[E[0]*y[2]||1,E[1]*y[2]||1],k=S*y[2],M=Array.isArray(u)?u:[u,u],P=C?[k,k]:N,D=[M[0]*y[2]||1+P[0]/2,M[1]*y[2]||1+P[1]/2],j="".concat(x).concat(t||"");return(0,l.jsxs)("svg",{className:(0,a.A)(["react-flow__background",m]),style:{...h,...eo,"--xy-background-color-props":p,"--xy-background-pattern-color-props":g},ref:b,"data-testid":"rf__background",children:[(0,l.jsx)("pattern",{id:j,x:y[0]%N[0],y:y[1]%N[1],width:N[0],height:N[1],patternUnits:"userSpaceOnUse",patternTransform:"translate(-".concat(D[0],",-").concat(D[1],")"),children:w?(0,l.jsx)(ty,{radius:k/2,className:v}):(0,l.jsx)(tb,{dimensions:P,lineWidth:c,variant:n,className:v})}),(0,l.jsx)("rect",{x:"0",y:"0",width:"100%",height:"100%",fill:"url(#".concat(j,")")})]})}tw.displayName="Background";let tC=(0,r.memo)(tw);function tE(){return(0,l.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 32",children:(0,l.jsx)("path",{d:"M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z"})})}function tN(){return(0,l.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 5",children:(0,l.jsx)("path",{d:"M0 0h32v4.2H0z"})})}function tk(){return(0,l.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 32 30",children:(0,l.jsx)("path",{d:"M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0027.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94c-.531 0-.939-.4-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z"})})}function tM(){return(0,l.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:(0,l.jsx)("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0 8 0 4.571 3.429 4.571 7.619v3.048H3.048A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047zm4.724-13.866H7.467V7.619c0-2.59 2.133-4.724 4.723-4.724 2.591 0 4.724 2.133 4.724 4.724v3.048z"})})}function tP(){return(0,l.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 25 32",children:(0,l.jsx)("path",{d:"M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0c-4.114 1.828-1.37 2.133.305 2.438 1.676.305 4.42 2.59 4.42 5.181v3.048H3.047A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047z"})})}function tD(e){let{children:t,className:n,...o}=e;return(0,l.jsx)("button",{type:"button",className:(0,a.A)(["react-flow__controls-button",n]),...o,children:t})}let tj=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom,ariaLabelConfig:e.ariaLabelConfig});function tA(e){let{style:t,showZoom:n=!0,showFitView:o=!0,showInteractive:r=!0,fitViewOptions:i,onZoomIn:s,onZoomOut:c,onFitView:u,onInteractiveChange:g,className:h,children:m,position:v="bottom-left",orientation:b="vertical","aria-label":y}=e,x=p(),{isInteractive:S,minZoomReached:w,maxZoomReached:E,ariaLabelConfig:N}=f(tj,d.x),{zoomIn:k,zoomOut:M,fitView:P}=ee();return(0,l.jsxs)(C,{className:(0,a.A)(["react-flow__controls","horizontal"===b?"horizontal":"vertical",h]),position:v,style:t,"data-testid":"rf__controls","aria-label":null!=y?y:N["controls.ariaLabel"],children:[n&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(tD,{onClick:()=>{k(),null==s||s()},className:"react-flow__controls-zoomin",title:N["controls.zoomIn.ariaLabel"],"aria-label":N["controls.zoomIn.ariaLabel"],disabled:E,children:(0,l.jsx)(tE,{})}),(0,l.jsx)(tD,{onClick:()=>{M(),null==c||c()},className:"react-flow__controls-zoomout",title:N["controls.zoomOut.ariaLabel"],"aria-label":N["controls.zoomOut.ariaLabel"],disabled:w,children:(0,l.jsx)(tN,{})})]}),o&&(0,l.jsx)(tD,{className:"react-flow__controls-fitview",onClick:()=>{P(i),null==u||u()},title:N["controls.fitView.ariaLabel"],"aria-label":N["controls.fitView.ariaLabel"],children:(0,l.jsx)(tk,{})}),r&&(0,l.jsx)(tD,{className:"react-flow__controls-interactive",onClick:()=>{x.setState({nodesDraggable:!S,nodesConnectable:!S,elementsSelectable:!S}),null==g||g(!S)},title:N["controls.interactive.ariaLabel"],"aria-label":N["controls.interactive.ariaLabel"],children:S?(0,l.jsx)(tP,{}):(0,l.jsx)(tM,{})}),m]})}tA.displayName="Controls";let t_=(0,r.memo)(tA),tI=(0,r.memo)(function(e){let{id:t,x:n,y:o,width:r,height:i,style:s,color:d,strokeColor:c,strokeWidth:u,className:g,borderRadius:f,shapeRendering:p,selected:h,onClick:m}=e,{background:v,backgroundColor:b}=s||{};return(0,l.jsx)("rect",{className:(0,a.A)(["react-flow__minimap-node",{selected:h},g]),x:n,y:o,rx:f,ry:f,width:r,height:i,style:{fill:d||v||b,stroke:c,strokeWidth:u},shapeRendering:p,onClick:m?e=>m(e,t):void 0})}),tO=e=>e.nodes.map(e=>e.id),tR=e=>e instanceof Function?e:()=>e,tL=(0,r.memo)(function(e){let{id:t,nodeColorFunc:n,nodeStrokeColorFunc:o,nodeClassNameFunc:r,nodeBorderRadius:a,nodeStrokeWidth:s,shapeRendering:c,NodeComponent:u,onClick:g}=e,{node:p,x:h,y:m,width:v,height:b}=f(e=>{let n=e.nodeLookup.get(t);if(!n)return{node:void 0,x:0,y:0,width:0,height:0};let o=n.internals.userNode,{x:l,y:r}=n.internals.positionAbsolute,{width:a,height:s}=(0,i.uD)(o);return{node:o,x:l,y:r,width:a,height:s}},d.x);return p&&!p.hidden&&(0,i.QE)(p)?(0,l.jsx)(u,{x:h,y:m,width:v,height:b,style:p.style,selected:!!p.selected,className:r(p),color:n(p),borderRadius:a,strokeColor:o(p),strokeWidth:s,shapeRendering:c,onClick:g,id:p.id}):null});i.xN.Line,i.xN.Handle}}]);