openplanr 3.1.1 → 3.3.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 (452) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/dist/cli/commands/groups/delivery.d.ts.map +1 -1
  3. package/dist/cli/commands/groups/delivery.js +2 -0
  4. package/dist/cli/commands/groups/delivery.js.map +1 -1
  5. package/dist/cli/commands/planning-artifacts.d.ts.map +1 -1
  6. package/dist/cli/commands/planning-artifacts.js +22 -12
  7. package/dist/cli/commands/planning-artifacts.js.map +1 -1
  8. package/dist/cli/commands/ship.d.ts +3 -0
  9. package/dist/cli/commands/ship.d.ts.map +1 -0
  10. package/dist/cli/commands/ship.js +65 -0
  11. package/dist/cli/commands/ship.js.map +1 -0
  12. package/dist/cli/commands/spec.d.ts +2 -1
  13. package/dist/cli/commands/spec.d.ts.map +1 -1
  14. package/dist/cli/commands/spec.js +45 -5
  15. package/dist/cli/commands/spec.js.map +1 -1
  16. package/dist/dashboard/.vite/manifest.json +1 -1
  17. package/dist/dashboard/assets/index-B_96uzCl.js +572 -0
  18. package/dist/dashboard/assets/index-B_96uzCl.js.map +1 -0
  19. package/dist/dashboard/dashboard-manifest.json +10 -10
  20. package/dist/dashboard/index.html +1 -1
  21. package/dist/models/schema.d.ts +39 -23
  22. package/dist/models/schema.d.ts.map +1 -1
  23. package/dist/models/schema.js +19 -12
  24. package/dist/models/schema.js.map +1 -1
  25. package/dist/models/types.d.ts +6 -0
  26. package/dist/models/types.d.ts.map +1 -1
  27. package/dist/services/claude-plugin-service.d.ts +5 -0
  28. package/dist/services/claude-plugin-service.d.ts.map +1 -1
  29. package/dist/services/claude-plugin-service.js +18 -2
  30. package/dist/services/claude-plugin-service.js.map +1 -1
  31. package/dist/services/codex-plugin-service.d.ts.map +1 -1
  32. package/dist/services/codex-plugin-service.js +11 -3
  33. package/dist/services/codex-plugin-service.js.map +1 -1
  34. package/dist/services/id-service.d.ts +1 -5
  35. package/dist/services/id-service.d.ts.map +1 -1
  36. package/dist/services/id-service.js +1 -34
  37. package/dist/services/id-service.js.map +1 -1
  38. package/dist/services/runtime-manager/codex-discovery.d.ts +1 -3
  39. package/dist/services/runtime-manager/codex-discovery.d.ts.map +1 -1
  40. package/dist/services/runtime-manager/codex-discovery.js +3 -16
  41. package/dist/services/runtime-manager/codex-discovery.js.map +1 -1
  42. package/dist/services/runtime-manager/doctor.d.ts +25 -0
  43. package/dist/services/runtime-manager/doctor.d.ts.map +1 -1
  44. package/dist/services/runtime-manager/doctor.js +480 -0
  45. package/dist/services/runtime-manager/doctor.js.map +1 -1
  46. package/dist/services/runtime-manager/errors.d.ts +12 -0
  47. package/dist/services/runtime-manager/errors.d.ts.map +1 -0
  48. package/dist/services/runtime-manager/errors.js +14 -0
  49. package/dist/services/runtime-manager/errors.js.map +1 -0
  50. package/dist/services/runtime-manager/global-state.d.ts +7 -0
  51. package/dist/services/runtime-manager/global-state.d.ts.map +1 -1
  52. package/dist/services/runtime-manager/global-state.js +116 -0
  53. package/dist/services/runtime-manager/global-state.js.map +1 -1
  54. package/dist/services/runtime-manager/host-version-probe.d.ts +8 -0
  55. package/dist/services/runtime-manager/host-version-probe.d.ts.map +1 -0
  56. package/dist/services/runtime-manager/host-version-probe.js +14 -0
  57. package/dist/services/runtime-manager/host-version-probe.js.map +1 -0
  58. package/dist/services/runtime-manager/install-plan.d.ts +25 -0
  59. package/dist/services/runtime-manager/install-plan.d.ts.map +1 -1
  60. package/dist/services/runtime-manager/install-plan.js +305 -0
  61. package/dist/services/runtime-manager/install-plan.js.map +1 -1
  62. package/dist/services/runtime-manager/inventory.d.ts +6 -0
  63. package/dist/services/runtime-manager/inventory.d.ts.map +1 -1
  64. package/dist/services/runtime-manager/inventory.js +16 -1
  65. package/dist/services/runtime-manager/inventory.js.map +1 -1
  66. package/dist/services/runtime-manager/legacy-adapters.d.ts +9 -0
  67. package/dist/services/runtime-manager/legacy-adapters.d.ts.map +1 -0
  68. package/dist/services/runtime-manager/legacy-adapters.js +187 -0
  69. package/dist/services/runtime-manager/legacy-adapters.js.map +1 -0
  70. package/dist/services/runtime-manager/paths.d.ts +18 -0
  71. package/dist/services/runtime-manager/paths.d.ts.map +1 -0
  72. package/dist/services/runtime-manager/paths.js +83 -0
  73. package/dist/services/runtime-manager/paths.js.map +1 -0
  74. package/dist/services/runtime-manager/runtime-package.d.ts +21 -0
  75. package/dist/services/runtime-manager/runtime-package.d.ts.map +1 -1
  76. package/dist/services/runtime-manager/runtime-package.js +77 -0
  77. package/dist/services/runtime-manager/runtime-package.js.map +1 -1
  78. package/dist/services/runtime-manager/storage.d.ts +47 -0
  79. package/dist/services/runtime-manager/storage.d.ts.map +1 -0
  80. package/dist/services/runtime-manager/storage.js +604 -0
  81. package/dist/services/runtime-manager/storage.js.map +1 -0
  82. package/dist/services/runtime-manager-service.d.ts +7 -17
  83. package/dist/services/runtime-manager-service.d.ts.map +1 -1
  84. package/dist/services/runtime-manager-service.js +32 -1695
  85. package/dist/services/runtime-manager-service.js.map +1 -1
  86. package/dist/services/ship-checks/changes.d.ts +24 -0
  87. package/dist/services/ship-checks/changes.d.ts.map +1 -0
  88. package/dist/services/ship-checks/changes.js +135 -0
  89. package/dist/services/ship-checks/changes.js.map +1 -0
  90. package/dist/services/ship-checks/contract.d.ts +93 -0
  91. package/dist/services/ship-checks/contract.d.ts.map +1 -0
  92. package/dist/services/ship-checks/contract.js +7 -0
  93. package/dist/services/ship-checks/contract.js.map +1 -0
  94. package/dist/services/ship-checks/coverage.d.ts +4 -0
  95. package/dist/services/ship-checks/coverage.d.ts.map +1 -0
  96. package/dist/services/ship-checks/coverage.js +113 -0
  97. package/dist/services/ship-checks/coverage.js.map +1 -0
  98. package/dist/services/ship-checks/discover.d.ts +10 -0
  99. package/dist/services/ship-checks/discover.d.ts.map +1 -0
  100. package/dist/services/ship-checks/discover.js +253 -0
  101. package/dist/services/ship-checks/discover.js.map +1 -0
  102. package/dist/services/ship-checks/glob.d.ts +5 -0
  103. package/dist/services/ship-checks/glob.d.ts.map +1 -0
  104. package/dist/services/ship-checks/glob.js +39 -0
  105. package/dist/services/ship-checks/glob.js.map +1 -0
  106. package/dist/services/ship-checks/hooks.d.ts +7 -0
  107. package/dist/services/ship-checks/hooks.d.ts.map +1 -0
  108. package/dist/services/ship-checks/hooks.js +65 -0
  109. package/dist/services/ship-checks/hooks.js.map +1 -0
  110. package/dist/services/ship-checks/packages.d.ts +29 -0
  111. package/dist/services/ship-checks/packages.d.ts.map +1 -0
  112. package/dist/services/ship-checks/packages.js +197 -0
  113. package/dist/services/ship-checks/packages.js.map +1 -0
  114. package/dist/services/ship-checks/related-tests.d.ts +13 -0
  115. package/dist/services/ship-checks/related-tests.d.ts.map +1 -0
  116. package/dist/services/ship-checks/related-tests.js +73 -0
  117. package/dist/services/ship-checks/related-tests.js.map +1 -0
  118. package/dist/services/ship-checks/scope.d.ts +8 -0
  119. package/dist/services/ship-checks/scope.d.ts.map +1 -0
  120. package/dist/services/ship-checks/scope.js +66 -0
  121. package/dist/services/ship-checks/scope.js.map +1 -0
  122. package/dist/services/ship-checks/task-requirements.d.ts +14 -0
  123. package/dist/services/ship-checks/task-requirements.d.ts.map +1 -0
  124. package/dist/services/ship-checks/task-requirements.js +145 -0
  125. package/dist/services/ship-checks/task-requirements.js.map +1 -0
  126. package/dist/services/ship-checks/workflows.d.ts +21 -0
  127. package/dist/services/ship-checks/workflows.d.ts.map +1 -0
  128. package/dist/services/ship-checks/workflows.js +208 -0
  129. package/dist/services/ship-checks/workflows.js.map +1 -0
  130. package/dist/services/spec-service.d.ts +18 -0
  131. package/dist/services/spec-service.d.ts.map +1 -1
  132. package/dist/services/spec-service.js +174 -9
  133. package/dist/services/spec-service.js.map +1 -1
  134. package/dist/services/template-service.d.ts +2 -0
  135. package/dist/services/template-service.d.ts.map +1 -1
  136. package/dist/services/template-service.js +4 -0
  137. package/dist/services/template-service.js.map +1 -1
  138. package/dist/templates/spec/spec-shaped.md.hbs +1 -1
  139. package/dist/templates/spec/spec.md.hbs +2 -2
  140. package/dist/utils/slugify.d.ts +1 -8
  141. package/dist/utils/slugify.d.ts.map +1 -1
  142. package/dist/utils/slugify.js +1 -25
  143. package/dist/utils/slugify.js.map +1 -1
  144. package/docs/CLI.md +96 -2
  145. package/lib/backlog-item.d.mts +49 -0
  146. package/lib/backlog-item.mjs +339 -0
  147. package/lib/host-packages/adapter-registry.json +5 -5
  148. package/lib/host-packages/capability-map.json +3 -3
  149. package/lib/host-packages/claude/.claude-plugin/marketplace.json +2 -2
  150. package/lib/host-packages/claude/openplanr/.claude-plugin/plugin.json +1 -1
  151. package/lib/host-packages/claude/openplanr/.openplanr-content.json +134 -94
  152. package/lib/host-packages/claude/openplanr/CONNECTORS.md +4 -6
  153. package/lib/host-packages/claude/openplanr/README.md +1 -1
  154. package/lib/host-packages/claude/openplanr/agents/planr-qa.md +5 -3
  155. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-artifact-shell.mjs +1 -1
  156. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +1 -1
  157. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-document.mjs +471 -80
  158. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-handoff.mjs +2 -2
  159. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-resource-pack.mjs +1 -1
  160. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-review.mjs +45 -4
  161. package/lib/host-packages/{cursor/openplanr/runtime/design/scripts/design-runtime-support-e34c388a8e59.mjs → claude/openplanr/runtime/design/scripts/design-runtime-support-25485dbf1cb2.mjs} +1 -1
  162. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-share.mjs +8 -5
  163. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs +138 -12
  164. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs +1 -1
  165. package/lib/host-packages/claude/openplanr/runtime/design/scripts/{design-shared-protocol-contracts-31a760fc.mjs → design-shared-protocol-contracts-b5f28f94.mjs} +413 -45
  166. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design-upload-spool.mjs +1 -1
  167. package/lib/host-packages/claude/openplanr/runtime/design/scripts/design.mjs +482 -79
  168. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/notices/THIRD_PARTY_NOTICES.txt +32 -32
  169. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +23 -23
  170. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +322 -45
  171. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +12 -12
  172. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +47 -14
  173. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +11 -10
  174. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/package.json +4 -3
  175. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +16 -11
  176. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/01-module-runtime.js +7 -11
  177. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +165 -276
  178. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/03-react-dom-client-fiber-foundations.js +494 -967
  179. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/04-react-dom-client-reconciliation-hooks.js +346 -678
  180. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/05-react-dom-client-render-phases.js +382 -810
  181. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/06-react-dom-client-commit-effects.js +406 -730
  182. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/07-react-dom-client-work-loop-scheduling.js +259 -522
  183. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/08-react-dom-client-dom-events-properties-hydration.js +585 -937
  184. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +119 -244
  185. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/10-react.js +7 -17
  186. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/11-artifact-review-ui.js +3 -4
  187. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-protocol-contracts.js +285 -0
  188. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-design-review-experience.js +2773 -0
  189. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-studio-shell.js +134 -0
  190. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-canvas-engine.js +2207 -0
  191. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/16-design-review-experience.js +16 -0
  192. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-studio-shell.js +8 -0
  193. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/18-interface-primitives.js +3883 -0
  194. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/19-interface-primitives.js +966 -0
  195. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/{16-studio-shell.js → 20-studio-shell.js} +122 -227
  196. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/21-design-studio.js +1597 -0
  197. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +101 -47
  198. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +6 -2
  199. package/lib/host-packages/{openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0 → claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0}/design-document.schema.json +207 -7
  200. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0/design-review-bundle.schema.json +822 -0
  201. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +324 -45
  202. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/design.mjs +73 -12
  203. package/lib/host-packages/claude/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +6 -2
  204. package/lib/host-packages/claude/openplanr/skills/connect/references/connectors.md +4 -6
  205. package/lib/host-packages/claude/openplanr/skills/design/SKILL.md +12 -0
  206. package/lib/host-packages/claude/openplanr/skills/design/references/craft.md +14 -3
  207. package/lib/host-packages/claude/openplanr/skills/design/references/design-system.md +48 -1
  208. package/lib/host-packages/claude/openplanr/skills/design/references/discovery.md +18 -4
  209. package/lib/host-packages/claude/openplanr/skills/design/references/generation.md +133 -2
  210. package/lib/host-packages/claude/openplanr/skills/design/references/hosted-canvas.md +62 -0
  211. package/lib/host-packages/claude/openplanr/skills/design/references/review.md +46 -1
  212. package/lib/host-packages/claude/openplanr/skills/design/references/utilities.md +17 -1
  213. package/lib/host-packages/claude/openplanr/skills/design/schemas/design-document.schema.json +207 -7
  214. package/lib/host-packages/claude/openplanr/skills/design-loop/references/craft.md +14 -3
  215. package/lib/host-packages/claude/openplanr/skills/design-loop/references/design-system.md +48 -1
  216. package/lib/host-packages/claude/openplanr/skills/design-loop/references/discovery.md +18 -4
  217. package/lib/host-packages/claude/openplanr/skills/design-loop/references/generation.md +133 -2
  218. package/lib/host-packages/claude/openplanr/skills/design-loop/references/review.md +46 -1
  219. package/lib/host-packages/claude/openplanr/skills/design-loop/references/utilities.md +17 -1
  220. package/lib/host-packages/claude/openplanr/skills/design-loop/schemas/design-document.schema.json +207 -7
  221. package/lib/host-packages/claude/openplanr/skills/design-review/references/craft.md +14 -3
  222. package/lib/host-packages/claude/openplanr/skills/design-review/references/design-system.md +48 -1
  223. package/lib/host-packages/claude/openplanr/skills/design-review/references/discovery.md +18 -4
  224. package/lib/host-packages/claude/openplanr/skills/design-review/references/generation.md +133 -2
  225. package/lib/host-packages/claude/openplanr/skills/design-review/references/review.md +46 -1
  226. package/lib/host-packages/claude/openplanr/skills/design-review/references/utilities.md +17 -1
  227. package/lib/host-packages/claude/openplanr/skills/design-review/schemas/design-document.schema.json +207 -7
  228. package/lib/host-packages/claude/openplanr/skills/investigate/SKILL.md +11 -2
  229. package/lib/host-packages/claude/openplanr/skills/investigate/references/findings.md +92 -0
  230. package/lib/host-packages/claude/openplanr/skills/investigate/scripts/backlog-item.mjs +339 -0
  231. package/lib/host-packages/claude/openplanr/skills/plan/SKILL.md +24 -11
  232. package/lib/host-packages/claude/openplanr/skills/plan/schemas/design-document.schema.json +207 -7
  233. package/lib/host-packages/claude/openplanr/skills/share/references/connectors.md +4 -6
  234. package/lib/host-packages/claude/openplanr/skills/ship/SKILL.md +46 -14
  235. package/lib/host-packages/claude/openplanr/skills/ship/references/findings.md +92 -0
  236. package/lib/host-packages/claude/openplanr/skills/ship/references/result-contract.md +3 -1
  237. package/lib/host-packages/claude/openplanr/skills/ship/scripts/backlog-item.mjs +339 -0
  238. package/lib/host-packages/claude/openplanr/skills/spec/SKILL.md +6 -0
  239. package/lib/host-packages/claude/openplanr/skills/spec/references/specification-contract.md +3 -1
  240. package/lib/host-packages/claude/openplanr/skills/sprint/references/connectors.md +4 -6
  241. package/lib/host-packages/claude/openplanr/skills/status/references/connectors.md +4 -6
  242. package/lib/host-packages/claude/openplanr/skills/sync/references/connectors.md +4 -6
  243. package/lib/host-packages/cursor/openplanr/.openplanr-content.json +132 -92
  244. package/lib/host-packages/cursor/openplanr/CONNECTORS.md +4 -6
  245. package/lib/host-packages/cursor/openplanr/manifest.json +1 -1
  246. package/lib/host-packages/cursor/openplanr/rules/planr-connect/references/connectors.md +4 -6
  247. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/craft.md +14 -3
  248. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/design-system.md +48 -1
  249. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/discovery.md +18 -4
  250. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/generation.md +133 -2
  251. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/hosted-canvas.md +62 -0
  252. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/review.md +46 -1
  253. package/lib/host-packages/cursor/openplanr/rules/planr-design/references/utilities.md +17 -1
  254. package/lib/host-packages/cursor/openplanr/rules/planr-design/schemas/design-document.schema.json +207 -7
  255. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/craft.md +14 -3
  256. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/design-system.md +48 -1
  257. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/discovery.md +18 -4
  258. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/generation.md +133 -2
  259. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/review.md +46 -1
  260. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/references/utilities.md +17 -1
  261. package/lib/host-packages/cursor/openplanr/rules/planr-design-loop/schemas/design-document.schema.json +207 -7
  262. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/craft.md +14 -3
  263. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/design-system.md +48 -1
  264. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/discovery.md +18 -4
  265. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/generation.md +133 -2
  266. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/review.md +46 -1
  267. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/references/utilities.md +17 -1
  268. package/lib/host-packages/cursor/openplanr/rules/planr-design-review/schemas/design-document.schema.json +207 -7
  269. package/lib/host-packages/cursor/openplanr/rules/planr-design.mdc +12 -0
  270. package/lib/host-packages/cursor/openplanr/rules/planr-investigate/references/findings.md +92 -0
  271. package/lib/host-packages/cursor/openplanr/rules/planr-investigate/scripts/backlog-item.mjs +339 -0
  272. package/lib/host-packages/cursor/openplanr/rules/planr-investigate.mdc +11 -2
  273. package/lib/host-packages/cursor/openplanr/rules/planr-plan/schemas/design-document.schema.json +207 -7
  274. package/lib/host-packages/cursor/openplanr/rules/planr-plan.mdc +24 -11
  275. package/lib/host-packages/cursor/openplanr/rules/planr-share/references/connectors.md +4 -6
  276. package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/findings.md +92 -0
  277. package/lib/host-packages/cursor/openplanr/rules/planr-ship/references/result-contract.md +3 -1
  278. package/lib/host-packages/cursor/openplanr/rules/planr-ship/scripts/backlog-item.mjs +339 -0
  279. package/lib/host-packages/cursor/openplanr/rules/planr-ship.mdc +46 -14
  280. package/lib/host-packages/cursor/openplanr/rules/planr-spec/references/specification-contract.md +3 -1
  281. package/lib/host-packages/cursor/openplanr/rules/planr-spec.mdc +6 -0
  282. package/lib/host-packages/cursor/openplanr/rules/planr-sprint/references/connectors.md +4 -6
  283. package/lib/host-packages/cursor/openplanr/rules/planr-status/references/connectors.md +4 -6
  284. package/lib/host-packages/cursor/openplanr/rules/planr-sync/references/connectors.md +4 -6
  285. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-artifact-shell.mjs +1 -1
  286. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +1 -1
  287. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-document.mjs +471 -80
  288. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-handoff.mjs +2 -2
  289. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-resource-pack.mjs +1 -1
  290. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-review.mjs +45 -4
  291. package/lib/host-packages/{openai/openplanr/runtime/design/scripts/design-runtime-support-e34c388a8e59.mjs → cursor/openplanr/runtime/design/scripts/design-runtime-support-25485dbf1cb2.mjs} +1 -1
  292. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-share.mjs +8 -5
  293. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs +138 -12
  294. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs +1 -1
  295. package/lib/host-packages/{openai/openplanr/runtime/design/scripts/design-shared-protocol-contracts-31a760fc.mjs → cursor/openplanr/runtime/design/scripts/design-shared-protocol-contracts-b5f28f94.mjs} +413 -45
  296. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design-upload-spool.mjs +1 -1
  297. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/design.mjs +482 -79
  298. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/notices/THIRD_PARTY_NOTICES.txt +32 -32
  299. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +23 -23
  300. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +322 -45
  301. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +12 -12
  302. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +47 -14
  303. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +11 -10
  304. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/package.json +4 -3
  305. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +16 -11
  306. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/01-module-runtime.js +7 -11
  307. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +165 -276
  308. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/03-react-dom-client-fiber-foundations.js +494 -967
  309. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/04-react-dom-client-reconciliation-hooks.js +346 -678
  310. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/05-react-dom-client-render-phases.js +382 -810
  311. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/06-react-dom-client-commit-effects.js +406 -730
  312. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/07-react-dom-client-work-loop-scheduling.js +259 -522
  313. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/08-react-dom-client-dom-events-properties-hydration.js +585 -937
  314. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +119 -244
  315. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/10-react.js +7 -17
  316. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/11-artifact-review-ui.js +3 -4
  317. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-protocol-contracts.js +285 -0
  318. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-design-review-experience.js +2773 -0
  319. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-studio-shell.js +134 -0
  320. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-canvas-engine.js +2207 -0
  321. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/16-design-review-experience.js +16 -0
  322. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-studio-shell.js +8 -0
  323. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/18-interface-primitives.js +3883 -0
  324. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/19-interface-primitives.js +966 -0
  325. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/{16-studio-shell.js → 20-studio-shell.js} +122 -227
  326. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/21-design-studio.js +1597 -0
  327. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +101 -47
  328. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +6 -2
  329. package/lib/host-packages/{claude/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0 → cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0}/design-document.schema.json +207 -7
  330. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0/design-review-bundle.schema.json +822 -0
  331. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +324 -45
  332. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/design.mjs +73 -12
  333. package/lib/host-packages/cursor/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +6 -2
  334. package/lib/host-packages/openai/.claude-plugin/marketplace.json +2 -2
  335. package/lib/host-packages/openai/openplanr/.codex-plugin/plugin.json +1 -1
  336. package/lib/host-packages/openai/openplanr/.openplanr-content.json +139 -99
  337. package/lib/host-packages/openai/openplanr/CONNECTORS.md +4 -6
  338. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-artifact-shell.mjs +1 -1
  339. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-chunked-workspace-client.mjs +1 -1
  340. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-document.mjs +471 -80
  341. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-handoff.mjs +2 -2
  342. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-resource-pack.mjs +1 -1
  343. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-review.mjs +45 -4
  344. package/lib/host-packages/{claude/openplanr/runtime/design/scripts/design-runtime-support-e34c388a8e59.mjs → openai/openplanr/runtime/design/scripts/design-runtime-support-25485dbf1cb2.mjs} +1 -1
  345. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-share.mjs +8 -5
  346. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-artifact-support-dependencies-design-support-protocol-contracts-3d9b1a86.mjs +138 -12
  347. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-shared-artifact-support-protocol-contracts-ea2cd15e.mjs +1 -1
  348. package/lib/host-packages/{cursor/openplanr/runtime/design/scripts/design-shared-protocol-contracts-31a760fc.mjs → openai/openplanr/runtime/design/scripts/design-shared-protocol-contracts-b5f28f94.mjs} +413 -45
  349. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design-upload-spool.mjs +1 -1
  350. package/lib/host-packages/openai/openplanr/runtime/design/scripts/design.mjs +482 -79
  351. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/notices/THIRD_PARTY_NOTICES.txt +32 -32
  352. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/02-artifact-review-ui.js +23 -23
  353. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/03-protocol-contracts.js +322 -45
  354. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/06-artifact-review-ui.js +12 -12
  355. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources/08-artifact-review-ui.js +47 -14
  356. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/artifact/templates/artifact-review-stage.js.sources.json +11 -10
  357. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/package.json +4 -3
  358. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.css +16 -11
  359. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/01-module-runtime.js +7 -11
  360. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/02-react.js +165 -276
  361. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/03-react-dom-client-fiber-foundations.js +494 -967
  362. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/04-react-dom-client-reconciliation-hooks.js +346 -678
  363. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/05-react-dom-client-render-phases.js +382 -810
  364. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/06-react-dom-client-commit-effects.js +406 -730
  365. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/07-react-dom-client-work-loop-scheduling.js +259 -522
  366. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/08-react-dom-client-dom-events-properties-hydration.js +585 -937
  367. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/09-react-dom-client-public-roots.js +119 -244
  368. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/10-react.js +7 -17
  369. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/11-artifact-review-ui.js +3 -4
  370. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-protocol-contracts.js +285 -0
  371. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-design-review-experience.js +2773 -0
  372. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-studio-shell.js +134 -0
  373. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-canvas-engine.js +2207 -0
  374. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/16-design-review-experience.js +16 -0
  375. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-studio-shell.js +8 -0
  376. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/18-interface-primitives.js +3883 -0
  377. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/19-interface-primitives.js +966 -0
  378. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/{16-studio-shell.js → 20-studio-shell.js} +122 -227
  379. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/21-design-studio.js +1597 -0
  380. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources.json +101 -47
  381. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/package.json +6 -2
  382. package/lib/host-packages/{cursor/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.9.0 → openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0}/design-document.schema.json +207 -7
  383. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/protocol/schemas/v1.22.0/design-review-bundle.schema.json +822 -0
  384. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design-protocol-contracts.mjs +324 -45
  385. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/design.mjs +73 -12
  386. package/lib/host-packages/openai/openplanr/runtime/plan/scripts/runtime/packages/protocol/package.json +6 -2
  387. package/lib/host-packages/openai/openplanr/skills/connect/references/connectors.md +4 -6
  388. package/lib/host-packages/openai/openplanr/skills/design/SKILL.md +12 -0
  389. package/lib/host-packages/openai/openplanr/skills/design/openplanr.skill.json +11 -0
  390. package/lib/host-packages/openai/openplanr/skills/design/references/craft.md +14 -3
  391. package/lib/host-packages/openai/openplanr/skills/design/references/design-system.md +48 -1
  392. package/lib/host-packages/openai/openplanr/skills/design/references/discovery.md +18 -4
  393. package/lib/host-packages/openai/openplanr/skills/design/references/generation.md +133 -2
  394. package/lib/host-packages/openai/openplanr/skills/design/references/hosted-canvas.md +62 -0
  395. package/lib/host-packages/openai/openplanr/skills/design/references/review.md +46 -1
  396. package/lib/host-packages/openai/openplanr/skills/design/references/utilities.md +17 -1
  397. package/lib/host-packages/openai/openplanr/skills/design/schemas/design-document.schema.json +207 -7
  398. package/lib/host-packages/openai/openplanr/skills/design-loop/references/craft.md +14 -3
  399. package/lib/host-packages/openai/openplanr/skills/design-loop/references/design-system.md +48 -1
  400. package/lib/host-packages/openai/openplanr/skills/design-loop/references/discovery.md +18 -4
  401. package/lib/host-packages/openai/openplanr/skills/design-loop/references/generation.md +133 -2
  402. package/lib/host-packages/openai/openplanr/skills/design-loop/references/review.md +46 -1
  403. package/lib/host-packages/openai/openplanr/skills/design-loop/references/utilities.md +17 -1
  404. package/lib/host-packages/openai/openplanr/skills/design-loop/schemas/design-document.schema.json +207 -7
  405. package/lib/host-packages/openai/openplanr/skills/design-review/references/craft.md +14 -3
  406. package/lib/host-packages/openai/openplanr/skills/design-review/references/design-system.md +48 -1
  407. package/lib/host-packages/openai/openplanr/skills/design-review/references/discovery.md +18 -4
  408. package/lib/host-packages/openai/openplanr/skills/design-review/references/generation.md +133 -2
  409. package/lib/host-packages/openai/openplanr/skills/design-review/references/review.md +46 -1
  410. package/lib/host-packages/openai/openplanr/skills/design-review/references/utilities.md +17 -1
  411. package/lib/host-packages/openai/openplanr/skills/design-review/schemas/design-document.schema.json +207 -7
  412. package/lib/host-packages/openai/openplanr/skills/investigate/SKILL.md +11 -2
  413. package/lib/host-packages/openai/openplanr/skills/investigate/agents/openai.yaml +1 -1
  414. package/lib/host-packages/openai/openplanr/skills/investigate/openplanr.skill.json +23 -1
  415. package/lib/host-packages/openai/openplanr/skills/investigate/references/findings.md +92 -0
  416. package/lib/host-packages/openai/openplanr/skills/investigate/scripts/backlog-item.mjs +339 -0
  417. package/lib/host-packages/openai/openplanr/skills/plan/SKILL.md +24 -11
  418. package/lib/host-packages/openai/openplanr/skills/plan/openplanr.skill.json +1 -1
  419. package/lib/host-packages/openai/openplanr/skills/plan/schemas/design-document.schema.json +207 -7
  420. package/lib/host-packages/openai/openplanr/skills/share/references/connectors.md +4 -6
  421. package/lib/host-packages/openai/openplanr/skills/ship/SKILL.md +46 -14
  422. package/lib/host-packages/openai/openplanr/skills/ship/agents/openai.yaml +1 -1
  423. package/lib/host-packages/openai/openplanr/skills/ship/openplanr.skill.json +23 -1
  424. package/lib/host-packages/openai/openplanr/skills/ship/references/findings.md +92 -0
  425. package/lib/host-packages/openai/openplanr/skills/ship/references/result-contract.md +3 -1
  426. package/lib/host-packages/openai/openplanr/skills/ship/scripts/backlog-item.mjs +339 -0
  427. package/lib/host-packages/openai/openplanr/skills/spec/SKILL.md +6 -0
  428. package/lib/host-packages/openai/openplanr/skills/spec/openplanr.skill.json +1 -1
  429. package/lib/host-packages/openai/openplanr/skills/spec/references/specification-contract.md +3 -1
  430. package/lib/host-packages/openai/openplanr/skills/sprint/references/connectors.md +4 -6
  431. package/lib/host-packages/openai/openplanr/skills/status/references/connectors.md +4 -6
  432. package/lib/host-packages/openai/openplanr/skills/sync/references/connectors.md +4 -6
  433. package/lib/json-schema.mjs +4 -0
  434. package/package.json +13 -13
  435. package/dist/dashboard/assets/index-G7ygVDGg.js +0 -572
  436. package/dist/dashboard/assets/index-G7ygVDGg.js.map +0 -1
  437. package/dist/templates/backlog/backlog-item.md.hbs +0 -40
  438. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-design-review-experience.js +0 -3589
  439. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-studio-shell.js +0 -184
  440. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-interface-primitives.js +0 -5229
  441. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-interface-primitives.js +0 -1733
  442. package/lib/host-packages/claude/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-design-studio.js +0 -1844
  443. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-design-review-experience.js +0 -3589
  444. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-studio-shell.js +0 -184
  445. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-interface-primitives.js +0 -5229
  446. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-interface-primitives.js +0 -1733
  447. package/lib/host-packages/cursor/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-design-studio.js +0 -1844
  448. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/12-design-review-experience.js +0 -3589
  449. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/13-studio-shell.js +0 -184
  450. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/14-interface-primitives.js +0 -5229
  451. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/15-interface-primitives.js +0 -1733
  452. package/lib/host-packages/openai/openplanr/runtime/design/scripts/runtime/packages/design/templates/studio/studio.js.sources/17-design-studio.js +0 -1844
@@ -1,1733 +0,0 @@
1
-
2
-
3
- // ../../node_modules/@radix-ui/react-arrow/dist/index.mjs
4
- var React30 = __toESM(require_react(), 1);
5
- var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1);
6
- var __defProp20 = Object.defineProperty;
7
- var __name19 = (target, value) => __defProp20(target, "name", { value, configurable: true });
8
- var Arrow = /* @__PURE__ */ React30.forwardRef(
9
- /* @__PURE__ */ __name19(function Arrow2(props, forwardedRef) {
10
- const { children, width = 10, height = 5, ...arrowProps } = props;
11
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
12
- Primitive.svg,
13
- {
14
- ...arrowProps,
15
- ref: forwardedRef,
16
- width,
17
- height,
18
- viewBox: "0 0 30 10",
19
- preserveAspectRatio: "none",
20
- children: props.asChild ? children : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("polygon", { points: "0,0 30,0 15,10" })
21
- }
22
- );
23
- }, "Arrow")
24
- );
25
-
26
- // ../../node_modules/@radix-ui/react-popper/dist/index.mjs
27
- var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1);
28
- var __defProp21 = Object.defineProperty;
29
- var __name20 = (target, value) => __defProp21(target, "name", { value, configurable: true });
30
- var Sticky = {
31
- Partial: "partial",
32
- Always: "always"
33
- };
34
- var UpdatePositionStrategy = {
35
- Optimized: "optimized",
36
- Always: "always"
37
- };
38
- var POPPER_NAME = "Popper";
39
- var [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);
40
- var [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);
41
- var Popper = /* @__PURE__ */ __name20((props) => {
42
- const { __scopePopper, children } = props;
43
- const [anchor, setAnchor] = React31.useState(null);
44
- const [placementState, setPlacementState] = React31.useState(void 0);
45
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
46
- PopperProvider,
47
- {
48
- scope: __scopePopper,
49
- anchor,
50
- onAnchorChange: setAnchor,
51
- placementState,
52
- setPlacementState,
53
- children
54
- }
55
- );
56
- }, "Popper");
57
- var ANCHOR_NAME = "PopperAnchor";
58
- var PopperAnchor = /* @__PURE__ */ React31.forwardRef(
59
- /* @__PURE__ */ __name20(function PopperAnchor2(props, forwardedRef) {
60
- const { __scopePopper, virtualRef, ...anchorProps } = props;
61
- const context = usePopperContext(ANCHOR_NAME, __scopePopper);
62
- const ref = React31.useRef(null);
63
- const onAnchorChange = context.onAnchorChange;
64
- const callbackRef = React31.useCallback(
65
- (node) => {
66
- ref.current = node;
67
- if (node) {
68
- onAnchorChange(node);
69
- }
70
- },
71
- [onAnchorChange]
72
- );
73
- const composedRefs = useComposedRefs(forwardedRef, callbackRef);
74
- const anchorRef = React31.useRef(null);
75
- React31.useEffect(() => {
76
- if (!virtualRef) {
77
- return;
78
- }
79
- const previousAnchor = anchorRef.current;
80
- anchorRef.current = virtualRef.current;
81
- if (previousAnchor !== anchorRef.current) {
82
- onAnchorChange(anchorRef.current);
83
- }
84
- });
85
- const sideAndAlign = context.placementState && getSideAndAlignFromPlacement(context.placementState);
86
- const placedSide = sideAndAlign?.[0];
87
- const placedAlign = sideAndAlign?.[1];
88
- return virtualRef ? null : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
89
- Primitive.div,
90
- {
91
- "data-radix-popper-side": placedSide,
92
- "data-radix-popper-align": placedAlign,
93
- ...anchorProps,
94
- ref: composedRefs
95
- }
96
- );
97
- }, "PopperAnchor")
98
- );
99
- var CONTENT_NAME2 = "PopperContent";
100
- var [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME2);
101
- var PopperContent = /* @__PURE__ */ React31.forwardRef(
102
- /* @__PURE__ */ __name20(function PopperContent2(props, forwardedRef) {
103
- const {
104
- __scopePopper,
105
- side = "bottom",
106
- sideOffset = 0,
107
- align = "center",
108
- alignOffset = 0,
109
- arrowPadding = 0,
110
- avoidCollisions = true,
111
- collisionBoundary = [],
112
- collisionPadding: collisionPaddingProp = 0,
113
- sticky = Sticky.Partial,
114
- hideWhenDetached = false,
115
- updatePositionStrategy = UpdatePositionStrategy.Optimized,
116
- onPlaced,
117
- ...contentProps
118
- } = props;
119
- const context = usePopperContext(CONTENT_NAME2, __scopePopper);
120
- const [content, setContent] = React31.useState(null);
121
- const composedRefs = useComposedRefs(forwardedRef, setContent);
122
- const [arrow4, setArrow] = React31.useState(null);
123
- const arrowSize = useSize(arrow4);
124
- const arrowWidth = arrowSize?.width ?? 0;
125
- const arrowHeight = arrowSize?.height ?? 0;
126
- const desiredPlacement = side + (align !== "center" ? "-" + align : "");
127
- const collisionPadding = typeof collisionPaddingProp === "number" ? collisionPaddingProp : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };
128
- const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];
129
- const hasExplicitBoundaries = boundary.length > 0;
130
- const detectOverflowOptions = {
131
- padding: collisionPadding,
132
- boundary: boundary.filter(isNotNull),
133
- // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries
134
- altBoundary: hasExplicitBoundaries
135
- };
136
- const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({
137
- // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues
138
- strategy: "fixed",
139
- placement: desiredPlacement,
140
- whileElementsMounted: /* @__PURE__ */ __name20((...args) => {
141
- const cleanup = autoUpdate(...args, {
142
- animationFrame: updatePositionStrategy === UpdatePositionStrategy.Always
143
- });
144
- return cleanup;
145
- }, "whileElementsMounted"),
146
- elements: {
147
- reference: context.anchor
148
- },
149
- middleware: [
150
- offset3({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),
151
- avoidCollisions && shift3({
152
- mainAxis: true,
153
- crossAxis: false,
154
- // Spread rather than passing `limiter: undefined`, which
155
- // `exactOptionalPropertyTypes` rejects for Floating UI's optional option.
156
- ...sticky === Sticky.Partial ? { limiter: limitShift3() } : {},
157
- ...detectOverflowOptions
158
- }),
159
- avoidCollisions && flip3({ ...detectOverflowOptions }),
160
- size3({
161
- ...detectOverflowOptions,
162
- apply: /* @__PURE__ */ __name20(({ elements, rects, availableWidth, availableHeight }) => {
163
- const { width: anchorWidth, height: anchorHeight } = rects.reference;
164
- const contentStyle = elements.floating.style;
165
- contentStyle.setProperty("--radix-popper-available-width", `${availableWidth}px`);
166
- contentStyle.setProperty("--radix-popper-available-height", `${availableHeight}px`);
167
- contentStyle.setProperty("--radix-popper-anchor-width", `${anchorWidth}px`);
168
- contentStyle.setProperty("--radix-popper-anchor-height", `${anchorHeight}px`);
169
- }, "apply")
170
- }),
171
- arrow4 && arrow3({ element: arrow4, padding: arrowPadding }),
172
- transformOrigin({ arrowWidth, arrowHeight }),
173
- hideWhenDetached && // `hide` detects whether the anchor (reference) is clipped, so when
174
- // no explicit `collisionBoundary` is set we omit `boundary` entirely
175
- // and fall back to Floating UI's default clipping ancestors (e.g. a
176
- // scrollable menu). This lets an occluded submenu hide once its anchor
177
- // scrolls out of view (#3237). The collision/size middlewares
178
- // deliberately keep the viewport-based default to avoid clamping
179
- // content rendered inside transformed or overflow-clipping portal
180
- // containers. The key is omitted rather than set to `undefined`
181
- // because `exactOptionalPropertyTypes` rejects the explicit value.
182
- hide3(
183
- hasExplicitBoundaries ? { strategy: "referenceHidden", ...detectOverflowOptions } : {
184
- strategy: "referenceHidden",
185
- padding: detectOverflowOptions.padding,
186
- altBoundary: detectOverflowOptions.altBoundary
187
- }
188
- )
189
- ]
190
- });
191
- const setPlacementState = context.setPlacementState;
192
- useLayoutEffect2(() => {
193
- setPlacementState(placement);
194
- return () => {
195
- setPlacementState(void 0);
196
- };
197
- }, [placement, setPlacementState]);
198
- const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);
199
- const handlePlaced = useCallbackRef(onPlaced);
200
- useLayoutEffect2(() => {
201
- if (isPositioned) {
202
- handlePlaced?.();
203
- }
204
- }, [isPositioned, handlePlaced]);
205
- const arrowX = middlewareData.arrow?.x;
206
- const arrowY = middlewareData.arrow?.y;
207
- const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;
208
- const [contentZIndex, setContentZIndex] = React31.useState();
209
- useLayoutEffect2(() => {
210
- if (content) setContentZIndex(window.getComputedStyle(content).zIndex);
211
- }, [content]);
212
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
213
- "div",
214
- {
215
- ref: refs.setFloating,
216
- "data-radix-popper-content-wrapper": "",
217
- style: {
218
- ...floatingStyles,
219
- transform: isPositioned ? floatingStyles.transform : "translate(0, -200%)",
220
- // keep off the page when measuring
221
- minWidth: "max-content",
222
- zIndex: contentZIndex,
223
- "--radix-popper-transform-origin": [
224
- middlewareData.transformOrigin?.x,
225
- middlewareData.transformOrigin?.y
226
- ].join(" "),
227
- // hide the content if using the hide middleware and should be hidden
228
- // set visibility to hidden and disable pointer events so the UI behaves
229
- // as if the PopperContent isn't there at all
230
- ...middlewareData.hide?.referenceHidden && {
231
- visibility: "hidden",
232
- pointerEvents: "none"
233
- }
234
- },
235
- dir: props.dir,
236
- children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
237
- PopperContentProvider,
238
- {
239
- scope: __scopePopper,
240
- placedSide,
241
- placedAlign,
242
- onArrowChange: setArrow,
243
- arrowX,
244
- arrowY,
245
- shouldHideArrow: cannotCenterArrow,
246
- children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
247
- Primitive.div,
248
- {
249
- "data-side": placedSide,
250
- "data-align": placedAlign,
251
- ...contentProps,
252
- ref: composedRefs,
253
- style: {
254
- ...contentProps.style,
255
- // if the PopperContent hasn't been placed yet (not all
256
- // measurements done) we prevent animations so that users'
257
- // animations don't kick in too early from the wrong sides.
258
- animation: !isPositioned ? "none" : contentProps.style?.animation
259
- }
260
- }
261
- )
262
- }
263
- )
264
- }
265
- );
266
- }, "PopperContent")
267
- );
268
- var ARROW_NAME = "PopperArrow";
269
- var OPPOSITE_SIDE = {
270
- top: "bottom",
271
- right: "left",
272
- bottom: "top",
273
- left: "right"
274
- };
275
- var PopperArrow = /* @__PURE__ */ React31.forwardRef(
276
- /* @__PURE__ */ __name20(function PopperArrow2(props, forwardedRef) {
277
- const { __scopePopper, ...arrowProps } = props;
278
- const contentContext = useContentContext(ARROW_NAME, __scopePopper);
279
- const baseSide = OPPOSITE_SIDE[contentContext.placedSide];
280
- return (
281
- // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)
282
- // doesn't report size as we'd expect on SVG elements.
283
- // it reports their bounding box which is effectively the largest path inside the SVG.
284
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
285
- "span",
286
- {
287
- ref: contentContext.onArrowChange,
288
- style: {
289
- position: "absolute",
290
- left: contentContext.arrowX,
291
- top: contentContext.arrowY,
292
- [baseSide]: 0,
293
- transformOrigin: {
294
- top: "",
295
- right: "0 0",
296
- bottom: "center 0",
297
- left: "100% 0"
298
- }[contentContext.placedSide],
299
- transform: {
300
- top: "translateY(100%)",
301
- right: "translateY(50%) rotate(90deg) translateX(-50%)",
302
- bottom: `rotate(180deg)`,
303
- left: "translateY(50%) rotate(-90deg) translateX(50%)"
304
- }[contentContext.placedSide],
305
- visibility: contentContext.shouldHideArrow ? "hidden" : void 0
306
- },
307
- children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
308
- Arrow,
309
- {
310
- ...arrowProps,
311
- ref: forwardedRef,
312
- style: {
313
- ...arrowProps.style,
314
- // ensures the element can be measured correctly (mostly for if SVG)
315
- display: "block"
316
- }
317
- }
318
- )
319
- }
320
- )
321
- );
322
- }, "PopperArrow")
323
- );
324
- function isNotNull(value) {
325
- return value !== null;
326
- }
327
- __name20(isNotNull, "isNotNull");
328
- var transformOrigin = /* @__PURE__ */ __name20((options2) => ({
329
- name: "transformOrigin",
330
- options: options2,
331
- fn(data) {
332
- const { placement, rects, middlewareData } = data;
333
- const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;
334
- const isArrowHidden = cannotCenterArrow;
335
- const arrowWidth = isArrowHidden ? 0 : options2.arrowWidth;
336
- const arrowHeight = isArrowHidden ? 0 : options2.arrowHeight;
337
- const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);
338
- const noArrowAlign = { start: "0%", center: "50%", end: "100%" }[placedAlign];
339
- const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;
340
- const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;
341
- let x = "";
342
- let y = "";
343
- if (placedSide === "bottom") {
344
- x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;
345
- y = `${-arrowHeight}px`;
346
- } else if (placedSide === "top") {
347
- x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;
348
- y = `${rects.floating.height + arrowHeight}px`;
349
- } else if (placedSide === "right") {
350
- x = `${-arrowHeight}px`;
351
- y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;
352
- } else if (placedSide === "left") {
353
- x = `${rects.floating.width + arrowHeight}px`;
354
- y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;
355
- }
356
- return { data: { x, y } };
357
- }
358
- }), "transformOrigin");
359
- function getSideAndAlignFromPlacement(placement) {
360
- const [side, align = "center"] = placement.split("-");
361
- return [side, align];
362
- }
363
- __name20(getSideAndAlignFromPlacement, "getSideAndAlignFromPlacement");
364
-
365
- // ../../node_modules/@radix-ui/react-roving-focus/dist/index.mjs
366
- var React33 = __toESM(require_react(), 1);
367
-
368
- // ../../node_modules/@radix-ui/react-use-is-hydrated/dist/index.mjs
369
- var React210 = __toESM(require_react(), 1);
370
- var React32 = __toESM(require_react(), 1);
371
- var __defProp22 = Object.defineProperty;
372
- var __name21 = (target, value) => __defProp22(target, "name", { value, configurable: true });
373
- var _isHydrated = false;
374
- function useIsHydrated() {
375
- const [isHydrated, setIsHydrated] = React32.useState(_isHydrated);
376
- React32.useEffect(() => {
377
- if (!_isHydrated) {
378
- _isHydrated = true;
379
- setIsHydrated(true);
380
- }
381
- }, []);
382
- return isHydrated;
383
- }
384
- __name21(useIsHydrated, "useIsHydrated");
385
- var useReactSyncExternalStore = React210[" useSyncExternalStore ".trim().toString()];
386
- function subscribe() {
387
- return () => {
388
- };
389
- }
390
- __name21(subscribe, "subscribe");
391
- function useIsHydratedModern() {
392
- return useReactSyncExternalStore(
393
- subscribe,
394
- () => true,
395
- () => false
396
- );
397
- }
398
- __name21(useIsHydratedModern, "useIsHydratedModern");
399
- var useIsHydrated2 = typeof useReactSyncExternalStore === "function" ? useIsHydratedModern : useIsHydrated;
400
-
401
- // ../../node_modules/@radix-ui/react-roving-focus/dist/index.mjs
402
- var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1);
403
- var __defProp23 = Object.defineProperty;
404
- var __name22 = (target, value) => __defProp23(target, "name", { value, configurable: true });
405
- var ENTRY_FOCUS = "rovingFocusGroup.onEntryFocus";
406
- var EVENT_OPTIONS2 = { bubbles: false, cancelable: true };
407
- var GROUP_NAME = "RovingFocusGroup";
408
- var [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);
409
- var [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(
410
- GROUP_NAME,
411
- [createCollectionScope]
412
- );
413
- var Orientation = {
414
- Vertical: "vertical",
415
- Horizontal: "horizontal"
416
- };
417
- var Direction2 = {
418
- LTR: "ltr",
419
- RTL: "rtl"
420
- };
421
- var [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);
422
- var RovingFocusGroup = /* @__PURE__ */ React33.forwardRef(
423
- // blank line to reduce diff noise
424
- /* @__PURE__ */ __name22(function RovingFocusGroup2(props, forwardedRef) {
425
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Collection.Provider, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Collection.Slot, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(RovingFocusGroupImpl, { ...props, ref: forwardedRef }) }) });
426
- }, "RovingFocusGroup")
427
- );
428
- var RovingFocusGroupImpl = /* @__PURE__ */ React33.forwardRef(/* @__PURE__ */ __name22(function RovingFocusGroupImpl2(props, forwardedRef) {
429
- const {
430
- __scopeRovingFocusGroup,
431
- orientation,
432
- loop = false,
433
- dir,
434
- currentTabStopId: currentTabStopIdProp,
435
- defaultCurrentTabStopId,
436
- onCurrentTabStopIdChange,
437
- onEntryFocus,
438
- preventScrollOnEntryFocus = false,
439
- ...groupProps
440
- } = props;
441
- const ref = React33.useRef(null);
442
- const composedRefs = useComposedRefs(forwardedRef, ref);
443
- const direction = useDirection(dir);
444
- const [currentTabStopId, setCurrentTabStopId] = useControllableState({
445
- prop: currentTabStopIdProp,
446
- defaultProp: defaultCurrentTabStopId ?? null,
447
- onChange: onCurrentTabStopIdChange,
448
- caller: GROUP_NAME
449
- });
450
- const [isTabbingBackOut, setIsTabbingBackOut] = React33.useState(false);
451
- const handleEntryFocus = useCallbackRef(onEntryFocus);
452
- const getItems = useCollection(__scopeRovingFocusGroup);
453
- const isClickFocusRef = React33.useRef(false);
454
- const [focusableItemsCount, setFocusableItemsCount] = React33.useState(0);
455
- React33.useEffect(() => {
456
- const node = ref.current;
457
- if (node) {
458
- node.addEventListener(ENTRY_FOCUS, handleEntryFocus);
459
- return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);
460
- }
461
- }, [handleEntryFocus]);
462
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
463
- RovingFocusProvider,
464
- {
465
- scope: __scopeRovingFocusGroup,
466
- orientation,
467
- dir: direction,
468
- loop,
469
- currentTabStopId,
470
- onItemFocus: React33.useCallback(
471
- (tabStopId) => setCurrentTabStopId(tabStopId),
472
- [setCurrentTabStopId]
473
- ),
474
- onItemShiftTab: React33.useCallback(() => setIsTabbingBackOut(true), []),
475
- onFocusableItemAdd: React33.useCallback(
476
- () => setFocusableItemsCount((prevCount) => prevCount + 1),
477
- []
478
- ),
479
- onFocusableItemRemove: React33.useCallback(
480
- () => setFocusableItemsCount((prevCount) => prevCount - 1),
481
- []
482
- ),
483
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
484
- Primitive.div,
485
- {
486
- tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,
487
- "data-orientation": orientation,
488
- ...groupProps,
489
- ref: composedRefs,
490
- style: { outline: "none", ...props.style },
491
- onMouseDown: composeEventHandlers(props.onMouseDown, () => {
492
- isClickFocusRef.current = true;
493
- }),
494
- onFocus: composeEventHandlers(props.onFocus, (event) => {
495
- const isKeyboardFocus = !isClickFocusRef.current;
496
- if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {
497
- const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS2);
498
- event.currentTarget.dispatchEvent(entryFocusEvent);
499
- if (!entryFocusEvent.defaultPrevented) {
500
- const items = getItems().filter((item) => item.focusable);
501
- const activeItem = items.find((item) => item.active);
502
- const currentItem = items.find((item) => item.id === currentTabStopId);
503
- const candidateItems = [activeItem, currentItem, ...items].filter(
504
- Boolean
505
- );
506
- const candidateNodes = candidateItems.map((item) => item.ref.current);
507
- focusFirst2(candidateNodes, preventScrollOnEntryFocus);
508
- }
509
- }
510
- isClickFocusRef.current = false;
511
- }),
512
- onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))
513
- }
514
- )
515
- }
516
- );
517
- }, "RovingFocusGroupImpl"));
518
- var ITEM_NAME = "RovingFocusGroupItem";
519
- var RovingFocusGroupItem = /* @__PURE__ */ React33.forwardRef(
520
- // blank line to reduce diff noise
521
- /* @__PURE__ */ __name22(function RovingFocusGroupItem2(props, forwardedRef) {
522
- const {
523
- __scopeRovingFocusGroup,
524
- focusable = true,
525
- active = false,
526
- tabStopId,
527
- children,
528
- ...itemProps
529
- } = props;
530
- const autoId = useId();
531
- const id = tabStopId || autoId;
532
- const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);
533
- const isCurrentTabStop = context.currentTabStopId === id;
534
- const getItems = useCollection(__scopeRovingFocusGroup);
535
- const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;
536
- const isHydrated = useIsHydrated2();
537
- useLayoutEffect2(() => {
538
- if (!isHydrated || !focusable) {
539
- return;
540
- }
541
- onFocusableItemAdd();
542
- return () => onFocusableItemRemove();
543
- }, [isHydrated, focusable, onFocusableItemAdd, onFocusableItemRemove]);
544
- React33.useEffect(() => {
545
- if (isHydrated || !focusable) {
546
- return;
547
- }
548
- onFocusableItemAdd();
549
- return () => onFocusableItemRemove();
550
- }, [isHydrated, focusable, onFocusableItemAdd, onFocusableItemRemove]);
551
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
552
- Collection.ItemSlot,
553
- {
554
- scope: __scopeRovingFocusGroup,
555
- id,
556
- focusable,
557
- active,
558
- children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
559
- Primitive.span,
560
- {
561
- tabIndex: isCurrentTabStop ? 0 : -1,
562
- "data-orientation": context.orientation,
563
- ...itemProps,
564
- ref: forwardedRef,
565
- onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {
566
- if (!focusable) event.preventDefault();
567
- else context.onItemFocus(id);
568
- }),
569
- onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),
570
- onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
571
- if (event.key === "Tab" && event.shiftKey) {
572
- context.onItemShiftTab();
573
- return;
574
- }
575
- if (event.target !== event.currentTarget) return;
576
- const focusIntent = getFocusIntent(event, context.orientation, context.dir);
577
- if (focusIntent !== void 0) {
578
- if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;
579
- event.preventDefault();
580
- const items = getItems().filter((item) => item.focusable);
581
- let candidateNodes = items.map((item) => item.ref.current);
582
- if (focusIntent === "last") candidateNodes.reverse();
583
- else if (focusIntent === "prev" || focusIntent === "next") {
584
- if (focusIntent === "prev") candidateNodes.reverse();
585
- const currentIndex = candidateNodes.indexOf(event.currentTarget);
586
- candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);
587
- }
588
- setTimeout(() => focusFirst2(candidateNodes));
589
- }
590
- }),
591
- children: typeof children === "function" ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null }) : children
592
- }
593
- )
594
- }
595
- );
596
- }, "RovingFocusGroupItem")
597
- );
598
- var MAP_KEY_TO_FOCUS_INTENT = {
599
- ArrowLeft: "prev",
600
- ArrowUp: "prev",
601
- ArrowRight: "next",
602
- ArrowDown: "next",
603
- PageUp: "first",
604
- Home: "first",
605
- PageDown: "last",
606
- End: "last"
607
- };
608
- function getDirectionAwareKey(key, dir) {
609
- if (dir !== Direction2.RTL) return key;
610
- return key === "ArrowLeft" ? "ArrowRight" : key === "ArrowRight" ? "ArrowLeft" : key;
611
- }
612
- __name22(getDirectionAwareKey, "getDirectionAwareKey");
613
- function getFocusIntent(event, orientation, dir) {
614
- const key = getDirectionAwareKey(event.key, dir);
615
- if (orientation === Orientation.Vertical && ["ArrowLeft", "ArrowRight"].includes(key)) {
616
- return void 0;
617
- }
618
- if (orientation === Orientation.Horizontal && ["ArrowUp", "ArrowDown"].includes(key)) {
619
- return void 0;
620
- }
621
- return MAP_KEY_TO_FOCUS_INTENT[key];
622
- }
623
- __name22(getFocusIntent, "getFocusIntent");
624
- function focusFirst2(candidates, preventScroll = false) {
625
- const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;
626
- for (const candidate of candidates) {
627
- if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;
628
- candidate.focus({ preventScroll });
629
- if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;
630
- }
631
- }
632
- __name22(focusFirst2, "focusFirst");
633
- function wrapArray(array, startIndex) {
634
- return array.map((_, index2) => array[(startIndex + index2) % array.length]);
635
- }
636
- __name22(wrapArray, "wrapArray");
637
-
638
- // ../../node_modules/@radix-ui/react-menu/dist/index.mjs
639
- var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1);
640
- var __defProp24 = Object.defineProperty;
641
- var __name23 = (target, value) => __defProp24(target, "name", { value, configurable: true });
642
- var Direction3 = {
643
- LTR: "ltr",
644
- RTL: "rtl"
645
- };
646
- var SELECTION_KEYS = ["Enter", " "];
647
- var FIRST_KEYS = ["ArrowDown", "PageUp", "Home"];
648
- var LAST_KEYS = ["ArrowUp", "PageDown", "End"];
649
- var FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];
650
- var SUB_OPEN_KEYS = {
651
- ltr: [...SELECTION_KEYS, "ArrowRight"],
652
- rtl: [...SELECTION_KEYS, "ArrowLeft"]
653
- };
654
- var SUB_CLOSE_KEYS = {
655
- ltr: ["ArrowLeft"],
656
- rtl: ["ArrowRight"]
657
- };
658
- var MENU_NAME = "Menu";
659
- var [Collection2, useCollection2, createCollectionScope2] = createCollection(MENU_NAME);
660
- var [createMenuContext, createMenuScope] = createContextScope(MENU_NAME, [
661
- createCollectionScope2,
662
- createPopperScope,
663
- createRovingFocusGroupScope
664
- ]);
665
- var usePopperScope = createPopperScope();
666
- var useRovingFocusGroupScope = createRovingFocusGroupScope();
667
- var [MenuProvider, useMenuContext] = createMenuContext(MENU_NAME);
668
- var [MenuRootProvider, useMenuRootContext] = createMenuContext(MENU_NAME);
669
- var Menu = /* @__PURE__ */ __name23((props) => {
670
- const { __scopeMenu, open = false, children, dir, onOpenChange, modal = true } = props;
671
- const popperScope = usePopperScope(__scopeMenu);
672
- const [content, setContent] = React34.useState(null);
673
- const isUsingKeyboardRef = React34.useRef(false);
674
- const handleOpenChange = useCallbackRef(onOpenChange);
675
- const direction = useDirection(dir);
676
- React34.useEffect(() => {
677
- const handleKeyDown = /* @__PURE__ */ __name23(() => {
678
- isUsingKeyboardRef.current = true;
679
- document.addEventListener("pointerdown", handlePointer, { capture: true, once: true });
680
- document.addEventListener("pointermove", handlePointer, { capture: true, once: true });
681
- }, "handleKeyDown");
682
- const handlePointer = /* @__PURE__ */ __name23(() => isUsingKeyboardRef.current = false, "handlePointer");
683
- document.addEventListener("keydown", handleKeyDown, { capture: true });
684
- return () => {
685
- document.removeEventListener("keydown", handleKeyDown, { capture: true });
686
- document.removeEventListener("pointerdown", handlePointer, { capture: true });
687
- document.removeEventListener("pointermove", handlePointer, { capture: true });
688
- };
689
- }, []);
690
- React34.useEffect(() => {
691
- if (!open) {
692
- return;
693
- }
694
- const handleBlur = /* @__PURE__ */ __name23(() => handleOpenChange(false), "handleBlur");
695
- window.addEventListener("blur", handleBlur);
696
- return () => window.removeEventListener("blur", handleBlur);
697
- }, [open, handleOpenChange]);
698
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Popper, { ...popperScope, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
699
- MenuProvider,
700
- {
701
- scope: __scopeMenu,
702
- open,
703
- onOpenChange: handleOpenChange,
704
- content,
705
- onContentChange: setContent,
706
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
707
- MenuRootProvider,
708
- {
709
- scope: __scopeMenu,
710
- onClose: React34.useCallback(() => handleOpenChange(false), [handleOpenChange]),
711
- isUsingKeyboardRef,
712
- dir: direction,
713
- modal,
714
- children
715
- }
716
- )
717
- }
718
- ) });
719
- }, "Menu");
720
- var MenuAnchor = /* @__PURE__ */ React34.forwardRef(
721
- /* @__PURE__ */ __name23(function MenuAnchor2(props, forwardedRef) {
722
- const { __scopeMenu, ...anchorProps } = props;
723
- const popperScope = usePopperScope(__scopeMenu);
724
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(PopperAnchor, { ...popperScope, ...anchorProps, ref: forwardedRef });
725
- }, "MenuAnchor")
726
- );
727
- var PORTAL_NAME2 = "MenuPortal";
728
- var [PortalProvider2, usePortalContext2] = createMenuContext(PORTAL_NAME2, {
729
- forceMount: void 0
730
- });
731
- var MenuPortal = /* @__PURE__ */ __name23((props) => {
732
- const { __scopeMenu, forceMount, children, container } = props;
733
- const context = useMenuContext(PORTAL_NAME2, __scopeMenu);
734
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(PortalProvider2, { scope: __scopeMenu, forceMount, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Portal, { asChild: true, container, children }) }) });
735
- }, "MenuPortal");
736
- var CONTENT_NAME3 = "MenuContent";
737
- var [MenuContentProvider, useMenuContentContext] = createMenuContext(CONTENT_NAME3);
738
- var MenuContent = /* @__PURE__ */ React34.forwardRef(
739
- /* @__PURE__ */ __name23(function MenuContent2(props, forwardedRef) {
740
- const portalContext = usePortalContext2(CONTENT_NAME3, props.__scopeMenu);
741
- const { forceMount = portalContext.forceMount, ...contentProps } = props;
742
- const context = useMenuContext(CONTENT_NAME3, props.__scopeMenu);
743
- const rootContext = useMenuRootContext(CONTENT_NAME3, props.__scopeMenu);
744
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Collection2.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Collection2.Slot, { scope: props.__scopeMenu, children: rootContext.modal ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(MenuRootContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(MenuRootContentNonModal, { ...contentProps, ref: forwardedRef }) }) }) });
745
- }, "MenuContent")
746
- );
747
- var MenuRootContentModal = /* @__PURE__ */ React34.forwardRef(
748
- // blank line to reduce diff noise
749
- /* @__PURE__ */ __name23(function MenuRootContentModal2(props, forwardedRef) {
750
- const context = useMenuContext(CONTENT_NAME3, props.__scopeMenu);
751
- const ref = React34.useRef(null);
752
- const composedRefs = useComposedRefs(forwardedRef, ref);
753
- React34.useEffect(() => {
754
- const content = ref.current;
755
- if (content) return hideOthers(content);
756
- }, []);
757
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
758
- MenuContentImpl,
759
- {
760
- ...props,
761
- ref: composedRefs,
762
- trapFocus: context.open,
763
- disableOutsidePointerEvents: context.open,
764
- disableOutsideScroll: true,
765
- onFocusOutside: composeEventHandlers(
766
- props.onFocusOutside,
767
- (event) => event.preventDefault(),
768
- { checkForDefaultPrevented: false }
769
- ),
770
- onDismiss: () => context.onOpenChange(false)
771
- }
772
- );
773
- }, "MenuRootContentModal")
774
- );
775
- var MenuRootContentNonModal = /* @__PURE__ */ React34.forwardRef(/* @__PURE__ */ __name23(function MenuRootContentNonModal2(props, forwardedRef) {
776
- const context = useMenuContext(CONTENT_NAME3, props.__scopeMenu);
777
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
778
- MenuContentImpl,
779
- {
780
- ...props,
781
- ref: forwardedRef,
782
- trapFocus: false,
783
- disableOutsidePointerEvents: false,
784
- disableOutsideScroll: false,
785
- onDismiss: () => context.onOpenChange(false)
786
- }
787
- );
788
- }, "MenuRootContentNonModal"));
789
- var Slot2 = createSlot("MenuContent.ScrollLock");
790
- var MenuContentImpl = /* @__PURE__ */ React34.forwardRef(
791
- // blank line to reduce diff noise
792
- /* @__PURE__ */ __name23(function MenuContentImpl2(props, forwardedRef) {
793
- const {
794
- __scopeMenu,
795
- loop = false,
796
- trapFocus,
797
- onOpenAutoFocus,
798
- onCloseAutoFocus,
799
- disableOutsidePointerEvents,
800
- onEntryFocus,
801
- onEscapeKeyDown,
802
- onPointerDownOutside,
803
- onFocusOutside,
804
- onInteractOutside,
805
- onDismiss,
806
- disableOutsideScroll,
807
- ...contentProps
808
- } = props;
809
- const context = useMenuContext(CONTENT_NAME3, __scopeMenu);
810
- const rootContext = useMenuRootContext(CONTENT_NAME3, __scopeMenu);
811
- const popperScope = usePopperScope(__scopeMenu);
812
- const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);
813
- const getItems = useCollection2(__scopeMenu);
814
- const [currentItemId, setCurrentItemId] = React34.useState(null);
815
- const contentRef = React34.useRef(null);
816
- const [branchNode, setBranchNode] = React34.useState(null);
817
- useFocusScopeBranch(branchNode);
818
- const { nodes: branchNodes, registry: branchRegistry } = useFocusScopeBranchRegistry();
819
- const isModal = Boolean(trapFocus || disableOutsideScroll);
820
- const composedRefs = useComposedRefs(
821
- forwardedRef,
822
- contentRef,
823
- context.onContentChange,
824
- setBranchNode
825
- );
826
- const timerRef = React34.useRef(0);
827
- const searchRef = React34.useRef("");
828
- const pointerGraceTimerRef = React34.useRef(0);
829
- const pointerGraceIntentRef = React34.useRef(null);
830
- const pointerDirRef = React34.useRef("right");
831
- const lastPointerXRef = React34.useRef(0);
832
- const shards = React34.useMemo(
833
- () => disableOutsideScroll ? [contentRef, ...branchNodes.map((node) => ({ current: node }))] : [],
834
- [contentRef, branchNodes, disableOutsideScroll]
835
- );
836
- const ScrollLockWrapper = disableOutsideScroll ? Combination_default : React34.Fragment;
837
- const scrollLockWrapperProps = disableOutsideScroll ? {
838
- as: Slot2,
839
- allowPinchZoom: true,
840
- shards
841
- } : void 0;
842
- const handleTypeaheadSearch = /* @__PURE__ */ __name23((key) => {
843
- const search = searchRef.current + key;
844
- const items = getItems().filter((item) => !item.disabled);
845
- const currentItem = document.activeElement;
846
- const currentMatch = items.find((item) => item.ref.current === currentItem)?.textValue;
847
- const values = items.map((item) => item.textValue);
848
- const nextMatch = getNextMatch(values, search, currentMatch);
849
- const newItem = items.find((item) => item.textValue === nextMatch)?.ref.current;
850
- function updateSearch(value) {
851
- searchRef.current = value;
852
- window.clearTimeout(timerRef.current);
853
- if (value !== "") timerRef.current = window.setTimeout(() => updateSearch(""), 1e3);
854
- }
855
- __name23(updateSearch, "updateSearch");
856
- updateSearch(search);
857
- if (newItem) {
858
- setTimeout(() => newItem.focus());
859
- }
860
- }, "handleTypeaheadSearch");
861
- React34.useEffect(() => {
862
- return () => window.clearTimeout(timerRef.current);
863
- }, []);
864
- useFocusGuards();
865
- const isPointerMovingToSubmenu = React34.useCallback((event) => {
866
- const isMovingTowards = pointerDirRef.current === pointerGraceIntentRef.current?.side;
867
- return isMovingTowards && isPointerInGraceArea(event, pointerGraceIntentRef.current?.area);
868
- }, []);
869
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
870
- MenuContentProvider,
871
- {
872
- scope: __scopeMenu,
873
- searchRef,
874
- onItemEnter: React34.useCallback(
875
- (event) => {
876
- if (isPointerMovingToSubmenu(event)) event.preventDefault();
877
- },
878
- [isPointerMovingToSubmenu]
879
- ),
880
- onItemLeave: React34.useCallback(
881
- (event) => {
882
- if (isPointerMovingToSubmenu(event)) return;
883
- contentRef.current?.focus();
884
- setCurrentItemId(null);
885
- },
886
- [isPointerMovingToSubmenu]
887
- ),
888
- onTriggerLeave: React34.useCallback(
889
- (event) => {
890
- if (isPointerMovingToSubmenu(event)) event.preventDefault();
891
- },
892
- [isPointerMovingToSubmenu]
893
- ),
894
- pointerGraceTimerRef,
895
- onPointerGraceIntentChange: React34.useCallback((intent) => {
896
- pointerGraceIntentRef.current = intent;
897
- }, []),
898
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(FocusScopeBranchProvider, { registry: isModal ? branchRegistry : null, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ScrollLockWrapper, { ...scrollLockWrapperProps, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
899
- FocusScope,
900
- {
901
- asChild: true,
902
- trapped: trapFocus,
903
- branches: branchNodes,
904
- onMountAutoFocus: composeEventHandlers(onOpenAutoFocus, (event) => {
905
- event.preventDefault();
906
- contentRef.current?.focus({ preventScroll: true });
907
- }),
908
- onUnmountAutoFocus: onCloseAutoFocus,
909
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
910
- DismissableLayer,
911
- {
912
- asChild: true,
913
- disableOutsidePointerEvents,
914
- onEscapeKeyDown,
915
- onPointerDownOutside,
916
- onFocusOutside,
917
- onInteractOutside,
918
- onDismiss,
919
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
920
- RovingFocusGroup,
921
- {
922
- asChild: true,
923
- ...rovingFocusGroupScope,
924
- dir: rootContext.dir,
925
- orientation: "vertical",
926
- loop,
927
- currentTabStopId: currentItemId,
928
- onCurrentTabStopIdChange: setCurrentItemId,
929
- onEntryFocus: composeEventHandlers(onEntryFocus, (event) => {
930
- if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();
931
- }),
932
- preventScrollOnEntryFocus: true,
933
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
934
- PopperContent,
935
- {
936
- role: "menu",
937
- "aria-orientation": "vertical",
938
- "data-state": getOpenState(context.open),
939
- "data-radix-menu-content": "",
940
- dir: rootContext.dir,
941
- ...popperScope,
942
- ...contentProps,
943
- ref: composedRefs,
944
- style: { outline: "none", ...contentProps.style },
945
- onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {
946
- const target = event.target;
947
- const isKeyDownInside = target.closest("[data-radix-menu-content]") === event.currentTarget;
948
- const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;
949
- const isCharacterKey = event.key.length === 1;
950
- if (isKeyDownInside) {
951
- if (event.key === "Tab") event.preventDefault();
952
- if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key);
953
- }
954
- const content = contentRef.current;
955
- if (event.target !== content) return;
956
- if (!FIRST_LAST_KEYS.includes(event.key)) return;
957
- event.preventDefault();
958
- const items = getItems().filter((item) => !item.disabled);
959
- const candidateNodes = items.map((item) => item.ref.current);
960
- if (LAST_KEYS.includes(event.key)) candidateNodes.reverse();
961
- focusFirst3(candidateNodes);
962
- }),
963
- onBlur: composeEventHandlers(props.onBlur, (event) => {
964
- if (!event.currentTarget.contains(event.target)) {
965
- window.clearTimeout(timerRef.current);
966
- searchRef.current = "";
967
- }
968
- }),
969
- onPointerMove: composeEventHandlers(
970
- props.onPointerMove,
971
- whenMouse((event) => {
972
- const target = event.target;
973
- const pointerXHasChanged = lastPointerXRef.current !== event.clientX;
974
- if (event.currentTarget.contains(target) && pointerXHasChanged) {
975
- const newDir = event.clientX > lastPointerXRef.current ? "right" : "left";
976
- pointerDirRef.current = newDir;
977
- lastPointerXRef.current = event.clientX;
978
- }
979
- })
980
- )
981
- }
982
- )
983
- }
984
- )
985
- }
986
- )
987
- }
988
- ) }) })
989
- }
990
- );
991
- }, "MenuContentImpl")
992
- );
993
- var MenuGroup = /* @__PURE__ */ React34.forwardRef(
994
- /* @__PURE__ */ __name23(function MenuGroup2(props, forwardedRef) {
995
- const { __scopeMenu, ...groupProps } = props;
996
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Primitive.div, { role: "group", ...groupProps, ref: forwardedRef });
997
- }, "MenuGroup")
998
- );
999
- var MenuLabel = /* @__PURE__ */ React34.forwardRef(
1000
- /* @__PURE__ */ __name23(function MenuLabel2(props, forwardedRef) {
1001
- const { __scopeMenu, ...labelProps } = props;
1002
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Primitive.div, { ...labelProps, ref: forwardedRef });
1003
- }, "MenuLabel")
1004
- );
1005
- var ITEM_NAME2 = "MenuItem";
1006
- var ITEM_SELECT = "menu.itemSelect";
1007
- var MenuItem = /* @__PURE__ */ React34.forwardRef(
1008
- // blank line to reduce diff noise
1009
- /* @__PURE__ */ __name23(function MenuItem2(props, forwardedRef) {
1010
- const { disabled = false, onSelect, ...itemProps } = props;
1011
- const ref = React34.useRef(null);
1012
- const rootContext = useMenuRootContext(ITEM_NAME2, props.__scopeMenu);
1013
- const contentContext = useMenuContentContext(ITEM_NAME2, props.__scopeMenu);
1014
- const composedRefs = useComposedRefs(forwardedRef, ref);
1015
- const isPointerDownRef = React34.useRef(false);
1016
- const handleSelect = /* @__PURE__ */ __name23(() => {
1017
- const menuItem = ref.current;
1018
- if (!disabled && menuItem) {
1019
- const itemSelectEvent = new CustomEvent(ITEM_SELECT, { bubbles: true, cancelable: true });
1020
- menuItem.addEventListener(ITEM_SELECT, (event) => onSelect?.(event), { once: true });
1021
- dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);
1022
- if (itemSelectEvent.defaultPrevented) {
1023
- isPointerDownRef.current = false;
1024
- } else {
1025
- rootContext.onClose();
1026
- }
1027
- }
1028
- }, "handleSelect");
1029
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1030
- MenuItemImpl,
1031
- {
1032
- ...itemProps,
1033
- ref: composedRefs,
1034
- disabled,
1035
- onClick: composeEventHandlers(props.onClick, handleSelect),
1036
- onPointerDown: (event) => {
1037
- props.onPointerDown?.(event);
1038
- isPointerDownRef.current = true;
1039
- },
1040
- onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {
1041
- if (!isPointerDownRef.current) event.currentTarget?.click();
1042
- }),
1043
- onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
1044
- if (disabled || event.target !== event.currentTarget) {
1045
- return;
1046
- }
1047
- const isTypingAhead = contentContext.searchRef.current !== "";
1048
- if (isTypingAhead && event.key === " ") {
1049
- return;
1050
- }
1051
- if (SELECTION_KEYS.includes(event.key)) {
1052
- event.currentTarget.click();
1053
- event.preventDefault();
1054
- }
1055
- })
1056
- }
1057
- );
1058
- }, "MenuItem")
1059
- );
1060
- var MenuItemImpl = /* @__PURE__ */ React34.forwardRef(
1061
- /* @__PURE__ */ __name23(function MenuItemImpl2(props, forwardedRef) {
1062
- const { __scopeMenu, disabled = false, textValue, ...itemProps } = props;
1063
- const contentContext = useMenuContentContext(ITEM_NAME2, __scopeMenu);
1064
- const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);
1065
- const ref = React34.useRef(null);
1066
- const composedRefs = useComposedRefs(forwardedRef, ref);
1067
- const [isFocused, setIsFocused] = React34.useState(false);
1068
- const [textContent, setTextContent] = React34.useState("");
1069
- React34.useEffect(() => {
1070
- const menuItem = ref.current;
1071
- if (menuItem) {
1072
- setTextContent((menuItem.textContent ?? "").trim());
1073
- }
1074
- }, [itemProps.children]);
1075
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1076
- Collection2.ItemSlot,
1077
- {
1078
- scope: __scopeMenu,
1079
- disabled,
1080
- textValue: textValue ?? textContent,
1081
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(RovingFocusGroupItem, { asChild: true, ...rovingFocusGroupScope, focusable: !disabled, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1082
- Primitive.div,
1083
- {
1084
- role: "menuitem",
1085
- "data-highlighted": isFocused ? "" : void 0,
1086
- "aria-disabled": disabled || void 0,
1087
- "data-disabled": disabled ? "" : void 0,
1088
- ...itemProps,
1089
- ref: composedRefs,
1090
- onPointerMove: composeEventHandlers(
1091
- props.onPointerMove,
1092
- whenMouse((event) => {
1093
- if (disabled) {
1094
- contentContext.onItemLeave(event);
1095
- } else {
1096
- contentContext.onItemEnter(event);
1097
- if (!event.defaultPrevented) {
1098
- const item = event.currentTarget;
1099
- item.focus({ preventScroll: true });
1100
- }
1101
- }
1102
- })
1103
- ),
1104
- onPointerLeave: composeEventHandlers(
1105
- props.onPointerLeave,
1106
- whenMouse((event) => contentContext.onItemLeave(event))
1107
- ),
1108
- onFocus: composeEventHandlers(props.onFocus, () => setIsFocused(true)),
1109
- onBlur: composeEventHandlers(props.onBlur, () => setIsFocused(false))
1110
- }
1111
- ) })
1112
- }
1113
- );
1114
- }, "MenuItemImpl")
1115
- );
1116
- var MenuCheckboxItem = /* @__PURE__ */ React34.forwardRef(
1117
- // blank line to reduce diff noise
1118
- /* @__PURE__ */ __name23(function MenuCheckboxItem2(props, forwardedRef) {
1119
- const { checked = false, onCheckedChange, ...checkboxItemProps } = props;
1120
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1121
- MenuItem,
1122
- {
1123
- role: "menuitemcheckbox",
1124
- "aria-checked": isIndeterminate(checked) ? "mixed" : checked,
1125
- ...checkboxItemProps,
1126
- ref: forwardedRef,
1127
- "data-state": getCheckedState(checked),
1128
- onSelect: composeEventHandlers(
1129
- checkboxItemProps.onSelect,
1130
- () => onCheckedChange?.(isIndeterminate(checked) ? true : !checked),
1131
- { checkForDefaultPrevented: false }
1132
- )
1133
- }
1134
- ) });
1135
- }, "MenuCheckboxItem")
1136
- );
1137
- var RADIO_GROUP_NAME = "MenuRadioGroup";
1138
- var [RadioGroupProvider, useRadioGroupContext] = createMenuContext(
1139
- RADIO_GROUP_NAME,
1140
- { value: void 0, onValueChange: /* @__PURE__ */ __name23(() => {
1141
- }, "onValueChange") }
1142
- );
1143
- var MenuRadioGroup = /* @__PURE__ */ React34.forwardRef(
1144
- /* @__PURE__ */ __name23(function MenuRadioGroup2(props, forwardedRef) {
1145
- const { value, onValueChange, ...groupProps } = props;
1146
- const handleValueChange = useCallbackRef(onValueChange);
1147
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(RadioGroupProvider, { scope: props.__scopeMenu, value, onValueChange: handleValueChange, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(MenuGroup, { ...groupProps, ref: forwardedRef }) });
1148
- }, "MenuRadioGroup")
1149
- );
1150
- var RADIO_ITEM_NAME = "MenuRadioItem";
1151
- var MenuRadioItem = /* @__PURE__ */ React34.forwardRef(
1152
- /* @__PURE__ */ __name23(function MenuRadioItem2(props, forwardedRef) {
1153
- const { value, ...radioItemProps } = props;
1154
- const context = useRadioGroupContext(RADIO_ITEM_NAME, props.__scopeMenu);
1155
- const checked = value === context.value;
1156
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1157
- MenuItem,
1158
- {
1159
- role: "menuitemradio",
1160
- "aria-checked": checked,
1161
- ...radioItemProps,
1162
- ref: forwardedRef,
1163
- "data-state": getCheckedState(checked),
1164
- onSelect: composeEventHandlers(
1165
- radioItemProps.onSelect,
1166
- () => context.onValueChange?.(value),
1167
- { checkForDefaultPrevented: false }
1168
- )
1169
- }
1170
- ) });
1171
- }, "MenuRadioItem")
1172
- );
1173
- var ITEM_INDICATOR_NAME = "MenuItemIndicator";
1174
- var [ItemIndicatorProvider, useItemIndicatorContext] = createMenuContext(
1175
- ITEM_INDICATOR_NAME,
1176
- { checked: false }
1177
- );
1178
- var MenuItemIndicator = /* @__PURE__ */ React34.forwardRef(
1179
- // blank line to reduce diff noise
1180
- /* @__PURE__ */ __name23(function MenuItemIndicator2(props, forwardedRef) {
1181
- const { __scopeMenu, forceMount, ...itemIndicatorProps } = props;
1182
- const indicatorContext = useItemIndicatorContext(ITEM_INDICATOR_NAME, __scopeMenu);
1183
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1184
- Presence,
1185
- {
1186
- present: forceMount || isIndeterminate(indicatorContext.checked) || indicatorContext.checked === true,
1187
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1188
- Primitive.span,
1189
- {
1190
- ...itemIndicatorProps,
1191
- ref: forwardedRef,
1192
- "data-state": getCheckedState(indicatorContext.checked)
1193
- }
1194
- )
1195
- }
1196
- );
1197
- }, "MenuItemIndicator")
1198
- );
1199
- var MenuSeparator = /* @__PURE__ */ React34.forwardRef(
1200
- /* @__PURE__ */ __name23(function MenuSeparator2(props, forwardedRef) {
1201
- const { __scopeMenu, ...separatorProps } = props;
1202
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1203
- Primitive.div,
1204
- {
1205
- role: "separator",
1206
- "aria-orientation": "horizontal",
1207
- ...separatorProps,
1208
- ref: forwardedRef
1209
- }
1210
- );
1211
- }, "MenuSeparator")
1212
- );
1213
- var MenuArrow = /* @__PURE__ */ React34.forwardRef(
1214
- /* @__PURE__ */ __name23(function MenuArrow2(props, forwardedRef) {
1215
- const { __scopeMenu, ...arrowProps } = props;
1216
- const popperScope = usePopperScope(__scopeMenu);
1217
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(PopperArrow, { ...popperScope, ...arrowProps, ref: forwardedRef });
1218
- }, "MenuArrow")
1219
- );
1220
- var SUB_NAME = "MenuSub";
1221
- var [MenuSubProvider, useMenuSubContext] = createMenuContext(SUB_NAME);
1222
- var MenuSub = /* @__PURE__ */ __name23((props) => {
1223
- const { __scopeMenu, children, open = false, onOpenChange } = props;
1224
- const parentMenuContext = useMenuContext(SUB_NAME, __scopeMenu);
1225
- const popperScope = usePopperScope(__scopeMenu);
1226
- const [trigger, setTrigger] = React34.useState(null);
1227
- const [content, setContent] = React34.useState(null);
1228
- const handleOpenChange = useCallbackRef(onOpenChange);
1229
- React34.useEffect(() => {
1230
- if (parentMenuContext.open === false) handleOpenChange(false);
1231
- return () => handleOpenChange(false);
1232
- }, [parentMenuContext.open, handleOpenChange]);
1233
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Popper, { ...popperScope, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1234
- MenuProvider,
1235
- {
1236
- scope: __scopeMenu,
1237
- open,
1238
- onOpenChange: handleOpenChange,
1239
- content,
1240
- onContentChange: setContent,
1241
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1242
- MenuSubProvider,
1243
- {
1244
- scope: __scopeMenu,
1245
- contentId: useId(),
1246
- triggerId: useId(),
1247
- trigger,
1248
- onTriggerChange: setTrigger,
1249
- children
1250
- }
1251
- )
1252
- }
1253
- ) });
1254
- }, "MenuSub");
1255
- var SUB_TRIGGER_NAME = "MenuSubTrigger";
1256
- var MenuSubTrigger = /* @__PURE__ */ React34.forwardRef(
1257
- /* @__PURE__ */ __name23(function MenuSubTrigger2(props, forwardedRef) {
1258
- const context = useMenuContext(SUB_TRIGGER_NAME, props.__scopeMenu);
1259
- const rootContext = useMenuRootContext(SUB_TRIGGER_NAME, props.__scopeMenu);
1260
- const subContext = useMenuSubContext(SUB_TRIGGER_NAME, props.__scopeMenu);
1261
- const contentContext = useMenuContentContext(SUB_TRIGGER_NAME, props.__scopeMenu);
1262
- const openTimerRef = React34.useRef(null);
1263
- const { pointerGraceTimerRef, onPointerGraceIntentChange } = contentContext;
1264
- const scope = { __scopeMenu: props.__scopeMenu };
1265
- const clearOpenTimer = React34.useCallback(() => {
1266
- if (openTimerRef.current) window.clearTimeout(openTimerRef.current);
1267
- openTimerRef.current = null;
1268
- }, []);
1269
- React34.useEffect(() => clearOpenTimer, [clearOpenTimer]);
1270
- React34.useEffect(() => {
1271
- const pointerGraceTimer = pointerGraceTimerRef.current;
1272
- return () => {
1273
- window.clearTimeout(pointerGraceTimer);
1274
- onPointerGraceIntentChange(null);
1275
- };
1276
- }, [pointerGraceTimerRef, onPointerGraceIntentChange]);
1277
- const composedRefs = useComposedRefs(forwardedRef, subContext.onTriggerChange);
1278
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(MenuAnchor, { asChild: true, ...scope, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1279
- MenuItemImpl,
1280
- {
1281
- id: subContext.triggerId,
1282
- "aria-haspopup": "menu",
1283
- "aria-expanded": context.open,
1284
- "aria-controls": context.open ? subContext.contentId : void 0,
1285
- "data-state": getOpenState(context.open),
1286
- ...props,
1287
- ref: composedRefs,
1288
- onClick: (event) => {
1289
- props.onClick?.(event);
1290
- if (props.disabled || event.defaultPrevented) return;
1291
- event.currentTarget.focus();
1292
- if (!context.open) context.onOpenChange(true);
1293
- },
1294
- onPointerMove: composeEventHandlers(
1295
- props.onPointerMove,
1296
- whenMouse((event) => {
1297
- contentContext.onItemEnter(event);
1298
- if (event.defaultPrevented) return;
1299
- if (!props.disabled && !context.open && !openTimerRef.current) {
1300
- contentContext.onPointerGraceIntentChange(null);
1301
- openTimerRef.current = window.setTimeout(() => {
1302
- context.onOpenChange(true);
1303
- clearOpenTimer();
1304
- }, 100);
1305
- }
1306
- })
1307
- ),
1308
- onPointerLeave: composeEventHandlers(
1309
- props.onPointerLeave,
1310
- whenMouse((event) => {
1311
- clearOpenTimer();
1312
- const contentRect = context.content?.getBoundingClientRect();
1313
- if (contentRect) {
1314
- const side = context.content?.dataset.side;
1315
- const rightSide = side === "right";
1316
- const bleed = rightSide ? -5 : 5;
1317
- const contentNearEdge = contentRect[rightSide ? "left" : "right"];
1318
- const contentFarEdge = contentRect[rightSide ? "right" : "left"];
1319
- contentContext.onPointerGraceIntentChange({
1320
- area: [
1321
- // Apply a bleed on clientX to ensure that our exit point is
1322
- // consistently within polygon bounds
1323
- { x: event.clientX + bleed, y: event.clientY },
1324
- { x: contentNearEdge, y: contentRect.top },
1325
- { x: contentFarEdge, y: contentRect.top },
1326
- { x: contentFarEdge, y: contentRect.bottom },
1327
- { x: contentNearEdge, y: contentRect.bottom }
1328
- ],
1329
- side
1330
- });
1331
- window.clearTimeout(pointerGraceTimerRef.current);
1332
- pointerGraceTimerRef.current = window.setTimeout(
1333
- () => contentContext.onPointerGraceIntentChange(null),
1334
- 300
1335
- );
1336
- } else {
1337
- contentContext.onTriggerLeave(event);
1338
- if (event.defaultPrevented) return;
1339
- contentContext.onPointerGraceIntentChange(null);
1340
- }
1341
- })
1342
- ),
1343
- onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
1344
- if (props.disabled || event.target !== event.currentTarget) {
1345
- return;
1346
- }
1347
- const isTypingAhead = contentContext.searchRef.current !== "";
1348
- if (isTypingAhead && event.key === " ") {
1349
- return;
1350
- }
1351
- if (SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {
1352
- context.onOpenChange(true);
1353
- context.content?.focus();
1354
- event.preventDefault();
1355
- }
1356
- })
1357
- }
1358
- ) });
1359
- }, "MenuSubTrigger")
1360
- );
1361
- var SUB_CONTENT_NAME = "MenuSubContent";
1362
- var MenuSubContent = /* @__PURE__ */ React34.forwardRef(
1363
- /* @__PURE__ */ __name23(function MenuSubContent2(props, forwardedRef) {
1364
- const portalContext = usePortalContext2(CONTENT_NAME3, props.__scopeMenu);
1365
- const { forceMount = portalContext.forceMount, align = "start", ...subContentProps } = props;
1366
- const context = useMenuContext(CONTENT_NAME3, props.__scopeMenu);
1367
- const rootContext = useMenuRootContext(CONTENT_NAME3, props.__scopeMenu);
1368
- const subContext = useMenuSubContext(SUB_CONTENT_NAME, props.__scopeMenu);
1369
- const ref = React34.useRef(null);
1370
- const composedRefs = useComposedRefs(forwardedRef, ref);
1371
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Collection2.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Collection2.Slot, { scope: props.__scopeMenu, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1372
- MenuContentImpl,
1373
- {
1374
- id: subContext.contentId,
1375
- "aria-labelledby": subContext.triggerId,
1376
- ...subContentProps,
1377
- ref: composedRefs,
1378
- align,
1379
- side: rootContext.dir === Direction3.RTL ? "left" : "right",
1380
- disableOutsidePointerEvents: false,
1381
- disableOutsideScroll: false,
1382
- trapFocus: false,
1383
- onOpenAutoFocus: (event) => {
1384
- if (rootContext.isUsingKeyboardRef.current) ref.current?.focus();
1385
- event.preventDefault();
1386
- },
1387
- onCloseAutoFocus: (event) => event.preventDefault(),
1388
- onFocusOutside: composeEventHandlers(props.onFocusOutside, (event) => {
1389
- if (event.target !== subContext.trigger) context.onOpenChange(false);
1390
- }),
1391
- onEscapeKeyDown: composeEventHandlers(props.onEscapeKeyDown, (event) => {
1392
- rootContext.onClose();
1393
- event.preventDefault();
1394
- }),
1395
- onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
1396
- const isKeyDownInside = event.currentTarget.contains(event.target);
1397
- const isCloseKey = SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);
1398
- if (isKeyDownInside && isCloseKey) {
1399
- context.onOpenChange(false);
1400
- subContext.trigger?.focus();
1401
- event.preventDefault();
1402
- }
1403
- })
1404
- }
1405
- ) }) }) });
1406
- }, "MenuSubContent")
1407
- );
1408
- function getOpenState(open) {
1409
- return open ? "open" : "closed";
1410
- }
1411
- __name23(getOpenState, "getOpenState");
1412
- function isIndeterminate(checked) {
1413
- return checked === "indeterminate";
1414
- }
1415
- __name23(isIndeterminate, "isIndeterminate");
1416
- function getCheckedState(checked) {
1417
- return isIndeterminate(checked) ? "indeterminate" : checked ? "checked" : "unchecked";
1418
- }
1419
- __name23(getCheckedState, "getCheckedState");
1420
- function focusFirst3(candidates) {
1421
- const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;
1422
- for (const candidate of candidates) {
1423
- if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;
1424
- candidate.focus();
1425
- if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;
1426
- }
1427
- }
1428
- __name23(focusFirst3, "focusFirst");
1429
- function wrapArray2(array, startIndex) {
1430
- return array.map((_, index2) => array[(startIndex + index2) % array.length]);
1431
- }
1432
- __name23(wrapArray2, "wrapArray");
1433
- function getNextMatch(values, search, currentMatch) {
1434
- const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);
1435
- const normalizedSearch = isRepeated ? search[0] : search;
1436
- const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1;
1437
- let wrappedValues = wrapArray2(values, Math.max(currentMatchIndex, 0));
1438
- const excludeCurrentMatch = normalizedSearch.length === 1;
1439
- if (excludeCurrentMatch) wrappedValues = wrappedValues.filter((v) => v !== currentMatch);
1440
- const nextMatch = wrappedValues.find(
1441
- (value) => value.toLowerCase().startsWith(normalizedSearch.toLowerCase())
1442
- );
1443
- return nextMatch !== currentMatch ? nextMatch : void 0;
1444
- }
1445
- __name23(getNextMatch, "getNextMatch");
1446
- function isPointInPolygon(point, polygon) {
1447
- const { x, y } = point;
1448
- let inside = false;
1449
- for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
1450
- const ii = polygon[i];
1451
- const jj = polygon[j];
1452
- const xi = ii.x;
1453
- const yi = ii.y;
1454
- const xj = jj.x;
1455
- const yj = jj.y;
1456
- const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;
1457
- if (intersect) inside = !inside;
1458
- }
1459
- return inside;
1460
- }
1461
- __name23(isPointInPolygon, "isPointInPolygon");
1462
- function isPointerInGraceArea(event, area) {
1463
- if (!area) return false;
1464
- const cursorPos = { x: event.clientX, y: event.clientY };
1465
- return isPointInPolygon(cursorPos, area);
1466
- }
1467
- __name23(isPointerInGraceArea, "isPointerInGraceArea");
1468
- function whenMouse(handler) {
1469
- return (event) => event.pointerType === "mouse" ? handler(event) : void 0;
1470
- }
1471
- __name23(whenMouse, "whenMouse");
1472
-
1473
- // ../../node_modules/@radix-ui/react-dropdown-menu/dist/index.mjs
1474
- var dist_exports5 = {};
1475
- __export(dist_exports5, {
1476
- Arrow: () => DropdownMenuArrow,
1477
- CheckboxItem: () => DropdownMenuCheckboxItem,
1478
- Content: () => DropdownMenuContent,
1479
- DropdownMenu: () => DropdownMenu,
1480
- DropdownMenuArrow: () => DropdownMenuArrow,
1481
- DropdownMenuCheckboxItem: () => DropdownMenuCheckboxItem,
1482
- DropdownMenuContent: () => DropdownMenuContent,
1483
- DropdownMenuGroup: () => DropdownMenuGroup,
1484
- DropdownMenuItem: () => DropdownMenuItem,
1485
- DropdownMenuItemIndicator: () => DropdownMenuItemIndicator,
1486
- DropdownMenuLabel: () => DropdownMenuLabel,
1487
- DropdownMenuPortal: () => DropdownMenuPortal,
1488
- DropdownMenuRadioGroup: () => DropdownMenuRadioGroup,
1489
- DropdownMenuRadioItem: () => DropdownMenuRadioItem,
1490
- DropdownMenuSeparator: () => DropdownMenuSeparator,
1491
- DropdownMenuSub: () => DropdownMenuSub,
1492
- DropdownMenuSubContent: () => DropdownMenuSubContent,
1493
- DropdownMenuSubTrigger: () => DropdownMenuSubTrigger,
1494
- DropdownMenuTrigger: () => DropdownMenuTrigger,
1495
- Group: () => DropdownMenuGroup,
1496
- Item: () => DropdownMenuItem,
1497
- ItemIndicator: () => DropdownMenuItemIndicator,
1498
- Label: () => DropdownMenuLabel,
1499
- Portal: () => DropdownMenuPortal,
1500
- RadioGroup: () => DropdownMenuRadioGroup,
1501
- RadioItem: () => DropdownMenuRadioItem,
1502
- Root: () => DropdownMenu,
1503
- Separator: () => DropdownMenuSeparator,
1504
- Sub: () => DropdownMenuSub,
1505
- SubContent: () => DropdownMenuSubContent,
1506
- SubTrigger: () => DropdownMenuSubTrigger,
1507
- Trigger: () => DropdownMenuTrigger,
1508
- createDropdownMenuScope: () => createDropdownMenuScope
1509
- });
1510
- var React35 = __toESM(require_react(), 1);
1511
- var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1);
1512
- var __defProp25 = Object.defineProperty;
1513
- var __name24 = (target, value) => __defProp25(target, "name", { value, configurable: true });
1514
- var DROPDOWN_MENU_NAME = "DropdownMenu";
1515
- var [createDropdownMenuContext, createDropdownMenuScope] = createContextScope(
1516
- DROPDOWN_MENU_NAME,
1517
- [createMenuScope]
1518
- );
1519
- var useMenuScope = createMenuScope();
1520
- var [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);
1521
- var DropdownMenu = /* @__PURE__ */ __name24((props) => {
1522
- const {
1523
- __scopeDropdownMenu,
1524
- children,
1525
- dir,
1526
- open: openProp,
1527
- defaultOpen,
1528
- onOpenChange,
1529
- modal = true
1530
- } = props;
1531
- const menuScope = useMenuScope(__scopeDropdownMenu);
1532
- const triggerRef = React35.useRef(null);
1533
- const [open, setOpen] = useControllableState({
1534
- prop: openProp,
1535
- defaultProp: defaultOpen ?? false,
1536
- onChange: onOpenChange,
1537
- caller: DROPDOWN_MENU_NAME
1538
- });
1539
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1540
- DropdownMenuProvider,
1541
- {
1542
- scope: __scopeDropdownMenu,
1543
- triggerId: useId(),
1544
- triggerRef,
1545
- contentId: useId(),
1546
- open,
1547
- onOpenChange: setOpen,
1548
- onOpenToggle: React35.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),
1549
- modal,
1550
- children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Menu, { ...menuScope, open, onOpenChange: setOpen, dir, modal, children })
1551
- }
1552
- );
1553
- }, "DropdownMenu");
1554
- var TRIGGER_NAME2 = "DropdownMenuTrigger";
1555
- var DropdownMenuTrigger = /* @__PURE__ */ React35.forwardRef(
1556
- // blank line to reduce diff noise
1557
- /* @__PURE__ */ __name24(function DropdownMenuTrigger2(props, forwardedRef) {
1558
- const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;
1559
- const context = useDropdownMenuContext(TRIGGER_NAME2, __scopeDropdownMenu);
1560
- const menuScope = useMenuScope(__scopeDropdownMenu);
1561
- const composedRefs = useComposedRefs(forwardedRef, context.triggerRef);
1562
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(MenuAnchor, { asChild: true, ...menuScope, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1563
- Primitive.button,
1564
- {
1565
- type: "button",
1566
- id: context.triggerId,
1567
- "aria-haspopup": "menu",
1568
- "aria-expanded": context.open,
1569
- "aria-controls": context.open ? context.contentId : void 0,
1570
- "data-state": context.open ? "open" : "closed",
1571
- "data-disabled": disabled ? "" : void 0,
1572
- disabled,
1573
- ...triggerProps,
1574
- ref: composedRefs,
1575
- onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {
1576
- if (!disabled && event.button === 0 && event.ctrlKey === false) {
1577
- context.onOpenToggle();
1578
- if (!context.open) event.preventDefault();
1579
- }
1580
- }),
1581
- onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
1582
- if (disabled) return;
1583
- if (["Enter", " "].includes(event.key)) context.onOpenToggle();
1584
- if (event.key === "ArrowDown") context.onOpenChange(true);
1585
- if (["Enter", " ", "ArrowDown"].includes(event.key)) event.preventDefault();
1586
- })
1587
- }
1588
- ) });
1589
- }, "DropdownMenuTrigger")
1590
- );
1591
- var DropdownMenuPortal = /* @__PURE__ */ __name24((props) => {
1592
- const { __scopeDropdownMenu, ...portalProps } = props;
1593
- const menuScope = useMenuScope(__scopeDropdownMenu);
1594
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(MenuPortal, { ...menuScope, ...portalProps });
1595
- }, "DropdownMenuPortal");
1596
- var CONTENT_NAME4 = "DropdownMenuContent";
1597
- var DropdownMenuContent = /* @__PURE__ */ React35.forwardRef(
1598
- // blank line to reduce diff noise
1599
- /* @__PURE__ */ __name24(function DropdownMenuContent2(props, forwardedRef) {
1600
- const { __scopeDropdownMenu, ...contentProps } = props;
1601
- const context = useDropdownMenuContext(CONTENT_NAME4, __scopeDropdownMenu);
1602
- const menuScope = useMenuScope(__scopeDropdownMenu);
1603
- const hasInteractedOutsideRef = React35.useRef(false);
1604
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1605
- MenuContent,
1606
- {
1607
- id: context.contentId,
1608
- "aria-labelledby": context.triggerId,
1609
- ...menuScope,
1610
- ...contentProps,
1611
- ref: forwardedRef,
1612
- onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {
1613
- if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();
1614
- hasInteractedOutsideRef.current = false;
1615
- event.preventDefault();
1616
- }),
1617
- onInteractOutside: composeEventHandlers(props.onInteractOutside, (event) => {
1618
- const originalEvent = event.detail.originalEvent;
1619
- const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
1620
- const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
1621
- if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true;
1622
- }),
1623
- style: {
1624
- ...props.style,
1625
- // re-namespace exposed content custom properties
1626
- ...{
1627
- "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
1628
- "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
1629
- "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
1630
- "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
1631
- "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
1632
- }
1633
- }
1634
- }
1635
- );
1636
- }, "DropdownMenuContent")
1637
- );
1638
- var DropdownMenuGroup = /* @__PURE__ */ React35.forwardRef(
1639
- // blank line to reduce diff noise
1640
- /* @__PURE__ */ __name24(function DropdownMenuGroup2(props, forwardedRef) {
1641
- const { __scopeDropdownMenu, ...groupProps } = props;
1642
- const menuScope = useMenuScope(__scopeDropdownMenu);
1643
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(MenuGroup, { ...menuScope, ...groupProps, ref: forwardedRef });
1644
- }, "DropdownMenuGroup")
1645
- );
1646
- var DropdownMenuLabel = /* @__PURE__ */ React35.forwardRef(
1647
- // blank line to reduce diff noise
1648
- /* @__PURE__ */ __name24(function DropdownMenuLabel2(props, forwardedRef) {
1649
- const { __scopeDropdownMenu, ...labelProps } = props;
1650
- const menuScope = useMenuScope(__scopeDropdownMenu);
1651
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(MenuLabel, { ...menuScope, ...labelProps, ref: forwardedRef });
1652
- }, "DropdownMenuLabel")
1653
- );
1654
- var DropdownMenuItem = /* @__PURE__ */ React35.forwardRef(
1655
- // blank line to reduce diff noise
1656
- /* @__PURE__ */ __name24(function DropdownMenuItem2(props, forwardedRef) {
1657
- const { __scopeDropdownMenu, ...itemProps } = props;
1658
- const menuScope = useMenuScope(__scopeDropdownMenu);
1659
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(MenuItem, { ...menuScope, ...itemProps, ref: forwardedRef });
1660
- }, "DropdownMenuItem")
1661
- );
1662
- var DropdownMenuCheckboxItem = /* @__PURE__ */ React35.forwardRef(/* @__PURE__ */ __name24(function DropdownMenuCheckboxItem2(props, forwardedRef) {
1663
- const { __scopeDropdownMenu, ...checkboxItemProps } = props;
1664
- const menuScope = useMenuScope(__scopeDropdownMenu);
1665
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(MenuCheckboxItem, { ...menuScope, ...checkboxItemProps, ref: forwardedRef });
1666
- }, "DropdownMenuCheckboxItem"));
1667
- var DropdownMenuRadioGroup = /* @__PURE__ */ React35.forwardRef(/* @__PURE__ */ __name24(function DropdownMenuRadioGroup2(props, forwardedRef) {
1668
- const { __scopeDropdownMenu, ...radioGroupProps } = props;
1669
- const menuScope = useMenuScope(__scopeDropdownMenu);
1670
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(MenuRadioGroup, { ...menuScope, ...radioGroupProps, ref: forwardedRef });
1671
- }, "DropdownMenuRadioGroup"));
1672
- var DropdownMenuRadioItem = /* @__PURE__ */ React35.forwardRef(/* @__PURE__ */ __name24(function DropdownMenuRadioItem2(props, forwardedRef) {
1673
- const { __scopeDropdownMenu, ...radioItemProps } = props;
1674
- const menuScope = useMenuScope(__scopeDropdownMenu);
1675
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(MenuRadioItem, { ...menuScope, ...radioItemProps, ref: forwardedRef });
1676
- }, "DropdownMenuRadioItem"));
1677
- var DropdownMenuItemIndicator = /* @__PURE__ */ React35.forwardRef(/* @__PURE__ */ __name24(function DropdownMenuItemIndicator2(props, forwardedRef) {
1678
- const { __scopeDropdownMenu, ...itemIndicatorProps } = props;
1679
- const menuScope = useMenuScope(__scopeDropdownMenu);
1680
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(MenuItemIndicator, { ...menuScope, ...itemIndicatorProps, ref: forwardedRef });
1681
- }, "DropdownMenuItemIndicator"));
1682
- var DropdownMenuSeparator = /* @__PURE__ */ React35.forwardRef(/* @__PURE__ */ __name24(function DropdownMenuSeparator2(props, forwardedRef) {
1683
- const { __scopeDropdownMenu, ...separatorProps } = props;
1684
- const menuScope = useMenuScope(__scopeDropdownMenu);
1685
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(MenuSeparator, { ...menuScope, ...separatorProps, ref: forwardedRef });
1686
- }, "DropdownMenuSeparator"));
1687
- var DropdownMenuArrow = /* @__PURE__ */ React35.forwardRef(
1688
- // blank line to reduce diff noise
1689
- /* @__PURE__ */ __name24(function DropdownMenuArrow2(props, forwardedRef) {
1690
- const { __scopeDropdownMenu, ...arrowProps } = props;
1691
- const menuScope = useMenuScope(__scopeDropdownMenu);
1692
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(MenuArrow, { ...menuScope, ...arrowProps, ref: forwardedRef });
1693
- }, "DropdownMenuArrow")
1694
- );
1695
- var DropdownMenuSub = /* @__PURE__ */ __name24((props) => {
1696
- const { __scopeDropdownMenu, children, open: openProp, onOpenChange, defaultOpen } = props;
1697
- const menuScope = useMenuScope(__scopeDropdownMenu);
1698
- const [open, setOpen] = useControllableState({
1699
- prop: openProp,
1700
- defaultProp: defaultOpen ?? false,
1701
- onChange: onOpenChange,
1702
- caller: "DropdownMenuSub"
1703
- });
1704
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(MenuSub, { ...menuScope, open, onOpenChange: setOpen, children });
1705
- }, "DropdownMenuSub");
1706
- var DropdownMenuSubTrigger = /* @__PURE__ */ React35.forwardRef(/* @__PURE__ */ __name24(function DropdownMenuSubTrigger2(props, forwardedRef) {
1707
- const { __scopeDropdownMenu, ...subTriggerProps } = props;
1708
- const menuScope = useMenuScope(__scopeDropdownMenu);
1709
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(MenuSubTrigger, { ...menuScope, ...subTriggerProps, ref: forwardedRef });
1710
- }, "DropdownMenuSubTrigger"));
1711
- var DropdownMenuSubContent = /* @__PURE__ */ React35.forwardRef(/* @__PURE__ */ __name24(function DropdownMenuSubContent2(props, forwardedRef) {
1712
- const { __scopeDropdownMenu, ...subContentProps } = props;
1713
- const menuScope = useMenuScope(__scopeDropdownMenu);
1714
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1715
- MenuSubContent,
1716
- {
1717
- ...menuScope,
1718
- ...subContentProps,
1719
- ref: forwardedRef,
1720
- style: {
1721
- ...props.style,
1722
- // re-namespace exposed content custom properties
1723
- ...{
1724
- "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
1725
- "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
1726
- "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
1727
- "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
1728
- "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
1729
- }
1730
- }
1731
- }
1732
- );
1733
- }, "DropdownMenuSubContent"));