okengine 0.21.1 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/AGENTS.md +11 -4
  2. package/LICENSE +202 -0
  3. package/NOTICE +2 -0
  4. package/README.md +15 -9
  5. package/manifest.v1.schema.json +54 -0
  6. package/package.json +53 -38
  7. package/site/content/docs/ai/mcp.mdx +13 -9
  8. package/site/content/docs/ai/skills.mdx +2 -2
  9. package/site/content/docs/client/calling.mdx +27 -19
  10. package/site/content/docs/client/index.mdx +1 -1
  11. package/site/content/docs/elements/ai/agents.mdx +61 -13
  12. package/site/content/docs/elements/ai/decide.mdx +536 -0
  13. package/site/content/docs/elements/ai/events.mdx +373 -0
  14. package/site/content/docs/elements/ai/index.mdx +9 -3
  15. package/site/content/docs/elements/ai/meta.json +1 -1
  16. package/site/content/docs/elements/ai/prompts.mdx +4 -2
  17. package/site/content/docs/elements/channel/email.mdx +1 -1
  18. package/site/content/docs/elements/channel/index.mdx +1 -1
  19. package/site/content/docs/elements/flow/http.mdx +4 -4
  20. package/site/content/docs/elements/flow/index.mdx +3 -3
  21. package/site/content/docs/elements/flow/meta.json +1 -1
  22. package/site/content/docs/elements/gate/auth.mdx +4 -1
  23. package/site/content/docs/elements/gate/tenancy.mdx +1 -1
  24. package/site/content/docs/elements/store/index.mdx +1 -1
  25. package/site/content/docs/elements/store/kv.mdx +5 -5
  26. package/site/content/docs/elements/vault/rotation.mdx +15 -0
  27. package/site/content/docs/plugins/otp.mdx +31 -31
  28. package/site/content/docs/recipes/dragonfly.mdx +5 -5
  29. package/site/content/docs/recipes/index.mdx +6 -6
  30. package/site/content/docs/recipes/mailpit.mdx +1 -1
  31. package/site/content/docs/recipes/meilisearch.mdx +1 -1
  32. package/site/content/docs/recipes/pgdog.mdx +1 -1
  33. package/site/content/docs/recipes/postgres.mdx +12 -8
  34. package/site/content/docs/recipes/redis.mdx +4 -4
  35. package/site/content/docs/reference/cli.mdx +2 -1
  36. package/site/content/docs/reference/configuration.mdx +11 -9
  37. package/site/content/docs/reference/errors.mdx +12 -2
  38. package/site/content/docs/reference/fx.mdx +35 -21
  39. package/site/content/docs/reference/idempotency.mdx +192 -0
  40. package/site/content/docs/reference/index.mdx +6 -1
  41. package/site/content/docs/reference/meta.json +2 -1
  42. package/site/content/docs/understand/meta.json +1 -1
  43. package/site/content/docs/{elements/flow → understand}/routing.mdx +11 -10
  44. package/site/content/docs/understand/the-architecture.mdx +14 -12
  45. package/site/content/docs/understand/try-it.mdx +3 -3
  46. package/src/auth/api-key-sql.test.ts +44 -0
  47. package/src/auth/api-key-sql.ts +1 -0
  48. package/src/auth/api-keys.ts +30 -12
  49. package/src/auth/config.ts +6 -2
  50. package/src/auth/gate-auth.test.ts +20 -0
  51. package/src/cli/agents-md.test.ts +25 -0
  52. package/src/cli/ask-vault-gaps.test.ts +38 -1
  53. package/src/cli/ask-vault-gaps.ts +35 -2
  54. package/src/cli/competitor-mention-removal.test.ts +3 -3
  55. package/src/cli/decide.ts +174 -0
  56. package/src/cli/decision-lock-watch.test.ts +45 -0
  57. package/src/cli/decision-lock-watch.ts +51 -0
  58. package/src/cli/dev-app-runner.ts +34 -8
  59. package/src/cli/dev-auth-secret.test.ts +49 -0
  60. package/src/cli/dev-auth-secret.ts +49 -0
  61. package/src/cli/dev-hot.test.ts +41 -0
  62. package/src/cli/dev-hot.ts +48 -0
  63. package/src/cli/dev.test.ts +1 -1
  64. package/src/cli/dev.ts +24 -6
  65. package/src/cli/docker-cli.test.ts +1 -1
  66. package/src/cli/eval.ts +142 -1
  67. package/src/cli/index.ts +14 -1
  68. package/src/cli/load-config.images.test.ts +12 -12
  69. package/src/cli/load-config.ts +2 -2
  70. package/src/cli/mcp-from-console.ts +48 -0
  71. package/src/cli/registry.ts +35 -1
  72. package/src/cli/vault-cmd.test.ts +23 -0
  73. package/src/cli/vault-cmd.ts +7 -0
  74. package/src/client/agent.ts +307 -0
  75. package/src/client/create.ts +18 -1
  76. package/src/client/transport.test.ts +245 -0
  77. package/src/client/transport.ts +133 -19
  78. package/src/client/types.ts +29 -3
  79. package/src/client-react/index.ts +7 -1
  80. package/src/client-react/use-agent-run.test.ts +271 -0
  81. package/src/client-react/use-agent-run.ts +193 -0
  82. package/src/compiler/ai-approval.test.ts +36 -0
  83. package/src/compiler/ai-repair.test.ts +22 -0
  84. package/src/compiler/decisions.extract.test.ts +164 -0
  85. package/src/compiler/effects-infer.ts +753 -17
  86. package/src/compiler/extract.test.ts +37 -0
  87. package/src/compiler/extract.ts +381 -24
  88. package/src/compiler/fixtures/skyport.expected.json +24 -0
  89. package/src/compiler/fx-follow.test.ts +164 -0
  90. package/src/compiler/fx-index.ts +399 -0
  91. package/src/compiler/response.ts +35 -2
  92. package/src/config/index.ts +21 -3
  93. package/src/console/server/ai-runs-flows.ts +269 -0
  94. package/src/console/server/ai-runs.test.ts +323 -0
  95. package/src/console/server/ai-runs.ts +562 -0
  96. package/src/console/server/ai.ts +12 -1
  97. package/src/console/server/app.ts +10 -1
  98. package/src/console/server/decisions-flows.ts +157 -0
  99. package/src/console/server/decisions.test.ts +66 -0
  100. package/src/console/server/decisions.ts +229 -0
  101. package/src/console/server/flows-invoke.test.ts +2 -2
  102. package/src/console/server/flows.ts +50 -2
  103. package/src/console/server/invoke-user-flow.ts +9 -0
  104. package/src/console/server/runs-ingest.ts +16 -0
  105. package/src/console/server/serve.ts +5 -0
  106. package/src/console/server/state.ts +25 -1
  107. package/src/console/server/store-stats.test.ts +47 -0
  108. package/src/console/server/store-stats.ts +92 -18
  109. package/src/console/ui-next/dist/assets/access-page-DDKkhT9v.js +4 -0
  110. package/src/console/ui-next/dist/assets/agent-disclosure-62Xts8Xi.js +1 -0
  111. package/src/console/ui-next/dist/assets/{cache-glyph-92uM5MO7.js → cache-glyph-DyeoKHKA.js} +1 -1
  112. package/src/console/ui-next/dist/assets/{call-pii-button-DtGVPtcs.js → call-pii-button-DvfpLXsU.js} +1 -1
  113. package/src/console/ui-next/dist/assets/{collapsible-DN7l6zmC.js → collapsible-BY03SeCg.js} +1 -1
  114. package/src/console/ui-next/dist/assets/confirm-sheet-DZfuJXP4.js +1 -0
  115. package/src/console/ui-next/dist/assets/copy-inline-button-BTjPVjRT.js +1 -0
  116. package/src/console/ui-next/dist/assets/decisions-page-CgkKlA56.js +1 -0
  117. package/src/console/ui-next/dist/assets/detail-header-Dk5LipF6.js +1 -0
  118. package/src/console/ui-next/dist/assets/dropdown-menu-CRGrj5JU.js +1 -0
  119. package/src/console/ui-next/dist/assets/duration-tone-Y6HLjyJ5.js +9 -0
  120. package/src/console/ui-next/dist/assets/element-icons-C6t8Vlml.js +1 -0
  121. package/src/console/ui-next/dist/assets/explorer-chrome-Dslh2yE8.js +1 -0
  122. package/src/console/ui-next/dist/assets/explorer-empty-CIVg7Jgb.js +1 -0
  123. package/src/console/ui-next/dist/assets/flows-page-DLPfNy-_.js +1 -0
  124. package/src/console/ui-next/dist/assets/{highlighted-json-BlAEVgNW.js → highlighted-json-D7nNzpgB.js} +1 -1
  125. package/src/console/ui-next/dist/assets/{http-method-BDf7OAHv.js → http-method-DdL19zzh.js} +1 -1
  126. package/src/console/ui-next/dist/assets/index-BlrN49Hs.css +2 -0
  127. package/src/console/ui-next/dist/assets/index-C0lc_s9d.js +58 -0
  128. package/src/console/ui-next/dist/assets/observability-page-CRlcyLCC.js +8 -0
  129. package/src/console/ui-next/dist/assets/{replica-lag-B3GLNVfF.js → replica-lag-Bb3FWUu9.js} +7 -7
  130. package/src/console/ui-next/dist/assets/request-meta-DYBMWhX8.js +1 -0
  131. package/src/console/ui-next/dist/assets/shortcut-keys-DTE1sjTC.js +1 -0
  132. package/src/console/ui-next/dist/assets/store-page-CcE-SXC8.js +41 -0
  133. package/src/console/ui-next/dist/assets/trace-detail-sheet-CKMSEQ4s.js +2 -0
  134. package/src/console/ui-next/dist/assets/tree-expand-toggle-QOfk0M0H.js +55 -0
  135. package/src/console/ui-next/dist/assets/units-page-DKC1CDDd.js +1 -0
  136. package/src/console/ui-next/dist/assets/use-vault-list-BAyQG8Re.js +1 -0
  137. package/src/console/ui-next/dist/assets/vault-page-B54v4Yit.js +2 -0
  138. package/src/console/ui-next/dist/index.html +4 -3
  139. package/src/console/ui-next/seed-parked-approval.ts +126 -0
  140. package/src/console/ui-next/src/client.ts +224 -1
  141. package/src/console/ui-next/src/components/explorer/detail-header.tsx +9 -0
  142. package/src/console/ui-next/src/components/explorer/explorer-start-toggle.tsx +5 -1
  143. package/src/console/ui-next/src/components/ui/sheet-form.tsx +21 -12
  144. package/src/console/ui-next/src/features/flows/decisions/decisions-page.tsx +216 -0
  145. package/src/console/ui-next/src/features/flows/decisions/resolve.test.ts +48 -0
  146. package/src/console/ui-next/src/features/flows/decisions/resolve.ts +111 -0
  147. package/src/console/ui-next/src/features/flows/flows-page.tsx +10 -0
  148. package/src/console/ui-next/src/features/flows/graph/element-map.ts +1 -0
  149. package/src/console/ui-next/src/features/flows/traces/effect-kind.ts +6 -0
  150. package/src/console/ui-next/src/features/flows/traces/effect-summary.test.ts +24 -0
  151. package/src/console/ui-next/src/features/flows/traces/effect-summary.ts +24 -0
  152. package/src/console/ui-next/src/features/flows/traces/http-status.ts +58 -0
  153. package/src/console/ui-next/src/features/flows/traces/request-client-card.tsx +355 -0
  154. package/src/console/ui-next/src/features/flows/traces/request-client.test.ts +114 -0
  155. package/src/console/ui-next/src/features/flows/traces/request-client.ts +423 -0
  156. package/src/console/ui-next/src/features/flows/traces/request-input-view.test.ts +52 -6
  157. package/src/console/ui-next/src/features/flows/traces/request-input-view.ts +85 -19
  158. package/src/console/ui-next/src/features/flows/traces/trace-detail-sheet.tsx +505 -80
  159. package/src/console/ui-next/src/features/flows/traces/trace-lanes.test.ts +61 -0
  160. package/src/console/ui-next/src/features/flows/traces/trace-lanes.ts +78 -0
  161. package/src/console/ui-next/src/features/flows/traces/trace-nav.test.ts +48 -0
  162. package/src/console/ui-next/src/features/flows/traces/trace-nav.ts +57 -0
  163. package/src/console/ui-next/src/features/flows/traces/trace-request-section.tsx +275 -96
  164. package/src/console/ui-next/src/features/flows/traces/traces-pane.tsx +16 -2
  165. package/src/console/ui-next/src/features/observability/detail/ai-runs.tsx +369 -0
  166. package/src/console/ui-next/src/features/observability/observability-page.tsx +31 -1
  167. package/src/console/ui-next/src/features/observability/state/observability-selection.ts +18 -3
  168. package/src/console/ui-next/src/features/store/performance/kv-performance-panel.tsx +12 -1
  169. package/src/console/ui-next/src/features/store/performance/performance-panel.tsx +14 -1
  170. package/src/console/ui-next/src/features/units/call/call-api-panel.tsx +1 -1
  171. package/src/console/ui-next/src/features/units/detail/flow-contract-panel.tsx +15 -2
  172. package/src/console/ui-next/src/features/units/explorer/units-tree.tsx +73 -18
  173. package/src/console/ui-next/src/features/units/lib/unit-tree.test.ts +21 -0
  174. package/src/console/ui-next/src/features/units/lib/unit-tree.ts +82 -0
  175. package/src/console/ui-next/src/features/units/units-page.tsx +25 -7
  176. package/src/console/ui-next/src/router.tsx +17 -0
  177. package/src/console/ui-next/ui-next-seed-runs.ts +23 -0
  178. package/src/console/ui-next/vite-console-kernel-plugin.ts +43 -3
  179. package/src/console/ui-next/vite.config.ts +9 -0
  180. package/src/docker/docker.test.ts +13 -13
  181. package/src/docker/images-config.test.ts +12 -12
  182. package/src/docker/recipes/dragonfly.ts +3 -2
  183. package/src/docker/recipes/redis.ts +1 -1
  184. package/src/docker/stack-id.test.ts +1 -1
  185. package/src/drivers/ai-anthropic.ts +212 -21
  186. package/src/drivers/ai-mock.ts +34 -1
  187. package/src/drivers/ai-openai-compatible.ts +67 -26
  188. package/src/drivers/ai-preconnect.ts +18 -0
  189. package/src/drivers/ai-stream.test.ts +62 -0
  190. package/src/drivers/ai-types.ts +20 -0
  191. package/src/drivers/journal-postgres.ts +455 -3
  192. package/src/drivers/meilisearch.ts +2 -0
  193. package/src/drivers/memory-ddl.test.ts +18 -0
  194. package/src/drivers/memory.ts +21 -1
  195. package/src/drivers/pg-rls.test.ts +31 -0
  196. package/src/drivers/pg-rls.ts +15 -0
  197. package/src/drivers/postgres.test.ts +9 -0
  198. package/src/drivers/postgres.ts +49 -11
  199. package/src/drivers/vault-builtin.test.ts +10 -0
  200. package/src/drivers/vault-builtin.ts +13 -1
  201. package/src/drivers/vault-remote-bag.ts +5 -1
  202. package/src/drivers/vault-types.ts +6 -1
  203. package/src/elements/ai/agent-event-slot.ts +27 -0
  204. package/src/elements/ai/approval-http.ts +207 -0
  205. package/src/elements/ai/approval.test.ts +741 -0
  206. package/src/elements/ai/approval.ts +228 -0
  207. package/src/elements/ai/decisions/bind.ts +163 -0
  208. package/src/elements/ai/decisions/certificate.test.ts +291 -0
  209. package/src/elements/ai/decisions/certificate.ts +377 -0
  210. package/src/elements/ai/decisions/certify.ts +314 -0
  211. package/src/elements/ai/decisions/decide.test.ts +953 -0
  212. package/src/elements/ai/decisions/e2e.test.ts +399 -0
  213. package/src/elements/ai/decisions/export.test.ts +120 -0
  214. package/src/elements/ai/decisions/export.ts +146 -0
  215. package/src/elements/ai/decisions/fixtures/openrouter-request.json +24 -0
  216. package/src/elements/ai/decisions/fixtures/openrouter-response.json +22 -0
  217. package/src/elements/ai/decisions/fixtures/typesafe-request.json +19 -0
  218. package/src/elements/ai/decisions/fixtures/typesafe-response.json +13 -0
  219. package/src/elements/ai/decisions/http.test.ts +154 -0
  220. package/src/elements/ai/decisions/http.ts +240 -0
  221. package/src/elements/ai/decisions/labels.test.ts +282 -0
  222. package/src/elements/ai/decisions/labels.ts +257 -0
  223. package/src/elements/ai/decisions/openrouter.live.test.ts +136 -0
  224. package/src/elements/ai/decisions/openrouter.ts +36 -0
  225. package/src/elements/ai/decisions/provider.ts +102 -0
  226. package/src/elements/ai/decisions/typesafe.ts +36 -0
  227. package/src/elements/ai/declare.ts +252 -1
  228. package/src/elements/ai/events.test.ts +379 -0
  229. package/src/elements/ai/events.ts +138 -0
  230. package/src/elements/ai/run-events.test.ts +461 -0
  231. package/src/elements/ai/run-events.ts +522 -0
  232. package/src/elements/ai/runtime.ts +1186 -105
  233. package/src/elements/ai/stream-turn.ts +214 -0
  234. package/src/elements/ai/stream.live.test.ts +76 -0
  235. package/src/elements/ai/subagent.test.ts +136 -0
  236. package/src/elements/ai.test.ts +497 -3
  237. package/src/elements/ai.ts +16 -1
  238. package/src/elements/clock/durable.ts +27 -1
  239. package/src/elements/store/emit-drizzle.ts +2 -2
  240. package/src/elements/store/live-default.test.ts +2 -0
  241. package/src/elements/store/live-http.test.ts +1 -0
  242. package/src/elements/store/resource-list-docs.test.ts +2 -2
  243. package/src/elements/store/resource.test.ts +3 -3
  244. package/src/elements/store/schema-decl.test.ts +1 -0
  245. package/src/elements/store/sql-condition.ts +24 -7
  246. package/src/elements/store/sql-session.test.ts +51 -0
  247. package/src/elements/store/sql-session.ts +111 -1
  248. package/src/elements/store/upsert-app.test.ts +1 -1
  249. package/src/elements/vault/audit.test.ts +137 -0
  250. package/src/elements/vault/audit.ts +106 -13
  251. package/src/elements/vault/boot-chain.ts +9 -1
  252. package/src/elements/vault/builtin-adapter.ts +33 -3
  253. package/src/i18n/catalogs/ar.ts +9 -0
  254. package/src/i18n/catalogs/en.ts +9 -0
  255. package/src/index.ts +2 -0
  256. package/src/kernel/abort-scope.ts +33 -2
  257. package/src/kernel/agent-event-store.ts +448 -0
  258. package/src/kernel/app.ts +294 -19
  259. package/src/kernel/auto-cache.test.ts +6 -6
  260. package/src/kernel/boot-bind/ai.ts +3 -0
  261. package/src/kernel/boot-bind/store.test.ts +26 -0
  262. package/src/kernel/boot-bind/store.ts +82 -6
  263. package/src/kernel/boot-bind/vault.ts +1 -0
  264. package/src/kernel/boot.ts +34 -5
  265. package/src/kernel/builtin-errors.ts +10 -0
  266. package/src/kernel/capability.ts +3 -0
  267. package/src/kernel/client-descriptor.ts +1 -0
  268. package/src/kernel/concurrency.test.ts +33 -0
  269. package/src/kernel/decision-label-store.ts +441 -0
  270. package/src/kernel/effects-stamping.test.ts +2 -2
  271. package/src/kernel/effects.test.ts +2 -1
  272. package/src/kernel/effects.ts +13 -1
  273. package/src/kernel/element-registries.ts +3 -0
  274. package/src/kernel/errors-compiler.ts +20 -0
  275. package/src/kernel/errors-text.ts +4 -0
  276. package/src/kernel/errors.ts +2 -0
  277. package/src/kernel/external-effects.test.ts +36 -0
  278. package/src/kernel/flow.test.ts +2 -3
  279. package/src/kernel/flow.ts +24 -0
  280. package/src/kernel/fx-decide.ts +761 -0
  281. package/src/kernel/fx-fetch.ts +5 -1
  282. package/src/kernel/fx.test.ts +12 -5
  283. package/src/kernel/fx.ts +316 -29
  284. package/src/kernel/http-frame.test.ts +94 -0
  285. package/src/kernel/http-frame.ts +203 -0
  286. package/src/kernel/idempotency-store.ts +578 -0
  287. package/src/kernel/idempotency.test.ts +556 -0
  288. package/src/kernel/idempotency.ts +304 -0
  289. package/src/kernel/index.ts +1 -0
  290. package/src/kernel/journal.ts +160 -0
  291. package/src/kernel/json-result.ts +10 -0
  292. package/src/kernel/pipeline.test.ts +45 -0
  293. package/src/kernel/sse-id.ts +32 -0
  294. package/src/manifest/diff.ts +1 -0
  295. package/src/manifest/types.ts +37 -2
  296. package/src/mcp/ai-tools.test.ts +202 -0
  297. package/src/mcp/authorization.ts +66 -0
  298. package/src/mcp/session.ts +3 -0
  299. package/src/mcp/tools.ts +168 -0
  300. package/src/plugins/auth-delivery.mailpit.integration.test.ts +1 -1
  301. package/src/plugins/otp.test.ts +65 -1
  302. package/src/plugins/otp.ts +59 -7
  303. package/src/release/absolute-regression.test.ts +63 -0
  304. package/src/release/http-graph.test.ts +27 -0
  305. package/src/release/http-graph.ts +95 -0
  306. package/src/release/index.ts +3 -0
  307. package/src/release/limits.ts +17 -2
  308. package/src/release/measure.ts +144 -28
  309. package/src/runs/collect.ts +4 -1
  310. package/src/runs/parquet.test.ts +27 -1
  311. package/src/runs/parquet.ts +19 -0
  312. package/src/runs/types.ts +31 -0
  313. package/src/runtime/json-code-block.test.ts +106 -47
  314. package/src/runtime/json-code-block.ts +1209 -46
  315. package/src/term.test.ts +13 -0
  316. package/src/term.ts +81 -49
  317. package/src/test/create-test-app.test.ts +3 -1
  318. package/src/test/create-test-app.ts +40 -0
  319. package/src/test/live-signals.test.ts +1 -0
  320. package/src/test/provisions.integration.test.ts +1 -0
  321. package/src/test/tenant-isolation.test.ts +1 -0
  322. package/src/console/ui-next/dist/assets/PlusSignIcon-CwG3nxfu.js +0 -1
  323. package/src/console/ui-next/dist/assets/access-page-Bgt9bq2r.js +0 -4
  324. package/src/console/ui-next/dist/assets/agent-disclosure-B43CXZZR.js +0 -1
  325. package/src/console/ui-next/dist/assets/copy-inline-button-CAYD18cr.js +0 -1
  326. package/src/console/ui-next/dist/assets/detail-header-DVWNjWjg.js +0 -1
  327. package/src/console/ui-next/dist/assets/dropdown-menu-4h2LOVXM.js +0 -1
  328. package/src/console/ui-next/dist/assets/duration-tone-BmIR9FV8.js +0 -9
  329. package/src/console/ui-next/dist/assets/element-icons-BI8cJgdh.js +0 -1
  330. package/src/console/ui-next/dist/assets/explorer-empty-CJs5A-wm.js +0 -1
  331. package/src/console/ui-next/dist/assets/flows-page-BMHs-IzK.js +0 -1
  332. package/src/console/ui-next/dist/assets/index-BKpaes3n.js +0 -63
  333. package/src/console/ui-next/dist/assets/index-VxoEz295.css +0 -2
  334. package/src/console/ui-next/dist/assets/observability-page-WnVLI-0j.js +0 -4
  335. package/src/console/ui-next/dist/assets/request-meta-DMbnAe3f.js +0 -1
  336. package/src/console/ui-next/dist/assets/shortcut-keys-3ILd8oGn.js +0 -1
  337. package/src/console/ui-next/dist/assets/store-page-KvFDingJ.js +0 -41
  338. package/src/console/ui-next/dist/assets/trace-detail-sheet-Htk8Cm9t.js +0 -2
  339. package/src/console/ui-next/dist/assets/tree-expand-toggle-CFMPWX4f.js +0 -55
  340. package/src/console/ui-next/dist/assets/units-page-C4NdNuxP.js +0 -1
  341. package/src/console/ui-next/dist/assets/use-vault-list-CT4-gajj.js +0 -1
  342. package/src/console/ui-next/dist/assets/vault-page-CBYl0LW_.js +0 -2
package/src/term.test.ts CHANGED
@@ -108,6 +108,19 @@ describe("term", () => {
108
108
  expect(chunks.join("")).toBe("one\ntwo\nCLAIM\n");
109
109
  });
110
110
 
111
+ test("createAnchoredBoard defers paint while held", () => {
112
+ const chunks: string[] = [];
113
+ const board = createAnchoredBoard((t) => {
114
+ chunks.push(t);
115
+ }, true);
116
+ board.paint("A\n");
117
+ board.hold();
118
+ board.paint("A\nB\n");
119
+ expect(chunks.join("")).toBe("A\n");
120
+ board.release();
121
+ expect(chunks.join("")).toContain("B");
122
+ });
123
+
111
124
  test("createAnchoredBoard inserts rows when the board grows under output", () => {
112
125
  const chunks: string[] = [];
113
126
  const board = createAnchoredBoard((t) => {
package/src/term.ts CHANGED
@@ -396,6 +396,13 @@ export type AnchoredBoard = {
396
396
  readonly reset: () => void;
397
397
  /** Disable further in-place rewrites (session end). */
398
398
  readonly stop: () => void;
399
+ /**
400
+ * Ignore {@link paint} until {@link release}. Used while a prompt owns
401
+ * the cursor on an open line (secret entry).
402
+ */
403
+ readonly hold: () => void;
404
+ /** Apply the newest paint skipped while held. */
405
+ readonly release: () => void;
399
406
  };
400
407
 
401
408
  /**
@@ -430,64 +437,89 @@ export function createAnchoredBoard(
430
437
  let boardLines = 0;
431
438
  let belowLines = 0;
432
439
  let stopped = false;
440
+ let held = false;
441
+ let pending: string | null = null;
433
442
  let lastBody = "";
434
443
 
435
- return {
436
- paint(text: string) {
437
- if (stopped) return;
438
- const body = text.endsWith("\n") ? text : `${text}\n`;
439
- const nextLines = countTermLines(body);
440
- if (!enabled) {
441
- if (boardLines === 0) {
442
- write(body);
443
- } else if (body !== lastBody) {
444
- const tail = grownBoardTail(lastBody, body);
445
- if (tail.length > 0) write(tail);
446
- }
447
- boardLines = nextLines;
448
- lastBody = body;
449
- return;
450
- }
444
+ const paintBody = (text: string): void => {
445
+ if (stopped) return;
446
+ const body = text.endsWith("\n") ? text : `${text}\n`;
447
+ const nextLines = countTermLines(body);
448
+ if (!enabled) {
451
449
  if (boardLines === 0) {
452
450
  write(body);
453
- boardLines = nextLines;
454
- lastBody = body;
455
- return;
456
- }
457
- if (body === lastBody) return;
458
- const grew = nextLines - boardLines;
459
- // Cursor sits after the below-board output. Move onto the first
460
- // below line (or stay after the board when nothing is below).
461
- if (belowLines > 0) write(`\x1b[${belowLines}A`);
462
- if (grew > 0 && belowLines > 0) {
463
- write(`\x1b[${grew}L`);
451
+ } else if (body !== lastBody) {
452
+ const tail = grownBoardTail(lastBody, body);
453
+ if (tail.length > 0) write(tail);
464
454
  }
465
- eraseTermLines(write, boardLines);
455
+ boardLines = nextLines;
456
+ lastBody = body;
457
+ return;
458
+ }
459
+ if (boardLines === 0) {
466
460
  write(body);
467
- if (grew < 0 && belowLines > 0) {
468
- write(`\x1b[${-grew}M`);
469
- }
470
- if (belowLines > 0) write(`\x1b[${belowLines}B`);
471
461
  boardLines = nextLines;
472
462
  lastBody = body;
473
- },
474
- wrapWrite(inner: (text: string) => void) {
475
- return (text: string) => {
476
- if (!stopped && enabled && boardLines > 0) {
477
- belowLines += countTermLines(text);
478
- }
479
- inner(text);
480
- };
481
- },
482
- reset() {
483
- boardLines = 0;
484
- belowLines = 0;
485
- lastBody = "";
486
- },
487
- stop() {
488
- stopped = true;
489
- },
463
+ return;
464
+ }
465
+ if (body === lastBody) return;
466
+ const grew = nextLines - boardLines;
467
+ // Cursor sits after the below-board output. Move onto the first
468
+ // below line (or stay after the board when nothing is below).
469
+ if (belowLines > 0) write(`\x1b[${belowLines}A`);
470
+ if (grew > 0 && belowLines > 0) {
471
+ write(`\x1b[${grew}L`);
472
+ }
473
+ eraseTermLines(write, boardLines);
474
+ write(body);
475
+ if (grew < 0 && belowLines > 0) {
476
+ write(`\x1b[${-grew}M`);
477
+ }
478
+ if (belowLines > 0) write(`\x1b[${belowLines}B`);
479
+ boardLines = nextLines;
480
+ lastBody = body;
481
+ };
482
+
483
+ const paint = (text: string): void => {
484
+ if (held) {
485
+ pending = text;
486
+ return;
487
+ }
488
+ paintBody(text);
489
+ };
490
+
491
+ const wrapWrite = (inner: (text: string) => void): ((text: string) => void) => {
492
+ return (text: string) => {
493
+ if (!stopped && enabled && boardLines > 0) {
494
+ belowLines += countTermLines(text);
495
+ }
496
+ inner(text);
497
+ };
498
+ };
499
+
500
+ const reset = (): void => {
501
+ boardLines = 0;
502
+ belowLines = 0;
503
+ lastBody = "";
504
+ };
505
+
506
+ const stop = (): void => {
507
+ stopped = true;
490
508
  };
509
+
510
+ const hold = (): void => {
511
+ held = true;
512
+ };
513
+
514
+ const release = (): void => {
515
+ held = false;
516
+ if (pending === null) return;
517
+ const next = pending;
518
+ pending = null;
519
+ paintBody(next);
520
+ };
521
+
522
+ return { paint, wrapWrite, reset, stop, hold, release };
491
523
  }
492
524
 
493
525
  /**
@@ -81,6 +81,7 @@ describe("createTestApp — four-applications surface", () => {
81
81
  });
82
82
 
83
83
  const t = await createTestApp(app, {
84
+ capability: "open",
84
85
  gates: [member],
85
86
  signals: [orderPlaced],
86
87
  boot: {
@@ -116,7 +117,7 @@ describe("createTestApp — four-applications surface", () => {
116
117
  resetBindings();
117
118
  resetFlowSeq();
118
119
  const app = oke({ name: "ai-harness", env: "test" });
119
- const t = await createTestApp(app);
120
+ const t = await createTestApp(app, { capability: "open" });
120
121
  t.ai.mock("ticket-triage", { urgency: "high", team: "ops" });
121
122
  expect(t.ai.cost()).toBeLessThan(0.02);
122
123
  await t.close();
@@ -131,6 +132,7 @@ describe("createTestApp — vault gaps still fail boot", () => {
131
132
 
132
133
  try {
133
134
  await createTestApp(app, {
135
+ capability: "open",
134
136
  secrets: [vault("A", { description: "alpha" }), vault("B", { description: "beta" })],
135
137
  boot: {
136
138
  env: "prod",
@@ -14,6 +14,7 @@
14
14
  * ```
15
15
  */
16
16
 
17
+ import { stat } from "node:fs/promises";
17
18
  import {
18
19
  createMockAiDriver,
19
20
  createChannelInbox,
@@ -29,6 +30,7 @@ import type { GateDecl } from "../elements/gate.ts";
29
30
  import { flattenGatePolicies } from "../elements/gate/config.ts";
30
31
  import type { SignalDecl } from "../elements/signal.ts";
31
32
  import type { VaultSecretDecl } from "../elements/vault.ts";
33
+ import { extractManifest } from "../compiler/extract.ts";
32
34
  import type { OkeApp } from "../kernel/app.ts";
33
35
  import type { BootOptions } from "../kernel/boot.ts";
34
36
  import type { EffectEntry } from "../kernel/effects.ts";
@@ -212,6 +214,26 @@ export interface CreateTestAppOptions {
212
214
  readonly vaultSecrets?: Readonly<Record<string, string>>;
213
215
  /** Start the background scheduler (default false). */
214
216
  readonly startScheduler?: boolean;
217
+ /**
218
+ * `manifest` (default) extracts the app and stamps capability tokens.
219
+ * `open` keeps an ungated token for inline flows that are not an app.
220
+ */
221
+ readonly capability?: "manifest" | "open";
222
+ }
223
+
224
+ /**
225
+ * True when `dir` is an app tree (`oke.config.ts` or `src/flows`).
226
+ *
227
+ * @param dir - Candidate root
228
+ */
229
+ async function isTestAppRoot(dir: string): Promise<boolean> {
230
+ if (await Bun.file(`${dir}/oke.config.ts`).exists()) return true;
231
+ try {
232
+ const info = await stat(`${dir}/src/flows`);
233
+ return info.isDirectory();
234
+ } catch {
235
+ return false;
236
+ }
215
237
  }
216
238
 
217
239
  /**
@@ -270,8 +292,26 @@ export async function createTestApp<App extends OkeApp>(
270
292
  };
271
293
  const rawGates = options.gates ?? options.boot?.gates ?? appOpts.gate?.policies;
272
294
 
295
+ const capability = options.capability ?? "manifest";
296
+ let manifest = options.boot?.manifest;
297
+ let rootDir = options.boot?.rootDir;
298
+ if (capability === "manifest" && manifest === undefined) {
299
+ const explicit = rootDir ?? process.env["OKE_ROOT_DIR"];
300
+ const discovered =
301
+ explicit ?? ((await isTestAppRoot(process.cwd())) ? process.cwd() : undefined);
302
+ if (!discovered) {
303
+ throw new Error(
304
+ 'createTestApp: no app root. Pass capability: "open" for inline flows, or rootDir for an app tree.',
305
+ );
306
+ }
307
+ rootDir = discovered;
308
+ manifest = await extractManifest({ rootDir: discovered });
309
+ }
310
+
273
311
  await app.boot({
274
312
  ...(options.boot ?? {}),
313
+ ...(capability === "manifest" && rootDir !== undefined ? { rootDir } : {}),
314
+ ...(capability === "manifest" && manifest !== undefined ? { manifest } : {}),
275
315
  env: "test",
276
316
  config,
277
317
  // Test-only opt-out (honoured because env is "test" below). Production
@@ -41,6 +41,7 @@ describe("createTestApp live-signal subscriptions", () => {
41
41
  });
42
42
 
43
43
  const t = await createTestApp(app, {
44
+ capability: "open",
44
45
  signals: [orderStatus],
45
46
  });
46
47
 
@@ -111,6 +111,7 @@ describe("Provisions integration", () => {
111
111
  app.adopt(chargeOrder);
112
112
 
113
113
  const t = await createTestApp(app, {
114
+ capability: "open",
114
115
  gates: [member, canOrder],
115
116
  secrets: [stripeKey],
116
117
  signals: [orderPlaced, orderNews],
@@ -86,6 +86,7 @@ describe("createTestApp tenancy testing & RLS isolation", () => {
86
86
  });
87
87
 
88
88
  const t = await createTestApp(app, {
89
+ capability: "open",
89
90
  gates: [memberGate],
90
91
  boot: {
91
92
  config: {
@@ -1 +0,0 @@
1
- var e=[[`path`,{d:`M12 4V20M20 12H4`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:`1.5`,key:`0`}]];export{e as t};
@@ -1,4 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{r as t}from"./react-dom-Ddte4I-Q.js";import{A as n}from"./xyflow-yApv7D4e.js";import{Cr as r,Dr as i,E as a,Er as o,F as s,Fr as c,I as l,Ir as u,Lr as d,Nr as f,Pr as p,R as m,Rr as h,Sr as g,Tr as _,Vr as v,Yi as y,_r as b,ar as x,br as S,c as C,cr as w,dr as T,ha as ee,i as E,kr as D,l as O,lr as k,mr as A,nr as j,o as M,pr as N,rr as P,s as F,sr as I,tr as L,u as te,ur as R,vr as z,wr as B,x as V,xr as H}from"./shortcut-keys-3ILd8oGn.js";import{i as ne,t as re}from"./http-method-BDf7OAHv.js";import{a as ie,c as ae,h as oe,i as se,n as ce,o as le,r as ue,s as U,t as de}from"./element-icons-BI8cJgdh.js";import{t as fe}from"./UserIcon-DaE2PB5_.js";import{t as pe}from"./PlusSignIcon-CwG3nxfu.js";import{bt as W,ct as me,it as he}from"./index-BKpaes3n.js";import{t as ge}from"./explorer-empty-CJs5A-wm.js";import{a as G,c as _e,l as K,n as q,o as ve,r as ye,s as be,t as xe}from"./detail-header-DVWNjWjg.js";import{n as Se,t as J}from"./copy-inline-button-CAYD18cr.js";var Ce=[[`path`,{d:`M5 21H19`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:`1.5`,key:`0`}],[`path`,{d:`M12.125 12.75H12M12.25 12.75C12.25 12.8881 12.1381 13 12 13C11.8619 13 11.75 12.8881 11.75 12.75C11.75 12.6119 11.8619 12.5 12 12.5C12.1381 12.5 12.25 12.6119 12.25 12.75Z`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:`1.5`,key:`1`}],[`path`,{d:`M14.9152 7.61089L13.8078 5.38179C13.019 3.79393 12.6246 3 12 3C11.3754 3 10.981 3.79393 10.1922 5.38179L9.08483 7.61089C8.58107 8.62494 8.32919 9.13197 7.87976 9.24608C7.8485 9.25401 7.81689 9.26043 7.78503 9.26533C7.32682 9.3357 6.89919 8.96678 6.04393 8.22895C4.0124 6.47635 2.99663 5.60004 2.38034 5.94899C2.34045 5.97157 2.30213 5.99686 2.26565 6.02467C1.70197 6.45439 2.09541 7.74136 2.88229 10.3153L4.04783 14.1279C4.47098 15.5121 4.68255 16.2042 5.21787 16.6021C5.75318 17 6.47261 17 7.91147 17L16.0886 16.9999C17.5274 16.9999 18.2468 16.9999 18.7821 16.602C19.3175 16.2041 19.529 15.512 19.9522 14.1279L21.1177 10.3153C21.9046 7.74137 22.298 6.4544 21.7344 6.02468C21.6979 5.99687 21.6595 5.97158 21.6197 5.94899C21.0034 5.60006 19.9876 6.47636 17.9561 8.22896C17.1008 8.96679 16.6732 9.3357 16.215 9.26533C16.1831 9.26043 16.1515 9.25401 16.1202 9.24607C15.6708 9.13197 15.4189 8.62494 14.9152 7.61089Z`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:`1.5`,key:`2`}]],Y=e(t(),1);function we(e,t){if(e==null)return`never`;let n=e-t;if(Math.abs(n)<6e4)return`just now`;let r=Ee(Math.abs(n));return n<0?`${r} ago`:`in ${r}`}function Te(e,t){return e==null?`never`:e<=t?`expired`:we(e,t)}function Ee(e){if(e<36e5)return`${Math.floor(e/6e4)}m`;if(e<864e5)return`${Math.floor(e/36e5)}h`;let t=Math.floor(e/864e5);return t<100?`${t}d`:`${Math.floor(t/30)}mo`}var X=864e5;function De(e){let t=/^(\d+)(ms|s|m|h|d)$/.exec(e.trim());if(!t)return 0;let n=Number(t[1]);switch(t[2]){case`ms`:return n;case`s`:return n*1e3;case`m`:return n*6e4;case`h`:return n*36e5;case`d`:return n*X;default:return 0}}function Oe(e,t,n=``){if(e===`never`)return null;if(e===`30d`)return t+30*X;if(e===`90d`)return t+90*X;let r=De(n);return r>0?t+r:null}var Z=36e5;function ke(e,t){if(e==null)return{choice:`never`,custom:``};let n=e-t;return n<=0?{choice:`never`,custom:``}:Math.abs(n-30*X)<Z?{choice:`30d`,custom:``}:Math.abs(n-90*X)<Z?{choice:`90d`,custom:``}:{choice:`custom`,custom:Me(n)}}var Ae=7*X;function je(e,t){if(e==null||e<=t)return{choice:`90d`,custom:``};let n=e-t;return Math.abs(n-30*X)<=Ae?{choice:`30d`,custom:``}:Math.abs(n-90*X)<=Ae?{choice:`90d`,custom:``}:{choice:`custom`,custom:Me(n)}}function Me(e){return e<=0?``:e>=X&&e%X===0?`${e/X}d`:e>=Z&&e%Z===0?`${e/Z}h`:e>=6e4&&e%6e4==0?`${e/6e4}m`:e>=X?`${Math.max(1,Math.round(e/X))}d`:e>=Z?`${Math.max(1,Math.round(e/Z))}h`:`${Math.max(1,Math.round(e/6e4))}m`}var Ne=[`s`,`m`,`h`,`d`,`ms`],Pe={s:`Seconds`,m:`Minutes`,h:`Hours`,d:`Days`,ms:`Milliseconds`};function Fe(e,t,n){let r=e.trim(),i=t.trim();if(r.length===0&&i.length===0)return null;if(r.length===0||i.length===0||!/^\d+$/.test(r)||!/^\d+$/.test(i))return;let a=Number(r),o=Number(i);if(a<=0||o<=0)return;let s=`${o}${n}`;if(!(De(s)<=0))return{max:a,per:s}}function Ie(e){let t=/^(\d+)(ms|s|m|h|d)$/.exec(e.trim());return t?{count:t[1],unit:t[2]}:{count:``,unit:`m`}}function Le(e){let t=ze(e);return t.length===0?null:Be(t)?`ip`:Ve(t)?`host`:null}function Re(e){let t=new Set,n=[];for(let r of e.split(/[\s,]+/)){let e=ze(r);e.length===0||t.has(e)||Le(e)!=null&&(t.add(e),n.push(e))}return n}function ze(e){let t=e.trim().toLowerCase();if(t=t.replace(/^https?:\/\//,``),t.startsWith(`[`)&&t.includes(`]`)){let e=t.indexOf(`]`),n=t.slice(1,e),r=t.slice(e+1);t=r.startsWith(`:`)||r.startsWith(`/`)?n:`${n}${r}`}let n=t.indexOf(`/`);return n>=0&&(t=t.slice(0,n)),t.endsWith(`.`)&&(t=t.slice(0,-1)),t}function Be(e){return/^\d{1,3}(?:\.\d{1,3}){3}$/.test(e)?e.split(`.`).every(e=>Number(e)<=255):!e.includes(`:`)||!/^[0-9a-f:]+$/.test(e)||e.split(`::`).length>2?!1:e.split(`:`).filter(e=>e.length>0).length>=1}function Ve(e){if(e===`localhost`)return!0;if(e.length>253||e.includes(`:`))return!1;let t=e.split(`.`);return t.length<2?!1:t.every((e,n)=>!(e.length===0||e.length>63||!/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/.test(e)||n===t.length-1&&!/^[a-z]{2,63}$/.test(e)))}function He(e){let t=[],n=new Map;for(let r of e){let e=r.indexOf(`:`),i=e<=0?r:r.slice(0,e),a=e<=0?r:r.slice(e+1),o=n.get(i);if(o){o.push({scope:r,action:a});continue}t.push(i),n.set(i,[{scope:r,action:a}])}return t.map(e=>({group:e,items:n.get(e)??[]}))}var Q=n(),Ue=`GET /secure
2
- Authorization: Bearer <secret>`,We=`{ "ok": true }`;function Ge({keyRow:e,blast:t,now:n,leading:r,onEdit:a,onRefresh:s,onRevoke:c,onRotate:l,rotatePending:u}){let d=e.revokedAt!==null,f=e.expiresAt!==null&&e.expiresAt<=n,p=t?.lastUsedAt??e.lastUsedAt,m=t?.callVolume??0,h=Te(e.expiresAt,n),g=we(p,n),_=e.rateLimit?`${e.rateLimit.max} / ${e.rateLimit.per}`:`none`,v=(0,Y.useMemo)(()=>He(e.scopes),[e.scopes]),y=e.creatorScopes.length,b=y>0&&e.scopes.length<y;return(0,Q.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col overflow-y-auto`,"data-slot":`access-detail`,"aria-label":`Access key detail`,"aria-live":`polite`,children:[(0,Q.jsx)(xe,{dataSlot:`access-detail-header`,leading:r,icon:(0,Q.jsx)(i,{icon:oe,className:`size-4`}),title:e.name,badge:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`span`,{className:`inline-flex items-center gap-1 font-mono text-[10px] font-medium tracking-[0.08em] text-muted-foreground uppercase`,children:[(0,Q.jsx)(i,{icon:e.plane===`operator`?Ce:fe,className:`size-3`,"aria-hidden":!0}),e.plane]}),d?(0,Q.jsx)(`span`,{className:`font-mono text-[10px] text-destructive`,children:`revoked`}):null,f&&!d?(0,Q.jsx)(`span`,{className:`font-mono text-[10px] text-amber-700 dark:text-amber-400`,children:`expired`}):null,e.unused90d&&!d&&!f?(0,Q.jsx)(`span`,{className:`font-mono text-[10px] text-amber-700 dark:text-amber-400`,children:`unused`}):null]}),subtitle:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`code`,{className:`min-w-0 truncate font-mono text-[11px] leading-none text-foreground/80`,children:e.id}),(0,Q.jsx)(J,{value:e.id,label:`Copy ${e.id}`})]}),actions:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(U,{label:`Rename or re-attenuate scopes`,className:`flex self-stretch`,children:(0,Q.jsx)(V,{type:`button`,variant:`ghost`,size:`sm`,className:`h-full rounded-none`,disabled:d,onClick:a,children:`Edit`})}),(0,Q.jsx)(U,{label:`Reset expiry from now. The secret stays the same.`,className:`flex self-stretch`,children:(0,Q.jsx)(V,{type:`button`,variant:`ghost`,size:`sm`,className:`h-full rounded-none`,"data-slot":`access-refresh`,disabled:d,onClick:s,children:`Refresh`})}),(0,Q.jsx)(U,{label:`Mint a new secret. The current secret stops working after residual TTL.`,className:`flex self-stretch`,children:(0,Q.jsx)(V,{type:`button`,variant:`ghost`,size:`sm`,className:`h-full rounded-none`,disabled:u||d,onClick:l,children:`Rotate`})}),(0,Q.jsx)(U,{label:`Irreversible. Residual sessions may continue for the access TTL.`,className:`flex self-stretch`,children:(0,Q.jsx)(V,{type:`button`,variant:`destructive`,size:`sm`,className:`h-full rounded-none`,disabled:d,onClick:c,children:`Revoke`})})]})}),(0,Q.jsx)(Ke,{revoked:d,expired:f,unused:e.unused90d,residual:t?.residualAccessNote}),(0,Q.jsxs)(`div`,{className:z,"data-slot":`access-briefing`,role:`group`,"aria-label":`Usage`,children:[(0,Q.jsx)(Xe,{label:`calls`,value:String(m)}),(0,Q.jsx)(Xe,{label:`used`,value:g,hint:p?new Date(p).toISOString():`No recorded call`,warn:p==null&&!d}),(0,Q.jsx)(Xe,{label:`expires`,value:h,hint:e.expiresAt?new Date(e.expiresAt).toISOString():`No expiry`,warn:f&&!d}),(0,Q.jsx)(Xe,{label:`rate`,value:_})]}),(0,Q.jsxs)(`section`,{className:`shrink-0 border-b border-border/60`,"aria-label":`Scopes`,children:[(0,Q.jsx)($,{title:`Scopes`,meta:b?`${e.scopes.length} of ${y}`:String(e.scopes.length),children:e.scopes.length>0?(0,Q.jsx)(J,{value:e.scopes.join(`
3
- `),label:`Copy scopes`}):null}),v.length===0?(0,Q.jsx)(`p`,{className:`px-2 py-1.5 text-[11px] text-muted-foreground`,children:`No scopes granted.`}):(0,Q.jsx)(`ul`,{"data-slot":`access-scopes`,children:v.map(e=>(0,Q.jsxs)(`li`,{className:A,"aria-label":e.group,children:[(0,Q.jsx)(`span`,{className:o(B,`w-[5.5rem] shrink-0`),children:e.group}),(0,Q.jsx)(`div`,{className:`flex min-w-0 flex-1 flex-wrap items-center gap-x-2`,children:e.items.map(e=>(0,Q.jsx)(`span`,{title:e.scope,className:`font-mono text-[11px] text-foreground`,children:e.action},e.scope))}),(0,Q.jsx)(Ze,{value:e.items.map(e=>e.scope).join(`
4
- `),label:`Copy ${e.group} scopes`})]},e.group))})]}),(0,Q.jsxs)(`section`,{className:`shrink-0 border-b border-border/60`,"aria-label":`Key`,children:[(0,Q.jsx)($,{title:`Key`}),(0,Q.jsxs)(`dl`,{"data-slot":`access-key-facts`,children:[(0,Q.jsx)(Qe,{label:`Issuer`,value:e.creatorId,copy:e.creatorId,copyLabel:`Copy ${e.creatorId}`}),(0,Q.jsx)(Qe,{label:`Created`,value:we(e.createdAt,n),hint:new Date(e.createdAt).toISOString()}),(0,Q.jsx)(Qe,{label:`Expires`,value:h,hint:e.expiresAt?new Date(e.expiresAt).toISOString():void 0,warn:f&&!d}),(0,Q.jsx)(Qe,{label:`Rate`,value:_})]})]}),(0,Q.jsx)(qe,{entries:e.ipAllowlist}),(0,Q.jsx)(Je,{sourceAddresses:t?.sourceAddresses??[],residual:t?.residualAccessNote,lastUsed:p,now:n}),(0,Q.jsx)(Ye,{scopes:e.scopes})]})}function Ke({revoked:e,expired:t,unused:n,residual:r}){return e?(0,Q.jsx)(`section`,{className:o(z,`border-destructive/25 bg-destructive/5`),"aria-label":`Revoked`,role:`status`,children:(0,Q.jsxs)(`p`,{className:`flex min-w-0 flex-1 items-center px-2 text-[12px] text-destructive`,children:[`Revoked`,(0,Q.jsxs)(`span`,{className:`text-muted-foreground`,children:[` `,`· `,r??`This secret no longer authenticates.`]})]})}):t?(0,Q.jsx)(`section`,{className:o(z,`border-amber-500/25 bg-amber-500/5`),"aria-label":`Expired`,role:`status`,children:(0,Q.jsxs)(`p`,{className:`flex min-w-0 flex-1 items-center px-2 text-[12px] text-amber-900 dark:text-amber-300`,children:[`Expired`,r?(0,Q.jsxs)(`span`,{className:`text-muted-foreground`,children:[` · `,r]}):null]})}):n?(0,Q.jsx)(`section`,{className:o(z,`border-amber-500/25 bg-amber-500/5`),"aria-label":`Unused`,role:`status`,children:(0,Q.jsxs)(`p`,{className:`flex min-w-0 flex-1 items-center px-2 text-[12px] text-amber-900 dark:text-amber-300`,children:[`No calls in 90 days`,(0,Q.jsx)(`span`,{className:`text-muted-foreground`,children:` · rotate or revoke`})]})}):null}function qe({entries:e}){return(0,Q.jsxs)(`section`,{className:`shrink-0 border-b border-border/60`,"aria-label":`Allow`,children:[(0,Q.jsx)($,{title:`Allow`,meta:e.length>0?String(e.length):`any`}),e.length===0?(0,Q.jsx)(`p`,{className:`px-2 py-1.5 text-[11px] text-muted-foreground`,children:`Any origin.`}):(0,Q.jsx)(`ul`,{"data-slot":`access-allow`,children:e.map(e=>{let t=Le(e);return(0,Q.jsxs)(`li`,{className:A,children:[(0,Q.jsx)(`span`,{className:o(B,`w-[5.5rem] shrink-0`),children:t===`ip`?`IP`:t===`host`?`Host`:`—`}),(0,Q.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-mono text-[11px]`,children:e}),(0,Q.jsx)(Ze,{value:e,label:`Copy ${e}`})]},e)})})]})}function Je({sourceAddresses:e,residual:t,lastUsed:n,now:r}){return(0,Q.jsxs)(`section`,{className:`shrink-0 border-b border-border/60`,"aria-label":`Usage`,children:[(0,Q.jsx)($,{title:`Usage`,meta:n?we(n,r):`never`}),e.length===0?(0,Q.jsx)(`p`,{className:`px-2 py-1.5 text-[11px] text-muted-foreground`,children:`No observed source IPs.`}):(0,Q.jsx)(`ul`,{"data-slot":`access-sources`,children:e.map(e=>(0,Q.jsxs)(`li`,{className:A,children:[(0,Q.jsx)(`span`,{className:o(B,`w-[5.5rem] shrink-0`),children:`IP`}),(0,Q.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-mono text-[11px]`,children:e}),(0,Q.jsx)(Ze,{value:e,label:`Copy ${e}`})]},e))}),t?(0,Q.jsx)(`p`,{className:`border-t border-border/60 px-2 py-1.5 text-[11px] text-muted-foreground`,children:t}):null]})}function Ye({scopes:e}){return(0,Q.jsxs)(`section`,{"data-slot":`access-call-example`,children:[(0,Q.jsx)($,{title:`Request`,children:(0,Q.jsx)(J,{value:Ue,label:`Copy request`})}),(0,Q.jsxs)(`div`,{className:`flex min-w-0 border-b border-border/60`,children:[(0,Q.jsx)(`div`,{className:o(`w-1 shrink-0 self-stretch`,ne(`GET`)),"aria-hidden":!0}),(0,Q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Q.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2 px-2.5 py-2`,children:[(0,Q.jsx)(`span`,{className:o(`shrink-0 font-mono text-[10px] font-semibold tracking-[0.08em] uppercase`,_(re(`GET`))),children:`GET`}),(0,Q.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-mono text-xs text-foreground select-all`,children:`/secure`})]}),(0,Q.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2 border-t border-border/60 px-2.5 py-2`,children:[(0,Q.jsx)(`span`,{className:`w-[7.5rem] shrink-0 truncate font-mono text-[11px] font-medium text-sky-600 dark:text-sky-400`,children:`Authorization`}),(0,Q.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-mono text-[11px] text-muted-foreground`,children:`Bearer <secret>`})]})]})]}),(0,Q.jsx)($,{title:`Response`,children:(0,Q.jsx)(J,{value:We,label:`Copy response`})}),(0,Q.jsxs)(`div`,{className:`flex min-w-0 border-b border-border/60`,children:[(0,Q.jsx)(`div`,{className:`w-1 shrink-0 self-stretch bg-emerald-500`,"aria-hidden":!0}),(0,Q.jsx)(`p`,{className:`min-w-0 flex-1 px-2.5 py-2 font-mono text-[11px] text-foreground/80 select-all`,children:We})]}),(0,Q.jsxs)(`p`,{className:`px-2 py-1.5 text-[11px] text-muted-foreground`,children:[`Seed the Bearer secret from create / rotate. The key is the issuer; gates see`,` `,e.join(`, `)||`its scopes`,`.`]})]})}function $({title:e,meta:t,children:n}){return(0,Q.jsxs)(`header`,{className:o(z,`items-center gap-2 px-2`),children:[(0,Q.jsx)(`h3`,{className:o(B,`shrink-0 leading-none`),children:e}),t?(0,Q.jsx)(`span`,{className:o(x,!n&&`ml-auto`),children:t}):null,n?(0,Q.jsx)(`div`,{className:`ml-auto flex items-center`,children:n}):null]})}function Xe({label:e,value:t,hint:n,warn:r=!1}){return(0,Q.jsxs)(`span`,{title:n,className:o(S,H,`gap-1.5`),children:[(0,Q.jsx)(`span`,{className:`tracking-[0.08em] uppercase`,children:e}),(0,Q.jsx)(`span`,{className:o(`font-mono tabular-nums text-foreground`,r&&`text-amber-800 dark:text-amber-400`),children:t})]})}function Ze({value:e,label:t}){return(0,Q.jsx)(`div`,{className:`opacity-0 transition-opacity group-hover:opacity-100 group-focus-within:opacity-100`,children:(0,Q.jsx)(J,{value:e,label:t})})}function Qe({label:e,value:t,hint:n,copy:r,copyLabel:i,warn:a=!1}){return(0,Q.jsxs)(`div`,{className:A,children:[(0,Q.jsx)(`dt`,{className:o(B,`w-[5.5rem] shrink-0`),children:e}),(0,Q.jsx)(`dd`,{className:o(`min-w-0 flex-1 truncate font-mono text-[11px]`,a&&`text-amber-800 dark:text-amber-400`),title:n,children:t}),r?(0,Q.jsx)(Ze,{value:r,label:i??`Copy ${e}`}):null]})}var $e=[`console.access.list`];function et(){return y({queryKey:$e,queryFn:async()=>{let e=await c();if(e.error||!e.data)throw Error(e.error?.message??`Empty access list`);return e.data}})}function tt({rows:e,selectedKey:t,query:n,loading:r=!1,onSelect:i}){let a=e.filter(e=>e.plane===`user`),o=e.filter(e=>e.plane===`operator`);return(0,Q.jsxs)(`div`,{id:`access-list`,"data-slot":`access-list`,className:`min-h-0 flex-1 overflow-y-auto`,children:[r&&e.length===0?(0,Q.jsx)(`p`,{className:R,children:`Loading…`}):null,!r&&e.length===0&&n.trim().length>0?(0,Q.jsx)(`p`,{className:R,children:`No keys match.`}):null,(0,Q.jsx)(nt,{label:`User`,icon:fe,rows:a,selectedKey:t,onSelect:i}),(0,Q.jsx)(nt,{label:`Operator`,icon:Ce,rows:o,selectedKey:t,onSelect:i})]})}function nt(e){return(0,Q.jsxs)(`section`,{className:L,"aria-label":e.label,children:[(0,Q.jsxs)(`div`,{className:j,children:[(0,Q.jsx)(i,{icon:e.icon,className:o(k,`text-muted-foreground`),"aria-hidden":!0}),(0,Q.jsx)(`span`,{className:o(P,`flex-1`),children:e.label}),(0,Q.jsx)(`span`,{className:x,children:e.rows.length})]}),e.rows.map(t=>{let n=t.id===e.selectedKey,r=t.revokedAt!==null;return(0,Q.jsxs)(`button`,{type:`button`,"data-slot":`access-key-row`,className:o(A,n&&`bg-muted/70 text-foreground`),onClick:()=>e.onSelect(t.id),children:[(0,Q.jsx)(`span`,{className:o(N,n&&`bg-sky-500`)}),(0,Q.jsx)(i,{icon:oe,className:o(k,`text-muted-foreground`)}),(0,Q.jsx)(`span`,{className:o(`min-w-0 truncate`,r&&`text-muted-foreground line-through`),children:t.name}),r?(0,Q.jsx)(`span`,{className:`ml-auto text-[10px] text-muted-foreground`,children:`revoked`}):t.unused90d?(0,Q.jsx)(`span`,{className:`ml-auto text-[10px] text-amber-700 dark:text-amber-400`,children:`unused`}):(0,Q.jsx)(`span`,{className:o(`ml-auto tabular-nums text-[10px] text-muted-foreground`),children:t.scopes.length})]},t.id)})]})}function rt({entries:e,rateMax:t,rateCount:n,rateUnit:r,onEntries:c,onRateMax:u,onRateCount:d,onRateUnit:f}){let[p,h]=(0,Y.useState)(``),_=Re(p),v=p.trim().length>0&&_.length===0,y=()=>{if(_.length===0)return;let t=new Set(e),n=[...e];for(let e of _)t.has(e)||(t.add(e),n.push(e));c(n),h(``)};return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{className:`border-b border-border/50`,"data-slot":`access-allow-field`,children:[(0,Q.jsxs)(`div`,{className:`flex items-stretch`,children:[(0,Q.jsx)(`p`,{className:`flex h-8 w-[5.5rem] shrink-0 items-center px-4 text-[10px] font-semibold tracking-[0.12em] text-muted-foreground uppercase`,children:`Allow`}),(0,Q.jsx)(a,{value:p,onChange:e=>h(e.target.value),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),y())},placeholder:`203.0.113.4 or ci.example.com`,autoComplete:`off`,"aria-label":`Add allow entry`,"aria-invalid":v,flat:!0,className:o(q,`min-w-0 flex-1 font-mono`)}),e.length>0?(0,Q.jsx)(`span`,{className:o(x,`flex h-8 items-center pr-2`),children:e.length}):null,(0,Q.jsx)(`button`,{type:`button`,className:o(w,`h-8`),"aria-label":`Add allow entry`,disabled:_.length===0,onClick:y,children:(0,Q.jsx)(i,{icon:pe,className:`size-3.5`,"aria-hidden":!0})})]}),v?(0,Q.jsx)(`p`,{className:`border-t border-border/50 px-4 py-2 text-[11px] text-destructive`,children:`Need an IP or host — 203.0.113.4, ::1, localhost, or ci.example.com.`}):e.length===0?(0,Q.jsx)(`p`,{className:`border-t border-border/50 px-4 py-2 text-[11px] text-muted-foreground`,children:`Any client. Add an IP or host.`}):(0,Q.jsx)(`div`,{role:`list`,"aria-label":`Allow list`,children:e.map(t=>{let n=Le(t);return(0,Q.jsxs)(`div`,{role:`listitem`,"data-slot":`access-allow-entry`,"data-kind":n??`invalid`,className:o(A,`last:border-b-0`),children:[(0,Q.jsx)(`span`,{className:o(B,`w-[5.5rem] shrink-0 px-1.5`,n==null&&`text-destructive`),children:n===`ip`?`IP`:n===`host`?`Host`:`Bad`}),(0,Q.jsx)(`span`,{className:o(`min-w-0 truncate font-mono text-[11px]`,n==null&&`text-destructive`),children:t}),(0,Q.jsx)(`button`,{type:`button`,className:o(I,`ml-auto opacity-0 group-hover:opacity-100 focus-visible:opacity-100`),"aria-label":`Remove ${t}`,onClick:()=>c(e.filter(e=>e!==t)),children:(0,Q.jsx)(i,{icon:D,className:`size-3`,"aria-hidden":!0})})]},t)})})]}),(0,Q.jsxs)(`div`,{className:`flex items-stretch border-b border-border/50`,"data-slot":`access-rate-field`,children:[(0,Q.jsx)(`p`,{className:`flex h-8 w-[5.5rem] shrink-0 items-center px-4 text-[10px] font-semibold tracking-[0.12em] text-muted-foreground uppercase`,children:`Rate`}),(0,Q.jsxs)(`label`,{className:`flex min-w-0 flex-1 items-stretch border-r border-border/50`,children:[(0,Q.jsx)(`span`,{className:`flex h-8 shrink-0 items-center pl-1 text-[10px] font-semibold tracking-[0.08em] text-muted-foreground uppercase`,children:`Max`}),(0,Q.jsx)(a,{value:t,onChange:e=>u(e.target.value),placeholder:`none`,inputMode:`numeric`,autoComplete:`off`,"aria-label":`Rate max`,flat:!0,className:o(q,`min-w-0 flex-1 px-2 font-mono tabular-nums`)})]}),(0,Q.jsxs)(`label`,{className:`flex min-w-0 flex-1 items-stretch`,children:[(0,Q.jsx)(`span`,{className:`flex h-8 shrink-0 items-center pl-2 text-[10px] font-semibold tracking-[0.08em] text-muted-foreground uppercase`,children:`Every`}),(0,Q.jsx)(a,{value:n,onChange:e=>d(e.target.value),placeholder:`1`,inputMode:`numeric`,autoComplete:`off`,"aria-label":`Rate window`,flat:!0,className:o(q,`min-w-0 flex-1 px-2 font-mono tabular-nums`)})]}),(0,Q.jsx)(`div`,{className:`flex h-8 shrink-0 items-stretch`,role:`group`,"aria-label":`Rate unit`,children:Ne.map(e=>(0,Q.jsxs)(s,{children:[(0,Q.jsx)(m,{render:t=>(0,Q.jsx)(`button`,{...t,type:`button`,"aria-pressed":r===e,"aria-label":Pe[e],onClick:n=>{t.onClick?.(n),f(e)},className:o(S,`h-8 px-1.5 font-mono font-semibold`,r===e?g:H),children:e})}),(0,Q.jsx)(l,{side:`bottom`,className:`text-[11px]`,children:Pe[e]})]},e))})]})]})}function it({expires:e,customExpires:t,onExpires:n,onCustomExpires:r}){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(ve,{label:`Expires`,children:[(0,Q.jsx)(G,{active:e===`never`,onClick:()=>n(`never`),children:`never`}),(0,Q.jsx)(G,{active:e===`30d`,onClick:()=>n(`30d`),children:`30d`}),(0,Q.jsx)(G,{active:e===`90d`,onClick:()=>n(`90d`),children:`90d`}),(0,Q.jsx)(G,{active:e===`custom`,onClick:()=>n(`custom`),children:`custom`})]}),e===`custom`?(0,Q.jsx)(_e,{label:`Duration`,hint:`7d · 12h · 30m`,children:(0,Q.jsx)(a,{value:t,onChange:e=>r(e.target.value),placeholder:`7d`,autoComplete:`off`,"aria-label":`Custom expiry duration`,flat:!0,className:o(q,`font-mono`)})}):null]})}function at({value:e,placeholder:t,label:n,onChange:r}){return(0,Q.jsxs)(`label`,{className:`relative min-w-0 flex-1`,children:[(0,Q.jsx)(i,{icon:he,className:`pointer-events-none absolute top-1/2 left-3 size-3.5 -translate-y-1/2 text-muted-foreground`,"aria-hidden":!0}),(0,Q.jsx)(a,{value:e,onChange:e=>r(e.target.value),placeholder:t,"aria-label":n,autoComplete:`off`,flat:!0,className:o(ye)})]})}function ot({scopes:e,selected:t,empty:n,onChange:r}){let[i,a]=(0,Y.useState)(``),s=new Set(t),c=(0,Y.useMemo)(()=>st(e,i),[e,i]),l=(0,Y.useMemo)(()=>He(c),[c]),u=e.join(`\0`);return(0,Y.useEffect)(()=>{a(``)},[u]),(0,Q.jsxs)(`div`,{className:`border-b border-border/50`,"data-slot":`access-scope-field`,children:[(0,Q.jsxs)(`div`,{className:`flex items-stretch`,children:[(0,Q.jsx)(`p`,{className:`flex h-8 w-[5.5rem] shrink-0 items-center px-4 text-[10px] font-semibold tracking-[0.12em] text-muted-foreground uppercase`,children:`Scopes`}),e.length>0?(0,Q.jsx)(at,{value:i,placeholder:`Search scopes`,label:`Search scopes`,onChange:a}):null]}),e.length===0?(0,Q.jsx)(`p`,{className:`border-t border-border/50 px-4 py-3 text-[11px] text-muted-foreground`,children:n}):c.length===0?(0,Q.jsx)(`p`,{className:`border-t border-border/50 px-4 py-3 text-[11px] text-muted-foreground`,children:`No scopes match.`}):(0,Q.jsx)(`div`,{className:`max-h-56 overflow-y-auto`,role:`group`,"aria-label":`Scopes`,children:l.map(e=>(0,Q.jsxs)(`div`,{className:`flex items-stretch border-t border-border/50`,role:`group`,"aria-label":e.group,children:[(0,Q.jsx)(`p`,{className:`flex w-[5.5rem] shrink-0 items-center px-4 font-mono text-[10px] font-semibold tracking-[0.08em] text-muted-foreground uppercase`,children:e.group}),(0,Q.jsx)(`div`,{className:`flex min-w-0 flex-1 flex-wrap items-stretch`,children:e.items.map(e=>{let n=s.has(e.scope);return(0,Q.jsx)(`button`,{type:`button`,"aria-pressed":n,"aria-label":e.scope,"data-slot":`access-scope-chip`,title:e.scope,onClick:()=>{r(n?t.filter(t=>t!==e.scope):[...t,e.scope])},className:o(`inline-flex h-8 min-w-0 items-center px-2 font-mono text-[10px] font-semibold outline-none select-none`,`focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:ring-inset`,n?`bg-muted text-foreground`:`text-muted-foreground hover:text-foreground`),children:e.action},e.scope)})})]},e.group))})]})}function st(e,t){let n=t.trim().toLowerCase();return n.length===0?e:e.filter(e=>e.toLowerCase().includes(n))}function ct({open:e,users:t,userScopes:n,operatorScopes:r,pending:i,error:s,onOpenChange:c,onSubmit:l}){let[u,d]=(0,Y.useState)(`user`),[f,p]=(0,Y.useState)(``),[m,h]=(0,Y.useState)(``),[g,_]=(0,Y.useState)([]),[v,y]=(0,Y.useState)(`never`),[b,x]=(0,Y.useState)(``),[S,w]=(0,Y.useState)([]),[T,ee]=(0,Y.useState)(``),[D,k]=(0,Y.useState)(``),[j,P]=(0,Y.useState)(`m`),[I,L]=(0,Y.useState)(``),R=t.find(e=>e.id===m)??null,z=(0,Y.useMemo)(()=>{let e=I.trim().toLowerCase(),n=e.length===0?t:t.filter(t=>t.name.toLowerCase().includes(e)||t.id.toLowerCase().includes(e)||t.email.toLowerCase().includes(e));return R&&!n.some(e=>e.id===R.id)?[R,...n]:n},[t,I,R]),B=(0,Y.useMemo)(()=>u===`operator`?r:R==null?[]:R.scopes.length>0?R.scopes:n,[u,n,r,R]);(0,Y.useEffect)(()=>{e||(d(`user`),p(``),h(``),_([]),y(`never`),x(``),w([]),ee(``),k(``),P(`m`),L(``))},[e]),(0,Y.useEffect)(()=>{_(e=>{let t=e.filter(e=>B.includes(e));if(t.length>0)return t;let n=B[0];return n?[n]:[]})},[B]);let V=De(b),H=Fe(T,D,j),ne=f.trim().length>0&&g.length>0&&!i&&H!==void 0&&(u===`operator`||m.length>0)&&(v!==`custom`||V>0);return(0,Q.jsx)(E,{open:e,modal:!1,disablePointerDismissal:!0,onOpenChange:c,children:(0,Q.jsxs)(M,{side:`right`,showOverlay:!1,className:`gap-0 p-0 data-[side=right]:sm:max-w-md`,"data-slot":`access-create-sheet`,children:[(0,Q.jsxs)(O,{className:`gap-1 border-b border-border/50`,children:[(0,Q.jsx)(te,{className:`text-sm`,children:`Create API key`}),(0,Q.jsx)(F,{className:`text-[11px]`,children:u===`user`?`User-plane keys require an issuer. The key cannot exceed that user's grants.`:`Operator keys inherit the actor ceiling. Absence is impossible — only grantable scopes appear.`})]}),(0,Q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto`,children:[(0,Q.jsxs)(`div`,{className:`flex items-stretch border-b border-border/50`,"data-slot":`access-name-field`,children:[(0,Q.jsx)(`p`,{className:`flex h-8 w-[5.5rem] shrink-0 items-center px-4 text-[10px] font-semibold tracking-[0.12em] text-muted-foreground uppercase`,children:`Name`}),(0,Q.jsx)(a,{value:f,onChange:e=>p(e.target.value),placeholder:`CI deploy`,autoComplete:`off`,"aria-label":`Key name`,flat:!0,className:o(q,`min-w-0 flex-1`)})]}),(0,Q.jsxs)(ve,{label:`Plane`,children:[(0,Q.jsx)(G,{active:u===`user`,icon:fe,onClick:()=>{d(`user`)},children:`user`}),(0,Q.jsx)(G,{active:u===`operator`,icon:Ce,onClick:()=>{d(`operator`),h(``),L(``)},children:`operator`})]}),(0,Q.jsx)(it,{expires:v,customExpires:b,onExpires:y,onCustomExpires:x}),(0,Q.jsx)(rt,{entries:S,rateMax:T,rateCount:D,rateUnit:j,onEntries:w,onRateMax:ee,onRateCount:k,onRateUnit:P}),u===`user`?(0,Q.jsxs)(`div`,{className:`border-b border-border/50`,"data-slot":`access-issuer-field`,children:[(0,Q.jsxs)(`div`,{className:`flex items-stretch`,children:[(0,Q.jsx)(`p`,{className:`flex h-8 w-[5.5rem] shrink-0 items-center px-4 text-[10px] font-semibold tracking-[0.12em] text-muted-foreground uppercase`,children:`Issuer`}),t.length>0?(0,Q.jsx)(at,{value:I,placeholder:`Search users`,label:`Search users`,onChange:L}):null]}),t.length===0?(0,Q.jsx)(`p`,{className:`border-t border-border/50 px-4 py-3 text-[11px] text-muted-foreground`,children:`No users on this plane.`}):z.length===0?(0,Q.jsx)(`p`,{className:`border-t border-border/50 px-4 py-3 text-[11px] text-muted-foreground`,children:`No users match.`}):(0,Q.jsx)(`div`,{className:`max-h-56 overflow-y-auto`,children:z.map(e=>{let t=e.id===m;return(0,Q.jsxs)(`button`,{type:`button`,"data-slot":`access-creator-user`,"aria-pressed":t,className:o(A,t&&`bg-muted/70 text-foreground`),onClick:()=>h(e.id),children:[(0,Q.jsx)(`span`,{className:o(N,t&&`bg-sky-500`)}),(0,Q.jsx)(`span`,{className:`min-w-0 truncate`,children:e.name}),(0,Q.jsx)(`span`,{className:`ml-auto shrink-0 font-mono text-[10px] text-muted-foreground`,children:e.id})]},e.id)})})]}):null,(0,Q.jsx)(ot,{scopes:B,selected:g,empty:u===`user`&&m.length===0?`Select an issuer to see grantable scopes.`:u===`user`?`This user has no grants.`:`No grantable scopes on this plane.`,onChange:_}),s?(0,Q.jsx)(be,{slot:`access-create-error`,children:s}):null]}),(0,Q.jsxs)(C,{children:[(0,Q.jsx)(K,{split:!0,onClick:()=>c(!1),disabled:i,children:`Cancel`}),(0,Q.jsx)(K,{variant:`default`,disabled:!ne,"data-slot":`access-create-submit`,onClick:()=>{if(H===void 0)return;let e=Oe(v,Date.now(),b);l({plane:u,name:f.trim(),scopes:g,...u===`user`?{creatorUserId:m}:{},...e==null?{}:{expiresAt:e},...H==null?{}:{rateLimit:H},...S.length>0?{ipAllowlist:S}:{}})},children:i?`Creating…`:`Create`})]})]})})}function lt({open:e,keyRow:t,users:n,operators:r,operatorScopes:s,pending:c,error:l,now:u=Date.now(),onOpenChange:d,onSubmit:f}){let p=ke(t.expiresAt,u),[m,h]=(0,Y.useState)(t.name),[g,_]=(0,Y.useState)(t.scopes),[v,y]=(0,Y.useState)(p.choice),[b,x]=(0,Y.useState)(p.custom),[S,w]=(0,Y.useState)(t.ipAllowlist),T=Ie(t.rateLimit?.per??``),[ee,D]=(0,Y.useState)(t.rateLimit?String(t.rateLimit.max):``),[k,A]=(0,Y.useState)(T.count),[j,N]=(0,Y.useState)(T.unit);(0,Y.useEffect)(()=>{if(!e)return;let n=ke(t.expiresAt,u);h(t.name),_(t.scopes),y(n.choice),x(n.custom),w(t.ipAllowlist);let r=Ie(t.rateLimit?.per??``);D(t.rateLimit?String(t.rateLimit.max):``),A(r.count),N(r.unit)},[e,t.id]);let P=t.creatorId??``,I=(0,Y.useMemo)(()=>P.length===0?null:n.find(e=>e.id===P)??r.find(e=>e.id===P)??null,[P,r,n]),L=I?I.name.trim()||I.email.trim()||I.id:P||`Unknown`,R=(0,Y.useMemo)(()=>{let e=t.creatorScopes??[];return e.length>0?e:t.plane===`operator`?I&&I.scopes.length>0?I.scopes:s:I?.scopes??[]},[I,t.creatorScopes,t.plane,s]),z=Array.from(new Set([...R,...t.scopes])),B=De(b),V=Fe(ee,k,j),H=m.trim().length>0&&g.length>0&&!c&&V!==void 0&&(v!==`custom`||B>0);return(0,Q.jsx)(E,{open:e,modal:!1,disablePointerDismissal:!0,onOpenChange:d,children:(0,Q.jsxs)(M,{side:`right`,showOverlay:!1,className:`gap-0 p-0 data-[side=right]:sm:max-w-md`,"data-slot":`access-edit-sheet`,children:[(0,Q.jsxs)(O,{className:`gap-1 border-b border-border/50`,children:[(0,Q.jsx)(te,{className:`text-sm`,children:`Edit key`}),(0,Q.jsx)(F,{className:`text-[11px]`,children:`Change name, expiry, allow, rate, and scopes. Issuer stays frozen.`})]}),(0,Q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto`,children:[(0,Q.jsxs)(`div`,{className:`flex items-stretch border-b border-border/50`,"data-slot":`access-name-field`,children:[(0,Q.jsx)(`p`,{className:`flex h-8 w-[5.5rem] shrink-0 items-center px-4 text-[10px] font-semibold tracking-[0.12em] text-muted-foreground uppercase`,children:`Name`}),(0,Q.jsx)(a,{value:m,onChange:e=>h(e.target.value),placeholder:`CI deploy`,autoComplete:`off`,"aria-label":`Key name`,flat:!0,className:o(q,`min-w-0 flex-1`)})]}),(0,Q.jsxs)(`div`,{className:`flex items-stretch border-b border-border/50`,"data-slot":`access-issuer-field`,children:[(0,Q.jsx)(`p`,{className:`flex h-8 w-[5.5rem] shrink-0 items-center px-4 text-[10px] font-semibold tracking-[0.12em] text-muted-foreground uppercase`,children:`Issuer`}),(0,Q.jsxs)(`p`,{className:`flex min-w-0 flex-1 items-center gap-1.5 px-4 text-[12px] text-muted-foreground`,"aria-label":`Issuer ${L}`,children:[(0,Q.jsx)(i,{icon:t.plane===`operator`?Ce:fe,className:`size-3 shrink-0`,"aria-hidden":!0}),(0,Q.jsx)(`span`,{className:`min-w-0 truncate text-foreground`,children:L})]}),P.length>0&&P!==L?(0,Q.jsx)(`span`,{className:`flex h-8 shrink-0 items-center pr-4 font-mono text-[10px] text-muted-foreground`,children:P}):null]}),(0,Q.jsx)(it,{expires:v,customExpires:b,onExpires:y,onCustomExpires:x}),(0,Q.jsx)(rt,{entries:S,rateMax:ee,rateCount:k,rateUnit:j,onEntries:w,onRateMax:D,onRateCount:A,onRateUnit:N}),(0,Q.jsx)(ot,{scopes:z,selected:g,empty:t.plane===`user`&&I==null?`Issuer is gone. Only scopes already on this key remain.`:t.plane===`user`?`This issuer has no grants.`:`No grantable scopes on this plane.`,onChange:_}),l?(0,Q.jsx)(be,{slot:`access-edit-error`,children:l}):null]}),(0,Q.jsxs)(C,{children:[(0,Q.jsx)(K,{split:!0,onClick:()=>d(!1),disabled:c,children:`Cancel`}),(0,Q.jsx)(K,{variant:`default`,disabled:!H,"data-slot":`access-edit-submit`,onClick:()=>{V!==void 0&&f({name:m.trim(),scopes:g,expiresAt:Oe(v,Date.now(),b),rateLimit:V,ipAllowlist:S})},children:c?`Saving…`:`Save`})]})]})})}function ut({open:e,keyRow:t,pending:n,error:r,now:i=Date.now(),onOpenChange:a,onSubmit:o}){let s=je(t.expiresAt,i),[c,l]=(0,Y.useState)(s.choice),[u,d]=(0,Y.useState)(s.custom);(0,Y.useEffect)(()=>{if(!e)return;let n=je(t.expiresAt,i);l(n.choice),d(n.custom)},[e,t.id]);let f=De(u);return(0,Q.jsx)(E,{open:e,modal:!1,disablePointerDismissal:!0,onOpenChange:a,children:(0,Q.jsxs)(M,{side:`right`,showOverlay:!1,className:`gap-0 p-0 data-[side=right]:sm:max-w-md`,"data-slot":`access-refresh-sheet`,children:[(0,Q.jsxs)(O,{className:`gap-1 border-b border-border/50`,children:[(0,Q.jsx)(te,{className:`text-sm`,children:`Refresh expiry`}),(0,Q.jsx)(F,{className:`text-[11px]`,children:`Reset the deadline from now. The secret does not change.`})]}),(0,Q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto`,children:[(0,Q.jsx)(it,{expires:c,customExpires:u,onExpires:l,onCustomExpires:d}),r?(0,Q.jsx)(be,{slot:`access-refresh-error`,children:r}):null]}),(0,Q.jsxs)(C,{children:[(0,Q.jsx)(K,{split:!0,onClick:()=>a(!1),disabled:n,children:`Cancel`}),(0,Q.jsx)(K,{variant:`default`,disabled:!(!n&&(c!==`custom`||f>0)),"data-slot":`access-refresh-submit`,onClick:()=>{o(Oe(c,Date.now(),u))},children:n?`Refreshing…`:`Refresh`})]})]})})}function dt({secret:e,title:t=`New API key`,onDismiss:n}){let[r,i]=(0,Y.useState)(!1);return(0,Q.jsx)(E,{open:e!==null,onOpenChange:e=>{e||n()},children:(0,Q.jsxs)(M,{side:`right`,showOverlay:!1,className:`gap-0 p-0 data-[side=right]:sm:max-w-md`,"data-slot":`access-secret-sheet`,children:[(0,Q.jsxs)(O,{className:`gap-1 border-b border-border/50`,children:[(0,Q.jsx)(te,{className:`text-sm`,children:t}),(0,Q.jsx)(F,{className:`text-[11px]`,children:`Shown once. Store it offline. This Console process does not keep it for you.`})]}),(0,Q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto`,children:[(0,Q.jsx)(`p`,{className:`border-b border-border/50 px-4 py-3 font-mono text-[11px] break-all`,children:e}),(0,Q.jsx)(`p`,{className:`px-4 py-3 text-[11px] text-muted-foreground`,role:`status`,children:`Copying puts the secret on the clipboard. Anyone with this device can read it until you clear it.`})]}),(0,Q.jsxs)(C,{children:[(0,Q.jsx)(K,{split:!0,disabled:!e,onClick:()=>{e&&(navigator.clipboard?.writeText(e),i(!0))},children:r?`Copied`:`Copy (clipboard warning)`}),(0,Q.jsx)(K,{variant:`destructive`,onClick:()=>{i(!1),n()},children:`I have stored this key`})]})]})})}function ft(){let e=et(),t=ee(),{query:n,selectedKey:a,action:o,setQuery:s,setSelectedKey:c,setAction:l}=me(),m=ce(),[g]=(0,Y.useState)(()=>Date.now()),[_,x]=(0,Y.useState)(null),[S,C]=(0,Y.useState)(`New API key`),E=(0,Y.useMemo)(()=>{let t=e.data?.userPlane.keys??[],n=e.data?.operatorPlane.keys??[];return[...t,...n]},[e.data]),D=(0,Y.useMemo)(()=>{let e=n.trim().toLowerCase();return e?E.filter(t=>t.name.toLowerCase().includes(e)||t.id.toLowerCase().includes(e)||t.scopes.some(t=>t.toLowerCase().includes(e))):E},[E,n]),O=D.find(e=>e.id===a)??E.find(e=>e.id===a),k=y({queryKey:[`console.access.blast`,O?.id],queryFn:async()=>{if(!O)throw Error(`no key`);let e=await p(O.id);if(e.error||!e.data)throw Error(e.error?.message??`blast failed`);return e.data},enabled:O!==void 0});(0,Y.useEffect)(()=>{let e=e=>{if(e.key!==`/`||e.metaKey||e.ctrlKey||e.altKey)return;let t=e.target;if(t instanceof HTMLElement){let e=t.tagName;if(e===`INPUT`||e===`TEXTAREA`||t.isContentEditable)return}e.preventDefault(),document.querySelector(`[data-slot='access-search-input']`)?.focus()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]);let A=()=>{t.invalidateQueries({queryKey:$e})},j=W({mutationFn:f,onSuccess:e=>{if(e.error||!e.data)throw Error(e.error?v(e.error):`create failed`);C(`New API key`),x(e.data.secret),c(e.data.key.id),l(null),A()}}),M=W({mutationFn:e=>d({keyId:O.id,confirmation:e.confirmation,reason:e.reason}),onSuccess:e=>{if(e.error||!e.data)throw Error(e.error?v(e.error):`rotate failed`);C(`Rotated API key`),x(e.data.secret),l(null),A()}}),N=W({mutationFn:e=>u({keyId:O.id,confirmation:e.confirmation,reason:e.reason}),onSuccess:e=>{if(e.error||!e.data)throw Error(e.error?v(e.error):`revoke failed`);l(null),A()}}),P=W({mutationFn:h,onSuccess:e=>{if(e.error||!e.data)throw Error(e.error?v(e.error):`update failed`);l(null),A()}}),F=W({mutationFn:e=>h({keyId:O.id,expiresAt:e}),onSuccess:e=>{if(e.error||!e.data)throw Error(e.error?v(e.error):`refresh failed`);l(null),A()}}),I=(0,Q.jsx)(le,{open:m.open,onToggle:m.toggle,noun:`keys`,controlsId:`access-list`,dataSlot:`access-list-toggle`});return(0,Q.jsxs)(`div`,{className:T,"data-slot":`access-page`,children:[(0,Q.jsxs)(ie,{orientation:`horizontal`,className:`min-h-0 flex-1`,children:[(0,Q.jsx)(se,{panelRef:m.panelRef,collapsible:!0,collapsedSize:0,defaultSize:b.start.defaultSize,minSize:b.start.minSize,onResize:m.onResize,className:`min-h-0 overflow-hidden`,children:(0,Q.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col overflow-hidden`,children:[(0,Q.jsxs)(`div`,{className:r,children:[(0,Q.jsx)(ae,{"data-slot":`access-search-input`,placeholder:`Search keys`,"aria-label":`Search keys`,value:n,onChange:e=>s(e.target.value)}),(0,Q.jsx)(U,{label:`Create key`,className:`flex self-stretch`,children:(0,Q.jsx)(`button`,{type:`button`,className:w,"data-slot":`access-create`,"aria-label":`Create key`,onClick:()=>l(`create`),children:(0,Q.jsx)(i,{icon:pe,className:`size-3.5`})})})]}),(0,Q.jsx)(tt,{rows:D,selectedKey:a,query:n,loading:e.isLoading,onSelect:c})]})}),m.open?(0,Q.jsx)(ue,{withHandle:!0}):null,(0,Q.jsx)(se,{defaultSize:b.end.defaultSize,minSize:b.end.minSize,className:`min-h-0 overflow-hidden`,children:O?(0,Q.jsx)(Ge,{keyRow:O,blast:k.data,now:g,leading:I,onEdit:()=>l(`edit`),onRefresh:()=>l(`refresh`),onRevoke:()=>l(`revoke`),onRotate:()=>l(`rotate`),rotatePending:M.isPending}):(0,Q.jsx)(ge,{icon:de.gate.icon,iconClassName:`border-border/70`,title:e.isLoading?`Loading keys…`:E.length>0?`Select a key`:`No keys yet`,leading:I,description:e.isLoading?`Reading planes and grantable scopes.`:E.length>0&&n.trim().length>0?(0,Q.jsxs)(Q.Fragment,{children:[`Nothing matches `,(0,Q.jsx)(`span`,{className:`font-mono`,children:n}),`.`,` `,(0,Q.jsx)(`button`,{type:`button`,className:`underline underline-offset-2 hover:text-foreground`,onClick:()=>s(``),children:`Clear search`})]}):`Create one to mint a secret once.`})})]}),(0,Q.jsx)(ct,{open:o===`create`,users:e.data?.userPlane.users??[],userScopes:e.data?.userPlane.grantableScopes??[],operatorScopes:e.data?.operatorPlane.grantableScopes??[],pending:j.isPending,error:j.error instanceof Error?j.error.message:null,onOpenChange:e=>{e||l(null)},onSubmit:e=>j.mutate(e)}),O?(0,Q.jsx)(lt,{open:o===`edit`,keyRow:O,users:e.data?.userPlane.users??[],operators:e.data?.operatorPlane.operators??[],operatorScopes:e.data?.operatorPlane.grantableScopes??[],pending:P.isPending,error:P.error instanceof Error?P.error.message:null,onOpenChange:e=>{e||l(null)},onSubmit:e=>P.mutate({keyId:O.id,...e})}):null,O?(0,Q.jsx)(ut,{open:o===`refresh`,keyRow:O,pending:F.isPending,error:F.error instanceof Error?F.error.message:null,onOpenChange:e=>{e||l(null)},onSubmit:e=>F.mutate(e)}):null,O?(0,Q.jsx)(Se,{open:o===`revoke`,onOpenChange:e=>{e||l(null)},phrase:`REVOKE`,title:`Revoke ${O.name}`,description:`Irreversible. Residual sessions may continue for the access TTL.`,pending:N.isPending,error:N.error instanceof Error?N.error.message:null,confirmLabel:`Revoke key`,slot:`access-revoke-sheet`,onConfirm:e=>N.mutate({confirmation:`REVOKE`,reason:e.reason})}):null,O?(0,Q.jsx)(Se,{open:o===`rotate`,onOpenChange:e=>{e||l(null)},phrase:`ROTATE`,title:`Rotate ${O.name}`,description:`Mints a new secret once. The current secret stops after residual TTL.`,pending:M.isPending,error:M.error instanceof Error?M.error.message:null,confirmLabel:`Rotate key`,confirmVariant:`ghost`,slot:`access-rotate-sheet`,onConfirm:e=>M.mutate({confirmation:`ROTATE`,reason:e.reason})}):null,(0,Q.jsx)(dt,{secret:_,title:S,onDismiss:()=>x(null)})]})}export{ft as AccessPage};
@@ -1 +0,0 @@
1
- import{A as e}from"./xyflow-yApv7D4e.js";import{Er as t}from"./shortcut-keys-3ILd8oGn.js";import{X as n,c as r,l as i}from"./index-BKpaes3n.js";var a=e();function o({open:e,openHeight:o=`auto`,className:s,style:c,transition:l,...u}){let d=i()??!1;return(0,a.jsx)(r.div,{...u,"aria-hidden":!e,inert:!e||void 0,initial:!1,animate:d?{opacity:+!!e}:{opacity:+!!e,clipPath:e?`inset(0 0 0% 0)`:`inset(0 0 100% 0)`,y:e?0:-4},transition:l??{duration:d?0:e?.22:.14,ease:n},className:t(`overflow-hidden`,s),style:{...c,height:e?o:0,pointerEvents:e?void 0:`none`,transformOrigin:`top`}})}export{o as t};
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{r as t}from"./react-dom-Ddte4I-Q.js";import{A as n}from"./xyflow-yApv7D4e.js";import{Dr as r,E as i,Er as a,Or as o,c as s,i as c,l,o as u,s as d,sr as f,u as p}from"./shortcut-keys-3ILd8oGn.js";import{b as m,s as h}from"./element-icons-BI8cJgdh.js";import{c as g,l as _,n as v,s as y}from"./detail-header-DVWNjWjg.js";var b=e(t(),1);function x(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}var S=n();function C({open:e,onOpenChange:t,phrase:n,title:r,description:o,children:f,pending:m=!1,error:h,confirmLabel:C,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?x({typed:D,reason:k,phrase:n}):null,P=x({typed:D,reason:k,phrase:n})===null;return(0,S.jsx)(c,{open:e,onOpenChange:t,children:(0,S.jsxs)(u,{side:`right`,showOverlay:!1,className:`sm:max-w-md`,"data-slot":T,children:[(0,S.jsxs)(l,{children:[(0,S.jsx)(p,{children:r}),(0,S.jsx)(d,{children:o})]}),(0,S.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto`,children:[f,(0,S.jsxs)(g,{label:`Type ${n} to confirm`,children:[(0,S.jsx)(i,{value:D,onChange:e=>O(e.target.value),onBlur:()=>M(!0),placeholder:n,"aria-label":`Type ${n} to confirm`,"aria-invalid":N?.typed?!0:void 0,flat:!0,className:a(v,`font-mono`),autoComplete:`off`}),N?.typed?(0,S.jsx)(`span`,{className:`block px-4 pb-2 text-[10px] text-destructive`,role:`alert`,children:N.typed}):null]}),(0,S.jsxs)(g,{label:`Reason`,children:[(0,S.jsx)(i,{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,S.jsx)(`span`,{className:`block px-4 pb-2 text-[10px] text-destructive`,role:`alert`,children:N.reason}):null]}),h?(0,S.jsx)(y,{children:h}):null]}),(0,S.jsxs)(s,{children:[(0,S.jsx)(_,{split:!0,onClick:()=>t(!1),disabled:m,children:`Cancel`}),(0,S.jsx)(_,{variant:w,disabled:!P||m,onClick:()=>{M(!0),P&&E({confirmation:D.trim(),reason:k.trim()})},"data-slot":`confirm-action`,children:m?`Working…`:C??`Confirm ${n.toLowerCase()}`})]})]})})}function w({value:e,label:t}){let[n,i]=(0,b.useState)(!1),s=(0,b.useRef)(null);return(0,b.useEffect)(()=>()=>{s.current&&clearTimeout(s.current)},[]),(0,S.jsx)(h,{label:n?`Copied`:t,children:(0,S.jsx)(`button`,{type:`button`,"aria-label":t,className:a(f,`size-4`),onClick:()=>{navigator.clipboard&&navigator.clipboard.writeText(e).then(()=>{i(!0),s.current&&clearTimeout(s.current),s.current=setTimeout(()=>i(!1),1200)})},children:(0,S.jsx)(r,{icon:n?o:m,className:n?`size-3 text-emerald-600 dark:text-emerald-400`:`size-3`,"aria-hidden":!0})})})}export{C as n,w as t};
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{r as t}from"./react-dom-Ddte4I-Q.js";import{A as n}from"./xyflow-yApv7D4e.js";import{$n as r,Dr as i,Er as a,Qn as o,Tr as s,lr as c,x as l}from"./shortcut-keys-3ILd8oGn.js";var u=e(t(),1),d=n(),f=`h-8 rounded-none border-0 bg-transparent px-4 text-[12px] shadow-none focus-visible:border-0 focus-visible:ring-0 dark:bg-transparent`,p=`h-8 rounded-none border-0 bg-transparent pr-4 pl-9 text-[12px] shadow-none focus-visible:border-0 focus-visible:ring-0 dark:bg-transparent`,m=`h-11 flex-1 rounded-none border-0 shadow-none focus-visible:ring-0`;function h({label:e,hint:t,className:n,split:r,dense:i=!1,children:o}){return(0,d.jsxs)(`label`,{className:a(`block min-w-0 border-b border-border/50`,r===`start`&&`border-r border-b-0`,r===`end`&&`border-b-0`,n),children:[i?(0,d.jsxs)(`span`,{className:`flex items-baseline justify-between gap-2 px-2 pt-1`,children:[(0,d.jsx)(`span`,{className:`min-w-0 truncate text-[10px] font-semibold tracking-[0.12em] text-muted-foreground uppercase`,children:e}),t?(0,d.jsx)(`span`,{className:`min-w-0 truncate font-mono text-[9px] text-muted-foreground/70`,children:t}):null]}):(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(`span`,{className:`block truncate px-3 pt-1.5 text-[10px] font-semibold tracking-[0.12em] text-muted-foreground uppercase`,children:e}),t?(0,d.jsx)(`span`,{className:`block truncate px-3 font-mono text-[10px] text-muted-foreground/70`,children:t}):null]}),o]})}function g({label:e,className:t,children:n}){return(0,d.jsxs)(`label`,{className:a(`flex items-center justify-between gap-3 border-b border-border/50 px-4 py-3`,t),children:[(0,d.jsx)(`span`,{className:`text-[12px] text-foreground`,children:e}),n]})}function _({active:e,extraCount:t=0,className:n,children:r,type:i=`button`,...o}){return(0,d.jsxs)(`button`,{type:i,className:a(`inline-flex items-center gap-1 rounded-none border-0 bg-transparent px-2 py-1 text-[10px] font-semibold tracking-[0.08em] uppercase shadow-none transition-colors hover:bg-muted/50`,e?`text-foreground`:`text-muted-foreground hover:text-foreground`,n),...o,children:[r,t>0?(0,d.jsx)(`span`,{className:`flex h-3.5 min-w-3.5 items-center justify-center rounded-full bg-foreground/10 px-1 text-[9px] font-semibold tabular-nums`,children:t}):null]})}function v({label:e,hint:t,className:n,children:r}){return(0,d.jsxs)(`div`,{className:a(`border-b border-border/50`,n),children:[(0,d.jsxs)(`div`,{className:`flex items-center gap-3 px-4`,children:[(0,d.jsx)(`p`,{className:`shrink-0 text-[10px] font-semibold tracking-[0.12em] text-muted-foreground uppercase`,children:e}),(0,d.jsx)(`div`,{className:`flex min-w-0 flex-1 items-stretch`,role:`group`,"aria-label":e,children:r})]}),t?(0,d.jsx)(`p`,{className:`px-4 pb-2 text-[10px] text-muted-foreground`,children:t}):null]})}function y({active:e,onClick:t,icon:n,children:r}){return(0,d.jsxs)(`button`,{type:`button`,"aria-pressed":e,onClick:t,className:a(`inline-flex h-8 min-w-0 flex-1 items-center justify-center gap-1.5 px-2 font-mono text-[10px] font-semibold outline-none select-none`,`focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:ring-inset`,e?`bg-muted text-foreground`:`text-muted-foreground hover:text-foreground`),children:[n?(0,d.jsx)(i,{icon:n,className:`size-3 shrink-0`,"aria-hidden":!0}):null,r]})}function b({split:e=!1,className:t,variant:n=`ghost`,...r}){return(0,d.jsx)(l,{variant:n,className:a(m,e&&`border-r border-border/50`,t),...r})}function x({children:e,slot:t}){return(0,d.jsx)(`p`,{className:`border-b border-border/50 px-4 py-3 text-[11px] text-destructive`,role:`alert`,"data-slot":t,children:e})}function S({label:e,hint:t,children:n}){return(0,d.jsxs)(`div`,{className:`flex items-center justify-between gap-3 border-b border-border/50 bg-muted/25 px-4 py-1.5`,children:[(0,d.jsxs)(`div`,{className:`flex min-w-0 items-baseline gap-3`,children:[(0,d.jsx)(`p`,{className:`text-[10px] font-semibold tracking-[0.12em] text-foreground uppercase`,children:e}),t?(0,d.jsx)(`p`,{className:`truncate text-[10px] text-muted-foreground`,children:t}):null]}),n]})}function C({children:e}){return(0,d.jsx)(`div`,{className:`grid grid-cols-2 border-b border-border/50`,children:e})}function w({columns:e=4,children:t}){let n=u.Children.count(t),r=Math.min(e,n);return(0,d.jsx)(`div`,{className:`@container w-full min-w-0 max-w-full`,children:(0,d.jsx)(`div`,{className:a(`grid w-full min-w-0 grid-cols-1`,r>=2&&`@min-[18rem]:grid-cols-2`,r>=3&&`@min-[26rem]:grid-cols-3`,r>=4&&`@min-[34rem]:grid-cols-4`,`[&>*]:min-w-0 [&>*]:border-r [&>*]:border-border/50`,r>=2&&`@min-[18rem]:[&>*:nth-child(2n)]:border-r-0`,r>=3&&`@min-[26rem]:[&>*:nth-child(2n)]:border-r @min-[26rem]:[&>*:nth-child(3n)]:border-r-0`,r>=4&&`@min-[34rem]:[&>*:nth-child(2n)]:border-r @min-[34rem]:[&>*:nth-child(3n)]:border-r @min-[34rem]:[&>*:nth-child(4n)]:border-r-0`,r<2&&`[&>*]:border-r-0`,`[&>*:last-child]:border-r-0`),children:t})})}function T({icon:e,wellClassName:t,wellStyle:n,title:i,badge:l,subtitle:u,leading:f,actions:p,sticky:m=!1,className:h,dataSlot:g=`detail-header`}){return(0,d.jsxs)(`header`,{className:a(o,m&&`sticky top-0 z-10`,h),"data-slot":g,children:[f?(0,d.jsxs)(`div`,{className:`-ml-2 flex h-full shrink-0 items-stretch`,children:[f,(0,d.jsx)(`span`,{className:`w-px shrink-0 self-stretch bg-border/60`,"aria-hidden":!0})]}):null,(0,d.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-2`,children:[(0,d.jsx)(`span`,{className:a(c,`flex shrink-0 items-center justify-center`,s(t??`text-muted-foreground`)),style:n?.color?{color:n.color}:void 0,"aria-hidden":!0,children:e}),(0,d.jsx)(`h2`,{className:a(r,`leading-none`),children:i}),l?(0,d.jsx)(`div`,{className:`flex min-w-0 shrink-0 items-center gap-2 leading-none`,children:l}):null,u?(0,d.jsx)(`div`,{className:`flex min-w-0 items-center gap-1.5 leading-none`,children:u}):null]}),p?(0,d.jsx)(`div`,{className:`flex h-full shrink-0 items-stretch`,children:p}):null]})}export{y as a,h as c,C as d,g as f,S as i,b as l,f as n,v as o,_ as p,p as r,x as s,T as t,w as u};
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{n as t,r as n}from"./react-dom-Ddte4I-Q.js";import{A as r}from"./xyflow-yApv7D4e.js";import{$ as i,An as a,At as o,B as s,Bn as c,C as l,Cn as u,Ct as d,D as f,Dn as p,Dr as m,En as h,Er as g,Et as _,Fn as v,Ft as y,G as b,Gn as x,H as S,Hn as C,In as w,It as T,J as E,Jn as D,Jt as O,K as k,Kn as A,Kt as j,Ln as M,Lt as N,Mt as P,Nn as ee,Nt as te,On as F,Or as I,Ot as ne,Pn as L,Pt as R,Q as z,Qt as re,Rn as B,Rt as ie,S as V,St as H,Tn as U,Tt as W,U as G,Un as K,V as ae,Vn as q,Vt as oe,W as se,Wn as J,Wt as ce,X as Y,Xn as le,Y as ue,Yn as de,Yt as fe,Z as pe,Zn as me,Zt as X,_t as he,at as ge,bn as _e,bt as ve,ct as ye,dn as be,en as xe,et as Se,fn as Ce,ft as we,g as Te,gn as Ee,gt as De,hn as Oe,ht as ke,it as Ae,jn as je,jt as Me,k as Ne,kn as Pe,kt as Fe,ln as Ie,lt as Le,m as Re,mt as ze,nn as Be,nt as Ve,on as He,ot as Ue,pn as We,q as Ge,qn as Ke,qt as Z,rn as qe,rt as Je,st as Ye,tn as Xe,tt as Ze,ut as Qe,v as $e,vt as et,w as tt,wn as nt,wt as rt,xt as it,yt as at,z as ot,zn as st,zt as ct}from"./shortcut-keys-3ILd8oGn.js";var Q=e(n(),1);function lt(e,t={}){let{enabled:n=!0,event:r=`click`,toggle:i=!0,ignoreMouse:a=!1,stickIfOpen:o=!0,touchOpenDelay:s=0,reason:c=Ie}=t,l=`rootStore`in e?e.rootStore:e,u=l.context.dataRef,d=Q.useRef(void 0),f=j(),p=K(),m=Q.useMemo(()=>{function e(e,t,n,r){let i=X(c,t,n);e&&r===`touch`&&s>0?p.start(s,()=>{l.setOpen(!0,i)}):l.setOpen(e,i)}function t(e,t,n){let r=u.current.openEvent,a=l.select(`domReferenceElement`)!==t;return e&&a||!e||!i?!0:r&&o?!n(r.type):!1}return{onPointerDown(e){d.current=v(e.pointerType,!0)&&M(e.nativeEvent)?`virtual`:e.pointerType},onMouseDown(n){let i=d.current,o=n.nativeEvent,s=l.select(`open`);if(n.button!==0||r===`click`||v(i,!0)&&a)return;let c=t(s,n.currentTarget,e=>e===`click`||e===`mousedown`),u=Pe(o);if(We(u)){e(c,o,u,i);return}let p=n.currentTarget;f.request(()=>{e(c,o,p,i)})},onClick(n){if(r===`mousedown-only`)return;let i=d.current;if(r===`mousedown`&&i){d.current=void 0;return}v(i,!0)&&a||e(t(l.select(`open`),n.currentTarget,e=>e===`click`||e===`mousedown`||e===`keydown`||e===`keyup`),n.nativeEvent,n.currentTarget,i)},onKeyDown(){d.current=void 0}}},[u,r,a,c,l,o,i,f,p,s]);return Q.useMemo(()=>n?{reference:m}:Ke,[n,m])}var ut=`Escape`;function dt(e){return c&&e.movementX===0&&e.movementY===0}function ft(e,t,n){switch(e){case`vertical`:return t;case`horizontal`:return n;default:return t||n}}function pt(e,t){return ft(t,e===`ArrowUp`||e===`ArrowDown`,e===`ArrowLeft`||e===`ArrowRight`)}function mt(e,t,n){return ft(t,e===`ArrowDown`,n?e===`ArrowLeft`:e===`ArrowRight`)||e===`Enter`||e===` `||e===``}function ht(e,t,n){return ft(t,n?e===nt:e===U,e===u)}function gt(e,t,n,r){return t===`both`||t===`horizontal`&&r?e===ut:ft(t,n?e===U:e===nt,e===h)}function _t(e,t){let{listRef:n,activeIndex:r,onNavigate:i=()=>{},enabled:a=!0,selectedIndex:o=null,allowEscape:s=!1,loopFocus:c=!1,nested:l=!1,rtl:u=!1,virtual:d=!1,focusItemOnOpen:f=`auto`,focusItemOnHover:m=!0,openOnArrowKeyDown:h=!0,disabledIndices:g=void 0,orientation:_=`vertical`,parentOrientation:v,id:b,resetOnPointerLeave:S=!0,externalTree:C,grid:E}=t,D=E!=null,k=`rootStore`in e?e.rootStore:e,A=k.useState(`open`),N=k.useState(`floatingElement`),P=k.useState(`domReferenceElement`),te=k.context.dataRef,I=be(N),ne=Ce(P),L=O(I),z=at(),re=ve(C),V=Q.useRef(f),H=Q.useRef(o??-1),U=Q.useRef(null),W=Q.useRef(!0),G=Z(e=>{i(H.current===-1?null:H.current,e)}),K=Q.useRef(!!N),ae=Q.useRef(A),q=Q.useRef(!1),oe=Q.useRef(!1),se=Q.useRef(null),J=O(g),Y=O(A),le=O(o),ue=O(S),de=j(),fe=j(),pe=Z(()=>{function e(e){d?re?.events.emit(`virtualfocus`,e):se.current=Fe(e,{sync:q.current,preventScroll:!0})}let t=n.current[H.current],r=oe.current;t&&e(t),(q.current?e=>e():e=>de.request(e))(()=>{let i=n.current[H.current]||t;i&&(t||e(i),Se&&(r||!W.current)&&i.scrollIntoView?.({block:`nearest`,inline:`nearest`}))})});x(()=>{te.current.orientation=_},[te,_]),x(()=>{a&&(A&&N?(H.current=o??-1,V.current&&o!=null&&(oe.current=!0,G())):K.current&&(H.current=-1,G()))},[a,A,N,o,G]),x(()=>{if(a){if(!A){q.current=!1;return}if(N){if(r==null){if(q.current=!1,le.current!=null)return;if(K.current&&(H.current=-1,pe()),(!ae.current||!K.current)&&V.current&&(U.current!=null||V.current===!0&&U.current==null)){let e=0,t=()=>{n.current[0]==null?(e<2&&(e?e=>fe.request(e):queueMicrotask)(t),e+=1):(H.current=U.current==null||mt(U.current,_,u)||l?T(n):y(n),U.current=null,G())};t()}}else ie(n.current,r)||(H.current=r,pe(),oe.current=!1)}}},[a,A,N,r,le,l,n,_,u,G,pe,fe]),x(()=>{if(!a||N||!re||d||!K.current)return;let e=re.nodesRef.current,t=e.find(e=>e.id===z)?.context?.elements.floating,n=p(ce(P??t??null)),r=e.some(e=>e.context&&F(e.context.elements.floating,n));t&&!r&&W.current&&t.focus({preventScroll:!0})},[a,N,P,re,z,d]),x(()=>{ae.current=A,K.current=!!N}),x(()=>{A||(U.current=null,V.current=f)},[A,f]);let me=r!=null,he=Z(e=>{if(!Y.current)return;let t=n.current.indexOf(e.currentTarget);t!==-1&&(H.current!==t||r!==t)&&(H.current=t,G(e))}),ge=Z(()=>v??re?.nodesRef.current.find(e=>e.id===z)?.context?.dataRef?.current.orientation),_e=Z(()=>T(n,J.current)),ye=Z(e=>{if(W.current=!1,q.current=!0,e.which===229||!Y.current&&e.currentTarget===L.current)return;if(l&&gt(e.key,_,u,D)){pt(e.key,ge())||B(e),k.setOpen(!1,X(qe,e.nativeEvent)),ee(P)&&(d?re?.events.emit(`virtualfocus`,P):P.focus());return}let t=H.current,r=T(n,g),i=y(n,g);if(ne||(e.key===`Home`&&(B(e),H.current=r,G(e)),e.key===`End`&&(B(e),H.current=i,G(e))),E!=null){let t=E(e,H.current,n,_,c,u,g,r,i);if(t!=null&&(H.current=t,G(e)),_===`both`)return}if(pt(e.key,_)){if(B(e),A&&!d&&p(e.currentTarget.ownerDocument)===e.currentTarget){H.current=mt(e.key,_,u)?r:i,G(e);return}mt(e.key,_,u)?c?t>=i?s&&t!==n.current.length?H.current=-1:(q.current=!1,H.current=r):H.current=R(n.current,{startingIndex:t,disabledIndices:g}):H.current=Math.min(i,R(n.current,{startingIndex:t,disabledIndices:g})):c?t<=r?s&&t!==-1?H.current=n.current.length:(q.current=!1,H.current=i):H.current=R(n.current,{startingIndex:t,decrement:!0,disabledIndices:g}):H.current=Math.max(r,R(n.current,{startingIndex:t,decrement:!0,disabledIndices:g})),ie(n.current,H.current)&&(H.current=-1),G(e)}}),Se=Q.useMemo(()=>({onFocus(e){q.current=!0,he(e)},onClick:({currentTarget:e})=>e.focus({preventScroll:!0}),onMouseMove(e){dt(e)||(q.current=!0,oe.current=!1,m&&he(e))},onPointerLeave(e){if(!Y.current||!W.current||e.pointerType===`touch`)return;q.current=!0;let t=e.relatedTarget;if(m&&!n.current.includes(t)&&ue.current&&(se.current?.(),se.current=null,H.current=-1,G(e),!d)){let e=L.current,t=p(ce(e));e&&F(e,t)&&e.focus({preventScroll:!0})}}}),[he,Y,L,m,n,G,ue,d]),we=Q.useMemo(()=>d&&A&&me&&{"aria-activedescendant":`${b}-${r}`},[d,A,me,b,r]),Te=Q.useMemo(()=>({...ne?{}:we,onKeyDown(e){if(e.key===`Tab`&&e.shiftKey&&A&&!d){let t=Pe(e.nativeEvent);if(t&&!F(L.current,t))return;B(e),k.setOpen(!1,X(xe,e.nativeEvent)),ee(P)&&P.focus();return}ye(e)},onPointerMove(e){dt(e)||(W.current=!0)}}),[we,ye,L,ne,k,A,d,P]),Ee=Q.useMemo(()=>{function e(e){k.setOpen(!0,X(qe,e.nativeEvent,e.currentTarget))}function t(e){f===`auto`&&w(e.nativeEvent)&&(V.current=!d)}function n(e){V.current=f,f===`auto`&&M(e.nativeEvent)&&(V.current=!0)}return{onKeyDown(t){let n=k.select(`open`);W.current=!1;let r=t.key.startsWith(`Arrow`),i=ht(t.key,ge(),u),a=pt(t.key,_),o=(l?i:a)||t.key===`Enter`||t.key.trim()===``;if(d&&n)return ye(t);if(n||h||!r){if(o){let e=pt(t.key,ge());U.current=l&&e?null:t.key}if(l){i&&(B(t),n?(H.current=_e(),G(t)):e(t));return}a&&(le.current!=null&&(H.current=le.current),B(t),!n&&h?e(t):ye(t),n&&G(t))}},onFocus(e){k.select(`open`)&&!d&&(H.current=-1,G(e))},onPointerDown:n,onPointerEnter:n,onMouseDown:t,onClick:t}},[ye,f,_e,l,G,k,h,_,ge,u,le,d]),De=Q.useMemo(()=>({...we,...Ee}),[we,Ee]);return Q.useMemo(()=>a?{reference:De,floating:Te,item:Se,trigger:Ee}:{},[a,De,Te,Ee,Se])}function vt(e,t){let{listRef:n,elementsRef:r,activeIndex:i,onMatch:a,disabledIndices:o,onTyping:s,enabled:c=!0,resetMs:l=750,selectedIndex:u=null}=t,d=`rootStore`in e?e.rootStore:e,f=d.useState(`open`),p=K(),m=Q.useRef(``),h=Q.useRef(u??i??-1),g=Q.useRef(null),_=Z(e=>{function t(e){return r?.current[e]}function c(e){let n=t(e);return n&&!N(n)||n?.matches(`:disabled`)?!1:o==null||!ct(A,e,o)}function d(e,t,n=0){if(e.length===0)return-1;let r=(n%e.length+e.length)%e.length,i=t.toLowerCase();for(let t=0;t<e.length;t+=1){let n=(r+t)%e.length;if(e[n]?.toLowerCase().startsWith(i)&&c(n))return n}return-1}let _=n.current;if(m.current.length>0&&e.key===` `&&(B(e),s?.(!0)),m.current.length>0&&m.current[0]!==` `&&d(_,m.current)===-1&&e.key!==` `&&s?.(!1),_==null||e.key.length!==1||e.ctrlKey||e.metaKey||e.altKey)return;f&&e.key!==` `&&(B(e),s?.(!0));let v=m.current===``;v&&(h.current=u??i??-1),_.every((e,t)=>e&&c(t)?e[0]?.toLowerCase()!==e[1]?.toLowerCase():!0)&&m.current===e.key&&(m.current=``,h.current=g.current),m.current+=e.key,p.start(l,()=>{m.current=``,h.current=g.current,s?.(!1)});let y=((v?u??i??-1:h.current)??0)+1,b=d(_,m.current,y);b===-1?e.key!==` `&&(m.current=``,s?.(!1)):(a?.(b),g.current=b)}),v=Z(e=>{let t=e.relatedTarget,n=d.select(`domReferenceElement`),r=d.select(`floatingElement`);F(n,t)||F(r,t)||(p.clear(),m.current=``,h.current=g.current,s?.(!1))});x(()=>{(f||u===null)&&(p.clear(),g.current=null,m.current!==``&&(m.current=``))},[f,u,p]);let y=Q.useMemo(()=>({onKeyDown:_,onBlur:v}),[_,v]);return Q.useMemo(()=>c?{reference:y,floating:y}:{},[c,y])}var yt=Q.forwardRef(function(e,t){let{className:n,render:r,orientation:i=`horizontal`,style:a,...o}=e;return W(`div`,e,{state:{orientation:i},ref:t,props:[{role:`separator`,"aria-orientation":i},o]})}),$=r();function bt(e){let t=Q.useRef(``),n=Q.useCallback(n=>{n.defaultPrevented||(t.current=n.pointerType,e(n,n.pointerType))},[e]);return{onClick:Q.useCallback(n=>{if(n.detail===0){e(n,`keyboard`);return}`pointerType`in n?e(n,n.pointerType):e(n,t.current),t.current=``},[e]),onPointerDown:n}}function xt(e,t){let{onClick:n,onPointerDown:r}=bt(Z((n,r)=>{(typeof e==`function`?e():e)||t(r||(q?`touch`:``))}));return Q.useMemo(()=>({onClick:n,onPointerDown:r}),[n,r])}function St(e){let[t,n]=Q.useState(null),r=xt(e,n);return f(e,t=>{t&&!e&&n(null)}),Q.useMemo(()=>({openMethod:t,triggerProps:r}),[t,r])}var Ct=Q.createContext(void 0);function wt(e){let t=Q.useContext(Ct);if(t===void 0&&!e)throw Error(J(33));return t}var Tt=Q.createContext(void 0);function Et(e){let t=Q.useContext(Tt);if(t===void 0&&!e)throw Error(J(36));return t}var Dt=Q.createContext(void 0);function Ot(e=!0){let t=Q.useContext(Dt);if(t===void 0&&!e)throw Error(J(25));return t}var kt=Q.createContext(void 0);function At(){let e=Q.useContext(kt);if(e===void 0)throw Error(J(30));return e}function jt(e){let{closeOnClick:t,highlighted:n,id:r,nodeId:i,store:a,typingRef:o,itemRef:s,itemMetadata:c}=e,{events:u}=a.useState(`floatingTreeRoot`),d=a.useState(`open`),f=Ot(!0),p=f!==void 0;return Q.useMemo(()=>({id:r,role:`menuitem`,tabIndex:d&&n?0:-1,onKeyDown(e){e.key===` `&&o?.current&&e.preventDefault()},onMouseMove(e){i&&u.emit(`itemhover`,{nodeId:i,target:e.currentTarget})},onClick(e){t&&u.emit(`close`,{domEvent:e,reason:Be})},onMouseUp(e){if(f){let t=f.initialCursorPointRef.current;if(f.initialCursorPointRef.current=null,p&&t&&Math.abs(e.clientX-t.x)<=1&&Math.abs(e.clientY-t.y)<=1||p&&!C&&e.button===2)return}s.current&&a.context.allowMouseUpTriggerRef.current&&(!p||e.button===2)&&c.type===`regular-item`&&l(s.current,e,{detail:1})}}),[t,n,r,u,i,d,a,o,s,f,p,c])}var Mt={type:`regular-item`};function Nt(e){let{closeOnClick:t,disabled:n,highlighted:r,id:i,store:a,typingRef:o=a.context.typingRef,nativeButton:s,itemMetadata:c,nodeId:l}=e,u=Q.useRef(null),{getButtonProps:d,buttonRef:f}=V({disabled:n,focusableWhenDisabled:!0,native:s,composite:!0}),p=jt({closeOnClick:t,highlighted:r,id:i,nodeId:l,store:a,typingRef:o,itemRef:u,itemMetadata:c}),m=Q.useCallback(e=>_(p,{onMouseEnter(){c.type===`submenu-trigger`&&c.setActive()}},e,d),[p,d,c]),h=fe(u,f);return Q.useMemo(()=>({getItemProps:m,itemRef:h}),[m,h])}var Pt=Q.createContext({register:()=>{},unregister:()=>{},subscribeMapChange:()=>()=>{},nextIndexRef:{current:0}});function Ft(){return Q.useContext(Pt)}function It(e={}){let{guess:t,label:n,metadata:r,textRef:i,index:a}=e,{register:o,unregister:s,subscribeMapChange:c,nextIndexRef:l}=Ft(),u=Q.useRef(-1),[d,f]=Q.useState(a==null&&t?()=>{if(u.current===-1){let e=l.current;l.current+=1,u.current=e}return u.current}:-1),p=a??d,m=Q.useRef(null),h=Q.useCallback(e=>{let t=m.current;t&&s(t),m.current=e,e&&o(e,{metadata:r??null,index:a??null,label:n,textRef:i})},[a,o,s,r,n,i]);return x(()=>{if(a==null)return c(e=>{let t=m.current?e.get(m.current)?.index:null;t!=null&&f(t)})},[a,c]),{ref:h,index:p}}var Lt=`data-checked`,Rt=`data-unchecked`,zt={checked(e){return e?{[Lt]:``}:{[Rt]:``}},..._e},Bt=Q.forwardRef(function(e,t){let{render:n,className:r,id:i,label:a,nativeButton:o=!1,disabled:s=!1,closeOnClick:c=!1,checked:l,defaultChecked:u,onCheckedChange:d,style:f,...p}=e,m=It({guess:!0,label:a}),h=wt(!0),g=se(i),{store:_}=Et(),v=_.useState(`disabled`),y=s||v,b=_.useState(`isActive`,m.index),x=_.useState(`itemProps`),[S,C]=Ne({controlled:l,default:u??!1,name:`MenuCheckboxItem`,state:`checked`}),{getItemProps:w,itemRef:T}=Nt({closeOnClick:c,disabled:y,highlighted:b,id:g,store:_,nativeButton:o,nodeId:h?.context.nodeId,itemMetadata:Mt}),E=Q.useMemo(()=>({disabled:y,highlighted:b,checked:S}),[y,b,S]);function O(e){let t=X(Be,e.nativeEvent,void 0,{preventUnmountOnClose:D});d?.(!S,t),!t.isCanceled&&C(e=>!e)}let k=W(`div`,e,{state:E,stateAttributesMapping:zt,props:[x,{role:`menuitemcheckbox`,"aria-checked":S,onClick:O},p,w],ref:[T,t,m.ref]});return(0,$.jsx)(kt.Provider,{value:E,children:k})}),Vt=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,keepMounted:a=!1,...o}=e,s=At(),c=Q.useRef(null),{transitionStatus:l,mounted:u,setMounted:d}=Le(s.checked);Ye({batch:!0,enabled:!s.checked,open:s.checked,ref:c,onComplete(){s.checked||d(!1)}});let f={checked:s.checked,disabled:s.disabled,highlighted:s.highlighted,transitionStatus:l};return W(`span`,e,{state:f,ref:[t,c],stateAttributesMapping:zt,props:{"aria-hidden":!0,...o},enabled:a||u})}),Ht=Q.createContext(void 0);function Ut(){let e=Q.useContext(Ht);if(e===void 0)throw Error(J(31));return e}var Wt=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,...a}=e,[o,s]=Q.useState(void 0),c=W(`div`,e,{ref:t,props:{role:`group`,"aria-labelledby":o,...a}});return(0,$.jsx)(Ht.Provider,{value:s,children:c})}),Gt=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,id:a,...o}=e,s=se(a),c=Ut();return x(()=>(c(s),()=>{c(e=>e===s?void 0:e)}),[c,s]),W(`div`,e,{ref:t,props:{id:s,"aria-hidden":!0,...o}})}),Kt=Q.forwardRef(function(e,t){let{render:n,className:r,id:i,label:a,nativeButton:o=!1,disabled:s=!1,closeOnClick:c=!0,style:l,...u}=e,d=It({guess:!0,label:a}),f=wt(!0),p=se(i),{store:m}=Et(),h=m.useState(`disabled`),g=s||h,_=m.useState(`isActive`,d.index),v=m.useState(`itemProps`),{getItemProps:y,itemRef:b}=Nt({closeOnClick:c,disabled:g,highlighted:_,id:p,store:m,nativeButton:o,nodeId:f?.context.nodeId,itemMetadata:Mt});return W(`div`,e,{state:{disabled:g,highlighted:_},props:[v,u,y],ref:[b,t,d.ref]})}),qt=Q.createContext(void 0);function Jt(e){let t=Q.useContext(qt);if(t===void 0&&!e)throw Error(J(69));return t}var Yt=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,finalFocus:a,...o}=e,{store:s}=Et(),{side:c,align:l}=wt(),u=Jt(!0)!=null,d=s.useState(`open`),f=s.useState(`transitionStatus`),p=s.useState(`popupProps`),m=s.useState(`mounted`),h=s.useState(`instantType`),g=s.useState(`activeTriggerElement`),_=s.useState(`parent`),v=s.useState(`lastOpenChangeReason`),y=s.useState(`rootId`),b=s.useState(`floatingRootContext`),x=s.useState(`floatingTreeRoot`),S=s.useState(`closeDelay`),C=s.useState(`hoverEnabled`),w=s.useState(`disabled`),T=s.useState(`openMethod`),E=_.type===`context-menu`;Ye({open:d,ref:s.context.popupRef,onComplete(){d&&s.context.onOpenChangeComplete?.(!0)}}),Q.useEffect(()=>{function e(e){s.setOpen(!1,X(e.reason,e.domEvent))}return x.events.on(`close`,e),()=>{x.events.off(`close`,e)}},[x.events,s]),Ge(b,{enabled:C&&!w&&!E&&_.type!==`menubar`,closeDelay:S});let D=s.useStateSetter(`popupElement`),O={transitionStatus:f,side:c,align:l,open:d,nested:_.type===`menu`,instant:h},k=W(`div`,e,{state:O,ref:[t,s.context.popupRef,D],stateAttributesMapping:Oe,props:[p,{onKeyDown(e){u&&$e.has(e.key)&&e.stopPropagation()}},ae(f),o,{"data-rootownerid":y}]}),A=_.type===void 0||E;return(g||_.type===`menubar`&&v!==`outside-press`)&&(A=!0),(0,$.jsx)(ke,{context:b,openInteractionType:T,modal:E,disabled:!m,returnFocus:a===void 0?A:a,initialFocus:_.type!==`menu`,restoreFocus:!0,externalTree:_.type===`menubar`?void 0:x,previousFocusableElement:g,nextFocusableElement:_.type===void 0?s.context.triggerFocusTargetRef:void 0,beforeContentFocusGuardRef:_.type===void 0?s.context.beforeContentFocusGuardRef:void 0,children:k})}),Xt=Q.createContext(void 0);function Zt(){let e=Q.useContext(Xt);if(e===void 0)throw Error(J(32));return e}var Qt=Q.forwardRef(function(e,t){let{keepMounted:n=!1,...r}=e,{store:i,parent:a}=Et();if(!(i.useState(`mounted`)||n))return null;let o=a.type===`menu`||a.type===`menubar`?`group`:void 0;return(0,$.jsx)(Xt.Provider,{value:n,children:(0,$.jsx)(H,{ref:t,...r,portalOwnerRole:o})})});function $t(e){let{children:t,elementsRef:n,labelsRef:r,onMapChange:i}=e,a=Z(i),[,o]=Q.useState(!1),s=me(tn).current,c=me(en).current,l=Q.useRef(0),u=Q.useRef(!0),d=Q.useRef(null),f=Q.useRef(null),p=Z(()=>{u.current||(u.current=!0,o(e=>!e))}),m=Z((e,t)=>{c.set(e,t),p()}),h=Z(e=>{c.delete(e),p()}),g=Z(e=>{let t=new Map;return n.current.length=0,r&&(r.current.length=0),e.forEach(e=>{t.set(e.element,{...e.registration.metadata??{},index:e.index}),n.current[e.index]=e.element,r&&(r.current[e.index]=e.registration.label===void 0?e.registration.textRef?.current?.textContent??e.element.textContent:e.registration.label)}),l.current=n.current.length,t});function _(e){if(f.current?.disconnect(),f.current=null,typeof MutationObserver!=`function`||e.length<2)return;let t=new MutationObserver(n=>{if(!an(n))return;let r=null;for(let n of e)if(n.isConnected){if(r&&on(r,n)>0){t.disconnect(),p();return}r=n}});f.current=t;let n=new Set;for(let t=1;t<e.length;t+=1){let r=rn(e[t-1],e[t]);r&&n.add(r)}n.forEach(e=>t.observe(e,{childList:!0}))}let v=Z(()=>{let[e,t]=nn(c),n=g(e),r=d.current,i=!r||r.length!==e.length||e.some((e,t)=>{let n=r[t];return e.index!==n.index||e.element!==n.element||e.registration.index!==n.registration.index||e.registration.metadata!==n.registration.metadata});_(t),d.current=e,u.current=!1,i&&(s.forEach(e=>e(n)),a(n))});x(()=>(!u.current&&d.current&&g(d.current),()=>{n.current=[],r&&(r.current=[])}),[n,r,g]),x(()=>{u.current&&v()}),x(()=>()=>{f.current?.disconnect(),u.current=!0},[]);let y=Z(e=>(s.add(e),()=>{s.delete(e)})),b=Q.useMemo(()=>({register:m,unregister:h,subscribeMapChange:y,nextIndexRef:l}),[m,h,y,l]);return(0,$.jsx)(Pt.Provider,{value:b,children:t})}function en(){return new Map}function tn(){return new Set}function nn(e){let t=new Set,n=[],r=[];e.forEach((e,i)=>{if(!i.isConnected)return;let a=e.index,o={index:a??-1,element:i,registration:e};a===null?r.push(o):a>=0&&(t.add(a),n.push(o))});let i=0;return r.sort((e,t)=>on(e.element,t.element)),r.forEach(e=>{for(;t.has(i);)i+=1;e.index=i,n.push(e),i+=1}),t.size>0&&n.sort((e,t)=>e.index-t.index),[n,r.map(e=>e.element)]}function rn(e,t){let n=e.parentElement;for(;n&&!n.contains(t);)n=n.parentElement;return n}function an(e){for(let t of e)for(let e=0;e<t.removedNodes.length;e+=1)if(t.removedNodes[e].isConnected)return!0;return!1}function on(e,t){return e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING?-1:1}var sn=20;function cn(e,t,n,r){let[i,a]=Q.useState(!1);x(()=>{if(!e||!t||n==null){a(!1);return}let r=ce(n).documentElement.clientWidth,i=n.offsetWidth;a(r>0&&i>0&&i>=r-sn)},[e,t,n]),Re(e&&(!t||i),r)}var ln=Q.forwardRef(function(e,t){let{anchor:n,positionMethod:r=`absolute`,className:i,render:a,side:o,align:c,sideOffset:l=0,alignOffset:u=0,collisionBoundary:f=`clipping-ancestors`,collisionPadding:p=5,arrowPadding:m=5,sticky:h=!1,disableAnchorTracking:g=!1,collisionAvoidance:_=d,style:v,...y}=e,{store:b}=Et(),C=Zt(),w=Ot(!0),T=b.useState(`parent`),E=b.useState(`floatingRootContext`),D=b.useState(`floatingTreeRoot`),O=b.useState(`mounted`),k=b.useState(`open`),A=b.useState(`modal`),j=b.useState(`openMethod`),M=b.useState(`activeTriggerElement`),N=b.useState(`transitionStatus`),P=b.useState(`positionerElement`),ee=b.useState(`instantType`),te=b.useState(`adaptiveOrigin`),F=b.useState(`lastOpenChangeReason`),I=b.useState(`floatingNodeId`),ne=b.useState(`floatingParentNodeId`),L=E.useState(`domReferenceElement`),R=Q.useRef(null),z=ye(P),re=n,B=l,ie=u,V=c,H=_;T.type===`context-menu`&&(re=n??T.context?.anchor,V??=`start`,!o&&V!==`center`&&(ie=e.alignOffset??2,B=e.sideOffset??-5));let U=o,W=V;T.type===`menu`?(U??=`inline-end`,W??=`start`,H=e.collisionAvoidance??rt):T.type===`menubar`&&(U??=T.context.orientation===`vertical`?`inline-end`:`bottom`,W??=`start`);let G=T.type===`context-menu`,ae=S({anchor:re,floatingRootContext:E,positionMethod:w?`fixed`:r,mounted:O,side:U,sideOffset:B,align:W,alignOffset:ie,arrowPadding:G?0:m,collisionBoundary:f,collisionPadding:p,sticky:h,nodeId:I,keepMounted:C,disableAnchorTracking:g,collisionAvoidance:H,shift:G?{crossAxis:!(`side`in H&&H.side===`flip`),rootBoundary:`layoutViewport`}:void 0,externalTree:D,adaptiveOrigin:te});Q.useEffect(()=>{function e(e){e.open&&(e.parentNodeId===I&&b.set(`hoverEnabled`,!1),e.nodeId!==I&&e.parentNodeId===b.select(`floatingParentNodeId`)&&b.setOpen(!1,X(He)))}return D.events.on(`menuopenchange`,e),()=>{D.events.off(`menuopenchange`,e)}},[b,D.events,I]),Q.useEffect(()=>{if(b.select(`floatingParentNodeId`)==null)return;function e(e){if(e.open||e.nodeId!==b.select(`floatingParentNodeId`))return;let t=e.reason??`sibling-open`;b.setOpen(!1,X(t))}return D.events.on(`menuopenchange`,e),()=>{D.events.off(`menuopenchange`,e)}},[D.events,b]);let q=K();Q.useEffect(()=>{k||q.clear()},[k,q]),Q.useEffect(()=>{function e(e){if(k&&e.nodeId===b.select(`floatingParentNodeId`)){if(e.target&&M&&M!==e.target){let e=b.select(`closeDelay`);e>0?q.isStarted()||q.start(e,()=>{b.setOpen(!1,X(He))}):b.setOpen(!1,X(He))}else q.clear()}}return D.events.on(`itemhover`,e),()=>{D.events.off(`itemhover`,e)}},[D.events,k,M,b,q]),Q.useEffect(()=>{let e={open:k,nodeId:I,parentNodeId:ne,reason:b.select(`lastOpenChangeReason`)};D.events.emit(`menuopenchange`,e)},[D.events,k,b,I,ne]),x(()=>{let e=L,t=R.current;if(e&&(R.current=e),t&&e&&e!==t){b.set(`instantType`,void 0);let e=new AbortController;return z(()=>{b.set(`instantType`,`trigger-change`)},e.signal),()=>{e.abort()}}},[L,z,b]);let oe={open:k,side:ae.side,align:ae.align,anchorHidden:ae.anchorHidden,nested:T.type===`menu`,instant:ee},se=T.type===`menubar`&&T.context.modal;cn(k&&(se||A&&F!==`trigger-hover`),j===`touch`,P,M);let J=s(e,oe,{styles:ae.positionerStyles,transitionStatus:N,props:y,refs:[t,b.useStateSetter(`positionerElement`)],hidden:!O,inert:!k}),ce=O&&T.type!==`menu`&&(T.type!==`menubar`&&A&&F!==`trigger-hover`||T.type===`menubar`&&T.context.modal),Y=null;return T.type===`menubar`?Y=T.context.contentElement:T.type===void 0&&(Y=M),(0,$.jsxs)(Ct.Provider,{value:ae,children:[ce&&(0,$.jsx)(Te,{ref:T.type===`context-menu`||T.type===`nested-context-menu`?T.context.internalBackdropRef:null,inert:ot(!k),cutout:Y}),(0,$.jsx)(De,{id:I,children:(0,$.jsx)($t,{elementsRef:b.context.itemDomElements,labelsRef:b.context.itemLabels,children:J})})]})}),un=Q.createContext(void 0);function dn(){let e=Q.useContext(un);if(e===void 0)throw Error(J(34));return e}var fn=Q.memo(Q.forwardRef(function(e,t){let{render:n,className:r,value:i,defaultValue:a,onValueChange:o,disabled:s=!1,style:c,"aria-labelledby":l,...u}=e,[d,f]=Q.useState(void 0),[p,m]=Ne({controlled:i,default:a,name:`MenuRadioGroup`}),h=Z((e,t)=>{o?.(e,t),!t.isCanceled&&m(e)}),g=W(`div`,e,{state:{disabled:s},ref:t,props:{role:`group`,"aria-labelledby":l??d,"aria-disabled":s||void 0,...u}}),_=Q.useMemo(()=>({value:p,setValue:h,disabled:s}),[p,h,s]);return(0,$.jsx)(Ht.Provider,{value:f,children:(0,$.jsx)(un.Provider,{value:_,children:g})})})),pn=Q.createContext(void 0);function mn(){let e=Q.useContext(pn);if(e===void 0)throw Error(J(35));return e}var hn=Q.forwardRef(function(e,t){let{render:n,className:r,id:i,label:a,nativeButton:o=!1,disabled:s=!1,closeOnClick:c=!1,value:l,style:u,...d}=e,f=It({guess:!0,label:a}),p=wt(!0),m=se(i),{store:h}=Et(),g=h.useState(`isActive`,f.index),_=h.useState(`itemProps`),{value:v,setValue:y,disabled:b}=dn(),x=h.useState(`disabled`),S=s||b||x,C=v===l,{getItemProps:w,itemRef:T}=Nt({closeOnClick:c,disabled:S,highlighted:g,id:m,store:h,nativeButton:o,nodeId:p?.context.nodeId,itemMetadata:Mt}),E=Q.useMemo(()=>({disabled:S,highlighted:g,checked:C}),[S,g,C]);function O(e){let t=X(Be,e.nativeEvent,void 0,{preventUnmountOnClose:D});y(l,t)}let k=W(`div`,e,{state:E,stateAttributesMapping:zt,props:[_,{role:`menuitemradio`,"aria-checked":C,onClick:O},d,w],ref:[T,t,f.ref]});return(0,$.jsx)(pn.Provider,{value:E,children:k})}),gn=Q.forwardRef(function(e,t){let{render:n,className:r,style:i,keepMounted:a=!1,...o}=e,s=mn(),c=Q.useRef(null),{transitionStatus:l,mounted:u,setMounted:d}=Le(s.checked);Ye({batch:!0,enabled:!s.checked,open:s.checked,ref:c,onComplete(){s.checked||d(!1)}});let f={checked:s.checked,disabled:s.disabled,highlighted:s.highlighted,transitionStatus:l};return W(`span`,e,{state:f,stateAttributesMapping:zt,ref:[t,c],props:{"aria-hidden":!0,...o},enabled:a||u})}),_n=Q.createContext(null);function vn(e){let t=Q.useContext(_n);if(t===null&&!e)throw Error(J(5));return t}var yn={...pe,disabled:e=>e.parent.type===`menubar`&&e.parent.context.disabled||e.disabled,modal:e=>(e.parent.type===void 0||e.parent.type===`context-menu`)&&(e.modal??!0),openMethod:e=>e.openMethod,allowMouseEnter:e=>e.allowMouseEnter,highlightItemOnHover:e=>e.highlightItemOnHover,parent:e=>e.parent,rootId:e=>e.parent.type===`menu`?e.parent.store.select(`rootId`):e.parent.type===void 0?e.rootId:e.parent.context.rootId,activeIndex:e=>e.activeIndex,isActive:(e,t)=>e.activeIndex===t,hoverEnabled:e=>e.hoverEnabled,instantType:e=>e.instantType,lastOpenChangeReason:e=>e.openChangeReason,floatingTreeRoot:e=>e.parent.type===`menu`?e.parent.store.select(`floatingTreeRoot`):e.floatingTreeRoot,floatingNodeId:e=>e.floatingNodeId,floatingParentNodeId:e=>e.floatingParentNodeId,itemProps:e=>e.itemProps,closeDelay:e=>e.closeDelay,adaptiveOrigin:e=>e.adaptiveOrigin,keyboardEventRelay:e=>{if(e.keyboardEventRelay)return e.keyboardEventRelay;if(e.parent.type===`menu`)return e.parent.store.select(`keyboardEventRelay`)}},bn=class extends we{constructor(e,t,n=!1){let r=new z,i=Sn(r,t,n,e);super(i,xn(r),yn),this.unsubscribeParentListener=this.observe(`parent`,e=>{if(this.unsubscribeParentListener?.(),e.type===`menu`){let t=e.store.select(`rootId`),n=e.store.select(`floatingTreeRoot`),r=e.store.select(`keyboardEventRelay`);this.unsubscribeParentListener=e.store.subscribe(()=>{let i=e.store.select(`rootId`),a=e.store.select(`floatingTreeRoot`),o=e.store.select(`keyboardEventRelay`);(t!==i||n!==a||r!==o)&&(t=i,n=a,r=o,this.notifyAll())}),this.context.allowMouseUpTriggerRef=e.store.context.allowMouseUpTriggerRef;return}e.type!==void 0&&(this.context.allowMouseUpTriggerRef=e.context.allowMouseUpTriggerRef),this.unsubscribeParentListener=null})}setOpen(e,t){this.state.floatingRootContext.context.events.emit(`setOpen`,{open:e,eventDetails:t})}unsubscribeParentListener=null};function xn(e){return{positionerRef:Q.createRef(),popupRef:Q.createRef(),typingRef:{current:!1},itemDomElements:{current:[]},itemLabels:{current:[]},allowMouseUpTriggerRef:{current:!1},triggerFocusTargetRef:Q.createRef(),beforeContentFocusGuardRef:Q.createRef(),onOpenChangeComplete:void 0,triggerElements:e}}function Sn(e,t,n=!1,r){return{...Y(e,t,n),disabled:!1,modal:!0,openMethod:null,allowMouseEnter:!1,highlightItemOnHover:!0,parent:{type:void 0},rootId:void 0,activeIndex:null,hoverEnabled:!0,instantType:void 0,openChangeReason:null,floatingTreeRoot:new it,floatingNodeId:void 0,floatingParentNodeId:null,itemProps:Ke,keyboardEventRelay:void 0,closeDelay:0,adaptiveOrigin:void 0,...r}}var Cn=Q.createContext(void 0);function wn(){return Q.useContext(Cn)}var Tn=de(function(e){let{children:t,open:n,onOpenChange:r,onOpenChangeComplete:a,defaultOpen:o=!1,disabled:s=!1,modal:c,loopFocus:l=!0,orientation:u=`vertical`,actionsRef:d,closeParentOnEsc:f=!1,handle:p,triggerId:m,defaultTriggerId:h=null,highlightItemOnHover:g=!0}=e,v=Ot(!0),y=Et(!0),b=vn(!0),S=wn(),C=Q.useMemo(()=>S&&y?{type:`menu`,store:y.store}:b?{type:`menubar`,context:b}:v&&!y?{type:`context-menu`,context:v}:{type:void 0},[v,y,b,S]),w=ne(),T=ne(),E=at(),D=C.type===`menu`?C.store:void 0,O=(n??o)&&D?.state.transitionStatus===`starting`,k=me(()=>O?D?.state.instantType:void 0).current,j=En({open:o,openProp:n,activeTriggerId:h,triggerIdProp:m,parent:C,disabled:s,highlightItemOnHover:g,modal:C.type===void 0?c:void 0,rootId:w,instantType:k},T,E!=null);j.useControlledProp(`openProp`,n),j.useControlledProp(`triggerIdProp`,m),j.useContextCallback(`onOpenChangeComplete`,a);let M=j.useState(`floatingTreeRoot`),N=et(M),P=j.useState(`open`),ee=j.useState(`activeTriggerElement`),te=j.useState(`positionerElement`),F=j.useState(`hoverEnabled`),I=j.useState(`disabled`),L=j.useState(`lastOpenChangeReason`),R=j.useState(`parent`),z=j.useState(`activeIndex`),re=j.useState(`payload`),B=j.useState(`floatingParentNodeId`),ie=Q.useRef(null),V=Q.useRef(R.type!==`context-menu`),H=K(),U=Q.useRef(!0),W=K(),ae=B!=null,{openMethod:q,triggerProps:oe}=St(P);j.useSyncedValues({disabled:s,highlightItemOnHover:g,modal:R.type===void 0?c:void 0,openMethod:q,rootId:w}),Je(j);let{forceUnmount:se,transitionStatus:J}=Ae(P,j,()=>{j.set(`allowMouseEnter`,!1)},O),ce=ye(j.context.popupRef);Q.useEffect(()=>{if(k===void 0)return;let e=()=>{j.state.instantType===k&&j.set(`instantType`,void 0)};if(!P){e();return}if(J!==void 0)return;if(j.context.popupRef.current==null){e();return}let t=new AbortController;return ce(e,t.signal),()=>{t.abort()}},[k,P,J,ce,j]),x(()=>{v&&!y?j.update({parent:{type:`context-menu`,context:v},floatingNodeId:N,floatingParentNodeId:E}):y&&j.update({floatingNodeId:N,floatingParentNodeId:E})},[v,y,N,E,j]),Q.useEffect(()=>{if(P||(ie.current=null),R.type===`context-menu`){if(!P){H.clear(),V.current=!1;return}H.start(500,()=>{V.current=!0})}},[H,P,R.type]),x(()=>{!P&&!F&&j.set(`hoverEnabled`,!0)},[P,F,j]);let Y=Z((e,t)=>{let n=t.reason;if(!e&&!j.select(`open`)||P===e&&t.trigger===ee&&L===n)return;let i=Ze(t);if(!e&&t.trigger==null&&(t.trigger=ee??void 0),r?.(e,t),t.isCanceled)return;j.state.floatingRootContext.dispatchOpenChange(e,t);let a=t.event;if(e===!1&&a?.type===`click`&&a.pointerType===`touch`&&!U.current)return;e&&n===`trigger-focus`?(U.current=!1,W.start(300,()=>{U.current=!0})):(U.current=!0,W.clear());let o=(n===`trigger-press`||n===`item-press`)&&a.detail===0,s=!e&&(n===`escape-key`||n==null);ie.current=t.event;let c=Ve(j.state,e,t.trigger,i());c.openChangeReason=n,c.instantType=R.type===`menubar`&&(n===`trigger-focus`||n===`focus-out`||n===`trigger-hover`||n===`list-navigation`||n===`sibling-open`)?`group`:o||s?o?`click`:`dismiss`:void 0,j.update(c)}),le=Qe({popupStore:j,floatingRootContext:j.state.floatingRootContext,floatingId:T,nested:E!=null,onOpenChange:Y}),ue=le.context.events;x(()=>{let e=({open:e,eventDetails:t})=>Y(e,t);return ue.on(`setOpen`,e),()=>{ue?.off(`setOpen`,e)}},[ue,Y]);let de=Q.useCallback(()=>{j.setOpen(!1,X(Xe))},[j]);Q.useImperativeHandle(d,()=>({unmount:se,close:de}),[se,de]);let fe;R.type===`context-menu`&&(fe=R.context),Q.useImperativeHandle(fe?.positionerRef,()=>te,[te]),Q.useImperativeHandle(fe?.actionsRef,()=>({setOpen:Y}),[Y]);let pe=ze(le,{enabled:!I,bubbles:{escapeKey:f&&R.type===`menu`},outsidePress(){return R.type!==`context-menu`||ie.current?.type===`contextmenu`||V.current},externalTree:ae?M:void 0}),_e=G(),ve=Q.useCallback(e=>{j.select(`activeIndex`)!==e&&j.set(`activeIndex`,e)},[j]),be=_t(le,{enabled:!I,listRef:j.context.itemDomElements,activeIndex:z,nested:R.type!==void 0,loopFocus:l,orientation:u,parentOrientation:R.type===`menubar`?R.context.orientation:void 0,rtl:_e===`rtl`,disabledIndices:A,onNavigate:ve,openOnArrowKeyDown:R.type!==`context-menu`,externalTree:ae?M:void 0,focusItemOnHover:g}),xe=Q.useCallback(e=>{j.context.typingRef.current=e},[j]),Ce=vt(le,{enabled:!I,listRef:j.context.itemLabels,elementsRef:j.context.itemDomElements,activeIndex:z,resetMs:500,onMatch:e=>{P&&e!==z&&j.set(`activeIndex`,e)},onTyping:xe}),we=Q.useMemo(()=>{let e=_(Ce.reference,be.reference,pe.reference,{onMouseMove(){j.set(`allowMouseEnter`,!0)}},oe);return e[`aria-haspopup`]=`menu`,e[`aria-expanded`]=P,e},[j,Ce.reference,be.reference,pe.reference,oe,P]),Te=Q.useMemo(()=>{let e=_(be.trigger,pe.trigger,oe);return e[`aria-haspopup`]=`menu`,e[`aria-expanded`]=!1,e},[be.trigger,pe.trigger,oe]);me(()=>(j.update({inactiveTriggerProps:Te}),null));let Ee=Q.useMemo(()=>_(i,{id:T,role:`menu`,"aria-orientation":u===`horizontal`?`horizontal`:void 0,"aria-labelledby":ee?.id,onMouseMove(){j.set(`allowMouseEnter`,!0),R.type===`menu`&&j.set(`hoverEnabled`,!1)},onClick(){j.select(`hoverEnabled`)&&j.set(`hoverEnabled`,!1)},onKeyDown(e){let t=j.select(`keyboardEventRelay`);t&&!e.isPropagationStopped()&&t(e)}},Ce.floating,be.floating,pe.floating),[ee,T,u,R.type,j,Ce.floating,be.floating,pe.floating]),De=be.item??Ke;ge(j,{floatingRootContext:le,activeTriggerProps:we,inactiveTriggerProps:Te,popupProps:Ee,itemProps:De});let Oe=Q.useMemo(()=>({store:j,parent:C}),[j,C]),ke=(0,$.jsxs)(Tt.Provider,{value:Oe,children:[p&&(0,$.jsx)(Se,{handle:p,store:j}),typeof t==`function`?t({payload:re}):t]});return R.type===void 0||R.type===`context-menu`?(0,$.jsx)(he,{externalTree:M,children:ke}):ke});function En(e,t,n){return me(()=>new bn(e,t,n)).current}var Dn=5;function On(e,t){let n=kn(t);return e.clientX>=n.left-Dn&&e.clientX<=n.right+Dn&&e.clientY>=n.top-Dn&&e.clientY<=n.bottom+Dn}function kn(e){let t=e.getBoundingClientRect(),n=je(e);if(st)return t;let r=n.getComputedStyle(e,`::before`),i=n.getComputedStyle(e,`::after`);if(r.content===`none`&&i.content===`none`)return t;let a=parseFloat(r.width)||0,o=parseFloat(r.height)||0,s=parseFloat(i.width)||0,c=parseFloat(i.height)||0,l=Math.max(t.width,a,s),u=Math.max(t.height,o,c),d=l-t.width,f=u-t.height;return{left:t.left-d/2,right:t.right+d/2,top:t.top-f/2,bottom:t.bottom+f/2}}function An(e={}){let{highlightItemOnHover:t,highlightedIndex:n,onHighlightedIndexChange:r}=tt(),{ref:i,index:a}=It(e),o=n===a,s=Q.useRef(null),c=fe(i,s);return{compositeProps:{tabIndex:o?0:-1,onFocus(){r(a)},onMouseMove(){let e=s.current;if(!t||!e)return;let n=e.hasAttribute(`disabled`)||e.ariaDisabled===`true`;!o&&!n&&e.focus()}},compositeRef:c,index:a}}function jn(e){let{render:t,className:n,style:r,state:i=Ke,props:a=A,refs:o=A,metadata:s,stateAttributesMapping:c,tag:l=`div`,...u}=e,{compositeProps:d,compositeRef:f}=An({metadata:s});return W(l,e,{state:i,ref:[f,...o],props:[d,...a,u],stateAttributesMapping:c})}function Mn(e){if(ee(e)&&e.hasAttribute(`data-rootownerid`))return e.getAttribute(`data-rootownerid`);if(!L(e))return Mn(a(e))}var Nn=e(t(),1);function Pn(e,t){let n=Q.useRef(null);function r(t){Nn.flushSync(()=>{e.setOpen(!1,X(xe,t.nativeEvent,t.currentTarget))}),P(n.current)?.focus()}function i(n){let r=e.select(`positionerElement`);if(r&&te(n,r))e.context.beforeContentFocusGuardRef.current?.focus();else{Nn.flushSync(()=>{e.setOpen(!1,X(xe,n.nativeEvent,n.currentTarget))});let i=Me(e.context.triggerFocusTargetRef.current||t.current);for(;i!==null&&F(r,i);){let e=i;if(i=o(i),i===e)break}i?.focus()}}return{preFocusGuardRef:n,handlePreFocusGuardFocus:r,handleFocusTargetFocus:i}}function Fn(e){let{enabled:t=!0,mouseDownAction:n,open:r}=e,i=Q.useRef(!1);return Q.useMemo(()=>t?{onMouseDown:e=>{(n===`open`&&!r||n===`close`&&r)&&(i.current=!0,ce(e.currentTarget).addEventListener(`click`,()=>{i.current=!1},{once:!0}))},onClick:e=>{i.current&&(i.current=!1,e.preventBaseUIHandler())}}:Ke,[t,n,r])}var In=le(function(e,t){let{render:n,className:r,style:i,disabled:a=!1,nativeButton:o=!0,id:s,openOnHover:c,delay:l=100,closeDelay:u=0,handle:d,payload:f,...p}=e,m=Et(!0),h=ue(d)??m?.store;if(!h)throw Error(J(85));let g=se(s),v=h.useState(`isTriggerActive`,g),y=h.useState(`floatingRootContext`),x=h.useState(`isOpenedByTrigger`,g),S=h.useState(`triggerPopupId`,g),C=Q.useRef(null),w=Rn(),T=tt(!0),D=ve(),O=Q.useMemo(()=>D??new it,[D]),A=et(O),j=at(),{registerTrigger:M,isMountedByThisTrigger:N}=Ue(g,C,h,{payload:f,closeDelay:u,parent:w,floatingTreeRoot:O,floatingNodeId:A,floatingParentNodeId:j,keyboardEventRelay:T?.relayKeyboardEvent}),P=w.type===`menubar`,ee=h.useState(`disabled`),te=a||ee||P&&w.context.disabled,{getButtonProps:I,buttonRef:ne}=V({disabled:te,native:o});Q.useEffect(()=>{!x&&w.type===void 0&&(h.context.allowMouseUpTriggerRef.current=!1)},[h,x,w.type]);let L=Q.useRef(null),R=K(),z=Z(e=>{if(!L.current)return;R.clear(),h.context.allowMouseUpTriggerRef.current=!1;let t=e.target;F(L.current,t)||F(h.select(`positionerElement`),t)||t===L.current||(t==null||Mn(t)!==h.select(`rootId`))&&(On(e,L.current)||O.events.emit(`close`,{domEvent:e,reason:re}))});Q.useEffect(()=>{x&&h.select(`lastOpenChangeReason`)===`trigger-hover`&&ce(L.current).addEventListener(`mouseup`,z,{once:!0})},[x,z,h]);let B=P&&w.context.hasSubmenuOpen,ie=k(y,{enabled:(c??B)&&!te&&(!P||B&&!N),handleClose:b({blockPointerEvents:!P}),mouseOnly:!0,move:!1,restMs:w.type===void 0?l:void 0,delay:{close:u},triggerElementRef:C,externalTree:O,isActiveTrigger:v,isClosing:()=>h.select(`transitionStatus`)===`ending`}),H=Ln(x,h.select(`lastOpenChangeReason`)),U=lt(y,{enabled:!te,event:x&&P?`click`:`mousedown`,toggle:!0,ignoreMouse:!1,stickIfOpen:w.type===void 0&&H}),G=E(y,{enabled:!te&&B}),ae=Fn({open:x,enabled:P,mouseDownAction:`open`}),q=Q.useMemo(()=>_(G.reference,U.reference),[G.reference,U.reference]),Y=h.useState(`triggerProps`,N),{preFocusGuardRef:le,handlePreFocusGuardFocus:de,handleFocusTargetFocus:fe}=Pn(h,C),pe={disabled:te,open:x},me=[L,t,ne,M,C],X=[q,ie??Ke,Y,{"aria-haspopup":`menu`,"aria-controls":S,id:g,onMouseDown:e=>{h.select(`open`)||(R.start(200,()=>{h.context.allowMouseUpTriggerRef.current=!0}),ce(e.currentTarget).addEventListener(`mouseup`,z,{once:!0}))}},P?{role:`menuitem`}:{},ae,p,I],he=W(`button`,e,{enabled:!P,stateAttributesMapping:Ee,state:pe,ref:me,props:X});return P?(0,$.jsx)(jn,{tag:`button`,render:n,className:r,style:i,state:pe,refs:me,props:X,stateAttributesMapping:Ee}):x?(0,$.jsxs)(Q.Fragment,{children:[(0,$.jsx)(oe,{ref:le,onFocus:de},`${g}-pre-focus-guard`),(0,$.jsx)(Q.Fragment,{children:he},g),(0,$.jsx)(oe,{ref:h.context.triggerFocusTargetRef,onFocus:fe},`${g}-post-focus-guard`)]}):(0,$.jsx)(Q.Fragment,{children:he},g)});function Ln(e,t){let n=K(),[r,i]=Q.useState(!1);return x(()=>{e&&t===`trigger-hover`?(i(!0),n.start(500,()=>{i(!1)})):e||(n.clear(),i(!1))},[e,t,n]),r}function Rn(){let e=vn(!0);return Q.useMemo(()=>e?{type:`menubar`,context:e}:{type:void 0},[e])}function zn({...e}){return(0,$.jsx)(Tn,{"data-slot":`dropdown-menu`,...e})}function Bn({...e}){return(0,$.jsx)(In,{"data-slot":`dropdown-menu-trigger`,...e})}function Vn({align:e=`start`,alignOffset:t=0,side:n=`bottom`,sideOffset:r=4,className:i,...a}){return(0,$.jsx)(Qt,{children:(0,$.jsx)(ln,{className:`isolate z-50 outline-none`,align:e,alignOffset:t,side:n,sideOffset:r,children:(0,$.jsx)(Yt,{"data-slot":`dropdown-menu-content`,className:g(`cn-menu-target cn-menu-translucent z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95`,i),...a})})})}function Hn({...e}){return(0,$.jsx)(Wt,{"data-slot":`dropdown-menu-group`,...e})}function Un({className:e,inset:t,...n}){return(0,$.jsx)(Gt,{"data-slot":`dropdown-menu-label`,"data-inset":t,className:g(`px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:pl-7`,e),...n})}function Wn({className:e,inset:t,variant:n=`default`,...r}){return(0,$.jsx)(Kt,{"data-slot":`dropdown-menu-item`,"data-inset":t,"data-variant":n,className:g(`group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive`,e),...r})}function Gn({className:e,children:t,checked:n,inset:r,...i}){return(0,$.jsxs)(Bt,{"data-slot":`dropdown-menu-checkbox-item`,"data-inset":r,className:g(`relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),checked:n,...i,children:[(0,$.jsx)(`span`,{className:`pointer-events-none absolute right-2 flex items-center justify-center`,"data-slot":`dropdown-menu-checkbox-item-indicator`,children:(0,$.jsx)(Vt,{children:(0,$.jsx)(m,{icon:I,size:16,color:`currentColor`,strokeWidth:1.5})})}),t]})}function Kn({...e}){return(0,$.jsx)(fn,{"data-slot":`dropdown-menu-radio-group`,...e})}function qn({className:e,children:t,inset:n,...r}){return(0,$.jsxs)(hn,{"data-slot":`dropdown-menu-radio-item`,"data-inset":n,className:g(`relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),...r,children:[(0,$.jsx)(`span`,{className:`pointer-events-none absolute right-2 flex items-center justify-center`,"data-slot":`dropdown-menu-radio-item-indicator`,children:(0,$.jsx)(gn,{children:(0,$.jsx)(m,{icon:I,size:16,color:`currentColor`,strokeWidth:1.5})})}),t]})}function Jn({className:e,...t}){return(0,$.jsx)(yt,{"data-slot":`dropdown-menu-separator`,className:g(`-mx-1 my-1 h-px bg-border`,e),...t})}function Yn({className:e,...t}){return(0,$.jsx)(`span`,{"data-slot":`dropdown-menu-shortcut`,className:g(`ml-auto text-xs tracking-widest text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground`,e),...t})}export{St as _,Wn as a,_t as b,qn as c,Bn as d,On as f,It as g,Jt as h,Hn as i,Jn as l,$t as m,Gn as n,Un as o,cn as p,Vn as r,Kn as s,zn as t,Yn as u,yt as v,lt as x,vt as y};
@@ -1,9 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{r as t}from"./react-dom-Ddte4I-Q.js";import{A as n}from"./xyflow-yApv7D4e.js";import{B as r,C as i,F as a,G as o,H as s,I as c,J as l,K as u,M as d,O as f,P as p,S as m,T as h,U as g,V as _,W as v,Y as y,_ as b,b as x,d as S,f as C,g as w,h as T,j as ee,k as te,m as E,p as D,q as O,u as k,v as A,w as j,x as ne,y as re,z as M}from"./index-BKpaes3n.js";var N=[[`path`,{d:`M15 6C15 6 9.00001 10.4189 9 12C8.99999 13.5812 15 18 15 18`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:`1.5`,key:`0`}]],ie=[[`path`,{d:`M9.00005 6C9.00005 6 15 10.4189 15 12C15 13.5812 9 18 9 18`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:`1.5`,key:`0`}]],ae=[[`path`,{d:`M8 5.5L20 5.5`,stroke:`currentColor`,strokeLinecap:`round`,strokeWidth:`1.5`,key:`0`}],[`path`,{d:`M8 12.5L20 12.5`,stroke:`currentColor`,strokeLinecap:`round`,strokeWidth:`1.5`,key:`1`}],[`path`,{d:`M8 19.5L20 19.5`,stroke:`currentColor`,strokeLinecap:`round`,strokeWidth:`1.5`,key:`2`}],[`path`,{d:`M4.375 5.5H4.25M4.5 5.5C4.5 5.63807 4.38807 5.75 4.25 5.75C4.11193 5.75 4 5.63807 4 5.5C4 5.36193 4.11193 5.25 4.25 5.25C4.38807 5.25 4.5 5.36193 4.5 5.5Z`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:`1.5`,key:`3`}],[`path`,{d:`M4.375 12.5H4.25M4.5 12.5C4.5 12.6381 4.38807 12.75 4.25 12.75C4.11193 12.75 4 12.6381 4 12.5C4 12.3619 4.11193 12.25 4.25 12.25C4.38807 12.25 4.5 12.3619 4.5 12.5Z`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:`1.5`,key:`4`}],[`path`,{d:`M4.375 19.5H4.25M4.5 19.5C4.5 19.6381 4.38807 19.75 4.25 19.75C4.11193 19.75 4 19.6381 4 19.5C4 19.3619 4.11193 19.25 4.25 19.25C4.38807 19.25 4.5 19.3619 4.5 19.5Z`,stroke:`currentColor`,strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:`1.5`,key:`5`}]],oe=(e,t,n)=>{let r=t-e;return((n-e)%r+r)%r+e};function P(e,t){return M(e)?e[oe(0,e.length,t)]:e}var se=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 F(this.animations,`duration`)}get iterationDuration(){return F(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 F(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 ce=class extends se{then(e,t){return this.finished.finally(e).then(()=>{})}},I=[];function le(e){g(typeof e.test==`function`&&typeof e.read==`function`,`Effects passed to animate.addEffect() need test() and read().`,`effect-missing-test`),L(e),I.unshift(e)}function L(e){o(I,e)}function ue(e){return I.find(t=>t.test(e))}function de(e,t,n,r={}){let i=[];for(let a in n){let o=n[a],s=e.get(t,a);if(!s){let n=e.read(t,a,o)??fe(o);g(n!==void 0,`"${a}" can't be read from the animated subject. Provide [from, to] keyframes.`,`effect-unreadable-value`),s=f(n),e(t,{[a]:s})}s.start(j(a,s,o,h(r,a))),s.animation&&i.push(s.animation)}return i}function fe(e){let t=Array.isArray(e)?e[0]:void 0;return t===null?void 0:t}function pe(e,t){return e in t}var R=class extends T{constructor(){super(...arguments),this.type=`object`}readValueFromInstance(e,t){if(pe(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 b()}build(e,t){Object.assign(e.output,t)}renderInstance(e,{output:t}){Object.assign(e,t)}sortInstanceNodePosition(){return 0}},z=n(),B=e(t(),1);function V(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function me(...e){return t=>{let n=!1,r=e.map(e=>{let r=V(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():V(e[t],null)}}}}function he(...e){return B.useCallback(me(...e),e)}var ge=class extends B.Component{getSnapshotBeforeUpdate(e){let t=this.props.childRef.current;if(x(t)&&e.isPresent&&!this.props.isPresent&&this.props.pop!==!1){let e=t.offsetParent,n=x(e)&&e.offsetWidth||0,r=x(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 _e({children:e,isPresent:t,anchorX:n,anchorY:r,root:i,pop:a}){let o=(0,B.useId)(),s=(0,B.useRef)(null),c=(0,B.useRef)({width:0,height:0,top:0,left:0,right:0,bottom:0,direction:`ltr`}),{nonce:l}=(0,B.useContext)(S),u=he(s,a===!1?void 0:e.props?.ref??e?.ref);return(0,B.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
- [data-motion-pop-id="${o}"] {
3
- position: absolute !important;
4
- width: ${e}px !important;
5
- height: ${u}px !important;
6
- ${_}px !important;
7
- ${v}px !important;
8
- }
9
- `),()=>{s.current?.removeAttribute(`data-motion-pop-id`),b.contains(y)&&b.removeChild(y)}},[t]),(0,z.jsx)(ge,{isPresent:t,childRef:s,sizeRef:c,pop:a,children:a===!1?e:B.cloneElement(e,{ref:u})})}var ve=({children:e,initial:t,isPresent:n,onExitComplete:r,custom:i,presenceAffectsLayout:a,mode:o,anchorX:s,anchorY:c,root:d})=>{let f=l(ye),p=(0,B.useId)(),m=(0,B.useRef)(n),h=(0,B.useRef)(r);O(()=>{m.current=n,h.current=r});let g=!0,_=(0,B.useMemo)(()=>(g=!1,{id:p,initial:t,isPresent:n,custom:i,onExitComplete:e=>{f.set(e,!0);for(let e of f.values())if(!e)return;r&&r()},register:e=>(f.set(e,!1),()=>{f.delete(e),!m.current&&!f.size&&h.current?.()})}),[n,f,r]);return a&&g&&(_={..._}),(0,B.useMemo)(()=>{f.forEach((e,t)=>f.set(t,!1))},[n]),B.useEffect(()=>{!n&&!f.size&&r&&r()},[n]),e=(0,z.jsx)(_e,{pop:o===`popLayout`,isPresent:n,anchorX:s,anchorY:c,root:d,children:e}),(0,z.jsx)(u.Provider,{value:_,children:e})};function ye(){return new Map}var H=e=>e.key||``;function U(e){let t=[];return B.Children.forEach(e,e=>{(0,B.isValidElement)(e)&&t.push(e)}),t}var be=({children:e,custom:t,initial:n=!0,onExitComplete:r,presenceAffectsLayout:i=!0,mode:a=`sync`,propagate:o=!1,anchorX:s=`left`,anchorY:c=`top`,root:u})=>{let[d,f]=k(o),p=(0,B.useMemo)(()=>U(e),[e]),m=o&&!d?[]:p.map(H),h=(0,B.useRef)(!0),g=(0,B.useRef)(p),_=l(()=>new Map),v=(0,B.useRef)(new Set),[b,x]=(0,B.useState)(p),[S,C]=(0,B.useState)(p);O(()=>{o&&!d&&!S.length&&f?.()},[d,o,S.length,f]),O(()=>{h.current=!1,g.current=p;for(let e=0;e<S.length;e++){let t=H(S[e]);m.includes(t)?(_.delete(t),v.current.delete(t)):_.get(t)!==!0&&_.set(t,!1)}},[S,m.length,m.join(`-`)]);let w=[];if(p!==b){let e=[...p],t=0;for(let n of S){let r=m.indexOf(H(n));r===-1?(e.splice(t++,0,n),w.push(n)):t=r+w.length+1}return a===`wait`&&w.length&&(e=w),C(U(e)),x(p),null}let{forceRender:T}=(0,B.useContext)(y);return(0,z.jsx)(z.Fragment,{children:S.map(e=>{let l=H(e),y=o&&!d?!1:p===S||m.includes(l);return(0,z.jsx)(ve,{isPresent:y,initial:!h.current||n?void 0:!1,custom:t,presenceAffectsLayout:i,mode:a,root:u,onExitComplete:y?void 0:()=>{if(v.current.has(l))return;if(_.has(l))v.current.add(l),_.set(l,!0);else return;let e=!0;_.forEach(t=>{t||(e=!1)}),e&&(T?.(),C(g.current),o&&f?.(),r&&r())},anchorX:s,anchorY:c,children:e},l)})})};function W(e){return typeof e==`object`&&!Array.isArray(e)}function G(e,t,n,r){return e==null?[]:typeof e==`string`&&W(t)?ne(e,n,r):e instanceof NodeList?Array.from(e):Array.isArray(e)?e.filter(e=>e!=null):[e]}function xe(e,t,n){return e*(t+1)+n*t}function K(e,t,n,r){return typeof t==`number`?t:t.startsWith(`-`)||t.startsWith(`+`)?Math.max(0,e+parseFloat(t)):t===`<`?n:t.startsWith(`<`)?Math.max(0,n+parseFloat(t.slice(1))):r.get(t)??e}function Se(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];i.at>t&&i.at<n&&(o(e,i),r--)}}function Ce(e,t,n,r,i,a){Se(e,i,a);for(let o=0;o<t.length;o++)e.push({value:t[o],at:c(i,a,r[o]),easing:P(n,o)})}function we(e,t,n=0){let r=t+1+t*n;for(let t=0;t<e.length;t++)e[t]=e[t]/r}function Te(e,t){return e.at===t.at?e.value===null?1:t.value===null?-1:0:e.at-t.at}var Ee=`easeInOut`,q=20;function De(e,{defaultTransition:t={},...n}={},o,c){let l=t.duration||.3,u=new Map,f=new Map,p={},m=new Map,h=0,g=0,y=0;for(let n=0;n<e.length;n++){let s=e[n];if(typeof s==`string`){m.set(s,g);continue}if(!Array.isArray(s)){m.set(s.name,K(g,s.at,h,m));continue}let[u,b,x={}]=s;x.at!==void 0&&(g=K(g,x.at,h,m));let S=0,C=(e,n,i,o=0,s=0)=>{let u=Oe(e),{delay:f=0,times:p=ee(u),type:m=t.type||`keyframes`,repeat:h,repeatType:b,repeatDelay:x=0,...C}=n,{ease:w=t.ease||`easeOut`,duration:T}=n,E=typeof f==`function`?f(o,s):f,D=u.length,O=te(m)?m:c?.[m||`keyframes`];if(D<=2&&O){let e=100;if(D===2&&je(u)){let t=u[1]-u[0];e=Math.abs(t)}let n={...t,...C};T!==void 0&&(n.duration=_(T));let r=a(n,e,O);w=r.ease,T=r.duration}T??=l;let k=g+E;p.length===1&&p[0]===0&&(p[1]=1);let A=p.length-u.length;if(A>0&&d(p,A),u.length===1&&u.unshift(null),h&&v(h<q,`Sequence segments can't repeat ${h} times — ignoring repeat option. Use a value below ${q} or apply repeat at the sequence level instead.`),h&&h<q){let e=T>0?x/T:0;T=xe(T,h,x);let t=[...u],n=[...p];w=Array.isArray(w)?[...w]:[w];let i=[...w],a=b===`reverse`||b===`mirror`,o=t,s=i;a&&(o=[...t].reverse(),b===`reverse`&&(s=[...i].reverse().map(e=>typeof e==`function`?r(e):e)));for(let r=0;r<h;r++){let c=a&&r%2==0,l=c?o:t,d=c?s:i,f=(r+1)*(1+e);e>0&&(u.push(u[u.length-1]),p.push(f),w.push(`linear`)),u.push(...l);for(let e=0;e<l.length;e++)p.push(n[e]+f),w.push(e===0?`linear`:P(d,e-1))}we(p,h,e)}let j=k+T;Ce(i,u,w,p,k,j),S=Math.max(E+T,S),y=Math.max(j,y)};if(i(u)){let e=J(u,f);C(b,x,Y(`default`,e))}else{let e=G(u,b,o,p),t=e.length;for(let n=0;n<t;n++){b=b,x=x;let r=e[n],i=J(r,f);for(let e in b)C(b[e],ke(x,e),Y(e,i),n,t)}}h=g,g+=S}return f.forEach((e,r)=>{for(let i in e){let a=e[i];a.sort(Te);let o=[],c=[],l=[];for(let e=0;e<a.length;e++){let{at:t,value:n,easing:r}=a[e];o.push(n),c.push(s(0,y,t)),l.push(r||`easeOut`)}c[0]!==0&&(c.unshift(0),o.unshift(o[0]),l.unshift(Ee)),c[c.length-1]!==1&&(c.push(1),o.push(null)),u.has(r)||u.set(r,{keyframes:{},transition:{}});let d=u.get(r);d.keyframes[i]=o;let{type:f,...p}=t;d.transition[i]={...p,duration:y,ease:l,times:c,...n}}}),u}function J(e,t){return!t.has(e)&&t.set(e,{}),t.get(e)}function Y(e,t){return t[e]||(t[e]=[]),t[e]}function Oe(e){return Array.isArray(e)?e:[e]}function ke(e,t){return e&&e[t]?{...e,...e[t]}:{...e}}var Ae=e=>typeof e==`number`,je=e=>e.every(Ae);function Me(e){let t={presenceContext:null,props:{},visualState:{renderState:{transform:{},transformOrigin:{},style:{},vars:{},attrs:{}},latestValues:{}}},n=re(e)&&!A(e)?new D(t):new E(t);n.mount(e),w.set(e,n)}function Ne(e){let t=new R({presenceContext:null,props:{},visualState:{renderState:{output:{}},latestValues:{}}});t.mount(e),w.set(e,t)}function X(e,t){return i(e)||typeof e==`number`||typeof e==`string`&&!W(t)}function Z(e,t,n,r){let i=[];if(X(e,t))i.push(C(e,W(t)&&t.default||t,n&&(n.default||n)));else{if(e==null)return i;let a=G(e,t,r),o=a.length;g(!!o,`No valid elements provided.`,`no-valid-elements`);for(let e=0;e<o;e++){let r=a[e],s={...n};`delay`in s&&typeof s.delay==`function`&&(s.delay=s.delay(e,o));let c=r instanceof Element,l=c?void 0:ue(r);if(l){i.push(...de(l,r,t,s));continue}let u=c?Me:Ne;w.has(r)||u(r);let d=w.get(r);i.push(...m(d,{...t,transition:s},{}))}}return i}function Pe(e,t,n){let r=[];return De(e.map(e=>{if(Array.isArray(e)&&typeof e[0]==`function`){let t=e[0],n=f(0);return n.on(`change`,t),e.length===1?[n,[0,1]]:e.length===2?[n,[0,1],e[1]]:[n,e[1],e[2]]}return e}),t,n,{spring:p}).forEach(({keyframes:e,transition:t},n)=>{r.push(...Z(n,e,t))}),r}function Fe(e){return Array.isArray(e)&&e.some(Array.isArray)}function Ie(e={}){let{scope:t,reduceMotion:n,skipAnimations:r}=e;function i(e,i,a){let s=[],c,l={};if(n!==void 0&&(l.reduceMotion=n),r!==void 0&&(l.skipAnimations=r),Fe(e)){let{onComplete:n,...r}=i||{};typeof n==`function`&&(c=n),s=Pe(e,{...l,...r},t)}else{let{onComplete:n,...r}=a||{};typeof n==`function`&&(c=n),s=Z(e,i,{...l,...r},t)}let u=new ce(s);return c&&u.finished.then(c),t&&(t.animations.push(u),u.finished.then(()=>{o(t.animations,u)})),u}return i}var Le=Object.assign(Ie(),{addEffect:le,removeEffect:L}),Re=[{tone:`fast`,belowMs:10},{tone:`good`,belowMs:50},{tone:`ok`,belowMs:100},{tone:`elevated`,belowMs:250},{tone:`warn`,belowMs:500},{tone:`slow`,belowMs:1e3},{tone:`bad`,belowMs:5e3}];function Q(e){if(!Number.isFinite(e)||e<0)return`fast`;for(let t of Re)if(e<t.belowMs)return t.tone;return`critical`}function $(e){switch(e){case`fast`:return`text-emerald-500 dark:text-emerald-400`;case`good`:return`text-emerald-600 dark:text-emerald-300`;case`ok`:return`text-lime-600 dark:text-lime-400`;case`elevated`:return`text-yellow-600 dark:text-yellow-400`;case`warn`:return`text-amber-600 dark:text-amber-400`;case`slow`:return`text-orange-600 dark:text-orange-400`;case`bad`:return`text-destructive`;case`critical`:return`text-rose-700 dark:text-rose-400`}}function ze(e){return $(Q(e))}export{be as a,N as c,Le as i,Q as n,ae as o,$ as r,ie as s,ze as t};