okengine 0.13.0 → 0.15.2

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 (277) hide show
  1. package/manifest.v1.schema.json +7 -1
  2. package/package.json +4 -5
  3. package/site/content/docs/ai/mcp.mdx +27 -2
  4. package/site/content/docs/elements/ai.mdx +59 -11
  5. package/site/content/docs/elements/channel.mdx +1 -0
  6. package/site/content/docs/elements/clock.mdx +30 -12
  7. package/site/content/docs/elements/flow.mdx +9 -3
  8. package/site/content/docs/elements/gate.mdx +25 -22
  9. package/site/content/docs/elements/signal.mdx +71 -25
  10. package/site/content/docs/elements/store.mdx +87 -28
  11. package/site/content/docs/elements/vault.mdx +1 -0
  12. package/site/content/docs/get-started/basic-usage.mdx +22 -13
  13. package/site/content/docs/get-started/index.mdx +5 -0
  14. package/site/content/docs/get-started/installation.mdx +2 -2
  15. package/site/content/docs/get-started/introduction.mdx +11 -3
  16. package/site/content/docs/get-started/meta.json +1 -1
  17. package/site/content/docs/get-started/project-structure.mdx +932 -0
  18. package/site/content/docs/reference/cli.md +13 -10
  19. package/site/content/docs/reference/client.mdx +25 -21
  20. package/site/content/docs/reference/fx.mdx +27 -22
  21. package/site/content/docs/reference/security.md +1 -1
  22. package/src/auth/bindings.ts +14 -5
  23. package/src/auth/cross-plane.ts +10 -3
  24. package/src/cli/ai-setup/ai-setup.test.ts +62 -0
  25. package/src/cli/ai-setup/apply.ts +32 -1
  26. package/src/cli/ai-setup/recommend.test.ts +25 -0
  27. package/src/cli/ai-setup/recommend.ts +8 -3
  28. package/src/cli/attach-host-console.test.ts +3 -2
  29. package/src/cli/attach-host-console.ts +3 -0
  30. package/src/cli/build.test.ts +4 -2
  31. package/src/cli/db-seed.ts +48 -15
  32. package/src/cli/db.test.ts +104 -0
  33. package/src/cli/db.ts +122 -10
  34. package/src/cli/dev-controls.test.ts +20 -0
  35. package/src/cli/dev-controls.ts +13 -0
  36. package/src/cli/dev.test.ts +15 -4
  37. package/src/cli/dev.ts +102 -29
  38. package/src/cli/ensure-drizzle-config.ts +2 -1
  39. package/src/cli/tui/DevLive.tsx +12 -2
  40. package/src/cli/tui/keys.test.ts +2 -1
  41. package/src/cli/tui/keys.ts +3 -2
  42. package/src/compiler/aot.test.ts +1 -1
  43. package/src/compiler/effects-infer.ts +58 -3
  44. package/src/compiler/extract.test.ts +458 -29
  45. package/src/compiler/extract.ts +387 -69
  46. package/src/compiler/flow-path.test.ts +96 -0
  47. package/src/compiler/flow-path.ts +173 -0
  48. package/src/compiler/generate-adopt.test.ts +112 -3
  49. package/src/compiler/generate-adopt.ts +280 -26
  50. package/src/compiler/response.ts +45 -1
  51. package/src/compiler/schema-from-ast.ts +609 -0
  52. package/src/console/server/ai.ts +5 -2
  53. package/src/console/server/bind.ts +2 -2
  54. package/src/console/server/console.test.ts +3 -0
  55. package/src/console/server/flows.ts +121 -40
  56. package/src/console/server/invoke-user-flow.test.ts +3 -1
  57. package/src/console/server/invoke-user-flow.ts +17 -2
  58. package/src/console/server/iso-at.test.ts +9 -0
  59. package/src/console/server/iso-at.ts +11 -0
  60. package/src/console/server/security-headers.ts +6 -3
  61. package/src/console/server/serve.ts +17 -2
  62. package/src/console/server/spa-proxy.test.ts +1 -0
  63. package/src/console/server/sql-catalog.ts +147 -7
  64. package/src/console/server/sql-rls.test.ts +16 -0
  65. package/src/console/server/state.ts +8 -0
  66. package/src/console/server/store.test.ts +7 -4
  67. package/src/console/server/store.ts +142 -58
  68. package/src/console/ui-next/dist/assets/agent-disclosure-C0X1fbWF.js +1 -0
  69. package/src/console/ui-next/dist/assets/cache-glyph-F1FI122b.js +1 -0
  70. package/src/console/ui-next/dist/assets/{call-pii-button-bqkxMrJH.js → call-pii-button-DEDCl_j3.js} +1 -1
  71. package/src/console/ui-next/dist/assets/collapsible-LPqGvfoz.js +1 -0
  72. package/src/console/ui-next/dist/assets/{confirm-sheet-DDCRmG62.js → confirm-sheet-3ptDzXbz.js} +1 -1
  73. package/src/console/ui-next/dist/assets/{duration-tone-oiRxPVsZ.js → duration-tone-sC3lGABz.js} +1 -1
  74. package/src/console/ui-next/dist/assets/{explorer-empty-HjTnVQoR.js → explorer-empty-BvYrygyO.js} +1 -1
  75. package/src/console/ui-next/dist/assets/flows-page-Dluo1Bd7.js +1 -0
  76. package/src/console/ui-next/dist/assets/{highlighted-json-CvDPvveV.js → highlighted-json-CS_O8L-r.js} +1 -1
  77. package/src/console/ui-next/dist/assets/http-method--sWDdXSB.js +1 -0
  78. package/src/console/ui-next/dist/assets/index-Ca3HZMVq.js +66 -0
  79. package/src/console/ui-next/dist/assets/index-UtTDRQpS.css +2 -0
  80. package/src/console/ui-next/dist/assets/{link-DF7SZ9Ek.js → link-COeyggt-.js} +1 -1
  81. package/src/console/ui-next/dist/assets/observability-page-HK9-BO8z.js +4 -0
  82. package/src/console/ui-next/dist/assets/react-D8E3mtu1.js +1 -0
  83. package/src/console/ui-next/dist/assets/replica-lag-DBIFFf7d.js +18 -0
  84. package/src/console/ui-next/dist/assets/sheet-form-Dnwa5oOR.js +1 -0
  85. package/src/console/ui-next/dist/assets/shortcut-keys-CoqwEIi0.js +1 -0
  86. package/src/console/ui-next/dist/assets/skeleton-BHcfDYcb.js +1 -0
  87. package/src/console/ui-next/dist/assets/store-page-BSohH3wM.js +41 -0
  88. package/src/console/ui-next/dist/assets/trace-detail-sheet-CFIGRnnA.js +2 -0
  89. package/src/console/ui-next/dist/assets/tree-expand-toggle-BgLl34w7.js +54 -0
  90. package/src/console/ui-next/dist/assets/units-page-B0cFE76A.js +1 -0
  91. package/src/console/ui-next/dist/assets/{use-vault-list-Cl79j_ku.js → use-vault-list-BLbZhzyF.js} +1 -1
  92. package/src/console/ui-next/dist/assets/vault-page-B1SbYe10.js +2 -0
  93. package/src/console/ui-next/dist/index.html +6 -6
  94. package/src/console/ui-next/seed-invoke-host.ts +2 -0
  95. package/src/console/ui-next/src/client.ts +35 -7
  96. package/src/console/ui-next/src/components/motion/table/index.tsx +16 -0
  97. package/src/console/ui-next/src/components/motion/table/types.ts +4 -0
  98. package/src/console/ui-next/src/components/ui/kbd.tsx +2 -2
  99. package/src/console/ui-next/src/features/flows/graph/build-flow-graph.test.ts +18 -0
  100. package/src/console/ui-next/src/features/flows/graph/build-flow-graph.ts +14 -1
  101. package/src/console/ui-next/src/features/flows/graph/neighborhood.test.ts +17 -0
  102. package/src/console/ui-next/src/features/flows/graph/neighborhood.ts +16 -3
  103. package/src/console/ui-next/src/features/flows/traces/effect-kind.ts +3 -1
  104. package/src/console/ui-next/src/features/flows/traces/effect-summary.ts +24 -0
  105. package/src/console/ui-next/src/features/flows/traces/http-method.ts +19 -0
  106. package/src/console/ui-next/src/features/flows/traces/trace-detail-sheet.tsx +9 -3
  107. package/src/console/ui-next/src/features/flows/traces/trace-detail.test.ts +29 -2
  108. package/src/console/ui-next/src/features/flows/traces/traces-pane.tsx +10 -3
  109. package/src/console/ui-next/src/features/observability/lib/ask-count.test.ts +25 -0
  110. package/src/console/ui-next/src/features/observability/lib/ask-count.ts +4 -1
  111. package/src/console/ui-next/src/features/store/detail/browse-section.tsx +45 -1
  112. package/src/console/ui-next/src/features/store/detail/resource-panel.tsx +78 -16
  113. package/src/console/ui-next/src/features/store/detail/store-row-detail-sheet.tsx +155 -14
  114. package/src/console/ui-next/src/features/store/explorer/store-tree.tsx +33 -133
  115. package/src/console/ui-next/src/features/store/files/file-preview.tsx +4 -1
  116. package/src/console/ui-next/src/features/store/grid/rls-policy-sheet.tsx +326 -165
  117. package/src/console/ui-next/src/features/store/grid/sql-insert-sheet.tsx +6 -0
  118. package/src/console/ui-next/src/features/store/grid/store-data-grid.tsx +50 -3
  119. package/src/console/ui-next/src/features/store/lib/files-meta.test.ts +3 -0
  120. package/src/console/ui-next/src/features/store/lib/files-meta.ts +12 -0
  121. package/src/console/ui-next/src/features/store/lib/query-defaults.test.ts +25 -0
  122. package/src/console/ui-next/src/features/store/lib/query-defaults.ts +85 -3
  123. package/src/console/ui-next/src/features/store/lib/query-gate.ts +30 -4
  124. package/src/console/ui-next/src/features/store/lib/rls-policy.test.ts +139 -0
  125. package/src/console/ui-next/src/features/store/lib/rls-policy.ts +223 -21
  126. package/src/console/ui-next/src/features/store/lib/schema-graph.ts +4 -0
  127. package/src/console/ui-next/src/features/store/lib/sql-catalog.test.ts +24 -0
  128. package/src/console/ui-next/src/features/store/lib/sql-catalog.ts +19 -0
  129. package/src/console/ui-next/src/features/store/lib/store-tree.test.ts +6 -0
  130. package/src/console/ui-next/src/features/store/lib/store-tree.ts +13 -0
  131. package/src/console/ui-next/src/features/store/query/query-console.tsx +48 -14
  132. package/src/console/ui-next/src/features/store/query/query-gate-menu.tsx +19 -20
  133. package/src/console/ui-next/src/features/store/query/query-gate-parts.tsx +2 -1
  134. package/src/console/ui-next/src/features/store/query/query-results.tsx +110 -83
  135. package/src/console/ui-next/src/features/store/schema/schema-table-node.tsx +17 -0
  136. package/src/console/ui-next/src/features/units/call/call-api-panel.tsx +112 -72
  137. package/src/console/ui-next/src/features/units/detail/effects-summary.tsx +12 -4
  138. package/src/console/ui-next/src/features/units/lib/contract-input.test.ts +206 -1
  139. package/src/console/ui-next/src/features/units/lib/contract-input.ts +55 -0
  140. package/src/console/ui-next/src/features/vault/lib/types.ts +1 -1
  141. package/src/docker/compose-health.test.ts +27 -0
  142. package/src/docker/compose-health.ts +19 -3
  143. package/src/docker/docker.test.ts +4 -1
  144. package/src/docker/dockerfile.ts +1 -1
  145. package/src/docker/recipes/pgdog.ts +2 -0
  146. package/src/drivers/ai-anthropic.ts +5 -0
  147. package/src/drivers/ai-ollama.ts +49 -30
  148. package/src/drivers/ai-openai-compatible.ts +57 -46
  149. package/src/drivers/ai-providers.test.ts +3 -0
  150. package/src/drivers/bun-native-completeness.test.ts +7 -9
  151. package/src/drivers/clock-postgres.ts +13 -9
  152. package/src/drivers/instances-postgres.ts +4 -6
  153. package/src/drivers/journal-postgres.ts +13 -9
  154. package/src/drivers/pg-rls.test.ts +87 -0
  155. package/src/drivers/pg-rls.ts +233 -7
  156. package/src/drivers/pglite.ts +26 -3
  157. package/src/drivers/postgres.test.ts +23 -0
  158. package/src/drivers/postgres.ts +133 -9
  159. package/src/drivers/redis.ts +11 -4
  160. package/src/drivers/signal-redis.ts +24 -14
  161. package/src/drivers/signal-types.ts +2 -1
  162. package/src/drivers/types.ts +10 -0
  163. package/src/elements/ai/declare.ts +109 -0
  164. package/src/elements/ai/errors.test.ts +5 -1
  165. package/src/elements/ai/errors.ts +30 -2
  166. package/src/elements/ai/eval.ts +4 -6
  167. package/src/elements/ai/mcp-client.test.ts +206 -0
  168. package/src/elements/ai/mcp-client.ts +362 -0
  169. package/src/elements/ai/mcp-http.ts +159 -0
  170. package/src/elements/ai/mcp-mock.ts +134 -0
  171. package/src/elements/ai/mcp-protocol.ts +234 -0
  172. package/src/elements/ai/mcp-stdio.test.ts +50 -0
  173. package/src/elements/ai/mcp-stdio.ts +212 -0
  174. package/src/elements/ai/mcp-transport.ts +70 -0
  175. package/src/elements/ai/runtime.ts +159 -29
  176. package/src/elements/ai.test.ts +139 -0
  177. package/src/elements/ai.ts +16 -0
  178. package/src/elements/clock/declare.ts +26 -1
  179. package/src/elements/clock/health.test.ts +43 -0
  180. package/src/elements/clock/runtime.ts +55 -2
  181. package/src/elements/clock/schedule.ts +71 -142
  182. package/src/elements/clock.test.ts +9 -40
  183. package/src/elements/clock.ts +6 -1
  184. package/src/elements/gate/boot.ts +5 -5
  185. package/src/elements/gate/declare.ts +36 -4
  186. package/src/elements/gate/flatten.ts +1 -1
  187. package/src/elements/gate/runtime.ts +1 -1
  188. package/src/elements/index.ts +2 -0
  189. package/src/elements/signal/declare.ts +2 -1
  190. package/src/elements/signal/runtime.ts +16 -1
  191. package/src/elements/signal.ts +1 -0
  192. package/src/elements/store/cache.test.ts +2 -0
  193. package/src/elements/store/cache.ts +3 -3
  194. package/src/elements/store/declare.ts +9 -6
  195. package/src/elements/store/emit-drizzle.ts +44 -8
  196. package/src/elements/store/resource.test.ts +1 -1
  197. package/src/elements/store/rls-identity.test.ts +95 -0
  198. package/src/elements/store/rls-identity.ts +116 -0
  199. package/src/elements/store/runtime.ts +4 -0
  200. package/src/elements/store/schema-decl.test.ts +37 -0
  201. package/src/elements/store/schema-decl.ts +161 -0
  202. package/src/elements/store/seed.ts +1 -1
  203. package/src/elements/store/sql-condition.test.ts +12 -0
  204. package/src/elements/store/sql-condition.ts +26 -2
  205. package/src/elements/store/sql-rls-isolation.test.ts +165 -0
  206. package/src/elements/store/sql-rls-stamp.test.ts +117 -0
  207. package/src/elements/store/sql-session.ts +81 -3
  208. package/src/elements/store/upsert-app.test.ts +1 -1
  209. package/src/elements/store.ts +14 -0
  210. package/src/elements/vault/builtin-adapter.ts +17 -0
  211. package/src/full.ts +2 -0
  212. package/src/http.ts +20 -3
  213. package/src/index.ts +14 -1
  214. package/src/kernel/adopt-barrel-fresh.test.ts +1 -1
  215. package/src/kernel/adopt-routes.ts +30 -2
  216. package/src/kernel/app.ts +227 -77
  217. package/src/kernel/auto-cache.test.ts +8 -8
  218. package/src/kernel/auto-registry.test.ts +54 -9
  219. package/src/kernel/boot-bind/ai.ts +24 -0
  220. package/src/kernel/boot-bind/clock.ts +2 -0
  221. package/src/kernel/boot.test.ts +4 -4
  222. package/src/kernel/boot.ts +5 -3
  223. package/src/kernel/effects-stamping.test.ts +3 -3
  224. package/src/kernel/element-registries.ts +15 -5
  225. package/src/kernel/errors.ts +24 -0
  226. package/src/kernel/flow-units.ts +64 -0
  227. package/src/kernel/flow.ts +29 -17
  228. package/src/kernel/fx-dead-letters.test.ts +77 -0
  229. package/src/kernel/fx.test.ts +22 -0
  230. package/src/kernel/fx.ts +135 -6
  231. package/src/kernel/horizontal-child.ts +4 -4
  232. package/src/kernel/http-path-pending.ts +20 -0
  233. package/src/kernel/http-resource.ts +4 -0
  234. package/src/kernel/http-stream.test.ts +174 -0
  235. package/src/kernel/index.ts +2 -0
  236. package/src/kernel/pipeline.test.ts +2 -2
  237. package/src/kernel/plugin-elements.test.ts +1 -1
  238. package/src/kernel/plugin-needs.test.ts +1 -1
  239. package/src/kernel/ready.test.ts +2 -2
  240. package/src/kernel/resource-mount.test.ts +14 -0
  241. package/src/kernel/run-duration.test.ts +2 -2
  242. package/src/kernel/stamp-http.test.ts +79 -0
  243. package/src/kernel/stamp-http.ts +75 -0
  244. package/src/kernel/triggers.ts +52 -27
  245. package/src/manifest/mcp-ref.ts +88 -0
  246. package/src/manifest/types.ts +41 -2
  247. package/src/manifest/validate.test.ts +20 -0
  248. package/src/mcp/docs-server.ts +1 -1
  249. package/src/mcp/server.ts +1 -1
  250. package/src/plugins/compression.test.ts +21 -0
  251. package/src/plugins/compression.ts +1 -0
  252. package/src/release/measure.ts +2 -2
  253. package/src/runtime/bun.ts +41 -4
  254. package/src/runtime/json-code-block.test.ts +2 -2
  255. package/src/runtime/serve.test.ts +4 -4
  256. package/src/term.test.ts +52 -4
  257. package/src/term.ts +125 -17
  258. package/src/test/reset-element-registries.ts +10 -3
  259. package/src/cli/ask-seed.test.ts +0 -96
  260. package/src/cli/ask-seed.ts +0 -82
  261. package/src/console/ui-next/dist/assets/cache-glyph-CLPBqZeb.js +0 -1
  262. package/src/console/ui-next/dist/assets/collapsible-DYb0xU8C.js +0 -1
  263. package/src/console/ui-next/dist/assets/flows-page-Dg8CTE29.js +0 -1
  264. package/src/console/ui-next/dist/assets/http-method-BJ92Z_ke.js +0 -1
  265. package/src/console/ui-next/dist/assets/index-Bp-R7jtM.js +0 -66
  266. package/src/console/ui-next/dist/assets/index-D4Ldtj79.css +0 -2
  267. package/src/console/ui-next/dist/assets/observability-page-DAnpEaq1.js +0 -4
  268. package/src/console/ui-next/dist/assets/query-gate-parts-1m8m1iNp.js +0 -2
  269. package/src/console/ui-next/dist/assets/react-B1ML8gxg.js +0 -1
  270. package/src/console/ui-next/dist/assets/replica-lag-C8_BRt2x.js +0 -18
  271. package/src/console/ui-next/dist/assets/sheet-form-D-ata7jy.js +0 -1
  272. package/src/console/ui-next/dist/assets/shortcut-keys-DO4IsVqv.js +0 -1
  273. package/src/console/ui-next/dist/assets/skeleton-CL_X0GCj.js +0 -1
  274. package/src/console/ui-next/dist/assets/store-page-v3LXdYpr.js +0 -45
  275. package/src/console/ui-next/dist/assets/trace-detail-sheet-D16lWQMt.js +0 -2
  276. package/src/console/ui-next/dist/assets/units-page-BtQ0bqMe.js +0 -1
  277. package/src/console/ui-next/dist/assets/vault-page-Ca-MvcmJ.js +0 -2
@@ -29,6 +29,7 @@ import {
29
29
  type SqlStoreHandle,
30
30
  type StoreRuntime,
31
31
  } from "../../elements/store.ts";
32
+ import { RLS_CONTEXT_DRIVERS, type RlsIdentity } from "../../drivers/pg-rls.ts";
32
33
  import { DryRunWriteIsolationError, withDryRun } from "../../kernel/dry-run.ts";
33
34
  import { addPiiFieldName, piiNameAliases, PII_MASK } from "../../elements/store/classify.ts";
34
35
  import { rankIndexHits } from "./index-search.ts";
@@ -54,6 +55,7 @@ import {
54
55
  dropSqlPolicy,
55
56
  applySqlTableRls,
56
57
  listSqlCatalog,
58
+ listSqlTablePolicyCounts,
57
59
  listSqlTableRls,
58
60
  setSqlExtension,
59
61
  setSqlRowSecurity,
@@ -107,6 +109,8 @@ export interface ConsoleStoreChild {
107
109
  readonly columnDescriptions: Readonly<Record<string, string>>;
108
110
  /** Live RLS (`pg_class.relrowsecurity`) when the engine can report it. */
109
111
  readonly rls?: boolean;
112
+ /** Live + declared RLS policy count when the child is a SQL table. */
113
+ readonly rlsPolicyCount?: number;
110
114
  }
111
115
 
112
116
  /** One row in `console.store.list`. */
@@ -183,6 +187,7 @@ export async function projectStoresList(options: ProjectStoresOptions): Promise<
183
187
  ref,
184
188
  facet,
185
189
  childrenOf(manifest!, name, facet, store),
190
+ store.tables,
186
191
  );
187
192
  const replicaLagMs = facet === "sql" ? latestReplicaLag(options.runs ?? [], children) : null;
188
193
 
@@ -291,14 +296,54 @@ async function withSqlTableRls(
291
296
  ref: ResourceRef,
292
297
  facet: StoreFacet,
293
298
  children: readonly ConsoleStoreChild[],
299
+ tables?: NonNullable<Manifest["stores"]>[string]["tables"],
294
300
  ): Promise<readonly ConsoleStoreChild[]> {
295
- if (facet !== "sql" || runtime === null) return children;
301
+ const declared = declaredTableRls(tables);
302
+ const declaredCounts = declaredTablePolicyCounts(tables);
303
+ if (facet !== "sql" || runtime === null) {
304
+ return applySqlTableRls(children, new Map(), declared, declaredCounts);
305
+ }
296
306
  try {
297
307
  const sql = (await runtime.openRef(ref, { effects: { reads: [ref] } })) as SqlStoreHandle;
298
- return applySqlTableRls(children, await listSqlTableRls(sql));
308
+ const policyCounts = mergePolicyCounts(await listSqlTablePolicyCounts(sql), declaredCounts);
309
+ return applySqlTableRls(children, await listSqlTableRls(sql), declared, policyCounts);
299
310
  } catch {
300
- return children;
311
+ return applySqlTableRls(children, new Map(), declared, declaredCounts);
312
+ }
313
+ }
314
+
315
+ function declaredTableRls(
316
+ tables: NonNullable<Manifest["stores"]>[string]["tables"] | undefined,
317
+ ): ReadonlyMap<string, boolean> {
318
+ const out = new Map<string, boolean>();
319
+ for (const [name, table] of Object.entries(tables ?? {})) {
320
+ if (table.rls === true || Object.keys(table.policies ?? {}).length > 0) {
321
+ out.set(name, true);
322
+ }
323
+ }
324
+ return out;
325
+ }
326
+
327
+ function declaredTablePolicyCounts(
328
+ tables: NonNullable<Manifest["stores"]>[string]["tables"] | undefined,
329
+ ): ReadonlyMap<string, number> {
330
+ const out = new Map<string, number>();
331
+ for (const [name, table] of Object.entries(tables ?? {})) {
332
+ const n = Object.keys(table.policies ?? {}).length;
333
+ if (n > 0) out.set(name, n);
301
334
  }
335
+ return out;
336
+ }
337
+
338
+ function mergePolicyCounts(
339
+ live: ReadonlyMap<string, number>,
340
+ declared: ReadonlyMap<string, number>,
341
+ ): Map<string, number> {
342
+ const out = new Map(declared);
343
+ for (const [name, n] of live) {
344
+ out.set(name, Math.max(n, out.get(name) ?? 0));
345
+ }
346
+ return out;
302
347
  }
303
348
 
304
349
  function columnDescriptionsFor(
@@ -411,6 +456,9 @@ export interface StoreQueryInput {
411
456
  readonly q?: string;
412
457
  readonly topK?: number;
413
458
  readonly revealPii?: boolean;
459
+ readonly asGate?: string;
460
+ readonly asUserId?: string;
461
+ readonly rls?: RlsIdentity;
414
462
  }
415
463
 
416
464
  /** Query result shape. */
@@ -436,6 +484,11 @@ export interface StoreQueryResult {
436
484
  readonly facetDistribution?: Record<string, Record<string, number>>;
437
485
  readonly masked: boolean;
438
486
  readonly routedRole?: "primary" | "replica";
487
+ readonly rls?: {
488
+ readonly gate: string | null;
489
+ readonly userId: string;
490
+ readonly applied: boolean;
491
+ };
439
492
  }
440
493
 
441
494
  const KV_TTL_RE = /^(\d+)(ms|s|m|h|d)$/;
@@ -508,18 +561,27 @@ export async function queryStore(
508
561
  ): Promise<StoreQueryResult> {
509
562
  const [facet] = input.ref.split(":") as [StoreFacet, string];
510
563
  const effects: Effects = { reads: [input.ref] };
564
+ const catalog = input.child ? sqlCatalogKind(input.child) : null;
565
+ const rls = catalog ? undefined : input.rls;
511
566
  const handle = await runtime.openRef(input.ref, {
512
567
  effects,
513
568
  revealPii: input.revealPii === true,
569
+ ...(rls ? { rls } : {}),
514
570
  });
515
571
 
516
572
  if (facet === "sql") {
517
573
  const sql = handle as SqlStoreHandle;
518
574
  const table = input.child;
575
+ const stamped = rlsStamp(sql.driverId, rls);
519
576
  if (!table) {
520
- return { facet, rows: [], masked: !input.revealPii, routedRole: sql.routedRole };
577
+ return {
578
+ facet,
579
+ rows: [],
580
+ masked: !input.revealPii,
581
+ routedRole: sql.routedRole,
582
+ ...(stamped ? { rls: stamped } : {}),
583
+ };
521
584
  }
522
- const catalog = sqlCatalogKind(table);
523
585
  if (catalog) {
524
586
  const storeName = input.ref.split(":")[1] ?? "";
525
587
  const rows = await listSqlCatalog(sql, catalog, manifest, storeName, input.limit ?? 200);
@@ -540,6 +602,7 @@ export async function queryStore(
540
602
  rows,
541
603
  masked: !input.revealPii,
542
604
  routedRole: sql.routedRole,
605
+ ...(stamped ? { rls: stamped } : {}),
543
606
  };
544
607
  } catch {
545
608
  // Table may not exist yet — empty browse.
@@ -548,6 +611,7 @@ export async function queryStore(
548
611
  rows: [],
549
612
  masked: !input.revealPii,
550
613
  routedRole: sql.routedRole,
614
+ ...(stamped ? { rls: stamped } : {}),
551
615
  };
552
616
  }
553
617
  }
@@ -765,6 +829,9 @@ export interface StoreEditInput {
765
829
  readonly confirmation?: string;
766
830
  readonly reason?: string;
767
831
  readonly confirmed?: boolean;
832
+ readonly asGate?: string;
833
+ readonly asUserId?: string;
834
+ readonly rls?: RlsIdentity;
768
835
  }
769
836
 
770
837
  /** Result of a direct store edit (preview or applied). */
@@ -777,6 +844,11 @@ export interface StoreEditResult {
777
844
  readonly kind: "send" | "ask";
778
845
  readonly resource: string;
779
846
  }>;
847
+ readonly rls?: {
848
+ readonly gate: string | null;
849
+ readonly userId: string;
850
+ readonly applied: boolean;
851
+ };
780
852
  }
781
853
 
782
854
  /**
@@ -818,6 +890,15 @@ export async function editStore(
818
890
  willNotFire,
819
891
  applied: false,
820
892
  wouldHaveFired,
893
+ ...(input.rls
894
+ ? {
895
+ rls: {
896
+ gate: input.rls.gate,
897
+ userId: input.rls.userId,
898
+ applied: false,
899
+ },
900
+ }
901
+ : {}),
821
902
  };
822
903
  } catch (err) {
823
904
  await restoreEditTarget(runtime, snapshot);
@@ -828,7 +909,12 @@ export async function editStore(
828
909
  }
829
910
  }
830
911
 
831
- await applyEdit(runtime, input, { revealPii: false, persistMeta: true }, manifest);
912
+ const appliedRls = await applyEdit(
913
+ runtime,
914
+ input,
915
+ { revealPii: false, persistMeta: true },
916
+ manifest,
917
+ );
832
918
  // Direct edit: invalidate cache for written resource (effects-derived).
833
919
  runtime.onWriteEffects({ writes: [effectRef] });
834
920
  void options.production;
@@ -838,6 +924,7 @@ export async function editStore(
838
924
  willNotFire,
839
925
  applied: true,
840
926
  wouldHaveFired: [],
927
+ ...(appliedRls ? { rls: appliedRls } : {}),
841
928
  };
842
929
  }
843
930
 
@@ -1125,11 +1212,14 @@ async function applyEdit(
1125
1212
  input: StoreEditInput,
1126
1213
  ctx: { readonly revealPii: boolean; readonly persistMeta?: boolean },
1127
1214
  manifest?: Manifest | null,
1128
- ): Promise<void> {
1215
+ ): Promise<StoreEditResult["rls"] | undefined> {
1129
1216
  const [facet] = input.ref.split(":") as [StoreFacet, string];
1217
+ const catalog = input.child ? sqlCatalogKind(input.child) : null;
1218
+ const rls = catalog ? undefined : input.rls;
1130
1219
  const handle = await runtime.openRef(input.ref, {
1131
1220
  effects: { writes: [input.ref] },
1132
1221
  revealPii: ctx.revealPii,
1222
+ ...(rls ? { rls } : {}),
1133
1223
  });
1134
1224
 
1135
1225
  if (facet === "files") {
@@ -1242,12 +1332,12 @@ async function applyEdit(
1242
1332
  `INSERT INTO "${table}" (${columns}) VALUES (${placeholders})`,
1243
1333
  sets.map((c) => input.patch[c]),
1244
1334
  );
1245
- return;
1335
+ return rlsStamp(sql.driverId, rls);
1246
1336
  }
1247
1337
  const assignments = sets.map((c) => `"${c}" = ?`).join(", ");
1248
1338
  const params = [...sets.map((c) => input.patch[c]), id];
1249
1339
  await sql.raw(`UPDATE "${table}" SET ${assignments} WHERE "id" = ?`, params);
1250
- return;
1340
+ return rlsStamp(sql.driverId, rls);
1251
1341
  }
1252
1342
 
1253
1343
  throw new Error(`direct edit not supported for facet ${facet}`);
@@ -1383,7 +1473,23 @@ export function isKnownConsoleSqlGate(manifest: Manifest | null, name: string):
1383
1473
  return gate.kind !== "rate" && !name.startsWith("rate:");
1384
1474
  }
1385
1475
 
1386
- const GATE_CONTEXT_DRIVERS = new Set<SqlStoreHandle["driverId"]>(["postgres", "pglite"]);
1476
+ function rlsStamp(
1477
+ driverId: string,
1478
+ identity: RlsIdentity | undefined,
1479
+ ):
1480
+ | {
1481
+ readonly gate: string | null;
1482
+ readonly userId: string;
1483
+ readonly applied: boolean;
1484
+ }
1485
+ | undefined {
1486
+ if (!identity) return undefined;
1487
+ return {
1488
+ gate: identity.gate,
1489
+ userId: identity.userId,
1490
+ applied: RLS_CONTEXT_DRIVERS.has(driverId),
1491
+ };
1492
+ }
1387
1493
 
1388
1494
  /** DML / DDL heads — keep in sync with `isSqlWrite` in the query console. */
1389
1495
  const STORE_SQL_WRITE_HEADS = new Set([
@@ -1434,72 +1540,50 @@ export async function runStoreSql(
1434
1540
  readonly allowWrite: boolean;
1435
1541
  readonly revealPii?: boolean;
1436
1542
  readonly tenant?: string;
1437
- /** View rows as this Gate (`oke.gate` GUC on postgres / pglite). */
1543
+ /** View rows as this Gate (`oke.gate` on postgres / pglite). */
1438
1544
  readonly asGate?: string;
1545
+ readonly asUserId?: string;
1546
+ readonly rls?: RlsIdentity;
1439
1547
  },
1440
1548
  ): Promise<{
1441
1549
  readonly rows: readonly Record<string, unknown>[];
1442
1550
  readonly masked: boolean;
1443
1551
  readonly routedRole: "primary" | "replica";
1444
1552
  readonly asGate: string | null;
1553
+ readonly asUserId: string | null;
1445
1554
  readonly gateApplied: boolean;
1555
+ readonly rls: {
1556
+ readonly gate: string | null;
1557
+ readonly userId: string;
1558
+ readonly applied: boolean;
1559
+ };
1446
1560
  }> {
1447
1561
  const trimmed = sqlText.trim().replace(/;+\s*$/, "");
1448
1562
  const isWrite = isStoreSqlWrite(trimmed);
1449
1563
  if (isWrite && !options.allowWrite) {
1450
1564
  throw new Error("SQL console is read-only by default — write requires console:store.sql:write");
1451
1565
  }
1566
+ const rls = options.rls;
1452
1567
  const handle = (await runtime.openRef(ref, {
1453
1568
  effects: isWrite ? { writes: [ref] } : { reads: [ref] },
1454
1569
  revealPii: options.revealPii === true,
1570
+ ...(rls ? { rls } : {}),
1455
1571
  })) as SqlStoreHandle;
1456
- const asGate = options.asGate?.trim() || null;
1457
- let gateApplied = false;
1458
- try {
1459
- if (asGate) gateApplied = await applySqlGateContext(handle, asGate);
1460
- const rows = await handle.raw(trimmed);
1461
- if (gateApplied) await handle.raw("COMMIT");
1462
- return {
1463
- rows,
1464
- masked: !options.revealPii,
1465
- routedRole: handle.routedRole,
1466
- asGate,
1467
- gateApplied,
1468
- };
1469
- } catch (err) {
1470
- if (gateApplied) {
1471
- try {
1472
- await handle.raw("ROLLBACK");
1473
- } catch {
1474
- // Connection may already be idle after a failed SET.
1475
- }
1476
- }
1477
- throw err;
1478
- }
1479
- }
1480
-
1481
- /**
1482
- * Open a transaction and set `oke.gate` + `row_security` for RLS simulation.
1483
- * No-op on memory SQL.
1484
- *
1485
- * @param handle - Open SQL handle
1486
- * @param gate - Validated Gate name
1487
- */
1488
- async function applySqlGateContext(handle: SqlStoreHandle, gate: string): Promise<boolean> {
1489
- if (!GATE_CONTEXT_DRIVERS.has(handle.driverId)) return false;
1490
- try {
1491
- await handle.raw("BEGIN");
1492
- await handle.raw("SET LOCAL row_security = on");
1493
- await handle.raw("SELECT set_config('oke.gate', ?, true)", [gate]);
1494
- return true;
1495
- } catch {
1496
- try {
1497
- await handle.raw("ROLLBACK");
1498
- } catch {
1499
- // ignore
1500
- }
1501
- return false;
1502
- }
1572
+ const stamped = rlsStamp(handle.driverId, rls) ?? {
1573
+ gate: rls?.gate ?? options.asGate?.trim() ?? null,
1574
+ userId: rls?.userId ?? options.asUserId?.trim() ?? "",
1575
+ applied: false,
1576
+ };
1577
+ const rows = await handle.raw(trimmed);
1578
+ return {
1579
+ rows,
1580
+ masked: !options.revealPii,
1581
+ routedRole: handle.routedRole,
1582
+ asGate: stamped.gate,
1583
+ asUserId: stamped.userId.length > 0 ? stamped.userId : options.asUserId?.trim() || null,
1584
+ gateApplied: stamped.applied,
1585
+ rls: stamped,
1586
+ };
1503
1587
  }
1504
1588
 
1505
1589
  /**
@@ -0,0 +1 @@
1
+ import{wr as e}from"./shortcut-keys-CoqwEIi0.js";import{A as t}from"./xyflow-D7n4g6go.js";import{V as n,n as r,t as i}from"./react-D8E3mtu1.js";var a=t();function o({open:t,openHeight:o=`auto`,className:s,style:c,transition:l,...u}){let d=r()??!1;return(0,a.jsx)(i.div,{...u,"aria-hidden":!t,inert:!t||void 0,initial:!1,animate:d?{opacity:+!!t}:{opacity:+!!t,clipPath:t?`inset(0 0 0% 0)`:`inset(0 0 100% 0)`,y:t?0:-4},transition:l??{duration:d?0:t?.22:.14,ease:n},className:e(`overflow-hidden`,s),style:{...c,height:t?o:0,pointerEvents:t?void 0:`none`,transformOrigin:`top`}})}export{o as t};
@@ -0,0 +1 @@
1
+ import{F as e,I as t,R as n,Tr as r,wr as i}from"./shortcut-keys-CoqwEIi0.js";import{A as a,f as o}from"./xyflow-D7n4g6go.js";import{t as s}from"./dagre.esm-ZwcdTuZZ.js";import{D as c,E as l,O as u,T as d,b as f,s as p,x as m}from"./http-method--sWDdXSB.js";function h(e){let t=e.indexOf(`.`);return t===-1?e:e.slice(0,t)}function g(e){let t=e.indexOf(`.`);return t===-1?e:e.slice(t+1)}function _(e){let t=e?.flows??{},n=new Map;for(let e of Object.keys(t)){let r=t[e]?.effects?.calls??[];for(let t of r){let r=n.get(t)??[];r.push(e),n.set(t,r)}}for(let[e,t]of n)t.sort((e,t)=>e.localeCompare(t)),n.set(e,t);return n}function v(e,t){return _(e).get(t)??[]}function y(e){return e.startsWith(`sql:`)?{id:e,kind:`store`,label:e.slice(4),facet:`sql`}:e.startsWith(`kv:`)?{id:e,kind:`store`,label:e.slice(3),facet:`kv`}:e.startsWith(`files:`)?{id:e,kind:`store`,label:e.slice(6),facet:`files`}:e.startsWith(`index:`)?{id:e,kind:`store`,label:e.slice(6),facet:`index`}:e.startsWith(`signal:`)?{id:e,kind:`signal`,label:e.slice(7)}:e.startsWith(`ai:`)?{id:e,kind:`ai`,label:e.slice(3)}:e.startsWith(`vault:`)?{id:e,kind:`vault`,label:e.slice(6)}:e.startsWith(`channel:`)?{id:e,kind:`channel`,label:e.slice(8)}:e.startsWith(`gate:`)?{id:e,kind:`gate`,label:e.slice(5)}:e.startsWith(`clock:`)?{id:e,kind:`clock`,label:e.slice(6)}:null}function b(e,t,n,r,i=!1){let a=f[r];return{id:e,source:t,target:n,type:`smoothstep`,animated:i,data:{kind:r},style:{stroke:a,strokeWidth:r===`calls`?2.5:2.25},pathOptions:{borderRadius:28},zIndex:m.edge,markerEnd:{type:o.ArrowClosed,width:14,height:14,color:a}}}function x(e){let t=e?.flows??{},n=new Set(Object.keys(t)),r=[],i=new Map;for(let e of[...n].sort()){let t=h(e),n=i.get(t)??[];n.push(e),i.set(t,n)}let a=new Map,o=new Map;for(let e of n){let n=t[e];if(!n)continue;if(n.trigger?.signal){let t=`signal:${n.trigger.signal}`,i=y(t);i&&a.set(t,i),r.push(b(`e:${t}->flow:${e}`,t,`flow:${e}`,`trigger`))}if(n.trigger?.cron||n.trigger?.every){let t=`clock:${e}`,i=n.trigger.cron??n.trigger.every??e;a.set(t,{id:t,kind:`clock`,label:i,facet:n.trigger.cron?`cron`:`every`}),r.push(b(`e:${t}->flow:${e}`,t,`flow:${e}`,`trigger`))}for(let t of n.gates??[]){let n=`gate:${t}`;a.set(n,{id:n,kind:`gate`,label:t}),o.set(n,(o.get(n)??0)+1),r.push(b(`e:flow:${e}-gates->${n}`,`flow:${e}`,n,`gates`))}let i=n.effects;if(i){for(let t of i.reads??[]){let n=y(t);n&&(a.set(t,n),o.set(t,(o.get(t)??0)+1),r.push(b(`e:flow:${e}-reads->${t}`,`flow:${e}`,t,`reads`)))}for(let t of i.writes??[]){let n=y(t);n&&(a.set(t,n),o.set(t,(o.get(t)??0)+1),r.push(b(`e:flow:${e}-writes->${t}`,`flow:${e}`,t,`writes`)))}for(let t of i.emits??[]){let n=`signal:${t}`,i=y(n);i&&(a.set(n,i),o.set(n,(o.get(n)??0)+1),r.push(b(`e:flow:${e}->${n}`,`flow:${e}`,n,`emits`)))}for(let t of i.asks??[]){let n=`ai:${t}`,i=y(n);i&&(a.set(n,i),o.set(n,(o.get(n)??0)+1),r.push(b(`e:flow:${e}->${n}`,`flow:${e}`,n,`asks`)))}for(let t of i.sends??[]){let n=`channel:${t}`,i=y(n);i&&(a.set(n,i),o.set(n,(o.get(n)??0)+1),r.push(b(`e:flow:${e}->${n}`,`flow:${e}`,n,`sends`)))}for(let t of i.secrets??[]){let n=`vault:${t}`,i=y(n);i&&(a.set(n,i),o.set(n,(o.get(n)??0)+1),r.push(b(`e:flow:${e}->${n}`,`flow:${e}`,n,`secrets`)))}for(let t of i.calls??[]){let n=u(t);if(n){let t=c(n.server);a.set(t,{id:t,kind:`ai`,label:n.server}),o.set(t,(o.get(t)??0)+1),r.push(b(`e:flow:${e}->${t}`,`flow:${e}`,t,`calls`,!0));continue}r.push(b(`e:flow:${e}->flow:${t}`,`flow:${e}`,`flow:${t}`,`calls`,!0))}}}return{nodes:S(i,t,a,o),edges:r,flowIds:n}}function S(e,t,n,r){let i=new s.graphlib.Graph({compound:!0});i.setGraph({rankdir:`LR`,align:`UL`,nodesep:16,ranksep:88,edgesep:12,marginx:8,marginy:8}),i.setDefaultEdgeLabel(()=>({}));for(let[t,n]of[...e.entries()].sort()){i.setNode(`unit:${t}`,{});for(let e of n)i.setNode(`flow:${e}`,{...d.flow}),i.setParent(`flow:${e}`,`unit:${t}`)}for(let e of n.values())i.setNode(e.id,{...d[e.kind]});let a=new Set;for(let n of e.values())for(let e of n){let n=t[e];if(!n)continue;let r=(e,t)=>{let n=`${e}->${t}`;a.has(n)||!i.hasNode(e)||!i.hasNode(t)||(a.add(n),i.setEdge(e,t))};n.trigger?.signal&&r(`signal:${n.trigger.signal}`,`flow:${e}`),(n.trigger?.cron||n.trigger?.every)&&r(`clock:${e}`,`flow:${e}`);for(let t of n.gates??[])r(`flow:${e}`,`gate:${t}`);let o=n.effects;if(o){for(let t of o.reads??[])r(`flow:${e}`,t);for(let t of o.writes??[])r(`flow:${e}`,t);for(let t of o.emits??[])r(`flow:${e}`,`signal:${t}`);for(let t of o.asks??[])r(`flow:${e}`,`ai:${t}`);for(let t of o.sends??[])r(`flow:${e}`,`channel:${t}`);for(let t of o.secrets??[])r(`flow:${e}`,`vault:${t}`);for(let t of o.calls??[]){let n=u(t);n?r(`flow:${e}`,c(n.server)):r(`flow:${e}`,`flow:${t}`)}}}s.layout(i);let o=[],{headerH:f,padX:p,padBottom:h}=l;for(let[n,r]of[...e.entries()].sort()){let e=`unit:${n}`,a=i.node(e);if(!a)continue;let s=a.x??0,c=a.y??0,l=r.length*d.flow.height+Math.max(0,r.length-1)*10,u=d.flow.width+p*2,_=f+l+h,v=s-u/2,y=c-_/2;o.push({id:e,type:`unit`,position:{x:v,y},data:{kind:`unit`,label:n,refId:e,badge:String(r.length)},selectable:!1,draggable:!1,zIndex:m.unit,width:u,height:_,style:{width:u,height:_}}),r.forEach((r,i)=>{let a=t[r];a&&o.push({id:`flow:${r}`,type:`flow`,position:{x:p,y:f+i*(d.flow.height+10)},parentId:e,extent:`parent`,zIndex:m.leaf,data:{kind:`flow`,label:g(r),refId:r,unit:n,plane:a.plane??`user`,badge:a.plane??`user`},draggable:!1,width:d.flow.width,height:d.flow.height,style:{width:d.flow.width,height:d.flow.height}})})}let _=[...n.values()].sort((e,t)=>e.kind.localeCompare(t.kind)||e.label.localeCompare(t.label));for(let e of _){let t=i.node(e.id),n=d[e.kind],a=r.get(e.id)??0;o.push({id:e.id,type:e.kind,position:{x:(t?.x??0)-n.width/2,y:(t?.y??0)-n.height/2},data:{kind:e.kind,label:e.label,refId:e.id,...e.facet===void 0?{}:{facet:e.facet},badge:e.facet??(a>0?String(a):e.kind)},draggable:!1,zIndex:m.leaf,width:n.width,height:n.height,style:{width:n.width,height:n.height}})}return o}function C(e,t,n,r={}){let i=t.size>0||n.size>0;return e.map(e=>{if(e.data.kind===`unit`||e.data.kind===`law`)return e;let a=e.data.kind===`flow`?t.has(e.data.refId):n.has(e.id);return{...e,data:{...e.data,highlighted:a,dimmed:i&&!a,active:r.activeNodeId!=null&&e.id===r.activeNodeId,focused:r.focusedNodeId!=null&&e.id===r.focusedNodeId}}})}function w(e,t){let n=new Map(t.map(e=>[e.id,e]));return t.some(e=>e.data.highlighted===!0)?e.map(e=>{let t=n.get(e.source),r=n.get(e.target),i=t?.data.highlighted===!0&&r?.data.highlighted===!0,a=f[e.data?.kind??`reads`];return{...e,animated:i?!0:e.animated,style:{...e.style,stroke:a,opacity:i?1:.32,strokeWidth:i?2.75:1.75},markerEnd:e.markerEnd&&typeof e.markerEnd==`object`?{...e.markerEnd,color:a}:e.markerEnd}}):e.map(e=>({...e,style:{...e.style,opacity:1}}))}var T=100;function E(e,t){return e.filter(e=>t.has(e.flow)).sort((e,t)=>t.startedAt-e.startedAt).slice(0,T)}var D=a();function O({cache:a,dataSlot:o}){let s=p(a);return(0,D.jsxs)(e,{children:[(0,D.jsx)(n,{render:e=>(0,D.jsx)(`span`,{...e,className:i(`flex w-4 shrink-0 items-center justify-center`,s.className),"data-slot":o,"data-cache":a,"aria-label":s.label,children:(0,D.jsx)(r,{icon:s.icon,className:`size-3`,"aria-hidden":!0})})}),(0,D.jsx)(t,{side:`top`,children:s.label})]})}export{w as a,h as c,C as i,E as n,x as o,g as r,v as s,O as t};
@@ -1 +1 @@
1
- import{Ci as e,Cr as t,Hr as n,S as r,ca as i,ei as a,la as o,wr as s,yi as c}from"./shortcut-keys-DO4IsVqv.js";import{A as l}from"./xyflow-D7n4g6go.js";import{_ as u}from"./collapsible-DYb0xU8C.js";var d=l();function f({kind:r,className:i,hex:o,inferred:l}){return r===`pk`?(0,d.jsx)(s,{icon:c,className:t(`size-3 shrink-0 text-amber-500`,i),"aria-label":`Primary key`}):r===`unique`?(0,d.jsx)(s,{icon:a,className:t(`size-3 shrink-0 text-violet-500`,i),"aria-label":`Unique`}):r===`none`?(0,d.jsx)(s,{icon:n,className:t(`size-3 shrink-0 text-muted-foreground/35`,i),"aria-label":`No key`}):(0,d.jsx)(s,{icon:e,className:t(`size-3 shrink-0`,!o&&`text-sky-500`,i),style:o?{color:o}:void 0,"aria-label":l?`Inferred foreign key`:`Foreign key`})}function p({primaryKey:e,foreignKey:t,unique:n,inferred:r,hex:i,empty:a=`spacer`}){let o=n===!0&&e!==!0;return!e&&!t&&!o?a===`none`?(0,d.jsx)(`span`,{className:`inline-flex shrink-0 items-center`,title:`None`,children:(0,d.jsx)(f,{kind:`none`})}):(0,d.jsx)(`span`,{className:`inline-flex w-3 shrink-0`,"aria-hidden":!0}):(0,d.jsxs)(`span`,{className:`inline-flex shrink-0 items-center gap-px`,children:[e?(0,d.jsx)(f,{kind:`pk`}):null,t?(0,d.jsx)(f,{kind:`fk`,hex:i,inferred:r}):null,o?(0,d.jsx)(f,{kind:`unique`}):null]})}var m=`[redacted]`;function h(e){let t=[e],n=y(e),r=b(e);return n!==e&&t.push(n),r!==e&&t.push(r),t}function g(e,t){for(let n of h(t))e.add(n)}function _(e){let t=new Set;for(let n of e)g(t,n);return t}function v(e){let t=new Set;for(let n of e)t.add(y(n));return t.size}function y(e){return e.replace(/([a-z0-9])([A-Z])/g,`$1_$2`).replace(/([A-Z])([A-Z][a-z])/g,`$1_$2`).toLowerCase()}function b(e){return e.replace(/_([a-z])/g,(e,t)=>t.toUpperCase())}function x({piiMasked:e,disabled:n,onToggle:a}){return(0,d.jsx)(u,{label:e?`PII hidden. Click to include cleartext (audited).`:`PII included. Click to remask.`,className:`flex self-stretch`,children:(0,d.jsxs)(r,{type:`button`,variant:`ghost`,size:`sm`,disabled:n,className:t(`h-full rounded-none px-2 text-[11px]`,!e&&`text-amber-800 dark:text-amber-300`),"aria-pressed":!e,"aria-label":e?`Include PII: disabled`:`Include PII: enabled`,onClick:a,"data-slot":`call-api-pii`,children:[(0,d.jsx)(s,{icon:e?o:i,"data-icon":`inline-start`,className:`size-3.5`}),`PII`]})})}export{v as a,_ as i,m as n,p as o,g as r,f as s,x as t};
1
+ import{S as e,Tr as t,Ur as n,bi as r,la as i,ti as a,ua as o,wi as s,wr as c}from"./shortcut-keys-CoqwEIi0.js";import{A as l}from"./xyflow-D7n4g6go.js";import{_ as u}from"./collapsible-LPqGvfoz.js";var d=l();function f({kind:e,className:i,hex:o,inferred:l}){return e===`pk`?(0,d.jsx)(t,{icon:r,className:c(`size-3 shrink-0 text-amber-500`,i),"aria-label":`Primary key`}):e===`unique`?(0,d.jsx)(t,{icon:a,className:c(`size-3 shrink-0 text-violet-500`,i),"aria-label":`Unique`}):e===`none`?(0,d.jsx)(t,{icon:n,className:c(`size-3 shrink-0 text-muted-foreground/35`,i),"aria-label":`No key`}):(0,d.jsx)(t,{icon:s,className:c(`size-3 shrink-0`,!o&&`text-sky-500`,i),style:o?{color:o}:void 0,"aria-label":l?`Inferred foreign key`:`Foreign key`})}function p({primaryKey:e,foreignKey:t,unique:n,inferred:r,hex:i,empty:a=`spacer`}){let o=n===!0&&e!==!0;return!e&&!t&&!o?a===`none`?(0,d.jsx)(`span`,{className:`inline-flex shrink-0 items-center`,title:`None`,children:(0,d.jsx)(f,{kind:`none`})}):(0,d.jsx)(`span`,{className:`inline-flex w-3 shrink-0`,"aria-hidden":!0}):(0,d.jsxs)(`span`,{className:`inline-flex shrink-0 items-center gap-px`,children:[e?(0,d.jsx)(f,{kind:`pk`}):null,t?(0,d.jsx)(f,{kind:`fk`,hex:i,inferred:r}):null,o?(0,d.jsx)(f,{kind:`unique`}):null]})}var m=`[redacted]`;function h(e){let t=[e],n=y(e),r=b(e);return n!==e&&t.push(n),r!==e&&t.push(r),t}function g(e,t){for(let n of h(t))e.add(n)}function _(e){let t=new Set;for(let n of e)g(t,n);return t}function v(e){let t=new Set;for(let n of e)t.add(y(n));return t.size}function y(e){return e.replace(/([a-z0-9])([A-Z])/g,`$1_$2`).replace(/([A-Z])([A-Z][a-z])/g,`$1_$2`).toLowerCase()}function b(e){return e.replace(/_([a-z])/g,(e,t)=>t.toUpperCase())}function x({piiMasked:n,disabled:r,onToggle:a}){return(0,d.jsx)(u,{label:n?`PII hidden. Click to include cleartext (audited).`:`PII included. Click to remask.`,className:`flex self-stretch`,children:(0,d.jsxs)(e,{type:`button`,variant:`ghost`,size:`sm`,disabled:r,className:c(`h-full rounded-none px-2 text-[11px]`,!n&&`text-amber-800 dark:text-amber-300`),"aria-pressed":!n,"aria-label":n?`Include PII: disabled`:`Include PII: enabled`,onClick:a,"data-slot":`call-api-pii`,children:[(0,d.jsx)(t,{icon:n?o:i,"data-icon":`inline-start`,className:`size-3.5`}),`PII`]})})}export{v as a,_ as i,m as n,p as o,g as r,f as s,x as t};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{C as t,D as n,E as r,F as i,Hn as a,I as o,Mt as s,Nt as c,Pt as l,Qr as u,Qt as d,R as f,Si as p,Tr as m,Ui as h,Un as g,W as _,Wr as v,X as y,Y as b,_i as x,bi as S,dn as C,en as w,gn as T,ht as E,in as ee,k as D,ki as O,kn as k,kr as A,mr as j,mt as te,nn as ne,or as re,pi as ie,pt as ae,rn as oe,t as M,tn as se,wr as N,x as ce,xi as le,yi as ue}from"./shortcut-keys-CoqwEIi0.js";import{r as de}from"./react-dom-Bph1y7z7.js";import{A as fe}from"./xyflow-D7n4g6go.js";var P=fe();function pe({label:e,keys:t,className:n,children:r}){return(0,P.jsxs)(i,{children:[(0,P.jsx)(f,{render:e=>(0,P.jsx)(`span`,{...e,className:N(`inline-flex items-center`,n),tabIndex:-1,children:r})}),(0,P.jsxs)(o,{side:`bottom`,className:`text-[11px]`,children:[e,t&&t.length>0?(0,P.jsx)(M,{keys:t}):null]})]})}function me({open:e,onToggle:t,noun:n,controlsId:r,dataSlot:i}){let a=e?`Collapse ${n}`:`Expand ${n}`;return(0,P.jsx)(pe,{label:a,className:`flex self-stretch`,children:(0,P.jsx)(`button`,{type:`button`,"aria-expanded":e,"aria-controls":r,"aria-label":a,"data-slot":i,onClick:t,className:re,children:(0,P.jsx)(m,{icon:e?le:p,className:`size-3.5`})})})}var F=e(de(),1);function he(e,t){let n=getComputedStyle(e);return t*parseFloat(n.fontSize)}function ge(e,t){let n=getComputedStyle(e.ownerDocument.documentElement);return t*parseFloat(n.fontSize)}function _e(e){return e/100*window.innerHeight}function ve(e){return e/100*window.innerWidth}function ye(e){switch(typeof e){case`number`:return[e,`px`];case`string`:{let t=parseFloat(e);return e.endsWith(`%`)?[t,`%`]:e.endsWith(`px`)?[t,`px`]:e.endsWith(`rem`)?[t,`rem`]:e.endsWith(`em`)?[t,`em`]:e.endsWith(`vh`)?[t,`vh`]:e.endsWith(`vw`)?[t,`vw`]:[t,`%`]}}}function be({groupSize:e,panelElement:t,styleProp:n}){let r,[i,a]=ye(n);switch(a){case`%`:r=i/100*e;break;case`px`:r=i;break;case`rem`:r=ge(t,i);break;case`em`:r=he(t,i);break;case`vh`:r=_e(i);break;case`vw`:r=ve(i)}return r}function I(e){return parseFloat(e.toFixed(3))}function L({group:e}){let{orientation:t,panels:n}=e;return n.reduce((e,n)=>(e+=t===`horizontal`?n.element.offsetWidth:n.element.offsetHeight,e),0)}function xe(e){let{panels:t}=e,n=L({group:e});return n===0?t.map(e=>({groupResizeBehavior:e.panelConstraints.groupResizeBehavior,collapsedSize:0,collapsible:e.panelConstraints.collapsible===!0,defaultSize:void 0,disabled:e.panelConstraints.disabled,minSize:0,maxSize:100,panelId:e.id})):t.map(e=>{let{element:t,panelConstraints:r}=e,i=0;r.collapsedSize!==void 0&&(i=I(be({groupSize:n,panelElement:t,styleProp:r.collapsedSize})/n*100));let a;r.defaultSize!==void 0&&(a=I(be({groupSize:n,panelElement:t,styleProp:r.defaultSize})/n*100));let o=0;r.minSize!==void 0&&(o=I(be({groupSize:n,panelElement:t,styleProp:r.minSize})/n*100));let s=100;return r.maxSize!==void 0&&(s=I(be({groupSize:n,panelElement:t,styleProp:r.maxSize})/n*100)),{groupResizeBehavior:r.groupResizeBehavior,collapsedSize:i,collapsible:r.collapsible===!0,defaultSize:a,disabled:r.disabled,minSize:o,maxSize:s,panelId:e.id}})}function R(e,t=`Assertion error`){if(!e)throw Error(t)}function Se(e,t){return Array.from(t).sort(e===`horizontal`?Ce:we)}function Ce(e,t){let n=e.element.offsetLeft-t.element.offsetLeft;return n===0?e.element.offsetWidth-t.element.offsetWidth:n}function we(e,t){let n=e.element.offsetTop-t.element.offsetTop;return n===0?e.element.offsetHeight-t.element.offsetHeight:n}function Te(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===Node.ELEMENT_NODE}function Ee(e,t){return{x:e.x>=t.left&&e.x<=t.right?0:Math.min(Math.abs(e.x-t.left),Math.abs(e.x-t.right)),y:e.y>=t.top&&e.y<=t.bottom?0:Math.min(Math.abs(e.y-t.top),Math.abs(e.y-t.bottom))}}function De({orientation:e,rects:t,targetRect:n}){let r={x:n.x+n.width/2,y:n.y+n.height/2},i,a=Number.MAX_VALUE;for(let n of t){let{x:t,y:o}=Ee(r,n),s=e===`horizontal`?t:o;s<a&&(a=s,i=n)}return R(i,`No rect found`),i}var Oe;function ke(){return Oe===void 0&&(Oe=typeof matchMedia==`function`&&!!matchMedia(`(pointer:coarse)`).matches),Oe}function Ae(e){let{element:t,orientation:n,panels:r,separators:i}=e,a=Se(n,Array.from(t.children).filter(Te).map(e=>({element:e}))).map(({element:e})=>e),o=[],s=!1,c=!1,l=-1,u=-1,d=0,f,p=[];{let e=-1;for(let t of a)t.hasAttribute(`data-panel`)&&(e++,t.hasAttribute(`data-disabled`)||(d++,l===-1&&(l=e),u=e))}if(d>1){let t=-1;for(let d of a)if(d.hasAttribute(`data-panel`)){t++;let i=r.find(e=>e.element===d);if(i){if(f){let r=f.element.getBoundingClientRect(),a=d.getBoundingClientRect(),m;if(c){let e=n===`horizontal`?new DOMRect(r.right,r.top,0,r.height):new DOMRect(r.left,r.bottom,r.width,0),t=n===`horizontal`?new DOMRect(a.left,a.top,0,a.height):new DOMRect(a.left,a.top,a.width,0);switch(p.length){case 0:m=[e,t];break;case 1:{let i=p[0];m=[i,De({orientation:n,rects:[r,a],targetRect:i.element.getBoundingClientRect()})===r?t:e];break}default:m=p}}else m=p.length?p:[n===`horizontal`?new DOMRect(r.right,a.top,a.left-r.right,a.height):new DOMRect(a.left,r.bottom,a.width,a.top-r.bottom)];for(let n of m){let r=`width`in n?n:n.element.getBoundingClientRect(),a=ke()?e.resizeTargetMinimumSize.coarse:e.resizeTargetMinimumSize.fine;if(r.width<a){let e=a-r.width;r=new DOMRect(r.x-e/2,r.y,r.width+e,r.height)}if(r.height<a){let e=a-r.height;r=new DOMRect(r.x,r.y-e/2,r.width,r.height+e)}!s&&!(t<=l||t>u)&&o.push({group:e,groupSize:L({group:e}),panels:[f,i],separator:`width`in n?void 0:n,rect:r}),s=!1}}c=!1,f=i,p=[]}}else if(d.hasAttribute(`data-separator`)){d.ariaDisabled!==null&&(s=!0);let e=i.find(e=>e.element===d);e?p.push(e):(f=void 0,p=[])}else c=!0}return o}var je=class{#e={};addListener(e,t){let n=this.#e[e];return n===void 0?this.#e[e]=[t]:n.includes(t)||n.push(t),()=>{this.removeListener(e,t)}}emit(e,t){let n=this.#e[e];if(n!==void 0)if(n.length===1)n[0].call(null,t);else{let e=!1,r=null,i=Array.from(n);for(let n=0;n<i.length;n++){let a=i[n];try{a.call(null,t)}catch(t){r===null&&(e=!0,r=t)}}if(e)throw r}}removeAllListeners(){this.#e={}}removeListener(e,t){let n=this.#e[e];if(n!==void 0){let e=n.indexOf(t);e>=0&&n.splice(e,1)}}},z={cursorFlags:0,state:`inactive`},Me=new je;function B(){return z}function Ne(e){return Me.addListener(`change`,e)}function Pe(e){let t=z,n={...z};n.cursorFlags=e,z=n,Me.emit(`change`,{prev:t,next:n})}function V(e){let t=z;z=e,Me.emit(`change`,{prev:t,next:e})}var Fe=e=>e,Ie=()=>{},Le=1,Re=2,ze=4,Be=8,Ve=3,He=12,Ue;function We(){return Ue===void 0&&(Ue=!1,typeof window<`u`&&(window.navigator.userAgent.includes(`Chrome`)||window.navigator.userAgent.includes(`Firefox`))&&(Ue=!0)),Ue}function Ge({cursorFlags:e,groups:t,state:n}){let r=0,i=0;switch(n){case`active`:case`hover`:t.forEach(e=>{if(!e.mutableState.disableCursor)switch(e.orientation){case`horizontal`:r++;break;case`vertical`:i++;break}})}if(r!==0||i!==0){if(n===`active`&&e&&We()){let t=(e&Le)!==0,n=(e&Re)!==0,r=(e&ze)!==0,i=(e&Be)!==0;if(t)return r?`se-resize`:i?`ne-resize`:`e-resize`;if(n)return r?`sw-resize`:i?`nw-resize`:`w-resize`;if(r)return`s-resize`;if(i)return`n-resize`}return We()?r>0&&i>0?`move`:r>0?`ew-resize`:`ns-resize`:r>0&&i>0?`grab`:r>0?`col-resize`:`row-resize`}}var Ke=new WeakMap;function qe(e){if(e.defaultView===null||e.defaultView===void 0)return;let{prevStyle:t,styleSheet:n}=Ke.get(e)??{};n===void 0&&(n=new e.defaultView.CSSStyleSheet,e.adoptedStyleSheets&&(Object.isExtensible(e.adoptedStyleSheets)?e.adoptedStyleSheets.push(n):e.adoptedStyleSheets=[...e.adoptedStyleSheets,n]));let r=B();switch(r.state){case`active`:case`hover`:{let e=Ge({cursorFlags:r.cursorFlags,groups:r.hitRegions.map(e=>e.group),state:r.state}),i=`*, *:hover {cursor: ${e} !important; }`;if(t===i)return;t=i,e?n.cssRules.length===0?n.insertRule(i):n.replaceSync(i):n.cssRules.length===1&&n.deleteRule(0);break}case`inactive`:t=void 0,n.cssRules.length===1&&n.deleteRule(0)}Ke.set(e,{prevStyle:t,styleSheet:n})}var H=new Map,Je=new je;function Ye(e){H=new Map(H),H.delete(e)}function Xe(e,t){for(let[t]of H)if(t.id===e)return t}function U(e,t){for(let[t,n]of H)if(t.id===e)return n;if(t)throw Error(`Could not find data for Group with id ${e}`)}function W(){return H}function Ze(e,t){return Je.addListener(`groupChange`,n=>{n.group.id===e&&t(n)})}function G(e,t,n){let r=H.get(e);H=new Map(H),H.set(e,t),Je.emit(`groupChange`,{group:e,isUserInteraction:n?.isUserInteraction===!0,prev:r,next:t})}function Qe(e){let t=B(),n=!1;return t.state===`active`&&(V({cursorFlags:0,state:`inactive`}),t.hitRegions.length>0&&(qe(e),n=!0,t.hitRegions.forEach(e=>{let t=U(e.group.id,!0);G(e.group,t,{isUserInteraction:!0})}))),n}function $e(e){e.defaultPrevented||Qe(e.currentTarget)}function et(e,t,n){let r,i={x:1/0,y:1/0};for(let a of t){let t=Ee(n,a.rect);switch(e){case`horizontal`:t.x<=i.x&&(r=a,i=t);break;case`vertical`:t.y<=i.y&&(r=a,i=t)}}return r?{distance:i,hitRegion:r}:void 0}function tt(e){return typeof e==`object`&&!!e&&`nodeType`in e&&e.nodeType===Node.DOCUMENT_FRAGMENT_NODE}function nt(e,t){if(e===t)throw Error(`Cannot compare node with itself`);let n={a:ct(e),b:ct(t)},r;for(;n.a.at(-1)===n.b.at(-1);)r=n.a.pop(),n.b.pop();R(r,`Stacking order can only be calculated for elements with a common ancestor`);let i={a:st(ot(n.a)),b:st(ot(n.b))};if(i.a===i.b){let e=r.childNodes,t={a:n.a.at(-1),b:n.b.at(-1)},i=e.length;for(;i--;){let n=e[i];if(n===t.a)return 1;if(n===t.b)return-1}}return Math.sign(i.a-i.b)}var rt=/\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;function it(e){let t=getComputedStyle(lt(e)??e).display;return t===`flex`||t===`inline-flex`}function at(e){let t=getComputedStyle(e);return!!(t.position===`fixed`||t.zIndex!==`auto`&&(t.position!==`static`||it(e))||+t.opacity<1||`transform`in t&&t.transform!==`none`||`webkitTransform`in t&&t.webkitTransform!==`none`||`mixBlendMode`in t&&t.mixBlendMode!==`normal`||`filter`in t&&t.filter!==`none`||`webkitFilter`in t&&t.webkitFilter!==`none`||`isolation`in t&&t.isolation===`isolate`||rt.test(t.willChange)||t.webkitOverflowScrolling===`touch`)}function ot(e){let t=e.length;for(;t--;){let n=e[t];if(R(n,`Missing node`),at(n))return n}return null}function st(e){return e&&Number(getComputedStyle(e).zIndex)||0}function ct(e){let t=[];for(;e;)t.push(e),e=lt(e);return t}function lt(e){let{parentNode:t}=e;return tt(t)?t.host:t}function ut(e,t){return e.x<t.x+t.width&&e.x+e.width>t.x&&e.y<t.y+t.height&&e.y+e.height>t.y}function dt({groupElement:e,hitRegion:t,pointerEventTarget:n}){if(!Te(n)||n.contains(e)||e.contains(n))return!0;if(nt(n,e)>0){let r=n;for(;r;){if(r.contains(e))return!0;if(ut(r.getBoundingClientRect(),t))return!1;r=r.parentElement}}return!0}function ft(e,t){let n=[];return t.forEach((t,r)=>{if(r.disabled)return;let i=Ae(r),a=et(r.orientation,i,{x:e.clientX,y:e.clientY});a&&a.distance.x<=0&&a.distance.y<=0&&dt({groupElement:r.element,hitRegion:a.hitRegion.rect,pointerEventTarget:e.target})&&n.push(a.hitRegion)}),n}function pt(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!=t[n])return!1;return!0}function K(e,t,n=0){return Math.abs(I(e)-I(t))<=n}function q(e,t){return K(e,t)?0:e>t?1:-1}function J({overrideDisabledPanels:e,panelConstraints:t,prevSize:n,size:r}){let{collapsedSize:i=0,collapsible:a,disabled:o,maxSize:s=100,minSize:c=0}=t;if(o&&!e)return n;if(q(r,c)<0)if(a){let e=(i+c)/2;r=q(r,e)<0?i:c}else r=c;return r=Math.min(s,r),r=I(r),r}function mt({delta:e,initialLayout:t,panelConstraints:n,pivotIndices:r,prevLayout:i,trigger:a}){if(K(e,0))return t;let o=a===`imperative-api`,s=Object.values(t),c=Object.values(i),l=[...s],[u,d]=r;R(u!=null,`Invalid first pivot index`),R(d!=null,`Invalid second pivot index`);let f=0;switch(a){case`keyboard`:{let t=e<0?d:u,r=n[t];R(r,`Panel constraints not found for index ${t}`);let{collapsedSize:i=0,collapsible:a,minSize:o=0}=r;if(a){let n=s[t];if(R(n!=null,`Previous layout not found for panel index ${t}`),K(n,i)){let t=o-n;q(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}{let t=e<0?u:d,r=n[t];R(r,`No panel constraints found for index ${t}`);let{collapsedSize:i=0,collapsible:a,minSize:o=0}=r;if(a){let n=s[t];if(R(n!=null,`Previous layout not found for panel index ${t}`),K(n,o)){let t=n-i;q(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}break;default:{let t=e<0?d:u,r=n[t];R(r,`Panel constraints not found for index ${t}`);let i=s[t],{collapsible:a,collapsedSize:o,minSize:c}=r;if(a&&q(i,c)<0)if(e>0){let t=c-o,n=t/2;q(i+e,c)<0&&(e=q(e,n)<=0?0:t)}else{let t=c-o,n=100-t/2;q(i-e,c)<0&&(e=q(100+e,n)>0?0:-t)}break}}{let t=e<0?1:-1,r=e<0?d:u,i=0;for(;;){let e=s[r];R(e!=null,`Previous layout not found for panel index ${r}`);let a=J({overrideDisabledPanels:o,panelConstraints:n[r],prevSize:e,size:100})-e;if(i+=a,r+=t,r<0||r>=n.length)break}let a=Math.min(Math.abs(e),Math.abs(i));e=e<0?0-a:a}{let t=e<0?u:d;for(;t>=0&&t<n.length;){let r=Math.abs(e)-Math.abs(f),i=s[t];R(i!=null,`Previous layout not found for panel index ${t}`);let a=i-r,c=J({overrideDisabledPanels:o,panelConstraints:n[t],prevSize:i,size:a});if(!K(i,c)&&(f+=i-c,l[t]=c,f.toFixed(3).localeCompare(Math.abs(e).toFixed(3),void 0,{numeric:!0})>=0))break;e<0?t--:t++}}if(pt(c,l))return i;{let t=e<0?d:u,r=s[t];R(r!=null,`Previous layout not found for panel index ${t}`);let i=r+f,a=J({overrideDisabledPanels:o,panelConstraints:n[t],prevSize:r,size:i});if(l[t]=a,!K(a,i)){let t=i-a,r=e<0?d:u;for(;r>=0&&r<n.length;){let i=l[r];R(i!=null,`Previous layout not found for panel index ${r}`);let a=i+t,s=J({overrideDisabledPanels:o,panelConstraints:n[r],prevSize:i,size:a});if(K(i,s)||(t-=s-i,l[r]=s),K(t,0))break;e>0?r--:r++}}}if(!K(Object.values(l).reduce((e,t)=>t+e,0),100,.1))return i;let p=Object.keys(i);return l.reduce((e,t,n)=>(e[p[n]]=t,e),{})}function Y(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(t[n]===void 0||q(e[n],t[n])!==0)return!1;return!0}function X({layout:e,panelConstraints:t}){let n=Object.values(e),r=[...n],i=r.reduce((e,t)=>e+t,0);if(r.length!==t.length)throw Error(`Invalid ${t.length} panel layout: ${r.map(e=>`${e}%`).join(`, `)}`);if(!K(i,100)&&r.length>0)for(let e=0;e<t.length;e++){let t=r[e];R(t!=null,`No layout data found for index ${e}`);let n=100/i*t;r[e]=n}let a=0;for(let e=0;e<t.length;e++){let i=n[e];R(i!=null,`No layout data found for index ${e}`);let o=r[e];R(o!=null,`No layout data found for index ${e}`);let s=J({overrideDisabledPanels:!0,panelConstraints:t[e],prevSize:i,size:o});o!=s&&(a+=o-s,r[e]=s)}if(!K(a,0))for(let e=0;e<t.length;e++){let n=r[e];R(n!=null,`No layout data found for index ${e}`);let i=n+a,o=J({overrideDisabledPanels:!0,panelConstraints:t[e],prevSize:n,size:i});if(n!==o&&(a-=o-n,r[e]=o,K(a,0)))break}let o=Object.keys(e);return r.reduce((e,t,n)=>(e[o[n]]=t,e),{})}function ht({groupId:e,panelId:t}){let n=()=>{let t=W();for(let[n,{defaultLayoutDeferred:r,derivedPanelConstraints:i,layout:a,groupSize:o,separatorToPanels:s}]of t)if(n.id===e)return{defaultLayoutDeferred:r,derivedPanelConstraints:i,group:n,groupSize:o,layout:a,separatorToPanels:s};throw Error(`Group ${e} not found`)},r=()=>{let e=n().derivedPanelConstraints.find(e=>e.panelId===t);if(e!==void 0)return e;throw Error(`Panel constraints not found for Panel ${t}`)},i=()=>{let e=n().group.panels.find(e=>e.id===t);if(e!==void 0)return e;throw Error(`Layout not found for Panel ${t}`)},a=()=>{let e=n().layout[t];if(e!==void 0)return e;throw Error(`Layout not found for Panel ${t}`)},o=({nextSize:e,panels:n,prevLayout:r,derivedPanelConstraints:i})=>{let o=a(),s=n.findIndex(e=>e.id===t),c=s===0,l=s===n.length-1;if(l&&e<o&&(c||n.slice(0,s).every((e,t)=>{let n=i[t];return n?.collapsible&&K(n.collapsedSize,r[n.panelId])}))){let e=n.slice(0,s).reduce((e,t)=>e+r[t.id],0);return{...r,[t]:I(100-e)}}return mt({delta:l?o-e:e-o,initialLayout:r,panelConstraints:i,pivotIndices:l?[s-1,s]:[s,s+1],prevLayout:r,trigger:`imperative-api`})},s=e=>{if(e===a())return;let{defaultLayoutDeferred:t,derivedPanelConstraints:r,group:i,groupSize:s,layout:c,separatorToPanels:l}=n(),u=X({layout:o({nextSize:e,panels:i.panels,prevLayout:c,derivedPanelConstraints:r}),panelConstraints:r});Y(c,u)||G(i,{defaultLayoutDeferred:t,derivedPanelConstraints:r,groupSize:s,layout:u,separatorToPanels:l})};return{collapse:()=>{let{collapsible:e,collapsedSize:t}=r(),{mutableValues:n}=i(),o=a();e&&o!==t&&(n.expandToSize=o,s(t))},expand:()=>{let{collapsible:e,collapsedSize:t,minSize:n}=r(),{mutableValues:o}=i(),c=a();if(e&&c===t){let e=o.expandToSize??n;e===0&&(e=1),s(e)}},getSize:()=>{let{group:e}=n(),t=a(),{element:r}=i();return{asPercentage:t,inPixels:e.orientation===`horizontal`?r.offsetWidth:r.offsetHeight}},isCollapsed:()=>{let{collapsible:e,collapsedSize:t}=r(),n=a();return e&&K(t,n)},resize:e=>{let{group:t}=n(),{element:r}=i(),a=L({group:t}),o=I(be({groupSize:a,panelElement:r,styleProp:e})/a*100);s(o)}}}function gt(e){e.defaultPrevented||ft(e,W()).forEach(t=>{if(t.separator&&!t.separator.disableDoubleClick){let n=t.panels.find(e=>e.panelConstraints.defaultSize!==void 0);if(n){let r=n.panelConstraints.defaultSize,i=ht({groupId:t.group.id,panelId:n.id});i&&r!==void 0&&(i.resize(r),e.preventDefault())}}})}function _t(e){let t=W();for(let[n]of t)if(n.separators.some(t=>t.element===e))return n;throw Error(`Could not find parent Group for separator element`)}function vt({groupId:e}){let t=()=>{let t=W();for(let[n,r]of t)if(n.id===e)return{group:n,...r};throw Error(`Could not find Group with id "${e}"`)};return{getLayout(){let{defaultLayoutDeferred:e,layout:n}=t();return e?{}:n},setLayout(e){let{defaultLayoutDeferred:n,derivedPanelConstraints:r,group:i,groupSize:a,layout:o,separatorToPanels:s}=t(),c=X({layout:e,panelConstraints:r});return n?o:(Y(o,c)||G(i,{defaultLayoutDeferred:n,derivedPanelConstraints:r,groupSize:a,layout:c,separatorToPanels:s}),c)}}}function Z(e,t){let n=_t(e),r=U(n.id,!0),i=n.separators.find(t=>t.element===e);R(i,`Matching separator not found`);let a=r.separatorToPanels.get(i);R(a,`Matching panels not found`);let o=a.map(e=>n.panels.indexOf(e)),s=vt({groupId:n.id}).getLayout(),c=X({layout:mt({delta:t,initialLayout:s,panelConstraints:r.derivedPanelConstraints,pivotIndices:o,prevLayout:s,trigger:`keyboard`}),panelConstraints:r.derivedPanelConstraints});Y(s,c)||G(n,{defaultLayoutDeferred:r.defaultLayoutDeferred,derivedPanelConstraints:r.derivedPanelConstraints,groupSize:r.groupSize,layout:c,separatorToPanels:r.separatorToPanels},{isUserInteraction:!0})}function yt(e){if(e.defaultPrevented)return;let t=e.currentTarget,n=_t(t);if(!n.disabled)switch(e.key){case`ArrowDown`:e.preventDefault(),n.orientation===`vertical`&&Z(t,5);break;case`ArrowLeft`:e.preventDefault(),n.orientation===`horizontal`&&Z(t,-5);break;case`ArrowRight`:e.preventDefault(),n.orientation===`horizontal`&&Z(t,5);break;case`ArrowUp`:e.preventDefault(),n.orientation===`vertical`&&Z(t,-5);break;case`End`:e.preventDefault(),Z(t,100);break;case`Enter`:{e.preventDefault();let n=_t(t),{derivedPanelConstraints:r,layout:i,separatorToPanels:a}=U(n.id,!0),o=n.separators.find(e=>e.element===t);R(o,`Matching separator not found`);let s=a.get(o);R(s,`Matching panels not found`);let c=s[0],l=r.find(e=>e.panelId===c.id);if(R(l,`Panel metadata not found`),l.collapsible){let e=i[c.id];Z(t,(l.collapsedSize===e?n.mutableState.expandedPanelSizes[c.id]??l.minSize:l.collapsedSize)-e)}break}case`F6`:{e.preventDefault();let n=_t(t).separators.map(e=>e.element),r=Array.from(n).findIndex(t=>t===e.currentTarget);R(r!==null,`Index not found`),n[e.shiftKey?r>0?r-1:n.length-1:r+1<n.length?r+1:0].focus({preventScroll:!0});break}case`Home`:e.preventDefault(),Z(t,-100);break}}function bt(e){if(e.defaultPrevented||e.pointerType===`mouse`&&e.button>0)return;let t=W(),n=ft(e,t),r=new Map,i=!1;n.forEach(e=>{e.separator&&(i||(i=!0,e.separator.element.focus({focusVisible:!1,preventScroll:!0})));let n=t.get(e.group);n&&r.set(e.group,n.layout)}),V({cursorFlags:0,hitRegions:n,initialLayoutMap:r,pointerDownAtPoint:{x:e.clientX,y:e.clientY},state:`active`}),n.length&&e.preventDefault()}function xt({document:e,event:t,hitRegions:n,initialLayoutMap:r,mountedGroups:i,pointerDownAtPoint:a,prevCursorFlags:o}){let s=0;n.forEach(e=>{let{group:n,groupSize:o}=e,{orientation:c,panels:l}=n,{disableCursor:u}=n.mutableState,d=0;d=a?c===`horizontal`?(t.clientX-a.x)/o*100:(t.clientY-a.y)/o*100:c===`horizontal`?t.clientX<0?-100:100:t.clientY<0?-100:100;let f=r.get(n),p=i.get(n);if(!f||!p)return;let{defaultLayoutDeferred:m,derivedPanelConstraints:h,groupSize:g,layout:_,separatorToPanels:v}=p;if(h&&_&&v){let t=mt({delta:d,initialLayout:f,panelConstraints:h,pivotIndices:e.panels.map(e=>l.indexOf(e)),prevLayout:_,trigger:`mouse-or-touch`});if(Y(t,_)){if(d!==0&&!u)switch(c){case`horizontal`:s|=d<0?Le:Re;break;case`vertical`:s|=d<0?ze:Be;break}}else G(e.group,{defaultLayoutDeferred:m,derivedPanelConstraints:h,groupSize:g,layout:t,separatorToPanels:v})}});let c=0;t.movementX===0?c|=o&Ve:c|=s&Ve,t.movementY===0?c|=o&He:c|=s&He,Pe(c),qe(e)}function St(e){let t=W(),n=B();n.state===`active`&&xt({document:e.currentTarget,event:e,hitRegions:n.hitRegions,initialLayoutMap:n.initialLayoutMap,mountedGroups:t,prevCursorFlags:n.cursorFlags})}function Ct(e){if(e.defaultPrevented)return;let t=B(),n=W();switch(t.state){case`active`:if(e.buttons===0){V({cursorFlags:0,state:`inactive`}),t.hitRegions.forEach(e=>{let t=U(e.group.id,!0);G(e.group,t,{isUserInteraction:!0})});return}for(let n of t.hitRegions)if(n.separator){let{element:t}=n.separator;t.hasPointerCapture?.(e.pointerId)||t.setPointerCapture?.(e.pointerId)}xt({document:e.currentTarget,event:e,hitRegions:t.hitRegions,initialLayoutMap:t.initialLayoutMap,mountedGroups:n,pointerDownAtPoint:t.pointerDownAtPoint,prevCursorFlags:t.cursorFlags});break;default:{let r=ft(e,n);r.length===0?t.state!==`inactive`&&V({cursorFlags:0,state:`inactive`}):V({cursorFlags:0,hitRegions:r,state:`hover`}),qe(e.currentTarget);break}}}function wt(e){if(e.relatedTarget instanceof HTMLIFrameElement)switch(B().state){case`hover`:V({cursorFlags:0,state:`inactive`})}}function Tt(e){e.defaultPrevented||e.pointerType===`mouse`&&e.button>0||Qe(e.currentTarget)&&e.preventDefault()}function Et(e){let t=0,n=0,r={};for(let i of e)if(i.defaultSize!==void 0){t++;let e=I(i.defaultSize);n+=e,r[i.panelId]=e}else r[i.panelId]=void 0;let i=e.length-t;if(i!==0){let t=I((100-n)/i);for(let n of e)n.defaultSize===void 0&&(r[n.panelId]=t)}return r}function Dt(e,t,n){if(!n[0])return;let r=e.panels.find(e=>e.element===t);if(!r||!r.onResize)return;let i=L({group:e}),a=e.orientation===`horizontal`?r.element.offsetWidth:r.element.offsetHeight,o=r.mutableValues.prevSize,s={asPercentage:I(a/i*100),inPixels:a};r.mutableValues.prevSize=s,r.onResize(s,r.id,o)}function Ot(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e)if(e[n]!==t[n])return!1;return!0}function kt({group:e,nextGroupSize:t,prevGroupSize:n,prevLayout:r}){if(n<=0||t<=0||n===t)return r;let i=0,a=0,o=!1,s=new Map,c=[];for(let l of e.panels){let e=r[l.id]??0;switch(l.panelConstraints.groupResizeBehavior){case`preserve-pixel-size`:{o=!0;let r=I(e/100*n/t*100);s.set(l.id,r),i+=r;break}default:c.push(l.id),a+=e}}if(!o||c.length===0)return r;let l=100-i,u={...r};if(s.forEach((e,t)=>{u[t]=e}),a>0)for(let e of c)u[e]=I((r[e]??0)/a*l);else{let e=I(l/c.length);for(let t of c)u[t]=e}return u}function At(e,t){let n=e.map(e=>e.id),r=Object.keys(t);if(n.length!==r.length)return!1;for(let e of n)if(!r.includes(e))return!1;return!0}var Q=new Map;function jt(e){let t=!0;R(e.element.ownerDocument.defaultView,`Cannot register an unmounted Group`);let n=e.element.ownerDocument.defaultView.ResizeObserver,r=new Set,i=new Set,a=new n(n=>{for(let r of n){let{borderBoxSize:n,target:i}=r;if(i===e.element){if(t){let t=L({group:e});if(t===0)return;let n=U(e.id);if(!n)return;let r=xe(e),i=n.defaultLayoutDeferred?Et(r):n.layout,a=X({layout:kt({group:e,nextGroupSize:t,prevGroupSize:n.groupSize,prevLayout:i}),panelConstraints:r});if(!n.defaultLayoutDeferred&&Y(n.layout,a)&&Ot(n.derivedPanelConstraints,r)&&n.groupSize===t)return;G(e,{defaultLayoutDeferred:!1,derivedPanelConstraints:r,groupSize:t,layout:a,separatorToPanels:n.separatorToPanels})}}else Dt(e,i,n)}});a.observe(e.element),e.panels.forEach(e=>{R(!r.has(e.id),`Panel ids must be unique; id "${e.id}" was used more than once`),r.add(e.id),e.onResize&&a.observe(e.element)});let o=L({group:e}),s=xe(e),c=e.panels.map(({id:e})=>e).join(`,`),l=e.mutableState.defaultLayout;l&&(At(e.panels,l)||(l=void 0));let u=X({layout:e.mutableState.layouts[c]??l??Et(s),panelConstraints:s}),d=e.element.ownerDocument;Q.set(d,(Q.get(d)??0)+1);let f=new Map;return Ae(e).forEach(e=>{e.separator&&f.set(e.separator,e.panels)}),G(e,{defaultLayoutDeferred:o===0,derivedPanelConstraints:s,groupSize:o,layout:u,separatorToPanels:f}),e.separators.forEach(e=>{R(!i.has(e.id),`Separator ids must be unique; id "${e.id}" was used more than once`),i.add(e.id),e.element.addEventListener(`keydown`,yt)}),Q.get(d)===1&&(d.addEventListener(`contextmenu`,$e,!0),d.addEventListener(`dblclick`,gt,!0),d.addEventListener(`pointerdown`,bt,!0),d.addEventListener(`pointerleave`,St),d.addEventListener(`pointermove`,Ct),d.addEventListener(`pointerout`,wt),d.addEventListener(`pointerup`,Tt,!0)),function(){t=!1,Q.set(d,Math.max(0,(Q.get(d)??0)-1)),Ye(e),e.separators.forEach(e=>{e.element.removeEventListener(`keydown`,yt)}),Q.get(d)||(d.removeEventListener(`contextmenu`,$e,!0),d.removeEventListener(`dblclick`,gt,!0),d.removeEventListener(`pointerdown`,bt,!0),d.removeEventListener(`pointerleave`,St),d.removeEventListener(`pointermove`,Ct),d.removeEventListener(`pointerout`,wt),d.removeEventListener(`pointerup`,Tt,!0)),a.disconnect()}}function Mt(){let[e,t]=(0,F.useState)({});return[e,(0,F.useCallback)(()=>t({}),[])]}function Nt(e){let t=(0,F.useId)();return`${e??t}`}var $=typeof window<`u`?F.useLayoutEffect:F.useEffect;function Pt(e){let t=(0,F.useRef)(e);return $(()=>{t.current=e},[e]),(0,F.useCallback)((...e)=>t.current?.(...e),[t])}function Ft(...e){return Pt(t=>{e.forEach(e=>{if(e)switch(typeof e){case`function`:e(t);break;case`object`:e.current=t;break}})})}function It(e){let t=(0,F.useRef)({...e});return $(()=>{for(let n in e)t.current[n]=e[n]},[e]),t.current}var Lt=(0,F.createContext)(null);function Rt(e,t){let n=(0,F.useRef)({getLayout:()=>({}),setLayout:Fe});(0,F.useImperativeHandle)(t,()=>n.current,[]),$(()=>{Object.assign(n.current,vt({groupId:e}))})}function zt({children:e,className:t,defaultLayout:n,disableCursor:r,disabled:i,elementRef:a,groupRef:o,id:s,onLayoutChange:c,onLayoutChanged:l,orientation:u=`horizontal`,resizeTargetMinimumSize:d={coarse:20,fine:10},style:f,...p}){let m=(0,F.useRef)({onLayoutChange:{},onLayoutChanged:{}}),h=Pt(e=>{Y(m.current.onLayoutChange,e)||(m.current.onLayoutChange=e,c?.(e))}),g=Pt((e,t)=>{Y(m.current.onLayoutChanged,e)||(m.current.onLayoutChanged=e,l?.(e,{isUserInteraction:t}))}),_=Nt(s),v=(0,F.useRef)(null),[y,b]=Mt(),x=(0,F.useRef)({lastExpandedPanelSizes:{},layouts:{},panels:[],resizeTargetMinimumSize:d,separators:[]}),S=Ft(v,a);Rt(_,o);let C=Pt((e,t)=>{let r=B(),i=Xe(e),a=U(e);if(a){let e=!1;return r.state===`active`&&(e=r.hitRegions.some(e=>e.group===i)),{flexGrow:a.layout[t]??1,pointerEvents:e?`none`:void 0}}if(n?.[t])return{flexGrow:n?.[t]}}),w=It({defaultLayout:n,disableCursor:r}),T=(0,F.useMemo)(()=>({get disableCursor(){return!!w.disableCursor},getPanelStyles:C,id:_,orientation:u,registerPanel:e=>{let t=x.current;return t.panels=Se(u,[...t.panels,e]),b(),()=>{t.panels=t.panels.filter(t=>t!==e),b()}},registerSeparator:e=>{let t=x.current;return t.separators=Se(u,[...t.separators,e]),b(),()=>{t.separators=t.separators.filter(t=>t!==e),b()}},updatePanelProps:(e,{disabled:t})=>{let n=x.current.panels.find(t=>t.id===e);n&&(n.panelConstraints.disabled=t);let r=Xe(_),i=U(_);r&&i&&G(r,{...i,derivedPanelConstraints:xe(r)})},updateSeparatorProps:(e,{disabled:t,disableDoubleClick:n})=>{let r=x.current.separators.find(t=>t.id===e);r&&(r.disabled=t,r.disableDoubleClick=n)}}),[C,_,b,u,w]),E=(0,F.useRef)(null);return $(()=>{let e=v.current;if(e===null)return;let t=x.current,n;if(w.defaultLayout!==void 0&&Object.keys(w.defaultLayout).length===t.panels.length){n={};for(let e of t.panels){let t=w.defaultLayout[e.id];t!==void 0&&(n[e.id]=t)}}let r={disabled:!!i,element:e,id:_,mutableState:{defaultLayout:n,disableCursor:!!w.disableCursor,expandedPanelSizes:x.current.lastExpandedPanelSizes,layouts:x.current.layouts},orientation:u,panels:t.panels,resizeTargetMinimumSize:t.resizeTargetMinimumSize,separators:t.separators};E.current=r;let a=jt(r),{defaultLayoutDeferred:o,derivedPanelConstraints:s,layout:c}=U(r.id,!0);!o&&s.length>0&&(h(c),g(c,!1));let l=Ze(_,e=>{let{defaultLayoutDeferred:t,derivedPanelConstraints:n,layout:i}=e.next;if(t||n.length===0)return;let a=r.panels.map(({id:e})=>e).join(`,`);r.mutableState.layouts[a]=i,n.forEach(t=>{if(t.collapsible){let{layout:n}=e.prev??{};if(n){let e=K(t.collapsedSize,i[t.panelId]),a=K(t.collapsedSize,n[t.panelId]);e&&!a&&(r.mutableState.expandedPanelSizes[t.panelId]=n[t.panelId])}}});let o=B().state!==`active`;h(i),o&&g(i,e.isUserInteraction)});return()=>{E.current=null,a(),l()}},[i,_,g,h,u,y,w]),(0,F.useEffect)(()=>{let e=E.current;e&&(e.mutableState.defaultLayout=n,e.mutableState.disableCursor=!!r)}),(0,P.jsx)(Lt.Provider,{value:T,children:(0,P.jsx)(`div`,{...p,className:t,"data-group":!0,"data-testid":_,id:_,ref:S,style:{height:`100%`,width:`100%`,overflow:`hidden`,...f,display:`flex`,flexDirection:u===`horizontal`?`row`:`column`,flexWrap:`nowrap`,touchAction:u===`horizontal`?`pan-y`:`pan-x`},children:e})})}zt.displayName=`Group`;function Bt(){let e=(0,F.useContext)(Lt);return R(e,`Group Context not found; did you render a Panel or Separator outside of a Group?`),e}function Vt(e,t){let{id:n}=Bt(),r=(0,F.useRef)({collapse:Ie,expand:Ie,getSize:()=>({asPercentage:0,inPixels:0}),isCollapsed:()=>!1,resize:Ie});(0,F.useImperativeHandle)(t,()=>r.current,[]),$(()=>{Object.assign(r.current,ht({groupId:n,panelId:e}))})}function Ht({children:e,className:t,collapsedSize:n=`0%`,collapsible:r=!1,defaultSize:i,disabled:a,elementRef:o,groupResizeBehavior:s=`preserve-relative-size`,id:c,maxSize:l=`100%`,minSize:u=`0%`,onResize:d,panelRef:f,style:p,...m}){let h=!!c,g=Nt(c),_=It({disabled:a}),v=(0,F.useRef)(null),y=Ft(v,o),{getPanelStyles:b,id:x,orientation:S,registerPanel:C,updatePanelProps:w}=Bt(),T=d!==null,E=Pt((e,t,n)=>{d?.(e,c,n)});$(()=>{let e=v.current;if(e!==null){let t={element:e,id:g,idIsStable:h,mutableValues:{expandToSize:void 0,prevSize:void 0},onResize:T?E:void 0,panelConstraints:{groupResizeBehavior:s,collapsedSize:n,collapsible:r,defaultSize:i,disabled:_.disabled,maxSize:l,minSize:u}};return C(t)}},[s,n,r,i,T,g,h,l,u,E,C,_]),(0,F.useEffect)(()=>{w(g,{disabled:a})},[a,g,w]),Vt(g,f);let ee=()=>{let e=b(x,g);if(e)return JSON.stringify(e)},D=(0,F.useSyncExternalStore)(e=>Ze(x,e),ee,ee),O;return O=D?JSON.parse(D):i===void 0?{flexGrow:1}:{flexGrow:void 0,flexShrink:void 0,flexBasis:i},(0,P.jsx)(`div`,{...m,"data-disabled":a||void 0,"data-panel":!0,"data-testid":g,id:g,ref:y,style:{...Ut,display:`flex`,flexBasis:0,flexShrink:1,overflow:`visible`,...O},children:(0,P.jsx)(`div`,{className:t,style:{maxHeight:`100%`,maxWidth:`100%`,flexGrow:1,overflow:`auto`,...p,touchAction:S===`horizontal`?`pan-y`:`pan-x`},children:e})})}Ht.displayName=`Panel`;var Ut={minHeight:0,maxHeight:`100%`,height:`auto`,minWidth:0,maxWidth:`100%`,width:`auto`,border:`none`,borderWidth:0,padding:0,margin:0};function Wt(){return(0,F.useRef)(null)}function Gt({layout:e,panelConstraints:t,panelId:n,panelIndex:r}){let i,a,o=e[n],s=t.find(e=>e.panelId===n);if(s){let c=s.maxSize,l=s.collapsible?s.collapsedSize:s.minSize,u=[r,r+1];a=X({layout:mt({delta:l-o,initialLayout:e,panelConstraints:t,pivotIndices:u,prevLayout:e}),panelConstraints:t})[n],i=X({layout:mt({delta:c-o,initialLayout:e,panelConstraints:t,pivotIndices:u,prevLayout:e}),panelConstraints:t})[n]}return{valueControls:n,valueMax:i,valueMin:a,valueNow:o}}function Kt({children:e,className:t,disabled:n,disableDoubleClick:r,elementRef:i,id:a,style:o,...s}){let c=Nt(a),l=It({disabled:n,disableDoubleClick:r}),[u,d]=(0,F.useState)({}),[f,p]=(0,F.useState)(`inactive`),[m,h]=(0,F.useState)(!1),g=(0,F.useRef)(null),_=Ft(g,i),{disableCursor:v,id:y,orientation:b,registerSeparator:x,updateSeparatorProps:S}=Bt(),C=b===`horizontal`?`vertical`:`horizontal`;$(()=>{let e=g.current;if(e!==null){let t={disabled:l.disabled,disableDoubleClick:l.disableDoubleClick,element:e,id:c},n=x(t),r=Ne(e=>{p(e.next.state!==`inactive`&&e.next.hitRegions.some(e=>e.separator===t)?e.next.state:`inactive`)}),i=Ze(y,e=>{let{derivedPanelConstraints:n,layout:r,separatorToPanels:i}=e.next,a=i.get(t);if(a){let e=a[0],t=a.indexOf(e);d(Gt({layout:r,panelConstraints:n,panelId:e.id,panelIndex:t}))}});return()=>{r(),i(),n()}}},[y,c,x,l]),(0,F.useEffect)(()=>{S(c,{disabled:n,disableDoubleClick:r})},[n,r,c,S]);let w;n&&!v&&(w=`not-allowed`);let T;if(n)T=`disabled`;else switch(f){case`active`:T=`active`;break;default:T=m?`focus`:f}return(0,P.jsx)(`div`,{...s,"aria-controls":u.valueControls,"aria-disabled":n||void 0,"aria-orientation":C,"aria-valuemax":u.valueMax,"aria-valuemin":u.valueMin,"aria-valuenow":u.valueNow,children:e,className:t,"data-separator":T,"data-testid":c,id:c,onBlur:()=>h(!1),onFocus:()=>h(!0),ref:_,role:`separator`,style:{flexBasis:`auto`,cursor:w,...o,flexGrow:0,flexShrink:0,touchAction:`none`},tabIndex:n?void 0:0})}Kt.displayName=`Separator`;function qt({className:e,...t}){return(0,P.jsx)(zt,{className:N(`flex h-full w-full data-[orientation=vertical]:flex-col`,e),...t})}var Jt=Ht;function Yt({withHandle:e,className:t,...n}){return(0,P.jsx)(Kt,{className:N(`relative flex items-center justify-center bg-border`,`focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1`,`aria-[orientation=vertical]:w-px`,`aria-[orientation=vertical]:after:absolute aria-[orientation=vertical]:after:inset-y-0 aria-[orientation=vertical]:after:left-1/2 aria-[orientation=vertical]:after:w-1 aria-[orientation=vertical]:after:-translate-x-1/2`,`aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full`,`aria-[orientation=horizontal]:after:absolute aria-[orientation=horizontal]:after:inset-x-0 aria-[orientation=horizontal]:after:top-1/2 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:-translate-y-1/2`,`aria-[orientation=horizontal]:[&>div]:rotate-90`,t),...n,children:e?(0,P.jsx)(`div`,{className:`z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border`,children:(0,P.jsx)(m,{icon:x,className:`size-2.5`})}):null})}function Xt(){let e=Wt(),[t,n]=(0,F.useState)(!0);return{panelRef:e,open:t,toggle:()=>{let t=e.current;t&&(t.isCollapsed()?(t.expand(),n(!0)):(t.collapse(),n(!1)))},onResize:()=>{n(!(e.current?.isCollapsed()??!1))}}}var Zt={flow:{icon:ie,label:`Flow`,symbol:`Fl`},signal:{icon:ue,label:`Signal`,symbol:`Sg`},store:{icon:u,label:`Store`,symbol:`St`},clock:{icon:v,label:`Clock`,symbol:`Ck`},gate:{icon:h,label:`Gate`,symbol:`Gt`},vault:{icon:S,label:`Vault`,symbol:`Vt`},channel:{icon:O,label:`Channel`,symbol:`Ch`},ai:{icon:A,label:`AI`,symbol:`Ai`}};function Qt({className:e,...t}){return(0,P.jsx)(n,{flat:!0,className:N(j,e),...t})}function $t({className:e,...t}){return(0,P.jsx)(`div`,{"data-slot":`empty`,className:N(`flex w-full min-w-0 flex-1 flex-col items-center justify-center gap-4 rounded-xl border-dashed p-6 text-center text-balance`,e),...t})}function en({className:e,...t}){return(0,P.jsx)(`div`,{"data-slot":`empty-header`,className:N(`flex max-w-sm flex-col items-center gap-2`,e),...t})}var tn=r(`mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0`,{variants:{variant:{default:`bg-transparent`,icon:`flex size-8 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-4`}},defaultVariants:{variant:`default`}});function nn({className:e,variant:t=`default`,...n}){return(0,P.jsx)(`div`,{"data-slot":`empty-icon`,"data-variant":t,className:N(tn({variant:t,className:e})),...n})}function rn({className:e,...t}){return(0,P.jsx)(`div`,{"data-slot":`empty-title`,className:N(`cn-font-heading text-sm font-medium tracking-tight`,e),...t})}function an({className:e,...t}){return(0,P.jsx)(`div`,{"data-slot":`empty-description`,className:N(`text-sm/relaxed text-muted-foreground [&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary`,e),...t})}var on=r(`group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!`,{variants:{variant:{default:`bg-primary text-primary-foreground [a]:hover:bg-primary/80`,secondary:`bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80`,destructive:`bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20`,outline:`border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground`,ghost:`hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50`,link:`text-primary underline-offset-4 hover:underline`}},defaultVariants:{variant:`default`}});function sn({className:e,variant:t=`default`,render:n,...r}){return ce({defaultTagName:`span`,props:c({className:N(on({variant:t}),e)},r),render:n,state:{slot:`badge`,variant:t}})}function cn(e){let{open:t,defaultOpen:n,onOpenChange:r,disabled:i}=e,[a,o]=D({controlled:t,default:n,name:`Collapsible`,state:`open`}),{mounted:s,setMounted:c,transitionStatus:l}=E(a,!0,!0),u=_(),[d,f]=F.useState(),p=d===null?void 0:d??u,m=w(e=>{let t=!a,n=ee(T,e.nativeEvent);r(t,n),!n.isCanceled&&o(t)});return F.useMemo(()=>({defaultPanelId:u,disabled:i,handleTrigger:m,mounted:s,open:a,panelId:p,setMounted:c,setOpen:o,setPanelIdState:f,transitionStatus:l}),[u,i,m,s,a,p,c,o,f,l])}var ln=F.createContext(void 0);function un(){let e=F.useContext(ln);if(e===void 0)throw Error(a(15));return e}var dn=function(e){return e.open=`data-open`,e.closed=`data-closed`,e[e.startingStyle=b.startingStyle]=`startingStyle`,e[e.endingStyle=b.endingStyle]=`endingStyle`,e}({}),fn=function(e){return e.panelOpen=`data-panel-open`,e}({}),pn={[dn.open]:``},mn={[dn.closed]:``},hn={open(e){return e?{[fn.panelOpen]:``}:null}},gn={open(e){return e?pn:mn},...y},_n=F.forwardRef(function(e,t){let{render:n,className:r,defaultOpen:i=!1,disabled:a=!1,onOpenChange:o,open:c,style:l,...u}=e,d=w(o),f=cn({open:c,defaultOpen:i,onOpenChange:d,disabled:a}),p=F.useMemo(()=>({open:f.open,disabled:f.disabled,transitionStatus:f.transitionStatus}),[f.open,f.disabled,f.transitionStatus]),m=F.useMemo(()=>({...f,onOpenChange:d,state:p}),[f,d,p]),h=s(`div`,e,{state:p,ref:t,props:u,stateAttributesMapping:gn});return(0,P.jsx)(ln.Provider,{value:m,children:h})}),vn={...hn,...y},yn=F.forwardRef(function(e,n){let{panelId:r,open:i,handleTrigger:a,state:o,disabled:c}=un(),{className:l,disabled:u=c,render:d,nativeButton:f=!0,style:p,...m}=e,{getButtonProps:h,buttonRef:g}=t({disabled:u,focusableWhenDisabled:!0,native:f});return s(`button`,e,{state:o,ref:[n,g],props:[{"aria-controls":i?r:void 0,"aria-expanded":i,onClick:a},m,h],stateAttributesMapping:vn})}),bn={height:void 0,width:void 0};function xn(e){let{externalRef:t,hiddenUntilFound:n,id:r,keepMounted:i,mounted:a,onOpenChange:o,open:s,setMounted:c,setOpen:l,transitionStatus:u}=e,f=F.useRef(null),p=F.useRef(null),[m,h]=F.useState(bn),_=F.useRef(bn),v=F.useRef(!1),y=F.useRef(s),b=F.useRef(!1),[x,S]=F.useState(!1),T=F.useRef(null),E=ne(t,f),D=se(s),O=te(f),k=!s&&!a,A=x?`idle`:u,j=s&&(y.current||b.current),re=!s&&a&&p.current===`css-animation`&&m.height===void 0&&m.width===void 0?_.current:m,ie=n&&k&&p.current!==`css-animation`,M=w((e,t=!0)=>{t&&(_.current=e),h(e)}),N=w(()=>{T.current?.(),T.current=null}),ce=w(e=>{N(),T.current=()=>{T.current=null,e()}}),le=w(()=>{s&&a&&p.current===`css-animation`&&(b.current=!0)});g(()=>{!x||u===`starting`||S(!1)},[x,u]),F.useEffect(()=>()=>{le(),N()},[le,N]),g(()=>{let e=f.current;if(!e)return;!s&&T.current&&N();let t=Cn(e,j);if(p.current=t,s&&u===`idle`&&y.current&&t===`css-animation`){_.current=Sn(e);return}if(s&&u===`starting`){let n=v.current;if(v.current=!1,t===`none`){M(Sn(e)),S(!0);return}if(t===`css-transition`){let t=En(e);if(M(Sn(e)),!n)return t;let r=Tn(e,`transition-duration`,`0s`);return ce(r),S(!0),t}M(Sn(e));let r=Tn(e,`animation-name`,`none`);if(!n){r();return}let i=Tn(e,`animation-duration`,`0s`);r(),ce(i),S(!0);return}if(!s&&a&&(u===`idle`||u===`starting`)){if(y.current=!1,b.current=!1,t===`none`){M(bn,!1),c(!1);return}M(Sn(e));return}if(u!==`ending`)return;if(t===`none`){c(!1);return}let n=Sn(e);if(!(n.height>0||n.width>0)){c(!1);return}M(n),t===`css-animation`&&Tn(e,`animation-name`,`none`)()},[a,s,N,M,c,ce,j,u]),ae({enabled:s&&a&&A===`idle`,open:!0,ref:f,onComplete(){s&&M(bn,!1)}}),F.useEffect(()=>{if(s||!a||A!==`ending`||!f.current)return;let e=new AbortController,t=-1;function n(){D.current||(c(!1),M(bn,!1))}return t=d.request(()=>{O(n,e.signal)}),()=>{d.cancel(t),e.abort()}},[D,a,s,A,O,M,c]),g(()=>{let e=f.current;!e||!n||!k||e.setAttribute(`hidden`,`until-found`)},[k,n]),F.useEffect(function(){let e=f.current;if(!e)return;function t(e){let t=ee(C,e);o(!0,t),!t.isCanceled&&(v.current=!0,l(!0))}return oe(e,`beforematch`,t)},[o,l]);let ue=i||n||a||s;return{height:re.height,props:{...ie?{[dn.startingStyle]:``}:void 0,hidden:k,id:r},ref:E,shouldPreventOpenAnimation:j,shouldRender:ue,transitionStatus:A,width:re.width}}function Sn(e){return{height:e.scrollHeight,width:e.scrollWidth}}function Cn(e,t){let n=k(e).getComputedStyle(e),r=(n.animationName.split(`,`).map(e=>e.trim()).some(e=>e!==``&&e!==`none`)||t)&&wn(n.animationDuration),i=wn(n.transitionDuration);return r&&i||i?`css-transition`:r?`css-animation`:`none`}function wn(e){return e.split(`,`).map(e=>e.trim()).some(e=>e!==``&&Number.parseFloat(e)>0)}function Tn(e,t,n){let r=e.style.getPropertyValue(t),i=e.style.getPropertyPriority(t);return e.style.setProperty(t,n),()=>{if(r===``){e.style.removeProperty(t);return}e.style.setProperty(t,r,i)}}function En(e){let t={"justify-content":e.style.justifyContent,"align-items":e.style.alignItems,"align-content":e.style.alignContent,"justify-items":e.style.justifyItems};Object.keys(t).forEach(t=>{e.style.setProperty(t,`initial`,`important`)});function n(){Object.entries(t).forEach(([t,n])=>{if(n===``){e.style.removeProperty(t);return}e.style.setProperty(t,n)})}let r=d.request(n);return()=>{d.cancel(r),n()}}var Dn=function(e){return e.collapsiblePanelHeight=`--collapsible-panel-height`,e.collapsiblePanelWidth=`--collapsible-panel-width`,e}({}),On=F.forwardRef(function(e,t){let{className:n,hiddenUntilFound:r,keepMounted:i,render:a,id:o,style:c,...u}=e,{defaultPanelId:d,mounted:f,onOpenChange:p,open:m,setMounted:h,setPanelIdState:_,setOpen:v,state:y,transitionStatus:b}=un(),x=r??!1,S=i??!1,C=o||void 0,w=C??d;g(()=>(_(e=>C??(e===null?void 0:e)),()=>{_(e=>e===C?null:e)}),[C,_]);let{height:T,props:E,ref:ee,shouldPreventOpenAnimation:D,shouldRender:O,transitionStatus:k,width:A}=xn({externalRef:t,hiddenUntilFound:x,id:w,keepMounted:S,mounted:f,onOpenChange:p,open:m,setMounted:h,setOpen:v,transitionStatus:b}),j={...y,transitionStatus:k},te=l(c,j),ne=s(`div`,{...e,style:void 0},{state:j,ref:ee,props:[E,{style:{[Dn.collapsiblePanelHeight]:T===void 0?`auto`:`${T}px`,[Dn.collapsiblePanelWidth]:A===void 0?`auto`:`${A}px`}},u,te?{style:te}:void 0,D?{style:{animationName:`none`}}:void 0],stateAttributesMapping:gn});return O?ne:null});function kn({...e}){return(0,P.jsx)(_n,{"data-slot":`collapsible`,...e})}function An({...e}){return(0,P.jsx)(yn,{"data-slot":`collapsible-trigger`,...e})}function jn({...e}){return(0,P.jsx)(On,{"data-slot":`collapsible-content`,...e})}export{pe as _,$t as a,nn as c,Zt as d,Xt as f,me as g,qt as h,sn as i,rn as l,Jt as m,jn as n,an as o,Yt as p,An as r,en as s,kn as t,Qt as u};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{Cr as t,E as n,c as r,ea as i,i as a,ir as o,l as s,o as c,qr as l,s as u,u as d,wr as f}from"./shortcut-keys-DO4IsVqv.js";import{r as p}from"./react-dom-Bph1y7z7.js";import{A as m}from"./xyflow-D7n4g6go.js";import{c as h,o as g,s as _,t as v}from"./sheet-form-D-ata7jy.js";import{_ as y}from"./collapsible-DYb0xU8C.js";var b=e(p(),1),x=m();function S({value:e,label:n}){let[r,a]=(0,b.useState)(!1),s=(0,b.useRef)(null);return(0,b.useEffect)(()=>()=>{s.current&&clearTimeout(s.current)},[]),(0,x.jsx)(y,{label:r?`Copied`:n,children:(0,x.jsx)(`button`,{type:`button`,"aria-label":n,className:t(o,`size-4`),onClick:()=>{navigator.clipboard&&navigator.clipboard.writeText(e).then(()=>{a(!0),s.current&&clearTimeout(s.current),s.current=setTimeout(()=>a(!1),1200)})},children:(0,x.jsx)(f,{icon:r?i:l,className:r?`size-3 text-emerald-600 dark:text-emerald-400`:`size-3`,"aria-hidden":!0})})})}function C(e){let t={};return e.typed.trim()!==e.phrase&&(t.typed=`Type ${e.phrase} to confirm`),e.reason.trim().length<3&&(t.reason=`Reason is required (min 3 characters)`),Object.keys(t).length>0?t:null}function w({open:e,onOpenChange:i,phrase:o,title:l,description:f,children:p,pending:m=!1,error:y,confirmLabel:S,confirmVariant:w=`destructive`,slot:T=`confirm-sheet`,onConfirm:E}){let[D,O]=(0,b.useState)(``),[k,A]=(0,b.useState)(``),[j,M]=(0,b.useState)(!1);(0,b.useEffect)(()=>{e||(O(``),A(``),M(!1))},[e]);let N=j?C({typed:D,reason:k,phrase:o}):null,P=C({typed:D,reason:k,phrase:o})===null;return(0,x.jsx)(a,{open:e,onOpenChange:i,children:(0,x.jsxs)(c,{side:`right`,showOverlay:!1,className:`sm:max-w-md`,"data-slot":T,children:[(0,x.jsxs)(s,{children:[(0,x.jsx)(d,{children:l}),(0,x.jsx)(u,{children:f})]}),(0,x.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto`,children:[p,(0,x.jsxs)(_,{label:`Type ${o} to confirm`,children:[(0,x.jsx)(n,{value:D,onChange:e=>O(e.target.value),onBlur:()=>M(!0),placeholder:o,"aria-label":`Type ${o} to confirm`,"aria-invalid":N?.typed?!0:void 0,flat:!0,className:t(v,`font-mono`),autoComplete:`off`}),N?.typed?(0,x.jsx)(`span`,{className:`block px-4 pb-2 text-[10px] text-destructive`,role:`alert`,children:N.typed}):null]}),(0,x.jsxs)(_,{label:`Reason`,children:[(0,x.jsx)(n,{value:k,onChange:e=>A(e.target.value),onBlur:()=>M(!0),placeholder:`Why is this change needed?`,"aria-label":`Reason`,"aria-invalid":N?.reason?!0:void 0,flat:!0,className:v}),N?.reason?(0,x.jsx)(`span`,{className:`block px-4 pb-2 text-[10px] text-destructive`,role:`alert`,children:N.reason}):null]}),y?(0,x.jsx)(g,{children:y}):null]}),(0,x.jsxs)(r,{children:[(0,x.jsx)(h,{split:!0,onClick:()=>i(!1),disabled:m,children:`Cancel`}),(0,x.jsx)(h,{variant:w,disabled:!P||m,onClick:()=>{M(!0),P&&E({confirmation:D.trim(),reason:k.trim()})},"data-slot":`confirm-action`,children:m?`Working…`:S??`Confirm ${o.toLowerCase()}`})]})]})})}export{S as n,w as t};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{D as t,Jr as n,Tr as r,ar as i,c as a,i as o,l as s,o as c,s as l,ta as u,u as d,wr as f}from"./shortcut-keys-CoqwEIi0.js";import{r as p}from"./react-dom-Bph1y7z7.js";import{A as m}from"./xyflow-D7n4g6go.js";import{c as h,o as g,s as _,t as v}from"./sheet-form-Dnwa5oOR.js";import{_ as y}from"./collapsible-LPqGvfoz.js";var b=e(p(),1),x=m();function S({value:e,label:t}){let[a,o]=(0,b.useState)(!1),s=(0,b.useRef)(null);return(0,b.useEffect)(()=>()=>{s.current&&clearTimeout(s.current)},[]),(0,x.jsx)(y,{label:a?`Copied`:t,children:(0,x.jsx)(`button`,{type:`button`,"aria-label":t,className:f(i,`size-4`),onClick:()=>{navigator.clipboard&&navigator.clipboard.writeText(e).then(()=>{o(!0),s.current&&clearTimeout(s.current),s.current=setTimeout(()=>o(!1),1200)})},children:(0,x.jsx)(r,{icon:a?u:n,className:a?`size-3 text-emerald-600 dark:text-emerald-400`:`size-3`,"aria-hidden":!0})})})}function C(e){let t={};return e.typed.trim()!==e.phrase&&(t.typed=`Type ${e.phrase} to confirm`),e.reason.trim().length<3&&(t.reason=`Reason is required (min 3 characters)`),Object.keys(t).length>0?t:null}function w({open:e,onOpenChange:n,phrase:r,title:i,description:u,children:p,pending:m=!1,error:y,confirmLabel:S,confirmVariant:w=`destructive`,slot:T=`confirm-sheet`,onConfirm:E}){let[D,O]=(0,b.useState)(``),[k,A]=(0,b.useState)(``),[j,M]=(0,b.useState)(!1);(0,b.useEffect)(()=>{e||(O(``),A(``),M(!1))},[e]);let N=j?C({typed:D,reason:k,phrase:r}):null,P=C({typed:D,reason:k,phrase:r})===null;return(0,x.jsx)(o,{open:e,onOpenChange:n,children:(0,x.jsxs)(c,{side:`right`,showOverlay:!1,className:`sm:max-w-md`,"data-slot":T,children:[(0,x.jsxs)(s,{children:[(0,x.jsx)(d,{children:i}),(0,x.jsx)(l,{children:u})]}),(0,x.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto`,children:[p,(0,x.jsxs)(_,{label:`Type ${r} to confirm`,children:[(0,x.jsx)(t,{value:D,onChange:e=>O(e.target.value),onBlur:()=>M(!0),placeholder:r,"aria-label":`Type ${r} to confirm`,"aria-invalid":N?.typed?!0:void 0,flat:!0,className:f(v,`font-mono`),autoComplete:`off`}),N?.typed?(0,x.jsx)(`span`,{className:`block px-4 pb-2 text-[10px] text-destructive`,role:`alert`,children:N.typed}):null]}),(0,x.jsxs)(_,{label:`Reason`,children:[(0,x.jsx)(t,{value:k,onChange:e=>A(e.target.value),onBlur:()=>M(!0),placeholder:`Why is this change needed?`,"aria-label":`Reason`,"aria-invalid":N?.reason?!0:void 0,flat:!0,className:v}),N?.reason?(0,x.jsx)(`span`,{className:`block px-4 pb-2 text-[10px] text-destructive`,role:`alert`,children:N.reason}):null]}),y?(0,x.jsx)(g,{children:y}):null]}),(0,x.jsxs)(a,{children:[(0,x.jsx)(h,{split:!0,onClick:()=>n(!1),disabled:m,children:`Cancel`}),(0,x.jsx)(h,{variant:w,disabled:!P||m,onClick:()=>{M(!0),P&&E({confirmation:D.trim(),reason:k.trim()})},"data-slot":`confirm-action`,children:m?`Working…`:S??`Confirm ${r.toLowerCase()}`})]})]})})}export{S as n,w as t};
@@ -1,4 +1,4 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{r as t}from"./react-dom-Bph1y7z7.js";import{A as n}from"./xyflow-D7n4g6go.js";import{A as r,B as i,C as a,D as o,E as s,F as c,I as l,L as u,M as d,N as f,P as p,R as m,S as h,T as g,a as _,b as v,c as y,d as b,f as x,g as S,h as C,i as w,j as T,l as E,m as D,o as O,p as k,r as A,s as j,u as M,y as N,z as P}from"./react-B1ML8gxg.js";var ee=(e,t,n)=>{let r=t-e;return((n-e)%r+r)%r+e};function F(e,t){return r(e)?e[ee(0,e.length,t)]:e}var te=class{constructor(e){this.stop=()=>this.runAll(`stop`),this.animations=e.filter(Boolean)}get finished(){return Promise.all(this.animations.map(e=>e.finished))}getAll(e){return this.animations[0][e]}setAll(e,t){for(let n=0;n<this.animations.length;n++)this.animations[n][e]=t}attachTimeline(e){let t=this.animations.map(t=>t.attachTimeline(e));return()=>{t.forEach((e,t)=>{e&&e(),this.animations[t].stop()})}}get time(){return this.getAll(`time`)}set time(e){this.setAll(`time`,e)}get speed(){return this.getAll(`speed`)}set speed(e){this.setAll(`speed`,e)}get state(){return this.getAll(`state`)}get startTime(){return this.getAll(`startTime`)}get duration(){return I(this.animations,`duration`)}get iterationDuration(){return I(this.animations,`iterationDuration`)}runAll(e){this.animations.forEach(t=>t[e]())}play(){this.runAll(`play`)}pause(){this.runAll(`pause`)}cancel(){this.runAll(`cancel`)}complete(){this.runAll(`complete`)}};function I(e,t){let n=0;for(let r=0;r<e.length;r++){let i=e[r][t];i!==null&&i>n&&(n=i)}return n}var ne=class extends te{then(e,t){return this.finished.finally(e).then(()=>{})}};function re(e,t){return e in t}var L=class extends y{constructor(){super(...arguments),this.type=`object`}readValueFromInstance(e,t){if(re(t,e)){let n=e[t];if(typeof n==`string`||typeof n==`number`)return n}}getBaseTargetFromProps(){}removeValueFromRenderState(e,t){delete t.output[e]}measureInstanceViewportBox(){return M()}build(e,t){Object.assign(e.output,t)}renderInstance(e,{output:t}){Object.assign(e,t)}sortInstanceNodePosition(){return 0}},R=n(),z=e(t(),1);function B(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function ie(...e){return t=>{let n=!1,r=e.map(e=>{let r=B(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t<r.length;t++){let n=r[t];typeof n==`function`?n():B(e[t],null)}}}}function ae(...e){return z.useCallback(ie(...e),e)}var oe=class extends z.Component{getSnapshotBeforeUpdate(e){let t=this.props.childRef.current;if(k(t)&&e.isPresent&&!this.props.isPresent&&this.props.pop!==!1){let e=t.offsetParent,n=k(e)&&e.offsetWidth||0,r=k(e)&&e.offsetHeight||0,i=getComputedStyle(t),a=this.props.sizeRef.current;a.height=parseFloat(i.height),a.width=parseFloat(i.width),a.top=t.offsetTop,a.left=t.offsetLeft,a.right=n-a.width-a.left,a.bottom=r-a.height-a.top,a.direction=i.direction}return null}componentDidUpdate(){}render(){return this.props.children}};function se({children:e,isPresent:t,anchorX:n,anchorY:r,root:i,pop:a}){let o=(0,z.useId)(),s=(0,z.useRef)(null),c=(0,z.useRef)({width:0,height:0,top:0,left:0,right:0,bottom:0,direction:`ltr`}),{nonce:l}=(0,z.useContext)(w),u=ae(s,a===!1?void 0:e.props?.ref??e?.ref);return(0,z.useInsertionEffect)(()=>{let{width:e,height:u,top:d,left:f,right:p,bottom:m,direction:h}=c.current;if(t||a===!1||!s.current||!e||!u)return;let g=h===`rtl`,_=n===`left`?g?`right: ${p}`:`left: ${f}`:g?`left: ${f}`:`right: ${p}`,v=r===`bottom`?`bottom: ${m}`:`top: ${d}`;s.current.dataset.motionPopId=o;let y=document.createElement(`style`);l&&(y.nonce=l);let b=i??document.head;return b.appendChild(y),y.sheet&&y.sheet.insertRule(`
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{r as t}from"./react-dom-Bph1y7z7.js";import{A as n}from"./xyflow-D7n4g6go.js";import{A as r,B as i,C as a,D as o,E as s,F as c,I as l,L as u,M as d,N as f,P as p,R as m,S as h,T as g,a as _,b as v,c as y,d as b,f as x,g as S,h as C,i as w,j as T,l as E,m as D,o as O,p as k,r as A,s as j,u as M,y as N,z as P}from"./react-D8E3mtu1.js";var ee=(e,t,n)=>{let r=t-e;return((n-e)%r+r)%r+e};function F(e,t){return r(e)?e[ee(0,e.length,t)]:e}var te=class{constructor(e){this.stop=()=>this.runAll(`stop`),this.animations=e.filter(Boolean)}get finished(){return Promise.all(this.animations.map(e=>e.finished))}getAll(e){return this.animations[0][e]}setAll(e,t){for(let n=0;n<this.animations.length;n++)this.animations[n][e]=t}attachTimeline(e){let t=this.animations.map(t=>t.attachTimeline(e));return()=>{t.forEach((e,t)=>{e&&e(),this.animations[t].stop()})}}get time(){return this.getAll(`time`)}set time(e){this.setAll(`time`,e)}get speed(){return this.getAll(`speed`)}set speed(e){this.setAll(`speed`,e)}get state(){return this.getAll(`state`)}get startTime(){return this.getAll(`startTime`)}get duration(){return I(this.animations,`duration`)}get iterationDuration(){return I(this.animations,`iterationDuration`)}runAll(e){this.animations.forEach(t=>t[e]())}play(){this.runAll(`play`)}pause(){this.runAll(`pause`)}cancel(){this.runAll(`cancel`)}complete(){this.runAll(`complete`)}};function I(e,t){let n=0;for(let r=0;r<e.length;r++){let i=e[r][t];i!==null&&i>n&&(n=i)}return n}var ne=class extends te{then(e,t){return this.finished.finally(e).then(()=>{})}};function re(e,t){return e in t}var L=class extends y{constructor(){super(...arguments),this.type=`object`}readValueFromInstance(e,t){if(re(t,e)){let n=e[t];if(typeof n==`string`||typeof n==`number`)return n}}getBaseTargetFromProps(){}removeValueFromRenderState(e,t){delete t.output[e]}measureInstanceViewportBox(){return M()}build(e,t){Object.assign(e.output,t)}renderInstance(e,{output:t}){Object.assign(e,t)}sortInstanceNodePosition(){return 0}},R=n(),z=e(t(),1);function B(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function ie(...e){return t=>{let n=!1,r=e.map(e=>{let r=B(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t<r.length;t++){let n=r[t];typeof n==`function`?n():B(e[t],null)}}}}function ae(...e){return z.useCallback(ie(...e),e)}var oe=class extends z.Component{getSnapshotBeforeUpdate(e){let t=this.props.childRef.current;if(k(t)&&e.isPresent&&!this.props.isPresent&&this.props.pop!==!1){let e=t.offsetParent,n=k(e)&&e.offsetWidth||0,r=k(e)&&e.offsetHeight||0,i=getComputedStyle(t),a=this.props.sizeRef.current;a.height=parseFloat(i.height),a.width=parseFloat(i.width),a.top=t.offsetTop,a.left=t.offsetLeft,a.right=n-a.width-a.left,a.bottom=r-a.height-a.top,a.direction=i.direction}return null}componentDidUpdate(){}render(){return this.props.children}};function se({children:e,isPresent:t,anchorX:n,anchorY:r,root:i,pop:a}){let o=(0,z.useId)(),s=(0,z.useRef)(null),c=(0,z.useRef)({width:0,height:0,top:0,left:0,right:0,bottom:0,direction:`ltr`}),{nonce:l}=(0,z.useContext)(w),u=ae(s,a===!1?void 0:e.props?.ref??e?.ref);return(0,z.useInsertionEffect)(()=>{let{width:e,height:u,top:d,left:f,right:p,bottom:m,direction:h}=c.current;if(t||a===!1||!s.current||!e||!u)return;let g=h===`rtl`,_=n===`left`?g?`right: ${p}`:`left: ${f}`:g?`left: ${f}`:`right: ${p}`,v=r===`bottom`?`bottom: ${m}`:`top: ${d}`;s.current.dataset.motionPopId=o;let y=document.createElement(`style`);l&&(y.nonce=l);let b=i??document.head;return b.appendChild(y),y.sheet&&y.sheet.insertRule(`
2
2
  [data-motion-pop-id="${o}"] {
3
3
  position: absolute !important;
4
4
  width: ${e}px !important;
@@ -1 +1 @@
1
- import{Yn as e,wr as t}from"./shortcut-keys-DO4IsVqv.js";import{A as n}from"./xyflow-D7n4g6go.js";import{a as r,c as i,l as a,o,s}from"./collapsible-DYb0xU8C.js";var c=n();function l({icon:n,iconClassName:l,title:u,description:d,children:f,leading:p}){return(0,c.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[p?(0,c.jsx)(`header`,{className:e,children:(0,c.jsxs)(`div`,{className:`-ml-2 flex h-full shrink-0 items-stretch`,children:[p,(0,c.jsx)(`span`,{className:`w-px shrink-0 self-stretch bg-border/60`,"aria-hidden":!0})]})}):null,(0,c.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center p-6`,children:(0,c.jsxs)(r,{className:`border-0`,children:[(0,c.jsxs)(s,{children:[n?(0,c.jsx)(i,{variant:`icon`,className:l,children:(0,c.jsx)(t,{icon:n})}):null,(0,c.jsx)(a,{children:u}),d?(0,c.jsx)(o,{children:d}):null]}),f]})})]})}export{l as t};
1
+ import{Tr as e,Xn as t}from"./shortcut-keys-CoqwEIi0.js";import{A as n}from"./xyflow-D7n4g6go.js";import{a as r,c as i,l as a,o,s}from"./collapsible-LPqGvfoz.js";var c=n();function l({icon:n,iconClassName:l,title:u,description:d,children:f,leading:p}){return(0,c.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[p?(0,c.jsx)(`header`,{className:t,children:(0,c.jsxs)(`div`,{className:`-ml-2 flex h-full shrink-0 items-stretch`,children:[p,(0,c.jsx)(`span`,{className:`w-px shrink-0 self-stretch bg-border/60`,"aria-hidden":!0})]})}):null,(0,c.jsx)(`div`,{className:`flex min-h-0 flex-1 items-center justify-center p-6`,children:(0,c.jsxs)(r,{className:`border-0`,children:[(0,c.jsxs)(s,{children:[n?(0,c.jsx)(i,{variant:`icon`,className:l,children:(0,c.jsx)(e,{icon:n})}):null,(0,c.jsx)(a,{children:u}),d?(0,c.jsx)(o,{children:d}):null]}),f]})})]})}export{l as t};