opencode-skills-collection 3.0.51 → 3.1.1
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/README.md +44 -12
- package/bundled-skills/.antigravity-install-manifest.json +84 -1
- package/bundled-skills/android-ui-journey-testing/SKILL.md +191 -0
- package/bundled-skills/ask-matt/SKILL.md +92 -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/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 +194 -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 +1 -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/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/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 +205 -0
- package/bundled-skills/loop-library/agents/openai.yaml +4 -0
- package/bundled-skills/loop-library/references/catalog.md +270 -0
- 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/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 +173 -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/dist/skill-pointer/config-loader.d.ts +14 -0
- package/dist/skill-pointer/config-loader.js +30 -3
- package/dist/skill-pointer/content-scanner.d.ts +38 -0
- package/dist/skill-pointer/content-scanner.js +118 -0
- package/dist/skill-pointer/index.d.ts +7 -2
- package/dist/skill-pointer/index.js +14 -4
- package/dist/skill-pointer/pointer-generator.js +2 -0
- package/dist/skill-pointer/skill-patcher.d.ts +13 -0
- package/dist/skill-pointer/skill-patcher.js +99 -0
- package/package.json +1 -1
- package/skills_index.json +1956 -286
- 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,307 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: aurora-ui
|
|
3
|
+
description: Web and App implementation guide for Aurora UI. Trigger when user wants gradient glows, color blobs, and atmospheric lighting effects.
|
|
4
|
+
date_added: "2026-06-17"
|
|
5
|
+
risk: safe
|
|
6
|
+
source: self
|
|
7
|
+
source_type: self
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Aurora UI
|
|
11
|
+
|
|
12
|
+
> "Ethereal, shifting lights. Like the Northern Lights trapped beneath a pane of frosted glass."
|
|
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. **Blurred Color Orbs**: Large, out-of-focus, highly saturated color blobs floating in the background.
|
|
20
|
+
2. **Glassy Overlays**: Foreground elements are often semi-transparent (glassmorphism) to let the aurora effect shine through.
|
|
21
|
+
3. **Fluid Motion**: The background color orbs should slowly drift, expand, and contract.
|
|
22
|
+
|
|
23
|
+
## Visual DNA
|
|
24
|
+
- **Colors**: Requires dark, deep backgrounds with vibrant, luminous accents. **Midnight Luxury** or **Yacht Club** (modified to dark mode) work well, injecting bright cyan, magenta, or lime green as the glowing orbs.
|
|
25
|
+
- **Typography**: Thin, elegant sans-serifs or sophisticated serif fonts. High contrast white text.
|
|
26
|
+
- **Layout**: Keep foreground UI elements minimal to let the background remain the star.
|
|
27
|
+
|
|
28
|
+
## Web Implementation
|
|
29
|
+
- Best achieved with absolute-positioned, heavily blurred `div`s behind the main content.
|
|
30
|
+
- **CSS Example**:
|
|
31
|
+
```css
|
|
32
|
+
body {
|
|
33
|
+
background-color: #0A0A0A;
|
|
34
|
+
overflow-x: hidden;
|
|
35
|
+
position: relative;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* The Glowing Orb */
|
|
39
|
+
.aurora-blob {
|
|
40
|
+
position: absolute;
|
|
41
|
+
width: 400px;
|
|
42
|
+
height: 400px;
|
|
43
|
+
background: radial-gradient(circle, rgba(181,154,95,0.8) 0%, rgba(181,154,95,0) 70%);
|
|
44
|
+
border-radius: 50%;
|
|
45
|
+
filter: blur(80px);
|
|
46
|
+
z-index: -1;
|
|
47
|
+
animation: float 20s infinite ease-in-out alternate;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.aurora-blob.blue {
|
|
51
|
+
background: radial-gradient(circle, rgba(92,107,115,0.8) 0%, rgba(0,0,0,0) 70%);
|
|
52
|
+
top: 20%;
|
|
53
|
+
left: 60%;
|
|
54
|
+
animation-delay: -5s;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@keyframes float {
|
|
58
|
+
0% { transform: translate(0, 0) scale(1); }
|
|
59
|
+
50% { transform: translate(-50px, 100px) scale(1.2); }
|
|
60
|
+
100% { transform: translate(100px, -50px) scale(0.9); }
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* Foreground content should be glassmorphic */
|
|
64
|
+
.aurora-card {
|
|
65
|
+
background: rgba(255,255,255,0.03);
|
|
66
|
+
backdrop-filter: blur(20px);
|
|
67
|
+
border: 1px solid rgba(255,255,255,0.05);
|
|
68
|
+
border-radius: 24px;
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## App Implementation
|
|
73
|
+
|
|
74
|
+
### SwiftUI
|
|
75
|
+
```swift
|
|
76
|
+
struct AuroraView: View {
|
|
77
|
+
@State private var animate = false
|
|
78
|
+
|
|
79
|
+
var body: some View {
|
|
80
|
+
ZStack {
|
|
81
|
+
// Dark background
|
|
82
|
+
Color.black.ignoresSafeArea()
|
|
83
|
+
|
|
84
|
+
// Animated Orbs
|
|
85
|
+
Circle()
|
|
86
|
+
.fill(Color(red: 0.71, green: 0.60, blue: 0.37)) // #B59A5F
|
|
87
|
+
.blur(radius: 80)
|
|
88
|
+
.frame(width: 300, height: 300)
|
|
89
|
+
.offset(x: animate ? -50 : 50, y: animate ? -100 : 0)
|
|
90
|
+
|
|
91
|
+
Circle()
|
|
92
|
+
.fill(Color(red: 0.36, green: 0.42, blue: 0.45)) // #5C6B73
|
|
93
|
+
.blur(radius: 80)
|
|
94
|
+
.frame(width: 300, height: 300)
|
|
95
|
+
.offset(x: animate ? 100 : -50, y: animate ? 100 : -50)
|
|
96
|
+
|
|
97
|
+
// Glassy Foreground content
|
|
98
|
+
VStack {
|
|
99
|
+
Text("Aurora Interface")
|
|
100
|
+
.font(.largeTitle.bold())
|
|
101
|
+
.foregroundColor(.white)
|
|
102
|
+
}
|
|
103
|
+
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
|
104
|
+
.background(.ultraThinMaterial)
|
|
105
|
+
}
|
|
106
|
+
.onAppear {
|
|
107
|
+
withAnimation(.easeInOut(duration: 10).repeatForever(autoreverses: true)) {
|
|
108
|
+
animate = true
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
- Use `Circle().blur(radius: 80...120)` in a `ZStack` underneath the main content.
|
|
115
|
+
- Animate the `.offset()` with a very long `duration (10-20 seconds)`.
|
|
116
|
+
- Use `.background(.ultraThinMaterial)` on foreground containers to let the colored light bleed through nicely.
|
|
117
|
+
|
|
118
|
+
### Flutter
|
|
119
|
+
```dart
|
|
120
|
+
import 'dart:ui';
|
|
121
|
+
|
|
122
|
+
class AuroraView extends StatefulWidget {
|
|
123
|
+
@override
|
|
124
|
+
State<AuroraView> createState() => _AuroraViewState();
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
class _AuroraViewState extends State<AuroraView> with SingleTickerProviderStateMixin {
|
|
128
|
+
late AnimationController _controller;
|
|
129
|
+
|
|
130
|
+
@override
|
|
131
|
+
void initState() {
|
|
132
|
+
super.initState();
|
|
133
|
+
_controller = AnimationController(vsync: this, duration: const Duration(seconds: 10))..repeat(reverse: true);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
@override
|
|
137
|
+
void dispose() {
|
|
138
|
+
_controller.dispose();
|
|
139
|
+
super.dispose();
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
@override
|
|
143
|
+
Widget build(BuildContext context) {
|
|
144
|
+
return Scaffold(
|
|
145
|
+
backgroundColor: Colors.black,
|
|
146
|
+
body: Stack(
|
|
147
|
+
children: [
|
|
148
|
+
// Animated orb
|
|
149
|
+
AnimatedBuilder(
|
|
150
|
+
animation: _controller,
|
|
151
|
+
builder: (context, child) {
|
|
152
|
+
return Positioned(
|
|
153
|
+
top: 100 + (_controller.value * 100),
|
|
154
|
+
left: -50 + (_controller.value * 100),
|
|
155
|
+
child: Container(
|
|
156
|
+
width: 300,
|
|
157
|
+
height: 300,
|
|
158
|
+
decoration: const BoxDecoration(
|
|
159
|
+
shape: BoxShape.circle,
|
|
160
|
+
color: Color(0xFFB59A5F),
|
|
161
|
+
),
|
|
162
|
+
),
|
|
163
|
+
);
|
|
164
|
+
},
|
|
165
|
+
),
|
|
166
|
+
// Massive blur layer over the orbs
|
|
167
|
+
Positioned.fill(
|
|
168
|
+
child: BackdropFilter(
|
|
169
|
+
filter: ImageFilter.blur(sigmaX: 80, sigmaY: 80),
|
|
170
|
+
child: Container(color: Colors.transparent),
|
|
171
|
+
),
|
|
172
|
+
),
|
|
173
|
+
// Glassy Foreground
|
|
174
|
+
Center(
|
|
175
|
+
child: ClipRRect(
|
|
176
|
+
borderRadius: BorderRadius.circular(24),
|
|
177
|
+
child: BackdropFilter(
|
|
178
|
+
filter: ImageFilter.blur(sigmaX: 16, sigmaY: 16),
|
|
179
|
+
child: Container(
|
|
180
|
+
padding: const EdgeInsets.all(32),
|
|
181
|
+
color: Colors.white.withOpacity(0.05),
|
|
182
|
+
child: const Text('Aurora Interface',
|
|
183
|
+
style: TextStyle(color: Colors.white, fontSize: 24, fontWeight: FontWeight.bold)),
|
|
184
|
+
),
|
|
185
|
+
),
|
|
186
|
+
),
|
|
187
|
+
),
|
|
188
|
+
],
|
|
189
|
+
),
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
- A massive full-screen `BackdropFilter` over moving solid circles is often more performant than blurring each circle individually.
|
|
195
|
+
- Layer a second, weaker `BackdropFilter` for the actual foreground glassmorphism panels.
|
|
196
|
+
|
|
197
|
+
### React Native
|
|
198
|
+
```jsx
|
|
199
|
+
// Requires @react-native-community/blur
|
|
200
|
+
import { BlurView } from '@react-native-community/blur';
|
|
201
|
+
|
|
202
|
+
const AuroraView = () => {
|
|
203
|
+
const anim = useRef(new Animated.Value(0)).current;
|
|
204
|
+
|
|
205
|
+
useEffect(() => {
|
|
206
|
+
Animated.loop(
|
|
207
|
+
Animated.sequence([
|
|
208
|
+
Animated.timing(anim, { toValue: 1, duration: 10000, useNativeDriver: true }),
|
|
209
|
+
Animated.timing(anim, { toValue: 0, duration: 10000, useNativeDriver: true }),
|
|
210
|
+
])
|
|
211
|
+
).start();
|
|
212
|
+
}, []);
|
|
213
|
+
|
|
214
|
+
const translateY = anim.interpolate({ inputRange: [0, 1], outputRange: [0, 100] });
|
|
215
|
+
|
|
216
|
+
return (
|
|
217
|
+
<View style={{ flex: 1, backgroundColor: '#000' }}>
|
|
218
|
+
{/* Orb — note: React Native struggles with massive live blurs,
|
|
219
|
+
so pre-rendered blurred PNGs are highly recommended for production */}
|
|
220
|
+
<Animated.Image
|
|
221
|
+
source={require('./blurred_orb_cyan.png')}
|
|
222
|
+
style={{
|
|
223
|
+
position: 'absolute',
|
|
224
|
+
top: -50, left: -50,
|
|
225
|
+
width: 400, height: 400,
|
|
226
|
+
opacity: 0.8,
|
|
227
|
+
transform: [{ translateY }]
|
|
228
|
+
}}
|
|
229
|
+
/>
|
|
230
|
+
|
|
231
|
+
{/* Glass Foreground */}
|
|
232
|
+
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
|
|
233
|
+
<BlurView blurType="dark" blurAmount={20} style={{ padding: 32, borderRadius: 24 }}>
|
|
234
|
+
<Text style={{ color: '#FFF', fontSize: 24, fontWeight: '700' }}>
|
|
235
|
+
Aurora Interface
|
|
236
|
+
</Text>
|
|
237
|
+
</BlurView>
|
|
238
|
+
</View>
|
|
239
|
+
</View>
|
|
240
|
+
);
|
|
241
|
+
};
|
|
242
|
+
```
|
|
243
|
+
- **Performance Warning**: Do NOT use `BlurView` with huge amounts for moving background orbs on React Native — it will lag terribly, especially on Android.
|
|
244
|
+
- **Best Practice**: Create large, already-blurred PNG images in Figma/Photoshop and animate those using `Animated.Image`.
|
|
245
|
+
|
|
246
|
+
### Jetpack Compose
|
|
247
|
+
```kotlin
|
|
248
|
+
@Composable
|
|
249
|
+
fun AuroraView() {
|
|
250
|
+
val infiniteTransition = rememberInfiniteTransition()
|
|
251
|
+
val offsetY by infiniteTransition.animateFloat(
|
|
252
|
+
initialValue = -50f,
|
|
253
|
+
targetValue = 100f,
|
|
254
|
+
animationSpec = infiniteRepeatable(
|
|
255
|
+
animation = tween(10000, easing = LinearEasing),
|
|
256
|
+
repeatMode = RepeatMode.Reverse
|
|
257
|
+
)
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
Box(modifier = Modifier
|
|
261
|
+
.fillMaxSize()
|
|
262
|
+
.background(Color.Black)) {
|
|
263
|
+
|
|
264
|
+
// Blurred Orb
|
|
265
|
+
Box(
|
|
266
|
+
modifier = Modifier
|
|
267
|
+
.offset(x = (-50).dp, y = offsetY.dp)
|
|
268
|
+
.size(300.dp)
|
|
269
|
+
.blur(80.dp) // API 31+ only!
|
|
270
|
+
.background(Color(0xFFB59A5F), CircleShape)
|
|
271
|
+
)
|
|
272
|
+
|
|
273
|
+
// Pre-API 31 fallback: use a radial gradient instead of blur
|
|
274
|
+
Box(
|
|
275
|
+
modifier = Modifier
|
|
276
|
+
.offset(x = 150.dp, y = (offsetY * -1).dp)
|
|
277
|
+
.size(300.dp)
|
|
278
|
+
.background(
|
|
279
|
+
Brush.radialGradient(
|
|
280
|
+
colors = listOf(Color(0xFF5C6B73).copy(alpha = 0.8f), Color.Transparent)
|
|
281
|
+
)
|
|
282
|
+
)
|
|
283
|
+
)
|
|
284
|
+
|
|
285
|
+
// Glass panel
|
|
286
|
+
Card(
|
|
287
|
+
modifier = Modifier.align(Alignment.Center).padding(32.dp),
|
|
288
|
+
colors = CardDefaults.cardColors(containerColor = Color.White.copy(alpha = 0.05f)),
|
|
289
|
+
shape = RoundedCornerShape(24.dp),
|
|
290
|
+
) {
|
|
291
|
+
Text("Aurora Interface",
|
|
292
|
+
color = Color.White, fontSize = 24.sp, fontWeight = FontWeight.Bold,
|
|
293
|
+
modifier = Modifier.padding(32.dp))
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
```
|
|
298
|
+
- `Modifier.blur()` is only fully supported on Android 12 (API 31+).
|
|
299
|
+
- **Critical Fallback**: For older devices, use `Brush.radialGradient` fading from color to `Color.Transparent` to fake the glowing orb effect without needing expensive blur calculations.
|
|
300
|
+
|
|
301
|
+
## Do's and Don'ts
|
|
302
|
+
- **DO**: Ensure the foreground text remains legible. If a bright orb floats behind white text, the text will vanish. Use glassy panels to guarantee contrast.
|
|
303
|
+
- **DON'T**: Use sharp gradients. Everything in the background must be heavily blurred and diffuse.
|
|
304
|
+
|
|
305
|
+
## Limitations
|
|
306
|
+
- This is a styling reference and does not replace environment-specific validation, accessibility testing, or expert review.
|
|
307
|
+
- Ensure appropriate contrast ratios and responsive behaviors are verified separately.
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: bento-ui
|
|
3
|
+
description: Web and App implementation guide for Bento UI. Trigger when user wants modular grid cards, Apple-like dashboard style, or sections arranged like a bento box.
|
|
4
|
+
date_added: "2026-06-17"
|
|
5
|
+
risk: safe
|
|
6
|
+
source: self
|
|
7
|
+
source_type: self
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Bento UI
|
|
11
|
+
|
|
12
|
+
> "Everything in its right place. A highly structured, modular grid of distinct compartments."
|
|
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. **Strict Grid Structure**: The entire UI is built on a responsive, multi-column grid (usually 3x3, 4x4, or irregular masonry).
|
|
20
|
+
2. **Rounded Compartments**: Every distinct piece of content lives inside a card (compartment) with consistent, usually large, border-radius.
|
|
21
|
+
3. **Equal Spacing**: The gap between compartments must be perfectly consistent everywhere.
|
|
22
|
+
|
|
23
|
+
## Visual DNA
|
|
24
|
+
- **Colors**: Highly adaptable, but looks incredibly premium with **Minimalist Slate** or **Yacht Club**. Often uses a slightly off-white or light gray background to make the white compartments pop.
|
|
25
|
+
- **Typography**: Apple-esque (e.g., `SF Pro`, `Inter`). Headlines are usually bold and placed at the top-left or bottom-left of each compartment.
|
|
26
|
+
- **Visuals**: Often relies on high-quality, edge-to-edge images or single, large 3D icons inside specific grid cells to break up text-heavy cards.
|
|
27
|
+
|
|
28
|
+
## Web Implementation
|
|
29
|
+
- CSS Grid is mandatory. Flexbox is too difficult to maintain the strict 2D structure.
|
|
30
|
+
- **CSS Example**:
|
|
31
|
+
```css
|
|
32
|
+
.bento-container {
|
|
33
|
+
display: grid;
|
|
34
|
+
grid-template-columns: repeat(4, 1fr);
|
|
35
|
+
grid-auto-rows: 200px;
|
|
36
|
+
gap: 24px;
|
|
37
|
+
padding: 24px;
|
|
38
|
+
background-color: var(--bg-primary); /* Slightly darker than cards */
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.bento-card {
|
|
42
|
+
background-color: #fff;
|
|
43
|
+
border-radius: 32px; /* Very large border radius */
|
|
44
|
+
padding: 32px;
|
|
45
|
+
box-shadow: 0 4px 24px rgba(0,0,0,0.04);
|
|
46
|
+
/* Optional: subtle 1px border for crispness */
|
|
47
|
+
border: 1px solid rgba(0,0,0,0.05);
|
|
48
|
+
|
|
49
|
+
display: flex;
|
|
50
|
+
flex-direction: column;
|
|
51
|
+
justify-content: space-between;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* Creating spans for different bento sizes */
|
|
55
|
+
.bento-span-2 { grid-column: span 2; }
|
|
56
|
+
.bento-span-2-row { grid-row: span 2; }
|
|
57
|
+
.bento-large { grid-column: span 2; grid-row: span 2; }
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## App Implementation
|
|
61
|
+
|
|
62
|
+
### SwiftUI
|
|
63
|
+
```swift
|
|
64
|
+
struct BentoGrid: View {
|
|
65
|
+
let columns = [
|
|
66
|
+
GridItem(.flexible(), spacing: 16),
|
|
67
|
+
GridItem(.flexible(), spacing: 16)
|
|
68
|
+
]
|
|
69
|
+
|
|
70
|
+
var body: some View {
|
|
71
|
+
ScrollView {
|
|
72
|
+
LazyVGrid(columns: columns, spacing: 16) {
|
|
73
|
+
// 2x1 Span (Full width)
|
|
74
|
+
BentoCard(title: "Hero", color: .blue)
|
|
75
|
+
.frame(height: 180)
|
|
76
|
+
|
|
77
|
+
// 1x1 Spans
|
|
78
|
+
BentoCard(title: "Stats", color: .green)
|
|
79
|
+
.frame(height: 180)
|
|
80
|
+
BentoCard(title: "Graph", color: .purple)
|
|
81
|
+
.frame(height: 180)
|
|
82
|
+
|
|
83
|
+
// 1x2 Span (Tall)
|
|
84
|
+
BentoCard(title: "Activity", color: .orange)
|
|
85
|
+
.frame(height: 376) // (180 * 2) + 16 spacing
|
|
86
|
+
|
|
87
|
+
// 1x1 Spans next to the tall one
|
|
88
|
+
VStack(spacing: 16) {
|
|
89
|
+
BentoCard(title: "A", color: .pink).frame(height: 180)
|
|
90
|
+
BentoCard(title: "B", color: .cyan).frame(height: 180)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
.padding(16)
|
|
94
|
+
}
|
|
95
|
+
.background(Color(.systemGroupedBackground))
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
struct BentoCard: View {
|
|
100
|
+
let title: String
|
|
101
|
+
let color: Color
|
|
102
|
+
var body: some View {
|
|
103
|
+
RoundedRectangle(cornerRadius: 24)
|
|
104
|
+
.fill(Color(.secondarySystemGroupedBackground))
|
|
105
|
+
.overlay(
|
|
106
|
+
Text(title).font(.headline).foregroundColor(color),
|
|
107
|
+
alignment: .topLeading
|
|
108
|
+
)
|
|
109
|
+
.padding(16)
|
|
110
|
+
// Soft bento shadow
|
|
111
|
+
.shadow(color: .black.opacity(0.04), radius: 12, x: 0, y: 4)
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
- Use `LazyVGrid` for uniform grids.
|
|
116
|
+
- For complex irregular bento layouts (like 1x2 spans), you often have to mix `VStack` and `HStack` inside the grid cells to fake the spans.
|
|
117
|
+
- Maintain absolute consistency with `cornerRadius` (usually 24-32pt) and `spacing` (usually 16pt).
|
|
118
|
+
|
|
119
|
+
### Flutter
|
|
120
|
+
```dart
|
|
121
|
+
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
|
|
122
|
+
|
|
123
|
+
class BentoScreen extends StatelessWidget {
|
|
124
|
+
@override
|
|
125
|
+
Widget build(BuildContext context) {
|
|
126
|
+
return Scaffold(
|
|
127
|
+
backgroundColor: Colors.grey[100],
|
|
128
|
+
body: SingleChildScrollView(
|
|
129
|
+
padding: const EdgeInsets.all(16),
|
|
130
|
+
child: StaggeredGrid.count(
|
|
131
|
+
crossAxisCount: 4, // 4 columns total
|
|
132
|
+
mainAxisSpacing: 16,
|
|
133
|
+
crossAxisSpacing: 16,
|
|
134
|
+
children: const [
|
|
135
|
+
// 2x1 (Full width in a 2-col layout, spans 4)
|
|
136
|
+
StaggeredGridTile.count(
|
|
137
|
+
crossAxisCellCount: 4,
|
|
138
|
+
mainAxisCellCount: 2,
|
|
139
|
+
child: BentoCard(title: 'Hero'),
|
|
140
|
+
),
|
|
141
|
+
// 1x1
|
|
142
|
+
StaggeredGridTile.count(
|
|
143
|
+
crossAxisCellCount: 2,
|
|
144
|
+
mainAxisCellCount: 2,
|
|
145
|
+
child: BentoCard(title: 'Stats'),
|
|
146
|
+
),
|
|
147
|
+
// 1x1
|
|
148
|
+
StaggeredGridTile.count(
|
|
149
|
+
crossAxisCellCount: 2,
|
|
150
|
+
mainAxisCellCount: 2,
|
|
151
|
+
child: BentoCard(title: 'Graph'),
|
|
152
|
+
),
|
|
153
|
+
// 1x2 (Tall)
|
|
154
|
+
StaggeredGridTile.count(
|
|
155
|
+
crossAxisCellCount: 2,
|
|
156
|
+
mainAxisCellCount: 4,
|
|
157
|
+
child: BentoCard(title: 'Activity'),
|
|
158
|
+
),
|
|
159
|
+
],
|
|
160
|
+
),
|
|
161
|
+
),
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
class BentoCard extends StatelessWidget {
|
|
167
|
+
final String title;
|
|
168
|
+
const BentoCard({required this.title});
|
|
169
|
+
|
|
170
|
+
@override
|
|
171
|
+
Widget build(BuildContext context) {
|
|
172
|
+
return Container(
|
|
173
|
+
padding: const EdgeInsets.all(24),
|
|
174
|
+
decoration: BoxDecoration(
|
|
175
|
+
color: Colors.white,
|
|
176
|
+
borderRadius: BorderRadius.circular(24),
|
|
177
|
+
boxShadow: [
|
|
178
|
+
BoxShadow(
|
|
179
|
+
color: Colors.black.withOpacity(0.04),
|
|
180
|
+
blurRadius: 12,
|
|
181
|
+
offset: const Offset(0, 4),
|
|
182
|
+
),
|
|
183
|
+
],
|
|
184
|
+
),
|
|
185
|
+
alignment: Alignment.topLeft,
|
|
186
|
+
child: Text(title, style: const TextStyle(fontWeight: FontWeight.bold)),
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
- The `flutter_staggered_grid_view` package is practically mandatory for complex Bento grids in Flutter.
|
|
192
|
+
- Use `StaggeredGridTile.count` to explicitly declare the `crossAxis` and `mainAxis` span of each compartment.
|
|
193
|
+
|
|
194
|
+
### React Native
|
|
195
|
+
```jsx
|
|
196
|
+
const BentoScreen = () => {
|
|
197
|
+
return (
|
|
198
|
+
<ScrollView
|
|
199
|
+
style={{ flex: 1, backgroundColor: '#F2F2F7' }}
|
|
200
|
+
contentContainerStyle={{ padding: 16 }}
|
|
201
|
+
>
|
|
202
|
+
{/* 2x1 Span */}
|
|
203
|
+
<View style={[styles.bentoCard, { height: 180, marginBottom: 16 }]}>
|
|
204
|
+
<Text style={styles.title}>Hero</Text>
|
|
205
|
+
</View>
|
|
206
|
+
|
|
207
|
+
<View style={{ flexDirection: 'row', gap: 16, marginBottom: 16 }}>
|
|
208
|
+
{/* 1x1 Spans */}
|
|
209
|
+
<View style={[styles.bentoCard, { flex: 1, height: 180 }]}>
|
|
210
|
+
<Text style={styles.title}>Stats</Text>
|
|
211
|
+
</View>
|
|
212
|
+
<View style={[styles.bentoCard, { flex: 1, height: 180 }]}>
|
|
213
|
+
<Text style={styles.title}>Graph</Text>
|
|
214
|
+
</View>
|
|
215
|
+
</View>
|
|
216
|
+
|
|
217
|
+
<View style={{ flexDirection: 'row', gap: 16 }}>
|
|
218
|
+
{/* 1x2 Span (Tall) */}
|
|
219
|
+
<View style={[styles.bentoCard, { flex: 1, height: 376 }]}>
|
|
220
|
+
<Text style={styles.title}>Activity</Text>
|
|
221
|
+
</View>
|
|
222
|
+
|
|
223
|
+
<View style={{ flex: 1, gap: 16 }}>
|
|
224
|
+
{/* Stacked 1x1s */}
|
|
225
|
+
<View style={[styles.bentoCard, { height: 180 }]}>
|
|
226
|
+
<Text style={styles.title}>A</Text>
|
|
227
|
+
</View>
|
|
228
|
+
<View style={[styles.bentoCard, { height: 180 }]}>
|
|
229
|
+
<Text style={styles.title}>B</Text>
|
|
230
|
+
</View>
|
|
231
|
+
</View>
|
|
232
|
+
</View>
|
|
233
|
+
</ScrollView>
|
|
234
|
+
);
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
const styles = StyleSheet.create({
|
|
238
|
+
bentoCard: {
|
|
239
|
+
backgroundColor: '#FFFFFF',
|
|
240
|
+
borderRadius: 24,
|
|
241
|
+
padding: 24,
|
|
242
|
+
shadowColor: '#000',
|
|
243
|
+
shadowOffset: { width: 0, height: 4 },
|
|
244
|
+
shadowOpacity: 0.04,
|
|
245
|
+
shadowRadius: 12,
|
|
246
|
+
elevation: 2,
|
|
247
|
+
},
|
|
248
|
+
title: {
|
|
249
|
+
fontWeight: '700',
|
|
250
|
+
fontSize: 18,
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
```
|
|
254
|
+
- React Native lacks CSS Grid. You must manually compose the grid using `flexDirection: 'row'` and vertical stacks.
|
|
255
|
+
- The `gap` property in React Native flexbox makes this significantly easier than using margins.
|
|
256
|
+
|
|
257
|
+
### Jetpack Compose
|
|
258
|
+
```kotlin
|
|
259
|
+
@Composable
|
|
260
|
+
fun BentoGrid() {
|
|
261
|
+
Column(
|
|
262
|
+
modifier = Modifier
|
|
263
|
+
.fillMaxSize()
|
|
264
|
+
.background(Color(0xFFF2F2F7))
|
|
265
|
+
.verticalScroll(rememberScrollState())
|
|
266
|
+
.padding(16.dp),
|
|
267
|
+
verticalArrangement = Arrangement.spacedBy(16.dp)
|
|
268
|
+
) {
|
|
269
|
+
// Full width
|
|
270
|
+
BentoCard(title = "Hero", modifier = Modifier.fillMaxWidth().height(180.dp))
|
|
271
|
+
|
|
272
|
+
// Two columns
|
|
273
|
+
Row(horizontalArrangement = Arrangement.spacedBy(16.dp)) {
|
|
274
|
+
BentoCard(title = "Stats", modifier = Modifier.weight(1f).height(180.dp))
|
|
275
|
+
BentoCard(title = "Graph", modifier = Modifier.weight(1f).height(180.dp))
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
// Complex span: 1x2 left, two 1x1s right
|
|
279
|
+
Row(horizontalArrangement = Arrangement.spacedBy(16.dp)) {
|
|
280
|
+
BentoCard(title = "Activity", modifier = Modifier.weight(1f).height(376.dp))
|
|
281
|
+
|
|
282
|
+
Column(
|
|
283
|
+
modifier = Modifier.weight(1f),
|
|
284
|
+
verticalArrangement = Arrangement.spacedBy(16.dp)
|
|
285
|
+
) {
|
|
286
|
+
BentoCard(title = "A", modifier = Modifier.fillMaxWidth().height(180.dp))
|
|
287
|
+
BentoCard(title = "B", modifier = Modifier.fillMaxWidth().height(180.dp))
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
@Composable
|
|
294
|
+
fun BentoCard(title: String, modifier: Modifier = Modifier) {
|
|
295
|
+
Card(
|
|
296
|
+
modifier = modifier,
|
|
297
|
+
shape = RoundedCornerShape(24.dp),
|
|
298
|
+
colors = CardDefaults.cardColors(containerColor = Color.White),
|
|
299
|
+
elevation = CardDefaults.cardElevation(defaultElevation = 2.dp)
|
|
300
|
+
) {
|
|
301
|
+
Text(title, fontWeight = FontWeight.Bold, modifier = Modifier.padding(24.dp))
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
```
|
|
305
|
+
- While `LazyVerticalGrid` exists, for highly specific irregular bento layouts, manually building rows and columns with `weight(1f)` is often much more reliable.
|
|
306
|
+
- Use `Arrangement.spacedBy(16.dp)` on both Columns and Rows to ensure mathematically perfect gutters.
|
|
307
|
+
|
|
308
|
+
## Do's and Don'ts
|
|
309
|
+
- **DO**: Mix sizes! A bento box is boring if every cell is 1x1. Use 2x1, 1x2, and 2x2 cells to create visual interest.
|
|
310
|
+
- **DON'T**: Clutter the inside of a bento card. If it needs a lot of elements, break it into multiple cards.
|
|
311
|
+
|
|
312
|
+
## Limitations
|
|
313
|
+
- This is a styling reference and does not replace environment-specific validation, accessibility testing, or expert review.
|
|
314
|
+
- Ensure appropriate contrast ratios and responsive behaviors are verified separately.
|