@givolt/i3-composer-agent 2.2.3 → 2.3.1
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-prototype.md +23 -0
- package/.claude/commands/i3-review.md +1 -1
- package/.claude/commands/i3-ship.md +1 -1
- 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-prototype.toml +23 -0
- package/.gemini/commands/i3-review.toml +1 -1
- package/.gemini/commands/i3-ship.toml +1 -1
- package/README.md +15 -5
- package/agents/code-reviewer.md +1 -1
- package/agents/test-engineer.md +1 -1
- package/bin/native-layout.cjs +2 -0
- package/commands/i3-prototype.toml +23 -0
- package/commands/i3-review.toml +1 -1
- package/commands/i3-ship.toml +1 -1
- package/docs/agents.md +2 -2
- package/docs/codebuddy-setup.md +2 -2
- package/docs/codex-setup.md +1 -1
- package/docs/copilot-setup.md +4 -0
- package/docs/cursor-setup.md +3 -0
- package/docs/other-hosts.md +44 -9
- package/docs/workbuddy-setup.md +2 -2
- package/evals/README.md +2 -0
- package/evals/cases/i3-documentation-and-adrs.json +18 -0
- package/evals/cases/i3-test-driven-development.json +8 -0
- package/evals/cases/i3-ui-prototype.json +49 -0
- package/evals/fixtures/i3-documentation-and-adrs/prose-review/README.md +19 -0
- package/evals/fixtures/i3-documentation-and-adrs/prose-review/queue.js +32 -0
- package/evals/fixtures/i3-ui-prototype/business-brief.md +7 -0
- package/evals/plugin/tdd-fires-on-pasted-bug/graders/failing-test-first.md +7 -0
- package/evals/plugin/tdd-fires-on-pasted-bug/graders/skill-fired.md +5 -0
- package/evals/plugin/tdd-fires-on-pasted-bug/prompt.md +15 -0
- package/evals/plugin/tdd-stays-quiet-on-debug/graders/not-fired.md +8 -0
- package/evals/plugin/tdd-stays-quiet-on-debug/prompt.md +25 -0
- package/evals/zh-CN/cases/i3-documentation-and-adrs.json +19 -0
- package/evals/zh-CN/cases/i3-test-driven-development.json +4 -0
- package/evals/zh-CN/cases/i3-ui-prototype.json +50 -0
- package/hooks/SIMPLIFY-IGNORE.md +3 -2
- package/hooks/simplify-ignore-test.sh +93 -1
- package/hooks/simplify-ignore.sh +94 -11
- package/package.json +31 -1
- package/plugin.json +1 -1
- package/references/performance-checklist.md +4 -2
- package/scripts/design-provider-discovery-test.js +190 -0
- package/scripts/design-provider-test.js +68 -0
- package/scripts/enterprise-template-test.js +179 -0
- package/scripts/lib/skill-lint-test.js +113 -1
- package/scripts/lib/skill-lint.js +62 -8
- package/scripts/run-evals-test.js +207 -0
- package/scripts/run-evals.js +47 -9
- package/scripts/template-adapter-test.js +155 -0
- package/scripts/ui-prototype-test.js +114 -0
- package/scripts/validate-commands-test.js +30 -0
- package/scripts/validate-commands.js +6 -16
- package/scripts/validate-reference-links-test.js +18 -0
- package/scripts/validate-reference-links.js +4 -2
- package/scripts/validate-skills.js +26 -3
- package/skills/i3-documentation-and-adrs/SKILL.md +9 -0
- package/skills/i3-frontend-ui-engineering/SKILL.md +5 -1
- package/skills/i3-idea-refine/SKILL.md +20 -5
- package/skills/i3-incremental-implementation/SKILL.md +4 -0
- package/skills/i3-performance-optimization/SKILL.md +10 -10
- package/skills/i3-security-and-hardening/references/hardening-patterns.md +1 -1
- package/skills/i3-shipping-and-launch/SKILL.md +6 -0
- package/skills/i3-test-driven-development/SKILL.md +3 -3
- package/skills/i3-ui-prototype/SKILL.md +119 -0
- package/skills/i3-ui-prototype/assets/templates/catalog.json +148 -0
- package/skills/i3-ui-prototype/assets/templates/classic-admin/manifest.json +9 -0
- package/skills/i3-ui-prototype/assets/templates/classic-admin/preset.json +6 -0
- package/skills/i3-ui-prototype/assets/templates/common/app/app.mjs +89 -0
- package/skills/i3-ui-prototype/assets/templates/common/app/config.json +1 -0
- package/skills/i3-ui-prototype/assets/templates/common/app/domain.mjs +20 -0
- package/skills/i3-ui-prototype/assets/templates/common/app/index.html +17 -0
- package/skills/i3-ui-prototype/assets/templates/common/app/serve.cjs +16 -0
- package/skills/i3-ui-prototype/assets/templates/common/app/styles.css +670 -0
- package/skills/i3-ui-prototype/assets/templates/common/app/tokens.css +19 -0
- package/skills/i3-ui-prototype/assets/templates/common/design-system/master.md +20 -0
- package/skills/i3-ui-prototype/assets/templates/common/gallery.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/common/mocks/applications.json +5 -0
- package/skills/i3-ui-prototype/assets/templates/common/requirements-map.json +8 -0
- package/skills/i3-ui-prototype/assets/templates/common/serve-gallery.cjs +16 -0
- package/skills/i3-ui-prototype/assets/templates/credits.md +17 -0
- package/skills/i3-ui-prototype/assets/templates/data-operations/manifest.json +9 -0
- package/skills/i3-ui-prototype/assets/templates/data-operations/preset.json +6 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/design-system.md +32 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/index.html +29 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/manifest.json +9 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/origin.json +344 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/preset.json +928 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/app.js +22 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/empty.svg +1 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/reference-styles.json +1 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-403.svg +1 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets/result-404.svg +1 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/assets-manifest.json +334 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/baseline.json +173 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/conversion.md +30 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/credits.md +17 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/design-tokens.json +881 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/index.html +28 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/@qin-ui-antdv-next-pro.txt +9 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/ant-design-icons.txt +22 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/licenses/antdv-next.txt +21 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/package.json +12 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/browser-routes.json +298 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/coverage.json +180 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/integrity.json +13 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/keyboard.json +11 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/responsive.json +125 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/review.md +51 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/rules.log +150 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-html.png +0 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/flow-editor-original.png +0 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-html.png +0 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/intent-create-original.png +0 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/models-html.png +0 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/models-original.png +0 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-html.png +0 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/screenshots/workbench-original.png +0 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/selection.json +9 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/qa/visual-comparison.json +342 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/readme.md +73 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/reference.md +59 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/routes.json +178 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/controls.js +99 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dialogs.js +54 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/dom.js +264 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/forms.js +47 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/icons.js +41 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/layout.js +47 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/router.js +63 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/state.js +90 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/table.js +41 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/runtime/widgets.js +8 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentDetail.js +36 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentEditor.js +51 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/AgentsPage.js +48 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/CheckResults.js +6 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/ResourcePicker.js +13 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/data.js +24 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/domain.js +32 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/registry.js +25 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/agents/store.js +85 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentClose.js +17 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentCreate.js +66 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDecisions.js +38 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDetail.js +66 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentDocument.js +5 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHeader.js +12 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentHistory.js +11 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentList.js +116 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentReplan.js +32 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentRevision.js +49 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentSummary.js +10 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/IntentWorkspace.js +77 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/data.js +60 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/domain.js +105 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/intents/store.js +212 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/AuditPanel.js +18 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelDetail.js +23 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelEditor.js +78 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelGrant.js +55 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelReferences.js +26 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelRelease.js +38 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelStatus.js +7 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTable.js +72 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelTester.js +46 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/ModelsPage.js +52 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/RowActions.js +19 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/UsagePanel.js +30 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/data.js +48 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/domain.js +39 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/models/store.js +129 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.html +4 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IncidentDetail.js +21 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/IntentSource.js +8 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationActionDialog.js +37 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationEntry.js +10 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/OperationsPage.js +37 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RepairTrack.js +49 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.html +4 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/RunDetail.js +22 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/SourceSummary.js +9 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/commands.js +82 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/examples.js +47 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/model.js +61 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/repair.js +68 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/store.js +55 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/types.js +1 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/operations/workbench.js +18 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ManagementTable.js +28 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcCreateEntry.js +18 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcDetail.js +31 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcEditor.js +27 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcLifecycle.js +16 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPage.js +43 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.html +4 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcPicker.js +34 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcProgress.js +30 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWizard.js +67 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcWorkspace.js +41 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/PbcsPage.js +31 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceEditor.js +26 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/ServiceList.js +70 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/data.js +8 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/domain.js +62 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/management.js +36 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/managementStore.js +49 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/pbc/store.js +132 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/AdminList.js +38 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/EffectiveGrants.js +11 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/GrantEditor.js +45 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MemberEditor.js +54 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/MembersPage.js +27 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RecordsPage.js +12 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RoleEditor.js +45 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/RolesPage.js +38 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/domain.js +61 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/state.js +51 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/permissions/store.js +116 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseActionDialog.js +45 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.html +4 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseDetail.js +30 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseEditor.js +67 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleaseExecution.js +5 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.html +4 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/ReleasesPage.js +60 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/commands.js +157 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/model.js +136 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/releases/store.js +76 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewDetail.js +26 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewEvidence.js +14 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewProcess.js +113 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/ReviewsPage.js +62 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/commands.js +97 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/model.js +147 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/reviews/store.js +13 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ColumnSettings.js +9 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListBatchBar.js +8 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListDeleteDialog.js +37 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/ListMore.js +8 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/RecordMetadata.js +17 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/columns.js +32 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryGuide.js +49 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/deliveryView.js +12 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listBatch.js +15 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/listSelection.js +37 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/policy.js +68 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shared/session.js +44 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConfirmationDialog.js +25 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ConsoleShell.js +53 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.html +10 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/PrototypeGuide.js +30 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/ScopePage.js +10 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/SessionDialog.js +9 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/confirmation.js +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/shell/navigation.js +19 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecDocument.js +8 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecEdit.js +32 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHeader.js +15 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecHistory.js +11 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecReview.js +57 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/SpecWorkspace.js +37 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/data.js +20 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/domain.js +55 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/specs/store.js +151 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/ArtifactDetail.js +18 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskCreate.js +40 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskDetail.js +51 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TaskLaunch.js +9 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.html +5 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/TasksPage.js +48 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/domain.js +204 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/exampleSource.js +22 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/registry.js +135 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/tasks/store.js +137 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.html +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/WorkbenchPage.js +36 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/model.js +56 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workbench/store.js +15 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowCanvas.js +27 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.html +4 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowDetail.js +31 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.html +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/FlowEditor.js +68 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.html +5 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/WorkflowsPage.js +55 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/data.js +16 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/domain.js +83 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/registry.js +18 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/src/workflows/store.js +61 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/admin.css +60 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/agents.css +46 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/antdv.css +295 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/app.css +102 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/delivery.css +4 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/intents.css +37 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/native.css +22 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/operations.css +2 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pbc.css +3 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/permissions.css +22 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/pro.css +1 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/releases.css +4 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reset.css +246 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/reviews.css +8 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tasks.css +6 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/tokens.css +15 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workbench.css +61 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/styles/workflows.css +1 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/admin-rules.test.js +96 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/agents.test.js +14 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/intent-state.test.js +37 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/list-batch.test.js +44 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-fixtures.js +19 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operation-repair.test.js +14 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/operations.test.js +25 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-management.test.js +17 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/pbc-state.test.js +24 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permission-config.test.js +23 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/permissions.test.js +24 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/releases.test.js +50 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/reviews.test.js +36 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-forms-router.test.js +28 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-state.test.js +42 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/runtime-stores.test.js +16 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/spec-state.test.js +11 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/tasks.test.js +27 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workbench.test.js +34 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tests/workflows.test.js +16 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/convert.mjs +168 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/serve.mjs +7 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/styles.mjs +11 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/reference/tools/verify.mjs +24 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/serve.cjs +16 -0
- package/skills/i3-ui-prototype/assets/templates/enterprise-admin/usability.css +44 -0
- package/skills/i3-ui-prototype/assets/templates/gallery/index.html +40 -0
- package/skills/i3-ui-prototype/assets/templates/modern-workspace/manifest.json +9 -0
- package/skills/i3-ui-prototype/assets/templates/modern-workspace/preset.json +6 -0
- package/skills/i3-ui-prototype/assets/templates/serve-gallery.cjs +23 -0
- package/skills/i3-ui-prototype/references/artifact-contract.md +41 -0
- package/skills/i3-ui-prototype/references/enterprise-admin.md +38 -0
- package/skills/i3-ui-prototype/references/expert-adapter.md +48 -0
- package/skills/i3-ui-prototype/references/template-adapters.md +57 -0
- package/skills/i3-ui-prototype/references/workflow-contract.md +19 -0
- package/skills/i3-ui-prototype/scripts/adapters/easel-html.cjs +30 -0
- package/skills/i3-ui-prototype/scripts/adapters/legacy-html.cjs +28 -0
- package/skills/i3-ui-prototype/scripts/check-design-provider.cjs +9 -0
- package/skills/i3-ui-prototype/scripts/check-prototype.cjs +14 -0
- package/skills/i3-ui-prototype/scripts/design-provider-discovery.cjs +128 -0
- package/skills/i3-ui-prototype/scripts/enterprise-template.cjs +97 -0
- package/skills/i3-ui-prototype/scripts/init-prototype.cjs +8 -0
- package/skills/i3-ui-prototype/scripts/manage-baseline.cjs +11 -0
- package/skills/i3-ui-prototype/scripts/prototype-lib.cjs +259 -0
- package/skills/i3-ui-prototype/scripts/template-adapters.cjs +89 -0
- package/skills/i3-using-agent-skills/SKILL.md +5 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 2,
|
|
3
|
+
"templates": [
|
|
4
|
+
{
|
|
5
|
+
"id": "enterprise-admin",
|
|
6
|
+
"name": "企业管理后台",
|
|
7
|
+
"brand": "i3-Composer",
|
|
8
|
+
"version": "0.1.1",
|
|
9
|
+
"availability": "available",
|
|
10
|
+
"reviewStatus": "pending-review",
|
|
11
|
+
"artifactKind": "html-review",
|
|
12
|
+
"runtime": "HTML/CSS/JavaScript",
|
|
13
|
+
"source": "EASEL v0.14 / Antdv Next HTML 审查版",
|
|
14
|
+
"bestFor": [
|
|
15
|
+
"企业管理",
|
|
16
|
+
"审批台账",
|
|
17
|
+
"复杂表单及多模块业务"
|
|
18
|
+
],
|
|
19
|
+
"preview": "enterprise-admin/index.html#/workbench",
|
|
20
|
+
"fixed": [
|
|
21
|
+
"既有设计 token",
|
|
22
|
+
"导航和控件规范",
|
|
23
|
+
"权限及状态语义"
|
|
24
|
+
],
|
|
25
|
+
"adjustable": [
|
|
26
|
+
"业务模块",
|
|
27
|
+
"业务字段",
|
|
28
|
+
"按需求适配的流程"
|
|
29
|
+
],
|
|
30
|
+
"manifest": "enterprise-admin/manifest.json"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"id": "ai-workbench",
|
|
34
|
+
"name": "AI 工作台",
|
|
35
|
+
"version": null,
|
|
36
|
+
"availability": "planned",
|
|
37
|
+
"source": "https://github.com/TencentCloud/Octop",
|
|
38
|
+
"bestFor": [
|
|
39
|
+
"Agent 会话",
|
|
40
|
+
"执行过程",
|
|
41
|
+
"工具及产物工作区"
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"id": "digital-twin",
|
|
46
|
+
"name": "数字孪生大屏",
|
|
47
|
+
"version": null,
|
|
48
|
+
"availability": "planned",
|
|
49
|
+
"bestFor": [
|
|
50
|
+
"场景对象",
|
|
51
|
+
"指标告警",
|
|
52
|
+
"联动下钻"
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"id": "mobile-app",
|
|
57
|
+
"name": "移动端应用",
|
|
58
|
+
"version": null,
|
|
59
|
+
"availability": "planned",
|
|
60
|
+
"bestFor": [
|
|
61
|
+
"移动业务",
|
|
62
|
+
"待办",
|
|
63
|
+
"触控表单"
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
],
|
|
67
|
+
"legacyTemplates": [
|
|
68
|
+
{
|
|
69
|
+
"id": "classic-admin",
|
|
70
|
+
"name": "企业管理后台",
|
|
71
|
+
"version": "1.0.0",
|
|
72
|
+
"artifactKind": "html-review",
|
|
73
|
+
"runtime": "HTML/CSS/JavaScript",
|
|
74
|
+
"bestFor": [
|
|
75
|
+
"申请审批",
|
|
76
|
+
"台账",
|
|
77
|
+
"组织管理"
|
|
78
|
+
],
|
|
79
|
+
"preview": "common/gallery.html?template=classic-admin",
|
|
80
|
+
"license": "MIT",
|
|
81
|
+
"fixed": [
|
|
82
|
+
"导航体系",
|
|
83
|
+
"状态语义",
|
|
84
|
+
"字号及间距尺度"
|
|
85
|
+
],
|
|
86
|
+
"adjustable": [
|
|
87
|
+
"业务字段",
|
|
88
|
+
"表单分组",
|
|
89
|
+
"模板尺度内的信息密度"
|
|
90
|
+
],
|
|
91
|
+
"availability": "legacy",
|
|
92
|
+
"manifest": "classic-admin/manifest.json"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"id": "modern-workspace",
|
|
96
|
+
"name": "现代工作空间",
|
|
97
|
+
"version": "1.0.0",
|
|
98
|
+
"artifactKind": "html-review",
|
|
99
|
+
"runtime": "HTML/CSS/JavaScript",
|
|
100
|
+
"bestFor": [
|
|
101
|
+
"项目协作",
|
|
102
|
+
"任务",
|
|
103
|
+
"内容管理"
|
|
104
|
+
],
|
|
105
|
+
"preview": "common/gallery.html?template=modern-workspace",
|
|
106
|
+
"license": "MIT",
|
|
107
|
+
"fixed": [
|
|
108
|
+
"导航体系",
|
|
109
|
+
"状态语义",
|
|
110
|
+
"字号及间距尺度"
|
|
111
|
+
],
|
|
112
|
+
"adjustable": [
|
|
113
|
+
"业务字段",
|
|
114
|
+
"表单分组",
|
|
115
|
+
"模板尺度内的信息密度"
|
|
116
|
+
],
|
|
117
|
+
"availability": "legacy",
|
|
118
|
+
"manifest": "modern-workspace/manifest.json"
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"id": "data-operations",
|
|
122
|
+
"name": "数据运营控制台",
|
|
123
|
+
"version": "1.0.0",
|
|
124
|
+
"artifactKind": "html-review",
|
|
125
|
+
"runtime": "HTML/CSS/JavaScript",
|
|
126
|
+
"bestFor": [
|
|
127
|
+
"指标与明细",
|
|
128
|
+
"异常处置",
|
|
129
|
+
"运营台账"
|
|
130
|
+
],
|
|
131
|
+
"preview": "common/gallery.html?template=data-operations",
|
|
132
|
+
"license": "MIT",
|
|
133
|
+
"fixed": [
|
|
134
|
+
"导航体系",
|
|
135
|
+
"状态语义",
|
|
136
|
+
"字号及间距尺度"
|
|
137
|
+
],
|
|
138
|
+
"adjustable": [
|
|
139
|
+
"业务字段",
|
|
140
|
+
"表单分组",
|
|
141
|
+
"模板尺度内的信息密度"
|
|
142
|
+
],
|
|
143
|
+
"availability": "legacy",
|
|
144
|
+
"manifest": "data-operations/manifest.json"
|
|
145
|
+
}
|
|
146
|
+
],
|
|
147
|
+
"defaultTemplate": "enterprise-admin"
|
|
148
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"layout": "admin",
|
|
3
|
+
"primitive": { "blue": "#2563eb", "slate": "#172b4d", "spacing": [4, 8, 12, 16, 24, 32] },
|
|
4
|
+
"semantic": { "color-primary": "#2563eb", "color-text": "#172b4d", "color-muted": "#53657f", "color-background": "#f4f6fa", "color-surface": "#ffffff", "color-border": "#dce3ee", "color-sidebar": "#ffffff", "color-sidebar-text": "#172b4d", "color-success": "#166534", "color-warning": "#92400e", "color-danger": "#b91c1c", "space-page": "32px", "font-body": "system-ui, -apple-system, 'PingFang SC', 'Microsoft YaHei', sans-serif" },
|
|
5
|
+
"component": { "radius-panel": "8px", "control-height": "40px", "table-cell-space": "16px", "sidebar-width": "220px" }
|
|
6
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { statusLabels, validateApplication, canPerform, transition } from './domain.mjs';
|
|
2
|
+
const $ = selector => document.querySelector(selector);
|
|
3
|
+
const escape = value => String(value ?? '').replace(/[&<>"']/g, char => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[char]));
|
|
4
|
+
const badge = value => `<span class="badge ${value}">${statusLabels[value]}</span>`;
|
|
5
|
+
const money = value => new Intl.NumberFormat('zh-CN').format(value);
|
|
6
|
+
const [config, seeds] = await Promise.all([fetch('./config.json').then(r => r.json()), fetch('../mocks/applications.json').then(r => r.json())]);
|
|
7
|
+
const previewTemplate = new URLSearchParams(location.search).get('template');
|
|
8
|
+
if (config.preview && ['classic-admin', 'modern-workspace', 'data-operations'].includes(previewTemplate)) {
|
|
9
|
+
const preset = await fetch(`../../${previewTemplate}/preset.json`).then(r => r.json());
|
|
10
|
+
config.layout = preset.layout;
|
|
11
|
+
config.templateName = { 'classic-admin': '企业管理后台', 'modern-workspace': '现代工作空间', 'data-operations': '数据运营控制台' }[previewTemplate];
|
|
12
|
+
config.id = `preview-${previewTemplate}`;
|
|
13
|
+
for (const [key, value] of Object.entries({ ...preset.semantic, ...preset.component })) document.documentElement.style.setProperty(`--${key}`, value);
|
|
14
|
+
}
|
|
15
|
+
document.body.dataset.layout = config.layout;
|
|
16
|
+
document.title = config.title;
|
|
17
|
+
$('#template-name').textContent = config.templateName;
|
|
18
|
+
const storageKey = `i3-prototype-${config.id}`;
|
|
19
|
+
let records = seeds;
|
|
20
|
+
try { const stored = JSON.parse(localStorage.getItem(storageKey)); if (Array.isArray(stored)) records = stored; } catch {}
|
|
21
|
+
let role = 'requester', scene = 'normal', filter = '', reviewing = null;
|
|
22
|
+
function persist() { try { localStorage.setItem(storageKey, JSON.stringify(records)); } catch { notify('浏览器未允许保存,当前演示仍可继续'); } }
|
|
23
|
+
function notify(message) { $('#feedback').textContent = message; }
|
|
24
|
+
function navigate(route) { if (location.hash === route) render(); else location.hash = route; }
|
|
25
|
+
function pageTitle(title, description, action = '') { return `<div class="page-heading"><div><div class="eyebrow">申请与审批</div><h1>${title}</h1><p>${description}</p></div>${action}</div>`; }
|
|
26
|
+
function metrics() { const visible = records.filter(r => role !== 'requester' || r.applicant === '李思'); return `<section class="metrics" aria-label="申请概览">${[['全部申请', visible.length], ['待审批', visible.filter(r => r.status === 'submitted').length], ['已通过', visible.filter(r => r.status === 'approved').length], ['草稿', visible.filter(r => r.status === 'draft').length]].map(([label, count]) => `<div><span>${label}</span><strong>${count}</strong></div>`).join('')}</section>`; }
|
|
27
|
+
function listPage() {
|
|
28
|
+
const visible = scene === 'empty' ? [] : records.filter(record => (role !== 'requester' || record.applicant === '李思') && (record.title + record.department).includes(filter));
|
|
29
|
+
$('#page').innerHTML = pageTitle(escape(config.title), '集中查看申请进度,按角色完成提交与审批。', role === 'requester' ? '<a class="button primary" href="#/new">新建申请</a>' : '') + metrics() + `<section class="panel"><div class="panel-toolbar"><h2>申请台账 <span class="count">${visible.length}</span></h2><form id="filter-form"><label class="sr-only" for="filter">搜索项目或部门</label><input id="filter" placeholder="搜索项目或部门" value="${escape(filter)}"><button>查询</button><button type="button" id="clear-filter">重置</button></form></div>${scene === 'loading' ? '<div class="empty" role="status" aria-busy="true"><h3>正在加载申请</h3><p>请稍候,申请列表正在准备。</p></div>' : scene === 'failed' ? '<div class="empty" role="alert"><h3>暂时无法加载</h3><p>已保留当前筛选条件,请重试。</p><button id="retry">重新加载</button></div>' : visible.length ? `<div class="table-scroll"><table><thead><tr><th scope="col">项目名称</th><th scope="col">申请部门</th><th scope="col">申请金额</th><th scope="col">状态</th><th scope="col">申请人</th><th scope="col">操作</th></tr></thead><tbody>${visible.map(r => `<tr><td><a class="record-title" href="#/detail/${r.id}">${escape(r.title)}</a><small>${r.id} · ${r.date}</small></td><td>${escape(r.department)}</td><td class="numeric">¥ ${money(r.amount)}</td><td>${badge(r.status)}</td><td>${escape(r.applicant)}</td><td><a href="#/detail/${r.id}">查看详情</a></td></tr>`).join('')}</tbody></table></div>` : '<div class="empty"><h3>暂无申请</h3><p>调整筛选条件,或新建一份申请。</p></div>'}<div class="panel-foot">共 ${visible.length} 条记录 · 当前为本地演示</div></section>`;
|
|
30
|
+
$('#filter-form').onsubmit = event => { event.preventDefault(); filter = $('#filter').value.trim(); render(); };
|
|
31
|
+
$('#clear-filter').onclick = () => { filter = ''; render(); };
|
|
32
|
+
if ($('#retry')) $('#retry').onclick = () => { scene = 'normal'; $('#scene').value = scene; render(); };
|
|
33
|
+
}
|
|
34
|
+
function fieldErrors(errors) { return Object.entries(errors).map(([key, value]) => `<li><a href="#${key}">${value}</a></li>`).join(''); }
|
|
35
|
+
function formPage(record = null) {
|
|
36
|
+
if (role !== 'requester' || (record && !canPerform(record, role, 'save'))) { $('#page').innerHTML = pageTitle('当前角色无法编辑', '切换到申请人查看可操作范围。') + '<a class="button" href="#/list">返回台账</a>'; return; }
|
|
37
|
+
const value = record || { title: '', department: '', amount: '', description: '' };
|
|
38
|
+
$('#page').innerHTML = pageTitle(record ? '编辑申请' : '新建申请', '填写基本信息与申请说明,保存草稿或提交审批。') + `<section class="panel form-panel"><form id="application-form" novalidate><div id="error-summary" tabindex="-1" role="alert" hidden><h2>请检查以下内容</h2><ul></ul></div><h2>基本信息</h2><div class="fields"><div class="field wide"><label for="title">项目名称 <span aria-hidden="true">*</span></label><input id="title" name="title" required maxlength="100" value="${escape(value.title)}"><p class="field-error" id="title-error"></p></div><div class="field"><label for="department">申请部门 <span aria-hidden="true">*</span></label><select id="department" name="department" required><option value="">请选择部门</option>${['运营中心', '产品中心', '技术中心'].map(d => `<option ${value.department === d ? 'selected' : ''}>${d}</option>`).join('')}</select><p class="field-error" id="department-error"></p></div><div class="field"><label for="amount">申请金额(元) <span aria-hidden="true">*</span></label><input id="amount" name="amount" inputmode="decimal" type="number" min="1" required value="${escape(value.amount)}"><p class="field-error" id="amount-error"></p></div><div class="field wide"><label for="description">申请说明 <span aria-hidden="true">*</span></label><textarea id="description" name="description" rows="5" required>${escape(value.description)}</textarea><p class="field-error" id="description-error"></p></div></div><div class="form-actions"><a class="button" href="#/list">取消</a><button name="action" value="save">保存草稿</button><button class="primary" name="action" value="submit">提交审批</button></div></form></section>`;
|
|
39
|
+
$('#application-form').onsubmit = event => {
|
|
40
|
+
event.preventDefault();
|
|
41
|
+
const data = Object.fromEntries(new FormData(event.currentTarget));
|
|
42
|
+
data.amount = Number(data.amount);
|
|
43
|
+
const errors = validateApplication(data);
|
|
44
|
+
for (const field of ['title', 'department', 'amount', 'description']) {
|
|
45
|
+
$(`#${field}-error`).textContent = errors[field] || '';
|
|
46
|
+
$(`#${field}`).setAttribute('aria-invalid', String(Boolean(errors[field])));
|
|
47
|
+
$(`#${field}`).setAttribute('aria-describedby', `${field}-error`);
|
|
48
|
+
}
|
|
49
|
+
const summary = $('#error-summary');
|
|
50
|
+
summary.hidden = !Object.keys(errors).length;
|
|
51
|
+
summary.querySelector('ul').innerHTML = fieldErrors(errors);
|
|
52
|
+
if (!summary.hidden) { summary.focus(); summary.querySelectorAll('a').forEach(link => link.onclick = event => { event.preventDefault(); $(link.getAttribute('href')).focus(); }); return; }
|
|
53
|
+
if (scene === 'submit-failed') { notify('提交失败,已保留填写内容,请稍后重试'); return; }
|
|
54
|
+
const draft = { ...(record || { id: `A-${String(records.length + 1).padStart(3, '0')}`, applicant: '李思', status: 'draft', date: '2026-10-14', history: [] }), ...data };
|
|
55
|
+
const result = transition(draft, role, event.submitter?.value || 'save');
|
|
56
|
+
records = record ? records.map(r => r.id === record.id ? result : r) : [...records, result];
|
|
57
|
+
persist(); navigate(`#/detail/${result.id}`); notify(result.status === 'submitted' ? '申请已提交,等待审批' : '草稿已保存');
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function detailPage(id) {
|
|
61
|
+
const record = records.find(r => r.id === id && (role !== 'requester' || r.applicant === '李思'));
|
|
62
|
+
if (!record) { $('#page').innerHTML = pageTitle('未找到申请', '记录不存在或当前演示角色无法查看。') + '<a class="button" href="#/list">返回台账</a>'; return; }
|
|
63
|
+
$('#page').innerHTML = pageTitle(escape(record.title), `${record.id} · ${record.date}`, '<a class="button" href="#/list">返回台账</a>') + `<div class="detail-grid"><section class="panel detail-panel"><div class="panel-title"><h2>申请信息</h2>${badge(record.status)}</div><dl><div><dt>申请部门</dt><dd>${escape(record.department)}</dd></div><div><dt>申请金额</dt><dd>¥ ${money(record.amount)}</dd></div><div><dt>申请人</dt><dd>${escape(record.applicant)}</dd></div><div class="wide"><dt>申请说明</dt><dd class="description">${escape(record.description)}</dd></div></dl><div class="form-actions">${canPerform(record, role, 'save') ? '<button id="edit">编辑申请</button>' : ''}${canPerform(record, role, 'submit') ? '<button class="primary" id="submit-existing">提交审批</button>' : ''}${canPerform(record, role, 'approve') ? '<button id="reject" class="danger">退回申请</button><button id="approve" class="primary">审批通过</button>' : ''}${role === 'viewer' ? '<span class="muted">当前角色仅可查看</span>' : ''}</div></section><section class="panel history-panel"><h2>审批记录</h2>${record.history.length ? `<ol class="timeline">${record.history.map(item => `<li><strong>${item.action}</strong><span>${escape(item.actor)}</span><p>${escape(item.note || '已完成操作')}</p></li>`).join('')}</ol>` : '<p class="muted">尚未提交审批</p>'}</section></div>`;
|
|
64
|
+
if ($('#edit')) $('#edit').onclick = () => formPage(record);
|
|
65
|
+
if ($('#submit-existing')) $('#submit-existing').onclick = () => {
|
|
66
|
+
if (scene === 'submit-failed') { notify('提交失败,申请内容已保留'); return; }
|
|
67
|
+
records = records.map(r => r.id === id ? transition(r, role, 'submit') : r); persist(); render(); notify('申请已提交,等待审批');
|
|
68
|
+
};
|
|
69
|
+
for (const action of ['approve', 'reject']) if ($(`#${action}`)) $(`#${action}`).onclick = () => {
|
|
70
|
+
reviewing = { id, action }; $('#review-title').textContent = action === 'approve' ? '审批通过' : '退回申请'; $('#review-description').textContent = record.title; $('#review-note').value = ''; $('#review-error').textContent = ''; $('#review-dialog').showModal(); $('#review-note').focus();
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function render() {
|
|
74
|
+
const route = location.hash || '#/list';
|
|
75
|
+
$('#breadcrumb').textContent = route.startsWith('#/detail') ? '申请详情' : route === '#/new' ? '新建申请' : '申请台账';
|
|
76
|
+
document.querySelectorAll('.nav-link').forEach(link => { const active = link.getAttribute('href') === (route.startsWith('#/detail') ? '#/list' : route); link.classList.toggle('active', active); if (active) link.setAttribute('aria-current', 'page'); else link.removeAttribute('aria-current'); });
|
|
77
|
+
if (route === '#/new') formPage(); else if (route.startsWith('#/detail/')) detailPage(route.split('/')[2]); else listPage();
|
|
78
|
+
}
|
|
79
|
+
$('#role').onchange = event => { role = event.target.value; render(); };
|
|
80
|
+
$('#scene').onchange = event => { scene = event.target.value; if (!$('#application-form')) render(); };
|
|
81
|
+
$('#reset').onclick = () => { records = structuredClone(seeds); filter = ''; scene = 'normal'; $('#scene').value = scene; persist(); navigate('#/list'); notify('示例数据已恢复'); };
|
|
82
|
+
$('#close-review').onclick = () => $('#review-dialog').close();
|
|
83
|
+
$('#review-form').onsubmit = event => {
|
|
84
|
+
event.preventDefault();
|
|
85
|
+
try { records = records.map(r => r.id === reviewing.id ? transition(r, role, reviewing.action, $('#review-note').value) : r); persist(); $('#review-dialog').close(); render(); notify(reviewing.action === 'approve' ? '申请已通过' : '申请已退回'); }
|
|
86
|
+
catch (error) { $('#review-error').textContent = error.message; $('#review-note').focus(); }
|
|
87
|
+
};
|
|
88
|
+
window.addEventListener('hashchange', render);
|
|
89
|
+
render();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "id": "template-preview", "title": "立项申请", "templateName": "企业管理后台", "layout": "admin", "preview": true }
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const statusLabels = { draft: '草稿', submitted: '待审批', approved: '已通过', rejected: '已退回' };
|
|
2
|
+
export function validateApplication(value) {
|
|
3
|
+
const errors = {};
|
|
4
|
+
if (!value.title?.trim()) errors.title = '请输入项目名称';
|
|
5
|
+
if (!value.department?.trim()) errors.department = '请选择申请部门';
|
|
6
|
+
if (!Number.isFinite(Number(value.amount)) || Number(value.amount) <= 0) errors.amount = '申请金额必须大于零';
|
|
7
|
+
if (!value.description?.trim()) errors.description = '请填写申请说明';
|
|
8
|
+
return errors;
|
|
9
|
+
}
|
|
10
|
+
export function canPerform(record, role, action) {
|
|
11
|
+
if (['approve', 'reject'].includes(action)) return role === 'approver' && record.status === 'submitted';
|
|
12
|
+
return ['save', 'submit'].includes(action) && role === 'requester' && record.applicant === '李思' && ['draft', 'rejected'].includes(record.status);
|
|
13
|
+
}
|
|
14
|
+
export function transition(record, role, action, note = '') {
|
|
15
|
+
if (!canPerform(record, role, action)) throw new Error('当前角色或申请状态不允许此操作');
|
|
16
|
+
if (action === 'submit' && Object.keys(validateApplication(record)).length) throw new Error('申请信息校验未通过');
|
|
17
|
+
if (action === 'reject' && !note.trim()) throw new Error('请填写退回原因');
|
|
18
|
+
const next = { save: 'draft', submit: 'submitted', approve: 'approved', reject: 'rejected' }[action];
|
|
19
|
+
return { ...record, status: next, history: [...record.history, { action: { save: '保存草稿', submit: '提交申请', approve: '审批通过', reject: '退回申请' }[action], actor: role === 'requester' ? '李思' : '审批人', note }] };
|
|
20
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>立项申请</title><link rel="icon" href="data:,"><link rel="stylesheet" href="./tokens.css"><link rel="stylesheet" href="./styles.css"></head>
|
|
4
|
+
<body>
|
|
5
|
+
<a class="skip-link" href="#main">跳到主要内容</a>
|
|
6
|
+
<div class="shell">
|
|
7
|
+
<aside class="sidebar"><a class="brand" href="#/list"><span class="brand-mark" aria-hidden="true">工</span><span>业务工作台<small id="template-name">申请与审批</small></span></a><nav aria-label="工作台导航"><a class="nav-link" href="#/list">申请台账</a><a class="nav-link" href="#/new">新建申请</a></nav><div class="sidebar-note">交互原型<br>本地演示数据</div></aside>
|
|
8
|
+
<div class="workspace"><header class="topbar"><span class="breadcrumb">工作台 / <span id="breadcrumb">申请台账</span></span><label class="role-control">演示角色 <select id="role"><option value="requester">申请人 · 李思</option><option value="approver">审批人</option><option value="viewer">只读人员</option></select></label></header>
|
|
9
|
+
<main id="main" tabindex="-1"><div id="page"></div></main>
|
|
10
|
+
<footer><span>交互演示 · 数据仅保存在本机</span><label>演示情景 <select id="scene"><option value="normal">正常数据</option><option value="empty">空列表</option><option value="loading">加载中</option><option value="failed">加载失败</option><option value="submit-failed">提交失败</option></select></label><button class="text-button" id="reset">恢复示例</button></footer>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
<div id="feedback" role="status" aria-live="polite"></div>
|
|
14
|
+
<dialog id="review-dialog" aria-labelledby="review-title"><form id="review-form"><h2 id="review-title">审批申请</h2><p id="review-description"></p><label for="review-note">审批意见</label><textarea id="review-note" rows="4"></textarea><p id="review-error" class="field-error" role="alert"></p><div class="form-actions"><button type="button" id="close-review">取消</button><button type="submit" class="primary">确认审批</button></div></form></dialog>
|
|
15
|
+
<script type="module" src="./app.mjs"></script>
|
|
16
|
+
</body>
|
|
17
|
+
</html>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
const http = require('node:http');
|
|
3
|
+
const fs = require('node:fs');
|
|
4
|
+
const path = require('node:path');
|
|
5
|
+
const root = path.resolve(__dirname, '..');
|
|
6
|
+
const types = { '.html': 'text/html', '.mjs': 'text/javascript', '.css': 'text/css', '.json': 'application/json' };
|
|
7
|
+
const server = http.createServer((req, res) => {
|
|
8
|
+
let relative;
|
|
9
|
+
try { relative = decodeURIComponent(new URL(req.url, 'http://localhost').pathname); } catch { res.writeHead(400).end(); return; }
|
|
10
|
+
if (relative === '/') { res.writeHead(302, { Location: '/app/index.html' }).end(); return; }
|
|
11
|
+
const file = path.resolve(root, '.' + relative);
|
|
12
|
+
if (!file.startsWith(root + path.sep) || !fs.existsSync(file) || !fs.statSync(file).isFile() || !fs.realpathSync(file).startsWith(fs.realpathSync(root) + path.sep)) { res.writeHead(404).end(); return; }
|
|
13
|
+
res.writeHead(200, { 'Content-Type': (types[path.extname(file)] || 'application/octet-stream') + '; charset=utf-8', 'Cache-Control': 'no-store' });
|
|
14
|
+
fs.createReadStream(file).pipe(res);
|
|
15
|
+
});
|
|
16
|
+
server.listen(Number(process.argv[2] || 0), '127.0.0.1', () => process.stdout.write(`原型预览:http://127.0.0.1:${server.address().port}/\n`));
|