orbital-command 0.1.4 → 0.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.
- package/bin/orbital.js +676 -53
- package/dist/assets/PrimitivesConfig-CrmQXYh4.js +32 -0
- package/dist/assets/QualityGates-BbasOsF3.js +21 -0
- package/dist/assets/SessionTimeline-CGeJsVvy.js +1 -0
- package/dist/assets/Settings-oiM496mc.js +12 -0
- package/dist/assets/SourceControl-B1fP2nJL.js +41 -0
- package/dist/assets/WorkflowVisualizer-CWLYf-f0.js +74 -0
- package/dist/assets/arrow-down-CPy85_J6.js +6 -0
- package/dist/assets/charts-DbDg0Psc.js +68 -0
- package/dist/assets/circle-x-Cwz6ZQDV.js +6 -0
- package/dist/assets/file-text-C46Xr65c.js +6 -0
- package/dist/assets/formatDistanceToNow-BMqsSP44.js +1 -0
- package/dist/assets/globe-Cn2yNZUD.js +6 -0
- package/dist/assets/index-Aj4sV8Al.css +1 -0
- package/dist/assets/index-Bc9dK3MW.js +354 -0
- package/dist/assets/key-OPaNTWJ5.js +6 -0
- package/dist/assets/minus-GMsbpKym.js +6 -0
- package/dist/assets/shield-DwAFkDYI.js +6 -0
- package/dist/assets/ui-BmsSg9jU.js +53 -0
- package/dist/assets/useWorkflowEditor-BJkTX_NR.js +16 -0
- package/dist/assets/{vendor-Dzv9lrRc.js → vendor-Bqt8AJn2.js} +1 -1
- package/dist/assets/zap-DfbUoOty.js +11 -0
- package/dist/favicon.svg +1 -0
- package/dist/index.html +6 -5
- package/dist/server/server/__tests__/data-routes.test.js +124 -0
- package/dist/server/server/__tests__/helpers/db.js +17 -0
- package/dist/server/server/__tests__/helpers/mock-emitter.js +8 -0
- package/dist/server/server/__tests__/scope-routes.test.js +137 -0
- package/dist/server/server/__tests__/sprint-routes.test.js +102 -0
- package/dist/server/server/__tests__/workflow-routes.test.js +107 -0
- package/dist/server/server/config-migrator.js +138 -0
- package/dist/server/server/config.js +17 -2
- package/dist/server/server/database.js +27 -12
- package/dist/server/server/global-config.js +143 -0
- package/dist/server/server/index.js +882 -252
- package/dist/server/server/init.js +579 -194
- package/dist/server/server/launch.js +29 -0
- package/dist/server/server/manifest-types.js +8 -0
- package/dist/server/server/manifest.js +454 -0
- package/dist/server/server/migrate-legacy.js +229 -0
- package/dist/server/server/parsers/event-parser.test.js +117 -0
- package/dist/server/server/parsers/scope-parser.js +74 -28
- package/dist/server/server/parsers/scope-parser.test.js +230 -0
- package/dist/server/server/project-context.js +255 -0
- package/dist/server/server/project-emitter.js +41 -0
- package/dist/server/server/project-manager.js +297 -0
- package/dist/server/server/routes/config-routes.js +1 -3
- package/dist/server/server/routes/data-routes.js +22 -110
- package/dist/server/server/routes/dispatch-routes.js +15 -9
- package/dist/server/server/routes/git-routes.js +74 -0
- package/dist/server/server/routes/manifest-routes.js +319 -0
- package/dist/server/server/routes/scope-routes.js +37 -23
- package/dist/server/server/routes/sync-routes.js +134 -0
- package/dist/server/server/routes/version-routes.js +1 -15
- package/dist/server/server/routes/workflow-routes.js +9 -3
- package/dist/server/server/schema.js +2 -0
- package/dist/server/server/services/batch-orchestrator.js +26 -16
- package/dist/server/server/services/claude-session-service.js +17 -14
- package/dist/server/server/services/deploy-service.test.js +119 -0
- package/dist/server/server/services/event-service.js +64 -1
- package/dist/server/server/services/event-service.test.js +191 -0
- package/dist/server/server/services/gate-service.test.js +105 -0
- package/dist/server/server/services/git-service.js +108 -4
- package/dist/server/server/services/github-service.js +110 -2
- package/dist/server/server/services/readiness-service.test.js +190 -0
- package/dist/server/server/services/scope-cache.js +5 -1
- package/dist/server/server/services/scope-cache.test.js +142 -0
- package/dist/server/server/services/scope-service.js +217 -126
- package/dist/server/server/services/scope-service.test.js +137 -0
- package/dist/server/server/services/sprint-orchestrator.js +7 -6
- package/dist/server/server/services/sprint-service.js +21 -1
- package/dist/server/server/services/sprint-service.test.js +238 -0
- package/dist/server/server/services/sync-service.js +434 -0
- package/dist/server/server/services/sync-types.js +2 -0
- package/dist/server/server/services/telemetry-service.js +143 -0
- package/dist/server/server/services/workflow-service.js +26 -5
- package/dist/server/server/services/workflow-service.test.js +159 -0
- package/dist/server/server/settings-sync.js +284 -0
- package/dist/server/server/update-planner.js +279 -0
- package/dist/server/server/utils/cc-hooks-parser.js +3 -0
- package/dist/server/server/utils/cc-hooks-parser.test.js +86 -0
- package/dist/server/server/utils/dispatch-utils.js +77 -20
- package/dist/server/server/utils/dispatch-utils.test.js +182 -0
- package/dist/server/server/utils/logger.js +37 -3
- package/dist/server/server/utils/package-info.js +30 -0
- package/dist/server/server/utils/route-helpers.js +10 -0
- package/dist/server/server/utils/terminal-launcher.js +79 -25
- package/dist/server/server/utils/worktree-manager.js +13 -4
- package/dist/server/server/validator.js +230 -0
- package/dist/server/server/watchers/global-watcher.js +63 -0
- package/dist/server/server/watchers/scope-watcher.js +27 -12
- package/dist/server/server/wizard/config-editor.js +237 -0
- package/dist/server/server/wizard/detect.js +96 -0
- package/dist/server/server/wizard/doctor.js +115 -0
- package/dist/server/server/wizard/index.js +155 -0
- package/dist/server/server/wizard/phases/confirm.js +39 -0
- package/dist/server/server/wizard/phases/project-setup.js +90 -0
- package/dist/server/server/wizard/phases/setup-wizard.js +66 -0
- package/dist/server/server/wizard/phases/welcome.js +35 -0
- package/dist/server/server/wizard/phases/workflow-setup.js +22 -0
- package/dist/server/server/wizard/types.js +29 -0
- package/dist/server/server/wizard/ui.js +74 -0
- package/dist/server/shared/__fixtures__/workflow-configs.js +75 -0
- package/dist/server/shared/default-workflow.json +65 -0
- package/dist/server/shared/onboarding-tour.test.js +81 -0
- package/dist/server/shared/project-colors.js +24 -0
- package/dist/server/shared/workflow-config.test.js +84 -0
- package/dist/server/shared/workflow-engine.test.js +302 -0
- package/dist/server/shared/workflow-normalizer.js +101 -0
- package/dist/server/shared/workflow-normalizer.test.js +100 -0
- package/dist/server/src/components/onboarding/tour-steps.js +84 -0
- package/package.json +20 -15
- package/schemas/orbital.config.schema.json +16 -1
- package/scripts/postinstall.js +55 -7
- package/server/__tests__/data-routes.test.ts +149 -0
- package/server/__tests__/helpers/db.ts +19 -0
- package/server/__tests__/helpers/mock-emitter.ts +10 -0
- package/server/__tests__/scope-routes.test.ts +157 -0
- package/server/__tests__/sprint-routes.test.ts +118 -0
- package/server/__tests__/workflow-routes.test.ts +120 -0
- package/server/config-migrator.ts +163 -0
- package/server/config.ts +26 -2
- package/server/database.ts +35 -18
- package/server/global-config.ts +200 -0
- package/server/index.ts +975 -287
- package/server/init.ts +625 -182
- package/server/launch.ts +32 -0
- package/server/manifest-types.ts +145 -0
- package/server/manifest.ts +494 -0
- package/server/migrate-legacy.ts +290 -0
- package/server/parsers/event-parser.test.ts +135 -0
- package/server/parsers/scope-parser.test.ts +270 -0
- package/server/parsers/scope-parser.ts +79 -31
- package/server/project-context.ts +309 -0
- package/server/project-emitter.ts +50 -0
- package/server/project-manager.ts +369 -0
- package/server/routes/config-routes.ts +3 -5
- package/server/routes/data-routes.ts +28 -141
- package/server/routes/dispatch-routes.ts +19 -11
- package/server/routes/git-routes.ts +77 -0
- package/server/routes/manifest-routes.ts +388 -0
- package/server/routes/scope-routes.ts +29 -25
- package/server/routes/sync-routes.ts +175 -0
- package/server/routes/version-routes.ts +1 -16
- package/server/routes/workflow-routes.ts +9 -3
- package/server/schema.ts +2 -0
- package/server/services/batch-orchestrator.ts +24 -16
- package/server/services/claude-session-service.ts +16 -14
- package/server/services/deploy-service.test.ts +145 -0
- package/server/services/deploy-service.ts +2 -2
- package/server/services/event-service.test.ts +242 -0
- package/server/services/event-service.ts +92 -3
- package/server/services/gate-service.test.ts +131 -0
- package/server/services/gate-service.ts +2 -2
- package/server/services/git-service.ts +137 -4
- package/server/services/github-service.ts +120 -2
- package/server/services/readiness-service.test.ts +217 -0
- package/server/services/scope-cache.test.ts +167 -0
- package/server/services/scope-cache.ts +4 -1
- package/server/services/scope-service.test.ts +169 -0
- package/server/services/scope-service.ts +220 -126
- package/server/services/sprint-orchestrator.ts +7 -7
- package/server/services/sprint-service.test.ts +271 -0
- package/server/services/sprint-service.ts +27 -3
- package/server/services/sync-service.ts +482 -0
- package/server/services/sync-types.ts +77 -0
- package/server/services/telemetry-service.ts +195 -0
- package/server/services/workflow-service.test.ts +190 -0
- package/server/services/workflow-service.ts +29 -9
- package/server/settings-sync.ts +359 -0
- package/server/update-planner.ts +346 -0
- package/server/utils/cc-hooks-parser.test.ts +96 -0
- package/server/utils/cc-hooks-parser.ts +4 -0
- package/server/utils/dispatch-utils.test.ts +245 -0
- package/server/utils/dispatch-utils.ts +97 -27
- package/server/utils/logger.ts +40 -3
- package/server/utils/package-info.ts +32 -0
- package/server/utils/route-helpers.ts +12 -0
- package/server/utils/terminal-launcher.ts +85 -25
- package/server/utils/worktree-manager.ts +9 -4
- package/server/validator.ts +270 -0
- package/server/watchers/global-watcher.ts +77 -0
- package/server/watchers/scope-watcher.ts +21 -9
- package/server/wizard/config-editor.ts +248 -0
- package/server/wizard/detect.ts +104 -0
- package/server/wizard/doctor.ts +114 -0
- package/server/wizard/index.ts +187 -0
- package/server/wizard/phases/confirm.ts +45 -0
- package/server/wizard/phases/project-setup.ts +106 -0
- package/server/wizard/phases/setup-wizard.ts +78 -0
- package/server/wizard/phases/welcome.ts +43 -0
- package/server/wizard/phases/workflow-setup.ts +28 -0
- package/server/wizard/types.ts +56 -0
- package/server/wizard/ui.ts +93 -0
- package/shared/__fixtures__/workflow-configs.ts +80 -0
- package/shared/default-workflow.json +65 -0
- package/shared/onboarding-tour.test.ts +94 -0
- package/shared/project-colors.ts +24 -0
- package/shared/workflow-config.test.ts +111 -0
- package/shared/workflow-config.ts +7 -0
- package/shared/workflow-engine.test.ts +388 -0
- package/shared/workflow-normalizer.test.ts +119 -0
- package/shared/workflow-normalizer.ts +118 -0
- package/templates/hooks/end-session.sh +3 -1
- package/templates/hooks/orbital-emit.sh +2 -2
- package/templates/hooks/orbital-report-deploy.sh +4 -4
- package/templates/hooks/orbital-report-gates.sh +4 -4
- package/templates/hooks/orbital-scope-update.sh +1 -1
- package/templates/hooks/scope-create-cleanup.sh +2 -2
- package/templates/hooks/scope-create-gate.sh +0 -1
- package/templates/hooks/scope-helpers.sh +18 -0
- package/templates/hooks/scope-prepare.sh +66 -11
- package/templates/migrations/renames.json +1 -0
- package/templates/orbital.config.json +7 -2
- package/templates/settings-hooks.json +1 -1
- package/templates/skills/git-commit/SKILL.md +9 -4
- package/templates/skills/git-dev/SKILL.md +8 -3
- package/templates/skills/git-main/SKILL.md +8 -2
- package/templates/skills/git-production/SKILL.md +6 -2
- package/templates/skills/git-staging/SKILL.md +8 -3
- package/templates/skills/scope-create/SKILL.md +17 -3
- package/templates/skills/scope-fix-review/SKILL.md +6 -3
- package/templates/skills/scope-implement/SKILL.md +4 -1
- package/templates/skills/scope-post-review/SKILL.md +63 -5
- package/templates/skills/scope-pre-review/SKILL.md +5 -2
- package/templates/skills/scope-verify/SKILL.md +5 -3
- package/templates/skills/test-code-review/SKILL.md +41 -33
- package/templates/skills/test-scaffold/SKILL.md +222 -0
- package/dist/assets/WorkflowVisualizer-BZ21PIIF.js +0 -84
- package/dist/assets/charts-D__PA1zp.js +0 -72
- package/dist/assets/index-D1G6i0nS.css +0 -1
- package/dist/assets/index-DpItvKpf.js +0 -419
- package/dist/assets/ui-BvF022GT.js +0 -53
- package/index.html +0 -15
- package/postcss.config.js +0 -6
- package/src/App.tsx +0 -33
- package/src/components/AgentBadge.tsx +0 -40
- package/src/components/BatchPreflightModal.tsx +0 -115
- package/src/components/CardDisplayToggle.tsx +0 -74
- package/src/components/ColumnHeaderActions.tsx +0 -55
- package/src/components/ColumnMenu.tsx +0 -99
- package/src/components/DeployHistory.tsx +0 -141
- package/src/components/DispatchModal.tsx +0 -164
- package/src/components/DispatchPopover.tsx +0 -139
- package/src/components/DragOverlay.tsx +0 -25
- package/src/components/DriftSidebar.tsx +0 -140
- package/src/components/EnvironmentStrip.tsx +0 -88
- package/src/components/ErrorBoundary.tsx +0 -62
- package/src/components/FilterChip.tsx +0 -105
- package/src/components/GateIndicator.tsx +0 -33
- package/src/components/IdeaDetailModal.tsx +0 -190
- package/src/components/IdeaFormDialog.tsx +0 -113
- package/src/components/KanbanColumn.tsx +0 -201
- package/src/components/MarkdownRenderer.tsx +0 -114
- package/src/components/NeonGrid.tsx +0 -128
- package/src/components/PromotionQueue.tsx +0 -89
- package/src/components/ScopeCard.tsx +0 -234
- package/src/components/ScopeDetailModal.tsx +0 -255
- package/src/components/ScopeFilterBar.tsx +0 -152
- package/src/components/SearchInput.tsx +0 -102
- package/src/components/SessionPanel.tsx +0 -335
- package/src/components/SprintContainer.tsx +0 -303
- package/src/components/SprintDependencyDialog.tsx +0 -78
- package/src/components/SprintPreflightModal.tsx +0 -138
- package/src/components/StatusBar.tsx +0 -168
- package/src/components/SwimCell.tsx +0 -67
- package/src/components/SwimLaneRow.tsx +0 -94
- package/src/components/SwimlaneBoardView.tsx +0 -108
- package/src/components/VersionBadge.tsx +0 -139
- package/src/components/ViewModeSelector.tsx +0 -114
- package/src/components/config/AgentChip.tsx +0 -53
- package/src/components/config/AgentCreateDialog.tsx +0 -321
- package/src/components/config/AgentEditor.tsx +0 -175
- package/src/components/config/DirectoryTree.tsx +0 -582
- package/src/components/config/FileEditor.tsx +0 -550
- package/src/components/config/HookChip.tsx +0 -50
- package/src/components/config/StageCard.tsx +0 -198
- package/src/components/config/TransitionZone.tsx +0 -173
- package/src/components/config/UnifiedWorkflowPipeline.tsx +0 -216
- package/src/components/config/WorkflowPipeline.tsx +0 -161
- package/src/components/source-control/BranchList.tsx +0 -93
- package/src/components/source-control/BranchPanel.tsx +0 -105
- package/src/components/source-control/CommitLog.tsx +0 -100
- package/src/components/source-control/CommitRow.tsx +0 -47
- package/src/components/source-control/GitHubPanel.tsx +0 -110
- package/src/components/source-control/GitHubSetupGuide.tsx +0 -52
- package/src/components/source-control/GitOverviewBar.tsx +0 -101
- package/src/components/source-control/PullRequestList.tsx +0 -69
- package/src/components/source-control/WorktreeList.tsx +0 -80
- package/src/components/ui/badge.tsx +0 -41
- package/src/components/ui/button.tsx +0 -55
- package/src/components/ui/card.tsx +0 -78
- package/src/components/ui/dialog.tsx +0 -94
- package/src/components/ui/popover.tsx +0 -33
- package/src/components/ui/scroll-area.tsx +0 -54
- package/src/components/ui/separator.tsx +0 -28
- package/src/components/ui/tabs.tsx +0 -52
- package/src/components/ui/toggle-switch.tsx +0 -35
- package/src/components/ui/tooltip.tsx +0 -27
- package/src/components/workflow/AddEdgeDialog.tsx +0 -217
- package/src/components/workflow/AddListDialog.tsx +0 -201
- package/src/components/workflow/ChecklistEditor.tsx +0 -239
- package/src/components/workflow/CommandPrefixManager.tsx +0 -118
- package/src/components/workflow/ConfigSettingsPanel.tsx +0 -189
- package/src/components/workflow/DirectionSelector.tsx +0 -133
- package/src/components/workflow/DispatchConfigPanel.tsx +0 -180
- package/src/components/workflow/EdgeDetailPanel.tsx +0 -236
- package/src/components/workflow/EdgePropertyEditor.tsx +0 -251
- package/src/components/workflow/EditToolbar.tsx +0 -138
- package/src/components/workflow/HookDetailPanel.tsx +0 -250
- package/src/components/workflow/HookExecutionLog.tsx +0 -24
- package/src/components/workflow/HookSourceModal.tsx +0 -129
- package/src/components/workflow/HooksDashboard.tsx +0 -363
- package/src/components/workflow/ListPropertyEditor.tsx +0 -251
- package/src/components/workflow/MigrationPreviewDialog.tsx +0 -237
- package/src/components/workflow/MovementRulesPanel.tsx +0 -188
- package/src/components/workflow/NodeDetailPanel.tsx +0 -245
- package/src/components/workflow/PresetSelector.tsx +0 -414
- package/src/components/workflow/SkillCommandBuilder.tsx +0 -174
- package/src/components/workflow/WorkflowEdgeComponent.tsx +0 -145
- package/src/components/workflow/WorkflowNode.tsx +0 -147
- package/src/components/workflow/graphLayout.ts +0 -186
- package/src/components/workflow/mergeHooks.ts +0 -85
- package/src/components/workflow/useEditHistory.ts +0 -88
- package/src/components/workflow/useWorkflowEditor.ts +0 -262
- package/src/components/workflow/validateConfig.ts +0 -70
- package/src/hooks/useActiveDispatches.ts +0 -198
- package/src/hooks/useBoardSettings.ts +0 -170
- package/src/hooks/useCardDisplay.ts +0 -57
- package/src/hooks/useCcHooks.ts +0 -24
- package/src/hooks/useConfigTree.ts +0 -51
- package/src/hooks/useEnforcementRules.ts +0 -46
- package/src/hooks/useEvents.ts +0 -59
- package/src/hooks/useFileEditor.ts +0 -165
- package/src/hooks/useGates.ts +0 -57
- package/src/hooks/useIdeaActions.ts +0 -53
- package/src/hooks/useKanbanDnd.ts +0 -410
- package/src/hooks/useOrbitalConfig.ts +0 -54
- package/src/hooks/usePipeline.ts +0 -47
- package/src/hooks/usePipelineData.ts +0 -338
- package/src/hooks/useReconnect.ts +0 -25
- package/src/hooks/useScopeFilters.ts +0 -125
- package/src/hooks/useScopeSessions.ts +0 -44
- package/src/hooks/useScopes.ts +0 -67
- package/src/hooks/useSearch.ts +0 -67
- package/src/hooks/useSettings.tsx +0 -187
- package/src/hooks/useSocket.ts +0 -25
- package/src/hooks/useSourceControl.ts +0 -105
- package/src/hooks/useSprintPreflight.ts +0 -55
- package/src/hooks/useSprints.ts +0 -154
- package/src/hooks/useStatusBarHighlight.ts +0 -18
- package/src/hooks/useSwimlaneBoardSettings.ts +0 -104
- package/src/hooks/useTheme.ts +0 -9
- package/src/hooks/useTransitionReadiness.ts +0 -53
- package/src/hooks/useVersion.ts +0 -155
- package/src/hooks/useViolations.ts +0 -65
- package/src/hooks/useWorkflow.tsx +0 -125
- package/src/hooks/useZoomModifier.ts +0 -19
- package/src/index.css +0 -797
- package/src/layouts/DashboardLayout.tsx +0 -113
- package/src/lib/collisionDetection.ts +0 -20
- package/src/lib/scope-fields.ts +0 -61
- package/src/lib/swimlane.ts +0 -146
- package/src/lib/utils.ts +0 -15
- package/src/main.tsx +0 -19
- package/src/socket.ts +0 -11
- package/src/types/index.ts +0 -497
- package/src/views/AgentFeed.tsx +0 -339
- package/src/views/DeployPipeline.tsx +0 -59
- package/src/views/EnforcementView.tsx +0 -378
- package/src/views/PrimitivesConfig.tsx +0 -500
- package/src/views/QualityGates.tsx +0 -1012
- package/src/views/ScopeBoard.tsx +0 -454
- package/src/views/SessionTimeline.tsx +0 -516
- package/src/views/Settings.tsx +0 -183
- package/src/views/SourceControl.tsx +0 -95
- package/src/views/WorkflowVisualizer.tsx +0 -382
- package/tailwind.config.js +0 -161
- package/tsconfig.json +0 -25
- package/vite.config.ts +0 -49
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import{r as yo,a,b as Tn,R as On,c as wo,d as ae}from"./vendor-Dzv9lrRc.js";var at={exports:{}},Re={};/**
|
|
2
|
-
* @license React
|
|
3
|
-
* react-jsx-runtime.production.min.js
|
|
4
|
-
*
|
|
5
|
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
6
|
-
*
|
|
7
|
-
* This source code is licensed under the MIT license found in the
|
|
8
|
-
* LICENSE file in the root directory of this source tree.
|
|
9
|
-
*/var Qt;function bo(){if(Qt)return Re;Qt=1;var e=yo(),t=Symbol.for("react.element"),n=Symbol.for("react.fragment"),r=Object.prototype.hasOwnProperty,o=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,i={key:!0,ref:!0,__self:!0,__source:!0};function s(c,l,f){var u,d={},p=null,h=null;f!==void 0&&(p=""+f),l.key!==void 0&&(p=""+l.key),l.ref!==void 0&&(h=l.ref);for(u in l)r.call(l,u)&&!i.hasOwnProperty(u)&&(d[u]=l[u]);if(c&&c.defaultProps)for(u in l=c.defaultProps,l)d[u]===void 0&&(d[u]=l[u]);return{$$typeof:t,type:c,key:p,ref:h,props:d,_owner:o.current}}return Re.Fragment=n,Re.jsx=s,Re.jsxs=s,Re}var en;function xo(){return en||(en=1,at.exports=bo()),at.exports}var w=xo();function _(e,t,{checkForDefaultPrevented:n=!0}={}){return function(o){if(e==null||e(o),n===!1||!o.defaultPrevented)return t==null?void 0:t(o)}}function tn(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function Ge(...e){return t=>{let n=!1;const r=e.map(o=>{const i=tn(o,t);return!n&&typeof i=="function"&&(n=!0),i});if(n)return()=>{for(let o=0;o<r.length;o++){const i=r[o];typeof i=="function"?i():tn(e[o],null)}}}}function j(...e){return a.useCallback(Ge(...e),e)}function So(e,t){const n=a.createContext(t),r=i=>{const{children:s,...c}=i,l=a.useMemo(()=>c,Object.values(c));return w.jsx(n.Provider,{value:l,children:s})};r.displayName=e+"Provider";function o(i){const s=a.useContext(n);if(s)return s;if(t!==void 0)return t;throw new Error(`\`${i}\` must be used within \`${e}\``)}return[r,o]}function de(e,t=[]){let n=[];function r(i,s){const c=a.createContext(s),l=n.length;n=[...n,s];const f=d=>{var y;const{scope:p,children:h,...g}=d,m=((y=p==null?void 0:p[e])==null?void 0:y[l])||c,v=a.useMemo(()=>g,Object.values(g));return w.jsx(m.Provider,{value:v,children:h})};f.displayName=i+"Provider";function u(d,p){var m;const h=((m=p==null?void 0:p[e])==null?void 0:m[l])||c,g=a.useContext(h);if(g)return g;if(s!==void 0)return s;throw new Error(`\`${d}\` must be used within \`${i}\``)}return[f,u]}const o=()=>{const i=n.map(s=>a.createContext(s));return function(c){const l=(c==null?void 0:c[e])||i;return a.useMemo(()=>({[`__scope${e}`]:{...c,[e]:l}}),[c,l])}};return o.scopeName=e,[r,Co(o,...t)]}function Co(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(i){const s=r.reduce((c,{useScope:l,scopeName:f})=>{const d=l(i)[`__scope${f}`];return{...c,...d}},{});return a.useMemo(()=>({[`__scope${t.scopeName}`]:s}),[s])}};return n.scopeName=t.scopeName,n}function Eo(e){const t=Ro(e),n=a.forwardRef((r,o)=>{const{children:i,...s}=r,c=a.Children.toArray(i),l=c.find(Ao);if(l){const f=l.props.children,u=c.map(d=>d===l?a.Children.count(f)>1?a.Children.only(null):a.isValidElement(f)?f.props.children:null:d);return w.jsx(t,{...s,ref:o,children:a.isValidElement(f)?a.cloneElement(f,void 0,u):null})}return w.jsx(t,{...s,ref:o,children:i})});return n.displayName=`${e}.Slot`,n}function Ro(e){const t=a.forwardRef((n,r)=>{const{children:o,...i}=n;if(a.isValidElement(o)){const s=Oo(o),c=To(i,o.props);return o.type!==a.Fragment&&(c.ref=r?Ge(r,s):s),a.cloneElement(o,c)}return a.Children.count(o)>1?a.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var Po=Symbol("radix.slottable");function Ao(e){return a.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===Po}function To(e,t){const n={...t};for(const r in t){const o=e[r],i=t[r];/^on[A-Z]/.test(r)?o&&i?n[r]=(...c)=>{const l=i(...c);return o(...c),l}:o&&(n[r]=o):r==="style"?n[r]={...o,...i}:r==="className"&&(n[r]=[o,i].filter(Boolean).join(" "))}return{...e,...n}}function Oo(e){var r,o;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(o=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:o.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var Do=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],I=Do.reduce((e,t)=>{const n=Eo(`Primitive.${t}`),r=a.forwardRef((o,i)=>{const{asChild:s,...c}=o,l=s?n:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),w.jsx(l,{...c,ref:i})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function _o(e,t){e&&Tn.flushSync(()=>e.dispatchEvent(t))}function B(e){const t=a.useRef(e);return a.useEffect(()=>{t.current=e}),a.useMemo(()=>(...n)=>{var r;return(r=t.current)==null?void 0:r.call(t,...n)},[])}function No(e,t=globalThis==null?void 0:globalThis.document){const n=B(e);a.useEffect(()=>{const r=o=>{o.key==="Escape"&&n(o)};return t.addEventListener("keydown",r,{capture:!0}),()=>t.removeEventListener("keydown",r,{capture:!0})},[n,t])}var Io="DismissableLayer",bt="dismissableLayer.update",Lo="dismissableLayer.pointerDownOutside",Mo="dismissableLayer.focusOutside",nn,Dn=a.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),Tt=a.forwardRef((e,t)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:o,onFocusOutside:i,onInteractOutside:s,onDismiss:c,...l}=e,f=a.useContext(Dn),[u,d]=a.useState(null),p=(u==null?void 0:u.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,h]=a.useState({}),g=j(t,E=>d(E)),m=Array.from(f.layers),[v]=[...f.layersWithOutsidePointerEventsDisabled].slice(-1),y=m.indexOf(v),x=u?m.indexOf(u):-1,S=f.layersWithOutsidePointerEventsDisabled.size>0,b=x>=y,C=ko(E=>{const P=E.target,A=[...f.branches].some(T=>T.contains(P));!b||A||(o==null||o(E),s==null||s(E),E.defaultPrevented||c==null||c())},p),R=Wo(E=>{const P=E.target;[...f.branches].some(T=>T.contains(P))||(i==null||i(E),s==null||s(E),E.defaultPrevented||c==null||c())},p);return No(E=>{x===f.layers.size-1&&(r==null||r(E),!E.defaultPrevented&&c&&(E.preventDefault(),c()))},p),a.useEffect(()=>{if(u)return n&&(f.layersWithOutsidePointerEventsDisabled.size===0&&(nn=p.body.style.pointerEvents,p.body.style.pointerEvents="none"),f.layersWithOutsidePointerEventsDisabled.add(u)),f.layers.add(u),rn(),()=>{n&&f.layersWithOutsidePointerEventsDisabled.size===1&&(p.body.style.pointerEvents=nn)}},[u,p,n,f]),a.useEffect(()=>()=>{u&&(f.layers.delete(u),f.layersWithOutsidePointerEventsDisabled.delete(u),rn())},[u,f]),a.useEffect(()=>{const E=()=>h({});return document.addEventListener(bt,E),()=>document.removeEventListener(bt,E)},[]),w.jsx(I.div,{...l,ref:g,style:{pointerEvents:S?b?"auto":"none":void 0,...e.style},onFocusCapture:_(e.onFocusCapture,R.onFocusCapture),onBlurCapture:_(e.onBlurCapture,R.onBlurCapture),onPointerDownCapture:_(e.onPointerDownCapture,C.onPointerDownCapture)})});Tt.displayName=Io;var Fo="DismissableLayerBranch",jo=a.forwardRef((e,t)=>{const n=a.useContext(Dn),r=a.useRef(null),o=j(t,r);return a.useEffect(()=>{const i=r.current;if(i)return n.branches.add(i),()=>{n.branches.delete(i)}},[n.branches]),w.jsx(I.div,{...e,ref:o})});jo.displayName=Fo;function ko(e,t=globalThis==null?void 0:globalThis.document){const n=B(e),r=a.useRef(!1),o=a.useRef(()=>{});return a.useEffect(()=>{const i=c=>{if(c.target&&!r.current){let l=function(){_n(Lo,n,f,{discrete:!0})};const f={originalEvent:c};c.pointerType==="touch"?(t.removeEventListener("click",o.current),o.current=l,t.addEventListener("click",o.current,{once:!0})):l()}else t.removeEventListener("click",o.current);r.current=!1},s=window.setTimeout(()=>{t.addEventListener("pointerdown",i)},0);return()=>{window.clearTimeout(s),t.removeEventListener("pointerdown",i),t.removeEventListener("click",o.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function Wo(e,t=globalThis==null?void 0:globalThis.document){const n=B(e),r=a.useRef(!1);return a.useEffect(()=>{const o=i=>{i.target&&!r.current&&_n(Mo,n,{originalEvent:i},{discrete:!1})};return t.addEventListener("focusin",o),()=>t.removeEventListener("focusin",o)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function rn(){const e=new CustomEvent(bt);document.dispatchEvent(e)}function _n(e,t,n,{discrete:r}){const o=n.originalEvent.target,i=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&o.addEventListener(e,t,{once:!0}),r?_o(o,i):o.dispatchEvent(i)}var te=globalThis!=null&&globalThis.document?a.useLayoutEffect:()=>{},$o=On[" useId ".trim().toString()]||(()=>{}),Bo=0;function ve(e){const[t,n]=a.useState($o());return te(()=>{n(r=>r??String(Bo++))},[e]),t?`radix-${t}`:""}const Ho=["top","right","bottom","left"],se=Math.min,H=Math.max,Be=Math.round,Ne=Math.floor,Z=e=>({x:e,y:e}),Vo={left:"right",right:"left",bottom:"top",top:"bottom"};function xt(e,t,n){return H(e,se(t,n))}function ne(e,t){return typeof e=="function"?e(t):e}function re(e){return e.split("-")[0]}function Se(e){return e.split("-")[1]}function Ot(e){return e==="x"?"y":"x"}function Dt(e){return e==="y"?"height":"width"}function q(e){const t=e[0];return t==="t"||t==="b"?"y":"x"}function _t(e){return Ot(q(e))}function Uo(e,t,n){n===void 0&&(n=!1);const r=Se(e),o=_t(e),i=Dt(o);let s=o==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return t.reference[i]>t.floating[i]&&(s=He(s)),[s,He(s)]}function zo(e){const t=He(e);return[St(e),t,St(t)]}function St(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}const on=["left","right"],sn=["right","left"],Yo=["top","bottom"],Xo=["bottom","top"];function Go(e,t,n){switch(e){case"top":case"bottom":return n?t?sn:on:t?on:sn;case"left":case"right":return t?Yo:Xo;default:return[]}}function Ko(e,t,n,r){const o=Se(e);let i=Go(re(e),n==="start",r);return o&&(i=i.map(s=>s+"-"+o),t&&(i=i.concat(i.map(St)))),i}function He(e){const t=re(e);return Vo[t]+e.slice(t.length)}function qo(e){return{top:0,right:0,bottom:0,left:0,...e}}function Nn(e){return typeof e!="number"?qo(e):{top:e,right:e,bottom:e,left:e}}function Ve(e){const{x:t,y:n,width:r,height:o}=e;return{width:r,height:o,top:n,left:t,right:t+r,bottom:n+o,x:t,y:n}}function cn(e,t,n){let{reference:r,floating:o}=e;const i=q(t),s=_t(t),c=Dt(s),l=re(t),f=i==="y",u=r.x+r.width/2-o.width/2,d=r.y+r.height/2-o.height/2,p=r[c]/2-o[c]/2;let h;switch(l){case"top":h={x:u,y:r.y-o.height};break;case"bottom":h={x:u,y:r.y+r.height};break;case"right":h={x:r.x+r.width,y:d};break;case"left":h={x:r.x-o.width,y:d};break;default:h={x:r.x,y:r.y}}switch(Se(t)){case"start":h[s]-=p*(n&&f?-1:1);break;case"end":h[s]+=p*(n&&f?-1:1);break}return h}async function Zo(e,t){var n;t===void 0&&(t={});const{x:r,y:o,platform:i,rects:s,elements:c,strategy:l}=e,{boundary:f="clippingAncestors",rootBoundary:u="viewport",elementContext:d="floating",altBoundary:p=!1,padding:h=0}=ne(t,e),g=Nn(h),v=c[p?d==="floating"?"reference":"floating":d],y=Ve(await i.getClippingRect({element:(n=await(i.isElement==null?void 0:i.isElement(v)))==null||n?v:v.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(c.floating)),boundary:f,rootBoundary:u,strategy:l})),x=d==="floating"?{x:r,y:o,width:s.floating.width,height:s.floating.height}:s.reference,S=await(i.getOffsetParent==null?void 0:i.getOffsetParent(c.floating)),b=await(i.isElement==null?void 0:i.isElement(S))?await(i.getScale==null?void 0:i.getScale(S))||{x:1,y:1}:{x:1,y:1},C=Ve(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:c,rect:x,offsetParent:S,strategy:l}):x);return{top:(y.top-C.top+g.top)/b.y,bottom:(C.bottom-y.bottom+g.bottom)/b.y,left:(y.left-C.left+g.left)/b.x,right:(C.right-y.right+g.right)/b.x}}const Jo=50,Qo=async(e,t,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:i=[],platform:s}=n,c=s.detectOverflow?s:{...s,detectOverflow:Zo},l=await(s.isRTL==null?void 0:s.isRTL(t));let f=await s.getElementRects({reference:e,floating:t,strategy:o}),{x:u,y:d}=cn(f,r,l),p=r,h=0;const g={};for(let m=0;m<i.length;m++){const v=i[m];if(!v)continue;const{name:y,fn:x}=v,{x:S,y:b,data:C,reset:R}=await x({x:u,y:d,initialPlacement:r,placement:p,strategy:o,middlewareData:g,rects:f,platform:c,elements:{reference:e,floating:t}});u=S??u,d=b??d,g[y]={...g[y],...C},R&&h<Jo&&(h++,typeof R=="object"&&(R.placement&&(p=R.placement),R.rects&&(f=R.rects===!0?await s.getElementRects({reference:e,floating:t,strategy:o}):R.rects),{x:u,y:d}=cn(f,p,l)),m=-1)}return{x:u,y:d,placement:p,strategy:o,middlewareData:g}},ei=e=>({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:o,rects:i,platform:s,elements:c,middlewareData:l}=t,{element:f,padding:u=0}=ne(e,t)||{};if(f==null)return{};const d=Nn(u),p={x:n,y:r},h=_t(o),g=Dt(h),m=await s.getDimensions(f),v=h==="y",y=v?"top":"left",x=v?"bottom":"right",S=v?"clientHeight":"clientWidth",b=i.reference[g]+i.reference[h]-p[h]-i.floating[g],C=p[h]-i.reference[h],R=await(s.getOffsetParent==null?void 0:s.getOffsetParent(f));let E=R?R[S]:0;(!E||!await(s.isElement==null?void 0:s.isElement(R)))&&(E=c.floating[S]||i.floating[g]);const P=b/2-C/2,A=E/2-m[g]/2-1,T=se(d[y],A),D=se(d[x],A),M=T,F=E-m[g]-D,L=E/2-m[g]/2+P,$=xt(M,L,F),N=!l.arrow&&Se(o)!=null&&L!==$&&i.reference[g]/2-(L<M?T:D)-m[g]/2<0,k=N?L<M?L-M:L-F:0;return{[h]:p[h]+k,data:{[h]:$,centerOffset:L-$-k,...N&&{alignmentOffset:k}},reset:N}}}),ti=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var n,r;const{placement:o,middlewareData:i,rects:s,initialPlacement:c,platform:l,elements:f}=t,{mainAxis:u=!0,crossAxis:d=!0,fallbackPlacements:p,fallbackStrategy:h="bestFit",fallbackAxisSideDirection:g="none",flipAlignment:m=!0,...v}=ne(e,t);if((n=i.arrow)!=null&&n.alignmentOffset)return{};const y=re(o),x=q(c),S=re(c)===c,b=await(l.isRTL==null?void 0:l.isRTL(f.floating)),C=p||(S||!m?[He(c)]:zo(c)),R=g!=="none";!p&&R&&C.push(...Ko(c,m,g,b));const E=[c,...C],P=await l.detectOverflow(t,v),A=[];let T=((r=i.flip)==null?void 0:r.overflows)||[];if(u&&A.push(P[y]),d){const L=Uo(o,s,b);A.push(P[L[0]],P[L[1]])}if(T=[...T,{placement:o,overflows:A}],!A.every(L=>L<=0)){var D,M;const L=(((D=i.flip)==null?void 0:D.index)||0)+1,$=E[L];if($&&(!(d==="alignment"?x!==q($):!1)||T.every(O=>q(O.placement)===x?O.overflows[0]>0:!0)))return{data:{index:L,overflows:T},reset:{placement:$}};let N=(M=T.filter(k=>k.overflows[0]<=0).sort((k,O)=>k.overflows[1]-O.overflows[1])[0])==null?void 0:M.placement;if(!N)switch(h){case"bestFit":{var F;const k=(F=T.filter(O=>{if(R){const W=q(O.placement);return W===x||W==="y"}return!0}).map(O=>[O.placement,O.overflows.filter(W=>W>0).reduce((W,G)=>W+G,0)]).sort((O,W)=>O[1]-W[1])[0])==null?void 0:F[0];k&&(N=k);break}case"initialPlacement":N=c;break}if(o!==N)return{reset:{placement:N}}}return{}}}};function an(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function ln(e){return Ho.some(t=>e[t]>=0)}const ni=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n,platform:r}=t,{strategy:o="referenceHidden",...i}=ne(e,t);switch(o){case"referenceHidden":{const s=await r.detectOverflow(t,{...i,elementContext:"reference"}),c=an(s,n.reference);return{data:{referenceHiddenOffsets:c,referenceHidden:ln(c)}}}case"escaped":{const s=await r.detectOverflow(t,{...i,altBoundary:!0}),c=an(s,n.floating);return{data:{escapedOffsets:c,escaped:ln(c)}}}default:return{}}}}},In=new Set(["left","top"]);async function ri(e,t){const{placement:n,platform:r,elements:o}=e,i=await(r.isRTL==null?void 0:r.isRTL(o.floating)),s=re(n),c=Se(n),l=q(n)==="y",f=In.has(s)?-1:1,u=i&&l?-1:1,d=ne(t,e);let{mainAxis:p,crossAxis:h,alignmentAxis:g}=typeof d=="number"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return c&&typeof g=="number"&&(h=c==="end"?g*-1:g),l?{x:h*u,y:p*f}:{x:p*f,y:h*u}}const oi=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,r;const{x:o,y:i,placement:s,middlewareData:c}=t,l=await ri(t,e);return s===((n=c.offset)==null?void 0:n.placement)&&(r=c.arrow)!=null&&r.alignmentOffset?{}:{x:o+l.x,y:i+l.y,data:{...l,placement:s}}}}},ii=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:o,platform:i}=t,{mainAxis:s=!0,crossAxis:c=!1,limiter:l={fn:y=>{let{x,y:S}=y;return{x,y:S}}},...f}=ne(e,t),u={x:n,y:r},d=await i.detectOverflow(t,f),p=q(re(o)),h=Ot(p);let g=u[h],m=u[p];if(s){const y=h==="y"?"top":"left",x=h==="y"?"bottom":"right",S=g+d[y],b=g-d[x];g=xt(S,g,b)}if(c){const y=p==="y"?"top":"left",x=p==="y"?"bottom":"right",S=m+d[y],b=m-d[x];m=xt(S,m,b)}const v=l.fn({...t,[h]:g,[p]:m});return{...v,data:{x:v.x-n,y:v.y-r,enabled:{[h]:s,[p]:c}}}}}},si=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:n,y:r,placement:o,rects:i,middlewareData:s}=t,{offset:c=0,mainAxis:l=!0,crossAxis:f=!0}=ne(e,t),u={x:n,y:r},d=q(o),p=Ot(d);let h=u[p],g=u[d];const m=ne(c,t),v=typeof m=="number"?{mainAxis:m,crossAxis:0}:{mainAxis:0,crossAxis:0,...m};if(l){const S=p==="y"?"height":"width",b=i.reference[p]-i.floating[S]+v.mainAxis,C=i.reference[p]+i.reference[S]-v.mainAxis;h<b?h=b:h>C&&(h=C)}if(f){var y,x;const S=p==="y"?"width":"height",b=In.has(re(o)),C=i.reference[d]-i.floating[S]+(b&&((y=s.offset)==null?void 0:y[d])||0)+(b?0:v.crossAxis),R=i.reference[d]+i.reference[S]+(b?0:((x=s.offset)==null?void 0:x[d])||0)-(b?v.crossAxis:0);g<C?g=C:g>R&&(g=R)}return{[p]:h,[d]:g}}}},ci=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){var n,r;const{placement:o,rects:i,platform:s,elements:c}=t,{apply:l=()=>{},...f}=ne(e,t),u=await s.detectOverflow(t,f),d=re(o),p=Se(o),h=q(o)==="y",{width:g,height:m}=i.floating;let v,y;d==="top"||d==="bottom"?(v=d,y=p===(await(s.isRTL==null?void 0:s.isRTL(c.floating))?"start":"end")?"left":"right"):(y=d,v=p==="end"?"top":"bottom");const x=m-u.top-u.bottom,S=g-u.left-u.right,b=se(m-u[v],x),C=se(g-u[y],S),R=!t.middlewareData.shift;let E=b,P=C;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(P=S),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(E=x),R&&!p){const T=H(u.left,0),D=H(u.right,0),M=H(u.top,0),F=H(u.bottom,0);h?P=g-2*(T!==0||D!==0?T+D:H(u.left,u.right)):E=m-2*(M!==0||F!==0?M+F:H(u.top,u.bottom))}await l({...t,availableWidth:P,availableHeight:E});const A=await s.getDimensions(c.floating);return g!==A.width||m!==A.height?{reset:{rects:!0}}:{}}}};function Ke(){return typeof window<"u"}function Ce(e){return Ln(e)?(e.nodeName||"").toLowerCase():"#document"}function V(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function J(e){var t;return(t=(Ln(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function Ln(e){return Ke()?e instanceof Node||e instanceof V(e).Node:!1}function z(e){return Ke()?e instanceof Element||e instanceof V(e).Element:!1}function oe(e){return Ke()?e instanceof HTMLElement||e instanceof V(e).HTMLElement:!1}function un(e){return!Ke()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof V(e).ShadowRoot}function Te(e){const{overflow:t,overflowX:n,overflowY:r,display:o}=Y(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&o!=="inline"&&o!=="contents"}function ai(e){return/^(table|td|th)$/.test(Ce(e))}function qe(e){try{if(e.matches(":popover-open"))return!0}catch{}try{return e.matches(":modal")}catch{return!1}}const li=/transform|translate|scale|rotate|perspective|filter/,ui=/paint|layout|strict|content/,le=e=>!!e&&e!=="none";let lt;function Nt(e){const t=z(e)?Y(e):e;return le(t.transform)||le(t.translate)||le(t.scale)||le(t.rotate)||le(t.perspective)||!It()&&(le(t.backdropFilter)||le(t.filter))||li.test(t.willChange||"")||ui.test(t.contain||"")}function fi(e){let t=ce(e);for(;oe(t)&&!we(t);){if(Nt(t))return t;if(qe(t))return null;t=ce(t)}return null}function It(){return lt==null&&(lt=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),lt}function we(e){return/^(html|body|#document)$/.test(Ce(e))}function Y(e){return V(e).getComputedStyle(e)}function Ze(e){return z(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function ce(e){if(Ce(e)==="html")return e;const t=e.assignedSlot||e.parentNode||un(e)&&e.host||J(e);return un(t)?t.host:t}function Mn(e){const t=ce(e);return we(t)?e.ownerDocument?e.ownerDocument.body:e.body:oe(t)&&Te(t)?t:Mn(t)}function Pe(e,t,n){var r;t===void 0&&(t=[]),n===void 0&&(n=!0);const o=Mn(e),i=o===((r=e.ownerDocument)==null?void 0:r.body),s=V(o);if(i){const c=Ct(s);return t.concat(s,s.visualViewport||[],Te(o)?o:[],c&&n?Pe(c):[])}else return t.concat(o,Pe(o,[],n))}function Ct(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function Fn(e){const t=Y(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const o=oe(e),i=o?e.offsetWidth:n,s=o?e.offsetHeight:r,c=Be(n)!==i||Be(r)!==s;return c&&(n=i,r=s),{width:n,height:r,$:c}}function Lt(e){return z(e)?e:e.contextElement}function ge(e){const t=Lt(e);if(!oe(t))return Z(1);const n=t.getBoundingClientRect(),{width:r,height:o,$:i}=Fn(t);let s=(i?Be(n.width):n.width)/r,c=(i?Be(n.height):n.height)/o;return(!s||!Number.isFinite(s))&&(s=1),(!c||!Number.isFinite(c))&&(c=1),{x:s,y:c}}const di=Z(0);function jn(e){const t=V(e);return!It()||!t.visualViewport?di:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function pi(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==V(e)?!1:t}function ue(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);const o=e.getBoundingClientRect(),i=Lt(e);let s=Z(1);t&&(r?z(r)&&(s=ge(r)):s=ge(e));const c=pi(i,n,r)?jn(i):Z(0);let l=(o.left+c.x)/s.x,f=(o.top+c.y)/s.y,u=o.width/s.x,d=o.height/s.y;if(i){const p=V(i),h=r&&z(r)?V(r):r;let g=p,m=Ct(g);for(;m&&r&&h!==g;){const v=ge(m),y=m.getBoundingClientRect(),x=Y(m),S=y.left+(m.clientLeft+parseFloat(x.paddingLeft))*v.x,b=y.top+(m.clientTop+parseFloat(x.paddingTop))*v.y;l*=v.x,f*=v.y,u*=v.x,d*=v.y,l+=S,f+=b,g=V(m),m=Ct(g)}}return Ve({width:u,height:d,x:l,y:f})}function Je(e,t){const n=Ze(e).scrollLeft;return t?t.left+n:ue(J(e)).left+n}function kn(e,t){const n=e.getBoundingClientRect(),r=n.left+t.scrollLeft-Je(e,n),o=n.top+t.scrollTop;return{x:r,y:o}}function hi(e){let{elements:t,rect:n,offsetParent:r,strategy:o}=e;const i=o==="fixed",s=J(r),c=t?qe(t.floating):!1;if(r===s||c&&i)return n;let l={scrollLeft:0,scrollTop:0},f=Z(1);const u=Z(0),d=oe(r);if((d||!d&&!i)&&((Ce(r)!=="body"||Te(s))&&(l=Ze(r)),d)){const h=ue(r);f=ge(r),u.x=h.x+r.clientLeft,u.y=h.y+r.clientTop}const p=s&&!d&&!i?kn(s,l):Z(0);return{width:n.width*f.x,height:n.height*f.y,x:n.x*f.x-l.scrollLeft*f.x+u.x+p.x,y:n.y*f.y-l.scrollTop*f.y+u.y+p.y}}function mi(e){return Array.from(e.getClientRects())}function vi(e){const t=J(e),n=Ze(e),r=e.ownerDocument.body,o=H(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),i=H(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let s=-n.scrollLeft+Je(e);const c=-n.scrollTop;return Y(r).direction==="rtl"&&(s+=H(t.clientWidth,r.clientWidth)-o),{width:o,height:i,x:s,y:c}}const fn=25;function gi(e,t){const n=V(e),r=J(e),o=n.visualViewport;let i=r.clientWidth,s=r.clientHeight,c=0,l=0;if(o){i=o.width,s=o.height;const u=It();(!u||u&&t==="fixed")&&(c=o.offsetLeft,l=o.offsetTop)}const f=Je(r);if(f<=0){const u=r.ownerDocument,d=u.body,p=getComputedStyle(d),h=u.compatMode==="CSS1Compat"&&parseFloat(p.marginLeft)+parseFloat(p.marginRight)||0,g=Math.abs(r.clientWidth-d.clientWidth-h);g<=fn&&(i-=g)}else f<=fn&&(i+=f);return{width:i,height:s,x:c,y:l}}function yi(e,t){const n=ue(e,!0,t==="fixed"),r=n.top+e.clientTop,o=n.left+e.clientLeft,i=oe(e)?ge(e):Z(1),s=e.clientWidth*i.x,c=e.clientHeight*i.y,l=o*i.x,f=r*i.y;return{width:s,height:c,x:l,y:f}}function dn(e,t,n){let r;if(t==="viewport")r=gi(e,n);else if(t==="document")r=vi(J(e));else if(z(t))r=yi(t,n);else{const o=jn(e);r={x:t.x-o.x,y:t.y-o.y,width:t.width,height:t.height}}return Ve(r)}function Wn(e,t){const n=ce(e);return n===t||!z(n)||we(n)?!1:Y(n).position==="fixed"||Wn(n,t)}function wi(e,t){const n=t.get(e);if(n)return n;let r=Pe(e,[],!1).filter(c=>z(c)&&Ce(c)!=="body"),o=null;const i=Y(e).position==="fixed";let s=i?ce(e):e;for(;z(s)&&!we(s);){const c=Y(s),l=Nt(s);!l&&c.position==="fixed"&&(o=null),(i?!l&&!o:!l&&c.position==="static"&&!!o&&(o.position==="absolute"||o.position==="fixed")||Te(s)&&!l&&Wn(e,s))?r=r.filter(u=>u!==s):o=c,s=ce(s)}return t.set(e,r),r}function bi(e){let{element:t,boundary:n,rootBoundary:r,strategy:o}=e;const s=[...n==="clippingAncestors"?qe(t)?[]:wi(t,this._c):[].concat(n),r],c=dn(t,s[0],o);let l=c.top,f=c.right,u=c.bottom,d=c.left;for(let p=1;p<s.length;p++){const h=dn(t,s[p],o);l=H(h.top,l),f=se(h.right,f),u=se(h.bottom,u),d=H(h.left,d)}return{width:f-d,height:u-l,x:d,y:l}}function xi(e){const{width:t,height:n}=Fn(e);return{width:t,height:n}}function Si(e,t,n){const r=oe(t),o=J(t),i=n==="fixed",s=ue(e,!0,i,t);let c={scrollLeft:0,scrollTop:0};const l=Z(0);function f(){l.x=Je(o)}if(r||!r&&!i)if((Ce(t)!=="body"||Te(o))&&(c=Ze(t)),r){const h=ue(t,!0,i,t);l.x=h.x+t.clientLeft,l.y=h.y+t.clientTop}else o&&f();i&&!r&&o&&f();const u=o&&!r&&!i?kn(o,c):Z(0),d=s.left+c.scrollLeft-l.x-u.x,p=s.top+c.scrollTop-l.y-u.y;return{x:d,y:p,width:s.width,height:s.height}}function ut(e){return Y(e).position==="static"}function pn(e,t){if(!oe(e)||Y(e).position==="fixed")return null;if(t)return t(e);let n=e.offsetParent;return J(e)===n&&(n=n.ownerDocument.body),n}function $n(e,t){const n=V(e);if(qe(e))return n;if(!oe(e)){let o=ce(e);for(;o&&!we(o);){if(z(o)&&!ut(o))return o;o=ce(o)}return n}let r=pn(e,t);for(;r&&ai(r)&&ut(r);)r=pn(r,t);return r&&we(r)&&ut(r)&&!Nt(r)?n:r||fi(e)||n}const Ci=async function(e){const t=this.getOffsetParent||$n,n=this.getDimensions,r=await n(e.floating);return{reference:Si(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:r.width,height:r.height}}};function Ei(e){return Y(e).direction==="rtl"}const Ri={convertOffsetParentRelativeRectToViewportRelativeRect:hi,getDocumentElement:J,getClippingRect:bi,getOffsetParent:$n,getElementRects:Ci,getClientRects:mi,getDimensions:xi,getScale:ge,isElement:z,isRTL:Ei};function Bn(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function Pi(e,t){let n=null,r;const o=J(e);function i(){var c;clearTimeout(r),(c=n)==null||c.disconnect(),n=null}function s(c,l){c===void 0&&(c=!1),l===void 0&&(l=1),i();const f=e.getBoundingClientRect(),{left:u,top:d,width:p,height:h}=f;if(c||t(),!p||!h)return;const g=Ne(d),m=Ne(o.clientWidth-(u+p)),v=Ne(o.clientHeight-(d+h)),y=Ne(u),S={rootMargin:-g+"px "+-m+"px "+-v+"px "+-y+"px",threshold:H(0,se(1,l))||1};let b=!0;function C(R){const E=R[0].intersectionRatio;if(E!==l){if(!b)return s();E?s(!1,E):r=setTimeout(()=>{s(!1,1e-7)},1e3)}E===1&&!Bn(f,e.getBoundingClientRect())&&s(),b=!1}try{n=new IntersectionObserver(C,{...S,root:o.ownerDocument})}catch{n=new IntersectionObserver(C,S)}n.observe(e)}return s(!0),i}function Ai(e,t,n,r){r===void 0&&(r={});const{ancestorScroll:o=!0,ancestorResize:i=!0,elementResize:s=typeof ResizeObserver=="function",layoutShift:c=typeof IntersectionObserver=="function",animationFrame:l=!1}=r,f=Lt(e),u=o||i?[...f?Pe(f):[],...t?Pe(t):[]]:[];u.forEach(y=>{o&&y.addEventListener("scroll",n,{passive:!0}),i&&y.addEventListener("resize",n)});const d=f&&c?Pi(f,n):null;let p=-1,h=null;s&&(h=new ResizeObserver(y=>{let[x]=y;x&&x.target===f&&h&&t&&(h.unobserve(t),cancelAnimationFrame(p),p=requestAnimationFrame(()=>{var S;(S=h)==null||S.observe(t)})),n()}),f&&!l&&h.observe(f),t&&h.observe(t));let g,m=l?ue(e):null;l&&v();function v(){const y=ue(e);m&&!Bn(m,y)&&n(),m=y,g=requestAnimationFrame(v)}return n(),()=>{var y;u.forEach(x=>{o&&x.removeEventListener("scroll",n),i&&x.removeEventListener("resize",n)}),d==null||d(),(y=h)==null||y.disconnect(),h=null,l&&cancelAnimationFrame(g)}}const Ti=oi,Oi=ii,Di=ti,_i=ci,Ni=ni,hn=ei,Ii=si,Li=(e,t,n)=>{const r=new Map,o={platform:Ri,...n},i={...o.platform,_c:r};return Qo(e,t,{...o,platform:i})};var Mi=typeof document<"u",Fi=function(){},ke=Mi?a.useLayoutEffect:Fi;function Ue(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,r,o;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!Ue(e[r],t[r]))return!1;return!0}if(o=Object.keys(e),n=o.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(t,o[r]))return!1;for(r=n;r--!==0;){const i=o[r];if(!(i==="_owner"&&e.$$typeof)&&!Ue(e[i],t[i]))return!1}return!0}return e!==e&&t!==t}function Hn(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function mn(e,t){const n=Hn(e);return Math.round(t*n)/n}function ft(e){const t=a.useRef(e);return ke(()=>{t.current=e}),t}function ji(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:o,elements:{reference:i,floating:s}={},transform:c=!0,whileElementsMounted:l,open:f}=e,[u,d]=a.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[p,h]=a.useState(r);Ue(p,r)||h(r);const[g,m]=a.useState(null),[v,y]=a.useState(null),x=a.useCallback(O=>{O!==R.current&&(R.current=O,m(O))},[]),S=a.useCallback(O=>{O!==E.current&&(E.current=O,y(O))},[]),b=i||g,C=s||v,R=a.useRef(null),E=a.useRef(null),P=a.useRef(u),A=l!=null,T=ft(l),D=ft(o),M=ft(f),F=a.useCallback(()=>{if(!R.current||!E.current)return;const O={placement:t,strategy:n,middleware:p};D.current&&(O.platform=D.current),Li(R.current,E.current,O).then(W=>{const G={...W,isPositioned:M.current!==!1};L.current&&!Ue(P.current,G)&&(P.current=G,Tn.flushSync(()=>{d(G)}))})},[p,t,n,D,M]);ke(()=>{f===!1&&P.current.isPositioned&&(P.current.isPositioned=!1,d(O=>({...O,isPositioned:!1})))},[f]);const L=a.useRef(!1);ke(()=>(L.current=!0,()=>{L.current=!1}),[]),ke(()=>{if(b&&(R.current=b),C&&(E.current=C),b&&C){if(T.current)return T.current(b,C,F);F()}},[b,C,F,T,A]);const $=a.useMemo(()=>({reference:R,floating:E,setReference:x,setFloating:S}),[x,S]),N=a.useMemo(()=>({reference:b,floating:C}),[b,C]),k=a.useMemo(()=>{const O={position:n,left:0,top:0};if(!N.floating)return O;const W=mn(N.floating,u.x),G=mn(N.floating,u.y);return c?{...O,transform:"translate("+W+"px, "+G+"px)",...Hn(N.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:W,top:G}},[n,c,N.floating,u.x,u.y]);return a.useMemo(()=>({...u,update:F,refs:$,elements:N,floatingStyles:k}),[u,F,$,N,k])}const ki=e=>{function t(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:e,fn(n){const{element:r,padding:o}=typeof e=="function"?e(n):e;return r&&t(r)?r.current!=null?hn({element:r.current,padding:o}).fn(n):{}:r?hn({element:r,padding:o}).fn(n):{}}}},Wi=(e,t)=>{const n=Ti(e);return{name:n.name,fn:n.fn,options:[e,t]}},$i=(e,t)=>{const n=Oi(e);return{name:n.name,fn:n.fn,options:[e,t]}},Bi=(e,t)=>({fn:Ii(e).fn,options:[e,t]}),Hi=(e,t)=>{const n=Di(e);return{name:n.name,fn:n.fn,options:[e,t]}},Vi=(e,t)=>{const n=_i(e);return{name:n.name,fn:n.fn,options:[e,t]}},Ui=(e,t)=>{const n=Ni(e);return{name:n.name,fn:n.fn,options:[e,t]}},zi=(e,t)=>{const n=ki(e);return{name:n.name,fn:n.fn,options:[e,t]}};var Yi="Arrow",Vn=a.forwardRef((e,t)=>{const{children:n,width:r=10,height:o=5,...i}=e;return w.jsx(I.svg,{...i,ref:t,width:r,height:o,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?n:w.jsx("polygon",{points:"0,0 30,0 15,10"})})});Vn.displayName=Yi;var Xi=Vn;function Gi(e){const[t,n]=a.useState(void 0);return te(()=>{if(e){n({width:e.offsetWidth,height:e.offsetHeight});const r=new ResizeObserver(o=>{if(!Array.isArray(o)||!o.length)return;const i=o[0];let s,c;if("borderBoxSize"in i){const l=i.borderBoxSize,f=Array.isArray(l)?l[0]:l;s=f.inlineSize,c=f.blockSize}else s=e.offsetWidth,c=e.offsetHeight;n({width:s,height:c})});return r.observe(e,{box:"border-box"}),()=>r.unobserve(e)}else n(void 0)},[e]),t}var Mt="Popper",[Un,zn]=de(Mt),[Ki,Yn]=Un(Mt),Xn=e=>{const{__scopePopper:t,children:n}=e,[r,o]=a.useState(null);return w.jsx(Ki,{scope:t,anchor:r,onAnchorChange:o,children:n})};Xn.displayName=Mt;var Gn="PopperAnchor",Kn=a.forwardRef((e,t)=>{const{__scopePopper:n,virtualRef:r,...o}=e,i=Yn(Gn,n),s=a.useRef(null),c=j(t,s),l=a.useRef(null);return a.useEffect(()=>{const f=l.current;l.current=(r==null?void 0:r.current)||s.current,f!==l.current&&i.onAnchorChange(l.current)}),r?null:w.jsx(I.div,{...o,ref:c})});Kn.displayName=Gn;var Ft="PopperContent",[qi,Zi]=Un(Ft),qn=a.forwardRef((e,t)=>{var Yt,Xt,Gt,Kt,qt,Zt;const{__scopePopper:n,side:r="bottom",sideOffset:o=0,align:i="center",alignOffset:s=0,arrowPadding:c=0,avoidCollisions:l=!0,collisionBoundary:f=[],collisionPadding:u=0,sticky:d="partial",hideWhenDetached:p=!1,updatePositionStrategy:h="optimized",onPlaced:g,...m}=e,v=Yn(Ft,n),[y,x]=a.useState(null),S=j(t,Ee=>x(Ee)),[b,C]=a.useState(null),R=Gi(b),E=(R==null?void 0:R.width)??0,P=(R==null?void 0:R.height)??0,A=r+(i!=="center"?"-"+i:""),T=typeof u=="number"?u:{top:0,right:0,bottom:0,left:0,...u},D=Array.isArray(f)?f:[f],M=D.length>0,F={padding:T,boundary:D.filter(Qi),altBoundary:M},{refs:L,floatingStyles:$,placement:N,isPositioned:k,middlewareData:O}=ji({strategy:"fixed",placement:A,whileElementsMounted:(...Ee)=>Ai(...Ee,{animationFrame:h==="always"}),elements:{reference:v.anchor},middleware:[Wi({mainAxis:o+P,alignmentAxis:s}),l&&$i({mainAxis:!0,crossAxis:!1,limiter:d==="partial"?Bi():void 0,...F}),l&&Hi({...F}),Vi({...F,apply:({elements:Ee,rects:Jt,availableWidth:ho,availableHeight:mo})=>{const{width:vo,height:go}=Jt.reference,_e=Ee.floating.style;_e.setProperty("--radix-popper-available-width",`${ho}px`),_e.setProperty("--radix-popper-available-height",`${mo}px`),_e.setProperty("--radix-popper-anchor-width",`${vo}px`),_e.setProperty("--radix-popper-anchor-height",`${go}px`)}}),b&&zi({element:b,padding:c}),es({arrowWidth:E,arrowHeight:P}),p&&Ui({strategy:"referenceHidden",...F})]}),[W,G]=Qn(N),De=B(g);te(()=>{k&&(De==null||De())},[k,De]);const ao=(Yt=O.arrow)==null?void 0:Yt.x,lo=(Xt=O.arrow)==null?void 0:Xt.y,uo=((Gt=O.arrow)==null?void 0:Gt.centerOffset)!==0,[fo,po]=a.useState();return te(()=>{y&&po(window.getComputedStyle(y).zIndex)},[y]),w.jsx("div",{ref:L.setFloating,"data-radix-popper-content-wrapper":"",style:{...$,transform:k?$.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:fo,"--radix-popper-transform-origin":[(Kt=O.transformOrigin)==null?void 0:Kt.x,(qt=O.transformOrigin)==null?void 0:qt.y].join(" "),...((Zt=O.hide)==null?void 0:Zt.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:w.jsx(qi,{scope:n,placedSide:W,onArrowChange:C,arrowX:ao,arrowY:lo,shouldHideArrow:uo,children:w.jsx(I.div,{"data-side":W,"data-align":G,...m,ref:S,style:{...m.style,animation:k?void 0:"none"}})})})});qn.displayName=Ft;var Zn="PopperArrow",Ji={top:"bottom",right:"left",bottom:"top",left:"right"},Jn=a.forwardRef(function(t,n){const{__scopePopper:r,...o}=t,i=Zi(Zn,r),s=Ji[i.placedSide];return w.jsx("span",{ref:i.onArrowChange,style:{position:"absolute",left:i.arrowX,top:i.arrowY,[s]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[i.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[i.placedSide],visibility:i.shouldHideArrow?"hidden":void 0},children:w.jsx(Xi,{...o,ref:n,style:{...o.style,display:"block"}})})});Jn.displayName=Zn;function Qi(e){return e!==null}var es=e=>({name:"transformOrigin",options:e,fn(t){var v,y,x;const{placement:n,rects:r,middlewareData:o}=t,s=((v=o.arrow)==null?void 0:v.centerOffset)!==0,c=s?0:e.arrowWidth,l=s?0:e.arrowHeight,[f,u]=Qn(n),d={start:"0%",center:"50%",end:"100%"}[u],p=(((y=o.arrow)==null?void 0:y.x)??0)+c/2,h=(((x=o.arrow)==null?void 0:x.y)??0)+l/2;let g="",m="";return f==="bottom"?(g=s?d:`${p}px`,m=`${-l}px`):f==="top"?(g=s?d:`${p}px`,m=`${r.floating.height+l}px`):f==="right"?(g=`${-l}px`,m=s?d:`${h}px`):f==="left"&&(g=`${r.floating.width+l}px`,m=s?d:`${h}px`),{data:{x:g,y:m}}}});function Qn(e){const[t,n="center"]=e.split("-");return[t,n]}var ts=Xn,ns=Kn,rs=qn,os=Jn,is="Portal",er=a.forwardRef((e,t)=>{var c;const{container:n,...r}=e,[o,i]=a.useState(!1);te(()=>i(!0),[]);const s=n||o&&((c=globalThis==null?void 0:globalThis.document)==null?void 0:c.body);return s?wo.createPortal(w.jsx(I.div,{...r,ref:t}),s):null});er.displayName=is;function ss(e,t){return a.useReducer((n,r)=>t[n][r]??n,e)}var Q=e=>{const{present:t,children:n}=e,r=cs(t),o=typeof n=="function"?n({present:r.isPresent}):a.Children.only(n),i=j(r.ref,as(o));return typeof n=="function"||r.isPresent?a.cloneElement(o,{ref:i}):null};Q.displayName="Presence";function cs(e){const[t,n]=a.useState(),r=a.useRef(null),o=a.useRef(e),i=a.useRef("none"),s=e?"mounted":"unmounted",[c,l]=ss(s,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return a.useEffect(()=>{const f=Ie(r.current);i.current=c==="mounted"?f:"none"},[c]),te(()=>{const f=r.current,u=o.current;if(u!==e){const p=i.current,h=Ie(f);e?l("MOUNT"):h==="none"||(f==null?void 0:f.display)==="none"?l("UNMOUNT"):l(u&&p!==h?"ANIMATION_OUT":"UNMOUNT"),o.current=e}},[e,l]),te(()=>{if(t){let f;const u=t.ownerDocument.defaultView??window,d=h=>{const m=Ie(r.current).includes(CSS.escape(h.animationName));if(h.target===t&&m&&(l("ANIMATION_END"),!o.current)){const v=t.style.animationFillMode;t.style.animationFillMode="forwards",f=u.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=v)})}},p=h=>{h.target===t&&(i.current=Ie(r.current))};return t.addEventListener("animationstart",p),t.addEventListener("animationcancel",d),t.addEventListener("animationend",d),()=>{u.clearTimeout(f),t.removeEventListener("animationstart",p),t.removeEventListener("animationcancel",d),t.removeEventListener("animationend",d)}}else l("ANIMATION_END")},[t,l]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:a.useCallback(f=>{r.current=f?getComputedStyle(f):null,n(f)},[])}}function Ie(e){return(e==null?void 0:e.animationName)||"none"}function as(e){var r,o;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(o=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:o.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var ls=Symbol("radix.slottable");function us(e){const t=({children:n})=>w.jsx(w.Fragment,{children:n});return t.displayName=`${e}.Slottable`,t.__radixId=ls,t}var fs=On[" useInsertionEffect ".trim().toString()]||te;function Qe({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){const[o,i,s]=ds({defaultProp:t,onChange:n}),c=e!==void 0,l=c?e:o;{const u=a.useRef(e!==void 0);a.useEffect(()=>{const d=u.current;d!==c&&console.warn(`${r} is changing from ${d?"controlled":"uncontrolled"} to ${c?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),u.current=c},[c,r])}const f=a.useCallback(u=>{var d;if(c){const p=ps(u)?u(e):u;p!==e&&((d=s.current)==null||d.call(s,p))}else i(u)},[c,e,i,s]);return[l,f]}function ds({defaultProp:e,onChange:t}){const[n,r]=a.useState(e),o=a.useRef(n),i=a.useRef(t);return fs(()=>{i.current=t},[t]),a.useEffect(()=>{var s;o.current!==n&&((s=i.current)==null||s.call(i,n),o.current=n)},[n,o]),[n,r,i]}function ps(e){return typeof e=="function"}var hs=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),ms="VisuallyHidden",tr=a.forwardRef((e,t)=>w.jsx(I.span,{...e,ref:t,style:{...hs,...e.style}}));tr.displayName=ms;var vs=tr,[et]=de("Tooltip",[zn]),tt=zn(),nr="TooltipProvider",gs=700,Et="tooltip.open",[ys,jt]=et(nr),rr=e=>{const{__scopeTooltip:t,delayDuration:n=gs,skipDelayDuration:r=300,disableHoverableContent:o=!1,children:i}=e,s=a.useRef(!0),c=a.useRef(!1),l=a.useRef(0);return a.useEffect(()=>{const f=l.current;return()=>window.clearTimeout(f)},[]),w.jsx(ys,{scope:t,isOpenDelayedRef:s,delayDuration:n,onOpen:a.useCallback(()=>{window.clearTimeout(l.current),s.current=!1},[]),onClose:a.useCallback(()=>{window.clearTimeout(l.current),l.current=window.setTimeout(()=>s.current=!0,r)},[r]),isPointerInTransitRef:c,onPointerInTransitChange:a.useCallback(f=>{c.current=f},[]),disableHoverableContent:o,children:i})};rr.displayName=nr;var Ae="Tooltip",[ws,nt]=et(Ae),or=e=>{const{__scopeTooltip:t,children:n,open:r,defaultOpen:o,onOpenChange:i,disableHoverableContent:s,delayDuration:c}=e,l=jt(Ae,e.__scopeTooltip),f=tt(t),[u,d]=a.useState(null),p=ve(),h=a.useRef(0),g=s??l.disableHoverableContent,m=c??l.delayDuration,v=a.useRef(!1),[y,x]=Qe({prop:r,defaultProp:o??!1,onChange:E=>{E?(l.onOpen(),document.dispatchEvent(new CustomEvent(Et))):l.onClose(),i==null||i(E)},caller:Ae}),S=a.useMemo(()=>y?v.current?"delayed-open":"instant-open":"closed",[y]),b=a.useCallback(()=>{window.clearTimeout(h.current),h.current=0,v.current=!1,x(!0)},[x]),C=a.useCallback(()=>{window.clearTimeout(h.current),h.current=0,x(!1)},[x]),R=a.useCallback(()=>{window.clearTimeout(h.current),h.current=window.setTimeout(()=>{v.current=!0,x(!0),h.current=0},m)},[m,x]);return a.useEffect(()=>()=>{h.current&&(window.clearTimeout(h.current),h.current=0)},[]),w.jsx(ts,{...f,children:w.jsx(ws,{scope:t,contentId:p,open:y,stateAttribute:S,trigger:u,onTriggerChange:d,onTriggerEnter:a.useCallback(()=>{l.isOpenDelayedRef.current?R():b()},[l.isOpenDelayedRef,R,b]),onTriggerLeave:a.useCallback(()=>{g?C():(window.clearTimeout(h.current),h.current=0)},[C,g]),onOpen:b,onClose:C,disableHoverableContent:g,children:n})})};or.displayName=Ae;var Rt="TooltipTrigger",ir=a.forwardRef((e,t)=>{const{__scopeTooltip:n,...r}=e,o=nt(Rt,n),i=jt(Rt,n),s=tt(n),c=a.useRef(null),l=j(t,c,o.onTriggerChange),f=a.useRef(!1),u=a.useRef(!1),d=a.useCallback(()=>f.current=!1,[]);return a.useEffect(()=>()=>document.removeEventListener("pointerup",d),[d]),w.jsx(ns,{asChild:!0,...s,children:w.jsx(I.button,{"aria-describedby":o.open?o.contentId:void 0,"data-state":o.stateAttribute,...r,ref:l,onPointerMove:_(e.onPointerMove,p=>{p.pointerType!=="touch"&&!u.current&&!i.isPointerInTransitRef.current&&(o.onTriggerEnter(),u.current=!0)}),onPointerLeave:_(e.onPointerLeave,()=>{o.onTriggerLeave(),u.current=!1}),onPointerDown:_(e.onPointerDown,()=>{o.open&&o.onClose(),f.current=!0,document.addEventListener("pointerup",d,{once:!0})}),onFocus:_(e.onFocus,()=>{f.current||o.onOpen()}),onBlur:_(e.onBlur,o.onClose),onClick:_(e.onClick,o.onClose)})})});ir.displayName=Rt;var bs="TooltipPortal",[Ra,xs]=et(bs,{forceMount:void 0}),be="TooltipContent",sr=a.forwardRef((e,t)=>{const n=xs(be,e.__scopeTooltip),{forceMount:r=n.forceMount,side:o="top",...i}=e,s=nt(be,e.__scopeTooltip);return w.jsx(Q,{present:r||s.open,children:s.disableHoverableContent?w.jsx(cr,{side:o,...i,ref:t}):w.jsx(Ss,{side:o,...i,ref:t})})}),Ss=a.forwardRef((e,t)=>{const n=nt(be,e.__scopeTooltip),r=jt(be,e.__scopeTooltip),o=a.useRef(null),i=j(t,o),[s,c]=a.useState(null),{trigger:l,onClose:f}=n,u=o.current,{onPointerInTransitChange:d}=r,p=a.useCallback(()=>{c(null),d(!1)},[d]),h=a.useCallback((g,m)=>{const v=g.currentTarget,y={x:g.clientX,y:g.clientY},x=As(y,v.getBoundingClientRect()),S=Ts(y,x),b=Os(m.getBoundingClientRect()),C=_s([...S,...b]);c(C),d(!0)},[d]);return a.useEffect(()=>()=>p(),[p]),a.useEffect(()=>{if(l&&u){const g=v=>h(v,u),m=v=>h(v,l);return l.addEventListener("pointerleave",g),u.addEventListener("pointerleave",m),()=>{l.removeEventListener("pointerleave",g),u.removeEventListener("pointerleave",m)}}},[l,u,h,p]),a.useEffect(()=>{if(s){const g=m=>{const v=m.target,y={x:m.clientX,y:m.clientY},x=(l==null?void 0:l.contains(v))||(u==null?void 0:u.contains(v)),S=!Ds(y,s);x?p():S&&(p(),f())};return document.addEventListener("pointermove",g),()=>document.removeEventListener("pointermove",g)}},[l,u,s,f,p]),w.jsx(cr,{...e,ref:i})}),[Cs,Es]=et(Ae,{isInside:!1}),Rs=us("TooltipContent"),cr=a.forwardRef((e,t)=>{const{__scopeTooltip:n,children:r,"aria-label":o,onEscapeKeyDown:i,onPointerDownOutside:s,...c}=e,l=nt(be,n),f=tt(n),{onClose:u}=l;return a.useEffect(()=>(document.addEventListener(Et,u),()=>document.removeEventListener(Et,u)),[u]),a.useEffect(()=>{if(l.trigger){const d=p=>{const h=p.target;h!=null&&h.contains(l.trigger)&&u()};return window.addEventListener("scroll",d,{capture:!0}),()=>window.removeEventListener("scroll",d,{capture:!0})}},[l.trigger,u]),w.jsx(Tt,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:i,onPointerDownOutside:s,onFocusOutside:d=>d.preventDefault(),onDismiss:u,children:w.jsxs(rs,{"data-state":l.stateAttribute,...f,...c,ref:t,style:{...c.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[w.jsx(Rs,{children:r}),w.jsx(Cs,{scope:n,isInside:!0,children:w.jsx(vs,{id:l.contentId,role:"tooltip",children:o||r})})]})})});sr.displayName=be;var ar="TooltipArrow",Ps=a.forwardRef((e,t)=>{const{__scopeTooltip:n,...r}=e,o=tt(n);return Es(ar,n).isInside?null:w.jsx(os,{...o,...r,ref:t})});Ps.displayName=ar;function As(e,t){const n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),o=Math.abs(t.right-e.x),i=Math.abs(t.left-e.x);switch(Math.min(n,r,o,i)){case i:return"left";case o:return"right";case n:return"top";case r:return"bottom";default:throw new Error("unreachable")}}function Ts(e,t,n=5){const r=[];switch(t){case"top":r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case"bottom":r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case"left":r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case"right":r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n});break}return r}function Os(e){const{top:t,right:n,bottom:r,left:o}=e;return[{x:o,y:t},{x:n,y:t},{x:n,y:r},{x:o,y:r}]}function Ds(e,t){const{x:n,y:r}=e;let o=!1;for(let i=0,s=t.length-1;i<t.length;s=i++){const c=t[i],l=t[s],f=c.x,u=c.y,d=l.x,p=l.y;u>r!=p>r&&n<(d-f)*(r-u)/(p-u)+f&&(o=!o)}return o}function _s(e){const t=e.slice();return t.sort((n,r)=>n.x<r.x?-1:n.x>r.x?1:n.y<r.y?-1:n.y>r.y?1:0),Ns(t)}function Ns(e){if(e.length<=1)return e.slice();const t=[];for(let r=0;r<e.length;r++){const o=e[r];for(;t.length>=2;){const i=t[t.length-1],s=t[t.length-2];if((i.x-s.x)*(o.y-s.y)>=(i.y-s.y)*(o.x-s.x))t.pop();else break}t.push(o)}t.pop();const n=[];for(let r=e.length-1;r>=0;r--){const o=e[r];for(;n.length>=2;){const i=n[n.length-1],s=n[n.length-2];if((i.x-s.x)*(o.y-s.y)>=(i.y-s.y)*(o.x-s.x))n.pop();else break}n.push(o)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}var Pa=rr,Aa=or,Ta=ir,Oa=sr,Is=a.createContext(void 0);function kt(e){const t=a.useContext(Is);return e||t||"ltr"}function Ls(e,[t,n]){return Math.min(n,Math.max(t,e))}function Ms(e,t){return a.useReducer((n,r)=>t[n][r]??n,e)}var Wt="ScrollArea",[lr]=de(Wt),[Fs,U]=lr(Wt),ur=a.forwardRef((e,t)=>{const{__scopeScrollArea:n,type:r="hover",dir:o,scrollHideDelay:i=600,...s}=e,[c,l]=a.useState(null),[f,u]=a.useState(null),[d,p]=a.useState(null),[h,g]=a.useState(null),[m,v]=a.useState(null),[y,x]=a.useState(0),[S,b]=a.useState(0),[C,R]=a.useState(!1),[E,P]=a.useState(!1),A=j(t,D=>l(D)),T=kt(o);return w.jsx(Fs,{scope:n,type:r,dir:T,scrollHideDelay:i,scrollArea:c,viewport:f,onViewportChange:u,content:d,onContentChange:p,scrollbarX:h,onScrollbarXChange:g,scrollbarXEnabled:C,onScrollbarXEnabledChange:R,scrollbarY:m,onScrollbarYChange:v,scrollbarYEnabled:E,onScrollbarYEnabledChange:P,onCornerWidthChange:x,onCornerHeightChange:b,children:w.jsx(I.div,{dir:T,...s,ref:A,style:{position:"relative","--radix-scroll-area-corner-width":y+"px","--radix-scroll-area-corner-height":S+"px",...e.style}})})});ur.displayName=Wt;var fr="ScrollAreaViewport",dr=a.forwardRef((e,t)=>{const{__scopeScrollArea:n,children:r,nonce:o,...i}=e,s=U(fr,n),c=a.useRef(null),l=j(t,c,s.onViewportChange);return w.jsxs(w.Fragment,{children:[w.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}"},nonce:o}),w.jsx(I.div,{"data-radix-scroll-area-viewport":"",...i,ref:l,style:{overflowX:s.scrollbarXEnabled?"scroll":"hidden",overflowY:s.scrollbarYEnabled?"scroll":"hidden",...e.style},children:w.jsx("div",{ref:s.onContentChange,style:{minWidth:"100%",display:"table"},children:r})})]})});dr.displayName=fr;var ee="ScrollAreaScrollbar",js=a.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=U(ee,e.__scopeScrollArea),{onScrollbarXEnabledChange:i,onScrollbarYEnabledChange:s}=o,c=e.orientation==="horizontal";return a.useEffect(()=>(c?i(!0):s(!0),()=>{c?i(!1):s(!1)}),[c,i,s]),o.type==="hover"?w.jsx(ks,{...r,ref:t,forceMount:n}):o.type==="scroll"?w.jsx(Ws,{...r,ref:t,forceMount:n}):o.type==="auto"?w.jsx(pr,{...r,ref:t,forceMount:n}):o.type==="always"?w.jsx($t,{...r,ref:t}):null});js.displayName=ee;var ks=a.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=U(ee,e.__scopeScrollArea),[i,s]=a.useState(!1);return a.useEffect(()=>{const c=o.scrollArea;let l=0;if(c){const f=()=>{window.clearTimeout(l),s(!0)},u=()=>{l=window.setTimeout(()=>s(!1),o.scrollHideDelay)};return c.addEventListener("pointerenter",f),c.addEventListener("pointerleave",u),()=>{window.clearTimeout(l),c.removeEventListener("pointerenter",f),c.removeEventListener("pointerleave",u)}}},[o.scrollArea,o.scrollHideDelay]),w.jsx(Q,{present:n||i,children:w.jsx(pr,{"data-state":i?"visible":"hidden",...r,ref:t})})}),Ws=a.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=U(ee,e.__scopeScrollArea),i=e.orientation==="horizontal",s=ot(()=>l("SCROLL_END"),100),[c,l]=Ms("hidden",{hidden:{SCROLL:"scrolling"},scrolling:{SCROLL_END:"idle",POINTER_ENTER:"interacting"},interacting:{SCROLL:"interacting",POINTER_LEAVE:"idle"},idle:{HIDE:"hidden",SCROLL:"scrolling",POINTER_ENTER:"interacting"}});return a.useEffect(()=>{if(c==="idle"){const f=window.setTimeout(()=>l("HIDE"),o.scrollHideDelay);return()=>window.clearTimeout(f)}},[c,o.scrollHideDelay,l]),a.useEffect(()=>{const f=o.viewport,u=i?"scrollLeft":"scrollTop";if(f){let d=f[u];const p=()=>{const h=f[u];d!==h&&(l("SCROLL"),s()),d=h};return f.addEventListener("scroll",p),()=>f.removeEventListener("scroll",p)}},[o.viewport,i,l,s]),w.jsx(Q,{present:n||c!=="hidden",children:w.jsx($t,{"data-state":c==="hidden"?"hidden":"visible",...r,ref:t,onPointerEnter:_(e.onPointerEnter,()=>l("POINTER_ENTER")),onPointerLeave:_(e.onPointerLeave,()=>l("POINTER_LEAVE"))})})}),pr=a.forwardRef((e,t)=>{const n=U(ee,e.__scopeScrollArea),{forceMount:r,...o}=e,[i,s]=a.useState(!1),c=e.orientation==="horizontal",l=ot(()=>{if(n.viewport){const f=n.viewport.offsetWidth<n.viewport.scrollWidth,u=n.viewport.offsetHeight<n.viewport.scrollHeight;s(c?f:u)}},10);return xe(n.viewport,l),xe(n.content,l),w.jsx(Q,{present:r||i,children:w.jsx($t,{"data-state":i?"visible":"hidden",...o,ref:t})})}),$t=a.forwardRef((e,t)=>{const{orientation:n="vertical",...r}=e,o=U(ee,e.__scopeScrollArea),i=a.useRef(null),s=a.useRef(0),[c,l]=a.useState({content:0,viewport:0,scrollbar:{size:0,paddingStart:0,paddingEnd:0}}),f=gr(c.viewport,c.content),u={...r,sizes:c,onSizesChange:l,hasThumb:f>0&&f<1,onThumbChange:p=>i.current=p,onThumbPointerUp:()=>s.current=0,onThumbPointerDown:p=>s.current=p};function d(p,h){return Ys(p,s.current,c,h)}return n==="horizontal"?w.jsx($s,{...u,ref:t,onThumbPositionChange:()=>{if(o.viewport&&i.current){const p=o.viewport.scrollLeft,h=vn(p,c,o.dir);i.current.style.transform=`translate3d(${h}px, 0, 0)`}},onWheelScroll:p=>{o.viewport&&(o.viewport.scrollLeft=p)},onDragScroll:p=>{o.viewport&&(o.viewport.scrollLeft=d(p,o.dir))}}):n==="vertical"?w.jsx(Bs,{...u,ref:t,onThumbPositionChange:()=>{if(o.viewport&&i.current){const p=o.viewport.scrollTop,h=vn(p,c);i.current.style.transform=`translate3d(0, ${h}px, 0)`}},onWheelScroll:p=>{o.viewport&&(o.viewport.scrollTop=p)},onDragScroll:p=>{o.viewport&&(o.viewport.scrollTop=d(p))}}):null}),$s=a.forwardRef((e,t)=>{const{sizes:n,onSizesChange:r,...o}=e,i=U(ee,e.__scopeScrollArea),[s,c]=a.useState(),l=a.useRef(null),f=j(t,l,i.onScrollbarXChange);return a.useEffect(()=>{l.current&&c(getComputedStyle(l.current))},[l]),w.jsx(mr,{"data-orientation":"horizontal",...o,ref:f,sizes:n,style:{bottom:0,left:i.dir==="rtl"?"var(--radix-scroll-area-corner-width)":0,right:i.dir==="ltr"?"var(--radix-scroll-area-corner-width)":0,"--radix-scroll-area-thumb-width":rt(n)+"px",...e.style},onThumbPointerDown:u=>e.onThumbPointerDown(u.x),onDragScroll:u=>e.onDragScroll(u.x),onWheelScroll:(u,d)=>{if(i.viewport){const p=i.viewport.scrollLeft+u.deltaX;e.onWheelScroll(p),wr(p,d)&&u.preventDefault()}},onResize:()=>{l.current&&i.viewport&&s&&r({content:i.viewport.scrollWidth,viewport:i.viewport.offsetWidth,scrollbar:{size:l.current.clientWidth,paddingStart:Ye(s.paddingLeft),paddingEnd:Ye(s.paddingRight)}})}})}),Bs=a.forwardRef((e,t)=>{const{sizes:n,onSizesChange:r,...o}=e,i=U(ee,e.__scopeScrollArea),[s,c]=a.useState(),l=a.useRef(null),f=j(t,l,i.onScrollbarYChange);return a.useEffect(()=>{l.current&&c(getComputedStyle(l.current))},[l]),w.jsx(mr,{"data-orientation":"vertical",...o,ref:f,sizes:n,style:{top:0,right:i.dir==="ltr"?0:void 0,left:i.dir==="rtl"?0:void 0,bottom:"var(--radix-scroll-area-corner-height)","--radix-scroll-area-thumb-height":rt(n)+"px",...e.style},onThumbPointerDown:u=>e.onThumbPointerDown(u.y),onDragScroll:u=>e.onDragScroll(u.y),onWheelScroll:(u,d)=>{if(i.viewport){const p=i.viewport.scrollTop+u.deltaY;e.onWheelScroll(p),wr(p,d)&&u.preventDefault()}},onResize:()=>{l.current&&i.viewport&&s&&r({content:i.viewport.scrollHeight,viewport:i.viewport.offsetHeight,scrollbar:{size:l.current.clientHeight,paddingStart:Ye(s.paddingTop),paddingEnd:Ye(s.paddingBottom)}})}})}),[Hs,hr]=lr(ee),mr=a.forwardRef((e,t)=>{const{__scopeScrollArea:n,sizes:r,hasThumb:o,onThumbChange:i,onThumbPointerUp:s,onThumbPointerDown:c,onThumbPositionChange:l,onDragScroll:f,onWheelScroll:u,onResize:d,...p}=e,h=U(ee,n),[g,m]=a.useState(null),v=j(t,A=>m(A)),y=a.useRef(null),x=a.useRef(""),S=h.viewport,b=r.content-r.viewport,C=B(u),R=B(l),E=ot(d,10);function P(A){if(y.current){const T=A.clientX-y.current.left,D=A.clientY-y.current.top;f({x:T,y:D})}}return a.useEffect(()=>{const A=T=>{const D=T.target;(g==null?void 0:g.contains(D))&&C(T,b)};return document.addEventListener("wheel",A,{passive:!1}),()=>document.removeEventListener("wheel",A,{passive:!1})},[S,g,b,C]),a.useEffect(R,[r,R]),xe(g,E),xe(h.content,E),w.jsx(Hs,{scope:n,scrollbar:g,hasThumb:o,onThumbChange:B(i),onThumbPointerUp:B(s),onThumbPositionChange:R,onThumbPointerDown:B(c),children:w.jsx(I.div,{...p,ref:v,style:{position:"absolute",...p.style},onPointerDown:_(e.onPointerDown,A=>{A.button===0&&(A.target.setPointerCapture(A.pointerId),y.current=g.getBoundingClientRect(),x.current=document.body.style.webkitUserSelect,document.body.style.webkitUserSelect="none",h.viewport&&(h.viewport.style.scrollBehavior="auto"),P(A))}),onPointerMove:_(e.onPointerMove,P),onPointerUp:_(e.onPointerUp,A=>{const T=A.target;T.hasPointerCapture(A.pointerId)&&T.releasePointerCapture(A.pointerId),document.body.style.webkitUserSelect=x.current,h.viewport&&(h.viewport.style.scrollBehavior=""),y.current=null})})})}),ze="ScrollAreaThumb",Vs=a.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=hr(ze,e.__scopeScrollArea);return w.jsx(Q,{present:n||o.hasThumb,children:w.jsx(Us,{ref:t,...r})})}),Us=a.forwardRef((e,t)=>{const{__scopeScrollArea:n,style:r,...o}=e,i=U(ze,n),s=hr(ze,n),{onThumbPositionChange:c}=s,l=j(t,d=>s.onThumbChange(d)),f=a.useRef(void 0),u=ot(()=>{f.current&&(f.current(),f.current=void 0)},100);return a.useEffect(()=>{const d=i.viewport;if(d){const p=()=>{if(u(),!f.current){const h=Xs(d,c);f.current=h,c()}};return c(),d.addEventListener("scroll",p),()=>d.removeEventListener("scroll",p)}},[i.viewport,u,c]),w.jsx(I.div,{"data-state":s.hasThumb?"visible":"hidden",...o,ref:l,style:{width:"var(--radix-scroll-area-thumb-width)",height:"var(--radix-scroll-area-thumb-height)",...r},onPointerDownCapture:_(e.onPointerDownCapture,d=>{const h=d.target.getBoundingClientRect(),g=d.clientX-h.left,m=d.clientY-h.top;s.onThumbPointerDown({x:g,y:m})}),onPointerUp:_(e.onPointerUp,s.onThumbPointerUp)})});Vs.displayName=ze;var Bt="ScrollAreaCorner",vr=a.forwardRef((e,t)=>{const n=U(Bt,e.__scopeScrollArea),r=!!(n.scrollbarX&&n.scrollbarY);return n.type!=="scroll"&&r?w.jsx(zs,{...e,ref:t}):null});vr.displayName=Bt;var zs=a.forwardRef((e,t)=>{const{__scopeScrollArea:n,...r}=e,o=U(Bt,n),[i,s]=a.useState(0),[c,l]=a.useState(0),f=!!(i&&c);return xe(o.scrollbarX,()=>{var d;const u=((d=o.scrollbarX)==null?void 0:d.offsetHeight)||0;o.onCornerHeightChange(u),l(u)}),xe(o.scrollbarY,()=>{var d;const u=((d=o.scrollbarY)==null?void 0:d.offsetWidth)||0;o.onCornerWidthChange(u),s(u)}),f?w.jsx(I.div,{...r,ref:t,style:{width:i,height:c,position:"absolute",right:o.dir==="ltr"?0:void 0,left:o.dir==="rtl"?0:void 0,bottom:0,...e.style}}):null});function Ye(e){return e?parseInt(e,10):0}function gr(e,t){const n=e/t;return isNaN(n)?0:n}function rt(e){const t=gr(e.viewport,e.content),n=e.scrollbar.paddingStart+e.scrollbar.paddingEnd,r=(e.scrollbar.size-n)*t;return Math.max(r,18)}function Ys(e,t,n,r="ltr"){const o=rt(n),i=o/2,s=t||i,c=o-s,l=n.scrollbar.paddingStart+s,f=n.scrollbar.size-n.scrollbar.paddingEnd-c,u=n.content-n.viewport,d=r==="ltr"?[0,u]:[u*-1,0];return yr([l,f],d)(e)}function vn(e,t,n="ltr"){const r=rt(t),o=t.scrollbar.paddingStart+t.scrollbar.paddingEnd,i=t.scrollbar.size-o,s=t.content-t.viewport,c=i-r,l=n==="ltr"?[0,s]:[s*-1,0],f=Ls(e,l);return yr([0,s],[0,c])(f)}function yr(e,t){return n=>{if(e[0]===e[1]||t[0]===t[1])return t[0];const r=(t[1]-t[0])/(e[1]-e[0]);return t[0]+r*(n-e[0])}}function wr(e,t){return e>0&&e<t}var Xs=(e,t=()=>{})=>{let n={left:e.scrollLeft,top:e.scrollTop},r=0;return(function o(){const i={left:e.scrollLeft,top:e.scrollTop},s=n.left!==i.left,c=n.top!==i.top;(s||c)&&t(),n=i,r=window.requestAnimationFrame(o)})(),()=>window.cancelAnimationFrame(r)};function ot(e,t){const n=B(e),r=a.useRef(0);return a.useEffect(()=>()=>window.clearTimeout(r.current),[]),a.useCallback(()=>{window.clearTimeout(r.current),r.current=window.setTimeout(n,t)},[n,t])}function xe(e,t){const n=B(t);te(()=>{let r=0;if(e){const o=new ResizeObserver(()=>{cancelAnimationFrame(r),r=window.requestAnimationFrame(n)});return o.observe(e),()=>{window.cancelAnimationFrame(r),o.unobserve(e)}}},[e,n])}var Da=ur,_a=dr,Na=vr,dt=0;function Gs(){a.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??gn()),document.body.insertAdjacentElement("beforeend",e[1]??gn()),dt++,()=>{dt===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),dt--}},[])}function gn(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var pt="focusScope.autoFocusOnMount",ht="focusScope.autoFocusOnUnmount",yn={bubbles:!1,cancelable:!0},Ks="FocusScope",br=a.forwardRef((e,t)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:o,onUnmountAutoFocus:i,...s}=e,[c,l]=a.useState(null),f=B(o),u=B(i),d=a.useRef(null),p=j(t,m=>l(m)),h=a.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;a.useEffect(()=>{if(r){let m=function(S){if(h.paused||!c)return;const b=S.target;c.contains(b)?d.current=b:ie(d.current,{select:!0})},v=function(S){if(h.paused||!c)return;const b=S.relatedTarget;b!==null&&(c.contains(b)||ie(d.current,{select:!0}))},y=function(S){if(document.activeElement===document.body)for(const C of S)C.removedNodes.length>0&&ie(c)};document.addEventListener("focusin",m),document.addEventListener("focusout",v);const x=new MutationObserver(y);return c&&x.observe(c,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",m),document.removeEventListener("focusout",v),x.disconnect()}}},[r,c,h.paused]),a.useEffect(()=>{if(c){bn.add(h);const m=document.activeElement;if(!c.contains(m)){const y=new CustomEvent(pt,yn);c.addEventListener(pt,f),c.dispatchEvent(y),y.defaultPrevented||(qs(tc(xr(c)),{select:!0}),document.activeElement===m&&ie(c))}return()=>{c.removeEventListener(pt,f),setTimeout(()=>{const y=new CustomEvent(ht,yn);c.addEventListener(ht,u),c.dispatchEvent(y),y.defaultPrevented||ie(m??document.body,{select:!0}),c.removeEventListener(ht,u),bn.remove(h)},0)}}},[c,f,u,h]);const g=a.useCallback(m=>{if(!n&&!r||h.paused)return;const v=m.key==="Tab"&&!m.altKey&&!m.ctrlKey&&!m.metaKey,y=document.activeElement;if(v&&y){const x=m.currentTarget,[S,b]=Zs(x);S&&b?!m.shiftKey&&y===b?(m.preventDefault(),n&&ie(S,{select:!0})):m.shiftKey&&y===S&&(m.preventDefault(),n&&ie(b,{select:!0})):y===x&&m.preventDefault()}},[n,r,h.paused]);return w.jsx(I.div,{tabIndex:-1,...s,ref:p,onKeyDown:g})});br.displayName=Ks;function qs(e,{select:t=!1}={}){const n=document.activeElement;for(const r of e)if(ie(r,{select:t}),document.activeElement!==n)return}function Zs(e){const t=xr(e),n=wn(t,e),r=wn(t.reverse(),e);return[n,r]}function xr(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const o=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||o?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function wn(e,t){for(const n of e)if(!Js(n,{upTo:t}))return n}function Js(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function Qs(e){return e instanceof HTMLInputElement&&"select"in e}function ie(e,{select:t=!1}={}){if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&Qs(e)&&t&&e.select()}}var bn=ec();function ec(){let e=[];return{add(t){const n=e[0];t!==n&&(n==null||n.pause()),e=xn(e,t),e.unshift(t)},remove(t){var n;e=xn(e,t),(n=e[0])==null||n.resume()}}}function xn(e,t){const n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function tc(e){return e.filter(t=>t.tagName!=="A")}var nc=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},pe=new WeakMap,Le=new WeakMap,Me={},mt=0,Sr=function(e){return e&&(e.host||Sr(e.parentNode))},rc=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=Sr(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},oc=function(e,t,n,r){var o=rc(t,Array.isArray(e)?e:[e]);Me[n]||(Me[n]=new WeakMap);var i=Me[n],s=[],c=new Set,l=new Set(o),f=function(d){!d||c.has(d)||(c.add(d),f(d.parentNode))};o.forEach(f);var u=function(d){!d||l.has(d)||Array.prototype.forEach.call(d.children,function(p){if(c.has(p))u(p);else try{var h=p.getAttribute(r),g=h!==null&&h!=="false",m=(pe.get(p)||0)+1,v=(i.get(p)||0)+1;pe.set(p,m),i.set(p,v),s.push(p),m===1&&g&&Le.set(p,!0),v===1&&p.setAttribute(n,"true"),g||p.setAttribute(r,"true")}catch(y){console.error("aria-hidden: cannot operate on ",p,y)}})};return u(t),c.clear(),mt++,function(){s.forEach(function(d){var p=pe.get(d)-1,h=i.get(d)-1;pe.set(d,p),i.set(d,h),p||(Le.has(d)||d.removeAttribute(r),Le.delete(d)),h||d.removeAttribute(n)}),mt--,mt||(pe=new WeakMap,pe=new WeakMap,Le=new WeakMap,Me={})}},ic=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),o=nc(e);return o?(r.push.apply(r,Array.from(o.querySelectorAll("[aria-live], script"))),oc(r,o,n,"aria-hidden")):function(){return null}},K=function(){return K=Object.assign||function(t){for(var n,r=1,o=arguments.length;r<o;r++){n=arguments[r];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t},K.apply(this,arguments)};function Cr(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]]);return n}function sc(e,t,n){if(n||arguments.length===2)for(var r=0,o=t.length,i;r<o;r++)(i||!(r in t))&&(i||(i=Array.prototype.slice.call(t,0,r)),i[r]=t[r]);return e.concat(i||Array.prototype.slice.call(t))}var We="right-scroll-bar-position",$e="width-before-scroll-bar",cc="with-scroll-bars-hidden",ac="--removed-body-scroll-bar-size";function vt(e,t){return typeof e=="function"?e(t):e&&(e.current=t),e}function lc(e,t){var n=a.useState(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(r){var o=n.value;o!==r&&(n.value=r,n.callback(r,o))}}}})[0];return n.callback=t,n.facade}var uc=typeof window<"u"?a.useLayoutEffect:a.useEffect,Sn=new WeakMap;function fc(e,t){var n=lc(null,function(r){return e.forEach(function(o){return vt(o,r)})});return uc(function(){var r=Sn.get(n);if(r){var o=new Set(r),i=new Set(e),s=n.current;o.forEach(function(c){i.has(c)||vt(c,null)}),i.forEach(function(c){o.has(c)||vt(c,s)})}Sn.set(n,e)},[e]),n}function dc(e){return e}function pc(e,t){t===void 0&&(t=dc);var n=[],r=!1,o={read:function(){if(r)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(i){var s=t(i,r);return n.push(s),function(){n=n.filter(function(c){return c!==s})}},assignSyncMedium:function(i){for(r=!0;n.length;){var s=n;n=[],s.forEach(i)}n={push:function(c){return i(c)},filter:function(){return n}}},assignMedium:function(i){r=!0;var s=[];if(n.length){var c=n;n=[],c.forEach(i),s=n}var l=function(){var u=s;s=[],u.forEach(i)},f=function(){return Promise.resolve().then(l)};f(),n={push:function(u){s.push(u),f()},filter:function(u){return s=s.filter(u),n}}}};return o}function hc(e){e===void 0&&(e={});var t=pc(null);return t.options=K({async:!0,ssr:!1},e),t}var Er=function(e){var t=e.sideCar,n=Cr(e,["sideCar"]);if(!t)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw new Error("Sidecar medium not found");return a.createElement(r,K({},n))};Er.isSideCarExport=!0;function mc(e,t){return e.useMedium(t),Er}var Rr=hc(),gt=function(){},it=a.forwardRef(function(e,t){var n=a.useRef(null),r=a.useState({onScrollCapture:gt,onWheelCapture:gt,onTouchMoveCapture:gt}),o=r[0],i=r[1],s=e.forwardProps,c=e.children,l=e.className,f=e.removeScrollBar,u=e.enabled,d=e.shards,p=e.sideCar,h=e.noRelative,g=e.noIsolation,m=e.inert,v=e.allowPinchZoom,y=e.as,x=y===void 0?"div":y,S=e.gapMode,b=Cr(e,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),C=p,R=fc([n,t]),E=K(K({},b),o);return a.createElement(a.Fragment,null,u&&a.createElement(C,{sideCar:Rr,removeScrollBar:f,shards:d,noRelative:h,noIsolation:g,inert:m,setCallbacks:i,allowPinchZoom:!!v,lockRef:n,gapMode:S}),s?a.cloneElement(a.Children.only(c),K(K({},E),{ref:R})):a.createElement(x,K({},E,{className:l,ref:R}),c))});it.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};it.classNames={fullWidth:$e,zeroRight:We};var vc=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function gc(){if(!document)return null;var e=document.createElement("style");e.type="text/css";var t=vc();return t&&e.setAttribute("nonce",t),e}function yc(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function wc(e){var t=document.head||document.getElementsByTagName("head")[0];t.appendChild(e)}var bc=function(){var e=0,t=null;return{add:function(n){e==0&&(t=gc())&&(yc(t,n),wc(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},xc=function(){var e=bc();return function(t,n){a.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},Pr=function(){var e=xc(),t=function(n){var r=n.styles,o=n.dynamic;return e(r,o),null};return t},Sc={left:0,top:0,right:0,gap:0},yt=function(e){return parseInt(e||"",10)||0},Cc=function(e){var t=window.getComputedStyle(document.body),n=t[e==="padding"?"paddingLeft":"marginLeft"],r=t[e==="padding"?"paddingTop":"marginTop"],o=t[e==="padding"?"paddingRight":"marginRight"];return[yt(n),yt(r),yt(o)]},Ec=function(e){if(e===void 0&&(e="margin"),typeof window>"u")return Sc;var t=Cc(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},Rc=Pr(),ye="data-scroll-locked",Pc=function(e,t,n,r){var o=e.left,i=e.top,s=e.right,c=e.gap;return n===void 0&&(n="margin"),`
|
|
10
|
-
.`.concat(cc,` {
|
|
11
|
-
overflow: hidden `).concat(r,`;
|
|
12
|
-
padding-right: `).concat(c,"px ").concat(r,`;
|
|
13
|
-
}
|
|
14
|
-
body[`).concat(ye,`] {
|
|
15
|
-
overflow: hidden `).concat(r,`;
|
|
16
|
-
overscroll-behavior: contain;
|
|
17
|
-
`).concat([t&&"position: relative ".concat(r,";"),n==="margin"&&`
|
|
18
|
-
padding-left: `.concat(o,`px;
|
|
19
|
-
padding-top: `).concat(i,`px;
|
|
20
|
-
padding-right: `).concat(s,`px;
|
|
21
|
-
margin-left:0;
|
|
22
|
-
margin-top:0;
|
|
23
|
-
margin-right: `).concat(c,"px ").concat(r,`;
|
|
24
|
-
`),n==="padding"&&"padding-right: ".concat(c,"px ").concat(r,";")].filter(Boolean).join(""),`
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.`).concat(We,` {
|
|
28
|
-
right: `).concat(c,"px ").concat(r,`;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.`).concat($e,` {
|
|
32
|
-
margin-right: `).concat(c,"px ").concat(r,`;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.`).concat(We," .").concat(We,` {
|
|
36
|
-
right: 0 `).concat(r,`;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
.`).concat($e," .").concat($e,` {
|
|
40
|
-
margin-right: 0 `).concat(r,`;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
body[`).concat(ye,`] {
|
|
44
|
-
`).concat(ac,": ").concat(c,`px;
|
|
45
|
-
}
|
|
46
|
-
`)},Cn=function(){var e=parseInt(document.body.getAttribute(ye)||"0",10);return isFinite(e)?e:0},Ac=function(){a.useEffect(function(){return document.body.setAttribute(ye,(Cn()+1).toString()),function(){var e=Cn()-1;e<=0?document.body.removeAttribute(ye):document.body.setAttribute(ye,e.toString())}},[])},Tc=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,o=r===void 0?"margin":r;Ac();var i=a.useMemo(function(){return Ec(o)},[o]);return a.createElement(Rc,{styles:Pc(i,!t,o,n?"":"!important")})},Pt=!1;if(typeof window<"u")try{var Fe=Object.defineProperty({},"passive",{get:function(){return Pt=!0,!0}});window.addEventListener("test",Fe,Fe),window.removeEventListener("test",Fe,Fe)}catch{Pt=!1}var he=Pt?{passive:!1}:!1,Oc=function(e){return e.tagName==="TEXTAREA"},Ar=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!Oc(e)&&n[t]==="visible")},Dc=function(e){return Ar(e,"overflowY")},_c=function(e){return Ar(e,"overflowX")},En=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var o=Tr(e,r);if(o){var i=Or(e,r),s=i[1],c=i[2];if(s>c)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},Nc=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},Ic=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},Tr=function(e,t){return e==="v"?Dc(t):_c(t)},Or=function(e,t){return e==="v"?Nc(t):Ic(t)},Lc=function(e,t){return e==="h"&&t==="rtl"?-1:1},Mc=function(e,t,n,r,o){var i=Lc(e,window.getComputedStyle(t).direction),s=i*r,c=n.target,l=t.contains(c),f=!1,u=s>0,d=0,p=0;do{if(!c)break;var h=Or(e,c),g=h[0],m=h[1],v=h[2],y=m-v-i*g;(g||y)&&Tr(e,c)&&(d+=y,p+=g);var x=c.parentNode;c=x&&x.nodeType===Node.DOCUMENT_FRAGMENT_NODE?x.host:x}while(!l&&c!==document.body||l&&(t.contains(c)||t===c));return(u&&Math.abs(d)<1||!u&&Math.abs(p)<1)&&(f=!0),f},je=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},Rn=function(e){return[e.deltaX,e.deltaY]},Pn=function(e){return e&&"current"in e?e.current:e},Fc=function(e,t){return e[0]===t[0]&&e[1]===t[1]},jc=function(e){return`
|
|
47
|
-
.block-interactivity-`.concat(e,` {pointer-events: none;}
|
|
48
|
-
.allow-interactivity-`).concat(e,` {pointer-events: all;}
|
|
49
|
-
`)},kc=0,me=[];function Wc(e){var t=a.useRef([]),n=a.useRef([0,0]),r=a.useRef(),o=a.useState(kc++)[0],i=a.useState(Pr)[0],s=a.useRef(e);a.useEffect(function(){s.current=e},[e]),a.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(o));var m=sc([e.lockRef.current],(e.shards||[]).map(Pn),!0).filter(Boolean);return m.forEach(function(v){return v.classList.add("allow-interactivity-".concat(o))}),function(){document.body.classList.remove("block-interactivity-".concat(o)),m.forEach(function(v){return v.classList.remove("allow-interactivity-".concat(o))})}}},[e.inert,e.lockRef.current,e.shards]);var c=a.useCallback(function(m,v){if("touches"in m&&m.touches.length===2||m.type==="wheel"&&m.ctrlKey)return!s.current.allowPinchZoom;var y=je(m),x=n.current,S="deltaX"in m?m.deltaX:x[0]-y[0],b="deltaY"in m?m.deltaY:x[1]-y[1],C,R=m.target,E=Math.abs(S)>Math.abs(b)?"h":"v";if("touches"in m&&E==="h"&&R.type==="range")return!1;var P=window.getSelection(),A=P&&P.anchorNode,T=A?A===R||A.contains(R):!1;if(T)return!1;var D=En(E,R);if(!D)return!0;if(D?C=E:(C=E==="v"?"h":"v",D=En(E,R)),!D)return!1;if(!r.current&&"changedTouches"in m&&(S||b)&&(r.current=C),!C)return!0;var M=r.current||C;return Mc(M,v,m,M==="h"?S:b)},[]),l=a.useCallback(function(m){var v=m;if(!(!me.length||me[me.length-1]!==i)){var y="deltaY"in v?Rn(v):je(v),x=t.current.filter(function(C){return C.name===v.type&&(C.target===v.target||v.target===C.shadowParent)&&Fc(C.delta,y)})[0];if(x&&x.should){v.cancelable&&v.preventDefault();return}if(!x){var S=(s.current.shards||[]).map(Pn).filter(Boolean).filter(function(C){return C.contains(v.target)}),b=S.length>0?c(v,S[0]):!s.current.noIsolation;b&&v.cancelable&&v.preventDefault()}}},[]),f=a.useCallback(function(m,v,y,x){var S={name:m,delta:v,target:y,should:x,shadowParent:$c(y)};t.current.push(S),setTimeout(function(){t.current=t.current.filter(function(b){return b!==S})},1)},[]),u=a.useCallback(function(m){n.current=je(m),r.current=void 0},[]),d=a.useCallback(function(m){f(m.type,Rn(m),m.target,c(m,e.lockRef.current))},[]),p=a.useCallback(function(m){f(m.type,je(m),m.target,c(m,e.lockRef.current))},[]);a.useEffect(function(){return me.push(i),e.setCallbacks({onScrollCapture:d,onWheelCapture:d,onTouchMoveCapture:p}),document.addEventListener("wheel",l,he),document.addEventListener("touchmove",l,he),document.addEventListener("touchstart",u,he),function(){me=me.filter(function(m){return m!==i}),document.removeEventListener("wheel",l,he),document.removeEventListener("touchmove",l,he),document.removeEventListener("touchstart",u,he)}},[]);var h=e.removeScrollBar,g=e.inert;return a.createElement(a.Fragment,null,g?a.createElement(i,{styles:jc(o)}):null,h?a.createElement(Tc,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function $c(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const Bc=mc(Rr,Wc);var Dr=a.forwardRef(function(e,t){return a.createElement(it,K({},e,{ref:t,sideCar:Bc}))});Dr.classNames=it.classNames;function Hc(e){const t=Vc(e),n=a.forwardRef((r,o)=>{const{children:i,...s}=r,c=a.Children.toArray(i),l=c.find(zc);if(l){const f=l.props.children,u=c.map(d=>d===l?a.Children.count(f)>1?a.Children.only(null):a.isValidElement(f)?f.props.children:null:d);return w.jsx(t,{...s,ref:o,children:a.isValidElement(f)?a.cloneElement(f,void 0,u):null})}return w.jsx(t,{...s,ref:o,children:i})});return n.displayName=`${e}.Slot`,n}function Vc(e){const t=a.forwardRef((n,r)=>{const{children:o,...i}=n;if(a.isValidElement(o)){const s=Xc(o),c=Yc(i,o.props);return o.type!==a.Fragment&&(c.ref=r?Ge(r,s):s),a.cloneElement(o,c)}return a.Children.count(o)>1?a.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var Uc=Symbol("radix.slottable");function zc(e){return a.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===Uc}function Yc(e,t){const n={...t};for(const r in t){const o=e[r],i=t[r];/^on[A-Z]/.test(r)?o&&i?n[r]=(...c)=>{const l=i(...c);return o(...c),l}:o&&(n[r]=o):r==="style"?n[r]={...o,...i}:r==="className"&&(n[r]=[o,i].filter(Boolean).join(" "))}return{...e,...n}}function Xc(e){var r,o;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(o=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:o.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var st="Dialog",[_r]=de(st),[Gc,X]=_r(st),Nr=e=>{const{__scopeDialog:t,children:n,open:r,defaultOpen:o,onOpenChange:i,modal:s=!0}=e,c=a.useRef(null),l=a.useRef(null),[f,u]=Qe({prop:r,defaultProp:o??!1,onChange:i,caller:st});return w.jsx(Gc,{scope:t,triggerRef:c,contentRef:l,contentId:ve(),titleId:ve(),descriptionId:ve(),open:f,onOpenChange:u,onOpenToggle:a.useCallback(()=>u(d=>!d),[u]),modal:s,children:n})};Nr.displayName=st;var Ir="DialogTrigger",Kc=a.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=X(Ir,n),i=j(t,o.triggerRef);return w.jsx(I.button,{type:"button","aria-haspopup":"dialog","aria-expanded":o.open,"aria-controls":o.contentId,"data-state":Ut(o.open),...r,ref:i,onClick:_(e.onClick,o.onOpenToggle)})});Kc.displayName=Ir;var Ht="DialogPortal",[qc,Lr]=_r(Ht,{forceMount:void 0}),Mr=e=>{const{__scopeDialog:t,forceMount:n,children:r,container:o}=e,i=X(Ht,t);return w.jsx(qc,{scope:t,forceMount:n,children:a.Children.map(r,s=>w.jsx(Q,{present:n||i.open,children:w.jsx(er,{asChild:!0,container:o,children:s})}))})};Mr.displayName=Ht;var Xe="DialogOverlay",Fr=a.forwardRef((e,t)=>{const n=Lr(Xe,e.__scopeDialog),{forceMount:r=n.forceMount,...o}=e,i=X(Xe,e.__scopeDialog);return i.modal?w.jsx(Q,{present:r||i.open,children:w.jsx(Jc,{...o,ref:t})}):null});Fr.displayName=Xe;var Zc=Hc("DialogOverlay.RemoveScroll"),Jc=a.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=X(Xe,n);return w.jsx(Dr,{as:Zc,allowPinchZoom:!0,shards:[o.contentRef],children:w.jsx(I.div,{"data-state":Ut(o.open),...r,ref:t,style:{pointerEvents:"auto",...r.style}})})}),fe="DialogContent",jr=a.forwardRef((e,t)=>{const n=Lr(fe,e.__scopeDialog),{forceMount:r=n.forceMount,...o}=e,i=X(fe,e.__scopeDialog);return w.jsx(Q,{present:r||i.open,children:i.modal?w.jsx(Qc,{...o,ref:t}):w.jsx(ea,{...o,ref:t})})});jr.displayName=fe;var Qc=a.forwardRef((e,t)=>{const n=X(fe,e.__scopeDialog),r=a.useRef(null),o=j(t,n.contentRef,r);return a.useEffect(()=>{const i=r.current;if(i)return ic(i)},[]),w.jsx(kr,{...e,ref:o,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:_(e.onCloseAutoFocus,i=>{var s;i.preventDefault(),(s=n.triggerRef.current)==null||s.focus()}),onPointerDownOutside:_(e.onPointerDownOutside,i=>{const s=i.detail.originalEvent,c=s.button===0&&s.ctrlKey===!0;(s.button===2||c)&&i.preventDefault()}),onFocusOutside:_(e.onFocusOutside,i=>i.preventDefault())})}),ea=a.forwardRef((e,t)=>{const n=X(fe,e.__scopeDialog),r=a.useRef(!1),o=a.useRef(!1);return w.jsx(kr,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:i=>{var s,c;(s=e.onCloseAutoFocus)==null||s.call(e,i),i.defaultPrevented||(r.current||(c=n.triggerRef.current)==null||c.focus(),i.preventDefault()),r.current=!1,o.current=!1},onInteractOutside:i=>{var l,f;(l=e.onInteractOutside)==null||l.call(e,i),i.defaultPrevented||(r.current=!0,i.detail.originalEvent.type==="pointerdown"&&(o.current=!0));const s=i.target;((f=n.triggerRef.current)==null?void 0:f.contains(s))&&i.preventDefault(),i.detail.originalEvent.type==="focusin"&&o.current&&i.preventDefault()}})}),kr=a.forwardRef((e,t)=>{const{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:o,onCloseAutoFocus:i,...s}=e,c=X(fe,n),l=a.useRef(null),f=j(t,l);return Gs(),w.jsxs(w.Fragment,{children:[w.jsx(br,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:o,onUnmountAutoFocus:i,children:w.jsx(Tt,{role:"dialog",id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":Ut(c.open),...s,ref:f,onDismiss:()=>c.onOpenChange(!1)})}),w.jsxs(w.Fragment,{children:[w.jsx(ta,{titleId:c.titleId}),w.jsx(ra,{contentRef:l,descriptionId:c.descriptionId})]})]})}),Vt="DialogTitle",Wr=a.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=X(Vt,n);return w.jsx(I.h2,{id:o.titleId,...r,ref:t})});Wr.displayName=Vt;var $r="DialogDescription",Br=a.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=X($r,n);return w.jsx(I.p,{id:o.descriptionId,...r,ref:t})});Br.displayName=$r;var Hr="DialogClose",Vr=a.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=X(Hr,n);return w.jsx(I.button,{type:"button",...r,ref:t,onClick:_(e.onClick,()=>o.onOpenChange(!1))})});Vr.displayName=Hr;function Ut(e){return e?"open":"closed"}var Ur="DialogTitleWarning",[Ia,zr]=So(Ur,{contentName:fe,titleName:Vt,docsSlug:"dialog"}),ta=({titleId:e})=>{const t=zr(Ur),n=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users.
|
|
50
|
-
|
|
51
|
-
If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component.
|
|
52
|
-
|
|
53
|
-
For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return a.useEffect(()=>{e&&(document.getElementById(e)||console.error(n))},[n,e]),null},na="DialogDescriptionWarning",ra=({contentRef:e,descriptionId:t})=>{const r=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${zr(na).contentName}}.`;return a.useEffect(()=>{var i;const o=(i=e.current)==null?void 0:i.getAttribute("aria-describedby");t&&o&&(document.getElementById(t)||console.warn(r))},[r,e,t]),null},La=Nr,Ma=Mr,Fa=Fr,ja=jr,ka=Wr,Wa=Br,$a=Vr;function An(e){const t=oa(e),n=a.forwardRef((r,o)=>{const{children:i,...s}=r,c=a.Children.toArray(i),l=c.find(sa);if(l){const f=l.props.children,u=c.map(d=>d===l?a.Children.count(f)>1?a.Children.only(null):a.isValidElement(f)?f.props.children:null:d);return w.jsx(t,{...s,ref:o,children:a.isValidElement(f)?a.cloneElement(f,void 0,u):null})}return w.jsx(t,{...s,ref:o,children:i})});return n.displayName=`${e}.Slot`,n}function oa(e){const t=a.forwardRef((n,r)=>{const{children:o,...i}=n;if(a.isValidElement(o)){const s=aa(o),c=ca(i,o.props);return o.type!==a.Fragment&&(c.ref=r?Ge(r,s):s),a.cloneElement(o,c)}return a.Children.count(o)>1?a.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var ia=Symbol("radix.slottable");function sa(e){return a.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===ia}function ca(e,t){const n={...t};for(const r in t){const o=e[r],i=t[r];/^on[A-Z]/.test(r)?o&&i?n[r]=(...c)=>{const l=i(...c);return o(...c),l}:o&&(n[r]=o):r==="style"?n[r]={...o,...i}:r==="className"&&(n[r]=[o,i].filter(Boolean).join(" "))}return{...e,...n}}function aa(e){var r,o;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(o=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:o.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function la(e){const t=e+"CollectionProvider",[n,r]=de(t),[o,i]=n(t,{collectionRef:{current:null},itemMap:new Map}),s=m=>{const{scope:v,children:y}=m,x=ae.useRef(null),S=ae.useRef(new Map).current;return w.jsx(o,{scope:v,itemMap:S,collectionRef:x,children:y})};s.displayName=t;const c=e+"CollectionSlot",l=An(c),f=ae.forwardRef((m,v)=>{const{scope:y,children:x}=m,S=i(c,y),b=j(v,S.collectionRef);return w.jsx(l,{ref:b,children:x})});f.displayName=c;const u=e+"CollectionItemSlot",d="data-radix-collection-item",p=An(u),h=ae.forwardRef((m,v)=>{const{scope:y,children:x,...S}=m,b=ae.useRef(null),C=j(v,b),R=i(u,y);return ae.useEffect(()=>(R.itemMap.set(b,{ref:b,...S}),()=>void R.itemMap.delete(b))),w.jsx(p,{[d]:"",ref:C,children:x})});h.displayName=u;function g(m){const v=i(e+"CollectionConsumer",m);return ae.useCallback(()=>{const x=v.collectionRef.current;if(!x)return[];const S=Array.from(x.querySelectorAll(`[${d}]`));return Array.from(v.itemMap.values()).sort((R,E)=>S.indexOf(R.ref.current)-S.indexOf(E.ref.current))},[v.collectionRef,v.itemMap])}return[{Provider:s,Slot:f,ItemSlot:h},g,r]}var wt="rovingFocusGroup.onEntryFocus",ua={bubbles:!1,cancelable:!0},Oe="RovingFocusGroup",[At,Yr,fa]=la(Oe),[da,Xr]=de(Oe,[fa]),[pa,ha]=da(Oe),Gr=a.forwardRef((e,t)=>w.jsx(At.Provider,{scope:e.__scopeRovingFocusGroup,children:w.jsx(At.Slot,{scope:e.__scopeRovingFocusGroup,children:w.jsx(ma,{...e,ref:t})})}));Gr.displayName=Oe;var ma=a.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,orientation:r,loop:o=!1,dir:i,currentTabStopId:s,defaultCurrentTabStopId:c,onCurrentTabStopIdChange:l,onEntryFocus:f,preventScrollOnEntryFocus:u=!1,...d}=e,p=a.useRef(null),h=j(t,p),g=kt(i),[m,v]=Qe({prop:s,defaultProp:c??null,onChange:l,caller:Oe}),[y,x]=a.useState(!1),S=B(f),b=Yr(n),C=a.useRef(!1),[R,E]=a.useState(0);return a.useEffect(()=>{const P=p.current;if(P)return P.addEventListener(wt,S),()=>P.removeEventListener(wt,S)},[S]),w.jsx(pa,{scope:n,orientation:r,dir:g,loop:o,currentTabStopId:m,onItemFocus:a.useCallback(P=>v(P),[v]),onItemShiftTab:a.useCallback(()=>x(!0),[]),onFocusableItemAdd:a.useCallback(()=>E(P=>P+1),[]),onFocusableItemRemove:a.useCallback(()=>E(P=>P-1),[]),children:w.jsx(I.div,{tabIndex:y||R===0?-1:0,"data-orientation":r,...d,ref:h,style:{outline:"none",...e.style},onMouseDown:_(e.onMouseDown,()=>{C.current=!0}),onFocus:_(e.onFocus,P=>{const A=!C.current;if(P.target===P.currentTarget&&A&&!y){const T=new CustomEvent(wt,ua);if(P.currentTarget.dispatchEvent(T),!T.defaultPrevented){const D=b().filter(N=>N.focusable),M=D.find(N=>N.active),F=D.find(N=>N.id===m),$=[M,F,...D].filter(Boolean).map(N=>N.ref.current);Zr($,u)}}C.current=!1}),onBlur:_(e.onBlur,()=>x(!1))})})}),Kr="RovingFocusGroupItem",qr=a.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,focusable:r=!0,active:o=!1,tabStopId:i,children:s,...c}=e,l=ve(),f=i||l,u=ha(Kr,n),d=u.currentTabStopId===f,p=Yr(n),{onFocusableItemAdd:h,onFocusableItemRemove:g,currentTabStopId:m}=u;return a.useEffect(()=>{if(r)return h(),()=>g()},[r,h,g]),w.jsx(At.ItemSlot,{scope:n,id:f,focusable:r,active:o,children:w.jsx(I.span,{tabIndex:d?0:-1,"data-orientation":u.orientation,...c,ref:t,onMouseDown:_(e.onMouseDown,v=>{r?u.onItemFocus(f):v.preventDefault()}),onFocus:_(e.onFocus,()=>u.onItemFocus(f)),onKeyDown:_(e.onKeyDown,v=>{if(v.key==="Tab"&&v.shiftKey){u.onItemShiftTab();return}if(v.target!==v.currentTarget)return;const y=ya(v,u.orientation,u.dir);if(y!==void 0){if(v.metaKey||v.ctrlKey||v.altKey||v.shiftKey)return;v.preventDefault();let S=p().filter(b=>b.focusable).map(b=>b.ref.current);if(y==="last")S.reverse();else if(y==="prev"||y==="next"){y==="prev"&&S.reverse();const b=S.indexOf(v.currentTarget);S=u.loop?wa(S,b+1):S.slice(b+1)}setTimeout(()=>Zr(S))}}),children:typeof s=="function"?s({isCurrentTabStop:d,hasTabStop:m!=null}):s})})});qr.displayName=Kr;var va={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function ga(e,t){return t!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function ya(e,t,n){const r=ga(e.key,n);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(r))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(r)))return va[r]}function Zr(e,t=!1){const n=document.activeElement;for(const r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function wa(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var ba=Gr,xa=qr,ct="Tabs",[Sa]=de(ct,[Xr]),Jr=Xr(),[Ca,zt]=Sa(ct),Qr=a.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,onValueChange:o,defaultValue:i,orientation:s="horizontal",dir:c,activationMode:l="automatic",...f}=e,u=kt(c),[d,p]=Qe({prop:r,onChange:o,defaultProp:i??"",caller:ct});return w.jsx(Ca,{scope:n,baseId:ve(),value:d,onValueChange:p,orientation:s,dir:u,activationMode:l,children:w.jsx(I.div,{dir:u,"data-orientation":s,...f,ref:t})})});Qr.displayName=ct;var eo="TabsList",to=a.forwardRef((e,t)=>{const{__scopeTabs:n,loop:r=!0,...o}=e,i=zt(eo,n),s=Jr(n);return w.jsx(ba,{asChild:!0,...s,orientation:i.orientation,dir:i.dir,loop:r,children:w.jsx(I.div,{role:"tablist","aria-orientation":i.orientation,...o,ref:t})})});to.displayName=eo;var no="TabsTrigger",ro=a.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,disabled:o=!1,...i}=e,s=zt(no,n),c=Jr(n),l=so(s.baseId,r),f=co(s.baseId,r),u=r===s.value;return w.jsx(xa,{asChild:!0,...c,focusable:!o,active:u,children:w.jsx(I.button,{type:"button",role:"tab","aria-selected":u,"aria-controls":f,"data-state":u?"active":"inactive","data-disabled":o?"":void 0,disabled:o,id:l,...i,ref:t,onMouseDown:_(e.onMouseDown,d=>{!o&&d.button===0&&d.ctrlKey===!1?s.onValueChange(r):d.preventDefault()}),onKeyDown:_(e.onKeyDown,d=>{[" ","Enter"].includes(d.key)&&s.onValueChange(r)}),onFocus:_(e.onFocus,()=>{const d=s.activationMode!=="manual";!u&&!o&&d&&s.onValueChange(r)})})})});ro.displayName=no;var oo="TabsContent",io=a.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,forceMount:o,children:i,...s}=e,c=zt(oo,n),l=so(c.baseId,r),f=co(c.baseId,r),u=r===c.value,d=a.useRef(u);return a.useEffect(()=>{const p=requestAnimationFrame(()=>d.current=!1);return()=>cancelAnimationFrame(p)},[]),w.jsx(Q,{present:o||u,children:({present:p})=>w.jsx(I.div,{"data-state":u?"active":"inactive","data-orientation":c.orientation,role:"tabpanel","aria-labelledby":l,hidden:!p,id:f,tabIndex:0,...s,ref:t,style:{...e.style,animationDuration:d.current?"0s":void 0},children:p&&i})})});io.displayName=oo;function so(e,t){return`${e}-trigger-${t}`}function co(e,t){return`${e}-content-${t}`}var Ba=Qr,Ha=to,Va=ro,Ua=io;export{ns as A,Va as B,Oa as C,Tt as D,Ua as E,br as F,Ba as G,Ha as L,Fa as O,Pa as P,Aa as R,js as S,Ta as T,_a as V,Da as a,Na as b,Vs as c,Ge as d,Q as e,er as f,Dr as g,ic as h,_ as i,w as j,de as k,zn as l,Gs as m,rs as n,Qe as o,ts as p,ve as q,I as r,os as s,Ma as t,j as u,ja as v,$a as w,La as x,ka as y,Wa as z};
|
package/index.html
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en" class="h-full bg-gray-950" data-theme="neon-glass">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
-
<title>Orbital Command</title>
|
|
7
|
-
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
8
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
9
|
-
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;500;600;700&family=Space+Grotesk:wght@300;400;500;600;700&display=swap" rel="stylesheet" />
|
|
10
|
-
</head>
|
|
11
|
-
<body class="h-full">
|
|
12
|
-
<div id="root" class="h-full"></div>
|
|
13
|
-
<script type="module" src="/src/main.tsx"></script>
|
|
14
|
-
</body>
|
|
15
|
-
</html>
|
package/postcss.config.js
DELETED
package/src/App.tsx
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { lazy, Suspense } from 'react';
|
|
2
|
-
import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';
|
|
3
|
-
import { TooltipProvider } from '@/components/ui/tooltip';
|
|
4
|
-
import { DashboardLayout } from '@/layouts/DashboardLayout';
|
|
5
|
-
import { ScopeBoard } from '@/views/ScopeBoard';
|
|
6
|
-
import { PrimitivesConfig } from '@/views/PrimitivesConfig';
|
|
7
|
-
import { QualityGates } from '@/views/QualityGates';
|
|
8
|
-
import { SourceControl } from '@/views/SourceControl';
|
|
9
|
-
import { SessionTimeline } from '@/views/SessionTimeline';
|
|
10
|
-
import { Settings } from '@/views/Settings';
|
|
11
|
-
|
|
12
|
-
const WorkflowVisualizer = lazy(() => import('@/views/WorkflowVisualizer'));
|
|
13
|
-
|
|
14
|
-
export default function App() {
|
|
15
|
-
return (
|
|
16
|
-
<BrowserRouter>
|
|
17
|
-
<TooltipProvider>
|
|
18
|
-
<Routes>
|
|
19
|
-
<Route element={<DashboardLayout />}>
|
|
20
|
-
<Route index element={<ScopeBoard />} />
|
|
21
|
-
<Route path="primitives" element={<PrimitivesConfig />} />
|
|
22
|
-
<Route path="gates" element={<QualityGates />} />
|
|
23
|
-
<Route path="enforcement" element={<Navigate to="/gates" replace />} />
|
|
24
|
-
<Route path="repo" element={<SourceControl />} />
|
|
25
|
-
<Route path="sessions" element={<SessionTimeline />} />
|
|
26
|
-
<Route path="workflow" element={<Suspense fallback={<div className="flex h-64 items-center justify-center"><div className="h-8 w-8 animate-spin rounded-full border-2 border-primary border-t-transparent" /></div>}><WorkflowVisualizer /></Suspense>} />
|
|
27
|
-
<Route path="settings" element={<Settings />} />
|
|
28
|
-
</Route>
|
|
29
|
-
</Routes>
|
|
30
|
-
</TooltipProvider>
|
|
31
|
-
</BrowserRouter>
|
|
32
|
-
);
|
|
33
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { cn } from '@/lib/utils';
|
|
2
|
-
import type { AgentName } from '@/types';
|
|
3
|
-
|
|
4
|
-
const AGENT_CONFIG: Record<string, { emoji: string; label: string; color: string; glow: string }> = {
|
|
5
|
-
'attacker': { emoji: '\u{1F5E1}\u{FE0F}', label: 'Attacker', color: 'bg-agent-attacker/20 text-agent-attacker', glow: 'agent-glow-attacker' },
|
|
6
|
-
'chaos': { emoji: '\u{1F4A5}', label: 'Chaos', color: 'bg-agent-chaos/20 text-agent-chaos', glow: 'agent-glow-chaos' },
|
|
7
|
-
'solana-expert': { emoji: '\u{26D3}\u{FE0F}', label: 'Solana', color: 'bg-agent-solana/20 text-agent-solana', glow: 'agent-glow-solana' },
|
|
8
|
-
'frontend-designer': { emoji: '\u{1F3A8}', label: 'Frontend', color: 'bg-agent-frontend/20 text-agent-frontend', glow: 'agent-glow-frontend' },
|
|
9
|
-
'architect': { emoji: '\u{1F3D7}\u{FE0F}', label: 'Architect', color: 'bg-agent-architect/20 text-agent-architect', glow: 'agent-glow-architect' },
|
|
10
|
-
'rules-enforcer': { emoji: '\u{1F4CB}', label: 'Rules', color: 'bg-agent-rules/20 text-agent-rules', glow: 'agent-glow-rules' },
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
interface AgentBadgeProps {
|
|
14
|
-
agent: string;
|
|
15
|
-
showLabel?: boolean;
|
|
16
|
-
className?: string;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export function AgentBadge({ agent, showLabel = true, className }: AgentBadgeProps) {
|
|
20
|
-
const config = AGENT_CONFIG[agent as AgentName] ?? {
|
|
21
|
-
emoji: '\u{1F916}',
|
|
22
|
-
label: agent,
|
|
23
|
-
color: 'bg-muted text-muted-foreground',
|
|
24
|
-
glow: '',
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
return (
|
|
28
|
-
<span
|
|
29
|
-
className={cn(
|
|
30
|
-
'inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-xxs font-normal',
|
|
31
|
-
config.color,
|
|
32
|
-
config.glow,
|
|
33
|
-
className
|
|
34
|
-
)}
|
|
35
|
-
>
|
|
36
|
-
<span>{config.emoji}</span>
|
|
37
|
-
{showLabel && <span>{config.label}</span>}
|
|
38
|
-
</span>
|
|
39
|
-
);
|
|
40
|
-
}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { useState, useEffect } from 'react';
|
|
2
|
-
import { Play, Package } from 'lucide-react';
|
|
3
|
-
import {
|
|
4
|
-
Dialog,
|
|
5
|
-
DialogContent,
|
|
6
|
-
DialogHeader,
|
|
7
|
-
DialogTitle,
|
|
8
|
-
DialogDescription,
|
|
9
|
-
} from '@/components/ui/dialog';
|
|
10
|
-
import { Button } from '@/components/ui/button';
|
|
11
|
-
import { formatScopeId } from '@/lib/utils';
|
|
12
|
-
import { useWorkflow } from '@/hooks/useWorkflow';
|
|
13
|
-
import type { Sprint } from '@/types';
|
|
14
|
-
|
|
15
|
-
interface BatchPreflightModalProps {
|
|
16
|
-
open: boolean;
|
|
17
|
-
batch: Sprint | null;
|
|
18
|
-
onConfirm: (mergeMode?: string) => void;
|
|
19
|
-
onCancel: () => void;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export function BatchPreflightModal({ open, batch, onConfirm, onCancel }: BatchPreflightModalProps) {
|
|
23
|
-
const { engine } = useWorkflow();
|
|
24
|
-
const [dispatching, setDispatching] = useState(false);
|
|
25
|
-
const [mergeMode, setMergeMode] = useState<string>('push');
|
|
26
|
-
|
|
27
|
-
useEffect(() => {
|
|
28
|
-
if (open) setDispatching(false);
|
|
29
|
-
}, [open]);
|
|
30
|
-
|
|
31
|
-
if (!batch) return null;
|
|
32
|
-
|
|
33
|
-
const totalScopes = batch.scope_ids.length;
|
|
34
|
-
// Get the batch target edge to derive the action description
|
|
35
|
-
const targetStatus = engine.getBatchTargetStatus(batch.target_column);
|
|
36
|
-
const edge = targetStatus ? engine.findEdge(batch.target_column, targetStatus) : undefined;
|
|
37
|
-
const action = edge?.description ?? 'Will dispatch this batch';
|
|
38
|
-
|
|
39
|
-
const handleConfirm = () => {
|
|
40
|
-
setDispatching(true);
|
|
41
|
-
onConfirm(mergeMode);
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
return (
|
|
45
|
-
<Dialog open={open} onOpenChange={(o) => !o && onCancel()}>
|
|
46
|
-
<DialogContent className="sm:max-w-md p-0 gap-0 overflow-hidden">
|
|
47
|
-
<DialogHeader className="px-4 pt-3 pb-2">
|
|
48
|
-
<DialogTitle className="flex items-center gap-2 text-sm">
|
|
49
|
-
<Package className="h-4 w-4 text-amber-400" />
|
|
50
|
-
Dispatch Batch: {batch.name}
|
|
51
|
-
</DialogTitle>
|
|
52
|
-
<DialogDescription className="text-xs">
|
|
53
|
-
{action} ({totalScopes} scope{totalScopes !== 1 ? 's' : ''})
|
|
54
|
-
</DialogDescription>
|
|
55
|
-
</DialogHeader>
|
|
56
|
-
|
|
57
|
-
{/* Scope list */}
|
|
58
|
-
<div className="max-h-48 overflow-y-auto space-y-1 bg-[#0a0a12] px-4 py-3">
|
|
59
|
-
{batch.scopes.map((ss) => (
|
|
60
|
-
<div key={ss.scope_id} className="flex items-center gap-2 text-xs">
|
|
61
|
-
<span className="font-mono text-muted-foreground w-8 shrink-0">
|
|
62
|
-
{formatScopeId(ss.scope_id)}
|
|
63
|
-
</span>
|
|
64
|
-
<span className="truncate flex-1">{ss.title}</span>
|
|
65
|
-
</div>
|
|
66
|
-
))}
|
|
67
|
-
</div>
|
|
68
|
-
|
|
69
|
-
{/* Merge mode selector */}
|
|
70
|
-
<div className="px-4 py-2 border-t border-border/50 space-y-1.5">
|
|
71
|
-
<span className="text-[10px] font-semibold uppercase tracking-wider text-muted-foreground">Merge Mode</span>
|
|
72
|
-
<div className="flex gap-2">
|
|
73
|
-
{['push', 'pr', 'direct'].map((mode) => (
|
|
74
|
-
<button
|
|
75
|
-
key={mode}
|
|
76
|
-
onClick={() => setMergeMode(mode)}
|
|
77
|
-
className={`rounded px-2 py-1 text-xs transition-colors ${
|
|
78
|
-
mergeMode === mode
|
|
79
|
-
? 'bg-cyan-600/80 text-black'
|
|
80
|
-
: 'bg-muted text-muted-foreground hover:bg-accent'
|
|
81
|
-
}`}
|
|
82
|
-
>
|
|
83
|
-
{mode === 'push' ? 'Push' : mode === 'pr' ? 'PR' : 'Direct Merge'}
|
|
84
|
-
</button>
|
|
85
|
-
))}
|
|
86
|
-
</div>
|
|
87
|
-
</div>
|
|
88
|
-
|
|
89
|
-
{/* Actions */}
|
|
90
|
-
<div className="flex justify-end gap-2 px-4 py-2 border-t border-border/50">
|
|
91
|
-
<Button variant="ghost" size="sm" onClick={onCancel} disabled={dispatching}>
|
|
92
|
-
Cancel
|
|
93
|
-
</Button>
|
|
94
|
-
<Button
|
|
95
|
-
size="sm"
|
|
96
|
-
onClick={handleConfirm}
|
|
97
|
-
disabled={dispatching || totalScopes === 0}
|
|
98
|
-
className="bg-cyan-600/80 hover:bg-cyan-500/80 transition-colors"
|
|
99
|
-
>
|
|
100
|
-
{dispatching ? (
|
|
101
|
-
<span className="flex items-center gap-1">
|
|
102
|
-
<span className="h-3 w-3 animate-spin rounded-full border border-white border-t-transparent" />
|
|
103
|
-
Dispatching...
|
|
104
|
-
</span>
|
|
105
|
-
) : (
|
|
106
|
-
<>
|
|
107
|
-
<Play className="h-3 w-3 mr-1" /> Dispatch
|
|
108
|
-
</>
|
|
109
|
-
)}
|
|
110
|
-
</Button>
|
|
111
|
-
</div>
|
|
112
|
-
</DialogContent>
|
|
113
|
-
</Dialog>
|
|
114
|
-
);
|
|
115
|
-
}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { SlidersHorizontal } from 'lucide-react';
|
|
2
|
-
import { Popover, PopoverTrigger, PopoverContent } from '@/components/ui/popover';
|
|
3
|
-
import { Button } from '@/components/ui/button';
|
|
4
|
-
import { cn } from '@/lib/utils';
|
|
5
|
-
import type { CardDisplayConfig } from '@/types';
|
|
6
|
-
|
|
7
|
-
interface CardDisplayToggleProps {
|
|
8
|
-
display: CardDisplayConfig;
|
|
9
|
-
onToggle: (field: keyof CardDisplayConfig) => void;
|
|
10
|
-
hiddenCount: number;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
const FIELDS: { key: keyof CardDisplayConfig; label: string }[] = [
|
|
14
|
-
{ key: 'effort', label: 'Effort' },
|
|
15
|
-
{ key: 'category', label: 'Category' },
|
|
16
|
-
{ key: 'priority', label: 'Priority' },
|
|
17
|
-
{ key: 'tags', label: 'Tags' },
|
|
18
|
-
];
|
|
19
|
-
|
|
20
|
-
export function CardDisplayToggle({ display, onToggle, hiddenCount }: CardDisplayToggleProps) {
|
|
21
|
-
return (
|
|
22
|
-
<Popover>
|
|
23
|
-
<PopoverTrigger asChild>
|
|
24
|
-
<Button
|
|
25
|
-
variant="outline"
|
|
26
|
-
size="sm"
|
|
27
|
-
className="gap-1.5 backdrop-blur-sm bg-white/[0.03] border-white/10"
|
|
28
|
-
aria-label="Toggle card display fields"
|
|
29
|
-
>
|
|
30
|
-
<SlidersHorizontal className="h-3 w-3" />
|
|
31
|
-
Display
|
|
32
|
-
{hiddenCount > 0 && (
|
|
33
|
-
<span className="ml-0.5 rounded-full bg-white/10 px-1.5 text-[10px]">
|
|
34
|
-
{hiddenCount}
|
|
35
|
-
</span>
|
|
36
|
-
)}
|
|
37
|
-
</Button>
|
|
38
|
-
</PopoverTrigger>
|
|
39
|
-
|
|
40
|
-
<PopoverContent align="end" className="filter-popover-glass !bg-transparent w-40">
|
|
41
|
-
<div className="space-y-0.5">
|
|
42
|
-
{FIELDS.map(({ key, label }) => {
|
|
43
|
-
const checked = display[key];
|
|
44
|
-
return (
|
|
45
|
-
<button
|
|
46
|
-
key={key}
|
|
47
|
-
onClick={() => onToggle(key)}
|
|
48
|
-
className={cn(
|
|
49
|
-
'flex w-full items-center gap-2 rounded px-2 py-1.5 text-xs transition-colors',
|
|
50
|
-
'hover:bg-white/[0.06]',
|
|
51
|
-
checked && 'bg-white/[0.06]',
|
|
52
|
-
)}
|
|
53
|
-
>
|
|
54
|
-
<span
|
|
55
|
-
className={cn(
|
|
56
|
-
'flex h-3.5 w-3.5 shrink-0 items-center justify-center rounded-sm border',
|
|
57
|
-
checked ? 'border-primary bg-primary text-primary-foreground' : 'border-white/15',
|
|
58
|
-
)}
|
|
59
|
-
>
|
|
60
|
-
{checked && (
|
|
61
|
-
<svg className="h-2.5 w-2.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={3}>
|
|
62
|
-
<path strokeLinecap="round" strokeLinejoin="round" d="M5 13l4 4L19 7" />
|
|
63
|
-
</svg>
|
|
64
|
-
)}
|
|
65
|
-
</span>
|
|
66
|
-
<span className={cn('capitalize', checked && 'text-foreground')}>{label}</span>
|
|
67
|
-
</button>
|
|
68
|
-
);
|
|
69
|
-
})}
|
|
70
|
-
</div>
|
|
71
|
-
</PopoverContent>
|
|
72
|
-
</Popover>
|
|
73
|
-
);
|
|
74
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { Plus } from 'lucide-react';
|
|
2
|
-
import { Button } from '@/components/ui/button';
|
|
3
|
-
import { useWorkflow } from '@/hooks/useWorkflow';
|
|
4
|
-
import type { Sprint } from '@/types';
|
|
5
|
-
|
|
6
|
-
interface ColumnHeaderActionsProps {
|
|
7
|
-
columnId: string;
|
|
8
|
-
dispatching?: boolean;
|
|
9
|
-
onOpenIdeaForm?: () => void;
|
|
10
|
-
onCreateGroup?: (name: string, options: { target_column: string; group_type: 'sprint' | 'batch' }) => Promise<Sprint | null>;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export function ColumnHeaderActions({ columnId, dispatching, onOpenIdeaForm, onCreateGroup }: ColumnHeaderActionsProps) {
|
|
14
|
-
const { engine } = useWorkflow();
|
|
15
|
-
|
|
16
|
-
const entryPointId = engine.getEntryPoint().id;
|
|
17
|
-
const list = engine.getList(columnId);
|
|
18
|
-
const isBatchColumn = list?.supportsBatch ?? false;
|
|
19
|
-
const isSprintColumn = list?.supportsSprint ?? false;
|
|
20
|
-
const isEntryPoint = columnId === entryPointId;
|
|
21
|
-
|
|
22
|
-
if (isEntryPoint && onOpenIdeaForm) {
|
|
23
|
-
return (
|
|
24
|
-
<Button
|
|
25
|
-
variant="ghost"
|
|
26
|
-
size="icon"
|
|
27
|
-
className="ml-1 h-5 w-5"
|
|
28
|
-
onClick={onOpenIdeaForm}
|
|
29
|
-
disabled={dispatching}
|
|
30
|
-
title="Add idea"
|
|
31
|
-
>
|
|
32
|
-
<Plus className="h-3 w-3" />
|
|
33
|
-
</Button>
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if ((isSprintColumn || isBatchColumn) && onCreateGroup) {
|
|
38
|
-
const groupType = isBatchColumn ? 'batch' : 'sprint';
|
|
39
|
-
const label = isBatchColumn ? 'Batch' : 'Sprint';
|
|
40
|
-
|
|
41
|
-
return (
|
|
42
|
-
<Button
|
|
43
|
-
variant="ghost"
|
|
44
|
-
size="icon"
|
|
45
|
-
className="ml-1 h-5 w-5"
|
|
46
|
-
onClick={() => onCreateGroup(`New ${label}`, { target_column: columnId, group_type: groupType })}
|
|
47
|
-
title={`Create ${label.toLowerCase()}`}
|
|
48
|
-
>
|
|
49
|
-
<Plus className="h-3 w-3" />
|
|
50
|
-
</Button>
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
return null;
|
|
55
|
-
}
|