@mmerterden/multi-agent-pipeline 20.2.1 → 20.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +919 -1
- package/README.md +104 -81
- package/README.tr.md +103 -62
- package/docs/FIGMA_PIPELINE.md +35 -35
- package/docs/adr/0006-skills-core-external-split.md +1 -1
- package/docs/adr/0007-multi-tool-adapter-framework.md +6 -0
- package/docs/adr/0008-installer-modularization-and-secret-leak-defense.md +7 -0
- package/docs/architecture.md +50 -14
- package/docs/best-practices.md +1 -1
- package/docs/ecosystem.md +56 -32
- package/docs/facts.json +10 -10
- package/docs/features.md +97 -5
- package/docs/recovery-guide.md +7 -14
- package/docs/server-readiness.md +31 -24
- package/index.js +1 -1
- package/install/_common.mjs +3 -5
- package/install/_platform-filter.mjs +23 -1
- package/install/_unattended-profile.mjs +321 -75
- package/install/claude.mjs +51 -10
- package/install/codex.mjs +2 -0
- package/install/copilot.mjs +2 -0
- package/install/index.mjs +30 -17
- package/install/templates/claude-hooks.json +16 -5
- package/install/templates/copilot-instructions.md +1 -1
- package/install/templates/multi-agent-autopilot-awake.plist.template +48 -0
- package/install/templates/multi-agent-autopilot.plist.template +12 -5
- package/install/unattended-profile-legacy.json +80 -0
- package/manifest.json +617 -483
- package/package.json +8 -3
- package/pipeline/agents/code-reviewer.md +10 -0
- package/pipeline/agents/plan-critic.md +98 -0
- package/pipeline/agents/security-auditor.md +10 -0
- package/pipeline/agents/task-clarifier.md +10 -0
- package/pipeline/commands/multi-agent/SKILL.md +2 -2
- package/pipeline/commands/multi-agent/analysis/SKILL.md +6 -2
- package/pipeline/commands/multi-agent/analysis-jira/SKILL.md +12 -1
- package/pipeline/commands/multi-agent/analysis-resolve/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/autopilot/SKILL.md +6 -2
- package/pipeline/commands/multi-agent/autopilot-off/SKILL.md +36 -6
- package/pipeline/commands/multi-agent/autopilot-on/SKILL.md +77 -12
- package/pipeline/commands/multi-agent/autopilot-status/SKILL.md +29 -8
- package/pipeline/commands/multi-agent/build-optimize/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/channels/SKILL.md +9 -9
- package/pipeline/commands/multi-agent/complaint-analysis/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/create-jira/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/design-check/SKILL.md +16 -11
- package/pipeline/commands/multi-agent/diff-explain/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/doctor/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/feedback/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/forget/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/garbage-collect/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/graph/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/help/SKILL.md +37 -39
- package/pipeline/commands/multi-agent/ios-coding-standard/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/issue/SKILL.md +7 -1
- package/pipeline/commands/multi-agent/jira/SKILL.md +7 -1
- package/pipeline/commands/multi-agent/kill/SKILL.md +9 -3
- package/pipeline/commands/multi-agent/language/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/log/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/manual-test/SKILL.md +5 -0
- package/pipeline/commands/multi-agent/model/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/prune-logs/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/prune-prompts/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/purge/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/refactor/SKILL.md +5 -0
- package/pipeline/commands/multi-agent/research/SKILL.md +49 -0
- package/pipeline/commands/multi-agent/resume/SKILL.md +29 -6
- package/pipeline/commands/multi-agent/review/SKILL.md +28 -9
- package/pipeline/commands/multi-agent/review-analysis/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/review-issue/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/review-jira/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/route-off/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/route-on/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/route-status/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/routines/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/save/SKILL.md +6 -2
- package/pipeline/commands/multi-agent/scaffold/SKILL.md +47 -0
- package/pipeline/commands/multi-agent/scan/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/search/SKILL.md +12 -8
- package/pipeline/commands/multi-agent/security-review/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/serve/SKILL.md +62 -0
- package/pipeline/commands/multi-agent/setup/SKILL.md +27 -36
- package/pipeline/commands/multi-agent/stack/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/status/SKILL.md +10 -9
- package/pipeline/commands/multi-agent/steer/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/store-ready/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/sync/SKILL.md +13 -13
- package/pipeline/commands/multi-agent/test/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/test-accessibility/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/test-dark-mode/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/test-dynamic-type/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/test-screenshots/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/testflight-validation/SKILL.md +4 -0
- package/pipeline/commands/multi-agent/uninstall/SKILL.md +5 -1
- package/pipeline/commands/multi-agent/update/SKILL.md +4 -0
- package/pipeline/contract/CHANGELOG.md +74 -0
- package/pipeline/contract/README.md +126 -0
- package/pipeline/contract/build.mjs +427 -0
- package/pipeline/contract/fixtures/answer-result.json +11 -0
- package/pipeline/contract/fixtures/error-invalid-request.json +8 -0
- package/pipeline/contract/fixtures/error-unauthorized.json +5 -0
- package/pipeline/contract/fixtures/error-unsigned.json +5 -0
- package/pipeline/contract/fixtures/issues-empty.json +18 -0
- package/pipeline/contract/fixtures/launch-plan.json +31 -0
- package/pipeline/contract/fixtures/runs-awaiting-question.json +70 -0
- package/pipeline/contract/fixtures/runs-empty.json +6 -0
- package/pipeline/contract/fixtures/runs-failed.json +84 -0
- package/pipeline/contract/fixtures/runs-old-schema.json +70 -0
- package/pipeline/contract/fixtures/runs-pr-opened-redacted.json +101 -0
- package/pipeline/contract/fixtures/runs-pr-opened.json +106 -0
- package/pipeline/contract/fixtures/runs-running.json +84 -0
- package/pipeline/contract/fixtures/worktrees-empty.json +4 -0
- package/pipeline/contract/frozen/toolbox.json +107 -0
- package/pipeline/contract/manifest.json +263 -0
- package/pipeline/contract/types/index.d.ts +343 -0
- package/pipeline/lib/_jira-auth.sh +6 -2
- package/pipeline/lib/account-resolver.sh +1 -1
- package/pipeline/lib/autopilot-state.sh +19 -0
- package/pipeline/lib/context-link-extractor.sh +12 -5
- package/pipeline/lib/credential-inventory.sh +12 -5
- package/pipeline/lib/credential-store.sh +116 -185
- package/pipeline/lib/fetch-confluence.sh +44 -3
- package/pipeline/lib/fetch-document.sh +3 -4
- package/pipeline/lib/fetch-fortify.sh +1 -1
- package/pipeline/lib/figma-mcp-refresh.sh +2 -2
- package/pipeline/lib/figma-token.sh +5 -1
- package/pipeline/lib/issue-fetcher.sh +233 -16
- package/pipeline/lib/json-file-lock.mjs +172 -0
- package/pipeline/lib/model-dispatch.sh +21 -12
- package/pipeline/lib/model-rung.sh +6 -1
- package/pipeline/lib/multi-repo-pipeline.sh +1 -1
- package/pipeline/lib/outbound-gate.mjs +46 -16
- package/pipeline/lib/parse-complaints.sh +14 -7
- package/pipeline/lib/plan-todos.sh +3 -3
- package/pipeline/lib/post-pr-review.sh +9 -9
- package/pipeline/lib/pr-request-location.mjs +85 -0
- package/pipeline/lib/regular-file.mjs +153 -0
- package/pipeline/lib/repo-hygiene.sh +17 -0
- package/pipeline/lib/route-state.sh +5 -1
- package/pipeline/lib/run-paths.sh +3 -2
- package/pipeline/lib/stack-detect.sh +19 -1
- package/pipeline/lib/unattended-profile-check.mjs +178 -0
- package/pipeline/lib/unattended-settings-location.mjs +28 -0
- package/pipeline/lib/unattended.mjs +76 -0
- package/pipeline/lib/unattended.sh +32 -0
- package/pipeline/lib/untrusted.mjs +76 -0
- package/pipeline/lib/usage-endpoint.mjs +33 -0
- package/pipeline/lib/user-facing.mjs +82 -0
- package/pipeline/lib/user-facing.sh +58 -0
- package/pipeline/multi-agent-refs/_dev-context.md +1 -1
- package/pipeline/multi-agent-refs/analysis/evidence.md +4 -0
- package/pipeline/multi-agent-refs/analysis/locked.md +2 -2
- package/pipeline/multi-agent-refs/analysis/render.md +4 -3
- package/pipeline/multi-agent-refs/analysis/resolve.md +3 -1
- package/pipeline/multi-agent-refs/analysis/synthesis.md +4 -5
- package/pipeline/multi-agent-refs/analysis-template.md +10 -17
- package/pipeline/multi-agent-refs/channels/jira.md +1 -1
- package/pipeline/multi-agent-refs/component-dispatch.md +3 -3
- package/pipeline/multi-agent-refs/conventions-defaults.md +32 -32
- package/pipeline/multi-agent-refs/cross-cli-contract.md +10 -17
- package/pipeline/multi-agent-refs/features/autopilot-circuit-breaker.md +37 -9
- package/pipeline/multi-agent-refs/features/autopilot-operations.md +277 -0
- package/pipeline/multi-agent-refs/features/constitution.md +196 -0
- package/pipeline/multi-agent-refs/features/doctor.md +6 -3
- package/pipeline/multi-agent-refs/features/external-context-injection.md +6 -1
- package/pipeline/multi-agent-refs/features/jira-context.md +1 -1
- package/pipeline/multi-agent-refs/features/maturity-followup.md +43 -23
- package/pipeline/multi-agent-refs/features/model-fallback.md +9 -0
- package/pipeline/multi-agent-refs/features/phone-api.md +306 -0
- package/pipeline/multi-agent-refs/features/plan-critic.md +159 -0
- package/pipeline/multi-agent-refs/features/research.md +150 -0
- package/pipeline/multi-agent-refs/features/review-decision.md +185 -0
- package/pipeline/multi-agent-refs/features/scaffold.md +160 -0
- package/pipeline/multi-agent-refs/features/security-audit.md +6 -2
- package/pipeline/multi-agent-refs/features/skill-conformance.md +4 -1
- package/pipeline/multi-agent-refs/features/stack-adapters.md +116 -0
- package/pipeline/multi-agent-refs/features/unattended-gates.md +316 -0
- package/pipeline/multi-agent-refs/features/unattended-security.md +731 -0
- package/pipeline/multi-agent-refs/features/url-enrichment.md +2 -2
- package/pipeline/multi-agent-refs/features/usage-reporting.md +127 -35
- package/pipeline/multi-agent-refs/features/verify-by-test.md +1 -1
- package/pipeline/multi-agent-refs/features/visual-evidence.md +7 -7
- package/pipeline/multi-agent-refs/keychain.md +6 -11
- package/pipeline/multi-agent-refs/payload-contracts.md +2 -2
- package/pipeline/multi-agent-refs/phases/log-format.md +2 -3
- package/pipeline/multi-agent-refs/phases/modes.md +10 -12
- package/pipeline/multi-agent-refs/phases/operations.md +11 -5
- package/pipeline/multi-agent-refs/phases/phase-0-init.md +73 -81
- package/pipeline/multi-agent-refs/phases/phase-1-plan.md +22 -22
- package/pipeline/multi-agent-refs/phases/phase-2-dev.md +42 -66
- package/pipeline/multi-agent-refs/phases/phase-3-review.md +45 -79
- package/pipeline/multi-agent-refs/phases/phase-4-commit.md +28 -38
- package/pipeline/multi-agent-refs/phases/phase-5-report.md +27 -25
- package/pipeline/multi-agent-refs/phases.md +1 -1
- package/pipeline/multi-agent-refs/picker-contract.md +1 -1
- package/pipeline/multi-agent-refs/progress-contract.md +13 -16
- package/pipeline/multi-agent-refs/readiness-review.md +1 -1
- package/pipeline/multi-agent-refs/research/engine.md +91 -0
- package/pipeline/multi-agent-refs/rules.md +6 -4
- package/pipeline/multi-agent-refs/setup/repo-discovery.md +2 -2
- package/pipeline/multi-agent-refs/tracker-contract.md +2 -2
- package/pipeline/multi-agent-refs/unattended-contract.md +68 -16
- package/pipeline/rules/figma-pipeline.md +12 -12
- package/pipeline/schemas/agent-state.schema.json +480 -18
- package/pipeline/schemas/analysis-spec.schema.json +4 -4
- package/pipeline/schemas/answer-request.schema.json +24 -0
- package/pipeline/schemas/answer-result.schema.json +28 -0
- package/pipeline/schemas/autopilot-config.schema.json +111 -13
- package/pipeline/schemas/command-parameters.schema.json +99 -0
- package/pipeline/schemas/constitution.schema.json +56 -0
- package/pipeline/schemas/contract-error.schema.json +52 -0
- package/pipeline/schemas/design-check-config.schema.json +5 -1
- package/pipeline/schemas/issues.schema.json +61 -0
- package/pipeline/schemas/launch-plan.schema.json +46 -0
- package/pipeline/schemas/launch-request.schema.json +45 -0
- package/pipeline/schemas/launch.json +61 -0
- package/pipeline/schemas/launch.schema.json +84 -0
- package/pipeline/schemas/phases.json +2 -2
- package/pipeline/schemas/phases.schema.json +68 -0
- package/pipeline/schemas/phone-devices.schema.json +61 -0
- package/pipeline/schemas/phone-signed-request.schema.json +67 -0
- package/pipeline/schemas/plan-critique.schema.json +99 -0
- package/pipeline/schemas/plan-todos.schema.json +7 -7
- package/pipeline/schemas/planning-output.schema.json +5 -0
- package/pipeline/schemas/pr-request.schema.json +46 -0
- package/pipeline/schemas/prefs.schema.json +79 -8
- package/pipeline/schemas/research-output.schema.json +118 -0
- package/pipeline/schemas/review-file-exclusions.schema.json +25 -0
- package/pipeline/schemas/reviewer-output.schema.json +40 -4
- package/pipeline/schemas/run-questions.json +392 -0
- package/pipeline/schemas/run-questions.schema.json +118 -0
- package/pipeline/schemas/runs-index.schema.json +189 -0
- package/pipeline/schemas/scaffold-manifest.schema.json +43 -0
- package/pipeline/schemas/secret-patterns.schema.json +28 -0
- package/pipeline/schemas/stack-adapters.json +527 -0
- package/pipeline/schemas/stack-adapters.schema.json +184 -0
- package/pipeline/schemas/token-budget.json +1 -1
- package/pipeline/schemas/token-budget.schema.json +26 -0
- package/pipeline/schemas/triage-output.schema.json +64 -3
- package/pipeline/schemas/unattended-policy.json +139 -0
- package/pipeline/schemas/unattended-policy.schema.json +73 -0
- package/pipeline/schemas/unattended-profile.json +248 -0
- package/pipeline/schemas/unattended-profile.schema.json +198 -0
- package/pipeline/schemas/worktrees.schema.json +51 -0
- package/pipeline/scripts/README.md +1 -0
- package/pipeline/scripts/_autopilot-config.mjs +130 -0
- package/pipeline/scripts/_autopilot-ops.mjs +567 -0
- package/pipeline/scripts/_autopilot-outcomes.mjs +174 -0
- package/pipeline/scripts/_command-contract.mjs +384 -0
- package/pipeline/scripts/_cost.mjs +40 -0
- package/pipeline/scripts/_notices.mjs +160 -0
- package/pipeline/scripts/_phone-auth.mjs +485 -0
- package/pipeline/scripts/_pre-existing.mjs +294 -0
- package/pipeline/scripts/_redact.mjs +77 -0
- package/pipeline/scripts/_run-paths.mjs +4 -2
- package/pipeline/scripts/_stack-adapter.mjs +678 -0
- package/pipeline/scripts/_stack-routing.mjs +1 -1
- package/pipeline/scripts/agent-guard.py +348 -37
- package/pipeline/scripts/agent-guard.sh +41 -13
- package/pipeline/scripts/analysis-story-tree.mjs +79 -3
- package/pipeline/scripts/answer-question.mjs +181 -0
- package/pipeline/scripts/audit-log-rotate.sh +1 -4
- package/pipeline/scripts/audit-log.sh +4 -4
- package/pipeline/scripts/autopilot-arming.mjs +389 -21
- package/pipeline/scripts/autopilot-awake.mjs +255 -0
- package/pipeline/scripts/autopilot-intake.mjs +137 -36
- package/pipeline/scripts/autopilot-menubar.swift +156 -44
- package/pipeline/scripts/autopilot-publish.mjs +1625 -0
- package/pipeline/scripts/autopilot-runner.mjs +1678 -222
- package/pipeline/scripts/autopilot-status.sh +198 -33
- package/pipeline/scripts/build-lock.sh +120 -0
- package/pipeline/scripts/build-references.mjs +4 -1
- package/pipeline/scripts/build-stack-plugins.mjs +59 -22
- package/pipeline/scripts/capture-flush.sh +1 -1
- package/pipeline/scripts/capture-resume.sh +13 -9
- package/pipeline/scripts/check-derived-drift.mjs +52 -11
- package/pipeline/scripts/commands.mjs +88 -0
- package/pipeline/scripts/constitution.mjs +362 -0
- package/pipeline/scripts/contract-server.mjs +776 -0
- package/pipeline/scripts/cost-analyze.mjs +89 -39
- package/pipeline/scripts/diff-explain.mjs +12 -1
- package/pipeline/scripts/doctor.mjs +77 -28
- package/pipeline/scripts/evidence-gate.mjs +192 -12
- package/pipeline/scripts/feedback-send.mjs +4 -2
- package/pipeline/scripts/gate-ledger.mjs +449 -0
- package/pipeline/scripts/gc-abandoned.sh +132 -13
- package/pipeline/scripts/gen-facts.mjs +31 -15
- package/pipeline/scripts/gen-mode-dispatch.mjs +3 -3
- package/pipeline/scripts/github-ssh-setup.sh +140 -29
- package/pipeline/scripts/graph-mermaid.mjs +4 -1
- package/pipeline/scripts/issues.mjs +236 -0
- package/pipeline/scripts/jira-attach.sh +6 -2
- package/pipeline/scripts/jira-search.sh +4 -3
- package/pipeline/scripts/keychain-save.sh +125 -24
- package/pipeline/scripts/keychain.py +63 -93
- package/pipeline/scripts/launch-request.mjs +747 -0
- package/pipeline/scripts/localize-commands.mjs +4 -10
- package/pipeline/scripts/log-metric.sh +6 -5
- package/pipeline/scripts/maturity-followup.mjs +13 -4
- package/pipeline/scripts/memory-save.sh +25 -0
- package/pipeline/scripts/migrate-prefs.mjs +4 -3
- package/pipeline/scripts/open-questions-gate.mjs +276 -0
- package/pipeline/scripts/phase-tracker.sh +41 -27
- package/pipeline/scripts/phase0-exit-gate.mjs +22 -4
- package/pipeline/scripts/phone-devices.mjs +224 -0
- package/pipeline/scripts/plan-coverage-gate.mjs +200 -66
- package/pipeline/scripts/plan-critique-gate.mjs +591 -0
- package/pipeline/scripts/pr-request.mjs +188 -0
- package/pipeline/scripts/pre-commit-check.sh +115 -4
- package/pipeline/scripts/probe-evidence-capability.sh +44 -5
- package/pipeline/scripts/record-phase.mjs +71 -0
- package/pipeline/scripts/render-agent-log-cost.sh +17 -2
- package/pipeline/scripts/render-cost-summary.sh +1 -1
- package/pipeline/scripts/render-work-summary.sh +1 -1
- package/pipeline/scripts/require-supported-version.sh +4 -1
- package/pipeline/scripts/research-gate.mjs +704 -0
- package/pipeline/scripts/review-decision-gate.mjs +403 -0
- package/pipeline/scripts/routine-registry.mjs +5 -2
- package/pipeline/scripts/runs-index.mjs +135 -27
- package/pipeline/scripts/scaffold-gate.mjs +393 -0
- package/pipeline/scripts/skill-conformance.mjs +25 -8
- package/pipeline/scripts/skill-siblings.mjs +2 -1
- package/pipeline/scripts/smoke-cross-cli-behavior.sh +32 -6
- package/pipeline/scripts/smoke-schema-validation.sh +6 -2
- package/pipeline/scripts/spec-consistency-gate.mjs +469 -0
- package/pipeline/scripts/symbol-existence-gate.mjs +450 -0
- package/pipeline/scripts/test-gap-scan.mjs +40 -2
- package/pipeline/scripts/test-integrity-gate.mjs +20 -4
- package/pipeline/scripts/test-strength.mjs +484 -0
- package/pipeline/scripts/test-summary.mjs +651 -0
- package/pipeline/scripts/triage-memory.mjs +49 -9
- package/pipeline/scripts/unattended_policy.py +2786 -0
- package/pipeline/scripts/uninstall.mjs +10 -10
- package/pipeline/scripts/update-issue-progress.sh +1 -1
- package/pipeline/scripts/usage-identity.mjs +288 -0
- package/pipeline/scripts/usage-register.mjs +187 -67
- package/pipeline/scripts/usage-report.mjs +232 -67
- package/pipeline/scripts/validate-complaint-doc.mjs +28 -10
- package/pipeline/scripts/validate-planning.mjs +6 -0
- package/pipeline/scripts/verify-citations.mjs +151 -38
- package/pipeline/scripts/verify.mjs +58 -18
- package/pipeline/scripts/worktree-prepare.sh +126 -0
- package/pipeline/scripts/worktrees.mjs +124 -0
- package/pipeline/scripts/write-state.mjs +48 -17
- package/pipeline/skills/.skill-manifest.json +222 -226
- package/pipeline/skills/.skills-index.json +77 -88
- package/pipeline/skills/shared/README.md +44 -45
- package/pipeline/skills/shared/core/apple-archive-compliance/SKILL.md +3 -2
- package/pipeline/skills/shared/core/google-play-compliance/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent/SKILL.md +10 -9
- package/pipeline/skills/shared/core/multi-agent-analysis/SKILL.md +6 -5
- package/pipeline/skills/shared/core/multi-agent-analysis-jira/SKILL.md +11 -3
- package/pipeline/skills/shared/core/multi-agent-analysis-resolve/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-autopilot/SKILL.md +4 -3
- package/pipeline/skills/shared/core/multi-agent-autopilot-off/SKILL.md +32 -6
- package/pipeline/skills/shared/core/multi-agent-autopilot-on/SKILL.md +66 -8
- package/pipeline/skills/shared/core/multi-agent-autopilot-status/SKILL.md +27 -9
- package/pipeline/skills/shared/core/multi-agent-build-optimize/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-channels/SKILL.md +7 -4
- package/pipeline/skills/shared/core/multi-agent-complaint-analysis/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent-create-jira/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-design-check/SKILL.md +7 -5
- package/pipeline/skills/shared/core/multi-agent-diff-explain/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-doctor/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent-feedback/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-forget/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-garbage-collect/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-graph/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-help/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-ios-coding-standard/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-issue/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent-jira/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-kill/SKILL.md +7 -4
- package/pipeline/skills/shared/core/multi-agent-language/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-log/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-manual-test/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-model/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-prune-logs/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-prune-prompts/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-purge/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-refactor/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-research/SKILL.md +35 -0
- package/pipeline/skills/shared/core/multi-agent-resume/SKILL.md +7 -3
- package/pipeline/skills/shared/core/multi-agent-review/SKILL.md +7 -5
- package/pipeline/skills/shared/core/multi-agent-review-analysis/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-review-issue/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent-review-jira/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-route-off/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-route-on/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-route-status/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-routines/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-save/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent-scaffold/SKILL.md +30 -0
- package/pipeline/skills/shared/core/multi-agent-scan/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-search/SKILL.md +4 -3
- package/pipeline/skills/shared/core/multi-agent-security-review/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-serve/SKILL.md +60 -0
- package/pipeline/skills/shared/core/multi-agent-setup/SKILL.md +8 -8
- package/pipeline/skills/shared/core/multi-agent-stack/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-status/SKILL.md +7 -8
- package/pipeline/skills/shared/core/multi-agent-steer/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-store-ready/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-sync/SKILL.md +10 -10
- package/pipeline/skills/shared/core/multi-agent-test/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-test-accessibility/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-test-dark-mode/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-test-dynamic-type/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-test-screenshots/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-testflight-validation/SKILL.md +2 -1
- package/pipeline/skills/shared/core/multi-agent-uninstall/SKILL.md +3 -2
- package/pipeline/skills/shared/core/multi-agent-update/SKILL.md +2 -1
- package/pipeline/skills/shared/external/NOTICE-avdlee-swiftui-agent-skill.md +46 -0
- package/pipeline/skills/shared/external/NOTICE-dimillian-skills.md +9 -3
- package/pipeline/skills/shared/external/NOTICE-paul-hudson-skills.md +54 -0
- package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +9 -11
- package/pipeline/skills/shared/external/NOTICE-vibeship-spawner-skills.md +203 -0
- package/pipeline/skills/shared/external/NOTICE-xcode-build-skills.md +10 -3
- package/pipeline/skills/shared/external/accessibility-compliance-accessibility-audit/SKILL.md +131 -25
- package/pipeline/skills/shared/external/agent-introspection-debugging/SKILL.md +4 -3
- package/pipeline/skills/shared/external/alarmkit/SKILL.md +2 -1
- package/pipeline/skills/shared/external/android-architecture/SKILL.md +85 -76
- package/pipeline/skills/shared/external/android-build-quality-gates/SKILL.md +51 -3
- package/pipeline/skills/shared/external/android-build-quality-gates/references/patterns.md +9 -0
- package/pipeline/skills/shared/external/android-datastore/SKILL.md +4 -3
- package/pipeline/skills/shared/external/android-design-tokens-codegen/SKILL.md +4 -3
- package/pipeline/skills/shared/external/android-jetpack-compose-expert/SKILL.md +106 -181
- package/pipeline/skills/shared/external/android-jetpack-compose-expert/references/patterns.md +147 -0
- package/pipeline/skills/shared/external/android-mvi-viewmodel/SKILL.md +45 -4
- package/pipeline/skills/shared/external/android-performance/SKILL.md +27 -2
- package/pipeline/skills/shared/external/android-performance/references/patterns.md +37 -37
- package/pipeline/skills/shared/external/api-patterns/SKILL.md +111 -67
- package/pipeline/skills/shared/external/api-patterns/references/contract-details.md +128 -0
- package/pipeline/skills/shared/external/api-security-best-practices/SKILL.md +136 -186
- package/pipeline/skills/shared/external/api-security-best-practices/references/abuse-controls.md +140 -0
- package/pipeline/skills/shared/external/api-security-best-practices/references/identity-and-access.md +207 -0
- package/pipeline/skills/shared/external/api-security-best-practices/references/operations.md +66 -0
- package/pipeline/skills/shared/external/api-security-best-practices/references/request-handling.md +175 -0
- package/pipeline/skills/shared/external/app-clips/SKILL.md +2 -0
- package/pipeline/skills/shared/external/app-intents/SKILL.md +2 -0
- package/pipeline/skills/shared/external/app-store-changelog/SKILL.md +4 -3
- package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +2 -0
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +2 -0
- package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +2 -0
- package/pipeline/skills/shared/external/architecture/SKILL.md +106 -39
- package/pipeline/skills/shared/external/architecture/references/adr-and-review.md +76 -0
- package/pipeline/skills/shared/external/authentication/SKILL.md +2 -0
- package/pipeline/skills/shared/external/avkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/background-processing/SKILL.md +2 -1
- package/pipeline/skills/shared/external/backlog/SKILL.md +3 -2
- package/pipeline/skills/shared/external/callkit-voip/SKILL.md +2 -0
- package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/ci-cd-pipelines/SKILL.md +3 -2
- package/pipeline/skills/shared/external/clean-code/SKILL.md +192 -90
- package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +2 -1
- package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/compose-components/SKILL.md +4 -4
- package/pipeline/skills/shared/external/compose-navigation/SKILL.md +22 -22
- package/pipeline/skills/shared/external/compose-navigation/references/patterns.md +10 -10
- package/pipeline/skills/shared/external/compose-testing/SKILL.md +13 -6
- package/pipeline/skills/shared/external/compose-testing/references/patterns.md +59 -59
- package/pipeline/skills/shared/external/contacts-framework/SKILL.md +2 -0
- package/pipeline/skills/shared/external/context-compression/SKILL.md +118 -250
- package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +2 -0
- package/pipeline/skills/shared/external/core-data/SKILL.md +2 -0
- package/pipeline/skills/shared/external/core-motion/SKILL.md +2 -0
- package/pipeline/skills/shared/external/core-nfc/SKILL.md +2 -0
- package/pipeline/skills/shared/external/coreml/SKILL.md +2 -1
- package/pipeline/skills/shared/external/council/SKILL.md +2 -1
- package/pipeline/skills/shared/external/cryptokit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/css-modern/SKILL.md +3 -2
- package/pipeline/skills/shared/external/database-patterns/SKILL.md +3 -2
- package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +2 -0
- package/pipeline/skills/shared/external/debugging-strategies/SKILL.md +130 -20
- package/pipeline/skills/shared/external/debugging-strategies/references/hard-cases.md +54 -0
- package/pipeline/skills/shared/external/device-integrity/SKILL.md +2 -0
- package/pipeline/skills/shared/external/docker-expert/SKILL.md +137 -381
- package/pipeline/skills/shared/external/docker-expert/references/patterns.md +98 -0
- package/pipeline/skills/shared/external/energykit/SKILL.md +2 -1
- package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +3 -1
- package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +2 -2
- package/pipeline/skills/shared/external/fastapi-pro/SKILL.md +116 -185
- package/pipeline/skills/shared/external/fastapi-pro/references/app-structure.md +235 -0
- package/pipeline/skills/shared/external/fastapi-pro/references/testing-and-deployment.md +69 -0
- package/pipeline/skills/shared/external/firebase/SKILL.md +4 -3
- package/pipeline/skills/shared/external/github-actions-templates/SKILL.md +151 -293
- package/pipeline/skills/shared/external/github-actions-templates/references/patterns.md +96 -0
- package/pipeline/skills/shared/external/healthkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/hig-components-content/SKILL.md +69 -72
- package/pipeline/skills/shared/external/hig-components-content/references/content-views.md +111 -0
- package/pipeline/skills/shared/external/hig-components-layout/SKILL.md +77 -86
- package/pipeline/skills/shared/external/hig-components-layout/references/containers.md +98 -0
- package/pipeline/skills/shared/external/hig-components-status/SKILL.md +150 -78
- package/pipeline/skills/shared/external/hig-components-system/SKILL.md +76 -97
- package/pipeline/skills/shared/external/hig-components-system/references/surfaces.md +98 -0
- package/pipeline/skills/shared/external/hig-foundations/SKILL.md +48 -76
- package/pipeline/skills/shared/external/hig-foundations/references/foundations-detail.md +132 -0
- package/pipeline/skills/shared/external/hig-inputs/SKILL.md +147 -106
- package/pipeline/skills/shared/external/hig-patterns/SKILL.md +61 -77
- package/pipeline/skills/shared/external/hig-patterns/references/patterns.md +92 -0
- package/pipeline/skills/shared/external/hig-platforms/SKILL.md +147 -77
- package/pipeline/skills/shared/external/hig-technologies/SKILL.md +61 -121
- package/pipeline/skills/shared/external/hig-technologies/references/technologies.md +108 -0
- package/pipeline/skills/shared/external/homekit-matter/SKILL.md +2 -0
- package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/html-semantic/SKILL.md +3 -2
- package/pipeline/skills/shared/external/humanizer/SKILL.md +2 -1
- package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +2 -0
- package/pipeline/skills/shared/external/ios-coding-standard/SKILL.md +2 -1
- package/pipeline/skills/shared/external/ios-coding-standard/references/STANDARD.md +14 -2
- package/pipeline/skills/shared/external/ios-coding-standard/references/rules.yml +2 -2
- package/pipeline/skills/shared/external/ios-debugger-agent/SKILL.md +4 -3
- package/pipeline/skills/shared/external/ios-localization/SKILL.md +8 -6
- package/pipeline/skills/shared/external/ios-localization/evals/evals.json +2 -2
- package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +11 -11
- package/pipeline/skills/shared/external/ios-module-structure/SKILL.md +2 -1
- package/pipeline/skills/shared/external/ios-networking/SKILL.md +2 -0
- package/pipeline/skills/shared/external/ios-simulator/SKILL.md +2 -0
- package/pipeline/skills/shared/external/kotlin-coroutines-expert/SKILL.md +102 -193
- package/pipeline/skills/shared/external/kotlin-coroutines-expert/references/patterns.md +103 -0
- package/pipeline/skills/shared/external/live-activities/SKILL.md +4 -2
- package/pipeline/skills/shared/external/live-activities/evals/evals.json +2 -2
- package/pipeline/skills/shared/external/localization-reuse-map/SKILL.md +7 -9
- package/pipeline/skills/shared/external/localization-reuse-map/reference/sources-and-recipes.md +3 -3
- package/pipeline/skills/shared/external/localization-reuse-map/scripts/resolve-new-values.py +2 -2
- package/pipeline/skills/shared/external/macos-menubar-tuist-app/SKILL.md +4 -3
- package/pipeline/skills/shared/external/macos-spm-app-packaging/SKILL.md +5 -3
- package/pipeline/skills/shared/external/mapkit-location/SKILL.md +2 -0
- package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +2 -0
- package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/monorepo-architect/SKILL.md +149 -46
- package/pipeline/skills/shared/external/monorepo-architect/references/patterns.md +70 -0
- package/pipeline/skills/shared/external/musickit-audio/SKILL.md +2 -0
- package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/natural-language/SKILL.md +2 -0
- package/pipeline/skills/shared/external/nextjs-app-router/SKILL.md +3 -2
- package/pipeline/skills/shared/external/nodejs-backend-patterns/SKILL.md +91 -21
- package/pipeline/skills/shared/external/nodejs-backend-patterns/references/runtime-patterns.md +247 -0
- package/pipeline/skills/shared/external/nodejs-backend-patterns/references/testing-and-frameworks.md +57 -0
- package/pipeline/skills/shared/external/observability-engineer/SKILL.md +155 -232
- package/pipeline/skills/shared/external/observability-engineer/references/patterns.md +75 -0
- package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +2 -0
- package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +2 -2
- package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +18 -18
- package/pipeline/skills/shared/external/pdfkit/SKILL.md +2 -1
- package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +2 -0
- package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/permissionkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +2 -1
- package/pipeline/skills/shared/external/push-notifications/SKILL.md +2 -0
- package/pipeline/skills/shared/external/python-patterns/SKILL.md +3 -2
- package/pipeline/skills/shared/external/react-best-practices/SKILL.md +3 -2
- package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +2 -2
- package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +1 -1
- package/pipeline/skills/shared/external/rest-api-design/SKILL.md +3 -2
- package/pipeline/skills/shared/external/retrofit-networking/SKILL.md +7 -7
- package/pipeline/skills/shared/external/retrofit-networking/references/patterns.md +69 -69
- package/pipeline/skills/shared/external/room-database/references/patterns.md +126 -126
- package/pipeline/skills/shared/external/search-first/SKILL.md +2 -1
- package/pipeline/skills/shared/external/security-review/SKILL.md +4 -3
- package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +2 -2
- package/pipeline/skills/shared/external/signal-community/SKILL.md +1 -1
- package/pipeline/skills/shared/external/skill-creator/SKILL.md +2 -1
- package/pipeline/skills/shared/external/speech-recognition/SKILL.md +2 -1
- package/pipeline/skills/shared/external/spm-build-analysis/SKILL.md +2 -0
- package/pipeline/skills/shared/external/storekit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swift-architecture/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swift-charts/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swift-codable/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +3 -1
- package/pipeline/skills/shared/external/swift-concurrency-expert/SKILL.md +5 -4
- package/pipeline/skills/shared/external/swift-concurrency-pro/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swift-language/SKILL.md +3 -1
- package/pipeline/skills/shared/external/swift-security/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swift-testing/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swift-testing-pro/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swift-testing-pro/references/new-features.md +10 -0
- package/pipeline/skills/shared/external/swiftdata/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftdata-pro/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swiftlint/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-expert-skill/SKILL.md +3 -1
- package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +3 -1
- package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +3 -1
- package/pipeline/skills/shared/external/swiftui-performance-audit/SKILL.md +5 -4
- package/pipeline/skills/shared/external/swiftui-pro/SKILL.md +2 -1
- package/pipeline/skills/shared/external/swiftui-ui-patterns/SKILL.md +5 -4
- package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +2 -0
- package/pipeline/skills/shared/external/swiftui-view-refactor/SKILL.md +4 -3
- package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/tailwind-css/SKILL.md +3 -2
- package/pipeline/skills/shared/external/testing-backend/SKILL.md +3 -2
- package/pipeline/skills/shared/external/tipkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/typescript-patterns/SKILL.md +3 -2
- package/pipeline/skills/shared/external/vision-framework/SKILL.md +2 -0
- package/pipeline/skills/shared/external/vue-composition/SKILL.md +3 -2
- package/pipeline/skills/shared/external/weatherkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/web-accessibility/SKILL.md +3 -2
- package/pipeline/skills/shared/external/web-performance/SKILL.md +3 -2
- package/pipeline/skills/shared/external/web-testing/SKILL.md +3 -2
- package/pipeline/skills/shared/external/widgetkit/SKILL.md +2 -0
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +1 -1
- package/pipeline/skills/shared/external/xcode-build-benchmark/SKILL.md +2 -0
- package/pipeline/skills/shared/external/xcode-build-fixer/SKILL.md +2 -0
- package/pipeline/skills/shared/external/xcode-build-orchestrator/SKILL.md +2 -0
- package/pipeline/skills/shared/external/xcode-compilation-analyzer/SKILL.md +2 -0
- package/pipeline/skills/shared/external/xcode-project-analyzer/SKILL.md +2 -0
- package/pipeline/skills/skills-index.md +40 -41
- package/docs/token-budget-history.md +0 -24
- package/pipeline/skills/shared/external/agentflow/SKILL.md +0 -199
- package/pipeline/skills/shared/external/android-ui-verification/SKILL.md +0 -66
- package/pipeline/skills/shared/external/api-security-best-practices/references/auth.md +0 -299
- package/pipeline/skills/shared/external/api-security-best-practices/references/input-validation.md +0 -255
- package/pipeline/skills/shared/external/api-security-best-practices/references/rate-limiting.md +0 -167
- package/pipeline/skills/shared/external/closed-loop-delivery/SKILL.md +0 -116
- package/pipeline/skills/shared/external/ios-developer/SKILL.md +0 -216
|
@@ -1,81 +1,78 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hig-components-content
|
|
3
|
-
description: "Apple
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
description: "Apple HIG for content views mapped to SwiftUI: lists, tables, grids, charts, images, text, web views, empty states. Use when choosing or reviewing how an Apple-platform app presents content."
|
|
4
|
+
metadata:
|
|
5
|
+
risk: safe
|
|
6
|
+
source: multi-agent-pipeline
|
|
7
|
+
date_added: "2026-09-25"
|
|
7
8
|
---
|
|
8
9
|
|
|
9
|
-
#
|
|
10
|
+
# HIG: Content Views
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
Content views are the part of a screen people came for. The container around
|
|
13
|
+
them (split view, tab bar, sheet) is covered by `hig-components-layout`; this
|
|
14
|
+
skill picks the view that holds the data and checks it behaves the way the
|
|
15
|
+
platform trains people to expect.
|
|
12
16
|
|
|
13
|
-
##
|
|
17
|
+
## Start from the shape of the data
|
|
14
18
|
|
|
15
|
-
|
|
19
|
+
Pick the view from the data, not from a mockup. The same product catalogue can
|
|
20
|
+
be a list, a grid or a table depending on what the reader compares.
|
|
16
21
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
3. **Maintain visual hierarchy.** Use spacing, sizing, and grouping to establish clear information hierarchy. Primary content should be visually prominent.
|
|
20
|
-
|
|
21
|
-
4. **Use system components first.** Evaluate UICollectionView, SwiftUI Charts, WKWebView before building custom. System components come with built-in accessibility and platform adaptation.
|
|
22
|
-
|
|
23
|
-
5. **Respect platform conventions.** A collection on tvOS uses large lockups with parallax. The same collection on iOS uses compact cells with touch targets. On visionOS, content gains depth and hover effects.
|
|
24
|
-
|
|
25
|
-
6. **Handle empty states.** Show a meaningful empty state with guidance on how to populate it, not a blank screen.
|
|
26
|
-
|
|
27
|
-
7. **Optimize for performance.** Use lazy loading, cell reuse, pagination, and prefetching for large datasets.
|
|
28
|
-
|
|
29
|
-
## Topics
|
|
30
|
-
|
|
31
|
-
| Topic | Key content |
|
|
32
|
-
|---|---|
|
|
33
|
-
| Charts | Swift Charts, bar/line/area/point marks, chart accessibility, audio graphs |
|
|
34
|
-
| Collections | Grid/list layouts, compositional layout, selection, reordering, diffable data sources |
|
|
35
|
-
| Image Views | Aspect ratio handling, content modes, SF Symbol images, accessibility |
|
|
36
|
-
| Image Wells | Drag-and-drop image selection, macOS-specific, placeholder content |
|
|
37
|
-
| Color Wells | Color selection UI, system color picker, custom color spaces |
|
|
38
|
-
| Web Views | WKWebView, SFSafariViewController, navigation controls, content restrictions |
|
|
39
|
-
| Activity Views | Share sheets, activity items, custom activities, action extensions |
|
|
40
|
-
| Lockups | Image+text elements, tvOS card layouts, focus effects, shelf layouts |
|
|
41
|
-
|
|
42
|
-
## Component Selection Guide
|
|
43
|
-
|
|
44
|
-
| Content Need | Recommended Component | Platform Notes |
|
|
22
|
+
| The reader needs to... | Reach for | SwiftUI |
|
|
45
23
|
|---|---|---|
|
|
46
|
-
|
|
|
47
|
-
|
|
|
48
|
-
|
|
|
49
|
-
|
|
|
50
|
-
|
|
|
51
|
-
|
|
|
52
|
-
|
|
|
53
|
-
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
24
|
+
| Scan rows of mostly text and act on one | List | `List`, `Section`, `.listStyle(.insetGrouped)` |
|
|
25
|
+
| Compare several attributes across many rows | Table (iPad, Mac) | `Table` with `TableColumn`, `sortOrder:` binding |
|
|
26
|
+
| Browse items where the picture carries the meaning | Grid / collection | `LazyVGrid`, `LazyHGrid`, `Grid` for small fixed layouts |
|
|
27
|
+
| See a trend, distribution or proportion | Chart | Swift Charts: `Chart`, `BarMark`, `LineMark`, `SectorMark` |
|
|
28
|
+
| Read or edit longer prose | Text view | `Text`, `TextEditor`, `TextField(axis: .vertical)` |
|
|
29
|
+
| Look at one image closely | Image view | `Image`, `AsyncImage`, zoom via gesture or `ScrollView` |
|
|
30
|
+
| Show web content the app does not own | Web view | `WebView` / `WebPage` (iOS 26), `SFSafariViewController` for external links |
|
|
31
|
+
| Send the current thing elsewhere | Share sheet | `ShareLink` with a `Transferable` item |
|
|
32
|
+
| Nothing to show yet | Empty state | `ContentUnavailableView` |
|
|
33
|
+
|
|
34
|
+
A table collapses to its first column in compact width. Put the identifying
|
|
35
|
+
value (the order number, the product name) in that column and let the rest
|
|
36
|
+
reappear when there is room.
|
|
37
|
+
|
|
38
|
+
## Details on demand
|
|
39
|
+
|
|
40
|
+
Load `references/content-views.md` for per-view rules and SwiftUI examples for lists, tables, grids, charts, images, text, web content and sharing.
|
|
41
|
+
|
|
42
|
+
## Empty, loading and error states
|
|
43
|
+
|
|
44
|
+
- Use `ContentUnavailableView` for "no notes yet" and
|
|
45
|
+
`ContentUnavailableView.search` for "no results", with an action button when
|
|
46
|
+
there is an obvious next step.
|
|
47
|
+
- While loading, show placeholder rows with `.redacted(reason: .placeholder)`
|
|
48
|
+
rather than a blank screen; progress guidance is in `hig-components-status`.
|
|
49
|
+
- An error state explains what happened and what to do, in plain language,
|
|
50
|
+
and keeps whatever content was already on screen.
|
|
51
|
+
|
|
52
|
+
## Review checklist
|
|
53
|
+
|
|
54
|
+
1. Does the chosen view match what the reader compares or scans?
|
|
55
|
+
2. Does every swipe or gesture action also exist in a visible place?
|
|
56
|
+
3. Do lists and grids use system selection, refresh and context menus?
|
|
57
|
+
4. Does every chart say its conclusion and work without colour?
|
|
58
|
+
5. Do images carry labels, keep their aspect ratio while loading, and zoom?
|
|
59
|
+
6. Does text use text styles and scale to the largest accessibility sizes?
|
|
60
|
+
7. Are external links handed to Safari instead of an embedded browser?
|
|
61
|
+
8. Is there a designed empty state, loading state and error state?
|
|
62
|
+
|
|
63
|
+
## Related skills
|
|
64
|
+
|
|
65
|
+
- `hig-components-layout` for the container: split views, tabs, sheets.
|
|
66
|
+
- `hig-components-status` for progress, gauges and loading feedback.
|
|
67
|
+
- `hig-foundations` for colour, typography, SF Symbols and accessibility.
|
|
68
|
+
- `swift-charts` and `swiftui-webkit` for implementation detail.
|
|
69
|
+
|
|
70
|
+
## References
|
|
71
|
+
|
|
72
|
+
- https://developer.apple.com/design/human-interface-guidelines/lists-and-tables
|
|
73
|
+
- https://developer.apple.com/design/human-interface-guidelines/collections
|
|
74
|
+
- https://developer.apple.com/design/human-interface-guidelines/charts
|
|
75
|
+
- https://developer.apple.com/design/human-interface-guidelines/image-views
|
|
76
|
+
- https://developer.apple.com/design/human-interface-guidelines/text-views
|
|
77
|
+
- https://developer.apple.com/design/human-interface-guidelines/web-views
|
|
78
|
+
- https://developer.apple.com/design/human-interface-guidelines/activity-views
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# Content views in detail
|
|
2
|
+
|
|
3
|
+
Companion to `../SKILL.md` for the `hig-components-content` skill.
|
|
4
|
+
|
|
5
|
+
## Lists and tables
|
|
6
|
+
|
|
7
|
+
- Rows should read left to right as: leading image or symbol, primary text,
|
|
8
|
+
secondary text, trailing value or accessory. Keep that order stable across
|
|
9
|
+
every row in a list so the eye can run down one column.
|
|
10
|
+
- Swipe actions are shortcuts, not the only path. Anything in
|
|
11
|
+
`.swipeActions` must also be reachable from a context menu or the detail
|
|
12
|
+
screen, because swipes are undiscoverable and awkward with VoiceOver.
|
|
13
|
+
- Destructive swipe actions use `role: .destructive`, and a full swipe should
|
|
14
|
+
only trigger an action that can be undone or that asks first.
|
|
15
|
+
- Use `.contextMenu` for secondary actions on a row, with a preview when the
|
|
16
|
+
row opens into something visual.
|
|
17
|
+
- Selection: `List(selection:)` gives the system edit mode, multi-select with
|
|
18
|
+
two-finger pan on iPad, and keyboard selection on Mac. Do not build custom
|
|
19
|
+
checkmark rows for this.
|
|
20
|
+
- `.refreshable` gives the standard pull-to-refresh; do not add a manual
|
|
21
|
+
refresh button to the same list on iOS.
|
|
22
|
+
- Section headers are for grouping, not decoration. If every section has one
|
|
23
|
+
row, the grouping is probably wrong.
|
|
24
|
+
|
|
25
|
+
```swift
|
|
26
|
+
List(selection: $selectedOrderIDs) {
|
|
27
|
+
ForEach(orders) { order in
|
|
28
|
+
OrderRow(order: order)
|
|
29
|
+
.swipeActions(edge: .trailing) {
|
|
30
|
+
Button("Archive", systemImage: "archivebox") { archive(order) }
|
|
31
|
+
.tint(.indigo)
|
|
32
|
+
}
|
|
33
|
+
.contextMenu {
|
|
34
|
+
Button("Archive", systemImage: "archivebox") { archive(order) }
|
|
35
|
+
ShareLink(item: order.receiptURL)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
.refreshable { await store.reload() }
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Collections and grids
|
|
43
|
+
|
|
44
|
+
- Prefer adaptive columns (`GridItem(.adaptive(minimum: 140))`) so the grid
|
|
45
|
+
reflows from iPhone portrait to a Mac window without per-device code.
|
|
46
|
+
- Keep item spacing consistent and let the content define the item, not a
|
|
47
|
+
heavy card border. On iOS 26, avoid stacking glass effects on grid items;
|
|
48
|
+
glass belongs to controls and navigation layered above content.
|
|
49
|
+
- Large data sets need the lazy stacks and grids; `Grid` lays out every child
|
|
50
|
+
eagerly and suits a dozen cells, not a thousand.
|
|
51
|
+
- Give tappable cells a clear pressed state and a context menu, the same as
|
|
52
|
+
list rows.
|
|
53
|
+
|
|
54
|
+
## Charts
|
|
55
|
+
|
|
56
|
+
- A chart must answer one question at a glance. Title it with the question or
|
|
57
|
+
the conclusion ("Orders per week, last quarter"), not the data source.
|
|
58
|
+
- Choose the mark from the comparison: bars for discrete categories, lines for
|
|
59
|
+
change over continuous time, sectors only for a few parts of one whole.
|
|
60
|
+
- Colour is never the only carrier of meaning. Add `.foregroundStyle(by:)`
|
|
61
|
+
with a legend and a second cue (symbol shape, direct labels, pattern).
|
|
62
|
+
- Provide `.accessibilityLabel` and `.accessibilityValue` on marks, or an
|
|
63
|
+
audio graph via `AXChartDescriptorRepresentable`, so VoiceOver users get
|
|
64
|
+
the same answer.
|
|
65
|
+
- Use `.chartXSelection` / `.chartScrollableAxes` for exploration instead of
|
|
66
|
+
bespoke gesture code.
|
|
67
|
+
- Small inline charts (sparklines in a row or widget) drop axes and legends
|
|
68
|
+
entirely and must still make sense without them.
|
|
69
|
+
|
|
70
|
+
## Images and media
|
|
71
|
+
|
|
72
|
+
- Supply images at the scales the device needs, or use SF Symbols and vector
|
|
73
|
+
assets so they scale with Dynamic Type and the display.
|
|
74
|
+
- Every meaningful image gets an accessibility label; decorative ones get
|
|
75
|
+
`.accessibilityHidden(true)` or `Image(decorative:)`.
|
|
76
|
+
- `AsyncImage` needs a placeholder with the final aspect ratio so layout does
|
|
77
|
+
not jump when the image arrives.
|
|
78
|
+
- Let people zoom and pan full-screen images with the standard gestures; a
|
|
79
|
+
double tap toggles between fit and a closer zoom.
|
|
80
|
+
- For video use `VideoPlayer` or `AVPlayerViewController` so people get
|
|
81
|
+
system controls, Picture in Picture and AirPlay for free.
|
|
82
|
+
|
|
83
|
+
## Text
|
|
84
|
+
|
|
85
|
+
- Use text styles (`.body`, `.headline`, `.caption`) so Dynamic Type works;
|
|
86
|
+
never fix a point size for reading text.
|
|
87
|
+
- Make read-only text selectable with `.textSelection(.enabled)` when people
|
|
88
|
+
might want to copy it (an order number, a tracking code, an address).
|
|
89
|
+
- Long editable text belongs in `TextEditor` or a multi-line `TextField`, not
|
|
90
|
+
a single-line field that scrolls sideways.
|
|
91
|
+
|
|
92
|
+
## Web content
|
|
93
|
+
|
|
94
|
+
- Use an embedded web view only for content that is part of the app's own
|
|
95
|
+
experience (help pages, rendered documents). For arbitrary external links,
|
|
96
|
+
hand off to Safari or `SFSafariViewController` so people keep their
|
|
97
|
+
cookies, autofill and content blockers.
|
|
98
|
+
- On iOS 26, the SwiftUI `WebView` with a `WebPage` model replaces most
|
|
99
|
+
`UIViewRepresentable` wrappers around `WKWebView`.
|
|
100
|
+
- Do not rebuild a browser: no custom address bar, no custom back stack
|
|
101
|
+
unless the web content is the whole product.
|
|
102
|
+
|
|
103
|
+
## Sharing
|
|
104
|
+
|
|
105
|
+
- `ShareLink` presents the system share sheet; make the shared item a
|
|
106
|
+
`Transferable` type so it exports the richest representation available
|
|
107
|
+
and falls back gracefully (a file, then a URL, then plain text).
|
|
108
|
+
- Put the share action where the object is shown (toolbar of the detail view,
|
|
109
|
+
context menu of the row), and use the standard `square.and.arrow.up` symbol.
|
|
110
|
+
- Provide a `SharePreview` with a title and image so the sheet shows what is
|
|
111
|
+
being sent.
|
|
@@ -1,95 +1,86 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: hig-components-layout
|
|
3
|
-
description: "Apple
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
description: "Apple HIG for app structure mapped to SwiftUI: tab bars, split views, navigation stacks, toolbars, sheets, popovers, alerts, windows, iOS 26 Liquid Glass bars. Use when designing layout and navigation on an Apple platform."
|
|
4
|
+
metadata:
|
|
5
|
+
risk: safe
|
|
6
|
+
source: multi-agent-pipeline
|
|
7
|
+
date_added: "2026-09-25"
|
|
7
8
|
---
|
|
8
9
|
|
|
9
|
-
#
|
|
10
|
+
# HIG: Layout and Navigation Containers
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
This skill decides the frame of an app: how top-level areas are reached, how
|
|
13
|
+
people drill in and back out, and when something should appear modally. The
|
|
14
|
+
views inside the frame are covered by `hig-components-content`.
|
|
12
15
|
|
|
13
|
-
##
|
|
16
|
+
## Pick the top-level structure
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
Count the app's peer areas and ask how people switch between them.
|
|
16
19
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
3. **Adapt to screen size.** Three-column on iPad collapses to single-column on iPhone. Use size classes and adaptive APIs (NavigationSplitView) for automatic adaptation.
|
|
20
|
-
|
|
21
|
-
4. **Support multitasking on iPad.** Respond gracefully to Split View, Slide Over, and Stage Manager. Test at every split ratio and size class transition.
|
|
22
|
-
|
|
23
|
-
5. **Maintain spatial consistency on visionOS.** Windows, volumes, and ornaments in shared space. Position predictably. Use ornaments for toolbars and controls without occluding content.
|
|
24
|
-
|
|
25
|
-
6. **Use scroll views for overflow content.** Enable paging for discrete content units. Support pull-to-refresh where appropriate. Respect safe areas.
|
|
26
|
-
|
|
27
|
-
7. **Keep navigation predictable.** Users should always know where they are, how they got there, and how to go back. Use back buttons, breadcrumbs, and clear section titles.
|
|
28
|
-
|
|
29
|
-
8. **Prefer system components.** UINavigationController, UISplitViewController, NavigationSplitView, and TabView provide built-in adaptivity, accessibility, and state restoration.
|
|
30
|
-
|
|
31
|
-
## Topics
|
|
32
|
-
|
|
33
|
-
| Topic | Key content |
|
|
34
|
-
|---|---|
|
|
35
|
-
| Sidebars | Source lists, selection state, collapsible sections, iPad/Mac patterns |
|
|
36
|
-
| Column Views | Finder-style browsing, progressive disclosure through columns |
|
|
37
|
-
| Outline Views | Expandable hierarchies, disclosure triangles, tree structures |
|
|
38
|
-
| Split Views | Two/three column layouts, NavigationSplitView, adaptive collapse |
|
|
39
|
-
| Tab Views | Segmented tabs, page-style tabs, macOS tab grouping |
|
|
40
|
-
| Tab Bars | Bottom tab bars (iOS), badge counts, max tab count |
|
|
41
|
-
| Scroll Views | Paging, scroll indicators, content insets, pull-to-refresh |
|
|
42
|
-
| Windows | macOS/visionOS window management, sizing, full-screen, restoration |
|
|
43
|
-
| Panels | Inspector panels, utility panels, floating panels, macOS conventions |
|
|
44
|
-
| Lists and Tables | Plain/grouped/inset-grouped styles, swipe actions, section headers |
|
|
45
|
-
| Boxes | Content grouping containers, labeled boxes, macOS grouping |
|
|
46
|
-
| Ornaments | visionOS toolbar attachments, positioning, visibility |
|
|
47
|
-
|
|
48
|
-
## Navigation Pattern Selection
|
|
49
|
-
|
|
50
|
-
| App Structure | Recommended Pattern | Platform Adaptation |
|
|
20
|
+
| Situation | Structure | SwiftUI |
|
|
51
21
|
|---|---|---|
|
|
52
|
-
|
|
|
53
|
-
|
|
|
54
|
-
|
|
|
55
|
-
|
|
|
56
|
-
|
|
|
57
|
-
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
22
|
+
| A few peer areas used often (orders, products, account) | Tab bar | `TabView` with `Tab` values |
|
|
23
|
+
| Many areas, or areas people customise, on iPad and Mac | Sidebar | `TabView` + `.tabViewStyle(.sidebarAdaptable)`, or `NavigationSplitView` |
|
|
24
|
+
| One list that opens details | Stack | `NavigationStack` with `navigationDestination(for:)` |
|
|
25
|
+
| List, detail and a third level on large screens | Three columns | `NavigationSplitView(sidebar:content:detail:)` |
|
|
26
|
+
| Contextual settings for the current selection | Inspector | `.inspector(isPresented:)` |
|
|
27
|
+
| A single focused task that ends in done or cancel | Sheet | `.sheet`, `.fullScreenCover` for immersive tasks |
|
|
28
|
+
|
|
29
|
+
A tab bar switches context and never navigates within one; do not use a tab
|
|
30
|
+
to trigger an action like "new note". A sidebar-adaptable `TabView` gives a
|
|
31
|
+
tab bar on iPhone and a sidebar on iPad and Mac from one declaration.
|
|
32
|
+
|
|
33
|
+
## Details on demand
|
|
34
|
+
|
|
35
|
+
Load `references/containers.md` for tab bars, sidebars, navigation bars, toolbars, scroll views, windows and size adaptation, with SwiftUI examples.
|
|
36
|
+
|
|
37
|
+
## Modality: sheets, popovers, alerts
|
|
38
|
+
|
|
39
|
+
Modality interrupts. Use it for a self-contained task or a decision that must
|
|
40
|
+
happen now, and always give an obvious way out.
|
|
41
|
+
|
|
42
|
+
- **Sheet** for a task with its own steps (compose a note, edit an address).
|
|
43
|
+
Title it, put Cancel on the leading side and the confirming action on the
|
|
44
|
+
trailing side. Use `.presentationDetents([.medium, .large])` for resizable
|
|
45
|
+
sheets; on iOS 26 partial-height sheets float with a glass background and
|
|
46
|
+
inset edges.
|
|
47
|
+
- Protect unsaved input with `.interactiveDismissDisabled(hasChanges)` plus a
|
|
48
|
+
confirmation, rather than silently discarding it on swipe down.
|
|
49
|
+
- **Popover** on iPad and Mac for short contextual content anchored to a
|
|
50
|
+
control; it adapts to a sheet in compact width.
|
|
51
|
+
- **Alert** only for information that needs acknowledgement or a decision
|
|
52
|
+
with two or three outcomes. Use `role: .destructive` and `role: .cancel`.
|
|
53
|
+
- **Confirmation dialog** (`.confirmationDialog`) for choosing among actions
|
|
54
|
+
triggered by the person, such as "Delete order" with a cancel.
|
|
55
|
+
- Avoid stacking modals. If a sheet needs another sheet, the flow wants a
|
|
56
|
+
navigation stack inside the first sheet.
|
|
57
|
+
|
|
58
|
+
## Review checklist
|
|
59
|
+
|
|
60
|
+
- Is the top-level structure chosen from the number and use of peer areas?
|
|
61
|
+
- Does every tab keep its own state, and is no tab used as an action?
|
|
62
|
+
- Do modals have a clear cancel, and is unsaved work protected?
|
|
63
|
+
- Does content run under glass bars rather than behind opaque fills (iOS 26)?
|
|
64
|
+
- Are toolbar items declared with semantic placements?
|
|
65
|
+
- Does the layout adapt across size classes, windows and orientations?
|
|
66
|
+
|
|
67
|
+
## Related skills
|
|
68
|
+
|
|
69
|
+
- `hig-components-content` for lists, grids, charts inside these containers.
|
|
70
|
+
- `hig-patterns` for flows such as first launch, search and settings.
|
|
71
|
+
- `hig-platforms` for per-platform differences.
|
|
72
|
+
- `swiftui-navigation` and `swiftui-liquid-glass` for implementation detail.
|
|
73
|
+
|
|
74
|
+
## References
|
|
75
|
+
|
|
76
|
+
- https://developer.apple.com/design/human-interface-guidelines/tab-bars
|
|
77
|
+
- https://developer.apple.com/design/human-interface-guidelines/sidebars
|
|
78
|
+
- https://developer.apple.com/design/human-interface-guidelines/split-views
|
|
79
|
+
- https://developer.apple.com/design/human-interface-guidelines/toolbars
|
|
80
|
+
- https://developer.apple.com/design/human-interface-guidelines/scroll-views
|
|
81
|
+
- https://developer.apple.com/design/human-interface-guidelines/sheets
|
|
82
|
+
- https://developer.apple.com/design/human-interface-guidelines/popovers
|
|
83
|
+
- https://developer.apple.com/design/human-interface-guidelines/alerts
|
|
84
|
+
- https://developer.apple.com/design/human-interface-guidelines/windows
|
|
85
|
+
- https://developer.apple.com/design/human-interface-guidelines/panels
|
|
86
|
+
- https://developer.apple.com/design/human-interface-guidelines/layout
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Layout containers in detail
|
|
2
|
+
|
|
3
|
+
Companion to `../SKILL.md` for the `hig-components-layout` skill.
|
|
4
|
+
|
|
5
|
+
## Tab bars
|
|
6
|
+
|
|
7
|
+
- Keep tabs few and stable. Each tab keeps its own navigation state; switching
|
|
8
|
+
back returns people to where they left off.
|
|
9
|
+
- Never hide or disable a tab because of state. Show the tab and explain
|
|
10
|
+
inside it (an empty state or sign-in prompt).
|
|
11
|
+
- On iOS 18 and later, `Tab(role: .search)` places search as a dedicated tab;
|
|
12
|
+
on iOS 26 it is set apart at the trailing end of the floating glass tab bar.
|
|
13
|
+
- iOS 26 renders the tab bar as floating Liquid Glass above content. Let
|
|
14
|
+
content scroll underneath it; do not paint an opaque background behind it.
|
|
15
|
+
- `.tabBarMinimizeBehavior(.onScrollDown)` (iOS 26) shrinks the bar while
|
|
16
|
+
reading; `.tabViewBottomAccessory` places a persistent control such as a
|
|
17
|
+
playback bar above it.
|
|
18
|
+
- Badges (`.badge(3)`) are for counts people act on, not marketing.
|
|
19
|
+
|
|
20
|
+
```swift
|
|
21
|
+
TabView(selection: $selection) {
|
|
22
|
+
Tab("Orders", systemImage: "shippingbox", value: .orders) {
|
|
23
|
+
OrdersView()
|
|
24
|
+
}
|
|
25
|
+
.badge(pendingCount)
|
|
26
|
+
Tab("Products", systemImage: "square.grid.2x2", value: .products) {
|
|
27
|
+
ProductsView()
|
|
28
|
+
}
|
|
29
|
+
Tab(value: .search, role: .search) {
|
|
30
|
+
SearchView()
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
.tabViewStyle(.sidebarAdaptable)
|
|
34
|
+
.tabBarMinimizeBehavior(.onScrollDown)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Sidebars and split views
|
|
38
|
+
|
|
39
|
+
- The sidebar lists destinations, grouped into sections when there are many.
|
|
40
|
+
It does not hold actions or forms.
|
|
41
|
+
- Let the system collapse columns in compact width;
|
|
42
|
+
`NavigationSplitView` becomes a stack on iPhone automatically. Use
|
|
43
|
+
`preferredCompactColumn` to choose what shows first.
|
|
44
|
+
- Keep selection visible: the chosen sidebar row stays highlighted while its
|
|
45
|
+
detail is shown.
|
|
46
|
+
- iOS 26 draws the sidebar as a glass layer floating over content. Use
|
|
47
|
+
`.backgroundExtensionEffect()` on hero images in the detail column so they
|
|
48
|
+
extend visually beneath the sidebar instead of stopping at its edge.
|
|
49
|
+
|
|
50
|
+
## Navigation stacks and bars
|
|
51
|
+
|
|
52
|
+
- The title names the current place. Use large titles at the root of a
|
|
53
|
+
hierarchy and inline titles deeper in.
|
|
54
|
+
- The back button shows the previous title or "Back"; never replace it with a
|
|
55
|
+
custom control that breaks the edge-swipe gesture.
|
|
56
|
+
- Drive navigation from data: a `NavigationPath` or a typed selection binding
|
|
57
|
+
makes deep links and state restoration straightforward.
|
|
58
|
+
- Put no more than a couple of frequent actions in the bar. Secondary actions
|
|
59
|
+
go in a `Menu` behind an ellipsis item.
|
|
60
|
+
|
|
61
|
+
## Toolbars
|
|
62
|
+
|
|
63
|
+
- Declare actions with `.toolbar` and placements (`.primaryAction`,
|
|
64
|
+
`.topBarTrailing`, `.bottomBar`, `.confirmationAction`,
|
|
65
|
+
`.cancellationAction`) so the system positions them per platform.
|
|
66
|
+
- On iOS 26 toolbar items sit on glass and are grouped automatically;
|
|
67
|
+
`ToolbarSpacer` separates groups. Prefer SF Symbols over text for bar items
|
|
68
|
+
and let the system apply glass; do not add your own backgrounds.
|
|
69
|
+
- Use `.toolbarRole(.editor)` on document-style screens and let people
|
|
70
|
+
customise Mac and iPad toolbars with `id`-based toolbar items.
|
|
71
|
+
|
|
72
|
+
## Scroll views
|
|
73
|
+
|
|
74
|
+
- Content should scroll under bars and the tab bar; the scroll edge effect
|
|
75
|
+
keeps controls legible on iOS 26.
|
|
76
|
+
- Show scroll indicators for long content, and use `.scrollTargetBehavior(.paging)`
|
|
77
|
+
or `.viewAligned` only when the content really is paged.
|
|
78
|
+
- Never nest two scroll views on the same axis.
|
|
79
|
+
- Use `.safeAreaInset(edge:)` for a persistent footer (a checkout summary)
|
|
80
|
+
so the content scrolls clear of it.
|
|
81
|
+
|
|
82
|
+
## Windows and panels (iPadOS, macOS, visionOS)
|
|
83
|
+
|
|
84
|
+
- Support multiple windows when people might compare two items; use
|
|
85
|
+
`WindowGroup(for:)` with a value so each window restores its item.
|
|
86
|
+
- Open auxiliary windows with `openWindow(value:)`; a Mac utility panel is a
|
|
87
|
+
`Window` or `UtilityWindow` scene, not a sheet.
|
|
88
|
+
- Size layouts with flexible frames and size classes so the same scene works
|
|
89
|
+
from a narrow iPad split to a full Mac display.
|
|
90
|
+
- Add `Settings` for Mac preferences instead of a settings tab.
|
|
91
|
+
|
|
92
|
+
## Adapting across sizes
|
|
93
|
+
|
|
94
|
+
1. Check compact width (iPhone portrait, iPad slide over) and regular width.
|
|
95
|
+
2. Confirm split views collapse to a sensible first column.
|
|
96
|
+
3. Confirm tab bars turn into a sidebar where `.sidebarAdaptable` is used.
|
|
97
|
+
4. Test the largest Dynamic Type size: bars stay usable, content scrolls.
|
|
98
|
+
5. Test right-to-left: back buttons, sidebars and swipe edges mirror.
|