pycharter 0.0.24__py3-none-any.whl → 0.0.26__py3-none-any.whl
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.
- pycharter/__init__.py +6 -0
- pycharter/api/README.md +340 -0
- {api → pycharter/api}/__init__.py +1 -1
- {api → pycharter/api}/dependencies/__init__.py +2 -2
- pycharter/api/dependencies/auth.py +158 -0
- {api → pycharter/api}/main.py +32 -4
- {api → pycharter/api}/models/__init__.py +4 -4
- pycharter/api/models/etl.py +66 -0
- {api → pycharter/api}/routes/v1/__init__.py +5 -1
- pycharter/api/routes/v1/auth.py +97 -0
- {api → pycharter/api}/routes/v1/contracts.py +14 -12
- {api → pycharter/api}/routes/v1/docs.py +2 -2
- pycharter/api/routes/v1/etl.py +131 -0
- {api → pycharter/api}/routes/v1/evolution.py +2 -2
- {api → pycharter/api}/routes/v1/metadata.py +5 -5
- {api → pycharter/api}/routes/v1/quality.py +3 -3
- {api → pycharter/api}/routes/v1/schemas.py +1 -1
- {api → pycharter/api}/routes/v1/settings.py +1 -1
- {api → pycharter/api}/routes/v1/tracking.py +1 -1
- {api → pycharter/api}/routes/v1/validation.py +2 -2
- {api → pycharter/api}/routes/v1/validation_jobs.py +3 -3
- pycharter/cli.py +9 -11
- pycharter/config.py +69 -0
- pycharter/contract_builder/builder.py +32 -37
- pycharter/data/seed/compliance_frameworks.yaml +22 -0
- pycharter/data/seed/contracts.yaml +130 -0
- pycharter/data/seed/data_feeds.yaml +22 -0
- pycharter/data/seed/domains.yaml +13 -0
- pycharter/data/seed/environments.yaml +19 -0
- pycharter/data/seed/owners.yaml +21 -0
- pycharter/data/seed/systems.yaml +13 -0
- pycharter/data/seed/tags.yaml +25 -0
- pycharter/data/templates/contract/README.md +161 -0
- pycharter/data/templates/contract/template_contract.yaml +37 -0
- pycharter/data/templates/etl/README.md +1 -1
- pycharter/data/templates/etl/extract_with_validation.yaml +86 -0
- pycharter/data/templates/etl/load_with_validation.yaml +111 -0
- pycharter/data/templates/etl/settings.yaml +55 -0
- pycharter/db/README.md +179 -0
- pycharter/db/cli.py +126 -4
- pycharter/db/migrations/versions/20260122000000_change_artifact_unique_constraints_to_title_version.py +2 -2
- pycharter/db/schemas/README.md +96 -0
- pycharter/etl_generator/ASYNC_AND_EXECUTION.md +91 -0
- pycharter/etl_generator/INTERFACES.md +142 -0
- pycharter/etl_generator/README.md +271 -0
- pycharter/etl_generator/TRANSFORMATION_GUIDE.md +452 -0
- pycharter/etl_generator/__init__.py +47 -11
- pycharter/etl_generator/config_models.py +673 -0
- pycharter/etl_generator/config_validator.py +133 -157
- pycharter/etl_generator/context.py +3 -0
- pycharter/etl_generator/database.py +5 -1
- pycharter/etl_generator/extractors/__init__.py +4 -2
- pycharter/etl_generator/extractors/cloud_storage.py +9 -9
- pycharter/etl_generator/extractors/database.py +2 -2
- pycharter/etl_generator/extractors/factory.py +15 -33
- pycharter/etl_generator/extractors/file.py +2 -2
- pycharter/etl_generator/extractors/http.py +2 -2
- pycharter/etl_generator/extractors/mongodb.py +393 -0
- pycharter/etl_generator/extractors/streaming.py +2 -2
- pycharter/etl_generator/loaders/__init__.py +15 -9
- pycharter/etl_generator/loaders/{cloud_storage_loader.py → cloud_storage.py} +95 -2
- pycharter/etl_generator/loaders/factory.py +16 -29
- pycharter/etl_generator/loaders/file.py +135 -1
- pycharter/etl_generator/loaders/mongodb.py +416 -0
- pycharter/etl_generator/pipeline.py +283 -164
- pycharter/etl_generator/result.py +16 -0
- pycharter/etl_generator/schemas/__init__.py +71 -42
- pycharter/etl_generator/transformers/config.py +3 -2
- pycharter/etl_generator/transformers/simple_operations.py +57 -4
- pycharter/etl_generator/validation.py +551 -0
- pycharter/metadata_store/README.md +229 -0
- pycharter/quality/README.md +235 -0
- pycharter/runtime_validator/__init__.py +7 -0
- pycharter/runtime_validator/utils.py +33 -0
- pycharter/runtime_validator/validator.py +13 -10
- pycharter/ui/.eslintrc.json +4 -0
- pycharter/ui/README.md +186 -0
- {ui → pycharter/ui}/__init__.py +3 -3
- pycharter/ui/components.json +17 -0
- pycharter/ui/package-lock.json +6617 -0
- pycharter/ui/package.json +37 -0
- {ui → pycharter/ui}/server.py +7 -8
- pycharter/ui/static/404/index.html +1 -0
- pycharter/ui/static/404.html +1 -0
- pycharter/ui/static/__next.__PAGE__.txt +10 -0
- pycharter/ui/static/__next._full.txt +30 -0
- pycharter/ui/static/__next._head.txt +7 -0
- pycharter/ui/static/__next._index.txt +9 -0
- pycharter/ui/static/__next._tree.txt +2 -0
- pycharter/ui/static/_next/static/YCnlK66gA7FV5vvcixspB/_clientMiddlewareManifest.json +1 -0
- pycharter/ui/static/_next/static/chunks/0fc1f70b787b8845.js +1 -0
- pycharter/ui/static/_next/static/chunks/17bb8075d7b75663.css +1 -0
- pycharter/ui/static/_next/static/chunks/381932864dcbfdb8.js +1 -0
- pycharter/ui/static/_next/static/chunks/4c951b8e4507e2b3.js +1 -0
- pycharter/ui/static/_next/static/chunks/68b87a6f65abd3ed.js +1 -0
- pycharter/ui/static/_next/static/chunks/78572617b8fae189.js +1 -0
- pycharter/ui/static/_next/static/chunks/8b7be2803e3fe184.js +1 -0
- pycharter/ui/static/_next/static/chunks/a8e529fd1e67f121.js +1 -0
- pycharter/ui/static/_next/static/chunks/c35d998f80be3ff5.js +1 -0
- pycharter/ui/static/_next/static/chunks/e453aa5d01c32c17.js +1 -0
- pycharter/ui/static/_next/static/chunks/f2d240eb057f898a.js +970 -0
- pycharter/ui/static/_next/static/chunks/f7722448f6040846.js +1 -0
- pycharter/ui/static/_not-found/__next._full.txt +17 -0
- pycharter/ui/static/_not-found/__next._head.txt +7 -0
- pycharter/ui/static/_not-found/__next._index.txt +9 -0
- pycharter/ui/static/_not-found/__next._not-found.__PAGE__.txt +5 -0
- pycharter/ui/static/_not-found/__next._not-found.txt +4 -0
- pycharter/ui/static/_not-found/__next._tree.txt +2 -0
- pycharter/ui/static/_not-found/index.html +1 -0
- pycharter/ui/static/_not-found/index.txt +17 -0
- pycharter/ui/static/contracts/__next._full.txt +21 -0
- pycharter/ui/static/contracts/__next._head.txt +7 -0
- pycharter/ui/static/contracts/__next._index.txt +9 -0
- pycharter/ui/static/contracts/__next._tree.txt +2 -0
- pycharter/ui/static/contracts/__next.contracts.__PAGE__.txt +9 -0
- pycharter/ui/static/contracts/__next.contracts.txt +4 -0
- pycharter/ui/static/contracts/index.html +1 -0
- pycharter/ui/static/contracts/index.txt +21 -0
- pycharter/ui/static/documentation/__next._full.txt +21 -0
- pycharter/ui/static/documentation/__next._head.txt +7 -0
- pycharter/ui/static/documentation/__next._index.txt +9 -0
- pycharter/ui/static/documentation/__next._tree.txt +2 -0
- pycharter/ui/static/documentation/__next.documentation.__PAGE__.txt +9 -0
- pycharter/ui/static/documentation/__next.documentation.txt +4 -0
- pycharter/ui/static/documentation/index.html +93 -0
- pycharter/ui/static/documentation/index.txt +21 -0
- pycharter/ui/static/etl/__next._full.txt +21 -0
- pycharter/ui/static/etl/__next._head.txt +7 -0
- pycharter/ui/static/etl/__next._index.txt +9 -0
- pycharter/ui/static/etl/__next._tree.txt +2 -0
- pycharter/ui/static/etl/__next.etl.__PAGE__.txt +9 -0
- pycharter/ui/static/etl/__next.etl.txt +4 -0
- pycharter/ui/static/etl/index.html +2 -0
- pycharter/ui/static/etl/index.txt +21 -0
- pycharter/ui/static/index.html +1 -0
- pycharter/ui/static/index.txt +30 -0
- pycharter/ui/static/metadata/__next._full.txt +21 -0
- pycharter/ui/static/metadata/__next._head.txt +7 -0
- pycharter/ui/static/metadata/__next._index.txt +9 -0
- pycharter/ui/static/metadata/__next._tree.txt +2 -0
- pycharter/ui/static/metadata/__next.metadata.__PAGE__.txt +9 -0
- pycharter/ui/static/metadata/__next.metadata.txt +4 -0
- pycharter/ui/static/metadata/index.html +1 -0
- pycharter/ui/static/metadata/index.txt +21 -0
- pycharter/ui/static/quality/__next._full.txt +21 -0
- pycharter/ui/static/quality/__next._head.txt +7 -0
- pycharter/ui/static/quality/__next._index.txt +9 -0
- pycharter/ui/static/quality/__next._tree.txt +2 -0
- pycharter/ui/static/quality/__next.quality.__PAGE__.txt +9 -0
- pycharter/ui/static/quality/__next.quality.txt +4 -0
- pycharter/ui/static/quality/index.html +2 -0
- pycharter/ui/static/quality/index.txt +21 -0
- pycharter/ui/static/rules/__next._full.txt +21 -0
- pycharter/ui/static/rules/__next._head.txt +7 -0
- pycharter/ui/static/rules/__next._index.txt +9 -0
- pycharter/ui/static/rules/__next._tree.txt +2 -0
- pycharter/ui/static/rules/__next.rules.__PAGE__.txt +9 -0
- pycharter/ui/static/rules/__next.rules.txt +4 -0
- pycharter/ui/static/rules/index.html +1 -0
- pycharter/ui/static/rules/index.txt +21 -0
- pycharter/ui/static/schemas/__next._full.txt +21 -0
- pycharter/ui/static/schemas/__next._head.txt +7 -0
- pycharter/ui/static/schemas/__next._index.txt +9 -0
- pycharter/ui/static/schemas/__next._tree.txt +2 -0
- pycharter/ui/static/schemas/__next.schemas.__PAGE__.txt +9 -0
- pycharter/ui/static/schemas/__next.schemas.txt +4 -0
- pycharter/ui/static/schemas/index.html +1 -0
- pycharter/ui/static/schemas/index.txt +21 -0
- pycharter/ui/static/settings/__next._full.txt +21 -0
- pycharter/ui/static/settings/__next._head.txt +7 -0
- pycharter/ui/static/settings/__next._index.txt +9 -0
- pycharter/ui/static/settings/__next._tree.txt +2 -0
- pycharter/ui/static/settings/__next.settings.__PAGE__.txt +9 -0
- pycharter/ui/static/settings/__next.settings.txt +4 -0
- pycharter/ui/static/settings/index.html +1 -0
- pycharter/ui/static/settings/index.txt +21 -0
- pycharter/ui/static/static/_next/static/2gKjNv6YvE6BcIdFthBLs/_clientMiddlewareManifest.json +1 -0
- pycharter/ui/static/static/static/_next/static/0rYA78L88aUyD2Uh38hhX/_clientMiddlewareManifest.json +1 -0
- pycharter/ui/static/static/static/_next/static/chunks/f7d1a90dd75d2572.js +1 -0
- pycharter/ui/static/static/static/static/.gitkeep +0 -0
- pycharter/ui/static/static/static/static/_next/static/chunks/222442f6da32302a.js +1 -0
- pycharter/ui/static/static/static/static/_next/static/chunks/247eb132b7f7b574.js +1 -0
- pycharter/ui/static/static/static/static/_next/static/chunks/297d55555b71baba.js +1 -0
- pycharter/ui/static/static/static/static/_next/static/chunks/414e77373f8ff61c.js +1 -0
- pycharter/ui/static/static/static/static/_next/static/chunks/652ad0aa26265c47.js +2 -0
- pycharter/ui/static/static/static/static/_next/static/chunks/9c23f44fff36548a.js +1 -0
- pycharter/ui/static/static/static/static/_next/static/chunks/a6dad97d9634a72d.js +1 -0
- pycharter/ui/static/static/static/static/_next/static/chunks/b32a0963684b9933.js +4 -0
- pycharter/ui/static/static/static/static/_next/static/chunks/db913959c675cea6.js +1 -0
- pycharter/ui/static/static/static/static/_next/static/chunks/f2e7afeab1178138.js +1 -0
- pycharter/ui/static/static/static/static/_next/static/chunks/ff1a16fafef87110.js +1 -0
- pycharter/ui/static/static/static/static/_next/static/chunks/turbopack-ffcb7ab6794027ef.js +3 -0
- pycharter/ui/static/static/static/static/_next/static/tNTkVW6puVXC4bAm4WrHl/_buildManifest.js +11 -0
- pycharter/ui/static/static/static/static/_next/static/tNTkVW6puVXC4bAm4WrHl/_clientMiddlewareManifest.json +1 -0
- pycharter/ui/static/static/static/static/_next/static/tNTkVW6puVXC4bAm4WrHl/_ssgManifest.js +1 -0
- pycharter/ui/static/validation/__next._full.txt +21 -0
- pycharter/ui/static/validation/__next._head.txt +7 -0
- pycharter/ui/static/validation/__next._index.txt +9 -0
- pycharter/ui/static/validation/__next._tree.txt +2 -0
- pycharter/ui/static/validation/__next.validation.__PAGE__.txt +9 -0
- pycharter/ui/static/validation/__next.validation.txt +4 -0
- pycharter/ui/static/validation/index.html +1 -0
- pycharter/ui/static/validation/index.txt +21 -0
- pycharter/ui/tsconfig.json +42 -0
- pycharter/worker/README.md +187 -0
- pycharter/worker/backends/__init__.py +8 -0
- pycharter/worker/backends/base.py +46 -0
- pycharter/worker/backends/spark.py +233 -0
- {worker → pycharter/worker}/cli.py +1 -1
- {worker → pycharter/worker}/processor.py +2 -2
- pycharter/worker/queue/__init__.py +8 -0
- pycharter/worker/queue/redis_queue.py +147 -0
- {pycharter-0.0.24.dist-info → pycharter-0.0.26.dist-info}/METADATA +57 -26
- pycharter-0.0.26.dist-info/RECORD +702 -0
- pycharter-0.0.26.dist-info/top_level.txt +1 -0
- pycharter/etl_generator/config_loader.py +0 -394
- pycharter/etl_generator/loaders/cloud.py +0 -87
- pycharter/etl_generator/loaders/file_loader.py +0 -130
- pycharter-0.0.24.dist-info/RECORD +0 -543
- pycharter-0.0.24.dist-info/top_level.txt +0 -4
- {api → pycharter/api}/dependencies/database.py +0 -0
- {api → pycharter/api}/dependencies/store.py +0 -0
- {api → pycharter/api}/models/contracts.py +0 -0
- {api → pycharter/api}/models/docs.py +0 -0
- {api → pycharter/api}/models/evolution.py +0 -0
- {api → pycharter/api}/models/metadata.py +0 -0
- {api → pycharter/api}/models/metadata_entities.py +0 -0
- {api → pycharter/api}/models/quality.py +0 -0
- {api → pycharter/api}/models/schemas.py +0 -0
- {api → pycharter/api}/models/tracking.py +0 -0
- {api → pycharter/api}/models/validation.py +0 -0
- {api → pycharter/api}/routes/__init__.py +0 -0
- {api → pycharter/api}/routes/v1/templates.py +0 -0
- {api → pycharter/api}/utils.py +0 -0
- {ui → pycharter/ui}/build.py +0 -0
- {ui → pycharter/ui}/dev.py +0 -0
- {ui → pycharter/ui}/static/.gitkeep +0 -0
- {ui/static/_next/static/2gKjNv6YvE6BcIdFthBLs → pycharter/ui/static/_next/static/YCnlK66gA7FV5vvcixspB}/_buildManifest.js +0 -0
- {ui/static/_next/static/2gKjNv6YvE6BcIdFthBLs → pycharter/ui/static/_next/static/YCnlK66gA7FV5vvcixspB}/_ssgManifest.js +0 -0
- {ui → pycharter/ui}/static/_next/static/chunks/222442f6da32302a.js +0 -0
- {ui → pycharter/ui}/static/_next/static/chunks/247eb132b7f7b574.js +0 -0
- {ui → pycharter/ui}/static/_next/static/chunks/297d55555b71baba.js +0 -0
- {ui → pycharter/ui}/static/_next/static/chunks/414e77373f8ff61c.js +0 -0
- {ui → pycharter/ui}/static/_next/static/chunks/652ad0aa26265c47.js +0 -0
- {ui → pycharter/ui}/static/_next/static/chunks/9c23f44fff36548a.js +0 -0
- {ui → pycharter/ui}/static/_next/static/chunks/a6dad97d9634a72d.js +0 -0
- {ui → pycharter/ui}/static/_next/static/chunks/b32a0963684b9933.js +0 -0
- {ui → pycharter/ui}/static/_next/static/chunks/db913959c675cea6.js +0 -0
- {ui → pycharter/ui}/static/_next/static/chunks/f2e7afeab1178138.js +0 -0
- {ui → pycharter/ui}/static/_next/static/chunks/f7d1a90dd75d2572.js +0 -0
- {ui → pycharter/ui}/static/_next/static/chunks/ff1a16fafef87110.js +0 -0
- {ui → pycharter/ui}/static/_next/static/chunks/turbopack-ffcb7ab6794027ef.js +0 -0
- {ui → pycharter/ui}/static/static/.gitkeep +0 -0
- {ui → pycharter/ui/static}/static/404/index.html +0 -0
- {ui → pycharter/ui/static}/static/404.html +0 -0
- {ui → pycharter/ui/static}/static/__next.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/__next._tree.txt +0 -0
- {ui/static/static/_next/static/0rYA78L88aUyD2Uh38hhX → pycharter/ui/static/static/_next/static/2gKjNv6YvE6BcIdFthBLs}/_buildManifest.js +0 -0
- {ui/static/static/_next/static/0rYA78L88aUyD2Uh38hhX → pycharter/ui/static/static/_next/static/2gKjNv6YvE6BcIdFthBLs}/_ssgManifest.js +0 -0
- {ui → pycharter/ui/static}/static/_next/static/chunks/13d4a0fbd74c1ee4.js +0 -0
- {ui → pycharter/ui}/static/static/_next/static/chunks/222442f6da32302a.js +0 -0
- {ui → pycharter/ui}/static/static/_next/static/chunks/247eb132b7f7b574.js +0 -0
- {ui → pycharter/ui/static}/static/_next/static/chunks/26dfc590f7714c03.js +0 -0
- {ui → pycharter/ui}/static/static/_next/static/chunks/297d55555b71baba.js +0 -0
- {ui → pycharter/ui/static}/static/_next/static/chunks/2ab439ce003cd691.js +0 -0
- {ui → pycharter/ui/static}/static/_next/static/chunks/2edb43b48432ac04.js +0 -0
- {ui → pycharter/ui/static}/static/_next/static/chunks/34d289e6db2ef551.js +0 -0
- {ui → pycharter/ui}/static/static/_next/static/chunks/414e77373f8ff61c.js +0 -0
- {ui → pycharter/ui/static}/static/_next/static/chunks/49ca65abd26ae49e.js +0 -0
- {ui → pycharter/ui}/static/static/_next/static/chunks/652ad0aa26265c47.js +0 -0
- {ui → pycharter/ui/static}/static/_next/static/chunks/9667e7a3d359eb39.js +0 -0
- {ui → pycharter/ui/static}/static/_next/static/chunks/99508d9d5869cc27.js +0 -0
- {ui → pycharter/ui}/static/static/_next/static/chunks/9c23f44fff36548a.js +0 -0
- {ui → pycharter/ui}/static/static/_next/static/chunks/a6dad97d9634a72d.js +0 -0
- {ui → pycharter/ui/static}/static/_next/static/chunks/b313c35a6ba76574.js +0 -0
- {ui → pycharter/ui}/static/static/_next/static/chunks/b32a0963684b9933.js +0 -0
- {ui → pycharter/ui/static}/static/_next/static/chunks/c69f6cba366bd988.js +0 -0
- {ui → pycharter/ui/static}/static/_next/static/chunks/d2363397e1b2bcab.css +0 -0
- {ui → pycharter/ui}/static/static/_next/static/chunks/db913959c675cea6.js +0 -0
- {ui → pycharter/ui/static}/static/_next/static/chunks/f061a4be97bfc3b3.js +0 -0
- {ui → pycharter/ui}/static/static/_next/static/chunks/f2e7afeab1178138.js +0 -0
- {ui → pycharter/ui}/static/static/_next/static/chunks/f7d1a90dd75d2572.js +0 -0
- {ui → pycharter/ui}/static/static/_next/static/chunks/ff1a16fafef87110.js +0 -0
- {ui → pycharter/ui}/static/static/_next/static/chunks/turbopack-ffcb7ab6794027ef.js +0 -0
- {ui → pycharter/ui/static}/static/_not-found/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/_not-found/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/_not-found/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/_not-found/__next._not-found.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/_not-found/__next._not-found.txt +0 -0
- {ui → pycharter/ui/static}/static/_not-found/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/_not-found/index.html +0 -0
- {ui → pycharter/ui/static}/static/_not-found/index.txt +0 -0
- {ui → pycharter/ui/static}/static/contracts/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/contracts/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/contracts/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/contracts/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/contracts/__next.contracts.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/contracts/__next.contracts.txt +0 -0
- {ui → pycharter/ui/static}/static/contracts/index.html +0 -0
- {ui → pycharter/ui/static}/static/contracts/index.txt +0 -0
- {ui → pycharter/ui/static}/static/documentation/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/documentation/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/documentation/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/documentation/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/documentation/__next.documentation.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/documentation/__next.documentation.txt +0 -0
- {ui → pycharter/ui/static}/static/documentation/index.html +0 -0
- {ui → pycharter/ui/static}/static/documentation/index.txt +0 -0
- {ui → pycharter/ui/static}/static/index.html +0 -0
- {ui → pycharter/ui/static}/static/index.txt +0 -0
- {ui → pycharter/ui/static}/static/metadata/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/metadata/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/metadata/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/metadata/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/metadata/__next.metadata.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/metadata/__next.metadata.txt +0 -0
- {ui → pycharter/ui/static}/static/metadata/index.html +0 -0
- {ui → pycharter/ui/static}/static/metadata/index.txt +0 -0
- {ui → pycharter/ui/static}/static/quality/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/quality/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/quality/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/quality/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/quality/__next.quality.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/quality/__next.quality.txt +0 -0
- {ui → pycharter/ui/static}/static/quality/index.html +0 -0
- {ui → pycharter/ui/static}/static/quality/index.txt +0 -0
- {ui → pycharter/ui/static}/static/rules/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/rules/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/rules/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/rules/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/rules/__next.rules.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/rules/__next.rules.txt +0 -0
- {ui → pycharter/ui/static}/static/rules/index.html +0 -0
- {ui → pycharter/ui/static}/static/rules/index.txt +0 -0
- {ui → pycharter/ui/static}/static/schemas/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/schemas/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/schemas/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/schemas/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/schemas/__next.schemas.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/schemas/__next.schemas.txt +0 -0
- {ui → pycharter/ui/static}/static/schemas/index.html +0 -0
- {ui → pycharter/ui/static}/static/schemas/index.txt +0 -0
- {ui → pycharter/ui/static}/static/settings/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/settings/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/settings/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/settings/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/settings/__next.settings.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/settings/__next.settings.txt +0 -0
- {ui → pycharter/ui/static}/static/settings/index.html +0 -0
- {ui → pycharter/ui/static}/static/settings/index.txt +0 -0
- {ui → pycharter/ui}/static/static/static/.gitkeep +0 -0
- {ui → pycharter/ui/static}/static/static/404/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/404.html +0 -0
- {ui → pycharter/ui/static}/static/static/__next.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/__next._tree.txt +0 -0
- {ui/static/static/static/_next/static/tNTkVW6puVXC4bAm4WrHl → pycharter/ui/static/static/static/_next/static/0rYA78L88aUyD2Uh38hhX}/_buildManifest.js +0 -0
- {ui/static/static/static/_next/static/tNTkVW6puVXC4bAm4WrHl → pycharter/ui/static/static/static/_next/static/0rYA78L88aUyD2Uh38hhX}/_ssgManifest.js +0 -0
- {ui → pycharter/ui/static}/static/static/_next/static/chunks/13d4a0fbd74c1ee4.js +0 -0
- {ui → pycharter/ui}/static/static/static/_next/static/chunks/222442f6da32302a.js +0 -0
- {ui → pycharter/ui}/static/static/static/_next/static/chunks/247eb132b7f7b574.js +0 -0
- {ui → pycharter/ui}/static/static/static/_next/static/chunks/297d55555b71baba.js +0 -0
- {ui → pycharter/ui/static}/static/static/_next/static/chunks/2ab439ce003cd691.js +0 -0
- {ui → pycharter/ui/static}/static/static/_next/static/chunks/2edb43b48432ac04.js +0 -0
- {ui → pycharter/ui}/static/static/static/_next/static/chunks/414e77373f8ff61c.js +0 -0
- {ui → pycharter/ui/static}/static/static/_next/static/chunks/49ca65abd26ae49e.js +0 -0
- {ui → pycharter/ui/static}/static/static/_next/static/chunks/5e04d10c4a7b58a3.js +0 -0
- {ui → pycharter/ui}/static/static/static/_next/static/chunks/652ad0aa26265c47.js +0 -0
- {ui → pycharter/ui/static}/static/static/_next/static/chunks/75d88a058d8ffaa6.js +0 -0
- {ui → pycharter/ui/static}/static/static/_next/static/chunks/8c89634cf6bad76f.js +0 -0
- {ui → pycharter/ui/static}/static/static/_next/static/chunks/9667e7a3d359eb39.js +0 -0
- {ui → pycharter/ui}/static/static/static/_next/static/chunks/9c23f44fff36548a.js +0 -0
- {ui → pycharter/ui}/static/static/static/_next/static/chunks/a6dad97d9634a72d.js +0 -0
- {ui → pycharter/ui}/static/static/static/_next/static/chunks/b32a0963684b9933.js +0 -0
- {ui → pycharter/ui/static}/static/static/_next/static/chunks/c4fa4f4114b7c352.js +0 -0
- {ui → pycharter/ui/static}/static/static/_next/static/chunks/c69f6cba366bd988.js +0 -0
- {ui → pycharter/ui/static}/static/static/_next/static/chunks/d2363397e1b2bcab.css +0 -0
- {ui → pycharter/ui}/static/static/static/_next/static/chunks/db913959c675cea6.js +0 -0
- {ui → pycharter/ui/static}/static/static/_next/static/chunks/f061a4be97bfc3b3.js +0 -0
- {ui → pycharter/ui}/static/static/static/_next/static/chunks/f2e7afeab1178138.js +0 -0
- {ui → pycharter/ui}/static/static/static/_next/static/chunks/ff1a16fafef87110.js +0 -0
- {ui → pycharter/ui}/static/static/static/_next/static/chunks/turbopack-ffcb7ab6794027ef.js +0 -0
- {ui → pycharter/ui/static}/static/static/_not-found/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/_not-found/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/_not-found/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/_not-found/__next._not-found.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/_not-found/__next._not-found.txt +0 -0
- {ui → pycharter/ui/static}/static/static/_not-found/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/_not-found/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/_not-found/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/contracts/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/contracts/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/contracts/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/contracts/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/contracts/__next.contracts.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/contracts/__next.contracts.txt +0 -0
- {ui → pycharter/ui/static}/static/static/contracts/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/contracts/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/documentation/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/documentation/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/documentation/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/documentation/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/documentation/__next.documentation.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/documentation/__next.documentation.txt +0 -0
- {ui → pycharter/ui/static}/static/static/documentation/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/documentation/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/metadata/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/metadata/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/metadata/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/metadata/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/metadata/__next.metadata.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/metadata/__next.metadata.txt +0 -0
- {ui → pycharter/ui/static}/static/static/metadata/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/metadata/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/quality/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/quality/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/quality/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/quality/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/quality/__next.quality.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/quality/__next.quality.txt +0 -0
- {ui → pycharter/ui/static}/static/static/quality/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/quality/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/rules/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/rules/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/rules/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/rules/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/rules/__next.rules.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/rules/__next.rules.txt +0 -0
- {ui → pycharter/ui/static}/static/static/rules/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/rules/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/schemas/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/schemas/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/schemas/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/schemas/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/schemas/__next.schemas.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/schemas/__next.schemas.txt +0 -0
- {ui → pycharter/ui/static}/static/static/schemas/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/schemas/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/settings/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/settings/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/settings/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/settings/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/settings/__next.settings.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/settings/__next.settings.txt +0 -0
- {ui → pycharter/ui/static}/static/static/settings/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/settings/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/404/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/static/404.html +0 -0
- {ui → pycharter/ui/static}/static/static/static/__next.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/_next/static/chunks/2ab439ce003cd691.js +0 -0
- {ui → pycharter/ui/static}/static/static/static/_next/static/chunks/49ca65abd26ae49e.js +0 -0
- {ui → pycharter/ui/static}/static/static/static/_next/static/chunks/4e310fe5005770a3.css +0 -0
- {ui → pycharter/ui/static}/static/static/static/_next/static/chunks/5e04d10c4a7b58a3.js +0 -0
- {ui → pycharter/ui/static}/static/static/static/_next/static/chunks/5fc14c00a2779dc5.js +0 -0
- {ui → pycharter/ui/static}/static/static/static/_next/static/chunks/75d88a058d8ffaa6.js +0 -0
- {ui → pycharter/ui/static}/static/static/static/_next/static/chunks/8c89634cf6bad76f.js +0 -0
- {ui → pycharter/ui/static}/static/static/static/_next/static/chunks/9667e7a3d359eb39.js +0 -0
- {ui → pycharter/ui/static}/static/static/static/_next/static/chunks/b584574fdc8ab13e.js +0 -0
- {ui → pycharter/ui/static}/static/static/static/_next/static/chunks/c69f6cba366bd988.js +0 -0
- {ui → pycharter/ui/static}/static/static/static/_next/static/chunks/d5989c94d3614b3a.js +0 -0
- {ui → pycharter/ui/static}/static/static/static/_next/static/chunks/f061a4be97bfc3b3.js +0 -0
- {ui → pycharter/ui/static}/static/static/static/_not-found/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/_not-found/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/_not-found/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/_not-found/__next._not-found.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/_not-found/__next._not-found.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/_not-found/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/_not-found/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/static/_not-found/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/contracts/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/contracts/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/contracts/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/contracts/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/contracts/__next.contracts.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/contracts/__next.contracts.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/contracts/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/static/contracts/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/documentation/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/documentation/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/documentation/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/documentation/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/documentation/__next.documentation.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/documentation/__next.documentation.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/documentation/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/static/documentation/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/static/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/metadata/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/metadata/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/metadata/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/metadata/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/metadata/__next.metadata.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/metadata/__next.metadata.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/metadata/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/static/metadata/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/quality/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/quality/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/quality/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/quality/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/quality/__next.quality.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/quality/__next.quality.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/quality/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/static/quality/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/rules/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/rules/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/rules/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/rules/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/rules/__next.rules.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/rules/__next.rules.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/rules/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/static/rules/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/schemas/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/schemas/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/schemas/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/schemas/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/schemas/__next.schemas.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/schemas/__next.schemas.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/schemas/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/static/schemas/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/settings/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/settings/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/settings/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/settings/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/settings/__next.settings.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/settings/__next.settings.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/settings/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/static/settings/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/validation/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/validation/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/validation/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/validation/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/validation/__next.validation.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/validation/__next.validation.txt +0 -0
- {ui → pycharter/ui/static}/static/static/static/validation/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/static/validation/index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/validation/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/static/validation/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/static/validation/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/static/validation/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/static/validation/__next.validation.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/static/validation/__next.validation.txt +0 -0
- {ui → pycharter/ui/static}/static/static/validation/index.html +0 -0
- {ui → pycharter/ui/static}/static/static/validation/index.txt +0 -0
- {ui → pycharter/ui/static}/static/validation/__next._full.txt +0 -0
- {ui → pycharter/ui/static}/static/validation/__next._head.txt +0 -0
- {ui → pycharter/ui/static}/static/validation/__next._index.txt +0 -0
- {ui → pycharter/ui/static}/static/validation/__next._tree.txt +0 -0
- {ui → pycharter/ui/static}/static/validation/__next.validation.__PAGE__.txt +0 -0
- {ui → pycharter/ui/static}/static/validation/__next.validation.txt +0 -0
- {ui → pycharter/ui/static}/static/validation/index.html +0 -0
- {ui → pycharter/ui/static}/static/validation/index.txt +0 -0
- {worker → pycharter/worker}/__init__.py +0 -0
- {worker → pycharter/worker}/models.py +0 -0
- {pycharter-0.0.24.dist-info → pycharter-0.0.26.dist-info}/WHEEL +0 -0
- {pycharter-0.0.24.dist-info → pycharter-0.0.26.dist-info}/entry_points.txt +0 -0
- {pycharter-0.0.24.dist-info → pycharter-0.0.26.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,95468,e=>{"use strict";let t=(0,e.i(75254).default)("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);e.s(["CheckCircle2",()=>t],95468)},73884,e=>{"use strict";let t=(0,e.i(75254).default)("CircleX",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);e.s(["XCircle",()=>t],73884)},43668,e=>{"use strict";var t=e.i(47167);let a="pycharter_settings",n={apiServer:{url:t.default.env.NEXT_PUBLIC_API_URL||"http://localhost:8000"},database:{enabled:!1},dlq:{enabled:!1}};function r(){try{let e=localStorage.getItem(a);if(e){let t=JSON.parse(e);return{...n,...t,apiServer:{...n.apiServer,...t.apiServer},database:{...n.database,...t.database},dlq:{...n.dlq,...t.dlq}}}}catch(e){console.error("Failed to load settings:",e)}return n}function i(e){try{localStorage.setItem(a,JSON.stringify(e))}catch(e){throw console.error("Failed to save settings:",e),e}}function l(){return r().apiServer.url||n.apiServer.url}e.s(["getApiBaseUrl",()=>l,"getSettings",()=>r,"saveSettings",()=>i])},9165,e=>{"use strict";var t=e.i(43668);class a extends Error{status;response;constructor(e,t,a){super(e),this.status=t,this.response=a,this.name="ApiError"}}async function n(e,n){let r=`${(0,t.getApiBaseUrl)()}${e}`;try{let e=await fetch(r,{...n,headers:{"Content-Type":"application/json",...n?.headers}});if(!e.ok){let t;try{t=await e.json()}catch{t={detail:e.statusText}}let n=t.detail||`API request failed: ${e.statusText}`;throw 422===e.status&&t.details&&Array.isArray(t.details)&&(n=t.details.map(e=>{let t=e.loc?.join(".")||e.field||"field",a=e.msg||e.message||"validation error";return`${t}: ${a}`}).join("; ")||n),new a(n,e.status,t)}let t=e.headers.get("content-type");if(t&&t.includes("application/json"))return e.json();return e.text()}catch(n){if(n instanceof TypeError&&"Failed to fetch"===n.message){let n=(0,t.getApiBaseUrl)();throw new a(`Unable to connect to API server at ${n}. Please ensure the API server is running and the URL is correct.`,0,{originalError:"NetworkError",apiUrl:n,endpoint:e,suggestion:"Check your API server settings in the Settings page"})}throw n}}async function r(e){return n(e,{method:"GET"})}async function i(e,t){return n(e,{method:"POST",body:t?JSON.stringify(t):void 0})}async function l(e,t){return n(e,{method:"PUT",body:t?JSON.stringify(t):void 0})}async function o(e,n){let r=`${(0,t.getApiBaseUrl)()}${e}`,i=await fetch(r,{method:"POST",body:n});if(!i.ok){let e;try{e=await i.json()}catch{e={detail:i.statusText}}throw new a(e.detail||`API request failed: ${i.statusText}`,i.status,e)}let l=i.headers.get("content-type");return l&&l.includes("application/json")?i.json():i.text()}async function s(e){let n=`${(0,t.getApiBaseUrl)()}${e}`,r=await fetch(n,{method:"GET"});if(!r.ok){let e;try{e=await r.json()}catch{e={detail:r.statusText}}throw new a(e.detail||`API request failed: ${r.statusText}`,r.status,e)}return r.blob()}e.s(["ApiError",()=>a,"api",0,{contracts:{list:()=>r("/api/v1/contracts"),get:e=>r(`/api/v1/contracts/${e}`),parse:e=>i("/api/v1/contracts/parse",{contract:e}),parseFile:(e,t)=>{let a=new FormData;return a.append("file",e),void 0!==t&&a.append("validate",String(t)),o("/api/v1/contracts/parse/upload",a)},build:e=>i("/api/v1/contracts/build",e),buildFromId:(e,t)=>{let a=new URLSearchParams;t?.include_metadata!==void 0&&a.append("include_metadata",String(t.include_metadata)),t?.include_ownership!==void 0&&a.append("include_ownership",String(t.include_ownership)),t?.include_governance!==void 0&&a.append("include_governance",String(t.include_governance));let n=a.toString();return i(`/api/v1/contracts/${e}/build${n?`?${n}`:""}`,{})},createFromArtifacts:e=>i("/api/v1/contracts/create-from-artifacts",e),createMixed:e=>i("/api/v1/contracts/create-mixed",e),update:(e,t)=>l(`/api/v1/contracts/${e}`,t)},metadata:{listSchemas:()=>r("/api/v1/metadata/schemas"),getSchema:(e,t)=>{let a=t?`?version=${t}`:"";return r(`/api/v1/metadata/schemas/${e}${a}`)},getCompleteSchema:(e,t)=>{let a=t?`?version=${t}`:"";return r(`/api/v1/metadata/schemas/${e}/complete${a}`)},storeSchema:e=>i("/api/v1/metadata/schemas",e),getMetadata:(e,t)=>{let a=t?`?version=${t}`:"";return r(`/api/v1/metadata/metadata/${e}${a}`)},storeMetadata:e=>i("/api/v1/metadata/metadata",e),getCoercionRules:(e,t)=>{let a=t?`?version=${t}`:"";return r(`/api/v1/metadata/coercion-rules/${e}${a}`)},storeCoercionRules:e=>i("/api/v1/metadata/coercion-rules",e),getValidationRules:(e,t)=>{let a=t?`?version=${t}`:"";return r(`/api/v1/metadata/validation-rules/${e}${a}`)},storeValidationRules:e=>i("/api/v1/metadata/validation-rules",e),getEntityList:e=>r(`/api/v1/metadata/${e}`),createEntity:(e,t)=>i(`/api/v1/metadata/${e}`,t),updateEntity:(e,t,a)=>l(`/api/v1/metadata/${e}/${t}`,a),listArtifacts:()=>r("/api/v1/metadata/artifacts")},validation:{validate:e=>i("/api/v1/validation/validate",e),validateBatch:e=>i("/api/v1/validation/validate-batch",e)},schemas:{generate:e=>i("/api/v1/schemas/generate",e),convert:e=>i("/api/v1/schemas/convert",e)},quality:{listMetrics:e=>{let t=new URLSearchParams;e?.schema_id&&t.append("schema_id",e.schema_id),e?.limit&&t.append("limit",e.limit.toString()),e?.offset&&t.append("offset",e.offset.toString());let a=t.toString();return r(`/api/v1/quality/metrics${a?`?${a}`:""}`)},getMetric:e=>r(`/api/v1/quality/metrics/${e}`),getReport:(e,t)=>{let a=new URLSearchParams;t?.data_source&&a.append("data_source",t.data_source),t?.limit&&a.append("limit",t.limit.toString());let n=a.toString();return r(`/api/v1/quality/reports/${e}${n?`?${n}`:""}`)},check:e=>i("/api/v1/quality/check",e),checkUpload:(e,t)=>{let a=new FormData;return a.append("file",e),t.schema_id&&a.append("schema_id",t.schema_id),t.contract&&a.append("contract",t.contract),void 0!==t.record_violations&&a.append("record_violations",String(t.record_violations)),void 0!==t.calculate_metrics&&a.append("calculate_metrics",String(t.calculate_metrics)),void 0!==t.check_thresholds&&a.append("check_thresholds",String(t.check_thresholds)),t.thresholds&&a.append("thresholds",t.thresholds),void 0!==t.include_field_metrics&&a.append("include_field_metrics",String(t.include_field_metrics)),void 0!==t.sample_size&&a.append("sample_size",String(t.sample_size)),t.data_source&&a.append("data_source",t.data_source),t.data_version&&a.append("data_version",t.data_version),o("/api/v1/quality/check/upload",a)},queryViolations:e=>i("/api/v1/quality/violations",e)},templates:{downloadSchema:()=>s("/api/v1/templates/schema"),downloadContractArtifacts:()=>s("/api/v1/templates/contract-artifacts"),listEtlTemplates:()=>n("/api/v1/templates/etl"),downloadEtlTemplate:async e=>{let n=(0,t.getApiBaseUrl)().replace(/\/$/,""),r=await fetch(`${n}/api/v1/templates/etl/${encodeURIComponent(e)}`);if(!r.ok)throw new a(await r.text()||r.statusText,r.status);return r.text()}},settings:{testDatabase:e=>i("/api/v1/settings/test-database",e),testDlq:e=>i("/api/v1/settings/test-dlq",e),getDlqStats:e=>i("/api/v1/settings/dlq-stats",e)}}])},63209,e=>{"use strict";let t=(0,e.i(75254).default)("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);e.s(["AlertCircle",()=>t],63209)},56909,e=>{"use strict";let t=(0,e.i(75254).default)("Save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);e.s(["Save",()=>t],56909)},46652,e=>{"use strict";var t=e.i(71645),a=e.i(9165);function n(){let[e,n]=(0,t.useState)([]),[r,i]=(0,t.useState)(!0),[l,o]=(0,t.useState)(null),s=(0,t.useCallback)(async()=>{try{i(!0),o(null);let e=await a.api.contracts.list();n(e.contracts)}catch(t){let e="Failed to load contracts";t instanceof a.ApiError&&(e=0===t.status||t.message.includes("Unable to connect")?"API server is not running. Please start it with: pycharter api":t.message),o(e),console.error("Error loading contracts:",t)}finally{i(!1)}},[]);return(0,t.useEffect)(()=>{s()},[s]),{contracts:e,loading:r,error:l,refetch:s}}e.s(["useContracts",()=>n])},98919,52571,e=>{"use strict";var t=e.i(75254);let a=(0,t.default)("Shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);e.s(["Shield",()=>a],98919);let n=(0,t.default)("Info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);e.s(["Info",()=>n],52571)},78583,e=>{"use strict";let t=(0,e.i(75254).default)("FileText",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);e.s(["FileText",()=>t],78583)},69074,e=>{"use strict";let t=(0,e.i(75254).default)("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]]);e.s(["Upload",()=>t],69074)},71921,e=>{"use strict";let t;var a=e.i(43476),n=e.i(71645);function r(e,t="Assertion error"){if(!e)throw Error(t)}function i({group:e}){let{orientation:t,panels:a}=e;return a.reduce((e,a)=>e+="horizontal"===t?a.element.offsetWidth:a.element.offsetHeight,0)}function l(e,t){return t.sort("horizontal"===e?o:s)}function o(e,t){let a=e.element.offsetLeft-t.element.offsetLeft;return 0!==a?a:e.element.offsetWidth-t.element.offsetWidth}function s(e,t){let a=e.element.offsetTop-t.element.offsetTop;return 0!==a?a:e.element.offsetHeight-t.element.offsetHeight}function d(e){return null!==e&&"object"==typeof e&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE}function c(e,t){return{x:e.x>=t.left&&e.x<=t.right?0:Math.min(Math.abs(e.x-t.left),Math.abs(e.x-t.right)),y:e.y>=t.top&&e.y<=t.bottom?0:Math.min(Math.abs(e.y-t.top),Math.abs(e.y-t.bottom))}}function u(e){let{element:t,orientation:a,panels:n,separators:o}=e,s=l(a,Array.from(t.children).filter(d).map(e=>({element:e}))).map(({element:e})=>e),u=[],p=!1,f,m=[];for(let t of s)if(t.hasAttribute("data-panel")){let l=n.find(e=>e.element===t);if(l){if(f){let n,o=f.element.getBoundingClientRect(),s=t.getBoundingClientRect();if(p){let e="horizontal"===a?new DOMRect(o.right,o.top,0,o.height):new DOMRect(o.left,o.bottom,o.width,0),t="horizontal"===a?new DOMRect(s.left,s.top,0,s.height):new DOMRect(s.left,s.top,s.width,0);switch(m.length){case 0:n=[e,t];break;case 1:{let i=m[0],l=function({orientation:e,rects:t,targetRect:a}){let n={x:a.x+a.width/2,y:a.y+a.height/2},i,l=Number.MAX_VALUE;for(let a of t){let{x:t,y:r}=c(n,a),o="horizontal"===e?t:r;o<l&&(l=o,i=a)}return r(i,"No rect found"),i}({orientation:a,rects:[o,s],targetRect:i.element.getBoundingClientRect()});n=[i,l===o?t:e];break}default:n=m}}else n=m.length?m:["horizontal"===a?new DOMRect(o.right,s.top,s.left-o.right,s.height):new DOMRect(s.left,o.bottom,s.width,s.top-o.bottom)];for(let t of n)u.push({group:e,groupSize:i({group:e}),panels:[f,l],separator:"width"in t?void 0:t,rect:"width"in t?t:t.element.getBoundingClientRect()})}p=!1,f=l,m=[]}}else if(t.hasAttribute("data-separator")){let e=o.find(e=>e.element===t);e?m.push(e):(f=void 0,m=[])}else p=!0;return u}function p({groupSize:e,panelElement:t,styleProp:a}){let n,[r,i]=function(e){switch(typeof e){case"number":return[e,"px"];case"string":{let t=parseFloat(e);return e.endsWith("%")?[t,"%"]:e.endsWith("px")?[t,"px"]:e.endsWith("rem")?[t,"rem"]:e.endsWith("em")?[t,"em"]:e.endsWith("vh")?[t,"vh"]:e.endsWith("vw")?[t,"vw"]:[t,"%"]}}}(a);switch(i){case"%":n=r/100*e;break;case"px":n=r;break;case"rem":n=r*parseFloat(getComputedStyle(t.ownerDocument.body).fontSize);break;case"em":n=r*parseFloat(getComputedStyle(t).fontSize);break;case"vh":n=r/100*window.innerHeight;break;case"vw":n=r/100*window.innerWidth}return n}function f(e){return parseFloat(e.toFixed(3))}function m(e){let{panels:t}=e,a=i({group:e});return 0===a?t.map(e=>({collapsedSize:0,collapsible:!0===e.panelConstraints.collapsible,defaultSize:void 0,minSize:0,maxSize:100,panelId:e.id})):t.map(e=>{let t,{element:n,panelConstraints:r}=e,i=0;void 0!==r.collapsedSize&&(i=f(p({groupSize:a,panelElement:n,styleProp:r.collapsedSize})/a*100)),void 0!==r.defaultSize&&(t=f(p({groupSize:a,panelElement:n,styleProp:r.defaultSize})/a*100));let l=0;void 0!==r.minSize&&(l=f(p({groupSize:a,panelElement:n,styleProp:r.minSize})/a*100));let o=100;return void 0!==r.maxSize&&(o=f(p({groupSize:a,panelElement:n,styleProp:r.maxSize})/a*100)),{collapsedSize:i,collapsible:!0===r.collapsible,defaultSize:t,minSize:l,maxSize:o,panelId:e.id}})}function h(e,t,a=0){return Math.abs(f(e)-f(t))<=a}let g={cursorFlags:0,interactionState:{state:"inactive"},mountedGroups:new Map},v=new class{#e={};addListener(e,t){let a=this.#e[e];return void 0===a?this.#e[e]=[t]:a.includes(t)||a.push(t),()=>{this.removeListener(e,t)}}emit(e,t){let a=this.#e[e];if(void 0!==a)if(1===a.length)a[0].call(null,t);else{let e=!1,n=null,r=Array.from(a);for(let a=0;a<r.length;a++){let i=r[a];try{i.call(null,t)}catch(t){null===n&&(e=!0,n=t)}}if(e)throw n}}removeAllListeners(){this.#e={}}removeListener(e,t){let a=this.#e[e];if(void 0!==a){let e=a.indexOf(t);e>=0&&a.splice(e,1)}}};function y(e){let t="function"==typeof e?e(g):e;if(g===t)return g;let a=g;return g={...g,...t},void 0!==t.cursorFlags&&v.emit("cursorFlagsChange",g.cursorFlags),void 0!==t.interactionState&&v.emit("interactionStateChange",g.interactionState),void 0!==t.mountedGroups&&(g.mountedGroups.forEach((e,t)=>{e.derivedPanelConstraints.forEach(n=>{if(n.collapsible){let{layout:r}=a.mountedGroups.get(t)??{};if(r){let a=h(n.collapsedSize,e.layout[n.panelId]),i=h(n.collapsedSize,r[n.panelId]);a&&!i&&(t.inMemoryLastExpandedPanelSizes[n.panelId]=r[n.panelId])}}})}),v.emit("mountedGroupsChange",g.mountedGroups)),g}function x(e,t){return h(e,t)?0:e>t?1:-1}function b({panelConstraints:e,size:t}){let{collapsedSize:a=0,collapsible:n,maxSize:r=100,minSize:i=0}=e;return 0>x(t,i)&&(t=n&&0>x(t,(a+i)/2)?a:i),f(t=Math.min(r,t))}function S({delta:e,initialLayout:t,panelConstraints:a,pivotIndices:n,prevLayout:i,trigger:l}){if(h(e,0))return t;let o=Object.values(t),s=Object.values(i),d=[...o],[c,u]=n;r(null!=c,"Invalid first pivot index"),r(null!=u,"Invalid second pivot index");let p=0;if("keyboard"===l){{let t=e<0?u:c,n=a[t];r(n,`Panel constraints not found for index ${t}`);let{collapsedSize:i=0,collapsible:l,minSize:s=0}=n;if(l){let a=o[t];if(r(null!=a,`Previous layout not found for panel index ${t}`),h(a,i)){let t=s-a;x(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}{let t=e<0?c:u,n=a[t];r(n,`No panel constraints found for index ${t}`);let{collapsedSize:i=0,collapsible:l,minSize:s=0}=n;if(l){let a=o[t];if(r(null!=a,`Previous layout not found for panel index ${t}`),h(a,s)){let t=a-i;x(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}}{let t=e<0?1:-1,n=e<0?u:c,i=0;for(;;){let e=o[n];if(r(null!=e,`Previous layout not found for panel index ${n}`),i+=b({panelConstraints:a[n],size:100})-e,(n+=t)<0||n>=a.length)break}let l=Math.min(Math.abs(e),Math.abs(i));e=e<0?0-l:l}{let t=e<0?c:u;for(;t>=0&&t<a.length;){let n=Math.abs(e)-Math.abs(p),i=o[t];r(null!=i,`Previous layout not found for panel index ${t}`);let l=i-n,s=b({panelConstraints:a[t],size:l});if(!h(i,s)&&(p+=i-s,d[t]=s,p.toFixed(3).localeCompare(Math.abs(e).toFixed(3),void 0,{numeric:!0})>=0))break;e<0?t--:t++}}if(function(e,t){if(e.length!==t.length)return!1;for(let a=0;a<e.length;a++)if(e[a]!=t[a])return!1;return!0}(s,d))return i;{let t=e<0?u:c,n=o[t];r(null!=n,`Previous layout not found for panel index ${t}`);let i=n+p,l=b({panelConstraints:a[t],size:i});if(d[t]=l,!h(l,i)){let t=i-l,n=e<0?u:c;for(;n>=0&&n<a.length;){let i=d[n];r(null!=i,`Previous layout not found for panel index ${n}`);let l=i+t,o=b({panelConstraints:a[n],size:l});if(h(i,o)||(t-=o-i,d[n]=o),h(t,0))break;e>0?n--:n++}}}if(!h(Object.values(d).reduce((e,t)=>t+e,0),100,.1))return i;let f=Object.keys(i);return d.reduce((e,t,a)=>(e[f[a]]=t,e),{})}function w(e){let{mountedGroups:t}=g;for(let[a]of t)if(a.separators.some(t=>t.element===e))return a;throw Error("Could not find parent Group for separator element")}function j(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let a in e)if(void 0===t[a]||0!==x(e[a],t[a]))return!1;return!0}function C({layout:e,panelConstraints:t}){let a=[...Object.values(e)],n=a.reduce((e,t)=>e+t,0);if(a.length!==t.length)throw Error(`Invalid ${t.length} panel layout: ${a.map(e=>`${e}%`).join(", ")}`);if(!h(n,100)&&a.length>0)for(let e=0;e<t.length;e++){let t=a[e];r(null!=t,`No layout data found for index ${e}`);let i=100/n*t;a[e]=i}let i=0;for(let e=0;e<t.length;e++){let n=a[e];r(null!=n,`No layout data found for index ${e}`);let l=b({panelConstraints:t[e],size:n});n!=l&&(i+=n-l,a[e]=l)}if(!h(i,0))for(let e=0;e<t.length;e++){let n=a[e];r(null!=n,`No layout data found for index ${e}`);let l=n+i,o=b({panelConstraints:t[e],size:l});if(n!==o&&(i-=o-n,a[e]=o,h(i,0)))break}let l=Object.keys(e);return a.reduce((e,t,a)=>(e[l[a]]=t,e),{})}function z({groupId:e}){let t=()=>{let{mountedGroups:t}=g;for(let[a,n]of t)if(a.id===e)return{group:a,...n};throw Error(`Could not find Group with id "${e}"`)};return{getLayout(){let{defaultLayoutDeferred:e,layout:a}=t();return e?{}:a},setLayout(e){let{defaultLayoutDeferred:a,derivedPanelConstraints:n,group:r,layout:i,separatorToPanels:l}=t(),o=C({layout:e,panelConstraints:n});return a?i:(j(i,o)||y(e=>({mountedGroups:new Map(e.mountedGroups).set(r,{defaultLayoutDeferred:a,derivedPanelConstraints:n,layout:o,separatorToPanels:l})})),o)}}}function k(e){let{mountedGroups:t}=g,a=t.get(e);return r(a,`Mounted Group ${e.id} not found`),a}function N(e,t){let a=w(e),n=k(a),i=a.separators.find(t=>t.element===e);r(i,"Matching separator not found");let l=n.separatorToPanels.get(i);r(l,"Matching panels not found");let o=l.map(e=>a.panels.indexOf(e)),s=z({groupId:a.id}).getLayout(),d=C({layout:S({delta:t,initialLayout:s,panelConstraints:n.derivedPanelConstraints,pivotIndices:o,prevLayout:s,trigger:"keyboard"}),panelConstraints:n.derivedPanelConstraints});j(s,d)||y(e=>({mountedGroups:new Map(e.mountedGroups).set(a,{defaultLayoutDeferred:n.defaultLayoutDeferred,derivedPanelConstraints:n.derivedPanelConstraints,layout:d,separatorToPanels:n.separatorToPanels})}))}function P(e){if(e.defaultPrevented)return;let t=e.currentTarget,a=w(t);if(!a.disabled)switch(e.key){case"ArrowDown":e.preventDefault(),"vertical"===a.orientation&&N(t,5);break;case"ArrowLeft":e.preventDefault(),"horizontal"===a.orientation&&N(t,-5);break;case"ArrowRight":e.preventDefault(),"horizontal"===a.orientation&&N(t,5);break;case"ArrowUp":e.preventDefault(),"vertical"===a.orientation&&N(t,-5);break;case"End":e.preventDefault(),N(t,100);break;case"Enter":{e.preventDefault();let a=w(t),{derivedPanelConstraints:n,layout:i,separatorToPanels:l}=k(a),o=a.separators.find(e=>e.element===t);r(o,"Matching separator not found");let s=l.get(o);r(s,"Matching panels not found");let d=s[0],c=n.find(e=>e.panelId===d.id);if(r(c,"Panel metadata not found"),c.collapsible){let e=i[d.id];N(t,(c.collapsedSize===e?a.inMemoryLastExpandedPanelSizes[d.id]??c.minSize:c.collapsedSize)-e)}break}case"F6":{e.preventDefault();let a=w(t).separators.map(e=>e.element),n=Array.from(a).findIndex(t=>t===e.currentTarget);r(null!==n,"Index not found");let i=e.shiftKey?n>0?n-1:a.length-1:n+1<a.length?n+1:0;a[i].focus();break}case"Home":e.preventDefault(),N(t,-100)}}let L=e=>e,_=()=>{},M=/\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;function I(e){let t=e.length;for(;t--;){let a=e[t];if(r(a,"Missing node"),function(e){let t,a=getComputedStyle(e);return!!("fixed"===a.position||"auto"!==a.zIndex&&("static"!==a.position||"flex"===(t=getComputedStyle(T(e)??e).display)||"inline-flex"===t)||1>+a.opacity||"transform"in a&&"none"!==a.transform||"webkitTransform"in a&&"none"!==a.webkitTransform||"mixBlendMode"in a&&"normal"!==a.mixBlendMode||"filter"in a&&"none"!==a.filter||"webkitFilter"in a&&"none"!==a.webkitFilter||"isolation"in a&&"isolate"===a.isolation||M.test(a.willChange)||"touch"===a.webkitOverflowScrolling)}(a))return a}return null}function R(e){return e&&Number(getComputedStyle(e).zIndex)||0}function E(e){let t=[];for(;e;)t.push(e),e=T(e);return t}function T(e){let{parentNode:t}=e;return null!==t&&"object"==typeof t&&"nodeType"in t&&t.nodeType===Node.DOCUMENT_FRAGMENT_NODE?t.host:t}function $(e,a){let n=[];return a.forEach((a,i)=>{if(i.disabled)return;let l=(void 0===t&&(t="function"==typeof matchMedia&&!!matchMedia("(pointer:coarse)").matches),t)?10:5,o=u(i),s=function(e,t,a){let n,r={x:1/0,y:1/0};for(let i of t){let t=c(a,i.rect);switch(e){case"horizontal":t.x<=r.x&&(n=i,r=t);break;case"vertical":t.y<=r.y&&(n=i,r=t)}}return n?{distance:r,hitRegion:n}:void 0}(i.orientation,o,{x:e.clientX,y:e.clientY});s&&s.distance.x<=l&&s.distance.y<=l&&function({groupElement:e,hitRegion:t,pointerEventTarget:a}){if(!d(a)||a.contains(e)||e.contains(a))return!0;if(function(e,t){let a;if(e===t)throw Error("Cannot compare node with itself");let n={a:E(e),b:E(t)};for(;n.a.at(-1)===n.b.at(-1);)e=n.a.pop(),t=n.b.pop(),a=e;r(a,"Stacking order can only be calculated for elements with a common ancestor");let i={a:R(I(n.a)),b:R(I(n.b))};if(i.a===i.b){let e=a.childNodes,t={a:n.a.at(-1),b:n.b.at(-1)},r=e.length;for(;r--;){let a=e[r];if(a===t.a)return 1;if(a===t.b)return -1}}return Math.sign(i.a-i.b)}(a,e)>0){let r=a;for(;r;){var n;if(r.contains(e))break;if(n=r.getBoundingClientRect(),n.x<t.x+t.width&&n.x+n.width>t.x&&n.y<t.y+t.height&&n.y+n.height>t.y)return!1;r=r.parentElement}}return!0}({groupElement:i.element,hitRegion:s.hitRegion.rect,pointerEventTarget:e.target})&&n.push(s.hitRegion)}),n}function D(e){if(e.defaultPrevented||"mouse"===e.pointerType&&e.button>0)return;let{mountedGroups:t}=g,a=$(e,t),n=new Set,r=new Set,i=new Set,l=new Map,o=!1;a.forEach(e=>{n.add(e.group),e.panels.forEach(e=>{r.add(e)}),e.separator&&(i.add(e.separator),o||(o=!0,e.separator.element.focus()));let a=t.get(e.group);a&&l.set(e.group,a.layout)}),y({interactionState:{hitRegions:a,initialLayoutMap:l,pointerDownAtPoint:{x:e.clientX,y:e.clientY},state:"active"}}),a.length&&e.preventDefault()}let A=new WeakMap;function O(e){if(null===e.defaultView||void 0===e.defaultView)return;let{prevStyle:t,styleSheet:a}=A.get(e)??{};void 0===a&&(a=new e.defaultView.CSSStyleSheet,e.adoptedStyleSheets=[a]);let{cursorFlags:n,interactionState:r}=g;switch(r.state){case"active":case"hover":{let e=function({cursorFlags:e,groups:t,state:a}){let n=0,r=0;switch(a){case"active":case"hover":t.forEach(e=>{if(!e.disableCursor)switch(e.orientation){case"horizontal":n++;break;case"vertical":r++}})}if(0===n&&0===r)return null;if("active"===a){let t=(4&e)!=0,a=(8&e)!=0;if(e){if((1&e)!=0)return t?"se-resize":a?"ne-resize":"e-resize";if((2&e)!=0)return t?"sw-resize":a?"nw-resize":"w-resize";if(t)return"s-resize";if(a)return"n-resize"}}return n>0&&r>0?"move":n>0?"ew-resize":"ns-resize"}({cursorFlags:n,groups:r.hitRegions.map(e=>e.group),state:r.state}),i=`*{cursor: ${e} !important; ${"active"===r.state?"touch-action: none;":""} }`;if(t===i)return;t=i,e?0===a.cssRules.length?a.insertRule(i):a.replaceSync(i):1===a.cssRules.length&&a.deleteRule(0);break}case"inactive":t=void 0,1===a.cssRules.length&&a.deleteRule(0)}A.set(e,{prevStyle:t,styleSheet:a})}function F({document:e,event:t,hitRegions:a,initialLayoutMap:n,mountedGroups:r,pointerDownAtPoint:i}){let l=0,o=new Map(r);a.forEach(e=>{let{group:a,groupSize:s}=e,{disableCursor:d,orientation:c,panels:u}=a,p=0;p=i?"horizontal"===c?(t.clientX-i.x)/s*100:(t.clientY-i.y)/s*100:"horizontal"===c?t.clientX<0?-100:100:t.clientY<0?-100:100;let f=n.get(a),{defaultLayoutDeferred:m,derivedPanelConstraints:h,layout:g,separatorToPanels:v}=r.get(a)??{defaultLayoutDeferred:!1};if(h&&f&&g&&v){let t=S({delta:p,initialLayout:f,panelConstraints:h,pivotIndices:e.panels.map(e=>u.indexOf(e)),prevLayout:g,trigger:"mouse-or-touch"});if(j(t,g)){if(0!==p&&!d)switch(c){case"horizontal":l|=p<0?1:2;break;case"vertical":l|=p<0?4:8}}else{o.set(e.group,{defaultLayoutDeferred:m,derivedPanelConstraints:h,layout:t,separatorToPanels:v});let a=e.group.panels.map(({id:e})=>e).join(",");e.group.inMemoryLayouts[a]=t}}}),y({cursorFlags:l,mountedGroups:o}),O(e)}function G(e){let{interactionState:t,mountedGroups:a}=g;"active"===t.state&&F({document:e.currentTarget,event:e,hitRegions:t.hitRegions,initialLayoutMap:t.initialLayoutMap,mountedGroups:a})}function W(e){if(e.defaultPrevented)return;let{interactionState:t,mountedGroups:a}=g;if("active"===t.state){if(0===e.buttons){y(e=>"inactive"===e.interactionState.state?e:{cursorFlags:0,interactionState:{state:"inactive"}}),y(e=>({mountedGroups:new Map(e.mountedGroups)}));return}F({document:e.currentTarget,event:e,hitRegions:t.hitRegions,initialLayoutMap:t.initialLayoutMap,mountedGroups:a,pointerDownAtPoint:t.pointerDownAtPoint})}else{let n=$(e,a);0===n.length?"inactive"!==t.state&&y({interactionState:{state:"inactive"}}):y({interactionState:{hitRegions:n,state:"hover"}}),O(e.currentTarget)}}function B(e){if(e.defaultPrevented||"mouse"===e.pointerType&&e.button>0)return;let{interactionState:t}=g;"active"===t.state&&(y({cursorFlags:0,interactionState:{state:"inactive"}}),t.hitRegions.length>0&&(O(e.currentTarget),y(e=>({mountedGroups:new Map(e.mountedGroups)})),e.preventDefault()))}function V(e){let t=0,a=0,n={};for(let r of e)if(void 0!==r.defaultSize){t++;let e=f(r.defaultSize);a+=e,n[r.panelId]=e}else n[r.panelId]=void 0;let r=e.length-t;if(0!==r){let t=f((100-a)/r);for(let a of e)void 0===a.defaultSize&&(n[a.panelId]=t)}return n}let q=new Map;function U(){let[e,t]=(0,n.useState)({});return[e,(0,n.useCallback)(()=>t({}),[])]}function J(e){let t=(0,n.useId)();return`${e??t}`}let H=n.useLayoutEffect;function X(e){let t=(0,n.useRef)(e);return H(()=>{t.current=e},[e]),(0,n.useCallback)((...e)=>t.current?.(...e),[t])}function K(...e){return X(t=>{e.forEach(e=>{if(e)switch(typeof e){case"function":e(t);break;case"object":e.current=t}})})}let Y=(0,n.createContext)(null);function Z({children:e,className:t,defaultLayout:o,disableCursor:s,disabled:d,elementRef:c,groupRef:p,id:h,onLayoutChange:x,onLayoutChanged:b,orientation:S="horizontal",style:w,...k}){var N;let _,M,I=(0,n.useRef)({onLayoutChange:{},onLayoutChanged:{}}),R=X(e=>{j(I.current.onLayoutChange,e)||(I.current.onLayoutChange=e,x?.(e))}),E=X(e=>{j(I.current.onLayoutChanged,e)||(I.current.onLayoutChanged=e,b?.(e))}),T=J(h),$=(0,n.useRef)(null),[A,O]=U(),F=(0,n.useRef)({lastExpandedPanelSizes:{},layouts:{},panels:[],separators:[]}),Z=K($,c);_=(0,n.useRef)({getLayout:()=>({}),setLayout:L}),(0,n.useImperativeHandle)(p,()=>_.current,[]),H(()=>{Object.assign(_.current,z({groupId:T}))});let Q=X((e,t)=>{let{interactionState:a,mountedGroups:n}=g;for(let r of n.keys())if(r.id===e){let e=n.get(r);if(e){let n=!1;return"active"===a.state&&(n=a.hitRegions.some(e=>e.group===r)),{flexGrow:e.layout[t]??1,pointerEvents:n?"none":void 0}}}return{flexGrow:o?.[t]??1}}),ee=(0,n.useMemo)(()=>({getPanelStyles:Q,id:T,orientation:S,registerPanel:e=>{let t=F.current;return t.panels=l(S,[...t.panels,e]),O(),()=>{t.panels=t.panels.filter(t=>t!==e),O()}},registerSeparator:e=>{let t=F.current;return t.separators=l(S,[...t.separators,e]),O(),()=>{t.separators=t.separators.filter(t=>t!==e),O()}}}),[Q,T,O,S]),et=(N={defaultLayout:o,disableCursor:s},M=(0,n.useRef)({...N}),H(()=>{for(let e in N)M.current[e]=N[e]},[N]),M.current),ea=(0,n.useRef)(null);return H(()=>{let e,t,a,n,l,o,s,c,p,h,x,b,w=$.current;if(null===w)return;let z=F.current,k={defaultLayout:et.defaultLayout,disableCursor:!!et.disableCursor,disabled:!!d,element:w,id:T,inMemoryLastExpandedPanelSizes:F.current.lastExpandedPanelSizes,inMemoryLayouts:F.current.layouts,orientation:S,panels:z.panels,separators:z.separators};ea.current=k;let N=(e=!0,r(k.element.ownerDocument.defaultView,"Cannot register an unmounted Group"),t=k.element.ownerDocument.defaultView.ResizeObserver,a=new Set,n=new Set,(l=new t(t=>{for(let a of t){let{borderBoxSize:t,target:n}=a;if(n===k.element){if(e){if(0===i({group:k}))return;y(e=>{let t=e.mountedGroups.get(k);if(t){let a=m(k),n=t.defaultLayoutDeferred?V(a):t.layout,r=C({layout:n,panelConstraints:a});return!t.defaultLayoutDeferred&&j(n,r)&&function(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let a in e)if(e[a]!==t[a])return!1;return!0}(t.derivedPanelConstraints,a)?e:{mountedGroups:new Map(e.mountedGroups).set(k,{defaultLayoutDeferred:!1,derivedPanelConstraints:a,layout:r,separatorToPanels:t.separatorToPanels})}}return e})}}else!function(e,t,a){if(!a[0])return;let n=e.panels.find(e=>e.element===t);if(!n||!n.onResize)return;let r=i({group:e}),l="horizontal"===e.orientation?n.element.offsetWidth:n.element.offsetHeight,o=n.mutableValues.prevSize,s={asPercentage:f(l/r*100),inPixels:l};n.mutableValues.prevSize=s,n.onResize(s,n.id,o)}(k,n,t)}})).observe(k.element),k.panels.forEach(e=>{r(!a.has(e.id),`Panel ids must be unique; id "${e.id}" was used more than once`),a.add(e.id),e.onResize&&l.observe(e.element)}),o=i({group:k}),s=m(k),c=k.panels.map(({id:e})=>e).join(","),(p=k.defaultLayout)&&(function(e,t){let a=e.map(e=>e.id),n=Object.keys(t);if(a.length!==n.length)return!1;for(let e of a)if(!n.includes(e))return!1;return!0}(k.panels,p)||(p=void 0)),h=C({layout:k.inMemoryLayouts[c]??p??V(s),panelConstraints:s}),x=u(k),b=k.element.ownerDocument,y(e=>{let t=new Map;return q.set(b,(q.get(b)??0)+1),x.forEach(e=>{e.separator&&t.set(e.separator,e.panels)}),{mountedGroups:new Map(e.mountedGroups).set(k,{defaultLayoutDeferred:0===o,derivedPanelConstraints:s,layout:h,separatorToPanels:t})}}),k.separators.forEach(e=>{r(!n.has(e.id),`Separator ids must be unique; id "${e.id}" was used more than once`),n.add(e.id),e.element.addEventListener("keydown",P)}),1===q.get(b)&&(b.addEventListener("pointerdown",D,!0),b.addEventListener("pointerleave",G),b.addEventListener("pointermove",W),b.addEventListener("pointerup",B,!0)),function(){e=!1,q.set(b,Math.max(0,(q.get(b)??0)-1)),y(e=>{let t=new Map(e.mountedGroups);return t.delete(k),{mountedGroups:t}}),k.separators.forEach(e=>{e.element.removeEventListener("keydown",P)}),q.get(b)||(b.removeEventListener("pointerdown",D,!0),b.removeEventListener("pointerleave",G),b.removeEventListener("pointermove",W),b.removeEventListener("pointerup",B,!0)),l.disconnect()}),L=g.mountedGroups.get(k);if(L){let{defaultLayoutDeferred:e,derivedPanelConstraints:t,layout:a}=L;!e&&t.length>0&&(R(a),E(a),z.panels.forEach(e=>{e.scheduleUpdate()}))}let _=v.addListener("interactionStateChange",()=>{z.panels.forEach(e=>{e.scheduleUpdate()})}),M=v.addListener("mountedGroupsChange",e=>{let t=e.get(k);if(t){let{defaultLayoutDeferred:e,derivedPanelConstraints:a,layout:n}=t;if(e||0===a.length)return;let{interactionState:r}=g,i="active"!==r.state;R(n),i&&E(n),z.panels.forEach(e=>{e.scheduleUpdate()})}});return()=>{ea.current=null,N(),_(),M()}},[d,T,E,R,S,A,et]),(0,n.useEffect)(()=>{let e=ea.current;e&&(e.defaultLayout=o,e.disableCursor=!!s)}),(0,a.jsx)(Y.Provider,{value:ee,children:(0,a.jsx)("div",{...k,"aria-orientation":S,className:t,"data-group":!0,"data-testid":T,id:T,ref:Z,style:{height:"100%",width:"100%",overflow:"hidden",...w,display:"flex",flexDirection:"horizontal"===S?"row":"column",flexWrap:"nowrap"},children:e})})}function Q(){let e=(0,n.useContext)(Y);return r(e,"Group Context not found; did you render a Panel or Separator outside of a Group?"),e}function ee({children:e,className:t,collapsedSize:r="0%",collapsible:l=!1,defaultSize:o,elementRef:s,id:d,maxSize:c="100%",minSize:u="0%",onResize:p,panelRef:m,style:v,...x}){let b=!!d,w=J(d),z=(0,n.useRef)(null),k=K(z,s),[,N]=U(),{getPanelStyles:P,id:L,registerPanel:M}=Q(),I=null!==p,R=X((e,t,a)=>{p?.(e,d,a)});H(()=>{let e=z.current;if(null!==e)return M({element:e,id:w,idIsStable:b,mutableValues:{expandToSize:void 0,prevSize:void 0},onResize:I?R:void 0,panelConstraints:{collapsedSize:r,collapsible:l,defaultSize:o,maxSize:c,minSize:u},scheduleUpdate:N})},[r,l,o,N,I,w,b,c,u,R,M]),function(e,t){let{id:a}=Q(),r=(0,n.useRef)({collapse:_,expand:_,getSize:()=>({asPercentage:0,inPixels:0}),isCollapsed:()=>!1,resize:_});(0,n.useImperativeHandle)(t,()=>r.current,[]),H(()=>{Object.assign(r.current,function({groupId:e,panelId:t}){let a=()=>{let{mountedGroups:t}=g;for(let[a,{defaultLayoutDeferred:n,derivedPanelConstraints:r,layout:i,separatorToPanels:l}]of t)if(a.id===e)return{defaultLayoutDeferred:n,derivedPanelConstraints:r,group:a,layout:i,separatorToPanels:l};throw Error(`Group ${e} not found`)},n=()=>{let e=a().derivedPanelConstraints.find(e=>e.panelId===t);if(void 0!==e)return e;throw Error(`Panel constraints not found for Panel ${t}`)},r=()=>{let e=a().group.panels.find(e=>e.id===t);if(void 0!==e)return e;throw Error(`Layout not found for Panel ${t}`)},l=()=>{let e=a().layout[t];if(void 0!==e)return e;throw Error(`Layout not found for Panel ${t}`)},o=e=>{let n=l();if(e===n)return;let{defaultLayoutDeferred:r,derivedPanelConstraints:i,group:o,layout:s,separatorToPanels:d}=a(),c=o.panels.findIndex(e=>e.id===t),u=c===o.panels.length-1,p=C({layout:S({delta:u?n-e:e-n,initialLayout:s,panelConstraints:i,pivotIndices:u?[c-1,c]:[c,c+1],prevLayout:s,trigger:"imperative-api"}),panelConstraints:i});j(s,p)||y(e=>({mountedGroups:new Map(e.mountedGroups).set(o,{defaultLayoutDeferred:r,derivedPanelConstraints:i,layout:p,separatorToPanels:d})}))};return{collapse:()=>{let{collapsible:e,collapsedSize:t}=n(),{mutableValues:a}=r(),i=l();e&&i!==t&&(a.expandToSize=i,o(t))},expand:()=>{let{collapsible:e,collapsedSize:t,minSize:a}=n(),{mutableValues:i}=r(),s=l();if(e&&s===t){let e=i.expandToSize??a;0===e&&(e=1),o(e)}},getSize:()=>{let{group:e}=a(),t=l(),{element:n}=r();return{asPercentage:t,inPixels:"horizontal"===e.orientation?n.offsetWidth:n.offsetHeight}},isCollapsed:()=>{let{collapsible:e,collapsedSize:t}=n(),a=l();return e&&h(t,a)},resize:e=>{if(l()!==e){let t;switch(typeof e){case"number":{let{group:n}=a();t=f(e/i({group:n})*100);break}case"string":t=parseFloat(e)}o(t)}}}}({groupId:a,panelId:e}))})}(w,m);let E=P(L,w);return(0,a.jsx)("div",{...x,"data-panel":!0,"data-testid":w,id:w,ref:k,style:{...et,flexBasis:0,flexShrink:1,overflow:"hidden",...E},children:(0,a.jsx)("div",{className:t,style:{width:"100%",height:"100%",...v},children:e})})}Z.displayName="Group",ee.displayName="Panel";let et={minHeight:0,maxHeight:"100%",height:"auto",minWidth:0,maxWidth:"100%",width:"auto",border:"none",borderWidth:0,padding:0,margin:0};function ea({children:e,className:t,elementRef:r,id:i,style:l,...o}){let s=J(i),[d,c]=(0,n.useState)({}),[u,p]=(0,n.useState)("inactive"),f=(0,n.useRef)(null),m=K(f,r),{id:h,orientation:g,registerSeparator:y}=Q();return H(()=>{let e=f.current;if(null!==e){let t={element:e,id:s},a=y(t),n=v.addListener("interactionStateChange",e=>{p("inactive"!==e.state&&e.hitRegions.some(e=>e.separator===t)?e.state:"inactive")}),r=v.addListener("mountedGroupsChange",e=>{e.forEach(({derivedPanelConstraints:e,layout:a,separatorToPanels:n},r)=>{if(r.id===h){let i=n.get(t);if(i){let t=i[0],n=r.panels.indexOf(t);c(function({layout:e,panelConstraints:t,panelId:a,panelIndex:n}){let r,i,l=e[a],o=t.find(e=>e.panelId===a);if(o){let s=o.maxSize,d=i=o.collapsible?o.collapsedSize:o.minSize,c=[n,n+1];i=C({layout:S({delta:d-l,initialLayout:e,panelConstraints:t,pivotIndices:c,prevLayout:e,trigger:"keyboard"}),panelConstraints:t})[a],r=C({layout:S({delta:s-l,initialLayout:e,panelConstraints:t,pivotIndices:c,prevLayout:e,trigger:"keyboard"}),panelConstraints:t})[a]}return{valueControls:a,valueMax:r,valueMin:i,valueNow:l}}({layout:a,panelConstraints:e,panelId:t.id,panelIndex:n}))}}})});return()=>{n(),r(),a()}}},[h,s,y]),(0,a.jsx)("div",{...o,"aria-controls":d.valueControls,"aria-orientation":"horizontal"===g?"vertical":"horizontal","aria-valuemax":d.valueMax,"aria-valuemin":d.valueMin,"aria-valuenow":d.valueNow,children:e,className:t,"data-separator":u,"data-testid":s,id:s,ref:m,role:"separator",style:{flexBasis:"auto",...l,flexGrow:0,flexShrink:0},tabIndex:0})}ea.displayName="Separator",e.s(["Group",()=>Z,"Panel",()=>ee,"Separator",()=>ea])},81704,e=>{"use strict";var t=e.i(43476),a=e.i(71645),n=e.i(71921);function r({contracts:e,selectedContractId:a,onContractChange:n,strictMode:r,onStrictModeChange:i,batchMode:l,onBatchModeChange:o}){return(0,t.jsxs)("div",{className:"border-b border-border px-4 py-1.5",style:{flexShrink:0},children:[(0,t.jsxs)("div",{className:"flex items-end gap-4",children:[(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsx)("label",{htmlFor:"contract-select",className:"block text-sm font-medium mb-0.5",children:"Select Contract"}),(0,t.jsxs)("select",{id:"contract-select",value:a,onChange:e=>n(e.target.value),className:"w-full px-3 py-2 border border-input rounded-md bg-background text-foreground focus:outline-none focus:ring-2 focus:ring-ring",children:[(0,t.jsx)("option",{value:"",children:"Choose a contract..."}),e.map(e=>(0,t.jsxs)("option",{value:e.id,children:[e.name," (v",e.version,")"]},e.id))]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-4 pb-0.5",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("input",{type:"checkbox",id:"batch-mode",checked:l,onChange:e=>o(e.target.checked),className:"h-4 w-4 rounded border-input text-primary focus:ring-2 focus:ring-ring"}),(0,t.jsx)("label",{htmlFor:"batch-mode",className:"text-sm font-medium cursor-pointer",children:"Batch Mode"})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("input",{type:"checkbox",id:"strict-mode",checked:r,onChange:e=>i(e.target.checked),className:"h-4 w-4 rounded border-input text-primary focus:ring-2 focus:ring-ring"}),(0,t.jsx)("label",{htmlFor:"strict-mode",className:"text-sm font-medium cursor-pointer",children:"Strict Mode"})]})]})]}),(l||r)&&(0,t.jsxs)("div",{className:"flex gap-4 mt-1",children:[l&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground",children:"Batch mode: Enter an array of objects to validate multiple records at once"}),r&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground",children:"Strict mode: Raises exceptions on validation errors instead of returning error details"})]})]})}var i=e.i(78583),l=e.i(39616),o=e.i(98919),s=e.i(52571),d=e.i(56909),c=e.i(9165);let u=[{id:"schema",label:"Schema",icon:(0,t.jsx)(i.FileText,{className:"h-4 w-4"})},{id:"coercion",label:"Coercion",icon:(0,t.jsx)(l.Settings,{className:"h-4 w-4"})},{id:"validation",label:"Validation",icon:(0,t.jsx)(o.Shield,{className:"h-4 w-4"})},{id:"metadata",label:"Metadata",icon:(0,t.jsx)(s.Info,{className:"h-4 w-4"})}],p=(0,a.memo)(function({contract:e,onChange:n,contractId:r,schemaId:l,onSave:o}){let[s,p]=(0,a.useState)("schema"),[f,m]=(0,a.useState)({schema:"",coercion:"",validation:"",metadata:""}),[h,g]=(0,a.useState)(!1),[v,y]=(0,a.useState)(null),[x,b]=(0,a.useState)(!1);(0,a.useEffect)(()=>{e&&m({schema:JSON.stringify(e.schema||{},null,2),coercion:JSON.stringify(e.coercion_rules||{},null,2),validation:JSON.stringify(e.validation_rules||{},null,2),metadata:JSON.stringify(e.metadata||{},null,2)})},[e]);let S=async()=>{if(!e||!l)return void y("Contract or schema ID is missing");g(!0),y(null),b(!1);try{let t={schema:JSON.parse(f.schema),coercion:JSON.parse(f.coercion),validation:JSON.parse(f.validation),metadata:JSON.parse(f.metadata)},a=t.metadata?.version||e.metadata?.version||"1.0.0";await Promise.all([c.api.metadata.storeCoercionRules({schema_id:l,coercion_rules:t.coercion,version:a}),c.api.metadata.storeValidationRules({schema_id:l,validation_rules:t.validation,version:a}),c.api.metadata.storeMetadata({schema_id:l,metadata:t.metadata,version:a})]),b(!0),setTimeout(()=>b(!1),3e3),o&&o()}catch(e){e instanceof c.ApiError?y(e.message||"Failed to save contract"):e instanceof Error?y(e.message):y("Failed to save contract")}finally{g(!1)}},w=f[s];return(0,t.jsxs)("div",{style:{width:"100%",height:"100%",display:"flex",flexDirection:"column",minWidth:0,minHeight:0,overflow:"hidden"},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",borderBottom:"1px solid #e5e7eb",height:"3rem",flexShrink:0,minWidth:0,overflow:"hidden"},children:[(0,t.jsx)("div",{style:{flex:1,display:"flex",height:"3rem",overflow:"hidden",minWidth:0},children:u.map(a=>(0,t.jsx)("button",{onClick:()=>p(a.id),disabled:!e,style:{flex:"1 1 0%",padding:"0 0.5rem",height:"3rem",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"0.875rem",fontWeight:500,transition:"colors",borderBottom:s===a.id?"2px solid #3b82f6":"none",borderTop:"none",borderLeft:"none",borderRight:"none",backgroundColor:"transparent",color:s===a.id?"inherit":"#6b7280",cursor:e?"pointer":"not-allowed",opacity:e?1:.5,minWidth:0,overflow:"hidden",outline:"none"},children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",minWidth:0},children:[a.icon,(0,t.jsx)("span",{children:a.label})]})},a.id))}),(0,t.jsxs)("div",{style:{padding:"0 0.5rem",display:"flex",alignItems:"center",gap:"0.5rem",borderLeft:"1px solid #e5e7eb",flexShrink:0},children:[v&&(0,t.jsx)("span",{style:{fontSize:"0.75rem",color:"#dc2626",maxWidth:"100px",overflow:"hidden",textOverflow:"ellipsis"},children:v}),x&&(0,t.jsx)("span",{style:{fontSize:"0.75rem",color:"#16a34a"},children:"Saved!"}),(0,t.jsxs)("button",{onClick:S,disabled:h||!l||!e,style:{height:"2rem",padding:"0 0.75rem",border:"1px solid #e5e7eb",borderRadius:"0.375rem",backgroundColor:"transparent",cursor:!h&&l&&e?"pointer":"not-allowed",opacity:!h&&l&&e?1:.5,display:"flex",alignItems:"center",fontSize:"0.875rem",minWidth:0},children:[(0,t.jsx)(d.Save,{className:"h-3 w-3",style:{marginRight:"0.25rem"}}),(0,t.jsx)("span",{children:"Save"})]})]})]}),(0,t.jsx)("div",{style:{flex:1,overflow:"hidden",position:"relative",minWidth:0,minHeight:0},children:e?(0,t.jsx)("textarea",{value:w,onChange:t=>((t,a)=>{if(m(e=>({...e,[t]:a})),e)try{let r=JSON.parse(a),i={};switch(t){case"schema":i.schema=r;break;case"coercion":i.coercion_rules=r;break;case"validation":i.validation_rules=r;break;case"metadata":i.metadata=r}n({...e,...i})}catch{}})(s,t.target.value),style:{width:"100%",height:"100%",padding:"1rem",fontFamily:"monospace",fontSize:"0.875rem",border:"none",outline:"none",resize:"none",backgroundColor:"transparent",color:"inherit",boxSizing:"border-box"},placeholder:`Enter ${u.find(e=>e.id===s)?.label.toLowerCase()}...`,spellCheck:!1}):(0,t.jsx)("div",{style:{width:"100%",height:"100%",display:"flex",alignItems:"center",justifyContent:"center",color:"#6b7280"},children:(0,t.jsxs)("div",{style:{textAlign:"center"},children:[(0,t.jsx)(i.FileText,{style:{height:"3rem",width:"3rem",margin:"0 auto 1rem",opacity:.5}}),(0,t.jsx)("p",{children:r?"Loading contract...":"Select a contract to edit"})]})})})]})});var f=e.i(69074);function m({value:e,onChange:n,isValidating:r,hasErrors:l,batchMode:o=!1}){let s=(0,a.useRef)(null),d=(0,a.useCallback)(e=>{let t=e.target.files?.[0];if(!t)return;let a=new FileReader;a.onload=e=>{let t=e.target?.result;try{let e=JSON.parse(t);n(JSON.stringify(e,null,2))}catch{n(t)}},a.readAsText(t)},[n]),c=(0,a.useCallback)(()=>{o?n(JSON.stringify([{name:"John Doe",age:30,email:"john@example.com"},{name:"Jane Smith",age:25,email:"jane@example.com"}],null,2)):n(JSON.stringify({name:"John Doe",age:30,email:"john@example.com"},null,2))},[o,n]);return(0,t.jsxs)("div",{style:{width:"100%",height:"100%",display:"flex",flexDirection:"column",minWidth:0,minHeight:0,overflow:"hidden"},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0 1rem",height:"3rem",borderBottom:"1px solid #e5e7eb",flexShrink:0,minWidth:0},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[(0,t.jsx)(i.FileText,{style:{height:"1rem",width:"1rem",color:"#6b7280"}}),(0,t.jsx)("span",{style:{fontSize:"0.875rem",fontWeight:500},children:"Sample Data"}),r&&(0,t.jsx)("span",{style:{fontSize:"0.75rem",color:"#6b7280",animation:"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite"},children:"Validating..."})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:"0.5rem"},children:[(0,t.jsx)("button",{onClick:c,style:{height:"1.75rem",fontSize:"0.75rem",padding:"0 0.5rem",border:"1px solid #e5e7eb",borderRadius:"0.375rem",backgroundColor:"transparent",cursor:"pointer"},children:"Example"}),(0,t.jsxs)("button",{onClick:()=>s.current?.click(),style:{height:"1.75rem",fontSize:"0.75rem",padding:"0 0.5rem",border:"1px solid #e5e7eb",borderRadius:"0.375rem",backgroundColor:"transparent",cursor:"pointer",display:"flex",alignItems:"center"},children:[(0,t.jsx)(f.Upload,{style:{height:"0.75rem",width:"0.75rem",marginRight:"0.25rem"}}),"Upload"]}),(0,t.jsx)("input",{ref:s,type:"file",accept:".json,.txt",onChange:d,style:{display:"none"}})]})]}),(0,t.jsxs)("div",{style:{flex:1,overflow:"hidden",position:"relative",minWidth:0,minHeight:0},children:[(0,t.jsx)("textarea",{value:e,onChange:e=>n(e.target.value),style:{width:"100%",height:"100%",padding:"1rem",fontFamily:"monospace",fontSize:"0.875rem",border:"none",outline:"none",resize:"none",backgroundColor:"transparent",color:"inherit",boxSizing:"border-box"},placeholder:o?'[{"field1": "value1"}, {"field2": "value2"}]':'{"field1": "value1", "field2": "value2"}',spellCheck:!1}),l&&(0,t.jsx)("div",{style:{position:"absolute",top:"0.5rem",right:"0.5rem"},children:(0,t.jsx)("div",{style:{height:"0.5rem",width:"0.5rem",backgroundColor:"#dc2626",borderRadius:"50%",animation:"pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite"}})})]})]})}var h=e.i(95468),g=e.i(73884),v=e.i(63209);let y=(0,e.i(75254).default)("Wrench",[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z",key:"cbrjhi"}]]);var x=e.i(19455);function b({error:e,onFixInContract:a,onFixInData:n}){return(0,t.jsx)("div",{className:"border border-destructive/50 rounded-lg p-4 bg-destructive/5",children:(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)(v.AlertCircle,{className:"h-5 w-5 text-destructive flex-shrink-0 mt-0.5"}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 mb-1",children:[(0,t.jsx)("span",{className:"font-semibold text-destructive",children:e.field}),void 0!==e.input_value&&(0,t.jsxs)("span",{className:"text-xs text-muted-foreground font-mono",children:["(",JSON.stringify(e.input_value),")"]})]}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground mb-3",children:e.message}),(a||n)&&(0,t.jsxs)("div",{className:"flex gap-2",children:[a&&(0,t.jsxs)(x.Button,{variant:"outline",size:"sm",onClick:a,className:"h-7 text-xs",children:[(0,t.jsx)(i.FileText,{className:"h-3 w-3 mr-1"}),"Fix in Contract"]}),n&&(0,t.jsxs)(x.Button,{variant:"outline",size:"sm",onClick:n,className:"h-7 text-xs",children:[(0,t.jsx)(y,{className:"h-3 w-3 mr-1"}),"Fix in Data"]})]})]})]})})}function S(e){if(null===e)return{type:"null"};let t=typeof e;return"number"===t?Number.isInteger(e)?{type:"integer"}:{type:"number"}:"boolean"===t?{type:"boolean"}:"string"===t?{type:"string"}:Array.isArray(e)?{type:"array",items:e.length>0?S(e[0]):{}}:"object"===t?{type:"object",properties:{}}:{type:"string"}}let w=(0,a.memo)(function({result:e,isValidating:n,contract:r,sampleData:i,onContractChange:l,onDataChange:o}){let s=(0,a.useCallback)(e=>{if(!r)return;let t=((e,t,a)=>{try{let n=JSON.parse(a),r={...e};r.schema||(r.schema={type:"object",properties:{},required:[]}),r.schema.properties||(r.schema.properties={}),r.schema.required||(r.schema.required=[]);let i=t.field,l=void 0!==n[i]?n[i]:t.input_value;if(r.schema.properties[i]){let e=r.schema.properties[i];if(t.message.includes("required")||t.message.includes("missing"))r.schema.required?.includes(i)&&(r.schema.required=r.schema.required.filter(e=>e!==i));else if(t.message.includes("type"))r.schema.properties[i]={...e,...S(l)};else if(t.message.includes("minimum")||t.message.includes("greater than")){let a=t.message.match(/should be (greater than|at least) ([\d.]+)/);a&&"number"===e.type&&(e.minimum=parseFloat(a[2])-.1)}else if(t.message.includes("maximum")||t.message.includes("less than")){let a=t.message.match(/should be (less than|at most) ([\d.]+)/);a&&"number"===e.type&&(e.maximum=parseFloat(a[2])+.1)}}else r.schema.properties[i]=S(l);return r}catch{return null}})(r,e,i);t&&l(t)},[r,i,l]),d=(0,a.useCallback)(e=>{try{let t=JSON.parse(i),a=((e,t,a)=>{let n={...e},r=t.field;if(!a?.schema?.properties?.[r])return null;let i=a.schema.properties[r],l=n[r];if(t.message.includes("type"))if("number"===i.type&&"string"==typeof l){let e=parseFloat(l);isNaN(e)||(n[r]=e)}else if("integer"===i.type&&"string"==typeof l){let e=parseInt(l,10);isNaN(e)||(n[r]=e)}else"boolean"===i.type&&"string"==typeof l&&(n[r]="true"===l.toLowerCase());return(t.message.includes("required")||t.message.includes("missing"))&&(void 0!==i.default?n[r]=i.default:n[r]=function(e){switch(e){case"string":return"";case"number":case"integer":return 0;case"boolean":return!1;case"array":return[];case"object":return{};default:return null}}(i.type)),t.message.includes("minimum")&&"number"==typeof l?void 0!==i.minimum&&(n[r]=i.minimum):t.message.includes("maximum")&&"number"==typeof l&&void 0!==i.maximum&&(n[r]=i.maximum),n})(t,e,r);a&&o(JSON.stringify(a,null,2))}catch{}},[i,r,o]),c=e=>e&&"results"in e&&"total_count"in e,u=n?{backgroundColor:"#f3f4f6",icon:(0,t.jsx)("div",{style:{animation:"spin 1s linear infinite",borderRadius:"50%",height:"1.25rem",width:"1.25rem",borderBottom:"2px solid #3b82f6",borderTop:"2px solid transparent",borderLeft:"2px solid transparent",borderRight:"2px solid transparent",flexShrink:0}}),text:"Validating...",color:"#6b7280"}:e?c(e)?0===e.invalid_count?{backgroundColor:"#f0fdf4",icon:(0,t.jsx)(h.CheckCircle2,{style:{height:"1.25rem",width:"1.25rem",color:"#16a34a",flexShrink:0}}),text:`All Valid (${e.valid_count}/${e.total_count})`,color:"#16a34a"}:{backgroundColor:"#fef2f2",icon:(0,t.jsx)(g.XCircle,{style:{height:"1.25rem",width:"1.25rem",color:"#dc2626",flexShrink:0}}),text:`${e.invalid_count} Invalid, ${e.valid_count} Valid (${e.total_count} total)`,color:"#dc2626"}:e.is_valid?{backgroundColor:"#f0fdf4",icon:(0,t.jsx)(h.CheckCircle2,{style:{height:"1.25rem",width:"1.25rem",color:"#16a34a",flexShrink:0}}),text:"Valid",color:"#16a34a"}:{backgroundColor:"#fef2f2",icon:(0,t.jsx)(g.XCircle,{style:{height:"1.25rem",width:"1.25rem",color:"#dc2626",flexShrink:0}}),text:`Invalid (${e.error_count} error${1!==e.error_count?"s":""})`,color:"#dc2626"}:{backgroundColor:"#f3f4f6",icon:(0,t.jsx)(v.AlertCircle,{style:{height:"1.25rem",width:"1.25rem",color:"#6b7280",flexShrink:0}}),text:"Waiting for validation",color:"#6b7280"};return(0,t.jsxs)("div",{style:{width:"100%",height:"100%",display:"flex",flexDirection:"column",minWidth:0,minHeight:0,overflow:"hidden"},children:[(0,t.jsx)("div",{style:{padding:"0 1rem",height:"3rem",display:"flex",alignItems:"center",borderBottom:"1px solid #e5e7eb",backgroundColor:u.backgroundColor,flexShrink:0,minWidth:0},children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[u.icon,(0,t.jsx)("div",{style:{minWidth:0},children:(0,t.jsx)("div",{style:{fontSize:"0.875rem",fontWeight:600,color:u.color,overflow:"hidden",textOverflow:"ellipsis"},children:u.text})})]})}),(0,t.jsxs)("div",{style:{flex:1,overflowY:"auto",padding:"1rem",minWidth:0,minHeight:0},children:[n&&(0,t.jsx)("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%",color:"#6b7280"},children:(0,t.jsxs)("div",{style:{textAlign:"center"},children:[(0,t.jsx)("div",{style:{animation:"spin 1s linear infinite",borderRadius:"50%",height:"2rem",width:"2rem",borderBottom:"2px solid #3b82f6",borderTop:"2px solid transparent",borderLeft:"2px solid transparent",borderRight:"2px solid transparent",margin:"0 auto 0.5rem"}}),(0,t.jsx)("p",{style:{fontSize:"0.875rem",color:"#6b7280"},children:"Validating..."})]})}),!n&&!e&&(0,t.jsx)("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%",color:"#6b7280"},children:(0,t.jsxs)("div",{style:{textAlign:"center"},children:[(0,t.jsx)(v.AlertCircle,{style:{height:"3rem",width:"3rem",margin:"0 auto 1rem",opacity:.5}}),(0,t.jsx)("p",{children:"Enter data to validate"})]})}),!n&&e&&c(e)&&(0,t.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[(0,t.jsxs)("div",{style:{padding:"0.75rem",backgroundColor:"#f3f4f6",borderRadius:"0.375rem",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[(0,t.jsx)("div",{style:{fontSize:"0.875rem",fontWeight:600},children:"Batch Summary:"}),(0,t.jsxs)("div",{style:{display:"flex",gap:"1rem",fontSize:"0.875rem"},children:[(0,t.jsxs)("span",{style:{color:"#16a34a",fontWeight:600},children:[e.valid_count," Valid"]}),(0,t.jsxs)("span",{style:{color:"#dc2626",fontWeight:600},children:[e.invalid_count," Invalid"]}),(0,t.jsxs)("span",{style:{color:"#6b7280"},children:[e.total_count," Total"]})]})]}),(0,t.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"0.75rem"},children:[(0,t.jsx)("div",{style:{fontSize:"0.875rem",fontWeight:600},children:"Results:"}),e.results.map((e,a)=>(0,t.jsxs)("div",{style:{border:"1px solid #e5e7eb",borderRadius:"0.375rem",padding:"0.75rem",backgroundColor:e.is_valid?"#f0fdf4":"#fef2f2"},children:[(0,t.jsx)("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",marginBottom:"0.5rem",fontSize:"0.875rem",fontWeight:500},children:e.is_valid?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(h.CheckCircle2,{style:{height:"1rem",width:"1rem",color:"#16a34a"}}),(0,t.jsxs)("span",{style:{color:"#16a34a"},children:["Record ",a+1,": Valid"]})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(g.XCircle,{style:{height:"1rem",width:"1rem",color:"#dc2626"}}),(0,t.jsxs)("span",{style:{color:"#dc2626"},children:["Record ",a+1,": Invalid (",e.error_count," error",1!==e.error_count?"s":"",")"]})]})}),e.is_valid&&null!=e.data?(0,t.jsx)("div",{style:{marginTop:"0.5rem"},children:(0,t.jsx)("pre",{style:{backgroundColor:"#ffffff",padding:"0.5rem",borderRadius:"0.25rem",fontSize:"0.75rem",overflow:"auto",margin:0,border:"1px solid #e5e7eb"},children:JSON.stringify(e.data,null,2)})}):null,!e.is_valid&&e.errors&&e.errors.length>0&&(0,t.jsx)("div",{style:{marginTop:"0.5rem",display:"flex",flexDirection:"column",gap:"0.5rem"},children:e.errors.map((e,a)=>(0,t.jsx)(b,{error:e,onFixInContract:()=>s(e),onFixInData:()=>d(e)},a))})]},a))]})]}),!n&&e&&!c(e)&&e.is_valid&&null!=e.data&&(0,t.jsxs)("div",{style:{marginBottom:"1rem"},children:[(0,t.jsx)("div",{style:{fontSize:"0.875rem",fontWeight:600,marginBottom:"0.5rem"},children:"Validated Data:"}),(0,t.jsx)("pre",{style:{backgroundColor:"#f3f4f6",padding:"0.75rem",borderRadius:"0.375rem",fontSize:"0.75rem",overflow:"auto",margin:0},children:JSON.stringify(e.data,null,2)})]}),!n&&e&&!c(e)&&!e.is_valid&&e.errors&&e.errors.length>0&&(0,t.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"0.75rem"},children:[(0,t.jsx)("div",{style:{fontSize:"0.875rem",fontWeight:600},children:"Errors:"}),e.errors.map((e,a)=>(0,t.jsx)(b,{error:e,onFixInContract:()=>s(e),onFixInData:()=>d(e)},a))]})]})]})});var j=e.i(46652);function C(){let{contracts:e,loading:i,error:l}=(0,j.useContracts)(),[o,s]=(0,a.useState)(""),[d,u]=(0,a.useState)(!1),[f,h]=(0,a.useState)(!1),[g,v]=(0,a.useState)(null),[y,x]=(0,a.useState)(null),[b,S]=(0,a.useState)("{}"),[C,z]=(0,a.useState)(!1);(0,a.useEffect)(()=>{if(!o){v(null),x(null);return}(async()=>{z(!0);try{let[e,t]=await Promise.all([c.api.contracts.get(o),c.api.contracts.buildFromId(o,{include_metadata:!0,include_ownership:!0,include_governance:!0})]);x(e.schema_id||null),v(t.contract)}catch(e){console.error("Failed to load contract:",e),v(null),x(null)}finally{z(!1)}})()},[o]);let{result:k,isValidating:N,error:P}=function(e,t,n={}){let{debounceMs:r=500,enabled:i=!0,strict:l=!1,batchMode:o=!1}=n,[s,d]=(0,a.useState)(null),[u,p]=(0,a.useState)(!1),[f,m]=(0,a.useState)(null),h=(0,a.useCallback)(async()=>{if(!e||!t||!i){d(null),m(null);return}p(!0),m(null);try{let a=JSON.parse(t),n=Array.isArray(a);if(o||n){let t=n?a:[a];if(0===t.length){d(null),m(null),p(!1);return}console.log("Calling batch validation API",{hasContract:!!e,hasSchema:!!e?.schema,recordCount:t.length,strict:l});let r=await c.api.validation.validateBatch({contract:e,data_list:t,strict:l});console.log("Batch validation response:",r),d(r)}else{if(0===Object.keys(a).length&&a.constructor===Object){d(null),m(null),p(!1);return}console.log("Calling validation API",{hasContract:!!e,hasSchema:!!e?.schema,dataKeys:Object.keys(a||{}),strict:l});let t=await c.api.validation.validate({contract:e,data:a,strict:l});console.log("Validation response:",t),d(t)}}catch(t){if(console.error("Validation error:",t),t.message?.includes("JSON")||t.message?.includes("Unexpected token")){d(null),m(null),p(!1);return}let e=t.response?.detail||t.message||"Validation failed";l?o?d({results:[{is_valid:!1,data:null,errors:[{field:"validation",message:e}],error_count:1}],total_count:1,valid_count:0,invalid_count:1}):d({is_valid:!1,data:null,errors:[{field:"validation",message:e}],error_count:1}):(m(e),d(null))}finally{p(!1)}},[e,t,i,l,o]);return(0,a.useEffect)(()=>{let a;if(!e||!t||!i){d(null),m(null);return}try{if(a=JSON.parse(t),Array.isArray(a)){if(0===a.length){d(null),m(null);return}}else if(0===Object.keys(a).length&&a.constructor===Object){d(null),m(null);return}}catch{d(null),m(null);return}console.log("Triggering validation",{hasContract:!!e,hasSchema:!!e?.schema,hasData:!!a,batchMode:o,contractKeys:e?Object.keys(e):[]});let n=setTimeout(()=>{h()},r);return()=>clearTimeout(n)},[e,t,r,i,o,h]),{result:s,isValidating:u,error:f,validate:h}}(g,b,{debounceMs:500,enabled:!!g&&!!b&&""!==b.trim()&&"{}"!==b,strict:d,batchMode:f}),L=(0,a.useCallback)(e=>{v(e)},[]),_=(0,a.useCallback)(async()=>{if(o){z(!0);try{let[e,t]=await Promise.all([c.api.contracts.get(o),c.api.contracts.buildFromId(o,{include_metadata:!0,include_ownership:!0,include_governance:!0})]);x(e.schema_id||null),v(t.contract)}catch(e){console.error("Failed to reload contract:",e)}finally{z(!1)}}},[o]);return i?(0,t.jsx)("div",{className:"flex items-center justify-center h-screen",children:(0,t.jsx)("div",{className:"text-gray-500",children:"Loading contracts..."})}):l&&(l.includes("Unable to connect")||l.includes("API server is not running"))?(0,t.jsx)("div",{className:"flex flex-col items-center justify-center h-screen p-8",children:(0,t.jsxs)("div",{className:"max-w-md text-center",children:[(0,t.jsx)("h2",{className:"text-2xl font-bold text-foreground mb-4",children:"API Server Not Running"}),(0,t.jsx)("p",{className:"text-muted-foreground mb-6",children:"The validation page requires the API server to be running. Please start it in a separate terminal."}),(0,t.jsxs)("div",{className:"bg-muted p-4 rounded-lg font-mono text-sm text-left",children:[(0,t.jsx)("div",{className:"mb-2",children:"# Terminal 1: Start API server"}),(0,t.jsx)("div",{className:"text-primary",children:"pycharter api"}),(0,t.jsx)("div",{className:"mt-4 mb-2",children:"# Terminal 2: Start UI (already running)"}),(0,t.jsx)("div",{className:"text-primary",children:"pycharter ui dev"})]}),(0,t.jsxs)("p",{className:"text-sm text-muted-foreground mt-4",children:["The API server should be running at ",(0,t.jsx)("code",{className:"bg-muted px-1 rounded",children:"http://localhost:8000"})]})]})}):(0,t.jsxs)("div",{className:"flex flex-col h-full bg-white",children:[(0,t.jsx)(r,{contracts:e,selectedContractId:o,onContractChange:s,strictMode:d,onStrictModeChange:u,batchMode:f,onBatchModeChange:h}),(0,t.jsxs)(n.Group,{orientation:"horizontal",className:"flex-1",children:[(0,t.jsx)(n.Panel,{defaultSize:30,minSize:15,children:(0,t.jsx)("div",{className:"flex flex-col h-full",children:(0,t.jsx)(p,{contract:C?null:g,onChange:L,contractId:o,schemaId:y,onSave:_})})}),(0,t.jsx)(n.Separator,{className:"w-1 bg-gray-300 hover:bg-blue-500 transition-colors"}),(0,t.jsx)(n.Panel,{defaultSize:40,minSize:20,children:(0,t.jsx)("div",{className:"flex flex-col h-full",children:(0,t.jsx)(m,{value:b,onChange:S,isValidating:N,hasErrors:!!k&&("is_valid"in k?!k.is_valid:k.invalid_count>0),batchMode:f})})}),(0,t.jsx)(n.Separator,{className:"w-1 bg-gray-300 hover:bg-blue-500 transition-colors"}),(0,t.jsx)(n.Panel,{defaultSize:30,minSize:15,children:(0,t.jsx)("div",{className:"flex flex-col h-full",children:(0,t.jsx)(w,{result:k,isValidating:N,contract:g,sampleData:b,onContractChange:L,onDataChange:S})})})]})]})}function z(){return(0,t.jsxs)("div",{className:"min-h-screen bg-background",children:[(0,t.jsx)("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pt-6 pb-1",children:(0,t.jsxs)("div",{className:"mb-1",children:[(0,t.jsx)("h1",{className:"text-2xl font-bold text-foreground mb-1",children:"Validation"}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"Test and validate data against contracts and schemas"})]})}),(0,t.jsx)("div",{className:"w-full px-2",style:{height:"calc(100vh - 6rem)"},children:(0,t.jsx)(C,{})})]})}e.s(["default",()=>z],81704)}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,58041,e=>{"use strict";let t=(0,e.i(75254).default)("Database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);e.s(["Database",()=>t],58041)},56909,e=>{"use strict";let t=(0,e.i(75254).default)("Save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);e.s(["Save",()=>t],56909)},37727,7233,e=>{"use strict";var t=e.i(75254);let a=(0,t.default)("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);e.s(["X",()=>a],37727);let s=(0,t.default)("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);e.s(["Plus",()=>s],7233)},78583,e=>{"use strict";let t=(0,e.i(75254).default)("FileText",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);e.s(["FileText",()=>t],78583)},46652,e=>{"use strict";var t=e.i(71645),a=e.i(9165);function s(){let[e,s]=(0,t.useState)([]),[r,i]=(0,t.useState)(!0),[l,n]=(0,t.useState)(null),c=(0,t.useCallback)(async()=>{try{i(!0),n(null);let e=await a.api.contracts.list();s(e.contracts)}catch(t){let e="Failed to load contracts";t instanceof a.ApiError&&(e=0===t.status||t.message.includes("Unable to connect")?"API server is not running. Please start it with: pycharter api":t.message),n(e),console.error("Error loading contracts:",t)}finally{i(!1)}},[]);return(0,t.useEffect)(()=>{c()},[c]),{contracts:e,loading:r,error:l,refetch:c}}e.s(["useContracts",()=>s])},95468,e=>{"use strict";let t=(0,e.i(75254).default)("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);e.s(["CheckCircle2",()=>t],95468)},98919,52571,e=>{"use strict";var t=e.i(75254);let a=(0,t.default)("Shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);e.s(["Shield",()=>a],98919);let s=(0,t.default)("Info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);e.s(["Info",()=>s],52571)},61246,e=>{"use strict";var t=e.i(43476),a=e.i(75157);function s({className:e,...s}){return(0,t.jsx)("div",{className:(0,a.cn)("animate-pulse rounded-md bg-muted",e),...s})}function r({size:e="md",className:s}){return(0,t.jsx)("div",{className:(0,a.cn)("flex items-center justify-center",s),children:(0,t.jsx)("div",{className:(0,a.cn)("animate-spin rounded-full border-2 border-muted border-t-primary",{sm:"h-4 w-4",md:"h-8 w-8",lg:"h-12 w-12"}[e])})})}function i({message:e="Loading..."}){return(0,t.jsx)("div",{className:"min-h-screen flex items-center justify-center bg-background",children:(0,t.jsxs)("div",{className:"text-center",children:[(0,t.jsx)(r,{size:"lg",className:"mb-4"}),(0,t.jsx)("p",{className:"text-muted-foreground",children:e})]})})}function l(){return(0,t.jsxs)("div",{className:"rounded-lg border bg-card p-6 space-y-4",children:[(0,t.jsx)(s,{className:"h-6 w-3/4"}),(0,t.jsx)(s,{className:"h-4 w-full"}),(0,t.jsx)(s,{className:"h-4 w-5/6"}),(0,t.jsxs)("div",{className:"flex gap-2 mt-4",children:[(0,t.jsx)(s,{className:"h-9 w-20"}),(0,t.jsx)(s,{className:"h-9 w-20"})]})]})}function n({rows:e=5}){return(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsx)(s,{className:"h-10 w-full"}),Array.from({length:e}).map((e,a)=>(0,t.jsx)(s,{className:"h-12 w-full"},a))]})}e.s(["CardSkeleton",()=>l,"PageLoading",()=>i,"TableSkeleton",()=>n,"default",()=>r],61246)},43668,e=>{"use strict";var t=e.i(47167);let a="pycharter_settings",s={apiServer:{url:t.default.env.NEXT_PUBLIC_API_URL||"http://localhost:8000"},database:{enabled:!1},dlq:{enabled:!1}};function r(){try{let e=localStorage.getItem(a);if(e){let t=JSON.parse(e);return{...s,...t,apiServer:{...s.apiServer,...t.apiServer},database:{...s.database,...t.database},dlq:{...s.dlq,...t.dlq}}}}catch(e){console.error("Failed to load settings:",e)}return s}function i(e){try{localStorage.setItem(a,JSON.stringify(e))}catch(e){throw console.error("Failed to save settings:",e),e}}function l(){return r().apiServer.url||s.apiServer.url}e.s(["getApiBaseUrl",()=>l,"getSettings",()=>r,"saveSettings",()=>i])},9165,e=>{"use strict";var t=e.i(43668);class a extends Error{status;response;constructor(e,t,a){super(e),this.status=t,this.response=a,this.name="ApiError"}}async function s(e,s){let r=`${(0,t.getApiBaseUrl)()}${e}`;try{let e=await fetch(r,{...s,headers:{"Content-Type":"application/json",...s?.headers}});if(!e.ok){let t;try{t=await e.json()}catch{t={detail:e.statusText}}let s=t.detail||`API request failed: ${e.statusText}`;throw 422===e.status&&t.details&&Array.isArray(t.details)&&(s=t.details.map(e=>{let t=e.loc?.join(".")||e.field||"field",a=e.msg||e.message||"validation error";return`${t}: ${a}`}).join("; ")||s),new a(s,e.status,t)}let t=e.headers.get("content-type");if(t&&t.includes("application/json"))return e.json();return e.text()}catch(s){if(s instanceof TypeError&&"Failed to fetch"===s.message){let s=(0,t.getApiBaseUrl)();throw new a(`Unable to connect to API server at ${s}. Please ensure the API server is running and the URL is correct.`,0,{originalError:"NetworkError",apiUrl:s,endpoint:e,suggestion:"Check your API server settings in the Settings page"})}throw s}}async function r(e){return s(e,{method:"GET"})}async function i(e,t){return s(e,{method:"POST",body:t?JSON.stringify(t):void 0})}async function l(e,t){return s(e,{method:"PUT",body:t?JSON.stringify(t):void 0})}async function n(e,s){let r=`${(0,t.getApiBaseUrl)()}${e}`,i=await fetch(r,{method:"POST",body:s});if(!i.ok){let e;try{e=await i.json()}catch{e={detail:i.statusText}}throw new a(e.detail||`API request failed: ${i.statusText}`,i.status,e)}let l=i.headers.get("content-type");return l&&l.includes("application/json")?i.json():i.text()}async function c(e){let s=`${(0,t.getApiBaseUrl)()}${e}`,r=await fetch(s,{method:"GET"});if(!r.ok){let e;try{e=await r.json()}catch{e={detail:r.statusText}}throw new a(e.detail||`API request failed: ${r.statusText}`,r.status,e)}return r.blob()}e.s(["ApiError",()=>a,"api",0,{contracts:{list:()=>r("/api/v1/contracts"),get:e=>r(`/api/v1/contracts/${e}`),parse:e=>i("/api/v1/contracts/parse",{contract:e}),parseFile:(e,t)=>{let a=new FormData;return a.append("file",e),void 0!==t&&a.append("validate",String(t)),n("/api/v1/contracts/parse/upload",a)},build:e=>i("/api/v1/contracts/build",e),buildFromId:(e,t)=>{let a=new URLSearchParams;t?.include_metadata!==void 0&&a.append("include_metadata",String(t.include_metadata)),t?.include_ownership!==void 0&&a.append("include_ownership",String(t.include_ownership)),t?.include_governance!==void 0&&a.append("include_governance",String(t.include_governance));let s=a.toString();return i(`/api/v1/contracts/${e}/build${s?`?${s}`:""}`,{})},createFromArtifacts:e=>i("/api/v1/contracts/create-from-artifacts",e),createMixed:e=>i("/api/v1/contracts/create-mixed",e),update:(e,t)=>l(`/api/v1/contracts/${e}`,t)},metadata:{listSchemas:()=>r("/api/v1/metadata/schemas"),getSchema:(e,t)=>{let a=t?`?version=${t}`:"";return r(`/api/v1/metadata/schemas/${e}${a}`)},getCompleteSchema:(e,t)=>{let a=t?`?version=${t}`:"";return r(`/api/v1/metadata/schemas/${e}/complete${a}`)},storeSchema:e=>i("/api/v1/metadata/schemas",e),getMetadata:(e,t)=>{let a=t?`?version=${t}`:"";return r(`/api/v1/metadata/metadata/${e}${a}`)},storeMetadata:e=>i("/api/v1/metadata/metadata",e),getCoercionRules:(e,t)=>{let a=t?`?version=${t}`:"";return r(`/api/v1/metadata/coercion-rules/${e}${a}`)},storeCoercionRules:e=>i("/api/v1/metadata/coercion-rules",e),getValidationRules:(e,t)=>{let a=t?`?version=${t}`:"";return r(`/api/v1/metadata/validation-rules/${e}${a}`)},storeValidationRules:e=>i("/api/v1/metadata/validation-rules",e),getEntityList:e=>r(`/api/v1/metadata/${e}`),createEntity:(e,t)=>i(`/api/v1/metadata/${e}`,t),updateEntity:(e,t,a)=>l(`/api/v1/metadata/${e}/${t}`,a),listArtifacts:()=>r("/api/v1/metadata/artifacts")},validation:{validate:e=>i("/api/v1/validation/validate",e),validateBatch:e=>i("/api/v1/validation/validate-batch",e)},schemas:{generate:e=>i("/api/v1/schemas/generate",e),convert:e=>i("/api/v1/schemas/convert",e)},quality:{listMetrics:e=>{let t=new URLSearchParams;e?.schema_id&&t.append("schema_id",e.schema_id),e?.limit&&t.append("limit",e.limit.toString()),e?.offset&&t.append("offset",e.offset.toString());let a=t.toString();return r(`/api/v1/quality/metrics${a?`?${a}`:""}`)},getMetric:e=>r(`/api/v1/quality/metrics/${e}`),getReport:(e,t)=>{let a=new URLSearchParams;t?.data_source&&a.append("data_source",t.data_source),t?.limit&&a.append("limit",t.limit.toString());let s=a.toString();return r(`/api/v1/quality/reports/${e}${s?`?${s}`:""}`)},check:e=>i("/api/v1/quality/check",e),checkUpload:(e,t)=>{let a=new FormData;return a.append("file",e),t.schema_id&&a.append("schema_id",t.schema_id),t.contract&&a.append("contract",t.contract),void 0!==t.record_violations&&a.append("record_violations",String(t.record_violations)),void 0!==t.calculate_metrics&&a.append("calculate_metrics",String(t.calculate_metrics)),void 0!==t.check_thresholds&&a.append("check_thresholds",String(t.check_thresholds)),t.thresholds&&a.append("thresholds",t.thresholds),void 0!==t.include_field_metrics&&a.append("include_field_metrics",String(t.include_field_metrics)),void 0!==t.sample_size&&a.append("sample_size",String(t.sample_size)),t.data_source&&a.append("data_source",t.data_source),t.data_version&&a.append("data_version",t.data_version),n("/api/v1/quality/check/upload",a)},queryViolations:e=>i("/api/v1/quality/violations",e)},templates:{downloadSchema:()=>c("/api/v1/templates/schema"),downloadContractArtifacts:()=>c("/api/v1/templates/contract-artifacts"),listEtlTemplates:()=>s("/api/v1/templates/etl"),downloadEtlTemplate:async e=>{let s=(0,t.getApiBaseUrl)().replace(/\/$/,""),r=await fetch(`${s}/api/v1/templates/etl/${encodeURIComponent(e)}`);if(!r.ok)throw new a(await r.text()||r.statusText,r.status);return r.text()}},settings:{testDatabase:e=>i("/api/v1/settings/test-database",e),testDlq:e=>i("/api/v1/settings/test-dlq",e),getDlqStats:e=>i("/api/v1/settings/dlq-stats",e)}}])},63209,e=>{"use strict";let t=(0,e.i(75254).default)("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);e.s(["AlertCircle",()=>t],63209)},95113,e=>{"use strict";var t=e.i(43476),a=e.i(63209),s=e.i(9165),r=e.i(75157);function i({error:e,title:i="Error",className:l}){if(!e)return null;let n=e instanceof s.ApiError,c=n?e.message:e.message||"An unexpected error occurred";return(0,t.jsx)("div",{className:(0,r.cn)("rounded-lg border border-destructive/50 bg-destructive/10 p-4",l),children:(0,t.jsxs)("div",{className:"flex",children:[(0,t.jsx)(a.AlertCircle,{className:"h-5 w-5 text-destructive flex-shrink-0 mt-0.5"}),(0,t.jsxs)("div",{className:"ml-3",children:[(0,t.jsx)("h3",{className:"text-sm font-medium text-destructive",children:i}),(0,t.jsxs)("div",{className:"mt-2 text-sm text-destructive/90",children:[(0,t.jsx)("p",{children:c}),n&&e.status&&(0,t.jsxs)("p",{className:"mt-1 text-xs opacity-75",children:["Status: ",e.status]})]})]})]})})}e.s(["default",()=>i])},88511,e=>{"use strict";let t=(0,e.i(75254).default)("SquarePen",[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]]);e.s(["Edit",()=>t],88511)},40160,e=>{"use strict";let t=(0,e.i(75254).default)("Download",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"7 10 12 15 17 10",key:"2ggqvy"}],["line",{x1:"12",x2:"12",y1:"15",y2:"3",key:"1vk2je"}]]);e.s(["Download",()=>t],40160)}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,43668,e=>{"use strict";var t=e.i(47167);let a="pycharter_settings",n={apiServer:{url:t.default.env.NEXT_PUBLIC_API_URL||"http://localhost:8000"},database:{enabled:!1},dlq:{enabled:!1}};function r(){try{let e=localStorage.getItem(a);if(e){let t=JSON.parse(e);return{...n,...t,apiServer:{...n.apiServer,...t.apiServer},database:{...n.database,...t.database},dlq:{...n.dlq,...t.dlq}}}}catch(e){console.error("Failed to load settings:",e)}return n}function i(e){try{localStorage.setItem(a,JSON.stringify(e))}catch(e){throw console.error("Failed to save settings:",e),e}}function o(){return r().apiServer.url||n.apiServer.url}e.s(["getApiBaseUrl",()=>o,"getSettings",()=>r,"saveSettings",()=>i])},9165,e=>{"use strict";var t=e.i(43668);class a extends Error{status;response;constructor(e,t,a){super(e),this.status=t,this.response=a,this.name="ApiError"}}async function n(e,n){let r=`${(0,t.getApiBaseUrl)()}${e}`;try{let e=await fetch(r,{...n,headers:{"Content-Type":"application/json",...n?.headers}});if(!e.ok){let t;try{t=await e.json()}catch{t={detail:e.statusText}}let n=t.detail||`API request failed: ${e.statusText}`;throw 422===e.status&&t.details&&Array.isArray(t.details)&&(n=t.details.map(e=>{let t=e.loc?.join(".")||e.field||"field",a=e.msg||e.message||"validation error";return`${t}: ${a}`}).join("; ")||n),new a(n,e.status,t)}let t=e.headers.get("content-type");if(t&&t.includes("application/json"))return e.json();return e.text()}catch(n){if(n instanceof TypeError&&"Failed to fetch"===n.message){let n=(0,t.getApiBaseUrl)();throw new a(`Unable to connect to API server at ${n}. Please ensure the API server is running and the URL is correct.`,0,{originalError:"NetworkError",apiUrl:n,endpoint:e,suggestion:"Check your API server settings in the Settings page"})}throw n}}async function r(e){return n(e,{method:"GET"})}async function i(e,t){return n(e,{method:"POST",body:t?JSON.stringify(t):void 0})}async function o(e,t){return n(e,{method:"PUT",body:t?JSON.stringify(t):void 0})}async function l(e,n){let r=`${(0,t.getApiBaseUrl)()}${e}`,i=await fetch(r,{method:"POST",body:n});if(!i.ok){let e;try{e=await i.json()}catch{e={detail:i.statusText}}throw new a(e.detail||`API request failed: ${i.statusText}`,i.status,e)}let o=i.headers.get("content-type");return o&&o.includes("application/json")?i.json():i.text()}async function s(e){let n=`${(0,t.getApiBaseUrl)()}${e}`,r=await fetch(n,{method:"GET"});if(!r.ok){let e;try{e=await r.json()}catch{e={detail:r.statusText}}throw new a(e.detail||`API request failed: ${r.statusText}`,r.status,e)}return r.blob()}e.s(["ApiError",()=>a,"api",0,{contracts:{list:()=>r("/api/v1/contracts"),get:e=>r(`/api/v1/contracts/${e}`),parse:e=>i("/api/v1/contracts/parse",{contract:e}),parseFile:(e,t)=>{let a=new FormData;return a.append("file",e),void 0!==t&&a.append("validate",String(t)),l("/api/v1/contracts/parse/upload",a)},build:e=>i("/api/v1/contracts/build",e),buildFromId:(e,t)=>{let a=new URLSearchParams;t?.include_metadata!==void 0&&a.append("include_metadata",String(t.include_metadata)),t?.include_ownership!==void 0&&a.append("include_ownership",String(t.include_ownership)),t?.include_governance!==void 0&&a.append("include_governance",String(t.include_governance));let n=a.toString();return i(`/api/v1/contracts/${e}/build${n?`?${n}`:""}`,{})},createFromArtifacts:e=>i("/api/v1/contracts/create-from-artifacts",e),createMixed:e=>i("/api/v1/contracts/create-mixed",e),update:(e,t)=>o(`/api/v1/contracts/${e}`,t)},metadata:{listSchemas:()=>r("/api/v1/metadata/schemas"),getSchema:(e,t)=>{let a=t?`?version=${t}`:"";return r(`/api/v1/metadata/schemas/${e}${a}`)},getCompleteSchema:(e,t)=>{let a=t?`?version=${t}`:"";return r(`/api/v1/metadata/schemas/${e}/complete${a}`)},storeSchema:e=>i("/api/v1/metadata/schemas",e),getMetadata:(e,t)=>{let a=t?`?version=${t}`:"";return r(`/api/v1/metadata/metadata/${e}${a}`)},storeMetadata:e=>i("/api/v1/metadata/metadata",e),getCoercionRules:(e,t)=>{let a=t?`?version=${t}`:"";return r(`/api/v1/metadata/coercion-rules/${e}${a}`)},storeCoercionRules:e=>i("/api/v1/metadata/coercion-rules",e),getValidationRules:(e,t)=>{let a=t?`?version=${t}`:"";return r(`/api/v1/metadata/validation-rules/${e}${a}`)},storeValidationRules:e=>i("/api/v1/metadata/validation-rules",e),getEntityList:e=>r(`/api/v1/metadata/${e}`),createEntity:(e,t)=>i(`/api/v1/metadata/${e}`,t),updateEntity:(e,t,a)=>o(`/api/v1/metadata/${e}/${t}`,a),listArtifacts:()=>r("/api/v1/metadata/artifacts")},validation:{validate:e=>i("/api/v1/validation/validate",e),validateBatch:e=>i("/api/v1/validation/validate-batch",e)},schemas:{generate:e=>i("/api/v1/schemas/generate",e),convert:e=>i("/api/v1/schemas/convert",e)},quality:{listMetrics:e=>{let t=new URLSearchParams;e?.schema_id&&t.append("schema_id",e.schema_id),e?.limit&&t.append("limit",e.limit.toString()),e?.offset&&t.append("offset",e.offset.toString());let a=t.toString();return r(`/api/v1/quality/metrics${a?`?${a}`:""}`)},getMetric:e=>r(`/api/v1/quality/metrics/${e}`),getReport:(e,t)=>{let a=new URLSearchParams;t?.data_source&&a.append("data_source",t.data_source),t?.limit&&a.append("limit",t.limit.toString());let n=a.toString();return r(`/api/v1/quality/reports/${e}${n?`?${n}`:""}`)},check:e=>i("/api/v1/quality/check",e),checkUpload:(e,t)=>{let a=new FormData;return a.append("file",e),t.schema_id&&a.append("schema_id",t.schema_id),t.contract&&a.append("contract",t.contract),void 0!==t.record_violations&&a.append("record_violations",String(t.record_violations)),void 0!==t.calculate_metrics&&a.append("calculate_metrics",String(t.calculate_metrics)),void 0!==t.check_thresholds&&a.append("check_thresholds",String(t.check_thresholds)),t.thresholds&&a.append("thresholds",t.thresholds),void 0!==t.include_field_metrics&&a.append("include_field_metrics",String(t.include_field_metrics)),void 0!==t.sample_size&&a.append("sample_size",String(t.sample_size)),t.data_source&&a.append("data_source",t.data_source),t.data_version&&a.append("data_version",t.data_version),l("/api/v1/quality/check/upload",a)},queryViolations:e=>i("/api/v1/quality/violations",e)},templates:{downloadSchema:()=>s("/api/v1/templates/schema"),downloadContractArtifacts:()=>s("/api/v1/templates/contract-artifacts"),listEtlTemplates:()=>n("/api/v1/templates/etl"),downloadEtlTemplate:async e=>{let n=(0,t.getApiBaseUrl)().replace(/\/$/,""),r=await fetch(`${n}/api/v1/templates/etl/${encodeURIComponent(e)}`);if(!r.ok)throw new a(await r.text()||r.statusText,r.status);return r.text()}},settings:{testDatabase:e=>i("/api/v1/settings/test-database",e),testDlq:e=>i("/api/v1/settings/test-dlq",e),getDlqStats:e=>i("/api/v1/settings/dlq-stats",e)}}])},78583,e=>{"use strict";let t=(0,e.i(75254).default)("FileText",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);e.s(["FileText",()=>t],78583)},69074,e=>{"use strict";let t=(0,e.i(75254).default)("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]]);e.s(["Upload",()=>t],69074)},71921,e=>{"use strict";let t;var a=e.i(43476),n=e.i(71645);function r(e,t="Assertion error"){if(!e)throw Error(t)}function i({group:e}){let{orientation:t,panels:a}=e;return a.reduce((e,a)=>e+="horizontal"===t?a.element.offsetWidth:a.element.offsetHeight,0)}function o(e,t){return t.sort("horizontal"===e?l:s)}function l(e,t){let a=e.element.offsetLeft-t.element.offsetLeft;return 0!==a?a:e.element.offsetWidth-t.element.offsetWidth}function s(e,t){let a=e.element.offsetTop-t.element.offsetTop;return 0!==a?a:e.element.offsetHeight-t.element.offsetHeight}function d(e){return null!==e&&"object"==typeof e&&"nodeType"in e&&e.nodeType===Node.ELEMENT_NODE}function u(e,t){return{x:e.x>=t.left&&e.x<=t.right?0:Math.min(Math.abs(e.x-t.left),Math.abs(e.x-t.right)),y:e.y>=t.top&&e.y<=t.bottom?0:Math.min(Math.abs(e.y-t.top),Math.abs(e.y-t.bottom))}}function c(e){let{element:t,orientation:a,panels:n,separators:l}=e,s=o(a,Array.from(t.children).filter(d).map(e=>({element:e}))).map(({element:e})=>e),c=[],p=!1,f,h=[];for(let t of s)if(t.hasAttribute("data-panel")){let o=n.find(e=>e.element===t);if(o){if(f){let n,l=f.element.getBoundingClientRect(),s=t.getBoundingClientRect();if(p){let e="horizontal"===a?new DOMRect(l.right,l.top,0,l.height):new DOMRect(l.left,l.bottom,l.width,0),t="horizontal"===a?new DOMRect(s.left,s.top,0,s.height):new DOMRect(s.left,s.top,s.width,0);switch(h.length){case 0:n=[e,t];break;case 1:{let i=h[0],o=function({orientation:e,rects:t,targetRect:a}){let n={x:a.x+a.width/2,y:a.y+a.height/2},i,o=Number.MAX_VALUE;for(let a of t){let{x:t,y:r}=u(n,a),l="horizontal"===e?t:r;l<o&&(o=l,i=a)}return r(i,"No rect found"),i}({orientation:a,rects:[l,s],targetRect:i.element.getBoundingClientRect()});n=[i,o===l?t:e];break}default:n=h}}else n=h.length?h:["horizontal"===a?new DOMRect(l.right,s.top,s.left-l.right,s.height):new DOMRect(s.left,l.bottom,s.width,s.top-l.bottom)];for(let t of n)c.push({group:e,groupSize:i({group:e}),panels:[f,o],separator:"width"in t?void 0:t,rect:"width"in t?t:t.element.getBoundingClientRect()})}p=!1,f=o,h=[]}}else if(t.hasAttribute("data-separator")){let e=l.find(e=>e.element===t);e?h.push(e):(f=void 0,h=[])}else p=!0;return c}function p({groupSize:e,panelElement:t,styleProp:a}){let n,[r,i]=function(e){switch(typeof e){case"number":return[e,"px"];case"string":{let t=parseFloat(e);return e.endsWith("%")?[t,"%"]:e.endsWith("px")?[t,"px"]:e.endsWith("rem")?[t,"rem"]:e.endsWith("em")?[t,"em"]:e.endsWith("vh")?[t,"vh"]:e.endsWith("vw")?[t,"vw"]:[t,"%"]}}}(a);switch(i){case"%":n=r/100*e;break;case"px":n=r;break;case"rem":n=r*parseFloat(getComputedStyle(t.ownerDocument.body).fontSize);break;case"em":n=r*parseFloat(getComputedStyle(t).fontSize);break;case"vh":n=r/100*window.innerHeight;break;case"vw":n=r/100*window.innerWidth}return n}function f(e){return parseFloat(e.toFixed(3))}function h(e){let{panels:t}=e,a=i({group:e});return 0===a?t.map(e=>({collapsedSize:0,collapsible:!0===e.panelConstraints.collapsible,defaultSize:void 0,minSize:0,maxSize:100,panelId:e.id})):t.map(e=>{let t,{element:n,panelConstraints:r}=e,i=0;void 0!==r.collapsedSize&&(i=f(p({groupSize:a,panelElement:n,styleProp:r.collapsedSize})/a*100)),void 0!==r.defaultSize&&(t=f(p({groupSize:a,panelElement:n,styleProp:r.defaultSize})/a*100));let o=0;void 0!==r.minSize&&(o=f(p({groupSize:a,panelElement:n,styleProp:r.minSize})/a*100));let l=100;return void 0!==r.maxSize&&(l=f(p({groupSize:a,panelElement:n,styleProp:r.maxSize})/a*100)),{collapsedSize:i,collapsible:!0===r.collapsible,defaultSize:t,minSize:o,maxSize:l,panelId:e.id}})}function m(e,t,a=0){return Math.abs(f(e)-f(t))<=a}let g={cursorFlags:0,interactionState:{state:"inactive"},mountedGroups:new Map},v=new class{#e={};addListener(e,t){let a=this.#e[e];return void 0===a?this.#e[e]=[t]:a.includes(t)||a.push(t),()=>{this.removeListener(e,t)}}emit(e,t){let a=this.#e[e];if(void 0!==a)if(1===a.length)a[0].call(null,t);else{let e=!1,n=null,r=Array.from(a);for(let a=0;a<r.length;a++){let i=r[a];try{i.call(null,t)}catch(t){null===n&&(e=!0,n=t)}}if(e)throw n}}removeAllListeners(){this.#e={}}removeListener(e,t){let a=this.#e[e];if(void 0!==a){let e=a.indexOf(t);e>=0&&a.splice(e,1)}}};function y(e){let t="function"==typeof e?e(g):e;if(g===t)return g;let a=g;return g={...g,...t},void 0!==t.cursorFlags&&v.emit("cursorFlagsChange",g.cursorFlags),void 0!==t.interactionState&&v.emit("interactionStateChange",g.interactionState),void 0!==t.mountedGroups&&(g.mountedGroups.forEach((e,t)=>{e.derivedPanelConstraints.forEach(n=>{if(n.collapsible){let{layout:r}=a.mountedGroups.get(t)??{};if(r){let a=m(n.collapsedSize,e.layout[n.panelId]),i=m(n.collapsedSize,r[n.panelId]);a&&!i&&(t.inMemoryLastExpandedPanelSizes[n.panelId]=r[n.panelId])}}})}),v.emit("mountedGroupsChange",g.mountedGroups)),g}function b(e,t){return m(e,t)?0:e>t?1:-1}function x({panelConstraints:e,size:t}){let{collapsedSize:a=0,collapsible:n,maxSize:r=100,minSize:i=0}=e;return 0>b(t,i)&&(t=n&&0>b(t,(a+i)/2)?a:i),f(t=Math.min(r,t))}function S({delta:e,initialLayout:t,panelConstraints:a,pivotIndices:n,prevLayout:i,trigger:o}){if(m(e,0))return t;let l=Object.values(t),s=Object.values(i),d=[...l],[u,c]=n;r(null!=u,"Invalid first pivot index"),r(null!=c,"Invalid second pivot index");let p=0;if("keyboard"===o){{let t=e<0?c:u,n=a[t];r(n,`Panel constraints not found for index ${t}`);let{collapsedSize:i=0,collapsible:o,minSize:s=0}=n;if(o){let a=l[t];if(r(null!=a,`Previous layout not found for panel index ${t}`),m(a,i)){let t=s-a;b(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}{let t=e<0?u:c,n=a[t];r(n,`No panel constraints found for index ${t}`);let{collapsedSize:i=0,collapsible:o,minSize:s=0}=n;if(o){let a=l[t];if(r(null!=a,`Previous layout not found for panel index ${t}`),m(a,s)){let t=a-i;b(t,Math.abs(e))>0&&(e=e<0?0-t:t)}}}}{let t=e<0?1:-1,n=e<0?c:u,i=0;for(;;){let e=l[n];if(r(null!=e,`Previous layout not found for panel index ${n}`),i+=x({panelConstraints:a[n],size:100})-e,(n+=t)<0||n>=a.length)break}let o=Math.min(Math.abs(e),Math.abs(i));e=e<0?0-o:o}{let t=e<0?u:c;for(;t>=0&&t<a.length;){let n=Math.abs(e)-Math.abs(p),i=l[t];r(null!=i,`Previous layout not found for panel index ${t}`);let o=i-n,s=x({panelConstraints:a[t],size:o});if(!m(i,s)&&(p+=i-s,d[t]=s,p.toFixed(3).localeCompare(Math.abs(e).toFixed(3),void 0,{numeric:!0})>=0))break;e<0?t--:t++}}if(function(e,t){if(e.length!==t.length)return!1;for(let a=0;a<e.length;a++)if(e[a]!=t[a])return!1;return!0}(s,d))return i;{let t=e<0?c:u,n=l[t];r(null!=n,`Previous layout not found for panel index ${t}`);let i=n+p,o=x({panelConstraints:a[t],size:i});if(d[t]=o,!m(o,i)){let t=i-o,n=e<0?c:u;for(;n>=0&&n<a.length;){let i=d[n];r(null!=i,`Previous layout not found for panel index ${n}`);let o=i+t,l=x({panelConstraints:a[n],size:o});if(m(i,l)||(t-=l-i,d[n]=l),m(t,0))break;e>0?n--:n++}}}if(!m(Object.values(d).reduce((e,t)=>t+e,0),100,.1))return i;let f=Object.keys(i);return d.reduce((e,t,a)=>(e[f[a]]=t,e),{})}function w(e){let{mountedGroups:t}=g;for(let[a]of t)if(a.separators.some(t=>t.element===e))return a;throw Error("Could not find parent Group for separator element")}function z(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let a in e)if(void 0===t[a]||0!==b(e[a],t[a]))return!1;return!0}function C({layout:e,panelConstraints:t}){let a=[...Object.values(e)],n=a.reduce((e,t)=>e+t,0);if(a.length!==t.length)throw Error(`Invalid ${t.length} panel layout: ${a.map(e=>`${e}%`).join(", ")}`);if(!m(n,100)&&a.length>0)for(let e=0;e<t.length;e++){let t=a[e];r(null!=t,`No layout data found for index ${e}`);let i=100/n*t;a[e]=i}let i=0;for(let e=0;e<t.length;e++){let n=a[e];r(null!=n,`No layout data found for index ${e}`);let o=x({panelConstraints:t[e],size:n});n!=o&&(i+=n-o,a[e]=o)}if(!m(i,0))for(let e=0;e<t.length;e++){let n=a[e];r(null!=n,`No layout data found for index ${e}`);let o=n+i,l=x({panelConstraints:t[e],size:o});if(n!==l&&(i-=l-n,a[e]=l,m(i,0)))break}let o=Object.keys(e);return a.reduce((e,t,a)=>(e[o[a]]=t,e),{})}function L({groupId:e}){let t=()=>{let{mountedGroups:t}=g;for(let[a,n]of t)if(a.id===e)return{group:a,...n};throw Error(`Could not find Group with id "${e}"`)};return{getLayout(){let{defaultLayoutDeferred:e,layout:a}=t();return e?{}:a},setLayout(e){let{defaultLayoutDeferred:a,derivedPanelConstraints:n,group:r,layout:i,separatorToPanels:o}=t(),l=C({layout:e,panelConstraints:n});return a?i:(z(i,l)||y(e=>({mountedGroups:new Map(e.mountedGroups).set(r,{defaultLayoutDeferred:a,derivedPanelConstraints:n,layout:l,separatorToPanels:o})})),l)}}}function P(e){let{mountedGroups:t}=g,a=t.get(e);return r(a,`Mounted Group ${e.id} not found`),a}function k(e,t){let a=w(e),n=P(a),i=a.separators.find(t=>t.element===e);r(i,"Matching separator not found");let o=n.separatorToPanels.get(i);r(o,"Matching panels not found");let l=o.map(e=>a.panels.indexOf(e)),s=L({groupId:a.id}).getLayout(),d=C({layout:S({delta:t,initialLayout:s,panelConstraints:n.derivedPanelConstraints,pivotIndices:l,prevLayout:s,trigger:"keyboard"}),panelConstraints:n.derivedPanelConstraints});z(s,d)||y(e=>({mountedGroups:new Map(e.mountedGroups).set(a,{defaultLayoutDeferred:n.defaultLayoutDeferred,derivedPanelConstraints:n.derivedPanelConstraints,layout:d,separatorToPanels:n.separatorToPanels})}))}function E(e){if(e.defaultPrevented)return;let t=e.currentTarget,a=w(t);if(!a.disabled)switch(e.key){case"ArrowDown":e.preventDefault(),"vertical"===a.orientation&&k(t,5);break;case"ArrowLeft":e.preventDefault(),"horizontal"===a.orientation&&k(t,-5);break;case"ArrowRight":e.preventDefault(),"horizontal"===a.orientation&&k(t,5);break;case"ArrowUp":e.preventDefault(),"vertical"===a.orientation&&k(t,-5);break;case"End":e.preventDefault(),k(t,100);break;case"Enter":{e.preventDefault();let a=w(t),{derivedPanelConstraints:n,layout:i,separatorToPanels:o}=P(a),l=a.separators.find(e=>e.element===t);r(l,"Matching separator not found");let s=o.get(l);r(s,"Matching panels not found");let d=s[0],u=n.find(e=>e.panelId===d.id);if(r(u,"Panel metadata not found"),u.collapsible){let e=i[d.id];k(t,(u.collapsedSize===e?a.inMemoryLastExpandedPanelSizes[d.id]??u.minSize:u.collapsedSize)-e)}break}case"F6":{e.preventDefault();let a=w(t).separators.map(e=>e.element),n=Array.from(a).findIndex(t=>t===e.currentTarget);r(null!==n,"Index not found");let i=e.shiftKey?n>0?n-1:a.length-1:n+1<a.length?n+1:0;a[i].focus();break}case"Home":e.preventDefault(),k(t,-100)}}let M=e=>e,R=()=>{},T=/\b(?:position|zIndex|opacity|transform|webkitTransform|mixBlendMode|filter|webkitFilter|isolation)\b/;function j(e){let t=e.length;for(;t--;){let a=e[t];if(r(a,"Missing node"),function(e){let t,a=getComputedStyle(e);return!!("fixed"===a.position||"auto"!==a.zIndex&&("static"!==a.position||"flex"===(t=getComputedStyle(I(e)??e).display)||"inline-flex"===t)||1>+a.opacity||"transform"in a&&"none"!==a.transform||"webkitTransform"in a&&"none"!==a.webkitTransform||"mixBlendMode"in a&&"normal"!==a.mixBlendMode||"filter"in a&&"none"!==a.filter||"webkitFilter"in a&&"none"!==a.webkitFilter||"isolation"in a&&"isolate"===a.isolation||T.test(a.willChange)||"touch"===a.webkitOverflowScrolling)}(a))return a}return null}function $(e){return e&&Number(getComputedStyle(e).zIndex)||0}function _(e){let t=[];for(;e;)t.push(e),e=I(e);return t}function I(e){let{parentNode:t}=e;return null!==t&&"object"==typeof t&&"nodeType"in t&&t.nodeType===Node.DOCUMENT_FRAGMENT_NODE?t.host:t}function G(e,a){let n=[];return a.forEach((a,i)=>{if(i.disabled)return;let o=(void 0===t&&(t="function"==typeof matchMedia&&!!matchMedia("(pointer:coarse)").matches),t)?10:5,l=c(i),s=function(e,t,a){let n,r={x:1/0,y:1/0};for(let i of t){let t=u(a,i.rect);switch(e){case"horizontal":t.x<=r.x&&(n=i,r=t);break;case"vertical":t.y<=r.y&&(n=i,r=t)}}return n?{distance:r,hitRegion:n}:void 0}(i.orientation,l,{x:e.clientX,y:e.clientY});s&&s.distance.x<=o&&s.distance.y<=o&&function({groupElement:e,hitRegion:t,pointerEventTarget:a}){if(!d(a)||a.contains(e)||e.contains(a))return!0;if(function(e,t){let a;if(e===t)throw Error("Cannot compare node with itself");let n={a:_(e),b:_(t)};for(;n.a.at(-1)===n.b.at(-1);)e=n.a.pop(),t=n.b.pop(),a=e;r(a,"Stacking order can only be calculated for elements with a common ancestor");let i={a:$(j(n.a)),b:$(j(n.b))};if(i.a===i.b){let e=a.childNodes,t={a:n.a.at(-1),b:n.b.at(-1)},r=e.length;for(;r--;){let a=e[r];if(a===t.a)return 1;if(a===t.b)return -1}}return Math.sign(i.a-i.b)}(a,e)>0){let r=a;for(;r;){var n;if(r.contains(e))break;if(n=r.getBoundingClientRect(),n.x<t.x+t.width&&n.x+n.width>t.x&&n.y<t.y+t.height&&n.y+n.height>t.y)return!1;r=r.parentElement}}return!0}({groupElement:i.element,hitRegion:s.hitRegion.rect,pointerEventTarget:e.target})&&n.push(s.hitRegion)}),n}function D(e){if(e.defaultPrevented||"mouse"===e.pointerType&&e.button>0)return;let{mountedGroups:t}=g,a=G(e,t),n=new Set,r=new Set,i=new Set,o=new Map,l=!1;a.forEach(e=>{n.add(e.group),e.panels.forEach(e=>{r.add(e)}),e.separator&&(i.add(e.separator),l||(l=!0,e.separator.element.focus()));let a=t.get(e.group);a&&o.set(e.group,a.layout)}),y({interactionState:{hitRegions:a,initialLayoutMap:o,pointerDownAtPoint:{x:e.clientX,y:e.clientY},state:"active"}}),a.length&&e.preventDefault()}let N=new WeakMap;function A(e){if(null===e.defaultView||void 0===e.defaultView)return;let{prevStyle:t,styleSheet:a}=N.get(e)??{};void 0===a&&(a=new e.defaultView.CSSStyleSheet,e.adoptedStyleSheets=[a]);let{cursorFlags:n,interactionState:r}=g;switch(r.state){case"active":case"hover":{let e=function({cursorFlags:e,groups:t,state:a}){let n=0,r=0;switch(a){case"active":case"hover":t.forEach(e=>{if(!e.disableCursor)switch(e.orientation){case"horizontal":n++;break;case"vertical":r++}})}if(0===n&&0===r)return null;if("active"===a){let t=(4&e)!=0,a=(8&e)!=0;if(e){if((1&e)!=0)return t?"se-resize":a?"ne-resize":"e-resize";if((2&e)!=0)return t?"sw-resize":a?"nw-resize":"w-resize";if(t)return"s-resize";if(a)return"n-resize"}}return n>0&&r>0?"move":n>0?"ew-resize":"ns-resize"}({cursorFlags:n,groups:r.hitRegions.map(e=>e.group),state:r.state}),i=`*{cursor: ${e} !important; ${"active"===r.state?"touch-action: none;":""} }`;if(t===i)return;t=i,e?0===a.cssRules.length?a.insertRule(i):a.replaceSync(i):1===a.cssRules.length&&a.deleteRule(0);break}case"inactive":t=void 0,1===a.cssRules.length&&a.deleteRule(0)}N.set(e,{prevStyle:t,styleSheet:a})}function O({document:e,event:t,hitRegions:a,initialLayoutMap:n,mountedGroups:r,pointerDownAtPoint:i}){let o=0,l=new Map(r);a.forEach(e=>{let{group:a,groupSize:s}=e,{disableCursor:d,orientation:u,panels:c}=a,p=0;p=i?"horizontal"===u?(t.clientX-i.x)/s*100:(t.clientY-i.y)/s*100:"horizontal"===u?t.clientX<0?-100:100:t.clientY<0?-100:100;let f=n.get(a),{defaultLayoutDeferred:h,derivedPanelConstraints:m,layout:g,separatorToPanels:v}=r.get(a)??{defaultLayoutDeferred:!1};if(m&&f&&g&&v){let t=S({delta:p,initialLayout:f,panelConstraints:m,pivotIndices:e.panels.map(e=>c.indexOf(e)),prevLayout:g,trigger:"mouse-or-touch"});if(z(t,g)){if(0!==p&&!d)switch(u){case"horizontal":o|=p<0?1:2;break;case"vertical":o|=p<0?4:8}}else{l.set(e.group,{defaultLayoutDeferred:h,derivedPanelConstraints:m,layout:t,separatorToPanels:v});let a=e.group.panels.map(({id:e})=>e).join(",");e.group.inMemoryLayouts[a]=t}}}),y({cursorFlags:o,mountedGroups:l}),A(e)}function F(e){let{interactionState:t,mountedGroups:a}=g;"active"===t.state&&O({document:e.currentTarget,event:e,hitRegions:t.hitRegions,initialLayoutMap:t.initialLayoutMap,mountedGroups:a})}function W(e){if(e.defaultPrevented)return;let{interactionState:t,mountedGroups:a}=g;if("active"===t.state){if(0===e.buttons){y(e=>"inactive"===e.interactionState.state?e:{cursorFlags:0,interactionState:{state:"inactive"}}),y(e=>({mountedGroups:new Map(e.mountedGroups)}));return}O({document:e.currentTarget,event:e,hitRegions:t.hitRegions,initialLayoutMap:t.initialLayoutMap,mountedGroups:a,pointerDownAtPoint:t.pointerDownAtPoint})}else{let n=G(e,a);0===n.length?"inactive"!==t.state&&y({interactionState:{state:"inactive"}}):y({interactionState:{hitRegions:n,state:"hover"}}),A(e.currentTarget)}}function U(e){if(e.defaultPrevented||"mouse"===e.pointerType&&e.button>0)return;let{interactionState:t}=g;"active"===t.state&&(y({cursorFlags:0,interactionState:{state:"inactive"}}),t.hitRegions.length>0&&(A(e.currentTarget),y(e=>({mountedGroups:new Map(e.mountedGroups)})),e.preventDefault()))}function q(e){let t=0,a=0,n={};for(let r of e)if(void 0!==r.defaultSize){t++;let e=f(r.defaultSize);a+=e,n[r.panelId]=e}else n[r.panelId]=void 0;let r=e.length-t;if(0!==r){let t=f((100-a)/r);for(let a of e)void 0===a.defaultSize&&(n[a.panelId]=t)}return n}let B=new Map;function H(){let[e,t]=(0,n.useState)({});return[e,(0,n.useCallback)(()=>t({}),[])]}function V(e){let t=(0,n.useId)();return`${e??t}`}let Y=n.useLayoutEffect;function X(e){let t=(0,n.useRef)(e);return Y(()=>{t.current=e},[e]),(0,n.useCallback)((...e)=>t.current?.(...e),[t])}function J(...e){return X(t=>{e.forEach(e=>{if(e)switch(typeof e){case"function":e(t);break;case"object":e.current=t}})})}let K=(0,n.createContext)(null);function Z({children:e,className:t,defaultLayout:l,disableCursor:s,disabled:d,elementRef:u,groupRef:p,id:m,onLayoutChange:b,onLayoutChanged:x,orientation:S="horizontal",style:w,...P}){var k;let R,T,j=(0,n.useRef)({onLayoutChange:{},onLayoutChanged:{}}),$=X(e=>{z(j.current.onLayoutChange,e)||(j.current.onLayoutChange=e,b?.(e))}),_=X(e=>{z(j.current.onLayoutChanged,e)||(j.current.onLayoutChanged=e,x?.(e))}),I=V(m),G=(0,n.useRef)(null),[N,A]=H(),O=(0,n.useRef)({lastExpandedPanelSizes:{},layouts:{},panels:[],separators:[]}),Z=J(G,u);R=(0,n.useRef)({getLayout:()=>({}),setLayout:M}),(0,n.useImperativeHandle)(p,()=>R.current,[]),Y(()=>{Object.assign(R.current,L({groupId:I}))});let Q=X((e,t)=>{let{interactionState:a,mountedGroups:n}=g;for(let r of n.keys())if(r.id===e){let e=n.get(r);if(e){let n=!1;return"active"===a.state&&(n=a.hitRegions.some(e=>e.group===r)),{flexGrow:e.layout[t]??1,pointerEvents:n?"none":void 0}}}return{flexGrow:l?.[t]??1}}),ee=(0,n.useMemo)(()=>({getPanelStyles:Q,id:I,orientation:S,registerPanel:e=>{let t=O.current;return t.panels=o(S,[...t.panels,e]),A(),()=>{t.panels=t.panels.filter(t=>t!==e),A()}},registerSeparator:e=>{let t=O.current;return t.separators=o(S,[...t.separators,e]),A(),()=>{t.separators=t.separators.filter(t=>t!==e),A()}}}),[Q,I,A,S]),et=(k={defaultLayout:l,disableCursor:s},T=(0,n.useRef)({...k}),Y(()=>{for(let e in k)T.current[e]=k[e]},[k]),T.current),ea=(0,n.useRef)(null);return Y(()=>{let e,t,a,n,o,l,s,u,p,m,b,x,w=G.current;if(null===w)return;let L=O.current,P={defaultLayout:et.defaultLayout,disableCursor:!!et.disableCursor,disabled:!!d,element:w,id:I,inMemoryLastExpandedPanelSizes:O.current.lastExpandedPanelSizes,inMemoryLayouts:O.current.layouts,orientation:S,panels:L.panels,separators:L.separators};ea.current=P;let k=(e=!0,r(P.element.ownerDocument.defaultView,"Cannot register an unmounted Group"),t=P.element.ownerDocument.defaultView.ResizeObserver,a=new Set,n=new Set,(o=new t(t=>{for(let a of t){let{borderBoxSize:t,target:n}=a;if(n===P.element){if(e){if(0===i({group:P}))return;y(e=>{let t=e.mountedGroups.get(P);if(t){let a=h(P),n=t.defaultLayoutDeferred?q(a):t.layout,r=C({layout:n,panelConstraints:a});return!t.defaultLayoutDeferred&&z(n,r)&&function(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(let a in e)if(e[a]!==t[a])return!1;return!0}(t.derivedPanelConstraints,a)?e:{mountedGroups:new Map(e.mountedGroups).set(P,{defaultLayoutDeferred:!1,derivedPanelConstraints:a,layout:r,separatorToPanels:t.separatorToPanels})}}return e})}}else!function(e,t,a){if(!a[0])return;let n=e.panels.find(e=>e.element===t);if(!n||!n.onResize)return;let r=i({group:e}),o="horizontal"===e.orientation?n.element.offsetWidth:n.element.offsetHeight,l=n.mutableValues.prevSize,s={asPercentage:f(o/r*100),inPixels:o};n.mutableValues.prevSize=s,n.onResize(s,n.id,l)}(P,n,t)}})).observe(P.element),P.panels.forEach(e=>{r(!a.has(e.id),`Panel ids must be unique; id "${e.id}" was used more than once`),a.add(e.id),e.onResize&&o.observe(e.element)}),l=i({group:P}),s=h(P),u=P.panels.map(({id:e})=>e).join(","),(p=P.defaultLayout)&&(function(e,t){let a=e.map(e=>e.id),n=Object.keys(t);if(a.length!==n.length)return!1;for(let e of a)if(!n.includes(e))return!1;return!0}(P.panels,p)||(p=void 0)),m=C({layout:P.inMemoryLayouts[u]??p??q(s),panelConstraints:s}),b=c(P),x=P.element.ownerDocument,y(e=>{let t=new Map;return B.set(x,(B.get(x)??0)+1),b.forEach(e=>{e.separator&&t.set(e.separator,e.panels)}),{mountedGroups:new Map(e.mountedGroups).set(P,{defaultLayoutDeferred:0===l,derivedPanelConstraints:s,layout:m,separatorToPanels:t})}}),P.separators.forEach(e=>{r(!n.has(e.id),`Separator ids must be unique; id "${e.id}" was used more than once`),n.add(e.id),e.element.addEventListener("keydown",E)}),1===B.get(x)&&(x.addEventListener("pointerdown",D,!0),x.addEventListener("pointerleave",F),x.addEventListener("pointermove",W),x.addEventListener("pointerup",U,!0)),function(){e=!1,B.set(x,Math.max(0,(B.get(x)??0)-1)),y(e=>{let t=new Map(e.mountedGroups);return t.delete(P),{mountedGroups:t}}),P.separators.forEach(e=>{e.element.removeEventListener("keydown",E)}),B.get(x)||(x.removeEventListener("pointerdown",D,!0),x.removeEventListener("pointerleave",F),x.removeEventListener("pointermove",W),x.removeEventListener("pointerup",U,!0)),o.disconnect()}),M=g.mountedGroups.get(P);if(M){let{defaultLayoutDeferred:e,derivedPanelConstraints:t,layout:a}=M;!e&&t.length>0&&($(a),_(a),L.panels.forEach(e=>{e.scheduleUpdate()}))}let R=v.addListener("interactionStateChange",()=>{L.panels.forEach(e=>{e.scheduleUpdate()})}),T=v.addListener("mountedGroupsChange",e=>{let t=e.get(P);if(t){let{defaultLayoutDeferred:e,derivedPanelConstraints:a,layout:n}=t;if(e||0===a.length)return;let{interactionState:r}=g,i="active"!==r.state;$(n),i&&_(n),L.panels.forEach(e=>{e.scheduleUpdate()})}});return()=>{ea.current=null,k(),R(),T()}},[d,I,_,$,S,N,et]),(0,n.useEffect)(()=>{let e=ea.current;e&&(e.defaultLayout=l,e.disableCursor=!!s)}),(0,a.jsx)(K.Provider,{value:ee,children:(0,a.jsx)("div",{...P,"aria-orientation":S,className:t,"data-group":!0,"data-testid":I,id:I,ref:Z,style:{height:"100%",width:"100%",overflow:"hidden",...w,display:"flex",flexDirection:"horizontal"===S?"row":"column",flexWrap:"nowrap"},children:e})})}function Q(){let e=(0,n.useContext)(K);return r(e,"Group Context not found; did you render a Panel or Separator outside of a Group?"),e}function ee({children:e,className:t,collapsedSize:r="0%",collapsible:o=!1,defaultSize:l,elementRef:s,id:d,maxSize:u="100%",minSize:c="0%",onResize:p,panelRef:h,style:v,...b}){let x=!!d,w=V(d),L=(0,n.useRef)(null),P=J(L,s),[,k]=H(),{getPanelStyles:E,id:M,registerPanel:T}=Q(),j=null!==p,$=X((e,t,a)=>{p?.(e,d,a)});Y(()=>{let e=L.current;if(null!==e)return T({element:e,id:w,idIsStable:x,mutableValues:{expandToSize:void 0,prevSize:void 0},onResize:j?$:void 0,panelConstraints:{collapsedSize:r,collapsible:o,defaultSize:l,maxSize:u,minSize:c},scheduleUpdate:k})},[r,o,l,k,j,w,x,u,c,$,T]),function(e,t){let{id:a}=Q(),r=(0,n.useRef)({collapse:R,expand:R,getSize:()=>({asPercentage:0,inPixels:0}),isCollapsed:()=>!1,resize:R});(0,n.useImperativeHandle)(t,()=>r.current,[]),Y(()=>{Object.assign(r.current,function({groupId:e,panelId:t}){let a=()=>{let{mountedGroups:t}=g;for(let[a,{defaultLayoutDeferred:n,derivedPanelConstraints:r,layout:i,separatorToPanels:o}]of t)if(a.id===e)return{defaultLayoutDeferred:n,derivedPanelConstraints:r,group:a,layout:i,separatorToPanels:o};throw Error(`Group ${e} not found`)},n=()=>{let e=a().derivedPanelConstraints.find(e=>e.panelId===t);if(void 0!==e)return e;throw Error(`Panel constraints not found for Panel ${t}`)},r=()=>{let e=a().group.panels.find(e=>e.id===t);if(void 0!==e)return e;throw Error(`Layout not found for Panel ${t}`)},o=()=>{let e=a().layout[t];if(void 0!==e)return e;throw Error(`Layout not found for Panel ${t}`)},l=e=>{let n=o();if(e===n)return;let{defaultLayoutDeferred:r,derivedPanelConstraints:i,group:l,layout:s,separatorToPanels:d}=a(),u=l.panels.findIndex(e=>e.id===t),c=u===l.panels.length-1,p=C({layout:S({delta:c?n-e:e-n,initialLayout:s,panelConstraints:i,pivotIndices:c?[u-1,u]:[u,u+1],prevLayout:s,trigger:"imperative-api"}),panelConstraints:i});z(s,p)||y(e=>({mountedGroups:new Map(e.mountedGroups).set(l,{defaultLayoutDeferred:r,derivedPanelConstraints:i,layout:p,separatorToPanels:d})}))};return{collapse:()=>{let{collapsible:e,collapsedSize:t}=n(),{mutableValues:a}=r(),i=o();e&&i!==t&&(a.expandToSize=i,l(t))},expand:()=>{let{collapsible:e,collapsedSize:t,minSize:a}=n(),{mutableValues:i}=r(),s=o();if(e&&s===t){let e=i.expandToSize??a;0===e&&(e=1),l(e)}},getSize:()=>{let{group:e}=a(),t=o(),{element:n}=r();return{asPercentage:t,inPixels:"horizontal"===e.orientation?n.offsetWidth:n.offsetHeight}},isCollapsed:()=>{let{collapsible:e,collapsedSize:t}=n(),a=o();return e&&m(t,a)},resize:e=>{if(o()!==e){let t;switch(typeof e){case"number":{let{group:n}=a();t=f(e/i({group:n})*100);break}case"string":t=parseFloat(e)}l(t)}}}}({groupId:a,panelId:e}))})}(w,h);let _=E(M,w);return(0,a.jsx)("div",{...b,"data-panel":!0,"data-testid":w,id:w,ref:P,style:{...et,flexBasis:0,flexShrink:1,overflow:"hidden",..._},children:(0,a.jsx)("div",{className:t,style:{width:"100%",height:"100%",...v},children:e})})}Z.displayName="Group",ee.displayName="Panel";let et={minHeight:0,maxHeight:"100%",height:"auto",minWidth:0,maxWidth:"100%",width:"auto",border:"none",borderWidth:0,padding:0,margin:0};function ea({children:e,className:t,elementRef:r,id:i,style:o,...l}){let s=V(i),[d,u]=(0,n.useState)({}),[c,p]=(0,n.useState)("inactive"),f=(0,n.useRef)(null),h=J(f,r),{id:m,orientation:g,registerSeparator:y}=Q();return Y(()=>{let e=f.current;if(null!==e){let t={element:e,id:s},a=y(t),n=v.addListener("interactionStateChange",e=>{p("inactive"!==e.state&&e.hitRegions.some(e=>e.separator===t)?e.state:"inactive")}),r=v.addListener("mountedGroupsChange",e=>{e.forEach(({derivedPanelConstraints:e,layout:a,separatorToPanels:n},r)=>{if(r.id===m){let i=n.get(t);if(i){let t=i[0],n=r.panels.indexOf(t);u(function({layout:e,panelConstraints:t,panelId:a,panelIndex:n}){let r,i,o=e[a],l=t.find(e=>e.panelId===a);if(l){let s=l.maxSize,d=i=l.collapsible?l.collapsedSize:l.minSize,u=[n,n+1];i=C({layout:S({delta:d-o,initialLayout:e,panelConstraints:t,pivotIndices:u,prevLayout:e,trigger:"keyboard"}),panelConstraints:t})[a],r=C({layout:S({delta:s-o,initialLayout:e,panelConstraints:t,pivotIndices:u,prevLayout:e,trigger:"keyboard"}),panelConstraints:t})[a]}return{valueControls:a,valueMax:r,valueMin:i,valueNow:o}}({layout:a,panelConstraints:e,panelId:t.id,panelIndex:n}))}}})});return()=>{n(),r(),a()}}},[m,s,y]),(0,a.jsx)("div",{...l,"aria-controls":d.valueControls,"aria-orientation":"horizontal"===g?"vertical":"horizontal","aria-valuemax":d.valueMax,"aria-valuemin":d.valueMin,"aria-valuenow":d.valueNow,children:e,className:t,"data-separator":c,"data-testid":s,id:s,ref:h,role:"separator",style:{flexBasis:"auto",...o,flexGrow:0,flexShrink:0},tabIndex:0})}ea.displayName="Separator",e.s(["Group",()=>Z,"Panel",()=>ee,"Separator",()=>ea])},21713,e=>{"use strict";var t=e.i(43476),a=e.i(71645),n=e.i(71921),r=e.i(69074),i=e.i(78583);function o({title:e,value:n,onChange:o,templateOptions:l,onLoadTemplate:s,placeholder:d="# YAML configuration..."}){let u=(0,a.useRef)(null),[c,p]=(0,a.useState)(!1),[f,h]=(0,a.useState)(null),m=(0,a.useCallback)(async e=>{let t=e.target.value;if(t){p(!0),h(null);try{await s(t)}catch(e){h(e instanceof Error?e.message:"Failed to load template")}finally{p(!1),e.target.value=""}}},[s]),g=(0,a.useCallback)(e=>{let t=e.target.files?.[0];if(!t)return;let a=new FileReader;a.onload=e=>{o(e.target?.result??"")},a.readAsText(t),e.target.value=""},[o]);return(0,t.jsxs)("div",{style:{width:"100%",height:"100%",display:"flex",flexDirection:"column",minWidth:0,minHeight:0,overflow:"hidden"},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0 1rem",height:"3rem",borderBottom:"1px solid #e5e7eb",flexShrink:0,minWidth:0,gap:"0.5rem"},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",minWidth:0},children:[(0,t.jsx)(i.FileText,{style:{height:"1rem",width:"1rem",color:"#6b7280",flexShrink:0}}),(0,t.jsx)("span",{style:{fontSize:"0.875rem",fontWeight:500},children:e}),c&&(0,t.jsx)("span",{style:{fontSize:"0.75rem",color:"#6b7280"},children:"Loading..."}),f&&(0,t.jsx)("span",{style:{fontSize:"0.75rem",color:"#dc2626",overflow:"hidden",textOverflow:"ellipsis"},children:f})]}),(0,t.jsxs)("div",{style:{display:"flex",gap:"0.5rem",flexShrink:0},children:[(0,t.jsxs)("select",{onChange:m,disabled:c||0===l.length,style:{height:"1.75rem",fontSize:"0.75rem",padding:"0 0.5rem",border:"1px solid #e5e7eb",borderRadius:"0.375rem",backgroundColor:"transparent",cursor:c||0===l.length?"not-allowed":"pointer",maxWidth:"12rem"},defaultValue:"",title:"Load from template",children:[(0,t.jsx)("option",{value:"",children:"Load template..."}),l.map(e=>(0,t.jsx)("option",{value:e,children:e},e))]}),(0,t.jsxs)("button",{type:"button",onClick:()=>u.current?.click(),style:{height:"1.75rem",fontSize:"0.75rem",padding:"0 0.5rem",border:"1px solid #e5e7eb",borderRadius:"0.375rem",backgroundColor:"transparent",cursor:"pointer",display:"flex",alignItems:"center"},children:[(0,t.jsx)(r.Upload,{style:{height:"0.75rem",width:"0.75rem",marginRight:"0.25rem"}}),"Load from file"]}),(0,t.jsx)("input",{ref:u,type:"file",accept:".yaml,.yml,.json",onChange:g,style:{display:"none"}})]})]}),(0,t.jsx)("div",{style:{flex:1,overflow:"hidden",position:"relative",minWidth:0,minHeight:0},children:(0,t.jsx)("textarea",{value:n,onChange:e=>o(e.target.value),style:{width:"100%",height:"100%",padding:"1rem",fontFamily:"monospace",fontSize:"0.875rem",border:"none",outline:"none",resize:"none",backgroundColor:"transparent",color:"inherit",boxSizing:"border-box"},placeholder:d,spellCheck:!1})})]})}var l=e.i(9165);function s(){let[e,r]=(0,a.useState)(""),[i,s]=(0,a.useState)(""),[d,u]=(0,a.useState)(""),[c,p]=(0,a.useState)([]),[f,h]=(0,a.useState)(null);(0,a.useEffect)(()=>{let e=!1;return l.api.templates.listEtlTemplates().then(t=>{!e&&t.templates&&(p(t.templates),h(null))}).catch(t=>{e||(p([]),h(t instanceof Error?t.message:"Failed to load template list"))}),()=>{e=!0}},[]);let m=c.filter(e=>e.startsWith("extract_")&&(e.endsWith(".yaml")||e.endsWith(".yml"))),g=c.filter(e=>e.startsWith("transform_")&&(e.endsWith(".yaml")||e.endsWith(".yml"))),v=c.filter(e=>e.startsWith("load_")&&(e.endsWith(".yaml")||e.endsWith(".yml"))),y=(0,a.useCallback)(async e=>{r(await l.api.templates.downloadEtlTemplate(e))},[]),b=(0,a.useCallback)(async e=>{s(await l.api.templates.downloadEtlTemplate(e))},[]),x=(0,a.useCallback)(async e=>{u(await l.api.templates.downloadEtlTemplate(e))},[]);return(0,t.jsxs)("div",{className:"flex flex-col h-full bg-background",children:[f&&0===c.length&&(0,t.jsxs)("div",{className:"border-b border-amber-200 bg-amber-50 dark:bg-amber-950/20 dark:border-amber-800 px-4 py-1.5 text-sm text-amber-800 dark:text-amber-200 flex-shrink-0",role:"status",children:["Templates could not be loaded (",f,"). You can still type or paste YAML, or load from a local file."]}),(0,t.jsxs)(n.Group,{orientation:"horizontal",className:"flex-1 min-h-0",children:[(0,t.jsx)(n.Panel,{defaultSize:33,minSize:15,children:(0,t.jsx)("div",{className:"flex flex-col h-full",children:(0,t.jsx)(o,{title:"Extract",value:e,onChange:r,templateOptions:m,onLoadTemplate:y,placeholder:"# extract.yaml — source_type, base_url, api_endpoint, file_path, etc."})})}),(0,t.jsx)(n.Separator,{className:"w-1 bg-gray-300 hover:bg-blue-500 transition-colors"}),(0,t.jsx)(n.Panel,{defaultSize:34,minSize:15,children:(0,t.jsx)("div",{className:"flex flex-col h-full",children:(0,t.jsx)(o,{title:"Transform",value:i,onChange:s,templateOptions:g,onLoadTemplate:b,placeholder:"# transform.yaml — transform, jsonata, custom_function"})})}),(0,t.jsx)(n.Separator,{className:"w-1 bg-gray-300 hover:bg-blue-500 transition-colors"}),(0,t.jsx)(n.Panel,{defaultSize:33,minSize:15,children:(0,t.jsx)("div",{className:"flex flex-col h-full",children:(0,t.jsx)(o,{title:"Load",value:d,onChange:u,templateOptions:v,onLoadTemplate:x,placeholder:"# load.yaml — destination_type, target_table, file_path, storage, etc."})})})]})]})}function d(){return(0,t.jsxs)("div",{className:"min-h-screen bg-background",children:[(0,t.jsx)("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pt-6 pb-1",children:(0,t.jsxs)("div",{className:"mb-1",children:[(0,t.jsx)("h1",{className:"text-2xl font-bold text-foreground mb-1",children:"ETL"}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"Specify or load extraction, transformation, and load configuration (extract.yaml, transform.yaml, load.yaml)"})]})}),(0,t.jsx)("div",{className:"w-full px-2",style:{height:"calc(100vh - 6rem)"},children:(0,t.jsx)(s,{})})]})}e.s(["default",()=>d],21713)}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,55824,16370,e=>{"use strict";var t=e.i(43476);function a({title:e,description:a,actions:s}){return(0,t.jsxs)("div",{className:"mb-4 flex justify-between items-center",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{className:"text-2xl font-bold text-foreground mb-1",children:e}),a&&(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:a})]}),s&&(0,t.jsx)("div",{className:"flex gap-2",children:s})]})}e.s(["PageHeader",()=>a],16370),e.s([],55824)},61246,e=>{"use strict";var t=e.i(43476),a=e.i(75157);function s({className:e,...s}){return(0,t.jsx)("div",{className:(0,a.cn)("animate-pulse rounded-md bg-muted",e),...s})}function i({size:e="md",className:s}){return(0,t.jsx)("div",{className:(0,a.cn)("flex items-center justify-center",s),children:(0,t.jsx)("div",{className:(0,a.cn)("animate-spin rounded-full border-2 border-muted border-t-primary",{sm:"h-4 w-4",md:"h-8 w-8",lg:"h-12 w-12"}[e])})})}function r({message:e="Loading..."}){return(0,t.jsx)("div",{className:"min-h-screen flex items-center justify-center bg-background",children:(0,t.jsxs)("div",{className:"text-center",children:[(0,t.jsx)(i,{size:"lg",className:"mb-4"}),(0,t.jsx)("p",{className:"text-muted-foreground",children:e})]})})}function l(){return(0,t.jsxs)("div",{className:"rounded-lg border bg-card p-6 space-y-4",children:[(0,t.jsx)(s,{className:"h-6 w-3/4"}),(0,t.jsx)(s,{className:"h-4 w-full"}),(0,t.jsx)(s,{className:"h-4 w-5/6"}),(0,t.jsxs)("div",{className:"flex gap-2 mt-4",children:[(0,t.jsx)(s,{className:"h-9 w-20"}),(0,t.jsx)(s,{className:"h-9 w-20"})]})]})}function n({rows:e=5}){return(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsx)(s,{className:"h-10 w-full"}),Array.from({length:e}).map((e,a)=>(0,t.jsx)(s,{className:"h-12 w-full"},a))]})}e.s(["CardSkeleton",()=>l,"PageLoading",()=>r,"TableSkeleton",()=>n,"default",()=>i],61246)},43668,e=>{"use strict";var t=e.i(47167);let a="pycharter_settings",s={apiServer:{url:t.default.env.NEXT_PUBLIC_API_URL||"http://localhost:8000"},database:{enabled:!1},dlq:{enabled:!1}};function i(){try{let e=localStorage.getItem(a);if(e){let t=JSON.parse(e);return{...s,...t,apiServer:{...s.apiServer,...t.apiServer},database:{...s.database,...t.database},dlq:{...s.dlq,...t.dlq}}}}catch(e){console.error("Failed to load settings:",e)}return s}function r(e){try{localStorage.setItem(a,JSON.stringify(e))}catch(e){throw console.error("Failed to save settings:",e),e}}function l(){return i().apiServer.url||s.apiServer.url}e.s(["getApiBaseUrl",()=>l,"getSettings",()=>i,"saveSettings",()=>r])},9165,e=>{"use strict";var t=e.i(43668);class a extends Error{status;response;constructor(e,t,a){super(e),this.status=t,this.response=a,this.name="ApiError"}}async function s(e,s){let i=`${(0,t.getApiBaseUrl)()}${e}`;try{let e=await fetch(i,{...s,headers:{"Content-Type":"application/json",...s?.headers}});if(!e.ok){let t;try{t=await e.json()}catch{t={detail:e.statusText}}let s=t.detail||`API request failed: ${e.statusText}`;throw 422===e.status&&t.details&&Array.isArray(t.details)&&(s=t.details.map(e=>{let t=e.loc?.join(".")||e.field||"field",a=e.msg||e.message||"validation error";return`${t}: ${a}`}).join("; ")||s),new a(s,e.status,t)}let t=e.headers.get("content-type");if(t&&t.includes("application/json"))return e.json();return e.text()}catch(s){if(s instanceof TypeError&&"Failed to fetch"===s.message){let s=(0,t.getApiBaseUrl)();throw new a(`Unable to connect to API server at ${s}. Please ensure the API server is running and the URL is correct.`,0,{originalError:"NetworkError",apiUrl:s,endpoint:e,suggestion:"Check your API server settings in the Settings page"})}throw s}}async function i(e){return s(e,{method:"GET"})}async function r(e,t){return s(e,{method:"POST",body:t?JSON.stringify(t):void 0})}async function l(e,t){return s(e,{method:"PUT",body:t?JSON.stringify(t):void 0})}async function n(e,s){let i=`${(0,t.getApiBaseUrl)()}${e}`,r=await fetch(i,{method:"POST",body:s});if(!r.ok){let e;try{e=await r.json()}catch{e={detail:r.statusText}}throw new a(e.detail||`API request failed: ${r.statusText}`,r.status,e)}let l=r.headers.get("content-type");return l&&l.includes("application/json")?r.json():r.text()}async function d(e){let s=`${(0,t.getApiBaseUrl)()}${e}`,i=await fetch(s,{method:"GET"});if(!i.ok){let e;try{e=await i.json()}catch{e={detail:i.statusText}}throw new a(e.detail||`API request failed: ${i.statusText}`,i.status,e)}return i.blob()}e.s(["ApiError",()=>a,"api",0,{contracts:{list:()=>i("/api/v1/contracts"),get:e=>i(`/api/v1/contracts/${e}`),parse:e=>r("/api/v1/contracts/parse",{contract:e}),parseFile:(e,t)=>{let a=new FormData;return a.append("file",e),void 0!==t&&a.append("validate",String(t)),n("/api/v1/contracts/parse/upload",a)},build:e=>r("/api/v1/contracts/build",e),buildFromId:(e,t)=>{let a=new URLSearchParams;t?.include_metadata!==void 0&&a.append("include_metadata",String(t.include_metadata)),t?.include_ownership!==void 0&&a.append("include_ownership",String(t.include_ownership)),t?.include_governance!==void 0&&a.append("include_governance",String(t.include_governance));let s=a.toString();return r(`/api/v1/contracts/${e}/build${s?`?${s}`:""}`,{})},createFromArtifacts:e=>r("/api/v1/contracts/create-from-artifacts",e),createMixed:e=>r("/api/v1/contracts/create-mixed",e),update:(e,t)=>l(`/api/v1/contracts/${e}`,t)},metadata:{listSchemas:()=>i("/api/v1/metadata/schemas"),getSchema:(e,t)=>{let a=t?`?version=${t}`:"";return i(`/api/v1/metadata/schemas/${e}${a}`)},getCompleteSchema:(e,t)=>{let a=t?`?version=${t}`:"";return i(`/api/v1/metadata/schemas/${e}/complete${a}`)},storeSchema:e=>r("/api/v1/metadata/schemas",e),getMetadata:(e,t)=>{let a=t?`?version=${t}`:"";return i(`/api/v1/metadata/metadata/${e}${a}`)},storeMetadata:e=>r("/api/v1/metadata/metadata",e),getCoercionRules:(e,t)=>{let a=t?`?version=${t}`:"";return i(`/api/v1/metadata/coercion-rules/${e}${a}`)},storeCoercionRules:e=>r("/api/v1/metadata/coercion-rules",e),getValidationRules:(e,t)=>{let a=t?`?version=${t}`:"";return i(`/api/v1/metadata/validation-rules/${e}${a}`)},storeValidationRules:e=>r("/api/v1/metadata/validation-rules",e),getEntityList:e=>i(`/api/v1/metadata/${e}`),createEntity:(e,t)=>r(`/api/v1/metadata/${e}`,t),updateEntity:(e,t,a)=>l(`/api/v1/metadata/${e}/${t}`,a),listArtifacts:()=>i("/api/v1/metadata/artifacts")},validation:{validate:e=>r("/api/v1/validation/validate",e),validateBatch:e=>r("/api/v1/validation/validate-batch",e)},schemas:{generate:e=>r("/api/v1/schemas/generate",e),convert:e=>r("/api/v1/schemas/convert",e)},quality:{listMetrics:e=>{let t=new URLSearchParams;e?.schema_id&&t.append("schema_id",e.schema_id),e?.limit&&t.append("limit",e.limit.toString()),e?.offset&&t.append("offset",e.offset.toString());let a=t.toString();return i(`/api/v1/quality/metrics${a?`?${a}`:""}`)},getMetric:e=>i(`/api/v1/quality/metrics/${e}`),getReport:(e,t)=>{let a=new URLSearchParams;t?.data_source&&a.append("data_source",t.data_source),t?.limit&&a.append("limit",t.limit.toString());let s=a.toString();return i(`/api/v1/quality/reports/${e}${s?`?${s}`:""}`)},check:e=>r("/api/v1/quality/check",e),checkUpload:(e,t)=>{let a=new FormData;return a.append("file",e),t.schema_id&&a.append("schema_id",t.schema_id),t.contract&&a.append("contract",t.contract),void 0!==t.record_violations&&a.append("record_violations",String(t.record_violations)),void 0!==t.calculate_metrics&&a.append("calculate_metrics",String(t.calculate_metrics)),void 0!==t.check_thresholds&&a.append("check_thresholds",String(t.check_thresholds)),t.thresholds&&a.append("thresholds",t.thresholds),void 0!==t.include_field_metrics&&a.append("include_field_metrics",String(t.include_field_metrics)),void 0!==t.sample_size&&a.append("sample_size",String(t.sample_size)),t.data_source&&a.append("data_source",t.data_source),t.data_version&&a.append("data_version",t.data_version),n("/api/v1/quality/check/upload",a)},queryViolations:e=>r("/api/v1/quality/violations",e)},templates:{downloadSchema:()=>d("/api/v1/templates/schema"),downloadContractArtifacts:()=>d("/api/v1/templates/contract-artifacts"),listEtlTemplates:()=>s("/api/v1/templates/etl"),downloadEtlTemplate:async e=>{let s=(0,t.getApiBaseUrl)().replace(/\/$/,""),i=await fetch(`${s}/api/v1/templates/etl/${encodeURIComponent(e)}`);if(!i.ok)throw new a(await i.text()||i.statusText,i.status);return i.text()}},settings:{testDatabase:e=>r("/api/v1/settings/test-database",e),testDlq:e=>r("/api/v1/settings/test-dlq",e),getDlqStats:e=>r("/api/v1/settings/dlq-stats",e)}}])},63209,e=>{"use strict";let t=(0,e.i(75254).default)("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);e.s(["AlertCircle",()=>t],63209)},95113,e=>{"use strict";var t=e.i(43476),a=e.i(63209),s=e.i(9165),i=e.i(75157);function r({error:e,title:r="Error",className:l}){if(!e)return null;let n=e instanceof s.ApiError,d=n?e.message:e.message||"An unexpected error occurred";return(0,t.jsx)("div",{className:(0,i.cn)("rounded-lg border border-destructive/50 bg-destructive/10 p-4",l),children:(0,t.jsxs)("div",{className:"flex",children:[(0,t.jsx)(a.AlertCircle,{className:"h-5 w-5 text-destructive flex-shrink-0 mt-0.5"}),(0,t.jsxs)("div",{className:"ml-3",children:[(0,t.jsx)("h3",{className:"text-sm font-medium text-destructive",children:r}),(0,t.jsxs)("div",{className:"mt-2 text-sm text-destructive/90",children:[(0,t.jsx)("p",{children:d}),n&&e.status&&(0,t.jsxs)("p",{className:"mt-1 text-xs opacity-75",children:["Status: ",e.status]})]})]})]})})}e.s(["default",()=>r])},88511,e=>{"use strict";let t=(0,e.i(75254).default)("SquarePen",[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]]);e.s(["Edit",()=>t],88511)},56909,e=>{"use strict";let t=(0,e.i(75254).default)("Save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]);e.s(["Save",()=>t],56909)},37727,7233,e=>{"use strict";var t=e.i(75254);let a=(0,t.default)("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);e.s(["X",()=>a],37727);let s=(0,t.default)("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);e.s(["Plus",()=>s],7233)},66597,e=>{"use strict";var t=e.i(43476),a=e.i(71645),s=e.i(15288),i=e.i(19455),r=e.i(61246),l=e.i(95113);e.i(55824);var n=e.i(16370),d=e.i(37727),c=e.i(56909),o=e.i(9165);function m({isOpen:e,entityType:s,entityData:n,onClose:m,onSuccess:p}){var u;let[h,y]=(0,a.useState)({}),[x,v]=(0,a.useState)(!1),[g,f]=(0,a.useState)(null);(0,a.useEffect)(()=>{e&&(n?y(n):y(b(s)),f(null))},[e,n,s]);let b=e=>({owners:{id:"",name:"",email:"",team:""},domains:{name:"",description:""},systems:{name:"",app_id:"",description:""},environments:{name:"",description:"",environment_type:"",is_production:!1},storage_locations:{name:"",location_type:"",database:"",table_name:"",schema_name:""},tags:{name:"",description:"",category:"",color:""}})[e]||{},j=(e,t)=>{y(a=>({...a,[e]:t}))},k=async e=>{e.preventDefault(),v(!0),f(null);try{if(n){let e=n.id;await o.api.metadata.updateEntity(s,e,h)}else await o.api.metadata.createEntity(s,h);p(),m()}catch(e){f(e.message||"Failed to save entity")}finally{v(!1)}};if(!e)return null;let N={owners:[{key:"id",label:"ID",type:"text",required:!0},{key:"name",label:"Name",type:"text"},{key:"email",label:"Email",type:"email"},{key:"team",label:"Team",type:"text"}],domains:[{key:"name",label:"Name",type:"text",required:!0},{key:"description",label:"Description",type:"textarea"}],systems:[{key:"name",label:"Name",type:"text",required:!0},{key:"app_id",label:"App ID",type:"text"},{key:"description",label:"Description",type:"textarea"}],environments:[{key:"name",label:"Name",type:"text",required:!0},{key:"description",label:"Description",type:"textarea"},{key:"environment_type",label:"Type",type:"text"},{key:"is_production",label:"Is Production",type:"checkbox"}],storage_locations:[{key:"name",label:"Name",type:"text",required:!0},{key:"location_type",label:"Location Type",type:"text"},{key:"database",label:"Database",type:"text"},{key:"table_name",label:"Table Name",type:"text"},{key:"schema_name",label:"Schema Name",type:"text"},{key:"cluster",label:"Cluster",type:"text"}],tags:[{key:"name",label:"Name",type:"text",required:!0},{key:"description",label:"Description",type:"textarea"},{key:"category",label:"Category",type:"text"},{key:"color",label:"Color (Hex)",type:"text"}]}[s]||[],w=!!n;return(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black/50",children:(0,t.jsxs)("div",{className:"bg-background border rounded-lg shadow-lg w-full max-w-2xl max-h-[90vh] overflow-hidden flex flex-col",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between p-4 border-b",children:[(0,t.jsxs)("h2",{className:"text-xl font-semibold",children:[w?"Edit":"Create"," ",{owners:"Owner",domains:"Domain",systems:"System",environments:"Environment",storage_locations:"Storage Location",tags:"Tag"}[u=s]||u]}),(0,t.jsx)("button",{onClick:m,className:"p-1 rounded-md hover:bg-muted","aria-label":"Close",children:(0,t.jsx)(d.X,{className:"h-5 w-5"})})]}),(0,t.jsxs)("form",{onSubmit:k,className:"flex-1 overflow-y-auto p-4",children:[g&&(0,t.jsx)("div",{className:"mb-4",children:(0,t.jsx)(l.default,{error:Error(g),title:"Error saving entity"})}),(0,t.jsx)("div",{className:"space-y-4",children:N.map(e=>w&&"id"===e.key&&"owners"===s?(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-sm font-medium mb-1",children:e.label}),(0,t.jsx)("input",{type:"text",value:h[e.key]||"",disabled:!0,className:"w-full px-3 py-2 border rounded-md bg-muted"})]},e.key):"textarea"===e.type?(0,t.jsxs)("div",{children:[(0,t.jsxs)("label",{className:"block text-sm font-medium mb-1",children:[e.label,e.required&&(0,t.jsx)("span",{className:"text-red-500 ml-1",children:"*"})]}),(0,t.jsx)("textarea",{value:h[e.key]||"",onChange:t=>j(e.key,t.target.value),required:e.required,rows:3,className:"w-full px-3 py-2 border rounded-md"})]},e.key):"checkbox"===e.type?(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("input",{type:"checkbox",checked:h[e.key]||!1,onChange:t=>j(e.key,t.target.checked),className:"h-4 w-4"}),(0,t.jsxs)("label",{className:"text-sm font-medium",children:[e.label,e.required&&(0,t.jsx)("span",{className:"text-red-500 ml-1",children:"*"})]})]},e.key):(0,t.jsxs)("div",{children:[(0,t.jsxs)("label",{className:"block text-sm font-medium mb-1",children:[e.label,e.required&&(0,t.jsx)("span",{className:"text-red-500 ml-1",children:"*"})]}),(0,t.jsx)("input",{type:e.type,value:h[e.key]||"",onChange:t=>j(e.key,t.target.value),required:e.required,className:"w-full px-3 py-2 border rounded-md"})]},e.key))}),(0,t.jsxs)("div",{className:"flex justify-end gap-2 mt-6 pt-4 border-t",children:[(0,t.jsx)(i.Button,{type:"button",variant:"outline",onClick:m,disabled:x,children:"Cancel"}),(0,t.jsx)(i.Button,{type:"submit",disabled:x,children:x?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"mr-2",children:(0,t.jsx)(r.default,{size:"sm"})}),"Saving..."]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(c.Save,{className:"mr-2 h-4 w-4"}),w?"Update":"Create"]})})]})]})]})})}var p=e.i(75254);let u=(0,p.default)("Users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["path",{d:"M16 3.13a4 4 0 0 1 0 7.75",key:"1da9ce"}]]),h=(0,p.default)("Building2",[["path",{d:"M6 22V4a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v18Z",key:"1b4qmf"}],["path",{d:"M6 12H4a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h2",key:"i71pzd"}],["path",{d:"M18 9h2a2 2 0 0 1 2 2v9a2 2 0 0 1-2 2h-2",key:"10jefs"}],["path",{d:"M10 6h4",key:"1itunk"}],["path",{d:"M10 10h4",key:"tcdvrf"}],["path",{d:"M10 14h4",key:"kelpxr"}],["path",{d:"M10 18h4",key:"1ulq68"}]]),y=(0,p.default)("Globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]),x=(0,p.default)("Server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]),v=(0,p.default)("Tag",[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]]),g=(0,p.default)("HardDrive",[["line",{x1:"22",x2:"2",y1:"12",y2:"12",key:"1y58io"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}],["line",{x1:"6",x2:"6.01",y1:"16",y2:"16",key:"sgf278"}],["line",{x1:"10",x2:"10.01",y1:"16",y2:"16",key:"1l4acy"}]]);var f=e.i(88511),b=e.i(7233),j=e.i(75157);let k=[{id:"owners",name:"Owners",icon:u},{id:"domains",name:"Domains",icon:y},{id:"systems",name:"Systems",icon:x},{id:"environments",name:"Environments",icon:h},{id:"storage_locations",name:"Storage Locations",icon:g},{id:"tags",name:"Tags",icon:v}];function N(){let[e,d]=(0,a.useState)(null),[c,p]=(0,a.useState)([]),[u,h]=(0,a.useState)(!1),[y,x]=(0,a.useState)(null),[v,g]=(0,a.useState)(null),[N,w]=(0,a.useState)(!1),_=async e=>{h(!0),x(null);try{let t=await o.api.metadata.getEntityList(e);p(Array.isArray(t)?t:[])}catch(e){404===e.status?(p([]),x(null)):(x(e.message||"Failed to load data"),p([]))}finally{h(!1)}};(0,a.useEffect)(()=>{e?_(e):p([])},[e]);let S=(e,t)=>{if(t.length>0){let a=Object.keys(t[0]),s={owners:["id","name","email","team"],domains:["id","name","description"],systems:["id","name","app_id","description"],environments:["id","name","environment_type","is_production"],storage_locations:["id","name","location_type","database","table_name","system_name","environment_name"],tags:["id","name","category","color","description"]}[e]||[],i=a.filter(e=>!s.includes(e)&&"created_at"!==e&&"updated_at"!==e&&"additional_metadata"!==e);return[...s.filter(e=>a.includes(e)),...i]}return({owners:["id","name","email","team"],domains:["id","name","description"],systems:["id","name","app_id","description"],environments:["id","name","environment_type","is_production"],storage_locations:["id","name","location_type","database","table_name"],tags:["id","name","category","color"]})[e]||[]};return(0,t.jsx)("div",{className:"min-h-screen bg-background",children:(0,t.jsxs)("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6",children:[(0,t.jsx)(n.PageHeader,{title:"Metadata",description:"Manage metadata entities and relationships"}),(0,t.jsx)("div",{className:"flex flex-wrap gap-2 mb-6",children:k.map(a=>{let s=a.icon,i=e===a.id;return(0,t.jsxs)("button",{onClick:()=>{var t;e===(t=a.id)?d(null):d(t)},className:(0,j.cn)("flex items-center gap-2 px-4 py-2 rounded-md border transition-colors","hover:bg-muted focus:outline-none focus:ring-2 focus:ring-primary focus:ring-offset-2",i?"bg-primary text-primary-foreground border-primary":"bg-background text-foreground border-border"),children:[(0,t.jsx)(s,{className:"h-4 w-4"}),(0,t.jsx)("span",{className:"text-sm font-medium",children:a.name})]},a.id)})}),e&&(0,t.jsxs)(s.Card,{children:[(0,t.jsx)(s.CardHeader,{children:(0,t.jsxs)("div",{className:"flex justify-between items-center",children:[(0,t.jsxs)(s.CardTitle,{className:"text-lg",children:[k.find(t=>t.id===e)?.name," Data"]}),(0,t.jsxs)(i.Button,{onClick:()=>{g(null),w(!0)},size:"sm",children:[(0,t.jsx)(b.Plus,{className:"h-4 w-4 mr-2"}),"Create"]})]})}),(0,t.jsxs)(s.CardContent,{children:[u&&(0,t.jsx)(r.PageLoading,{message:"Loading data..."}),y&&(0,t.jsx)("div",{className:"mb-4",children:(0,t.jsx)(l.default,{error:Error(y),title:"Failed to load data"})}),!u&&!y&&0===c.length&&(0,t.jsxs)("div",{className:"text-center py-8 text-muted-foreground",children:[(0,t.jsxs)("p",{children:["No data available for ",k.find(t=>t.id===e)?.name,"."]}),(0,t.jsx)("p",{className:"text-xs mt-2",children:"API endpoint may not be implemented yet."})]}),!u&&!y&&c.length>0&&(0,t.jsx)("div",{className:"overflow-x-auto",children:(0,t.jsxs)("table",{className:"w-full border-collapse",children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{className:"border-b bg-muted/50",children:[S(e,c).map(e=>(0,t.jsx)("th",{className:"px-4 py-2 text-left text-sm font-semibold text-foreground",children:e.split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")},e)),(0,t.jsx)("th",{className:"px-4 py-2 text-left text-sm font-semibold text-foreground w-16",children:"Actions"})]})}),(0,t.jsx)("tbody",{children:c.map((a,s)=>(0,t.jsxs)("tr",{className:"hover:bg-muted/50",children:[S(e,c).map(e=>{let s=a[e];return(0,t.jsx)("td",{className:"px-4 py-2 text-sm border-b",children:null==s?"-":"boolean"==typeof s?s?"Yes":"No":"object"==typeof s?JSON.stringify(s):String(s)},e)}),(0,t.jsx)("td",{className:"px-4 py-2 text-sm border-b",children:(0,t.jsx)(i.Button,{variant:"ghost",size:"sm",onClick:()=>{g(a)},className:"h-8 w-8 p-0",title:"Edit",children:(0,t.jsx)(f.Edit,{className:"h-4 w-4"})})})]},s))})]})})]})]}),(v||N)&&e&&(0,t.jsx)(m,{isOpen:!0,entityType:e,entityData:v,onClose:()=>{g(null),w(!1)},onSuccess:()=>{e&&_(e)}})]})})}e.s(["default",()=>N],66597)}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,43668,e=>{"use strict";var a=e.i(47167);let t="pycharter_settings",s={apiServer:{url:a.default.env.NEXT_PUBLIC_API_URL||"http://localhost:8000"},database:{enabled:!1},dlq:{enabled:!1}};function r(){try{let e=localStorage.getItem(t);if(e){let a=JSON.parse(e);return{...s,...a,apiServer:{...s.apiServer,...a.apiServer},database:{...s.database,...a.database},dlq:{...s.dlq,...a.dlq}}}}catch(e){console.error("Failed to load settings:",e)}return s}function i(e){try{localStorage.setItem(t,JSON.stringify(e))}catch(e){throw console.error("Failed to save settings:",e),e}}function l(){return r().apiServer.url||s.apiServer.url}e.s(["getApiBaseUrl",()=>l,"getSettings",()=>r,"saveSettings",()=>i])},9165,e=>{"use strict";var a=e.i(43668);class t extends Error{status;response;constructor(e,a,t){super(e),this.status=a,this.response=t,this.name="ApiError"}}async function s(e,s){let r=`${(0,a.getApiBaseUrl)()}${e}`;try{let e=await fetch(r,{...s,headers:{"Content-Type":"application/json",...s?.headers}});if(!e.ok){let a;try{a=await e.json()}catch{a={detail:e.statusText}}let s=a.detail||`API request failed: ${e.statusText}`;throw 422===e.status&&a.details&&Array.isArray(a.details)&&(s=a.details.map(e=>{let a=e.loc?.join(".")||e.field||"field",t=e.msg||e.message||"validation error";return`${a}: ${t}`}).join("; ")||s),new t(s,e.status,a)}let a=e.headers.get("content-type");if(a&&a.includes("application/json"))return e.json();return e.text()}catch(s){if(s instanceof TypeError&&"Failed to fetch"===s.message){let s=(0,a.getApiBaseUrl)();throw new t(`Unable to connect to API server at ${s}. Please ensure the API server is running and the URL is correct.`,0,{originalError:"NetworkError",apiUrl:s,endpoint:e,suggestion:"Check your API server settings in the Settings page"})}throw s}}async function r(e){return s(e,{method:"GET"})}async function i(e,a){return s(e,{method:"POST",body:a?JSON.stringify(a):void 0})}async function l(e,a){return s(e,{method:"PUT",body:a?JSON.stringify(a):void 0})}async function n(e,s){let r=`${(0,a.getApiBaseUrl)()}${e}`,i=await fetch(r,{method:"POST",body:s});if(!i.ok){let e;try{e=await i.json()}catch{e={detail:i.statusText}}throw new t(e.detail||`API request failed: ${i.statusText}`,i.status,e)}let l=i.headers.get("content-type");return l&&l.includes("application/json")?i.json():i.text()}async function d(e){let s=`${(0,a.getApiBaseUrl)()}${e}`,r=await fetch(s,{method:"GET"});if(!r.ok){let e;try{e=await r.json()}catch{e={detail:r.statusText}}throw new t(e.detail||`API request failed: ${r.statusText}`,r.status,e)}return r.blob()}e.s(["ApiError",()=>t,"api",0,{contracts:{list:()=>r("/api/v1/contracts"),get:e=>r(`/api/v1/contracts/${e}`),parse:e=>i("/api/v1/contracts/parse",{contract:e}),parseFile:(e,a)=>{let t=new FormData;return t.append("file",e),void 0!==a&&t.append("validate",String(a)),n("/api/v1/contracts/parse/upload",t)},build:e=>i("/api/v1/contracts/build",e),buildFromId:(e,a)=>{let t=new URLSearchParams;a?.include_metadata!==void 0&&t.append("include_metadata",String(a.include_metadata)),a?.include_ownership!==void 0&&t.append("include_ownership",String(a.include_ownership)),a?.include_governance!==void 0&&t.append("include_governance",String(a.include_governance));let s=t.toString();return i(`/api/v1/contracts/${e}/build${s?`?${s}`:""}`,{})},createFromArtifacts:e=>i("/api/v1/contracts/create-from-artifacts",e),createMixed:e=>i("/api/v1/contracts/create-mixed",e),update:(e,a)=>l(`/api/v1/contracts/${e}`,a)},metadata:{listSchemas:()=>r("/api/v1/metadata/schemas"),getSchema:(e,a)=>{let t=a?`?version=${a}`:"";return r(`/api/v1/metadata/schemas/${e}${t}`)},getCompleteSchema:(e,a)=>{let t=a?`?version=${a}`:"";return r(`/api/v1/metadata/schemas/${e}/complete${t}`)},storeSchema:e=>i("/api/v1/metadata/schemas",e),getMetadata:(e,a)=>{let t=a?`?version=${a}`:"";return r(`/api/v1/metadata/metadata/${e}${t}`)},storeMetadata:e=>i("/api/v1/metadata/metadata",e),getCoercionRules:(e,a)=>{let t=a?`?version=${a}`:"";return r(`/api/v1/metadata/coercion-rules/${e}${t}`)},storeCoercionRules:e=>i("/api/v1/metadata/coercion-rules",e),getValidationRules:(e,a)=>{let t=a?`?version=${a}`:"";return r(`/api/v1/metadata/validation-rules/${e}${t}`)},storeValidationRules:e=>i("/api/v1/metadata/validation-rules",e),getEntityList:e=>r(`/api/v1/metadata/${e}`),createEntity:(e,a)=>i(`/api/v1/metadata/${e}`,a),updateEntity:(e,a,t)=>l(`/api/v1/metadata/${e}/${a}`,t),listArtifacts:()=>r("/api/v1/metadata/artifacts")},validation:{validate:e=>i("/api/v1/validation/validate",e),validateBatch:e=>i("/api/v1/validation/validate-batch",e)},schemas:{generate:e=>i("/api/v1/schemas/generate",e),convert:e=>i("/api/v1/schemas/convert",e)},quality:{listMetrics:e=>{let a=new URLSearchParams;e?.schema_id&&a.append("schema_id",e.schema_id),e?.limit&&a.append("limit",e.limit.toString()),e?.offset&&a.append("offset",e.offset.toString());let t=a.toString();return r(`/api/v1/quality/metrics${t?`?${t}`:""}`)},getMetric:e=>r(`/api/v1/quality/metrics/${e}`),getReport:(e,a)=>{let t=new URLSearchParams;a?.data_source&&t.append("data_source",a.data_source),a?.limit&&t.append("limit",a.limit.toString());let s=t.toString();return r(`/api/v1/quality/reports/${e}${s?`?${s}`:""}`)},check:e=>i("/api/v1/quality/check",e),checkUpload:(e,a)=>{let t=new FormData;return t.append("file",e),a.schema_id&&t.append("schema_id",a.schema_id),a.contract&&t.append("contract",a.contract),void 0!==a.record_violations&&t.append("record_violations",String(a.record_violations)),void 0!==a.calculate_metrics&&t.append("calculate_metrics",String(a.calculate_metrics)),void 0!==a.check_thresholds&&t.append("check_thresholds",String(a.check_thresholds)),a.thresholds&&t.append("thresholds",a.thresholds),void 0!==a.include_field_metrics&&t.append("include_field_metrics",String(a.include_field_metrics)),void 0!==a.sample_size&&t.append("sample_size",String(a.sample_size)),a.data_source&&t.append("data_source",a.data_source),a.data_version&&t.append("data_version",a.data_version),n("/api/v1/quality/check/upload",t)},queryViolations:e=>i("/api/v1/quality/violations",e)},templates:{downloadSchema:()=>d("/api/v1/templates/schema"),downloadContractArtifacts:()=>d("/api/v1/templates/contract-artifacts"),listEtlTemplates:()=>s("/api/v1/templates/etl"),downloadEtlTemplate:async e=>{let s=(0,a.getApiBaseUrl)().replace(/\/$/,""),r=await fetch(`${s}/api/v1/templates/etl/${encodeURIComponent(e)}`);if(!r.ok)throw new t(await r.text()||r.statusText,r.status);return r.text()}},settings:{testDatabase:e=>i("/api/v1/settings/test-database",e),testDlq:e=>i("/api/v1/settings/test-dlq",e),getDlqStats:e=>i("/api/v1/settings/dlq-stats",e)}}])},55824,16370,e=>{"use strict";var a=e.i(43476);function t({title:e,description:t,actions:s}){return(0,a.jsxs)("div",{className:"mb-4 flex justify-between items-center",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("h1",{className:"text-2xl font-bold text-foreground mb-1",children:e}),t&&(0,a.jsx)("p",{className:"text-sm text-muted-foreground",children:t})]}),s&&(0,a.jsx)("div",{className:"flex gap-2",children:s})]})}e.s(["PageHeader",()=>t],16370),e.s([],55824)},95468,e=>{"use strict";let a=(0,e.i(75254).default)("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);e.s(["CheckCircle2",()=>a],95468)},73884,e=>{"use strict";let a=(0,e.i(75254).default)("CircleX",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]]);e.s(["XCircle",()=>a],73884)},13399,e=>{"use strict";var a=e.i(43476),t=e.i(71645);e.i(55824);var s=e.i(16370),r=e.i(43668),i=e.i(9165),l=e.i(19455),n=e.i(75157);let d=t.forwardRef(({className:e,type:t,...s},r)=>(0,a.jsx)("input",{type:t,className:(0,n.cn)("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",e),ref:r,...s}));d.displayName="Input";let c=t.forwardRef(({className:e,...t},s)=>(0,a.jsx)("label",{ref:s,className:(0,n.cn)("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",e),...t}));c.displayName="Label";let o=t.forwardRef(({className:e,checked:t,onCheckedChange:s,onChange:r,...i},l)=>(0,a.jsxs)("label",{className:"relative inline-flex items-center cursor-pointer",children:[(0,a.jsx)("input",{type:"checkbox",className:"sr-only peer",checked:t,onChange:e=>{s&&s(e.target.checked),r&&r(e)},ref:l,...i}),(0,a.jsx)("div",{className:(0,n.cn)("relative w-11 h-6 bg-input peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-ring peer-focus:ring-offset-2 peer-focus:ring-offset-background rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-[2px] after:left-[2px] after:bg-background after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-primary",e)})]}));o.displayName="Switch";var p=e.i(15288);let h=(0,e.i(25913).cva)("relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",{variants:{variant:{default:"bg-background text-foreground",destructive:"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive"}},defaultVariants:{variant:"default"}}),m=t.forwardRef(({className:e,variant:t,...s},r)=>(0,a.jsx)("div",{ref:r,role:"alert",className:(0,n.cn)(h({variant:t}),e),...s}));m.displayName="Alert",t.forwardRef(({className:e,...t},s)=>(0,a.jsx)("h5",{ref:s,className:(0,n.cn)("mb-1 font-medium leading-none tracking-tight",e),...t})).displayName="AlertTitle";let u=t.forwardRef(({className:e,...t},s)=>(0,a.jsx)("div",{ref:s,className:(0,n.cn)("text-sm [&_p]:leading-relaxed",e),...t}));u.displayName="AlertDescription";var g=e.i(95468),x=e.i(73884);let v=(0,e.i(75254).default)("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);function b(){let[e,n]=(0,t.useState)((0,r.getSettings)()),[h,b]=(0,t.useState)(!1),[f,j]=(0,t.useState)(null),[y,w]=(0,t.useState)(!1),[N,q]=(0,t.useState)(null),[S,C]=(0,t.useState)(!1),[_,k]=(0,t.useState)(null),[$,F]=(0,t.useState)(!1),[T,A]=(0,t.useState)(null),P=async()=>{b(!0),j(null);try{(0,r.saveSettings)(e),j({type:"success",text:"Settings saved successfully!"}),setTimeout(()=>{window.location.reload()},1e3)}catch(e){j({type:"error",text:`Failed to save settings: ${e instanceof Error?e.message:"Unknown error"}`})}finally{b(!1)}},U=async()=>{w(!0),q(null);try{let a=await i.api.settings.testDatabase({connection_string:e.database.connectionString,host:e.database.host,port:e.database.port,database:e.database.database,username:e.database.username,password:e.database.password});q(a)}catch(e){q({success:!1,message:e?.response?.detail||e?.message||"Failed to test database connection"})}finally{w(!1)}},D=async()=>{C(!0),k(null);try{let a=await i.api.settings.testDlq({connection_string:e.dlq.connectionString,host:e.dlq.host,port:e.dlq.port,database:e.dlq.database,username:e.dlq.username,password:e.dlq.password,table_name:e.dlq.tableName});k(a)}catch(e){k({success:!1,message:e?.response?.detail||e?.message||"Failed to test DLQ connection"})}finally{C(!1)}},L=async()=>{F(!0);try{let a=await i.api.settings.getDlqStats({connection_string:e.dlq.connectionString,host:e.dlq.host,port:e.dlq.port,database:e.dlq.database,username:e.dlq.username,password:e.dlq.password,table_name:e.dlq.tableName});A(a)}catch(e){A(null),alert(`Failed to load DLQ statistics: ${e?.response?.detail||e?.message||"Unknown error"}`)}finally{F(!1)}};return(0,a.jsx)("div",{className:"min-h-screen bg-background",children:(0,a.jsxs)("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6",children:[(0,a.jsx)(s.PageHeader,{title:"Settings",description:"Configure PyCharter UI settings, database connections, and DLQ connections"}),f&&(0,a.jsx)(m,{className:`mt-4 ${"success"===f.type?"bg-green-50 border-green-200":"bg-red-50 border-red-200"}`,children:(0,a.jsx)(u,{className:"success"===f.type?"text-green-800":"text-red-800",children:f.text})}),(0,a.jsxs)("div",{className:"mt-8 space-y-6",children:[(0,a.jsxs)(p.Card,{children:[(0,a.jsxs)(p.CardHeader,{children:[(0,a.jsx)(p.CardTitle,{children:"API Server"}),(0,a.jsx)(p.CardDescription,{children:"Configure the PyCharter API server URL that this UI will connect to"})]}),(0,a.jsx)(p.CardContent,{className:"space-y-4",children:(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(c,{htmlFor:"api-url",children:"API Server URL"}),(0,a.jsx)(d,{id:"api-url",type:"text",value:e.apiServer.url,onChange:a=>n({...e,apiServer:{...e.apiServer,url:a.target.value}}),placeholder:"http://localhost:8000"})]})})]}),(0,a.jsxs)(p.Card,{children:[(0,a.jsxs)(p.CardHeader,{children:[(0,a.jsx)(p.CardTitle,{children:"Database Configuration"}),(0,a.jsx)(p.CardDescription,{children:"Configure database connection for quality checks and data validation"})]}),(0,a.jsxs)(p.CardContent,{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"space-y-0.5",children:[(0,a.jsx)(c,{children:"Enable Database"}),(0,a.jsx)("p",{className:"text-sm text-muted-foreground",children:"Enable database connection for quality checks"})]}),(0,a.jsx)(o,{checked:e.database.enabled,onCheckedChange:a=>n({...e,database:{...e.database,enabled:a}})})]}),e.database.enabled&&(0,a.jsxs)("div",{className:"space-y-4 pt-4 border-t",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(c,{htmlFor:"db-connection-string",children:"Connection String (optional)"}),(0,a.jsx)(d,{id:"db-connection-string",type:"text",value:e.database.connectionString||"",onChange:a=>n({...e,database:{...e.database,connectionString:a.target.value}}),placeholder:"postgresql://user:password@host:port/database"})]}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(c,{htmlFor:"db-host",children:"Host"}),(0,a.jsx)(d,{id:"db-host",type:"text",value:e.database.host||"",onChange:a=>n({...e,database:{...e.database,host:a.target.value}}),placeholder:"localhost"})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(c,{htmlFor:"db-port",children:"Port"}),(0,a.jsx)(d,{id:"db-port",type:"number",value:e.database.port||"",onChange:a=>n({...e,database:{...e.database,port:a.target.value?parseInt(a.target.value):void 0}}),placeholder:"5432"})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(c,{htmlFor:"db-database",children:"Database Name"}),(0,a.jsx)(d,{id:"db-database",type:"text",value:e.database.database||"",onChange:a=>n({...e,database:{...e.database,database:a.target.value}}),placeholder:"mydatabase"})]}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(c,{htmlFor:"db-username",children:"Username"}),(0,a.jsx)(d,{id:"db-username",type:"text",value:e.database.username||"",onChange:a=>n({...e,database:{...e.database,username:a.target.value}}),placeholder:"username"})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(c,{htmlFor:"db-password",children:"Password"}),(0,a.jsx)(d,{id:"db-password",type:"password",value:e.database.password||"",onChange:a=>n({...e,database:{...e.database,password:a.target.value}}),placeholder:"password"})]})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(l.Button,{onClick:U,disabled:y,variant:"outline",children:y?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(v,{className:"mr-2 h-4 w-4 animate-spin"}),"Testing..."]}):"Test Connection"}),N&&(0,a.jsx)("div",{className:"flex items-center gap-2 text-sm",children:N.success?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(g.CheckCircle2,{className:"h-4 w-4 text-green-600"}),(0,a.jsx)("span",{className:"text-green-600",children:N.message})]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(x.XCircle,{className:"h-4 w-4 text-red-600"}),(0,a.jsx)("span",{className:"text-red-600",children:N.message})]})})]})]})]})]}),(0,a.jsxs)(p.Card,{children:[(0,a.jsxs)(p.CardHeader,{children:[(0,a.jsx)(p.CardTitle,{children:"Dead Letter Queue (DLQ) Configuration"}),(0,a.jsx)(p.CardDescription,{children:"Configure DLQ connection to collect statistics on error messages and poison messages"})]}),(0,a.jsxs)(p.CardContent,{className:"space-y-4",children:[(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"space-y-0.5",children:[(0,a.jsx)(c,{children:"Enable DLQ"}),(0,a.jsx)("p",{className:"text-sm text-muted-foreground",children:"Enable DLQ connection for statistics collection"})]}),(0,a.jsx)(o,{checked:e.dlq.enabled,onCheckedChange:a=>n({...e,dlq:{...e.dlq,enabled:a}})})]}),e.dlq.enabled&&(0,a.jsxs)("div",{className:"space-y-4 pt-4 border-t",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(c,{htmlFor:"dlq-connection-string",children:"Connection String (optional)"}),(0,a.jsx)(d,{id:"dlq-connection-string",type:"text",value:e.dlq.connectionString||"",onChange:a=>n({...e,dlq:{...e.dlq,connectionString:a.target.value}}),placeholder:"postgresql://user:password@host:port/database"})]}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(c,{htmlFor:"dlq-host",children:"Host"}),(0,a.jsx)(d,{id:"dlq-host",type:"text",value:e.dlq.host||"",onChange:a=>n({...e,dlq:{...e.dlq,host:a.target.value}}),placeholder:"localhost"})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(c,{htmlFor:"dlq-port",children:"Port"}),(0,a.jsx)(d,{id:"dlq-port",type:"number",value:e.dlq.port||"",onChange:a=>n({...e,dlq:{...e.dlq,port:a.target.value?parseInt(a.target.value):void 0}}),placeholder:"5432"})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(c,{htmlFor:"dlq-database",children:"Database Name"}),(0,a.jsx)(d,{id:"dlq-database",type:"text",value:e.dlq.database||"",onChange:a=>n({...e,dlq:{...e.dlq,database:a.target.value}}),placeholder:"mydatabase"})]}),(0,a.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(c,{htmlFor:"dlq-username",children:"Username"}),(0,a.jsx)(d,{id:"dlq-username",type:"text",value:e.dlq.username||"",onChange:a=>n({...e,dlq:{...e.dlq,username:a.target.value}}),placeholder:"username"})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(c,{htmlFor:"dlq-password",children:"Password"}),(0,a.jsx)(d,{id:"dlq-password",type:"password",value:e.dlq.password||"",onChange:a=>n({...e,dlq:{...e.dlq,password:a.target.value}}),placeholder:"password"})]})]}),(0,a.jsxs)("div",{className:"space-y-2",children:[(0,a.jsx)(c,{htmlFor:"dlq-table",children:"Table Name"}),(0,a.jsx)(d,{id:"dlq-table",type:"text",value:e.dlq.tableName||"",onChange:a=>n({...e,dlq:{...e.dlq,tableName:a.target.value}}),placeholder:"dead_letter_queue"})]}),(0,a.jsxs)("div",{className:"flex items-center gap-2",children:[(0,a.jsx)(l.Button,{onClick:D,disabled:S,variant:"outline",children:S?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(v,{className:"mr-2 h-4 w-4 animate-spin"}),"Testing..."]}):"Test Connection"}),_&&(0,a.jsx)("div",{className:"flex items-center gap-2 text-sm",children:_.success?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(g.CheckCircle2,{className:"h-4 w-4 text-green-600"}),(0,a.jsx)("span",{className:"text-green-600",children:_.message})]}):(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(x.XCircle,{className:"h-4 w-4 text-red-600"}),(0,a.jsx)("span",{className:"text-red-600",children:_.message})]})})]}),T&&(0,a.jsxs)("div",{className:"mt-4 p-4 bg-muted rounded-lg",children:[(0,a.jsx)("h4",{className:"font-semibold mb-2",children:"DLQ Statistics"}),(0,a.jsxs)("div",{className:"space-y-2 text-sm",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("strong",{children:"Total Messages:"})," ",T.total_messages]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("strong",{children:"By Reason:"}),(0,a.jsx)("ul",{className:"list-disc list-inside ml-4",children:Object.entries(T.by_reason).map(([e,t])=>(0,a.jsxs)("li",{children:[e,": ",t]},e))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("strong",{children:"By Stage:"}),(0,a.jsx)("ul",{className:"list-disc list-inside ml-4",children:Object.entries(T.by_stage).map(([e,t])=>(0,a.jsxs)("li",{children:[e,": ",t]},e))})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("strong",{children:"By Status:"}),(0,a.jsx)("ul",{className:"list-disc list-inside ml-4",children:Object.entries(T.by_status).map(([e,t])=>(0,a.jsxs)("li",{children:[e,": ",t]},e))})]})]})]}),(0,a.jsx)(l.Button,{onClick:L,disabled:$||!e.dlq.enabled,variant:"outline",children:$?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(v,{className:"mr-2 h-4 w-4 animate-spin"}),"Loading..."]}):"Load Statistics"})]})]})]}),(0,a.jsx)("div",{className:"flex justify-end",children:(0,a.jsx)(l.Button,{onClick:P,disabled:h,size:"lg",children:h?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(v,{className:"mr-2 h-4 w-4 animate-spin"}),"Saving..."]}):"Save Settings"})})]})]})})}e.s(["default",()=>b],13399)}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,55824,16370,e=>{"use strict";var t=e.i(43476);function a({title:e,description:a,actions:s}){return(0,t.jsxs)("div",{className:"mb-4 flex justify-between items-center",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{className:"text-2xl font-bold text-foreground mb-1",children:e}),a&&(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:a})]}),s&&(0,t.jsx)("div",{className:"flex gap-2",children:s})]})}e.s(["PageHeader",()=>a],16370),e.s([],55824)},61246,e=>{"use strict";var t=e.i(43476),a=e.i(75157);function s({className:e,...s}){return(0,t.jsx)("div",{className:(0,a.cn)("animate-pulse rounded-md bg-muted",e),...s})}function i({size:e="md",className:s}){return(0,t.jsx)("div",{className:(0,a.cn)("flex items-center justify-center",s),children:(0,t.jsx)("div",{className:(0,a.cn)("animate-spin rounded-full border-2 border-muted border-t-primary",{sm:"h-4 w-4",md:"h-8 w-8",lg:"h-12 w-12"}[e])})})}function r({message:e="Loading..."}){return(0,t.jsx)("div",{className:"min-h-screen flex items-center justify-center bg-background",children:(0,t.jsxs)("div",{className:"text-center",children:[(0,t.jsx)(i,{size:"lg",className:"mb-4"}),(0,t.jsx)("p",{className:"text-muted-foreground",children:e})]})})}function l(){return(0,t.jsxs)("div",{className:"rounded-lg border bg-card p-6 space-y-4",children:[(0,t.jsx)(s,{className:"h-6 w-3/4"}),(0,t.jsx)(s,{className:"h-4 w-full"}),(0,t.jsx)(s,{className:"h-4 w-5/6"}),(0,t.jsxs)("div",{className:"flex gap-2 mt-4",children:[(0,t.jsx)(s,{className:"h-9 w-20"}),(0,t.jsx)(s,{className:"h-9 w-20"})]})]})}function d({rows:e=5}){return(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsx)(s,{className:"h-10 w-full"}),Array.from({length:e}).map((e,a)=>(0,t.jsx)(s,{className:"h-12 w-full"},a))]})}e.s(["CardSkeleton",()=>l,"PageLoading",()=>r,"TableSkeleton",()=>d,"default",()=>i],61246)},43668,e=>{"use strict";var t=e.i(47167);let a="pycharter_settings",s={apiServer:{url:t.default.env.NEXT_PUBLIC_API_URL||"http://localhost:8000"},database:{enabled:!1},dlq:{enabled:!1}};function i(){try{let e=localStorage.getItem(a);if(e){let t=JSON.parse(e);return{...s,...t,apiServer:{...s.apiServer,...t.apiServer},database:{...s.database,...t.database},dlq:{...s.dlq,...t.dlq}}}}catch(e){console.error("Failed to load settings:",e)}return s}function r(e){try{localStorage.setItem(a,JSON.stringify(e))}catch(e){throw console.error("Failed to save settings:",e),e}}function l(){return i().apiServer.url||s.apiServer.url}e.s(["getApiBaseUrl",()=>l,"getSettings",()=>i,"saveSettings",()=>r])},9165,e=>{"use strict";var t=e.i(43668);class a extends Error{status;response;constructor(e,t,a){super(e),this.status=t,this.response=a,this.name="ApiError"}}async function s(e,s){let i=`${(0,t.getApiBaseUrl)()}${e}`;try{let e=await fetch(i,{...s,headers:{"Content-Type":"application/json",...s?.headers}});if(!e.ok){let t;try{t=await e.json()}catch{t={detail:e.statusText}}let s=t.detail||`API request failed: ${e.statusText}`;throw 422===e.status&&t.details&&Array.isArray(t.details)&&(s=t.details.map(e=>{let t=e.loc?.join(".")||e.field||"field",a=e.msg||e.message||"validation error";return`${t}: ${a}`}).join("; ")||s),new a(s,e.status,t)}let t=e.headers.get("content-type");if(t&&t.includes("application/json"))return e.json();return e.text()}catch(s){if(s instanceof TypeError&&"Failed to fetch"===s.message){let s=(0,t.getApiBaseUrl)();throw new a(`Unable to connect to API server at ${s}. Please ensure the API server is running and the URL is correct.`,0,{originalError:"NetworkError",apiUrl:s,endpoint:e,suggestion:"Check your API server settings in the Settings page"})}throw s}}async function i(e){return s(e,{method:"GET"})}async function r(e,t){return s(e,{method:"POST",body:t?JSON.stringify(t):void 0})}async function l(e,t){return s(e,{method:"PUT",body:t?JSON.stringify(t):void 0})}async function d(e,s){let i=`${(0,t.getApiBaseUrl)()}${e}`,r=await fetch(i,{method:"POST",body:s});if(!r.ok){let e;try{e=await r.json()}catch{e={detail:r.statusText}}throw new a(e.detail||`API request failed: ${r.statusText}`,r.status,e)}let l=r.headers.get("content-type");return l&&l.includes("application/json")?r.json():r.text()}async function n(e){let s=`${(0,t.getApiBaseUrl)()}${e}`,i=await fetch(s,{method:"GET"});if(!i.ok){let e;try{e=await i.json()}catch{e={detail:i.statusText}}throw new a(e.detail||`API request failed: ${i.statusText}`,i.status,e)}return i.blob()}e.s(["ApiError",()=>a,"api",0,{contracts:{list:()=>i("/api/v1/contracts"),get:e=>i(`/api/v1/contracts/${e}`),parse:e=>r("/api/v1/contracts/parse",{contract:e}),parseFile:(e,t)=>{let a=new FormData;return a.append("file",e),void 0!==t&&a.append("validate",String(t)),d("/api/v1/contracts/parse/upload",a)},build:e=>r("/api/v1/contracts/build",e),buildFromId:(e,t)=>{let a=new URLSearchParams;t?.include_metadata!==void 0&&a.append("include_metadata",String(t.include_metadata)),t?.include_ownership!==void 0&&a.append("include_ownership",String(t.include_ownership)),t?.include_governance!==void 0&&a.append("include_governance",String(t.include_governance));let s=a.toString();return r(`/api/v1/contracts/${e}/build${s?`?${s}`:""}`,{})},createFromArtifacts:e=>r("/api/v1/contracts/create-from-artifacts",e),createMixed:e=>r("/api/v1/contracts/create-mixed",e),update:(e,t)=>l(`/api/v1/contracts/${e}`,t)},metadata:{listSchemas:()=>i("/api/v1/metadata/schemas"),getSchema:(e,t)=>{let a=t?`?version=${t}`:"";return i(`/api/v1/metadata/schemas/${e}${a}`)},getCompleteSchema:(e,t)=>{let a=t?`?version=${t}`:"";return i(`/api/v1/metadata/schemas/${e}/complete${a}`)},storeSchema:e=>r("/api/v1/metadata/schemas",e),getMetadata:(e,t)=>{let a=t?`?version=${t}`:"";return i(`/api/v1/metadata/metadata/${e}${a}`)},storeMetadata:e=>r("/api/v1/metadata/metadata",e),getCoercionRules:(e,t)=>{let a=t?`?version=${t}`:"";return i(`/api/v1/metadata/coercion-rules/${e}${a}`)},storeCoercionRules:e=>r("/api/v1/metadata/coercion-rules",e),getValidationRules:(e,t)=>{let a=t?`?version=${t}`:"";return i(`/api/v1/metadata/validation-rules/${e}${a}`)},storeValidationRules:e=>r("/api/v1/metadata/validation-rules",e),getEntityList:e=>i(`/api/v1/metadata/${e}`),createEntity:(e,t)=>r(`/api/v1/metadata/${e}`,t),updateEntity:(e,t,a)=>l(`/api/v1/metadata/${e}/${t}`,a),listArtifacts:()=>i("/api/v1/metadata/artifacts")},validation:{validate:e=>r("/api/v1/validation/validate",e),validateBatch:e=>r("/api/v1/validation/validate-batch",e)},schemas:{generate:e=>r("/api/v1/schemas/generate",e),convert:e=>r("/api/v1/schemas/convert",e)},quality:{listMetrics:e=>{let t=new URLSearchParams;e?.schema_id&&t.append("schema_id",e.schema_id),e?.limit&&t.append("limit",e.limit.toString()),e?.offset&&t.append("offset",e.offset.toString());let a=t.toString();return i(`/api/v1/quality/metrics${a?`?${a}`:""}`)},getMetric:e=>i(`/api/v1/quality/metrics/${e}`),getReport:(e,t)=>{let a=new URLSearchParams;t?.data_source&&a.append("data_source",t.data_source),t?.limit&&a.append("limit",t.limit.toString());let s=a.toString();return i(`/api/v1/quality/reports/${e}${s?`?${s}`:""}`)},check:e=>r("/api/v1/quality/check",e),checkUpload:(e,t)=>{let a=new FormData;return a.append("file",e),t.schema_id&&a.append("schema_id",t.schema_id),t.contract&&a.append("contract",t.contract),void 0!==t.record_violations&&a.append("record_violations",String(t.record_violations)),void 0!==t.calculate_metrics&&a.append("calculate_metrics",String(t.calculate_metrics)),void 0!==t.check_thresholds&&a.append("check_thresholds",String(t.check_thresholds)),t.thresholds&&a.append("thresholds",t.thresholds),void 0!==t.include_field_metrics&&a.append("include_field_metrics",String(t.include_field_metrics)),void 0!==t.sample_size&&a.append("sample_size",String(t.sample_size)),t.data_source&&a.append("data_source",t.data_source),t.data_version&&a.append("data_version",t.data_version),d("/api/v1/quality/check/upload",a)},queryViolations:e=>r("/api/v1/quality/violations",e)},templates:{downloadSchema:()=>n("/api/v1/templates/schema"),downloadContractArtifacts:()=>n("/api/v1/templates/contract-artifacts"),listEtlTemplates:()=>s("/api/v1/templates/etl"),downloadEtlTemplate:async e=>{let s=(0,t.getApiBaseUrl)().replace(/\/$/,""),i=await fetch(`${s}/api/v1/templates/etl/${encodeURIComponent(e)}`);if(!i.ok)throw new a(await i.text()||i.statusText,i.status);return i.text()}},settings:{testDatabase:e=>r("/api/v1/settings/test-database",e),testDlq:e=>r("/api/v1/settings/test-dlq",e),getDlqStats:e=>r("/api/v1/settings/dlq-stats",e)}}])},63209,e=>{"use strict";let t=(0,e.i(75254).default)("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);e.s(["AlertCircle",()=>t],63209)},95113,e=>{"use strict";var t=e.i(43476),a=e.i(63209),s=e.i(9165),i=e.i(75157);function r({error:e,title:r="Error",className:l}){if(!e)return null;let d=e instanceof s.ApiError,n=d?e.message:e.message||"An unexpected error occurred";return(0,t.jsx)("div",{className:(0,i.cn)("rounded-lg border border-destructive/50 bg-destructive/10 p-4",l),children:(0,t.jsxs)("div",{className:"flex",children:[(0,t.jsx)(a.AlertCircle,{className:"h-5 w-5 text-destructive flex-shrink-0 mt-0.5"}),(0,t.jsxs)("div",{className:"ml-3",children:[(0,t.jsx)("h3",{className:"text-sm font-medium text-destructive",children:r}),(0,t.jsxs)("div",{className:"mt-2 text-sm text-destructive/90",children:[(0,t.jsx)("p",{children:n}),d&&e.status&&(0,t.jsxs)("p",{className:"mt-1 text-xs opacity-75",children:["Status: ",e.status]})]})]})]})})}e.s(["default",()=>r])},46652,e=>{"use strict";var t=e.i(71645),a=e.i(9165);function s(){let[e,s]=(0,t.useState)([]),[i,r]=(0,t.useState)(!0),[l,d]=(0,t.useState)(null),n=(0,t.useCallback)(async()=>{try{r(!0),d(null);let e=await a.api.contracts.list();s(e.contracts)}catch(t){let e="Failed to load contracts";t instanceof a.ApiError&&(e=0===t.status||t.message.includes("Unable to connect")?"API server is not running. Please start it with: pycharter api":t.message),d(e),console.error("Error loading contracts:",t)}finally{r(!1)}},[]);return(0,t.useEffect)(()=>{n()},[n]),{contracts:e,loading:i,error:l,refetch:n}}e.s(["useContracts",()=>s])},78583,e=>{"use strict";let t=(0,e.i(75254).default)("FileText",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M10 9H8",key:"b1mrlr"}],["path",{d:"M16 13H8",key:"t4e002"}],["path",{d:"M16 17H8",key:"z1uh3a"}]]);e.s(["FileText",()=>t],78583)},69074,e=>{"use strict";let t=(0,e.i(75254).default)("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]]);e.s(["Upload",()=>t],69074)},42009,50398,80428,e=>{"use strict";var t=e.i(75254);let a=(0,t.default)("Award",[["path",{d:"m15.477 12.89 1.515 8.526a.5.5 0 0 1-.81.47l-3.58-2.687a1 1 0 0 0-1.197 0l-3.586 2.686a.5.5 0 0 1-.81-.469l1.514-8.526",key:"1yiouv"}],["circle",{cx:"12",cy:"8",r:"6",key:"1vp47v"}]]);e.s(["Award",()=>a],42009);var s=e.i(43476),i=e.i(71645);let r=(0,t.default)("ChevronLeft",[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]]),l=(0,t.default)("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);var d=e.i(64659);let n=(0,t.default)("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);function c({sections:e,defaultCollapsed:t=!1,onItemClick:a,onSectionClick:c,selectedSection:o,headerTitle:m="Navigation"}){let[u,h]=(0,i.useState)(t),[x,p]=(0,i.useState)(new Set(e.map(e=>e.id)));return(0,s.jsxs)("div",{className:`flex flex-col bg-background border-r border-border/50 shadow-sm transition-all duration-300 ${u?"w-16":"w-64"}`,style:{height:"100%",overflow:"hidden"},children:[(0,s.jsxs)("div",{className:"flex items-center justify-between px-4 py-3 border-b border-border/50 bg-muted/30",children:[!u&&(0,s.jsx)("h2",{className:"text-sm font-semibold text-foreground tracking-wide",children:m}),(0,s.jsx)("button",{onClick:()=>{h(!u)},className:"p-1.5 rounded-md hover:bg-muted transition-all duration-200 hover:scale-105 active:scale-95","aria-label":u?"Expand sidebar":"Collapse sidebar",children:u?(0,s.jsx)(l,{className:"h-4 w-4 text-muted-foreground"}):(0,s.jsx)(r,{className:"h-4 w-4 text-muted-foreground"})})]}),(0,s.jsx)("div",{className:"flex-1 overflow-y-auto overflow-x-hidden px-2 py-3",style:{maxHeight:"100%"},children:(0,s.jsx)("div",{className:"space-y-1",children:e.map(e=>{let t=x.has(e.id);return(0,s.jsxs)("div",{className:"mb-1",children:[(0,s.jsx)("button",{onClick:()=>{var t;c&&c(e.id),t=e.id,p(e=>{let a=new Set(e);return a.has(t)?a.delete(t):a.add(t),a})},className:`w-full flex items-center justify-between px-3 py-2.5 rounded-lg transition-all duration-200 ${u?"justify-center hover:bg-muted/50":o===e.id?"bg-primary/10 text-primary hover:bg-primary/15":"hover:bg-muted/50 hover:shadow-sm"}`,title:u?e.title:void 0,children:u?e.icon?(0,s.jsx)(e.icon,{className:`h-5 w-5 transition-colors ${o===e.id?"text-primary":"text-muted-foreground"}`}):(0,s.jsx)("span",{className:`text-xs font-semibold ${o===e.id?"text-primary":"text-muted-foreground"}`,children:e.title.charAt(0).toUpperCase()}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"flex items-center gap-2.5",children:[e.icon&&(0,s.jsx)(e.icon,{className:`h-4 w-4 transition-colors ${o===e.id?"text-primary":"text-muted-foreground"}`}),(0,s.jsx)("span",{className:`text-sm font-medium ${o===e.id?"text-primary":"text-foreground"}`,children:e.title})]}),t?(0,s.jsx)(n,{className:"h-3.5 w-3.5 text-muted-foreground transition-transform duration-200"}):(0,s.jsx)(d.ChevronDown,{className:"h-3.5 w-3.5 text-muted-foreground transition-transform duration-200"})]})}),!u&&t&&(0,s.jsx)("div",{className:"ml-1 mt-1 space-y-0.5 pl-2 border-l-2 border-muted",children:e.items.map(t=>(0,s.jsx)("button",{onClick:()=>{var s,i;return s=e.id,i=t.id,void(t.onClick&&t.onClick(),a&&a(s,i))},className:"w-full text-left px-3 py-2 text-sm text-muted-foreground hover:text-foreground hover:bg-muted/50 rounded-md transition-all duration-200 hover:translate-x-0.5",children:t.label},t.id))})]},e.id)})})})]})}e.s(["CollapsibleSidebar",()=>c],50398),e.s([],80428)},42033,e=>{"use strict";var t=e.i(43476),a=e.i(71645),s=e.i(15288),i=e.i(19455);e.i(55824);var r=e.i(16370),l=e.i(9165),d=e.i(61246),n=e.i(95113),c=e.i(46652),o=e.i(69074),m=e.i(78583),u=e.i(42009),h=e.i(75254);let x=(0,h.default)("ChartColumn",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]]),p=(0,h.default)("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]),v=(0,h.default)("TrendingUp",[["polyline",{points:"22 7 13.5 15.5 8.5 10.5 2 17",key:"126l90"}],["polyline",{points:"16 7 22 7 22 13",key:"kwv8wd"}]]);var g=e.i(39616);e.i(80428);var f=e.i(50398);function j(){let[e,h]=(0,a.useState)([]),[j,y]=(0,a.useState)(!0),[b,N]=(0,a.useState)(null),[k,w]=(0,a.useState)(0),[_,C]=(0,a.useState)(null),[S,$]=(0,a.useState)([]),[q,A]=(0,a.useState)(!1),[T,F]=(0,a.useState)(!1),[R,U]=(0,a.useState)(null),[E,P]=(0,a.useState)("json"),[B,V]=(0,a.useState)(null),[D,O]=(0,a.useState)(""),[M,I]=(0,a.useState)(!1),[L,H]=(0,a.useState)("metrics"),{contracts:z,loading:J}=(0,c.useContracts)(),Q=[{id:"metrics",title:"Quality Metrics",icon:x,items:[{id:"overview",label:"Overview",onClick:()=>H("metrics")},{id:"by_schema",label:"By Schema",onClick:()=>H("metrics")},{id:"by_source",label:"By Data Source",onClick:()=>H("metrics")},{id:"trends",label:"Trends",onClick:()=>H("metrics")}]},{id:"violations",title:"Violations",icon:p,items:[{id:"all_violations",label:"All Violations",onClick:()=>H("violations")},{id:"open_violations",label:"Open Violations",onClick:()=>H("violations")},{id:"resolved_violations",label:"Resolved Violations",onClick:()=>H("violations")},{id:"by_severity",label:"By Severity",onClick:()=>H("violations")}]},{id:"checks",title:"Quality Checks",icon:u.Award,items:[{id:"run_check",label:"Run Quality Check",onClick:()=>H("checks")},{id:"check_history",label:"Check History",onClick:()=>H("checks")},{id:"scheduled_checks",label:"Scheduled Checks",onClick:()=>H("checks")}]},{id:"thresholds",title:"Thresholds",icon:v,items:[{id:"configure_thresholds",label:"Configure Thresholds",onClick:()=>H("thresholds")},{id:"threshold_breaches",label:"Threshold Breaches",onClick:()=>H("thresholds")}]},{id:"settings",title:"Settings",icon:g.Settings,items:[{id:"quality_config",label:"Quality Configuration",onClick:()=>H("settings")},{id:"notification_settings",label:"Notification Settings",onClick:()=>H("settings")}]}];(0,a.useEffect)(()=>{K()},[]);let K=async()=>{try{y(!0),N(null);let e=await l.api.quality.listMetrics({limit:100});h(e.metrics),w(e.total)}catch(e){N(e.message||"Failed to load quality metrics"),console.error("Error loading quality metrics:",e)}finally{y(!1)}},G=async e=>{try{A(!0),N(null);let t=await l.api.quality.queryViolations({schema_id:e});$(t.violations||[])}catch(e){N(e.message||"Failed to load violations"),console.error("Error loading violations:",e)}finally{A(!1)}},X=async e=>{if(e.preventDefault(),"file"===E){if(!B)return void N("Please select a file to upload");if(!D)return void N("Please select a contract");try{N(null),I(!0);let e=z.find(e=>e.id===D);if(!e)return void N("Selected contract not found");let t=e.schema_id;if(t||(t=(await l.api.contracts.get(D)).schema_id),!t)return void N("Contract does not have an associated schema");let a=await l.api.quality.checkUpload(B,{schema_id:t,record_violations:!0,calculate_metrics:!0,include_field_metrics:!0,data_source:B.name});U(a),F(!1),V(null),O(""),await K()}catch(e){N(e.message||"Failed to run quality check"),console.error("Error running quality check:",e)}finally{I(!1)}}else{let t=new FormData(e.currentTarget),a=t.get("schema_id"),s=t.get("data");try{N(null);let e=JSON.parse(s),t=await l.api.quality.check({schema_id:a,data:Array.isArray(e)?e:[e],record_violations:!0,calculate_metrics:!0,include_field_metrics:!0});U(t),F(!1),await K()}catch(e){N(e.message||"Failed to run quality check"),console.error("Error running quality check:",e)}}},Y=e=>{if(!e)return"N/A";try{return new Date(e).toLocaleString()}catch{return e}},Z=e=>`${(100*e).toFixed(2)}%`,W=e=>e>=90?"text-green-600 dark:text-green-400":e>=75?"text-yellow-600 dark:text-yellow-400":"text-red-600 dark:text-red-400",ee=Object.values(e.reduce((e,t)=>{let a=`${t.schema_id}::${t.data_source||"unknown"}`;return(!e[a]||new Date(t.check_timestamp||0)>new Date(e[a].check_timestamp||0))&&(e[a]=t),e},{}));return(0,t.jsxs)("div",{className:"flex h-full bg-background",style:{height:"calc(100vh - 4rem)",overflow:"hidden"},children:[(0,t.jsx)("div",{className:"flex-shrink-0",style:{height:"100%",overflow:"hidden"},children:(0,t.jsx)(f.CollapsibleSidebar,{sections:Q,defaultCollapsed:!1,headerTitle:"Quality",selectedSection:L,onSectionClick:H})}),(0,t.jsx)("div",{className:"flex-1 min-w-0",style:{height:"100%",overflowY:"auto",overflowX:"hidden"},"data-content-area":!0,children:(0,t.jsxs)("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6",children:[(0,t.jsx)(r.PageHeader,{title:"Quality Reports",description:"View quality metrics and reports for different data feeds",actions:(0,t.jsx)(i.Button,{onClick:()=>F(!T),children:T?"Cancel":"Run Quality Check"})}),j&&(0,t.jsx)("div",{className:"flex justify-center items-center py-12",children:(0,t.jsx)(d.default,{})}),b&&(0,t.jsxs)("div",{className:"mb-4",children:[(0,t.jsx)(n.default,{error:Error(b),title:"Error"}),(0,t.jsx)(i.Button,{onClick:K,variant:"outline",className:"mt-4",children:"Retry"})]}),T&&(0,t.jsxs)(s.Card,{className:"mb-6",children:[(0,t.jsxs)(s.CardHeader,{children:[(0,t.jsx)(s.CardTitle,{children:"Run Quality Check"}),(0,t.jsx)(s.CardDescription,{children:"Run a quality check against a data contract. Upload a file (CSV/JSON) or provide JSON data directly."})]}),(0,t.jsx)(s.CardContent,{children:(0,t.jsxs)("form",{onSubmit:X,className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex gap-2 mb-4",children:[(0,t.jsxs)(i.Button,{type:"button",variant:"json"===E?"default":"outline",onClick:()=>P("json"),className:"flex items-center gap-2",children:[(0,t.jsx)(m.FileText,{className:"h-4 w-4"}),"JSON Data"]}),(0,t.jsxs)(i.Button,{type:"button",variant:"file"===E?"default":"outline",onClick:()=>P("file"),className:"flex items-center gap-2",children:[(0,t.jsx)(o.Upload,{className:"h-4 w-4"}),"Upload File"]})]}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("label",{htmlFor:"contract_id",className:"block text-sm font-medium mb-2",children:["Data Contract ","file"===E&&"*"]}),J?(0,t.jsx)("div",{className:"text-sm text-muted-foreground",children:"Loading contracts..."}):(0,t.jsxs)("select",{id:"contract_id",value:D,onChange:e=>O(e.target.value),className:"w-full px-3 py-2 border rounded-md",required:"file"===E,children:[(0,t.jsx)("option",{value:"",children:"Select a contract..."}),z.map(e=>(0,t.jsxs)("option",{value:e.id,children:[e.name," (v",e.version,")"]},e.id))]}),"json"===E&&(0,t.jsx)("p",{className:"text-xs text-muted-foreground mt-1",children:"Or enter schema_id directly in the field below"})]}),"file"===E?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{htmlFor:"file",className:"block text-sm font-medium mb-2",children:"Data File (CSV or JSON) *"}),(0,t.jsx)("input",{type:"file",id:"file",accept:".json,.csv",onChange:e=>{let t=e.target.files?.[0];if(t){let e=t.name.split(".").pop()?.toLowerCase();if("json"!==e&&"csv"!==e)return void N("Please select a JSON or CSV file");V(t),N(null)}},className:"w-full px-3 py-2 border rounded-md",required:!0}),B&&(0,t.jsxs)("p",{className:"text-sm text-muted-foreground mt-1",children:["Selected: ",B.name," (",(B.size/1024).toFixed(2)," KB)"]})]}),(0,t.jsx)(i.Button,{type:"submit",disabled:M||!B||!D,children:M?"Running Check...":"Run Quality Check"})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{htmlFor:"schema_id",className:"block text-sm font-medium mb-2",children:"Schema ID"}),(0,t.jsx)("input",{type:"text",id:"schema_id",name:"schema_id",className:"w-full px-3 py-2 border rounded-md",placeholder:"schema_id",required:!0})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{htmlFor:"data",className:"block text-sm font-medium mb-2",children:"Data (JSON array or object)"}),(0,t.jsx)("textarea",{id:"data",name:"data",rows:8,className:"w-full px-3 py-2 border rounded-md font-mono text-sm",placeholder:'[{"field1": "value1"}, {"field1": "value2"}]',required:!0})]}),(0,t.jsx)(i.Button,{type:"submit",children:"Run Check"})]})]})})]}),R&&(0,t.jsxs)(s.Card,{className:"mb-6",children:[(0,t.jsxs)(s.CardHeader,{children:[(0,t.jsx)(s.CardTitle,{children:"Quality Check Result"}),(0,t.jsxs)(s.CardDescription,{children:["Schema: ",R.schema_id," •",R.passed?" ✓ Passed":" ✗ Failed"]})]}),(0,t.jsxs)(s.CardContent,{children:[R.quality_score&&(0,t.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4 mb-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-sm text-muted-foreground",children:"Overall Score"}),(0,t.jsx)("div",{className:`text-2xl font-bold ${W(R.quality_score.overall_score)}`,children:R.quality_score.overall_score.toFixed(1)})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-sm text-muted-foreground",children:"Valid Records"}),(0,t.jsxs)("div",{className:"text-lg font-semibold text-green-600 dark:text-green-400",children:[R.valid_count," / ",R.record_count]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-sm text-muted-foreground",children:"Violations"}),(0,t.jsx)("div",{className:"text-lg font-semibold text-red-600 dark:text-red-400",children:R.violation_count})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-sm text-muted-foreground",children:"Completeness"}),(0,t.jsx)("div",{className:"text-lg font-semibold",children:Z(R.quality_score.completeness)})]})]}),(0,t.jsx)("pre",{className:"bg-muted p-4 rounded-md overflow-auto text-sm max-h-96",children:JSON.stringify(R,null,2)})]})]}),!j&&!b&&(0,t.jsx)(t.Fragment,{children:0===ee.length?(0,t.jsxs)(s.Card,{children:[(0,t.jsxs)(s.CardHeader,{children:[(0,t.jsx)(s.CardTitle,{children:"No Quality Metrics Found"}),(0,t.jsx)(s.CardDescription,{children:"No quality check results are currently available. Run quality checks to see metrics here."})]}),(0,t.jsx)(s.CardContent,{children:(0,t.jsx)(i.Button,{onClick:()=>F(!0),children:"Run Quality Check"})})]}):(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex justify-between items-center",children:[(0,t.jsxs)("p",{className:"text-sm text-muted-foreground",children:[ee.length," data feed",1!==ee.length?"s":""," with quality metrics",k>ee.length&&` (${k} total checks)`]}),(0,t.jsx)(i.Button,{onClick:K,variant:"outline",children:"Refresh"})]}),(0,t.jsx)("div",{className:"grid gap-6",children:ee.map(e=>(0,t.jsxs)(s.Card,{children:[(0,t.jsx)(s.CardHeader,{children:(0,t.jsxs)("div",{className:"flex justify-between items-start",children:[(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsxs)(s.CardTitle,{className:"text-lg",children:[e.schema_id,e.schema_version&&(0,t.jsxs)("span",{className:"text-sm text-muted-foreground ml-2",children:["v",e.schema_version]})]}),(0,t.jsxs)(s.CardDescription,{children:[e.data_source||"Unknown source",e.data_version&&` • Version: ${e.data_version}`]})]}),e.passed?(0,t.jsx)("span",{className:"px-2 py-1 rounded text-xs bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200",children:"✓ Passed"}):(0,t.jsx)("span",{className:"px-2 py-1 rounded text-xs bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200",children:"✗ Failed"})]})}),(0,t.jsxs)(s.CardContent,{children:[(0,t.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4 mb-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-sm text-muted-foreground",children:"Overall Score"}),(0,t.jsx)("div",{className:`text-2xl font-bold ${W(e.overall_score)}`,children:e.overall_score.toFixed(1)})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-sm text-muted-foreground",children:"Accuracy"}),(0,t.jsx)("div",{className:"text-lg font-semibold",children:Z(e.accuracy)})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-sm text-muted-foreground",children:"Completeness"}),(0,t.jsx)("div",{className:"text-lg font-semibold",children:Z(e.completeness)})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-sm text-muted-foreground",children:"Violation Rate"}),(0,t.jsx)("div",{className:"text-lg font-semibold",children:Z(e.violation_rate)})]})]}),(0,t.jsxs)("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4 mb-4 pt-4 border-t",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-sm text-muted-foreground",children:"Total Records"}),(0,t.jsx)("div",{className:"text-lg font-semibold",children:e.record_count})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-sm text-muted-foreground",children:"Valid"}),(0,t.jsx)("div",{className:"text-lg font-semibold text-green-600 dark:text-green-400",children:e.valid_count})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-sm text-muted-foreground",children:"Invalid"}),(0,t.jsx)("div",{className:"text-lg font-semibold text-red-600 dark:text-red-400",children:e.invalid_count})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"text-sm text-muted-foreground",children:"Violations"}),(0,t.jsx)("div",{className:"text-lg font-semibold text-orange-600 dark:text-orange-400",children:e.violation_count})]})]}),e.threshold_breaches&&e.threshold_breaches.length>0&&(0,t.jsxs)("div",{className:"mt-4 pt-4 border-t",children:[(0,t.jsx)("div",{className:"text-sm font-semibold text-orange-600 dark:text-orange-400 mb-2",children:"Threshold Breaches:"}),(0,t.jsx)("ul",{className:"list-disc list-inside text-sm text-muted-foreground space-y-1",children:e.threshold_breaches.map((e,a)=>(0,t.jsx)("li",{children:e},a))})]}),(0,t.jsx)("div",{className:"mt-4 pt-4 border-t flex gap-2",children:(0,t.jsx)(i.Button,{variant:"outline",size:"sm",onClick:()=>{C(e),G(e.schema_id)},disabled:q,children:q&&_?.id===e.id?"Loading...":"View Violations"})}),(0,t.jsxs)("div",{className:"mt-4 pt-4 border-t text-xs text-muted-foreground",children:[(0,t.jsxs)("div",{children:["Last Check: ",Y(e.check_timestamp)]}),e.data_fingerprint&&(0,t.jsxs)("div",{className:"mt-1",children:["Fingerprint: ",e.data_fingerprint.substring(0,16),"..."]})]})]})]},e.id))})]})}),_&&S.length>0&&(0,t.jsxs)(s.Card,{className:"mt-6",children:[(0,t.jsx)(s.CardHeader,{children:(0,t.jsxs)("div",{className:"flex justify-between items-start",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)(s.CardTitle,{children:["Violations for ",_.schema_id]}),(0,t.jsxs)(s.CardDescription,{children:[S.length," violation",1!==S.length?"s":""," found"]})]}),(0,t.jsx)(i.Button,{variant:"outline",size:"sm",onClick:()=>{C(null),$([])},children:"Close"})]})}),(0,t.jsx)(s.CardContent,{children:(0,t.jsx)("div",{className:"space-y-4 max-h-96 overflow-auto",children:S.map(e=>(0,t.jsxs)("div",{className:"border rounded-md p-4",children:[(0,t.jsxs)("div",{className:"flex justify-between items-start mb-2",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"font-semibold",children:["Record ID: ",e.record_id]}),(0,t.jsx)("div",{className:"text-sm text-muted-foreground",children:Y(e.timestamp)})]}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)("span",{className:`px-2 py-1 rounded text-xs ${"critical"===e.severity?"bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200":"warning"===e.severity?"bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200":"bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-200"}`,children:e.severity}),(0,t.jsx)("span",{className:`px-2 py-1 rounded text-xs ${"resolved"===e.status?"bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200":"bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-200"}`,children:e.status})]})]}),(0,t.jsxs)("div",{className:"mt-2",children:[(0,t.jsx)("div",{className:"text-sm font-semibold mb-1",children:"Field Violations:"}),(0,t.jsx)("ul",{className:"list-disc list-inside text-sm text-muted-foreground space-y-1",children:e.field_violations.map((e,a)=>(0,t.jsxs)("li",{children:[(0,t.jsx)("span",{className:"font-medium",children:e.field||"unknown"}),": ",e.message||e.error||"Validation error"]},a))})]})]},e.id))})})]})]})})]})}e.s(["default",()=>j],42033)}]);
|