@sakura-ui/sakura-ui 0.1.11 → 0.1.13

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 (179) hide show
  1. package/package.json +8 -8
  2. package/packages/config/package.json +2 -2
  3. package/packages/config/src/index.ts +25 -9
  4. package/packages/config/tsconfig.json +1 -1
  5. package/packages/config/vite.config.ts +1 -1
  6. package/packages/core/coverage/clover.xml +258 -0
  7. package/packages/core/coverage/coverage-final.json +15 -0
  8. package/packages/core/coverage/lcov-report/base.css +224 -0
  9. package/packages/core/coverage/lcov-report/block-navigation.js +87 -0
  10. package/packages/core/coverage/lcov-report/favicon.png +0 -0
  11. package/packages/core/coverage/lcov-report/index.html +146 -0
  12. package/packages/core/coverage/lcov-report/prettify.css +1 -0
  13. package/packages/core/coverage/lcov-report/prettify.js +2 -0
  14. package/packages/core/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  15. package/packages/core/coverage/lcov-report/sorter.js +196 -0
  16. package/packages/core/coverage/lcov-report/src/components/Button.tsx.html +301 -0
  17. package/packages/core/coverage/lcov-report/src/components/Card.tsx.html +397 -0
  18. package/packages/core/coverage/lcov-report/src/components/Code.tsx.html +142 -0
  19. package/packages/core/coverage/lcov-report/src/components/Heading.tsx.html +403 -0
  20. package/packages/core/coverage/lcov-report/src/components/Icon.tsx.html +181 -0
  21. package/packages/core/coverage/lcov-report/src/components/IconButton.tsx.html +376 -0
  22. package/packages/core/coverage/lcov-report/src/components/InfoCard.tsx.html +238 -0
  23. package/packages/core/coverage/lcov-report/src/components/Link.tsx.html +322 -0
  24. package/packages/core/coverage/lcov-report/src/components/List.tsx.html +202 -0
  25. package/packages/core/coverage/lcov-report/src/components/Pre.tsx.html +151 -0
  26. package/packages/core/coverage/lcov-report/src/components/Table.tsx.html +427 -0
  27. package/packages/core/coverage/lcov-report/src/components/index.html +281 -0
  28. package/packages/core/coverage/lcov-report/src/components/index.ts.html +124 -0
  29. package/packages/core/coverage/lcov-report/src/index.html +116 -0
  30. package/packages/core/coverage/lcov-report/src/index.ts.html +169 -0
  31. package/packages/core/coverage/lcov-report/src/utils/class.ts.html +88 -0
  32. package/packages/core/coverage/lcov-report/src/utils/index.html +116 -0
  33. package/packages/core/coverage/lcov.info +523 -0
  34. package/packages/core/jest.config.ts +11 -0
  35. package/packages/core/package.json +6 -2
  36. package/packages/core/src/components/Button.tsx +60 -53
  37. package/packages/core/src/components/Card.tsx +89 -8
  38. package/packages/core/src/components/Code.tsx +2 -2
  39. package/packages/core/src/components/Heading.tsx +7 -12
  40. package/packages/core/src/components/Icon.tsx +8 -3
  41. package/packages/core/src/components/IconButton.tsx +57 -49
  42. package/packages/core/src/components/InfoCard.tsx +15 -11
  43. package/packages/core/src/components/Link.tsx +27 -24
  44. package/packages/core/src/components/List.tsx +4 -4
  45. package/packages/core/src/components/Pre.tsx +2 -2
  46. package/packages/core/src/components/Table.tsx +17 -14
  47. package/packages/core/src/components/index.ts +4 -2
  48. package/packages/core/src/index.ts +3 -0
  49. package/packages/core/tests/Card.test.tsx +19 -0
  50. package/packages/core/tsconfig.node.json +1 -1
  51. package/packages/core/vite.config.ts +1 -1
  52. package/packages/forms/coverage/clover.xml +60 -60
  53. package/packages/forms/coverage/coverage-final.json +17 -17
  54. package/packages/forms/coverage/lcov-report/index.html +23 -23
  55. package/packages/forms/coverage/lcov-report/src/components/Checkbox.tsx.html +8 -8
  56. package/packages/forms/coverage/lcov-report/src/components/FieldsetControl.tsx.html +4 -4
  57. package/packages/forms/coverage/lcov-report/src/components/LabelControl.tsx.html +60 -60
  58. package/packages/forms/coverage/lcov-report/src/components/Radio.tsx.html +3 -3
  59. package/packages/forms/coverage/lcov-report/src/components/Select.tsx.html +37 -31
  60. package/packages/forms/coverage/lcov-report/src/components/Text.tsx.html +16 -13
  61. package/packages/forms/coverage/lcov-report/src/components/Textarea.tsx.html +30 -27
  62. package/packages/forms/coverage/lcov-report/src/components/context.ts.html +5 -2
  63. package/packages/forms/coverage/lcov-report/src/components/controlled/CheckboxGroup.tsx.html +3 -3
  64. package/packages/forms/coverage/lcov-report/src/components/controlled/RadioGroup.tsx.html +3 -3
  65. package/packages/forms/coverage/lcov-report/src/components/controlled/SelectControl.tsx.html +3 -3
  66. package/packages/forms/coverage/lcov-report/src/components/controlled/TextControl.tsx.html +3 -3
  67. package/packages/forms/coverage/lcov-report/src/components/controlled/TextareaControl.tsx.html +3 -3
  68. package/packages/forms/coverage/lcov-report/src/components/controlled/index.html +1 -1
  69. package/packages/forms/coverage/lcov-report/src/components/controlled/index.ts.html +1 -1
  70. package/packages/forms/coverage/lcov-report/src/components/index.html +37 -37
  71. package/packages/forms/coverage/lcov-report/src/components/index.ts.html +9 -9
  72. package/packages/forms/coverage/lcov-report/src/index.html +5 -5
  73. package/packages/forms/coverage/lcov-report/src/index.ts.html +9 -9
  74. package/packages/forms/coverage/lcov-report/src/utils/index.html +1 -1
  75. package/packages/forms/coverage/lcov-report/src/utils/index.ts.html +2 -2
  76. package/packages/forms/coverage/lcov.info +91 -83
  77. package/packages/forms/dist/components/Checkbox.d.ts +2 -2
  78. package/packages/forms/dist/components/Checkbox.d.ts.map +1 -1
  79. package/packages/forms/dist/components/Checkbox.js +43 -0
  80. package/packages/forms/dist/components/Checkbox.js.map +1 -0
  81. package/packages/forms/dist/components/FieldsetControl.d.ts +2 -2
  82. package/packages/forms/dist/components/FieldsetControl.d.ts.map +1 -1
  83. package/packages/forms/dist/components/FieldsetControl.js +20 -0
  84. package/packages/forms/dist/components/FieldsetControl.js.map +1 -0
  85. package/packages/forms/dist/components/Input.d.ts +2 -2
  86. package/packages/forms/dist/components/Input.d.ts.map +1 -1
  87. package/packages/forms/dist/components/Input.js +27 -0
  88. package/packages/forms/dist/components/Input.js.map +1 -0
  89. package/packages/forms/dist/components/LabelControl.d.ts +2 -2
  90. package/packages/forms/dist/components/LabelControl.d.ts.map +1 -1
  91. package/packages/forms/dist/components/LabelControl.js +18 -0
  92. package/packages/forms/dist/components/LabelControl.js.map +1 -0
  93. package/packages/forms/dist/components/Radio.d.ts +2 -2
  94. package/packages/forms/dist/components/Radio.d.ts.map +1 -1
  95. package/packages/forms/dist/components/Radio.js +43 -0
  96. package/packages/forms/dist/components/Radio.js.map +1 -0
  97. package/packages/forms/dist/components/Select.d.ts +2 -2
  98. package/packages/forms/dist/components/Select.d.ts.map +1 -1
  99. package/packages/forms/dist/components/Select.js +39 -0
  100. package/packages/forms/dist/components/Select.js.map +1 -0
  101. package/packages/forms/dist/components/Textarea.d.ts +2 -2
  102. package/packages/forms/dist/components/Textarea.d.ts.map +1 -1
  103. package/packages/forms/dist/components/Textarea.js +34 -0
  104. package/packages/forms/dist/components/Textarea.js.map +1 -0
  105. package/packages/forms/dist/components/context.js +8 -0
  106. package/packages/forms/dist/components/context.js.map +1 -0
  107. package/packages/forms/dist/components/controlled/CheckboxGroup.d.ts +2 -2
  108. package/packages/forms/dist/components/controlled/CheckboxGroup.d.ts.map +1 -1
  109. package/packages/forms/dist/components/controlled/CheckboxGroup.js +12 -0
  110. package/packages/forms/dist/components/controlled/CheckboxGroup.js.map +1 -0
  111. package/packages/forms/dist/components/controlled/InputItem.js +2 -0
  112. package/packages/forms/dist/components/controlled/InputItem.js.map +1 -0
  113. package/packages/forms/dist/components/controlled/RadioGroup.d.ts +2 -2
  114. package/packages/forms/dist/components/controlled/RadioGroup.d.ts.map +1 -1
  115. package/packages/forms/dist/components/controlled/RadioGroup.js +12 -0
  116. package/packages/forms/dist/components/controlled/RadioGroup.js.map +1 -0
  117. package/packages/forms/dist/components/controlled/SelectControl.d.ts +2 -2
  118. package/packages/forms/dist/components/controlled/SelectControl.d.ts.map +1 -1
  119. package/packages/forms/dist/components/controlled/SelectControl.js +10 -0
  120. package/packages/forms/dist/components/controlled/SelectControl.js.map +1 -0
  121. package/packages/forms/dist/components/controlled/TextareaControl.d.ts +2 -2
  122. package/packages/forms/dist/components/controlled/TextareaControl.d.ts.map +1 -1
  123. package/packages/forms/dist/components/controlled/TextareaControl.js +10 -0
  124. package/packages/forms/dist/components/controlled/TextareaControl.js.map +1 -0
  125. package/packages/forms/dist/components/controlled/index.d.ts +0 -1
  126. package/packages/forms/dist/components/controlled/index.d.ts.map +1 -1
  127. package/packages/forms/dist/components/controlled/index.js +5 -0
  128. package/packages/forms/dist/components/controlled/index.js.map +1 -0
  129. package/packages/forms/dist/components/index.js +8 -0
  130. package/packages/forms/dist/components/index.js.map +1 -0
  131. package/packages/forms/dist/index.cjs.js +80 -80
  132. package/packages/forms/dist/index.cjs.js.map +1 -1
  133. package/packages/forms/dist/index.d.ts +1 -1
  134. package/packages/forms/dist/index.d.ts.map +1 -1
  135. package/packages/forms/dist/index.es.js +501 -504
  136. package/packages/forms/dist/index.es.js.map +1 -1
  137. package/packages/forms/dist/index.js +3 -0
  138. package/packages/forms/dist/index.js.map +1 -0
  139. package/packages/forms/dist/utils/class.js +2 -0
  140. package/packages/forms/dist/utils/class.js.map +1 -0
  141. package/packages/forms/jest.config.ts +0 -3
  142. package/packages/forms/node_modules/.bin/autoprefixer +4 -4
  143. package/packages/forms/node_modules/.bin/browserslist +2 -2
  144. package/packages/forms/node_modules/.bin/jest +4 -4
  145. package/packages/forms/node_modules/.bin/npm-run-all +4 -4
  146. package/packages/forms/node_modules/.bin/run-p +4 -4
  147. package/packages/forms/node_modules/.bin/run-s +4 -4
  148. package/packages/forms/node_modules/.bin/tailwind +4 -4
  149. package/packages/forms/node_modules/.bin/tailwindcss +4 -4
  150. package/packages/forms/node_modules/.bin/ts-jest +4 -4
  151. package/packages/forms/node_modules/.bin/ts-node +4 -4
  152. package/packages/forms/node_modules/.bin/ts-node-cwd +4 -4
  153. package/packages/forms/node_modules/.bin/ts-node-esm +4 -4
  154. package/packages/forms/node_modules/.bin/ts-node-script +4 -4
  155. package/packages/forms/node_modules/.bin/ts-node-transpile-only +4 -4
  156. package/packages/forms/node_modules/.bin/ts-script +4 -4
  157. package/packages/forms/node_modules/.bin/tsc +4 -4
  158. package/packages/forms/node_modules/.bin/tsc-alias +4 -4
  159. package/packages/forms/node_modules/.bin/tsserver +4 -4
  160. package/packages/forms/node_modules/.bin/vite +4 -4
  161. package/packages/forms/package.json +2 -2
  162. package/packages/forms/src/components/Checkbox.tsx +62 -59
  163. package/packages/forms/src/components/FieldsetControl.tsx +62 -55
  164. package/packages/forms/src/components/Input.tsx +38 -35
  165. package/packages/forms/src/components/LabelControl.tsx +56 -52
  166. package/packages/forms/src/components/Radio.tsx +8 -3
  167. package/packages/forms/src/components/Select.tsx +57 -56
  168. package/packages/forms/src/components/Textarea.tsx +58 -54
  169. package/packages/forms/src/components/controlled/CheckboxGroup.tsx +37 -37
  170. package/packages/forms/src/components/controlled/RadioGroup.tsx +5 -3
  171. package/packages/forms/src/components/controlled/SelectControl.tsx +28 -27
  172. package/packages/forms/src/components/controlled/TextareaControl.tsx +28 -27
  173. package/packages/forms/src/components/controlled/index.ts +0 -1
  174. package/packages/forms/src/index.ts +0 -1
  175. package/packages/forms/tsconfig.node.json +1 -1
  176. package/packages/forms/vite.config.ts +1 -1
  177. package/packages/forms/dist/components/controlled/InputControl.d.ts +0 -10
  178. package/packages/forms/dist/components/controlled/InputControl.d.ts.map +0 -1
  179. package/packages/forms/src/components/controlled/InputControl.tsx +0 -39
@@ -1,23 +1,104 @@
1
1
  import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
 
4
- export interface CardProps extends React.ComponentProps<'section'> {}
4
+ interface IdContextType {
5
+ id: string
6
+ }
7
+
8
+ const IdContext = React.createContext<IdContextType>({ id: '' })
9
+
10
+ export interface CardProps extends React.ComponentPropsWithoutRef<'section'> {}
5
11
 
6
- export const Card = (props: CardProps) => {
12
+ export const Card: React.ElementType<CardProps> = (props: CardProps) => {
7
13
  const { className, children, ...restProps } = props
8
14
 
15
+ const id = React.useId()
16
+ const ctx: IdContextType = { id: id }
17
+
9
18
  const style = `
10
- bg-sumi-50
11
19
  border
12
20
  border-solid
13
21
  border-sumi-300
14
- rounded-[12px]
15
- p-4
22
+ rounded-2xl
23
+ md:rounded-3xl
16
24
  text-sumi-900
25
+ overflow-hidden
26
+ `
27
+
28
+ return (
29
+ <IdContext.Provider value={ctx}>
30
+ <section
31
+ aria-labelledby={ctx.id}
32
+ className={cx(style, className)}
33
+ {...restProps}
34
+ >
35
+ {children}
36
+ </section>
37
+ </IdContext.Provider>
38
+ )
39
+ }
40
+
41
+ export interface CardHeaderProps extends React.ComponentPropsWithoutRef<'h2'> {}
42
+
43
+ export const CardHeader: React.ElementType<CardHeaderProps> = (
44
+ props: CardHeaderProps
45
+ ) => {
46
+ const { className, children, ...restProps } = props
47
+
48
+ const ctx = React.useContext(IdContext)
49
+
50
+ const style = `
51
+ py-6
52
+ px-6
53
+ text-lgm
54
+ leading-none
55
+ `
56
+
57
+ return (
58
+ <h2 id={ctx.id} className={cx(style, className)} {...restProps}>
59
+ {children}
60
+ </h2>
61
+ )
62
+ }
63
+
64
+ export interface CardBodyProps extends React.ComponentPropsWithoutRef<'p'> {}
65
+
66
+ export const CardBody: React.ElementType<CardBodyProps> = (
67
+ props: CardBodyProps
68
+ ) => {
69
+ const { className, children, ...restProps } = props
70
+
71
+ const style = `
72
+ px-6
73
+ first:pt-6
74
+ pb-6
75
+ text-base
76
+ `
77
+
78
+ return (
79
+ <p className={cx(style, className)} {...restProps}>
80
+ {children}
81
+ </p>
82
+ )
83
+ }
84
+
85
+ export interface CardFooterProps
86
+ extends React.ComponentPropsWithoutRef<'div'> {}
87
+
88
+ export const CardFooter: React.ElementType<CardFooterProps> = (
89
+ props: CardFooterProps
90
+ ) => {
91
+ const { className, children, ...restProps } = props
92
+
93
+ const style = `
94
+ px-6
95
+ first:pt-6
96
+ pb-6
17
97
  `
98
+
18
99
  return (
19
- <section className={cx(style, props.className)} {...restProps}>
20
- {props.children}
21
- </section>
100
+ <div className={cx(style, className)} {...restProps}>
101
+ {children}
102
+ </div>
22
103
  )
23
104
  }
@@ -1,9 +1,9 @@
1
1
  import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
 
4
- export interface CodeProps extends React.ComponentProps<'code'> {}
4
+ export interface CodeProps extends React.ComponentPropsWithoutRef<'code'> {}
5
5
 
6
- export const Code = (props: CodeProps) => {
6
+ export const Code: React.ElementType<CodeProps> = (props: CodeProps) => {
7
7
  const { className, children, ...restProps } = props
8
8
 
9
9
  const style = `
@@ -1,9 +1,9 @@
1
1
  import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
 
4
- export interface HeadingProps extends React.ComponentProps<'h1'> {}
4
+ export interface HeadingProps extends React.ComponentPropsWithoutRef<'h1'> {}
5
5
 
6
- export const H1 = (props: HeadingProps) => {
6
+ export const H1: React.ElementType<HeadingProps> = (props: HeadingProps) => {
7
7
  const { className, children, ...restProps } = props
8
8
 
9
9
  const style = `
@@ -20,8 +20,7 @@ export const H1 = (props: HeadingProps) => {
20
20
  )
21
21
  }
22
22
 
23
- export const H2 = (props: HeadingProps) => {
24
- // コンポーネントを使う側でclassNameを指定しても問題ないようにする
23
+ export const H2: React.ElementType<HeadingProps> = (props: HeadingProps) => {
25
24
  const { className, children, ...restProps } = props
26
25
 
27
26
  const style = `
@@ -38,8 +37,7 @@ export const H2 = (props: HeadingProps) => {
38
37
  )
39
38
  }
40
39
 
41
- export const H3 = (props: HeadingProps) => {
42
- // コンポーネントを使う側でclassNameを指定しても問題ないようにする
40
+ export const H3: React.ElementType<HeadingProps> = (props: HeadingProps) => {
43
41
  const { className, children, ...restProps } = props
44
42
 
45
43
  const style = `
@@ -56,8 +54,7 @@ export const H3 = (props: HeadingProps) => {
56
54
  )
57
55
  }
58
56
 
59
- export const H4 = (props: HeadingProps) => {
60
- // コンポーネントを使う側でclassNameを指定しても問題ないようにする
57
+ export const H4: React.ElementType<HeadingProps> = (props: HeadingProps) => {
61
58
  const { className, children, ...restProps } = props
62
59
 
63
60
  const style = `
@@ -74,8 +71,7 @@ export const H4 = (props: HeadingProps) => {
74
71
  )
75
72
  }
76
73
 
77
- export const H5 = (props: HeadingProps) => {
78
- // コンポーネントを使う側でclassNameを指定しても問題ないようにする
74
+ export const H5: React.ElementType<HeadingProps> = (props: HeadingProps) => {
79
75
  const { className, children, ...restProps } = props
80
76
 
81
77
  const style = `
@@ -92,8 +88,7 @@ export const H5 = (props: HeadingProps) => {
92
88
  )
93
89
  }
94
90
 
95
- export const H6 = (props: HeadingProps) => {
96
- // コンポーネントを使う側でclassNameを指定しても問題ないようにする
91
+ export const H6: React.ElementType<HeadingProps> = (props: HeadingProps) => {
97
92
  const { className, children, ...restProps } = props
98
93
 
99
94
  const style = `
@@ -1,11 +1,14 @@
1
1
  import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
 
4
- export interface IconProps extends React.ComponentProps<'span'> {
4
+ export interface IconProps extends React.ComponentPropsWithRef<'span'> {
5
5
  icon: string
6
6
  }
7
7
 
8
- export const Icon = React.forwardRef<HTMLElement, IconProps>((props, ref) => {
8
+ export const Icon: React.ElementType<IconProps> = React.forwardRef<
9
+ HTMLElement,
10
+ IconProps
11
+ >((props, ref) => {
9
12
  const { className, icon, ...restProps } = props
10
13
 
11
14
  const style = `
@@ -24,4 +27,6 @@ export const Icon = React.forwardRef<HTMLElement, IconProps>((props, ref) => {
24
27
  {icon}
25
28
  </span>
26
29
  )
27
- }) as React.ElementType
30
+ })
31
+
32
+ Icon.displayName = 'Icon'
@@ -1,30 +1,32 @@
1
1
  import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
 
4
- export interface IconButtonProps extends React.ComponentProps<'button'> {
4
+ export interface IconButtonProps extends React.ComponentPropsWithRef<'button'> {
5
5
  variant?: 'primary' | 'secondary'
6
6
  iconLayout?: 'left' | 'right'
7
7
  rounded?: string
8
8
  icon: string
9
9
  }
10
10
 
11
- export const IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(
12
- (props, ref) => {
13
- const {
14
- className,
15
- children,
16
- variant,
17
- icon,
18
- iconLayout,
19
- rounded,
20
- ...restProps
21
- } = props
11
+ export const IconButton: React.ElementType<IconButtonProps> = React.forwardRef<
12
+ HTMLButtonElement,
13
+ IconButtonProps
14
+ >((props, ref) => {
15
+ const {
16
+ className,
17
+ children,
18
+ variant,
19
+ icon,
20
+ iconLayout,
21
+ rounded,
22
+ ...restProps
23
+ } = props
22
24
 
23
- const layout = iconLayout ?? 'left'
25
+ const layout = iconLayout ?? 'left'
24
26
 
25
- const align = 'center'
27
+ const align = 'center'
26
28
 
27
- const style = `
29
+ const style = `
28
30
  ${rounded === 'full' ? 'aspect-square' : ''}
29
31
  inline-block
30
32
  p-4
@@ -35,35 +37,40 @@ export const IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(
35
37
  whitespace-nowrap
36
38
  border
37
39
  border-solid
38
- border-sea-600
40
+ border-sea-800
41
+ active:enabled:border-sea-800-darken
42
+ hover:enabled:border-sea-800-darken
39
43
  focus:outline
40
44
  focus:outline-2
41
- focus:outline-wood-500
45
+ focus:outline-wood-600
42
46
  disabled:border-sumi-500
43
47
  disabled:cursor-not-allowed
44
48
  `
45
49
 
46
- const primary = `
47
- text-white-1000
48
- bg-sea-600
49
- hover:enabled:bg-sea-700
50
- active:enabled:bg-sea-800
51
- disabled:bg-sumi-500
52
- disabled:text-white-1000
53
- `
54
- const secondary = `
55
- text-sea-600
56
- hover:enabled:bg-sea-100
57
- active:enabled:bg-sea-200
58
- disabled:text-sumi-500
59
- `
50
+ const primary = `
51
+ text-white-1000
52
+ bg-sea-800
53
+ active:enabled:bg-sea-800-darken
54
+ hover:enabled:bg-sea-800-darken
55
+ disabled:bg-sumi-500
56
+ disabled:text-white-1000
57
+ `
58
+ const secondary = `
59
+ text-sea-800
60
+ bg-transparent
61
+ active:enabled:bg-sea-50
62
+ hover:enabled:bg-sea-50
63
+ active:enabled:text-sea-800-darken
64
+ hover:enabled:text-sea-800-darken
65
+ disabled:text-sumi-500
66
+ `
60
67
 
61
- const styles = {
62
- primary: primary,
63
- secondary: secondary
64
- }
68
+ const styles = {
69
+ primary: primary,
70
+ secondary: secondary
71
+ }
65
72
 
66
- const iconStyle = `
73
+ const iconStyle = `
67
74
  inline-block
68
75
  align-middle
69
76
  font-icon
@@ -74,16 +81,17 @@ export const IconButton = React.forwardRef<HTMLButtonElement, IconButtonProps>(
74
81
  mb-1
75
82
  `
76
83
 
77
- return (
78
- <button
79
- className={cx(style, styles[variant ?? 'primary'], className)}
80
- {...restProps}
81
- ref={ref}
82
- >
83
- {layout == 'left' && <span className={cx(iconStyle)}>{icon}</span>}
84
- {children && <span className="mx-1 inline-block">{children}</span>}
85
- {layout == 'right' && <span className={cx(iconStyle)}>{icon}</span>}
86
- </button>
87
- )
88
- }
89
- ) as React.ElementType
84
+ return (
85
+ <button
86
+ className={cx(style, styles[variant ?? 'primary'], className)}
87
+ {...restProps}
88
+ ref={ref}
89
+ >
90
+ {layout == 'left' && <span className={cx(iconStyle)}>{icon}</span>}
91
+ {children && <span className="mx-1 inline-block">{children}</span>}
92
+ {layout == 'right' && <span className={cx(iconStyle)}>{icon}</span>}
93
+ </button>
94
+ )
95
+ })
96
+
97
+ IconButton.displayName = 'IconButton'
@@ -1,33 +1,37 @@
1
1
  import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
 
4
- export interface InfoCardProps extends React.ComponentProps<'section'> {
4
+ export interface InfoCardProps
5
+ extends React.ComponentPropsWithoutRef<'section'> {
5
6
  title?: string
6
7
  }
7
8
 
8
- export const InfoCard = (props: InfoCardProps) => {
9
+ export const InfoCard: React.ElementType<InfoCardProps> = (
10
+ props: InfoCardProps
11
+ ) => {
9
12
  const { className, children, title, ...restProps } = props
10
13
 
11
14
  const style = `
12
- bg-sumi-50
13
- border-sumi-300
14
15
  border
15
16
  border-solid
16
- rounded-[12px]
17
+ border-sumi-300
18
+ rounded-2xl
19
+ md:rounded-3xl
17
20
  text-sumi-900
18
21
  `
19
22
 
20
23
  const topStyle = `
21
- px-4
22
- pt-4
23
- mb-1
24
+ pt-6
25
+ px-6
24
26
  text-lgm
25
- sm:text-lg
27
+ leading-none
28
+ mb-2
26
29
  `
27
30
 
28
31
  const bottmStyle = `
29
- px-4
30
- pb-4
32
+ pb-6
33
+ px-6
34
+ text-base
31
35
  `
32
36
 
33
37
  const headingId = React.useId()
@@ -28,15 +28,17 @@ const getFileType = (url: string) => {
28
28
  return null
29
29
  }
30
30
 
31
- export interface LinkProps extends React.ComponentProps<'a'> {}
31
+ export interface LinkProps extends React.ComponentPropsWithRef<'a'> {}
32
32
 
33
- export const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(
34
- (props, ref) => {
35
- const { className, children, ...restProps } = props
36
- const href = props.href ?? ''
37
- const fileType = getFileType(href)
33
+ export const Link: React.ElementType<LinkProps> = React.forwardRef<
34
+ HTMLAnchorElement,
35
+ LinkProps
36
+ >((props, ref) => {
37
+ const { className, children, ...restProps } = props
38
+ const href = props.href ?? ''
39
+ const fileType = getFileType(href)
38
40
 
39
- const style = `
41
+ const style = `
40
42
  rounded-sm
41
43
  cursor-pointer
42
44
  text-sea-600
@@ -51,26 +53,27 @@ export const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(
51
53
  disabled:border-sumi-500
52
54
  `
53
55
 
54
- if (href.startsWith('http')) {
55
- return (
56
- <a
57
- className={cx(style, className)}
58
- href={href}
59
- target="_blank"
60
- rel="noopener noreferrer"
61
- {...restProps}
62
- ref={ref}
63
- >
64
- {children}
65
- {fileType ? `(${fileType})` : null}
66
- </a>
67
- )
68
- }
56
+ if (href.startsWith('http')) {
69
57
  return (
70
- <a className={cx(style, className)} href={href} {...restProps} ref={ref}>
58
+ <a
59
+ className={cx(style, className)}
60
+ href={href}
61
+ target="_blank"
62
+ rel="noopener noreferrer"
63
+ {...restProps}
64
+ ref={ref}
65
+ >
71
66
  {children}
72
67
  {fileType ? `(${fileType})` : null}
73
68
  </a>
74
69
  )
75
70
  }
76
- ) as React.ElementType
71
+ return (
72
+ <a className={cx(style, className)} href={href} {...restProps} ref={ref}>
73
+ {children}
74
+ {fileType ? `(${fileType})` : null}
75
+ </a>
76
+ )
77
+ })
78
+
79
+ Link.displayName = 'Link'
@@ -1,9 +1,9 @@
1
1
  import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
 
4
- export interface UlProps extends React.ComponentProps<'ul'> {}
4
+ export interface UlProps extends React.ComponentPropsWithoutRef<'ul'> {}
5
5
 
6
- export const Ul = (props: UlProps) => {
6
+ export const Ul: React.ElementType<UlProps> = (props: UlProps) => {
7
7
  const { className, children, ...restProps } = props
8
8
 
9
9
  const style = `
@@ -20,9 +20,9 @@ export const Ul = (props: UlProps) => {
20
20
  )
21
21
  }
22
22
 
23
- export interface OlProps extends React.ComponentProps<'ol'> {}
23
+ export interface OlProps extends React.ComponentPropsWithoutRef<'ol'> {}
24
24
 
25
- export const Ol = (props: OlProps) => {
25
+ export const Ol: React.ElementType<OlProps> = (props: OlProps) => {
26
26
  const { className, children, ...restProps } = props
27
27
 
28
28
  const style = `
@@ -1,9 +1,9 @@
1
1
  import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
 
4
- export interface PreProps extends React.ComponentProps<'pre'> {}
4
+ export interface PreProps extends React.ComponentPropsWithoutRef<'pre'> {}
5
5
 
6
- export const Pre = (props: PreProps) => {
6
+ export const Pre: React.ElementType<PreProps> = (props: PreProps) => {
7
7
  const { className, children, ...restProps } = props
8
8
 
9
9
  const style = `
@@ -1,7 +1,7 @@
1
1
  import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
 
4
- export interface TableProps extends React.ComponentProps<'table'> {}
4
+ export interface TableProps extends React.ComponentPropsWithoutRef<'table'> {}
5
5
 
6
6
  const styleBorder = `
7
7
  border
@@ -9,7 +9,7 @@ const styleBorder = `
9
9
  border-sumi-900
10
10
  `
11
11
 
12
- export const Table = (props: TableProps) => {
12
+ export const Table: React.ElementType<TableProps> = (props: TableProps) => {
13
13
  const { className, children, ...restProps } = props
14
14
 
15
15
  // If there is no break-all setting, the table will protrude when using a smartphone
@@ -26,9 +26,12 @@ export const Table = (props: TableProps) => {
26
26
  )
27
27
  }
28
28
 
29
- export interface CaptionProps extends React.ComponentProps<'caption'> {}
29
+ export interface CaptionProps
30
+ extends React.ComponentPropsWithoutRef<'caption'> {}
30
31
 
31
- export const Caption = (props: CaptionProps) => {
32
+ export const Caption: React.ElementType<CaptionProps> = (
33
+ props: CaptionProps
34
+ ) => {
32
35
  const { className, children, ...restProps } = props
33
36
 
34
37
  const style = `text-left`
@@ -39,9 +42,9 @@ export const Caption = (props: CaptionProps) => {
39
42
  )
40
43
  }
41
44
 
42
- export interface TheadProps extends React.ComponentProps<'thead'> {}
45
+ export interface TheadProps extends React.ComponentPropsWithoutRef<'thead'> {}
43
46
 
44
- export const Thead = (props: TheadProps) => {
47
+ export const Thead: React.ElementType<TheadProps> = (props: TheadProps) => {
45
48
  const { className, children, ...restProps } = props
46
49
 
47
50
  return (
@@ -51,9 +54,9 @@ export const Thead = (props: TheadProps) => {
51
54
  )
52
55
  }
53
56
 
54
- export interface TbodyProps extends React.ComponentProps<'tbody'> {}
57
+ export interface TbodyProps extends React.ComponentPropsWithoutRef<'tbody'> {}
55
58
 
56
- export const Tbody = (props: TbodyProps) => {
59
+ export const Tbody: React.ElementType<TbodyProps> = (props: TbodyProps) => {
57
60
  const { className, children, ...restProps } = props
58
61
 
59
62
  return (
@@ -63,9 +66,9 @@ export const Tbody = (props: TbodyProps) => {
63
66
  )
64
67
  }
65
68
 
66
- export interface ThProps extends React.ComponentProps<'th'> {}
69
+ export interface ThProps extends React.ComponentPropsWithoutRef<'th'> {}
67
70
 
68
- export const Th = (props: ThProps) => {
71
+ export const Th: React.ElementType<ThProps> = (props: ThProps) => {
69
72
  const { className, children, ...restProps } = props
70
73
 
71
74
  const style = `
@@ -80,9 +83,9 @@ export const Th = (props: ThProps) => {
80
83
  )
81
84
  }
82
85
 
83
- export interface TrProps extends React.ComponentProps<'tr'> {}
86
+ export interface TrProps extends React.ComponentPropsWithoutRef<'tr'> {}
84
87
 
85
- export const Tr = (props: TrProps) => {
88
+ export const Tr: React.ElementType<TrProps> = (props: TrProps) => {
86
89
  const { className, children, ...restProps } = props
87
90
 
88
91
  const style = ``
@@ -94,9 +97,9 @@ export const Tr = (props: TrProps) => {
94
97
  )
95
98
  }
96
99
 
97
- export interface TdProps extends React.ComponentProps<'td'> {}
100
+ export interface TdProps extends React.ComponentPropsWithoutRef<'td'> {}
98
101
 
99
- export const Td = (props: TdProps) => {
102
+ export const Td: React.ElementType<TdProps> = (props: TdProps) => {
100
103
  const { className, children, ...restProps } = props
101
104
 
102
105
  const style = `
@@ -1,11 +1,13 @@
1
1
  export { Button } from './Button'
2
- export { Card } from './Card'
2
+ export { Card, CardHeader, CardBody, CardFooter } from './Card'
3
3
  export { Code } from './Code'
4
4
  export { H1, H2, H3, H4, H5, H6 } from './Heading'
5
5
  export { Icon } from './Icon'
6
6
  export { IconButton } from './IconButton'
7
- export { InfoCard } from './InfoCard'
8
7
  export { Link } from './Link'
9
8
  export { Ol, Ul } from './List'
10
9
  export { Pre } from './Pre'
11
10
  export { Table, Caption, Thead, Tbody, Th, Tr, Td } from './Table'
11
+
12
+ /** @deprecated use Card instead */
13
+ export { InfoCard } from './InfoCard'
@@ -1,6 +1,9 @@
1
1
  export {
2
2
  Button,
3
3
  Card,
4
+ CardHeader,
5
+ CardBody,
6
+ CardFooter,
4
7
  Code,
5
8
  H1,
6
9
  H2,
@@ -0,0 +1,19 @@
1
+ import * as React from 'react'
2
+ import { render, screen } from '@testing-library/react'
3
+ import '@testing-library/jest-dom'
4
+
5
+ import { Card, CardHeader } from '../src'
6
+
7
+ describe('should labeled text from Card', () => {
8
+ test('renders Card', async () => {
9
+ render(
10
+ <Card>
11
+ <CardHeader>Card-Label</CardHeader>
12
+ </Card>
13
+ )
14
+
15
+ const text = screen.getByLabelText(/Card-Label/)
16
+
17
+ expect(text).toBeInTheDocument()
18
+ })
19
+ })
@@ -2,7 +2,7 @@
2
2
  "compilerOptions": {
3
3
  "composite": true,
4
4
  "module": "ESNext",
5
- "moduleResolution": "Bundler",
5
+ "moduleResolution": "node",
6
6
  "allowSyntheticDefaultImports": true
7
7
  },
8
8
  "include": ["vite.config.ts"]
@@ -15,7 +15,7 @@ export default defineConfig({
15
15
  lib: {
16
16
  entry: resolve(__dirname, 'src', 'index.ts'),
17
17
  formats: ['es', 'cjs'],
18
- fileName: (ext) => `index.${ext}.js`
18
+ fileName: (ext: string) => `index.${ext}.js`
19
19
  },
20
20
  rollupOptions: {
21
21
  external: [...Object.keys(peerDependencies)]