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,161 @@
|
|
|
1
|
+
# Automatic vs Explicit Adoption
|
|
2
|
+
|
|
3
|
+
**iOS 26+**
|
|
4
|
+
|
|
5
|
+
## What Changes Automatically (Recompile Only)
|
|
6
|
+
|
|
7
|
+
### Standard Components Get Liquid Glass
|
|
8
|
+
Simply recompile with Xcode 26 — no code changes:
|
|
9
|
+
|
|
10
|
+
```swift
|
|
11
|
+
// All these get glass automatically:
|
|
12
|
+
NavigationView { ... }
|
|
13
|
+
TabView { ... }
|
|
14
|
+
.toolbar { ... }
|
|
15
|
+
.sheet { ... }
|
|
16
|
+
.popover { ... }
|
|
17
|
+
List { ... }
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Controls Get New Appearance
|
|
21
|
+
- Toggles, segmented pickers, sliders
|
|
22
|
+
- Knobs transform into glass during interaction
|
|
23
|
+
- Buttons morph into menus/popovers
|
|
24
|
+
|
|
25
|
+
### Search Placement
|
|
26
|
+
```swift
|
|
27
|
+
NavigationSplitView {
|
|
28
|
+
List { }
|
|
29
|
+
.searchable(text: $searchText)
|
|
30
|
+
}
|
|
31
|
+
// Automatically:
|
|
32
|
+
// - Bottom-aligned on iPhone (ergonomic)
|
|
33
|
+
// - Top trailing on iPad
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Performance Improvements
|
|
37
|
+
- **6x faster loading** for 100k+ item lists (macOS)
|
|
38
|
+
- **16x faster updates** for large lists
|
|
39
|
+
- Reduced dropped frames during scrolling
|
|
40
|
+
- Better nested ScrollView performance with lazy stacks
|
|
41
|
+
|
|
42
|
+
## What Requires Code Changes
|
|
43
|
+
|
|
44
|
+
### Toolbar Customization
|
|
45
|
+
```swift
|
|
46
|
+
.toolbar {
|
|
47
|
+
ToolbarItemGroup(placement: .topBarTrailing) {
|
|
48
|
+
Button("Up") { }
|
|
49
|
+
Button("Down") { }
|
|
50
|
+
|
|
51
|
+
Spacer(.fixed) // NEW: Separates button groups
|
|
52
|
+
|
|
53
|
+
Button("Settings") { }
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Prominent Toolbar Buttons
|
|
59
|
+
```swift
|
|
60
|
+
Button("Add Trip") {
|
|
61
|
+
addTrip()
|
|
62
|
+
}
|
|
63
|
+
.buttonStyle(.borderedProminent)
|
|
64
|
+
.tint(.blue) // Tinting in glass toolbars
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Glass Effect for Custom Views
|
|
68
|
+
```swift
|
|
69
|
+
CustomPhotoGrid()
|
|
70
|
+
.glassBackgroundEffect() // Reflects surrounding content
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Search Tab Role
|
|
74
|
+
```swift
|
|
75
|
+
TabView {
|
|
76
|
+
SearchView()
|
|
77
|
+
.tabItem { Label("Search", systemImage: "magnifyingglass") }
|
|
78
|
+
.tabRole(.search) // Separates from tabs, morphs into search
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Tab Bar Minimization
|
|
83
|
+
```swift
|
|
84
|
+
TabView { ... }
|
|
85
|
+
.tabBarMinimizationBehavior(.onScrollDown) // Recedes on scroll
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Audit Checklist
|
|
89
|
+
|
|
90
|
+
### Remove These (Interfere with Glass)
|
|
91
|
+
```swift
|
|
92
|
+
// Remove custom backgrounds on navigation
|
|
93
|
+
NavigationView { }
|
|
94
|
+
.background(Color.blue.opacity(0.5)) // Remove
|
|
95
|
+
|
|
96
|
+
// Remove custom blur effects
|
|
97
|
+
.background(
|
|
98
|
+
VisualEffectView(effect: UIBlurEffect(style: .systemMaterial))
|
|
99
|
+
) // Remove — let system handle
|
|
100
|
+
|
|
101
|
+
// Remove hard-coded dimensions
|
|
102
|
+
Slider(value: $volume)
|
|
103
|
+
.frame(width: 250, height: 44) // Remove — new metrics
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Update These
|
|
107
|
+
```swift
|
|
108
|
+
// Section headers: Use title-style capitalization
|
|
109
|
+
Section(header: Text("User Settings")) { } // Not "user settings"
|
|
110
|
+
|
|
111
|
+
// Forms: Use grouped style
|
|
112
|
+
Form { ... }
|
|
113
|
+
.formStyle(.grouped) // Platform-optimized metrics
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Safe Area Considerations
|
|
117
|
+
|
|
118
|
+
```swift
|
|
119
|
+
// When glass extends edge-to-edge with .ignoresSafeArea()
|
|
120
|
+
// Use .safeAreaPadding() for content (not .padding())
|
|
121
|
+
|
|
122
|
+
ZStack {
|
|
123
|
+
RoundedRectangle(cornerRadius: 12)
|
|
124
|
+
.fill(.thinMaterial)
|
|
125
|
+
.ignoresSafeArea()
|
|
126
|
+
|
|
127
|
+
VStack {
|
|
128
|
+
content
|
|
129
|
+
}
|
|
130
|
+
.safeAreaPadding(.horizontal, 20) // Respects notch/home indicator
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Testing Required
|
|
135
|
+
|
|
136
|
+
1. **Light/dark modes** — Glass adapts independently
|
|
137
|
+
2. **Reduce Transparency** — Glass becomes frostier
|
|
138
|
+
3. **Increase Contrast** — Elements become black/white
|
|
139
|
+
4. **Reduce Motion** — Elastic properties disabled
|
|
140
|
+
5. **Dynamic Type** — Larger text sizes
|
|
141
|
+
6. **Content scrolling** — Verify scroll edge effects
|
|
142
|
+
|
|
143
|
+
## Platform-Specific Changes
|
|
144
|
+
|
|
145
|
+
### iPad
|
|
146
|
+
- Tab bar can adapt to sidebar
|
|
147
|
+
- Resizable windows (UIRequiresFullscreen deprecated)
|
|
148
|
+
- Menu bar via swipe down
|
|
149
|
+
|
|
150
|
+
### macOS
|
|
151
|
+
- Synchronized window resize animations
|
|
152
|
+
- Window controls adapt automatically
|
|
153
|
+
- Glassy sidebars reflect content
|
|
154
|
+
|
|
155
|
+
### watchOS
|
|
156
|
+
- Minimal changes, automatic adoption
|
|
157
|
+
- Use standard toolbar APIs and button styles
|
|
158
|
+
|
|
159
|
+
### tvOS
|
|
160
|
+
- Focus-based glass appearance
|
|
161
|
+
- Apple TV 4K 2nd gen+ required for full effects
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# Backward Compatibility
|
|
2
|
+
|
|
3
|
+
**iOS 17/18 + iOS 26**
|
|
4
|
+
|
|
5
|
+
## UIDesignRequiresCompatibility Key
|
|
6
|
+
|
|
7
|
+
### Opt Out of Liquid Glass (Temporarily)
|
|
8
|
+
```xml
|
|
9
|
+
<!-- Info.plist -->
|
|
10
|
+
<key>UIDesignRequiresCompatibility</key>
|
|
11
|
+
<true/>
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
**Effect**:
|
|
15
|
+
- App built with iOS 26 SDK
|
|
16
|
+
- Appearance matches iOS 18 and earlier
|
|
17
|
+
- Liquid Glass effects disabled
|
|
18
|
+
- Previous blur/material styles used
|
|
19
|
+
|
|
20
|
+
### Migration Strategy
|
|
21
|
+
1. Ship with `UIDesignRequiresCompatibility` enabled
|
|
22
|
+
2. Audit interface changes in separate build
|
|
23
|
+
3. Update interface incrementally
|
|
24
|
+
4. Remove key when ready for Liquid Glass
|
|
25
|
+
|
|
26
|
+
## @available Patterns
|
|
27
|
+
|
|
28
|
+
### Basic Check
|
|
29
|
+
```swift
|
|
30
|
+
if #available(iOS 26, *) {
|
|
31
|
+
content
|
|
32
|
+
.glassEffect()
|
|
33
|
+
} else {
|
|
34
|
+
content
|
|
35
|
+
.background(.ultraThinMaterial)
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### View Modifier Pattern
|
|
40
|
+
```swift
|
|
41
|
+
extension View {
|
|
42
|
+
@ViewBuilder
|
|
43
|
+
func adaptiveGlass() -> some View {
|
|
44
|
+
if #available(iOS 26, *) {
|
|
45
|
+
self.glassEffect()
|
|
46
|
+
} else {
|
|
47
|
+
self.background(.regularMaterial)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Usage
|
|
53
|
+
Button("Action") { }
|
|
54
|
+
.adaptiveGlass()
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Toolbar Spacer Fallback
|
|
58
|
+
```swift
|
|
59
|
+
extension View {
|
|
60
|
+
@ViewBuilder
|
|
61
|
+
func adaptiveToolbar() -> some View {
|
|
62
|
+
if #available(iOS 26, *) {
|
|
63
|
+
self.toolbar {
|
|
64
|
+
ToolbarItemGroup(placement: .topBarTrailing) {
|
|
65
|
+
Button("Up") { }
|
|
66
|
+
Button("Down") { }
|
|
67
|
+
Spacer(.fixed) // iOS 26 feature
|
|
68
|
+
Button("Settings") { }
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
} else {
|
|
72
|
+
self.toolbar {
|
|
73
|
+
ToolbarItem(placement: .topBarTrailing) {
|
|
74
|
+
Button("Up") { }
|
|
75
|
+
}
|
|
76
|
+
ToolbarItem(placement: .topBarTrailing) {
|
|
77
|
+
Button("Down") { }
|
|
78
|
+
}
|
|
79
|
+
ToolbarItem(placement: .topBarTrailing) {
|
|
80
|
+
Button("Settings") { }
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## WebView Fallback
|
|
89
|
+
|
|
90
|
+
```swift
|
|
91
|
+
struct ArticleView: View {
|
|
92
|
+
let url: URL
|
|
93
|
+
|
|
94
|
+
var body: some View {
|
|
95
|
+
if #available(iOS 26, *) {
|
|
96
|
+
WebView(url: url)
|
|
97
|
+
} else {
|
|
98
|
+
WebViewRepresentable(url: url) // UIViewRepresentable wrapper
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// iOS 17/18 fallback
|
|
104
|
+
struct WebViewRepresentable: UIViewRepresentable {
|
|
105
|
+
let url: URL
|
|
106
|
+
|
|
107
|
+
func makeUIView(context: Context) -> WKWebView {
|
|
108
|
+
WKWebView()
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
func updateUIView(_ webView: WKWebView, context: Context) {
|
|
112
|
+
webView.load(URLRequest(url: url))
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## @Animatable Fallback
|
|
118
|
+
|
|
119
|
+
```swift
|
|
120
|
+
#if swift(>=6.0)
|
|
121
|
+
@Animatable
|
|
122
|
+
struct ModernShape: Shape {
|
|
123
|
+
var progress: Double
|
|
124
|
+
|
|
125
|
+
@AnimatableIgnored
|
|
126
|
+
var style: ShapeStyle
|
|
127
|
+
}
|
|
128
|
+
#else
|
|
129
|
+
struct LegacyShape: Shape {
|
|
130
|
+
var progress: Double
|
|
131
|
+
|
|
132
|
+
var animatableData: Double {
|
|
133
|
+
get { progress }
|
|
134
|
+
set { progress = newValue }
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
#endif
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Search Tab Role Fallback
|
|
141
|
+
|
|
142
|
+
```swift
|
|
143
|
+
TabView {
|
|
144
|
+
if #available(iOS 26, *) {
|
|
145
|
+
SearchView()
|
|
146
|
+
.tabItem { Label("Search", systemImage: "magnifyingglass") }
|
|
147
|
+
.tabRole(.search)
|
|
148
|
+
} else {
|
|
149
|
+
SearchView()
|
|
150
|
+
.tabItem { Label("Search", systemImage: "magnifyingglass") }
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## AttributedString TextEditor
|
|
156
|
+
|
|
157
|
+
```swift
|
|
158
|
+
struct CommentEditor: View {
|
|
159
|
+
@State private var richText = AttributedString("Comment")
|
|
160
|
+
@State private var plainText = "Comment"
|
|
161
|
+
|
|
162
|
+
var body: some View {
|
|
163
|
+
if #available(iOS 26, *) {
|
|
164
|
+
TextEditor(text: $richText) // Rich text support
|
|
165
|
+
} else {
|
|
166
|
+
TextEditor(text: $plainText) // Plain text only
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Migration from Previous Materials
|
|
173
|
+
|
|
174
|
+
### From UIBlurEffect
|
|
175
|
+
```swift
|
|
176
|
+
// Before (UIKit)
|
|
177
|
+
let blurEffect = UIBlurEffect(style: .systemMaterial)
|
|
178
|
+
let blurView = UIVisualEffectView(effect: blurEffect)
|
|
179
|
+
|
|
180
|
+
// After (SwiftUI with fallback)
|
|
181
|
+
extension View {
|
|
182
|
+
@ViewBuilder
|
|
183
|
+
func adaptiveMaterial() -> some View {
|
|
184
|
+
if #available(iOS 26, *) {
|
|
185
|
+
self.glassEffect()
|
|
186
|
+
} else {
|
|
187
|
+
self.background(.regularMaterial)
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### From Custom Materials
|
|
194
|
+
Keep custom materials when:
|
|
195
|
+
- Backward compatibility with iOS < 26 required
|
|
196
|
+
- Specific artistic effect not achievable with glass
|
|
197
|
+
- Non-standard UI paradigm
|
|
198
|
+
|
|
199
|
+
## Testing Checklist
|
|
200
|
+
|
|
201
|
+
### iOS 26 Tests
|
|
202
|
+
- [ ] Liquid Glass appearance correct
|
|
203
|
+
- [ ] Scroll edge effects working
|
|
204
|
+
- [ ] Toolbar grouping renders properly
|
|
205
|
+
- [ ] Search placement is platform-appropriate
|
|
206
|
+
- [ ] Accessibility settings respected
|
|
207
|
+
|
|
208
|
+
### iOS 17/18 Tests
|
|
209
|
+
- [ ] Fallback materials render correctly
|
|
210
|
+
- [ ] No runtime crashes from @available checks
|
|
211
|
+
- [ ] Functionality preserved without glass
|
|
212
|
+
- [ ] Layout doesn't break
|
|
213
|
+
|
|
214
|
+
## Deprecated APIs
|
|
215
|
+
|
|
216
|
+
### iPadOS 26
|
|
217
|
+
```xml
|
|
218
|
+
<!-- Remove entirely — deprecated in iPadOS 26 -->
|
|
219
|
+
<key>UIRequiresFullscreen</key>
|
|
220
|
+
```
|
|
221
|
+
Apps must support resizable windows on iPad.
|
|
222
|
+
|
|
223
|
+
### SwiftUI Updates
|
|
224
|
+
```swift
|
|
225
|
+
// Old (deprecated)
|
|
226
|
+
.onChange(of: value, perform: { newValue in })
|
|
227
|
+
|
|
228
|
+
// New (iOS 17+)
|
|
229
|
+
.onChange(of: value) { oldValue, newValue in }
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Performance Considerations
|
|
233
|
+
|
|
234
|
+
When supporting multiple iOS versions:
|
|
235
|
+
- Use `@available` checks at view level, not inside body
|
|
236
|
+
- Prefer conditional view modifiers over entire view branches
|
|
237
|
+
- Test performance on oldest supported version
|
|
238
|
+
- Profile with Instruments on both old and new iOS
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# Liquid Glass Design System
|
|
2
|
+
|
|
3
|
+
**iOS 26+, iPadOS 26+, macOS Tahoe+, visionOS 3+**
|
|
4
|
+
|
|
5
|
+
## What is Liquid Glass?
|
|
6
|
+
|
|
7
|
+
Apple's next-generation material that dynamically bends light (lensing) rather than scattering it. Unlike blur effects, Liquid Glass:
|
|
8
|
+
- Moves organically like lightweight liquid
|
|
9
|
+
- Adapts automatically to size, environment, and light/dark modes
|
|
10
|
+
- Provides separation through instinctive visual cues
|
|
11
|
+
|
|
12
|
+
## Visual Properties
|
|
13
|
+
|
|
14
|
+
### Lensing (Primary Characteristic)
|
|
15
|
+
```swift
|
|
16
|
+
// Glass warps and bends light in real-time
|
|
17
|
+
Text("Hello")
|
|
18
|
+
.glassEffect() // Lensing effect, not blur
|
|
19
|
+
```
|
|
20
|
+
- Concentrates and shapes light dynamically
|
|
21
|
+
- Elements feel ultra-lightweight yet distinguishable
|
|
22
|
+
- Materializes in/out by modulating light bending (not fading)
|
|
23
|
+
|
|
24
|
+
### Motion & Fluidity
|
|
25
|
+
- Instant flex and energize on interaction
|
|
26
|
+
- Gel-like flexibility for transient UI
|
|
27
|
+
- Dynamic morphing between app states
|
|
28
|
+
- Lightweight transitions (menus pop open in-line)
|
|
29
|
+
|
|
30
|
+
### Adaptive Behavior
|
|
31
|
+
- Shadows increase when text scrolls underneath
|
|
32
|
+
- Independently switches light/dark per element
|
|
33
|
+
- Larger elements (menus, sidebars) simulate thicker material
|
|
34
|
+
- Ambient environment subtly spills onto surface
|
|
35
|
+
|
|
36
|
+
## Variants: Regular vs Clear
|
|
37
|
+
|
|
38
|
+
**CRITICAL**: Never mix Regular and Clear in the same interface.
|
|
39
|
+
|
|
40
|
+
### Regular Variant (Default - Use 95% of Time)
|
|
41
|
+
```swift
|
|
42
|
+
// Regular is the default — most versatile
|
|
43
|
+
NavigationView {
|
|
44
|
+
Content()
|
|
45
|
+
}
|
|
46
|
+
.glassEffect() // Full adaptive effects, auto-legibility
|
|
47
|
+
|
|
48
|
+
// With custom shape
|
|
49
|
+
Button("Tap Me") { }
|
|
50
|
+
.glassEffect(in: RoundedRectangle(cornerRadius: 12))
|
|
51
|
+
```
|
|
52
|
+
- Works in any size, over any content
|
|
53
|
+
- Provides legibility regardless of context
|
|
54
|
+
- Anything can be placed on top
|
|
55
|
+
|
|
56
|
+
### Clear Variant (Special Cases Only)
|
|
57
|
+
```swift
|
|
58
|
+
// Use ONLY when ALL THREE conditions are met:
|
|
59
|
+
// 1. Over media-rich content
|
|
60
|
+
// 2. Dimming layer acceptable
|
|
61
|
+
// 3. Content above is bold and bright
|
|
62
|
+
|
|
63
|
+
ZStack {
|
|
64
|
+
VideoPlayer(player: player)
|
|
65
|
+
.overlay(.black.opacity(0.3)) // Required dimming layer
|
|
66
|
+
|
|
67
|
+
PlayButton()
|
|
68
|
+
.glassEffect(.clear) // Clear variant
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**WARNING**: Clear without meeting all three conditions = poor legibility.
|
|
73
|
+
|
|
74
|
+
## Layer Architecture
|
|
75
|
+
|
|
76
|
+
### Navigation Layer (Use Glass Here)
|
|
77
|
+
```swift
|
|
78
|
+
// Correct — glass on navigation elements
|
|
79
|
+
.toolbar {
|
|
80
|
+
ToolbarItem {
|
|
81
|
+
Button("Add") { }
|
|
82
|
+
.glassEffect()
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Content Layer (No Glass)
|
|
88
|
+
```swift
|
|
89
|
+
// Wrong — don't apply glass to content
|
|
90
|
+
List(items) { item in
|
|
91
|
+
ItemRow(item)
|
|
92
|
+
.glassEffect() // Never do this
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## DO: Best Practices
|
|
97
|
+
|
|
98
|
+
```swift
|
|
99
|
+
// Reserve glass for navigation layer
|
|
100
|
+
TabView { ... } // Gets glass automatically
|
|
101
|
+
|
|
102
|
+
// Use fills for elements ON TOP of glass
|
|
103
|
+
ZStack {
|
|
104
|
+
NavigationBar()
|
|
105
|
+
.glassEffect()
|
|
106
|
+
|
|
107
|
+
FloatingButton()
|
|
108
|
+
.foregroundStyle(.primary) // Fills, not glass
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Use adaptive tinting for primary actions
|
|
112
|
+
Button("View Bag") { }
|
|
113
|
+
.tint(.red)
|
|
114
|
+
.glassEffect()
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## DON'T: Common Mistakes
|
|
118
|
+
|
|
119
|
+
```swift
|
|
120
|
+
// Don't stack glass on glass
|
|
121
|
+
ZStack {
|
|
122
|
+
Toolbar().glassEffect()
|
|
123
|
+
Button().glassEffect() // Wrong
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Don't use solid fills on glass
|
|
127
|
+
Button("Action") { }
|
|
128
|
+
.background(.red) // Breaks glass character
|
|
129
|
+
.glassEffect()
|
|
130
|
+
|
|
131
|
+
// Don't tint everything
|
|
132
|
+
VStack {
|
|
133
|
+
Button("A").tint(.blue).glassEffect()
|
|
134
|
+
Button("B").tint(.green).glassEffect() // No hierarchy
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Scroll Edge Effects
|
|
139
|
+
|
|
140
|
+
```swift
|
|
141
|
+
ScrollView {
|
|
142
|
+
Content()
|
|
143
|
+
}
|
|
144
|
+
.scrollEdgeEffectStyle(.hard, for: .top) // Uniform effect
|
|
145
|
+
|
|
146
|
+
// .soft for gradual fade
|
|
147
|
+
// .hard for pinned accessories
|
|
148
|
+
// .automatic for system default
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Accessibility
|
|
152
|
+
|
|
153
|
+
All features automatic when using glass:
|
|
154
|
+
- **Reduced Transparency**: Makes glass frostier
|
|
155
|
+
- **Increased Contrast**: Black/white with contrasting border
|
|
156
|
+
- **Reduced Motion**: Decreases effect intensity
|
|
157
|
+
|
|
158
|
+
## GlassEffectContainer
|
|
159
|
+
|
|
160
|
+
Group multiple glass effects for performance and morphing animations:
|
|
161
|
+
|
|
162
|
+
```swift
|
|
163
|
+
GlassEffectContainer(spacing: 8) {
|
|
164
|
+
HStack(spacing: 8) {
|
|
165
|
+
Button { } label: { Image(systemName: "plus") }
|
|
166
|
+
.glassEffect()
|
|
167
|
+
.glassEffectID("add", in: namespace)
|
|
168
|
+
|
|
169
|
+
Button { } label: { Image(systemName: "share") }
|
|
170
|
+
.glassEffect()
|
|
171
|
+
.glassEffectID("share", in: namespace)
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
- Groups glass effects for better rendering performance
|
|
177
|
+
- Enables morphing transitions between elements
|
|
178
|
+
- Use `spacing` parameter to control when effects blend together
|
|
179
|
+
|
|
180
|
+
## Morphing with glassEffectID
|
|
181
|
+
|
|
182
|
+
Use `@Namespace` and `.glassEffectID()` for smooth morphing transitions:
|
|
183
|
+
|
|
184
|
+
```swift
|
|
185
|
+
@Namespace var namespace
|
|
186
|
+
|
|
187
|
+
// Elements with same ID morph into each other during transitions
|
|
188
|
+
if isExpanded {
|
|
189
|
+
ExpandedView()
|
|
190
|
+
.glassEffect()
|
|
191
|
+
.glassEffectID("panel", in: namespace)
|
|
192
|
+
} else {
|
|
193
|
+
CollapsedView()
|
|
194
|
+
.glassEffect()
|
|
195
|
+
.glassEffectID("panel", in: namespace)
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Interactive Glass
|
|
200
|
+
|
|
201
|
+
Add touch response with `.interactive()` chained on the glass variant:
|
|
202
|
+
|
|
203
|
+
```swift
|
|
204
|
+
// Correct - chain .interactive() on the variant
|
|
205
|
+
Button("Tap") { }
|
|
206
|
+
.glassEffect(.regular.interactive())
|
|
207
|
+
|
|
208
|
+
// With tint
|
|
209
|
+
Button("Tap") { }
|
|
210
|
+
.glassEffect(.regular.interactive().tint(.blue))
|
|
211
|
+
|
|
212
|
+
// With custom shape
|
|
213
|
+
Button("Tap") { }
|
|
214
|
+
.glassEffect(.regular.interactive(), in: .rect(cornerRadius: 12))
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**Caution**: Avoid `.interactive()` on draggable rows - it can interfere with drag gestures.
|
|
218
|
+
|
|
219
|
+
## Known Limitations
|
|
220
|
+
|
|
221
|
+
**Drag previews**: Glass effects don't render correctly in drag previews. When using `.contentShape(.dragPreview, ...)`, the glass material won't appear during the lift animation. Use simple shapes for drag previews:
|
|
222
|
+
|
|
223
|
+
```swift
|
|
224
|
+
// Glass won't show in drag preview - this is expected
|
|
225
|
+
MyGlassCard()
|
|
226
|
+
.glassEffect()
|
|
227
|
+
.contentShape(.dragPreview, RoundedRectangle(cornerRadius: 12))
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
## API Reference
|
|
231
|
+
|
|
232
|
+
```swift
|
|
233
|
+
// Basic glass effect
|
|
234
|
+
func glassEffect<S: Shape>(
|
|
235
|
+
_ glass: Glass = .regular,
|
|
236
|
+
in shape: S = Capsule()
|
|
237
|
+
) -> some View
|
|
238
|
+
|
|
239
|
+
// Glass variant modifiers (chainable)
|
|
240
|
+
Glass.regular.interactive() // Adds touch response
|
|
241
|
+
Glass.regular.tint(.color) // Adds color tint
|
|
242
|
+
Glass.regular.interactive().tint(.color) // Both
|
|
243
|
+
|
|
244
|
+
// Morphing support
|
|
245
|
+
func glassEffectID<ID: Hashable>(_ id: ID, in namespace: Namespace.ID) -> some View
|
|
246
|
+
|
|
247
|
+
// Container for multiple effects
|
|
248
|
+
GlassEffectContainer(spacing: CGFloat) { content }
|
|
249
|
+
|
|
250
|
+
// For custom views (reflects surrounding content)
|
|
251
|
+
func glassBackgroundEffect() -> some View
|
|
252
|
+
|
|
253
|
+
// Scroll edge styling
|
|
254
|
+
func scrollEdgeEffectStyle(_ style: ScrollEdgeStyle, for edges: Edge.Set) -> some View
|
|
255
|
+
```
|