@rosetears/aili-pi 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +109 -0
- package/THIRD_PARTY_NOTICES.md +64 -0
- package/extensions/index.ts +6 -0
- package/install.sh +5 -0
- package/manifests/adapter-evidence.json +45 -0
- package/manifests/capabilities.json +124 -0
- package/manifests/live-verification.json +26 -0
- package/manifests/provenance.json +71 -0
- package/manifests/roles.json +474 -0
- package/manifests/sbom.json +7797 -0
- package/manifests/skill-compatibility.json +8100 -0
- package/manifests/subagent-provenance.json +37 -0
- package/package.json +91 -0
- package/prompts/build.md +8 -0
- package/prompts/define.md +8 -0
- package/prompts/ideate.md +8 -0
- package/prompts/local-review.md +8 -0
- package/prompts/ship.md +8 -0
- package/roles/agent-evaluator.md +47 -0
- package/roles/ai-regression-scout.md +47 -0
- package/roles/browser-qa-runner.md +47 -0
- package/roles/code-reviewer.md +47 -0
- package/roles/code-scout.md +47 -0
- package/roles/convergence-reviewer.md +55 -0
- package/roles/doc-researcher.md +47 -0
- package/roles/e2e-artifact-runner.md +47 -0
- package/roles/implementer.md +47 -0
- package/roles/opensource-sanitizer.md +47 -0
- package/roles/plan-auditor.md +47 -0
- package/roles/pr-test-analyzer.md +47 -0
- package/roles/security-auditor.md +47 -0
- package/roles/silent-failure-reviewer.md +47 -0
- package/roles/spec-miner.md +47 -0
- package/roles/test-coverage-reviewer.md +47 -0
- package/roles/test-engineer.md +48 -0
- package/roles/web-performance-auditor.md +47 -0
- package/roles/web-researcher.md +47 -0
- package/scripts/apply-adapter-evidence.ts +73 -0
- package/scripts/bootstrap.sh +180 -0
- package/scripts/generate-provenance.ts +143 -0
- package/scripts/local-package-e2e.ts +51 -0
- package/scripts/sync-roles.ts +213 -0
- package/scripts/sync-skills.ts +356 -0
- package/scripts/validate-runtime.ts +11 -0
- package/skills/academic-paper-review/SKILL.md +81 -0
- package/skills/agents-md-initialization/SKILL.md +121 -0
- package/skills/agents-md-initialization/references/agents-template.md +83 -0
- package/skills/agents-md-initialization/references/agents_md.py +215 -0
- package/skills/ai-regression-scout/SKILL.md +24 -0
- package/skills/aili-delivery-flow/SKILL.md +125 -0
- package/skills/aili-delivery-flow/references/artifact-contracts.md +138 -0
- package/skills/aili-delivery-flow/references/backend-routing.md +40 -0
- package/skills/aili-delivery-flow/references/build-execution-loop.md +113 -0
- package/skills/aili-delivery-flow/references/build-goal-mode.md +3 -0
- package/skills/aili-delivery-flow/references/direct-vs-delegated-work.md +38 -0
- package/skills/aili-delivery-flow/references/implementation-packages.md +54 -0
- package/skills/aili-delivery-flow/references/lifecycle.md +127 -0
- package/skills/aili-delivery-flow/references/protocols/acceptance-test-plan.md +18 -0
- package/skills/aili-delivery-flow/references/protocols/alignment-questionnaire.md +10 -0
- package/skills/aili-delivery-flow/references/protocols/closeout-report.md +101 -0
- package/skills/aili-delivery-flow/references/protocols/compact-evidence-pack.md +46 -0
- package/skills/aili-delivery-flow/references/protocols/idea-brief.md +10 -0
- package/skills/aili-delivery-flow/references/protocols/implementation-package.md +53 -0
- package/skills/aili-delivery-flow/references/protocols/research-evidence-pack.md +19 -0
- package/skills/aili-delivery-flow/references/protocols/review-report.md +7 -0
- package/skills/aili-delivery-flow/references/protocols/spec-draft.md +12 -0
- package/skills/aili-delivery-flow/references/protocols/subagent-result.md +60 -0
- package/skills/aili-delivery-flow/references/protocols/subagent-task-packet.md +29 -0
- package/skills/aili-delivery-flow/references/protocols/worktree-context.md +109 -0
- package/skills/aili-delivery-flow/references/questionnaire-policy.md +62 -0
- package/skills/aili-delivery-flow/references/review-repair-loop.md +16 -0
- package/skills/aili-delivery-flow/references/test-document-policy.md +35 -0
- package/skills/android-native-dev/SKILL.md +722 -0
- package/skills/android-native-dev/references/accessibility.md +209 -0
- package/skills/android-native-dev/references/adaptive-screens.md +231 -0
- package/skills/android-native-dev/references/design-style-guide.md +365 -0
- package/skills/android-native-dev/references/functional-requirements.md +229 -0
- package/skills/android-native-dev/references/motion-system.md +203 -0
- package/skills/android-native-dev/references/performance-stability.md +223 -0
- package/skills/android-native-dev/references/privacy-security.md +244 -0
- package/skills/android-native-dev/references/testing.md +554 -0
- package/skills/android-native-dev/references/visual-design.md +246 -0
- package/skills/api-and-interface-design/SKILL.md +318 -0
- package/skills/browser-qa/SKILL.md +32 -0
- package/skills/browser-testing-with-devtools/SKILL.md +323 -0
- package/skills/build-failure-repair/SKILL.md +49 -0
- package/skills/chart-visualization/SKILL.md +73 -0
- package/skills/ci-cd-and-automation/SKILL.md +353 -0
- package/skills/code-review-and-quality/SKILL.md +375 -0
- package/skills/code-review-quality-gates/SKILL.md +132 -0
- package/skills/code-simplification/SKILL.md +371 -0
- package/skills/comment-accuracy-review/SKILL.md +37 -0
- package/skills/consulting-analysis/SKILL.md +69 -0
- package/skills/context-engineering/SKILL.md +375 -0
- package/skills/coverage-review/SKILL.md +24 -0
- package/skills/data-analysis/SKILL.md +74 -0
- package/skills/deprecation-and-migration/SKILL.md +222 -0
- package/skills/documentation-and-adrs/SKILL.md +330 -0
- package/skills/e2e-artifact-handling/SKILL.md +30 -0
- package/skills/evidence-scoped-retrospective/SKILL.md +156 -0
- package/skills/explain-by-allegory/SKILL.md +99 -0
- package/skills/flutter-dev/SKILL.md +162 -0
- package/skills/flutter-dev/references/animations.md +497 -0
- package/skills/flutter-dev/references/bloc-state.md +281 -0
- package/skills/flutter-dev/references/forms.md +656 -0
- package/skills/flutter-dev/references/gorouter-navigation.md +257 -0
- package/skills/flutter-dev/references/localization.md +510 -0
- package/skills/flutter-dev/references/networking.md +566 -0
- package/skills/flutter-dev/references/performance.md +305 -0
- package/skills/flutter-dev/references/platform-specific.md +417 -0
- package/skills/flutter-dev/references/project-structure.md +273 -0
- package/skills/flutter-dev/references/riverpod-state.md +232 -0
- package/skills/flutter-dev/references/testing.md +364 -0
- package/skills/flutter-dev/references/widget-patterns.md +233 -0
- package/skills/frontend-dev/SKILL.md +468 -0
- package/skills/frontend-dev/canvas-fonts/ArsenalSC-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/BigShoulders-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Boldonse-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Boldonse-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/DMMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/DMMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/EricaOne-OFL.txt +94 -0
- package/skills/frontend-dev/canvas-fonts/EricaOne-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/GeistMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Gloock-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Gloock-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Italiana-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Italiana-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-Light.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Jura-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Lora-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Lora-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/NationalPark-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Outfit-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/PixelifySans-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/PixelifySans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/PoiretOne-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/PoiretOne-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/RedHatMono-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Silkscreen-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Silkscreen-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/SmoochSans-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/SmoochSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-Medium.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/Tektur-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Bold.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Italic.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/WorkSans-Regular.ttf +0 -0
- package/skills/frontend-dev/canvas-fonts/YoungSerif-OFL.txt +93 -0
- package/skills/frontend-dev/canvas-fonts/YoungSerif-Regular.ttf +0 -0
- package/skills/frontend-dev/references/asset-prompt-guide.md +43 -0
- package/skills/frontend-dev/references/env-setup.md +33 -0
- package/skills/frontend-dev/references/minimax-cli-reference.md +133 -0
- package/skills/frontend-dev/references/minimax-image-guide.md +65 -0
- package/skills/frontend-dev/references/minimax-music-guide.md +216 -0
- package/skills/frontend-dev/references/minimax-tts-guide.md +78 -0
- package/skills/frontend-dev/references/minimax-video-guide.md +82 -0
- package/skills/frontend-dev/references/minimax-voice-catalog.md +685 -0
- package/skills/frontend-dev/references/motion-recipes.md +407 -0
- package/skills/frontend-dev/references/troubleshooting.md +85 -0
- package/skills/frontend-dev/scripts/minimax_image.py +137 -0
- package/skills/frontend-dev/scripts/minimax_music.py +157 -0
- package/skills/frontend-dev/scripts/minimax_tts.py +127 -0
- package/skills/frontend-dev/scripts/minimax_video.py +187 -0
- package/skills/frontend-dev/templates/generator_template.js +223 -0
- package/skills/frontend-dev/templates/viewer.html +599 -0
- package/skills/frontend-ui-engineering/SKILL.md +367 -0
- package/skills/fullstack-dev/SKILL.md +819 -0
- package/skills/fullstack-dev/references/api-design.md +444 -0
- package/skills/fullstack-dev/references/auth-flow.md +165 -0
- package/skills/fullstack-dev/references/db-schema.md +706 -0
- package/skills/fullstack-dev/references/django-best-practices.md +466 -0
- package/skills/fullstack-dev/references/environment-management.md +78 -0
- package/skills/fullstack-dev/references/release-checklist.md +278 -0
- package/skills/fullstack-dev/references/technology-selection.md +254 -0
- package/skills/fullstack-dev/references/testing-strategy.md +404 -0
- package/skills/git-workflow-and-versioning/SKILL.md +446 -0
- package/skills/github-evidence-triage/SKILL.md +115 -0
- package/skills/harness-evolution/SKILL.md +59 -0
- package/skills/harness-evolution/references/activation-matrix.md +13 -0
- package/skills/harness-evolution/references/approval-policy.md +20 -0
- package/skills/harness-evolution/references/change-report-template.md +33 -0
- package/skills/harness-evolution/references/component-taxonomy.md +19 -0
- package/skills/harness-evolution/references/verdict-policy.md +13 -0
- package/skills/harness-issue-triage/SKILL.md +72 -0
- package/skills/harness-issue-triage/references/component-diagnosis.md +25 -0
- package/skills/harness-issue-triage/references/triage-report-template.md +34 -0
- package/skills/harness-optimization-audit/SKILL.md +125 -0
- package/skills/idea-refine/SKILL.md +191 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/SKILL.upstream.md +178 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/examples.md +238 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/frameworks.md +99 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/refinement-criteria.md +113 -0
- package/skills/idea-refine/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/idea-refine/scripts/idea-refine.upstream.sh +15 -0
- package/skills/incremental-implementation/SKILL.md +252 -0
- package/skills/ios-application-dev/SKILL.md +212 -0
- package/skills/ios-application-dev/references/accessibility.md +259 -0
- package/skills/ios-application-dev/references/graphics-animation.md +350 -0
- package/skills/ios-application-dev/references/layout-system.md +199 -0
- package/skills/ios-application-dev/references/metal-shader.md +178 -0
- package/skills/ios-application-dev/references/navigation-patterns.md +175 -0
- package/skills/ios-application-dev/references/swift-coding-standards.md +757 -0
- package/skills/ios-application-dev/references/swiftui-design-guidelines.md +1167 -0
- package/skills/ios-application-dev/references/system-integration.md +401 -0
- package/skills/ios-application-dev/references/uikit-components.md +297 -0
- package/skills/local-review-gate/SKILL.md +207 -0
- package/skills/local-review-gate/references/addyosmani-code-review-rubric.md +33 -0
- package/skills/local-review-gate/references/codex-github-compatibility.md +26 -0
- package/skills/local-review-gate/references/ecc-code-review-adaptation.md +40 -0
- package/skills/local-review-gate/references/graphify-local-review.md +33 -0
- package/skills/local-review-gate/references/orchestration-adaptation.md +51 -0
- package/skills/local-review-gate/references/review-repair-lane-adaptation.md +46 -0
- package/skills/local-review-gate/references/upstream-provenance.md +61 -0
- package/skills/mature-project-pattern-research/SKILL.md +155 -0
- package/skills/mature-project-pattern-research/references/research-rubric.md +45 -0
- package/skills/minimax-docx/LICENSE +21 -0
- package/skills/minimax-docx/SKILL.md +273 -0
- package/skills/minimax-docx/assets/styles/academic_styles.xml +250 -0
- package/skills/minimax-docx/assets/styles/corporate_styles.xml +284 -0
- package/skills/minimax-docx/assets/styles/default_styles.xml +449 -0
- package/skills/minimax-docx/assets/xsd/aesthetic-rules.xsd +470 -0
- package/skills/minimax-docx/assets/xsd/business-rules.xsd +130 -0
- package/skills/minimax-docx/assets/xsd/common-types.xsd +159 -0
- package/skills/minimax-docx/assets/xsd/wml-subset.xsd +589 -0
- package/skills/minimax-docx/references/cjk_typography.md +357 -0
- package/skills/minimax-docx/references/cjk_university_template_guide.md +184 -0
- package/skills/minimax-docx/references/comments_guide.md +191 -0
- package/skills/minimax-docx/references/design_good_bad_examples.md +829 -0
- package/skills/minimax-docx/references/design_principles.md +819 -0
- package/skills/minimax-docx/references/openxml_element_order.md +308 -0
- package/skills/minimax-docx/references/openxml_encyclopedia_part1.md +4061 -0
- package/skills/minimax-docx/references/openxml_encyclopedia_part2.md +2820 -0
- package/skills/minimax-docx/references/openxml_encyclopedia_part3.md +3381 -0
- package/skills/minimax-docx/references/openxml_namespaces.md +82 -0
- package/skills/minimax-docx/references/openxml_units.md +72 -0
- package/skills/minimax-docx/references/scenario_a_create.md +284 -0
- package/skills/minimax-docx/references/scenario_b_edit_content.md +295 -0
- package/skills/minimax-docx/references/scenario_c_apply_template.md +456 -0
- package/skills/minimax-docx/references/track_changes_guide.md +200 -0
- package/skills/minimax-docx/references/troubleshooting.md +506 -0
- package/skills/minimax-docx/references/typography_guide.md +294 -0
- package/skills/minimax-docx/references/xsd_validation_guide.md +158 -0
- package/skills/minimax-docx/scripts/doc_to_docx.sh +40 -0
- package/skills/minimax-docx/scripts/docx_preview.sh +37 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/MiniMaxAIDocx.Cli.csproj +19 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Cli/Program.cs +18 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/AnalyzeCommand.cs +147 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ApplyTemplateCommand.cs +322 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/CreateCommand.cs +324 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/DiffCommand.cs +155 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/EditContentCommand.cs +487 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/FixOrderCommand.cs +108 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/MergeRunsCommand.cs +122 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Commands/ValidateCommand.cs +107 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/MiniMaxAIDocx.Core.csproj +15 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/CommentSynchronizer.cs +169 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/ElementOrder.cs +80 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/NamespaceConstants.cs +42 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/RunMerger.cs +81 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/StyleAnalyzer.cs +81 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/TrackChangesHelper.cs +99 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/OpenXml/UnitConverter.cs +23 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples.cs +1832 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch1.cs +910 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch2.cs +999 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch3.cs +1048 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/AestheticRecipeSamples_Batch4.cs +1038 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/CharacterFormattingSamples.cs +1020 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/DocumentCreationSamples.cs +1121 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FieldAndTocSamples.cs +624 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/FootnoteAndCommentSamples.cs +675 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/HeaderFooterSamples.cs +838 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ImageSamples.cs +917 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ListAndNumberingSamples.cs +826 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/ParagraphFormattingSamples.cs +1199 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/StyleSystemSamples.cs +1487 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TableSamples.cs +1163 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Samples/TrackChangesSamples.cs +595 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/CjkHelper.cs +39 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/FontDefaults.cs +24 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Typography/PageSizes.cs +20 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/BusinessRuleValidator.cs +224 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/GateCheckValidator.cs +148 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/ValidationResult.cs +23 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.Core/Validation/XsdValidator.cs +69 -0
- package/skills/minimax-docx/scripts/dotnet/MiniMaxAIDocx.slnx +4 -0
- package/skills/minimax-docx/scripts/env_check.sh +196 -0
- package/skills/minimax-docx/scripts/setup.ps1 +274 -0
- package/skills/minimax-docx/scripts/setup.sh +504 -0
- package/skills/minimax-pdf/README.md +222 -0
- package/skills/minimax-pdf/SKILL.md +218 -0
- package/skills/minimax-pdf/design/design.md +381 -0
- package/skills/minimax-pdf/scripts/cover.py +1579 -0
- package/skills/minimax-pdf/scripts/fill_inspect.py +200 -0
- package/skills/minimax-pdf/scripts/fill_write.py +242 -0
- package/skills/minimax-pdf/scripts/make.sh +491 -0
- package/skills/minimax-pdf/scripts/merge.py +112 -0
- package/skills/minimax-pdf/scripts/palette.py +521 -0
- package/skills/minimax-pdf/scripts/reformat_parse.py +374 -0
- package/skills/minimax-pdf/scripts/render_body.py +1052 -0
- package/skills/minimax-pdf/scripts/render_cover.js +111 -0
- package/skills/minimax-xlsx/SKILL.md +156 -0
- package/skills/minimax-xlsx/references/create.md +691 -0
- package/skills/minimax-xlsx/references/edit.md +684 -0
- package/skills/minimax-xlsx/references/fix.md +37 -0
- package/skills/minimax-xlsx/references/format.md +768 -0
- package/skills/minimax-xlsx/references/ooxml-cheatsheet.md +231 -0
- package/skills/minimax-xlsx/references/read-analyze.md +97 -0
- package/skills/minimax-xlsx/references/validate.md +772 -0
- package/skills/minimax-xlsx/scripts/formula_check.py +422 -0
- package/skills/minimax-xlsx/scripts/libreoffice_recalc.py +248 -0
- package/skills/minimax-xlsx/scripts/shared_strings_builder.py +163 -0
- package/skills/minimax-xlsx/scripts/style_audit.py +575 -0
- package/skills/minimax-xlsx/scripts/xlsx_add_column.py +395 -0
- package/skills/minimax-xlsx/scripts/xlsx_insert_row.py +274 -0
- package/skills/minimax-xlsx/scripts/xlsx_pack.py +87 -0
- package/skills/minimax-xlsx/scripts/xlsx_reader.py +362 -0
- package/skills/minimax-xlsx/scripts/xlsx_shift_rows.py +396 -0
- package/skills/minimax-xlsx/scripts/xlsx_unpack.py +130 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/[Content_Types].xml +9 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/_rels/.rels +6 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/_rels/workbook.xml.rels +19 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/sharedStrings.xml +33 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/styles.xml +160 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/workbook.xml +30 -0
- package/skills/minimax-xlsx/templates/minimal_xlsx/xl/worksheets/sheet1.xml +70 -0
- package/skills/newsletter-generation/SKILL.md +71 -0
- package/skills/oss-release-readiness/SKILL.md +47 -0
- package/skills/parallel-subagent-dispatch/SKILL.md +58 -0
- package/skills/performance-optimization/SKILL.md +364 -0
- package/skills/planning-and-task-breakdown/SKILL.md +290 -0
- package/skills/pptx-generator/SKILL.md +275 -0
- package/skills/pptx-generator/references/design-system.md +392 -0
- package/skills/pptx-generator/references/editing.md +162 -0
- package/skills/pptx-generator/references/pitfalls.md +112 -0
- package/skills/pptx-generator/references/pptxgenjs.md +420 -0
- package/skills/pptx-generator/references/slide-types.md +413 -0
- package/skills/pr-test-analysis/SKILL.md +24 -0
- package/skills/react-native-dev/SKILL.md +180 -0
- package/skills/react-native-dev/references/animations.md +254 -0
- package/skills/react-native-dev/references/components.md +124 -0
- package/skills/react-native-dev/references/engineering.md +527 -0
- package/skills/react-native-dev/references/forms.md +300 -0
- package/skills/react-native-dev/references/native-capabilities.md +163 -0
- package/skills/react-native-dev/references/navigation.md +271 -0
- package/skills/react-native-dev/references/networking.md +346 -0
- package/skills/react-native-dev/references/performance.md +215 -0
- package/skills/react-native-dev/references/state-management.md +230 -0
- package/skills/react-native-dev/references/styling.md +117 -0
- package/skills/react-native-dev/references/testing.md +341 -0
- package/skills/requirements-grilling/SKILL.md +447 -0
- package/skills/requirements-grilling/references/ADR-FORMAT.md +46 -0
- package/skills/requirements-grilling/references/CONTEXT-FORMAT.md +41 -0
- package/skills/requirements-grilling/references/INTERVIEW-PACKET-FORMAT.md +62 -0
- package/skills/requirements-grilling/references/MIT-LICENSE-MATT-POCOCK.md +25 -0
- package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
- package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
- package/skills/requirements-grilling/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/interview-me/SKILL.upstream.md +225 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/LICENSE +21 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/NOTICE.md +12 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/batch-grill-me/SKILL.upstream.md +15 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/grill-me/SKILL.upstream.md +7 -0
- package/skills/requirements-grilling/references/upstream/mattpocock-skills/9603c1cc8118d08bc1b3bf34cf714f62178dea3b/grilling/SKILL.upstream.md +12 -0
- package/skills/review-pipeline/SKILL.md +38 -0
- package/skills/rose-memory/SKILL.md +210 -0
- package/skills/rose-memory/references/README.md +48 -0
- package/skills/rose-memory/references/memory_cli.py +2384 -0
- package/skills/rose-memory/references/schema.sql +315 -0
- package/skills/security-and-hardening/SKILL.md +369 -0
- package/skills/session-handoff/SKILL.md +88 -0
- package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/LICENSE +21 -0
- package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/NOTICE.md +9 -0
- package/skills/session-handoff/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/handoff/SKILL.upstream.md +16 -0
- package/skills/session-handoff/scripts/session_handoff.py +764 -0
- package/skills/shader-dev/SKILL.md +316 -0
- package/skills/shader-dev/reference/ambient-occlusion.md +382 -0
- package/skills/shader-dev/reference/analytic-ray-tracing.md +651 -0
- package/skills/shader-dev/reference/anti-aliasing.md +71 -0
- package/skills/shader-dev/reference/atmospheric-scattering.md +571 -0
- package/skills/shader-dev/reference/camera-effects.md +80 -0
- package/skills/shader-dev/reference/cellular-automata.md +635 -0
- package/skills/shader-dev/reference/color-palette.md +481 -0
- package/skills/shader-dev/reference/csg-boolean-operations.md +466 -0
- package/skills/shader-dev/reference/domain-repetition.md +436 -0
- package/skills/shader-dev/reference/domain-warping.md +419 -0
- package/skills/shader-dev/reference/fluid-simulation.md +425 -0
- package/skills/shader-dev/reference/fractal-rendering.md +525 -0
- package/skills/shader-dev/reference/lighting-model.md +639 -0
- package/skills/shader-dev/reference/matrix-transform.md +535 -0
- package/skills/shader-dev/reference/multipass-buffer.md +571 -0
- package/skills/shader-dev/reference/normal-estimation.md +418 -0
- package/skills/shader-dev/reference/particle-system.md +589 -0
- package/skills/shader-dev/reference/path-tracing-gi.md +602 -0
- package/skills/shader-dev/reference/polar-uv-manipulation.md +521 -0
- package/skills/shader-dev/reference/post-processing.md +375 -0
- package/skills/shader-dev/reference/procedural-2d-pattern.md +439 -0
- package/skills/shader-dev/reference/procedural-noise.md +551 -0
- package/skills/shader-dev/reference/ray-marching.md +396 -0
- package/skills/shader-dev/reference/sdf-2d.md +724 -0
- package/skills/shader-dev/reference/sdf-3d.md +805 -0
- package/skills/shader-dev/reference/sdf-tricks.md +63 -0
- package/skills/shader-dev/reference/shadow-techniques.md +476 -0
- package/skills/shader-dev/reference/simulation-physics.md +644 -0
- package/skills/shader-dev/reference/sound-synthesis.md +578 -0
- package/skills/shader-dev/reference/terrain-rendering.md +839 -0
- package/skills/shader-dev/reference/texture-mapping-advanced.md +87 -0
- package/skills/shader-dev/reference/texture-sampling.md +553 -0
- package/skills/shader-dev/reference/volumetric-rendering.md +608 -0
- package/skills/shader-dev/reference/voronoi-cellular-noise.md +486 -0
- package/skills/shader-dev/reference/voxel-rendering.md +701 -0
- package/skills/shader-dev/reference/water-ocean.md +445 -0
- package/skills/shader-dev/reference/webgl-pitfalls.md +41 -0
- package/skills/shader-dev/techniques/ambient-occlusion.md +364 -0
- package/skills/shader-dev/techniques/analytic-ray-tracing.md +542 -0
- package/skills/shader-dev/techniques/anti-aliasing.md +124 -0
- package/skills/shader-dev/techniques/atmospheric-scattering.md +522 -0
- package/skills/shader-dev/techniques/camera-effects.md +115 -0
- package/skills/shader-dev/techniques/cellular-automata.md +531 -0
- package/skills/shader-dev/techniques/color-palette.md +380 -0
- package/skills/shader-dev/techniques/csg-boolean-operations.md +491 -0
- package/skills/shader-dev/techniques/domain-repetition.md +333 -0
- package/skills/shader-dev/techniques/domain-warping.md +414 -0
- package/skills/shader-dev/techniques/fluid-simulation.md +1175 -0
- package/skills/shader-dev/techniques/fractal-rendering.md +436 -0
- package/skills/shader-dev/techniques/lighting-model.md +527 -0
- package/skills/shader-dev/techniques/matrix-transform.md +455 -0
- package/skills/shader-dev/techniques/multipass-buffer.md +922 -0
- package/skills/shader-dev/techniques/normal-estimation.md +318 -0
- package/skills/shader-dev/techniques/particle-system.md +1203 -0
- package/skills/shader-dev/techniques/path-tracing-gi.md +623 -0
- package/skills/shader-dev/techniques/polar-uv-manipulation.md +373 -0
- package/skills/shader-dev/techniques/post-processing.md +788 -0
- package/skills/shader-dev/techniques/procedural-2d-pattern.md +346 -0
- package/skills/shader-dev/techniques/procedural-noise.md +554 -0
- package/skills/shader-dev/techniques/ray-marching.md +467 -0
- package/skills/shader-dev/techniques/sdf-2d.md +631 -0
- package/skills/shader-dev/techniques/sdf-3d.md +589 -0
- package/skills/shader-dev/techniques/sdf-tricks.md +100 -0
- package/skills/shader-dev/techniques/shadow-techniques.md +776 -0
- package/skills/shader-dev/techniques/simulation-physics.md +1542 -0
- package/skills/shader-dev/techniques/sound-synthesis.md +490 -0
- package/skills/shader-dev/techniques/terrain-rendering.md +408 -0
- package/skills/shader-dev/techniques/texture-mapping-advanced.md +121 -0
- package/skills/shader-dev/techniques/texture-sampling.md +382 -0
- package/skills/shader-dev/techniques/volumetric-rendering.md +375 -0
- package/skills/shader-dev/techniques/voronoi-cellular-noise.md +458 -0
- package/skills/shader-dev/techniques/voxel-rendering.md +985 -0
- package/skills/shader-dev/techniques/water-ocean.md +490 -0
- package/skills/shader-dev/techniques/webgl-pitfalls.md +170 -0
- package/skills/shipping-and-launch/SKILL.md +334 -0
- package/skills/silent-failure-hunting/SKILL.md +24 -0
- package/skills/source-driven-development/SKILL.md +223 -0
- package/skills/spec-driven-development/SKILL.md +235 -0
- package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/LICENSE +21 -0
- package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/NOTICE.md +9 -0
- package/skills/spec-driven-development/references/upstream/addyosmani-agent-skills/6bcfeb9dae52b11eaad23511acc165109746dbc3/spec-driven-development/SKILL.upstream.md +206 -0
- package/skills/strategy-stress-test/SKILL.md +185 -0
- package/skills/systematic-literature-review/SKILL.md +77 -0
- package/skills/test-document-generator/SKILL.md +152 -0
- package/skills/test-document-generator/references/test-document-template.md +45 -0
- package/skills/test-driven-development/SKILL.md +399 -0
- package/skills/write-skills/GLOSSARY.md +113 -0
- package/skills/write-skills/SKILL.md +133 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/LICENSE +21 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/NOTICE.md +9 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/writing-great-skills/GLOSSARY.md +201 -0
- package/skills/write-skills/references/upstream/mattpocock-skills/391a2701dd948f94f56a39f7533f8eea9a859c87/productivity/writing-great-skills/SKILL.upstream.md +83 -0
- package/src/runtime/child-guard.ts +70 -0
- package/src/runtime/conflicts.ts +25 -0
- package/src/runtime/contracts.ts +9 -0
- package/src/runtime/doctor.ts +134 -0
- package/src/runtime/global-resources.ts +152 -0
- package/src/runtime/index.ts +23 -0
- package/src/runtime/lifecycle.ts +19 -0
- package/src/runtime/native-integrations.ts +44 -0
- package/src/runtime/path-boundaries.ts +69 -0
- package/src/runtime/registry.ts +213 -0
- package/src/runtime/roles.ts +64 -0
- package/src/runtime/rose-context.ts +24 -0
- package/src/runtime/subagents.ts +426 -0
- package/templates/APPEND_SYSTEM.md +12 -0
- package/upstream/aili-workflows.lock.json +3226 -0
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
# Layout System
|
|
2
|
+
|
|
3
|
+
iOS layout system guide covering touch targets, safe areas, UICollectionView, and Compositional Layout.
|
|
4
|
+
|
|
5
|
+
## Touch Targets
|
|
6
|
+
|
|
7
|
+
Interactive elements need adequate tap areas. The recommended minimum is 44x44 points.
|
|
8
|
+
|
|
9
|
+
```swift
|
|
10
|
+
let actionButton = UIButton(type: .system)
|
|
11
|
+
actionButton.setTitle("Submit", for: .normal)
|
|
12
|
+
view.addSubview(actionButton)
|
|
13
|
+
|
|
14
|
+
actionButton.snp.makeConstraints { make in
|
|
15
|
+
make.height.greaterThanOrEqualTo(44)
|
|
16
|
+
make.leading.trailing.equalToSuperview().inset(16)
|
|
17
|
+
make.bottom.equalTo(view.safeAreaLayoutGuide).offset(-16)
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Use 8-point increments for spacing (8, 16, 24, 32, 40, 48) to maintain visual consistency.
|
|
22
|
+
|
|
23
|
+
## Safe Area
|
|
24
|
+
|
|
25
|
+
Always constrain content to the safe area to avoid the notch, Dynamic Island, and home indicator.
|
|
26
|
+
|
|
27
|
+
```swift
|
|
28
|
+
class MainViewController: UIViewController {
|
|
29
|
+
private let contentStack = UIStackView()
|
|
30
|
+
|
|
31
|
+
override func viewDidLoad() {
|
|
32
|
+
super.viewDidLoad()
|
|
33
|
+
view.backgroundColor = .systemBackground
|
|
34
|
+
|
|
35
|
+
contentStack.axis = .vertical
|
|
36
|
+
contentStack.spacing = 16
|
|
37
|
+
view.addSubview(contentStack)
|
|
38
|
+
|
|
39
|
+
contentStack.snp.makeConstraints { make in
|
|
40
|
+
make.top.bottom.equalTo(view.safeAreaLayoutGuide)
|
|
41
|
+
make.leading.trailing.equalTo(view.safeAreaLayoutGuide).inset(16)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## UICollectionView with Diffable Data Source
|
|
48
|
+
|
|
49
|
+
```swift
|
|
50
|
+
class ItemsViewController: UIViewController {
|
|
51
|
+
enum Section { case main }
|
|
52
|
+
|
|
53
|
+
private var collectionView: UICollectionView!
|
|
54
|
+
private var dataSource: UICollectionViewDiffableDataSource<Section, Item>!
|
|
55
|
+
|
|
56
|
+
override func viewDidLoad() {
|
|
57
|
+
super.viewDidLoad()
|
|
58
|
+
setupCollectionView()
|
|
59
|
+
configureDataSource()
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
private func setupCollectionView() {
|
|
63
|
+
var config = UICollectionLayoutListConfiguration(appearance: .insetGrouped)
|
|
64
|
+
config.trailingSwipeActionsConfigurationProvider = { [weak self] indexPath in
|
|
65
|
+
self?.makeSwipeActions(for: indexPath)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
let layout = UICollectionViewCompositionalLayout.list(using: config)
|
|
69
|
+
collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
|
|
70
|
+
|
|
71
|
+
view.addSubview(collectionView)
|
|
72
|
+
collectionView.snp.makeConstraints { make in
|
|
73
|
+
make.edges.equalToSuperview()
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
private func configureDataSource() {
|
|
78
|
+
let cellRegistration = UICollectionView.CellRegistration<UICollectionViewListCell, Item> {
|
|
79
|
+
cell, indexPath, item in
|
|
80
|
+
var content = cell.defaultContentConfiguration()
|
|
81
|
+
content.text = item.title
|
|
82
|
+
content.secondaryText = item.subtitle
|
|
83
|
+
cell.contentConfiguration = content
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
dataSource = UICollectionViewDiffableDataSource(collectionView: collectionView) {
|
|
87
|
+
collectionView, indexPath, item in
|
|
88
|
+
collectionView.dequeueConfiguredReusableCell(
|
|
89
|
+
using: cellRegistration, for: indexPath, item: item
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
func updateItems(_ items: [Item]) {
|
|
95
|
+
var snapshot = NSDiffableDataSourceSnapshot<Section, Item>()
|
|
96
|
+
snapshot.appendSections([.main])
|
|
97
|
+
snapshot.appendItems(items)
|
|
98
|
+
dataSource.apply(snapshot)
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Grid Layout
|
|
104
|
+
|
|
105
|
+
```swift
|
|
106
|
+
private func createGridLayout() -> UICollectionViewLayout {
|
|
107
|
+
let itemSize = NSCollectionLayoutSize(
|
|
108
|
+
widthDimension: .fractionalWidth(1/3),
|
|
109
|
+
heightDimension: .fractionalHeight(1.0)
|
|
110
|
+
)
|
|
111
|
+
let item = NSCollectionLayoutItem(layoutSize: itemSize)
|
|
112
|
+
item.contentInsets = NSDirectionalEdgeInsets(top: 2, leading: 2, bottom: 2, trailing: 2)
|
|
113
|
+
|
|
114
|
+
let groupSize = NSCollectionLayoutSize(
|
|
115
|
+
widthDimension: .fractionalWidth(1.0),
|
|
116
|
+
heightDimension: .fractionalWidth(1/3)
|
|
117
|
+
)
|
|
118
|
+
let group = NSCollectionLayoutGroup.horizontal(layoutSize: groupSize, subitems: [item])
|
|
119
|
+
|
|
120
|
+
let section = NSCollectionLayoutSection(group: group)
|
|
121
|
+
return UICollectionViewCompositionalLayout(section: section)
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Sectioned List with Headers
|
|
126
|
+
|
|
127
|
+
```swift
|
|
128
|
+
class CategorizedListVC: UIViewController {
|
|
129
|
+
enum Section: Hashable {
|
|
130
|
+
case favorites, recent, all
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
private var dataSource: UICollectionViewDiffableDataSource<Section, Item>!
|
|
134
|
+
|
|
135
|
+
private func setupCollectionView() {
|
|
136
|
+
var config = UICollectionLayoutListConfiguration(appearance: .insetGrouped)
|
|
137
|
+
config.headerMode = .supplementary
|
|
138
|
+
|
|
139
|
+
let layout = UICollectionViewCompositionalLayout.list(using: config)
|
|
140
|
+
collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
private func configureDataSource() {
|
|
144
|
+
let cellRegistration = UICollectionView.CellRegistration<UICollectionViewListCell, Item> {
|
|
145
|
+
cell, indexPath, item in
|
|
146
|
+
var content = cell.defaultContentConfiguration()
|
|
147
|
+
content.text = item.title
|
|
148
|
+
cell.contentConfiguration = content
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
let headerRegistration = UICollectionView.SupplementaryRegistration<UICollectionViewListCell>(
|
|
152
|
+
elementKind: UICollectionView.elementKindSectionHeader
|
|
153
|
+
) { [weak self] header, elementKind, indexPath in
|
|
154
|
+
guard let section = self?.dataSource.sectionIdentifier(for: indexPath.section) else { return }
|
|
155
|
+
var content = header.defaultContentConfiguration()
|
|
156
|
+
content.text = self?.title(for: section)
|
|
157
|
+
header.contentConfiguration = content
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
dataSource = UICollectionViewDiffableDataSource(collectionView: collectionView) {
|
|
161
|
+
collectionView, indexPath, item in
|
|
162
|
+
collectionView.dequeueConfiguredReusableCell(using: cellRegistration, for: indexPath, item: item)
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
dataSource.supplementaryViewProvider = { collectionView, kind, indexPath in
|
|
166
|
+
collectionView.dequeueConfiguredReusableSupplementary(using: headerRegistration, for: indexPath)
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
func applySnapshot(favorites: [Item], recent: [Item], all: [Item]) {
|
|
171
|
+
var snapshot = NSDiffableDataSourceSnapshot<Section, Item>()
|
|
172
|
+
if !favorites.isEmpty {
|
|
173
|
+
snapshot.appendSections([.favorites])
|
|
174
|
+
snapshot.appendItems(favorites, toSection: .favorites)
|
|
175
|
+
}
|
|
176
|
+
if !recent.isEmpty {
|
|
177
|
+
snapshot.appendSections([.recent])
|
|
178
|
+
snapshot.appendItems(recent, toSection: .recent)
|
|
179
|
+
}
|
|
180
|
+
snapshot.appendSections([.all])
|
|
181
|
+
snapshot.appendItems(all, toSection: .all)
|
|
182
|
+
dataSource.apply(snapshot)
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Spacing Guidelines
|
|
188
|
+
|
|
189
|
+
| Spacing | Usage |
|
|
190
|
+
|---------|-------|
|
|
191
|
+
| 8pt | Compact element spacing |
|
|
192
|
+
| 16pt | Standard padding |
|
|
193
|
+
| 24pt | Section spacing |
|
|
194
|
+
| 32pt | Large section separation |
|
|
195
|
+
| 48pt | Screen margins (large screens) |
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
*UIKit and Apple are trademarks of Apple Inc. SnapKit is a trademark of its respective owners.*
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# Metal Shader Reference
|
|
2
|
+
|
|
3
|
+
Expert reference for Metal shaders, real-time rendering, and Apple's Tile-Based Deferred Rendering (TBDR) architecture.
|
|
4
|
+
|
|
5
|
+
## Core Principles
|
|
6
|
+
|
|
7
|
+
**Half precision first → Leverage TBDR → Function constant specialization → Use Intersector API**
|
|
8
|
+
|
|
9
|
+
### When to Use
|
|
10
|
+
|
|
11
|
+
- Metal Shading Language (MSL) development
|
|
12
|
+
- Apple GPU optimization (TBDR architecture)
|
|
13
|
+
- PBR rendering pipelines
|
|
14
|
+
- Compute shaders and parallel processing
|
|
15
|
+
- Apple Silicon ray tracing
|
|
16
|
+
- GPU profiling and debugging
|
|
17
|
+
|
|
18
|
+
### When NOT to Use
|
|
19
|
+
|
|
20
|
+
- WebGL/GLSL (different architecture)
|
|
21
|
+
- CUDA (NVIDIA only)
|
|
22
|
+
- OpenGL (deprecated on Apple)
|
|
23
|
+
- CPU-side optimization
|
|
24
|
+
|
|
25
|
+
## Expert vs Novice
|
|
26
|
+
|
|
27
|
+
| Topic | Novice | Expert |
|
|
28
|
+
|-------|--------|--------|
|
|
29
|
+
| Data types | `float` everywhere | Default `half`, `float` only for position/depth |
|
|
30
|
+
| Branching | Runtime conditionals | Function constants for compile-time elimination |
|
|
31
|
+
| Memory | Everything in device | Know constant/device/threadgroup tradeoffs |
|
|
32
|
+
| Architecture | Treat as desktop GPU | Understand TBDR: tile memory is free, bandwidth is expensive |
|
|
33
|
+
| Ray tracing | intersection queries | intersector API (hardware-aligned) |
|
|
34
|
+
| Debugging | print debugging | GPU capture, shader profiler, occupancy analysis |
|
|
35
|
+
|
|
36
|
+
## Common Anti-Patterns
|
|
37
|
+
|
|
38
|
+
| Anti-Pattern | Problem | Solution |
|
|
39
|
+
|--------------|---------|----------|
|
|
40
|
+
| 32-bit floats | Wastes registers, reduces occupancy, doubles bandwidth | Default `half`, `float` only for position/depth |
|
|
41
|
+
| Ignoring TBDR | Not using free tile memory | Use `[[color(n)]]`, memoryless targets |
|
|
42
|
+
| Runtime constant branches | Warp divergence, wastes ALU | Function constants + pipeline specialization |
|
|
43
|
+
| intersection queries | Not hardware-aligned | Use intersector API |
|
|
44
|
+
|
|
45
|
+
## Metal Evolution
|
|
46
|
+
|
|
47
|
+
| Era | Key Development |
|
|
48
|
+
|-----|-----------------|
|
|
49
|
+
| Metal 2.x | OpenGL migration, basic compute |
|
|
50
|
+
| Apple Silicon | Unified memory, tile shaders critical |
|
|
51
|
+
| Metal 3 | Mesh shaders, hardware-accelerated ray tracing |
|
|
52
|
+
| Latest | Neural Engine + GPU cooperation, Vision Pro foveated rendering |
|
|
53
|
+
|
|
54
|
+
**Apple Family 9 Note**: Threadgroup memory less advantageous vs direct device access.
|
|
55
|
+
|
|
56
|
+
## Shader Types
|
|
57
|
+
|
|
58
|
+
| Type | Purpose | Key Attributes |
|
|
59
|
+
|------|---------|----------------|
|
|
60
|
+
| Vertex | Vertex transformation | `[[stage_in]]`, `[[buffer(n)]]` |
|
|
61
|
+
| Fragment | Pixel shading | `[[color(n)]]`, `[[texture(n)]]` |
|
|
62
|
+
| Compute/Kernel | General computation | `[[thread_position_in_grid]]` |
|
|
63
|
+
| Tile | TBDR-specific | `[[imageblock]]` |
|
|
64
|
+
| Mesh | Metal 3 geometry | `[[mesh_id]]` |
|
|
65
|
+
|
|
66
|
+
## Rendering Techniques
|
|
67
|
+
|
|
68
|
+
| Technique | Description |
|
|
69
|
+
|-----------|-------------|
|
|
70
|
+
| Fullscreen quad | 4 vertex triangle strip, no MVP, post-processing basis |
|
|
71
|
+
| PBR Cook-Torrance | Fresnel Schlick + GGX Distribution + Smith Geometry |
|
|
72
|
+
| Blinn-Phong | Simple specular, half-vector calculation |
|
|
73
|
+
|
|
74
|
+
## Procedural Generation
|
|
75
|
+
|
|
76
|
+
| Technique | Use Case |
|
|
77
|
+
|-----------|----------|
|
|
78
|
+
| Hash functions | Pseudo-random basis for noise, random sampling |
|
|
79
|
+
| Voronoi | Cell textures, stones, cracks |
|
|
80
|
+
| Value/Perlin Noise | Continuous random fields |
|
|
81
|
+
| FBM | Multi-octave layering, fractal terrain, clouds |
|
|
82
|
+
| Domain Warping | Coordinate distortion, organic shapes |
|
|
83
|
+
|
|
84
|
+
## Numerical Techniques
|
|
85
|
+
|
|
86
|
+
| Technique | Formula |
|
|
87
|
+
|-----------|---------|
|
|
88
|
+
| Central difference gradient | `(f(x+h) - f(x-h)) / (2h)` |
|
|
89
|
+
| Smoothstep | `x * x * (3 - 2 * x)` |
|
|
90
|
+
| SDF operations | `min/max/smooth_min` boolean ops |
|
|
91
|
+
|
|
92
|
+
## SwiftUI + MTKView Integration
|
|
93
|
+
|
|
94
|
+
### Architecture Pattern
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
MetalView (UIViewRepresentable)
|
|
98
|
+
└── Coordinator = Renderer (MTKViewDelegate)
|
|
99
|
+
├── MTLDevice
|
|
100
|
+
├── MTLCommandQueue
|
|
101
|
+
├── MTLRenderPipelineState
|
|
102
|
+
└── MTLBuffer (vertices, uniforms)
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Uniform Alignment Rules
|
|
106
|
+
|
|
107
|
+
| Swift Type | Metal Type | Alignment |
|
|
108
|
+
|------------|------------|-----------|
|
|
109
|
+
| `Float` | `float` | 4 bytes |
|
|
110
|
+
| `SIMD2<Float>` | `float2` | 8 bytes |
|
|
111
|
+
| `SIMD3<Float>` | `float3` | **16 bytes** |
|
|
112
|
+
| `SIMD4<Float>` | `float4` | 16 bytes |
|
|
113
|
+
|
|
114
|
+
**Key**: `float3` aligns to 16 bytes. Use `MemoryLayout<T>.size` to verify.
|
|
115
|
+
|
|
116
|
+
## Command Line Tools
|
|
117
|
+
|
|
118
|
+
| Command | Purpose |
|
|
119
|
+
|---------|---------|
|
|
120
|
+
| `xcrun metal -c shader.metal -o shader.air` | Compile to AIR |
|
|
121
|
+
| `xcrun metallib shader.air -o shader.metallib` | Link to metallib |
|
|
122
|
+
| `xcrun metal shader.metal -o shader.metallib` | One-step compile & link |
|
|
123
|
+
| `xcrun metal -Weverything -c shader.metal` | Syntax check |
|
|
124
|
+
| `xcrun metal-objdump --disassemble shader.metallib` | Disassemble |
|
|
125
|
+
|
|
126
|
+
## GPU Debugging
|
|
127
|
+
|
|
128
|
+
### Xcode Workflow
|
|
129
|
+
|
|
130
|
+
1. **GPU Capture**: ⌘⇧⌥G
|
|
131
|
+
2. **Shader Profiler**: Select draw call → View Shader
|
|
132
|
+
3. **Memory Viewer**: Inspect buffer/texture
|
|
133
|
+
4. **Performance HUD**: Enable in device options
|
|
134
|
+
|
|
135
|
+
### Key Metrics
|
|
136
|
+
|
|
137
|
+
| Metric | Healthy Value | Low Value Cause |
|
|
138
|
+
|--------|---------------|-----------------|
|
|
139
|
+
| GPU Occupancy | > 80% | Memory bandwidth bottleneck |
|
|
140
|
+
| ALU Utilization | > 60% | Waiting on memory |
|
|
141
|
+
| Bandwidth | As low as possible | TBDR should minimize store |
|
|
142
|
+
|
|
143
|
+
### Debug Utility Functions
|
|
144
|
+
|
|
145
|
+
| Function | Purpose |
|
|
146
|
+
|----------|---------|
|
|
147
|
+
| heatmap | Value visualization (blue→green→red) |
|
|
148
|
+
| debugNaN | NaN/Inf detection (magenta marker) |
|
|
149
|
+
| visualizeDepth | Linearized depth visualization |
|
|
150
|
+
|
|
151
|
+
## Performance Optimization Checklist
|
|
152
|
+
|
|
153
|
+
### Data Types
|
|
154
|
+
- [ ] Default `half`, `float` only for position/depth
|
|
155
|
+
|
|
156
|
+
### Memory Management
|
|
157
|
+
- [ ] Constants in constant address space
|
|
158
|
+
- [ ] Use `.storageModeShared`
|
|
159
|
+
- [ ] Leverage tile memory (TBDR free reads)
|
|
160
|
+
- [ ] Avoid unnecessary render target stores
|
|
161
|
+
|
|
162
|
+
### Branch Optimization
|
|
163
|
+
- [ ] Function constants to eliminate branches
|
|
164
|
+
- [ ] Fixed loop bounds (GPU unrolling)
|
|
165
|
+
|
|
166
|
+
### Rendering Tips
|
|
167
|
+
- [ ] Fullscreen quad with 4 vertex triangle strip
|
|
168
|
+
- [ ] Procedural textures to avoid sampling bandwidth
|
|
169
|
+
- [ ] `[[early_fragment_tests]]` for early depth test
|
|
170
|
+
- [ ] `setFragmentBytes` for small data
|
|
171
|
+
|
|
172
|
+
### Compute Optimization
|
|
173
|
+
- [ ] Vectorize (SIMD)
|
|
174
|
+
- [ ] Reduce register pressure
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
*Metal, Apple Silicon, and Xcode are trademarks of Apple Inc.*
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# Navigation Patterns
|
|
2
|
+
|
|
3
|
+
iOS navigation patterns guide covering Tab navigation, Navigation Controller, and modal presentation.
|
|
4
|
+
|
|
5
|
+
## Tab-Based Navigation
|
|
6
|
+
|
|
7
|
+
For apps with 3-5 main sections:
|
|
8
|
+
|
|
9
|
+
```swift
|
|
10
|
+
class AppTabBarController: UITabBarController {
|
|
11
|
+
override func viewDidLoad() {
|
|
12
|
+
super.viewDidLoad()
|
|
13
|
+
|
|
14
|
+
let homeNav = UINavigationController(rootViewController: HomeVC())
|
|
15
|
+
homeNav.tabBarItem = UITabBarItem(
|
|
16
|
+
title: "Home",
|
|
17
|
+
image: UIImage(systemName: "house"),
|
|
18
|
+
selectedImage: UIImage(systemName: "house.fill")
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
let searchNav = UINavigationController(rootViewController: SearchVC())
|
|
22
|
+
searchNav.tabBarItem = UITabBarItem(
|
|
23
|
+
title: "Search",
|
|
24
|
+
image: UIImage(systemName: "magnifyingglass"),
|
|
25
|
+
tag: 1
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
let profileNav = UINavigationController(rootViewController: ProfileVC())
|
|
29
|
+
profileNav.tabBarItem = UITabBarItem(
|
|
30
|
+
title: "Profile",
|
|
31
|
+
image: UIImage(systemName: "person"),
|
|
32
|
+
selectedImage: UIImage(systemName: "person.fill")
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
viewControllers = [homeNav, searchNav, profileNav]
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Tab Bar Best Practices
|
|
41
|
+
|
|
42
|
+
| Principle | Description |
|
|
43
|
+
|-----------|-------------|
|
|
44
|
+
| Limit count | Maximum 5 tabs, use More for additional |
|
|
45
|
+
| Always visible | Tab bar stays visible at all navigation levels |
|
|
46
|
+
| State preservation | Preserve navigation state when switching tabs |
|
|
47
|
+
| Icon choice | Use SF Symbols, provide selected/unselected states |
|
|
48
|
+
|
|
49
|
+
## Navigation Controller
|
|
50
|
+
|
|
51
|
+
Use large titles for root views:
|
|
52
|
+
|
|
53
|
+
```swift
|
|
54
|
+
class ListViewController: UIViewController {
|
|
55
|
+
override func viewDidLoad() {
|
|
56
|
+
super.viewDidLoad()
|
|
57
|
+
title = "Items"
|
|
58
|
+
navigationController?.navigationBar.prefersLargeTitles = true
|
|
59
|
+
navigationItem.largeTitleDisplayMode = .always
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
func pushDetail(_ item: Item) {
|
|
63
|
+
let detail = DetailViewController(item: item)
|
|
64
|
+
detail.navigationItem.largeTitleDisplayMode = .never
|
|
65
|
+
navigationController?.pushViewController(detail, animated: true)
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Navigation Bar Configuration
|
|
71
|
+
|
|
72
|
+
```swift
|
|
73
|
+
class CustomNavigationController: UINavigationController {
|
|
74
|
+
override func viewDidLoad() {
|
|
75
|
+
super.viewDidLoad()
|
|
76
|
+
|
|
77
|
+
let appearance = UINavigationBarAppearance()
|
|
78
|
+
appearance.configureWithDefaultBackground()
|
|
79
|
+
|
|
80
|
+
navigationBar.standardAppearance = appearance
|
|
81
|
+
navigationBar.scrollEdgeAppearance = appearance
|
|
82
|
+
navigationBar.compactAppearance = appearance
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Navigation Bar Buttons
|
|
88
|
+
|
|
89
|
+
```swift
|
|
90
|
+
override func viewDidLoad() {
|
|
91
|
+
super.viewDidLoad()
|
|
92
|
+
|
|
93
|
+
navigationItem.rightBarButtonItem = UIBarButtonItem(
|
|
94
|
+
image: UIImage(systemName: "plus"),
|
|
95
|
+
style: .plain,
|
|
96
|
+
target: self,
|
|
97
|
+
action: #selector(addItem)
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
navigationItem.rightBarButtonItems = [
|
|
101
|
+
UIBarButtonItem(systemItem: .add, primaryAction: UIAction { _ in }),
|
|
102
|
+
UIBarButtonItem(systemItem: .edit, primaryAction: UIAction { _ in })
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Modal Presentation
|
|
108
|
+
|
|
109
|
+
### Sheet Presentation
|
|
110
|
+
|
|
111
|
+
```swift
|
|
112
|
+
func presentEditor() {
|
|
113
|
+
let editorVC = EditorViewController()
|
|
114
|
+
let nav = UINavigationController(rootViewController: editorVC)
|
|
115
|
+
|
|
116
|
+
editorVC.navigationItem.leftBarButtonItem = UIBarButtonItem(
|
|
117
|
+
systemItem: .cancel, target: self, action: #selector(dismissEditor)
|
|
118
|
+
)
|
|
119
|
+
editorVC.navigationItem.rightBarButtonItem = UIBarButtonItem(
|
|
120
|
+
systemItem: .done, target: self, action: #selector(saveAndDismiss)
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
if let sheet = nav.sheetPresentationController {
|
|
124
|
+
sheet.detents = [.medium(), .large()]
|
|
125
|
+
sheet.prefersGrabberVisible = true
|
|
126
|
+
sheet.prefersScrollingExpandsWhenScrolledToEdge = false
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
present(nav, animated: true)
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Custom Detent (iOS 16+)
|
|
134
|
+
|
|
135
|
+
```swift
|
|
136
|
+
if let sheet = nav.sheetPresentationController {
|
|
137
|
+
let customDetent = UISheetPresentationController.Detent.custom { context in
|
|
138
|
+
return context.maximumDetentValue * 0.4
|
|
139
|
+
}
|
|
140
|
+
sheet.detents = [customDetent, .large()]
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Full Screen Presentation
|
|
145
|
+
|
|
146
|
+
```swift
|
|
147
|
+
func presentFullScreen() {
|
|
148
|
+
let vc = FullScreenViewController()
|
|
149
|
+
vc.modalPresentationStyle = .fullScreen
|
|
150
|
+
vc.modalTransitionStyle = .coverVertical
|
|
151
|
+
present(vc, animated: true)
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Presentation Styles
|
|
156
|
+
|
|
157
|
+
| Style | Usage |
|
|
158
|
+
|-------|-------|
|
|
159
|
+
| `.automatic` | System default (usually sheet) |
|
|
160
|
+
| `.pageSheet` | Card-style, parent view visible |
|
|
161
|
+
| `.fullScreen` | Full screen cover |
|
|
162
|
+
| `.overFullScreen` | Full screen with transparent background |
|
|
163
|
+
| `.popover` | iPad popover |
|
|
164
|
+
|
|
165
|
+
## Navigation Best Practices
|
|
166
|
+
|
|
167
|
+
1. **Back gesture** - Ensure edge swipe back always works
|
|
168
|
+
2. **State restoration** - Use `UIStateRestoring` to save navigation stack
|
|
169
|
+
3. **Depth limit** - Avoid more than 4-5 navigation levels
|
|
170
|
+
4. **Cancel button** - Modal views must provide a cancel option
|
|
171
|
+
5. **Save confirmation** - Show confirmation dialog for unsaved changes
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
*UIKit, SF Symbols, and Apple are trademarks of Apple Inc.*
|