buildanything 1.7.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +3 -3
- package/.claude-plugin/plugin.json +9 -3
- package/CHANGELOG.md +112 -0
- package/README.md +2 -2
- package/agents/a11y-architect.md +166 -0
- package/agents/business-model.md +80 -29
- package/agents/code-architect.md +75 -0
- package/agents/code-reviewer.md +255 -0
- package/agents/code-simplifier.md +64 -0
- package/agents/design-brand-guardian.md +293 -53
- package/agents/design-critic.md +139 -0
- package/agents/design-inclusive-visuals-specialist.md +6 -19
- package/agents/design-ui-designer.md +335 -56
- package/agents/design-ux-architect.md +403 -55
- package/agents/design-ux-researcher.md +264 -49
- package/agents/engineering-ai-engineer.md +26 -36
- package/agents/engineering-backend-architect.md +185 -36
- package/agents/engineering-data-engineer.md +225 -43
- package/agents/engineering-devops-automator.md +227 -74
- package/agents/engineering-frontend-developer.md +210 -34
- package/agents/engineering-mobile-app-builder.md +6 -1
- package/agents/engineering-rapid-prototyper.md +30 -9
- package/agents/engineering-security-engineer.md +263 -61
- package/agents/engineering-senior-developer.md +128 -19
- package/agents/engineering-sre.md +84 -0
- package/agents/engineering-technical-writer.md +285 -41
- package/agents/feature-intel.md +110 -0
- package/agents/ios-app-review-guardian.md +66 -0
- package/agents/ios-foundation-models-specialist.md +64 -0
- package/agents/ios-storekit-specialist.md +59 -0
- package/agents/ios-swift-architect.md +129 -0
- package/agents/ios-swift-search.md +137 -0
- package/agents/ios-swift-ui-design.md +136 -0
- package/agents/marketing-app-store-optimizer.md +246 -64
- package/agents/planner.md +216 -0
- package/agents/pr-test-analyzer.md +63 -0
- package/agents/product-feedback-synthesizer.md +8 -2
- package/agents/refactor-cleaner.md +102 -0
- package/agents/security-reviewer.md +128 -0
- package/agents/silent-failure-hunter.md +54 -0
- package/agents/swift-build-resolver.md +119 -0
- package/agents/swift-reviewer.md +112 -0
- package/agents/tech-feasibility.md +21 -1
- package/agents/testing-api-tester.md +236 -59
- package/agents/testing-evidence-collector.md +26 -1
- package/agents/testing-performance-benchmarker.md +21 -1
- package/agents/testing-reality-checker.md +6 -1
- package/agents/visual-research.md +116 -0
- package/bin/adapters/cycle-counter-tool.ts +155 -0
- package/bin/adapters/scribe-tool.ts +71 -0
- package/bin/adapters/state-save-tool.ts +130 -0
- package/bin/adapters/write-lease-tool.ts +127 -0
- package/bin/buildanything-runtime.js +15 -0
- package/bin/buildanything-runtime.ts +328 -0
- package/bin/setup.js +83 -8
- package/commands/add-feature.md +2 -0
- package/commands/build.md +752 -332
- package/commands/fix.md +65 -0
- package/commands/self-check.md +121 -0
- package/commands/setup.md +114 -0
- package/commands/ux-review.md +63 -0
- package/commands/verify.md +69 -0
- package/docs/migration/agents.yaml +729 -0
- package/docs/migration/phase-graph.yaml +1088 -0
- package/docs/migration/sdk-host-compat.md +18 -0
- package/hooks/compile-writer-owner-cache.ts +171 -0
- package/hooks/hooks.json +36 -0
- package/hooks/pre-tool-use +19 -0
- package/hooks/pre-tool-use.ts +776 -0
- package/hooks/record-mode-transitions.ts +178 -0
- package/hooks/session-start +89 -2
- package/hooks/subagent-start +17 -0
- package/hooks/subagent-start.ts +471 -0
- package/hooks/subagent-stop +17 -0
- package/hooks/subagent-stop.ts +153 -0
- package/package.json +28 -5
- package/protocols/architecture-schema.md +171 -0
- package/protocols/build-fix.md +52 -0
- package/protocols/cleanup.md +54 -0
- package/protocols/decision-log.md +131 -0
- package/protocols/eval-harness.md +61 -0
- package/protocols/fake-data-detector.md +64 -0
- package/protocols/ios-context.md +234 -0
- package/protocols/ios-frameworks-map.md +323 -0
- package/protocols/ios-phase-branches.md +337 -0
- package/protocols/ios-preflight.md +27 -0
- package/protocols/launch-readiness.md +258 -0
- package/protocols/metric-loop.md +153 -0
- package/protocols/smoke-test.md +118 -0
- package/protocols/state-schema.json +388 -0
- package/protocols/state-schema.md +172 -0
- package/protocols/verify.md +127 -0
- package/protocols/visual-dna.md +185 -0
- package/protocols/web-phase-branches.md +351 -0
- package/skills/ios/_VENDORED.md +62 -0
- package/skills/ios/activitykit/LICENSE +131 -0
- package/skills/ios/activitykit/SKILL.md +505 -0
- package/skills/ios/activitykit/references/activitykit-patterns.md +868 -0
- package/skills/ios/app-intents/LICENSE +131 -0
- package/skills/ios/app-intents/SKILL.md +494 -0
- package/skills/ios/app-intents/references/appintents-advanced.md +1076 -0
- package/skills/ios/app-store-connect-metadata/SKILL.md +148 -0
- package/skills/ios/apple-on-device-ai/LICENSE +131 -0
- package/skills/ios/apple-on-device-ai/SKILL.md +505 -0
- package/skills/ios/apple-on-device-ai/references/coreml-conversion.md +425 -0
- package/skills/ios/apple-on-device-ai/references/coreml-optimization.md +344 -0
- package/skills/ios/apple-on-device-ai/references/foundation-models.md +508 -0
- package/skills/ios/apple-on-device-ai/references/mlx-swift.md +285 -0
- package/skills/ios/asc-privacy-manifest/SKILL.md +350 -0
- package/skills/ios/hig-components-content/SKILL.md +86 -0
- package/skills/ios/hig-components-content/references/activity-views.md +79 -0
- package/skills/ios/hig-components-content/references/charts.md +180 -0
- package/skills/ios/hig-components-content/references/collections.md +48 -0
- package/skills/ios/hig-components-content/references/color-wells.md +42 -0
- package/skills/ios/hig-components-content/references/image-views.md +82 -0
- package/skills/ios/hig-components-content/references/image-wells.md +34 -0
- package/skills/ios/hig-components-content/references/lockups.md +78 -0
- package/skills/ios/hig-components-content/references/web-views.md +36 -0
- package/skills/ios/hig-components-controls/SKILL.md +88 -0
- package/skills/ios/hig-components-controls/references/combo-boxes.md +40 -0
- package/skills/ios/hig-components-controls/references/controls.md +112 -0
- package/skills/ios/hig-components-controls/references/gauges.md +74 -0
- package/skills/ios/hig-components-controls/references/labels.md +92 -0
- package/skills/ios/hig-components-controls/references/pickers.md +128 -0
- package/skills/ios/hig-components-controls/references/rating-indicators.md +38 -0
- package/skills/ios/hig-components-controls/references/segmented-controls.md +94 -0
- package/skills/ios/hig-components-controls/references/sliders.md +92 -0
- package/skills/ios/hig-components-controls/references/steppers.md +40 -0
- package/skills/ios/hig-components-controls/references/text-fields.md +88 -0
- package/skills/ios/hig-components-controls/references/text-views.md +56 -0
- package/skills/ios/hig-components-controls/references/toggles.md +127 -0
- package/skills/ios/hig-components-controls/references/token-fields.md +48 -0
- package/skills/ios/hig-components-controls/references/virtual-keyboards.md +156 -0
- package/skills/ios/hig-components-dialogs/SKILL.md +76 -0
- package/skills/ios/hig-components-dialogs/references/action-sheets.md +74 -0
- package/skills/ios/hig-components-dialogs/references/alerts.md +158 -0
- package/skills/ios/hig-components-dialogs/references/digit-entry-views.md +32 -0
- package/skills/ios/hig-components-dialogs/references/popovers.md +81 -0
- package/skills/ios/hig-components-dialogs/references/sheets.md +157 -0
- package/skills/ios/hig-components-layout/SKILL.md +99 -0
- package/skills/ios/hig-components-layout/references/boxes.md +48 -0
- package/skills/ios/hig-components-layout/references/column-views.md +44 -0
- package/skills/ios/hig-components-layout/references/lists-and-tables.md +99 -0
- package/skills/ios/hig-components-layout/references/ornaments.md +56 -0
- package/skills/ios/hig-components-layout/references/outline-views.md +64 -0
- package/skills/ios/hig-components-layout/references/panels.md +75 -0
- package/skills/ios/hig-components-layout/references/scroll-views.md +123 -0
- package/skills/ios/hig-components-layout/references/sidebars.md +109 -0
- package/skills/ios/hig-components-layout/references/split-views.md +110 -0
- package/skills/ios/hig-components-layout/references/tab-bars.md +173 -0
- package/skills/ios/hig-components-layout/references/tab-views.md +68 -0
- package/skills/ios/hig-components-layout/references/windows.md +188 -0
- package/skills/ios/hig-components-menus/SKILL.md +81 -0
- package/skills/ios/hig-components-menus/references/action-button.md +61 -0
- package/skills/ios/hig-components-menus/references/buttons.md +261 -0
- package/skills/ios/hig-components-menus/references/context-menus.md +105 -0
- package/skills/ios/hig-components-menus/references/disclosure-controls.md +84 -0
- package/skills/ios/hig-components-menus/references/dock-menus.md +40 -0
- package/skills/ios/hig-components-menus/references/edit-menus.md +88 -0
- package/skills/ios/hig-components-menus/references/menus.md +171 -0
- package/skills/ios/hig-components-menus/references/pop-up-buttons.md +70 -0
- package/skills/ios/hig-components-menus/references/pull-down-buttons.md +77 -0
- package/skills/ios/hig-components-menus/references/the-menu-bar.md +303 -0
- package/skills/ios/hig-components-menus/references/toolbars.md +256 -0
- package/skills/ios/hig-components-search/SKILL.md +68 -0
- package/skills/ios/hig-components-search/references/page-controls.md +120 -0
- package/skills/ios/hig-components-search/references/path-controls.md +40 -0
- package/skills/ios/hig-components-search/references/search-fields.md +189 -0
- package/skills/ios/hig-components-status/SKILL.md +80 -0
- package/skills/ios/hig-components-status/references/activity-rings.md +105 -0
- package/skills/ios/hig-components-status/references/progress-indicators.md +116 -0
- package/skills/ios/hig-components-status/references/status-bars.md +38 -0
- package/skills/ios/hig-components-system/SKILL.md +88 -0
- package/skills/ios/hig-components-system/references/app-clips.md +387 -0
- package/skills/ios/hig-components-system/references/app-shortcuts.md +114 -0
- package/skills/ios/hig-components-system/references/complications.md +425 -0
- package/skills/ios/hig-components-system/references/home-screen-quick-actions.md +42 -0
- package/skills/ios/hig-components-system/references/live-activities.md +442 -0
- package/skills/ios/hig-components-system/references/notifications.md +153 -0
- package/skills/ios/hig-components-system/references/top-shelf.md +135 -0
- package/skills/ios/hig-components-system/references/watch-faces.md +40 -0
- package/skills/ios/hig-components-system/references/widgets.md +517 -0
- package/skills/ios/hig-foundations/SKILL.md +98 -0
- package/skills/ios/hig-foundations/references/accessibility.md +291 -0
- package/skills/ios/hig-foundations/references/app-icons.md +210 -0
- package/skills/ios/hig-foundations/references/branding.md +44 -0
- package/skills/ios/hig-foundations/references/color.md +274 -0
- package/skills/ios/hig-foundations/references/dark-mode.md +116 -0
- package/skills/ios/hig-foundations/references/icons.md +263 -0
- package/skills/ios/hig-foundations/references/images.md +176 -0
- package/skills/ios/hig-foundations/references/immersive-experiences.md +174 -0
- package/skills/ios/hig-foundations/references/inclusion.md +189 -0
- package/skills/ios/hig-foundations/references/layout.md +425 -0
- package/skills/ios/hig-foundations/references/materials.md +238 -0
- package/skills/ios/hig-foundations/references/motion.md +103 -0
- package/skills/ios/hig-foundations/references/privacy.md +231 -0
- package/skills/ios/hig-foundations/references/right-to-left.md +206 -0
- package/skills/ios/hig-foundations/references/sf-symbols.md +310 -0
- package/skills/ios/hig-foundations/references/spatial-layout.md +142 -0
- package/skills/ios/hig-foundations/references/typography.md +1146 -0
- package/skills/ios/hig-foundations/references/writing.md +91 -0
- package/skills/ios/hig-inputs/SKILL.md +94 -0
- package/skills/ios/hig-inputs/references/apple-pencil-and-scribble.md +148 -0
- package/skills/ios/hig-inputs/references/camera-control.md +107 -0
- package/skills/ios/hig-inputs/references/digital-crown.md +83 -0
- package/skills/ios/hig-inputs/references/eyes.md +120 -0
- package/skills/ios/hig-inputs/references/focus-and-selection.md +120 -0
- package/skills/ios/hig-inputs/references/game-controls.md +156 -0
- package/skills/ios/hig-inputs/references/gestures.md +208 -0
- package/skills/ios/hig-inputs/references/gyro-and-accelerometer.md +40 -0
- package/skills/ios/hig-inputs/references/keyboards.md +234 -0
- package/skills/ios/hig-inputs/references/nearby-interactions.md +70 -0
- package/skills/ios/hig-inputs/references/pointing-devices.md +237 -0
- package/skills/ios/hig-inputs/references/remotes.md +67 -0
- package/skills/ios/hig-inputs/references/spatial-interactions.md +70 -0
- package/skills/ios/hig-patterns/SKILL.md +104 -0
- package/skills/ios/hig-patterns/references/charting-data.md +81 -0
- package/skills/ios/hig-patterns/references/collaboration-and-sharing.md +86 -0
- package/skills/ios/hig-patterns/references/drag-and-drop.md +134 -0
- package/skills/ios/hig-patterns/references/entering-data.md +69 -0
- package/skills/ios/hig-patterns/references/feedback.md +67 -0
- package/skills/ios/hig-patterns/references/file-management.md +135 -0
- package/skills/ios/hig-patterns/references/going-full-screen.md +79 -0
- package/skills/ios/hig-patterns/references/launching.md +81 -0
- package/skills/ios/hig-patterns/references/live-viewing-apps.md +79 -0
- package/skills/ios/hig-patterns/references/loading.md +59 -0
- package/skills/ios/hig-patterns/references/managing-accounts.md +107 -0
- package/skills/ios/hig-patterns/references/managing-notifications.md +99 -0
- package/skills/ios/hig-patterns/references/modality.md +82 -0
- package/skills/ios/hig-patterns/references/multitasking.md +131 -0
- package/skills/ios/hig-patterns/references/offering-help.md +117 -0
- package/skills/ios/hig-patterns/references/onboarding.md +69 -0
- package/skills/ios/hig-patterns/references/playing-audio.md +124 -0
- package/skills/ios/hig-patterns/references/playing-haptics.md +280 -0
- package/skills/ios/hig-patterns/references/playing-video.md +180 -0
- package/skills/ios/hig-patterns/references/printing.md +50 -0
- package/skills/ios/hig-patterns/references/ratings-and-reviews.md +48 -0
- package/skills/ios/hig-patterns/references/searching.md +70 -0
- package/skills/ios/hig-patterns/references/settings.md +84 -0
- package/skills/ios/hig-patterns/references/undo-and-redo.md +58 -0
- package/skills/ios/hig-patterns/references/workouts.md +76 -0
- package/skills/ios/hig-platforms/SKILL.md +84 -0
- package/skills/ios/hig-platforms/references/designing-for-games.md +159 -0
- package/skills/ios/hig-platforms/references/designing-for-ios.md +66 -0
- package/skills/ios/hig-platforms/references/designing-for-ipados.md +64 -0
- package/skills/ios/hig-platforms/references/designing-for-macos.md +70 -0
- package/skills/ios/hig-platforms/references/designing-for-tvos.md +68 -0
- package/skills/ios/hig-platforms/references/designing-for-visionos.md +85 -0
- package/skills/ios/hig-platforms/references/designing-for-watchos.md +74 -0
- package/skills/ios/hig-project-context/SKILL.md +133 -0
- package/skills/ios/hig-technologies/SKILL.md +107 -0
- package/skills/ios/hig-technologies/references/airplay.md +125 -0
- package/skills/ios/hig-technologies/references/always-on.md +62 -0
- package/skills/ios/hig-technologies/references/apple-pay.md +441 -0
- package/skills/ios/hig-technologies/references/augmented-reality.md +247 -0
- package/skills/ios/hig-technologies/references/carekit.md +224 -0
- package/skills/ios/hig-technologies/references/carplay.md +119 -0
- package/skills/ios/hig-technologies/references/game-center.md +343 -0
- package/skills/ios/hig-technologies/references/generative-ai.md +110 -0
- package/skills/ios/hig-technologies/references/healthkit.md +120 -0
- package/skills/ios/hig-technologies/references/homekit.md +343 -0
- package/skills/ios/hig-technologies/references/icloud.md +52 -0
- package/skills/ios/hig-technologies/references/id-verifier.md +73 -0
- package/skills/ios/hig-technologies/references/imessage-apps-and-stickers.md +105 -0
- package/skills/ios/hig-technologies/references/in-app-purchase.md +263 -0
- package/skills/ios/hig-technologies/references/live-photos.md +54 -0
- package/skills/ios/hig-technologies/references/mac-catalyst.md +216 -0
- package/skills/ios/hig-technologies/references/machine-learning.md +394 -0
- package/skills/ios/hig-technologies/references/maps.md +221 -0
- package/skills/ios/hig-technologies/references/nfc.md +51 -0
- package/skills/ios/hig-technologies/references/photo-editing.md +40 -0
- package/skills/ios/hig-technologies/references/researchkit.md +134 -0
- package/skills/ios/hig-technologies/references/shareplay.md +142 -0
- package/skills/ios/hig-technologies/references/shazamkit.md +47 -0
- package/skills/ios/hig-technologies/references/sign-in-with-apple.md +288 -0
- package/skills/ios/hig-technologies/references/siri.md +523 -0
- package/skills/ios/hig-technologies/references/tap-to-pay-on-iphone.md +208 -0
- package/skills/ios/hig-technologies/references/voiceover.md +90 -0
- package/skills/ios/hig-technologies/references/wallet.md +420 -0
- package/skills/ios/ios-26-platform/SKILL.md +53 -0
- package/skills/ios/ios-26-platform/references/automatic-adoption.md +161 -0
- package/skills/ios/ios-26-platform/references/backward-compat.md +238 -0
- package/skills/ios/ios-26-platform/references/liquid-glass.md +255 -0
- package/skills/ios/ios-26-platform/references/swiftui-apis.md +277 -0
- package/skills/ios/ios-26-platform/references/toolbar-navigation.md +250 -0
- package/skills/ios/ios-bootstrap/SKILL.md +107 -0
- package/skills/ios/ios-bootstrap/references/apple-docs-mcp-config.md +28 -0
- package/skills/ios/ios-bootstrap/references/new-project-dialog.md +41 -0
- package/skills/ios/ios-bootstrap/references/xcode-mcp-config.md +29 -0
- package/skills/ios/ios-debugger-agent/LICENSE +21 -0
- package/skills/ios/ios-debugger-agent/SKILL.md +58 -0
- package/skills/ios/ios-debugger-agent/agents/openai.yaml +4 -0
- package/skills/ios/ios-entitlements-generator/SKILL.md +47 -0
- package/skills/ios/ios-info-plist-hardening/SKILL.md +130 -0
- package/skills/ios/ios-maestro-flow-author/SKILL.md +68 -0
- package/skills/ios/ios-maestro-flow-author/references/input-and-scroll.yaml +17 -0
- package/skills/ios/ios-maestro-flow-author/references/modal-and-dismiss.yaml +14 -0
- package/skills/ios/ios-maestro-flow-author/references/onboarding-flow.yaml +16 -0
- package/skills/ios/ios-maestro-flow-author/references/tab-navigation.yaml +13 -0
- package/skills/ios/ios-maestro-flow-author/references/tap-and-assert.yaml +9 -0
- package/skills/ios/swift-accessibility/LICENSE +21 -0
- package/skills/ios/swift-accessibility/SKILL.md +371 -0
- package/skills/ios/swift-accessibility/examples/before-after-appkit.md +446 -0
- package/skills/ios/swift-accessibility/examples/before-after-swiftui.md +441 -0
- package/skills/ios/swift-accessibility/examples/before-after-uikit.md +464 -0
- package/skills/ios/swift-accessibility/references/assistive-access.md +441 -0
- package/skills/ios/swift-accessibility/references/display-settings.md +491 -0
- package/skills/ios/swift-accessibility/references/dynamic-type.md +420 -0
- package/skills/ios/swift-accessibility/references/media-accessibility.md +421 -0
- package/skills/ios/swift-accessibility/references/motor-input.md +393 -0
- package/skills/ios/swift-accessibility/references/nutrition-labels.md +362 -0
- package/skills/ios/swift-accessibility/references/platform-specifics.md +515 -0
- package/skills/ios/swift-accessibility/references/semantic-structure.md +585 -0
- package/skills/ios/swift-accessibility/references/testing-auditing.md +507 -0
- package/skills/ios/swift-accessibility/references/voice-control.md +317 -0
- package/skills/ios/swift-accessibility/references/voiceover-swiftui.md +584 -0
- package/skills/ios/swift-accessibility/references/voiceover-uikit.md +519 -0
- package/skills/ios/swift-accessibility/references/wcag-mapping.md +167 -0
- package/skills/ios/swift-accessibility/resources/audit-template.swift +128 -0
- package/skills/ios/swift-accessibility/resources/qa-checklist.md +258 -0
- package/skills/ios/swift-actor-persistence/SKILL.md +143 -0
- package/skills/ios/swift-concurrency/LICENSE +21 -0
- package/skills/ios/swift-concurrency/SKILL.md +171 -0
- package/skills/ios/swift-concurrency/references/_index.md +50 -0
- package/skills/ios/swift-concurrency/references/actors.md +660 -0
- package/skills/ios/swift-concurrency/references/async-algorithms.md +847 -0
- package/skills/ios/swift-concurrency/references/async-await-basics.md +266 -0
- package/skills/ios/swift-concurrency/references/async-sequences.md +710 -0
- package/skills/ios/swift-concurrency/references/core-data.md +560 -0
- package/skills/ios/swift-concurrency/references/glossary.md +135 -0
- package/skills/ios/swift-concurrency/references/linting.md +155 -0
- package/skills/ios/swift-concurrency/references/memory-management.md +569 -0
- package/skills/ios/swift-concurrency/references/migration.md +1104 -0
- package/skills/ios/swift-concurrency/references/performance.md +593 -0
- package/skills/ios/swift-concurrency/references/sendable.md +598 -0
- package/skills/ios/swift-concurrency/references/tasks.md +636 -0
- package/skills/ios/swift-concurrency/references/testing.md +592 -0
- package/skills/ios/swift-concurrency/references/threading.md +495 -0
- package/skills/ios/swift-concurrency-6-2/SKILL.md +216 -0
- package/skills/ios/swift-protocol-di-testing/SKILL.md +190 -0
- package/skills/ios/swift-security-expert/LICENSE +21 -0
- package/skills/ios/swift-security-expert/SKILL.md +470 -0
- package/skills/ios/swift-security-expert/references/biometric-authentication.md +565 -0
- package/skills/ios/swift-security-expert/references/certificate-trust.md +592 -0
- package/skills/ios/swift-security-expert/references/common-anti-patterns.md +690 -0
- package/skills/ios/swift-security-expert/references/compliance-owasp-mapping.md +537 -0
- package/skills/ios/swift-security-expert/references/credential-storage-patterns.md +721 -0
- package/skills/ios/swift-security-expert/references/cryptokit-public-key.md +505 -0
- package/skills/ios/swift-security-expert/references/cryptokit-symmetric.md +497 -0
- package/skills/ios/swift-security-expert/references/keychain-access-control.md +508 -0
- package/skills/ios/swift-security-expert/references/keychain-fundamentals.md +596 -0
- package/skills/ios/swift-security-expert/references/keychain-item-classes.md +476 -0
- package/skills/ios/swift-security-expert/references/keychain-sharing.md +458 -0
- package/skills/ios/swift-security-expert/references/migration-legacy-stores.md +727 -0
- package/skills/ios/swift-security-expert/references/secure-enclave.md +539 -0
- package/skills/ios/swift-security-expert/references/testing-security-code.md +781 -0
- package/skills/ios/swift-testing-expert/LICENSE +21 -0
- package/skills/ios/swift-testing-expert/SKILL.md +79 -0
- package/skills/ios/swift-testing-expert/references/_index.md +12 -0
- package/skills/ios/swift-testing-expert/references/async-testing-and-waiting.md +127 -0
- package/skills/ios/swift-testing-expert/references/expectations.md +145 -0
- package/skills/ios/swift-testing-expert/references/fundamentals.md +141 -0
- package/skills/ios/swift-testing-expert/references/migration-from-xctest.md +127 -0
- package/skills/ios/swift-testing-expert/references/parallelization-and-isolation.md +95 -0
- package/skills/ios/swift-testing-expert/references/parameterized-testing.md +284 -0
- package/skills/ios/swift-testing-expert/references/performance-and-best-practices.md +187 -0
- package/skills/ios/swift-testing-expert/references/traits-and-tags.md +114 -0
- package/skills/ios/swift-testing-expert/references/xcode-workflows.md +70 -0
- package/skills/ios/swiftdata-pro/LICENSE +21 -0
- package/skills/ios/swiftdata-pro/SKILL.md +102 -0
- package/skills/ios/swiftdata-pro/agents/openai.yaml +10 -0
- package/skills/ios/swiftdata-pro/assets/swiftdata-pro-icon.png +0 -0
- package/skills/ios/swiftdata-pro/assets/swiftdata-pro-icon.svg +29 -0
- package/skills/ios/swiftdata-pro/references/class-inheritance.md +104 -0
- package/skills/ios/swiftdata-pro/references/cloudkit.md +10 -0
- package/skills/ios/swiftdata-pro/references/core-rules.md +20 -0
- package/skills/ios/swiftdata-pro/references/indexing.md +27 -0
- package/skills/ios/swiftdata-pro/references/predicates.md +73 -0
- package/skills/ios/swiftui-design-principles/AGENTS.md +21 -0
- package/skills/ios/swiftui-design-principles/LICENSE +21 -0
- package/skills/ios/swiftui-design-principles/README.md +41 -0
- package/skills/ios/swiftui-design-principles/SKILL.md +605 -0
- package/skills/ios/swiftui-design-principles/metadata.json +10 -0
- package/skills/ios/swiftui-design-tokens/SKILL.md +475 -0
- package/skills/ios/swiftui-liquid-glass/LICENSE +21 -0
- package/skills/ios/swiftui-liquid-glass/SKILL.md +95 -0
- package/skills/ios/swiftui-liquid-glass/agents/openai.yaml +4 -0
- package/skills/ios/swiftui-liquid-glass/references/liquid-glass.md +280 -0
- package/skills/ios/swiftui-performance-audit/LICENSE +21 -0
- package/skills/ios/swiftui-performance-audit/SKILL.md +111 -0
- package/skills/ios/swiftui-performance-audit/agents/openai.yaml +4 -0
- package/skills/ios/swiftui-performance-audit/references/code-smells.md +150 -0
- package/skills/ios/swiftui-performance-audit/references/demystify-swiftui-performance-wwdc23.md +46 -0
- package/skills/ios/swiftui-performance-audit/references/optimizing-swiftui-performance-instruments.md +29 -0
- package/skills/ios/swiftui-performance-audit/references/profiling-intake.md +44 -0
- package/skills/ios/swiftui-performance-audit/references/report-template.md +47 -0
- package/skills/ios/swiftui-performance-audit/references/understanding-hangs-in-your-app.md +33 -0
- package/skills/ios/swiftui-performance-audit/references/understanding-improving-swiftui-performance.md +52 -0
- package/skills/ios/swiftui-pro/LICENSE +21 -0
- package/skills/ios/swiftui-pro/SKILL.md +108 -0
- package/skills/ios/swiftui-pro/agents/openai.yaml +10 -0
- package/skills/ios/swiftui-pro/assets/swiftui-pro-icon.png +0 -0
- package/skills/ios/swiftui-pro/assets/swiftui-pro-icon.svg +29 -0
- package/skills/ios/swiftui-pro/references/accessibility.md +13 -0
- package/skills/ios/swiftui-pro/references/api.md +39 -0
- package/skills/ios/swiftui-pro/references/data.md +43 -0
- package/skills/ios/swiftui-pro/references/design.md +31 -0
- package/skills/ios/swiftui-pro/references/hygiene.md +9 -0
- package/skills/ios/swiftui-pro/references/navigation.md +14 -0
- package/skills/ios/swiftui-pro/references/performance.md +46 -0
- package/skills/ios/swiftui-pro/references/swift.md +56 -0
- package/skills/ios/swiftui-pro/references/views.md +35 -0
- package/skills/ios/swiftui-ui-patterns/LICENSE +21 -0
- package/skills/ios/swiftui-ui-patterns/SKILL.md +100 -0
- package/skills/ios/swiftui-ui-patterns/agents/openai.yaml +4 -0
- package/skills/ios/swiftui-ui-patterns/references/app-wiring.md +201 -0
- package/skills/ios/swiftui-ui-patterns/references/async-state.md +96 -0
- package/skills/ios/swiftui-ui-patterns/references/components-index.md +50 -0
- package/skills/ios/swiftui-ui-patterns/references/controls.md +57 -0
- package/skills/ios/swiftui-ui-patterns/references/deeplinks.md +66 -0
- package/skills/ios/swiftui-ui-patterns/references/focus.md +90 -0
- package/skills/ios/swiftui-ui-patterns/references/form.md +97 -0
- package/skills/ios/swiftui-ui-patterns/references/grids.md +71 -0
- package/skills/ios/swiftui-ui-patterns/references/haptics.md +71 -0
- package/skills/ios/swiftui-ui-patterns/references/input-toolbar.md +51 -0
- package/skills/ios/swiftui-ui-patterns/references/lightweight-clients.md +93 -0
- package/skills/ios/swiftui-ui-patterns/references/list.md +86 -0
- package/skills/ios/swiftui-ui-patterns/references/loading-placeholders.md +38 -0
- package/skills/ios/swiftui-ui-patterns/references/macos-settings.md +71 -0
- package/skills/ios/swiftui-ui-patterns/references/matched-transitions.md +59 -0
- package/skills/ios/swiftui-ui-patterns/references/media.md +73 -0
- package/skills/ios/swiftui-ui-patterns/references/menu-bar.md +101 -0
- package/skills/ios/swiftui-ui-patterns/references/navigationstack.md +159 -0
- package/skills/ios/swiftui-ui-patterns/references/overlay.md +45 -0
- package/skills/ios/swiftui-ui-patterns/references/performance.md +62 -0
- package/skills/ios/swiftui-ui-patterns/references/previews.md +48 -0
- package/skills/ios/swiftui-ui-patterns/references/scroll-reveal.md +133 -0
- package/skills/ios/swiftui-ui-patterns/references/scrollview.md +87 -0
- package/skills/ios/swiftui-ui-patterns/references/searchable.md +71 -0
- package/skills/ios/swiftui-ui-patterns/references/sheets.md +155 -0
- package/skills/ios/swiftui-ui-patterns/references/split-views.md +72 -0
- package/skills/ios/swiftui-ui-patterns/references/tabview.md +114 -0
- package/skills/ios/swiftui-ui-patterns/references/theming.md +71 -0
- package/skills/ios/swiftui-ui-patterns/references/title-menus.md +93 -0
- package/skills/ios/swiftui-ui-patterns/references/top-bar.md +49 -0
- package/skills/ios/swiftui-view-refactor/LICENSE +21 -0
- package/skills/ios/swiftui-view-refactor/SKILL.md +207 -0
- package/skills/ios/swiftui-view-refactor/agents/openai.yaml +4 -0
- package/skills/ios/swiftui-view-refactor/references/mv-patterns.md +161 -0
- package/skills/ios/widgetkit/LICENSE +131 -0
- package/skills/ios/widgetkit/SKILL.md +502 -0
- package/skills/ios/widgetkit/references/widgetkit-advanced.md +871 -0
- package/skills/ios/writing-for-interfaces/SKILL.md +75 -0
- package/skills/web/accessibility/SKILL.md +146 -0
- package/skills/web/aceternity-ui/SKILL.md +719 -0
- package/skills/web/aceternity-ui/metadata.json +10 -0
- package/skills/web/api-design/SKILL.md +523 -0
- package/skills/web/chart-accessibility/SKILL.md +332 -0
- package/skills/web/composition-patterns/AGENTS.md +946 -0
- package/skills/web/composition-patterns/README.md +60 -0
- package/skills/web/composition-patterns/SKILL.md +89 -0
- package/skills/web/composition-patterns/metadata.json +11 -0
- package/skills/web/composition-patterns/rules/_sections.md +29 -0
- package/skills/web/composition-patterns/rules/_template.md +24 -0
- package/skills/web/composition-patterns/rules/architecture-avoid-boolean-props.md +100 -0
- package/skills/web/composition-patterns/rules/architecture-compound-components.md +112 -0
- package/skills/web/composition-patterns/rules/patterns-children-over-render-props.md +87 -0
- package/skills/web/composition-patterns/rules/patterns-explicit-variants.md +100 -0
- package/skills/web/composition-patterns/rules/react19-no-forwardref.md +42 -0
- package/skills/web/composition-patterns/rules/state-context-interface.md +191 -0
- package/skills/web/composition-patterns/rules/state-decouple-implementation.md +113 -0
- package/skills/web/composition-patterns/rules/state-lift-state.md +125 -0
- package/skills/web/cost-aware-llm-pipeline/SKILL.md +183 -0
- package/skills/web/database-migrations/SKILL.md +429 -0
- package/skills/web/deployment-patterns/SKILL.md +427 -0
- package/skills/web/docker-patterns/SKILL.md +364 -0
- package/skills/web/e2e-testing/SKILL.md +326 -0
- package/skills/web/lighthouse-ci/SKILL.md +361 -0
- package/skills/web/mcp-server-patterns/SKILL.md +69 -0
- package/skills/web/next-best-practices/SKILL.md +153 -0
- package/skills/web/next-best-practices/async-patterns.md +87 -0
- package/skills/web/next-best-practices/bundling.md +180 -0
- package/skills/web/next-best-practices/data-patterns.md +297 -0
- package/skills/web/next-best-practices/debug-tricks.md +105 -0
- package/skills/web/next-best-practices/directives.md +73 -0
- package/skills/web/next-best-practices/error-handling.md +227 -0
- package/skills/web/next-best-practices/file-conventions.md +140 -0
- package/skills/web/next-best-practices/font.md +245 -0
- package/skills/web/next-best-practices/functions.md +108 -0
- package/skills/web/next-best-practices/hydration-error.md +91 -0
- package/skills/web/next-best-practices/image.md +173 -0
- package/skills/web/next-best-practices/metadata.md +301 -0
- package/skills/web/next-best-practices/parallel-routes.md +287 -0
- package/skills/web/next-best-practices/route-handlers.md +146 -0
- package/skills/web/next-best-practices/rsc-boundaries.md +159 -0
- package/skills/web/next-best-practices/runtime-selection.md +39 -0
- package/skills/web/next-best-practices/scripts.md +141 -0
- package/skills/web/next-best-practices/self-hosting.md +371 -0
- package/skills/web/next-best-practices/suspense-boundaries.md +67 -0
- package/skills/web/next-cache-components/SKILL.md +411 -0
- package/skills/web/postgres-best-practices/SKILL.md +14 -0
- package/skills/web/postgres-best-practices/references/schema-design.md +9 -0
- package/skills/web/react-best-practices/AGENTS.md +3810 -0
- package/skills/web/react-best-practices/README.md +123 -0
- package/skills/web/react-best-practices/SKILL.md +149 -0
- package/skills/web/react-best-practices/metadata.json +15 -0
- package/skills/web/react-best-practices/rules/_sections.md +46 -0
- package/skills/web/react-best-practices/rules/_template.md +28 -0
- package/skills/web/react-best-practices/rules/advanced-effect-event-deps.md +56 -0
- package/skills/web/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/skills/web/react-best-practices/rules/advanced-init-once.md +42 -0
- package/skills/web/react-best-practices/rules/advanced-use-latest.md +39 -0
- package/skills/web/react-best-practices/rules/async-api-routes.md +38 -0
- package/skills/web/react-best-practices/rules/async-cheap-condition-before-await.md +37 -0
- package/skills/web/react-best-practices/rules/async-defer-await.md +82 -0
- package/skills/web/react-best-practices/rules/async-dependencies.md +51 -0
- package/skills/web/react-best-practices/rules/async-parallel.md +28 -0
- package/skills/web/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/skills/web/react-best-practices/rules/bundle-analyzable-paths.md +63 -0
- package/skills/web/react-best-practices/rules/bundle-barrel-imports.md +60 -0
- package/skills/web/react-best-practices/rules/bundle-conditional.md +31 -0
- package/skills/web/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/skills/web/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/skills/web/react-best-practices/rules/bundle-preload.md +50 -0
- package/skills/web/react-best-practices/rules/client-event-listeners.md +74 -0
- package/skills/web/react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/skills/web/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/skills/web/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/skills/web/react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/skills/web/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/skills/web/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/skills/web/react-best-practices/rules/js-cache-storage.md +70 -0
- package/skills/web/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/skills/web/react-best-practices/rules/js-early-exit.md +50 -0
- package/skills/web/react-best-practices/rules/js-flatmap-filter.md +60 -0
- package/skills/web/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/skills/web/react-best-practices/rules/js-index-maps.md +37 -0
- package/skills/web/react-best-practices/rules/js-length-check-first.md +49 -0
- package/skills/web/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/skills/web/react-best-practices/rules/js-request-idle-callback.md +105 -0
- package/skills/web/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/skills/web/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/skills/web/react-best-practices/rules/rendering-activity.md +26 -0
- package/skills/web/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/skills/web/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/skills/web/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/skills/web/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/skills/web/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/skills/web/react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/skills/web/react-best-practices/rules/rendering-resource-hints.md +85 -0
- package/skills/web/react-best-practices/rules/rendering-script-defer-async.md +68 -0
- package/skills/web/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/skills/web/react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/skills/web/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/skills/web/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/skills/web/react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/skills/web/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/skills/web/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/skills/web/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/skills/web/react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/skills/web/react-best-practices/rules/rerender-memo.md +44 -0
- package/skills/web/react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/skills/web/react-best-practices/rules/rerender-no-inline-components.md +82 -0
- package/skills/web/react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/skills/web/react-best-practices/rules/rerender-split-combined-hooks.md +64 -0
- package/skills/web/react-best-practices/rules/rerender-transitions.md +40 -0
- package/skills/web/react-best-practices/rules/rerender-use-deferred-value.md +59 -0
- package/skills/web/react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/skills/web/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/skills/web/react-best-practices/rules/server-auth-actions.md +96 -0
- package/skills/web/react-best-practices/rules/server-cache-lru.md +41 -0
- package/skills/web/react-best-practices/rules/server-cache-react.md +76 -0
- package/skills/web/react-best-practices/rules/server-dedup-props.md +65 -0
- package/skills/web/react-best-practices/rules/server-hoist-static-io.md +149 -0
- package/skills/web/react-best-practices/rules/server-no-shared-module-state.md +50 -0
- package/skills/web/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/skills/web/react-best-practices/rules/server-parallel-nested-fetching.md +34 -0
- package/skills/web/react-best-practices/rules/server-serialization.md +38 -0
- package/skills/web/seo/SKILL.md +154 -0
- package/skills/web/web-design-guidelines/SKILL.md +39 -0
- package/skills/web/zap-scan-config/SKILL.md +444 -0
- package/skills/web/zap-scan-config/assets/.gitkeep +9 -0
- package/skills/web/zap-scan-config/assets/github_action.yml +207 -0
- package/skills/web/zap-scan-config/assets/gitlab_ci.yml +226 -0
- package/skills/web/zap-scan-config/assets/zap_automation.yaml +196 -0
- package/skills/web/zap-scan-config/assets/zap_context.xml +192 -0
- package/skills/web/zap-scan-config/references/EXAMPLE.md +40 -0
- package/skills/web/zap-scan-config/references/api_testing_guide.md +475 -0
- package/skills/web/zap-scan-config/references/authentication_guide.md +431 -0
- package/skills/web/zap-scan-config/references/false_positive_handling.md +427 -0
- package/skills/web/zap-scan-config/references/owasp_mapping.md +255 -0
- package/src/lrr/aggregator.ts +80 -0
- package/src/orchestrator/hooks/context-header.ts +95 -0
- package/src/orchestrator/hooks/token-accounting-emitter.ts +77 -0
- package/src/orchestrator/hooks/token-accounting.ts +101 -0
- package/src/orchestrator/mcp/cycle-counter.ts +129 -0
- package/src/orchestrator/mcp/scribe.ts +283 -0
- package/src/orchestrator/mcp/state-save.ts +149 -0
- package/src/orchestrator/mcp/write-lease.ts +167 -0
- package/src/orchestrator/phase4-shared-context.ts +41 -0
- package/src/orchestrator/schemas/backward-edge.ts +46 -0
- package/agents/agentic-identity-trust.md +0 -121
- package/agents/data-consolidation-agent.md +0 -39
- package/agents/design-image-prompt-engineer.md +0 -105
- package/agents/design-visual-storyteller.md +0 -147
- package/agents/design-whimsy-injector.md +0 -89
- package/agents/engineering-autonomous-optimization-architect.md +0 -105
- package/agents/market-intel.md +0 -35
- package/agents/marketing-instagram-curator.md +0 -111
- package/agents/marketing-reddit-community-builder.md +0 -121
- package/agents/marketing-social-media-strategist.md +0 -74
- package/agents/marketing-tiktok-strategist.md +0 -123
- package/agents/marketing-twitter-engager.md +0 -124
- package/agents/marketing-wechat-official-account.md +0 -143
- package/agents/marketing-xiaohongshu-specialist.md +0 -136
- package/agents/marketing-zhihu-strategist.md +0 -160
- package/agents/product-behavioral-nudge-engine.md +0 -78
- package/agents/project-management-experiment-tracker.md +0 -102
- package/agents/report-distribution-agent.md +0 -43
- package/agents/risk-analysis.md +0 -45
- package/agents/sales-data-extraction-agent.md +0 -46
- package/agents/specialized-cultural-intelligence-strategist.md +0 -65
- package/agents/specialized-developer-advocate.md +0 -146
- package/agents/support-analytics-reporter.md +0 -133
- package/agents/support-executive-summary-generator.md +0 -64
- package/agents/support-finance-tracker.md +0 -145
- package/agents/support-legal-compliance-checker.md +0 -129
- package/agents/support-support-responder.md +0 -91
- package/agents/testing-accessibility-auditor.md +0 -110
- package/agents/testing-test-results-analyzer.md +0 -97
- package/agents/testing-tool-evaluator.md +0 -76
- package/agents/testing-workflow-optimizer.md +0 -99
- package/agents/user-research.md +0 -40
|
@@ -0,0 +1,475 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: swiftui-design-tokens
|
|
3
|
+
description: Map brand design tokens (colors, typography, spacing, shapes) to SwiftUI Color/Font/Shape extensions with dark mode and Dynamic Type support. Use when implementing a design system, theming layer, or converting Figma/Style Dictionary tokens to Swift.
|
|
4
|
+
license: MIT
|
|
5
|
+
metadata:
|
|
6
|
+
author: oneshot
|
|
7
|
+
version: "1.0.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Generate SwiftUI design token infrastructure from brand specifications. Tokens follow a three-tier hierarchy and produce type-safe Swift extensions that respect dark mode and Dynamic Type.
|
|
11
|
+
|
|
12
|
+
## Token Hierarchy
|
|
13
|
+
|
|
14
|
+
Design tokens are organized in three tiers. Each tier references only the tier below it.
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
Component Tokens ──> Semantic/Alias Tokens ──> Global Tokens
|
|
18
|
+
(buttonBackground) (brandPrimary) (blue600)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Global tokens** are raw values with no semantic meaning: hex colors, point sizes, font names.
|
|
22
|
+
|
|
23
|
+
**Semantic (alias) tokens** assign meaning to globals. A single semantic token resolves to different globals depending on context (light/dark, high contrast). Most UI code references this tier.
|
|
24
|
+
|
|
25
|
+
**Component tokens** bind semantic tokens to specific controls. A `ButtonStyle` reads `button.background` rather than reaching down to `brandPrimary` directly.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 1. Color Tokens
|
|
30
|
+
|
|
31
|
+
### Global palette
|
|
32
|
+
|
|
33
|
+
```swift
|
|
34
|
+
// GlobalTokens+Color.swift
|
|
35
|
+
extension Color {
|
|
36
|
+
enum Global {
|
|
37
|
+
static let blue50 = Color(hex: 0xE3F2FD)
|
|
38
|
+
static let blue600 = Color(hex: 0x1E88E5)
|
|
39
|
+
static let blue900 = Color(hex: 0x0D47A1)
|
|
40
|
+
static let grey50 = Color(hex: 0xFAFAFA)
|
|
41
|
+
static let grey900 = Color(hex: 0x212121)
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Semantic tokens with dark mode
|
|
47
|
+
|
|
48
|
+
**Option A -- Programmatic resolution (no asset catalog):**
|
|
49
|
+
|
|
50
|
+
```swift
|
|
51
|
+
// SemanticTokens+Color.swift
|
|
52
|
+
extension Color {
|
|
53
|
+
// Resolves light/dark at read time via UIColor's trait system.
|
|
54
|
+
init(light: Color, dark: Color) {
|
|
55
|
+
self.init(uiColor: UIColor { traits in
|
|
56
|
+
traits.userInterfaceStyle == .dark
|
|
57
|
+
? UIColor(dark)
|
|
58
|
+
: UIColor(light)
|
|
59
|
+
})
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
extension Color {
|
|
64
|
+
enum Brand {
|
|
65
|
+
static let primary = Color(light: .Global.blue600, dark: .Global.blue50)
|
|
66
|
+
static let onPrimary = Color(light: .Global.grey50, dark: .Global.grey900)
|
|
67
|
+
}
|
|
68
|
+
enum Surface {
|
|
69
|
+
static let background = Color(light: .Global.grey50, dark: .Global.grey900)
|
|
70
|
+
static let foreground = Color(light: .Global.grey900, dark: .Global.grey50)
|
|
71
|
+
}
|
|
72
|
+
enum Status {
|
|
73
|
+
static let error = Color(light: Color(hex: 0xB71C1C), dark: Color(hex: 0xEF9A9A))
|
|
74
|
+
static let success = Color(light: Color(hex: 0x1B5E20), dark: Color(hex: 0xA5D6A7))
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Option B -- Asset catalog (preferred when designers hand off ColorSets):**
|
|
80
|
+
|
|
81
|
+
1. Create `Colors.xcassets` with entries like `brand-primary`, setting Appearances to "Any, Dark."
|
|
82
|
+
2. Reference them with a thin extension:
|
|
83
|
+
|
|
84
|
+
```swift
|
|
85
|
+
extension Color {
|
|
86
|
+
enum Brand {
|
|
87
|
+
static let primary = Color("brand-primary")
|
|
88
|
+
static let onPrimary = Color("brand-onPrimary")
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Asset catalogs also support High Contrast variants (Appearances: "Any, Dark" + "High Contrast, High Contrast Dark") at no extra code cost.
|
|
94
|
+
|
|
95
|
+
### Hex initializer (utility)
|
|
96
|
+
|
|
97
|
+
```swift
|
|
98
|
+
extension Color {
|
|
99
|
+
init(hex: UInt, alpha: Double = 1.0) {
|
|
100
|
+
self.init(
|
|
101
|
+
.sRGB,
|
|
102
|
+
red: Double((hex >> 16) & 0xFF) / 255,
|
|
103
|
+
green: Double((hex >> 8) & 0xFF) / 255,
|
|
104
|
+
blue: Double( hex & 0xFF) / 255,
|
|
105
|
+
opacity: alpha
|
|
106
|
+
)
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 2. Typography Tokens
|
|
114
|
+
|
|
115
|
+
### Global type scale
|
|
116
|
+
|
|
117
|
+
```swift
|
|
118
|
+
// GlobalTokens+Typography.swift
|
|
119
|
+
enum TypeScale {
|
|
120
|
+
case displayLarge // 34pt
|
|
121
|
+
case displayMedium // 28pt
|
|
122
|
+
case headlineLarge // 24pt
|
|
123
|
+
case headlineMedium // 20pt
|
|
124
|
+
case bodyLarge // 17pt -- iOS default body
|
|
125
|
+
case bodyMedium // 15pt
|
|
126
|
+
case caption // 12pt
|
|
127
|
+
case overline // 11pt
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Font extension with Dynamic Type
|
|
132
|
+
|
|
133
|
+
Always use `Font.TextStyle` or `.relativeTo()` so the system scales with the user's preferred content size.
|
|
134
|
+
|
|
135
|
+
```swift
|
|
136
|
+
// SemanticTokens+Font.swift
|
|
137
|
+
extension Font {
|
|
138
|
+
enum Brand {
|
|
139
|
+
static let displayLarge = Font.system(.largeTitle, weight: .light)
|
|
140
|
+
static let displayMedium = Font.system(.title, weight: .light)
|
|
141
|
+
static let headlineLarge = Font.system(.title2, weight: .semibold)
|
|
142
|
+
static let headlineMedium = Font.system(.title3, weight: .semibold)
|
|
143
|
+
static let bodyLarge = Font.system(.body)
|
|
144
|
+
static let bodyMedium = Font.system(.subheadline)
|
|
145
|
+
static let caption = Font.system(.caption)
|
|
146
|
+
static let overline = Font.system(.caption2, weight: .medium)
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Custom font families with Dynamic Type scaling
|
|
152
|
+
|
|
153
|
+
When the brand requires a non-system typeface, use `.relativeTo()` to inherit the scaling curve of a built-in text style.
|
|
154
|
+
|
|
155
|
+
```swift
|
|
156
|
+
extension Font {
|
|
157
|
+
enum Brand {
|
|
158
|
+
static let headlineLarge = Font.custom("InterDisplay-SemiBold", size: 24, relativeTo: .title2)
|
|
159
|
+
static let bodyLarge = Font.custom("Inter-Regular", size: 17, relativeTo: .body)
|
|
160
|
+
static let caption = Font.custom("Inter-Regular", size: 12, relativeTo: .caption)
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
This ensures a user who sets their Dynamic Type preference to "Extra Large" sees proportionally larger text, while respecting the brand typeface.
|
|
166
|
+
|
|
167
|
+
### Testing Dynamic Type
|
|
168
|
+
|
|
169
|
+
Use the environment override in previews to verify all sizes:
|
|
170
|
+
|
|
171
|
+
```swift
|
|
172
|
+
#Preview("Accessibility XXL") {
|
|
173
|
+
TokenShowcase()
|
|
174
|
+
.environment(\.sizeCategory, .accessibilityExtraExtraExtraLarge)
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## 3. Spacing & Shape Tokens
|
|
181
|
+
|
|
182
|
+
### Spacing
|
|
183
|
+
|
|
184
|
+
Define spacing on a base-4 or base-8 grid. Expose as static properties so call sites read `Spacing.md` not magic numbers.
|
|
185
|
+
|
|
186
|
+
```swift
|
|
187
|
+
enum Spacing {
|
|
188
|
+
static let xxxs: CGFloat = 2
|
|
189
|
+
static let xxs: CGFloat = 4
|
|
190
|
+
static let xs: CGFloat = 8
|
|
191
|
+
static let sm: CGFloat = 12
|
|
192
|
+
static let md: CGFloat = 16
|
|
193
|
+
static let lg: CGFloat = 24
|
|
194
|
+
static let xl: CGFloat = 32
|
|
195
|
+
static let xxl: CGFloat = 48
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Corner radius
|
|
200
|
+
|
|
201
|
+
```swift
|
|
202
|
+
enum CornerRadius {
|
|
203
|
+
static let none: CGFloat = 0
|
|
204
|
+
static let sm: CGFloat = 4
|
|
205
|
+
static let md: CGFloat = 8
|
|
206
|
+
static let lg: CGFloat = 12
|
|
207
|
+
static let xl: CGFloat = 16
|
|
208
|
+
static let full: CGFloat = 9999 // pill shape
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Elevation / shadow
|
|
213
|
+
|
|
214
|
+
```swift
|
|
215
|
+
struct Elevation {
|
|
216
|
+
let color: Color
|
|
217
|
+
let radius: CGFloat
|
|
218
|
+
let x: CGFloat
|
|
219
|
+
let y: CGFloat
|
|
220
|
+
|
|
221
|
+
static let none = Elevation(color: .clear, radius: 0, x: 0, y: 0)
|
|
222
|
+
static let sm = Elevation(color: .black.opacity(0.08), radius: 4, x: 0, y: 2)
|
|
223
|
+
static let md = Elevation(color: .black.opacity(0.12), radius: 8, x: 0, y: 4)
|
|
224
|
+
static let lg = Elevation(color: .black.opacity(0.16), radius: 16, x: 0, y: 8)
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
extension View {
|
|
228
|
+
func elevation(_ e: Elevation) -> some View {
|
|
229
|
+
self.shadow(color: e.color, radius: e.radius, x: e.x, y: e.y)
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## 4. Naming Conventions
|
|
237
|
+
|
|
238
|
+
Follow a `Category.Role.Variant` pattern. Autocomplete guides developers to valid values.
|
|
239
|
+
|
|
240
|
+
| Token path | Resolves to |
|
|
241
|
+
|---|---|
|
|
242
|
+
| `Color.Brand.primary` | Main brand color, adapts to dark mode |
|
|
243
|
+
| `Color.Surface.background` | Screen/card background |
|
|
244
|
+
| `Color.Status.error` | Destructive/error accent |
|
|
245
|
+
| `Font.Brand.headlineLarge` | Primary heading, scales with Dynamic Type |
|
|
246
|
+
| `Spacing.md` | Standard 16pt spacing unit |
|
|
247
|
+
| `CornerRadius.lg` | Card corner radius (12pt) |
|
|
248
|
+
| `Elevation.sm` | Subtle raised shadow |
|
|
249
|
+
|
|
250
|
+
Nested enums (`Color.Brand`, `Color.Surface`, `Color.Status`) group tokens by purpose while keeping the namespace under the native SwiftUI type. This means call sites write `Color.Brand.primary`, not `DesignTokens.Color.brand.primary`.
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## 5. Environment-Based Theming
|
|
255
|
+
|
|
256
|
+
When an app supports multiple themes (e.g., per-brand white-labeling), inject the active theme through the SwiftUI environment.
|
|
257
|
+
|
|
258
|
+
```swift
|
|
259
|
+
// Theme.swift
|
|
260
|
+
struct Theme {
|
|
261
|
+
let brandPrimary: Color
|
|
262
|
+
let brandOnPrimary: Color
|
|
263
|
+
let surfaceBackground: Color
|
|
264
|
+
let headlineFont: Font
|
|
265
|
+
let bodyFont: Font
|
|
266
|
+
let cornerRadius: CGFloat
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
extension Theme {
|
|
270
|
+
static let defaultTheme = Theme(
|
|
271
|
+
brandPrimary: .Global.blue600,
|
|
272
|
+
brandOnPrimary: .Global.grey50,
|
|
273
|
+
surfaceBackground: .Global.grey50,
|
|
274
|
+
headlineFont: .Brand.headlineLarge,
|
|
275
|
+
bodyFont: .Brand.bodyLarge,
|
|
276
|
+
cornerRadius: CornerRadius.md
|
|
277
|
+
)
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// EnvironmentKey
|
|
281
|
+
struct ThemeKey: EnvironmentKey {
|
|
282
|
+
static let defaultValue = Theme.defaultTheme
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
extension EnvironmentValues {
|
|
286
|
+
var theme: Theme {
|
|
287
|
+
get { self[ThemeKey.self] }
|
|
288
|
+
set { self[ThemeKey.self] = newValue }
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
Usage in views:
|
|
294
|
+
|
|
295
|
+
```swift
|
|
296
|
+
struct BrandCard: View {
|
|
297
|
+
@Environment(\.theme) private var theme
|
|
298
|
+
|
|
299
|
+
var body: some View {
|
|
300
|
+
VStack {
|
|
301
|
+
Text("Welcome")
|
|
302
|
+
.font(theme.headlineFont)
|
|
303
|
+
.foregroundStyle(theme.brandOnPrimary)
|
|
304
|
+
}
|
|
305
|
+
.padding(Spacing.md)
|
|
306
|
+
.background(theme.brandPrimary)
|
|
307
|
+
.clipShape(RoundedRectangle(cornerRadius: theme.cornerRadius))
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
Apply a theme to an entire subtree:
|
|
313
|
+
|
|
314
|
+
```swift
|
|
315
|
+
ContentView()
|
|
316
|
+
.environment(\.theme, .partnerBrand)
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
---
|
|
320
|
+
|
|
321
|
+
## 6. Component Tokens
|
|
322
|
+
|
|
323
|
+
Component tokens are the final tier -- they bind semantic tokens to a specific control's visual properties so the control never references globals directly.
|
|
324
|
+
|
|
325
|
+
```swift
|
|
326
|
+
struct ButtonTokens {
|
|
327
|
+
let background: Color
|
|
328
|
+
let foreground: Color
|
|
329
|
+
let font: Font
|
|
330
|
+
let cornerRadius: CGFloat
|
|
331
|
+
let paddingH: CGFloat
|
|
332
|
+
let paddingV: CGFloat
|
|
333
|
+
|
|
334
|
+
static let primary = ButtonTokens(
|
|
335
|
+
background: .Brand.primary,
|
|
336
|
+
foreground: .Brand.onPrimary,
|
|
337
|
+
font: .Brand.bodyLarge,
|
|
338
|
+
cornerRadius: CornerRadius.md,
|
|
339
|
+
paddingH: Spacing.md,
|
|
340
|
+
paddingV: Spacing.sm
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
static let secondary = ButtonTokens(
|
|
344
|
+
background: .clear,
|
|
345
|
+
foreground: .Brand.primary,
|
|
346
|
+
font: .Brand.bodyMedium,
|
|
347
|
+
cornerRadius: CornerRadius.md,
|
|
348
|
+
paddingH: Spacing.md,
|
|
349
|
+
paddingV: Spacing.xs
|
|
350
|
+
)
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
struct BrandButtonStyle: ButtonStyle {
|
|
354
|
+
let tokens: ButtonTokens
|
|
355
|
+
|
|
356
|
+
func makeBody(configuration: Configuration) -> some View {
|
|
357
|
+
configuration.label
|
|
358
|
+
.font(tokens.font)
|
|
359
|
+
.foregroundStyle(tokens.foreground)
|
|
360
|
+
.padding(.horizontal, tokens.paddingH)
|
|
361
|
+
.padding(.vertical, tokens.paddingV)
|
|
362
|
+
.background(tokens.background)
|
|
363
|
+
.clipShape(RoundedRectangle(cornerRadius: tokens.cornerRadius))
|
|
364
|
+
.opacity(configuration.isPressed ? 0.8 : 1.0)
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## 7. Code Generation with Style Dictionary
|
|
372
|
+
|
|
373
|
+
When tokens originate from Figma or a design tool, use [Style Dictionary](https://styledictionary.com/) to generate Swift from a JSON source of truth.
|
|
374
|
+
|
|
375
|
+
### Token source file (`tokens/color.json`)
|
|
376
|
+
|
|
377
|
+
```json
|
|
378
|
+
{
|
|
379
|
+
"color": {
|
|
380
|
+
"brand": {
|
|
381
|
+
"primary": {
|
|
382
|
+
"value": "#1E88E5",
|
|
383
|
+
"darkValue": "#E3F2FD",
|
|
384
|
+
"type": "color"
|
|
385
|
+
},
|
|
386
|
+
"onPrimary": {
|
|
387
|
+
"value": "#FAFAFA",
|
|
388
|
+
"darkValue": "#212121",
|
|
389
|
+
"type": "color"
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
### Style Dictionary config (`config.json`)
|
|
397
|
+
|
|
398
|
+
```json
|
|
399
|
+
{
|
|
400
|
+
"source": ["tokens/**/*.json"],
|
|
401
|
+
"platforms": {
|
|
402
|
+
"ios-swift": {
|
|
403
|
+
"transformGroup": "ios-swift",
|
|
404
|
+
"buildPath": "Generated/",
|
|
405
|
+
"files": [
|
|
406
|
+
{
|
|
407
|
+
"destination": "ColorTokens.swift",
|
|
408
|
+
"format": "ios-swift/enum.swift",
|
|
409
|
+
"filter": { "type": "color" }
|
|
410
|
+
}
|
|
411
|
+
]
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
### Custom Swift formatter (register in `build.js`)
|
|
418
|
+
|
|
419
|
+
```javascript
|
|
420
|
+
StyleDictionary.registerFormat({
|
|
421
|
+
name: 'swiftui/color-tokens',
|
|
422
|
+
formatter({ dictionary }) {
|
|
423
|
+
const lines = dictionary.allTokens.map(token => {
|
|
424
|
+
const name = token.name; // camelCase from transform
|
|
425
|
+
const hex = token.value.replace('#', '0x');
|
|
426
|
+
return ` static let ${name} = Color(hex: ${hex})`;
|
|
427
|
+
});
|
|
428
|
+
return `import SwiftUI\n\nextension Color {\n enum Generated {\n${lines.join('\n')}\n }\n}`;
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
Run `npx style-dictionary build` to produce the Swift file. Commit the generated output so builds do not depend on Node at compile time.
|
|
434
|
+
|
|
435
|
+
### Alternative: SwiftTokenGen
|
|
436
|
+
|
|
437
|
+
[SwiftTokenGen](https://github.com/chrishoste/SwiftTokenGen) accepts Figma token exports or Style Dictionary JSON and generates Swift via Stencil templates, giving full control over the output format without writing JavaScript.
|
|
438
|
+
|
|
439
|
+
---
|
|
440
|
+
|
|
441
|
+
## 8. File Organization
|
|
442
|
+
|
|
443
|
+
```
|
|
444
|
+
DesignSystem/
|
|
445
|
+
Tokens/
|
|
446
|
+
GlobalTokens+Color.swift
|
|
447
|
+
GlobalTokens+Typography.swift
|
|
448
|
+
SemanticTokens+Color.swift
|
|
449
|
+
SemanticTokens+Font.swift
|
|
450
|
+
Spacing.swift
|
|
451
|
+
CornerRadius.swift
|
|
452
|
+
Elevation.swift
|
|
453
|
+
Theme/
|
|
454
|
+
Theme.swift
|
|
455
|
+
ThemeKey.swift
|
|
456
|
+
Components/
|
|
457
|
+
ButtonTokens.swift
|
|
458
|
+
BrandButtonStyle.swift
|
|
459
|
+
Utilities/
|
|
460
|
+
Color+Hex.swift
|
|
461
|
+
Generated/ # output from Style Dictionary (if used)
|
|
462
|
+
ColorTokens.swift
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
---
|
|
466
|
+
|
|
467
|
+
## Decision Guide
|
|
468
|
+
|
|
469
|
+
| Situation | Approach |
|
|
470
|
+
|---|---|
|
|
471
|
+
| Single brand, no runtime theming | Static extensions on `Color`/`Font` (Section 1-2) |
|
|
472
|
+
| Single brand, dark mode needed | `Color(light:dark:)` initializer or asset catalog (Section 1) |
|
|
473
|
+
| Multi-brand / white-label | Environment-based `Theme` struct (Section 5) |
|
|
474
|
+
| Tokens from Figma / design tool | Style Dictionary code gen (Section 7) |
|
|
475
|
+
| Many color variants + high contrast | Asset catalog with Appearances (Section 1, Option B) |
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Thomas Ricouard
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: swiftui-liquid-glass
|
|
3
|
+
description: Implement, review, or improve SwiftUI features using the iOS 26+ Liquid Glass API. Use when asked to adopt Liquid Glass in new SwiftUI UI, refactor an existing feature to Liquid Glass, or review Liquid Glass usage for correctness, performance, and design alignment.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# SwiftUI Liquid Glass
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
Use this skill to build or review SwiftUI features that fully align with the iOS 26+ Liquid Glass API. Prioritize native APIs (`glassEffect`, `GlassEffectContainer`, glass button styles) and Apple design guidance. Keep usage consistent, interactive where needed, and performance aware.
|
|
10
|
+
|
|
11
|
+
## Workflow Decision Tree
|
|
12
|
+
Choose the path that matches the request:
|
|
13
|
+
|
|
14
|
+
### 1) Review an existing feature
|
|
15
|
+
- Inspect where Liquid Glass should be used and where it should not.
|
|
16
|
+
- Verify correct modifier order, shape usage, and container placement.
|
|
17
|
+
- Check for iOS 26+ availability handling and sensible fallbacks.
|
|
18
|
+
|
|
19
|
+
### 2) Improve a feature using Liquid Glass
|
|
20
|
+
- Identify target components for glass treatment (surfaces, chips, buttons, cards).
|
|
21
|
+
- Refactor to use `GlassEffectContainer` where multiple glass elements appear.
|
|
22
|
+
- Introduce interactive glass only for tappable or focusable elements.
|
|
23
|
+
|
|
24
|
+
### 3) Implement a new feature using Liquid Glass
|
|
25
|
+
- Design the glass surfaces and interactions first (shape, prominence, grouping).
|
|
26
|
+
- Add glass modifiers after layout/appearance modifiers.
|
|
27
|
+
- Add morphing transitions only when the view hierarchy changes with animation.
|
|
28
|
+
|
|
29
|
+
## Core Guidelines
|
|
30
|
+
- Prefer native Liquid Glass APIs over custom blurs.
|
|
31
|
+
- Use `GlassEffectContainer` when multiple glass elements coexist.
|
|
32
|
+
- Apply `.glassEffect(...)` after layout and visual modifiers.
|
|
33
|
+
- Use `.interactive()` for elements that respond to touch/pointer.
|
|
34
|
+
- Keep shapes consistent across related elements for a cohesive look.
|
|
35
|
+
- Gate with `#available(iOS 26, *)` and provide a non-glass fallback.
|
|
36
|
+
|
|
37
|
+
## Review Checklist
|
|
38
|
+
- **Availability**: `#available(iOS 26, *)` present with fallback UI.
|
|
39
|
+
- **Composition**: Multiple glass views wrapped in `GlassEffectContainer`.
|
|
40
|
+
- **Modifier order**: `glassEffect` applied after layout/appearance modifiers.
|
|
41
|
+
- **Interactivity**: `interactive()` only where user interaction exists.
|
|
42
|
+
- **Transitions**: `glassEffectID` used with `@Namespace` for morphing.
|
|
43
|
+
- **Consistency**: Shapes, tinting, and spacing align across the feature.
|
|
44
|
+
|
|
45
|
+
## Implementation Checklist
|
|
46
|
+
- Define target elements and desired glass prominence.
|
|
47
|
+
- Wrap grouped glass elements in `GlassEffectContainer` and tune spacing.
|
|
48
|
+
- Use `.glassEffect(.regular.tint(...).interactive(), in: .rect(cornerRadius: ...))` as needed.
|
|
49
|
+
- Use `.buttonStyle(.glass)` / `.buttonStyle(.glassProminent)` for actions.
|
|
50
|
+
- Add morphing transitions with `glassEffectID` when hierarchy changes.
|
|
51
|
+
- Provide fallback materials and visuals for earlier iOS versions.
|
|
52
|
+
|
|
53
|
+
## Quick Snippets
|
|
54
|
+
Use these patterns directly and tailor shapes/tints/spacing.
|
|
55
|
+
|
|
56
|
+
```swift
|
|
57
|
+
if #available(iOS 26, *) {
|
|
58
|
+
Text("Hello")
|
|
59
|
+
.padding()
|
|
60
|
+
.glassEffect(.regular.interactive(), in: .rect(cornerRadius: 16))
|
|
61
|
+
} else {
|
|
62
|
+
Text("Hello")
|
|
63
|
+
.padding()
|
|
64
|
+
.background(.ultraThinMaterial, in: RoundedRectangle(cornerRadius: 16))
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
```swift
|
|
69
|
+
GlassEffectContainer(spacing: 24) {
|
|
70
|
+
HStack(spacing: 24) {
|
|
71
|
+
Image(systemName: "scribble.variable")
|
|
72
|
+
.frame(width: 72, height: 72)
|
|
73
|
+
.font(.system(size: 32))
|
|
74
|
+
.glassEffect()
|
|
75
|
+
Image(systemName: "eraser.fill")
|
|
76
|
+
.frame(width: 72, height: 72)
|
|
77
|
+
.font(.system(size: 32))
|
|
78
|
+
.glassEffect()
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
```swift
|
|
84
|
+
Button("Confirm") { }
|
|
85
|
+
.buttonStyle(.glassProminent)
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Resources
|
|
89
|
+
- Reference guide: `references/liquid-glass.md`
|
|
90
|
+
- Prefer Apple docs for up-to-date API details.
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
Vendored from: https://github.com/Dimillian/Skills/tree/main/swiftui-liquid-glass
|