{"_id":"@abtasty/qa-assistant-react-native","_rev":"18-b46a223bb32f61259ec9fcbbc5d343c1","name":"@abtasty/qa-assistant-react-native","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@abtasty/qa-assistant-react-native","version":"1.0.0","keywords":["abtasty","flagship","qa","testing","react-native","feature-flags","ab-testing"],"author":{"name":"ABTasty"},"license":"Apache-2.0","_id":"@abtasty/qa-assistant-react-native@1.0.0","maintainers":[{"name":"abtasty-user","email":"devops+npm@abtasty.com"},{"name":"j.u.p.iter","email":"pn79122821224@gmail.com"},{"name":"tcoppin_","email":"tanguy@abtasty.com"},{"name":"jonathangranger","email":"jonathan@abtasty.com"},{"name":"elias-abt","email":"elias@abtasty.com"},{"name":"alexbinet","email":"alexandre.binet@abtasty.com"},{"name":"cquandalle","email":"cyril.quandalle@abtasty.com"},{"name":"benoitdubus","email":"benoit.dubus@abtasty.com"},{"name":"jean-baptiste.agostin","email":"Jean-baptiste.agostin@abtasty.com"},{"name":"simenbjerkeset","email":"simen.bjerkeset@abtasty.com"},{"name":"wallaka","email":"antoine.wallace@abtasty.com"},{"name":"theoletouze","email":"theo.letouze@abtasty.com"},{"name":"pierrevinarnick","email":"pierre.vinarnick@abtasty.com"},{"name":"julien_niedzwiecki","email":"julien.niedzwiecki@abtasty.com"},{"name":"balintfulop","email":"balint.fulop@abtasty.com"},{"name":"bricelof","email":"brice.lof@abtasty.com"},{"name":"romain.guillaume.abtasty.com","email":"romain.guillaume@abtasty.com"},{"name":"merki230","email":"merkitoko@gmail.com"},{"name":"camille.gouaultlamour","email":"camille.gouaultlamour@abtasty.com"},{"name":"enzo.morvan","email":"enzo.morvan@abtasty.com"},{"name":"gnicolas.abtasty","email":"guillaume.nicolas@abtasty.com"},{"name":"alexabt","email":"alexander.hermani@abtasty.com"},{"name":"tiwariamrita","email":"amrita.tiwari@abtasty.com"},{"name":"chloeadr","email":"chloe.adrian@abtasty.com"},{"name":"tastymoca","email":"teo.montlouis-calixte@abtasty.com"},{"name":"mick_mikhail","email":"corey167@gmail.com"},{"name":"pankajpatel_abtasty","email":"pankaj.patel@abtasty.com"},{"name":"mndiaye","email":"mamadou.ndiaye.ext@abtasty.com"},{"name":"stepan-abtasty","email":"stepan.vasnevsky.ext@abtasty.com"},{"name":"jeanszleper-abtasty","email":"jean.szleper@abtasty.com"},{"name":"magomedcharto","email":"magomed.daudov.ext@abtasty.com"},{"name":"anthony-baussard-abtasty","email":"anthony.baussard@abtasty.com"},{"name":"cedric.vimont","email":"cedric.vimont@abtasty.com"},{"name":"tudor.abtasty","email":"tudor.ghetu-bejan@abtasty.com"},{"name":"antoine.witkowski","email":"antoine.witkowski@abtasty.com"},{"name":"aria_v2000","email":"aria.vahidi@abtasty.com"},{"name":"pavel.sprygin.ext","email":"pavel.sprygin.ext@abtasty.com"},{"name":"rlavrov-abtasty","email":"roman.lavrov.ext@abtasty.com"},{"name":"amine.bouchebaba","email":"amine.bouchebaba@abtasty.com"},{"name":"clement.bock.abtasty","email":"clement.bock@abtasty.com"},{"name":"igor.goncharenko","email":"igor.goncharenko@abtasty.com"},{"name":"clementine.carpentier","email":"clementine.carpentier@abtasty.com"},{"name":"chadi-abtasty","email":"chadi.laoulaou@abtasty.com"},{"name":"abtasty.sebastien","email":"sebastien.niang@abtasty.com"},{"name":"karim.d98","email":"karim.dalaize@abtasty.com"},{"name":"maelaj","email":"mael.ajrouche@abtasty.com"},{"name":"lily_zh","email":"liliia.zhukova@abtasty.com"},{"name":"mnogueron-abtasty","email":"matthieu.nogueron@abtasty.com"},{"name":"ab-henri-petrelli","email":"henri.petrelli@abtasty.com"},{"name":"usernameforme","email":"philippe.henoch@abtasty.com"},{"name":"romanabtasty","email":"roman.surkov.ext@abtasty.com"},{"name":"axelviskovic","email":"axel.viskovic@abtasty.com"},{"name":"a.delprat","email":"antoine.delprat@abtasty.com"},{"name":"calice","email":"calice.lefevre@abtasty.com"},{"name":"isabellegautier","email":"isabelle.gautier@abtasty.com"},{"name":"julesabtasty","email":"jules.gobin@abtasty.com"},{"name":"romainpct_ab","email":"romain.penchenat@abtasty.com"},{"name":"audren","email":"audren.mauplot@abtasty.com"},{"name":"eshwar_abtasty","email":"eshwar.tillaisababady@abtasty.com"},{"name":"victor.duveau","email":"victor.duveau@abtasty.com"},{"name":"stephanec","email":"stephane.chimy@abtasty.com"},{"name":"vidal-abtasty","email":"vidal.nono.chiamegne@abtasty.com"},{"name":"michel.martineau","email":"michel.martineau@abtasty.com"},{"name":"vasily.kuplevich.ext","email":"vasily.kuplevich.ext@abtasty.com"},{"name":"indraabt","email":"indra.tinot.patole@abtasty.com"},{"name":"anya117","email":"anya.kurrimboccus@abtasty.com"},{"name":"ragularatnam","email":"ragularatnam.perinparatnam@abtasty.com"},{"name":"alexandre.fritsch","email":"alexandre.fritsch@abtasty.com"},{"name":"andres.munoz.abtasty","email":"andres.munoz@abtasty.com"},{"name":"hemalambert","email":"hema.lambert@abtasty.com"},{"name":"yannickabtasty","email":"yannick.eyl@abtasty.com"},{"name":"samuel_barubiriza","email":"samuel.barubiriza@abtasty.com"},{"name":"leo.coyere-abt","email":"leo.coyere@abtasty.com"}],"homepage":"https://github.com/abtasty/qa-assistant-react-native#readme","bugs":{"url":"https://github.com/abtasty/qa-assistant-react-native/issues"},"dist":{"shasum":"9555fe34593c7edbbf06d6d77dd31e4da5ffe090","tarball":"https://registry.npmjs.org/@abtasty/qa-assistant-react-native/-/qa-assistant-react-native-1.0.0.tgz","fileCount":241,"integrity":"sha512-+yQjikjkb02ykC2ePsA5ec5Ve+7Wc2VTyD2KZD2JONsL/aMnl6VguCxEUhqeKp53ybp+aMZaJBDGzumjYlR7Lg==","signatures":[{"sig":"MEUCIDYchr563rAR9pYx57xQg1aoBQ3yWeGOULx97gWgOjMuAiEAmTDt+yDgJik28VXz7BFHyjcuRi1j53EfFYuU8ZJU68w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":378857},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"fd1447a1714ddc4d267d0533c76726397999faab","scripts":{"lint":"eslint \"src/**/*.{ts,tsx}\"","test":"jest","build":"tsc","watch":"tsc --watch","test:ci":"jest --coverage --watchAll=false","typecheck":"tsc --noEmit","test:watch":"jest --watch","test:coverage":"jest --coverage","prepublishOnly":"yarn build"},"_npmUser":{"name":"merki230","email":"merkitoko@gmail.com"},"repository":{"url":"git+https://github.com/abtasty/qa-assistant-react-native.git","type":"git"},"_npmVersion":"11.9.0","description":"QA Assistant for ABTasty Feature Experimentation in React Native","directories":{},"_nodeVersion":"24.14.0","dependencies":{"react-native-svg":"^15.15.1","react-native-tab-view":"^4.2.2","react-native-pager-view":"^8.0.0","@react-navigation/native":"^7.1.26","react-native-safe-area-context":"^5.6.2","@react-navigation/material-top-tabs":"^7.4.11"},"_hasShrinkwrap":false,"packageManager":"yarn@4.11.0+sha512.4e54aeace9141df2f0177c266b05ec50dc044638157dae128c471ba65994ac802122d7ab35bcd9e81641228b7dcf24867d28e750e0bcae8a05277d600008ad54","devDependencies":{"jest":"^30.2.0","eslint":"^9.0.0","ts-jest":"^29.4.6","typescript":"^5.9.3","@types/jest":"^30.0.0","react-test-renderer":"19","jest-environment-jsdom":"^30.2.0","@typescript-eslint/parser":"^8.0.0","@types/react-test-renderer":"19","@testing-library/jest-native":"^5.4.3","@testing-library/react-hooks":"^8.0.1","@testing-library/react-native":"^12.5.2","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0","@flagship.io/react-native-sdk":">=5.1.0"},"_npmOperationalInternal":{"tmp":"tmp/qa-assistant-react-native_1.0.0_1774465375328_0.3844169461850453","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-03-25T19:02:55.217Z","modified":"2026-09-08T07:09:00.448Z","1.0.0":"2026-03-25T19:02:55.491Z"},"bugs":{"url":"https://github.com/abtasty/qa-assistant-react-native/issues"},"author":{"name":"ABTasty"},"license":"Apache-2.0","homepage":"https://github.com/abtasty/qa-assistant-react-native#readme","keywords":["abtasty","flagship","qa","testing","react-native","feature-flags","ab-testing"],"repository":{"url":"git+https://github.com/abtasty/qa-assistant-react-native.git","type":"git"},"description":"QA Assistant for ABTasty Feature Experimentation in React Native","maintainers":[{"email":"devops+npm@abtasty.com","name":"abtasty-user"},{"email":"pn79122821224@gmail.com","name":"j.u.p.iter"},{"email":"tanguy@abtasty.com","name":"tcoppin_"},{"email":"jonathan@abtasty.com","name":"jonathangranger"},{"email":"alexandre.binet@abtasty.com","name":"alexbinet"},{"email":"aditya.anand@vwo.com","name":"adityanand"},{"email":"anuj.bansal@vwo.com","name":"anujbansal"},{"email":"cyril.quandalle@abtasty.com","name":"cquandalle"},{"email":"benoit.dubus@abtasty.com","name":"benoitdubus"},{"email":"Jean-baptiste.agostin@abtasty.com","name":"jean-baptiste.agostin"},{"email":"simen.bjerkeset@abtasty.com","name":"simenbjerkeset"},{"email":"pierre.vinarnick@abtasty.com","name":"pierrevinarnick"},{"email":"julien.niedzwiecki@abtasty.com","name":"julien_niedzwiecki"},{"email":"balint.fulop@abtasty.com","name":"balintfulop"},{"email":"merkitoko@gmail.com","name":"merki230"},{"email":"camille.gouaultlamour@abtasty.com","name":"camille.gouaultlamour"},{"email":"enzo.morvan@abtasty.com","name":"enzo.morvan"},{"email":"guillaume.nicolas@abtasty.com","name":"gnicolas.abtasty"},{"email":"alexander.hermani@abtasty.com","name":"alexabt"},{"email":"amrita.tiwari@abtasty.com","name":"tiwariamrita"},{"email":"chloe.adrian@abtasty.com","name":"chloeadr"},{"email":"teo.montlouis-calixte@abtasty.com","name":"tastymoca"},{"email":"corey167@gmail.com","name":"mick_mikhail"},{"email":"mamadou.ndiaye@abtasty.com","name":"mndiaye"},{"email":"stepan.vasnevsky.ext@abtasty.com","name":"stepan-abtasty"},{"email":"jean.szleper@abtasty.com","name":"jeanszleper-abtasty"},{"email":"magomed.daudov.ext@abtasty.com","name":"magomedcharto"},{"email":"anthony.baussard@abtasty.com","name":"anthony-baussard-abtasty"},{"email":"cedric.vimont@abtasty.com","name":"cedric.vimont"},{"email":"antoine.witkowski@abtasty.com","name":"antoine.witkowski"},{"email":"aria.vahidi@abtasty.com","name":"aria_v2000"},{"email":"pavel.sprygin.ext@abtasty.com","name":"pavel.sprygin.ext"},{"email":"roman.lavrov.ext@abtasty.com","name":"rlavrov-abtasty"},{"email":"amine.bouchebaba@abtasty.com","name":"amine.bouchebaba"},{"email":"clement.bock@abtasty.com","name":"clement.bock.abtasty"},{"email":"igor.goncharenko@abtasty.com","name":"igor.goncharenko"},{"email":"karim.dalaize@abtasty.com","name":"karim.d98"},{"email":"mael.ajrouche@abtasty.com","name":"maelaj"},{"email":"kanishka.singhal@wingify.com","name":"kanishkasinghal"},{"email":"deepak.chaudhary@wingify.com","name":"deepakchaudhary07"},{"email":"infra.abtasty@wingify.com","name":"infraabtasty"},{"email":"liliia.zhukova@abtasty.com","name":"lily_zh"},{"email":"valentin.malemanche@abtasty.com","name":"valentin-malemanche"},{"email":"benoit.allibe@abtasty.com","name":"benoit.allibe"},{"email":"matthieu.nogueron@abtasty.com","name":"mnogueron-abtasty"},{"email":"henri.petrelli@abtasty.com","name":"ab-henri-petrelli"},{"email":"gaetan.postorivo@abtasty.com","name":"gaetan.p"},{"email":"kant.chhim@abtasty.com","name":"kanthann"},{"email":"manish.kumar1@wingify.com","name":"manish144"},{"email":"anmol.kurmi@wingify.com","name":"anmolkurmi"},{"email":"philippe.henoch@abtasty.com","name":"usernameforme"},{"email":"nitish.mittal@wingify.com","name":"nitishmittal_wingify"},{"email":"gaetan+npm@abtasty.com","name":"gaetan-philippot-abt2"},{"email":"roman.surkov.ext@abtasty.com","name":"romanabtasty"},{"email":"axel.viskovic@abtasty.com","name":"axelviskovic"},{"email":"antoine.delprat@abtasty.com","name":"a.delprat"},{"email":"calice.lefevre@abtasty.com","name":"calice"},{"email":"isabelle.gautier@abtasty.com","name":"isabellegautier"},{"email":"audren.mauplot@abtasty.com","name":"audren"},{"email":"eshwar.tillaisababady@abtasty.com","name":"eshwar_abtasty"},{"email":"victor.duveau@abtasty.com","name":"victor.duveau"},{"email":"stephane.chimy@abtasty.com","name":"stephanec"},{"email":"vidal.nono.chiamegne@abtasty.com","name":"vidal-abtasty"},{"email":"vasily.kuplevich.ext@abtasty.com","name":"vasily.kuplevich.ext"},{"email":"indra.tinot.patole@abtasty.com","name":"indraabt"},{"email":"anya.kurrimboccus@abtasty.com","name":"anya117"},{"email":"ragularatnam.perinparatnam@abtasty.com","name":"ragularatnam"},{"email":"alexandre.fritsch@abtasty.com","name":"alexandre.fritsch"},{"email":"andres.munoz@abtasty.com","name":"andres.munoz.abtasty"},{"email":"hema.lambert@abtasty.com","name":"hemalambert"},{"email":"yannick.eyl@abtasty.com","name":"yannickabtasty"},{"email":"samuel.barubiriza@abtasty.com","name":"samuel_barubiriza"},{"email":"leo.coyere@abtasty.com","name":"leo.coyere-abt"}],"readme":"# ABTasty QA Assistant for React Native\n\n[![CI](https://github.com/flagship-io/abtasty-qa-assistant-react-native/actions/workflows/ci.yml/badge.svg)](https://github.com/flagship-io/abtasty-qa-assistant-react-native/actions/workflows/ci.yml)\n\nA visual testing tool for React Native applications that integrates with ABTasty Feature Experimentation. It provides a floating UI overlay that allows developers and QA engineers to test campaign variations and feature flags without backend changes or app redeployment.\n\n> **Full documentation**: [docs.abtasty.com/server-side/sdks/react-native/abtasty-qa-assistant-for-react-native](https://docs.abtasty.com/server-side/sdks/react-native/abtasty-qa-assistant-for-react-native)  \n> **Usage guide**: [docs.abtasty.com/server-side/concepts/using-abtasty-qa-assistant](https://docs.abtasty.com/server-side/concepts/using-abtasty-qa-assistant)\n\n## Key Features\n\n- **Force variations** - Switch to a specific variation within a campaign\n- **Force allocation** - Make a rejected campaign available for testing\n- **Hide campaign** - Hide accepted campaigns to test exclusion scenarios\n- **Real-time event monitoring** - Track all SDK events for integration verification\n- **Context inspection** - View visitor data and targeting rules\n- **Search & filter** - Quickly find specific campaigns and events\n\n> **Note:** Forced allocations, variations, and hidden campaigns are temporary. They reset when you disable QA mode or restart the app. Everything returns to natural allocation automatically.\n\n## Prerequisites\n\n- `@flagship.io/react-native-sdk` >= 5.1.0\n- `react` >= 18.0.0\n- `react-native` >= 0.70.0\n\n## Installation\n\n### 1. Install Flagship SDK (if not already installed)\n\n```bash\n# Using npm\nnpm install @flagship.io/react-native-sdk\n\n# Using yarn\nyarn add @flagship.io/react-native-sdk\n```\n\n### 2. Install the Package\n\n```bash\n# Using npm\nnpm install @abtasty/qa-assistant-react-native\n\n# Using yarn\nyarn add @abtasty/qa-assistant-react-native\n```\n\n## Integration\n\n### Quick Start\n\nAdd the QA Assistant to your app in two steps.\n\n#### Step 1 - Enable QA Mode in FlagshipProvider\n\n```tsx\n// Import FlagshipProvider from the Flagship React Native SDK\nimport { FlagshipProvider } from '@flagship.io/react-native-sdk';\n// Import QAAssistant from the QA Assistant package\nimport { QAAssistant } from '@abtasty/qa-assistant-react-native';\n\nexport default function App() {\n  return (\n    // Wrap your app with FlagshipProvider to enable the Flagship SDK\n    <FlagshipProvider\n      envId=\"YOUR_ENV_ID\"         // Your ABTasty environment ID\n      apiKey=\"YOUR_API_KEY\"       // Your ABTasty API key\n      isQAModeEnabled={true}      // REQUIRED: enables the QA Assistant overlay\n      visitorData={{\n        id: 'visitor_id',         // Unique identifier for the visitor\n        hasConsented: true,       // GDPR consent flag\n        context: { platform: 'mobile' }  // Targeting context attributes\n      }}\n    >\n      <YourApp />\n      {/* Mount QAAssistant inside FlagshipProvider so it can access the SDK */}\n      <QAAssistant />\n    </FlagshipProvider>\n  );\n}\n```\n\n> **Important:** `isQAModeEnabled={true}` is required. Without it, the QA Assistant will not render.\n\n#### Step 2 - Development-Only Usage\n\nEnsure the QA Assistant only appears in development builds:\n\n```tsx\nexport default function App() {\n  return (\n    <FlagshipProvider {...props}>\n      <YourApp />\n      {/* Render QAAssistant only in development mode.\n          This prevents the overlay from being bundled in production releases. */}\n      {__DEV__ && <QAAssistant />}\n    </FlagshipProvider>\n  );\n}\n```\n\n## Configuration\n\nCustomize the QA Assistant appearance:\n\n```tsx\n<QAAssistant\n  config={{\n    position: \"bottom-right\",  // \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\"\n  }}\n/>\n```\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `position` | `'top-right' \\| 'top-left' \\| 'bottom-right' \\| 'bottom-left'` | `'bottom-right'` | Position of the floating button |\n\n## Complete Example\n\n```tsx\nimport React from 'react';\nimport { StyleSheet, View, Text } from 'react-native';\nimport { FlagshipProvider, useFsFlag } from '@flagship.io/react-native-sdk';\nimport { QAAssistant } from '@abtasty/qa-assistant-react-native';\n\nfunction MyApp() {\n  // Retrieve feature flag values reactively from the SDK\n  const welcomeMessage = useFsFlag('welcome_message');\n  const showNewFeature = useFsFlag('show_new_feature');\n\n  return (\n    <View style={styles.container}>\n      <Text style={styles.title}>\n        {welcomeMessage.getValue('Welcome!')}\n      </Text>\n      {showNewFeature.getValue(false) && (\n        <Text>New Feature Enabled</Text>\n      )}\n    </View>\n  );\n}\n\nexport default function App() {\n  return (\n    <FlagshipProvider\n      envId=\"YOUR_ENV_ID\"\n      apiKey=\"YOUR_API_KEY\"\n      isQAModeEnabled={true}\n      visitorData={{\n        id: 'test_visitor_123',\n        hasConsented: true,\n        context: {\n          platform: 'mobile',\n          userType: 'free'\n        }\n      }}\n    >\n      <MyApp />\n      {/* Only include QAAssistant in development builds */}\n      {__DEV__ && (\n        <QAAssistant config={{ position: \"bottom-right\" }} />\n      )}\n    </FlagshipProvider>\n  );\n}\n\nconst styles = StyleSheet.create({\n  container: { flex: 1, padding: 20 },\n  title: { fontSize: 24, fontWeight: 'bold' }\n});\n```\n\n## Best Practices\n\n**DO:**\n- Always use `isQAModeEnabled={true}` in `FlagshipProvider`\n- Place `QAAssistant` inside `FlagshipProvider`\n- Use conditional rendering (`__DEV__`) to exclude from production\n- Use SDK hooks to ensure flag changes are reactive\n\n**DON'T:**\n- Never include QA Assistant in production builds\n- Don't place `QAAssistant` outside `FlagshipProvider`\n- Don't hardcode flag values — always use SDK hooks\n\n> **Warning:** The QA Assistant must **never** be included in production builds. Exposing QA mode in production allows anyone to view all campaign configurations, force any variation, see internal feature flags, and monitor SDK events.\n\n## Troubleshooting\n\n### QA Assistant not showing\n\n1. Verify `isQAModeEnabled` is set to `true`:\n   ```tsx\n   <FlagshipProvider isQAModeEnabled={true} {...props}>\n   ```\n2. Ensure `QAAssistant` is inside `FlagshipProvider`:\n   ```tsx\n   <FlagshipProvider>\n     <App />\n     <QAAssistant />  {/* ✓ Correct placement */}\n   </FlagshipProvider>\n   ```\n3. Check conditional rendering — verify `__DEV__` is `true`:\n   ```tsx\n   console.log('__DEV__:', __DEV__);\n   {__DEV__ && <QAAssistant />}\n   ```\n4. Clear cache and reinstall:\n   ```bash\n   rm -rf node_modules && yarn install\n   npx react-native start --reset-cache\n   ```\n\n### Console warnings\n\n**\"Not able to access Flagship SDK instance\"**\n\n```tsx\n// ✗ Wrong — QAAssistant outside FlagshipProvider\n<>\n  <FlagshipProvider {...props}>\n    <App />\n  </FlagshipProvider>\n  <QAAssistant />\n</>\n\n// ✓ Correct\n<FlagshipProvider {...props}>\n  <App />\n  <QAAssistant />\n</FlagshipProvider>\n```\n\nAlso ensure the SDK version is `>= 5.1.0`:\n```bash\nyarn add @flagship.io/react-native-sdk@latest\n```\n\n**\"QA mode not enabled\"** — Add `isQAModeEnabled={true}` to `FlagshipProvider`.\n\n**\"No valid envId configured\"** — Verify the `envId` prop is set correctly.\n\n### Campaigns not appearing\n\n1. No campaigns configured — check ABTasty platform\n2. Network issues — verify `bucketing.json` loads correctly\n3. Wrong environment — ensure you are using the correct `envId`\n4. SDK initialization — wait a few seconds after app launch\n\n### Forced variations not applying\n\nUse SDK hooks — ensure you are using `useFsFlag()`:\n\n```tsx\n// ✗ Wrong — hardcoded\nconst message = \"Welcome\";\n\n// ✓ Correct — using SDK\nconst messageFlag = useFsFlag('welcome_message');\nconst message = messageFlag.getValue('Welcome');\n```\n\n### Floating button overlapping UI\n\nChange the position:\n\n```tsx\n<QAAssistant config={{ position: \"top-left\" }} />\n```\n\n## Frequently Asked Questions\n\n**Q: Do forced allocations persist after app restart?**  \nA: No. All forced allocations, hidden campaigns, and variations reset automatically when you disable QA mode (`isQAModeEnabled={false}`) or restart the app. This is by design to ensure a clean state and prevent accidental forced states in production.\n\n**Q: Can I force multiple campaigns at once?**  \nA: Yes. Each forced variation, allocation, and hidden campaign is independent.\n\n**Q: What is the difference between forcing a variation, allocation, and hiding a campaign?**\n\n| Action | Description |\n|--------|-------------|\n| Force variation | Switches to a specific variation within a campaign you are already allocated to |\n| Force allocation | Makes a campaign that rejected you available for testing |\n| Hide campaign | Hides an accepted campaign to simulate exclusion scenarios |\n\n**Q: Can I use QA Assistant in production?**  \nA: No. Always use `{__DEV__ && <QAAssistant />}` to exclude it from production.\n\n**Q: Does QA Assistant work offline?**  \nA: Initial load requires network to fetch campaigns. After that, it works offline with cached data.\n\n**Q: Can I force variations programmatically?**  \nA: QA Assistant is for manual testing. For automated tests, use Flagship SDK methods directly with controlled context values.\n\n## Requirements\n\n- React Native >= 0.70.0\n- React >= 18.0.0\n- @flagship.io/react-native-sdk >= 5.1.0\n\n## License\n\nApache-2.0\n\n## Support\n\n- GitHub: [abtasty/qa-assistant-react-native](https://github.com/abtasty/qa-assistant-react-native)\n- Documentation: [docs.abtasty.com/server-side/sdks/react-native/abtasty-qa-assistant-for-react-native](https://docs.abtasty.com/server-side/sdks/react-native/abtasty-qa-assistant-for-react-native)\n- Flagship SDK docs: [docs.developers.flagship.io](https://docs.developers.flagship.io/)\n- ABTasty Support: https://support.abtasty.com/\n\n## Changelog\n\n### v1.0.0\n\n- Initial release\n- Campaign viewing, forcing, and hiding\n- Force allocation for rejected campaigns\n- Real-time event monitoring\n- Context inspection\n- Search & filter\n- Floating button UI with configurable position\n- TypeScript support\n","readmeFilename":"README.md"}