@domir/react-native-measure-text 0.1.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.
Files changed (139) hide show
  1. package/.eslintrc.js +5 -0
  2. package/LICENSE +21 -0
  3. package/Readme.md +46 -0
  4. package/android/build.gradle +93 -0
  5. package/android/src/main/AndroidManifest.xml +2 -0
  6. package/android/src/main/java/expo/modules.measuretext/ReactNativeMeasureTextModule.kt +51 -0
  7. package/build/ReactNativeMeasureText.d.ts +6 -0
  8. package/build/ReactNativeMeasureText.d.ts.map +1 -0
  9. package/build/ReactNativeMeasureText.js +5 -0
  10. package/build/ReactNativeMeasureText.js.map +1 -0
  11. package/build/ReactNativeMeasureText.types.d.ts +4 -0
  12. package/build/ReactNativeMeasureText.types.d.ts.map +1 -0
  13. package/build/ReactNativeMeasureText.types.js +2 -0
  14. package/build/ReactNativeMeasureText.types.js.map +1 -0
  15. package/build/ReactNativeMeasureTextModule.d.ts +3 -0
  16. package/build/ReactNativeMeasureTextModule.d.ts.map +1 -0
  17. package/build/ReactNativeMeasureTextModule.js +5 -0
  18. package/build/ReactNativeMeasureTextModule.js.map +1 -0
  19. package/build/ReactNativeMeasureTextModule.web.d.ts +5 -0
  20. package/build/ReactNativeMeasureTextModule.web.d.ts.map +1 -0
  21. package/build/ReactNativeMeasureTextModule.web.js +6 -0
  22. package/build/ReactNativeMeasureTextModule.web.js.map +1 -0
  23. package/example/.expo-shared/assets.json +4 -0
  24. package/example/App.tsx +45 -0
  25. package/example/android/app/BUCK +55 -0
  26. package/example/android/app/build.gradle +376 -0
  27. package/example/android/app/build_defs.bzl +19 -0
  28. package/example/android/app/debug.keystore +0 -0
  29. package/example/android/app/proguard-rules.pro +14 -0
  30. package/example/android/app/src/debug/AndroidManifest.xml +7 -0
  31. package/example/android/app/src/debug/java/expo/modules/measuretext/example/ReactNativeFlipper.java +69 -0
  32. package/example/android/app/src/main/AndroidManifest.xml +34 -0
  33. package/example/android/app/src/main/java/expo/modules/measuretext/example/MainActivity.java +83 -0
  34. package/example/android/app/src/main/java/expo/modules/measuretext/example/MainApplication.java +106 -0
  35. package/example/android/app/src/main/java/expo/modules/measuretext/example/newarchitecture/MainApplicationReactNativeHost.java +117 -0
  36. package/example/android/app/src/main/java/expo/modules/measuretext/example/newarchitecture/components/MainComponentsRegistry.java +36 -0
  37. package/example/android/app/src/main/java/expo/modules/measuretext/example/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java +48 -0
  38. package/example/android/app/src/main/jni/Android.mk +48 -0
  39. package/example/android/app/src/main/jni/MainApplicationModuleProvider.cpp +24 -0
  40. package/example/android/app/src/main/jni/MainApplicationModuleProvider.h +16 -0
  41. package/example/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp +45 -0
  42. package/example/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h +38 -0
  43. package/example/android/app/src/main/jni/MainComponentsRegistry.cpp +61 -0
  44. package/example/android/app/src/main/jni/MainComponentsRegistry.h +32 -0
  45. package/example/android/app/src/main/jni/OnLoad.cpp +11 -0
  46. package/example/android/app/src/main/res/drawable/rn_edit_text_material.xml +36 -0
  47. package/example/android/app/src/main/res/drawable/splashscreen.xml +3 -0
  48. package/example/android/app/src/main/res/drawable-hdpi/splashscreen_image.png +0 -0
  49. package/example/android/app/src/main/res/drawable-mdpi/splashscreen_image.png +0 -0
  50. package/example/android/app/src/main/res/drawable-xhdpi/splashscreen_image.png +0 -0
  51. package/example/android/app/src/main/res/drawable-xxhdpi/splashscreen_image.png +0 -0
  52. package/example/android/app/src/main/res/drawable-xxxhdpi/splashscreen_image.png +0 -0
  53. package/example/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +5 -0
  54. package/example/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +5 -0
  55. package/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  56. package/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png +0 -0
  57. package/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  58. package/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  59. package/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png +0 -0
  60. package/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  61. package/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  62. package/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
  63. package/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  64. package/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  65. package/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
  66. package/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  67. package/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  68. package/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
  69. package/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  70. package/example/android/app/src/main/res/values/colors.xml +6 -0
  71. package/example/android/app/src/main/res/values/strings.xml +5 -0
  72. package/example/android/app/src/main/res/values/styles.xml +17 -0
  73. package/example/android/app/src/main/res/values-night/colors.xml +1 -0
  74. package/example/android/build.gradle +59 -0
  75. package/example/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  76. package/example/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  77. package/example/android/gradle.properties +53 -0
  78. package/example/android/gradlew +234 -0
  79. package/example/android/gradlew.bat +89 -0
  80. package/example/android/settings.gradle +17 -0
  81. package/example/app.json +35 -0
  82. package/example/assets/adaptive-icon.png +0 -0
  83. package/example/assets/favicon.png +0 -0
  84. package/example/assets/icon.png +0 -0
  85. package/example/assets/splash.png +0 -0
  86. package/example/babel.config.js +19 -0
  87. package/example/index.js +8 -0
  88. package/example/ios/.xcode.env +11 -0
  89. package/example/ios/Podfile +59 -0
  90. package/example/ios/Podfile.lock +482 -0
  91. package/example/ios/Podfile.properties.json +3 -0
  92. package/example/ios/reactnativemeasuretextexample/AppDelegate.h +9 -0
  93. package/example/ios/reactnativemeasuretextexample/AppDelegate.mm +166 -0
  94. package/example/ios/reactnativemeasuretextexample/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@1x.png +0 -0
  95. package/example/ios/reactnativemeasuretextexample/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@2x.png +0 -0
  96. package/example/ios/reactnativemeasuretextexample/Images.xcassets/AppIcon.appiconset/App-Icon-20x20@3x.png +0 -0
  97. package/example/ios/reactnativemeasuretextexample/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@1x.png +0 -0
  98. package/example/ios/reactnativemeasuretextexample/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@2x.png +0 -0
  99. package/example/ios/reactnativemeasuretextexample/Images.xcassets/AppIcon.appiconset/App-Icon-29x29@3x.png +0 -0
  100. package/example/ios/reactnativemeasuretextexample/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@1x.png +0 -0
  101. package/example/ios/reactnativemeasuretextexample/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@2x.png +0 -0
  102. package/example/ios/reactnativemeasuretextexample/Images.xcassets/AppIcon.appiconset/App-Icon-40x40@3x.png +0 -0
  103. package/example/ios/reactnativemeasuretextexample/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@2x.png +0 -0
  104. package/example/ios/reactnativemeasuretextexample/Images.xcassets/AppIcon.appiconset/App-Icon-60x60@3x.png +0 -0
  105. package/example/ios/reactnativemeasuretextexample/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@1x.png +0 -0
  106. package/example/ios/reactnativemeasuretextexample/Images.xcassets/AppIcon.appiconset/App-Icon-76x76@2x.png +0 -0
  107. package/example/ios/reactnativemeasuretextexample/Images.xcassets/AppIcon.appiconset/App-Icon-83.5x83.5@2x.png +0 -0
  108. package/example/ios/reactnativemeasuretextexample/Images.xcassets/AppIcon.appiconset/Contents.json +122 -0
  109. package/example/ios/reactnativemeasuretextexample/Images.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png +0 -0
  110. package/example/ios/reactnativemeasuretextexample/Images.xcassets/Contents.json +6 -0
  111. package/example/ios/reactnativemeasuretextexample/Images.xcassets/SplashScreen.imageset/Contents.json +21 -0
  112. package/example/ios/reactnativemeasuretextexample/Images.xcassets/SplashScreen.imageset/image.png +0 -0
  113. package/example/ios/reactnativemeasuretextexample/Images.xcassets/SplashScreenBackground.imageset/Contents.json +21 -0
  114. package/example/ios/reactnativemeasuretextexample/Images.xcassets/SplashScreenBackground.imageset/image.png +0 -0
  115. package/example/ios/reactnativemeasuretextexample/Info.plist +76 -0
  116. package/example/ios/reactnativemeasuretextexample/SplashScreen.storyboard +51 -0
  117. package/example/ios/reactnativemeasuretextexample/Supporting/Expo.plist +16 -0
  118. package/example/ios/reactnativemeasuretextexample/main.m +10 -0
  119. package/example/ios/reactnativemeasuretextexample/noop-file.swift +4 -0
  120. package/example/ios/reactnativemeasuretextexample/reactnativemeasuretextexample.entitlements +8 -0
  121. package/example/ios/reactnativemeasuretextexample.xcodeproj/project.pbxproj +497 -0
  122. package/example/ios/reactnativemeasuretextexample.xcodeproj/xcshareddata/xcschemes/reactnativemeasuretextexample.xcscheme +88 -0
  123. package/example/ios/reactnativemeasuretextexample.xcworkspace/contents.xcworkspacedata +10 -0
  124. package/example/ios/reactnativemeasuretextexample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  125. package/example/metro.config.js +14 -0
  126. package/example/package-lock.json +21620 -0
  127. package/example/package.json +29 -0
  128. package/example/tsconfig.json +10 -0
  129. package/example/webpack.config.js +20 -0
  130. package/example/yarn.lock +6664 -0
  131. package/expo-module.config.json +9 -0
  132. package/ios/ReactNativeMeasureText.podspec +32 -0
  133. package/ios/ReactNativeMeasureTextModule.swift +33 -0
  134. package/package.json +38 -0
  135. package/src/ReactNativeMeasureText.ts +8 -0
  136. package/src/ReactNativeMeasureText.types.ts +3 -0
  137. package/src/ReactNativeMeasureTextModule.ts +5 -0
  138. package/src/ReactNativeMeasureTextModule.web.ts +5 -0
  139. package/tsconfig.json +9 -0
@@ -0,0 +1,9 @@
1
+ {
2
+ "platforms": ["ios", "android", "web"],
3
+ "ios": {
4
+ "modules": ["ReactNativeMeasureTextModule"]
5
+ },
6
+ "android": {
7
+ "modules": ["expo.modules.measuretext.ReactNativeMeasureTextModule"]
8
+ }
9
+ }
@@ -0,0 +1,32 @@
1
+ require 'json'
2
+
3
+ package = JSON.parse(File.read(File.join(__dir__, '..', 'package.json')))
4
+
5
+ Pod::Spec.new do |s|
6
+ s.name = 'ReactNativeMeasureText'
7
+ s.version = package['version']
8
+ s.summary = package['description']
9
+ s.description = package['description']
10
+ s.license = package['license']
11
+ s.author = package['author']
12
+ s.homepage = package['homepage']
13
+ s.platform = :ios, '12.0'
14
+ s.swift_version = '5.4'
15
+ s.source = { git: 'https://github.com/DomiR/react-native-measure-text' }
16
+ s.static_framework = true
17
+
18
+ s.dependency 'ExpoModulesCore'
19
+
20
+ # Swift/Objective-C compatibility
21
+ s.pod_target_xcconfig = {
22
+ 'DEFINES_MODULE' => 'YES',
23
+ 'SWIFT_COMPILATION_MODE' => 'wholemodule'
24
+ }
25
+
26
+ if !$ExpoUseSources&.include?(package['name']) && ENV['EXPO_USE_SOURCE'].to_i == 0 && File.exist?("#{s.name}.xcframework") && Gem::Version.new(Pod::VERSION) >= Gem::Version.new('1.10.0')
27
+ s.source_files = "**/*.h"
28
+ s.vendored_frameworks = "#{s.name}.xcframework"
29
+ else
30
+ s.source_files = "**/*.{h,m,swift}"
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ import ExpoModulesCore
2
+ import React
3
+
4
+ struct StyleOptions: Record {
5
+ @Field
6
+ var fontFamily: String? = nil
7
+
8
+ @Field
9
+ var fontWeight: String? = nil
10
+
11
+ @Field
12
+ var fontSize: Int? = nil
13
+ }
14
+
15
+ public class ReactNativeMeasureTextModule: Module {
16
+ public func definition() -> ModuleDefinition {
17
+ Name("ReactNativeMeasureText")
18
+
19
+ Function("measureWidth") { (text: String, style: StyleOptions) -> CGFloat in
20
+ let fontSize = style.fontSize != nil ? RCTConvert.cgFloat(style.fontSize) : CGFloat(0)
21
+ let usedFontWeight = style.fontWeight ?? "Normal"
22
+
23
+ if let font = style.fontFamily != nil ?
24
+ RCTConvert.uiFont(["fontWeight": usedFontWeight, "fontFamily": style.fontFamily!, "fontSize": fontSize]) : RCTConvert.uiFont(["fontWeight": usedFontWeight, "fontSize": fontSize])
25
+ {
26
+ let size: CGSize = text.size(withAttributes: [.font: font])
27
+ return size.width
28
+ } else {
29
+ return CGFloat(0)
30
+ }
31
+ }
32
+ }
33
+ }
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@domir/react-native-measure-text",
3
+ "version": "0.1.0",
4
+ "description": "Measure text width synchronously using JSI",
5
+ "main": "build/ReactNativeMeasureText.js",
6
+ "types": "build/ReactNativeMeasureText.d.ts",
7
+ "scripts": {
8
+ "build": "expo-module tsc",
9
+ "clean": "expo-module clean",
10
+ "lint": "expo-module lint",
11
+ "test": "expo-module test",
12
+ "prepublishOnly": "expo-module prepublishOnly",
13
+ "expo-module": "expo-module"
14
+ },
15
+ "keywords": [
16
+ "react-native",
17
+ "expo",
18
+ "react-native-measure-text",
19
+ "ReactNativeMeasureText"
20
+ ],
21
+ "repository": "https://github.com/DomiR/react-native-measure-text",
22
+ "bugs": {
23
+ "url": "https://github.com/DomiR/react-native-measure-text/issues"
24
+ },
25
+ "author": "Dominique <domi.github@gmail.com> (https://github.com/DomiR)",
26
+ "license": "MIT",
27
+ "homepage": "https://github.com/DomiR/react-native-measure-text#readme",
28
+ "dependencies": {},
29
+ "devDependencies": {
30
+ "expo-module-scripts": "^2.1.1",
31
+ "expo-modules-core": "^0.11.4"
32
+ },
33
+ "peerDependencies": {
34
+ "expo": "*",
35
+ "react": "*",
36
+ "react-native": "*"
37
+ }
38
+ }
@@ -0,0 +1,8 @@
1
+ import ReactNativeMeasureText from "./ReactNativeMeasureTextModule";
2
+
3
+ export function measureWidth(
4
+ text: string,
5
+ style: { fontSize?: number; fontFamily?: string; fontWeight?: string } = {}
6
+ ): number {
7
+ return ReactNativeMeasureText.measureWidth(text, style);
8
+ }
@@ -0,0 +1,3 @@
1
+ export type ChangeEventPayload = {
2
+ value: string;
3
+ };
@@ -0,0 +1,5 @@
1
+ import { requireNativeModule } from "expo-modules-core";
2
+
3
+ // It loads the native module object from the JSI or falls back to
4
+ // the bridge module (from NativeModulesProxy) if the remote debugger is on.
5
+ export default requireNativeModule("ReactNativeMeasureText");
@@ -0,0 +1,5 @@
1
+ export default {
2
+ measureWidth() {
3
+ return 0;
4
+ },
5
+ };
package/tsconfig.json ADDED
@@ -0,0 +1,9 @@
1
+ // @generated by expo-module-scripts
2
+ {
3
+ "extends": "expo-module-scripts/tsconfig.base",
4
+ "compilerOptions": {
5
+ "outDir": "./build"
6
+ },
7
+ "include": ["./src"],
8
+ "exclude": ["**/__mocks__/*", "**/__tests__/*", "**/__stories__/*"]
9
+ }