diff --git a/.circleci/config.yml b/.circleci/config.yml index bf39cff6ef..20743cf2ad 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,19 +3,19 @@ version: 2.1 executors: node-maintenance: docker: - - image: cimg/node:21.7.3 + - image: cimg/node:22.1.0 auth: username: smarthrinc password: $DOCKER_HUB_ACCESS_TOKEN node-active-lts: docker: - - image: cimg/node:21.7.3 + - image: cimg/node:22.1.0 auth: username: smarthrinc password: $DOCKER_HUB_ACCESS_TOKEN node-active-lts-browsers: docker: - - image: cimg/node:21.7.3-browsers + - image: cimg/node:22.1.0-browsers auth: username: smarthrinc password: $DOCKER_HUB_ACCESS_TOKEN @@ -49,6 +49,7 @@ commands: keys: - pnpm-packages-reg-{{ checksum "pnpm-lock.yaml" }} - run: pnpm ui install + - run: pnpm ui exec playwright install - save_cache: paths: - ~/.cache/pnpm @@ -65,11 +66,11 @@ commands: run-chromatic: steps: - checkout - - run: pnpm ui run chromatic --project-token=${CHROMATIC_PROJECT_TOKEN} --exit-zero-on-changes --only-changed + - run: pnpm ui run chromatic --project-token=${CHROMATIC_PROJECT_TOKEN} --exit-zero-on-changes --only-changed --storybook-base-dir=packages/smarthr-ui run-chromatic-master: steps: - checkout - - run: STORYBOOK_NODE_ENV="production" pnpm ui run chromatic --project-token=${CHROMATIC_PROJECT_TOKEN} --auto-accept-changes --only-changed + - run: STORYBOOK_NODE_ENV="production" pnpm ui run chromatic --project-token=${CHROMATIC_PROJECT_TOKEN} --auto-accept-changes --only-changed --storybook-base-dir=packages/smarthr-ui install-noto-sans-cjk-jp: steps: - run: diff --git a/.github/workflows/publishRelease.yml b/.github/workflows/publishRelease.yml index 625d029af3..ade2dc7742 100644 --- a/.github/workflows/publishRelease.yml +++ b/.github/workflows/publishRelease.yml @@ -33,11 +33,11 @@ jobs: if: ${{ env.IS_PRERELEASE == 'false' }} - run: pnpm ui release --prerelease if: ${{ env.IS_PRERELEASE == 'true' }} - - run: pnpm publish --filter smarthr-ui + - run: pnpm publish --filter smarthr-ui --no-git-checks if: ${{ env.IS_PRERELEASE == 'false' }} env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - - run: pnpm publish --filter smarthr-ui --tag prerelease + - run: pnpm publish --filter smarthr-ui --tag prerelease --no-git-checks if: ${{ env.IS_PRERELEASE == 'true' }} env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.node-version b/.node-version index 87834047a6..62d44807d0 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -20.12.2 +20.13.0 diff --git a/package.json b/package.json index 4e2c436dff..f94a6d5c18 100644 --- a/package.json +++ b/package.json @@ -4,17 +4,17 @@ "description": "SmartHR ui components built with React.", "author": "SmartHR-UI Team", "devDependencies": { - "@commitlint/cli": "^19.2.2", + "@commitlint/cli": "^19.3.0", "@commitlint/config-conventional": "^19.2.2", "eslint": "^8.57.0", - "eslint-config-smarthr": "^6.28.0", + "eslint-config-smarthr": "^6.30.0", "eslint-plugin-storybook": "^0.8.0", "husky": "^9.0.11", "lint-staged": "^15.2.2", "prettier": "^3.2.5", "prettier-config-smarthr": "^1.0.0", "prettier-plugin-tailwindcss": "^0.5.14", - "stylelint": "^16.3.1", + "stylelint": "^16.5.0", "stylelint-config-prettier": "^9.0.5", "stylelint-config-smarthr": "^3.0.0", "stylelint-config-standard": "^36.0.0", @@ -30,7 +30,7 @@ "pnpm": { "overrides": { "@babel/helper-compilation-targets": "^7.23.6", - "@types/react": "^18.3.1", + "@types/react": "^18.3.2", "minimist": "1.2.8", "react": "^18.3.1", "react-dom": "^18.3.1" diff --git a/packages/smarthr-ui/README.md b/packages/smarthr-ui/README.md new file mode 100644 index 0000000000..1a8183e193 --- /dev/null +++ b/packages/smarthr-ui/README.md @@ -0,0 +1,85 @@ +

SmartHR UI

+ +
+ +SmartHR は、SmartHR 基本機能からはじまり、今では多くのオプション機能を提供しています。 +SmartHR UI はそのすべてのアプリケーションの UI コンポーネントを共通化して、開発生産性や完成度を向上させるための UI コンポーネントライブラリです。 + +[![npm version](https://badge.fury.io/js/smarthr-ui.svg)](https://badge.fury.io/js/smarthr-ui) +[![CircleCI](https://circleci.com/gh/kufu/smarthr-ui.svg?style=shield)](https://circleci.com/gh/kufu/smarthr-ui) +![e2e](https://github.com/kufu/smarthr-ui/workflows/e2e/badge.svg) + +
+ +## コンポーネント + +`master`ブランチのコンポーネント一覧は Storybook から確認できます。 +https://story.smarthr-ui.dev + +## インストール + +SmartHR-UI は[npm package](https://www.npmjs.com/package/smarthr-ui)として提供しています。 + +```sh +// with npm +npm install smarthr-ui + +// with yarn +yarn add smarthr-ui + +// with pnpm +pnpm add smarthr-ui +``` + +peerDependencies として React, React-DOM, styled-components が必要です。 + +```sh +// with npm +npm install react react-dom styled-components + +// with yarn +yarn add react react-dom styled-components + +// with pnpm +pnpm add react react-dom styled-components +``` + +## 使いかた + +最もシンプルで簡単な使用例を紹介します。 + +```tsx +import React from 'react' +import { createRoot } from 'react-dom/client' +import { createTheme, ThemeProvider, Button } from 'smarthr-ui' +import 'smarthr-ui/smarthr-ui.css' + +const theme = createTheme() + +const App: React.FC = () => ( + + + +) + +const container = document.getElementById('app') +const root = createRoot(container) +root.render() +``` + +## コントリビュート + +SmartHR UI は OSS です。[コントリビュート](https://github.com/kufu/smarthr-ui/blob/master/CONTRIBUTING.md)をお待ちしています。 + +## 更新履歴 + +更新履歴は[Releases](https://github.com/kufu/smarthr-ui/releases)を確認してください。 + +## デザイン・ロゴの利用について + +- SmartHR UI のデザインデータは[Figma](https://www.figma.com/community/file/978607227374353992/SmartHR-UI)で公開しています。 +- SmartHR のロゴを利用する場合は[SmartHR Design System](https://smarthr.design/)の利用規約を確認してください。 + +## ライセンス + +このプロダクトは[MIT](https://github.com/kufu/smarthr-ui/blob/master/LICENSE)の条件に従ってライセンスされています。 diff --git a/packages/smarthr-ui/package.json b/packages/smarthr-ui/package.json index ec8f68acd0..5d1058a81e 100644 --- a/packages/smarthr-ui/package.json +++ b/packages/smarthr-ui/package.json @@ -6,13 +6,13 @@ "dependencies": { "@smarthr/wareki": "^1.2.0", "css-loader": "^7.1.1", - "dayjs": "^1.11.10", + "dayjs": "^1.11.11", "lodash.merge": "^4.6.2", "lodash.range": "^3.2.0", "polished": "^4.3.0", "postcss-loader": "^8.1.1", "react-draggable": "^4.4.6", - "react-icons": "^5.1.0", + "react-icons": "^5.2.1", "react-innertext": "^1.1.5", "react-transition-group": "^4.4.5", "style-loader": "^4.0.0", @@ -30,6 +30,7 @@ "@storybook/addon-interactions": "^8.0.10", "@storybook/addon-storysource": "^8.0.10", "@storybook/addon-styling": "^1.3.7", + "@storybook/addon-styling-webpack": "^1.0.0", "@storybook/addon-viewport": "^8.0.10", "@storybook/addon-webpack5-compiler-babel": "^3.0.3", "@storybook/blocks": "^8.0.10", @@ -39,18 +40,17 @@ "@storybook/react-webpack5": "^8.0.10", "@storybook/source-loader": "^8.0.10", "@storybook/test": "^8.0.10", - "@storybook/addon-styling-webpack": "^1.0.0", - "@storybook/test-runner": "^0.17.0", + "@storybook/test-runner": "^0.18.0", "@storybook/theming": "^8.0.10", - "@swc/core": "^1.4.17", + "@swc/core": "^1.5.5", "@swc/jest": "^0.2.36", - "@testing-library/react": "^15.0.6", + "@testing-library/react": "^15.0.7", "@types/jest": "^29.5.12", "@types/lodash.merge": "^4.6.9", "@types/lodash.range": "^3.2.9", - "@types/node": "^20.12.8", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.2.25", + "@types/node": "^20.12.11", + "@types/react": "^18.3.2", + "@types/react-dom": "^18.3.0", "@types/react-test-renderer": "^17.0.9", "@types/react-transition-group": "^4.4.10", "@types/styled-components": "^5.1.34", @@ -59,31 +59,32 @@ "babel-loader": "^9.1.3", "babel-plugin-polyfill-corejs2": "^0.4.11", "babel-plugin-polyfill-regenerator": "^0.6.2", - "chromatic": "^11.3.0", + "chromatic": "^11.3.2", "ecma-version-validator-webpack-plugin": "^1.2.1", "fs-extra": "^11.2.0", - "glob": "10.3.12", + "glob": "10.3.15", "http-server": "^14.1.1", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "jest-styled-components": "^7.2.0", "memory-fs": "^0.5.0", "npm-run-all": "^4.1.5", + "playwright": "^1.44.0", "postcss": "^8.4.38", "postcss-styled-syntax": "^0.6.4", "postcss-syntax": "^0.36.2", - "puppeteer": "^22.6.5", + "puppeteer": "^22.8.0", "react": "^18.3.1", "react-docgen-typescript": "^2.2.2", "react-dom": "^18.3.1", "react-ga4": "^2.1.0", - "react-test-renderer": "^18.2.0", - "rimraf": "^5.0.5", + "react-test-renderer": "^18.3.1", + "rimraf": "^5.0.7", "standard-version": "^9.3.2", "storybook": "^8.0.10", - "storybook-addon-pseudo-states": "^3.0.1", + "storybook-addon-pseudo-states": "^3.1.1", "styled-components": "^5.3.11", - "testcafe": "3.5.0", + "testcafe": "3.6.0", "ts-loader": "^9.5.1", "ttypescript": "^1.5.15", "typescript-plugin-styled-components": "^3.0.0", diff --git a/packages/smarthr-ui/src/components/DefinitionList/DefinitionList.stories.tsx b/packages/smarthr-ui/src/components/DefinitionList/DefinitionList.stories.tsx index 1a87993cb8..7de112fa2f 100644 --- a/packages/smarthr-ui/src/components/DefinitionList/DefinitionList.stories.tsx +++ b/packages/smarthr-ui/src/components/DefinitionList/DefinitionList.stories.tsx @@ -115,6 +115,14 @@ export const All: StoryFn = () => ( ), description: '標準は subBlockTitle です。blockTitle と subBlockTitle があります。', + fullWidth: true, + }, + { + term: '空文字の場合も line-height 込みの高さを保ちます。', + description: '', + }, + { + term: 'undefined の場合', }, ]} termStyleType="blockTitle" diff --git a/packages/smarthr-ui/src/components/DefinitionList/DefinitionListItem.tsx b/packages/smarthr-ui/src/components/DefinitionList/DefinitionListItem.tsx index 9637b1839f..d605ba7541 100644 --- a/packages/smarthr-ui/src/components/DefinitionList/DefinitionListItem.tsx +++ b/packages/smarthr-ui/src/components/DefinitionList/DefinitionListItem.tsx @@ -22,7 +22,7 @@ const definitionListItem = tv({ ], termEl: 'smarthr-ui-DefinitionListItem-term', descriptionEl: - 'smarthr-ui-DefinitionListItem-description shr-ms-[initial] shr-pb-0.25 min-h-[theme(lineHeight.normal)]', + 'smarthr-ui-DefinitionListItem-description shr-ms-[initial] shr-pb-0.25 shr-min-h-[calc(1em*theme(lineHeight.normal))]', }, variants: { fullWidth: { diff --git a/packages/smarthr-ui/src/components/DropZone/DropZone.stories.tsx b/packages/smarthr-ui/src/components/DropZone/DropZone.stories.tsx index 88744575ed..ea63a75bf1 100644 --- a/packages/smarthr-ui/src/components/DropZone/DropZone.stories.tsx +++ b/packages/smarthr-ui/src/components/DropZone/DropZone.stories.tsx @@ -26,7 +26,7 @@ export const All: StoryFn = () => ( With children - ここにドラッグ&ドロップ + ここにドラッグアンドドロップ または @@ -36,7 +36,7 @@ export const All: StoryFn = () => ( Button accepting only image files - ここにドラッグ&ドロップ + ここにドラッグアンドドロップ または diff --git a/packages/smarthr-ui/src/components/Dropdown/DropdownMenuButton/DropdownMenuButton.tsx b/packages/smarthr-ui/src/components/Dropdown/DropdownMenuButton/DropdownMenuButton.tsx index 77dcf02214..2988942797 100644 --- a/packages/smarthr-ui/src/components/Dropdown/DropdownMenuButton/DropdownMenuButton.tsx +++ b/packages/smarthr-ui/src/components/Dropdown/DropdownMenuButton/DropdownMenuButton.tsx @@ -16,7 +16,6 @@ import { Dropdown, DropdownContent, DropdownScrollArea, DropdownTrigger } from ' import { AnchorButton, Button, BaseProps as ButtonProps } from '../../Button' import { RemoteDialogTrigger } from '../../Dialog' import { FaCaretDownIcon, FaEllipsisIcon } from '../../Icon' -import { Stack } from '../../Layout' type Actions = ActionItem | ActionItem[] @@ -214,14 +213,12 @@ export const DropdownMenuButton: FC = ({ - - - {React.Children.map(children, (item, i) => - // MEMO: {flag && )} diff --git a/packages/smarthr-ui/src/components/Switch/Switch.tsx b/packages/smarthr-ui/src/components/Switch/Switch.tsx index af47f6c9ad..d5d5cb2e73 100644 --- a/packages/smarthr-ui/src/components/Switch/Switch.tsx +++ b/packages/smarthr-ui/src/components/Switch/Switch.tsx @@ -1,173 +1,58 @@ -import React, { InputHTMLAttributes, forwardRef } from 'react' -import styled, { css } from 'styled-components' +import React, { InputHTMLAttributes, forwardRef, useMemo } from 'react' +import { tv } from 'tailwind-variants' -import { Theme, useTheme } from '../../hooks/useTheme' import { FaCheckIcon } from '../Icon' -type Props = InputHTMLAttributes - -export const Switch = forwardRef( - ({ disabled, className, ...props }, ref) => { - const theme = useTheme() - return ( - - {/* eslint-disable-next-line smarthr/a11y-input-has-name-attribute */} - - - - ) +const switchStyle = tv({ + slots: { + wrapper: [ + // Switch 本体 + 'shr-border-shorthand shr-relative shr-inline-flex shr-w-[calc(theme(fontSize.base)*2)] shr-items-center shr-rounded-full shr-bg-white', + // 理想的には padding: 2px; だが、box-shadow を outline で使用しているため、border と padding で2pxの疑似余白を作っている。 + 'shr-p-px', + // :focus-visible-within の代替 + 'has-[:focus-visible]:shr-focus-indicator', + 'has-[:checked]:shr-border-[theme(colors.main)] has-[:checked]:shr-bg-main', + 'has-[:disabled]:shr-border-[theme(borderColor.default)] has-[:disabled]:shr-bg-border', + 'forced-colors:has-[:disabled]:shr-border-[GrayText]', + 'supports-[not_selector(:has(+_*))]:shr-border-[revert] supports-[not_selector(:has(+_*))]:shr-bg-[revert]', + + // Switch ツマミ + 'before:shr-box-border before:shr-inline-block before:shr-size-[theme(fontSize.base)] before:shr-scale-[calc(2/3)] before:shr-rounded-full before:shr-border before:shr-border-solid before:shr-border-[theme(colors.grey.30)] before:shr-bg-[theme(colors.grey.30)] before:shr-transition-[transform,margin] before:shr-duration-150 before:shr-ease-out before:shr-content-[""]', + 'has-[:checked]:before:shr-border-shorthand has-[:checked]:before:shr-ms-[theme(fontSize.base)] has-[:checked]:before:shr-scale-100 has-[:checked]:before:shr-bg-white', + 'forced-colors:has-[input:not(:disabled)]:before:shr-bg-[ButtonBorder]', + 'forced-colors:has-[:disabled:not(:checked)]:before:shr-border-solid forced-colors:has-[:disabled:not(:checked)]:before:shr-border-[GrayText]', + 'forced-colors:has-[:disabled:checked]:before:shr-border-[GrayText]', + 'supports-[not_selector(:has(+_*))]:before:hidden', + ], + input: [ + 'shr-absolute shr-inset-0 shr-m-0 shr-h-full shr-w-full shr-cursor-pointer shr-appearance-none shr-rounded-full shr-opacity-0', + 'disabled:shr-cursor-[revert]', + 'supports-[not_selector(:has(+_*))]:shr-static supports-[not_selector(:has(+_*))]:shr-appearance-auto supports-[not_selector(:has(+_*))]:shr-opacity-100 supports-[not_selector(:has(+_*))]:shr-outline-[revert]', + ], + iconWrapper: [ + 'shr-pointer-events-none shr-absolute shr-hidden shr-size-[theme(fontSize.base)] shr-items-center shr-justify-center', + '[:checked~&]:shr-flex', + ], + icon: [ + '[:checked~*>&]:shr-fill-white', + 'forced-colors:[:checked~*>&]:shr-fill-[ButtonText]', + 'forced-colors:[:disabled~*>&]:shr-fill-[GrayText]', + ], }, -) - -const Wrapper = styled.span<{ $disabled: Props['disabled']; themes: Theme }>` - ${({ $disabled, themes: { border, color, fontSize, radius, shadow } }) => css` - position: relative; - display: inline-flex; - align-items: center; - border-radius: calc(${fontSize.M} * 1.25); - border: ${border.shorthand}; - background-color: ${color.WHITE}; - - /* 理想的には padding: 2px; だが、box-shadow を outline で使用しているため、border と padding で2pxの疑似余白を作っている。 */ - padding: 1px; - - /* :focus-visible-within の代替 */ - &:has(:focus-visible) { - ${shadow.focusIndicatorStyles} - } - - ::before, - ::after { - content: ''; - box-sizing: border-box; - display: inline-block; - border-radius: ${radius.full}; - border: ${border.shorthand}; - border-color: ${color.GREY_30}; - background-color: ${color.GREY_30}; - block-size: ${fontSize.M}; - inline-size: ${fontSize.M}; - transition-property: transform, scale; - transition-duration: 150ms; - transition-timing-function: ease-out; - } - - ::before { - scale: ${2 / 3}; - } - - /* ツマミが移動する余白のために存在している */ - ::after { - visibility: hidden; - } - - &:has(:checked) { - border-color: ${color.MAIN}; - background-color: ${color.MAIN}; - - ::before { - scale: unset; - transform: translateX(${fontSize.M}); - border-color: ${color.BORDER}; - background-color: ${color.WHITE}; - } - } - - ${$disabled && - css` - &&& { - cursor: unset; - border-color: ${color.BORDER}; - background-color: ${color.BORDER}; - } - `} - - @media (forced-colors: active) { - ${$disabled - ? css` - &&& { - border-color: GrayText; +}) - &::before, - &::after { - border-color: GrayText; - } - } - ` - : css` - /* ツマミを塗りつぶす https://developer.mozilla.org/en-US/docs/Web/CSS/system-color */ - &&&::before, - &&&::after { - background-color: ButtonBorder; - } - `} - } - - @supports not selector(:has(+ *)) { - border-style: revert; - background-color: revert; - - ::before, - ::after { - display: none; - } - - ${$disabled && - css` - &&& { - background-color: revert; - } - `} - } - `} -` - -const CheckboxInput = styled.input` - position: absolute; - inset: 0; - cursor: pointer; - outline: none; - opacity: 0; - appearance: none; - - /* 古い iOS など inset が効かない環境で領域いっぱいに広げる */ - @supports not (inset: 0) { - width: 100%; - height: 100%; - } - - :disabled { - cursor: revert; - } - - @supports not selector(:has(+ *)) { - position: revert; - opacity: revert; - outline: revert; - appearance: revert; - } -` - -const CheckIcon = styled(FaCheckIcon).attrs({ color: 'WHITE', size: 'XXS' })<{ $themes: Theme }>` - ${({ $themes: { fontSize } }) => css` - position: absolute; - display: none; - - @supports selector(:has(+ *)) { - [type='checkbox']:checked ~ & { - display: unset; - transform: translateX(calc((${fontSize.M} - ${fontSize.XXS}) / 2)); - pointer-events: none; - } - } - - /* 強制カラーモードの時に状態を判別するため */ - @media (forced-colors: active) { - fill: ButtonText; +type Props = InputHTMLAttributes - [type='checkbox']:disabled ~ & { - fill: GrayText; - } - } - `} -` +export const Switch = forwardRef(({ className, ...props }, ref) => { + const { wrapper, input, icon, iconWrapper } = useMemo(() => switchStyle(), []) + return ( + + {/* eslint-disable-next-line smarthr/a11y-input-has-name-attribute */} + + + + + + ) +}) diff --git a/packages/smarthr-ui/src/components/Table/TdCheckbox.tsx b/packages/smarthr-ui/src/components/Table/TdCheckbox.tsx index 998783481e..f08f1c16e8 100644 --- a/packages/smarthr-ui/src/components/Table/TdCheckbox.tsx +++ b/packages/smarthr-ui/src/components/Table/TdCheckbox.tsx @@ -18,16 +18,18 @@ const tdCheckbox = tv({ slots: { inner: 'shr-absolute shr-inset-0 [&:not(:has([disabled]))]:shr-cursor-pointer', wrapper: 'shr-relative shr-w-[theme(fontSize.base)] [&]:shr-p-0.75', + checkbox: '[&]:shr-block', }, }) export const TdCheckbox = forwardRef & Props>( ({ 'aria-labelledby': ariaLabelledby, children, className, ...others }, ref) => { - const { wrapperStyle, innerStyle } = useMemo(() => { - const { wrapper, inner } = tdCheckbox() + const { wrapperStyle, innerStyle, checkboxStyle } = useMemo(() => { + const { wrapper, inner, checkbox } = tdCheckbox() return { wrapperStyle: wrapper({ className }), innerStyle: inner(), + checkboxStyle: checkbox(), } }, [className]) @@ -37,7 +39,12 @@ export const TdCheckbox = forwardRef {/* 使う側で lint をかけるため無効化 */} {/* eslint-disable-next-line smarthr/a11y-input-has-name-attribute */} - + {children && {children}} diff --git a/packages/smarthr-ui/src/components/Table/ThCheckbox.tsx b/packages/smarthr-ui/src/components/Table/ThCheckbox.tsx index 3d071a7c13..7bd7916a76 100644 --- a/packages/smarthr-ui/src/components/Table/ThCheckbox.tsx +++ b/packages/smarthr-ui/src/components/Table/ThCheckbox.tsx @@ -19,16 +19,18 @@ const thCheckbox = tv({ slots: { inner: 'shr-absolute shr-inset-0 [&:not(:has([disabled]))]:shr-cursor-pointer', wrapper: 'shr-relative shr-w-[theme(fontSize.base)] [&]:shr-px-0.75', + checkbox: '[&]:shr-block', }, }) export const ThCheckbox = forwardRef( ({ decorators, className, ...others }, ref) => { - const { wrapperStyle, innerStyle } = useMemo(() => { - const { wrapper, inner } = thCheckbox() + const { wrapperStyle, innerStyle, checkboxStyle } = useMemo(() => { + const { wrapper, inner, checkbox } = thCheckbox() return { wrapperStyle: wrapper({ className }), innerStyle: inner(), + checkboxStyle: checkbox(), } }, [className]) @@ -38,7 +40,7 @@ export const ThCheckbox = forwardRef(
{/* 使う側で lint をかけるため無効化 */} {/* eslint-disable-next-line smarthr/a11y-input-has-name-attribute */} - + {decorators?.checkAllInvisibleLabel?.(CHECK_ALL_INVISIBLE_LABEL) || CHECK_ALL_INVISIBLE_LABEL} diff --git a/packages/smarthr-ui/src/components/Textarea/Textarea.stories.tsx b/packages/smarthr-ui/src/components/Textarea/Textarea.stories.tsx index 676a061c4a..dc2fc14f24 100644 --- a/packages/smarthr-ui/src/components/Textarea/Textarea.stories.tsx +++ b/packages/smarthr-ui/src/components/Textarea/Textarea.stories.tsx @@ -46,14 +46,18 @@ const Template: StoryFn = () => {
  • -