From 67b2d0ccd79ee92ec16eb1b70fa11848a214f876 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Sun, 7 Sep 2025 12:30:45 +0200 Subject: [PATCH 01/19] refactor: remove iOS native implementation and simplify Android prompt handling --- ReactNativeAlert.podspec | 5 +++-- ios/ReactNativeAlert.h | 5 ----- ios/ReactNativeAlert.mm | 18 ------------------ src/index.android.ts | 35 ++++------------------------------- src/index.ios.ts | 25 ++----------------------- 5 files changed, 9 insertions(+), 79 deletions(-) delete mode 100644 ios/ReactNativeAlert.h delete mode 100644 ios/ReactNativeAlert.mm diff --git a/ReactNativeAlert.podspec b/ReactNativeAlert.podspec index e237876..2ea949c 100644 --- a/ReactNativeAlert.podspec +++ b/ReactNativeAlert.podspec @@ -13,8 +13,9 @@ Pod::Spec.new do |s| s.platforms = { :ios => min_ios_version_supported } s.source = { :git => "https://github.com/blazejkustra/react-native-alert.git", :tag => "#{s.version}" } - s.source_files = "ios/**/*.{h,m,mm,cpp}" - s.private_header_files = "ios/**/*.h" + # No iOS native sources are needed; JS uses RN's Alert on iOS + s.source_files = "" + s.private_header_files = "" install_modules_dependencies(s) diff --git a/ios/ReactNativeAlert.h b/ios/ReactNativeAlert.h deleted file mode 100644 index 9f3cb11..0000000 --- a/ios/ReactNativeAlert.h +++ /dev/null @@ -1,5 +0,0 @@ -#import - -@interface ReactNativeAlert : NSObject - -@end diff --git a/ios/ReactNativeAlert.mm b/ios/ReactNativeAlert.mm deleted file mode 100644 index bf7019a..0000000 --- a/ios/ReactNativeAlert.mm +++ /dev/null @@ -1,18 +0,0 @@ -#import "ReactNativeAlert.h" - -@implementation ReactNativeAlert -RCT_EXPORT_MODULE() - -- (NSNumber *)multiply:(double)a b:(double)b { - NSNumber *result = @(a * b); - - return result; -} - -- (std::shared_ptr)getTurboModule: - (const facebook::react::ObjCTurboModule::InitParams &)params -{ - return std::make_shared(params); -} - -@end diff --git a/src/index.android.ts b/src/index.android.ts index 8e0dcc1..0389883 100644 --- a/src/index.android.ts +++ b/src/index.android.ts @@ -1,10 +1,6 @@ import { Alert as RNAlert } from 'react-native'; import ReactNativeAlert from './NativeReactNativeAlert'; -import type { - AlertButton, - AlertOptions, - PromptButtons, -} from './NativeReactNativeAlert'; +import type { AlertButton, AlertOptions } from './NativeReactNativeAlert'; /** * Android-specific Alert implementation @@ -23,33 +19,10 @@ class Alert { * Launches a prompt dialog with the specified title and message, allowing the user to enter text. * Uses custom native module with Material Design for Android. */ - static prompt( - title: string, - message?: string, - buttons?: PromptButtons, - type?: 'default' | 'plain-text' | 'secure-text' | 'login-password', - defaultValue?: string, - keyboardType?: string - ) { - // Convert function callback to button array for native module - if (typeof buttons === 'function') { - const callback = buttons; - buttons = [ - { text: 'Cancel', style: 'cancel' }, - { text: 'OK', style: 'default', onPress: callback }, - ]; - } - - ReactNativeAlert.prompt( - title, - message, - buttons, - type, - defaultValue, - keyboardType - ); + static prompt(...args: Parameters) { + ReactNativeAlert.prompt(...args); } } export default Alert; -export type { AlertButton, AlertOptions, PromptButtons }; +export type { AlertButton, AlertOptions }; diff --git a/src/index.ios.ts b/src/index.ios.ts index 736d70c..150051e 100644 --- a/src/index.ios.ts +++ b/src/index.ios.ts @@ -1,5 +1,4 @@ import { Alert as RNAlert } from 'react-native'; -import ReactNativeAlert from './NativeReactNativeAlert'; import type { AlertButton, AlertOptions, @@ -23,28 +22,8 @@ class Alert { * Launches a prompt dialog with the specified title and message, allowing the user to enter text. * Uses custom native module since iOS doesn't have built-in prompt. */ - static prompt( - ...[title, message, buttons, type, defaultValue, keyboardType]: Parameters< - typeof RNAlert.prompt - > - ) { - // Convert function callback to button array for native module - if (typeof buttons === 'function') { - const callback = buttons; - buttons = [ - { text: 'Cancel', style: 'cancel' }, - { text: 'OK', style: 'default', onPress: callback }, - ]; - } - - ReactNativeAlert.prompt( - title, - message, - buttons, - type, - defaultValue, - keyboardType - ); + static prompt(...args: Parameters) { + RNAlert.prompt(...args); } } From d36c46d321ebb47b3f7a4054390127bee39adbf8 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 9 Sep 2025 21:58:46 +0200 Subject: [PATCH 02/19] refactor: remove ReactNativeAlert podspec and enhance alert functionality across platforms --- .cursor/mcp.json | 4 +- ReactNativeAlert.podspec | 22 - .../ReactNativeAlertModule.kt | 200 +- .../ReactNativeAlertPackage.kt | 6 +- example/Gemfile.lock | 124 + example/ios/Podfile.lock | 2682 +++++++++++++++++ .../project.pbxproj | 11 +- .../contents.xcworkspacedata | 10 + .../ios/ReactNativeAlertExample/Info.plist | 3 +- example/src/App.tsx | 340 ++- src/{ => Alert}/index.ios.ts | 6 - src/Alert/index.ts | 81 + src/{index.ts => Alert/index.web.ts} | 10 +- .../utils/default-styles.css} | 0 src/{web/alert.ts => Alert/utils/web.ts} | 6 +- src/NativeReactNativeAlert.ts | 97 +- src/index.android.ts | 28 - src/index.tsx | 1 + .../__mocks__/NativeReactNativeAlert.ts | 0 {src => tests}/__tests__/index.test.tsx | 2 +- yarn.lock | 195 +- 21 files changed, 3661 insertions(+), 167 deletions(-) delete mode 100644 ReactNativeAlert.podspec create mode 100644 example/Gemfile.lock create mode 100644 example/ios/Podfile.lock create mode 100644 example/ios/ReactNativeAlertExample.xcworkspace/contents.xcworkspacedata rename src/{ => Alert}/index.ios.ts (82%) create mode 100644 src/Alert/index.ts rename src/{index.ts => Alert/index.web.ts} (90%) rename src/{web/alert.css => Alert/utils/default-styles.css} (100%) rename src/{web/alert.ts => Alert/utils/web.ts} (95%) delete mode 100644 src/index.android.ts create mode 100644 src/index.tsx rename {src => tests}/__mocks__/NativeReactNativeAlert.ts (100%) rename {src => tests}/__tests__/index.test.tsx (93%) diff --git a/.cursor/mcp.json b/.cursor/mcp.json index c0fb47b..ac8f73e 100644 --- a/.cursor/mcp.json +++ b/.cursor/mcp.json @@ -1,10 +1,10 @@ { "mcpServers": { "RadonAi": { - "url": "http://127.0.0.1:54869/mcp", + "url": "http://127.0.0.1:56669/mcp", "type": "http", "headers": { - "nonce": "c1fee5d9-a25f-43e4-8026-badfe37f6bd9" + "nonce": "62f452e8-a21a-4dde-bfcf-db7fd031accf" } } } diff --git a/ReactNativeAlert.podspec b/ReactNativeAlert.podspec deleted file mode 100644 index 2ea949c..0000000 --- a/ReactNativeAlert.podspec +++ /dev/null @@ -1,22 +0,0 @@ -require "json" - -package = JSON.parse(File.read(File.join(__dir__, "package.json"))) - -Pod::Spec.new do |s| - s.name = "ReactNativeAlert" - s.version = package["version"] - s.summary = package["description"] - s.homepage = package["homepage"] - s.license = package["license"] - s.authors = package["author"] - - s.platforms = { :ios => min_ios_version_supported } - s.source = { :git => "https://github.com/blazejkustra/react-native-alert.git", :tag => "#{s.version}" } - - # No iOS native sources are needed; JS uses RN's Alert on iOS - s.source_files = "" - s.private_header_files = "" - - - install_modules_dependencies(s) -end diff --git a/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertModule.kt b/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertModule.kt index 8426b8d..b3f2b82 100644 --- a/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertModule.kt +++ b/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertModule.kt @@ -1,20 +1,204 @@ package com.blazejkustra.reactnativealert +import android.content.Context +import android.os.Build +import android.text.InputFilter +import android.text.InputType +import android.view.ContextThemeWrapper +import android.view.ViewGroup +import android.widget.EditText +import android.widget.LinearLayout +import androidx.appcompat.app.AlertDialog +import com.facebook.react.bridge.Arguments +import com.facebook.react.bridge.Callback +import com.facebook.react.bridge.LifecycleEventListener import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.bridge.ReadableArray +import com.facebook.react.bridge.ReadableMap +import com.facebook.react.bridge.UiThreadUtil import com.facebook.react.module.annotations.ReactModule +import java.lang.ref.WeakReference +import android.util.Log @ReactModule(name = ReactNativeAlertModule.NAME) -class ReactNativeAlertModule(reactContext: ReactApplicationContext) : - NativeReactNativeAlertSpec(reactContext) { +class ReactNativeAlertModule( + private val reactContext: ReactApplicationContext +) : NativeReactNativeAlertSpec(reactContext), LifecycleEventListener { - override fun getName(): String { - return NAME + private var dialogRef: WeakReference = WeakReference(null) + + init { + reactContext.addLifecycleEventListener(this) + } + + override fun getName() = NAME + + override fun prompt( + config: ReadableMap, + onError: Callback, + onAction: Callback + ) { + val activity = currentActivity ?: return + if (activity.isFinishing || (Build.VERSION.SDK_INT >= 17 && activity.isDestroyed)) return + + UiThreadUtil.runOnUiThread { + if (activity.isFinishing || (Build.VERSION.SDK_INT >= 17 && activity.isDestroyed)) return@runOnUiThread + + val themed: Context = if (Build.VERSION.SDK_INT >= 29) { + // Use system theme on Android 10+ (API 29+) + activity + } else { + // Use AppCompat theme for older versions + ContextThemeWrapper(activity, androidx.appcompat.R.style.Theme_AppCompat_Dialog_Alert) + } + + Log.d("ReactNativeAlertModule", "themed: $themed") + + val type = config.getStringOrNull("type") ?: "default" + val (contentView, usernameInput, mainInput) = buildInputs(themed, type, config) + + val builder = AlertDialog.Builder(themed) + .setTitle(config.getStringOrNull("title") ?: "") + .setMessage(config.getStringOrNull("message") ?: "") + .setCancelable(config.getBooleanOrFalse("cancelable")) + + contentView?.let { builder.setView(it) } + + // map up to 3 buttons: neutral(0), negative(1), positive(2) + val labels = (config.getArrayOrEmpty("buttons")).collectButtonLabels(max = 3) + + labels.getOrNull(0)?.let { text -> + builder.setNeutralButton(text) { _, _ -> + onAction.invoke(0 /*buttonClicked*/, 0 /*neutral*/, mainInput?.text?.toString(), usernameInput?.text?.toString()) + } + } + labels.getOrNull(1)?.let { text -> + builder.setNegativeButton(text) { _, _ -> + onAction.invoke(0, 1 /*negative*/, mainInput?.text?.toString(), usernameInput?.text?.toString()) + } + } + labels.getOrNull(2)?.let { text -> + builder.setPositiveButton(text) { _, _ -> + onAction.invoke(0, 2 /*positive*/, mainInput?.text?.toString(), usernameInput?.text?.toString()) + } + } + + builder.setOnCancelListener { + onAction.invoke(1 /*dismissed*/, -1, null, null) + } + + val dialog = builder.create() + dialogRef = WeakReference(dialog) + dialog.show() + + // Focus the first input field after dialog is shown + val firstInput = usernameInput ?: mainInput + firstInput?.requestFocus() + } + } + + // ----- Lifecycle ----- + override fun onHostResume() = Unit + override fun onHostPause() { + dialogRef.get()?.let { if (it.isShowing) it.dismiss() } + } + override fun onHostDestroy() { + dialogRef.get()?.let { if (it.isShowing) it.dismiss() } + dialogRef.clear() + } + + // ----- Helpers ----- + private fun buildInputs( + ctx: Context, + type: String, + config: ReadableMap + ): Triple { + if (type == "default") return Triple(null, null, null) + + val layout = LinearLayout(ctx).apply { + orientation = LinearLayout.VERTICAL + val horizontalPad = (ctx.resources.displayMetrics.density * 20).toInt() + val verticalPad = (ctx.resources.displayMetrics.density * 12).toInt() + setPadding(horizontalPad, verticalPad, horizontalPad, verticalPad) + layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + } + + val isLogin = type == "login-password" + + val username = if (isLogin) EditText(ctx).apply { + hint = config.getStringOrNull("usernamePlaceholder") ?: "Username" + inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD + config.getIntOrNull("usernameMaxLength")?.takeIf { it > 0 }?.let { + filters = arrayOf(InputFilter.LengthFilter(it)) + } + val margin = (ctx.resources.displayMetrics.density * 4).toInt() + val params = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.WRAP_CONTENT + ).apply { + setMargins(0, 0, 0, margin) + } + layoutParams = params + layout.addView(this) + } else null + + val main = EditText(ctx).apply { + hint = config.getStringOrNull("placeholder") ?: if (isLogin) "Password" else "" + inputType = if (type == "secure-text" || isLogin) + InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD + else + InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD + setText(config.getStringOrNull("defaultValue") ?: "") + config.getIntOrNull("maxLength")?.takeIf { it > 0 }?.let { + filters = arrayOf(InputFilter.LengthFilter(it)) + } + layoutParams = LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.WRAP_CONTENT + ) + } + + // keyboardType only on first field + applyKeyboardType(username ?: main, config.getStringOrNull("keyboardType")) + + layout.addView(main) + return Triple(layout, username, main) + } + + private fun applyKeyboardType(target: EditText, keyboardType: String?) { + when (keyboardType) { + "email-address" -> target.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS + "numeric", "number-pad" -> target.inputType = InputType.TYPE_CLASS_NUMBER + "phone-pad" -> target.inputType = InputType.TYPE_CLASS_PHONE + "decimal-pad" -> target.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL + "url" -> target.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_URI + "web-search", "twitter" -> target.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD + else -> Unit + } } - // Example method - // See https://reactnative.dev/docs/native-modules-android - override fun multiply(a: Double, b: Double): Double { - return a * b + // ReadableMap safe accessors + private fun ReadableMap.getStringOrNull(key: String): String? = + if (hasKey(key) && !isNull(key)) getString(key) else null + + private fun ReadableMap.getBooleanOrFalse(key: String): Boolean = + if (hasKey(key) && !isNull(key)) getBoolean(key) else false + + private fun ReadableMap.getIntOrNull(key: String): Int? = + if (hasKey(key) && !isNull(key)) getInt(key) else null + + private fun ReadableMap.getArrayOrEmpty(key: String): ReadableArray = + if (hasKey(key) && !isNull(key)) getArray(key) ?: Arguments.createArray() else Arguments.createArray() + + private fun ReadableArray.collectButtonLabels(max: Int): List { + val out = ArrayList(max) + val count = kotlin.math.min(max, size()) + for (i in 0 until count) { + val m = getMap(i) + val label = m?.getString("text") ?: "" + out.add(label) + } + return out } companion object { diff --git a/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertPackage.kt b/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertPackage.kt index 27f6c07..55eaf1d 100644 --- a/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertPackage.kt +++ b/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertPackage.kt @@ -22,9 +22,9 @@ class ReactNativeAlertPackage : BaseReactPackage() { moduleInfos[ReactNativeAlertModule.NAME] = ReactModuleInfo( ReactNativeAlertModule.NAME, ReactNativeAlertModule.NAME, - false, // canOverrideExistingModule - false, // needsEagerInit - false, // isCxxModule + false, // canOverrideExistingModule + false, // needsEagerInit + false, // isCxxModule true // isTurboModule ) moduleInfos diff --git a/example/Gemfile.lock b/example/Gemfile.lock new file mode 100644 index 0000000..24a937c --- /dev/null +++ b/example/Gemfile.lock @@ -0,0 +1,124 @@ +GEM + remote: https://rubygems.org/ + specs: + CFPropertyList (3.0.7) + base64 + nkf + rexml + activesupport (7.2.2.2) + base64 + benchmark (>= 0.3) + bigdecimal + concurrent-ruby (~> 1.0, >= 1.3.1) + connection_pool (>= 2.2.5) + drb + i18n (>= 1.6, < 2) + logger (>= 1.4.2) + minitest (>= 5.1) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) + algoliasearch (1.27.5) + httpclient (~> 2.8, >= 2.8.3) + json (>= 1.5.1) + atomos (0.1.3) + base64 (0.3.0) + benchmark (0.4.1) + bigdecimal (3.2.3) + claide (1.1.0) + cocoapods (1.15.2) + addressable (~> 2.8) + claide (>= 1.0.2, < 2.0) + cocoapods-core (= 1.15.2) + cocoapods-deintegrate (>= 1.0.3, < 2.0) + cocoapods-downloader (>= 2.1, < 3.0) + cocoapods-plugins (>= 1.0.0, < 2.0) + cocoapods-search (>= 1.0.0, < 2.0) + cocoapods-trunk (>= 1.6.0, < 2.0) + cocoapods-try (>= 1.1.0, < 2.0) + colored2 (~> 3.1) + escape (~> 0.0.4) + fourflusher (>= 2.3.0, < 3.0) + gh_inspector (~> 1.0) + molinillo (~> 0.8.0) + nap (~> 1.0) + ruby-macho (>= 2.3.0, < 3.0) + xcodeproj (>= 1.23.0, < 2.0) + cocoapods-core (1.15.2) + activesupport (>= 5.0, < 8) + addressable (~> 2.8) + algoliasearch (~> 1.0) + concurrent-ruby (~> 1.1) + fuzzy_match (~> 2.0.4) + nap (~> 1.0) + netrc (~> 0.11) + public_suffix (~> 4.0) + typhoeus (~> 1.0) + cocoapods-deintegrate (1.0.5) + cocoapods-downloader (2.1) + cocoapods-plugins (1.0.0) + nap + cocoapods-search (1.0.1) + cocoapods-trunk (1.6.0) + nap (>= 0.8, < 2.0) + netrc (~> 0.11) + cocoapods-try (1.2.0) + colored2 (3.1.2) + concurrent-ruby (1.3.3) + connection_pool (2.5.4) + drb (2.2.3) + escape (0.0.4) + ethon (0.15.0) + ffi (>= 1.15.0) + ffi (1.17.2) + fourflusher (2.3.1) + fuzzy_match (2.0.4) + gh_inspector (1.1.3) + httpclient (2.9.0) + mutex_m + i18n (1.14.7) + concurrent-ruby (~> 1.0) + json (2.13.2) + logger (1.7.0) + minitest (5.25.5) + molinillo (0.8.0) + mutex_m (0.3.0) + nanaimo (0.3.0) + nap (1.1.0) + netrc (0.11.0) + nkf (0.2.0) + public_suffix (4.0.7) + rexml (3.4.3) + ruby-macho (2.5.1) + securerandom (0.4.1) + typhoeus (1.5.0) + ethon (>= 0.9.0, < 0.16.0) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + xcodeproj (1.25.1) + CFPropertyList (>= 2.3.3, < 4.0) + atomos (~> 0.1.3) + claide (>= 1.0.2, < 2.0) + colored2 (~> 3.1) + nanaimo (~> 0.3.0) + rexml (>= 3.3.6, < 4.0) + +PLATFORMS + ruby + +DEPENDENCIES + activesupport (>= 6.1.7.5, != 7.1.0) + benchmark + bigdecimal + cocoapods (>= 1.13, != 1.15.1, != 1.15.0) + concurrent-ruby (< 1.3.4) + logger + mutex_m + xcodeproj (< 1.26.0) + +RUBY VERSION + ruby 3.3.4p94 + +BUNDLED WITH + 2.6.2 diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock new file mode 100644 index 0000000..d90850d --- /dev/null +++ b/example/ios/Podfile.lock @@ -0,0 +1,2682 @@ +PODS: + - boost (1.84.0) + - DoubleConversion (1.1.6) + - fast_float (8.0.0) + - FBLazyVector (0.81.1) + - fmt (11.0.2) + - glog (0.3.5) + - hermes-engine (0.81.1): + - hermes-engine/Pre-built (= 0.81.1) + - hermes-engine/Pre-built (0.81.1) + - RCT-Folly (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 8.0.0) + - fmt (= 11.0.2) + - glog + - RCT-Folly/Default (= 2024.11.18.00) + - RCT-Folly/Default (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 8.0.0) + - fmt (= 11.0.2) + - glog + - RCT-Folly/Fabric (2024.11.18.00): + - boost + - DoubleConversion + - fast_float (= 8.0.0) + - fmt (= 11.0.2) + - glog + - RCTDeprecation (0.81.1) + - RCTRequired (0.81.1) + - RCTTypeSafety (0.81.1): + - FBLazyVector (= 0.81.1) + - RCTRequired (= 0.81.1) + - React-Core (= 0.81.1) + - React (0.81.1): + - React-Core (= 0.81.1) + - React-Core/DevSupport (= 0.81.1) + - React-Core/RCTWebSocket (= 0.81.1) + - React-RCTActionSheet (= 0.81.1) + - React-RCTAnimation (= 0.81.1) + - React-RCTBlob (= 0.81.1) + - React-RCTImage (= 0.81.1) + - React-RCTLinking (= 0.81.1) + - React-RCTNetwork (= 0.81.1) + - React-RCTSettings (= 0.81.1) + - React-RCTText (= 0.81.1) + - React-RCTVibration (= 0.81.1) + - React-callinvoker (0.81.1) + - React-Core (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default (= 0.81.1) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/CoreModulesHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/Default (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/DevSupport (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default (= 0.81.1) + - React-Core/RCTWebSocket (= 0.81.1) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTActionSheetHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTAnimationHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTBlobHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTImageHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTLinkingHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTNetworkHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTSettingsHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTTextHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTVibrationHeaders (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-Core/RCTWebSocket (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTDeprecation + - React-Core/Default (= 0.81.1) + - React-cxxreact + - React-featureflags + - React-hermes + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsinspectorcdp + - React-jsitooling + - React-perflogger + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-CoreModules (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - RCTTypeSafety (= 0.81.1) + - React-Core/CoreModulesHeaders (= 0.81.1) + - React-jsi (= 0.81.1) + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-NativeModulesApple + - React-RCTBlob + - React-RCTFBReactNativeSpec + - React-RCTImage (= 0.81.1) + - React-runtimeexecutor + - ReactCommon + - SocketRocket + - React-cxxreact (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker (= 0.81.1) + - React-debug (= 0.81.1) + - React-jsi (= 0.81.1) + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-logger (= 0.81.1) + - React-perflogger (= 0.81.1) + - React-runtimeexecutor + - React-timing (= 0.81.1) + - SocketRocket + - React-debug (0.81.1) + - React-defaultsnativemodule (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-domnativemodule + - React-featureflagsnativemodule + - React-idlecallbacksnativemodule + - React-jsi + - React-jsiexecutor + - React-microtasksnativemodule + - React-RCTFBReactNativeSpec + - SocketRocket + - React-domnativemodule (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-Fabric + - React-Fabric/bridging + - React-FabricComponents + - React-graphics + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - React-runtimeexecutor + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-Fabric (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/animations (= 0.81.1) + - React-Fabric/attributedstring (= 0.81.1) + - React-Fabric/bridging (= 0.81.1) + - React-Fabric/componentregistry (= 0.81.1) + - React-Fabric/componentregistrynative (= 0.81.1) + - React-Fabric/components (= 0.81.1) + - React-Fabric/consistency (= 0.81.1) + - React-Fabric/core (= 0.81.1) + - React-Fabric/dom (= 0.81.1) + - React-Fabric/imagemanager (= 0.81.1) + - React-Fabric/leakchecker (= 0.81.1) + - React-Fabric/mounting (= 0.81.1) + - React-Fabric/observers (= 0.81.1) + - React-Fabric/scheduler (= 0.81.1) + - React-Fabric/telemetry (= 0.81.1) + - React-Fabric/templateprocessor (= 0.81.1) + - React-Fabric/uimanager (= 0.81.1) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/animations (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/attributedstring (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/bridging (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/componentregistry (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/componentregistrynative (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/components (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/components/legacyviewmanagerinterop (= 0.81.1) + - React-Fabric/components/root (= 0.81.1) + - React-Fabric/components/scrollview (= 0.81.1) + - React-Fabric/components/view (= 0.81.1) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/components/legacyviewmanagerinterop (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/components/root (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/components/scrollview (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/components/view (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-renderercss + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-Fabric/consistency (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/core (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/dom (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/imagemanager (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/leakchecker (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/mounting (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/observers (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events (= 0.81.1) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/observers/events (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/scheduler (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/observers/events + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-performancetimeline + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/telemetry (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/templateprocessor (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/uimanager (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric/uimanager/consistency (= 0.81.1) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererconsistency + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-Fabric/uimanager/consistency (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-rendererconsistency + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - React-FabricComponents (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-FabricComponents/components (= 0.81.1) + - React-FabricComponents/textlayoutmanager (= 0.81.1) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-FabricComponents/components/inputaccessory (= 0.81.1) + - React-FabricComponents/components/iostextinput (= 0.81.1) + - React-FabricComponents/components/modal (= 0.81.1) + - React-FabricComponents/components/rncore (= 0.81.1) + - React-FabricComponents/components/safeareaview (= 0.81.1) + - React-FabricComponents/components/scrollview (= 0.81.1) + - React-FabricComponents/components/switch (= 0.81.1) + - React-FabricComponents/components/text (= 0.81.1) + - React-FabricComponents/components/textinput (= 0.81.1) + - React-FabricComponents/components/unimplementedview (= 0.81.1) + - React-FabricComponents/components/virtualview (= 0.81.1) + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/inputaccessory (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/iostextinput (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/modal (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/rncore (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/safeareaview (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/scrollview (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/switch (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/text (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/textinput (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/unimplementedview (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/components/virtualview (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricComponents/textlayoutmanager (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-cxxreact + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-logger + - React-RCTFBReactNativeSpec + - React-rendererdebug + - React-runtimescheduler + - React-utils + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-FabricImage (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired (= 0.81.1) + - RCTTypeSafety (= 0.81.1) + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-jsiexecutor (= 0.81.1) + - React-logger + - React-rendererdebug + - React-utils + - ReactCommon + - SocketRocket + - Yoga + - React-featureflags (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-featureflagsnativemodule (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-featureflags + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - SocketRocket + - React-graphics (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-jsi + - React-jsiexecutor + - React-utils + - SocketRocket + - React-hermes (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact (= 0.81.1) + - React-jsi + - React-jsiexecutor (= 0.81.1) + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-perflogger (= 0.81.1) + - React-runtimeexecutor + - SocketRocket + - React-idlecallbacksnativemodule (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - React-runtimeexecutor + - React-runtimescheduler + - ReactCommon/turbomodule/core + - SocketRocket + - React-ImageManager (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-Core/Default + - React-debug + - React-Fabric + - React-graphics + - React-rendererdebug + - React-utils + - SocketRocket + - React-jserrorhandler (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact + - React-debug + - React-featureflags + - React-jsi + - ReactCommon/turbomodule/bridging + - SocketRocket + - React-jsi (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-jsiexecutor (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact (= 0.81.1) + - React-jsi (= 0.81.1) + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-perflogger (= 0.81.1) + - React-runtimeexecutor + - SocketRocket + - React-jsinspector (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-featureflags + - React-jsi + - React-jsinspectorcdp + - React-jsinspectornetwork + - React-jsinspectortracing + - React-oscompat + - React-perflogger (= 0.81.1) + - React-runtimeexecutor + - SocketRocket + - React-jsinspectorcdp (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-jsinspectornetwork (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-featureflags + - React-jsinspectorcdp + - React-performancetimeline + - React-timing + - SocketRocket + - React-jsinspectortracing (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-oscompat + - React-timing + - SocketRocket + - React-jsitooling (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact (= 0.81.1) + - React-jsi (= 0.81.1) + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-runtimeexecutor + - SocketRocket + - React-jsitracing (0.81.1): + - React-jsi + - React-logger (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-Mapbuffer (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-debug + - SocketRocket + - React-microtasksnativemodule (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-jsi + - React-jsiexecutor + - React-RCTFBReactNativeSpec + - ReactCommon/turbomodule/core + - SocketRocket + - react-native-safe-area-context (5.6.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - react-native-safe-area-context/common (= 5.6.1) + - react-native-safe-area-context/fabric (= 5.6.1) + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - react-native-safe-area-context/common (5.6.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - react-native-safe-area-context/fabric (5.6.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - react-native-safe-area-context/common + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - React-NativeModulesApple (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker + - React-Core + - React-cxxreact + - React-featureflags + - React-jsi + - React-jsinspector + - React-jsinspectorcdp + - React-runtimeexecutor + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - React-oscompat (0.81.1) + - React-perflogger (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - SocketRocket + - React-performancetimeline (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-featureflags + - React-jsinspectortracing + - React-perflogger + - React-timing + - SocketRocket + - React-RCTActionSheet (0.81.1): + - React-Core/RCTActionSheetHeaders (= 0.81.1) + - React-RCTAnimation (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - RCTTypeSafety + - React-Core/RCTAnimationHeaders + - React-featureflags + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - SocketRocket + - React-RCTAppDelegate (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-CoreModules + - React-debug + - React-defaultsnativemodule + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-jsitooling + - React-NativeModulesApple + - React-RCTFabric + - React-RCTFBReactNativeSpec + - React-RCTImage + - React-RCTNetwork + - React-RCTRuntime + - React-rendererdebug + - React-RuntimeApple + - React-RuntimeCore + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - ReactCommon + - SocketRocket + - React-RCTBlob (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-Core/RCTBlobHeaders + - React-Core/RCTWebSocket + - React-jsi + - React-jsinspector + - React-jsinspectorcdp + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - React-RCTNetwork + - ReactCommon + - SocketRocket + - React-RCTFabric (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-Core + - React-debug + - React-Fabric + - React-FabricComponents + - React-FabricImage + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectornetwork + - React-jsinspectortracing + - React-performancetimeline + - React-RCTAnimation + - React-RCTFBReactNativeSpec + - React-RCTImage + - React-RCTText + - React-rendererconsistency + - React-renderercss + - React-rendererdebug + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - Yoga + - React-RCTFBReactNativeSpec (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec/components (= 0.81.1) + - ReactCommon + - SocketRocket + - React-RCTFBReactNativeSpec/components (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-jsi + - React-NativeModulesApple + - React-rendererdebug + - React-utils + - ReactCommon + - SocketRocket + - Yoga + - React-RCTImage (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - RCTTypeSafety + - React-Core/RCTImageHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - React-RCTNetwork + - ReactCommon + - SocketRocket + - React-RCTLinking (0.81.1): + - React-Core/RCTLinkingHeaders (= 0.81.1) + - React-jsi (= 0.81.1) + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - ReactCommon/turbomodule/core (= 0.81.1) + - React-RCTNetwork (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - RCTTypeSafety + - React-Core/RCTNetworkHeaders + - React-featureflags + - React-jsi + - React-jsinspectorcdp + - React-jsinspectornetwork + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - SocketRocket + - React-RCTRuntime (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-Core + - React-jsi + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-jsitooling + - React-RuntimeApple + - React-RuntimeCore + - React-runtimeexecutor + - React-RuntimeHermes + - SocketRocket + - React-RCTSettings (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - RCTTypeSafety + - React-Core/RCTSettingsHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - SocketRocket + - React-RCTText (0.81.1): + - React-Core/RCTTextHeaders (= 0.81.1) + - Yoga + - React-RCTVibration (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-Core/RCTVibrationHeaders + - React-jsi + - React-NativeModulesApple + - React-RCTFBReactNativeSpec + - ReactCommon + - SocketRocket + - React-rendererconsistency (0.81.1) + - React-renderercss (0.81.1): + - React-debug + - React-utils + - React-rendererdebug (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-debug + - SocketRocket + - React-RuntimeApple (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker + - React-Core/Default + - React-CoreModules + - React-cxxreact + - React-featureflags + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsitooling + - React-Mapbuffer + - React-NativeModulesApple + - React-RCTFabric + - React-RCTFBReactNativeSpec + - React-RuntimeCore + - React-runtimeexecutor + - React-RuntimeHermes + - React-runtimescheduler + - React-utils + - SocketRocket + - React-RuntimeCore (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-cxxreact + - React-Fabric + - React-featureflags + - React-jserrorhandler + - React-jsi + - React-jsiexecutor + - React-jsinspector + - React-jsitooling + - React-performancetimeline + - React-runtimeexecutor + - React-runtimescheduler + - React-utils + - SocketRocket + - React-runtimeexecutor (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - React-debug + - React-featureflags + - React-jsi (= 0.81.1) + - React-utils + - SocketRocket + - React-RuntimeHermes (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-featureflags + - React-hermes + - React-jsi + - React-jsinspector + - React-jsinspectorcdp + - React-jsinspectortracing + - React-jsitooling + - React-jsitracing + - React-RuntimeCore + - React-runtimeexecutor + - React-utils + - SocketRocket + - React-runtimescheduler (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker + - React-cxxreact + - React-debug + - React-featureflags + - React-jsi + - React-jsinspectortracing + - React-performancetimeline + - React-rendererconsistency + - React-rendererdebug + - React-runtimeexecutor + - React-timing + - React-utils + - SocketRocket + - React-timing (0.81.1): + - React-debug + - React-utils (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-debug + - React-jsi (= 0.81.1) + - SocketRocket + - ReactAppDependencyProvider (0.81.1): + - ReactCodegen + - ReactCodegen (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-FabricImage + - React-featureflags + - React-graphics + - React-jsi + - React-jsiexecutor + - React-NativeModulesApple + - React-RCTAppDelegate + - React-rendererdebug + - React-utils + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - ReactCommon (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - RCT-Folly + - RCT-Folly/Fabric + - ReactCommon/turbomodule (= 0.81.1) + - SocketRocket + - ReactCommon/turbomodule (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker (= 0.81.1) + - React-cxxreact (= 0.81.1) + - React-jsi (= 0.81.1) + - React-logger (= 0.81.1) + - React-perflogger (= 0.81.1) + - ReactCommon/turbomodule/bridging (= 0.81.1) + - ReactCommon/turbomodule/core (= 0.81.1) + - SocketRocket + - ReactCommon/turbomodule/bridging (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker (= 0.81.1) + - React-cxxreact (= 0.81.1) + - React-jsi (= 0.81.1) + - React-logger (= 0.81.1) + - React-perflogger (= 0.81.1) + - SocketRocket + - ReactCommon/turbomodule/core (0.81.1): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - React-callinvoker (= 0.81.1) + - React-cxxreact (= 0.81.1) + - React-debug (= 0.81.1) + - React-featureflags (= 0.81.1) + - React-jsi (= 0.81.1) + - React-logger (= 0.81.1) + - React-perflogger (= 0.81.1) + - React-utils (= 0.81.1) + - SocketRocket + - ReactNativeAlert (0.1.0): + - boost + - DoubleConversion + - fast_float + - fmt + - glog + - hermes-engine + - RCT-Folly + - RCT-Folly/Fabric + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - SocketRocket + - Yoga + - SocketRocket (0.7.1) + - Yoga (0.0.0) + +DEPENDENCIES: + - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) + - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) + - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) + - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) + - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) + - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) + - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) + - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) + - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) + - RCTRequired (from `../node_modules/react-native/Libraries/Required`) + - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) + - React (from `../node_modules/react-native/`) + - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) + - React-Core (from `../node_modules/react-native/`) + - React-Core/RCTWebSocket (from `../node_modules/react-native/`) + - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) + - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) + - React-defaultsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/defaults`) + - React-domnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/dom`) + - React-Fabric (from `../node_modules/react-native/ReactCommon`) + - React-FabricComponents (from `../node_modules/react-native/ReactCommon`) + - React-FabricImage (from `../node_modules/react-native/ReactCommon`) + - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`) + - React-featureflagsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`) + - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) + - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) + - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) + - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) + - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) + - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) + - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) + - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) + - React-jsinspectorcdp (from `../node_modules/react-native/ReactCommon/jsinspector-modern/cdp`) + - React-jsinspectornetwork (from `../node_modules/react-native/ReactCommon/jsinspector-modern/network`) + - React-jsinspectortracing (from `../node_modules/react-native/ReactCommon/jsinspector-modern/tracing`) + - React-jsitooling (from `../node_modules/react-native/ReactCommon/jsitooling`) + - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) + - React-logger (from `../node_modules/react-native/ReactCommon/logger`) + - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) + - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) + - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) + - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) + - React-oscompat (from `../node_modules/react-native/ReactCommon/oscompat`) + - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) + - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`) + - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) + - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) + - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) + - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) + - React-RCTFabric (from `../node_modules/react-native/React`) + - React-RCTFBReactNativeSpec (from `../node_modules/react-native/React`) + - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) + - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) + - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) + - React-RCTRuntime (from `../node_modules/react-native/React/Runtime`) + - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) + - React-RCTText (from `../node_modules/react-native/Libraries/Text`) + - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) + - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`) + - React-renderercss (from `../node_modules/react-native/ReactCommon/react/renderer/css`) + - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) + - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) + - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) + - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) + - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) + - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`) + - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) + - ReactAppDependencyProvider (from `build/generated/ios`) + - ReactCodegen (from `build/generated/ios`) + - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) + - ReactNativeAlert (from `../..`) + - SocketRocket (~> 0.7.1) + - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) + +SPEC REPOS: + trunk: + - SocketRocket + +EXTERNAL SOURCES: + boost: + :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" + DoubleConversion: + :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" + fast_float: + :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" + FBLazyVector: + :path: "../node_modules/react-native/Libraries/FBLazyVector" + fmt: + :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec" + glog: + :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + hermes-engine: + :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" + :tag: hermes-2025-07-07-RNv0.81.0-e0fc67142ec0763c6b6153ca2bf96df815539782 + RCT-Folly: + :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" + RCTDeprecation: + :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" + RCTRequired: + :path: "../node_modules/react-native/Libraries/Required" + RCTTypeSafety: + :path: "../node_modules/react-native/Libraries/TypeSafety" + React: + :path: "../node_modules/react-native/" + React-callinvoker: + :path: "../node_modules/react-native/ReactCommon/callinvoker" + React-Core: + :path: "../node_modules/react-native/" + React-CoreModules: + :path: "../node_modules/react-native/React/CoreModules" + React-cxxreact: + :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-debug: + :path: "../node_modules/react-native/ReactCommon/react/debug" + React-defaultsnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/defaults" + React-domnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/dom" + React-Fabric: + :path: "../node_modules/react-native/ReactCommon" + React-FabricComponents: + :path: "../node_modules/react-native/ReactCommon" + React-FabricImage: + :path: "../node_modules/react-native/ReactCommon" + React-featureflags: + :path: "../node_modules/react-native/ReactCommon/react/featureflags" + React-featureflagsnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/featureflags" + React-graphics: + :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" + React-hermes: + :path: "../node_modules/react-native/ReactCommon/hermes" + React-idlecallbacksnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" + React-ImageManager: + :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" + React-jserrorhandler: + :path: "../node_modules/react-native/ReactCommon/jserrorhandler" + React-jsi: + :path: "../node_modules/react-native/ReactCommon/jsi" + React-jsiexecutor: + :path: "../node_modules/react-native/ReactCommon/jsiexecutor" + React-jsinspector: + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" + React-jsinspectorcdp: + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/cdp" + React-jsinspectornetwork: + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/network" + React-jsinspectortracing: + :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/tracing" + React-jsitooling: + :path: "../node_modules/react-native/ReactCommon/jsitooling" + React-jsitracing: + :path: "../node_modules/react-native/ReactCommon/hermes/executor/" + React-logger: + :path: "../node_modules/react-native/ReactCommon/logger" + React-Mapbuffer: + :path: "../node_modules/react-native/ReactCommon" + React-microtasksnativemodule: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" + react-native-safe-area-context: + :path: "../node_modules/react-native-safe-area-context" + React-NativeModulesApple: + :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" + React-oscompat: + :path: "../node_modules/react-native/ReactCommon/oscompat" + React-perflogger: + :path: "../node_modules/react-native/ReactCommon/reactperflogger" + React-performancetimeline: + :path: "../node_modules/react-native/ReactCommon/react/performance/timeline" + React-RCTActionSheet: + :path: "../node_modules/react-native/Libraries/ActionSheetIOS" + React-RCTAnimation: + :path: "../node_modules/react-native/Libraries/NativeAnimation" + React-RCTAppDelegate: + :path: "../node_modules/react-native/Libraries/AppDelegate" + React-RCTBlob: + :path: "../node_modules/react-native/Libraries/Blob" + React-RCTFabric: + :path: "../node_modules/react-native/React" + React-RCTFBReactNativeSpec: + :path: "../node_modules/react-native/React" + React-RCTImage: + :path: "../node_modules/react-native/Libraries/Image" + React-RCTLinking: + :path: "../node_modules/react-native/Libraries/LinkingIOS" + React-RCTNetwork: + :path: "../node_modules/react-native/Libraries/Network" + React-RCTRuntime: + :path: "../node_modules/react-native/React/Runtime" + React-RCTSettings: + :path: "../node_modules/react-native/Libraries/Settings" + React-RCTText: + :path: "../node_modules/react-native/Libraries/Text" + React-RCTVibration: + :path: "../node_modules/react-native/Libraries/Vibration" + React-rendererconsistency: + :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency" + React-renderercss: + :path: "../node_modules/react-native/ReactCommon/react/renderer/css" + React-rendererdebug: + :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" + React-RuntimeApple: + :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" + React-RuntimeCore: + :path: "../node_modules/react-native/ReactCommon/react/runtime" + React-runtimeexecutor: + :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" + React-RuntimeHermes: + :path: "../node_modules/react-native/ReactCommon/react/runtime" + React-runtimescheduler: + :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" + React-timing: + :path: "../node_modules/react-native/ReactCommon/react/timing" + React-utils: + :path: "../node_modules/react-native/ReactCommon/react/utils" + ReactAppDependencyProvider: + :path: build/generated/ios + ReactCodegen: + :path: build/generated/ios + ReactCommon: + :path: "../node_modules/react-native/ReactCommon" + ReactNativeAlert: + :path: "../.." + Yoga: + :path: "../node_modules/react-native/ReactCommon/yoga" + +SPEC CHECKSUMS: + boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 + DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb + fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 + FBLazyVector: b8f1312d48447cca7b4abc21ed155db14742bd03 + fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd + glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 + hermes-engine: 4f8246b1f6d79f625e0d99472d1f3a71da4d28ca + RCT-Folly: 59ec0ac1f2f39672a0c6e6cecdd39383b764646f + RCTDeprecation: c4b9e2fd0ab200e3af72b013ed6113187c607077 + RCTRequired: e97dd5dafc1db8094e63bc5031e0371f092ae92a + RCTTypeSafety: 720403058b7c1380c6a3ae5706981d6362962c89 + React: f1486d005993b0af01943af1850d3d4f3b597545 + React-callinvoker: 133f69368c8559e744efa345223625d412f5dfbe + React-Core: 559823921b4f294c2840fa8238ca958a29ddc211 + React-CoreModules: c41e7bbfabbc420783bb926f45837a0d5e53341e + React-cxxreact: 9cb9fa738274a1b36b97ede09c8a6717dec1a20b + React-debug: e01581e1589f329e61c95b332bf7f4969b10564b + React-defaultsnativemodule: bbb39447caa6b6cf9405fa0099f828c083640faa + React-domnativemodule: 03744d12b6d56d098531a933730bf1d4cb79bdfb + React-Fabric: 530b3993a12a96e8a7cdb9f0ef48e605277b572e + React-FabricComponents: 271ec2a9b2c00ac66fd6d1fd24e9e964d907751d + React-FabricImage: d0af66e976dbab7f8b81e36dd369fc70727d2695 + React-featureflags: 269704c8eff86e0485c9d384e286350fcda6eb70 + React-featureflagsnativemodule: db1e5d88a912fb08a5ece33fcf64e1b732da8467 + React-graphics: b19d03a01b0722b4dc82f47acb56dc3ed41937e7 + React-hermes: 811606c0aca5a3f9c6fa8e4994e02ca8f677e68e + React-idlecallbacksnativemodule: 3a3df629cd50046c7e4354f9025aefe8f2c84601 + React-ImageManager: 0d53866c63132791e37bb2373f93044fdef14aa3 + React-jserrorhandler: d5700d6ab7162fd575287502a3c5d601d98e7f09 + React-jsi: ece95417fedbed0e7153a855cb8342b7c72ab75e + React-jsiexecutor: 2b0bb644b533df2f5c0cd6ade9a4560d0bf1dd84 + React-jsinspector: 0c160f8510a8852bdf2dac12f0b1949efc18200b + React-jsinspectorcdp: f4b84409f453f61ddd8614ad45139bc594ec6bb5 + React-jsinspectornetwork: 8f2f0ca8c871ca19b571f426002c0012e7fb2aee + React-jsinspectortracing: 33f6b977eb8a4bc1e3d1a4b948809aca083143f9 + React-jsitooling: 2c61529b589e17229a9f0a4a4fc35aa7ad495850 + React-jsitracing: 838a7b0c013c4aff7d382d7fdc78cf442013ba1d + React-logger: 7aef4d74123e5e3d267e5af1fbf5135b5a0d8381 + React-Mapbuffer: 91e0eab42a6ae7f3e34091a126d70fc53bd3823e + React-microtasksnativemodule: 1ead4fe154df3b1ba34b5a9e35ef3c4bdfa72ccb + react-native-safe-area-context: c6e2edd1c1da07bdce287fa9d9e60c5f7b514616 + React-NativeModulesApple: eff2eba56030eb0d107b1642b8f853bc36a833ac + React-oscompat: b12c633e9c00f1f99467b1e0e0b8038895dae436 + React-perflogger: 58d12c4e5df1403030c97b9c621375c312cca454 + React-performancetimeline: 0ee0a3236c77a4ee6d8a6189089e41e4003d292e + React-RCTActionSheet: 3f741a3712653611a6bfc5abceb8260af9d0b218 + React-RCTAnimation: 408ad69ea136e99a463dd33eadecc29e586b3d72 + React-RCTAppDelegate: f03b46e80b8a3dbfa84b35abfe123e02f3ceef83 + React-RCTBlob: bd42e92a00ad22eaab92ffe5c137e7a2f725887a + React-RCTFabric: b99ab638c73cf2d57b886eafdbfb2e4909b0eb9a + React-RCTFBReactNativeSpec: 7ad9aba0e0655e3f29be0a1c3fd4a888fab04dcf + React-RCTImage: 0f1c74f7cd20027f8c34976a211b35d4263a0add + React-RCTLinking: 6d7dfc3a74110df56c3a73cc7626bf4415656542 + React-RCTNetwork: 6a25d8645a80d5b86098675ca39bf8fcf1afa08b + React-RCTRuntime: 38bfe9766565ae3293ca230bc51c9c020a8bc98a + React-RCTSettings: 651d9ae2cdd32f547ad0d225a2c13886d6ad2358 + React-RCTText: 9bc66cd288478e23195e01f5cb45eba79986b2b4 + React-RCTVibration: 371226f5667a00c76d792dcdb5c2e0fcbcde0c3b + React-rendererconsistency: a05f6c37f9389c53213d1e28798e441fa6fbdbcd + React-renderercss: 6e4febfa014b0f53bc171a62b0f713ddbdbb9860 + React-rendererdebug: e94bf27b9d55ef2795caa8e43aa92abc4a373b8b + React-RuntimeApple: 723be5159519eba1cd92449acb29436d21571b82 + React-RuntimeCore: f58eb0f01065c9d27d91de10b2e4ab4c76d83b0e + React-runtimeexecutor: f615ec8742d0b5820170f7c8b4d2c7cb75d93ac9 + React-RuntimeHermes: fddb258e03d330d1132bb19e78fe51ac2f3f41ac + React-runtimescheduler: e92a31460e654ced8587debeec37553315e1b6a5 + React-timing: 97ada2c47b4c5932e7f773c7d239c52b90d6ca68 + React-utils: f0949d247a46b4c09f03e5a3cb1167602d0b729a + ReactAppDependencyProvider: 3eb9096cb139eb433965693bbe541d96eb3d3ec9 + ReactCodegen: 4d203eddf6f977caa324640a20f92e70408d648b + ReactCommon: ce5d4226dfaf9d5dacbef57b4528819e39d3a120 + ReactNativeAlert: 978aefc51fc1fdf1531ee03945cadbe0b2435ba7 + SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 + Yoga: 11c9686a21e2cd82a094a723649d9f4507200fb0 + +PODFILE CHECKSUM: 82c6c207a700457ab40ccd6bd2eb2ab0b0930288 + +COCOAPODS: 1.15.2 diff --git a/example/ios/ReactNativeAlertExample.xcodeproj/project.pbxproj b/example/ios/ReactNativeAlertExample.xcodeproj/project.pbxproj index c44ba9f..a52eb23 100644 --- a/example/ios/ReactNativeAlertExample.xcodeproj/project.pbxproj +++ b/example/ios/ReactNativeAlertExample.xcodeproj/project.pbxproj @@ -11,6 +11,7 @@ 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; }; 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; + AC809C0AB833C0627C8A030A /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -159,6 +160,7 @@ files = ( 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, + AC809C0AB833C0627C8A030A /* PrivacyInfo.xcprivacy in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -271,7 +273,7 @@ "-ObjC", "-lc++", ); - PRODUCT_BUNDLE_IDENTIFIER = "blazejkustra.reactnativealert.example"; + PRODUCT_BUNDLE_IDENTIFIER = blazejkustra.reactnativealert.example; PRODUCT_NAME = ReactNativeAlertExample; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -298,7 +300,7 @@ "-ObjC", "-lc++", ); - PRODUCT_BUNDLE_IDENTIFIER = "blazejkustra.reactnativealert.example"; + PRODUCT_BUNDLE_IDENTIFIER = blazejkustra.reactnativealert.example; PRODUCT_NAME = ReactNativeAlertExample; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; @@ -374,7 +376,10 @@ "-DFOLLY_CFG_NO_COROUTINES=1", "-DFOLLY_HAVE_CLOCK_GETTIME=1", ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; + USE_HERMES = true; }; name = Debug; }; @@ -439,7 +444,9 @@ "-DFOLLY_CFG_NO_COROUTINES=1", "-DFOLLY_HAVE_CLOCK_GETTIME=1", ); + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; + USE_HERMES = true; VALIDATE_PRODUCT = YES; }; name = Release; diff --git a/example/ios/ReactNativeAlertExample.xcworkspace/contents.xcworkspacedata b/example/ios/ReactNativeAlertExample.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..1db28c6 --- /dev/null +++ b/example/ios/ReactNativeAlertExample.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/example/ios/ReactNativeAlertExample/Info.plist b/example/ios/ReactNativeAlertExample/Info.plist index c8be013..bfb32bb 100644 --- a/example/ios/ReactNativeAlertExample/Info.plist +++ b/example/ios/ReactNativeAlertExample/Info.plist @@ -26,7 +26,6 @@ NSAppTransportSecurity - NSAllowsArbitraryLoads NSAllowsLocalNetworking @@ -34,6 +33,8 @@ NSLocationWhenInUseUsageDescription + RCTNewArchEnabled + UILaunchStoryboardName LaunchScreen UIRequiredDeviceCapabilities diff --git a/example/src/App.tsx b/example/src/App.tsx index 42af48c..a8f9718 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -1,4 +1,10 @@ -import { Text, StyleSheet, TouchableOpacity, SafeAreaView } from 'react-native'; +import { + Text, + StyleSheet, + TouchableOpacity, + SafeAreaView, + ScrollView, +} from 'react-native'; import Alert from '@blazejkustra/react-native-alert'; export default function App() { @@ -9,6 +15,17 @@ export default function App() { ]); }; + const showDestructiveAlert = () => { + Alert.alert( + 'Delete Item', + 'Are you sure you want to delete this item? This action cannot be undone.', + [ + { text: 'Cancel', style: 'cancel' }, + { text: 'Delete', style: 'destructive' }, + ] + ); + }; + const showPrompt = () => { Alert.prompt( 'Enter Name', @@ -30,31 +47,284 @@ export default function App() { ); }; - const showDestructiveAlert = () => { - Alert.alert('Delete Item', 'Are you sure you want to delete this item?', [ - { text: 'Cancel', style: 'cancel' }, - { text: 'Delete', style: 'destructive' }, - ]); + const showPasswordPrompt = () => { + Alert.prompt( + 'Enter Password', + 'Please enter your password:', + [ + { text: 'Cancel', style: 'cancel' }, + { + text: 'Login', + style: 'default', + onPress: (value) => { + if (value) { + Alert.alert('Success', 'Password entered successfully!'); + } + }, + }, + ], + 'secure-text' + ); + }; + + const showLoginPrompt = () => { + Alert.prompt( + 'Login', + 'Enter your credentials:', + [ + { text: 'Cancel', style: 'cancel' }, + { + text: 'Sign In', + style: 'default', + onPress: (value) => { + Alert.alert('Login', `Login attempted with: ${value}`); + }, + }, + ], + 'login-password' + ); + }; + + const showEmailPrompt = () => { + Alert.prompt( + 'Enter Email', + 'Please enter your email address:', + [ + { text: 'Cancel', style: 'cancel' }, + { + text: 'Subscribe', + style: 'default', + onPress: (value) => { + if (value && value.includes('@')) { + Alert.alert('Success', `Subscribed with: ${value}`); + } else { + Alert.alert('Error', 'Please enter a valid email address'); + } + }, + }, + ], + 'plain-text', + '', + 'email-address' + ); + }; + + const showPhonePrompt = () => { + Alert.prompt( + 'Enter Phone Number', + 'Please enter your phone number:', + [ + { text: 'Cancel', style: 'cancel' }, + { + text: 'Save', + style: 'default', + onPress: (value) => { + if (value) { + Alert.alert('Saved', `Phone number saved: ${value}`); + } + }, + }, + ], + 'plain-text', + '', + 'phone-pad' + ); + }; + + const showNumericPrompt = () => { + Alert.prompt( + 'Enter Age', + 'Please enter your age:', + [ + { text: 'Cancel', style: 'cancel' }, + { + text: 'Confirm', + style: 'default', + onPress: (value) => { + const age = parseInt(value || '0', 10); + if (age > 0 && age < 150) { + Alert.alert('Age Confirmed', `You are ${age} years old`); + } else { + Alert.alert('Invalid Age', 'Please enter a valid age'); + } + }, + }, + ], + 'plain-text', + '', + 'numeric' + ); + }; + + const showURLPrompt = () => { + Alert.prompt( + 'Enter Website', + 'Please enter a website URL:', + [ + { text: 'Cancel', style: 'cancel' }, + { + text: 'Visit', + style: 'default', + onPress: (value) => { + if ( + value && + (value.startsWith('http://') || value.startsWith('https://')) + ) { + Alert.alert('URL Valid', `Opening: ${value}`); + } else { + Alert.alert( + 'Invalid URL', + 'Please enter a valid URL starting with http:// or https://' + ); + } + }, + }, + ], + 'plain-text', + 'https://', + 'url' + ); + }; + + const showMultiButtonPrompt = () => { + Alert.prompt( + 'Enter Comment', + 'Please enter your comment:', + [ + { text: 'Cancel', style: 'cancel' }, + { + text: 'Save Draft', + style: 'default', + onPress: () => { + Alert.alert( + 'Draft Saved', + 'Your comment has been saved as a draft' + ); + }, + }, + { + text: 'Post', + style: 'default', + onPress: (value) => { + if (value && value.trim().length > 0) { + Alert.alert('Posted', `Comment posted: "${value}"`); + } else { + Alert.alert('Error', 'Please enter a comment before posting'); + } + }, + }, + ], + 'plain-text' + ); + }; + + const showDestructivePrompt = () => { + Alert.prompt( + 'Delete Account', + 'Type "DELETE" to confirm account deletion, this action cannot be undone. Are you sure you want to proceed? You will lose all your data. Now type "DELETE" to confirm, or type anything else to cancel.', + [ + { text: 'Cancel', style: 'cancel' }, + { + text: 'Delete Account', + style: 'destructive', + onPress: (value) => { + if (value === 'DELETE') { + Alert.alert( + 'Account Deleted', + 'Your account has been permanently deleted' + ); + } else { + Alert.alert( + 'Invalid Confirmation', + 'Please type "DELETE" exactly to confirm' + ); + } + }, + }, + ], + 'plain-text' + ); }; return ( React Native Alert Demo - - Show Alert - + + + Show Alert + + + + Show Destructive Alert + - - Show Prompt - + + Show Basic Prompt + - - Show Destructive Alert - + + Show Password Prompt + + + + Show Login Prompt + + + + Show Email Prompt + + + + Show Phone Prompt + + + + Show Numeric Prompt + + + + Show URL Prompt + + + + Show Multi-Button Prompt + + + + Show Destructive Prompt + + ); } @@ -62,24 +332,48 @@ export default function App() { const styles = StyleSheet.create({ container: { flex: 1, - alignItems: 'center', - justifyContent: 'center', - padding: 20, backgroundColor: '#f5f5f5', }, title: { fontSize: 24, fontWeight: 'bold', - marginBottom: 40, + marginBottom: 20, textAlign: 'center', + paddingTop: 20, + }, + scrollView: { + flex: 1, + paddingHorizontal: 20, }, button: { backgroundColor: '#007AFF', paddingHorizontal: 20, paddingVertical: 12, borderRadius: 8, - marginBottom: 16, + marginBottom: 12, minWidth: 200, + alignSelf: 'center', + }, + passwordButton: { + backgroundColor: '#8E44AD', + }, + loginButton: { + backgroundColor: '#E67E22', + }, + emailButton: { + backgroundColor: '#3498DB', + }, + phoneButton: { + backgroundColor: '#2ECC71', + }, + numericButton: { + backgroundColor: '#9B59B6', + }, + urlButton: { + backgroundColor: '#1ABC9C', + }, + multiButton: { + backgroundColor: '#F39C12', }, destructiveButton: { backgroundColor: '#FF3B30', diff --git a/src/index.ios.ts b/src/Alert/index.ios.ts similarity index 82% rename from src/index.ios.ts rename to src/Alert/index.ios.ts index 150051e..a43cb40 100644 --- a/src/index.ios.ts +++ b/src/Alert/index.ios.ts @@ -1,9 +1,4 @@ import { Alert as RNAlert } from 'react-native'; -import type { - AlertButton, - AlertOptions, - PromptButtons, -} from './NativeReactNativeAlert'; /** * iOS-specific Alert implementation @@ -28,4 +23,3 @@ class Alert { } export default Alert; -export type { AlertButton, AlertOptions, PromptButtons }; diff --git a/src/Alert/index.ts b/src/Alert/index.ts new file mode 100644 index 0000000..c08600b --- /dev/null +++ b/src/Alert/index.ts @@ -0,0 +1,81 @@ +import { Alert as RNAlert } from 'react-native'; +import ReactNativeAlert from '../NativeReactNativeAlert'; + +const ACTION = { buttonClicked: 0, dismissed: 1 } as const; +type AlertButton = NonNullable[2]>[number]; + +/** + * Android-specific Alert implementation + * Uses custom native module for both alerts and prompts with Material Design + */ +class Alert { + /** + * Launches an alert dialog with the specified title and message. + * Uses custom native module with Material Design for Android. + */ + static alert(...args: Parameters) { + RNAlert.alert(...args); + } + + /** + * Launches a prompt dialog with the specified title and message, allowing the user to enter text. + * Uses custom native module with Material Design for Android. + */ + static prompt( + ...[ + title, + message, + callbackOrButtons, + type, + defaultValue, + keyboardType, + options, + ]: Parameters + ) { + // Normalize to button array + parallel callbacks list (kept in JS!) + let buttons: AlertButton[] = []; + let callbacks: Array<((text: string) => void) | undefined> = []; + + if (typeof callbackOrButtons === 'function') { + callbacks = [callbackOrButtons]; + buttons = [ + { text: 'Cancel', style: 'cancel' }, + { text: 'OK', style: 'default' }, + ]; + } else if (Array.isArray(callbackOrButtons)) { + buttons = callbackOrButtons.slice(0, 3); + callbacks = buttons.map((b) => b?.onPress as (text: string) => void); + } else { + buttons = [ + { text: 'Cancel', style: 'cancel' }, + { text: 'OK', style: 'default' }, + ]; + } + + ReactNativeAlert.prompt( + { + title: title ?? '', + message: message ?? undefined, + cancelable: !!options?.cancelable, + buttons: buttons.map((b) => ({ + text: b?.text ?? '', + style: b?.style ?? 'default', + })), + type: type ?? 'plain-text', + defaultValue: defaultValue ?? '', + keyboardType, + userInterfaceStyle: options?.userInterfaceStyle ?? 'unspecified', + }, + console.warn, + (action: number, buttonKey: number, text?: string | null) => { + if (action === ACTION.buttonClicked) { + callbacks[buttonKey]?.(text ?? ''); + } else if (action === ACTION.dismissed) { + options?.onDismiss?.(); + } + } + ); + } +} + +export default Alert; diff --git a/src/index.ts b/src/Alert/index.web.ts similarity index 90% rename from src/index.ts rename to src/Alert/index.web.ts index 0b2df14..7676025 100644 --- a/src/index.ts +++ b/src/Alert/index.web.ts @@ -1,13 +1,8 @@ -import type { - AlertButton, - AlertOptions, - PromptButtons, -} from './NativeReactNativeAlert'; import { Alert as RNAlert } from 'react-native'; -import { createDialogElement } from './web/alert'; +import { createDialogElement } from './utils/web'; // Import CSS for web platform -require('./alert.css'); +// require('./web/alert.css'); /** * Web-specific Alert implementation using HTML5 dialog elements @@ -67,4 +62,3 @@ class Alert { } export default Alert; -export type { AlertButton, AlertOptions, PromptButtons }; diff --git a/src/web/alert.css b/src/Alert/utils/default-styles.css similarity index 100% rename from src/web/alert.css rename to src/Alert/utils/default-styles.css diff --git a/src/web/alert.ts b/src/Alert/utils/web.ts similarity index 95% rename from src/web/alert.ts rename to src/Alert/utils/web.ts index 1ad7b41..08a325e 100644 --- a/src/web/alert.ts +++ b/src/Alert/utils/web.ts @@ -1,10 +1,10 @@ -import type { AlertButton, PromptButtons } from '../NativeReactNativeAlert'; +import { Alert as RNAlert, type AlertButton } from 'react-native'; // Web implementation export function createDialogElement( title: string | null | undefined, message?: string | null | undefined, - buttons: PromptButtons | null | undefined = [ + buttons: Parameters[2] = [ { text: 'OK', style: 'default' }, ], inputField?: string @@ -98,7 +98,7 @@ export function showWebAlert( export function showWebPrompt( title: string, message?: string, - buttons?: PromptButtons, + buttons?: Parameters[2], type?: 'default' | 'plain-text' | 'secure-text' | 'login-password', defaultValue?: string ) { diff --git a/src/NativeReactNativeAlert.ts b/src/NativeReactNativeAlert.ts index 1900bc9..4f9af18 100644 --- a/src/NativeReactNativeAlert.ts +++ b/src/NativeReactNativeAlert.ts @@ -1,63 +1,48 @@ -import { - TurboModuleRegistry, - Alert as RNAlert, - type TurboModule, - type AlertButton as RNAlertButton, - type AlertOptions as RNAlertOptions, -} from 'react-native'; +import type { TurboModule } from 'react-native'; +import { TurboModuleRegistry } from 'react-native'; -export type AlertButton = RNAlertButton; -export type AlertOptions = RNAlertOptions; +export type AlertButtonStyle = 'default' | 'cancel' | 'destructive'; +export type AlertType = + | 'default' + | 'plain-text' + | 'secure-text' + | 'login-password'; -// Custom prompt types that support function callbacks -export type PromptButtons = AlertButton[] | ((text: string) => void); +export type DialogButton = { + text?: string | null; + style?: AlertButtonStyle | null; + isPreferred?: boolean | null; // ignored on Android if you want +}; + +export type DialogOptions = { + title?: string | null; + message?: string | null; + cancelable?: boolean | null; + userInterfaceStyle?: 'unspecified' | 'light' | 'dark' | 'automatic' | null; + + type?: AlertType | null; + defaultValue?: string | null; + keyboardType?: string | null; + + placeholder?: string | null; + usernamePlaceholder?: string | null; + maxLength?: number | null; + usernameMaxLength?: number | null; + + buttons?: Array | null; +}; export interface Spec extends TurboModule { - /** - * Launches an alert dialog with the specified title and message. - * - * @param title - The dialog's title - * @param message - An optional message that appears below the title - * @param buttons - An optional array of buttons. If no buttons are provided, the alert will show a default 'OK' button - * @param options - An optional AlertOptions object - * - * @example - * ```typescript - * // Simple alert - * alert('Alert Title', 'This is the alert message'); - * - * // Alert with custom buttons - * alert('Delete Item', 'Are you sure?', [ - * { text: 'Cancel', style: 'cancel' }, - * { text: 'Delete', style: 'destructive' } - * ]); - * ``` - */ - alert: typeof RNAlert.alert; - - /** - * Launches a prompt dialog with the specified title and message, allowing the user to enter text. - * - * @param title - The dialog's title - * @param message - An optional message that appears below the title - * @param buttons - An optional array of buttons. If no buttons are provided, the prompt will show default 'Cancel' and 'OK' buttons - * @param type - The type of text input. Can be 'default', 'plain-text', 'secure-text', or 'login-password' - * @param defaultValue - The default text in the text input - * @param keyboardType - The keyboard type (Android only) - * - * @example - * ```typescript - * // Simple prompt - * prompt('Enter Name', 'Please enter your name:'); - * - * // Secure text prompt - * prompt('Enter Password', 'Please enter your password:', [ - * { text: 'Cancel', style: 'cancel' }, - * { text: 'OK', style: 'default', onPress: (value) => console.log(value) } - * ], 'secure-text'); - * ``` - */ - prompt: typeof RNAlert.prompt; + prompt( + config: DialogOptions, + onError: (message: string) => void, + onAction: ( + action: number, + buttonKey: number, + text?: string | null, + username?: string | null + ) => void + ): void; } export default TurboModuleRegistry.getEnforcing('ReactNativeAlert'); diff --git a/src/index.android.ts b/src/index.android.ts deleted file mode 100644 index 0389883..0000000 --- a/src/index.android.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Alert as RNAlert } from 'react-native'; -import ReactNativeAlert from './NativeReactNativeAlert'; -import type { AlertButton, AlertOptions } from './NativeReactNativeAlert'; - -/** - * Android-specific Alert implementation - * Uses custom native module for both alerts and prompts with Material Design - */ -class Alert { - /** - * Launches an alert dialog with the specified title and message. - * Uses custom native module with Material Design for Android. - */ - static alert(...args: Parameters) { - RNAlert.alert(...args); - } - - /** - * Launches a prompt dialog with the specified title and message, allowing the user to enter text. - * Uses custom native module with Material Design for Android. - */ - static prompt(...args: Parameters) { - ReactNativeAlert.prompt(...args); - } -} - -export default Alert; -export type { AlertButton, AlertOptions }; diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 0000000..becaea7 --- /dev/null +++ b/src/index.tsx @@ -0,0 +1 @@ +export { default } from './Alert'; diff --git a/src/__mocks__/NativeReactNativeAlert.ts b/tests/__mocks__/NativeReactNativeAlert.ts similarity index 100% rename from src/__mocks__/NativeReactNativeAlert.ts rename to tests/__mocks__/NativeReactNativeAlert.ts diff --git a/src/__tests__/index.test.tsx b/tests/__tests__/index.test.tsx similarity index 93% rename from src/__tests__/index.test.tsx rename to tests/__tests__/index.test.tsx index d00ec6e..1563e46 100644 --- a/src/__tests__/index.test.tsx +++ b/tests/__tests__/index.test.tsx @@ -1,4 +1,4 @@ -import Alert from '../index'; +import Alert from '../../src/Alert/index.web'; describe('ReactNativeAlert', () => { it('should export Alert class', () => { diff --git a/yarn.lock b/yarn.lock index 9f340dc..950e17e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1473,7 +1473,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.25.0": +"@babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.25.0": version: 7.28.4 resolution: "@babel/runtime@npm:7.28.4" checksum: 934b0a0460f7d06637d93fcd1a44ac49adc33518d17253b5a0b55ff4cb90a45d8fe78bf034b448911dbec7aff2a90b918697559f78d21c99ff8dbadae9565b55 @@ -1538,11 +1538,14 @@ __metadata: "@react-native/new-app-screen": 0.81.1 "@react-native/typescript-config": 0.81.1 "@types/react": ^19.1.0 + babel-plugin-react-native-web: ^0.21.1 react: 19.1.0 + react-dom: ^19.1.1 react-native: 0.81.1 react-native-builder-bob: ^0.40.13 react-native-monorepo-config: ^0.1.9 react-native-safe-area-context: ^5.5.2 + react-native-web: ^0.21.1 languageName: unknown linkType: soft @@ -3347,6 +3350,13 @@ __metadata: languageName: node linkType: hard +"@react-native/normalize-colors@npm:^0.74.1": + version: 0.74.89 + resolution: "@react-native/normalize-colors@npm:0.74.89" + checksum: df62772f029dd132d3061a8ee7f90b6aaf5c525bb7e33c22908249daffa42995cddd91adc790ec9ce701636c14eeafc1809a9d0d879e3f8c71c9f340145abfce + languageName: node + linkType: hard + "@react-native/typescript-config@npm:0.81.1": version: 0.81.1 resolution: "@react-native/typescript-config@npm:0.81.1" @@ -4139,7 +4149,7 @@ __metadata: languageName: node linkType: hard -"asap@npm:~2.0.6": +"asap@npm:~2.0.3, asap@npm:~2.0.6": version: 2.0.6 resolution: "asap@npm:2.0.6" checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d @@ -4272,6 +4282,13 @@ __metadata: languageName: node linkType: hard +"babel-plugin-react-native-web@npm:^0.21.1": + version: 0.21.1 + resolution: "babel-plugin-react-native-web@npm:0.21.1" + checksum: b96c69c0d883bd4fb0e5e3cb5f568292579d1ab96daabebeed2cf734f022f5b96113c1d6d988236de36a5474a3ae7e2d72e3e83ee418467a22a2aa24f935e621 + languageName: node + linkType: hard + "babel-plugin-syntax-hermes-parser@npm:0.29.1": version: 0.29.1 resolution: "babel-plugin-syntax-hermes-parser@npm:0.29.1" @@ -5235,6 +5252,15 @@ __metadata: languageName: node linkType: hard +"cross-fetch@npm:^3.1.5": + version: 3.2.0 + resolution: "cross-fetch@npm:3.2.0" + dependencies: + node-fetch: ^2.7.0 + checksum: 8ded5ea35f705e81e569e7db244a3f96e05e95996ff51877c89b0c1ec1163c76bb5dad77d0f8fba6bb35a0abacb36403d7271dc586d8b1f636110ee7a8d959fd + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3, cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" @@ -5246,6 +5272,15 @@ __metadata: languageName: node linkType: hard +"css-in-js-utils@npm:^3.1.0": + version: 3.1.0 + resolution: "css-in-js-utils@npm:3.1.0" + dependencies: + hyphenate-style-name: ^1.0.3 + checksum: 066318e918c04a5e5bce46b38fe81052ea6ac051bcc6d3c369a1d59ceb1546cb2b6086901ab5d22be084122ee3732169996a3dfb04d3406eaee205af77aec61b + languageName: node + linkType: hard + "csstype@npm:^3.0.2": version: 3.1.3 resolution: "csstype@npm:3.1.3" @@ -6378,6 +6413,28 @@ __metadata: languageName: node linkType: hard +"fbjs-css-vars@npm:^1.0.0": + version: 1.0.2 + resolution: "fbjs-css-vars@npm:1.0.2" + checksum: 72baf6d22c45b75109118b4daecb6c8016d4c83c8c0f23f683f22e9d7c21f32fff6201d288df46eb561e3c7d4bb4489b8ad140b7f56444c453ba407e8bd28511 + languageName: node + linkType: hard + +"fbjs@npm:^3.0.4": + version: 3.0.5 + resolution: "fbjs@npm:3.0.5" + dependencies: + cross-fetch: ^3.1.5 + fbjs-css-vars: ^1.0.0 + loose-envify: ^1.0.0 + object-assign: ^4.1.0 + promise: ^7.1.1 + setimmediate: ^1.0.5 + ua-parser-js: ^1.0.35 + checksum: e609b5b64686bc96495a5c67728ed9b2710b9b3d695c5759c5f5e47c9483d1c323543ac777a86459e3694efc5712c6ce7212e944feb19752867d699568bb0e54 + languageName: node + linkType: hard + "fdir@npm:^6.4.4, fdir@npm:^6.5.0": version: 6.5.0 resolution: "fdir@npm:6.5.0" @@ -7089,6 +7146,13 @@ __metadata: languageName: node linkType: hard +"hyphenate-style-name@npm:^1.0.3": + version: 1.1.0 + resolution: "hyphenate-style-name@npm:1.1.0" + checksum: b9ed74e29181d96bd58a2d0e62fc4a19879db591dba268275829ff0ae595fcdf11faafaeaa63330a45c3004664d7db1f0fc7cdb372af8ee4615ed8260302c207 + languageName: node + linkType: hard + "iconv-lite@npm:0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" @@ -7223,6 +7287,15 @@ __metadata: languageName: node linkType: hard +"inline-style-prefixer@npm:^7.0.1": + version: 7.0.1 + resolution: "inline-style-prefixer@npm:7.0.1" + dependencies: + css-in-js-utils: ^3.1.0 + checksum: 07a72573dfdac5e08fa18f5ce71d922861716955e230175ac415db227d9ed49443c764356cb407a92f4c85b30ebf39604165260b4dfbf3196b7736d7332c5c06 + languageName: node + linkType: hard + "inquirer@npm:12.7.0": version: 12.7.0 resolution: "inquirer@npm:12.7.0" @@ -8830,6 +8903,13 @@ __metadata: languageName: node linkType: hard +"memoize-one@npm:^6.0.0": + version: 6.0.0 + resolution: "memoize-one@npm:6.0.0" + checksum: f185ea69f7cceae5d1cb596266dcffccf545e8e7b4106ec6aa93b71ab9d16460dd118ac8b12982c55f6d6322fcc1485de139df07eacffaae94888b9b3ad7675f + languageName: node + linkType: hard + "meow@npm:^12.0.1": version: 12.1.1 resolution: "meow@npm:12.1.1" @@ -9378,6 +9458,20 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:^2.7.0": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5 + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 11.4.2 resolution: "node-gyp@npm:11.4.2" @@ -9497,7 +9591,7 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4.1.1": +"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f @@ -10049,6 +10143,13 @@ __metadata: languageName: node linkType: hard +"postcss-value-parser@npm:^4.2.0": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -10102,6 +10203,15 @@ __metadata: languageName: node linkType: hard +"promise@npm:^7.1.1": + version: 7.3.1 + resolution: "promise@npm:7.3.1" + dependencies: + asap: ~2.0.3 + checksum: 475bb069130179fbd27ed2ab45f26d8862376a137a57314cf53310bdd85cc986a826fd585829be97ebc0aaf10e9d8e68be1bfe5a4a0364144b1f9eedfa940cf1 + languageName: node + linkType: hard + "promise@npm:^8.3.0": version: 8.3.0 resolution: "promise@npm:8.3.0" @@ -10250,6 +10360,17 @@ __metadata: languageName: node linkType: hard +"react-dom@npm:^19.1.1": + version: 19.1.1 + resolution: "react-dom@npm:19.1.1" + dependencies: + scheduler: ^0.26.0 + peerDependencies: + react: ^19.1.1 + checksum: 71d63df955e99bb58470c6ae12ebb82fa80e2a73147c387b73a31c17bcff803ce8aded52ae0c4391c9b413be0aa449249d8be7d063136826d1f0caba9720a907 + languageName: node + linkType: hard + "react-is@npm:^16.13.1": version: 16.13.1 resolution: "react-is@npm:16.13.1" @@ -10316,6 +10437,25 @@ __metadata: languageName: node linkType: hard +"react-native-web@npm:^0.21.1": + version: 0.21.1 + resolution: "react-native-web@npm:0.21.1" + dependencies: + "@babel/runtime": ^7.18.6 + "@react-native/normalize-colors": ^0.74.1 + fbjs: ^3.0.4 + inline-style-prefixer: ^7.0.1 + memoize-one: ^6.0.0 + nullthrows: ^1.1.1 + postcss-value-parser: ^4.2.0 + styleq: ^0.1.3 + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + checksum: 9c1e10c35feaf334dcb69aa8d8b01eda78713e6e4597f462e88ce1e4706d72978059b9ad322856c87d4b7c27b97914ad3185770a1980cdd838ebc7baeaca469e + languageName: node + linkType: hard + "react-native@npm:0.81.1": version: 0.81.1 resolution: "react-native@npm:0.81.1" @@ -10782,7 +10922,7 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:0.26.0": +"scheduler@npm:0.26.0, scheduler@npm:^0.26.0": version: 0.26.0 resolution: "scheduler@npm:0.26.0" checksum: c63a9f1c0e5089b537231cff6c11f75455b5c8625ae09535c1d7cd0a1b0c77ceecdd9f1074e5e063da5d8dc11e73e8033dcac3361791088be08a6e60c0283ed9 @@ -10891,6 +11031,13 @@ __metadata: languageName: node linkType: hard +"setimmediate@npm:^1.0.5": + version: 1.0.5 + resolution: "setimmediate@npm:1.0.5" + checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd + languageName: node + linkType: hard + "setprototypeof@npm:1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" @@ -11380,6 +11527,13 @@ __metadata: languageName: node linkType: hard +"styleq@npm:^0.1.3": + version: 0.1.3 + resolution: "styleq@npm:0.1.3" + checksum: 14a8d23abd914166a9b4bd04ed753bd91363f0e029ee4a94ec2c7dc37d3213fe01fceee22dc655288da3ae89f5dc01cec42d5e2b58478b0dea33bf5bdf509be1 + languageName: node + linkType: hard + "supports-color@npm:^7.1.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" @@ -11524,6 +11678,13 @@ __metadata: languageName: node linkType: hard +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 + languageName: node + linkType: hard + "ts-api-utils@npm:^1.3.0": version: 1.4.3 resolution: "ts-api-utils@npm:1.4.3" @@ -11763,6 +11924,15 @@ __metadata: languageName: node linkType: hard +"ua-parser-js@npm:^1.0.35": + version: 1.0.41 + resolution: "ua-parser-js@npm:1.0.41" + bin: + ua-parser-js: script/cli.js + checksum: a57c258ea3a242ade7601460ddf9a7e990d8d8bffc15df2ca87057a81993ca19f5045432c744d07bf2d9f280665d84aebb08630c5af5bea3922fdbe8f6fe6cb0 + languageName: node + linkType: hard + "uglify-js@npm:^3.1.4": version: 3.19.3 resolution: "uglify-js@npm:3.19.3" @@ -11993,6 +12163,13 @@ __metadata: languageName: node linkType: hard +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c + languageName: node + linkType: hard + "whatwg-fetch@npm:^3.0.0": version: 3.6.20 resolution: "whatwg-fetch@npm:3.6.20" @@ -12000,6 +12177,16 @@ __metadata: languageName: node linkType: hard +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: ~0.0.3 + webidl-conversions: ^3.0.0 + checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c + languageName: node + linkType: hard + "which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": version: 1.1.1 resolution: "which-boxed-primitive@npm:1.1.1" From 9c40be94c7ce66fd67138689edfb4e8ab28e1af4 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 9 Sep 2025 22:22:40 +0200 Subject: [PATCH 03/19] fix: prevent multiple dialog displays and apply theme-aware background tint --- .../reactnativealert/ReactNativeAlertModule.kt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertModule.kt b/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertModule.kt index b3f2b82..19ea923 100644 --- a/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertModule.kt +++ b/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertModule.kt @@ -38,6 +38,11 @@ class ReactNativeAlertModule( onError: Callback, onAction: Callback ) { + // Prevent multiple dialogs from being shown at once + if (dialogRef.get()?.isShowing == true) { + return + } + val activity = currentActivity ?: return if (activity.isFinishing || (Build.VERSION.SDK_INT >= 17 && activity.isDestroyed)) return @@ -69,21 +74,25 @@ class ReactNativeAlertModule( labels.getOrNull(0)?.let { text -> builder.setNeutralButton(text) { _, _ -> + dialogRef.clear() onAction.invoke(0 /*buttonClicked*/, 0 /*neutral*/, mainInput?.text?.toString(), usernameInput?.text?.toString()) } } labels.getOrNull(1)?.let { text -> builder.setNegativeButton(text) { _, _ -> + dialogRef.clear() onAction.invoke(0, 1 /*negative*/, mainInput?.text?.toString(), usernameInput?.text?.toString()) } } labels.getOrNull(2)?.let { text -> builder.setPositiveButton(text) { _, _ -> + dialogRef.clear() onAction.invoke(0, 2 /*positive*/, mainInput?.text?.toString(), usernameInput?.text?.toString()) } } builder.setOnCancelListener { + dialogRef.clear() onAction.invoke(1 /*dismissed*/, -1, null, null) } @@ -131,6 +140,10 @@ class ReactNativeAlertModule( config.getIntOrNull("usernameMaxLength")?.takeIf { it > 0 }?.let { filters = arrayOf(InputFilter.LengthFilter(it)) } + val typedArray = ctx.obtainStyledAttributes(intArrayOf(android.R.attr.colorControlNormal)) + val tintColor = typedArray.getColor(0, 0xFF000000.toInt()) + typedArray.recycle() + backgroundTintList = android.content.res.ColorStateList.valueOf(tintColor) val margin = (ctx.resources.displayMetrics.density * 4).toInt() val params = LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, @@ -152,6 +165,11 @@ class ReactNativeAlertModule( config.getIntOrNull("maxLength")?.takeIf { it > 0 }?.let { filters = arrayOf(InputFilter.LengthFilter(it)) } + // Apply theme-aware background tint + val typedArray = ctx.obtainStyledAttributes(intArrayOf(android.R.attr.colorControlNormal)) + val tintColor = typedArray.getColor(0, 0xFF000000.toInt()) + typedArray.recycle() + backgroundTintList = android.content.res.ColorStateList.valueOf(tintColor) layoutParams = LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT From 41ece4c628f4f1cc670b3e0c434f967b39d73b1c Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 9 Sep 2025 22:30:03 +0200 Subject: [PATCH 04/19] fix: ensure keyboard visibility on dialog show and improve input focus handling --- .../ReactNativeAlertModule.kt | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertModule.kt b/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertModule.kt index 19ea923..23ca554 100644 --- a/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertModule.kt +++ b/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertModule.kt @@ -6,6 +6,8 @@ import android.text.InputFilter import android.text.InputType import android.view.ContextThemeWrapper import android.view.ViewGroup +import android.view.WindowManager +import android.view.inputmethod.InputMethodManager import android.widget.EditText import android.widget.LinearLayout import androidx.appcompat.app.AlertDialog @@ -98,21 +100,28 @@ class ReactNativeAlertModule( val dialog = builder.create() dialogRef = WeakReference(dialog) + + // Set window soft input mode to show keyboard + dialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE) + dialog.show() - - // Focus the first input field after dialog is shown + + // Show keyboard after dialog is shown val firstInput = usernameInput ?: mainInput - firstInput?.requestFocus() + firstInput?.let { input -> + input.requestFocus() + input.post { + val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + imm.showSoftInput(input, InputMethodManager.SHOW_IMPLICIT) + } + } } } // ----- Lifecycle ----- override fun onHostResume() = Unit - override fun onHostPause() { - dialogRef.get()?.let { if (it.isShowing) it.dismiss() } - } + override fun onHostPause() = Unit override fun onHostDestroy() { - dialogRef.get()?.let { if (it.isShowing) it.dismiss() } dialogRef.clear() } From 45bbe48395eef348fe9b3437fbf1b738f883f17a Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 9 Sep 2025 22:30:26 +0200 Subject: [PATCH 05/19] fix: dismiss dialog on host destroy to prevent memory leaks --- .../com/blazejkustra/reactnativealert/ReactNativeAlertModule.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertModule.kt b/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertModule.kt index 23ca554..3df5b92 100644 --- a/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertModule.kt +++ b/android/src/main/java/com/blazejkustra/reactnativealert/ReactNativeAlertModule.kt @@ -122,6 +122,7 @@ class ReactNativeAlertModule( override fun onHostResume() = Unit override fun onHostPause() = Unit override fun onHostDestroy() { + dialogRef.get()?.let { if (it.isShowing) it.dismiss() } dialogRef.clear() } From dde00189ac6d2dd2facc978f9e56845afe2eaaec Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 9 Sep 2025 22:33:31 +0200 Subject: [PATCH 06/19] feat: add nested example --- example/src/App.tsx | 81 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/example/src/App.tsx b/example/src/App.tsx index a8f9718..f3e2e60 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -246,6 +246,77 @@ export default function App() { ); }; + const showNestedPrompt = () => { + Alert.prompt( + 'Create Account', + 'Enter your username:', + [ + { text: 'Cancel', style: 'cancel' }, + { + text: 'Next', + style: 'default', + onPress: (username) => { + if (username && username.trim().length > 0) { + // First prompt successful, open second prompt + Alert.prompt( + 'Create Account', + `Username: ${username}\n\nEnter your email address:`, + [ + { text: 'Back', style: 'cancel' }, + { + text: 'Next', + style: 'default', + onPress: (email) => { + if (email && email.includes('@')) { + // Second prompt successful, open third prompt + Alert.prompt( + 'Create Account', + `Username: ${username}\nEmail: ${email}\n\nEnter your password:`, + [ + { text: 'Back', style: 'cancel' }, + { + text: 'Create Account', + style: 'default', + onPress: (password) => { + if (password && password.length >= 6) { + Alert.alert( + 'Account Created!', + `Welcome ${username}!\nEmail: ${email}\nPassword: ${'*'.repeat(password.length)}` + ); + } else { + Alert.alert( + 'Invalid Password', + 'Password must be at least 6 characters long' + ); + } + }, + }, + ], + 'secure-text' + ); + } else { + Alert.alert( + 'Invalid Email', + 'Please enter a valid email address' + ); + } + }, + }, + ], + 'plain-text', + '', + 'email-address' + ); + } else { + Alert.alert('Invalid Username', 'Please enter a valid username'); + } + }, + }, + ], + 'plain-text' + ); + }; + return ( React Native Alert Demo @@ -324,6 +395,13 @@ export default function App() { > Show Destructive Prompt + + + Show Nested Prompts + ); @@ -378,6 +456,9 @@ const styles = StyleSheet.create({ destructiveButton: { backgroundColor: '#FF3B30', }, + nestedButton: { + backgroundColor: '#34495E', + }, buttonText: { color: 'white', fontSize: 16, From 56e8b8b656f8850afea55c54450d0699a4a1248a Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 9 Sep 2025 22:33:53 +0200 Subject: [PATCH 07/19] feat: track active prompt --- src/Alert/utils/web.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/Alert/utils/web.ts b/src/Alert/utils/web.ts index 08a325e..e212d10 100644 --- a/src/Alert/utils/web.ts +++ b/src/Alert/utils/web.ts @@ -1,5 +1,8 @@ import { Alert as RNAlert, type AlertButton } from 'react-native'; +// Track active dialogs to prevent multiple dialogs +let activeDialog: HTMLDialogElement | null = null; + // Web implementation export function createDialogElement( title: string | null | undefined, @@ -87,11 +90,19 @@ export function showWebAlert( message?: string, buttons?: AlertButton[] ) { + // Prevent multiple dialogs + if (activeDialog) { + console.warn('Another alert dialog is already being displayed'); + return; + } + const dialog = createDialogElement(title, message, buttons); + activeDialog = dialog; document.body.appendChild(dialog); dialog.showModal(); dialog.addEventListener('close', () => { document.body.removeChild(dialog); + activeDialog = null; }); } @@ -102,13 +113,21 @@ export function showWebPrompt( type?: 'default' | 'plain-text' | 'secure-text' | 'login-password', defaultValue?: string ) { + // Prevent multiple dialogs + if (activeDialog) { + console.warn('Another prompt dialog is already being displayed'); + return; + } + const inputField = ` `; const dialog = createDialogElement(title, message, buttons, inputField); + activeDialog = dialog; document.body.appendChild(dialog); dialog.showModal(); dialog.addEventListener('close', () => { document.body.removeChild(dialog); + activeDialog = null; }); } From 6384efcff1b4dac0ea8bf7ce6c851d8b3e0b8194 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 9 Sep 2025 22:59:22 +0200 Subject: [PATCH 08/19] feat: add web support with webpack configuration and example files --- example/index.html | 22 + example/index.web.js | 9 + example/package.json | 15 +- example/webpack.config.js | 97 ++ yarn.lock | 2006 ++++++++++++++++++++++++++++++++++++- 5 files changed, 2097 insertions(+), 52 deletions(-) create mode 100644 example/index.html create mode 100644 example/index.web.js create mode 100644 example/webpack.config.js diff --git a/example/index.html b/example/index.html new file mode 100644 index 0000000..615cabc --- /dev/null +++ b/example/index.html @@ -0,0 +1,22 @@ + + + + + + + + Your RN Web App + + + + +
+ + + \ No newline at end of file diff --git a/example/index.web.js b/example/index.web.js new file mode 100644 index 0000000..afe8342 --- /dev/null +++ b/example/index.web.js @@ -0,0 +1,9 @@ +import { AppRegistry } from 'react-native'; +import name from './app.json'; +import App from './src/App'; + +AppRegistry.registerComponent(name, () => App); +AppRegistry.runApplication(name, { + initialProps: {}, + rootTag: document.getElementById('app-root'), +}); diff --git a/example/package.json b/example/package.json index 252bd04..505cb33 100644 --- a/example/package.json +++ b/example/package.json @@ -6,14 +6,25 @@ "android": "react-native run-android", "ios": "react-native run-ios", "start": "react-native start", + "web": "webpack serve --mode=development --config webpack.config.js", "build:android": "react-native build-android --extra-params \"--no-daemon --console=plain -PreactNativeArchitectures=arm64-v8a\"", "build:ios": "react-native build-ios --mode Debug" }, "dependencies": { "@react-native/new-app-screen": "0.81.1", - "react": "19.1.0", + "babel-loader": "^10.0.0", + "babel-plugin-react-native-web": "^0.21.1", + "html-webpack-plugin": "^5.6.4", + "react": "19.1.1", + "react-dom": "19.1.1", "react-native": "0.81.1", - "react-native-safe-area-context": "^5.5.2" + "react-native-safe-area-context": "^5.5.2", + "react-native-web": "^0.21.1", + "ts-loader": "^9.5.4", + "url-loader": "^4.1.1", + "webpack": "^5.101.3", + "webpack-cli": "^6.0.1", + "webpack-dev-server": "^5.2.2" }, "devDependencies": { "@babel/core": "^7.25.2", diff --git a/example/webpack.config.js b/example/webpack.config.js new file mode 100644 index 0000000..a67eae3 --- /dev/null +++ b/example/webpack.config.js @@ -0,0 +1,97 @@ +const path = require('path'); +const webpack = require('webpack'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const appDirectory = path.resolve(__dirname); +const { presets, plugins } = require(`${appDirectory}/babel.config.js`); +const compileNodeModules = [ + // Add every react-native package that needs compiling + // 'react-native-gesture-handler', +].map((moduleName) => path.resolve(appDirectory, `node_modules/${moduleName}`)); + +const babelLoaderConfiguration = { + test: /\.(js|jsx|ts|tsx)$/, // Updated to include .jsx + // Add every directory that needs to be compiled by Babel during the build. + include: [ + path.resolve(__dirname, 'index.web.js'), // Entry to your application + path.resolve(__dirname, 'App.tsx'), // Updated to .jsx + path.resolve(__dirname, 'src'), + path.resolve(__dirname, 'component'), + path.resolve(__dirname, '../src'), // Include the local package source + ...compileNodeModules, + ], + use: { + loader: 'babel-loader', + options: { + cacheDirectory: true, + presets, + plugins, + }, + }, +}; + +const svgLoaderConfiguration = { + test: /\.svg$/, + use: [ + { + loader: '@svgr/webpack', + }, + ], +}; + +const imageLoaderConfiguration = { + test: /\.(gif|jpe?g|png|svg)$/, + use: { + loader: 'url-loader', + options: { + name: '[name].[ext]', + }, + }, +}; + +const tsLoaderConfiguration = { + test: /\.(ts)x?$/, + exclude: /node_modules|\.d\.ts$/, // this line as well + use: { + loader: 'ts-loader', + options: { + compilerOptions: { + noEmit: false, // this option will solve the issue + }, + }, + }, +}; + +module.exports = { + entry: { + app: path.join(__dirname, 'index.web.js'), + }, + output: { + path: path.resolve(appDirectory, 'dist'), + publicPath: '/', + filename: 'rnw.bundle.js', + }, + resolve: { + extensions: ['.web.tsx', '.web.ts', '.tsx', '.ts', '.web.js', '.js'], + alias: { + 'react-native$': 'react-native-web', + '@blazejkustra/react-native-alert': path.resolve(__dirname, '../src'), + }, + }, + module: { + rules: [ + babelLoaderConfiguration, + imageLoaderConfiguration, + svgLoaderConfiguration, + tsLoaderConfiguration, + ], + }, + plugins: [ + new HtmlWebpackPlugin({ + template: path.join(__dirname, 'index.html'), + }), + new webpack.HotModuleReplacementPlugin(), + new webpack.DefinePlugin({ + __DEV__: JSON.stringify(true), + }), + ], +}; diff --git a/yarn.lock b/yarn.lock index 950e17e..fea5423 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1538,14 +1538,21 @@ __metadata: "@react-native/new-app-screen": 0.81.1 "@react-native/typescript-config": 0.81.1 "@types/react": ^19.1.0 + babel-loader: ^10.0.0 babel-plugin-react-native-web: ^0.21.1 - react: 19.1.0 - react-dom: ^19.1.1 + html-webpack-plugin: ^5.6.4 + react: 19.1.1 + react-dom: 19.1.1 react-native: 0.81.1 react-native-builder-bob: ^0.40.13 react-native-monorepo-config: ^0.1.9 react-native-safe-area-context: ^5.5.2 react-native-web: ^0.21.1 + ts-loader: ^9.5.4 + url-loader: ^4.1.1 + webpack: ^5.101.3 + webpack-cli: ^6.0.1 + webpack-dev-server: ^5.2.2 languageName: unknown linkType: soft @@ -1792,6 +1799,13 @@ __metadata: languageName: node linkType: hard +"@discoveryjs/json-ext@npm:^0.6.1": + version: 0.6.3 + resolution: "@discoveryjs/json-ext@npm:0.6.3" + checksum: 8305a5feb9bbaedbfdb91f938cb577f98c34cb432535dbc7af5e5df7f1cb3d1895f7a9ec0d956b5bd9e980e5b7f8cd36684c4c9ed219e6e556e0dfe367c4cb66 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0, @eslint-community/eslint-utils@npm:^4.8.0": version: 4.8.0 resolution: "@eslint-community/eslint-utils@npm:4.8.0" @@ -2537,6 +2551,81 @@ __metadata: languageName: node linkType: hard +"@jsonjoy.com/base64@npm:^1.1.2": + version: 1.1.2 + resolution: "@jsonjoy.com/base64@npm:1.1.2" + peerDependencies: + tslib: 2 + checksum: 00dbf9cbc6ecb3af0e58288a305cc4ee3dfca9efa24443d98061756e8f6de4d6d2d3764bdfde07f2b03e6ce56db27c8a59b490bd134bf3d8122b4c6b394c7010 + languageName: node + linkType: hard + +"@jsonjoy.com/buffers@npm:^1.0.0": + version: 1.0.0 + resolution: "@jsonjoy.com/buffers@npm:1.0.0" + peerDependencies: + tslib: 2 + checksum: 2d58ccbab0906cd4006a6428d55d1ef7183ae9b83249824fc6ae23645801c41710109d795a96e44a0aef8a67773af7b15cc6145035dc96d26906905110285b96 + languageName: node + linkType: hard + +"@jsonjoy.com/codegen@npm:^1.0.0": + version: 1.0.0 + resolution: "@jsonjoy.com/codegen@npm:1.0.0" + peerDependencies: + tslib: 2 + checksum: 77383ed703dacc0ee35783589f3289e464d9fd047675f2f628b4d8a567c2b9c87f0121f4445203d51645b5777d24c3b50ed7e12525f4064a0614caae81b1dc2e + languageName: node + linkType: hard + +"@jsonjoy.com/json-pack@npm:^1.11.0": + version: 1.11.0 + resolution: "@jsonjoy.com/json-pack@npm:1.11.0" + dependencies: + "@jsonjoy.com/base64": ^1.1.2 + "@jsonjoy.com/buffers": ^1.0.0 + "@jsonjoy.com/codegen": ^1.0.0 + "@jsonjoy.com/json-pointer": ^1.0.1 + "@jsonjoy.com/util": ^1.9.0 + hyperdyperid: ^1.2.0 + thingies: ^2.5.0 + peerDependencies: + tslib: 2 + checksum: 72b9fce19d8acbd4b3a3ae8d32869bd170781e7b2bdd5920cf5b756bc02bd79e4a6be68c1de746ff74ec948982ba6316af517916530588603a52fff5781b9e30 + languageName: node + linkType: hard + +"@jsonjoy.com/json-pointer@npm:^1.0.1": + version: 1.0.2 + resolution: "@jsonjoy.com/json-pointer@npm:1.0.2" + dependencies: + "@jsonjoy.com/codegen": ^1.0.0 + "@jsonjoy.com/util": ^1.9.0 + peerDependencies: + tslib: 2 + checksum: 93b45eb2e5ea3864778dab45c9fd2313cd9fb0fc9fa9a6401c8dea0365e44551fa8debbf3d0efb8b5131c0fde689f4509248b3e2ba12852a8c75739028ec3c1b + languageName: node + linkType: hard + +"@jsonjoy.com/util@npm:^1.9.0": + version: 1.9.0 + resolution: "@jsonjoy.com/util@npm:1.9.0" + dependencies: + "@jsonjoy.com/buffers": ^1.0.0 + "@jsonjoy.com/codegen": ^1.0.0 + peerDependencies: + tslib: 2 + checksum: a22c49af0736cede94c24ad8da7230f42697eb5c4a6016450d5bf1cbcb51cd5b45a08989e7ec4cad1cc47718cb5b26e0ba583189f238d095eae4b15cbbe8c9e7 + languageName: node + linkType: hard + +"@leichtgewicht/ip-codec@npm:^2.0.1": + version: 2.0.5 + resolution: "@leichtgewicht/ip-codec@npm:2.0.5" + checksum: 4fcd025d0a923cb6b87b631a83436a693b255779c583158bbeacde6b4dd75b94cc1eba1c9c188de5fc36c218d160524ea08bfe4ef03a056b00ff14126d66f881 + languageName: node + linkType: hard + "@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1": version: 5.1.1-v1 resolution: "@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1" @@ -3499,6 +3588,44 @@ __metadata: languageName: node linkType: hard +"@types/body-parser@npm:*": + version: 1.19.6 + resolution: "@types/body-parser@npm:1.19.6" + dependencies: + "@types/connect": "*" + "@types/node": "*" + checksum: 33041e88eae00af2cfa0827e951e5f1751eafab2a8b6fce06cd89ef368a988907996436b1325180edaeddd1c0c7d0d0d4c20a6c9ff294a91e0039a9db9e9b658 + languageName: node + linkType: hard + +"@types/bonjour@npm:^3.5.13": + version: 3.5.13 + resolution: "@types/bonjour@npm:3.5.13" + dependencies: + "@types/node": "*" + checksum: e827570e097bd7d625a673c9c208af2d1a22fa3885c0a1646533cf24394c839c3e5f60ac1bc60c0ddcc69c0615078c9fb2c01b42596c7c582d895d974f2409ee + languageName: node + linkType: hard + +"@types/connect-history-api-fallback@npm:^1.5.4": + version: 1.5.4 + resolution: "@types/connect-history-api-fallback@npm:1.5.4" + dependencies: + "@types/express-serve-static-core": "*" + "@types/node": "*" + checksum: e1dee43b8570ffac02d2d47a2b4ba80d3ca0dd1840632dafb221da199e59dbe3778d3d7303c9e23c6b401f37c076935a5bc2aeae1c4e5feaefe1c371fe2073fd + languageName: node + linkType: hard + +"@types/connect@npm:*": + version: 3.4.38 + resolution: "@types/connect@npm:3.4.38" + dependencies: + "@types/node": "*" + checksum: 7eb1bc5342a9604facd57598a6c62621e244822442976c443efb84ff745246b10d06e8b309b6e80130026a396f19bf6793b7cecd7380169f369dac3bfc46fb99 + languageName: node + linkType: hard + "@types/conventional-commits-parser@npm:^5.0.0": version: 5.0.1 resolution: "@types/conventional-commits-parser@npm:5.0.1" @@ -3508,13 +3635,80 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:^1.0.6": +"@types/eslint-scope@npm:^3.7.7": + version: 3.7.7 + resolution: "@types/eslint-scope@npm:3.7.7" + dependencies: + "@types/eslint": "*" + "@types/estree": "*" + checksum: e2889a124aaab0b89af1bab5959847c5bec09809209255de0e63b9f54c629a94781daa04adb66bffcdd742f5e25a17614fb933965093c0eea64aacda4309380e + languageName: node + linkType: hard + +"@types/eslint@npm:*": + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" + dependencies: + "@types/estree": "*" + "@types/json-schema": "*" + checksum: c286e79707ab604b577cf8ce51d9bbb9780e3d6a68b38a83febe13fa05b8012c92de17c28532fac2b03d3c460123f5055d603a579685325246ca1c86828223e0 + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:^1.0.6, @types/estree@npm:^1.0.8": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" checksum: bd93e2e415b6f182ec4da1074e1f36c480f1d26add3e696d54fb30c09bc470897e41361c8fd957bf0985024f8fbf1e6e2aff977d79352ef7eb93a5c6dcff6c11 languageName: node linkType: hard +"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^5.0.0": + version: 5.0.7 + resolution: "@types/express-serve-static-core@npm:5.0.7" + dependencies: + "@types/node": "*" + "@types/qs": "*" + "@types/range-parser": "*" + "@types/send": "*" + checksum: 3539f5866720c081053daeb97d6786614791b382ec2f30b46f05c09076c99ae14c87755b00d8367f7d456535191594d67336dbaa764e8fbbba9ca3dfb15dae00 + languageName: node + linkType: hard + +"@types/express-serve-static-core@npm:^4.17.21, @types/express-serve-static-core@npm:^4.17.33": + version: 4.19.6 + resolution: "@types/express-serve-static-core@npm:4.19.6" + dependencies: + "@types/node": "*" + "@types/qs": "*" + "@types/range-parser": "*" + "@types/send": "*" + checksum: b0576eddc2d25ccdf10e68ba09598b87a4d7b2ad04a81dc847cb39fe56beb0b6a5cc017b1e00aa0060cb3b38e700384ce96d291a116a0f1e54895564a104aae9 + languageName: node + linkType: hard + +"@types/express@npm:*": + version: 5.0.3 + resolution: "@types/express@npm:5.0.3" + dependencies: + "@types/body-parser": "*" + "@types/express-serve-static-core": ^5.0.0 + "@types/serve-static": "*" + checksum: bb6f10c14c8e3cce07f79ee172688aa9592852abd7577b663cd0c2054307f172c2b2b36468c918fed0d4ac359b99695807b384b3da6157dfa79acbac2226b59b + languageName: node + linkType: hard + +"@types/express@npm:^4.17.21": + version: 4.17.23 + resolution: "@types/express@npm:4.17.23" + dependencies: + "@types/body-parser": "*" + "@types/express-serve-static-core": ^4.17.33 + "@types/qs": "*" + "@types/serve-static": "*" + checksum: f1a020c6ad6dc0169a3277199605d60649d463a72c920673e0f230ab1e76f2d3aa23daabd25ef8e62eda314e26b879306c58ec806e669e1e40ca37a4b73a44b0 + languageName: node + linkType: hard + "@types/graceful-fs@npm:^4.1.3": version: 4.1.9 resolution: "@types/graceful-fs@npm:4.1.9" @@ -3524,6 +3718,29 @@ __metadata: languageName: node linkType: hard +"@types/html-minifier-terser@npm:^6.0.0": + version: 6.1.0 + resolution: "@types/html-minifier-terser@npm:6.1.0" + checksum: eb843f6a8d662d44fb18ec61041117734c6aae77aa38df1be3b4712e8e50ffaa35f1e1c92fdd0fde14a5675fecf457abcd0d15a01fae7506c91926176967f452 + languageName: node + linkType: hard + +"@types/http-errors@npm:*": + version: 2.0.5 + resolution: "@types/http-errors@npm:2.0.5" + checksum: a88da669366bc483e8f3b3eb3d34ada5f8d13eeeef851b1204d77e2ba6fc42aba4566d877cca5c095204a3f4349b87fe397e3e21288837bdd945dd514120755b + languageName: node + linkType: hard + +"@types/http-proxy@npm:^1.17.8": + version: 1.17.16 + resolution: "@types/http-proxy@npm:1.17.16" + dependencies: + "@types/node": "*" + checksum: f5ab4afe7e3feba9d87bdddbf44e03d9a836bd2cdab679a794badbff7c4bfb6bebf46bfe22d9964eb1820e1349f2ff7807cccb20fd27cb17f03db849289e5892 + languageName: node + linkType: hard + "@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": version: 2.0.6 resolution: "@types/istanbul-lib-coverage@npm:2.0.6" @@ -3559,13 +3776,29 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 languageName: node linkType: hard +"@types/mime@npm:^1": + version: 1.3.5 + resolution: "@types/mime@npm:1.3.5" + checksum: e29a5f9c4776f5229d84e525b7cd7dd960b51c30a0fb9a028c0821790b82fca9f672dab56561e2acd9e8eed51d431bde52eafdfef30f643586c4162f1aecfc78 + languageName: node + linkType: hard + +"@types/node-forge@npm:^1.3.0": + version: 1.3.14 + resolution: "@types/node-forge@npm:1.3.14" + dependencies: + "@types/node": "*" + checksum: ff621803390e723e56b289a89fca3a06f9f8b438add1b843203a0f64bcbc7ac03d457136b3c15010b5bc89d81f57b35f62964e6e980f6290597bb21b4463c009 + languageName: node + linkType: hard + "@types/node@npm:*": version: 24.3.1 resolution: "@types/node@npm:24.3.1" @@ -3589,6 +3822,20 @@ __metadata: languageName: node linkType: hard +"@types/qs@npm:*": + version: 6.14.0 + resolution: "@types/qs@npm:6.14.0" + checksum: 1909205514d22b3cbc7c2314e2bd8056d5f05dfb21cf4377f0730ee5e338ea19957c41735d5e4806c746176563f50005bbab602d8358432e25d900bdf4970826 + languageName: node + linkType: hard + +"@types/range-parser@npm:*": + version: 1.2.7 + resolution: "@types/range-parser@npm:1.2.7" + checksum: 95640233b689dfbd85b8c6ee268812a732cf36d5affead89e806fe30da9a430767af8ef2cd661024fd97e19d61f3dec75af2df5e80ec3bea000019ab7028629a + languageName: node + linkType: hard + "@types/react@npm:^19.1.0": version: 19.1.12 resolution: "@types/react@npm:19.1.12" @@ -3598,6 +3845,13 @@ __metadata: languageName: node linkType: hard +"@types/retry@npm:0.12.2": + version: 0.12.2 + resolution: "@types/retry@npm:0.12.2" + checksum: e5675035717b39ce4f42f339657cae9637cf0c0051cf54314a6a2c44d38d91f6544be9ddc0280587789b6afd056be5d99dbe3e9f4df68c286c36321579b1bf4a + languageName: node + linkType: hard + "@types/semver@npm:^7.3.12, @types/semver@npm:^7.5.5": version: 7.7.1 resolution: "@types/semver@npm:7.7.1" @@ -3605,6 +3859,45 @@ __metadata: languageName: node linkType: hard +"@types/send@npm:*": + version: 0.17.5 + resolution: "@types/send@npm:0.17.5" + dependencies: + "@types/mime": ^1 + "@types/node": "*" + checksum: bff5add75eb178c3b80bebc422db483c76eeb2cb5016508c952e4fc67d968794f9c709b978d086bf60e4d6fbfe8c0b77e99a7603a615c671c1f97f808458d4a8 + languageName: node + linkType: hard + +"@types/serve-index@npm:^1.9.4": + version: 1.9.4 + resolution: "@types/serve-index@npm:1.9.4" + dependencies: + "@types/express": "*" + checksum: 72727c88d54da5b13275ebfb75dcdc4aa12417bbe9da1939e017c4c5f0c906fae843aa4e0fbfe360e7ee9df2f3d388c21abfc488f77ce58693fb57809f8ded92 + languageName: node + linkType: hard + +"@types/serve-static@npm:*, @types/serve-static@npm:^1.15.5": + version: 1.15.8 + resolution: "@types/serve-static@npm:1.15.8" + dependencies: + "@types/http-errors": "*" + "@types/node": "*" + "@types/send": "*" + checksum: 41e0fb40bfdf3b5c2ac997c5dd5d58af9229e6a325dab1cf5f73b488b09635d933c1aa6f0e3265d6df8b45be0d09af36a9ffe90175088726f1db6bf104bf9ecf + languageName: node + linkType: hard + +"@types/sockjs@npm:^0.3.36": + version: 0.3.36 + resolution: "@types/sockjs@npm:0.3.36" + dependencies: + "@types/node": "*" + checksum: b4b5381122465d80ea8b158537c00bc82317222d3fb31fd7229ff25b31fa89134abfbab969118da55622236bf3d8fee75759f3959908b5688991f492008f29bc + languageName: node + linkType: hard + "@types/stack-utils@npm:^2.0.0": version: 2.0.3 resolution: "@types/stack-utils@npm:2.0.3" @@ -3612,6 +3905,15 @@ __metadata: languageName: node linkType: hard +"@types/ws@npm:^8.5.10": + version: 8.18.1 + resolution: "@types/ws@npm:8.18.1" + dependencies: + "@types/node": "*" + checksum: 0331b14cde388e2805af66cad3e3f51857db8e68ed91e5b99750915e96fe7572e58296dc99999331bbcf08f0ff00a227a0bb214e991f53c2a5aca7b0e71173fa + languageName: node + linkType: hard + "@types/yargs-parser@npm:*": version: 21.0.3 resolution: "@types/yargs-parser@npm:21.0.3" @@ -3816,6 +4118,204 @@ __metadata: languageName: node linkType: hard +"@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/ast@npm:1.14.1" + dependencies: + "@webassemblyjs/helper-numbers": 1.13.2 + "@webassemblyjs/helper-wasm-bytecode": 1.13.2 + checksum: f9154ad9ea14f6f2374ebe918c221fd69a4d4514126a1acc6fa4966e8d27ab28cb550a5e6880032cf620e19640578658a7e5a55bd2aad1e3db4e9d598b8f2099 + languageName: node + linkType: hard + +"@webassemblyjs/floating-point-hex-parser@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.13.2" + checksum: e866ec8433f4a70baa511df5e8f2ebcd6c24f4e2cc6274c7c5aabe2bcce3459ea4680e0f35d450e1f3602acf3913b6b8e4f15069c8cfd34ae8609fb9a7d01795 + languageName: node + linkType: hard + +"@webassemblyjs/helper-api-error@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-api-error@npm:1.13.2" + checksum: 48b5df7fd3095bb252f59a139fe2cbd999a62ac9b488123e9a0da3906ad8a2f2da7b2eb21d328c01a90da987380928706395c2897d1f3ed9e2125b6d75a920d0 + languageName: node + linkType: hard + +"@webassemblyjs/helper-buffer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-buffer@npm:1.14.1" + checksum: b611e981dfd6a797c3d8fc3a772de29a6e55033737c2c09c31bb66c613bdbb2d25f915df1dee62a602c6acc057ca71128432fa8c3e22a893e1219dc454f14ede + languageName: node + linkType: hard + +"@webassemblyjs/helper-numbers@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-numbers@npm:1.13.2" + dependencies: + "@webassemblyjs/floating-point-hex-parser": 1.13.2 + "@webassemblyjs/helper-api-error": 1.13.2 + "@xtuc/long": 4.2.2 + checksum: 49e2c9bf9b66997e480f6b44d80f895b3cde4de52ac135921d28e144565edca6903a519f627f4089b5509de1d7f9e5023f0e1a94ff78a36c9e2eb30e7c18ffd2 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-bytecode@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.13.2" + checksum: 8e059e1c1f0294f4fc3df8e4eaff3c5ef6e2e1358f34ebc118eaf5070ed59e56ed7fc92b28be734ebde17c8d662d5d27e06ade686c282445135da083ae11c128 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-section@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": 1.14.1 + "@webassemblyjs/helper-buffer": 1.14.1 + "@webassemblyjs/helper-wasm-bytecode": 1.13.2 + "@webassemblyjs/wasm-gen": 1.14.1 + checksum: 0a08d454a63192cd66abf91b6f060ac4b466cef341262246e9dcc828dd4c8536195dea9b46a1244b1eac65b59b8b502164a771a190052a92ff0a0a2ded0f8f53 + languageName: node + linkType: hard + +"@webassemblyjs/ieee754@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/ieee754@npm:1.13.2" + dependencies: + "@xtuc/ieee754": ^1.2.0 + checksum: d7e3520baa37a7309fa7db4d73d69fb869878853b1ebd4b168821bd03fcc4c0e1669c06231315b0039035d9a7a462e53de3ad982da4a426a4b0743b5888e8673 + languageName: node + linkType: hard + +"@webassemblyjs/leb128@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/leb128@npm:1.13.2" + dependencies: + "@xtuc/long": 4.2.2 + checksum: 64083507f7cff477a6d71a9e325d95665cea78ec8df99ca7c050e1cfbe300fbcf0842ca3dcf3b4fa55028350135588a4f879398d3dd2b6a8de9913ce7faf5333 + languageName: node + linkType: hard + +"@webassemblyjs/utf8@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/utf8@npm:1.13.2" + checksum: 95ec6052f30eefa8d50c9b2a3394d08b17d53a4aa52821451d41d774c126fa8f39b988fbf5bff56da86852a87c16d676e576775a4071e5e5ccf020cc85a4b281 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-edit@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-edit@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": 1.14.1 + "@webassemblyjs/helper-buffer": 1.14.1 + "@webassemblyjs/helper-wasm-bytecode": 1.13.2 + "@webassemblyjs/helper-wasm-section": 1.14.1 + "@webassemblyjs/wasm-gen": 1.14.1 + "@webassemblyjs/wasm-opt": 1.14.1 + "@webassemblyjs/wasm-parser": 1.14.1 + "@webassemblyjs/wast-printer": 1.14.1 + checksum: 9341c3146bb1b7863f03d6050c2a66990f20384ca137388047bbe1feffacb599e94fca7b7c18287d17e2449ffb4005fdc7f41f674a6975af9ad8522756f8ffff + languageName: node + linkType: hard + +"@webassemblyjs/wasm-gen@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-gen@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": 1.14.1 + "@webassemblyjs/helper-wasm-bytecode": 1.13.2 + "@webassemblyjs/ieee754": 1.13.2 + "@webassemblyjs/leb128": 1.13.2 + "@webassemblyjs/utf8": 1.13.2 + checksum: 401b12bec7431c4fc29d9414bbe40d3c6dc5be04d25a116657c42329f5481f0129f3b5834c293f26f0e42681ceac9157bf078ce9bdb6a7f78037c650373f98b2 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-opt@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-opt@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": 1.14.1 + "@webassemblyjs/helper-buffer": 1.14.1 + "@webassemblyjs/wasm-gen": 1.14.1 + "@webassemblyjs/wasm-parser": 1.14.1 + checksum: 60c697a9e9129d8d23573856df0791ba33cea4a3bc2339044cae73128c0983802e5e50a42157b990eeafe1237eb8e7653db6de5f02b54a0ae7b81b02dcdf2ae9 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-parser@npm:1.14.1, @webassemblyjs/wasm-parser@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-parser@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": 1.14.1 + "@webassemblyjs/helper-api-error": 1.13.2 + "@webassemblyjs/helper-wasm-bytecode": 1.13.2 + "@webassemblyjs/ieee754": 1.13.2 + "@webassemblyjs/leb128": 1.13.2 + "@webassemblyjs/utf8": 1.13.2 + checksum: 93f1fe2676da465b4e824419d9812a3d7218de4c3addd4e916c04bc86055fa134416c1b67e4b7cbde8d728c0dce2721d06cc0bfe7a7db7c093a0898009937405 + languageName: node + linkType: hard + +"@webassemblyjs/wast-printer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wast-printer@npm:1.14.1" + dependencies: + "@webassemblyjs/ast": 1.14.1 + "@xtuc/long": 4.2.2 + checksum: 517881a0554debe6945de719d100b2d8883a2d24ddf47552cdeda866341e2bb153cd824a864bc7e2a61190a4b66b18f9899907e0074e9e820d2912ac0789ea60 + languageName: node + linkType: hard + +"@webpack-cli/configtest@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/configtest@npm:3.0.1" + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + checksum: a83301ff360de6c36fe98766f1f391db6149f0806450ce31484c49df3902584f73385453da23f3324a605d5afad4d2889654ada679afd49e35c59a2c4769ee97 + languageName: node + linkType: hard + +"@webpack-cli/info@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/info@npm:3.0.1" + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + checksum: 0ddcfd8b370d924f71cc085b17b31a77b362d8046fedb38ac601042733568cda05b0c8c7b1e0e1e050dc926ee76f754cd9c4f351e2b361a0d157465f8b03b689 + languageName: node + linkType: hard + +"@webpack-cli/serve@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/serve@npm:3.0.1" + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + peerDependenciesMeta: + webpack-dev-server: + optional: true + checksum: 5bbd66548faa8adc7b0759f5880411b611c9a25e9303e2f580ab2d658ec105926a21c981fa7797e9f7c24093d0a0ff96d6f2d8f76f265d7760441cf138cab889 + languageName: node + linkType: hard + +"@xtuc/ieee754@npm:^1.2.0": + version: 1.2.0 + resolution: "@xtuc/ieee754@npm:1.2.0" + checksum: ac56d4ca6e17790f1b1677f978c0c6808b1900a5b138885d3da21732f62e30e8f0d9120fcf8f6edfff5100ca902b46f8dd7c1e3f903728634523981e80e2885a + languageName: node + linkType: hard + +"@xtuc/long@npm:4.2.2": + version: 4.2.2 + resolution: "@xtuc/long@npm:4.2.2" + checksum: 8ed0d477ce3bc9c6fe2bf6a6a2cc316bb9c4127c5a7827bae947fa8ec34c7092395c5a283cc300c05b5fa01cbbfa1f938f410a7bf75db7c7846fea41949989ec + languageName: node + linkType: hard + "JSONStream@npm:^1.3.5": version: 1.3.5 resolution: "JSONStream@npm:1.3.5" @@ -3844,7 +4344,7 @@ __metadata: languageName: node linkType: hard -"accepts@npm:^1.3.7, accepts@npm:~1.3.7": +"accepts@npm:^1.3.7, accepts@npm:~1.3.4, accepts@npm:~1.3.7, accepts@npm:~1.3.8": version: 1.3.8 resolution: "accepts@npm:1.3.8" dependencies: @@ -3854,6 +4354,15 @@ __metadata: languageName: node linkType: hard +"acorn-import-phases@npm:^1.0.3": + version: 1.0.4 + resolution: "acorn-import-phases@npm:1.0.4" + peerDependencies: + acorn: ^8.14.0 + checksum: e669cccfb6711af305150fcbfddcf4485fffdc4547a0ecabebe94103b47124cc02bfd186240061c00ac954cfb0461b4ecc3e203e138e43042b7af32063fa9510 + languageName: node + linkType: hard + "acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" @@ -3896,7 +4405,41 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.12.4": +"ajv-formats@npm:^2.1.1": + version: 2.1.1 + resolution: "ajv-formats@npm:2.1.1" + dependencies: + ajv: ^8.0.0 + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + checksum: 4a287d937f1ebaad4683249a4c40c0fa3beed30d9ddc0adba04859026a622da0d317851316ea64b3680dc60f5c3c708105ddd5d5db8fe595d9d0207fd19f90b7 + languageName: node + linkType: hard + +"ajv-keywords@npm:^3.5.2": + version: 3.5.2 + resolution: "ajv-keywords@npm:3.5.2" + peerDependencies: + ajv: ^6.9.1 + checksum: 7dc5e5931677a680589050f79dcbe1fefbb8fea38a955af03724229139175b433c63c68f7ae5f86cf8f65d55eb7c25f75a046723e2e58296707617ca690feae9 + languageName: node + linkType: hard + +"ajv-keywords@npm:^5.1.0": + version: 5.1.0 + resolution: "ajv-keywords@npm:5.1.0" + dependencies: + fast-deep-equal: ^3.1.3 + peerDependencies: + ajv: ^8.8.2 + checksum: c35193940b853119242c6757787f09ecf89a2c19bcd36d03ed1a615e710d19d450cb448bfda407b939aba54b002368c8bff30529cc50a0536a8e10bcce300421 + languageName: node + linkType: hard + +"ajv@npm:^6.12.4, ajv@npm:^6.12.5": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -3908,7 +4451,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^8.11.0": +"ajv@npm:^8.0.0, ajv@npm:^8.11.0, ajv@npm:^8.9.0": version: 8.17.1 resolution: "ajv@npm:8.17.1" dependencies: @@ -3947,6 +4490,15 @@ __metadata: languageName: node linkType: hard +"ansi-html-community@npm:^0.0.8": + version: 0.0.8 + resolution: "ansi-html-community@npm:0.0.8" + bin: + ansi-html: bin/ansi-html + checksum: 04c568e8348a636963f915e48eaa3e01218322e1169acafdd79c384f22e5558c003f79bbc480c1563865497482817c7eed025f0653ebc17642fededa5cb42089 + languageName: node + linkType: hard + "ansi-regex@npm:^4.1.0": version: 4.1.1 resolution: "ansi-regex@npm:4.1.1" @@ -4000,7 +4552,7 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.0.3": +"anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: @@ -4053,6 +4605,13 @@ __metadata: languageName: node linkType: hard +"array-flatten@npm:1.1.1": + version: 1.1.1 + resolution: "array-flatten@npm:1.1.1" + checksum: a9925bf3512d9dce202112965de90c222cd59a4fbfce68a0951d25d965cf44642931f40aac72309c41f12df19afa010ecadceb07cfff9ccc1621e99d89ab5f3b + languageName: node + linkType: hard + "array-ify@npm:^1.0.0": version: 1.0.0 resolution: "array-ify@npm:1.0.0" @@ -4221,6 +4780,18 @@ __metadata: languageName: node linkType: hard +"babel-loader@npm:^10.0.0": + version: 10.0.0 + resolution: "babel-loader@npm:10.0.0" + dependencies: + find-up: ^5.0.0 + peerDependencies: + "@babel/core": ^7.12.0 + webpack: ">=5.61.0" + checksum: 8a9dbb8a93cd342832cc99f024f07a6fda67b29aa907fbc3087de17e7f7ff705cf17fa9aed9103b1de9dfff24427afe200ec99213d24f801a0b1f4fd94783f51 + languageName: node + linkType: hard + "babel-plugin-istanbul@npm:^6.1.1": version: 6.1.1 resolution: "babel-plugin-istanbul@npm:6.1.1" @@ -4374,6 +4945,13 @@ __metadata: languageName: node linkType: hard +"batch@npm:0.6.1": + version: 0.6.1 + resolution: "batch@npm:0.6.1" + checksum: 61f9934c7378a51dce61b915586191078ef7f1c3eca707fdd58b96ff2ff56d9e0af2bdab66b1462301a73c73374239e6542d9821c0af787f3209a23365d07e7f + languageName: node + linkType: hard + "before-after-hook@npm:^3.0.2": version: 3.0.2 resolution: "before-after-hook@npm:3.0.2" @@ -4381,6 +4959,20 @@ __metadata: languageName: node linkType: hard +"big.js@npm:^5.2.2": + version: 5.2.2 + resolution: "big.js@npm:5.2.2" + checksum: b89b6e8419b097a8fb4ed2399a1931a68c612bce3cfd5ca8c214b2d017531191070f990598de2fc6f3f993d91c0f08aa82697717f6b3b8732c9731866d233c9e + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.3.0 + resolution: "binary-extensions@npm:2.3.0" + checksum: bcad01494e8a9283abf18c1b967af65ee79b0c6a9e6fcfafebfe91dbe6e0fc7272bafb73389e198b310516ae04f7ad17d79aacf6cb4c0d5d5202a7e2e52c7d98 + languageName: node + linkType: hard + "bl@npm:^4.1.0": version: 4.1.0 resolution: "bl@npm:4.1.0" @@ -4392,7 +4984,7 @@ __metadata: languageName: node linkType: hard -"body-parser@npm:^1.20.3": +"body-parser@npm:1.20.3, body-parser@npm:^1.20.3": version: 1.20.3 resolution: "body-parser@npm:1.20.3" dependencies: @@ -4412,6 +5004,23 @@ __metadata: languageName: node linkType: hard +"bonjour-service@npm:^1.2.1": + version: 1.3.0 + resolution: "bonjour-service@npm:1.3.0" + dependencies: + fast-deep-equal: ^3.1.3 + multicast-dns: ^7.2.5 + checksum: 737bd40d0b609b18afdfcaf3c416a60d7dc94aedc4cb9d6e7af459a7f3bdffadc199370a48c46739d92689741cad4ec8a6987a3e4d869dd301b521227b92e082 + languageName: node + linkType: hard + +"boolbase@npm:^1.0.0": + version: 1.0.0 + resolution: "boolbase@npm:1.0.0" + checksum: 3e25c80ef626c3a3487c73dbfc70ac322ec830666c9ad915d11b701142fab25ec1e63eff2c450c74347acfd2de854ccde865cd79ef4db1683f7c7b046ea43bb0 + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.12 resolution: "brace-expansion@npm:1.1.12" @@ -4431,7 +5040,7 @@ __metadata: languageName: node linkType: hard -"braces@npm:^3.0.3": +"braces@npm:^3.0.3, braces@npm:~3.0.2": version: 3.0.3 resolution: "braces@npm:3.0.3" dependencies: @@ -4605,6 +5214,16 @@ __metadata: languageName: node linkType: hard +"camel-case@npm:^4.1.2": + version: 4.1.2 + resolution: "camel-case@npm:4.1.2" + dependencies: + pascal-case: ^3.1.2 + tslib: ^2.0.3 + checksum: bcbd25cd253b3cbc69be3f535750137dbf2beb70f093bdc575f73f800acc8443d34fd52ab8f0a2413c34f1e8203139ffc88428d8863e4dfe530cfb257a379ad6 + languageName: node + linkType: hard + "camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" @@ -4657,6 +5276,25 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:^3.6.0": + version: 3.6.0 + resolution: "chokidar@npm:3.6.0" + dependencies: + anymatch: ~3.1.2 + braces: ~3.0.2 + fsevents: ~2.3.2 + glob-parent: ~5.1.2 + is-binary-path: ~2.1.0 + is-glob: ~4.0.1 + normalize-path: ~3.0.0 + readdirp: ~3.6.0 + dependenciesMeta: + fsevents: + optional: true + checksum: d2f29f499705dcd4f6f3bbed79a9ce2388cf530460122eed3b9c48efeab7a4e28739c6551fd15bec9245c6b9eeca7a32baa64694d64d9b6faeb74ddb8c4a413d + languageName: node + linkType: hard + "chokidar@npm:^4.0.3": version: 4.0.3 resolution: "chokidar@npm:4.0.3" @@ -4687,6 +5325,13 @@ __metadata: languageName: node linkType: hard +"chrome-trace-event@npm:^1.0.2": + version: 1.0.4 + resolution: "chrome-trace-event@npm:1.0.4" + checksum: fcbbd9dd0cd5b48444319007cc0c15870fd8612cc0df320908aa9d5e8a244084d48571eb28bf3c58c19327d2c5838f354c2d89fac3956d8e992273437401ac19 + languageName: node + linkType: hard + "chromium-edge-launcher@npm:^0.2.0": version: 0.2.0 resolution: "chromium-edge-launcher@npm:0.2.0" @@ -4738,6 +5383,15 @@ __metadata: languageName: node linkType: hard +"clean-css@npm:^5.2.2": + version: 5.3.3 + resolution: "clean-css@npm:5.3.3" + dependencies: + source-map: ~0.6.0 + checksum: 941987c14860dd7d346d5cf121a82fd2caf8344160b1565c5387f7ccca4bbcaf885bace961be37c4f4713ce2d8c488dd89483c1add47bb779790edbfdcc79cbc + languageName: node + linkType: hard + "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" @@ -4799,6 +5453,17 @@ __metadata: languageName: node linkType: hard +"clone-deep@npm:^4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: ^2.0.4 + kind-of: ^6.0.2 + shallow-clone: ^3.0.0 + checksum: 770f912fe4e6f21873c8e8fbb1e99134db3b93da32df271d00589ea4a29dbe83a9808a322c93f3bcaf8584b8b4fa6fc269fc8032efbaa6728e0c9886c74467d2 + languageName: node + linkType: hard + "clone@npm:^1.0.2": version: 1.0.4 resolution: "clone@npm:1.0.4" @@ -4859,6 +5524,13 @@ __metadata: languageName: node linkType: hard +"colorette@npm:^2.0.10, colorette@npm:^2.0.14": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d + languageName: node + linkType: hard + "command-exists@npm:^1.2.8": version: 1.2.9 resolution: "command-exists@npm:1.2.9" @@ -4866,7 +5538,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^12.0.0": +"commander@npm:^12.0.0, commander@npm:^12.1.0": version: 12.1.0 resolution: "commander@npm:12.1.0" checksum: 68e9818b00fc1ed9cdab9eb16905551c2b768a317ae69a5e3c43924c2b20ac9bb65b27e1cab36aeda7b6496376d4da908996ba2c0b5d79463e0fb1e77935d514 @@ -4880,6 +5552,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^8.3.0": + version: 8.3.0 + resolution: "commander@npm:8.3.0" + checksum: 0f82321821fc27b83bd409510bb9deeebcfa799ff0bf5d102128b500b7af22872c0c92cb6a0ebc5a4cf19c6b550fba9cedfa7329d18c6442a625f851377bacf0 + languageName: node + linkType: hard + "commander@npm:^9.4.1": version: 9.5.0 resolution: "commander@npm:9.5.0" @@ -4918,7 +5597,7 @@ __metadata: languageName: node linkType: hard -"compression@npm:^1.7.1": +"compression@npm:^1.7.1, compression@npm:^1.7.4": version: 1.8.1 resolution: "compression@npm:1.8.1" dependencies: @@ -4959,6 +5638,13 @@ __metadata: languageName: node linkType: hard +"connect-history-api-fallback@npm:^2.0.0": + version: 2.0.0 + resolution: "connect-history-api-fallback@npm:2.0.0" + checksum: dc5368690f4a5c413889792f8df70d5941ca9da44523cde3f87af0745faee5ee16afb8195434550f0504726642734f2683d6c07f8b460f828a12c45fbd4c9a68 + languageName: node + linkType: hard + "connect@npm:^3.6.5": version: 3.7.0 resolution: "connect@npm:3.7.0" @@ -4978,7 +5664,16 @@ __metadata: languageName: node linkType: hard -"content-type@npm:~1.0.5": +"content-disposition@npm:0.5.4": + version: 0.5.4 + resolution: "content-disposition@npm:0.5.4" + dependencies: + safe-buffer: 5.2.1 + checksum: afb9d545e296a5171d7574fcad634b2fdf698875f4006a9dd04a3e1333880c5c0c98d47b560d01216fb6505a54a2ba6a843ee3a02ec86d7e911e8315255f56c3 + languageName: node + linkType: hard + +"content-type@npm:~1.0.4, content-type@npm:~1.0.5": version: 1.0.5 resolution: "content-type@npm:1.0.5" checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766 @@ -5184,6 +5879,20 @@ __metadata: languageName: node linkType: hard +"cookie-signature@npm:1.0.6": + version: 1.0.6 + resolution: "cookie-signature@npm:1.0.6" + checksum: f4e1b0a98a27a0e6e66fd7ea4e4e9d8e038f624058371bf4499cfcd8f3980be9a121486995202ba3fca74fbed93a407d6d54d43a43f96fd28d0bd7a06761591a + languageName: node + linkType: hard + +"cookie@npm:0.7.1": + version: 0.7.1 + resolution: "cookie@npm:0.7.1" + checksum: cec5e425549b3650eb5c3498a9ba3cde0b9cd419e3b36e4b92739d30b4d89e0b678b98c1ddc209ce7cf958cd3215671fd6ac47aec21f10c2a0cc68abd399d8a7 + languageName: node + linkType: hard + "core-js-compat@npm:^3.43.0": version: 3.45.1 resolution: "core-js-compat@npm:3.45.1" @@ -5193,6 +5902,13 @@ __metadata: languageName: node linkType: hard +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + languageName: node + linkType: hard + "cosmiconfig-typescript-loader@npm:^6.1.0": version: 6.1.0 resolution: "cosmiconfig-typescript-loader@npm:6.1.0" @@ -5281,6 +5997,26 @@ __metadata: languageName: node linkType: hard +"css-select@npm:^4.1.3": + version: 4.3.0 + resolution: "css-select@npm:4.3.0" + dependencies: + boolbase: ^1.0.0 + css-what: ^6.0.1 + domhandler: ^4.3.1 + domutils: ^2.8.0 + nth-check: ^2.0.1 + checksum: d6202736839194dd7f910320032e7cfc40372f025e4bf21ca5bf6eb0a33264f322f50ba9c0adc35dadd342d3d6fae5ca244779a4873afbfa76561e343f2058e0 + languageName: node + linkType: hard + +"css-what@npm:^6.0.1": + version: 6.2.2 + resolution: "css-what@npm:6.2.2" + checksum: 4d1f07b348a638e1f8b4c72804a1e93881f35e0f541256aec5ac0497c5855df7db7ab02da030de950d4813044f6d029a14ca657e0f92c3987e4b604246235b2b + languageName: node + linkType: hard + "csstype@npm:^3.0.2": version: 3.1.3 resolution: "csstype@npm:3.1.3" @@ -5526,6 +6262,13 @@ __metadata: languageName: node linkType: hard +"depd@npm:~1.1.2": + version: 1.1.2 + resolution: "depd@npm:1.1.2" + checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9 + languageName: node + linkType: hard + "destr@npm:^2.0.3": version: 2.0.5 resolution: "destr@npm:2.0.5" @@ -5547,6 +6290,13 @@ __metadata: languageName: node linkType: hard +"detect-node@npm:^2.0.4": + version: 2.1.0 + resolution: "detect-node@npm:2.1.0" + checksum: 832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e + languageName: node + linkType: hard + "diff-sequences@npm:^29.6.3": version: 29.6.3 resolution: "diff-sequences@npm:29.6.3" @@ -5563,6 +6313,15 @@ __metadata: languageName: node linkType: hard +"dns-packet@npm:^5.2.2": + version: 5.6.1 + resolution: "dns-packet@npm:5.6.1" + dependencies: + "@leichtgewicht/ip-codec": ^2.0.1 + checksum: 64c06457f0c6e143f7a0946e0aeb8de1c5f752217cfa143ef527467c00a6d78db1835cfdb6bb68333d9f9a4963cf23f410439b5262a8935cce1236f45e344b81 + languageName: node + linkType: hard + "doctrine@npm:^2.1.0": version: 2.1.0 resolution: "doctrine@npm:2.1.0" @@ -5572,6 +6331,63 @@ __metadata: languageName: node linkType: hard +"dom-converter@npm:^0.2.0": + version: 0.2.0 + resolution: "dom-converter@npm:0.2.0" + dependencies: + utila: ~0.4 + checksum: ea52fe303f5392e48dea563abef0e6fb3a478b8dbe3c599e99bb5d53981c6c38fc4944e56bb92a8ead6bb989d10b7914722ae11febbd2fd0910e33b9fc4aaa77 + languageName: node + linkType: hard + +"dom-serializer@npm:^1.0.1": + version: 1.4.1 + resolution: "dom-serializer@npm:1.4.1" + dependencies: + domelementtype: ^2.0.1 + domhandler: ^4.2.0 + entities: ^2.0.0 + checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 + languageName: node + linkType: hard + +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 + languageName: node + linkType: hard + +"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.3.1": + version: 4.3.1 + resolution: "domhandler@npm:4.3.1" + dependencies: + domelementtype: ^2.2.0 + checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa + languageName: node + linkType: hard + +"domutils@npm:^2.5.2, domutils@npm:^2.8.0": + version: 2.8.0 + resolution: "domutils@npm:2.8.0" + dependencies: + dom-serializer: ^1.0.1 + domelementtype: ^2.2.0 + domhandler: ^4.2.0 + checksum: abf7434315283e9aadc2a24bac0e00eab07ae4313b40cc239f89d84d7315ebdfd2fb1b5bf750a96bc1b4403d7237c7b2ebf60459be394d625ead4ca89b934391 + languageName: node + linkType: hard + +"dot-case@npm:^3.0.4": + version: 3.0.4 + resolution: "dot-case@npm:3.0.4" + dependencies: + no-case: ^3.0.4 + tslib: ^2.0.3 + checksum: a65e3519414856df0228b9f645332f974f2bf5433370f544a681122eab59e66038fc3349b4be1cdc47152779dac71a5864f1ccda2f745e767c46e9c6543b1169 + languageName: node + linkType: hard + "dot-prop@npm:^5.1.0": version: 5.3.0 resolution: "dot-prop@npm:5.3.0" @@ -5648,6 +6464,13 @@ __metadata: languageName: node linkType: hard +"emojis-list@npm:^3.0.0": + version: 3.0.0 + resolution: "emojis-list@npm:3.0.0" + checksum: ddaaa02542e1e9436c03970eeed445f4ed29a5337dfba0fe0c38dfdd2af5da2429c2a0821304e8a8d1cadf27fdd5b22ff793571fa803ae16852a6975c65e8e70 + languageName: node + linkType: hard + "encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" @@ -5671,12 +6494,29 @@ __metadata: languageName: node linkType: hard -"end-of-stream@npm:^1.1.0": - version: 1.4.5 - resolution: "end-of-stream@npm:1.4.5" - dependencies: - once: ^1.4.0 - checksum: 1e0cfa6e7f49887544e03314f9dfc56a8cb6dde910cbb445983ecc2ff426fc05946df9d75d8a21a3a64f2cecfe1bf88f773952029f46756b2ed64a24e95b1fb8 +"end-of-stream@npm:^1.1.0": + version: 1.4.5 + resolution: "end-of-stream@npm:1.4.5" + dependencies: + once: ^1.4.0 + checksum: 1e0cfa6e7f49887544e03314f9dfc56a8cb6dde910cbb445983ecc2ff426fc05946df9d75d8a21a3a64f2cecfe1bf88f773952029f46756b2ed64a24e95b1fb8 + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.0.0, enhanced-resolve@npm:^5.17.3": + version: 5.18.3 + resolution: "enhanced-resolve@npm:5.18.3" + dependencies: + graceful-fs: ^4.2.4 + tapable: ^2.2.0 + checksum: e2b2188a7f9b68616984b5ce1f43b97bef3c5fde4d193c24ea4cfdb4eb784a700093f049f14155733a3cb3ae1204550590aa37dda7e742022c8f447f618a4816 + languageName: node + linkType: hard + +"entities@npm:^2.0.0": + version: 2.2.0 + resolution: "entities@npm:2.2.0" + checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 languageName: node linkType: hard @@ -5687,7 +6527,7 @@ __metadata: languageName: node linkType: hard -"envinfo@npm:^7.13.0": +"envinfo@npm:^7.13.0, envinfo@npm:^7.14.0": version: 7.14.0 resolution: "envinfo@npm:7.14.0" bin: @@ -5831,6 +6671,13 @@ __metadata: languageName: node linkType: hard +"es-module-lexer@npm:^1.2.1": + version: 1.7.0 + resolution: "es-module-lexer@npm:1.7.0" + checksum: 7858bb76ae387fdbf8a6fccc951bf18919768309850587553eca34698b9193fbc65fab03d3d9f69163d860321fbf66adf89d5821e7f4148c7cb7d7b997259211 + languageName: node + linkType: hard + "es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": version: 1.1.1 resolution: "es-object-atoms@npm:1.1.1" @@ -6244,6 +7091,20 @@ __metadata: languageName: node linkType: hard +"eventemitter3@npm:^4.0.0": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 + languageName: node + linkType: hard + +"events@npm:^3.2.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 + languageName: node + linkType: hard + "execa@npm:^4.0.3": version: 4.1.0 resolution: "execa@npm:4.1.0" @@ -6322,6 +7183,45 @@ __metadata: languageName: node linkType: hard +"express@npm:^4.21.2": + version: 4.21.2 + resolution: "express@npm:4.21.2" + dependencies: + accepts: ~1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3 + content-disposition: 0.5.4 + content-type: ~1.0.4 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: ~2.0.0 + escape-html: ~1.0.3 + etag: ~1.8.1 + finalhandler: 1.3.1 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: ~1.1.2 + on-finished: 2.4.1 + parseurl: ~1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: ~2.0.7 + qs: 6.13.0 + range-parser: ~1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0 + serve-static: 1.16.2 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: ~1.6.18 + utils-merge: 1.0.1 + vary: ~1.1.2 + checksum: 3aef1d355622732e20b8f3a7c112d4391d44e2131f4f449e1f273a309752a41abfad714e881f177645517cbe29b3ccdc10b35e7e25c13506114244a5b72f549d + languageName: node + linkType: hard + "exsolve@npm:^1.0.7": version: 1.0.7 resolution: "exsolve@npm:1.0.7" @@ -6395,6 +7295,13 @@ __metadata: languageName: node linkType: hard +"fastest-levenshtein@npm:^1.0.12": + version: 1.0.16 + resolution: "fastest-levenshtein@npm:1.0.16" + checksum: a78d44285c9e2ae2c25f3ef0f8a73f332c1247b7ea7fb4a191e6bb51aa6ee1ef0dfb3ed113616dcdc7023e18e35a8db41f61c8d88988e877cf510df8edafbc71 + languageName: node + linkType: hard + "fastq@npm:^1.6.0": version: 1.19.1 resolution: "fastq@npm:1.19.1" @@ -6404,6 +7311,15 @@ __metadata: languageName: node linkType: hard +"faye-websocket@npm:^0.11.3": + version: 0.11.4 + resolution: "faye-websocket@npm:0.11.4" + dependencies: + websocket-driver: ">=0.5.1" + checksum: d49a62caf027f871149fc2b3f3c7104dc6d62744277eb6f9f36e2d5714e847d846b9f7f0d0b7169b25a012e24a594cde11a93034b30732e4c683f20b8a5019fa + languageName: node + linkType: hard + "fb-watchman@npm:^2.0.0": version: 2.0.2 resolution: "fb-watchman@npm:2.0.2" @@ -6480,6 +7396,21 @@ __metadata: languageName: node linkType: hard +"finalhandler@npm:1.3.1": + version: 1.3.1 + resolution: "finalhandler@npm:1.3.1" + dependencies: + debug: 2.6.9 + encodeurl: ~2.0.0 + escape-html: ~1.0.3 + on-finished: 2.4.1 + parseurl: ~1.3.3 + statuses: 2.0.1 + unpipe: ~1.0.0 + checksum: a8c58cd97c9cd47679a870f6833a7b417043f5a288cd6af6d0f49b476c874a506100303a128b6d3b654c3d74fa4ff2ffed68a48a27e8630cda5c918f2977dcf4 + languageName: node + linkType: hard + "find-up-simple@npm:^1.0.0": version: 1.0.1 resolution: "find-up-simple@npm:1.0.1" @@ -6528,6 +7459,15 @@ __metadata: languageName: node linkType: hard +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 12a1536ac746db74881316a181499a78ef953632ddd28050b7a3a43c62ef5462e3357c8c29d76072bb635f147f7a9a1f0c02efef6b4be28f8db62ceb3d5c7f5d + languageName: node + linkType: hard + "flatted@npm:^3.2.9": version: 3.3.3 resolution: "flatted@npm:3.3.3" @@ -6542,6 +7482,16 @@ __metadata: languageName: node linkType: hard +"follow-redirects@npm:^1.0.0": + version: 1.15.11 + resolution: "follow-redirects@npm:1.15.11" + peerDependenciesMeta: + debug: + optional: true + checksum: 20bf55e9504f59e6cc3743ba27edb2ebf41edea1baab34799408f2c050f73f0c612728db21c691276296d2795ea8a812dc532a98e8793619fcab91abe06d017f + languageName: node + linkType: hard + "for-each@npm:^0.3.3, for-each@npm:^0.3.5": version: 0.3.5 resolution: "for-each@npm:0.3.5" @@ -6561,6 +7511,13 @@ __metadata: languageName: node linkType: hard +"forwarded@npm:0.2.0": + version: 0.2.0 + resolution: "forwarded@npm:0.2.0" + checksum: fd27e2394d8887ebd16a66ffc889dc983fbbd797d5d3f01087c020283c0f019a7d05ee85669383d8e0d216b116d720fc0cef2f6e9b7eb9f4c90c6e0bc7fd28e6 + languageName: node + linkType: hard + "fresh@npm:0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" @@ -6606,7 +7563,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.3.2": +"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -6616,7 +7573,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@^2.3.2#~builtin": +"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1" dependencies: @@ -6826,7 +7783,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^5.1.2": +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" dependencies: @@ -6844,6 +7801,22 @@ __metadata: languageName: node linkType: hard +"glob-to-regex.js@npm:^1.0.1": + version: 1.0.1 + resolution: "glob-to-regex.js@npm:1.0.1" + peerDependencies: + tslib: 2 + checksum: c08f748acdb493265e725e44b706eb262b9cc201b7fc13eb4f227dab1471cd522810fa46afa52df54756fe13906819dd7de0cd92b0060ef46ba86441a0b69d6a + languageName: node + linkType: hard + +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: e795f4e8f06d2a15e86f76e4d92751cf8bbfcf0157cea5c2f0f35678a8195a750b34096b1256e436f0cebc1883b5ff0888c47348443e69546a5a87f9e1eb1167 + languageName: node + linkType: hard + "glob@npm:^10.2.2": version: 10.4.5 resolution: "glob@npm:10.4.5" @@ -6948,7 +7921,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.3, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.3, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 @@ -6962,6 +7935,13 @@ __metadata: languageName: node linkType: hard +"handle-thing@npm:^2.0.0": + version: 2.0.1 + resolution: "handle-thing@npm:2.0.1" + checksum: 68071f313062315cd9dce55710e9496873945f1dd425107007058fc1629f93002a7649fcc3e464281ce02c7e809a35f5925504ab8105d972cf649f1f47cb7d6c + languageName: node + linkType: hard + "handlebars@npm:^4.7.7": version: 4.7.8 resolution: "handlebars@npm:4.7.8" @@ -7037,6 +8017,15 @@ __metadata: languageName: node linkType: hard +"he@npm:^1.2.0": + version: 1.2.0 + resolution: "he@npm:1.2.0" + bin: + he: bin/he + checksum: 3d4d6babccccd79c5c5a3f929a68af33360d6445587d628087f39a965079d84f18ce9c3d3f917ee1e3978916fc833bb8b29377c3b403f919426f91bc6965e7a7 + languageName: node + linkType: hard + "hermes-estree@npm:0.28.1": version: 0.28.1 resolution: "hermes-estree@npm:0.28.1" @@ -7078,6 +8067,18 @@ __metadata: languageName: node linkType: hard +"hpack.js@npm:^2.1.6": + version: 2.1.6 + resolution: "hpack.js@npm:2.1.6" + dependencies: + inherits: ^2.0.1 + obuf: ^1.0.0 + readable-stream: ^2.0.1 + wbuf: ^1.1.0 + checksum: 2de144115197967ad6eeee33faf41096c6ba87078703c5cb011632dcfbffeb45784569e0cf02c317bd79c48375597c8ec88c30fff5bb0b023e8f654fb6e9c06e + languageName: node + linkType: hard + "html-escaper@npm:^2.0.0": version: 2.0.2 resolution: "html-escaper@npm:2.0.2" @@ -7085,6 +8086,56 @@ __metadata: languageName: node linkType: hard +"html-minifier-terser@npm:^6.0.2": + version: 6.1.0 + resolution: "html-minifier-terser@npm:6.1.0" + dependencies: + camel-case: ^4.1.2 + clean-css: ^5.2.2 + commander: ^8.3.0 + he: ^1.2.0 + param-case: ^3.0.4 + relateurl: ^0.2.7 + terser: ^5.10.0 + bin: + html-minifier-terser: cli.js + checksum: ac52c14006476f773204c198b64838477859dc2879490040efab8979c0207424da55d59df7348153f412efa45a0840a1ca3c757bf14767d23a15e3e389d37a93 + languageName: node + linkType: hard + +"html-webpack-plugin@npm:^5.6.4": + version: 5.6.4 + resolution: "html-webpack-plugin@npm:5.6.4" + dependencies: + "@types/html-minifier-terser": ^6.0.0 + html-minifier-terser: ^6.0.2 + lodash: ^4.17.21 + pretty-error: ^4.0.0 + tapable: ^2.0.0 + peerDependencies: + "@rspack/core": 0.x || 1.x + webpack: ^5.20.0 + peerDependenciesMeta: + "@rspack/core": + optional: true + webpack: + optional: true + checksum: b486d99ce820d563dda215f8b6bbeb78127a738b88b419c95d577165e10dd29125e151010b5745ce933e8055f2445c2f9ad1c93024ad3b752db9ac613e84cfac + languageName: node + linkType: hard + +"htmlparser2@npm:^6.1.0": + version: 6.1.0 + resolution: "htmlparser2@npm:6.1.0" + dependencies: + domelementtype: ^2.0.1 + domhandler: ^4.0.0 + domutils: ^2.5.2 + entities: ^2.0.0 + checksum: 81a7b3d9c3bb9acb568a02fc9b1b81ffbfa55eae7f1c41ae0bf840006d1dbf54cb3aa245b2553e2c94db674840a9f0fdad7027c9a9d01a062065314039058c4e + languageName: node + linkType: hard + "http-cache-semantics@npm:^4.1.1": version: 4.2.0 resolution: "http-cache-semantics@npm:4.2.0" @@ -7092,6 +8143,13 @@ __metadata: languageName: node linkType: hard +"http-deceiver@npm:^1.2.7": + version: 1.2.7 + resolution: "http-deceiver@npm:1.2.7" + checksum: 64d7d1ae3a6933eb0e9a94e6f27be4af45a53a96c3c34e84ff57113787105a89fff9d1c3df263ef63add823df019b0e8f52f7121e32393bb5ce9a713bf100b41 + languageName: node + linkType: hard + "http-errors@npm:2.0.0": version: 2.0.0 resolution: "http-errors@npm:2.0.0" @@ -7105,6 +8163,25 @@ __metadata: languageName: node linkType: hard +"http-errors@npm:~1.6.2": + version: 1.6.3 + resolution: "http-errors@npm:1.6.3" + dependencies: + depd: ~1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: ">= 1.4.0 < 2" + checksum: a9654ee027e3d5de305a56db1d1461f25709ac23267c6dc28cdab8323e3f96caa58a9a6a5e93ac15d7285cee0c2f019378c3ada9026e7fe19c872d695f27de7c + languageName: node + linkType: hard + +"http-parser-js@npm:>=0.5.1": + version: 0.5.10 + resolution: "http-parser-js@npm:0.5.10" + checksum: 1038177c5f114860345ce7c19223d2cdd9a103265bd897bab13343c9eff4deef60f7956a674485f1234ffc9b19fb4b97f0c20a5848cfc9ccbf5d3c438d89ae89 + languageName: node + linkType: hard + "http-proxy-agent@npm:^7.0.0, http-proxy-agent@npm:^7.0.1": version: 7.0.2 resolution: "http-proxy-agent@npm:7.0.2" @@ -7115,6 +8192,35 @@ __metadata: languageName: node linkType: hard +"http-proxy-middleware@npm:^2.0.9": + version: 2.0.9 + resolution: "http-proxy-middleware@npm:2.0.9" + dependencies: + "@types/http-proxy": ^1.17.8 + http-proxy: ^1.18.1 + is-glob: ^4.0.1 + is-plain-obj: ^3.0.0 + micromatch: ^4.0.2 + peerDependencies: + "@types/express": ^4.17.13 + peerDependenciesMeta: + "@types/express": + optional: true + checksum: 0ea88609b9c13fa03b89f8e6b85bd5c537027ec6990005dd81a7fbb3e73fcf8d6a6e3db2b57b1c6cddbcda80965704584dc6291d0e721b2700198c4e59ee0d0b + languageName: node + linkType: hard + +"http-proxy@npm:^1.18.1": + version: 1.18.1 + resolution: "http-proxy@npm:1.18.1" + dependencies: + eventemitter3: ^4.0.0 + follow-redirects: ^1.0.0 + requires-port: ^1.0.0 + checksum: f5bd96bf83e0b1e4226633dbb51f8b056c3e6321917df402deacec31dd7fe433914fc7a2c1831cf7ae21e69c90b3a669b8f434723e9e8b71fd68afe30737b6a5 + languageName: node + linkType: hard + "https-proxy-agent@npm:^7.0.1, https-proxy-agent@npm:^7.0.5, https-proxy-agent@npm:^7.0.6": version: 7.0.6 resolution: "https-proxy-agent@npm:7.0.6" @@ -7146,6 +8252,13 @@ __metadata: languageName: node linkType: hard +"hyperdyperid@npm:^1.2.0": + version: 1.2.0 + resolution: "hyperdyperid@npm:1.2.0" + checksum: 210029d1c86926f09109f6317d143f8b056fc38e8dd11b0c3e3205fc6c6ff8429fb55b4b9c2bce065462719ed9d34366eced387aaa0035d93eb76b306a8547ef + languageName: node + linkType: hard + "hyphenate-style-name@npm:^1.0.3": version: 1.1.0 resolution: "hyphenate-style-name@npm:1.1.0" @@ -7273,13 +8386,20 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 languageName: node linkType: hard +"inherits@npm:2.0.3": + version: 2.0.3 + resolution: "inherits@npm:2.0.3" + checksum: 78cb8d7d850d20a5e9a7f3620db31483aa00ad5f722ce03a55b110e5a723539b3716a3b463e2b96ce3fe286f33afc7c131fa2f91407528ba80cea98a7545d4c0 + languageName: node + linkType: hard + "ini@npm:4.1.1": version: 4.1.1 resolution: "ini@npm:4.1.1" @@ -7327,6 +8447,13 @@ __metadata: languageName: node linkType: hard +"interpret@npm:^3.1.1": + version: 3.1.1 + resolution: "interpret@npm:3.1.1" + checksum: 35cebcf48c7351130437596d9ab8c8fe131ce4038da4561e6d665f25640e0034702a031cf7e3a5cea60ac7ac548bf17465e0571ede126f3d3a6933152171ac82 + languageName: node + linkType: hard + "invariant@npm:^2.2.4": version: 2.2.4 resolution: "invariant@npm:2.2.4" @@ -7343,6 +8470,20 @@ __metadata: languageName: node linkType: hard +"ipaddr.js@npm:1.9.1": + version: 1.9.1 + resolution: "ipaddr.js@npm:1.9.1" + checksum: f88d3825981486f5a1942414c8d77dd6674dd71c065adcfa46f578d677edcb99fda25af42675cb59db492fdf427b34a5abfcde3982da11a8fd83a500b41cfe77 + languageName: node + linkType: hard + +"ipaddr.js@npm:^2.1.0": + version: 2.2.0 + resolution: "ipaddr.js@npm:2.2.0" + checksum: 770ba8451fd9bf78015e8edac0d5abd7a708cbf75f9429ca9147a9d2f3a2d60767cd5de2aab2b1e13ca6e4445bdeff42bf12ef6f151c07a5c6cf8a44328e2859 + languageName: node + linkType: hard + "is-absolute@npm:^1.0.0": version: 1.0.0 resolution: "is-absolute@npm:1.0.0" @@ -7393,6 +8534,15 @@ __metadata: languageName: node linkType: hard +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: ^2.0.0 + checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c + languageName: node + linkType: hard + "is-boolean-object@npm:^1.2.1": version: 1.2.2 resolution: "is-boolean-object@npm:1.2.2" @@ -7534,7 +8684,7 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -7582,6 +8732,13 @@ __metadata: languageName: node linkType: hard +"is-network-error@npm:^1.0.0": + version: 1.1.0 + resolution: "is-network-error@npm:1.1.0" + checksum: b2fe6aac07f814a9de275efd05934c832c129e7ba292d27614e9e8eec9e043b7a0bbeaeca5d0916b0f462edbec2aa2eaee974ee0a12ac095040e9515c222c251 + languageName: node + linkType: hard + "is-number-object@npm:^1.1.1": version: 1.1.1 resolution: "is-number-object@npm:1.1.1" @@ -7634,6 +8791,22 @@ __metadata: languageName: node linkType: hard +"is-plain-obj@npm:^3.0.0": + version: 3.0.0 + resolution: "is-plain-obj@npm:3.0.0" + checksum: a6ebdf8e12ab73f33530641972a72a4b8aed6df04f762070d823808303e4f76d87d5ea5bd76f96a7bbe83d93f04ac7764429c29413bd9049853a69cb630fb21c + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: ^3.0.1 + checksum: 2a401140cfd86cabe25214956ae2cfee6fbd8186809555cd0e84574f88de7b17abacb2e477a6a658fa54c6083ecbda1e6ae404c7720244cd198903848fca70ca + languageName: node + linkType: hard + "is-regex@npm:^1.2.1": version: 1.2.1 resolution: "is-regex@npm:1.2.1" @@ -7828,6 +9001,13 @@ __metadata: languageName: node linkType: hard +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -7842,6 +9022,13 @@ __metadata: languageName: node linkType: hard +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 + languageName: node + linkType: hard + "issue-parser@npm:7.0.1": version: 7.0.1 resolution: "issue-parser@npm:7.0.1" @@ -8355,6 +9542,17 @@ __metadata: languageName: node linkType: hard +"jest-worker@npm:^27.4.5": + version: 27.5.1 + resolution: "jest-worker@npm:27.5.1" + dependencies: + "@types/node": "*" + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 98cd68b696781caed61c983a3ee30bf880b5bd021c01d98f47b143d4362b85d0737f8523761e2713d45e18b4f9a2b98af1eaee77afade4111bb65c77d6f7c980 + languageName: node + linkType: hard + "jest-worker@npm:^29.7.0": version: 29.7.0 resolution: "jest-worker@npm:29.7.0" @@ -8477,7 +9675,7 @@ __metadata: languageName: node linkType: hard -"json-parse-even-better-errors@npm:^2.3.0": +"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f @@ -8505,7 +9703,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.2.1, json5@npm:^2.2.3": +"json5@npm:^2.1.2, json5@npm:^2.2.1, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -8567,6 +9765,13 @@ __metadata: languageName: node linkType: hard +"kind-of@npm:^6.0.2": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b + languageName: node + linkType: hard + "kleur@npm:^3.0.3": version: 3.0.3 resolution: "kleur@npm:3.0.3" @@ -8581,7 +9786,7 @@ __metadata: languageName: node linkType: hard -"launch-editor@npm:^2.9.1": +"launch-editor@npm:^2.6.1, launch-editor@npm:^2.9.1": version: 2.11.1 resolution: "launch-editor@npm:2.11.1" dependencies: @@ -8625,6 +9830,24 @@ __metadata: languageName: node linkType: hard +"loader-runner@npm:^4.2.0": + version: 4.3.0 + resolution: "loader-runner@npm:4.3.0" + checksum: a90e00dee9a16be118ea43fec3192d0b491fe03a32ed48a4132eb61d498f5536a03a1315531c19d284392a8726a4ecad71d82044c28d7f22ef62e029bf761569 + languageName: node + linkType: hard + +"loader-utils@npm:^2.0.0": + version: 2.0.4 + resolution: "loader-utils@npm:2.0.4" + dependencies: + big.js: ^5.2.2 + emojis-list: ^3.0.0 + json5: ^2.1.2 + checksum: a5281f5fff1eaa310ad5e1164095689443630f3411e927f95031ab4fb83b4a98f388185bb1fe949e8ab8d4247004336a625e9255c22122b815bb9a4c5d8fc3b7 + languageName: node + linkType: hard + "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -8757,7 +9980,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.15.0, lodash@npm:^4.17.21": +"lodash@npm:^4.15.0, lodash@npm:^4.17.20, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -8808,6 +10031,15 @@ __metadata: languageName: node linkType: hard +"lower-case@npm:^2.0.2": + version: 2.0.2 + resolution: "lower-case@npm:2.0.2" + dependencies: + tslib: ^2.0.3 + checksum: 83a0a5f159ad7614bee8bf976b96275f3954335a84fad2696927f609ddae902802c4f3312d86668722e668bef41400254807e1d3a7f2e8c3eede79691aa1f010 + languageName: node + linkType: hard + "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": version: 10.4.3 resolution: "lru-cache@npm:10.4.3" @@ -8896,6 +10128,20 @@ __metadata: languageName: node linkType: hard +"memfs@npm:^4.6.0": + version: 4.38.3 + resolution: "memfs@npm:4.38.3" + dependencies: + "@jsonjoy.com/json-pack": ^1.11.0 + "@jsonjoy.com/util": ^1.9.0 + glob-to-regex.js: ^1.0.1 + thingies: ^2.5.0 + tree-dump: ^1.0.3 + tslib: ^2.0.0 + checksum: 38dd3ccfac59ce9a9a173eaef54398a8f5838f37c89378be136faf0cb24666640a9536e825fa12e8145ccf64f5ab1ae091197c050612a3f79387f51d18e06823 + languageName: node + linkType: hard + "memoize-one@npm:^5.0.0": version: 5.2.1 resolution: "memoize-one@npm:5.2.1" @@ -8924,6 +10170,13 @@ __metadata: languageName: node linkType: hard +"merge-descriptors@npm:1.0.3": + version: 1.0.3 + resolution: "merge-descriptors@npm:1.0.3" + checksum: 52117adbe0313d5defa771c9993fe081e2d2df9b840597e966aadafde04ae8d0e3da46bac7ca4efc37d4d2b839436582659cd49c6a43eacb3fe3050896a105d1 + languageName: node + linkType: hard + "merge-stream@npm:^2.0.0": version: 2.0.0 resolution: "merge-stream@npm:2.0.0" @@ -8938,6 +10191,13 @@ __metadata: languageName: node linkType: hard +"methods@npm:~1.1.2": + version: 1.1.2 + resolution: "methods@npm:1.1.2" + checksum: 0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a + languageName: node + linkType: hard + "metro-babel-transformer@npm:0.83.1": version: 0.83.1 resolution: "metro-babel-transformer@npm:0.83.1" @@ -9163,7 +10423,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.4, micromatch@npm:^4.0.8": +"micromatch@npm:^4.0.0, micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.8": version: 4.0.8 resolution: "micromatch@npm:4.0.8" dependencies: @@ -9187,7 +10447,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:3.0.1": +"mime-types@npm:3.0.1, mime-types@npm:^3.0.1": version: 3.0.1 resolution: "mime-types@npm:3.0.1" dependencies: @@ -9196,7 +10456,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.27, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.27, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -9244,6 +10504,13 @@ __metadata: languageName: node linkType: hard +"minimalistic-assert@npm:^1.0.0": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: cc7974a9268fbf130fb055aff76700d7e2d8be5f761fb5c60318d0ed010d839ab3661a533ad29a5d37653133385204c503bfac995aaa4236f4e847461ea32ba7 + languageName: node + linkType: hard + "minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -9386,6 +10653,18 @@ __metadata: languageName: node linkType: hard +"multicast-dns@npm:^7.2.5": + version: 7.2.5 + resolution: "multicast-dns@npm:7.2.5" + dependencies: + dns-packet: ^5.2.2 + thunky: ^1.0.2 + bin: + multicast-dns: cli.js + checksum: 00b8a57df152d4cd0297946320a94b7c3cdf75a46a2247f32f958a8927dea42958177f9b7fdae69fab2e4e033fb3416881af1f5e9055a3e1542888767139e2fb + languageName: node + linkType: hard + "mute-stream@npm:^2.0.0": version: 2.0.0 resolution: "mute-stream@npm:2.0.0" @@ -9444,6 +10723,16 @@ __metadata: languageName: node linkType: hard +"no-case@npm:^3.0.4": + version: 3.0.4 + resolution: "no-case@npm:3.0.4" + dependencies: + lower-case: ^2.0.2 + tslib: ^2.0.3 + checksum: 0b2ebc113dfcf737d48dde49cfebf3ad2d82a8c3188e7100c6f375e30eafbef9e9124aadc3becef237b042fd5eb0aad2fd78669c20972d045bbe7fea8ba0be5c + languageName: node + linkType: hard + "nocache@npm:^3.0.1": version: 3.0.4 resolution: "nocache@npm:3.0.4" @@ -9472,6 +10761,13 @@ __metadata: languageName: node linkType: hard +"node-forge@npm:^1": + version: 1.3.1 + resolution: "node-forge@npm:1.3.1" + checksum: 08fb072d3d670599c89a1704b3e9c649ff1b998256737f0e06fbd1a5bf41cae4457ccaee32d95052d80bbafd9ffe01284e078c8071f0267dc9744e51c5ed42a9 + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 11.4.2 resolution: "node-gyp@npm:11.4.2" @@ -9535,7 +10831,7 @@ __metadata: languageName: node linkType: hard -"normalize-path@npm:^3.0.0": +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 @@ -9560,6 +10856,15 @@ __metadata: languageName: node linkType: hard +"nth-check@npm:^2.0.1": + version: 2.1.1 + resolution: "nth-check@npm:2.1.1" + dependencies: + boolbase: ^1.0.0 + checksum: 5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3 + languageName: node + linkType: hard + "nullthrows@npm:^1.1.1": version: 1.1.1 resolution: "nullthrows@npm:1.1.1" @@ -9662,6 +10967,13 @@ __metadata: languageName: node linkType: hard +"obuf@npm:^1.0.0, obuf@npm:^1.1.2": + version: 1.1.2 + resolution: "obuf@npm:1.1.2" + checksum: 41a2ba310e7b6f6c3b905af82c275bf8854896e2e4c5752966d64cbcd2f599cfffd5932006bcf3b8b419dfdacebb3a3912d5d94e10f1d0acab59876c8757f27f + languageName: node + linkType: hard + "ohash@npm:^2.0.11": version: 2.0.11 resolution: "ohash@npm:2.0.11" @@ -9669,7 +10981,7 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:2.4.1": +"on-finished@npm:2.4.1, on-finished@npm:^2.4.1": version: 2.4.1 resolution: "on-finished@npm:2.4.1" dependencies: @@ -9730,7 +11042,7 @@ __metadata: languageName: node linkType: hard -"open@npm:10.2.0": +"open@npm:10.2.0, open@npm:^10.0.3": version: 10.2.0 resolution: "open@npm:10.2.0" dependencies: @@ -9900,6 +11212,17 @@ __metadata: languageName: node linkType: hard +"p-retry@npm:^6.2.0": + version: 6.2.1 + resolution: "p-retry@npm:6.2.1" + dependencies: + "@types/retry": 0.12.2 + is-network-error: ^1.0.0 + retry: ^0.13.1 + checksum: 73acd269544b1359b7f2aa5f907f6f8cd4947c596bc43cc25fecce2678e2f190095179407eb874f0e09fc5956ae7952c39ebb08c3d9334f59d41ae0b2d73ee6b + languageName: node + linkType: hard + "p-try@npm:^2.0.0": version: 2.2.0 resolution: "p-try@npm:2.2.0" @@ -9940,6 +11263,16 @@ __metadata: languageName: node linkType: hard +"param-case@npm:^3.0.4": + version: 3.0.4 + resolution: "param-case@npm:3.0.4" + dependencies: + dot-case: ^3.0.4 + tslib: ^2.0.3 + checksum: b34227fd0f794e078776eb3aa6247442056cb47761e9cd2c4c881c86d84c64205f6a56ef0d70b41ee7d77da02c3f4ed2f88e3896a8fefe08bdfb4deca037c687 + languageName: node + linkType: hard + "parent-module@npm:^1.0.0": version: 1.0.1 resolution: "parent-module@npm:1.0.1" @@ -10001,13 +11334,23 @@ __metadata: languageName: node linkType: hard -"parseurl@npm:~1.3.3": +"parseurl@npm:~1.3.2, parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2 languageName: node linkType: hard +"pascal-case@npm:^3.1.2": + version: 3.1.2 + resolution: "pascal-case@npm:3.1.2" + dependencies: + no-case: ^3.0.4 + tslib: ^2.0.3 + checksum: ba98bfd595fc91ef3d30f4243b1aee2f6ec41c53b4546bfa3039487c367abaa182471dcfc830a1f9e1a0df00c14a370514fa2b3a1aacc68b15a460c31116873e + languageName: node + linkType: hard + "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -10060,6 +11403,13 @@ __metadata: languageName: node linkType: hard +"path-to-regexp@npm:0.1.12": + version: 0.1.12 + resolution: "path-to-regexp@npm:0.1.12" + checksum: ab237858bee7b25ecd885189f175ab5b5161e7b712b360d44f5c4516b8d271da3e4bf7bf0a7b9153ecb04c7d90ce8ff5158614e1208819cf62bac2b08452722e + languageName: node + linkType: hard + "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -10095,7 +11445,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf @@ -10175,6 +11525,16 @@ __metadata: languageName: node linkType: hard +"pretty-error@npm:^4.0.0": + version: 4.0.0 + resolution: "pretty-error@npm:4.0.0" + dependencies: + lodash: ^4.17.20 + renderkid: ^3.0.0 + checksum: a5b9137365690104ded6947dca2e33360bf55e62a4acd91b1b0d7baa3970e43754c628cc9e16eafbdd4e8f8bcb260a5865475d4fc17c3106ff2d61db4e72cdf3 + languageName: node + linkType: hard + "pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": version: 29.7.0 resolution: "pretty-format@npm:29.7.0" @@ -10193,6 +11553,13 @@ __metadata: languageName: node linkType: hard +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf + languageName: node + linkType: hard + "promise-retry@npm:^2.0.1": version: 2.0.1 resolution: "promise-retry@npm:2.0.1" @@ -10249,6 +11616,16 @@ __metadata: languageName: node linkType: hard +"proxy-addr@npm:~2.0.7": + version: 2.0.7 + resolution: "proxy-addr@npm:2.0.7" + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + checksum: 29c6990ce9364648255454842f06f8c46fcd124d3e6d7c5066df44662de63cdc0bad032e9bf5a3d653ff72141cc7b6019873d685708ac8210c30458ad99f2b74 + languageName: node + linkType: hard + "proxy-agent@npm:6.5.0": version: 6.5.0 resolution: "proxy-agent@npm:6.5.0" @@ -10321,7 +11698,16 @@ __metadata: languageName: node linkType: hard -"range-parser@npm:~1.2.1": +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: ^5.1.0 + checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 + languageName: node + linkType: hard + +"range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": version: 1.2.1 resolution: "range-parser@npm:1.2.1" checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9 @@ -10360,7 +11746,7 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^19.1.1": +"react-dom@npm:19.1.1": version: 19.1.1 resolution: "react-dom@npm:19.1.1" dependencies: @@ -10520,6 +11906,13 @@ __metadata: languageName: node linkType: hard +"react@npm:19.1.1": + version: 19.1.1 + resolution: "react@npm:19.1.1" + checksum: f2f18fea5deac87b1167365bd5160bcba64d383c26a37afa905b714ca424f423ef97d8daf53f041ab9ac25a06357fafcf0b5d3b6b84c9d1eace0e621bfeae629 + languageName: node + linkType: hard + "read-package-up@npm:^11.0.0": version: 11.0.0 resolution: "read-package-up@npm:11.0.0" @@ -10544,7 +11937,22 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.0.2, readable-stream@npm:^3.4.0": +"readable-stream@npm:^2.0.1": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + dependencies: + core-util-is: ~1.0.0 + inherits: ~2.0.3 + isarray: ~1.0.0 + process-nextick-args: ~2.0.0 + safe-buffer: ~5.1.1 + string_decoder: ~1.1.1 + util-deprecate: ~1.0.1 + checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 + languageName: node + linkType: hard + +"readable-stream@npm:^3.0.2, readable-stream@npm:^3.0.6, readable-stream@npm:^3.4.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -10562,6 +11970,24 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: ^2.2.1 + checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320 + languageName: node + linkType: hard + +"rechoir@npm:^0.8.0": + version: 0.8.0 + resolution: "rechoir@npm:0.8.0" + dependencies: + resolve: ^1.20.0 + checksum: ad3caed8afdefbc33fbc30e6d22b86c35b3d51c2005546f4e79bcc03c074df804b3640ad18945e6bef9ed12caedc035655ec1082f64a5e94c849ff939dc0a788 + languageName: node + linkType: hard + "reflect.getprototypeof@npm:^1.0.6, reflect.getprototypeof@npm:^1.0.9": version: 1.0.10 resolution: "reflect.getprototypeof@npm:1.0.10" @@ -10647,6 +12073,13 @@ __metadata: languageName: node linkType: hard +"relateurl@npm:^0.2.7": + version: 0.2.7 + resolution: "relateurl@npm:0.2.7" + checksum: 5891e792eae1dfc3da91c6fda76d6c3de0333a60aa5ad848982ebb6dccaa06e86385fb1235a1582c680a3d445d31be01c6bfc0804ebbcab5aaf53fa856fde6b6 + languageName: node + linkType: hard + "release-it@npm:^19.0.4": version: 19.0.4 resolution: "release-it@npm:19.0.4" @@ -10680,6 +12113,19 @@ __metadata: languageName: node linkType: hard +"renderkid@npm:^3.0.0": + version: 3.0.0 + resolution: "renderkid@npm:3.0.0" + dependencies: + css-select: ^4.1.3 + dom-converter: ^0.2.0 + htmlparser2: ^6.1.0 + lodash: ^4.17.21 + strip-ansi: ^6.0.1 + checksum: 77162b62d6f33ab81f337c39efce0439ff0d1f6d441e29c35183151f83041c7850774fb904da163d6c844264d440d10557714e6daa0b19e4561a5cd4ef305d41 + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -10701,6 +12147,13 @@ __metadata: languageName: node linkType: hard +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff + languageName: node + linkType: hard + "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -10810,7 +12263,7 @@ __metadata: languageName: node linkType: hard -"retry@npm:0.13.1": +"retry@npm:0.13.1, retry@npm:^0.13.1": version: 0.13.1 resolution: "retry@npm:0.13.1" checksum: 47c4d5be674f7c13eee4cfe927345023972197dbbdfba5d3af7e461d13b44de1bfd663bfc80d2f601f8ef3fc8164c16dd99655a221921954a65d044a2fc1233b @@ -10887,13 +12340,20 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 languageName: node linkType: hard +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + "safe-push-apply@npm:^1.0.0": version: 1.0.0 resolution: "safe-push-apply@npm:1.0.0" @@ -10929,7 +12389,47 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.7.2, semver@npm:^7.1.3, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3": +"schema-utils@npm:^3.0.0": + version: 3.3.0 + resolution: "schema-utils@npm:3.3.0" + dependencies: + "@types/json-schema": ^7.0.8 + ajv: ^6.12.5 + ajv-keywords: ^3.5.2 + checksum: ea56971926fac2487f0757da939a871388891bc87c6a82220d125d587b388f1704788f3706e7f63a7b70e49fc2db974c41343528caea60444afd5ce0fe4b85c0 + languageName: node + linkType: hard + +"schema-utils@npm:^4.0.0, schema-utils@npm:^4.2.0, schema-utils@npm:^4.3.0, schema-utils@npm:^4.3.2": + version: 4.3.2 + resolution: "schema-utils@npm:4.3.2" + dependencies: + "@types/json-schema": ^7.0.9 + ajv: ^8.9.0 + ajv-formats: ^2.1.1 + ajv-keywords: ^5.1.0 + checksum: d798b341ffa1371f8471629e8861af3aa99e8e15b89da2c0db28c5a80a02ee8c6ffc7daefbe28a2b8c1bc8e3f3e02d028775145d7ab3d9d1a413a9651a835466 + languageName: node + linkType: hard + +"select-hose@npm:^2.0.0": + version: 2.0.0 + resolution: "select-hose@npm:2.0.0" + checksum: d7e5fcc695a4804209d232a1b18624a5134be334d4e1114b0721f7a5e72bd73da483dcf41528c1af4f4f4892ad7cfd6a1e55c8ffb83f9c9fe723b738db609dbb + languageName: node + linkType: hard + +"selfsigned@npm:^2.4.1": + version: 2.4.1 + resolution: "selfsigned@npm:2.4.1" + dependencies: + "@types/node-forge": ^1.3.0 + node-forge: ^1 + checksum: 38b91c56f1d7949c0b77f9bbe4545b19518475cae15e7d7f0043f87b1626710b011ce89879a88969651f650a19d213bb15b7d5b4c2877df9eeeff7ba8f8b9bfa + languageName: node + linkType: hard + +"semver@npm:7.7.2, semver@npm:^7.1.3, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0, semver@npm:^7.6.3": version: 7.7.2 resolution: "semver@npm:7.7.2" bin: @@ -10975,7 +12475,31 @@ __metadata: languageName: node linkType: hard -"serve-static@npm:^1.13.1, serve-static@npm:^1.16.2": +"serialize-javascript@npm:^6.0.2": + version: 6.0.2 + resolution: "serialize-javascript@npm:6.0.2" + dependencies: + randombytes: ^2.1.0 + checksum: c4839c6206c1d143c0f80763997a361310305751171dd95e4b57efee69b8f6edd8960a0b7fbfc45042aadff98b206d55428aee0dc276efe54f100899c7fa8ab7 + languageName: node + linkType: hard + +"serve-index@npm:^1.9.1": + version: 1.9.1 + resolution: "serve-index@npm:1.9.1" + dependencies: + accepts: ~1.3.4 + batch: 0.6.1 + debug: 2.6.9 + escape-html: ~1.0.3 + http-errors: ~1.6.2 + mime-types: ~2.1.17 + parseurl: ~1.3.2 + checksum: e2647ce13379485b98a53ba2ea3fbad4d44b57540d00663b02b976e426e6194d62ac465c0d862cb7057f65e0de8ab8a684aa095427a4b8612412eca0d300d22f + languageName: node + linkType: hard + +"serve-static@npm:1.16.2, serve-static@npm:^1.13.1, serve-static@npm:^1.16.2": version: 1.16.2 resolution: "serve-static@npm:1.16.2" dependencies: @@ -11038,6 +12562,13 @@ __metadata: languageName: node linkType: hard +"setprototypeof@npm:1.1.0": + version: 1.1.0 + resolution: "setprototypeof@npm:1.1.0" + checksum: 27cb44304d6c9e1a23bc6c706af4acaae1a7aa1054d4ec13c05f01a99fd4887109a83a8042b67ad90dbfcd100d43efc171ee036eb080667172079213242ca36e + languageName: node + linkType: hard + "setprototypeof@npm:1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" @@ -11045,6 +12576,15 @@ __metadata: languageName: node linkType: hard +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: ^6.0.2 + checksum: 39b3dd9630a774aba288a680e7d2901f5c0eae7b8387fc5c8ea559918b29b3da144b7bdb990d7ccd9e11be05508ac9e459ce51d01fd65e583282f6ffafcba2e7 + languageName: node + linkType: hard + "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" @@ -11169,6 +12709,17 @@ __metadata: languageName: node linkType: hard +"sockjs@npm:^0.3.24": + version: 0.3.24 + resolution: "sockjs@npm:0.3.24" + dependencies: + faye-websocket: ^0.11.3 + uuid: ^8.3.2 + websocket-driver: ^0.7.4 + checksum: 355309b48d2c4e9755349daa29cea1c0d9ee23e49b983841c6bf7a20276b00d3c02343f9f33f26d2ee8b261a5a02961b52a25c8da88b2538c5b68d3071b4934c + languageName: node + linkType: hard + "socks-proxy-agent@npm:^8.0.3, socks-proxy-agent@npm:^8.0.5": version: 8.0.5 resolution: "socks-proxy-agent@npm:8.0.5" @@ -11217,13 +12768,20 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": +"source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.0, source-map@npm:~0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 languageName: node linkType: hard +"source-map@npm:^0.7.4": + version: 0.7.6 + resolution: "source-map@npm:0.7.6" + checksum: 932f4a2390aa7100e91357d88cc272de984ad29139ac09eedfde8cc78d46da35f389065d0c5343c5d71d054a6ebd4939a8c0f2c98d5df64fe97bb8a730596c2d + languageName: node + linkType: hard + "spdx-correct@npm:^3.0.0": version: 3.2.0 resolution: "spdx-correct@npm:3.2.0" @@ -11258,6 +12816,33 @@ __metadata: languageName: node linkType: hard +"spdy-transport@npm:^3.0.0": + version: 3.0.0 + resolution: "spdy-transport@npm:3.0.0" + dependencies: + debug: ^4.1.0 + detect-node: ^2.0.4 + hpack.js: ^2.1.6 + obuf: ^1.1.2 + readable-stream: ^3.0.6 + wbuf: ^1.7.3 + checksum: 0fcaad3b836fb1ec0bdd39fa7008b9a7a84a553f12be6b736a2512613b323207ffc924b9551cef0378f7233c85916cff1118652e03a730bdb97c0e042243d56c + languageName: node + linkType: hard + +"spdy@npm:^4.0.2": + version: 4.0.2 + resolution: "spdy@npm:4.0.2" + dependencies: + debug: ^4.1.0 + handle-thing: ^2.0.0 + http-deceiver: ^1.2.7 + select-hose: ^2.0.0 + spdy-transport: ^3.0.0 + checksum: 2c739d0ff6f56ad36d2d754d0261d5ec358457bea7cbf77b1b05b0c6464f2ce65b85f196305f50b7bd9120723eb94bae9933466f28e67e5cd8cde4e27f1d75f8 + languageName: node + linkType: hard + "split2@npm:^4.0.0": version: 4.2.0 resolution: "split2@npm:4.2.0" @@ -11313,7 +12898,7 @@ __metadata: languageName: node linkType: hard -"statuses@npm:~1.5.0": +"statuses@npm:>= 1.4.0 < 2, statuses@npm:~1.5.0": version: 1.5.0 resolution: "statuses@npm:1.5.0" checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c @@ -11465,6 +13050,15 @@ __metadata: languageName: node linkType: hard +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: ~5.1.0 + checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b + languageName: node + linkType: hard + "strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" @@ -11568,6 +13162,13 @@ __metadata: languageName: node linkType: hard +"tapable@npm:^2.0.0, tapable@npm:^2.1.1, tapable@npm:^2.2.0": + version: 2.2.3 + resolution: "tapable@npm:2.2.3" + checksum: 0bef252c4f12d3371353c4b16b38ea4fc7153598ab7f7770a4235277ed4d631925a27f42bf03caa754817e9ab017e3179fd2323a0a28409846d225e23f3bf722 + languageName: node + linkType: hard + "tar@npm:^7.4.3": version: 7.4.3 resolution: "tar@npm:7.4.3" @@ -11582,7 +13183,29 @@ __metadata: languageName: node linkType: hard -"terser@npm:^5.15.0": +"terser-webpack-plugin@npm:^5.3.11": + version: 5.3.14 + resolution: "terser-webpack-plugin@npm:5.3.14" + dependencies: + "@jridgewell/trace-mapping": ^0.3.25 + jest-worker: ^27.4.5 + schema-utils: ^4.3.0 + serialize-javascript: ^6.0.2 + terser: ^5.31.1 + peerDependencies: + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + checksum: 13a1e67f1675a473b18d25cb0ce65c3f0a19b5e9a93213a99ea61dc4ca996ea93aa17a221965b526f5788d242836a8249ad00538fbb322e25cb69076eb55feab + languageName: node + linkType: hard + +"terser@npm:^5.10.0, terser@npm:^5.15.0, terser@npm:^5.31.1": version: 5.44.0 resolution: "terser@npm:5.44.0" dependencies: @@ -11614,6 +13237,15 @@ __metadata: languageName: node linkType: hard +"thingies@npm:^2.5.0": + version: 2.5.0 + resolution: "thingies@npm:2.5.0" + peerDependencies: + tslib: ^2 + checksum: e73e4bc96aefc41e4f1fdd1cf65eb988c9837f3b5fcd8a472ee30d91c2f7fa9b144562d6b4c5dade6ce70bc5865caf3e869f6d2975cce064b1d81dac3ece3508 + languageName: node + linkType: hard + "throat@npm:^5.0.0": version: 5.0.0 resolution: "throat@npm:5.0.0" @@ -11628,6 +13260,13 @@ __metadata: languageName: node linkType: hard +"thunky@npm:^1.0.2": + version: 1.1.0 + resolution: "thunky@npm:1.1.0" + checksum: 993096c472b6b8f30e29dc777a8d17720e4cab448375041f20c0cb802a09a7fb2217f2a3e8cdc11851faa71c957e2db309357367fc9d7af3cb7a4d00f4b66034 + languageName: node + linkType: hard + "tinyexec@npm:^1.0.0, tinyexec@npm:^1.0.1": version: 1.0.1 resolution: "tinyexec@npm:1.0.1" @@ -11685,6 +13324,15 @@ __metadata: languageName: node linkType: hard +"tree-dump@npm:^1.0.3": + version: 1.1.0 + resolution: "tree-dump@npm:1.1.0" + peerDependencies: + tslib: 2 + checksum: 5f6fcd1b81b0fa7c638ff43cfbd1b62738c318ac14b0c8e439b1bcca353afe90785c075e9262ee18e50a863eae2eaa919ecfc8f22a4d347a0ea4b02ba088c8c0 + languageName: node + linkType: hard + "ts-api-utils@npm:^1.3.0": version: 1.4.3 resolution: "ts-api-utils@npm:1.4.3" @@ -11694,6 +13342,22 @@ __metadata: languageName: node linkType: hard +"ts-loader@npm:^9.5.4": + version: 9.5.4 + resolution: "ts-loader@npm:9.5.4" + dependencies: + chalk: ^4.1.0 + enhanced-resolve: ^5.0.0 + micromatch: ^4.0.0 + semver: ^7.3.4 + source-map: ^0.7.4 + peerDependencies: + typescript: "*" + webpack: ^5.0.0 + checksum: ee8a6883d0f8c0db0ea254fe4e9247ab0f6747cbbbee987af80e69822b840bdc2b67cee267ed3a93af803aeed47790d64dbaf07c001322b9091671f51cbf12b2 + languageName: node + linkType: hard + "tslib@npm:^1.8.1": version: 1.14.1 resolution: "tslib@npm:1.14.1" @@ -11701,7 +13365,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.1, tslib@npm:^2.1.0": +"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0": version: 2.8.1 resolution: "tslib@npm:2.8.1" checksum: e4aba30e632b8c8902b47587fd13345e2827fa639e7c3121074d5ee0880723282411a8838f830b55100cbe4517672f84a2472667d355b81e8af165a55dc6203a @@ -12096,13 +13760,37 @@ __metadata: languageName: node linkType: hard -"util-deprecate@npm:^1.0.1": +"url-loader@npm:^4.1.1": + version: 4.1.1 + resolution: "url-loader@npm:4.1.1" + dependencies: + loader-utils: ^2.0.0 + mime-types: ^2.1.27 + schema-utils: ^3.0.0 + peerDependencies: + file-loader: "*" + webpack: ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + file-loader: + optional: true + checksum: c1122a992c6cff70a7e56dfc2b7474534d48eb40b2cc75467cde0c6972e7597faf8e43acb4f45f93c2473645dfd803bcbc20960b57544dd1e4c96e77f72ba6fd + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 languageName: node linkType: hard +"utila@npm:~0.4": + version: 0.4.0 + resolution: "utila@npm:0.4.0" + checksum: 97ffd3bd2bb80c773429d3fb8396469115cd190dded1e733f190d8b602bd0a1bcd6216b7ce3c4395ee3c79e3c879c19d268dbaae3093564cb169ad1212d436f4 + languageName: node + linkType: hard + "utils-merge@npm:1.0.1": version: 1.0.1 resolution: "utils-merge@npm:1.0.1" @@ -12110,6 +13798,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df + languageName: node + linkType: hard + "v8-to-istanbul@npm:^9.0.1": version: 9.3.0 resolution: "v8-to-istanbul@npm:9.3.0" @@ -12154,6 +13851,25 @@ __metadata: languageName: node linkType: hard +"watchpack@npm:^2.4.1": + version: 2.4.4 + resolution: "watchpack@npm:2.4.4" + dependencies: + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.1.2 + checksum: 469514a04bcdd7ea77d4b3c62d1f087eafbce64cbc728c89355d5710ee01311533456122da7c585d3654d5bfcf09e6085db1a6eb274c4762a18e370526d17561 + languageName: node + linkType: hard + +"wbuf@npm:^1.1.0, wbuf@npm:^1.7.3": + version: 1.7.3 + resolution: "wbuf@npm:1.7.3" + dependencies: + minimalistic-assert: ^1.0.0 + checksum: 2abc306c96930b757972a1c4650eb6b25b5d99f24088714957f88629e137db569368c5de0e57986c89ea70db2f1df9bba11a87cb6d0c8694b6f53a0159fab3bf + languageName: node + linkType: hard + "wcwidth@npm:^1.0.1": version: 1.0.1 resolution: "wcwidth@npm:1.0.1" @@ -12170,6 +13886,174 @@ __metadata: languageName: node linkType: hard +"webpack-cli@npm:^6.0.1": + version: 6.0.1 + resolution: "webpack-cli@npm:6.0.1" + dependencies: + "@discoveryjs/json-ext": ^0.6.1 + "@webpack-cli/configtest": ^3.0.1 + "@webpack-cli/info": ^3.0.1 + "@webpack-cli/serve": ^3.0.1 + colorette: ^2.0.14 + commander: ^12.1.0 + cross-spawn: ^7.0.3 + envinfo: ^7.14.0 + fastest-levenshtein: ^1.0.12 + import-local: ^3.0.2 + interpret: ^3.1.1 + rechoir: ^0.8.0 + webpack-merge: ^6.0.1 + peerDependencies: + webpack: ^5.82.0 + peerDependenciesMeta: + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + bin: + webpack-cli: ./bin/cli.js + checksum: 1418d0e48c58b4a223472d1a34aee74b497cd8b8fc7f0508da86983e6bbc0b2f20e85459d89fb7169309a6f0409e3a27c1b688e645fa705806195884855434fc + languageName: node + linkType: hard + +"webpack-dev-middleware@npm:^7.4.2": + version: 7.4.3 + resolution: "webpack-dev-middleware@npm:7.4.3" + dependencies: + colorette: ^2.0.10 + memfs: ^4.6.0 + mime-types: ^3.0.1 + on-finished: ^2.4.1 + range-parser: ^1.2.1 + schema-utils: ^4.0.0 + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true + checksum: 3f4a0cbf32483804c92b5d19cc8ac9a00a8411008d33122e85b9d4c4ae87fcfb46c1a18911389c96bdddd340529a823e5e83a276cd4f0edad27416f8212971dc + languageName: node + linkType: hard + +"webpack-dev-server@npm:^5.2.2": + version: 5.2.2 + resolution: "webpack-dev-server@npm:5.2.2" + dependencies: + "@types/bonjour": ^3.5.13 + "@types/connect-history-api-fallback": ^1.5.4 + "@types/express": ^4.17.21 + "@types/express-serve-static-core": ^4.17.21 + "@types/serve-index": ^1.9.4 + "@types/serve-static": ^1.15.5 + "@types/sockjs": ^0.3.36 + "@types/ws": ^8.5.10 + ansi-html-community: ^0.0.8 + bonjour-service: ^1.2.1 + chokidar: ^3.6.0 + colorette: ^2.0.10 + compression: ^1.7.4 + connect-history-api-fallback: ^2.0.0 + express: ^4.21.2 + graceful-fs: ^4.2.6 + http-proxy-middleware: ^2.0.9 + ipaddr.js: ^2.1.0 + launch-editor: ^2.6.1 + open: ^10.0.3 + p-retry: ^6.2.0 + schema-utils: ^4.2.0 + selfsigned: ^2.4.1 + serve-index: ^1.9.1 + sockjs: ^0.3.24 + spdy: ^4.0.2 + webpack-dev-middleware: ^7.4.2 + ws: ^8.18.0 + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true + bin: + webpack-dev-server: bin/webpack-dev-server.js + checksum: 96994d684563cfee76dcb031c7c18a1fa10aee2df0520a0f327c8d72d4692c0dcdd7e455adeed4f8da9695f2e9f8f5481053c7e6e27d7e35085e45357fc9f697 + languageName: node + linkType: hard + +"webpack-merge@npm:^6.0.1": + version: 6.0.1 + resolution: "webpack-merge@npm:6.0.1" + dependencies: + clone-deep: ^4.0.1 + flat: ^5.0.2 + wildcard: ^2.0.1 + checksum: e8a604c686b944605a1c57cc7b75e886ab902dc5ffdd15259a092c5c2dd5f58868fe39f995ea4bad4f189e38843b061c4ae1eb22822d7169813f4adab571dc3d + languageName: node + linkType: hard + +"webpack-sources@npm:^3.3.3": + version: 3.3.3 + resolution: "webpack-sources@npm:3.3.3" + checksum: 243d438ec4dfe805cca20fa66d111114b1f277b8ecfa95bb6ee0a6c7d996aee682539952028c2b203a6c170e6ef56f71ecf3e366e90bf1cb58b0ae982176b651 + languageName: node + linkType: hard + +"webpack@npm:^5.101.3": + version: 5.101.3 + resolution: "webpack@npm:5.101.3" + dependencies: + "@types/eslint-scope": ^3.7.7 + "@types/estree": ^1.0.8 + "@types/json-schema": ^7.0.15 + "@webassemblyjs/ast": ^1.14.1 + "@webassemblyjs/wasm-edit": ^1.14.1 + "@webassemblyjs/wasm-parser": ^1.14.1 + acorn: ^8.15.0 + acorn-import-phases: ^1.0.3 + browserslist: ^4.24.0 + chrome-trace-event: ^1.0.2 + enhanced-resolve: ^5.17.3 + es-module-lexer: ^1.2.1 + eslint-scope: 5.1.1 + events: ^3.2.0 + glob-to-regexp: ^0.4.1 + graceful-fs: ^4.2.11 + json-parse-even-better-errors: ^2.3.1 + loader-runner: ^4.2.0 + mime-types: ^2.1.27 + neo-async: ^2.6.2 + schema-utils: ^4.3.2 + tapable: ^2.1.1 + terser-webpack-plugin: ^5.3.11 + watchpack: ^2.4.1 + webpack-sources: ^3.3.3 + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: d23fd86b6bc9854f9b488830d9aa123a7f654ee22849bc8670d0a22add88951f6d9cab1d04087758b642fc31115e3b97e0ac56b80b2200c04c486067aa945663 + languageName: node + linkType: hard + +"websocket-driver@npm:>=0.5.1, websocket-driver@npm:^0.7.4": + version: 0.7.4 + resolution: "websocket-driver@npm:0.7.4" + dependencies: + http-parser-js: ">=0.5.1" + safe-buffer: ">=5.1.0" + websocket-extensions: ">=0.1.1" + checksum: fffe5a33fe8eceafd21d2a065661d09e38b93877eae1de6ab5d7d2734c6ed243973beae10ae48c6613cfd675f200e5a058d1e3531bc9e6c5d4f1396ff1f0bfb9 + languageName: node + linkType: hard + +"websocket-extensions@npm:>=0.1.1": + version: 0.1.4 + resolution: "websocket-extensions@npm:0.1.4" + checksum: 5976835e68a86afcd64c7a9762ed85f2f27d48c488c707e67ba85e717b90fa066b98ab33c744d64255c9622d349eedecf728e65a5f921da71b58d0e9591b9038 + languageName: node + linkType: hard + "whatwg-fetch@npm:^3.0.0": version: 3.6.20 resolution: "whatwg-fetch@npm:3.6.20" @@ -12284,6 +14168,13 @@ __metadata: languageName: node linkType: hard +"wildcard@npm:^2.0.1": + version: 2.0.1 + resolution: "wildcard@npm:2.0.1" + checksum: e0c60a12a219e4b12065d1199802d81c27b841ed6ad6d9d28240980c73ceec6f856771d575af367cbec2982d9ae7838759168b551776577f155044f5a5ba843c + languageName: node + linkType: hard + "windows-release@npm:^6.1.0": version: 6.1.0 resolution: "windows-release@npm:6.1.0" @@ -12381,6 +14272,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^8.18.0": + version: 8.18.3 + resolution: "ws@npm:8.18.3" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: d64ef1631227bd0c5fe21b3eb3646c9c91229402fb963d12d87b49af0a1ef757277083af23a5f85742bae1e520feddfb434cb882ea59249b15673c16dc3f36e0 + languageName: node + linkType: hard + "wsl-utils@npm:^0.1.0": version: 0.1.0 resolution: "wsl-utils@npm:0.1.0" From fb8f71631e94343131a7274347bb6756416ec956 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 9 Sep 2025 23:02:03 +0200 Subject: [PATCH 09/19] feat: add css-loader and style-loader to webpack configuration for improved styling support --- example/package.json | 2 + example/webpack.config.js | 6 ++ yarn.lock | 138 +++++++++++++++++++++++++++++++++++++- 3 files changed, 144 insertions(+), 2 deletions(-) diff --git a/example/package.json b/example/package.json index 505cb33..cdb3b57 100644 --- a/example/package.json +++ b/example/package.json @@ -14,12 +14,14 @@ "@react-native/new-app-screen": "0.81.1", "babel-loader": "^10.0.0", "babel-plugin-react-native-web": "^0.21.1", + "css-loader": "^7.1.2", "html-webpack-plugin": "^5.6.4", "react": "19.1.1", "react-dom": "19.1.1", "react-native": "0.81.1", "react-native-safe-area-context": "^5.5.2", "react-native-web": "^0.21.1", + "style-loader": "^4.0.0", "ts-loader": "^9.5.4", "url-loader": "^4.1.1", "webpack": "^5.101.3", diff --git a/example/webpack.config.js b/example/webpack.config.js index a67eae3..2b3f2ba 100644 --- a/example/webpack.config.js +++ b/example/webpack.config.js @@ -61,6 +61,11 @@ const tsLoaderConfiguration = { }, }; +const cssLoaderConfiguration = { + test: /\.css$/, + use: ['style-loader', 'css-loader'], +}; + module.exports = { entry: { app: path.join(__dirname, 'index.web.js'), @@ -83,6 +88,7 @@ module.exports = { imageLoaderConfiguration, svgLoaderConfiguration, tsLoaderConfiguration, + cssLoaderConfiguration, ], }, plugins: [ diff --git a/yarn.lock b/yarn.lock index fea5423..ff15e6a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1540,6 +1540,7 @@ __metadata: "@types/react": ^19.1.0 babel-loader: ^10.0.0 babel-plugin-react-native-web: ^0.21.1 + css-loader: ^7.1.2 html-webpack-plugin: ^5.6.4 react: 19.1.1 react-dom: 19.1.1 @@ -1548,6 +1549,7 @@ __metadata: react-native-monorepo-config: ^0.1.9 react-native-safe-area-context: ^5.5.2 react-native-web: ^0.21.1 + style-loader: ^4.0.0 ts-loader: ^9.5.4 url-loader: ^4.1.1 webpack: ^5.101.3 @@ -5997,6 +5999,30 @@ __metadata: languageName: node linkType: hard +"css-loader@npm:^7.1.2": + version: 7.1.2 + resolution: "css-loader@npm:7.1.2" + dependencies: + icss-utils: ^5.1.0 + postcss: ^8.4.33 + postcss-modules-extract-imports: ^3.1.0 + postcss-modules-local-by-default: ^4.0.5 + postcss-modules-scope: ^3.2.0 + postcss-modules-values: ^4.0.0 + postcss-value-parser: ^4.2.0 + semver: ^7.5.4 + peerDependencies: + "@rspack/core": 0.x || 1.x + webpack: ^5.27.0 + peerDependenciesMeta: + "@rspack/core": + optional: true + webpack: + optional: true + checksum: 15bfd90d778ddab90ee1d04c8c8bcc13ea6c0791d01b52b09d1b1c753b3410f7a7788a510d93726a9878e70b7c1a140f21efdf5c96e1857872107551d3897822 + languageName: node + linkType: hard + "css-select@npm:^4.1.3": version: 4.3.0 resolution: "css-select@npm:4.3.0" @@ -6017,6 +6043,15 @@ __metadata: languageName: node linkType: hard +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: f8c4ababffbc5e2ddf2fa9957dda1ee4af6048e22aeda1869d0d00843223c1b13ad3f5d88b51caa46c994225eacb636b764eb807a8883e2fb6f99b4f4e8c48b2 + languageName: node + linkType: hard + "csstype@npm:^3.0.2": version: 3.1.3 resolution: "csstype@npm:3.1.3" @@ -8284,6 +8319,15 @@ __metadata: languageName: node linkType: hard +"icss-utils@npm:^5.0.0, icss-utils@npm:^5.1.0": + version: 5.1.0 + resolution: "icss-utils@npm:5.1.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 5c324d283552b1269cfc13a503aaaa172a280f914e5b81544f3803bc6f06a3b585fb79f66f7c771a2c052db7982c18bf92d001e3b47282e3abbbb4c4cc488d68 + languageName: node + linkType: hard + "ieee754@npm:^1.1.13": version: 1.2.1 resolution: "ieee754@npm:1.2.1" @@ -10672,6 +10716,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^3.3.11": + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" + bin: + nanoid: bin/nanoid.cjs + checksum: 3be20d8866a57a6b6d218e82549711c8352ed969f9ab3c45379da28f405363ad4c9aeb0b39e9abc101a529ca65a72ff9502b00bf74a912c4b64a9d62dfd26c29 + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -11493,13 +11546,78 @@ __metadata: languageName: node linkType: hard -"postcss-value-parser@npm:^4.2.0": +"postcss-modules-extract-imports@npm:^3.1.0": + version: 3.1.0 + resolution: "postcss-modules-extract-imports@npm:3.1.0" + peerDependencies: + postcss: ^8.1.0 + checksum: b9192e0f4fb3d19431558be6f8af7ca45fc92baaad9b2778d1732a5880cd25c3df2074ce5484ae491e224f0d21345ffc2d419bd51c25b019af76d7a7af88c17f + languageName: node + linkType: hard + +"postcss-modules-local-by-default@npm:^4.0.5": + version: 4.2.0 + resolution: "postcss-modules-local-by-default@npm:4.2.0" + dependencies: + icss-utils: ^5.0.0 + postcss-selector-parser: ^7.0.0 + postcss-value-parser: ^4.1.0 + peerDependencies: + postcss: ^8.1.0 + checksum: 720d145453f82ad5f1c1d0ff7386d64722f0812808e4132e573c1a49909745e109fcce3792a0b0cb18770dbeb3d9741867e81c698dc8353a18bc664b7d6d9533 + languageName: node + linkType: hard + +"postcss-modules-scope@npm:^3.2.0": + version: 3.2.1 + resolution: "postcss-modules-scope@npm:3.2.1" + dependencies: + postcss-selector-parser: ^7.0.0 + peerDependencies: + postcss: ^8.1.0 + checksum: 085f65863bb7d8bf08209a979ceb22b2b07bb466574e0e698d34aaad832d614957bb05f2418348a14e4035f65e23b2be2951369d26ea429dd5762c6a020f0f7c + languageName: node + linkType: hard + +"postcss-modules-values@npm:^4.0.0": + version: 4.0.0 + resolution: "postcss-modules-values@npm:4.0.0" + dependencies: + icss-utils: ^5.0.0 + peerDependencies: + postcss: ^8.1.0 + checksum: f7f2cdf14a575b60e919ad5ea52fed48da46fe80db2733318d71d523fc87db66c835814940d7d05b5746b0426e44661c707f09bdb83592c16aea06e859409db6 + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^7.0.0": + version: 7.1.0 + resolution: "postcss-selector-parser@npm:7.1.0" + dependencies: + cssesc: ^3.0.0 + util-deprecate: ^1.0.2 + checksum: 1300e7871dd60a5132ee5462cc6e94edd4f3df28462b2495ca9ff025bd83768a908e892a18fde62cae63ff63524641baa6d58c64120f04fe6884b916663ce737 + languageName: node + linkType: hard + +"postcss-value-parser@npm:^4.1.0, postcss-value-parser@npm:^4.2.0": version: 4.2.0 resolution: "postcss-value-parser@npm:4.2.0" checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f languageName: node linkType: hard +"postcss@npm:^8.4.33": + version: 8.5.6 + resolution: "postcss@npm:8.5.6" + dependencies: + nanoid: ^3.3.11 + picocolors: ^1.1.1 + source-map-js: ^1.2.1 + checksum: 20f3b5d673ffeec2b28d65436756d31ee33f65b0a8bedb3d32f556fbd5973be38c3a7fb5b959a5236c60a5db7b91b0a6b14ffaac0d717dce1b903b964ee1c1bb + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -12741,6 +12859,13 @@ __metadata: languageName: node linkType: hard +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 4eb0cd997cdf228bc253bcaff9340afeb706176e64868ecd20efbe6efea931465f43955612346d6b7318789e5265bdc419bc7669c1cebe3db0eb255f57efa76b + languageName: node + linkType: hard + "source-map-support@npm:0.5.13": version: 0.5.13 resolution: "source-map-support@npm:0.5.13" @@ -13121,6 +13246,15 @@ __metadata: languageName: node linkType: hard +"style-loader@npm:^4.0.0": + version: 4.0.0 + resolution: "style-loader@npm:4.0.0" + peerDependencies: + webpack: ^5.27.0 + checksum: 0b751b4cc8394a2fe1df6194bb2f6dd68e859e36f22030994bb7b5220f24f9efb5705e78b2442226e6fa4c90f74b397529c7eb0a1d7326fb016e1e140e90151c + languageName: node + linkType: hard + "styleq@npm:^0.1.3": version: 0.1.3 resolution: "styleq@npm:0.1.3" @@ -13777,7 +13911,7 @@ __metadata: languageName: node linkType: hard -"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 From cc98809e912eb5777fa8f499237da639c31d30a5 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 9 Sep 2025 23:37:36 +0200 Subject: [PATCH 10/19] feat: enhance web alert implementation with improved styling and structure --- src/Alert/index.web.ts | 21 +- src/Alert/utils/default-styles.css | 334 ++++++++++++++++++++--------- src/Alert/utils/web.ts | 183 ++++++++++------ 3 files changed, 375 insertions(+), 163 deletions(-) diff --git a/src/Alert/index.web.ts b/src/Alert/index.web.ts index 7676025..ea849e1 100644 --- a/src/Alert/index.web.ts +++ b/src/Alert/index.web.ts @@ -2,19 +2,26 @@ import { Alert as RNAlert } from 'react-native'; import { createDialogElement } from './utils/web'; // Import CSS for web platform -// require('./web/alert.css'); +require('./utils/default-styles.css'); /** * Web-specific Alert implementation using HTML5 dialog elements + * Provides native-like alert and prompt dialogs for web browsers */ class Alert { /** * Launches an alert dialog with the specified title and message. + * + * @param title - The dialog's title + * @param message - An optional message that appears below the title + * @param buttons - An optional array of buttons or a function that will be called */ static alert(...[title, message, buttons]: Parameters) { const dialog = createDialogElement(title, message, buttons); document.body.appendChild(dialog); dialog.showModal(); + + // Clean up dialog when closed dialog.addEventListener('close', () => { document.body.removeChild(dialog); }); @@ -49,12 +56,22 @@ class Alert { typeof RNAlert.prompt > ) { + const inputType = type === 'secure-text' ? 'password' : 'text'; const inputField = ` - + `; + const dialog = createDialogElement(title, message, buttons, inputField); document.body.appendChild(dialog); dialog.showModal(); + + // Clean up dialog when closed dialog.addEventListener('close', () => { document.body.removeChild(dialog); }); diff --git a/src/Alert/utils/default-styles.css b/src/Alert/utils/default-styles.css index 1df46fa..fe4bd90 100644 --- a/src/Alert/utils/default-styles.css +++ b/src/Alert/utils/default-styles.css @@ -1,154 +1,296 @@ -/* React Native Alert - Web Styles */ -/* These styles can be customized by the end user */ -.alert-dialog { +/* ---- Design Tokens ------------------------------------------------------ */ +:root { + /* Light defaults */ + --rn-alert-bg: #ffffff; + --rn-alert-fg: #1f2937; /* slate-800 */ + --rn-alert-muted: #6b7280; /* gray-500 */ + --rn-alert-surface: #f8fafc; /* slate-50 */ + --rn-alert-border: #e5e7eb; /* gray-200 */ + --rn-alert-elev: 0 10px 30px rgba(0,0,0,.10), 0 2px 8px rgba(0,0,0,.06); + + /* Primary colors - easily customizable */ + --rn-alert-accent: #2563eb; /* blue-600 */ + --rn-alert-accent-hover: #1d4ed8; /* blue-700 */ + --rn-alert-accent-light: #dbeafe; /* blue-100 */ + + /* Danger colors */ + --rn-alert-danger: #dc2626; /* red-600 */ + --rn-alert-danger-hover: #b91c1c; /* red-700 */ + --rn-alert-danger-light: #fecaca; /* red-200 */ + + /* Layout tokens */ + --rn-alert-radius: 12px; + --rn-alert-radius-sm: 8px; + --rn-alert-spacing: 20px; + --rn-alert-spacing-sm: 12px; + --rn-alert-btn-min: 40px; /* touch target height */ + + /* Computed colors (auto-generated from accent) */ + --rn-alert-outline: 3px solid color-mix(in srgb, var(--rn-alert-accent) 40%, transparent); + --rn-alert-outline-weak: 2px solid color-mix(in srgb, var(--rn-alert-accent) 25%, transparent); + + /* Typography */ + --rn-alert-font: system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, "Apple Color Emoji", "Segoe UI Emoji"; + --rn-alert-font-size: 14px; + --rn-alert-title-size: 18px; +} + +:root[data-theme="dark"], +.rn-alert-theme--dark { + --rn-alert-bg: #0b1220; /* deep surface */ + --rn-alert-fg: #e5e7eb; /* gray-200 */ + --rn-alert-muted: #a1a1aa; /* zinc-400 */ + --rn-alert-surface: #0f172a; /* slate-900 */ + --rn-alert-border: #334155; /* slate-700 */ + --rn-alert-elev: 0 10px 30px rgba(0,0,0,.50), 0 2px 8px rgba(0,0,0,.35); + + --rn-alert-accent: #60a5fa; /* blue-400 */ + --rn-alert-accent-hover: #3b82f6; /* blue-500 */ + --rn-alert-accent-light: #1e3a8a; /* blue-900 */ + + --rn-alert-danger: #f87171; /* red-400 */ + --rn-alert-danger-hover: #ef4444; /* red-500 */ + --rn-alert-danger-light: #7f1d1d; /* red-900 */ + + --rn-alert-outline: 3px solid color-mix(in srgb, var(--rn-alert-accent) 50%, transparent); + --rn-alert-outline-weak: 2px solid color-mix(in srgb, var(--rn-alert-accent) 35%, transparent); +} + +/* System dark mode auto – keeps in sync unless user sets data-theme */ +@media (prefers-color-scheme: dark) { + :root:not([data-theme]) { + --rn-alert-bg: #0b1220; + --rn-alert-fg: #e5e7eb; + --rn-alert-muted: #a1a1aa; + --rn-alert-surface: #0f172a; + --rn-alert-border: #334155; + --rn-alert-elev: 0 10px 30px rgba(0,0,0,.50), 0 2px 8px rgba(0,0,0,.35); + + --rn-alert-accent: #60a5fa; + --rn-alert-accent-hover: #3b82f6; + --rn-alert-accent-light: #1e3a8a; + + --rn-alert-danger: #f87171; + --rn-alert-danger-hover: #ef4444; + --rn-alert-danger-light: #7f1d1d; + + --rn-alert-outline: 3px solid color-mix(in srgb, var(--rn-alert-accent) 50%, transparent); + --rn-alert-outline-weak: 2px solid color-mix(in srgb, var(--rn-alert-accent) 35%, transparent); + } +} + +/* ---- Dialog ------------------------------------------------------------- */ +.rn-alert__dialog { + color-scheme: light dark; + margin: auto; border: none; - border-radius: 8px; + border-radius: var(--rn-alert-radius); padding: 0; - max-width: 400px; - width: 90%; - box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); - background: white; + inline-size: min(400px, 92dvi); + max-block-size: 80dvb; + background: var(--rn-alert-bg); + color: var(--rn-alert-fg); + box-shadow: var(--rn-alert-elev); + font: 400 var(--rn-alert-font-size)/1.45 var(--rn-alert-font); + animation: rn-alert__fade-in 120ms ease-out; + overflow: hidden; } -.alert-dialog::backdrop { - background: rgba(0, 0, 0, 0.5); +/* Backdrop */ +.rn-alert__dialog::backdrop { + background: color-mix(in srgb, #000 60%, transparent); + -webkit-backdrop-filter: blur(2px); + backdrop-filter: blur(2px); + animation: rn-alert__backdrop-fade-in 120ms ease-out; } -.alert-container { +/* Container */ +.rn-alert__container { display: flex; flex-direction: column; - min-height: 120px; + min-block-size: 100px; } -.alert-text-container { - padding: 20px 20px 16px 20px; - flex: 1; +/* Content */ +.rn-alert__content { + padding: var(--rn-alert-spacing); + background: var(--rn-alert-bg); } -.alert-header { - font-size: 18px; +/* Title */ +.rn-alert__title { + font-size: var(--rn-alert-title-size); font-weight: 600; margin: 0 0 8px 0; - color: #1f2937; - line-height: 1.4; + line-height: 1.25; + color: inherit; } -.alert-body { - margin-top: 8px; +/* Body */ +.rn-alert__body { + margin: 0; } -.alert-message { +/* Message */ +.rn-alert__message { font-size: 14px; - color: #6b7280; + color: var(--rn-alert-muted); margin: 0 0 16px 0; - line-height: 1.5; + line-height: 1.6; } -.alert-input { - width: 100%; - padding: 8px 12px; - border: 1px solid #d1d5db; - border-radius: 4px; - font-size: 14px; +/* Input */ +.rn-alert__input-container { margin-block-start: 8px; } + +.rn-alert__input-field { + inline-size: 100%; + padding: 10px 12px; + border: 1px solid var(--rn-alert-border); + border-radius: var(--rn-alert-radius-sm); + font: inherit; box-sizing: border-box; + background: var(--rn-alert-surface); + color: var(--rn-alert-fg); outline: none; - transition: border-color 0.2s; + transition: border-color .15s ease, box-shadow .15s ease; } -.alert-input:focus { - border-color: #3b82f6; - box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); +.rn-alert__input-field::placeholder { color: color-mix(in srgb, var(--rn-alert-muted) 80%, transparent); } + +.rn-alert__input-field:focus-visible { + border-color: var(--rn-alert-accent); + box-shadow: 0 0 0 3px color-mix(in srgb, var(--rn-alert-accent) 20%, transparent); } -.alert-footer { +/* Actions */ +.rn-alert__actions { display: flex; justify-content: flex-end; gap: 8px; - padding: 16px 20px 20px 20px; - border-top: 1px solid #e5e7eb; + padding: 16px var(--rn-alert-spacing) var(--rn-alert-spacing) var(--rn-alert-spacing); + border-block-start: 1px solid var(--rn-alert-border); + background: color-mix(in srgb, var(--rn-alert-surface) 94%, transparent); } -.alert-btn-default, -.alert-btn-destructive { - padding: 8px 16px; - border-radius: 4px; - font-size: 14px; - font-weight: 500; +/* Buttons (base) */ +.rn-alert__button { + appearance: none; + padding: 10px 16px; + min-inline-size: 72px; + min-block-size: var(--rn-alert-btn-min); + border-radius: var(--rn-alert-radius-sm); + font: 500 14px/1 var(--rn-alert-font); cursor: pointer; - border: none; - transition: all 0.2s; - min-width: 64px; + border: 1px solid transparent; + transition: transform .06s ease, box-shadow .15s ease, background-color .15s ease, border-color .15s ease; + text-align: center; + white-space: nowrap; + background: var(--rn-alert-surface); + color: var(--rn-alert-fg); } -.alert-btn-default { - background: #f3f4f6; - color: #374151; -} +.rn-alert__button:active { transform: translateY(1px); } -.alert-btn-default:hover { - background: #e5e7eb; -} +/* Focus only for keyboard users */ +.rn-alert__button:focus { outline: none; } +.rn-alert__button:focus-visible { box-shadow: 0 0 0 3px color-mix(in srgb, var(--rn-alert-accent) 25%, transparent); } -.alert-btn-destructive { - background: #ef4444; - color: white; +/* Variants */ +.rn-alert__button--primary { + background: var(--rn-alert-accent); + color: #fff; + border-color: color-mix(in srgb, #000 10%, var(--rn-alert-accent)); + box-shadow: 0 1px 2px rgba(0,0,0,.1); } +.rn-alert__button--primary:hover { background: var(--rn-alert-accent-hover); } -.alert-btn-destructive:hover { - background: #dc2626; +.rn-alert__button--secondary { + background: var(--rn-alert-bg); + color: var(--rn-alert-fg); + border-color: var(--rn-alert-border); } - -/* Confirm dialog style (two buttons) */ -.alert-confirm .alert-footer { - justify-content: space-between; +.rn-alert__button--secondary:hover { + background: color-mix(in srgb, var(--rn-alert-surface) 85%, transparent); + border-color: color-mix(in srgb, var(--rn-alert-border) 70%, #000 10%); } -.alert-confirm .alert-btn-default:first-child { - background: #3b82f6; - color: white; +.rn-alert__button--destructive { + background: var(--rn-alert-danger); + color: #fff; + border-color: color-mix(in srgb, #000 10%, var(--rn-alert-danger)); } +.rn-alert__button--destructive:hover { background: var(--rn-alert-danger-hover); } -.alert-confirm .alert-btn-default:first-child:hover { - background: #2563eb; +/* Confirm layout (two buttons spread) */ +.rn-alert__dialog--confirm .rn-alert__actions { justify-content: space-between; } + +/* ---- Motion ------------------------------------------------------------- */ +@keyframes rn-alert__fade-in { + from { opacity: 0; transform: translateY(-6px) scale(.98); } + to { opacity: 1; transform: translateY(0) scale(1); } } +@keyframes rn-alert__backdrop-fade-in { from { opacity: 0; } to { opacity: 1; } } -/* Dark mode support */ -@media (prefers-color-scheme: dark) { - .alert-dialog { - background: #1f2937; - color: #f9fafb; - } +/* ---- Reduced Motion ----------------------------------------------------- */ +@media (prefers-reduced-motion: reduce) { + .rn-alert__dialog, + .rn-alert__dialog::backdrop { animation: none; } + .rn-alert__button, + .rn-alert__input-field { transition: none; } +} - .alert-header { - color: #f9fafb; +/* ---- High Contrast / Forced Colors (Windows) --------------------------- */ +@media (forced-colors: active) { + .rn-alert__dialog { + border: 1px solid CanvasText; + background: Canvas; + color: CanvasText; + box-shadow: none; } - - .alert-message { - color: #d1d5db; + .rn-alert__dialog::backdrop { background: rgba(0,0,0,.6); } + .rn-alert__input-field { + forced-color-adjust: none; + background: Canvas; + color: CanvasText; + border-color: ButtonText; } - - .alert-input { - background: #374151; - border-color: #4b5563; - color: #f9fafb; + .rn-alert__button { + forced-color-adjust: none; + border-color: ButtonText; + background: ButtonFace; + color: ButtonText; } + .rn-alert__button--primary { background: Highlight; color: HighlightText; border-color: Highlight; } + .rn-alert__button--destructive { background: Highlight; color: HighlightText; border-color: Highlight; } +} - .alert-input:focus { - border-color: #60a5fa; - box-shadow: 0 0 0 3px rgba(96, 165, 250, 0.1); - } +/* ---- Legacy Backdrop Fallback ------------------------------------------ */ +@supports not (backdrop-filter: blur(2px)) { + .rn-alert__dialog::backdrop { background: rgba(0,0,0,.6); } +} - .alert-footer { - border-top-color: #374151; +/* ---- Small screens ----------------------------------------------------- */ +@media (max-width: 480px) { + .rn-alert__dialog { + inline-size: 95%; + border-radius: var(--rn-alert-radius-sm); } - - .alert-btn-default { - background: #374151; - color: #f9fafb; + .rn-alert__content { padding: 16px; } + .rn-alert__actions { + padding: 12px 16px 16px 16px; + flex-direction: column; + gap: 8px; } + .rn-alert__button { min-inline-size: unset; inline-size: 100%; } +} - .alert-btn-default:hover { - background: #4b5563; - } +/* Very small screens */ +@media (max-width: 320px) { + .rn-alert__content { padding: var(--rn-alert-spacing-sm); } + .rn-alert__title { font-size: 16px; } + .rn-alert__message { font-size: 13px; } } + +/* ---- Print -------------------------------------------------------------- */ +@media print { .rn-alert__dialog { display: none !important; } } diff --git a/src/Alert/utils/web.ts b/src/Alert/utils/web.ts index e212d10..1cd15ce 100644 --- a/src/Alert/utils/web.ts +++ b/src/Alert/utils/web.ts @@ -1,9 +1,12 @@ import { Alert as RNAlert, type AlertButton } from 'react-native'; -// Track active dialogs to prevent multiple dialogs +// Track active dialogs to prevent multiple dialogs from appearing simultaneously let activeDialog: HTMLDialogElement | null = null; -// Web implementation +/** + * Creates a modern HTML5 dialog element for alerts and prompts + * Uses unique class names to avoid conflicts with user stylesheets + */ export function createDialogElement( title: string | null | undefined, message?: string | null | undefined, @@ -11,88 +14,126 @@ export function createDialogElement( { text: 'OK', style: 'default' }, ], inputField?: string -) { +): HTMLDialogElement { const dialog = document.createElement('dialog'); - dialog.className = 'alert-dialog'; + dialog.className = 'rn-alert__dialog'; + + // Build the dialog content with improved structure dialog.innerHTML = ` -
-
- ${title ? `

${title}

` : ''} - ${ - inputField || message - ? `
- ${message ? `

${message}

` : ''} - ${inputField ? inputField : ''} -
` - : '' - } -
- +
+
+ ${title ? `

${title}

` : ''} + ${ + inputField || message + ? `
+ ${message ? `

${message}

` : ''} + ${inputField ? `
${inputField}
` : ''} +
` + : '' + }
+
+
`; - const buttonsContainer = dialog.querySelector('#buttons'); + const buttonsContainer = dialog.querySelector('#rn-alert-buttons'); if (typeof buttons === 'function') { - // If buttons is a function, create default OK/Cancel buttons - const okButton = document.createElement('button'); - okButton.innerText = 'OK'; - okButton.className = 'alert-btn-default'; - okButton.addEventListener('click', () => { - const inputValue = inputField - ? (dialog.querySelector('input') as HTMLInputElement)?.value || '' - : ''; - dialog.close(); - buttons(inputValue); - }); - buttonsContainer?.appendChild(okButton); - - const cancelButton = document.createElement('button'); - cancelButton.innerText = 'Cancel'; - cancelButton.className = 'alert-btn-default'; - cancelButton.addEventListener('click', () => { - dialog.close(); - }); - buttonsContainer?.appendChild(cancelButton); - - dialog.classList.add('alert-confirm'); + // Handle function callback with default OK/Cancel buttons + createDefaultButtons(dialog, buttonsContainer, buttons, inputField); + dialog.classList.add('rn-alert__dialog--confirm'); } else { // Handle array of buttons - buttons?.forEach(({ text, style, onPress }) => { - const button = document.createElement('button'); - button.innerText = text || 'OK'; - button.className = - style === 'destructive' ? 'alert-btn-destructive' : 'alert-btn-default'; - button.addEventListener('click', () => { - dialog.close(); - if (onPress) { - onPress( - inputField - ? (dialog.querySelector('input') as HTMLInputElement)?.value - : undefined - ); - } - }); - buttonsContainer?.appendChild(button); - }); + createCustomButtons(dialog, buttonsContainer, buttons, inputField); - // If there are exactly two buttons, set confirm style + // Apply confirm styling for two-button dialogs if (buttons?.length === 2) { - dialog.classList.add('alert-confirm'); + dialog.classList.add('rn-alert__dialog--confirm'); } } return dialog; } +/** + * Creates default OK/Cancel buttons for function callbacks + */ +function createDefaultButtons( + dialog: HTMLDialogElement, + container: Element | null, + callback: (text: string) => void, + inputField?: string +): void { + // OK Button + const okButton = document.createElement('button'); + okButton.innerText = 'OK'; + okButton.className = 'rn-alert__button rn-alert__button--primary'; + okButton.addEventListener('click', () => { + const inputValue = inputField + ? (dialog.querySelector('input') as HTMLInputElement)?.value || '' + : ''; + dialog.close(); + callback(inputValue); + }); + container?.appendChild(okButton); + + // Cancel Button + const cancelButton = document.createElement('button'); + cancelButton.innerText = 'Cancel'; + cancelButton.className = 'rn-alert__button rn-alert__button--secondary'; + cancelButton.addEventListener('click', () => { + dialog.close(); + }); + container?.appendChild(cancelButton); +} + +/** + * Creates custom buttons from the buttons array + */ +function createCustomButtons( + dialog: HTMLDialogElement, + container: Element | null, + buttons: AlertButton[] | null, + inputField?: string +): void { + buttons?.forEach(({ text, style, onPress }, index) => { + const button = document.createElement('button'); + button.innerText = text || 'OK'; + + // Apply appropriate button styling + if (style === 'destructive') { + button.className = 'rn-alert__button rn-alert__button--destructive'; + } else if (index === 0 && buttons.length === 2) { + // First button in two-button dialog gets primary styling + button.className = 'rn-alert__button rn-alert__button--primary'; + } else { + button.className = 'rn-alert__button rn-alert__button--secondary'; + } + + button.addEventListener('click', () => { + dialog.close(); + if (onPress) { + const inputValue = inputField + ? (dialog.querySelector('input') as HTMLInputElement)?.value + : undefined; + onPress(inputValue); + } + }); + + container?.appendChild(button); + }); +} + +/** + * Shows a web alert dialog with improved error handling + */ export function showWebAlert( title: string, message?: string, buttons?: AlertButton[] -) { +): void { // Prevent multiple dialogs if (activeDialog) { - console.warn('Another alert dialog is already being displayed'); return; } @@ -100,32 +141,44 @@ export function showWebAlert( activeDialog = dialog; document.body.appendChild(dialog); dialog.showModal(); + dialog.addEventListener('close', () => { document.body.removeChild(dialog); activeDialog = null; }); } +/** + * Shows a web prompt dialog with improved error handling + */ export function showWebPrompt( title: string, message?: string, - buttons?: Parameters[2], + buttons?: AlertButton[], type?: 'default' | 'plain-text' | 'secure-text' | 'login-password', defaultValue?: string -) { +): void { // Prevent multiple dialogs if (activeDialog) { - console.warn('Another prompt dialog is already being displayed'); return; } + const inputType = type === 'secure-text' ? 'password' : 'text'; const inputField = ` - + `; + const dialog = createDialogElement(title, message, buttons, inputField); activeDialog = dialog; document.body.appendChild(dialog); dialog.showModal(); + dialog.addEventListener('close', () => { document.body.removeChild(dialog); activeDialog = null; From 1bfb868ab56cd8158523d3432ccae0b553fd05c4 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 9 Sep 2025 23:37:51 +0200 Subject: [PATCH 11/19] docs: update README --- README.md | 222 ++++++++++++++++++++---------------------------------- 1 file changed, 80 insertions(+), 142 deletions(-) diff --git a/README.md b/README.md index 51cb7b4..3aa46ea 100644 --- a/README.md +++ b/README.md @@ -1,214 +1,152 @@ # @blazejkustra/react-native-alert -Universal alerts and prompts for React Native that work across iOS, Android, and Web platforms with the same API as React Native's built-in Alert. +✨ **Universal, customizable alerts and prompts** for React Native — identical API to the built-in `Alert`, but works seamlessly across **iOS, Android, and Web**. -## Features +## 🚀 Features -- ✅ **Cross-platform**: Works on iOS, Android, and Web -- ✅ **Same API**: Compatible with React Native's Alert API -- ✅ **Prompt support**: Includes prompt functionality for all platforms -- ✅ **Customizable**: Web implementation allows CSS customization -- ✅ **Theme support**: Respects dark/light mode on Android -- ✅ **TypeScript**: Full TypeScript support +* **Cross-platform** – iOS, Android, Web with one API +* **Drop-in replacement** – same API as `Alert` +* **Prompts everywhere** – text input prompts supported on all platforms +* **Modern Web implementation** – built with `` + CSS custom properties +* **Dark/light themes** – automatic with manual override +* **Accessible** – full keyboard navigation + screen reader support +* **TypeScript ready** – complete type definitions -## Installation +## 📦 Installation ```sh npm install @blazejkustra/react-native-alert ``` -### iOS Setup +No extra setup needed on iOS or Android (just rebuild your app). +On Web, styles are injected automatically and can be customized with CSS variables. -For iOS, you need to run: - -```sh -cd ios && pod install -``` - -### Android Setup - -No additional setup required for Android. - -### Web Setup - -For web, the library automatically includes the necessary CSS. You can customize the appearance by overriding the CSS classes. - -To override the CSS, you can add a `alert.css` file to your project. - -## Usage +## 🛠 Usage ### Basic Alert -```js +```ts import Alert from '@blazejkustra/react-native-alert'; -Alert.alert('Alert Title', 'This is the alert message'); +Alert.alert('Hello!', 'This is a cross-platform alert.'); ``` ### Alert with Buttons -```js +```ts Alert.alert( - 'Alert Title', - 'This is the alert message', + 'Confirm', + 'Do you want to continue?', [ { text: 'Cancel', style: 'cancel' }, - { text: 'OK', style: 'default' } + { text: 'OK', style: 'default' }, ] ); ``` ### Destructive Alert -```js +```ts Alert.alert( - 'Delete Item', - 'Are you sure you want to delete this item?', + 'Delete item?', + 'This action cannot be undone.', [ { text: 'Cancel', style: 'cancel' }, - { text: 'Delete', style: 'destructive' } + { text: 'Delete', style: 'destructive' }, ] ); ``` ### Prompt -```js +```ts Alert.prompt( - 'Enter Name', - 'Please enter your name:', + 'Enter your name', + 'Please type your name below:', [ { text: 'Cancel', style: 'cancel' }, - { - text: 'OK', - style: 'default', - onPress: (value) => { - if (value) { - console.log('Name entered:', value); - } - } - } + { text: 'OK', onPress: (value) => console.log('Name:', value) }, ], 'plain-text', 'John Doe' ); ``` -### Secure Text Prompt +### Secure Prompt -```js +```ts Alert.prompt( - 'Enter Password', - 'Please enter your password:', + 'Password', + 'Enter your password:', [ { text: 'Cancel', style: 'cancel' }, - { - text: 'OK', - style: 'default', - onPress: (value) => { - if (value) { - console.log('Password entered'); - } - } - } + { text: 'OK', onPress: () => console.log('Password entered') }, ], 'secure-text' ); ``` -## API Reference - -### Alert.alert(title, message?, buttons?, options?) - -- `title` (string): The alert title -- `message` (string, optional): The alert message -- `buttons` (AlertButton[], optional): Array of button objects -- `options` (AlertOptions, optional): Additional options - -### Alert.prompt(title, message?, buttons?, type?, defaultValue?, keyboardType?) - -- `title` (string): The prompt title -- `message` (string, optional): The prompt message -- `buttons` (AlertButton[], optional): Array of button objects -- `type` (string, optional): Input type ('default', 'plain-text', 'secure-text', 'login-password') -- `defaultValue` (string, optional): Default input value -- `keyboardType` (string, optional): Keyboard type (Android only) - -### Types - -```typescript -interface AlertButton { - text: string; - onPress?: (value?: string) => void; - style?: 'default' | 'cancel' | 'destructive'; -} - -interface AlertOptions { - cancelable?: boolean; - onDismiss?: () => void; -} -``` +For more examples, see [example/src/App.tsx](example/src/App.tsx). -## Platform-Specific Behavior +## 📖 API -### iOS -- Uses native UIAlertController for alerts -- Custom implementation for prompts (since iOS doesn't have built-in prompt) +Same as [React Native Alert](https://reactnative.dev/docs/alert). -### Android -- Uses native AlertDialog with Material Design -- Automatically respects dark/light theme -- Supports all input types and keyboard types +## 📱 Platform Notes -### Web -- Uses HTML5 `` element -- Fully customizable with CSS -- Responsive design with dark mode support +* **iOS** – uses React Native's built-in `Alert.alert` and `Alert.prompt` +* **Android** – uses React Native's built-in `Alert.alert` and custom native module with Material styling for `Alert.prompt` +* **Web** – HTML5 ``, themeable via CSS variables -## Web Customization +## 🎨 Web Customization -The web implementation includes CSS classes that you can override: +Override CSS variables to match your design system: ```css -.alert-dialog { - /* Dialog container */ -} - -.alert-container { - /* Content container */ -} - -.alert-header { - /* Title styling */ -} - -.alert-message { - /* Message styling */ -} - -.alert-input { - /* Input field styling */ -} - -.alert-btn-default { - /* Default button styling */ +:root { + --rn-alert-accent: #059669; /* Primary button */ + --rn-alert-danger: #dc2626; /* Destructive button */ + --rn-alert-bg: #fefefe; /* Dialog background */ + --rn-alert-fg: #111827; /* Text color */ + --rn-alert-radius: 16px; /* Border radius */ } -.alert-btn-destructive { - /* Destructive button styling */ +:root[data-theme="dark"] { + ... } ``` -## Contributing - -- [Development workflow](CONTRIBUTING.md#development-workflow) -- [Sending a pull request](CONTRIBUTING.md#sending-a-pull-request) -- [Code of conduct](CODE_OF_CONDUCT.md) - -## License - -MIT +Available variables: +* `--rn-alert-bg` – dialog background +* `--rn-alert-fg` – primary text color +* `--rn-alert-muted` – secondary / muted text +* `--rn-alert-surface` – input & surface background +* `--rn-alert-border` – border color +* `--rn-alert-elev` – box shadow / elevation +* `--rn-alert-accent` – primary button color +* `--rn-alert-accent-hover` – primary button hover color +* `--rn-alert-danger` – destructive button color +* `--rn-alert-danger-hover` – destructive button hover color +* `--rn-alert-radius` – border radius (dialogs/buttons) +* `--rn-alert-radius-sm` – small border radius (inputs/buttons) +* `--rn-alert-spacing` – default padding +* `--rn-alert-spacing-sm` – small padding +* `--rn-alert-btn-min` – minimum button height (touch target) +* `--rn-alert-outline` – focus outline style +* `--rn-alert-outline-weak` – subtle focus outline +* `--rn-alert-font` – font family +* `--rn-alert-font-size` – base font size +* `--rn-alert-title-size` – title font size + +## 🤝 Contributing + +We welcome contributions! +See [CONTRIBUTING.md](CONTRIBUTING.md) for workflow and [CODE\_OF\_CONDUCT.md](CODE_OF_CONDUCT.md). + +## 📄 License + +MIT © [Blazej Kustra](https://github.com/blazejkustra) --- -Made with [create-react-native-library](https://github.com/callstack/react-native-builder-bob) +Built with [create-react-native-library](https://github.com/callstack/react-native-builder-bob) 🛠 From f10618043c7f5db46bdd24c264a95f80f19b07d0 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Tue, 9 Sep 2025 23:43:31 +0200 Subject: [PATCH 12/19] chore: remove unused mock and test files for ReactNativeAlert --- tests/__mocks__/NativeReactNativeAlert.ts | 64 ----------------------- tests/__tests__/index.test.tsx | 28 ---------- 2 files changed, 92 deletions(-) delete mode 100644 tests/__mocks__/NativeReactNativeAlert.ts delete mode 100644 tests/__tests__/index.test.tsx diff --git a/tests/__mocks__/NativeReactNativeAlert.ts b/tests/__mocks__/NativeReactNativeAlert.ts deleted file mode 100644 index da860c2..0000000 --- a/tests/__mocks__/NativeReactNativeAlert.ts +++ /dev/null @@ -1,64 +0,0 @@ -// Mock for testing -import { - Alert as RNAlert, - type AlertButton as RNAlertButton, - type AlertOptions as RNAlertOptions, -} from 'react-native'; - -export type AlertButton = RNAlertButton; -export type AlertOptions = RNAlertOptions; - -export interface Spec { - /** - * Launches an alert dialog with the specified title and message. - * - * @param title - The dialog's title - * @param message - An optional message that appears below the title - * @param buttons - An optional array of buttons. If no buttons are provided, the alert will show a default 'OK' button - * @param options - An optional AlertOptions object - * - * @example - * ```typescript - * // Simple alert - * alert('Alert Title', 'This is the alert message'); - * - * // Alert with custom buttons - * alert('Delete Item', 'Are you sure?', [ - * { text: 'Cancel', style: 'cancel' }, - * { text: 'Delete', style: 'destructive' } - * ]); - * ``` - */ - alert: typeof RNAlert.alert; - - /** - * Launches a prompt dialog with the specified title and message, allowing the user to enter text. - * - * @param title - The dialog's title - * @param message - An optional message that appears below the title - * @param buttons - An optional array of buttons. If no buttons are provided, the prompt will show default 'Cancel' and 'OK' buttons - * @param type - The type of text input. Can be 'default', 'plain-text', 'secure-text', or 'login-password' - * @param defaultValue - The default text in the text input - * @param keyboardType - The keyboard type (Android only) - * - * @example - * ```typescript - * // Simple prompt - * prompt('Enter Name', 'Please enter your name:'); - * - * // Secure text prompt - * prompt('Enter Password', 'Please enter your password:', [ - * { text: 'Cancel', style: 'cancel' }, - * { text: 'OK', style: 'default', onPress: (value) => console.log(value) } - * ], 'secure-text'); - * ``` - */ - prompt: typeof RNAlert.prompt; -} - -const mockModule: Spec = { - alert: jest.fn(), - prompt: jest.fn(), -}; - -export default mockModule; diff --git a/tests/__tests__/index.test.tsx b/tests/__tests__/index.test.tsx deleted file mode 100644 index 1563e46..0000000 --- a/tests/__tests__/index.test.tsx +++ /dev/null @@ -1,28 +0,0 @@ -import Alert from '../../src/Alert/index.web'; - -describe('ReactNativeAlert', () => { - it('should export Alert class', () => { - expect(Alert).toBeDefined(); - expect(typeof Alert.alert).toBe('function'); - expect(typeof Alert.prompt).toBe('function'); - }); - - it('should have alert method', () => { - expect(() => { - Alert.alert('Test Title', 'Test Message'); - }).not.toThrow(); - }); - - it('should have prompt method', () => { - expect(() => { - Alert.prompt('Test Title', 'Test Message'); - }).not.toThrow(); - }); - - it('should support function callback for prompt', () => { - const mockCallback = jest.fn(); - expect(() => { - Alert.prompt('Test Title', 'Test Message', mockCallback); - }).not.toThrow(); - }); -}); From af7dcbdd2f7c087034a47dcaec408b7d866a9089 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 10 Sep 2025 00:00:26 +0200 Subject: [PATCH 13/19] fix: clarify isPreferred property documentation in DialogButton type --- src/NativeReactNativeAlert.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NativeReactNativeAlert.ts b/src/NativeReactNativeAlert.ts index 4f9af18..fc4666f 100644 --- a/src/NativeReactNativeAlert.ts +++ b/src/NativeReactNativeAlert.ts @@ -11,7 +11,7 @@ export type AlertType = export type DialogButton = { text?: string | null; style?: AlertButtonStyle | null; - isPreferred?: boolean | null; // ignored on Android if you want + isPreferred?: boolean | null; }; export type DialogOptions = { From 8faa6e132f12bcd6a00116a9d490505fa5a4e5de Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 10 Sep 2025 00:03:28 +0200 Subject: [PATCH 14/19] chore: downgrade react and react-dom to version 19.1.0 in package.json and yarn.lock --- example/package.json | 4 ++-- yarn.lock | 21 +++++++-------------- 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/example/package.json b/example/package.json index cdb3b57..dcf0c6e 100644 --- a/example/package.json +++ b/example/package.json @@ -16,8 +16,8 @@ "babel-plugin-react-native-web": "^0.21.1", "css-loader": "^7.1.2", "html-webpack-plugin": "^5.6.4", - "react": "19.1.1", - "react-dom": "19.1.1", + "react": "19.1.0", + "react-dom": "19.1.0", "react-native": "0.81.1", "react-native-safe-area-context": "^5.5.2", "react-native-web": "^0.21.1", diff --git a/yarn.lock b/yarn.lock index ff15e6a..a0d0576 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1542,8 +1542,8 @@ __metadata: babel-plugin-react-native-web: ^0.21.1 css-loader: ^7.1.2 html-webpack-plugin: ^5.6.4 - react: 19.1.1 - react-dom: 19.1.1 + react: 19.1.0 + react-dom: 19.1.0 react-native: 0.81.1 react-native-builder-bob: ^0.40.13 react-native-monorepo-config: ^0.1.9 @@ -11864,14 +11864,14 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:19.1.1": - version: 19.1.1 - resolution: "react-dom@npm:19.1.1" +"react-dom@npm:19.1.0": + version: 19.1.0 + resolution: "react-dom@npm:19.1.0" dependencies: scheduler: ^0.26.0 peerDependencies: - react: ^19.1.1 - checksum: 71d63df955e99bb58470c6ae12ebb82fa80e2a73147c387b73a31c17bcff803ce8aded52ae0c4391c9b413be0aa449249d8be7d063136826d1f0caba9720a907 + react: ^19.1.0 + checksum: 1d154b6543467095ac269e61ca59db546f34ef76bcdeb90f2dad41d682cd210aae492e70c85010ed5d0a2caea225e9a55139ebc1a615ee85bf197d7f99678cdf languageName: node linkType: hard @@ -12024,13 +12024,6 @@ __metadata: languageName: node linkType: hard -"react@npm:19.1.1": - version: 19.1.1 - resolution: "react@npm:19.1.1" - checksum: f2f18fea5deac87b1167365bd5160bcba64d383c26a37afa905b714ca424f423ef97d8daf53f041ab9ac25a06357fafcf0b5d3b6b84c9d1eace0e621bfeae629 - languageName: node - linkType: hard - "read-package-up@npm:^11.0.0": version: 11.0.0 resolution: "read-package-up@npm:11.0.0" From ed319d56fff703caff325ea2f186f7c8b73d705f Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 10 Sep 2025 00:09:24 +0200 Subject: [PATCH 15/19] chore: change package.json to set private to false --- example/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/example/package.json b/example/package.json index dcf0c6e..5aa050a 100644 --- a/example/package.json +++ b/example/package.json @@ -1,7 +1,7 @@ { "name": "@blazejkustra/react-native-alert-example", "version": "0.0.1", - "private": true, + "private": false, "scripts": { "android": "react-native run-android", "ios": "react-native run-ios", From 9ed51a8cc4b217599155d8c32bf245b2edd80b42 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 10 Sep 2025 00:10:45 +0200 Subject: [PATCH 16/19] chore: release 0.2.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ef165c7..b332fd3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@blazejkustra/react-native-alert", - "version": "0.1.0", + "version": "0.2.0", "description": "Universal alerts for react native", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", From 5c020a3430ef77780eac809c35df23aaefa36bec Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 10 Sep 2025 00:29:13 +0200 Subject: [PATCH 17/19] docs: add banner image to README for enhanced visibility --- README.md | 2 ++ assets/banner.png | Bin 0 -> 255745 bytes 2 files changed, 2 insertions(+) create mode 100644 assets/banner.png diff --git a/README.md b/README.md index 3aa46ea..f2e50d9 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +![React Native Alert](./assets/banner.png) + # @blazejkustra/react-native-alert ✨ **Universal, customizable alerts and prompts** for React Native — identical API to the built-in `Alert`, but works seamlessly across **iOS, Android, and Web**. diff --git a/assets/banner.png b/assets/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..1db9a3e993dca271ed2671cd6174c08b914c7797 GIT binary patch literal 255745 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%0D8YYBEI5Jb0-~{x4iafJ8$|N1X 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 rS?$>+{vgi;(*3O9(8pwMNw2IWF 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 Date: Wed, 10 Sep 2025 00:29:34 +0200 Subject: [PATCH 18/19] chore: release 0.2.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b332fd3..0ba6525 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@blazejkustra/react-native-alert", - "version": "0.2.0", + "version": "0.2.1", "description": "Universal alerts for react native", "main": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", From 232cd4828a651fa71a9c4b46c01712773db17c17 Mon Sep 17 00:00:00 2001 From: Blazej Kustra Date: Wed, 10 Sep 2025 12:32:54 +0200 Subject: [PATCH 19/19] docs: update README to clarify dark mode styling and CSS variable usage --- README.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f2e50d9..970fb84 100644 --- a/README.md +++ b/README.md @@ -110,12 +110,15 @@ Override CSS variables to match your design system: --rn-alert-danger: #dc2626; /* Destructive button */ --rn-alert-bg: #fefefe; /* Dialog background */ --rn-alert-fg: #111827; /* Text color */ - --rn-alert-radius: 16px; /* Border radius */ + --rn-alert-radius: 16px; /* Border radius */ } -:root[data-theme="dark"] { - ... +@media (prefers-color-scheme: dark) { + :root:not([data-theme]) { + ... + } } + ``` Available variables: