@tacuchi/agent-workflow-cli 11.0.0 → 12.0.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/README.md +51 -95
- package/dist/application/artifacts-service.d.ts +3 -12
- package/dist/application/artifacts-service.d.ts.map +1 -1
- package/dist/application/artifacts-service.js +18 -19
- package/dist/application/artifacts-service.js.map +1 -1
- package/dist/application/branch-resolver.d.ts +16 -0
- package/dist/application/branch-resolver.d.ts.map +1 -0
- package/dist/application/branch-resolver.js +24 -0
- package/dist/application/branch-resolver.js.map +1 -0
- package/dist/application/check-branch-service.d.ts +0 -2
- package/dist/application/check-branch-service.d.ts.map +1 -1
- package/dist/application/check-branch-service.js +5 -40
- package/dist/application/check-branch-service.js.map +1 -1
- package/dist/application/checkpoint/markdown.d.ts.map +1 -1
- package/dist/application/checkpoint/markdown.js +1 -16
- package/dist/application/checkpoint/markdown.js.map +1 -1
- package/dist/application/checkpoint/state-reader.d.ts +1 -3
- package/dist/application/checkpoint/state-reader.d.ts.map +1 -1
- package/dist/application/checkpoint/state-reader.js +10 -31
- package/dist/application/checkpoint/state-reader.js.map +1 -1
- package/dist/application/checkpoint-service.d.ts +12 -14
- package/dist/application/checkpoint-service.d.ts.map +1 -1
- package/dist/application/checkpoint-service.js +36 -61
- package/dist/application/checkpoint-service.js.map +1 -1
- package/dist/application/checkpoint-write-service.d.ts +0 -2
- package/dist/application/checkpoint-write-service.d.ts.map +1 -1
- package/dist/application/checkpoint-write-service.js +5 -6
- package/dist/application/checkpoint-write-service.js.map +1 -1
- package/dist/application/history-update-service.js +3 -1
- package/dist/application/history-update-service.js.map +1 -1
- package/dist/application/hook-branch-check.d.ts.map +1 -1
- package/dist/application/hook-branch-check.js +5 -34
- package/dist/application/hook-branch-check.js.map +1 -1
- package/dist/application/hook-git-commit-advisor.d.ts.map +1 -1
- package/dist/application/hook-git-commit-advisor.js +18 -23
- package/dist/application/hook-git-commit-advisor.js.map +1 -1
- package/dist/application/markdown.d.ts.map +1 -1
- package/dist/application/markdown.js +0 -4
- package/dist/application/markdown.js.map +1 -1
- package/dist/application/parsers/project-block.d.ts +0 -8
- package/dist/application/parsers/project-block.d.ts.map +1 -1
- package/dist/application/parsers/project-block.js +13 -52
- package/dist/application/parsers/project-block.js.map +1 -1
- package/dist/application/paths-service.d.ts +7 -8
- package/dist/application/paths-service.d.ts.map +1 -1
- package/dist/application/paths-service.js +12 -8
- package/dist/application/paths-service.js.map +1 -1
- package/dist/application/project-md-upsert-service.d.ts +3 -11
- package/dist/application/project-md-upsert-service.d.ts.map +1 -1
- package/dist/application/project-md-upsert-service.js +6 -56
- package/dist/application/project-md-upsert-service.js.map +1 -1
- package/dist/application/project-tab-data.d.ts +20 -34
- package/dist/application/project-tab-data.d.ts.map +1 -1
- package/dist/application/project-tab-data.js +41 -101
- package/dist/application/project-tab-data.js.map +1 -1
- package/dist/application/release-data/artifacts.d.ts +0 -2
- package/dist/application/release-data/artifacts.d.ts.map +1 -1
- package/dist/application/release-data/artifacts.js +22 -12
- package/dist/application/release-data/artifacts.js.map +1 -1
- package/dist/application/release-data/sessions.d.ts +0 -2
- package/dist/application/release-data/sessions.d.ts.map +1 -1
- package/dist/application/release-data/sessions.js +36 -27
- package/dist/application/release-data/sessions.js.map +1 -1
- package/dist/application/release-data-service.d.ts +0 -3
- package/dist/application/release-data-service.d.ts.map +1 -1
- package/dist/application/release-data-service.js +3 -21
- package/dist/application/release-data-service.js.map +1 -1
- package/dist/application/render/history-row.d.ts +1 -9
- package/dist/application/render/history-row.d.ts.map +1 -1
- package/dist/application/render/history-row.js +3 -20
- package/dist/application/render/history-row.js.map +1 -1
- package/dist/application/render/project-block.d.ts +1 -3
- package/dist/application/render/project-block.d.ts.map +1 -1
- package/dist/application/render/project-block.js +4 -27
- package/dist/application/render/project-block.js.map +1 -1
- package/dist/application/self/doctor-self.d.ts.map +1 -1
- package/dist/application/self/doctor-self.js +15 -8
- package/dist/application/self/doctor-self.js.map +1 -1
- package/dist/application/self/install-hooks.d.ts +1 -1
- package/dist/application/self/install-hooks.d.ts.map +1 -1
- package/dist/application/self/install-hooks.js +3 -2
- package/dist/application/self/install-hooks.js.map +1 -1
- package/dist/application/self/install-skill.d.ts +9 -3
- package/dist/application/self/install-skill.d.ts.map +1 -1
- package/dist/application/self/install-skill.js +16 -16
- package/dist/application/self/install-skill.js.map +1 -1
- package/dist/application/self/uninstall-skill.js +14 -12
- package/dist/application/self/uninstall-skill.js.map +1 -1
- package/dist/application/self/uninstall.js +14 -12
- package/dist/application/self/uninstall.js.map +1 -1
- package/dist/application/session-artifacts.d.ts +7 -6
- package/dist/application/session-artifacts.d.ts.map +1 -1
- package/dist/application/session-artifacts.js +10 -15
- package/dist/application/session-artifacts.js.map +1 -1
- package/dist/application/session-close-service.d.ts +5 -22
- package/dist/application/session-close-service.d.ts.map +1 -1
- package/dist/application/session-close-service.js +20 -143
- package/dist/application/session-close-service.js.map +1 -1
- package/dist/application/session-create-service.d.ts +9 -29
- package/dist/application/session-create-service.d.ts.map +1 -1
- package/dist/application/session-create-service.js +44 -288
- package/dist/application/session-create-service.js.map +1 -1
- package/dist/application/session-resolver.d.ts +4 -25
- package/dist/application/session-resolver.d.ts.map +1 -1
- package/dist/application/session-resolver.js +33 -149
- package/dist/application/session-resolver.js.map +1 -1
- package/dist/application/session-resume-service.d.ts +3 -4
- package/dist/application/session-resume-service.d.ts.map +1 -1
- package/dist/application/session-resume-service.js +8 -26
- package/dist/application/session-resume-service.js.map +1 -1
- package/dist/application/sessions-service.d.ts +2 -3
- package/dist/application/sessions-service.d.ts.map +1 -1
- package/dist/application/sessions-service.js +9 -26
- package/dist/application/sessions-service.js.map +1 -1
- package/dist/application/skill-index-service.d.ts +0 -2
- package/dist/application/skill-index-service.d.ts.map +1 -1
- package/dist/application/skill-index-service.js +0 -1
- package/dist/application/skill-index-service.js.map +1 -1
- package/dist/application/skills-resolver-service.d.ts +22 -0
- package/dist/application/skills-resolver-service.d.ts.map +1 -0
- package/dist/application/skills-resolver-service.js +71 -0
- package/dist/application/skills-resolver-service.js.map +1 -0
- package/dist/application/sources-service.d.ts +0 -5
- package/dist/application/sources-service.d.ts.map +1 -1
- package/dist/application/sources-service.js +5 -44
- package/dist/application/sources-service.js.map +1 -1
- package/dist/application/templates/session.d.ts +24 -0
- package/dist/application/templates/session.d.ts.map +1 -0
- package/dist/application/templates/session.js +46 -0
- package/dist/application/templates/session.js.map +1 -0
- package/dist/application/upgrade-hub-mode-service.d.ts.map +1 -1
- package/dist/application/upgrade-hub-mode-service.js +0 -1
- package/dist/application/upgrade-hub-mode-service.js.map +1 -1
- package/dist/application/workspace-init-service.d.ts +60 -0
- package/dist/application/workspace-init-service.d.ts.map +1 -0
- package/dist/application/workspace-init-service.js +227 -0
- package/dist/application/workspace-init-service.js.map +1 -0
- package/dist/cli/commands/check-branch.d.ts.map +1 -1
- package/dist/cli/commands/check-branch.js +0 -3
- package/dist/cli/commands/check-branch.js.map +1 -1
- package/dist/cli/commands/plugin-doctor.d.ts.map +1 -1
- package/dist/cli/commands/plugin-doctor.js +0 -3
- package/dist/cli/commands/plugin-doctor.js.map +1 -1
- package/dist/cli/commands/project-md-upsert.d.ts.map +1 -1
- package/dist/cli/commands/project-md-upsert.js +5 -31
- package/dist/cli/commands/project-md-upsert.js.map +1 -1
- package/dist/cli/commands/session-close.d.ts.map +1 -1
- package/dist/cli/commands/session-close.js +1 -33
- package/dist/cli/commands/session-close.js.map +1 -1
- package/dist/cli/commands/session-create.d.ts.map +1 -1
- package/dist/cli/commands/session-create.js +5 -21
- package/dist/cli/commands/session-create.js.map +1 -1
- package/dist/cli/commands/session-resume.js +1 -1
- package/dist/cli/commands/session-resume.js.map +1 -1
- package/dist/cli/commands/set-working-branch.d.ts +3 -0
- package/dist/cli/commands/set-working-branch.d.ts.map +1 -0
- package/dist/cli/commands/set-working-branch.js +34 -0
- package/dist/cli/commands/set-working-branch.js.map +1 -0
- package/dist/cli/commands/skill-index.d.ts.map +1 -1
- package/dist/cli/commands/skill-index.js +0 -3
- package/dist/cli/commands/skill-index.js.map +1 -1
- package/dist/cli/commands/skills.d.ts +3 -0
- package/dist/cli/commands/skills.d.ts.map +1 -0
- package/dist/cli/commands/skills.js +10 -0
- package/dist/cli/commands/skills.js.map +1 -0
- package/dist/cli/commands/sources.d.ts.map +1 -1
- package/dist/cli/commands/sources.js +0 -3
- package/dist/cli/commands/sources.js.map +1 -1
- package/dist/cli/commands/workspace-init.d.ts +3 -0
- package/dist/cli/commands/workspace-init.d.ts.map +1 -0
- package/dist/cli/commands/workspace-init.js +69 -0
- package/dist/cli/commands/workspace-init.js.map +1 -0
- package/dist/cli/help-groups.d.ts.map +1 -1
- package/dist/cli/help-groups.js +8 -19
- package/dist/cli/help-groups.js.map +1 -1
- package/dist/cli/interactive-menu.d.ts +1 -1
- package/dist/cli/interactive-menu.d.ts.map +1 -1
- package/dist/cli/main.js +29 -37
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/parser.d.ts +0 -2
- package/dist/cli/parser.d.ts.map +1 -1
- package/dist/cli/parser.js +1 -13
- package/dist/cli/parser.js.map +1 -1
- package/dist/cli/tui/app.js +3 -38
- package/dist/cli/tui/app.js.map +1 -1
- package/dist/cli/tui/components/hub-init-alias.js +1 -1
- package/dist/cli/tui/components/hub-init-alias.js.map +1 -1
- package/dist/cli/tui/components/hub-init-form.d.ts.map +1 -1
- package/dist/cli/tui/components/hub-init-form.js +13 -12
- package/dist/cli/tui/components/hub-init-form.js.map +1 -1
- package/dist/cli/tui/components/workspace-init-alias.d.ts +5 -0
- package/dist/cli/tui/components/workspace-init-alias.d.ts.map +1 -0
- package/dist/cli/tui/components/workspace-init-alias.js +19 -0
- package/dist/cli/tui/components/workspace-init-alias.js.map +1 -0
- package/dist/cli/tui/components/workspace-init-form.d.ts +13 -0
- package/dist/cli/tui/components/workspace-init-form.d.ts.map +1 -0
- package/dist/cli/tui/components/workspace-init-form.js +87 -0
- package/dist/cli/tui/components/workspace-init-form.js.map +1 -0
- package/dist/cli/tui/data/activity.d.ts +1 -1
- package/dist/cli/tui/data/activity.d.ts.map +1 -1
- package/dist/cli/tui/data/activity.js +2 -2
- package/dist/cli/tui/data/activity.js.map +1 -1
- package/dist/cli/tui/data/workflow-content.d.ts.map +1 -1
- package/dist/cli/tui/data/workflow-content.js +67 -87
- package/dist/cli/tui/data/workflow-content.js.map +1 -1
- package/dist/cli/tui/tabs/project-tab.d.ts.map +1 -1
- package/dist/cli/tui/tabs/project-tab.js +23 -97
- package/dist/cli/tui/tabs/project-tab.js.map +1 -1
- package/dist/cli/tui/tabs/skills-tab.d.ts.map +1 -1
- package/dist/cli/tui/tabs/skills-tab.js +7 -7
- package/dist/cli/tui/tabs/skills-tab.js.map +1 -1
- package/dist/cli/tui/tabs/workflow-tab.d.ts +1 -3
- package/dist/cli/tui/tabs/workflow-tab.d.ts.map +1 -1
- package/dist/cli/tui/tabs/workflow-tab.js +2 -2
- package/dist/cli/tui/tabs/workflow-tab.js.map +1 -1
- package/dist/cli/types.d.ts +3 -0
- package/dist/cli/types.d.ts.map +1 -1
- package/dist/domain/plugin.d.ts +2 -12
- package/dist/domain/plugin.d.ts.map +1 -1
- package/dist/domain/project.d.ts +0 -9
- package/dist/domain/project.d.ts.map +1 -1
- package/dist/domain/session.d.ts +7 -24
- package/dist/domain/session.d.ts.map +1 -1
- package/dist/domain/skills.d.ts +22 -0
- package/dist/domain/skills.d.ts.map +1 -0
- package/dist/domain/skills.js +37 -0
- package/dist/domain/skills.js.map +1 -0
- package/dist/domain/types.d.ts +6 -2
- package/dist/domain/types.d.ts.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/config-service.js +1 -1
- package/dist/runtime/config-service.js.map +1 -1
- package/dist/runtime/types.d.ts +0 -1
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/package.json +12 -3
- package/skills/w/README.md +65 -0
- package/skills/w/SKILL.md +153 -0
- package/skills/w/artifacts/README.md +60 -0
- package/skills/w/artifacts/artifacts-core/BACKLOG.md +12 -0
- package/skills/w/artifacts/artifacts-core/CHECKPOINT.md +22 -0
- package/skills/w/artifacts/artifacts-core/SCRIPTS.sql +39 -0
- package/skills/w/artifacts/artifacts-core/SESSION.md +27 -0
- package/skills/w/artifacts/artifacts-core/TASKS.md +18 -0
- package/skills/w/artifacts/artifacts-dev/DECISION.md +11 -0
- package/skills/w/artifacts/artifacts-dev/TECHNICAL-NOTE.md +81 -0
- package/skills/w/artifacts/artifacts-research/ANALYSIS-FILE.md +48 -0
- package/skills/w/artifacts/artifacts-research/CONCLUSIONS.md +20 -0
- package/skills/w/commands/README.md +116 -0
- package/skills/w/commands/export-diagrams.md +35 -0
- package/skills/w/commands/export-manuals.md +35 -0
- package/skills/w/commands/export-reports.md +35 -0
- package/skills/w/commands/export-scripts.md +35 -0
- package/skills/w/commands/plan-exec.md +46 -0
- package/skills/w/commands/plan-new.md +44 -0
- package/skills/w/commands/quick.md +39 -0
- package/skills/w/commands/spec-new.md +63 -0
- package/skills/w/commands/spec-refine.md +41 -0
- package/skills/w/commands/workspace-init.md +39 -0
- package/skills/w/exports/README.md +88 -0
- package/skills/w/exports/export-diagrams/SKILL.md +125 -0
- package/skills/w/exports/export-manuals/SKILL.md +127 -0
- package/skills/w/exports/export-reports/SKILL.md +115 -0
- package/skills/w/exports/export-scripts/SKILL.md +135 -0
- package/skills/w/hooks/README.md +15 -0
- package/skills/{agent-workflow → w}/hooks/hooks.template.json +2 -2
- package/skills/w/loops/README.md +118 -0
- package/skills/w/loops/plan-exec-loop/SKILL.md +161 -0
- package/skills/w/loops/plan-new-loop/SKILL.md +97 -0
- package/skills/w/loops/quick-loop/SKILL.md +102 -0
- package/skills/w/loops/spec-refine-loop/SKILL.md +222 -0
- package/skills/w/roles/README.md +154 -0
- package/skills/w/roles/coding-standards/SKILL.md +82 -0
- package/skills/w/roles/diagrams/SKILL.md +248 -0
- package/skills/w/roles/git/SKILL.md +98 -0
- package/skills/w/roles/research/SKILL.md +181 -0
- package/skills/w/roles/sql/SKILL.md +137 -0
- package/skills/w/roles/testing/SKILL.md +180 -0
- package/skills/w/roles/tools/SKILL.md +148 -0
- package/skills/w/roles/ui-spec/SKILL.md +136 -0
- package/skills/w/roles/writing/SKILL.md +90 -0
- package/skills/agent-workflow/LICENSE +0 -661
- package/skills/agent-workflow/MANUAL-FUNCIONAL.md +0 -298
- package/skills/agent-workflow/MANUAL-TECNICO.md +0 -271
- package/skills/agent-workflow/README.md +0 -74
- package/skills/agent-workflow/SKILL.md +0 -112
- package/skills/agent-workflow/commands/README.md +0 -26
- package/skills/agent-workflow/commands/compact.md +0 -24
- package/skills/agent-workflow/commands/doctor.md +0 -100
- package/skills/agent-workflow/commands/export-arq.md +0 -77
- package/skills/agent-workflow/commands/export-conclusions.md +0 -78
- package/skills/agent-workflow/commands/export-plan.md +0 -74
- package/skills/agent-workflow/commands/export-qa-note.md +0 -30
- package/skills/agent-workflow/commands/export-report.md +0 -78
- package/skills/agent-workflow/commands/export-requirement.md +0 -30
- package/skills/agent-workflow/commands/export-scripts.md +0 -82
- package/skills/agent-workflow/commands/export-tech-manuals.md +0 -75
- package/skills/agent-workflow/commands/export-tech-note.md +0 -30
- package/skills/agent-workflow/commands/hub-init.md +0 -58
- package/skills/agent-workflow/commands/migrate.md +0 -56
- package/skills/agent-workflow/commands/patch.md +0 -49
- package/skills/agent-workflow/commands/project-init.md +0 -60
- package/skills/agent-workflow/commands/resume.md +0 -22
- package/skills/agent-workflow/commands/rules.md +0 -41
- package/skills/agent-workflow/commands/session.md +0 -35
- package/skills/agent-workflow/docs/TEST-PLAN.md +0 -163
- package/skills/agent-workflow/doctrine/README.md +0 -15
- package/skills/agent-workflow/doctrine/compact/SKILL.md +0 -145
- package/skills/agent-workflow/doctrine/doctor/SKILL.md +0 -86
- package/skills/agent-workflow/doctrine/hub-init/SKILL.md +0 -77
- package/skills/agent-workflow/doctrine/hub-init/references/multiroot-manual.md +0 -51
- package/skills/agent-workflow/doctrine/implement/SKILL.md +0 -290
- package/skills/agent-workflow/doctrine/implement/references/branch-verification.md +0 -16
- package/skills/agent-workflow/doctrine/implement/references/design-md-template.md +0 -108
- package/skills/agent-workflow/doctrine/implement/references/rollback-guide.md +0 -83
- package/skills/agent-workflow/doctrine/migrate/SKILL.md +0 -281
- package/skills/agent-workflow/doctrine/project-init/SKILL.md +0 -100
- package/skills/agent-workflow/doctrine/refactor/SKILL.md +0 -208
- package/skills/agent-workflow/doctrine/refactor/references/refactor-md-template.md +0 -108
- package/skills/agent-workflow/doctrine/refactor/references/strangler-checklist.md +0 -116
- package/skills/agent-workflow/doctrine/resume/SKILL.md +0 -199
- package/skills/agent-workflow/doctrine/rules/SKILL.md +0 -250
- package/skills/agent-workflow/doctrine/session/SKILL.md +0 -470
- package/skills/agent-workflow/doctrine/session/references/auto-plan-rules.md +0 -63
- package/skills/agent-workflow/doctrine/session/references/backlog-template.md +0 -95
- package/skills/agent-workflow/doctrine/session/references/branch-verification.md +0 -198
- package/skills/agent-workflow/doctrine/session/references/commits-policy.md +0 -111
- package/skills/agent-workflow/doctrine/session/references/communication-style.md +0 -50
- package/skills/agent-workflow/doctrine/session/references/graduacion-routing.md +0 -88
- package/skills/agent-workflow/doctrine/session/references/lifecycle-deep.md +0 -160
- package/skills/agent-workflow/doctrine/session/references/prompts/C1-specialty-selection.md +0 -11
- package/skills/agent-workflow/doctrine/session/references/prompts/C2-cost-guard.md +0 -14
- package/skills/agent-workflow/doctrine/session/references/prompts/M1-closure-commit-prompt.md +0 -104
- package/skills/agent-workflow/doctrine/session/references/prompts/M10-next-step.md +0 -17
- package/skills/agent-workflow/doctrine/session/references/prompts/M11-context.md +0 -16
- package/skills/agent-workflow/doctrine/session/references/prompts/M13-closure-cleanup.md +0 -61
- package/skills/agent-workflow/doctrine/session/references/prompts/M2-branch-caso-A.md +0 -14
- package/skills/agent-workflow/doctrine/session/references/prompts/M3-branch-caso-C.md +0 -33
- package/skills/agent-workflow/doctrine/session/references/prompts/M4-cross-source-hard-gate.md +0 -33
- package/skills/agent-workflow/doctrine/session/references/prompts/M5-modality-analyze.md +0 -15
- package/skills/agent-workflow/doctrine/session/references/prompts/M6-phase-gate.md +0 -31
- package/skills/agent-workflow/doctrine/session/references/prompts/M7-refactor-legacy-detected.md +0 -28
- package/skills/agent-workflow/doctrine/session/references/prompts/M8-refactor-cleanup.md +0 -16
- package/skills/agent-workflow/doctrine/session/references/prompts/M9-contract-review.md +0 -39
- package/skills/agent-workflow/doctrine/session/references/prompts/S1-type-design.md +0 -15
- package/skills/agent-workflow/doctrine/session/references/prompts/S2-topic-change-detection.md +0 -14
- package/skills/agent-workflow/doctrine/session/references/prompts/S3-flow-detection.md +0 -28
- package/skills/agent-workflow/doctrine/session/references/prompts/S4-resume.md +0 -27
- package/skills/agent-workflow/doctrine/session/references/prompts/S5-post-compact.md +0 -17
- package/skills/agent-workflow/doctrine/session/references/prompts/S6-scope.md +0 -16
- package/skills/agent-workflow/doctrine/session/references/prompts/S7-design-review.md +0 -37
- package/skills/agent-workflow/doctrine/session/references/prompts-catalog.md +0 -213
- package/skills/agent-workflow/doctrine/session/references/sandbox-readonly-rules.md +0 -82
- package/skills/agent-workflow/doctrine/session/references/specialty-decision-tree.md +0 -56
- package/skills/agent-workflow/doctrine/session/references/topic-change-rules.md +0 -67
- package/skills/agent-workflow/exports/README.md +0 -15
- package/skills/agent-workflow/exports/export-arq/SKILL.md +0 -229
- package/skills/agent-workflow/exports/export-arq/references/lexico-tecnico.md +0 -94
- package/skills/agent-workflow/exports/export-arq/references/template-c4.md +0 -293
- package/skills/agent-workflow/exports/export-arq/references/template-plantuml.puml +0 -77
- package/skills/agent-workflow/exports/export-arq/references/template-structurizr.dsl +0 -72
- package/skills/agent-workflow/exports/export-arq/references/validations.md +0 -231
- package/skills/agent-workflow/exports/export-conclusions/SKILL.md +0 -169
- package/skills/agent-workflow/exports/export-conclusions/references/dedup-rules.md +0 -154
- package/skills/agent-workflow/exports/export-conclusions/references/template-conclusions.md +0 -158
- package/skills/agent-workflow/exports/export-plan/SKILL.md +0 -225
- package/skills/agent-workflow/exports/export-plan/references/state-transitions.md +0 -141
- package/skills/agent-workflow/exports/export-plan/references/template-plan.md +0 -132
- package/skills/agent-workflow/exports/export-qa-note/SKILL.md +0 -31
- package/skills/agent-workflow/exports/export-report/SKILL.md +0 -262
- package/skills/agent-workflow/exports/export-report/references/lexico.md +0 -174
- package/skills/agent-workflow/exports/export-report/references/template-a.md +0 -95
- package/skills/agent-workflow/exports/export-report/references/template-b.md +0 -221
- package/skills/agent-workflow/exports/export-report/references/template-c.md +0 -180
- package/skills/agent-workflow/exports/export-report/references/validations.md +0 -255
- package/skills/agent-workflow/exports/export-requirement/SKILL.md +0 -31
- package/skills/agent-workflow/exports/export-scripts/SKILL.md +0 -211
- package/skills/agent-workflow/exports/export-scripts/references/code-scan-recommendations.md +0 -83
- package/skills/agent-workflow/exports/export-scripts/references/deprecation-plan.md +0 -80
- package/skills/agent-workflow/exports/export-scripts/references/lexico-tecnico.md +0 -47
- package/skills/agent-workflow/exports/export-scripts/references/manifest-template.md +0 -265
- package/skills/agent-workflow/exports/export-scripts/references/readme-template.md +0 -49
- package/skills/agent-workflow/exports/export-scripts/references/theme-handling.md +0 -141
- package/skills/agent-workflow/exports/export-scripts/references/validations.md +0 -69
- package/skills/agent-workflow/exports/export-tech-manuals/SKILL.md +0 -214
- package/skills/agent-workflow/exports/export-tech-manuals/references/lexico-tecnico.md +0 -97
- package/skills/agent-workflow/exports/export-tech-manuals/references/template-index.md +0 -123
- package/skills/agent-workflow/exports/export-tech-manuals/references/template-manual.md +0 -143
- package/skills/agent-workflow/exports/export-tech-manuals/references/validations.md +0 -211
- package/skills/agent-workflow/exports/export-tech-note/SKILL.md +0 -31
- package/skills/agent-workflow/hooks/README.md +0 -15
- package/skills/agent-workflow/references/README.md +0 -12
- package/skills/agent-workflow/references/checkpoint.md +0 -59
- package/skills/agent-workflow/references/dev-only.md +0 -50
- package/skills/agent-workflow/references/doctor.md +0 -61
- package/skills/agent-workflow/references/history.md +0 -40
- package/skills/agent-workflow/references/hooks.md +0 -35
- package/skills/agent-workflow/references/legacy-anchors.md +0 -50
- package/skills/agent-workflow/references/mcp.md +0 -34
- package/skills/agent-workflow/references/objetivo-tasks.md +0 -64
- package/skills/agent-workflow/references/orchestration.md +0 -86
- package/skills/agent-workflow/references/profile-parametrization.md +0 -88
- package/skills/agent-workflow/references/self.md +0 -68
- package/skills/agent-workflow/references/session-mgmt.md +0 -109
- package/skills/agent-workflow/references/sources.md +0 -102
- package/skills/agent-workflow/specialties/README.md +0 -14
- package/skills/agent-workflow/specialties/analyze-conclude/SKILL.md +0 -175
- package/skills/agent-workflow/specialties/analyze-conclude/references/incident-classification.md +0 -61
- package/skills/agent-workflow/specialties/analyze-investigate/SKILL.md +0 -148
- package/skills/agent-workflow/specialties/analyze-investigate/references/cost-guard.md +0 -85
- package/skills/agent-workflow/specialties/analyze-synthesize/SKILL.md +0 -127
- package/skills/agent-workflow/specialties/design-brief/SKILL.md +0 -90
- package/skills/agent-workflow/specialties/design-deliver/SKILL.md +0 -121
- package/skills/agent-workflow/specialties/design-develop/SKILL.md +0 -115
- package/skills/agent-workflow/specialties/design-discover/SKILL.md +0 -103
- package/skills/agent-workflow/standards/README.md +0 -12
- package/skills/agent-workflow/standards/coding-standards/SKILL.md +0 -102
- package/skills/agent-workflow/standards/coding-standards/references/angular-typescript.md +0 -266
- package/skills/agent-workflow/standards/coding-standards/references/database-conventions.md +0 -170
- package/skills/agent-workflow/standards/coding-standards/references/fe-be-integration.md +0 -300
- package/skills/agent-workflow/standards/coding-standards/references/frontend-structure.md +0 -182
- package/skills/agent-workflow/standards/coding-standards/references/java-spring.md +0 -244
- package/skills/agent-workflow/standards/coding-standards/references/project-structure.md +0 -197
- package/skills/agent-workflow/standards/frontend-design/SKILL.md +0 -62
- package/skills/agent-workflow/standards/frontend-design/references/feedback-toasts-patterns.md +0 -249
- package/skills/agent-workflow/standards/frontend-design/references/form-patterns.md +0 -278
- package/skills/agent-workflow/standards/frontend-design/references/list-patterns.md +0 -256
- package/skills/agent-workflow/standards/frontend-design/references/modal-patterns.md +0 -220
- package/skills/agent-workflow/standards/frontend-design/references/navigation-patterns.md +0 -224
- package/skills/agent-workflow/standards/redaccion-simple/SKILL.md +0 -128
- package/skills/agent-workflow/standards/sql-rollback-generator/SKILL.md +0 -158
- package/skills/agent-workflow/standards/sql-rollback-generator/references/irreversible-checklist.md +0 -161
- package/skills/agent-workflow/standards/sql-rollback-generator/references/release-rollback.md +0 -133
- package/skills/agent-workflow/standards/sql-rollback-generator/references/rollback-patterns.md +0 -257
- package/skills/agent-workflow/standards/sql-script-organizer/SKILL.md +0 -243
- package/skills/agent-workflow/standards/sql-script-organizer/references/bundle-readme-template.md +0 -82
- package/skills/agent-workflow/standards/sql-script-organizer/references/categorization-rules.md +0 -122
- package/skills/agent-workflow/standards/sql-script-organizer/references/consolidation-cross-session.md +0 -125
- package/skills/agent-workflow/standards/sql-script-organizer/references/scripts-sql-format.md +0 -140
- package/skills/agent-workflow/standards/testing-strategy/SKILL.md +0 -113
- package/skills/agent-workflow/standards/testing-strategy/references/test-levels.md +0 -255
- package/skills/agent-workflow/workflows/README.md +0 -12
- package/skills/agent-workflow/workflows/analyze-workflow/SKILL.md +0 -84
- package/skills/agent-workflow/workflows/design-workflow/SKILL.md +0 -79
- package/skills/agent-workflow/workflows/dev-workflow/SKILL.md +0 -172
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
# Patrones de listado CRUD
|
|
2
|
-
|
|
3
|
-
Principios de diseño para vistas de listado de mantenimiento (tabla/grid con filtros, paginación y acciones por fila). Agnóstico a framework; los ejemplos usan utilities Bootstrap.
|
|
4
|
-
|
|
5
|
-
Para el código de stack (data-table, pagination, stores con signals), ver `coding-standards/references/<stack>.md`.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 1. Estructura de la vista
|
|
10
|
-
|
|
11
|
-
La vista de listado se compone de 4 bloques verticales:
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
┌──────────────────────────────────────────────────────────┐
|
|
15
|
-
│ Título + descripción [+ Nuevo] │ ← header
|
|
16
|
-
├──────────────────────────────────────────────────────────┤
|
|
17
|
-
│ ┌────────────────────────────────────────────────────┐ │
|
|
18
|
-
│ │ Filtros (texto / select / multi-select / fechas) │ │ ← filter card
|
|
19
|
-
│ └────────────────────────────────────────────────────┘ │
|
|
20
|
-
├──────────────────────────────────────────────────────────┤
|
|
21
|
-
│ ┌────────────────────────────────────────────────────┐ │
|
|
22
|
-
│ │ Tabla con columnas + acciones por fila │ │ ← data-table
|
|
23
|
-
│ │ Paginación integrada │ │ (+ pagination)
|
|
24
|
-
│ └────────────────────────────────────────────────────┘ │
|
|
25
|
-
└──────────────────────────────────────────────────────────┘
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Orden vertical fijo: **header → filtros → tabla + paginación**. No intercalar.
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## 2. Header con título, descripción y acción primaria
|
|
33
|
-
|
|
34
|
-
```html
|
|
35
|
-
<div class="mb-4">
|
|
36
|
-
<div class="d-flex justify-content-between align-items-center flex-wrap gap-3">
|
|
37
|
-
<div>
|
|
38
|
-
<h2 class="fw-bold mb-1">Usuarios</h2>
|
|
39
|
-
<p class="text-muted mb-0">Administra los usuarios del sistema.</p>
|
|
40
|
-
</div>
|
|
41
|
-
<button class="btn btn-primary">
|
|
42
|
-
<i class="fa fa-plus me-1"></i> Nuevo usuario
|
|
43
|
-
</button>
|
|
44
|
-
</div>
|
|
45
|
-
</div>
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
**Reglas:**
|
|
49
|
-
|
|
50
|
-
- `h2 fw-bold` para el título, `p text-muted` para la descripción (una línea).
|
|
51
|
-
- Acción primaria top-right con `btn btn-primary` + icono `fa fa-plus` + label "Nuevo <entidad>" / "Crear <entidad>".
|
|
52
|
-
- `flex-wrap gap-3` — en mobile el botón cae debajo del título sin solaparse.
|
|
53
|
-
- Label de acción: singular de la entidad, capitalizado ("Nuevo usuario", "Crear sucursal", "Nueva campaña").
|
|
54
|
-
|
|
55
|
-
**[shared-candidato] `page-header`** — se repite en 6+ vistas; amerita extracción con slots `[title]`, `[subtitle]`, `[action]`.
|
|
56
|
-
|
|
57
|
-
---
|
|
58
|
-
|
|
59
|
-
## 3. Filter card
|
|
60
|
-
|
|
61
|
-
```html
|
|
62
|
-
<div class="card mb-4">
|
|
63
|
-
<div class="card-body">
|
|
64
|
-
<form class="row g-3 align-items-end">
|
|
65
|
-
<div class="col-12 col-md-4">
|
|
66
|
-
<label class="form-label">Nombre</label>
|
|
67
|
-
<input type="text" class="form-control" placeholder="Buscar por nombre...">
|
|
68
|
-
</div>
|
|
69
|
-
<div class="col-12 col-md-4">
|
|
70
|
-
<label class="form-label">Estado</label>
|
|
71
|
-
<select class="form-select">...</select>
|
|
72
|
-
</div>
|
|
73
|
-
<div class="col-12 col-md-4">
|
|
74
|
-
<button class="btn btn-primary w-100"><i class="fa fa-search me-1"></i>Buscar</button>
|
|
75
|
-
</div>
|
|
76
|
-
</form>
|
|
77
|
-
</div>
|
|
78
|
-
</div>
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
**Reglas:**
|
|
82
|
-
|
|
83
|
-
- Contenedor: `card mb-4` → `card-body` → `form.row g-3 align-items-end`.
|
|
84
|
-
- Cada filtro en `col-12 col-md-X` (X = 3, 4, 6 según densidad). Label obligatorio (`form-label`).
|
|
85
|
-
- `align-items-end` alinea verticalmente inputs y botón al baseline del último elemento.
|
|
86
|
-
- **Submit automático preferido**: disparar búsqueda al cambiar valor del filtro (debounce 250-400ms en texto libre). Botón "Buscar" explícito sólo si el filtro es costoso (multi-select grande, rango de fechas amplio).
|
|
87
|
-
- **No colapsar en mobile** — los filtros quedan apilados `col-12` en pantallas pequeñas. Un acordeón/drawer se justifica sólo si hay >6 filtros.
|
|
88
|
-
|
|
89
|
-
**Patrones a evitar:**
|
|
90
|
-
|
|
91
|
-
- `ngModel` directo acoplado a propiedades del componente en vez de un FormGroup reactivo (dificulta reset y observación). El camino recomendado del stack vive en `coding-standards/references/angular-typescript.md`.
|
|
92
|
-
|
|
93
|
-
**[shared-candidato] `filter-panel`** — wrapper con `card + card-body + row g-3 align-items-end` y content projection para cada filtro.
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
## 4. Tabla con columnas dinámicas
|
|
98
|
-
|
|
99
|
-
Usar el componente shared `data-table` (existe en `@presentation/shared/components/data-table/`) en lugar de `<table>` HTML directo.
|
|
100
|
-
|
|
101
|
-
**Contrato del componente:**
|
|
102
|
-
|
|
103
|
-
- `[data]` — array del store/signal con los items.
|
|
104
|
-
- `[columns]` — array `TableColumn[]` con `{ key, header, template? }`.
|
|
105
|
-
- `[pageSize]`, `[pageSizeOptions]`, `[pageIndex]`, `[totalItems]`.
|
|
106
|
-
- `[emptyMessage]` — texto cuando no hay resultados.
|
|
107
|
-
- `(pageChange)` — emite cambio de página/size.
|
|
108
|
-
|
|
109
|
-
Las **columnas se definen en código** (no inline en HTML), con templates referenciados por `ViewChild` para acciones y badges:
|
|
110
|
-
|
|
111
|
-
```html
|
|
112
|
-
<app-data-table
|
|
113
|
-
[data]="store.items()"
|
|
114
|
-
[columns]="columns"
|
|
115
|
-
[pageSize]="pageSize"
|
|
116
|
-
[pageIndex]="pageIndex"
|
|
117
|
-
[totalItems]="store.total()"
|
|
118
|
-
emptyMessage="No se encontraron resultados"
|
|
119
|
-
(pageChange)="onPageChange($event)">
|
|
120
|
-
</app-data-table>
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
**Tabla interna:** `table table-striped table-hover` (defaults del data-table). Header con `font-weight: 600`. Alineaciones con utilities (`text-start`, `text-center`, `text-end`).
|
|
124
|
-
|
|
125
|
-
**Patrones a evitar:**
|
|
126
|
-
|
|
127
|
-
- Paginación manual con `slice()` sobre un array en memoria en el componente (observado en el módulo de campañas). El camino correcto es paginación server-side vía `data-table` + `pagination` y un store que llama al endpoint.
|
|
128
|
-
|
|
129
|
-
---
|
|
130
|
-
|
|
131
|
-
## 5. Acciones por fila
|
|
132
|
-
|
|
133
|
-
Columna final con `key: 'acciones'` (o `'options'`), header vacío o "Acciones", ancho mínimo. Dentro del template:
|
|
134
|
-
|
|
135
|
-
```html
|
|
136
|
-
<div class="d-flex gap-1">
|
|
137
|
-
<button class="btn btn-sm btn-light text-primary" ngbTooltip="Editar">
|
|
138
|
-
<i class="fa fa-pen"></i>
|
|
139
|
-
</button>
|
|
140
|
-
<button class="btn btn-sm btn-light text-primary" ngbTooltip="Duplicar">
|
|
141
|
-
<i class="fa fa-copy"></i>
|
|
142
|
-
</button>
|
|
143
|
-
<button class="btn btn-sm btn-light text-danger" ngbTooltip="Eliminar">
|
|
144
|
-
<i class="fa fa-trash"></i>
|
|
145
|
-
</button>
|
|
146
|
-
</div>
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
**Reglas:**
|
|
150
|
-
|
|
151
|
-
- Íconos sin texto (compact). Tooltip en cada botón (`ngbTooltip`, `matTooltip` o equivalente).
|
|
152
|
-
- `btn btn-sm btn-light` + color del texto según severidad (`text-primary` neutro, `text-danger` destructivo, `text-warning` cuidado).
|
|
153
|
-
- `d-flex gap-1` — separación mínima entre íconos.
|
|
154
|
-
- Máximo 3-4 acciones por fila. Si hay más, colapsar en menú kebab.
|
|
155
|
-
- Operación destructiva → **confirmación** (ver `feedback-toasts-patterns.md` §7).
|
|
156
|
-
- Si la fila es clickeable (abre detalle), usar `$event.stopPropagation()` en cada botón de acción para que no se dispare la navegación al click del botón.
|
|
157
|
-
|
|
158
|
-
---
|
|
159
|
-
|
|
160
|
-
## 6. Paginación
|
|
161
|
-
|
|
162
|
-
Usar el componente shared `pagination` dentro del `data-table` (o como hermano si la tabla es custom).
|
|
163
|
-
|
|
164
|
-
**Reglas:**
|
|
165
|
-
|
|
166
|
-
- Tamaños de página estándar: `[10, 25, 50, 100]` para listados grandes; `[5, 10, 20]` para listados pequeños/poco densos.
|
|
167
|
-
- Mostrar "X - Y de Z items" cerca del selector de tamaño.
|
|
168
|
-
- Botones first/last cuando `totalItems > pageSize * 5` (evita click repetido).
|
|
169
|
-
- **URL sincronizada:** opcional. Si se activa, guardar `page`, `pageSize` y filtros clave en query params para que recargar la página mantenga el estado. Si no, estado en el store local.
|
|
170
|
-
|
|
171
|
-
---
|
|
172
|
-
|
|
173
|
-
## 7. Empty states
|
|
174
|
-
|
|
175
|
-
Cuando `data.length === 0`, la tabla muestra una fila única con `colspan` de todas las columnas y el texto de `emptyMessage`:
|
|
176
|
-
|
|
177
|
-
```html
|
|
178
|
-
<tr>
|
|
179
|
-
<td [attr.colspan]="columns.length" class="text-center text-muted py-4">
|
|
180
|
-
{{ emptyMessage }}
|
|
181
|
-
</td>
|
|
182
|
-
</tr>
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
**Reglas:**
|
|
186
|
-
|
|
187
|
-
- Texto alineado al centro, `text-muted`, padding vertical generoso (`py-4`).
|
|
188
|
-
- Mensaje específico ("No se encontraron usuarios con esos filtros") > genérico ("Sin datos").
|
|
189
|
-
- Si la lista es vacía **porque nunca se cargó** (antes de aplicar filtros), considerar un empty state más rico con icono + botón "Crear el primero".
|
|
190
|
-
|
|
191
|
-
**[shared-candidato] `empty-state`** — componente reutilizable con `[icon]`, `[message]`, `[actionLabel]`, `[actionClick]`. Observado duplicado en 5+ vistas con clases custom divergentes (`.empty-state`, `.empty-permissions`, `.empty-transfer`, `.empty-roles`) — unificar.
|
|
192
|
-
|
|
193
|
-
---
|
|
194
|
-
|
|
195
|
-
## 8. Loading
|
|
196
|
-
|
|
197
|
-
**Page-level loading** (recomendado para navegación y carga inicial):
|
|
198
|
-
|
|
199
|
-
- Overlay global manejado por un servicio centralizado que se muestra con `show()` y oculta con `hide()`.
|
|
200
|
-
- Regla de pareo: cada `show()` debe tener un `hide()` correspondiente, tanto en éxito como en error.
|
|
201
|
-
|
|
202
|
-
**Inline loading** (opcional, para refresh interno de la tabla sin bloquear el resto de la UI):
|
|
203
|
-
|
|
204
|
-
- Spinner pequeño en el botón "Buscar" mientras el filtro vuela.
|
|
205
|
-
- `disabled` en los controles durante la carga.
|
|
206
|
-
|
|
207
|
-
**Regla:** no mezclar overlay global + spinner inline en la misma acción. Elegir uno según el contexto (carga inicial vs refresh de resultados).
|
|
208
|
-
|
|
209
|
-
---
|
|
210
|
-
|
|
211
|
-
## 9. Badges de estado
|
|
212
|
-
|
|
213
|
-
Para columnas tipo "Estado" con valor categórico (Activo/Inactivo, pendiente/aprobado):
|
|
214
|
-
|
|
215
|
-
```html
|
|
216
|
-
<span class="status-badge" [class.status-active]="activo" [class.status-inactive]="!activo">
|
|
217
|
-
{{ activo ? 'Activo' : 'Inactivo' }}
|
|
218
|
-
</span>
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
**Reglas:**
|
|
222
|
-
|
|
223
|
-
- Pill (`border-radius` redondeado), tipografía `font-size: 0.75rem`, padding `0.25rem 0.5rem`.
|
|
224
|
-
- Colores semánticos: verde (activo/aprobado), rojo (inactivo/rechazado), gris (neutro), amarillo (pendiente).
|
|
225
|
-
- **Colores unificados en todo el proyecto** (evitar `#365314` aquí y `#2e7d32` allá). Definir una vez, reutilizar.
|
|
226
|
-
|
|
227
|
-
**[shared-candidato] `status-badge`** — componente con `[status]: 'active'|'inactive'|'pending'|'neutral'` y `[label]`. Observado duplicado en 4+ vistas con colores levemente divergentes — unificar.
|
|
228
|
-
|
|
229
|
-
---
|
|
230
|
-
|
|
231
|
-
## 10. Decisiones implícitas en el codebase
|
|
232
|
-
|
|
233
|
-
Estas decisiones son las **recomendadas hacia adelante** (observadas en la mayoría del módulo admin):
|
|
234
|
-
|
|
235
|
-
- **FormGroup reactivo** para filtros (permite `valueChanges` + `reset()`, no ad-hoc sobre propiedades). Detalles técnicos: `coding-standards/references/angular-typescript.md`.
|
|
236
|
-
- **Store con signals** para estado del listado (items, total, pageIndex, filtros). Alternativas ad-hoc con propiedades en el componente son legado.
|
|
237
|
-
- **`data-table` + `pagination` shared** son la única forma de tabla paginada soportada. Paginación manual con `slice` es legado.
|
|
238
|
-
- **`NgbModal`** para cualquier diálogo de edición rápida (ver `modal-patterns.md`). `MatDialog` es legado.
|
|
239
|
-
|
|
240
|
-
---
|
|
241
|
-
|
|
242
|
-
## 11. Checklist de replicación
|
|
243
|
-
|
|
244
|
-
Al crear un listado nuevo (p. ej. `admin/nueva-entidad/lista`):
|
|
245
|
-
|
|
246
|
-
- [ ] Header: `h2 fw-bold` + `text-muted` descripción + botón "Nuevo <entidad>" top-right.
|
|
247
|
-
- [ ] Filter card con `card mb-4` + `row g-3 align-items-end`, 1 filtro por `col-12 col-md-X`.
|
|
248
|
-
- [ ] FormGroup reactivo para los filtros; submit automático con debounce en texto libre.
|
|
249
|
-
- [ ] `data-table` con `TableColumn[]` definido en código + `ViewChild` para templates de acciones.
|
|
250
|
-
- [ ] `pagination` integrada con tamaños `[10, 25, 50, 100]`.
|
|
251
|
-
- [ ] Columna de acciones: íconos con tooltip, `d-flex gap-1`, 3-4 máximo.
|
|
252
|
-
- [ ] `emptyMessage` específico; considerar `empty-state` rico si el listado nace vacío.
|
|
253
|
-
- [ ] Loading global paired `show()`/`hide()`.
|
|
254
|
-
- [ ] Badges de estado con el `status-badge` (o su equivalente inline, colores unificados).
|
|
255
|
-
- [ ] Revisar `shared/` antes de crear cualquier subcomponente nuevo (sección 10 de `form-patterns.md`).
|
|
256
|
-
- [ ] Estilo con utilities del framework; custom sólo para tema — ver `form-patterns.md` §11.
|
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
# Patrones de modales / diálogos
|
|
2
|
-
|
|
3
|
-
Principios de diseño para modales (diálogos sobre overlay): cuándo usarlos, layout interno, tamaños, formularios dentro, confirmaciones destructivas. Agnóstico a framework.
|
|
4
|
-
|
|
5
|
-
Para el código de stack (API de apertura/cierre, paso de data, suscripción a resultado), ver `coding-standards/references/<stack>.md`.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 1. Cuándo usar modal vs vista dedicada
|
|
10
|
-
|
|
11
|
-
**Modal:**
|
|
12
|
-
|
|
13
|
-
- Edición/creación **simple** (2-5 campos, < 30 s de interacción).
|
|
14
|
-
- Selector/buscador (p. ej. seleccionar sucursal entre N).
|
|
15
|
-
- Confirmación de acción destructiva.
|
|
16
|
-
- Presentación de detalle que no amerita ruta propia.
|
|
17
|
-
|
|
18
|
-
**Vista dedicada (ruta):**
|
|
19
|
-
|
|
20
|
-
- Edición **compleja** con múltiples dominios/cards (→ usar `form-patterns.md`).
|
|
21
|
-
- Workflow multi-step con navegación.
|
|
22
|
-
- Cuando la URL debe ser compartible/bookmarkeable.
|
|
23
|
-
- Cuando hay breadcrumbs relevantes.
|
|
24
|
-
|
|
25
|
-
**Regla:** si la interacción requiere desplazarse mucho verticalmente (scroll interno del modal) o el usuario va a quedarse más de 30 segundos, es una vista dedicada, no un modal.
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
## 2. Layout interno
|
|
30
|
-
|
|
31
|
-
Todo modal respeta tres zonas con separación visual:
|
|
32
|
-
|
|
33
|
-
```
|
|
34
|
-
┌─────────────────────────────────────────────────┐
|
|
35
|
-
│ Título [X] │ ← header
|
|
36
|
-
│ Descripción opcional │
|
|
37
|
-
├─────────────────────────────────────────────────┤
|
|
38
|
-
│ │
|
|
39
|
-
│ Contenido (form, lista, detalle) │ ← body
|
|
40
|
-
│ │
|
|
41
|
-
├─────────────────────────────────────────────────┤
|
|
42
|
-
│ [Cancelar] [Acción] │ ← footer
|
|
43
|
-
└─────────────────────────────────────────────────┘
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
**Implementación (Bootstrap):**
|
|
47
|
-
|
|
48
|
-
```html
|
|
49
|
-
<div class="modal-header">
|
|
50
|
-
<div>
|
|
51
|
-
<h4 class="modal-title fw-bold mb-1">Editar permiso</h4>
|
|
52
|
-
<p class="text-muted mb-0">Actualiza el código y descripción.</p>
|
|
53
|
-
</div>
|
|
54
|
-
<button type="button" class="btn-close" aria-label="Cerrar"></button>
|
|
55
|
-
</div>
|
|
56
|
-
|
|
57
|
-
<div class="modal-body">
|
|
58
|
-
<!-- Contenido -->
|
|
59
|
-
</div>
|
|
60
|
-
|
|
61
|
-
<div class="modal-footer">
|
|
62
|
-
<button type="button" class="btn btn-outline-secondary">Cancelar</button>
|
|
63
|
-
<button type="button" class="btn btn-primary">Guardar</button>
|
|
64
|
-
</div>
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
**Reglas:**
|
|
68
|
-
|
|
69
|
-
- Título en `h4 fw-bold`, descripción opcional en `p text-muted mb-0`.
|
|
70
|
-
- Botón `X` de cerrar arriba-derecha, alineado con el título.
|
|
71
|
-
- Body con padding default; si el contenido es largo, scroll interno (no empujar header/footer).
|
|
72
|
-
- Separadores visuales (border entre header/body/footer) los provee el framework por defecto.
|
|
73
|
-
|
|
74
|
-
---
|
|
75
|
-
|
|
76
|
-
## 3. Tamaños
|
|
77
|
-
|
|
78
|
-
Usar las categorías del framework, no anchos en píxeles:
|
|
79
|
-
|
|
80
|
-
| Tamaño | Uso típico |
|
|
81
|
-
|--------|------------|
|
|
82
|
-
| `sm` (~300 px) | Selectores cortos, confirmaciones. |
|
|
83
|
-
| `md` (~500 px) | Creación/edición simple con 2-4 campos. |
|
|
84
|
-
| `lg` (~800 px) | Formulario con varios dominios en 1 sola vista, tabla de selección. |
|
|
85
|
-
| `xl` (~1140 px) | Raramente; si se necesita, suele ser señal de que amerita vista dedicada. |
|
|
86
|
-
|
|
87
|
-
**Reglas:**
|
|
88
|
-
|
|
89
|
-
- `centered: true` — modal centrado verticalmente.
|
|
90
|
-
- `backdrop: 'static'` — no se cierra al click fuera (evita pérdidas accidentales en formularios).
|
|
91
|
-
- Responsive: en mobile el modal se adapta al viewport (no fijar anchos absolutos).
|
|
92
|
-
|
|
93
|
-
**Patrones a evitar:**
|
|
94
|
-
|
|
95
|
-
- Anchos fijos en píxeles (`width: '500px'`) — no se adaptan a viewport ni a configuración del usuario. El camino recomendado es usar las categorías del stack; ver `coding-standards/references/<stack>.md`.
|
|
96
|
-
|
|
97
|
-
---
|
|
98
|
-
|
|
99
|
-
## 4. Formulario dentro de modal
|
|
100
|
-
|
|
101
|
-
El modal que contiene un formulario sigue las mismas reglas visuales que un formulario de página (ver `form-patterns.md`) en miniatura:
|
|
102
|
-
|
|
103
|
-
- Un solo dominio por modal (no 4 cards — eso es vista dedicada).
|
|
104
|
-
- Labels siempre visibles (`form-label`), no usar placeholder como label.
|
|
105
|
-
- Validación inline debajo del campo con mensaje específico (ver `feedback-toasts-patterns.md` §4).
|
|
106
|
-
- Al intentar guardar con `form.invalid`: `markAllAsTouched()` + toast `warning` "Completa los campos obligatorios".
|
|
107
|
-
- Campos `readonly` con candado (`form-patterns.md` §3) se mantienen dentro del modal si aplica.
|
|
108
|
-
|
|
109
|
-
**Ejemplo mínimo:**
|
|
110
|
-
|
|
111
|
-
```html
|
|
112
|
-
<div class="modal-body">
|
|
113
|
-
<form [formGroup]="form" class="row g-3">
|
|
114
|
-
<div class="col-12">
|
|
115
|
-
<label class="form-label">Código</label>
|
|
116
|
-
<input type="text" class="form-control" formControlName="codigo">
|
|
117
|
-
<div class="invalid-message" *ngIf="form.controls.codigo.touched && form.controls.codigo.invalid">
|
|
118
|
-
Ingresa un código válido con formato <code>modulo.accion</code>.
|
|
119
|
-
</div>
|
|
120
|
-
</div>
|
|
121
|
-
</form>
|
|
122
|
-
</div>
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
---
|
|
126
|
-
|
|
127
|
-
## 5. Footer: botones y estados
|
|
128
|
-
|
|
129
|
-
**Alineación:** `Cancelar` (outline-secondary) a la izquierda, **acción primaria** (`btn-primary`) a la derecha. El framework coloca ambos a la derecha por default; si se quiere espaciado explícito, usar utilities (`justify-content-between`).
|
|
130
|
-
|
|
131
|
-
**Textos estándar:**
|
|
132
|
-
|
|
133
|
-
- Izquierda: `Cancelar` siempre.
|
|
134
|
-
- Derecha: `Guardar` / `Guardar cambios` / `Continuar` / `Confirmar` según contexto. Usar el verbo más específico disponible.
|
|
135
|
-
|
|
136
|
-
**Loading state en el botón primario mientras vuela la request:**
|
|
137
|
-
|
|
138
|
-
```html
|
|
139
|
-
<button class="btn btn-primary" [disabled]="saving">
|
|
140
|
-
<span *ngIf="saving" class="spinner-border spinner-border-sm me-1"></span>
|
|
141
|
-
{{ saving ? 'Guardando...' : 'Guardar' }}
|
|
142
|
-
</button>
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
**Reglas:**
|
|
146
|
-
|
|
147
|
-
- `disabled` **en ambos botones** mientras se guarda (cancelar también, para que el usuario no descarte el modal durante la request).
|
|
148
|
-
- El spinner inline en el botón es feedback local suficiente — no mostrar overlay global **y** spinner inline a la vez.
|
|
149
|
-
|
|
150
|
-
---
|
|
151
|
-
|
|
152
|
-
## 6. Resultado al cerrar
|
|
153
|
-
|
|
154
|
-
Convención del payload al cerrar el modal con éxito:
|
|
155
|
-
|
|
156
|
-
```ts
|
|
157
|
-
{ saved: true, data: { /* la entidad guardada */ } }
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
El caller inspecciona `saved` para decidir si refrescar la lista. Si el usuario cancela (X, ESC, botón Cancelar), el modal se descarta sin payload.
|
|
161
|
-
|
|
162
|
-
**Regla:** ser consistente — **todos** los modales del proyecto siguen la misma convención de payload. Detalles técnicos de la API de cierre viven en `coding-standards/references/<stack>.md`.
|
|
163
|
-
|
|
164
|
-
---
|
|
165
|
-
|
|
166
|
-
## 7. Confirmación de acciones destructivas
|
|
167
|
-
|
|
168
|
-
Antes de eliminar, desactivar, archivar — **siempre** una confirmación explícita:
|
|
169
|
-
|
|
170
|
-
```
|
|
171
|
-
┌─────────────────────────────────────┐
|
|
172
|
-
│ ⚠ ¿Eliminar este elemento? │
|
|
173
|
-
│ │
|
|
174
|
-
│ El elemento 'XYZ' se eliminará. │
|
|
175
|
-
│ Esta acción no se puede deshacer. │
|
|
176
|
-
│ │
|
|
177
|
-
│ [Cancelar] [Eliminar] │
|
|
178
|
-
└─────────────────────────────────────┘
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
**Reglas:**
|
|
182
|
-
|
|
183
|
-
- Tamaño `sm` o `md` (confirmación es corta).
|
|
184
|
-
- Título con icono de advertencia + pregunta clara en 1 línea.
|
|
185
|
-
- Body con 1-2 líneas explicando el impacto (qué se elimina, si es reversible).
|
|
186
|
-
- Botón primario es la acción **destructiva** con color de peligro (`btn-danger`), no `btn-primary`.
|
|
187
|
-
- Label del botón destructivo: "Eliminar" / "Desactivar" — nunca "Sí" o "OK".
|
|
188
|
-
- `reverseButtons` si el framework lo permite, para que Cancelar quede a la izquierda (default seguro).
|
|
189
|
-
|
|
190
|
-
**[shared-candidato] `confirm-dialog`** — componente reutilizable con `[title]`, `[message]`, `[confirmLabel]`, `[cancelLabel]`, `[severity]: 'danger'|'warning'|'info'`. Observado hoy como tres caminos distintos (`window.confirm()` del browser, `Swal.fire()` de SweetAlert2, y modales ad-hoc) — unificar en uno solo.
|
|
191
|
-
|
|
192
|
-
---
|
|
193
|
-
|
|
194
|
-
## 8. Stack del proyecto
|
|
195
|
-
|
|
196
|
-
El proyecto usa **Angular + Bootstrap**. En este contexto:
|
|
197
|
-
|
|
198
|
-
- **Recomendado:** `NgbModal` de ng-bootstrap para todos los modales nuevos (admin lo usa consistentemente).
|
|
199
|
-
- **Legado:** `MatDialog` de Angular Material existe en módulos antiguos (`pages/` de contabilidad, identidad, seguros). **No crear nuevo código con MatDialog.** Cuando se toque uno existente por bugfix, respetar su API local.
|
|
200
|
-
- **Nunca:** modales artesanales con `.modal` + overlay custom CSS. Un módulo lo hace (campañas) y es deuda técnica; no replicar.
|
|
201
|
-
|
|
202
|
-
El detalle de cómo abrir/cerrar cada uno (signature de `.open()`, paso de `data`, suscripción a `.result` o `.afterClosed`) vive en `coding-standards/references/angular-typescript.md`.
|
|
203
|
-
|
|
204
|
-
---
|
|
205
|
-
|
|
206
|
-
## 9. Checklist de replicación
|
|
207
|
-
|
|
208
|
-
Al crear un modal nuevo:
|
|
209
|
-
|
|
210
|
-
- [ ] Evaluar si es modal o vista dedicada (regla: < 30 s de interacción, 1 dominio).
|
|
211
|
-
- [ ] Librería `NgbModal` (no `MatDialog` para código nuevo).
|
|
212
|
-
- [ ] Tamaño por categoría (`sm`/`md`/`lg`), no pixels.
|
|
213
|
-
- [ ] `centered: true` + `backdrop: 'static'`.
|
|
214
|
-
- [ ] Header con `h4 fw-bold` + descripción opcional + `btn-close`.
|
|
215
|
-
- [ ] Body con padding default; scroll interno si el contenido crece.
|
|
216
|
-
- [ ] Footer: Cancelar izq + acción primaria der; loading en el primario.
|
|
217
|
-
- [ ] Si el modal tiene formulario, aplicar reglas de `form-patterns.md`.
|
|
218
|
-
- [ ] Convención de resultado: `{ saved: true, data }` o `undefined` en cancelación.
|
|
219
|
-
- [ ] Para confirmación destructiva: usar `confirm-dialog` (si existe) o replicar el patrón §7 hasta que se extraiga.
|
|
220
|
-
- [ ] Revisar `shared/` antes de crear helpers o subcomponentes propios.
|