{"_id":"@2e32/react-radio","_rev":"2-8ca76295ad549d1e173208df43c86078","name":"@2e32/react-radio","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@2e32/react-radio","version":"1.0.0","keywords":["2e32","ui","frontend","component","radio","react","react-component","react-radio"],"author":{"name":"konstantin_b"},"license":"MIT","_id":"@2e32/react-radio@1.0.0","maintainers":[{"name":"2e32","email":"bogucharov.dev@gmail.com"}],"homepage":"https://github.com/2e32/react-radio#readme","bugs":{"url":"https://github.com/2e32/react-radio/issues"},"dist":{"shasum":"df6f50f15ee4b08aff9dbbaf1a7903b50fd6dd87","tarball":"https://registry.npmjs.org/@2e32/react-radio/-/react-radio-1.0.0.tgz","fileCount":42,"integrity":"sha512-mOK/yRVTm+MwFTYGZDCZ8PjAeHbp+UGToY74lRoFeWcXQXMAMILyhNNa3lZeFYlP/gJGEu1SLIbSiQKGXYb4DA==","signatures":[{"sig":"MEUCIDnkvVADEm6tnR59qKY+fHIcktvCprDseo8eHWwfOWrfAiEA+nfNgD4kTdX4dcyC6ptIDzZ+PvRJsNaLlB/a8J9xvCY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72460},"main":"dist/js/cjs/index.js","types":"dist/js/types/index.d.ts","module":"dist/js/esm/index.js","exports":{".":{"types":"./dist/js/types/index.d.ts","import":"./dist/js/esm/index.js","default":"./dist/js/esm/index.js","require":"./dist/js/cjs/index.js"},"./css":"./dist/css/index.css"},"gitHead":"e69e6fc0b48d8b971cd3b9e249ff9d6a981dd778","scripts":{"lint":"eslint --fix .","build":"npm run clean && node build.js && tsc","clean":"rimraf dist","tsc:config":"tsc --showConfig","lint:config":"eslint --print-config *.*","prettier:check":"prettier --check .","prettier:format":"prettier --write ."},"_npmUser":{"name":"2e32","email":"bogucharov.dev@gmail.com"},"repository":{"url":"git+https://github.com/2e32/react-radio.git","type":"git"},"_npmVersion":"10.7.0","description":"A React radio component","directories":{},"_nodeVersion":"20.15.0","dependencies":{"classnames":"^2.5.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.46.0","rimraf":"^5.0.1","esbuild":"^0.19.0","prettier":"^3.0.1","typescript":"5.1.6","@types/react":"^18.2.20","eslint-plugin-react":"^7.33.1","@typescript-eslint/parser":"^6.3.0","eslint-plugin-react-hooks":"^4.6.0","@typescript-eslint/eslint-plugin":"^6.3.0"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react-radio_1.0.0_1741032085816_0.8553710493349547","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@2e32/react-radio","version":"1.1.0","description":"A React radio component","keywords":["2e32","ui","frontend","component","radio","radio group","react","react-component","react-radio","react-radio-group"],"author":{"name":"konstantin_b"},"repository":{"type":"git","url":"git+https://github.com/2e32/react-radio.git"},"license":"MIT","exports":{".":{"types":"./dist/js/types/index.d.ts","import":"./dist/js/esm/index.js","require":"./dist/js/cjs/index.js","default":"./dist/js/esm/index.js"},"./css":"./dist/css/index.css"},"main":"dist/js/cjs/index.js","module":"dist/js/esm/index.js","types":"dist/js/types/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && node build.js && tsc","tsc:config":"tsc --showConfig","prettier:check":"prettier --check .","prettier:format":"prettier --write .","lint":"eslint --fix .","lint:config":"eslint --print-config *.*"},"peerDependencies":{"react":"^18.0.0","react-dom":"^18.0.0"},"devDependencies":{"@types/react":"^18.2.20","@typescript-eslint/eslint-plugin":"^6.3.0","@typescript-eslint/parser":"^6.3.0","esbuild":"^0.19.0","eslint":"^8.46.0","eslint-plugin-react":"^7.33.1","eslint-plugin-react-hooks":"^4.6.0","prettier":"^3.0.1","rimraf":"^5.0.1","typescript":"5.1.6"},"dependencies":{"classnames":"^2.5.1"},"_id":"@2e32/react-radio@1.1.0","gitHead":"7b454174e280c849b6572037609434c2a1609852","bugs":{"url":"https://github.com/2e32/react-radio/issues"},"homepage":"https://github.com/2e32/react-radio#readme","_nodeVersion":"20.15.0","_npmVersion":"10.7.0","dist":{"integrity":"sha512-FvdcoinlureqMAb/ft62ptoZ5ks9vp+ZRCLLhcbL2H8S9QZV7gF9RrwZwB021HnDNKhkiWTzylXPJM6i3g9RFA==","shasum":"ed195d785edd0643875781464ada030295969403","tarball":"https://registry.npmjs.org/@2e32/react-radio/-/react-radio-1.1.0.tgz","fileCount":76,"unpackedSize":141288,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDfOCf0Eq3E9R15MUS+TBdbJWoz88ZPhbYSXaKf88bCngIhAPJIPrLR13dzcd/1d4BJh1mZKJKr1UIMAdNx4tZzCxwO"}]},"_npmUser":{"name":"2e32","email":"bogucharov.dev@gmail.com"},"directories":{},"maintainers":[{"name":"2e32","email":"bogucharov.dev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-radio_1.1.0_1744832840061_0.05043661983957426"},"_hasShrinkwrap":false}},"time":{"created":"2025-03-03T20:01:25.741Z","modified":"2025-04-16T19:47:20.558Z","1.0.0":"2025-03-03T20:01:26.044Z","1.1.0":"2025-04-16T19:47:20.366Z"},"bugs":{"url":"https://github.com/2e32/react-radio/issues"},"author":{"name":"konstantin_b"},"license":"MIT","homepage":"https://github.com/2e32/react-radio#readme","keywords":["2e32","ui","frontend","component","radio","radio group","react","react-component","react-radio","react-radio-group"],"repository":{"type":"git","url":"git+https://github.com/2e32/react-radio.git"},"description":"A React radio component","maintainers":[{"name":"2e32","email":"bogucharov.dev@gmail.com"}],"readme":"# @2e32/react-radio\n\n[English (en)](README.md)\n\nКомпоненты радиокнопка и группа радиокнопок для React.\n\n## Установка\n\nnpm\n\n```bash\nnpm i @2e32/react-radio\n```\n\nyarn\n\n```bash\nyarn add @2e32/react-radio\n```\n\n## Использование Radio\n\nApp.js\n\n```javascript\n// Единожды подключить стиль на уровне приложения (точки входа)\nimport '@2e32/react-radio/css';\n\nconst App = () => <Page />;\n\nexport default App;\n```\n\nPage.js\n\n```javascript\nimport { useState, useCallback } from 'react';\n// Импортировать компонент\nimport Radio from '@2e32/react-radio';\n\nconst Page = () => {\n  const [value, setValue] = useState<string>();\n\n  return (\n    <Radio checked={value === 'one'} value=\"one\" onChange={setValue}>\n      One\n    </Radio>\n    <Radio checked={value === 'two'} value=\"two\" onChange={setValue}>\n      Two\n    </Radio>\n  );\n};\n\nexport default Page;\n```\n\n## Свойства Radio\n\n<table>\n  <thead>\n    <tr>\n      <th>Название</th>\n      <th>Тип</th>\n      <th>Значение по умолчанию</th>\n      <th>Описание</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>ref</td>\n      <td>\n        <code>React.Ref&lt;HTMLSpanElement&gt;</code>\n      </td>\n      <td></td>\n      <td>Ссылка для доступа к DOM-узлу компонента.</td>\n    </tr>\n    <tr>\n      <td>id</td>\n      <td>\n        <code>string</code>\n      </td>\n      <td></td>\n      <td>Идентификатор элемента в документе.</td>\n    </tr>\n    <tr>\n      <td>name</td>\n      <td>\n        <code>string</code>\n      </td>\n      <td></td>\n      <td>Имя элемента.</td>\n    </tr>\n    <tr>\n      <td>value</td>\n      <td>\n        <code>T</code>\n      </td>\n      <td></td>\n      <td>Значение элемента формы.</td>\n    </tr>\n    <tr>\n      <td>checked</td>\n      <td>\n        <code>boolean</code>\n      </td>\n      <td></td>\n      <td>\n        Значение, указывающее отмечен ли элемент управления меткой. При значении <code>true</code> метка\n        установлена, в противном случае - не установлена.\n      </td>\n    </tr>\n    <tr>\n      <td>children</td>\n      <td>\n        <code>React.ReactNode</code>\n      </td>\n      <td></td>\n      <td>Содержимое связанное с радиокнопкой (текстовая подпись).</td>\n    </tr>\n    <tr>\n      <td>hint</td>\n      <td>\n        <code>React.ReactNode</code>\n      </td>\n      <td></td>\n      <td>Подсказка.</td>\n    </tr>\n    <tr>\n      <td>className</td>\n      <td>\n        <code>string</code>\n      </td>\n      <td></td>\n      <td>CSS-класс.</td>\n    </tr>\n    <tr>\n      <td>style</td>\n      <td>\n        <code>React.CSSProperties</code>\n      </td>\n      <td></td>\n      <td>Стиль.</td>\n    </tr>\n    <tr>\n      <td>boxClassName</td>\n      <td>\n        <code>string</code>\n      </td>\n      <td></td>\n      <td>CSS-класс контейнера, в котором располагается метка.</td>\n    </tr>\n    <tr>\n      <td>inputClassName</td>\n      <td>\n        <code>string</code>\n      </td>\n      <td></td>\n      <td>CSS-класс элемента input.</td>\n    </tr>\n    <tr>\n      <td>labelClassName</td>\n      <td>\n        <code>string</code>\n      </td>\n      <td></td>\n      <td>CSS-класс контейнера, в котором располагается текст.</td>\n    </tr>\n    <tr>\n      <td>hintClassName</td>\n      <td>\n        <code>string</code>\n      </td>\n      <td></td>\n      <td>CSS-класс hint.</td>\n    </tr>\n    <tr>\n      <td>checkmarkPosition</td>\n      <td>\n        <code>'left' | 'right' | 'top' | 'bottom'</code>\n      </td>\n      <td>\n        <code>'left'</code>\n      </td>\n      <td>\n        Позиция отображения метки относительно контента радиокнопки.\n      </td>\n    </tr>\n    <tr>\n      <td>checkmarkAlign</td>\n      <td>\n        <code>'start' | 'center' | 'end'</code>\n      </td>\n      <td>\n        <code>'center'</code>\n      </td>\n      <td>Выравнивание метки относительно контента радиокнопки.</td>\n    </tr>\n    <tr>\n      <td>disabled</td>\n      <td>\n        <code>boolean</code>\n      </td>\n      <td>\n        <code>false</code>\n      </td>\n      <td>Компонент отключен (метка не может быть выбрана, получение фокуса запрещено).</td>\n    </tr>\n    <tr>\n      <td>readOnly</td>\n      <td>\n        <code>boolean</code>\n      </td>\n      <td>\n        <code>false</code>\n      </td>\n      <td>Компонент только на чтение (состояние метки не может быть изменено).</td>\n    </tr>\n    <tr>\n      <td>autoFocus</td>\n      <td>\n        <code>boolean</code>\n      </td>\n      <td>\n        <code>false</code>\n      </td>\n      <td>Компонент должен находится в фокусе при монтировании.</td>\n    </tr>\n    <tr>\n      <td>block</td>\n      <td>\n        <code>boolean</code>\n      </td>\n      <td>\n        <code>false</code>\n      </td>\n      <td>Компонент занимает всю ширину контейнера.</td>\n    </tr>\n    <tr>\n      <td>tabIndex</td>\n      <td>\n        <code>number</code>\n      </td>\n      <td>\n        <code>0</code>\n      </td>\n      <td>Значение для настройки фокуса элемента.</td>\n    </tr>\n    <tr>\n      <td>renderIcon</td>\n      <td>\n        <code>function</code>\n      </td>\n      <td></td>\n      <td>\n        Отображает иконку радиокнопки.\n        <br />\n        <br />\n        ⚠️ Используйте этот метод для собственной стилизации метки.\n        <br />\n        <br />\n        <code>(props: RenderIconProps&lt;T&gt;) => React.ReactNode</code>\n      </td>\n    </tr>\n    <tr>\n      <td>onChange</td>\n      <td>\n        <code>function</code>\n      </td>\n      <td></td>\n      <td>\n        Вызывается при выборе значения.\n        <br />\n        <br />\n        <code>\n          (value: NonNullable&lt;T&gt;, event: React.ChangeEvent&lt;HTMLInputElement&gt;) => void\n        </code>\n      </td>\n    </tr>\n  </tbody>\n</table>\n\n## Использование RadioGroup\n\n```javascript\nimport { useState } from 'react';\nimport Radio from '@2e32/react-radio';\n\nconst Page = () => {\n  const [value, setValue] = useState<string>();\n\n  return (\n    <Radio.Group value={value} options={['One', 'Two', 'Three']} onChange={setValue} />\n  );\n};\n\nexport default Page;\n```\n\n## Свойства RadioGroup\n\n<table>\n  <thead>\n    <tr>\n      <th>Название</th>\n      <th>Тип</th>\n      <th>Значение по умолчанию</th>\n      <th>Описание</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>ref</td>\n      <td>\n        <code>React.Ref&lt;HTMLSpanElement&gt;</code>\n      </td>\n      <td></td>\n      <td>Ссылка для доступа к DOM-узлу компонента.</td>\n    </tr>\n    <tr>\n      <td>value</td>\n      <td>\n        <code>V</code>\n      </td>\n      <td></td>\n      <td>Значение группы.</td>\n    </tr>\n    <tr>\n      <td>label</td>\n      <td>\n        <code>React.ReactNode</code>\n      </td>\n      <td></td>\n      <td>Подпись группы.</td>\n    </tr>\n    <tr>\n      <td>hint</td>\n      <td>\n        <code>React.ReactNode</code>\n      </td>\n      <td></td>\n      <td>Подсказка.</td>\n    </tr>\n    <tr>\n      <td>options</td>\n      <td>\n        <code>Array&lt;O&gt;</code>\n      </td>\n      <td></td>\n      <td>Список опций.</td>\n    </tr>\n    <tr>\n      <td>optionKey</td>\n      <td>\n        <code>string | function</code>\n      </td>\n      <td></td>\n      <td>Вычисляет ключ опции (для случая, когда значения опций не уникальны).</td>\n    </tr>\n    <tr>\n      <td>optionContent</td>\n      <td>\n        <code>string | function</code>\n      </td>\n      <td></td>\n      <td>Вычисляет контент опции.</td>\n    </tr>\n    <tr>\n      <td>optionValue</td>\n      <td>\n        <code>string | function</code>\n      </td>\n      <td></td>\n      <td>Вычисляет значение опции, возвращаемое при выборе опции (change).</td>\n    </tr>\n    <tr>\n      <td>optionDisabled</td>\n      <td>\n        <code>function</code>\n      </td>\n      <td></td>\n      <td>\n        Вычисляет должна ли опция быть отключена (в состоянии <code>disabled</code>).\n        <br />\n        <br />\n        <code>(option: &lt;O&gt;) => boolean</code>\n      </td>\n    </tr>\n    <tr>\n      <td>isValueEqualOption</td>\n      <td>\n        <code>function</code>\n      </td>\n      <td></td>\n      <td>\n        Функция для определения равенства текущего значения <code>value</code> и опции (для\n        определения признака <code>checked</code> у опции).\n        <br />\n        <br />\n        ⚠️ Используйте <code>isValueEqualOption</code> для сравнения <code>value</code> и опции,\n        если они в виде объектов или представлены разными типами. По умолчанию они сравниваются с\n        помощью <code>Object.is</code>.\n        <br />\n        <br />\n        <code>(value: Nullable&lt;V&gt;, option: &lt;O&gt;) => boolean</code>\n      </td>\n    </tr>\n    <tr>\n      <td>className</td>\n      <td>\n        <code>string</code>\n      </td>\n      <td></td>\n      <td>CSS-класс.</td>\n    </tr>\n    <tr>\n      <td>style</td>\n      <td>\n        <code>React.CSSProperties</code>\n      </td>\n      <td></td>\n      <td>Стиль.</td>\n    </tr>\n    <tr>\n      <td>labelClassName</td>\n      <td>\n        <code>string</code>\n      </td>\n      <td></td>\n      <td>CSS-класс контейнера, в котором располагается текстовая подпись.</td>\n    </tr>\n    <tr>\n      <td>hintClassName</td>\n      <td>\n        <code>string</code>\n      </td>\n      <td></td>\n      <td>CSS-класс hint.</td>\n    </tr>\n    <tr>\n      <td>disabled</td>\n      <td>\n        <code>boolean</code>\n      </td>\n      <td>\n        <code>false</code>\n      </td>\n      <td>Компонент отключен (опция не может быть выбрана, получение фокуса запрещено).</td>\n    </tr>\n    <tr>\n      <td>readOnly</td>\n      <td>\n        <code>boolean</code>\n      </td>\n      <td>\n        <code>false</code>\n      </td>\n      <td>Компонент только на чтение (опция не может быть выбрана).</td>\n    </tr>\n    <tr>\n      <td>block</td>\n      <td>\n        <code>boolean</code>\n      </td>\n      <td>\n        <code>false</code>\n      </td>\n      <td>Компонент занимает всю ширину контейнера.</td>\n    </tr>\n    <tr>\n      <td>vertical</td>\n      <td>\n        <code>boolean</code>\n      </td>\n      <td>\n        <code>false</code>\n      </td>\n      <td>Опции располагаются по вертикали.</td>\n    </tr>\n    <tr>\n      <td>required</td>\n      <td>\n        <code>boolean</code>\n      </td>\n      <td>\n        <code>false</code>\n      </td>\n      <td>\n        Значение должно быть обязательно заполнено (добавляет в label знак обязательности).\n      </td>\n    </tr>\n    <tr>\n      <td>asteriskIcon</td>\n      <td>\n        <code>React.ReactNode</code>\n      </td>\n      <td>*</td>\n      <td>Иконка обязательности заполнения.</td>\n    </tr>\n    <tr>\n      <td>asteriskPosition</td>\n      <td>\n        <code>'left' | 'right'</code>\n      </td>\n      <td>\n        <code>'right'</code>\n      </td>\n      <td>Позиция иконки обязательности.</td>\n    </tr>\n    <tr>\n      <td>asteriskClassName</td>\n      <td>\n        <code>string</code>\n      </td>\n      <td></td>\n      <td>\n        CSS-класс контейнера, в котором располагается <code>asteriskIcon</code>.\n      </td>\n    </tr>\n    <tr>\n      <td>renderIcon</td>\n      <td>\n        <code>function</code>\n      </td>\n      <td></td>\n      <td>\n        Отображает иконку радиокнопки.\n        <br />\n        <br />\n        ⚠️ Используйте этот метод для собственной стилизации метки.\n        <br />\n        <br />\n        <code>(props: RenderIconProps&lt;O&gt;) => React.ReactNode</code>\n      </td>\n    </tr>\n    <tr>\n      <td>renderOption</td>\n      <td>\n        <code>function</code>\n      </td>\n      <td></td>\n      <td>\n        Отображает опцию (иконку, контент).\n        <br />\n        <br />\n        ⚠️ Используйте этот метод изменения структуры и стилизации опции (её метки, контента).\n        <br />\n        <br />\n        <code>(props: RenderOptionProps&lt;O&gt;) => React.ReactNode</code>\n      </td>\n    </tr>\n    <tr>\n      <td>onChange</td>\n      <td>\n        <code>function</code>\n      </td>\n      <td></td>\n      <td>\n        Вызывается при выборе значения.\n        <br />\n        <br />\n        <code>\n          (value: &lt;V&gt;, event: React.ChangeEvent&lt;HTMLInputElement&gt;) => void\n        </code>\n      </td>\n    </tr>\n  </tbody>\n</table>\n\n## Примеры\n\nСмотри [storybook](https://github.com/2e32/react-radio-storybook).\n\n## Лицензия\n\n[MIT](https://choosealicense.com/licenses/mit)\n","readmeFilename":"README.ru.md"}