{"id":15225218,"url":"https://github.com/shurygindv/bs-rsuite-ui-react","last_synced_at":"2025-09-02T03:33:52.910Z","repository":{"id":54654803,"uuid":"215117155","full_name":"shurygindv/bs-rsuite-ui-react","owner":"shurygindv","description":"Reason bindings for React Suite UI library","archived":false,"fork":false,"pushed_at":"2021-02-06T13:30:36.000Z","size":140,"stargazers_count":27,"open_issues_count":1,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-27T02:20:56.651Z","etag":null,"topics":["bs-rsuite-react","bucklescript","bucklescript-bindings","reason","reason-react","reasonml","reasonml-bindings","rsuite-react"],"latest_commit_sha":null,"homepage":"","language":"Reason","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shurygindv.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-14T18:28:19.000Z","updated_at":"2023-04-27T23:19:01.000Z","dependencies_parsed_at":"2022-08-13T23:00:39.682Z","dependency_job_id":null,"html_url":"https://github.com/shurygindv/bs-rsuite-ui-react","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/shurygindv/bs-rsuite-ui-react","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shurygindv%2Fbs-rsuite-ui-react","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shurygindv%2Fbs-rsuite-ui-react/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shurygindv%2Fbs-rsuite-ui-react/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shurygindv%2Fbs-rsuite-ui-react/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shurygindv","download_url":"https://codeload.github.com/shurygindv/bs-rsuite-ui-react/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shurygindv%2Fbs-rsuite-ui-react/sbom","scorecard":{"id":821715,"data":{"date":"2025-08-11","repo":{"name":"github.com/shurygindv/bs-rsuite-ui-react","commit":"b549054ce1ea933bf9b56a06421ad0fbfe80aadc"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 1/20 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/shurygindv/bs-rsuite-ui-react/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/shurygindv/bs-rsuite-ui-react/ci.yml/master?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   1 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":8,"reason":"2 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-29mw-wpgm-hmr9","Warn: Project is vulnerable to: GHSA-35jh-r3h4-6jhm"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 13 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T15:46:23.841Z","repository_id":54654803,"created_at":"2025-08-23T15:46:23.841Z","updated_at":"2025-08-23T15:46:23.841Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273225309,"owners_count":25067265,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-02T02:00:09.530Z","response_time":77,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bs-rsuite-react","bucklescript","bucklescript-bindings","reason","reason-react","reasonml","reasonml-bindings","rsuite-react"],"created_at":"2024-09-28T18:05:11.343Z","updated_at":"2025-09-02T03:33:52.890Z","avatar_url":"https://github.com/shurygindv.png","language":"Reason","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ReasonML bindings for [Rsuite UI React library](https://rsuitejs.com)\n\n[![npm version](https://badge.fury.io/js/bs-rsuite-ui-react.svg)](https://badge.fury.io/js/bs-rsuite-ui-react)\n![bs rsuite ui CI](https://github.com/shurygindv/bs-rsuite-ui-react/workflows/bs%20rsuite%20ui%20CI/badge.svg)\n\n[Official overview](https://rsuitejs.com/en/components/overview) (bindings according it)\n\np.s bindings from an enthusiast 🙂\n\n\u003csub\u003e\u003cb\u003eDeprecated: ~~https://www.npmjs.com/package/@sdv-studio/bs-rsuite-ui-react~~\u003c/b\u003e\u003c/sub\u003e\n\n\u003csub\u003e\u003cb\u003euse\u003c/b\u003e `npm i bs-rsuite-ui-react` instead `npm i @sdv-studio/bs-rsuite-ui-react`\u003c/sub\u003e\n\n## Plans\n\n1. Cover all documented components ✅\n2. Compare with official GitHub repo\n3. Check TODOs, fixes ⌛\n4. [Example project](https://github.com/shurygindv/vote-system-frontend) ✅\n5. Improve DX (reuse, variants instead string as possible and etc.) ⌛\n6. Tests, codegen\n\n## Roadmap\n\n✅ = done\u003cbr\u003e\n🌓 = not full support (temp) \u003cbr\u003e\n🛑 = unimplemented\u003cbr\u003e\n\n|     Type     | Component                            | Status |\n| :----------: | ------------------------------------ | :----: |\n|   General    | `\u003cButton /\u003e`; `\u003cButtonGroup /\u003e`      |   ✅   |\n|   General    | `\u003cIcon /\u003e`; `\u003cIconButton /\u003e`         |   ✅   |\n|   General    | `\u003cTooltip /\u003e`                        |   ✅   |\n|   General    | `\u003cPopover /\u003e;\u003cWhisper /\u003e`            |   ✅   |\n|   General    | `Alert module`                       |   ✅   |\n|   General    | `Notification module`                |   ✅   |\n|   General    | `\u003cMessage /\u003e`                        |   ✅   |\n|   General    | `\u003cLoader /\u003e`                         |   ✅   |\n|   General    | `\u003cModal /\u003e`                          |   ✅   |\n|   General    | `\u003cDrawer /\u003e`                         |   ✅   |\n|   General    | `\u003cAlert /\u003e`                          |   ✅   |\n|   General    | `\u003cDivider /\u003e`                        |   ✅   |\n|   General    | `\u003cProgress /\u003e`                       |   ✅   |\n|   General    | `\u003cPlaceholder /\u003e`                    |   ✅   |\n|     :-:      | ------------------------------------ |        |\n|  Navigation  | `\u003cDropdown /\u003e`                       |   ✅   |\n|  Navigation  | `\u003cNav /\u003e`                            |   ✅   |\n|  Navigation  | `\u003cNavbar /\u003e`                         |   ✅   |\n|  Navigation  | `\u003cSidenav /\u003e`                        |   ✅   |\n|  Navigation  | `\u003cSteps /\u003e`                          |   ✅   |\n|  Navigation  | `\u003cPagination /\u003e`                     |   ✅   |\n|  Navigation  | `\u003cBreadcrumb /\u003e`                     |   ✅   |\n|     :-:      | ------------------------------------ |  :-:   |\n|  Data Entry  | `\u003cForm /\u003e`                           |   🌓   |\n|  Data Entry  | `\u003cControlLabel /\u003e`                   |   ✅   |\n|  Data Entry  | `\u003cFormGroup /\u003e`                      |   ✅   |\n|  Data Entry  | `\u003cFormControl /\u003e`                    |   ✅   |\n|  Data Entry  | `\u003cHelpBlock /\u003e`                      |   ✅   |\n|  Data Entry  | `\u003cCheckbox /\u003e`                       |   ✅   |\n|  Data Entry  | `\u003cRadio /\u003e`; `\u003cRadioGroup /\u003e`        |   ✅   |\n|  Data Entry  | `\u003cInput /\u003e`                          |   ✅   |\n|  Data Entry  | `\u003cInputNumber /\u003e`                    |   ✅   |\n|  Data Entry  | `\u003cAutoComplete /\u003e`                   |   ✅   |\n|  Data Entry  | `\u003cToggle /\u003e`                         |   ✅   |\n|  Data Entry  | `\u003cInputPicker /\u003e`                    |   ✅   |\n|  Data Entry  | `\u003cTagPicker /\u003e`                      |   ✅   |\n|  Data Entry  | `\u003cSelectPicker /\u003e`                   |   ✅   |\n|  Data Entry  | `\u003cCheckPicker /\u003e`                    |   ✅   |\n|  Data Entry  | `\u003cToggle /\u003e`                         |   ✅   |\n|  Data Entry  | `\u003cTreePicker /\u003e`                     |   ✅   |\n|  Data Entry  | `\u003cCheckTreePicker /\u003e`                |   ✅   |\n|  Data Entry  | `\u003cCascader /\u003e`                       |   ✅   |\n|  Data Entry  | `\u003cMultiCascader /\u003e`                  |   ✅   |\n|  Data Entry  | `\u003cDatePicker /\u003e`                     |   ✅   |\n|  Data Entry  | `\u003cDateRangePicker /\u003e`                |   ✅   |\n|  Data Entry  | `\u003cSlider /\u003e`                         |   ✅   |\n|  Data Entry  | `\u003cUploader /\u003e`                       |   ✅   |\n|     :-:      | ------------------------------------ |  :-:   |\n| Data Display | `\u003cAvatar /\u003e`                         |   ✅   |\n| Data Display | `\u003cBadge /\u003e`                          |   ✅   |\n| Data Display | `\u003cTable /\u003e` + Cell/Column/Header     |   ✅   |\n| Data Display | `\u003cTree /\u003e`                           |   ✅   |\n| Data Display | `\u003cCheckTree /\u003e`                      |   ✅   |\n| Data Display | `\u003cPanel /\u003e`                          |   ✅   |\n| Data Display | `\u003cTimeline /\u003e`                       |   ✅   |\n| Data Display | `\u003cTag /\u003e;\u003cTagGroup/\u003e`                |   ✅   |\n| Data Display | `\u003cList /\u003e`                           |   ✅   |\n| Data Display | `\u003cCalendar /\u003e`                       |   ✅   |\n| Data Display | `\u003cCarousel /\u003e`                       |   ✅   |\n|     :-:      | ------------------------------------ |  :-:   |\n|    Layout    | `\u003cGrid /\u003e`; `\u003cRow /\u003e`; `\u003cCol /\u003e`     |   ✅   |\n|    Layout    | `\u003cFlexboxGrid /\u003e`                    |   ✅   |\n|    Layout    | `\u003cContainer /\u003e`                      |   ✅   |\n|     :-:      | ------------------------------------ |  :-:   |\n|    Utils     | `\u003cAnimation /\u003e`                      |   ✅   |\n|    Utils     | `\u003cPortal /\u003e`                         |   ✅   |\n|    Utils     | `Schema module`                      |   🛑   |\n|    Utils     | `DOMHelper module`                   |   ✅   |\n|     :-:      | ------------------------------------ |  :-:   |\n| Undocumented | `\u003cSafeAnchor /\u003e`                     |   ✅   |\n\n## Installation\n\n**I**. Add `bs-rsuite-ui-react` binding as dependency\n\n```\nnpm i bs-rsuite-ui-react\nor\nyarn add bs-rsuite-ui-react\nor\nyarn add \"https://github.com/shurygindv/bs-rsuite-ui-react.git\"\n```\n\n**II**. Also we need to say `bsb`: heey, look! Seems, `bs-rsuite-ui-react` perfectly complements you, let's add it to `bs-dependencies`\n\n`...somewhere in your bsconfig.json:`\n\n```reason\n  ...\n      \"bs-dependencies\": [\n        \"reason-react\",\n        ...,\n        \"bs-rsuite-ui-react\"\n    ],\n  ...\n```\n\n**III**. We would be to see a sea of colors, sky and sun, there are two ways to achieve it, import:\n\n`LESS`\n\n```reason\n[%bs.raw {|require('rsuite/lib/styles/index.less')|}];\n```\n\nor as plain `CSS`\n\n```reason\n[%bs.raw {|require('rsuite/dist/styles/rsuite-default.css')|}];\n```\n\n## Usage\n\nAll bindings are in `RsuiteUi` namespace, let's try! Some **examples**\n\n**Notification**\n\n```reason\n RsuiteUi.Notification._open(props); // props is RsuiteUi.Notification.Props.t\n RsuiteUi.Notification.closeAll();\n\n RsuiteUi.Notification.success(RsuiteUi.Notification.Props.make(\n   ~title = React.string(\"I'm title\"),\n   ~description = React.string(\"I'm desc\"),\n   ~placement=\"bottomStart\",\n   ()\n ));\n```\n\n**CheckPicker**\n\n```reason\n let item = RsuiteUi.RsuiteTypes.DataItemType.make(\n  ~value = \"value\",\n  ~label = React.string(\"value\"),\n  ()\n );\n\n \u003cRsuiteUi.CheckPicker data={[|item|]} /\u003e\n```\n\n**Animation**\n\n```reason\n  let (isVisible, setVisibility) = React.useState(_ =\u003e false);\n\n  React.useEffect0(_ =\u003e {\n    Js.Global.setTimeout(_ =\u003e {\n      setVisibility(_ =\u003e true);\n    }, 200);\n    None\n  });\n\n  \u003cRsuiteUi.Animation.Bounce\n    _in={isVisible}\n  \u003e\n    \u003cdiv\u003e\n      {React.string(\"look at me\")}\n    \u003c/div\u003e\n  \u003c/RsuiteUi.Animation.Bounce\u003e\n```\n\n**Table**\n\n```reason\n  let items = [|{\n    \"name\": \"some name\",\n    \"description\": \"some description\"\n  }, {\n    \"name\": \"some name\",\n    \"description\": \"some description\"\n  }|];\n\n  // where `dataKey` is keyof items (\u003cTable.Cell dataKey={..}\u003e)\n  RsuiteUi.(\n      \u003cTable\n          height={420}\n          data={items}\n          onSortColumn={(sortColumn, _sortType) =\u003e {\n            Js.log(sortColumn);\n          }}\n        \u003e\n          \u003cTable.Column width={50} align=`center\u003e\n            \u003cTable.HeaderCell\u003e\n              {React.string(\"Name\")}\n            \u003c/Table.HeaderCell\u003e\n\n            \u003cTable.Cell dataKey=\"name\" /\u003e\n          \u003c/Table.Column\u003e\n\n          \u003cTable.Column width={100} flexGrow={2}\u003e\n            \u003cTable.HeaderCell\u003e\n               {React.string(\"Description\")}\n            \u003c/Table.HeaderCell\u003e\n\n            \u003cTable.Cell dataKey=\"description\" /\u003e\n          \u003c/Table.Column\u003e\n      \u003c/Table\u003e\n    );\n```\n\n**Modal**\n\n```reason\n  \u003cRsuiteUi.Modal show={true}\u003e\n      \u003cRsuiteUi.Modal.Header\u003e\n         {React.string(\"Header\")}\n      \u003c/RsuiteUi.Modal.Header\u003e\n\n       \u003cRsuiteUi.Modal.Title\u003e\n         {React.string(\"Title\")}\n      \u003c/RsuiteUi.Modal.Title\u003e\n\n       \u003cRsuiteUi.Modal.Body\u003e\n        {React.string(\"Body\")}\n      \u003c/RsuiteUi.Modal.Body\u003e\n\n      \u003cRsuiteUi.Modal.Footer\u003e\n       {React.string(\"Footer\")}\n      \u003c/RsuiteUi.Modal.Footer\u003e\n  \u003c/RsuiteUi.Modal\u003e\n```\n\n## Caveats\n\n**I**. Next components: `\u003cMultiCascader /\u003e`, `\u003cCascader /\u003e`, `\u003cDatePicker /\u003e`, `Notification module` have **\\_open** prop instead **open**\n\n**Example:**\n\n```reason\n  \u003cMultiCascader _open={true} /\u003e\n  \u003cCascader _open={true} /\u003e\n  \u003cDatePicker _open={true} /\u003e\n\n\n   Notification._open(...); // instead Notification.open()\n```\n\n**II**. **\\_in** instead **in** prop\n\n```reason\n   \u003cRsuiteUi.Animation.Bounce _in={isVisible} /\u003e\n\n   \u003cRsuiteUi.Animation.Transition _in={isVisible} /\u003e\n\n   \u003cRsuiteUi.Animation.Slide _in={isVisible} /\u003e\n```\n\n**III**. Similar situation with `\u003cFlexboxGrid /\u003e`; Sometimes we would be to use prop `justify` with **end** value, but we should use **end\\_** instead\n\n**Example**\n\n```reason\n  \u003cFlexboxGrid justify=`end_ /\u003e\n  \u003cFlexboxGrid justify=`spaceAround /\u003e\n  \u003cFlexboxGrid justify=`center /\u003e\n```\n\n## Contributions\n\nIt would be great, make our world better!\nAll contributions are welcomed.\n\n## FAQ (just to save time...)\n\n**1**. How can we pass `Component` as prop?\n\n- Put it in a separate function\n- See: https://github.com/reasonml/reason-react/blob/master/docs/component-as-prop.md\n\n**2**. What the different between `ReasonReact.string` and `React.string`?\n\n- They are the same (aliases), prefer `React.string`\n- See: https://github.com/reasonml/reason-react/issues/406 comments\n\n**3**. How can we pass string as child?\n\n- Use `React.string(\"example\")` instead `\"example\"`\n\n**4**. What `_type`, `_open`, `_val`, `_in` mean as `Component` prop?\n\n- are reserved in Reason/Ocaml (aliases `type`, `open` and so on),\n- See: https://bucklescript.github.io/docs/en/object\n  and https://github.com/reasonml/reason-react/issues/475\n\n**5**. Why do we use an array structure instead of a immutable list everywhere?\n\n- ReasonML lists are represented as nested 2-element arrays in JavaScript (an encoding of cons pairs).\n\nAnd many other useful details about Reason React here!\nSee: https://github.com/reasonml/reason-react/tree/master/docs\n\n**Good luck!** 🙂\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshurygindv%2Fbs-rsuite-ui-react","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshurygindv%2Fbs-rsuite-ui-react","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshurygindv%2Fbs-rsuite-ui-react/lists"}