{"id":19489348,"url":"https://github.com/salute-developers/plasma-react-native","last_synced_at":"2026-02-14T20:03:06.275Z","repository":{"id":241604663,"uuid":"804928298","full_name":"salute-developers/plasma-react-native","owner":"salute-developers","description":null,"archived":false,"fork":false,"pushed_at":"2025-08-20T09:19:25.000Z","size":7740,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"dev","last_synced_at":"2025-08-20T10:14:18.057Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/salute-developers.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-05-23T14:42:16.000Z","updated_at":"2025-08-20T08:12:45.000Z","dependencies_parsed_at":"2024-06-12T20:22:33.543Z","dependency_job_id":"97be16de-ed3b-46a8-8e5c-641c5f6a02f8","html_url":"https://github.com/salute-developers/plasma-react-native","commit_stats":null,"previous_names":["salute-developers/plasma-react-native"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/salute-developers/plasma-react-native","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salute-developers%2Fplasma-react-native","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salute-developers%2Fplasma-react-native/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salute-developers%2Fplasma-react-native/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salute-developers%2Fplasma-react-native/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/salute-developers","download_url":"https://codeload.github.com/salute-developers/plasma-react-native/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salute-developers%2Fplasma-react-native/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29454703,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T15:52:44.973Z","status":"ssl_error","status_checked_at":"2026-02-14T15:52:11.208Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2024-11-10T21:08:11.003Z","updated_at":"2026-02-14T20:03:06.260Z","avatar_url":"https://github.com/salute-developers.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Plasma React Native\n\nЭто репозиторий, который содержит набор библиотек, реализующие дизайн системы для платформы react-native.\n\n## Файловая структура\n\n-   `core` - содержит библиотеки, которые являются обязательными зависимостями для работы дизайн системы.\n-   `docs` - содержит документацию по всем компонентам библиотеки.\n-   `libraries` - содержит пользовательские библиотеки компонентов.\n-   `packages` - содержит утилитарные пакеты, необходимые для корректной работы дизайн системы.\n-   `themes` - содержит пользовательские темы, разбитые на вертикали, сгенерированные на основе файлов из [репозитория](https://github.com/salute-developers/theme-converter).\n-   `scripts` - содержит набор скриптов, которые позволяют переключать режим разработки дл выбранной платформы - mobile или tv.\n\n### Директория `core`\n\nСодержит библиотеки, которые являются обязательными зависимостями для работы дизайн системы.\n\n### Директория `docs`\n\nСодержит документацию по всем компонент библиотеки `core-components`.\n\n### Директория `libraries`\n\nСодержит пользовательские библиотеки компонентов.\n\n### Директория `packages`\n\nСодержит утилитарные пакеты, необходимые для корректной работы дизайн системы, а также набор иконок всех размеров.\n\n### Директория `themes`\n\nСодержит пользовательские темы, разбитые на вертикали, сгенерированные на основе файлов из [репозитория](https://github.com/salute-developers/theme-converter).\n\n### Директория `scripts`\n\nСодержит набор скриптов, которые позволяют переключать режим разработки дл выбранной платформы - mobile или tv.\n\n## Разработка\n\nДля разработки используются инструменты [Expo SDK](https://docs.expo.dev/workflow/upgrading-expo-sdk-walkthrough/) и [storybook/react-native](https://github.com/storybookjs/react-native).\n\nЕсть несколько способов разработки библиотек компонентов для устройств:\n\n1. Через веб-приложение\n2. Через ios симулятор (требуется наличие `xcode`, версии 15 и выше). Подробная инструкция по установке - https://docs.expo.dev/workflow/ios-simulator/\n3. Через android симулятор (требуется наличие `android studio`). Подробная инструкция по установке - https://docs.expo.dev/workflow/android-studio-emulator/\n\n### Подготовка\n\nФайлы `package.json` и `package-lock.json` в директориях libraries/\\*\\* и core/core-components не комитятся, поэтому при первом запуске необходимо использовать команду `npm run bootstrap:mobile` или `npm run bootstrap:tv` в зависимости от выбранной платформы в корне проекта.\n\nЭти команды вызовут скрипты, которые создадут `package.json` и `package-lock.json` на основе файлов `platforms/mobile/package.json` (`platforms/tv/package.json`) и `platforms/mobile/package-lock.json` (`platforms/tv/package-lock.json`).\n\nПри дальнейшей разработке можно использовать команду `npx lerna bootstrap` как обычно.\n\nТакже перед выполнением всех дальнейших команд необходимо выполнить в корне проекта.\n\n```bash\n$ npm install\n```\n\n### Поддержка актуального состояния\n\nЕсли нужно обновить файл `platforms/mobile/package.json` (`platforms/tv/package.json`), то необходимо внести все изменения в `package.json` как при обычной разработке и вызвать команду в директории с библиотекой компонент (например plasma-b2c)\n\n```bash\n$ npm run package-update\n```\n\nЛибо в корне проекта вызывать (в зависимости от используемой платформы)\n\n```bash\n$ npm run platform:tv\n```\n\nЕсли забыли обновить файлы, то при пуше в удаленный репозиторий выполнится pre-push команда, которая автоматически обновит файлы и выведет дифф, если он есть.\n\n### Запуск storybook\n\nНеобходимо перейти в нужную директорию с библиотекой компонент (например plasma-b2c)\n\n```bash\n$ cd ./libraries/plasma-b2c\n```\n\nДля сборки storybook на iPhone / AppleTV необходимо запустить iOS симулятор (через `Xcode`) и выполнить команду\n\n```bash\n$ npm run storybook:ios\n```\n\nДля сборки storybook на Android / AndroidTV необходимо запустить Android симулятор (через `Android Studio`) и выполнить команду\n\n```bash\n$ npm run storybook:android\n```\n\n## Troubleshooting\n\n### Платформа TV\n\n#### Ошибка при вызове sync у default модуля glob\n\nЕсли при попытке собрать билды под android и ios возникает ошибка в пакете @react-native-tvos/config-tv. То это из-за того, что в файле withTVAndroidRemoveFlipper в методе mainApplicationFilePath, идёт попытка обратиться к методу sync через поле default модуля glob. Вероятно ошибка связана с версиями nodejs, т.к. если убрать default, то ошибка уйдёт.\n\nЧтобы не делать это каждый раз в ручную, создан path, который это делает автоматически после установки пакетов.\n\n#### Ошибка -ld_classic\n\nЕсли возникает [ошибка](https://github.com/godotengine/godot/issues/83111) при сборке в файле `project.pbxproj`, необходимо удалить -ld_classic либо обновить xcode до версии 15.\n\n#### Ошибка @color/splashscreen_background\n\nЕсли возникает ошибка из-за отсуствии ресурса по ссылке `@color/splashscreen_background` после сборке нужно поменять в splashscreen.xml\n\n```xml\n\u003citem android:drawable=\"@color/splashscreen_background\"/\u003e\n```\n\nна\n\n```xml\n\u003citem android:drawable=\"@android:color/black\"/\u003e\n```\n\n#### Проблема со списком компонент в storybook на tv\n\nЕсли запустить сторибуке на телевизорах, то секция с доступными сторями не будет отображать компоненты. В [этом](https://github.com/storybookjs/react-native/issues/568) эту багу не починили (хотя пытались), поэтому нужно в библиотеке @storybook/react-native в файле index.js строку\n\n```js\nsectionList: {\n    flex: 1;\n}\n```\n\nпоменять на\n\n```js\nsectionList: {\n    height: '100%';\n}\n```\n\nЧтобы не делать это каждый раз в ручную, создан path, который это делает автоматически после установки пакетов.\n\n#### Особенность рендера\n\nВ android нельзя указывать отрицательный отступы, т.к. контент, который выходит за пределы контейнера (в котором рендерится компонент) будет обрезаться: https://reactnative.dev/docs/0.73/style#known-issues\n\n#### Пересборка проекта\n\nЕсть возникают какие-то не описанные здесь ошибки, можно выполнить команду в директории библиотеки компонент, которая полностью пересоберёт проекты для android и ios.\n\n```bash\n$ npm run storybook:tv-prebuild\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsalute-developers%2Fplasma-react-native","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsalute-developers%2Fplasma-react-native","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsalute-developers%2Fplasma-react-native/lists"}