@wazir-dev/cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +111 -0
- package/CHANGELOG.md +14 -0
- package/CONTRIBUTING.md +101 -0
- package/LICENSE +21 -0
- package/README.md +314 -0
- package/assets/composition-engine.mmd +34 -0
- package/assets/demo-script.sh +17 -0
- package/assets/logo-dark.svg +14 -0
- package/assets/logo.svg +14 -0
- package/assets/pipeline.mmd +39 -0
- package/assets/record-demo.sh +51 -0
- package/docs/README.md +51 -0
- package/docs/adapters/context-mode.md +60 -0
- package/docs/concepts/architecture.md +87 -0
- package/docs/concepts/artifact-model.md +60 -0
- package/docs/concepts/composition-engine.md +36 -0
- package/docs/concepts/indexing-and-recall.md +160 -0
- package/docs/concepts/observability.md +41 -0
- package/docs/concepts/roles-and-workflows.md +59 -0
- package/docs/concepts/terminology-policy.md +27 -0
- package/docs/getting-started/01-installation.md +78 -0
- package/docs/getting-started/02-first-run.md +102 -0
- package/docs/getting-started/03-adding-to-project.md +15 -0
- package/docs/getting-started/04-host-setup.md +15 -0
- package/docs/guides/ci-integration.md +15 -0
- package/docs/guides/creating-skills.md +15 -0
- package/docs/guides/expertise-module-authoring.md +15 -0
- package/docs/guides/hook-development.md +15 -0
- package/docs/guides/memory-and-learnings.md +34 -0
- package/docs/guides/multi-host-export.md +15 -0
- package/docs/guides/troubleshooting.md +101 -0
- package/docs/guides/writing-custom-roles.md +15 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-design.md +592 -0
- package/docs/plans/2026-03-15-cli-pipeline-integration-plan.md +598 -0
- package/docs/plans/2026-03-15-docs-enforcement-plan.md +238 -0
- package/docs/readmes/INDEX.md +99 -0
- package/docs/readmes/features/expertise/README.md +171 -0
- package/docs/readmes/features/exports/README.md +222 -0
- package/docs/readmes/features/hooks/README.md +103 -0
- package/docs/readmes/features/hooks/loop-cap-guard.md +133 -0
- package/docs/readmes/features/hooks/post-tool-capture.md +121 -0
- package/docs/readmes/features/hooks/post-tool-lint.md +130 -0
- package/docs/readmes/features/hooks/pre-compact-summary.md +122 -0
- package/docs/readmes/features/hooks/pre-tool-capture-route.md +100 -0
- package/docs/readmes/features/hooks/protected-path-write-guard.md +128 -0
- package/docs/readmes/features/hooks/session-start.md +119 -0
- package/docs/readmes/features/hooks/stop-handoff-harvest.md +125 -0
- package/docs/readmes/features/roles/README.md +157 -0
- package/docs/readmes/features/roles/clarifier.md +152 -0
- package/docs/readmes/features/roles/content-author.md +190 -0
- package/docs/readmes/features/roles/designer.md +193 -0
- package/docs/readmes/features/roles/executor.md +184 -0
- package/docs/readmes/features/roles/learner.md +210 -0
- package/docs/readmes/features/roles/planner.md +182 -0
- package/docs/readmes/features/roles/researcher.md +164 -0
- package/docs/readmes/features/roles/reviewer.md +184 -0
- package/docs/readmes/features/roles/specifier.md +162 -0
- package/docs/readmes/features/roles/verifier.md +215 -0
- package/docs/readmes/features/schemas/README.md +178 -0
- package/docs/readmes/features/skills/README.md +63 -0
- package/docs/readmes/features/skills/brainstorming.md +96 -0
- package/docs/readmes/features/skills/debugging.md +148 -0
- package/docs/readmes/features/skills/design.md +120 -0
- package/docs/readmes/features/skills/prepare-next.md +109 -0
- package/docs/readmes/features/skills/run-audit.md +159 -0
- package/docs/readmes/features/skills/scan-project.md +109 -0
- package/docs/readmes/features/skills/self-audit.md +176 -0
- package/docs/readmes/features/skills/tdd.md +137 -0
- package/docs/readmes/features/skills/using-skills.md +92 -0
- package/docs/readmes/features/skills/verification.md +120 -0
- package/docs/readmes/features/skills/writing-plans.md +104 -0
- package/docs/readmes/features/tooling/README.md +320 -0
- package/docs/readmes/features/workflows/README.md +186 -0
- package/docs/readmes/features/workflows/author.md +181 -0
- package/docs/readmes/features/workflows/clarify.md +154 -0
- package/docs/readmes/features/workflows/design-review.md +171 -0
- package/docs/readmes/features/workflows/design.md +169 -0
- package/docs/readmes/features/workflows/discover.md +162 -0
- package/docs/readmes/features/workflows/execute.md +173 -0
- package/docs/readmes/features/workflows/learn.md +167 -0
- package/docs/readmes/features/workflows/plan-review.md +165 -0
- package/docs/readmes/features/workflows/plan.md +170 -0
- package/docs/readmes/features/workflows/prepare-next.md +167 -0
- package/docs/readmes/features/workflows/review.md +169 -0
- package/docs/readmes/features/workflows/run-audit.md +191 -0
- package/docs/readmes/features/workflows/spec-challenge.md +159 -0
- package/docs/readmes/features/workflows/specify.md +160 -0
- package/docs/readmes/features/workflows/verify.md +177 -0
- package/docs/readmes/packages/README.md +50 -0
- package/docs/readmes/packages/ajv.md +117 -0
- package/docs/readmes/packages/context-mode.md +118 -0
- package/docs/readmes/packages/gray-matter.md +116 -0
- package/docs/readmes/packages/node-test.md +137 -0
- package/docs/readmes/packages/yaml.md +112 -0
- package/docs/reference/configuration-reference.md +159 -0
- package/docs/reference/expertise-index.md +52 -0
- package/docs/reference/git-flow.md +43 -0
- package/docs/reference/hooks.md +87 -0
- package/docs/reference/host-exports.md +50 -0
- package/docs/reference/launch-checklist.md +172 -0
- package/docs/reference/marketplace-listings.md +76 -0
- package/docs/reference/release-process.md +34 -0
- package/docs/reference/roles-reference.md +77 -0
- package/docs/reference/skills.md +33 -0
- package/docs/reference/templates.md +29 -0
- package/docs/reference/tooling-cli.md +94 -0
- package/docs/truth-claims.yaml +222 -0
- package/expertise/PROGRESS.md +63 -0
- package/expertise/README.md +18 -0
- package/expertise/antipatterns/PROGRESS.md +56 -0
- package/expertise/antipatterns/backend/api-design-antipatterns.md +1271 -0
- package/expertise/antipatterns/backend/auth-antipatterns.md +1195 -0
- package/expertise/antipatterns/backend/caching-antipatterns.md +622 -0
- package/expertise/antipatterns/backend/database-antipatterns.md +1038 -0
- package/expertise/antipatterns/backend/index.md +24 -0
- package/expertise/antipatterns/backend/microservices-antipatterns.md +850 -0
- package/expertise/antipatterns/code/architecture-antipatterns.md +919 -0
- package/expertise/antipatterns/code/async-antipatterns.md +622 -0
- package/expertise/antipatterns/code/code-smells.md +1186 -0
- package/expertise/antipatterns/code/dependency-antipatterns.md +1209 -0
- package/expertise/antipatterns/code/error-handling-antipatterns.md +1360 -0
- package/expertise/antipatterns/code/index.md +27 -0
- package/expertise/antipatterns/code/naming-and-abstraction.md +1118 -0
- package/expertise/antipatterns/code/state-management-antipatterns.md +1076 -0
- package/expertise/antipatterns/code/testing-antipatterns.md +1053 -0
- package/expertise/antipatterns/design/accessibility-antipatterns.md +1136 -0
- package/expertise/antipatterns/design/dark-patterns.md +1121 -0
- package/expertise/antipatterns/design/index.md +22 -0
- package/expertise/antipatterns/design/ui-antipatterns.md +1202 -0
- package/expertise/antipatterns/design/ux-antipatterns.md +680 -0
- package/expertise/antipatterns/frontend/css-layout-antipatterns.md +691 -0
- package/expertise/antipatterns/frontend/flutter-antipatterns.md +1827 -0
- package/expertise/antipatterns/frontend/index.md +23 -0
- package/expertise/antipatterns/frontend/mobile-antipatterns.md +573 -0
- package/expertise/antipatterns/frontend/react-antipatterns.md +1128 -0
- package/expertise/antipatterns/frontend/spa-antipatterns.md +1235 -0
- package/expertise/antipatterns/index.md +31 -0
- package/expertise/antipatterns/performance/index.md +20 -0
- package/expertise/antipatterns/performance/performance-antipatterns.md +1013 -0
- package/expertise/antipatterns/performance/premature-optimization.md +623 -0
- package/expertise/antipatterns/performance/scaling-antipatterns.md +785 -0
- package/expertise/antipatterns/process/ai-coding-antipatterns.md +853 -0
- package/expertise/antipatterns/process/code-review-antipatterns.md +656 -0
- package/expertise/antipatterns/process/deployment-antipatterns.md +920 -0
- package/expertise/antipatterns/process/index.md +23 -0
- package/expertise/antipatterns/process/technical-debt-antipatterns.md +647 -0
- package/expertise/antipatterns/security/index.md +20 -0
- package/expertise/antipatterns/security/secrets-antipatterns.md +849 -0
- package/expertise/antipatterns/security/security-theater.md +843 -0
- package/expertise/antipatterns/security/vulnerability-patterns.md +801 -0
- package/expertise/architecture/PROGRESS.md +70 -0
- package/expertise/architecture/data/caching-architecture.md +671 -0
- package/expertise/architecture/data/data-consistency.md +574 -0
- package/expertise/architecture/data/data-modeling.md +536 -0
- package/expertise/architecture/data/event-streams-and-queues.md +634 -0
- package/expertise/architecture/data/index.md +25 -0
- package/expertise/architecture/data/search-architecture.md +663 -0
- package/expertise/architecture/data/sql-vs-nosql.md +708 -0
- package/expertise/architecture/decisions/architecture-decision-records.md +640 -0
- package/expertise/architecture/decisions/build-vs-buy.md +616 -0
- package/expertise/architecture/decisions/index.md +23 -0
- package/expertise/architecture/decisions/monolith-to-microservices.md +790 -0
- package/expertise/architecture/decisions/technology-selection.md +616 -0
- package/expertise/architecture/distributed/cap-theorem-and-tradeoffs.md +800 -0
- package/expertise/architecture/distributed/circuit-breaker-bulkhead.md +741 -0
- package/expertise/architecture/distributed/consensus-and-coordination.md +796 -0
- package/expertise/architecture/distributed/distributed-systems-fundamentals.md +564 -0
- package/expertise/architecture/distributed/idempotency-and-retry.md +796 -0
- package/expertise/architecture/distributed/index.md +25 -0
- package/expertise/architecture/distributed/saga-pattern.md +797 -0
- package/expertise/architecture/foundations/architectural-thinking.md +460 -0
- package/expertise/architecture/foundations/coupling-and-cohesion.md +770 -0
- package/expertise/architecture/foundations/design-principles-solid.md +649 -0
- package/expertise/architecture/foundations/domain-driven-design.md +719 -0
- package/expertise/architecture/foundations/index.md +25 -0
- package/expertise/architecture/foundations/separation-of-concerns.md +472 -0
- package/expertise/architecture/foundations/twelve-factor-app.md +797 -0
- package/expertise/architecture/index.md +34 -0
- package/expertise/architecture/integration/api-design-graphql.md +638 -0
- package/expertise/architecture/integration/api-design-grpc.md +804 -0
- package/expertise/architecture/integration/api-design-rest.md +892 -0
- package/expertise/architecture/integration/index.md +25 -0
- package/expertise/architecture/integration/third-party-integration.md +795 -0
- package/expertise/architecture/integration/webhooks-and-callbacks.md +1152 -0
- package/expertise/architecture/integration/websockets-realtime.md +791 -0
- package/expertise/architecture/mobile-architecture/index.md +22 -0
- package/expertise/architecture/mobile-architecture/mobile-app-architecture.md +780 -0
- package/expertise/architecture/mobile-architecture/mobile-backend-for-frontend.md +670 -0
- package/expertise/architecture/mobile-architecture/offline-first.md +719 -0
- package/expertise/architecture/mobile-architecture/push-and-sync.md +782 -0
- package/expertise/architecture/patterns/cqrs-event-sourcing.md +717 -0
- package/expertise/architecture/patterns/event-driven.md +797 -0
- package/expertise/architecture/patterns/hexagonal-clean-architecture.md +870 -0
- package/expertise/architecture/patterns/index.md +27 -0
- package/expertise/architecture/patterns/layered-architecture.md +736 -0
- package/expertise/architecture/patterns/microservices.md +753 -0
- package/expertise/architecture/patterns/modular-monolith.md +692 -0
- package/expertise/architecture/patterns/monolith.md +626 -0
- package/expertise/architecture/patterns/plugin-architecture.md +735 -0
- package/expertise/architecture/patterns/serverless.md +780 -0
- package/expertise/architecture/scaling/database-scaling.md +615 -0
- package/expertise/architecture/scaling/feature-flags-and-rollouts.md +757 -0
- package/expertise/architecture/scaling/horizontal-vs-vertical.md +606 -0
- package/expertise/architecture/scaling/index.md +24 -0
- package/expertise/architecture/scaling/multi-tenancy.md +800 -0
- package/expertise/architecture/scaling/stateless-design.md +787 -0
- package/expertise/backend/embedded-firmware.md +625 -0
- package/expertise/backend/go.md +853 -0
- package/expertise/backend/index.md +24 -0
- package/expertise/backend/java-spring.md +448 -0
- package/expertise/backend/node-typescript.md +625 -0
- package/expertise/backend/python-fastapi.md +724 -0
- package/expertise/backend/rust.md +458 -0
- package/expertise/backend/solidity.md +711 -0
- package/expertise/composition-map.yaml +443 -0
- package/expertise/content/foundations/content-modeling.md +395 -0
- package/expertise/content/foundations/editorial-standards.md +449 -0
- package/expertise/content/foundations/index.md +24 -0
- package/expertise/content/foundations/microcopy.md +455 -0
- package/expertise/content/foundations/terminology-governance.md +509 -0
- package/expertise/content/index.md +34 -0
- package/expertise/content/patterns/accessibility-copy.md +518 -0
- package/expertise/content/patterns/index.md +24 -0
- package/expertise/content/patterns/notification-content.md +433 -0
- package/expertise/content/patterns/sample-content.md +486 -0
- package/expertise/content/patterns/state-copy.md +439 -0
- package/expertise/design/PROGRESS.md +58 -0
- package/expertise/design/disciplines/dark-mode-theming.md +577 -0
- package/expertise/design/disciplines/design-systems.md +595 -0
- package/expertise/design/disciplines/index.md +25 -0
- package/expertise/design/disciplines/information-architecture.md +800 -0
- package/expertise/design/disciplines/interaction-design.md +788 -0
- package/expertise/design/disciplines/responsive-design.md +552 -0
- package/expertise/design/disciplines/usability-testing.md +516 -0
- package/expertise/design/disciplines/user-research.md +792 -0
- package/expertise/design/foundations/accessibility-design.md +796 -0
- package/expertise/design/foundations/color-theory.md +797 -0
- package/expertise/design/foundations/iconography.md +795 -0
- package/expertise/design/foundations/index.md +26 -0
- package/expertise/design/foundations/motion-and-animation.md +653 -0
- package/expertise/design/foundations/rtl-design.md +585 -0
- package/expertise/design/foundations/spacing-and-layout.md +607 -0
- package/expertise/design/foundations/typography.md +800 -0
- package/expertise/design/foundations/visual-hierarchy.md +761 -0
- package/expertise/design/index.md +32 -0
- package/expertise/design/patterns/authentication-flows.md +474 -0
- package/expertise/design/patterns/content-consumption.md +789 -0
- package/expertise/design/patterns/data-display.md +618 -0
- package/expertise/design/patterns/e-commerce.md +1494 -0
- package/expertise/design/patterns/feedback-and-states.md +642 -0
- package/expertise/design/patterns/forms-and-input.md +819 -0
- package/expertise/design/patterns/gamification.md +801 -0
- package/expertise/design/patterns/index.md +31 -0
- package/expertise/design/patterns/microinteractions.md +449 -0
- package/expertise/design/patterns/navigation.md +800 -0
- package/expertise/design/patterns/notifications.md +705 -0
- package/expertise/design/patterns/onboarding.md +700 -0
- package/expertise/design/patterns/search-and-filter.md +601 -0
- package/expertise/design/patterns/settings-and-preferences.md +768 -0
- package/expertise/design/patterns/social-and-community.md +748 -0
- package/expertise/design/platforms/desktop-native.md +612 -0
- package/expertise/design/platforms/index.md +25 -0
- package/expertise/design/platforms/mobile-android.md +825 -0
- package/expertise/design/platforms/mobile-cross-platform.md +983 -0
- package/expertise/design/platforms/mobile-ios.md +699 -0
- package/expertise/design/platforms/tablet.md +794 -0
- package/expertise/design/platforms/web-dashboard.md +790 -0
- package/expertise/design/platforms/web-responsive.md +550 -0
- package/expertise/design/psychology/behavioral-nudges.md +449 -0
- package/expertise/design/psychology/cognitive-load.md +1191 -0
- package/expertise/design/psychology/error-psychology.md +778 -0
- package/expertise/design/psychology/index.md +22 -0
- package/expertise/design/psychology/persuasive-design.md +736 -0
- package/expertise/design/psychology/user-mental-models.md +623 -0
- package/expertise/design/tooling/open-pencil.md +266 -0
- package/expertise/frontend/angular.md +1073 -0
- package/expertise/frontend/desktop-electron.md +546 -0
- package/expertise/frontend/flutter.md +782 -0
- package/expertise/frontend/index.md +27 -0
- package/expertise/frontend/native-android.md +409 -0
- package/expertise/frontend/native-ios.md +490 -0
- package/expertise/frontend/react-native.md +1160 -0
- package/expertise/frontend/react.md +808 -0
- package/expertise/frontend/vue.md +1089 -0
- package/expertise/humanize/domain-rules-code.md +79 -0
- package/expertise/humanize/domain-rules-content.md +67 -0
- package/expertise/humanize/domain-rules-technical-docs.md +56 -0
- package/expertise/humanize/index.md +35 -0
- package/expertise/humanize/self-audit-checklist.md +87 -0
- package/expertise/humanize/sentence-patterns.md +218 -0
- package/expertise/humanize/vocabulary-blacklist.md +105 -0
- package/expertise/i18n/PROGRESS.md +65 -0
- package/expertise/i18n/advanced/accessibility-and-i18n.md +28 -0
- package/expertise/i18n/advanced/bidirectional-text-algorithm.md +38 -0
- package/expertise/i18n/advanced/complex-scripts.md +30 -0
- package/expertise/i18n/advanced/performance-and-i18n.md +27 -0
- package/expertise/i18n/advanced/testing-i18n.md +28 -0
- package/expertise/i18n/content/content-adaptation.md +23 -0
- package/expertise/i18n/content/locale-specific-formatting.md +23 -0
- package/expertise/i18n/content/machine-translation-integration.md +28 -0
- package/expertise/i18n/content/translation-management.md +29 -0
- package/expertise/i18n/foundations/date-time-calendars.md +67 -0
- package/expertise/i18n/foundations/i18n-architecture.md +272 -0
- package/expertise/i18n/foundations/locale-and-language-tags.md +79 -0
- package/expertise/i18n/foundations/numbers-currency-units.md +61 -0
- package/expertise/i18n/foundations/pluralization-and-gender.md +109 -0
- package/expertise/i18n/foundations/string-externalization.md +236 -0
- package/expertise/i18n/foundations/text-direction-bidi.md +241 -0
- package/expertise/i18n/foundations/unicode-and-encoding.md +86 -0
- package/expertise/i18n/index.md +38 -0
- package/expertise/i18n/platform/backend-i18n.md +31 -0
- package/expertise/i18n/platform/flutter-i18n.md +148 -0
- package/expertise/i18n/platform/native-android-i18n.md +36 -0
- package/expertise/i18n/platform/native-ios-i18n.md +36 -0
- package/expertise/i18n/platform/react-i18n.md +103 -0
- package/expertise/i18n/platform/web-css-i18n.md +81 -0
- package/expertise/i18n/rtl/arabic-specific.md +175 -0
- package/expertise/i18n/rtl/hebrew-specific.md +149 -0
- package/expertise/i18n/rtl/rtl-animations-and-transitions.md +111 -0
- package/expertise/i18n/rtl/rtl-forms-and-input.md +161 -0
- package/expertise/i18n/rtl/rtl-fundamentals.md +211 -0
- package/expertise/i18n/rtl/rtl-icons-and-images.md +181 -0
- package/expertise/i18n/rtl/rtl-layout-mirroring.md +252 -0
- package/expertise/i18n/rtl/rtl-navigation-and-gestures.md +107 -0
- package/expertise/i18n/rtl/rtl-testing-and-qa.md +147 -0
- package/expertise/i18n/rtl/rtl-typography.md +160 -0
- package/expertise/index.md +113 -0
- package/expertise/index.yaml +216 -0
- package/expertise/infrastructure/cloud-aws.md +597 -0
- package/expertise/infrastructure/cloud-gcp.md +599 -0
- package/expertise/infrastructure/cybersecurity.md +816 -0
- package/expertise/infrastructure/database-mongodb.md +447 -0
- package/expertise/infrastructure/database-postgres.md +400 -0
- package/expertise/infrastructure/devops-cicd.md +787 -0
- package/expertise/infrastructure/index.md +27 -0
- package/expertise/performance/PROGRESS.md +50 -0
- package/expertise/performance/backend/api-latency.md +1204 -0
- package/expertise/performance/backend/background-jobs.md +506 -0
- package/expertise/performance/backend/connection-pooling.md +1209 -0
- package/expertise/performance/backend/database-query-optimization.md +515 -0
- package/expertise/performance/backend/index.md +23 -0
- package/expertise/performance/backend/rate-limiting-and-throttling.md +971 -0
- package/expertise/performance/foundations/algorithmic-complexity.md +954 -0
- package/expertise/performance/foundations/caching-strategies.md +489 -0
- package/expertise/performance/foundations/concurrency-and-parallelism.md +847 -0
- package/expertise/performance/foundations/index.md +24 -0
- package/expertise/performance/foundations/measuring-and-profiling.md +440 -0
- package/expertise/performance/foundations/memory-management.md +964 -0
- package/expertise/performance/foundations/performance-budgets.md +1314 -0
- package/expertise/performance/index.md +31 -0
- package/expertise/performance/infrastructure/auto-scaling.md +1059 -0
- package/expertise/performance/infrastructure/cdn-and-edge.md +1081 -0
- package/expertise/performance/infrastructure/index.md +22 -0
- package/expertise/performance/infrastructure/load-balancing.md +1081 -0
- package/expertise/performance/infrastructure/observability.md +1079 -0
- package/expertise/performance/mobile/index.md +23 -0
- package/expertise/performance/mobile/mobile-animations.md +544 -0
- package/expertise/performance/mobile/mobile-memory-battery.md +416 -0
- package/expertise/performance/mobile/mobile-network.md +452 -0
- package/expertise/performance/mobile/mobile-rendering.md +599 -0
- package/expertise/performance/mobile/mobile-startup-time.md +505 -0
- package/expertise/performance/platform-specific/flutter-performance.md +647 -0
- package/expertise/performance/platform-specific/index.md +22 -0
- package/expertise/performance/platform-specific/node-performance.md +1307 -0
- package/expertise/performance/platform-specific/postgres-performance.md +1366 -0
- package/expertise/performance/platform-specific/react-performance.md +1403 -0
- package/expertise/performance/web/bundle-optimization.md +1239 -0
- package/expertise/performance/web/image-and-media.md +636 -0
- package/expertise/performance/web/index.md +24 -0
- package/expertise/performance/web/network-optimization.md +1133 -0
- package/expertise/performance/web/rendering-performance.md +1098 -0
- package/expertise/performance/web/ssr-and-hydration.md +918 -0
- package/expertise/performance/web/web-vitals.md +1374 -0
- package/expertise/quality/accessibility.md +985 -0
- package/expertise/quality/evidence-based-verification.md +499 -0
- package/expertise/quality/index.md +24 -0
- package/expertise/quality/ml-model-audit.md +614 -0
- package/expertise/quality/performance.md +600 -0
- package/expertise/quality/testing-api.md +891 -0
- package/expertise/quality/testing-mobile.md +496 -0
- package/expertise/quality/testing-web.md +849 -0
- package/expertise/security/PROGRESS.md +54 -0
- package/expertise/security/agentic-identity.md +540 -0
- package/expertise/security/compliance-frameworks.md +601 -0
- package/expertise/security/data/data-encryption.md +364 -0
- package/expertise/security/data/data-privacy-gdpr.md +692 -0
- package/expertise/security/data/database-security.md +1171 -0
- package/expertise/security/data/index.md +22 -0
- package/expertise/security/data/pii-handling.md +531 -0
- package/expertise/security/foundations/authentication.md +1041 -0
- package/expertise/security/foundations/authorization.md +603 -0
- package/expertise/security/foundations/cryptography.md +1001 -0
- package/expertise/security/foundations/index.md +25 -0
- package/expertise/security/foundations/owasp-top-10.md +1354 -0
- package/expertise/security/foundations/secrets-management.md +1217 -0
- package/expertise/security/foundations/secure-sdlc.md +700 -0
- package/expertise/security/foundations/supply-chain-security.md +698 -0
- package/expertise/security/index.md +31 -0
- package/expertise/security/infrastructure/cloud-security-aws.md +1296 -0
- package/expertise/security/infrastructure/cloud-security-gcp.md +1376 -0
- package/expertise/security/infrastructure/container-security.md +721 -0
- package/expertise/security/infrastructure/incident-response.md +1295 -0
- package/expertise/security/infrastructure/index.md +24 -0
- package/expertise/security/infrastructure/logging-and-monitoring.md +1618 -0
- package/expertise/security/infrastructure/network-security.md +1337 -0
- package/expertise/security/mobile/index.md +23 -0
- package/expertise/security/mobile/mobile-android-security.md +1218 -0
- package/expertise/security/mobile/mobile-binary-protection.md +1229 -0
- package/expertise/security/mobile/mobile-data-storage.md +1265 -0
- package/expertise/security/mobile/mobile-ios-security.md +1401 -0
- package/expertise/security/mobile/mobile-network-security.md +1520 -0
- package/expertise/security/smart-contract-security.md +594 -0
- package/expertise/security/testing/index.md +22 -0
- package/expertise/security/testing/penetration-testing.md +1258 -0
- package/expertise/security/testing/security-code-review.md +1765 -0
- package/expertise/security/testing/threat-modeling.md +1074 -0
- package/expertise/security/testing/vulnerability-scanning.md +1062 -0
- package/expertise/security/web/api-security.md +586 -0
- package/expertise/security/web/cors-and-headers.md +433 -0
- package/expertise/security/web/csrf.md +562 -0
- package/expertise/security/web/file-upload.md +1477 -0
- package/expertise/security/web/index.md +25 -0
- package/expertise/security/web/injection.md +1375 -0
- package/expertise/security/web/session-management.md +1101 -0
- package/expertise/security/web/xss.md +1158 -0
- package/exports/README.md +17 -0
- package/exports/hosts/claude/.claude/agents/clarifier.md +42 -0
- package/exports/hosts/claude/.claude/agents/content-author.md +63 -0
- package/exports/hosts/claude/.claude/agents/designer.md +55 -0
- package/exports/hosts/claude/.claude/agents/executor.md +55 -0
- package/exports/hosts/claude/.claude/agents/learner.md +51 -0
- package/exports/hosts/claude/.claude/agents/planner.md +53 -0
- package/exports/hosts/claude/.claude/agents/researcher.md +43 -0
- package/exports/hosts/claude/.claude/agents/reviewer.md +54 -0
- package/exports/hosts/claude/.claude/agents/specifier.md +47 -0
- package/exports/hosts/claude/.claude/agents/verifier.md +71 -0
- package/exports/hosts/claude/.claude/commands/author.md +42 -0
- package/exports/hosts/claude/.claude/commands/clarify.md +38 -0
- package/exports/hosts/claude/.claude/commands/design-review.md +46 -0
- package/exports/hosts/claude/.claude/commands/design.md +44 -0
- package/exports/hosts/claude/.claude/commands/discover.md +37 -0
- package/exports/hosts/claude/.claude/commands/execute.md +48 -0
- package/exports/hosts/claude/.claude/commands/learn.md +38 -0
- package/exports/hosts/claude/.claude/commands/plan-review.md +42 -0
- package/exports/hosts/claude/.claude/commands/plan.md +39 -0
- package/exports/hosts/claude/.claude/commands/prepare-next.md +37 -0
- package/exports/hosts/claude/.claude/commands/review.md +40 -0
- package/exports/hosts/claude/.claude/commands/run-audit.md +41 -0
- package/exports/hosts/claude/.claude/commands/spec-challenge.md +41 -0
- package/exports/hosts/claude/.claude/commands/specify.md +38 -0
- package/exports/hosts/claude/.claude/commands/verify.md +37 -0
- package/exports/hosts/claude/.claude/settings.json +34 -0
- package/exports/hosts/claude/CLAUDE.md +19 -0
- package/exports/hosts/claude/export.manifest.json +38 -0
- package/exports/hosts/claude/host-package.json +67 -0
- package/exports/hosts/codex/AGENTS.md +19 -0
- package/exports/hosts/codex/export.manifest.json +38 -0
- package/exports/hosts/codex/host-package.json +41 -0
- package/exports/hosts/cursor/.cursor/hooks.json +16 -0
- package/exports/hosts/cursor/.cursor/rules/wazir-core.mdc +19 -0
- package/exports/hosts/cursor/export.manifest.json +38 -0
- package/exports/hosts/cursor/host-package.json +42 -0
- package/exports/hosts/gemini/GEMINI.md +19 -0
- package/exports/hosts/gemini/export.manifest.json +38 -0
- package/exports/hosts/gemini/host-package.json +41 -0
- package/hooks/README.md +18 -0
- package/hooks/definitions/loop_cap_guard.yaml +21 -0
- package/hooks/definitions/post_tool_capture.yaml +24 -0
- package/hooks/definitions/pre_compact_summary.yaml +19 -0
- package/hooks/definitions/pre_tool_capture_route.yaml +19 -0
- package/hooks/definitions/protected_path_write_guard.yaml +19 -0
- package/hooks/definitions/session_start.yaml +19 -0
- package/hooks/definitions/stop_handoff_harvest.yaml +20 -0
- package/hooks/loop-cap-guard +17 -0
- package/hooks/post-tool-lint +36 -0
- package/hooks/protected-path-write-guard +17 -0
- package/hooks/session-start +41 -0
- package/llms-full.txt +2355 -0
- package/llms.txt +43 -0
- package/package.json +79 -0
- package/roles/README.md +20 -0
- package/roles/clarifier.md +42 -0
- package/roles/content-author.md +63 -0
- package/roles/designer.md +55 -0
- package/roles/executor.md +55 -0
- package/roles/learner.md +51 -0
- package/roles/planner.md +53 -0
- package/roles/researcher.md +43 -0
- package/roles/reviewer.md +54 -0
- package/roles/specifier.md +47 -0
- package/roles/verifier.md +71 -0
- package/schemas/README.md +24 -0
- package/schemas/accepted-learning.schema.json +20 -0
- package/schemas/author-artifact.schema.json +156 -0
- package/schemas/clarification.schema.json +19 -0
- package/schemas/design-artifact.schema.json +80 -0
- package/schemas/docs-claim.schema.json +18 -0
- package/schemas/export-manifest.schema.json +20 -0
- package/schemas/hook.schema.json +67 -0
- package/schemas/host-export-package.schema.json +18 -0
- package/schemas/implementation-plan.schema.json +19 -0
- package/schemas/proposed-learning.schema.json +19 -0
- package/schemas/research.schema.json +18 -0
- package/schemas/review.schema.json +29 -0
- package/schemas/run-manifest.schema.json +18 -0
- package/schemas/spec-challenge.schema.json +18 -0
- package/schemas/spec.schema.json +20 -0
- package/schemas/usage.schema.json +102 -0
- package/schemas/verification-proof.schema.json +29 -0
- package/schemas/wazir-manifest.schema.json +173 -0
- package/skills/README.md +40 -0
- package/skills/brainstorming/SKILL.md +77 -0
- package/skills/debugging/SKILL.md +50 -0
- package/skills/design/SKILL.md +61 -0
- package/skills/dispatching-parallel-agents/SKILL.md +128 -0
- package/skills/executing-plans/SKILL.md +70 -0
- package/skills/finishing-a-development-branch/SKILL.md +169 -0
- package/skills/humanize/SKILL.md +123 -0
- package/skills/init-pipeline/SKILL.md +124 -0
- package/skills/prepare-next/SKILL.md +20 -0
- package/skills/receiving-code-review/SKILL.md +123 -0
- package/skills/requesting-code-review/SKILL.md +105 -0
- package/skills/requesting-code-review/code-reviewer.md +108 -0
- package/skills/run-audit/SKILL.md +197 -0
- package/skills/scan-project/SKILL.md +41 -0
- package/skills/self-audit/SKILL.md +153 -0
- package/skills/subagent-driven-development/SKILL.md +154 -0
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
- package/skills/subagent-driven-development/implementer-prompt.md +102 -0
- package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/tdd/SKILL.md +23 -0
- package/skills/using-git-worktrees/SKILL.md +163 -0
- package/skills/using-skills/SKILL.md +95 -0
- package/skills/verification/SKILL.md +22 -0
- package/skills/wazir/SKILL.md +463 -0
- package/skills/writing-plans/SKILL.md +30 -0
- package/skills/writing-skills/SKILL.md +157 -0
- package/skills/writing-skills/anthropic-best-practices.md +122 -0
- package/skills/writing-skills/persuasion-principles.md +50 -0
- package/templates/README.md +20 -0
- package/templates/artifacts/README.md +10 -0
- package/templates/artifacts/accepted-learning.md +19 -0
- package/templates/artifacts/accepted-learning.template.json +12 -0
- package/templates/artifacts/author.md +74 -0
- package/templates/artifacts/author.template.json +19 -0
- package/templates/artifacts/clarification.md +21 -0
- package/templates/artifacts/clarification.template.json +12 -0
- package/templates/artifacts/execute-notes.md +19 -0
- package/templates/artifacts/implementation-plan.md +21 -0
- package/templates/artifacts/implementation-plan.template.json +11 -0
- package/templates/artifacts/learning-proposal.md +19 -0
- package/templates/artifacts/next-run-handoff.md +21 -0
- package/templates/artifacts/plan-review.md +19 -0
- package/templates/artifacts/proposed-learning.template.json +12 -0
- package/templates/artifacts/research.md +21 -0
- package/templates/artifacts/research.template.json +12 -0
- package/templates/artifacts/review-findings.md +19 -0
- package/templates/artifacts/review.template.json +11 -0
- package/templates/artifacts/run-manifest.template.json +8 -0
- package/templates/artifacts/spec-challenge.md +19 -0
- package/templates/artifacts/spec-challenge.template.json +11 -0
- package/templates/artifacts/spec.md +21 -0
- package/templates/artifacts/spec.template.json +12 -0
- package/templates/artifacts/verification-proof.md +19 -0
- package/templates/artifacts/verification-proof.template.json +11 -0
- package/templates/examples/accepted-learning.example.json +14 -0
- package/templates/examples/author.example.json +152 -0
- package/templates/examples/clarification.example.json +15 -0
- package/templates/examples/docs-claim.example.json +8 -0
- package/templates/examples/export-manifest.example.json +7 -0
- package/templates/examples/host-export-package.example.json +11 -0
- package/templates/examples/implementation-plan.example.json +17 -0
- package/templates/examples/proposed-learning.example.json +13 -0
- package/templates/examples/research.example.json +15 -0
- package/templates/examples/research.example.md +6 -0
- package/templates/examples/review.example.json +17 -0
- package/templates/examples/run-manifest.example.json +9 -0
- package/templates/examples/spec-challenge.example.json +14 -0
- package/templates/examples/spec.example.json +21 -0
- package/templates/examples/verification-proof.example.json +21 -0
- package/templates/examples/wazir-manifest.example.yaml +65 -0
- package/templates/task-definition-schema.md +99 -0
- package/tooling/README.md +20 -0
- package/tooling/src/adapters/context-mode.js +50 -0
- package/tooling/src/capture/command.js +376 -0
- package/tooling/src/capture/store.js +99 -0
- package/tooling/src/capture/usage.js +270 -0
- package/tooling/src/checks/branches.js +50 -0
- package/tooling/src/checks/brand-truth.js +110 -0
- package/tooling/src/checks/changelog.js +231 -0
- package/tooling/src/checks/command-registry.js +36 -0
- package/tooling/src/checks/commits.js +102 -0
- package/tooling/src/checks/docs-drift.js +103 -0
- package/tooling/src/checks/docs-truth.js +201 -0
- package/tooling/src/checks/runtime-surface.js +156 -0
- package/tooling/src/cli.js +116 -0
- package/tooling/src/command-options.js +56 -0
- package/tooling/src/commands/validate.js +320 -0
- package/tooling/src/doctor/command.js +91 -0
- package/tooling/src/export/command.js +77 -0
- package/tooling/src/export/compiler.js +498 -0
- package/tooling/src/guards/loop-cap-guard.js +52 -0
- package/tooling/src/guards/protected-path-write-guard.js +67 -0
- package/tooling/src/index/command.js +152 -0
- package/tooling/src/index/storage.js +1061 -0
- package/tooling/src/index/summarizers.js +261 -0
- package/tooling/src/loaders.js +18 -0
- package/tooling/src/project-root.js +22 -0
- package/tooling/src/recall/command.js +225 -0
- package/tooling/src/schema-validator.js +30 -0
- package/tooling/src/state-root.js +40 -0
- package/tooling/src/status/command.js +71 -0
- package/wazir.manifest.yaml +135 -0
- package/workflows/README.md +19 -0
- package/workflows/author.md +42 -0
- package/workflows/clarify.md +38 -0
- package/workflows/design-review.md +46 -0
- package/workflows/design.md +44 -0
- package/workflows/discover.md +37 -0
- package/workflows/execute.md +48 -0
- package/workflows/learn.md +38 -0
- package/workflows/plan-review.md +42 -0
- package/workflows/plan.md +39 -0
- package/workflows/prepare-next.md +37 -0
- package/workflows/review.md +40 -0
- package/workflows/run-audit.md +41 -0
- package/workflows/spec-challenge.md +41 -0
- package/workflows/specify.md +38 -0
- package/workflows/verify.md +37 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
# RTL Layout Mirroring — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> The mechanics of layout mirroring: CSS logical properties, Flexbox/Grid behavior, transforms, and platform-specific APIs. Physical vs logical is the central concept—every layout decision must use the correct model.
|
|
4
|
+
|
|
5
|
+
> **Category:** RTL
|
|
6
|
+
> **Applies to:** Mobile, Web
|
|
7
|
+
> **Key standards:** CSS Logical Properties (MDN), W3C BiDi
|
|
8
|
+
> **RTL impact:** Critical — layout mirroring is the bulk of RTL implementation work
|
|
9
|
+
|
|
10
|
+
## 1. The Rules
|
|
11
|
+
|
|
12
|
+
### Physical vs Logical Mapping
|
|
13
|
+
|
|
14
|
+
| Physical (avoid for layout) | Logical (use) | LTR resolves to | RTL resolves to |
|
|
15
|
+
|-----------------------------|---------------|-----------------|-----------------|
|
|
16
|
+
| `left` | `inset-inline-start` | `left` | `right` |
|
|
17
|
+
| `right` | `inset-inline-end` | `right` | `left` |
|
|
18
|
+
| `margin-left` | `margin-inline-start` | `margin-left` | `margin-right` |
|
|
19
|
+
| `margin-right` | `margin-inline-end` | `margin-right` | `margin-left` |
|
|
20
|
+
| `padding-left` | `padding-inline-start` | `padding-left` | `padding-right` |
|
|
21
|
+
| `padding-right` | `padding-inline-end` | `padding-right` | `padding-left` |
|
|
22
|
+
| `border-left` | `border-inline-start` | `border-left` | `border-right` |
|
|
23
|
+
| `border-right` | `border-inline-end` | `border-right` | `border-left` |
|
|
24
|
+
| `text-align: left` | `text-align: start` | left | right |
|
|
25
|
+
| `text-align: right` | `text-align: end` | right | left |
|
|
26
|
+
|
|
27
|
+
### Block vs Inline
|
|
28
|
+
|
|
29
|
+
- **Inline axis** — Direction of text flow (horizontal in LTR/RTL; can be vertical in CJK)
|
|
30
|
+
- **Block axis** — Perpendicular to inline (vertical in horizontal writing modes)
|
|
31
|
+
|
|
32
|
+
**Logical properties:**
|
|
33
|
+
- `inline-start`, `inline-end` — start/end of inline axis
|
|
34
|
+
- `block-start`, `block-end` — start/end of block axis
|
|
35
|
+
|
|
36
|
+
### What Does NOT Auto-Mirror
|
|
37
|
+
|
|
38
|
+
- **`transform: translateX(10px)`** — Physical; does not flip. Use direction multiplier: `translateX(calc(10px * var(--dir, 1)))` with `--dir: -1` for RTL.
|
|
39
|
+
- **`box-shadow`** — Horizontal offset is physical. Use `inset-inline-start` for inset shadows or duplicate rules for RTL.
|
|
40
|
+
- **`background-position`** — `left`, `right` are physical. Use `right` in RTL override or `inline-start`/`inline-end` where supported.
|
|
41
|
+
- **`float`** — `float: left` is physical. Prefer Flexbox/Grid; if using float, override for RTL.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 2. Platform Implementation
|
|
46
|
+
|
|
47
|
+
### Web: CSS Logical Properties
|
|
48
|
+
|
|
49
|
+
```css
|
|
50
|
+
/* Margins and padding */
|
|
51
|
+
.container {
|
|
52
|
+
margin-inline-start: 16px;
|
|
53
|
+
margin-inline-end: 8px;
|
|
54
|
+
padding-inline-start: 24px;
|
|
55
|
+
padding-inline-end: 12px;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* Borders */
|
|
59
|
+
.card {
|
|
60
|
+
border-inline-start: 2px solid var(--accent);
|
|
61
|
+
border-inline-end: none;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/* Position */
|
|
65
|
+
.overlay {
|
|
66
|
+
position: absolute;
|
|
67
|
+
inset-inline-start: 0;
|
|
68
|
+
inset-block-start: 0;
|
|
69
|
+
width: 100%;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* Text alignment */
|
|
73
|
+
.text {
|
|
74
|
+
text-align: start;
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Web: Transform (Manual RTL)
|
|
79
|
+
|
|
80
|
+
```css
|
|
81
|
+
:root {
|
|
82
|
+
--slide-offset: -100%;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
[dir="rtl"] {
|
|
86
|
+
--slide-offset: 100%;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.sidebar {
|
|
90
|
+
transform: translateX(var(--slide-offset));
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Or with a direction variable:
|
|
95
|
+
```css
|
|
96
|
+
[dir="rtl"] {
|
|
97
|
+
--dir: -1;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.element {
|
|
101
|
+
transform: translateX(calc(20px * var(--dir, 1)));
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Web: Flexbox
|
|
106
|
+
|
|
107
|
+
Flexbox is **logical by default** when `dir` is set on a parent:
|
|
108
|
+
- `flex-direction: row` — Main axis follows writing direction (LTR: left→right; RTL: right→left)
|
|
109
|
+
- `justify-content: flex-start` — Start of main axis
|
|
110
|
+
- `align-items: flex-start` — Start of cross axis
|
|
111
|
+
|
|
112
|
+
**Do NOT use `row-reverse` for RTL.** The `dir` attribute handles it. Use `flex-start`/`flex-end`, not `left`/`right`.
|
|
113
|
+
|
|
114
|
+
### Web: CSS Grid
|
|
115
|
+
|
|
116
|
+
```css
|
|
117
|
+
.grid {
|
|
118
|
+
display: grid;
|
|
119
|
+
grid-template-columns: 1fr 2fr 1fr;
|
|
120
|
+
/* Columns flow inline; RTL flips column order automatically when dir="rtl" */
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/* Use logical values for placement */
|
|
124
|
+
.item {
|
|
125
|
+
grid-column: 1 / 2; /* Still numeric; column order flips with dir */
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
For `grid-column-start`/`end`, use `inline-start`/`inline-end` where supported, or rely on `dir` to flip the grid.
|
|
130
|
+
|
|
131
|
+
### Flutter: Directional Classes
|
|
132
|
+
|
|
133
|
+
```dart
|
|
134
|
+
// Padding
|
|
135
|
+
Padding(
|
|
136
|
+
padding: EdgeInsetsDirectional.only(start: 16, end: 8, top: 12, bottom: 12),
|
|
137
|
+
child: child,
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
// Alignment
|
|
141
|
+
Align(
|
|
142
|
+
alignment: AlignmentDirectional.centerStart,
|
|
143
|
+
child: child,
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
// EdgeInsets for symmetric
|
|
147
|
+
EdgeInsetsDirectional.symmetric(horizontal: 16)
|
|
148
|
+
|
|
149
|
+
// Positioned (in Stack)
|
|
150
|
+
Positioned.directional(
|
|
151
|
+
textDirection: Directionality.of(context),
|
|
152
|
+
start: 0,
|
|
153
|
+
end: 0,
|
|
154
|
+
top: 0,
|
|
155
|
+
child: child,
|
|
156
|
+
)
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**Avoid:** `EdgeInsets.only(left: 16)`, `Alignment.centerLeft` — use directional equivalents.
|
|
160
|
+
|
|
161
|
+
### Flutter: Row and ListView
|
|
162
|
+
|
|
163
|
+
`Row` and `ListView` (horizontal) automatically reverse child order when `Directionality` is RTL. No extra code if you use `MainAxisAlignment.start` and directional padding.
|
|
164
|
+
|
|
165
|
+
### iOS: Auto Layout
|
|
166
|
+
|
|
167
|
+
- Use **leading** and **trailing** constraints, never left/right for layout
|
|
168
|
+
- `NSLayoutConstraint` with `leadingAnchor`/`trailingAnchor`
|
|
169
|
+
- `UIView.semanticContentAttribute = .forceRightToLeft` for RTL
|
|
170
|
+
|
|
171
|
+
### Android: Layout XML
|
|
172
|
+
|
|
173
|
+
```xml
|
|
174
|
+
<LinearLayout
|
|
175
|
+
android:layoutDirection="locale"
|
|
176
|
+
...>
|
|
177
|
+
<TextView
|
|
178
|
+
android:layout_marginStart="16dp"
|
|
179
|
+
android:layout_marginEnd="8dp"
|
|
180
|
+
... />
|
|
181
|
+
</LinearLayout>
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Use `layout_marginStart`/`End`, `paddingStart`/`End`, `layout_gravity="start"`/`"end"`.
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
## 3. Visual Examples (Described in Detail)
|
|
189
|
+
|
|
190
|
+
### Sidebar Drawer
|
|
191
|
+
|
|
192
|
+
- **LTR:** Drawer slides in from the left. `transform: translateX(-100%)` when closed.
|
|
193
|
+
- **RTL:** Drawer slides in from the right. `transform: translateX(100%)` when closed. The drawer is on the "start" side; in RTL, start is right.
|
|
194
|
+
|
|
195
|
+
### Card with Leading Icon
|
|
196
|
+
|
|
197
|
+
- **LTR:** `[Icon] Title` — icon at inline-start.
|
|
198
|
+
- **RTL:** `Title [Icon]` — icon still at inline-start (now right). Use `margin-inline-start` on the title so spacing is correct.
|
|
199
|
+
|
|
200
|
+
### List Item with Trailing Chevron
|
|
201
|
+
|
|
202
|
+
- **LTR:** `Item text [>]` — chevron at end.
|
|
203
|
+
- **RTL:** `[<] Item text` — chevron at end (now left). Chevron may need to mirror (point left in RTL = "more" in reading direction).
|
|
204
|
+
|
|
205
|
+
### Progress Bar
|
|
206
|
+
|
|
207
|
+
- **LTR:** Fills from left. `width: 60%` or `transform: scaleX(0.6)` with `transform-origin: left`.
|
|
208
|
+
- **RTL:** Fills from right. `transform-origin: right` in RTL, or use logical: `inset-inline-start: 0` and `width` from start.
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## 4. Common RTL Layout Bugs
|
|
213
|
+
|
|
214
|
+
1. **Transform not mirroring** — `translateX` is physical. Use direction multiplier or separate RTL rule.
|
|
215
|
+
2. **Shadow offset** — `box-shadow: 4px 0 8px` — 4px is to the right in LTR; in RTL it should be to the left. Override or use logical equivalent.
|
|
216
|
+
3. **Gradient direction** — `linear-gradient(to right, ...)` — "right" is physical. Use `to inline-end` or `to left` in RTL override.
|
|
217
|
+
4. **Absolute positioning** — `left: 0`; use `inset-inline-start: 0`.
|
|
218
|
+
5. **Border radius** — `border-top-left-radius`; use `border-start-start-radius` for asymmetric corners.
|
|
219
|
+
6. **Flexbox with `margin-left: auto`** — Physical. Use `margin-inline-start: auto`.
|
|
220
|
+
7. **Float** — `float: left`; use `float: inline-start` or Flexbox.
|
|
221
|
+
8. **Scrollbar position** — Horizontal scroll in RTL: scrollbar may be on the right; ensure overflow and scroll behavior are correct.
|
|
222
|
+
9. **Fixed/sticky elements** — `position: fixed; left: 0`; use `inset-inline-start: 0`.
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## 5. QA Checklist
|
|
227
|
+
|
|
228
|
+
- [ ] All margins/padding use logical properties
|
|
229
|
+
- [ ] Transforms use direction multiplier or RTL override
|
|
230
|
+
- [ ] Flexbox uses flex-start/flex-end, not left/right
|
|
231
|
+
- [ ] Absolute/fixed positioning uses inset-inline-*
|
|
232
|
+
- [ ] Borders and border-radius use logical where asymmetric
|
|
233
|
+
- [ ] Shadows and gradients checked in RTL
|
|
234
|
+
- [ ] Sidebar/drawer slides from correct edge
|
|
235
|
+
- [ ] Progress bar fills from start
|
|
236
|
+
- [ ] List items and cards lay out correctly
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Quick Reference Checklist
|
|
241
|
+
|
|
242
|
+
- [ ] Replace `left`/`right` with `inline-start`/`inline-end`
|
|
243
|
+
- [ ] Replace `margin-left`/`margin-right` with `margin-inline-*`
|
|
244
|
+
- [ ] Replace `padding-left`/`padding-right` with `padding-inline-*`
|
|
245
|
+
- [ ] Use `EdgeInsetsDirectional` in Flutter
|
|
246
|
+
- [ ] Use leading/trailing in iOS Auto Layout
|
|
247
|
+
- [ ] Use start/end in Android XML
|
|
248
|
+
- [ ] Handle `translateX` manually for RTL
|
|
249
|
+
- [ ] Verify shadows, gradients, and transforms in RTL
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
*Researched: 2026-03-08 | Sources: MDN logical properties, CSS-Tricks multi-directional layouts, Flutter Directionality docs, Firefox RTL guidelines*
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# RTL Navigation and Gestures — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> Navigation and gestures must follow reading direction: swipe-back from the right edge in RTL, tab order from right to left, carousels and steppers reversed. Wrong gesture direction is disorienting.
|
|
4
|
+
|
|
5
|
+
> **Category:** RTL
|
|
6
|
+
> **Applies to:** Mobile, Web
|
|
7
|
+
> **Key standards:** Material Design, Apple HIG
|
|
8
|
+
> **RTL impact:** Critical — navigation is core to UX
|
|
9
|
+
|
|
10
|
+
## 1. The Rules
|
|
11
|
+
|
|
12
|
+
### Swipe-Back Gesture
|
|
13
|
+
|
|
14
|
+
| Context | LTR | RTL |
|
|
15
|
+
|---------|-----|-----|
|
|
16
|
+
| **Back navigation** | Swipe from left edge → right | Swipe from right edge → left |
|
|
17
|
+
| **Rationale** | "Back" = toward start (left) | "Back" = toward start (right) |
|
|
18
|
+
|
|
19
|
+
In RTL, the user "came from" the right. Swiping right-to-left dismisses the current screen and returns to the previous one.
|
|
20
|
+
|
|
21
|
+
### Carousel / Horizontal Scroll
|
|
22
|
+
|
|
23
|
+
| Context | LTR | RTL |
|
|
24
|
+
|---------|-----|-----|
|
|
25
|
+
| **Scroll direction** | Swipe left to see "next" | Swipe right to see "next" |
|
|
26
|
+
| **Initial position** | Content starts at left | Content starts at right |
|
|
27
|
+
| **"More" content** | To the right | To the left |
|
|
28
|
+
|
|
29
|
+
### Tab Bar / Bottom Navigation
|
|
30
|
+
|
|
31
|
+
- **LTR:** First tab on left
|
|
32
|
+
- **RTL:** First tab on right
|
|
33
|
+
- Tab order follows visual order (start → end)
|
|
34
|
+
|
|
35
|
+
### Focus Order
|
|
36
|
+
|
|
37
|
+
- **LTR:** Tab order left → right, top → bottom
|
|
38
|
+
- **RTL:** Tab order right → left, top → bottom
|
|
39
|
+
- Ensure focus follows visual layout
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 2. Platform Implementation
|
|
44
|
+
|
|
45
|
+
### iOS
|
|
46
|
+
|
|
47
|
+
- **Swipe-back:** iOS automatically inverts when `userInterfaceLayoutDirection` is RTL
|
|
48
|
+
- **Edge swipe:** From the leading edge (right in RTL)
|
|
49
|
+
- **UINavigationController:** Handles RTL by default with base internationalization
|
|
50
|
+
|
|
51
|
+
### Android
|
|
52
|
+
|
|
53
|
+
- **Back gesture:** From the start edge (right in RTL)
|
|
54
|
+
- **Navigation component:** Uses `layoutDirection`; gestures follow
|
|
55
|
+
- **ViewPager:** Set `layoutDirection` or use `ViewPager2` with RTL support
|
|
56
|
+
|
|
57
|
+
### Flutter
|
|
58
|
+
|
|
59
|
+
- **CupertinoPageRoute:** Swipe-back direction follows `Directionality`
|
|
60
|
+
- **PageView:** Horizontal scroll direction flips with `TextDirection.rtl`
|
|
61
|
+
- **TabBar:** Tab order reverses automatically
|
|
62
|
+
|
|
63
|
+
### React Navigation
|
|
64
|
+
|
|
65
|
+
- RTL swipe-back fixed in later versions; ensure `gestureDirection` is not overridden incorrectly
|
|
66
|
+
- Use `gestureDirection: 'inverted'` only when framework doesn't auto-detect RTL
|
|
67
|
+
|
|
68
|
+
### Web (Carousel / Swiper)
|
|
69
|
+
|
|
70
|
+
- Set `dir="rtl"` on container; many libraries (Swiper, etc.) respect it
|
|
71
|
+
- If not: `rtl: true` or equivalent option
|
|
72
|
+
- Verify "next" swipe goes the correct direction
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 3. Common RTL Navigation Bugs
|
|
77
|
+
|
|
78
|
+
1. **Swipe-back from wrong edge** — User swipes left (LTR habit) but nothing happens; back is from right in RTL
|
|
79
|
+
2. **Carousel "next" goes wrong way** — Swiping "forward" feels backward
|
|
80
|
+
3. **Tab order wrong** — Focus jumps left when it should go right
|
|
81
|
+
4. **Horizontal scroll starts wrong** — Content appears to start from wrong side
|
|
82
|
+
5. **Stepper/wizard arrows wrong** — Progress direction doesn't match layout
|
|
83
|
+
6. **Drawer opens from wrong side** — Should open from start (right in RTL)
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 4. QA Checklist
|
|
88
|
+
|
|
89
|
+
- [ ] Swipe-back from correct edge (right in RTL)
|
|
90
|
+
- [ ] Carousel/horizontal scroll direction correct
|
|
91
|
+
- [ ] Tab bar order follows visual order
|
|
92
|
+
- [ ] Focus order follows visual order
|
|
93
|
+
- [ ] Drawer/sidebar opens from start edge
|
|
94
|
+
- [ ] "Next" and "Previous" buttons in correct positions
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Quick Reference Checklist
|
|
99
|
+
|
|
100
|
+
- [ ] Back gesture from start edge (right in RTL)
|
|
101
|
+
- [ ] Carousel next/previous follow reading direction
|
|
102
|
+
- [ ] Tab order = visual order
|
|
103
|
+
- [ ] Focus order = visual order
|
|
104
|
+
- [ ] Test swipe gestures in RTL
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
*Researched: 2026-03-08 | Sources: React Navigation RTL, iOS/Flutter RTL, Material Design*
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# RTL Testing and QA — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> How to verify RTL correctness: pseudo-localization, manual checklists, automated checks, and real-locale testing. Catch layout, icon, gesture, and BiDi bugs before release.
|
|
4
|
+
|
|
5
|
+
> **Category:** RTL
|
|
6
|
+
> **Applies to:** Mobile, Web
|
|
7
|
+
> **Key standards:** W3C, Material Design
|
|
8
|
+
> **RTL impact:** Critical — RTL bugs ship without dedicated QA
|
|
9
|
+
|
|
10
|
+
## 1. Pseudo-Localization for RTL
|
|
11
|
+
|
|
12
|
+
### Purpose
|
|
13
|
+
|
|
14
|
+
- Simulate RTL without translators
|
|
15
|
+
- Expose layout, truncation, and hardcoded-string issues early
|
|
16
|
+
|
|
17
|
+
### Android Pseudolocales
|
|
18
|
+
|
|
19
|
+
- **en-XA** — Accented Latin, text expansion
|
|
20
|
+
- **ar-XB** — Reversed text direction (RTL simulation)
|
|
21
|
+
|
|
22
|
+
### Web / General
|
|
23
|
+
|
|
24
|
+
- Use `dir="rtl"` with pseudo-translated content
|
|
25
|
+
- Wrap strings with Unicode RLI/PDI or use `dir="rtl"` on test locale
|
|
26
|
+
- Tools: pseudo-l10n npm package, custom scripts
|
|
27
|
+
|
|
28
|
+
### What to Look For
|
|
29
|
+
|
|
30
|
+
- Layout mirroring (or lack of it)
|
|
31
|
+
- Truncated text
|
|
32
|
+
- Overlapping elements
|
|
33
|
+
- Icons that should mirror but don't
|
|
34
|
+
- Hardcoded strings (remain in source language)
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 2. Manual QA Checklist (20–30 Items)
|
|
39
|
+
|
|
40
|
+
### Layout
|
|
41
|
+
|
|
42
|
+
- [ ] Navigation/tabs ordered start→end (right→left in RTL)
|
|
43
|
+
- [ ] Sidebar/drawer on start side (right in RTL)
|
|
44
|
+
- [ ] Content flows from start
|
|
45
|
+
- [ ] No horizontal overflow or clipping
|
|
46
|
+
- [ ] Margins/padding correct (logical properties)
|
|
47
|
+
|
|
48
|
+
### Text
|
|
49
|
+
|
|
50
|
+
- [ ] Text aligns to start
|
|
51
|
+
- [ ] Mixed content (Arabic + English) displays correctly
|
|
52
|
+
- [ ] Numbers, URLs, email in correct direction
|
|
53
|
+
- [ ] Truncation/ellipsis at inline-end
|
|
54
|
+
- [ ] Line breaks and wrapping correct
|
|
55
|
+
|
|
56
|
+
### Icons and Images
|
|
57
|
+
|
|
58
|
+
- [ ] Back/forward arrows mirror
|
|
59
|
+
- [ ] Chevrons mirror where directional
|
|
60
|
+
- [ ] Checkmark, play, settings do NOT mirror
|
|
61
|
+
- [ ] Logos and photos do NOT mirror
|
|
62
|
+
- [ ] Icon position uses start/end
|
|
63
|
+
|
|
64
|
+
### Navigation and Gestures
|
|
65
|
+
|
|
66
|
+
- [ ] Swipe-back from correct edge (right in RTL)
|
|
67
|
+
- [ ] Carousel/horizontal scroll direction correct
|
|
68
|
+
- [ ] Tab order follows visual order
|
|
69
|
+
- [ ] Focus order correct
|
|
70
|
+
|
|
71
|
+
### Forms
|
|
72
|
+
|
|
73
|
+
- [ ] Labels at start of input
|
|
74
|
+
- [ ] Input text aligns to start
|
|
75
|
+
- [ ] Leading/trailing icons in correct positions
|
|
76
|
+
- [ ] Validation messages positioned correctly
|
|
77
|
+
|
|
78
|
+
### Animations
|
|
79
|
+
|
|
80
|
+
- [ ] Drawer slides from start edge
|
|
81
|
+
- [ ] Page transitions follow direction
|
|
82
|
+
- [ ] No "wrong way" slide animations
|
|
83
|
+
|
|
84
|
+
### Edge Cases
|
|
85
|
+
|
|
86
|
+
- [ ] Empty states
|
|
87
|
+
- [ ] Long text (e.g., German)
|
|
88
|
+
- [ ] Mixed LTR/RTL in same view
|
|
89
|
+
- [ ] Dynamic content (user names, search results)
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 3. Real Locale Testing
|
|
94
|
+
|
|
95
|
+
### Arabic (ar-SA, ar-EG)
|
|
96
|
+
|
|
97
|
+
- Real text: مرحباً، كيف حالك؟
|
|
98
|
+
- Eastern Arabic numerals (٠١٢٣) where applicable
|
|
99
|
+
- Hijri calendar if used
|
|
100
|
+
|
|
101
|
+
### Hebrew (he-IL)
|
|
102
|
+
|
|
103
|
+
- Real text: שלום, עברית
|
|
104
|
+
- Western numerals
|
|
105
|
+
- Hebrew calendar if used
|
|
106
|
+
|
|
107
|
+
### Why Real Text
|
|
108
|
+
|
|
109
|
+
- BiDi algorithm behaves differently with real script
|
|
110
|
+
- Font rendering, line breaks, and shaping differ from pseudo
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 4. Automated Checks
|
|
115
|
+
|
|
116
|
+
- **Lint:** Flag `margin-left`, `padding-right`, `text-align: left` in styles
|
|
117
|
+
- **CI:** Run with `dir="rtl"` or RTL locale; snapshot or visual regression
|
|
118
|
+
- **Accessibility:** Screen reader with RTL; focus order
|
|
119
|
+
- **Unit tests:** Direction-dependent logic (e.g., transform, layout direction)
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## 5. Common RTL Bugs to Catch
|
|
124
|
+
|
|
125
|
+
1. Physical properties instead of logical
|
|
126
|
+
2. Icons that should mirror but don't (or vice versa)
|
|
127
|
+
3. Swipe-back from wrong edge
|
|
128
|
+
4. Drawer from wrong side
|
|
129
|
+
5. Transform/translate not inverted
|
|
130
|
+
6. Form labels on wrong side
|
|
131
|
+
7. Mixed content BiDi spillover
|
|
132
|
+
8. Truncation at wrong edge
|
|
133
|
+
9. Shadow/gradient not mirrored where needed
|
|
134
|
+
10. Tab/focus order wrong
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Quick Reference Checklist
|
|
139
|
+
|
|
140
|
+
- [ ] Pseudo-localization (ar-XB or dir=rtl) in CI
|
|
141
|
+
- [ ] Manual checklist for layout, text, icons, navigation, forms
|
|
142
|
+
- [ ] Test with real Arabic and Hebrew
|
|
143
|
+
- [ ] Automated lint for physical properties
|
|
144
|
+
- [ ] Verify swipe gestures and animations
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
*Researched: 2026-03-08 | Sources: Android pseudolocales, L10n pseudo-localization, Ubertesters RTL testing*
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# RTL Typography — i18n/RTL Expertise Module
|
|
2
|
+
|
|
3
|
+
> Typography for RTL scripts: font selection, line height, letter spacing, and script-specific considerations. Arabic and Hebrew have different requirements—connected cursive vs discrete letters, diacritics, and rendering complexity.
|
|
4
|
+
|
|
5
|
+
> **Category:** RTL
|
|
6
|
+
> **Applies to:** Mobile, Web
|
|
7
|
+
> **Key standards:** OpenType, W3C typography
|
|
8
|
+
> **RTL impact:** Critical — poor typography makes RTL content unreadable
|
|
9
|
+
|
|
10
|
+
## 1. The Rules
|
|
11
|
+
|
|
12
|
+
### Arabic vs Hebrew: Key Differences
|
|
13
|
+
|
|
14
|
+
| Aspect | Arabic | Hebrew |
|
|
15
|
+
|--------|--------|--------|
|
|
16
|
+
| **Script type** | Cursive (connected) | Mostly discrete (some connections) |
|
|
17
|
+
| **Letter forms** | Initial, medial, final, isolated | Positional variants, final forms |
|
|
18
|
+
| **Ligatures** | Many; words can act as single units | Fewer |
|
|
19
|
+
| **Diacritics** | Harakat (short vowels), dots | Niqqud, cantillation |
|
|
20
|
+
| **Font requirements** | OpenType shaping, contextual alternates | OpenType shaping |
|
|
21
|
+
| **Baseline** | Varies with letter height | More uniform |
|
|
22
|
+
|
|
23
|
+
### Font Size and Line Height
|
|
24
|
+
|
|
25
|
+
- **Arabic body text:** 14–18px minimum; many sites use 12–16px (below ideal)
|
|
26
|
+
- **Line height:** 1.5–1.75 for body; Arabic's ascenders/descenders need room
|
|
27
|
+
- **Hebrew:** Similar range; ensure diacritics (niqqud) don't collide with adjacent lines
|
|
28
|
+
|
|
29
|
+
### Logical Properties for Typography
|
|
30
|
+
|
|
31
|
+
- `text-align: start` — Not `left`
|
|
32
|
+
- `text-indent` — Use `text-indent: 2em` (block direction) or logical equivalent
|
|
33
|
+
- `letter-spacing` — Use sparingly; Arabic/Hebrew have different norms than Latin
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 2. Arabic-Specific Typography
|
|
38
|
+
|
|
39
|
+
### Connected Script
|
|
40
|
+
|
|
41
|
+
Arabic letters connect within words. Each letter has up to 4 forms: isolated, initial, medial, final. The font must support **OpenType contextual alternates** and **shaping** (e.g., HarfBuzz, Uniscribe).
|
|
42
|
+
|
|
43
|
+
### Diacritical Marks (Harakat)
|
|
44
|
+
|
|
45
|
+
- Short vowels (fatḥa, kasra, ḍamma) and other marks sit above/below letters
|
|
46
|
+
- Require sufficient line height to avoid clipping
|
|
47
|
+
- Some fonts render them better than others
|
|
48
|
+
|
|
49
|
+
### Font Recommendations
|
|
50
|
+
|
|
51
|
+
- **Body:** Tahoma, Arial (system), Noto Sans Arabic, IBM Plex Sans Arabic
|
|
52
|
+
- **Headlines:** Amiri, Lateef, Noto Kufi Arabic, Droid Arabic Kufi
|
|
53
|
+
- **Display:** Avoid overly decorative fonts for UI; reserve for marketing
|
|
54
|
+
|
|
55
|
+
### Common Pitfalls
|
|
56
|
+
|
|
57
|
+
1. **Font without Arabic support** — Fallback to system font; ensure `font-family` includes Arabic-capable fonts
|
|
58
|
+
2. **Insufficient line height** — Diacritics get clipped
|
|
59
|
+
3. **Letter-spacing** — Arabic typically uses minimal or no letter-spacing; adding it can break connections
|
|
60
|
+
4. **Small font size** — Below 14px, connected letters blur; diacritics become illegible
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 3. Hebrew-Specific Typography
|
|
65
|
+
|
|
66
|
+
### Script Characteristics
|
|
67
|
+
|
|
68
|
+
- 22 consonants; optional vowel points (niqqud)
|
|
69
|
+
- Final forms for 5 letters (kaf, mem, nun, pe, tsadi)
|
|
70
|
+
- Rashi script for religious commentary (different glyph set)
|
|
71
|
+
|
|
72
|
+
### Font Recommendations
|
|
73
|
+
|
|
74
|
+
- **Body:** Heebo, Noto Sans Hebrew, Arial (system)
|
|
75
|
+
- **Religious/formal:** Noto Rashi Hebrew, Frank Ruhl Libre
|
|
76
|
+
- **Display:** Heebo, Rubik
|
|
77
|
+
|
|
78
|
+
### Niqqud (Vowel Points)
|
|
79
|
+
|
|
80
|
+
- Placed above/below letters; need line height headroom
|
|
81
|
+
- Optional in modern Hebrew; often omitted in UI
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 4. Platform Implementation
|
|
86
|
+
|
|
87
|
+
### Web: Font Stack
|
|
88
|
+
|
|
89
|
+
```css
|
|
90
|
+
:root {
|
|
91
|
+
--font-arabic: 'Noto Sans Arabic', 'Tahoma', 'Arial', sans-serif;
|
|
92
|
+
--font-hebrew: 'Heebo', 'Noto Sans Hebrew', 'Arial', sans-serif;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
[lang="ar"] {
|
|
96
|
+
font-family: var(--font-arabic);
|
|
97
|
+
line-height: 1.6;
|
|
98
|
+
font-size: 1rem; /* 16px minimum for body */
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Web: Font Loading
|
|
103
|
+
|
|
104
|
+
```html
|
|
105
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
106
|
+
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+Arabic:wght@400;600;700&display=swap" rel="stylesheet">
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Flutter
|
|
110
|
+
|
|
111
|
+
```dart
|
|
112
|
+
// In theme or TextStyle
|
|
113
|
+
TextStyle(
|
|
114
|
+
fontFamily: 'NotoSansArabic',
|
|
115
|
+
fontSize: 16,
|
|
116
|
+
height: 1.6,
|
|
117
|
+
)
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### iOS / Android
|
|
121
|
+
|
|
122
|
+
- Use system fonts that support Arabic/Hebrew (San Francisco, Roboto)
|
|
123
|
+
- Or bundle Noto Sans Arabic / Heebo
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## 5. Mixed Script Typography
|
|
128
|
+
|
|
129
|
+
When mixing Arabic/Hebrew with Latin (e.g., brand names, technical terms):
|
|
130
|
+
|
|
131
|
+
- Ensure both scripts have compatible x-height and weight
|
|
132
|
+
- Noto family provides matching Latin + Arabic + Hebrew
|
|
133
|
+
- Avoid font switching mid-sentence when possible
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## 6. Anti-Patterns
|
|
138
|
+
|
|
139
|
+
1. **Letter-spacing on Arabic** — Breaks cursive connections
|
|
140
|
+
2. **Font size below 14px for body** — Illegible diacritics
|
|
141
|
+
3. **Line height < 1.5** — Diacritics collide
|
|
142
|
+
4. **Font without OpenType shaping** — Wrong letter forms
|
|
143
|
+
5. **Using Latin font for Arabic** — Missing glyphs, replacement characters
|
|
144
|
+
6. **text-transform: uppercase** — Arabic has no case; can break
|
|
145
|
+
7. **word-spacing** — Arabic uses different word-boundary rules
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Quick Reference Checklist
|
|
150
|
+
|
|
151
|
+
- [ ] Font supports Arabic/Hebrew (OpenType shaping)
|
|
152
|
+
- [ ] Body font size ≥ 14px (16px preferred)
|
|
153
|
+
- [ ] Line height 1.5–1.75 for body
|
|
154
|
+
- [ ] No letter-spacing on Arabic
|
|
155
|
+
- [ ] text-align: start
|
|
156
|
+
- [ ] Test with real text: العربية، עברית
|
|
157
|
+
- [ ] Diacritics not clipped
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
*Researched: 2026-03-08 | Sources: Code Guru Arabic fonts, HackerNoon Arabic design, Noto fonts, OpenType shaping*
|