@mmerterden/multi-agent-pipeline 20.7.0 → 20.8.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/CHANGELOG.md +9 -0
- package/LICENSE +0 -10
- package/docs/facts.json +1 -1
- package/manifest.json +266 -267
- package/package.json +2 -2
- package/pipeline/scripts/_notices.mjs +1 -1
- package/pipeline/skills/.skill-manifest.json +68 -68
- package/pipeline/skills/shared/README.md +70 -70
- package/pipeline/skills/shared/external/alarmkit/SKILL.md +373 -381
- package/pipeline/skills/shared/external/alarmkit/evals/evals.json +23 -18
- package/pipeline/skills/shared/external/alarmkit/references/alarmkit-patterns.md +328 -378
- package/pipeline/skills/shared/external/app-clips/SKILL.md +260 -160
- package/pipeline/skills/shared/external/app-clips/evals/evals.json +27 -27
- package/pipeline/skills/shared/external/app-clips/references/data-handoff-notifications-location.md +150 -83
- package/pipeline/skills/shared/external/app-clips/references/routing-and-experiences.md +135 -83
- package/pipeline/skills/shared/external/app-clips/references/size-capabilities-and-promotion.md +143 -85
- package/pipeline/skills/shared/external/app-intents/SKILL.md +302 -304
- package/pipeline/skills/shared/external/app-intents/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/app-intents/references/appintents-advanced.md +594 -894
- package/pipeline/skills/shared/external/app-store-optimization/SKILL.md +339 -277
- package/pipeline/skills/shared/external/app-store-optimization/evals/evals.json +27 -23
- package/pipeline/skills/shared/external/app-store-optimization/references/keyword-research-methodology.md +105 -122
- package/pipeline/skills/shared/external/app-store-optimization/references/product-page-variants.md +143 -166
- package/pipeline/skills/shared/external/app-store-review/SKILL.md +307 -326
- package/pipeline/skills/shared/external/app-store-review/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/app-store-review/references/privacy-manifest.md +105 -67
- package/pipeline/skills/shared/external/app-store-review/references/review-checklists.md +114 -101
- package/pipeline/skills/shared/external/apple-on-device-ai/SKILL.md +333 -360
- package/pipeline/skills/shared/external/apple-on-device-ai/evals/evals.json +24 -27
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-conversion.md +215 -322
- package/pipeline/skills/shared/external/apple-on-device-ai/references/coreml-optimization.md +161 -256
- package/pipeline/skills/shared/external/apple-on-device-ai/references/foundation-models.md +277 -387
- package/pipeline/skills/shared/external/apple-on-device-ai/references/mlx-swift.md +196 -210
- package/pipeline/skills/shared/external/authentication/SKILL.md +265 -381
- package/pipeline/skills/shared/external/authentication/evals/evals.json +25 -25
- package/pipeline/skills/shared/external/authentication/references/keychain-biometric.md +133 -178
- package/pipeline/skills/shared/external/authentication/references/passkeys.md +111 -147
- package/pipeline/skills/shared/external/avkit/SKILL.md +267 -364
- package/pipeline/skills/shared/external/avkit/evals/evals.json +26 -26
- package/pipeline/skills/shared/external/avkit/references/avkit-patterns.md +375 -493
- package/pipeline/skills/shared/external/background-processing/SKILL.md +270 -382
- package/pipeline/skills/shared/external/background-processing/evals/evals.json +22 -22
- package/pipeline/skills/shared/external/background-processing/references/background-task-patterns.md +169 -317
- package/pipeline/skills/shared/external/callkit-voip/SKILL.md +290 -371
- package/pipeline/skills/shared/external/callkit-voip/evals/evals.json +24 -24
- package/pipeline/skills/shared/external/callkit-voip/references/callkit-patterns.md +175 -343
- package/pipeline/skills/shared/external/cloudkit-sync/SKILL.md +292 -381
- package/pipeline/skills/shared/external/cloudkit-sync/evals/evals.json +33 -30
- package/pipeline/skills/shared/external/cloudkit-sync/references/cloudkit-patterns.md +227 -355
- package/pipeline/skills/shared/external/contacts-framework/SKILL.md +197 -346
- package/pipeline/skills/shared/external/contacts-framework/evals/evals.json +19 -21
- package/pipeline/skills/shared/external/contacts-framework/references/contacts-patterns.md +169 -308
- package/pipeline/skills/shared/external/core-bluetooth/SKILL.md +226 -376
- package/pipeline/skills/shared/external/core-bluetooth/evals/evals.json +25 -22
- package/pipeline/skills/shared/external/core-bluetooth/references/ble-patterns.md +257 -337
- package/pipeline/skills/shared/external/core-data/SKILL.md +292 -368
- package/pipeline/skills/shared/external/core-data/evals/evals.json +30 -27
- package/pipeline/skills/shared/external/core-motion/SKILL.md +235 -324
- package/pipeline/skills/shared/external/core-motion/evals/evals.json +31 -27
- package/pipeline/skills/shared/external/core-motion/references/motion-patterns.md +210 -310
- package/pipeline/skills/shared/external/core-nfc/SKILL.md +292 -366
- package/pipeline/skills/shared/external/core-nfc/evals/evals.json +22 -24
- package/pipeline/skills/shared/external/core-nfc/references/nfc-patterns.md +233 -329
- package/pipeline/skills/shared/external/coreml/SKILL.md +323 -367
- package/pipeline/skills/shared/external/coreml/evals/evals.json +24 -21
- package/pipeline/skills/shared/external/coreml/references/coreml-swift-integration.md +562 -565
- package/pipeline/skills/shared/external/cryptokit/SKILL.md +253 -394
- package/pipeline/skills/shared/external/cryptokit/evals/evals.json +20 -18
- package/pipeline/skills/shared/external/cryptokit/references/cryptokit-patterns.md +299 -488
- package/pipeline/skills/shared/external/debugging-instruments/SKILL.md +270 -323
- package/pipeline/skills/shared/external/debugging-instruments/evals/evals.json +27 -30
- package/pipeline/skills/shared/external/debugging-instruments/references/instruments-guide.md +167 -315
- package/pipeline/skills/shared/external/debugging-instruments/references/lldb-patterns.md +140 -193
- package/pipeline/skills/shared/external/device-integrity/SKILL.md +230 -353
- package/pipeline/skills/shared/external/device-integrity/evals/evals.json +25 -21
- package/pipeline/skills/shared/external/device-integrity/references/device-integrity-patterns.md +159 -197
- package/pipeline/skills/shared/external/energykit/SKILL.md +225 -392
- package/pipeline/skills/shared/external/energykit/evals/evals.json +29 -28
- package/pipeline/skills/shared/external/energykit/references/energykit-patterns.md +174 -470
- package/pipeline/skills/shared/external/eventkit-calendar/SKILL.md +261 -383
- package/pipeline/skills/shared/external/eventkit-calendar/evals/evals.json +25 -22
- package/pipeline/skills/shared/external/eventkit-calendar/references/eventkit-patterns.md +165 -268
- package/pipeline/skills/shared/external/healthkit/SKILL.md +252 -303
- package/pipeline/skills/shared/external/healthkit/evals/evals.json +24 -23
- package/pipeline/skills/shared/external/healthkit/references/healthkit-patterns.md +369 -523
- package/pipeline/skills/shared/external/homekit-matter/SKILL.md +233 -348
- package/pipeline/skills/shared/external/homekit-matter/evals/evals.json +27 -22
- package/pipeline/skills/shared/external/homekit-matter/references/matter-commissioning.md +199 -305
- package/pipeline/skills/shared/external/ios-accessibility/SKILL.md +368 -340
- package/pipeline/skills/shared/external/ios-accessibility/evals/evals.json +28 -27
- package/pipeline/skills/shared/external/ios-accessibility/references/a11y-patterns.md +314 -260
- package/pipeline/skills/shared/external/ios-accessibility/references/media-accessibility.md +97 -67
- package/pipeline/skills/shared/external/ios-accessibility/references/nutrition-labels.md +165 -101
- package/pipeline/skills/shared/external/ios-localization/SKILL.md +258 -371
- package/pipeline/skills/shared/external/ios-localization/evals/evals.json +23 -23
- package/pipeline/skills/shared/external/ios-localization/references/formatstyle-locale.md +283 -491
- package/pipeline/skills/shared/external/ios-localization/references/string-catalogs.md +313 -440
- package/pipeline/skills/shared/external/ios-networking/SKILL.md +265 -341
- package/pipeline/skills/shared/external/ios-networking/evals/evals.json +24 -24
- package/pipeline/skills/shared/external/ios-networking/references/background-websocket.md +425 -652
- package/pipeline/skills/shared/external/ios-networking/references/file-storage-patterns.md +143 -285
- package/pipeline/skills/shared/external/ios-networking/references/lightweight-clients.md +93 -53
- package/pipeline/skills/shared/external/ios-networking/references/network-framework.md +231 -456
- package/pipeline/skills/shared/external/ios-networking/references/urlsession-patterns.md +517 -784
- package/pipeline/skills/shared/external/ios-simulator/SKILL.md +265 -393
- package/pipeline/skills/shared/external/ios-simulator/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/ios-simulator/references/simctl-commands.md +177 -270
- package/pipeline/skills/shared/external/live-activities/SKILL.md +318 -360
- package/pipeline/skills/shared/external/live-activities/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/live-activities/references/activitykit-patterns.md +478 -710
- package/pipeline/skills/shared/external/mapkit-location/SKILL.md +295 -267
- package/pipeline/skills/shared/external/mapkit-location/evals/evals.json +28 -24
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-corelocation-patterns.md +378 -532
- package/pipeline/skills/shared/external/mapkit-location/references/mapkit-patterns.md +397 -499
- package/pipeline/skills/shared/external/metrickit-diagnostics/SKILL.md +165 -348
- package/pipeline/skills/shared/external/metrickit-diagnostics/evals/evals.json +26 -23
- package/pipeline/skills/shared/external/metrickit-diagnostics/references/metrickit-patterns.md +123 -130
- package/pipeline/skills/shared/external/musickit-audio/SKILL.md +189 -315
- package/pipeline/skills/shared/external/musickit-audio/evals/evals.json +22 -21
- package/pipeline/skills/shared/external/musickit-audio/references/musickit-patterns.md +181 -270
- package/pipeline/skills/shared/external/natural-language/SKILL.md +188 -340
- package/pipeline/skills/shared/external/natural-language/evals/evals.json +21 -21
- package/pipeline/skills/shared/external/natural-language/references/translation-patterns.md +171 -225
- package/pipeline/skills/shared/external/passkit-wallet/SKILL.md +258 -392
- package/pipeline/skills/shared/external/passkit-wallet/evals/evals.json +30 -29
- package/pipeline/skills/shared/external/passkit-wallet/references/wallet-passes.md +164 -231
- package/pipeline/skills/shared/external/pdfkit/SKILL.md +312 -344
- package/pipeline/skills/shared/external/pdfkit/evals/evals.json +19 -19
- package/pipeline/skills/shared/external/pdfkit/references/pdfkit-patterns.md +413 -624
- package/pipeline/skills/shared/external/pencilkit-drawing/SKILL.md +242 -358
- package/pipeline/skills/shared/external/pencilkit-drawing/evals/evals.json +25 -21
- package/pipeline/skills/shared/external/pencilkit-drawing/references/pencilkit-patterns.md +161 -226
- package/pipeline/skills/shared/external/permissionkit/SKILL.md +282 -400
- package/pipeline/skills/shared/external/permissionkit/evals/evals.json +27 -30
- package/pipeline/skills/shared/external/permissionkit/references/permissionkit-patterns.md +237 -350
- package/pipeline/skills/shared/external/photos-camera-media/SKILL.md +276 -325
- package/pipeline/skills/shared/external/photos-camera-media/references/av-playback.md +299 -545
- package/pipeline/skills/shared/external/photos-camera-media/references/camera-capture.md +344 -588
- package/pipeline/skills/shared/external/photos-camera-media/references/image-loading-caching.md +316 -660
- package/pipeline/skills/shared/external/photos-camera-media/references/photokit-patterns.md +270 -416
- package/pipeline/skills/shared/external/push-notifications/SKILL.md +312 -340
- package/pipeline/skills/shared/external/push-notifications/evals/evals.json +27 -26
- package/pipeline/skills/shared/external/push-notifications/references/notification-patterns.md +328 -485
- package/pipeline/skills/shared/external/push-notifications/references/rich-notifications.md +327 -560
- package/pipeline/skills/shared/external/realitykit-ar/SKILL.md +218 -410
- package/pipeline/skills/shared/external/realitykit-ar/evals/evals.json +24 -27
- package/pipeline/skills/shared/external/realitykit-ar/references/realitykit-patterns.md +221 -348
- package/pipeline/skills/shared/external/shareplay-activities/SKILL.md +222 -393
- package/pipeline/skills/shared/external/shareplay-activities/evals/evals.json +23 -24
- package/pipeline/skills/shared/external/shareplay-activities/references/shareplay-patterns.md +280 -420
- package/pipeline/skills/shared/external/speech-recognition/SKILL.md +217 -421
- package/pipeline/skills/shared/external/speech-recognition/evals/evals.json +23 -26
- package/pipeline/skills/shared/external/speech-recognition/references/speechanalyzer-patterns.md +133 -125
- package/pipeline/skills/shared/external/storekit/SKILL.md +228 -204
- package/pipeline/skills/shared/external/storekit/evals/evals.json +27 -24
- package/pipeline/skills/shared/external/storekit/references/app-review-guidelines.md +98 -109
- package/pipeline/skills/shared/external/storekit/references/core-patterns.md +298 -242
- package/pipeline/skills/shared/external/storekit/references/storekit-advanced.md +356 -649
- package/pipeline/skills/shared/external/swift-api-design-guidelines/SKILL.md +274 -399
- package/pipeline/skills/shared/external/swift-api-design-guidelines/evals/evals.json +22 -24
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/argument-labels-and-parameters.md +107 -108
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/conventions-and-special-rules.md +93 -165
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/naming-and-clarity.md +99 -137
- package/pipeline/skills/shared/external/swift-api-design-guidelines/references/side-effects-and-mutating-pairs.md +77 -120
- package/pipeline/skills/shared/external/swift-architecture/SKILL.md +334 -350
- package/pipeline/skills/shared/external/swift-architecture/evals/evals.json +22 -22
- package/pipeline/skills/shared/external/swift-charts/SKILL.md +208 -394
- package/pipeline/skills/shared/external/swift-charts/evals/evals.json +27 -30
- package/pipeline/skills/shared/external/swift-charts/references/charts-patterns.md +351 -762
- package/pipeline/skills/shared/external/swift-codable/SKILL.md +339 -343
- package/pipeline/skills/shared/external/swift-codable/evals/evals.json +20 -20
- package/pipeline/skills/shared/external/swift-concurrency/SKILL.md +303 -351
- package/pipeline/skills/shared/external/swift-concurrency/evals/evals.json +27 -24
- package/pipeline/skills/shared/external/swift-concurrency/references/approachable-concurrency.md +65 -80
- package/pipeline/skills/shared/external/swift-concurrency/references/async-algorithms.md +48 -84
- package/pipeline/skills/shared/external/swift-concurrency/references/bridging-interop.md +134 -79
- package/pipeline/skills/shared/external/swift-concurrency/references/concurrency-patterns.md +145 -167
- package/pipeline/skills/shared/external/swift-concurrency/references/diagnostics.md +62 -50
- package/pipeline/skills/shared/external/swift-concurrency/references/swiftui-concurrency.md +92 -121
- package/pipeline/skills/shared/external/swift-concurrency/references/synchronization-primitives.md +177 -241
- package/pipeline/skills/shared/external/swift-formatstyle/SKILL.md +258 -234
- package/pipeline/skills/shared/external/swift-language/SKILL.md +342 -382
- package/pipeline/skills/shared/external/swift-language/evals/evals.json +24 -27
- package/pipeline/skills/shared/external/swift-language/references/swift-attributes-interop.md +79 -56
- package/pipeline/skills/shared/external/swift-language/references/swift-patterns-extended.md +297 -340
- package/pipeline/skills/shared/external/swift-security/SKILL.md +180 -161
- package/pipeline/skills/shared/external/swift-security/evals/evals.json +25 -25
- package/pipeline/skills/shared/external/swift-security/references/biometric-authentication.md +314 -469
- package/pipeline/skills/shared/external/swift-security/references/certificate-trust.md +408 -476
- package/pipeline/skills/shared/external/swift-security/references/common-anti-patterns.md +260 -530
- package/pipeline/skills/shared/external/swift-security/references/compliance-owasp-mapping.md +270 -477
- package/pipeline/skills/shared/external/swift-security/references/credential-storage-patterns.md +573 -571
- package/pipeline/skills/shared/external/swift-security/references/cryptokit-public-key.md +370 -441
- package/pipeline/skills/shared/external/swift-security/references/cryptokit-symmetric.md +332 -433
- package/pipeline/skills/shared/external/swift-security/references/keychain-access-control.md +346 -468
- package/pipeline/skills/shared/external/swift-security/references/keychain-fundamentals.md +352 -472
- package/pipeline/skills/shared/external/swift-security/references/keychain-item-classes.md +431 -432
- package/pipeline/skills/shared/external/swift-security/references/keychain-sharing.md +328 -425
- package/pipeline/skills/shared/external/swift-security/references/migration-legacy-stores.md +341 -579
- package/pipeline/skills/shared/external/swift-security/references/secure-enclave.md +396 -457
- package/pipeline/skills/shared/external/swift-security/references/testing-security-code.md +354 -614
- package/pipeline/skills/shared/external/swift-testing/SKILL.md +188 -175
- package/pipeline/skills/shared/external/swift-testing/evals/evals.json +26 -24
- package/pipeline/skills/shared/external/swift-testing/references/testing-advanced.md +80 -84
- package/pipeline/skills/shared/external/swift-testing/references/testing-patterns.md +317 -433
- package/pipeline/skills/shared/external/swiftdata/SKILL.md +392 -256
- package/pipeline/skills/shared/external/swiftdata/evals/evals.json +24 -24
- package/pipeline/skills/shared/external/swiftdata/references/core-data-coexistence.md +206 -402
- package/pipeline/skills/shared/external/swiftdata/references/indexing.md +59 -52
- package/pipeline/skills/shared/external/swiftdata/references/predicate-pitfalls.md +57 -33
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-advanced.md +354 -747
- package/pipeline/skills/shared/external/swiftdata/references/swiftdata-queries.md +300 -508
- package/pipeline/skills/shared/external/swiftlint/SKILL.md +175 -226
- package/pipeline/skills/shared/external/swiftlint/references/adoption-and-configuration.md +141 -208
- package/pipeline/skills/shared/external/swiftlint/references/custom-rules-and-analyze.md +100 -109
- package/pipeline/skills/shared/external/swiftlint/references/plugins-run-scripts-and-integrations.md +159 -179
- package/pipeline/skills/shared/external/swiftlint/references/rule-reference.md +383 -18
- package/pipeline/skills/shared/external/swiftlint/references/rules-suppressions-and-baselines.md +143 -229
- package/pipeline/skills/shared/external/swiftui-animation/SKILL.md +283 -366
- package/pipeline/skills/shared/external/swiftui-animation/references/animation-advanced.md +396 -608
- package/pipeline/skills/shared/external/swiftui-animation/references/core-animation-bridge.md +336 -385
- package/pipeline/skills/shared/external/swiftui-gestures/SKILL.md +239 -349
- package/pipeline/skills/shared/external/swiftui-gestures/references/gesture-patterns.md +228 -310
- package/pipeline/skills/shared/external/swiftui-layout-components/SKILL.md +260 -249
- package/pipeline/skills/shared/external/swiftui-layout-components/references/form.md +92 -74
- package/pipeline/skills/shared/external/swiftui-layout-components/references/grids.md +112 -177
- package/pipeline/skills/shared/external/swiftui-layout-components/references/list.md +61 -64
- package/pipeline/skills/shared/external/swiftui-layout-components/references/scrollview.md +94 -134
- package/pipeline/skills/shared/external/swiftui-liquid-glass/SKILL.md +193 -225
- package/pipeline/skills/shared/external/swiftui-liquid-glass/references/liquid-glass.md +173 -327
- package/pipeline/skills/shared/external/swiftui-navigation/SKILL.md +193 -168
- package/pipeline/skills/shared/external/swiftui-navigation/references/deeplinks.md +127 -150
- package/pipeline/skills/shared/external/swiftui-navigation/references/navigationstack.md +132 -133
- package/pipeline/skills/shared/external/swiftui-navigation/references/sheets.md +152 -117
- package/pipeline/skills/shared/external/swiftui-navigation/references/tabview.md +106 -140
- package/pipeline/skills/shared/external/swiftui-patterns/SKILL.md +316 -252
- package/pipeline/skills/shared/external/swiftui-patterns/references/architecture-patterns.md +341 -332
- package/pipeline/skills/shared/external/swiftui-patterns/references/deprecated-migration.md +547 -854
- package/pipeline/skills/shared/external/swiftui-patterns/references/design-polish.md +485 -537
- package/pipeline/skills/shared/external/swiftui-patterns/references/platform-and-sharing.md +417 -499
- package/pipeline/skills/shared/external/swiftui-performance/SKILL.md +213 -376
- package/pipeline/skills/shared/external/swiftui-performance/references/demystify-swiftui-performance-wwdc23.md +86 -175
- package/pipeline/skills/shared/external/swiftui-performance/references/optimizing-swiftui-performance-instruments.md +89 -195
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-hangs-in-your-app.md +95 -182
- package/pipeline/skills/shared/external/swiftui-performance/references/understanding-improving-swiftui-performance.md +71 -149
- package/pipeline/skills/shared/external/swiftui-performance/references/wwdc-session-sources.md +21 -27
- package/pipeline/skills/shared/external/swiftui-uikit-interop/SKILL.md +303 -295
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/hosting-migration.md +204 -387
- package/pipeline/skills/shared/external/swiftui-uikit-interop/references/representable-recipes.md +469 -683
- package/pipeline/skills/shared/external/swiftui-webkit/SKILL.md +140 -186
- package/pipeline/skills/shared/external/swiftui-webkit/references/loading-and-observation.md +75 -86
- package/pipeline/skills/shared/external/swiftui-webkit/references/local-content-and-custom-schemes.md +63 -60
- package/pipeline/skills/shared/external/swiftui-webkit/references/migration-and-fallbacks.md +69 -137
- package/pipeline/skills/shared/external/swiftui-webkit/references/navigation-and-javascript.md +95 -67
- package/pipeline/skills/shared/external/tipkit/SKILL.md +220 -335
- package/pipeline/skills/shared/external/tipkit/references/tipkit-patterns.md +356 -494
- package/pipeline/skills/shared/external/vision-framework/SKILL.md +260 -375
- package/pipeline/skills/shared/external/vision-framework/references/vision-requests.md +393 -515
- package/pipeline/skills/shared/external/vision-framework/references/visionkit-scanner.md +363 -539
- package/pipeline/skills/shared/external/weatherkit/SKILL.md +152 -310
- package/pipeline/skills/shared/external/weatherkit/references/weatherkit-patterns.md +288 -407
- package/pipeline/skills/shared/external/widgetkit/SKILL.md +216 -288
- package/pipeline/skills/shared/external/widgetkit/references/widgetkit-advanced.md +414 -719
- package/pipeline/skills/shared/external/NOTICE-swift-ios-skills.md +0 -39
|
@@ -1,319 +1,287 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: swiftui-liquid-glass
|
|
3
|
-
description: "
|
|
3
|
+
description: "Liquid Glass in SwiftUI (iOS 26+): glassEffect, Glass tint/interactive variants, GlassEffectContainer, glassEffectID morphing, glassEffectUnion, GlassEffectTransition, glass and glassProminent button styles, glass toolbars and tab bars, ToolbarSpacer, scrollEdgeEffectStyle, backgroundExtensionEffect, material, vibrancy, tinting, availability gating with fallbacks. Use when implementing, reviewing or improving Liquid Glass, building glass buttons or controls, adding morphing or scroll edge effects, or adopting the iOS 26 design."
|
|
4
4
|
metadata:
|
|
5
|
-
source:
|
|
5
|
+
source: multi-agent-pipeline
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# SwiftUI Liquid Glass
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
(tab bars, toolbars, navigation bars, sheets) adopt Liquid Glass automatically when
|
|
14
|
-
built with the iOS 26 SDK. Use the APIs below for custom views and controls.
|
|
10
|
+
Apple's 26 releases (iOS and iPadOS, macOS, tvOS, watchOS) introduced a new
|
|
11
|
+
material called Liquid Glass. It blurs what lies behind it, picks up color and light
|
|
12
|
+
from its surroundings, and responds to touch and pointer input.
|
|
15
13
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
- [Workflow](#workflow)
|
|
21
|
-
- [Core API Summary](#core-api-summary)
|
|
22
|
-
- [Code Examples](#code-examples)
|
|
23
|
-
- [Common Mistakes](#common-mistakes)
|
|
24
|
-
- [Review Checklist](#review-checklist)
|
|
25
|
-
- [References](#references)
|
|
14
|
+
System chrome gets it for free: once an app compiles against the 26 SDK, its
|
|
15
|
+
tab bars, toolbars, navigation bars and sheets are glass already. The APIs below are for your own
|
|
16
|
+
views and controls. Full signatures, conformances, performance and
|
|
17
|
+
accessibility notes are in [references/liquid-glass.md](references/liquid-glass.md).
|
|
26
18
|
|
|
27
19
|
## Workflow
|
|
28
20
|
|
|
29
|
-
|
|
21
|
+
### 1. Implement a new feature
|
|
30
22
|
|
|
31
|
-
|
|
23
|
+
1. List which surfaces should become glass (cards, chips, floating controls,
|
|
24
|
+
bars you draw yourself).
|
|
25
|
+
2. For each one, decide the shape, how prominent it is, and whether it is
|
|
26
|
+
interactive.
|
|
27
|
+
3. Put glass elements that sit together inside one `GlassEffectContainer`.
|
|
28
|
+
4. Add `.glassEffect()` once padding, frame and styling are in place.
|
|
29
|
+
5. Add `.interactive()` only to elements that can be tapped or focused.
|
|
30
|
+
6. Where elements appear, disappear or rearrange with animation, give them
|
|
31
|
+
`glassEffectID(_:in:)` so they morph.
|
|
32
|
+
7. Wrap all of it in an `#available(iOS 26, *)` check, with a fallback look.
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
2. Decide shape, prominence, and whether each element needs interactivity.
|
|
35
|
-
3. Wrap grouped glass elements in a `GlassEffectContainer`.
|
|
36
|
-
4. Apply `.glassEffect()` **after** layout and appearance modifiers.
|
|
37
|
-
5. Add `.interactive()` only to tappable/focusable elements.
|
|
38
|
-
6. Add morphing transitions with `glassEffectID(_:in:)` where the view hierarchy
|
|
39
|
-
changes with animation.
|
|
40
|
-
7. Gate with `if #available(iOS 26, *)` and provide a fallback for earlier versions.
|
|
34
|
+
### 2. Improve an existing feature
|
|
41
35
|
|
|
42
|
-
|
|
36
|
+
1. Swap hand-built blur or material backgrounds for `.glassEffect()`.
|
|
37
|
+
2. Group sibling glass elements in a container, which both blends them and
|
|
38
|
+
renders them together.
|
|
39
|
+
3. Buttons that imitate glass by hand become `.buttonStyle(.glass)` or
|
|
40
|
+
`.buttonStyle(.glassProminent)`.
|
|
41
|
+
4. Wherever items animate in or out, add morphing.
|
|
43
42
|
|
|
44
|
-
|
|
45
|
-
2. Wrap sibling glass elements in `GlassEffectContainer` for blending and performance.
|
|
46
|
-
3. Replace custom glass-like buttons with `.buttonStyle(.glass)` or `.buttonStyle(.glassProminent)`.
|
|
47
|
-
4. Add morphing transitions where animated insertion/removal occurs.
|
|
43
|
+
### 3. Review
|
|
48
44
|
|
|
49
|
-
|
|
45
|
+
Go through the checklist below, item by item.
|
|
50
46
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
## Core API Summary
|
|
47
|
+
## Core API summary
|
|
54
48
|
|
|
55
49
|
### glassEffect(_:in:)
|
|
56
50
|
|
|
57
|
-
|
|
51
|
+
A `nonisolated` view modifier taking a `Glass` value (default `.regular`) and a shape (default
|
|
52
|
+
`DefaultGlassEffectShape()`, a capsule). Called bare, it gives regular glass in
|
|
53
|
+
a capsule.
|
|
58
54
|
|
|
59
|
-
|
|
60
|
-
nonisolated func glassEffect(
|
|
61
|
-
_ glass: Glass = .regular,
|
|
62
|
-
in shape: some Shape = DefaultGlassEffectShape()
|
|
63
|
-
) -> some View
|
|
64
|
-
```
|
|
55
|
+
### Glass
|
|
65
56
|
|
|
66
|
-
|
|
57
|
+
| Variant | Meaning |
|
|
58
|
+
| --- | --- |
|
|
59
|
+
| `.regular` | The standard material |
|
|
60
|
+
| `.clear` | Lighter, with minimal tint, for use over rich media |
|
|
61
|
+
| `.identity` | No effect at all; useful for switching glass off conditionally |
|
|
67
62
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
| `.regular` | Standard glass material |
|
|
71
|
-
| `.clear` | Clear variant (minimal tint) |
|
|
72
|
-
| `.identity` | No visual effect (pass-through) |
|
|
73
|
-
| `.tint(_:)` | Add a color tint for prominence |
|
|
74
|
-
| `.interactive(_:)` | React to touch and pointer interactions |
|
|
63
|
+
Modifiers return a new `Glass` and chain: `.tint(_:)` adds color for
|
|
64
|
+
prominence, `.interactive(_:)` makes it respond to touch and pointer.
|
|
75
65
|
|
|
76
|
-
|
|
66
|
+
```swift
|
|
67
|
+
.glassEffect(.regular.tint(.teal).interactive())
|
|
68
|
+
```
|
|
77
69
|
|
|
78
70
|
### GlassEffectContainer
|
|
79
71
|
|
|
80
|
-
|
|
72
|
+
`GlassEffectContainer(spacing:)` lets its children share one rendering pass, so
|
|
73
|
+
they can blend into each other and morph between shapes.
|
|
81
74
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
```
|
|
75
|
+
`spacing` is the distance at which neighbouring shapes start to blend. Set it
|
|
76
|
+
equal to or larger than the spacing of the layout inside, so shapes merge while
|
|
77
|
+
they move but stay separate at rest.
|
|
87
78
|
|
|
88
|
-
|
|
89
|
-
the interior layout spacing so shapes merge during animated transitions but remain
|
|
90
|
-
separate at rest.
|
|
79
|
+
### Morphing and transitions
|
|
91
80
|
|
|
92
|
-
|
|
81
|
+
| API | Purpose |
|
|
82
|
+
| --- | --- |
|
|
83
|
+
| `glassEffectID(_:in:)` | Names a shape within a namespace so animation can morph it |
|
|
84
|
+
| `glassEffectUnion(id:namespace:)` | Several views drawn as one combined glass shape |
|
|
85
|
+
| `glassEffectTransition(_:)` | How glass appears and disappears |
|
|
93
86
|
|
|
94
|
-
|
|
95
|
-
|---|---|
|
|
96
|
-
| `glassEffectID(_:in:)` | Stable identity for morphing during view hierarchy changes |
|
|
97
|
-
| `glassEffectUnion(id:namespace:)` | Merge multiple views into one glass shape |
|
|
98
|
-
| `glassEffectTransition(_:)` | Control how glass appears/disappears |
|
|
87
|
+
`GlassEffectTransition` values:
|
|
99
88
|
|
|
100
|
-
|
|
101
|
-
|
|
89
|
+
- `.matchedGeometry`: morph into or out of a nearby shape (the default when
|
|
90
|
+
shapes are within the container's spacing).
|
|
91
|
+
- `.materialize`: fade the content and animate the glass in or out, without
|
|
92
|
+
matching geometry.
|
|
93
|
+
- `.identity`: no transition.
|
|
102
94
|
|
|
103
|
-
### Button
|
|
95
|
+
### Button styles
|
|
104
96
|
|
|
105
97
|
```swift
|
|
106
|
-
Button("
|
|
107
|
-
.buttonStyle(.glass)
|
|
98
|
+
Button("Send", systemImage: "paperplane") { send() }
|
|
99
|
+
.buttonStyle(.glass)
|
|
108
100
|
|
|
109
|
-
Button("
|
|
110
|
-
.buttonStyle(.glassProminent)
|
|
101
|
+
Button("Book now") { book() }
|
|
102
|
+
.buttonStyle(.glassProminent)
|
|
111
103
|
```
|
|
112
104
|
|
|
113
|
-
###
|
|
114
|
-
|
|
115
|
-
These complement Liquid Glass when building custom toolbars and scroll views:
|
|
105
|
+
### Edge effects and extended backgrounds (iOS 26+)
|
|
116
106
|
|
|
117
107
|
```swift
|
|
118
|
-
ScrollView {
|
|
119
|
-
|
|
120
|
-
}
|
|
121
|
-
.scrollEdgeEffectStyle(.soft, for: .top) // Configures edge effect at scroll boundaries
|
|
122
|
-
|
|
123
|
-
// Duplicate view into mirrored copies at safe area edges with blur (e.g., under sidebars)
|
|
124
|
-
content
|
|
125
|
-
.backgroundExtensionEffect()
|
|
108
|
+
ScrollView { feed }
|
|
109
|
+
.scrollEdgeEffectStyle(.soft, for: .top)
|
|
126
110
|
```
|
|
127
111
|
|
|
128
|
-
|
|
112
|
+
`.scrollEdgeEffectStyle(_:for:)` sets how content fades or cuts off where it
|
|
113
|
+
meets a floating bar at a scroll edge.
|
|
129
114
|
|
|
130
|
-
|
|
115
|
+
`.backgroundExtensionEffect()` extends a view past the safe area by drawing
|
|
116
|
+
mirrored, blurred copies of it at the edges. A hero image in a split view's
|
|
117
|
+
detail column can then continue underneath the sidebar.
|
|
118
|
+
|
|
119
|
+
### ToolbarSpacer (iOS 26+)
|
|
131
120
|
|
|
132
121
|
```swift
|
|
133
122
|
.toolbar {
|
|
134
|
-
ToolbarItem { Button("
|
|
123
|
+
ToolbarItem { Button("Revert", systemImage: "clock.arrow.circlepath") { revert() } }
|
|
135
124
|
ToolbarSpacer(.fixed)
|
|
136
|
-
ToolbarItem { Button("
|
|
125
|
+
ToolbarItem { Button("Done") { finish() } }
|
|
137
126
|
}
|
|
138
127
|
```
|
|
139
128
|
|
|
140
|
-
|
|
129
|
+
A fixed spacer splits the items into separate glass groups.
|
|
141
130
|
|
|
142
|
-
|
|
131
|
+
## Code examples
|
|
132
|
+
|
|
133
|
+
### A gated glass card
|
|
143
134
|
|
|
144
135
|
```swift
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
.padding()
|
|
148
|
-
.glassEffect(.regular.interactive(), in: .rect(cornerRadius: 16))
|
|
149
|
-
} else {
|
|
150
|
-
Text("Status")
|
|
151
|
-
.padding()
|
|
152
|
-
.background(.ultraThinMaterial, in: RoundedRectangle(cornerRadius: 16))
|
|
153
|
-
}
|
|
154
|
-
```
|
|
136
|
+
struct StatusCard: View {
|
|
137
|
+
let title: String
|
|
155
138
|
|
|
156
|
-
|
|
139
|
+
var body: some View {
|
|
140
|
+
let label = Text(title).font(.headline).padding(20)
|
|
157
141
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
.frame(width: 56, height: 56)
|
|
164
|
-
.glassEffect(.regular.interactive())
|
|
142
|
+
if #available(iOS 26, *) {
|
|
143
|
+
let tappable = Glass.regular.interactive()
|
|
144
|
+
label.glassEffect(tappable, in: .rect(cornerRadius: 18))
|
|
145
|
+
} else {
|
|
146
|
+
label.background(.ultraThinMaterial, in: RoundedRectangle(cornerRadius: 18))
|
|
165
147
|
}
|
|
166
148
|
}
|
|
167
149
|
}
|
|
168
150
|
```
|
|
169
151
|
|
|
170
|
-
###
|
|
152
|
+
### A row of glass controls
|
|
153
|
+
|
|
154
|
+
Container spacing matches the stack spacing so the circles blend only when they
|
|
155
|
+
move toward each other.
|
|
171
156
|
|
|
172
157
|
```swift
|
|
173
|
-
@
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
.glassEffect()
|
|
188
|
-
.glassEffectID("eraser", in: ns)
|
|
158
|
+
@available(iOS 26, *)
|
|
159
|
+
struct PlaybackControls: View {
|
|
160
|
+
private let symbols = ["backward.fill", "play.fill", "forward.fill"]
|
|
161
|
+
private let gap: CGFloat = 20
|
|
162
|
+
|
|
163
|
+
var body: some View {
|
|
164
|
+
GlassEffectContainer(spacing: gap) {
|
|
165
|
+
HStack(spacing: gap) {
|
|
166
|
+
ForEach(symbols, id: \.self) { symbol in
|
|
167
|
+
Image(systemName: symbol)
|
|
168
|
+
.font(.title2)
|
|
169
|
+
.frame(width: 60, height: 60)
|
|
170
|
+
.glassEffect(.regular.interactive())
|
|
171
|
+
}
|
|
189
172
|
}
|
|
190
173
|
}
|
|
191
174
|
}
|
|
192
|
-
|
|
193
|
-
Button("Toggle") {
|
|
194
|
-
withAnimation { isExpanded.toggle() }
|
|
195
|
-
}
|
|
196
|
-
.buttonStyle(.glass)
|
|
197
175
|
}
|
|
198
176
|
```
|
|
199
177
|
|
|
200
|
-
###
|
|
178
|
+
### Morphing between states
|
|
201
179
|
|
|
202
180
|
```swift
|
|
203
|
-
@
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
181
|
+
@available(iOS 26, *)
|
|
182
|
+
struct ExpandingActions: View {
|
|
183
|
+
@Namespace private var glassSpace
|
|
184
|
+
@State private var expanded = false
|
|
185
|
+
|
|
186
|
+
var body: some View {
|
|
187
|
+
let gap: CGFloat = 36
|
|
188
|
+
return GlassEffectContainer(spacing: gap) {
|
|
189
|
+
HStack(spacing: gap) {
|
|
190
|
+
Button("Compose", systemImage: "square.and.pencil") {
|
|
191
|
+
withAnimation(.bouncy) { expanded.toggle() }
|
|
192
|
+
}
|
|
193
|
+
.buttonStyle(.glass)
|
|
194
|
+
.glassEffectID("compose", in: glassSpace)
|
|
195
|
+
|
|
196
|
+
if expanded {
|
|
197
|
+
Button("Attach", systemImage: "paperclip") { }
|
|
198
|
+
.buttonStyle(.glass)
|
|
199
|
+
.glassEffectID("attach", in: glassSpace)
|
|
200
|
+
}
|
|
201
|
+
}
|
|
212
202
|
}
|
|
213
203
|
}
|
|
214
204
|
}
|
|
215
205
|
```
|
|
216
206
|
|
|
217
|
-
###
|
|
207
|
+
### Merging selected shapes with a union
|
|
218
208
|
|
|
219
209
|
```swift
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
210
|
+
@available(iOS 26, *)
|
|
211
|
+
struct FilterChips: View {
|
|
212
|
+
@Namespace private var chipSpace
|
|
213
|
+
let filters = ["Today", "Week", "Month", "Year"]
|
|
223
214
|
|
|
224
215
|
var body: some View {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
216
|
+
let gap: CGFloat = 12
|
|
217
|
+
return GlassEffectContainer(spacing: gap) {
|
|
218
|
+
HStack(spacing: gap) {
|
|
219
|
+
ForEach(filters.indices, id: \.self) { index in
|
|
220
|
+
Text(filters[index])
|
|
221
|
+
.padding(.horizontal, 14)
|
|
222
|
+
.padding(.vertical, 8)
|
|
223
|
+
.glassEffect()
|
|
224
|
+
.glassEffectUnion(id: index < 2 ? "short" : "long", namespace: chipSpace)
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
229
228
|
}
|
|
230
229
|
}
|
|
231
230
|
```
|
|
232
231
|
|
|
233
|
-
|
|
232
|
+
Chips 0 and 1 render as one glass shape and chips 2 and 3 as another.
|
|
234
233
|
|
|
235
|
-
###
|
|
236
|
-
|
|
237
|
-
Overuse distracts from content. Glass should emphasize key interactive elements, not decorate everything.
|
|
234
|
+
### A tinted badge
|
|
238
235
|
|
|
239
236
|
```swift
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
Divider().glassEffect()
|
|
245
|
-
Text("Body").glassEffect()
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
// CORRECT: Glass on primary interactive elements only
|
|
249
|
-
VStack {
|
|
250
|
-
Text("Title").font(.title)
|
|
251
|
-
Text("Subtitle").font(.subheadline)
|
|
252
|
-
Divider()
|
|
253
|
-
Text("Body")
|
|
254
|
-
}
|
|
255
|
-
.padding()
|
|
256
|
-
.glassEffect()
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
### DON'T: Nest GlassEffectContainer inside another
|
|
260
|
-
|
|
261
|
-
Nested containers cause undefined rendering behavior.
|
|
237
|
+
@available(iOS 26, *)
|
|
238
|
+
struct CountBadge: View {
|
|
239
|
+
let count: Int
|
|
240
|
+
let accent: Color
|
|
262
241
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
242
|
+
var body: some View {
|
|
243
|
+
Text(count, format: .number)
|
|
244
|
+
.font(.caption.bold())
|
|
245
|
+
.padding(.horizontal, 10)
|
|
246
|
+
.padding(.vertical, 4)
|
|
247
|
+
.glassEffect(.regular.tint(accent), in: .rect(cornerRadius: 10))
|
|
268
248
|
}
|
|
269
249
|
}
|
|
270
|
-
|
|
271
|
-
// CORRECT: Single container wrapping all glass views
|
|
272
|
-
GlassEffectContainer {
|
|
273
|
-
content.glassEffect()
|
|
274
|
-
}
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
### DON'T: Add .interactive() to non-interactive elements
|
|
278
|
-
|
|
279
|
-
`.interactive()` adds visual affordance suggesting tappability. Using it on decorative glass misleads users.
|
|
280
|
-
|
|
281
|
-
### DON'T: Apply .glassEffect() before layout modifiers
|
|
282
|
-
|
|
283
|
-
Glass calculates its shape from the final frame. Applying it before padding/frame produces incorrect bounds.
|
|
284
|
-
|
|
285
|
-
```swift
|
|
286
|
-
// WRONG: Glass applied before padding
|
|
287
|
-
Text("Label").glassEffect().padding()
|
|
288
|
-
|
|
289
|
-
// CORRECT: Glass applied after layout
|
|
290
|
-
Text("Label").padding().glassEffect()
|
|
291
250
|
```
|
|
292
251
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
- [ ]
|
|
313
|
-
- [ ]
|
|
252
|
+
## Common mistakes
|
|
253
|
+
|
|
254
|
+
1. **Glass everywhere.** Too much glass competes for attention. Put it on the
|
|
255
|
+
key interactive elements; for a padded group of labels, use one glass
|
|
256
|
+
surface for the group, not one per label.
|
|
257
|
+
2. **Nested containers.** A `GlassEffectContainer` inside another gives
|
|
258
|
+
undefined rendering. Use one container per group.
|
|
259
|
+
3. **`.interactive()` on decoration.** It tells the user the element can be
|
|
260
|
+
pressed. Leave it off anything that cannot.
|
|
261
|
+
4. **Glass before padding or frame.** The effect sizes its shape from the
|
|
262
|
+
frame at the point where it is applied; add it before `.padding()` or
|
|
263
|
+
`.frame()` and the shape comes out too small.
|
|
264
|
+
5. **Skipping accessibility settings.** Turn on Reduce Transparency, then
|
|
265
|
+
Reduce Motion, and confirm text stays readable in each.
|
|
266
|
+
6. **No availability gate.** Every one of these APIs needs iOS 26. Gate it and
|
|
267
|
+
give older systems a fallback.
|
|
268
|
+
|
|
269
|
+
## Review checklist
|
|
270
|
+
|
|
271
|
+
- [ ] `#available(iOS 26, *)` gate with a fallback
|
|
272
|
+
- [ ] Multiple glass views grouped in a `GlassEffectContainer`
|
|
273
|
+
- [ ] `.glassEffect()` placed after layout and appearance modifiers
|
|
274
|
+
- [ ] `.interactive()` only where the user can interact
|
|
275
|
+
- [ ] `glassEffectID` paired with a `@Namespace` for morphing
|
|
276
|
+
- [ ] `.matchedGeometry` for nearby shapes, `.materialize` for distant ones
|
|
277
|
+
- [ ] Related elements share shapes, tints and spacing
|
|
278
|
+
- [ ] Glass kept to a small number of surfaces, grouped by containers
|
|
279
|
+
- [ ] Checked once with Reduce Transparency on and once with Reduce Motion on
|
|
280
|
+
- [ ] Buttons use `.glass` or `.glassProminent` rather than hand-built glass
|
|
281
|
+
- [ ] Values that drive glass (IDs, tints) are `Sendable`, and the effects are applied from main-actor view code
|
|
314
282
|
|
|
315
283
|
## References
|
|
316
284
|
|
|
317
|
-
-
|
|
318
|
-
-
|
|
319
|
-
-
|
|
285
|
+
- [references/liquid-glass.md](references/liquid-glass.md): signatures, transitions, performance, accessibility
|
|
286
|
+
- [Article: glass on custom views](https://developer.apple.com/documentation/swiftui/applying-liquid-glass-to-custom-views)
|
|
287
|
+
- [Overview: adopting the new material](https://developer.apple.com/documentation/technologyoverviews/adopting-liquid-glass)
|