@sakura-ui/sakura-ui 0.1.20 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/package.json +16 -16
  2. package/packages/core/package.json +15 -14
  3. package/packages/core/src/components/Button.tsx +10 -4
  4. package/packages/core/src/components/Card.tsx +11 -8
  5. package/packages/core/src/components/IconButton.tsx +6 -6
  6. package/packages/core/src/components/Link.tsx +2 -1
  7. package/packages/core/src/components/Table.tsx +4 -3
  8. package/packages/core/src/components/buttonStyle.ts +34 -14
  9. package/packages/core/src/components/index.ts +0 -3
  10. package/packages/core/src/index.ts +0 -1
  11. package/packages/core/src/libs/cx.ts +1 -0
  12. package/packages/core/src/libs/forward-ref.ts +7 -4
  13. package/packages/core/src/types/component.ts +7 -6
  14. package/packages/core/tests/Button.test.tsx +30 -0
  15. package/packages/core/tests/Card.test.tsx +30 -7
  16. package/packages/core/tests/vitest.setup.ts +1 -0
  17. package/packages/core/vite.config.ts +3 -2
  18. package/packages/forms/dist/index.cjs.js +92 -81
  19. package/packages/forms/dist/index.es.js +697 -627
  20. package/packages/forms/dist/types/components/Checkbox.d.ts +3 -1
  21. package/packages/forms/dist/types/components/Checkbox.d.ts.map +1 -1
  22. package/packages/forms/dist/types/components/FileInput.d.ts.map +1 -1
  23. package/packages/forms/dist/types/components/Input.d.ts +3 -1
  24. package/packages/forms/dist/types/components/Input.d.ts.map +1 -1
  25. package/packages/forms/dist/types/components/Radio.d.ts +3 -1
  26. package/packages/forms/dist/types/components/Radio.d.ts.map +1 -1
  27. package/packages/forms/dist/types/components/Select.d.ts +3 -1
  28. package/packages/forms/dist/types/components/Select.d.ts.map +1 -1
  29. package/packages/forms/dist/types/components/Textarea.d.ts.map +1 -1
  30. package/packages/forms/dist/types/components/controlled/CheckboxGroup.d.ts +3 -1
  31. package/packages/forms/dist/types/components/controlled/CheckboxGroup.d.ts.map +1 -1
  32. package/packages/forms/dist/types/components/controlled/RadioGroup.d.ts +3 -1
  33. package/packages/forms/dist/types/components/controlled/RadioGroup.d.ts.map +1 -1
  34. package/packages/forms/dist/types/components/controlled/index.d.ts +0 -2
  35. package/packages/forms/dist/types/components/controlled/index.d.ts.map +1 -1
  36. package/packages/forms/dist/types/components/inputStyle.d.ts +13 -0
  37. package/packages/forms/dist/types/components/inputStyle.d.ts.map +1 -0
  38. package/packages/forms/dist/types/index.d.ts +1 -1
  39. package/packages/forms/dist/types/index.d.ts.map +1 -1
  40. package/packages/forms/dist/types/utils/class.d.ts.map +1 -1
  41. package/packages/forms/node_modules/.bin/acorn +17 -0
  42. package/packages/forms/node_modules/.bin/autoprefixer +2 -2
  43. package/packages/forms/node_modules/.bin/browserslist +4 -4
  44. package/packages/forms/node_modules/.bin/eslint +4 -4
  45. package/packages/forms/node_modules/.bin/tailwind +2 -2
  46. package/packages/forms/node_modules/.bin/tailwindcss +2 -2
  47. package/packages/forms/node_modules/.bin/ts-node +4 -4
  48. package/packages/forms/node_modules/.bin/ts-node-cwd +4 -4
  49. package/packages/forms/node_modules/.bin/ts-node-esm +4 -4
  50. package/packages/forms/node_modules/.bin/ts-node-script +4 -4
  51. package/packages/forms/node_modules/.bin/ts-node-transpile-only +4 -4
  52. package/packages/forms/node_modules/.bin/ts-script +4 -4
  53. package/packages/forms/node_modules/.bin/vitest +4 -4
  54. package/packages/forms/package.json +15 -14
  55. package/packages/forms/src/components/Checkbox.tsx +39 -17
  56. package/packages/forms/src/components/FieldsetControl.tsx +1 -1
  57. package/packages/forms/src/components/FileInput.tsx +5 -3
  58. package/packages/forms/src/components/Input.tsx +16 -20
  59. package/packages/forms/src/components/LabelControl.tsx +2 -2
  60. package/packages/forms/src/components/Radio.tsx +34 -19
  61. package/packages/forms/src/components/Select.tsx +41 -31
  62. package/packages/forms/src/components/Textarea.tsx +4 -3
  63. package/packages/forms/src/components/controlled/CheckboxGroup.tsx +11 -3
  64. package/packages/forms/src/components/controlled/RadioGroup.tsx +7 -3
  65. package/packages/forms/src/components/controlled/index.ts +0 -2
  66. package/packages/forms/src/components/inputStyle.ts +83 -0
  67. package/packages/forms/src/index.ts +1 -6
  68. package/packages/forms/src/utils/class.ts +1 -0
  69. package/packages/forms/tests/FieldsetControl.test.tsx +2 -2
  70. package/packages/forms/tests/Input.test.tsx +2 -2
  71. package/packages/forms/tests/LabelControl.test.tsx +2 -2
  72. package/packages/forms/tests/Radio.test.tsx +2 -2
  73. package/packages/forms/tests/vitest.setup.ts +1 -0
  74. package/packages/forms/vite.config.ts +3 -2
  75. package/packages/tailwind-theme-plugin/dist/index.cjs.js +1 -0
  76. package/packages/tailwind-theme-plugin/dist/index.es.js +6476 -0
  77. package/packages/tailwind-theme-plugin/dist/types/index.d.ts +6 -0
  78. package/packages/tailwind-theme-plugin/dist/types/index.d.ts.map +1 -0
  79. package/packages/tailwind-theme-plugin/node_modules/.bin/autoprefixer +17 -0
  80. package/packages/tailwind-theme-plugin/node_modules/.bin/browserslist +17 -0
  81. package/packages/tailwind-theme-plugin/node_modules/.bin/tailwind +17 -0
  82. package/packages/tailwind-theme-plugin/node_modules/.bin/tailwindcss +17 -0
  83. package/packages/tailwind-theme-plugin/node_modules/.bin/ts-node +17 -0
  84. package/packages/tailwind-theme-plugin/node_modules/.bin/ts-node-cwd +17 -0
  85. package/packages/tailwind-theme-plugin/node_modules/.bin/ts-node-esm +17 -0
  86. package/packages/tailwind-theme-plugin/node_modules/.bin/ts-node-script +17 -0
  87. package/packages/tailwind-theme-plugin/node_modules/.bin/ts-node-transpile-only +17 -0
  88. package/packages/tailwind-theme-plugin/node_modules/.bin/ts-script +17 -0
  89. package/packages/{config → tailwind-theme-plugin}/package.json +10 -6
  90. package/packages/tailwind-theme-plugin/src/index.ts +519 -0
  91. package/packages/{config → tailwind-theme-plugin}/vite.config.ts +1 -1
  92. package/packages/config/src/index.ts +0 -347
  93. package/packages/core/.eslintrc.json +0 -25
  94. package/packages/core/src/components/InfoCard.tsx +0 -50
  95. package/packages/forms/coverage/clover.xml +0 -209
  96. package/packages/forms/coverage/coverage-final.json +0 -18
  97. package/packages/forms/coverage/lcov-report/base.css +0 -224
  98. package/packages/forms/coverage/lcov-report/block-navigation.js +0 -87
  99. package/packages/forms/coverage/lcov-report/favicon.png +0 -0
  100. package/packages/forms/coverage/lcov-report/index.html +0 -161
  101. package/packages/forms/coverage/lcov-report/prettify.css +0 -1
  102. package/packages/forms/coverage/lcov-report/prettify.js +0 -2
  103. package/packages/forms/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  104. package/packages/forms/coverage/lcov-report/sorter.js +0 -196
  105. package/packages/forms/coverage/lcov-report/src/components/Checkbox.tsx.html +0 -295
  106. package/packages/forms/coverage/lcov-report/src/components/FieldsetControl.tsx.html +0 -295
  107. package/packages/forms/coverage/lcov-report/src/components/LabelControl.tsx.html +0 -289
  108. package/packages/forms/coverage/lcov-report/src/components/Radio.tsx.html +0 -262
  109. package/packages/forms/coverage/lcov-report/src/components/Select.tsx.html +0 -259
  110. package/packages/forms/coverage/lcov-report/src/components/Text.tsx.html +0 -220
  111. package/packages/forms/coverage/lcov-report/src/components/Textarea.tsx.html +0 -229
  112. package/packages/forms/coverage/lcov-report/src/components/context.ts.html +0 -136
  113. package/packages/forms/coverage/lcov-report/src/components/controlled/CheckboxGroup.tsx.html +0 -244
  114. package/packages/forms/coverage/lcov-report/src/components/controlled/RadioGroup.tsx.html +0 -265
  115. package/packages/forms/coverage/lcov-report/src/components/controlled/SelectControl.tsx.html +0 -205
  116. package/packages/forms/coverage/lcov-report/src/components/controlled/TextControl.tsx.html +0 -202
  117. package/packages/forms/coverage/lcov-report/src/components/controlled/TextareaControl.tsx.html +0 -205
  118. package/packages/forms/coverage/lcov-report/src/components/controlled/index.html +0 -191
  119. package/packages/forms/coverage/lcov-report/src/components/controlled/index.ts.html +0 -100
  120. package/packages/forms/coverage/lcov-report/src/components/index.html +0 -236
  121. package/packages/forms/coverage/lcov-report/src/components/index.ts.html +0 -106
  122. package/packages/forms/coverage/lcov-report/src/index.html +0 -116
  123. package/packages/forms/coverage/lcov-report/src/index.ts.html +0 -136
  124. package/packages/forms/coverage/lcov-report/src/utils/index.html +0 -116
  125. package/packages/forms/coverage/lcov-report/src/utils/index.ts.html +0 -88
  126. package/packages/forms/coverage/lcov.info +0 -434
  127. package/packages/forms/dist/components/Checkbox.js +0 -46
  128. package/packages/forms/dist/components/Checkbox.js.map +0 -1
  129. package/packages/forms/dist/components/FieldsetControl.js +0 -20
  130. package/packages/forms/dist/components/FieldsetControl.js.map +0 -1
  131. package/packages/forms/dist/components/FileInput.js +0 -55
  132. package/packages/forms/dist/components/FileInput.js.map +0 -1
  133. package/packages/forms/dist/components/Input.js +0 -29
  134. package/packages/forms/dist/components/Input.js.map +0 -1
  135. package/packages/forms/dist/components/LabelControl.js +0 -24
  136. package/packages/forms/dist/components/LabelControl.js.map +0 -1
  137. package/packages/forms/dist/components/Radio.js +0 -45
  138. package/packages/forms/dist/components/Radio.js.map +0 -1
  139. package/packages/forms/dist/components/Select.js +0 -41
  140. package/packages/forms/dist/components/Select.js.map +0 -1
  141. package/packages/forms/dist/components/Textarea.js +0 -36
  142. package/packages/forms/dist/components/Textarea.js.map +0 -1
  143. package/packages/forms/dist/components/context.js +0 -8
  144. package/packages/forms/dist/components/context.js.map +0 -1
  145. package/packages/forms/dist/components/controlled/CheckboxGroup.js +0 -12
  146. package/packages/forms/dist/components/controlled/CheckboxGroup.js.map +0 -1
  147. package/packages/forms/dist/components/controlled/InputItem.js +0 -2
  148. package/packages/forms/dist/components/controlled/InputItem.js.map +0 -1
  149. package/packages/forms/dist/components/controlled/RadioGroup.js +0 -12
  150. package/packages/forms/dist/components/controlled/RadioGroup.js.map +0 -1
  151. package/packages/forms/dist/components/controlled/SelectControl.js +0 -10
  152. package/packages/forms/dist/components/controlled/SelectControl.js.map +0 -1
  153. package/packages/forms/dist/components/controlled/TextareaControl.js +0 -10
  154. package/packages/forms/dist/components/controlled/TextareaControl.js.map +0 -1
  155. package/packages/forms/dist/components/controlled/index.js +0 -5
  156. package/packages/forms/dist/components/controlled/index.js.map +0 -1
  157. package/packages/forms/dist/components/index.js +0 -9
  158. package/packages/forms/dist/components/index.js.map +0 -1
  159. package/packages/forms/dist/index.js +0 -3
  160. package/packages/forms/dist/index.js.map +0 -1
  161. package/packages/forms/dist/types/components/controlled/SelectControl.d.ts +0 -10
  162. package/packages/forms/dist/types/components/controlled/SelectControl.d.ts.map +0 -1
  163. package/packages/forms/dist/types/components/controlled/TextareaControl.d.ts +0 -10
  164. package/packages/forms/dist/types/components/controlled/TextareaControl.d.ts.map +0 -1
  165. package/packages/forms/dist/utils/class.js +0 -2
  166. package/packages/forms/dist/utils/class.js.map +0 -1
  167. package/packages/forms/jest.config.ts +0 -11
  168. package/packages/forms/node_modules/.vitest/results.json +0 -1
  169. package/packages/forms/src/components/controlled/SelectControl.tsx +0 -42
  170. package/packages/forms/src/components/controlled/TextareaControl.tsx +0 -42
  171. /package/packages/{config → tailwind-theme-plugin}/tests/index.test.ts +0 -0
  172. /package/packages/{config → tailwind-theme-plugin}/tsconfig.json +0 -0
  173. /package/packages/{config → tailwind-theme-plugin}/tsconfig.node.json +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sakura-ui/sakura-ui",
3
- "version": "0.1.20",
3
+ "version": "0.2.0",
4
4
  "keywords": [],
5
5
  "author": "glassonion1",
6
6
  "homepage": "https://github.com/glassonion1/sakura-ui",
@@ -12,11 +12,14 @@
12
12
  "files": [
13
13
  "packages"
14
14
  ],
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
15
18
  "scripts": {
16
- "build": "pnpm --parallel --filter \"./**\" build"
19
+ "build": "pnpm --parallel --filter=./packages/* build"
17
20
  },
18
21
  "dependencies": {
19
- "@sakura-ui/config": "workspace:*",
22
+ "@sakura-ui/tailwind-theme-plugin": "workspace:*",
20
23
  "@sakura-ui/core": "workspace:*",
21
24
  "@sakura-ui/forms": "workspace:*"
22
25
  },
@@ -26,18 +29,15 @@
26
29
  "tailwindcss": "^3.2.7"
27
30
  },
28
31
  "devDependencies": {
29
- "@types/node": "^18.16.19",
30
- "@typescript-eslint/eslint-plugin": "^6.4.1",
31
- "@typescript-eslint/parser": "^6.4.1",
32
- "@vitejs/plugin-react-swc": "^3.3.2",
33
- "eslint": "^8.47.0",
34
- "eslint-config-prettier": "^9.0.0",
35
- "npm-run-all2": "^6.1.2",
36
- "rimraf": "^5.0.5",
37
- "ts-node": "^10.9.1",
38
- "tsc-alias": "^1.8.7",
39
- "typescript": "^5.1.6",
40
- "vite": "^4.4.2",
41
- "vitest": "^1.3.1"
32
+ "@biomejs/biome": "^1.8.0",
33
+ "@types/node": "^20.14.1",
34
+ "@vitejs/plugin-react-swc": "^3.7.0",
35
+ "npm-run-all2": "^6.2.0",
36
+ "rimraf": "^5.0.7",
37
+ "ts-node": "^10.9.2",
38
+ "tsc-alias": "^1.8.10",
39
+ "typescript": "^5.4.5",
40
+ "vite": "^5.2.12",
41
+ "vitest": "^1.6.0"
42
42
  }
43
43
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sakura-ui/core",
3
- "version": "0.1.36",
3
+ "version": "0.2.0",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "author": "glassonion1",
@@ -25,9 +25,12 @@
25
25
  "files": [
26
26
  "dist"
27
27
  ],
28
+ "publishConfig": {
29
+ "access": "public"
30
+ },
28
31
  "scripts": {
29
32
  "lint": "run-s lint:*",
30
- "lint:eslint": "eslint . --ext .ts,.tsx --fix",
33
+ "lint:lint": "biome lint ./",
31
34
  "lint:prettier": "prettier --write --ignore-path .gitignore './src/*.ts'",
32
35
  "prebuild": "rimraf dist",
33
36
  "build": "run-p build:*",
@@ -41,17 +44,15 @@
41
44
  "tailwindcss": "^3.2.7"
42
45
  },
43
46
  "devDependencies": {
44
- "@testing-library/jest-dom": "^6.4.2",
45
- "@testing-library/react": "^14.2.1",
46
- "@types/react": "^18.2.60",
47
- "@types/react-dom": "^18.2.19",
48
- "autoprefixer": "^10.4.17",
49
- "eslint-plugin-jsx-a11y": "^6.8.0",
50
- "eslint-plugin-react": "^7.33.2",
51
- "jsdom": "^24.0.0",
52
- "postcss": "^8.4.35",
53
- "react": "^18.2.0",
54
- "react-dom": "^18.2.0",
55
- "tailwindcss": "^3.4.1"
47
+ "@testing-library/jest-dom": "^6.4.5",
48
+ "@testing-library/react": "^16.0.0",
49
+ "@types/react": "^18.3.3",
50
+ "@types/react-dom": "^18.3.0",
51
+ "autoprefixer": "^10.4.19",
52
+ "happy-dom": "^14.12.0",
53
+ "postcss": "^8.4.38",
54
+ "react": "^18.3.1",
55
+ "react-dom": "^18.3.1",
56
+ "tailwindcss": "^3.4.3"
56
57
  }
57
58
  }
@@ -1,11 +1,17 @@
1
1
  import { cx } from '../libs/cx'
2
- import { ComponentWithAs } from '../types/component'
2
+ import type { ComponentWithAs } from '../types/component'
3
3
  import { forwardRef } from '../libs/forward-ref'
4
- import { base, getVariantStyle, getSizeStyle } from './buttonStyle'
4
+ import {
5
+ type ButtonVariant,
6
+ type ButtonSize,
7
+ base,
8
+ getVariantStyle,
9
+ getSizeStyle
10
+ } from './buttonStyle'
5
11
 
6
12
  export interface ButtonProps {
7
- variant?: 'primary' | 'secondary'
8
- size?: 'lg' | 'md' | 'sm' | 'xs'
13
+ variant?: ButtonVariant
14
+ size?: ButtonSize
9
15
  }
10
16
 
11
17
  export const Button: ComponentWithAs<'button', ButtonProps> = forwardRef(
@@ -7,7 +7,7 @@ interface IdContextType {
7
7
 
8
8
  const IdContext = React.createContext<IdContextType>({ id: '' })
9
9
 
10
- export interface CardProps extends React.ComponentPropsWithoutRef<'section'> {}
10
+ export interface CardProps extends React.ComponentPropsWithoutRef<'article'> {}
11
11
 
12
12
  export const Card = (props: CardProps) => {
13
13
  const { className, children, ...restProps } = props
@@ -29,13 +29,14 @@ export const Card = (props: CardProps) => {
29
29
 
30
30
  return (
31
31
  <IdContext.Provider value={ctx}>
32
- <section
32
+ <article
33
33
  aria-labelledby={ctx.id}
34
+ aria-describedby={`${ctx.id}-desc`}
34
35
  className={cx(style, className)}
35
36
  {...restProps}
36
37
  >
37
38
  {children}
38
- </section>
39
+ </article>
39
40
  </IdContext.Provider>
40
41
  )
41
42
  }
@@ -43,15 +44,15 @@ export const Card = (props: CardProps) => {
43
44
  export interface CardImgProps extends React.ComponentPropsWithoutRef<'img'> {}
44
45
 
45
46
  export const CardImg = (props: CardImgProps) => {
46
- const { className, children, ...restProps } = props
47
-
48
- const ctx = React.useContext(IdContext)
47
+ const { className, ...restProps } = props
49
48
 
50
49
  const style = `
51
50
  object-cover
51
+ mb-2
52
52
  `
53
53
 
54
- return <img id={ctx.id} className={cx(style, className)} {...restProps} />
54
+ // biome-ignore lint/a11y/useAltText: things to check on the user side
55
+ return <img className={cx(style, className)} {...restProps} />
55
56
  }
56
57
 
57
58
  export interface CardHeaderProps
@@ -82,6 +83,8 @@ export interface CardBodyProps extends React.ComponentPropsWithoutRef<'div'> {}
82
83
  export const CardBody = (props: CardBodyProps) => {
83
84
  const { className, children, ...restProps } = props
84
85
 
86
+ const ctx = React.useContext(IdContext)
87
+
85
88
  const style = `
86
89
  text-base-sm
87
90
  first:pt-4
@@ -90,7 +93,7 @@ export const CardBody = (props: CardBodyProps) => {
90
93
  `
91
94
 
92
95
  return (
93
- <div className={cx(style, className)} {...restProps}>
96
+ <div id={`${ctx.id}-desc`} className={cx(style, className)} {...restProps}>
94
97
  {children}
95
98
  </div>
96
99
  )
@@ -1,5 +1,5 @@
1
1
  import { cx } from '../libs/cx'
2
- import { ComponentWithAs } from '../types/component'
2
+ import type { ComponentWithAs } from '../types/component'
3
3
  import { forwardRef } from '../libs/forward-ref'
4
4
  import { base, getVariantStyle, getSizeStyle } from './buttonStyle'
5
5
 
@@ -25,7 +25,7 @@ export const IconButton: ComponentWithAs<'button', IconButtonProps> =
25
25
  ...restProps
26
26
  } = props
27
27
 
28
- const styleFontSize = `${size === 'xs' ? `scale-105` : `scale-125`}`
28
+ const styleFontSize = `${size === 'xs' ? 'scale-105' : 'scale-125'}`
29
29
 
30
30
  const styleIcon = `
31
31
  inline-block
@@ -37,10 +37,10 @@ export const IconButton: ComponentWithAs<'button', IconButtonProps> =
37
37
  antialiased
38
38
  `
39
39
 
40
- const styleRounded = `${rounded ? `aspect-square !rounded-full !py-0` : ''}`
40
+ const styleRounded = `${rounded ? 'aspect-square !rounded-full !py-0' : ''}`
41
41
 
42
42
  // When text is specified on a button, set the 'aria-hidden' attribute of the icon to true.
43
- const ariaHidden = children ? true : false
43
+ const ariaHidden = !!children
44
44
 
45
45
  return (
46
46
  <Component
@@ -54,7 +54,7 @@ export const IconButton: ComponentWithAs<'button', IconButtonProps> =
54
54
  {...restProps}
55
55
  ref={ref}
56
56
  >
57
- {iconLayout == 'left' && (
57
+ {iconLayout === 'left' && (
58
58
  <span
59
59
  className={cx(styleIcon, styleFontSize)}
60
60
  aria-hidden={ariaHidden}
@@ -63,7 +63,7 @@ export const IconButton: ComponentWithAs<'button', IconButtonProps> =
63
63
  </span>
64
64
  )}
65
65
  {children && <span className="mx-1">{children}</span>}
66
- {iconLayout == 'right' && (
66
+ {iconLayout === 'right' && (
67
67
  <span
68
68
  className={cx(styleIcon, styleFontSize)}
69
69
  aria-hidden={ariaHidden}
@@ -1,7 +1,8 @@
1
1
  import { cx } from '../libs/cx'
2
- import { ComponentWithAs } from '../types/component'
2
+ import type { ComponentWithAs } from '../types/component'
3
3
  import { forwardRef } from '../libs/forward-ref'
4
4
 
5
+ // biome-ignore lint/suspicious/noEmptyInterface:
5
6
  export interface LinkProps {}
6
7
 
7
8
  export const Link: ComponentWithAs<'a', LinkProps> = forwardRef(
@@ -32,7 +32,7 @@ export interface CaptionProps
32
32
  export const Caption = (props: CaptionProps) => {
33
33
  const { className, children, ...restProps } = props
34
34
 
35
- const style = `text-left`
35
+ const style = 'text-left'
36
36
  return (
37
37
  <caption className={cx(style, className)} {...restProps}>
38
38
  {children}
@@ -72,7 +72,7 @@ export const Th = (props: ThProps) => {
72
72
  const style = `
73
73
  p-2
74
74
  bg-[#f8f8fb]
75
- text-base
75
+ text-label
76
76
  text-left
77
77
  `
78
78
  return (
@@ -87,7 +87,7 @@ export interface TrProps extends React.ComponentPropsWithoutRef<'tr'> {}
87
87
  export const Tr = (props: TrProps) => {
88
88
  const { className, children, ...restProps } = props
89
89
 
90
- const style = ``
90
+ const style = ''
91
91
 
92
92
  return (
93
93
  <tr className={cx(style, styleBorder, className)} {...restProps}>
@@ -103,6 +103,7 @@ export const Td = (props: TdProps) => {
103
103
 
104
104
  const style = `
105
105
  p-2
106
+ text-label
106
107
  `
107
108
 
108
109
  return (
@@ -1,3 +1,6 @@
1
+ export type ButtonVariant = 'primary' | 'secondary' | 'tertiary'
2
+ export type ButtonSize = 'lg' | 'md' | 'sm' | 'xs'
3
+
1
4
  export const base = `
2
5
  inline-block
3
6
  text-button
@@ -20,12 +23,12 @@ export const base = `
20
23
  `
21
24
 
22
25
  const primary = `
23
- text-white-1000
26
+ text-white
24
27
  bg-sea-800
25
28
  active:bg-sea-1200
26
29
  hover:bg-sea-900
27
30
  disabled:bg-sumi-500
28
- disabled:text-white-1000
31
+ disabled:text-white
29
32
  `
30
33
 
31
34
  const secondary = `
@@ -39,46 +42,63 @@ const secondary = `
39
42
  disabled:bg-transparent
40
43
  `
41
44
 
42
- const styles: { [key: string]: string } = {
43
- primary: primary,
44
- secondary: secondary
45
- }
45
+ const tertiary = `
46
+ bg-transparent
47
+ text-blue-900
48
+ underline
49
+ hover:bg-blue-200
50
+ hover:text-blue-1000
51
+ active:bg-blue-300
52
+ active:text-blue-1200
53
+ disabled:bg-transparent
54
+ disabled:text-solid-grey-420
55
+ `
46
56
 
47
- export const getVariantStyle = (variant: 'primary' | 'secondary') => {
48
- return styles[variant]
57
+ const styles: { [key in ButtonVariant]: string } = {
58
+ primary: primary,
59
+ secondary: secondary,
60
+ tertiary: tertiary
49
61
  }
50
62
 
51
- const params: {
52
- [key: string]: string
53
- } = {
63
+ const params: { [key in ButtonSize]: string } = {
64
+ // 16(p-4) * 2 + 22(text-button * leading-snug) + boader * 2 = 56px
54
65
  lg: `
55
66
  p-4
56
67
  text-button
57
68
  rounded-lg
69
+ leading-snug
58
70
  `,
71
+ // 12(py-3) * 2 + 22(text-button * leading-snug) + boader * 2 = 48px
59
72
  md: `
60
73
  px-4
61
74
  py-3
62
75
  text-button
63
76
  rounded-lg
77
+ leading-snug
64
78
  `,
79
+ // 6(py-1.5) * 2 + 22(text-button * leading-snug) + boader * 2 = 36px
65
80
  sm: `
66
81
  px-3
67
82
  py-1.5
68
83
  my-1
69
84
  text-button
70
85
  rounded-md
86
+ leading-snug
71
87
  `,
88
+ // 6(py-1.5) * 2 + 14(text-button-sm) + boader * 2 = 28p
72
89
  xs: `
73
90
  px-2
74
- py-[7px]
91
+ py-1.5
75
92
  my-2
76
93
  text-button-sm
77
- !leading-[14px]
78
94
  rounded
79
95
  `
80
96
  }
81
97
 
82
- export const getSizeStyle = (size: 'lg' | 'md' | 'sm' | 'xs') => {
98
+ export const getVariantStyle = (variant: ButtonVariant) => {
99
+ return styles[variant]
100
+ }
101
+
102
+ export const getSizeStyle = (size: ButtonSize) => {
83
103
  return params[size]
84
104
  }
@@ -27,6 +27,3 @@ export type {
27
27
  TrProps,
28
28
  TdProps
29
29
  } from './Table'
30
-
31
- /** @deprecated use Card instead */
32
- export { InfoCard } from './InfoCard'
@@ -17,7 +17,6 @@ export {
17
17
  H6,
18
18
  Icon,
19
19
  IconButton,
20
- InfoCard,
21
20
  Link,
22
21
  Ol,
23
22
  Ul,
@@ -1 +1,2 @@
1
+ // biome-ignore lint/suspicious/noExplicitAny:
1
2
  export const cx = (...classNames: any[]) => classNames.filter(Boolean).join(' ')
@@ -22,12 +22,15 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
22
  SOFTWARE.
23
23
  */
24
24
 
25
- import { ComponentProps, forwardRef as forwardReactRef } from 'react'
26
- import { As, ComponentWithAs, RightJoinProps } from '../types/component'
25
+ import React, {
26
+ type ComponentProps,
27
+ forwardRef as forwardReactRef
28
+ } from 'react'
29
+ import type { As, ComponentWithAs, RightJoinProps } from '../types/component'
27
30
 
28
- export function forwardRef<Props extends object, Component extends As>(
31
+ export function forwardRef<Component extends As, Props extends object>(
29
32
  component: React.ForwardRefRenderFunction<
30
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
+ // biome-ignore lint/suspicious/noExplicitAny:
31
34
  any,
32
35
  RightJoinProps<ComponentProps<Component>, Props> & {
33
36
  as?: As
@@ -22,14 +22,14 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
22
  SOFTWARE.
23
23
  */
24
24
 
25
- import { ComponentProps } from 'react'
25
+ import React, { type ComponentProps } from 'react'
26
26
 
27
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
+ // biome-ignore lint/suspicious/noExplicitAny:
28
28
  export type As<Props = any> = React.ElementType<Props>
29
29
 
30
30
  export type OmitCommonProps<
31
31
  Target,
32
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
+ // biome-ignore lint/suspicious/noExplicitAny:
33
33
  OmitAdditionalProps extends keyof any = never
34
34
  > = Omit<Target, 'as' | OmitAdditionalProps>
35
35
 
@@ -70,13 +70,14 @@ export type ComponentWithAs<
70
70
  Props,
71
71
  AsComponent
72
72
  >
73
+ // biome-ignore lint/correctness/noUndeclaredVariables:
73
74
  ): JSX.Element
74
75
  displayName?: string
75
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
76
+ // biome-ignore lint/suspicious/noExplicitAny:
76
77
  propTypes?: React.WeakValidationMap<any>
77
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
78
+ // biome-ignore lint/suspicious/noExplicitAny:
78
79
  contextTypes?: React.ValidationMap<any>
79
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
80
+ // biome-ignore lint/suspicious/noExplicitAny:
80
81
  defaultProps?: Partial<any>
81
82
  id?: string
82
83
  }
@@ -0,0 +1,30 @@
1
+ import React from 'react'
2
+ import { describe, test, expect } from 'vitest'
3
+ import { render, screen } from '@testing-library/react'
4
+
5
+ import { Button } from '../src'
6
+
7
+ describe('should labeled text from Button', () => {
8
+ test('text', async () => {
9
+ render(<Button>Button</Button>)
10
+
11
+ const text = screen.getByText(/Button/)
12
+ expect(text).toBeInTheDocument()
13
+ })
14
+ test('as button', async () => {
15
+ render(<Button>Button</Button>)
16
+
17
+ const button = screen.getByRole('button')
18
+ expect(button).toBeInTheDocument()
19
+ })
20
+ test('as link', async () => {
21
+ render(
22
+ <Button as="a" href="https://example.com">
23
+ Button
24
+ </Button>
25
+ )
26
+
27
+ const button = screen.getByRole('link')
28
+ expect(button).toBeInTheDocument()
29
+ })
30
+ })
@@ -1,19 +1,42 @@
1
- import * as React from 'react'
1
+ import React from 'react'
2
+ import { describe, test, expect } from 'vitest'
2
3
  import { render, screen } from '@testing-library/react'
3
- import '@testing-library/jest-dom'
4
4
 
5
- import { Card, CardHeader } from '../src'
5
+ import { Card, CardBody, CardHeader } from '../src'
6
6
 
7
7
  describe('should labeled text from Card', () => {
8
- test('renders Card', async () => {
8
+ test('text', async () => {
9
9
  render(
10
10
  <Card>
11
- <CardHeader>Card-Label</CardHeader>
11
+ <CardHeader>Card-Header</CardHeader>
12
+ <CardBody>Card-Body</CardBody>
12
13
  </Card>
13
14
  )
14
15
 
15
- const text = screen.getByLabelText(/Card-Label/)
16
+ const text1 = screen.getByText(/Card-Header/)
17
+ expect(text1).toBeInTheDocument()
16
18
 
17
- expect(text).toBeInTheDocument()
19
+ const text2 = screen.getByText(/Card-Body/)
20
+ expect(text2).toBeInTheDocument()
21
+ })
22
+ test('role and id', async () => {
23
+ render(
24
+ <Card>
25
+ <CardHeader>Card-Header</CardHeader>
26
+ <CardBody>Card-Body</CardBody>
27
+ </Card>
28
+ )
29
+
30
+ const card = screen.getByRole('article')
31
+ expect(card).toBeInTheDocument()
32
+ expect(card).toHaveProperty('id')
33
+
34
+ const header = screen.getByLabelText('Card-Header')
35
+ expect(header).toBeInTheDocument()
36
+ expect(header).toHaveProperty('id')
37
+
38
+ const body = screen.getByRole('article', { description: 'Card-Body' })
39
+ expect(body).toBeInTheDocument()
40
+ expect(body).toHaveProperty('id')
18
41
  })
19
42
  })
@@ -0,0 +1 @@
1
+ import '@testing-library/jest-dom'
@@ -1,5 +1,5 @@
1
1
  /// <reference types="vitest" />
2
- import { resolve } from 'path'
2
+ import { resolve } from 'node:path'
3
3
  import { defineConfig } from 'vite'
4
4
  import react from '@vitejs/plugin-react-swc'
5
5
  import { peerDependencies } from './package.json'
@@ -24,6 +24,7 @@ export default defineConfig({
24
24
  },
25
25
  test: {
26
26
  globals: true,
27
- environment: 'jsdom'
27
+ environment: 'happy-dom',
28
+ setupFiles: 'tests/vitest.setup.ts'
28
29
  }
29
30
  })