opencode-skills-collection 3.1.0 → 3.1.2
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/bundled-skills/.antigravity-install-manifest.json +84 -1
- package/bundled-skills/2slides-ppt-generator/SKILL.md +8 -7
- package/bundled-skills/android-cli/SKILL.md +19 -7
- package/bundled-skills/android-ui-journey-testing/SKILL.md +191 -0
- package/bundled-skills/apple-notes-search/SKILL.md +12 -2
- package/bundled-skills/ask-matt/SKILL.md +92 -0
- package/bundled-skills/atlas-ledger/SKILL.md +8 -0
- package/bundled-skills/bugs-are-annoying/SKILL.md +137 -0
- package/bundled-skills/codebase-design/DEEPENING.md +37 -0
- package/bundled-skills/codebase-design/DESIGN-IT-TWICE.md +44 -0
- package/bundled-skills/codebase-design/SKILL.md +145 -0
- package/bundled-skills/codex-fable5/SKILL.md +10 -2
- package/bundled-skills/competitor-analysis/LICENSE.txt +21 -0
- package/bundled-skills/competitor-analysis/SKILL.md +434 -0
- package/bundled-skills/competitor-analysis/references/battle-card-subagent.md +127 -0
- package/bundled-skills/competitor-analysis/references/battle-card.md +91 -0
- package/bundled-skills/competitor-analysis/references/example-research.md +130 -0
- package/bundled-skills/competitor-analysis/references/report-template.html +127 -0
- package/bundled-skills/competitor-analysis/references/research-patterns.md +217 -0
- package/bundled-skills/competitor-analysis/references/workflow.md +434 -0
- package/bundled-skills/competitor-analysis/scripts/capture_screenshots.mjs +142 -0
- package/bundled-skills/competitor-analysis/scripts/compile_report.mjs +929 -0
- package/bundled-skills/competitor-analysis/scripts/extract_vs_names.mjs +140 -0
- package/bundled-skills/competitor-analysis/scripts/gate_candidates.mjs +224 -0
- package/bundled-skills/competitor-analysis/scripts/list_urls.mjs +90 -0
- package/bundled-skills/competitor-analysis/scripts/md_utils.mjs +50 -0
- package/bundled-skills/competitor-analysis/scripts/merge_partials.mjs +291 -0
- package/bundled-skills/competitor-analysis/scripts/package.json +6 -0
- package/bundled-skills/design-it/3d-ui/SKILL.md +259 -0
- package/bundled-skills/design-it/SKILL.md +170 -0
- package/bundled-skills/design-it/ai-native-ui/SKILL.md +295 -0
- package/bundled-skills/design-it/aurora-ui/SKILL.md +307 -0
- package/bundled-skills/design-it/bento-ui/SKILL.md +314 -0
- package/bundled-skills/design-it/brutalism/SKILL.md +270 -0
- package/bundled-skills/design-it/brutalist-typography/SKILL.md +287 -0
- package/bundled-skills/design-it/card-based-design/SKILL.md +262 -0
- package/bundled-skills/design-it/claymorphism/SKILL.md +287 -0
- package/bundled-skills/design-it/color-blocking/SKILL.md +278 -0
- package/bundled-skills/design-it/command-center-ui/SKILL.md +345 -0
- package/bundled-skills/design-it/cyber-y2k/SKILL.md +312 -0
- package/bundled-skills/design-it/cyberpunk-ui/SKILL.md +262 -0
- package/bundled-skills/design-it/dark-mode/SKILL.md +289 -0
- package/bundled-skills/design-it/dashboard-design/SKILL.md +331 -0
- package/bundled-skills/design-it/data-dense-design/SKILL.md +322 -0
- package/bundled-skills/design-it/duotone-design/SKILL.md +248 -0
- package/bundled-skills/design-it/editorial-design/SKILL.md +328 -0
- package/bundled-skills/design-it/flat-design/SKILL.md +221 -0
- package/bundled-skills/design-it/flat-design-2/SKILL.md +240 -0
- package/bundled-skills/design-it/floating-ui/SKILL.md +299 -0
- package/bundled-skills/design-it/frutiger-aero/SKILL.md +274 -0
- package/bundled-skills/design-it/glassmorphism/SKILL.md +272 -0
- package/bundled-skills/design-it/gradient-design/SKILL.md +309 -0
- package/bundled-skills/design-it/high-contrast/SKILL.md +288 -0
- package/bundled-skills/design-it/holographic-ui/SKILL.md +310 -0
- package/bundled-skills/design-it/isometric-design/SKILL.md +228 -0
- package/bundled-skills/design-it/layered-design/SKILL.md +247 -0
- package/bundled-skills/design-it/material-design/SKILL.md +275 -0
- package/bundled-skills/design-it/maximalism/SKILL.md +297 -0
- package/bundled-skills/design-it/minimalism/SKILL.md +267 -0
- package/bundled-skills/design-it/monochromatic-ui/SKILL.md +296 -0
- package/bundled-skills/design-it/neo-brutalism/SKILL.md +270 -0
- package/bundled-skills/design-it/neumorphism/SKILL.md +248 -0
- package/bundled-skills/design-it/retro-design/SKILL.md +283 -0
- package/bundled-skills/design-it/retro-futurism/SKILL.md +259 -0
- package/bundled-skills/design-it/sci-fi-interface/SKILL.md +309 -0
- package/bundled-skills/design-it/skeuomorphism/SKILL.md +280 -0
- package/bundled-skills/design-it/soft-pastel/SKILL.md +307 -0
- package/bundled-skills/design-it/spatial-computing-ui/SKILL.md +300 -0
- package/bundled-skills/design-it/spatial-design/SKILL.md +268 -0
- package/bundled-skills/design-it/swiss-design/SKILL.md +293 -0
- package/bundled-skills/design-it/synthwave/SKILL.md +257 -0
- package/bundled-skills/design-it/tile-design/SKILL.md +297 -0
- package/bundled-skills/design-it/typography-first/SKILL.md +247 -0
- package/bundled-skills/design-it/vaporwave/SKILL.md +331 -0
- package/bundled-skills/design-it/vibrant-maximalism/SKILL.md +291 -0
- package/bundled-skills/design-it/widget-based-design/SKILL.md +274 -0
- package/bundled-skills/design-it/y2k-design/SKILL.md +268 -0
- package/bundled-skills/diagnosing-bugs/SKILL.md +165 -0
- package/bundled-skills/diagnosing-bugs/scripts/hitl-loop.template.sh +41 -0
- package/bundled-skills/docs/contributors/skill-scoring.md +235 -0
- package/bundled-skills/docs/integrations/jetski-cortex.md +3 -3
- package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +1 -1
- package/bundled-skills/docs/maintainers/repo-growth-seo.md +3 -3
- package/bundled-skills/docs/maintainers/skills-update-guide.md +1 -1
- package/bundled-skills/docs/users/bundles.md +145 -1
- package/bundled-skills/docs/users/claude-code-skills.md +1 -1
- package/bundled-skills/docs/users/gemini-cli-skills.md +1 -1
- package/bundled-skills/docs/users/getting-started.md +1 -1
- package/bundled-skills/docs/users/kiro-integration.md +1 -1
- package/bundled-skills/docs/users/specialized-plugin-roadmap.md +11 -4
- package/bundled-skills/docs/users/usage.md +4 -4
- package/bundled-skills/docs/users/visual-guide.md +4 -4
- package/bundled-skills/domain-modeling/ADR-FORMAT.md +47 -0
- package/bundled-skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
- package/bundled-skills/domain-modeling/SKILL.md +105 -0
- package/bundled-skills/dos-verify-done-claims/SKILL.md +16 -4
- package/bundled-skills/ecl-harness-engineer/agents/creator-config.md +1 -1
- package/bundled-skills/ecl-harness-engineer/references/environment-config-guide.md +2 -2
- package/bundled-skills/ecl-harness-engineer/references/environment-detection-guide.md +4 -4
- package/bundled-skills/event-staffing-ordering/SKILL.md +4 -0
- package/bundled-skills/grill-me/SKILL.md +36 -0
- package/bundled-skills/grill-with-docs/SKILL.md +36 -0
- package/bundled-skills/grilling/SKILL.md +39 -0
- package/bundled-skills/handoff/SKILL.md +45 -0
- package/bundled-skills/image-generator/.env.example +7 -0
- package/bundled-skills/image-generator/SKILL.md +509 -0
- package/bundled-skills/improve-codebase-architecture/HTML-REPORT.md +123 -0
- package/bundled-skills/improve-codebase-architecture/SKILL.md +97 -0
- package/bundled-skills/learn/SKILL.md +156 -0
- package/bundled-skills/lesson-generator/SKILL.md +90 -0
- package/bundled-skills/llm-council/.env.example +7 -0
- package/bundled-skills/llm-council/SKILL.md +602 -0
- package/bundled-skills/loop-library/SKILL.md +208 -0
- package/bundled-skills/loop-library/agents/openai.yaml +4 -0
- package/bundled-skills/loop-library/references/catalog.md +270 -0
- package/bundled-skills/lovable-cleanup/SKILL.md +9 -7
- package/bundled-skills/macos-screen-recorder/SKILL.md +9 -1
- package/bundled-skills/mailtrap-managing-contacts/SKILL.md +112 -0
- package/bundled-skills/mailtrap-sending-emails/SKILL.md +167 -0
- package/bundled-skills/mailtrap-setting-up-sending-domain/SKILL.md +77 -0
- package/bundled-skills/mailtrap-testing-with-sandbox/SKILL.md +110 -0
- package/bundled-skills/prototype/LOGIC.md +79 -0
- package/bundled-skills/prototype/SKILL.md +62 -0
- package/bundled-skills/prototype/UI.md +112 -0
- package/bundled-skills/screenstudio-alt/SKILL.md +9 -1
- package/bundled-skills/setup-matt-pocock-skills/SKILL.md +158 -0
- package/bundled-skills/setup-matt-pocock-skills/domain.md +51 -0
- package/bundled-skills/setup-matt-pocock-skills/issue-tracker-github.md +34 -0
- package/bundled-skills/setup-matt-pocock-skills/issue-tracker-gitlab.md +35 -0
- package/bundled-skills/setup-matt-pocock-skills/issue-tracker-local.md +19 -0
- package/bundled-skills/setup-matt-pocock-skills/triage-labels.md +15 -0
- package/bundled-skills/survey-generator/LICENSE +21 -0
- package/bundled-skills/survey-generator/SKILL.md +143 -0
- package/bundled-skills/survey-generator/build_artifact.py +208 -0
- package/bundled-skills/survey-generator/examples/agentic-engineering/research_bundle.json +1196 -0
- package/bundled-skills/survey-generator/examples/agentic-engineering/survey.html +706 -0
- package/bundled-skills/survey-generator/style_spec.json +85 -0
- package/bundled-skills/survey-generator/templates/research_bundle_template.json +69 -0
- package/bundled-skills/tdd/SKILL.md +139 -0
- package/bundled-skills/tdd/mocking.md +59 -0
- package/bundled-skills/tdd/refactoring.md +10 -0
- package/bundled-skills/tdd/tests.md +61 -0
- package/bundled-skills/teach/GLOSSARY-FORMAT.md +35 -0
- package/bundled-skills/teach/LEARNING-RECORD-FORMAT.md +46 -0
- package/bundled-skills/teach/MISSION-FORMAT.md +31 -0
- package/bundled-skills/teach/RESOURCES-FORMAT.md +32 -0
- package/bundled-skills/teach/SKILL.md +169 -0
- package/bundled-skills/to-issues/SKILL.md +115 -0
- package/bundled-skills/to-prd/SKILL.md +104 -0
- package/bundled-skills/tools-page-seo-optimizer/SKILL.md +616 -0
- package/bundled-skills/triage/AGENT-BRIEF.md +207 -0
- package/bundled-skills/triage/OUT-OF-SCOPE.md +105 -0
- package/bundled-skills/triage/SKILL.md +143 -0
- package/bundled-skills/vibecode-production-qa-validator/SKILL.md +371 -141
- package/bundled-skills/wiki-builder/SKILL.md +157 -0
- package/bundled-skills/wiki-builder/agents/openai.yaml +5 -0
- package/bundled-skills/wiki-builder/references/wiki-flavors.md +98 -0
- package/bundled-skills/wiki-builder/scripts/init_wiki.sh +105 -0
- package/bundled-skills/wiki-builder/templates/index.md +20 -0
- package/bundled-skills/wiki-builder/templates/maintenance-log.md +7 -0
- package/bundled-skills/wiki-builder/templates/prompts/compile-concept-page.md +12 -0
- package/bundled-skills/wiki-builder/templates/prompts/compile-index.md +11 -0
- package/bundled-skills/wiki-builder/templates/prompts/compile-source-page.md +12 -0
- package/bundled-skills/wiki-builder/templates/prompts/lint-wiki.md +10 -0
- package/bundled-skills/wiki-builder/templates/prompts/query-and-file.md +11 -0
- package/bundled-skills/wiki-builder/templates/sources.md +9 -0
- package/bundled-skills/wiki-builder/templates/wiki.config.md +53 -0
- package/bundled-skills/writing-great-skills/GLOSSARY.md +181 -0
- package/bundled-skills/writing-great-skills/SKILL.md +111 -0
- package/bundled-skills/yao-meta-skill/SKILL.md +86 -0
- package/bundled-skills/yao-meta-skill/agents/interface.yaml +26 -0
- package/bundled-skills/yao-meta-skill/manifest.json +24 -0
- package/bundled-skills/yao-meta-skill/references/artifact-design-doctrine.md +49 -0
- package/bundled-skills/yao-meta-skill/references/authoring-discipline.md +78 -0
- package/bundled-skills/yao-meta-skill/references/autonomous-adaptation.md +65 -0
- package/bundled-skills/yao-meta-skill/references/distribution-registry-method.md +60 -0
- package/bundled-skills/yao-meta-skill/references/eval-playbook.md +69 -0
- package/bundled-skills/yao-meta-skill/references/gate-selection.md +68 -0
- package/bundled-skills/yao-meta-skill/references/governance.md +134 -0
- package/bundled-skills/yao-meta-skill/references/human-review-template.md +54 -0
- package/bundled-skills/yao-meta-skill/references/intent-dialogue.md +138 -0
- package/bundled-skills/yao-meta-skill/references/iteration-philosophy.md +30 -0
- package/bundled-skills/yao-meta-skill/references/non-skill-decision-tree.md +39 -0
- package/bundled-skills/yao-meta-skill/references/operating-modes.md +107 -0
- package/bundled-skills/yao-meta-skill/references/output-eval-method.md +113 -0
- package/bundled-skills/yao-meta-skill/references/output-quality-risk.md +41 -0
- package/bundled-skills/yao-meta-skill/references/output-visual-quality.md +53 -0
- package/bundled-skills/yao-meta-skill/references/packaging-contracts.md +70 -0
- package/bundled-skills/yao-meta-skill/references/pattern-extraction-doctrine.md +76 -0
- package/bundled-skills/yao-meta-skill/references/platform-capability-matrix.md +49 -0
- package/bundled-skills/yao-meta-skill/references/prompt-engineering-doctrine.md +76 -0
- package/bundled-skills/yao-meta-skill/references/qa-ladder.md +57 -0
- package/bundled-skills/yao-meta-skill/references/reference-scan.md +126 -0
- package/bundled-skills/yao-meta-skill/references/regression-cause-taxonomy.md +80 -0
- package/bundled-skills/yao-meta-skill/references/resource-boundaries.md +120 -0
- package/bundled-skills/yao-meta-skill/references/review-studio-method.md +87 -0
- package/bundled-skills/yao-meta-skill/references/review-waiver-method.md +76 -0
- package/bundled-skills/yao-meta-skill/references/runtime-conformance-method.md +21 -0
- package/bundled-skills/yao-meta-skill/references/skill-archetypes.md +86 -0
- package/bundled-skills/yao-meta-skill/references/skill-atlas-method.md +35 -0
- package/bundled-skills/yao-meta-skill/references/skill-engineering-method.md +210 -0
- package/bundled-skills/yao-meta-skill/references/skill-ir-method.md +41 -0
- package/bundled-skills/yao-meta-skill/references/skillops-decision-policy.md +53 -0
- package/bundled-skills/yao-meta-skill/references/systems-thinking-doctrine.md +75 -0
- package/bundled-skills/yao-meta-skill/references/telemetry-drift-method.md +182 -0
- package/bundled-skills/yao-meta-skill/references/trust-security-method.md +79 -0
- package/bundled-skills/yao-meta-skill/references/user-memory-policy.md +35 -0
- package/bundled-skills/youtube-notetaker/SKILL.md +209 -0
- package/bundled-skills/youtube-notetaker/reference/artifact.html +269 -0
- package/bundled-skills/youtube-notetaker/scripts/contact_sheet.py +53 -0
- package/bundled-skills/youtube-notetaker/scripts/detect_slides.sh +19 -0
- package/bundled-skills/youtube-notetaker/scripts/download.sh +24 -0
- package/bundled-skills/youtube-notetaker/scripts/extract_slides.py +43 -0
- package/bundled-skills/youtube-notetaker/scripts/serve.py +222 -0
- package/bundled-skills/youtube-notetaker/scripts/setup.sh +27 -0
- package/bundled-skills/youtube-notetaker/scripts/verify.sh +31 -0
- package/bundled-skills/youtube-notetaker/scripts/vtt_to_transcript.py +59 -0
- package/bundled-skills/youtube-notetaker/scripts/write_library_item.py +69 -0
- package/package.json +1 -1
- package/skills_index.json +2013 -330
- package/bundled-skills/ai-md/SKILL.md +0 -523
- package/bundled-skills/atlas-contract/SKILL.md +0 -650
- package/bundled-skills/busybox-on-windows/SKILL.md +0 -40
- package/bundled-skills/monte-carlo-prevent/SKILL.md +0 -257
- package/bundled-skills/monte-carlo-prevent/references/TROUBLESHOOTING.md +0 -23
- package/bundled-skills/monte-carlo-prevent/references/parameters.md +0 -32
- package/bundled-skills/monte-carlo-prevent/references/workflows.md +0 -478
- package/bundled-skills/monte-carlo-push-ingestion/SKILL.md +0 -372
- package/bundled-skills/monte-carlo-push-ingestion/references/anomaly-detection.md +0 -87
- package/bundled-skills/monte-carlo-push-ingestion/references/custom-lineage.md +0 -203
- package/bundled-skills/monte-carlo-push-ingestion/references/direct-http-api.md +0 -207
- package/bundled-skills/monte-carlo-push-ingestion/references/prerequisites.md +0 -150
- package/bundled-skills/monte-carlo-push-ingestion/references/push-lineage.md +0 -160
- package/bundled-skills/monte-carlo-push-ingestion/references/push-metadata.md +0 -158
- package/bundled-skills/monte-carlo-push-ingestion/references/push-query-logs.md +0 -219
- package/bundled-skills/monte-carlo-push-ingestion/references/validation.md +0 -257
- package/bundled-skills/monte-carlo-push-ingestion/scripts/sample_verify.py +0 -357
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_lineage.py +0 -70
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_metadata.py +0 -65
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_and_push_query_logs.py +0 -70
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_lineage.py +0 -214
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_metadata.py +0 -160
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/collect_query_logs.py +0 -164
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_lineage.py +0 -198
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_metadata.py +0 -193
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery/push_query_logs.py +0 -207
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_and_push_metadata.py +0 -71
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_and_push_query_logs.py +0 -64
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_metadata.py +0 -253
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/collect_query_logs.py +0 -149
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/push_metadata.py +0 -190
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/bigquery-iceberg/push_query_logs.py +0 -208
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_lineage.py +0 -83
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_metadata.py +0 -77
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_and_push_query_logs.py +0 -83
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_lineage.py +0 -240
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_metadata.py +0 -212
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/collect_query_logs.py +0 -204
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_lineage.py +0 -192
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_metadata.py +0 -178
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/databricks/push_query_logs.py +0 -200
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_lineage.py +0 -119
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_metadata.py +0 -119
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_and_push_query_logs.py +0 -117
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_lineage.py +0 -265
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_metadata.py +0 -313
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/collect_query_logs.py +0 -284
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_lineage.py +0 -309
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_metadata.py +0 -245
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/hive/push_query_logs.py +0 -255
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_lineage.py +0 -78
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_metadata.py +0 -80
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_and_push_query_logs.py +0 -88
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_lineage.py +0 -235
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_metadata.py +0 -219
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/collect_query_logs.py +0 -239
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_lineage.py +0 -178
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_metadata.py +0 -178
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/redshift/push_query_logs.py +0 -196
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_lineage.py +0 -154
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_metadata.py +0 -137
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_and_push_query_logs.py +0 -137
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_lineage.py +0 -349
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_metadata.py +0 -329
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/collect_query_logs.py +0 -254
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_lineage.py +0 -307
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_metadata.py +0 -228
- package/bundled-skills/monte-carlo-push-ingestion/scripts/templates/snowflake/push_query_logs.py +0 -248
- package/bundled-skills/monte-carlo-push-ingestion/scripts/test_template_sdk_usage.py +0 -340
- package/bundled-skills/skill-optimizer/SKILL.md +0 -271
- package/bundled-skills/using-superpowers/SKILL.md +0 -98
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spatial-computing-ui
|
|
3
|
+
description: Web and App implementation guide for Spatial Computing UI. Trigger when user wants floating elements, environmental awareness, and Apple Vision Pro style.
|
|
4
|
+
date_added: "2026-06-17"
|
|
5
|
+
risk: safe
|
|
6
|
+
source: self
|
|
7
|
+
source_type: self
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Spatial Computing UI
|
|
11
|
+
|
|
12
|
+
> "A step beyond Spatial Design. Fully 3D windows floating in augmented reality."
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
Use this sub-style when the user's request matches the aesthetic described above. This is a child reference of the `design-it` skill and is not meant to be triggered directly.
|
|
17
|
+
|
|
18
|
+
## Core Principles
|
|
19
|
+
1. **Z-Space Hierarchy**: Not just drop shadows, but actual 3D distance. Modals float 10px *in front of* the main window.
|
|
20
|
+
2. **Gaze-Based Interaction Cues**: Elements highlight vividly when hovered, anticipating eye-tracking or precise pointer control.
|
|
21
|
+
3. **Glass and Light**: Windows are thick sheets of frosted glass that bend light and cast soft shadows onto the physical environment.
|
|
22
|
+
|
|
23
|
+
## Visual DNA
|
|
24
|
+
- **Colors**: Relies entirely on the background environment. Uses purely translucent whites (`rgba(255,255,255,0.x)`) and blacks.
|
|
25
|
+
- **Typography**: `SF Pro`. Heavy use of varied font weights (Regular, Semibold, Bold) to create hierarchy.
|
|
26
|
+
- **Shapes**: High border radii (`24px`-`32px`). Everything is a rounded rectangle or a perfect circle.
|
|
27
|
+
|
|
28
|
+
## Web Implementation
|
|
29
|
+
- Best emulated using CSS 3D transforms to simulate the user's perspective.
|
|
30
|
+
- **CSS Example**:
|
|
31
|
+
```css
|
|
32
|
+
body {
|
|
33
|
+
/* Simulate the physical room */
|
|
34
|
+
background: url('living-room.jpg') center/cover;
|
|
35
|
+
perspective: 1200px;
|
|
36
|
+
display: flex;
|
|
37
|
+
justify-content: center;
|
|
38
|
+
align-items: center;
|
|
39
|
+
height: 100vh;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.spatial-window {
|
|
43
|
+
width: 800px;
|
|
44
|
+
height: 600px;
|
|
45
|
+
border-radius: 32px;
|
|
46
|
+
|
|
47
|
+
/* The Glass Material */
|
|
48
|
+
background: rgba(255, 255, 255, 0.15);
|
|
49
|
+
backdrop-filter: blur(50px) saturate(200%);
|
|
50
|
+
-webkit-backdrop-filter: blur(50px) saturate(200%);
|
|
51
|
+
|
|
52
|
+
/* Specular Highlights */
|
|
53
|
+
border: 1px solid rgba(255, 255, 255, 0.4);
|
|
54
|
+
box-shadow:
|
|
55
|
+
inset 0 1px 2px rgba(255, 255, 255, 0.8),
|
|
56
|
+
0 30px 60px rgba(0, 0, 0, 0.3);
|
|
57
|
+
|
|
58
|
+
/* 3D Positioning */
|
|
59
|
+
transform: translateZ(-100px);
|
|
60
|
+
transform-style: preserve-3d;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.spatial-modal {
|
|
64
|
+
/* Floating in front of the main window */
|
|
65
|
+
position: absolute;
|
|
66
|
+
top: 50%; left: 50%;
|
|
67
|
+
transform: translate(-50%, -50%) translateZ(50px);
|
|
68
|
+
|
|
69
|
+
background: rgba(255, 255, 255, 0.6); /* More opaque */
|
|
70
|
+
backdrop-filter: blur(30px);
|
|
71
|
+
border-radius: 24px;
|
|
72
|
+
padding: 30px;
|
|
73
|
+
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.2);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.spatial-btn {
|
|
77
|
+
/* Gaze/Hover interaction */
|
|
78
|
+
background: rgba(0,0,0,0.05);
|
|
79
|
+
transition: all 0.2s cubic-bezier(0.2, 0.8, 0.2, 1);
|
|
80
|
+
}
|
|
81
|
+
.spatial-btn:hover {
|
|
82
|
+
background: rgba(255,255,255,0.4);
|
|
83
|
+
transform: translateZ(10px) scale(1.05);
|
|
84
|
+
box-shadow: 0 10px 20px rgba(0,0,0,0.1);
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## App Implementation
|
|
89
|
+
|
|
90
|
+
### SwiftUI (visionOS Native / iOS emulation)
|
|
91
|
+
```swift
|
|
92
|
+
struct SpatialComputingView: View {
|
|
93
|
+
var body: some View {
|
|
94
|
+
ZStack {
|
|
95
|
+
// Simulated room environment
|
|
96
|
+
Image("living-room")
|
|
97
|
+
.resizable()
|
|
98
|
+
.aspectRatio(contentMode: .fill)
|
|
99
|
+
.ignoresSafeArea()
|
|
100
|
+
|
|
101
|
+
// Spatial Window
|
|
102
|
+
VStack(spacing: 24) {
|
|
103
|
+
Text("Spatial Window")
|
|
104
|
+
.font(.title).fontWeight(.bold)
|
|
105
|
+
.foregroundColor(.white)
|
|
106
|
+
|
|
107
|
+
// Gaze-reactive button
|
|
108
|
+
Button(action: {}) {
|
|
109
|
+
Text("Focus Me")
|
|
110
|
+
.fontWeight(.semibold)
|
|
111
|
+
.foregroundColor(.white)
|
|
112
|
+
.padding(.horizontal, 32)
|
|
113
|
+
.padding(.vertical, 16)
|
|
114
|
+
// .hoverEffect() is magic on visionOS/iPadOS
|
|
115
|
+
// .hoverEffect(.highlight)
|
|
116
|
+
}
|
|
117
|
+
.background(Color.black.opacity(0.2))
|
|
118
|
+
.clipShape(Capsule())
|
|
119
|
+
}
|
|
120
|
+
.padding(60)
|
|
121
|
+
// The magic glass material
|
|
122
|
+
.background(.ultraThinMaterial)
|
|
123
|
+
.cornerRadius(32)
|
|
124
|
+
// Specular edge highlight
|
|
125
|
+
.overlay(
|
|
126
|
+
RoundedRectangle(cornerRadius: 32)
|
|
127
|
+
.stroke(Color.white.opacity(0.4), lineWidth: 1)
|
|
128
|
+
)
|
|
129
|
+
// Environmental shadow
|
|
130
|
+
.shadow(color: .black.opacity(0.3), radius: 40, y: 30)
|
|
131
|
+
|
|
132
|
+
// Z-Space Modal simulation (if on iOS)
|
|
133
|
+
// On visionOS, this would be a separate window volume
|
|
134
|
+
Text("Floating Modal")
|
|
135
|
+
.foregroundColor(.white)
|
|
136
|
+
.padding(30)
|
|
137
|
+
.background(.thinMaterial)
|
|
138
|
+
.cornerRadius(24)
|
|
139
|
+
.shadow(color: .black.opacity(0.4), radius: 30, y: 20)
|
|
140
|
+
.offset(x: 100, y: 100)
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
- Use `.ultraThinMaterial` for the base windows and `.thinMaterial` for floating popovers so they feel more opaque as they get closer to the eye.
|
|
146
|
+
- Use `.hoverEffect()` extensively if targeting iPadOS or visionOS.
|
|
147
|
+
|
|
148
|
+
### Flutter
|
|
149
|
+
```dart
|
|
150
|
+
import 'dart:ui';
|
|
151
|
+
|
|
152
|
+
class SpatialComputingScreen extends StatelessWidget {
|
|
153
|
+
@override
|
|
154
|
+
Widget build(BuildContext context) {
|
|
155
|
+
return Scaffold(
|
|
156
|
+
body: Stack(
|
|
157
|
+
fit: StackFit.expand,
|
|
158
|
+
children: [
|
|
159
|
+
// Simulated Environment
|
|
160
|
+
Image.asset('assets/living-room.jpg', fit: BoxFit.cover),
|
|
161
|
+
|
|
162
|
+
Center(
|
|
163
|
+
child: ClipRRect(
|
|
164
|
+
borderRadius: BorderRadius.circular(32),
|
|
165
|
+
child: BackdropFilter(
|
|
166
|
+
filter: ImageFilter.blur(sigmaX: 40.0, sigmaY: 40.0), // Heavy blur
|
|
167
|
+
child: Container(
|
|
168
|
+
width: 600, height: 400,
|
|
169
|
+
decoration: BoxDecoration(
|
|
170
|
+
color: Colors.white.withOpacity(0.15), // Glass tint
|
|
171
|
+
borderRadius: BorderRadius.circular(32),
|
|
172
|
+
border: Border.all(color: Colors.white.withOpacity(0.4), width: 1), // Specular highlight
|
|
173
|
+
// Note: BoxShadow won't render under BackdropFilter nicely unless wrapped in a separate PhysicalModel
|
|
174
|
+
),
|
|
175
|
+
child: Center(
|
|
176
|
+
child: Column(
|
|
177
|
+
mainAxisAlignment: MainAxisAlignment.center,
|
|
178
|
+
children: [
|
|
179
|
+
const Text('Spatial Window', style: TextStyle(color: Colors.white, fontSize: 32, fontWeight: FontWeight.bold)),
|
|
180
|
+
const SizedBox(height: 32),
|
|
181
|
+
// Simulated Gaze Button
|
|
182
|
+
InkWell(
|
|
183
|
+
onTap: () {},
|
|
184
|
+
borderRadius: BorderRadius.circular(50),
|
|
185
|
+
hoverColor: Colors.white.withOpacity(0.4), // Reacts to mouse/gaze
|
|
186
|
+
child: Container(
|
|
187
|
+
padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 16),
|
|
188
|
+
decoration: BoxDecoration(color: Colors.black.withOpacity(0.2), borderRadius: BorderRadius.circular(50)),
|
|
189
|
+
child: const Text('Focus Me', style: TextStyle(color: Colors.white, fontSize: 18)),
|
|
190
|
+
),
|
|
191
|
+
)
|
|
192
|
+
],
|
|
193
|
+
),
|
|
194
|
+
),
|
|
195
|
+
),
|
|
196
|
+
),
|
|
197
|
+
),
|
|
198
|
+
),
|
|
199
|
+
],
|
|
200
|
+
),
|
|
201
|
+
);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
```
|
|
205
|
+
- You must wrap `BackdropFilter` inside a `ClipRRect` to give the blurred glass rounded corners.
|
|
206
|
+
- `hoverColor` on `InkWell` simulates the gaze-highlighting.
|
|
207
|
+
|
|
208
|
+
### React Native
|
|
209
|
+
```jsx
|
|
210
|
+
// REQUIRES: @react-native-community/blur
|
|
211
|
+
import { BlurView } from '@react-native-community/blur';
|
|
212
|
+
|
|
213
|
+
const SpatialComputingScreen = () => {
|
|
214
|
+
return (
|
|
215
|
+
<ImageBackground source={{uri: 'room_bg'}} style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
|
|
216
|
+
|
|
217
|
+
{/* Spatial Window */}
|
|
218
|
+
<View style={{
|
|
219
|
+
width: '90%', height: 400,
|
|
220
|
+
shadowColor: '#000', shadowOffset: { width: 0, height: 30 },
|
|
221
|
+
shadowOpacity: 0.3, shadowRadius: 40, elevation: 20
|
|
222
|
+
}}>
|
|
223
|
+
<BlurView
|
|
224
|
+
style={{ flex: 1, borderRadius: 32, borderWidth: 1, borderColor: 'rgba(255,255,255,0.4)', padding: 40, justifyContent: 'center', alignItems: 'center' }}
|
|
225
|
+
blurType="light"
|
|
226
|
+
blurAmount={30}
|
|
227
|
+
reducedTransparencyFallbackColor="gray"
|
|
228
|
+
>
|
|
229
|
+
<Text style={{ color: '#FFF', fontSize: 32, fontWeight: 'bold', marginBottom: 32 }}>
|
|
230
|
+
Spatial Window
|
|
231
|
+
</Text>
|
|
232
|
+
|
|
233
|
+
{/* Touchable simulating Gaze */}
|
|
234
|
+
<TouchableOpacity style={{
|
|
235
|
+
backgroundColor: 'rgba(0,0,0,0.2)', paddingVertical: 16, paddingHorizontal: 32, borderRadius: 50
|
|
236
|
+
}}>
|
|
237
|
+
<Text style={{ color: '#FFF', fontSize: 18, fontWeight: '600' }}>Focus Me</Text>
|
|
238
|
+
</TouchableOpacity>
|
|
239
|
+
</BlurView>
|
|
240
|
+
</View>
|
|
241
|
+
|
|
242
|
+
</ImageBackground>
|
|
243
|
+
);
|
|
244
|
+
};
|
|
245
|
+
```
|
|
246
|
+
- React Native's core cannot do background blur. You *must* install `@react-native-community/blur`.
|
|
247
|
+
- Apply shadows to a wrapper `View`, and put the `BlurView` inside it with `borderRadius` and `borderWidth`.
|
|
248
|
+
|
|
249
|
+
### Jetpack Compose
|
|
250
|
+
```kotlin
|
|
251
|
+
@Composable
|
|
252
|
+
fun SpatialComputingScreen() {
|
|
253
|
+
Box(modifier = Modifier.fillMaxSize()) {
|
|
254
|
+
// Environment
|
|
255
|
+
Image(painterResource(R.drawable.living_room), contentDescription = null, contentScale = ContentScale.Crop, modifier = Modifier.fillMaxSize())
|
|
256
|
+
|
|
257
|
+
// Spatial Window
|
|
258
|
+
Box(
|
|
259
|
+
modifier = Modifier
|
|
260
|
+
.align(Alignment.Center)
|
|
261
|
+
.size(600.dp, 400.dp)
|
|
262
|
+
// Note: Native Android background blur requires Android 12+ (RenderEffect)
|
|
263
|
+
.graphicsLayer {
|
|
264
|
+
renderEffect = RenderEffect.createBlurEffect(40f, 40f, Shader.TileMode.DECAL).asComposeRenderEffect()
|
|
265
|
+
clip = true
|
|
266
|
+
shape = RoundedCornerShape(32.dp)
|
|
267
|
+
}
|
|
268
|
+
.background(Color.White.copy(alpha = 0.15f))
|
|
269
|
+
.border(1.dp, Color.White.copy(alpha = 0.4f), RoundedCornerShape(32.dp))
|
|
270
|
+
.padding(40.dp),
|
|
271
|
+
contentAlignment = Alignment.Center
|
|
272
|
+
) {
|
|
273
|
+
Column(horizontalAlignment = Alignment.CenterHorizontally) {
|
|
274
|
+
Text("Spatial Window", color = Color.White, fontSize = 32.sp, fontWeight = FontWeight.Bold)
|
|
275
|
+
Spacer(Modifier.height(32.dp))
|
|
276
|
+
|
|
277
|
+
// Button
|
|
278
|
+
Box(
|
|
279
|
+
modifier = Modifier
|
|
280
|
+
.background(Color.Black.copy(alpha = 0.2f), CircleShape)
|
|
281
|
+
.clickable { }
|
|
282
|
+
.padding(horizontal = 32.dp, vertical = 16.dp)
|
|
283
|
+
) {
|
|
284
|
+
Text("Focus Me", color = Color.White, fontSize = 18.sp, fontWeight = FontWeight.SemiBold)
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
- On Android 12+, use `RenderEffect.createBlurEffect` applied to the `graphicsLayer` to blur the UI *behind* the compose element.
|
|
292
|
+
- The `border` modifier applies the bright specular rim-light crucial to glass effects.
|
|
293
|
+
|
|
294
|
+
## Do's and Don'ts
|
|
295
|
+
- **DO**: Create a distinct visual pop (size increase and shadow depth increase) on hover/focus to simulate the gaze-tracking interaction of Spatial Computing.
|
|
296
|
+
- **DON'T**: Use flat, opaque colors for the main windows. They must be glass.
|
|
297
|
+
|
|
298
|
+
## Limitations
|
|
299
|
+
- This is a styling reference and does not replace environment-specific validation, accessibility testing, or expert review.
|
|
300
|
+
- Ensure appropriate contrast ratios and responsive behaviors are verified separately.
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: spatial-design
|
|
3
|
+
description: Web and App implementation guide for Spatial Design. Trigger when user wants environment-aware layouts, Apple Vision Pro inspiration, and mixed reality aesthetics.
|
|
4
|
+
date_added: "2026-06-17"
|
|
5
|
+
risk: safe
|
|
6
|
+
source: self
|
|
7
|
+
source_type: self
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Spatial Design
|
|
11
|
+
|
|
12
|
+
> "UI that belongs in the room with you. Transparent, glass-like panels that react to the lighting of the physical space."
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## When to Use
|
|
16
|
+
Use this sub-style when the user's request matches the aesthetic described above. This is a child reference of the `design-it` skill and is not meant to be triggered directly.
|
|
17
|
+
|
|
18
|
+
## Core Principles
|
|
19
|
+
1. **Environmental Transparency**: The UI acts like a glass pane. It is deeply reliant on background blur, but specifically aims to let the environment (or a simulated environment image) dictate the mood.
|
|
20
|
+
2. **Dynamic Lighting**: Elements respond to cursor position as if a flashlight is shining on them.
|
|
21
|
+
3. **Subtle Volume**: Not flat, but not extremely 3D. Elements have a very thin rim of light around the edge (specular highlight).
|
|
22
|
+
|
|
23
|
+
## Visual DNA
|
|
24
|
+
- **Colors**: Almost exclusively uses `rgba()` white or black. The actual color comes entirely from the background environment.
|
|
25
|
+
- **Typography**: Extremely sharp, high legibility. Often uses varying font weights to establish hierarchy without relying on color. Apple's `SF Pro` is the gold standard here.
|
|
26
|
+
- **Icons**: Outlined, high-legibility glyphs.
|
|
27
|
+
|
|
28
|
+
## Web Implementation
|
|
29
|
+
- **CSS Example**:
|
|
30
|
+
```css
|
|
31
|
+
body {
|
|
32
|
+
/* Needs a complex background to look right */
|
|
33
|
+
background: url('room-environment.jpg') cover;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.spatial-panel {
|
|
37
|
+
/* The core material */
|
|
38
|
+
background: rgba(255, 255, 255, 0.2); /* Very sheer */
|
|
39
|
+
backdrop-filter: blur(40px) saturate(150%);
|
|
40
|
+
-webkit-backdrop-filter: blur(40px) saturate(150%);
|
|
41
|
+
|
|
42
|
+
border-radius: 32px;
|
|
43
|
+
padding: 40px;
|
|
44
|
+
|
|
45
|
+
/* The specular rim light */
|
|
46
|
+
box-shadow:
|
|
47
|
+
inset 0 1px 1px rgba(255,255,255,0.6),
|
|
48
|
+
inset 0 0 1px 1px rgba(255,255,255,0.2),
|
|
49
|
+
0 24px 48px rgba(0,0,0,0.1);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.spatial-btn {
|
|
53
|
+
background: rgba(0,0,0,0.1);
|
|
54
|
+
color: white;
|
|
55
|
+
border-radius: 20px;
|
|
56
|
+
padding: 12px 24px;
|
|
57
|
+
backdrop-filter: blur(10px);
|
|
58
|
+
transition: all 0.2s;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.spatial-btn:hover {
|
|
62
|
+
background: rgba(255,255,255,0.2);
|
|
63
|
+
/* Highlight effect */
|
|
64
|
+
box-shadow: inset 0 0 20px rgba(255,255,255,0.4);
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## App Implementation
|
|
69
|
+
|
|
70
|
+
### SwiftUI
|
|
71
|
+
```swift
|
|
72
|
+
struct SpatialDesignView: View {
|
|
73
|
+
var body: some View {
|
|
74
|
+
ZStack {
|
|
75
|
+
// Environment background
|
|
76
|
+
Image("room-environment")
|
|
77
|
+
.resizable()
|
|
78
|
+
.aspectRatio(contentMode: .fill)
|
|
79
|
+
.ignoresSafeArea()
|
|
80
|
+
|
|
81
|
+
// Spatial Panel
|
|
82
|
+
VStack(spacing: 24) {
|
|
83
|
+
Text("Environmental UI")
|
|
84
|
+
.font(.title).fontWeight(.bold)
|
|
85
|
+
.foregroundColor(.white)
|
|
86
|
+
|
|
87
|
+
Button(action: {}) {
|
|
88
|
+
Text("Interact")
|
|
89
|
+
.foregroundColor(.white)
|
|
90
|
+
.padding(.horizontal, 32)
|
|
91
|
+
.padding(.vertical, 16)
|
|
92
|
+
}
|
|
93
|
+
.background(.ultraThinMaterial)
|
|
94
|
+
.clipShape(Capsule())
|
|
95
|
+
.overlay(Capsule().stroke(Color.white.opacity(0.3), lineWidth: 1))
|
|
96
|
+
}
|
|
97
|
+
.padding(40)
|
|
98
|
+
.background(.ultraThinMaterial) // The core spatial material
|
|
99
|
+
.cornerRadius(32)
|
|
100
|
+
// Specular rim light
|
|
101
|
+
.overlay(
|
|
102
|
+
RoundedRectangle(cornerRadius: 32)
|
|
103
|
+
.stroke(
|
|
104
|
+
LinearGradient(
|
|
105
|
+
colors: [.white.opacity(0.6), .white.opacity(0.1)],
|
|
106
|
+
startPoint: .topLeading, endPoint: .bottomTrailing
|
|
107
|
+
),
|
|
108
|
+
lineWidth: 1
|
|
109
|
+
)
|
|
110
|
+
)
|
|
111
|
+
// Very soft, diffuse shadow
|
|
112
|
+
.shadow(color: .black.opacity(0.1), radius: 40, y: 20)
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
- `.background(.ultraThinMaterial)` is exactly what Apple uses for this aesthetic.
|
|
118
|
+
- The specular highlight is critical. Use an `.overlay` with a `LinearGradient` stroke to simulate a light source hitting the top-left edge of the glass.
|
|
119
|
+
|
|
120
|
+
### Flutter
|
|
121
|
+
```dart
|
|
122
|
+
import 'dart:ui';
|
|
123
|
+
|
|
124
|
+
class SpatialDesignScreen extends StatelessWidget {
|
|
125
|
+
@override
|
|
126
|
+
Widget build(BuildContext context) {
|
|
127
|
+
return Scaffold(
|
|
128
|
+
body: Stack(
|
|
129
|
+
fit: StackFit.expand,
|
|
130
|
+
children: [
|
|
131
|
+
Image.asset('assets/room-environment.jpg', fit: BoxFit.cover),
|
|
132
|
+
|
|
133
|
+
Center(
|
|
134
|
+
child: ClipRRect(
|
|
135
|
+
borderRadius: BorderRadius.circular(32),
|
|
136
|
+
child: BackdropFilter(
|
|
137
|
+
filter: ImageFilter.blur(sigmaX: 30.0, sigmaY: 30.0),
|
|
138
|
+
child: Container(
|
|
139
|
+
width: 350,
|
|
140
|
+
padding: const EdgeInsets.all(40),
|
|
141
|
+
decoration: BoxDecoration(
|
|
142
|
+
color: Colors.white.withOpacity(0.1),
|
|
143
|
+
borderRadius: BorderRadius.circular(32),
|
|
144
|
+
// Specular rim light
|
|
145
|
+
border: Border.all(color: Colors.white.withOpacity(0.4), width: 1),
|
|
146
|
+
),
|
|
147
|
+
child: Column(
|
|
148
|
+
mainAxisSize: MainAxisSize.min,
|
|
149
|
+
children: [
|
|
150
|
+
const Text('Environmental UI', style: TextStyle(color: Colors.white, fontSize: 28, fontWeight: FontWeight.bold)),
|
|
151
|
+
const SizedBox(height: 32),
|
|
152
|
+
|
|
153
|
+
// Spatial Button
|
|
154
|
+
ClipRRect(
|
|
155
|
+
borderRadius: BorderRadius.circular(50),
|
|
156
|
+
child: BackdropFilter(
|
|
157
|
+
filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0),
|
|
158
|
+
child: Container(
|
|
159
|
+
padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 16),
|
|
160
|
+
decoration: BoxDecoration(
|
|
161
|
+
color: Colors.black.withOpacity(0.1),
|
|
162
|
+
border: Border.all(color: Colors.white.withOpacity(0.2)),
|
|
163
|
+
borderRadius: BorderRadius.circular(50),
|
|
164
|
+
),
|
|
165
|
+
child: const Text('Interact', style: TextStyle(color: Colors.white)),
|
|
166
|
+
),
|
|
167
|
+
),
|
|
168
|
+
)
|
|
169
|
+
],
|
|
170
|
+
),
|
|
171
|
+
),
|
|
172
|
+
),
|
|
173
|
+
),
|
|
174
|
+
),
|
|
175
|
+
],
|
|
176
|
+
),
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
- `BackdropFilter` is required to blur the background.
|
|
182
|
+
- Notice the button *inside* the panel also has a `BackdropFilter`. This creates nested glass, which is a hallmark of Spatial Design.
|
|
183
|
+
|
|
184
|
+
### React Native
|
|
185
|
+
```jsx
|
|
186
|
+
// REQUIRES: @react-native-community/blur
|
|
187
|
+
import { BlurView } from '@react-native-community/blur';
|
|
188
|
+
|
|
189
|
+
const SpatialDesignScreen = () => {
|
|
190
|
+
return (
|
|
191
|
+
<ImageBackground source={{uri: 'room_bg'}} style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
|
|
192
|
+
|
|
193
|
+
<View style={{ width: '85%', shadowColor: '#000', shadowOffset: { width: 0, height: 20 }, shadowOpacity: 0.1, shadowRadius: 40, elevation: 10 }}>
|
|
194
|
+
<BlurView
|
|
195
|
+
style={{ borderRadius: 32, borderWidth: 1, borderColor: 'rgba(255,255,255,0.4)', padding: 40, alignItems: 'center' }}
|
|
196
|
+
blurType="light"
|
|
197
|
+
blurAmount={20}
|
|
198
|
+
>
|
|
199
|
+
<Text style={{ color: '#FFF', fontSize: 28, fontWeight: 'bold', marginBottom: 32 }}>
|
|
200
|
+
Environmental UI
|
|
201
|
+
</Text>
|
|
202
|
+
|
|
203
|
+
<View style={{ borderRadius: 50, overflow: 'hidden' }}>
|
|
204
|
+
<BlurView blurType="dark" blurAmount={10} style={{ paddingVertical: 16, paddingHorizontal: 32, borderWidth: 1, borderColor: 'rgba(255,255,255,0.2)' }}>
|
|
205
|
+
<Text style={{ color: '#FFF', fontSize: 16 }}>Interact</Text>
|
|
206
|
+
</BlurView>
|
|
207
|
+
</View>
|
|
208
|
+
</BlurView>
|
|
209
|
+
</View>
|
|
210
|
+
|
|
211
|
+
</ImageBackground>
|
|
212
|
+
);
|
|
213
|
+
};
|
|
214
|
+
```
|
|
215
|
+
- `BlurView` from `@react-native-community/blur` is the only way to achieve this.
|
|
216
|
+
- Use `blurType="light"` for the main panel and `blurType="dark"` for the buttons to create contrast between the glass layers.
|
|
217
|
+
|
|
218
|
+
### Jetpack Compose
|
|
219
|
+
```kotlin
|
|
220
|
+
@Composable
|
|
221
|
+
fun SpatialDesignScreen() {
|
|
222
|
+
Box(modifier = Modifier.fillMaxSize()) {
|
|
223
|
+
Image(painterResource(R.drawable.room_environment), null, contentScale = ContentScale.Crop, modifier = Modifier.fillMaxSize())
|
|
224
|
+
|
|
225
|
+
Box(
|
|
226
|
+
modifier = Modifier
|
|
227
|
+
.align(Alignment.Center)
|
|
228
|
+
.width(350.dp)
|
|
229
|
+
// Shadow goes on the outside
|
|
230
|
+
.shadow(20.dp, RoundedCornerShape(32.dp), spotColor = Color.Black.copy(alpha = 0.1f))
|
|
231
|
+
// Android 12+ Blur
|
|
232
|
+
.graphicsLayer {
|
|
233
|
+
renderEffect = RenderEffect.createBlurEffect(30f, 30f, Shader.TileMode.DECAL).asComposeRenderEffect()
|
|
234
|
+
clip = true
|
|
235
|
+
shape = RoundedCornerShape(32.dp)
|
|
236
|
+
}
|
|
237
|
+
.background(Color.White.copy(alpha = 0.1f))
|
|
238
|
+
.border(1.dp, Brush.linearGradient(listOf(Color.White.copy(alpha = 0.6f), Color.Transparent)), RoundedCornerShape(32.dp))
|
|
239
|
+
.padding(40.dp),
|
|
240
|
+
contentAlignment = Alignment.Center
|
|
241
|
+
) {
|
|
242
|
+
Column(horizontalAlignment = Alignment.CenterHorizontally) {
|
|
243
|
+
Text("Environmental UI", color = Color.White, fontSize = 28.sp, fontWeight = FontWeight.Bold)
|
|
244
|
+
Spacer(Modifier.height(32.dp))
|
|
245
|
+
|
|
246
|
+
// Button
|
|
247
|
+
Box(
|
|
248
|
+
modifier = Modifier
|
|
249
|
+
.background(Color.Black.copy(alpha = 0.1f), CircleShape)
|
|
250
|
+
.border(1.dp, Color.White.copy(alpha = 0.2f), CircleShape)
|
|
251
|
+
.padding(horizontal = 32.dp, vertical = 16.dp)
|
|
252
|
+
) {
|
|
253
|
+
Text("Interact", color = Color.White)
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
- The `Brush.linearGradient` applied to the `Modifier.border` perfectly simulates the top-down rim light hitting a thick pane of glass.
|
|
261
|
+
|
|
262
|
+
## Do's and Don'ts
|
|
263
|
+
- **DO**: Crank up the `saturate()` filter on the backdrop blur to make the background colors pop through the glass.
|
|
264
|
+
- **DON'T**: Use dark, opaque drop shadows. The UI should look like glass, which doesn't cast harsh shadows.
|
|
265
|
+
|
|
266
|
+
## Limitations
|
|
267
|
+
- This is a styling reference and does not replace environment-specific validation, accessibility testing, or expert review.
|
|
268
|
+
- Ensure appropriate contrast ratios and responsive behaviors are verified separately.
|