@etus/seven-skill 0.1.0-beta.3 → 0.1.0-beta.5
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/skills/seven/SKILL.md +172 -0
- package/.agents/skills/seven/agents/seven_asset_producer.toml +37 -0
- package/.agents/skills/seven/agents/seven_finish_reviewer.toml +33 -0
- package/.agents/skills/seven/agents/seven_manual_edit_applier.toml +43 -0
- package/.agents/skills/seven/reference/adapt.md +34 -0
- package/.agents/skills/seven/reference/animate.md +31 -0
- package/.agents/skills/seven/reference/app-shell.md +152 -0
- package/.agents/skills/seven/reference/audit.md +122 -0
- package/.agents/skills/seven/reference/bolder.md +34 -0
- package/.agents/skills/seven/reference/brand.md +31 -0
- package/.agents/skills/seven/reference/clarify.md +76 -0
- package/.agents/skills/seven/reference/color-and-contrast.md +84 -0
- package/.agents/skills/seven/reference/colorize.md +31 -0
- package/.agents/skills/seven/reference/critique.md +53 -0
- package/.agents/skills/seven/reference/delight.md +30 -0
- package/.agents/skills/seven/reference/distill.md +30 -0
- package/.agents/skills/seven/reference/doctor.md +9 -0
- package/.agents/skills/seven/reference/document.md +36 -0
- package/.agents/skills/seven/reference/evaluations.md +44 -0
- package/.agents/skills/seven/reference/exceptions.md +7 -0
- package/.agents/skills/seven/reference/extract.md +42 -0
- package/.agents/skills/seven/reference/harden.md +36 -0
- package/.agents/skills/seven/reference/hooks.md +11 -0
- package/.agents/skills/seven/reference/init.md +5 -0
- package/.agents/skills/seven/reference/layout.md +33 -0
- package/.agents/skills/seven/reference/live.md +106 -0
- package/.agents/skills/seven/reference/motion-design.md +71 -0
- package/.agents/skills/seven/reference/onboard.md +35 -0
- package/.agents/skills/seven/reference/optimize.md +34 -0
- package/.agents/skills/seven/reference/overdrive.md +32 -0
- package/.agents/skills/seven/reference/polish.md +55 -0
- package/.agents/skills/seven/reference/product.md +43 -0
- package/.agents/skills/seven/reference/quieter.md +31 -0
- package/.agents/skills/seven/reference/routing.md +28 -0
- package/.agents/skills/seven/reference/setup.md +38 -0
- package/.agents/skills/seven/reference/shape.md +85 -0
- package/.agents/skills/seven/reference/spatial-design.md +60 -0
- package/.agents/skills/seven/reference/typeset.md +28 -0
- package/.agents/skills/seven/reference/typography.md +43 -0
- package/.agents/skills/seven/reference/ux-writing.md +47 -0
- package/.agents/skills/seven/reference/visual-probes.md +36 -0
- package/.agents/skills/seven/scripts/context-signals.mjs +95 -0
- package/.agents/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.agents/skills/seven/scripts/load-context.mjs +111 -0
- package/.agents/skills/seven/scripts/run-seven.mjs +47 -0
- package/.agents/skills/seven/scripts/update-check.mjs +120 -0
- package/.claude/agents/seven-asset-producer.md +40 -0
- package/.claude/agents/seven-finish-reviewer.md +36 -0
- package/.claude/agents/seven-manual-edit-applier.md +46 -0
- package/.claude/skills/seven/SKILL.md +134 -123
- package/.claude/skills/seven/reference/adapt.md +34 -0
- package/.claude/skills/seven/reference/animate.md +31 -0
- package/.claude/skills/seven/reference/app-shell.md +100 -18
- package/.claude/skills/seven/reference/audit.md +6 -4
- package/.claude/skills/seven/reference/bolder.md +34 -0
- package/.claude/skills/seven/reference/brand.md +21 -14
- package/.claude/skills/seven/reference/clarify.md +2 -2
- package/.claude/skills/seven/reference/colorize.md +31 -0
- package/.claude/skills/seven/reference/critique.md +53 -0
- package/.claude/skills/seven/reference/delight.md +30 -0
- package/.claude/skills/seven/reference/distill.md +30 -0
- package/.claude/skills/seven/reference/doctor.md +9 -0
- package/.claude/skills/seven/reference/document.md +36 -0
- package/.claude/skills/seven/reference/evaluations.md +44 -0
- package/.claude/skills/seven/reference/exceptions.md +7 -0
- package/.claude/skills/seven/reference/extract.md +42 -0
- package/.claude/skills/seven/reference/harden.md +36 -0
- package/.claude/skills/seven/reference/hooks.md +11 -0
- package/.claude/skills/seven/reference/init.md +5 -0
- package/.claude/skills/seven/reference/layout.md +33 -0
- package/.claude/skills/seven/reference/live.md +106 -0
- package/.claude/skills/seven/reference/motion-design.md +1 -1
- package/.claude/skills/seven/reference/onboard.md +35 -0
- package/.claude/skills/seven/reference/optimize.md +34 -0
- package/.claude/skills/seven/reference/overdrive.md +32 -0
- package/.claude/skills/seven/reference/polish.md +5 -5
- package/.claude/skills/seven/reference/product.md +2 -4
- package/.claude/skills/seven/reference/quieter.md +31 -0
- package/.claude/skills/seven/reference/routing.md +28 -0
- package/.claude/skills/seven/reference/setup.md +38 -0
- package/.claude/skills/seven/reference/shape.md +5 -5
- package/.claude/skills/seven/reference/spatial-design.md +3 -3
- package/.claude/skills/seven/reference/typeset.md +28 -0
- package/.claude/skills/seven/reference/typography.md +1 -1
- package/.claude/skills/seven/reference/visual-probes.md +36 -0
- package/.claude/skills/seven/scripts/context-signals.mjs +95 -0
- package/.claude/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.claude/skills/seven/scripts/load-context.mjs +85 -58
- package/.claude/skills/seven/scripts/run-seven.mjs +47 -0
- package/.claude/skills/seven/scripts/update-check.mjs +120 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +8 -3
- package/.cursor/skills/seven/SKILL.md +172 -0
- package/.cursor/skills/seven/reference/adapt.md +34 -0
- package/.cursor/skills/seven/reference/animate.md +31 -0
- package/.cursor/skills/seven/reference/app-shell.md +152 -0
- package/.cursor/skills/seven/reference/audit.md +122 -0
- package/.cursor/skills/seven/reference/bolder.md +34 -0
- package/.cursor/skills/seven/reference/brand.md +31 -0
- package/.cursor/skills/seven/reference/clarify.md +76 -0
- package/.cursor/skills/seven/reference/color-and-contrast.md +84 -0
- package/.cursor/skills/seven/reference/colorize.md +31 -0
- package/.cursor/skills/seven/reference/critique.md +53 -0
- package/.cursor/skills/seven/reference/delight.md +30 -0
- package/.cursor/skills/seven/reference/distill.md +30 -0
- package/.cursor/skills/seven/reference/doctor.md +9 -0
- package/.cursor/skills/seven/reference/document.md +36 -0
- package/.cursor/skills/seven/reference/evaluations.md +44 -0
- package/.cursor/skills/seven/reference/exceptions.md +7 -0
- package/.cursor/skills/seven/reference/extract.md +42 -0
- package/.cursor/skills/seven/reference/harden.md +36 -0
- package/.cursor/skills/seven/reference/hooks.md +11 -0
- package/.cursor/skills/seven/reference/init.md +5 -0
- package/.cursor/skills/seven/reference/layout.md +33 -0
- package/.cursor/skills/seven/reference/live.md +106 -0
- package/.cursor/skills/seven/reference/motion-design.md +71 -0
- package/.cursor/skills/seven/reference/onboard.md +35 -0
- package/.cursor/skills/seven/reference/optimize.md +34 -0
- package/.cursor/skills/seven/reference/overdrive.md +32 -0
- package/.cursor/skills/seven/reference/polish.md +55 -0
- package/.cursor/skills/seven/reference/product.md +43 -0
- package/.cursor/skills/seven/reference/quieter.md +31 -0
- package/.cursor/skills/seven/reference/routing.md +28 -0
- package/.cursor/skills/seven/reference/setup.md +38 -0
- package/.cursor/skills/seven/reference/shape.md +85 -0
- package/.cursor/skills/seven/reference/spatial-design.md +60 -0
- package/.cursor/skills/seven/reference/typeset.md +28 -0
- package/.cursor/skills/seven/reference/typography.md +43 -0
- package/.cursor/skills/seven/reference/ux-writing.md +47 -0
- package/.cursor/skills/seven/reference/visual-probes.md +36 -0
- package/.cursor/skills/seven/scripts/context-signals.mjs +95 -0
- package/.cursor/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.cursor/skills/seven/scripts/load-context.mjs +111 -0
- package/.cursor/skills/seven/scripts/run-seven.mjs +47 -0
- package/.cursor/skills/seven/scripts/update-check.mjs +120 -0
- package/.gemini/skills/seven/SKILL.md +171 -0
- package/.gemini/skills/seven/reference/adapt.md +34 -0
- package/.gemini/skills/seven/reference/animate.md +31 -0
- package/.gemini/skills/seven/reference/app-shell.md +152 -0
- package/.gemini/skills/seven/reference/audit.md +122 -0
- package/.gemini/skills/seven/reference/bolder.md +34 -0
- package/.gemini/skills/seven/reference/brand.md +31 -0
- package/.gemini/skills/seven/reference/clarify.md +76 -0
- package/.gemini/skills/seven/reference/color-and-contrast.md +84 -0
- package/.gemini/skills/seven/reference/colorize.md +31 -0
- package/.gemini/skills/seven/reference/critique.md +53 -0
- package/.gemini/skills/seven/reference/delight.md +30 -0
- package/.gemini/skills/seven/reference/distill.md +30 -0
- package/.gemini/skills/seven/reference/doctor.md +9 -0
- package/.gemini/skills/seven/reference/document.md +36 -0
- package/.gemini/skills/seven/reference/evaluations.md +44 -0
- package/.gemini/skills/seven/reference/exceptions.md +7 -0
- package/.gemini/skills/seven/reference/extract.md +42 -0
- package/.gemini/skills/seven/reference/harden.md +36 -0
- package/.gemini/skills/seven/reference/hooks.md +11 -0
- package/.gemini/skills/seven/reference/init.md +5 -0
- package/.gemini/skills/seven/reference/layout.md +33 -0
- package/.gemini/skills/seven/reference/live.md +106 -0
- package/.gemini/skills/seven/reference/motion-design.md +71 -0
- package/.gemini/skills/seven/reference/onboard.md +35 -0
- package/.gemini/skills/seven/reference/optimize.md +34 -0
- package/.gemini/skills/seven/reference/overdrive.md +32 -0
- package/.gemini/skills/seven/reference/polish.md +55 -0
- package/.gemini/skills/seven/reference/product.md +43 -0
- package/.gemini/skills/seven/reference/quieter.md +31 -0
- package/.gemini/skills/seven/reference/routing.md +28 -0
- package/.gemini/skills/seven/reference/setup.md +38 -0
- package/.gemini/skills/seven/reference/shape.md +85 -0
- package/.gemini/skills/seven/reference/spatial-design.md +60 -0
- package/.gemini/skills/seven/reference/typeset.md +28 -0
- package/.gemini/skills/seven/reference/typography.md +43 -0
- package/.gemini/skills/seven/reference/ux-writing.md +47 -0
- package/.gemini/skills/seven/reference/visual-probes.md +36 -0
- package/.gemini/skills/seven/scripts/context-signals.mjs +95 -0
- package/.gemini/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.gemini/skills/seven/scripts/load-context.mjs +111 -0
- package/.gemini/skills/seven/scripts/run-seven.mjs +47 -0
- package/.gemini/skills/seven/scripts/update-check.mjs +120 -0
- package/.grok/agents/seven-asset-producer.md +40 -0
- package/.grok/agents/seven-finish-reviewer.md +36 -0
- package/.grok/agents/seven-manual-edit-applier.md +46 -0
- package/.grok/skills/seven/SKILL.md +176 -0
- package/.grok/skills/seven/reference/adapt.md +34 -0
- package/.grok/skills/seven/reference/animate.md +31 -0
- package/.grok/skills/seven/reference/app-shell.md +152 -0
- package/.grok/skills/seven/reference/audit.md +122 -0
- package/.grok/skills/seven/reference/bolder.md +34 -0
- package/.grok/skills/seven/reference/brand.md +31 -0
- package/.grok/skills/seven/reference/clarify.md +76 -0
- package/.grok/skills/seven/reference/color-and-contrast.md +84 -0
- package/.grok/skills/seven/reference/colorize.md +31 -0
- package/.grok/skills/seven/reference/critique.md +53 -0
- package/.grok/skills/seven/reference/delight.md +30 -0
- package/.grok/skills/seven/reference/distill.md +30 -0
- package/.grok/skills/seven/reference/doctor.md +9 -0
- package/.grok/skills/seven/reference/document.md +36 -0
- package/.grok/skills/seven/reference/evaluations.md +44 -0
- package/.grok/skills/seven/reference/exceptions.md +7 -0
- package/.grok/skills/seven/reference/extract.md +42 -0
- package/.grok/skills/seven/reference/harden.md +36 -0
- package/.grok/skills/seven/reference/hooks.md +11 -0
- package/.grok/skills/seven/reference/init.md +5 -0
- package/.grok/skills/seven/reference/layout.md +33 -0
- package/.grok/skills/seven/reference/live.md +106 -0
- package/.grok/skills/seven/reference/motion-design.md +71 -0
- package/.grok/skills/seven/reference/onboard.md +35 -0
- package/.grok/skills/seven/reference/optimize.md +34 -0
- package/.grok/skills/seven/reference/overdrive.md +32 -0
- package/.grok/skills/seven/reference/polish.md +55 -0
- package/.grok/skills/seven/reference/product.md +43 -0
- package/.grok/skills/seven/reference/quieter.md +31 -0
- package/.grok/skills/seven/reference/routing.md +28 -0
- package/.grok/skills/seven/reference/setup.md +38 -0
- package/.grok/skills/seven/reference/shape.md +85 -0
- package/.grok/skills/seven/reference/spatial-design.md +60 -0
- package/.grok/skills/seven/reference/typeset.md +28 -0
- package/.grok/skills/seven/reference/typography.md +43 -0
- package/.grok/skills/seven/reference/ux-writing.md +47 -0
- package/.grok/skills/seven/reference/visual-probes.md +36 -0
- package/.grok/skills/seven/scripts/context-signals.mjs +95 -0
- package/.grok/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.grok/skills/seven/scripts/load-context.mjs +111 -0
- package/.grok/skills/seven/scripts/run-seven.mjs +47 -0
- package/.grok/skills/seven/scripts/update-check.mjs +120 -0
- package/.kiro/skills/seven/SKILL.md +172 -0
- package/.kiro/skills/seven/reference/adapt.md +34 -0
- package/.kiro/skills/seven/reference/animate.md +31 -0
- package/.kiro/skills/seven/reference/app-shell.md +152 -0
- package/.kiro/skills/seven/reference/audit.md +122 -0
- package/.kiro/skills/seven/reference/bolder.md +34 -0
- package/.kiro/skills/seven/reference/brand.md +31 -0
- package/.kiro/skills/seven/reference/clarify.md +76 -0
- package/.kiro/skills/seven/reference/color-and-contrast.md +84 -0
- package/.kiro/skills/seven/reference/colorize.md +31 -0
- package/.kiro/skills/seven/reference/critique.md +53 -0
- package/.kiro/skills/seven/reference/delight.md +30 -0
- package/.kiro/skills/seven/reference/distill.md +30 -0
- package/.kiro/skills/seven/reference/doctor.md +9 -0
- package/.kiro/skills/seven/reference/document.md +36 -0
- package/.kiro/skills/seven/reference/evaluations.md +44 -0
- package/.kiro/skills/seven/reference/exceptions.md +7 -0
- package/.kiro/skills/seven/reference/extract.md +42 -0
- package/.kiro/skills/seven/reference/harden.md +36 -0
- package/.kiro/skills/seven/reference/hooks.md +11 -0
- package/.kiro/skills/seven/reference/init.md +5 -0
- package/.kiro/skills/seven/reference/layout.md +33 -0
- package/.kiro/skills/seven/reference/live.md +106 -0
- package/.kiro/skills/seven/reference/motion-design.md +71 -0
- package/.kiro/skills/seven/reference/onboard.md +35 -0
- package/.kiro/skills/seven/reference/optimize.md +34 -0
- package/.kiro/skills/seven/reference/overdrive.md +32 -0
- package/.kiro/skills/seven/reference/polish.md +55 -0
- package/.kiro/skills/seven/reference/product.md +43 -0
- package/.kiro/skills/seven/reference/quieter.md +31 -0
- package/.kiro/skills/seven/reference/routing.md +28 -0
- package/.kiro/skills/seven/reference/setup.md +38 -0
- package/.kiro/skills/seven/reference/shape.md +85 -0
- package/.kiro/skills/seven/reference/spatial-design.md +60 -0
- package/.kiro/skills/seven/reference/typeset.md +28 -0
- package/.kiro/skills/seven/reference/typography.md +43 -0
- package/.kiro/skills/seven/reference/ux-writing.md +47 -0
- package/.kiro/skills/seven/reference/visual-probes.md +36 -0
- package/.kiro/skills/seven/scripts/context-signals.mjs +95 -0
- package/.kiro/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.kiro/skills/seven/scripts/load-context.mjs +111 -0
- package/.kiro/skills/seven/scripts/run-seven.mjs +47 -0
- package/.kiro/skills/seven/scripts/update-check.mjs +120 -0
- package/.opencode/skills/seven/SKILL.md +176 -0
- package/.opencode/skills/seven/reference/adapt.md +34 -0
- package/.opencode/skills/seven/reference/animate.md +31 -0
- package/.opencode/skills/seven/reference/app-shell.md +152 -0
- package/.opencode/skills/seven/reference/audit.md +122 -0
- package/.opencode/skills/seven/reference/bolder.md +34 -0
- package/.opencode/skills/seven/reference/brand.md +31 -0
- package/.opencode/skills/seven/reference/clarify.md +76 -0
- package/.opencode/skills/seven/reference/color-and-contrast.md +84 -0
- package/.opencode/skills/seven/reference/colorize.md +31 -0
- package/.opencode/skills/seven/reference/critique.md +53 -0
- package/.opencode/skills/seven/reference/delight.md +30 -0
- package/.opencode/skills/seven/reference/distill.md +30 -0
- package/.opencode/skills/seven/reference/doctor.md +9 -0
- package/.opencode/skills/seven/reference/document.md +36 -0
- package/.opencode/skills/seven/reference/evaluations.md +44 -0
- package/.opencode/skills/seven/reference/exceptions.md +7 -0
- package/.opencode/skills/seven/reference/extract.md +42 -0
- package/.opencode/skills/seven/reference/harden.md +36 -0
- package/.opencode/skills/seven/reference/hooks.md +11 -0
- package/.opencode/skills/seven/reference/init.md +5 -0
- package/.opencode/skills/seven/reference/layout.md +33 -0
- package/.opencode/skills/seven/reference/live.md +106 -0
- package/.opencode/skills/seven/reference/motion-design.md +71 -0
- package/.opencode/skills/seven/reference/onboard.md +35 -0
- package/.opencode/skills/seven/reference/optimize.md +34 -0
- package/.opencode/skills/seven/reference/overdrive.md +32 -0
- package/.opencode/skills/seven/reference/polish.md +55 -0
- package/.opencode/skills/seven/reference/product.md +43 -0
- package/.opencode/skills/seven/reference/quieter.md +31 -0
- package/.opencode/skills/seven/reference/routing.md +28 -0
- package/.opencode/skills/seven/reference/setup.md +38 -0
- package/.opencode/skills/seven/reference/shape.md +85 -0
- package/.opencode/skills/seven/reference/spatial-design.md +60 -0
- package/.opencode/skills/seven/reference/typeset.md +28 -0
- package/.opencode/skills/seven/reference/typography.md +43 -0
- package/.opencode/skills/seven/reference/ux-writing.md +47 -0
- package/.opencode/skills/seven/reference/visual-probes.md +36 -0
- package/.opencode/skills/seven/scripts/context-signals.mjs +95 -0
- package/.opencode/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.opencode/skills/seven/scripts/load-context.mjs +111 -0
- package/.opencode/skills/seven/scripts/run-seven.mjs +47 -0
- package/.opencode/skills/seven/scripts/update-check.mjs +120 -0
- package/.pi/skills/seven/SKILL.md +174 -0
- package/.pi/skills/seven/reference/adapt.md +34 -0
- package/.pi/skills/seven/reference/animate.md +31 -0
- package/.pi/skills/seven/reference/app-shell.md +152 -0
- package/.pi/skills/seven/reference/audit.md +122 -0
- package/.pi/skills/seven/reference/bolder.md +34 -0
- package/.pi/skills/seven/reference/brand.md +31 -0
- package/.pi/skills/seven/reference/clarify.md +76 -0
- package/.pi/skills/seven/reference/color-and-contrast.md +84 -0
- package/.pi/skills/seven/reference/colorize.md +31 -0
- package/.pi/skills/seven/reference/critique.md +53 -0
- package/.pi/skills/seven/reference/delight.md +30 -0
- package/.pi/skills/seven/reference/distill.md +30 -0
- package/.pi/skills/seven/reference/doctor.md +9 -0
- package/.pi/skills/seven/reference/document.md +36 -0
- package/.pi/skills/seven/reference/evaluations.md +44 -0
- package/.pi/skills/seven/reference/exceptions.md +7 -0
- package/.pi/skills/seven/reference/extract.md +42 -0
- package/.pi/skills/seven/reference/harden.md +36 -0
- package/.pi/skills/seven/reference/hooks.md +11 -0
- package/.pi/skills/seven/reference/init.md +5 -0
- package/.pi/skills/seven/reference/layout.md +33 -0
- package/.pi/skills/seven/reference/live.md +106 -0
- package/.pi/skills/seven/reference/motion-design.md +71 -0
- package/.pi/skills/seven/reference/onboard.md +35 -0
- package/.pi/skills/seven/reference/optimize.md +34 -0
- package/.pi/skills/seven/reference/overdrive.md +32 -0
- package/.pi/skills/seven/reference/polish.md +55 -0
- package/.pi/skills/seven/reference/product.md +43 -0
- package/.pi/skills/seven/reference/quieter.md +31 -0
- package/.pi/skills/seven/reference/routing.md +28 -0
- package/.pi/skills/seven/reference/setup.md +38 -0
- package/.pi/skills/seven/reference/shape.md +85 -0
- package/.pi/skills/seven/reference/spatial-design.md +60 -0
- package/.pi/skills/seven/reference/typeset.md +28 -0
- package/.pi/skills/seven/reference/typography.md +43 -0
- package/.pi/skills/seven/reference/ux-writing.md +47 -0
- package/.pi/skills/seven/reference/visual-probes.md +36 -0
- package/.pi/skills/seven/scripts/context-signals.mjs +95 -0
- package/.pi/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.pi/skills/seven/scripts/load-context.mjs +111 -0
- package/.pi/skills/seven/scripts/run-seven.mjs +47 -0
- package/.pi/skills/seven/scripts/update-check.mjs +120 -0
- package/.qoder/skills/seven/SKILL.md +176 -0
- package/.qoder/skills/seven/reference/adapt.md +34 -0
- package/.qoder/skills/seven/reference/animate.md +31 -0
- package/.qoder/skills/seven/reference/app-shell.md +152 -0
- package/.qoder/skills/seven/reference/audit.md +122 -0
- package/.qoder/skills/seven/reference/bolder.md +34 -0
- package/.qoder/skills/seven/reference/brand.md +31 -0
- package/.qoder/skills/seven/reference/clarify.md +76 -0
- package/.qoder/skills/seven/reference/color-and-contrast.md +84 -0
- package/.qoder/skills/seven/reference/colorize.md +31 -0
- package/.qoder/skills/seven/reference/critique.md +53 -0
- package/.qoder/skills/seven/reference/delight.md +30 -0
- package/.qoder/skills/seven/reference/distill.md +30 -0
- package/.qoder/skills/seven/reference/doctor.md +9 -0
- package/.qoder/skills/seven/reference/document.md +36 -0
- package/.qoder/skills/seven/reference/evaluations.md +44 -0
- package/.qoder/skills/seven/reference/exceptions.md +7 -0
- package/.qoder/skills/seven/reference/extract.md +42 -0
- package/.qoder/skills/seven/reference/harden.md +36 -0
- package/.qoder/skills/seven/reference/hooks.md +11 -0
- package/.qoder/skills/seven/reference/init.md +5 -0
- package/.qoder/skills/seven/reference/layout.md +33 -0
- package/.qoder/skills/seven/reference/live.md +106 -0
- package/.qoder/skills/seven/reference/motion-design.md +71 -0
- package/.qoder/skills/seven/reference/onboard.md +35 -0
- package/.qoder/skills/seven/reference/optimize.md +34 -0
- package/.qoder/skills/seven/reference/overdrive.md +32 -0
- package/.qoder/skills/seven/reference/polish.md +55 -0
- package/.qoder/skills/seven/reference/product.md +43 -0
- package/.qoder/skills/seven/reference/quieter.md +31 -0
- package/.qoder/skills/seven/reference/routing.md +28 -0
- package/.qoder/skills/seven/reference/setup.md +38 -0
- package/.qoder/skills/seven/reference/shape.md +85 -0
- package/.qoder/skills/seven/reference/spatial-design.md +60 -0
- package/.qoder/skills/seven/reference/typeset.md +28 -0
- package/.qoder/skills/seven/reference/typography.md +43 -0
- package/.qoder/skills/seven/reference/ux-writing.md +47 -0
- package/.qoder/skills/seven/reference/visual-probes.md +36 -0
- package/.qoder/skills/seven/scripts/context-signals.mjs +95 -0
- package/.qoder/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.qoder/skills/seven/scripts/load-context.mjs +111 -0
- package/.qoder/skills/seven/scripts/run-seven.mjs +47 -0
- package/.qoder/skills/seven/scripts/update-check.mjs +120 -0
- package/.rovodev/skills/seven/SKILL.md +176 -0
- package/.rovodev/skills/seven/reference/adapt.md +34 -0
- package/.rovodev/skills/seven/reference/animate.md +31 -0
- package/.rovodev/skills/seven/reference/app-shell.md +152 -0
- package/.rovodev/skills/seven/reference/audit.md +122 -0
- package/.rovodev/skills/seven/reference/bolder.md +34 -0
- package/.rovodev/skills/seven/reference/brand.md +31 -0
- package/.rovodev/skills/seven/reference/clarify.md +76 -0
- package/.rovodev/skills/seven/reference/color-and-contrast.md +84 -0
- package/.rovodev/skills/seven/reference/colorize.md +31 -0
- package/.rovodev/skills/seven/reference/critique.md +53 -0
- package/.rovodev/skills/seven/reference/delight.md +30 -0
- package/.rovodev/skills/seven/reference/distill.md +30 -0
- package/.rovodev/skills/seven/reference/doctor.md +9 -0
- package/.rovodev/skills/seven/reference/document.md +36 -0
- package/.rovodev/skills/seven/reference/evaluations.md +44 -0
- package/.rovodev/skills/seven/reference/exceptions.md +7 -0
- package/.rovodev/skills/seven/reference/extract.md +42 -0
- package/.rovodev/skills/seven/reference/harden.md +36 -0
- package/.rovodev/skills/seven/reference/hooks.md +11 -0
- package/.rovodev/skills/seven/reference/init.md +5 -0
- package/.rovodev/skills/seven/reference/layout.md +33 -0
- package/.rovodev/skills/seven/reference/live.md +106 -0
- package/.rovodev/skills/seven/reference/motion-design.md +71 -0
- package/.rovodev/skills/seven/reference/onboard.md +35 -0
- package/.rovodev/skills/seven/reference/optimize.md +34 -0
- package/.rovodev/skills/seven/reference/overdrive.md +32 -0
- package/.rovodev/skills/seven/reference/polish.md +55 -0
- package/.rovodev/skills/seven/reference/product.md +43 -0
- package/.rovodev/skills/seven/reference/quieter.md +31 -0
- package/.rovodev/skills/seven/reference/routing.md +28 -0
- package/.rovodev/skills/seven/reference/setup.md +38 -0
- package/.rovodev/skills/seven/reference/shape.md +85 -0
- package/.rovodev/skills/seven/reference/spatial-design.md +60 -0
- package/.rovodev/skills/seven/reference/typeset.md +28 -0
- package/.rovodev/skills/seven/reference/typography.md +43 -0
- package/.rovodev/skills/seven/reference/ux-writing.md +47 -0
- package/.rovodev/skills/seven/reference/visual-probes.md +36 -0
- package/.rovodev/skills/seven/scripts/context-signals.mjs +95 -0
- package/.rovodev/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.rovodev/skills/seven/scripts/load-context.mjs +111 -0
- package/.rovodev/skills/seven/scripts/run-seven.mjs +47 -0
- package/.rovodev/skills/seven/scripts/update-check.mjs +120 -0
- package/.trae/skills/seven/SKILL.md +174 -0
- package/.trae/skills/seven/reference/adapt.md +34 -0
- package/.trae/skills/seven/reference/animate.md +31 -0
- package/.trae/skills/seven/reference/app-shell.md +152 -0
- package/.trae/skills/seven/reference/audit.md +122 -0
- package/.trae/skills/seven/reference/bolder.md +34 -0
- package/.trae/skills/seven/reference/brand.md +31 -0
- package/.trae/skills/seven/reference/clarify.md +76 -0
- package/.trae/skills/seven/reference/color-and-contrast.md +84 -0
- package/.trae/skills/seven/reference/colorize.md +31 -0
- package/.trae/skills/seven/reference/critique.md +53 -0
- package/.trae/skills/seven/reference/delight.md +30 -0
- package/.trae/skills/seven/reference/distill.md +30 -0
- package/.trae/skills/seven/reference/doctor.md +9 -0
- package/.trae/skills/seven/reference/document.md +36 -0
- package/.trae/skills/seven/reference/evaluations.md +44 -0
- package/.trae/skills/seven/reference/exceptions.md +7 -0
- package/.trae/skills/seven/reference/extract.md +42 -0
- package/.trae/skills/seven/reference/harden.md +36 -0
- package/.trae/skills/seven/reference/hooks.md +11 -0
- package/.trae/skills/seven/reference/init.md +5 -0
- package/.trae/skills/seven/reference/layout.md +33 -0
- package/.trae/skills/seven/reference/live.md +106 -0
- package/.trae/skills/seven/reference/motion-design.md +71 -0
- package/.trae/skills/seven/reference/onboard.md +35 -0
- package/.trae/skills/seven/reference/optimize.md +34 -0
- package/.trae/skills/seven/reference/overdrive.md +32 -0
- package/.trae/skills/seven/reference/polish.md +55 -0
- package/.trae/skills/seven/reference/product.md +43 -0
- package/.trae/skills/seven/reference/quieter.md +31 -0
- package/.trae/skills/seven/reference/routing.md +28 -0
- package/.trae/skills/seven/reference/setup.md +38 -0
- package/.trae/skills/seven/reference/shape.md +85 -0
- package/.trae/skills/seven/reference/spatial-design.md +60 -0
- package/.trae/skills/seven/reference/typeset.md +28 -0
- package/.trae/skills/seven/reference/typography.md +43 -0
- package/.trae/skills/seven/reference/ux-writing.md +47 -0
- package/.trae/skills/seven/reference/visual-probes.md +36 -0
- package/.trae/skills/seven/scripts/context-signals.mjs +95 -0
- package/.trae/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.trae/skills/seven/scripts/load-context.mjs +111 -0
- package/.trae/skills/seven/scripts/run-seven.mjs +47 -0
- package/.trae/skills/seven/scripts/update-check.mjs +120 -0
- package/.trae-cn/skills/seven/SKILL.md +174 -0
- package/.trae-cn/skills/seven/reference/adapt.md +34 -0
- package/.trae-cn/skills/seven/reference/animate.md +31 -0
- package/.trae-cn/skills/seven/reference/app-shell.md +152 -0
- package/.trae-cn/skills/seven/reference/audit.md +122 -0
- package/.trae-cn/skills/seven/reference/bolder.md +34 -0
- package/.trae-cn/skills/seven/reference/brand.md +31 -0
- package/.trae-cn/skills/seven/reference/clarify.md +76 -0
- package/.trae-cn/skills/seven/reference/color-and-contrast.md +84 -0
- package/.trae-cn/skills/seven/reference/colorize.md +31 -0
- package/.trae-cn/skills/seven/reference/critique.md +53 -0
- package/.trae-cn/skills/seven/reference/delight.md +30 -0
- package/.trae-cn/skills/seven/reference/distill.md +30 -0
- package/.trae-cn/skills/seven/reference/doctor.md +9 -0
- package/.trae-cn/skills/seven/reference/document.md +36 -0
- package/.trae-cn/skills/seven/reference/evaluations.md +44 -0
- package/.trae-cn/skills/seven/reference/exceptions.md +7 -0
- package/.trae-cn/skills/seven/reference/extract.md +42 -0
- package/.trae-cn/skills/seven/reference/harden.md +36 -0
- package/.trae-cn/skills/seven/reference/hooks.md +11 -0
- package/.trae-cn/skills/seven/reference/init.md +5 -0
- package/.trae-cn/skills/seven/reference/layout.md +33 -0
- package/.trae-cn/skills/seven/reference/live.md +106 -0
- package/.trae-cn/skills/seven/reference/motion-design.md +71 -0
- package/.trae-cn/skills/seven/reference/onboard.md +35 -0
- package/.trae-cn/skills/seven/reference/optimize.md +34 -0
- package/.trae-cn/skills/seven/reference/overdrive.md +32 -0
- package/.trae-cn/skills/seven/reference/polish.md +55 -0
- package/.trae-cn/skills/seven/reference/product.md +43 -0
- package/.trae-cn/skills/seven/reference/quieter.md +31 -0
- package/.trae-cn/skills/seven/reference/routing.md +28 -0
- package/.trae-cn/skills/seven/reference/setup.md +38 -0
- package/.trae-cn/skills/seven/reference/shape.md +85 -0
- package/.trae-cn/skills/seven/reference/spatial-design.md +60 -0
- package/.trae-cn/skills/seven/reference/typeset.md +28 -0
- package/.trae-cn/skills/seven/reference/typography.md +43 -0
- package/.trae-cn/skills/seven/reference/ux-writing.md +47 -0
- package/.trae-cn/skills/seven/reference/visual-probes.md +36 -0
- package/.trae-cn/skills/seven/scripts/context-signals.mjs +95 -0
- package/.trae-cn/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.trae-cn/skills/seven/scripts/load-context.mjs +111 -0
- package/.trae-cn/skills/seven/scripts/run-seven.mjs +47 -0
- package/.trae-cn/skills/seven/scripts/update-check.mjs +120 -0
- package/.vibe/skills/seven/SKILL.md +175 -0
- package/.vibe/skills/seven/reference/adapt.md +34 -0
- package/.vibe/skills/seven/reference/animate.md +31 -0
- package/.vibe/skills/seven/reference/app-shell.md +152 -0
- package/.vibe/skills/seven/reference/audit.md +122 -0
- package/.vibe/skills/seven/reference/bolder.md +34 -0
- package/.vibe/skills/seven/reference/brand.md +31 -0
- package/.vibe/skills/seven/reference/clarify.md +76 -0
- package/.vibe/skills/seven/reference/color-and-contrast.md +84 -0
- package/.vibe/skills/seven/reference/colorize.md +31 -0
- package/.vibe/skills/seven/reference/critique.md +53 -0
- package/.vibe/skills/seven/reference/delight.md +30 -0
- package/.vibe/skills/seven/reference/distill.md +30 -0
- package/.vibe/skills/seven/reference/doctor.md +9 -0
- package/.vibe/skills/seven/reference/document.md +36 -0
- package/.vibe/skills/seven/reference/evaluations.md +44 -0
- package/.vibe/skills/seven/reference/exceptions.md +7 -0
- package/.vibe/skills/seven/reference/extract.md +42 -0
- package/.vibe/skills/seven/reference/harden.md +36 -0
- package/.vibe/skills/seven/reference/hooks.md +11 -0
- package/.vibe/skills/seven/reference/init.md +5 -0
- package/.vibe/skills/seven/reference/layout.md +33 -0
- package/.vibe/skills/seven/reference/live.md +106 -0
- package/.vibe/skills/seven/reference/motion-design.md +71 -0
- package/.vibe/skills/seven/reference/onboard.md +35 -0
- package/.vibe/skills/seven/reference/optimize.md +34 -0
- package/.vibe/skills/seven/reference/overdrive.md +32 -0
- package/.vibe/skills/seven/reference/polish.md +55 -0
- package/.vibe/skills/seven/reference/product.md +43 -0
- package/.vibe/skills/seven/reference/quieter.md +31 -0
- package/.vibe/skills/seven/reference/routing.md +28 -0
- package/.vibe/skills/seven/reference/setup.md +38 -0
- package/.vibe/skills/seven/reference/shape.md +85 -0
- package/.vibe/skills/seven/reference/spatial-design.md +60 -0
- package/.vibe/skills/seven/reference/typeset.md +28 -0
- package/.vibe/skills/seven/reference/typography.md +43 -0
- package/.vibe/skills/seven/reference/ux-writing.md +47 -0
- package/.vibe/skills/seven/reference/visual-probes.md +36 -0
- package/.vibe/skills/seven/scripts/context-signals.mjs +95 -0
- package/.vibe/skills/seven/scripts/critique-storage.mjs +155 -0
- package/.vibe/skills/seven/scripts/load-context.mjs +111 -0
- package/.vibe/skills/seven/scripts/run-seven.mjs +47 -0
- package/.vibe/skills/seven/scripts/update-check.mjs +120 -0
- package/README.md +53 -88
- package/cli/bin/seven.mjs +0 -0
- package/cli/engine/browser/injected/index.mjs +62 -13
- package/cli/engine/detect-antipatterns-browser.js +4739 -19
- package/cli/engine/detect-antipatterns.mjs +1 -0
- package/cli/engine/engines/browser/detect-url.mjs +366 -3
- package/cli/engine/engines/regex/detect-text.mjs +469 -1
- package/cli/engine/engines/static-html/detect-html.mjs +131 -0
- package/cli/engine/registry/seven-antipatterns.mjs +379 -4
- package/cli/engine/rules/checks.mjs +360 -1
- package/cli/engine/shared/tokens.mjs +19 -0
- package/cli/engine/token-data.generated.mjs +4025 -0
- package/docs/detector-rules.md +277 -38
- package/docs/upstream-parity.json +242 -0
- package/extension/README.md +5 -0
- package/extension/background/service-worker.js +134 -0
- package/extension/content/content-script.js +340 -0
- package/extension/detector/detect.js +7816 -0
- package/extension/devtools/devtools.html +1 -0
- package/extension/devtools/devtools.js +3 -0
- package/extension/devtools/panel.css +66 -0
- package/extension/devtools/panel.html +3 -0
- package/extension/devtools/panel.js +37 -0
- package/extension/manifest.json +22 -0
- package/extension/popup/popup.css +106 -0
- package/extension/popup/popup.html +27 -0
- package/extension/popup/popup.js +74 -0
- package/package.json +19 -8
|
@@ -927,6 +927,88 @@ export function checkHtmlPatterns(html) {
|
|
|
927
927
|
}
|
|
928
928
|
}
|
|
929
929
|
|
|
930
|
+
// Current generic signals retained by Seven. They are advisory unless the
|
|
931
|
+
// registry classifies a concrete readability/layout failure as quality.
|
|
932
|
+
if (/radial-gradient\([^;{}\n]*(?:transparent|rgba\([^)]*,\s*0(?:\.0+)?\s*\))/i.test(html) &&
|
|
933
|
+
!/(?:data-role=["']chart|heatmap|radar|mask-image)/i.test(html)) {
|
|
934
|
+
findings.push({ id: 'radial-halo', snippet: 'radial-gradient color wash fading to transparent' })
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
if (/<marquee\b/i.test(html) || /\banimate-(?:marquee|ticker|scroll)\b/i.test(html)) {
|
|
938
|
+
findings.push({ id: 'marquee', snippet: 'auto-scrolling marquee' })
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
if (/\banimate-(?:blink|cursor|caret)\b|animation(?:-name)?\s*:\s*(?:blink|cursor|caret)\b/i.test(html) &&
|
|
942
|
+
!/(?:input-?otp|otpinput|contenteditable|<input\b|<textarea\b)/i.test(html)) {
|
|
943
|
+
findings.push({ id: 'blinking-cursor', snippet: 'decorative blink/caret animation' })
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
const pulseTag = html.match(/<(?:span|div|i)\b[^>]*(?:animate-pulse|animation\s*:\s*[^;"']*pulse)[^>]*(?:rounded-full|border-radius\s*:\s*50%)[^>]*>/i)
|
|
947
|
+
if (pulseTag && /\b(?:size|w|h)-(?:1|1\.5|2|2\.5|3|3\.5|4)\b|(?:width|height)\s*:\s*(?:[1-9]|1[0-6])px/i.test(pulseTag[0])) {
|
|
948
|
+
findings.push({ id: 'pulsing-dot', snippet: 'small round element with pulse animation' })
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
const svgRe = /<svg\b([^>]*)>([\s\S]*?)<\/svg>/gi
|
|
952
|
+
let svgMatch
|
|
953
|
+
while ((svgMatch = svgRe.exec(html)) !== null) {
|
|
954
|
+
if (/(?:chart|graph|logo|icon|sparkline|data-viz|data-role=["']chart)/i.test(svgMatch[1])) continue
|
|
955
|
+
const primitives = [...svgMatch[2].matchAll(/<(?:rect|circle|ellipse|polygon|path)\b/gi)].length
|
|
956
|
+
const dimensions = `${svgMatch[1]}`.match(/(?:width|height|viewBox)\s*=\s*["'][^"']*(?:2\d{2}|[3-9]\d{2,})/i)
|
|
957
|
+
if (primitives >= 12 && dimensions) {
|
|
958
|
+
findings.push({ id: 'shape-assembled-illustration', snippet: `${primitives} primitive SVG shapes in a large visual` })
|
|
959
|
+
break
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
const numberedLabels = [...html.matchAll(/<(?:span|small|div)\b[^>]*(?:text-(?:xs|\[(?:length:)?(?:8|9|10|11)px\])|font-size\s*:\s*(?:8|9|10|11)px)[^>]*>\s*(?:0?\d{1,2}|[IVX]{1,5})\s*<\/[^>]+>[\s\S]{0,240}?<h[2-5]\b/gi)]
|
|
964
|
+
if (numberedLabels.length >= 3) findings.push({ id: 'numbered-section-labels', snippet: `${numberedLabels.length} tiny numbered section labels` })
|
|
965
|
+
|
|
966
|
+
const displayH1 = html.match(/<h1\b([^>]*(?:\btext-(?:7xl|8xl|9xl)\b|font-size\s*:\s*(?:6[4-9]|[7-9]\d|\d{3,})px)[^>]*)>([\s\S]*?)<\/h1>/i)
|
|
967
|
+
if (displayH1) {
|
|
968
|
+
const text = displayH1[2].replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim()
|
|
969
|
+
if (text.length >= 32 || text.split(/\s+/).length >= 6) findings.push({ id: 'oversized-h1', snippet: `display h1 with ${text.length} characters` })
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
const tracking = html.match(/letter-spacing\s*:\s*(-?[\d.]+)(em|px)|\btracking-\[(-?[\d.]+)(em|px)\]/i)
|
|
973
|
+
if (tracking) {
|
|
974
|
+
const value = Number(tracking[1] ?? tracking[3])
|
|
975
|
+
const unit = String(tracking[2] ?? tracking[4]).toLowerCase()
|
|
976
|
+
if ((unit === 'em' && value < -0.075) || (unit === 'px' && value < -1.2)) {
|
|
977
|
+
findings.push({ id: 'extreme-negative-tracking', snippet: tracking[0] })
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
if (/repeating-(?:linear|radial|conic)-gradient\s*\(/i.test(html) &&
|
|
982
|
+
!/(?:data-role=["']chart|progress|skeleton|mask-image|checkerboard|color-picker|alpha)/i.test(html)) {
|
|
983
|
+
findings.push({ id: 'repeating-stripes-gradient', snippet: 'repeating-gradient decorative stripes' })
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
const linearGradients = [...html.matchAll(/linear-gradient\s*\(/gi)]
|
|
987
|
+
if (linearGradients.length >= 2 && /background-size\s*:\s*\d+(?:px|rem)\s+\d+(?:px|rem)/i.test(html) &&
|
|
988
|
+
/(?:1px|\.5px)[^;{}]{0,160}(?:transparent|rgba\([^)]*,\s*0)/i.test(html) &&
|
|
989
|
+
!/(?:data-role=["'](?:chart|canvas|map)|blueprint|measurement)/i.test(html)) {
|
|
990
|
+
findings.push({ id: 'codex-grid-background', snippet: 'two-axis tiled hairline gradient grid' })
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
if (/img\s*:\s*hover\s*\{[^}]*transform\s*:\s*(?:scale|rotate)|<img\b[^>]*\bhover:(?:scale|rotate)-/i.test(html)) {
|
|
994
|
+
findings.push({ id: 'image-hover-transform', snippet: 'image scales or rotates on hover' })
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
const visibleCopy = html
|
|
998
|
+
.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi, ' ')
|
|
999
|
+
.replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi, ' ')
|
|
1000
|
+
.replace(/<[^>]+>/g, ' ')
|
|
1001
|
+
.replace(/\s+/g, ' ')
|
|
1002
|
+
const buzzword = visibleCopy.match(/\b(?:streamline|empower|supercharge|world-class|enterprise-grade|next-generation|cutting-edge|seamless|revolucione|potencialize|líder de mercado|de ponta|sem atrito|nível empresarial|tudo em um)\b/i)
|
|
1003
|
+
if (buzzword) findings.push({ id: 'marketing-buzzword', snippet: `generic claim: "${buzzword[0]}"` })
|
|
1004
|
+
const aphorisms = [
|
|
1005
|
+
...(visibleCopy.match(/\bnão\s+[^.!?]{2,50}[.!?]\s+(?:é|apenas|simplesmente|só)\s+[^.!?]{2,50}[.!?]/gim) || []),
|
|
1006
|
+
...(visibleCopy.match(/\bnot\s+[^.!?]{2,50}[.!?]\s+(?:just|simply)\s+[^.!?]{2,50}[.!?]/gim) || []),
|
|
1007
|
+
]
|
|
1008
|
+
if (aphorisms.length >= 3) findings.push({ id: 'aphoristic-cadence', snippet: `${aphorisms.length} repeated contrast constructions` })
|
|
1009
|
+
const theater = visibleCopy.match(/\b(?:security|innovation|compliance|productivity|growth|performance|automation|design|segurança|inovação|conformidade|produtividade|crescimento|performance|automação|design)\s+theater\b/i)
|
|
1010
|
+
if (theater) findings.push({ id: 'theater-slop-phrase', snippet: `"${theater[0]}"` })
|
|
1011
|
+
|
|
930
1012
|
return findings
|
|
931
1013
|
}
|
|
932
1014
|
|
|
@@ -1264,8 +1346,285 @@ export function checkElementQualityDOM(el) {
|
|
|
1264
1346
|
})
|
|
1265
1347
|
}
|
|
1266
1348
|
|
|
1349
|
+
function directSlotChild(parent, slot) {
|
|
1350
|
+
if (!parent) return null
|
|
1351
|
+
return [...parent.querySelectorAll(`[data-slot="${slot}"]`)].find(
|
|
1352
|
+
(element) => element.parentElement === parent
|
|
1353
|
+
) || null
|
|
1354
|
+
}
|
|
1355
|
+
|
|
1356
|
+
function isVisibleElement(element, win) {
|
|
1357
|
+
if (!element || !win?.getComputedStyle || typeof element.getBoundingClientRect !== 'function') {
|
|
1358
|
+
return Boolean(element)
|
|
1359
|
+
}
|
|
1360
|
+
const style = win.getComputedStyle(element)
|
|
1361
|
+
const rect = element.getBoundingClientRect()
|
|
1362
|
+
return (
|
|
1363
|
+
style.display !== 'none' &&
|
|
1364
|
+
style.visibility !== 'hidden' &&
|
|
1365
|
+
Number(style.opacity || 1) > 0 &&
|
|
1366
|
+
rect.width > 0 &&
|
|
1367
|
+
rect.height > 0
|
|
1368
|
+
)
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1371
|
+
function hasAncestorWithAttribute(element, attribute, value = null) {
|
|
1372
|
+
let current = element?.parentElement
|
|
1373
|
+
while (current) {
|
|
1374
|
+
if (
|
|
1375
|
+
current.hasAttribute?.(attribute) &&
|
|
1376
|
+
(value === null || current.getAttribute(attribute) === value)
|
|
1377
|
+
) {
|
|
1378
|
+
return true
|
|
1379
|
+
}
|
|
1380
|
+
current = current.parentElement
|
|
1381
|
+
}
|
|
1382
|
+
return false
|
|
1383
|
+
}
|
|
1384
|
+
|
|
1385
|
+
/**
|
|
1386
|
+
* Seven dual-Rail contract. Static HTML verifies stable labels and valid
|
|
1387
|
+
* interactive markup. Browser mode additionally verifies that mobile ARIA and
|
|
1388
|
+
* panel visibility follow openMobile, never the desktop panel state.
|
|
1389
|
+
* @param {any} doc
|
|
1390
|
+
* @param {any} [win]
|
|
1391
|
+
*/
|
|
1392
|
+
export function checkSidebarRailBehavior(doc, win = null) {
|
|
1393
|
+
const findings = []
|
|
1394
|
+
const wrappers = [...doc.querySelectorAll('[data-slot="sidebar-wrapper"][data-mode="dual"]')]
|
|
1395
|
+
const viewportWidth = Number(win?.innerWidth)
|
|
1396
|
+
const isMobileViewport = Number.isFinite(viewportWidth) && viewportWidth > 0 && viewportWidth < 768
|
|
1397
|
+
|
|
1398
|
+
for (const wrapper of wrappers) {
|
|
1399
|
+
for (const button of wrapper.querySelectorAll('[data-slot="sidebar-rail-button"]')) {
|
|
1400
|
+
const label = String(button.getAttribute('data-label') || '').trim()
|
|
1401
|
+
if (!label) {
|
|
1402
|
+
findings.push({
|
|
1403
|
+
id: 'sidebar-rail-behavior',
|
|
1404
|
+
snippet: 'Dual Rail button has no stable data-label for its expanded state',
|
|
1405
|
+
})
|
|
1406
|
+
}
|
|
1407
|
+
|
|
1408
|
+
const tag = String(button.tagName || '').toLowerCase()
|
|
1409
|
+
const parentTag = String(button.parentElement?.tagName || '').toLowerCase()
|
|
1410
|
+
const nestedInteractive = button.querySelector?.('a,button,[role="button"],[role="link"]')
|
|
1411
|
+
if (
|
|
1412
|
+
(tag === 'button' && (parentTag === 'a' || button.parentElement?.getAttribute?.('role') === 'link')) ||
|
|
1413
|
+
nestedInteractive
|
|
1414
|
+
) {
|
|
1415
|
+
findings.push({
|
|
1416
|
+
id: 'sidebar-rail-behavior',
|
|
1417
|
+
snippet: 'Dual Rail navigation nests interactive elements instead of using asChild',
|
|
1418
|
+
})
|
|
1419
|
+
}
|
|
1420
|
+
}
|
|
1421
|
+
|
|
1422
|
+
if (!isMobileViewport) continue
|
|
1423
|
+
|
|
1424
|
+
const visibleMobileSidebar = [...doc.querySelectorAll(
|
|
1425
|
+
'[data-slot="sidebar"][data-mobile="true"]'
|
|
1426
|
+
)].find((element) => isVisibleElement(element, win)) || null
|
|
1427
|
+
const sheetOpen = Boolean(visibleMobileSidebar)
|
|
1428
|
+
const triggers = [...wrapper.querySelectorAll('[data-slot="sidebar-trigger"]')].filter(
|
|
1429
|
+
(trigger) =>
|
|
1430
|
+
!hasAncestorWithAttribute(trigger, 'data-mobile', 'true') &&
|
|
1431
|
+
isVisibleElement(trigger, win)
|
|
1432
|
+
)
|
|
1433
|
+
|
|
1434
|
+
for (const trigger of triggers) {
|
|
1435
|
+
if (trigger.getAttribute('aria-expanded') !== String(sheetOpen)) {
|
|
1436
|
+
findings.push({
|
|
1437
|
+
id: 'sidebar-rail-behavior',
|
|
1438
|
+
snippet: 'Mobile SidebarTrigger aria-expanded does not match the visible Sheet',
|
|
1439
|
+
})
|
|
1440
|
+
break
|
|
1441
|
+
}
|
|
1442
|
+
}
|
|
1443
|
+
|
|
1444
|
+
if (!visibleMobileSidebar) continue
|
|
1445
|
+
const panel = visibleMobileSidebar.querySelector('[data-slot="sidebar-panel-content"]')
|
|
1446
|
+
if (
|
|
1447
|
+
!panel ||
|
|
1448
|
+
panel.getAttribute('data-state') !== 'expanded' ||
|
|
1449
|
+
!isVisibleElement(panel, win)
|
|
1450
|
+
) {
|
|
1451
|
+
findings.push({
|
|
1452
|
+
id: 'sidebar-rail-behavior',
|
|
1453
|
+
snippet: 'Open dual mobile Sheet does not expose a full expanded panel',
|
|
1454
|
+
})
|
|
1455
|
+
continue
|
|
1456
|
+
}
|
|
1457
|
+
|
|
1458
|
+
const sheetRect = visibleMobileSidebar.getBoundingClientRect()
|
|
1459
|
+
const panelRect = panel.getBoundingClientRect()
|
|
1460
|
+
if (sheetRect.width > 0 && panelRect.width < sheetRect.width * 0.75) {
|
|
1461
|
+
findings.push({
|
|
1462
|
+
id: 'sidebar-rail-behavior',
|
|
1463
|
+
snippet: 'Dual mobile panel retained the collapsed desktop width',
|
|
1464
|
+
})
|
|
1465
|
+
}
|
|
1466
|
+
}
|
|
1467
|
+
|
|
1468
|
+
return findings
|
|
1469
|
+
}
|
|
1470
|
+
|
|
1471
|
+
/**
|
|
1472
|
+
* Seven application-shell contract shared by static HTML and the live browser:
|
|
1473
|
+
* Sidebar + SidebarInset are direct siblings and the shell Topbar is the
|
|
1474
|
+
* borderless first chrome child of the Inset. Browser mode adds L-geometry,
|
|
1475
|
+
* the visible mobile trigger assertion, and mobile leading-slot overflow.
|
|
1476
|
+
*/
|
|
1477
|
+
export function checkSidebarTopbarShell(doc, win = null) {
|
|
1478
|
+
const findings = []
|
|
1479
|
+
const wrappers = [...doc.querySelectorAll('[data-slot="sidebar-wrapper"]')]
|
|
1480
|
+
const viewportWidth = Number(win?.innerWidth)
|
|
1481
|
+
const hasViewport = Number.isFinite(viewportWidth) && viewportWidth > 0
|
|
1482
|
+
|
|
1483
|
+
for (const wrapper of wrappers) {
|
|
1484
|
+
const inset = directSlotChild(wrapper, 'sidebar-inset')
|
|
1485
|
+
const directOutsideTopbar = directSlotChild(wrapper, 'topbar')
|
|
1486
|
+
const siblingOutsideTopbar = [...(wrapper.parentElement?.children || [])].find(
|
|
1487
|
+
(element) =>
|
|
1488
|
+
element !== wrapper &&
|
|
1489
|
+
element.getAttribute?.('data-slot') === 'topbar'
|
|
1490
|
+
) || null
|
|
1491
|
+
const outsideTopbar = directOutsideTopbar || siblingOutsideTopbar
|
|
1492
|
+
if (!inset) {
|
|
1493
|
+
if (outsideTopbar) {
|
|
1494
|
+
findings.push({
|
|
1495
|
+
id: 'sidebar-topbar-shell',
|
|
1496
|
+
snippet: 'Shell Topbar renders outside SidebarInset',
|
|
1497
|
+
})
|
|
1498
|
+
}
|
|
1499
|
+
continue
|
|
1500
|
+
}
|
|
1501
|
+
|
|
1502
|
+
const topbars = [...inset.querySelectorAll('[data-slot="topbar"]')].filter(
|
|
1503
|
+
(element) => element.parentElement === inset
|
|
1504
|
+
)
|
|
1505
|
+
if (topbars.length === 0) {
|
|
1506
|
+
if (outsideTopbar) {
|
|
1507
|
+
findings.push({
|
|
1508
|
+
id: 'sidebar-topbar-shell',
|
|
1509
|
+
snippet: 'Shell Topbar renders outside SidebarInset',
|
|
1510
|
+
})
|
|
1511
|
+
}
|
|
1512
|
+
continue
|
|
1513
|
+
}
|
|
1514
|
+
|
|
1515
|
+
const firstElement = [...inset.children][0]
|
|
1516
|
+
if (firstElement !== topbars[0]) {
|
|
1517
|
+
findings.push({
|
|
1518
|
+
id: 'sidebar-topbar-shell',
|
|
1519
|
+
snippet: 'Shell Topbar is not the first direct child of SidebarInset',
|
|
1520
|
+
})
|
|
1521
|
+
}
|
|
1522
|
+
|
|
1523
|
+
const sidebar = directSlotChild(wrapper, 'sidebar')
|
|
1524
|
+
const staticSidebar = sidebar?.getAttribute('data-collapsible') === 'none'
|
|
1525
|
+
if ((!hasViewport || viewportWidth >= 768) && !sidebar) {
|
|
1526
|
+
findings.push({
|
|
1527
|
+
id: 'sidebar-topbar-shell',
|
|
1528
|
+
snippet: 'Sidebar and SidebarInset are not direct siblings under SidebarProvider',
|
|
1529
|
+
})
|
|
1530
|
+
}
|
|
1531
|
+
|
|
1532
|
+
if (win?.getComputedStyle) {
|
|
1533
|
+
for (const topbar of topbars) {
|
|
1534
|
+
const style = win.getComputedStyle(topbar)
|
|
1535
|
+
const borderWidth = Math.max(
|
|
1536
|
+
parseFloat(style.borderTopWidth) || 0,
|
|
1537
|
+
parseFloat(style.borderRightWidth) || 0,
|
|
1538
|
+
parseFloat(style.borderBottomWidth) || 0,
|
|
1539
|
+
parseFloat(style.borderLeftWidth) || 0
|
|
1540
|
+
)
|
|
1541
|
+
if (borderWidth > 0 || (style.boxShadow && style.boxShadow !== 'none')) {
|
|
1542
|
+
findings.push({
|
|
1543
|
+
id: 'sidebar-topbar-shell',
|
|
1544
|
+
snippet: 'Shell Topbar renders a border or shadow',
|
|
1545
|
+
})
|
|
1546
|
+
break
|
|
1547
|
+
}
|
|
1548
|
+
}
|
|
1549
|
+
}
|
|
1550
|
+
|
|
1551
|
+
if (
|
|
1552
|
+
hasViewport &&
|
|
1553
|
+
viewportWidth >= 768 &&
|
|
1554
|
+
sidebar &&
|
|
1555
|
+
typeof sidebar.getBoundingClientRect === 'function'
|
|
1556
|
+
) {
|
|
1557
|
+
const sidebarRect = sidebar.getBoundingClientRect()
|
|
1558
|
+
const topbarRect = topbars[0].getBoundingClientRect()
|
|
1559
|
+
const side = sidebar.getAttribute('data-side') || 'left'
|
|
1560
|
+
const overlapsSidebar =
|
|
1561
|
+
side === 'right'
|
|
1562
|
+
? topbarRect.right > sidebarRect.left + 1
|
|
1563
|
+
: topbarRect.left < sidebarRect.right - 1
|
|
1564
|
+
if (sidebarRect.width > 0 && topbarRect.width > 0 && overlapsSidebar) {
|
|
1565
|
+
findings.push({
|
|
1566
|
+
id: 'sidebar-topbar-shell',
|
|
1567
|
+
snippet: 'Topbar overlaps the desktop Sidebar; rendered shell is T-shaped',
|
|
1568
|
+
})
|
|
1569
|
+
}
|
|
1570
|
+
|
|
1571
|
+
const wrapperRect = wrapper.getBoundingClientRect()
|
|
1572
|
+
if (sidebarRect.height + 1 < wrapperRect.height) {
|
|
1573
|
+
findings.push({
|
|
1574
|
+
id: 'sidebar-topbar-shell',
|
|
1575
|
+
snippet: 'Desktop Sidebar does not span the full shell height',
|
|
1576
|
+
})
|
|
1577
|
+
}
|
|
1578
|
+
}
|
|
1579
|
+
|
|
1580
|
+
if (hasViewport && viewportWidth < 768) {
|
|
1581
|
+
if (!staticSidebar) {
|
|
1582
|
+
const triggers = topbars.flatMap((topbar) => [
|
|
1583
|
+
...topbar.querySelectorAll('[data-slot="sidebar-trigger"]'),
|
|
1584
|
+
])
|
|
1585
|
+
if (!triggers.some((trigger) => isVisibleElement(trigger, win))) {
|
|
1586
|
+
findings.push({
|
|
1587
|
+
id: 'sidebar-topbar-shell',
|
|
1588
|
+
snippet: 'Collapsible mobile shell has no visible SidebarTrigger in Topbar',
|
|
1589
|
+
})
|
|
1590
|
+
}
|
|
1591
|
+
}
|
|
1592
|
+
|
|
1593
|
+
const leading = directSlotChild(topbars[0], 'topbar-leading')
|
|
1594
|
+
if (
|
|
1595
|
+
leading &&
|
|
1596
|
+
isVisibleElement(leading, win) &&
|
|
1597
|
+
leading.clientWidth > 0 &&
|
|
1598
|
+
leading.scrollWidth > leading.clientWidth + 1
|
|
1599
|
+
) {
|
|
1600
|
+
findings.push({
|
|
1601
|
+
id: 'sidebar-topbar-shell',
|
|
1602
|
+
snippet: 'Mobile TopbarLeading overflows underneath the trailing chrome',
|
|
1603
|
+
})
|
|
1604
|
+
}
|
|
1605
|
+
}
|
|
1606
|
+
}
|
|
1607
|
+
|
|
1608
|
+
return findings
|
|
1609
|
+
}
|
|
1610
|
+
|
|
1267
1611
|
export function checkPageQualityDOM() {
|
|
1268
|
-
|
|
1612
|
+
const findings = checkPageQualityFromDoc(document)
|
|
1613
|
+
findings.push(...checkSidebarTopbarShell(document, window))
|
|
1614
|
+
findings.push(...checkSidebarRailBehavior(document, window))
|
|
1615
|
+
let iconTileCount = 0
|
|
1616
|
+
for (const heading of document.querySelectorAll('h2,h3,h4,h5')) {
|
|
1617
|
+
const tile = heading.previousElementSibling
|
|
1618
|
+
if (!tile || !tile.querySelector('svg')) continue
|
|
1619
|
+
const style = getComputedStyle(tile)
|
|
1620
|
+
const rect = tile.getBoundingClientRect()
|
|
1621
|
+
const radius = parseFloat(style.borderRadius) || parseFloat(style.borderTopLeftRadius) || 0
|
|
1622
|
+
if (radius >= 4 && rect.width >= 24 && rect.height >= 24 && rect.width <= 80 && rect.height <= 80) iconTileCount++
|
|
1623
|
+
}
|
|
1624
|
+
if (iconTileCount >= 3) {
|
|
1625
|
+
findings.push({ id: 'icon-tile-stack', snippet: `${iconTileCount} rounded icon tiles stacked above headings` })
|
|
1626
|
+
}
|
|
1627
|
+
return findings
|
|
1269
1628
|
}
|
|
1270
1629
|
|
|
1271
1630
|
// ─── Section 6: Node element adapters (static cascade) ──────────────────────
|
|
@@ -18,6 +18,25 @@ export function tokenDataAvailable() {
|
|
|
18
18
|
return Boolean(TOKEN_DATA && Object.keys(TOKEN_DATA.colorByRgba || {}).length > 0)
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
/** Every CSS variable declared by the exact Seven token snapshot. */
|
|
22
|
+
export function allTokenVars() {
|
|
23
|
+
return [...(TOKEN_DATA.cssVars || [])]
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function isKnownTokenVar(value) {
|
|
27
|
+
return (TOKEN_DATA.cssVars || []).includes(String(value || '').trim())
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** Minimal serializable token profile used by the browser runtime audit. */
|
|
31
|
+
export function browserTokenProfile() {
|
|
32
|
+
return {
|
|
33
|
+
colorVars: [...(TOKEN_DATA.colorVars || [])],
|
|
34
|
+
fontFamilies: allowedFontFamilies(),
|
|
35
|
+
fontSizesPx: fontSizesPx(),
|
|
36
|
+
radiiPx: [...(TOKEN_DATA.radii?.all || [])],
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
21
40
|
// ─── Color ──────────────────────────────────────────────────────────────────
|
|
22
41
|
|
|
23
42
|
/**
|