diff --git a/.babelrc.json b/.babelrc.json
index d301495..57caf34 100644
--- a/.babelrc.json
+++ b/.babelrc.json
@@ -1,4 +1,7 @@
{
- "presets": ["@babel/preset-env", "@babel/preset-react"],
+ "presets": [
+ "@babel/preset-env",
+ ["@babel/preset-react", { "runtime": "automatic" }]
+ ],
"plugins": ["@babel/plugin-transform-runtime"]
}
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
deleted file mode 100644
index 882429c..0000000
--- a/.github/FUNDING.yml
+++ /dev/null
@@ -1,12 +0,0 @@
-# These are supported funding model platforms
-
-github: [assisrafael] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
-patreon: # Replace with a single Patreon username
-open_collective: # Replace with a single Open Collective username
-ko_fi: # Replace with a single Ko-fi username
-tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
-community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
-liberapay: # Replace with a single Liberapay username
-issuehunt: # Replace with a single IssueHunt username
-otechie: # Replace with a single Otechie username
-custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml
index af2917b..b72a65d 100644
--- a/.github/workflows/nodejs.yml
+++ b/.github/workflows/nodejs.yml
@@ -15,7 +15,7 @@ jobs:
strategy:
matrix:
- node-version: [14.x]
+ node-version: [18.x]
steps:
- uses: actions/checkout@v2
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
new file mode 100644
index 0000000..cc42b2e
--- /dev/null
+++ b/.github/workflows/publish.yml
@@ -0,0 +1,73 @@
+name: Publish
+
+on:
+ workflow_dispatch:
+ inputs:
+ version_type:
+ type: choice
+ description: 'Version type'
+ options:
+ - Major
+ - Minor
+ - Patch
+ - Beta
+ branch_name:
+ type: string
+ description: 'Branch name (required for Beta versions)'
+ required: false
+
+run-name: Publish Package ${{inputs.version_type}}${{ inputs.version_type == 'Beta' && format(' from {0}', inputs.branch_name) || '' }}
+
+jobs:
+ publish:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ ref: ${{ inputs.version_type == 'Beta' && inputs.branch_name || 'master' }}
+
+ - uses: webfactory/ssh-agent@v0.9.0
+ with:
+ ssh-private-key: ${{secrets.SSH_PRIVATE_KEY}}
+
+ - name: Setup Git
+ run: |
+ git config --global user.email "noreply@github.com"
+ git config --global user.name "Github Actions"
+
+ - uses: actions/setup-node@v4
+ with:
+ node-version: "18.x"
+ registry-url: "https://npm.pkg.github.com/"
+ scope: "@geolaborapp"
+
+ - name: install package dependencies
+ run: npm install
+
+ - name: release-major
+ if: ${{ github.event.inputs.version_type == 'Major' }}
+ run: npm run release-major
+
+ - name: release-minor
+ if: ${{ github.event.inputs.version_type == 'Minor'}}
+ run: npm run release-minor
+
+ - name: release-patch
+ if: ${{ github.event.inputs.version_type == 'Patch'}}
+ run: npm run release-patch
+
+ - name: release-beta
+ if: ${{ github.event.inputs.version_type == 'Beta'}}
+ run: npm version prerelease --preid=beta
+
+ - name: publish package (standard)
+ if: ${{ github.event.inputs.version_type != 'Beta' }}
+ run: git push --follow-tags origin master && npm publish
+ env:
+ NODE_AUTH_TOKEN: ${{secrets.GEOLABOR_GITHUB_TOKEN}}
+
+ - name: publish package (beta)
+ if: ${{ github.event.inputs.version_type == 'Beta' }}
+ run: git push --follow-tags origin ${{ inputs.branch_name }} && npm publish --tag beta
+ env:
+ NODE_AUTH_TOKEN: ${{secrets.GEOLABOR_GITHUB_TOKEN}}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d245e6c..e0a7cc0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,485 @@
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.
+### 2.1.2 (2026-03-05)
+
+
+### Bug Fixes
+
+* tenta corrigir race condtion de alguns confirmation dialogs (modal era fechado, mas overlay mantido) ([#90](https://github.com/geolaborapp/react-bootstrap-utils/issues/90)) ([9fa392e](https://github.com/geolaborapp/react-bootstrap-utils/commit/9fa392e2a97c017b54fe8b456a2d78a0391601a7))
+
+### 2.1.1 (2026-02-25)
+
+
+### Bug Fixes
+
+* corrige caso de "re renderização" em overlapping dialogs ([#89](https://github.com/geolaborapp/react-bootstrap-utils/issues/89)) ([c4f21bd](https://github.com/geolaborapp/react-bootstrap-utils/commit/c4f21bdcf1b5fc09d9ec35870eccac522063d319))
+
+## 2.1.0 (2026-02-24)
+
+
+### Features
+
+* add background color support to list group items ([#84](https://github.com/geolaborapp/react-bootstrap-utils/issues/84)) ([711379d](https://github.com/geolaborapp/react-bootstrap-utils/commit/711379d461d430c014289a05f140f051e8071889))
+
+### 2.0.2 (2026-01-05)
+
+### 2.0.1 (2025-12-04)
+
+
+### Bug Fixes
+
+* faz campos tipo "date" aceitarem datas iso ([#85](https://github.com/geolaborapp/react-bootstrap-utils/issues/85)) ([#86](https://github.com/geolaborapp/react-bootstrap-utils/issues/86)) ([940f00b](https://github.com/geolaborapp/react-bootstrap-utils/commit/940f00b153c6e9bc6367aa34ea191b248772ebe2))
+
+## 2.0.0 (2025-10-20)
+
+
+### Features
+
+* Adiciona FormTable, FormGroupTable, UncontrolledFormTable e UncontrolledFormGroupTable ([#82](https://github.com/geolaborapp/react-bootstrap-utils/issues/82)) ([39eb362](https://github.com/geolaborapp/react-bootstrap-utils/commit/39eb3622860a27ca674e36efc7ea811a702b663f))
+
+## 1.3.0 (2025-09-03)
+
+
+### Features
+
+* exporta função de clear Form ([#80](https://github.com/geolaborapp/react-bootstrap-utils/issues/80)) ([4bf8e8d](https://github.com/geolaborapp/react-bootstrap-utils/commit/4bf8e8d9a4165a4aeea584a1b5dffd569a5da7a1))
+
+## 1.2.0 (2025-08-29)
+
+
+### Features
+
+* exporta função de reset form ([#79](https://github.com/geolaborapp/react-bootstrap-utils/issues/79)) ([56da75f](https://github.com/geolaborapp/react-bootstrap-utils/commit/56da75fc280a3f4583b137f357243c51d6eee0d1))
+
+### 1.1.2 (2025-06-26)
+
+### 1.1.1 (2025-04-04)
+
+
+### Bug Fixes
+
+* corrige exibição de campos autocomplete usando o "value" no template ([#77](https://github.com/geolaborapp/react-bootstrap-utils/issues/77)) ([0f177de](https://github.com/geolaborapp/react-bootstrap-utils/commit/0f177de47a47dad403636c98cf89411d7e1a50d5))
+
+## 1.1.0 (2025-03-28)
+
+### 1.0.1 (2025-03-28)
+
+## 1.0.0 (2025-03-28)
+
+## 0.28.0 (2025-03-28)
+
+### 0.27.3 (2025-03-28)
+
+### 0.27.2 (2025-03-28)
+
+### [0.27.1](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.27.0...v0.27.1) (2025-02-21)
+
+
+### Features
+
+* Permite não passar a propriedade message nas validations do Form ([#70](https://github.com/geolaborapp/react-bootstrap-utils/issues/70)) ([8e38725](https://github.com/geolaborapp/react-bootstrap-utils/commit/8e38725e3b39aaca1dac20da19e72a9c0b229e6e))
+
+## [0.27.0](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.53...v0.27.0) (2024-11-08)
+
+
+### Features
+
+* Permite passar um estado customizado para os toasts ([#68](https://github.com/geolaborapp/react-bootstrap-utils/issues/68)) ([333e8eb](https://github.com/geolaborapp/react-bootstrap-utils/commit/333e8eb6361b3fbd46da8351562842ff3ea790a8))
+
+### [0.26.53](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.50...v0.26.53) (2024-05-24)
+
+
+### Features
+
+* adiciona formatador de mensagem para toats ([#67](https://github.com/geolaborapp/react-bootstrap-utils/issues/67)) ([e051b56](https://github.com/geolaborapp/react-bootstrap-utils/commit/e051b565aa68a373fc610427bd60bc9e613f0995))
+* facilita adicionar classes em FormInput, UncontrolledFormInput e UncontrolledFormInputMask ([#65](https://github.com/geolaborapp/react-bootstrap-utils/issues/65)) ([f494436](https://github.com/geolaborapp/react-bootstrap-utils/commit/f4944368298df8842b1ec8ae1db8d5b5a2b7378a))
+
+
+### Bug Fixes
+
+* corrige uso de label de tag e melhora uso do trackBy no FormAutocompleteTag ([#61](https://github.com/geolaborapp/react-bootstrap-utils/issues/61)) ([dcbff61](https://github.com/geolaborapp/react-bootstrap-utils/commit/dcbff615296a2e4e067b6159ec9bf447519d39d7))
+* corrige validação do form quando validations muda ([#60](https://github.com/geolaborapp/react-bootstrap-utils/issues/60)) ([cdf44a6](https://github.com/geolaborapp/react-bootstrap-utils/commit/cdf44a69879ea1037e69d4640fd69563eb89cdf4))
+
+### [0.26.52](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.50...v0.26.52) (2024-04-02)
+
+
+### Features
+
+* facilita adicionar classes em FormInput, UncontrolledFormInput e UncontrolledFormInputMask ([#65](https://github.com/geolaborapp/react-bootstrap-utils/issues/65)) ([f494436](https://github.com/geolaborapp/react-bootstrap-utils/commit/f4944368298df8842b1ec8ae1db8d5b5a2b7378a))
+
+
+### Bug Fixes
+
+* corrige uso de label de tag e melhora uso do trackBy no FormAutocompleteTag ([#61](https://github.com/geolaborapp/react-bootstrap-utils/issues/61)) ([dcbff61](https://github.com/geolaborapp/react-bootstrap-utils/commit/dcbff615296a2e4e067b6159ec9bf447519d39d7))
+* corrige validação do form quando validations muda ([#60](https://github.com/geolaborapp/react-bootstrap-utils/issues/60)) ([cdf44a6](https://github.com/geolaborapp/react-bootstrap-utils/commit/cdf44a69879ea1037e69d4640fd69563eb89cdf4))
+
+### [0.26.51](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.50...v0.26.51) (2023-12-11)
+
+
+### Bug Fixes
+
+* corrige uso de label de tag e melhora uso do trackBy no FormAutocompleteTag ([#61](https://github.com/geolaborapp/react-bootstrap-utils/issues/61)) ([dcbff61](https://github.com/geolaborapp/react-bootstrap-utils/commit/dcbff615296a2e4e067b6159ec9bf447519d39d7))
+* corrige validação do form quando validations muda ([#60](https://github.com/geolaborapp/react-bootstrap-utils/issues/60)) ([cdf44a6](https://github.com/geolaborapp/react-bootstrap-utils/commit/cdf44a69879ea1037e69d4640fd69563eb89cdf4))
+
+### [0.26.50](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.49...v0.26.50) (2023-11-13)
+
+
+### Bug Fixes
+
+* corrige invalid date ao limpar input datetime-local ([#58](https://github.com/geolaborapp/react-bootstrap-utils/issues/58)) ([62ae4fa](https://github.com/geolaborapp/react-bootstrap-utils/commit/62ae4fa3787ad21e5599c6b3a98810108b4c46c7))
+* deixa de executar transform na inicialização do UncontrolledForm ([#59](https://github.com/geolaborapp/react-bootstrap-utils/issues/59)) ([44a3221](https://github.com/geolaborapp/react-bootstrap-utils/commit/44a3221751da450b7fec7e5df3619cfe2b8546c6))
+
+### [0.26.49](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.48...v0.26.49) (2023-10-31)
+
+### [0.26.48](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.47...v0.26.48) (2023-10-31)
+
+
+### Features
+
+* Possibilita trocar icone dos botões do FormGroupAutocompleteTag e do FormAutocompleteTag ([#57](https://github.com/geolaborapp/react-bootstrap-utils/issues/57)) ([3994da5](https://github.com/geolaborapp/react-bootstrap-utils/commit/3994da57675a89d5cb603e2a093684df27f65806))
+
+### [0.26.47](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.46...v0.26.47) (2023-10-19)
+
+
+### Features
+
+* adiciona FormAutocompleteTag ([#55](https://github.com/geolaborapp/react-bootstrap-utils/issues/55)) ([3b2e6d0](https://github.com/geolaborapp/react-bootstrap-utils/commit/3b2e6d0c4f8f24e4eed2c65fc9e3d39c49ed542d))
+
+
+### Bug Fixes
+
+* **form2:** corrige atualização do setValue do formControl ([#54](https://github.com/geolaborapp/react-bootstrap-utils/issues/54)) ([a0acfc5](https://github.com/geolaborapp/react-bootstrap-utils/commit/a0acfc57921c259311aeb46df608c71b91da4f64))
+
+### [0.26.46](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.45...v0.26.46) (2023-09-20)
+
+
+### Bug Fixes
+
+* fixes use of setValue in form2 ([#52](https://github.com/geolaborapp/react-bootstrap-utils/issues/52)) ([58a2c8a](https://github.com/geolaborapp/react-bootstrap-utils/commit/58a2c8a951f23a8cc654c78ed7808c0e372d922f))
+
+### [0.26.45](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.43...v0.26.45) (2023-09-19)
+
+
+### Bug Fixes
+
+* Corrige titulo dinamico em Dialog ([#50](https://github.com/geolaborapp/react-bootstrap-utils/issues/50)) ([79af830](https://github.com/geolaborapp/react-bootstrap-utils/commit/79af830d773be8e5d0e65a4b4ebedb0bc7bacc39))
+
+### [0.26.44](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.43...v0.26.44) (2023-09-13)
+
+
+### Bug Fixes
+
+* Corrige titulo dinamico em Dialog ([#50](https://github.com/geolaborapp/react-bootstrap-utils/issues/50)) ([79af830](https://github.com/geolaborapp/react-bootstrap-utils/commit/79af830d773be8e5d0e65a4b4ebedb0bc7bacc39))
+
+### [0.26.43](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.40...v0.26.43) (2023-08-07)
+
+
+### Bug Fixes
+
+* corrige uso do onClearSearch ([#45](https://github.com/geolaborapp/react-bootstrap-utils/issues/45)) ([30d35bd](https://github.com/geolaborapp/react-bootstrap-utils/commit/30d35bd6473e393988984fd7b37e6e059d566df4))
+
+### [0.26.42](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.40...v0.26.42) (2023-07-21)
+
+
+### Bug Fixes
+
+* corrige uso do onClearSearch ([#45](https://github.com/geolaborapp/react-bootstrap-utils/issues/45)) ([30d35bd](https://github.com/geolaborapp/react-bootstrap-utils/commit/30d35bd6473e393988984fd7b37e6e059d566df4))
+
+### [0.26.41](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.40...v0.26.41) (2023-07-21)
+
+
+### Bug Fixes
+
+* corrige uso do onClearSearch ([#45](https://github.com/geolaborapp/react-bootstrap-utils/issues/45)) ([30d35bd](https://github.com/geolaborapp/react-bootstrap-utils/commit/30d35bd6473e393988984fd7b37e6e059d566df4))
+
+### [0.26.40](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.39...v0.26.40) (2023-07-14)
+
+
+### Features
+
+* adiciona props para Dropdown e FormAutocomplete ([#44](https://github.com/geolaborapp/react-bootstrap-utils/issues/44)) ([8c6612d](https://github.com/geolaborapp/react-bootstrap-utils/commit/8c6612d02f5d64d2df2d2d85c5e7ffd98863755f))
+
+### [0.26.39](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.38...v0.26.39) (2023-03-02)
+
+
+### Features
+
+* melhora useFormEffect ([#41](https://github.com/geolaborapp/react-bootstrap-utils/issues/41)) ([76fe87a](https://github.com/geolaborapp/react-bootstrap-utils/commit/76fe87a58103dc6c17d8a9b65f52028861c67e85))
+
+### [0.26.38](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.37...v0.26.38) (2023-02-16)
+
+
+### Bug Fixes
+
+* corrige props do fomcheckbox ([#43](https://github.com/geolaborapp/react-bootstrap-utils/issues/43)) ([779e398](https://github.com/geolaborapp/react-bootstrap-utils/commit/779e39895efb4a785b1752f6933e15859a446742))
+
+### [0.26.37](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.36...v0.26.37) (2023-02-16)
+
+
+### Bug Fixes
+
+* corrige passagem de props com formSwitch ([#42](https://github.com/geolaborapp/react-bootstrap-utils/issues/42)) ([9c3ac73](https://github.com/geolaborapp/react-bootstrap-utils/commit/9c3ac73c2ed6306e1861528a693f90731e47ee9b))
+
+### [0.26.36](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.35...v0.26.36) (2023-01-30)
+
+
+### Features
+
+* Adiciona uma nova prop 'onClose' ao componente Dialog, que recebe uma função a ser executada ao fechar o modal. ([#40](https://github.com/geolaborapp/react-bootstrap-utils/issues/40)) ([9204861](https://github.com/geolaborapp/react-bootstrap-utils/commit/92048614d190547eae03238335812a368533000a))
+
+### [0.26.35](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.32...v0.26.35) (2023-01-05)
+
+
+### Features
+
+* Adiciona disabled no formdropdown ([#39](https://github.com/geolaborapp/react-bootstrap-utils/issues/39)) ([29c1610](https://github.com/geolaborapp/react-bootstrap-utils/commit/29c1610e6b2ef46364f93f15eded2c7f6aeda0ee))
+
+
+### Bug Fixes
+
+* corrige fechamento de modal ao desmontar componente ([#37](https://github.com/geolaborapp/react-bootstrap-utils/issues/37)) ([52a0978](https://github.com/geolaborapp/react-bootstrap-utils/commit/52a09782cb268a4bab4b3b7d5abb9e1dfe859027))
+
+### [0.26.34](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.32...v0.26.34) (2022-12-23)
+
+
+### Bug Fixes
+
+* corrige fechamento de modal ao desmontar componente ([#37](https://github.com/geolaborapp/react-bootstrap-utils/issues/37)) ([52a0978](https://github.com/geolaborapp/react-bootstrap-utils/commit/52a09782cb268a4bab4b3b7d5abb9e1dfe859027))
+
+### [0.26.33](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.32...v0.26.33) (2022-12-23)
+
+
+### Bug Fixes
+
+* corrige fechamento de modal ao desmontar componente ([#37](https://github.com/geolaborapp/react-bootstrap-utils/issues/37)) ([52a0978](https://github.com/geolaborapp/react-bootstrap-utils/commit/52a09782cb268a4bab4b3b7d5abb9e1dfe859027))
+
+### [0.26.32](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.31...v0.26.32) (2022-12-14)
+
+
+### Features
+
+* allow custom columns width in Table ([#36](https://github.com/geolaborapp/react-bootstrap-utils/issues/36)) ([e7c417e](https://github.com/geolaborapp/react-bootstrap-utils/commit/e7c417e30598eb2fc952b3af7cf091686692446b))
+
+### [0.26.31](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.30...v0.26.31) (2022-09-29)
+
+
+### Bug Fixes
+
+* corrige prop onSelect do StatefulTabs ([#35](https://github.com/geolaborapp/react-bootstrap-utils/issues/35)) ([8fde4a6](https://github.com/geolaborapp/react-bootstrap-utils/commit/8fde4a6df42d2f2616e5ed229421c19deb4908d8))
+
+### [0.26.30](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.29...v0.26.30) (2022-09-20)
+
+
+### Features
+
+* inclui funcionalidade de esconder aba ([#34](https://github.com/geolaborapp/react-bootstrap-utils/issues/34)) ([e54f6fa](https://github.com/geolaborapp/react-bootstrap-utils/commit/e54f6fa6dc346f5a57a84b9ccab7a84252a4976f))
+
+### [0.26.29](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.28...v0.26.29) (2022-08-24)
+
+
+### Bug Fixes
+
+* required form autocomplete using custom validation ([#33](https://github.com/geolaborapp/react-bootstrap-utils/issues/33)) ([3d84c67](https://github.com/geolaborapp/react-bootstrap-utils/commit/3d84c67c357e5b8bb3e3a7a4b371a415f0a7eaee))
+* required form autocomplete using native form validation ([#30](https://github.com/geolaborapp/react-bootstrap-utils/issues/30)) ([1ece0f0](https://github.com/geolaborapp/react-bootstrap-utils/commit/1ece0f0e3ab00695c3e67d48278bdb2ad4a8464a))
+
+### [0.26.28](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.27...v0.26.28) (2022-08-12)
+
+
+### Features
+
+* includes previous value in afterChange ([#32](https://github.com/geolaborapp/react-bootstrap-utils/issues/32)) ([55b9369](https://github.com/geolaborapp/react-bootstrap-utils/commit/55b936927a859ee09b2bca3dc23f0e184764a0f0))
+
+### [0.26.27](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.26...v0.26.27) (2022-07-12)
+
+
+### Bug Fixes
+
+* close modal after unmount component ([#29](https://github.com/geolaborapp/react-bootstrap-utils/issues/29)) ([458914a](https://github.com/geolaborapp/react-bootstrap-utils/commit/458914a4e5c67be2f0ac7c2bb514201147c01749))
+
+### [0.26.26](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.25...v0.26.26) (2022-07-08)
+
+
+### Features
+
+* return onCloseDialog function in useDialog hook ([#28](https://github.com/geolaborapp/react-bootstrap-utils/issues/28)) ([eddaada](https://github.com/geolaborapp/react-bootstrap-utils/commit/eddaadae5b3abc1fb1646b5dfafe5aa374088d08))
+
+### [0.26.25](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.24...v0.26.25) (2022-07-05)
+
+
+### Features
+
+* add setFormData in useFormControl2 ([094b37d](https://github.com/geolaborapp/react-bootstrap-utils/commit/094b37d4be9111400f87068a1593a8f27f002dd9))
+
+### [0.26.24](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.23...v0.26.24) (2022-07-05)
+
+
+### Bug Fixes
+
+* corrects call of afterChange function in FormInputMask ([#27](https://github.com/geolaborapp/react-bootstrap-utils/issues/27)) ([e451cc8](https://github.com/geolaborapp/react-bootstrap-utils/commit/e451cc858ad3391d76993a3462590b786d09bfae))
+
+### [0.26.23](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.22...v0.26.23) (2022-06-03)
+
+
+### Bug Fixes
+
+* fix setvalue in form2 ([#26](https://github.com/geolaborapp/react-bootstrap-utils/issues/26)) ([5cc39b1](https://github.com/geolaborapp/react-bootstrap-utils/commit/5cc39b10ed3f8b806dc6294b8ffa993f96cd9260))
+* fixes FormLabel when required prop is a function ([#24](https://github.com/geolaborapp/react-bootstrap-utils/issues/24)) ([fc4b1ef](https://github.com/geolaborapp/react-bootstrap-utils/commit/fc4b1ef31b8287e82ddd6f02f9873378a60b5637))
+
+### [0.26.22](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.21...v0.26.22) (2022-05-19)
+
+
+### Features
+
+* allows custom class in modal ([#25](https://github.com/geolaborapp/react-bootstrap-utils/issues/25)) ([b9c5a02](https://github.com/geolaborapp/react-bootstrap-utils/commit/b9c5a02d522d1608753d80de9bfd0c2aaaea7330))
+
+### [0.26.21](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.20...v0.26.21) (2022-05-06)
+
+### [0.26.20](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.19...v0.26.20) (2022-05-06)
+
+
+### Bug Fixes
+
+* fixes NaN values for FormInput ([#23](https://github.com/geolaborapp/react-bootstrap-utils/issues/23)) ([8ffea8e](https://github.com/geolaborapp/react-bootstrap-utils/commit/8ffea8e49e0e130cfa3b07808b35d4966a5f6e53))
+
+### [0.26.19](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.18...v0.26.19) (2022-02-27)
+
+
+### Bug Fixes
+
+* fixes serialized label when value is an object ([#21](https://github.com/geolaborapp/react-bootstrap-utils/issues/21)) ([c787a1e](https://github.com/geolaborapp/react-bootstrap-utils/commit/c787a1e213361c77c62b0125e0a1093d96ec40d9))
+
+### [0.26.18](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.17...v0.26.18) (2022-02-25)
+
+
+### Bug Fixes
+
+* fixes initial load of formAutocomplete that allows unlisted values ([#20](https://github.com/geolaborapp/react-bootstrap-utils/issues/20)) ([105e62b](https://github.com/geolaborapp/react-bootstrap-utils/commit/105e62b0769fa0530b80889d3307d4aae4d7199b))
+
+### [0.26.17](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.16...v0.26.17) (2022-02-17)
+
+
+### Bug Fixes
+
+* fixes selected item in FormAutocomplete after useFormControl setValue and when values are objects ([#19](https://github.com/geolaborapp/react-bootstrap-utils/issues/19)) ([4daac7b](https://github.com/geolaborapp/react-bootstrap-utils/commit/4daac7bc29ee0d7e2c6a81aa63554ff034be2380))
+
+### [0.26.16](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.15...v0.26.16) (2022-01-21)
+
+
+### Features
+
+* add FormInputMask ([#17](https://github.com/geolaborapp/react-bootstrap-utils/issues/17)) ([4c3e688](https://github.com/geolaborapp/react-bootstrap-utils/commit/4c3e688c23754ecbfbce45b472aebc4fdde06f58))
+
+### [0.26.15](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.14...v0.26.15) (2022-01-20)
+
+
+### Features
+
+* add actions and custom validations in form2 ([cc19aac](https://github.com/geolaborapp/react-bootstrap-utils/commit/cc19aaccf7ae3893c605e8dbb57041f2070b4800))
+* adds form checkbox,radio,autocomplete and dropdown ([8407bd6](https://github.com/geolaborapp/react-bootstrap-utils/commit/8407bd64b01fe27d58e7b5aaacf2e35a6fe98246))
+* adds missing form2 props and components ([ea612dd](https://github.com/geolaborapp/react-bootstrap-utils/commit/ea612dd909def649ea61617155ebf8e8e7d63f43))
+
+### [0.26.14](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.13...v0.26.14) (2022-01-19)
+
+
+### Features
+
+* :rewind: retira data-test do header da tabela ([f4654b3](https://github.com/geolaborapp/react-bootstrap-utils/commit/f4654b3f54f558ef2f6d1b07f048874b78302a01))
+* :sparkles: adiciona data-testid para Table ([0558d08](https://github.com/geolaborapp/react-bootstrap-utils/commit/0558d0820118c1ed904391ea8c6c6a4a98664f75))
+* adiciona data-testid para Table ([2b0ca94](https://github.com/geolaborapp/react-bootstrap-utils/commit/2b0ca949c14fdcfde2611a9d31fae70f552f3cdb))
+* includes form-group2 files ([d9f9462](https://github.com/geolaborapp/react-bootstrap-utils/commit/d9f94620e5d78542f9a9289f71622b8f3423478c))
+* includes form-group2 files ([07b7305](https://github.com/geolaborapp/react-bootstrap-utils/commit/07b73052b012db568cdda4cab3428bf615b1ba6f))
+
+### [0.26.13](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.12...v0.26.13) (2021-10-25)
+
+
+### Features
+
+* allow to conditionally hide table columns ([fa0f0dd](https://github.com/geolaborapp/react-bootstrap-utils/commit/fa0f0dd8a246def007eb4ffbdede1f0e83ee1cb8))
+
+### [0.26.12](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.11...v0.26.12) (2021-10-20)
+
+
+### Bug Fixes
+
+* define default value in align helper function ([2f216a4](https://github.com/geolaborapp/react-bootstrap-utils/commit/2f216a4a308fc95332285692c75b84d7fedaecbd))
+
+### [0.26.11](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.10...v0.26.11) (2021-10-15)
+
+
+### Bug Fixes
+
+* load of an unlisted value in the form autocomplete ([85b5a80](https://github.com/geolaborapp/react-bootstrap-utils/commit/85b5a80efa7865d32dd25f6740b45328f5c7af0f))
+* load of an unlisted value in the form autocomplete ([c0c84d1](https://github.com/geolaborapp/react-bootstrap-utils/commit/c0c84d175c2ed8143d87b2087fa76da2136faa50))
+
+### [0.26.10](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.9...v0.26.10) (2021-09-03)
+
+
+### Features
+
+* makes the use of "template" more flexible for Dropdown and FormDropdown ([#9](https://github.com/geolaborapp/react-bootstrap-utils/issues/9)) ([24a2d86](https://github.com/geolaborapp/react-bootstrap-utils/commit/24a2d865811edadd94e82c3835da46f6bded4edc))
+
+### [0.26.9](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.8...v0.26.9) (2021-08-25)
+
+
+### Features
+
+* new dropdown selection component ([#6](https://github.com/geolaborapp/react-bootstrap-utils/issues/6)) ([60fae42](https://github.com/geolaborapp/react-bootstrap-utils/commit/60fae42059ece24817b61f293aeaa12842e85742))
+
+### [0.26.8](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.7...v0.26.8) (2021-08-13)
+
+
+### Features
+
+* include prop to hide closed modals content ([4099fdc](https://github.com/geolaborapp/react-bootstrap-utils/commit/4099fdcd86e9e1caafa539a7659d7edc82200dd7))
+* include prop to hide closed modals content ([82a00d6](https://github.com/geolaborapp/react-bootstrap-utils/commit/82a00d638671990edff1bcca602950364943cb00))
+
+### [0.26.7](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.6...v0.26.7) (2021-07-28)
+
+
+### Bug Fixes
+
+* set the selected value as initial search in autocomplete ([07c4369](https://github.com/geolaborapp/react-bootstrap-utils/commit/07c4369ec0585b426500824e65bb0599f9befee1))
+* set the selected value as initial search in autocomplete ([bd3be74](https://github.com/geolaborapp/react-bootstrap-utils/commit/bd3be741cba33fc0ad3583beaff63a57bed388ee))
+
+### [0.26.6](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.5...v0.26.6) (2021-07-21)
+
+
+### Features
+
+* adiciona componente SortableTable ([320feab](https://github.com/geolaborapp/react-bootstrap-utils/commit/320feab1af4e9a9339a6ac36e48551de17026ebe))
+
+
+### Bug Fixes
+
+* flexibiliza papel das linhas de uma tabela ([dd39fa7](https://github.com/geolaborapp/react-bootstrap-utils/commit/dd39fa7988f62fd43870ea78c34c4e3cd504aae2))
+
+### [0.26.5](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.3...v0.26.5) (2021-07-09)
+
+
+### Features
+
+* allow input masks functions on forminput2 ([afaa1ce](https://github.com/geolaborapp/react-bootstrap-utils/commit/afaa1cea773ea9abedd8ffaa4e827b0e14b22ea0))
+* allow input masks functions on forminput2 ([049b214](https://github.com/geolaborapp/react-bootstrap-utils/commit/049b21484b7b00dec2f91f9c775b6a18ef9ea264))
+
+
+### Bug Fixes
+
+* check if an element is descendant before remove ([a1eb85d](https://github.com/geolaborapp/react-bootstrap-utils/commit/a1eb85d56cbd0142673e2a35394821a5a4a19874))
+
+### [0.26.4](https://github.com/geolaborapp/react-bootstrap-utils/compare/v0.26.3...v0.26.4) (2021-07-09)
+
+
+### Features
+
+* allow input masks functions on forminput2 ([afaa1ce](https://github.com/geolaborapp/react-bootstrap-utils/commit/afaa1cea773ea9abedd8ffaa4e827b0e14b22ea0))
+* allow input masks functions on forminput2 ([049b214](https://github.com/geolaborapp/react-bootstrap-utils/commit/049b21484b7b00dec2f91f9c775b6a18ef9ea264))
+
+
+### Bug Fixes
+
+* check if an element is descendant before remove ([a1eb85d](https://github.com/geolaborapp/react-bootstrap-utils/commit/a1eb85d56cbd0142673e2a35394821a5a4a19874))
+
### [0.26.3](https://github.com/assisrafael/react-bootstrap-utils/compare/v0.26.2...v0.26.3) (2021-04-21)
diff --git a/README.md b/README.md
index 5adf488..b887512 100644
--- a/README.md
+++ b/README.md
@@ -46,3 +46,35 @@ Starting demo app
```bash
npm run start
```
+
+Starting demo app in source debug mode (recommended for local debugging)
+
+```bash
+npm run start:debug-source
+```
+
+This mode maps demo imports to `src/` (instead of `dist/`) so you can inspect files like
+`src/dialog/Modal.jsx` directly in browser DevTools while running `http://localhost:8080`.
+
+## How to Publish a New Version
+
+Make sure the master branch is updated (git pull) and make sure all new commits (or expected commits) are included.
+Suggested log visualization:
+
+```bash
+git log --graph --pretty=format:'%C(yellow)%h%C(cyan)%d%Creset %s - %C(blue)%an%Creset, %C(white)%ar%Creset'
+```
+
+On the terminal, run the command:
+
+```bash
+npm run release
+```
+
+followed by:
+
+```bash
+git push --follow-tags origin master && npm publish
+```
+
+Check the repository on Github, verifying the newly created tag
\ No newline at end of file
diff --git a/demo/DialogExamples.jsx b/demo/DialogExamples.jsx
index d2d251b..5bcc25e 100644
--- a/demo/DialogExamples.jsx
+++ b/demo/DialogExamples.jsx
@@ -1,5 +1,5 @@
/* eslint-disable no-console */
-import React from 'react';
+import React, { useState } from 'react';
// eslint-disable-next-line import/no-unresolved
import {
@@ -14,6 +14,7 @@ import {
} from '../dist/main';
export function DialogExamples() {
+ const [dialogComponentTitleType, setDialogComponentTitleType] = useState(false);
const { showDialog, DialogPortal } = useDialog({
title: 'useDialog',
body: ({ foo, bar }) => (
@@ -57,6 +58,24 @@ export function DialogExamples() {
+
+
Simple Dialog with component as title
+
Simple dialog {dialogComponentTitleType ? 'a' : 'b'}>}
+ body={
+
+ Lorem ipsum dolor, sit amet consectetur adipisicing elit. Quibusdam sequi vero sapiente delectus error
+ sunt, a eveniet nobis est ex magni nesciunt magnam. Eaque eius hic eligendi dolorum ut quas?
+ setDialogComponentTitleType((t) => !t)}>click to toggle the title!
+
+ }
+ keyboard={false}
+ >
+
+ Simple Dialog
+
+
+
No header Dialog
+
+
Dialog with function onClose
+
+ Lorem ipsum dolor, sit amet consectetur adipisicing elit. Quibusdam sequi vero sapiente delectus error
+ sunt, a eveniet nobis est ex magni nesciunt magnam. Eaque eius hic eligendi dolorum ut quas?
+
+ }
+ keyboard={false}
+ onClose={() => console.log('onClose')}
+ >
+
+ Dialog with function onClose
+
+
+
Scrolling long content Dialog
console.info('onProceed')}
+ onProceed={async () => {
+ console.info('onProceed - start');
+ await new Promise((resolve) => setTimeout(resolve, 1000));
+ console.info('onProceed - end');
+ }}
onCancel={() => console.warn('onCancel')}
>
@@ -191,28 +233,7 @@ export function DialogExamples() {
magni possimus pariatur iste incidunt. Dolore adipisci quaerat nemo dicta voluptas beatae voluptates rem
neque veritatis, necessitatibus ipsam corporis?
-
- Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque voluptatem reprehenderit laudantium
- facilis necessitatibus sed optio nihil fugiat numquam minus earum ipsum quam ab harum natus, velit
- libero excepturi quae! Lorem ipsum dolor sit amet consectetur adipisicing elit. Praesentium corrupti
- maxime, magni possimus pariatur iste incidunt. Dolore adipisci quaerat nemo dicta voluptas beatae
- voluptates rem neque veritatis, necessitatibus ipsam corporis?
-
-
- Open third dialog
-
-
- >
- }
- >
-
- Open second dialog
-
-
+
>
}
>
@@ -221,6 +242,14 @@ export function DialogExamples() {
+
+
Parent unmount during onProceed
+
+
+
+
Overlapping dialogs + unmount
+
+
Open a dialog programmatically
@@ -229,14 +258,165 @@ export function DialogExamples() {
useDialog
-
showConfirmationDialog({ foo: 'FOO' })}>
+ showConfirmationDialog({ foo: 'FOO' })}>
useConfirmationDialog
- showAlertDialog({ bar: 'BAR' })}>
+ showAlertDialog({ bar: 'BAR' })}>
useAlertDialog
);
}
+
+function ParentUnmountTest() {
+ const [showParent, setShowParent] = useState(true);
+
+ return (
+
+
+ Click "Proceed" in the ConfirmationDialog. The parent will unmount during onProceed.
+
+ Expected: Backdrop should be cleaned up (no stuck overlay).
+
+ Bug (before fix): Backdrop stays stuck because modalRef.current is null during cleanup.
+
+ {showParent ? (
+
setShowParent(false)} />
+ ) : (
+
+
Parent unmounted. Backdrop should be gone.
+
setShowParent(true)}>
+ Reset test
+
+
+ )}
+
+ );
+}
+
+function ConfirmationDialogChild({ onProceedAction }) {
+ return (
+ {
+ console.log('onProceed: triggering parent unmount...');
+ onProceedAction();
+ console.log('onProceed: parent unmounted');
+ }}
+ onCancel={() => console.log('onCancel')}
+ >
+
+ Open ConfirmationDialog
+
+
+ );
+}
+
+function OverlappingUnmountTest() {
+ const [showParent, setShowParent] = useState(true);
+
+ return (
+
+
+ Open Dialog A → Open Dialog B → Click Proceed in ConfirmationDialog.
+
+ Expected: All backdrops cleaned up, body scroll restored.
+
+ Bug: z-index decremented incorrectly or backdrop stuck.
+
+ {showParent ? (
+
+ This is Dialog A. Open Dialog B below, then click Proceed to trigger parent unmount.
+
+ This is Dialog B. Click the ConfirmationDialog below.
+ {
+ console.log('onProceed: unmounting parent with overlapping dialogs...');
+ setShowParent(false);
+ console.log('onProceed: parent unmounted');
+ }}
+ onCancel={() => console.log('onCancel')}
+ >
+
+ Open ConfirmationDialog
+
+
+ >
+ }
+ >
+
+ Open Dialog B
+
+
+ >
+ }
+ >
+
+ Open Dialog A
+
+
+ ) : (
+
+
All dialogs unmounted. Backdrop should be gone, body scroll restored.
+
setShowParent(true)}>
+ Reset test
+
+
+ )}
+
+ );
+}
+
+function SecondDialog({ close }) {
+ const [forceRender, setForceRender] = useState(0);
+
+ return (
+ (
+ <>
+ The dialog is working correctly if, even if the component re-renders, the dialog doesn't increment the z-index
+ and the overlay works correctly. After n clicks, and closing the dialog, the overlay of overlapping dialog
+ must be correct.
+
+
setForceRender((prev) => prev + 1)}>
+ Force re-render
+
+
+
+ Open third dialog
+
+
+
{
+ setForceRender((prev) => prev + 1);
+ close();
+ }}
+ >
+ Close second dialog
+
+
+ >
+ )}
+ >
+
+ Open second dialog
+
+
+ );
+}
diff --git a/demo/DropdownExamples.jsx b/demo/DropdownExamples.jsx
index 65554cd..f5f08b3 100644
--- a/demo/DropdownExamples.jsx
+++ b/demo/DropdownExamples.jsx
@@ -1,4 +1,4 @@
-import React, { useState } from 'react';
+import React, { useState, useCallback, useEffect, useRef } from 'react';
// eslint-disable-next-line import/no-unresolved
import { Dropdown } from '../dist/main';
@@ -19,26 +19,73 @@ const items = [
];
export function DropdownExamples() {
+ return (
+
+
+
+
+ );
+}
+
+function SimpleDropdown() {
const [isOpen, setIsOpen] = useState();
return (
-
-
-
Simple dropdown
- setIsOpen(true)}>
- Simple dropdown
-
-
- {
- // eslint-disable-next-line no-console
- console.info('onSelect', args);
- setIsOpen(false);
- }}
- />
-
+
+
Simple dropdown
+ setIsOpen(true)}>
+ Simple dropdown
+
+
+ {
+ // eslint-disable-next-line no-console
+ console.info('onSelect', args);
+ setIsOpen(false);
+ }}
+ />
+
+ );
+}
+
+function DropdownWithRef() {
+ const [isOpen, setIsOpen] = useState();
+ const [filterString, setFilterString] = useState('');
+ const listContainerRef = useRef(null);
+
+ const filter = useCallback(
+ (item) => {
+ const itemValue = JSON.stringify(item.label).toLowerCase();
+ const searchValue = filterString.toLowerCase();
+
+ return itemValue.includes(searchValue);
+ },
+ [filterString]
+ );
+
+ useEffect(() => console.log('listContainerRef?.current: ', listContainerRef?.current), [filterString]);
+
+ return (
+
+
Dropdown with ref
+ setFilterString(e.target.value)} />
+
+ setIsOpen(true)}>
+ Dropdown with ref
+
+
+ {
+ // eslint-disable-next-line no-console
+ console.info('onSelect', args);
+ setIsOpen(false);
+ }}
+ listContainerRef={listContainerRef}
+ />
);
}
diff --git a/demo/Form2Examples.jsx b/demo/Form2Examples.jsx
deleted file mode 100644
index 5dc2b07..0000000
--- a/demo/Form2Examples.jsx
+++ /dev/null
@@ -1,124 +0,0 @@
-/* eslint-disable no-console */
-import React, { useEffect, useState } from 'react';
-import { Form2, FormInput2, FormSelect2, FormSwitch2, useFormControl2, useFormEffect } from '../dist/main';
-
-export function Form2Examples() {
- return (
-
- Alternative Form implementation
-
console.log('onSubmit', data)}
- onChange={(data) => console.log('onChange', data)}
- transform={(formData) => {
- console.log('transform', formData);
-
- return {
- __v: formData.__v ? formData.__v + 1 : 1,
- attrB: `${formData.attrB || ''}A`,
- Obj: {
- y: `${formData.Obj.y || ''}X`,
- w: {
- z: formData.__v ? formData.__v * 2 : 1,
- },
- t: formData.__v % 2 ? null : undefined,
- u: new Date(),
- },
- arr: formData.arr.map((v) => parseFloat(v) + 1),
- arrObj: formData.arrObj.map((v) => {
- v.o = parseFloat(v.o) ** 2;
-
- return v;
- }),
- };
- }}
- >
-
-
- Array
-
-
-
- Array of objects
-
-
-
- AttrA
-
-
-
- AttrB
-
-
-
- AttrC
-
-
-
- AttrD
-
-
-
- Version
-
-
-
-
- Observer
-
-
- Submit
-
-
- );
-}
-
-function FormVersion() {
- const { getValue } = useFormControl2('__v');
-
- return
{getValue() || ''}
;
-}
-
-function FormArray() {
- const { getValue, setValue, isRegistered } = useFormControl2('arr');
-
- useEffect(() => {
- if (isRegistered()) {
- console.log('initialized value [arr] :>> ', getValue());
- } else {
- console.log('uninitialized value [arr] :>> ', getValue());
- }
- }, [getValue, setValue, isRegistered]);
-
- return (getValue() || []).map((v, index) =>
);
-}
-
-function FormArrayOfObjects() {
- const { getValue } = useFormControl2('arrObj');
-
- return (getValue() || []).map((v, index) =>
);
-}
-
-function FormObserver() {
- const [state, setState] = useState(0);
-
- useFormEffect('Obj', (data) => {
- console.log('FormObserver :>> ', data);
- setState((p) => p + 1);
- });
-
- return
{state}
;
-}
diff --git a/demo/FormExamples.jsx b/demo/FormExamples.jsx
index 800411f..e460632 100644
--- a/demo/FormExamples.jsx
+++ b/demo/FormExamples.jsx
@@ -1,5 +1,5 @@
/* eslint-disable no-console */
-import React from 'react';
+import React, { useMemo, useState } from 'react';
import {
Form,
FormGroupInput,
@@ -9,23 +9,127 @@ import {
FormGroupRadio,
FormGroupTextarea,
FormGroupAutocomplete,
+ FormGroupDropdown,
+ useFormControl,
+ FormGroupAutocompleteTag,
+ Table,
+ FormAutocompleteTag,
+ FormGroupTable,
+ Dialog,
// eslint-disable-next-line import/no-unresolved
} from '../dist/main';
export function FormExamples() {
+ const [bootstrapFormValidation, setBootstrapFormValidation] = useState(false);
+ const [changeCustomValidation, setChangeCustomValidation] = useState(false);
+ const [useCustomActions, setUseCustomActions] = useState(false);
+
+ const validations = useMemo(
+ () => ({
+ numberField: [
+ {
+ message: 'Must be filled if textField is not empty',
+ validate(value, formData) {
+ return !formData.textField || value;
+ },
+ },
+ ],
+ autocompleteField: [
+ {
+ message: 'Must be filled',
+ validate(value) {
+ return value;
+ },
+ },
+ ],
+ selectField: [
+ {
+ message: 'Must be filled if autocompleteField1 is empty',
+ validate(value, formData) {
+ return formData.autocompleteField1 || value;
+ },
+ },
+ ],
+ switchField: [
+ {
+ message: 'Must be filled if selectField is empty',
+ validate(value, formData) {
+ return formData.selectField || value;
+ },
+ },
+ ],
+ checkboxField: [
+ {
+ message: 'Must be filled if switchField is empty',
+ validate(value, formData) {
+ return formData.switchField || value;
+ },
+ },
+ ],
+ radioField: [
+ {
+ message: 'Must be filled if checkboxField is empty',
+ validate(value, formData) {
+ return formData.checkboxField || value;
+ },
+ },
+ ],
+ textareaField: [
+ {
+ message: 'Must be filled if radioField is empty',
+ validate(value, formData) {
+ return formData.radioField || value;
+ },
+ },
+ ],
+ variableCustomValidation: [
+ {
+ message: `Must be filled with "${changeCustomValidation ? 'b' : 'a'}"`,
+ validate(value, formData) {
+ return changeCustomValidation ? value === 'b' : value === 'a';
+ },
+ },
+ ],
+ undefinedMessageField: [
+ {
+ validate(value) {
+ return value;
+ },
+ },
+ ],
+ formTable2: [
+ {
+ message: 'Must have more than 2 itens',
+ validate(value) {
+ return value?.length > 2;
+ },
+ },
+ ],
+ }),
+ [changeCustomValidation]
+ );
+
return (
+
+
+
+
+
+
+ console.log('autocompleteTag2 changed. From: ', lastValue, ' To:', newValue)
+ }
+ onSearch={(searchedValue) => console.log('autocompleteTag2 serachedValue changed to: ', searchedValue)}
+ />
+
+
+ }
+ removeButtonIcon={ }
+ options={['1', 'tag', 'preSelected']}
+ allowRemove
+ openOnFocus
+ help="Add at least one tag to this field"
+ />
+
+
+
+
+
+
+
+ (
+
+ {v}
+
+ )}
+ />
+
+
+
+
+
+
@@ -257,7 +608,7 @@ export function FormExamples() {
- console.log('TESTE')}
afterChange={console.log.bind(console, 'afterChange checkbox')}
/>
@@ -334,6 +686,8 @@ export function FormExamples() {
/>
+
+
{[0, 1].map((index) => (
@@ -348,6 +702,264 @@ export function FormExamples() {
))}
+
+
console.log('afterChange dropdown')}
+ template={(label, value) => {
+ return value ? (
+
+
{label.title ?? '-'}
+
{label.subtitle ?? '-'}
+
+ ) : (
+ label
+ );
+ }}
+ itemClassName="border-bottom"
+ childClassName="text-muted"
+ trackBy="secondValue"
+ />
+
+ Value one,
+ },
+ {
+ value: '02',
+ label: Value two
,
+ },
+ {
+ value: '03',
+ label: Value three
,
+ },
+ ]}
+ placeholder="Select one value"
+ includeEmptyItem={false}
+ menuClassName="p-4 w-100"
+ />
+
+ FormTable
+
+
+
+
+
+
+
);
}
+
+const ResetForm = () => {
+ const formControl = useFormControl();
+
+ const reset = () => {
+ console.log('reset form - resets to initial state');
+
+ formControl.resetFormData();
+ };
+
+ return (
+
+ Reset form
+
+ );
+};
+
+const ClearForm = () => {
+ const formControl = useFormControl();
+
+ const clear = () => {
+ console.log('clear form - sets empty state');
+
+ formControl.clearFormData();
+ };
+
+ return (
+
+ Clear form
+
+ );
+};
+
+const FormSwitchExample = () => {
+ const autocompleteField1FormControl = useFormControl('autocompleteField1');
+
+ const afterChange = (value) => {
+ console.log('afterChange switch');
+
+ if (value) {
+ autocompleteField1FormControl.setValue({ _id: '3456', name: '3456 name' });
+ } else {
+ autocompleteField1FormControl.setValue(null);
+ }
+ };
+
+ return (
+ console.log('TESTE')}
+ />
+ );
+};
+
+function FormAutocompleteTagsWithCustomLabel() {
+ const autocompleteTag6FormControl = useFormControl('autocompleteTag7');
+ const tags = useMemo(() => autocompleteTag6FormControl.getValue() || []);
+
+ return (
+
+
+
Autocomplete with tags - Custom label:
+
+
+
+
+ );
+}
+
+function FormGroupTable1() {
+ return (
+ console.log('formTable', args)}
+ tableProps={{
+ actionLabel: 'Actions',
+ columns: [
+ {
+ attribute: 'name',
+ label: 'Name',
+ },
+ {
+ attribute: 'number',
+ label: 'Number',
+ },
+ ],
+ }}
+ getRemoveComponent={(removeItem) => removeItem()}> }
+ getAddItemComponent={(addItem) => }
+ />
+ );
+}
+function FormGroupTable2() {
+ return (
+ removeItem()}> }
+ getAddItemComponent={(addItem) => }
+ />
+ );
+}
+
+function AddFormGroupTableItem({ addItem }) {
+ return (
+ (
+
+ )}
+ >
+
+ Add item
+
+
+ );
+}
diff --git a/demo/ListGroupExamples.jsx b/demo/ListGroupExamples.jsx
index e95ad5a..0b5f0c8 100644
--- a/demo/ListGroupExamples.jsx
+++ b/demo/ListGroupExamples.jsx
@@ -21,6 +21,34 @@ const items = [
},
];
+const itemsWithBackgrounds = [
+ {
+ title: 'Primary Item',
+ description: 'This is a primary colored list item.',
+ background: 'primary',
+ },
+ {
+ title: 'Success Item',
+ description: 'This is a success colored list item.',
+ background: 'success',
+ },
+ {
+ title: 'Danger Item',
+ description: 'This is a danger colored list item.',
+ background: 'danger',
+ },
+ {
+ title: 'Warning Item',
+ description: 'This is a warning colored list item.',
+ background: 'warning',
+ },
+ {
+ title: 'Info Item',
+ description: 'This is an info colored list item.',
+ background: 'info',
+ },
+];
+
export function ListGroupExamples() {
return (
@@ -95,6 +123,31 @@ export function ListGroupExamples() {
linked={true}
/>
+
+
List group with item backgrounds
+ (
+ <>
+ {item.title}
+ {item.description}
+ >
+ )}
+ />
+
+
+
Linked list group with backgrounds
+ (
+ <>
+ {item.title}
+ {item.description}
+ >
+ )}
+ linked={true}
+ />
+
);
}
diff --git a/demo/TableExamples.jsx b/demo/TableExamples.jsx
index 6ea33c2..941104f 100644
--- a/demo/TableExamples.jsx
+++ b/demo/TableExamples.jsx
@@ -1,7 +1,7 @@
/* eslint-disable no-console */
import React, { useState } from 'react';
// eslint-disable-next-line import/no-unresolved
-import { Table, Form, FormCheckbox } from '../dist/main';
+import { Table, SortableTable, Form, FormCheckbox } from '../dist/main';
import { stopPropagation } from '../src/utils/event-handlers';
export function TableExamples() {
@@ -87,6 +87,7 @@ export function TableExamples() {
{
attribute: 'selected',
label: '#',
+ width: '10%',
format(_, __, index) {
return (
@@ -98,6 +99,7 @@ export function TableExamples() {
{
attribute: 'a',
label: 'A',
+ width: '40%',
format(v) {
return `${v}*`;
},
@@ -105,6 +107,7 @@ export function TableExamples() {
{
attribute: 'b',
label: 'B',
+ width: '30%',
format(v, doc) {
return v + doc.a;
},
@@ -112,6 +115,7 @@ export function TableExamples() {
{
attribute: 'c',
label: 'C',
+ width: '20%',
format(_, __, docIndex) {
return {docIndex + 1} ;
},
@@ -218,6 +222,163 @@ export function TableExamples() {
title: 'Subtract',
content: {doc.b - docIndex}? ,
},
+ (doc, index) => {`${doc.c}-${index}`} ,
+ ]}
+ />
+
+
+
Sortable Table
+
+
+
+
+
+
+
Sortable Table with Custom Header
+
+
+ column?.isSortable !== false ? (
+ sortBy === attribute ? (
+ sortOrder === 'ASC' ? (
+
+ ) : (
+
+ )
+ ) : (
+
+ )
+ ) : (
+ label
+ )
+ }
+ columns={[
+ {
+ attribute: 'a',
+ label: 'A',
+ },
+ {
+ attribute: 'b',
+ label: 'B',
+ isSortable: false,
+ },
+ {
+ attribute: 'c',
+ label: 'C',
+ },
+ ]}
+ docs={[
+ { a: 'B', b: 'G', c: 'Y' },
+ { a: 'C', b: 'I', c: 'Z' },
+ { a: 'A', b: 'H', c: 'X' },
+ { a: 'D', b: 'L', c: 'T' },
+ ]}
+ />
+
+
+
Sortable Table with no default sorting
+
+
+
+
+
Table with column hideIf
+
+
true,
+ },
+ {
+ attribute: 'b',
+ label: 'B',
+ },
+ {
+ attribute: 'c',
+ label: 'C',
+ },
+ ]}
+ docs={[
+ { a: 'B', b: 'G', c: 'Y' },
+ { a: 'C', b: 'I', c: 'Z' },
+ { a: 'A', b: 'H', c: 'X' },
+ { a: 'D', b: 'L', c: 'T' },
+ ]}
+ />
+
+
+
Table with dataTest setted
+
+
diff --git a/demo/TabsExamples.jsx b/demo/TabsExamples.jsx
index 4cf87cd..610d89f 100644
--- a/demo/TabsExamples.jsx
+++ b/demo/TabsExamples.jsx
@@ -69,7 +69,7 @@ export function TabsExamples() {
{ title: 'C', content: },
]}
vertical={true}
- onSelect={console.log}
+ onSelect={(index) => console.log('Index selecionado ', index)}
/>
@@ -81,6 +81,22 @@ export function TabsExamples() {
{ title: 'C', content: },
]}
vertical={true}
+ bordered={true}
+ onSelect={(index) => console.log('Index selecionado ', index)}
+ />
+
+
+
+
+
Hide Tabs
+ },
+ { title: 'B', content: },
+ { title: 'C', content: , hideIf: () => true },
+ { title: 'D', content: , hideIf: () => 10 > 2 },
+ { title: 'E', content: , hideIf: () => 10 < 2 },
+ ]}
/>
@@ -90,11 +106,11 @@ export function TabsExamples() {
function Lorem({ header }) {
return (
-
+ <>
{header}
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Hic iusto dolores voluptatum sunt. Assumenda, vero esse?
Numquam alias repellendus, quaerat beatae expedita inventore recusandae, molestiae earum vel illo provident
ducimus?
-
+ >
);
}
diff --git a/demo/ToastWithCustomState.jsx b/demo/ToastWithCustomState.jsx
new file mode 100644
index 0000000..84a6ee4
--- /dev/null
+++ b/demo/ToastWithCustomState.jsx
@@ -0,0 +1,64 @@
+import React, { useCallback, useState } from 'react';
+// eslint-disable-next-line import/no-unresolved
+import { ToastsContainer } from '../dist/main';
+import { ToastsExamples } from './ToastsExamples';
+
+export function ToastWithCustomState() {
+ const [customToasts, setCustomToasts] = useState([]);
+ const [toastId, setToastId] = useState(0);
+
+ const onClose = useCallback((toast) => setCustomToasts((last) => last.filter(({ _id }) => _id !== toast?._id)), []);
+ const addToast = useCallback(
+ (message, shouldAutoRemove = true) => {
+ const newToast = {
+ _id: toastId,
+ message,
+ type: 'info',
+ position: 'TOP_RIGHT',
+ };
+
+ if (!shouldAutoRemove) {
+ newToast.autoClose = false;
+ }
+
+ setCustomToasts((last) => [...last, newToast]);
+
+ if (shouldAutoRemove) {
+ setTimeout(() => {
+ setCustomToasts((last) => last.filter(({ _id }) => _id !== toastId));
+ }, [5000]);
+ }
+
+ setToastId((last) => last + 1);
+ },
+ [toastId]
+ );
+
+ return (
+
+ Toasts with custom state
+
+
+ addToast('toast with custom state')}>
+ Show Toast
+
+ addToast(`Unique toast ${new Date().getTime()}`)}
+ >
+ Show Unique Toast
+
+ addToast(`Unique toast without autoclose ${new Date().getTime()}`, false)}
+ >
+ Show Unique Toast without autoclose
+
+
+
+
+
+
+
+ );
+}
diff --git a/demo/ToastsWithMessageFormatterExamples.jsx b/demo/ToastsWithMessageFormatterExamples.jsx
new file mode 100644
index 0000000..2b392fe
--- /dev/null
+++ b/demo/ToastsWithMessageFormatterExamples.jsx
@@ -0,0 +1,17 @@
+import React, { useCallback } from 'react';
+// eslint-disable-next-line import/no-unresolved
+import { ToastsContainer } from '../dist/main';
+import { ToastsExamples } from './ToastsExamples';
+
+export function ToastsWithMessageFormatterExamples() {
+ const messageFormatter = useCallback((message) => `Text added on formatter + ${message}`);
+
+ return (
+
+ Toasts with text prepended
+
+
+
+
+ );
+}
diff --git a/demo/UncontrolledFormExamples.jsx b/demo/UncontrolledFormExamples.jsx
new file mode 100644
index 0000000..0675b31
--- /dev/null
+++ b/demo/UncontrolledFormExamples.jsx
@@ -0,0 +1,1199 @@
+/* eslint-disable no-console */
+import React, { useCallback, useEffect, useState } from 'react';
+import {
+ UncontrolledForm,
+ UncontrolledFormGroupCheckbox,
+ UncontrolledFormGroupInput,
+ UncontrolledFormGroupInputMask,
+ UncontrolledFormGroupSelect,
+ UncontrolledFormGroupSwitch,
+ UncontrolledFormGroupTextarea,
+ UncontrolledFormInput,
+ useUncontrolledFormControl,
+ useUncontrolledFormEffect,
+ UncontrolledFormGroupAutocomplete,
+ UncontrolledFormGroupDropdown,
+ UncontrolledFormGroupRadio,
+ UncontrolledFormGroupTable,
+ Dialog,
+} from '../dist/main';
+
+export function UncontrolledFormExamples() {
+ const [bootstrapFormValidation, setBootstrapFormValidation] = useState(false);
+ const [transform, setTransform] = useState(null);
+
+ const transform2 = useCallback((formData) => {
+ console.log('transform2', formData);
+ }, []);
+
+ return (
+
+
Alternative Form implementation
+
console.log('onSubmit', data)}
+ onChange={(data) => console.log('onChange', data)}
+ transform={
+ transform === 2
+ ? transform2
+ : (formData) => {
+ console.log('transform', formData);
+
+ return {
+ __v: formData.__v ? formData.__v + 1 : 1,
+ attrB: `${formData.attrB || ''}A`,
+ Obj: {
+ y: `${formData.Obj.y || ''}X`,
+ w: {
+ z: formData.__v ? formData.__v * 2 : 1,
+ },
+ t: formData.__v % 2 ? null : undefined,
+ u: new Date(),
+ },
+ arr: formData.arr.map((v) => parseFloat(v) + 1),
+ arrObj: formData.arrObj.map((v) => {
+ v.o = parseFloat(v.o) ** 2;
+
+ return v;
+ }),
+ };
+ }
+ }
+ customValidation={bootstrapFormValidation}
+ validations={{
+ autocomplete2Field2: [
+ {
+ message: 'Must be filled if Autocomplete Object Options is empty',
+ validate(value, formData) {
+ return formData.autocomplete2Field1 || value;
+ },
+ },
+ ],
+ attrB: [
+ {
+ message: 'Must be filled if AttrA is not empty',
+ validate(value, formData) {
+ return !formData.attrA || value;
+ },
+ },
+ ],
+ formTable2: [
+ {
+ message: 'Must have more than 2 itens',
+ validate(value) {
+ return value?.length > 2;
+ },
+ },
+ ],
+ }}
+ >
+ Form configuration:
+ setBootstrapFormValidation(value)}
+ />
+
+
+
+ Array
+
+
+
+ Array of objects
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ({
+ value: index + 1,
+ label: `${index + 1}${index + 2}${index + 3}${index + 4}`,
+ }))}
+ placeholder="Type some numbers"
+ template={(option) => (
+ <>
+ {option} - {option}
+ >
+ )}
+ required={() => true}
+ />
+
+ {
+ console.log(oldValue, ' changed to :>> ', newValue);
+ }}
+ onClearSearch={() => {
+ console.log('search has been cleared');
+ }}
+ />
+
+ {
+ console.log(oldValue, ' changed to :>> ', newValue);
+ }}
+ onClearSearch={() => {
+ console.log('search has been cleared');
+ }}
+ template={(label, value) => (
+
+
{value?.attribute1}
+
{value?.attribute2}
+
{value?.attribute3}
+
+ )}
+ openOnFocus
+ />
+
+
+
+
+
+
+
+
+
+
+
+ Version
+
+
+
+ {
+ console.log(oldValue, ' changed to :>> ', newValue);
+ }}
+ />
+
+
+ Observer
+
+
+
+ Observer 2
+
+
+
+ value,
+ }}
+ inputAttrs={{
+ afterChange(newValue, oldValue) {
+ console.log(oldValue, ' changed to :>> ', newValue);
+
+ console.log('afterChange in decimalMask :>> ', newValue);
+ },
+ }}
+ />
+
+ dateMask(value).maskedValue,
+ }}
+ />
+
+ value,
+ }}
+ />
+
+ value,
+ }}
+ />
+
+ ({ rawValue: v, maskedValue: v }),
+ format: (v) => v,
+ }}
+ />
+
+ {linha}
}
+ />
+ {linha}
}
+ disabled
+ />
+
+ SetValue Test
+
+ (transform === 2 ? setTransform(null) : setTransform(2))}
+ >
+ Toggle transform
+
+
+ FormInput
+
+
+
+
+
+ FormAutocomplete
+
+
+
+
+
+ FormCheckbox
+
+
+
+
+
+ FormDropdown
+
+
+
+
+
+ FormInputMask
+
+
+
+
+
+ FormRadio
+
+
+
+
+
+ FormSelect
+
+
+
+
+
+ FormSwitch
+
+
+
+
+
+ FormTextarea
+
+
+
+
+
+ FormTable
+
+
+
+
+
+
+ );
+}
+
+function FormVersion() {
+ const { getValue } = useUncontrolledFormControl('__v');
+
+ return {getValue() || ''}
;
+}
+
+function FormArray() {
+ const formArrayState = useState();
+ const { getValue, setValue, isRegistered } = useUncontrolledFormControl('arr', 'array', { state: formArrayState });
+ const [refresh, shouldRefresh] = useState(false);
+
+ useEffect(() => {
+ if (isRegistered()) {
+ console.log('initialized value [arr] :>> ', getValue());
+ } else {
+ console.log('uninitialized value [arr] :>> ', getValue());
+ }
+ }, [getValue, setValue, isRegistered]);
+
+ const remove = useCallback((index) => {
+ const newArray = [...getValue()];
+
+ newArray.splice(index, 1);
+
+ setValue(newArray);
+
+ shouldRefresh(true);
+
+ setTimeout(() => {
+ shouldRefresh(false);
+ }, 100);
+ });
+
+ const newElement = useCallback(() => {
+ setValue((prevValue) => [...prevValue, Math.max(...prevValue) + 1]);
+ }, [setValue]);
+
+ if (refresh) {
+ return <>>;
+ }
+
+ return (
+ <>
+ {(getValue() || []).map((v, index) => (
+
+
+
+ remove(index)}>
+ Remove
+
+
+ ))}
+
+
+
+ New
+
+
+ >
+ );
+}
+
+function FormArrayOfObjects() {
+ const formArrayOfObjectsState = useState();
+ const { getValue } = useUncontrolledFormControl('arrObj', 'array', { state: formArrayOfObjectsState });
+
+ return (getValue() || []).map((v, index) => );
+}
+
+function FormObserver() {
+ const [state, setState] = useState(0);
+
+ useUncontrolledFormEffect('Obj', (data) => {
+ console.log('FormObserver :>> ', data);
+ setState((p) => p + 1);
+ });
+
+ return {state}
;
+}
+
+function decimalMask(value) {
+ const number = parseFloat(value);
+ let maskedValue = String(value);
+
+ maskedValue = maskedValue.replace(/\D/g, '');
+ maskedValue = maskedValue.replace(/(\d)(\d{3})$/, '$1.$2');
+
+ return {
+ rawValue: number,
+ maskedValue,
+ };
+}
+
+function dateMask(value) {
+ let maskedValue = String(value);
+
+ maskedValue = maskedValue.replace(/\D/g, '');
+
+ maskedValue = maskedValue.replace(/(\d{2})(\d)/, '$1/$2');
+ maskedValue = maskedValue.replace(/(\d{2})(\d)/, '$1/$2');
+
+ return {
+ rawValue: maskedValue,
+ maskedValue,
+ };
+}
+
+function hourMask(v) {
+ let maskedValue = v;
+
+ maskedValue = maskedValue.replace(/\D/g, '');
+ maskedValue = maskedValue.replace(/(\d{2})(\d)/, '$1:$2');
+
+ return { rawValue: maskedValue, maskedValue };
+}
+
+function currencyMask(v) {
+ const rawValue = parseFloat(v);
+ let maskedValue = v;
+
+ maskedValue = maskedValue.replace(/\D/g, '');
+ maskedValue = maskedValue.replace(/(\d)(\d{2})$/, '$1.$2');
+ maskedValue = maskedValue.replace(/(?=(\d{3})+(\D))\B/g, ',');
+
+ return { maskedValue, rawValue };
+}
+
+function FormObserver2() {
+ const [toggleName, setToggleName] = useState(false);
+
+ return (
+
+
+ setToggleName(v)}
+ />
+
+
+
+ );
+}
+
+function FormObserved2ObservedComponent({ name }) {
+ const [value, setValue] = useState();
+
+ useUncontrolledFormEffect(
+ name,
+ (value) => {
+ setValue(value);
+ },
+ [name]
+ );
+
+ return (
+
+
+
{`Input observed "${name}"`}
+
{`Value "${value}"`}
+
+
+
+ );
+}
+
+function FormInputSetValueTeste1({}) {
+ const input2 = useUncontrolledFormControl('input2');
+ const input3 = useUncontrolledFormControl('input3');
+
+ const afterChange = useCallback((v) => {
+ input2.setValue(v);
+ input3.setValue(v);
+ }, []);
+
+ return (
+ <>
+
+
+
+
+
+
+ >
+ );
+}
+
+function FormInputSetValueTeste2({}) {
+ return (
+
+
+
+ );
+}
+
+function FormAutocompleteSetValueTeste1({}) {
+ const autoComplete2 = useUncontrolledFormControl('autoComplete2');
+ const autoComplete3 = useUncontrolledFormControl('autoComplete3');
+
+ const afterChange = useCallback((v) => {
+ autoComplete2.setValue(v);
+ autoComplete3.setValue(v);
+ }, []);
+
+ return (
+ <>
+
+
+
+
+
+
+ >
+ );
+}
+
+function FormAutocompleteSetValueTeste2({}) {
+ return (
+
+
+
+ );
+}
+
+function FormCheckboxSetValueTeste1({}) {
+ const checkbox2 = useUncontrolledFormControl('checkbox2');
+ const checkbox3 = useUncontrolledFormControl('checkbox3');
+
+ const afterChange = useCallback((v) => {
+ checkbox2.setValue(v);
+ checkbox3.setValue(v);
+ }, []);
+
+ return (
+ <>
+
+
+
+
+
+
+ >
+ );
+}
+
+function FormCheckboxSetValueTeste2({}) {
+ return (
+
+
+
+ );
+}
+
+function FormDropdownSetValueTeste1({}) {
+ const dropdown2 = useUncontrolledFormControl('dropdown2');
+ const dropdown3 = useUncontrolledFormControl('dropdown3');
+
+ const afterChange = useCallback((v) => {
+ dropdown2.setValue(v);
+ dropdown3.setValue(v);
+ }, []);
+
+ return (
+ <>
+
+
+
+
+ {linha} }
+ />
+
+ >
+ );
+}
+
+function FormDropdownSetValueTeste2({}) {
+ return (
+
+
+
+ );
+}
+
+function FormInputMaskSetValueTeste1({}) {
+ const datemask2 = useUncontrolledFormControl('datemask2');
+ const datemask3 = useUncontrolledFormControl('datemask3');
+
+ const afterChange = useCallback((v) => {
+ datemask2.setValue(v);
+ datemask3.setValue(v);
+ }, []);
+
+ return (
+ <>
+
+ dateMask(value).maskedValue,
+ }}
+ inputAttrs={{
+ maxLength: '10',
+ afterChange,
+ }}
+ />
+
+
+ dateMask(value).maskedValue,
+ }}
+ inputAttrs={{
+ maxLength: '10',
+ }}
+ />
+
+ >
+ );
+}
+
+function FormInputMaskSetValueTeste2({}) {
+ return (
+
+ dateMask(value).maskedValue,
+ }}
+ inputAttrs={{
+ maxLength: '10',
+ }}
+ />
+
+ );
+}
+
+function FormRadioSetValueTeste1({}) {
+ const radio2 = useUncontrolledFormControl('radio2');
+ const radio3 = useUncontrolledFormControl('radio3');
+
+ const afterChange = useCallback((v) => {
+ radio2.setValue(v);
+ radio3.setValue(v);
+ }, []);
+
+ return (
+ <>
+
+
+
+
+
+
+ >
+ );
+}
+
+function FormRadioSetValueTeste2({}) {
+ return (
+
+
+
+ );
+}
+
+function FormSelectSetValueTeste1({}) {
+ const select2 = useUncontrolledFormControl('select2');
+ const select3 = useUncontrolledFormControl('select3');
+
+ const afterChange = useCallback((v) => {
+ select2.setValue(v);
+ select3.setValue(v);
+ }, []);
+
+ return (
+ <>
+
+
+
+
+
+
+ >
+ );
+}
+
+function FormSelectSetValueTeste2({}) {
+ return (
+
+
+
+ );
+}
+
+function FormSwitchSetValueTeste1({}) {
+ const switch2 = useUncontrolledFormControl('switch2');
+ const switch3 = useUncontrolledFormControl('switch3');
+
+ const afterChange = useCallback((v) => {
+ switch2.setValue(v);
+ switch3.setValue(v);
+ }, []);
+
+ return (
+ <>
+
+
+
+
+
+
+ >
+ );
+}
+
+function FormSwitchSetValueTeste2({}) {
+ return (
+
+
+
+ );
+}
+
+function FormTextareaSetValueTeste1({}) {
+ const textarea2 = useUncontrolledFormControl('textarea2');
+ const textarea3 = useUncontrolledFormControl('textarea3');
+
+ const afterChange = useCallback((v) => {
+ textarea2.setValue(v);
+ textarea3.setValue(v);
+ }, []);
+
+ return (
+ <>
+
+
+
+
+
+
+ >
+ );
+}
+
+function FormTextareaSetValueTeste2({}) {
+ return (
+
+
+
+ );
+}
+
+function FormUncontrolledFormGroupTable1() {
+ return (
+ console.log('formTable', args)}
+ tableProps={{
+ actionLabel: 'Actions',
+ columns: [
+ {
+ attribute: 'name',
+ label: 'Name',
+ },
+ {
+ attribute: 'number',
+ label: 'Number',
+ },
+ ],
+ }}
+ getRemoveComponent={(removeItem) => removeItem()}> }
+ getAddItemComponent={(addItem) => }
+ />
+ );
+}
+function FormUncontrolledFormGroupTable2() {
+ return (
+ removeItem()}> }
+ getAddItemComponent={(addItem) => }
+ />
+ );
+}
+
+function AddFormGroupTableItem({ addItem }) {
+ return (
+ (
+ {
+ console.info('submit', data);
+ addItem(data);
+ close();
+ }}
+ onCancel={() => {
+ console.warn('cancel');
+ close();
+ }}
+ >
+
+
+
+ )}
+ >
+
+ Add item
+
+
+ );
+}
diff --git a/demo/demo.jsx b/demo/demo.jsx
index 3baac6d..59e071a 100644
--- a/demo/demo.jsx
+++ b/demo/demo.jsx
@@ -1,7 +1,7 @@
/* eslint-disable import/max-dependencies */
/* eslint-disable no-console */
import React from 'react';
-import ReactDOM from 'react-dom';
+import { createRoot } from 'react-dom/client';
// eslint-disable-next-line import/no-unresolved
import { StatefulTabs, Pagination, ToastsContainer } from '../dist/main';
@@ -14,9 +14,13 @@ import { ListGroupExamples } from './ListGroupExamples';
import { ToastsExamples } from './ToastsExamples';
import { DropdownExamples } from './DropdownExamples';
import { TreeViewExamples } from './TreeViewExamples';
-import { Form2Examples } from './Form2Examples';
+import { UncontrolledFormExamples } from './UncontrolledFormExamples';
+import { ToastsWithMessageFormatterExamples } from './ToastsWithMessageFormatterExamples';
+import { ToastWithCustomState } from './ToastWithCustomState';
-ReactDOM.render(
+const root = createRoot(document.getElementById('root'));
+
+root.render(
,
+ content: (
+
+
+
+ ),
},
{
- title: 'Forms2',
- content: ,
+ title: 'Uncontrolled Forms',
+ content: ,
},
{
title: 'List groups',
@@ -60,10 +68,18 @@ ReactDOM.render(
title: 'Toasts',
content: (
- ,
+
),
},
+ {
+ title: 'Toasts with message formatter',
+ content: ,
+ },
+ {
+ title: 'Toasts with custom state',
+ content: ,
+ },
{
title: 'TreeView',
content: ,
@@ -71,8 +87,7 @@ ReactDOM.render(
]}
/>
-
,
- document.getElementById('root')
+
);
// eslint-disable-next-line no-undef
diff --git a/demo/index.html b/demo/index.html
index 458f8af..e1c19f5 100644
--- a/demo/index.html
+++ b/demo/index.html
@@ -1,20 +1,24 @@
+
+
+
+ React Bootstrap Utils
+
+
+
+
+
-
-
-
- React Bootstrap Utils
-
-
-
-
-
-
-
-
-
+
+
+
+
diff --git a/docs/index.html b/docs/index.html
index 9e0e95e..5536528 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -6,9 +6,9 @@
React Bootstrap Utils
diff --git a/docs/scripts.js b/docs/scripts.js
index 58fc727..8af258c 100644
--- a/docs/scripts.js
+++ b/docs/scripts.js
@@ -190,7 +190,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(f
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AlertDialog\", function() { return AlertDialog; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ConfirmationDialog\", function() { return ConfirmationDialog; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Dialog\", function() { return Dialog; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return Dropdown; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Form\", function() { return Form; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormAutocomplete\", function() { return FormAutocomplete; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormCheckbox\", function() { return FormCheckbox; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroup\", function() { return FormGroup; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroupAutocomplete\", function() { return FormGroupAutocomplete; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroupCheckbox\", function() { return FormGroupCheckbox; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroupInput\", function() { return FormGroupInput; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroupRadio\", function() { return FormGroupRadio; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroupSelect\", function() { return FormGroupSelect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroupSwitch\", function() { return FormGroupSwitch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroupTextarea\", function() { return FormGroupTextarea; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormInput\", function() { return FormInput; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormRadio\", function() { return FormRadio; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormSelect\", function() { return FormSelect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormSwitch\", function() { return FormSwitch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormTextarea\", function() { return FormTextarea; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ListGroup\", function() { return ListGroup; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Pagination\", function() { return Pagination; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StatefulListGroup\", function() { return StatefulListGroup; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StatefulTabs\", function() { return StatefulTabs; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TOASTS_CLASSNAME_BY_POSITION\", function() { return TOASTS_CLASSNAME_BY_POSITION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TOASTS_DEFAULT_STYLE\", function() { return TOASTS_DEFAULT_STYLE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TOASTS_DEFAULT_STYLES_BY_POSITION\", function() { return TOASTS_DEFAULT_STYLES_BY_POSITION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TOASTS_VALID_POSITIONS\", function() { return TOASTS_VALID_POSITIONS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TOASTS_VALID_TYPES\", function() { return TOASTS_VALID_TYPES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TabContent\", function() { return TabContent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TabHeader\", function() { return TabHeader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Table\", function() { return Table; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Tabs\", function() { return Tabs; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ToastsContainer\", function() { return ToastsContainer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ToastsContext\", function() { return ToastsContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"awaitForAsyncTask\", function() { return awaitForAsyncTask; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"deepClone\", function() { return deepClone; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"formatClasses\", function() { return formatClasses; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getValueByPath\", function() { return getValueByPath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"safeClick\", function() { return safeClick; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setValueByPath\", function() { return setValueByPath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"splitPath\", function() { return splitPath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"stopPropagation\", function() { return stopPropagation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useArrayValueMap\", function() { return useArrayValueMap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useFormControl\", function() { return useFormControl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useFormData\", function() { return useFormData; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useOpenState\", function() { return useOpenState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useSelectedItem\", function() { return useSelectedItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useToasts\", function() { return useToasts; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useValueMap\", function() { return useValueMap; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_2__);\nfunction _typeof2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\n\n\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n var it;\n\n if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e2) {\n throw _e2;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e3) {\n didErr = true;\n err = _e3;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\nfunction _toPrimitive(input, hint) {\n if (_typeof2(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof2(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n\n return (hint === \"string\" ? String : Number)(input);\n}\n\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n\n return _typeof2(key) === \"symbol\" ? key : String(key);\n}\n\nfunction ModalPortal(_ref) {\n var children = _ref.children,\n title = _ref.title,\n isOpen = _ref.isOpen;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(),\n _useState2 = _slicedToArray(_useState, 2),\n container = _useState2[0],\n setContainer = _useState2[1];\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n var modalPortalsElem = getModalPortalsElem();\n\n if (!container) {\n var containerElem = document.createElement('div');\n containerElem.dataset.title = title;\n modalPortalsElem.appendChild(containerElem);\n setContainer(containerElem);\n }\n\n return function () {\n if (!container) {\n return;\n }\n\n modalPortalsElem.removeChild(container);\n };\n }, [container, title]); //FIXME: prop to define if modal will be always included into DOM\n\n if (!container || !isOpen) {\n return '';\n }\n\n return /*#__PURE__*/react_dom__WEBPACK_IMPORTED_MODULE_2___default.a.createPortal(children, container);\n}\n\nModalPortal.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node)])\n};\n\nfunction getModalPortalsElem() {\n var modalPortalsElem = document.querySelector('#modal-portals');\n\n if (!modalPortalsElem) {\n var body = document.querySelector('body');\n modalPortalsElem = document.createElement('div');\n modalPortalsElem.id = 'modal-portals';\n body.appendChild(modalPortalsElem);\n }\n\n return modalPortalsElem;\n}\n\nfunction isArray(value) {\n return Array.isArray(value);\n}\n\nfunction isEmptyArray(value) {\n return isArray(value) && value.length === 0;\n}\n\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n\nfunction isNull(value) {\n return value === null;\n}\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n\nfunction isBoolean(value) {\n return typeof value === 'boolean';\n}\n\nfunction _typeof$1(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof$1 = function _typeof$1(obj) {\n return typeof obj;\n };\n } else {\n _typeof$1 = function _typeof$1(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof$1(obj);\n}\n\nfunction isObject(value) {\n return _typeof$1(value) == 'object' && !isNull(value) && !isArray(value);\n}\n\nfunction isPlainObject(value) {\n return isObject(value) && value.constructor == Object;\n}\n\nfunction isEmptyObject(valor) {\n return isPlainObject(valor) && Object.keys(valor).length === 0;\n}\n\nfunction isString(value) {\n return typeof value === 'string';\n}\n\nfunction isEmptyString(value) {\n return isString(value) && value.length === 0;\n}\n\nfunction isEmptyStringLike(value) {\n return isUndefined(value) || isNull(value) || isEmptyString(value);\n}\n\nfunction isEmptyLike(value) {\n return isEmptyStringLike(value) || isEmptyArray(value) || isEmptyObject(value);\n}\n\nfunction isDate(value) {\n return Object.prototype.toString.call(value) === '[object Date]';\n}\n\nfunction isDateISOString(value) {\n if (!isString(value)) {\n return false;\n }\n\n if (value.length !== 24) {\n return false;\n }\n\n return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/.test(value);\n}\n\nfunction isNumber(value) {\n return typeof value === 'number';\n}\n\nfunction safeClick(callback) {\n for (var _len = arguments.length, callbackArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n callbackArgs[_key - 1] = arguments[_key];\n }\n\n return function (e) {\n stopPropagation(e);\n e.preventDefault();\n callback.apply(void 0, callbackArgs);\n };\n}\n\nfunction awaitForAsyncTask(task, callback) {\n return function () {\n var res = task();\n\n if (!res || !res.then) {\n callback();\n return;\n }\n\n res.then(callback);\n };\n}\n\nfunction stopPropagation(e) {\n e.stopPropagation();\n}\n\nfunction formatClasses(cssClasses) {\n return cssClasses.filter(function (v) {\n return v;\n }).join(' ');\n}\n\nvar ESCAPE_KEYCODE = 27;\n\nfunction Modal(_ref) {\n var title = _ref.title,\n body = _ref.body,\n onClose = _ref.onClose,\n isOpen = _ref.isOpen,\n footer = _ref.footer,\n staticBackdrop = _ref.staticBackdrop,\n scrollable = _ref.scrollable,\n centered = _ref.centered,\n size = _ref.size,\n keyboard = _ref.keyboard;\n var modalRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n var closeAndHide = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function () {\n hideModal(modalRef);\n onClose();\n }, [onClose]);\n var closeIfEscape = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (event) {\n if (keyboard && event.which === ESCAPE_KEYCODE) {\n closeAndHide();\n }\n }, [keyboard, closeAndHide]);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n var modalElement = modalRef.current;\n modalElement.addEventListener('keydown', closeIfEscape);\n return function () {\n modalElement.removeEventListener('keydown', closeIfEscape);\n };\n }, [keyboard, closeIfEscape, modalRef]);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (isOpen) {\n showModal(modalRef);\n } else {\n hideModal(modalRef);\n }\n }, [isOpen]);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"modal fade\",\n tabIndex: \"-1\",\n role: \"dialog\",\n ref: modalRef,\n onClick: function onClick(e) {\n e.stopPropagation();\n\n if (!staticBackdrop) {\n closeAndHide();\n }\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: formatClasses(['modal-dialog', scrollable && 'modal-dialog-scrollable', centered && 'modal-dialog-centered', size && \"modal-\".concat(size)]),\n role: \"document\",\n onClick: stopPropagation\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"modal-content\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"modal-header\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h5\", {\n className: \"modal-title\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"button\", {\n type: \"button\",\n className: \"close\",\n onClick: closeAndHide,\n \"aria-label\": \"Close\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n \"aria-hidden\": \"true\"\n }, \"\\xD7\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"modal-body\"\n }, renderObjectOrFunction(body, {\n close: closeAndHide\n })), footer && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"modal-footer\"\n }, renderObjectOrFunction(footer, {\n close: closeAndHide\n })))));\n}\n\nModal.defaultProps = {\n centered: true,\n keyboard: true,\n scrollable: false,\n size: '',\n staticBackdrop: false\n};\nModal.propTypes = {\n body: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n centered: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n footer: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n isOpen: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n keyboard: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n onClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n scrollable: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n size: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['sm', 'lg', 'xl', '']),\n staticBackdrop: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n};\n\nfunction hideModal(modalRef) {\n modalRef.current.style.display = 'none';\n modalRef.current.classList.remove('show');\n hideModalBackdrop();\n enableBodyScroll();\n\n if (modalRef.current.style.zIndex) {\n modalRef.current.style.zIndex = null;\n }\n}\n\nfunction enableBodyScroll() {\n var body = document.querySelector('body');\n body.classList.remove('modal-open');\n}\n\nfunction showModal(modalRef) {\n disableBodyScroll();\n showModalBackdrop();\n\n if (countModals() > 0) {\n modalRef.current.style.zIndex = getZIndex(modalRef.current) + countModals() * 20;\n }\n\n modalRef.current.style.display = 'block';\n modalRef.current.classList.add('show');\n modalRef.current.focus();\n}\n\nfunction renderObjectOrFunction(content, params) {\n return isFunction(content) ? content(params) : content;\n}\n\nfunction showModalBackdrop() {\n var backdrop = getModalBackdrop();\n backdrop.classList.remove('d-none');\n\n if (countModals() > 0) {\n backdrop.style.zIndex = getZIndex(backdrop) + 20;\n }\n}\n\nfunction hideModalBackdrop() {\n var backdrop = getModalBackdrop();\n\n if (backdrop.style.zIndex) {\n backdrop.style.zIndex -= 20;\n }\n\n if (countModals() === 0) {\n backdrop.classList.add('d-none');\n backdrop.style.zIndex = null;\n }\n}\n\nfunction getModalBackdrop() {\n var body = document.querySelector('body');\n var backdrop = document.querySelector('.modal-backdrop');\n\n if (!backdrop) {\n backdrop = document.createElement('div');\n backdrop.classList.add('modal-backdrop', 'fade', 'show', 'd-none');\n body.appendChild(backdrop);\n }\n\n return backdrop;\n}\n\nfunction countModals() {\n return document.querySelectorAll('#modal-portals .modal.show').length;\n}\n\nfunction disableBodyScroll() {\n if (countModals() != 0) {\n return;\n }\n\n var body = document.querySelector('body');\n body.classList.add('modal-open');\n}\n\nfunction getZIndex(elem) {\n return parseInt(window.getComputedStyle(elem).zIndex, 10);\n}\n\nfunction useOpenState() {\n var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(initialState),\n _useState2 = _slicedToArray(_useState, 2),\n _isOpen = _useState2[0],\n setIsOpen = _useState2[1];\n\n return {\n open: function open() {\n setIsOpen(true);\n },\n close: function close() {\n setIsOpen(false);\n },\n isOpen: function isOpen() {\n return _isOpen;\n }\n };\n}\n\nfunction Dialog(_ref) {\n var children = _ref.children,\n props = _objectWithoutProperties(_ref, [\"children\"]);\n\n var _useOpenState = useOpenState(),\n isOpen = _useOpenState.isOpen,\n open = _useOpenState.open,\n close = _useOpenState.close;\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(DialogTrigger, {\n open: open\n }, children), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(ModalPortal, {\n isOpen: isOpen(),\n title: props.title\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Modal, _extends({}, props, {\n onClose: close,\n isOpen: isOpen()\n }))));\n}\n\nDialog.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n body: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n centered: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n footer: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n keyboard: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n scrollable: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n size: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['sm', 'lg', 'xl', '']),\n staticBackdrop: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n};\n\nfunction DialogTrigger(_ref2) {\n var children = _ref2.children,\n open = _ref2.open;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.cloneElement(children, {\n onClick: safeClick(open)\n });\n}\n\nfunction AlertDialog(_ref) {\n var title = _ref.title,\n message = _ref.message,\n children = _ref.children,\n onClose = _ref.onClose,\n closeLabel = _ref.closeLabel;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Dialog, {\n title: title,\n body: message,\n footer: function footer(_ref2) {\n var close = _ref2.close;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"button\", {\n type: \"button\",\n className: \"btn btn-primary\",\n onClick: awaitForAsyncTask(onClose, close)\n }, closeLabel);\n }\n }, children);\n}\n\nAlertDialog.defaultProps = {\n onClose: function onClose() {},\n title: 'Atention required',\n closeLabel: 'Close'\n};\nAlertDialog.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n message: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n onClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n closeLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n};\n\nfunction ConfirmationDialog(_ref) {\n var title = _ref.title,\n message = _ref.message,\n children = _ref.children,\n onProceed = _ref.onProceed,\n onCancel = _ref.onCancel,\n cancelLabel = _ref.cancelLabel,\n proceedLabel = _ref.proceedLabel,\n proceedType = _ref.proceedType;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Dialog, {\n title: title,\n body: message,\n footer: function footer(_ref2) {\n var close = _ref2.close;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"button\", {\n type: \"button\",\n className: \"btn btn-secondary\",\n onClick: safeClick(awaitForAsyncTask(onCancel, close))\n }, cancelLabel), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"button\", {\n type: \"button\",\n className: formatClasses(['btn', \"btn-\".concat(proceedType)]),\n onClick: safeClick(awaitForAsyncTask(onProceed, close))\n }, proceedLabel));\n }\n }, children);\n}\n\nConfirmationDialog.defaultProps = {\n onProceed: function onProceed() {},\n onCancel: function onCancel() {},\n title: 'Atention required',\n cancelLabel: 'Cancel',\n proceedLabel: 'Proceed',\n proceedType: 'primary'\n};\nConfirmationDialog.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n message: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n onCancel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n onProceed: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n cancelLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n proceedLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n proceedType: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['primary', 'danger', 'success'])\n};\n\nfunction splitPath(path) {\n return path.replace(/]/g, '').split(/[.[]/).map(function (path, index, paths) {\n var def = {\n path: path\n };\n\n if (parseInt(paths[index + 1], 10).toString() === paths[index + 1]) {\n def.couldBeAnArray = true;\n }\n\n return def;\n });\n}\n\nfunction getValueByPath(obj, objPath) {\n var paths = splitPath(objPath);\n return paths.reduce(function (cursor, _ref) {\n var path = _ref.path;\n\n if (isUndefined(cursor) || isNull(cursor)) {\n return;\n }\n\n if (!path) {\n return cursor;\n }\n\n return cursor[path];\n }, obj);\n}\n\nfunction setValueByPath(obj, objPath, value) {\n var paths = splitPath(objPath);\n\n if (paths.length === 1) {\n obj[objPath] = value;\n return obj;\n }\n\n var lastPath = paths[paths.length - 1].path;\n var remainingPaths = paths.slice(0, paths.length - 1);\n var lastCursor = remainingPaths.reduce(function (cursor, _ref2) {\n var path = _ref2.path,\n couldBeAnArray = _ref2.couldBeAnArray;\n\n if (!path) {\n return cursor || (couldBeAnArray ? [] : {});\n }\n\n if (!cursor[path]) {\n cursor[path] = couldBeAnArray ? [] : {};\n }\n\n return cursor[path];\n }, obj);\n lastCursor[lastPath] = value;\n return obj || lastCursor;\n}\n\nfunction deepClone(item) {\n // null, undefined values check and literals\n if (!item || !isObject(item)) {\n return item;\n }\n\n if (isArray(item)) {\n return item.map(deepClone);\n } // testing that this is DOM\n\n\n if (item.nodeType && isFunction(item.cloneNode)) {\n return item.cloneNode(true);\n }\n\n if (!item.prototype) {\n // check that this is a literal\n if (item instanceof Date) {\n return new Date(item);\n } // it is an object literal\n\n\n var result = {};\n\n for (var i in item) {\n result[i] = deepClone(item[i]);\n }\n\n return result;\n }\n\n return item;\n}\n\nvar FormContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext(null);\n\nfunction validateFormElement(_ref) {\n var name = _ref.name,\n _ref$validations = _ref.validations,\n validations = _ref$validations === void 0 ? [] : _ref$validations,\n formData = _ref.formData,\n elementRefs = _ref.elementRefs;\n var validationMessage = '';\n var value = getValueByPath(formData, name);\n validations.some(function (_ref2) {\n var message = _ref2.message,\n validate = _ref2.validate;\n var isValid = validate(value, formData);\n\n if (!isValid) {\n validationMessage = message;\n }\n\n return !isValid;\n });\n\n var _iterator = _createForOfIteratorHelper(elementRefs),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var elementRef = _step.value;\n\n if (!elementRef) {\n continue;\n }\n\n elementRef.setCustomValidity(validationMessage);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return validationMessage;\n}\n\nfunction handleInputChange(formState, event) {\n var target = event.target;\n var value = target.type === 'checkbox' ? target.checked : target.value;\n var name = target.name;\n formState.update(name, value);\n}\n\nfunction normalizeOptions(options, formData, extraData) {\n var _options = isFunction(options) ? options(formData, extraData) : options;\n\n if (!isArray(_options)) {\n throw new Error('Select Options should be an array');\n }\n\n return _options.map(function (option) {\n return {\n value: isUndefined(option.value) ? option : option.value,\n label: isUndefined(option.label) ? serializeValue(option) : option.label\n };\n });\n}\n\nfunction booleanOrFunction(property, formData) {\n if (!isFunction(property)) {\n return property;\n }\n\n return property(formData);\n}\n\nfunction serializeValue(value) {\n if (!isObject(value)) {\n return value.toString();\n }\n\n return JSON.stringify(value);\n}\n\nfunction getSelectedOption(value, options, trackBy) {\n var selectedValue = value;\n\n if (trackBy) {\n var selectedOption = options.find(function (option) {\n return getValueByPath(option.value, trackBy) === getValueByPath(value, trackBy);\n });\n\n if (selectedOption) {\n selectedValue = selectedOption.value;\n }\n }\n\n return serializeValue(selectedValue);\n}\n\nfunction getOptionsType(options) {\n return options.length > 0 ? _typeof(options[0].value) : undefined;\n}\n\nfunction useValueMap() {\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])({}),\n _useState2 = _slicedToArray(_useState, 2),\n valueMap = _useState2[0],\n updateValueMap = _useState2[1];\n\n var setValue = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (key, _value) {\n updateValueMap(function (prevValueMap) {\n var value = _value;\n\n if (isFunction(value)) {\n value = value(prevValueMap[key]);\n }\n\n return _objectSpread2(_objectSpread2({}, prevValueMap), {}, _defineProperty({}, key, value));\n });\n }, []);\n var getValue = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (key) {\n return valueMap[key];\n }, [valueMap]);\n return {\n setValue: setValue,\n getValue: getValue,\n getAllKeys: function getAllKeys() {\n return Object.keys(valueMap);\n },\n setValueIfUnset: function setValueIfUnset(key, value) {\n if (!getValue(key)) {\n setValue(key, value);\n }\n },\n unsetKey: function unsetKey(key) {\n updateValueMap(function (_ref) {\n var _ = _ref[key],\n prevValueMap = _objectWithoutProperties(_ref, [key].map(_toPropertyKey));\n\n return prevValueMap;\n });\n },\n reset: function reset() {\n updateValueMap({});\n }\n };\n}\n\nfunction useArrayValueMap() {\n var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref2$unique = _ref2.unique,\n unique = _ref2$unique === void 0 ? true : _ref2$unique,\n _ref2$equalityCompara = _ref2.equalityComparator,\n equalityComparator = _ref2$equalityCompara === void 0 ? function (a) {\n return function (b) {\n return a === b;\n };\n } : _ref2$equalityCompara;\n\n var _useValueMap = useValueMap(),\n getAllKeys = _useValueMap.getAllKeys,\n getValue = _useValueMap.getValue,\n setValue = _useValueMap.setValue,\n reset = _useValueMap.reset;\n\n return {\n push: function push(key, value) {\n setValue(key, function (prevValues) {\n var values = prevValues;\n\n if (!values) {\n values = [];\n }\n\n if (!unique || !values.find(equalityComparator(value))) {\n values.push(value);\n }\n\n return values;\n });\n },\n unset: function unset(key, filterfn) {\n setValue(key, function (prevValues) {\n return prevValues && prevValues.filter(filterfn);\n });\n },\n get: getValue,\n getAllKeys: getAllKeys,\n reset: reset\n };\n}\n/** Detect free variable `global` from Node.js. */\n\n\nvar freeGlobal = (typeof global === \"undefined\" ? \"undefined\" : _typeof2(global)) == 'object' && global && global.Object === Object && global;\n/** Detect free variable `self`. */\n\nvar freeSelf = (typeof self === \"undefined\" ? \"undefined\" : _typeof2(self)) == 'object' && self && self.Object === Object && self;\n/** Used as a reference to the global object. */\n\nvar root = freeGlobal || freeSelf || Function('return this')();\n/** Built-in value references. */\n\nvar Symbol$1 = root.Symbol;\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar nativeObjectToString = objectProto.toString;\n/** Built-in value references. */\n\nvar symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined;\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n\n return result;\n}\n/** Used for built-in method references. */\n\n\nvar objectProto$1 = Object.prototype;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar nativeObjectToString$1 = objectProto$1.toString;\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n\nfunction objectToString(value) {\n return nativeObjectToString$1.call(value);\n}\n/** `Object#toString` result references. */\n\n\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n/** Built-in value references. */\n\nvar symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined;\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n\n return symToStringTag$1 && symToStringTag$1 in Object(value) ? getRawTag(value) : objectToString(value);\n}\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n\n\nfunction isObjectLike(value) {\n return value != null && _typeof2(value) == 'object';\n}\n/** `Object#toString` result references. */\n\n\nvar symbolTag = '[object Symbol]';\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n\nfunction isSymbol(value) {\n return _typeof2(value) == 'symbol' || isObjectLike(value) && baseGetTag(value) == symbolTag;\n}\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n\n\nfunction isObject$1(value) {\n var type = _typeof2(value);\n\n return value != null && (type == 'object' || type == 'function');\n}\n/** Used as references for various `Number` constants. */\n\n\nvar NAN = 0 / 0;\n/** Used to match leading and trailing whitespace. */\n\nvar reTrim = /^\\s+|\\s+$/g;\n/** Used to detect bad signed hexadecimal string values. */\n\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n/** Used to detect binary string values. */\n\nvar reIsBinary = /^0b[01]+$/i;\n/** Used to detect octal string values. */\n\nvar reIsOctal = /^0o[0-7]+$/i;\n/** Built-in method references without a dependency on `root`. */\n\nvar freeParseInt = parseInt;\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n\n if (isSymbol(value)) {\n return NAN;\n }\n\n if (isObject$1(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject$1(other) ? other + '' : other;\n }\n\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;\n}\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n\n\nvar now = function now() {\n return root.Date.now();\n};\n/** Error message constants. */\n\n\nvar FUNC_ERROR_TEXT = 'Expected a function';\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n wait = toNumber(wait) || 0;\n\n if (isObject$1(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time; // Start the timer for the trailing edge.\n\n timerId = setTimeout(timerExpired, wait); // Invoke the leading edge.\n\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n\n return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n }\n\n function timerExpired() {\n var time = now();\n\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n } // Restart the timer.\n\n\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n\n return result;\n }\n\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nfunction useFormState(initialState, _ref) {\n var onChange = _ref.onChange,\n transform = _ref.transform;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(initialState),\n _useState2 = _slicedToArray(_useState, 2),\n formState = _useState2[0],\n setFormState = _useState2[1];\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState4 = _slicedToArray(_useState3, 2),\n isDirty = _useState4[0],\n setIsDirty = _useState4[1];\n\n var onChangeRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(debounce(onChange, 1000));\n var transformRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(debounce(function (nextFormState, name) {\n return transform(nextFormState, name, function (state) {\n setFormState(state);\n });\n }, 500));\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (isDirty) {\n onChangeRef.current(formState);\n }\n }, [formState, isDirty]);\n return {\n getState: function getState() {\n return formState;\n },\n updateState: function updateState(name, value) {\n setIsDirty(true);\n setFormState(function (prevFormState) {\n var nextFormState = nextState(prevFormState, name, value);\n setTimeout(function () {\n transformRef.current(nextFormState, name);\n });\n return nextFormState;\n });\n },\n resetState: function resetState() {\n setIsDirty(false);\n setFormState(initialState);\n }\n };\n}\n\nfunction useForm(initialState, _ref2) {\n var validations = _ref2.validations,\n onChange = _ref2.onChange,\n transform = _ref2.transform;\n\n var _useFormState = useFormState(initialState, {\n onChange: onChange,\n transform: transform\n }),\n getState = _useFormState.getState,\n updateState = _useFormState.updateState,\n resetState = _useFormState.resetState;\n\n var _useState5 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState6 = _slicedToArray(_useState5, 2),\n submitAttempted = _useState6[0],\n setSubmitAttempted = _useState6[1];\n\n var _useArrayValueMap = useArrayValueMap(),\n getElementNames = _useArrayValueMap.getAllKeys,\n getElementRefs = _useArrayValueMap.get,\n registerElementRef = _useArrayValueMap.push;\n\n var formState = getState();\n return {\n register: function register(name, elementRef) {\n registerElementRef(name, elementRef);\n\n if (validations) {\n validateFormElement({\n name: name,\n formData: formState,\n validations: validations[name],\n elementRefs: [elementRef]\n });\n }\n },\n update: function update(name, value) {\n updateState(name, value);\n\n if (validations) {\n this.validateForm(nextState(formState, name, value));\n }\n },\n getFormData: function getFormData() {\n return formState;\n },\n getValue: function getValue(name) {\n return getValueByPath(formState, name);\n },\n reset: function reset() {\n resetState();\n setSubmitAttempted(false);\n },\n setSubmitedAttempted: function setSubmitedAttempted() {\n setSubmitAttempted(true);\n },\n getSubmitedAttempted: function getSubmitedAttempted() {\n return submitAttempted;\n },\n getValidationMessage: function getValidationMessage(name) {\n var elementRefs = getElementRefs(name);\n return elementRefs && elementRefs[0] ? elementRefs[0].validationMessage : '';\n },\n validateForm: function validateForm(_formData) {\n var elementNames = getElementNames();\n var isFormValid = true;\n var formData = _formData || formState;\n\n var _iterator = _createForOfIteratorHelper(elementNames),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var name = _step.value;\n var isElementValid = !validateFormElement({\n name: name,\n formData: formData,\n validations: validations[name],\n elementRefs: getElementRefs(name)\n });\n\n if (!isElementValid) {\n isFormValid = false;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return isFormValid;\n }\n };\n}\n\nfunction nextState(previousState, path, value) {\n return setValueByPath(deepClone(previousState), path, value);\n}\n\nfunction FormActions(_ref) {\n var submitLabel = _ref.submitLabel,\n cancelLabel = _ref.cancelLabel,\n onCancel = _ref.onCancel,\n isSubmiting = _ref.isSubmiting,\n customActions = _ref.customActions;\n\n if (customActions) {\n return isFunction(customActions) ? customActions(isSubmiting) : customActions;\n }\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"form-actions\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"button\", {\n type: \"submit\",\n className: \"btn btn-primary mr-1\",\n disabled: isSubmiting\n }, isFunction(submitLabel) ? submitLabel(isSubmiting) : submitLabel), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"button\", {\n type: \"button\",\n className: \"btn btn-secondary\",\n onClick: onCancel,\n disabled: isSubmiting\n }, isFunction(cancelLabel) ? cancelLabel(isSubmiting) : cancelLabel));\n}\n\nFormActions.propTypes = {\n submitLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]),\n cancelLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]),\n onCancel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,\n isSubmiting: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n customActions: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node])\n};\n\nfunction Form(_ref) {\n var cancelLabel = _ref.cancelLabel,\n children = _ref.children,\n customValidation = _ref.customValidation,\n customActions = _ref.customActions,\n initialValues = _ref.initialValues,\n onCancel = _ref.onCancel,\n onSubmit = _ref.onSubmit,\n onChange = _ref.onChange,\n submitLabel = _ref.submitLabel,\n validations = _ref.validations,\n transform = _ref.transform;\n var formState = useForm(initialValues, {\n validations: validations,\n onChange: onChange,\n transform: transform\n });\n var formRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState2 = _slicedToArray(_useState, 2),\n isSubmiting = _useState2[0],\n setIsSubmiting = _useState2[1];\n\n function resetForm() {\n formRef.current.classList.remove('was-validated');\n formState.reset();\n }\n\n function handleSubmit(e) {\n e.preventDefault();\n formState.setSubmitedAttempted();\n\n if (customValidation && !formRef.current.checkValidity()) {\n formRef.current.classList.add('was-validated');\n return;\n }\n\n setIsSubmiting(true);\n var submitResponse = onSubmit(formState.getFormData(), resetForm);\n var submitPromise = Promise.resolve();\n\n if (submitResponse && submitResponse.then) {\n submitPromise = submitResponse.then(function () {\n resetForm();\n });\n }\n\n submitPromise[\"finally\"](function () {\n setIsSubmiting(false);\n });\n }\n\n function handleCancel() {\n //TODO: improve cancel options\n onCancel(resetForm);\n }\n\n var formProps = {\n ref: formRef,\n onSubmit: handleSubmit\n };\n\n if (customValidation) {\n formProps.noValidate = true;\n }\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"form\", formProps, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormContext.Provider, {\n value: formState\n }, children), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormActions, {\n submitLabel: submitLabel,\n cancelLabel: cancelLabel,\n onCancel: handleCancel,\n isSubmiting: isSubmiting,\n customActions: customActions\n }));\n}\n\nForm.defaultProps = {\n cancelLabel: 'Cancel',\n customValidation: false,\n submitLabel: 'Submit',\n onChange: function onChange() {},\n transform: function transform(data) {\n return data;\n }\n};\nForm.propTypes = {\n cancelLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node)]),\n customActions: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node)]),\n customValidation: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n initialValues: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object,\n onCancel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n onSubmit: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,\n submitLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n transform: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n validations: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object\n};\n\nfunction Dropdown(_ref) {\n var children = _ref.children,\n items = _ref.items,\n onSelect = _ref.onSelect,\n isOpen = _ref.isOpen,\n onTouchStart = _ref.onTouchStart,\n onMouseEnter = _ref.onMouseEnter,\n onMouseLeave = _ref.onMouseLeave,\n template = _ref.template,\n className = _ref.className;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", _extends({\n className: formatClasses(['dropdown', className, isOpen && 'show'])\n }, {\n onTouchStart: onTouchStart,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave\n }), children, items.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: formatClasses(['dropdown-menu', isOpen && 'show']) // aria-labelledby=\"dropdownMenuButton\"\n ,\n style: {\n maxHeight: '200px',\n overflowY: 'auto'\n }\n }, items.map(function (_ref2, index) {\n var label = _ref2.label,\n value = _ref2.value,\n isDisabled = _ref2.isDisabled;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n key: index,\n href: \"#\",\n className: formatClasses(['dropdown-item', isDisabled && 'disabled']),\n onClick: safeClick(onSelect, {\n value: value,\n index: index,\n label: label\n })\n }, template(label));\n })));\n}\n\nDropdown.defaultProps = {\n isOpen: false,\n template: function template(v) {\n return v;\n }\n};\nDropdown.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n isOpen: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n items: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object),\n onMouseEnter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n onMouseLeave: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n onTouchStart: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n template: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string\n};\n\nfunction toDatetimeLocal(value) {\n var date = value;\n\n if (isDateISOString(date)) {\n date = new Date(date);\n }\n\n if (!isDate(date)) {\n throw new Error('toDatetimeLocal only accepts date objects and ISO date strings');\n }\n\n var YYYY = date.getFullYear().toString();\n var MM = (date.getMonth() + 1).toString().padStart(2, '0');\n var DD = date.getDate().toString().padStart(2, '0');\n var hh = date.getHours().toString().padStart(2, '0');\n var mm = date.getMinutes().toString().padStart(2, '0');\n return \"\".concat(YYYY, \"-\").concat(MM, \"-\").concat(DD, \"T\").concat(hh, \":\").concat(mm);\n}\n\nfunction fromDatetimeLocal(value) {\n return new Date(Date.parse(value));\n}\n\nfunction useFormControl(name, type) {\n var formState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"])(FormContext);\n\n function setValue(value) {\n formState.update(name, value);\n }\n\n var register = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (ref) {\n formState.register(name, ref);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [name]);\n return {\n getValue: function getValue() {\n return encode(formState.getValue(name), type);\n },\n setValue: setValue,\n handleOnChange: function handleOnChange(_ref, _type) {\n var target = _ref.target;\n var value = getTargetValue(target);\n var decodedValue = decode(value, type || _type);\n setValue(decodedValue);\n },\n register: register,\n getFormData: function getFormData() {\n return formState.getFormData();\n },\n isValid: function isValid() {\n return formState.getValidationMessage(name) === '';\n },\n getFormSubmitedAttempted: function getFormSubmitedAttempted() {\n return formState.getSubmitedAttempted();\n }\n };\n}\n\nfunction getEmptyValue(type) {\n switch (type) {\n case 'boolean':\n return false;\n\n case 'array':\n return [];\n\n default:\n return '';\n }\n}\n\nfunction encode(value, type) {\n if (isEmptyStringLike(value)) {\n return getEmptyValue(type);\n }\n\n if (type === 'datetime-local') {\n return toDatetimeLocal(value);\n }\n\n if (type === 'number' && isNaN(value)) {\n return;\n }\n\n return value;\n}\n\nfunction decode(value, type) {\n if (type === 'number') {\n return parseFloat(value);\n }\n\n if (type === 'boolean') {\n return isBoolean(value) ? value : value === 'true';\n }\n\n return value;\n}\n\nfunction getTargetValue(target) {\n var value = target.type === 'checkbox' ? target.checked : target.value;\n\n if (target.type === 'number') {\n value = target.valueAsNumber;\n\n if (isNaN(value)) {\n value = undefined;\n }\n }\n\n if (target.type === 'datetime-local') {\n value = fromDatetimeLocal(target.value);\n }\n\n if (target.type === 'select-one') {\n if (value && ['{', '['].includes(value[0])) {\n try {\n value = JSON.parse(value);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n }\n }\n\n return value;\n}\n\nfunction FormAutocomplete(_ref) {\n var onSearch = _ref.onSearch,\n options = _ref.options,\n _required = _ref.required,\n id = _ref.id,\n placeholder = _ref.placeholder,\n name = _ref.name,\n openOnFocus = _ref.openOnFocus,\n template = _ref.template,\n filter = _ref.filter,\n _disabled = _ref.disabled;\n\n var _useFormControl = useFormControl(name),\n getValue = _useFormControl.getValue,\n setValue = _useFormControl.setValue,\n register = _useFormControl.register,\n isValid = _useFormControl.isValid,\n getFormSubmitedAttempted = _useFormControl.getFormSubmitedAttempted,\n getFormData = _useFormControl.getFormData;\n\n var value = getValue();\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(''),\n _useState2 = _slicedToArray(_useState, 2),\n searchValue = _useState2[0],\n setSearchValue = _useState2[1];\n\n var items = normalizeOptions(options, getFormData(), searchValue);\n\n var _selectedItem = items.find(function (item) {\n return item.value === value;\n });\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(_selectedItem),\n _useState4 = _slicedToArray(_useState3, 2),\n selectedItem = _useState4[0],\n setSelectedItem = _useState4[1];\n\n var _useOpenState = useOpenState(),\n isOpen = _useOpenState.isOpen,\n open = _useOpenState.open,\n close = _useOpenState.close;\n\n var _useState5 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState6 = _slicedToArray(_useState5, 2),\n ignoreBlur = _useState6[0],\n setIgnoreBlur = _useState6[1];\n\n var _useState7 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState8 = _slicedToArray(_useState7, 2),\n isFocused = _useState8[0],\n setFocus = _useState8[1];\n\n var searchInputRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n var registerRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(register, [register]);\n var disabled = booleanOrFunction(_disabled, getFormData());\n var required = booleanOrFunction(_required, getFormData());\n var controlFeedback = getFormSubmitedAttempted() ? isValid() ? 'is-valid' : 'is-invalid' : '';\n var updateSearchInputValidation = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function () {\n searchInputRef.current.setCustomValidity(controlFeedback === 'is-invalid' ? 'invalid' : '');\n }, [controlFeedback]);\n var clearSearchValue = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function () {\n if (isEmptyLike(value) && !isFocused) {\n setSearchValue('');\n setSelectedItem(null);\n }\n }, [isFocused, value]);\n var onSearchInputType = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (_, nextSearchValue) {\n setSearchValue(nextSearchValue);\n onSearch(nextSearchValue);\n open();\n\n if (nextSearchValue && value) {\n setValue(null);\n }\n }, [onSearch, open, setValue, value]);\n var inputHandleChange = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useMemo\"])(function () {\n return handleInputChange.bind(null, {\n update: onSearchInputType\n });\n }, [onSearchInputType]);\n var onSearchInputFocus = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function () {\n if (openOnFocus) {\n setTimeout(function () {\n open();\n }, 100);\n }\n }, [open, openOnFocus]);\n var onSearchInputBlur = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function () {\n if (isEmptyLike(searchValue) && value) {\n setValue('');\n setSelectedItem(null);\n updateSearchInputValidation();\n }\n\n if (ignoreBlur) {\n searchInputRef.current.focus();\n } else {\n close();\n setFocus(false);\n }\n }, [close, ignoreBlur, searchValue, setValue, updateSearchInputValidation, value]);\n var enableSearchInput = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function () {\n if (disabled) {\n return;\n }\n\n setFocus(true);\n setTimeout(function () {\n searchInputRef.current.focus();\n });\n }, [disabled]);\n var onSelectItem = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (_ref2) {\n var value = _ref2.value,\n label = _ref2.label;\n setValue(value);\n setSearchValue(label);\n setSelectedItem({\n value: value,\n label: label\n });\n setIgnoreBlur(false);\n setTimeout(function () {\n setFocus(false);\n close();\n }, 60);\n }, [close, setValue]);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(updateSearchInputValidation, [updateSearchInputValidation]);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(clearSearchValue, [clearSearchValue]);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", _extends({\n placeholder: placeholder,\n disabled: disabled\n }, {\n type: \"search\",\n ref: searchInputRef,\n className: formatClasses(['form-control form-autocomplete-search', isFocused ? '' : 'd-none', controlFeedback]),\n onChange: inputHandleChange,\n onFocus: onSearchInputFocus,\n onBlur: onSearchInputBlur,\n value: searchValue,\n role: \"combobox\",\n \"aria-autocomplete\": \"list\",\n \"aria-expanded\": \"false\",\n autoComplete: \"off\"\n })), !isFocused && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: formatClasses(['form-control form-autocomplete-selected', controlFeedback]),\n disabled: disabled,\n onClick: enableSearchInput\n }, selectedItem ? template ? template(selectedItem.label) : selectedItem.label : placeholder), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", _extends({\n type: \"text\",\n className: formatClasses(['form-control', 'd-none'])\n }, {\n name: name,\n required: required,\n id: id\n }, {\n onChange: function onChange() {},\n value: getValue(),\n ref: registerRef\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Dropdown, {\n className: \"form-autocomplete-dropdown\",\n isOpen: isOpen(),\n items: items.filter(filter(searchValue)),\n onSelect: onSelectItem,\n template: template,\n onClick: function onClick(e) {\n return e.stopPropation();\n },\n onTouchStart: function onTouchStart() {\n return setIgnoreBlur(true);\n },\n onMouseEnter: function onMouseEnter() {\n return setIgnoreBlur(true);\n },\n onMouseLeave: function onMouseLeave() {\n return setIgnoreBlur(false);\n }\n }));\n}\n\nFormAutocomplete.defaultProps = {\n openOnFocus: false,\n onSearch: function onSearch() {},\n filter: function filter(_searchValue) {\n return function (item) {\n var itemValue = JSON.stringify(item.label).toLowerCase();\n\n var searchValue = _searchValue.toLowerCase();\n\n return itemValue.includes(searchValue);\n };\n },\n template: function template(x) {\n return x;\n }\n};\nFormAutocomplete.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n filter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n onSearch: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n openOnFocus: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n options: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object]))]),\n placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n template: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n type: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string\n};\n\nfunction FormCheckbox(_ref) {\n var id = _ref.id,\n name = _ref.name,\n _required = _ref.required,\n valueLabel = _ref.valueLabel,\n _disabled = _ref.disabled;\n\n var _useFormControl = useFormControl(name, 'boolean'),\n getValue = _useFormControl.getValue,\n handleOnChange = _useFormControl.handleOnChange,\n register = _useFormControl.register,\n getFormData = _useFormControl.getFormData;\n\n var registerRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(register, [register]);\n var disabled = booleanOrFunction(_disabled, getFormData());\n var required = booleanOrFunction(_required, getFormData());\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"custom-control custom-checkbox\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", _extends({\n required: required,\n name: name,\n id: id,\n disabled: disabled\n }, {\n type: \"checkbox\",\n className: \"custom-control-input\",\n onChange: handleOnChange,\n checked: getValue(),\n ref: registerRef\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n className: \"custom-control-label\",\n htmlFor: id\n }, valueLabel));\n}\n\nFormCheckbox.propTypes = {\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n valueLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func])\n};\n\nfunction FormInput(_ref) {\n var type = _ref.type,\n name = _ref.name,\n _required = _ref.required,\n _disabled = _ref.disabled,\n _attrs = _objectWithoutProperties(_ref, [\"type\", \"name\", \"required\", \"disabled\"]);\n\n var _useFormControl = useFormControl(name, type),\n getValue = _useFormControl.getValue,\n handleOnChange = _useFormControl.handleOnChange,\n register = _useFormControl.register,\n getFormData = _useFormControl.getFormData;\n\n var registerRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(register, [register]);\n var disabled = booleanOrFunction(_disabled, getFormData());\n var required = booleanOrFunction(_required, getFormData());\n\n var attrs = _objectSpread2(_objectSpread2({}, _attrs), {}, {\n disabled: disabled,\n name: name,\n required: required,\n type: type\n });\n\n if (type === 'datetime-local') {\n attrs.defaultValue = getValue();\n } else {\n attrs.value = getValue();\n }\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", _extends({}, attrs, {\n className: \"form-control\",\n onChange: handleOnChange,\n ref: registerRef\n }));\n}\n\nFormInput.defaultProps = {\n type: 'text'\n};\nFormInput.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n max: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n maxLength: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n min: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n minLength: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n pattern: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n readOnly: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n step: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n type: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string\n};\n\nfunction FormLabel(_ref) {\n var id = _ref.id,\n label = _ref.label,\n _required = _ref.required;\n\n var required = isBoolean(_required) && _required;\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n htmlFor: id\n }, label, required && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"text-danger\"\n }, \" *\"));\n}\n\nFormLabel.propTypes = {\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func])\n};\n\nfunction FormRadio(_ref) {\n var id = _ref.id,\n name = _ref.name,\n _required = _ref.required,\n checkedValue = _ref.checkedValue,\n valueLabel = _ref.valueLabel,\n inline = _ref.inline,\n _disabled = _ref.disabled;\n\n var _useFormControl = useFormControl(name, 'boolean'),\n getValue = _useFormControl.getValue,\n handleOnChange = _useFormControl.handleOnChange,\n register = _useFormControl.register,\n getFormData = _useFormControl.getFormData;\n\n var registerRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(register, [register]);\n var value = getValue();\n var disabled = booleanOrFunction(_disabled, getFormData());\n var required = booleanOrFunction(_required, getFormData());\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: formatClasses([\"custom-control\", \"custom-radio\", inline && 'custom-control-inline'])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", _extends({\n required: required,\n name: name,\n id: id,\n disabled: disabled\n }, {\n type: \"radio\",\n className: \"custom-control-input\",\n onChange: handleOnChange,\n checked: value === checkedValue,\n value: checkedValue,\n ref: registerRef\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n className: \"custom-control-label\",\n htmlFor: id\n }, valueLabel));\n}\n\nFormRadio.defaultProps = {\n inline: false\n};\nFormRadio.propTypes = {\n checkedValue: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any,\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n inline: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n valueLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n};\n\nfunction FormSelect(_ref) {\n var name = _ref.name,\n options = _ref.options,\n _required = _ref.required,\n placeholder = _ref.placeholder,\n trackBy = _ref.trackBy,\n _disabled = _ref.disabled,\n _attrs = _objectWithoutProperties(_ref, [\"name\", \"options\", \"required\", \"placeholder\", \"trackBy\", \"disabled\"]);\n\n var _useFormControl = useFormControl(name),\n getFormData = _useFormControl.getFormData,\n getValue = _useFormControl.getValue,\n handleOnChange = _useFormControl.handleOnChange,\n register = _useFormControl.register;\n\n var registerRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(register, [register]);\n var value = getValue();\n var normalizedOptions = normalizeOptions(options, getFormData());\n var disabled = booleanOrFunction(_disabled, getFormData());\n var required = booleanOrFunction(_required, getFormData());\n\n var attrs = _objectSpread2(_objectSpread2({}, _attrs), {}, {\n disabled: disabled,\n name: name,\n required: required\n });\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"select\", _extends({}, attrs, {\n className: \"custom-select\",\n onChange: function onChange(e) {\n return handleOnChange(e, getOptionsType(normalizedOptions));\n },\n value: getSelectedOption(value, normalizedOptions, trackBy),\n ref: registerRef\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"\"\n }, placeholder), renderOptions(normalizedOptions, trackBy));\n}\n\nFormSelect.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n options: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({\n value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any.isRequired,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired\n })]))]),\n placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n trackBy: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string\n};\n\nfunction renderOptions(options, trackBy) {\n return options.map(function (_ref2, index) {\n var value = _ref2.value,\n label = _ref2.label;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n key: index,\n name: trackBy,\n value: serializeValue(value)\n }, label);\n });\n}\n\nfunction FormSwitch(_ref) {\n var id = _ref.id,\n name = _ref.name,\n _required = _ref.required,\n trueLabel = _ref.trueLabel,\n falseLabel = _ref.falseLabel,\n _disabled = _ref.disabled;\n\n var _useFormControl = useFormControl(name, 'boolean'),\n getValue = _useFormControl.getValue,\n handleOnChange = _useFormControl.handleOnChange,\n register = _useFormControl.register,\n getFormData = _useFormControl.getFormData;\n\n var registerRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(register, [register]);\n var value = getValue();\n var disabled = booleanOrFunction(_disabled, getFormData());\n var required = booleanOrFunction(_required, getFormData());\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"custom-control custom-switch\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", _extends({\n required: required,\n name: name,\n id: id,\n disabled: disabled\n }, {\n type: \"checkbox\",\n className: \"custom-control-input\",\n onChange: handleOnChange,\n checked: value,\n ref: registerRef\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n className: \"custom-control-label\",\n htmlFor: id\n }, (trueLabel || falseLabel) && (value ? trueLabel : falseLabel)));\n}\n\nFormSwitch.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n falseLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n trueLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n};\n\nfunction FormTextarea(_ref) {\n var name = _ref.name,\n _required = _ref.required,\n _disabled = _ref.disabled,\n _attrs = _objectWithoutProperties(_ref, [\"name\", \"required\", \"disabled\"]);\n\n var _useFormControl = useFormControl(name),\n getValue = _useFormControl.getValue,\n handleOnChange = _useFormControl.handleOnChange,\n register = _useFormControl.register,\n getFormData = _useFormControl.getFormData;\n\n var registerRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(register, [register]);\n var disabled = booleanOrFunction(_disabled, getFormData());\n var required = booleanOrFunction(_required, getFormData());\n\n var attrs = _objectSpread2(_objectSpread2({}, _attrs), {}, {\n disabled: disabled,\n name: name,\n required: required\n });\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"textarea\", _extends({}, attrs, {\n className: \"form-control\",\n onChange: handleOnChange,\n value: getValue(),\n ref: registerRef\n }));\n}\n\nFormTextarea.defaultProps = {\n rows: 5\n};\nFormTextarea.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n readOnly: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n rows: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string])\n};\n\nfunction FormValidationFeedback(_ref) {\n var name = _ref.name,\n mockInvalidSibling = _ref.mockInvalidSibling;\n var formState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"])(FormContext);\n var validationMessage = formState.getValidationMessage(name);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, mockInvalidSibling && formState.getSubmitedAttempted() && validationMessage && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"is-invalid\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: validationMessage ? 'invalid-feedback' : 'valid-feedback'\n }, validationMessage || /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, \"\\xA0\")));\n}\n\nFormValidationFeedback.defaultProps = {\n mockInvalidSibling: false\n};\nFormValidationFeedback.propTypes = {\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n mockInvalidSibling: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool\n};\n\nfunction FormHelp(_ref) {\n var id = _ref.id,\n inline = _ref.inline,\n message = _ref.message;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"small\", {\n id: \"\".concat(id, \"-help\"),\n className: formatClasses(['text-muted', inline ? 'ml-2' : 'form-text'])\n }, message);\n}\n\nFormHelp.defaultProps = {\n inline: false\n};\nFormHelp.propTypes = {\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n message: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n inline: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool\n};\n\nfunction FormGroup(_ref) {\n var children = _ref.children,\n name = _ref.name,\n feedback = _ref.feedback,\n mockInvalidSibling = _ref.mockInvalidSibling,\n help = _ref.help,\n props = _objectWithoutProperties(_ref, [\"children\", \"name\", \"feedback\", \"mockInvalidSibling\", \"help\"]);\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"form-group\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormLabel, props), children, feedback && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormValidationFeedback, {\n mockInvalidSibling: mockInvalidSibling,\n name: name\n }), help && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormHelp, {\n message: help\n }));\n}\n\nFormGroup.defaultProps = {\n feedback: true,\n mockInvalidSibling: false\n};\nFormGroup.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node)]),\n feedback: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n help: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n mockInvalidSibling: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired\n};\n\nfunction FormGroupAutocomplete(props) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormGroup, props, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormAutocomplete, props));\n}\n\nFormGroupAutocomplete.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n filter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n help: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n onSearch: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n openOnFocus: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n options: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object]))]),\n placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n template: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n type: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string\n};\n\nfunction FormGroupCheckbox(props) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormGroup, _extends({\n mockInvalidSibling: true\n }, props), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormCheckbox, props));\n}\n\nFormGroupCheckbox.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n falseLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n help: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n trueLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n};\n\nfunction FormGroupInput(props) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormGroup, props, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormInput, props));\n}\n\nFormGroupInput.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n help: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n max: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n maxLength: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n min: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n minLength: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n pattern: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n readOnly: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n step: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n type: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string\n};\n\nfunction FormGroupRadio(_ref2) {\n var options = _ref2.options,\n id = _ref2.id,\n props = _objectWithoutProperties(_ref2, [\"options\", \"id\"]);\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormGroup, _extends({\n mockInvalidSibling: true\n }, props), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, options.map(function (option, index) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormRadio, _extends({\n key: index\n }, props, {\n checkedValue: option.value,\n valueLabel: option.label,\n id: \"\".concat(id, \"-\").concat(index)\n }));\n })));\n}\n\nFormGroupRadio.defaultProps = {\n inline: true\n};\nFormGroupRadio.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n help: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n inline: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n options: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({\n value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any.isRequired,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired\n })),\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func])\n};\n\nfunction FormGroupSelect(props) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormGroup, props, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormSelect, props));\n}\n\nFormGroupSelect.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n help: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n options: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({\n value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any.isRequired,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired\n })]))]),\n placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n trackBy: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string\n};\n\nfunction FormGroupSwitch(props) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormGroup, _extends({\n mockInvalidSibling: true\n }, props), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormSwitch, props));\n}\n\nFormGroupSwitch.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n falseLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n help: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n trueLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n};\n\nfunction FormGroupTextarea(props) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormGroup, props, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormTextarea, props));\n}\n\nFormGroupTextarea.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n help: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n readOnly: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n rows: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string])\n};\n\nfunction useFormData() {\n var formState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"])(FormContext);\n return formState.getFormData();\n}\n\nfunction ListGroupItem(_ref) {\n var index = _ref.index,\n isActive = _ref.isActive,\n isDisabled = _ref.isDisabled,\n item = _ref.item,\n linked = _ref.linked,\n onSelect = _ref.onSelect,\n children = _ref.children;\n var classes = formatClasses(['list-group-item', isActive && 'active', isDisabled && 'disabled', linked && 'list-group-item-action']);\n var onClick = safeClick(onSelect, index, item);\n\n if (linked) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n href: \"#\",\n className: classes,\n onClick: onClick\n }, children);\n }\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n className: classes,\n onClick: onClick\n }, children);\n}\n\nListGroupItem.defaultProps = {\n isActive: false\n};\nListGroupItem.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n index: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired,\n isActive: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n isDisabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n item: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired,\n linked: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired,\n onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func\n};\n\nfunction ListGroup(_ref) {\n var items = _ref.items,\n active = _ref.active,\n linked = _ref.linked,\n bordered = _ref.bordered,\n horizontal = _ref.horizontal,\n template = _ref.template,\n isDisabled = _ref.isDisabled,\n onSelect = _ref.onSelect;\n var classes = formatClasses(['list-group', !bordered && 'list-group-flush', horizontal && 'list-group-horizontal']);\n var content = items.map(function (item, index) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(ListGroupItem, {\n key: index,\n index: index,\n isActive: active === index,\n isDisabled: isDisabled(item),\n item: item,\n linked: linked,\n onSelect: onSelect\n }, template(item, index));\n });\n\n if (linked) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classes\n }, content);\n }\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"ul\", {\n className: classes\n }, content);\n}\n\nListGroup.defaultProps = {\n bordered: true,\n horizontal: false,\n isDisabled: function isDisabled() {},\n linked: false,\n onSelect: function onSelect() {}\n};\nListGroup.propTypes = {\n active: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n bordered: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n horizontal: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n isDisabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n items: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.array.isRequired,\n linked: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n template: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired\n};\n\nfunction useSelectedItem(defaultIndex, collectionSize) {\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(defaultIndex < collectionSize ? defaultIndex : 0),\n _useState2 = _slicedToArray(_useState, 2),\n selectedItem = _useState2[0],\n setSelectedItem = _useState2[1];\n\n return {\n getSelected: function getSelected() {\n return selectedItem;\n },\n select: function select(index) {\n if (index >= collectionSize) {\n throw new Error('Invalid selected item');\n }\n\n setSelectedItem(index);\n }\n };\n}\n\nfunction StatefulListGroup(_ref) {\n var initialItem = _ref.initialItem,\n items = _ref.items,\n _ = _ref.active,\n props = _objectWithoutProperties(_ref, [\"initialItem\", \"items\", \"active\"]);\n\n var _useSelectedItem = useSelectedItem(initialItem, items.length),\n getSelected = _useSelectedItem.getSelected,\n select = _useSelectedItem.select;\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(ListGroup, _extends({\n items: items,\n active: getSelected(),\n onSelect: select\n }, props));\n}\n\nStatefulListGroup.propTypes = {\n active: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any,\n items: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object),\n initialItem: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number\n};\n\nfunction Pagination(_ref) {\n var actualPage = _ref.actualPage,\n ariaLabel = _ref.ariaLabel,\n firstLabel = _ref.firstLabel,\n lastLabel = _ref.lastLabel,\n lastPage = _ref.lastPage,\n maxPageWindow = _ref.maxPageWindow,\n nextLabel = _ref.nextLabel,\n onSelect = _ref.onSelect,\n previousLabel = _ref.previousLabel;\n var pageWindow = Math.min(maxPageWindow, lastPage);\n var centerOfPageWindow = Math.max(Math.floor(pageWindow / 2), 2);\n var lastStartPage = Math.max(lastPage - pageWindow + 1, 1);\n var startPage = Math.max(Math.min(actualPage - centerOfPageWindow, lastStartPage), 1);\n var showPreviousNavigation = startPage > 1;\n var pages = Array.from({\n length: pageWindow\n }, function (v, i) {\n return startPage + i;\n });\n\n var select = function select(page) {\n return safeClick(onSelect, page);\n };\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"nav\", {\n \"aria-label\": ariaLabel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"ul\", {\n className: \"pagination\"\n }, showPreviousNavigation && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n className: \"page-item\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n className: \"page-link\",\n href: \"\",\n onClick: select(1),\n \"aria-label\": firstLabel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n \"aria-hidden\": \"true\"\n }, \"\\xAB\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"sr-only\"\n }, firstLabel))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n className: \"page-item\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n className: \"page-link\",\n href: \"\",\n onClick: select(actualPage - 1),\n \"aria-label\": previousLabel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n \"aria-hidden\": \"true\"\n }, \"\\u2039\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"sr-only\"\n }, previousLabel)))), pages.map(function (page) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n key: \"pages-\".concat(page),\n className: formatClasses(['page-item', actualPage === page && 'active'])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n className: \"page-link\",\n href: \"\",\n onClick: select(page)\n }, page));\n }), startPage < lastStartPage && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n className: \"page-item\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n className: \"page-link\",\n href: \"\",\n onClick: select(actualPage + 1),\n \"aria-label\": nextLabel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n \"aria-hidden\": \"true\"\n }, \"\\u203A\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"sr-only\"\n }, nextLabel))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n className: \"page-item\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n className: \"page-link\",\n href: \"\",\n onClick: select(lastPage),\n \"aria-label\": lastLabel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n \"aria-hidden\": \"true\"\n }, \"\\xBB\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"sr-only\"\n }, lastLabel))))));\n}\n\nPagination.defaultProps = {\n actualPage: 1,\n ariaLabel: 'Page navigation',\n firstLabel: 'First',\n lastLabel: 'Last',\n maxPageWindow: 5,\n nextLabel: 'Next',\n previousLabel: 'Previous'\n};\nPagination.propTypes = {\n actualPage: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n ariaLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n firstLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n lastLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n lastPage: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n maxPageWindow: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n nextLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,\n previousLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string\n};\n\nfunction normalizeColumns(columns) {\n return columns.map(function (column) {\n if (!isString(column)) {\n return column;\n }\n\n return {\n attribute: column,\n label: column\n };\n });\n}\n\nfunction getColumnClass(_ref) {\n var align = _ref.align;\n return formatClasses([align === 'center' ? 'text-center' : align === 'right' ? 'text-right' : '']);\n}\n\nfunction TableHead(_ref) {\n var columns = _ref.columns,\n hasActions = _ref.hasActions,\n actionLabel = _ref.actionLabel,\n columnHeaderFormat = _ref.columnHeaderFormat;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"thead\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"tr\", null, columns.map(function (column, columnIndex) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"th\", {\n key: columnIndex,\n className: getColumnClass(column)\n }, columnHeaderFormat(column.label, column.attribute));\n }), hasActions && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"th\", {\n className: \"text-center\"\n }, actionLabel)));\n}\n\nTableHead.propTypes = {\n actionLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n hasActions: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n columns: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object])),\n columnHeaderFormat: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired\n};\n\nfunction TableActions(_ref) {\n var doc = _ref.doc,\n docIndex = _ref.docIndex,\n actions = _ref.actions;\n\n if (!actions) {\n return null;\n }\n\n var normalizedActions = normalizeAction(actions, doc, docIndex);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", {\n className: \"text-center\"\n }, normalizedActions.map(function (action, actionIndex) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n key: actionIndex,\n className: actionIndex > 0 ? 'ml-2' : ''\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(TableAction, {\n doc: doc,\n docIndex: docIndex,\n action: action\n }));\n }));\n}\n\nTableActions.propTypes = {\n doc: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired,\n docIndex: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired,\n actions: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object)])\n};\n\nfunction TableAction(_ref2) {\n var doc = _ref2.doc,\n docIndex = _ref2.docIndex,\n action = _ref2.action;\n\n if (isFunction(action)) {\n return action(doc, docIndex) || null;\n }\n\n if (action.onClick || action.link) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", _extends({\n title: action.title\n }, getActionProps(action, doc, docIndex)), action.content);\n }\n\n return action.content;\n}\n\nTableAction.propTypes = {\n doc: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired,\n docIndex: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired,\n action: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object]).isRequired\n};\n\nfunction getActionProps(action, doc, docIndex) {\n var props = {};\n\n if (action.onClick) {\n props.href = '';\n props.onClick = safeClick(action.onClick, doc, docIndex);\n } else if (action.link) {\n props.onClick = stopPropagation;\n props.href = action.link(doc, docIndex);\n }\n\n return props;\n}\n\nfunction normalizeAction(actions, doc, docIndex) {\n if (isFunction(actions)) {\n return actions(doc, docIndex);\n }\n\n return actions;\n}\n\nfunction TableBody(_ref) {\n var columns = _ref.columns,\n docs = _ref.docs,\n rowClass = _ref.rowClass,\n actions = _ref.actions,\n onRowClick = _ref.onRowClick;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"tbody\", null, docs.map(function (doc, docIndex) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"tr\", {\n key: docIndex,\n className: rowClass(doc),\n role: \"button\",\n onClick: safeClick(onRowClick, doc, docIndex)\n }, columns.map(function (column, columnIndex) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", {\n key: columnIndex,\n className: getColumnClass(column)\n }, getColumnValue(doc, column, docIndex));\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(TableActions, {\n doc: doc,\n docIndex: docIndex,\n actions: actions\n }));\n }));\n}\n\nTableBody.propTypes = {\n actions: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object)]),\n columns: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object])),\n docs: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object),\n rowClass: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n onRowClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func\n};\n\nfunction getColumnValue(doc, column, docIndex) {\n var rawValue = getValueByPath(doc, column.attribute);\n\n if (!column.format) {\n return rawValue;\n }\n\n return column.format(rawValue, doc, docIndex);\n}\n\nfunction Table(_ref) {\n var docs = _ref.docs,\n columns = _ref.columns,\n striped = _ref.striped,\n bordered = _ref.bordered,\n hover = _ref.hover,\n small = _ref.small,\n dark = _ref.dark,\n rowClass = _ref.rowClass,\n caption = _ref.caption,\n onRowClick = _ref.onRowClick,\n actions = _ref.actions,\n actionLabel = _ref.actionLabel,\n columnHeaderFormat = _ref.columnHeaderFormat;\n var normalizedColumns = normalizeColumns(columns);\n var tableClasses = formatClasses(['table', striped && 'table-striped', bordered && 'table-bordered', hover && 'table-hover', small && 'table-sm', dark && 'table-dark']);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"table-responsive\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"table\", {\n className: tableClasses\n }, caption && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"caption\", null, caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(TableHead, _extends({\n actionLabel: actionLabel,\n columnHeaderFormat: columnHeaderFormat,\n hasActions: Boolean(actions)\n }, {\n columns: normalizedColumns\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(TableBody, _extends({\n docs: docs,\n rowClass: rowClass,\n actions: actions,\n onRowClick: onRowClick\n }, {\n columns: normalizedColumns\n }))));\n}\n\nTable.defaultProps = {\n striped: true,\n bordered: false,\n hover: true,\n small: true,\n dark: false,\n actionLabel: 'Actions',\n rowClass: function rowClass() {\n return '';\n },\n onRowClick: function onRowClick() {},\n columnHeaderFormat: function columnHeaderFormat(label) {\n return label;\n }\n};\nTable.propTypes = {\n actionLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n actions: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object)]),\n bordered: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n caption: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n columnHeaderFormat: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n columns: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object])),\n dark: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n docs: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object),\n hover: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n onRowClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n rowClass: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n small: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n striped: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool\n};\n\nfunction TabHeader(_ref) {\n var index = _ref.index,\n isActive = _ref.isActive,\n title = _ref.title,\n onSelect = _ref.onSelect;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n className: \"nav-item\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n className: formatClasses(['nav-link', isActive && 'active']) // id=\"home-tab\"\n ,\n \"data-toggle\": \"tab\",\n href: \"\" // href=\"#home\"\n ,\n onClick: safeClick(onSelect, index),\n role: \"tab\" // aria-controls=\"home\"\n ,\n \"aria-selected\": isActive\n }, title));\n}\n\nTabHeader.propTypes = {\n index: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n isActive: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func\n};\n\nfunction TabContent(_ref) {\n var isActive = _ref.isActive,\n content = _ref.content;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: formatClasses(['tab-pane fade', isActive && 'show active']) // id=\"home\"\n ,\n role: \"tabpanel\" // aria-labelledby=\"home-tab\"\n\n }, content);\n}\n\nTabContent.propTypes = {\n isActive: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n content: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n};\n\nfunction Tabs(_ref) {\n var vertical = _ref.vertical,\n tabs = _ref.tabs,\n activeTab = _ref.activeTab,\n onlyRenderActiveTab = _ref.onlyRenderActiveTab,\n bordered = _ref.bordered,\n onSelect = _ref.onSelect;\n\n if (activeTab >= tabs.length) {\n // eslint-disable-next-line no-console\n console.error(\"Invalid tab selected: \".concat(activeTab, \". The first tab will be selected instead.\"));\n activeTab = 0;\n }\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: formatClasses(['custom-tabs-container', vertical && 'd-flex'])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"tabs-navigation\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"ul\", {\n className: formatClasses(['nav', vertical ? 'nav-pills flex-column' : 'nav-tabs']),\n id: \"myTab\",\n role: \"tablist\"\n }, tabs.map(function (tab, tabIndex) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(TabHeader, {\n key: tabIndex,\n index: tabIndex,\n isActive: tabIndex === activeTab,\n title: tab.title,\n onSelect: onSelect\n });\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: formatClasses(['tab-content', vertical ? 'flex-fill ml-3' : bordered ? 'border-left border-right border-bottom p-2' : 'py-2']) // id=\"myTabContent\"\n\n }, onlyRenderActiveTab ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(TabContent, {\n isActive: true,\n content: tabs[activeTab] && tabs[activeTab].content\n }) : tabs.map(function (tab, tabIndex) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(TabContent, {\n key: tabIndex,\n isActive: tabIndex === activeTab,\n content: tab.content\n });\n })));\n}\n\nTabs.defaultProps = {\n activeTab: 0,\n bordered: false,\n onlyRenderActiveTab: false,\n onSelect: function onSelect() {},\n vertical: false\n};\nTabs.propTypes = {\n activeTab: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n bordered: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n onlyRenderActiveTab: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n tabs: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({\n title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n content: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n })).isRequired,\n vertical: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool\n};\n\nfunction StatefulTabs(_ref) {\n var initialTab = _ref.initialTab,\n tabs = _ref.tabs,\n props = _objectWithoutProperties(_ref, [\"initialTab\", \"tabs\"]);\n\n var _useSelectedItem = useSelectedItem(initialTab, tabs.length),\n getSelected = _useSelectedItem.getSelected,\n select = _useSelectedItem.select;\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Tabs, _extends({\n tabs: tabs\n }, props, {\n activeTab: getSelected(),\n onSelect: select\n }));\n}\n\nStatefulTabs.propTypes = {\n bordered: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n initialTab: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n onlyRenderActiveTab: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n tabs: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({\n title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n content: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n })).isRequired,\n vertical: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool\n};\nvar ToastsContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext(null);\nvar TOASTS_VALID_POSITIONS = ['TOP_LEFT', 'TOP_RIGHT', 'BOTTOM_LEFT', 'BOTTOM_RIGHT'];\nvar TOASTS_VALID_TYPES = ['info', 'success', 'danger', 'warning'];\nvar TOASTS_CLASSNAME_BY_POSITION = [{\n name: 'TOP_LEFT',\n className: 'top-left'\n}, {\n name: 'TOP_RIGHT',\n className: 'top-right'\n}, {\n name: 'BOTTOM_LEFT',\n className: 'bottom-left'\n}, {\n name: 'BOTTOM_RIGHT',\n className: 'bottom-right'\n}];\nvar TOASTS_DEFAULT_STYLE = {\n position: 'fixed',\n zIndex: 9999,\n maxWidth: '50%'\n};\nvar TOASTS_DEFAULT_STYLES_BY_POSITION = {\n TOP_RIGHT: {\n top: '25px',\n right: '25px'\n },\n TOP_LEFT: {\n top: '25px',\n left: '25px'\n },\n BOTTOM_RIGHT: {\n right: '25px',\n bottom: '25px'\n },\n BOTTOM_LEFT: {\n left: '25px',\n bottom: '25px'\n }\n};\n\nfunction Toast(_ref) {\n var id = _ref.id,\n type = _ref.type,\n message = _ref.message,\n closeControl = _ref.closeControl,\n position = _ref.position,\n noStyle = _ref.noStyle;\n var toastsState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"])(ToastsContext);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: formatClasses(['toast-message', 'alert', \"alert-\".concat(type), closeControl && 'alert-dismissible']),\n style: noStyle ? null : {\n width: 'auto',\n zIndex: 9999\n }\n }, message, closeControl && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"button\", {\n type: \"button\",\n className: \"close\",\n onClick: function onClick() {\n return toastsState.close(position, id);\n },\n \"aria-label\": \"Close\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n \"aria-hidden\": \"true\"\n }, \"\\xD7\")));\n}\n\nToast.propTypes = {\n closeControl: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired,\n message: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n noStyle: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n position: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n type: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired\n};\n\nfunction ToastsRegion(_ref) {\n var name = _ref.name,\n className = _ref.className,\n toasts = _ref.toasts,\n noStyle = _ref.noStyle;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n key: name,\n className: className,\n style: noStyle ? null : _objectSpread2(_objectSpread2({}, TOASTS_DEFAULT_STYLE), TOASTS_DEFAULT_STYLES_BY_POSITION[name])\n }, toasts.map(function (toast) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Toast, _extends({\n key: toast.id\n }, toast));\n }));\n}\n\nToastsRegion.defaultProps = {\n toasts: []\n};\nToastsRegion.propTypes = {\n className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n noStyle: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n toasts: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object)\n};\n\nfunction useToastState(_ref) {\n var unique = _ref.unique;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(0),\n _useState2 = _slicedToArray(_useState, 2),\n nextId = _useState2[0],\n setNextId = _useState2[1];\n\n var timeoutRefs = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])({});\n\n var _useArrayValueMap = useArrayValueMap(unique && {\n equalityComparator: function equalityComparator(a) {\n return function (b) {\n return a.message === b.message;\n };\n }\n }),\n push = _useArrayValueMap.push,\n unset = _useArrayValueMap.unset,\n get = _useArrayValueMap.get,\n reset = _useArrayValueMap.reset;\n\n var show = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (message) {\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref2$type = _ref2.type,\n type = _ref2$type === void 0 ? 'info' : _ref2$type,\n _ref2$autoClose = _ref2.autoClose,\n autoClose = _ref2$autoClose === void 0 ? 5000 : _ref2$autoClose,\n _ref2$position = _ref2.position,\n position = _ref2$position === void 0 ? 'TOP_RIGHT' : _ref2$position;\n\n if (!TOASTS_VALID_TYPES.includes(type)) {\n throw new Error(\"Invalid toast type \".concat(type, \". Must be \").concat(TOASTS_VALID_TYPES));\n }\n\n if (!TOASTS_VALID_POSITIONS.includes(position)) {\n throw new Error(\"Invalid toast position \".concat(position, \". Must be \").concat(TOASTS_VALID_POSITIONS));\n }\n\n var toastId = nextId;\n push(position, {\n id: toastId,\n message: message,\n type: type,\n position: position,\n closeControl: !autoClose\n });\n\n if (isNumber(autoClose) && !isNaN(autoClose)) {\n var timeoutId = setTimeout(function () {\n close(position, toastId);\n }, autoClose);\n timeoutRefs.current[toastId] = {\n timeoutId: timeoutId,\n position: position\n };\n }\n\n setNextId(function (prevId) {\n return prevId + 1;\n });\n return toastId;\n }, [close, nextId, push]);\n var close = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (position, toastId) {\n var timeoutId = timeoutRefs.current[toastId].timeoutId;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n delete timeoutRefs.current[toastId];\n unset(position, function (toast) {\n return toast.id !== toastId;\n });\n }, [unset]);\n var closeAll = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function () {\n for (var _i = 0, _Object$entries = Object.entries(timeoutRefs.current); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),\n toastId = _Object$entries$_i[0],\n position = _Object$entries$_i[1].position;\n\n close(position, toastId);\n }\n\n reset();\n }, [close, reset]);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n return closeAll;\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n return {\n show: show,\n close: close,\n closeAll: closeAll,\n get: get\n };\n}\n\nfunction ToastsContainer(_ref) {\n var children = _ref.children,\n unique = _ref.unique,\n noStyle = _ref.noStyle;\n var toastsState = useToastState({\n unique: unique\n });\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(ToastsContext.Provider, {\n value: toastsState\n }, children, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"toast-container\"\n }, TOASTS_CLASSNAME_BY_POSITION.map(function (_ref2) {\n var name = _ref2.name,\n className = _ref2.className;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(ToastsRegion, {\n key: name,\n name: name,\n className: className,\n toasts: toastsState.get(name),\n noStyle: noStyle\n });\n })));\n}\n\nToastsContainer.defaultProps = {\n noStyle: false,\n unique: true\n};\nToastsContainer.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node)]),\n noStyle: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n unique: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool\n};\n\nfunction useToasts() {\n var toastsState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"])(ToastsContext);\n return {\n /**\n * showToast\n * @param {string} message\n * @param {object} options Configurations object\n * @param {string} options.type toast color based on bootstrap theme ('info' - default, 'success', 'danger', 'warning')\n * @param {number} options.autoClose miliseconds to automatically close toast (default 5000)\n * @param {string} options.position toast position ('TOP_LEFT', 'TOP_RIGHT' - default, 'BOTTOM_LEFT', 'BOTTOM_RIGHT')\n *\n * @returns {func} a closeToast function to close the opened toast\n */\n showToast: function showToast(message, options) {\n var _ref = options || {},\n _ref$type = _ref.type,\n type = _ref$type === void 0 ? 'info' : _ref$type,\n _ref$autoClose = _ref.autoClose,\n autoClose = _ref$autoClose === void 0 ? 5000 : _ref$autoClose,\n _ref$position = _ref.position,\n position = _ref$position === void 0 ? 'TOP_RIGHT' : _ref$position;\n\n var toastId = toastsState.show(message, {\n type: type,\n autoClose: autoClose,\n position: position\n });\n return function closeToast() {\n toastsState.close(position, toastId);\n };\n },\n closeAllToasts: function closeAllToasts() {\n toastsState.closeAll();\n }\n };\n}\n\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./dist/main.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AlertDialog\", function() { return AlertDialog; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ConfirmationDialog\", function() { return ConfirmationDialog; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Dialog\", function() { return Dialog; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Dropdown\", function() { return Dropdown; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Form\", function() { return Form; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormAutocomplete\", function() { return FormAutocomplete; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormCheckbox\", function() { return FormCheckbox; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroup\", function() { return FormGroup; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroupAutocomplete\", function() { return FormGroupAutocomplete; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroupCheckbox\", function() { return FormGroupCheckbox; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroupInput\", function() { return FormGroupInput; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroupRadio\", function() { return FormGroupRadio; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroupSelect\", function() { return FormGroupSelect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroupSwitch\", function() { return FormGroupSwitch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormGroupTextarea\", function() { return FormGroupTextarea; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormInput\", function() { return FormInput; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormRadio\", function() { return FormRadio; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormSelect\", function() { return FormSelect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormSwitch\", function() { return FormSwitch; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"FormTextarea\", function() { return FormTextarea; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ListGroup\", function() { return ListGroup; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Pagination\", function() { return Pagination; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StatefulListGroup\", function() { return StatefulListGroup; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"StatefulTabs\", function() { return StatefulTabs; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TOASTS_CLASSNAME_BY_POSITION\", function() { return TOASTS_CLASSNAME_BY_POSITION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TOASTS_DEFAULT_STYLE\", function() { return TOASTS_DEFAULT_STYLE; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TOASTS_DEFAULT_STYLES_BY_POSITION\", function() { return TOASTS_DEFAULT_STYLES_BY_POSITION; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TOASTS_VALID_POSITIONS\", function() { return TOASTS_VALID_POSITIONS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TOASTS_VALID_TYPES\", function() { return TOASTS_VALID_TYPES; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TabContent\", function() { return TabContent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TabHeader\", function() { return TabHeader; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Table\", function() { return Table; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Tabs\", function() { return Tabs; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ToastsContainer\", function() { return ToastsContainer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ToastsContext\", function() { return ToastsContext; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"awaitForAsyncTask\", function() { return awaitForAsyncTask; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"deepClone\", function() { return deepClone; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"formatClasses\", function() { return formatClasses; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"getValueByPath\", function() { return getValueByPath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"safeClick\", function() { return safeClick; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"setValueByPath\", function() { return setValueByPath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"splitPath\", function() { return splitPath; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"stopPropagation\", function() { return stopPropagation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useArrayValueMap\", function() { return useArrayValueMap; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useFormControl\", function() { return useFormControl; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useFormData\", function() { return useFormData; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useOpenState\", function() { return useOpenState; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useSelectedItem\", function() { return useSelectedItem; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useToasts\", function() { return useToasts; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"useValueMap\", function() { return useValueMap; });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-dom */ \"./node_modules/react-dom/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_2__);\nfunction _typeof2(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof2(obj); }\n\n\n\n\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n var it;\n\n if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n\n var F = function F() {};\n\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e2) {\n throw _e2;\n },\n f: F\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = o[Symbol.iterator]();\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e3) {\n didErr = true;\n err = _e3;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\n\nfunction _toPrimitive(input, hint) {\n if (_typeof2(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof2(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n\n return (hint === \"string\" ? String : Number)(input);\n}\n\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n\n return _typeof2(key) === \"symbol\" ? key : String(key);\n}\n\nfunction ModalPortal(_ref) {\n var children = _ref.children,\n title = _ref.title,\n isOpen = _ref.isOpen;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(),\n _useState2 = _slicedToArray(_useState, 2),\n container = _useState2[0],\n setContainer = _useState2[1];\n\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n var modalPortalsElem = getModalPortalsElem();\n\n if (!container) {\n var containerElem = document.createElement('div');\n containerElem.dataset.title = title;\n modalPortalsElem.appendChild(containerElem);\n setContainer(containerElem);\n }\n\n return function () {\n if (!container) {\n return;\n }\n\n modalPortalsElem.removeChild(container);\n };\n }, [container, title]); //FIXME: prop to define if modal will be always included into DOM\n\n if (!container || !isOpen) {\n return '';\n }\n\n return /*#__PURE__*/react_dom__WEBPACK_IMPORTED_MODULE_2___default.a.createPortal(children, container);\n}\n\nModalPortal.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node)])\n};\n\nfunction getModalPortalsElem() {\n var modalPortalsElem = document.querySelector('#modal-portals');\n\n if (!modalPortalsElem) {\n var body = document.querySelector('body');\n modalPortalsElem = document.createElement('div');\n modalPortalsElem.id = 'modal-portals';\n body.appendChild(modalPortalsElem);\n }\n\n return modalPortalsElem;\n}\n\nfunction isArray(value) {\n return Array.isArray(value);\n}\n\nfunction isEmptyArray(value) {\n return isArray(value) && value.length === 0;\n}\n\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n\nfunction isNull(value) {\n return value === null;\n}\n\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n\nfunction isBoolean(value) {\n return typeof value === 'boolean';\n}\n\nfunction _typeof$1(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof$1 = function _typeof$1(obj) {\n return typeof obj;\n };\n } else {\n _typeof$1 = function _typeof$1(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof$1(obj);\n}\n\nfunction isObject(value) {\n return _typeof$1(value) == 'object' && !isNull(value) && !isArray(value);\n}\n\nfunction isPlainObject(value) {\n return isObject(value) && value.constructor == Object;\n}\n\nfunction isEmptyObject(valor) {\n return isPlainObject(valor) && Object.keys(valor).length === 0;\n}\n\nfunction isString(value) {\n return typeof value === 'string';\n}\n\nfunction isEmptyString(value) {\n return isString(value) && value.length === 0;\n}\n\nfunction isEmptyStringLike(value) {\n return isUndefined(value) || isNull(value) || isEmptyString(value);\n}\n\nfunction isEmptyLike(value) {\n return isEmptyStringLike(value) || isEmptyArray(value) || isEmptyObject(value);\n}\n\nfunction isDate(value) {\n return Object.prototype.toString.call(value) === '[object Date]';\n}\n\nfunction isDateISOString(value) {\n if (!isString(value)) {\n return false;\n }\n\n if (value.length !== 24) {\n return false;\n }\n\n return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/.test(value);\n}\n\nfunction isNumber(value) {\n return typeof value === 'number';\n}\n\nfunction safeClick(callback) {\n for (var _len = arguments.length, callbackArgs = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n callbackArgs[_key - 1] = arguments[_key];\n }\n\n return function (e) {\n stopPropagation(e);\n e.preventDefault();\n callback.apply(void 0, callbackArgs);\n };\n}\n\nfunction awaitForAsyncTask(task, callback) {\n return function () {\n var res = task();\n\n if (!res || !res.then) {\n callback();\n return;\n }\n\n res.then(callback);\n };\n}\n\nfunction stopPropagation(e) {\n e.stopPropagation();\n}\n\nfunction formatClasses(cssClasses) {\n return cssClasses.filter(function (v) {\n return v;\n }).join(' ');\n}\n\nvar ESCAPE_KEYCODE = 27;\n\nfunction Modal(_ref) {\n var title = _ref.title,\n body = _ref.body,\n onClose = _ref.onClose,\n isOpen = _ref.isOpen,\n footer = _ref.footer,\n staticBackdrop = _ref.staticBackdrop,\n scrollable = _ref.scrollable,\n centered = _ref.centered,\n size = _ref.size,\n keyboard = _ref.keyboard;\n var modalRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n var closeAndHide = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function () {\n hideModal(modalRef);\n onClose();\n }, [onClose]);\n var closeIfEscape = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (event) {\n if (keyboard && event.which === ESCAPE_KEYCODE) {\n closeAndHide();\n }\n }, [keyboard, closeAndHide]);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n var modalElement = modalRef.current;\n modalElement.addEventListener('keydown', closeIfEscape);\n return function () {\n modalElement.removeEventListener('keydown', closeIfEscape);\n };\n }, [keyboard, closeIfEscape, modalRef]);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (isOpen) {\n showModal(modalRef);\n } else {\n hideModal(modalRef);\n }\n }, [isOpen]);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"modal fade\",\n tabIndex: \"-1\",\n role: \"dialog\",\n ref: modalRef,\n onClick: function onClick(e) {\n e.stopPropagation();\n\n if (!staticBackdrop) {\n closeAndHide();\n }\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: formatClasses(['modal-dialog', scrollable && 'modal-dialog-scrollable', centered && 'modal-dialog-centered', size && \"modal-\".concat(size)]),\n role: \"document\",\n onClick: stopPropagation\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"modal-content\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"modal-header\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"h5\", {\n className: \"modal-title\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"button\", {\n type: \"button\",\n className: \"close\",\n onClick: closeAndHide,\n \"aria-label\": \"Close\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n \"aria-hidden\": \"true\"\n }, \"\\xD7\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"modal-body\"\n }, renderObjectOrFunction(body, {\n close: closeAndHide\n })), footer && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"modal-footer\"\n }, renderObjectOrFunction(footer, {\n close: closeAndHide\n })))));\n}\n\nModal.defaultProps = {\n centered: true,\n keyboard: true,\n scrollable: false,\n size: '',\n staticBackdrop: false\n};\nModal.propTypes = {\n body: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n centered: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n footer: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n isOpen: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n keyboard: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n onClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n scrollable: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n size: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['sm', 'lg', 'xl', '']),\n staticBackdrop: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n};\n\nfunction hideModal(modalRef) {\n modalRef.current.style.display = 'none';\n modalRef.current.classList.remove('show');\n hideModalBackdrop();\n enableBodyScroll();\n\n if (modalRef.current.style.zIndex) {\n modalRef.current.style.zIndex = null;\n }\n}\n\nfunction enableBodyScroll() {\n var body = document.querySelector('body');\n body.classList.remove('modal-open');\n}\n\nfunction showModal(modalRef) {\n disableBodyScroll();\n showModalBackdrop();\n\n if (countModals() > 0) {\n modalRef.current.style.zIndex = getZIndex(modalRef.current) + countModals() * 20;\n }\n\n modalRef.current.style.display = 'block';\n modalRef.current.classList.add('show');\n modalRef.current.focus();\n}\n\nfunction renderObjectOrFunction(content, params) {\n return isFunction(content) ? content(params) : content;\n}\n\nfunction showModalBackdrop() {\n var backdrop = getModalBackdrop();\n backdrop.classList.remove('d-none');\n\n if (countModals() > 0) {\n backdrop.style.zIndex = getZIndex(backdrop) + 20;\n }\n}\n\nfunction hideModalBackdrop() {\n var backdrop = getModalBackdrop();\n\n if (backdrop.style.zIndex) {\n backdrop.style.zIndex -= 20;\n }\n\n if (countModals() === 0) {\n backdrop.classList.add('d-none');\n backdrop.style.zIndex = null;\n }\n}\n\nfunction getModalBackdrop() {\n var body = document.querySelector('body');\n var backdrop = document.querySelector('.modal-backdrop');\n\n if (!backdrop) {\n backdrop = document.createElement('div');\n backdrop.classList.add('modal-backdrop', 'fade', 'show', 'd-none');\n body.appendChild(backdrop);\n }\n\n return backdrop;\n}\n\nfunction countModals() {\n return document.querySelectorAll('#modal-portals .modal.show').length;\n}\n\nfunction disableBodyScroll() {\n if (countModals() != 0) {\n return;\n }\n\n var body = document.querySelector('body');\n body.classList.add('modal-open');\n}\n\nfunction getZIndex(elem) {\n return parseInt(window.getComputedStyle(elem).zIndex, 10);\n}\n\nfunction useOpenState() {\n var initialState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(initialState),\n _useState2 = _slicedToArray(_useState, 2),\n _isOpen = _useState2[0],\n setIsOpen = _useState2[1];\n\n return {\n open: function open() {\n setIsOpen(true);\n },\n close: function close() {\n setIsOpen(false);\n },\n isOpen: function isOpen() {\n return _isOpen;\n }\n };\n}\n\nfunction Dialog(_ref) {\n var children = _ref.children,\n props = _objectWithoutProperties(_ref, [\"children\"]);\n\n var _useOpenState = useOpenState(),\n isOpen = _useOpenState.isOpen,\n open = _useOpenState.open,\n close = _useOpenState.close;\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(DialogTrigger, {\n open: open\n }, children), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(ModalPortal, {\n isOpen: isOpen(),\n title: props.title\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Modal, _extends({}, props, {\n onClose: close,\n isOpen: isOpen()\n }))));\n}\n\nDialog.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n body: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n centered: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n footer: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n keyboard: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n scrollable: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n size: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['sm', 'lg', 'xl', '']),\n staticBackdrop: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n};\n\nfunction DialogTrigger(_ref2) {\n var children = _ref2.children,\n open = _ref2.open;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.cloneElement(children, {\n onClick: safeClick(open)\n });\n}\n\nfunction AlertDialog(_ref) {\n var title = _ref.title,\n message = _ref.message,\n children = _ref.children,\n onClose = _ref.onClose,\n closeLabel = _ref.closeLabel;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Dialog, {\n title: title,\n body: message,\n footer: function footer(_ref2) {\n var close = _ref2.close;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"button\", {\n type: \"button\",\n className: \"btn btn-primary\",\n onClick: awaitForAsyncTask(onClose, close)\n }, closeLabel);\n }\n }, children);\n}\n\nAlertDialog.defaultProps = {\n onClose: function onClose() {},\n title: 'Atention required',\n closeLabel: 'Close'\n};\nAlertDialog.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n message: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n onClose: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n closeLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n};\n\nfunction ConfirmationDialog(_ref) {\n var title = _ref.title,\n message = _ref.message,\n children = _ref.children,\n onProceed = _ref.onProceed,\n onCancel = _ref.onCancel,\n cancelLabel = _ref.cancelLabel,\n proceedLabel = _ref.proceedLabel,\n proceedType = _ref.proceedType;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Dialog, {\n title: title,\n body: message,\n footer: function footer(_ref2) {\n var close = _ref2.close;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"button\", {\n type: \"button\",\n className: \"btn btn-secondary\",\n onClick: safeClick(awaitForAsyncTask(onCancel, close))\n }, cancelLabel), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"button\", {\n type: \"button\",\n className: formatClasses(['btn', \"btn-\".concat(proceedType)]),\n onClick: safeClick(awaitForAsyncTask(onProceed, close))\n }, proceedLabel));\n }\n }, children);\n}\n\nConfirmationDialog.defaultProps = {\n onProceed: function onProceed() {},\n onCancel: function onCancel() {},\n title: 'Atention required',\n cancelLabel: 'Cancel',\n proceedLabel: 'Proceed',\n proceedType: 'primary'\n};\nConfirmationDialog.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n message: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n onCancel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n onProceed: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n cancelLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n proceedLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n proceedType: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['primary', 'danger', 'success'])\n};\n\nfunction splitPath(path) {\n return path.replace(/]/g, '').split(/[.[]/).map(function (path, index, paths) {\n var def = {\n path: path\n };\n\n if (parseInt(paths[index + 1], 10).toString() === paths[index + 1]) {\n def.couldBeAnArray = true;\n }\n\n return def;\n });\n}\n\nfunction getValueByPath(obj, objPath) {\n var paths = splitPath(objPath);\n return paths.reduce(function (cursor, _ref) {\n var path = _ref.path;\n\n if (isUndefined(cursor) || isNull(cursor)) {\n return;\n }\n\n if (!path) {\n return cursor;\n }\n\n return cursor[path];\n }, obj);\n}\n\nfunction setValueByPath(obj, objPath, value) {\n var paths = splitPath(objPath);\n\n if (paths.length === 1) {\n obj[objPath] = value;\n return obj;\n }\n\n var lastPath = paths[paths.length - 1].path;\n var remainingPaths = paths.slice(0, paths.length - 1);\n var lastCursor = remainingPaths.reduce(function (cursor, _ref2) {\n var path = _ref2.path,\n couldBeAnArray = _ref2.couldBeAnArray;\n\n if (!path) {\n return cursor || (couldBeAnArray ? [] : {});\n }\n\n if (!cursor[path]) {\n cursor[path] = couldBeAnArray ? [] : {};\n }\n\n return cursor[path];\n }, obj);\n lastCursor[lastPath] = value;\n return obj || lastCursor;\n}\n\nfunction deepClone(item) {\n // null, undefined values check and literals\n if (!item || !isObject(item)) {\n return item;\n }\n\n if (isArray(item)) {\n return item.map(deepClone);\n } // testing that this is DOM\n\n\n if (item.nodeType && isFunction(item.cloneNode)) {\n return item.cloneNode(true);\n }\n\n if (!item.prototype) {\n // check that this is a literal\n if (item instanceof Date) {\n return new Date(item);\n } // it is an object literal\n\n\n var result = {};\n\n for (var i in item) {\n result[i] = deepClone(item[i]);\n }\n\n return result;\n }\n\n return item;\n}\n\nvar FormContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext(null);\n\nfunction validateFormElement(_ref) {\n var name = _ref.name,\n _ref$validations = _ref.validations,\n validations = _ref$validations === void 0 ? [] : _ref$validations,\n formData = _ref.formData,\n elementRefs = _ref.elementRefs;\n var validationMessage = '';\n var value = getValueByPath(formData, name);\n validations.some(function (_ref2) {\n var message = _ref2.message,\n validate = _ref2.validate;\n var isValid = validate(value, formData);\n\n if (!isValid) {\n validationMessage = message;\n }\n\n return !isValid;\n });\n\n var _iterator = _createForOfIteratorHelper(elementRefs),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var elementRef = _step.value;\n\n if (!elementRef) {\n continue;\n }\n\n elementRef.setCustomValidity(validationMessage);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return validationMessage;\n}\n\nfunction handleInputChange(formState, event) {\n var target = event.target;\n var value = target.type === 'checkbox' ? target.checked : target.value;\n var name = target.name;\n formState.update(name, value);\n}\n\nfunction normalizeOptions(options, formData, extraData) {\n var _options = isFunction(options) ? options(formData, extraData) : options;\n\n if (!isArray(_options)) {\n throw new Error('Select Options should be an array');\n }\n\n return _options.map(function (option) {\n return {\n value: isUndefined(option.value) ? option : option.value,\n label: isUndefined(option.label) ? serializeValue(option) : option.label\n };\n });\n}\n\nfunction booleanOrFunction(property, formData) {\n if (!isFunction(property)) {\n return property;\n }\n\n return property(formData);\n}\n\nfunction serializeValue(value) {\n if (!isObject(value)) {\n return value.toString();\n }\n\n return JSON.stringify(value);\n}\n\nfunction getSelectedOption(value, options, trackBy) {\n var selectedValue = value;\n\n if (trackBy) {\n var selectedOption = options.find(function (option) {\n return getValueByPath(option.value, trackBy) === getValueByPath(value, trackBy);\n });\n\n if (selectedOption) {\n selectedValue = selectedOption.value;\n }\n }\n\n return serializeValue(selectedValue);\n}\n\nfunction getOptionsType(options) {\n return options.length > 0 ? _typeof(options[0].value) : undefined;\n}\n\nfunction useValueMap() {\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])({}),\n _useState2 = _slicedToArray(_useState, 2),\n valueMap = _useState2[0],\n updateValueMap = _useState2[1];\n\n var setValue = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (key, _value) {\n updateValueMap(function (prevValueMap) {\n var value = _value;\n\n if (isFunction(value)) {\n value = value(prevValueMap[key]);\n }\n\n return _objectSpread2(_objectSpread2({}, prevValueMap), {}, _defineProperty({}, key, value));\n });\n }, []);\n var getValue = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (key) {\n return valueMap[key];\n }, [valueMap]);\n return {\n setValue: setValue,\n getValue: getValue,\n getAllKeys: function getAllKeys() {\n return Object.keys(valueMap);\n },\n setValueIfUnset: function setValueIfUnset(key, value) {\n if (!getValue(key)) {\n setValue(key, value);\n }\n },\n unsetKey: function unsetKey(key) {\n updateValueMap(function (_ref) {\n var _ = _ref[key],\n prevValueMap = _objectWithoutProperties(_ref, [key].map(_toPropertyKey));\n\n return prevValueMap;\n });\n },\n reset: function reset() {\n updateValueMap({});\n }\n };\n}\n\nfunction useArrayValueMap() {\n var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n _ref2$unique = _ref2.unique,\n unique = _ref2$unique === void 0 ? true : _ref2$unique,\n _ref2$equalityCompara = _ref2.equalityComparator,\n equalityComparator = _ref2$equalityCompara === void 0 ? function (a) {\n return function (b) {\n return a === b;\n };\n } : _ref2$equalityCompara;\n\n var _useValueMap = useValueMap(),\n getAllKeys = _useValueMap.getAllKeys,\n getValue = _useValueMap.getValue,\n setValue = _useValueMap.setValue,\n reset = _useValueMap.reset;\n\n return {\n push: function push(key, value) {\n setValue(key, function (prevValues) {\n var values = prevValues;\n\n if (!values) {\n values = [];\n }\n\n if (!unique || !values.find(equalityComparator(value))) {\n values.push(value);\n }\n\n return values;\n });\n },\n unset: function unset(key, filterfn) {\n setValue(key, function (prevValues) {\n return prevValues && prevValues.filter(filterfn);\n });\n },\n get: getValue,\n getAllKeys: getAllKeys,\n reset: reset\n };\n}\n/** Detect free variable `global` from Node.js. */\n\n\nvar freeGlobal = (typeof global === \"undefined\" ? \"undefined\" : _typeof2(global)) == 'object' && global && global.Object === Object && global;\n/** Detect free variable `self`. */\n\nvar freeSelf = (typeof self === \"undefined\" ? \"undefined\" : _typeof2(self)) == 'object' && self && self.Object === Object && self;\n/** Used as a reference to the global object. */\n\nvar root = freeGlobal || freeSelf || Function('return this')();\n/** Built-in value references. */\n\nvar Symbol$1 = root.Symbol;\n/** Used for built-in method references. */\n\nvar objectProto = Object.prototype;\n/** Used to check objects for own properties. */\n\nvar hasOwnProperty = objectProto.hasOwnProperty;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar nativeObjectToString = objectProto.toString;\n/** Built-in value references. */\n\nvar symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined;\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n\n return result;\n}\n/** Used for built-in method references. */\n\n\nvar objectProto$1 = Object.prototype;\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n\nvar nativeObjectToString$1 = objectProto$1.toString;\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n\nfunction objectToString(value) {\n return nativeObjectToString$1.call(value);\n}\n/** `Object#toString` result references. */\n\n\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n/** Built-in value references. */\n\nvar symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined;\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n\n return symToStringTag$1 && symToStringTag$1 in Object(value) ? getRawTag(value) : objectToString(value);\n}\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n\n\nfunction isObjectLike(value) {\n return value != null && _typeof2(value) == 'object';\n}\n/** `Object#toString` result references. */\n\n\nvar symbolTag = '[object Symbol]';\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n\nfunction isSymbol(value) {\n return _typeof2(value) == 'symbol' || isObjectLike(value) && baseGetTag(value) == symbolTag;\n}\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n\n\nfunction isObject$1(value) {\n var type = _typeof2(value);\n\n return value != null && (type == 'object' || type == 'function');\n}\n/** Used as references for various `Number` constants. */\n\n\nvar NAN = 0 / 0;\n/** Used to match leading and trailing whitespace. */\n\nvar reTrim = /^\\s+|\\s+$/g;\n/** Used to detect bad signed hexadecimal string values. */\n\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n/** Used to detect binary string values. */\n\nvar reIsBinary = /^0b[01]+$/i;\n/** Used to detect octal string values. */\n\nvar reIsOctal = /^0o[0-7]+$/i;\n/** Built-in method references without a dependency on `root`. */\n\nvar freeParseInt = parseInt;\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n\n if (isSymbol(value)) {\n return NAN;\n }\n\n if (isObject$1(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject$1(other) ? other + '' : other;\n }\n\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;\n}\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n\n\nvar now = function now() {\n return root.Date.now();\n};\n/** Error message constants. */\n\n\nvar FUNC_ERROR_TEXT = 'Expected a function';\n/* Built-in method references for those with the same name as other `lodash` methods. */\n\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n\n wait = toNumber(wait) || 0;\n\n if (isObject$1(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time; // Start the timer for the trailing edge.\n\n timerId = setTimeout(timerExpired, wait); // Invoke the leading edge.\n\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n\n return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n }\n\n function timerExpired() {\n var time = now();\n\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n } // Restart the timer.\n\n\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n\n return result;\n }\n\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nfunction useFormState(initialState, _ref) {\n var onChange = _ref.onChange,\n transform = _ref.transform;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(initialState),\n _useState2 = _slicedToArray(_useState, 2),\n formState = _useState2[0],\n setFormState = _useState2[1];\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState4 = _slicedToArray(_useState3, 2),\n isDirty = _useState4[0],\n setIsDirty = _useState4[1];\n\n var onChangeRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(debounce(onChange, 1000));\n var transformRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(debounce(function (nextFormState, name) {\n return transform(nextFormState, name, function (state) {\n setFormState(state);\n });\n }, 500));\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n if (isDirty) {\n onChangeRef.current(formState);\n }\n }, [formState, isDirty]);\n return {\n getState: function getState() {\n return formState;\n },\n updateState: function updateState(name, value) {\n setIsDirty(true);\n setFormState(function (prevFormState) {\n var nextFormState = nextState(prevFormState, name, value);\n setTimeout(function () {\n transformRef.current(nextFormState, name);\n });\n return nextFormState;\n });\n },\n resetState: function resetState() {\n setIsDirty(false);\n setFormState(initialState);\n }\n };\n}\n\nfunction useForm(initialState, _ref2) {\n var validations = _ref2.validations,\n onChange = _ref2.onChange,\n transform = _ref2.transform;\n\n var _useFormState = useFormState(initialState, {\n onChange: onChange,\n transform: transform\n }),\n getState = _useFormState.getState,\n updateState = _useFormState.updateState,\n resetState = _useFormState.resetState;\n\n var _useState5 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState6 = _slicedToArray(_useState5, 2),\n submitAttempted = _useState6[0],\n setSubmitAttempted = _useState6[1];\n\n var _useArrayValueMap = useArrayValueMap(),\n getElementNames = _useArrayValueMap.getAllKeys,\n getElementRefs = _useArrayValueMap.get,\n registerElementRef = _useArrayValueMap.push;\n\n var formState = getState();\n return {\n register: function register(name, elementRef) {\n registerElementRef(name, elementRef);\n\n if (validations) {\n validateFormElement({\n name: name,\n formData: formState,\n validations: validations[name],\n elementRefs: [elementRef]\n });\n }\n },\n update: function update(name, value) {\n updateState(name, value);\n\n if (validations) {\n this.validateForm(nextState(formState, name, value));\n }\n },\n getFormData: function getFormData() {\n return formState;\n },\n getValue: function getValue(name) {\n return getValueByPath(formState, name);\n },\n reset: function reset() {\n resetState();\n setSubmitAttempted(false);\n },\n setSubmitedAttempted: function setSubmitedAttempted() {\n setSubmitAttempted(true);\n },\n getSubmitedAttempted: function getSubmitedAttempted() {\n return submitAttempted;\n },\n getValidationMessage: function getValidationMessage(name) {\n var elementRefs = getElementRefs(name);\n return elementRefs && elementRefs[0] ? elementRefs[0].validationMessage : '';\n },\n validateForm: function validateForm(_formData) {\n var elementNames = getElementNames();\n var isFormValid = true;\n var formData = _formData || formState;\n\n var _iterator = _createForOfIteratorHelper(elementNames),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var name = _step.value;\n var isElementValid = !validateFormElement({\n name: name,\n formData: formData,\n validations: validations[name],\n elementRefs: getElementRefs(name)\n });\n\n if (!isElementValid) {\n isFormValid = false;\n }\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return isFormValid;\n }\n };\n}\n\nfunction nextState(previousState, path, value) {\n return setValueByPath(deepClone(previousState), path, value);\n}\n\nfunction FormActions(_ref) {\n var submitLabel = _ref.submitLabel,\n cancelLabel = _ref.cancelLabel,\n onCancel = _ref.onCancel,\n isSubmiting = _ref.isSubmiting,\n customActions = _ref.customActions;\n\n if (customActions) {\n return isFunction(customActions) ? customActions(isSubmiting) : customActions;\n }\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"form-actions\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"button\", {\n type: \"submit\",\n className: \"btn btn-primary mr-1\",\n disabled: isSubmiting\n }, isFunction(submitLabel) ? submitLabel(isSubmiting) : submitLabel), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"button\", {\n type: \"button\",\n className: \"btn btn-secondary\",\n onClick: onCancel,\n disabled: isSubmiting\n }, isFunction(cancelLabel) ? cancelLabel(isSubmiting) : cancelLabel));\n}\n\nFormActions.propTypes = {\n submitLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]),\n cancelLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node]),\n onCancel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,\n isSubmiting: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n customActions: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node])\n};\n\nfunction Form(_ref) {\n var cancelLabel = _ref.cancelLabel,\n children = _ref.children,\n customValidation = _ref.customValidation,\n customActions = _ref.customActions,\n initialValues = _ref.initialValues,\n onCancel = _ref.onCancel,\n onSubmit = _ref.onSubmit,\n onChange = _ref.onChange,\n submitLabel = _ref.submitLabel,\n validations = _ref.validations,\n transform = _ref.transform;\n var formState = useForm(initialValues, {\n validations: validations,\n onChange: onChange,\n transform: transform\n });\n var formRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState2 = _slicedToArray(_useState, 2),\n isSubmiting = _useState2[0],\n setIsSubmiting = _useState2[1];\n\n function resetForm() {\n formRef.current.classList.remove('was-validated');\n formState.reset();\n }\n\n function handleSubmit(e) {\n e.preventDefault();\n formState.setSubmitedAttempted();\n\n if (customValidation && !formRef.current.checkValidity()) {\n formRef.current.classList.add('was-validated');\n return;\n }\n\n setIsSubmiting(true);\n var submitResponse = onSubmit(formState.getFormData(), resetForm);\n var submitPromise = Promise.resolve();\n\n if (submitResponse && submitResponse.then) {\n submitPromise = submitResponse.then(function () {\n resetForm();\n });\n }\n\n submitPromise[\"finally\"](function () {\n setIsSubmiting(false);\n });\n }\n\n function handleCancel() {\n //TODO: improve cancel options\n onCancel(resetForm);\n }\n\n var formProps = {\n ref: formRef,\n onSubmit: handleSubmit\n };\n\n if (customValidation) {\n formProps.noValidate = true;\n }\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"form\", formProps, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormContext.Provider, {\n value: formState\n }, children), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormActions, {\n submitLabel: submitLabel,\n cancelLabel: cancelLabel,\n onCancel: handleCancel,\n isSubmiting: isSubmiting,\n customActions: customActions\n }));\n}\n\nForm.defaultProps = {\n cancelLabel: 'Cancel',\n customValidation: false,\n submitLabel: 'Submit',\n onChange: function onChange() {},\n transform: function transform(data) {\n return data;\n }\n};\nForm.propTypes = {\n cancelLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node)]),\n customActions: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node)]),\n customValidation: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n initialValues: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object,\n onCancel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n onChange: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n onSubmit: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,\n submitLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n transform: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n validations: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object\n};\n\nfunction Dropdown(_ref) {\n var children = _ref.children,\n items = _ref.items,\n onSelect = _ref.onSelect,\n isOpen = _ref.isOpen,\n onTouchStart = _ref.onTouchStart,\n onMouseEnter = _ref.onMouseEnter,\n onMouseLeave = _ref.onMouseLeave,\n template = _ref.template,\n className = _ref.className;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", _extends({\n className: formatClasses(['dropdown', className, isOpen && 'show'])\n }, {\n onTouchStart: onTouchStart,\n onMouseEnter: onMouseEnter,\n onMouseLeave: onMouseLeave\n }), children, items.length > 0 && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: formatClasses(['dropdown-menu', isOpen && 'show']) // aria-labelledby=\"dropdownMenuButton\"\n ,\n style: {\n maxHeight: '200px',\n overflowY: 'auto'\n }\n }, items.map(function (_ref2, index) {\n var label = _ref2.label,\n value = _ref2.value,\n isDisabled = _ref2.isDisabled;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n key: index,\n href: \"#\",\n className: formatClasses(['dropdown-item', isDisabled && 'disabled']),\n onClick: safeClick(onSelect, {\n value: value,\n index: index,\n label: label\n })\n }, template(label));\n })));\n}\n\nDropdown.defaultProps = {\n isOpen: false,\n template: function template(v) {\n return v;\n }\n};\nDropdown.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n isOpen: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n items: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object),\n onMouseEnter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n onMouseLeave: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n onTouchStart: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n template: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string\n};\n\nfunction toDatetimeLocal(value) {\n var date = value;\n\n if (isDateISOString(date)) {\n date = new Date(date);\n }\n\n if (!isDate(date)) {\n throw new Error('toDatetimeLocal only accepts date objects and ISO date strings');\n }\n\n var YYYY = date.getFullYear().toString();\n var MM = (date.getMonth() + 1).toString().padStart(2, '0');\n var DD = date.getDate().toString().padStart(2, '0');\n var hh = date.getHours().toString().padStart(2, '0');\n var mm = date.getMinutes().toString().padStart(2, '0');\n return \"\".concat(YYYY, \"-\").concat(MM, \"-\").concat(DD, \"T\").concat(hh, \":\").concat(mm);\n}\n\nfunction fromDatetimeLocal(value) {\n return new Date(Date.parse(value));\n}\n\nfunction useFormControl(name, type) {\n var formState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"])(FormContext);\n\n function setValue(value) {\n formState.update(name, value);\n }\n\n var register = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (ref) {\n formState.register(name, ref);\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [name]);\n return {\n getValue: function getValue() {\n return encode(formState.getValue(name), type);\n },\n setValue: setValue,\n handleOnChange: function handleOnChange(_ref, _type) {\n var target = _ref.target;\n var value = getTargetValue(target);\n var decodedValue = decode(value, type || _type);\n setValue(decodedValue);\n },\n register: register,\n getFormData: function getFormData() {\n return formState.getFormData();\n },\n isValid: function isValid() {\n return formState.getValidationMessage(name) === '';\n },\n getFormSubmitedAttempted: function getFormSubmitedAttempted() {\n return formState.getSubmitedAttempted();\n }\n };\n}\n\nfunction getEmptyValue(type) {\n switch (type) {\n case 'boolean':\n return false;\n\n case 'array':\n return [];\n\n default:\n return '';\n }\n}\n\nfunction encode(value, type) {\n if (isEmptyStringLike(value)) {\n return getEmptyValue(type);\n }\n\n if (type === 'datetime-local') {\n return toDatetimeLocal(value);\n }\n\n if (type === 'number' && isNaN(value)) {\n return;\n }\n\n return value;\n}\n\nfunction decode(value, type) {\n if (type === 'number') {\n return parseFloat(value);\n }\n\n if (type === 'boolean') {\n return isBoolean(value) ? value : value === 'true';\n }\n\n return value;\n}\n\nfunction getTargetValue(target) {\n var value = target.type === 'checkbox' ? target.checked : target.value;\n\n if (target.type === 'number') {\n value = target.valueAsNumber;\n\n if (isNaN(value)) {\n value = undefined;\n }\n }\n\n if (target.type === 'datetime-local') {\n value = fromDatetimeLocal(target.value);\n }\n\n if (target.type === 'select-one') {\n if (value && ['{', '['].includes(value[0])) {\n try {\n value = JSON.parse(value);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n }\n }\n }\n\n return value;\n}\n\nfunction FormAutocomplete(_ref) {\n var onSearch = _ref.onSearch,\n options = _ref.options,\n _required = _ref.required,\n id = _ref.id,\n placeholder = _ref.placeholder,\n name = _ref.name,\n openOnFocus = _ref.openOnFocus,\n template = _ref.template,\n filter = _ref.filter,\n _disabled = _ref.disabled;\n\n var _useFormControl = useFormControl(name),\n getValue = _useFormControl.getValue,\n setValue = _useFormControl.setValue,\n register = _useFormControl.register,\n isValid = _useFormControl.isValid,\n getFormSubmitedAttempted = _useFormControl.getFormSubmitedAttempted,\n getFormData = _useFormControl.getFormData;\n\n var value = getValue();\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(''),\n _useState2 = _slicedToArray(_useState, 2),\n searchValue = _useState2[0],\n setSearchValue = _useState2[1];\n\n var items = normalizeOptions(options, getFormData(), searchValue);\n\n var _selectedItem = items.find(function (item) {\n return item.value === value;\n });\n\n var _useState3 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(_selectedItem),\n _useState4 = _slicedToArray(_useState3, 2),\n selectedItem = _useState4[0],\n setSelectedItem = _useState4[1];\n\n var _useOpenState = useOpenState(),\n isOpen = _useOpenState.isOpen,\n open = _useOpenState.open,\n close = _useOpenState.close;\n\n var _useState5 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState6 = _slicedToArray(_useState5, 2),\n ignoreBlur = _useState6[0],\n setIgnoreBlur = _useState6[1];\n\n var _useState7 = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(false),\n _useState8 = _slicedToArray(_useState7, 2),\n isFocused = _useState8[0],\n setFocus = _useState8[1];\n\n var searchInputRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])(null);\n var registerRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(register, [register]);\n var disabled = booleanOrFunction(_disabled, getFormData());\n var required = booleanOrFunction(_required, getFormData());\n var controlFeedback = getFormSubmitedAttempted() ? isValid() ? 'is-valid' : 'is-invalid' : '';\n var updateSearchInputValidation = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function () {\n searchInputRef.current.setCustomValidity(controlFeedback === 'is-invalid' ? 'invalid' : '');\n }, [controlFeedback]);\n var clearSearchValue = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function () {\n if (isEmptyLike(value) && !isFocused) {\n setSearchValue('');\n setSelectedItem(null);\n }\n }, [isFocused, value]);\n var onSearchInputType = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (_, nextSearchValue) {\n setSearchValue(nextSearchValue);\n onSearch(nextSearchValue);\n open();\n\n if (nextSearchValue && value) {\n setValue(null);\n }\n }, [onSearch, open, setValue, value]);\n var inputHandleChange = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useMemo\"])(function () {\n return handleInputChange.bind(null, {\n update: onSearchInputType\n });\n }, [onSearchInputType]);\n var onSearchInputFocus = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function () {\n if (openOnFocus) {\n setTimeout(function () {\n open();\n }, 100);\n }\n }, [open, openOnFocus]);\n var onSearchInputBlur = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function () {\n if (isEmptyLike(searchValue) && value) {\n setValue('');\n setSelectedItem(null);\n updateSearchInputValidation();\n }\n\n if (ignoreBlur) {\n searchInputRef.current.focus();\n } else {\n close();\n setFocus(false);\n }\n }, [close, ignoreBlur, searchValue, setValue, updateSearchInputValidation, value]);\n var enableSearchInput = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function () {\n if (disabled) {\n return;\n }\n\n setFocus(true);\n setTimeout(function () {\n searchInputRef.current.focus();\n });\n }, [disabled]);\n var onSelectItem = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (_ref2) {\n var value = _ref2.value,\n label = _ref2.label;\n setValue(value);\n setSearchValue(label);\n setSelectedItem({\n value: value,\n label: label\n });\n setIgnoreBlur(false);\n setTimeout(function () {\n setFocus(false);\n close();\n }, 60);\n }, [close, setValue]);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(updateSearchInputValidation, [updateSearchInputValidation]);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(clearSearchValue, [clearSearchValue]);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", _extends({\n placeholder: placeholder,\n disabled: disabled\n }, {\n type: \"search\",\n ref: searchInputRef,\n className: formatClasses(['form-control form-autocomplete-search', isFocused ? '' : 'd-none', controlFeedback]),\n onChange: inputHandleChange,\n onFocus: onSearchInputFocus,\n onBlur: onSearchInputBlur,\n value: searchValue,\n role: \"combobox\",\n \"aria-autocomplete\": \"list\",\n \"aria-expanded\": \"false\",\n autoComplete: \"off\"\n })), !isFocused && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: formatClasses(['form-control form-autocomplete-selected', controlFeedback]),\n disabled: disabled,\n onClick: enableSearchInput\n }, selectedItem ? template ? template(selectedItem.label) : selectedItem.label : placeholder), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", _extends({\n type: \"text\",\n className: formatClasses(['form-control', 'd-none'])\n }, {\n name: name,\n required: required,\n id: id\n }, {\n onChange: function onChange() {},\n value: getValue(),\n ref: registerRef\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Dropdown, {\n className: \"form-autocomplete-dropdown\",\n isOpen: isOpen(),\n items: items.filter(filter(searchValue)),\n onSelect: onSelectItem,\n template: template,\n onClick: function onClick(e) {\n return e.stopPropation();\n },\n onTouchStart: function onTouchStart() {\n return setIgnoreBlur(true);\n },\n onMouseEnter: function onMouseEnter() {\n return setIgnoreBlur(true);\n },\n onMouseLeave: function onMouseLeave() {\n return setIgnoreBlur(false);\n }\n }));\n}\n\nFormAutocomplete.defaultProps = {\n openOnFocus: false,\n onSearch: function onSearch() {},\n filter: function filter(_searchValue) {\n return function (item) {\n var itemValue = JSON.stringify(item.label).toLowerCase();\n\n var searchValue = _searchValue.toLowerCase();\n\n return itemValue.includes(searchValue);\n };\n },\n template: function template(x) {\n return x;\n }\n};\nFormAutocomplete.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n filter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n onSearch: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n openOnFocus: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n options: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object]))]),\n placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n template: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n type: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string\n};\n\nfunction FormCheckbox(_ref) {\n var id = _ref.id,\n name = _ref.name,\n _required = _ref.required,\n valueLabel = _ref.valueLabel,\n _disabled = _ref.disabled;\n\n var _useFormControl = useFormControl(name, 'boolean'),\n getValue = _useFormControl.getValue,\n handleOnChange = _useFormControl.handleOnChange,\n register = _useFormControl.register,\n getFormData = _useFormControl.getFormData;\n\n var registerRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(register, [register]);\n var disabled = booleanOrFunction(_disabled, getFormData());\n var required = booleanOrFunction(_required, getFormData());\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"custom-control custom-checkbox\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", _extends({\n required: required,\n name: name,\n id: id,\n disabled: disabled\n }, {\n type: \"checkbox\",\n className: \"custom-control-input\",\n onChange: handleOnChange,\n checked: getValue(),\n ref: registerRef\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n className: \"custom-control-label\",\n htmlFor: id\n }, valueLabel));\n}\n\nFormCheckbox.propTypes = {\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n valueLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func])\n};\n\nfunction FormInput(_ref) {\n var type = _ref.type,\n name = _ref.name,\n _required = _ref.required,\n _disabled = _ref.disabled,\n _attrs = _objectWithoutProperties(_ref, [\"type\", \"name\", \"required\", \"disabled\"]);\n\n var _useFormControl = useFormControl(name, type),\n getValue = _useFormControl.getValue,\n handleOnChange = _useFormControl.handleOnChange,\n register = _useFormControl.register,\n getFormData = _useFormControl.getFormData;\n\n var registerRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(register, [register]);\n var disabled = booleanOrFunction(_disabled, getFormData());\n var required = booleanOrFunction(_required, getFormData());\n\n var attrs = _objectSpread2(_objectSpread2({}, _attrs), {}, {\n disabled: disabled,\n name: name,\n required: required,\n type: type\n });\n\n if (type === 'datetime-local') {\n attrs.defaultValue = getValue();\n } else {\n attrs.value = getValue();\n }\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", _extends({}, attrs, {\n className: \"form-control\",\n onChange: handleOnChange,\n ref: registerRef\n }));\n}\n\nFormInput.defaultProps = {\n type: 'text'\n};\nFormInput.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n max: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n maxLength: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n min: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n minLength: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n pattern: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n readOnly: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n step: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n type: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string\n};\n\nfunction FormLabel(_ref) {\n var id = _ref.id,\n label = _ref.label,\n _required = _ref.required;\n\n var required = isBoolean(_required) && _required;\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n htmlFor: id\n }, label, required && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"text-danger\"\n }, \" *\"));\n}\n\nFormLabel.propTypes = {\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func])\n};\n\nfunction FormRadio(_ref) {\n var id = _ref.id,\n name = _ref.name,\n _required = _ref.required,\n checkedValue = _ref.checkedValue,\n valueLabel = _ref.valueLabel,\n inline = _ref.inline,\n _disabled = _ref.disabled;\n\n var _useFormControl = useFormControl(name, 'boolean'),\n getValue = _useFormControl.getValue,\n handleOnChange = _useFormControl.handleOnChange,\n register = _useFormControl.register,\n getFormData = _useFormControl.getFormData;\n\n var registerRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(register, [register]);\n var value = getValue();\n var disabled = booleanOrFunction(_disabled, getFormData());\n var required = booleanOrFunction(_required, getFormData());\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: formatClasses([\"custom-control\", \"custom-radio\", inline && 'custom-control-inline'])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", _extends({\n required: required,\n name: name,\n id: id,\n disabled: disabled\n }, {\n type: \"radio\",\n className: \"custom-control-input\",\n onChange: handleOnChange,\n checked: value === checkedValue,\n value: checkedValue,\n ref: registerRef\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n className: \"custom-control-label\",\n htmlFor: id\n }, valueLabel));\n}\n\nFormRadio.defaultProps = {\n inline: false\n};\nFormRadio.propTypes = {\n checkedValue: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any,\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n inline: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n valueLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n};\n\nfunction FormSelect(_ref) {\n var name = _ref.name,\n options = _ref.options,\n _required = _ref.required,\n placeholder = _ref.placeholder,\n trackBy = _ref.trackBy,\n _disabled = _ref.disabled,\n _attrs = _objectWithoutProperties(_ref, [\"name\", \"options\", \"required\", \"placeholder\", \"trackBy\", \"disabled\"]);\n\n var _useFormControl = useFormControl(name),\n getFormData = _useFormControl.getFormData,\n getValue = _useFormControl.getValue,\n handleOnChange = _useFormControl.handleOnChange,\n register = _useFormControl.register;\n\n var registerRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(register, [register]);\n var value = getValue();\n var normalizedOptions = normalizeOptions(options, getFormData());\n var disabled = booleanOrFunction(_disabled, getFormData());\n var required = booleanOrFunction(_required, getFormData());\n\n var attrs = _objectSpread2(_objectSpread2({}, _attrs), {}, {\n disabled: disabled,\n name: name,\n required: required\n });\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"select\", _extends({}, attrs, {\n className: \"custom-select\",\n onChange: function onChange(e) {\n return handleOnChange(e, getOptionsType(normalizedOptions));\n },\n value: getSelectedOption(value, normalizedOptions, trackBy),\n ref: registerRef\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n value: \"\"\n }, placeholder), renderOptions(normalizedOptions, trackBy));\n}\n\nFormSelect.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n options: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({\n value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any.isRequired,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired\n })]))]),\n placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n trackBy: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string\n};\n\nfunction renderOptions(options, trackBy) {\n return options.map(function (_ref2, index) {\n var value = _ref2.value,\n label = _ref2.label;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"option\", {\n key: index,\n name: trackBy,\n value: serializeValue(value)\n }, label);\n });\n}\n\nfunction FormSwitch(_ref) {\n var id = _ref.id,\n name = _ref.name,\n _required = _ref.required,\n trueLabel = _ref.trueLabel,\n falseLabel = _ref.falseLabel,\n _disabled = _ref.disabled;\n\n var _useFormControl = useFormControl(name, 'boolean'),\n getValue = _useFormControl.getValue,\n handleOnChange = _useFormControl.handleOnChange,\n register = _useFormControl.register,\n getFormData = _useFormControl.getFormData;\n\n var registerRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(register, [register]);\n var value = getValue();\n var disabled = booleanOrFunction(_disabled, getFormData());\n var required = booleanOrFunction(_required, getFormData());\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"custom-control custom-switch\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"input\", _extends({\n required: required,\n name: name,\n id: id,\n disabled: disabled\n }, {\n type: \"checkbox\",\n className: \"custom-control-input\",\n onChange: handleOnChange,\n checked: value,\n ref: registerRef\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"label\", {\n className: \"custom-control-label\",\n htmlFor: id\n }, (trueLabel || falseLabel) && (value ? trueLabel : falseLabel)));\n}\n\nFormSwitch.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n falseLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n trueLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n};\n\nfunction FormTextarea(_ref) {\n var name = _ref.name,\n _required = _ref.required,\n _disabled = _ref.disabled,\n _attrs = _objectWithoutProperties(_ref, [\"name\", \"required\", \"disabled\"]);\n\n var _useFormControl = useFormControl(name),\n getValue = _useFormControl.getValue,\n handleOnChange = _useFormControl.handleOnChange,\n register = _useFormControl.register,\n getFormData = _useFormControl.getFormData;\n\n var registerRef = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(register, [register]);\n var disabled = booleanOrFunction(_disabled, getFormData());\n var required = booleanOrFunction(_required, getFormData());\n\n var attrs = _objectSpread2(_objectSpread2({}, _attrs), {}, {\n disabled: disabled,\n name: name,\n required: required\n });\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"textarea\", _extends({}, attrs, {\n className: \"form-control\",\n onChange: handleOnChange,\n value: getValue(),\n ref: registerRef\n }));\n}\n\nFormTextarea.defaultProps = {\n rows: 5\n};\nFormTextarea.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n readOnly: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n rows: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string])\n};\n\nfunction FormValidationFeedback(_ref) {\n var name = _ref.name,\n mockInvalidSibling = _ref.mockInvalidSibling;\n var formState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"])(FormContext);\n var validationMessage = formState.getValidationMessage(name);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, mockInvalidSibling && formState.getSubmitedAttempted() && validationMessage && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"is-invalid\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: validationMessage ? 'invalid-feedback' : 'valid-feedback'\n }, validationMessage || /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", null, \"\\xA0\")));\n}\n\nFormValidationFeedback.defaultProps = {\n mockInvalidSibling: false\n};\nFormValidationFeedback.propTypes = {\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n mockInvalidSibling: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool\n};\n\nfunction FormHelp(_ref) {\n var id = _ref.id,\n inline = _ref.inline,\n message = _ref.message;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"small\", {\n id: \"\".concat(id, \"-help\"),\n className: formatClasses(['text-muted', inline ? 'ms-2' : 'form-text'])\n }, message);\n}\n\nFormHelp.defaultProps = {\n inline: false\n};\nFormHelp.propTypes = {\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n message: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n inline: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool\n};\n\nfunction FormGroup(_ref) {\n var children = _ref.children,\n name = _ref.name,\n feedback = _ref.feedback,\n mockInvalidSibling = _ref.mockInvalidSibling,\n help = _ref.help,\n props = _objectWithoutProperties(_ref, [\"children\", \"name\", \"feedback\", \"mockInvalidSibling\", \"help\"]);\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"form-group\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormLabel, props), children, feedback && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormValidationFeedback, {\n mockInvalidSibling: mockInvalidSibling,\n name: name\n }), help && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormHelp, {\n message: help\n }));\n}\n\nFormGroup.defaultProps = {\n feedback: true,\n mockInvalidSibling: false\n};\nFormGroup.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node)]),\n feedback: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n help: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n mockInvalidSibling: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired\n};\n\nfunction FormGroupAutocomplete(props) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormGroup, props, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormAutocomplete, props));\n}\n\nFormGroupAutocomplete.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n filter: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n help: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n onSearch: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n openOnFocus: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n options: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object]))]),\n placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n template: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n type: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string\n};\n\nfunction FormGroupCheckbox(props) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormGroup, _extends({\n mockInvalidSibling: true\n }, props), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormCheckbox, props));\n}\n\nFormGroupCheckbox.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n falseLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n help: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n trueLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n};\n\nfunction FormGroupInput(props) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormGroup, props, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormInput, props));\n}\n\nFormGroupInput.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n help: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n max: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n maxLength: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n min: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n minLength: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n pattern: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n readOnly: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n step: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n type: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string\n};\n\nfunction FormGroupRadio(_ref2) {\n var options = _ref2.options,\n id = _ref2.id,\n props = _objectWithoutProperties(_ref2, [\"options\", \"id\"]);\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormGroup, _extends({\n mockInvalidSibling: true\n }, props), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", null, options.map(function (option, index) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormRadio, _extends({\n key: index\n }, props, {\n checkedValue: option.value,\n valueLabel: option.label,\n id: \"\".concat(id, \"-\").concat(index)\n }));\n })));\n}\n\nFormGroupRadio.defaultProps = {\n inline: true\n};\nFormGroupRadio.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n help: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n inline: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n options: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({\n value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any.isRequired,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired\n })),\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func])\n};\n\nfunction FormGroupSelect(props) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormGroup, props, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormSelect, props));\n}\n\nFormGroupSelect.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n help: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n options: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({\n value: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any.isRequired,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired\n })]))]),\n placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n trackBy: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string\n};\n\nfunction FormGroupSwitch(props) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormGroup, _extends({\n mockInvalidSibling: true\n }, props), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormSwitch, props));\n}\n\nFormGroupSwitch.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n falseLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n help: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n trueLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n};\n\nfunction FormGroupTextarea(props) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormGroup, props, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(FormTextarea, props));\n}\n\nFormGroupTextarea.propTypes = {\n disabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n help: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n label: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n placeholder: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n readOnly: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n required: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func]),\n rows: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string])\n};\n\nfunction useFormData() {\n var formState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"])(FormContext);\n return formState.getFormData();\n}\n\nfunction ListGroupItem(_ref) {\n var index = _ref.index,\n isActive = _ref.isActive,\n isDisabled = _ref.isDisabled,\n item = _ref.item,\n linked = _ref.linked,\n onSelect = _ref.onSelect,\n children = _ref.children;\n var classes = formatClasses(['list-group-item', isActive && 'active', isDisabled && 'disabled', linked && 'list-group-item-action']);\n var onClick = safeClick(onSelect, index, item);\n\n if (linked) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n href: \"#\",\n className: classes,\n onClick: onClick\n }, children);\n }\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n className: classes,\n onClick: onClick\n }, children);\n}\n\nListGroupItem.defaultProps = {\n isActive: false\n};\nListGroupItem.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node.isRequired,\n index: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired,\n isActive: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n isDisabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n item: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired,\n linked: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool.isRequired,\n onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func\n};\n\nfunction ListGroup(_ref) {\n var items = _ref.items,\n active = _ref.active,\n linked = _ref.linked,\n bordered = _ref.bordered,\n horizontal = _ref.horizontal,\n template = _ref.template,\n isDisabled = _ref.isDisabled,\n onSelect = _ref.onSelect;\n var classes = formatClasses(['list-group', !bordered && 'list-group-flush', horizontal && 'list-group-horizontal']);\n var content = items.map(function (item, index) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(ListGroupItem, {\n key: index,\n index: index,\n isActive: active === index,\n isDisabled: isDisabled(item),\n item: item,\n linked: linked,\n onSelect: onSelect\n }, template(item, index));\n });\n\n if (linked) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: classes\n }, content);\n }\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"ul\", {\n className: classes\n }, content);\n}\n\nListGroup.defaultProps = {\n bordered: true,\n horizontal: false,\n isDisabled: function isDisabled() {},\n linked: false,\n onSelect: function onSelect() {}\n};\nListGroup.propTypes = {\n active: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n bordered: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n horizontal: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n isDisabled: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n items: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.array.isRequired,\n linked: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n template: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired\n};\n\nfunction useSelectedItem(defaultIndex, collectionSize) {\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(defaultIndex < collectionSize ? defaultIndex : 0),\n _useState2 = _slicedToArray(_useState, 2),\n selectedItem = _useState2[0],\n setSelectedItem = _useState2[1];\n\n return {\n getSelected: function getSelected() {\n return selectedItem;\n },\n select: function select(index) {\n if (index >= collectionSize) {\n throw new Error('Invalid selected item');\n }\n\n setSelectedItem(index);\n }\n };\n}\n\nfunction StatefulListGroup(_ref) {\n var initialItem = _ref.initialItem,\n items = _ref.items,\n _ = _ref.active,\n props = _objectWithoutProperties(_ref, [\"initialItem\", \"items\", \"active\"]);\n\n var _useSelectedItem = useSelectedItem(initialItem, items.length),\n getSelected = _useSelectedItem.getSelected,\n select = _useSelectedItem.select;\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(ListGroup, _extends({\n items: items,\n active: getSelected(),\n onSelect: select\n }, props));\n}\n\nStatefulListGroup.propTypes = {\n active: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.any,\n items: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object),\n initialItem: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number\n};\n\nfunction Pagination(_ref) {\n var actualPage = _ref.actualPage,\n ariaLabel = _ref.ariaLabel,\n firstLabel = _ref.firstLabel,\n lastLabel = _ref.lastLabel,\n lastPage = _ref.lastPage,\n maxPageWindow = _ref.maxPageWindow,\n nextLabel = _ref.nextLabel,\n onSelect = _ref.onSelect,\n previousLabel = _ref.previousLabel;\n var pageWindow = Math.min(maxPageWindow, lastPage);\n var centerOfPageWindow = Math.max(Math.floor(pageWindow / 2), 2);\n var lastStartPage = Math.max(lastPage - pageWindow + 1, 1);\n var startPage = Math.max(Math.min(actualPage - centerOfPageWindow, lastStartPage), 1);\n var showPreviousNavigation = startPage > 1;\n var pages = Array.from({\n length: pageWindow\n }, function (v, i) {\n return startPage + i;\n });\n\n var select = function select(page) {\n return safeClick(onSelect, page);\n };\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"nav\", {\n \"aria-label\": ariaLabel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"ul\", {\n className: \"pagination\"\n }, showPreviousNavigation && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n className: \"page-item\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n className: \"page-link\",\n href: \"\",\n onClick: select(1),\n \"aria-label\": firstLabel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n \"aria-hidden\": \"true\"\n }, \"\\xAB\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"sr-only\"\n }, firstLabel))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n className: \"page-item\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n className: \"page-link\",\n href: \"\",\n onClick: select(actualPage - 1),\n \"aria-label\": previousLabel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n \"aria-hidden\": \"true\"\n }, \"\\u2039\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"sr-only\"\n }, previousLabel)))), pages.map(function (page) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n key: \"pages-\".concat(page),\n className: formatClasses(['page-item', actualPage === page && 'active'])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n className: \"page-link\",\n href: \"\",\n onClick: select(page)\n }, page));\n }), startPage < lastStartPage && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n className: \"page-item\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n className: \"page-link\",\n href: \"\",\n onClick: select(actualPage + 1),\n \"aria-label\": nextLabel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n \"aria-hidden\": \"true\"\n }, \"\\u203A\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"sr-only\"\n }, nextLabel))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n className: \"page-item\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n className: \"page-link\",\n href: \"\",\n onClick: select(lastPage),\n \"aria-label\": lastLabel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n \"aria-hidden\": \"true\"\n }, \"\\xBB\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n className: \"sr-only\"\n }, lastLabel))))));\n}\n\nPagination.defaultProps = {\n actualPage: 1,\n ariaLabel: 'Page navigation',\n firstLabel: 'First',\n lastLabel: 'Last',\n maxPageWindow: 5,\n nextLabel: 'Next',\n previousLabel: 'Previous'\n};\nPagination.propTypes = {\n actualPage: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n ariaLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n firstLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n lastLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n lastPage: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n maxPageWindow: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n nextLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired,\n previousLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string\n};\n\nfunction normalizeColumns(columns) {\n return columns.map(function (column) {\n if (!isString(column)) {\n return column;\n }\n\n return {\n attribute: column,\n label: column\n };\n });\n}\n\nfunction getColumnClass(_ref) {\n var align = _ref.align;\n return formatClasses([align === 'center' ? 'text-center' : align === 'right' ? 'text-right' : '']);\n}\n\nfunction TableHead(_ref) {\n var columns = _ref.columns,\n hasActions = _ref.hasActions,\n actionLabel = _ref.actionLabel,\n columnHeaderFormat = _ref.columnHeaderFormat;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"thead\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"tr\", null, columns.map(function (column, columnIndex) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"th\", {\n key: columnIndex,\n className: getColumnClass(column)\n }, columnHeaderFormat(column.label, column.attribute));\n }), hasActions && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"th\", {\n className: \"text-center\"\n }, actionLabel)));\n}\n\nTableHead.propTypes = {\n actionLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n hasActions: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n columns: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object])),\n columnHeaderFormat: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func.isRequired\n};\n\nfunction TableActions(_ref) {\n var doc = _ref.doc,\n docIndex = _ref.docIndex,\n actions = _ref.actions;\n\n if (!actions) {\n return null;\n }\n\n var normalizedActions = normalizeAction(actions, doc, docIndex);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", {\n className: \"text-center\"\n }, normalizedActions.map(function (action, actionIndex) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n key: actionIndex,\n className: actionIndex > 0 ? 'ms-2' : ''\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(TableAction, {\n doc: doc,\n docIndex: docIndex,\n action: action\n }));\n }));\n}\n\nTableActions.propTypes = {\n doc: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired,\n docIndex: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired,\n actions: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object)])\n};\n\nfunction TableAction(_ref2) {\n var doc = _ref2.doc,\n docIndex = _ref2.docIndex,\n action = _ref2.action;\n\n if (isFunction(action)) {\n return action(doc, docIndex) || null;\n }\n\n if (action.onClick || action.link) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", _extends({\n title: action.title\n }, getActionProps(action, doc, docIndex)), action.content);\n }\n\n return action.content;\n}\n\nTableAction.propTypes = {\n doc: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object.isRequired,\n docIndex: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired,\n action: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object]).isRequired\n};\n\nfunction getActionProps(action, doc, docIndex) {\n var props = {};\n\n if (action.onClick) {\n props.href = '';\n props.onClick = safeClick(action.onClick, doc, docIndex);\n } else if (action.link) {\n props.onClick = stopPropagation;\n props.href = action.link(doc, docIndex);\n }\n\n return props;\n}\n\nfunction normalizeAction(actions, doc, docIndex) {\n if (isFunction(actions)) {\n return actions(doc, docIndex);\n }\n\n return actions;\n}\n\nfunction TableBody(_ref) {\n var columns = _ref.columns,\n docs = _ref.docs,\n rowClass = _ref.rowClass,\n actions = _ref.actions,\n onRowClick = _ref.onRowClick;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"tbody\", null, docs.map(function (doc, docIndex) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"tr\", {\n key: docIndex,\n className: rowClass(doc),\n role: \"button\",\n onClick: safeClick(onRowClick, doc, docIndex)\n }, columns.map(function (column, columnIndex) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"td\", {\n key: columnIndex,\n className: getColumnClass(column)\n }, getColumnValue(doc, column, docIndex));\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(TableActions, {\n doc: doc,\n docIndex: docIndex,\n actions: actions\n }));\n }));\n}\n\nTableBody.propTypes = {\n actions: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object)]),\n columns: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object])),\n docs: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object),\n rowClass: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n onRowClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func\n};\n\nfunction getColumnValue(doc, column, docIndex) {\n var rawValue = getValueByPath(doc, column.attribute);\n\n if (!column.format) {\n return rawValue;\n }\n\n return column.format(rawValue, doc, docIndex);\n}\n\nfunction Table(_ref) {\n var docs = _ref.docs,\n columns = _ref.columns,\n striped = _ref.striped,\n bordered = _ref.bordered,\n hover = _ref.hover,\n small = _ref.small,\n dark = _ref.dark,\n rowClass = _ref.rowClass,\n caption = _ref.caption,\n onRowClick = _ref.onRowClick,\n actions = _ref.actions,\n actionLabel = _ref.actionLabel,\n columnHeaderFormat = _ref.columnHeaderFormat;\n var normalizedColumns = normalizeColumns(columns);\n var tableClasses = formatClasses(['table', striped && 'table-striped', bordered && 'table-bordered', hover && 'table-hover', small && 'table-sm', dark && 'table-dark']);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"table-responsive\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"table\", {\n className: tableClasses\n }, caption && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"caption\", null, caption), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(TableHead, _extends({\n actionLabel: actionLabel,\n columnHeaderFormat: columnHeaderFormat,\n hasActions: Boolean(actions)\n }, {\n columns: normalizedColumns\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(TableBody, _extends({\n docs: docs,\n rowClass: rowClass,\n actions: actions,\n onRowClick: onRowClick\n }, {\n columns: normalizedColumns\n }))));\n}\n\nTable.defaultProps = {\n striped: true,\n bordered: false,\n hover: true,\n small: true,\n dark: false,\n actionLabel: 'Actions',\n rowClass: function rowClass() {\n return '';\n },\n onRowClick: function onRowClick() {},\n columnHeaderFormat: function columnHeaderFormat(label) {\n return label;\n }\n};\nTable.propTypes = {\n actionLabel: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\n actions: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object)]),\n bordered: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n caption: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n columnHeaderFormat: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n columns: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object])),\n dark: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n docs: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object),\n hover: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n onRowClick: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n rowClass: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n small: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n striped: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool\n};\n\nfunction TabHeader(_ref) {\n var index = _ref.index,\n isActive = _ref.isActive,\n title = _ref.title,\n onSelect = _ref.onSelect;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"li\", {\n className: \"nav-item\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"a\", {\n className: formatClasses(['nav-link', isActive && 'active']) // id=\"home-tab\"\n ,\n \"data-toggle\": \"tab\",\n href: \"\" // href=\"#home\"\n ,\n onClick: safeClick(onSelect, index),\n role: \"tab\" // aria-controls=\"home\"\n ,\n \"aria-selected\": isActive\n }, title));\n}\n\nTabHeader.propTypes = {\n index: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n isActive: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func\n};\n\nfunction TabContent(_ref) {\n var isActive = _ref.isActive,\n content = _ref.content;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: formatClasses(['tab-pane fade', isActive && 'show active']) // id=\"home\"\n ,\n role: \"tabpanel\" // aria-labelledby=\"home-tab\"\n\n }, content);\n}\n\nTabContent.propTypes = {\n isActive: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n content: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n};\n\nfunction Tabs(_ref) {\n var vertical = _ref.vertical,\n tabs = _ref.tabs,\n activeTab = _ref.activeTab,\n onlyRenderActiveTab = _ref.onlyRenderActiveTab,\n bordered = _ref.bordered,\n onSelect = _ref.onSelect;\n\n if (activeTab >= tabs.length) {\n // eslint-disable-next-line no-console\n console.error(\"Invalid tab selected: \".concat(activeTab, \". The first tab will be selected instead.\"));\n activeTab = 0;\n }\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: formatClasses(['custom-tabs-container', vertical && 'd-flex'])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"tabs-navigation\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"ul\", {\n className: formatClasses(['nav', vertical ? 'nav-pills flex-column' : 'nav-tabs']),\n id: \"myTab\",\n role: \"tablist\"\n }, tabs.map(function (tab, tabIndex) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(TabHeader, {\n key: tabIndex,\n index: tabIndex,\n isActive: tabIndex === activeTab,\n title: tab.title,\n onSelect: onSelect\n });\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: formatClasses(['tab-content', vertical ? 'flex-fill ms-3' : bordered ? 'border-left border-right border-bottom p-2' : 'py-2']) // id=\"myTabContent\"\n\n }, onlyRenderActiveTab ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(TabContent, {\n isActive: true,\n content: tabs[activeTab] && tabs[activeTab].content\n }) : tabs.map(function (tab, tabIndex) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(TabContent, {\n key: tabIndex,\n isActive: tabIndex === activeTab,\n content: tab.content\n });\n })));\n}\n\nTabs.defaultProps = {\n activeTab: 0,\n bordered: false,\n onlyRenderActiveTab: false,\n onSelect: function onSelect() {},\n vertical: false\n};\nTabs.propTypes = {\n activeTab: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n bordered: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n onlyRenderActiveTab: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n tabs: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({\n title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n content: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n })).isRequired,\n vertical: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool\n};\n\nfunction StatefulTabs(_ref) {\n var initialTab = _ref.initialTab,\n tabs = _ref.tabs,\n props = _objectWithoutProperties(_ref, [\"initialTab\", \"tabs\"]);\n\n var _useSelectedItem = useSelectedItem(initialTab, tabs.length),\n getSelected = _useSelectedItem.getSelected,\n select = _useSelectedItem.select;\n\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Tabs, _extends({\n tabs: tabs\n }, props, {\n activeTab: getSelected(),\n onSelect: select\n }));\n}\n\nStatefulTabs.propTypes = {\n bordered: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n initialTab: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number,\n onlyRenderActiveTab: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n onSelect: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.func,\n tabs: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.shape({\n title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node,\n content: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node\n })).isRequired,\n vertical: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool\n};\nvar ToastsContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createContext(null);\nvar TOASTS_VALID_POSITIONS = ['TOP_LEFT', 'TOP_RIGHT', 'BOTTOM_LEFT', 'BOTTOM_RIGHT'];\nvar TOASTS_VALID_TYPES = ['info', 'success', 'danger', 'warning'];\nvar TOASTS_CLASSNAME_BY_POSITION = [{\n name: 'TOP_LEFT',\n className: 'top-left'\n}, {\n name: 'TOP_RIGHT',\n className: 'top-right'\n}, {\n name: 'BOTTOM_LEFT',\n className: 'bottom-left'\n}, {\n name: 'BOTTOM_RIGHT',\n className: 'bottom-right'\n}];\nvar TOASTS_DEFAULT_STYLE = {\n position: 'fixed',\n zIndex: 9999,\n maxWidth: '50%'\n};\nvar TOASTS_DEFAULT_STYLES_BY_POSITION = {\n TOP_RIGHT: {\n top: '25px',\n right: '25px'\n },\n TOP_LEFT: {\n top: '25px',\n left: '25px'\n },\n BOTTOM_RIGHT: {\n right: '25px',\n bottom: '25px'\n },\n BOTTOM_LEFT: {\n left: '25px',\n bottom: '25px'\n }\n};\n\nfunction Toast(_ref) {\n var id = _ref.id,\n type = _ref.type,\n message = _ref.message,\n closeControl = _ref.closeControl,\n position = _ref.position,\n noStyle = _ref.noStyle;\n var toastsState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"])(ToastsContext);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: formatClasses(['toast-message', 'alert', \"alert-\".concat(type), closeControl && 'alert-dismissible']),\n style: noStyle ? null : {\n width: 'auto',\n zIndex: 9999\n }\n }, message, closeControl && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"button\", {\n type: \"button\",\n className: \"close\",\n onClick: function onClick() {\n return toastsState.close(position, id);\n },\n \"aria-label\": \"Close\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"span\", {\n \"aria-hidden\": \"true\"\n }, \"\\xD7\")));\n}\n\nToast.propTypes = {\n closeControl: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n id: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.number.isRequired,\n message: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n noStyle: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n position: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n type: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired\n};\n\nfunction ToastsRegion(_ref) {\n var name = _ref.name,\n className = _ref.className,\n toasts = _ref.toasts,\n noStyle = _ref.noStyle;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n key: name,\n className: className,\n style: noStyle ? null : _objectSpread2(_objectSpread2({}, TOASTS_DEFAULT_STYLE), TOASTS_DEFAULT_STYLES_BY_POSITION[name])\n }, toasts.map(function (toast) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(Toast, _extends({\n key: toast.id\n }, toast));\n }));\n}\n\nToastsRegion.defaultProps = {\n toasts: []\n};\nToastsRegion.propTypes = {\n className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n name: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string.isRequired,\n noStyle: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n toasts: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object)\n};\n\nfunction useToastState(_ref) {\n var unique = _ref.unique;\n\n var _useState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useState\"])(0),\n _useState2 = _slicedToArray(_useState, 2),\n nextId = _useState2[0],\n setNextId = _useState2[1];\n\n var timeoutRefs = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useRef\"])({});\n\n var _useArrayValueMap = useArrayValueMap(unique && {\n equalityComparator: function equalityComparator(a) {\n return function (b) {\n return a.message === b.message;\n };\n }\n }),\n push = _useArrayValueMap.push,\n unset = _useArrayValueMap.unset,\n get = _useArrayValueMap.get,\n reset = _useArrayValueMap.reset;\n\n var show = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (message) {\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref2$type = _ref2.type,\n type = _ref2$type === void 0 ? 'info' : _ref2$type,\n _ref2$autoClose = _ref2.autoClose,\n autoClose = _ref2$autoClose === void 0 ? 5000 : _ref2$autoClose,\n _ref2$position = _ref2.position,\n position = _ref2$position === void 0 ? 'TOP_RIGHT' : _ref2$position;\n\n if (!TOASTS_VALID_TYPES.includes(type)) {\n throw new Error(\"Invalid toast type \".concat(type, \". Must be \").concat(TOASTS_VALID_TYPES));\n }\n\n if (!TOASTS_VALID_POSITIONS.includes(position)) {\n throw new Error(\"Invalid toast position \".concat(position, \". Must be \").concat(TOASTS_VALID_POSITIONS));\n }\n\n var toastId = nextId;\n push(position, {\n id: toastId,\n message: message,\n type: type,\n position: position,\n closeControl: !autoClose\n });\n\n if (isNumber(autoClose) && !isNaN(autoClose)) {\n var timeoutId = setTimeout(function () {\n close(position, toastId);\n }, autoClose);\n timeoutRefs.current[toastId] = {\n timeoutId: timeoutId,\n position: position\n };\n }\n\n setNextId(function (prevId) {\n return prevId + 1;\n });\n return toastId;\n }, [close, nextId, push]);\n var close = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function (position, toastId) {\n var timeoutId = timeoutRefs.current[toastId].timeoutId;\n\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n delete timeoutRefs.current[toastId];\n unset(position, function (toast) {\n return toast.id !== toastId;\n });\n }, [unset]);\n var closeAll = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useCallback\"])(function () {\n for (var _i = 0, _Object$entries = Object.entries(timeoutRefs.current); _i < _Object$entries.length; _i++) {\n var _Object$entries$_i = _slicedToArray(_Object$entries[_i], 2),\n toastId = _Object$entries$_i[0],\n position = _Object$entries$_i[1].position;\n\n close(position, toastId);\n }\n\n reset();\n }, [close, reset]);\n Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useEffect\"])(function () {\n return closeAll;\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n []);\n return {\n show: show,\n close: close,\n closeAll: closeAll,\n get: get\n };\n}\n\nfunction ToastsContainer(_ref) {\n var children = _ref.children,\n unique = _ref.unique,\n noStyle = _ref.noStyle;\n var toastsState = useToastState({\n unique: unique\n });\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(ToastsContext.Provider, {\n value: toastsState\n }, children, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(\"div\", {\n className: \"toast-container\"\n }, TOASTS_CLASSNAME_BY_POSITION.map(function (_ref2) {\n var name = _ref2.name,\n className = _ref2.className;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(ToastsRegion, {\n key: name,\n name: name,\n className: className,\n toasts: toastsState.get(name),\n noStyle: noStyle\n });\n })));\n}\n\nToastsContainer.defaultProps = {\n noStyle: false,\n unique: true\n};\nToastsContainer.propTypes = {\n children: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.node)]),\n noStyle: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\n unique: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool\n};\n\nfunction useToasts() {\n var toastsState = Object(react__WEBPACK_IMPORTED_MODULE_0__[\"useContext\"])(ToastsContext);\n return {\n /**\n * showToast\n * @param {string} message\n * @param {object} options Configurations object\n * @param {string} options.type toast color based on bootstrap theme ('info' - default, 'success', 'danger', 'warning')\n * @param {number} options.autoClose miliseconds to automatically close toast (default 5000)\n * @param {string} options.position toast position ('TOP_LEFT', 'TOP_RIGHT' - default, 'BOTTOM_LEFT', 'BOTTOM_RIGHT')\n *\n * @returns {func} a closeToast function to close the opened toast\n */\n showToast: function showToast(message, options) {\n var _ref = options || {},\n _ref$type = _ref.type,\n type = _ref$type === void 0 ? 'info' : _ref$type,\n _ref$autoClose = _ref.autoClose,\n autoClose = _ref$autoClose === void 0 ? 5000 : _ref$autoClose,\n _ref$position = _ref.position,\n position = _ref$position === void 0 ? 'TOP_RIGHT' : _ref$position;\n\n var toastId = toastsState.show(message, {\n type: type,\n autoClose: autoClose,\n position: position\n });\n return function closeToast() {\n toastsState.close(position, toastId);\n };\n },\n closeAllToasts: function closeAllToasts() {\n toastsState.closeAll();\n }\n };\n}\n\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///./dist/main.js?");
/***/ }),
@@ -285,7 +285,7 @@ eval("/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source cod
/***/ (function(module, exports, __webpack_require__) {
"use strict";
-eval("/** @license React v16.13.1\n * react-dom.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n\n\n\nif (true) {\n (function() {\n'use strict';\n\nvar React = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\nvar _assign = __webpack_require__(/*! object-assign */ \"./node_modules/object-assign/index.js\");\nvar Scheduler = __webpack_require__(/*! scheduler */ \"./node_modules/scheduler/index.js\");\nvar checkPropTypes = __webpack_require__(/*! prop-types/checkPropTypes */ \"./node_modules/prop-types/checkPropTypes.js\");\nvar tracing = __webpack_require__(/*! scheduler/tracing */ \"./node_modules/scheduler/tracing.js\");\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; // Prevent newer renderers from RTE when used with older react package versions.\n// Current owner and dispatcher used to share the same ref,\n// but PR #14548 split them out to better support the react-debug-tools package.\n\nif (!ReactSharedInternals.hasOwnProperty('ReactCurrentDispatcher')) {\n ReactSharedInternals.ReactCurrentDispatcher = {\n current: null\n };\n}\n\nif (!ReactSharedInternals.hasOwnProperty('ReactCurrentBatchConfig')) {\n ReactSharedInternals.ReactCurrentBatchConfig = {\n suspense: null\n };\n}\n\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n printWarning('warn', format, args);\n }\n}\nfunction error(format) {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var hasExistingStack = args.length > 0 && typeof args[args.length - 1] === 'string' && args[args.length - 1].indexOf('\\n in') === 0;\n\n if (!hasExistingStack) {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n }\n }\n\n var argsWithFormat = args.map(function (item) {\n return '' + item;\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n throw new Error(message);\n } catch (x) {}\n }\n}\n\nif (!React) {\n {\n throw Error( \"ReactDOM was loaded before React. Make sure you load the React package before loading ReactDOM.\" );\n }\n}\n\nvar invokeGuardedCallbackImpl = function (name, func, context, a, b, c, d, e, f) {\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n try {\n func.apply(context, funcArgs);\n } catch (error) {\n this.onError(error);\n }\n};\n\n{\n // In DEV mode, we swap out invokeGuardedCallback for a special version\n // that plays more nicely with the browser's DevTools. The idea is to preserve\n // \"Pause on exceptions\" behavior. Because React wraps all user-provided\n // functions in invokeGuardedCallback, and the production version of\n // invokeGuardedCallback uses a try-catch, all user exceptions are treated\n // like caught exceptions, and the DevTools won't pause unless the developer\n // takes the extra step of enabling pause on caught exceptions. This is\n // unintuitive, though, because even though React has caught the error, from\n // the developer's perspective, the error is uncaught.\n //\n // To preserve the expected \"Pause on exceptions\" behavior, we don't use a\n // try-catch in DEV. Instead, we synchronously dispatch a fake event to a fake\n // DOM node, and call the user-provided callback from inside an event handler\n // for that fake event. If the callback throws, the error is \"captured\" using\n // a global event handler. But because the error happens in a different\n // event loop context, it does not interrupt the normal program flow.\n // Effectively, this gives us try-catch behavior without actually using\n // try-catch. Neat!\n // Check that the browser supports the APIs we need to implement our special\n // DEV version of invokeGuardedCallback\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n var fakeNode = document.createElement('react');\n\n var invokeGuardedCallbackDev = function (name, func, context, a, b, c, d, e, f) {\n // If document doesn't exist we know for sure we will crash in this method\n // when we call document.createEvent(). However this can cause confusing\n // errors: https://github.com/facebookincubator/create-react-app/issues/3482\n // So we preemptively throw with a better message instead.\n if (!(typeof document !== 'undefined')) {\n {\n throw Error( \"The `document` global was defined when React was initialized, but is not defined anymore. This can happen in a test environment if a component schedules an update from an asynchronous callback, but the test has already finished running. To solve this, you can either unmount the component at the end of your test (and ensure that any asynchronous operations get canceled in `componentWillUnmount`), or you can change the test itself to be asynchronous.\" );\n }\n }\n\n var evt = document.createEvent('Event'); // Keeps track of whether the user-provided callback threw an error. We\n // set this to true at the beginning, then set it to false right after\n // calling the function. If the function errors, `didError` will never be\n // set to false. This strategy works even if the browser is flaky and\n // fails to call our global error handler, because it doesn't rely on\n // the error event at all.\n\n var didError = true; // Keeps track of the value of window.event so that we can reset it\n // during the callback to let user code access window.event in the\n // browsers that support it.\n\n var windowEvent = window.event; // Keeps track of the descriptor of window.event to restore it after event\n // dispatching: https://github.com/facebook/react/issues/13688\n\n var windowEventDescriptor = Object.getOwnPropertyDescriptor(window, 'event'); // Create an event handler for our fake event. We will synchronously\n // dispatch our fake event using `dispatchEvent`. Inside the handler, we\n // call the user-provided callback.\n\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n function callCallback() {\n // We immediately remove the callback from event listeners so that\n // nested `invokeGuardedCallback` calls do not clash. Otherwise, a\n // nested call would trigger the fake event handlers of any call higher\n // in the stack.\n fakeNode.removeEventListener(evtType, callCallback, false); // We check for window.hasOwnProperty('event') to prevent the\n // window.event assignment in both IE <= 10 as they throw an error\n // \"Member not found\" in strict mode, and in Firefox which does not\n // support window.event.\n\n if (typeof window.event !== 'undefined' && window.hasOwnProperty('event')) {\n window.event = windowEvent;\n }\n\n func.apply(context, funcArgs);\n didError = false;\n } // Create a global error event handler. We use this to capture the value\n // that was thrown. It's possible that this error handler will fire more\n // than once; for example, if non-React code also calls `dispatchEvent`\n // and a handler for that event throws. We should be resilient to most of\n // those cases. Even if our error event handler fires more than once, the\n // last error event is always used. If the callback actually does error,\n // we know that the last error event is the correct one, because it's not\n // possible for anything else to have happened in between our callback\n // erroring and the code that follows the `dispatchEvent` call below. If\n // the callback doesn't error, but the error event was fired, we know to\n // ignore it because `didError` will be false, as described above.\n\n\n var error; // Use this to track whether the error event is ever called.\n\n var didSetError = false;\n var isCrossOriginError = false;\n\n function handleWindowError(event) {\n error = event.error;\n didSetError = true;\n\n if (error === null && event.colno === 0 && event.lineno === 0) {\n isCrossOriginError = true;\n }\n\n if (event.defaultPrevented) {\n // Some other error handler has prevented default.\n // Browsers silence the error report if this happens.\n // We'll remember this to later decide whether to log it or not.\n if (error != null && typeof error === 'object') {\n try {\n error._suppressLogging = true;\n } catch (inner) {// Ignore.\n }\n }\n }\n } // Create a fake event type.\n\n\n var evtType = \"react-\" + (name ? name : 'invokeguardedcallback'); // Attach our event handlers\n\n window.addEventListener('error', handleWindowError);\n fakeNode.addEventListener(evtType, callCallback, false); // Synchronously dispatch our fake event. If the user-provided function\n // errors, it will trigger our global error handler.\n\n evt.initEvent(evtType, false, false);\n fakeNode.dispatchEvent(evt);\n\n if (windowEventDescriptor) {\n Object.defineProperty(window, 'event', windowEventDescriptor);\n }\n\n if (didError) {\n if (!didSetError) {\n // The callback errored, but the error event never fired.\n error = new Error('An error was thrown inside one of your components, but React ' + \"doesn't know what it was. This is likely due to browser \" + 'flakiness. React does its best to preserve the \"Pause on ' + 'exceptions\" behavior of the DevTools, which requires some ' + \"DEV-mode only tricks. It's possible that these don't work in \" + 'your browser. Try triggering the error in production mode, ' + 'or switching to a modern browser. If you suspect that this is ' + 'actually an issue with React, please file an issue.');\n } else if (isCrossOriginError) {\n error = new Error(\"A cross-origin error was thrown. React doesn't have access to \" + 'the actual error object in development. ' + 'See https://fb.me/react-crossorigin-error for more information.');\n }\n\n this.onError(error);\n } // Remove our event listeners\n\n\n window.removeEventListener('error', handleWindowError);\n };\n\n invokeGuardedCallbackImpl = invokeGuardedCallbackDev;\n }\n}\n\nvar invokeGuardedCallbackImpl$1 = invokeGuardedCallbackImpl;\n\nvar hasError = false;\nvar caughtError = null; // Used by event system to capture/rethrow the first error.\n\nvar hasRethrowError = false;\nvar rethrowError = null;\nvar reporter = {\n onError: function (error) {\n hasError = true;\n caughtError = error;\n }\n};\n/**\n * Call a function while guarding against errors that happens within it.\n * Returns an error if it throws, otherwise null.\n *\n * In production, this is implemented using a try-catch. The reason we don't\n * use a try-catch directly is so that we can swap out a different\n * implementation in DEV mode.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallback(name, func, context, a, b, c, d, e, f) {\n hasError = false;\n caughtError = null;\n invokeGuardedCallbackImpl$1.apply(reporter, arguments);\n}\n/**\n * Same as invokeGuardedCallback, but instead of returning an error, it stores\n * it in a global so it can be rethrown by `rethrowCaughtError` later.\n * TODO: See if caughtError and rethrowError can be unified.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallbackAndCatchFirstError(name, func, context, a, b, c, d, e, f) {\n invokeGuardedCallback.apply(this, arguments);\n\n if (hasError) {\n var error = clearCaughtError();\n\n if (!hasRethrowError) {\n hasRethrowError = true;\n rethrowError = error;\n }\n }\n}\n/**\n * During execution of guarded functions we will capture the first error which\n * we will rethrow to be handled by the top level error handler.\n */\n\nfunction rethrowCaughtError() {\n if (hasRethrowError) {\n var error = rethrowError;\n hasRethrowError = false;\n rethrowError = null;\n throw error;\n }\n}\nfunction hasCaughtError() {\n return hasError;\n}\nfunction clearCaughtError() {\n if (hasError) {\n var error = caughtError;\n hasError = false;\n caughtError = null;\n return error;\n } else {\n {\n {\n throw Error( \"clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n }\n}\n\nvar getFiberCurrentPropsFromNode = null;\nvar getInstanceFromNode = null;\nvar getNodeFromInstance = null;\nfunction setComponentTree(getFiberCurrentPropsFromNodeImpl, getInstanceFromNodeImpl, getNodeFromInstanceImpl) {\n getFiberCurrentPropsFromNode = getFiberCurrentPropsFromNodeImpl;\n getInstanceFromNode = getInstanceFromNodeImpl;\n getNodeFromInstance = getNodeFromInstanceImpl;\n\n {\n if (!getNodeFromInstance || !getInstanceFromNode) {\n error('EventPluginUtils.setComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.');\n }\n }\n}\nvar validateEventDispatches;\n\n{\n validateEventDispatches = function (event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n var listenersIsArr = Array.isArray(dispatchListeners);\n var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\n var instancesIsArr = Array.isArray(dispatchInstances);\n var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0;\n\n if (instancesIsArr !== listenersIsArr || instancesLen !== listenersLen) {\n error('EventPluginUtils: Invalid `event`.');\n }\n };\n}\n/**\n * Dispatch the event to the listener.\n * @param {SyntheticEvent} event SyntheticEvent to handle\n * @param {function} listener Application-level callback\n * @param {*} inst Internal component instance\n */\n\n\nfunction executeDispatch(event, listener, inst) {\n var type = event.type || 'unknown-event';\n event.currentTarget = getNodeFromInstance(inst);\n invokeGuardedCallbackAndCatchFirstError(type, listener, undefined, event);\n event.currentTarget = null;\n}\n/**\n * Standard/simple iteration through an event's collected dispatches.\n */\n\nfunction executeDispatchesInOrder(event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n\n {\n validateEventDispatches(event);\n }\n\n if (Array.isArray(dispatchListeners)) {\n for (var i = 0; i < dispatchListeners.length; i++) {\n if (event.isPropagationStopped()) {\n break;\n } // Listeners and Instances are two parallel arrays that are always in sync.\n\n\n executeDispatch(event, dispatchListeners[i], dispatchInstances[i]);\n }\n } else if (dispatchListeners) {\n executeDispatch(event, dispatchListeners, dispatchInstances);\n }\n\n event._dispatchListeners = null;\n event._dispatchInstances = null;\n}\n\nvar FunctionComponent = 0;\nvar ClassComponent = 1;\nvar IndeterminateComponent = 2; // Before we know whether it is function or class\n\nvar HostRoot = 3; // Root of a host tree. Could be nested inside another node.\n\nvar HostPortal = 4; // A subtree. Could be an entry point to a different renderer.\n\nvar HostComponent = 5;\nvar HostText = 6;\nvar Fragment = 7;\nvar Mode = 8;\nvar ContextConsumer = 9;\nvar ContextProvider = 10;\nvar ForwardRef = 11;\nvar Profiler = 12;\nvar SuspenseComponent = 13;\nvar MemoComponent = 14;\nvar SimpleMemoComponent = 15;\nvar LazyComponent = 16;\nvar IncompleteClassComponent = 17;\nvar DehydratedFragment = 18;\nvar SuspenseListComponent = 19;\nvar FundamentalComponent = 20;\nvar ScopeComponent = 21;\nvar Block = 22;\n\n/**\n * Injectable ordering of event plugins.\n */\nvar eventPluginOrder = null;\n/**\n * Injectable mapping from names to event plugin modules.\n */\n\nvar namesToPlugins = {};\n/**\n * Recomputes the plugin list using the injected plugins and plugin ordering.\n *\n * @private\n */\n\nfunction recomputePluginOrdering() {\n if (!eventPluginOrder) {\n // Wait until an `eventPluginOrder` is injected.\n return;\n }\n\n for (var pluginName in namesToPlugins) {\n var pluginModule = namesToPlugins[pluginName];\n var pluginIndex = eventPluginOrder.indexOf(pluginName);\n\n if (!(pluginIndex > -1)) {\n {\n throw Error( \"EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `\" + pluginName + \"`.\" );\n }\n }\n\n if (plugins[pluginIndex]) {\n continue;\n }\n\n if (!pluginModule.extractEvents) {\n {\n throw Error( \"EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `\" + pluginName + \"` does not.\" );\n }\n }\n\n plugins[pluginIndex] = pluginModule;\n var publishedEvents = pluginModule.eventTypes;\n\n for (var eventName in publishedEvents) {\n if (!publishEventForPlugin(publishedEvents[eventName], pluginModule, eventName)) {\n {\n throw Error( \"EventPluginRegistry: Failed to publish event `\" + eventName + \"` for plugin `\" + pluginName + \"`.\" );\n }\n }\n }\n }\n}\n/**\n * Publishes an event so that it can be dispatched by the supplied plugin.\n *\n * @param {object} dispatchConfig Dispatch configuration for the event.\n * @param {object} PluginModule Plugin publishing the event.\n * @return {boolean} True if the event was successfully published.\n * @private\n */\n\n\nfunction publishEventForPlugin(dispatchConfig, pluginModule, eventName) {\n if (!!eventNameDispatchConfigs.hasOwnProperty(eventName)) {\n {\n throw Error( \"EventPluginRegistry: More than one plugin attempted to publish the same event name, `\" + eventName + \"`.\" );\n }\n }\n\n eventNameDispatchConfigs[eventName] = dispatchConfig;\n var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n\n if (phasedRegistrationNames) {\n for (var phaseName in phasedRegistrationNames) {\n if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\n var phasedRegistrationName = phasedRegistrationNames[phaseName];\n publishRegistrationName(phasedRegistrationName, pluginModule, eventName);\n }\n }\n\n return true;\n } else if (dispatchConfig.registrationName) {\n publishRegistrationName(dispatchConfig.registrationName, pluginModule, eventName);\n return true;\n }\n\n return false;\n}\n/**\n * Publishes a registration name that is used to identify dispatched events.\n *\n * @param {string} registrationName Registration name to add.\n * @param {object} PluginModule Plugin publishing the event.\n * @private\n */\n\n\nfunction publishRegistrationName(registrationName, pluginModule, eventName) {\n if (!!registrationNameModules[registrationName]) {\n {\n throw Error( \"EventPluginRegistry: More than one plugin attempted to publish the same registration name, `\" + registrationName + \"`.\" );\n }\n }\n\n registrationNameModules[registrationName] = pluginModule;\n registrationNameDependencies[registrationName] = pluginModule.eventTypes[eventName].dependencies;\n\n {\n var lowerCasedName = registrationName.toLowerCase();\n possibleRegistrationNames[lowerCasedName] = registrationName;\n\n if (registrationName === 'onDoubleClick') {\n possibleRegistrationNames.ondblclick = registrationName;\n }\n }\n}\n/**\n * Registers plugins so that they can extract and dispatch events.\n */\n\n/**\n * Ordered list of injected plugins.\n */\n\n\nvar plugins = [];\n/**\n * Mapping from event name to dispatch config\n */\n\nvar eventNameDispatchConfigs = {};\n/**\n * Mapping from registration name to plugin module\n */\n\nvar registrationNameModules = {};\n/**\n * Mapping from registration name to event name\n */\n\nvar registrationNameDependencies = {};\n/**\n * Mapping from lowercase registration names to the properly cased version,\n * used to warn in the case of missing event handlers. Available\n * only in true.\n * @type {Object}\n */\n\nvar possibleRegistrationNames = {} ; // Trust the developer to only use possibleRegistrationNames in true\n\n/**\n * Injects an ordering of plugins (by plugin name). This allows the ordering\n * to be decoupled from injection of the actual plugins so that ordering is\n * always deterministic regardless of packaging, on-the-fly injection, etc.\n *\n * @param {array} InjectedEventPluginOrder\n * @internal\n */\n\nfunction injectEventPluginOrder(injectedEventPluginOrder) {\n if (!!eventPluginOrder) {\n {\n throw Error( \"EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.\" );\n }\n } // Clone the ordering so it cannot be dynamically mutated.\n\n\n eventPluginOrder = Array.prototype.slice.call(injectedEventPluginOrder);\n recomputePluginOrdering();\n}\n/**\n * Injects plugins to be used by plugin event system. The plugin names must be\n * in the ordering injected by `injectEventPluginOrder`.\n *\n * Plugins can be injected as part of page initialization or on-the-fly.\n *\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n * @internal\n */\n\nfunction injectEventPluginsByName(injectedNamesToPlugins) {\n var isOrderingDirty = false;\n\n for (var pluginName in injectedNamesToPlugins) {\n if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\n continue;\n }\n\n var pluginModule = injectedNamesToPlugins[pluginName];\n\n if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== pluginModule) {\n if (!!namesToPlugins[pluginName]) {\n {\n throw Error( \"EventPluginRegistry: Cannot inject two different event plugins using the same name, `\" + pluginName + \"`.\" );\n }\n }\n\n namesToPlugins[pluginName] = pluginModule;\n isOrderingDirty = true;\n }\n }\n\n if (isOrderingDirty) {\n recomputePluginOrdering();\n }\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\n\nvar PLUGIN_EVENT_SYSTEM = 1;\nvar IS_REPLAYED = 1 << 5;\nvar IS_FIRST_ANCESTOR = 1 << 6;\n\nvar restoreImpl = null;\nvar restoreTarget = null;\nvar restoreQueue = null;\n\nfunction restoreStateOfTarget(target) {\n // We perform this translation at the end of the event loop so that we\n // always receive the correct fiber here\n var internalInstance = getInstanceFromNode(target);\n\n if (!internalInstance) {\n // Unmounted\n return;\n }\n\n if (!(typeof restoreImpl === 'function')) {\n {\n throw Error( \"setRestoreImplementation() needs to be called to handle a target for controlled events. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n var stateNode = internalInstance.stateNode; // Guard against Fiber being unmounted.\n\n if (stateNode) {\n var _props = getFiberCurrentPropsFromNode(stateNode);\n\n restoreImpl(internalInstance.stateNode, internalInstance.type, _props);\n }\n}\n\nfunction setRestoreImplementation(impl) {\n restoreImpl = impl;\n}\nfunction enqueueStateRestore(target) {\n if (restoreTarget) {\n if (restoreQueue) {\n restoreQueue.push(target);\n } else {\n restoreQueue = [target];\n }\n } else {\n restoreTarget = target;\n }\n}\nfunction needsStateRestore() {\n return restoreTarget !== null || restoreQueue !== null;\n}\nfunction restoreStateIfNeeded() {\n if (!restoreTarget) {\n return;\n }\n\n var target = restoreTarget;\n var queuedTargets = restoreQueue;\n restoreTarget = null;\n restoreQueue = null;\n restoreStateOfTarget(target);\n\n if (queuedTargets) {\n for (var i = 0; i < queuedTargets.length; i++) {\n restoreStateOfTarget(queuedTargets[i]);\n }\n }\n}\n\nvar enableProfilerTimer = true; // Trace which interactions trigger each commit.\n\nvar enableDeprecatedFlareAPI = false; // Experimental Host Component support.\n\nvar enableFundamentalAPI = false; // Experimental Scope support.\nvar warnAboutStringRefs = false;\n\n// the renderer. Such as when we're dispatching events or if third party\n// libraries need to call batchedUpdates. Eventually, this API will go away when\n// everything is batched by default. We'll then have a similar API to opt-out of\n// scheduled work and instead do synchronous work.\n// Defaults\n\nvar batchedUpdatesImpl = function (fn, bookkeeping) {\n return fn(bookkeeping);\n};\n\nvar discreteUpdatesImpl = function (fn, a, b, c, d) {\n return fn(a, b, c, d);\n};\n\nvar flushDiscreteUpdatesImpl = function () {};\n\nvar batchedEventUpdatesImpl = batchedUpdatesImpl;\nvar isInsideEventHandler = false;\nvar isBatchingEventUpdates = false;\n\nfunction finishEventHandler() {\n // Here we wait until all updates have propagated, which is important\n // when using controlled components within layers:\n // https://github.com/facebook/react/issues/1698\n // Then we restore state of any controlled component.\n var controlledComponentsHavePendingUpdates = needsStateRestore();\n\n if (controlledComponentsHavePendingUpdates) {\n // If a controlled event was fired, we may need to restore the state of\n // the DOM node back to the controlled value. This is necessary when React\n // bails out of the update without touching the DOM.\n flushDiscreteUpdatesImpl();\n restoreStateIfNeeded();\n }\n}\n\nfunction batchedUpdates(fn, bookkeeping) {\n if (isInsideEventHandler) {\n // If we are currently inside another batch, we need to wait until it\n // fully completes before restoring state.\n return fn(bookkeeping);\n }\n\n isInsideEventHandler = true;\n\n try {\n return batchedUpdatesImpl(fn, bookkeeping);\n } finally {\n isInsideEventHandler = false;\n finishEventHandler();\n }\n}\nfunction batchedEventUpdates(fn, a, b) {\n if (isBatchingEventUpdates) {\n // If we are currently inside another batch, we need to wait until it\n // fully completes before restoring state.\n return fn(a, b);\n }\n\n isBatchingEventUpdates = true;\n\n try {\n return batchedEventUpdatesImpl(fn, a, b);\n } finally {\n isBatchingEventUpdates = false;\n finishEventHandler();\n }\n} // This is for the React Flare event system\nfunction discreteUpdates(fn, a, b, c, d) {\n var prevIsInsideEventHandler = isInsideEventHandler;\n isInsideEventHandler = true;\n\n try {\n return discreteUpdatesImpl(fn, a, b, c, d);\n } finally {\n isInsideEventHandler = prevIsInsideEventHandler;\n\n if (!isInsideEventHandler) {\n finishEventHandler();\n }\n }\n}\nfunction flushDiscreteUpdatesIfNeeded(timeStamp) {\n // event.timeStamp isn't overly reliable due to inconsistencies in\n // how different browsers have historically provided the time stamp.\n // Some browsers provide high-resolution time stamps for all events,\n // some provide low-resolution time stamps for all events. FF < 52\n // even mixes both time stamps together. Some browsers even report\n // negative time stamps or time stamps that are 0 (iOS9) in some cases.\n // Given we are only comparing two time stamps with equality (!==),\n // we are safe from the resolution differences. If the time stamp is 0\n // we bail-out of preventing the flush, which can affect semantics,\n // such as if an earlier flush removes or adds event listeners that\n // are fired in the subsequent flush. However, this is the same\n // behaviour as we had before this change, so the risks are low.\n if (!isInsideEventHandler && (!enableDeprecatedFlareAPI )) {\n flushDiscreteUpdatesImpl();\n }\n}\nfunction setBatchingImplementation(_batchedUpdatesImpl, _discreteUpdatesImpl, _flushDiscreteUpdatesImpl, _batchedEventUpdatesImpl) {\n batchedUpdatesImpl = _batchedUpdatesImpl;\n discreteUpdatesImpl = _discreteUpdatesImpl;\n flushDiscreteUpdatesImpl = _flushDiscreteUpdatesImpl;\n batchedEventUpdatesImpl = _batchedEventUpdatesImpl;\n}\n\nvar DiscreteEvent = 0;\nvar UserBlockingEvent = 1;\nvar ContinuousEvent = 2;\n\n// A reserved attribute.\n// It is handled by React separately and shouldn't be written to the DOM.\nvar RESERVED = 0; // A simple string attribute.\n// Attributes that aren't in the whitelist are presumed to have this type.\n\nvar STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called\n// \"enumerated\" attributes with \"true\" and \"false\" as possible values.\n// When true, it should be set to a \"true\" string.\n// When false, it should be set to a \"false\" string.\n\nvar BOOLEANISH_STRING = 2; // A real boolean attribute.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n\nvar BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n// For any other value, should be present with that value.\n\nvar OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric.\n// When falsy, it should be removed.\n\nvar NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric.\n// When falsy, it should be removed.\n\nvar POSITIVE_NUMERIC = 6;\n\n/* eslint-disable max-len */\nvar ATTRIBUTE_NAME_START_CHAR = \":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n/* eslint-enable max-len */\n\nvar ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + \"\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\nvar ROOT_ATTRIBUTE_NAME = 'data-reactroot';\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {\n return true;\n }\n\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {\n return false;\n }\n\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n validatedAttributeNameCache[attributeName] = true;\n return true;\n }\n\n illegalAttributeNameCache[attributeName] = true;\n\n {\n error('Invalid attribute name: `%s`', attributeName);\n }\n\n return false;\n}\nfunction shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag) {\n if (propertyInfo !== null) {\n return propertyInfo.type === RESERVED;\n }\n\n if (isCustomComponentTag) {\n return false;\n }\n\n if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {\n return true;\n }\n\n return false;\n}\nfunction shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) {\n if (propertyInfo !== null && propertyInfo.type === RESERVED) {\n return false;\n }\n\n switch (typeof value) {\n case 'function': // $FlowIssue symbol is perfectly valid here\n\n case 'symbol':\n // eslint-disable-line\n return true;\n\n case 'boolean':\n {\n if (isCustomComponentTag) {\n return false;\n }\n\n if (propertyInfo !== null) {\n return !propertyInfo.acceptsBooleans;\n } else {\n var prefix = name.toLowerCase().slice(0, 5);\n return prefix !== 'data-' && prefix !== 'aria-';\n }\n }\n\n default:\n return false;\n }\n}\nfunction shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) {\n if (value === null || typeof value === 'undefined') {\n return true;\n }\n\n if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) {\n return true;\n }\n\n if (isCustomComponentTag) {\n return false;\n }\n\n if (propertyInfo !== null) {\n switch (propertyInfo.type) {\n case BOOLEAN:\n return !value;\n\n case OVERLOADED_BOOLEAN:\n return value === false;\n\n case NUMERIC:\n return isNaN(value);\n\n case POSITIVE_NUMERIC:\n return isNaN(value) || value < 1;\n }\n }\n\n return false;\n}\nfunction getPropertyInfo(name) {\n return properties.hasOwnProperty(name) ? properties[name] : null;\n}\n\nfunction PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL) {\n this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN;\n this.attributeName = attributeName;\n this.attributeNamespace = attributeNamespace;\n this.mustUseProperty = mustUseProperty;\n this.propertyName = name;\n this.type = type;\n this.sanitizeURL = sanitizeURL;\n} // When adding attributes to this list, be sure to also add them to\n// the `possibleStandardNames` module to ensure casing and incorrect\n// name warnings.\n\n\nvar properties = {}; // These props are reserved by React. They shouldn't be written to the DOM.\n\nvar reservedProps = ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular\n// elements (not just inputs). Now that ReactDOMInput assigns to the\n// defaultValue property -- do we need this?\n'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style'];\n\nreservedProps.forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // A few React string attributes have a different name.\n// This is a mapping from React prop names to the attribute names.\n\n[['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) {\n var name = _ref[0],\n attributeName = _ref[1];\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, // attributeName\n null, // attributeNamespace\n false);\n}); // These are \"enumerated\" HTML attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n\n['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n}); // These are \"enumerated\" SVG attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n// Since these are SVG attributes, their attribute names are case-sensitive.\n\n['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML boolean attributes.\n\n['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM\n// on the client side because the browsers are inconsistent. Instead we call focus().\n'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata\n'itemScope'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n}); // These are the few React props that we set as DOM properties\n// rather than attributes. These are all booleans.\n\n['checked', // Note: `option.selected` is not updated if `select.multiple` is\n// disabled with `removeAttribute`. We have special logic for handling this.\n'multiple', 'muted', 'selected' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML attributes that are \"overloaded booleans\": they behave like\n// booleans, but can also accept a string value.\n\n['capture', 'download' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML attributes that must be positive numbers.\n\n['cols', 'rows', 'size', 'span' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML attributes that must be numbers.\n\n['rowSpan', 'start'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n});\nvar CAMELIZE = /[\\-\\:]([a-z])/g;\n\nvar capitalize = function (token) {\n return token[1].toUpperCase();\n}; // This is a list of all SVG attributes that need special casing, namespacing,\n// or boolean value assignment. Regular attributes that just accept strings\n// and have the same names are omitted, just like in the HTML whitelist.\n// Some of these attributes can be hard to find. This list was created by\n// scraping the MDN documentation.\n\n\n['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, null, // attributeNamespace\n false);\n}); // String SVG attributes with the xlink namespace.\n\n['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, 'http://www.w3.org/1999/xlink', false);\n}); // String SVG attributes with the xml namespace.\n\n['xml:base', 'xml:lang', 'xml:space' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, 'http://www.w3.org/XML/1998/namespace', false);\n}); // These attribute exists both in HTML and SVG.\n// The attribute name is case-sensitive in SVG so we can't just use\n// the React name like we do for attributes that exist only in HTML.\n\n['tabIndex', 'crossOrigin'].forEach(function (attributeName) {\n properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n attributeName.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n}); // These attributes accept URLs. These must not allow javascript: URLS.\n// These will also need to accept Trusted Types object in the future.\n\nvar xlinkHref = 'xlinkHref';\nproperties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty\n'xlink:href', 'http://www.w3.org/1999/xlink', true);\n['src', 'href', 'action', 'formAction'].forEach(function (attributeName) {\n properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n attributeName.toLowerCase(), // attributeName\n null, // attributeNamespace\n true);\n});\n\nvar ReactDebugCurrentFrame = null;\n\n{\n ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n} // A javascript: URL can contain leading C0 control or \\u0020 SPACE,\n// and any newline or tab are filtered out as if they're not part of the URL.\n// https://url.spec.whatwg.org/#url-parsing\n// Tab or newline are defined as \\r\\n\\t:\n// https://infra.spec.whatwg.org/#ascii-tab-or-newline\n// A C0 control is a code point in the range \\u0000 NULL to \\u001F\n// INFORMATION SEPARATOR ONE, inclusive:\n// https://infra.spec.whatwg.org/#c0-control-or-space\n\n/* eslint-disable max-len */\n\n\nvar isJavaScriptProtocol = /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*\\:/i;\nvar didWarn = false;\n\nfunction sanitizeURL(url) {\n {\n if (!didWarn && isJavaScriptProtocol.test(url)) {\n didWarn = true;\n\n error('A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(url));\n }\n }\n}\n\n/**\n * Get the value for a property on a node. Only used in DEV for SSR validation.\n * The \"expected\" argument is used as a hint of what the expected value is.\n * Some properties have multiple equivalent values.\n */\nfunction getValueForProperty(node, name, expected, propertyInfo) {\n {\n if (propertyInfo.mustUseProperty) {\n var propertyName = propertyInfo.propertyName;\n return node[propertyName];\n } else {\n if ( propertyInfo.sanitizeURL) {\n // If we haven't fully disabled javascript: URLs, and if\n // the hydration is successful of a javascript: URL, we\n // still want to warn on the client.\n sanitizeURL('' + expected);\n }\n\n var attributeName = propertyInfo.attributeName;\n var stringValue = null;\n\n if (propertyInfo.type === OVERLOADED_BOOLEAN) {\n if (node.hasAttribute(attributeName)) {\n var value = node.getAttribute(attributeName);\n\n if (value === '') {\n return true;\n }\n\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n return value;\n }\n\n if (value === '' + expected) {\n return expected;\n }\n\n return value;\n }\n } else if (node.hasAttribute(attributeName)) {\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n // We had an attribute but shouldn't have had one, so read it\n // for the error message.\n return node.getAttribute(attributeName);\n }\n\n if (propertyInfo.type === BOOLEAN) {\n // If this was a boolean, it doesn't matter what the value is\n // the fact that we have it is the same as the expected.\n return expected;\n } // Even if this property uses a namespace we use getAttribute\n // because we assume its namespaced name is the same as our config.\n // To use getAttributeNS we need the local name which we don't have\n // in our config atm.\n\n\n stringValue = node.getAttribute(attributeName);\n }\n\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n return stringValue === null ? expected : stringValue;\n } else if (stringValue === '' + expected) {\n return expected;\n } else {\n return stringValue;\n }\n }\n }\n}\n/**\n * Get the value for a attribute on a node. Only used in DEV for SSR validation.\n * The third argument is used as a hint of what the expected value is. Some\n * attributes have multiple equivalent values.\n */\n\nfunction getValueForAttribute(node, name, expected) {\n {\n if (!isAttributeNameSafe(name)) {\n return;\n }\n\n if (!node.hasAttribute(name)) {\n return expected === undefined ? undefined : null;\n }\n\n var value = node.getAttribute(name);\n\n if (value === '' + expected) {\n return expected;\n }\n\n return value;\n }\n}\n/**\n * Sets the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n * @param {*} value\n */\n\nfunction setValueForProperty(node, name, value, isCustomComponentTag) {\n var propertyInfo = getPropertyInfo(name);\n\n if (shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag)) {\n return;\n }\n\n if (shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag)) {\n value = null;\n } // If the prop isn't in the special list, treat it as a simple attribute.\n\n\n if (isCustomComponentTag || propertyInfo === null) {\n if (isAttributeNameSafe(name)) {\n var _attributeName = name;\n\n if (value === null) {\n node.removeAttribute(_attributeName);\n } else {\n node.setAttribute(_attributeName, '' + value);\n }\n }\n\n return;\n }\n\n var mustUseProperty = propertyInfo.mustUseProperty;\n\n if (mustUseProperty) {\n var propertyName = propertyInfo.propertyName;\n\n if (value === null) {\n var type = propertyInfo.type;\n node[propertyName] = type === BOOLEAN ? false : '';\n } else {\n // Contrary to `setAttribute`, object properties are properly\n // `toString`ed by IE8/9.\n node[propertyName] = value;\n }\n\n return;\n } // The rest are treated as attributes with special cases.\n\n\n var attributeName = propertyInfo.attributeName,\n attributeNamespace = propertyInfo.attributeNamespace;\n\n if (value === null) {\n node.removeAttribute(attributeName);\n } else {\n var _type = propertyInfo.type;\n var attributeValue;\n\n if (_type === BOOLEAN || _type === OVERLOADED_BOOLEAN && value === true) {\n // If attribute type is boolean, we know for sure it won't be an execution sink\n // and we won't require Trusted Type here.\n attributeValue = '';\n } else {\n // `setAttribute` with objects becomes only `[object]` in IE8/9,\n // ('' + value) makes it output the correct toString()-value.\n {\n attributeValue = '' + value;\n }\n\n if (propertyInfo.sanitizeURL) {\n sanitizeURL(attributeValue.toString());\n }\n }\n\n if (attributeNamespace) {\n node.setAttributeNS(attributeNamespace, attributeName, attributeValue);\n } else {\n node.setAttribute(attributeName, attributeValue);\n }\n }\n}\n\nvar BEFORE_SLASH_RE = /^(.*)[\\\\\\/]/;\nfunction describeComponentFrame (name, source, ownerName) {\n var sourceInfo = '';\n\n if (source) {\n var path = source.fileName;\n var fileName = path.replace(BEFORE_SLASH_RE, '');\n\n {\n // In DEV, include code for a common special case:\n // prefer \"folder/index.js\" instead of just \"index.js\".\n if (/^index\\./.test(fileName)) {\n var match = path.match(BEFORE_SLASH_RE);\n\n if (match) {\n var pathBeforeSlash = match[1];\n\n if (pathBeforeSlash) {\n var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\n fileName = folderName + '/' + fileName;\n }\n }\n }\n }\n\n sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\n } else if (ownerName) {\n sourceInfo = ' (created by ' + ownerName + ')';\n }\n\n return '\\n in ' + (name || 'Unknown') + sourceInfo;\n}\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar Uninitialized = -1;\nvar Pending = 0;\nvar Resolved = 1;\nvar Rejected = 2;\nfunction refineResolvedLazyComponent(lazyComponent) {\n return lazyComponent._status === Resolved ? lazyComponent._result : null;\n}\nfunction initializeLazyComponentType(lazyComponent) {\n if (lazyComponent._status === Uninitialized) {\n lazyComponent._status = Pending;\n var ctor = lazyComponent._ctor;\n var thenable = ctor();\n lazyComponent._result = thenable;\n thenable.then(function (moduleObject) {\n if (lazyComponent._status === Pending) {\n var defaultExport = moduleObject.default;\n\n {\n if (defaultExport === undefined) {\n error('lazy: Expected the result of a dynamic import() call. ' + 'Instead received: %s\\n\\nYour code should look like: \\n ' + \"const MyComponent = lazy(() => import('./MyComponent'))\", moduleObject);\n }\n }\n\n lazyComponent._status = Resolved;\n lazyComponent._result = defaultExport;\n }\n }, function (error) {\n if (lazyComponent._status === Pending) {\n lazyComponent._status = Rejected;\n lazyComponent._result = error;\n }\n });\n }\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n}\n\nfunction getComponentName(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n return 'Context.Consumer';\n\n case REACT_PROVIDER_TYPE:\n return 'Context.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n return getComponentName(type.type);\n\n case REACT_BLOCK_TYPE:\n return getComponentName(type.render);\n\n case REACT_LAZY_TYPE:\n {\n var thenable = type;\n var resolvedThenable = refineResolvedLazyComponent(thenable);\n\n if (resolvedThenable) {\n return getComponentName(resolvedThenable);\n }\n\n break;\n }\n }\n }\n\n return null;\n}\n\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction describeFiber(fiber) {\n switch (fiber.tag) {\n case HostRoot:\n case HostPortal:\n case HostText:\n case Fragment:\n case ContextProvider:\n case ContextConsumer:\n return '';\n\n default:\n var owner = fiber._debugOwner;\n var source = fiber._debugSource;\n var name = getComponentName(fiber.type);\n var ownerName = null;\n\n if (owner) {\n ownerName = getComponentName(owner.type);\n }\n\n return describeComponentFrame(name, source, ownerName);\n }\n}\n\nfunction getStackByFiberInDevAndProd(workInProgress) {\n var info = '';\n var node = workInProgress;\n\n do {\n info += describeFiber(node);\n node = node.return;\n } while (node);\n\n return info;\n}\nvar current = null;\nvar isRendering = false;\nfunction getCurrentFiberOwnerNameInDevOrNull() {\n {\n if (current === null) {\n return null;\n }\n\n var owner = current._debugOwner;\n\n if (owner !== null && typeof owner !== 'undefined') {\n return getComponentName(owner.type);\n }\n }\n\n return null;\n}\nfunction getCurrentFiberStackInDev() {\n {\n if (current === null) {\n return '';\n } // Safe because if current fiber exists, we are reconciling,\n // and it is guaranteed to be the work-in-progress version.\n\n\n return getStackByFiberInDevAndProd(current);\n }\n}\nfunction resetCurrentFiber() {\n {\n ReactDebugCurrentFrame$1.getCurrentStack = null;\n current = null;\n isRendering = false;\n }\n}\nfunction setCurrentFiber(fiber) {\n {\n ReactDebugCurrentFrame$1.getCurrentStack = getCurrentFiberStackInDev;\n current = fiber;\n isRendering = false;\n }\n}\nfunction setIsRendering(rendering) {\n {\n isRendering = rendering;\n }\n}\n\n// Flow does not allow string concatenation of most non-string types. To work\n// around this limitation, we use an opaque type that can only be obtained by\n// passing the value through getToStringValue first.\nfunction toString(value) {\n return '' + value;\n}\nfunction getToStringValue(value) {\n switch (typeof value) {\n case 'boolean':\n case 'number':\n case 'object':\n case 'string':\n case 'undefined':\n return value;\n\n default:\n // function, symbol are assigned as empty strings\n return '';\n }\n}\n\nvar ReactDebugCurrentFrame$2 = null;\nvar ReactControlledValuePropTypes = {\n checkPropTypes: null\n};\n\n{\n ReactDebugCurrentFrame$2 = ReactSharedInternals.ReactDebugCurrentFrame;\n var hasReadOnlyValue = {\n button: true,\n checkbox: true,\n image: true,\n hidden: true,\n radio: true,\n reset: true,\n submit: true\n };\n var propTypes = {\n value: function (props, propName, componentName) {\n if (hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled || props[propName] == null || enableDeprecatedFlareAPI ) {\n return null;\n }\n\n return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n },\n checked: function (props, propName, componentName) {\n if (props.onChange || props.readOnly || props.disabled || props[propName] == null || enableDeprecatedFlareAPI ) {\n return null;\n }\n\n return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n }\n };\n /**\n * Provide a linked `value` attribute for controlled forms. You should not use\n * this outside of the ReactDOM controlled form components.\n */\n\n ReactControlledValuePropTypes.checkPropTypes = function (tagName, props) {\n checkPropTypes(propTypes, props, 'prop', tagName, ReactDebugCurrentFrame$2.getStackAddendum);\n };\n}\n\nfunction isCheckable(elem) {\n var type = elem.type;\n var nodeName = elem.nodeName;\n return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio');\n}\n\nfunction getTracker(node) {\n return node._valueTracker;\n}\n\nfunction detachTracker(node) {\n node._valueTracker = null;\n}\n\nfunction getValueFromNode(node) {\n var value = '';\n\n if (!node) {\n return value;\n }\n\n if (isCheckable(node)) {\n value = node.checked ? 'true' : 'false';\n } else {\n value = node.value;\n }\n\n return value;\n}\n\nfunction trackValueOnNode(node) {\n var valueField = isCheckable(node) ? 'checked' : 'value';\n var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);\n var currentValue = '' + node[valueField]; // if someone has already defined a value or Safari, then bail\n // and don't track value will cause over reporting of changes,\n // but it's better then a hard failure\n // (needed for certain tests that spyOn input values and Safari)\n\n if (node.hasOwnProperty(valueField) || typeof descriptor === 'undefined' || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {\n return;\n }\n\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: true,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n currentValue = '' + value;\n set.call(this, value);\n }\n }); // We could've passed this the first time\n // but it triggers a bug in IE11 and Edge 14/15.\n // Calling defineProperty() again should be equivalent.\n // https://github.com/facebook/react/issues/11768\n\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n var tracker = {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n currentValue = '' + value;\n },\n stopTracking: function () {\n detachTracker(node);\n delete node[valueField];\n }\n };\n return tracker;\n}\n\nfunction track(node) {\n if (getTracker(node)) {\n return;\n } // TODO: Once it's just Fiber we can move this to node._wrapperState\n\n\n node._valueTracker = trackValueOnNode(node);\n}\nfunction updateValueIfChanged(node) {\n if (!node) {\n return false;\n }\n\n var tracker = getTracker(node); // if there is no tracker at this point it's unlikely\n // that trying again will succeed\n\n if (!tracker) {\n return true;\n }\n\n var lastValue = tracker.getValue();\n var nextValue = getValueFromNode(node);\n\n if (nextValue !== lastValue) {\n tracker.setValue(nextValue);\n return true;\n }\n\n return false;\n}\n\nvar didWarnValueDefaultValue = false;\nvar didWarnCheckedDefaultChecked = false;\nvar didWarnControlledToUncontrolled = false;\nvar didWarnUncontrolledToControlled = false;\n\nfunction isControlled(props) {\n var usesChecked = props.type === 'checkbox' || props.type === 'radio';\n return usesChecked ? props.checked != null : props.value != null;\n}\n/**\n * Implements an host component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\n\n\nfunction getHostProps(element, props) {\n var node = element;\n var checked = props.checked;\n\n var hostProps = _assign({}, props, {\n defaultChecked: undefined,\n defaultValue: undefined,\n value: undefined,\n checked: checked != null ? checked : node._wrapperState.initialChecked\n });\n\n return hostProps;\n}\nfunction initWrapperState(element, props) {\n {\n ReactControlledValuePropTypes.checkPropTypes('input', props);\n\n if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {\n error('%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n didWarnCheckedDefaultChecked = true;\n }\n\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n error('%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n didWarnValueDefaultValue = true;\n }\n }\n\n var node = element;\n var defaultValue = props.defaultValue == null ? '' : props.defaultValue;\n node._wrapperState = {\n initialChecked: props.checked != null ? props.checked : props.defaultChecked,\n initialValue: getToStringValue(props.value != null ? props.value : defaultValue),\n controlled: isControlled(props)\n };\n}\nfunction updateChecked(element, props) {\n var node = element;\n var checked = props.checked;\n\n if (checked != null) {\n setValueForProperty(node, 'checked', checked, false);\n }\n}\nfunction updateWrapper(element, props) {\n var node = element;\n\n {\n var controlled = isControlled(props);\n\n if (!node._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {\n error('A component is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', props.type);\n\n didWarnUncontrolledToControlled = true;\n }\n\n if (node._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {\n error('A component is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', props.type);\n\n didWarnControlledToUncontrolled = true;\n }\n }\n\n updateChecked(element, props);\n var value = getToStringValue(props.value);\n var type = props.type;\n\n if (value != null) {\n if (type === 'number') {\n if (value === 0 && node.value === '' || // We explicitly want to coerce to number here if possible.\n // eslint-disable-next-line\n node.value != value) {\n node.value = toString(value);\n }\n } else if (node.value !== toString(value)) {\n node.value = toString(value);\n }\n } else if (type === 'submit' || type === 'reset') {\n // Submit/reset inputs need the attribute removed completely to avoid\n // blank-text buttons.\n node.removeAttribute('value');\n return;\n }\n\n {\n // When syncing the value attribute, the value comes from a cascade of\n // properties:\n // 1. The value React property\n // 2. The defaultValue React property\n // 3. Otherwise there should be no change\n if (props.hasOwnProperty('value')) {\n setDefaultValue(node, props.type, value);\n } else if (props.hasOwnProperty('defaultValue')) {\n setDefaultValue(node, props.type, getToStringValue(props.defaultValue));\n }\n }\n\n {\n // When syncing the checked attribute, it only changes when it needs\n // to be removed, such as transitioning from a checkbox into a text input\n if (props.checked == null && props.defaultChecked != null) {\n node.defaultChecked = !!props.defaultChecked;\n }\n }\n}\nfunction postMountWrapper(element, props, isHydrating) {\n var node = element; // Do not assign value if it is already set. This prevents user text input\n // from being lost during SSR hydration.\n\n if (props.hasOwnProperty('value') || props.hasOwnProperty('defaultValue')) {\n var type = props.type;\n var isButton = type === 'submit' || type === 'reset'; // Avoid setting value attribute on submit/reset inputs as it overrides the\n // default value provided by the browser. See: #12872\n\n if (isButton && (props.value === undefined || props.value === null)) {\n return;\n }\n\n var initialValue = toString(node._wrapperState.initialValue); // Do not assign value if it is already set. This prevents user text input\n // from being lost during SSR hydration.\n\n if (!isHydrating) {\n {\n // When syncing the value attribute, the value property should use\n // the wrapperState._initialValue property. This uses:\n //\n // 1. The value React property when present\n // 2. The defaultValue React property when present\n // 3. An empty string\n if (initialValue !== node.value) {\n node.value = initialValue;\n }\n }\n }\n\n {\n // Otherwise, the value attribute is synchronized to the property,\n // so we assign defaultValue to the same thing as the value property\n // assignment step above.\n node.defaultValue = initialValue;\n }\n } // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug\n // this is needed to work around a chrome bug where setting defaultChecked\n // will sometimes influence the value of checked (even after detachment).\n // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416\n // We need to temporarily unset name to avoid disrupting radio button groups.\n\n\n var name = node.name;\n\n if (name !== '') {\n node.name = '';\n }\n\n {\n // When syncing the checked attribute, both the checked property and\n // attribute are assigned at the same time using defaultChecked. This uses:\n //\n // 1. The checked React property when present\n // 2. The defaultChecked React property when present\n // 3. Otherwise, false\n node.defaultChecked = !node.defaultChecked;\n node.defaultChecked = !!node._wrapperState.initialChecked;\n }\n\n if (name !== '') {\n node.name = name;\n }\n}\nfunction restoreControlledState(element, props) {\n var node = element;\n updateWrapper(node, props);\n updateNamedCousins(node, props);\n}\n\nfunction updateNamedCousins(rootNode, props) {\n var name = props.name;\n\n if (props.type === 'radio' && name != null) {\n var queryRoot = rootNode;\n\n while (queryRoot.parentNode) {\n queryRoot = queryRoot.parentNode;\n } // If `rootNode.form` was non-null, then we could try `form.elements`,\n // but that sometimes behaves strangely in IE8. We could also try using\n // `form.getElementsByName`, but that will only return direct children\n // and won't include inputs that use the HTML5 `form=` attribute. Since\n // the input might not even be in a form. It might not even be in the\n // document. Let's just use the local `querySelectorAll` to ensure we don't\n // miss anything.\n\n\n var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n for (var i = 0; i < group.length; i++) {\n var otherNode = group[i];\n\n if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n continue;\n } // This will throw if radio buttons rendered by different copies of React\n // and the same name are rendered into the same form (same as #1939).\n // That's probably okay; we don't support it just as we don't support\n // mixing React radio buttons with non-React ones.\n\n\n var otherProps = getFiberCurrentPropsFromNode$1(otherNode);\n\n if (!otherProps) {\n {\n throw Error( \"ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.\" );\n }\n } // We need update the tracked value on the named cousin since the value\n // was changed but the input saw no event or value set\n\n\n updateValueIfChanged(otherNode); // If this is a controlled radio button group, forcing the input that\n // was previously checked to update will cause it to be come re-checked\n // as appropriate.\n\n updateWrapper(otherNode, otherProps);\n }\n }\n} // In Chrome, assigning defaultValue to certain input types triggers input validation.\n// For number inputs, the display value loses trailing decimal points. For email inputs,\n// Chrome raises \"The specified value is not a valid email address\".\n//\n// Here we check to see if the defaultValue has actually changed, avoiding these problems\n// when the user is inputting text\n//\n// https://github.com/facebook/react/issues/7253\n\n\nfunction setDefaultValue(node, type, value) {\n if ( // Focused number inputs synchronize on blur. See ChangeEventPlugin.js\n type !== 'number' || node.ownerDocument.activeElement !== node) {\n if (value == null) {\n node.defaultValue = toString(node._wrapperState.initialValue);\n } else if (node.defaultValue !== toString(value)) {\n node.defaultValue = toString(value);\n }\n }\n}\n\nvar didWarnSelectedSetOnOption = false;\nvar didWarnInvalidChild = false;\n\nfunction flattenChildren(children) {\n var content = ''; // Flatten children. We'll warn if they are invalid\n // during validateProps() which runs for hydration too.\n // Note that this would throw on non-element objects.\n // Elements are stringified (which is normally irrelevant\n // but matters for ).\n\n React.Children.forEach(children, function (child) {\n if (child == null) {\n return;\n }\n\n content += child; // Note: we don't warn about invalid children here.\n // Instead, this is done separately below so that\n // it happens during the hydration codepath too.\n });\n return content;\n}\n/**\n * Implements an host component that warns when `selected` is set.\n */\n\n\nfunction validateProps(element, props) {\n {\n // This mirrors the codepath above, but runs for hydration too.\n // Warn about invalid children here so that client and hydration are consistent.\n // TODO: this seems like it could cause a DEV-only throw for hydration\n // if children contains a non-element object. We should try to avoid that.\n if (typeof props.children === 'object' && props.children !== null) {\n React.Children.forEach(props.children, function (child) {\n if (child == null) {\n return;\n }\n\n if (typeof child === 'string' || typeof child === 'number') {\n return;\n }\n\n if (typeof child.type !== 'string') {\n return;\n }\n\n if (!didWarnInvalidChild) {\n didWarnInvalidChild = true;\n\n error('Only strings and numbers are supported as children.');\n }\n });\n } // TODO: Remove support for `selected` in .\n\n\n if (props.selected != null && !didWarnSelectedSetOnOption) {\n error('Use the `defaultValue` or `value` props on instead of ' + 'setting `selected` on .');\n\n didWarnSelectedSetOnOption = true;\n }\n }\n}\nfunction postMountWrapper$1(element, props) {\n // value=\"\" should make a value attribute (#6219)\n if (props.value != null) {\n element.setAttribute('value', toString(getToStringValue(props.value)));\n }\n}\nfunction getHostProps$1(element, props) {\n var hostProps = _assign({\n children: undefined\n }, props);\n\n var content = flattenChildren(props.children);\n\n if (content) {\n hostProps.children = content;\n }\n\n return hostProps;\n}\n\nvar didWarnValueDefaultValue$1;\n\n{\n didWarnValueDefaultValue$1 = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n\n if (ownerName) {\n return '\\n\\nCheck the render method of `' + ownerName + '`.';\n }\n\n return '';\n}\n\nvar valuePropNames = ['value', 'defaultValue'];\n/**\n * Validation function for `value` and `defaultValue`.\n */\n\nfunction checkSelectPropTypes(props) {\n {\n ReactControlledValuePropTypes.checkPropTypes('select', props);\n\n for (var i = 0; i < valuePropNames.length; i++) {\n var propName = valuePropNames[i];\n\n if (props[propName] == null) {\n continue;\n }\n\n var isArray = Array.isArray(props[propName]);\n\n if (props.multiple && !isArray) {\n error('The `%s` prop supplied to must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum());\n } else if (!props.multiple && isArray) {\n error('The `%s` prop supplied to must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum());\n }\n }\n }\n}\n\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n var options = node.options;\n\n if (multiple) {\n var selectedValues = propValue;\n var selectedValue = {};\n\n for (var i = 0; i < selectedValues.length; i++) {\n // Prefix to avoid chaos with special keys.\n selectedValue['$' + selectedValues[i]] = true;\n }\n\n for (var _i = 0; _i < options.length; _i++) {\n var selected = selectedValue.hasOwnProperty('$' + options[_i].value);\n\n if (options[_i].selected !== selected) {\n options[_i].selected = selected;\n }\n\n if (selected && setDefaultSelected) {\n options[_i].defaultSelected = true;\n }\n }\n } else {\n // Do not set `select.value` as exact behavior isn't consistent across all\n // browsers for all cases.\n var _selectedValue = toString(getToStringValue(propValue));\n\n var defaultSelected = null;\n\n for (var _i2 = 0; _i2 < options.length; _i2++) {\n if (options[_i2].value === _selectedValue) {\n options[_i2].selected = true;\n\n if (setDefaultSelected) {\n options[_i2].defaultSelected = true;\n }\n\n return;\n }\n\n if (defaultSelected === null && !options[_i2].disabled) {\n defaultSelected = options[_i2];\n }\n }\n\n if (defaultSelected !== null) {\n defaultSelected.selected = true;\n }\n }\n}\n/**\n * Implements a host component that allows optionally setting the\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\n * stringable. If `multiple` is true, the prop must be an array of stringables.\n *\n * If `value` is not supplied (or null/undefined), user actions that change the\n * selected option will trigger updates to the rendered options.\n *\n * If it is supplied (and not null/undefined), the rendered options will not\n * update in response to user actions. Instead, the `value` prop must change in\n * order for the rendered options to update.\n *\n * If `defaultValue` is provided, any options with the supplied values will be\n * selected.\n */\n\n\nfunction getHostProps$2(element, props) {\n return _assign({}, props, {\n value: undefined\n });\n}\nfunction initWrapperState$1(element, props) {\n var node = element;\n\n {\n checkSelectPropTypes(props);\n }\n\n node._wrapperState = {\n wasMultiple: !!props.multiple\n };\n\n {\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue$1) {\n error('Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components');\n\n didWarnValueDefaultValue$1 = true;\n }\n }\n}\nfunction postMountWrapper$2(element, props) {\n var node = element;\n node.multiple = !!props.multiple;\n var value = props.value;\n\n if (value != null) {\n updateOptions(node, !!props.multiple, value, false);\n } else if (props.defaultValue != null) {\n updateOptions(node, !!props.multiple, props.defaultValue, true);\n }\n}\nfunction postUpdateWrapper(element, props) {\n var node = element;\n var wasMultiple = node._wrapperState.wasMultiple;\n node._wrapperState.wasMultiple = !!props.multiple;\n var value = props.value;\n\n if (value != null) {\n updateOptions(node, !!props.multiple, value, false);\n } else if (wasMultiple !== !!props.multiple) {\n // For simplicity, reapply `defaultValue` if `multiple` is toggled.\n if (props.defaultValue != null) {\n updateOptions(node, !!props.multiple, props.defaultValue, true);\n } else {\n // Revert the select back to its default unselected state.\n updateOptions(node, !!props.multiple, props.multiple ? [] : '', false);\n }\n }\n}\nfunction restoreControlledState$1(element, props) {\n var node = element;\n var value = props.value;\n\n if (value != null) {\n updateOptions(node, !!props.multiple, value, false);\n }\n}\n\nvar didWarnValDefaultVal = false;\n\n/**\n * Implements a