From d0eef230e7f7a7b51967a98374d61df7fd224d96 Mon Sep 17 00:00:00 2001 From: Travis James Date: Fri, 25 Sep 2026 23:43:34 -0500 Subject: [PATCH 1/5] docs: plan shared UI routing and project team adoption Assisted-by: Codex:GPT-6 [OpenSpec, filesystem] --- .../.openspec.yaml | 2 + .../ui-ux-routing-and-team-defaults/design.md | 27 ++++++++++++++ .../proposal.md | 26 +++++++++++++ .../specs/project-team-defaults/spec.md | 30 +++++++++++++++ .../specs/ui-ux-routing/spec.md | 37 +++++++++++++++++++ .../ui-ux-routing-and-team-defaults/tasks.md | 15 ++++++++ 6 files changed, 137 insertions(+) create mode 100644 openspec/changes/ui-ux-routing-and-team-defaults/.openspec.yaml create mode 100644 openspec/changes/ui-ux-routing-and-team-defaults/design.md create mode 100644 openspec/changes/ui-ux-routing-and-team-defaults/proposal.md create mode 100644 openspec/changes/ui-ux-routing-and-team-defaults/specs/project-team-defaults/spec.md create mode 100644 openspec/changes/ui-ux-routing-and-team-defaults/specs/ui-ux-routing/spec.md create mode 100644 openspec/changes/ui-ux-routing-and-team-defaults/tasks.md diff --git a/openspec/changes/ui-ux-routing-and-team-defaults/.openspec.yaml b/openspec/changes/ui-ux-routing-and-team-defaults/.openspec.yaml new file mode 100644 index 00000000..abd7c5ae --- /dev/null +++ b/openspec/changes/ui-ux-routing-and-team-defaults/.openspec.yaml @@ -0,0 +1,2 @@ +schema: spec-driven +created: 2026-09-25 diff --git a/openspec/changes/ui-ux-routing-and-team-defaults/design.md b/openspec/changes/ui-ux-routing-and-team-defaults/design.md new file mode 100644 index 00000000..2369584c --- /dev/null +++ b/openspec/changes/ui-ux-routing-and-team-defaults/design.md @@ -0,0 +1,27 @@ +## Context +See proposal.md. Existing team runtime commits are the starting point; dirty primary checkouts are preserved. Shared helpers ship TypeScript 7 sources and compiled Node ESM, with no runtime dependencies beyond Node and bundled data. + +## Goals / Non-Goals +Deliver automatic, inspectable routing and team adoption offline. Defer native Impeccable detector/browser parity, live harness certification and platform execution unavailable on this host. Do not change design tokens, role ownership, native permissions or operator versions. + +## Decisions +- A canonical prometheus-ui-ux skill owns protocol, catalog and a self-contained runtime. Flat mini distribution mirrors portable bytes from the full UI collection. Bootstrap/injector call this runtime rather than maintaining independent routing logic. +- Routing is deterministic from operation, domain, model, affected paths and manifests; context and role decisions remain inspectable JSON. Project protocol overrides a bundled default. Refinement/review exclude taste. +- Managed pointers defer loading until UI work. Installation preflights every destination, preserves unrelated prose and linked in-project entrypoints, rejects corrupt markers and path escapes, and retains recovery copies for changed files. +- Team export remains proposal-only; install-project handles explicit project writes. Existing roles[].skills carries bindings; manifests remain the authority. Zed instruction precedence is accounted for without inventing delegation. +- Upstream guidance is vendored at immutable revisions with licenses and adaptations. Native SDK requirements remain explicit. Impeccable core is a distinct adaptation. +- The Boss consumes committed mini payloads including data and helper modules; packaged helper discovery uses its available Node executable. No home installation when full-pack presence is detected. + +## Risks / Trade-offs +- Large upstream runtime → port by responsibility; record parity outputs and omissions honestly. +- Instruction-file writes are a trust boundary → root containment, linked-target resolution, marker validation, preflight and recoverable writes. +- Cross-platform claims → Windows/Linux execution remains an explicit gap if unavailable. +- Existing staged Boss work → isolate bounded edits and never commit unrelated staged changes. + +## Migration Plan +1. Persist research and contracts. +2. Implement catalog, Pro Max port, routing/bootstrap and team installer concurrently by ownership. +3. Generate distributions and wire Boss mini pin/packaged assets. +4. At the complete phase boundary run one consolidated local integration gate. Batch corrections and rerun only failed gates. +5. Commit scoped results locally. Recovery uses recorded original instruction bytes and repository commits; do not publish or release externally. + diff --git a/openspec/changes/ui-ux-routing-and-team-defaults/proposal.md b/openspec/changes/ui-ux-routing-and-team-defaults/proposal.md new file mode 100644 index 00000000..935bad3f --- /dev/null +++ b/openspec/changes/ui-ux-routing-and-team-defaults/proposal.md @@ -0,0 +1,26 @@ +# Why + +UI work currently receives inconsistent skill guidance, and creating a team does not reliably make that team discoverable by subsequent coding sessions. The operator approved a shared, offline UI routing contract and explicit project-team installation across the full pack, Windows-native mini pack, and The Boss. + +## What Changes + +- Bundle a pinned, attributed UI catalog with a portable subset and declared full-only capabilities. +- Add shared UI routing, bounded Impeccable core adaptation, automatic review guidance, and a TypeScript 7 Pro Max port. +- Install short instruction pointers through bootstrap and the existing UI rule injector. +- Extend the existing team runtime with safe project installation and default role adoption while preserving proposal-only export. +- Integrate source generation, mini distribution and The Boss packaging; preserve its existing team and design authority. +- Persist research evidence, limitations and deferred engine-port designs. Verify only after the complete production phase. + +## Capabilities + +### New Capabilities +- `ui-ux-routing`: selective context, direction, craft and platform routing with portable packaging. +- `project-team-defaults`: managed project-team installation and native or sequential role adoption. + +### Modified Capabilities + +None. Existing bootstrap and distribution interfaces are extended compatibly. + +## Impact + +Primary implementation lives in isolated mini and full worktrees based on the existing agent-team-creator commits. The Boss receives its own bounded integration. This user-authorized change spans these three repositories only. Runtime boundaries are local files, upstream pinned content and harness adapters; no new service, telemetry, runtime downloads or engine dependencies are added to mini. Native Windows evidence must remain pending unless actually executed. diff --git a/openspec/changes/ui-ux-routing-and-team-defaults/specs/project-team-defaults/spec.md b/openspec/changes/ui-ux-routing-and-team-defaults/specs/project-team-defaults/spec.md new file mode 100644 index 00000000..aaca7793 --- /dev/null +++ b/openspec/changes/ui-ux-routing-and-team-defaults/specs/project-team-defaults/spec.md @@ -0,0 +1,30 @@ +## Purpose +Make existing project teams discoverable and reusable by supported coding harnesses without replacing native permissions or ownership. + +## ADDED Requirements + +### Requirement: Explicit project installation +Export SHALL remain proposal-only. A separate install-project operation SHALL offer dry-run and check, persist an active-team record, and update both instruction entrypoints. Normal authorized team creation SHALL finish with project installation. + +#### Scenario: Sole existing team +- **WHEN** exactly one valid project team exists and no explicit selection is recorded +- **THEN** it becomes the default for relevant code work. + +#### Scenario: Ambiguous teams +- **WHEN** multiple teams exist without an explicit valid selection +- **THEN** installation requests a selection rather than choosing arbitrarily. + +### Requirement: Preserve native authority +Installation SHALL preserve role IDs, ownership, model policy, concurrency and native permissions. Presence SHALL reference actual manifests and native definitions. Zed SHALL use the effective instruction file, with external ACP agents retaining their own native configuration. + +#### Scenario: Delegation unavailable +- **WHEN** the active tool lacks a native delegation API +- **THEN** it uses relevant role instructions sequentially and reports the limitation. + +### Requirement: Role skill binding +Design and UI implementation roles SHALL bind to the shared UI contract through roles[].skills, while reviewers SHALL receive review guidance without taste instructions. + +#### Scenario: Backend task on a mixed team +- **WHEN** backend-only code work is assigned to its owning role +- **THEN** the team remains active and no UI skills are loaded. + diff --git a/openspec/changes/ui-ux-routing-and-team-defaults/specs/ui-ux-routing/spec.md b/openspec/changes/ui-ux-routing-and-team-defaults/specs/ui-ux-routing/spec.md new file mode 100644 index 00000000..2c0db64b --- /dev/null +++ b/openspec/changes/ui-ux-routing-and-team-defaults/specs/ui-ux-routing/spec.md @@ -0,0 +1,37 @@ +## Purpose +Provide a shared offline UI skill contract that preserves incumbent design authority and selects only relevant portable guidance. + +## ADDED Requirements + +### Requirement: Selective UI routing +The system SHALL load context first, focused Pro Max intelligence, one craft skill and manifest-matched platform guidance. It SHALL distinguish new, redesign, refinement and review; only new/redesign MAY select at most one taste implementation and one explicit overlay. Backend work SHALL load no UI guidance. + +#### Scenario: Refining a nested Flutter screen +- **WHEN** refinement targets an application with a pubspec.yaml inside a larger repository +- **THEN** Flutter guidance and existing tokens are selected without a taste skill or automatic design-system replacement. + +#### Scenario: Model-aware direction +- **WHEN** new visual direction is requested and the actual model family is GPT +- **THEN** gpt-taste is selected; the harness name alone SHALL NOT imply GPT. + +### Requirement: Portable offline catalog +The catalog SHALL identify immutable upstream revisions, licenses, aliases, assets, invocation restrictions and adaptations. Mini SHALL contain no executable Python, shell hooks, native skill engines, symlinks or runtime downloads. Deferred native capabilities SHALL NOT be advertised as implemented. + +#### Scenario: Packaged offline use +- **WHEN** The Boss executes a packaged helper with its Node runtime and optional services are down +- **THEN** bundled routing and Pro Max data remain usable without a source checkout or developer-global skill. + +### Requirement: Managed project instructions +Bootstrap and the UI injector SHALL use the same protocol, preserve project overrides and unrelated prose, preflight all writes and retain recovery information. + +#### Scenario: Corrupt instruction markers +- **WHEN** either entrypoint contains malformed or duplicate managed markers +- **THEN** installation refuses before changing project files. + +### Requirement: Review and design authority +Automatic review SHALL respect upstream user-only invocation restrictions, avoid taste-driven redesign, preserve DESIGN.md and execute at the completed phase boundary. + +#### Scenario: Independent review unavailable +- **WHEN** the harness cannot create a separate reviewer context +- **THEN** the limitation is recorded and builder self-review is never reported as independent review. + diff --git a/openspec/changes/ui-ux-routing-and-team-defaults/tasks.md b/openspec/changes/ui-ux-routing-and-team-defaults/tasks.md new file mode 100644 index 00000000..29a90323 --- /dev/null +++ b/openspec/changes/ui-ux-routing-and-team-defaults/tasks.md @@ -0,0 +1,15 @@ +## 1. Contract and research +- [x] 1.1 Persist the approved design and observable acceptance contracts. +- [ ] 1.2 Record source evidence, contradictions, compatibility and deferred port proposals with honest research-stage status. + +## 2. Complete production implementation +- [ ] 2.1 Bundle the pinned catalog and portable subset; verify through final distribution inventory. +- [ ] 2.2 Port Pro Max search, reasoning and persistence; verify through pinned upstream reference cases at final gate. +- [ ] 2.3 Wire shared routing, bootstrap, injector and generated rules; verify through real project installation scenarios. +- [ ] 2.4 Extend existing creator with install-project and role bindings; verify native preservation and team discovery. +- [ ] 2.5 Update distribution generators, The Boss mini pin and packaged runtime/data closure; verify without source/global dependencies. + +## 3. Completed phase acceptance +- [ ] 3.1 Run one consolidated integration gate after all production work, including idempotence, malformed markers, escape/link/CRLF paths, routing, team defaults, Pro Max parity and packaged execution. +- [ ] 3.2 Record actual platform evidence and independent review; unresolved platform or blocking findings remain open. +- [ ] 3.3 Commit only authorized changes locally and provide exact completion boundaries and remaining gaps. From 93fdc5ab08eaa564780a9da7fbb6b17325400085 Mon Sep 17 00:00:00 2001 From: Travis James Date: Sat, 26 Sep 2026 00:24:13 -0500 Subject: [PATCH 2/5] feat: add portable UI routing and automatic project team adoption Bundle the pinned portable design catalog, TypeScript Pro Max helpers, shared bootstrap routing and safe team installation. Preserve upstream restrictions and record native Windows and release acceptance gaps. Assisted-by: Codex:GPT-6 [Node.js, Git, research tools] --- .agents/UI_UX_PROTOCOL.md | 36 + .../android-compose-adaptive/LICENSE.txt | 202 + .../android-compose-adaptive/PROVENANCE.md | 19 + .../skills/android-compose-adaptive/SKILL.md | 316 + .../adaptive/flexbox/container-behavior.md | 112 + .../layouts/adaptive/flexbox/get-started.md | 69 + .../compose/layouts/adaptive/flexbox/index.md | 81 + .../layouts/adaptive/flexbox/item-behavior.md | 170 + .../adaptive/grid/container-properties.md | 415 + .../layouts/adaptive/grid/get-started.md | 51 + .../ui/compose/layouts/adaptive/grid/index.md | 73 + .../layouts/adaptive/grid/item-properties.md | 170 + .../layouts/adaptive/mediaquery/index.md | 333 + .../develop/ui/compose/tooling/debug.md | 114 + .../recipes/material-listdetail.md | 141 + .../skills/android-edge-to-edge/LICENSE.txt | 202 + .../skills/android-edge-to-edge/PROVENANCE.md | 19 + .agents/skills/android-edge-to-edge/SKILL.md | 441 + .agents/skills/better-accessibility/LICENSE | 21 + .../skills/better-accessibility/PROVENANCE.md | 18 + .agents/skills/better-accessibility/SKILL.md | 127 + .../better-accessibility/agents/openai.yaml | 3 + .../focus-and-keyboard.md | 131 + .agents/skills/better-accessibility/forms.md | 84 + .../skills/better-accessibility/hit-areas.md | 94 + .../better-accessibility/motion-and-zoom.md | 79 + .../better-accessibility/screen-readers.md | 101 + .../semantics-and-aria.md | 84 + .agents/skills/better-colors/LICENSE | 21 + .agents/skills/better-colors/PROVENANCE.md | 18 + .agents/skills/better-colors/SKILL.md | 121 + .../skills/better-colors/agents/openai.yaml | 3 + .agents/skills/better-colors/color-formats.md | 90 + .agents/skills/better-colors/color-usage.md | 118 + .agents/skills/better-colors/contrast.md | 79 + .../better-colors/palette-generation.md | 104 + .../skills/better-colors/palette-structure.md | 76 + .agents/skills/better-colors/token-naming.md | 97 + .agents/skills/better-interface/LICENSE | 21 + .agents/skills/better-interface/PROVENANCE.md | 18 + .agents/skills/better-interface/SKILL.md | 153 + .../better-interface/agents/openai.yaml | 3 + .../skills/better-interface/review-format.md | 46 + .agents/skills/better-layout/LICENSE | 21 + .agents/skills/better-layout/PROVENANCE.md | 18 + .agents/skills/better-layout/SKILL.md | 97 + .../skills/better-layout/agents/openai.yaml | 3 + .../better-layout/grouping-and-alignment.md | 123 + .../better-layout/spacing-and-adaptivity.md | 159 + .agents/skills/better-typography/LICENSE | 21 + .../skills/better-typography/PROVENANCE.md | 18 + .agents/skills/better-typography/SKILL.md | 178 + .../better-typography/agents/openai.yaml | 3 + .../better-typography/choosing-fonts.md | 64 + .../better-typography/css-cheat-sheet.md | 65 + .../details-and-accessibility.md | 119 + .../better-typography/spacing-and-sizing.md | 121 + .../variable-fonts-and-opentype.md | 105 + .../wrapping-and-punctuation.md | 55 + .agents/skills/better-ui/LICENSE | 21 + .agents/skills/better-ui/PROVENANCE.md | 18 + .agents/skills/better-ui/SKILL.md | 128 + .agents/skills/better-ui/agents/openai.yaml | 3 + .agents/skills/better-ui/animations.md | 205 + .agents/skills/better-ui/enter-exit.md | 147 + .agents/skills/better-ui/icon-transitions.md | 102 + .agents/skills/better-ui/icons.md | 110 + .agents/skills/better-ui/performance.md | 88 + .agents/skills/better-ui/surfaces.md | 219 + .agents/skills/better-writing/LICENSE | 21 + .agents/skills/better-writing/PROVENANCE.md | 18 + .agents/skills/better-writing/SKILL.md | 130 + .../skills/better-writing/agents/openai.yaml | 3 + .agents/skills/break/LICENSE | 21 + .agents/skills/break/PROVENANCE.md | 18 + .agents/skills/break/SKILL.md | 101 + .agents/skills/break/agents/openai.yaml | 5 + .agents/skills/break/scenarios.md | 78 + .../skills/design-taste-frontend-v1/LICENSE | 21 + .../design-taste-frontend-v1/PROVENANCE.md | 18 + .../skills/design-taste-frontend-v1/SKILL.md | 242 + .agents/skills/design-taste-frontend/LICENSE | 21 + .../design-taste-frontend/PROVENANCE.md | 19 + .agents/skills/design-taste-frontend/SKILL.md | 1223 + .agents/skills/explain-interface/LICENSE | 21 + .../skills/explain-interface/PROVENANCE.md | 21 + .agents/skills/explain-interface/SKILL.md | 146 + .../explain-interface/agents/openai.yaml | 5 + .../explain-interface/find-the-effect.md | 94 + .../skills/explain-interface/from-an-image.md | 55 + .../skills/explain-interface/no-browser.md | 47 + .../explain-interface/read-the-system.md | 178 + .agents/skills/expo-animation/LICENSE | 21 + .../skills/expo-animation/LICENSE.repository | 21 + .agents/skills/expo-animation/PROVENANCE.md | 20 + .agents/skills/expo-animation/RECIPES.md | 385 + .agents/skills/expo-animation/SKILL.md | 281 + .../skills/expo-animation/agents/openai.yaml | 4 + .agents/skills/expo-design-system/LICENSE | 21 + .../skills/expo-design-system/PROVENANCE.md | 21 + .agents/skills/expo-design-system/SKILL.md | 376 + .../expo-design-system/agents/openai.yaml | 4 + .../expo-design-system/references/audit.md | 158 + .../references/native-slop.md | 47 + .agents/skills/expo-native-ui/LICENSE | 21 + .agents/skills/expo-native-ui/PROVENANCE.md | 19 + .agents/skills/expo-native-ui/SKILL.md | 208 + .../skills/expo-native-ui/agents/openai.yaml | 4 + .../expo-native-ui/references/controls.md | 231 + .../expo-native-ui/references/gradients.md | 106 + .../skills/expo-native-ui/references/icons.md | 232 + .../skills/expo-native-ui/references/media.md | 193 + .../expo-native-ui/references/storage.md | 121 + .../references/visual-effects.md | 198 + .../expo-native-ui/references/webgpu-three.md | 605 + .agents/skills/expo-router/LICENSE | 21 + .agents/skills/expo-router/PROVENANCE.md | 19 + .agents/skills/expo-router/SKILL.md | 247 + .agents/skills/expo-router/agents/openai.yaml | 4 + .../expo-router/references/form-sheet.md | 253 + .../expo-router/references/route-structure.md | 229 + .../skills/expo-router/references/search.md | 248 + .agents/skills/expo-router/references/tabs.md | 433 + .../references/toolbar-and-headers.md | 284 + .../references/zoom-transitions.md | 158 + .agents/skills/expo-ui/LICENSE | 21 + .agents/skills/expo-ui/PROVENANCE.md | 20 + .agents/skills/expo-ui/SKILL.md | 107 + .agents/skills/expo-ui/agents/openai.yaml | 4 + .../references/drop-in-replacements.md | 27 + .../expo-ui/references/jetpack-compose.md | 73 + .agents/skills/expo-ui/references/swift-ui.md | 73 + .../skills/expo-ui/references/universal.md | 104 + .../expo-ui/scripts/list-components.mjs | 192 + .../flutter-build-responsive-layout/LICENSE | 26 + .../PROVENANCE.md | 18 + .../flutter-build-responsive-layout/SKILL.md | 154 + .../skills/flutter-fix-layout-issues/LICENSE | 26 + .../flutter-fix-layout-issues/PROVENANCE.md | 18 + .../skills/flutter-fix-layout-issues/SKILL.md | 145 + .../flutter-setup-declarative-routing/LICENSE | 26 + .../PROVENANCE.md | 18 + .../SKILL.md | 270 + .../skills/flutter-setup-localization/LICENSE | 26 + .../flutter-setup-localization/PROVENANCE.md | 18 + .../flutter-setup-localization/SKILL.md | 225 + .../skills/full-output-enforcement/LICENSE | 21 + .../full-output-enforcement/PROVENANCE.md | 18 + .../skills/full-output-enforcement/SKILL.md | 65 + .agents/skills/gpt-taste/LICENSE | 21 + .agents/skills/gpt-taste/PROVENANCE.md | 19 + .agents/skills/gpt-taste/SKILL.md | 90 + .agents/skills/high-end-visual-design/LICENSE | 21 + .../high-end-visual-design/PROVENANCE.md | 18 + .../skills/high-end-visual-design/SKILL.md | 114 + .../skills/industrial-brutalist-ui/LICENSE | 21 + .../industrial-brutalist-ui/PROVENANCE.md | 18 + .../skills/industrial-brutalist-ui/SKILL.md | 108 + .agents/skills/interface-review/LICENSE | 21 + .agents/skills/interface-review/PROVENANCE.md | 20 + .agents/skills/interface-review/SKILL.md | 170 + .../interface-review/agents/openai.yaml | 5 + .../interface-review/removed-signals.md | 36 + .../interface-review/scope-resolution.md | 88 + .agents/skills/minimalist-ui/LICENSE | 21 + .agents/skills/minimalist-ui/PROVENANCE.md | 18 + .agents/skills/minimalist-ui/SKILL.md | 101 + .../prometheus-impeccable-core/SKILL.md | 20 + .../references/LICENSE.impeccable | 191 + .../impeccable-context-and-modes.md | 19 + .../references/impeccable-craft-floor.md | 52 + .agents/skills/prometheus-ui-review/SKILL.md | 18 + .agents/skills/prometheus-ui-ux/SKILL.md | 31 + .../references/UI_UX_PROTOCOL.md | 36 + .../references/catalog.lock.json | 3118 ++ .../references/deferred-ports.md | 10 + .../prometheus-ui-ux/references/pointer.md | 6 + .../references/runtime-api.md | 57 + .../skills/prometheus-ui-ux/scripts/cli.mjs | 55 + .../prometheus-ui-ux/scripts/install.mjs | 113 + .../prometheus-ui-ux/scripts/routing.mjs | 117 + .../skills/redesign-existing-projects/LICENSE | 21 + .../redesign-existing-projects/PROVENANCE.md | 18 + .../redesign-existing-projects/SKILL.md | 194 + .../stitch-design-taste/DESIGN.stitch.md | 121 + .agents/skills/stitch-design-taste/LICENSE | 21 + .../skills/stitch-design-taste/PROVENANCE.md | 19 + .agents/skills/stitch-design-taste/SKILL.md | 200 + .agents/skills/swiftui-pro/LICENSE | 21 + .agents/skills/swiftui-pro/PROVENANCE.md | 19 + .agents/skills/swiftui-pro/SKILL.md | 121 + .agents/skills/swiftui-pro/agents/openai.yaml | 10 + .../swiftui-pro/assets/swiftui-pro-icon.png | Bin 0 -> 3117 bytes .../swiftui-pro/assets/swiftui-pro-icon.svg | 29 + .../swiftui-pro/references/accessibility.md | 13 + .agents/skills/swiftui-pro/references/api.md | 39 + .agents/skills/swiftui-pro/references/data.md | 43 + .../skills/swiftui-pro/references/design.md | 32 + .../skills/swiftui-pro/references/hygiene.md | 9 + .../swiftui-pro/references/navigation.md | 14 + .../swiftui-pro/references/performance.md | 46 + .../skills/swiftui-pro/references/swift.md | 56 + .../skills/swiftui-pro/references/views.md | 36 + .agents/skills/ui-ux-pro-max/LICENSE | 21 + .agents/skills/ui-ux-pro-max/PORT.md | 11 + .agents/skills/ui-ux-pro-max/SKILL.md | 49 + .../ui-ux-pro-max/data/app-interface.csv | 33 + .../ui-ux-pro-max/data/catalog-summary.json | 78 + .agents/skills/ui-ux-pro-max/data/charts.csv | 26 + .agents/skills/ui-ux-pro-max/data/colors.csv | 193 + .../ui-ux-pro-max/data/data-provenance.json | 1348 + .../data/google-font-licenses.json | 20185 ++++++++++ .../ui-ux-pro-max/data/google-fonts.csv | 1935 + .agents/skills/ui-ux-pro-max/data/icons.csv | 106 + .agents/skills/ui-ux-pro-max/data/landing.csv | 35 + .agents/skills/ui-ux-pro-max/data/motion.csv | 18 + .../data/phosphor-icons-upstream.json | 32582 ++++++++++++++++ .../skills/ui-ux-pro-max/data/products.csv | 193 + .../ui-ux-pro-max/data/react-performance.csv | 45 + .../ui-ux-pro-max/data/search-config.json | 977 + .../ui-ux-pro-max/data/stacks/angular.csv | 51 + .../ui-ux-pro-max/data/stacks/astro.csv | 54 + .../ui-ux-pro-max/data/stacks/avalonia.csv | 57 + .../ui-ux-pro-max/data/stacks/flutter.csv | 53 + .../data/stacks/html-tailwind.csv | 60 + .../ui-ux-pro-max/data/stacks/javafx.csv | 76 + .../data/stacks/jetpack-compose.csv | 53 + .../ui-ux-pro-max/data/stacks/laravel.csv | 51 + .../ui-ux-pro-max/data/stacks/nextjs.csv | 62 + .../ui-ux-pro-max/data/stacks/nuxt-ui.csv | 77 + .../ui-ux-pro-max/data/stacks/nuxtjs.csv | 68 + .../data/stacks/react-native.csv | 52 + .../ui-ux-pro-max/data/stacks/react.csv | 67 + .../ui-ux-pro-max/data/stacks/shadcn.csv | 69 + .../ui-ux-pro-max/data/stacks/svelte.csv | 56 + .../ui-ux-pro-max/data/stacks/swiftui.csv | 51 + .../ui-ux-pro-max/data/stacks/threejs.csv | 54 + .../skills/ui-ux-pro-max/data/stacks/uno.csv | 60 + .../skills/ui-ux-pro-max/data/stacks/uwp.csv | 56 + .../skills/ui-ux-pro-max/data/stacks/vue.csv | 50 + .../ui-ux-pro-max/data/stacks/winui.csv | 60 + .../skills/ui-ux-pro-max/data/stacks/wpf.csv | 57 + .agents/skills/ui-ux-pro-max/data/styles.csv | 89 + .../skills/ui-ux-pro-max/data/typography.csv | 75 + .../ui-ux-pro-max/data/ui-reasoning.csv | 193 + .../ui-ux-pro-max/data/ux-guidelines.csv | 120 + .agents/skills/ui-ux-pro-max/provenance.json | 71 + .../skills/ui-ux-pro-max/reference-cases.json | 2968 ++ .../ui-ux-pro-max/references/pro-rules.md | 117 + .../references/quick-reference.md | 256 + .agents/skills/ui-ux-pro-max/scripts/core.mjs | 174 + .agents/skills/ui-ux-pro-max/scripts/data.mjs | 79 + .../ui-ux-pro-max/scripts/design-system.mjs | 56 + .../skills/ui-ux-pro-max/scripts/format.mjs | 47 + .../ui-ux-pro-max/scripts/persistence.mjs | 124 + .../skills/ui-ux-pro-max/scripts/ranking.mjs | 55 + .../ui-ux-pro-max/scripts/reasoning.mjs | 78 + .../skills/ui-ux-pro-max/scripts/search.mjs | 75 + .agents/skills/variant/LICENSE | 21 + .agents/skills/variant/PROVENANCE.md | 18 + .agents/skills/variant/SKILL.md | 126 + .agents/skills/variant/agents/openai.yaml | 5 + .agents/skills/variant/picker.md | 76 + .../vercel-composition-patterns/AGENTS.md | 946 + .../vercel-composition-patterns/PROVENANCE.md | 18 + .../vercel-composition-patterns/README.md | 60 + .../vercel-composition-patterns/SKILL.md | 101 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../vercel-composition-patterns/metadata.json | 11 + .../rules/_sections.md | 29 + .../rules/_template.md | 24 + .../rules/architecture-avoid-boolean-props.md | 100 + .../rules/architecture-compound-components.md | 112 + .../patterns-children-over-render-props.md | 87 + .../rules/patterns-explicit-variants.md | 100 + .../rules/react19-no-forwardref.md | 42 + .../rules/state-context-interface.md | 191 + .../rules/state-decouple-implementation.md | 113 + .../rules/state-lift-state.md | 125 + .../vercel-react-best-practices/AGENTS.md | 3786 ++ .../vercel-react-best-practices/PROVENANCE.md | 19 + .../vercel-react-best-practices/README.md | 123 + .../vercel-react-best-practices/SKILL.md | 161 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../vercel-react-best-practices/metadata.json | 15 + .../rules/_sections.md | 46 + .../rules/_template.md | 28 + .../rules/advanced-effect-event-deps.md | 56 + .../rules/advanced-event-handler-refs.md | 55 + .../rules/advanced-init-once.md | 42 + .../rules/advanced-use-latest.md | 39 + .../rules/async-api-routes.md | 38 + .../async-cheap-condition-before-await.md | 37 + .../rules/async-defer-await.md | 82 + .../rules/async-dependencies.md | 51 + .../rules/async-parallel.md | 28 + .../rules/async-suspense-boundaries.md | 99 + .../rules/bundle-analyzable-paths.md | 63 + .../rules/bundle-barrel-imports.md | 60 + .../rules/bundle-conditional.md | 31 + .../rules/bundle-defer-third-party.md | 49 + .../rules/bundle-dynamic-imports.md | 35 + .../rules/bundle-preload.md | 50 + .../rules/client-event-listeners.md | 74 + .../rules/client-localstorage-schema.md | 71 + .../rules/client-passive-event-listeners.md | 48 + .../rules/client-swr-dedup.md | 56 + .../rules/js-batch-dom-css.md | 107 + .../rules/js-cache-function-results.md | 80 + .../rules/js-cache-property-access.md | 28 + .../rules/js-cache-storage.md | 70 + .../rules/js-combine-iterations.md | 32 + .../rules/js-early-exit.md | 50 + .../rules/js-flatmap-filter.md | 60 + .../rules/js-hoist-regexp.md | 45 + .../rules/js-index-maps.md | 37 + .../rules/js-length-check-first.md | 49 + .../rules/js-min-max-loop.md | 76 + .../rules/js-request-idle-callback.md | 105 + .../rules/js-set-map-lookups.md | 24 + .../rules/js-tosorted-immutable.md | 57 + .../rules/rendering-activity.md | 26 + .../rules/rendering-animate-svg-wrapper.md | 47 + .../rules/rendering-conditional-render.md | 40 + .../rules/rendering-content-visibility.md | 38 + .../rules/rendering-hoist-jsx.md | 46 + .../rules/rendering-hydration-no-flicker.md | 82 + .../rendering-hydration-suppress-warning.md | 30 + .../rules/rendering-resource-hints.md | 85 + .../rules/rendering-script-defer-async.md | 68 + .../rules/rendering-svg-precision.md | 28 + .../rules/rendering-usetransition-loading.md | 75 + .../rules/rerender-defer-reads.md | 39 + .../rules/rerender-dependencies.md | 45 + .../rules/rerender-derived-state-no-effect.md | 40 + .../rules/rerender-derived-state.md | 29 + .../rules/rerender-functional-setstate.md | 74 + .../rules/rerender-lazy-state-init.md | 58 + .../rules/rerender-memo-with-default-value.md | 38 + .../rules/rerender-memo.md | 44 + .../rules/rerender-move-effect-to-event.md | 45 + .../rules/rerender-no-inline-components.md | 82 + .../rerender-simple-expression-in-memo.md | 35 + .../rules/rerender-split-combined-hooks.md | 64 + .../rules/rerender-transitions.md | 40 + .../rules/rerender-use-deferred-value.md | 59 + .../rerender-use-ref-transient-values.md | 73 + .../rules/server-after-nonblocking.md | 73 + .../rules/server-auth-actions.md | 96 + .../rules/server-cache-lru.md | 41 + .../rules/server-cache-react.md | 76 + .../rules/server-dedup-props.md | 65 + .../rules/server-hoist-static-io.md | 149 + .../rules/server-no-shared-module-state.md | 50 + .../rules/server-parallel-fetching.md | 83 + .../rules/server-parallel-nested-fetching.md | 34 + .../rules/server-serialization.md | 38 + .../vercel-react-native-skills/AGENTS.md | 2874 ++ .../vercel-react-native-skills/PROVENANCE.md | 19 + .../vercel-react-native-skills/README.md | 165 + .../vercel-react-native-skills/SKILL.md | 133 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../vercel-react-native-skills/metadata.json | 16 + .../rules/_sections.md | 86 + .../rules/_template.md | 28 + .../rules/animation-derived-value.md | 53 + .../rules/animation-gesture-detector-press.md | 95 + .../rules/animation-gpu-properties.md | 65 + .../design-system-compound-components.md | 66 + .../rules/fonts-config-plugin.md | 71 + .../rules/imports-design-system-folder.md | 68 + .../rules/js-hoist-intl.md | 61 + .../rules/list-performance-callbacks.md | 44 + .../list-performance-function-references.md | 132 + .../rules/list-performance-images.md | 53 + .../rules/list-performance-inline-objects.md | 97 + .../rules/list-performance-item-expensive.md | 94 + .../rules/list-performance-item-memo.md | 82 + .../rules/list-performance-item-types.md | 104 + .../rules/list-performance-virtualize.md | 67 + .../rules/monorepo-native-deps-in-app.md | 46 + .../monorepo-single-dependency-versions.md | 63 + .../rules/navigation-native-navigators.md | 188 + .../react-compiler-destructure-functions.md | 50 + ...react-compiler-reanimated-shared-values.md | 48 + .../rules/react-state-dispatcher.md | 91 + .../rules/react-state-fallback.md | 56 + .../rules/react-state-minimize.md | 65 + .../rules/rendering-no-falsy-and.md | 74 + .../rules/rendering-text-in-text-component.md | 36 + .../rules/scroll-position-no-state.md | 82 + .../rules/state-ground-truth.md | 80 + .../rules/ui-expo-image.md | 66 + .../rules/ui-image-gallery.md | 104 + .../rules/ui-measure-views.md | 78 + .../rules/ui-menus.md | 174 + .../rules/ui-native-modals.md | 77 + .../rules/ui-pressable.md | 61 + .../rules/ui-safe-area-scroll.md | 65 + .../rules/ui-scrollview-content-inset.md | 45 + .../rules/ui-styling.md | 87 + .../web-design-guidelines/PROVENANCE.md | 19 + .agents/skills/web-design-guidelines/SKILL.md | 52 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../LICENSE.web-interface-guidelines | 21 + .../references/web-interface-guidelines.md | 190 + .../android-compose-adaptive/LICENSE.txt | 202 + .../android-compose-adaptive/PROVENANCE.md | 19 + .../skills/android-compose-adaptive/SKILL.md | 316 + .../adaptive/flexbox/container-behavior.md | 112 + .../layouts/adaptive/flexbox/get-started.md | 69 + .../compose/layouts/adaptive/flexbox/index.md | 81 + .../layouts/adaptive/flexbox/item-behavior.md | 170 + .../adaptive/grid/container-properties.md | 415 + .../layouts/adaptive/grid/get-started.md | 51 + .../ui/compose/layouts/adaptive/grid/index.md | 73 + .../layouts/adaptive/grid/item-properties.md | 170 + .../layouts/adaptive/mediaquery/index.md | 333 + .../develop/ui/compose/tooling/debug.md | 114 + .../recipes/material-listdetail.md | 141 + .../skills/android-edge-to-edge/LICENSE.txt | 202 + .../skills/android-edge-to-edge/PROVENANCE.md | 19 + .claude/skills/android-edge-to-edge/SKILL.md | 441 + .claude/skills/better-accessibility/LICENSE | 21 + .../skills/better-accessibility/PROVENANCE.md | 18 + .claude/skills/better-accessibility/SKILL.md | 127 + .../better-accessibility/agents/openai.yaml | 3 + .../focus-and-keyboard.md | 131 + .claude/skills/better-accessibility/forms.md | 84 + .../skills/better-accessibility/hit-areas.md | 94 + .../better-accessibility/motion-and-zoom.md | 79 + .../better-accessibility/screen-readers.md | 101 + .../semantics-and-aria.md | 84 + .claude/skills/better-colors/LICENSE | 21 + .claude/skills/better-colors/PROVENANCE.md | 18 + .claude/skills/better-colors/SKILL.md | 121 + .../skills/better-colors/agents/openai.yaml | 3 + .claude/skills/better-colors/color-formats.md | 90 + .claude/skills/better-colors/color-usage.md | 118 + .claude/skills/better-colors/contrast.md | 79 + .../better-colors/palette-generation.md | 104 + .../skills/better-colors/palette-structure.md | 76 + .claude/skills/better-colors/token-naming.md | 97 + .claude/skills/better-interface/LICENSE | 21 + .claude/skills/better-interface/PROVENANCE.md | 18 + .claude/skills/better-interface/SKILL.md | 153 + .../better-interface/agents/openai.yaml | 3 + .../skills/better-interface/review-format.md | 46 + .claude/skills/better-layout/LICENSE | 21 + .claude/skills/better-layout/PROVENANCE.md | 18 + .claude/skills/better-layout/SKILL.md | 97 + .../skills/better-layout/agents/openai.yaml | 3 + .../better-layout/grouping-and-alignment.md | 123 + .../better-layout/spacing-and-adaptivity.md | 159 + .claude/skills/better-typography/LICENSE | 21 + .../skills/better-typography/PROVENANCE.md | 18 + .claude/skills/better-typography/SKILL.md | 178 + .../better-typography/agents/openai.yaml | 3 + .../better-typography/choosing-fonts.md | 64 + .../better-typography/css-cheat-sheet.md | 65 + .../details-and-accessibility.md | 119 + .../better-typography/spacing-and-sizing.md | 121 + .../variable-fonts-and-opentype.md | 105 + .../wrapping-and-punctuation.md | 55 + .claude/skills/better-ui/LICENSE | 21 + .claude/skills/better-ui/PROVENANCE.md | 18 + .claude/skills/better-ui/SKILL.md | 128 + .claude/skills/better-ui/agents/openai.yaml | 3 + .claude/skills/better-ui/animations.md | 205 + .claude/skills/better-ui/enter-exit.md | 147 + .claude/skills/better-ui/icon-transitions.md | 102 + .claude/skills/better-ui/icons.md | 110 + .claude/skills/better-ui/performance.md | 88 + .claude/skills/better-ui/surfaces.md | 219 + .claude/skills/better-writing/LICENSE | 21 + .claude/skills/better-writing/PROVENANCE.md | 18 + .claude/skills/better-writing/SKILL.md | 130 + .../skills/better-writing/agents/openai.yaml | 3 + .claude/skills/break/LICENSE | 21 + .claude/skills/break/PROVENANCE.md | 18 + .claude/skills/break/SKILL.md | 101 + .claude/skills/break/agents/openai.yaml | 5 + .claude/skills/break/scenarios.md | 78 + .../skills/design-taste-frontend-v1/LICENSE | 21 + .../design-taste-frontend-v1/PROVENANCE.md | 18 + .../skills/design-taste-frontend-v1/SKILL.md | 242 + .claude/skills/design-taste-frontend/LICENSE | 21 + .../design-taste-frontend/PROVENANCE.md | 19 + .claude/skills/design-taste-frontend/SKILL.md | 1223 + .claude/skills/explain-interface/LICENSE | 21 + .../skills/explain-interface/PROVENANCE.md | 21 + .claude/skills/explain-interface/SKILL.md | 146 + .../explain-interface/agents/openai.yaml | 5 + .../explain-interface/find-the-effect.md | 94 + .../skills/explain-interface/from-an-image.md | 55 + .../skills/explain-interface/no-browser.md | 47 + .../explain-interface/read-the-system.md | 178 + .claude/skills/expo-animation/LICENSE | 21 + .../skills/expo-animation/LICENSE.repository | 21 + .claude/skills/expo-animation/PROVENANCE.md | 20 + .claude/skills/expo-animation/RECIPES.md | 385 + .claude/skills/expo-animation/SKILL.md | 281 + .../skills/expo-animation/agents/openai.yaml | 4 + .claude/skills/expo-design-system/LICENSE | 21 + .../skills/expo-design-system/PROVENANCE.md | 21 + .claude/skills/expo-design-system/SKILL.md | 376 + .../expo-design-system/agents/openai.yaml | 4 + .../expo-design-system/references/audit.md | 158 + .../references/native-slop.md | 47 + .claude/skills/expo-native-ui/LICENSE | 21 + .claude/skills/expo-native-ui/PROVENANCE.md | 19 + .claude/skills/expo-native-ui/SKILL.md | 208 + .../skills/expo-native-ui/agents/openai.yaml | 4 + .../expo-native-ui/references/controls.md | 231 + .../expo-native-ui/references/gradients.md | 106 + .../skills/expo-native-ui/references/icons.md | 232 + .../skills/expo-native-ui/references/media.md | 193 + .../expo-native-ui/references/storage.md | 121 + .../references/visual-effects.md | 198 + .../expo-native-ui/references/webgpu-three.md | 605 + .claude/skills/expo-router/LICENSE | 21 + .claude/skills/expo-router/PROVENANCE.md | 19 + .claude/skills/expo-router/SKILL.md | 247 + .claude/skills/expo-router/agents/openai.yaml | 4 + .../expo-router/references/form-sheet.md | 253 + .../expo-router/references/route-structure.md | 229 + .../skills/expo-router/references/search.md | 248 + .claude/skills/expo-router/references/tabs.md | 433 + .../references/toolbar-and-headers.md | 284 + .../references/zoom-transitions.md | 158 + .claude/skills/expo-ui/LICENSE | 21 + .claude/skills/expo-ui/PROVENANCE.md | 20 + .claude/skills/expo-ui/SKILL.md | 107 + .claude/skills/expo-ui/agents/openai.yaml | 4 + .../references/drop-in-replacements.md | 27 + .../expo-ui/references/jetpack-compose.md | 73 + .claude/skills/expo-ui/references/swift-ui.md | 73 + .../skills/expo-ui/references/universal.md | 104 + .../expo-ui/scripts/list-components.mjs | 192 + .../flutter-build-responsive-layout/LICENSE | 26 + .../PROVENANCE.md | 18 + .../flutter-build-responsive-layout/SKILL.md | 154 + .../skills/flutter-fix-layout-issues/LICENSE | 26 + .../flutter-fix-layout-issues/PROVENANCE.md | 18 + .../skills/flutter-fix-layout-issues/SKILL.md | 145 + .../flutter-setup-declarative-routing/LICENSE | 26 + .../PROVENANCE.md | 18 + .../SKILL.md | 270 + .../skills/flutter-setup-localization/LICENSE | 26 + .../flutter-setup-localization/PROVENANCE.md | 18 + .../flutter-setup-localization/SKILL.md | 225 + .../skills/full-output-enforcement/LICENSE | 21 + .../full-output-enforcement/PROVENANCE.md | 18 + .../skills/full-output-enforcement/SKILL.md | 65 + .claude/skills/gpt-taste/LICENSE | 21 + .claude/skills/gpt-taste/PROVENANCE.md | 19 + .claude/skills/gpt-taste/SKILL.md | 90 + .claude/skills/high-end-visual-design/LICENSE | 21 + .../high-end-visual-design/PROVENANCE.md | 18 + .../skills/high-end-visual-design/SKILL.md | 114 + .../skills/industrial-brutalist-ui/LICENSE | 21 + .../industrial-brutalist-ui/PROVENANCE.md | 18 + .../skills/industrial-brutalist-ui/SKILL.md | 108 + .claude/skills/interface-review/LICENSE | 21 + .claude/skills/interface-review/PROVENANCE.md | 20 + .claude/skills/interface-review/SKILL.md | 170 + .../interface-review/agents/openai.yaml | 5 + .../interface-review/removed-signals.md | 36 + .../interface-review/scope-resolution.md | 88 + .claude/skills/minimalist-ui/LICENSE | 21 + .claude/skills/minimalist-ui/PROVENANCE.md | 18 + .claude/skills/minimalist-ui/SKILL.md | 101 + .../prometheus-impeccable-core/SKILL.md | 20 + .../references/LICENSE.impeccable | 191 + .../impeccable-context-and-modes.md | 19 + .../references/impeccable-craft-floor.md | 52 + .claude/skills/prometheus-ui-review/SKILL.md | 18 + .claude/skills/prometheus-ui-ux/SKILL.md | 31 + .../references/UI_UX_PROTOCOL.md | 36 + .../references/catalog.lock.json | 3118 ++ .../references/deferred-ports.md | 10 + .../prometheus-ui-ux/references/pointer.md | 6 + .../references/runtime-api.md | 57 + .../skills/prometheus-ui-ux/scripts/cli.mjs | 55 + .../prometheus-ui-ux/scripts/install.mjs | 113 + .../prometheus-ui-ux/scripts/routing.mjs | 117 + .../skills/redesign-existing-projects/LICENSE | 21 + .../redesign-existing-projects/PROVENANCE.md | 18 + .../redesign-existing-projects/SKILL.md | 194 + .../stitch-design-taste/DESIGN.stitch.md | 121 + .claude/skills/stitch-design-taste/LICENSE | 21 + .../skills/stitch-design-taste/PROVENANCE.md | 19 + .claude/skills/stitch-design-taste/SKILL.md | 200 + .claude/skills/swiftui-pro/LICENSE | 21 + .claude/skills/swiftui-pro/PROVENANCE.md | 19 + .claude/skills/swiftui-pro/SKILL.md | 121 + .claude/skills/swiftui-pro/agents/openai.yaml | 10 + .../swiftui-pro/assets/swiftui-pro-icon.png | Bin 0 -> 3117 bytes .../swiftui-pro/assets/swiftui-pro-icon.svg | 29 + .../swiftui-pro/references/accessibility.md | 13 + .claude/skills/swiftui-pro/references/api.md | 39 + .claude/skills/swiftui-pro/references/data.md | 43 + .../skills/swiftui-pro/references/design.md | 32 + .../skills/swiftui-pro/references/hygiene.md | 9 + .../swiftui-pro/references/navigation.md | 14 + .../swiftui-pro/references/performance.md | 46 + .../skills/swiftui-pro/references/swift.md | 56 + .../skills/swiftui-pro/references/views.md | 36 + .claude/skills/ui-ux-pro-max/LICENSE | 21 + .claude/skills/ui-ux-pro-max/PORT.md | 11 + .claude/skills/ui-ux-pro-max/SKILL.md | 49 + .../ui-ux-pro-max/data/app-interface.csv | 33 + .../ui-ux-pro-max/data/catalog-summary.json | 78 + .claude/skills/ui-ux-pro-max/data/charts.csv | 26 + .claude/skills/ui-ux-pro-max/data/colors.csv | 193 + .../ui-ux-pro-max/data/data-provenance.json | 1348 + .../data/google-font-licenses.json | 20185 ++++++++++ .../ui-ux-pro-max/data/google-fonts.csv | 1935 + .claude/skills/ui-ux-pro-max/data/icons.csv | 106 + .claude/skills/ui-ux-pro-max/data/landing.csv | 35 + .claude/skills/ui-ux-pro-max/data/motion.csv | 18 + .../data/phosphor-icons-upstream.json | 32582 ++++++++++++++++ .../skills/ui-ux-pro-max/data/products.csv | 193 + .../ui-ux-pro-max/data/react-performance.csv | 45 + .../ui-ux-pro-max/data/search-config.json | 977 + .../ui-ux-pro-max/data/stacks/angular.csv | 51 + .../ui-ux-pro-max/data/stacks/astro.csv | 54 + .../ui-ux-pro-max/data/stacks/avalonia.csv | 57 + .../ui-ux-pro-max/data/stacks/flutter.csv | 53 + .../data/stacks/html-tailwind.csv | 60 + .../ui-ux-pro-max/data/stacks/javafx.csv | 76 + .../data/stacks/jetpack-compose.csv | 53 + .../ui-ux-pro-max/data/stacks/laravel.csv | 51 + .../ui-ux-pro-max/data/stacks/nextjs.csv | 62 + .../ui-ux-pro-max/data/stacks/nuxt-ui.csv | 77 + .../ui-ux-pro-max/data/stacks/nuxtjs.csv | 68 + .../data/stacks/react-native.csv | 52 + .../ui-ux-pro-max/data/stacks/react.csv | 67 + .../ui-ux-pro-max/data/stacks/shadcn.csv | 69 + .../ui-ux-pro-max/data/stacks/svelte.csv | 56 + .../ui-ux-pro-max/data/stacks/swiftui.csv | 51 + .../ui-ux-pro-max/data/stacks/threejs.csv | 54 + .../skills/ui-ux-pro-max/data/stacks/uno.csv | 60 + .../skills/ui-ux-pro-max/data/stacks/uwp.csv | 56 + .../skills/ui-ux-pro-max/data/stacks/vue.csv | 50 + .../ui-ux-pro-max/data/stacks/winui.csv | 60 + .../skills/ui-ux-pro-max/data/stacks/wpf.csv | 57 + .claude/skills/ui-ux-pro-max/data/styles.csv | 89 + .../skills/ui-ux-pro-max/data/typography.csv | 75 + .../ui-ux-pro-max/data/ui-reasoning.csv | 193 + .../ui-ux-pro-max/data/ux-guidelines.csv | 120 + .claude/skills/ui-ux-pro-max/provenance.json | 71 + .../skills/ui-ux-pro-max/reference-cases.json | 2968 ++ .../ui-ux-pro-max/references/pro-rules.md | 117 + .../references/quick-reference.md | 256 + .claude/skills/ui-ux-pro-max/scripts/core.mjs | 174 + .claude/skills/ui-ux-pro-max/scripts/data.mjs | 79 + .../ui-ux-pro-max/scripts/design-system.mjs | 56 + .../skills/ui-ux-pro-max/scripts/format.mjs | 47 + .../ui-ux-pro-max/scripts/persistence.mjs | 124 + .../skills/ui-ux-pro-max/scripts/ranking.mjs | 55 + .../ui-ux-pro-max/scripts/reasoning.mjs | 78 + .../skills/ui-ux-pro-max/scripts/search.mjs | 75 + .claude/skills/variant/LICENSE | 21 + .claude/skills/variant/PROVENANCE.md | 18 + .claude/skills/variant/SKILL.md | 126 + .claude/skills/variant/agents/openai.yaml | 5 + .claude/skills/variant/picker.md | 76 + .../vercel-composition-patterns/AGENTS.md | 946 + .../vercel-composition-patterns/PROVENANCE.md | 18 + .../vercel-composition-patterns/README.md | 60 + .../vercel-composition-patterns/SKILL.md | 101 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../vercel-composition-patterns/metadata.json | 11 + .../rules/_sections.md | 29 + .../rules/_template.md | 24 + .../rules/architecture-avoid-boolean-props.md | 100 + .../rules/architecture-compound-components.md | 112 + .../patterns-children-over-render-props.md | 87 + .../rules/patterns-explicit-variants.md | 100 + .../rules/react19-no-forwardref.md | 42 + .../rules/state-context-interface.md | 191 + .../rules/state-decouple-implementation.md | 113 + .../rules/state-lift-state.md | 125 + .../vercel-react-best-practices/AGENTS.md | 3786 ++ .../vercel-react-best-practices/PROVENANCE.md | 19 + .../vercel-react-best-practices/README.md | 123 + .../vercel-react-best-practices/SKILL.md | 161 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../vercel-react-best-practices/metadata.json | 15 + .../rules/_sections.md | 46 + .../rules/_template.md | 28 + .../rules/advanced-effect-event-deps.md | 56 + .../rules/advanced-event-handler-refs.md | 55 + .../rules/advanced-init-once.md | 42 + .../rules/advanced-use-latest.md | 39 + .../rules/async-api-routes.md | 38 + .../async-cheap-condition-before-await.md | 37 + .../rules/async-defer-await.md | 82 + .../rules/async-dependencies.md | 51 + .../rules/async-parallel.md | 28 + .../rules/async-suspense-boundaries.md | 99 + .../rules/bundle-analyzable-paths.md | 63 + .../rules/bundle-barrel-imports.md | 60 + .../rules/bundle-conditional.md | 31 + .../rules/bundle-defer-third-party.md | 49 + .../rules/bundle-dynamic-imports.md | 35 + .../rules/bundle-preload.md | 50 + .../rules/client-event-listeners.md | 74 + .../rules/client-localstorage-schema.md | 71 + .../rules/client-passive-event-listeners.md | 48 + .../rules/client-swr-dedup.md | 56 + .../rules/js-batch-dom-css.md | 107 + .../rules/js-cache-function-results.md | 80 + .../rules/js-cache-property-access.md | 28 + .../rules/js-cache-storage.md | 70 + .../rules/js-combine-iterations.md | 32 + .../rules/js-early-exit.md | 50 + .../rules/js-flatmap-filter.md | 60 + .../rules/js-hoist-regexp.md | 45 + .../rules/js-index-maps.md | 37 + .../rules/js-length-check-first.md | 49 + .../rules/js-min-max-loop.md | 76 + .../rules/js-request-idle-callback.md | 105 + .../rules/js-set-map-lookups.md | 24 + .../rules/js-tosorted-immutable.md | 57 + .../rules/rendering-activity.md | 26 + .../rules/rendering-animate-svg-wrapper.md | 47 + .../rules/rendering-conditional-render.md | 40 + .../rules/rendering-content-visibility.md | 38 + .../rules/rendering-hoist-jsx.md | 46 + .../rules/rendering-hydration-no-flicker.md | 82 + .../rendering-hydration-suppress-warning.md | 30 + .../rules/rendering-resource-hints.md | 85 + .../rules/rendering-script-defer-async.md | 68 + .../rules/rendering-svg-precision.md | 28 + .../rules/rendering-usetransition-loading.md | 75 + .../rules/rerender-defer-reads.md | 39 + .../rules/rerender-dependencies.md | 45 + .../rules/rerender-derived-state-no-effect.md | 40 + .../rules/rerender-derived-state.md | 29 + .../rules/rerender-functional-setstate.md | 74 + .../rules/rerender-lazy-state-init.md | 58 + .../rules/rerender-memo-with-default-value.md | 38 + .../rules/rerender-memo.md | 44 + .../rules/rerender-move-effect-to-event.md | 45 + .../rules/rerender-no-inline-components.md | 82 + .../rerender-simple-expression-in-memo.md | 35 + .../rules/rerender-split-combined-hooks.md | 64 + .../rules/rerender-transitions.md | 40 + .../rules/rerender-use-deferred-value.md | 59 + .../rerender-use-ref-transient-values.md | 73 + .../rules/server-after-nonblocking.md | 73 + .../rules/server-auth-actions.md | 96 + .../rules/server-cache-lru.md | 41 + .../rules/server-cache-react.md | 76 + .../rules/server-dedup-props.md | 65 + .../rules/server-hoist-static-io.md | 149 + .../rules/server-no-shared-module-state.md | 50 + .../rules/server-parallel-fetching.md | 83 + .../rules/server-parallel-nested-fetching.md | 34 + .../rules/server-serialization.md | 38 + .../vercel-react-native-skills/AGENTS.md | 2874 ++ .../vercel-react-native-skills/PROVENANCE.md | 19 + .../vercel-react-native-skills/README.md | 165 + .../vercel-react-native-skills/SKILL.md | 133 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../vercel-react-native-skills/metadata.json | 16 + .../rules/_sections.md | 86 + .../rules/_template.md | 28 + .../rules/animation-derived-value.md | 53 + .../rules/animation-gesture-detector-press.md | 95 + .../rules/animation-gpu-properties.md | 65 + .../design-system-compound-components.md | 66 + .../rules/fonts-config-plugin.md | 71 + .../rules/imports-design-system-folder.md | 68 + .../rules/js-hoist-intl.md | 61 + .../rules/list-performance-callbacks.md | 44 + .../list-performance-function-references.md | 132 + .../rules/list-performance-images.md | 53 + .../rules/list-performance-inline-objects.md | 97 + .../rules/list-performance-item-expensive.md | 94 + .../rules/list-performance-item-memo.md | 82 + .../rules/list-performance-item-types.md | 104 + .../rules/list-performance-virtualize.md | 67 + .../rules/monorepo-native-deps-in-app.md | 46 + .../monorepo-single-dependency-versions.md | 63 + .../rules/navigation-native-navigators.md | 188 + .../react-compiler-destructure-functions.md | 50 + ...react-compiler-reanimated-shared-values.md | 48 + .../rules/react-state-dispatcher.md | 91 + .../rules/react-state-fallback.md | 56 + .../rules/react-state-minimize.md | 65 + .../rules/rendering-no-falsy-and.md | 74 + .../rules/rendering-text-in-text-component.md | 36 + .../rules/scroll-position-no-state.md | 82 + .../rules/state-ground-truth.md | 80 + .../rules/ui-expo-image.md | 66 + .../rules/ui-image-gallery.md | 104 + .../rules/ui-measure-views.md | 78 + .../rules/ui-menus.md | 174 + .../rules/ui-native-modals.md | 77 + .../rules/ui-pressable.md | 61 + .../rules/ui-safe-area-scroll.md | 65 + .../rules/ui-scrollview-content-inset.md | 45 + .../rules/ui-styling.md | 87 + .../web-design-guidelines/PROVENANCE.md | 19 + .claude/skills/web-design-guidelines/SKILL.md | 52 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../LICENSE.web-interface-guidelines | 21 + .../references/web-interface-guidelines.md | 190 + .gitignore | 3 + AGENTS.md | 8 + CLAUDE.md | 8 + .../skills/agent-team-creator/SKILL.md | 42 +- .../references/native-harnesses.md | 19 + .../references/project-installation.md | 72 + .../runtime/src/adapters-codecs.mts | 3 +- .../runtime/src/adapters-local.mts | 13 +- .../runtime/src/adapters.mts | 2 + .../agent-team-creator/runtime/src/cli.mts | 31 +- .../runtime/src/guidance.mts | 8 +- .../runtime/src/project-files.mts | 65 + .../runtime/src/project-install.mts | 100 + .../runtime/src/project-instructions.mts | 32 + .../runtime/src/ui-bindings.mts | 28 + .../schemas/project-routing.schema.json | 17 + .../scripts/adapters-codecs.mjs | 3 +- .../scripts/adapters-local.mjs | 13 +- .../agent-team-creator/scripts/adapters.mjs | 2 + .../skills/agent-team-creator/scripts/cli.mjs | 40 +- .../agent-team-creator/scripts/guidance.mjs | 9 +- .../scripts/project-files.mjs | 86 + .../scripts/project-install.mjs | 114 + .../scripts/project-instructions.mjs | 33 + .../scripts/ui-bindings.mjs | 27 + .../android-compose-adaptive/LICENSE.txt | 202 + .../android-compose-adaptive/PROVENANCE.md | 19 + .../skills/android-compose-adaptive/SKILL.md | 316 + .../adaptive/flexbox/container-behavior.md | 112 + .../layouts/adaptive/flexbox/get-started.md | 69 + .../compose/layouts/adaptive/flexbox/index.md | 81 + .../layouts/adaptive/flexbox/item-behavior.md | 170 + .../adaptive/grid/container-properties.md | 415 + .../layouts/adaptive/grid/get-started.md | 51 + .../ui/compose/layouts/adaptive/grid/index.md | 73 + .../layouts/adaptive/grid/item-properties.md | 170 + .../layouts/adaptive/mediaquery/index.md | 333 + .../develop/ui/compose/tooling/debug.md | 114 + .../recipes/material-listdetail.md | 141 + .../skills/android-edge-to-edge/LICENSE.txt | 202 + .../skills/android-edge-to-edge/PROVENANCE.md | 19 + .../skills/android-edge-to-edge/SKILL.md | 441 + .../skills/better-accessibility/LICENSE | 21 + .../skills/better-accessibility/PROVENANCE.md | 18 + .../skills/better-accessibility/SKILL.md | 127 + .../better-accessibility/agents/openai.yaml | 3 + .../focus-and-keyboard.md | 131 + .../skills/better-accessibility/forms.md | 84 + .../skills/better-accessibility/hit-areas.md | 94 + .../better-accessibility/motion-and-zoom.md | 79 + .../better-accessibility/screen-readers.md | 101 + .../semantics-and-aria.md | 84 + .../skills/better-colors/LICENSE | 21 + .../skills/better-colors/PROVENANCE.md | 18 + .../skills/better-colors/SKILL.md | 121 + .../skills/better-colors/agents/openai.yaml | 3 + .../skills/better-colors/color-formats.md | 90 + .../skills/better-colors/color-usage.md | 118 + .../skills/better-colors/contrast.md | 79 + .../better-colors/palette-generation.md | 104 + .../skills/better-colors/palette-structure.md | 76 + .../skills/better-colors/token-naming.md | 97 + .../skills/better-interface/LICENSE | 21 + .../skills/better-interface/PROVENANCE.md | 18 + .../skills/better-interface/SKILL.md | 153 + .../better-interface/agents/openai.yaml | 3 + .../skills/better-interface/review-format.md | 46 + .../skills/better-layout/LICENSE | 21 + .../skills/better-layout/PROVENANCE.md | 18 + .../skills/better-layout/SKILL.md | 97 + .../skills/better-layout/agents/openai.yaml | 3 + .../better-layout/grouping-and-alignment.md | 123 + .../better-layout/spacing-and-adaptivity.md | 159 + .../skills/better-typography/LICENSE | 21 + .../skills/better-typography/PROVENANCE.md | 18 + .../skills/better-typography/SKILL.md | 178 + .../better-typography/agents/openai.yaml | 3 + .../better-typography/choosing-fonts.md | 64 + .../better-typography/css-cheat-sheet.md | 65 + .../details-and-accessibility.md | 119 + .../better-typography/spacing-and-sizing.md | 121 + .../variable-fonts-and-opentype.md | 105 + .../wrapping-and-punctuation.md | 55 + .../skills/better-ui/LICENSE | 21 + .../skills/better-ui/PROVENANCE.md | 18 + .../skills/better-ui/SKILL.md | 128 + .../skills/better-ui/agents/openai.yaml | 3 + .../skills/better-ui/animations.md | 205 + .../skills/better-ui/enter-exit.md | 147 + .../skills/better-ui/icon-transitions.md | 102 + .../skills/better-ui/icons.md | 110 + .../skills/better-ui/performance.md | 88 + .../skills/better-ui/surfaces.md | 219 + .../skills/better-writing/LICENSE | 21 + .../skills/better-writing/PROVENANCE.md | 18 + .../skills/better-writing/SKILL.md | 130 + .../skills/better-writing/agents/openai.yaml | 3 + .../skills/break/LICENSE | 21 + .../skills/break/PROVENANCE.md | 18 + .../skills/break/SKILL.md | 101 + .../skills/break/agents/openai.yaml | 5 + .../skills/break/scenarios.md | 78 + .../skills/design-taste-frontend-v1/LICENSE | 21 + .../design-taste-frontend-v1/PROVENANCE.md | 18 + .../skills/design-taste-frontend-v1/SKILL.md | 242 + .../skills/design-taste-frontend/LICENSE | 21 + .../design-taste-frontend/PROVENANCE.md | 19 + .../skills/design-taste-frontend/SKILL.md | 1223 + .../skills/explain-interface/LICENSE | 21 + .../skills/explain-interface/PROVENANCE.md | 21 + .../skills/explain-interface/SKILL.md | 146 + .../explain-interface/agents/openai.yaml | 5 + .../explain-interface/find-the-effect.md | 94 + .../skills/explain-interface/from-an-image.md | 55 + .../skills/explain-interface/no-browser.md | 47 + .../explain-interface/read-the-system.md | 178 + .../skills/expo-animation/LICENSE | 21 + .../skills/expo-animation/LICENSE.repository | 21 + .../skills/expo-animation/PROVENANCE.md | 20 + .../skills/expo-animation/RECIPES.md | 385 + .../skills/expo-animation/SKILL.md | 281 + .../skills/expo-animation/agents/openai.yaml | 4 + .../skills/expo-design-system/LICENSE | 21 + .../skills/expo-design-system/PROVENANCE.md | 21 + .../skills/expo-design-system/SKILL.md | 376 + .../expo-design-system/agents/openai.yaml | 4 + .../expo-design-system/references/audit.md | 158 + .../references/native-slop.md | 47 + .../skills/expo-native-ui/LICENSE | 21 + .../skills/expo-native-ui/PROVENANCE.md | 19 + .../skills/expo-native-ui/SKILL.md | 208 + .../skills/expo-native-ui/agents/openai.yaml | 4 + .../expo-native-ui/references/controls.md | 231 + .../expo-native-ui/references/gradients.md | 106 + .../skills/expo-native-ui/references/icons.md | 232 + .../skills/expo-native-ui/references/media.md | 193 + .../expo-native-ui/references/storage.md | 121 + .../references/visual-effects.md | 198 + .../expo-native-ui/references/webgpu-three.md | 605 + .../skills/expo-router/LICENSE | 21 + .../skills/expo-router/PROVENANCE.md | 19 + .../skills/expo-router/SKILL.md | 247 + .../skills/expo-router/agents/openai.yaml | 4 + .../expo-router/references/form-sheet.md | 253 + .../expo-router/references/route-structure.md | 229 + .../skills/expo-router/references/search.md | 248 + .../skills/expo-router/references/tabs.md | 433 + .../references/toolbar-and-headers.md | 284 + .../references/zoom-transitions.md | 158 + .../skills/expo-ui/LICENSE | 21 + .../skills/expo-ui/PROVENANCE.md | 20 + .../skills/expo-ui/SKILL.md | 107 + .../skills/expo-ui/agents/openai.yaml | 4 + .../references/drop-in-replacements.md | 27 + .../expo-ui/references/jetpack-compose.md | 73 + .../skills/expo-ui/references/swift-ui.md | 73 + .../skills/expo-ui/references/universal.md | 104 + .../expo-ui/scripts/list-components.mjs | 192 + .../flutter-build-responsive-layout/LICENSE | 26 + .../PROVENANCE.md | 18 + .../flutter-build-responsive-layout/SKILL.md | 154 + .../skills/flutter-fix-layout-issues/LICENSE | 26 + .../flutter-fix-layout-issues/PROVENANCE.md | 18 + .../skills/flutter-fix-layout-issues/SKILL.md | 145 + .../flutter-setup-declarative-routing/LICENSE | 26 + .../PROVENANCE.md | 18 + .../SKILL.md | 270 + .../skills/flutter-setup-localization/LICENSE | 26 + .../flutter-setup-localization/PROVENANCE.md | 18 + .../flutter-setup-localization/SKILL.md | 225 + .../skills/full-output-enforcement/LICENSE | 21 + .../full-output-enforcement/PROVENANCE.md | 18 + .../skills/full-output-enforcement/SKILL.md | 65 + .../skills/gpt-taste/LICENSE | 21 + .../skills/gpt-taste/PROVENANCE.md | 19 + .../skills/gpt-taste/SKILL.md | 90 + .../skills/high-end-visual-design/LICENSE | 21 + .../high-end-visual-design/PROVENANCE.md | 18 + .../skills/high-end-visual-design/SKILL.md | 114 + .../skills/industrial-brutalist-ui/LICENSE | 21 + .../industrial-brutalist-ui/PROVENANCE.md | 18 + .../skills/industrial-brutalist-ui/SKILL.md | 108 + .../skills/interface-review/LICENSE | 21 + .../skills/interface-review/PROVENANCE.md | 20 + .../skills/interface-review/SKILL.md | 170 + .../interface-review/agents/openai.yaml | 5 + .../interface-review/removed-signals.md | 36 + .../interface-review/scope-resolution.md | 88 + .../references/template-uiux-routing.md | 59 +- .../skills/minimalist-ui/LICENSE | 21 + .../skills/minimalist-ui/PROVENANCE.md | 18 + .../skills/minimalist-ui/SKILL.md | 101 + .../prometheus-context-bootstrap/SKILL.md | 3 + .../prometheus-impeccable-core/SKILL.md | 20 + .../references/LICENSE.impeccable | 191 + .../impeccable-context-and-modes.md | 19 + .../references/impeccable-craft-floor.md | 52 + .../skills/prometheus-ui-review/SKILL.md | 18 + .../skills/prometheus-ui-ux/SKILL.md | 31 + .../references/UI_UX_PROTOCOL.md | 36 + .../references/catalog.lock.json | 3118 ++ .../references/deferred-ports.md | 10 + .../prometheus-ui-ux/references/pointer.md | 6 + .../references/runtime-api.md | 57 + .../prometheus-ui-ux/runtime/package.json | 16 + .../prometheus-ui-ux/runtime/src/cli.mts | 36 + .../prometheus-ui-ux/runtime/src/install.mts | 98 + .../prometheus-ui-ux/runtime/src/routing.mts | 70 + .../prometheus-ui-ux/runtime/tsconfig.json | 19 + .../skills/prometheus-ui-ux/scripts/cli.mjs | 55 + .../prometheus-ui-ux/scripts/install.mjs | 113 + .../prometheus-ui-ux/scripts/routing.mjs | 117 + .../skills/redesign-existing-projects/LICENSE | 21 + .../redesign-existing-projects/PROVENANCE.md | 18 + .../redesign-existing-projects/SKILL.md | 194 + .../stitch-design-taste/DESIGN.stitch.md | 121 + .../skills/stitch-design-taste/LICENSE | 21 + .../skills/stitch-design-taste/PROVENANCE.md | 19 + .../skills/stitch-design-taste/SKILL.md | 200 + .../skills/swiftui-pro/LICENSE | 21 + .../skills/swiftui-pro/PROVENANCE.md | 19 + .../skills/swiftui-pro/SKILL.md | 121 + .../skills/swiftui-pro/agents/openai.yaml | 10 + .../swiftui-pro/assets/swiftui-pro-icon.png | Bin 0 -> 3117 bytes .../swiftui-pro/assets/swiftui-pro-icon.svg | 29 + .../swiftui-pro/references/accessibility.md | 13 + .../skills/swiftui-pro/references/api.md | 39 + .../skills/swiftui-pro/references/data.md | 43 + .../skills/swiftui-pro/references/design.md | 32 + .../skills/swiftui-pro/references/hygiene.md | 9 + .../swiftui-pro/references/navigation.md | 14 + .../swiftui-pro/references/performance.md | 46 + .../skills/swiftui-pro/references/swift.md | 56 + .../skills/swiftui-pro/references/views.md | 36 + .../skills/ui-ux-pro-max/LICENSE | 21 + .../skills/ui-ux-pro-max/PORT.md | 11 + .../skills/ui-ux-pro-max/SKILL.md | 49 + .../ui-ux-pro-max/data/app-interface.csv | 33 + .../ui-ux-pro-max/data/catalog-summary.json | 78 + .../skills/ui-ux-pro-max/data/charts.csv | 26 + .../skills/ui-ux-pro-max/data/colors.csv | 193 + .../ui-ux-pro-max/data/data-provenance.json | 1348 + .../data/google-font-licenses.json | 20185 ++++++++++ .../ui-ux-pro-max/data/google-fonts.csv | 1935 + .../skills/ui-ux-pro-max/data/icons.csv | 106 + .../skills/ui-ux-pro-max/data/landing.csv | 35 + .../skills/ui-ux-pro-max/data/motion.csv | 18 + .../data/phosphor-icons-upstream.json | 32582 ++++++++++++++++ .../skills/ui-ux-pro-max/data/products.csv | 193 + .../ui-ux-pro-max/data/react-performance.csv | 45 + .../ui-ux-pro-max/data/search-config.json | 977 + .../ui-ux-pro-max/data/stacks/angular.csv | 51 + .../ui-ux-pro-max/data/stacks/astro.csv | 54 + .../ui-ux-pro-max/data/stacks/avalonia.csv | 57 + .../ui-ux-pro-max/data/stacks/flutter.csv | 53 + .../data/stacks/html-tailwind.csv | 60 + .../ui-ux-pro-max/data/stacks/javafx.csv | 76 + .../data/stacks/jetpack-compose.csv | 53 + .../ui-ux-pro-max/data/stacks/laravel.csv | 51 + .../ui-ux-pro-max/data/stacks/nextjs.csv | 62 + .../ui-ux-pro-max/data/stacks/nuxt-ui.csv | 77 + .../ui-ux-pro-max/data/stacks/nuxtjs.csv | 68 + .../data/stacks/react-native.csv | 52 + .../ui-ux-pro-max/data/stacks/react.csv | 67 + .../ui-ux-pro-max/data/stacks/shadcn.csv | 69 + .../ui-ux-pro-max/data/stacks/svelte.csv | 56 + .../ui-ux-pro-max/data/stacks/swiftui.csv | 51 + .../ui-ux-pro-max/data/stacks/threejs.csv | 54 + .../skills/ui-ux-pro-max/data/stacks/uno.csv | 60 + .../skills/ui-ux-pro-max/data/stacks/uwp.csv | 56 + .../skills/ui-ux-pro-max/data/stacks/vue.csv | 50 + .../ui-ux-pro-max/data/stacks/winui.csv | 60 + .../skills/ui-ux-pro-max/data/stacks/wpf.csv | 57 + .../skills/ui-ux-pro-max/data/styles.csv | 89 + .../skills/ui-ux-pro-max/data/typography.csv | 75 + .../ui-ux-pro-max/data/ui-reasoning.csv | 193 + .../ui-ux-pro-max/data/ux-guidelines.csv | 120 + .../skills/ui-ux-pro-max/provenance.json | 71 + .../skills/ui-ux-pro-max/reference-cases.json | 2968 ++ .../ui-ux-pro-max/references/pro-rules.md | 117 + .../references/quick-reference.md | 256 + .../skills/ui-ux-pro-max/runtime/.gitignore | 1 + .../ui-ux-pro-max/runtime/package-lock.json | 411 + .../skills/ui-ux-pro-max/runtime/package.json | 9 + .../skills/ui-ux-pro-max/runtime/src/core.mts | 58 + .../skills/ui-ux-pro-max/runtime/src/data.mts | 43 + .../runtime/src/design-system.mts | 39 + .../ui-ux-pro-max/runtime/src/format.mts | 16 + .../ui-ux-pro-max/runtime/src/persistence.mts | 30 + .../ui-ux-pro-max/runtime/src/ranking.mts | 29 + .../ui-ux-pro-max/runtime/src/reasoning.mts | 22 + .../ui-ux-pro-max/runtime/src/search.mts | 22 + .../ui-ux-pro-max/runtime/tsconfig.json | 14 + .../skills/ui-ux-pro-max/scripts/core.mjs | 174 + .../skills/ui-ux-pro-max/scripts/data.mjs | 79 + .../ui-ux-pro-max/scripts/design-system.mjs | 56 + .../skills/ui-ux-pro-max/scripts/format.mjs | 47 + .../ui-ux-pro-max/scripts/persistence.mjs | 124 + .../skills/ui-ux-pro-max/scripts/ranking.mjs | 55 + .../ui-ux-pro-max/scripts/reasoning.mjs | 78 + .../skills/ui-ux-pro-max/scripts/search.mjs | 75 + .../skills/variant/LICENSE | 21 + .../skills/variant/PROVENANCE.md | 18 + .../skills/variant/SKILL.md | 126 + .../skills/variant/agents/openai.yaml | 5 + .../skills/variant/picker.md | 76 + .../vercel-composition-patterns/AGENTS.md | 946 + .../vercel-composition-patterns/PROVENANCE.md | 18 + .../vercel-composition-patterns/README.md | 60 + .../vercel-composition-patterns/SKILL.md | 101 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../vercel-composition-patterns/metadata.json | 11 + .../rules/_sections.md | 29 + .../rules/_template.md | 24 + .../rules/architecture-avoid-boolean-props.md | 100 + .../rules/architecture-compound-components.md | 112 + .../patterns-children-over-render-props.md | 87 + .../rules/patterns-explicit-variants.md | 100 + .../rules/react19-no-forwardref.md | 42 + .../rules/state-context-interface.md | 191 + .../rules/state-decouple-implementation.md | 113 + .../rules/state-lift-state.md | 125 + .../vercel-react-best-practices/AGENTS.md | 3786 ++ .../vercel-react-best-practices/PROVENANCE.md | 19 + .../vercel-react-best-practices/README.md | 123 + .../vercel-react-best-practices/SKILL.md | 161 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../vercel-react-best-practices/metadata.json | 15 + .../rules/_sections.md | 46 + .../rules/_template.md | 28 + .../rules/advanced-effect-event-deps.md | 56 + .../rules/advanced-event-handler-refs.md | 55 + .../rules/advanced-init-once.md | 42 + .../rules/advanced-use-latest.md | 39 + .../rules/async-api-routes.md | 38 + .../async-cheap-condition-before-await.md | 37 + .../rules/async-defer-await.md | 82 + .../rules/async-dependencies.md | 51 + .../rules/async-parallel.md | 28 + .../rules/async-suspense-boundaries.md | 99 + .../rules/bundle-analyzable-paths.md | 63 + .../rules/bundle-barrel-imports.md | 60 + .../rules/bundle-conditional.md | 31 + .../rules/bundle-defer-third-party.md | 49 + .../rules/bundle-dynamic-imports.md | 35 + .../rules/bundle-preload.md | 50 + .../rules/client-event-listeners.md | 74 + .../rules/client-localstorage-schema.md | 71 + .../rules/client-passive-event-listeners.md | 48 + .../rules/client-swr-dedup.md | 56 + .../rules/js-batch-dom-css.md | 107 + .../rules/js-cache-function-results.md | 80 + .../rules/js-cache-property-access.md | 28 + .../rules/js-cache-storage.md | 70 + .../rules/js-combine-iterations.md | 32 + .../rules/js-early-exit.md | 50 + .../rules/js-flatmap-filter.md | 60 + .../rules/js-hoist-regexp.md | 45 + .../rules/js-index-maps.md | 37 + .../rules/js-length-check-first.md | 49 + .../rules/js-min-max-loop.md | 76 + .../rules/js-request-idle-callback.md | 105 + .../rules/js-set-map-lookups.md | 24 + .../rules/js-tosorted-immutable.md | 57 + .../rules/rendering-activity.md | 26 + .../rules/rendering-animate-svg-wrapper.md | 47 + .../rules/rendering-conditional-render.md | 40 + .../rules/rendering-content-visibility.md | 38 + .../rules/rendering-hoist-jsx.md | 46 + .../rules/rendering-hydration-no-flicker.md | 82 + .../rendering-hydration-suppress-warning.md | 30 + .../rules/rendering-resource-hints.md | 85 + .../rules/rendering-script-defer-async.md | 68 + .../rules/rendering-svg-precision.md | 28 + .../rules/rendering-usetransition-loading.md | 75 + .../rules/rerender-defer-reads.md | 39 + .../rules/rerender-dependencies.md | 45 + .../rules/rerender-derived-state-no-effect.md | 40 + .../rules/rerender-derived-state.md | 29 + .../rules/rerender-functional-setstate.md | 74 + .../rules/rerender-lazy-state-init.md | 58 + .../rules/rerender-memo-with-default-value.md | 38 + .../rules/rerender-memo.md | 44 + .../rules/rerender-move-effect-to-event.md | 45 + .../rules/rerender-no-inline-components.md | 82 + .../rerender-simple-expression-in-memo.md | 35 + .../rules/rerender-split-combined-hooks.md | 64 + .../rules/rerender-transitions.md | 40 + .../rules/rerender-use-deferred-value.md | 59 + .../rerender-use-ref-transient-values.md | 73 + .../rules/server-after-nonblocking.md | 73 + .../rules/server-auth-actions.md | 96 + .../rules/server-cache-lru.md | 41 + .../rules/server-cache-react.md | 76 + .../rules/server-dedup-props.md | 65 + .../rules/server-hoist-static-io.md | 149 + .../rules/server-no-shared-module-state.md | 50 + .../rules/server-parallel-fetching.md | 83 + .../rules/server-parallel-nested-fetching.md | 34 + .../rules/server-serialization.md | 38 + .../vercel-react-native-skills/AGENTS.md | 2874 ++ .../vercel-react-native-skills/PROVENANCE.md | 19 + .../vercel-react-native-skills/README.md | 165 + .../vercel-react-native-skills/SKILL.md | 133 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../vercel-react-native-skills/metadata.json | 16 + .../rules/_sections.md | 86 + .../rules/_template.md | 28 + .../rules/animation-derived-value.md | 53 + .../rules/animation-gesture-detector-press.md | 95 + .../rules/animation-gpu-properties.md | 65 + .../design-system-compound-components.md | 66 + .../rules/fonts-config-plugin.md | 71 + .../rules/imports-design-system-folder.md | 68 + .../rules/js-hoist-intl.md | 61 + .../rules/list-performance-callbacks.md | 44 + .../list-performance-function-references.md | 132 + .../rules/list-performance-images.md | 53 + .../rules/list-performance-inline-objects.md | 97 + .../rules/list-performance-item-expensive.md | 94 + .../rules/list-performance-item-memo.md | 82 + .../rules/list-performance-item-types.md | 104 + .../rules/list-performance-virtualize.md | 67 + .../rules/monorepo-native-deps-in-app.md | 46 + .../monorepo-single-dependency-versions.md | 63 + .../rules/navigation-native-navigators.md | 188 + .../react-compiler-destructure-functions.md | 50 + ...react-compiler-reanimated-shared-values.md | 48 + .../rules/react-state-dispatcher.md | 91 + .../rules/react-state-fallback.md | 56 + .../rules/react-state-minimize.md | 65 + .../rules/rendering-no-falsy-and.md | 74 + .../rules/rendering-text-in-text-component.md | 36 + .../rules/scroll-position-no-state.md | 82 + .../rules/state-ground-truth.md | 80 + .../rules/ui-expo-image.md | 66 + .../rules/ui-image-gallery.md | 104 + .../rules/ui-measure-views.md | 78 + .../rules/ui-menus.md | 174 + .../rules/ui-native-modals.md | 77 + .../rules/ui-pressable.md | 61 + .../rules/ui-safe-area-scroll.md | 65 + .../rules/ui-scrollview-content-inset.md | 45 + .../rules/ui-styling.md | 87 + .../web-design-guidelines/PROVENANCE.md | 19 + .../skills/web-design-guidelines/SKILL.md | 52 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../LICENSE.web-interface-guidelines | 21 + .../references/web-interface-guidelines.md | 190 + .../skills/agent-team-creator/SKILL.md | 42 +- .../references/native-harnesses.md | 19 + .../references/project-installation.md | 72 + .../runtime/src/adapters-codecs.mts | 3 +- .../runtime/src/adapters-local.mts | 13 +- .../runtime/src/adapters.mts | 2 + .../agent-team-creator/runtime/src/cli.mts | 31 +- .../runtime/src/guidance.mts | 8 +- .../runtime/src/project-files.mts | 65 + .../runtime/src/project-install.mts | 100 + .../runtime/src/project-instructions.mts | 32 + .../runtime/src/ui-bindings.mts | 28 + .../schemas/project-routing.schema.json | 17 + .../scripts/adapters-codecs.mjs | 3 +- .../scripts/adapters-local.mjs | 13 +- .../agent-team-creator/scripts/adapters.mjs | 2 + .../skills/agent-team-creator/scripts/cli.mjs | 40 +- .../agent-team-creator/scripts/guidance.mjs | 9 +- .../scripts/project-files.mjs | 86 + .../scripts/project-install.mjs | 114 + .../scripts/project-instructions.mjs | 33 + .../scripts/ui-bindings.mjs | 27 + .../android-compose-adaptive/LICENSE.txt | 202 + .../android-compose-adaptive/PROVENANCE.md | 19 + .../skills/android-compose-adaptive/SKILL.md | 316 + .../adaptive/flexbox/container-behavior.md | 112 + .../layouts/adaptive/flexbox/get-started.md | 69 + .../compose/layouts/adaptive/flexbox/index.md | 81 + .../layouts/adaptive/flexbox/item-behavior.md | 170 + .../adaptive/grid/container-properties.md | 415 + .../layouts/adaptive/grid/get-started.md | 51 + .../ui/compose/layouts/adaptive/grid/index.md | 73 + .../layouts/adaptive/grid/item-properties.md | 170 + .../layouts/adaptive/mediaquery/index.md | 333 + .../develop/ui/compose/tooling/debug.md | 114 + .../recipes/material-listdetail.md | 141 + .../skills/android-edge-to-edge/LICENSE.txt | 202 + .../skills/android-edge-to-edge/PROVENANCE.md | 19 + .../skills/android-edge-to-edge/SKILL.md | 441 + .../skills/better-accessibility/LICENSE | 21 + .../skills/better-accessibility/PROVENANCE.md | 18 + .../skills/better-accessibility/SKILL.md | 127 + .../better-accessibility/agents/openai.yaml | 3 + .../focus-and-keyboard.md | 131 + .../skills/better-accessibility/forms.md | 84 + .../skills/better-accessibility/hit-areas.md | 94 + .../better-accessibility/motion-and-zoom.md | 79 + .../better-accessibility/screen-readers.md | 101 + .../semantics-and-aria.md | 84 + .../skills/better-colors/LICENSE | 21 + .../skills/better-colors/PROVENANCE.md | 18 + .../skills/better-colors/SKILL.md | 121 + .../skills/better-colors/agents/openai.yaml | 3 + .../skills/better-colors/color-formats.md | 90 + .../skills/better-colors/color-usage.md | 118 + .../skills/better-colors/contrast.md | 79 + .../better-colors/palette-generation.md | 104 + .../skills/better-colors/palette-structure.md | 76 + .../skills/better-colors/token-naming.md | 97 + .../skills/better-interface/LICENSE | 21 + .../skills/better-interface/PROVENANCE.md | 18 + .../skills/better-interface/SKILL.md | 153 + .../better-interface/agents/openai.yaml | 3 + .../skills/better-interface/review-format.md | 46 + .../skills/better-layout/LICENSE | 21 + .../skills/better-layout/PROVENANCE.md | 18 + .../skills/better-layout/SKILL.md | 97 + .../skills/better-layout/agents/openai.yaml | 3 + .../better-layout/grouping-and-alignment.md | 123 + .../better-layout/spacing-and-adaptivity.md | 159 + .../skills/better-typography/LICENSE | 21 + .../skills/better-typography/PROVENANCE.md | 18 + .../skills/better-typography/SKILL.md | 178 + .../better-typography/agents/openai.yaml | 3 + .../better-typography/choosing-fonts.md | 64 + .../better-typography/css-cheat-sheet.md | 65 + .../details-and-accessibility.md | 119 + .../better-typography/spacing-and-sizing.md | 121 + .../variable-fonts-and-opentype.md | 105 + .../wrapping-and-punctuation.md | 55 + .../skills/better-ui/LICENSE | 21 + .../skills/better-ui/PROVENANCE.md | 18 + .../skills/better-ui/SKILL.md | 128 + .../skills/better-ui/agents/openai.yaml | 3 + .../skills/better-ui/animations.md | 205 + .../skills/better-ui/enter-exit.md | 147 + .../skills/better-ui/icon-transitions.md | 102 + .../skills/better-ui/icons.md | 110 + .../skills/better-ui/performance.md | 88 + .../skills/better-ui/surfaces.md | 219 + .../skills/better-writing/LICENSE | 21 + .../skills/better-writing/PROVENANCE.md | 18 + .../skills/better-writing/SKILL.md | 130 + .../skills/better-writing/agents/openai.yaml | 3 + .../skills/break/LICENSE | 21 + .../skills/break/PROVENANCE.md | 18 + .../skills/break/SKILL.md | 101 + .../skills/break/agents/openai.yaml | 5 + .../skills/break/scenarios.md | 78 + .../skills/design-taste-frontend-v1/LICENSE | 21 + .../design-taste-frontend-v1/PROVENANCE.md | 18 + .../skills/design-taste-frontend-v1/SKILL.md | 242 + .../skills/design-taste-frontend/LICENSE | 21 + .../design-taste-frontend/PROVENANCE.md | 19 + .../skills/design-taste-frontend/SKILL.md | 1223 + .../skills/explain-interface/LICENSE | 21 + .../skills/explain-interface/PROVENANCE.md | 21 + .../skills/explain-interface/SKILL.md | 146 + .../explain-interface/agents/openai.yaml | 5 + .../explain-interface/find-the-effect.md | 94 + .../skills/explain-interface/from-an-image.md | 55 + .../skills/explain-interface/no-browser.md | 47 + .../explain-interface/read-the-system.md | 178 + .../skills/expo-animation/LICENSE | 21 + .../skills/expo-animation/LICENSE.repository | 21 + .../skills/expo-animation/PROVENANCE.md | 20 + .../skills/expo-animation/RECIPES.md | 385 + .../skills/expo-animation/SKILL.md | 281 + .../skills/expo-animation/agents/openai.yaml | 4 + .../skills/expo-design-system/LICENSE | 21 + .../skills/expo-design-system/PROVENANCE.md | 21 + .../skills/expo-design-system/SKILL.md | 376 + .../expo-design-system/agents/openai.yaml | 4 + .../expo-design-system/references/audit.md | 158 + .../references/native-slop.md | 47 + .../skills/expo-native-ui/LICENSE | 21 + .../skills/expo-native-ui/PROVENANCE.md | 19 + .../skills/expo-native-ui/SKILL.md | 208 + .../skills/expo-native-ui/agents/openai.yaml | 4 + .../expo-native-ui/references/controls.md | 231 + .../expo-native-ui/references/gradients.md | 106 + .../skills/expo-native-ui/references/icons.md | 232 + .../skills/expo-native-ui/references/media.md | 193 + .../expo-native-ui/references/storage.md | 121 + .../references/visual-effects.md | 198 + .../expo-native-ui/references/webgpu-three.md | 605 + .../skills/expo-router/LICENSE | 21 + .../skills/expo-router/PROVENANCE.md | 19 + .../skills/expo-router/SKILL.md | 247 + .../skills/expo-router/agents/openai.yaml | 4 + .../expo-router/references/form-sheet.md | 253 + .../expo-router/references/route-structure.md | 229 + .../skills/expo-router/references/search.md | 248 + .../skills/expo-router/references/tabs.md | 433 + .../references/toolbar-and-headers.md | 284 + .../references/zoom-transitions.md | 158 + .../skills/expo-ui/LICENSE | 21 + .../skills/expo-ui/PROVENANCE.md | 20 + .../skills/expo-ui/SKILL.md | 107 + .../skills/expo-ui/agents/openai.yaml | 4 + .../references/drop-in-replacements.md | 27 + .../expo-ui/references/jetpack-compose.md | 73 + .../skills/expo-ui/references/swift-ui.md | 73 + .../skills/expo-ui/references/universal.md | 104 + .../expo-ui/scripts/list-components.mjs | 192 + .../flutter-build-responsive-layout/LICENSE | 26 + .../PROVENANCE.md | 18 + .../flutter-build-responsive-layout/SKILL.md | 154 + .../skills/flutter-fix-layout-issues/LICENSE | 26 + .../flutter-fix-layout-issues/PROVENANCE.md | 18 + .../skills/flutter-fix-layout-issues/SKILL.md | 145 + .../flutter-setup-declarative-routing/LICENSE | 26 + .../PROVENANCE.md | 18 + .../SKILL.md | 270 + .../skills/flutter-setup-localization/LICENSE | 26 + .../flutter-setup-localization/PROVENANCE.md | 18 + .../flutter-setup-localization/SKILL.md | 225 + .../skills/full-output-enforcement/LICENSE | 21 + .../full-output-enforcement/PROVENANCE.md | 18 + .../skills/full-output-enforcement/SKILL.md | 65 + .../skills/gpt-taste/LICENSE | 21 + .../skills/gpt-taste/PROVENANCE.md | 19 + .../skills/gpt-taste/SKILL.md | 90 + .../skills/high-end-visual-design/LICENSE | 21 + .../high-end-visual-design/PROVENANCE.md | 18 + .../skills/high-end-visual-design/SKILL.md | 114 + .../skills/industrial-brutalist-ui/LICENSE | 21 + .../industrial-brutalist-ui/PROVENANCE.md | 18 + .../skills/industrial-brutalist-ui/SKILL.md | 108 + .../skills/interface-review/LICENSE | 21 + .../skills/interface-review/PROVENANCE.md | 20 + .../skills/interface-review/SKILL.md | 170 + .../interface-review/agents/openai.yaml | 5 + .../interface-review/removed-signals.md | 36 + .../interface-review/scope-resolution.md | 88 + .../references/template-uiux-routing.md | 59 +- .../skills/minimalist-ui/LICENSE | 21 + .../skills/minimalist-ui/PROVENANCE.md | 18 + .../skills/minimalist-ui/SKILL.md | 101 + .../prometheus-context-bootstrap/SKILL.md | 3 + .../prometheus-impeccable-core/SKILL.md | 20 + .../references/LICENSE.impeccable | 191 + .../impeccable-context-and-modes.md | 19 + .../references/impeccable-craft-floor.md | 52 + .../skills/prometheus-ui-review/SKILL.md | 18 + .../skills/prometheus-ui-ux/SKILL.md | 31 + .../references/UI_UX_PROTOCOL.md | 36 + .../references/catalog.lock.json | 3118 ++ .../references/deferred-ports.md | 10 + .../prometheus-ui-ux/references/pointer.md | 6 + .../references/runtime-api.md | 57 + .../prometheus-ui-ux/runtime/package.json | 16 + .../prometheus-ui-ux/runtime/src/cli.mts | 36 + .../prometheus-ui-ux/runtime/src/install.mts | 98 + .../prometheus-ui-ux/runtime/src/routing.mts | 70 + .../prometheus-ui-ux/runtime/tsconfig.json | 19 + .../skills/prometheus-ui-ux/scripts/cli.mjs | 55 + .../prometheus-ui-ux/scripts/install.mjs | 113 + .../prometheus-ui-ux/scripts/routing.mjs | 117 + .../skills/redesign-existing-projects/LICENSE | 21 + .../redesign-existing-projects/PROVENANCE.md | 18 + .../redesign-existing-projects/SKILL.md | 194 + .../stitch-design-taste/DESIGN.stitch.md | 121 + .../skills/stitch-design-taste/LICENSE | 21 + .../skills/stitch-design-taste/PROVENANCE.md | 19 + .../skills/stitch-design-taste/SKILL.md | 200 + .../skills/swiftui-pro/LICENSE | 21 + .../skills/swiftui-pro/PROVENANCE.md | 19 + .../skills/swiftui-pro/SKILL.md | 121 + .../skills/swiftui-pro/agents/openai.yaml | 10 + .../swiftui-pro/assets/swiftui-pro-icon.png | Bin 0 -> 3117 bytes .../swiftui-pro/assets/swiftui-pro-icon.svg | 29 + .../swiftui-pro/references/accessibility.md | 13 + .../skills/swiftui-pro/references/api.md | 39 + .../skills/swiftui-pro/references/data.md | 43 + .../skills/swiftui-pro/references/design.md | 32 + .../skills/swiftui-pro/references/hygiene.md | 9 + .../swiftui-pro/references/navigation.md | 14 + .../swiftui-pro/references/performance.md | 46 + .../skills/swiftui-pro/references/swift.md | 56 + .../skills/swiftui-pro/references/views.md | 36 + .../skills/ui-ux-pro-max/LICENSE | 21 + .../skills/ui-ux-pro-max/PORT.md | 11 + .../skills/ui-ux-pro-max/SKILL.md | 49 + .../ui-ux-pro-max/data/app-interface.csv | 33 + .../ui-ux-pro-max/data/catalog-summary.json | 78 + .../skills/ui-ux-pro-max/data/charts.csv | 26 + .../skills/ui-ux-pro-max/data/colors.csv | 193 + .../ui-ux-pro-max/data/data-provenance.json | 1348 + .../data/google-font-licenses.json | 20185 ++++++++++ .../ui-ux-pro-max/data/google-fonts.csv | 1935 + .../skills/ui-ux-pro-max/data/icons.csv | 106 + .../skills/ui-ux-pro-max/data/landing.csv | 35 + .../skills/ui-ux-pro-max/data/motion.csv | 18 + .../data/phosphor-icons-upstream.json | 32582 ++++++++++++++++ .../skills/ui-ux-pro-max/data/products.csv | 193 + .../ui-ux-pro-max/data/react-performance.csv | 45 + .../ui-ux-pro-max/data/search-config.json | 977 + .../ui-ux-pro-max/data/stacks/angular.csv | 51 + .../ui-ux-pro-max/data/stacks/astro.csv | 54 + .../ui-ux-pro-max/data/stacks/avalonia.csv | 57 + .../ui-ux-pro-max/data/stacks/flutter.csv | 53 + .../data/stacks/html-tailwind.csv | 60 + .../ui-ux-pro-max/data/stacks/javafx.csv | 76 + .../data/stacks/jetpack-compose.csv | 53 + .../ui-ux-pro-max/data/stacks/laravel.csv | 51 + .../ui-ux-pro-max/data/stacks/nextjs.csv | 62 + .../ui-ux-pro-max/data/stacks/nuxt-ui.csv | 77 + .../ui-ux-pro-max/data/stacks/nuxtjs.csv | 68 + .../data/stacks/react-native.csv | 52 + .../ui-ux-pro-max/data/stacks/react.csv | 67 + .../ui-ux-pro-max/data/stacks/shadcn.csv | 69 + .../ui-ux-pro-max/data/stacks/svelte.csv | 56 + .../ui-ux-pro-max/data/stacks/swiftui.csv | 51 + .../ui-ux-pro-max/data/stacks/threejs.csv | 54 + .../skills/ui-ux-pro-max/data/stacks/uno.csv | 60 + .../skills/ui-ux-pro-max/data/stacks/uwp.csv | 56 + .../skills/ui-ux-pro-max/data/stacks/vue.csv | 50 + .../ui-ux-pro-max/data/stacks/winui.csv | 60 + .../skills/ui-ux-pro-max/data/stacks/wpf.csv | 57 + .../skills/ui-ux-pro-max/data/styles.csv | 89 + .../skills/ui-ux-pro-max/data/typography.csv | 75 + .../ui-ux-pro-max/data/ui-reasoning.csv | 193 + .../ui-ux-pro-max/data/ux-guidelines.csv | 120 + .../skills/ui-ux-pro-max/provenance.json | 71 + .../skills/ui-ux-pro-max/reference-cases.json | 2968 ++ .../ui-ux-pro-max/references/pro-rules.md | 117 + .../references/quick-reference.md | 256 + .../skills/ui-ux-pro-max/runtime/.gitignore | 1 + .../ui-ux-pro-max/runtime/package-lock.json | 411 + .../skills/ui-ux-pro-max/runtime/package.json | 9 + .../skills/ui-ux-pro-max/runtime/src/core.mts | 58 + .../skills/ui-ux-pro-max/runtime/src/data.mts | 43 + .../runtime/src/design-system.mts | 39 + .../ui-ux-pro-max/runtime/src/format.mts | 16 + .../ui-ux-pro-max/runtime/src/persistence.mts | 30 + .../ui-ux-pro-max/runtime/src/ranking.mts | 29 + .../ui-ux-pro-max/runtime/src/reasoning.mts | 22 + .../ui-ux-pro-max/runtime/src/search.mts | 22 + .../ui-ux-pro-max/runtime/tsconfig.json | 14 + .../skills/ui-ux-pro-max/scripts/core.mjs | 174 + .../skills/ui-ux-pro-max/scripts/data.mjs | 79 + .../ui-ux-pro-max/scripts/design-system.mjs | 56 + .../skills/ui-ux-pro-max/scripts/format.mjs | 47 + .../ui-ux-pro-max/scripts/persistence.mjs | 124 + .../skills/ui-ux-pro-max/scripts/ranking.mjs | 55 + .../ui-ux-pro-max/scripts/reasoning.mjs | 78 + .../skills/ui-ux-pro-max/scripts/search.mjs | 75 + .../skills/variant/LICENSE | 21 + .../skills/variant/PROVENANCE.md | 18 + .../skills/variant/SKILL.md | 126 + .../skills/variant/agents/openai.yaml | 5 + .../skills/variant/picker.md | 76 + .../vercel-composition-patterns/AGENTS.md | 946 + .../vercel-composition-patterns/PROVENANCE.md | 18 + .../vercel-composition-patterns/README.md | 60 + .../vercel-composition-patterns/SKILL.md | 101 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../vercel-composition-patterns/metadata.json | 11 + .../rules/_sections.md | 29 + .../rules/_template.md | 24 + .../rules/architecture-avoid-boolean-props.md | 100 + .../rules/architecture-compound-components.md | 112 + .../patterns-children-over-render-props.md | 87 + .../rules/patterns-explicit-variants.md | 100 + .../rules/react19-no-forwardref.md | 42 + .../rules/state-context-interface.md | 191 + .../rules/state-decouple-implementation.md | 113 + .../rules/state-lift-state.md | 125 + .../vercel-react-best-practices/AGENTS.md | 3786 ++ .../vercel-react-best-practices/PROVENANCE.md | 19 + .../vercel-react-best-practices/README.md | 123 + .../vercel-react-best-practices/SKILL.md | 161 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../vercel-react-best-practices/metadata.json | 15 + .../rules/_sections.md | 46 + .../rules/_template.md | 28 + .../rules/advanced-effect-event-deps.md | 56 + .../rules/advanced-event-handler-refs.md | 55 + .../rules/advanced-init-once.md | 42 + .../rules/advanced-use-latest.md | 39 + .../rules/async-api-routes.md | 38 + .../async-cheap-condition-before-await.md | 37 + .../rules/async-defer-await.md | 82 + .../rules/async-dependencies.md | 51 + .../rules/async-parallel.md | 28 + .../rules/async-suspense-boundaries.md | 99 + .../rules/bundle-analyzable-paths.md | 63 + .../rules/bundle-barrel-imports.md | 60 + .../rules/bundle-conditional.md | 31 + .../rules/bundle-defer-third-party.md | 49 + .../rules/bundle-dynamic-imports.md | 35 + .../rules/bundle-preload.md | 50 + .../rules/client-event-listeners.md | 74 + .../rules/client-localstorage-schema.md | 71 + .../rules/client-passive-event-listeners.md | 48 + .../rules/client-swr-dedup.md | 56 + .../rules/js-batch-dom-css.md | 107 + .../rules/js-cache-function-results.md | 80 + .../rules/js-cache-property-access.md | 28 + .../rules/js-cache-storage.md | 70 + .../rules/js-combine-iterations.md | 32 + .../rules/js-early-exit.md | 50 + .../rules/js-flatmap-filter.md | 60 + .../rules/js-hoist-regexp.md | 45 + .../rules/js-index-maps.md | 37 + .../rules/js-length-check-first.md | 49 + .../rules/js-min-max-loop.md | 76 + .../rules/js-request-idle-callback.md | 105 + .../rules/js-set-map-lookups.md | 24 + .../rules/js-tosorted-immutable.md | 57 + .../rules/rendering-activity.md | 26 + .../rules/rendering-animate-svg-wrapper.md | 47 + .../rules/rendering-conditional-render.md | 40 + .../rules/rendering-content-visibility.md | 38 + .../rules/rendering-hoist-jsx.md | 46 + .../rules/rendering-hydration-no-flicker.md | 82 + .../rendering-hydration-suppress-warning.md | 30 + .../rules/rendering-resource-hints.md | 85 + .../rules/rendering-script-defer-async.md | 68 + .../rules/rendering-svg-precision.md | 28 + .../rules/rendering-usetransition-loading.md | 75 + .../rules/rerender-defer-reads.md | 39 + .../rules/rerender-dependencies.md | 45 + .../rules/rerender-derived-state-no-effect.md | 40 + .../rules/rerender-derived-state.md | 29 + .../rules/rerender-functional-setstate.md | 74 + .../rules/rerender-lazy-state-init.md | 58 + .../rules/rerender-memo-with-default-value.md | 38 + .../rules/rerender-memo.md | 44 + .../rules/rerender-move-effect-to-event.md | 45 + .../rules/rerender-no-inline-components.md | 82 + .../rerender-simple-expression-in-memo.md | 35 + .../rules/rerender-split-combined-hooks.md | 64 + .../rules/rerender-transitions.md | 40 + .../rules/rerender-use-deferred-value.md | 59 + .../rerender-use-ref-transient-values.md | 73 + .../rules/server-after-nonblocking.md | 73 + .../rules/server-auth-actions.md | 96 + .../rules/server-cache-lru.md | 41 + .../rules/server-cache-react.md | 76 + .../rules/server-dedup-props.md | 65 + .../rules/server-hoist-static-io.md | 149 + .../rules/server-no-shared-module-state.md | 50 + .../rules/server-parallel-fetching.md | 83 + .../rules/server-parallel-nested-fetching.md | 34 + .../rules/server-serialization.md | 38 + .../vercel-react-native-skills/AGENTS.md | 2874 ++ .../vercel-react-native-skills/PROVENANCE.md | 19 + .../vercel-react-native-skills/README.md | 165 + .../vercel-react-native-skills/SKILL.md | 133 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../vercel-react-native-skills/metadata.json | 16 + .../rules/_sections.md | 86 + .../rules/_template.md | 28 + .../rules/animation-derived-value.md | 53 + .../rules/animation-gesture-detector-press.md | 95 + .../rules/animation-gpu-properties.md | 65 + .../design-system-compound-components.md | 66 + .../rules/fonts-config-plugin.md | 71 + .../rules/imports-design-system-folder.md | 68 + .../rules/js-hoist-intl.md | 61 + .../rules/list-performance-callbacks.md | 44 + .../list-performance-function-references.md | 132 + .../rules/list-performance-images.md | 53 + .../rules/list-performance-inline-objects.md | 97 + .../rules/list-performance-item-expensive.md | 94 + .../rules/list-performance-item-memo.md | 82 + .../rules/list-performance-item-types.md | 104 + .../rules/list-performance-virtualize.md | 67 + .../rules/monorepo-native-deps-in-app.md | 46 + .../monorepo-single-dependency-versions.md | 63 + .../rules/navigation-native-navigators.md | 188 + .../react-compiler-destructure-functions.md | 50 + ...react-compiler-reanimated-shared-values.md | 48 + .../rules/react-state-dispatcher.md | 91 + .../rules/react-state-fallback.md | 56 + .../rules/react-state-minimize.md | 65 + .../rules/rendering-no-falsy-and.md | 74 + .../rules/rendering-text-in-text-component.md | 36 + .../rules/scroll-position-no-state.md | 82 + .../rules/state-ground-truth.md | 80 + .../rules/ui-expo-image.md | 66 + .../rules/ui-image-gallery.md | 104 + .../rules/ui-measure-views.md | 78 + .../rules/ui-menus.md | 174 + .../rules/ui-native-modals.md | 77 + .../rules/ui-pressable.md | 61 + .../rules/ui-safe-area-scroll.md | 65 + .../rules/ui-scrollview-content-inset.md | 45 + .../rules/ui-styling.md | 87 + .../web-design-guidelines/PROVENANCE.md | 19 + .../skills/web-design-guidelines/SKILL.md | 52 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../LICENSE.web-interface-guidelines | 21 + .../references/web-interface-guidelines.md | 190 + docs/research/ui-ux-routing/DELIVERY.md | 25 + .../ui-ux-routing/independent-review.md | 35 + .../ui-ux-routing/integration-receipt.json | 1 + .../linux-integration-receipt.json | 58 + docs/research/ui-ux-routing/manifest.json | 36 + docs/research/ui-ux-routing/report.md | 35 + .../review/findings.initial.json | 47 + .../ui-ux-routing/review/findings.json | 29 + .../research/ui-ux-routing/review/packet.json | 26 + .../skill-validation-confirmation.log | 286 + docs/skill-routing.md | 11 +- lib/context-bootstrap/bootstrap.mjs | 42 +- .../ui-ux-routing-and-team-defaults/tasks.md | 12 +- references/ui-ux/COMPATIBILITY.md | 99 + references/ui-ux/catalog.lock.json | 3118 ++ rules/src/constitution.md | 7 + rules/src/routing.md | 11 +- scripts/kbd-inject-agent-rules.mjs | 6 + scripts/uiux-routing.integration.mjs | 191 + skills/agent-team-creator/SKILL.md | 37 +- .../references/project-installation.md | 72 + .../runtime/src/adapters-codecs.mts | 3 +- .../runtime/src/adapters-local.mts | 13 +- .../runtime/src/adapters.mts | 2 + skills/agent-team-creator/runtime/src/cli.mts | 31 +- .../runtime/src/guidance.mts | 8 +- .../runtime/src/project-files.mts | 65 + .../runtime/src/project-install.mts | 100 + .../runtime/src/project-instructions.mts | 32 + .../runtime/src/ui-bindings.mts | 28 + .../schemas/project-routing.schema.json | 17 + .../scripts/adapters-codecs.mjs | 3 +- .../scripts/adapters-local.mjs | 13 +- .../agent-team-creator/scripts/adapters.mjs | 2 + skills/agent-team-creator/scripts/cli.mjs | 40 +- .../agent-team-creator/scripts/guidance.mjs | 9 +- .../scripts/project-files.mjs | 86 + .../scripts/project-install.mjs | 114 + .../scripts/project-instructions.mjs | 33 + .../scripts/ui-bindings.mjs | 27 + skills/android-compose-adaptive/LICENSE.txt | 202 + skills/android-compose-adaptive/PROVENANCE.md | 19 + skills/android-compose-adaptive/SKILL.md | 316 + .../adaptive/flexbox/container-behavior.md | 112 + .../layouts/adaptive/flexbox/get-started.md | 69 + .../compose/layouts/adaptive/flexbox/index.md | 81 + .../layouts/adaptive/flexbox/item-behavior.md | 170 + .../adaptive/grid/container-properties.md | 415 + .../layouts/adaptive/grid/get-started.md | 51 + .../ui/compose/layouts/adaptive/grid/index.md | 73 + .../layouts/adaptive/grid/item-properties.md | 170 + .../layouts/adaptive/mediaquery/index.md | 333 + .../develop/ui/compose/tooling/debug.md | 114 + .../recipes/material-listdetail.md | 141 + skills/android-edge-to-edge/LICENSE.txt | 202 + skills/android-edge-to-edge/PROVENANCE.md | 19 + skills/android-edge-to-edge/SKILL.md | 441 + skills/better-accessibility/LICENSE | 21 + skills/better-accessibility/PROVENANCE.md | 18 + skills/better-accessibility/SKILL.md | 127 + .../better-accessibility/agents/openai.yaml | 3 + .../focus-and-keyboard.md | 131 + skills/better-accessibility/forms.md | 84 + skills/better-accessibility/hit-areas.md | 94 + .../better-accessibility/motion-and-zoom.md | 79 + skills/better-accessibility/screen-readers.md | 101 + .../semantics-and-aria.md | 84 + skills/better-colors/LICENSE | 21 + skills/better-colors/PROVENANCE.md | 18 + skills/better-colors/SKILL.md | 121 + skills/better-colors/agents/openai.yaml | 3 + skills/better-colors/color-formats.md | 90 + skills/better-colors/color-usage.md | 118 + skills/better-colors/contrast.md | 79 + skills/better-colors/palette-generation.md | 104 + skills/better-colors/palette-structure.md | 76 + skills/better-colors/token-naming.md | 97 + skills/better-interface/LICENSE | 21 + skills/better-interface/PROVENANCE.md | 18 + skills/better-interface/SKILL.md | 153 + skills/better-interface/agents/openai.yaml | 3 + skills/better-interface/review-format.md | 46 + skills/better-layout/LICENSE | 21 + skills/better-layout/PROVENANCE.md | 18 + skills/better-layout/SKILL.md | 97 + skills/better-layout/agents/openai.yaml | 3 + .../better-layout/grouping-and-alignment.md | 123 + .../better-layout/spacing-and-adaptivity.md | 159 + skills/better-typography/LICENSE | 21 + skills/better-typography/PROVENANCE.md | 18 + skills/better-typography/SKILL.md | 178 + skills/better-typography/agents/openai.yaml | 3 + skills/better-typography/choosing-fonts.md | 64 + skills/better-typography/css-cheat-sheet.md | 65 + .../details-and-accessibility.md | 119 + .../better-typography/spacing-and-sizing.md | 121 + .../variable-fonts-and-opentype.md | 105 + .../wrapping-and-punctuation.md | 55 + skills/better-ui/LICENSE | 21 + skills/better-ui/PROVENANCE.md | 18 + skills/better-ui/SKILL.md | 128 + skills/better-ui/agents/openai.yaml | 3 + skills/better-ui/animations.md | 205 + skills/better-ui/enter-exit.md | 147 + skills/better-ui/icon-transitions.md | 102 + skills/better-ui/icons.md | 110 + skills/better-ui/performance.md | 88 + skills/better-ui/surfaces.md | 219 + skills/better-writing/LICENSE | 21 + skills/better-writing/PROVENANCE.md | 18 + skills/better-writing/SKILL.md | 130 + skills/better-writing/agents/openai.yaml | 3 + skills/break/LICENSE | 21 + skills/break/PROVENANCE.md | 18 + skills/break/SKILL.md | 101 + skills/break/agents/openai.yaml | 5 + skills/break/scenarios.md | 78 + skills/design-taste-frontend-v1/LICENSE | 21 + skills/design-taste-frontend-v1/PROVENANCE.md | 18 + skills/design-taste-frontend-v1/SKILL.md | 242 + skills/design-taste-frontend/LICENSE | 21 + skills/design-taste-frontend/PROVENANCE.md | 19 + skills/design-taste-frontend/SKILL.md | 1223 + skills/explain-interface/LICENSE | 21 + skills/explain-interface/PROVENANCE.md | 21 + skills/explain-interface/SKILL.md | 146 + skills/explain-interface/agents/openai.yaml | 5 + skills/explain-interface/find-the-effect.md | 94 + skills/explain-interface/from-an-image.md | 55 + skills/explain-interface/no-browser.md | 47 + skills/explain-interface/read-the-system.md | 178 + skills/expo-animation/LICENSE | 21 + skills/expo-animation/LICENSE.repository | 21 + skills/expo-animation/PROVENANCE.md | 20 + skills/expo-animation/RECIPES.md | 385 + skills/expo-animation/SKILL.md | 281 + skills/expo-animation/agents/openai.yaml | 4 + skills/expo-design-system/LICENSE | 21 + skills/expo-design-system/PROVENANCE.md | 21 + skills/expo-design-system/SKILL.md | 376 + skills/expo-design-system/agents/openai.yaml | 4 + skills/expo-design-system/references/audit.md | 158 + .../references/native-slop.md | 47 + skills/expo-native-ui/LICENSE | 21 + skills/expo-native-ui/PROVENANCE.md | 19 + skills/expo-native-ui/SKILL.md | 208 + skills/expo-native-ui/agents/openai.yaml | 4 + skills/expo-native-ui/references/controls.md | 231 + skills/expo-native-ui/references/gradients.md | 106 + skills/expo-native-ui/references/icons.md | 232 + skills/expo-native-ui/references/media.md | 193 + skills/expo-native-ui/references/storage.md | 121 + .../references/visual-effects.md | 198 + .../expo-native-ui/references/webgpu-three.md | 605 + skills/expo-router/LICENSE | 21 + skills/expo-router/PROVENANCE.md | 19 + skills/expo-router/SKILL.md | 247 + skills/expo-router/agents/openai.yaml | 4 + skills/expo-router/references/form-sheet.md | 253 + .../expo-router/references/route-structure.md | 229 + skills/expo-router/references/search.md | 248 + skills/expo-router/references/tabs.md | 433 + .../references/toolbar-and-headers.md | 284 + .../references/zoom-transitions.md | 158 + skills/expo-ui/LICENSE | 21 + skills/expo-ui/PROVENANCE.md | 20 + skills/expo-ui/SKILL.md | 107 + skills/expo-ui/agents/openai.yaml | 4 + .../references/drop-in-replacements.md | 27 + skills/expo-ui/references/jetpack-compose.md | 73 + skills/expo-ui/references/swift-ui.md | 73 + skills/expo-ui/references/universal.md | 104 + skills/expo-ui/scripts/list-components.mjs | 192 + .../flutter-build-responsive-layout/LICENSE | 26 + .../PROVENANCE.md | 18 + .../flutter-build-responsive-layout/SKILL.md | 154 + skills/flutter-fix-layout-issues/LICENSE | 26 + .../flutter-fix-layout-issues/PROVENANCE.md | 18 + skills/flutter-fix-layout-issues/SKILL.md | 145 + .../flutter-setup-declarative-routing/LICENSE | 26 + .../PROVENANCE.md | 18 + .../SKILL.md | 270 + skills/flutter-setup-localization/LICENSE | 26 + .../flutter-setup-localization/PROVENANCE.md | 18 + skills/flutter-setup-localization/SKILL.md | 225 + skills/full-output-enforcement/LICENSE | 21 + skills/full-output-enforcement/PROVENANCE.md | 18 + skills/full-output-enforcement/SKILL.md | 65 + skills/gpt-taste/LICENSE | 21 + skills/gpt-taste/PROVENANCE.md | 19 + skills/gpt-taste/SKILL.md | 90 + skills/high-end-visual-design/LICENSE | 21 + skills/high-end-visual-design/PROVENANCE.md | 18 + skills/high-end-visual-design/SKILL.md | 114 + skills/industrial-brutalist-ui/LICENSE | 21 + skills/industrial-brutalist-ui/PROVENANCE.md | 18 + skills/industrial-brutalist-ui/SKILL.md | 108 + skills/interface-review/LICENSE | 21 + skills/interface-review/PROVENANCE.md | 20 + skills/interface-review/SKILL.md | 170 + skills/interface-review/agents/openai.yaml | 5 + skills/interface-review/removed-signals.md | 36 + skills/interface-review/scope-resolution.md | 88 + .../references/template-uiux-routing.md | 59 +- skills/minimalist-ui/LICENSE | 21 + skills/minimalist-ui/PROVENANCE.md | 18 + skills/minimalist-ui/SKILL.md | 101 + skills/prometheus-context-bootstrap/SKILL.md | 3 + skills/prometheus-impeccable-core/SKILL.md | 20 + .../references/LICENSE.impeccable | 191 + .../impeccable-context-and-modes.md | 19 + .../references/impeccable-craft-floor.md | 52 + skills/prometheus-ui-review/SKILL.md | 18 + skills/prometheus-ui-ux/SKILL.md | 31 + .../references/UI_UX_PROTOCOL.md | 36 + .../references/catalog.lock.json | 3118 ++ .../references/deferred-ports.md | 10 + skills/prometheus-ui-ux/references/pointer.md | 6 + .../references/runtime-api.md | 57 + skills/prometheus-ui-ux/runtime/package.json | 16 + skills/prometheus-ui-ux/runtime/src/cli.mts | 36 + .../prometheus-ui-ux/runtime/src/install.mts | 98 + .../prometheus-ui-ux/runtime/src/routing.mts | 70 + skills/prometheus-ui-ux/runtime/tsconfig.json | 19 + skills/prometheus-ui-ux/scripts/cli.mjs | 55 + skills/prometheus-ui-ux/scripts/install.mjs | 113 + skills/prometheus-ui-ux/scripts/routing.mjs | 117 + skills/redesign-existing-projects/LICENSE | 21 + .../redesign-existing-projects/PROVENANCE.md | 18 + skills/redesign-existing-projects/SKILL.md | 194 + skills/stitch-design-taste/DESIGN.stitch.md | 121 + skills/stitch-design-taste/LICENSE | 21 + skills/stitch-design-taste/PROVENANCE.md | 19 + skills/stitch-design-taste/SKILL.md | 200 + skills/swiftui-pro/LICENSE | 21 + skills/swiftui-pro/PROVENANCE.md | 19 + skills/swiftui-pro/SKILL.md | 121 + skills/swiftui-pro/agents/openai.yaml | 10 + .../swiftui-pro/assets/swiftui-pro-icon.png | Bin 0 -> 3117 bytes .../swiftui-pro/assets/swiftui-pro-icon.svg | 29 + .../swiftui-pro/references/accessibility.md | 13 + skills/swiftui-pro/references/api.md | 39 + skills/swiftui-pro/references/data.md | 43 + skills/swiftui-pro/references/design.md | 32 + skills/swiftui-pro/references/hygiene.md | 9 + skills/swiftui-pro/references/navigation.md | 14 + skills/swiftui-pro/references/performance.md | 46 + skills/swiftui-pro/references/swift.md | 56 + skills/swiftui-pro/references/views.md | 36 + skills/ui-ux-pro-max/LICENSE | 21 + skills/ui-ux-pro-max/PORT.md | 11 + skills/ui-ux-pro-max/SKILL.md | 49 + skills/ui-ux-pro-max/data/app-interface.csv | 33 + .../ui-ux-pro-max/data/catalog-summary.json | 78 + skills/ui-ux-pro-max/data/charts.csv | 26 + skills/ui-ux-pro-max/data/colors.csv | 193 + .../ui-ux-pro-max/data/data-provenance.json | 1348 + .../data/google-font-licenses.json | 20185 ++++++++++ skills/ui-ux-pro-max/data/google-fonts.csv | 1935 + skills/ui-ux-pro-max/data/icons.csv | 106 + skills/ui-ux-pro-max/data/landing.csv | 35 + skills/ui-ux-pro-max/data/motion.csv | 18 + .../data/phosphor-icons-upstream.json | 32582 ++++++++++++++++ skills/ui-ux-pro-max/data/products.csv | 193 + .../ui-ux-pro-max/data/react-performance.csv | 45 + skills/ui-ux-pro-max/data/search-config.json | 977 + skills/ui-ux-pro-max/data/stacks/angular.csv | 51 + skills/ui-ux-pro-max/data/stacks/astro.csv | 54 + skills/ui-ux-pro-max/data/stacks/avalonia.csv | 57 + skills/ui-ux-pro-max/data/stacks/flutter.csv | 53 + .../data/stacks/html-tailwind.csv | 60 + skills/ui-ux-pro-max/data/stacks/javafx.csv | 76 + .../data/stacks/jetpack-compose.csv | 53 + skills/ui-ux-pro-max/data/stacks/laravel.csv | 51 + skills/ui-ux-pro-max/data/stacks/nextjs.csv | 62 + skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv | 77 + skills/ui-ux-pro-max/data/stacks/nuxtjs.csv | 68 + .../data/stacks/react-native.csv | 52 + skills/ui-ux-pro-max/data/stacks/react.csv | 67 + skills/ui-ux-pro-max/data/stacks/shadcn.csv | 69 + skills/ui-ux-pro-max/data/stacks/svelte.csv | 56 + skills/ui-ux-pro-max/data/stacks/swiftui.csv | 51 + skills/ui-ux-pro-max/data/stacks/threejs.csv | 54 + skills/ui-ux-pro-max/data/stacks/uno.csv | 60 + skills/ui-ux-pro-max/data/stacks/uwp.csv | 56 + skills/ui-ux-pro-max/data/stacks/vue.csv | 50 + skills/ui-ux-pro-max/data/stacks/winui.csv | 60 + skills/ui-ux-pro-max/data/stacks/wpf.csv | 57 + skills/ui-ux-pro-max/data/styles.csv | 89 + skills/ui-ux-pro-max/data/typography.csv | 75 + skills/ui-ux-pro-max/data/ui-reasoning.csv | 193 + skills/ui-ux-pro-max/data/ux-guidelines.csv | 120 + skills/ui-ux-pro-max/provenance.json | 71 + skills/ui-ux-pro-max/reference-cases.json | 2968 ++ skills/ui-ux-pro-max/references/pro-rules.md | 117 + .../references/quick-reference.md | 256 + skills/ui-ux-pro-max/runtime/.gitignore | 1 + .../ui-ux-pro-max/runtime/package-lock.json | 411 + skills/ui-ux-pro-max/runtime/package.json | 9 + skills/ui-ux-pro-max/runtime/src/core.mts | 58 + skills/ui-ux-pro-max/runtime/src/data.mts | 43 + .../runtime/src/design-system.mts | 39 + skills/ui-ux-pro-max/runtime/src/format.mts | 16 + .../ui-ux-pro-max/runtime/src/persistence.mts | 30 + skills/ui-ux-pro-max/runtime/src/ranking.mts | 29 + .../ui-ux-pro-max/runtime/src/reasoning.mts | 22 + skills/ui-ux-pro-max/runtime/src/search.mts | 22 + skills/ui-ux-pro-max/runtime/tsconfig.json | 14 + skills/ui-ux-pro-max/scripts/core.mjs | 174 + skills/ui-ux-pro-max/scripts/data.mjs | 79 + .../ui-ux-pro-max/scripts/design-system.mjs | 56 + skills/ui-ux-pro-max/scripts/format.mjs | 47 + skills/ui-ux-pro-max/scripts/persistence.mjs | 124 + skills/ui-ux-pro-max/scripts/ranking.mjs | 55 + skills/ui-ux-pro-max/scripts/reasoning.mjs | 78 + skills/ui-ux-pro-max/scripts/search.mjs | 75 + skills/variant/LICENSE | 21 + skills/variant/PROVENANCE.md | 18 + skills/variant/SKILL.md | 126 + skills/variant/agents/openai.yaml | 5 + skills/variant/picker.md | 76 + skills/vercel-composition-patterns/AGENTS.md | 946 + .../vercel-composition-patterns/PROVENANCE.md | 18 + skills/vercel-composition-patterns/README.md | 60 + skills/vercel-composition-patterns/SKILL.md | 101 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../vercel-composition-patterns/metadata.json | 11 + .../rules/_sections.md | 29 + .../rules/_template.md | 24 + .../rules/architecture-avoid-boolean-props.md | 100 + .../rules/architecture-compound-components.md | 112 + .../patterns-children-over-render-props.md | 87 + .../rules/patterns-explicit-variants.md | 100 + .../rules/react19-no-forwardref.md | 42 + .../rules/state-context-interface.md | 191 + .../rules/state-decouple-implementation.md | 113 + .../rules/state-lift-state.md | 125 + skills/vercel-react-best-practices/AGENTS.md | 3786 ++ .../vercel-react-best-practices/PROVENANCE.md | 19 + skills/vercel-react-best-practices/README.md | 123 + skills/vercel-react-best-practices/SKILL.md | 161 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../vercel-react-best-practices/metadata.json | 15 + .../rules/_sections.md | 46 + .../rules/_template.md | 28 + .../rules/advanced-effect-event-deps.md | 56 + .../rules/advanced-event-handler-refs.md | 55 + .../rules/advanced-init-once.md | 42 + .../rules/advanced-use-latest.md | 39 + .../rules/async-api-routes.md | 38 + .../async-cheap-condition-before-await.md | 37 + .../rules/async-defer-await.md | 82 + .../rules/async-dependencies.md | 51 + .../rules/async-parallel.md | 28 + .../rules/async-suspense-boundaries.md | 99 + .../rules/bundle-analyzable-paths.md | 63 + .../rules/bundle-barrel-imports.md | 60 + .../rules/bundle-conditional.md | 31 + .../rules/bundle-defer-third-party.md | 49 + .../rules/bundle-dynamic-imports.md | 35 + .../rules/bundle-preload.md | 50 + .../rules/client-event-listeners.md | 74 + .../rules/client-localstorage-schema.md | 71 + .../rules/client-passive-event-listeners.md | 48 + .../rules/client-swr-dedup.md | 56 + .../rules/js-batch-dom-css.md | 107 + .../rules/js-cache-function-results.md | 80 + .../rules/js-cache-property-access.md | 28 + .../rules/js-cache-storage.md | 70 + .../rules/js-combine-iterations.md | 32 + .../rules/js-early-exit.md | 50 + .../rules/js-flatmap-filter.md | 60 + .../rules/js-hoist-regexp.md | 45 + .../rules/js-index-maps.md | 37 + .../rules/js-length-check-first.md | 49 + .../rules/js-min-max-loop.md | 76 + .../rules/js-request-idle-callback.md | 105 + .../rules/js-set-map-lookups.md | 24 + .../rules/js-tosorted-immutable.md | 57 + .../rules/rendering-activity.md | 26 + .../rules/rendering-animate-svg-wrapper.md | 47 + .../rules/rendering-conditional-render.md | 40 + .../rules/rendering-content-visibility.md | 38 + .../rules/rendering-hoist-jsx.md | 46 + .../rules/rendering-hydration-no-flicker.md | 82 + .../rendering-hydration-suppress-warning.md | 30 + .../rules/rendering-resource-hints.md | 85 + .../rules/rendering-script-defer-async.md | 68 + .../rules/rendering-svg-precision.md | 28 + .../rules/rendering-usetransition-loading.md | 75 + .../rules/rerender-defer-reads.md | 39 + .../rules/rerender-dependencies.md | 45 + .../rules/rerender-derived-state-no-effect.md | 40 + .../rules/rerender-derived-state.md | 29 + .../rules/rerender-functional-setstate.md | 74 + .../rules/rerender-lazy-state-init.md | 58 + .../rules/rerender-memo-with-default-value.md | 38 + .../rules/rerender-memo.md | 44 + .../rules/rerender-move-effect-to-event.md | 45 + .../rules/rerender-no-inline-components.md | 82 + .../rerender-simple-expression-in-memo.md | 35 + .../rules/rerender-split-combined-hooks.md | 64 + .../rules/rerender-transitions.md | 40 + .../rules/rerender-use-deferred-value.md | 59 + .../rerender-use-ref-transient-values.md | 73 + .../rules/server-after-nonblocking.md | 73 + .../rules/server-auth-actions.md | 96 + .../rules/server-cache-lru.md | 41 + .../rules/server-cache-react.md | 76 + .../rules/server-dedup-props.md | 65 + .../rules/server-hoist-static-io.md | 149 + .../rules/server-no-shared-module-state.md | 50 + .../rules/server-parallel-fetching.md | 83 + .../rules/server-parallel-nested-fetching.md | 34 + .../rules/server-serialization.md | 38 + skills/vercel-react-native-skills/AGENTS.md | 2874 ++ .../vercel-react-native-skills/PROVENANCE.md | 19 + skills/vercel-react-native-skills/README.md | 165 + skills/vercel-react-native-skills/SKILL.md | 133 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../vercel-react-native-skills/metadata.json | 16 + .../rules/_sections.md | 86 + .../rules/_template.md | 28 + .../rules/animation-derived-value.md | 53 + .../rules/animation-gesture-detector-press.md | 95 + .../rules/animation-gpu-properties.md | 65 + .../design-system-compound-components.md | 66 + .../rules/fonts-config-plugin.md | 71 + .../rules/imports-design-system-folder.md | 68 + .../rules/js-hoist-intl.md | 61 + .../rules/list-performance-callbacks.md | 44 + .../list-performance-function-references.md | 132 + .../rules/list-performance-images.md | 53 + .../rules/list-performance-inline-objects.md | 97 + .../rules/list-performance-item-expensive.md | 94 + .../rules/list-performance-item-memo.md | 82 + .../rules/list-performance-item-types.md | 104 + .../rules/list-performance-virtualize.md | 67 + .../rules/monorepo-native-deps-in-app.md | 46 + .../monorepo-single-dependency-versions.md | 63 + .../rules/navigation-native-navigators.md | 188 + .../react-compiler-destructure-functions.md | 50 + ...react-compiler-reanimated-shared-values.md | 48 + .../rules/react-state-dispatcher.md | 91 + .../rules/react-state-fallback.md | 56 + .../rules/react-state-minimize.md | 65 + .../rules/rendering-no-falsy-and.md | 74 + .../rules/rendering-text-in-text-component.md | 36 + .../rules/scroll-position-no-state.md | 82 + .../rules/state-ground-truth.md | 80 + .../rules/ui-expo-image.md | 66 + .../rules/ui-image-gallery.md | 104 + .../rules/ui-measure-views.md | 78 + .../rules/ui-menus.md | 174 + .../rules/ui-native-modals.md | 77 + .../rules/ui-pressable.md | 61 + .../rules/ui-safe-area-scroll.md | 65 + .../rules/ui-scrollview-content-inset.md | 45 + .../rules/ui-styling.md | 87 + skills/web-design-guidelines/PROVENANCE.md | 19 + skills/web-design-guidelines/SKILL.md | 52 + .../UPSTREAM-LICENSE-EVIDENCE.md | 239 + .../LICENSE.web-interface-guidelines | 21 + .../references/web-interface-guidelines.md | 190 + 2170 files changed, 526754 insertions(+), 279 deletions(-) create mode 100644 .agents/UI_UX_PROTOCOL.md create mode 100644 .agents/skills/android-compose-adaptive/LICENSE.txt create mode 100644 .agents/skills/android-compose-adaptive/PROVENANCE.md create mode 100644 .agents/skills/android-compose-adaptive/SKILL.md create mode 100644 .agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md create mode 100644 .agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md create mode 100644 .agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md create mode 100644 .agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md create mode 100644 .agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md create mode 100644 .agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md create mode 100644 .agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md create mode 100644 .agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md create mode 100644 .agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md create mode 100644 .agents/skills/android-compose-adaptive/references/android/develop/ui/compose/tooling/debug.md create mode 100644 .agents/skills/android-compose-adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md create mode 100644 .agents/skills/android-edge-to-edge/LICENSE.txt create mode 100644 .agents/skills/android-edge-to-edge/PROVENANCE.md create mode 100644 .agents/skills/android-edge-to-edge/SKILL.md create mode 100644 .agents/skills/better-accessibility/LICENSE create mode 100644 .agents/skills/better-accessibility/PROVENANCE.md create mode 100644 .agents/skills/better-accessibility/SKILL.md create mode 100644 .agents/skills/better-accessibility/agents/openai.yaml create mode 100644 .agents/skills/better-accessibility/focus-and-keyboard.md create mode 100644 .agents/skills/better-accessibility/forms.md create mode 100644 .agents/skills/better-accessibility/hit-areas.md create mode 100644 .agents/skills/better-accessibility/motion-and-zoom.md create mode 100644 .agents/skills/better-accessibility/screen-readers.md create mode 100644 .agents/skills/better-accessibility/semantics-and-aria.md create mode 100644 .agents/skills/better-colors/LICENSE create mode 100644 .agents/skills/better-colors/PROVENANCE.md create mode 100644 .agents/skills/better-colors/SKILL.md create mode 100644 .agents/skills/better-colors/agents/openai.yaml create mode 100644 .agents/skills/better-colors/color-formats.md create mode 100644 .agents/skills/better-colors/color-usage.md create mode 100644 .agents/skills/better-colors/contrast.md create mode 100644 .agents/skills/better-colors/palette-generation.md create mode 100644 .agents/skills/better-colors/palette-structure.md create mode 100644 .agents/skills/better-colors/token-naming.md create mode 100644 .agents/skills/better-interface/LICENSE create mode 100644 .agents/skills/better-interface/PROVENANCE.md create mode 100644 .agents/skills/better-interface/SKILL.md create mode 100644 .agents/skills/better-interface/agents/openai.yaml create mode 100644 .agents/skills/better-interface/review-format.md create mode 100644 .agents/skills/better-layout/LICENSE create mode 100644 .agents/skills/better-layout/PROVENANCE.md create mode 100644 .agents/skills/better-layout/SKILL.md create mode 100644 .agents/skills/better-layout/agents/openai.yaml create mode 100644 .agents/skills/better-layout/grouping-and-alignment.md create mode 100644 .agents/skills/better-layout/spacing-and-adaptivity.md create mode 100644 .agents/skills/better-typography/LICENSE create mode 100644 .agents/skills/better-typography/PROVENANCE.md create mode 100644 .agents/skills/better-typography/SKILL.md create mode 100644 .agents/skills/better-typography/agents/openai.yaml create mode 100644 .agents/skills/better-typography/choosing-fonts.md create mode 100644 .agents/skills/better-typography/css-cheat-sheet.md create mode 100644 .agents/skills/better-typography/details-and-accessibility.md create mode 100644 .agents/skills/better-typography/spacing-and-sizing.md create mode 100644 .agents/skills/better-typography/variable-fonts-and-opentype.md create mode 100644 .agents/skills/better-typography/wrapping-and-punctuation.md create mode 100644 .agents/skills/better-ui/LICENSE create mode 100644 .agents/skills/better-ui/PROVENANCE.md create mode 100644 .agents/skills/better-ui/SKILL.md create mode 100644 .agents/skills/better-ui/agents/openai.yaml create mode 100644 .agents/skills/better-ui/animations.md create mode 100644 .agents/skills/better-ui/enter-exit.md create mode 100644 .agents/skills/better-ui/icon-transitions.md create mode 100644 .agents/skills/better-ui/icons.md create mode 100644 .agents/skills/better-ui/performance.md create mode 100644 .agents/skills/better-ui/surfaces.md create mode 100644 .agents/skills/better-writing/LICENSE create mode 100644 .agents/skills/better-writing/PROVENANCE.md create mode 100644 .agents/skills/better-writing/SKILL.md create mode 100644 .agents/skills/better-writing/agents/openai.yaml create mode 100644 .agents/skills/break/LICENSE create mode 100644 .agents/skills/break/PROVENANCE.md create mode 100644 .agents/skills/break/SKILL.md create mode 100644 .agents/skills/break/agents/openai.yaml create mode 100644 .agents/skills/break/scenarios.md create mode 100644 .agents/skills/design-taste-frontend-v1/LICENSE create mode 100644 .agents/skills/design-taste-frontend-v1/PROVENANCE.md create mode 100644 .agents/skills/design-taste-frontend-v1/SKILL.md create mode 100644 .agents/skills/design-taste-frontend/LICENSE create mode 100644 .agents/skills/design-taste-frontend/PROVENANCE.md create mode 100644 .agents/skills/design-taste-frontend/SKILL.md create mode 100644 .agents/skills/explain-interface/LICENSE create mode 100644 .agents/skills/explain-interface/PROVENANCE.md create mode 100644 .agents/skills/explain-interface/SKILL.md create mode 100644 .agents/skills/explain-interface/agents/openai.yaml create mode 100644 .agents/skills/explain-interface/find-the-effect.md create mode 100644 .agents/skills/explain-interface/from-an-image.md create mode 100644 .agents/skills/explain-interface/no-browser.md create mode 100644 .agents/skills/explain-interface/read-the-system.md create mode 100644 .agents/skills/expo-animation/LICENSE create mode 100644 .agents/skills/expo-animation/LICENSE.repository create mode 100644 .agents/skills/expo-animation/PROVENANCE.md create mode 100644 .agents/skills/expo-animation/RECIPES.md create mode 100644 .agents/skills/expo-animation/SKILL.md create mode 100644 .agents/skills/expo-animation/agents/openai.yaml create mode 100644 .agents/skills/expo-design-system/LICENSE create mode 100644 .agents/skills/expo-design-system/PROVENANCE.md create mode 100644 .agents/skills/expo-design-system/SKILL.md create mode 100644 .agents/skills/expo-design-system/agents/openai.yaml create mode 100644 .agents/skills/expo-design-system/references/audit.md create mode 100644 .agents/skills/expo-design-system/references/native-slop.md create mode 100644 .agents/skills/expo-native-ui/LICENSE create mode 100644 .agents/skills/expo-native-ui/PROVENANCE.md create mode 100644 .agents/skills/expo-native-ui/SKILL.md create mode 100644 .agents/skills/expo-native-ui/agents/openai.yaml create mode 100644 .agents/skills/expo-native-ui/references/controls.md create mode 100644 .agents/skills/expo-native-ui/references/gradients.md create mode 100644 .agents/skills/expo-native-ui/references/icons.md create mode 100644 .agents/skills/expo-native-ui/references/media.md create mode 100644 .agents/skills/expo-native-ui/references/storage.md create mode 100644 .agents/skills/expo-native-ui/references/visual-effects.md create mode 100644 .agents/skills/expo-native-ui/references/webgpu-three.md create mode 100644 .agents/skills/expo-router/LICENSE create mode 100644 .agents/skills/expo-router/PROVENANCE.md create mode 100644 .agents/skills/expo-router/SKILL.md create mode 100644 .agents/skills/expo-router/agents/openai.yaml create mode 100644 .agents/skills/expo-router/references/form-sheet.md create mode 100644 .agents/skills/expo-router/references/route-structure.md create mode 100644 .agents/skills/expo-router/references/search.md create mode 100644 .agents/skills/expo-router/references/tabs.md create mode 100644 .agents/skills/expo-router/references/toolbar-and-headers.md create mode 100644 .agents/skills/expo-router/references/zoom-transitions.md create mode 100644 .agents/skills/expo-ui/LICENSE create mode 100644 .agents/skills/expo-ui/PROVENANCE.md create mode 100644 .agents/skills/expo-ui/SKILL.md create mode 100644 .agents/skills/expo-ui/agents/openai.yaml create mode 100644 .agents/skills/expo-ui/references/drop-in-replacements.md create mode 100644 .agents/skills/expo-ui/references/jetpack-compose.md create mode 100644 .agents/skills/expo-ui/references/swift-ui.md create mode 100644 .agents/skills/expo-ui/references/universal.md create mode 100644 .agents/skills/expo-ui/scripts/list-components.mjs create mode 100644 .agents/skills/flutter-build-responsive-layout/LICENSE create mode 100644 .agents/skills/flutter-build-responsive-layout/PROVENANCE.md create mode 100644 .agents/skills/flutter-build-responsive-layout/SKILL.md create mode 100644 .agents/skills/flutter-fix-layout-issues/LICENSE create mode 100644 .agents/skills/flutter-fix-layout-issues/PROVENANCE.md create mode 100644 .agents/skills/flutter-fix-layout-issues/SKILL.md create mode 100644 .agents/skills/flutter-setup-declarative-routing/LICENSE create mode 100644 .agents/skills/flutter-setup-declarative-routing/PROVENANCE.md create mode 100644 .agents/skills/flutter-setup-declarative-routing/SKILL.md create mode 100644 .agents/skills/flutter-setup-localization/LICENSE create mode 100644 .agents/skills/flutter-setup-localization/PROVENANCE.md create mode 100644 .agents/skills/flutter-setup-localization/SKILL.md create mode 100644 .agents/skills/full-output-enforcement/LICENSE create mode 100644 .agents/skills/full-output-enforcement/PROVENANCE.md create mode 100644 .agents/skills/full-output-enforcement/SKILL.md create mode 100644 .agents/skills/gpt-taste/LICENSE create mode 100644 .agents/skills/gpt-taste/PROVENANCE.md create mode 100644 .agents/skills/gpt-taste/SKILL.md create mode 100644 .agents/skills/high-end-visual-design/LICENSE create mode 100644 .agents/skills/high-end-visual-design/PROVENANCE.md create mode 100644 .agents/skills/high-end-visual-design/SKILL.md create mode 100644 .agents/skills/industrial-brutalist-ui/LICENSE create mode 100644 .agents/skills/industrial-brutalist-ui/PROVENANCE.md create mode 100644 .agents/skills/industrial-brutalist-ui/SKILL.md create mode 100644 .agents/skills/interface-review/LICENSE create mode 100644 .agents/skills/interface-review/PROVENANCE.md create mode 100644 .agents/skills/interface-review/SKILL.md create mode 100644 .agents/skills/interface-review/agents/openai.yaml create mode 100644 .agents/skills/interface-review/removed-signals.md create mode 100644 .agents/skills/interface-review/scope-resolution.md create mode 100644 .agents/skills/minimalist-ui/LICENSE create mode 100644 .agents/skills/minimalist-ui/PROVENANCE.md create mode 100644 .agents/skills/minimalist-ui/SKILL.md create mode 100644 .agents/skills/prometheus-impeccable-core/SKILL.md create mode 100644 .agents/skills/prometheus-impeccable-core/references/LICENSE.impeccable create mode 100644 .agents/skills/prometheus-impeccable-core/references/impeccable-context-and-modes.md create mode 100644 .agents/skills/prometheus-impeccable-core/references/impeccable-craft-floor.md create mode 100644 .agents/skills/prometheus-ui-review/SKILL.md create mode 100644 .agents/skills/prometheus-ui-ux/SKILL.md create mode 100644 .agents/skills/prometheus-ui-ux/references/UI_UX_PROTOCOL.md create mode 100644 .agents/skills/prometheus-ui-ux/references/catalog.lock.json create mode 100644 .agents/skills/prometheus-ui-ux/references/deferred-ports.md create mode 100644 .agents/skills/prometheus-ui-ux/references/pointer.md create mode 100644 .agents/skills/prometheus-ui-ux/references/runtime-api.md create mode 100644 .agents/skills/prometheus-ui-ux/scripts/cli.mjs create mode 100644 .agents/skills/prometheus-ui-ux/scripts/install.mjs create mode 100644 .agents/skills/prometheus-ui-ux/scripts/routing.mjs create mode 100644 .agents/skills/redesign-existing-projects/LICENSE create mode 100644 .agents/skills/redesign-existing-projects/PROVENANCE.md create mode 100644 .agents/skills/redesign-existing-projects/SKILL.md create mode 100644 .agents/skills/stitch-design-taste/DESIGN.stitch.md create mode 100644 .agents/skills/stitch-design-taste/LICENSE create mode 100644 .agents/skills/stitch-design-taste/PROVENANCE.md create mode 100644 .agents/skills/stitch-design-taste/SKILL.md create mode 100644 .agents/skills/swiftui-pro/LICENSE create mode 100644 .agents/skills/swiftui-pro/PROVENANCE.md create mode 100644 .agents/skills/swiftui-pro/SKILL.md create mode 100644 .agents/skills/swiftui-pro/agents/openai.yaml create mode 100644 .agents/skills/swiftui-pro/assets/swiftui-pro-icon.png create mode 100644 .agents/skills/swiftui-pro/assets/swiftui-pro-icon.svg create mode 100644 .agents/skills/swiftui-pro/references/accessibility.md create mode 100644 .agents/skills/swiftui-pro/references/api.md create mode 100644 .agents/skills/swiftui-pro/references/data.md create mode 100644 .agents/skills/swiftui-pro/references/design.md create mode 100644 .agents/skills/swiftui-pro/references/hygiene.md create mode 100644 .agents/skills/swiftui-pro/references/navigation.md create mode 100644 .agents/skills/swiftui-pro/references/performance.md create mode 100644 .agents/skills/swiftui-pro/references/swift.md create mode 100644 .agents/skills/swiftui-pro/references/views.md create mode 100644 .agents/skills/ui-ux-pro-max/LICENSE create mode 100644 .agents/skills/ui-ux-pro-max/PORT.md create mode 100644 .agents/skills/ui-ux-pro-max/SKILL.md create mode 100644 .agents/skills/ui-ux-pro-max/data/app-interface.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/catalog-summary.json create mode 100644 .agents/skills/ui-ux-pro-max/data/charts.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/colors.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/data-provenance.json create mode 100644 .agents/skills/ui-ux-pro-max/data/google-font-licenses.json create mode 100644 .agents/skills/ui-ux-pro-max/data/google-fonts.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/icons.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/landing.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/motion.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/phosphor-icons-upstream.json create mode 100644 .agents/skills/ui-ux-pro-max/data/products.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/react-performance.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/search-config.json create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/angular.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/astro.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/avalonia.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/flutter.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/javafx.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/laravel.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/nextjs.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/react-native.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/react.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/shadcn.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/svelte.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/swiftui.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/threejs.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/uno.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/uwp.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/vue.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/winui.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/stacks/wpf.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/styles.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/typography.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/ui-reasoning.csv create mode 100644 .agents/skills/ui-ux-pro-max/data/ux-guidelines.csv create mode 100644 .agents/skills/ui-ux-pro-max/provenance.json create mode 100644 .agents/skills/ui-ux-pro-max/reference-cases.json create mode 100644 .agents/skills/ui-ux-pro-max/references/pro-rules.md create mode 100644 .agents/skills/ui-ux-pro-max/references/quick-reference.md create mode 100644 .agents/skills/ui-ux-pro-max/scripts/core.mjs create mode 100644 .agents/skills/ui-ux-pro-max/scripts/data.mjs create mode 100644 .agents/skills/ui-ux-pro-max/scripts/design-system.mjs create mode 100644 .agents/skills/ui-ux-pro-max/scripts/format.mjs create mode 100644 .agents/skills/ui-ux-pro-max/scripts/persistence.mjs create mode 100644 .agents/skills/ui-ux-pro-max/scripts/ranking.mjs create mode 100644 .agents/skills/ui-ux-pro-max/scripts/reasoning.mjs create mode 100644 .agents/skills/ui-ux-pro-max/scripts/search.mjs create mode 100644 .agents/skills/variant/LICENSE create mode 100644 .agents/skills/variant/PROVENANCE.md create mode 100644 .agents/skills/variant/SKILL.md create mode 100644 .agents/skills/variant/agents/openai.yaml create mode 100644 .agents/skills/variant/picker.md create mode 100644 .agents/skills/vercel-composition-patterns/AGENTS.md create mode 100644 .agents/skills/vercel-composition-patterns/PROVENANCE.md create mode 100644 .agents/skills/vercel-composition-patterns/README.md create mode 100644 .agents/skills/vercel-composition-patterns/SKILL.md create mode 100644 .agents/skills/vercel-composition-patterns/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 .agents/skills/vercel-composition-patterns/metadata.json create mode 100644 .agents/skills/vercel-composition-patterns/rules/_sections.md create mode 100644 .agents/skills/vercel-composition-patterns/rules/_template.md create mode 100644 .agents/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md create mode 100644 .agents/skills/vercel-composition-patterns/rules/architecture-compound-components.md create mode 100644 .agents/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md create mode 100644 .agents/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md create mode 100644 .agents/skills/vercel-composition-patterns/rules/react19-no-forwardref.md create mode 100644 .agents/skills/vercel-composition-patterns/rules/state-context-interface.md create mode 100644 .agents/skills/vercel-composition-patterns/rules/state-decouple-implementation.md create mode 100644 .agents/skills/vercel-composition-patterns/rules/state-lift-state.md create mode 100644 .agents/skills/vercel-react-best-practices/AGENTS.md create mode 100644 .agents/skills/vercel-react-best-practices/PROVENANCE.md create mode 100644 .agents/skills/vercel-react-best-practices/README.md create mode 100644 .agents/skills/vercel-react-best-practices/SKILL.md create mode 100644 .agents/skills/vercel-react-best-practices/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 .agents/skills/vercel-react-best-practices/metadata.json create mode 100644 .agents/skills/vercel-react-best-practices/rules/_sections.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/_template.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/advanced-init-once.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/async-api-routes.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/async-defer-await.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/async-dependencies.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/async-parallel.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/bundle-conditional.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/bundle-preload.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/client-event-listeners.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/js-cache-storage.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/js-early-exit.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/js-flatmap-filter.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/js-index-maps.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/js-length-check-first.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/js-request-idle-callback.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rendering-activity.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rendering-resource-hints.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rerender-memo.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rerender-transitions.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/server-auth-actions.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/server-cache-lru.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/server-cache-react.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/server-dedup-props.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/server-hoist-static-io.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md create mode 100644 .agents/skills/vercel-react-best-practices/rules/server-serialization.md create mode 100644 .agents/skills/vercel-react-native-skills/AGENTS.md create mode 100644 .agents/skills/vercel-react-native-skills/PROVENANCE.md create mode 100644 .agents/skills/vercel-react-native-skills/README.md create mode 100644 .agents/skills/vercel-react-native-skills/SKILL.md create mode 100644 .agents/skills/vercel-react-native-skills/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 .agents/skills/vercel-react-native-skills/metadata.json create mode 100644 .agents/skills/vercel-react-native-skills/rules/_sections.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/_template.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/animation-derived-value.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/animation-gesture-detector-press.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/animation-gpu-properties.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/design-system-compound-components.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/fonts-config-plugin.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/imports-design-system-folder.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/js-hoist-intl.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/list-performance-callbacks.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/list-performance-function-references.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/list-performance-images.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/list-performance-inline-objects.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/list-performance-item-expensive.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/list-performance-item-memo.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/list-performance-item-types.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/list-performance-virtualize.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/monorepo-native-deps-in-app.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/monorepo-single-dependency-versions.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/navigation-native-navigators.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/react-compiler-destructure-functions.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/react-compiler-reanimated-shared-values.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/react-state-dispatcher.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/react-state-fallback.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/react-state-minimize.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/rendering-no-falsy-and.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/rendering-text-in-text-component.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/scroll-position-no-state.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/state-ground-truth.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/ui-expo-image.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/ui-image-gallery.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/ui-measure-views.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/ui-menus.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/ui-native-modals.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/ui-pressable.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/ui-safe-area-scroll.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/ui-scrollview-content-inset.md create mode 100644 .agents/skills/vercel-react-native-skills/rules/ui-styling.md create mode 100644 .agents/skills/web-design-guidelines/PROVENANCE.md create mode 100644 .agents/skills/web-design-guidelines/SKILL.md create mode 100644 .agents/skills/web-design-guidelines/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 .agents/skills/web-design-guidelines/references/LICENSE.web-interface-guidelines create mode 100644 .agents/skills/web-design-guidelines/references/web-interface-guidelines.md create mode 100644 .claude/skills/android-compose-adaptive/LICENSE.txt create mode 100644 .claude/skills/android-compose-adaptive/PROVENANCE.md create mode 100644 .claude/skills/android-compose-adaptive/SKILL.md create mode 100644 .claude/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md create mode 100644 .claude/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md create mode 100644 .claude/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md create mode 100644 .claude/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md create mode 100644 .claude/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md create mode 100644 .claude/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md create mode 100644 .claude/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md create mode 100644 .claude/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md create mode 100644 .claude/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md create mode 100644 .claude/skills/android-compose-adaptive/references/android/develop/ui/compose/tooling/debug.md create mode 100644 .claude/skills/android-compose-adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md create mode 100644 .claude/skills/android-edge-to-edge/LICENSE.txt create mode 100644 .claude/skills/android-edge-to-edge/PROVENANCE.md create mode 100644 .claude/skills/android-edge-to-edge/SKILL.md create mode 100644 .claude/skills/better-accessibility/LICENSE create mode 100644 .claude/skills/better-accessibility/PROVENANCE.md create mode 100644 .claude/skills/better-accessibility/SKILL.md create mode 100644 .claude/skills/better-accessibility/agents/openai.yaml create mode 100644 .claude/skills/better-accessibility/focus-and-keyboard.md create mode 100644 .claude/skills/better-accessibility/forms.md create mode 100644 .claude/skills/better-accessibility/hit-areas.md create mode 100644 .claude/skills/better-accessibility/motion-and-zoom.md create mode 100644 .claude/skills/better-accessibility/screen-readers.md create mode 100644 .claude/skills/better-accessibility/semantics-and-aria.md create mode 100644 .claude/skills/better-colors/LICENSE create mode 100644 .claude/skills/better-colors/PROVENANCE.md create mode 100644 .claude/skills/better-colors/SKILL.md create mode 100644 .claude/skills/better-colors/agents/openai.yaml create mode 100644 .claude/skills/better-colors/color-formats.md create mode 100644 .claude/skills/better-colors/color-usage.md create mode 100644 .claude/skills/better-colors/contrast.md create mode 100644 .claude/skills/better-colors/palette-generation.md create mode 100644 .claude/skills/better-colors/palette-structure.md create mode 100644 .claude/skills/better-colors/token-naming.md create mode 100644 .claude/skills/better-interface/LICENSE create mode 100644 .claude/skills/better-interface/PROVENANCE.md create mode 100644 .claude/skills/better-interface/SKILL.md create mode 100644 .claude/skills/better-interface/agents/openai.yaml create mode 100644 .claude/skills/better-interface/review-format.md create mode 100644 .claude/skills/better-layout/LICENSE create mode 100644 .claude/skills/better-layout/PROVENANCE.md create mode 100644 .claude/skills/better-layout/SKILL.md create mode 100644 .claude/skills/better-layout/agents/openai.yaml create mode 100644 .claude/skills/better-layout/grouping-and-alignment.md create mode 100644 .claude/skills/better-layout/spacing-and-adaptivity.md create mode 100644 .claude/skills/better-typography/LICENSE create mode 100644 .claude/skills/better-typography/PROVENANCE.md create mode 100644 .claude/skills/better-typography/SKILL.md create mode 100644 .claude/skills/better-typography/agents/openai.yaml create mode 100644 .claude/skills/better-typography/choosing-fonts.md create mode 100644 .claude/skills/better-typography/css-cheat-sheet.md create mode 100644 .claude/skills/better-typography/details-and-accessibility.md create mode 100644 .claude/skills/better-typography/spacing-and-sizing.md create mode 100644 .claude/skills/better-typography/variable-fonts-and-opentype.md create mode 100644 .claude/skills/better-typography/wrapping-and-punctuation.md create mode 100644 .claude/skills/better-ui/LICENSE create mode 100644 .claude/skills/better-ui/PROVENANCE.md create mode 100644 .claude/skills/better-ui/SKILL.md create mode 100644 .claude/skills/better-ui/agents/openai.yaml create mode 100644 .claude/skills/better-ui/animations.md create mode 100644 .claude/skills/better-ui/enter-exit.md create mode 100644 .claude/skills/better-ui/icon-transitions.md create mode 100644 .claude/skills/better-ui/icons.md create mode 100644 .claude/skills/better-ui/performance.md create mode 100644 .claude/skills/better-ui/surfaces.md create mode 100644 .claude/skills/better-writing/LICENSE create mode 100644 .claude/skills/better-writing/PROVENANCE.md create mode 100644 .claude/skills/better-writing/SKILL.md create mode 100644 .claude/skills/better-writing/agents/openai.yaml create mode 100644 .claude/skills/break/LICENSE create mode 100644 .claude/skills/break/PROVENANCE.md create mode 100644 .claude/skills/break/SKILL.md create mode 100644 .claude/skills/break/agents/openai.yaml create mode 100644 .claude/skills/break/scenarios.md create mode 100644 .claude/skills/design-taste-frontend-v1/LICENSE create mode 100644 .claude/skills/design-taste-frontend-v1/PROVENANCE.md create mode 100644 .claude/skills/design-taste-frontend-v1/SKILL.md create mode 100644 .claude/skills/design-taste-frontend/LICENSE create mode 100644 .claude/skills/design-taste-frontend/PROVENANCE.md create mode 100644 .claude/skills/design-taste-frontend/SKILL.md create mode 100644 .claude/skills/explain-interface/LICENSE create mode 100644 .claude/skills/explain-interface/PROVENANCE.md create mode 100644 .claude/skills/explain-interface/SKILL.md create mode 100644 .claude/skills/explain-interface/agents/openai.yaml create mode 100644 .claude/skills/explain-interface/find-the-effect.md create mode 100644 .claude/skills/explain-interface/from-an-image.md create mode 100644 .claude/skills/explain-interface/no-browser.md create mode 100644 .claude/skills/explain-interface/read-the-system.md create mode 100644 .claude/skills/expo-animation/LICENSE create mode 100644 .claude/skills/expo-animation/LICENSE.repository create mode 100644 .claude/skills/expo-animation/PROVENANCE.md create mode 100644 .claude/skills/expo-animation/RECIPES.md create mode 100644 .claude/skills/expo-animation/SKILL.md create mode 100644 .claude/skills/expo-animation/agents/openai.yaml create mode 100644 .claude/skills/expo-design-system/LICENSE create mode 100644 .claude/skills/expo-design-system/PROVENANCE.md create mode 100644 .claude/skills/expo-design-system/SKILL.md create mode 100644 .claude/skills/expo-design-system/agents/openai.yaml create mode 100644 .claude/skills/expo-design-system/references/audit.md create mode 100644 .claude/skills/expo-design-system/references/native-slop.md create mode 100644 .claude/skills/expo-native-ui/LICENSE create mode 100644 .claude/skills/expo-native-ui/PROVENANCE.md create mode 100644 .claude/skills/expo-native-ui/SKILL.md create mode 100644 .claude/skills/expo-native-ui/agents/openai.yaml create mode 100644 .claude/skills/expo-native-ui/references/controls.md create mode 100644 .claude/skills/expo-native-ui/references/gradients.md create mode 100644 .claude/skills/expo-native-ui/references/icons.md create mode 100644 .claude/skills/expo-native-ui/references/media.md create mode 100644 .claude/skills/expo-native-ui/references/storage.md create mode 100644 .claude/skills/expo-native-ui/references/visual-effects.md create mode 100644 .claude/skills/expo-native-ui/references/webgpu-three.md create mode 100644 .claude/skills/expo-router/LICENSE create mode 100644 .claude/skills/expo-router/PROVENANCE.md create mode 100644 .claude/skills/expo-router/SKILL.md create mode 100644 .claude/skills/expo-router/agents/openai.yaml create mode 100644 .claude/skills/expo-router/references/form-sheet.md create mode 100644 .claude/skills/expo-router/references/route-structure.md create mode 100644 .claude/skills/expo-router/references/search.md create mode 100644 .claude/skills/expo-router/references/tabs.md create mode 100644 .claude/skills/expo-router/references/toolbar-and-headers.md create mode 100644 .claude/skills/expo-router/references/zoom-transitions.md create mode 100644 .claude/skills/expo-ui/LICENSE create mode 100644 .claude/skills/expo-ui/PROVENANCE.md create mode 100644 .claude/skills/expo-ui/SKILL.md create mode 100644 .claude/skills/expo-ui/agents/openai.yaml create mode 100644 .claude/skills/expo-ui/references/drop-in-replacements.md create mode 100644 .claude/skills/expo-ui/references/jetpack-compose.md create mode 100644 .claude/skills/expo-ui/references/swift-ui.md create mode 100644 .claude/skills/expo-ui/references/universal.md create mode 100644 .claude/skills/expo-ui/scripts/list-components.mjs create mode 100644 .claude/skills/flutter-build-responsive-layout/LICENSE create mode 100644 .claude/skills/flutter-build-responsive-layout/PROVENANCE.md create mode 100644 .claude/skills/flutter-build-responsive-layout/SKILL.md create mode 100644 .claude/skills/flutter-fix-layout-issues/LICENSE create mode 100644 .claude/skills/flutter-fix-layout-issues/PROVENANCE.md create mode 100644 .claude/skills/flutter-fix-layout-issues/SKILL.md create mode 100644 .claude/skills/flutter-setup-declarative-routing/LICENSE create mode 100644 .claude/skills/flutter-setup-declarative-routing/PROVENANCE.md create mode 100644 .claude/skills/flutter-setup-declarative-routing/SKILL.md create mode 100644 .claude/skills/flutter-setup-localization/LICENSE create mode 100644 .claude/skills/flutter-setup-localization/PROVENANCE.md create mode 100644 .claude/skills/flutter-setup-localization/SKILL.md create mode 100644 .claude/skills/full-output-enforcement/LICENSE create mode 100644 .claude/skills/full-output-enforcement/PROVENANCE.md create mode 100644 .claude/skills/full-output-enforcement/SKILL.md create mode 100644 .claude/skills/gpt-taste/LICENSE create mode 100644 .claude/skills/gpt-taste/PROVENANCE.md create mode 100644 .claude/skills/gpt-taste/SKILL.md create mode 100644 .claude/skills/high-end-visual-design/LICENSE create mode 100644 .claude/skills/high-end-visual-design/PROVENANCE.md create mode 100644 .claude/skills/high-end-visual-design/SKILL.md create mode 100644 .claude/skills/industrial-brutalist-ui/LICENSE create mode 100644 .claude/skills/industrial-brutalist-ui/PROVENANCE.md create mode 100644 .claude/skills/industrial-brutalist-ui/SKILL.md create mode 100644 .claude/skills/interface-review/LICENSE create mode 100644 .claude/skills/interface-review/PROVENANCE.md create mode 100644 .claude/skills/interface-review/SKILL.md create mode 100644 .claude/skills/interface-review/agents/openai.yaml create mode 100644 .claude/skills/interface-review/removed-signals.md create mode 100644 .claude/skills/interface-review/scope-resolution.md create mode 100644 .claude/skills/minimalist-ui/LICENSE create mode 100644 .claude/skills/minimalist-ui/PROVENANCE.md create mode 100644 .claude/skills/minimalist-ui/SKILL.md create mode 100644 .claude/skills/prometheus-impeccable-core/SKILL.md create mode 100644 .claude/skills/prometheus-impeccable-core/references/LICENSE.impeccable create mode 100644 .claude/skills/prometheus-impeccable-core/references/impeccable-context-and-modes.md create mode 100644 .claude/skills/prometheus-impeccable-core/references/impeccable-craft-floor.md create mode 100644 .claude/skills/prometheus-ui-review/SKILL.md create mode 100644 .claude/skills/prometheus-ui-ux/SKILL.md create mode 100644 .claude/skills/prometheus-ui-ux/references/UI_UX_PROTOCOL.md create mode 100644 .claude/skills/prometheus-ui-ux/references/catalog.lock.json create mode 100644 .claude/skills/prometheus-ui-ux/references/deferred-ports.md create mode 100644 .claude/skills/prometheus-ui-ux/references/pointer.md create mode 100644 .claude/skills/prometheus-ui-ux/references/runtime-api.md create mode 100644 .claude/skills/prometheus-ui-ux/scripts/cli.mjs create mode 100644 .claude/skills/prometheus-ui-ux/scripts/install.mjs create mode 100644 .claude/skills/prometheus-ui-ux/scripts/routing.mjs create mode 100644 .claude/skills/redesign-existing-projects/LICENSE create mode 100644 .claude/skills/redesign-existing-projects/PROVENANCE.md create mode 100644 .claude/skills/redesign-existing-projects/SKILL.md create mode 100644 .claude/skills/stitch-design-taste/DESIGN.stitch.md create mode 100644 .claude/skills/stitch-design-taste/LICENSE create mode 100644 .claude/skills/stitch-design-taste/PROVENANCE.md create mode 100644 .claude/skills/stitch-design-taste/SKILL.md create mode 100644 .claude/skills/swiftui-pro/LICENSE create mode 100644 .claude/skills/swiftui-pro/PROVENANCE.md create mode 100644 .claude/skills/swiftui-pro/SKILL.md create mode 100644 .claude/skills/swiftui-pro/agents/openai.yaml create mode 100644 .claude/skills/swiftui-pro/assets/swiftui-pro-icon.png create mode 100644 .claude/skills/swiftui-pro/assets/swiftui-pro-icon.svg create mode 100644 .claude/skills/swiftui-pro/references/accessibility.md create mode 100644 .claude/skills/swiftui-pro/references/api.md create mode 100644 .claude/skills/swiftui-pro/references/data.md create mode 100644 .claude/skills/swiftui-pro/references/design.md create mode 100644 .claude/skills/swiftui-pro/references/hygiene.md create mode 100644 .claude/skills/swiftui-pro/references/navigation.md create mode 100644 .claude/skills/swiftui-pro/references/performance.md create mode 100644 .claude/skills/swiftui-pro/references/swift.md create mode 100644 .claude/skills/swiftui-pro/references/views.md create mode 100644 .claude/skills/ui-ux-pro-max/LICENSE create mode 100644 .claude/skills/ui-ux-pro-max/PORT.md create mode 100644 .claude/skills/ui-ux-pro-max/SKILL.md create mode 100644 .claude/skills/ui-ux-pro-max/data/app-interface.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/catalog-summary.json create mode 100644 .claude/skills/ui-ux-pro-max/data/charts.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/colors.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/data-provenance.json create mode 100644 .claude/skills/ui-ux-pro-max/data/google-font-licenses.json create mode 100644 .claude/skills/ui-ux-pro-max/data/google-fonts.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/icons.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/landing.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/motion.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/phosphor-icons-upstream.json create mode 100644 .claude/skills/ui-ux-pro-max/data/products.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/react-performance.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/search-config.json create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/angular.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/astro.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/avalonia.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/flutter.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/javafx.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/laravel.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/nextjs.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/react-native.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/react.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/shadcn.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/svelte.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/swiftui.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/threejs.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/uno.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/uwp.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/vue.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/winui.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/stacks/wpf.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/styles.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/typography.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/ui-reasoning.csv create mode 100644 .claude/skills/ui-ux-pro-max/data/ux-guidelines.csv create mode 100644 .claude/skills/ui-ux-pro-max/provenance.json create mode 100644 .claude/skills/ui-ux-pro-max/reference-cases.json create mode 100644 .claude/skills/ui-ux-pro-max/references/pro-rules.md create mode 100644 .claude/skills/ui-ux-pro-max/references/quick-reference.md create mode 100644 .claude/skills/ui-ux-pro-max/scripts/core.mjs create mode 100644 .claude/skills/ui-ux-pro-max/scripts/data.mjs create mode 100644 .claude/skills/ui-ux-pro-max/scripts/design-system.mjs create mode 100644 .claude/skills/ui-ux-pro-max/scripts/format.mjs create mode 100644 .claude/skills/ui-ux-pro-max/scripts/persistence.mjs create mode 100644 .claude/skills/ui-ux-pro-max/scripts/ranking.mjs create mode 100644 .claude/skills/ui-ux-pro-max/scripts/reasoning.mjs create mode 100644 .claude/skills/ui-ux-pro-max/scripts/search.mjs create mode 100644 .claude/skills/variant/LICENSE create mode 100644 .claude/skills/variant/PROVENANCE.md create mode 100644 .claude/skills/variant/SKILL.md create mode 100644 .claude/skills/variant/agents/openai.yaml create mode 100644 .claude/skills/variant/picker.md create mode 100644 .claude/skills/vercel-composition-patterns/AGENTS.md create mode 100644 .claude/skills/vercel-composition-patterns/PROVENANCE.md create mode 100644 .claude/skills/vercel-composition-patterns/README.md create mode 100644 .claude/skills/vercel-composition-patterns/SKILL.md create mode 100644 .claude/skills/vercel-composition-patterns/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 .claude/skills/vercel-composition-patterns/metadata.json create mode 100644 .claude/skills/vercel-composition-patterns/rules/_sections.md create mode 100644 .claude/skills/vercel-composition-patterns/rules/_template.md create mode 100644 .claude/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md create mode 100644 .claude/skills/vercel-composition-patterns/rules/architecture-compound-components.md create mode 100644 .claude/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md create mode 100644 .claude/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md create mode 100644 .claude/skills/vercel-composition-patterns/rules/react19-no-forwardref.md create mode 100644 .claude/skills/vercel-composition-patterns/rules/state-context-interface.md create mode 100644 .claude/skills/vercel-composition-patterns/rules/state-decouple-implementation.md create mode 100644 .claude/skills/vercel-composition-patterns/rules/state-lift-state.md create mode 100644 .claude/skills/vercel-react-best-practices/AGENTS.md create mode 100644 .claude/skills/vercel-react-best-practices/PROVENANCE.md create mode 100644 .claude/skills/vercel-react-best-practices/README.md create mode 100644 .claude/skills/vercel-react-best-practices/SKILL.md create mode 100644 .claude/skills/vercel-react-best-practices/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 .claude/skills/vercel-react-best-practices/metadata.json create mode 100644 .claude/skills/vercel-react-best-practices/rules/_sections.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/_template.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/advanced-init-once.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/async-api-routes.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/async-defer-await.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/async-dependencies.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/async-parallel.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/bundle-conditional.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/bundle-preload.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/client-event-listeners.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/js-cache-storage.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/js-early-exit.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/js-flatmap-filter.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/js-index-maps.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/js-length-check-first.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/js-request-idle-callback.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rendering-activity.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rendering-resource-hints.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rerender-memo.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rerender-transitions.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/server-auth-actions.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/server-cache-lru.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/server-cache-react.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/server-dedup-props.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/server-hoist-static-io.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md create mode 100644 .claude/skills/vercel-react-best-practices/rules/server-serialization.md create mode 100644 .claude/skills/vercel-react-native-skills/AGENTS.md create mode 100644 .claude/skills/vercel-react-native-skills/PROVENANCE.md create mode 100644 .claude/skills/vercel-react-native-skills/README.md create mode 100644 .claude/skills/vercel-react-native-skills/SKILL.md create mode 100644 .claude/skills/vercel-react-native-skills/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 .claude/skills/vercel-react-native-skills/metadata.json create mode 100644 .claude/skills/vercel-react-native-skills/rules/_sections.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/_template.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/animation-derived-value.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/animation-gesture-detector-press.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/animation-gpu-properties.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/design-system-compound-components.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/fonts-config-plugin.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/imports-design-system-folder.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/js-hoist-intl.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/list-performance-callbacks.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/list-performance-function-references.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/list-performance-images.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/list-performance-inline-objects.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/list-performance-item-expensive.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/list-performance-item-memo.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/list-performance-item-types.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/list-performance-virtualize.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/monorepo-native-deps-in-app.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/monorepo-single-dependency-versions.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/navigation-native-navigators.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/react-compiler-destructure-functions.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/react-compiler-reanimated-shared-values.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/react-state-dispatcher.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/react-state-fallback.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/react-state-minimize.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/rendering-no-falsy-and.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/rendering-text-in-text-component.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/scroll-position-no-state.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/state-ground-truth.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/ui-expo-image.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/ui-image-gallery.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/ui-measure-views.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/ui-menus.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/ui-native-modals.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/ui-pressable.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/ui-safe-area-scroll.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/ui-scrollview-content-inset.md create mode 100644 .claude/skills/vercel-react-native-skills/rules/ui-styling.md create mode 100644 .claude/skills/web-design-guidelines/PROVENANCE.md create mode 100644 .claude/skills/web-design-guidelines/SKILL.md create mode 100644 .claude/skills/web-design-guidelines/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 .claude/skills/web-design-guidelines/references/LICENSE.web-interface-guidelines create mode 100644 .claude/skills/web-design-guidelines/references/web-interface-guidelines.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/agent-team-creator/references/project-installation.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/agent-team-creator/runtime/src/project-files.mts create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/agent-team-creator/runtime/src/project-install.mts create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/agent-team-creator/runtime/src/project-instructions.mts create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/agent-team-creator/runtime/src/ui-bindings.mts create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/agent-team-creator/schemas/project-routing.schema.json create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/agent-team-creator/scripts/project-files.mjs create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/agent-team-creator/scripts/project-install.mjs create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/agent-team-creator/scripts/project-instructions.mjs create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/agent-team-creator/scripts/ui-bindings.mjs create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/android-compose-adaptive/LICENSE.txt create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/android-compose-adaptive/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/android-compose-adaptive/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/tooling/debug.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/android-compose-adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/android-edge-to-edge/LICENSE.txt create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/android-edge-to-edge/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/android-edge-to-edge/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-accessibility/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-accessibility/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-accessibility/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-accessibility/agents/openai.yaml create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-accessibility/focus-and-keyboard.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-accessibility/forms.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-accessibility/hit-areas.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-accessibility/motion-and-zoom.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-accessibility/screen-readers.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-accessibility/semantics-and-aria.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-colors/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-colors/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-colors/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-colors/agents/openai.yaml create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-colors/color-formats.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-colors/color-usage.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-colors/contrast.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-colors/palette-generation.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-colors/palette-structure.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-colors/token-naming.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-interface/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-interface/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-interface/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-interface/agents/openai.yaml create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-interface/review-format.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-layout/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-layout/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-layout/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-layout/agents/openai.yaml create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-layout/grouping-and-alignment.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-layout/spacing-and-adaptivity.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-typography/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-typography/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-typography/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-typography/agents/openai.yaml create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-typography/choosing-fonts.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-typography/css-cheat-sheet.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-typography/details-and-accessibility.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-typography/spacing-and-sizing.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-typography/variable-fonts-and-opentype.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-typography/wrapping-and-punctuation.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-ui/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-ui/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-ui/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-ui/agents/openai.yaml create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-ui/animations.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-ui/enter-exit.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-ui/icon-transitions.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-ui/icons.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-ui/performance.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-ui/surfaces.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-writing/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-writing/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-writing/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/better-writing/agents/openai.yaml create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/break/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/break/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/break/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/break/agents/openai.yaml create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/break/scenarios.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/design-taste-frontend-v1/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/design-taste-frontend-v1/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/design-taste-frontend-v1/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/design-taste-frontend/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/design-taste-frontend/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/design-taste-frontend/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/explain-interface/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/explain-interface/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/explain-interface/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/explain-interface/agents/openai.yaml create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/explain-interface/find-the-effect.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/explain-interface/from-an-image.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/explain-interface/no-browser.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/explain-interface/read-the-system.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-animation/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-animation/LICENSE.repository create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-animation/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-animation/RECIPES.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-animation/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-animation/agents/openai.yaml create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-design-system/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-design-system/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-design-system/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-design-system/agents/openai.yaml create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-design-system/references/audit.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-design-system/references/native-slop.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-native-ui/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-native-ui/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-native-ui/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-native-ui/agents/openai.yaml create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-native-ui/references/controls.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-native-ui/references/gradients.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-native-ui/references/icons.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-native-ui/references/media.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-native-ui/references/storage.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-native-ui/references/visual-effects.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-native-ui/references/webgpu-three.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-router/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-router/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-router/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-router/agents/openai.yaml create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-router/references/form-sheet.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-router/references/route-structure.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-router/references/search.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-router/references/tabs.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-router/references/toolbar-and-headers.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-router/references/zoom-transitions.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-ui/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-ui/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-ui/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-ui/agents/openai.yaml create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-ui/references/drop-in-replacements.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-ui/references/jetpack-compose.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-ui/references/swift-ui.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-ui/references/universal.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/expo-ui/scripts/list-components.mjs create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/flutter-build-responsive-layout/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/flutter-build-responsive-layout/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/flutter-build-responsive-layout/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/flutter-fix-layout-issues/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/flutter-fix-layout-issues/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/flutter-fix-layout-issues/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/flutter-setup-declarative-routing/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/flutter-setup-declarative-routing/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/flutter-setup-declarative-routing/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/flutter-setup-localization/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/flutter-setup-localization/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/flutter-setup-localization/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/full-output-enforcement/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/full-output-enforcement/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/full-output-enforcement/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/gpt-taste/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/gpt-taste/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/gpt-taste/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/high-end-visual-design/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/high-end-visual-design/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/high-end-visual-design/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/industrial-brutalist-ui/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/industrial-brutalist-ui/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/industrial-brutalist-ui/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/interface-review/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/interface-review/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/interface-review/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/interface-review/agents/openai.yaml create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/interface-review/removed-signals.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/interface-review/scope-resolution.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/minimalist-ui/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/minimalist-ui/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/minimalist-ui/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-impeccable-core/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-impeccable-core/references/LICENSE.impeccable create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-impeccable-core/references/impeccable-context-and-modes.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-impeccable-core/references/impeccable-craft-floor.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-ui-review/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-ui-ux/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-ui-ux/references/UI_UX_PROTOCOL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-ui-ux/references/catalog.lock.json create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-ui-ux/references/deferred-ports.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-ui-ux/references/pointer.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-ui-ux/references/runtime-api.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-ui-ux/runtime/package.json create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-ui-ux/runtime/src/cli.mts create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-ui-ux/runtime/src/install.mts create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-ui-ux/runtime/src/routing.mts create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-ui-ux/runtime/tsconfig.json create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-ui-ux/scripts/cli.mjs create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-ui-ux/scripts/install.mjs create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/prometheus-ui-ux/scripts/routing.mjs create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/redesign-existing-projects/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/redesign-existing-projects/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/redesign-existing-projects/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/stitch-design-taste/DESIGN.stitch.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/stitch-design-taste/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/stitch-design-taste/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/stitch-design-taste/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/swiftui-pro/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/swiftui-pro/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/swiftui-pro/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/swiftui-pro/agents/openai.yaml create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/swiftui-pro/assets/swiftui-pro-icon.png create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/swiftui-pro/assets/swiftui-pro-icon.svg create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/swiftui-pro/references/accessibility.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/swiftui-pro/references/api.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/swiftui-pro/references/data.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/swiftui-pro/references/design.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/swiftui-pro/references/hygiene.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/swiftui-pro/references/navigation.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/swiftui-pro/references/performance.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/swiftui-pro/references/swift.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/swiftui-pro/references/views.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/PORT.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/app-interface.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/catalog-summary.json create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/charts.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/colors.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/data-provenance.json create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/google-font-licenses.json create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/google-fonts.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/icons.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/landing.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/motion.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/phosphor-icons-upstream.json create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/products.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/react-performance.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/search-config.json create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/angular.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/astro.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/avalonia.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/flutter.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/javafx.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/laravel.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/nextjs.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/react-native.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/react.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/shadcn.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/svelte.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/swiftui.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/threejs.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/uno.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/uwp.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/vue.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/winui.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/wpf.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/styles.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/typography.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/ui-reasoning.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/data/ux-guidelines.csv create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/provenance.json create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/reference-cases.json create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/references/pro-rules.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/references/quick-reference.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/.gitignore create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/package-lock.json create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/package.json create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/src/core.mts create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/src/data.mts create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/src/design-system.mts create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/src/format.mts create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/src/persistence.mts create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/src/ranking.mts create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/src/reasoning.mts create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/src/search.mts create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/tsconfig.json create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/scripts/core.mjs create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/scripts/data.mjs create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/scripts/design-system.mjs create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/scripts/format.mjs create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/scripts/persistence.mjs create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/scripts/ranking.mjs create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/scripts/reasoning.mjs create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/ui-ux-pro-max/scripts/search.mjs create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/variant/LICENSE create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/variant/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/variant/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/variant/agents/openai.yaml create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/variant/picker.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-composition-patterns/AGENTS.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-composition-patterns/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-composition-patterns/README.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-composition-patterns/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-composition-patterns/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-composition-patterns/metadata.json create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-composition-patterns/rules/_sections.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-composition-patterns/rules/_template.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-composition-patterns/rules/architecture-compound-components.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-composition-patterns/rules/react19-no-forwardref.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-composition-patterns/rules/state-context-interface.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-composition-patterns/rules/state-decouple-implementation.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-composition-patterns/rules/state-lift-state.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/AGENTS.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/README.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/metadata.json create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/_sections.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/_template.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/advanced-init-once.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/advanced-use-latest.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/async-api-routes.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/async-defer-await.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/async-dependencies.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/async-parallel.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/bundle-conditional.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/bundle-preload.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/client-event-listeners.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/client-localstorage-schema.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/client-swr-dedup.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-batch-dom-css.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-cache-function-results.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-cache-property-access.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-cache-storage.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-combine-iterations.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-early-exit.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-flatmap-filter.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-hoist-regexp.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-index-maps.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-length-check-first.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-min-max-loop.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-request-idle-callback.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-set-map-lookups.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-activity.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-conditional-render.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-content-visibility.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-resource-hints.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-svg-precision.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-defer-reads.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-dependencies.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-derived-state.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-memo.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-transitions.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-after-nonblocking.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-auth-actions.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-cache-lru.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-cache-react.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-dedup-props.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-hoist-static-io.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-parallel-fetching.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-serialization.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/AGENTS.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/README.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/metadata.json create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/_sections.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/_template.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/animation-derived-value.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/animation-gesture-detector-press.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/animation-gpu-properties.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/design-system-compound-components.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/fonts-config-plugin.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/imports-design-system-folder.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/js-hoist-intl.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/list-performance-callbacks.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/list-performance-function-references.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/list-performance-images.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/list-performance-inline-objects.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/list-performance-item-expensive.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/list-performance-item-memo.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/list-performance-item-types.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/list-performance-virtualize.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/monorepo-native-deps-in-app.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/monorepo-single-dependency-versions.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/navigation-native-navigators.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/react-compiler-destructure-functions.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/react-compiler-reanimated-shared-values.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/react-state-dispatcher.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/react-state-fallback.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/react-state-minimize.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/rendering-no-falsy-and.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/rendering-text-in-text-component.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/scroll-position-no-state.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/state-ground-truth.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/ui-expo-image.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/ui-image-gallery.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/ui-measure-views.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/ui-menus.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/ui-native-modals.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/ui-pressable.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/ui-safe-area-scroll.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/ui-scrollview-content-inset.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/vercel-react-native-skills/rules/ui-styling.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/web-design-guidelines/PROVENANCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/web-design-guidelines/SKILL.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/web-design-guidelines/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/web-design-guidelines/references/LICENSE.web-interface-guidelines create mode 100644 dist/plugins/claude/prometheus-skills-mini/skills/web-design-guidelines/references/web-interface-guidelines.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/agent-team-creator/references/project-installation.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/agent-team-creator/runtime/src/project-files.mts create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/agent-team-creator/runtime/src/project-install.mts create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/agent-team-creator/runtime/src/project-instructions.mts create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/agent-team-creator/runtime/src/ui-bindings.mts create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/agent-team-creator/schemas/project-routing.schema.json create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/agent-team-creator/scripts/project-files.mjs create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/agent-team-creator/scripts/project-install.mjs create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/agent-team-creator/scripts/project-instructions.mjs create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/agent-team-creator/scripts/ui-bindings.mjs create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/android-compose-adaptive/LICENSE.txt create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/android-compose-adaptive/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/android-compose-adaptive/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/android-compose-adaptive/references/android/develop/ui/compose/tooling/debug.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/android-compose-adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/android-edge-to-edge/LICENSE.txt create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/android-edge-to-edge/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/android-edge-to-edge/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-accessibility/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-accessibility/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-accessibility/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-accessibility/agents/openai.yaml create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-accessibility/focus-and-keyboard.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-accessibility/forms.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-accessibility/hit-areas.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-accessibility/motion-and-zoom.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-accessibility/screen-readers.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-accessibility/semantics-and-aria.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-colors/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-colors/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-colors/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-colors/agents/openai.yaml create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-colors/color-formats.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-colors/color-usage.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-colors/contrast.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-colors/palette-generation.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-colors/palette-structure.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-colors/token-naming.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-interface/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-interface/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-interface/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-interface/agents/openai.yaml create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-interface/review-format.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-layout/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-layout/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-layout/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-layout/agents/openai.yaml create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-layout/grouping-and-alignment.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-layout/spacing-and-adaptivity.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-typography/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-typography/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-typography/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-typography/agents/openai.yaml create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-typography/choosing-fonts.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-typography/css-cheat-sheet.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-typography/details-and-accessibility.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-typography/spacing-and-sizing.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-typography/variable-fonts-and-opentype.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-typography/wrapping-and-punctuation.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-ui/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-ui/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-ui/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-ui/agents/openai.yaml create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-ui/animations.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-ui/enter-exit.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-ui/icon-transitions.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-ui/icons.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-ui/performance.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-ui/surfaces.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-writing/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-writing/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-writing/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/better-writing/agents/openai.yaml create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/break/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/break/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/break/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/break/agents/openai.yaml create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/break/scenarios.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/design-taste-frontend-v1/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/design-taste-frontend-v1/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/design-taste-frontend-v1/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/design-taste-frontend/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/design-taste-frontend/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/design-taste-frontend/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/explain-interface/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/explain-interface/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/explain-interface/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/explain-interface/agents/openai.yaml create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/explain-interface/find-the-effect.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/explain-interface/from-an-image.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/explain-interface/no-browser.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/explain-interface/read-the-system.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-animation/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-animation/LICENSE.repository create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-animation/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-animation/RECIPES.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-animation/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-animation/agents/openai.yaml create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-design-system/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-design-system/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-design-system/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-design-system/agents/openai.yaml create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-design-system/references/audit.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-design-system/references/native-slop.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-native-ui/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-native-ui/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-native-ui/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-native-ui/agents/openai.yaml create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-native-ui/references/controls.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-native-ui/references/gradients.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-native-ui/references/icons.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-native-ui/references/media.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-native-ui/references/storage.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-native-ui/references/visual-effects.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-native-ui/references/webgpu-three.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-router/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-router/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-router/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-router/agents/openai.yaml create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-router/references/form-sheet.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-router/references/route-structure.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-router/references/search.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-router/references/tabs.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-router/references/toolbar-and-headers.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-router/references/zoom-transitions.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-ui/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-ui/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-ui/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-ui/agents/openai.yaml create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-ui/references/drop-in-replacements.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-ui/references/jetpack-compose.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-ui/references/swift-ui.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-ui/references/universal.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/expo-ui/scripts/list-components.mjs create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/flutter-build-responsive-layout/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/flutter-build-responsive-layout/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/flutter-build-responsive-layout/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/flutter-fix-layout-issues/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/flutter-fix-layout-issues/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/flutter-fix-layout-issues/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/flutter-setup-declarative-routing/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/flutter-setup-declarative-routing/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/flutter-setup-declarative-routing/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/flutter-setup-localization/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/flutter-setup-localization/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/flutter-setup-localization/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/full-output-enforcement/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/full-output-enforcement/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/full-output-enforcement/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/gpt-taste/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/gpt-taste/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/gpt-taste/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/high-end-visual-design/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/high-end-visual-design/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/high-end-visual-design/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/industrial-brutalist-ui/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/industrial-brutalist-ui/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/industrial-brutalist-ui/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/interface-review/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/interface-review/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/interface-review/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/interface-review/agents/openai.yaml create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/interface-review/removed-signals.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/interface-review/scope-resolution.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/minimalist-ui/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/minimalist-ui/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/minimalist-ui/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-impeccable-core/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-impeccable-core/references/LICENSE.impeccable create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-impeccable-core/references/impeccable-context-and-modes.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-impeccable-core/references/impeccable-craft-floor.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-ui-review/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-ui-ux/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-ui-ux/references/UI_UX_PROTOCOL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-ui-ux/references/catalog.lock.json create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-ui-ux/references/deferred-ports.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-ui-ux/references/pointer.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-ui-ux/references/runtime-api.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-ui-ux/runtime/package.json create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-ui-ux/runtime/src/cli.mts create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-ui-ux/runtime/src/install.mts create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-ui-ux/runtime/src/routing.mts create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-ui-ux/runtime/tsconfig.json create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-ui-ux/scripts/cli.mjs create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-ui-ux/scripts/install.mjs create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/prometheus-ui-ux/scripts/routing.mjs create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/redesign-existing-projects/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/redesign-existing-projects/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/redesign-existing-projects/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/stitch-design-taste/DESIGN.stitch.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/stitch-design-taste/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/stitch-design-taste/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/stitch-design-taste/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/swiftui-pro/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/swiftui-pro/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/swiftui-pro/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/swiftui-pro/agents/openai.yaml create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/swiftui-pro/assets/swiftui-pro-icon.png create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/swiftui-pro/assets/swiftui-pro-icon.svg create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/swiftui-pro/references/accessibility.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/swiftui-pro/references/api.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/swiftui-pro/references/data.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/swiftui-pro/references/design.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/swiftui-pro/references/hygiene.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/swiftui-pro/references/navigation.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/swiftui-pro/references/performance.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/swiftui-pro/references/swift.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/swiftui-pro/references/views.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/PORT.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/app-interface.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/catalog-summary.json create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/charts.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/colors.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/data-provenance.json create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/google-font-licenses.json create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/google-fonts.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/icons.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/landing.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/motion.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/phosphor-icons-upstream.json create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/products.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/react-performance.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/search-config.json create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/angular.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/astro.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/avalonia.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/flutter.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/javafx.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/laravel.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/nextjs.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/react-native.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/react.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/shadcn.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/svelte.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/swiftui.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/threejs.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/uno.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/uwp.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/vue.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/winui.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/stacks/wpf.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/styles.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/typography.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/ui-reasoning.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/data/ux-guidelines.csv create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/provenance.json create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/reference-cases.json create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/references/pro-rules.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/references/quick-reference.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/.gitignore create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/package-lock.json create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/package.json create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/src/core.mts create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/src/data.mts create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/src/design-system.mts create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/src/format.mts create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/src/persistence.mts create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/src/ranking.mts create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/src/reasoning.mts create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/src/search.mts create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/runtime/tsconfig.json create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/scripts/core.mjs create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/scripts/data.mjs create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/scripts/design-system.mjs create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/scripts/format.mjs create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/scripts/persistence.mjs create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/scripts/ranking.mjs create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/scripts/reasoning.mjs create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/ui-ux-pro-max/scripts/search.mjs create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/variant/LICENSE create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/variant/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/variant/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/variant/agents/openai.yaml create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/variant/picker.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-composition-patterns/AGENTS.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-composition-patterns/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-composition-patterns/README.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-composition-patterns/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-composition-patterns/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-composition-patterns/metadata.json create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-composition-patterns/rules/_sections.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-composition-patterns/rules/_template.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-composition-patterns/rules/architecture-compound-components.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-composition-patterns/rules/patterns-explicit-variants.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-composition-patterns/rules/react19-no-forwardref.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-composition-patterns/rules/state-context-interface.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-composition-patterns/rules/state-decouple-implementation.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-composition-patterns/rules/state-lift-state.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/AGENTS.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/README.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/metadata.json create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/_sections.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/_template.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/advanced-init-once.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/advanced-use-latest.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/async-api-routes.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/async-defer-await.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/async-dependencies.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/async-parallel.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/bundle-conditional.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/bundle-preload.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/client-event-listeners.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/client-localstorage-schema.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/client-swr-dedup.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-batch-dom-css.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-cache-function-results.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-cache-property-access.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-cache-storage.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-combine-iterations.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-early-exit.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-flatmap-filter.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-hoist-regexp.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-index-maps.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-length-check-first.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-min-max-loop.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-request-idle-callback.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-set-map-lookups.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-activity.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-conditional-render.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-content-visibility.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-resource-hints.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-script-defer-async.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-svg-precision.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-defer-reads.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-dependencies.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-derived-state.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-memo.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-no-inline-components.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-transitions.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-after-nonblocking.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-auth-actions.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-cache-lru.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-cache-react.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-dedup-props.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-hoist-static-io.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-no-shared-module-state.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-parallel-fetching.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-best-practices/rules/server-serialization.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/AGENTS.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/README.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/metadata.json create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/_sections.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/_template.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/animation-derived-value.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/animation-gesture-detector-press.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/animation-gpu-properties.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/design-system-compound-components.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/fonts-config-plugin.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/imports-design-system-folder.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/js-hoist-intl.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/list-performance-callbacks.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/list-performance-function-references.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/list-performance-images.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/list-performance-inline-objects.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/list-performance-item-expensive.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/list-performance-item-memo.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/list-performance-item-types.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/list-performance-virtualize.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/monorepo-native-deps-in-app.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/monorepo-single-dependency-versions.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/navigation-native-navigators.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/react-compiler-destructure-functions.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/react-compiler-reanimated-shared-values.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/react-state-dispatcher.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/react-state-fallback.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/react-state-minimize.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/rendering-no-falsy-and.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/rendering-text-in-text-component.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/scroll-position-no-state.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/state-ground-truth.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/ui-expo-image.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/ui-image-gallery.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/ui-measure-views.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/ui-menus.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/ui-native-modals.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/ui-pressable.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/ui-safe-area-scroll.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/ui-scrollview-content-inset.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/vercel-react-native-skills/rules/ui-styling.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/web-design-guidelines/PROVENANCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/web-design-guidelines/SKILL.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/web-design-guidelines/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/web-design-guidelines/references/LICENSE.web-interface-guidelines create mode 100644 dist/plugins/codex/prometheus-skills-mini/skills/web-design-guidelines/references/web-interface-guidelines.md create mode 100644 docs/research/ui-ux-routing/DELIVERY.md create mode 100644 docs/research/ui-ux-routing/independent-review.md create mode 100644 docs/research/ui-ux-routing/integration-receipt.json create mode 100644 docs/research/ui-ux-routing/linux-integration-receipt.json create mode 100644 docs/research/ui-ux-routing/manifest.json create mode 100644 docs/research/ui-ux-routing/report.md create mode 100644 docs/research/ui-ux-routing/review/findings.initial.json create mode 100644 docs/research/ui-ux-routing/review/findings.json create mode 100644 docs/research/ui-ux-routing/review/packet.json create mode 100644 docs/research/ui-ux-routing/skill-validation-confirmation.log create mode 100644 references/ui-ux/COMPATIBILITY.md create mode 100644 references/ui-ux/catalog.lock.json create mode 100644 scripts/uiux-routing.integration.mjs create mode 100644 skills/agent-team-creator/references/project-installation.md create mode 100644 skills/agent-team-creator/runtime/src/project-files.mts create mode 100644 skills/agent-team-creator/runtime/src/project-install.mts create mode 100644 skills/agent-team-creator/runtime/src/project-instructions.mts create mode 100644 skills/agent-team-creator/runtime/src/ui-bindings.mts create mode 100644 skills/agent-team-creator/schemas/project-routing.schema.json create mode 100644 skills/agent-team-creator/scripts/project-files.mjs create mode 100644 skills/agent-team-creator/scripts/project-install.mjs create mode 100644 skills/agent-team-creator/scripts/project-instructions.mjs create mode 100644 skills/agent-team-creator/scripts/ui-bindings.mjs create mode 100644 skills/android-compose-adaptive/LICENSE.txt create mode 100644 skills/android-compose-adaptive/PROVENANCE.md create mode 100644 skills/android-compose-adaptive/SKILL.md create mode 100644 skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md create mode 100644 skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md create mode 100644 skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md create mode 100644 skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md create mode 100644 skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md create mode 100644 skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md create mode 100644 skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md create mode 100644 skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md create mode 100644 skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md create mode 100644 skills/android-compose-adaptive/references/android/develop/ui/compose/tooling/debug.md create mode 100644 skills/android-compose-adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md create mode 100644 skills/android-edge-to-edge/LICENSE.txt create mode 100644 skills/android-edge-to-edge/PROVENANCE.md create mode 100644 skills/android-edge-to-edge/SKILL.md create mode 100644 skills/better-accessibility/LICENSE create mode 100644 skills/better-accessibility/PROVENANCE.md create mode 100644 skills/better-accessibility/SKILL.md create mode 100644 skills/better-accessibility/agents/openai.yaml create mode 100644 skills/better-accessibility/focus-and-keyboard.md create mode 100644 skills/better-accessibility/forms.md create mode 100644 skills/better-accessibility/hit-areas.md create mode 100644 skills/better-accessibility/motion-and-zoom.md create mode 100644 skills/better-accessibility/screen-readers.md create mode 100644 skills/better-accessibility/semantics-and-aria.md create mode 100644 skills/better-colors/LICENSE create mode 100644 skills/better-colors/PROVENANCE.md create mode 100644 skills/better-colors/SKILL.md create mode 100644 skills/better-colors/agents/openai.yaml create mode 100644 skills/better-colors/color-formats.md create mode 100644 skills/better-colors/color-usage.md create mode 100644 skills/better-colors/contrast.md create mode 100644 skills/better-colors/palette-generation.md create mode 100644 skills/better-colors/palette-structure.md create mode 100644 skills/better-colors/token-naming.md create mode 100644 skills/better-interface/LICENSE create mode 100644 skills/better-interface/PROVENANCE.md create mode 100644 skills/better-interface/SKILL.md create mode 100644 skills/better-interface/agents/openai.yaml create mode 100644 skills/better-interface/review-format.md create mode 100644 skills/better-layout/LICENSE create mode 100644 skills/better-layout/PROVENANCE.md create mode 100644 skills/better-layout/SKILL.md create mode 100644 skills/better-layout/agents/openai.yaml create mode 100644 skills/better-layout/grouping-and-alignment.md create mode 100644 skills/better-layout/spacing-and-adaptivity.md create mode 100644 skills/better-typography/LICENSE create mode 100644 skills/better-typography/PROVENANCE.md create mode 100644 skills/better-typography/SKILL.md create mode 100644 skills/better-typography/agents/openai.yaml create mode 100644 skills/better-typography/choosing-fonts.md create mode 100644 skills/better-typography/css-cheat-sheet.md create mode 100644 skills/better-typography/details-and-accessibility.md create mode 100644 skills/better-typography/spacing-and-sizing.md create mode 100644 skills/better-typography/variable-fonts-and-opentype.md create mode 100644 skills/better-typography/wrapping-and-punctuation.md create mode 100644 skills/better-ui/LICENSE create mode 100644 skills/better-ui/PROVENANCE.md create mode 100644 skills/better-ui/SKILL.md create mode 100644 skills/better-ui/agents/openai.yaml create mode 100644 skills/better-ui/animations.md create mode 100644 skills/better-ui/enter-exit.md create mode 100644 skills/better-ui/icon-transitions.md create mode 100644 skills/better-ui/icons.md create mode 100644 skills/better-ui/performance.md create mode 100644 skills/better-ui/surfaces.md create mode 100644 skills/better-writing/LICENSE create mode 100644 skills/better-writing/PROVENANCE.md create mode 100644 skills/better-writing/SKILL.md create mode 100644 skills/better-writing/agents/openai.yaml create mode 100644 skills/break/LICENSE create mode 100644 skills/break/PROVENANCE.md create mode 100644 skills/break/SKILL.md create mode 100644 skills/break/agents/openai.yaml create mode 100644 skills/break/scenarios.md create mode 100644 skills/design-taste-frontend-v1/LICENSE create mode 100644 skills/design-taste-frontend-v1/PROVENANCE.md create mode 100644 skills/design-taste-frontend-v1/SKILL.md create mode 100644 skills/design-taste-frontend/LICENSE create mode 100644 skills/design-taste-frontend/PROVENANCE.md create mode 100644 skills/design-taste-frontend/SKILL.md create mode 100644 skills/explain-interface/LICENSE create mode 100644 skills/explain-interface/PROVENANCE.md create mode 100644 skills/explain-interface/SKILL.md create mode 100644 skills/explain-interface/agents/openai.yaml create mode 100644 skills/explain-interface/find-the-effect.md create mode 100644 skills/explain-interface/from-an-image.md create mode 100644 skills/explain-interface/no-browser.md create mode 100644 skills/explain-interface/read-the-system.md create mode 100644 skills/expo-animation/LICENSE create mode 100644 skills/expo-animation/LICENSE.repository create mode 100644 skills/expo-animation/PROVENANCE.md create mode 100644 skills/expo-animation/RECIPES.md create mode 100644 skills/expo-animation/SKILL.md create mode 100644 skills/expo-animation/agents/openai.yaml create mode 100644 skills/expo-design-system/LICENSE create mode 100644 skills/expo-design-system/PROVENANCE.md create mode 100644 skills/expo-design-system/SKILL.md create mode 100644 skills/expo-design-system/agents/openai.yaml create mode 100644 skills/expo-design-system/references/audit.md create mode 100644 skills/expo-design-system/references/native-slop.md create mode 100644 skills/expo-native-ui/LICENSE create mode 100644 skills/expo-native-ui/PROVENANCE.md create mode 100644 skills/expo-native-ui/SKILL.md create mode 100644 skills/expo-native-ui/agents/openai.yaml create mode 100644 skills/expo-native-ui/references/controls.md create mode 100644 skills/expo-native-ui/references/gradients.md create mode 100644 skills/expo-native-ui/references/icons.md create mode 100644 skills/expo-native-ui/references/media.md create mode 100644 skills/expo-native-ui/references/storage.md create mode 100644 skills/expo-native-ui/references/visual-effects.md create mode 100644 skills/expo-native-ui/references/webgpu-three.md create mode 100644 skills/expo-router/LICENSE create mode 100644 skills/expo-router/PROVENANCE.md create mode 100644 skills/expo-router/SKILL.md create mode 100644 skills/expo-router/agents/openai.yaml create mode 100644 skills/expo-router/references/form-sheet.md create mode 100644 skills/expo-router/references/route-structure.md create mode 100644 skills/expo-router/references/search.md create mode 100644 skills/expo-router/references/tabs.md create mode 100644 skills/expo-router/references/toolbar-and-headers.md create mode 100644 skills/expo-router/references/zoom-transitions.md create mode 100644 skills/expo-ui/LICENSE create mode 100644 skills/expo-ui/PROVENANCE.md create mode 100644 skills/expo-ui/SKILL.md create mode 100644 skills/expo-ui/agents/openai.yaml create mode 100644 skills/expo-ui/references/drop-in-replacements.md create mode 100644 skills/expo-ui/references/jetpack-compose.md create mode 100644 skills/expo-ui/references/swift-ui.md create mode 100644 skills/expo-ui/references/universal.md create mode 100644 skills/expo-ui/scripts/list-components.mjs create mode 100644 skills/flutter-build-responsive-layout/LICENSE create mode 100644 skills/flutter-build-responsive-layout/PROVENANCE.md create mode 100644 skills/flutter-build-responsive-layout/SKILL.md create mode 100644 skills/flutter-fix-layout-issues/LICENSE create mode 100644 skills/flutter-fix-layout-issues/PROVENANCE.md create mode 100644 skills/flutter-fix-layout-issues/SKILL.md create mode 100644 skills/flutter-setup-declarative-routing/LICENSE create mode 100644 skills/flutter-setup-declarative-routing/PROVENANCE.md create mode 100644 skills/flutter-setup-declarative-routing/SKILL.md create mode 100644 skills/flutter-setup-localization/LICENSE create mode 100644 skills/flutter-setup-localization/PROVENANCE.md create mode 100644 skills/flutter-setup-localization/SKILL.md create mode 100644 skills/full-output-enforcement/LICENSE create mode 100644 skills/full-output-enforcement/PROVENANCE.md create mode 100644 skills/full-output-enforcement/SKILL.md create mode 100644 skills/gpt-taste/LICENSE create mode 100644 skills/gpt-taste/PROVENANCE.md create mode 100644 skills/gpt-taste/SKILL.md create mode 100644 skills/high-end-visual-design/LICENSE create mode 100644 skills/high-end-visual-design/PROVENANCE.md create mode 100644 skills/high-end-visual-design/SKILL.md create mode 100644 skills/industrial-brutalist-ui/LICENSE create mode 100644 skills/industrial-brutalist-ui/PROVENANCE.md create mode 100644 skills/industrial-brutalist-ui/SKILL.md create mode 100644 skills/interface-review/LICENSE create mode 100644 skills/interface-review/PROVENANCE.md create mode 100644 skills/interface-review/SKILL.md create mode 100644 skills/interface-review/agents/openai.yaml create mode 100644 skills/interface-review/removed-signals.md create mode 100644 skills/interface-review/scope-resolution.md create mode 100644 skills/minimalist-ui/LICENSE create mode 100644 skills/minimalist-ui/PROVENANCE.md create mode 100644 skills/minimalist-ui/SKILL.md create mode 100644 skills/prometheus-impeccable-core/SKILL.md create mode 100644 skills/prometheus-impeccable-core/references/LICENSE.impeccable create mode 100644 skills/prometheus-impeccable-core/references/impeccable-context-and-modes.md create mode 100644 skills/prometheus-impeccable-core/references/impeccable-craft-floor.md create mode 100644 skills/prometheus-ui-review/SKILL.md create mode 100644 skills/prometheus-ui-ux/SKILL.md create mode 100644 skills/prometheus-ui-ux/references/UI_UX_PROTOCOL.md create mode 100644 skills/prometheus-ui-ux/references/catalog.lock.json create mode 100644 skills/prometheus-ui-ux/references/deferred-ports.md create mode 100644 skills/prometheus-ui-ux/references/pointer.md create mode 100644 skills/prometheus-ui-ux/references/runtime-api.md create mode 100644 skills/prometheus-ui-ux/runtime/package.json create mode 100644 skills/prometheus-ui-ux/runtime/src/cli.mts create mode 100644 skills/prometheus-ui-ux/runtime/src/install.mts create mode 100644 skills/prometheus-ui-ux/runtime/src/routing.mts create mode 100644 skills/prometheus-ui-ux/runtime/tsconfig.json create mode 100644 skills/prometheus-ui-ux/scripts/cli.mjs create mode 100644 skills/prometheus-ui-ux/scripts/install.mjs create mode 100644 skills/prometheus-ui-ux/scripts/routing.mjs create mode 100644 skills/redesign-existing-projects/LICENSE create mode 100644 skills/redesign-existing-projects/PROVENANCE.md create mode 100644 skills/redesign-existing-projects/SKILL.md create mode 100644 skills/stitch-design-taste/DESIGN.stitch.md create mode 100644 skills/stitch-design-taste/LICENSE create mode 100644 skills/stitch-design-taste/PROVENANCE.md create mode 100644 skills/stitch-design-taste/SKILL.md create mode 100644 skills/swiftui-pro/LICENSE create mode 100644 skills/swiftui-pro/PROVENANCE.md create mode 100644 skills/swiftui-pro/SKILL.md create mode 100644 skills/swiftui-pro/agents/openai.yaml create mode 100644 skills/swiftui-pro/assets/swiftui-pro-icon.png create mode 100644 skills/swiftui-pro/assets/swiftui-pro-icon.svg create mode 100644 skills/swiftui-pro/references/accessibility.md create mode 100644 skills/swiftui-pro/references/api.md create mode 100644 skills/swiftui-pro/references/data.md create mode 100644 skills/swiftui-pro/references/design.md create mode 100644 skills/swiftui-pro/references/hygiene.md create mode 100644 skills/swiftui-pro/references/navigation.md create mode 100644 skills/swiftui-pro/references/performance.md create mode 100644 skills/swiftui-pro/references/swift.md create mode 100644 skills/swiftui-pro/references/views.md create mode 100644 skills/ui-ux-pro-max/LICENSE create mode 100644 skills/ui-ux-pro-max/PORT.md create mode 100644 skills/ui-ux-pro-max/SKILL.md create mode 100644 skills/ui-ux-pro-max/data/app-interface.csv create mode 100644 skills/ui-ux-pro-max/data/catalog-summary.json create mode 100644 skills/ui-ux-pro-max/data/charts.csv create mode 100644 skills/ui-ux-pro-max/data/colors.csv create mode 100644 skills/ui-ux-pro-max/data/data-provenance.json create mode 100644 skills/ui-ux-pro-max/data/google-font-licenses.json create mode 100644 skills/ui-ux-pro-max/data/google-fonts.csv create mode 100644 skills/ui-ux-pro-max/data/icons.csv create mode 100644 skills/ui-ux-pro-max/data/landing.csv create mode 100644 skills/ui-ux-pro-max/data/motion.csv create mode 100644 skills/ui-ux-pro-max/data/phosphor-icons-upstream.json create mode 100644 skills/ui-ux-pro-max/data/products.csv create mode 100644 skills/ui-ux-pro-max/data/react-performance.csv create mode 100644 skills/ui-ux-pro-max/data/search-config.json create mode 100644 skills/ui-ux-pro-max/data/stacks/angular.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/astro.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/avalonia.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/flutter.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/html-tailwind.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/javafx.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/laravel.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/nextjs.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/nuxtjs.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/react-native.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/react.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/shadcn.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/svelte.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/swiftui.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/threejs.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/uno.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/uwp.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/vue.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/winui.csv create mode 100644 skills/ui-ux-pro-max/data/stacks/wpf.csv create mode 100644 skills/ui-ux-pro-max/data/styles.csv create mode 100644 skills/ui-ux-pro-max/data/typography.csv create mode 100644 skills/ui-ux-pro-max/data/ui-reasoning.csv create mode 100644 skills/ui-ux-pro-max/data/ux-guidelines.csv create mode 100644 skills/ui-ux-pro-max/provenance.json create mode 100644 skills/ui-ux-pro-max/reference-cases.json create mode 100644 skills/ui-ux-pro-max/references/pro-rules.md create mode 100644 skills/ui-ux-pro-max/references/quick-reference.md create mode 100644 skills/ui-ux-pro-max/runtime/.gitignore create mode 100644 skills/ui-ux-pro-max/runtime/package-lock.json create mode 100644 skills/ui-ux-pro-max/runtime/package.json create mode 100644 skills/ui-ux-pro-max/runtime/src/core.mts create mode 100644 skills/ui-ux-pro-max/runtime/src/data.mts create mode 100644 skills/ui-ux-pro-max/runtime/src/design-system.mts create mode 100644 skills/ui-ux-pro-max/runtime/src/format.mts create mode 100644 skills/ui-ux-pro-max/runtime/src/persistence.mts create mode 100644 skills/ui-ux-pro-max/runtime/src/ranking.mts create mode 100644 skills/ui-ux-pro-max/runtime/src/reasoning.mts create mode 100644 skills/ui-ux-pro-max/runtime/src/search.mts create mode 100644 skills/ui-ux-pro-max/runtime/tsconfig.json create mode 100644 skills/ui-ux-pro-max/scripts/core.mjs create mode 100644 skills/ui-ux-pro-max/scripts/data.mjs create mode 100644 skills/ui-ux-pro-max/scripts/design-system.mjs create mode 100644 skills/ui-ux-pro-max/scripts/format.mjs create mode 100644 skills/ui-ux-pro-max/scripts/persistence.mjs create mode 100644 skills/ui-ux-pro-max/scripts/ranking.mjs create mode 100644 skills/ui-ux-pro-max/scripts/reasoning.mjs create mode 100644 skills/ui-ux-pro-max/scripts/search.mjs create mode 100644 skills/variant/LICENSE create mode 100644 skills/variant/PROVENANCE.md create mode 100644 skills/variant/SKILL.md create mode 100644 skills/variant/agents/openai.yaml create mode 100644 skills/variant/picker.md create mode 100644 skills/vercel-composition-patterns/AGENTS.md create mode 100644 skills/vercel-composition-patterns/PROVENANCE.md create mode 100644 skills/vercel-composition-patterns/README.md create mode 100644 skills/vercel-composition-patterns/SKILL.md create mode 100644 skills/vercel-composition-patterns/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 skills/vercel-composition-patterns/metadata.json create mode 100644 skills/vercel-composition-patterns/rules/_sections.md create mode 100644 skills/vercel-composition-patterns/rules/_template.md create mode 100644 skills/vercel-composition-patterns/rules/architecture-avoid-boolean-props.md create mode 100644 skills/vercel-composition-patterns/rules/architecture-compound-components.md create mode 100644 skills/vercel-composition-patterns/rules/patterns-children-over-render-props.md create mode 100644 skills/vercel-composition-patterns/rules/patterns-explicit-variants.md create mode 100644 skills/vercel-composition-patterns/rules/react19-no-forwardref.md create mode 100644 skills/vercel-composition-patterns/rules/state-context-interface.md create mode 100644 skills/vercel-composition-patterns/rules/state-decouple-implementation.md create mode 100644 skills/vercel-composition-patterns/rules/state-lift-state.md create mode 100644 skills/vercel-react-best-practices/AGENTS.md create mode 100644 skills/vercel-react-best-practices/PROVENANCE.md create mode 100644 skills/vercel-react-best-practices/README.md create mode 100644 skills/vercel-react-best-practices/SKILL.md create mode 100644 skills/vercel-react-best-practices/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 skills/vercel-react-best-practices/metadata.json create mode 100644 skills/vercel-react-best-practices/rules/_sections.md create mode 100644 skills/vercel-react-best-practices/rules/_template.md create mode 100644 skills/vercel-react-best-practices/rules/advanced-effect-event-deps.md create mode 100644 skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md create mode 100644 skills/vercel-react-best-practices/rules/advanced-init-once.md create mode 100644 skills/vercel-react-best-practices/rules/advanced-use-latest.md create mode 100644 skills/vercel-react-best-practices/rules/async-api-routes.md create mode 100644 skills/vercel-react-best-practices/rules/async-cheap-condition-before-await.md create mode 100644 skills/vercel-react-best-practices/rules/async-defer-await.md create mode 100644 skills/vercel-react-best-practices/rules/async-dependencies.md create mode 100644 skills/vercel-react-best-practices/rules/async-parallel.md create mode 100644 skills/vercel-react-best-practices/rules/async-suspense-boundaries.md create mode 100644 skills/vercel-react-best-practices/rules/bundle-analyzable-paths.md create mode 100644 skills/vercel-react-best-practices/rules/bundle-barrel-imports.md create mode 100644 skills/vercel-react-best-practices/rules/bundle-conditional.md create mode 100644 skills/vercel-react-best-practices/rules/bundle-defer-third-party.md create mode 100644 skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md create mode 100644 skills/vercel-react-best-practices/rules/bundle-preload.md create mode 100644 skills/vercel-react-best-practices/rules/client-event-listeners.md create mode 100644 skills/vercel-react-best-practices/rules/client-localstorage-schema.md create mode 100644 skills/vercel-react-best-practices/rules/client-passive-event-listeners.md create mode 100644 skills/vercel-react-best-practices/rules/client-swr-dedup.md create mode 100644 skills/vercel-react-best-practices/rules/js-batch-dom-css.md create mode 100644 skills/vercel-react-best-practices/rules/js-cache-function-results.md create mode 100644 skills/vercel-react-best-practices/rules/js-cache-property-access.md create mode 100644 skills/vercel-react-best-practices/rules/js-cache-storage.md create mode 100644 skills/vercel-react-best-practices/rules/js-combine-iterations.md create mode 100644 skills/vercel-react-best-practices/rules/js-early-exit.md create mode 100644 skills/vercel-react-best-practices/rules/js-flatmap-filter.md create mode 100644 skills/vercel-react-best-practices/rules/js-hoist-regexp.md create mode 100644 skills/vercel-react-best-practices/rules/js-index-maps.md create mode 100644 skills/vercel-react-best-practices/rules/js-length-check-first.md create mode 100644 skills/vercel-react-best-practices/rules/js-min-max-loop.md create mode 100644 skills/vercel-react-best-practices/rules/js-request-idle-callback.md create mode 100644 skills/vercel-react-best-practices/rules/js-set-map-lookups.md create mode 100644 skills/vercel-react-best-practices/rules/js-tosorted-immutable.md create mode 100644 skills/vercel-react-best-practices/rules/rendering-activity.md create mode 100644 skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md create mode 100644 skills/vercel-react-best-practices/rules/rendering-conditional-render.md create mode 100644 skills/vercel-react-best-practices/rules/rendering-content-visibility.md create mode 100644 skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md create mode 100644 skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md create mode 100644 skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md create mode 100644 skills/vercel-react-best-practices/rules/rendering-resource-hints.md create mode 100644 skills/vercel-react-best-practices/rules/rendering-script-defer-async.md create mode 100644 skills/vercel-react-best-practices/rules/rendering-svg-precision.md create mode 100644 skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md create mode 100644 skills/vercel-react-best-practices/rules/rerender-defer-reads.md create mode 100644 skills/vercel-react-best-practices/rules/rerender-dependencies.md create mode 100644 skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md create mode 100644 skills/vercel-react-best-practices/rules/rerender-derived-state.md create mode 100644 skills/vercel-react-best-practices/rules/rerender-functional-setstate.md create mode 100644 skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md create mode 100644 skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md create mode 100644 skills/vercel-react-best-practices/rules/rerender-memo.md create mode 100644 skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md create mode 100644 skills/vercel-react-best-practices/rules/rerender-no-inline-components.md create mode 100644 skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md create mode 100644 skills/vercel-react-best-practices/rules/rerender-split-combined-hooks.md create mode 100644 skills/vercel-react-best-practices/rules/rerender-transitions.md create mode 100644 skills/vercel-react-best-practices/rules/rerender-use-deferred-value.md create mode 100644 skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md create mode 100644 skills/vercel-react-best-practices/rules/server-after-nonblocking.md create mode 100644 skills/vercel-react-best-practices/rules/server-auth-actions.md create mode 100644 skills/vercel-react-best-practices/rules/server-cache-lru.md create mode 100644 skills/vercel-react-best-practices/rules/server-cache-react.md create mode 100644 skills/vercel-react-best-practices/rules/server-dedup-props.md create mode 100644 skills/vercel-react-best-practices/rules/server-hoist-static-io.md create mode 100644 skills/vercel-react-best-practices/rules/server-no-shared-module-state.md create mode 100644 skills/vercel-react-best-practices/rules/server-parallel-fetching.md create mode 100644 skills/vercel-react-best-practices/rules/server-parallel-nested-fetching.md create mode 100644 skills/vercel-react-best-practices/rules/server-serialization.md create mode 100644 skills/vercel-react-native-skills/AGENTS.md create mode 100644 skills/vercel-react-native-skills/PROVENANCE.md create mode 100644 skills/vercel-react-native-skills/README.md create mode 100644 skills/vercel-react-native-skills/SKILL.md create mode 100644 skills/vercel-react-native-skills/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 skills/vercel-react-native-skills/metadata.json create mode 100644 skills/vercel-react-native-skills/rules/_sections.md create mode 100644 skills/vercel-react-native-skills/rules/_template.md create mode 100644 skills/vercel-react-native-skills/rules/animation-derived-value.md create mode 100644 skills/vercel-react-native-skills/rules/animation-gesture-detector-press.md create mode 100644 skills/vercel-react-native-skills/rules/animation-gpu-properties.md create mode 100644 skills/vercel-react-native-skills/rules/design-system-compound-components.md create mode 100644 skills/vercel-react-native-skills/rules/fonts-config-plugin.md create mode 100644 skills/vercel-react-native-skills/rules/imports-design-system-folder.md create mode 100644 skills/vercel-react-native-skills/rules/js-hoist-intl.md create mode 100644 skills/vercel-react-native-skills/rules/list-performance-callbacks.md create mode 100644 skills/vercel-react-native-skills/rules/list-performance-function-references.md create mode 100644 skills/vercel-react-native-skills/rules/list-performance-images.md create mode 100644 skills/vercel-react-native-skills/rules/list-performance-inline-objects.md create mode 100644 skills/vercel-react-native-skills/rules/list-performance-item-expensive.md create mode 100644 skills/vercel-react-native-skills/rules/list-performance-item-memo.md create mode 100644 skills/vercel-react-native-skills/rules/list-performance-item-types.md create mode 100644 skills/vercel-react-native-skills/rules/list-performance-virtualize.md create mode 100644 skills/vercel-react-native-skills/rules/monorepo-native-deps-in-app.md create mode 100644 skills/vercel-react-native-skills/rules/monorepo-single-dependency-versions.md create mode 100644 skills/vercel-react-native-skills/rules/navigation-native-navigators.md create mode 100644 skills/vercel-react-native-skills/rules/react-compiler-destructure-functions.md create mode 100644 skills/vercel-react-native-skills/rules/react-compiler-reanimated-shared-values.md create mode 100644 skills/vercel-react-native-skills/rules/react-state-dispatcher.md create mode 100644 skills/vercel-react-native-skills/rules/react-state-fallback.md create mode 100644 skills/vercel-react-native-skills/rules/react-state-minimize.md create mode 100644 skills/vercel-react-native-skills/rules/rendering-no-falsy-and.md create mode 100644 skills/vercel-react-native-skills/rules/rendering-text-in-text-component.md create mode 100644 skills/vercel-react-native-skills/rules/scroll-position-no-state.md create mode 100644 skills/vercel-react-native-skills/rules/state-ground-truth.md create mode 100644 skills/vercel-react-native-skills/rules/ui-expo-image.md create mode 100644 skills/vercel-react-native-skills/rules/ui-image-gallery.md create mode 100644 skills/vercel-react-native-skills/rules/ui-measure-views.md create mode 100644 skills/vercel-react-native-skills/rules/ui-menus.md create mode 100644 skills/vercel-react-native-skills/rules/ui-native-modals.md create mode 100644 skills/vercel-react-native-skills/rules/ui-pressable.md create mode 100644 skills/vercel-react-native-skills/rules/ui-safe-area-scroll.md create mode 100644 skills/vercel-react-native-skills/rules/ui-scrollview-content-inset.md create mode 100644 skills/vercel-react-native-skills/rules/ui-styling.md create mode 100644 skills/web-design-guidelines/PROVENANCE.md create mode 100644 skills/web-design-guidelines/SKILL.md create mode 100644 skills/web-design-guidelines/UPSTREAM-LICENSE-EVIDENCE.md create mode 100644 skills/web-design-guidelines/references/LICENSE.web-interface-guidelines create mode 100644 skills/web-design-guidelines/references/web-interface-guidelines.md diff --git a/.agents/UI_UX_PROTOCOL.md b/.agents/UI_UX_PROTOCOL.md new file mode 100644 index 00000000..fbbf740d --- /dev/null +++ b/.agents/UI_UX_PROTOCOL.md @@ -0,0 +1,36 @@ +# Prometheus UI/UX protocol +Version 1. Project copies at `.agents/UI_UX_PROTOCOL.md` override the bundled default. Load only for tasks changing rendered UI, interaction, tokens, motion or on-screen copy. Backend-only code still uses its selected project team without loading UI guidance. + +## Authority and context +User instructions and project rules govern scope. Read PRODUCT.md, DESIGN.md, .impeccable.md, the nearest application's surface brief, existing components and token sources before proposing direction. Preserve existing design authority. Impeccable supplies workflow context; mini uses the explicitly bounded `prometheus-impeccable-core` adaptation. Recommendations do not overwrite DESIGN.md. Pro Max design output stays in its design-system directory; Stitch output uses DESIGN.stitch.md. + +## Selective routing +1. Resolve the affected application, including nested manifests, and classify new surface, explicit redesign, refinement or review. Default uncertain existing work to refinement; ask when ambiguity blocks correctness. +2. Load `prometheus-impeccable-core` for portable context, or configured full Impeccable when available. Do not invoke a missing native engine or download one. +3. Consult `ui-ux-pro-max` with a focused domain/stack query. A complete design system is appropriate only when establishing visual direction, never for ordinary refinement or review. +4. For new work choose `gpt-taste` only when the actual model family is GPT; otherwise use `design-taste-frontend`. Explicit redesign uses `redesign-existing-projects`. Refinement/review load no taste. At most one implementation plus one overlay explicitly chosen by the user or design authority. Preserve experimental/v1 identities. Never select a model from the harness name. +5. Select one craft skill: layout → better-layout; typeset → better-typography; colorize → better-colors; clarify/copy → better-writing; audit/harden → better-accessibility; animate/delight → better-ui; broad work → better-interface. +6. Add relevant platform guidance from the nearest application manifests. React/Vercel guidance applies only to relevant components; Expo guidance must match its declared SDK. Flutter, SwiftUI and Android preserve framework prerequisites and project versions. Tauri reuses the project's Tauri skills; Electron uses the project's Electron workflow. Other stacks use matching Pro Max data and current official documentation, without invented specialist endorsements. +7. Designers/directors route context and direction; implementers route context, craft and platform; reviewers use prometheus-ui-review without taste. Existing team IDs, ownership and native permissions remain authoritative. + +## Surface modes +Marketing/landing/pricing → Persuade (variance 7–8, motion 5–7, density 3–4). +Operational apps/admin/tools → Operate (3–4, 2–3, 6–8). +Docs/articles/changelogs → Read (2–3, 1–2, 4–5). +Portfolio/showcase → Experience (8–9, 7–8, 2–3). +Record chosen values in the surface brief when direction is established. Incumbent tokens, product identity and explicit user choices override defaults. Honor reduced motion. + +## Craft and accessibility +Preserve semantic structure, visible keyboard focus, contrast, reading order and relevant loading/empty/error/disabled/overflow states. WCAG 2.2 AA target size is 24 by 24 CSS pixels **or the criterion's spacing/other exceptions**; equivalent controls, inline text, user-agent control and essential presentation have defined exceptions. A 44-pixel touch target is a project usability preference, not a universal AA requirement. Native targets use platform units and guidelines (points/dp), not CSS units. Text contrast is generally 4.5:1, large text 3:1; apply actual WCAG exceptions. Do not impose a third-party visual ban list over project design authority. + +## Completed-phase review +Finish the full authorized production phase before verification. Then capture applicable device widths and theme states, real content, keyboard focus and reduced motion through available platform tools. Use one batched correction and confirmation cycle. Request an independent read-only reviewer in a separate context; PASS/BLOCK requires evidence. Unresolved blocking findings stay blocking. If independent delegation or device tooling is unavailable, report it as unverified; builder self-review is not independent review. +Automatic review uses prometheus-ui-review and auto-invocable better-* guidance. Upstream interface-review, break, variant and explain-interface remain user-only: never bypass disable-model-invocation by reading their files. Explicit user invocation may use their documented workflow. +No per-edit hooks, native detector or live-browser engine are implied by the mini adaptation. + +## Team and harness behavior +Read .agent-team/project-routing.json and its real team manifest. For all code tasks select the relevant existing roles, preserve ownership, model policy, permissions and concurrency. Use native delegation only where actually available. Otherwise use role instructions sequentially and disclose the limitation. Zed's parallel-thread UI is not a delegation API; external ACP agents retain native configuration. + +## Handoff evidence +Record operation, surface mode, loaded skills, affected application, context authority, changed files, states/capture paths, reviewer identity and evidence, unresolved findings and platform gaps. No skill is certified universally best; catalog inclusion records provenance and suitability, not comparative proof. + diff --git a/.agents/skills/android-compose-adaptive/LICENSE.txt b/.agents/skills/android-compose-adaptive/LICENSE.txt new file mode 100644 index 00000000..7a4a3ea2 --- /dev/null +++ b/.agents/skills/android-compose-adaptive/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/.agents/skills/android-compose-adaptive/PROVENANCE.md b/.agents/skills/android-compose-adaptive/PROVENANCE.md new file mode 100644 index 00000000..3dc3cb3c --- /dev/null +++ b/.agents/skills/android-compose-adaptive/PROVENANCE.md @@ -0,0 +1,19 @@ +# Provenance: android-compose-adaptive + +Source: https://github.com/android/skills/tree/42dc2270e96032bd860bb94511e440aa00a43125/jetpack-compose/adaptive + +Immutable revision: 42dc2270e96032bd860bb94511e440aa00a43125 + +License: Apache-2.0. Preserve the bundled upstream notice. + +Invocation: automatic. + +## Adaptations + +- Filled missing strict distribution license, version and metadata.tags without replacing upstream values or invocation flags. When upstream supplies no version, 1.0.0-prometheus.1 is a Prometheus packaging version, not an upstream release claim. +- Prepended explicit project authority, scope, version, phase-boundary and invocation contract. +- Aliased upstream adaptive to android-compose-adaptive to avoid ambiguous skill identity. + +Full: bundled. Mini: portable-guidance. + +See the collection catalog.lock.json for source and bundled asset hashes. This records provenance, not execution certification. diff --git a/.agents/skills/android-compose-adaptive/SKILL.md b/.agents/skills/android-compose-adaptive/SKILL.md new file mode 100644 index 00000000..81bb28a0 --- /dev/null +++ b/.agents/skills/android-compose-adaptive/SKILL.md @@ -0,0 +1,316 @@ +--- +name: android-compose-adaptive +description: Instructions to make or update an app's UI so that it adapts to different + Android devices including phones, tablets, foldables, laptops, desktop, TV, Auto + and XR. It includes how to handle different window sizes, pointing devices (such + as mouse) and text entry devices (such as keyboard) using the Compose MediaQuery + API. It also covers multi-pane layouts using Navigation3 Scenes, adaptive UI components + (such as buttons) with varying target sizes, and adaptive layouts (including navigation + areas - nav rails and nav bars) using the Compose Grid and FlexBox APIs. +license: Complete terms in LICENSE.txt +metadata: + tags: ui, ux, android-compose-adaptive + version-origin: Prometheus packaging version; upstream did not declare a version + author: Google LLC + last-updated: '2026-09-22' + keywords: + - android + - ui + - adaptive + - Grid + - FlexBox + - MediaQuery + - navigation +version: 1.0.0-prometheus.1 +--- + +## Prometheus distribution contract + +This pinned upstream guidance is subordinate to the project's approved scope, design authority, framework versions, tool permissions, and phase boundary. Read PRODUCT.md, DESIGN.md, existing tokens and the affected application manifest before choosing advice. Apply relevant rules only; do not migrate frameworks or replace incumbent design by default. + +Complete the implementation phase before a single consolidated verification pass; allow one batched correction and confirmation. Upstream per-edit tests, detector hooks and repetitive audit loops do not apply. Native platform execution requires its actual SDK/toolchain; portable guidance does not imply Windows can build or profile Apple applications. Never install a dependency, fetch a runtime, submit feedback, or message a third party merely because upstream suggests it. + +Use the installed prometheus-ui-ux protocol for automatic selection. Taste guidance is limited to new surfaces or authorized redesign, one implementation plus at most one explicit overlay. No taste guidance applies to refinement or review. Existing DESIGN.md remains authoritative; generated recommendations and DESIGN.stitch.md cannot overwrite it without explicit authorization. User-only skills remain user-only in every harness; reading their source is not an invocation workaround. + +Check the declared Compose and navigation dependencies before applying adaptive or edge-to-edge examples; do not silently adopt Navigation 3. + + + +## Prerequisites + +The app must: + +- Use Compose for all screens. If it's still using Fragments or Views, suggest using the XML to Compose skill to migrate those screens. +- Use Jetpack Navigation 3. If it doesn't, suggest the Navigation 3 skill to migrate the app. + +## Workflow to make an app adaptive + +To make an app adaptive, follow these steps or a subset of them adapting to the +task. + +- Step 1: Verify current UI +- Step 2: Make the navigation bar adaptive +- Step 3: Add multi-pane layouts +- Step 4: Make vertical lists adaptive by changing the number of columns +- Step 5: Hide app bars when scrolling + +## Step 1. Verify current UI + +Ensure that screenshot tests exist to verify the current UI on different form +factors. If they don't exist, add the [Compose Preview Screenshot Testing +tool](references/android/develop/ui/compose/tooling/debug.md). Use the following annotation to create previews for all the major form +factors. For example: + + +```kotlin +@Preview(name = "Phone", device = Devices.PHONE, showBackground = true) +@Preview(name = "Foldable", device = Devices.FOLDABLE, showBackground = true) +@Preview(name = "Tablet", device = Devices.TABLET, showBackground = true) +@Preview(name = "Desktop", device = Devices.DESKTOP, showBackground = true) +annotation class FormFactorPreviews + +@PreviewTest +@FormFactorPreviews +@Composable +fun FeedScreenPreview() { + SnippetsTheme { + Box { + Text("My Screen") + } + } +} +``` + +
+ +## Step 2. Make the navigation bar adaptive + +Bottom navigation bars are optimized for touch input when the user is holding a +phone in portrait mode. On larger screen hand-held devices, like tablets and +unfolded foldables, the navigation area must be accessible from the edge of the +screen (navigation rail). + +If you need to provide more screen space for the content, hide the +navigation area. Examples of this include: + +- Hiding the navigation bar when the user scrolls down and showing it again when the user scrolls up. The assumption is that when the user is scrolling down, they are consuming content but when scrolling up they are trying to navigate away from that content. +- Hiding the navigation area when its content is distracting. For example, in camera previews or when displaying a full-screen photo. + +When the detail screen is displayed full-screen on mobile, full-screen mode must +be deactivated on larger screens. + +Steps to migrate: + +- Locate the existing navigation bar. +- Convert each item to a `NavigationSuiteItem`. +- Identify whether the navigation bar's visibility changes. For example, if it is wrapped with an `AnimatedContent` or `AnimatedVisibility` composable. If so, follow the guidance in the "Control navigation area visibility". +- Replace the container that held the navigation bar (often a `Scaffold`) with `NavigationSuiteScaffold` from the Material 3 adaptive layouts library. +- Supply the navigation items using the `navigationItems` parameter of `NavigationSuiteScaffold`. + +### Step 2.1. Control navigation area visibility + +If the navigation bar's visibility changes - it is hidden under certain +scenarios or on certain screens - this behavior must be maintained with the +adaptive navigation area. This is done using `NavigationSuiteScaffold`'s `state` +parameter. + +Steps to migrate: + +- Identify the scenarios under which the navigation bar is hidden. This is usually done with a boolean variable for the visibility. Use `isNavBarVisible` or `shouldShowNavBar` as the variable name. +- Create an instance of `NavigationSuiteScaffoldState` using `rememberNavigationSuiteScaffoldState()` and pass it to `NavigationSuiteScaffold`. +- When the navigation area visibility changes, use a `LaunchedEffect` to call `show` or `hide` on the `NavigationSuiteScaffoldState`. + +For example: + + +```kotlin +// Pass this variable to any composable that needs to control the navigation area visibility +var isNavBarVisible by remember { mutableStateOf(true) } +val scaffoldVisibilityState = rememberNavigationSuiteScaffoldState() + +NavigationSuiteScaffold( + navigationSuiteItems = navItems, + state = scaffoldVisibilityState +) { + // Main content +} + +LaunchedEffect(isNavBarVisible){ + if (isNavBarVisible) { + scaffoldVisibilityState.show() + } else { + scaffoldVisibilityState.hide() + } +} +``` + +
+ +## Step 3. Add multi-pane layouts using Navigation 3 Scenes + +Analyze the codebase looking for related screens - tapping on something in one +screen opens another screen that shows information related to the first. There +are two canonical screen relationships: list-detail and supporting pane. + +IMPORTANT: You must use the Navigation 3 `SceneStrategy` approach to implement +multi-pane layouts. Do not use `ListDetailPaneScaffold` or +`SupportingPaneScaffold`. + +### Step 3.1. List-detail + +#### Identify the list and detail screens + +List-detail layouts display a list of items (this is the list screen) and +clicking on an item opens a new screen that shows more details about that item +(the detail screen). + +Typical usage includes productivity apps like email, notes, and messaging. + +Unless requested explicitly, avoid this pattern when the detail content requires +substantial screen space (e.g., images or media that benefits from a full-screen +presentation). + +#### Add a Material list-detail SceneStrategy + +- Add the `androidx.compose.material3.adaptive:adaptive-navigation3` library +- Create an `androidx.compose.material3.adaptive.navigation3.ListDetailSceneStrategy` using `rememberListDetailSceneStrategy` +- Pass the `ListDetailSceneStrategy` to `NavDisplay` using its `sceneStrategies` parameter + +#### Use metadata to identify the list and detail screens + +- Add metadata using `entry(metadata = ...)` or `NavEntry(metadata = ...)` to the list entry using `ListDetailSceneStrategy.listPane(detailPlaceholder = { + })`. +- Use the `detailPlaceholder` parameter to add a placeholder on the detail screen when no list items are selected. +- Add metadata to the detail entry using `ListDetailSceneStrategy.detailPane()`. + +#### Important considerations + +- When a detail screen displays its content full-screen on mobile (content fills the entire screen, bars or rails are hidden), full-screen mode must be deactivated if it's part of a list-detail layout. +- Detail screens must not show a back arrow when on a list-detail layout. + +For a reference implementation, check the [Nav3 **Material** List Detail +recipe](references/android/guide/navigation/navigation-3/recipes/material-listdetail.md). + +### Step 3.2. Supporting pane + +Identify supporting pane screens where a main screen displays a single item, and +selecting it opens a "supporting screen" with more details. The supporting +screen complements the main screen and is shown in a supporting pane. + +#### Add a Material supporting pane `SceneStrategy` + +- If you haven't already, add the `androidx.compose.material3.adaptive:adaptive-navigation3` library +- Create an `androidx.compose.material3.adaptive.navigation3.SupportingPaneSceneStrategy` using `rememberSupportingPaneSceneStrategy` +- Pass the `SupportingPaneSceneStrategy` to `NavDisplay` using its `sceneStrategies` parameter + +#### Use metadata to identify the main and supporting screens + +- Add metadata using `entry(metadata = ...)` or `NavEntry(metadata = ...)` to the main entry using `SupportingPaneSceneStrategy.mainPane()` +- Add metadata to the supporting entry using `SupportingPaneSceneStrategy.supportingPane()` + +### Step 3.3. Run screenshot tests + +If you have made changes, record new reference files. Ask the user to visually +verify that the new layouts are correct. + +## Step 4. Make vertical lists adaptive by changing the number of columns + +### Step 4.1. Make lazy lists adaptive + +Look for the following vertical list composables: `LazyColumn`, +`LazyVerticalGrid`, `LazyVerticalStaggeredGrid`. + +Steps to migrate: + +- Choose a suitable minimum width in dp for the column. The item must be clearly visible to the user at this width. +- For `LazyColumn`: change to a `LazyVerticalGrid` and follow the instruction later +- For `LazyVerticalGrid`: change the `columns` parameter to use `GridCells.Adaptive(.dp)` +- For `LazyVerticalStaggeredGrid`: change the `columns` parameter to use `StaggeredGridCells.Adaptive(.dp)` + +### Step 4.2. Migrate non-lazy lists to Grid + +WARNING: Grid is an experimental API available from Compose 1.11.0-beta01. +Confirm with the user that they are happy to use an experimental API in their +codebase. + +Look for any `Column` that contains multiple items of the same type and replace +it with `Grid`. Do not replace it with `LazyVerticalGrid` or any other lazy +layout. Do not place `Grid` inside the existing `Column`. Completely replace it. + +`Grid` is configured by supplying a lambda (an extension function on +`GridConfigurationScope`) to its `config` parameter. Inside the lambda, +`constraints` provides the minimum and maximum dimensions of the grid container +and can be used to change the number of rows and columns based on the available +size. For example, the following code configures `Grid` such that when the +available width is: + +- less than 800dp, a 2x4 grid is used +- 800dp or more, a 4x2 grid is used + + +```kotlin +Grid( + config = { + val maxWidthDp = constraints.maxWidth.toDp() + val (cols, rows) = if (maxWidthDp < 800.dp){ + 2 to 4 + } else{ + 4 to 2 + } + + val gapSizeDp = 8.dp + val cellSize = ((maxWidthDp - (gapSizeDp * (cols - 1))) / cols).coerceAtLeast(0.dp) + repeat(cols) { column(cellSize) } + repeat(rows) { row(cellSize) } + gap(gapSizeDp) + } +) { /** items **/ } +``` + +
+ +`Grid` is an experimental API so add the `@OptIn(ExperimentalGridApi::class)` +annotation to any function that uses it. + +## Step 5: Hide App Bars when scrolling + +In an app with multiple top-level destinations, each screen must manage its own +app bar state independently. There are two main scroll behaviors: + +- `exitUntilCollapsedScrollBehavior`: Hides on scroll down, stays hidden while you scroll up until you reach the very top (0 offset). +- `enterAlwaysScrollBehavior`: Hides on scroll down, shows immediately on scroll up. + +## Final step: Build and test + +Build the app and run the local tests. If the project has screenshot tests, run +them but DO NOT update the reference images. Prompt the user to do this after +they have viewed the screenshot diffs. + +## Additional documentation for experimental adaptive APIs + +The following APIs are available from Compose 1.11.0-beta01. + +### FlexBox + +Check the FlexBox documentation: + +- [Overview](references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md) +- [Get started - setup](references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md) +- [Set container behavior](references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md) +- [Set item behavior](references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md) + +## MediaQuery + +Check the [MediaQuery documentation](references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md) when you need to query the device's +screen size, pointer precision, keyboard type, whether it has cameras or +microphones, and other device capabilities. + +## Grid + +Check the Grid documentation when you need to display a fixed number of items in +a grid layout: + +- [Overview](references/android/develop/ui/compose/layouts/adaptive/grid/index.md) +- [Get started - setup](references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md) +- [Set container properties](references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md) +- [Set item properties](references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md) diff --git a/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md new file mode 100644 index 00000000..41112fce --- /dev/null +++ b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/container-behavior.md @@ -0,0 +1,112 @@ +To configure the behavior of the `FlexBox` container, create a `FlexBoxConfig` +block and supply it using the `config` parameter. + + +```kotlin +FlexBox( + config = { + direction(FlexDirection.Column) + wrap(FlexWrap.Wrap) + alignItems(FlexAlignItems.Center) + alignContent(FlexAlignContent.SpaceAround) + justifyContent(FlexJustifyContent.Center) + gap(16.dp) + } +) { // child items +} +``` + +
+ +Use `FlexBoxConfig` to define the layout direction, wrapping behavior, +alignment, and gaps between items. + +## Layout direction + +The `direction` function sets the main axis, which dictates the direction +items are laid out in. It accepts the following values: + +- `Row` (default): Sets the main axis to be horizontal. In left-to-right locales this will be left-to-right, with the opposite in right-to-left. +- `RowReverse`: Reverses the direction of `Row`. +- `Column`: Sets the main axis to be vertical, top-to-bottom. +- `ColumnReverse`: Reverses the direction of `Column`. + +## Align items and distribute extra space + +The following sections describe how to align items and distribute extra space +along the main and cross axes. + +### Along the main axis + +Use `justifyContent` to distribute items along the main axis. The following +table shows the behavior when the direction is `Row`. + +|---|---| +| | ![Illustration of a horizontal main axis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/main-axis.png) | +| `Start` | ![Items aligned to the start of the main axis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/mainaxis-start.png) | +| `Center` | ![Items aligned to the center of the main axis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/mainaxis-center.png) | +| `End` | ![Items aligned to the end of the main axis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/mainaxis-end.png) | +| `SpaceBetween` | ![Items distributed along the main axis with space between them.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/mainaxis-spacebetween.png) | +| `SpaceAround` | ![Items distributed along the main axis with space around them.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/mainaxis-spacearound.png) | +| `SpaceEvenly` | ![Items distributed along the main axis with space evenly around them.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/mainaxis-spaceevenly.png) | + +### Along the cross axis + +Use `alignItems` to align items along the cross axis within a single line. This +behavior can be overridden by individual items using the +[`alignSelf` modifier](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-behavior#item-alignment). + +The following images show the behavior when the direction is `Row`: + +|---|---|---|---|---|---| +| ![Illustration of a vertical cross axis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/crossaxis.png) | ![Items aligned to the start of the cross axis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/crossaxis-start.png) | ![Items aligned to the end of the cross axis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/crossaxis-end.png) | ![Items aligned to the center of the cross axis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/crossaxis-center.png) | ![Items stretched to fill the cross axis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/crossaxis-stretch.png) | ![Items aligned to their baseline along the cross axis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/crossaxis-baseline.png) | +| | `Start` | `End` | `Center` | `Stretch` | `Baseline` | + +Use `alignContent` to align lines to the cross axis and to distribute extra +space between lines. This property only applies when there are multiple lines +(wrapping is enabled). The following images show the behavior when the direction +is `Row`: + +|---|---|---|---|---|---|---| +| ![Illustration of a vertical cross axis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/crossaxis.png) | ![Multiple lines of items aligned to the start of the cross axis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/aligncontent-start.png) | ![Multiple lines of items aligned to the end of the cross axis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/aligncontent-end.png) | ![Multiple lines of items aligned to the center of the cross axis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/aligncontent-center.png) | ![Multiple lines of items stretched to fill the cross axis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/aligncontent-stretch.png) | ![Multiple lines of items distributed along the cross axis with space between them.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/aligncontent-spacebetween.png) | ![Multiple lines of items distributed along the cross axis with space around them.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/aligncontent-spacearound.png) | +| | `Start` | `End` | `Center` | `Stretch` | `SpaceBetween` | `SpaceAround` | + +## Wrap items + +Wrapping lets a `FlexBox` container become multi-line, moving items that don't +fit onto a new row or column along the cross-axis. Configure wrapping behavior +using `wrap`. + +|---|---| +| **`FlexWrap` value** | **Example using direction `Row`** | +| `NoWrap` (default): Prevents items from wrapping. Items overflow if the main size is insufficient. | ![Items in a single line overflowing the container because wrapping is disabled.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/wrapitems-1.png) | +| `Wrap`: When there is insufficient space for an item (plus any [gap](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#add-gaps)), a new line is created in the direction of the cross axis. For example, if the direction is `Row`, a new line is added **below**. | ![Items wrapping onto a new line below because wrapping is enabled.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/wrapitems-2.png) | +| `WrapReverse`: The same as `Wrap`, except the new line is added in the opposite direction to the cross axis. For example, if the direction is `Row`, a new line is added **above**. | ![Items wrapping onto a new line above because reverse wrapping is enabled.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/wrapitems-3.png) | + +The following example shows how the `FlexBox` wrapping algorithm works. The +`FlexBox` container has a main size of `100dp`, with `wrap` set to +`FlexWrap.Wrap` and a gap of `8dp`. It contains three items with `basis` `20dp`, +`40dp`, and `50dp`, respectively. + +There is `100dp` available space in the line. Child 1 is `20dp`. +There is space, so Child 1 is placed into the line. +![First item placed in the FlexBox container.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/algorithm-1.png) **Figure 1.** First item placed in the `FlexBox` container. + +There is `80dp` available space in the line. The gap is `8dp`. Child 2 is +`40dp`. The required space is `48dp`. There is space, so the gap and Child 2 +are placed into the line. +![Second item placed in the FlexBox container after the first item.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/algorithm-2.png) **Figure 2.** Second item placed in the `FlexBox` container after the first item. + +There is `32dp` available space in the line. The gap is `8dp`. Child 3 is +`50dp`. The required space is `58dp`. There is not enough space in the current +line, so Child 3 is placed in a new line. +![Third item placed on a new line because it doesn't fit on the first line.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/algorithm-3.png) **Figure 3.** Third item placed on a new line because it doesn't fit on the first line. + +## Add gaps between items + +Add gaps between rows and columns using `rowGap` and `columnGap`. This is useful +to avoid adding spacing modifiers to children. + +|---|---|---| +| ![Row gap adds vertical space between items.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/gap-1.png) | ![Column gap adds horizontal space between items.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/gap-2.png) | ![Gap adds both horizontal and vertical space between items.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/gap-3.png) | +| `rowGap` adds vertical space between items and lines. | `columnGap` adds horizontal space between items and lines. | `gap` is a convenience function that adds both `columnGap` and `rowGap`. | \ No newline at end of file diff --git a/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md new file mode 100644 index 00000000..2f545717 --- /dev/null +++ b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/get-started.md @@ -0,0 +1,69 @@ +This page describes how to implement basic `FlexBox` layouts. + +## Set up project + +1. Add the [`androidx.compose.foundation.layout`](https://developer.android.com/jetpack/androidx/versions) library to your project's + `lib.versions.toml`. + + [versions] + compose = "1.13.0-alpha03" + + [libraries] + androidx-compose-foundation-layout = { group = "androidx.compose.foundation", name = "foundation-layout", version.ref = "compose" } + +2. Add the library dependency to your app's `build.gradle.kts`. + + dependencies { + implementation(libs.androidx.compose.foundation.layout) + } + +## Create basic FlexBox layouts + +**Example 1** : `FlexBox` lays out two `Text` elements that are centrally +aligned. + + +```kotlin +FlexBox( + config = { + direction(FlexDirection.Column) + alignItems(FlexAlignItems.Center) + } +) { + Text(text = "Hello", fontSize = 48.sp) + Text(text = "World!", fontSize = 48.sp) +} +``` + +
+ +![Hello World text composables stacked on top of each other in a basic FlexBox implementation.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/basic-flexbox.png) + +**Example 2** : `FlexBox` wraps five items onto two rows and grows them unequally +to fill the available space on each row. There is an `8.dp` +gap, both vertically and horizontally, between the items. + + +```kotlin +FlexBox( + config = { + wrap(FlexWrap.Wrap) + gap(8.dp) + } +) { + // All boxes have an intrinsic width of 100.dp + // Some grow to fill any remaining space on the row. + RedRoundedBox() + BlueRoundedBox() + GreenRoundedBox(modifier = Modifier.flex { grow(1.0f) }) + OrangeRoundedBox(modifier = Modifier.flex { grow(1.0f) }) + PinkRoundedBox(modifier = Modifier.flex { grow(1.0f) }) +} +``` + +
+ +![Two rows of colored items, with three unequally sized items distributed across the top row and two unequally sized items across the bottom row.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/basic-flexbox-2.png) + +To learn more about `FlexBox` behavior, see [Set container behavior](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior) and [Set +item behavior](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-behavior). \ No newline at end of file diff --git a/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md new file mode 100644 index 00000000..ddda0deb --- /dev/null +++ b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/index.md @@ -0,0 +1,81 @@ +> [!NOTE] +> **Note:** FlexBox is an experimental API and is likely to change in the future. To use it, annotate your code with `@ExperimentalFlexBoxApi`. Please file any issues or feedback on the [issue tracker](https://issuetracker.google.com/issues/new?component=1876021&title=%5BFlexBox%5D). + +[`FlexBox`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/FlexBox.composable#FlexBox(androidx.compose.ui.Modifier,androidx.compose.foundation.layout.FlexBoxConfig,kotlin.Function1)) is a container that lays out items in a single direction. It can +resize, wrap, align, and distribute space among items to optimally fill the +available space. It's a useful layout for different sized items and for resizing +items when the available space changes. + +With `FlexBox`, you can: + +- Control how items grow and shrink to fill the available space +- Wrap items onto new rows or columns when there isn't enough space for them +- Distribute extra space between items using convenient presets + +## When to use FlexBox + +`FlexBox` is usually used to display a small number of items *within* an +overall screen layout. For an overall screen layout, +`Grid` is usually a better choice. `FlexBox` does not support lazy-loading of +items. To display large numbers of items, use [lazy lists and grids](https://developer.android.com/develop/ui/compose/lists). If you +need to wrap items, use `FlexBox` instead of `FlowRow` and `FlowColumn`. + +## Terminology and concepts + +> [!IMPORTANT] +> **Key Point:** `FlexBox` is heavily influenced by the [CSS Flexible Box Layout specification](https://www.w3.org/TR/css-flexbox-1/) and has almost identical concepts, terminology, and behavior. If you're familiar with `display: flex`, you'll find `FlexBox`'s properties and behavior almost identical. + +`FlexBox` lays out its items in either horizontal or vertical *lines* . This +direction of these lines establishes the *main axis* . 90 degrees to the main +axis is the *cross axis* . The length of the `FlexBox` along the main axis is +known as the *main size* . The corresponding cross axis length is known as the +*cross size* . These sizes and axes form the basis of `FlexBox`'s behavior. + + +![FlexBox with horizontal main axis and vertical cross axis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/intro-row-2.png) **Figure 1.** Axes and sizes when the `FlexBox` direction is `Row`. ![FlexBox with vertical main axis and horizontal cross axis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/intro-column.png) **Figure 2.** Axes and sizes when the `FlexBox` direction is `Column`. + +
+ +### Apply properties + +You can apply `FlexBox` properties in two ways: + +- To the `FlexBox` container using `FlexBox(config)` +- To an item inside the `FlexBox` using `Modifier.flex` + +| **Container properties (`config`**) | **Item properties (`Modifier.flex`**) | +|---|---| +| - `direction` - the item layout direction - `wrap` - whether to wrap items if the **main size** is insufficient - `justifyContent` - how to **distribute** items along the **main axis** - `alignItems` - how to **align** items along the **cross axis** - `alignContent` - how to distribute extra space from the **cross size** when there are multiple lines - `rowGap` / `columnGap` - adds space between items and lines See [Set container behavior](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior) for more information about these properties. | - `basis` - the size of the item before any extra space from the **main size** is distributed - `grow` - the share of extra space from the **main size** that this item should receive - `shrink` - the share of space deficit from the **main size** that this item should receive - `alignSelf` - how to distribute extra space from the **cross size** to this item, overrides `alignItems` - `order` - controls the layout order See [Set item behavior](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-behavior) for more information about these properties. | + +### Understand the `FlexBox` layout algorithm + +One of `FlexBox`'s most powerful features is its ability to resize its children +to best fit the space available to it. Understanding how `FlexBox` does this can +help you set `FlexBox` properties to optimize your UI for all possible sizes. + +`FlexBox`'s layout algorithm works in the following way: + +1. **Calculate child base size** : Use the child's [`basis` value](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-behavior#set-initial-size) + to calculate its initial size along the main axis before any extra space is + distributed. + +2. **Sort the children** : Sort the children by their [`order`](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-behavior#item-order) values, if + present. + +3. **Build lines** : For each child, check if its initial size plus + [`gap`](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#add-gaps) will fit into the remaining space on the current line. + If so, place this child into the line. If not, place it onto a new line if + [wrapping is enabled](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#wrap-items), or place the item into the current line + where it will overflow (it will be partially obscured by the edge of the + container). + +4. **Align or resize items in the main axis** : For each line, distribute extra + space *to* or between items by [resizing](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/item-behavior#item-size) or + [aligning](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#main-axis) them. + +5. **Align or resize items in the cross axis** : For each line, distribute extra + space to or between items and lines by [stretching or aligning + them](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#cross-axis). + +Now that you're familiar with `FlexBox` concepts, see [Get started](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/get-started) to +create a basic `FlexBox`. \ No newline at end of file diff --git a/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md new file mode 100644 index 00000000..e4a5c0f5 --- /dev/null +++ b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/flexbox/item-behavior.md @@ -0,0 +1,170 @@ +Use `Modifier.flex` to control how an item changes size, order, and is aligned +inside a `FlexBox`. + +## Item size + +Use the `basis`, `grow`, and `shrink` functions to control an item's size. + + +```kotlin +FlexBox { + RedRoundedBox( + modifier = Modifier.flex { + basis(FlexBasis.Auto) + grow(1.0f) + shrink(0.5f) + } + ) +} +``` + +
+ +### Set initial size + +Use `basis` to specify the item's initial size before any extra space is +distributed. You can think of this as the item's *preferred* size. + +|---|---|---|---| +| **Value type** | **Behavior** | **Code snippet** Note: The boxes have a maximum intrinsic size of `100dp` | **Example using container width `600dp`** | +| `Auto` (default) | Use the item's maximum intrinsic size. For example, a `Text` composable's maximum intrinsic width is the width of all its text on a single line - no wrapping. | ```kotlin FlexBox { RedRoundedBox( Modifier.flex { basis(FlexBasis.Auto) } ) BlueRoundedBox( Modifier.flex { basis(FlexBasis.Auto) } ) } ``` | ![Items sized based on their intrinsic size using basis Auto.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/initialsize-1.png) | +| Fixed `dp` | A fixed size in Dp. | ```kotlin FlexBox { RedRoundedBox( Modifier.flex { basis(200.dp) } ) BlueRoundedBox( Modifier.flex { basis(100.dp) } ) } ``` | ![Items sized to a fixed dp value using basis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/initialsize-2.png) | +| Percentage | A percentage of the container size. | ```kotlin FlexBox { RedRoundedBox( Modifier.flex { basis(0.7f) } ) BlueRoundedBox( Modifier.flex { basis(0.3f) } ) } ``` | ![Items sized as a percentage of container size using basis.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/initialsize-3.png) | + +If the basis value is less than the item's intrinsic minimum size, the intrinsic +minimum size is used instead. For example, if a `Text` item that contains a word +requires `50dp` to display, but also has `basis = 10.dp`, a +value of `50dp` is used. + +### Grow items when there's space + +Use `grow` to specify how much an item grows when there is extra space. This is +space remaining in the `FlexBox` container after all the items' `basis` values +have been added up. The `grow` value indicates *how much* of the extra space a +given child will receive, relative to its siblings. By default, items won't +grow. + +The following example shows a `FlexBox` with three child items. Each has a basis +value of `100dp`. The first child has a positive `grow` value. Since there is +only one child with a `grow` value, the actual value is irrelevant - as long as +it's positive, the child receives all the extra space. + +The images show the `FlexBox` behavior when its container size is `600dp`. + +|---|---| +| ```kotlin FlexBox { RedRoundedBox( title = "400dp", modifier = Modifier.flex { grow(1f) } ) BlueRoundedBox(title = "100dp") GreenRoundedBox(title = "100dp") } ``` | Each child has a basis value of `100dp`. There is `300dp` of extra space. ![Three items with 100dp basis each, in a 600dp container, before growth.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/growitems-1.png) Child 1 grows by `300dp` to fill the extra space. ![First item grows to fill 300dp of extra space.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/growitems-2.png) | + +In the following example, the container size and `basis` size are the same. The +difference is that each child has a different `grow` value. + +|---|---| +| ```kotlin FlexBox { RedRoundedBox( title = "150dp", modifier = Modifier.flex { grow(1f) } ) BlueRoundedBox( title = "200dp", modifier = Modifier.flex { grow(2f) } ) GreenRoundedBox( title = "250dp", modifier = Modifier.flex { grow(3f) } ) } ``` | Each child has a basis value of `100dp`. There is `300dp` of extra space. ![Three items with 100dp basis each, in a 600dp container, before growth, with different grow values.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/growitems-3.png) The total grow value is 6. Child 1 grows by (1 / 6) \* 300 = `50dp` Child 2 grows by (2 / 6) \* 300 = `100dp` Child 3 grows by (3 / 6) \* 300 = `150dp` ![Items grow to fill 300dp of extra space based on relative grow values.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/growitems-4.png) | + +### Shrink items when there's insufficient space + +Use `shrink` to specify how much an item shrinks when the `FlexBox` container +has insufficient space for all the items. `shrink` works the same way as `grow` +except that, instead of distributing *extra space* to items, the *space deficit* +is distributed to items. The `shrink` value specifies how much of the space +deficit the item receives, or rather, how much the item will shrink by. By +default, items have a `shrink` value of `1f`, meaning they shrink equally. + +The following example shows two `Text` composables with the same text. The first +child has a shrink value of `1f`, meaning it shrinks to absorb all the space +deficit. + + +```kotlin +FlexBox { + Text( + "The quick brown fox", + fontSize = 36.sp, + modifier = Modifier + .background(PastelRed) + .flex { shrink(1f) } + ) + Text( + "The quick brown fox", + fontSize = 36.sp, + modifier = Modifier + .background(PastelBlue) + .flex { shrink(0f) } + ) +} +``` + +
+ +As the container size shrinks, Child 1 shrinks. + +|---|---| +| **Container size** | **FlexBox UI** | +| `700dp` | ![Two items in a 700dp container.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/containersize-1.png) | +| `500dp` | ![First item shrinks as container size reduces to 500dp.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/containersize-2.png) | +| `450dp` | ![First item shrinks further as container size reduces to 450dp.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/containersize-3.png) | + +## Item alignment + +Use `alignSelf` to control how an item is aligned to the cross axis. This +overrides the [`alignItems` property](https://developer.android.com/develop/ui/compose/layouts/adaptive/flexbox/container-behavior#align-distribute) of the container for this item. It +has all the same possible values, with the addition of `Auto` which inherits the +behavior of the `FlexBox` container. + +For example, this `FlexBox` has `alignItems` set to `Start` and five children +which override the cross axis alignment. + + +```kotlin +FlexBox( + config = { + alignItems(FlexAlignItems.Start) + } +) { + RedRoundedBox() + BlueRoundedBox(modifier = Modifier.flex { alignSelf(FlexAlignSelf.Center) }) + GreenRoundedBox(modifier = Modifier.flex { alignSelf(FlexAlignSelf.End) }) + PinkRoundedBox(modifier = Modifier.flex { alignSelf(FlexAlignSelf.Stretch) }) + OrangeRoundedBox(modifier = Modifier.flex { alignSelf(FlexAlignSelf.Baseline) }) +} +``` + +
+ +![Five children of varying sizes overriding the alignItems property.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/item-alignment.png) + +## Item order + +By default, `FlexBox` lays out items in the order that they are declared in +code. Override this behavior using `order`. + +The default value for `order` is zero, and `FlexBox` sorts items based on this +value in ascending order. Any items that have the same `order` value are +laid out in the same order they are declared in. Use negative and positive +`order` values to move items to the start or end of a layout without changing +where they are declared. + +The following example shows two child items. The first has the default `order` +of zero, and the second has an order of `-1`. After sorting, Child 1 appears +after Child 2. + + +```kotlin +FlexBox { + // Declared first, but will be placed after visually + RedRoundedBox( + title = "World" + ) + + // Declared second, but will be placed first visually + BlueRoundedBox( + title = "Hello", + modifier = Modifier.flex { + order(-1) + } + ) +} +``` + +
+ +![Two rounded boxes, with the first containing the text Hello and the second containing the text World.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/flexbox/itemorder.png) \ No newline at end of file diff --git a/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md new file mode 100644 index 00000000..fc4e3a53 --- /dev/null +++ b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/container-properties.md @@ -0,0 +1,415 @@ +You can define a Grid container configuration to create flexible layouts +that respond to different screen sizes and content types. +This page describes how to do the following: + +- [Define a grid](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties#grid-definition): Set up the basic structure of rows and columns. +- [Place items in a grid](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties#item-placement): Understand how items are placed into grid cells and how to change flow direction. +- [Manage track sizing](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties#grid-track-size): Use fixed, percentage, flexible, and intrinsic sizing to set track sizes. +- [Set gaps](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties#grid-gap): Manage the "gutters" between rows and columns. + +## Define a grid + +A grid consists of columns and rows. +The [`Grid`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Grid.composable#Grid(kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1)) composable has a `config` parameter +that accepts a lambda to define the columns and rows +within [`GridConfigurationScope`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope). +The following example defines a grid that has three rows and two columns, +each with a fixed size specified in [`Dp`](https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp): + + +```kotlin +Grid( + config = { + repeat(2) { + column(160.dp) + } + repeat(3) { + row(90.dp) + } + } +) { +} +``` + +
+ +## Place items in a grid + +`Grid` takes the UI elements +in the `content` lambda and places them into grid cells. +The grid lays out items regardless of +whether you have explicitly defined the rows and columns. +By default, +`Grid` tries to place a UI element in the available grid cell in the row; +if it can't, it places it in an available grid cell in the next row. +If there are no empty cells, `Grid` creates a new row. + +In the following example, the grid has six grid cells +and places a card into each one (Figure 1). +Each grid cell is `160dp` x `90dp`, +making the total grid size `320dp` x `270dp`. + + +```kotlin +Grid( + config = { + repeat(2) { + column(160.dp) + } + repeat(3) { + row(90.dp) + } + } +) { + Card1() + Card2() + Card3() + Card4() + Card5() + Card6() +} +``` + +
+ +![Six cards are placed in a grid that has three rows and two columns.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/placement.png) **Figure 1**. Six cards are placed in a grid that has three rows and two columns. + +To change this default behavior to filling by column, +set the [`flow`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope#flow()) property to [`GridFlow.Column`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridFlow#Column()). + + +```kotlin +Grid( + config = { + repeat(2) { + column(160.dp) + } + repeat(3) { + row(90.dp) + } + gap(8.dp) + flow = GridFlow.Column // Grid tries to place items to fill the column + }, +) { + Card1() + Card2() + Card3() + Card4() + Card5() + Card6() +} +``` + +
+ +![The flow function changes the direction to place items.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/grid-flow.png) **Figure 2** . `GridFlow.Row` (left) and `GridFlow.Column` (right). + +## Manage track sizing + +Rows and columns are collectively referred to as a [grid track](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-track). +You can specify the size of a grid track using one of the following methods: + +- **Fixed** (`Dp`): Allocates a specific size (e.g., `column(180.dp)`). +- **Percentage** (`Float`): Allocates a percentage of the total available space from `0.0f` to `1.0f` (e.g., `row(0.5f)` for 50%). +- **Flexible** ([`Fr`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Fr)): Distributes remaining space proportionally after fixed and percentage tracks are calculated. For example, if two rows are set to `1.fr` and `3.fr`, the latter receives 75% of the remaining height. +- **Intrinsic** : Sizes the track based on the content inside it. For more information, see [Determine grid track size intrinsically](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties#intrisic-grid-track-size). + +The following example uses the different track sizing options +to define the row heights: + + +```kotlin +Grid( + config = { + column(1f) + + row(100.dp) + row(0.2f) + row(1.fr) + row(GridTrackSize.Auto) + }, + modifier = Modifier.height(480.dp) +) { + PastelRedCard("Fixed(100.dp)") + PastelGreenCard("Percentage(0.2f)") + PastelBlueCard("Flex(1.fr)") + PastelYellowCard("Auto") + +} +``` + +
+ +![Row heights defined using the four primary track sizing options.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/track-sizes.png) **Figure 3** . Row heights defined using the four primary track sizing options in `Grid`. + +### Set the minimum size for flexible grid tracks + +When a grid container has no remaining space, +a standard flexible track can shrink to `0.dp`. +To prevent this and ensure content isn't crushed, +use [`GridTrackSize.MinMax`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridTrackSize#MinMax(androidx.compose.ui.unit.Dp,androidx.compose.foundation.layout.Fr)) +to enforce an explicit minimum size while keeping the track flexible. + +The following example allocates at least `100.dp` to the first row: + + +```kotlin +Grid( + config = { + column(1f) + // The first row has a minimum height of 100.dp and can expand to + // the half of the remaining space. + row(GridTrackSize.MinMax(100.dp, 1.fr)) + // The second row takes the half of the remaining space. + row(1.fr) + // The third row has a fixed height of 200.dp. + row(200.dp) + }, + modifier = Modifier.size(360.dp) // Total grid height is 360.dp +) { + PastelRedCard("MinMax(100.dp, 1.fr)") + PastelGreenCard("Flex(1.fr)") + PastelBlueCard("Fixed(200.dp)") +} +``` + +
+ +![Row heights defined using the four primary track sizing options.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/track-size-minmax.png) **Figure 4** . The first row has at least `100.dp` height. + +### Set the minimum grid track size to place lazy lists + +Standard flexible tracks automatically query the intrinsic sizes of +their children to establish a base size. +However, Jetpack Compose prohibits querying the intrinsic sizes of +[`SubcomposeLayout`](https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/SubcomposeLayout.composable#SubcomposeLayout(androidx.compose.ui.Modifier,kotlin.Function2)), which backs components, +such as [`LazyColumn`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/LazyColumn.composable) and [`LazyRow`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/LazyRow.composable). + +Placing a lazy list inside a standard flexible track causes +an [`IllegalStateException`](https://developer.android.com/reference/java/lang/IllegalStateException) crash. +To safely place lazy lists inside a flexible grid track, +use `MinMax` with an explicit minimum size (such as `0.dp`) +to bypass the intrinsic measurement pass. + + +```kotlin +Grid( + config = { + column(1f) + // The first row's height is determined by the height of the Text composable. + row(GridTrackSize.Auto) + // The second row occupies the remaining space, allowing the LazyColumn to scroll. + row(GridTrackSize.MinMax(0.dp, 1.fr)) + + gap(8.dp) + }, + modifier = Modifier.size(width = 170.dp, height = 240.dp) +) { + Text("LazyColumn in a Grid") + // The LazyColumn is placed in the second row, filling the remaining space. + LazyColumn(verticalArrangement = Arrangement.spacedBy(4.dp)) { + items(100) { number -> + PastelGreenCard("Card $number") + } + } +} +``` + +
+ +![Row heights defined using the four primary track sizing options.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/lazy-column-in-grid.png) **Figure 5** . `LazyColumn` in a grid cell. + +### Determine grid track size intrinsically + +You can use [intrinsic sizing](https://developer.android.com/develop/ui/compose/layouts/intrinsic-measurements) for a `Grid` +when you want the layout to adapt to the content, +rather than forcing it into a fixed container. +The grid track size is determined with the following values: + +- [`GridTrackSize.MaxContent`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridTrackSize#MaxContent()): Use the content's maximum intrinsic size (e.g., the width is determined by the full length of the text in a text block with no wrapping). +- [`GridTrackSize.MinContent`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridTrackSize#MinContent()): Use the content's minimum intrinsic size (e.g., the width is determined by the longest single word in a text block). +- [`GridTrackSize.Auto`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridTrackSize#Auto()): Use a flexible size for a track that adapts based on available space. It behaves like `MaxContent` by default, but shrinks and wraps its content to fit within the parent container. + +The following example places two texts side by side. +The column size for the first text is determined +by the required minimum width to display the text, +and the second column width depends on the required maximum width of the text. + + +```kotlin +Grid( + config = { + column(GridTrackSize.MinContent) + column(GridTrackSize.MaxContent) + row(1.0f) + }, + modifier = Modifier.width(480.dp) +) { + Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras imperdiet.") + Text("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras imperdiet.") +} +``` + +
+ +![Intrinsic sizes specified in the columns.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/intrinsic-size.png) **Figure 5**. Intrinsic sizes specified in the columns. + +## Set gaps between rows and columns + +Once your grid tracks are sized, +you can modify the [grid gap](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-gap) to refine the spacing between the tracks. +You can specify the column gap with the [`columnGap`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope#columnGap(androidx.compose.ui.unit.Dp)) function, +and the row gap with [`rowGap`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope#rowGap(androidx.compose.ui.unit.Dp)). In the following example, +there is a `16dp` gap between each row, +and an `8dp` gap between each column (Figure 5). + + +```kotlin +Grid( + config = { + repeat(2) { + column(160.dp) + } + repeat(3) { + row(90.dp) + } + rowGap(16.dp) + columnGap(8.dp) + } +) { + Card1() + Card2() + Card3() + Card4() + Card5() + Card6() +} +``` + +
+ +![Gaps between rows and columns.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/gaps.png) **Figure 6**. Gaps between rows and columns. + +You can also use the convenience function [`gap`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope#gap(androidx.compose.ui.unit.Dp)) +to define gaps of the same column and row size, +and to define column and gap sizes separately using a single function. +The following code adds `8dp` gaps to the grid: + + +```kotlin +Grid( + config = { + repeat(2) { + column(160.dp) + } + repeat(3) { + row(90.dp) + } + gap(8.dp) // Equivalent to columnGap(8.dp) and rowGap(8.dp) + } +) { + Card1() + Card2() + Card3() + Card4() + Card5() + Card6() +} +``` + +
+ +## Define grid areas with named areas + +Named areas allow you to attach names to groups of grid cells, +which are called [grid areas](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-area). +You can use these names instead of [coordinate indexes](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/item-properties#position) +when placing UI elements in the grid. + +Using named areas has two main benefits to code readability: + +- When defining the grid layout, the purpose and placement of the expected content is clear. +- When adding the content, the purpose of that content is clear. + +To organize complex layouts clearly, you can decouple your physical grid +structure from child placement by defining semantic grid areas. + +Inside the `config` lambda, use the [`area`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridConfigurationScope#area(kotlin.Any,kotlin.Int,kotlin.Int,kotlin.Int,kotlin.Int)) function in +`GridConfigurationScope` to register named areas in the grid. +You can then assign child composables to these areas +using the [`gridItem`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridScope#(androidx.compose.ui.Modifier).gridItem(kotlin.Any,androidx.compose.ui.Alignment)) modifier +with the corresponding area identifier. The `area` function maps +a semantic identifier (such as an `enum` class value or a string key) to +a set of physical grid coordinates. Grid lines and indexes are **1-based** +(that is, the first row is `1`, and the first column is `1`). + +For example, you define a grid that has four area IDs: + + +```kotlin +/** + * An enum representing the IDs for named areas within the grid. + */ +enum class GridAreaNames { + Area1, + Area2, + Area3, + Area4 +} +``` + +
+ +Provide the name for the area using the `areaId` parameter along with the area's +cell coordinates and spans. +The `gridItem` modifier uses the `areaId` as a key +to assign each child item to its designated grid area, +as shown in the following example: + + +```kotlin +Grid( + config = { + // Define a single column that takes all available width. + repeat(2) { column(0.5f) } + + // Define four rows, each taking 25% of the total height. + repeat(4) { row(0.25f) } + + // Define named grid areas by associating an areaId with specific row and column indices. + // Row and column indices are 1-based. + area(areaId = GridAreaNames.Area1, row = 1, column = 1, columnSpan = 2) + area(areaId = GridAreaNames.Area2, row = 2, column = 1, rowSpan = 3) + area(areaId = GridAreaNames.Area3, rows = 2..3, columns = 2..2) + area(areaId = GridAreaNames.Area4, row = 4, column = 2) + + gap(4.dp) + }, + modifier = Modifier.size(360.dp) +) { + PastelRedCard( + "Area 1", + // Use Modifier.gridItem(areaId) to place this composable into the + // grid area defined with the matching ID in the config block. + modifier = Modifier.gridItem(areaId = GridAreaNames.Area1) + ) + PastelGreenCard( + "Area 2", + modifier = Modifier.gridItem(areaId = GridAreaNames.Area2) + ) + PastelBlueCard( + "Area 3", + modifier = Modifier.gridItem(areaId = GridAreaNames.Area3) + ) + PastelYellowCard( + "Area 4", + modifier = Modifier.gridItem(areaId = GridAreaNames.Area4) + ) +} +``` + +
+ +By using named areas, you can reorganize or adjust the physical layout grid (for +example, changing rows, columns, or track sizes) in the `config` lambda +without needing to modify the order or parameters of the child composables. \ No newline at end of file diff --git a/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md new file mode 100644 index 00000000..dc5bd59e --- /dev/null +++ b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/get-started.md @@ -0,0 +1,51 @@ +This page describes how to implement basic [`Grid`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Grid.composable#Grid(kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1)) layouts. + +## Set up project + +1. Add the [`androidx.compose.foundation.layout`](https://developer.android.com/jetpack/androidx/versions) library to your project's + `lib.versions.toml`. + + [versions] + compose = "1.13.0-alpha03" + + [libraries] + androidx-compose-foundation-layout = { group = "androidx.compose.foundation", name = "foundation-layout", version.ref = "compose" } + +2. Add the library dependency to your app's `build.gradle.kts`. + + dependencies { + implementation(libs.androidx.compose.foundation.layout) + } + +## Create a basic grid + +The following example creates a basic 2x3 grid, +with the columns and rows having a fixed size of `100.dp`. + + +```kotlin +Grid( + config = { + repeat(2) { + column(100.dp) + } + repeat(3) { + row(100.dp) + } + } +) { + Card1(containerColor = PastelRed) + Card2(containerColor = PastelGreen) + Card3(containerColor = PastelBlue) + Card4(containerColor = PastelPink) + Card5(containerColor = PastelOrange) + Card6(containerColor = PastelYellow) +} +``` + +
+ +![A basic grid consists of rows and columns with fixed size.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/six-cards-in-grid.png) **Figure 1**. A basic grid consists of rows and columns with fixed size. + +To learn how to implement more advanced grids, +see [Set container properties](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties) and [Set item properties](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/item-properties). \ No newline at end of file diff --git a/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md new file mode 100644 index 00000000..316b0464 --- /dev/null +++ b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/index.md @@ -0,0 +1,73 @@ +> [!NOTE] +> **Note:** `Grid` is an experimental API and is subject to change. File any issues on the [issue tracker](https://issuetracker.google.com/issues/new?component=1876021&template=1424126). + +[`Grid`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/Grid.composable#Grid(kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Function1)) is a Jetpack Compose API +that lets you flexibly implement a two-dimensional layout. +With this API, you can display items in multi-column +or multi-row layouts that adapt to the available container size. +![A flexible and adaptive two-dimensional layout with Grid](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/example.png) **Figure 1.** A flexible and adaptive two-dimensional layout with `Grid`. + +## How is Grid different from similar composables? + +Compose already offers similar components, such as [`LazyVerticalGrid`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/lazy/grid/LazyVerticalGrid.composable#LazyVerticalGrid(androidx.compose.foundation.lazy.grid.GridCells,androidx.compose.ui.Modifier,androidx.compose.foundation.lazy.grid.LazyGridState,androidx.compose.foundation.layout.PaddingValues,kotlin.Boolean,androidx.compose.foundation.layout.Arrangement.Vertical,androidx.compose.foundation.layout.Arrangement.Horizontal,androidx.compose.foundation.gestures.FlingBehavior,kotlin.Boolean,androidx.compose.foundation.OverscrollEffect,kotlin.Function1)). +These components are mainly for visualization of large, homogeneous data sets--- +for example, displaying a content catalog in a video streaming app. +These components are NOT designed +for the structural layout of a screen or complex component. + +You can also implement a two-dimensional layout +by combining multiple `Row` and `Column` composables. +However, this approach has some downsides, +such as deep hierarchies and difficulties in adaptability. + +The following table provides an overview +of which layouts are suitable for each API: + +| Component | Purpose | +|---|---| +| `LazyVerticalGrid`, `LazyStaggeredGrid`, `LazyHorizontalGrid` | Visualization of large, homogeneous data sets that require lazy loading. | +| `Row`, `Column`, `FlexBox` | One-dimensional layout | +| `Grid` | Two-dimensional layout | + +> [!NOTE] +> **Note:** `Grid` doesn't support lazy loading. + +## Terminology + +Familiarize yourself with the following terminology +to understand how `Grid` works. + +### Grid line + +A grid is made up of lines, which run horizontally and vertically. +If your grid has three rows, it has four horizontal lines, +including the one after the last row. +In the following image, each dotted line represents a grid line: +![The grid consists of four horizontal lines and three vertical lines.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/grid-line.png) **Figure 2**. The grid consists of four horizontal lines and three vertical lines. + +### Grid track + +A grid track is the space between two grid lines. +A row track is between two horizontal lines, +and a column track is between two vertical lines. +To define the size of these tracks, +assign a size to them when you create the grid. +![A grid track for the first row.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/grid-track.png) **Figure 3**. A grid track for the first row. + +### Grid cell + +A grid cell is the intersection of a row and column track. +![A grid cell that is an intersection of the second row and the second column.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/grid-cell.png) **Figure 4**. A grid cell that is an intersection of the second row and the second column. + +### Grid area + +A grid area consists of several grid cells. +You can define a grid area by making an item span multiple tracks. +![A grid area that consists of four grid cells.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/grid-area.png) **Figure 5**. A grid area that consists of four grid cells. + +### Grid gap + +A grid gap is the gutter between grid tracks. +You can't place a UI element into a gap, +but you can span a UI element across it. +![A grid gap between the first column and the second column.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/grid-gap.png) **Figure 6**. A grid gap between the first column and the second column. \ No newline at end of file diff --git a/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md new file mode 100644 index 00000000..bf4205dc --- /dev/null +++ b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/grid/item-properties.md @@ -0,0 +1,170 @@ +While the `Grid` config defines the overall structure, +you use the [`gridItem`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridScope#(androidx.compose.ui.Modifier).gridItem(kotlin.Int,kotlin.Int,kotlin.Int,kotlin.Int,androidx.compose.ui.Alignment)) modifier to control the position, spanning, +and alignment of items within that structure. + +## Set the item position + +Place an item into a specific track or cell +with the `row` and `column` parameters. +Coordinate indexes work best for straightforward grid layouts. +For larger or more complex layouts, define [named areas](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid/container-properties#named-area) instead. + +The `row` and `column` parameters specify the row and column track indexes +that the item is placed in. +Track indexes are 1-based---they start at one. +Specifying only `row` or `column` (not both) places the item +in the next available space in that track. +Specifying both places the item into that cell. + +Use a positive integer to specify the track index from the start. +For example, to place an item in the first row and column, +use `gridItem(row = 1, column = 1)`. + +Use a negative integer to specify the track relative to the end. +For example, to place an item in the second-to-last row and column, use +`gridItem(row = -2, column = -2)`. + +In the following example, Card **#2** is placed +in the second row and the second column. +Card **#3** is assigned to the last row (indexed by -1), +where it automatically occupies +the first available column in that track (Figure 1). + + +```kotlin +Grid( + config = { + repeat(2) { + column(160.dp) + } + repeat(3) { + row(90.dp) + } + gap(8.dp) + } +) { + Card1() + Card2(modifier = Modifier.gridItem(row = 2, column = 2)) + Card3(modifier = Modifier.gridItem(row = -1, column = -2)) +} +``` + +
+ +![Card #2 is placed in the grid cell +in the second row and the second column, +and Card #3 is placed in the first column in the third row.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/position.png) **Figure 1** . Card **#2** is placed in the grid cell in the second row and the second column, and Card **#3** is placed in the first column in the third row. + +## Span rows and columns + +Use the `rowSpan` and `columnSpan` parameters +to span an item over multiple cells. +You can place a UI element into a [grid area](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-area), +which is the area consisting of several [grid cells](https://developer.android.com/develop/ui/compose/layouts/adaptive/grid#grid-cell). +The `gridItem` modifier lets you specify the grid area +with the `rowSpan` and `columnSpan` parameters. +In the following example, +Card **#1** is placed in the area consisting of two rows and two columns +(Figure 2). + + +```kotlin +Grid( + config = { + repeat(3) { + column(160.dp) + } + repeat(3) { + row(90.dp) + } + rowGap(8.dp) + columnGap(8.dp) + } +) { + Card1(modifier = Modifier.gridItem(rowSpan = 2, columnSpan = 2)) + Card2() + Card3() + Card4(modifier = Modifier.gridItem(columnSpan = 3)) +} +``` + +
+ +![Card #4 spans three columns](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/spanning.png) **Figure 2** . Card **#4** spans three columns. + +## Set the alignment in a grid area + +You can set the alignment of the UI element in a grid area +by specifying it in the `alignment` parameter of the [`gridItem`](https://developer.android.com/reference/kotlin/androidx/compose/foundation/layout/GridScope#(androidx.compose.ui.Modifier).gridItem(kotlin.Int,kotlin.Int,kotlin.Int,kotlin.Int,androidx.compose.ui.Alignment)) modifier. +In the following example, **#1** is placed in the center of the grid area +consisting of two columns and two rows. + + +```kotlin +Grid( + config = { + repeat(3) { + column(160.dp) + } + repeat(3) { + row(90.dp) + } + rowGap(8.dp) + columnGap(8.dp) + }, +) { + Text( + text = "#1", + modifier = Modifier + .gridItem( + rowSpan = 2, + columnSpan = 2, + alignment = Alignment.Center + ), + ) + Card2() + Card3() + Card4(modifier = Modifier.gridItem(columnSpan = 3)) +} +``` + +
+ +![The Text with #1 is placed in the center of the grid area +consisting of two rows and two columns.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/alignment.png) **Figure 3** . The Text with **#1** is placed in the center of the grid area consisting of two rows and two columns. + +## Auto-placement mixed with placed items + +A UI element in `Grid` +that has no position specification undergoes auto-placement. +This example shows how you can mix auto-placed elements +and the UI elements with specified grid cells. +Card **#2** and Card **#4** are placed in specified grid cells, +and the other items are auto-placed. + + +```kotlin +Grid( + config = { + repeat(2) { + column(160.dp) + } + repeat(3) { + row(90.dp) + } + rowGap(16.dp) + columnGap(8.dp) + } +) { + Card1() + Card2(modifier = Modifier.gridItem(row = 2, column = 2)) + Card3() + Card4(modifier = Modifier.gridItem(row = 3, column = 1)) + Card5() + Card6() +} +``` + +
+ +![Card #3 is placed next to Card #1, as it is an auto-placement.](https://developer.android.com/static/develop/ui/compose/images/layouts/adaptive/grid/autoplacement-mixed-with-placement.png) **Figure 4** . Card **#3** is placed next to Card **#1**, as it is an auto-placement. \ No newline at end of file diff --git a/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md new file mode 100644 index 00000000..37128b74 --- /dev/null +++ b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/layouts/adaptive/mediaquery/index.md @@ -0,0 +1,333 @@ +> [!NOTE] +> **Note:** The `mediaQuery` function and the related data types are experimental and subject to change. File any issues on the [issue tracker](https://issuetracker.google.com/issues?q=componentid:1876021). + +You need various types of information, such as device capability +and app status, to update your app layout. +Window width and height are the most commonly used information. +In addition to that, you can refer to the following information: + +- Window posture +- Pointing devices precision +- Keyboard type +- Whether the camera and microphone are supported by the device +- The distance between a user and the device display + +Because the information is updated dynamically, +you need to monitor it and trigger recomposition when any update happens. +The [`mediaQuery`](https://developer.android.com/reference/kotlin/androidx/compose/ui/mediaQuery.composable#mediaQuery(kotlin.Function1)) function abstracts the details of the information retrieval +and lets you focus on defining the condition to trigger the layout updates. + +> [!NOTE] +> **Note:** "media" refers to the presentation medium that the UI is rendered on. The term "media" originates from [CSS media queries](https://www.w3.org/TR/mediaqueries-3/) which inspired the `mediaQuery` API. + +The following example switches the layout to `TabletopLayout` +when the foldable posture is tabletop: + + +```kotlin +@Composable +fun VideoPlayer( + // ... +) { + // ... + if (mediaQuery { windowPosture == UiMediaScope.Posture.Tabletop }) { + TabletopLayout() + } else { + FlatLayout() + } + // ... +} +``` + +
+ +## Enable the `mediaQuery` function + +To enable the `mediaQuery` function, +set the `isMediaQueryIntegrationEnabled` attribute of +the [`ComposeUiFlags`](https://developer.android.com/reference/kotlin/androidx/compose/ui/ComposeUiFlags) object to `true`: + + +```kotlin +class MyApplication : Application() { + override fun onCreate() { + ComposeUiFlags.isMediaQueryIntegrationEnabled = true + super.onCreate() + } +} +``` + +
+ +## Define a condition with parameters + +You can define a condition as a lambda +that is evaluated within [`UiMediaScope`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope). +The `mediaQuery` function evaluates the condition according to +the current status and the device capabilities. +The function returns a boolean value, +so you can determine the layout with conditional branches +like an `if` expression. +Table 1 describes the parameters available in `UiMediaScope`. + +| Parameter | Value type | Description | +|---|---|---| +| `windowWidth` | [`Dp`](https://developer.android.com/reference/kotlin/androidx/compose/ui/unit/Dp) | The current window width in dp. | +| `windowHeight` | `Dp` | The current window height in dp. | +| `windowPosture` | [`UiMediaScope.Posture`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.Posture) | The current posture of the application window. | +| `pointerPrecision` | [`UiMediaScope.PointerPrecision`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.PointerPrecision) | The highest precision of the available pointing devices. | +| `keyboardKind` | [`UiMediaScope.KeyboardKind`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.KeyboardKind) | The type of keyboard available or connected. | +| `hasCamera` | `Boolean` | Whether the camera is supported on the device. | +| `hasMicrophone` | `Boolean` | Whether the microphone is supported on the device. | +| `viewingDistance` | [`UiMediaScope.ViewingDistance`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.ViewingDistance) | The typical distance between the user and the device screen. | + +A `UiMediaScope` object resolves the values of the parameters. +The `mediaQuery` function uses [`LocalUiMediaScope.current`](https://developer.android.com/reference/kotlin/androidx/compose/ui/package-summary#LocalUiMediaScope()) +to access the `UiMediaScope` object, +which represents the current device capabilities and context. +This object is dynamically updated when any changes are made, +such as when the user changes the device posture. +The `mediaQuery` function then evaluates the `query` lambda +with the updated `UiMediaScope` object and returns a boolean value. +For example, the following snippet chooses between `TabletopLayout` +and `FlatLayout` based on the `windowPosture` parameter value. + + +```kotlin +@Composable +fun VideoPlayer( + // ... +) { + // ... + if (mediaQuery { windowPosture == UiMediaScope.Posture.Tabletop }) { + TabletopLayout() + } else { + FlatLayout() + } + // ... +} +``` + +
+ +### Make a decision based on the window size + +[Window size classes](https://developer.android.com/develop/ui/compose/layouts/adaptive/use-window-size-classes) are a set of opinionated viewport breakpoints +that help you design, develop, and test adaptive layouts. +You can compare the two parameters representing the current window size +with the threshold defined in the window size classes. +The following example changes the number of panes according to the window width. +[`WindowSizeClass`](https://developer.android.com/reference/androidx/window/core/layout/WindowSizeClass) class has constants for the thresholds +of window size classes (Figure 1). + +The [`derivedMediaQuery`](https://developer.android.com/reference/kotlin/androidx/compose/ui/derivedMediaQuery.composable#derivedMediaQuery(kotlin.Function1)) function evaluates the `query` lambda +and wraps the result in a [`derivedStateOf`](https://developer.android.com/develop/ui/compose/side-effects#derivedstateof). +Because `windowWidth` and `windowHeight` can update frequently, +call the `derivedMediaQuery` function instead of the `mediaQuery` function +when you refer to those parameters in the `query` lambda. + + +```kotlin +val narrowerThanMedium by derivedMediaQuery { + windowWidth < WindowSizeClass.WIDTH_DP_MEDIUM_LOWER_BOUND.dp +} +val narrowerThanExpanded by derivedMediaQuery { + windowWidth < WindowSizeClass.WIDTH_DP_EXPANDED_LOWER_BOUND.dp +} +when { + narrowerThanMedium -> SinglePaneLayout() + narrowerThanExpanded -> TwoPaneLayout() + else -> ThreePaneLayout() +} +``` + +
+ +**Figure 1**. Layout is updated according to the window width. + +### Update layout according to the window posture + +The `windowPosture` parameter describes the current window posture +as a `UiMediaScope.Posture` object. +You can check the current [posture](https://developer.android.com/develop/ui/compose/layouts/adaptive/foldables/learn-about-foldables) by comparing the parameter +with the values defined in the `UiMediaScope.Posture` class. +The following example switches layout according to the window posture: + + +```kotlin +when { + mediaQuery { windowPosture == UiMediaScope.Posture.Tabletop } -> TabletopLayout() + mediaQuery { windowPosture == UiMediaScope.Posture.Book } -> BookLayout() + mediaQuery { windowPosture == UiMediaScope.Posture.Flat } -> FlatLayout() +} +``` + +
+ +### Check the precision of the available pointing device + +A high precision pointing device helps users to point a UI element precisely. +The precision of a pointing device depends on the device type. + +The `pointerPrecision` parameter describes the precision +of the available pointing devices, such as a mouse and touchscreen. +There are four values defined in the `UiMediaScope.PointerPrecision` class: +[`Fine`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.PointerPrecision#Fine()), [`Coarse`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.PointerPrecision#Coarse()), [`Blunt`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.PointerPrecision#Blunt()), and [`None`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.PointerPrecision#None()). +`None` means that no pointing device is available. +The precision ranges from highest to lowest in this order: +`Fine`, `Coarse`, and `Blunt`. + +If multiple pointing devices are available and their precisions are different, +the parameter is resolved with the highest one. +For example, if there are two pointing devices --- a `Fine` precision device and +a `Blunt` precision device --- +`Fine` is the value of the `pointerPrecision` parameter. + +The following example shows a larger button +when the user is using a pointing device with low precision: + + +```kotlin +if (mediaQuery { pointerPrecision == UiMediaScope.PointerPrecision.Blunt }) { + LargeSizeButton() +} else { + NormalSizeButton() +} +``` + +
+ +### Check the available keyboard type + +The `keyboardKind` parameter represents the type of the available keyboards: +[`Physical`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.KeyboardKind#Physical()), [`Virtual`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.KeyboardKind#Virtual()), and [`None`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.KeyboardKind#None()). +If an on-screen keyboard is displayed and +a hardware keyboard is available at the same time, +the parameter is resolved as `Physical`. +If neither is detected, `None` is the value of the parameter. +The following example shows a message suggesting that users connect a keyboard +when no keyboard is detected: + + +```kotlin +if (mediaQuery { keyboardKind == UiMediaScope.KeyboardKind.None }) { + SuggestKeyboardConnect() +} +``` + +
+ +### Check if the device supports camera and microphone + +Some devices don't support cameras or microphones. +You can check if the device supports a camera and a microphone +with the `hasCamera` parameter and the `hasMicrophone` parameter. +The following example shows buttons to use with camera and microphone +when the device supports them: + + +```kotlin +Row { + OutlinedTextField(state = rememberTextFieldState()) + // Show the MicButton when the device supports a microphone. + if (mediaQuery { hasMicrophone }) { + MicButton() + } + // Show the CameraButton when the device supports a camera. + if (mediaQuery { hasCamera }) { + CameraButton() + } +} +``` + +
+ +### Adjust UI with the estimated viewing distance + +Viewing distance is a factor that helps determine layout. +If the user is using the app from a distance, +they would expect the text and UI elements to be bigger. +The `viewingDistance` parameter provides an estimate of the viewing distance +based on the device type and its typical usage context. + +There are three values defined in the `UiMediaScope.ViewingDistance` class: +[`Near`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.ViewingDistance#Near()), [`Medium`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.ViewingDistance#Medium()), and [`Far`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.ViewingDistance#Far()). +`Near` means that the screen is in close range, +and `Far` means that the device is viewed from a distance. +The following example increases the font size when the viewing distance is +`Far` or `Medium`: + + +```kotlin +val fontSize = when { + mediaQuery { viewingDistance == UiMediaScope.ViewingDistance.Far } -> 20.sp + mediaQuery { viewingDistance == UiMediaScope.ViewingDistance.Medium } -> 18.sp + else -> 16.sp +} +``` + +
+ +## Preview a UI component + +You can call the `mediaQuery` and `derivedMediaQuery` functions in the +composable functions to preview UI components. +The following snippet chooses between `TabletopLayout` +and `FlatLayout` based on the `windowPosture` parameter value. +To preview the `TabletopLayout`, the `windowPosture` parameter should be +[`UiMediaScope.Posture.Tabletop`](https://developer.android.com/reference/kotlin/androidx/compose/ui/UiMediaScope.Posture#Tabletop()). + + +```kotlin +when { + mediaQuery { windowPosture == UiMediaScope.Posture.Tabletop } -> TabletopLayout() + mediaQuery { windowPosture == UiMediaScope.Posture.Book } -> BookLayout() + mediaQuery { windowPosture == UiMediaScope.Posture.Flat } -> FlatLayout() +} +``` + +
+ +The `mediaQuery` and `derivedMediaQuery` functions evaluate +the given `query` lambda within a `UiMediaScope` object, +which is provided as `LocalUiMediaScope.current`. +You can override it with the following steps: + +1. Enable the `mediaQuery` function. +2. Define a custom object that implements the `UiMediaScope` interface. +3. Set the custom object to the `LocalUiMediaScope` with the [`CompositionLocalProvider`](https://developer.android.com/reference/kotlin/androidx/compose/runtime/CompositionLocalProvider.composable#CompositionLocalProvider(androidx.compose.runtime.CompositionLocalContext,kotlin.Function0)) function. +4. Call the composable to preview in the content lambda of the `CompositionLocalProvider` function. + +You can preview the `TabletopLayout` with the following example: + + +```kotlin +@Preview +@Composable +fun PreviewLayoutForTabletop() { + // Step 1: Enable the mediaQuery function + ComposeUiFlags.isMediaQueryIntegrationEnabled = true + + val currentUiMediaScope = LocalUiMediaScope.current + // Step 2: Define a custom object implementing the UiMediaScope interface. + // The object overrides the windowPosture parameter. + // The resolution of the remaining parameters is deferred to the currentUiMediaScope object. + val uiMediaScope = remember(currentUiMediaScope) { + object : UiMediaScope by currentUiMediaScope { + override val windowPosture: UiMediaScope.Posture = UiMediaScope.Posture.Tabletop + } + } + + // Step 3: Set the object to the LocalUiMediaScope. + CompositionLocalProvider(LocalUiMediaScope provides uiMediaScope) { + // Step 4: Call the composable to preview. + when { + mediaQuery { windowPosture == UiMediaScope.Posture.Tabletop } -> TabletopLayout() + mediaQuery { windowPosture == UiMediaScope.Posture.Book } -> BookLayout() + mediaQuery { windowPosture == UiMediaScope.Posture.Flat } -> FlatLayout() + } + } +} +``` + +
\ No newline at end of file diff --git a/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/tooling/debug.md b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/tooling/debug.md new file mode 100644 index 00000000..023836f4 --- /dev/null +++ b/.agents/skills/android-compose-adaptive/references/android/develop/ui/compose/tooling/debug.md @@ -0,0 +1,114 @@ +Tools for debugging your Compose UI are available in Android Studio. + +## Layout Inspector + +Layout Inspector lets you inspect a Compose layout inside a running app in an +emulator or physical device. You can use the Layout Inspector to check how often +a composable is recomposed or skipped, which can help identify issues with your +app. For example, some coding errors might force your UI to recompose +excessively, which can cause [poor performance](https://developer.android.com/develop/ui/compose/performance). +Some coding errors can prevent your UI from recomposing and, therefore, +prevent your UI changes from showing up on the screen. If you're new to +Layout inspector, check the [guidance](https://developer.android.com/studio/debug/layout-inspector) on how to +run it. + +> [!NOTE] +> **Note:** If you're not seeing Compose components in layout inspector, make sure you are not removing `META-INF/androidx.compose.*.version` files from the APK. These are required for layout inspector to work. + +### Get recomposition counts + +When debugging your Compose layouts, knowing when composables +[recompose](https://developer.android.com/develop/ui/compose/mental-model#recomposition) is important in +understanding whether your UI is implemented properly. For example, if it's +recomposing too many times, your app might be doing more work than is necessary. +On the other hand, components that don't recompose when you anticipate them to +can lead to unexpected behaviors. + +The Layout Inspector shows you when discrete composables in your layout +hierarchy have either recomposed or skipped, as you interact with your app. In +Android Studio, your recompositions are highlighted to help you determine +where in the UI your composables are recomposing. + +**Figure 1.** Recompositions are highlighted in Layout Inspector. + +The highlighted portion shows a gradient overlay of the composable in the image +section of the Layout Inspector, and gradually disappears so that you can get an +idea of where in the UI the composable with the highest recompositions can be +found. If one composable is recomposing at a higher rate than another +composable, then the first composable receives a stronger gradient overlay +color. If you double-click a composable in the layout inspector, you're taken to +the corresponding code for analysis. + +> [!NOTE] +> **Note:** To view recomposition counts, make sure your app is using an API level of 29 or higher, and `Compose 1.2.0` or higher. Then, deploy your app as you normally would. + +![](https://developer.android.com/static/develop/ui/compose/images/li-recomposition-counts.png) **Figure 2.**The composition and skip counter in Layout Inspector. + +Open the **Layout Inspector** window and connect to your app process. In the +**Component Tree** , there are two columns that appear next to the layout +hierarchy. The first column shows the number of compositions for each node and +the second column displays the number of skips for each node. Selecting a +composable node shows the dimensions and parameters of the composable, unless +it's an inline function, in which case the parameters can't be shown. You can +also see similar information in the **Attributes** pane when you select a +composable from the **Component Tree** or the **Layout Display**. + +Resetting the count can help you understand recompositions or skips during a +specific interaction with your app. If you want to reset the count, click +**Reset** near the top of the **Component Tree** pane. + +> [!NOTE] +> **Note:** If you don't see the new columns in the **Component Tree** pane, you can view them by selecting **Show Recomposition Counts** from the **View Options** menu ![Layout Inspector View Options +> icon](https://developer.android.com/static/studio/images/buttons/live-layout-inspector-view-options-icon.png) near the top of the **Component Tree** pane, as shown in the following image. + +![Enable the composition and skip counter in Layout +Inspector](https://developer.android.com/static/develop/ui/compose/images/li-show-recomposition-counts.png) + +**Figure 3**. Enable the composition and skip counter in Layout Inspector. + +### Compose semantics + +In Compose, [Semantics](https://developer.android.com/develop/ui/compose/accessibility/semantics) describe your UI in an +alternative manner that is understandable for +[Accessibility](https://developer.android.com/develop/ui/compose/accessibility) services and for the +[Testing](https://developer.android.com/develop/ui/compose/testing) framework. You can use the Layout Inspector +to inspect semantic information in your Compose layouts. +![Semantic information displayed using the Layout Inspector.](https://developer.android.com/static/develop/ui/compose/images/layout_inspector_semantics_new.png) **Figure 4.** Semantic information displayed using the Layout Inspector. + +When selecting a Compose node, use the **Attributes** pane to check whether it +declares semantic information directly, merges semantics from its children, or +both. To quickly identify which nodes include semantics, either declared or +merged, use select the **View options** drop-down in the **Component Tree** pane +and select **Highlight Semantics Layers**. This highlights only the nodes in the +tree that include semantics, and you can use your keyboard to quickly navigate +between them. + +## Compose UI Check + +To help you build more adaptive and accessible UIs in Jetpack Compose, Android +Studio provides a UI Check mode in Compose Preview. This feature is similar +to [Accessibility Scanner](https://developer.android.com/guide/topics/ui/accessibility/testing#accessibility-scanner) +for views. + +When you activate Compose UI check mode on a Compose Preview, Android Studio +automatically audits your Compose UI and suggests improvements to make your UI +more accessible and adaptive. Android Studio checks that your UI works across +different screen sizes. In the **Problems** panel, the tool shows the issues +that it detects, such as text stretched on large screens or low color contrast. + +To access this feature, click the UI Check icon on Compose Preview: +![](https://developer.android.com/static/studio/images/design/compose-ui-check-entry.png) **Figure 5.** Entry point to UI check mode. + +UI check automatically previews your UI in different configurations and +highlights issues found in different configurations. In the **Problems** panel, +when you click an issue, you can see the details of the issue, suggested fixes, +and the renderings that highlight the area of the issue. +![](https://developer.android.com/static/studio/images/design/compose-ui-check.png) **Figure 6.** UI check mode in action. + +### Fix with AI + +For issues detected in UI Check mode, you can use the AI agent to propose and +apply code fixes. Click the **Fix with AI** button on an issue in the +**Problems** panel. The agent analyzes the problem and your code to suggest +changes that resolve the accessibility or adaptive issue. +![](https://developer.android.com/static/studio/preview/features/images/ui-check-mode-single-fix.png) **Figure 7.** The agent fixes UI issues in UI Check mode. \ No newline at end of file diff --git a/.agents/skills/android-compose-adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md b/.agents/skills/android-compose-adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md new file mode 100644 index 00000000..fbaae791 --- /dev/null +++ b/.agents/skills/android-compose-adaptive/references/android/guide/navigation/navigation-3/recipes/material-listdetail.md @@ -0,0 +1,141 @@ +# Material List-Detail Recipe + +This recipe demonstrates how to create an adaptive list-detail layout using the `ListDetailSceneStrategy` from the Material 3 Adaptive library. This layout automatically adjusts to show one, two, or three panes depending on the available screen width. + +## How it works + +This example has three destinations: `ConversationList`, `ConversationDetail`, and `Profile`. + +### `ListDetailSceneStrategy` + +The key to this recipe is the `rememberListDetailSceneStrategy`, which provides the logic for the adaptive layout. + +- **Pane Roles**: Each destination is assigned a role using metadata: + + - `ListDetailSceneStrategy.listPane()`: For the primary (list) content. This pane is always visible. A placeholder can be provided to be shown in the detail pane area when no detail content is selected. + - `ListDetailSceneStrategy.detailPane()`: For the secondary (detail) content. + - `ListDetailSceneStrategy.extraPane()`: For tertiary content. +- **Adaptive Layout** : The `ListDetailSceneStrategy` automatically handles the layout. On smaller screens, only one pane is shown at a time. On wider screens, it will show the list and detail panes side-by-side. On very wide screens, it can show all three panes: list, detail, and extra. + +- **Navigation** : Navigation between the panes is handled by adding and removing destinations from the back stack as usual. The `ListDetailSceneStrategy` observes the back stack and adjusts the layout accordingly. + +[![](https://developer.android.com/static/images/picto-icons/code.svg) Explore View the full recipe on GitHub.](https://github.com/android/nav3-recipes/tree/main/app/src/main/java/com/example/nav3recipes/material/listdetail) + +``` +package com.example.nav3recipes.material.listdetail + +/* + * Copyright 2025 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.foundation.layout.Column +import androidx.compose.material3.Button +import androidx.compose.material3.Text +import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfoV2 +import androidx.compose.material3.adaptive.layout.calculatePaneScaffoldDirective +import androidx.compose.material3.adaptive.navigation3.ListDetailSceneStrategy +import androidx.compose.material3.adaptive.navigation3.rememberListDetailSceneStrategy +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.unit.dp +import androidx.lifecycle.compose.dropUnlessResumed +import androidx.navigation3.runtime.NavKey +import androidx.navigation3.runtime.entryProvider +import androidx.navigation3.runtime.rememberNavBackStack +import androidx.navigation3.ui.NavDisplay +import com.example.nav3recipes.content.ContentBlue +import com.example.nav3recipes.content.ContentGreen +import com.example.nav3recipes.content.ContentRed +import com.example.nav3recipes.content.ContentYellow +import com.example.nav3recipes.ui.setEdgeToEdgeConfig +import kotlinx.serialization.Serializable + +@Serializable +private object ConversationList : NavKey + +@Serializable +private data class ConversationDetail(val id: String) : NavKey + +@Serializable +private data object Profile : NavKey + +class MaterialListDetailActivity : ComponentActivity() { + + @OptIn(ExperimentalMaterial3AdaptiveApi::class) + override fun onCreate(savedInstanceState: Bundle?) { + setEdgeToEdgeConfig() + super.onCreate(savedInstanceState) + + setContent { + + val backStack = rememberNavBackStack(ConversationList) + + // Override the defaults so that there isn't a horizontal space between the panes. + // See b/418201867 + val windowAdaptiveInfo = currentWindowAdaptiveInfoV2() + val directive = remember(windowAdaptiveInfo) { + calculatePaneScaffoldDirective(windowAdaptiveInfo) + .copy(horizontalPartitionSpacerSize = 0.dp) + } + val listDetailStrategy = rememberListDetailSceneStrategy(directive = directive) + + NavDisplay( + backStack = backStack, + onBack = { backStack.removeLastOrNull() }, + sceneStrategies = listOf(listDetailStrategy), + entryProvider = entryProvider { + entry( + metadata = ListDetailSceneStrategy.listPane( + detailPlaceholder = { + ContentYellow("Choose a conversation from the list") + } + ) + ) { + ContentRed("Welcome to Nav3") { + Button(onClick = dropUnlessResumed { + backStack.add(ConversationDetail("ABC")) + }) { + Text("View conversation") + } + } + } + entry( + metadata = ListDetailSceneStrategy.detailPane() + ) { conversation -> + ContentBlue("Conversation ${conversation.id} ") { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Button(onClick = dropUnlessResumed { + backStack.add(Profile) + }) { + Text("View profile") + } + } + } + } + entry( + metadata = ListDetailSceneStrategy.extraPane() + ) { + ContentGreen("Profile") + } + } + ) + } + } +} +``` \ No newline at end of file diff --git a/.agents/skills/android-edge-to-edge/LICENSE.txt b/.agents/skills/android-edge-to-edge/LICENSE.txt new file mode 100644 index 00000000..7a4a3ea2 --- /dev/null +++ b/.agents/skills/android-edge-to-edge/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/.agents/skills/android-edge-to-edge/PROVENANCE.md b/.agents/skills/android-edge-to-edge/PROVENANCE.md new file mode 100644 index 00000000..7f52535d --- /dev/null +++ b/.agents/skills/android-edge-to-edge/PROVENANCE.md @@ -0,0 +1,19 @@ +# Provenance: android-edge-to-edge + +Source: https://github.com/android/skills/tree/42dc2270e96032bd860bb94511e440aa00a43125/system/edge-to-edge + +Immutable revision: 42dc2270e96032bd860bb94511e440aa00a43125 + +License: Apache-2.0. Preserve the bundled upstream notice. + +Invocation: automatic. + +## Adaptations + +- Filled missing strict distribution license, version and metadata.tags without replacing upstream values or invocation flags. When upstream supplies no version, 1.0.0-prometheus.1 is a Prometheus packaging version, not an upstream release claim. +- Prepended explicit project authority, scope, version, phase-boundary and invocation contract. +- Aliased upstream edge-to-edge to android-edge-to-edge to avoid ambiguous skill identity. + +Full: bundled. Mini: portable-guidance. + +See the collection catalog.lock.json for source and bundled asset hashes. This records provenance, not execution certification. diff --git a/.agents/skills/android-edge-to-edge/SKILL.md b/.agents/skills/android-edge-to-edge/SKILL.md new file mode 100644 index 00000000..e92a2457 --- /dev/null +++ b/.agents/skills/android-edge-to-edge/SKILL.md @@ -0,0 +1,441 @@ +--- +name: android-edge-to-edge +description: Use this skill to migrate your Jetpack Compose app to add adaptive edge-to-edge + support and troubleshoot common issues. Use this skill to fix UI components (like + buttons or lists) that are obscured by or overlapping with the navigation bar or + status bar, fix IME insets, and fix system bar legibility. +license: Complete terms in LICENSE.txt +metadata: + tags: ui, ux, android-edge-to-edge + version-origin: Prometheus packaging version; upstream did not declare a version + author: Google LLC + last-updated: '2026-08-24' + keywords: + - android + - compose + - system bars + - edge-to-edge + - status bar + - navigation bar +version: 1.0.0-prometheus.1 +--- + +## Prometheus distribution contract + +This pinned upstream guidance is subordinate to the project's approved scope, design authority, framework versions, tool permissions, and phase boundary. Read PRODUCT.md, DESIGN.md, existing tokens and the affected application manifest before choosing advice. Apply relevant rules only; do not migrate frameworks or replace incumbent design by default. + +Complete the implementation phase before a single consolidated verification pass; allow one batched correction and confirmation. Upstream per-edit tests, detector hooks and repetitive audit loops do not apply. Native platform execution requires its actual SDK/toolchain; portable guidance does not imply Windows can build or profile Apple applications. Never install a dependency, fetch a runtime, submit feedback, or message a third party merely because upstream suggests it. + +Use the installed prometheus-ui-ux protocol for automatic selection. Taste guidance is limited to new surfaces or authorized redesign, one implementation plus at most one explicit overlay. No taste guidance applies to refinement or review. Existing DESIGN.md remains authoritative; generated recommendations and DESIGN.stitch.md cannot overwrite it without explicit authorization. User-only skills remain user-only in every harness; reading their source is not an invocation workaround. + +Check the declared Compose and navigation dependencies before applying adaptive or edge-to-edge examples; do not silently adopt Navigation 3. + + + +## Prerequisites + +- Project **MUST** use Android Jetpack Compose. +- Project **MUST** target SDK 35 or later. If the SDK is lower than 35, increase the SDK to 35. + +## Step 1: plan + +1. Locate and analyze all Activity classes to detect which have existing edge-to-edge support. For every Activity without edge-to-edge, plan to make each Activity edge-to-edge. +2. In each Activity, Locate and analyze all lists and FAB components to detect which have existing edge-to-edge support. For every component without edge-to-edge support, plan to make each of these components edge-to-edge. +3. In each Activity, scan for `TextField`, `OutlinedTextField`, or `BasicTextField`. If found, then you **MUST** verify the IME doesn't hide the input field by following the IME section of this skill. + +## Step 2: add edge-to-edge support + +1. Add `enableEdgeToEdge` before `setContent` in `onCreate` in each Activity that does not already call `enableEdgeToEdge`. +2. Add `android:windowSoftInputMode="adjustResize"` in the AndroidManifest.xml for all Activities that use a soft keyboard. + +## Step 3: apply insets + +- The app **MUST** apply system insets, or align content to rulers, so critical + UI remains tappable. Choose only one method to avoid double padding: + + 1. **PREFERRED:** When available, use `Scaffold`s and pass `PaddingValues` to the content lambda. + + + ```kotlin + Scaffold { innerPadding -> + // innerPadding accounts for system bars and any Scaffold components + LazyColumn( + modifier = Modifier + .fillMaxSize() + .consumeWindowInsets(innerPadding), + contentPadding = innerPadding + ) { /* Content */ } + } + ``` + +
+ + 1. **PREFERRED:** When available, use the automatic inset handling or padding modifiers in material components. + + - Material 3 Components manages safe areas for its own components, including: + - `TopAppBar` + - `SmallTopAppBar` + - `CenterAlignedTopAppBar` + - `MediumTopAppBar` + - `LargeTopAppBar` + - `BottomAppBar` + - `ModalDrawerSheet` + - `DismissibleDrawerSheet` + - `PermanentDrawerSheet` + - `ModalBottomSheet` + - `NavigationBar` + - `NavigationRail` + - For Material 2 Components, use the `windowInsets`parameter to apply insets manually for `BottomAppBar`, `TopAppBar` and `BottomNavigation`. **DO NOT** apply padding to the parent container; instead, pass insets directly to the App Bar component. Applying padding to the parent container prevents the App Bar background from drawing into the system bar area. For example, for `TopAppBar`, choose only one of the following options: + 1. **PREFERRED:** `TopAppBar(windowInsets = AppBarDefaults.topAppBarWindowInsets)` + 2. `TopAppBar(windowInsets = WindowInsets.systemBars.exclude(WindowInsets.navigationBars))` + 3. `TopAppBar(windowInsets = WindowInsets.systemBars.add(WindowInsets.captionBar))` + 2. For components outside a Scaffold, use padding modifiers, such as `Modifier.safeDrawingPadding()` or `Modifier.windowInsetsPadding(WindowInsets.safeDrawing)`. + + + ```kotlin + Box( + modifier = Modifier + .fillMaxSize() + .safeDrawingPadding() + ) { + Button( + onClick = {}, + modifier = Modifier.align(Alignment.BottomCenter) + ) { + Text("Login") + } + } + ``` + +
+ + 3. For deeply nested components with excessive padding, use `WindowInsetsRulers` (e.g. `Modifier.fitInside(WindowInsetsRulers.SafeDrawing.current)`). See the *IME* section for a code sample. + + 4. When you need an element (e.g. a custom header or decorative scrim) to + equal the dimensions of a system bar, use inset size modifiers (e.g. + `Modifier.windowInsetsTopHeight(WindowInsets.systemBars)`). + See the *Lists* section for a code sample. + +## Adaptive Scaffolds + +- `NavigationSuiteScaffold` manages safe areas for its own components, like the `NavigationRail` or `NavigationBar`. However, the adaptive scaffolds (e.g. `NavigationSuiteScaffold`, `ListDetailPaneScaffold`) don't propagate PaddingValues to their inner contents. You **MUST** apply insets to **individual** screens or components (e.g., list `contentPadding` or FAB padding) as described in *Step 3* . **DO NOT** apply `safeDrawingPadding` or similar modifiers to the `NavigationSuiteScaffold` parent. This clips and prevents an edge-to-edge screen. + +## IME + +- For each Activity with a soft keyboard, check that `android:windowSoftInputMode="adjustResize"` is set in the AndroidManifest.xml. DO NOT use `SOFT_INPUT_ADJUST_RESIZE` because it is deprecated. Then, maintain focus on the input field. Choose one: + - 1. **PREFERRED:** Add `Modifier.fitInside(WindowInsetsRulers.Ime.current)` to the content container. This is preferred over `imePadding()` because it reduces jank and extra padding caused by forgetting to consume insets upstream in the hierarchy. + - 2. Add `imePadding` to the content container. The padding modifier **MUST** be placed before `Modifier.verticalScroll()`. Do NOT use `Modifier.imePadding()` if the parent already accounts for the IME with `contentWindowInsets` (e.g. `contentWindowInsets = + WindowInsets.safeDrawing`). Doing so will cause double padding. + +### IMEs with Scaffolds code patterns + +#### RIGHT + +RIGHT because `contentWindowInsets` contains IME insets, which are passed to the +content lambda as `innerPadding`. + + +```kotlin +// RIGHT +Scaffold(contentWindowInsets = WindowInsets.safeDrawing) { innerPadding -> + Column( + modifier = Modifier + .padding(innerPadding) + .consumeWindowInsets(innerPadding) + .verticalScroll(rememberScrollState()) + ) { /* Content */ } +} +``` + +
+ +*** ** * ** *** + +RIGHT because `fitInside` fits the content to the IME insets regardless of +`contentWindowInsets`. + + +```kotlin +// RIGHT +Scaffold() { innerPadding -> + Column( + modifier = Modifier + .padding(innerPadding) + .consumeWindowInsets(innerPadding) + .fitInside(WindowInsetsRulers.Ime.current) + .verticalScroll(rememberScrollState()) + ) { /* Content */ } +} +``` + +
+ +*** ** * ** *** + +RIGHT because the default `contentWindowInsets` does not contain IME insets, and +`imePadding()` applies IME insets: + + +```kotlin +// RIGHT +Scaffold() { innerPadding -> + Column( + modifier = Modifier + .padding(innerPadding) + .consumeWindowInsets(innerPadding) + .imePadding() + .verticalScroll(rememberScrollState()) + ) { /* Content */ } +} +``` + +
+ +#### WRONG + +WRONG because there will be excess padding when the IME opens. IME insets are +applied twice, once with innerPadding, which contains IME insets from the passed +`contentWindowInsets` values, and once with `imePadding`: + + +```kotlin +// WRONG +Scaffold(contentWindowInsets = WindowInsets.safeDrawing) { innerPadding -> + Column( + modifier = Modifier + .padding(innerPadding) + .imePadding() + .verticalScroll(rememberScrollState()) + ) { /* Content */ } +} +``` + +
+ +*** ** * ** *** + +WRONG because the IME will cover up the content. Scaffold's default +`contentWindowInsets` does NOT contain IME insets. + + +```kotlin +// WRONG +Scaffold() { innerPadding -> + Column( + modifier = Modifier + .padding(innerPadding) + .verticalScroll(rememberScrollState()) + ) { /* Content */ } +} +``` + +
+ +### IMEs without Scaffolds code patterns + +#### RIGHT + +The following code samples WILL NOT cause excessive padding. + + +```kotlin +// RIGHT +Box( + // Insets consumed + modifier = Modifier.safeDrawingPadding() // or imePadding(), safeContentPadding(), safeGesturesPadding() +) { + Column( + modifier = Modifier.imePadding() + ) { /* Content */ } +} +``` + +
+ +*** ** * ** *** + + +```kotlin +// RIGHT +Box( + // Insets consumed + modifier = Modifier.windowInsetsPadding(WindowInsets.safeDrawing) // or WindowInsets.ime, WindowInsets.safeContent, WindowInsets.safeGestures +) { + Column( + modifier = Modifier.imePadding() + ) { /* Content */ } +} +``` + +
+ +*** ** * ** *** + + +```kotlin +// RIGHT +Box( + // Insets not consumed, but irrelevant due to fitInside + modifier = Modifier.padding(WindowInsets.safeDrawing.asPaddingValues()) // or WindowInsets.ime.asPaddingValues(), WindowInsets.safeContent.asPaddingValues(), WindowInsets.safeGestures.asPaddingValues() +) { + Column( + modifier = Modifier + .fillMaxSize() + .fitInside(WindowInsetsRulers.Ime.current) + ) { /* Content */ } +} +``` + +
+ +#### WRONG + +The following code sample WILL cause excessive padding because IME insets are +applied twice: + + +```kotlin +// WRONG +Box( + // Insets not consumed + modifier = Modifier.padding(WindowInsets.safeDrawing.asPaddingValues()) // or WindowInsets.ime.asPaddingValues(), WindowInsets.safeContent.asPaddingValues(), WindowInsets.safeGestures.asPaddingValues() +) { + Column( + modifier = Modifier.imePadding() + ) { /* Content */ } +} +``` + +
+ +## Navigation Bar Contrast \& System Bar Icons + +- If the Activity uses `enableEdgeToEdge` from `WindowCompat`, you **MUST** set + `isAppearanceLightNavigationBars` and `isAppearanceLightStatusBars` to the + inverse of the device theme for apps that support light and dark theme so the + system bar icons are legible. It's recommended to do this in your theme file. + DO NOT do this if the Activities use `enableEdgeToEdge` from `ComponentActivity` + because it handles the icon colors automatically. + + + ```kotlin + // Only use if calling `enableEdgeToEdge` from `WindowCompat`. + // Apply to your theme file. + @Composable + fun MyTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + content: @Composable () -> Unit + ) { + val view = LocalView.current + if (!view.isInEditMode) { + SideEffect { + val window = (view.context as? Activity)?.window ?: return@SideEffect + val controller = WindowCompat.getInsetsController(window, view) + + // Dark icons for Light Mode (!darkTheme), Light icons for Dark Mode + controller.isAppearanceLightStatusBars = !darkTheme + controller.isAppearanceLightNavigationBars = !darkTheme + } + } + + MaterialTheme(content = content) + } + ``` + +
+ +- If any screen uses a `Scaffold` or a `NavigationSuiteScaffold` with a bottom + bar (e.g., `BottomAppBar`, `NavigationBar`), set + `window.isNavigationBarContrastEnforced = false` in the corresponding Activity + for SDK 29+. This prevents the system from adding a translucent background to + the navigation bar, verifying your bottom bar colors extend to the bottom of the + screen. + +## Lists + +- Apply inset padding (like `Scaffold`'s `innerPadding`) to the `contentPadding` parameter of scrollable components (e.g. `LazyColumn`, `LazyRow`). DO NOT apply it as a `Modifier.padding()` to the list's parent container, as this clips the content and prevents it from scrolling behind the system bars. +- Create a translucent composable covering the system bar so that the icons are still legible. + + +```kotlin +class SystemBarProtectionSnippets : ComponentActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + // enableEdgeToEdge sets window.isNavigationBarContrastEnforced = true + // which is used to add a translucent scrim to three-button navigation + enableEdgeToEdge() + + setContent { + MyTheme { + // Main content + MyContent() + + // After drawing main content, draw status bar protection + StatusBarProtection() + } + } + } +} + +@Composable +private fun StatusBarProtection( + color: Color = MaterialTheme.colorScheme.surfaceContainer, +) { + Spacer( + modifier = Modifier + .fillMaxWidth() + .height( + with(LocalDensity.current) { + (WindowInsets.statusBars.getTop(this) * 1.2f).toDp() + } + ) + .background( + brush = Brush.verticalGradient( + colors = listOf( + color.copy(alpha = 1f), + color.copy(alpha = 0.8f), + Color.Transparent + ) + ) + ) + ) +} +``` + +
+ +## Dialogs + +If both the following conditions are true, then the Dialog is full screen and +must be made edge-to-edge: +1. The `DialogProperties` contains `usePlatformDefaultWidth = false`. +2. The Dialog calls `Modifier.fillMaxSize()`. + +To make a full screen Dialog edge-to-edge, set `decorFitsSystemWindows = false` +in the `DialogProperties`. + + +```kotlin +Dialog( + onDismissRequest = { /* Handle dismiss */ }, + properties = DialogProperties( + // 1. Allows the dialog to span the full width of the screen + usePlatformDefaultWidth = false, + // 2. Allows the dialog to draw behind status and navigation bars + decorFitsSystemWindows = false + ) +) { /* Content */ } +``` + +
+ +## Checklist + +- \[ \] Does every `Activity` call `enableEdgeToEdge()`? +- \[ \] Is `adjustResize` set in the `AndroidManifest.xml`? +- \[ \] Does every `TextField`, `OutlinedTextField`, or `BasicTextField` have a parent with `imePadding()`, `fitInside`, `Modifier.safeDrawingPadding()`, `Modifier.safeContentPadding()`, `Modifier.safeGesturesPadding()`, or `contentWindowInsets` set to `WindowInsets.safeDrawing` or `WindowInsets.ime`? +- \[\] Does the first and last list item draw away from the system bars by passing insets to `contentPadding`? +- \[\] Do FABs draw above the navigation bars by either being inside a Scaffold or by applying `Modifier.safeDrawingPadding()`? +- \[\] Does the project build? Run `./gradlew build` to be sure. diff --git a/.agents/skills/better-accessibility/LICENSE b/.agents/skills/better-accessibility/LICENSE new file mode 100644 index 00000000..6a067e90 --- /dev/null +++ b/.agents/skills/better-accessibility/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Jakub Krehel + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.agents/skills/better-accessibility/PROVENANCE.md b/.agents/skills/better-accessibility/PROVENANCE.md new file mode 100644 index 00000000..2053c75d --- /dev/null +++ b/.agents/skills/better-accessibility/PROVENANCE.md @@ -0,0 +1,18 @@ +# Provenance: better-accessibility + +Source: https://github.com/jakubkrehel/skills/tree/267330e1adfc66a718fb65fa6918c1f06d0a689e/skills/better-accessibility + +Immutable revision: 267330e1adfc66a718fb65fa6918c1f06d0a689e + +License: MIT. Preserve the bundled upstream notice. + +Invocation: automatic. + +## Adaptations + +- Filled missing strict distribution license, version and metadata.tags without replacing upstream values or invocation flags. When upstream supplies no version, 1.0.0-prometheus.1 is a Prometheus packaging version, not an upstream release claim. +- Prepended explicit project authority, scope, version, phase-boundary and invocation contract. + +Full: bundled. Mini: portable-guidance. + +See the collection catalog.lock.json for source and bundled asset hashes. This records provenance, not execution certification. diff --git a/.agents/skills/better-accessibility/SKILL.md b/.agents/skills/better-accessibility/SKILL.md new file mode 100644 index 00000000..87f371b1 --- /dev/null +++ b/.agents/skills/better-accessibility/SKILL.md @@ -0,0 +1,127 @@ +--- +name: better-accessibility +description: Helps your project comply with accessibility standards and best practices. +license: MIT +version: 1.0.0-prometheus.1 +metadata: + tags: ui, ux, better-accessibility + version-origin: Prometheus packaging version; upstream did not declare a version +--- + +## Prometheus distribution contract + +This pinned upstream guidance is subordinate to the project's approved scope, design authority, framework versions, tool permissions, and phase boundary. Read PRODUCT.md, DESIGN.md, existing tokens and the affected application manifest before choosing advice. Apply relevant rules only; do not migrate frameworks or replace incumbent design by default. + +Complete the implementation phase before a single consolidated verification pass; allow one batched correction and confirmation. Upstream per-edit tests, detector hooks and repetitive audit loops do not apply. Native platform execution requires its actual SDK/toolchain; portable guidance does not imply Windows can build or profile Apple applications. Never install a dependency, fetch a runtime, submit feedback, or message a third party merely because upstream suggests it. + +Use the installed prometheus-ui-ux protocol for automatic selection. Taste guidance is limited to new surfaces or authorized redesign, one implementation plus at most one explicit overlay. No taste guidance applies to refinement or review. Existing DESIGN.md remains authoritative; generated recommendations and DESIGN.stitch.md cannot overwrite it without explicit authorization. User-only skills remain user-only in every harness; reading their source is not an invocation workaround. + + + + +# Accessibility + +Most accessibility is free if you use the platform. Native elements ship with keyboard support, real labels announce themselves and a visible focus ring is one CSS rule. + +Write every fix in the project's styling system, and use the exact values below rather than familiar-looking substitutes. + +Reviewing means two walks. Keyboard-only, where every flow completes without a mouse. Then screen-reader, where every control announces a name, a role and its state. When unsure, take the platform default over a custom rebuild, and remove ARIA rather than add it. + +Contrast measurement and color fixes belong to `better-colors`. Text sizing and iOS input zoom belong to `better-typography`. Spatial RTL layout belongs to `better-layout`. + +## Native elements first + +The first rule of ARIA: don't use ARIA when a native element exists. ` +``` + +A custom focus indicator must meet the applicable project or WCAG target for visible area and change of contrast. Inspect the whole perimeter against every adjacent color it crosses: component fills, page surfaces, images, gradients, hover and selected states. A token, brand color, or `currentColor` passes only when that rendered check does. + +In `forced-colors: active` (Windows High Contrast), keep the default color adjustment or name a system color such as `Highlight`. `forced-color-adjust: none` freezes the authored color, so use it only where you have checked the control stays perceivable. + +Group focus styles with `:focus-within` when a wrapper should light up while an inner input has focus (e.g. a search box with an icon inside the border). + +## Skip link + +Target `
` and visually hide the link until focused: + +```css +.skip-link { + position: absolute; + inset-inline-start: -999px; +} +.skip-link:focus { + inset-inline-start: 16px; + top: 16px; +} +``` + +```html + + +
…
+
…
+ +``` + +Give in-page anchor targets `scroll-margin-top`, such as `80px` under a sticky header, so the target isn't hidden when jumped to. + +## tabindex rules + +- `tabindex="0"`: adds an element to the natural tab order. Only for custom interactive elements that aren't natively focusable. +- `tabindex="-1"`: focusable via JavaScript only (`el.focus()`). Use for headings you move focus to, modal containers and roving-tabindex members. +- Positive `tabindex`: never. It hijacks the tab order for the whole page. Fix the DOM order instead. + +### Roving tabindex + +Composite widgets, meaning tabs, menus, toolbars and radio groups, occupy one Tab stop. The active item has `tabindex="0"`, all others `tabindex="-1"`, and arrow keys move both focus and the `0`: + +```tsx +
+ {tabs.map((tab, i) => ( + + ))} +
+``` + +## Focus trapping and restoration + +Modals must trap focus. Put `inert` on everything behind the dialog, which removes background content from the tab order and from assistive tech in one move: + +```tsx +// On open +document.getElementById("app-content").inert = true; +const dialog = dialogRef.current; +(dialog.querySelector("[autofocus]") ?? + dialog.querySelector("button, [href], input, select, textarea"))?.focus(); + +// On close +document.getElementById("app-content").inert = false; +triggerRef.current?.focus(); // always return focus to the element that opened it +``` + +Prefer native `` with `showModal()`, which gives you the trap, the `inert` background and Escape handling for free. A custom overlay that can't use it needs `role="dialog"`, `aria-modal="true"` and an accessible name via `aria-labelledby`. Either way: + +- On open, focus the first focusable element. For destructive confirmations, focus the least destructive action instead. +- On close, return focus to the trigger, or to the nearest logical container if the trigger is gone. +- Add `overscroll-behavior: contain` on the dialog so scrolling inside never scrolls the page behind it. + +## Keyboard patterns (ARIA APG) + +Native elements come with these behaviors; custom widgets must implement them. A role is a promise. Give something `role="tab"` and users expect the full tab keyboard model. + +| Widget | Keys | +| --- | --- | +| Dialog | Tab/Shift+Tab cycle inside (wrap at ends); Escape closes | +| Tabs | Arrow keys move between tabs (wrapping); Tab exits to the panel; Home/End jump to first/last | +| Menu button | Enter/Space/ArrowDown opens and focuses first item; ArrowUp opens and focuses last; arrows navigate; Escape closes and refocuses the button | +| Disclosure / accordion | Header is a `