3.1.0 โ€ข Published 4 months ago

react-native-ios-context-menu v3.1.0

Weekly downloads
73
License
MIT
Repository
github
Last release
4 months ago

react-native-ios-context-menu

A small component for using context menu's on iOS.

context-menu-example-demo

๐Ÿšงโš ๏ธ Notices โš ๏ธ๐Ÿšง

๐Ÿ“ Version 2.x Notice: Hello, please note that versions 2.x and below of this library are no longer supported; please do not submit an issue if the version you are using is below 3.x.

  • If you really need a fix for the particular issue/bug, please create a repro and add a test case in the examples directory via a pull request in the main branch; i will investigate the bug, and backport the fix from 3.x to 2.x if the changes are relatively simple.
  • I apologize but i do not have the resources to maintain multiple versions of this library; all issues must be reproducible from 3.x first before i can backport the changes to an older version of this library.
  • Please understand that a PR for the repro is crucial; i cannot work on the fix if i don't have a repro to start on; words describing the issue is not enough due to the language barrier. Once you've created a test case, please tag me on the PR so i get notified.
  • Summary: I will fix the bugs you encounter, however i cannot work on fixing them until a repro/test case is created in the examples directory. Thank you for understanding.

๐Ÿ“ Documentation Notice: See TODO.md for progress.

  • The documentation is incomplete (some parts/sections are marked as TBA i.e. "to be added").
  • Some of the links in the documentation are broken (i.e. the URL points to PLACE_HOLDER_LINK).
  • Some of the gifs/images are old, or broken.
  • For now, please see the Usage And Examples section, and Showcase, Tests and Demos section for information on how to use this library.

Notice
๐Ÿ“ Note #1: Version 3.x is a rewrite of this library to support both fabric (the new architecture), and offer backwards compatibility to paper (the old architecture). Support for the new architecture (fabric), and backwards compatibility for the old architecture (paper) is handled via a peer via a peer dependency to react-native-ios-utilites@v5.
๐Ÿ“ Note #2: The documentation + examples are currently being rewritten.โค๏ธ README-old-v1.md โ€” Documentation for v1.x๐Ÿงก README-old-v2.md โ€” Documentation for v2.x๐Ÿ’› example/src/examples โ€” The typescript rewrite of the examples (WIP).

Versions

Library VersionCompatibility
3.x+Depends on react-native-ios-utilities@5.xDepends on ContextMenuAuxiliaryPreviewiOS 13+Xcode 15+
2.1Uses Expo-ModulesDepends on react-native-ios-utilities@4.xDepends on ContextMenuAuxiliaryPreviewiOS 13+Xcode 15+
2.0.xUses Expo-ModulesDepends on react-native-ios-utilities@4.xiOS 13+Xcode 15+
1.6.2iOS 10 to iOS 15Xcode 12+
1.4iOS 10 to iOS 15Xcode 13+
1.3 and BelowiOS 10 to 14Xcode 12+

Table of Contents

Sections and Links
A. Introductionโ€ข Gifs and Demosโ€ข Features
B. Installationโ€ข Expoโ€ข Troubleshooting--โ€ข Xcode Build Error (Swift)--โ€ข Xcode Build Error (Undefined symbol)
C. Basic Usage
D. Documentationโ€ข D.1. Components--โ€ข ContextMenuView Component----โ€ข Props----โ€ข Event Props----โ€ข Properties/Methods----โ€ข Experimental - Aux. Preview--โ€ข ContextMenuButton Component----โ€ข Props----โ€ข Event Props----โ€ข Properties/Methodsโ€ข D.2. Context--โ€ข ContextMenuButtonContext--โ€ข ContextMenuButtonContextโ€ข D.3. Hooks--โ€ข useMenuContext--โ€ข useMenuButtonContextโ€ข D.4. Objects and Types--โ€ข MenuConfig.ts----โ€ข Object Type: MenuConfig----โ€ข Object Type: MenuActionConfig----โ€ข Object Type: DeferredMenuElementConfig----โ€ข String Union: MenuAttributes----โ€ข String Union: MenuState----โ€ข String Union: UIMenuOptions--โ€ข MenuPreviewConfig.ts----โ€ข Object Type: MenuPreviewConfig----โ€ข String Union: ContextMenuInteractionCommitStyle----โ€ข String Union: MenuPreviewSize----โ€ข String Union: MenuPreviewType--โ€ข MenuAuxiliaryPreviewConfig.ts----โ€ข Object Type: MenuAuxiliaryPreviewConfig----โ€ข String Union Type: MenuAuxiliaryPreviewAnchorPosition----โ€ข String Union Type: MenuAuxiliaryPreviewHorizontalAlignment----โ€ข String Union Type: UIViewAnimateOptions----โ€ข Object Type: UIViewAnimateConfig----โ€ข Object Type: MenuAuxiliaryPreviewBaseTransitionConfig----โ€ข Object Union Type: MenuAuxiliaryPreviewTransitionConfig----โ€ข Mixed Union Type: MenuAuxiliaryPreviewTransitionEntranceDelay--โ€ข MenuIconConfig.ts--โ€ข ImageItemConfig.ts----โ€ข Object Type: ImageItemConfig----โ€ข Object Type: ImageResolvedAssetSource----โ€ข Object Type: ImageRectConfig----โ€ข Object Type: ImageGradientConfig----โ€ข Object Type: ImageSystemConfig--โ€ข Undocumented Typesโ€ข D.5. Constants
E. Usage And Examples๐Ÿ“ Note: See Example Index section for a complete list of examples + their descriptions.
F. Showcase, Tests and Demos
G. Meta
H. Licence

TOC: Examples Index

Examples
๐Ÿ“Œ ContextMenuView Example 01๐Ÿ’ญ Summary: A basic context menu that has 3 menu action items.
๐Ÿ“Œ ContextMenuView Example 02๐Ÿ’ญ Summary: Icon Example โ€” A basic context menu that has 3 menu action items, each with a different "SF Symbols" icon. This examples shows how to add a system icon in the context menu action.
๐Ÿ“Œ ContextMenuView Example 03๐Ÿ’ญ Summary: Nested Menu โ€” This example shows a context menu that has a submenu item inside its list of menu actions.
๐Ÿ“Œ ContextMenuView Example 04๐Ÿ’ญ Summary: Menu Attributes โ€” This example context menu showcases the MenuActionConfig.menuAttributes property.
๐Ÿ“Œ ContextMenuView Example 05๐Ÿ’ญ Summary: Nested Menu + Menu Attributes โ€” A context menu that has a in-line submenu.
๐Ÿ“Œ ContextMenuView Example 06๐Ÿ’ญ Summary: Menu Options โ€” A context menu that has a destructive submenu.
๐Ÿ“Œ ContextMenuView Example 07๐Ÿ’ญ Summary: Menu Options โ€” A context menu that set to be both "destructive" and "display in-line".
๐Ÿ“Œ ContextMenuView Example 08๐Ÿ’ญ Summary: Menu State โ€” A context menu with 3 actions that has 'on', 'off', and 'mixed' menuState.
๐Ÿ“Œ ContextMenuView Example 09๐Ÿ’ญ Summary: Events โ€” An example for the onPressMenuItem event prop.
๐Ÿ“Œ ContextMenuView Example 10๐Ÿ’ญ Summary: Dynamic Menu โ€” An example showing how to dynamically update the context menu while it's visible. In this example, the menu action changes every time the counter increments every second.
๐Ÿ“Œ ContextMenuView Example 11๐Ÿ’ญ Summary: Context Menu Previews โ€” An example showing how to use a custom preview for the context menu.
๐Ÿ“Œ ContextMenuView Example 12๐Ÿ’ญ Summary: Context Menu Previews โ€” An example showing a custom context menu preview that dynamically changes its size due to its contents updating every second.
๐Ÿ“Œ ContextMenuView Example 13๐Ÿ’ญ Summary: Menu Action โ€” An example showing how to add a subtitle to menu action.
๐Ÿ“Œ ContextMenuView Example 14๐Ÿ’ญ Summary: Context Menu Previews โ€” An example that changes the exit transition of the context menu preview when its tapped using the preferredCommitStyle config.
๐Ÿ“Œ ContextMenuView Example 15๐Ÿ’ญ Summary: Context Menu Previews โ€” An example showing how to configure a context menu that uses targeted previews.
๐Ÿ“Œ ContextMenuView Example 15-02๐Ÿ’ญ Summary: Context Menu Previews (Cont). โ€” An example showing how to configure a context menu that uses targeted previews + WrapperView.
๐Ÿ“Œ ContextMenuView Example 16๐Ÿ’ญ Summary: Icon Example โ€” An example showing a context menu with an action that uses a 'IMAGE_ASSET' image for its icon.
๐Ÿ“Œ ContextMenuView Example 17๐Ÿ’ญ Summary: Icon Example โ€” An example showing a context menu with action items that have different colored icons.
๐Ÿ“Œ ContextMenuView Example 18๐Ÿ’ญ Summary: Icon Example โ€” An example showing a context menu with action items that has icons that uses local image assets imported via require(...).
๐Ÿ“Œ ContextMenuView Example 19๐Ÿ’ญ Summary: Dynamic Menu โ€” An example showing a context menu that has a loading indicator using deferred menu elements.
๐Ÿ“Œ ContextMenuView Example 20๐Ÿ’ญ Summary: Dynamic Menu โ€” An example showing a state-controlled context menu that shows a loading indicator using deferred menu elements.
๐Ÿ“Œ ContextMenuView Example 21๐Ÿ’ญ Summary: Menu Element Size โ€” TBA
๐Ÿ“Œ ContextMenuView Example 22๐Ÿ’ญ Summary: Menu Element Size โ€” TBA
๐Ÿ“Œ ContextMenuView Example 23๐Ÿ’ญ Summary: Menu Element Size โ€” TBA
๐Ÿ“Œ ContextMenuView Example 24๐Ÿ’ญ Summary: Menu Attributes โ€” keepsMenuPresented
๐Ÿ“Œ ContextMenuView Example 25๐Ÿ’ญ Summary: Icon Example โ€” Advanced customization (E.g. scale, weight, paletteColors, hierarchicalColor).
๐Ÿ“Œ ContextMenuView Example 26๐Ÿ’ญ Summary: Icon Example โ€” Network/Remote images as icons.
๐Ÿ“Œ ContextMenuView Example 27๐Ÿ’ญ Summary: Icon Example โ€” Network/Remote images as icons + fallback image.
๐Ÿ“Œ ContextMenuView Example 28๐Ÿ’ญ Summary: Programmatically shows the context menu.
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 01๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 02๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 03๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 04๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 05๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 06๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 07๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 08๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 09๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 10๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 11๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 12๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 13๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 14๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 15๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 16๐Ÿ’ญ Summary: Programmatically shows the auxiliary preview as a popover (w/o showing the context menu).
๐Ÿ“Œ ContextMenuButton Example 01๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuButton Example 02๐Ÿ’ญ Summary: TBA

Acknowledgements

Development and maintenance of this library was generously sponsored by beatgig from 11/15/2023 to 04/30/2024 at $1,535/month (totaling โ‰ˆ $9,100 over the course of 6 months) ๐Ÿฅ๐ŸŽธ

The initial fabric rewrite (i.e. version 3.x) was made possible through a generous $3,750 sponsorship by natew + tamagui over the course of 4 months (from: 05/27/24 to 09/30/24) ๐Ÿฆโœจ

very special thanks to: junzhengca, brentvatne, expo, EvanBacon, corasan, lauridskern, ronintechnologies, and gerzonc for becoming a monthly sponsor, and thank you fobos531 for being a one time sponsor ๐Ÿฅบ (if you have the means to do so, please considering sponsoring here)

A. Introduction

A react native component to use UIMenu on iOS 13 and later.

Gifs and Demos

๐Ÿ“ Note: These gifs are from an older version of the library running on iOS 13 (see Usage And Examples section for updated example gifs).

ContextMenuView Examples, Left: Example 1, Example 2, and Right: Example 3, Example 4 Simple Example 1 to 4 Gifs

ContextMenuView examples, Left: Example 5, Example 6, and Right: Example 7, Example 8 Simple Example 5 to 8 Gifs

ContextMenuView example, Left: Example 9, and Right: Example 10 Simple Example 9 and 8 Gifs

ContextMenuView examples, Left: Example 11, Example 12, and Right: Example 13, Example 14 Simple Example 11 to 14 Gifs

ContextMenuView examples, Left: Example 15, Example 16, and Right: Example 17, Example 18 Simple Example 11 to 14 Gifs

ContextMenuView tests, Left: Test 1, and Right: Test 2 Context Menu View Test 1 and 2 Gifs

ContextMenuView tests, Left: Test 3, and Right: Test 4 Context Menu View Test 3 and 4 Gifs

ContextMenuView tests, Left: Test 5, and Right: Test 6 Context Menu View Test 5 and 6 Gifs

ContextMenuView tests, Left/Right: Test 7 Context Menu View 7 Gifs

ContextMenuView ActionSheetIOS fallback for simple example 1 to 9 Action Sheet Fallback for Simple Example 1 to 9 Gifs

ContextMenuView ActionSheetIOS fallback for context menu view test 1 to 6 (removed in v3.x+). Action Sheet Fallback for Context Menu View Test 1 to 6 Gifs

ContextMenuButton examples, Left: Example 1, and Right: Example 2 Simple Example 1 and 2 Gifs

Features

  • Support for creating menu actions and submenus (i.e. nested and in-line menus).
  • Support for customizing the menu icons (i.e. support for SF Symbols, require(image), and xcasset icons, icon tint, etc).
  • Extensive support for SF Symbols configuration (e.g. pointSize, weight, scale, hierarchicalColor, paletteColors).
  • Support for iOS 14 functionality (like the UIButton context menu, dynamically updating the menu while it's visible, etc).
  • Support for setting (almost) all of the native UIMenu and ๏ฟผUIAction properties (e.g. UIMenuElementState, MenuElementAtrributes, discoverabilityTitle, etc.)
  • Basic ActionSheetIOS menu fallback for iOS 12 and below (removed in v3.x+).
  • Support for creating custom context menu previews (with support for dynamic or fixed preview sizes, setting the UIPreviewParameters, specifying a UITargetedPreview, etc).
  • Support for custom auxiliary previews (experimental).
  • Support for deferred context menu items.

B. Installation

# 1. install library + dependencies
npm install react-native-ios-utilities@next
npm install react-native-ios-context-menu@next

# 2. then run pod install (uses auto-linking)
cd ios && pod install

๐Ÿ“ Note A: You might encounter some build errors since this library is written in swift, so there's some extra step involved to use this library (see table below for reference).

๐Ÿ“ Note B: If you want to use an older or different version of this library, please refer to versions section's compatibility table.

Additional Steps
1๏ธโƒฃ Add an empty swift file to your project
2๏ธโƒฃ Update the project's "Library Search Paths" build settings

Updating

This library has cocoapods dependency to ContextMenuAuxiliaryPreview and DGSwiftUtilities, so you may need to update them separately (as needed).

# A. Either update this specific pod...
pod update ContextMenuAuxiliaryPreview DGSwiftUtilities
pod install --repo-update

# B. Or update all the pods
pod update

Expo

Versions and Dependencies

Library VersionDependencies + Versions
2.0.xreact-native-ios-utilities - 4.x
2.1.xreact-native-ios-utilities - 4.xContextMenuAuxiliaryPreview - 0.1.x
2.2.xreact-native-ios-utilities - 4.xContextMenuAuxiliaryPreview - 0.2.x

Troubleshooting

If you encounter any errors/bugs while using this library, or want a particular feature implemented, please create an issue (my inbox is a mess, please feel free to tag me). โœจ

Troubleshooting: Xcode Build Error (Swift)

๐Ÿ“ Note: This library is written in swift. If you are having trouble building your app after installing this library, try adding an empty swift file to your project:

  1. Open up your ios/project.xcworkspace project
  2. On the project navigator panel (located on the right side of Xcode), right click on your project group (or another folder/group i.e the blue or yellow icons) and select the "New File..." option
  3. In the popup sheet, select "Swift" as the template and then click the "Next" button
  4. A "Save As" popup sheet should appear and then click "Create" (you can rename the file first if you want to)
  5. If Xcode asks you to create a "Objective-C Bridging Header" choose "Create Objective-C Bridging Header"

Troubleshooting: Xcode Build Error (Undefined symbol)

When installing this library on Xcode 12+, you'll get the following error in Xcode:

Xcode linking build error

Undefined symbol: (extension in UIKit):
__C.UIMenu.init(title: Swift.String, image: __C.UIImage?, identifier: __C.UIMenuIdentifier?, options: __C.UIMenuOptions, children: [__C.UIMenuElement]) -> __C.UIMenu

Undefined symbol: (extension in UIKit):
__C.UIAction.init(title: Swift.String, image: __C.UIImage?, identifier: __C.UIActionIdentifier?, discoverabilityTitle: Swift.String?, attributes: __C.UIMenuElementAttributes, state: __C.UIMenuElementState, handler: (__C.UIAction) -> ()) -> __C.UIAction

To fix this, see screenshot + follow the steps below:

Xcode - Remove library search paths

  1. Open your ios/project.xcworkspace project.
  2. In the project navigator panel (located on the right side of Xcode), select your project group (i.e. the item with the blueprint icon).
  3. The Xcode project editor should appear. In the left panel, under the "Project" section, select your project (if it isn't already selected).
  4. In the project section's top tab bar, select the "Build Settings" tab (also make sure the "All" and "Combined" tabs are selected).
  5. In the project navigator list, under the "Search Path" section, there should be a "Library Search Paths" setting (alternatively, you can search for "Library Search Paths" in the search bar).
  6. According to this issue comment, you can clear all the items listed in the "Library Search Paths" setting by selecting the items in the list, and pressing the "-" button in the popover.
    • TLDR: Xcode automatically manages this setting, and the RN template hardcodes it to use Swift 5.0.
    • Alternatively, you can change the entry "$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)" to "$(TOOLCHAIN_DIR)/usr/lib/swift-5.3/$(PLATFORM_NAME)" i.e. change swift-5.0 to swift-5.3, or whatever the newest version of swift that comes with your Xcode installation (to show the popup dialog, double click the value/item).
  7. If you haven't already, make sure to create an empty swift file. Then clean the build folder (the option is in the menu bar under: "Product" -> "Clean Build Folder") and try building your project again.
  8. If you are still having problems building the app, try the following and build your project again:
  • Try clearing out Xcode's derivedData directory: rm -rf ~/Library/Developer/Xcode/DerivedData/* (check out this gist for instructions on how to clean up Xcode)
  • Try clearing out the Cocoapods cache: rm -rf "${HOME}/Library/Caches/CocoaPods" (and then try running pod install again).

Xcode - Remove library search paths

Explanation: Some versions of the react-native template hard codes the swift library search paths to use swift 5.0 (which causes the linker to mismatch the swift system libraries bundled with your Xcode + iOS/Simulator installation).

Here are some related issues in the RN repo: Issue 30202 and Issue 29178.

C. Basic Usage

For more examples, check out the Usage And Examples section.

๐Ÿ”— Full Example

import * as React from 'react';
import { StyleSheet, Text } from 'react-native';

import { ContextMenuView } from 'react-native-ios-context-menu';

export function BasicUsageExample01() {
  return (
    <ContextMenuView
      style={styles.container}
      menuConfig={{
        menuTitle: 'BasicUsageExample01',
        menuItems: [{
          actionKey  : 'key-01',
          actionTitle: 'Action #1',
        }, {
          actionKey  : 'key-02'   ,
          actionTitle: 'Action #2',
        }, {
          actionKey  : 'key-03'   ,
          actionTitle: 'Action #3',
        }],
      }}
    >
      <Text style={styles.text}>
        Press And Hold To Show Context Menu
      </Text>
    </ContextMenuView>
  );
};

const styles = StyleSheet.create({
  container: {
    margin: 10,
    padding: 10,
  },
  text: {
    fontSize: 16,
  },
});

react-native-ios-context-menu

A small component for using context menu's on iOS.

context-menu-example-demo

๐Ÿšงโš ๏ธ Documentation WIP โš ๏ธ๐Ÿšง

๐Ÿ“ Note: See TODO.md for progress.

  • The documentation is incomplete (some parts/sections are marked as TBA i.e. "to be added").
  • Some of the links in the documentation are broken (i.e. the URL points to PLACE_HOLDER_LINK).
  • Some of the gifs/images are old, or broken.
  • For now, please see the Usage And Examples section, and Showcase, Tests and Demos section for information on how to use this library.

Notice
๐Ÿ“ Note #1: Version 3.x is a rewrite of this library to support both fabric (the new architecture), and offer backwards compatibility to paper (the old architecture). Support for the new architecture (fabric), and backwards compatibility for the old architecture (paper) is handled via a peer via a peer dependency to react-native-ios-utilites@v5.
๐Ÿ“ Note #2: The documentation + examples are currently being rewritten.โค๏ธ README-old-v1.md โ€” Documentation for v1.x๐Ÿงก README-old-v2.md โ€” Documentation for v2.x๐Ÿ’› example/src/examples โ€” The typescript rewrite of the examples (WIP).

Versions

Library VersionCompatibility
3.x+Depends on react-native-ios-utilities@5.xDepends on ContextMenuAuxiliaryPreviewiOS 13+Xcode 15+
2.1Uses Expo-ModulesDepends on react-native-ios-utilities@4.xDepends on ContextMenuAuxiliaryPreviewiOS 13+Xcode 15+
2.0.xUses Expo-ModulesDepends on react-native-ios-utilities@4.xiOS 13+Xcode 15+
1.6.2iOS 10 to iOS 15Xcode 12+
1.4iOS 10 to iOS 15Xcode 13+
1.3 and BelowiOS 10 to 14Xcode 12+

Table of Contents

Sections and Links
A. Introductionโ€ข Gifs and Demosโ€ข Features
B. Installationโ€ข Expoโ€ข Troubleshooting--โ€ข Xcode Build Error (Swift)--โ€ข Xcode Build Error (Undefined symbol)
C. Basic Usage
D. Documentationโ€ข D.1. Components--โ€ข ContextMenuView Component----โ€ข Props----โ€ข Event Props----โ€ข Properties/Methods----โ€ข Experimental - Aux. Preview--โ€ข ContextMenuButton Component----โ€ข Props----โ€ข Event Props----โ€ข Properties/Methodsโ€ข D.2. Context--โ€ข ContextMenuButtonContext--โ€ข ContextMenuButtonContextโ€ข D.3. Hooks--โ€ข useMenuContext--โ€ข useMenuButtonContextโ€ข D.4. Objects and Types--โ€ข MenuConfig.ts----โ€ข Object Type: MenuConfig----โ€ข Object Type: MenuActionConfig----โ€ข Object Type: DeferredMenuElementConfig----โ€ข String Union: MenuAttributes----โ€ข String Union: MenuState----โ€ข String Union: UIMenuOptions--โ€ข MenuPreviewConfig.ts----โ€ข Object Type: MenuPreviewConfig----โ€ข String Union: ContextMenuInteractionCommitStyle----โ€ข String Union: MenuPreviewSize----โ€ข String Union: MenuPreviewType--โ€ข MenuAuxiliaryPreviewConfig.ts----โ€ข Object Type: MenuAuxiliaryPreviewConfig----โ€ข String Union Type: MenuAuxiliaryPreviewAnchorPosition----โ€ข String Union Type: MenuAuxiliaryPreviewHorizontalAlignment----โ€ข String Union Type: UIViewAnimateOptions----โ€ข Object Type: UIViewAnimateConfig----โ€ข Object Type: MenuAuxiliaryPreviewBaseTransitionConfig----โ€ข Object Union Type: MenuAuxiliaryPreviewTransitionConfig----โ€ข Mixed Union Type: MenuAuxiliaryPreviewTransitionEntranceDelay--โ€ข MenuIconConfig.ts--โ€ข ImageItemConfig.ts----โ€ข Object Type: ImageItemConfig----โ€ข Object Type: ImageResolvedAssetSource----โ€ข Object Type: ImageRectConfig----โ€ข Object Type: ImageGradientConfig----โ€ข Object Type: ImageSystemConfig--โ€ข Undocumented Typesโ€ข D.5. Constants
E. Usage And Examples๐Ÿ“ Note: See Example Index section for a complete list of examples + their descriptions.
F. Showcase, Tests and Demos
G. Meta
H. Licence

TOC: Examples Index

Examples
๐Ÿ“Œ ContextMenuView Example 01๐Ÿ’ญ Summary: A basic context menu that has 3 menu action items.
๐Ÿ“Œ ContextMenuView Example 02๐Ÿ’ญ Summary: Icon Example โ€” A basic context menu that has 3 menu action items, each with a different "SF Symbols" icon. This examples shows how to add a system icon in the context menu action.
๐Ÿ“Œ ContextMenuView Example 03๐Ÿ’ญ Summary: Nested Menu โ€” This example shows a context menu that has a submenu item inside its list of menu actions.
๐Ÿ“Œ ContextMenuView Example 04๐Ÿ’ญ Summary: Menu Attributes โ€” This example context menu showcases the MenuActionConfig.menuAttributes property.
๐Ÿ“Œ ContextMenuView Example 05๐Ÿ’ญ Summary: Nested Menu + Menu Attributes โ€” A context menu that has a in-line submenu.
๐Ÿ“Œ ContextMenuView Example 06๐Ÿ’ญ Summary: Menu Options โ€” A context menu that has a destructive submenu.
๐Ÿ“Œ ContextMenuView Example 07๐Ÿ’ญ Summary: Menu Options โ€” A context menu that set to be both "destructive" and "display in-line".
๐Ÿ“Œ ContextMenuView Example 08๐Ÿ’ญ Summary: Menu State โ€” A context menu with 3 actions that has 'on', 'off', and 'mixed' menuState.
๐Ÿ“Œ ContextMenuView Example 09๐Ÿ’ญ Summary: Events โ€” An example for the onPressMenuItem event prop.
๐Ÿ“Œ ContextMenuView Example 10๐Ÿ’ญ Summary: Dynamic Menu โ€” An example showing how to dynamically update the context menu while it's visible. In this example, the menu action changes every time the counter increments every second.
๐Ÿ“Œ ContextMenuView Example 11๐Ÿ’ญ Summary: Context Menu Previews โ€” An example showing how to use a custom preview for the context menu.
๐Ÿ“Œ ContextMenuView Example 12๐Ÿ’ญ Summary: Context Menu Previews โ€” An example showing a custom context menu preview that dynamically changes its size due to its contents updating every second.
๐Ÿ“Œ ContextMenuView Example 13๐Ÿ’ญ Summary: Menu Action โ€” An example showing how to add a subtitle to menu action.
๐Ÿ“Œ ContextMenuView Example 14๐Ÿ’ญ Summary: Context Menu Previews โ€” An example that changes the exit transition of the context menu preview when its tapped using the preferredCommitStyle config.
๐Ÿ“Œ ContextMenuView Example 15๐Ÿ’ญ Summary: Context Menu Previews โ€” An example showing how to configure a context menu that uses targeted previews.
๐Ÿ“Œ ContextMenuView Example 15-02๐Ÿ’ญ Summary: Context Menu Previews (Cont). โ€” An example showing how to configure a context menu that uses targeted previews + WrapperView.
๐Ÿ“Œ ContextMenuView Example 16๐Ÿ’ญ Summary: Icon Example โ€” An example showing a context menu with an action that uses a 'IMAGE_ASSET' image for its icon.
๐Ÿ“Œ ContextMenuView Example 17๐Ÿ’ญ Summary: Icon Example โ€” An example showing a context menu with action items that have different colored icons.
๐Ÿ“Œ ContextMenuView Example 18๐Ÿ’ญ Summary: Icon Example โ€” An example showing a context menu with action items that has icons that uses local image assets imported via require(...).
๐Ÿ“Œ ContextMenuView Example 19๐Ÿ’ญ Summary: Dynamic Menu โ€” An example showing a context menu that has a loading indicator using deferred menu elements.
๐Ÿ“Œ ContextMenuView Example 20๐Ÿ’ญ Summary: Dynamic Menu โ€” An example showing a state-controlled context menu that shows a loading indicator using deferred menu elements.
๐Ÿ“Œ ContextMenuView Example 21๐Ÿ’ญ Summary: Menu Element Size โ€” TBA
๐Ÿ“Œ ContextMenuView Example 22๐Ÿ’ญ Summary: Menu Element Size โ€” TBA
๐Ÿ“Œ ContextMenuView Example 23๐Ÿ’ญ Summary: Menu Element Size โ€” TBA
๐Ÿ“Œ ContextMenuView Example 24๐Ÿ’ญ Summary: Menu Attributes โ€” keepsMenuPresented
๐Ÿ“Œ ContextMenuView Example 25๐Ÿ’ญ Summary: Icon Example โ€” Advanced customization (E.g. scale, weight, paletteColors, hierarchicalColor).
๐Ÿ“Œ ContextMenuView Example 26๐Ÿ’ญ Summary: Icon Example โ€” Network/Remote images as icons.
๐Ÿ“Œ ContextMenuView Example 27๐Ÿ’ญ Summary: Icon Example โ€” Network/Remote images as icons + fallback image.
๐Ÿ“Œ ContextMenuView Example 28๐Ÿ’ญ Summary: Programmatically shows the context menu.
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 01๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 02๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 03๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 04๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 05๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 06๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 07๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 08๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 09๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 10๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 11๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 12๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 13๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 14๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 15๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuView Auxiliary Preview - Example 16๐Ÿ’ญ Summary: Programmatically shows the auxiliary preview as a popover (w/o showing the context menu).
๐Ÿ“Œ ContextMenuButton Example 01๐Ÿ’ญ Summary: TBA
๐Ÿ“Œ ContextMenuButton Example 02๐Ÿ’ญ Summary: TBA

Acknowledgements

Development and maintenance of this library was generously sponsored by beatgig from 11/15/2023 to 04/30/2024 at $1,535/month (totaling โ‰ˆ $9,100 over the course of 6 months) ๐Ÿฅ๐ŸŽธ

The initial fabric rewrite (i.e. version 3.x) was made possible through a generous $3,750 sponsorship by natew + tamagui over the course of 4 months (from: 05/27/24 to 09/30/24) ๐Ÿฆโœจ

very special thanks to: junzhengca, brentvatne, expo, EvanBacon, corasan, lauridskern, ronintechnologies, and gerzonc for becoming a monthly sponsor, and thank you fobos531 for being a one time sponsor ๐Ÿฅบ (if you have the means to do so, please considering sponsoring here)

A. Introduction

A react native component to use UIMenu on iOS 13 and later.

Gifs and Demos

๐Ÿ“ Note: These gifs are from an older version of the library running on iOS 13 (see Usage And Examples section for updated example gifs).

ContextMenuView Examples, Left: Example 1, Example 2, and Right: Example 3, Example 4 Simple Example 1 to 4 Gifs

ContextMenuView examples, Left: Example 5, Example 6, and Right: Example 7, Example 8 Simple Example 5 to 8 Gifs

ContextMenuView example, Left: Example 9, and Right: Example 10 Simple Example 9 and 8 Gifs

ContextMenuView examples, Left: Example 11, Example 12, and Right: Example 13, Example 14 Simple Example 11 to 14 Gifs

ContextMenuView examples, Left: Example 15, Example 16, and Right: Example 17, Example 18 Simple Example 11 to 14 Gifs

ContextMenuView tests, Left: Test 1, and Right: Test 2 Context Menu View Test 1 and 2 Gifs

ContextMenuView tests, Left: Test 3, and Right: Test 4 Context Menu View Test 3 and 4 Gifs

ContextMenuView tests, Left: Test 5, and Right: Test 6 Context Menu View Test 5 and 6 Gifs

ContextMenuView tests, Left/Right: Test 7 Context Menu View 7 Gifs

ContextMenuView ActionSheetIOS fallback for simple example 1 to 9 Action Sheet Fallback for Simple Example 1 to 9 Gifs

ContextMenuView ActionSheetIOS fallback for context menu view test 1 to 6 (removed in v3.x+). Action Sheet Fallback for Context Menu View Test 1 to 6 Gifs

ContextMenuButton examples, Left: Example 1, and Right: Example 2 Simple Example 1 and 2 Gifs

Features

  • Support for creating menu actions and submenus (i.e. nested and in-line menus).
  • Support for customizing the menu icons (i.e. support for SF Symbols, require(image), and xcasset icons, icon tint, etc).
  • Extensive support for SF Symbols configuration (e.g. pointSize, weight, scale, hierarchicalColor, paletteColors).
  • Support for iOS 14 functionality (like the UIButton context menu, dynamically updating the menu while it's visible, etc).
  • Support for setting (almost) all of the native UIMenu and ๏ฟผUIAction properties (e.g. UIMenuElementState, MenuElementAtrributes, discoverabilityTitle, etc.)
  • Basic ActionSheetIOS menu fallback for iOS 12 and below (removed in v3.x+).
  • Support for creating custom context menu previews (with support for dynamic or fixed preview sizes, setting the UIPreviewParameters, specifying a UITargetedPreview, etc).
  • Support for custom auxiliary previews (experimental).
  • Support for deferred context menu items.

B. Installation

# 1. install library + dependencies
npm install react-native-ios-utilities@next
npm install react-native-ios-context-menu@next

# 2. then run pod install (uses auto-linking)
cd ios && pod install

๐Ÿ“ Note A: You might encounter some build errors since this library is written in swift, so there's some extra step involved to use this library (see table below for reference).

๐Ÿ“ Note B: If you want to use an older or different version of this library, please refer to versions section's compatibility table.

Additional Steps
1๏ธโƒฃ Add an empty swift file to your project
2๏ธโƒฃ Update the project's "Library Search Paths" build settings

Installation (Experimental Version)

# 1. install library + dependencies
npm install react-native-ios-utilities@next
npm install react-native-ios-context-menu@next


# 2. then run pod install (uses auto-linking)
cd ios && pod install

Updating

This library has cocoapods dependency to ContextMenuAuxiliaryPreview and DGSwiftUtilities, so you may need to update them separately (as needed).

# A. Either update this specific pod...
pod update ContextMenuAuxiliaryPreview DGSwiftUtilities
pod install --repo-update

# B. Or update all the pods
pod update

Expo

Versions and Dependencies

Library VersionDependencies + Versions
2.0.xreact-native-ios-utilities - 4.x
2.1.xreact-native-ios-utilities - 4.xContextMenuAuxiliaryPreview - 0.1.x
2.2.xreact-native-ios-utilities - 4.xContextMenuAuxiliaryPreview - 0.2.x

Troubleshooting

If you encounter any errors/bugs while using this library, or want a particular feature implemented, please create an issue (my inbox is a mess, please feel free to tag me). โœจ

Troubleshooting: Xcode Build Error (Swift)

๐Ÿ“ Note: This library is written in swift. If you are having trouble building your app after installing this library, try adding an empty swift file to your project:

  1. Open up your ios/project.xcworkspace project
  2. On the project navigator panel (located on the right side of Xcode), right click on your project group (or another folder/group i.e the blue or yellow icons) and select the "New File..." option
  3. In the popup sheet, select "Swift" as the template and then click the "Next" button
  4. A "Save As" popup sheet should appear and then click "Create" (you can rename the file first if you want to)
  5. If Xcode asks you to create a "Objective-C Bridging Header" choose "Create Objective-C Bridging Header"

Troubleshooting: Xcode Build Error (Undefined symbol)

When installing this library on Xcode 12+, you'll get the following error in Xcode:

Xcode linking build error

Undefined symbol: (extension in UIKit):
__C.UIMenu.init(title: Swift.String, image: __C.UIImage?, identifier: __C.UIMenuIdentifier?, options: __C.UIMenuOptions, children: [__C.UIMenuElement]) -> __C.UIMenu

Undefined symbol: (extension in UIKit):
__C.UIAction.init(title: Swift.String, image: __C.UIImage?, identifier: __C.UIActionIdentifier?, discoverabilityTitle: Swift.String?, attributes: __C.UIMenuElementAttributes, state: __C.UIMenuElementState, handler: (__C.UIAction) -> ()) -> __C.UIAction

To fix this, see screenshot + follow the steps below:

Xcode - Remove library search paths

  1. Open your ios/project.xcworkspace project.
  2. In the project navigator panel (located on the right side of Xcode), select your project group (i.e. the item with the blueprint icon).
  3. The Xcode project editor should appear. In the left panel, under the "Project" section, select your project (if it isn't already selected).
  4. In the project section's top tab bar, select the "Build Settings" tab (also make sure the "All" and "Combined" tabs are selected).
  5. In the project navigator list, under the "Search Path" section, there should be a "Library Search Paths" setting (alternatively, you can search for "Library Search Paths" in the search bar).
  6. According to this issue comment, you can clear all the items listed in the "Library Search Paths" setting by selecting the items in the list, and pressing the "-" button in the popover.
    • TLDR: Xcode automatically manages this setting, and the RN template hardcodes it to use Swift 5.0.
    • Alternatively, you can change the entry "$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)" to "$(TOOLCHAIN_DIR)/usr/lib/swift-5.3/$(PLATFORM_NAME)" i.e. change swift-5.0 to swift-5.3, or whatever the newest version of swift that comes with your Xcode installation (to show the popup dialog, double click the value/item).
  7. If you haven't already, make sure to create an empty swift file. Then clean the build folder (the option is in the menu bar under: "Product" -> "Clean Build Folder") and try building your project again.
  8. If you are still having problems building the app, try the following and build your project again:
  • Try clearing out Xcode's derivedData directory: rm -rf ~/Library/Developer/Xcode/DerivedData/* (check out this gist for instructions on how to clean up Xcode)
  • Try clearing out the Cocoapods cache: rm -rf "${HOME}/Library/Caches/CocoaPods" (and then try running pod install again).

Xcode - Remove library search paths

Explanation: Some versions of the react-native template hard codes the swift library search paths to use swift 5.0 (which causes the linker to mismatch the swift system libraries bundled with your Xcode + iOS/Simulator installation).

Here are some related issues in the RN repo: Issue 30202 and Issue 29178.

C. Basic Usage

For more examples, check out the Usage And Examples section.

๐Ÿ”— Full Example

import * as React from 'react';
import { StyleSheet, Text } from 'react-native';

import { ContextMenuView } from 'react-native-ios-context-menu';

export function BasicUsageExample01() {
  return (
    <ContextMenuView
      style={styles.container}
      menuConfig={{
        menuTitle: 'BasicUsageExample01',
        menuItems: [{
          actionKey  : 'key-01',
          actionTitle: 'Action #1',
        }, {
          actionKey  : 'key-02'   ,
          actionTitle: 'Action #2',
        }, {
          actionKey  : 'key-03'   ,
          actionTitle: 'Action #3',
        }],
      }}
    >
      <Text style={styles.text}>
        Press And Hold To Show Context Menu
      </Text>
    </ContextMenuView>
  );
};

const styles = StyleSheet.create({
  container: {
    margin: 10,
    padding: 10,
  },
  text: {
    fontSize: 16,
  },
});

D. Documentation

๐Ÿ’ก Tip: Most of the time, when a type or component is mentioned, you can click it to jump to that item in the README (or its declaration in the source code).

D.1. Components

ContextMenuView Component

ContextMenuView Component: Props
Prop Name and TypeDescription
โš›๏ธ ViewPropsThis component supports all the standard props from a <View/> component.
๐Ÿ”ค menuConfigโš›๏ธ MenuConfigThis prop configures the context menu, along with what menu actions to show.This prop accepts a MenuConfig object. This object is used to configure various aspects of the context menu. Here are some relevant properties:1๏ธโƒฃ MenuConfig.menuTitle: the context menu title (required) โ€” if you don't want to show the menu title, pass in an empty string.2๏ธโƒฃ MenuConfig.menuItems: the actions to show (e.g. the title, icons, subtitle, etc) โ€” accepts either an array of MenuActionConfig or MenuConfig objects.3๏ธโƒฃ MenuConfig.menuOptions: the attributes of the context menu (e.g. destructive) โ€” accepts an array of UIMenuOptions string items, and any nested menus or submenus to show (see "Note A"). ๐Ÿ“ Note A: Passing a MenuConfig object inside of the MenuConfig.menuItems property will result in a nested context menu (i.e. a submenu).In this scenario, the MenuConfig.menuOptions and MenuConfig.icon can be used to configure the appearance of the submenu.For usage examples regarding nested menus, see Example 06.๐Ÿ“ Note B: Passing a value of null (or undefined) to this prop will not disable the context menu. Instead, please use the isContextMenuEnabled prop to disable the context menu. ๐Ÿ“ Note C: You can put MenuConfig in state if you want to dynamically change the menu configuration (this will allow you to add/remove submenu items, or update the current menu options).If the context menu is currently visible, changing/updating the MenuConfig value passed to this prop will cause the context menu to change in real-time. This behavior is only supported on iOS 14+.๐Ÿ“Œ Some example links to get you started:โ€ข For basic usage examples regarding MenuConfig, see: Example 1,โ€ข For examples on creating + configuring the menu action items (i.e MenuActionConfig), see: Example 2,โ€ข For menu action attributes + menu state, and action subtitles, see: Example 4, Example 8, and Example 13,โ€ข For examples regarding the usage of icons (i.e ImageItemConfig), see: Example 16, Example 17, and Example 18.
๐Ÿ”ค previewConfigโš›๏ธ MenuPreviewConfigConfigures the context menu's preview.If no configuration is provided then it will default to using the context menu component itself as the preview.๐Ÿ“ Note: If you do not want to show a preview (i.e. only show the context menu itself), consider using a ContextMenuButton component instead.๐Ÿ“Œ Some example links to get you started:โ€ข For examples regarding the configuration of the context menu preview (e.g. custom previews), see: Example 11, Example 12, Example 14, and Example 15.
๐Ÿ”ค shouldUseDiscoverabilityTitleAsFallbackValueForSubtitleโš›๏ธ booleanโœณ๏ธ Default: trueOn iOS 15+, the value passed to the MenuActionConfig.discoverabilityTitle property is no longer displayed as a subtitle under the menu action.Instead you need to set a different property called MenuActionConfig.subtitle.The discoverabilityTitle property is now used for the "discoverability heads-up display" (e.g when an app supports keyboard shortcuts, holding down the command key presents a list of shortcuts; the discoverabilityTitle is then used as the title for the shortcut).If this prop is set to true, it will then use the value passed on to the discoverabilityTitle value as the subtitle for the menu action, preserving the old behavior. In other words, this prop exists for backwards-compatibility reasons.๐Ÿ“ Note: This prop is set to true by default; set this to false if you don't want this automatic behaviour to happen.
๐Ÿ”ค shouldWaitForMenuToHideBeforeFiringOnPressMenuItemโš›๏ธ booleanโœณ๏ธ Default: trueIf set to true (which it is by default), the onPressMenuItem event will be triggered after the context menu has been hidden (i.e. after onMenuDidHide event is triggered).Set this to false if you want onPressMenuItem to trigger as soon as an item has been pressed in the context menu.๐Ÿ“ Note: Layout updates while the context menu is transitioning from it's open to hidden state might cause layout flickering (e.g. Issue #43).
๐Ÿ”ค isContextMenuEnabledโš›๏ธ booleanโœณ๏ธ Default: trueEnables or disables the context menu. Useful if you want to temporarily disable the context menu.
๐Ÿ”ค lazyPreviewโš›๏ธ booleanโœณ๏ธ Default: trueIf set to true (which it is by default), the custom context menu preview (i.e. the component returned from the ContextMenuView.renderPreview prop) and the auxiliary preview (i.e. the component returned from the ContextMenuView.renderAuxillaryPreview prop) are only mounted/rendered when the context menu is visible.Set this to false if you want the preview content to be always mounted.
๐Ÿ”ค renderPreviewโš›๏ธ () => React.ReactElementThis prop is a "render" prop, i.e it accepts a function that returns a react component.The returned component will displayed in the context menu preview.
๐Ÿ”ค isAuxiliaryPreviewEnabledโš›๏ธ booleanโœณ๏ธ Default: falseโš ๏ธ Experimental: Please see Auxiliary Preview section.TBA
๐Ÿ”ค auxiliaryPreviewConfigโš›๏ธ MenuAuxiliaryPreviewConfigโš ๏ธ Experimental: Please see Auxiliary Preview section.TBA
๐Ÿ”ค renderAuxillaryPreviewโš›๏ธ () => React.ReactElementโš ๏ธ Experimental: Please see Auxiliary Preview section.TBA

ContextMenuView Component: Event Props
Prop Name and TypeDescription
๐Ÿ”ค onMenuWillShowโš›๏ธ OnMenuWillShowEventEvent that gets called before the context menu is shown, i.e this event is immediately invoked when the menu is about to become visible.
๐Ÿ”ค onMenuDidShowโš›๏ธ OnMenuDidShowEventEvent that gets called after the contex
3.0.0-22

4 months ago

3.0.0-23

4 months ago

3.0.0-20

4 months ago

3.0.0-21

4 months ago

3.1.0

4 months ago

3.0.0

4 months ago

3.1.0-0

4 months ago

3.0.0-19

4 months ago

3.0.0-17

5 months ago

3.0.0-18

5 months ago

3.0.0-15

5 months ago

3.0.0-16

5 months ago

3.0.0-13

5 months ago

3.0.0-14

5 months ago

3.0.0-11

5 months ago

3.0.0-12

5 months ago

3.0.0-10

6 months ago

2.5.2

6 months ago

2.5.3

5 months ago

3.0.0-9

6 months ago

3.0.0-7

7 months ago

3.0.0-6

7 months ago

3.0.0-8

7 months ago

3.0.0-5

7 months ago

3.0.0-4

8 months ago

3.0.0-1

8 months ago

3.0.0-0

8 months ago

3.0.0-3

8 months ago

3.0.0-2

8 months ago

2.5.1

1 year ago

2.5.0

1 year ago

2.5.0-3

1 year ago

2.5.0-4

1 year ago

2.4.4

1 year ago

2.5.0-2

1 year ago

2.4.3

1 year ago

2.4.2

1 year ago

2.5.0-1

1 year ago

2.5.0-0

1 year ago

2.4.1

1 year ago

2.4.0

1 year ago

2.3.2

1 year ago

2.3.1

1 year ago

2.2.1

1 year ago

2.0.3

1 year ago

2.0.0-6

2 years ago

2.2.0

1 year ago

2.0.2

1 year ago

2.0.0-5

2 years ago

2.0.5

1 year ago

2.0.0-4

2 years ago

2.0.4

1 year ago

2.0.0-3

2 years ago

2.0.0-2

2 years ago

2.0.0-1

2 years ago

2.0.0-0

2 years ago

2.0.1

1 year ago

2.0.0

2 years ago

2.3.0

1 year ago

2.1.0

1 year ago

1.15.3

2 years ago

1.15.2

2 years ago

1.15.0

3 years ago

1.15.1

3 years ago

1.12.3

3 years ago

1.14.0

3 years ago

1.12.2

3 years ago

1.13.0

3 years ago

1.12.1

3 years ago

1.12.0

3 years ago

1.9.1

3 years ago

1.9.0

3 years ago

1.8.1

3 years ago

1.8.0

3 years ago

1.7.6

3 years ago

1.7.5

3 years ago

1.9.2

3 years ago

1.11.0

3 years ago

1.10.1

3 years ago

1.10.0

3 years ago

1.7.3

3 years ago

1.7.2

3 years ago

1.7.1

3 years ago

1.7.1-0

3 years ago

1.7.4

3 years ago

1.6.2

3 years ago

1.7.0

3 years ago

1.6.1

3 years ago

1.6.0

3 years ago

1.5.0

3 years ago

1.4.0

3 years ago

1.3.0

4 years ago

1.2.2

4 years ago

1.2.1

4 years ago

1.2.0

4 years ago

1.1.6

4 years ago

1.1.5

4 years ago

1.1.4

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.1.3

4 years ago

1.1.2

4 years ago

1.0.0

4 years ago

0.2.0

4 years ago

0.1.8

4 years ago

0.1.7

4 years ago

0.1.6

4 years ago

0.1.5

4 years ago

0.1.4

4 years ago

0.1.3

4 years ago

0.1.2

5 years ago

0.1.1

5 years ago