react-native-inapp-inspector 2.5.12 → 2.5.13

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.
Files changed (186) hide show
  1. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  2. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  3. package/android/.gradle/8.9/executionHistory/executionHistory.lock +0 -0
  4. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  5. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  6. package/android/.gradle/8.9/gc.properties +0 -0
  7. package/android/.gradle/9.2.0/checksums/checksums.lock +0 -0
  8. package/android/.gradle/9.2.0/fileChanges/last-build.bin +0 -0
  9. package/android/.gradle/9.2.0/fileHashes/fileHashes.bin +0 -0
  10. package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
  11. package/android/.gradle/9.2.0/gc.properties +0 -0
  12. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  13. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  14. package/android/.gradle/vcs-1/gc.properties +0 -0
  15. package/android/.settings/org.eclipse.buildship.core.prefs +13 -0
  16. package/android/src/main/AndroidManifest.xml +11 -0
  17. package/android/src/main/java/com/inappinspector/NetworkInspectorModule.kt +379 -19
  18. package/android/src/main/res/xml/inappinspector_file_paths.xml +7 -0
  19. package/dist/commonjs/components/Inspector/AnalyticsFilterModal.js +47 -49
  20. package/dist/commonjs/components/Inspector/BoxModelVisualizer.d.ts +8 -0
  21. package/dist/commonjs/components/Inspector/BoxModelVisualizer.js +76 -0
  22. package/dist/commonjs/components/Inspector/ConsoleExportModal.js +51 -51
  23. package/dist/commonjs/components/Inspector/CrashTab.js +17 -17
  24. package/dist/commonjs/components/Inspector/DebuggingTab.js +24 -24
  25. package/dist/commonjs/components/Inspector/DeviceInfoTab.js +2 -2
  26. package/dist/commonjs/components/Inspector/FabLauncher.js +2 -2
  27. package/dist/commonjs/components/Inspector/FloatingCaptureWidget.js +2 -2
  28. package/dist/commonjs/components/Inspector/InspectorHeader.js +10 -10
  29. package/dist/commonjs/components/Inspector/MediaGalleryTab.js +10 -10
  30. package/dist/commonjs/components/Inspector/MediaPreviewModal.d.ts +1 -0
  31. package/dist/commonjs/components/Inspector/MediaPreviewModal.js +222 -222
  32. package/dist/commonjs/components/Inspector/NetworkExportModal.d.ts +10 -0
  33. package/dist/commonjs/components/Inspector/NetworkExportModal.js +333 -0
  34. package/dist/commonjs/components/Inspector/NetworkTab.js +48 -41
  35. package/dist/commonjs/components/Inspector/NpmStarPrompt.js +11 -12
  36. package/dist/commonjs/components/Inspector/ReduxDetail.js +17 -19
  37. package/dist/commonjs/components/Inspector/ReduxTab.js +5 -5
  38. package/dist/commonjs/components/Inspector/SettingsPanel.js +3 -6
  39. package/dist/commonjs/components/Inspector/SocketCard.js +2 -2
  40. package/dist/commonjs/components/Inspector/SupportPage.js +5 -5
  41. package/dist/commonjs/components/Inspector/UiA11yAuditPanel.d.ts +7 -0
  42. package/dist/commonjs/components/Inspector/UiA11yAuditPanel.js +97 -0
  43. package/dist/commonjs/components/Inspector/UiInspectorDetail.d.ts +2 -0
  44. package/dist/commonjs/components/Inspector/UiInspectorDetail.js +485 -0
  45. package/dist/commonjs/components/Inspector/UiInspectorOverlay.d.ts +2 -0
  46. package/dist/commonjs/components/Inspector/UiInspectorOverlay.js +199 -0
  47. package/dist/commonjs/components/Inspector/UiInspectorTab.d.ts +2 -0
  48. package/dist/commonjs/components/Inspector/UiInspectorTab.js +117 -0
  49. package/dist/commonjs/components/Inspector/UiLiveStyleTweaker.d.ts +10 -0
  50. package/dist/commonjs/components/Inspector/UiLiveStyleTweaker.js +148 -0
  51. package/dist/commonjs/components/Inspector/index.d.ts +28 -0
  52. package/dist/commonjs/components/Inspector/index.js +1 -0
  53. package/dist/commonjs/components/LogCard.js +9 -7
  54. package/dist/commonjs/constants/index.js +1 -1
  55. package/dist/commonjs/constants/telemetryConfig.d.ts +3 -3
  56. package/dist/commonjs/constants/telemetryConfig.js +1 -1
  57. package/dist/commonjs/constants/version.d.ts +1 -1
  58. package/dist/commonjs/constants/version.js +1 -1
  59. package/dist/commonjs/customHooks/crashHandler.d.ts +1 -1
  60. package/dist/commonjs/customHooks/crashHandler.js +6 -6
  61. package/dist/commonjs/customHooks/uiInspectorManager.d.ts +22 -0
  62. package/dist/commonjs/customHooks/uiInspectorManager.js +1 -0
  63. package/dist/commonjs/helpers/index.js +1 -3
  64. package/dist/commonjs/helpers/searchQueryParser.d.ts +1 -0
  65. package/dist/commonjs/helpers/searchQueryParser.js +7 -5
  66. package/dist/commonjs/helpers/shareFormatter.d.ts +16 -0
  67. package/dist/commonjs/helpers/shareFormatter.js +16 -9
  68. package/dist/commonjs/helpers/uiInspectorEngine.d.ts +62 -0
  69. package/dist/commonjs/helpers/uiInspectorEngine.js +19 -0
  70. package/dist/commonjs/i18n/locales/ar.json +1 -1
  71. package/dist/commonjs/i18n/locales/bn.json +1 -1
  72. package/dist/commonjs/i18n/locales/de.json +1 -1
  73. package/dist/commonjs/i18n/locales/en.json +1 -1
  74. package/dist/commonjs/i18n/locales/es.json +1 -1
  75. package/dist/commonjs/i18n/locales/fr.json +1 -1
  76. package/dist/commonjs/i18n/locales/gu.json +1 -1
  77. package/dist/commonjs/i18n/locales/hi.json +1 -1
  78. package/dist/commonjs/i18n/locales/id.json +1 -1
  79. package/dist/commonjs/i18n/locales/it.json +1 -1
  80. package/dist/commonjs/i18n/locales/ja.json +1 -1
  81. package/dist/commonjs/i18n/locales/kn.json +1 -1
  82. package/dist/commonjs/i18n/locales/ko.json +1 -1
  83. package/dist/commonjs/i18n/locales/ml.json +1 -1
  84. package/dist/commonjs/i18n/locales/mr.json +1 -1
  85. package/dist/commonjs/i18n/locales/nl.json +1 -1
  86. package/dist/commonjs/i18n/locales/pa.json +1 -1
  87. package/dist/commonjs/i18n/locales/pl.json +1 -1
  88. package/dist/commonjs/i18n/locales/pt.json +1 -1
  89. package/dist/commonjs/i18n/locales/ru.json +1 -1
  90. package/dist/commonjs/i18n/locales/ta.json +1 -1
  91. package/dist/commonjs/i18n/locales/te.json +1 -1
  92. package/dist/commonjs/i18n/locales/tr.json +1 -1
  93. package/dist/commonjs/i18n/locales/vi.json +1 -1
  94. package/dist/commonjs/i18n/locales/zh.json +1 -1
  95. package/dist/commonjs/index.d.ts +3 -1
  96. package/dist/commonjs/index.js +3 -3
  97. package/dist/commonjs/native/NativeInspector.d.ts +2 -0
  98. package/dist/commonjs/native/NativeInspector.js +1 -1
  99. package/dist/commonjs/native/NativeNetworkInspector.d.ts +2 -0
  100. package/dist/commonjs/types/editor.d.ts +31 -0
  101. package/dist/esm/components/Inspector/AnalyticsFilterModal.js +73 -75
  102. package/dist/esm/components/Inspector/BoxModelVisualizer.d.ts +8 -0
  103. package/dist/esm/components/Inspector/BoxModelVisualizer.js +76 -0
  104. package/dist/esm/components/Inspector/ConsoleExportModal.js +67 -67
  105. package/dist/esm/components/Inspector/CrashTab.js +58 -58
  106. package/dist/esm/components/Inspector/DebuggingTab.js +89 -89
  107. package/dist/esm/components/Inspector/DeviceInfoTab.js +2 -2
  108. package/dist/esm/components/Inspector/FabLauncher.js +21 -21
  109. package/dist/esm/components/Inspector/FloatingCaptureWidget.js +23 -23
  110. package/dist/esm/components/Inspector/InspectorHeader.js +26 -26
  111. package/dist/esm/components/Inspector/MediaGalleryTab.js +151 -151
  112. package/dist/esm/components/Inspector/MediaPreviewModal.d.ts +1 -0
  113. package/dist/esm/components/Inspector/MediaPreviewModal.js +468 -468
  114. package/dist/esm/components/Inspector/NetworkExportModal.d.ts +10 -0
  115. package/dist/esm/components/Inspector/NetworkExportModal.js +333 -0
  116. package/dist/esm/components/Inspector/NetworkTab.js +118 -111
  117. package/dist/esm/components/Inspector/NpmStarPrompt.js +32 -33
  118. package/dist/esm/components/Inspector/ReduxDetail.js +54 -56
  119. package/dist/esm/components/Inspector/ReduxTab.js +9 -9
  120. package/dist/esm/components/Inspector/SettingsPanel.js +3 -6
  121. package/dist/esm/components/Inspector/SocketCard.js +13 -13
  122. package/dist/esm/components/Inspector/SupportPage.js +5 -5
  123. package/dist/esm/components/Inspector/UiA11yAuditPanel.d.ts +7 -0
  124. package/dist/esm/components/Inspector/UiA11yAuditPanel.js +97 -0
  125. package/dist/esm/components/Inspector/UiInspectorDetail.d.ts +2 -0
  126. package/dist/esm/components/Inspector/UiInspectorDetail.js +422 -0
  127. package/dist/esm/components/Inspector/UiInspectorOverlay.d.ts +2 -0
  128. package/dist/esm/components/Inspector/UiInspectorOverlay.js +138 -0
  129. package/dist/esm/components/Inspector/UiInspectorTab.d.ts +2 -0
  130. package/dist/esm/components/Inspector/UiInspectorTab.js +117 -0
  131. package/dist/esm/components/Inspector/UiLiveStyleTweaker.d.ts +10 -0
  132. package/dist/esm/components/Inspector/UiLiveStyleTweaker.js +148 -0
  133. package/dist/esm/components/Inspector/index.d.ts +28 -0
  134. package/dist/esm/components/Inspector/index.js +1 -0
  135. package/dist/esm/components/LogCard.js +57 -55
  136. package/dist/esm/constants/index.js +1 -1
  137. package/dist/esm/constants/telemetryConfig.d.ts +3 -3
  138. package/dist/esm/constants/telemetryConfig.js +1 -1
  139. package/dist/esm/constants/version.d.ts +1 -1
  140. package/dist/esm/constants/version.js +1 -1
  141. package/dist/esm/customHooks/crashHandler.d.ts +1 -1
  142. package/dist/esm/customHooks/crashHandler.js +6 -6
  143. package/dist/esm/customHooks/uiInspectorManager.d.ts +22 -0
  144. package/dist/esm/customHooks/uiInspectorManager.js +1 -0
  145. package/dist/esm/helpers/index.js +4 -6
  146. package/dist/esm/helpers/searchQueryParser.d.ts +1 -0
  147. package/dist/esm/helpers/searchQueryParser.js +7 -5
  148. package/dist/esm/helpers/shareFormatter.d.ts +16 -0
  149. package/dist/esm/helpers/shareFormatter.js +20 -13
  150. package/dist/esm/helpers/uiInspectorEngine.d.ts +48 -0
  151. package/dist/esm/helpers/uiInspectorEngine.js +19 -0
  152. package/dist/esm/i18n/locales/ar.json +1 -1
  153. package/dist/esm/i18n/locales/bn.json +1 -1
  154. package/dist/esm/i18n/locales/de.json +1 -1
  155. package/dist/esm/i18n/locales/en.json +1 -1
  156. package/dist/esm/i18n/locales/es.json +1 -1
  157. package/dist/esm/i18n/locales/fr.json +1 -1
  158. package/dist/esm/i18n/locales/gu.json +1 -1
  159. package/dist/esm/i18n/locales/hi.json +1 -1
  160. package/dist/esm/i18n/locales/id.json +1 -1
  161. package/dist/esm/i18n/locales/it.json +1 -1
  162. package/dist/esm/i18n/locales/ja.json +1 -1
  163. package/dist/esm/i18n/locales/kn.json +1 -1
  164. package/dist/esm/i18n/locales/ko.json +1 -1
  165. package/dist/esm/i18n/locales/ml.json +1 -1
  166. package/dist/esm/i18n/locales/mr.json +1 -1
  167. package/dist/esm/i18n/locales/nl.json +1 -1
  168. package/dist/esm/i18n/locales/pa.json +1 -1
  169. package/dist/esm/i18n/locales/pl.json +1 -1
  170. package/dist/esm/i18n/locales/pt.json +1 -1
  171. package/dist/esm/i18n/locales/ru.json +1 -1
  172. package/dist/esm/i18n/locales/ta.json +1 -1
  173. package/dist/esm/i18n/locales/te.json +1 -1
  174. package/dist/esm/i18n/locales/tr.json +1 -1
  175. package/dist/esm/i18n/locales/vi.json +1 -1
  176. package/dist/esm/i18n/locales/zh.json +1 -1
  177. package/dist/esm/index.d.ts +3 -1
  178. package/dist/esm/index.js +7 -7
  179. package/dist/esm/native/NativeInspector.d.ts +2 -0
  180. package/dist/esm/native/NativeInspector.js +1 -1
  181. package/dist/esm/native/NativeNetworkInspector.d.ts +2 -0
  182. package/dist/esm/types/editor.d.ts +31 -0
  183. package/ios/NetworkInspectorModule.mm +314 -16
  184. package/package.json +1 -1
  185. package/src/native/NativeInspector.ts +37 -0
  186. package/src/native/NativeNetworkInspector.ts +2 -0
@@ -1,43 +1,43 @@
1
- import{useEffect as Se,useMemo as q,useState as ve}from"react";import{Modal as Ce,Pressable as Ae,ScrollView as Ie,StyleSheet as Y,Text as T,TouchableOpacity as R,View as P}from"react-native";import{useInspector as ze}from"./InspectorContext";import{AppColors as l}from"../../styles/AppColors";import{AppFonts as A}from"../../styles/AppFonts";import{getEventCategory as Be}from"../../helpers";import{FilterIcon as Ve,CloseWhite as Re,CheckIcon as L,CartIcon as We,GlobeIcon as Oe,BoltIcon as Z,SparkleIcon as J,MoneyIcon as M,ClockIcon as $,HourglassIcon as _e,FlameIcon as Ee,PinIcon as K,RepeatIcon as De,TargetGoalIcon as X,UserIcon as Q,UserCheckIcon as Fe,PackageBoxIcon as He,CodeBracketsIcon as Te}from"../NetworkIcons";import S from"../TouchableScale";const Ne=({visible:W,onClose:G})=>{const{analyticsEvents:z,analyticsSearch:O,analyticsFilters:v,setAnalyticsFilters:pe}=ze(),[t,C]=ve(()=>({...v,categories:new Set(v.categories),screens:new Set(v.screens),sources:new Set(v.sources||["all"]),userTypes:new Set(v.userTypes||["all"])}));Se(()=>{W&&C({...v,categories:new Set(v.categories),screens:new Set(v.screens),sources:new Set(v.sources||["all"]),userTypes:new Set(v.userTypes||["all"])})},[W,v]);const _=q(()=>{const s=new Set;for(const i of z){const r=i.screenName||i.params?.firebase_screen||i.params?.screen_name||i.params?.firebase_screen_class||i.screenClass;r&&typeof r=="string"&&r.trim()!==""&&s.add(r.trim())}return Array.from(s)},[z]),I=s=>{C(i=>{const r=new Set(i.categories);return s==="all"?{...i,categories:new Set(["all"])}:(r.delete("all"),r.has(s)?(r.delete(s),r.size===0&&r.add("all")):r.add(s),{...i,categories:r})})},me=s=>{C(i=>{const r=new Set(i.screens);return r.has(s)?r.delete(s):r.add(s),{...i,screens:r}})},E=s=>{C(i=>{const r=new Set(i.sources);return s==="all"?{...i,sources:new Set(["all"])}:(r.delete("all"),r.has(s)?(r.delete(s),r.size===0&&r.add("all")):r.add(s),{...i,sources:r})})},D=s=>{C(i=>{const r=new Set(i.userTypes);return s==="all"?{...i,userTypes:new Set(["all"])}:(r.delete("all"),r.has(s)?(r.delete(s),r.size===0&&r.add("all")):r.add(s),{...i,userTypes:r})})},k=s=>{C(i=>({...i,[s]:!i[s]}))},Pe=s=>{C(i=>({...i,timeWindow:s}))},we=s=>{C(i=>({...i,payloadComplexity:s}))},B=s=>{C(i=>({...i,sortBy:s}))},ge=()=>{C({categories:new Set(["all"]),screens:new Set,sources:new Set(["all"]),userTypes:new Set(["all"]),timeWindow:"all",payloadComplexity:"all",hasRevenue:!1,hasItems:!1,hasUserProps:!1,hasParams:!1,onlyDuplicates:!1,onlyConversions:!1,sortBy:"time_desc"})},xe=()=>{pe({...t,categories:new Set(t.categories),screens:new Set(t.screens),sources:new Set(t.sources),userTypes:new Set(t.userTypes)}),G()},V=()=>{C({...v,categories:new Set(v.categories),screens:new Set(v.screens),sources:new Set(v.sources||["all"]),userTypes:new Set(v.userTypes||["all"])}),G()},be=q(()=>{let s=z;if(O){const i=O.toLowerCase();s=s.filter(r=>r.name.toLowerCase().includes(i)||JSON.stringify(r.params||{}).toLowerCase().includes(i)||(r.screenName??"").toLowerCase().includes(i)||(r.pageTitle??"").toLowerCase().includes(i))}if(t.categories.size>0&&!t.categories.has("all")&&(s=s.filter(i=>{const r=Be(i.name);return t.categories.has(r)})),t.timeWindow!=="all"){const i=Date.now(),r=t.timeWindow==="1m"?i-60*1e3:t.timeWindow==="5m"?i-300*1e3:t.timeWindow==="15m"?i-900*1e3:i-3600*1e3;s=s.filter(U=>U.timestamp>=r)}if(t.sources.size>0&&!t.sources.has("all")&&(s=s.filter(i=>t.sources.has(i.source||"manual"))),t.userTypes.size>0&&!t.userTypes.has("all")&&(s=s.filter(i=>{const r=!!(i.userId&&i.userId.trim()!=="");return!!(t.userTypes.has("identified")&&r||t.userTypes.has("anonymous")&&!r)})),t.payloadComplexity!=="all"&&(s=s.filter(i=>{const r=i.params?Object.keys(i.params).length:0;return t.payloadComplexity==="none"?r===0:t.payloadComplexity==="simple"?r>=1&&r<=5:t.payloadComplexity==="heavy"?r>5:!0})),t.onlyConversions){const i=["purchase","item_purchase","ecommerce_purchase","sign_up","login","lead","generate_lead","tutorial_complete","add_payment_info","begin_checkout"];s=s.filter(r=>i.some(U=>r.name.toLowerCase().includes(U)))}return t.screens.size>0&&(s=s.filter(i=>{const r=i.screenName||i.params?.firebase_screen||i.params?.screen_name||i.params?.firebase_screen_class||i.screenClass||"";return t.screens.has(r)})),t.hasRevenue&&(s=s.filter(i=>{const r=i.params?.value??i.params?.price;return r!=null&&Number(r)>0})),t.hasItems&&(s=s.filter(i=>Array.isArray(i.params?.items)&&i.params.items.length>0)),t.hasUserProps&&(s=s.filter(i=>i.userProperties&&Object.keys(i.userProperties).length>0)),t.hasParams&&(s=s.filter(i=>i.params&&Object.keys(i.params).length>0)),s.length},[z,O,t]),F=t.categories.has("all")||t.categories.size===0,H=t.sources.has("all")||t.sources.size===0,N=t.userTypes.has("all")||t.userTypes.size===0;return<Ce visible={W}transparent animationType="fade"onRequestClose={V}>
1
+ import{useEffect as Ae,useMemo as Y,useState as ke}from"react";import{Modal as Ie,Pressable as Be,ScrollView as Ve,StyleSheet as Z,Text as T,TouchableOpacity as R,View as P}from"react-native";import{useInspector as Re}from"./InspectorContext";import{t as w}from"../../i18n";import{AppColors as l}from"../../styles/AppColors";import{AppFonts as A}from"../../styles/AppFonts";import{getEventCategory as We}from"../../helpers";import{FilterIcon as Oe,CloseWhite as _e,CheckIcon as L,CartIcon as Ee,GlobeIcon as De,BoltIcon as J,SparkleIcon as K,MoneyIcon as M,ClockIcon as G,HourglassIcon as Fe,FlameIcon as Ue,PinIcon as X,RepeatIcon as He,TargetGoalIcon as Q,UserIcon as Te,UserCheckIcon as Ne,PackageBoxIcon as Le,CodeBracketsIcon as Pe}from"../NetworkIcons";import S from"../TouchableScale";const Me=({visible:W,onClose:$})=>{const{analyticsEvents:z,analyticsSearch:O,analyticsFilters:v,setAnalyticsFilters:we}=Re(),[t,C]=ke(()=>({...v,categories:new Set(v.categories),screens:new Set(v.screens),sources:new Set(v.sources||["all"]),userTypes:new Set(v.userTypes||["all"])}));Ae(()=>{W&&C({...v,categories:new Set(v.categories),screens:new Set(v.screens),sources:new Set(v.sources||["all"]),userTypes:new Set(v.userTypes||["all"])})},[W,v]);const _=Y(()=>{const s=new Set;for(const i of z){const r=i.screenName||i.params?.firebase_screen||i.params?.screen_name||i.params?.firebase_screen_class||i.screenClass;r&&typeof r=="string"&&r.trim()!==""&&s.add(r.trim())}return Array.from(s)},[z]),I=s=>{C(i=>{const r=new Set(i.categories);return s==="all"?{...i,categories:new Set(["all"])}:(r.delete("all"),r.has(s)?(r.delete(s),r.size===0&&r.add("all")):r.add(s),{...i,categories:r})})},ge=s=>{C(i=>{const r=new Set(i.screens);return r.has(s)?r.delete(s):r.add(s),{...i,screens:r}})},E=s=>{C(i=>{const r=new Set(i.sources);return s==="all"?{...i,sources:new Set(["all"])}:(r.delete("all"),r.has(s)?(r.delete(s),r.size===0&&r.add("all")):r.add(s),{...i,sources:r})})},D=s=>{C(i=>{const r=new Set(i.userTypes);return s==="all"?{...i,userTypes:new Set(["all"])}:(r.delete("all"),r.has(s)?(r.delete(s),r.size===0&&r.add("all")):r.add(s),{...i,userTypes:r})})},k=s=>{C(i=>({...i,[s]:!i[s]}))},xe=s=>{C(i=>({...i,timeWindow:s}))},be=s=>{C(i=>({...i,payloadComplexity:s}))},B=s=>{C(i=>({...i,sortBy:s}))},Se=()=>{C({categories:new Set(["all"]),screens:new Set,sources:new Set(["all"]),userTypes:new Set(["all"]),timeWindow:"all",payloadComplexity:"all",hasRevenue:!1,hasItems:!1,hasUserProps:!1,hasParams:!1,onlyDuplicates:!1,onlyConversions:!1,sortBy:"time_desc"})},ve=()=>{we({...t,categories:new Set(t.categories),screens:new Set(t.screens),sources:new Set(t.sources),userTypes:new Set(t.userTypes)}),$()},V=()=>{C({...v,categories:new Set(v.categories),screens:new Set(v.screens),sources:new Set(v.sources||["all"]),userTypes:new Set(v.userTypes||["all"])}),$()},Ce=Y(()=>{let s=z;if(O){const i=O.toLowerCase();s=s.filter(r=>r.name.toLowerCase().includes(i)||JSON.stringify(r.params||{}).toLowerCase().includes(i)||(r.screenName??"").toLowerCase().includes(i)||(r.pageTitle??"").toLowerCase().includes(i))}if(t.categories.size>0&&!t.categories.has("all")&&(s=s.filter(i=>{const r=We(i.name);return t.categories.has(r)})),t.timeWindow!=="all"){const i=Date.now(),r=t.timeWindow==="1m"?i-60*1e3:t.timeWindow==="5m"?i-300*1e3:t.timeWindow==="15m"?i-900*1e3:i-3600*1e3;s=s.filter(N=>N.timestamp>=r)}if(t.sources.size>0&&!t.sources.has("all")&&(s=s.filter(i=>t.sources.has(i.source||"manual"))),t.userTypes.size>0&&!t.userTypes.has("all")&&(s=s.filter(i=>{const r=!!(i.userId&&i.userId.trim()!=="");return!!(t.userTypes.has("identified")&&r||t.userTypes.has("anonymous")&&!r)})),t.payloadComplexity!=="all"&&(s=s.filter(i=>{const r=i.params?Object.keys(i.params).length:0;return t.payloadComplexity==="none"?r===0:t.payloadComplexity==="simple"?r>=1&&r<=5:t.payloadComplexity==="heavy"?r>5:!0})),t.onlyConversions){const i=["purchase","item_purchase","ecommerce_purchase","sign_up","login","lead","generate_lead","tutorial_complete","add_payment_info","begin_checkout"];s=s.filter(r=>i.some(N=>r.name.toLowerCase().includes(N)))}return t.screens.size>0&&(s=s.filter(i=>{const r=i.screenName||i.params?.firebase_screen||i.params?.screen_name||i.params?.firebase_screen_class||i.screenClass||"";return t.screens.has(r)})),t.hasRevenue&&(s=s.filter(i=>{const r=i.params?.value??i.params?.price;return r!=null&&Number(r)>0})),t.hasItems&&(s=s.filter(i=>Array.isArray(i.params?.items)&&i.params.items.length>0)),t.hasUserProps&&(s=s.filter(i=>i.userProperties&&Object.keys(i.userProperties).length>0)),t.hasParams&&(s=s.filter(i=>i.params&&Object.keys(i.params).length>0)),s.length},[z,O,t]),F=t.categories.has("all")||t.categories.size===0,U=t.sources.has("all")||t.sources.size===0,H=t.userTypes.has("all")||t.userTypes.size===0;return<Ie visible={W}transparent animationType="fade"onRequestClose={V}>
2
2
  <P style={e.backdrop}>
3
- <Ae style={Y.absoluteFill}onPress={V}/>
3
+ <Be style={Z.absoluteFill}onPress={V}/>
4
4
 
5
5
  <P style={e.modalCard}>
6
6
 
7
7
  <P style={e.header}>
8
8
  <P style={{flexDirection:"row",alignItems:"center",gap:8}}>
9
9
  <P style={e.headerIconBox}>
10
- <Ve color={l.brandPurple}size={15}/>
10
+ <Oe color={l.brandPurple}size={15}/>
11
11
  </P>
12
12
  <P>
13
- <T style={e.headerTitle}>Analytics Filters</T>
13
+ <T style={e.headerTitle}>{w("analytics.filtersTitle","Analytics Filters")}</T>
14
14
  <T style={e.headerSubtitle}>
15
- GA4 Telemetry Dimensions & Metrics
15
+ {w("analytics.filtersSubtitle","GA4 Telemetry Dimensions & Metrics")}
16
16
  </T>
17
17
  </P>
18
18
  </P>
19
19
 
20
20
  <P style={{flexDirection:"row",alignItems:"center",gap:8}}>
21
- <R onPress={ge}hitSlop={8}style={e.resetBtn}>
22
- <T style={e.resetBtnText}>Reset All</T>
21
+ <R onPress={Se}hitSlop={8}style={e.resetBtn}>
22
+ <T style={e.resetBtnText}>{w("common.resetAll","Reset All")}</T>
23
23
  </R>
24
24
 
25
25
  <R onPress={V}hitSlop={10}style={e.closeBtn}>
26
- <Re/>
26
+ <_e/>
27
27
  </R>
28
28
  </P>
29
29
  </P>
30
30
 
31
31
 
32
- <Ie style={{maxHeight:460}}contentContainerStyle={e.scrollContent}showsVerticalScrollIndicator={!0}>
32
+ <Ve style={{maxHeight:460}}contentContainerStyle={e.scrollContent}showsVerticalScrollIndicator={!0}>
33
33
 
34
34
  <P style={e.section}>
35
35
  <P style={e.sectionHeaderRow}>
36
- <$ color={l.grayTextWeak}size={12}/>
37
- <T style={e.sectionTitle}>TIME HORIZON</T>
36
+ <G color={l.grayTextWeak}size={12}/>
37
+ <T style={e.sectionTitle}>{w("analytics.timeHorizon","TIME HORIZON")}</T>
38
38
  </P>
39
39
  <P style={e.chipsWrap}>
40
- {[{key:"all",label:"All Time"},{key:"1m",label:"Last 1 min"},{key:"5m",label:"Last 5 mins"},{key:"15m",label:"Last 15 mins"},{key:"1h",label:"Last 1 hour"}].map(s=><S key={s.key}onPress={()=>Pe(s.key)}style={[e.filterPill,t.timeWindow===s.key&&e.filterPillActive]}>
40
+ {[{key:"all",label:"All Time"},{key:"1m",label:"Last 1 min"},{key:"5m",label:"Last 5 mins"},{key:"15m",label:"Last 15 mins"},{key:"1h",label:"Last 1 hour"}].map(s=><S key={s.key}onPress={()=>xe(s.key)}style={[e.filterPill,t.timeWindow===s.key&&e.filterPillActive]}>
41
41
  <T style={[e.filterPillText,t.timeWindow===s.key&&e.filterPillTextActive]}>
42
42
  {s.label}
43
43
  </T>
@@ -48,42 +48,42 @@ import{useEffect as Se,useMemo as q,useState as ve}from"react";import{Modal as C
48
48
 
49
49
  <P style={e.section}>
50
50
  <P style={e.sectionHeaderRow}>
51
- <X color={l.grayTextWeak}size={12}/>
52
- <T style={e.sectionTitle}>EVENT CATEGORIES</T>
51
+ <Q color={l.grayTextWeak}size={12}/>
52
+ <T style={e.sectionTitle}>{w("analytics.eventCategories","EVENT CATEGORIES")}</T>
53
53
  </P>
54
54
  <P style={e.chipsWrap}>
55
55
  <S onPress={()=>I("all")}style={[e.filterPill,F&&e.filterPillActive]}>
56
56
  {F&&<L color={l.white}size={12}/>}
57
57
  <T style={[e.filterPillText,F&&e.filterPillTextActive]}>
58
- All Categories
58
+ {w("analytics.allCategories","All Categories")}
59
59
  </T>
60
60
  </S>
61
61
 
62
62
  <S onPress={()=>I("ecommerce")}style={[e.filterPill,t.categories.has("ecommerce")&&e.filterPillActive]}>
63
- <We color={t.categories.has("ecommerce")?l.white:l.amber700}size={13}/>
63
+ <Ee color={t.categories.has("ecommerce")?l.white:l.amber700}size={13}/>
64
64
  <T style={[e.filterPillText,t.categories.has("ecommerce")&&e.filterPillTextActive]}>
65
- Ecommerce
65
+ {w("analytics.ecommerce","Ecommerce")}
66
66
  </T>
67
67
  </S>
68
68
 
69
69
  <S onPress={()=>I("page_view")}style={[e.filterPill,t.categories.has("page_view")&&e.filterPillActive]}>
70
- <Oe color={t.categories.has("page_view")?l.white:l.sky600}size={13}/>
70
+ <De color={t.categories.has("page_view")?l.white:l.sky600}size={13}/>
71
71
  <T style={[e.filterPillText,t.categories.has("page_view")&&e.filterPillTextActive]}>
72
- Screens & Pages
72
+ {w("analytics.screensAndPages","Screens & Pages")}
73
73
  </T>
74
74
  </S>
75
75
 
76
76
  <S onPress={()=>I("system")}style={[e.filterPill,t.categories.has("system")&&e.filterPillActive]}>
77
- <Z color={t.categories.has("system")?l.white:l.purple}size={13}/>
77
+ <J color={t.categories.has("system")?l.white:l.purple}size={13}/>
78
78
  <T style={[e.filterPillText,t.categories.has("system")&&e.filterPillTextActive]}>
79
- System & Lifecycle
79
+ {w("analytics.systemAndLifecycle","System & Lifecycle")}
80
80
  </T>
81
81
  </S>
82
82
 
83
83
  <S onPress={()=>I("custom")}style={[e.filterPill,t.categories.has("custom")&&e.filterPillActive]}>
84
- <J color={t.categories.has("custom")?l.white:l.brandPurple}size={13}/>
84
+ <K color={t.categories.has("custom")?l.white:l.brandPurple}size={13}/>
85
85
  <T style={[e.filterPillText,t.categories.has("custom")&&e.filterPillTextActive]}>
86
- Custom Events
86
+ {w("analytics.customEvents","Custom Events")}
87
87
  </T>
88
88
  </S>
89
89
  </P>
@@ -93,50 +93,48 @@ import{useEffect as Se,useMemo as q,useState as ve}from"react";import{Modal as C
93
93
  <P style={e.section}>
94
94
  <P style={e.sectionHeaderRow}>
95
95
  <M color={l.grayTextWeak}size={12}/>
96
- <T style={e.sectionTitle}>
97
- MONETIZATION & ATTRIBUTES
98
- </T>
96
+ <T style={e.sectionTitle}>{w("analytics.monetizationAttributes","MONETIZATION & ATTRIBUTES")}</T>
99
97
  </P>
100
98
  <P style={e.chipsWrap}>
101
99
  <S onPress={()=>k("onlyConversions")}style={[e.filterPill,t.onlyConversions&&e.filterPillActive]}>
102
- <X color={t.onlyConversions?l.white:l.brandPurple}size={13}/>
100
+ <Q color={t.onlyConversions?l.white:l.brandPurple}size={13}/>
103
101
  <T style={[e.filterPillText,t.onlyConversions&&e.filterPillTextActive]}>
104
- Conversion Events Only
102
+ {w("analytics.conversionEventsOnly","Conversion Events Only")}
105
103
  </T>
106
104
  </S>
107
105
 
108
106
  <S onPress={()=>k("hasRevenue")}style={[e.filterPill,t.hasRevenue&&e.filterPillActive]}>
109
107
  <M color={t.hasRevenue?l.white:l.emerald600}size={13}/>
110
108
  <T style={[e.filterPillText,t.hasRevenue&&e.filterPillTextActive]}>
111
- With Revenue (Value &gt; 0)
109
+ {w("analytics.withRevenue","With Revenue (Value > 0)")}
112
110
  </T>
113
111
  </S>
114
112
 
115
113
  <S onPress={()=>k("hasItems")}style={[e.filterPill,t.hasItems&&e.filterPillActive]}>
116
- <He color={t.hasItems?l.white:l.amber700}size={13}/>
114
+ <Le color={t.hasItems?l.white:l.amber700}size={13}/>
117
115
  <T style={[e.filterPillText,t.hasItems&&e.filterPillTextActive]}>
118
- With Items Payload
116
+ {w("analytics.withItemsPayload","With Items Payload")}
119
117
  </T>
120
118
  </S>
121
119
 
122
120
  <S onPress={()=>k("hasUserProps")}style={[e.filterPill,t.hasUserProps&&e.filterPillActive]}>
123
- <J color={t.hasUserProps?l.white:l.brandPurple}size={13}/>
121
+ <K color={t.hasUserProps?l.white:l.brandPurple}size={13}/>
124
122
  <T style={[e.filterPillText,t.hasUserProps&&e.filterPillTextActive]}>
125
- With User Properties
123
+ {w("analytics.withUserProperties","With User Properties")}
126
124
  </T>
127
125
  </S>
128
126
 
129
127
  <S onPress={()=>k("hasParams")}style={[e.filterPill,t.hasParams&&e.filterPillActive]}>
130
- <Te color={t.hasParams?l.white:l.grayText}size={13}/>
128
+ <Pe color={t.hasParams?l.white:l.grayText}size={13}/>
131
129
  <T style={[e.filterPillText,t.hasParams&&e.filterPillTextActive]}>
132
- With Custom Params
130
+ {w("analytics.withCustomParams","With Custom Params")}
133
131
  </T>
134
132
  </S>
135
133
 
136
134
  <S onPress={()=>k("onlyDuplicates")}style={[e.filterPill,t.onlyDuplicates&&e.filterPillActive]}>
137
- <De color={t.onlyDuplicates?l.white:l.rose600}size={13}/>
135
+ <He color={t.onlyDuplicates?l.white:l.rose600}size={13}/>
138
136
  <T style={[e.filterPillText,t.onlyDuplicates&&e.filterPillTextActive]}>
139
- Frequent Only (&gt; 1×)
137
+ {w("analytics.frequentOnly","Frequent Only (> 1\xD7)")}
140
138
  </T>
141
139
  </S>
142
140
  </P>
@@ -145,28 +143,28 @@ import{useEffect as Se,useMemo as q,useState as ve}from"react";import{Modal as C
145
143
 
146
144
  <P style={e.section}>
147
145
  <P style={e.sectionHeaderRow}>
148
- <Q color={l.grayTextWeak}size={12}/>
149
- <T style={e.sectionTitle}>USER IDENTIFICATION</T>
146
+ <Te color={l.grayTextWeak}size={12}/>
147
+ <T style={e.sectionTitle}>{w("analytics.userIdentification","USER IDENTIFICATION")}</T>
150
148
  </P>
151
149
  <P style={e.chipsWrap}>
152
- <S onPress={()=>D("all")}style={[e.filterPill,N&&e.filterPillActive]}>
153
- {N&&<L color={l.white}size={12}/>}
154
- <T style={[e.filterPillText,N&&e.filterPillTextActive]}>
155
- All Users
150
+ <S onPress={()=>D("all")}style={[e.filterPill,H&&e.filterPillActive]}>
151
+ {H&&<L color={l.white}size={12}/>}
152
+ <T style={[e.filterPillText,H&&e.filterPillTextActive]}>
153
+ {w("analytics.allUsers","All Users")}
156
154
  </T>
157
155
  </S>
158
156
 
159
157
  <S onPress={()=>D("identified")}style={[e.filterPill,t.userTypes.has("identified")&&e.filterPillActive]}>
160
- <Fe color={t.userTypes.has("identified")?l.white:l.greenColor}size={13}/>
158
+ <Ne color={t.userTypes.has("identified")?l.white:l.greenColor}size={13}/>
161
159
  <T style={[e.filterPillText,t.userTypes.has("identified")&&e.filterPillTextActive]}>
162
- Identified (User ID)
160
+ {w("analytics.identifiedUser","Identified (User ID)")}
163
161
  </T>
164
162
  </S>
165
163
 
166
164
  <S onPress={()=>D("anonymous")}style={[e.filterPill,t.userTypes.has("anonymous")&&e.filterPillActive]}>
167
- <Q color={t.userTypes.has("anonymous")?l.white:l.grayTextWeak}size={13}/>
165
+ <Te color={t.userTypes.has("anonymous")?l.white:l.grayTextWeak}size={13}/>
168
166
  <T style={[e.filterPillText,t.userTypes.has("anonymous")&&e.filterPillTextActive]}>
169
- Anonymous
167
+ {w("analytics.anonymousUser","Anonymous")}
170
168
  </T>
171
169
  </S>
172
170
  </P>
@@ -175,26 +173,26 @@ import{useEffect as Se,useMemo as q,useState as ve}from"react";import{Modal as C
175
173
 
176
174
  <P style={e.section}>
177
175
  <P style={e.sectionHeaderRow}>
178
- <Z color={l.grayTextWeak}size={12}/>
179
- <T style={e.sectionTitle}>EVENT SOURCE</T>
176
+ <J color={l.grayTextWeak}size={12}/>
177
+ <T style={e.sectionTitle}>{w("analytics.eventSource","EVENT SOURCE")}</T>
180
178
  </P>
181
179
  <P style={e.chipsWrap}>
182
- <S onPress={()=>E("all")}style={[e.filterPill,H&&e.filterPillActive]}>
183
- {H&&<L color={l.white}size={12}/>}
184
- <T style={[e.filterPillText,H&&e.filterPillTextActive]}>
185
- All Sources
180
+ <S onPress={()=>E("all")}style={[e.filterPill,U&&e.filterPillActive]}>
181
+ {U&&<L color={l.white}size={12}/>}
182
+ <T style={[e.filterPillText,U&&e.filterPillTextActive]}>
183
+ {w("analytics.allSources","All Sources")}
186
184
  </T>
187
185
  </S>
188
186
 
189
187
  <S onPress={()=>E("firebase")}style={[e.filterPill,t.sources.has("firebase")&&e.filterPillActive]}>
190
188
  <T style={[e.filterPillText,t.sources.has("firebase")&&e.filterPillTextActive]}>
191
- Firebase / GA SDK
189
+ {w("analytics.firebaseGaSdk","Firebase / GA SDK")}
192
190
  </T>
193
191
  </S>
194
192
 
195
193
  <S onPress={()=>E("manual")}style={[e.filterPill,t.sources.has("manual")&&e.filterPillActive]}>
196
194
  <T style={[e.filterPillText,t.sources.has("manual")&&e.filterPillTextActive]}>
197
- In-App Logger
195
+ {w("analytics.inAppLogger","In-App Logger")}
198
196
  </T>
199
197
  </S>
200
198
  </P>
@@ -203,11 +201,11 @@ import{useEffect as Se,useMemo as q,useState as ve}from"react";import{Modal as C
203
201
 
204
202
  <P style={e.section}>
205
203
  <P style={e.sectionHeaderRow}>
206
- <Te color={l.grayTextWeak}size={12}/>
207
- <T style={e.sectionTitle}>PAYLOAD COMPLEXITY</T>
204
+ <Pe color={l.grayTextWeak}size={12}/>
205
+ <T style={e.sectionTitle}>{w("analytics.payloadComplexity","PAYLOAD COMPLEXITY")}</T>
208
206
  </P>
209
207
  <P style={e.chipsWrap}>
210
- {[{key:"all",label:"All Payloads"},{key:"none",label:"0 Params"},{key:"simple",label:"1 - 5 Params"},{key:"heavy",label:"> 5 Params"}].map(s=><S key={s.key}onPress={()=>we(s.key)}style={[e.filterPill,t.payloadComplexity===s.key&&e.filterPillActive]}>
208
+ {[{key:"all",label:"All Payloads"},{key:"none",label:"0 Params"},{key:"simple",label:"1 - 5 Params"},{key:"heavy",label:"> 5 Params"}].map(s=><S key={s.key}onPress={()=>be(s.key)}style={[e.filterPill,t.payloadComplexity===s.key&&e.filterPillActive]}>
211
209
  <T style={[e.filterPillText,t.payloadComplexity===s.key&&e.filterPillTextActive]}>
212
210
  {s.label}
213
211
  </T>
@@ -218,14 +216,14 @@ import{useEffect as Se,useMemo as q,useState as ve}from"react";import{Modal as C
218
216
 
219
217
  {_.length>0&&<P style={e.section}>
220
218
  <P style={e.sectionHeaderRow}>
221
- <K color={l.grayTextWeak}size={12}/>
219
+ <X color={l.grayTextWeak}size={12}/>
222
220
  <T style={e.sectionTitle}>
223
221
  DISCOVERED SCREENS ({_.length})
224
222
  </T>
225
223
  </P>
226
224
  <P style={e.chipsWrap}>
227
- {_.map(s=>{const i=t.screens.has(s);return<S key={s}onPress={()=>me(s)}style={[e.filterPill,i&&e.filterPillActive]}>
228
- <K color={i?l.white:l.amber700}size={12}/>
225
+ {_.map(s=>{const i=t.screens.has(s);return<S key={s}onPress={()=>ge(s)}style={[e.filterPill,i&&e.filterPillActive]}>
226
+ <X color={i?l.white:l.amber700}size={12}/>
229
227
  <T style={[e.filterPillText,i&&e.filterPillTextActive]}>
230
228
  {s}
231
229
  </T>
@@ -236,53 +234,53 @@ import{useEffect as Se,useMemo as q,useState as ve}from"react";import{Modal as C
236
234
 
237
235
  <P style={e.section}>
238
236
  <P style={e.sectionHeaderRow}>
239
- <$ color={l.grayTextWeak}size={12}/>
240
- <T style={e.sectionTitle}>SORT ORDER</T>
237
+ <G color={l.grayTextWeak}size={12}/>
238
+ <T style={e.sectionTitle}>{w("analytics.sortOrder","SORT ORDER")}</T>
241
239
  </P>
242
240
  <P style={e.chipsWrap}>
243
241
  <S onPress={()=>B("time_desc")}style={[e.filterPill,t.sortBy==="time_desc"&&e.filterPillActive]}>
244
- <$ color={t.sortBy==="time_desc"?l.white:l.grayText}size={12}/>
242
+ <G color={t.sortBy==="time_desc"?l.white:l.grayText}size={12}/>
245
243
  <T style={[e.filterPillText,t.sortBy==="time_desc"&&e.filterPillTextActive]}>
246
- Newest First (Default)
244
+ {w("analytics.newestFirstDefault","Newest First (Default)")}
247
245
  </T>
248
246
  </S>
249
247
 
250
248
  <S onPress={()=>B("time_asc")}style={[e.filterPill,t.sortBy==="time_asc"&&e.filterPillActive]}>
251
- <_e color={t.sortBy==="time_asc"?l.white:l.grayText}size={12}/>
249
+ <Fe color={t.sortBy==="time_asc"?l.white:l.grayText}size={12}/>
252
250
  <T style={[e.filterPillText,t.sortBy==="time_asc"&&e.filterPillTextActive]}>
253
- Oldest First
251
+ {w("analytics.oldestFirst","Oldest First")}
254
252
  </T>
255
253
  </S>
256
254
 
257
255
  <S onPress={()=>B("revenue_desc")}style={[e.filterPill,t.sortBy==="revenue_desc"&&e.filterPillActive]}>
258
256
  <M color={t.sortBy==="revenue_desc"?l.white:l.emerald600}size={12}/>
259
257
  <T style={[e.filterPillText,t.sortBy==="revenue_desc"&&e.filterPillTextActive]}>
260
- Highest Revenue
258
+ {w("analytics.highestRevenue","Highest Revenue")}
261
259
  </T>
262
260
  </S>
263
261
 
264
262
  <S onPress={()=>B("count_desc")}style={[e.filterPill,t.sortBy==="count_desc"&&e.filterPillActive]}>
265
- <Ee color={t.sortBy==="count_desc"?l.white:l.darkOrange}size={12}/>
263
+ <Ue color={t.sortBy==="count_desc"?l.white:l.darkOrange}size={12}/>
266
264
  <T style={[e.filterPillText,t.sortBy==="count_desc"&&e.filterPillTextActive]}>
267
- Most Frequent
265
+ {w("analytics.mostFrequent","Most Frequent")}
268
266
  </T>
269
267
  </S>
270
268
  </P>
271
269
  </P>
272
- </Ie>
270
+ </Ve>
273
271
 
274
272
 
275
273
  <P style={e.footer}>
276
274
  <R onPress={V}style={e.discardBtn}activeOpacity={.8}>
277
- <T style={e.discardBtnText}>Discard</T>
275
+ <T style={e.discardBtnText}>{w("common.discard","Discard")}</T>
278
276
  </R>
279
277
 
280
- <R onPress={xe}style={e.applyBtn}activeOpacity={.85}>
278
+ <R onPress={ve}style={e.applyBtn}activeOpacity={.85}>
281
279
  <T style={e.applyBtnText}>
282
- Apply ({be} Events)
280
+ Apply ({Ce} Events)
283
281
  </T>
284
282
  </R>
285
283
  </P>
286
284
  </P>
287
285
  </P>
288
- </Ce>},e=Y.create({backdrop:{flex:1,backgroundColor:`${l.primaryBlack}85`,justifyContent:"center",alignItems:"center",padding:16},modalCard:{width:"100%",maxWidth:440,backgroundColor:l.white,borderRadius:14,borderWidth:1,borderColor:l.dividerColor,shadowColor:l.black,shadowOpacity:.18,shadowRadius:12,shadowOffset:{width:0,height:4},elevation:8,overflow:"hidden"},header:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:14,paddingVertical:12,borderBottomWidth:1,borderBottomColor:l.dividerColor,backgroundColor:`${l.brandPurple}08`},headerIconBox:{width:28,height:28,borderRadius:7,backgroundColor:`${l.brandPurple}18`,alignItems:"center",justifyContent:"center"},headerTitle:{fontFamily:A.interBold,fontSize:13.5,color:l.primaryBlack},headerSubtitle:{fontFamily:A.interMedium,fontSize:10,color:l.grayTextWeak},resetBtn:{paddingHorizontal:8,paddingVertical:4,borderRadius:5,backgroundColor:`${l.darkOrange}14`,borderWidth:1,borderColor:`${l.darkOrange}30`},resetBtnText:{fontFamily:A.interBold,fontSize:10,color:l.darkOrange},closeBtn:{width:24,height:24,borderRadius:12,backgroundColor:`${l.primaryBlack}18`,alignItems:"center",justifyContent:"center"},scrollContent:{padding:14,gap:14},section:{gap:7},sectionHeaderRow:{flexDirection:"row",alignItems:"center",gap:5},sectionTitle:{fontFamily:A.interBold,fontSize:9.5,color:l.grayTextWeak,letterSpacing:.5},chipsWrap:{flexDirection:"row",flexWrap:"wrap",gap:6.5},filterPill:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:9,paddingVertical:5.5,borderRadius:7,backgroundColor:l.grayBackground,borderWidth:1,borderColor:l.dividerColor},filterPillActive:{backgroundColor:l.brandPurple,borderColor:l.brandPurple,shadowColor:l.brandPurple,shadowOffset:{width:0,height:1},shadowOpacity:.25,shadowRadius:3,elevation:2},filterPillText:{fontFamily:A.interMedium,fontSize:11,color:l.primaryBlack},filterPillTextActive:{color:l.white,fontFamily:A.interBold},footer:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:14,paddingVertical:12,borderTopWidth:1,borderTopColor:l.dividerColor,backgroundColor:l.grayBackground},discardBtn:{flex:1,paddingVertical:9.5,borderRadius:8,borderWidth:1,borderColor:l.dividerColor,backgroundColor:l.white,alignItems:"center",justifyContent:"center"},discardBtnText:{fontFamily:A.interBold,fontSize:12.5,color:l.grayTextStrong},applyBtn:{flex:2,backgroundColor:l.brandPurple,paddingVertical:9.5,borderRadius:8,alignItems:"center",justifyContent:"center",shadowColor:l.brandPurple,shadowOffset:{width:0,height:1},shadowOpacity:.25,shadowRadius:3,elevation:2},applyBtnText:{fontFamily:A.interBold,fontSize:12.5,color:l.white}});export default Ne;
286
+ </Ie>},e=Z.create({backdrop:{flex:1,backgroundColor:`${l.primaryBlack}85`,justifyContent:"center",alignItems:"center",padding:16},modalCard:{width:"100%",maxWidth:440,backgroundColor:l.white,borderRadius:14,borderWidth:1,borderColor:l.dividerColor,shadowColor:l.black,shadowOpacity:.18,shadowRadius:12,shadowOffset:{width:0,height:4},elevation:8,overflow:"hidden"},header:{flexDirection:"row",alignItems:"center",justifyContent:"space-between",paddingHorizontal:14,paddingVertical:12,borderBottomWidth:1,borderBottomColor:l.dividerColor,backgroundColor:`${l.brandPurple}08`},headerIconBox:{width:28,height:28,borderRadius:7,backgroundColor:`${l.brandPurple}18`,alignItems:"center",justifyContent:"center"},headerTitle:{fontFamily:A.interBold,fontSize:13.5,color:l.primaryBlack},headerSubtitle:{fontFamily:A.interMedium,fontSize:10,color:l.grayTextWeak},resetBtn:{paddingHorizontal:8,paddingVertical:4,borderRadius:5,backgroundColor:`${l.darkOrange}14`,borderWidth:1,borderColor:`${l.darkOrange}30`},resetBtnText:{fontFamily:A.interBold,fontSize:10,color:l.darkOrange},closeBtn:{width:24,height:24,borderRadius:12,backgroundColor:`${l.primaryBlack}18`,alignItems:"center",justifyContent:"center"},scrollContent:{padding:14,gap:14},section:{gap:7},sectionHeaderRow:{flexDirection:"row",alignItems:"center",gap:5},sectionTitle:{fontFamily:A.interBold,fontSize:9.5,color:l.grayTextWeak,letterSpacing:.5},chipsWrap:{flexDirection:"row",flexWrap:"wrap",gap:6.5},filterPill:{flexDirection:"row",alignItems:"center",gap:5,paddingHorizontal:9,paddingVertical:5.5,borderRadius:7,backgroundColor:l.grayBackground,borderWidth:1,borderColor:l.dividerColor},filterPillActive:{backgroundColor:l.brandPurple,borderColor:l.brandPurple,shadowColor:l.brandPurple,shadowOffset:{width:0,height:1},shadowOpacity:.25,shadowRadius:3,elevation:2},filterPillText:{fontFamily:A.interMedium,fontSize:11,color:l.primaryBlack},filterPillTextActive:{color:l.white,fontFamily:A.interBold},footer:{flexDirection:"row",alignItems:"center",gap:10,paddingHorizontal:14,paddingVertical:12,borderTopWidth:1,borderTopColor:l.dividerColor,backgroundColor:l.grayBackground},discardBtn:{flex:1,paddingVertical:9.5,borderRadius:8,borderWidth:1,borderColor:l.dividerColor,backgroundColor:l.white,alignItems:"center",justifyContent:"center"},discardBtnText:{fontFamily:A.interBold,fontSize:12.5,color:l.grayTextStrong},applyBtn:{flex:2,backgroundColor:l.brandPurple,paddingVertical:9.5,borderRadius:8,alignItems:"center",justifyContent:"center",shadowColor:l.brandPurple,shadowOffset:{width:0,height:1},shadowOpacity:.25,shadowRadius:3,elevation:2},applyBtnText:{fontFamily:A.interBold,fontSize:12.5,color:l.white}});export default Me;
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ import { BoxModelMetrics } from '../../types';
3
+ interface BoxModelVisualizerProps {
4
+ boxModel: BoxModelMetrics;
5
+ compact?: boolean;
6
+ }
7
+ export declare const BoxModelVisualizer: React.FC<BoxModelVisualizerProps>;
8
+ export {};
@@ -0,0 +1,76 @@
1
+ import"react";import{StyleSheet as I,Text as B,View as T}from"react-native";import{AppColors as C}from"../../styles/AppColors";import{AppFonts as h}from"../../styles/AppFonts";export const BoxModelVisualizer=({boxModel:v,compact:z=!1})=>{const{margin:w,border:R,padding:F,content:S}=v;return<T style={e.container}>
2
+
3
+ <T style={e.marginBox}>
4
+ <T style={e.labelRow}>
5
+ <B style={e.boxLabelMargin}>MARGIN</B>
6
+ </T>
7
+ <B style={e.valueTop}>{w.top}</B>
8
+
9
+ <T style={e.middleRow}>
10
+ <B style={e.valueLeft}>{w.left}</B>
11
+
12
+
13
+ <T style={e.borderBox}>
14
+ <T style={e.labelRow}>
15
+ <B style={e.boxLabelBorder}>BORDER</B>
16
+ </T>
17
+ <B style={e.valueTop}>{R.top}</B>
18
+
19
+ <T style={e.middleRow}>
20
+ <B style={e.valueLeft}>{R.left}</B>
21
+
22
+
23
+ <T style={e.paddingBox}>
24
+ <T style={e.labelRow}>
25
+ <B style={e.boxLabelPadding}>PADDING</B>
26
+ </T>
27
+ <B style={e.valueTop}>{F.top}</B>
28
+
29
+ <T style={e.middleRow}>
30
+ <B style={e.valueLeft}>{F.left}</B>
31
+
32
+
33
+ <T style={e.contentBox}>
34
+ <B style={e.contentDimensions}>
35
+ {S.width} × {S.height}
36
+ </B>
37
+ </T>
38
+
39
+ <B style={e.valueRight}>{F.right}</B>
40
+ </T>
41
+
42
+ <B style={e.valueBottom}>{F.bottom}</B>
43
+ </T>
44
+
45
+ <B style={e.valueRight}>{R.right}</B>
46
+ </T>
47
+
48
+ <B style={e.valueBottom}>{R.bottom}</B>
49
+ </T>
50
+
51
+ <B style={e.valueRight}>{w.right}</B>
52
+ </T>
53
+
54
+ <B style={e.valueBottom}>{w.bottom}</B>
55
+ </T>
56
+
57
+
58
+ {!z&&<T style={e.legendContainer}>
59
+ <T style={e.legendItem}>
60
+ <T style={[e.legendSwatch,{backgroundColor:"#F59E0B2B",borderColor:"#F59E0B"}]}/>
61
+ <B style={e.legendText}>Margin</B>
62
+ </T>
63
+ <T style={e.legendItem}>
64
+ <T style={[e.legendSwatch,{backgroundColor:"#FDE0473D",borderColor:"#EAB308"}]}/>
65
+ <B style={e.legendText}>Border</B>
66
+ </T>
67
+ <T style={e.legendItem}>
68
+ <T style={[e.legendSwatch,{backgroundColor:"#10B9812B",borderColor:"#10B981"}]}/>
69
+ <B style={e.legendText}>Padding</B>
70
+ </T>
71
+ <T style={e.legendItem}>
72
+ <T style={[e.legendSwatch,{backgroundColor:"#4F46E52B",borderColor:"#4F46E5"}]}/>
73
+ <B style={e.legendText}>Content</B>
74
+ </T>
75
+ </T>}
76
+ </T>};const e=I.create({container:{alignItems:"center",marginVertical:8},marginBox:{width:"100%",backgroundColor:"#F59E0B1A",borderWidth:1,borderColor:"#F59E0B66",borderRadius:8,padding:6,alignItems:"center"},borderBox:{flex:1,backgroundColor:"#FDE04724",borderWidth:1,borderColor:"#EAB30877",borderRadius:6,padding:6,alignItems:"center",marginHorizontal:4},paddingBox:{flex:1,backgroundColor:"#10B9811A",borderWidth:1,borderColor:"#10B98166",borderRadius:4,padding:6,alignItems:"center",marginHorizontal:4},contentBox:{flex:1,backgroundColor:"#4F46E524",borderWidth:1,borderColor:"#4F46E577",borderRadius:3,paddingVertical:12,paddingHorizontal:8,alignItems:"center",justifyContent:"center",marginHorizontal:4,minHeight:40},labelRow:{position:"absolute",top:3,left:6},boxLabelMargin:{fontSize:9,fontFamily:h.medium,color:"#D97706",letterSpacing:.5},boxLabelBorder:{fontSize:9,fontFamily:h.medium,color:"#CA8A04",letterSpacing:.5},boxLabelPadding:{fontSize:9,fontFamily:h.medium,color:"#059669",letterSpacing:.5},middleRow:{flexDirection:"row",alignItems:"center",width:"100%",marginVertical:2},valueTop:{fontSize:11,fontFamily:h.semiBold,color:C.grayText,marginBottom:2},valueBottom:{fontSize:11,fontFamily:h.semiBold,color:C.grayText,marginTop:2},valueLeft:{fontSize:11,fontFamily:h.semiBold,color:C.grayText,marginRight:2},valueRight:{fontSize:11,fontFamily:h.semiBold,color:C.grayText,marginLeft:2},contentDimensions:{fontSize:12,fontFamily:h.bold,color:C.brandPurple},legendContainer:{flexDirection:"row",justifyContent:"center",gap:16,marginTop:12},legendItem:{flexDirection:"row",alignItems:"center",gap:6},legendSwatch:{width:12,height:12,borderRadius:3,borderWidth:1},legendText:{fontSize:11,fontFamily:h.medium,color:C.grayTextWeak}});