@skyroc/scripts 2.5.1 → 2.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/cli.mjs +1 -1
- package/dist/{config-BKkdncJS.mjs → config-Cj9IzlRz.mjs} +105 -5
- package/dist/index.mjs +1 -1
- package/package.json +3 -3
- package/templates/admin/package.json +5 -1
- package/templates/admin/src/assets/svg-icon/logo.svg +1 -1
- package/templates/admin/uno.config.ts +1 -1
- package/templates/admin-root/.agents/skills/component-doc/SKILL.md +304 -0
- package/templates/admin-root/.agents/skills/component-refactoring/SKILL.md +483 -0
- package/templates/admin-root/.agents/skills/component-refactoring/references/complexity-patterns.md +493 -0
- package/templates/admin-root/.agents/skills/component-refactoring/references/component-splitting.md +477 -0
- package/templates/admin-root/.agents/skills/component-refactoring/references/hook-extraction.md +317 -0
- package/templates/admin-root/.agents/skills/doc-coauthoring/SKILL.md +375 -0
- package/templates/admin-root/.agents/skills/feature-dev/SKILL.md +78 -0
- package/templates/admin-root/.agents/skills/frontend-code-review/SKILL.md +73 -0
- package/templates/admin-root/.agents/skills/frontend-code-review/references/business-logic.md +15 -0
- package/templates/admin-root/.agents/skills/frontend-code-review/references/code-quality.md +44 -0
- package/templates/admin-root/.agents/skills/frontend-code-review/references/performance.md +45 -0
- package/templates/admin-root/.agents/skills/frontend-design/LICENSE.txt +177 -0
- package/templates/admin-root/.agents/skills/frontend-design/SKILL.md +42 -0
- package/templates/admin-root/.agents/skills/frontend-testing/SKILL.md +325 -0
- package/templates/admin-root/.agents/skills/frontend-testing/assets/component-test.template.tsx +293 -0
- package/templates/admin-root/.agents/skills/frontend-testing/assets/hook-test.template.ts +207 -0
- package/templates/admin-root/.agents/skills/frontend-testing/assets/utility-test.template.ts +154 -0
- package/templates/admin-root/.agents/skills/frontend-testing/references/async-testing.md +345 -0
- package/templates/admin-root/.agents/skills/frontend-testing/references/checklist.md +205 -0
- package/templates/admin-root/.agents/skills/frontend-testing/references/common-patterns.md +449 -0
- package/templates/admin-root/.agents/skills/frontend-testing/references/domain-components.md +523 -0
- package/templates/admin-root/.agents/skills/frontend-testing/references/mocking.md +512 -0
- package/templates/admin-root/.agents/skills/frontend-testing/references/workflow.md +269 -0
- package/templates/admin-root/.agents/skills/migrate-nativewind-to-uniwind/SKILL.md +734 -0
- package/templates/admin-root/.agents/skills/migrate-oxfmt/SKILL.md +202 -0
- package/templates/admin-root/.agents/skills/migrate-oxlint/SKILL.md +196 -0
- package/templates/admin-root/.agents/skills/native-component-doc/SKILL.md +245 -0
- package/templates/admin-root/.agents/skills/senior-frontend/SKILL.md +209 -0
- package/templates/admin-root/.agents/skills/senior-frontend/references/frontend_best_practices.md +103 -0
- package/templates/admin-root/.agents/skills/senior-frontend/references/nextjs_optimization_guide.md +103 -0
- package/templates/admin-root/.agents/skills/senior-frontend/references/react_patterns.md +103 -0
- package/templates/admin-root/.agents/skills/senior-frontend/scripts/bundle_analyzer.py +114 -0
- package/templates/admin-root/.agents/skills/senior-frontend/scripts/component_generator.py +114 -0
- package/templates/admin-root/.agents/skills/senior-frontend/scripts/frontend_scaffolder.py +114 -0
- package/templates/admin-root/.agents/skills/skill-creator/SKILL.md +355 -0
- package/templates/admin-root/.agents/skills/skill-creator/references/output-patterns.md +86 -0
- package/templates/admin-root/.agents/skills/skill-creator/references/workflows.md +28 -0
- package/templates/admin-root/.agents/skills/skill-creator/scripts/init_skill.py +300 -0
- package/templates/admin-root/.agents/skills/skill-creator/scripts/package_skill.py +110 -0
- package/templates/admin-root/.agents/skills/skill-creator/scripts/quick_validate.py +97 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/SKILL.md +163 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/acceptance-checklist.md +75 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/evidence-order.md +109 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/prd-rules.md +103 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/references/prototype-rules.md +85 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/scripts/verify-prototypes.mjs +144 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/templates/admin-page.html +771 -0
- package/templates/admin-root/.agents/skills/skyroc-admin-prd-prototype/templates/prd.md +182 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/SKILL.md +292 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/charts.csv +26 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/colors.csv +97 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/icons.csv +101 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/landing.csv +31 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/products.csv +97 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/styles.csv +68 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/typography.csv +58 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/scripts/core.py +253 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
- package/templates/admin-root/.agents/skills/ui-ux-pro-max/scripts/search.py +114 -0
- package/templates/admin-root/.agents/skills/uniwind/SKILL.md +64 -0
- package/templates/admin-root/.agents/skills/uniwind/references/component-bindings.md +338 -0
- package/templates/admin-root/.agents/skills/uniwind/references/css-and-utilities.md +325 -0
- package/templates/admin-root/.agents/skills/uniwind/references/integrations.md +75 -0
- package/templates/admin-root/.agents/skills/uniwind/references/pro.md +354 -0
- package/templates/admin-root/.agents/skills/uniwind/references/setup.md +144 -0
- package/templates/admin-root/.agents/skills/uniwind/references/styling-patterns.md +237 -0
- package/templates/admin-root/.agents/skills/uniwind/references/theming.md +309 -0
- package/templates/admin-root/.agents/skills/uniwind/references/troubleshooting.md +179 -0
- package/templates/admin-root/.agents/skills/uniwind/references/variants-and-selectors.md +224 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/AGENTS.md +2934 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/SKILL.md +136 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/templates/admin-root/.agents/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/templates/admin-root/.claude/settings.json +5 -0
- package/templates/admin-root/.claude/skills/component-doc/SKILL.md +304 -0
- package/templates/admin-root/.claude/skills/component-refactoring/SKILL.md +483 -0
- package/templates/admin-root/.claude/skills/component-refactoring/references/complexity-patterns.md +493 -0
- package/templates/admin-root/.claude/skills/component-refactoring/references/component-splitting.md +477 -0
- package/templates/admin-root/.claude/skills/component-refactoring/references/hook-extraction.md +317 -0
- package/templates/admin-root/.claude/skills/doc-coauthoring/SKILL.md +375 -0
- package/templates/admin-root/.claude/skills/feature-dev/SKILL.md +78 -0
- package/templates/admin-root/.claude/skills/frontend-code-review/SKILL.md +73 -0
- package/templates/admin-root/.claude/skills/frontend-code-review/references/business-logic.md +15 -0
- package/templates/admin-root/.claude/skills/frontend-code-review/references/code-quality.md +44 -0
- package/templates/admin-root/.claude/skills/frontend-code-review/references/performance.md +45 -0
- package/templates/admin-root/.claude/skills/frontend-design/LICENSE.txt +177 -0
- package/templates/admin-root/.claude/skills/frontend-design/SKILL.md +42 -0
- package/templates/admin-root/.claude/skills/frontend-testing/SKILL.md +325 -0
- package/templates/admin-root/.claude/skills/frontend-testing/assets/component-test.template.tsx +293 -0
- package/templates/admin-root/.claude/skills/frontend-testing/assets/hook-test.template.ts +207 -0
- package/templates/admin-root/.claude/skills/frontend-testing/assets/utility-test.template.ts +154 -0
- package/templates/admin-root/.claude/skills/frontend-testing/references/async-testing.md +345 -0
- package/templates/admin-root/.claude/skills/frontend-testing/references/checklist.md +205 -0
- package/templates/admin-root/.claude/skills/frontend-testing/references/common-patterns.md +449 -0
- package/templates/admin-root/.claude/skills/frontend-testing/references/domain-components.md +523 -0
- package/templates/admin-root/.claude/skills/frontend-testing/references/mocking.md +512 -0
- package/templates/admin-root/.claude/skills/frontend-testing/references/workflow.md +269 -0
- package/templates/admin-root/.claude/skills/migrate-nativewind-to-uniwind +1 -0
- package/templates/admin-root/.claude/skills/native-component-doc/SKILL.md +245 -0
- package/templates/admin-root/.claude/skills/senior-frontend/SKILL.md +209 -0
- package/templates/admin-root/.claude/skills/senior-frontend/references/frontend_best_practices.md +103 -0
- package/templates/admin-root/.claude/skills/senior-frontend/references/nextjs_optimization_guide.md +103 -0
- package/templates/admin-root/.claude/skills/senior-frontend/references/react_patterns.md +103 -0
- package/templates/admin-root/.claude/skills/senior-frontend/scripts/bundle_analyzer.py +114 -0
- package/templates/admin-root/.claude/skills/senior-frontend/scripts/component_generator.py +114 -0
- package/templates/admin-root/.claude/skills/senior-frontend/scripts/frontend_scaffolder.py +114 -0
- package/templates/admin-root/.claude/skills/skill-creator/SKILL.md +355 -0
- package/templates/admin-root/.claude/skills/skill-creator/references/output-patterns.md +86 -0
- package/templates/admin-root/.claude/skills/skill-creator/references/workflows.md +28 -0
- package/templates/admin-root/.claude/skills/skill-creator/scripts/init_skill.py +300 -0
- package/templates/admin-root/.claude/skills/skill-creator/scripts/package_skill.py +110 -0
- package/templates/admin-root/.claude/skills/skill-creator/scripts/quick_validate.py +97 -0
- package/templates/admin-root/.claude/skills/ui-ux-pro-max/SKILL.md +386 -0
- package/templates/admin-root/.claude/skills/ui-ux-pro-max/data +1 -0
- package/templates/admin-root/.claude/skills/ui-ux-pro-max/scripts +1 -0
- package/templates/admin-root/.claude/skills/uniwind +1 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/AGENTS.md +2934 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/SKILL.md +136 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/advanced-init-once.md +42 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/advanced-use-latest.md +39 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-api-routes.md +38 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-defer-await.md +80 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-dependencies.md +51 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-parallel.md +28 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-conditional.md +31 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/bundle-preload.md +50 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-event-listeners.md +74 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/client-swr-dedup.md +56 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +107 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-cache-function-results.md +80 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-cache-property-access.md +28 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-cache-storage.md +70 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-combine-iterations.md +32 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-early-exit.md +50 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-index-maps.md +37 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-length-check-first.md +49 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-min-max-loop.md +82 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-activity.md +26 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-hydration-suppress-warning.md +30 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rendering-usetransition-loading.md +75 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-dependencies.md +45 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state-no-effect.md +40 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-derived-state.md +29 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-memo-with-default-value.md +38 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-memo.md +44 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-move-effect-to-event.md +45 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +35 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-transitions.md +40 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/rerender-use-ref-transient-values.md +73 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-auth-actions.md +96 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-cache-lru.md +41 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-cache-react.md +76 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-dedup-props.md +65 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/templates/admin-root/.claude/skills/vercel-react-best-practices/rules/server-serialization.md +38 -0
- package/templates/admin-root/.cursor/settings.json +10 -0
- package/templates/admin-root/.editorconfig +19 -0
- package/templates/admin-root/.gitattributes +16 -0
- package/templates/admin-root/.oxfmtrc.json +35 -0
- package/templates/admin-root/AGENTS.md +297 -0
- package/templates/admin-root/CLAUDE.md +1 -0
- package/templates/admin-root/skills-lock.json +27 -0
- package/templates/admin-root.manifest.json +1317 -0
- package/templates/admin.meta.json +9 -4
- package/LICENSE +0 -21
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
## CSS Functions
|
|
2
|
+
|
|
3
|
+
Uniwind provides CSS functions for device-aware and theme-aware styling. These can be used everywhere (custom CSS classes, `@utility`, etc.) — but NOT inside `@theme {}` (which only accepts static values). Use `@utility` to create reusable Tailwind-style utility classes:
|
|
4
|
+
|
|
5
|
+
### hairlineWidth()
|
|
6
|
+
|
|
7
|
+
Returns the thinnest line width displayable on the device. Use for subtle borders and dividers.
|
|
8
|
+
|
|
9
|
+
```css
|
|
10
|
+
@utility h-hairline { height: hairlineWidth(); }
|
|
11
|
+
@utility border-hairline { border-width: hairlineWidth(); }
|
|
12
|
+
@utility w-hairline { width: calc(hairlineWidth() * 10); }
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
<View className="h-hairline bg-gray-300" />
|
|
17
|
+
<View className="border-hairline border-gray-200 rounded-lg p-4" />
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### fontScale(multiplier?)
|
|
21
|
+
|
|
22
|
+
Multiplies a base value by the device's font scale accessibility setting. Ensures text respects user preferences for larger or smaller text.
|
|
23
|
+
|
|
24
|
+
- **`fontScale()`** — uses multiplier 1 (device font scale × 1)
|
|
25
|
+
- **`fontScale(0.9)`** — smaller scale
|
|
26
|
+
- **`fontScale(1.2)`** — larger scale
|
|
27
|
+
|
|
28
|
+
```css
|
|
29
|
+
@utility text-sm-scaled { font-size: fontScale(0.9); }
|
|
30
|
+
@utility text-base-scaled { font-size: fontScale(); }
|
|
31
|
+
@utility text-lg-scaled { font-size: fontScale(1.2); }
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
<Text className="text-sm-scaled text-gray-600">Small accessible text</Text>
|
|
36
|
+
<Text className="text-base-scaled">Regular accessible text</Text>
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### pixelRatio(multiplier?)
|
|
40
|
+
|
|
41
|
+
Multiplies a value by the device's pixel ratio. Creates pixel-perfect designs that scale across screen densities.
|
|
42
|
+
|
|
43
|
+
- **`pixelRatio()`** — uses multiplier 1 (device pixel ratio × 1)
|
|
44
|
+
- **`pixelRatio(2)`** — double the pixel ratio
|
|
45
|
+
|
|
46
|
+
```css
|
|
47
|
+
@utility w-icon { width: pixelRatio(); }
|
|
48
|
+
@utility w-avatar { width: pixelRatio(2); }
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
```tsx
|
|
52
|
+
<Image source={{ uri: 'avatar.png' }} className="w-avatar rounded-full" />
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### light-dark(lightValue, darkValue)
|
|
56
|
+
|
|
57
|
+
Returns different values based on the current theme mode. Automatically adapts when the theme changes — no manual switching logic needed.
|
|
58
|
+
|
|
59
|
+
- First parameter: value for light theme
|
|
60
|
+
- Second parameter: value for dark theme
|
|
61
|
+
|
|
62
|
+
```css
|
|
63
|
+
@utility bg-adaptive { background-color: light-dark(#ffffff, #1f2937); }
|
|
64
|
+
@utility text-adaptive { color: light-dark(#111827, #f9fafb); }
|
|
65
|
+
@utility border-adaptive { border-color: light-dark(#e5e7eb, #374151); }
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
```tsx
|
|
69
|
+
<View className="bg-adaptive border-adaptive border rounded-lg p-4">
|
|
70
|
+
<Text className="text-adaptive">Adapts to light/dark theme</Text>
|
|
71
|
+
</View>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Also works in custom CSS classes (not just `@utility`):
|
|
75
|
+
|
|
76
|
+
```css
|
|
77
|
+
.adaptive-card {
|
|
78
|
+
background-color: light-dark(#ffffff, #1f2937);
|
|
79
|
+
color: light-dark(#111827, #f9fafb);
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Custom CSS & Utilities
|
|
84
|
+
|
|
85
|
+
### Custom CSS Classes
|
|
86
|
+
|
|
87
|
+
Uniwind supports custom CSS class names defined in `global.css`. They are compiled at build time — no runtime overhead. Use them when you need styles that are hard to express as Tailwind utilities (e.g., complex box-shadow, multi-property bundles).
|
|
88
|
+
|
|
89
|
+
```css
|
|
90
|
+
/* global.css */
|
|
91
|
+
.card-shadow {
|
|
92
|
+
background-color: white;
|
|
93
|
+
border-radius: 12px;
|
|
94
|
+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.adaptive-surface {
|
|
98
|
+
background-color: light-dark(#ffffff, #1f2937);
|
|
99
|
+
color: light-dark(#111827, #f9fafb);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.container {
|
|
103
|
+
flex: 1;
|
|
104
|
+
width: 100%;
|
|
105
|
+
max-width: 1200px;
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Apply via `className` just like any Tailwind class:
|
|
110
|
+
|
|
111
|
+
```tsx
|
|
112
|
+
<View className="card-shadow" />
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Mixing Custom CSS with Tailwind
|
|
116
|
+
|
|
117
|
+
You can combine custom CSS classes with Tailwind utilities in a single `className`:
|
|
118
|
+
|
|
119
|
+
```tsx
|
|
120
|
+
<View className="card-shadow p-4 m-2">
|
|
121
|
+
<Text className="adaptive-surface mb-2">{title}</Text>
|
|
122
|
+
<View className="container flex-row">{children}</View>
|
|
123
|
+
</View>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**WARNING**: If a custom CSS class and a Tailwind utility set the **same property**, you **MUST** use `cn()` to deduplicate. Without `cn()`, both values apply and the result is unpredictable:
|
|
127
|
+
|
|
128
|
+
```tsx
|
|
129
|
+
// WRONG — .container sets flex:1, and flex-1 also sets flex:1 (harmless but wasteful)
|
|
130
|
+
// WRONG — .container sets width:100%, and w-full also sets width:100% (redundant)
|
|
131
|
+
// DANGEROUS — .card-shadow sets border-radius:12px, and rounded-2xl sets border-radius:16px — CONFLICT!
|
|
132
|
+
<View className="card-shadow rounded-2xl" />
|
|
133
|
+
|
|
134
|
+
// CORRECT — cn ensures rounded-2xl wins
|
|
135
|
+
import { cn } from '@/lib/cn';
|
|
136
|
+
<View className={cn('card-shadow', 'rounded-2xl')} />
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**Rule of thumb**: If your custom CSS class sets properties that might overlap with Tailwind utilities you'll also use, always wrap with `cn()`. See **cn Utility** section for full setup.
|
|
140
|
+
|
|
141
|
+
### Guidelines for Custom CSS
|
|
142
|
+
|
|
143
|
+
- Keep selectors flat — no deep nesting or child selectors
|
|
144
|
+
- Prefer Tailwind utilities for simple, single-property styles
|
|
145
|
+
- Use custom classes for complex or multi-property bundles that would be verbose in className
|
|
146
|
+
- Use `light-dark()` for theme-aware custom classes
|
|
147
|
+
- Custom classes are great for shared design tokens that don't fit Tailwind's naming (e.g., `.card`, `.chip`, `.badge-dot`)
|
|
148
|
+
|
|
149
|
+
### Custom Utilities (@utility)
|
|
150
|
+
|
|
151
|
+
The `@utility` directive creates utility classes that work exactly like built-in Tailwind classes. Three main use cases:
|
|
152
|
+
|
|
153
|
+
#### 1. Variable-driven utilities (runtime-injected values)
|
|
154
|
+
|
|
155
|
+
Create a utility whose value comes from a CSS variable injected at runtime via `updateCSSVariables`. Use `@theme static` to declare the variable so Uniwind tracks it even before it is updated:
|
|
156
|
+
|
|
157
|
+
```css
|
|
158
|
+
/* global.css */
|
|
159
|
+
@theme static {
|
|
160
|
+
--header-height: 0px;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
@utility p-safe-header {
|
|
164
|
+
padding-top: var(--header-height);
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Inject the real value at runtime (e.g., from react-navigation's layout event):
|
|
169
|
+
|
|
170
|
+
```tsx
|
|
171
|
+
import { Uniwind } from 'uniwind'
|
|
172
|
+
|
|
173
|
+
// e.g., inside a navigation layout listener
|
|
174
|
+
Uniwind.updateCSSVariables(Uniwind.currentTheme, {
|
|
175
|
+
'--header-height': headerHeight,
|
|
176
|
+
})
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
```tsx
|
|
180
|
+
<View className="p-safe-header flex-1" />
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
#### 2. Brand-new utilities (no Tailwind equivalent)
|
|
184
|
+
|
|
185
|
+
For styles that have no built-in Tailwind class:
|
|
186
|
+
|
|
187
|
+
```css
|
|
188
|
+
@utility h-hairline { height: hairlineWidth(); }
|
|
189
|
+
@utility text-scaled { font-size: fontScale(); }
|
|
190
|
+
@utility card-shadow {
|
|
191
|
+
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Usage like any Tailwind class: `<View className="h-hairline card-shadow" />`
|
|
196
|
+
|
|
197
|
+
#### 3. Overriding existing Tailwind utilities
|
|
198
|
+
|
|
199
|
+
Use `@utility` to completely replace what a built-in class does. Example: make `border` always use `--color-primary`:
|
|
200
|
+
|
|
201
|
+
```css
|
|
202
|
+
@utility border {
|
|
203
|
+
border-width: 1px;
|
|
204
|
+
border-style: solid;
|
|
205
|
+
border-color: var(--color-primary);
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## @theme Directive
|
|
210
|
+
|
|
211
|
+
Customize Tailwind design tokens in `global.css`:
|
|
212
|
+
|
|
213
|
+
```css
|
|
214
|
+
@theme {
|
|
215
|
+
/* Colors */
|
|
216
|
+
--color-primary: #3b82f6;
|
|
217
|
+
--color-brand-500: #3b82f6;
|
|
218
|
+
--color-brand-900: #1e3a8a;
|
|
219
|
+
|
|
220
|
+
/* Typography */
|
|
221
|
+
--font-sans: 'Roboto-Regular';
|
|
222
|
+
--font-sans-medium: 'Roboto-Medium';
|
|
223
|
+
--font-sans-bold: 'Roboto-Bold';
|
|
224
|
+
--font-mono: 'FiraCode-Regular';
|
|
225
|
+
|
|
226
|
+
/* Spacing & sizing */
|
|
227
|
+
--text-base: 15px;
|
|
228
|
+
--spacing-4: 16px;
|
|
229
|
+
--radius-lg: 12px;
|
|
230
|
+
|
|
231
|
+
/* Breakpoints */
|
|
232
|
+
--breakpoint-tablet: 820px;
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Usage: `bg-brand-500`, `text-brand-900`, `font-sans`, `font-mono`, `rounded-lg`.
|
|
237
|
+
|
|
238
|
+
## Fonts
|
|
239
|
+
|
|
240
|
+
React Native requires a **single font** per family — no fallbacks:
|
|
241
|
+
|
|
242
|
+
```css
|
|
243
|
+
@theme {
|
|
244
|
+
--font-sans: 'Roboto-Regular';
|
|
245
|
+
--font-sans-bold: 'Roboto-Bold';
|
|
246
|
+
--font-mono: 'FiraCode-Regular';
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
Font name must **exactly match** the font file name (without extension).
|
|
251
|
+
|
|
252
|
+
**Expo**: Configure fonts in `app.json` with the `expo-font` plugin, then reference in CSS.
|
|
253
|
+
|
|
254
|
+
**Bare RN**: Use `react-native-asset` to link fonts, same CSS config.
|
|
255
|
+
|
|
256
|
+
**Platform-specific fonts** (use `@variant`, not `@media`):
|
|
257
|
+
|
|
258
|
+
```css
|
|
259
|
+
@layer theme {
|
|
260
|
+
:root {
|
|
261
|
+
@variant ios { --font-sans: 'SF Pro Text'; }
|
|
262
|
+
@variant android { --font-sans: 'Roboto-Regular'; }
|
|
263
|
+
@variant web { --font-sans: 'system-ui'; }
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## Gradients
|
|
269
|
+
|
|
270
|
+
Built-in support — no extra dependencies:
|
|
271
|
+
|
|
272
|
+
```tsx
|
|
273
|
+
<View className="bg-gradient-to-r from-red-500 via-yellow-500 to-green-500 p-4 rounded-lg">
|
|
274
|
+
<Text className="text-white font-bold">Gradient</Text>
|
|
275
|
+
</View>
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
For `expo-linear-gradient`, you can wrap it with `withUniwind` for className-based layout and styling (padding, border-radius, flex, etc.), but the `colors` prop is an array that cannot be resolved via className — it must be provided explicitly. Use `useCSSVariable` to get theme-aware colors:
|
|
279
|
+
|
|
280
|
+
```tsx
|
|
281
|
+
import { useCSSVariable } from 'uniwind';
|
|
282
|
+
import { withUniwind } from 'uniwind';
|
|
283
|
+
import { LinearGradient as RNLinearGradient } from 'expo-linear-gradient';
|
|
284
|
+
|
|
285
|
+
const LinearGradient = withUniwind(RNLinearGradient);
|
|
286
|
+
|
|
287
|
+
function GradientCard() {
|
|
288
|
+
// useCSSVariable returns string | number | undefined
|
|
289
|
+
const primary = useCSSVariable('--color-primary');
|
|
290
|
+
const secondary = useCSSVariable('--color-secondary');
|
|
291
|
+
|
|
292
|
+
// Guard against undefined — LinearGradient.colors requires valid ColorValues
|
|
293
|
+
if (!primary || !secondary) {
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return (
|
|
298
|
+
<LinearGradient
|
|
299
|
+
className="flex-1 rounded-2xl p-6"
|
|
300
|
+
colors={[primary as string, secondary as string]}
|
|
301
|
+
>
|
|
302
|
+
<Text className="text-white font-bold">Themed gradient</Text>
|
|
303
|
+
</LinearGradient>
|
|
304
|
+
);
|
|
305
|
+
}
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
Alternatively, export a wrapped component from a shared module for reuse:
|
|
309
|
+
|
|
310
|
+
```tsx
|
|
311
|
+
// components/styled.ts
|
|
312
|
+
import { withUniwind } from 'uniwind';
|
|
313
|
+
import { LinearGradient as RNLinearGradient } from 'expo-linear-gradient';
|
|
314
|
+
|
|
315
|
+
export const LinearGradient = withUniwind(RNLinearGradient);
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
```tsx
|
|
319
|
+
// usage — className handles layout, colors still passed manually
|
|
320
|
+
import { LinearGradient } from '@/components/styled';
|
|
321
|
+
|
|
322
|
+
<LinearGradient className="rounded-xl p-4" colors={['#ff6b6b', '#4ecdc4']}>
|
|
323
|
+
<Text className="text-white">Static gradient</Text>
|
|
324
|
+
</LinearGradient>
|
|
325
|
+
```
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
## React Navigation Integration
|
|
2
|
+
|
|
3
|
+
Use `useResolveClassNames` for screen options that only accept `style` objects:
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { useResolveClassNames } from 'uniwind';
|
|
7
|
+
|
|
8
|
+
function Layout() {
|
|
9
|
+
const headerStyle = useResolveClassNames('bg-background');
|
|
10
|
+
const headerTitleStyle = useResolveClassNames('text-foreground font-bold');
|
|
11
|
+
|
|
12
|
+
return (
|
|
13
|
+
<Stack.Navigator
|
|
14
|
+
screenOptions={{
|
|
15
|
+
headerStyle,
|
|
16
|
+
headerTitleStyle,
|
|
17
|
+
}}
|
|
18
|
+
/>
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Keep React Navigation's `<ThemeProvider>` if already in use — it manages navigation-specific theming.
|
|
24
|
+
|
|
25
|
+
## UI Kit Compatibility
|
|
26
|
+
|
|
27
|
+
- **HeroUI Native**: Works with Uniwind. Uses `tailwind-variants` (tv) internally. Apply `className` directly on HeroUI components. **Bun users**: Bun uses symlinks for `node_modules`, which can cause Tailwind's Oxide scanner to miss library classes in production builds. Fix: use the resolved path in `@source` and hoist the package:
|
|
28
|
+
```css
|
|
29
|
+
@source "../../node_modules/heroui-native/lib";
|
|
30
|
+
```
|
|
31
|
+
```ini
|
|
32
|
+
# .npmrc
|
|
33
|
+
public-hoist-pattern[]=heroui-native
|
|
34
|
+
```
|
|
35
|
+
- **react-native-reusables**: Compatible.
|
|
36
|
+
- **Gluestack v4.1+**: Compatible.
|
|
37
|
+
- **Lucide React Native**: Use `withUniwind(LucideIcon)` with `colorClassName="accent-blue-500"` for icon color. Works for all Lucide icons.
|
|
38
|
+
- **@shopify/flash-list**: Use `withUniwind(FlashList)` for `className` and `contentContainerClassName` support. Note: `withUniwind` loses generic type params on `ref` — cast manually if needed.
|
|
39
|
+
|
|
40
|
+
Use semantic color tokens (`bg-primary`, `text-foreground`) for theme consistency across UI kits.
|
|
41
|
+
|
|
42
|
+
## Supported vs Unsupported Classes
|
|
43
|
+
|
|
44
|
+
React Native uses the Yoga layout engine. Key differences from web CSS:
|
|
45
|
+
- **No CSS cascade/inheritance** — styles don't inherit from parents
|
|
46
|
+
- **Flexbox by default** — all views use flexbox with `flexDirection: 'column'`
|
|
47
|
+
- **Limited CSS properties** — no floats, grid, pseudo-elements
|
|
48
|
+
|
|
49
|
+
### Built-in Extra Utilities
|
|
50
|
+
|
|
51
|
+
Uniwind provides additional utility classes for React Native features not covered by standard Tailwind:
|
|
52
|
+
|
|
53
|
+
| Class | Effect |
|
|
54
|
+
|-------|--------|
|
|
55
|
+
| `border-continuous` | Sets `borderCurve: 'continuous'` — smooth, superellipse corners (iOS) |
|
|
56
|
+
| `border-circular` | Sets `borderCurve: 'circular'` — standard circular corners (iOS default) |
|
|
57
|
+
|
|
58
|
+
```tsx
|
|
59
|
+
// Smooth iOS-style rounded corners (like SwiftUI's .continuous)
|
|
60
|
+
<View className="rounded-2xl border-continuous bg-card p-4">
|
|
61
|
+
<Text className="text-foreground">Smooth corners</Text>
|
|
62
|
+
</View>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Supported (all standard Tailwind)
|
|
66
|
+
|
|
67
|
+
Layout, spacing, sizing, typography, colors, borders, effects, flexbox, positioning, transforms, interactive states.
|
|
68
|
+
|
|
69
|
+
### Unsupported (web-specific, silently ignored)
|
|
70
|
+
|
|
71
|
+
- `hover:` `visited:` — use Pressable `active:` instead
|
|
72
|
+
- `before:` `after:` `placeholder:` — pseudo-elements
|
|
73
|
+
- `float-*` `clear-*` `columns-*`
|
|
74
|
+
- `print:` `screen:`
|
|
75
|
+
- `break-before-*` `break-after-*` `break-inside-*`
|