{"id":4023,"url":"https://github.com/bhrott/react-native-masked-text","last_synced_at":"2025-12-16T03:47:58.505Z","repository":{"id":11550337,"uuid":"69989943","full_name":"bhrott/react-native-masked-text","owner":"bhrott","description":"A pure javascript masked text and input text component for React-Native.","archived":false,"fork":false,"pushed_at":"2025-04-10T07:33:12.000Z","size":133650,"stargazers_count":1609,"open_issues_count":103,"forks_count":250,"subscribers_count":23,"default_branch":"master","last_synced_at":"2025-12-15T04:24:29.036Z","etag":null,"topics":["input","mask","react-native"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bhrott.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-10-04T17:41:20.000Z","updated_at":"2025-12-07T14:55:52.000Z","dependencies_parsed_at":"2025-05-05T16:45:33.802Z","dependency_job_id":"5b7e6e7b-e16d-4371-b61d-096704bc7558","html_url":"https://github.com/bhrott/react-native-masked-text","commit_stats":null,"previous_names":["benhurott/react-native-masked-text"],"tags_count":31,"template":false,"template_full_name":null,"purl":"pkg:github/bhrott/react-native-masked-text","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhrott%2Freact-native-masked-text","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhrott%2Freact-native-masked-text/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhrott%2Freact-native-masked-text/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhrott%2Freact-native-masked-text/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bhrott","download_url":"https://codeload.github.com/bhrott/react-native-masked-text/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bhrott%2Freact-native-masked-text/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27759219,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-16T02:00:10.477Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["input","mask","react-native"],"created_at":"2024-01-05T20:16:58.774Z","updated_at":"2025-12-16T03:47:58.438Z","avatar_url":"https://github.com/bhrott.png","language":"JavaScript","funding_links":[],"categories":["Components","JavaScript"],"sub_categories":["UI"],"readme":"# react-native-masked-text\n\n![downloads](https://img.shields.io/npm/dt/react-native-masked-text.svg)\n[![Help Contribute to Open Source](https://www.codetriage.com/benhurott/react-native-masked-text/badges/users.svg)](https://www.codetriage.com/benhurott/react-native-masked-text)\n\n![logo](docs/res/logo.png)\n\nThis is a simple masked text (normal text and input text) component for React-Native.\n\n## Alert\nHey guys!\n\nUnfortunatelly I'm not developing js apps anymore. This repo will not receive updates anymore.\n\n## Supported Versions\n\nReact-native: 0.32.0 or higher\n\n## Install\n\n`npm install react-native-masked-text --save`\n\n## Usage (TextInputMask)\n\nFor all the masks you will use in this way:\n\n```jsx\nimport { TextInputMask } from 'react-native-masked-text'\n\n//...\n\n\u003cTextInputMask\n  type={'type-of-the-mask'}\n  options={\n    {\n      // the options for your mask if needed\n    }\n  }\n\n  // dont forget to set the \"value\" and \"onChangeText\" props\n  value={this.state.text}\n  onChangeText={text =\u003e {\n    this.setState({\n      text: text\n    })\n  }}\n/\u003e\n```\n\n### Cel Phone\n\nMask:\n\n-   BRL (default): `(99) 9999-9999` or `(99) 99999-9999` (will detect automatically)\n-   INTERNATIONAL: `+999 999 999 999`\n\nIf you need a different formatting, use the `Custom` mask =).\n\nSample code ([source](https://github.com/benhurott/react-native-masked-text-samples/blob/master/ReactNativeMaskedTextSamples/Samples/CelPhone.js)):\n\n```jsx\n\u003cTextInputMask\n  type={'cel-phone'}\n  options={{\n    maskType: 'BRL',\n    withDDD: true,\n    dddMask: '(99) '\n  }}\n  value={this.state.international}\n  onChangeText={text =\u003e {\n    this.setState({\n      international: text\n    })\n  }}\n/\u003e\n```\n#### Options\n\n| name       | type    | required | default | description |\n| ---------- | ------- | -------- | ------- | ----------- |\n| maskType | string | no | `maskType` | the type of the mask to use. Available: `BRL` or `INTERNATIONAL` |\n| withDDD | boolean | no | `true` | if the mask type is `BRL`, include the DDD |\n| dddMask | string | no | `(99) ` | if the mask type is `BRL`, the DDD mask |\n\n#### Methods\n\nYou can get the `unmasked` value using the `getRawValue` method:\n\n```jsx\n\u003cTextInputMask\n  type={'cel-phone'}\n  options={{\n    maskType: 'BRL',\n    withDDD: true,\n    dddMask: '(99) '\n  }}\n  value={this.state.international}\n  onChangeText={text =\u003e {\n    this.setState({\n      international: text\n    })\n  }}\n  // add the ref to a local var\n  ref={(ref) =\u003e this.phoneField = ref}\n/\u003e\n\n//...\n\nconst unmasked = this.phoneField.getRawValue()\n// in the mask: (51) 98765-4321\n// unmasked: 51987654321\n```\n\n\n### CPF\n\nMask: `999.999.999-99`\n\nSample code ([source](https://github.com/benhurott/react-native-masked-text-samples/blob/master/ReactNativeMaskedTextSamples/Samples/Cpf.js)):\n\n```jsx\n\u003cTextInputMask\n  type={'cpf'}\n  value={this.state.cpf}\n  onChangeText={text =\u003e {\n    this.setState({\n      cpf: text\n    })\n  }}\n/\u003e\n```\n\n#### Methods\n\nYou can check if the cpf is valid by calling the `isValid()` method:\n\n```jsx\n\u003cTextInputMask\n  type={'cpf'}\n  value={this.state.cpf}\n  onChangeText={text =\u003e {\n    this.setState({\n      cpf: text\n    })\n  }}\n  // add the ref to a local var\n  ref={(ref) =\u003e this.cpfField = ref}\n/\u003e\n\n// get the validation\n\nconst cpfIsValid = this.cpfField.isValid()\nconsole.log(cpfIsValid) // boolean\n```\n\nYou can get the `unmasked` cpf calling the `getRawValue` method:\n\n```jsx\nconst unmasked = this.cpfField.getRawValue()\n// in the mask: 123.456.789-01\n// unmasked: 12345678901\n```\n\n### CNPJ\n\nMask: `99.999.999/9999-99`\n\nSample code ([source](https://github.com/benhurott/react-native-masked-text-samples/blob/master/ReactNativeMaskedTextSamples/Samples/Cnpj.js)):\n\n```jsx\n\u003cTextInputMask\n  type={'cnpj'}\n  value={this.state.cnpj}\n  onChangeText={text =\u003e {\n    this.setState({\n      cnpj: text\n    })\n  }}\n/\u003e\n```\n\n#### Methods\n\nYou can check if the cnpj is valid by calling the `isValid()` method:\n\n```jsx\n\u003cTextInputMask\n  type={'cnpj'}\n  value={this.state.cnpj}\n  onChangeText={text =\u003e {\n    this.setState({\n      cnpj: text\n    })\n  }}\n  // add the ref to a local var\n  ref={(ref) =\u003e this.cnpjField = ref}\n/\u003e\n\n// get the validation\n\nconst cnpjIsValid = this.cnpjField.isValid()\nconsole.log(cnpjIsValid) // boolean\n```\n\n\nYou can get the `unmasked` cpf calling the `getRawValue` method:\n\n```jsx\nconst unmasked = this.cnpjField.getRawValue()\n// in the mask: 99.999.999/9999-99\n// unmasked: 99999999999999\n```\n\n### Credit Card\n\nMask:\n\n-   visa or master: `9999 9999 9999 9999` or `9999 **** **** 9999` (obfuscated)\n-   amex: `9999 999999 99999` or `9999 ****** 99999` (obfuscated)\n-   diners: `9999 999999 9999` or `9999 ****** 9999` (obfuscated)\n\nSample code ([source](https://github.com/benhurott/react-native-masked-text-samples/blob/master/ReactNativeMaskedTextSamples/Samples/CreditCard.js))\n\n```jsx\n\u003cTextInputMask\n  type={'credit-card'}\n  options={{\n    obfuscated: false,\n    issuer: 'amex'\n  }}\n  value={this.state.creditCard}\n  onChangeText={text =\u003e {\n    this.setState({\n      creditCard: text\n    })\n  }}\n/\u003e\n```\n\n#### Options\n\n| name       | type    | required | default              | description |\n| ---------- | ------- | -------- | -------------------- | ----------- |\n| obfuscated | boolean | no       | `false`              | if the mask should be obfuscated or not|\n| issuer     | string  | no       | `visa-or-mastercard` | the type of the card mask. The options are: `visa-or-mastercard`, `amex` or `diners` |\n\n\n#### Methods\n\nYou can get the array containing the groups of the value value using the `getRawValue` method:\n\n```jsx\n\u003cTextInputMask\n  type={'credit-card'}\n  options={{\n    obfuscated: false,\n    issuer: 'amex'\n  }}\n  value={this.state.creditCard}\n  onChangeText={text =\u003e {\n    this.setState({\n      creditCard: text\n    })\n  }}\n  // add the ref to a local var\n  ref={(ref) =\u003e this.creditCardField = ref}\n/\u003e\n\n//...\n\nconst unmasked = this.creditCardField.getRawValue()\n// in the mask: 9874 6541 3210 9874\n// unmasked: [9874, 6541, 3210, 9874]\n```\n\n### Custom\n\nMask: `defined by pattern`\n\n* `9` - accept digit.\n* `A` - accept alpha.\n* `S` - accept alphanumeric.\n* `*` - accept all, EXCEPT white space.\n\nEx: `AAA-9999` \n\nSample code ([source](https://github.com/benhurott/react-native-masked-text-samples/blob/master/ReactNativeMaskedTextSamples/Samples/Custom.js)):\n\n```jsx\n//\n// SIMPLE\n// \n\u003cTextInputMask\n  type={'custom'}\n  options={{\n    /**\n     * mask: (String | required | default '')\n     * the mask pattern\n     * 9 - accept digit.\n     * A - accept alpha.\n     * S - accept alphanumeric.\n     * * - accept all, EXCEPT white space.\n    */\n    mask: '999 AAA SSS ***'\n  }}\n  value={this.state.text}\n  onChangeText={text =\u003e {\n    this.setState({\n      text: text\n    })\n  }}\n  style={textInputStype}\n/\u003e\n\n\n//\n// ADVANCED\n// \n\u003cTextInputMask\n  type={'custom'}\n  options={{\n    // required\n\n    /**\n     * mask: (String | required | default '')\n     * the mask pattern\n     * 9 - accept digit.\n     * A - accept alpha.\n     * S - accept alphanumeric.\n     * * - accept all, EXCEPT white space.\n    */\n    mask: '999 AAA SSS ***',\n\n    // optional\n\n    /**\n     * validator: (Function | optional | defaults returns true)\n     * use this funcion to inform if the inputed value is a valid value (for invalid phone numbers, for example). The isValid method use this validator.\n    */\n    validator: function(value, settings) {\n      return true\n    },\n\n    /**\n     * getRawValue: (Function | optional | defaults return current masked value)\n     * use this function to parse and return values to use what you want.\n     * for example, if you want to create a phone number mask (999) 999-99-99 but want to get only\n     * the numbers for value, use this method for this parse step.\n    */\n    getRawValue: function(value, settings) {\n      return 'my converted value';\n    },\n    /**\n     * translation: (Object | optional | defaults 9, A, S, *)\n     * the dictionary that translate mask and value.\n     * you can change defaults by simple override the key (9, A, S, *) or create some new.\n    */\n    translation: {\n      // this is a custom translation. The others (9, A, S, *) still works.\n      // this translation will be merged and turns into 9, A, S, *, #.\n      '#': function(val) {\n        if (val === ' ') {\n          return val;\n        }\n\n        // if returns null, undefined or '' (empty string), the value will be ignored.\n        return null;\n      },\n      // in this case, we will override build-in * translation (allow all characters)\n      // and set this to allow only blank spaces and some special characters.\n      '*': function(val) {\n        return [' ', '#', ',', '.', '!'].indexOf(val) \u003e= 0 ? val : null;\n      }\n    }\n  }}\n  value={this.state.text}\n  onChangeText={text =\u003e {\n    this.setState({\n      text: text\n    })\n  }}\n  style={textInputStype}\n/\u003e\n```\n\n#### Options\n\n| name       | type    | required | default              | description |\n| ---------- | ------- | -------- | -------------------- | ----------- |\n| mask | string | **YES** | | The mask pattern |\n| validator | function | no | function that returns `true` | the function that's validate the value in the mask |\n| getRawValue | function | no | return current value | function to parsed value (like unmasked or converted) |\n| translation | object (map{string,function}) | no | `9 - digit`, `A - alpha`, `S - alphanumeric`, `* - all, except space` | The translator to use in the pattern |\n\n\n### Datetime\n\nMask:\n\n* `DD/MM/YYYY HH:mm:ss`\n* `DD/MM/YYYY`\n* `MM/DD/YYYY`\n* `YYYY/MM/DD`\n* `HH:mm:ss`\n* `HH:mm`\n* `HH`\n\nYou can use `-` instead of `/` if you want.\n\nSample code ([source](https://github.com/benhurott/react-native-masked-text-samples/blob/master/ReactNativeMaskedTextSamples/Samples/Datetime.js)):\n\n```jsx\n\u003cTextInputMask\n  type={'datetime'}\n  options={{\n    format: 'YYYY/MM/DD'\n  }}\n  value={this.state.dt}\n  onChangeText={text =\u003e {\n    this.setState({\n      dt: text\n    })\n  }}\n/\u003e\n```\n\n#### Options\n\n| name       | type    | required | default              | description |\n| ---------- | ------- | -------- | -------------------- | ----------- |\n| format | string | **YES** | | The date format to be validated |\n\n\n#### Methods\n\nYou can check if the date is valid by calling the `isValid()` method:\n\n```jsx\n\u003cTextInputMask\n  type={'datetime'}\n  options={{\n    format: 'YYYY/MM/DD'\n  }}\n  value={this.state.dt}\n  onChangeText={text =\u003e {\n    this.setState({\n      dt: text\n    })\n  }}\n  // add the ref to a local var\n  ref={(ref) =\u003e this.datetimeField = ref}\n/\u003e\n\n// get the validation\n\nconst isValid = this.datetimeField.isValid()\nconsole.log(isValid) // boolean\n```\n\nYou can get the [moment](https://momentjs.com/) object from the date if it's valid calling the `getRawValue` method:\n\n```jsx\nconst momentDate = this.datetimeField.getRawValue()\n```\n\n### Money\n\nMask: `R$999,99` (fully customizable)\n\nSample code ([source](https://github.com/benhurott/react-native-masked-text-samples/blob/master/ReactNativeMaskedTextSamples/Samples/Money.js)):\n\n```jsx\n// SIMPLE\n\u003cTextInputMask\n  type={'money'}\n  value={this.state.simple}\n  onChangeText={text =\u003e {\n    this.setState({\n      simple: text\n    })\n  }}\n/\u003e\n\n// ADVANCED\n\u003cTextInputMask\n  type={'money'}\n  options={{\n    precision: 2,\n    separator: ',',\n    delimiter: '.',\n    unit: 'R$',\n    suffixUnit: ''\n  }}\n  value={this.state.advanced}\n  onChangeText={text =\u003e {\n    this.setState({\n      advanced: text\n    })\n  }}\n/\u003e\n```\n\n#### Options\n\n| name       | type    | required | default              | description |\n| ---------- | ------- | -------- | -------------------- | ----------- |\n| precision | number | no | `2` | The number of cents to show |\n| separator | string | no | `,` | The cents separator |\n| delimiter | string | no | `.` | The thousand separator |\n| unit | string | no | `R$` | The prefix text |\n| suffixUnit | string | no | `''` | The sufix text |\n\n\n#### Methods\n\nYou can get the `number` value of the mask calling the `getRawValue` method:\n\n```jsx\n\u003cTextInputMask\n  type={'money'}\n  value={this.state.simple}\n  onChangeText={text =\u003e {\n    this.setState({\n      simple: text\n    })\n  }}\n  // add the ref to a local var\n  ref={(ref) =\u003e this.moneyField = ref}\n/\u003e\n\nconst numberValue = this.moneyField.getRawValue()\nconsole.log(numberValue) // Number\n\n// CAUTION: the javascript do not support giant numbers.\n// so, if you have a big number in this mask, you could have problems with the value...\n```\n\n\n### Only Numbers\n\nMask: `accept only numbers`\n\nSample code ([source](https://github.com/benhurott/react-native-masked-text-samples/blob/master/ReactNativeMaskedTextSamples/Samples/OnlyNumbers.js)):\n\n\n```jsx\n\u003cTextInputMask\n  type={'only-numbers'}\n  value={this.state.value}\n  onChangeText={text =\u003e {\n    this.setState({\n      value: text\n    })\n  }}\n/\u003e\n```\n\n\n### Zip Code\n\nMask: `99999-999`\n\nSample code ([source](https://github.com/benhurott/react-native-masked-text-samples/blob/master/ReactNativeMaskedTextSamples/Samples/OnlyNumbers.js)):\n\n\n```jsx\n\u003cTextInputMask\n  type={'zip-code'}\n  value={this.state.value}\n  onChangeText={text =\u003e {\n    this.setState({\n      value: text\n    })\n  }}\n/\u003e\n```\n\n#### Methods\n\nYou can get the `unmasked` value using the `getRawValue` method:\n\n```jsx\n\u003cTextInputMask\n  type={'zip-code'}\n  value={this.state.value}\n  onChangeText={text =\u003e {\n    this.setState({\n      value: text\n    })\n  }}\n  // add the ref to a local var\n  ref={(ref) =\u003e this.zipCodeField = ref}\n/\u003e\n\n//...\n\nconst unmasked = this.zipCodeField.getRawValue()\n// in the mask: 98765-321\n// unmasked: 98765321\n```\n\n### ... Utils\n\n#### Including the `rawText` in `onChangeText` [1.12.0+]\n\nIf you need the raw value in every text change, you can use the `includeRawValueInChangeText`.\n\nIt will provide the masked and the raw text in every text change.\n\n```jsx\n\u003cTextInputMask\n  type={'cpf'}\n  value={this.state.value}\n  includeRawValueInChangeText={true}\n  onChangeText={(maskedText, rawText) =\u003e {\n    // maskedText: 123.456.789-01\n    // rawText: 12345678901\n  }}\n/\u003e\n```\n\n\n#### Getting the `TextInput` instance\nIf you want to get the `TextInput` raw component, use the `getElement()` method:\n\n```jsx\n\u003cTextInputMask\n  type={'zip-code'}\n  value={this.state.value}\n  onChangeText={text =\u003e {\n    this.setState({\n      value: text\n    })\n  }}\n  // add the ref to a local var\n  ref={(ref) =\u003e this.zipCodeField = ref}\n/\u003e\n\n//...\n\nconst textInput = this.zipCodeField.getElement()\n```\n\n#### Blocking user to add character\n\nIf you want, you can block a value to be added to the text using the `checkText` prop:\n\n```jsx\n\u003cTextInputMask\n  //...\n  /**\n   * @param {String} previous the previous text in the masked field.\n   * @param {String} next the next text that will be setted to field.\n   * @return {Boolean} return true if must accept the value.\n  */\n  checkText={\n    (previous, next) =\u003e {\n      return next === 'your valid value or other boolean condition';\n    }\n  }\n/\u003e\n```\n\n#### Using custom text inputs\n\nYou can use this prop if you want custom text input instead native TextInput component:\n\n```jsx\nconst Textfield = MKTextField.textfield()\n  .withPlaceholder('Text...')\n  .withStyle(styles.textfield)\n  .build();\n\n\n\u003cTextInputMask\n  // ...\n\n  // the custom text input component\n  customTextInput={Textfield}\n\n  // the props to be passed to the custom text input\n  customTextInputProps={{\n    style:{ width: '80%' },\n    label:'Birthday'\n  }}\n/\u003e\n```\n\n#### About the normal text input props\n\nYou can use all the normal TextInput props from React-Native, with this in mind:\n\n-   onChangeText is intercepted by component.\n-   value is intercepted by component.\n-   if you pass keyboardType, it will override the keyboardType of masked component.\n\n#### Code Samples\n\nIf you want, you can check the code samples in this repo:\n\n[react-native-masked-text-samples](https://github.com/benhurott/react-native-masked-text-samples)\n\n## Usage (TextMask)\n\n```jsx\nimport React, { Component } from 'react'\n\n// import the component\nimport { TextMask } from 'react-native-masked-text'\n\nexport default class MyComponent extends Component {\n    constructor(props) {\n        super(props)\n        this.state = {\n            text: '4567123409871234'\n        }\n    }\n\n    render() {\n        // the type is required but options is required only for some specific types.\n        // the sample below will output 4567 **** **** 1234\n        return (\n            \u003cTextMask\n                value={this.state.text}\n                type={'credit-card'}\n                options={{\n                    obfuscated: true\n                }}\n            /\u003e\n        )\n    }\n}\n```\n\n### Props\n\nThe same of _TextInputMask_, but for React-Native _Text_ component instead _TextInput_.\n\u003cbr /\u003e\n_Warning_: if the value not match the mask, it will not appear.\n\n### Methods\n\n`getElement()`: return the instance of _Text_ component.\n\n## Extra (MaskService)\n\nIf you want, we expose the `MaskService`. You can use it:\n\n**Methods**\n\n-   static toMask(type, value, settings): mask a value.\n    -   `type` (String, required): the type of the mask (`cpf`, `datetime`, etc...)\n    -   `value` (String, required): the value to be masked\n    -   `settings` (Object, optional): if the mask type accepts options, pass it in the settings parameter\n-   static toRawValue(type, maskedValue, settings): get the raw value of a masked value.\n    -   `type` (String, required): the type of the mask (`cpf`, `datetime`, etc...)\n    -   `maskedValue` (String, required): the masked value to be converted in raw value\n    -   `settings` (Object, optional): if the mask type accepts options, pass it in the settings parameter\n-   static isValid(type, value, settings): validate if the mask and the value match.\n    -   `type` (String, required): the type of the mask (`cpf`, `datetime`, etc...)\n    -   `value` (String, required): the value to be masked\n    -   `settings` (Object, optional): if the mask type accepts options, pass it in the settings parameter\n-   static getMask(type, value, settings): get the mask used to mask the value\n\nEx:\n\n```jsx\nimport { MaskService } from 'react-native-masked-text'\n\nvar money = MaskService.toMask('money', '123', {\n    unit: 'US$',\n    separator: '.',\n    delimiter: ','\n})\n\n// money -\u003e US$ 1.23\n```\n\n## Throubleshooting\n\n-   If the `es2015` error throw by babel, try run `react-native start --reset-cache`\n\n## Changelog\n\nView changelog [HERE](CHANGELOG.md)\n\n## Thanks to\n\n-   \u003cdiv\u003eIcons made by \u003ca href=\"http://www.freepik.com\" title=\"Freepik\"\u003eFreepik\u003c/a\u003e from \u003ca href=\"https://www.flaticon.com/\" title=\"Flaticon\"\u003ewww.flaticon.com\u003c/a\u003e is licensed by \u003ca href=\"http://creativecommons.org/licenses/by/3.0/\" title=\"Creative Commons BY 3.0\" target=\"_blank\"\u003eCC 3.0 BY\u003c/a\u003e\u003c/div\u003e\n\n-   Thanks to [vanilla-masker](https://github.com/BankFacil/vanilla-masker) =).\n-   Thanks to [moment](http://momentjs.com/) =).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbhrott%2Freact-native-masked-text","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbhrott%2Freact-native-masked-text","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbhrott%2Freact-native-masked-text/lists"}