@softtechai/quickmcp 1.0.16 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/auth-utils.d.ts +130 -0
- package/dist/auth/auth-utils.d.ts.map +1 -0
- package/dist/auth/auth-utils.js +600 -0
- package/dist/auth/auth-utils.js.map +1 -0
- package/dist/auth/jwks-provider.d.ts +9 -0
- package/dist/auth/jwks-provider.d.ts.map +1 -0
- package/dist/auth/jwks-provider.js +56 -0
- package/dist/auth/jwks-provider.js.map +1 -0
- package/dist/auth/token-utils.d.ts +40 -0
- package/dist/auth/token-utils.d.ts.map +1 -0
- package/dist/auth/token-utils.js +162 -0
- package/dist/auth/token-utils.js.map +1 -0
- package/dist/client/MCPClient.js +5 -4
- package/dist/client/MCPClient.js.map +1 -1
- package/dist/config/auth-config.d.ts +16 -0
- package/dist/config/auth-config.d.ts.map +1 -0
- package/dist/config/auth-config.js +107 -0
- package/dist/config/auth-config.js.map +1 -0
- package/dist/constant/constant.d.ts +20 -0
- package/dist/constant/constant.d.ts.map +1 -0
- package/dist/constant/constant.js +24 -0
- package/dist/constant/constant.js.map +1 -0
- package/dist/database/async-datastore.d.ts +6 -0
- package/dist/database/async-datastore.d.ts.map +1 -0
- package/dist/database/async-datastore.js +15 -0
- package/dist/database/async-datastore.js.map +1 -0
- package/dist/database/database-utils.d.ts +6 -0
- package/dist/database/database-utils.d.ts.map +1 -0
- package/dist/database/database-utils.js +29 -0
- package/dist/database/database-utils.js.map +1 -0
- package/dist/database/datastore.d.ts +164 -0
- package/dist/database/datastore.d.ts.map +1 -0
- package/dist/{parsers/types/index.js → database/datastore.js} +1 -0
- package/dist/database/datastore.js.map +1 -0
- package/dist/database/factory.d.ts +4 -0
- package/dist/database/factory.d.ts.map +1 -0
- package/dist/database/factory.js +32 -0
- package/dist/database/factory.js.map +1 -0
- package/dist/database/jdbc-manager.d.ts +49 -0
- package/dist/database/jdbc-manager.d.ts.map +1 -0
- package/dist/database/jdbc-manager.js +50 -0
- package/dist/database/jdbc-manager.js.map +1 -0
- package/dist/database/sqlite-manager.d.ts +46 -44
- package/dist/database/sqlite-manager.d.ts.map +1 -1
- package/dist/database/sqlite-manager.js +492 -42
- package/dist/database/sqlite-manager.js.map +1 -1
- package/dist/database/supabase-manager.d.ts +58 -0
- package/dist/database/supabase-manager.d.ts.map +1 -0
- package/dist/database/supabase-manager.js +432 -0
- package/dist/database/supabase-manager.js.map +1 -0
- package/dist/generators/MCPServerGenerator.d.ts +103 -20
- package/dist/generators/MCPServerGenerator.d.ts.map +1 -1
- package/dist/generators/MCPServerGenerator.js +6930 -128
- package/dist/generators/MCPServerGenerator.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/integrated-mcp-server-new.d.ts +14 -2
- package/dist/integrated-mcp-server-new.d.ts.map +1 -1
- package/dist/integrated-mcp-server-new.js +270 -180
- package/dist/integrated-mcp-server-new.js.map +1 -1
- package/dist/mcp-core/McpCoreService.d.ts +63 -0
- package/dist/mcp-core/McpCoreService.d.ts.map +1 -0
- package/dist/mcp-core/McpCoreService.js +492 -0
- package/dist/mcp-core/McpCoreService.js.map +1 -0
- package/dist/parsers/CsvParser.d.ts +1 -1
- package/dist/parsers/CsvParser.d.ts.map +1 -1
- package/dist/parsers/CsvParser.js +3 -2
- package/dist/parsers/CsvParser.js.map +1 -1
- package/dist/parsers/DatabaseParser.d.ts.map +1 -1
- package/dist/parsers/DatabaseParser.js +9 -8
- package/dist/parsers/DatabaseParser.js.map +1 -1
- package/dist/parsers/ExcelParser.d.ts +15 -0
- package/dist/parsers/ExcelParser.d.ts.map +1 -1
- package/dist/parsers/ExcelParser.js +287 -21
- package/dist/parsers/ExcelParser.js.map +1 -1
- package/dist/parsers/WebPageParser.d.ts +5 -0
- package/dist/parsers/WebPageParser.d.ts.map +1 -0
- package/dist/parsers/WebPageParser.js +35 -0
- package/dist/parsers/WebPageParser.js.map +1 -0
- package/dist/parsers/index.d.ts +3 -2
- package/dist/parsers/index.d.ts.map +1 -1
- package/dist/parsers/index.js +19 -16
- package/dist/parsers/index.js.map +1 -1
- package/dist/server/api/askApi.d.ts +41 -0
- package/dist/server/api/askApi.d.ts.map +1 -0
- package/dist/server/api/askApi.js +479 -0
- package/dist/server/api/askApi.js.map +1 -0
- package/dist/server/api/authApi.d.ts +101 -0
- package/dist/server/api/authApi.d.ts.map +1 -0
- package/dist/server/api/authApi.js +1472 -0
- package/dist/server/api/authApi.js.map +1 -0
- package/dist/server/api/authProperty.d.ts +18 -0
- package/dist/server/api/authProperty.d.ts.map +1 -0
- package/dist/server/api/authProperty.js +41 -0
- package/dist/server/api/authProperty.js.map +1 -0
- package/dist/server/api/configApi.d.ts +15 -0
- package/dist/server/api/configApi.d.ts.map +1 -0
- package/dist/server/api/configApi.js +42 -0
- package/dist/server/api/configApi.js.map +1 -0
- package/dist/server/api/databaseApi.d.ts +14 -0
- package/dist/server/api/databaseApi.d.ts.map +1 -0
- package/dist/server/api/databaseApi.js +111 -0
- package/dist/server/api/databaseApi.js.map +1 -0
- package/dist/server/api/directoryApi.d.ts +9 -0
- package/dist/server/api/directoryApi.d.ts.map +1 -0
- package/dist/server/api/directoryApi.js +103 -0
- package/dist/server/api/directoryApi.js.map +1 -0
- package/dist/server/api/generateApi.d.ts +24 -0
- package/dist/server/api/generateApi.d.ts.map +1 -0
- package/dist/server/api/generateApi.js +457 -0
- package/dist/server/api/generateApi.js.map +1 -0
- package/dist/server/api/healthApi.d.ts +9 -0
- package/dist/server/api/healthApi.d.ts.map +1 -0
- package/dist/server/api/healthApi.js +15 -0
- package/dist/server/api/healthApi.js.map +1 -0
- package/dist/server/api/indexApi.d.ts +21 -0
- package/dist/server/api/indexApi.d.ts.map +1 -0
- package/dist/server/api/indexApi.js +61 -0
- package/dist/server/api/indexApi.js.map +1 -0
- package/dist/server/api/logsApi.d.ts +12 -0
- package/dist/server/api/logsApi.d.ts.map +1 -0
- package/dist/server/api/logsApi.js +37 -0
- package/dist/server/api/logsApi.js.map +1 -0
- package/dist/server/api/mcpApi.d.ts +20 -0
- package/dist/server/api/mcpApi.d.ts.map +1 -0
- package/dist/server/api/mcpApi.js +120 -0
- package/dist/server/api/mcpApi.js.map +1 -0
- package/dist/server/api/nameApi.d.ts +21 -0
- package/dist/server/api/nameApi.d.ts.map +1 -0
- package/dist/server/api/nameApi.js +42 -0
- package/dist/server/api/nameApi.js.map +1 -0
- package/dist/server/api/parseApi.d.ts +9 -0
- package/dist/server/api/parseApi.d.ts.map +1 -0
- package/dist/server/api/parseApi.js +3245 -0
- package/dist/server/api/parseApi.js.map +1 -0
- package/dist/server/api/serverApi.d.ts +44 -0
- package/dist/server/api/serverApi.d.ts.map +1 -0
- package/dist/server/api/serverApi.js +417 -0
- package/dist/server/api/serverApi.js.map +1 -0
- package/dist/{dynamic-mcp-executor.d.ts → server/dynamic-mcp-executor.d.ts} +4 -5
- package/dist/server/dynamic-mcp-executor.d.ts.map +1 -0
- package/dist/server/dynamic-mcp-executor.js +62 -0
- package/dist/server/dynamic-mcp-executor.js.map +1 -0
- package/dist/server/port-utils.d.ts +14 -0
- package/dist/server/port-utils.d.ts.map +1 -0
- package/dist/server/port-utils.js +31 -0
- package/dist/server/port-utils.js.map +1 -0
- package/dist/server/server-utils.d.ts +13 -0
- package/dist/server/server-utils.d.ts.map +1 -0
- package/dist/server/server-utils.js +72 -0
- package/dist/server/server-utils.js.map +1 -0
- package/dist/{web → server}/server.d.ts +1 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +535 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/tool-executer.d.ts +101 -0
- package/dist/server/tool-executer.d.ts.map +1 -0
- package/dist/server/tool-executer.js +6198 -0
- package/dist/server/tool-executer.js.map +1 -0
- package/dist/types/index.d.ts +1197 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1028 -0
- package/dist/types/index.js.map +1 -1
- package/dist/upload/upload-utils.d.ts +4 -0
- package/dist/upload/upload-utils.d.ts.map +1 -0
- package/dist/upload/upload-utils.js +29 -0
- package/dist/upload/upload-utils.js.map +1 -0
- package/dist/utils/deployment-util.d.ts +14 -0
- package/dist/utils/deployment-util.d.ts.map +1 -0
- package/dist/utils/deployment-util.js +46 -0
- package/dist/utils/deployment-util.js.map +1 -0
- package/dist/utils/logger.d.ts +15 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +56 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +18 -6
- package/quickmcp-direct-stdio.js +176 -187
- package/src/web/public/app.js +15370 -1471
- package/src/web/public/authorization.html +868 -0
- package/src/web/public/database-tables.html +283 -547
- package/src/web/public/how-to-use.html +446 -462
- package/src/web/public/how-to-use.js +4 -4
- package/src/web/public/images/app/activepieces.png +0 -0
- package/src/web/public/images/app/airtable.png +0 -0
- package/src/web/public/images/app/androidstudio.png +0 -0
- package/src/web/public/images/app/antigravity.png +0 -0
- package/src/web/public/images/app/applenotes.png +0 -0
- package/src/web/public/images/app/applereminders.png +0 -0
- package/src/web/public/images/app/asana.png +0 -0
- package/src/web/public/images/app/azureai.png +0 -0
- package/src/web/public/images/app/bash.png +0 -0
- package/src/web/public/images/app/bearnotes.png +0 -0
- package/src/web/public/images/app/bitbucket.png +0 -0
- package/src/web/public/images/app/claude.png +0 -0
- package/src/web/public/images/app/cli.png +0 -0
- package/src/web/public/images/app/clickup.png +0 -0
- package/src/web/public/images/app/cohere.png +0 -0
- package/src/web/public/images/app/confluence.png +0 -0
- package/src/web/public/images/app/confluence2.png +0 -0
- package/src/web/public/images/app/curl.png +0 -0
- package/src/web/public/images/app/curl_mini.png +0 -0
- package/src/web/public/images/app/cursor.png +0 -0
- package/src/web/public/images/app/db2.png +0 -0
- package/src/web/public/images/app/deepseek.png +0 -0
- package/src/web/public/images/app/discord.png +0 -0
- package/src/web/public/images/app/docker.png +0 -0
- package/src/web/public/images/app/dockerhub.png +0 -0
- package/src/web/public/images/app/dropbox.png +0 -0
- package/src/web/public/images/app/elasticsearch.png +0 -0
- package/src/web/public/images/app/facebook.png +0 -0
- package/src/web/public/images/app/falai.png +0 -0
- package/src/web/public/images/app/fireworks.png +0 -0
- package/src/web/public/images/app/gdrive.png +0 -0
- package/src/web/public/images/app/gemini.png +0 -0
- package/src/web/public/images/app/github.png +0 -0
- package/src/web/public/images/app/githubcopilot.png +0 -0
- package/src/web/public/images/app/gitlab.png +0 -0
- package/src/web/public/images/app/gmail.png +0 -0
- package/src/web/public/images/app/googlecalender.png +0 -0
- package/src/web/public/images/app/googledocs.png +0 -0
- package/src/web/public/images/app/googlesheets.png +0 -0
- package/src/web/public/images/app/gradle.png +0 -0
- package/src/web/public/images/app/grafana.png +0 -0
- package/src/web/public/images/app/graphql.png +0 -0
- package/src/web/public/images/app/grok.png +0 -0
- package/src/web/public/images/app/groq.png +0 -0
- package/src/web/public/images/app/hazelcast.png +0 -0
- package/src/web/public/images/app/huggingface.png +0 -0
- package/src/web/public/images/app/imessage.png +0 -0
- package/src/web/public/images/app/instagram.png +0 -0
- package/src/web/public/images/app/intellij.png +0 -0
- package/src/web/public/images/app/jenkins.png +0 -0
- package/src/web/public/images/app/jira.png +0 -0
- package/src/web/public/images/app/kafka.png +0 -0
- package/src/web/public/images/app/kubernetes.png +0 -0
- package/src/web/public/images/app/linear.png +0 -0
- package/src/web/public/images/app/linkedin.png +0 -0
- package/src/web/public/images/app/llama.png +0 -0
- package/src/web/public/images/app/make.png +0 -0
- package/src/web/public/images/app/maven.png +0 -0
- package/src/web/public/images/app/mcp.png +0 -0
- package/src/web/public/images/app/microsoftteams.png +0 -0
- package/src/web/public/images/app/mistral.png +0 -0
- package/src/web/public/images/app/monday.png +0 -0
- package/src/web/public/images/app/mongodb.png +0 -0
- package/src/web/public/images/app/mssql.png +0 -0
- package/src/web/public/images/app/mysql.png +0 -0
- package/src/web/public/images/app/n8n.png +0 -0
- package/src/web/public/images/app/notion.png +0 -0
- package/src/web/public/images/app/npm.png +0 -0
- package/src/web/public/images/app/nuget.png +0 -0
- package/src/web/public/images/app/obsidian.png +0 -0
- package/src/web/public/images/app/openai.png +0 -0
- package/src/web/public/images/app/openrouter.png +0 -0
- package/src/web/public/images/app/opensearch.png +0 -0
- package/src/web/public/images/app/openshift.png +0 -0
- package/src/web/public/images/app/oracle.png +0 -0
- package/src/web/public/images/app/perplexity.png +0 -0
- package/src/web/public/images/app/pipedream.png +0 -0
- package/src/web/public/images/app/postgresql.png +0 -0
- package/src/web/public/images/app/powershell.png +0 -0
- package/src/web/public/images/app/prometheus.png +0 -0
- package/src/web/public/images/app/reddit.png +0 -0
- package/src/web/public/images/app/redis.png +0 -0
- package/src/web/public/images/app/rss.png +0 -0
- package/src/web/public/images/app/signal.png +0 -0
- package/src/web/public/images/app/slack.png +0 -0
- package/src/web/public/images/app/soap.png +0 -0
- package/src/web/public/images/app/sqlite.png +0 -0
- package/src/web/public/images/app/supabase.png +0 -0
- package/src/web/public/images/app/telegram.png +0 -0
- package/src/web/public/images/app/things3.png +0 -0
- package/src/web/public/images/app/threads.png +0 -0
- package/src/web/public/images/app/tiktok.png +0 -0
- package/src/web/public/images/app/together.png +0 -0
- package/src/web/public/images/app/trello.png +0 -0
- package/src/web/public/images/app/vscode.png +0 -0
- package/src/web/public/images/app/webhook.png +0 -0
- package/src/web/public/images/app/webpage.png +0 -0
- package/src/web/public/images/app/whatsappbusiness.png +0 -0
- package/src/web/public/images/app/windsorf.png +0 -0
- package/src/web/public/images/app/x.png +0 -0
- package/src/web/public/images/app/youtube.png +0 -0
- package/src/web/public/images/app/zapier.png +0 -0
- package/src/web/public/images/app/zededitor.png +0 -0
- package/src/web/public/images/app/zoom.png +0 -0
- package/src/web/public/images/avatar-anon.svg +4 -0
- package/src/web/public/images/favicon.png +0 -0
- package/src/web/public/images/install/chatgpt-web/step0.png +0 -0
- package/src/web/public/images/install/chatgpt-web/step1.png +0 -0
- package/src/web/public/images/install/chatgpt-web/step2.png +0 -0
- package/src/web/public/images/install/chatgpt-web/step3.png +0 -0
- package/src/web/public/images/install/chatgpt-web/step4.png +0 -0
- package/src/web/public/images/install/chatgpt-web/step5.png +0 -0
- package/src/web/public/images/readme/1-generate-servers.png +0 -0
- package/src/web/public/images/readme/2-database-connection.png +0 -0
- package/src/web/public/images/readme/2-file-upload.png +0 -0
- package/src/web/public/images/readme/3-data-preview.png +0 -0
- package/src/web/public/images/readme/4-data-preview2.png +0 -0
- package/src/web/public/images/readme/5-server-configuration.png +0 -0
- package/src/web/public/images/readme/6-server-generated-modal.png +0 -0
- package/src/web/public/images/readme/7-generated-servers.png +0 -0
- package/src/web/public/images/readme/8-generated-servers-view-details.png +0 -0
- package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.23.51.png +0 -0
- package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.24.59.png +0 -0
- package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.25.05.png +0 -0
- package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.25.14.png +0 -0
- package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.25.21.png +0 -0
- package/src/web/public/images/readme/Screenshot 2025-10-09 at 20.25.36.png +0 -0
- package/src/web/public/index.html +4685 -488
- package/src/web/public/landing.html +1638 -0
- package/src/web/public/logger.js +31 -0
- package/src/web/public/login.html +372 -0
- package/src/web/public/manage-servers.html +121 -188
- package/src/web/public/pricing.html +537 -0
- package/src/web/public/quick-ask.html +133 -0
- package/src/web/public/quickmcp-styles.css +708 -0
- package/src/web/public/roles.html +177 -0
- package/src/web/public/shared.js +736 -3
- package/src/web/public/sidebar.js +414 -0
- package/src/web/public/test-servers.html +605 -221
- package/src/web/public/users.html +191 -0
- package/dist/client/MCPClientUnified.d.ts +0 -31
- package/dist/client/MCPClientUnified.d.ts.map +0 -1
- package/dist/client/MCPClientUnified.js +0 -275
- package/dist/client/MCPClientUnified.js.map +0 -1
- package/dist/client/MCPTestRunnerUnified.d.ts +0 -48
- package/dist/client/MCPTestRunnerUnified.d.ts.map +0 -1
- package/dist/client/MCPTestRunnerUnified.js +0 -183
- package/dist/client/MCPTestRunnerUnified.js.map +0 -1
- package/dist/database/json-manager.d.ts +0 -55
- package/dist/database/json-manager.d.ts.map +0 -1
- package/dist/database/json-manager.js +0 -128
- package/dist/database/json-manager.js.map +0 -1
- package/dist/dynamic-mcp-executor.d.ts.map +0 -1
- package/dist/dynamic-mcp-executor.js +0 -274
- package/dist/dynamic-mcp-executor.js.map +0 -1
- package/dist/generators/MCPServerGenerator-new.d.ts +0 -37
- package/dist/generators/MCPServerGenerator-new.d.ts.map +0 -1
- package/dist/generators/MCPServerGenerator-new.js +0 -287
- package/dist/generators/MCPServerGenerator-new.js.map +0 -1
- package/dist/generators/database/sqlite-manager.d.ts +0 -52
- package/dist/generators/database/sqlite-manager.js +0 -143
- package/dist/generators/generators/MCPServerGenerator.d.ts +0 -37
- package/dist/generators/generators/MCPServerGenerator.js +0 -396
- package/dist/integrated-mcp-server.d.ts +0 -25
- package/dist/integrated-mcp-server.d.ts.map +0 -1
- package/dist/integrated-mcp-server.js +0 -541
- package/dist/integrated-mcp-server.js.map +0 -1
- package/dist/mcp-inspector-server.d.ts +0 -3
- package/dist/mcp-inspector-server.d.ts.map +0 -1
- package/dist/mcp-inspector-server.js +0 -119
- package/dist/mcp-inspector-server.js.map +0 -1
- package/dist/mcp-sdk-server.d.ts +0 -3
- package/dist/mcp-sdk-server.d.ts.map +0 -1
- package/dist/mcp-sdk-server.js +0 -90
- package/dist/mcp-sdk-server.js.map +0 -1
- package/dist/mcp-server.d.ts +0 -3
- package/dist/mcp-server.d.ts.map +0 -1
- package/dist/mcp-server.js +0 -300
- package/dist/mcp-server.js.map +0 -1
- package/dist/parsers/parsers/ExcelParser.js +0 -118
- package/dist/quickmcp-unified-bridge.d.ts +0 -13
- package/dist/quickmcp-unified-bridge.d.ts.map +0 -1
- package/dist/quickmcp-unified-bridge.js +0 -176
- package/dist/quickmcp-unified-bridge.js.map +0 -1
- package/dist/sqlite-manager.js +0 -145
- package/dist/test-app.d.ts +0 -2
- package/dist/test-app.d.ts.map +0 -1
- package/dist/test-app.js +0 -119
- package/dist/test-app.js.map +0 -1
- package/dist/transport/base-transport.d.ts +0 -21
- package/dist/transport/base-transport.d.ts.map +0 -1
- package/dist/transport/base-transport.js +0 -16
- package/dist/transport/base-transport.js.map +0 -1
- package/dist/transport/index.d.ts +0 -10
- package/dist/transport/index.d.ts.map +0 -1
- package/dist/transport/index.js +0 -12
- package/dist/transport/index.js.map +0 -1
- package/dist/transport/sse-transport.d.ts +0 -13
- package/dist/transport/sse-transport.d.ts.map +0 -1
- package/dist/transport/sse-transport.js +0 -106
- package/dist/transport/sse-transport.js.map +0 -1
- package/dist/transport/stdio-transport.d.ts +0 -8
- package/dist/transport/stdio-transport.d.ts.map +0 -1
- package/dist/transport/stdio-transport.js +0 -53
- package/dist/transport/stdio-transport.js.map +0 -1
- package/dist/transport/streamable-http-transport.d.ts +0 -15
- package/dist/transport/streamable-http-transport.d.ts.map +0 -1
- package/dist/transport/streamable-http-transport.js +0 -151
- package/dist/transport/streamable-http-transport.js.map +0 -1
- package/dist/web/client/MCPClient.js +0 -348
- package/dist/web/client/MCPTestRunner.js +0 -317
- package/dist/web/database/json-manager.js +0 -124
- package/dist/web/database/sqlite-manager.js +0 -146
- package/dist/web/dynamic-mcp-executor.js +0 -443
- package/dist/web/generators/MCPServerGenerator-new.js +0 -284
- package/dist/web/generators/MCPServerGenerator.js +0 -566
- package/dist/web/integrated-mcp-server-new.js +0 -394
- package/dist/web/parsers/CsvParser.js +0 -144
- package/dist/web/parsers/DatabaseParser.js +0 -637
- package/dist/web/parsers/ExcelParser.js +0 -180
- package/dist/web/parsers/index.js +0 -152
- package/dist/web/server.d.ts.map +0 -1
- package/dist/web/server.js +0 -790
- package/dist/web/server.js.map +0 -1
- package/dist/web/types/index.js +0 -2
- package/dist/web/web/server.js +0 -860
- package/src/web/public/modern-styles.css +0 -946
- package/src/web/public/shared-styles.css +0 -2091
- /package/src/web/public/images/{1-claude-quickmcp-stdio.png → readme/1-claude-quickmcp-stdio.png} +0 -0
- /package/src/web/public/images/{2-claude-tools.png → readme/2-claude-tools.png} +0 -0
- /package/src/web/public/images/{3-claude-developer-settings.png → readme/3-claude-developer-settings.png} +0 -0
- /package/src/web/public/images/{4-claude-config.png → readme/4-claude-config.png} +0 -0
- /package/src/web/public/images/{5-claude-config-edit.png → readme/5-claude-config-edit.png} +0 -0
|
@@ -1,457 +1,320 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
2
|
+
<html lang="en" class="h-full">
|
|
3
|
+
|
|
3
4
|
<head>
|
|
4
5
|
<meta charset="UTF-8">
|
|
5
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>Database Tables -
|
|
7
|
-
<link rel="stylesheet" href="shared-styles.css">
|
|
8
|
-
<style>
|
|
9
|
-
.table-grid {
|
|
10
|
-
display: grid;
|
|
11
|
-
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
|
12
|
-
gap: 1.5rem;
|
|
13
|
-
margin-top: 1rem;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
.table-card {
|
|
17
|
-
background: var(--card-background);
|
|
18
|
-
border: 1px solid var(--border-color);
|
|
19
|
-
border-radius: 8px;
|
|
20
|
-
padding: 1.5rem;
|
|
21
|
-
transition: all 0.2s ease;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
.table-card:hover {
|
|
25
|
-
transform: translateY(-2px);
|
|
26
|
-
box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1);
|
|
27
|
-
}
|
|
7
|
+
<title>Database Tables - QuickMCP</title>
|
|
28
8
|
|
|
29
|
-
|
|
30
|
-
display: flex;
|
|
31
|
-
align-items: center;
|
|
32
|
-
justify-content: space-between;
|
|
33
|
-
margin-bottom: 1rem;
|
|
34
|
-
}
|
|
9
|
+
<link rel="icon" type="image/png" href="/images/favicon.png">
|
|
35
10
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
font-weight: 600;
|
|
39
|
-
color: var(--text-primary);
|
|
40
|
-
margin: 0;
|
|
41
|
-
display: flex;
|
|
42
|
-
align-items: center;
|
|
43
|
-
gap: 0.5rem;
|
|
44
|
-
}
|
|
11
|
+
<!-- Tailwind CSS -->
|
|
12
|
+
<script src="https://cdn.tailwindcss.com"></script>
|
|
45
13
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
14
|
+
<!-- Font Awesome -->
|
|
15
|
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
|
|
49
16
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
gap: 1rem;
|
|
53
|
-
margin-bottom: 1rem;
|
|
54
|
-
}
|
|
17
|
+
<!-- Custom Archdraw Styles -->
|
|
18
|
+
<link rel="stylesheet" href="quickmcp-styles.css">
|
|
55
19
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
margin-top: 1rem;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
.data-header {
|
|
81
|
-
font-size: 0.9rem;
|
|
82
|
-
font-weight: 600;
|
|
83
|
-
color: var(--text-primary);
|
|
84
|
-
margin-bottom: 0.5rem;
|
|
85
|
-
padding-bottom: 0.5rem;
|
|
86
|
-
border-bottom: 1px solid var(--border-color);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
.data-grid {
|
|
90
|
-
overflow-x: auto;
|
|
91
|
-
margin-top: 0.5rem;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
.data-table {
|
|
95
|
-
width: 100%;
|
|
96
|
-
border-collapse: collapse;
|
|
97
|
-
background: white;
|
|
98
|
-
border-radius: 8px;
|
|
99
|
-
overflow: hidden;
|
|
100
|
-
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
|
20
|
+
<script>
|
|
21
|
+
tailwind.config = {
|
|
22
|
+
darkMode: 'class',
|
|
23
|
+
theme: {
|
|
24
|
+
extend: {
|
|
25
|
+
colors: {
|
|
26
|
+
slate: {
|
|
27
|
+
50: '#f8fafc',
|
|
28
|
+
100: '#f1f5f9',
|
|
29
|
+
200: '#e2e8f0',
|
|
30
|
+
300: '#cbd5e1',
|
|
31
|
+
400: '#94a3b8',
|
|
32
|
+
500: '#64748b',
|
|
33
|
+
600: '#475569',
|
|
34
|
+
700: '#334155',
|
|
35
|
+
800: '#1e293b',
|
|
36
|
+
900: '#0f172a',
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
101
41
|
}
|
|
102
|
-
|
|
42
|
+
</script>
|
|
43
|
+
<style>
|
|
44
|
+
/* Custom styles for data tables */
|
|
103
45
|
.data-table th {
|
|
104
|
-
background:
|
|
105
|
-
color:
|
|
106
|
-
padding: 0.75rem;
|
|
107
|
-
text-align: left;
|
|
46
|
+
background-color: #f1f5f9;
|
|
47
|
+
color: #475569;
|
|
108
48
|
font-weight: 600;
|
|
109
|
-
|
|
110
|
-
|
|
49
|
+
text-transform: uppercase;
|
|
50
|
+
font-size: 0.75rem;
|
|
51
|
+
letter-spacing: 0.05em;
|
|
52
|
+
padding: 0.75rem 1rem;
|
|
53
|
+
border-bottom: 1px solid #e2e8f0;
|
|
111
54
|
}
|
|
112
55
|
|
|
113
56
|
.data-table td {
|
|
114
|
-
padding: 0.75rem;
|
|
115
|
-
border-bottom: 1px solid
|
|
116
|
-
font-size: 0.
|
|
117
|
-
color:
|
|
118
|
-
max-width: 200px;
|
|
119
|
-
word-wrap: break-word;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
.data-table tr:nth-child(even) {
|
|
123
|
-
background: var(--secondary-color);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
.data-table tr:hover {
|
|
127
|
-
background: #e3f2fd;
|
|
57
|
+
padding: 0.75rem 1rem;
|
|
58
|
+
border-bottom: 1px solid #f1f5f9;
|
|
59
|
+
font-size: 0.875rem;
|
|
60
|
+
color: #334155;
|
|
128
61
|
}
|
|
129
62
|
|
|
130
63
|
.data-table tr:last-child td {
|
|
131
64
|
border-bottom: none;
|
|
132
65
|
}
|
|
133
66
|
|
|
134
|
-
.
|
|
135
|
-
|
|
136
|
-
color: var(--text-secondary);
|
|
137
|
-
font-style: italic;
|
|
138
|
-
padding: 2rem;
|
|
139
|
-
background: var(--secondary-color);
|
|
140
|
-
border-radius: 6px;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
.more-data {
|
|
144
|
-
text-align: center;
|
|
145
|
-
color: var(--text-secondary);
|
|
146
|
-
font-size: 0.9rem;
|
|
147
|
-
font-style: italic;
|
|
148
|
-
margin-top: 0.5rem;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
.table-actions {
|
|
152
|
-
display: flex;
|
|
153
|
-
gap: 0.5rem;
|
|
154
|
-
margin-top: 1rem;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
.btn-small {
|
|
158
|
-
font-size: 0.85rem;
|
|
159
|
-
padding: 0.5rem 1rem;
|
|
160
|
-
border: none;
|
|
161
|
-
border-radius: 4px;
|
|
162
|
-
cursor: pointer;
|
|
163
|
-
text-decoration: none;
|
|
164
|
-
display: inline-flex;
|
|
165
|
-
align-items: center;
|
|
166
|
-
gap: 0.5rem;
|
|
167
|
-
transition: all 0.2s ease;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
.btn-view {
|
|
171
|
-
background: var(--primary-color);
|
|
172
|
-
color: white;
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
.btn-view:hover {
|
|
176
|
-
background: var(--primary-dark);
|
|
177
|
-
transform: translateY(-1px);
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
.btn-query {
|
|
181
|
-
background: var(--secondary-color);
|
|
182
|
-
color: var(--text-primary);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
.btn-query:hover {
|
|
186
|
-
background: var(--secondary-dark);
|
|
187
|
-
transform: translateY(-1px);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
.empty-state {
|
|
191
|
-
text-align: center;
|
|
192
|
-
padding: 3rem;
|
|
193
|
-
color: var(--text-secondary);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
.empty-icon {
|
|
197
|
-
font-size: 4rem;
|
|
198
|
-
margin-bottom: 1rem;
|
|
199
|
-
opacity: 0.5;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
.refresh-btn {
|
|
203
|
-
position: fixed;
|
|
204
|
-
bottom: 2rem;
|
|
205
|
-
right: 2rem;
|
|
206
|
-
width: 56px;
|
|
207
|
-
height: 56px;
|
|
208
|
-
border: none;
|
|
209
|
-
border-radius: 50%;
|
|
210
|
-
background: var(--primary-color);
|
|
211
|
-
color: white;
|
|
212
|
-
font-size: 1.5rem;
|
|
213
|
-
cursor: pointer;
|
|
214
|
-
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
215
|
-
transition: all 0.2s ease;
|
|
216
|
-
z-index: 100;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
.refresh-btn:hover {
|
|
220
|
-
background: var(--primary-dark);
|
|
221
|
-
transform: scale(1.1);
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
.db-info {
|
|
225
|
-
background: var(--info-background);
|
|
226
|
-
border: 1px solid var(--info-border);
|
|
227
|
-
border-radius: 8px;
|
|
228
|
-
padding: 1rem;
|
|
229
|
-
margin-bottom: 2rem;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
.db-path {
|
|
233
|
-
font-family: monospace;
|
|
234
|
-
font-size: 0.9rem;
|
|
235
|
-
color: var(--text-secondary);
|
|
236
|
-
word-break: break-all;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
.tab-navigation {
|
|
240
|
-
display: flex;
|
|
241
|
-
border-bottom: 2px solid var(--border-color);
|
|
242
|
-
margin-bottom: 2rem;
|
|
243
|
-
gap: 0.5rem;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
.tab-button {
|
|
247
|
-
background: none;
|
|
248
|
-
border: none;
|
|
249
|
-
padding: 1rem 1.5rem;
|
|
250
|
-
cursor: pointer;
|
|
251
|
-
border-bottom: 3px solid transparent;
|
|
252
|
-
font-size: 0.95rem;
|
|
253
|
-
font-weight: 500;
|
|
254
|
-
color: var(--text-secondary);
|
|
255
|
-
transition: all 0.2s ease;
|
|
256
|
-
border-radius: 8px 8px 0 0;
|
|
257
|
-
display: flex;
|
|
258
|
-
align-items: center;
|
|
259
|
-
gap: 0.5rem;
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
.tab-button:hover {
|
|
263
|
-
background: var(--secondary-color);
|
|
264
|
-
color: var(--text-primary);
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
.tab-button.active {
|
|
268
|
-
color: var(--primary-color);
|
|
269
|
-
border-bottom-color: var(--primary-color);
|
|
270
|
-
background: var(--secondary-color);
|
|
271
|
-
font-weight: 600;
|
|
67
|
+
.data-table tr:hover td {
|
|
68
|
+
background-color: #f8fafc;
|
|
272
69
|
}
|
|
70
|
+
</style>
|
|
71
|
+
</head>
|
|
273
72
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
73
|
+
<body class="h-screen flex flex-col bg-gradient-to-br from-slate-50 to-slate-100 overflow-hidden text-slate-900">
|
|
74
|
+
|
|
75
|
+
<!-- Header -->
|
|
76
|
+
<header
|
|
77
|
+
class="backdrop-blur-sm bg-white/80 border-b border-slate-200/60 shadow-sm relative z-50 h-16 flex-shrink-0 flex items-center justify-between px-6 py-3">
|
|
78
|
+
<!-- Brand -->
|
|
79
|
+
<div class="flex items-center gap-6">
|
|
80
|
+
<div class="flex items-center gap-3">
|
|
81
|
+
<div
|
|
82
|
+
class="w-9 h-9 rounded-lg bg-blue-600 text-white flex items-center justify-center shadow-lg shadow-blue-500/25">
|
|
83
|
+
<i class="fas fa-rocket text-lg"></i>
|
|
84
|
+
</div>
|
|
85
|
+
<div>
|
|
86
|
+
<h1 class="text-xl font-bold gradient-text leading-tight">QuickMCP</h1>
|
|
87
|
+
<p class="text-xs text-slate-500 font-medium">Server Generator</p>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
<div class="h-8 w-px bg-gradient-to-b from-transparent via-slate-300 to-transparent hidden md:block"></div>
|
|
91
|
+
<div class="hidden md:flex items-center gap-2 text-sm font-medium text-slate-600">
|
|
92
|
+
<span>Database Tables</span>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
277
95
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
96
|
+
<!-- Actions -->
|
|
97
|
+
<div class="flex items-center gap-3">
|
|
98
|
+
<div
|
|
99
|
+
class="hidden sm:flex items-center gap-2 bg-green-50 text-green-700 px-3 py-1.5 rounded-lg text-sm font-medium border border-green-200/50">
|
|
100
|
+
<div class="w-2 h-2 bg-green-500 rounded-full animate-pulse"></div>
|
|
101
|
+
<span>System Online</span>
|
|
102
|
+
</div>
|
|
103
|
+
<button
|
|
104
|
+
class="p-2 rounded-lg hover:bg-slate-100 transition-colors relative text-slate-500 hover:text-slate-700">
|
|
105
|
+
<i class="fas fa-bell"></i>
|
|
106
|
+
<span class="absolute top-2 right-2 w-2 h-2 bg-red-500 rounded-full border-2 border-white"></span>
|
|
107
|
+
</button>
|
|
108
|
+
<div
|
|
109
|
+
class="w-8 h-8 rounded-full bg-gradient-to-tr from-blue-500 to-purple-500 text-white flex items-center justify-center text-sm font-bold shadow-md" data-user-avatar>
|
|
110
|
+
G
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
</header>
|
|
114
|
+
|
|
115
|
+
<!-- Main Body -->
|
|
116
|
+
<div class="flex flex-1 overflow-hidden">
|
|
117
|
+
|
|
118
|
+
<!-- Left Sidebar (Navigation) -->
|
|
119
|
+
<div class="w-72 bg-white/95 backdrop-blur-sm border-r border-slate-200/60 flex flex-col flex-shrink-0 z-40">
|
|
120
|
+
<!-- Sidebar Header -->
|
|
121
|
+
<div class="p-6 border-b border-slate-200/60 bg-gradient-to-r from-slate-50/50 to-white/50">
|
|
122
|
+
<div class="flex items-center justify-between mb-2">
|
|
123
|
+
<div class="flex items-center gap-3">
|
|
124
|
+
<div
|
|
125
|
+
class="w-8 h-8 flex items-center justify-center bg-gradient-to-br from-emerald-500 to-emerald-600 rounded-lg shadow-lg shadow-emerald-500/25">
|
|
126
|
+
<i class="fas fa-compass text-white"></i>
|
|
127
|
+
</div>
|
|
128
|
+
<div>
|
|
129
|
+
<h2 class="text-slate-900 font-bold tracking-tight text-lg">Navigation</h2>
|
|
130
|
+
<p class="text-slate-500 text-xs leading-none font-medium">Application Pages</p>
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
281
135
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
}
|
|
136
|
+
<!-- Navigation Links -->
|
|
137
|
+
<div class="p-4 overflow-y-auto flex-1 scrollbar-modern space-y-3">
|
|
285
138
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
139
|
+
<a href="/generate"
|
|
140
|
+
class="card card-hover group relative flex items-center gap-3 p-4 hover:border-blue-300 hover:shadow-blue-500/10 transition-all">
|
|
141
|
+
<div class="relative">
|
|
142
|
+
<div
|
|
143
|
+
class="p-2.5 rounded-lg shadow-sm bg-slate-100 text-slate-600 group-hover:bg-blue-50 group-hover:text-blue-600 transition-colors">
|
|
144
|
+
<i class="fas fa-magic"></i>
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
147
|
+
<div class="flex-1 min-w-0">
|
|
148
|
+
<span
|
|
149
|
+
class="text-slate-700 font-semibold text-sm block group-hover:text-blue-700 transition-colors">Generate
|
|
150
|
+
Server</span>
|
|
151
|
+
</div>
|
|
152
|
+
</a>
|
|
292
153
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
154
|
+
<a href="/manage-servers"
|
|
155
|
+
class="card card-hover group relative flex items-center gap-3 p-4 hover:border-blue-300 hover:shadow-blue-500/10 transition-all">
|
|
156
|
+
<div class="relative">
|
|
157
|
+
<div
|
|
158
|
+
class="p-2.5 rounded-lg shadow-sm bg-slate-100 text-slate-600 group-hover:bg-blue-50 group-hover:text-blue-600 transition-colors">
|
|
159
|
+
<i class="fas fa-server"></i>
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
<div class="flex-1 min-w-0">
|
|
163
|
+
<span
|
|
164
|
+
class="text-slate-700 font-semibold text-sm block group-hover:text-blue-700 transition-colors">Manage
|
|
165
|
+
Servers</span>
|
|
166
|
+
</div>
|
|
167
|
+
</a>
|
|
302
168
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
169
|
+
<a href="/test-servers"
|
|
170
|
+
class="card card-hover group relative flex items-center gap-3 p-4 hover:border-blue-300 hover:shadow-blue-500/10 transition-all">
|
|
171
|
+
<div class="relative">
|
|
172
|
+
<div
|
|
173
|
+
class="p-2.5 rounded-lg shadow-sm bg-slate-100 text-slate-600 group-hover:bg-blue-50 group-hover:text-blue-600 transition-colors">
|
|
174
|
+
<i class="fas fa-vial"></i>
|
|
175
|
+
</div>
|
|
176
|
+
</div>
|
|
177
|
+
<div class="flex-1 min-w-0">
|
|
178
|
+
<span
|
|
179
|
+
class="text-slate-700 font-semibold text-sm block group-hover:text-blue-700 transition-colors">Test
|
|
180
|
+
Servers</span>
|
|
181
|
+
</div>
|
|
182
|
+
</a>
|
|
308
183
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
184
|
+
<!-- Active Link -->
|
|
185
|
+
<a href="/database-tables"
|
|
186
|
+
class="card relative flex items-center gap-3 p-4 border-blue-400 shadow-md shadow-blue-500/10 bg-blue-50/30">
|
|
187
|
+
<div class="relative">
|
|
188
|
+
<div class="p-2.5 rounded-lg shadow-sm bg-blue-500 text-white">
|
|
189
|
+
<i class="fas fa-table"></i>
|
|
190
|
+
</div>
|
|
191
|
+
</div>
|
|
192
|
+
<div class="flex-1 min-w-0">
|
|
193
|
+
<span class="text-blue-900 font-bold text-sm block">Database Tables</span>
|
|
194
|
+
<span class="text-blue-600 text-xs mt-0.5 block font-medium">Inspect Data</span>
|
|
195
|
+
</div>
|
|
196
|
+
<div class="w-1.5 h-1.5 rounded-full bg-blue-500 shadow-sm"></div>
|
|
197
|
+
</a>
|
|
315
198
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
199
|
+
<a href="/how-to-use"
|
|
200
|
+
class="card card-hover group relative flex items-center gap-3 p-4 hover:border-blue-300 hover:shadow-blue-500/10 transition-all">
|
|
201
|
+
<div class="relative">
|
|
202
|
+
<div
|
|
203
|
+
class="p-2.5 rounded-lg shadow-sm bg-slate-100 text-slate-600 group-hover:bg-blue-50 group-hover:text-blue-600 transition-colors">
|
|
204
|
+
<i class="fas fa-book"></i>
|
|
205
|
+
</div>
|
|
206
|
+
</div>
|
|
207
|
+
<div class="flex-1 min-w-0">
|
|
208
|
+
<span
|
|
209
|
+
class="text-slate-700 font-semibold text-sm block group-hover:text-blue-700 transition-colors">How
|
|
210
|
+
to Use</span>
|
|
211
|
+
</div>
|
|
212
|
+
</a>
|
|
320
213
|
|
|
321
|
-
.refresh-btn {
|
|
322
|
-
bottom: 1rem;
|
|
323
|
-
right: 1rem;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
</style>
|
|
327
|
-
</head>
|
|
328
|
-
<body>
|
|
329
|
-
<div class="main-layout">
|
|
330
|
-
<!-- Sidebar -->
|
|
331
|
-
<div class="sidebar" id="sidebar">
|
|
332
|
-
<div class="sidebar-header">
|
|
333
|
-
<div class="sidebar-logo">QM</div>
|
|
334
|
-
<div class="sidebar-title">QuickMCP</div>
|
|
335
214
|
</div>
|
|
336
|
-
<nav class="sidebar-nav">
|
|
337
|
-
<a href="/" class="sidebar-nav-item">
|
|
338
|
-
<div class="icon">🚀</div>
|
|
339
|
-
<span>Generate Server</span>
|
|
340
|
-
</a>
|
|
341
|
-
<a href="/manage-servers" class="sidebar-nav-item">
|
|
342
|
-
<div class="icon">📋</div>
|
|
343
|
-
<span>Manage Servers</span>
|
|
344
|
-
</a>
|
|
345
|
-
<a href="/test-servers" class="sidebar-nav-item">
|
|
346
|
-
<div class="icon">🧪</div>
|
|
347
|
-
<span>Test Servers</span>
|
|
348
|
-
</a>
|
|
349
|
-
<a href="/database-tables" class="sidebar-nav-item active">
|
|
350
|
-
<div class="icon">🗃️</div>
|
|
351
|
-
<span>Database Tables</span>
|
|
352
|
-
</a>
|
|
353
|
-
<a href="/how-to-use" class="sidebar-nav-item">
|
|
354
|
-
<div class="icon">📖</div>
|
|
355
|
-
<span>How to Use</span>
|
|
356
|
-
</a>
|
|
357
|
-
</nav>
|
|
358
215
|
</div>
|
|
359
216
|
|
|
360
|
-
<!--
|
|
361
|
-
<div class="
|
|
217
|
+
<!-- Main Content Area -->
|
|
218
|
+
<div class="flex-1 relative bg-slate-50/50 overflow-hidden flex flex-col min-w-0">
|
|
219
|
+
<div class="absolute inset-0 shadow-inner shadow-slate-200/30 pointer-events-none z-10"></div>
|
|
362
220
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
<div class="topbar">
|
|
366
|
-
<button class="hamburger" id="hamburger" onclick="toggleSidebar()">
|
|
367
|
-
<span></span>
|
|
368
|
-
<span></span>
|
|
369
|
-
<span></span>
|
|
370
|
-
</button>
|
|
371
|
-
<div class="topbar-title">
|
|
372
|
-
MCP Server Generator - Database Tables
|
|
373
|
-
</div>
|
|
374
|
-
</div>
|
|
221
|
+
<div class="flex-1 overflow-y-auto scrollbar-modern p-8 relative z-0">
|
|
222
|
+
<div class="max-w-7xl mx-auto space-y-8 pb-20">
|
|
375
223
|
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
224
|
+
<div class="flex justify-between items-center">
|
|
225
|
+
<div>
|
|
226
|
+
<h2 class="text-3xl font-bold text-slate-900">SQLite Database Tables</h2>
|
|
227
|
+
<p class="text-slate-600 mt-1">Explore the internal database structure</p>
|
|
228
|
+
</div>
|
|
229
|
+
<button onclick="loadTables()"
|
|
230
|
+
class="bg-white border border-slate-200 hover:border-blue-400 text-slate-700 hover:text-blue-600 px-4 py-2 rounded-lg font-medium transition-colors shadow-sm flex items-center gap-2">
|
|
231
|
+
<i class="fas fa-sync-alt"></i> Refresh
|
|
232
|
+
</button>
|
|
381
233
|
</div>
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
<div class="
|
|
386
|
-
|
|
387
|
-
|
|
234
|
+
|
|
235
|
+
<div class="card p-6">
|
|
236
|
+
<div class="flex items-center gap-4 mb-6 p-4 bg-slate-50 rounded-xl border border-slate-200">
|
|
237
|
+
<div class="p-3 bg-blue-100 text-blue-600 rounded-lg">
|
|
238
|
+
<i class="fas fa-database text-xl"></i>
|
|
239
|
+
</div>
|
|
240
|
+
<div>
|
|
241
|
+
<h3 class="text-sm font-bold text-slate-900 uppercase tracking-wide">Database Path</h3>
|
|
242
|
+
<p class="text-xs font-mono text-slate-600 mt-1 break-all" id="dbPath">Loading...</p>
|
|
243
|
+
</div>
|
|
244
|
+
<div class="ml-auto text-right">
|
|
245
|
+
<h3 class="text-sm font-bold text-slate-900 uppercase tracking-wide">Total Tables</h3>
|
|
246
|
+
<p class="text-2xl font-bold text-blue-600 leading-none mt-1" id="tableCount">-</p>
|
|
388
247
|
</div>
|
|
389
248
|
</div>
|
|
390
249
|
|
|
391
250
|
<div id="tables-container">
|
|
392
|
-
<div
|
|
251
|
+
<div id="tablesLoading" class="text-center py-12">
|
|
252
|
+
<div
|
|
253
|
+
class="w-8 h-8 border-4 border-blue-600 border-t-transparent rounded-full animate-spin mx-auto mb-3">
|
|
254
|
+
</div>
|
|
255
|
+
<p class="text-sm font-medium text-blue-600">Loading database tables...</p>
|
|
256
|
+
</div>
|
|
393
257
|
|
|
394
258
|
<div id="tables-tabs" style="display: none;">
|
|
395
|
-
<!--
|
|
396
|
-
<div class="
|
|
397
|
-
<button
|
|
398
|
-
|
|
259
|
+
<!-- Tabs -->
|
|
260
|
+
<div class="flex border-b border-slate-200 mb-6">
|
|
261
|
+
<button
|
|
262
|
+
class="px-6 py-3 text-sm font-bold text-blue-600 border-b-2 border-blue-600 bg-blue-50/50 rounded-t-lg transition-colors tab-button active"
|
|
263
|
+
data-table="servers" onclick="switchTab('servers')">
|
|
264
|
+
<i class="fas fa-server mr-2"></i> Servers (<span id="servers-count">0</span>)
|
|
399
265
|
</button>
|
|
400
|
-
<button
|
|
401
|
-
|
|
266
|
+
<button
|
|
267
|
+
class="px-6 py-3 text-sm font-medium text-slate-600 hover:text-slate-900 border-b-2 border-transparent hover:bg-slate-50 rounded-t-lg transition-colors tab-button"
|
|
268
|
+
data-table="tools" onclick="switchTab('tools')">
|
|
269
|
+
<i class="fas fa-wrench mr-2"></i> Tools (<span id="tools-count">0</span>)
|
|
402
270
|
</button>
|
|
403
|
-
<button
|
|
404
|
-
|
|
271
|
+
<button
|
|
272
|
+
class="px-6 py-3 text-sm font-medium text-slate-600 hover:text-slate-900 border-b-2 border-transparent hover:bg-slate-50 rounded-t-lg transition-colors tab-button"
|
|
273
|
+
data-table="resources" onclick="switchTab('resources')">
|
|
274
|
+
<i class="fas fa-box mr-2"></i> Resources (<span id="resources-count">0</span>)
|
|
405
275
|
</button>
|
|
406
276
|
</div>
|
|
407
277
|
|
|
408
|
-
<!--
|
|
278
|
+
<!-- Content -->
|
|
409
279
|
<div class="tab-content">
|
|
410
|
-
<div id="tab-servers" class="tab-panel active">
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
<div id="tab-tools" class="tab-panel">
|
|
414
|
-
<!-- Tools table will be loaded here -->
|
|
415
|
-
</div>
|
|
416
|
-
<div id="tab-resources" class="tab-panel">
|
|
417
|
-
<!-- Resources table will be loaded here -->
|
|
418
|
-
</div>
|
|
280
|
+
<div id="tab-servers" class="tab-panel active"></div>
|
|
281
|
+
<div id="tab-tools" class="tab-panel hidden"></div>
|
|
282
|
+
<div id="tab-resources" class="tab-panel hidden"></div>
|
|
419
283
|
</div>
|
|
420
284
|
</div>
|
|
421
285
|
</div>
|
|
422
286
|
</div>
|
|
287
|
+
|
|
423
288
|
</div>
|
|
424
289
|
</div>
|
|
425
290
|
</div>
|
|
426
291
|
</div>
|
|
427
292
|
|
|
428
293
|
<!-- Table Details Modal -->
|
|
429
|
-
<div id="tableDetailsModal"
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
<
|
|
294
|
+
<div id="tableDetailsModal"
|
|
295
|
+
class="fixed inset-0 bg-slate-900/60 backdrop-blur-sm z-50 hidden flex items-center justify-center p-4">
|
|
296
|
+
<div class="bg-white rounded-2xl shadow-2xl max-w-4xl w-full max-h-[90vh] flex flex-col overflow-hidden">
|
|
297
|
+
<div class="p-6 border-b border-slate-200 flex justify-between items-center bg-slate-50">
|
|
298
|
+
<h2 class="text-xl font-bold text-slate-900" id="tableModalTitle">Table Details</h2>
|
|
299
|
+
<button onclick="closeTableDetailsModal()"
|
|
300
|
+
class="text-slate-400 hover:text-slate-600 transition-colors">
|
|
301
|
+
<i class="fas fa-times text-xl"></i>
|
|
302
|
+
</button>
|
|
434
303
|
</div>
|
|
435
|
-
<div class="
|
|
436
|
-
|
|
304
|
+
<div class="p-6 overflow-y-auto" id="tableModalBody">
|
|
305
|
+
<div class="text-center py-8">Loading...</div>
|
|
437
306
|
</div>
|
|
438
307
|
</div>
|
|
439
|
-
<div class="modal-overlay" onclick="closeTableDetailsModal()"></div>
|
|
440
308
|
</div>
|
|
441
309
|
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
🔄
|
|
445
|
-
</button>
|
|
446
|
-
|
|
447
|
-
<script src="shared.js"></script>
|
|
310
|
+
<script src="logger.js"></script>
|
|
311
|
+
<script src="shared.js"></script>
|
|
448
312
|
<script>
|
|
449
313
|
// Load tables when page loads
|
|
450
|
-
document.addEventListener('DOMContentLoaded', function() {
|
|
314
|
+
document.addEventListener('DOMContentLoaded', function () {
|
|
451
315
|
loadTables();
|
|
452
316
|
});
|
|
453
317
|
|
|
454
|
-
// Load database tables
|
|
455
318
|
async function loadTables() {
|
|
456
319
|
const loading = document.getElementById('tablesLoading');
|
|
457
320
|
const tabsContainer = document.getElementById('tables-tabs');
|
|
@@ -472,11 +335,11 @@
|
|
|
472
335
|
} catch (error) {
|
|
473
336
|
console.error('Error loading tables:', error);
|
|
474
337
|
tabsContainer.innerHTML = `
|
|
475
|
-
<div class="
|
|
476
|
-
<div class="
|
|
477
|
-
<h3>Failed to Load Tables</h3>
|
|
478
|
-
<p>Error: ${error.message}</p>
|
|
479
|
-
<button class="
|
|
338
|
+
<div class="text-center py-12">
|
|
339
|
+
<div class="text-red-500 text-4xl mb-4"><i class="fas fa-exclamation-circle"></i></div>
|
|
340
|
+
<h3 class="text-lg font-bold text-slate-900">Failed to Load Tables</h3>
|
|
341
|
+
<p class="text-slate-600 mb-4">Error: ${error.message}</p>
|
|
342
|
+
<button class="bg-blue-600 text-white px-4 py-2 rounded-lg" onclick="loadTables()">Retry</button>
|
|
480
343
|
</div>
|
|
481
344
|
`;
|
|
482
345
|
tabsContainer.style.display = 'block';
|
|
@@ -485,71 +348,56 @@
|
|
|
485
348
|
}
|
|
486
349
|
}
|
|
487
350
|
|
|
488
|
-
// Update database info
|
|
489
351
|
function updateDatabaseInfo(data) {
|
|
490
352
|
document.getElementById('dbPath').textContent = data.dbPath || 'Unknown';
|
|
491
353
|
document.getElementById('tableCount').textContent = data.tables.length;
|
|
492
354
|
}
|
|
493
355
|
|
|
494
|
-
// Display tables in tab format
|
|
495
356
|
function displayTables(tables) {
|
|
496
357
|
const tabsContainer = document.getElementById('tables-tabs');
|
|
497
358
|
|
|
498
359
|
if (tables.length === 0) {
|
|
499
360
|
tabsContainer.innerHTML = `
|
|
500
|
-
<div class="
|
|
501
|
-
<div class="
|
|
502
|
-
<h3>No Tables Found</h3>
|
|
503
|
-
<p>The database appears to be empty
|
|
361
|
+
<div class="text-center py-12">
|
|
362
|
+
<div class="text-slate-300 text-4xl mb-4"><i class="fas fa-table"></i></div>
|
|
363
|
+
<h3 class="text-lg font-bold text-slate-900">No Tables Found</h3>
|
|
364
|
+
<p class="text-slate-600">The database appears to be empty.</p>
|
|
504
365
|
</div>
|
|
505
366
|
`;
|
|
506
367
|
return;
|
|
507
368
|
}
|
|
508
369
|
|
|
509
|
-
// Update counts in tab buttons
|
|
510
370
|
tables.forEach(table => {
|
|
511
371
|
const countSpan = document.getElementById(`${table.name}-count`);
|
|
512
|
-
if (countSpan)
|
|
513
|
-
countSpan.textContent = table.rowCount || 0;
|
|
514
|
-
}
|
|
372
|
+
if (countSpan) countSpan.textContent = table.rowCount || 0;
|
|
515
373
|
});
|
|
516
374
|
|
|
517
|
-
// Display each table in its tab panel
|
|
518
375
|
tables.forEach(table => {
|
|
519
376
|
const tabPanel = document.getElementById(`tab-${table.name}`);
|
|
520
|
-
if (tabPanel)
|
|
521
|
-
tabPanel.innerHTML = generateTableHTML(table);
|
|
522
|
-
}
|
|
377
|
+
if (tabPanel) tabPanel.innerHTML = generateTableHTML(table);
|
|
523
378
|
});
|
|
524
379
|
|
|
525
380
|
tabsContainer.style.display = 'block';
|
|
526
381
|
}
|
|
527
382
|
|
|
528
|
-
// Generate HTML for a single table
|
|
529
383
|
function generateTableHTML(table) {
|
|
530
384
|
if (!table.sampleData || table.sampleData.length === 0) {
|
|
531
385
|
return `
|
|
532
|
-
<div class="
|
|
533
|
-
<
|
|
534
|
-
<span class="table-icon">${getTableIcon(table.name)}</span>
|
|
535
|
-
${table.name} - No data available
|
|
536
|
-
</div>
|
|
537
|
-
<div class="no-data" style="padding: 3rem;">
|
|
538
|
-
<div>This table is empty</div>
|
|
539
|
-
</div>
|
|
386
|
+
<div class="text-center py-12 bg-slate-50 rounded-xl border border-slate-200 border-dashed">
|
|
387
|
+
<p class="text-slate-500 italic">No data available in ${table.name}</p>
|
|
540
388
|
</div>
|
|
541
389
|
`;
|
|
542
390
|
}
|
|
543
391
|
|
|
544
392
|
return `
|
|
545
|
-
<div class="
|
|
546
|
-
<div class="
|
|
547
|
-
<span class="
|
|
548
|
-
|
|
393
|
+
<div class="border border-slate-200 rounded-xl overflow-hidden">
|
|
394
|
+
<div class="bg-slate-50 px-4 py-3 border-b border-slate-200 flex justify-between items-center">
|
|
395
|
+
<span class="font-bold text-slate-700 text-sm uppercase">${table.name}</span>
|
|
396
|
+
<span class="text-xs text-slate-500">${table.rowCount} rows</span>
|
|
549
397
|
</div>
|
|
550
|
-
<div class="
|
|
551
|
-
<table class="data-table"
|
|
552
|
-
<thead
|
|
398
|
+
<div class="overflow-x-auto">
|
|
399
|
+
<table class="w-full data-table">
|
|
400
|
+
<thead>
|
|
553
401
|
<tr>
|
|
554
402
|
${table.columns.map(col => `<th>${col.name}</th>`).join('')}
|
|
555
403
|
</tr>
|
|
@@ -559,9 +407,9 @@
|
|
|
559
407
|
<tr>
|
|
560
408
|
${table.columns.map(col => `
|
|
561
409
|
<td>${row[col.name] !== null && row[col.name] !== undefined ?
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
410
|
+
(typeof row[col.name] === 'string' && row[col.name].length > 100 ?
|
|
411
|
+
row[col.name].substring(0, 100) + '...' :
|
|
412
|
+
row[col.name]) : '<em class="text-slate-400">NULL</em>'}</td>
|
|
565
413
|
`).join('')}
|
|
566
414
|
</tr>
|
|
567
415
|
`).join('')}
|
|
@@ -569,143 +417,31 @@
|
|
|
569
417
|
</table>
|
|
570
418
|
</div>
|
|
571
419
|
${table.sampleData.length >= 5 ? `
|
|
572
|
-
<div
|
|
573
|
-
Showing first ${table.sampleData.length} rows
|
|
420
|
+
<div class="bg-slate-50 px-4 py-2 border-t border-slate-200 text-center text-xs text-slate-500">
|
|
421
|
+
Showing first ${table.sampleData.length} rows
|
|
574
422
|
</div>
|
|
575
423
|
` : ''}
|
|
576
424
|
</div>
|
|
577
425
|
`;
|
|
578
426
|
}
|
|
579
427
|
|
|
580
|
-
// Switch between tabs
|
|
581
428
|
function switchTab(tableName) {
|
|
582
|
-
// Update tab buttons
|
|
583
429
|
document.querySelectorAll('.tab-button').forEach(btn => {
|
|
584
|
-
btn.classList.remove('active');
|
|
585
|
-
|
|
586
|
-
document.querySelector(`[data-table="${tableName}"]`).classList.add('active');
|
|
587
|
-
|
|
588
|
-
// Update tab panels
|
|
589
|
-
document.querySelectorAll('.tab-panel').forEach(panel => {
|
|
590
|
-
panel.classList.remove('active');
|
|
430
|
+
btn.classList.remove('active', 'text-blue-600', 'border-b-2', 'border-blue-600', 'bg-blue-50/50');
|
|
431
|
+
btn.classList.add('text-slate-600', 'border-transparent');
|
|
591
432
|
});
|
|
592
|
-
document.
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
// Get table icon based on table name
|
|
596
|
-
function getTableIcon(tableName) {
|
|
597
|
-
switch(tableName.toLowerCase()) {
|
|
598
|
-
case 'servers': return '🖥️';
|
|
599
|
-
case 'tools': return '🔧';
|
|
600
|
-
case 'resources': return '📦';
|
|
601
|
-
default: return '📋';
|
|
602
|
-
}
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
// View table details
|
|
606
|
-
async function viewTableDetails(tableName) {
|
|
607
|
-
const modal = document.getElementById('tableDetailsModal');
|
|
608
|
-
const title = document.getElementById('tableModalTitle');
|
|
609
|
-
const body = document.getElementById('tableModalBody');
|
|
610
|
-
|
|
611
|
-
title.textContent = `Table: ${tableName}`;
|
|
612
|
-
body.innerHTML = '<div class="loading">Loading table details...</div>';
|
|
613
|
-
modal.style.display = 'block';
|
|
614
|
-
|
|
615
|
-
try {
|
|
616
|
-
const response = await fetch(`/api/database/tables/${tableName}`);
|
|
617
|
-
const result = await response.json();
|
|
618
|
-
|
|
619
|
-
if (result.success) {
|
|
620
|
-
displayTableDetails(result.data);
|
|
621
|
-
} else {
|
|
622
|
-
throw new Error(result.error || 'Failed to load table details');
|
|
623
|
-
}
|
|
624
|
-
} catch (error) {
|
|
625
|
-
console.error('Error loading table details:', error);
|
|
626
|
-
body.innerHTML = `<div class="error">Failed to load table details: ${error.message}</div>`;
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
|
|
630
|
-
// Display table details
|
|
631
|
-
function displayTableDetails(data) {
|
|
632
|
-
const body = document.getElementById('tableModalBody');
|
|
633
|
-
|
|
634
|
-
let detailsHtml = `
|
|
635
|
-
<div class="table-details">
|
|
636
|
-
<div class="info-section">
|
|
637
|
-
<h3>Table Information</h3>
|
|
638
|
-
<div class="info-grid">
|
|
639
|
-
<div><strong>Name:</strong> ${data.name}</div>
|
|
640
|
-
<div><strong>Columns:</strong> ${data.columns.length}</div>
|
|
641
|
-
<div><strong>Row Count:</strong> ${data.rowCount}</div>
|
|
642
|
-
</div>
|
|
643
|
-
</div>
|
|
644
|
-
|
|
645
|
-
<div class="info-section">
|
|
646
|
-
<h3>Column Schema</h3>
|
|
647
|
-
<div class="schema-table">
|
|
648
|
-
<table style="width: 100%; border-collapse: collapse;">
|
|
649
|
-
<thead>
|
|
650
|
-
<tr style="background: var(--secondary-color);">
|
|
651
|
-
<th style="padding: 0.75rem; border: 1px solid var(--border-color); text-align: left;">Column</th>
|
|
652
|
-
<th style="padding: 0.75rem; border: 1px solid var(--border-color); text-align: left;">Type</th>
|
|
653
|
-
<th style="padding: 0.75rem; border: 1px solid var(--border-color); text-align: left;">Not Null</th>
|
|
654
|
-
<th style="padding: 0.75rem; border: 1px solid var(--border-color); text-align: left;">Primary Key</th>
|
|
655
|
-
</tr>
|
|
656
|
-
</thead>
|
|
657
|
-
<tbody>
|
|
658
|
-
${data.columns.map(column => `
|
|
659
|
-
<tr>
|
|
660
|
-
<td style="padding: 0.75rem; border: 1px solid var(--border-color); font-family: monospace;">${column.name}</td>
|
|
661
|
-
<td style="padding: 0.75rem; border: 1px solid var(--border-color);">${column.type}</td>
|
|
662
|
-
<td style="padding: 0.75rem; border: 1px solid var(--border-color);">${column.notnull ? '✅' : '❌'}</td>
|
|
663
|
-
<td style="padding: 0.75rem; border: 1px solid var(--border-color);">${column.pk ? '🔑' : '❌'}</td>
|
|
664
|
-
</tr>
|
|
665
|
-
`).join('')}
|
|
666
|
-
</tbody>
|
|
667
|
-
</table>
|
|
668
|
-
</div>
|
|
669
|
-
</div>
|
|
670
|
-
`;
|
|
433
|
+
const activeBtn = document.querySelector(`[data-table="${tableName}"]`);
|
|
434
|
+
activeBtn.classList.add('active', 'text-blue-600', 'border-b-2', 'border-blue-600', 'bg-blue-50/50');
|
|
435
|
+
activeBtn.classList.remove('text-slate-600', 'border-transparent');
|
|
671
436
|
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
<div class="info-section">
|
|
675
|
-
<h3>Sample Data (First 10 rows)</h3>
|
|
676
|
-
<div style="overflow-x: auto;">
|
|
677
|
-
<table style="width: 100%; border-collapse: collapse; min-width: 500px;">
|
|
678
|
-
<thead>
|
|
679
|
-
<tr style="background: var(--secondary-color);">
|
|
680
|
-
${data.columns.map(col => `<th style="padding: 0.5rem; border: 1px solid var(--border-color); text-align: left; font-size: 0.9rem;">${col.name}</th>`).join('')}
|
|
681
|
-
</tr>
|
|
682
|
-
</thead>
|
|
683
|
-
<tbody>
|
|
684
|
-
${data.sampleData.map(row => `
|
|
685
|
-
<tr>
|
|
686
|
-
${data.columns.map(col => `
|
|
687
|
-
<td style="padding: 0.5rem; border: 1px solid var(--border-color); font-size: 0.85rem; max-width: 200px; word-wrap: break-word;">
|
|
688
|
-
${row[col.name] !== null && row[col.name] !== undefined ? row[col.name] : '<em>NULL</em>'}
|
|
689
|
-
</td>
|
|
690
|
-
`).join('')}
|
|
691
|
-
</tr>
|
|
692
|
-
`).join('')}
|
|
693
|
-
</tbody>
|
|
694
|
-
</table>
|
|
695
|
-
</div>
|
|
696
|
-
</div>
|
|
697
|
-
`;
|
|
698
|
-
}
|
|
699
|
-
|
|
700
|
-
detailsHtml += '</div>';
|
|
701
|
-
body.innerHTML = detailsHtml;
|
|
437
|
+
document.querySelectorAll('.tab-panel').forEach(panel => panel.classList.add('hidden'));
|
|
438
|
+
document.getElementById(`tab-${tableName}`).classList.remove('hidden');
|
|
702
439
|
}
|
|
703
440
|
|
|
704
|
-
// Close table details modal
|
|
705
441
|
function closeTableDetailsModal() {
|
|
706
|
-
document.getElementById('tableDetailsModal').
|
|
442
|
+
document.getElementById('tableDetailsModal').classList.add('hidden');
|
|
707
443
|
}
|
|
708
|
-
|
|
709
444
|
</script>
|
|
710
445
|
</body>
|
|
711
|
-
|
|
446
|
+
|
|
447
|
+
</html>
|