@givolt/i3-composer-agent 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/plugins/marketplace.json +1 -1
- package/.claude/commands/i3-ui-demo.md +21 -0
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +2 -2
- package/.gemini/commands/i3-ui-demo.toml +21 -0
- package/README.md +10 -8
- package/bin/i3-composer-agent.cjs +38 -44
- package/bin/install.cjs +15 -3
- package/bin/native-layout.cjs +2 -1
- package/bin/native-migration.cjs +19 -2
- package/bin/retired-sop-fingerprints.json +213 -0
- package/bin/wizard.cjs +7 -18
- package/commands/i3-ui-demo.toml +21 -0
- package/docs/codebuddy-setup.md +20 -23
- package/docs/codex-setup.md +2 -2
- package/docs/comparison.md +131 -0
- package/docs/developer-onboarding.md +143 -0
- package/docs/opencode-setup.md +1 -1
- package/docs/other-hosts.md +2 -2
- package/docs/skill-anatomy.md +211 -0
- package/docs/upstream-repository/AGENTS.md +92 -0
- package/docs/upstream-repository/CLAUDE.md +60 -0
- package/docs/upstream-repository/CONTRIBUTING.md +137 -0
- package/docs/upstream-repository/README.md +8 -0
- package/docs/upstream-repository/gitattributes.txt +1 -0
- package/docs/upstream-repository/gitignore.txt +10 -0
- package/docs/upstream-repository/manifest.json +71 -0
- package/docs/upstream-repository/opencode-skills.link +1 -0
- package/docs/upstream-repository/skill-gap.yml +80 -0
- package/docs/upstream-repository/skills-contributing.md +15 -0
- package/docs/upstream-repository/test-plugin-install.yml +167 -0
- package/docs/workbuddy-setup.md +7 -10
- package/evals/cases/i3-ui-demo.json +98 -0
- package/evals/fixtures/i3-ui-demo/asset-management.md +25 -0
- package/evals/zh-CN/cases/i3-ui-demo.json +103 -0
- package/hooks/PROTOTYPE.md +16 -8
- package/hooks/i3-prototype.cjs +4 -10
- package/hooks/manage.cjs +30 -31
- package/package.json +42 -5
- package/plugin.json +1 -1
- package/scripts/ui-demo-dependencies-test.js +228 -0
- package/scripts/ui-demo-mcp-test.js +95 -0
- package/scripts/ui-demo-test.js +170 -0
- package/scripts/ui-prototype-execution-runtime-test.js +1 -1
- package/scripts/ui-prototype-native-test.js +25 -3
- package/skills/i3-enterprise-sop/SKILL.md +15 -15
- package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/ad/assets-manifest.json +9 -29
- package/{references/enterprise-sop-resources/ad/README.md → skills/i3-enterprise-sop/references/ad/readme.md} +4 -4
- package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/assets-manifest.json +64 -33
- package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/brd/assets-manifest.json +9 -20
- package/{references/enterprise-sop-resources/brd/README.md → skills/i3-enterprise-sop/references/brd/readme.md} +4 -4
- package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/codebuddy-project-guide.md +1 -1
- package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/controlled_handoff.py +52 -7
- package/{references/engineering-skeleton-resources → skills/i3-enterprise-sop/references/engineering-skeleton}/adoption.md +1 -1
- package/{references/engineering-skeleton-resources/README.md → skills/i3-enterprise-sop/references/engineering-skeleton/readme.md} +2 -2
- package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/handoff-contract.md +2 -2
- package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/lifecycle-contract.md +1 -1
- package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/plan-handoff.md +3 -3
- package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/prd/assets-manifest.json +20 -26
- package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/prd/prompts/01-generate.md +1 -1
- package/{references/enterprise-sop-resources/prd/README.md → skills/i3-enterprise-sop/references/prd/readme.md} +4 -4
- package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/prd/template-contracts.md +3 -3
- package/{references/enterprise-sop-resources/prd/templates/AD.md → skills/i3-enterprise-sop/references/prd/templates/ad.md} +1 -1
- package/{references/enterprise-sop-resources/prd/templates/PRD.md → skills/i3-enterprise-sop/references/prd/templates/prd.md} +1 -1
- package/{references/enterprise-sop-resources/README.md → skills/i3-enterprise-sop/references/readme.md} +14 -12
- package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/recovery-contract.md +2 -2
- package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/stages.json +16 -7
- package/skills/i3-enterprise-sop/references/technical-baseline/assets-manifest.json +84 -0
- package/{references/enterprise-sop-resources/technical-baseline/baselines//344/274/201/344/270/232/345/272/224/347/224/250-/346/212/200/346/234/257/350/247/204/347/272/246_v0.0.2.md → skills/i3-enterprise-sop/references/technical-baseline/baselines/enterprise-application-technical-baseline-v0-0-4.md} +122 -37
- package/{references/enterprise-sop-resources/technical-baseline/README.md → skills/i3-enterprise-sop/references/technical-baseline/readme.md} +8 -8
- package/{references/enterprise-sop-resources/technical-baseline/templates/TECHNICAL-BASELINE.md → skills/i3-enterprise-sop/references/technical-baseline/templates/technical-baseline.md} +1 -1
- package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/template-contracts.md +7 -7
- package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/testcase/assets-manifest.json +9 -29
- package/{references/enterprise-sop-resources/testcase/README.md → skills/i3-enterprise-sop/references/testcase/readme.md} +4 -4
- package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/verification/review_handoff.py +3 -3
- package/skills/i3-ui-demo/SKILL.md +234 -0
- package/skills/i3-ui-demo/assets/antdv-build/package-lock.json +3363 -0
- package/skills/i3-ui-demo/assets/antdv-build/package.json +28 -0
- package/skills/i3-ui-demo/assets/design-source.json +11 -0
- package/skills/i3-ui-demo/assets/host-targets.json +739 -0
- package/skills/i3-ui-demo/assets/official-files.json +76 -0
- package/skills/i3-ui-demo/assets/starter/index.html +11 -0
- package/skills/i3-ui-demo/assets/starter/package-lock.json +2299 -0
- package/skills/i3-ui-demo/assets/starter/package.json +28 -0
- package/skills/i3-ui-demo/assets/starter/provenance.json +14 -0
- package/skills/i3-ui-demo/assets/starter/public/prototype-config.json +22 -0
- package/skills/i3-ui-demo/assets/starter/src/App.vue +64 -0
- package/skills/i3-ui-demo/assets/starter/src/PrototypeShell.vue +59 -0
- package/skills/i3-ui-demo/assets/starter/src/config.ts +23 -0
- package/skills/i3-ui-demo/assets/starter/src/domain/presentation.ts +30 -0
- package/skills/i3-ui-demo/assets/starter/src/domain/theme.ts +25 -0
- package/skills/i3-ui-demo/assets/starter/src/main.ts +18 -0
- package/skills/i3-ui-demo/assets/starter/src/style.css +26 -0
- package/skills/i3-ui-demo/assets/starter/tests/presentation.test.ts +23 -0
- package/skills/i3-ui-demo/assets/starter/tests/theme.test.ts +26 -0
- package/skills/i3-ui-demo/assets/starter/tsconfig.json +15 -0
- package/skills/i3-ui-demo/assets/starter/vite.config.ts +4 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/capability-definition.json +1395 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/component-inventory.json +707 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/design-system.md +26 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/generation.json +49 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/index.html +534 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/manifest.json +9 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/offline-build.json +265 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/offline.js +8888 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/origin.json +344 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/preset.json +928 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/app.js +22 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets/empty.svg +1 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets/reference-styles.json +1 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets/result-403.svg +1 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets/result-404.svg +1 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/assets-manifest.json +334 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/baseline.json +173 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/conversion.md +30 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/credits.md +17 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/design-tokens.json +881 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/index.html +28 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/licenses/@qin-ui-antdv-next-pro.txt +9 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/licenses/ant-design-icons.txt +22 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/licenses/antdv-next.txt +21 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/package.json +12 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/browser-routes.json +298 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/coverage.json +180 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/integrity.json +13 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/keyboard.json +11 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/responsive.json +125 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/review.md +51 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/rules.log +150 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-html.png +0 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-original.png +0 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-html.png +0 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-original.png +0 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/models-html.png +0 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/models-original.png +0 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-html.png +0 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-original.png +0 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/selection.json +9 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/qa/visual-comparison.json +342 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/readme.md +73 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/reference.md +59 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/routes.json +178 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/controls.js +99 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/dialogs.js +54 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/dom.js +264 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/forms.js +47 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/icons.js +41 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/layout.js +47 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/router.js +63 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/state.js +90 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/table.js +41 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/runtime/widgets.js +8 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.html +3 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.js +36 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.js +51 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.html +3 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.js +48 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/CheckResults.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/CheckResults.js +6 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.js +13 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/data.js +24 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/domain.js +32 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/registry.js +25 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/agents/store.js +85 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentClose.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentClose.js +17 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.js +66 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.html +3 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.js +38 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.js +66 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.js +5 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.js +12 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.js +11 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentList.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentList.js +116 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.js +32 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.js +49 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.js +10 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.js +77 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/data.js +60 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/domain.js +105 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/intents/store.js +212 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/AuditPanel.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/AuditPanel.js +18 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelDetail.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelDetail.js +23 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelEditor.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelEditor.js +78 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelGrant.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelGrant.js +55 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelReferences.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelReferences.js +26 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelRelease.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelRelease.js +38 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelStatus.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelStatus.js +7 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelTable.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelTable.js +72 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelTester.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelTester.js +46 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelsPage.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/ModelsPage.js +52 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/RowActions.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/RowActions.js +19 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/UsagePanel.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/UsagePanel.js +30 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/data.js +48 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/domain.js +39 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/models/store.js +129 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.html +4 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.js +21 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/IntentSource.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/IntentSource.js +8 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.js +37 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.js +10 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.js +37 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.js +49 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/RunDetail.html +4 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/RunDetail.js +22 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.js +9 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/commands.js +82 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/examples.js +47 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/model.js +61 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/repair.js +68 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/store.js +55 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/types.js +1 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/operations/workbench.js +18 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.html +3 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.js +28 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.js +18 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.js +31 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.js +27 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.js +16 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.js +43 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.html +4 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.js +34 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.js +30 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.html +3 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.js +67 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.js +41 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.js +31 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.js +26 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.js +70 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/data.js +8 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/domain.js +62 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/management.js +36 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/managementStore.js +49 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/pbc/store.js +132 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/AdminList.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/AdminList.js +38 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.js +11 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.js +45 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.js +54 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.html +3 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.js +27 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.js +12 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.js +45 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.html +3 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.js +38 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/domain.js +61 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/state.js +51 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/permissions/store.js +116 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.js +45 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.html +4 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.js +30 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.js +67 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.js +5 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.html +4 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.js +60 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/commands.js +157 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/model.js +136 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/releases/store.js +76 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.html +3 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.js +26 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.js +14 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.js +113 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.html +3 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.js +62 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/commands.js +97 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/model.js +147 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/reviews/store.js +13 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.js +9 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.js +8 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.js +37 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListMore.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/ListMore.js +8 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.js +17 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/columns.js +32 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/deliveryGuide.js +49 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/deliveryView.js +12 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/listBatch.js +15 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/listSelection.js +37 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/policy.js +68 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shared/session.js +44 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.js +25 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.js +53 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.html +10 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.js +30 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ScopePage.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/ScopePage.js +10 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.js +9 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/confirmation.js +3 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/shell/navigation.js +19 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.js +8 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.js +32 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.js +15 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.js +11 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecReview.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecReview.js +57 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.js +37 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/data.js +20 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/domain.js +55 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/specs/store.js +151 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.html +3 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.js +18 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.js +40 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.js +51 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.js +9 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.html +5 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.js +48 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/domain.js +204 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/exampleSource.js +22 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/registry.js +135 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/tasks/store.js +137 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.html +3 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.js +36 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workbench/model.js +56 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workbench/store.js +15 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.js +27 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.html +4 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.js +31 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.html +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.js +68 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.html +5 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.js +55 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/data.js +16 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/domain.js +83 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/registry.js +18 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/src/workflows/store.js +61 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/admin.css +60 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/agents.css +46 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/antdv.css +295 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/app.css +102 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/delivery.css +4 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/intents.css +37 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/native.css +22 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/operations.css +2 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/pbc.css +3 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/permissions.css +22 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/pro.css +1 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/releases.css +4 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/reset.css +246 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/reviews.css +8 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/tasks.css +6 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/tokens.css +15 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/workbench.css +61 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/styles/workflows.css +1 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/admin-rules.test.js +96 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/agents.test.js +14 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/intent-state.test.js +37 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/list-batch.test.js +44 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/operation-fixtures.js +19 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/operation-repair.test.js +14 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/operations.test.js +25 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/pbc-management.test.js +17 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/pbc-state.test.js +24 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/permission-config.test.js +23 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/permissions.test.js +24 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/releases.test.js +50 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/reviews.test.js +36 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/runtime-forms-router.test.js +28 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/runtime-state.test.js +42 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/runtime-stores.test.js +16 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/spec-state.test.js +11 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/tasks.test.js +27 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/workbench.test.js +34 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tests/workflows.test.js +16 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tools/convert.mjs +168 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tools/serve.mjs +7 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tools/styles.mjs +11 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/reference/tools/verify.mjs +24 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/serve.cjs +16 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/template-inventory.json +28791 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/template.json +9 -0
- package/skills/i3-ui-demo/assets/templates/enterprise-admin/usability.css +44 -0
- package/skills/i3-ui-demo/assets/templates.json +10 -0
- package/skills/i3-ui-demo/assets/versions.json +20 -0
- package/skills/i3-ui-demo/readme.md +350 -0
- package/skills/i3-ui-demo/references/browser.md +71 -0
- package/skills/i3-ui-demo/references/dependencies.md +67 -0
- package/skills/i3-ui-demo/references/resources.md +142 -0
- package/skills/i3-ui-demo/scripts/dependencies.cjs +364 -0
- package/skills/i3-ui-demo/scripts/design-install.cjs +105 -0
- package/skills/i3-ui-demo/scripts/design-provider.cjs +57 -0
- package/skills/i3-ui-demo/scripts/locations.cjs +52 -0
- package/skills/i3-ui-demo/scripts/mcp.cjs +112 -0
- package/skills/i3-ui-demo/scripts/provider-discovery.cjs +131 -0
- package/skills/i3-ui-demo/scripts/resources.cjs +283 -0
- package/skills/i3-ui-prototype/SKILL.md +1 -1
- package/skills/i3-ui-prototype/references/execution-evidence.md +12 -56
- package/skills/i3-ui-prototype/scripts/codebuddy-registration.cjs +1 -1
- package/skills/i3-ui-prototype/scripts/execution-runtime.cjs +5 -2
- package/skills/i3-ui-prototype/scripts/hosts/codebuddy.cjs +3 -2
- package/skills/i3-ui-prototype/scripts/native-delivery.cjs +2 -2
- package/skills/i3-ui-prototype/scripts/prototype-hooks.cjs +23 -20
- package/docs/ui-prototype-native/MAIN-SESSION-REPORT.md +0 -66
- package/docs/ui-prototype-native/USAGE.md +0 -93
- package/references/enterprise-sop-resources/technical-baseline/assets-manifest.json +0 -101
- package/references/enterprise-sop-resources/technical-baseline/baselines/PROVENANCE.md +0 -40
- package/references/enterprise-sop-resources/technical-baseline/references/engineering-directory-v0.2.0/adoption.md +0 -112
- package/references/enterprise-sop-resources/technical-baseline/references/engineering-directory-v0.2.0/directory-standard.md +0 -119
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/ad/prompts/01-generate.md +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/ad/prompts/02-review.md +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/ad/prompts/03-revise.md +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/ad/prompts/04-recheck.md +0 -0
- /package/{references/enterprise-sop-resources/ad/templates/AD.md → skills/i3-enterprise-sop/references/ad/templates/ad.md} +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/brd/prompts/01-generate.md +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/brd/prompts/02-review.md +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/brd/prompts/03-revise.md +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/brd/prompts/04-recheck.md +0 -0
- /package/{references/enterprise-sop-resources/brd/templates/BRD.md → skills/i3-enterprise-sop/references/brd/templates/brd.md} +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/controlled-handoff.md +0 -0
- /package/{references/engineering-skeleton-resources → skills/i3-enterprise-sop/references/engineering-skeleton}/catalog.json +0 -0
- /package/{references/engineering-skeleton-resources → skills/i3-enterprise-sop/references/engineering-skeleton}/directory-standard.md +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/handoff.py +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/prd/prompts/02-review.md +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/prd/prompts/03-revise.md +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/prd/prompts/04-recheck.md +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/review-handoff.md +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/selection-handoff.md +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/selection_handoff.py +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/testcase/prompts/01-generate.md +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/testcase/prompts/02-review.md +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/testcase/prompts/03-revise.md +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/testcase/prompts/04-recheck.md +0 -0
- /package/{references/enterprise-sop-resources/testcase/templates/TestCase.md → skills/i3-enterprise-sop/references/testcase/templates/testcase.md} +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/verification/check_execution.py +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/verification/check_native_execution.py +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/verification/check_reads.py +0 -0
- /package/{references/enterprise-sop-resources/verification/README.md → skills/i3-enterprise-sop/references/verification/readme.md} +0 -0
- /package/{references/enterprise-sop-resources → skills/i3-enterprise-sop/references}/verification/review-output.schema.json +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "ui-demo-app",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"packageManager": "npm@11.12.1",
|
|
7
|
+
"engines": {
|
|
8
|
+
"node": ">=22.18.0",
|
|
9
|
+
"npm": ">=10"
|
|
10
|
+
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"dev": "vite --host 127.0.0.1",
|
|
13
|
+
"typecheck": "vue-tsc --noEmit",
|
|
14
|
+
"test": "node --experimental-strip-types --test tests/*.test.ts",
|
|
15
|
+
"build": "vue-tsc --noEmit && vite build",
|
|
16
|
+
"preview": "vite preview --host 127.0.0.1"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"antdv-next": "1.6.0",
|
|
20
|
+
"vue": "3.5.42"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@vitejs/plugin-vue": "6.0.4",
|
|
24
|
+
"typescript": "5.9.3",
|
|
25
|
+
"vite": "7.3.1",
|
|
26
|
+
"vue-tsc": "3.3.13"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"source": "derived Vue and antdv-next starter",
|
|
3
|
+
"sourceCommit": "f5d095a6de2b196541615e2812f6a4ae241b7c36",
|
|
4
|
+
"changes": [
|
|
5
|
+
"independent package identity",
|
|
6
|
+
"antdv-next fixed to 1.6.0",
|
|
7
|
+
"independent lockfile",
|
|
8
|
+
"Drawer 1.6.0 size and afterOpenChange props with localized close label",
|
|
9
|
+
"default light theme and native token dimensions aligned with owned enterprise-admin preset",
|
|
10
|
+
"default enterprise presentation and independent template capability contract"
|
|
11
|
+
],
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"runtimeResources": "All resources belong to this skill; source history is not a runtime dependency."
|
|
14
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"instanceId": "business-preview",
|
|
3
|
+
"storageNamespace": "prototype:business-preview",
|
|
4
|
+
"mockVersion": "business-v1",
|
|
5
|
+
"title": "业务原型",
|
|
6
|
+
"presentation": { "layout": "sidebar", "style": "business", "density": "standard" },
|
|
7
|
+
"pages": [
|
|
8
|
+
{
|
|
9
|
+
"id": "business",
|
|
10
|
+
"title": "业务页面"
|
|
11
|
+
}
|
|
12
|
+
],
|
|
13
|
+
"theme": {
|
|
14
|
+
"defaultTheme": "light",
|
|
15
|
+
"presets": [
|
|
16
|
+
"light",
|
|
17
|
+
"dark",
|
|
18
|
+
"fresh",
|
|
19
|
+
"tech"
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, onBeforeUnmount, ref, watch } from 'vue'
|
|
3
|
+
import { Alert, ConfigProvider, Select, Tabs, TabPane, theme as antdTheme } from 'antdv-next'
|
|
4
|
+
import zhCN from 'antdv-next/locale/zh_CN'
|
|
5
|
+
import type { PrototypeConfig } from './config'
|
|
6
|
+
import { THEME_IDS, THEME_PRESETS, loadThemePreference, safeThemeStorage, saveThemePreference, themeStorageKey } from './domain/theme'
|
|
7
|
+
import type { ThemeId } from './domain/theme'
|
|
8
|
+
import PrototypeShell from './PrototypeShell.vue'
|
|
9
|
+
import { presentationTokens, resolvePresentation } from './domain/presentation'
|
|
10
|
+
const props = defineProps<{ config: PrototypeConfig }>()
|
|
11
|
+
const storage = safeThemeStorage(() => window.localStorage)
|
|
12
|
+
const key = themeStorageKey(props.config.storageNamespace)
|
|
13
|
+
const selected = ref<ThemeId>(loadThemePreference(storage, key))
|
|
14
|
+
const activePage = ref(props.config.pages[0]?.id)
|
|
15
|
+
const warning = ref('')
|
|
16
|
+
const options = THEME_IDS.map(value => ({ value, label: THEME_PRESETS[value].label }))
|
|
17
|
+
const media = matchMedia('(prefers-reduced-motion: reduce)')
|
|
18
|
+
const reduced = ref(media.matches)
|
|
19
|
+
const motionChanged = (event: MediaQueryListEvent) => { reduced.value = event.matches }
|
|
20
|
+
media.addEventListener('change', motionChanged)
|
|
21
|
+
onBeforeUnmount(() => media.removeEventListener('change', motionChanged))
|
|
22
|
+
const preset = computed(() => THEME_PRESETS[selected.value])
|
|
23
|
+
const recipe = computed(() => props.config.presentation ? presentationTokens(resolvePresentation(props.config.presentation)) : undefined)
|
|
24
|
+
const variables = computed(() => ({ '--prototype-bg': preset.value.bg, '--prototype-surface': preset.value.surface, '--prototype-text': preset.value.text, '--prototype-border': preset.value.panelBorder, '--prototype-radius': `${recipe.value?.panelRadius ?? 8}px` }))
|
|
25
|
+
const tokens = computed(() => ({
|
|
26
|
+
algorithm: preset.value.mode === 'dark' ? antdTheme.darkAlgorithm : antdTheme.defaultAlgorithm,
|
|
27
|
+
token: { colorPrimary: preset.value.primary, colorBgBase: preset.value.surface, colorBgLayout: preset.value.bg, colorBgContainer: preset.value.surface,
|
|
28
|
+
colorBgElevated: preset.value.surface, colorText: preset.value.text, colorTextSecondary: preset.value.muted,
|
|
29
|
+
colorBorder: preset.value.border, colorBorderSecondary: preset.value.panelBorder, colorError: preset.value.error, colorSuccess: preset.value.success,
|
|
30
|
+
colorTextLightSolid: preset.value.onPrimary, fontSize: 14,
|
|
31
|
+
fontFamily: '-apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif', motion: !reduced.value,
|
|
32
|
+
...(recipe.value ? { borderRadius: recipe.value.borderRadius, controlHeight: recipe.value.controlHeight } : {}) },
|
|
33
|
+
}))
|
|
34
|
+
function choose(value: unknown) {
|
|
35
|
+
if (typeof value !== 'string' || !THEME_IDS.includes(value as ThemeId)) return
|
|
36
|
+
selected.value = value as ThemeId
|
|
37
|
+
warning.value = saveThemePreference(storage, key, selected.value) ? '' : '主题偏好无法保存,本页仍可切换。'
|
|
38
|
+
}
|
|
39
|
+
watch(preset, value => {
|
|
40
|
+
document.documentElement.dataset.prototypeTheme = selected.value
|
|
41
|
+
document.documentElement.style.colorScheme = value.mode
|
|
42
|
+
}, { immediate: true })
|
|
43
|
+
</script>
|
|
44
|
+
<template>
|
|
45
|
+
<ConfigProvider :locale="zhCN" :theme="tokens" :component-size="recipe?.componentSize">
|
|
46
|
+
<div v-if="config.presentation" :style="variables">
|
|
47
|
+
<PrototypeShell :config="config" :menu-theme="preset.mode">
|
|
48
|
+
<template #appearance><div class="theme-picker"><label for="prototype-theme">主题</label><Select id="prototype-theme" aria-label="主题" :value="selected" :options="options" @change="choose" /></div></template>
|
|
49
|
+
<template #default="{ page }"><Alert v-if="warning" type="warning" :title="warning" show-icon /><section :aria-label="page.title"><h2>{{ page.title }}</h2><Alert type="warning" title="业务页面待实现" description="按固定的页面模式、字段、操作与验收合同实现此页。" show-icon /></section></template>
|
|
50
|
+
</PrototypeShell>
|
|
51
|
+
</div>
|
|
52
|
+
<div v-else class="prototype-shell" :style="{ background: preset.bg, color: preset.text }">
|
|
53
|
+
<header><h1>{{ config.title }}</h1><div class="theme-picker"><label for="prototype-theme">主题</label><Select id="prototype-theme" aria-label="主题" :value="selected" :options="options" @change="choose" /></div></header>
|
|
54
|
+
<main :style="{ background: preset.surface, borderColor: preset.border }">
|
|
55
|
+
<Alert v-if="warning" type="warning" :title="warning" show-icon />
|
|
56
|
+
<Tabs v-model:active-key="activePage">
|
|
57
|
+
<TabPane v-for="page in config.pages" :key="page.id" :tab="page.title">
|
|
58
|
+
<section :aria-label="page.title"><h2>{{ page.title }}</h2><Alert type="warning" title="业务页面待实现" description="按固定需求、完整内容模板和通用能力清单实现此页,再进行交互验收。" show-icon /></section>
|
|
59
|
+
</TabPane>
|
|
60
|
+
</Tabs>
|
|
61
|
+
</main>
|
|
62
|
+
</div>
|
|
63
|
+
</ConfigProvider>
|
|
64
|
+
</template>
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, nextTick, onBeforeUnmount, ref, watch } from 'vue'
|
|
3
|
+
import { Button, Drawer, Layout, LayoutContent, LayoutHeader, LayoutSider, Menu, Result } from 'antdv-next'
|
|
4
|
+
import type { MenuProps } from 'antdv-next'
|
|
5
|
+
import type { PrototypeConfig } from './config'
|
|
6
|
+
import { navigationMenus, pageFromHash, presentationTokens, resolvePresentation } from './domain/presentation'
|
|
7
|
+
import type { NavigationItem } from './domain/presentation'
|
|
8
|
+
const props = defineProps<{ config: PrototypeConfig; menuTheme?: 'light' | 'dark' }>()
|
|
9
|
+
const presentation = computed(() => resolvePresentation(props.config.presentation))
|
|
10
|
+
const recipe = computed(() => presentationTokens(presentation.value))
|
|
11
|
+
const active = ref(pageFromHash(location.hash, props.config.pages))
|
|
12
|
+
const current = computed(() => props.config.pages.find(page => page.id === active.value))
|
|
13
|
+
const items = computed(() => props.config.navigation || props.config.pages.map(page => ({ key: page.id, label: page.title })))
|
|
14
|
+
const menus = computed(() => navigationMenus(items.value, presentation.value.layout, active.value))
|
|
15
|
+
const collapsed = ref(false), mobileOpen = ref(false), focusAfterClose = ref(false)
|
|
16
|
+
const opened = ref<string[]>([])
|
|
17
|
+
function ancestors(nodes: NavigationItem[], target: string | undefined, parents: string[] = []): string[] | undefined { for (const node of nodes) { if (node.key === target) return parents; if (node.children) { const found = ancestors(node.children, target, [...parents, node.key]); if (found) return found } } }
|
|
18
|
+
watch(active, value => { opened.value = [...new Set([...opened.value, ...(ancestors(items.value, value) || [])])] }, { immediate: true })
|
|
19
|
+
const media = matchMedia('(max-width: 767px)'), narrow = ref(media.matches)
|
|
20
|
+
const onResize = (event: MediaQueryListEvent) => { narrow.value = event.matches; if (!event.matches) mobileOpen.value = false }
|
|
21
|
+
const onHash = () => { active.value = pageFromHash(location.hash, props.config.pages) }
|
|
22
|
+
media.addEventListener('change', onResize); window.addEventListener('hashchange', onHash); window.addEventListener('popstate', onHash)
|
|
23
|
+
onBeforeUnmount(() => { media.removeEventListener('change', onResize); window.removeEventListener('hashchange', onHash); window.removeEventListener('popstate', onHash) })
|
|
24
|
+
function navigate(event: { key: string | number }) {
|
|
25
|
+
const id = String(event.key)
|
|
26
|
+
if (!props.config.pages.some(page => page.id === id)) return
|
|
27
|
+
history.pushState(null, '', `#/${encodeURIComponent(id)}`); active.value = id
|
|
28
|
+
if (mobileOpen.value) { focusAfterClose.value = true; mobileOpen.value = false } else nextTick(focusMain)
|
|
29
|
+
}
|
|
30
|
+
function afterMenuChange(open: boolean) { if (!open && focusAfterClose.value) { focusAfterClose.value = false; nextTick(focusMain) } }
|
|
31
|
+
function focusMain() { document.getElementById('prototype-main')?.focus() }
|
|
32
|
+
function nativeItems(nodes: NavigationItem[]): NonNullable<MenuProps['items']> { return nodes.map(node => node.children ? { key: node.key, label: node.label, children: nativeItems(node.children) } : { key: node.key, label: node.label }) }
|
|
33
|
+
const side = computed(() => ['sidebar','mixed'].includes(presentation.value.layout))
|
|
34
|
+
const top = computed(() => ['topbar','mixed'].includes(presentation.value.layout))
|
|
35
|
+
</script>
|
|
36
|
+
<template>
|
|
37
|
+
<Layout class="generation-shell" :class="[`layout-${presentation.layout}`, `style-${presentation.style}`, `density-${presentation.density}`]" :style="{ '--prototype-spacing': `${recipe.spacing}px` }" :data-layout="presentation.layout" :data-style="presentation.style" :data-density="presentation.density">
|
|
38
|
+
<a class="skip-link" href="#prototype-main" @click.prevent="focusMain">跳到页面内容</a>
|
|
39
|
+
<LayoutHeader class="generation-header">
|
|
40
|
+
<div class="generation-brand"><Button v-if="narrow" aria-label="打开导航" :aria-expanded="mobileOpen" @click="mobileOpen = true">菜单</Button><strong>{{ config.title }}</strong></div>
|
|
41
|
+
<slot name="appearance" />
|
|
42
|
+
</LayoutHeader>
|
|
43
|
+
<nav v-if="top && !narrow" aria-label="顶部导航" class="generation-topnav"><Menu :theme="menuTheme || 'light'" mode="horizontal" :items="nativeItems(menus.top)" :selected-keys="menus.topSelected ? [menus.topSelected] : []" @click="navigate" /></nav>
|
|
44
|
+
<Layout class="generation-body">
|
|
45
|
+
<LayoutSider v-if="side && !narrow" class="generation-sidebar" :width="224" :collapsed-width="72" :collapsed="collapsed" :theme="menuTheme || 'light'">
|
|
46
|
+
<Button block :aria-expanded="!collapsed" :aria-label="collapsed ? '展开侧栏' : '收起侧栏'" @click="collapsed = !collapsed">{{ collapsed ? '展开' : '收起侧栏' }}</Button>
|
|
47
|
+
<nav aria-label="侧栏导航"><Menu :theme="menuTheme || 'light'" v-model:open-keys="opened" mode="inline" :inline-collapsed="collapsed" :items="nativeItems(menus.side)" :selected-keys="active ? [active] : []" @click="navigate" /></nav>
|
|
48
|
+
</LayoutSider>
|
|
49
|
+
<LayoutContent id="prototype-main" class="generation-content" tabindex="-1">
|
|
50
|
+
<nav v-if="presentation.layout === 'focused' && !narrow && config.pages.length > 1" aria-label="工作区页面"><Menu :theme="menuTheme || 'light'" mode="horizontal" :items="nativeItems(items)" :selected-keys="active ? [active] : []" @click="navigate" /></nav>
|
|
51
|
+
<slot v-if="current" :page="current" />
|
|
52
|
+
<Result v-else status="404" title="页面不存在" sub-title="当前地址不在本原型的页面范围内。"><template #extra><Button @click="navigate({ key: config.pages[0].id })">返回首页</Button></template></Result>
|
|
53
|
+
</LayoutContent>
|
|
54
|
+
</Layout>
|
|
55
|
+
<Drawer :open="mobileOpen" title="导航" placement="left" :size="288" :mask="{ enabled: true, blur: true }" :closable="{ 'aria-label': '关闭导航' }" destroy-on-hidden :after-open-change="afterMenuChange" @close="mobileOpen = false">
|
|
56
|
+
<nav aria-label="移动导航"><Menu :theme="menuTheme || 'light'" v-model:open-keys="opened" mode="inline" :items="nativeItems(items)" :selected-keys="active ? [active] : []" @click="navigate" /></nav>
|
|
57
|
+
</Drawer>
|
|
58
|
+
</Layout>
|
|
59
|
+
</template>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { resolveThemeConfig } from './domain/theme'
|
|
2
|
+
import type { ThemeBinding } from './domain/theme'
|
|
3
|
+
import { resolvePresentation } from './domain/presentation'
|
|
4
|
+
import type { NavigationItem, Presentation } from './domain/presentation'
|
|
5
|
+
export interface PrototypeConfig { instanceId: string; storageNamespace: string; mockVersion: string; title?: string; pages: { id: string; title: string }[]; theme?: ThemeBinding; presentation?: Presentation; navigation?: NavigationItem[]; generation?: { pages: unknown[] } }
|
|
6
|
+
export interface PrototypeMeta extends PrototypeConfig { candidateId: string }
|
|
7
|
+
declare global { interface Window { __PROTOTYPE_META__: PrototypeMeta } }
|
|
8
|
+
|
|
9
|
+
export async function loadConfig(): Promise<PrototypeConfig> {
|
|
10
|
+
const response = await fetch(`${import.meta.env.BASE_URL}prototype-config.json`, { cache: 'no-store' })
|
|
11
|
+
if (!response.ok) throw new Error('无法读取原型配置,请检查当前预览构建。')
|
|
12
|
+
const config: unknown = await response.json()
|
|
13
|
+
if (!config || typeof config !== 'object') throw new Error('原型配置无效。')
|
|
14
|
+
const value = config as Record<string, unknown>
|
|
15
|
+
for (const key of ['instanceId', 'storageNamespace', 'mockVersion']) {
|
|
16
|
+
if (typeof value[key] !== 'string' || !(value[key] as string).trim()) throw new Error(`原型配置缺少 ${key}。`)
|
|
17
|
+
}
|
|
18
|
+
resolveThemeConfig(value.theme)
|
|
19
|
+
if (value.presentation !== undefined) resolvePresentation(value.presentation)
|
|
20
|
+
if (!Array.isArray(value.pages) || !value.pages.length || value.pages.some(page => !page || typeof page.id !== 'string' || !page.id || typeof page.title !== 'string')) throw new Error('原型页面配置无效。')
|
|
21
|
+
if (new Set(value.pages.map(page => page.id)).size !== value.pages.length) throw new Error('原型页面标识重复。')
|
|
22
|
+
return value as unknown as PrototypeConfig
|
|
23
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface Presentation { layout: 'sidebar' | 'topbar' | 'mixed' | 'focused'; style: 'business' | 'minimal' | 'soft'; density: 'compact' | 'standard' | 'comfortable' }
|
|
2
|
+
export interface NavigationItem { key: string; label: string; children?: NavigationItem[] }
|
|
3
|
+
export function navigationMenus(items: NavigationItem[], layout: Presentation['layout'], active?: string) {
|
|
4
|
+
const first = (item: NavigationItem): string => item.children?.length ? first(item.children[0]) : item.key
|
|
5
|
+
const contains = (item: NavigationItem): boolean => item.key === active || !!item.children?.some(contains)
|
|
6
|
+
const groups = items.some(item => item.children) ? items : [{ key: '@pages', label: '业务页面', children: items }]
|
|
7
|
+
const current = groups.find(contains) || groups[0]
|
|
8
|
+
return { top: layout === 'mixed' ? groups.map(item => ({ key: first(item), label: item.label })) : items,
|
|
9
|
+
side: layout === 'mixed' ? current?.children || [current] : items,
|
|
10
|
+
topSelected: layout === 'mixed' && current ? first(current) : active }
|
|
11
|
+
}
|
|
12
|
+
export function resolvePresentation(value: unknown): Presentation {
|
|
13
|
+
if (!value || typeof value !== 'object') throw new Error('缺少已固定的页面呈现选择。')
|
|
14
|
+
const item = value as Record<string, unknown>
|
|
15
|
+
for (const [key, choices] of Object.entries({ layout: ['sidebar', 'topbar', 'mixed', 'focused'], style: ['business', 'minimal', 'soft'], density: ['compact', 'standard', 'comfortable'] })) {
|
|
16
|
+
if (!choices.includes(item[key] as string)) throw new Error(`不支持的呈现选择:${key}`)
|
|
17
|
+
}
|
|
18
|
+
return item as unknown as Presentation
|
|
19
|
+
}
|
|
20
|
+
export function presentationTokens(value: Presentation) {
|
|
21
|
+
return { borderRadius: { business: 6, minimal: 4, soft: 10 }[value.style],
|
|
22
|
+
panelRadius: { business: 8, minimal: 4, soft: 10 }[value.style],
|
|
23
|
+
controlHeight: { compact: 28, standard: 32, comfortable: 40 }[value.density],
|
|
24
|
+
spacing: { compact: 12, standard: 24, comfortable: 32 }[value.density],
|
|
25
|
+
componentSize: { compact: 'small', standard: 'middle', comfortable: 'large' }[value.density] as 'small' | 'middle' | 'large' }
|
|
26
|
+
}
|
|
27
|
+
export function pageFromHash(hash: string, pages: { id: string }[]): string | undefined {
|
|
28
|
+
if (!hash || hash === '#/' || hash === '#') return pages[0]?.id
|
|
29
|
+
try { const id = decodeURIComponent(hash.replace(/^#\/?/, '')); return pages.some(page => page.id === id) ? id : undefined } catch { return undefined }
|
|
30
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type ThemeId = 'light' | 'dark' | 'fresh' | 'tech'
|
|
2
|
+
export interface ThemeBinding { defaultTheme: 'light'; presets: ThemeId[] }
|
|
3
|
+
export interface ThemeStorage { getItem(key: string): string | null; setItem(key: string, value: string): void }
|
|
4
|
+
export const THEME_IDS: ThemeId[] = ['light', 'dark', 'fresh', 'tech']
|
|
5
|
+
export const THEME_PRESETS = {
|
|
6
|
+
light: { label: '明亮', mode: 'light', primary: '#1677ff', bg: '#f5f5f5', surface: '#fff', subtle: '#fafafa', text: '#262626', muted: '#595959', border: '#d9d9d9', panelBorder: '#f0f0f0', accent: '#1677ff', onPrimary: '#ffffff', error: '#cf1322', success: '#389e0d' },
|
|
7
|
+
dark: { label: '暗黑', mode: 'dark', primary: '#8fb8ff', bg: '#15181d', surface: '#20242b', subtle: '#1b2028', text: '#edf1f7', muted: '#b2bece', border: '#667387', panelBorder: '#667387', accent: '#a6c7ff', onPrimary: '#101c2c', error: '#ffb4ab', success: '#9bddad' },
|
|
8
|
+
fresh: { label: '清新', mode: 'light', primary: '#0c6a55', bg: '#edf8f4', surface: '#fbfffd', subtle: '#e6f4ed', text: '#173b31', muted: '#4c665c', border: '#a4c4b5', panelBorder: '#a4c4b5', accent: '#0c6a55', onPrimary: '#ffffff', error: '#b4232c', success: '#166534' },
|
|
9
|
+
tech: { label: '科技', mode: 'dark', primary: '#55ddc6', bg: '#07131f', surface: '#102536', subtle: '#0b1c2b', text: '#e1f4f7', muted: '#a0bdca', border: '#5b8294', panelBorder: '#5b8294', accent: '#55ddc6', onPrimary: '#071b20', error: '#ffb4ab', success: '#9bddad' },
|
|
10
|
+
} as const
|
|
11
|
+
export function resolveThemeConfig(value: unknown): ThemeBinding | null {
|
|
12
|
+
if (value === undefined) return null
|
|
13
|
+
const config=value as Partial<ThemeBinding> | null
|
|
14
|
+
if (!config || config.defaultTheme !== 'light' || !Array.isArray(config.presets) || config.presets.length !== 4 || new Set(config.presets).size !== 4 || !THEME_IDS.every(id => config.presets!.includes(id))) throw new Error('主题配置必须包含明亮、暗黑、清新、科技且默认明亮。')
|
|
15
|
+
return { defaultTheme: 'light', presets: [...THEME_IDS] }
|
|
16
|
+
}
|
|
17
|
+
export const themeStorageKey = (namespace: string) => `${namespace}:ui-theme:v1`
|
|
18
|
+
export function safeThemeStorage(access: () => ThemeStorage): ThemeStorage | null { try { return access() } catch { return null } }
|
|
19
|
+
export function loadThemePreference(storage: ThemeStorage | null, key: string): ThemeId {
|
|
20
|
+
try { const value=JSON.parse(storage?.getItem(key) ?? 'null'); if (value?.version===1 && THEME_IDS.includes(value.themeId)) return value.themeId } catch { /* Damaged or denied storage uses the explicit default. */ }
|
|
21
|
+
return 'light'
|
|
22
|
+
}
|
|
23
|
+
export function saveThemePreference(storage: ThemeStorage | null, key: string, themeId: ThemeId): boolean {
|
|
24
|
+
try { if (!storage) return false; storage.setItem(key,JSON.stringify({version:1,themeId})); return true } catch { return false }
|
|
25
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createApp } from 'vue'
|
|
2
|
+
import 'antdv-next/dist/reset.css'
|
|
3
|
+
import App from './App.vue'
|
|
4
|
+
import { loadConfig } from './config'
|
|
5
|
+
import './style.css'
|
|
6
|
+
|
|
7
|
+
loadConfig().then(config => {
|
|
8
|
+
window.__PROTOTYPE_META__ = { ...config, candidateId: import.meta.env.VITE_CANDIDATE_ID || 'unverified-development' }
|
|
9
|
+
createApp(App, { config }).mount('#app')
|
|
10
|
+
}).catch(error => {
|
|
11
|
+
const container = document.querySelector('#app')!
|
|
12
|
+
const heading = document.createElement('h1')
|
|
13
|
+
heading.textContent = '原型无法启动'
|
|
14
|
+
const message = document.createElement('p')
|
|
15
|
+
message.textContent = error instanceof Error ? error.message : '配置读取失败。'
|
|
16
|
+
container.setAttribute('role', 'alert')
|
|
17
|
+
container.append(heading, message)
|
|
18
|
+
})
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
* { box-sizing: border-box; }
|
|
2
|
+
body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif; }
|
|
3
|
+
.prototype-shell { min-height: 100dvh; padding: 24px; }
|
|
4
|
+
header { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin: 0 auto 20px; max-width: 1440px; }
|
|
5
|
+
h1 { margin: 0; font-size: 24px; }
|
|
6
|
+
h2 { margin-top: 0; font-size: 20px; }
|
|
7
|
+
.theme-picker { display: flex; align-items: center; gap: 8px; }
|
|
8
|
+
.theme-picker .ant-select { min-width: 100px; }
|
|
9
|
+
main { max-width: 1440px; margin: auto; padding: 20px; border: 1px solid; border-radius: 10px; }
|
|
10
|
+
section { min-height: 240px; }
|
|
11
|
+
:focus-visible { outline: 3px solid currentColor; outline-offset: 3px; }
|
|
12
|
+
@media (max-width: 600px) { .prototype-shell { padding: 12px; } main { padding: 12px; } h1 { font-size: 20px; } }
|
|
13
|
+
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { scroll-behavior: auto !important; animation-duration: .01ms !important; transition-duration: .01ms !important; } }
|
|
14
|
+
.generation-shell { min-height: 100dvh; background: var(--prototype-bg); color: var(--prototype-text); }
|
|
15
|
+
.generation-header { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 16px; width: 100%; max-width: none; min-height: 64px; height: auto; margin: 0; padding: 12px 24px; line-height: 1.5; background: var(--prototype-surface); color: inherit; border-bottom: 1px solid var(--prototype-border); }
|
|
16
|
+
.generation-brand { display: flex; align-items: center; gap: 12px; font-size: 18px; }
|
|
17
|
+
.generation-body { min-width: 0; background: var(--prototype-bg); }
|
|
18
|
+
.generation-sidebar { padding: 12px 8px; background: var(--prototype-surface) !important; border-right: 1px solid var(--prototype-border); }
|
|
19
|
+
.generation-topnav { background: var(--prototype-surface); }
|
|
20
|
+
.generation-content { min-width: 0; max-width: none; margin: var(--prototype-spacing); padding: var(--prototype-spacing); border: 1px solid var(--prototype-border); border-radius: var(--prototype-radius); background: var(--prototype-surface); color: inherit; }
|
|
21
|
+
.layout-focused .generation-content { width: calc(100% - 2 * var(--prototype-spacing)); max-width: 1200px; margin: var(--prototype-spacing) auto; }
|
|
22
|
+
.style-minimal .generation-content { border-color: transparent; }
|
|
23
|
+
.style-soft .generation-content { box-shadow: 0 4px 20px rgb(0 0 0 / 6%); }
|
|
24
|
+
.skip-link { position: fixed; top: 8px; left: 8px; z-index: 2000; padding: 8px 12px; background: var(--prototype-surface); color: var(--prototype-text); transform: translateY(-200%); }
|
|
25
|
+
.skip-link:focus { transform: none; }
|
|
26
|
+
@media (max-width: 767px) { .generation-header { padding: 12px; } .generation-content { margin: 8px; padding: 12px; } }
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import test from 'node:test'
|
|
2
|
+
import assert from 'node:assert/strict'
|
|
3
|
+
import { resolvePresentation, presentationTokens, pageFromHash, navigationMenus } from '../src/domain/presentation.ts'
|
|
4
|
+
test('every supported presentation combination has a usable native token recipe', () => {
|
|
5
|
+
for (const layout of ['sidebar','topbar','mixed','focused']) for (const style of ['business','minimal','soft']) for (const density of ['compact','standard','comfortable']) {
|
|
6
|
+
const value = resolvePresentation({ layout, style, density }), tokens = presentationTokens(value)
|
|
7
|
+
assert.ok(tokens.controlHeight > 0 && tokens.spacing > 0 && tokens.borderRadius >= 0)
|
|
8
|
+
}
|
|
9
|
+
assert.throws(() => resolvePresentation({ layout: 'lost', style: 'minimal', density: 'compact' }), /不支持/)
|
|
10
|
+
})
|
|
11
|
+
test('deep links retain declared page identity and reject unknown or malformed locations', () => {
|
|
12
|
+
const pages = [{ id: 'assets' }, { id: 'details' }]
|
|
13
|
+
assert.equal(pageFromHash('#/details', pages), 'details')
|
|
14
|
+
assert.equal(pageFromHash('', pages), 'assets')
|
|
15
|
+
assert.equal(pageFromHash('#/missing', pages), undefined)
|
|
16
|
+
assert.equal(pageFromHash('#/%broken', pages), undefined)
|
|
17
|
+
})
|
|
18
|
+
test('mixed navigation separates group entries from the selected group pages', () => {
|
|
19
|
+
const value = navigationMenus([{ key: '@assets', label: '资产', children: [{ key: 'list', label: '台账' }, { key: 'detail', label: '详情' }] }, { key: '@work', label: '作业', children: [{ key: 'jobs', label: '任务' }] }], 'mixed', 'detail')
|
|
20
|
+
assert.deepEqual(value.top.map(item => item.key), ['list','jobs'])
|
|
21
|
+
assert.deepEqual(value.side.map(item => item.key), ['list','detail'])
|
|
22
|
+
assert.equal(value.topSelected, 'list')
|
|
23
|
+
})
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import assert from 'node:assert/strict'
|
|
2
|
+
import test from 'node:test'
|
|
3
|
+
import { THEME_PRESETS, resolveThemeConfig, themeStorageKey, loadThemePreference, saveThemePreference, safeThemeStorage } from '../src/domain/theme.ts'
|
|
4
|
+
|
|
5
|
+
const binding = { defaultTheme: 'light', presets: ['light', 'dark', 'fresh', 'tech'] }
|
|
6
|
+
test('four named presets are explicit while an unbound instance stays legacy', () => {
|
|
7
|
+
assert.equal(resolveThemeConfig(undefined), null)
|
|
8
|
+
assert.deepEqual(resolveThemeConfig(binding), binding)
|
|
9
|
+
assert.deepEqual(Object.values(THEME_PRESETS).map(theme => theme.label), ['明亮', '暗黑', '清新', '科技'])
|
|
10
|
+
assert.deepEqual(Object.values(THEME_PRESETS).map(theme => theme.mode), ['light', 'dark', 'light', 'dark'])
|
|
11
|
+
for (const config of [{ ...binding, defaultTheme: 'dark' }, { ...binding, presets: [1,2,3,4] }, { ...binding, presets: ['light','dark','fresh','fresh'] }]) assert.throws(() => resolveThemeConfig(config))
|
|
12
|
+
})
|
|
13
|
+
test('theme preference is namespaced independently and damaged cache falls back', () => {
|
|
14
|
+
const values=new Map<string,string>(), storage={ getItem:(key:string)=>values.get(key)??null,setItem:(key:string,value:string)=>{values.set(key,value)} }
|
|
15
|
+
const a=themeStorageKey('instance-a'),b=themeStorageKey('instance-b')
|
|
16
|
+
assert.notEqual(a,b);assert.match(a,/:ui-theme:v1$/)
|
|
17
|
+
assert.equal(saveThemePreference(storage,a,'tech'),true)
|
|
18
|
+
assert.equal(loadThemePreference(storage,a),'tech');assert.equal(loadThemePreference(storage,b),'light')
|
|
19
|
+
for (const broken of ['{','null','{"version":1,"themeId":2}','{"version":2,"themeId":"tech"}','{"version":1,"themeId":"unknown"}']) { values.set(a,broken);assert.equal(loadThemePreference(storage,a),'light') }
|
|
20
|
+
})
|
|
21
|
+
test('denied storage never prevents local theme changes or returns a fake saved preference', () => {
|
|
22
|
+
const denied={getItem(){throw Error('denied')},setItem(){throw Error('denied')}}
|
|
23
|
+
assert.equal(safeThemeStorage(()=>{throw Error('getter denied')}),null)
|
|
24
|
+
assert.equal(loadThemePreference(denied,'key'),'light');assert.equal(loadThemePreference(null,'key'),'light')
|
|
25
|
+
assert.equal(saveThemePreference(denied,'key','dark'),false);assert.equal(saveThemePreference(null,'key','dark'),false)
|
|
26
|
+
})
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"moduleResolution": "Bundler",
|
|
6
|
+
"strict": true,
|
|
7
|
+
"noEmit": true,
|
|
8
|
+
"skipLibCheck": true,
|
|
9
|
+
"lib": ["ES2022", "DOM", "DOM.Iterable"],
|
|
10
|
+
"types": ["vite/client"],
|
|
11
|
+
"allowImportingTsExtensions": true,
|
|
12
|
+
"verbatimModuleSyntax": true
|
|
13
|
+
},
|
|
14
|
+
"include": ["src/**/*.ts", "src/**/*.vue", "vite.config.ts"]
|
|
15
|
+
}
|