machinaos 0.0.64 → 0.0.73
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/client/components.json +25 -0
- package/client/dist/assets/ActionBar-vzPpSR77.js +1 -0
- package/client/dist/assets/ApiKeyInput-Ds7AKFe8.js +1 -0
- package/client/dist/assets/ApiKeyPanel-gfblELep.js +1 -0
- package/client/dist/assets/ApiUsageSection-BMNWTe2r.js +1 -0
- package/client/dist/assets/EmailPanel-B1Om64p5.js +1 -0
- package/client/dist/assets/OAuthPanel-CXyQYGBz.js +1 -0
- package/client/dist/assets/QrPairingPanel-BgNuI1we.js +1 -0
- package/client/dist/assets/RateLimitSection-YYK8sx1T.js +1 -0
- package/client/dist/assets/StatusCard-DuYA5hJR.js +1 -0
- package/client/dist/assets/geist-cyrillic-wght-normal-CHSlOQsW.woff2 +0 -0
- package/client/dist/assets/geist-latin-ext-wght-normal-DMtmJ5ZE.woff2 +0 -0
- package/client/dist/assets/geist-latin-wght-normal-Dm3htQBi.woff2 +0 -0
- package/client/dist/assets/index-D9tZfgvi.js +363 -0
- package/client/dist/assets/index-al7snTkG.css +1 -0
- package/client/dist/index.html +2 -2
- package/client/package.json +42 -8
- package/client/src/App.tsx +16 -12
- package/client/src/Dashboard.tsx +211 -266
- package/client/src/ParameterPanel.tsx +42 -124
- package/client/src/adapters/__tests__/nodeSpecToDescription.test.ts +352 -0
- package/client/src/adapters/nodeSpecToDescription.ts +349 -0
- package/client/src/assets/icons/NodeIcon.tsx +73 -0
- package/client/src/assets/icons/chat/chat.svg +1 -0
- package/client/src/assets/icons/code/javascript.svg +1 -0
- package/client/src/assets/icons/code/python.svg +1 -0
- package/client/src/assets/icons/code/typescript.svg +1 -0
- package/client/src/assets/icons/index.test.ts +74 -0
- package/client/src/assets/icons/index.ts +176 -0
- package/client/src/assets/icons/social/social.svg +1 -0
- package/client/src/assets/icons/twitter/x.svg +1 -0
- package/client/src/assets/icons/whatsapp/whatsapp-db.svg +1 -0
- package/client/src/assets/icons/whatsapp/whatsapp-receive.svg +1 -0
- package/client/src/assets/icons/whatsapp/whatsapp-send.svg +1 -0
- package/client/src/assets/icons/whatsapp/whatsapp.svg +1 -0
- package/client/src/components/AIAgentNode.tsx +160 -583
- package/client/src/components/APIKeyValidator.tsx +52 -54
- package/client/src/components/ConditionalEdge.tsx +24 -84
- package/client/src/components/CredentialsModal.tsx +1 -3151
- package/client/src/components/EdgeConditionEditor.tsx +162 -330
- package/client/src/components/GenericNode.tsx +40 -170
- package/client/src/components/LocationParameterPanel.tsx +17 -58
- package/client/src/components/OutputPanel.tsx +10 -8
- package/client/src/components/ParameterRenderer.tsx +161 -58
- package/client/src/components/PricingConfigModal.tsx +134 -159
- package/client/src/components/SkillEditorModal.tsx +320 -324
- package/client/src/components/SquareNode.tsx +122 -431
- package/client/src/components/StartNode.tsx +22 -100
- package/client/src/components/TeamMonitorNode.tsx +6 -4
- package/client/src/components/ToolkitNode.tsx +31 -134
- package/client/src/components/TriggerNode.tsx +38 -169
- package/client/src/components/__tests__/CredentialsModal.test.tsx +231 -0
- package/client/src/components/auth/LoginPage.tsx +75 -180
- package/client/src/components/auth/ProtectedRoute.tsx +4 -23
- package/client/src/components/credentials/CredentialsModal.tsx +118 -0
- package/client/src/components/credentials/CredentialsPalette.tsx +305 -0
- package/client/src/components/credentials/PanelRenderer.tsx +92 -0
- package/client/src/components/credentials/catalogueAdapter.ts +199 -0
- package/client/src/components/credentials/hooks.ts +15 -0
- package/client/src/components/credentials/index.ts +3 -0
- package/client/src/components/credentials/panels/ApiKeyPanel.tsx +116 -0
- package/client/src/components/credentials/panels/EmailPanel.tsx +371 -0
- package/client/src/components/credentials/panels/OAuthPanel.tsx +52 -0
- package/client/src/components/credentials/panels/QrPairingPanel.tsx +91 -0
- package/client/src/components/credentials/panels/schemas/email.ts +64 -0
- package/client/src/components/credentials/primitives/ActionBar.tsx +54 -0
- package/client/src/components/credentials/primitives/FieldRenderer.tsx +91 -0
- package/client/src/components/credentials/primitives/OAuthConnect.tsx +123 -0
- package/client/src/components/credentials/primitives/StatusCard.tsx +47 -0
- package/client/src/components/credentials/primitives/index.ts +5 -0
- package/client/src/components/credentials/providers.tsx +177 -0
- package/client/src/components/credentials/schema/extends.ts +168 -0
- package/client/src/components/credentials/sections/ApiUsageSection.tsx +120 -0
- package/client/src/components/credentials/sections/LlmUsageSection.tsx +146 -0
- package/client/src/components/credentials/sections/ProviderDefaultsSection.tsx +366 -0
- package/client/src/components/credentials/sections/RateLimitSection.tsx +306 -0
- package/client/src/components/credentials/sections/index.ts +4 -0
- package/client/src/components/credentials/types.ts +128 -0
- package/client/src/components/credentials/useCredentialPanel.ts +193 -0
- package/client/src/components/icons/AIProviderIcons.tsx +28 -14
- package/client/src/components/nodeMemoEquality.ts +28 -0
- package/client/src/components/onboarding/OnboardingWizard.tsx +49 -22
- package/client/src/components/onboarding/steps/ApiKeyStep.tsx +28 -49
- package/client/src/components/onboarding/steps/CanvasStep.tsx +61 -103
- package/client/src/components/onboarding/steps/ConceptsStep.tsx +69 -87
- package/client/src/components/onboarding/steps/GetStartedStep.tsx +82 -89
- package/client/src/components/onboarding/steps/WelcomeStep.tsx +27 -45
- package/client/src/components/output/OutputPanel.tsx +175 -0
- package/client/src/components/parameterPanel/InputSection.tsx +291 -1248
- package/client/src/components/parameterPanel/LocationPanelLayout.tsx +4 -4
- package/client/src/components/parameterPanel/MapsSection.tsx +1 -9
- package/client/src/components/parameterPanel/MasterSkillEditor.tsx +349 -370
- package/client/src/components/parameterPanel/MiddleSection.tsx +563 -846
- package/client/src/components/parameterPanel/OutputSection.tsx +34 -26
- package/client/src/components/parameterPanel/ParameterPanelLayout.tsx +4 -4
- package/client/src/components/parameterPanel/ToolSchemaEditor.tsx +317 -335
- package/client/src/components/parameterPanel/__tests__/InputSection.test.tsx +200 -0
- package/client/src/components/parameterPanel/__tests__/MiddleSection.test.tsx +150 -0
- package/client/src/components/parameterPanel/__tests__/OutputSection.test.tsx +295 -0
- package/client/src/components/shared/DataPanel.tsx +26 -97
- package/client/src/components/shared/JSONTreeRenderer.tsx +105 -87
- package/client/src/components/ui/AIResultModal.tsx +39 -141
- package/client/src/components/ui/ApiKeyInput.tsx +40 -45
- package/client/src/components/ui/CodeEditor.tsx +6 -28
- package/client/src/components/ui/CollapsibleSection.tsx +25 -64
- package/client/src/components/ui/ComponentItem.tsx +35 -126
- package/client/src/components/ui/ComponentPalette.tsx +111 -230
- package/client/src/components/ui/ConsolePanel.tsx +446 -881
- package/client/src/components/ui/EditableNodeLabel.tsx +122 -0
- package/client/src/components/ui/ErrorBoundary.tsx +40 -151
- package/client/src/components/ui/InputNodesPanel.tsx +53 -100
- package/client/src/components/ui/Modal.tsx +83 -113
- package/client/src/components/ui/NodeContextMenu.tsx +39 -71
- package/client/src/components/ui/OutputDisplayPanel.tsx +180 -359
- package/client/src/components/ui/QRCodeDisplay.tsx +32 -64
- package/client/src/components/ui/SettingsPanel.tsx +248 -417
- package/client/src/components/ui/TopToolbar.tsx +248 -633
- package/client/src/components/ui/WorkflowSidebar.tsx +109 -252
- package/client/src/components/ui/accordion.tsx +79 -0
- package/client/src/components/ui/action-button.tsx +61 -0
- package/client/src/components/ui/alert-dialog.tsx +197 -0
- package/client/src/components/ui/alert.tsx +82 -0
- package/client/src/components/ui/badge.tsx +52 -0
- package/client/src/components/ui/button.tsx +67 -0
- package/client/src/components/ui/card.tsx +103 -0
- package/client/src/components/ui/checkbox.tsx +31 -0
- package/client/src/components/ui/collapsible.tsx +31 -0
- package/client/src/components/ui/dialog.tsx +168 -0
- package/client/src/components/ui/dropdown-menu.tsx +269 -0
- package/client/src/components/ui/form.tsx +167 -0
- package/client/src/components/ui/input.tsx +19 -0
- package/client/src/components/ui/label.tsx +24 -0
- package/client/src/components/ui/popover.tsx +89 -0
- package/client/src/components/ui/progress.tsx +29 -0
- package/client/src/components/ui/select.tsx +192 -0
- package/client/src/components/ui/settingsPanel/schema.ts +64 -0
- package/client/src/components/ui/skeleton.tsx +13 -0
- package/client/src/components/ui/slider.tsx +57 -0
- package/client/src/components/ui/sonner.tsx +48 -0
- package/client/src/components/ui/switch.tsx +31 -0
- package/client/src/components/ui/tabs.tsx +88 -0
- package/client/src/components/ui/textarea.tsx +18 -0
- package/client/src/components/ui/tooltip.tsx +55 -0
- package/client/src/contexts/WebSocketContext.tsx +566 -128
- package/client/src/hooks/__tests__/useApiKeys.test.ts +411 -0
- package/client/src/hooks/__tests__/useDragVariable.test.ts +223 -0
- package/client/src/hooks/useApiKeyValidation.ts +7 -7
- package/client/src/hooks/useAutoSkillEdges.ts +132 -0
- package/client/src/hooks/useCatalogueQuery.ts +314 -0
- package/client/src/hooks/useComponentPalette.ts +4 -3
- package/client/src/hooks/useCopyPaste.ts +2 -3
- package/client/src/hooks/useDragAndDrop.ts +14 -7
- package/client/src/hooks/useDragVariable.ts +2 -2
- package/client/src/hooks/useExecution.ts +7 -7
- package/client/src/hooks/useFolderSkills.ts +73 -0
- package/client/src/hooks/useNodeAllowlist.ts +49 -0
- package/client/src/hooks/useNodeParamsQuery.ts +66 -0
- package/client/src/hooks/useOnboarding.ts +45 -47
- package/client/src/hooks/useParameterPanel.ts +89 -111
- package/client/src/hooks/useReactFlowNodes.ts +3 -3
- package/client/src/hooks/useUserSettingsQuery.ts +53 -0
- package/client/src/hooks/useWorkflowManagement.ts +5 -3
- package/client/src/hooks/useWorkflowsQuery.ts +96 -0
- package/client/src/index.css +450 -215
- package/client/src/lib/__tests__/workflowOps.test.ts +435 -0
- package/client/src/lib/aiModelProviders.ts +34 -0
- package/client/src/lib/featureFlags.ts +36 -0
- package/client/src/lib/nodeSpec.ts +327 -0
- package/client/src/lib/queryClient.ts +72 -0
- package/client/src/lib/queryConfig.ts +81 -0
- package/client/src/lib/queryPersist.ts +79 -0
- package/client/src/lib/utils.ts +6 -0
- package/client/src/lib/workflowOps.ts +291 -0
- package/client/src/main.tsx +29 -7
- package/client/src/services/executionService.ts +25 -83
- package/client/src/store/useAppStore.ts +12 -58
- package/client/src/store/useCredentialRegistry.ts +45 -0
- package/client/src/stores/nodeStatusStore.ts +134 -0
- package/client/src/styles/canvasAnimations.ts +112 -0
- package/client/src/styles/theme.ts +68 -1
- package/client/src/test/README.md +34 -0
- package/client/src/test/builders.ts +90 -0
- package/client/src/test/nodeDefinitionContract.ts +182 -0
- package/client/src/test/providers.tsx +80 -0
- package/client/src/test/setup.ts +62 -0
- package/client/src/types/ComponentTypes.ts +3 -1
- package/client/src/types/INodeProperties.ts +51 -2
- package/client/src/utils/formatters.ts +2 -2
- package/client/src/utils/parameterVisibility.ts +29 -0
- package/client/tailwind.config.js +39 -2
- package/client/tsconfig.json +5 -1
- package/client/vite.config.js +59 -1
- package/client/vitest.config.ts +29 -0
- package/package.json +20 -23
- package/scripts/migrate_icons.py +143 -0
- package/scripts/migrate_skill_icons.py +186 -0
- package/scripts/postinstall.js +25 -5
- package/server/config/credential_providers.json +400 -0
- package/server/config/llm_defaults.json +44 -24
- package/server/config/model_registry.json +1292 -541
- package/server/config/node_allowlist.json +29 -0
- package/server/core/config.py +13 -2
- package/server/core/database.py +35 -5
- package/server/core/logging.py +1 -1
- package/server/core/tracing.py +82 -0
- package/server/main.py +34 -3
- package/server/models/database.py +1 -0
- package/server/models/node_metadata.py +109 -0
- package/server/nodes/README.md +351 -0
- package/server/nodes/__init__.py +113 -0
- package/server/nodes/_visuals.py +81 -0
- package/server/nodes/agent/__init__.py +1 -0
- package/server/nodes/agent/_handles.py +55 -0
- package/server/nodes/agent/_inline.py +154 -0
- package/server/nodes/agent/_specialized.py +125 -0
- package/server/nodes/agent/ai_agent.py +132 -0
- package/server/nodes/agent/ai_employee.py +11 -0
- package/server/nodes/agent/android_agent.py +9 -0
- package/server/nodes/agent/autonomous_agent.py +9 -0
- package/server/nodes/agent/chat_agent.py +118 -0
- package/server/nodes/agent/claude_code_agent.py +133 -0
- package/server/nodes/agent/coding_agent.py +9 -0
- package/server/nodes/agent/consumer_agent.py +9 -0
- package/server/nodes/agent/deep_agent.py +103 -0
- package/server/nodes/agent/orchestrator_agent.py +11 -0
- package/server/nodes/agent/payments_agent.py +9 -0
- package/server/nodes/agent/productivity_agent.py +9 -0
- package/server/nodes/agent/rlm_agent.py +98 -0
- package/server/nodes/agent/social_agent.py +9 -0
- package/server/nodes/agent/task_agent.py +9 -0
- package/server/nodes/agent/tool_agent.py +9 -0
- package/server/nodes/agent/travel_agent.py +9 -0
- package/server/nodes/agent/web_agent.py +9 -0
- package/server/nodes/android/__init__.py +1 -0
- package/server/nodes/android/_base.py +330 -0
- package/server/nodes/android/airplane_mode_control.py +7 -0
- package/server/nodes/android/app_launcher.py +29 -0
- package/server/nodes/android/app_list.py +7 -0
- package/server/nodes/android/audio_automation.py +7 -0
- package/server/nodes/android/battery_monitor.py +7 -0
- package/server/nodes/android/bluetooth_automation.py +7 -0
- package/server/nodes/android/camera_control.py +7 -0
- package/server/nodes/android/device_state_automation.py +7 -0
- package/server/nodes/android/environmental_sensors.py +7 -0
- package/server/nodes/android/location.py +7 -0
- package/server/nodes/android/media_control.py +7 -0
- package/server/nodes/android/motion_detection.py +7 -0
- package/server/nodes/android/network_monitor.py +7 -0
- package/server/nodes/android/screen_control_automation.py +7 -0
- package/server/nodes/android/system_info.py +7 -0
- package/server/nodes/android/wifi_automation.py +7 -0
- package/server/nodes/browser/__init__.py +1 -0
- package/server/nodes/browser/browser.py +364 -0
- package/server/nodes/chat/__init__.py +1 -0
- package/server/nodes/chat/chat_history.py +67 -0
- package/server/nodes/chat/chat_send.py +79 -0
- package/server/nodes/code/__init__.py +1 -0
- package/server/nodes/code/_base.py +47 -0
- package/server/nodes/code/_nodejs.py +22 -0
- package/server/nodes/code/javascript_executor.py +57 -0
- package/server/nodes/code/python_executor.py +123 -0
- package/server/nodes/code/typescript_executor.py +53 -0
- package/server/nodes/document/__init__.py +1 -0
- package/server/nodes/document/document_parser.py +115 -0
- package/server/nodes/document/embedding_generator.py +110 -0
- package/server/nodes/document/file_downloader.py +111 -0
- package/server/nodes/document/http_scraper.py +193 -0
- package/server/nodes/document/text_chunker.py +77 -0
- package/server/nodes/document/vector_store.py +279 -0
- package/server/nodes/email/__init__.py +1 -0
- package/server/nodes/email/email_read.py +124 -0
- package/server/nodes/email/email_receive.py +141 -0
- package/server/nodes/email/email_send.py +58 -0
- package/server/nodes/filesystem/__init__.py +1 -0
- package/server/nodes/filesystem/_backend.py +189 -0
- package/server/nodes/filesystem/file_modify.py +101 -0
- package/server/nodes/filesystem/file_read.py +64 -0
- package/server/nodes/filesystem/fs_search.py +90 -0
- package/server/nodes/filesystem/shell.py +83 -0
- package/server/nodes/google/__init__.py +1 -0
- package/server/nodes/google/_base.py +84 -0
- package/server/nodes/google/_credentials.py +61 -0
- package/server/nodes/google/_gmail.py +106 -0
- package/server/nodes/google/calendar.py +238 -0
- package/server/nodes/google/contacts.py +243 -0
- package/server/nodes/google/drive.py +272 -0
- package/server/nodes/google/gmail.py +196 -0
- package/server/nodes/google/gmail_receive.py +172 -0
- package/server/nodes/google/sheets.py +174 -0
- package/server/nodes/google/tasks.py +175 -0
- package/server/nodes/groups.py +57 -0
- package/server/nodes/location/__init__.py +1 -0
- package/server/nodes/location/_credentials.py +21 -0
- package/server/nodes/location/gmaps_create.py +72 -0
- package/server/nodes/location/gmaps_locations.py +83 -0
- package/server/nodes/location/gmaps_nearby_places.py +62 -0
- package/server/nodes/model/__init__.py +1 -0
- package/server/nodes/model/_base.py +108 -0
- package/server/nodes/model/_credentials.py +97 -0
- package/server/nodes/model/anthropic_chat_model.py +27 -0
- package/server/nodes/model/cerebras_chat_model.py +26 -0
- package/server/nodes/model/deepseek_chat_model.py +27 -0
- package/server/nodes/model/gemini_chat_model.py +28 -0
- package/server/nodes/model/groq_chat_model.py +26 -0
- package/server/nodes/model/kimi_chat_model.py +12 -0
- package/server/nodes/model/mistral_chat_model.py +12 -0
- package/server/nodes/model/openai_chat_model.py +35 -0
- package/server/nodes/model/openrouter_chat_model.py +27 -0
- package/server/nodes/proxy/__init__.py +1 -0
- package/server/nodes/proxy/_usage.py +52 -0
- package/server/nodes/proxy/proxy_config.py +388 -0
- package/server/nodes/proxy/proxy_request.py +168 -0
- package/server/nodes/proxy/proxy_status.py +55 -0
- package/server/nodes/scheduler/__init__.py +1 -0
- package/server/nodes/scheduler/cron_scheduler.py +239 -0
- package/server/nodes/scheduler/timer.py +92 -0
- package/server/nodes/scraper/__init__.py +1 -0
- package/server/nodes/scraper/_credentials.py +19 -0
- package/server/nodes/scraper/apify_actor.py +314 -0
- package/server/nodes/scraper/crawlee_scraper.py +347 -0
- package/server/nodes/search/__init__.py +1 -0
- package/server/nodes/search/brave_search.py +124 -0
- package/server/nodes/search/duckduckgo_search.py +76 -0
- package/server/nodes/search/perplexity_search.py +128 -0
- package/server/nodes/search/serper_search.py +145 -0
- package/server/nodes/skill/__init__.py +1 -0
- package/server/nodes/skill/master_skill.py +64 -0
- package/server/nodes/skill/simple_memory.py +123 -0
- package/server/nodes/social/__init__.py +1 -0
- package/server/{services/handlers/social.py → nodes/social/_base.py} +33 -28
- package/server/nodes/social/social_receive.py +156 -0
- package/server/nodes/social/social_send.py +371 -0
- package/server/nodes/telegram/__init__.py +65 -0
- package/server/nodes/telegram/_credentials.py +19 -0
- package/server/nodes/telegram/_filters.py +122 -0
- package/server/nodes/telegram/_handlers.py +193 -0
- package/server/nodes/telegram/_refresh.py +106 -0
- package/server/{services/telegram_service.py → nodes/telegram/_service.py} +314 -272
- package/server/nodes/telegram/telegram_receive.py +149 -0
- package/server/nodes/telegram/telegram_send.py +269 -0
- package/server/nodes/text/__init__.py +1 -0
- package/server/nodes/text/file_handler.py +80 -0
- package/server/nodes/text/text_generator.py +55 -0
- package/server/nodes/tool/__init__.py +1 -0
- package/server/nodes/tool/calculator_tool.py +85 -0
- package/server/nodes/tool/current_time_tool.py +59 -0
- package/server/nodes/tool/task_manager.py +55 -0
- package/server/nodes/tool/write_todos.py +77 -0
- package/server/nodes/trigger/__init__.py +1 -0
- package/server/nodes/trigger/chat_trigger.py +71 -0
- package/server/nodes/trigger/task_trigger.py +80 -0
- package/server/nodes/trigger/webhook_trigger.py +110 -0
- package/server/nodes/twitter/__init__.py +1 -0
- package/server/nodes/twitter/_base.py +311 -0
- package/server/nodes/twitter/_credentials.py +35 -0
- package/server/nodes/twitter/twitter_receive.py +68 -0
- package/server/nodes/twitter/twitter_search.py +109 -0
- package/server/nodes/twitter/twitter_send.py +193 -0
- package/server/nodes/twitter/twitter_user.py +151 -0
- package/server/nodes/utility/__init__.py +1 -0
- package/server/nodes/utility/console.py +208 -0
- package/server/nodes/utility/http_request.py +164 -0
- package/server/nodes/utility/process_manager.py +111 -0
- package/server/nodes/utility/team_monitor.py +81 -0
- package/server/nodes/utility/webhook_response.py +85 -0
- package/server/nodes/visuals.json +471 -0
- package/server/nodes/whatsapp/__init__.py +24 -0
- package/server/{services/handlers/whatsapp.py → nodes/whatsapp/_base.py} +9 -3
- package/server/nodes/whatsapp/_runtime.py +116 -0
- package/server/nodes/whatsapp/whatsapp_db.py +348 -0
- package/server/nodes/whatsapp/whatsapp_receive.py +121 -0
- package/server/nodes/whatsapp/whatsapp_send.py +270 -0
- package/server/nodes/workflow/__init__.py +1 -0
- package/server/nodes/workflow/start.py +64 -0
- package/server/package-lock.json +1644 -0
- package/server/package.json +6 -1
- package/server/pyproject.toml +49 -9
- package/server/routers/credentials.py +88 -0
- package/server/routers/schemas.py +128 -0
- package/server/routers/websocket.py +527 -298
- package/server/services/_supervisor/__init__.py +36 -0
- package/server/services/_supervisor/base.py +153 -0
- package/server/services/_supervisor/client.py +55 -0
- package/server/services/_supervisor/process.py +125 -0
- package/server/services/_supervisor/registry.py +63 -0
- package/server/services/_supervisor/util.py +114 -0
- package/server/services/agents/adapters.py +18 -23
- package/server/services/agents/service.py +12 -9
- package/server/services/ai.py +336 -1220
- package/server/services/auth.py +86 -0
- package/server/services/auto_skill.py +152 -0
- package/server/services/browser_service.py +2 -31
- package/server/services/circuit_breaker.py +258 -0
- package/server/services/compaction.py +16 -17
- package/server/services/credential_registry.py +271 -0
- package/server/services/deployment/manager.py +13 -11
- package/server/services/deployment/triggers.py +6 -6
- package/server/services/event_waiter.py +146 -133
- package/server/services/google_oauth.py +22 -0
- package/server/services/handlers/__init__.py +22 -228
- package/server/services/handlers/todo.py +41 -49
- package/server/services/handlers/tools.py +235 -1814
- package/server/services/handlers/triggers.py +14 -18
- package/server/services/idempotency.py +198 -0
- package/server/services/llm/config.py +1 -1
- package/server/services/memory.py +66 -0
- package/server/services/model_registry.py +10 -0
- package/server/services/node_allowlist.py +68 -0
- package/server/services/node_executor.py +72 -175
- package/server/services/node_input_schemas.py +96 -0
- package/server/services/node_option_loaders/__init__.py +77 -0
- package/server/services/node_option_loaders/android_loaders.py +55 -0
- package/server/services/node_option_loaders/google_loaders.py +97 -0
- package/server/services/node_option_loaders/whatsapp_loaders.py +69 -0
- package/server/services/node_output_schemas.py +889 -0
- package/server/services/node_registry.py +129 -0
- package/server/services/node_spec.py +180 -0
- package/server/services/parameter_resolver.py +17 -7
- package/server/services/plugin/__init__.py +74 -0
- package/server/services/plugin/action.py +21 -0
- package/server/services/plugin/base.py +439 -0
- package/server/services/plugin/connection.py +136 -0
- package/server/services/plugin/context.py +80 -0
- package/server/services/plugin/credential.py +175 -0
- package/server/services/plugin/edge_walker.py +448 -0
- package/server/services/plugin/interceptor.py +70 -0
- package/server/services/plugin/operation.py +88 -0
- package/server/services/plugin/routing.py +186 -0
- package/server/services/plugin/scaling.py +78 -0
- package/server/services/plugin/tool.py +51 -0
- package/server/services/plugin/trigger.py +119 -0
- package/server/services/process_service.py +25 -28
- package/server/services/proxy/service.py +10 -7
- package/server/services/rlm/adapters.py +1 -1
- package/server/services/rlm/service.py +7 -7
- package/server/services/skill_loader.py +28 -6
- package/server/services/status_broadcaster.py +363 -186
- package/server/services/temporal/plugin_activities.py +109 -0
- package/server/services/temporal/worker.py +150 -34
- package/server/services/temporal/workflow.py +4 -7
- package/server/services/text.py +3 -3
- package/server/services/todo_service.py +2 -1
- package/server/{routers/whatsapp.py → services/whatsapp_service.py} +11 -0
- package/server/services/workflow.py +50 -14
- package/server/services/workflow_ops.py +241 -0
- package/server/services/ws_handler_registry.py +61 -0
- package/server/skills/GUIDE.md +2 -4
- package/server/skills/android_agent/app-launcher-skill/SKILL.md +1 -2
- package/server/skills/android_agent/app-list-skill/SKILL.md +1 -2
- package/server/skills/android_agent/audio-skill/SKILL.md +1 -2
- package/server/skills/android_agent/battery-skill/SKILL.md +1 -2
- package/server/skills/android_agent/bluetooth-skill/SKILL.md +1 -2
- package/server/skills/android_agent/camera-skill/SKILL.md +1 -2
- package/server/skills/android_agent/environmental-skill/SKILL.md +1 -2
- package/server/skills/android_agent/location-skill/SKILL.md +1 -2
- package/server/skills/android_agent/motion-skill/SKILL.md +1 -2
- package/server/skills/android_agent/personality/SKILL.md +1 -0
- package/server/skills/android_agent/screen-control-skill/SKILL.md +1 -2
- package/server/skills/android_agent/wifi-skill/SKILL.md +1 -2
- package/server/skills/assistant/assistant-personality/SKILL.md +1 -0
- package/server/skills/assistant/compaction-skill/SKILL.md +1 -0
- package/server/skills/assistant/humanify-skill/SKILL.md +1 -0
- package/server/skills/assistant/memory-skill/SKILL.md +1 -0
- package/server/skills/assistant/subagent-skill/SKILL.md +1 -0
- package/server/skills/autonomous/agentic-loop-skill/SKILL.md +2 -3
- package/server/skills/autonomous/code-mode-skill/SKILL.md +2 -3
- package/server/skills/autonomous/error-recovery-skill/SKILL.md +2 -3
- package/server/skills/autonomous/multi-tool-orchestration-skill/SKILL.md +2 -3
- package/server/skills/autonomous/progressive-discovery-skill/SKILL.md +1 -0
- package/server/skills/coding_agent/file-modify-skill/SKILL.md +8 -9
- package/server/skills/coding_agent/file-read-skill/SKILL.md +1 -2
- package/server/skills/coding_agent/fs-search-skill/SKILL.md +1 -2
- package/server/skills/coding_agent/javascript-skill/SKILL.md +2 -3
- package/server/skills/coding_agent/python-skill/SKILL.md +19 -18
- package/server/skills/productivity_agent/{calendar-skill → google-calendar-skill}/SKILL.md +3 -4
- package/server/skills/productivity_agent/{contacts-skill → google-contacts-skill}/SKILL.md +3 -4
- package/server/skills/productivity_agent/{drive-skill → google-drive-skill}/SKILL.md +3 -4
- package/server/skills/productivity_agent/{gmail-skill → google-gmail-skill}/SKILL.md +3 -4
- package/server/skills/productivity_agent/{sheets-skill → google-sheets-skill}/SKILL.md +3 -4
- package/server/skills/productivity_agent/{tasks-skill → google-tasks-skill}/SKILL.md +3 -4
- package/server/skills/rlm_agent/rlm-reasoning-skill/SKILL.md +2 -1
- package/server/skills/social_agent/twitter-search-skill/SKILL.md +44 -10
- package/server/skills/social_agent/twitter-send-skill/SKILL.md +1 -2
- package/server/skills/social_agent/twitter-user-skill/SKILL.md +1 -2
- package/server/skills/social_agent/whatsapp-db-skill/SKILL.md +1 -2
- package/server/skills/social_agent/whatsapp-send-skill/SKILL.md +1 -2
- package/server/skills/task_agent/cron-scheduler-skill/SKILL.md +1 -2
- package/server/skills/task_agent/task-manager-skill/SKILL.md +1 -2
- package/server/skills/task_agent/timer-skill/SKILL.md +1 -2
- package/server/skills/task_agent/write-todos-skill/SKILL.md +1 -2
- package/server/skills/terminal/bash-skill/SKILL.md +2 -3
- package/server/skills/terminal/powershell-skill/SKILL.md +2 -3
- package/server/skills/terminal/process-manager-skill/SKILL.md +1 -2
- package/server/skills/terminal/shell-skill/SKILL.md +107 -70
- package/server/skills/terminal/wsl-skill/SKILL.md +2 -3
- package/server/skills/travel_agent/geocoding-skill/SKILL.md +2 -3
- package/server/skills/travel_agent/nearby-places-skill/SKILL.md +2 -3
- package/server/skills/web_agent/apify-skill/SKILL.md +2 -3
- package/server/skills/web_agent/brave-search-skill/SKILL.md +1 -2
- package/server/skills/web_agent/browser-skill/SKILL.md +1 -2
- package/server/skills/web_agent/crawlee-scraper-skill/SKILL.md +2 -3
- package/server/skills/web_agent/duckduckgo-search-skill/SKILL.md +2 -3
- package/server/skills/web_agent/http-request-skill/SKILL.md +1 -2
- package/server/skills/web_agent/perplexity-search-skill/SKILL.md +1 -2
- package/server/skills/web_agent/proxy-config-skill/SKILL.md +2 -3
- package/server/skills/web_agent/serper-search-skill/SKILL.md +1 -2
- package/server/tests/conftest.py +144 -9
- package/server/tests/credentials/README.md +41 -0
- package/server/tests/credentials/__init__.py +0 -0
- package/server/tests/credentials/conftest.py +106 -0
- package/server/tests/credentials/test_auth_service.py +175 -0
- package/server/tests/credentials/test_credentials_database.py +223 -0
- package/server/tests/credentials/test_encryption.py +107 -0
- package/server/tests/credentials/test_google_oauth.py +116 -0
- package/server/tests/credentials/test_oauth_utils.py +89 -0
- package/server/tests/credentials/test_twitter_oauth.py +275 -0
- package/server/tests/credentials/test_websocket_handlers.py +293 -0
- package/server/tests/llm/test_factory.py +4 -1
- package/server/tests/llm/test_wiring.py +2 -2
- package/server/tests/nodes/__init__.py +6 -0
- package/server/tests/nodes/_compat.py +168 -0
- package/server/tests/nodes/_harness.py +274 -0
- package/server/tests/nodes/_mocks.py +235 -0
- package/server/tests/nodes/test_ai_agents.py +478 -0
- package/server/tests/nodes/test_ai_chat_models.py +383 -0
- package/server/tests/nodes/test_ai_tools.py +481 -0
- package/server/tests/nodes/test_android.py +463 -0
- package/server/tests/nodes/test_chat_utility.py +496 -0
- package/server/tests/nodes/test_code_fs_process.py +777 -0
- package/server/tests/nodes/test_document.py +591 -0
- package/server/tests/nodes/test_email.py +311 -0
- package/server/tests/nodes/test_google_workspace.py +764 -0
- package/server/tests/nodes/test_http_proxy.py +399 -0
- package/server/tests/nodes/test_search.py +327 -0
- package/server/tests/nodes/test_specialized_agents.py +590 -0
- package/server/tests/nodes/test_telegram_social.py +596 -0
- package/server/tests/nodes/test_twitter.py +659 -0
- package/server/tests/nodes/test_web_automation.py +461 -0
- package/server/tests/nodes/test_whatsapp.py +437 -0
- package/server/tests/nodes/test_workflow_triggers.py +492 -0
- package/server/tests/services/__init__.py +0 -0
- package/server/tests/services/test_supervisor.py +286 -0
- package/server/tests/test_auto_skill.py +306 -0
- package/server/tests/test_node_spec.py +1020 -0
- package/server/tests/test_parameter_resolver.py +109 -0
- package/server/tests/test_plugin_contract.py +208 -0
- package/server/tests/test_workflow_ops.py +230 -0
- package/workflows/zeenie-agent.json +2 -2
- package/client/dist/assets/index-C2IQ3pBs.js +0 -900
- package/client/dist/assets/index-DFSC53FP.css +0 -1
- package/client/src/components/ClaudeChatModelNode.tsx +0 -18
- package/client/src/components/GeminiChatModelNode.tsx +0 -18
- package/client/src/components/ModelNode.tsx +0 -282
- package/client/src/components/OpenAIChatModelNode.tsx +0 -18
- package/client/src/components/base/BaseChatModelNode.tsx +0 -271
- package/client/src/components/ui/NodeOutputPanel.tsx +0 -1512
- package/client/src/config/antdTheme.ts +0 -186
- package/client/src/factories/baseChatModelFactory.ts +0 -275
- package/client/src/nodeDefinitions/aiAgentNodes.ts +0 -382
- package/client/src/nodeDefinitions/aiModelNodes.ts +0 -281
- package/client/src/nodeDefinitions/androidServiceNodes.ts +0 -383
- package/client/src/nodeDefinitions/apifyNodes.ts +0 -253
- package/client/src/nodeDefinitions/browserNodes.ts +0 -306
- package/client/src/nodeDefinitions/chatNodes.ts +0 -135
- package/client/src/nodeDefinitions/codeNodes.ts +0 -78
- package/client/src/nodeDefinitions/crawleeNodes.ts +0 -254
- package/client/src/nodeDefinitions/documentNodes.ts +0 -404
- package/client/src/nodeDefinitions/emailNodes.ts +0 -120
- package/client/src/nodeDefinitions/filesystemNodes.ts +0 -208
- package/client/src/nodeDefinitions/googleWorkspaceNodes.ts +0 -1529
- package/client/src/nodeDefinitions/index.ts +0 -15
- package/client/src/nodeDefinitions/locationNodes.ts +0 -463
- package/client/src/nodeDefinitions/processNodes.ts +0 -104
- package/client/src/nodeDefinitions/proxyNodes.ts +0 -358
- package/client/src/nodeDefinitions/schedulerNodes.ts +0 -236
- package/client/src/nodeDefinitions/searchNodes.ts +0 -323
- package/client/src/nodeDefinitions/skillNodes.ts +0 -56
- package/client/src/nodeDefinitions/socialNodes.ts +0 -750
- package/client/src/nodeDefinitions/specializedAgentNodes.ts +0 -564
- package/client/src/nodeDefinitions/telegramNodes.ts +0 -350
- package/client/src/nodeDefinitions/toolNodes.ts +0 -276
- package/client/src/nodeDefinitions/twitterNodes.ts +0 -441
- package/client/src/nodeDefinitions/utilityNodes.ts +0 -364
- package/client/src/nodeDefinitions/whatsappNodes.ts +0 -1145
- package/client/src/nodeDefinitions/workflowNodes.ts +0 -95
- package/client/src/nodeDefinitions.ts +0 -179
- package/scripts/build.js +0 -208
- package/scripts/clean.js +0 -77
- package/scripts/daemon.js +0 -451
- package/scripts/dev.js +0 -138
- package/scripts/port_kill.py +0 -189
- package/scripts/start.js +0 -205
- package/scripts/stop.js +0 -61
- package/scripts/sync-version.js +0 -108
- package/scripts/utils.js +0 -352
- package/server/models/nodes.py +0 -511
- package/server/services/handlers/ai.py +0 -628
- package/server/services/handlers/android.py +0 -88
- package/server/services/handlers/apify.py +0 -261
- package/server/services/handlers/browser.py +0 -212
- package/server/services/handlers/calendar.py +0 -448
- package/server/services/handlers/claude_code.py +0 -97
- package/server/services/handlers/code.py +0 -320
- package/server/services/handlers/contacts.py +0 -537
- package/server/services/handlers/crawlee.py +0 -324
- package/server/services/handlers/deep_agent.py +0 -84
- package/server/services/handlers/document.py +0 -625
- package/server/services/handlers/drive.py +0 -465
- package/server/services/handlers/email.py +0 -86
- package/server/services/handlers/filesystem.py +0 -169
- package/server/services/handlers/gmail.py +0 -589
- package/server/services/handlers/http.py +0 -221
- package/server/services/handlers/polyglot.py +0 -105
- package/server/services/handlers/process.py +0 -83
- package/server/services/handlers/proxy.py +0 -326
- package/server/services/handlers/rlm.py +0 -78
- package/server/services/handlers/search.py +0 -385
- package/server/services/handlers/sheets.py +0 -314
- package/server/services/handlers/tasks.py +0 -452
- package/server/services/handlers/telegram.py +0 -244
- package/server/services/handlers/twitter.py +0 -652
- package/server/services/handlers/utility.py +0 -913
- package/server/services/polyglot_client.py +0 -169
- package/workflows/ai-employee-experimental.json +0 -1400
- package/workflows/zeenie-assistant.json +0 -1871
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema.json",
|
|
3
|
+
"style": "radix-nova",
|
|
4
|
+
"rsc": false,
|
|
5
|
+
"tsx": true,
|
|
6
|
+
"tailwind": {
|
|
7
|
+
"config": "tailwind.config.js",
|
|
8
|
+
"css": "src/index.css",
|
|
9
|
+
"baseColor": "neutral",
|
|
10
|
+
"cssVariables": true,
|
|
11
|
+
"prefix": ""
|
|
12
|
+
},
|
|
13
|
+
"iconLibrary": "lucide",
|
|
14
|
+
"rtl": false,
|
|
15
|
+
"aliases": {
|
|
16
|
+
"components": "@/components",
|
|
17
|
+
"utils": "@/lib/utils",
|
|
18
|
+
"ui": "@/components/ui",
|
|
19
|
+
"lib": "@/lib",
|
|
20
|
+
"hooks": "@/hooks"
|
|
21
|
+
},
|
|
22
|
+
"menuColor": "default",
|
|
23
|
+
"menuAccent": "subtle",
|
|
24
|
+
"registries": {}
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{f as u,w as d,x as p,y as f,z as m,F as g,j as a,B as x,L as b}from"./index-D9tZfgvi.js";function S(o){const t=u.c(7),i=d(),r=p(),s=f(),n=m(),l=g();if(!o)return null;let e;return t[0]!==r||t[1]!==n||t[2]!==o||t[3]!==s||t[4]!==l||t[5]!==i?(e={whatsapp:i,android:r,twitter:s,google:n,telegram:l}[o]??null,t[0]=r,t[1]=n,t[2]=o,t[3]=s,t[4]=l,t[5]=i,t[6]=e):e=t[6],e}const y=o=>{const t=u.c(7),{actions:i,loading:r}=o;let s;if(t[0]!==i||t[1]!==r){let l;t[3]!==r?(l=e=>{const c=r===e.key;return a.jsxs(x,{variant:"outline",onClick:e.onClick,disabled:e.disabled||c,style:{backgroundColor:`${e.color}25`,borderColor:`${e.color}60`,color:e.color},children:[c?a.jsx(b,{className:"h-4 w-4 animate-spin"}):e.icon,e.label]},e.key)},t[3]=r,t[4]=l):l=t[4],s=i.filter(j).map(l),t[0]=i,t[1]=r,t[2]=s}else s=t[2];let n;return t[5]!==s?(n=a.jsx("div",{className:"flex justify-center gap-2 border-t border-border pt-3",children:s}),t[5]=s,t[6]=n):n=t[6],n};function j(o){return!o.hidden}export{y as A,S as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as j,j as s,I as p,E as d,n as v,B as c,L as N,h as w,S as y,v as k}from"./index-D9tZfgvi.js";const g=({value:r,onChange:o,onSave:x,onDelete:i,placeholder:h="Enter API key...",loading:n=!1,isStored:e=!1,disabled:a=!1,saveLabel:m="Validate",savedLabel:u="Valid"})=>{const[t,f]=j.useState(!1);return s.jsxs("div",{className:"flex w-full items-stretch gap-1",children:[s.jsxs("div",{className:"relative flex-1",children:[s.jsx(p,{type:t?"text":"password",value:r,onChange:l=>o(l.target.value),placeholder:h,disabled:a,className:"font-mono pr-9"}),s.jsx("button",{type:"button",onClick:()=>f(l=>!l),className:"absolute top-1/2 right-2 -translate-y-1/2 text-muted-foreground hover:text-foreground","aria-label":t?"Hide key":"Show key",children:t?s.jsx(d,{className:"h-4 w-4"}):s.jsx(v,{className:"h-4 w-4"})})]}),s.jsxs(c,{variant:"default",onClick:x,disabled:!r.trim()||a||n,children:[n?s.jsx(N,{className:"h-4 w-4 animate-spin"}):e?s.jsx(w,{className:"h-4 w-4"}):s.jsx(y,{className:"h-4 w-4"}),e?u:m]}),e&&i&&s.jsx(c,{variant:"destructive",size:"icon",onClick:i,disabled:a,children:s.jsx(k,{className:"h-4 w-4"})})]})};export{g as A};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as I,r as c,j as s,A as B,a as P,b as U,D as K,c as z,L as F,d as L,e as T,B as H,R as M,f as V,N as O,C as q,g as G,h as J,i as Q,k as W,l as X}from"./index-D9tZfgvi.js";import{A as Y}from"./ApiKeyInput-Ds7AKFe8.js";import{u as Z,P as ee}from"./RateLimitSection-YYK8sx1T.js";import{A as se}from"./ApiUsageSection-BMNWTe2r.js";const R=u=>{const e=V.c(8),{label:t,value:n,className:a}=u;let l;e[0]!==t?(l=s.jsx("span",{className:"text-xs text-muted-foreground",children:t}),e[0]=t,e[1]=l):l=e[1];const o=`text-lg font-semibold ${a??""}`;let r;e[2]!==o||e[3]!==n?(r=s.jsx("span",{className:o,children:n}),e[2]=o,e[3]=n,e[4]=r):r=e[4];let i;return e[5]!==l||e[6]!==r?(i=s.jsxs("div",{className:"flex flex-col",children:[l,r]}),e[5]=l,e[6]=r,e[7]=i):i=e[7],i},te=({providerId:u,providerName:e})=>{const{getProviderUsageSummary:t,isConnected:n}=I(),[a,l]=c.useState(null),[o,r]=c.useState(!1),[i,f]=c.useState(!1),x=c.useCallback(async()=>{if(n){r(!0);try{const d=await t();l(d.find(h=>h.provider===u)??null)}finally{r(!1)}}},[n,u,t]);return c.useEffect(()=>{i&&x()},[i,x]),s.jsx(B,{type:"single",collapsible:!0,onValueChange:d=>f(d==="usage"),children:s.jsxs(P,{value:"usage",children:[s.jsx(U,{children:s.jsxs("span",{className:"flex items-center gap-2",children:[s.jsx(K,{className:"h-4 w-4"})," Usage & Costs"]})}),s.jsx(z,{children:o?s.jsx("div",{className:"flex justify-center p-4",children:s.jsx(F,{className:"h-4 w-4 animate-spin text-muted-foreground"})}):!a||a.execution_count===0?s.jsx(L,{variant:"info",children:s.jsxs(T,{children:["No usage data yet for ",e]})}):s.jsxs("div",{className:"flex w-full flex-col gap-4",children:[s.jsxs("div",{className:"flex flex-wrap gap-4",children:[s.jsx(R,{label:"Total Tokens",value:a.total_tokens.toLocaleString(),className:"text-dracula-cyan"}),s.jsx(R,{label:"Total Cost",value:`$${a.total_cost.toFixed(4)}`,className:"text-dracula-green"}),s.jsx(R,{label:"Executions",value:a.execution_count,className:"text-dracula-purple"})]}),s.jsxs("div",{className:"overflow-hidden rounded-md border border-border",children:[s.jsxs("div",{className:"grid grid-cols-2 divide-x divide-border border-b border-border",children:[s.jsxs("div",{className:"px-3 py-2 text-sm",children:[s.jsx("div",{className:"text-xs text-muted-foreground",children:"Input Tokens"}),s.jsxs("div",{children:[a.total_input_tokens.toLocaleString()," ",s.jsxs("span",{className:"ml-1 text-dracula-green",children:["($",a.total_input_cost.toFixed(4),")"]})]})]}),s.jsxs("div",{className:"px-3 py-2 text-sm",children:[s.jsx("div",{className:"text-xs text-muted-foreground",children:"Output Tokens"}),s.jsxs("div",{children:[a.total_output_tokens.toLocaleString()," ",s.jsxs("span",{className:"ml-1 text-dracula-green",children:["($",a.total_output_cost.toFixed(4),")"]})]})]})]}),a.total_cache_cost>0&&s.jsxs("div",{className:"px-3 py-2 text-sm",children:[s.jsx("span",{className:"text-xs text-muted-foreground",children:"Cache Cost: "}),s.jsxs("span",{className:"text-dracula-green",children:["$",a.total_cache_cost.toFixed(4)]})]})]}),a.models.length>1&&s.jsxs("div",{className:"overflow-hidden rounded-md border border-border",children:[s.jsx("div",{className:"border-b border-border bg-muted px-3 py-1.5 text-xs font-semibold",children:"By Model"}),s.jsx("div",{className:"divide-y divide-border",children:a.models.map(d=>s.jsxs("div",{className:"grid grid-cols-[1fr_auto] items-center gap-3 px-3 py-2 text-sm",children:[s.jsx("code",{className:"text-xs",children:d.model}),s.jsxs("span",{className:"text-dracula-green",children:["$",d.total_cost.toFixed(4)]})]},d.model))})]}),s.jsxs(H,{size:"sm",variant:"outline",onClick:x,disabled:o,children:[o?s.jsx(F,{className:"h-3 w-3 animate-spin"}):s.jsx(M,{className:"h-3 w-3"}),"Refresh"]})]})})]})})},oe=u=>{const e=V.c(56),{config:t,visible:n}=u,a=Z(t,n),l=t.fields?.[0],[o,r]=c.useState(""),[i,f]=c.useState(a.stored);let x,d;e[0]!==l||e[1]!==a.form||e[2]!==a.stored?(x=()=>{if(a.stored&&l){const m=a.form.getFieldValue(l.key);m&&(r(m),f(!0))}},d=[a.stored,l,a.form],e[0]=l,e[1]=a.form,e[2]=a.stored,e[3]=x,e[4]=d):(x=e[3],d=e[4]),c.useEffect(x,d);let h;e[5]===Symbol.for("react.memo_cache_sentinel")?(h=()=>{r("")},e[5]=h):h=e[5];let $;e[6]!==t.id?($=[t.id],e[6]=t.id,e[7]=$):$=e[7],c.useEffect(h,$);let p;e[8]!==t.color?(p={color:t.color},e[8]=t.color,e[9]=p):p=e[9];let g;e[10]!==t.iconRef?(g=s.jsx(O,{icon:t.iconRef,className:"h-12 w-12 text-2xl"}),e[10]=t.iconRef,e[11]=g):g=e[11];let j;e[12]!==p||e[13]!==g?(j=s.jsx("div",{className:"rounded-lg bg-tint-soft",style:p,children:g}),e[12]=p,e[13]=g,e[14]=j):j=e[14];let v;e[15]!==t.name?(v=s.jsx(q,{className:"text-lg",children:t.name}),e[15]=t.name,e[16]=v):v=e[16];let N;e[17]!==j||e[18]!==v?(N=s.jsxs("div",{className:"flex items-center gap-3",children:[j,v]}),e[17]=j,e[18]=v,e[19]=N):N=e[19];let b;e[20]!==i?(b=i&&s.jsxs(G,{variant:"success",className:"gap-1",children:[s.jsx(J,{className:"h-3 w-3"}),"Connected"]}),e[20]=i,e[21]=b):b=e[21];let y;e[22]!==b||e[23]!==N?(y=s.jsxs(Q,{className:"flex flex-row items-center justify-between gap-3 space-y-0 pb-3",children:[N,b]}),e[22]=b,e[23]=N,e[24]=y):y=e[24];let C;e[25]!==t.id||e[26]!==l||e[27]!==o||e[28]!==a.actions||e[29]!==a.form||e[30]!==a.loading||e[31]!==i?(C=l&&s.jsx(Y,{value:o,onChange:m=>{r(m),a.form.setFieldValue(l.key,m),f(!1)},onSave:()=>a.actions.validate(t.id,o.trim()).then(m=>{m?.isValid&&f(!0)}),onDelete:i?()=>{a.actions.remove(t.id),r(""),f(!1)}:void 0,placeholder:l.placeholder,loading:a.loading==="validate",isStored:i}),e[25]=t.id,e[26]=l,e[27]=o,e[28]=a.actions,e[29]=a.form,e[30]=a.loading,e[31]=i,e[32]=C):C=e[32];let S;e[33]!==C?(S=s.jsx(W,{children:C}),e[33]=C,e[34]=S):S=e[34];let _;e[35]!==y||e[36]!==S?(_=s.jsxs(X,{children:[y,S]}),e[35]=y,e[36]=S,e[37]=_):_=e[37];let w;e[38]!==a.error?(w=a.error&&s.jsx(L,{variant:"destructive",children:s.jsx(T,{children:a.error})}),e[38]=a.error,e[39]=w):w=e[39];let A;e[40]!==t.hasDefaults||e[41]!==t.id?(A=t.hasDefaults&&s.jsx(ee,{providerId:t.id}),e[40]=t.hasDefaults,e[41]=t.id,e[42]=A):A=e[42];let k;e[43]!==t.hasDefaults||e[44]!==t.id||e[45]!==t.name?(k=t.hasDefaults&&s.jsx(te,{providerId:t.id,providerName:t.name}),e[43]=t.hasDefaults,e[44]=t.id,e[45]=t.name,e[46]=k):k=e[46];let D;e[47]!==t.name||e[48]!==t.usageService?(D=t.usageService&&s.jsx(se,{service:t.usageService,serviceName:t.name}),e[47]=t.name,e[48]=t.usageService,e[49]=D):D=e[49];let E;return e[50]!==_||e[51]!==w||e[52]!==A||e[53]!==k||e[54]!==D?(E=s.jsxs("div",{className:"flex flex-col gap-5 p-5",children:[_,w,A,k,D]}),e[50]=_,e[51]=w,e[52]=A,e[53]=k,e[54]=D,e[55]=E):E=e[55],E};export{oe as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as h,r as x,j as e,g as u,A as g,a as v,b as N,D as b,c as y,L as f,d as w,e as A,B as C,R as _,f as R}from"./index-D9tZfgvi.js";const $=({service:d,serviceName:s})=>{const{getAPIUsageSummary:o,isConnected:n}=h(),[a,l]=x.useState(null),[c,t]=x.useState(!1),r=x.useCallback(async()=>{if(n){t(!0);try{const i=await o(d);l(i.find(p=>p.service===d)??null)}finally{t(!1)}}},[n,d,o]);x.useEffect(()=>{r()},[r]);const j=a?e.jsxs(u,{variant:"success",children:["$",a.total_cost.toFixed(4)]}):null;return e.jsx(g,{type:"single",collapsible:!0,children:e.jsxs(v,{value:"usage",children:[e.jsx(N,{children:e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(b,{className:"h-4 w-4 text-dracula-yellow"}),"API Usage & Costs ",j]})}),e.jsx(y,{children:c?e.jsx("div",{className:"flex justify-center p-4",children:e.jsx(f,{className:"h-4 w-4 animate-spin text-muted-foreground"})}):a?e.jsxs("div",{className:"flex w-full flex-col gap-4",children:[e.jsxs("div",{className:"flex flex-wrap gap-4",children:[e.jsx(m,{label:"Total Cost",value:`$${a.total_cost.toFixed(4)}`,className:"text-dracula-green"}),e.jsx(m,{label:"API Calls",value:a.execution_count,className:"text-dracula-cyan"}),e.jsx(m,{label:"Resources",value:a.total_resources,className:"text-dracula-purple"})]}),a.operations?.length>0&&e.jsxs("div",{className:"overflow-hidden rounded-md border border-border",children:[e.jsx("div",{className:"border-b border-border bg-muted px-3 py-1.5 text-xs font-semibold",children:"Operations Breakdown"}),e.jsx("div",{className:"divide-y divide-border",children:a.operations.map(i=>e.jsxs("div",{className:"grid grid-cols-[1fr_auto] items-center gap-3 px-3 py-2 text-sm",children:[e.jsx("code",{className:"text-xs text-muted-foreground",children:i.operation}),e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsxs(u,{variant:"outline",children:[i.resource_count," resources"]}),e.jsxs(u,{variant:"success",children:["$",i.total_cost.toFixed(4)]})]})]},i.operation))})]}),e.jsxs(C,{size:"sm",variant:"outline",onClick:r,disabled:c,children:[c?e.jsx(f,{className:"h-3 w-3 animate-spin"}):e.jsx(_,{className:"h-3 w-3"}),"Refresh"]})]}):e.jsx(w,{variant:"info",children:e.jsxs(A,{children:["No usage data yet. Use ",s," nodes in your workflows to track costs."]})})})]})})},m=d=>{const s=R.c(8),{label:o,value:n,className:a}=d;let l;s[0]!==o?(l=e.jsx("span",{className:"text-xs text-muted-foreground",children:o}),s[0]=o,s[1]=l):l=s[1];const c=`text-lg font-semibold ${a??""}`;let t;s[2]!==c||s[3]!==n?(t=e.jsx("span",{className:c,children:n}),s[2]=c,s[3]=n,s[4]=t):t=s[4];let r;return s[5]!==l||s[6]!==t?(r=e.jsxs("div",{className:"flex flex-col",children:[l,t]}),s[5]=l,s[6]=t,s[7]=r):r=s[7],r};export{$ as A};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{P as B,a7 as M,a9 as v,a6 as Y,aa as G,o as W,u as X,r as n,M as Z,O as z,j as e,N as J,V as Q,W as m,X as d,Y as c,Z as ee,_ as p,$ as se,a0 as ae,a1 as re,a2 as oe,a4 as u,I as j,E as te,n as le,a3 as ie,d as ne,e as me,B as T,L as k}from"./index-D9tZfgvi.js";import{S as de}from"./StatusCard-DuYA5hJR.js";const R=[{label:"Gmail",value:"gmail"},{label:"Outlook / Office 365",value:"outlook"},{label:"Yahoo Mail",value:"yahoo"},{label:"iCloud Mail",value:"icloud"},{label:"ProtonMail (Bridge)",value:"protonmail"},{label:"Fastmail",value:"fastmail"},{label:"Custom / Self-hosted",value:"custom"}],ce={gmail:"Use an App Password from Google Account > Security > 2-Step Verification.",outlook:"Use your account password or an App Password.",yahoo:"Use an App Password from Yahoo Account Security.",icloud:"Use an App-Specific Password from your Apple ID.",protonmail:"Requires ProtonMail Bridge running locally (127.0.0.1).",fastmail:"Use an App Password from Settings > Privacy & Security.",custom:"Enter credentials for your self-hosted IMAP/SMTP server below."},pe=R.map(x=>x.value);function ue(x){return B({provider:Y(pe),address:v().min(1,"Email address is required").pipe(G("Enter a valid email address")),password:x?v().min(1,"Password is required"):v().optional(),imapHost:v().optional(),imapPort:M().int().min(1).max(65535).optional(),smtpHost:v().optional(),smtpPort:M().int().min(1).max(65535).optional()}).superRefine((h,o)=>{h.provider==="custom"&&(h.imapHost?.trim()||o.addIssue({code:"custom",path:["imapHost"],message:"IMAP host is required for custom provider"}),h.smtpHost?.trim()||o.addIssue({code:"custom",path:["smtpHost"],message:"SMTP host is required for custom provider"}))})}const F={provider:"gmail",address:"",password:"",imapHost:"",imapPort:993,smtpHost:"",smtpPort:465},fe=({config:x,visible:h})=>{const o=W(),{saveApiKey:t,getStoredApiKey:f,hasStoredKey:V,removeApiKey:l,isConnected:N}=X(),[i,g]=n.useState(!1),[S,y]=n.useState(""),[P,w]=n.useState(null),[A,b]=n.useState(null),[_,O]=n.useState(!1),U=n.useMemo(()=>ue(!i),[i]),r=Z({resolver:z(U),defaultValues:F,mode:"onSubmit"}),C=r.watch("provider");n.useEffect(()=>{if(!h||!N)return;let s=!1;return(async()=>{try{const[a,H,K,q,E,$,I]=await Promise.all([f("email_provider"),f("email_address"),V("email_password"),f("email_imap_host"),f("email_imap_port"),f("email_smtp_host"),f("email_smtp_port")]);if(s)return;r.reset({provider:a||"gmail",address:H||"",password:"",imapHost:q||"",imapPort:E?parseInt(E,10):993,smtpHost:$||"",smtpPort:I?parseInt(I,10):465}),y(H||""),g(K)}catch{s||g(!1)}})(),()=>{s=!0}},[h,N]);const L=async s=>{w("save"),b(null);try{await t("email_provider",s.provider),await t("email_address",s.address.trim()),s.password?.trim()&&await t("email_password",s.password.trim()),s.provider==="custom"&&(s.imapHost&&await t("email_imap_host",s.imapHost.trim()),s.imapPort!=null&&await t("email_imap_port",String(s.imapPort)),s.smtpHost&&await t("email_smtp_host",s.smtpHost.trim()),s.smtpPort!=null&&await t("email_smtp_port",String(s.smtpPort))),g(!0),y(s.address.trim()),r.setValue("password","")}catch(a){b(a.message||"Failed to save email credentials")}finally{w(null)}},D=async()=>{w("remove"),b(null);try{await Promise.all([l("email_password"),l("email_address"),l("email_provider"),l("email_imap_host"),l("email_imap_port"),l("email_smtp_host"),l("email_smtp_port")]),g(!1),y(""),r.reset(F)}catch(s){b(s.message||"Failed to remove credentials")}finally{w(null)}};return e.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-4 p-5",children:[e.jsx(de,{icon:e.jsx(J,{icon:x.iconRef,className:"h-6 w-6 text-2xl"}),title:x.name,status:{stored:i,address:S},rows:[{label:"Status",ok:s=>s.stored,trueText:"Configured",falseText:"Not configured"},...i&&S?[{label:"Account",ok:()=>!0,trueText:S,falseText:""}]:[]]}),e.jsx(Q,{...r,children:e.jsxs("form",{id:"email-form",onSubmit:r.handleSubmit(L),className:"flex flex-col gap-4",children:[e.jsx(m,{control:r.control,name:"provider",render:({field:s})=>e.jsxs(d,{children:[e.jsx(c,{children:"Provider"}),e.jsxs(ee,{value:s.value,onValueChange:s.onChange,children:[e.jsx(p,{children:e.jsx(se,{children:e.jsx(ae,{placeholder:"Choose a provider"})})}),e.jsx(re,{children:R.map(a=>e.jsx(oe,{value:a.value,children:a.label},a.value))})]}),e.jsx(u,{})]})}),e.jsx(m,{control:r.control,name:"address",render:({field:s})=>e.jsxs(d,{children:[e.jsx(c,{children:"Email Address"}),e.jsx(p,{children:e.jsx(j,{placeholder:"you@example.com",...s})}),e.jsx(u,{})]})}),e.jsx(m,{control:r.control,name:"password",render:({field:s})=>e.jsxs(d,{children:[e.jsxs(c,{className:"flex items-center gap-2",children:["Password",i&&e.jsx("span",{className:"text-xs font-normal text-muted-foreground",children:"(leave blank to keep existing)"})]}),e.jsx(p,{children:e.jsxs("div",{className:"relative",children:[e.jsx(j,{type:_?"text":"password",placeholder:i?"••••••••":"App password or account password",className:"font-mono pr-9",...s}),e.jsx("button",{type:"button",onClick:()=>O(a=>!a),className:"absolute top-1/2 right-2 -translate-y-1/2 text-muted-foreground hover:text-foreground","aria-label":_?"Hide password":"Show password",children:_?e.jsx(te,{className:"h-4 w-4"}):e.jsx(le,{className:"h-4 w-4"})})]})}),e.jsx(ie,{children:ce[C]}),e.jsx(u,{})]})}),C==="custom"&&e.jsxs("div",{className:"rounded-md border border-border bg-muted p-3",children:[e.jsx("div",{className:"mb-3 text-sm font-medium",children:"Custom IMAP / SMTP"}),e.jsxs("div",{className:"flex gap-3",children:[e.jsx(m,{control:r.control,name:"imapHost",render:({field:s})=>e.jsxs(d,{className:"flex-[2]",children:[e.jsx(c,{children:"IMAP Host"}),e.jsx(p,{children:e.jsx(j,{placeholder:"imap.example.com",...s})}),e.jsx(u,{})]})}),e.jsx(m,{control:r.control,name:"imapPort",render:({field:s})=>e.jsxs(d,{className:"flex-1",children:[e.jsx(c,{children:"IMAP Port"}),e.jsx(p,{children:e.jsx(j,{type:"number",min:1,max:65535,...s,value:s.value??"",onChange:a=>s.onChange(a.target.value===""?void 0:Number(a.target.value))})}),e.jsx(u,{})]})})]}),e.jsxs("div",{className:"mt-3 flex gap-3",children:[e.jsx(m,{control:r.control,name:"smtpHost",render:({field:s})=>e.jsxs(d,{className:"flex-[2]",children:[e.jsx(c,{children:"SMTP Host"}),e.jsx(p,{children:e.jsx(j,{placeholder:"smtp.example.com",...s})}),e.jsx(u,{})]})}),e.jsx(m,{control:r.control,name:"smtpPort",render:({field:s})=>e.jsxs(d,{className:"flex-1",children:[e.jsx(c,{children:"SMTP Port"}),e.jsx(p,{children:e.jsx(j,{type:"number",min:1,max:65535,...s,value:s.value??"",onChange:a=>s.onChange(a.target.value===""?void 0:Number(a.target.value))})}),e.jsx(u,{})]})})]})]})]})}),A&&e.jsx(ne,{variant:"destructive",children:e.jsx(me,{children:A})}),e.jsx("div",{className:"flex-1"}),e.jsxs("div",{className:"flex justify-center gap-2 border-t border-border pt-3",children:[e.jsxs(T,{type:"submit",form:"email-form",variant:"outline",disabled:P==="save",style:{backgroundColor:`${o.dracula.green}25`,borderColor:`${o.dracula.green}60`,color:o.dracula.green},children:[P==="save"&&e.jsx(k,{className:"h-4 w-4 animate-spin"}),"Save"]}),i&&e.jsxs(T,{type:"button",variant:"outline",onClick:D,disabled:P==="remove",style:{backgroundColor:`${o.dracula.pink}25`,borderColor:`${o.dracula.pink}60`,color:o.dracula.pink},children:[P==="remove"&&e.jsx(k,{className:"h-4 w-4 animate-spin"}),"Remove"]})]})]})};export{fe as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{f as H,j as l,r as D,m as z,I as Y,E as G,n as J,o as K,B as M,L as Q,p as W,d as X,e as Z,N as ee}from"./index-D9tZfgvi.js";import{u as te}from"./RateLimitSection-YYK8sx1T.js";import{A as se,u as le}from"./ActionBar-vzPpSR77.js";import{S as ae}from"./StatusCard-DuYA5hJR.js";import{A as oe}from"./ApiUsageSection-BMNWTe2r.js";const re=n=>{const e=H.c(7),{fields:s,form:d}=n;let t;if(e[0]!==s||e[1]!==d){let r;e[3]!==d?(r=o=>l.jsx(ne,{field:o,form:d},o.key),e[3]=d,e[4]=r):r=e[4],t=s.map(r),e[0]=s,e[1]=d,e[2]=t}else t=e[2];let c;return e[5]!==t?(c=l.jsx("div",{className:"flex w-full flex-col gap-3",children:t}),e[5]=t,e[6]=c):c=e[6],c},ne=({field:n,form:e})=>{const[s,d]=D.useState(!1),t=e.getFieldValue(n.key)??"",[c,r]=D.useState(t),o=!!n.secret;return D.useEffect(()=>{!c&&t&&r(t)},[t]),l.jsxs("div",{className:"grid gap-1.5",children:[l.jsxs(z,{htmlFor:`field-${n.key}`,className:"text-xs",children:[n.label,n.required&&l.jsx("span",{className:"ml-1 text-destructive",children:"*"})]}),l.jsxs("div",{className:"relative",children:[l.jsx(Y,{id:`field-${n.key}`,type:o&&!s?"password":"text",value:c,onChange:i=>{const u=i.target.value;r(u),e.setFieldValue(n.key,u)},placeholder:n.placeholder,className:o?"font-mono pr-9":"font-mono"}),o&&l.jsx("button",{type:"button",onClick:()=>d(i=>!i),className:"absolute top-1/2 right-2 -translate-y-1/2 text-muted-foreground hover:text-foreground","aria-label":s?"Hide value":"Show value",children:s?l.jsx(G,{className:"h-4 w-4"}):l.jsx(J,{className:"h-4 w-4"})})]})]})},ce=n=>{const e=H.c(59),{config:s,form:d,connected:t,stored:c,loading:r,error:o,icon:i,onSaveCredentials:u,onLogin:m,onLogout:x,onRefresh:g,extraSection:h}=n,a=K();let p;e[0]!==t?(p={label:"Status",ok:()=>t,trueText:"Connected",falseText:"Not Connected"},e[0]=t,e[1]=p):p=e[1];let f;e[2]!==c?(f={label:"Credentials",ok:()=>c,trueText:"Configured",falseText:"Not configured"},e[2]=c,e[3]=f):f=e[3];let v;e[4]!==p||e[5]!==f?(v=[p,f],e[4]=p,e[5]=f,e[6]=v):v=e[6];const T=v,V=`Login with ${s.name}`,_=!c;let j;e[7]!==t||e[8]!==m||e[9]!==V||e[10]!==_||e[11]!==a.dracula.green?(j={key:"login",label:V,color:a.dracula.green,onClick:m,disabled:_,hidden:t},e[7]=t,e[8]=m,e[9]=V,e[10]=_,e[11]=a.dracula.green,e[12]=j):j=e[12];const q=!t;let k;e[13]!==x||e[14]!==q||e[15]!==a.dracula.pink?(k={key:"logout",label:"Disconnect",color:a.dracula.pink,onClick:x,hidden:q},e[13]=x,e[14]=q,e[15]=a.dracula.pink,e[16]=k):k=e[16];let $;e[17]===Symbol.for("react.memo_cache_sentinel")?($=l.jsx(W,{className:"h-4 w-4"}),e[17]=$):$=e[17];let b;e[18]!==g||e[19]!==a.dracula.cyan?(b={key:"refresh",label:"Refresh",color:a.dracula.cyan,onClick:g,icon:$},e[18]=g,e[19]=a.dracula.cyan,e[20]=b):b=e[20];let A;e[21]!==b||e[22]!==j||e[23]!==k?(A=[j,k,b],e[21]=b,e[22]=j,e[23]=k,e[24]=A):A=e[24];const B=A,E=r==="save";let y;e[25]!==s.name||e[26]!==i||e[27]!==T?(y=l.jsx(ae,{icon:i,title:s.name,rows:T,status:null}),e[25]=s.name,e[26]=i,e[27]=T,e[28]=y):y=e[28];let N;e[29]!==s.callbackUrl||e[30]!==s.fields||e[31]!==s.instructions||e[32]!==t||e[33]!==d||e[34]!==E||e[35]!==u||e[36]!==a.dracula.purple?(N=!t&&s.fields&&l.jsxs("div",{className:"flex w-full flex-col gap-3",children:[l.jsx(re,{fields:s.fields,form:d}),l.jsxs(M,{variant:"outline",onClick:u,disabled:E,style:{backgroundColor:`${a.dracula.purple}25`,borderColor:`${a.dracula.purple}60`,color:a.dracula.purple},children:[E&&l.jsx(Q,{className:"h-4 w-4 animate-spin"}),"Save Credentials"]}),s.instructions&&l.jsxs("div",{className:"text-xs leading-relaxed text-muted-foreground",children:[s.instructions,s.callbackUrl&&l.jsxs(l.Fragment,{children:[l.jsx("br",{}),"Callback URL:"," ",l.jsx("code",{className:"text-dracula-cyan",children:s.callbackUrl})]})]})]}),e[29]=s.callbackUrl,e[30]=s.fields,e[31]=s.instructions,e[32]=t,e[33]=d,e[34]=E,e[35]=u,e[36]=a.dracula.purple,e[37]=N):N=e[37];let C;e[38]!==o?(C=o&&l.jsx(X,{variant:"destructive",children:l.jsx(Z,{children:o})}),e[38]=o,e[39]=C):C=e[39];const I=`${a.dracula.cyan}10`,O=`${a.dracula.cyan}30`;let S;e[40]!==I||e[41]!==O?(S={backgroundColor:I,borderColor:O},e[40]=I,e[41]=O,e[42]=S):S=e[42];const P=t?`Your ${s.name} account is connected.`:c?"Click Login to authorize.":"Enter your credentials above to get started.";let w;e[43]!==P?(w=l.jsx("div",{className:"text-sm leading-relaxed text-muted-foreground",children:P}),e[43]=P,e[44]=w):w=e[44];let R;e[45]!==S||e[46]!==w?(R=l.jsx("div",{className:"rounded-md border p-3",style:S,children:w}),e[45]=S,e[46]=w,e[47]=R):R=e[47];let F;e[48]===Symbol.for("react.memo_cache_sentinel")?(F=l.jsx("div",{className:"flex-1"}),e[48]=F):F=e[48];let L;e[49]!==B||e[50]!==r?(L=l.jsx(se,{actions:B,loading:r}),e[49]=B,e[50]=r,e[51]=L):L=e[51];let U;return e[52]!==h||e[53]!==y||e[54]!==N||e[55]!==C||e[56]!==R||e[57]!==L?(U=l.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-4",children:[y,N,C,R,h,F,L]}),e[52]=h,e[53]=y,e[54]=N,e[55]=C,e[56]=R,e[57]=L,e[58]=U):U=e[58],U},xe=n=>{const e=H.c(25),{config:s,visible:d}=n,t=te(s,d),r=!!le(s.statusHook)?.connected;let o;e[0]!==s.iconRef?(o=l.jsx(ee,{icon:s.iconRef,className:"h-6 w-6 text-2xl"}),e[0]=s.iconRef,e[1]=o):o=e[1];let i;e[2]!==s.fields||e[3]!==t?(i=()=>{const a=s.fields?.find(f=>f.required&&!t.form.getFieldValue(f.key)?.trim());if(a){t.setError(`${a.label} is required`);return}const p=t.form.getFieldsValue();t.execute("save",async()=>{for(const f of s.fields){const v=p[f.key]?.trim();v&&await t.actions.save(f.key,v)}return t.setStored(!0),{success:!0}})},e[2]=s.fields,e[3]=t,e[4]=i):i=e[4];let u,m,x;e[5]!==t.actions?(u=()=>t.actions.oauthLogin(),m=()=>t.actions.oauthLogout(),x=()=>t.actions.oauthRefresh(),e[5]=t.actions,e[6]=u,e[7]=m,e[8]=x):(u=e[6],m=e[7],x=e[8]);let g;e[9]!==s.name||e[10]!==s.usageService?(g=s.usageService&&l.jsx(oe,{service:s.usageService,serviceName:s.name}),e[9]=s.name,e[10]=s.usageService,e[11]=g):g=e[11];let h;return e[12]!==s||e[13]!==r||e[14]!==t.error||e[15]!==t.form||e[16]!==t.loading||e[17]!==t.stored||e[18]!==o||e[19]!==i||e[20]!==u||e[21]!==m||e[22]!==x||e[23]!==g?(h=l.jsx("div",{className:"flex min-h-0 flex-1 flex-col p-5",children:l.jsx(ce,{config:s,form:t.form,connected:r,stored:t.stored,loading:t.loading,error:t.error,icon:o,onSaveCredentials:i,onLogin:u,onLogout:m,onRefresh:x,extraSection:g})}),e[12]=s,e[13]=r,e[14]=t.error,e[15]=t.form,e[16]=t.loading,e[17]=t.stored,e[18]=o,e[19]=i,e[20]=u,e[21]=m,e[22]=x,e[23]=g,e[24]=h):h=e[24],h};export{xe as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{q as N,j as w,h as ge,L as Ce,Q as Ee,r as v,d as k,T as X,s as K,e as z,t as q,o as pe,N as we}from"./index-D9tZfgvi.js";import{A as Re}from"./ApiKeyInput-Ds7AKFe8.js";import{u as Me,R as ye}from"./RateLimitSection-YYK8sx1T.js";import{u as Ae,A as Ne}from"./ActionBar-vzPpSR77.js";import{S as xe}from"./StatusCard-DuYA5hJR.js";var Se=Object.defineProperty,T=Object.getOwnPropertySymbols,Z=Object.prototype.hasOwnProperty,J=Object.prototype.propertyIsEnumerable,Y=(a,l,o)=>l in a?Se(a,l,{enumerable:!0,configurable:!0,writable:!0,value:o}):a[l]=o,j=(a,l)=>{for(var o in l||(l={}))Z.call(l,o)&&Y(a,o,l[o]);if(T)for(var o of T(l))J.call(l,o)&&Y(a,o,l[o]);return a},B=(a,l)=>{var o={};for(var i in a)Z.call(a,i)&&l.indexOf(i)<0&&(o[i]=a[i]);if(a!=null&&T)for(var i of T(a))l.indexOf(i)<0&&J.call(a,i)&&(o[i]=a[i]);return o};var b;(a=>{const l=class p{constructor(e,t,s,r){if(this.version=e,this.errorCorrectionLevel=t,this.modules=[],this.isFunction=[],e<p.MIN_VERSION||e>p.MAX_VERSION)throw new RangeError("Version value out of range");if(r<-1||r>7)throw new RangeError("Mask value out of range");this.size=e*4+17;let n=[];for(let c=0;c<this.size;c++)n.push(!1);for(let c=0;c<this.size;c++)this.modules.push(n.slice()),this.isFunction.push(n.slice());this.drawFunctionPatterns();const u=this.addEccAndInterleave(s);if(this.drawCodewords(u),r==-1){let c=1e9;for(let C=0;C<8;C++){this.applyMask(C),this.drawFormatBits(C);const d=this.getPenaltyScore();d<c&&(r=C,c=d),this.applyMask(C)}}h(0<=r&&r<=7),this.mask=r,this.applyMask(r),this.drawFormatBits(r),this.isFunction=[]}static encodeText(e,t){const s=a.QrSegment.makeSegments(e);return p.encodeSegments(s,t)}static encodeBinary(e,t){const s=a.QrSegment.makeBytes(e);return p.encodeSegments([s],t)}static encodeSegments(e,t,s=1,r=40,n=-1,u=!0){if(!(p.MIN_VERSION<=s&&s<=r&&r<=p.MAX_VERSION)||n<-1||n>7)throw new RangeError("Invalid value");let c,C;for(c=s;;c++){const m=p.getNumDataCodewords(c,t)*8,y=M.getTotalBits(e,c);if(y<=m){C=y;break}if(c>=r)throw new RangeError("Data too long")}for(const m of[p.Ecc.MEDIUM,p.Ecc.QUARTILE,p.Ecc.HIGH])u&&C<=p.getNumDataCodewords(c,m)*8&&(t=m);let d=[];for(const m of e){o(m.mode.modeBits,4,d),o(m.numChars,m.mode.numCharCountBits(c),d);for(const y of m.getData())d.push(y)}h(d.length==C);const g=p.getNumDataCodewords(c,t)*8;h(d.length<=g),o(0,Math.min(4,g-d.length),d),o(0,(8-d.length%8)%8,d),h(d.length%8==0);for(let m=236;d.length<g;m^=253)o(m,8,d);let R=[];for(;R.length*8<d.length;)R.push(0);return d.forEach((m,y)=>R[y>>>3]|=m<<7-(y&7)),new p(c,t,R,n)}getModule(e,t){return 0<=e&&e<this.size&&0<=t&&t<this.size&&this.modules[t][e]}getModules(){return this.modules}drawFunctionPatterns(){for(let s=0;s<this.size;s++)this.setFunctionModule(6,s,s%2==0),this.setFunctionModule(s,6,s%2==0);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);const e=this.getAlignmentPatternPositions(),t=e.length;for(let s=0;s<t;s++)for(let r=0;r<t;r++)s==0&&r==0||s==0&&r==t-1||s==t-1&&r==0||this.drawAlignmentPattern(e[s],e[r]);this.drawFormatBits(0),this.drawVersion()}drawFormatBits(e){const t=this.errorCorrectionLevel.formatBits<<3|e;let s=t;for(let n=0;n<10;n++)s=s<<1^(s>>>9)*1335;const r=(t<<10|s)^21522;h(r>>>15==0);for(let n=0;n<=5;n++)this.setFunctionModule(8,n,i(r,n));this.setFunctionModule(8,7,i(r,6)),this.setFunctionModule(8,8,i(r,7)),this.setFunctionModule(7,8,i(r,8));for(let n=9;n<15;n++)this.setFunctionModule(14-n,8,i(r,n));for(let n=0;n<8;n++)this.setFunctionModule(this.size-1-n,8,i(r,n));for(let n=8;n<15;n++)this.setFunctionModule(8,this.size-15+n,i(r,n));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let e=this.version;for(let s=0;s<12;s++)e=e<<1^(e>>>11)*7973;const t=this.version<<12|e;h(t>>>18==0);for(let s=0;s<18;s++){const r=i(t,s),n=this.size-11+s%3,u=Math.floor(s/3);this.setFunctionModule(n,u,r),this.setFunctionModule(u,n,r)}}drawFinderPattern(e,t){for(let s=-4;s<=4;s++)for(let r=-4;r<=4;r++){const n=Math.max(Math.abs(r),Math.abs(s)),u=e+r,c=t+s;0<=u&&u<this.size&&0<=c&&c<this.size&&this.setFunctionModule(u,c,n!=2&&n!=4)}}drawAlignmentPattern(e,t){for(let s=-2;s<=2;s++)for(let r=-2;r<=2;r++)this.setFunctionModule(e+r,t+s,Math.max(Math.abs(r),Math.abs(s))!=1)}setFunctionModule(e,t,s){this.modules[t][e]=s,this.isFunction[t][e]=!0}addEccAndInterleave(e){const t=this.version,s=this.errorCorrectionLevel;if(e.length!=p.getNumDataCodewords(t,s))throw new RangeError("Invalid argument");const r=p.NUM_ERROR_CORRECTION_BLOCKS[s.ordinal][t],n=p.ECC_CODEWORDS_PER_BLOCK[s.ordinal][t],u=Math.floor(p.getNumRawDataModules(t)/8),c=r-u%r,C=Math.floor(u/r);let d=[];const g=p.reedSolomonComputeDivisor(n);for(let m=0,y=0;m<r;m++){let x=e.slice(y,y+C-n+(m<c?0:1));y+=x.length;const _=p.reedSolomonComputeRemainder(x,g);m<c&&x.push(0),d.push(x.concat(_))}let R=[];for(let m=0;m<d[0].length;m++)d.forEach((y,x)=>{(m!=C-n||x>=c)&&R.push(y[m])});return h(R.length==u),R}drawCodewords(e){if(e.length!=Math.floor(p.getNumRawDataModules(this.version)/8))throw new RangeError("Invalid argument");let t=0;for(let s=this.size-1;s>=1;s-=2){s==6&&(s=5);for(let r=0;r<this.size;r++)for(let n=0;n<2;n++){const u=s-n,C=(s+1&2)==0?this.size-1-r:r;!this.isFunction[C][u]&&t<e.length*8&&(this.modules[C][u]=i(e[t>>>3],7-(t&7)),t++)}}h(t==e.length*8)}applyMask(e){if(e<0||e>7)throw new RangeError("Mask value out of range");for(let t=0;t<this.size;t++)for(let s=0;s<this.size;s++){let r;switch(e){case 0:r=(s+t)%2==0;break;case 1:r=t%2==0;break;case 2:r=s%3==0;break;case 3:r=(s+t)%3==0;break;case 4:r=(Math.floor(s/3)+Math.floor(t/2))%2==0;break;case 5:r=s*t%2+s*t%3==0;break;case 6:r=(s*t%2+s*t%3)%2==0;break;case 7:r=((s+t)%2+s*t%3)%2==0;break;default:throw new Error("Unreachable")}!this.isFunction[t][s]&&r&&(this.modules[t][s]=!this.modules[t][s])}}getPenaltyScore(){let e=0;for(let n=0;n<this.size;n++){let u=!1,c=0,C=[0,0,0,0,0,0,0];for(let d=0;d<this.size;d++)this.modules[n][d]==u?(c++,c==5?e+=p.PENALTY_N1:c>5&&e++):(this.finderPenaltyAddHistory(c,C),u||(e+=this.finderPenaltyCountPatterns(C)*p.PENALTY_N3),u=this.modules[n][d],c=1);e+=this.finderPenaltyTerminateAndCount(u,c,C)*p.PENALTY_N3}for(let n=0;n<this.size;n++){let u=!1,c=0,C=[0,0,0,0,0,0,0];for(let d=0;d<this.size;d++)this.modules[d][n]==u?(c++,c==5?e+=p.PENALTY_N1:c>5&&e++):(this.finderPenaltyAddHistory(c,C),u||(e+=this.finderPenaltyCountPatterns(C)*p.PENALTY_N3),u=this.modules[d][n],c=1);e+=this.finderPenaltyTerminateAndCount(u,c,C)*p.PENALTY_N3}for(let n=0;n<this.size-1;n++)for(let u=0;u<this.size-1;u++){const c=this.modules[n][u];c==this.modules[n][u+1]&&c==this.modules[n+1][u]&&c==this.modules[n+1][u+1]&&(e+=p.PENALTY_N2)}let t=0;for(const n of this.modules)t=n.reduce((u,c)=>u+(c?1:0),t);const s=this.size*this.size,r=Math.ceil(Math.abs(t*20-s*10)/s)-1;return h(0<=r&&r<=9),e+=r*p.PENALTY_N4,h(0<=e&&e<=2568888),e}getAlignmentPatternPositions(){if(this.version==1)return[];{const e=Math.floor(this.version/7)+2,t=this.version==32?26:Math.ceil((this.version*4+4)/(e*2-2))*2;let s=[6];for(let r=this.size-7;s.length<e;r-=t)s.splice(1,0,r);return s}}static getNumRawDataModules(e){if(e<p.MIN_VERSION||e>p.MAX_VERSION)throw new RangeError("Version number out of range");let t=(16*e+128)*e+64;if(e>=2){const s=Math.floor(e/7)+2;t-=(25*s-10)*s-55,e>=7&&(t-=36)}return h(208<=t&&t<=29648),t}static getNumDataCodewords(e,t){return Math.floor(p.getNumRawDataModules(e)/8)-p.ECC_CODEWORDS_PER_BLOCK[t.ordinal][e]*p.NUM_ERROR_CORRECTION_BLOCKS[t.ordinal][e]}static reedSolomonComputeDivisor(e){if(e<1||e>255)throw new RangeError("Degree out of range");let t=[];for(let r=0;r<e-1;r++)t.push(0);t.push(1);let s=1;for(let r=0;r<e;r++){for(let n=0;n<t.length;n++)t[n]=p.reedSolomonMultiply(t[n],s),n+1<t.length&&(t[n]^=t[n+1]);s=p.reedSolomonMultiply(s,2)}return t}static reedSolomonComputeRemainder(e,t){let s=t.map(r=>0);for(const r of e){const n=r^s.shift();s.push(0),t.forEach((u,c)=>s[c]^=p.reedSolomonMultiply(u,n))}return s}static reedSolomonMultiply(e,t){if(e>>>8||t>>>8)throw new RangeError("Byte out of range");let s=0;for(let r=7;r>=0;r--)s=s<<1^(s>>>7)*285,s^=(t>>>r&1)*e;return h(s>>>8==0),s}finderPenaltyCountPatterns(e){const t=e[1];h(t<=this.size*3);const s=t>0&&e[2]==t&&e[3]==t*3&&e[4]==t&&e[5]==t;return(s&&e[0]>=t*4&&e[6]>=t?1:0)+(s&&e[6]>=t*4&&e[0]>=t?1:0)}finderPenaltyTerminateAndCount(e,t,s){return e&&(this.finderPenaltyAddHistory(t,s),t=0),t+=this.size,this.finderPenaltyAddHistory(t,s),this.finderPenaltyCountPatterns(s)}finderPenaltyAddHistory(e,t){t[0]==0&&(e+=this.size),t.pop(),t.unshift(e)}};l.MIN_VERSION=1,l.MAX_VERSION=40,l.PENALTY_N1=3,l.PENALTY_N2=3,l.PENALTY_N3=40,l.PENALTY_N4=10,l.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],l.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],a.QrCode=l;function o(E,e,t){if(e<0||e>31||E>>>e)throw new RangeError("Value out of range");for(let s=e-1;s>=0;s--)t.push(E>>>s&1)}function i(E,e){return(E>>>e&1)!=0}function h(E){if(!E)throw new Error("Assertion error")}const f=class A{constructor(e,t,s){if(this.mode=e,this.numChars=t,this.bitData=s,t<0)throw new RangeError("Invalid argument");this.bitData=s.slice()}static makeBytes(e){let t=[];for(const s of e)o(s,8,t);return new A(A.Mode.BYTE,e.length,t)}static makeNumeric(e){if(!A.isNumeric(e))throw new RangeError("String contains non-numeric characters");let t=[];for(let s=0;s<e.length;){const r=Math.min(e.length-s,3);o(parseInt(e.substring(s,s+r),10),r*3+1,t),s+=r}return new A(A.Mode.NUMERIC,e.length,t)}static makeAlphanumeric(e){if(!A.isAlphanumeric(e))throw new RangeError("String contains unencodable characters in alphanumeric mode");let t=[],s;for(s=0;s+2<=e.length;s+=2){let r=A.ALPHANUMERIC_CHARSET.indexOf(e.charAt(s))*45;r+=A.ALPHANUMERIC_CHARSET.indexOf(e.charAt(s+1)),o(r,11,t)}return s<e.length&&o(A.ALPHANUMERIC_CHARSET.indexOf(e.charAt(s)),6,t),new A(A.Mode.ALPHANUMERIC,e.length,t)}static makeSegments(e){return e==""?[]:A.isNumeric(e)?[A.makeNumeric(e)]:A.isAlphanumeric(e)?[A.makeAlphanumeric(e)]:[A.makeBytes(A.toUtf8ByteArray(e))]}static makeEci(e){let t=[];if(e<0)throw new RangeError("ECI assignment value out of range");if(e<128)o(e,8,t);else if(e<16384)o(2,2,t),o(e,14,t);else if(e<1e6)o(6,3,t),o(e,21,t);else throw new RangeError("ECI assignment value out of range");return new A(A.Mode.ECI,0,t)}static isNumeric(e){return A.NUMERIC_REGEX.test(e)}static isAlphanumeric(e){return A.ALPHANUMERIC_REGEX.test(e)}getData(){return this.bitData.slice()}static getTotalBits(e,t){let s=0;for(const r of e){const n=r.mode.numCharCountBits(t);if(r.numChars>=1<<n)return 1/0;s+=4+n+r.bitData.length}return s}static toUtf8ByteArray(e){e=encodeURI(e);let t=[];for(let s=0;s<e.length;s++)e.charAt(s)!="%"?t.push(e.charCodeAt(s)):(t.push(parseInt(e.substring(s+1,s+3),16)),s+=2);return t}};f.NUMERIC_REGEX=/^[0-9]*$/,f.ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+.\/:-]*$/,f.ALPHANUMERIC_CHARSET="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";let M=f;a.QrSegment=f})(b||(b={}));(a=>{(l=>{const o=class{constructor(h,f){this.ordinal=h,this.formatBits=f}};o.LOW=new o(0,1),o.MEDIUM=new o(1,0),o.QUARTILE=new o(2,3),o.HIGH=new o(3,2),l.Ecc=o})(a.QrCode||(a.QrCode={}))})(b||(b={}));(a=>{(l=>{const o=class{constructor(h,f){this.modeBits=h,this.numBitsCharCount=f}numCharCountBits(h){return this.numBitsCharCount[Math.floor((h+7)/17)]}};o.NUMERIC=new o(1,[10,12,14]),o.ALPHANUMERIC=new o(2,[9,11,13]),o.BYTE=new o(4,[8,16,16]),o.KANJI=new o(8,[8,10,12]),o.ECI=new o(7,[0,0,0]),l.Mode=o})(a.QrSegment||(a.QrSegment={}))})(b||(b={}));var L=b;var ve={L:L.QrCode.Ecc.LOW,M:L.QrCode.Ecc.MEDIUM,Q:L.QrCode.Ecc.QUARTILE,H:L.QrCode.Ecc.HIGH},ee=128,te="L",se="#FFFFFF",re="#000000",ne=!1,oe=1,Pe=4,Ie=0,be=.1;function ie(a,l=0){const o=[];return a.forEach(function(i,h){let f=null;i.forEach(function(M,E){if(!M&&f!==null){o.push(`M${f+l} ${h+l}h${E-f}v1H${f+l}z`),f=null;return}if(E===i.length-1){if(!M)return;f===null?o.push(`M${E+l},${h+l} h1v1H${E+l}z`):o.push(`M${f+l},${h+l} h${E+1-f}v1H${f+l}z`);return}M&&f===null&&(f=E)})}),o.join("")}function ae(a,l){return a.slice().map((o,i)=>i<l.y||i>=l.y+l.h?o:o.map((h,f)=>f<l.x||f>=l.x+l.w?h:!1))}function Le(a,l,o,i){if(i==null)return null;const h=a.length+o*2,f=Math.floor(l*be),M=h/l,E=(i.width||f)*M,e=(i.height||f)*M,t=i.x==null?a.length/2-E/2:i.x*M,s=i.y==null?a.length/2-e/2:i.y*M,r=i.opacity==null?1:i.opacity;let n=null;if(i.excavate){let c=Math.floor(t),C=Math.floor(s),d=Math.ceil(E+t-c),g=Math.ceil(e+s-C);n={x:c,y:C,w:d,h:g}}const u=i.crossOrigin;return{x:t,y:s,h:e,w:E,excavation:n,opacity:r,crossOrigin:u}}function Fe(a,l){return l!=null?Math.max(Math.floor(l),0):a?Pe:Ie}function le({value:a,level:l,minVersion:o,includeMargin:i,marginSize:h,imageSettings:f,size:M,boostLevel:E}){let e=N.useMemo(()=>{const c=(Array.isArray(a)?a:[a]).reduce((C,d)=>(C.push(...L.QrSegment.makeSegments(d)),C),[]);return L.QrCode.encodeSegments(c,ve[l],o,void 0,void 0,E)},[a,l,o,E]);const{cells:t,margin:s,numCells:r,calculatedImageSettings:n}=N.useMemo(()=>{let u=e.getModules();const c=Fe(i,h),C=u.length+c*2,d=Le(u,M,c,f);return{cells:u,margin:c,numCells:C,calculatedImageSettings:d}},[e,M,f,i,h]);return{qrcode:e,margin:s,cells:t,numCells:r,calculatedImageSettings:n}}var Oe=(function(){try{new Path2D().addPath(new Path2D)}catch{return!1}return!0})(),_e=N.forwardRef(function(l,o){const i=l,{value:h,size:f=ee,level:M=te,bgColor:E=se,fgColor:e=re,includeMargin:t=ne,minVersion:s=oe,boostLevel:r,marginSize:n,imageSettings:u}=i,C=B(i,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","marginSize","imageSettings"]),{style:d}=C,g=B(C,["style"]),R=u?.src,m=N.useRef(null),y=N.useRef(null),x=N.useCallback(I=>{m.current=I,typeof o=="function"?o(I):o&&(o.current=I)},[o]),[_,U]=N.useState(!1),{margin:F,cells:D,numCells:Q,calculatedImageSettings:S}=le({value:h,level:M,minVersion:s,boostLevel:r,includeMargin:t,marginSize:n,imageSettings:u,size:f});N.useEffect(()=>{if(m.current!=null){const I=m.current,P=I.getContext("2d");if(!P)return;let W=D;const O=y.current,$=S!=null&&O!==null&&O.complete&&O.naturalHeight!==0&&O.naturalWidth!==0;$&&S.excavation!=null&&(W=ae(D,S.excavation));const G=window.devicePixelRatio||1;I.height=I.width=f*G;const V=f/Q*G;P.scale(V,V),P.fillStyle=E,P.fillRect(0,0,Q,Q),P.fillStyle=e,Oe?P.fill(new Path2D(ie(W,F))):D.forEach(function(de,he){de.forEach(function(fe,me){fe&&P.fillRect(me+F,he+F,1,1)})}),S&&(P.globalAlpha=S.opacity),$&&P.drawImage(O,S.x+F,S.y+F,S.w,S.h)}}),N.useEffect(()=>{U(!1)},[R]);const ue=j({height:f,width:f},d);let H=null;return R!=null&&(H=N.createElement("img",{src:R,key:R,style:{display:"none"},onLoad:()=>{U(!0)},ref:y,crossOrigin:S?.crossOrigin})),N.createElement(N.Fragment,null,N.createElement("canvas",j({style:ue,height:f,width:f,ref:x,role:"img"},g)),H)});_e.displayName="QRCodeCanvas";var ce=N.forwardRef(function(l,o){const i=l,{value:h,size:f=ee,level:M=te,bgColor:E=se,fgColor:e=re,includeMargin:t=ne,minVersion:s=oe,boostLevel:r,title:n,marginSize:u,imageSettings:c}=i,C=B(i,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","title","marginSize","imageSettings"]),{margin:d,cells:g,numCells:R,calculatedImageSettings:m}=le({value:h,level:M,minVersion:s,boostLevel:r,includeMargin:t,marginSize:u,imageSettings:c,size:f});let y=g,x=null;c!=null&&m!=null&&(m.excavation!=null&&(y=ae(g,m.excavation)),x=N.createElement("image",{href:c.src,height:m.h,width:m.w,x:m.x+d,y:m.y+d,preserveAspectRatio:"none",opacity:m.opacity,crossOrigin:m.crossOrigin}));const _=ie(y,d);return N.createElement("svg",j({height:f,width:f,viewBox:`0 0 ${R} ${R}`,ref:o,role:"img"},C),!!n&&N.createElement("title",null,n),N.createElement("path",{fill:E,d:`M0,0 h${R}v${R}H0z`,shapeRendering:"crispEdges"}),N.createElement("path",{fill:e,d:_,shapeRendering:"crispEdges"}),x)});ce.displayName="QRCodeSVG";const Te=a=>a.length<100?!1:a.startsWith("data:image/")||a.startsWith("iVBOR")||a.startsWith("/9j/")?!0:a.length>5e3?/^[A-Za-z0-9+/=]+$/.test(a):!1,De=({value:a,isConnected:l=!1,size:o=280,loading:i=!1,connectedTitle:h="Connected",connectedSubtitle:f="No QR code needed",emptyText:M="QR code not available"})=>{if(l)return w.jsxs("div",{className:"flex flex-col items-center gap-3 p-8 text-center",children:[w.jsx(ge,{className:"h-10 w-10 text-success"}),w.jsx("div",{className:"text-base font-semibold",children:h}),w.jsx("div",{className:"text-sm text-muted-foreground",children:f})]});if(i)return w.jsxs("div",{className:"p-10 text-center",children:[w.jsx(Ce,{className:"mx-auto h-8 w-8 animate-spin text-muted-foreground"}),w.jsx("div",{className:"mt-4 text-sm text-muted-foreground",children:"Waiting for QR code..."})]});if(!a)return w.jsxs("div",{className:"p-10 text-center text-muted-foreground",children:[w.jsx(Ee,{className:"mx-auto h-12 w-12 opacity-30"}),w.jsx("div",{className:"mt-4",children:M})]});if(Te(a)){const E=a.startsWith("data:")?a:`data:image/png;base64,${a}`;return w.jsx("div",{className:"p-4 text-center",children:w.jsx("img",{src:E,alt:"QR Code",style:{width:o,height:o,imageRendering:"pixelated"}})})}return w.jsx(Qe,{value:a,size:o})},Qe=({value:a,size:l})=>{const[o,i]=v.useState(null);return v.useEffect(()=>{i(null)},[a]),o?w.jsx("div",{className:"p-6 text-center",children:w.jsxs(k,{variant:"warning",children:[w.jsx(X,{className:"h-4 w-4"}),w.jsx(K,{children:"QR Code Error"}),w.jsx(z,{children:"The QR code data is too large to display. Please try refreshing or reconnecting."})]})}):w.jsx(je,{onError:h=>i(h),children:w.jsx("div",{className:"p-4 text-center",children:w.jsx(ce,{value:a,size:l,level:"L"})})})};class je extends N.Component{constructor(l){super(l),this.state={hasError:!1}}static getDerivedStateFromError(l){return{hasError:!0}}componentDidCatch(l){console.error("[QRCodeDisplay] QR code rendering error:",l.message),this.props.onError(l.message)}render(){return this.state.hasError?w.jsx("div",{className:"p-6 text-center",children:w.jsxs(k,{variant:"warning",children:[w.jsx(X,{className:"h-4 w-4"}),w.jsx(K,{children:"QR Code Error"}),w.jsx(z,{children:"The QR code data is too large to display. Please try refreshing or reconnecting."})]})}):this.props.children}}const Be=()=>{const{getWhatsAppStatus:a,getWhatsAppQR:l,sendWhatsAppMessage:o,startWhatsAppConnection:i,restartWhatsAppConnection:h,isConnected:f}=q(),[M,E]=v.useState(!1),[e,t]=v.useState(null),[s,r]=v.useState(null),n=v.useCallback(async()=>{E(!0),t(null);try{const g=await a();return r(g),g}catch(g){const R=g.message||"Failed to get status";return t(R),{connected:!1}}finally{E(!1)}},[a]),u=v.useCallback(async()=>{E(!0),t(null);try{const g=await l();return g.connected&&r({connected:!0}),g}catch(g){const R=g.message||"Failed to get QR code";return t(R),{connected:!1,message:R}}finally{E(!1)}},[l]),c=v.useCallback(async(g,R)=>{E(!0),t(null);try{const m=await o(g,R);return!m.success&&m.error&&t(m.error),m}catch(m){const y=m.message||"Failed to send message";return t(y),{success:!1,error:y}}finally{E(!1)}},[o]),C=v.useCallback(async()=>{E(!0),t(null);try{const g=await i();return!g.success&&g.message&&t(g.message),g}catch(g){const R=g.message||"Failed to start connection";return t(R),{success:!1,message:R}}finally{E(!1)}},[i]),d=v.useCallback(async()=>{E(!0),t(null);try{const g=await h();return!g.success&&g.message&&t(g.message),g}catch(g){const R=g.message||"Failed to restart connection";return t(R),{success:!1,message:R}}finally{E(!1)}},[h]);return{getStatus:n,getQRCode:u,sendMessage:c,startConnection:C,restartConnection:d,isLoading:M,lastError:e,connectionStatus:s,isConnected:f}},Ve=({config:a,visible:l})=>{const o=pe(),i=Me(a,l),h=Ae(a.statusHook),{startConnection:f,restartConnection:M,getStatus:E}=Be(),{sendRequest:e,setAndroidStatus:t}=q(),s=a.qr,r=s.isConnected(h),n=h?.[s.qrField],u=a.fields?.[0],c=v.useMemo(()=>({start:()=>i.execute("start",f),restart:()=>i.execute("restart",M),refresh:()=>i.execute("refresh",E),connect:()=>i.execute("connect",async()=>{const d=i.form.getFieldValue("android_remote")?.trim();if(!d){i.setError("No API key configured");return}const g=await e("android_relay_connect",{url:"",api_key:d});return g.qr_data&&t(R=>({...R,connected:!0,paired:!1,qr_data:g.qr_data,session_token:g.session_token||R.session_token})),g}),disconnect:()=>i.execute("disconnect",()=>e("android_relay_disconnect",{}))}),[i,f,M,E,e,t]),C=(a.actions??[]).map(d=>({key:d.key,label:d.label,color:o.dracula[d.themeColor]??d.themeColor,onClick:c[d.key]??(()=>{}),hidden:d.hidden?.(h,i.stored),disabled:d.disabled?.(h,i.stored)}));return w.jsxs("div",{className:"flex min-h-0 flex-1 flex-col gap-4 p-5",children:[u&&w.jsx(Re,{value:i.form.getFieldValue(u.key)||"",onChange:d=>i.form.setFieldValue(u.key,d),onSave:()=>i.actions.save(u.key,(i.form.getFieldValue(u.key)??"").trim()).then(()=>i.setStored(!0)),onDelete:()=>i.actions.remove(u.key),placeholder:u.placeholder,loading:i.loading==="save",isStored:i.stored}),a.statusRows&&w.jsx(xe,{icon:w.jsx(we,{icon:a.iconRef,className:"h-6 w-6 text-2xl"}),title:a.name,rows:a.statusRows,status:h}),w.jsxs("div",{className:"flex min-h-[300px] flex-1 flex-col items-center justify-center rounded-lg bg-muted p-5",children:[w.jsx(De,{value:n,isConnected:r,size:280,connectedTitle:s.connectedTitle,connectedSubtitle:s.connectedSubtitle(h),loading:s.isLoading(h),emptyText:s.emptyText(h,i.stored)}),!r&&n&&w.jsx("div",{className:"mt-3 text-sm text-muted-foreground",children:s.scanText})]}),a.hasRateLimits&&r&&w.jsx(ye,{}),i.error&&w.jsx(k,{variant:"destructive",children:w.jsx(z,{children:i.error})}),w.jsx(Ne,{actions:C,loading:i.loading})]})};export{Ve as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{G as je,r as i,u as te,t as le,H as pe,J as H,K as ge,M as re,O as oe,P as ie,j as e,A as ce,a as de,b as ue,U as ye,c as me,V as xe,W as _,X as b,Y as w,Z as z,_ as C,$ as Y,a0 as G,a1 as I,a2 as K,a3 as P,a4 as q,g as $,I as U,a5 as J,B as X,L as he,a6 as ae,a7 as v,a8 as Q,a9 as _e,d as ve,e as be,f as we}from"./index-D9tZfgvi.js";const W={};function Re(n,l){const m=je(),[x,y]=i.useState(null),[p,c]=i.useState(null),[F,d]=i.useState(!1);i.useEffect(()=>{c(null),y(null),d(!1)},[n.id]);const{validateApiKey:h,saveApiKey:A,getStoredApiKey:N,hasStoredKey:o,removeApiKey:D,getProviderDefaults:T,saveProviderDefaults:a,getProviderUsageSummary:f,getAPIUsageSummary:j,getStoredModels:L,getModelConstraints:E,isConnected:M}=te(),{sendRequest:S}=le(),R=pe({queryKey:H.credentialValues.byProvider(n.id).queryKey,queryFn:async()=>{if(!n.fields)return W;const t=await Promise.all(n.fields.map(async r=>{const ee=r.key==="apiKey"?n.id:r.key;if(!await o(ee))return null;const se=await N(ee);return se?[r.key,se]:null})),g={};for(const r of t)r&&(g[r[0]]=r[1]);return g},enabled:l&&M&&!!n.fields,staleTime:ge.FOREVER}).data??W,s=i.useRef(R);s.current=R;const u=n.id,k=i.useCallback(t=>{m.setQueryData(H.credentialValues.byProvider(u).queryKey,g=>t(g??W))},[m,u]),fe=i.useMemo(()=>({getFieldValue:t=>s.current[t],getFieldsValue:()=>({...s.current}),setFieldValue:(t,g)=>{k(r=>({...r,[t]:g}))},setFieldsValue:t=>{k(g=>({...g,...t}))},resetFields:()=>k(()=>W)}),[k]);Object.keys(R).length>0&&!F&&d(!0);const V=i.useCallback(async(t,g)=>{y(t),c(null);try{const r=await g();return r&&!r.success&&r.error&&c(r.error),r}catch(r){c(r.message||`Failed: ${t}`);return}finally{y(null)}},[]),B=i.useCallback(()=>m.invalidateQueries({queryKey:H.credentialValues.byProvider(u).queryKey}),[m,u]);return{form:fe,values:R,loading:x,error:p,stored:F,setStored:d,setError:c,execute:V,actions:{validate:(t,g)=>V("validate",async()=>{const r=await h(t,g);return r?.isValid&&(d(!0),await B()),r}),save:(t,g)=>V("save",async()=>{const r=await A(t,g);return r?.isValid&&(d(!0),await B()),r}),remove:t=>V("remove",async()=>{await D(t),d(!1),await B()}),oauthLogin:()=>V("login",async()=>{const t=await S(n.ws.login,{});return t.success&&t.url&&window.open(t.url,"_blank"),t}),oauthLogout:()=>V("logout",()=>S(n.ws.logout,{})),oauthRefresh:()=>V("refresh",()=>S(n.ws.status,{})),sendWs:(t,g)=>V(t,()=>S(t,g??{}))},isConnected:M,getProviderDefaults:T,saveProviderDefaults:a,getProviderUsageSummary:f,getAPIUsageSummary:j,getStoredModels:L,getModelConstraints:E}}const Ce=ie({default_model:_e().optional().default(""),temperature:v().optional(),max_tokens:v().int().min(1).optional(),thinking_enabled:Q().optional().default(!1),thinking_budget:v().int().min(1024).max(16e3).optional(),reasoning_effort:ae(["low","medium","high"]).optional(),reasoning_format:ae(["parsed","hidden"]).optional()}),Ve=({providerId:n})=>{const{getProviderDefaults:l,saveProviderDefaults:m,getStoredModels:x,getModelConstraints:y,isConnected:p}=te(),[c,F]=i.useState([]),[d,h]=i.useState(null),[A,N]=i.useState(!1),o=re({resolver:oe(Ce),defaultValues:{}}),D=o.watch("default_model"),T=o.watch("thinking_enabled"),{isDirty:a}=o.formState;i.useEffect(()=>{if(!p)return;let s=!1;return(async()=>{N(!0);try{const[u,k]=await Promise.all([l(n),x(n)]);s||(o.reset(u??{}),k?.length&&F(k))}finally{s||N(!1)}})(),()=>{s=!0}},[n,p]),i.useEffect(()=>{if(!p||!D)return;let s=!1;return y(D,n).then(u=>{s||(h(u),u?.max_output_tokens&&o.getValues("max_tokens")!==u.max_output_tokens&&o.setValue("max_tokens",u.max_output_tokens,{shouldDirty:!1}))}),()=>{s=!0}},[D,n,p]);const f=i.useCallback(async s=>{N(!0);try{await m(n,s)&&o.reset(s)}finally{N(!1)}},[n,m,o]),[j,L]=d?.temperature_range??[0,2],E=d?.max_output_tokens,M=d?.thinking_type,S=d?.supports_thinking,Z=d?.is_reasoning_model&&j===L,R=s=>u=>{const k=u.target.value;s.onChange(k===""?void 0:Number(k))};return e.jsx(ce,{type:"single",collapsible:!0,defaultValue:"defaults",children:e.jsxs(de,{value:"defaults",children:[e.jsx(ue,{children:e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(ye,{className:"h-4 w-4"})," Default Parameters"]})}),e.jsx(me,{children:e.jsx("div",{className:A?"pointer-events-none opacity-60":"",children:e.jsx(xe,{...o,children:e.jsxs("form",{id:`provider-defaults-form-${n}`,onSubmit:o.handleSubmit(f),className:"flex flex-col gap-3",children:[e.jsx(_,{control:o.control,name:"default_model",render:({field:s})=>e.jsxs(b,{children:[e.jsx(w,{children:"Default Model"}),e.jsxs(z,{value:s.value??"",onValueChange:s.onChange,children:[e.jsx(C,{children:e.jsx(Y,{children:e.jsx(G,{placeholder:c.length?"Select model":"Validate API key first"})})}),e.jsx(I,{children:c.map(u=>e.jsx(K,{value:u,children:u},u))})]}),e.jsx(P,{children:"Model used when none specified"}),e.jsx(q,{})]})}),d&&e.jsxs("div",{className:"flex flex-wrap items-center gap-1.5",children:[E!=null&&e.jsxs($,{variant:"success",children:["Max Output: ",E.toLocaleString()]}),d.context_length!=null&&e.jsxs($,{variant:"info",children:["Context: ",d.context_length.toLocaleString()]}),e.jsxs($,{variant:"secondary",children:["Temp: ",j,"-",L]}),S&&e.jsxs($,{variant:"warning",children:["Thinking: ",M]}),d.is_reasoning_model&&e.jsx($,{variant:"outline",children:"Reasoning"})]}),!Z&&e.jsx(_,{control:o.control,name:"temperature",render:({field:s})=>e.jsxs(b,{children:[e.jsx(w,{children:"Temperature"}),e.jsx(C,{children:e.jsx(U,{type:"number",min:j,max:L,step:.1,className:"w-24",value:s.value??"",onChange:R(s)})}),e.jsxs(P,{children:["Controls randomness (",j,"-",L,")"]}),e.jsx(q,{})]})}),e.jsx(_,{control:o.control,name:"max_tokens",render:({field:s})=>e.jsxs(b,{children:[e.jsx(w,{children:"Max Tokens"}),e.jsx(C,{children:e.jsx(U,{type:"number",min:1,max:E||void 0,className:"w-32",value:s.value??"",onChange:R(s)})}),e.jsx(P,{children:E!=null?`Up to ${E.toLocaleString()}`:"Maximum response length"}),e.jsx(q,{})]})}),S&&e.jsx(_,{control:o.control,name:"thinking_enabled",render:({field:s})=>e.jsxs(b,{className:"flex flex-row items-center justify-between rounded-md border border-border p-3",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(w,{children:"Thinking / Reasoning"}),e.jsxs(P,{children:["Extended thinking (",M,")"]})]}),e.jsx(C,{children:e.jsx(J,{checked:!!s.value,onCheckedChange:s.onChange})})]})}),S&&M==="budget"&&T&&e.jsx(_,{control:o.control,name:"thinking_budget",render:({field:s})=>e.jsxs(b,{children:[e.jsx(w,{children:"Thinking Budget"}),e.jsx(C,{children:e.jsx(U,{type:"number",min:1024,max:16e3,className:"w-28",value:s.value??"",onChange:R(s)})}),e.jsx(P,{children:"Token budget (1024-16000)"}),e.jsx(q,{})]})}),S&&M==="effort"&&T&&e.jsx(_,{control:o.control,name:"reasoning_effort",render:({field:s})=>e.jsxs(b,{children:[e.jsx(w,{children:"Reasoning Effort"}),e.jsxs(z,{value:s.value??"",onValueChange:s.onChange,children:[e.jsx(C,{children:e.jsx(Y,{className:"w-32",children:e.jsx(G,{placeholder:"Select"})})}),e.jsxs(I,{children:[e.jsx(K,{value:"low",children:"Low"}),e.jsx(K,{value:"medium",children:"Medium"}),e.jsx(K,{value:"high",children:"High"})]})]}),e.jsx(P,{children:"Low, medium, or high"}),e.jsx(q,{})]})}),S&&M==="format"&&T&&e.jsx(_,{control:o.control,name:"reasoning_format",render:({field:s})=>e.jsxs(b,{children:[e.jsx(w,{children:"Reasoning Format"}),e.jsxs(z,{value:s.value??"",onValueChange:s.onChange,children:[e.jsx(C,{children:e.jsx(Y,{className:"w-32",children:e.jsx(G,{placeholder:"Select"})})}),e.jsxs(I,{children:[e.jsx(K,{value:"parsed",children:"Parsed"}),e.jsx(K,{value:"hidden",children:"Hidden"})]})]}),e.jsx(P,{children:"Parsed or hidden"}),e.jsx(q,{})]})}),e.jsxs(X,{type:"submit",disabled:!a||A,variant:a?"default":"outline",className:"w-full",children:[A&&e.jsx(he,{className:"h-4 w-4 animate-spin"}),"Save Defaults"]})]})})})})]})})},Se=ie({enabled:Q().default(!1),min_delay_ms:v().int().min(0).optional(),max_delay_ms:v().int().min(0).optional(),typing_delay_ms:v().int().min(0).optional(),link_extra_delay_ms:v().int().min(0).optional(),max_messages_per_minute:v().int().min(0).optional(),max_messages_per_hour:v().int().min(0).optional(),max_new_contacts_per_day:v().int().min(0).optional(),simulate_typing:Q().optional(),randomize_delays:Q().optional(),pause_on_low_response:Q().optional(),response_rate_threshold:v().min(0).max(1).optional()}),O=n=>{const l=we.c(7),{label:m,value:x}=n;let y;l[0]!==m?(y=e.jsx("span",{className:"text-xs text-muted-foreground",children:m}),l[0]=m,l[1]=y):y=l[1];let p;l[2]!==x?(p=e.jsx("span",{className:"text-lg font-semibold",children:x}),l[2]=x,l[3]=p):p=l[3];let c;return l[4]!==y||l[5]!==p?(c=e.jsxs("div",{className:"flex flex-col",children:[y,p]}),l[4]=y,l[5]=p,l[6]=c):c=l[6],c},ne=n=>l=>{const m=l.target.value;n.onChange(m===""?void 0:Number(m))},Pe=()=>{const{getWhatsAppRateLimitConfig:n,setWhatsAppRateLimitConfig:l,unpauseWhatsAppRateLimit:m}=le(),[x,y]=i.useState(null),[p,c]=i.useState(!1),[F,d]=i.useState(!1),h=re({resolver:oe(Se),defaultValues:{enabled:!1}}),A=h.watch("pause_on_low_response"),{isDirty:N}=h.formState,o=i.useCallback(async()=>{c(!0);try{const a=await n();a.success&&a.config&&(h.reset(a.config),y(a.stats??null),d(!0))}finally{c(!1)}},[h,n]);i.useEffect(()=>{o()},[o]);const D=i.useCallback(async a=>{c(!0);try{const f=await l(a);f.success&&f.config&&h.reset(f.config)}finally{c(!1)}},[h,l]),T=i.useCallback(async()=>{c(!0);try{const a=await m();a.success&&a.stats&&y(a.stats)}finally{c(!1)}},[m]);return e.jsx(ce,{type:"single",collapsible:!0,children:e.jsxs(de,{value:"ratelimits",children:[e.jsx(ue,{children:e.jsxs("div",{className:"flex w-full items-center justify-between gap-2",children:[e.jsx("span",{children:"Rate Limits"}),e.jsx(_,{control:h.control,name:"enabled",render:({field:a})=>e.jsx("span",{onClick:f=>f.stopPropagation(),children:e.jsx(J,{checked:!!a.value,onCheckedChange:a.onChange})})})]})}),e.jsx(me,{children:F?e.jsx(xe,{...h,children:e.jsxs("form",{onSubmit:h.handleSubmit(D),className:"flex flex-col gap-3",children:[x&&e.jsxs("div",{className:"mb-3 flex flex-wrap gap-4",children:[e.jsx(O,{label:"Last Minute",value:x.messages_sent_last_minute}),e.jsx(O,{label:"Last Hour",value:x.messages_sent_last_hour}),e.jsx(O,{label:"Today",value:x.messages_sent_today}),e.jsx(O,{label:"New Contacts",value:x.new_contacts_today}),e.jsx(O,{label:"Responses",value:x.responses_received}),e.jsx(O,{label:"Response Rate",value:`${Math.round((x.response_rate||0)*100)}%`})]}),x?.is_paused&&e.jsx(ve,{variant:"warning",children:e.jsxs(be,{className:"flex items-center justify-between gap-3",children:[e.jsx("span",{children:x.pause_reason||"Paused"}),e.jsx(X,{size:"sm",variant:"outline",type:"button",onClick:T,children:"Unpause"})]})}),e.jsx("div",{className:"text-xs font-medium text-muted-foreground",children:"Message Delays (milliseconds)"}),e.jsx("div",{className:"flex flex-wrap gap-3",children:[["min_delay_ms","Min Delay"],["max_delay_ms","Max Delay"],["typing_delay_ms","Typing Duration"],["link_extra_delay_ms","Link Extra Delay"]].map(([a,f])=>e.jsx(_,{control:h.control,name:a,render:({field:j})=>e.jsxs(b,{children:[e.jsx(w,{className:"text-xs",children:f}),e.jsx(C,{children:e.jsx(U,{type:"number",min:0,className:"w-28",value:j.value??"",onChange:ne(j)})})]})},a))}),e.jsx("div",{className:"text-xs font-medium text-muted-foreground",children:"Message Limits"}),e.jsx("div",{className:"flex flex-wrap gap-3",children:[["max_messages_per_minute","Per Minute"],["max_messages_per_hour","Per Hour"],["max_new_contacts_per_day","New Contacts/Day"]].map(([a,f])=>e.jsx(_,{control:h.control,name:a,render:({field:j})=>e.jsxs(b,{children:[e.jsx(w,{className:"text-xs",children:f}),e.jsx(C,{children:e.jsx(U,{type:"number",min:0,className:"w-32",value:j.value??"",onChange:ne(j)})})]})},a))}),e.jsx("div",{className:"text-xs font-medium text-muted-foreground",children:"Behavior"}),e.jsxs("div",{className:"flex w-full flex-col gap-2",children:[[["simulate_typing","Simulate Typing","Show typing indicator before sending"],["randomize_delays","Randomize Delays","Add variance between min/max delay"],["pause_on_low_response","Pause on Low Response","Auto-pause if response rate drops below threshold"]].map(([a,f,j])=>e.jsx(_,{control:h.control,name:a,render:({field:L})=>e.jsxs(b,{className:"flex flex-row items-center justify-between rounded-md border border-border p-3",children:[e.jsxs("div",{className:"space-y-0.5",children:[e.jsx(w,{children:f}),e.jsx(P,{children:j})]}),e.jsx(C,{children:e.jsx(J,{checked:!!L.value,onCheckedChange:L.onChange})})]})},a)),A&&e.jsx(_,{control:h.control,name:"response_rate_threshold",render:({field:a})=>e.jsxs(b,{children:[e.jsx(w,{children:"Response Rate Threshold (%)"}),e.jsx(C,{children:e.jsx(U,{type:"number",min:0,max:100,value:Math.round((a.value??.3)*100),onChange:f=>{const j=f.target.value;a.onChange(j===""?void 0:Number(j)/100)}})})]})})]}),e.jsxs(X,{type:"submit",disabled:!N||p,variant:N?"default":"outline",className:"w-full",children:[p&&e.jsx(he,{className:"h-4 w-4 animate-spin"}),"Save Changes"]})]})}):e.jsx("div",{className:"flex justify-center p-4 text-sm text-muted-foreground",children:"Loading..."})})]})})};export{Ve as P,Pe as R,Re as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{f as b,j as s,g}from"./index-D9tZfgvi.js";const v=p=>{const e=b.c(15),{icon:c,title:m,rows:x,status:a}=p;let t;e[0]!==m?(t=s.jsx("span",{children:m}),e[0]=m,e[1]=t):t=e[1];let r;e[2]!==c||e[3]!==t?(r=s.jsxs("div",{className:"flex items-center gap-2 border-b border-border bg-muted px-3 py-2 text-sm font-semibold",children:[c,t]}),e[2]=c,e[3]=t,e[4]=r):r=e[4];let d;if(e[5]!==x||e[6]!==a){let n;e[8]!==a?(n=l=>{const f=l.ok(a),u=f?"success":l.warn?"warning":"destructive";return s.jsxs("div",{className:"grid grid-cols-[1fr_auto] items-center gap-3 px-3 py-2 text-sm",children:[s.jsx("span",{className:"text-muted-foreground",children:l.label}),s.jsx(g,{variant:u,children:f?l.trueText:l.falseText})]},l.label)},e[8]=a,e[9]=n):n=e[9],d=x.map(n),e[5]=x,e[6]=a,e[7]=d}else d=e[7];let i;e[10]!==d?(i=s.jsx("div",{className:"divide-y divide-border",children:d}),e[10]=d,e[11]=i):i=e[11];let o;return e[12]!==r||e[13]!==i?(o=s.jsxs("div",{className:"overflow-hidden rounded-md border border-border",children:[r,i]}),e[12]=r,e[13]=i,e[14]=o):o=e[14],o};export{v as S};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|