main 2811521c909b cached
47 files
99.1 KB
28.2k tokens
11 symbols
1 requests
Download .txt
Repository: rit3zh/expo-liquid-glass-view
Branch: main
Commit: 2811521c909b
Files: 47
Total size: 99.1 KB

Directory structure:
gitextract_ulmtrhno/

├── .eslintrc.js
├── .gitignore
├── .npmignore
├── CHANGELOG.md
├── README.md
├── example/
│   ├── .gitignore
│   ├── App.tsx
│   ├── app.json
│   ├── babel.config.js
│   ├── constants.ts
│   ├── index.ts
│   ├── ios/
│   │   ├── .gitignore
│   │   ├── .spm.pods/
│   │   │   └── packages/
│   │   │       └── .umbrella/
│   │   │           ├── .build/
│   │   │           │   └── workspace-state.json
│   │   │           └── Package.swift
│   │   ├── .xcode.env
│   │   ├── Podfile
│   │   ├── Podfile.properties.json
│   │   ├── expoliquidglassexample/
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Images.xcassets/
│   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Contents.json
│   │   │   │   ├── SplashScreenBackground.colorset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── SplashScreenLogo.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── Info.plist
│   │   │   ├── PrivacyInfo.xcprivacy
│   │   │   ├── SplashScreen.storyboard
│   │   │   ├── Supporting/
│   │   │   │   └── Expo.plist
│   │   │   ├── expoliquidglassexample-Bridging-Header.h
│   │   │   └── expoliquidglassexample.entitlements
│   │   ├── expoliquidglassexample.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   └── xcshareddata/
│   │   │       └── xcschemes/
│   │   │           └── expoliquidglassexample.xcscheme
│   │   └── expoliquidglassexample.xcworkspace/
│   │       └── contents.xcworkspacedata
│   ├── metro.config.js
│   ├── package.json
│   ├── screens/
│   │   └── ComplexVideo.tsx
│   ├── tsconfig.json
│   └── webpack.config.js
├── expo-module.config.json
├── ios/
│   ├── ExpoLiquidGlass.podspec
│   ├── ExpoLiquidGlassContainer.swift
│   ├── ExpoLiquidGlassModule.swift
│   └── ExpoLiquidGlassView.swift
├── package.json
├── src/
│   ├── ExpoLiquidGlassContainer.tsx
│   ├── ExpoLiquidGlassView.tsx
│   ├── ExpoLiquidGlassView.types.ts
│   └── index.ts
└── tsconfig.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .eslintrc.js
================================================
module.exports = {
  root: true,
  extends: ['universe/native', 'universe/web'],
  ignorePatterns: ['build'],
};


================================================
FILE: .gitignore
================================================
# OSX
#
.DS_Store

# VSCode
.vscode/
jsconfig.json

# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace

# Android/IJ
#
.classpath
.cxx
.gradle
.idea
.project
.settings
local.properties
android.iml
android/app/libs
android/keystores/debug.keystore

# Cocoapods
#
example/ios/Pods

# Ruby
example/vendor/

# node.js
#
node_modules/
npm-debug.log
yarn-debug.log
yarn-error.log

# Expo
.expo/*


package-lock.json


================================================
FILE: .npmignore
================================================
# Exclude all top-level hidden directories by convention
/.*/

# Exclude tarballs generated by `npm pack`
/*.tgz

__mocks__
__tests__

/babel.config.js
/android/src/androidTest/
/android/src/test/
/android/build/
/example/
/src/
package-lock.json


================================================
FILE: CHANGELOG.md
================================================
# Changelog

All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.

### [0.1.7](https://github.com/rit3zh/expo-liquid-glass-view/compare/v0.1.6...v0.1.7) (2025-09-19)


### Features

* **glass:** add ExpoLiquidGlassContainer with layout direction support ([decc813](https://github.com/rit3zh/expo-liquid-glass-view/commit/decc8130854ad783da6f61488541dfba54309f67))
* **glass:** add ExpoLiquidGlassContainer with layout direction support ([2c33ac5](https://github.com/rit3zh/expo-liquid-glass-view/commit/2c33ac5a8df5350e8e959ede2f4f1437686f1879))

### [0.1.6](https://github.com/rit3zh/expo-liquid-glass-view/compare/v0.1.5...v0.1.6) (2025-08-04)


================================================
FILE: README.md
================================================
<p align="center">
  <img src="./assets/liquid-glass.jpg" alt="Expo Liquid Glass View" style="width:100%; max-width:800px;" />
</p>

<h1 align="center">🧊 expo-liquid-glass-view</h1>

<p align="center">
  A beautiful, SwiftUI-powered glass effect view for React Native built with Expo
</p>

---

## ✨ Features

- 🧊 Native **glassEffect** on iOS
- 🍏 Powered by **SwiftUI** for ultra-smooth performance
- 🧱 Configurable corner radius and style (continuous or circular)
- 🌈 Custom **tint overlays** and **blur strength types**
- 🧩 Supports nesting **React Native children**

---

## 🚀 Installation

### 1. Add the package

```bash
npx expo install expo-liquid-glass-view
```

### 2. Install CocoaPods

```bash
cd ios && pod install
```

### 3. Prebuild the iOS project

```bash
npx expo prebuild --platform ios
```

### 4. Run your app

```bash
npx expo run:ios
```

> ⚠️ **iOS only** — This view uses SwiftUI and does not support Android.

---

## 📦 Usage

```tsx
import { ExpoLiquidGlassView } from "expo-liquid-glass-view";

export default function App() {
  return (
    <ExpoLiquidGlassView
      cornerStyle={CornerStyle.Circular}
      type={LiquidGlassType.Tint}
      tint="#000000"
      cornerRadius={24}
      style={{ width: 200, height: 200, alignSelf: "center", marginTop: 100 }}
      containerStyle={{ padding: 16, alignItems: "center" }}
    >
      <Text style={{ color: "#fff", textAlign: "center" }}>
        Liquid Glass ✨
      </Text>
    </ExpoLiquidGlassView>
  );
}
```

---

## ⚙️ Props

| Prop           | Type                                                            | Default        | Description                                                                |
| -------------- | --------------------------------------------------------------- | -------------- | -------------------------------------------------------------------------- |
| `type`         | `"clear" \| "tint" \| "regular" \| "interactive" \| "identity"` | `"regular"`    | Defines the glass blur intensity and system effect                         |
| `tint`         | `string`                                                        | `undefined`    | Optional iOS system tint, like `"systemUltraThinMaterial"` or custom color |
| `cornerRadius` | `number`                                                        | `12`           | Border radius in points                                                    |
| `cornerStyle`  | `"continuous"` \| `"circular"`                                  | `"continuous"` | Defines the curvature style of the corners                                 |
| `style`        | `StyleProp<ViewStyle>`                                          | `undefined`    | Style for the outer native glass view                                      |
| `containerStyle` | `StyleProp<ViewStyle>`                                        | `undefined`    | Style for the inner content container that wraps `children`                |
| `children`     | `React.ReactNode`                                               | `undefined`    | Optional React children to render inside the glass                         |

---

## 🧪 Types

```ts
export enum CornerStyle {
  Continuous = "continuous",
  Circular = "circular",
}

export enum LiquidGlassType {
  Clear = "clear",
  Tint = "tint",
  Regular = "regular",
  Interactive = "interactive",
  Identity = "identity",
}

export interface ExpoLiquidGlassViewProps {
  type?: LiquidGlassType;
  tint?: string;
  cornerRadius?: number;
  cornerStyle?: CornerStyle;
  style?: StyleProp<ViewStyle>;
  containerStyle?: StyleProp<ViewStyle>;
  children?: React.ReactNode;
}
```

---

## 📱 Platform Support

- ✅ iOS _(SwiftUI)_
- ❌ Android _(not supported)_

---

## 🛠 Built With

- ⚛️ [Expo Modules](https://docs.expo.dev/modules/overview/)
- 🍎 [SwiftUI](https://developer.apple.com/documentation/swiftui/)
- 📱 [React Native](https://reactnative.dev/)

---

## 🧩 Related Ideas

If you're building glassmorphic UIs, try pairing this with:

- `expo-blur`
- `expo-symbols`
- `react-native-skia`

---

## 🎥 Preview

https://github.com/user-attachments/assets/a08878fb-6a90-474b-8f21-1b46fe990177

## ❤️ Contributing

###### PRs and issues are welcome! Let’s keep building beautiful native UIs with React Native + SwiftUI!

## 📄 License

MIT © [rit3zh](https://github.com/rit3zh)


================================================
FILE: example/.gitignore
================================================
# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files

# dependencies
node_modules/

# Expo
.expo/
dist/
web-build/
expo-env.d.ts

# Native
.kotlin/
*.orig.*
*.jks
*.p8
*.p12
*.key
*.mobileprovision

# Metro
.metro-health-check*

# debug
npm-debug.*
yarn-debug.*
yarn-error.*

# macOS
.DS_Store
*.pem

# local env files
.env*.local

# typescript
*.tsbuildinfo


================================================
FILE: example/App.tsx
================================================
import {
  View,
  Text,
  StyleSheet,
  SafeAreaView,
  TouchableOpacity,
  ImageBackground,
} from "react-native";
import React, { useState, useEffect } from "react";

import { ExpoLiquidGlassView } from "expo-liquid-glass-view";

const WIDTH: number = 300;
const HEIGHT: number = 300;
const BORDER_RADIUS: number = 999;

const App = () => {
  const [videoLoaded, setVideoLoaded] = useState(false);
  const [forceUpdate, setForceUpdate] = useState(0);

  useEffect(() => {
    const timer = setTimeout(() => {
      setForceUpdate((prev) => prev + 1);
    }, 100);
    return () => clearTimeout(timer);
  }, [videoLoaded]);

  useEffect(() => {
    const interval = setInterval(() => {
      setForceUpdate((prev) => prev + 1);
    }, 1000);

    const cleanup = setTimeout(() => {
      clearInterval(interval);
    }, 3000);

    return () => {
      clearInterval(interval);
      clearTimeout(cleanup);
    };
  }, []);

  return (
    <ImageBackground
      style={styles.container}
      source={{
        uri: "https://i.pinimg.com/736x/eb/b4/68/ebb4685cc02c29730294e9c6ecdbec9f.jpg",
      }}
    >
      <View>
        <ExpoLiquidGlassView style={{ borderRadius: 100 }} cornerRadius={300}>
          <View
            style={{
              width: 400,
              height: 400,
              justifyContent: "center",
              alignItems: "center",
              borderRadius: 100,
            }}
          >
            <Text style={{ color: "black" }}>Hello, from liquid glass!</Text>
          </View>
        </ExpoLiquidGlassView>
      </View>
    </ImageBackground>
  );
};

export default App;

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: "black",
    justifyContent: "center",
    alignItems: "center",
  },
  overlay: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  videoContainer: {
    position: "relative",
    width: WIDTH,
    height: HEIGHT,
    borderRadius: BORDER_RADIUS,
    overflow: "hidden",
    bottom: 100,
  },
  video: {
    width: WIDTH,
    height: HEIGHT,
    position: "absolute",
    top: 0,
    left: 0,
  },
  glassOverlay: {
    height: HEIGHT,
    width: WIDTH,
  },
  glassContent: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  innerView: {
    overflow: "hidden",
    width: WIDTH,
    height: HEIGHT,
    borderRadius: BORDER_RADIUS,
  },
  bottomContent: {
    width: "90%",
    alignItems: "center",
    justifyContent: "flex-end",
    height: "90%",
    position: "absolute",
  },
  statsCard: {
    width: "80%",
    height: 80,
    marginBottom: 40,
  },
  statsContent: {
    flex: 1,
    flexDirection: "row",
    alignItems: "center",
    justifyContent: "space-around",
    paddingHorizontal: 20,
  },
  statItem: {
    alignItems: "center",
  },
  statValue: {
    fontSize: 20,
    fontWeight: "600",
    color: "#ffffff",
    marginBottom: 4,
  },
  statLabel: {
    fontSize: 12,
    color: "#888888",
    fontWeight: "400",
  },
  statDivider: {
    width: 1,
    height: 40,
    backgroundColor: "#333333",
  },
  controls: {
    flexDirection: "row",
    justifyContent: "center",
    alignItems: "center",
    gap: 40,
    marginBottom: 40,
  },
  controlButton: {
    alignItems: "center",
  },
  controlGlass: {
    width: 50,
    height: 50,
    marginBottom: 12,
  },
  controlContent: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  controlIcon: {
    fontSize: 20,
  },
  controlText: {
    fontSize: 14,
    color: "#cccccc",
    fontWeight: "400",
  },
});


================================================
FILE: example/app.json
================================================
{
  "expo": {
    "name": "expo-liquid-glass-example",
    "slug": "expo-liquid-glass-example",
    "version": "1.0.0",
    "orientation": "portrait",
    "icon": "./assets/icon.png",
    "userInterfaceStyle": "light",
    "newArchEnabled": true,
    "splash": {
      "image": "./assets/splash-icon.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },
    "ios": {
      "supportsTablet": true,
      "bundleIdentifier": "expo.modules.liquidglass.example"
    },
    "android": {
      "adaptiveIcon": {
        "foregroundImage": "./assets/adaptive-icon.png",
        "backgroundColor": "#ffffff"
      },
      "edgeToEdgeEnabled": true,
      "package": "expo.modules.liquidglass.example"
    },
    "web": {
      "favicon": "./assets/favicon.png"
    }
  }
}


================================================
FILE: example/babel.config.js
================================================
module.exports = function (api) {
  api.cache(true);
  return {
    presets: ['babel-preset-expo'],
  };
};


================================================
FILE: example/constants.ts
================================================
export const BACKGROUND_URL: string = `https://i.pinimg.com/736x/79/ab/04/79ab04ae66154a34c2518a69bf6c6a23.jpg`;
export const backgroundImages = [
  BACKGROUND_URL,
  "https://i.pinimg.com/736x/88/95/f2/8895f231b18c8b2f48a0c26d2f5d048e.jpg",
  "https://images.unsplash.com/photo-1518837695005-2083093ee35b?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2070&q=80", // Ocean sunset
  "https://images.unsplash.com/photo-1441974231531-c6227db76b6e?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2071&q=80", // Forest
  "https://images.unsplash.com/photo-1506905925346-21bda4d32df4?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=2070&q=80", // City skyline
];


================================================
FILE: example/index.ts
================================================
import { registerRootComponent } from 'expo';

import App from './App';

// registerRootComponent calls AppRegistry.registerComponent('main', () => App);
// It also ensures that whether you load the app in Expo Go or in a native build,
// the environment is set up appropriately
registerRootComponent(App);


================================================
FILE: example/ios/.gitignore
================================================
# OSX
#
.DS_Store

# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
project.xcworkspace
.xcode.env.local

# Bundle artifacts
*.jsbundle

# CocoaPods
/Pods/


================================================
FILE: example/ios/.spm.pods/packages/.umbrella/.build/workspace-state.json
================================================
{
  "object" : {
    "artifacts" : [

    ],
    "dependencies" : [

    ],
    "prebuilts" : [

    ]
  },
  "version" : 7
}

================================================
FILE: example/ios/.spm.pods/packages/.umbrella/Package.swift
================================================
// swift-tools-version:5.7
import PackageDescription

let package = Package(
  name: "_umbrella_",
  dependencies: [
    
  ]
)


================================================
FILE: example/ios/.xcode.env
================================================
# This `.xcode.env` file is versioned and is used to source the environment
# used when running script phases inside Xcode.
# To customize your local environment, you can create an `.xcode.env.local`
# file that is not versioned.

# NODE_BINARY variable contains the PATH to the node executable.
#
# Customize the NODE_BINARY variable here.
# For example, to use nvm with brew, add the following line
# . "$(brew --prefix nvm)/nvm.sh" --no-use
export NODE_BINARY=$(command -v node)


================================================
FILE: example/ios/Podfile
================================================
require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking")
require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")

require 'json'
podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}

ENV['RCT_NEW_ARCH_ENABLED'] = '0' if podfile_properties['newArchEnabled'] == 'false'
ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] = podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']

platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'
install! 'cocoapods',
  :deterministic_uuids => false

prepare_react_native_project!

target 'expoliquidglassexample' do
  use_expo_modules!

  if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'
    config_command = ['node', '-e', "process.argv=['', '', 'config'];require('@react-native-community/cli').run()"];
  else
    config_command = [
      'npx',
      'expo-modules-autolinking',
      'react-native-config',
      '--json',
      '--platform',
      'ios'
    ]
  end

  config = use_native_modules!(config_command)

  use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']
  use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']

  use_react_native!(
    :path => config[:reactNativePath],
    :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes',
    # An absolute path to your application root.
    :app_path => "#{Pod::Config.instance.installation_root}/..",
    :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false',
  )

  post_install do |installer|
    react_native_post_install(
      installer,
      config[:reactNativePath],
      :mac_catalyst_enabled => false,
      :ccache_enabled => podfile_properties['apple.ccacheEnabled'] == 'true',
    )

    # This is necessary for Xcode 14, because it signs resource bundles by default
    # when building for devices.
    installer.target_installation_results.pod_target_installation_results
      .each do |pod_name, target_installation_result|
      target_installation_result.resource_bundle_targets.each do |resource_bundle_target|
        resource_bundle_target.build_configurations.each do |config|
          config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
        end
      end
    end
  end
end


================================================
FILE: example/ios/Podfile.properties.json
================================================
{
  "expo.jsEngine": "hermes",
  "EX_DEV_CLIENT_NETWORK_INSPECTOR": "true",
  "newArchEnabled": "true"
}


================================================
FILE: example/ios/expoliquidglassexample/AppDelegate.swift
================================================
import Expo
import React
import ReactAppDependencyProvider

@UIApplicationMain
public class AppDelegate: ExpoAppDelegate {
  var window: UIWindow?

  var reactNativeDelegate: ExpoReactNativeFactoryDelegate?
  var reactNativeFactory: RCTReactNativeFactory?

  public override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
  ) -> Bool {
    let delegate = ReactNativeDelegate()
    let factory = ExpoReactNativeFactory(delegate: delegate)
    delegate.dependencyProvider = RCTAppDependencyProvider()

    reactNativeDelegate = delegate
    reactNativeFactory = factory
    bindReactNativeFactory(factory)

#if os(iOS) || os(tvOS)
    window = UIWindow(frame: UIScreen.main.bounds)
    factory.startReactNative(
      withModuleName: "main",
      in: window,
      launchOptions: launchOptions)
#endif

    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }

  // Linking API
  public override func application(
    _ app: UIApplication,
    open url: URL,
    options: [UIApplication.OpenURLOptionsKey: Any] = [:]
  ) -> Bool {
    return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)
  }

  // Universal Links
  public override func application(
    _ application: UIApplication,
    continue userActivity: NSUserActivity,
    restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
  ) -> Bool {
    let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)
    return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result
  }
}

class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {
  // Extension point for config-plugins

  override func sourceURL(for bridge: RCTBridge) -> URL? {
    // needed to return the correct URL for expo-dev-client.
    bridge.bundleURL ?? bundleURL()
  }

  override func bundleURL() -> URL? {
#if DEBUG
    return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: ".expo/.virtual-metro-entry")
#else
    return Bundle.main.url(forResource: "main", withExtension: "jsbundle")
#endif
  }
}


================================================
FILE: example/ios/expoliquidglassexample/Images.xcassets/AppIcon.appiconset/Contents.json
================================================
{
  "images": [
    {
      "filename": "App-Icon-1024x1024@1x.png",
      "idiom": "universal",
      "platform": "ios",
      "size": "1024x1024"
    }
  ],
  "info": {
    "version": 1,
    "author": "expo"
  }
}

================================================
FILE: example/ios/expoliquidglassexample/Images.xcassets/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "expo"
  }
}


================================================
FILE: example/ios/expoliquidglassexample/Images.xcassets/SplashScreenBackground.colorset/Contents.json
================================================
{
  "colors": [
    {
      "color": {
        "components": {
          "alpha": "1.000",
          "blue": "1.00000000000000",
          "green": "1.00000000000000",
          "red": "1.00000000000000"
        },
        "color-space": "srgb"
      },
      "idiom": "universal"
    }
  ],
  "info": {
    "version": 1,
    "author": "expo"
  }
}

================================================
FILE: example/ios/expoliquidglassexample/Images.xcassets/SplashScreenLogo.imageset/Contents.json
================================================
{
  "images": [
    {
      "idiom": "universal",
      "filename": "image.png",
      "scale": "1x"
    },
    {
      "idiom": "universal",
      "filename": "image@2x.png",
      "scale": "2x"
    },
    {
      "idiom": "universal",
      "filename": "image@3x.png",
      "scale": "3x"
    }
  ],
  "info": {
    "version": 1,
    "author": "expo"
  }
}

================================================
FILE: example/ios/expoliquidglassexample/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>CADisableMinimumFrameDurationOnPhone</key>
    <true/>
    <key>CFBundleDevelopmentRegion</key>
    <string>$(DEVELOPMENT_LANGUAGE)</string>
    <key>CFBundleDisplayName</key>
    <string>expo-liquid-glass-example</string>
    <key>CFBundleExecutable</key>
    <string>$(EXECUTABLE_NAME)</string>
    <key>CFBundleIdentifier</key>
    <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>$(PRODUCT_NAME)</string>
    <key>CFBundlePackageType</key>
    <string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0.0</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleURLTypes</key>
    <array>
      <dict>
        <key>CFBundleURLSchemes</key>
        <array>
          <string>expo.modules.liquidglass.example</string>
        </array>
      </dict>
    </array>
    <key>CFBundleVersion</key>
    <string>1</string>
    <key>LSMinimumSystemVersion</key>
    <string>12.0</string>
    <key>LSRequiresIPhoneOS</key>
    <true/>
    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSAllowsArbitraryLoads</key>
      <false/>
      <key>NSAllowsLocalNetworking</key>
      <true/>
    </dict>
    <key>UILaunchStoryboardName</key>
    <string>SplashScreen</string>
    <key>UIRequiredDeviceCapabilities</key>
    <array>
      <string>arm64</string>
    </array>
    <key>UIRequiresFullScreen</key>
    <false/>
    <key>UIStatusBarStyle</key>
    <string>UIStatusBarStyleDefault</string>
    <key>UISupportedInterfaceOrientations</key>
    <array>
      <string>UIInterfaceOrientationPortrait</string>
      <string>UIInterfaceOrientationPortraitUpsideDown</string>
    </array>
    <key>UISupportedInterfaceOrientations~ipad</key>
    <array>
      <string>UIInterfaceOrientationPortrait</string>
      <string>UIInterfaceOrientationPortraitUpsideDown</string>
      <string>UIInterfaceOrientationLandscapeLeft</string>
      <string>UIInterfaceOrientationLandscapeRight</string>
    </array>
    <key>UIUserInterfaceStyle</key>
    <string>Light</string>
    <key>UIViewControllerBasedStatusBarAppearance</key>
    <false/>
  </dict>
</plist>

================================================
FILE: example/ios/expoliquidglassexample/PrivacyInfo.xcprivacy
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>NSPrivacyAccessedAPITypes</key>
	<array>
		<dict>
			<key>NSPrivacyAccessedAPIType</key>
			<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
			<key>NSPrivacyAccessedAPITypeReasons</key>
			<array>
				<string>CA92.1</string>
			</array>
		</dict>
		<dict>
			<key>NSPrivacyAccessedAPIType</key>
			<string>NSPrivacyAccessedAPICategoryFileTimestamp</string>
			<key>NSPrivacyAccessedAPITypeReasons</key>
			<array>
				<string>0A2A.1</string>
				<string>3B52.1</string>
				<string>C617.1</string>
			</array>
		</dict>
		<dict>
			<key>NSPrivacyAccessedAPIType</key>
			<string>NSPrivacyAccessedAPICategoryDiskSpace</string>
			<key>NSPrivacyAccessedAPITypeReasons</key>
			<array>
				<string>E174.1</string>
				<string>85F4.1</string>
			</array>
		</dict>
		<dict>
			<key>NSPrivacyAccessedAPIType</key>
			<string>NSPrivacyAccessedAPICategorySystemBootTime</string>
			<key>NSPrivacyAccessedAPITypeReasons</key>
			<array>
				<string>35F9.1</string>
			</array>
		</dict>
	</array>
	<key>NSPrivacyCollectedDataTypes</key>
	<array/>
	<key>NSPrivacyTracking</key>
	<false/>
</dict>
</plist>


================================================
FILE: example/ios/expoliquidglassexample/SplashScreen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="32700.99.1234" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="EXPO-VIEWCONTROLLER-1">
    <device id="retina6_12" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22685"/>
        <capability name="Named colors" minToolsVersion="9.0"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <scene sceneID="EXPO-SCENE-1">
            <objects>
                <viewController storyboardIdentifier="SplashScreenViewController" id="EXPO-VIEWCONTROLLER-1" sceneMemberID="viewController">
                    <view key="view" userInteractionEnabled="NO" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="EXPO-ContainerView" userLabel="ContainerView">
                        <rect key="frame" x="0.0" y="0.0" width="393" height="852"/>
                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                        <subviews>
                            <imageView id="EXPO-SplashScreen" userLabel="SplashScreenLogo" image="SplashScreenLogo" contentMode="scaleAspectFit" clipsSubviews="true" userInteractionEnabled="false" translatesAutoresizingMaskIntoConstraints="false">
                                <rect key="frame" x="0" y="0" width="414" height="736"/>
                            </imageView>
                        </subviews>
                        <viewLayoutGuide key="safeArea" id="Rmq-lb-GrQ"/>
                        <constraints>
                            <constraint firstItem="EXPO-SplashScreen" firstAttribute="top" secondItem="EXPO-ContainerView" secondAttribute="top" id="83fcb9b545b870ba44c24f0feeb116490c499c52"/>
                            <constraint firstItem="EXPO-SplashScreen" firstAttribute="leading" secondItem="EXPO-ContainerView" secondAttribute="leading" id="61d16215e44b98e39d0a2c74fdbfaaa22601b12c"/>
                            <constraint firstItem="EXPO-SplashScreen" firstAttribute="trailing" secondItem="EXPO-ContainerView" secondAttribute="trailing" id="f934da460e9ab5acae3ad9987d5b676a108796c1"/>
                            <constraint firstItem="EXPO-SplashScreen" firstAttribute="bottom" secondItem="EXPO-ContainerView" secondAttribute="bottom" id="d6a0be88096b36fb132659aa90203d39139deda9"/>
                        </constraints>
                        <color key="backgroundColor" name="SplashScreenBackground"/>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="EXPO-PLACEHOLDER-1" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="0.0" y="0.0"/>
        </scene>
    </scenes>
    <resources>
        <image name="SplashScreenLogo" width="414" height="736"/>
        <namedColor name="SplashScreenBackground">
            <color alpha="1.000" blue="1.00000000000000" green="1.00000000000000" red="1.00000000000000" customColorSpace="sRGB" colorSpace="custom"/>
        </namedColor>
    </resources>
</document>

================================================
FILE: example/ios/expoliquidglassexample/Supporting/Expo.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>EXUpdatesCheckOnLaunch</key>
    <string>ALWAYS</string>
    <key>EXUpdatesEnabled</key>
    <false/>
    <key>EXUpdatesLaunchWaitMs</key>
    <integer>0</integer>
  </dict>
</plist>

================================================
FILE: example/ios/expoliquidglassexample/expoliquidglassexample-Bridging-Header.h
================================================
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//


================================================
FILE: example/ios/expoliquidglassexample/expoliquidglassexample.entitlements
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict/>
</plist>

================================================
FILE: example/ios/expoliquidglassexample.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 54;
	objects = {

/* Begin PBXBuildFile section */
		13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
		273E81AD0335CBEF96B896C6 /* libPods-expoliquidglassexample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 51F6C847FB2D4930BE9940B2 /* libPods-expoliquidglassexample.a */; };
		3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */; };
		6A9133C881153F765327B585 /* ExpoModulesProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = BBD87AAED3D97A13C324569A /* ExpoModulesProvider.swift */; };
		6EE0FC273F935368C199F33A /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = C762BBF9BCCCC89ED572CFC1 /* PrivacyInfo.xcprivacy */; };
		BB2F792D24A3F905000567C9 /* Expo.plist in Resources */ = {isa = PBXBuildFile; fileRef = BB2F792C24A3F905000567C9 /* Expo.plist */; };
		F11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F11748412D0307B40044C1D9 /* AppDelegate.swift */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
		13B07F961A680F5B00A75B9A /* expoliquidglassexample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = expoliquidglassexample.app; sourceTree = BUILT_PRODUCTS_DIR; };
		13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = expoliquidglassexample/Images.xcassets; sourceTree = "<group>"; };
		13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = expoliquidglassexample/Info.plist; sourceTree = "<group>"; };
		51F6C847FB2D4930BE9940B2 /* libPods-expoliquidglassexample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-expoliquidglassexample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
		94770A3A0E8E6E2756728920 /* Pods-expoliquidglassexample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-expoliquidglassexample.release.xcconfig"; path = "Target Support Files/Pods-expoliquidglassexample/Pods-expoliquidglassexample.release.xcconfig"; sourceTree = "<group>"; };
		AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = SplashScreen.storyboard; path = expoliquidglassexample/SplashScreen.storyboard; sourceTree = "<group>"; };
		BB2F792C24A3F905000567C9 /* Expo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Expo.plist; sourceTree = "<group>"; };
		BBD87AAED3D97A13C324569A /* ExpoModulesProvider.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ExpoModulesProvider.swift; path = "Pods/Target Support Files/Pods-expoliquidglassexample/ExpoModulesProvider.swift"; sourceTree = "<group>"; };
		BFB54A0A553C92C1BA2AEA9B /* Pods-expoliquidglassexample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-expoliquidglassexample.debug.xcconfig"; path = "Target Support Files/Pods-expoliquidglassexample/Pods-expoliquidglassexample.debug.xcconfig"; sourceTree = "<group>"; };
		C762BBF9BCCCC89ED572CFC1 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; includeInIndex = 1; name = PrivacyInfo.xcprivacy; path = expoliquidglassexample/PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
		ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
		F11748412D0307B40044C1D9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = expoliquidglassexample/AppDelegate.swift; sourceTree = "<group>"; };
		F11748442D0722820044C1D9 /* expoliquidglassexample-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "expoliquidglassexample-Bridging-Header.h"; path = "expoliquidglassexample/expoliquidglassexample-Bridging-Header.h"; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				273E81AD0335CBEF96B896C6 /* libPods-expoliquidglassexample.a in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		13B07FAE1A68108700A75B9A /* expoliquidglassexample */ = {
			isa = PBXGroup;
			children = (
				F11748412D0307B40044C1D9 /* AppDelegate.swift */,
				F11748442D0722820044C1D9 /* expoliquidglassexample-Bridging-Header.h */,
				BB2F792B24A3F905000567C9 /* Supporting */,
				13B07FB51A68108700A75B9A /* Images.xcassets */,
				13B07FB61A68108700A75B9A /* Info.plist */,
				AA286B85B6C04FC6940260E9 /* SplashScreen.storyboard */,
				C762BBF9BCCCC89ED572CFC1 /* PrivacyInfo.xcprivacy */,
			);
			name = expoliquidglassexample;
			sourceTree = "<group>";
		};
		1DDF3FEE1C95528445000776 /* ExpoModulesProviders */ = {
			isa = PBXGroup;
			children = (
				A0BBAE60C308C81C63F05CD4 /* expoliquidglassexample */,
			);
			name = ExpoModulesProviders;
			sourceTree = "<group>";
		};
		2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
			isa = PBXGroup;
			children = (
				ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
				51F6C847FB2D4930BE9940B2 /* libPods-expoliquidglassexample.a */,
			);
			name = Frameworks;
			sourceTree = "<group>";
		};
		832341AE1AAA6A7D00B99B32 /* Libraries */ = {
			isa = PBXGroup;
			children = (
			);
			name = Libraries;
			sourceTree = "<group>";
		};
		83CBB9F61A601CBA00E9B192 = {
			isa = PBXGroup;
			children = (
				13B07FAE1A68108700A75B9A /* expoliquidglassexample */,
				832341AE1AAA6A7D00B99B32 /* Libraries */,
				83CBBA001A601CBA00E9B192 /* Products */,
				2D16E6871FA4F8E400B85C8A /* Frameworks */,
				F3269B31D3DCC28BBDACC4B3 /* Pods */,
				1DDF3FEE1C95528445000776 /* ExpoModulesProviders */,
			);
			indentWidth = 2;
			sourceTree = "<group>";
			tabWidth = 2;
			usesTabs = 0;
		};
		83CBBA001A601CBA00E9B192 /* Products */ = {
			isa = PBXGroup;
			children = (
				13B07F961A680F5B00A75B9A /* expoliquidglassexample.app */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		A0BBAE60C308C81C63F05CD4 /* expoliquidglassexample */ = {
			isa = PBXGroup;
			children = (
				BBD87AAED3D97A13C324569A /* ExpoModulesProvider.swift */,
			);
			name = expoliquidglassexample;
			sourceTree = "<group>";
		};
		BB2F792B24A3F905000567C9 /* Supporting */ = {
			isa = PBXGroup;
			children = (
				BB2F792C24A3F905000567C9 /* Expo.plist */,
			);
			name = Supporting;
			path = expoliquidglassexample/Supporting;
			sourceTree = "<group>";
		};
		F3269B31D3DCC28BBDACC4B3 /* Pods */ = {
			isa = PBXGroup;
			children = (
				BFB54A0A553C92C1BA2AEA9B /* Pods-expoliquidglassexample.debug.xcconfig */,
				94770A3A0E8E6E2756728920 /* Pods-expoliquidglassexample.release.xcconfig */,
			);
			name = Pods;
			path = Pods;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		13B07F861A680F5B00A75B9A /* expoliquidglassexample */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "expoliquidglassexample" */;
			buildPhases = (
				08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */,
				23E98009D95118211293BEED /* [Expo] Configure project */,
				13B07F871A680F5B00A75B9A /* Sources */,
				13B07F8C1A680F5B00A75B9A /* Frameworks */,
				13B07F8E1A680F5B00A75B9A /* Resources */,
				00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
				800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */,
				47747F1187DB8FCC013763D0 /* [CP] Embed Pods Frameworks */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = expoliquidglassexample;
			productName = expoliquidglassexample;
			productReference = 13B07F961A680F5B00A75B9A /* expoliquidglassexample.app */;
			productType = "com.apple.product-type.application";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		83CBB9F71A601CBA00E9B192 /* Project object */ = {
			isa = PBXProject;
			attributes = {
				LastUpgradeCheck = 1130;
				TargetAttributes = {
					13B07F861A680F5B00A75B9A = {
						LastSwiftMigration = 1250;
					};
				};
			};
			buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "expoliquidglassexample" */;
			compatibilityVersion = "Xcode 3.2";
			developmentRegion = en;
			hasScannedForEncodings = 0;
			knownRegions = (
				en,
				Base,
			);
			mainGroup = 83CBB9F61A601CBA00E9B192;
			productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				13B07F861A680F5B00A75B9A /* expoliquidglassexample */,
			);
		};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
		13B07F8E1A680F5B00A75B9A /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				BB2F792D24A3F905000567C9 /* Expo.plist in Resources */,
				13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
				3E461D99554A48A4959DE609 /* SplashScreen.storyboard in Resources */,
				6EE0FC273F935368C199F33A /* PrivacyInfo.xcprivacy in Resources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXResourcesBuildPhase section */

/* Begin PBXShellScriptBuildPhase section */
		00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = {
			isa = PBXShellScriptBuildPhase;
			alwaysOutOfDate = 1;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
			);
			name = "Bundle React Native code and images";
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "if [[ -f \"$PODS_ROOT/../.xcode.env\" ]]; then\n  source \"$PODS_ROOT/../.xcode.env\"\nfi\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n  source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n# The project root by default is one level up from the ios directory\nexport PROJECT_ROOT=\"$PROJECT_DIR\"/..\n\nif [[ \"$CONFIGURATION\" = *Debug* ]]; then\n  export SKIP_BUNDLING=1\nfi\nif [[ -z \"$ENTRY_FILE\" ]]; then\n  # Set the entry JS file using the bundler's entry resolution.\n  export ENTRY_FILE=\"$(\"$NODE_BINARY\" -e \"require('expo/scripts/resolveAppEntry')\" \"$PROJECT_ROOT\" ios absolute | tail -n 1)\"\nfi\n\nif [[ -z \"$CLI_PATH\" ]]; then\n  # Use Expo CLI\n  export CLI_PATH=\"$(\"$NODE_BINARY\" --print \"require.resolve('@expo/cli', { paths: [require.resolve('expo/package.json')] })\")\"\nfi\nif [[ -z \"$BUNDLE_COMMAND\" ]]; then\n  # Default Expo CLI command for bundling\n  export BUNDLE_COMMAND=\"export:embed\"\nfi\n\n# Source .xcode.env.updates if it exists to allow\n# SKIP_BUNDLING to be unset if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.updates\" ]]; then\n  source \"$PODS_ROOT/../.xcode.env.updates\"\nfi\n# Source local changes to allow overrides\n# if needed\nif [[ -f \"$PODS_ROOT/../.xcode.env.local\" ]]; then\n  source \"$PODS_ROOT/../.xcode.env.local\"\nfi\n\n`\"$NODE_BINARY\" --print \"require('path').dirname(require.resolve('react-native/package.json')) + '/scripts/react-native-xcode.sh'\"`\n\n";
		};
		08A4A3CD28434E44B6B9DE2E /* [CP] Check Pods Manifest.lock */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputFileListPaths = (
			);
			inputPaths = (
				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
				"${PODS_ROOT}/Manifest.lock",
			);
			name = "[CP] Check Pods Manifest.lock";
			outputFileListPaths = (
			);
			outputPaths = (
				"$(DERIVED_FILE_DIR)/Pods-expoliquidglassexample-checkManifestLockResult.txt",
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
			showEnvVarsInLog = 0;
		};
		23E98009D95118211293BEED /* [Expo] Configure project */ = {
			isa = PBXShellScriptBuildPhase;
			alwaysOutOfDate = 1;
			buildActionMask = 2147483647;
			files = (
			);
			inputFileListPaths = (
			);
			inputPaths = (
			);
			name = "[Expo] Configure project";
			outputFileListPaths = (
			);
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "# This script configures Expo modules and generates the modules provider file.\nbash -l -c \"./Pods/Target\\ Support\\ Files/Pods-expoliquidglassexample/expo-configure-project.sh\"\n";
		};
		47747F1187DB8FCC013763D0 /* [CP] Embed Pods Frameworks */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
				"${PODS_ROOT}/Target Support Files/Pods-expoliquidglassexample/Pods-expoliquidglassexample-frameworks.sh",
				"${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/Pre-built/hermes.framework/hermes",
			);
			name = "[CP] Embed Pods Frameworks";
			outputPaths = (
				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework",
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-expoliquidglassexample/Pods-expoliquidglassexample-frameworks.sh\"\n";
			showEnvVarsInLog = 0;
		};
		800E24972A6A228C8D4807E9 /* [CP] Copy Pods Resources */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
				"${PODS_ROOT}/Target Support Files/Pods-expoliquidglassexample/Pods-expoliquidglassexample-resources.sh",
				"${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/EXConstants.bundle",
				"${PODS_CONFIGURATION_BUILD_DIR}/EXConstants/ExpoConstants_privacy.bundle",
				"${PODS_CONFIGURATION_BUILD_DIR}/ExpoFileSystem/ExpoFileSystem_privacy.bundle",
				"${PODS_CONFIGURATION_BUILD_DIR}/RCT-Folly/RCT-Folly_privacy.bundle",
				"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/React-Core_privacy.bundle",
				"${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact/React-cxxreact_privacy.bundle",
				"${PODS_CONFIGURATION_BUILD_DIR}/boost/boost_privacy.bundle",
				"${PODS_CONFIGURATION_BUILD_DIR}/glog/glog_privacy.bundle",
			);
			name = "[CP] Copy Pods Resources";
			outputPaths = (
				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/EXConstants.bundle",
				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoConstants_privacy.bundle",
				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/ExpoFileSystem_privacy.bundle",
				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RCT-Folly_privacy.bundle",
				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-Core_privacy.bundle",
				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/React-cxxreact_privacy.bundle",
				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/boost_privacy.bundle",
				"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/glog_privacy.bundle",
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-expoliquidglassexample/Pods-expoliquidglassexample-resources.sh\"\n";
			showEnvVarsInLog = 0;
		};
/* End PBXShellScriptBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
		13B07F871A680F5B00A75B9A /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				F11748422D0307B40044C1D9 /* AppDelegate.swift in Sources */,
				6A9133C881153F765327B585 /* ExpoModulesProvider.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin XCBuildConfiguration section */
		13B07F941A680F5B00A75B9A /* Debug */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = BFB54A0A553C92C1BA2AEA9B /* Pods-expoliquidglassexample.debug.xcconfig */;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CLANG_ENABLE_MODULES = YES;
				CODE_SIGN_ENTITLEMENTS = expoliquidglassexample/expoliquidglassexample.entitlements;
				CURRENT_PROJECT_VERSION = 1;
				ENABLE_BITCODE = NO;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"$(inherited)",
					"FB_SONARKIT_ENABLED=1",
				);
				INFOPLIST_FILE = expoliquidglassexample/Info.plist;
				IPHONEOS_DEPLOYMENT_TARGET = 15.1;
				LD_RUNPATH_SEARCH_PATHS = (
					"$(inherited)",
					"@executable_path/Frameworks",
				);
				MARKETING_VERSION = 1.0;
				OTHER_LDFLAGS = (
					"$(inherited)",
					"-ObjC",
					"-lc++",
				);
				OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_DEBUG";
				PRODUCT_BUNDLE_IDENTIFIER = expo.modules.liquidglass.example;
				PRODUCT_NAME = expoliquidglassexample;
				SWIFT_OBJC_BRIDGING_HEADER = "expoliquidglassexample/expoliquidglassexample-Bridging-Header.h";
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				VERSIONING_SYSTEM = "apple-generic";
			};
			name = Debug;
		};
		13B07F951A680F5B00A75B9A /* Release */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = 94770A3A0E8E6E2756728920 /* Pods-expoliquidglassexample.release.xcconfig */;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CLANG_ENABLE_MODULES = YES;
				CODE_SIGN_ENTITLEMENTS = expoliquidglassexample/expoliquidglassexample.entitlements;
				CURRENT_PROJECT_VERSION = 1;
				INFOPLIST_FILE = expoliquidglassexample/Info.plist;
				IPHONEOS_DEPLOYMENT_TARGET = 15.1;
				LD_RUNPATH_SEARCH_PATHS = (
					"$(inherited)",
					"@executable_path/Frameworks",
				);
				MARKETING_VERSION = 1.0;
				OTHER_LDFLAGS = (
					"$(inherited)",
					"-ObjC",
					"-lc++",
				);
				OTHER_SWIFT_FLAGS = "$(inherited) -D EXPO_CONFIGURATION_RELEASE";
				PRODUCT_BUNDLE_IDENTIFIER = expo.modules.liquidglass.example;
				PRODUCT_NAME = expoliquidglassexample;
				SWIFT_OBJC_BRIDGING_HEADER = "expoliquidglassexample/expoliquidglassexample-Bridging-Header.h";
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				VERSIONING_SYSTEM = "apple-generic";
			};
			name = Release;
		};
		83CBBA201A601CBA00E9B192 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "c++20";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				ENABLE_TESTABILITY = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 15.1;
				LD_RUNPATH_SEARCH_PATHS = (
					/usr/lib/swift,
					"$(inherited)",
				);
				LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
				MTL_ENABLE_DEBUG_INFO = YES;
				ONLY_ACTIVE_ARCH = YES;
				OTHER_LDFLAGS = (
					"$(inherited)",
					" ",
				);
				REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
				SDKROOT = iphoneos;
				SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG";
				USE_HERMES = true;
			};
			name = Debug;
		};
		83CBBA211A601CBA00E9B192 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "c++20";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = YES;
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 15.1;
				LD_RUNPATH_SEARCH_PATHS = (
					/usr/lib/swift,
					"$(inherited)",
				);
				LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"$(inherited)\"";
				MTL_ENABLE_DEBUG_INFO = NO;
				OTHER_LDFLAGS = (
					"$(inherited)",
					" ",
				);
				REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
				SDKROOT = iphoneos;
				USE_HERMES = true;
				VALIDATE_PRODUCT = YES;
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "expoliquidglassexample" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				13B07F941A680F5B00A75B9A /* Debug */,
				13B07F951A680F5B00A75B9A /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "expoliquidglassexample" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				83CBBA201A601CBA00E9B192 /* Debug */,
				83CBBA211A601CBA00E9B192 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
}


================================================
FILE: example/ios/expoliquidglassexample.xcodeproj/xcshareddata/xcschemes/expoliquidglassexample.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "1130"
   version = "1.3">
   <BuildAction
      parallelizeBuildables = "YES"
      buildImplicitDependencies = "YES">
      <BuildActionEntries>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "YES"
            buildForArchiving = "YES"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
               BuildableName = "expoliquidglassexample.app"
               BlueprintName = "expoliquidglassexample"
               ReferencedContainer = "container:expoliquidglassexample.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
      </BuildActionEntries>
   </BuildAction>
   <TestAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      shouldUseLaunchSchemeArgsEnv = "YES">
      <Testables>
         <TestableReference
            skipped = "NO">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "00E356ED1AD99517003FC87E"
               BuildableName = "expoliquidglassexampleTests.xctest"
               BlueprintName = "expoliquidglassexampleTests"
               ReferencedContainer = "container:expoliquidglassexample.xcodeproj">
            </BuildableReference>
         </TestableReference>
      </Testables>
   </TestAction>
   <LaunchAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      launchStyle = "0"
      useCustomWorkingDirectory = "NO"
      ignoresPersistentStateOnLaunch = "NO"
      debugDocumentVersioning = "YES"
      debugServiceExtension = "internal"
      allowLocationSimulation = "YES">
      <BuildableProductRunnable
         runnableDebuggingMode = "0">
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
            BuildableName = "expoliquidglassexample.app"
            BlueprintName = "expoliquidglassexample"
            ReferencedContainer = "container:expoliquidglassexample.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
   </LaunchAction>
   <ProfileAction
      buildConfiguration = "Release"
      shouldUseLaunchSchemeArgsEnv = "YES"
      savedToolIdentifier = ""
      useCustomWorkingDirectory = "NO"
      debugDocumentVersioning = "YES">
      <BuildableProductRunnable
         runnableDebuggingMode = "0">
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
            BuildableName = "expoliquidglassexample.app"
            BlueprintName = "expoliquidglassexample"
            ReferencedContainer = "container:expoliquidglassexample.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
   </ProfileAction>
   <AnalyzeAction
      buildConfiguration = "Debug">
   </AnalyzeAction>
   <ArchiveAction
      buildConfiguration = "Release"
      revealArchiveInOrganizer = "YES">
   </ArchiveAction>
</Scheme>


================================================
FILE: example/ios/expoliquidglassexample.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "group:expoliquidglassexample.xcodeproj">
   </FileRef>
   <FileRef
      location = "group:Pods/Pods.xcodeproj">
   </FileRef>
</Workspace>


================================================
FILE: example/metro.config.js
================================================
// Learn more https://docs.expo.io/guides/customizing-metro
const { getDefaultConfig } = require('expo/metro-config');
const path = require('path');

const config = getDefaultConfig(__dirname);

// npm v7+ will install ../node_modules/react and ../node_modules/react-native because of peerDependencies.
// To prevent the incompatible react-native between ./node_modules/react-native and ../node_modules/react-native,
// excludes the one from the parent folder when bundling.
config.resolver.blockList = [
  ...Array.from(config.resolver.blockList ?? []),
  new RegExp(path.resolve('..', 'node_modules', 'react')),
  new RegExp(path.resolve('..', 'node_modules', 'react-native')),
];

config.resolver.nodeModulesPaths = [
  path.resolve(__dirname, './node_modules'),
  path.resolve(__dirname, '../node_modules'),
];

config.resolver.extraNodeModules = {
  'expo-liquid-glass': '..',
};

config.watchFolders = [path.resolve(__dirname, '..')];

config.transformer.getTransformOptions = async () => ({
  transform: {
    experimentalImportSupport: false,
    inlineRequires: true,
  },
});

module.exports = config;


================================================
FILE: example/package.json
================================================
{
  "name": "expo-liquid-glass-example",
  "version": "1.0.1",
  "main": "index.ts",
  "scripts": {
    "start": "expo start",
    "android": "expo run:android",
    "ios": "expo run:ios",
    "web": "expo start --web"
  },
  "dependencies": {
    "@expo/ui": "0.1.1-alpha.10",
    "@expo/vector-icons": "^14.1.0",
    "expo": "~53.0.20",
    "expo-linear-gradient": "^14.1.5",
    "expo-symbols": "^0.4.5",
    "react": "19.0.0",
    "react-native": "0.79.5",
    "react-native-animated-pagination-dots": "^0.1.73",
    "react-native-video": "^6.16.1"
  },
  "devDependencies": {
    "@babel/core": "^7.25.2",
    "@types/react": "~19.0.10",
    "typescript": "~5.8.3"
  },
  "private": true,
  "expo": {
    "autolinking": {
      "nativeModulesDir": ".."
    }
  }
}


================================================
FILE: example/screens/ComplexVideo.tsx
================================================
import {
  View,
  Text,
  StyleSheet,
  ImageBackground,
  ScrollView,
  StatusBar,
  TouchableOpacity,
  Button,
  Animated,
} from "react-native";
import React, { useState, useRef } from "react";
import {
  CornerStyle,
  ExpoLiquidGlassView,
  LiquidGlassType,
} from "expo-liquid-glass-view";
import { SymbolView } from "expo-symbols";
import {
  Ionicons,
  MaterialCommunityIcons,
  Feather,
  AntDesign,
  FontAwesome,
} from "@expo/vector-icons";
import * as constants from "../constants";
import Video from "react-native-video";

export default function App() {
  const [showEye, setShowEye] = useState<boolean>(true);
  const [currentVideoIndex, setCurrentVideoIndex] = useState(0);
  const [isTransitioning, setIsTransitioning] = useState(false);
  const overlayOpacity = useRef(new Animated.Value(0)).current;

  const videoSources = [
    require("./video/liquid-background.mp4"),
    require("./video/abstract.mp4"),
    require("./video/sunny-beach.mp4"),
  ];

  const handleVideoChange = () => {
    if (isTransitioning) return;

    setIsTransitioning(true);

    Animated.sequence([
      Animated.timing(overlayOpacity, {
        toValue: 1,
        duration: 300,
        useNativeDriver: true,
      }),

      Animated.delay(50),

      Animated.timing(overlayOpacity, {
        toValue: 0,
        duration: 300,
        useNativeDriver: true,
      }),
    ]).start(() => {
      setIsTransitioning(false);
    });

    setTimeout(() => {
      const nextIndex = (currentVideoIndex + 1) % videoSources.length;
      setCurrentVideoIndex(nextIndex);
    }, 350);
  };

  const onEyePress = () => {
    setShowEye(!showEye);
  };

  return (
    <View style={styles.container}>
      <Video
        source={videoSources[currentVideoIndex]}
        style={StyleSheet.absoluteFill}
        resizeMode="cover"
        muted={true}
        repeat={true}
        paused={false}
        playInBackground={false}
        playWhenInactive={false}
      />

      <Animated.View
        style={[
          StyleSheet.absoluteFill,
          {
            opacity: overlayOpacity,
            backgroundColor: "rgba(0,0,0,0.8)",
            zIndex: 1,
          },
        ]}
        pointerEvents="none"
      />

      <View style={[StyleSheet.absoluteFill, { zIndex: 2 }]}>
        <StatusBar barStyle="light-content" />

        <ScrollView
          contentInsetAdjustmentBehavior="always"
          contentContainerStyle={styles.scrollContainer}
          showsVerticalScrollIndicator={false}
        >
          <View style={styles.header}>
            <ExpoLiquidGlassView
              cornerRadius={25}
              cornerStyle={CornerStyle.Circular}
              type={LiquidGlassType.Clear}
              style={styles.headerGlass}
            >
              <View style={styles.headerContent}>
                <View style={styles.headerTop}>
                  <View style={styles.profileSection}>
                    <ExpoLiquidGlassView
                      cornerRadius={25}
                      cornerStyle={CornerStyle.Circular}
                      type={LiquidGlassType.Clear}
                      style={styles.profileAvatar}
                    >
                      <View style={styles.avatarContent}>
                        <Ionicons name="person" size={20} color="white" />
                      </View>
                    </ExpoLiquidGlassView>
                    <View style={styles.greetingSection}>
                      <Text style={styles.greeting}>Good Evening</Text>
                      <Text style={styles.userName}>rit3zh</Text>
                    </View>
                  </View>
                  <TouchableOpacity>
                    <ExpoLiquidGlassView
                      cornerRadius={20}
                      cornerStyle={CornerStyle.Circular}
                      type={LiquidGlassType.Clear}
                      style={styles.notificationIcon}
                    >
                      <View style={styles.iconContent}>
                        <Ionicons
                          name="notifications-outline"
                          size={18}
                          color="white"
                        />
                        <View style={styles.notificationBadge} />
                      </View>
                    </ExpoLiquidGlassView>
                  </TouchableOpacity>
                </View>
              </View>
            </ExpoLiquidGlassView>
          </View>

          <View style={styles.quickActionsSection}>
            <View style={styles.quickActionsGrid}>
              <TouchableOpacity style={styles.quickActionItem}>
                <ExpoLiquidGlassView
                  cornerRadius={30}
                  cornerStyle={CornerStyle.Circular}
                  type={LiquidGlassType.Clear}
                  style={styles.quickActionGlass}
                >
                  <View style={styles.quickActionContent}>
                    <SymbolView
                      name="creditcard"
                      size={24}
                      type="monochrome"
                      tintColor="white"
                    />
                    <Text style={styles.quickActionText}>Pay</Text>
                  </View>
                </ExpoLiquidGlassView>
              </TouchableOpacity>

              <TouchableOpacity style={styles.quickActionItem}>
                <ExpoLiquidGlassView
                  cornerRadius={30}
                  cornerStyle={CornerStyle.Circular}
                  type={LiquidGlassType.Clear}
                  style={styles.quickActionGlass}
                >
                  <View style={styles.quickActionContent}>
                    <SymbolView
                      name="arrow.up.arrow.down"
                      size={24}
                      type="monochrome"
                      tintColor="white"
                    />
                    <Text style={styles.quickActionText}>Transfer</Text>
                  </View>
                </ExpoLiquidGlassView>
              </TouchableOpacity>

              <TouchableOpacity style={styles.quickActionItem}>
                <ExpoLiquidGlassView
                  cornerRadius={30}
                  cornerStyle={CornerStyle.Circular}
                  type={LiquidGlassType.Clear}
                  style={styles.quickActionGlass}
                >
                  <View style={styles.quickActionContent}>
                    <SymbolView
                      name="plus"
                      size={24}
                      type="monochrome"
                      tintColor="white"
                    />
                    <Text style={styles.quickActionText}>Top Up</Text>
                  </View>
                </ExpoLiquidGlassView>
              </TouchableOpacity>

              <TouchableOpacity style={styles.quickActionItem}>
                <ExpoLiquidGlassView
                  cornerRadius={30}
                  cornerStyle={CornerStyle.Circular}
                  type={LiquidGlassType.Clear}
                  style={styles.quickActionGlass}
                >
                  <View style={styles.quickActionContent}>
                    <SymbolView
                      name="chart.bar"
                      size={24}
                      type="monochrome"
                      tintColor="white"
                    />
                    <Text style={styles.quickActionText}>Analytics</Text>
                  </View>
                </ExpoLiquidGlassView>
              </TouchableOpacity>
            </View>
          </View>

          <View style={styles.balanceSection}>
            <ExpoLiquidGlassView
              cornerRadius={20}
              cornerStyle={CornerStyle.Circular}
              type={LiquidGlassType.Clear}
              style={styles.balanceOverviewGlass}
            >
              <View style={styles.balanceOverviewContent}>
                <View style={styles.balanceHeader}>
                  <Text style={styles.balanceTitle}>Total Balance</Text>
                  <TouchableOpacity onPress={onEyePress}>
                    <Feather
                      name={showEye ? "eye" : "eye-off"}
                      size={18}
                      color="rgba(255,255,255,0.7)"
                    />
                  </TouchableOpacity>
                </View>
                <Text style={styles.totalBalance}>
                  {showEye ? "$12,547.85" : "**********"}
                </Text>
                <View style={styles.balanceChange}>
                  <AntDesign name="arrowup" size={12} color="#4ECDC4" />
                  <Text style={styles.changeText}>+2.5% from last month</Text>
                </View>

                <View style={styles.balanceBreakdown}>
                  <View style={styles.breakdownItem}>
                    <Text style={styles.breakdownLabel}>Checking</Text>
                    <Text style={styles.breakdownAmount}>$8,247.85</Text>
                  </View>
                  <View style={styles.breakdownItem}>
                    <Text style={styles.breakdownLabel}>Savings</Text>
                    <Text style={styles.breakdownAmount}>$4,300.00</Text>
                  </View>
                </View>
              </View>
            </ExpoLiquidGlassView>
          </View>

          <View style={styles.cardSection}>
            <View style={styles.sectionHeader}>
              <Text
                style={{
                  fontSize: 22,
                  fontWeight: "bold",
                  color: "white",
                  marginBottom: 10,
                }}
              >
                My Cards
              </Text>
              <TouchableOpacity>
                <Text style={styles.seeAllText}>See All</Text>
              </TouchableOpacity>
            </View>

            <ScrollView
              horizontal
              showsHorizontalScrollIndicator={false}
              style={styles.cardsScroll}
            >
              <ExpoLiquidGlassView
                cornerRadius={20}
                cornerStyle={CornerStyle.Circular}
                type={LiquidGlassType.Clear}
                style={styles.creditCardGlass}
              >
                <View style={styles.creditCardContent}>
                  <View style={styles.cardHeader}>
                    <ExpoLiquidGlassView
                      cornerRadius={8}
                      cornerStyle={CornerStyle.Circular}
                      type={LiquidGlassType.Clear}
                      style={styles.cardChip}
                    >
                      <View style={styles.chipContent}>
                        <MaterialCommunityIcons
                          name="chip"
                          size={20}
                          color="rgba(255,255,255,0.8)"
                        />
                      </View>
                    </ExpoLiquidGlassView>
                    <FontAwesome name="cc-visa" size={24} color="white" />
                  </View>

                  <Text style={styles.cardNumber}>2566 8478 8974 2135</Text>
                  <Text style={styles.cardHolder}>FIDAN PARAJULLAYEVA</Text>

                  <View style={styles.cardFooter}>
                    <Text style={styles.expiryDate}>10/27</Text>
                    <ExpoLiquidGlassView
                      cornerRadius={15}
                      cornerStyle={CornerStyle.Circular}
                      type={LiquidGlassType.Clear}
                      style={styles.contactlessIcon}
                    >
                      <View style={styles.contactlessContent}>
                        <MaterialCommunityIcons
                          name="contactless-payment"
                          size={16}
                          color="white"
                        />
                      </View>
                    </ExpoLiquidGlassView>
                  </View>
                </View>
              </ExpoLiquidGlassView>

              <ExpoLiquidGlassView
                cornerRadius={20}
                cornerStyle={CornerStyle.Circular}
                type={LiquidGlassType.Clear}
                style={[styles.creditCardGlass, styles.secondaryCard]}
              >
                <View style={styles.creditCardContent}>
                  <View style={styles.cardHeader}>
                    <ExpoLiquidGlassView
                      cornerRadius={8}
                      cornerStyle={CornerStyle.Circular}
                      type={LiquidGlassType.Clear}
                      style={styles.cardChip}
                    >
                      <View style={styles.chipContent}>
                        <MaterialCommunityIcons
                          name="chip"
                          size={20}
                          color="rgba(255,255,255,0.8)"
                        />
                      </View>
                    </ExpoLiquidGlassView>
                    <FontAwesome name="cc-mastercard" size={24} color="white" />
                  </View>

                  <Text style={styles.cardNumber}>4521 •••• •••• 8901</Text>
                  <Text style={styles.cardHolder}>BUSINESS CARD</Text>

                  <View style={styles.cardFooter}>
                    <Text style={styles.expiryDate}>08/26</Text>
                    <ExpoLiquidGlassView
                      cornerRadius={15}
                      cornerStyle={CornerStyle.Circular}
                      type={LiquidGlassType.Clear}
                      style={styles.contactlessIcon}
                    >
                      <View style={styles.contactlessContent}>
                        <MaterialCommunityIcons
                          name="contactless-payment"
                          size={16}
                          color="white"
                        />
                      </View>
                    </ExpoLiquidGlassView>
                  </View>
                </View>
              </ExpoLiquidGlassView>
            </ScrollView>
          </View>

          <View style={styles.analyticsSection}>
            <Text
              style={{
                fontSize: 22,
                fontWeight: "bold",
                color: "white",
                marginBottom: 30,
                marginTop: 20,
              }}
            >
              This Month's Spending
            </Text>

            <ExpoLiquidGlassView
              cornerRadius={20}
              cornerStyle={CornerStyle.Circular}
              type={LiquidGlassType.Clear}
              style={{
                width: "100%",
                height: 250,
              }}
            >
              <View style={styles.analyticsContent}>
                <View style={styles.spendingHeader}>
                  <Text style={styles.spentAmount}>$2,847.32</Text>
                  <Text style={styles.spentLabel}>of $5,000 budget</Text>
                </View>

                <View style={styles.progressBar}>
                  <View style={styles.progressFill} />
                </View>

                <View style={styles.categoriesGrid}>
                  <View style={styles.categoryItem}>
                    <ExpoLiquidGlassView
                      cornerRadius={15}
                      cornerStyle={CornerStyle.Circular}
                      type={LiquidGlassType.Clear}
                      style={styles.categoryIcon}
                    >
                      <View style={styles.categoryIconContent}>
                        <SymbolView
                          name="fork.knife"
                          size={16}
                          type="monochrome"
                          tintColor="#FF6B6B"
                        />
                      </View>
                    </ExpoLiquidGlassView>
                    <Text style={styles.categoryLabel}>Food</Text>
                    <Text style={styles.categoryAmount}>$847</Text>
                  </View>

                  <View style={styles.categoryItem}>
                    <ExpoLiquidGlassView
                      cornerRadius={15}
                      cornerStyle={CornerStyle.Circular}
                      type={LiquidGlassType.Clear}
                      style={styles.categoryIcon}
                    >
                      <View style={styles.categoryIconContent}>
                        <SymbolView
                          name="car"
                          size={16}
                          type="monochrome"
                          tintColor="#4ECDC4"
                        />
                      </View>
                    </ExpoLiquidGlassView>
                    <Text style={styles.categoryLabel}>Transport</Text>
                    <Text style={styles.categoryAmount}>$234</Text>
                  </View>

                  <View style={styles.categoryItem}>
                    <ExpoLiquidGlassView
                      cornerRadius={15}
                      cornerStyle={CornerStyle.Circular}
                      type={LiquidGlassType.Clear}
                      style={styles.categoryIcon}
                    >
                      <View style={styles.categoryIconContent}>
                        <SymbolView
                          name="bag"
                          size={16}
                          type="monochrome"
                          tintColor="#FFD93D"
                        />
                      </View>
                    </ExpoLiquidGlassView>
                    <Text style={styles.categoryLabel}>Shopping</Text>
                    <Text style={styles.categoryAmount}>$1,245</Text>
                  </View>

                  <View style={styles.categoryItem}>
                    <ExpoLiquidGlassView
                      cornerRadius={15}
                      cornerStyle={CornerStyle.Circular}
                      type={LiquidGlassType.Clear}
                      style={styles.categoryIcon}
                    >
                      <View style={styles.categoryIconContent}>
                        <SymbolView
                          name="gamecontroller"
                          size={16}
                          type="monochrome"
                          tintColor="#A8E6CF"
                        />
                      </View>
                    </ExpoLiquidGlassView>
                    <Text style={styles.categoryLabel}>Entertainment</Text>
                    <Text style={styles.categoryAmount}>$521</Text>
                  </View>
                </View>
              </View>
            </ExpoLiquidGlassView>
          </View>

          <View style={styles.transactionsSection}>
            <View style={styles.sectionHeader}>
              <Text
                style={{
                  fontSize: 22,
                  fontWeight: "bold",
                  color: "white",
                  marginBottom: 3,
                }}
              >
                Recent Transactions
              </Text>
            </View>

            <ExpoLiquidGlassView
              cornerRadius={18}
              cornerStyle={CornerStyle.Circular}
              type={LiquidGlassType.Clear}
              style={{
                width: "100%",
                height: 125,
              }}
            >
              <View style={styles.transactionContent}>
                <View style={{ flexDirection: "row", bottom: 10 }}>
                  <ExpoLiquidGlassView
                    cornerRadius={22}
                    cornerStyle={CornerStyle.Circular}
                    type={LiquidGlassType.Clear}
                    style={styles.transactionIcon}
                  >
                    <View style={styles.transactionIconContent}>
                      <SymbolView
                        name="cup.and.saucer"
                        size={20}
                        type="monochrome"
                        tintColor="#FF6B6B"
                      />
                    </View>
                  </ExpoLiquidGlassView>
                  <View style={styles.transactionDetails}>
                    <Text style={styles.transactionName}>Friends Cafe</Text>
                    <Text style={styles.transactionLocation}>
                      182 9th Ave, New York
                    </Text>
                    <Text style={styles.transactionTime}>Today, 2:30 PM</Text>
                  </View>
                  <View style={styles.transactionRight}>
                    <Text style={styles.transactionAmount}>-$64.00</Text>
                    <MaterialCommunityIcons
                      name="contactless-payment"
                      size={14}
                      color="rgba(255,255,255,0.6)"
                    />
                  </View>
                </View>
              </View>
            </ExpoLiquidGlassView>

            <ExpoLiquidGlassView
              cornerRadius={18}
              cornerStyle={CornerStyle.Circular}
              type={LiquidGlassType.Clear}
              style={{
                width: "100%",
                height: 125,
              }}
            >
              <View style={styles.transactionContent}>
                <View style={{ flexDirection: "row", bottom: 10 }}>
                  <ExpoLiquidGlassView
                    cornerRadius={22}
                    cornerStyle={CornerStyle.Circular}
                    type={LiquidGlassType.Clear}
                    style={styles.transactionIcon}
                  >
                    <View style={styles.transactionIconContent}>
                      <SymbolView
                        name="house"
                        size={20}
                        type="monochrome"
                        tintColor="#4ECDC4"
                      />
                    </View>
                  </ExpoLiquidGlassView>
                  <View style={styles.transactionDetails}>
                    <Text style={styles.transactionName}>House Rent</Text>
                    <Text style={styles.transactionLocation}>
                      Monthly Payment
                    </Text>
                    <Text style={styles.transactionTime}>Dec 19, 9:00 AM</Text>
                  </View>
                  <View style={styles.transactionRight}>
                    <Text style={styles.transactionAmountLarge}>
                      -$1,685.00
                    </Text>
                    <Feather
                      name="repeat"
                      size={14}
                      color="rgba(255,255,255,0.6)"
                    />
                  </View>
                </View>
              </View>
            </ExpoLiquidGlassView>

            <ExpoLiquidGlassView
              cornerRadius={18}
              cornerStyle={CornerStyle.Circular}
              type={LiquidGlassType.Clear}
              style={{
                width: "100%",
                height: 125,
              }}
            >
              <View style={styles.transactionContent}>
                <View style={{ flexDirection: "row", bottom: 10 }}>
                  <ExpoLiquidGlassView
                    cornerRadius={22}
                    cornerStyle={CornerStyle.Circular}
                    type={LiquidGlassType.Clear}
                    style={styles.transactionIcon}
                  >
                    <View style={styles.transactionIconContent}>
                      <SymbolView
                        name="arrow.down"
                        size={20}
                        type="monochrome"
                        tintColor="#A8E6CF"
                      />
                    </View>
                  </ExpoLiquidGlassView>
                  <View style={styles.transactionDetails}>
                    <Text style={styles.transactionName}>Salary Deposit</Text>
                    <Text style={styles.transactionLocation}>
                      Monthly Salary
                    </Text>
                    <Text style={styles.transactionTime}>Dec 15, 8:00 AM</Text>
                  </View>
                  <View style={styles.transactionRight}>
                    <Text style={styles.transactionAmountPositive}>
                      +$5,200.00
                    </Text>
                    <AntDesign name="checkcircle" size={14} color="#A8E6CF" />
                  </View>
                </View>
              </View>
            </ExpoLiquidGlassView>
          </View>

          <View style={styles.goalsSection}>
            <Text
              style={{
                fontSize: 22,
                fontWeight: "bold",
                color: "white",
                marginBottom: 30,
              }}
            >
              Savings Goals
            </Text>

            <ExpoLiquidGlassView
              cornerRadius={20}
              cornerStyle={CornerStyle.Circular}
              type={LiquidGlassType.Clear}
              style={styles.goalGlass}
            >
              <View style={styles.goalContent}>
                <View style={styles.goalHeader}>
                  <ExpoLiquidGlassView
                    cornerRadius={20}
                    cornerStyle={CornerStyle.Circular}
                    type={LiquidGlassType.Clear}
                    style={styles.goalIcon}
                  >
                    <View style={styles.goalIconContent}>
                      <SymbolView
                        name="airplane"
                        size={20}
                        type="monochrome"
                        tintColor="#FFD93D"
                      />
                    </View>
                  </ExpoLiquidGlassView>
                  <View style={styles.goalInfo}>
                    <Text style={styles.goalTitle}>Vacation Fund</Text>
                    <Text style={styles.goalDescription}>Trip to Japan</Text>
                  </View>
                  <Text style={styles.goalPercentage}>68%</Text>
                </View>

                <View style={styles.goalProgress}>
                  <View style={styles.goalProgressBar}>
                    <View style={styles.goalProgressFill} />
                  </View>
                  <Text style={styles.goalAmount}>$3,400 of $5,000</Text>
                </View>
              </View>
            </ExpoLiquidGlassView>

            <Button
              title="Change Background Video"
              color={"white"}
              onPress={handleVideoChange}
            />
          </View>
        </ScrollView>
      </View>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
  },
  scrollContainer: {
    flexGrow: 1,
    padding: 20,
    paddingTop: 60,
    paddingBottom: 40,
  },
  header: {
    marginBottom: 25,
  },
  headerGlass: {
    width: "100%",
    height: 90,
  },
  headerContent: {
    flex: 1,
    padding: 20,
    justifyContent: "center",
  },
  headerTop: {
    flexDirection: "row",
    justifyContent: "space-between",
    alignItems: "center",
  },
  profileSection: {
    flexDirection: "row",
    alignItems: "center",
  },
  profileAvatar: {
    width: 50,
    height: 50,
    marginRight: 15,
  },
  avatarContent: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  greetingSection: {
    flex: 1,
  },
  greeting: {
    fontSize: 14,
    color: "rgba(255, 255, 255, 0.7)",
    marginBottom: 2,
  },
  userName: {
    fontSize: 18,
    fontWeight: "600",
    color: "white",
  },
  notificationIcon: {
    width: 40,
    height: 40,
    right: 40,
  },
  iconContent: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  notificationBadge: {
    position: "absolute",
    top: 8,
    right: 8,
    width: 8,
    height: 8,
    borderRadius: 4,
    backgroundColor: "#FF6B6B",
  },
  quickActionsSection: {
    marginBottom: 25,
  },
  quickActionsGrid: {
    flexDirection: "row",
    justifyContent: "space-between",
  },
  quickActionItem: {
    flex: 1,
    marginHorizontal: 5,
  },
  quickActionGlass: {
    width: "100%",
    height: 80,
  },
  quickActionContent: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  quickActionText: {
    fontSize: 12,
    color: "white",
    marginTop: 8,
    fontWeight: "500",
  },
  balanceSection: {
    marginBottom: 25,
  },
  balanceOverviewGlass: {
    width: "100%",
    height: 200,
  },
  balanceOverviewContent: {
    flex: 1,
    padding: 25,
  },
  balanceHeader: {
    flexDirection: "row",
    justifyContent: "space-between",
    alignItems: "center",
    marginBottom: 15,
  },
  balanceTitle: {
    fontSize: 16,
    color: "rgba(255, 255, 255, 0.8)",
  },
  totalBalance: {
    fontSize: 36,
    fontWeight: "bold",
    color: "white",
    marginBottom: 8,
  },
  balanceChange: {
    flexDirection: "row",
    alignItems: "center",
    marginBottom: 20,
  },
  changeText: {
    fontSize: 14,
    color: "#4ECDC4",
    marginLeft: 5,
  },
  balanceBreakdown: {
    flexDirection: "row",
    justifyContent: "space-between",
  },
  breakdownItem: {
    flex: 1,
  },
  breakdownLabel: {
    fontSize: 12,
    color: "rgba(255, 255, 255, 0.6)",
    marginBottom: 4,
  },
  breakdownAmount: {
    fontSize: 16,
    fontWeight: "600",
    color: "white",
  },
  cardSection: {
    marginBottom: 25,
  },
  sectionHeader: {
    flexDirection: "row",
    justifyContent: "space-between",
    alignItems: "center",
    marginBottom: 15,
  },
  sectionTitle: {
    fontSize: 22,
    fontWeight: "bold",
    color: "white",
    marginBottom: 40,
  },
  seeAllText: {
    fontSize: 14,
    color: "#4ECDC4",
    fontWeight: "500",
  },
  cardsScroll: {
    flexDirection: "row",
  },
  creditCardGlass: {
    width: 280,
    height: 180,
    marginRight: 15,
  },
  secondaryCard: {
    backgroundColor: "rgba(0, 0, 0, 0.2)",
  },
  creditCardContent: {
    flex: 1,
    padding: 20,
    justifyContent: "space-between",
  },
  cardHeader: {
    flexDirection: "row",
    justifyContent: "space-between",
    alignItems: "center",
  },
  cardChip: {
    width: 40,
    height: 32,
  },
  chipContent: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  visaText: {
    fontSize: 18,
    fontWeight: "bold",
    color: "white",
    fontStyle: "italic",
  },
  mastercardText: {
    fontSize: 14,
    fontWeight: "bold",
    color: "white",
  },
  cardNumber: {
    fontSize: 20,
    fontWeight: "600",
    color: "white",
    letterSpacing: 2,
    marginTop: 20,
  },
  cardHolder: {
    fontSize: 12,
    color: "rgba(255, 255, 255, 0.9)",
    fontWeight: "500",
  },
  cardFooter: {
    flexDirection: "row",
    justifyContent: "space-between",
    alignItems: "center",
  },
  expiryDate: {
    fontSize: 14,
    color: "rgba(255, 255, 255, 0.9)",
  },
  contactlessIcon: {
    width: 30,
    height: 30,
  },
  contactlessContent: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  analyticsSection: {
    marginBottom: 25,
  },
  analyticsGlass: {
    width: "100%",
    height: 240,
  },
  analyticsContent: {
    flex: 1,
    padding: 25,
  },
  spendingHeader: {
    marginBottom: 15,
  },
  spentAmount: {
    fontSize: 28,
    fontWeight: "bold",
    color: "white",
    marginBottom: 5,
  },
  spentLabel: {
    fontSize: 14,
    color: "rgba(255, 255, 255, 0.7)",
  },
  progressBar: {
    height: 8,
    backgroundColor: "rgba(255, 255, 255, 0.2)",
    borderRadius: 4,
    marginBottom: 20,
    overflow: "hidden",
  },
  progressFill: {
    height: "100%",
    width: "57%",
    backgroundColor: "#4ECDC4",
    borderRadius: 4,
  },
  categoriesGrid: {
    flexDirection: "row",
    justifyContent: "space-between",
  },
  categoryItem: {
    alignItems: "center",
    flex: 1,
  },
  categoryIcon: {
    width: 30,
    height: 30,
    marginBottom: 8,
  },
  categoryIconContent: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  categoryLabel: {
    fontSize: 12,
    color: "rgba(255, 255, 255, 0.7)",
    marginBottom: 4,
  },
  categoryAmount: {
    fontSize: 14,
    fontWeight: "600",
    color: "white",
  },
  transactionsSection: {
    marginBottom: 25,
    gap: 12,
  },
  transactionGlass: {
    width: "100%",
    height: 85,
  },
  transactionContent: {
    flex: 1,
    flexDirection: "row",
    alignItems: "center",
    paddingHorizontal: 20,
  },
  transactionIcon: {
    width: 44,
    height: 44,
    marginRight: 15,
  },
  transactionIconContent: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  transactionDetails: {
    flex: 1,
  },
  transactionName: {
    fontSize: 16,
    fontWeight: "600",
    color: "white",
    marginBottom: 2,
  },
  transactionLocation: {
    fontSize: 12,
    color: "rgba(255, 255, 255, 0.6)",
    marginBottom: 2,
  },
  transactionTime: {
    fontSize: 12,
    color: "rgba(255, 255, 255, 0.5)",
  },
  transactionRight: {
    alignItems: "flex-end",
  },
  transactionAmount: {
    fontSize: 16,
    fontWeight: "bold",
    color: "#FF6B6B",
    marginBottom: 4,
  },
  transactionAmountLarge: {
    fontSize: 16,
    fontWeight: "bold",
    color: "#FF6B6B",
    marginBottom: 4,
  },
  transactionAmountPositive: {
    fontSize: 16,
    fontWeight: "bold",
    color: "#A8E6CF",
    marginBottom: 4,
  },
  goalsSection: {
    marginBottom: 25,
  },
  goalGlass: {
    width: "100%",
    height: 170,
  },
  goalContent: {
    flex: 1,
    padding: 20,
  },
  goalHeader: {
    flexDirection: "row",
    alignItems: "center",
    marginBottom: 15,
  },
  goalIcon: {
    width: 40,
    height: 40,
    marginRight: 15,
  },
  goalIconContent: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  goalInfo: {
    flex: 1,
  },
  goalTitle: {
    fontSize: 16,
    fontWeight: "600",
    color: "white",
    marginBottom: 2,
  },
  goalDescription: {
    fontSize: 12,
    color: "rgba(255, 255, 255, 0.6)",
  },
  goalPercentage: {
    fontSize: 18,
    fontWeight: "bold",
    color: "#FFD93D",
  },
  goalProgress: {
    gap: 8,
  },
  goalProgressBar: {
    height: 8,
    backgroundColor: "rgba(255, 255, 255, 0.2)",
    borderRadius: 4,
    overflow: "hidden",
  },
  goalProgressFill: {
    height: "100%",
    width: "68%",
    backgroundColor: "#FFD93D",
    borderRadius: 4,
  },
  goalAmount: {
    fontSize: 14,
    color: "rgba(255, 255, 255, 0.8)",
    fontWeight: "500",
  },
});


================================================
FILE: example/tsconfig.json
================================================
{
  "extends": "expo/tsconfig.base",
  "compilerOptions": {
    "strict": true,
    "paths": {
      "expo-liquid-glass-view": ["../src/index"],
      "expo-liquid-glass-view/*": ["../src/*"]
    }
  }
}


================================================
FILE: example/webpack.config.js
================================================
const createConfigAsync = require('@expo/webpack-config');
const path = require('path');

module.exports = async (env, argv) => {
  const config = await createConfigAsync(
    {
      ...env,
      babel: {
        dangerouslyAddModulePathsToTranspile: ['expo-liquid-glass'],
      },
    },
    argv
  );
  config.resolve.modules = [
    path.resolve(__dirname, './node_modules'),
    path.resolve(__dirname, '../node_modules'),
  ];

  return config;
};


================================================
FILE: expo-module.config.json
================================================
{
  "platforms": ["apple"],
  "apple": {
    "modules": ["ExpoLiquidGlassModule"]
  }
}


================================================
FILE: ios/ExpoLiquidGlass.podspec
================================================
require 'json'

package = JSON.parse(File.read(File.join(__dir__, '..', 'package.json')))

Pod::Spec.new do |s|
  s.name           = 'ExpoLiquidGlass'
  s.version        = package['version']
  s.summary        = package['description']
  s.description    = package['description']
  s.license        = package['license']
  s.author         = package['author']
  s.homepage       = package['homepage']
  s.platforms      = {
    :ios => '15.1',
    :tvos => '15.1'
  }
  s.swift_version  = '5.4'
  s.source         = { git: 'https://github.com/rit3zh/expo-liquid-glass' }
  s.static_framework = true

  s.dependency 'ExpoModulesCore'

  # Swift/Objective-C compatibility
  s.pod_target_xcconfig = {
    'DEFINES_MODULE' => 'YES',
  }

  s.source_files = "**/*.{h,m,mm,swift,hpp,cpp}"
end


================================================
FILE: ios/ExpoLiquidGlassContainer.swift
================================================
//
//  ExpoLiquidGlassContainer.swift
//  Pods
//
//  Created by rit3zh CX on 9/19/25.
//

import ExpoModulesCore
import SwiftUI

class ExpoLiquidGlassContainerProps: ExpoSwiftUI.ViewProps {
    @Field var spacing: CGFloat = 0
    @Field var horizontal: Bool
    
}

struct ExpoLiquidGlassContainer: ExpoSwiftUI.View, ExpoSwiftUI.WithHostingView {
  @ObservedObject var props: ExpoLiquidGlassContainerProps
  
    var body: some View {
        if #available(iOS 26.0, *) {
            GlassEffectContainer(spacing: props.spacing) {
                if props.horizontal {
                    HStack(spacing: props.spacing){
                        Children()
                    }
                } else {
                    VStack(spacing: props.spacing){
                        Children()
                    }
                }
                
            }
        
        } else  {
            Children()
        }
    }
}


================================================
FILE: ios/ExpoLiquidGlassModule.swift
================================================
import ExpoModulesCore

public class ExpoLiquidGlassModule: Module {

    public func definition() -> ModuleDefinition {
        Name("ExpoLiquidGlass")
        View(ExpoLiquidGlassView.self)
        View(ExpoLiquidGlassContainer.self)
        
    }
}


================================================
FILE: ios/ExpoLiquidGlassView.swift
================================================
import ExpoModulesCore
import SwiftUI

class ExpoLiquidGlassViewProps: ExpoSwiftUI.ViewProps {
    @Field var cornerRadius: CGFloat = 5
    @Field var type: String
    @Field var cornerStyle: String
    @Field var tint: String
    @Field var isInteractive: Bool
}

struct ExpoLiquidGlassView: ExpoSwiftUI.View, ExpoSwiftUI.WithHostingView {
    @ObservedObject var props: ExpoLiquidGlassViewProps
    
    var body: some View {
        if #available(iOS 26.0, *) {
            if hasChildren {
                Children()
                    .glassEffect(
                        getGlassEffect(
                            from: props.type,
                            color: props.tint,
                            interactive: props.isInteractive
                        ),
                        in: .rect(
                            cornerRadius: props.cornerRadius,
                            style: getCornerRadiusStyle(from: props.cornerStyle)
                        )
                    )
            } else {
                RoundedRectangle(
                    cornerRadius: props.cornerRadius,
                    style: getCornerRadiusStyle(from: props.cornerStyle)
                )
                .fill(Color.clear)
                .frame(width: 100, height: 100)
                .glassEffect(
                    getGlassEffect(
                        from: props.type,
                        color: props.tint,
                        interactive: props.isInteractive
                    ),
                    in: .rect(
                        cornerRadius: props.cornerRadius,
                        style: getCornerRadiusStyle(from: props.cornerStyle)
                    )
                )
            }
        } else {
            if hasChildren {
                Children()
            } else {
                RoundedRectangle(
                    cornerRadius: props.cornerRadius,
                    style: getCornerRadiusStyle(from: props.cornerStyle)
                )
                .fill(Color.clear)
                .frame(width: 100, height: 100)
            }
        }
    }
    
    
    private var hasChildren: Bool {
        
        !(Children().data.isEmpty)
    }
}

private func getCornerRadiusStyle(from style: String) -> RoundedCornerStyle {
    switch style.lowercased() {
    case "continuous":
        return .continuous
    case "circular":
        return .circular
    default:
        return .continuous
    }
}

@available(iOS 26.0, *)
private func getGlassEffect(from type: String, color: String, interactive: Bool) -> Glass {
    var glass: Glass
    switch type.lowercased() {
    case "clear":
        glass = .clear
    case "identity":
        glass = .identity
    case "regular":
        glass = .regular
    case "tint":
        glass = .regular.tint(Color(hex: color))
    default:
        glass = .clear
    }
    
    if interactive {
        return glass.interactive()
    }
    
    return glass
}

extension Color {
    init(hex: String) {
        let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
        var int: UInt64 = 0
        Scanner(string: hex).scanHexInt64(&int)
        let a, r, g, b: UInt64
        switch hex.count {
        case 3:
            (a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
        case 6:
            (a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
        case 8:
            (a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
        default:
            (a, r, g, b) = (1, 1, 1, 0)
        }

        self.init(
            .sRGB,
            red: Double(r) / 255,
            green: Double(g) / 255,
            blue:  Double(b) / 255,
            opacity: Double(a) / 255
        )
    }
}


================================================
FILE: package.json
================================================
{
  "name": "expo-liquid-glass-view",
  "version": "0.1.10",
  "description": " 🚀 Native liquid glass 🧊 views for Expo. Powered by SwiftUI + expo-modules-core ",
  "main": "build/index.js",
  "types": "build/index.d.ts",
  "scripts": {
    "build": "expo-module build",
    "clean": "expo-module clean",
    "lint": "expo-module lint",
    "test": "expo-module test",
    "prepare": "expo-module prepare",
    "release": "standard-version",
    "prepublishOnly": "expo-module prepublishOnly",
    "expo-module": "expo-module",
    "open:ios": "xed example/ios",
    "open:android": "open -a \"Android Studio\" example/android"
  },
  "keywords": [
    "react-native",
    "expo",
    "expo-liquid-glass",
    "ExpoLiquidGlass"
  ],
  "repository": "https://github.com/rit3zh/expo-liquid-glass-view",
  "bugs": {
    "url": "https://github.com/rit3zh/expo-liquid-glass-view/issues"
  },
  "author": "Ritesh. <119659853+rit3zh@users.noreply.github.com> (https://github.com/rit3zh)",
  "license": "MIT",
  "homepage": "https://github.com/rit3zh/expo-liquid-glass-view#readme",
  "devDependencies": {
    "@types/react": "~19.0.0",
    "expo": "~53.0.0",
    "expo-module-scripts": "^4.1.9",
    "react-native": "0.79.1",
    "standard-version": "^9.5.0"
  },
  "peerDependencies": {
    "expo": "*",
    "react": "*",
    "react-native": "*"
  }
}


================================================
FILE: src/ExpoLiquidGlassContainer.tsx
================================================
import { requireNativeView } from "expo";
import * as React from "react";
import { StyleProp, StyleSheet, View, ViewStyle } from "react-native";

interface ExpoLiquidGlassContainerProps {
  morph?: number;
  style?: StyleProp<ViewStyle>;
  children?: React.ReactNode;
}

const NativeView: React.ComponentType<any> = requireNativeView<any>(
  "ExpoLiquidGlass",
  "ExpoLiquidGlassContainer"
);
export function ExpoLiquidGlassContainer(props: ExpoLiquidGlassContainerProps) {
  return (
    <NativeView
      {...props}
      spacing={props.morph ?? 200}
      style={[styles.wrapper, props.style]}
      key={Math.random().toString()}
    >
      <View style={styles.container}>{props.children}</View>
    </NativeView>
  );
}

const styles = StyleSheet.create({
  wrapper: {
    // alignSelf: "flex-start",
  },
  container: {
    alignSelf: "flex-start",
    flexShrink: 1,
  },
});


================================================
FILE: src/ExpoLiquidGlassView.tsx
================================================
import { requireNativeView } from "expo";
import * as React from "react";
import { StyleSheet, View } from "react-native";
import type { ExpoLiquidGlassViewProps } from "./ExpoLiquidGlassView.types";

const NativeView: React.ComponentType<ExpoLiquidGlassViewProps> =
  requireNativeView<ExpoLiquidGlassViewProps>(
    "ExpoLiquidGlass",
    "ExpoLiquidGlassView"
  );

export function ExpoLiquidGlassView(props: ExpoLiquidGlassViewProps) {
  const { children, containerStyle, style, ...nativeProps } = props;

  return (
    <NativeView
      {...nativeProps}
      style={[styles.wrapper, style]}
    >
      {children ? (
        <View style={[styles.container, containerStyle]}>{children}</View>
      ) : null}
    </NativeView>
  );
}

const styles = StyleSheet.create({
  wrapper: {
    alignSelf: "flex-start",
  },
  container: {
    alignSelf: "flex-start",
    flexShrink: 1,
  },
});


================================================
FILE: src/ExpoLiquidGlassView.types.ts
================================================
import * as React from "react";
import type { StyleProp, ViewStyle } from "react-native";

export enum CornerStyle {
  Continuous = "continuous",
  Circular = "circular",
}

export enum LiquidGlassType {
  Clear = "clear",
  Tint = "tint",
  Regular = "regular",
  Interactive = "interactive",
  Identity = "identity",
}

export interface ExpoLiquidGlassViewProps {
  type?: LiquidGlassType;
  tint?: string;
  cornerRadius?: number;
  isInteractive?: boolean;
  cornerStyle?: CornerStyle;
  style?: StyleProp<ViewStyle>;
  containerStyle?: StyleProp<ViewStyle>;
  children?: React.ReactNode;
}


================================================
FILE: src/index.ts
================================================
export * from "./ExpoLiquidGlassView";
export * from "./ExpoLiquidGlassContainer";
export { CornerStyle, LiquidGlassType } from "./ExpoLiquidGlassView.types";


================================================
FILE: tsconfig.json
================================================
// @generated by expo-module-scripts
{
  "extends": "expo-module-scripts/tsconfig.base",
  "compilerOptions": {
    "outDir": "./build"
  },
  "include": ["./src"],
  "exclude": ["**/__mocks__/*", "**/__tests__/*", "**/__rsc_tests__/*"]
}
Download .txt
gitextract_ulmtrhno/

├── .eslintrc.js
├── .gitignore
├── .npmignore
├── CHANGELOG.md
├── README.md
├── example/
│   ├── .gitignore
│   ├── App.tsx
│   ├── app.json
│   ├── babel.config.js
│   ├── constants.ts
│   ├── index.ts
│   ├── ios/
│   │   ├── .gitignore
│   │   ├── .spm.pods/
│   │   │   └── packages/
│   │   │       └── .umbrella/
│   │   │           ├── .build/
│   │   │           │   └── workspace-state.json
│   │   │           └── Package.swift
│   │   ├── .xcode.env
│   │   ├── Podfile
│   │   ├── Podfile.properties.json
│   │   ├── expoliquidglassexample/
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Images.xcassets/
│   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Contents.json
│   │   │   │   ├── SplashScreenBackground.colorset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── SplashScreenLogo.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── Info.plist
│   │   │   ├── PrivacyInfo.xcprivacy
│   │   │   ├── SplashScreen.storyboard
│   │   │   ├── Supporting/
│   │   │   │   └── Expo.plist
│   │   │   ├── expoliquidglassexample-Bridging-Header.h
│   │   │   └── expoliquidglassexample.entitlements
│   │   ├── expoliquidglassexample.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   └── xcshareddata/
│   │   │       └── xcschemes/
│   │   │           └── expoliquidglassexample.xcscheme
│   │   └── expoliquidglassexample.xcworkspace/
│   │       └── contents.xcworkspacedata
│   ├── metro.config.js
│   ├── package.json
│   ├── screens/
│   │   └── ComplexVideo.tsx
│   ├── tsconfig.json
│   └── webpack.config.js
├── expo-module.config.json
├── ios/
│   ├── ExpoLiquidGlass.podspec
│   ├── ExpoLiquidGlassContainer.swift
│   ├── ExpoLiquidGlassModule.swift
│   └── ExpoLiquidGlassView.swift
├── package.json
├── src/
│   ├── ExpoLiquidGlassContainer.tsx
│   ├── ExpoLiquidGlassView.tsx
│   ├── ExpoLiquidGlassView.types.ts
│   └── index.ts
└── tsconfig.json
Download .txt
SYMBOL INDEX (11 symbols across 6 files)

FILE: example/App.tsx
  constant WIDTH (line 13) | const WIDTH: number = 300;
  constant HEIGHT (line 14) | const HEIGHT: number = 300;
  constant BORDER_RADIUS (line 15) | const BORDER_RADIUS: number = 999;

FILE: example/constants.ts
  constant BACKGROUND_URL (line 1) | const BACKGROUND_URL: string = `https://i.pinimg.com/736x/79/ab/04/79ab0...

FILE: example/screens/ComplexVideo.tsx
  function App (line 29) | function App() {

FILE: src/ExpoLiquidGlassContainer.tsx
  type ExpoLiquidGlassContainerProps (line 5) | interface ExpoLiquidGlassContainerProps {
  function ExpoLiquidGlassContainer (line 15) | function ExpoLiquidGlassContainer(props: ExpoLiquidGlassContainerProps) {

FILE: src/ExpoLiquidGlassView.tsx
  function ExpoLiquidGlassView (line 12) | function ExpoLiquidGlassView(props: ExpoLiquidGlassViewProps) {

FILE: src/ExpoLiquidGlassView.types.ts
  type CornerStyle (line 4) | enum CornerStyle {
  type LiquidGlassType (line 9) | enum LiquidGlassType {
  type ExpoLiquidGlassViewProps (line 17) | interface ExpoLiquidGlassViewProps {
Condensed preview — 47 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (112K chars).
[
  {
    "path": ".eslintrc.js",
    "chars": 113,
    "preview": "module.exports = {\n  root: true,\n  extends: ['universe/native', 'universe/web'],\n  ignorePatterns: ['build'],\n};\n"
  },
  {
    "path": ".gitignore",
    "chars": 593,
    "preview": "# OSX\n#\n.DS_Store\n\n# VSCode\n.vscode/\njsconfig.json\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1"
  },
  {
    "path": ".npmignore",
    "chars": 247,
    "preview": "# Exclude all top-level hidden directories by convention\n/.*/\n\n# Exclude tarballs generated by `npm pack`\n/*.tgz\n\n__mock"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 768,
    "preview": "# Changelog\n\nAll notable changes to this project will be documented in this file. See [standard-version](https://github."
  },
  {
    "path": "README.md",
    "chars": 4325,
    "preview": "<p align=\"center\">\n  <img src=\"./assets/liquid-glass.jpg\" alt=\"Expo Liquid Glass View\" style=\"width:100%; max-width:800p"
  },
  {
    "path": "example/.gitignore",
    "chars": 398,
    "preview": "# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files\n\n# dependencies\nnode_modules"
  },
  {
    "path": "example/App.tsx",
    "chars": 3571,
    "preview": "import {\n  View,\n  Text,\n  StyleSheet,\n  SafeAreaView,\n  TouchableOpacity,\n  ImageBackground,\n} from \"react-native\";\nimp"
  },
  {
    "path": "example/app.json",
    "chars": 791,
    "preview": "{\n  \"expo\": {\n    \"name\": \"expo-liquid-glass-example\",\n    \"slug\": \"expo-liquid-glass-example\",\n    \"version\": \"1.0.0\",\n"
  },
  {
    "path": "example/babel.config.js",
    "chars": 108,
    "preview": "module.exports = function (api) {\n  api.cache(true);\n  return {\n    presets: ['babel-preset-expo'],\n  };\n};\n"
  },
  {
    "path": "example/constants.ts",
    "chars": 803,
    "preview": "export const BACKGROUND_URL: string = `https://i.pinimg.com/736x/79/ab/04/79ab04ae66154a34c2518a69bf6c6a23.jpg`;\nexport "
  },
  {
    "path": "example/index.ts",
    "chars": 307,
    "preview": "import { registerRootComponent } from 'expo';\n\nimport App from './App';\n\n// registerRootComponent calls AppRegistry.regi"
  },
  {
    "path": "example/ios/.gitignore",
    "chars": 321,
    "preview": "# OSX\n#\n.DS_Store\n\n# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.p"
  },
  {
    "path": "example/ios/.spm.pods/packages/.umbrella/.build/workspace-state.json",
    "chars": 125,
    "preview": "{\n  \"object\" : {\n    \"artifacts\" : [\n\n    ],\n    \"dependencies\" : [\n\n    ],\n    \"prebuilts\" : [\n\n    ]\n  },\n  \"version\" "
  },
  {
    "path": "example/ios/.spm.pods/packages/.umbrella/Package.swift",
    "chars": 128,
    "preview": "// swift-tools-version:5.7\nimport PackageDescription\n\nlet package = Package(\n  name: \"_umbrella_\",\n  dependencies: [\n   "
  },
  {
    "path": "example/ios/.xcode.env",
    "chars": 482,
    "preview": "# This `.xcode.env` file is versioned and is used to source the environment\n# used when running script phases inside Xco"
  },
  {
    "path": "example/ios/Podfile",
    "chars": 2480,
    "preview": "require File.join(File.dirname(`node --print \"require.resolve('expo/package.json')\"`), \"scripts/autolinking\")\nrequire Fi"
  },
  {
    "path": "example/ios/Podfile.properties.json",
    "chars": 105,
    "preview": "{\n  \"expo.jsEngine\": \"hermes\",\n  \"EX_DEV_CLIENT_NETWORK_INSPECTOR\": \"true\",\n  \"newArchEnabled\": \"true\"\n}\n"
  },
  {
    "path": "example/ios/expoliquidglassexample/AppDelegate.swift",
    "chars": 2275,
    "preview": "import Expo\nimport React\nimport ReactAppDependencyProvider\n\n@UIApplicationMain\npublic class AppDelegate: ExpoAppDelegate"
  },
  {
    "path": "example/ios/expoliquidglassexample/Images.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 215,
    "preview": "{\n  \"images\": [\n    {\n      \"filename\": \"App-Icon-1024x1024@1x.png\",\n      \"idiom\": \"universal\",\n      \"platform\": \"ios\""
  },
  {
    "path": "example/ios/expoliquidglassexample/Images.xcassets/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"expo\"\n  }\n}\n"
  },
  {
    "path": "example/ios/expoliquidglassexample/Images.xcassets/SplashScreenBackground.colorset/Contents.json",
    "chars": 348,
    "preview": "{\n  \"colors\": [\n    {\n      \"color\": {\n        \"components\": {\n          \"alpha\": \"1.000\",\n          \"blue\": \"1.00000000"
  },
  {
    "path": "example/ios/expoliquidglassexample/Images.xcassets/SplashScreenLogo.imageset/Contents.json",
    "chars": 358,
    "preview": "{\n  \"images\": [\n    {\n      \"idiom\": \"universal\",\n      \"filename\": \"image.png\",\n      \"scale\": \"1x\"\n    },\n    {\n      "
  },
  {
    "path": "example/ios/expoliquidglassexample/Info.plist",
    "chars": 2415,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "example/ios/expoliquidglassexample/PrivacyInfo.xcprivacy",
    "chars": 1283,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "example/ios/expoliquidglassexample/SplashScreen.storyboard",
    "chars": 3562,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
  },
  {
    "path": "example/ios/expoliquidglassexample/Supporting/Expo.plist",
    "chars": 364,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "example/ios/expoliquidglassexample/expoliquidglassexample-Bridging-Header.h",
    "chars": 102,
    "preview": "//\n// Use this file to import your target's public headers that you would like to expose to Swift.\n//\n"
  },
  {
    "path": "example/ios/expoliquidglassexample/expoliquidglassexample.entitlements",
    "chars": 182,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "example/ios/expoliquidglassexample.xcodeproj/project.pbxproj",
    "chars": 24150,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 54;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "example/ios/expoliquidglassexample.xcodeproj/xcshareddata/xcschemes/expoliquidglassexample.xcscheme",
    "chars": 3450,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1130\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "example/ios/expoliquidglassexample.xcworkspace/contents.xcworkspacedata",
    "chars": 240,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:expoliquidglas"
  },
  {
    "path": "example/metro.config.js",
    "chars": 1112,
    "preview": "// Learn more https://docs.expo.io/guides/customizing-metro\nconst { getDefaultConfig } = require('expo/metro-config');\nc"
  },
  {
    "path": "example/package.json",
    "chars": 770,
    "preview": "{\n  \"name\": \"expo-liquid-glass-example\",\n  \"version\": \"1.0.1\",\n  \"main\": \"index.ts\",\n  \"scripts\": {\n    \"start\": \"expo s"
  },
  {
    "path": "example/screens/ComplexVideo.tsx",
    "chars": 34337,
    "preview": "import {\n  View,\n  Text,\n  StyleSheet,\n  ImageBackground,\n  ScrollView,\n  StatusBar,\n  TouchableOpacity,\n  Button,\n  Ani"
  },
  {
    "path": "example/tsconfig.json",
    "chars": 204,
    "preview": "{\n  \"extends\": \"expo/tsconfig.base\",\n  \"compilerOptions\": {\n    \"strict\": true,\n    \"paths\": {\n      \"expo-liquid-glass-"
  },
  {
    "path": "example/webpack.config.js",
    "chars": 456,
    "preview": "const createConfigAsync = require('@expo/webpack-config');\nconst path = require('path');\n\nmodule.exports = async (env, a"
  },
  {
    "path": "expo-module.config.json",
    "chars": 88,
    "preview": "{\n  \"platforms\": [\"apple\"],\n  \"apple\": {\n    \"modules\": [\"ExpoLiquidGlassModule\"]\n  }\n}\n"
  },
  {
    "path": "ios/ExpoLiquidGlass.podspec",
    "chars": 785,
    "preview": "require 'json'\n\npackage = JSON.parse(File.read(File.join(__dir__, '..', 'package.json')))\n\nPod::Spec.new do |s|\n  s.name"
  },
  {
    "path": "ios/ExpoLiquidGlassContainer.swift",
    "chars": 930,
    "preview": "//\n//  ExpoLiquidGlassContainer.swift\n//  Pods\n//\n//  Created by rit3zh CX on 9/19/25.\n//\n\nimport ExpoModulesCore\nimport"
  },
  {
    "path": "ios/ExpoLiquidGlassModule.swift",
    "chars": 253,
    "preview": "import ExpoModulesCore\n\npublic class ExpoLiquidGlassModule: Module {\n\n    public func definition() -> ModuleDefinition {"
  },
  {
    "path": "ios/ExpoLiquidGlassView.swift",
    "chars": 3800,
    "preview": "import ExpoModulesCore\nimport SwiftUI\n\nclass ExpoLiquidGlassViewProps: ExpoSwiftUI.ViewProps {\n    @Field var cornerRadi"
  },
  {
    "path": "package.json",
    "chars": 1345,
    "preview": "{\n  \"name\": \"expo-liquid-glass-view\",\n  \"version\": \"0.1.10\",\n  \"description\": \" 🚀 Native liquid glass 🧊 views for Expo. "
  },
  {
    "path": "src/ExpoLiquidGlassContainer.tsx",
    "chars": 884,
    "preview": "import { requireNativeView } from \"expo\";\nimport * as React from \"react\";\nimport { StyleProp, StyleSheet, View, ViewStyl"
  },
  {
    "path": "src/ExpoLiquidGlassView.tsx",
    "chars": 895,
    "preview": "import { requireNativeView } from \"expo\";\nimport * as React from \"react\";\nimport { StyleSheet, View } from \"react-native"
  },
  {
    "path": "src/ExpoLiquidGlassView.types.ts",
    "chars": 595,
    "preview": "import * as React from \"react\";\nimport type { StyleProp, ViewStyle } from \"react-native\";\n\nexport enum CornerStyle {\n  C"
  },
  {
    "path": "src/index.ts",
    "chars": 159,
    "preview": "export * from \"./ExpoLiquidGlassView\";\nexport * from \"./ExpoLiquidGlassContainer\";\nexport { CornerStyle, LiquidGlassType"
  },
  {
    "path": "tsconfig.json",
    "chars": 239,
    "preview": "// @generated by expo-module-scripts\n{\n  \"extends\": \"expo-module-scripts/tsconfig.base\",\n  \"compilerOptions\": {\n    \"out"
  }
]

About this extraction

This page contains the full source code of the rit3zh/expo-liquid-glass-view GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 47 files (99.1 KB), approximately 28.2k tokens, and a symbol index with 11 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!