@sakura-ui/sakura-ui 0.1.10 → 0.1.12

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 (122) hide show
  1. package/README.md +8 -32
  2. package/package.json +8 -8
  3. package/packages/config/package.json +9 -9
  4. package/packages/config/src/index.ts +1 -1
  5. package/packages/config/tsconfig.json +1 -1
  6. package/packages/config/vite.config.ts +1 -1
  7. package/packages/core/package.json +13 -13
  8. package/packages/core/src/components/Button.tsx +27 -24
  9. package/packages/core/src/components/Card.tsx +2 -2
  10. package/packages/core/src/components/Code.tsx +2 -2
  11. package/packages/core/src/components/Heading.tsx +7 -12
  12. package/packages/core/src/components/Icon.tsx +8 -3
  13. package/packages/core/src/components/IconButton.tsx +41 -29
  14. package/packages/core/src/components/InfoCard.tsx +5 -2
  15. package/packages/core/src/components/Link.tsx +27 -24
  16. package/packages/core/src/components/List.tsx +4 -4
  17. package/packages/core/src/components/Pre.tsx +2 -2
  18. package/packages/core/src/components/Table.tsx +17 -14
  19. package/packages/core/tsconfig.node.json +1 -1
  20. package/packages/core/vite.config.ts +1 -1
  21. package/packages/forms/dist/components/Checkbox.d.ts +2 -2
  22. package/packages/forms/dist/components/Checkbox.d.ts.map +1 -1
  23. package/packages/forms/dist/components/Checkbox.js +43 -0
  24. package/packages/forms/dist/components/Checkbox.js.map +1 -0
  25. package/packages/forms/dist/components/FieldsetControl.d.ts +2 -2
  26. package/packages/forms/dist/components/FieldsetControl.d.ts.map +1 -1
  27. package/packages/forms/dist/components/FieldsetControl.js +20 -0
  28. package/packages/forms/dist/components/FieldsetControl.js.map +1 -0
  29. package/packages/forms/dist/components/Input.d.ts +2 -2
  30. package/packages/forms/dist/components/Input.d.ts.map +1 -1
  31. package/packages/forms/dist/components/Input.js +27 -0
  32. package/packages/forms/dist/components/Input.js.map +1 -0
  33. package/packages/forms/dist/components/LabelControl.d.ts +2 -2
  34. package/packages/forms/dist/components/LabelControl.d.ts.map +1 -1
  35. package/packages/forms/dist/components/LabelControl.js +18 -0
  36. package/packages/forms/dist/components/LabelControl.js.map +1 -0
  37. package/packages/forms/dist/components/Radio.d.ts +2 -2
  38. package/packages/forms/dist/components/Radio.d.ts.map +1 -1
  39. package/packages/forms/dist/components/Radio.js +43 -0
  40. package/packages/forms/dist/components/Radio.js.map +1 -0
  41. package/packages/forms/dist/components/Select.d.ts +2 -2
  42. package/packages/forms/dist/components/Select.d.ts.map +1 -1
  43. package/packages/forms/dist/components/Select.js +39 -0
  44. package/packages/forms/dist/components/Select.js.map +1 -0
  45. package/packages/forms/dist/components/Textarea.d.ts +2 -2
  46. package/packages/forms/dist/components/Textarea.d.ts.map +1 -1
  47. package/packages/forms/dist/components/Textarea.js +34 -0
  48. package/packages/forms/dist/components/Textarea.js.map +1 -0
  49. package/packages/forms/dist/components/context.js +8 -0
  50. package/packages/forms/dist/components/context.js.map +1 -0
  51. package/packages/forms/dist/components/controlled/CheckboxGroup.d.ts +2 -2
  52. package/packages/forms/dist/components/controlled/CheckboxGroup.d.ts.map +1 -1
  53. package/packages/forms/dist/components/controlled/CheckboxGroup.js +12 -0
  54. package/packages/forms/dist/components/controlled/CheckboxGroup.js.map +1 -0
  55. package/packages/forms/dist/components/controlled/InputItem.js +2 -0
  56. package/packages/forms/dist/components/controlled/InputItem.js.map +1 -0
  57. package/packages/forms/dist/components/controlled/RadioGroup.d.ts +2 -2
  58. package/packages/forms/dist/components/controlled/RadioGroup.d.ts.map +1 -1
  59. package/packages/forms/dist/components/controlled/RadioGroup.js +12 -0
  60. package/packages/forms/dist/components/controlled/RadioGroup.js.map +1 -0
  61. package/packages/forms/dist/components/controlled/SelectControl.d.ts +2 -2
  62. package/packages/forms/dist/components/controlled/SelectControl.d.ts.map +1 -1
  63. package/packages/forms/dist/components/controlled/SelectControl.js +10 -0
  64. package/packages/forms/dist/components/controlled/SelectControl.js.map +1 -0
  65. package/packages/forms/dist/components/controlled/TextareaControl.d.ts +2 -2
  66. package/packages/forms/dist/components/controlled/TextareaControl.d.ts.map +1 -1
  67. package/packages/forms/dist/components/controlled/TextareaControl.js +10 -0
  68. package/packages/forms/dist/components/controlled/TextareaControl.js.map +1 -0
  69. package/packages/forms/dist/components/controlled/index.d.ts +0 -1
  70. package/packages/forms/dist/components/controlled/index.d.ts.map +1 -1
  71. package/packages/forms/dist/components/controlled/index.js +5 -0
  72. package/packages/forms/dist/components/controlled/index.js.map +1 -0
  73. package/packages/forms/dist/components/index.js +8 -0
  74. package/packages/forms/dist/components/index.js.map +1 -0
  75. package/packages/forms/dist/index.cjs.js +79 -79
  76. package/packages/forms/dist/index.cjs.js.map +1 -1
  77. package/packages/forms/dist/index.d.ts +1 -1
  78. package/packages/forms/dist/index.d.ts.map +1 -1
  79. package/packages/forms/dist/index.es.js +500 -493
  80. package/packages/forms/dist/index.es.js.map +1 -1
  81. package/packages/forms/dist/index.js +3 -0
  82. package/packages/forms/dist/index.js.map +1 -0
  83. package/packages/forms/dist/utils/class.js +2 -0
  84. package/packages/forms/dist/utils/class.js.map +1 -0
  85. package/packages/forms/node_modules/.bin/autoprefixer +4 -4
  86. package/packages/forms/node_modules/.bin/jest +4 -4
  87. package/packages/forms/node_modules/.bin/npm-run-all +2 -2
  88. package/packages/forms/node_modules/.bin/run-p +2 -2
  89. package/packages/forms/node_modules/.bin/run-s +2 -2
  90. package/packages/forms/node_modules/.bin/tailwind +2 -2
  91. package/packages/forms/node_modules/.bin/tailwindcss +2 -2
  92. package/packages/forms/node_modules/.bin/ts-jest +4 -4
  93. package/packages/forms/node_modules/.bin/ts-node +4 -4
  94. package/packages/forms/node_modules/.bin/ts-node-cwd +4 -4
  95. package/packages/forms/node_modules/.bin/ts-node-esm +4 -4
  96. package/packages/forms/node_modules/.bin/ts-node-script +4 -4
  97. package/packages/forms/node_modules/.bin/ts-node-transpile-only +4 -4
  98. package/packages/forms/node_modules/.bin/ts-script +4 -4
  99. package/packages/forms/node_modules/.bin/tsc +4 -4
  100. package/packages/forms/node_modules/.bin/tsc-alias +4 -4
  101. package/packages/forms/node_modules/.bin/tsserver +4 -4
  102. package/packages/forms/node_modules/.bin/vite +4 -4
  103. package/packages/forms/package.json +16 -16
  104. package/packages/forms/src/components/Checkbox.tsx +62 -59
  105. package/packages/forms/src/components/FieldsetControl.tsx +62 -55
  106. package/packages/forms/src/components/Input.tsx +38 -35
  107. package/packages/forms/src/components/LabelControl.tsx +56 -52
  108. package/packages/forms/src/components/Radio.tsx +8 -3
  109. package/packages/forms/src/components/Select.tsx +57 -56
  110. package/packages/forms/src/components/Textarea.tsx +55 -30
  111. package/packages/forms/src/components/controlled/CheckboxGroup.tsx +37 -37
  112. package/packages/forms/src/components/controlled/RadioGroup.tsx +5 -3
  113. package/packages/forms/src/components/controlled/SelectControl.tsx +28 -27
  114. package/packages/forms/src/components/controlled/TextareaControl.tsx +28 -27
  115. package/packages/forms/src/components/controlled/index.ts +0 -1
  116. package/packages/forms/src/index.ts +0 -1
  117. package/packages/forms/tsconfig.node.json +1 -1
  118. package/packages/forms/vite.config.ts +1 -1
  119. package/packages/forms/dist/components/controlled/InputControl.d.ts +0 -10
  120. package/packages/forms/dist/components/controlled/InputControl.d.ts.map +0 -1
  121. package/packages/forms/node_modules/.bin/browserslist +0 -17
  122. package/packages/forms/src/components/controlled/InputControl.tsx +0 -39
@@ -2,42 +2,45 @@ import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
  import { ControllerContext } from './context'
4
4
 
5
- export interface InputProps extends React.ComponentProps<'input'> {}
5
+ export interface InputProps extends React.ComponentPropsWithRef<'input'> {}
6
6
 
7
- export const Input = React.forwardRef<HTMLInputElement, InputProps>(
8
- (props, ref) => {
9
- const { className, ...restProps } = props
10
- const ctx = React.useContext(ControllerContext)
11
- if (ctx.isRequired) {
12
- restProps.required = true
13
- }
7
+ export const Input: React.ElementType<InputProps> = React.forwardRef<
8
+ HTMLInputElement,
9
+ InputProps
10
+ >((props, ref) => {
11
+ const { className, ...restProps } = props
12
+ const ctx = React.useContext(ControllerContext)
13
+ if (ctx.isRequired) {
14
+ restProps.required = true
15
+ }
14
16
 
15
- const invalidStyle = ctx.isInvalid ? 'border-sun-800' : 'border-sumi-900'
17
+ const invalidStyle = ctx.isInvalid ? 'border-sun-800' : 'border-sumi-900'
16
18
 
17
- const style = `
18
- p-4
19
- rounded-lg
20
- border
21
- border-solid
22
- focus:outline
23
- focus:outline-2
24
- focus:outline-wood-500
25
- disabled:bg-transparent
26
- disabled:text-sumi-500
27
- disabled:border-sumi-500
28
- `
19
+ const style = `
20
+ p-4
21
+ rounded-lg
22
+ border
23
+ border-solid
24
+ focus:outline
25
+ focus:outline-2
26
+ focus:outline-wood-500
27
+ disabled:bg-transparent
28
+ disabled:text-sumi-500
29
+ disabled:border-sumi-500
30
+ `
29
31
 
30
- return (
31
- <input
32
- type="text"
33
- id={restProps.id ?? ctx.id}
34
- className={cx(style, invalidStyle, className)}
35
- aria-describedby={ctx.helperTextId}
36
- aria-errormessage={ctx.errorMessageId}
37
- aria-invalid={ctx.isInvalid ?? false}
38
- {...restProps}
39
- ref={ref}
40
- />
41
- )
42
- }
43
- ) as React.ElementType
32
+ return (
33
+ <input
34
+ type="text"
35
+ id={restProps.id ?? ctx.id}
36
+ className={cx(style, invalidStyle, className)}
37
+ aria-describedby={ctx.helperTextId}
38
+ aria-errormessage={ctx.errorMessageId}
39
+ aria-invalid={ctx.isInvalid ?? false}
40
+ ref={ref}
41
+ {...restProps}
42
+ />
43
+ )
44
+ })
45
+
46
+ Input.displayName = 'Input'
@@ -2,7 +2,8 @@ import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
  import { ControllerContext } from './context'
4
4
 
5
- export interface LabelControlProps extends React.ComponentProps<'label'> {
5
+ export interface LabelControlProps
6
+ extends React.ComponentPropsWithRef<'label'> {
6
7
  labelText: string
7
8
  helperText?: string
8
9
  errorMessage?: string
@@ -10,57 +11,60 @@ export interface LabelControlProps extends React.ComponentProps<'label'> {
10
11
  isRequired?: boolean
11
12
  }
12
13
 
13
- export const LabelControl = React.forwardRef<
14
- HTMLLabelElement,
15
- LabelControlProps
16
- >((props, ref) => {
17
- const id = React.useId()
18
- const {
19
- labelText,
20
- className,
21
- helperText,
22
- errorMessage,
23
- isInvalid,
24
- isRequired,
25
- children,
26
- ...restProps
27
- } = props
14
+ export const LabelControl: React.ElementType<LabelControlProps> =
15
+ React.forwardRef<HTMLLabelElement, LabelControlProps>((props, ref) => {
16
+ const id = React.useId()
17
+ const {
18
+ labelText,
19
+ className,
20
+ helperText,
21
+ errorMessage,
22
+ isInvalid,
23
+ isRequired,
24
+ children,
25
+ ...restProps
26
+ } = props
28
27
 
29
- const context = {
30
- id: props.htmlFor ?? `input-${id}`,
31
- helperTextId: `helper-text-${id}`,
32
- errorMessageId: `error-message-${id}`,
33
- isInvalid: isInvalid ?? false,
34
- isRequired: isRequired ?? false
35
- }
28
+ const context = {
29
+ id: props.htmlFor ?? `input-${id}`,
30
+ helperTextId: `helper-text-${id}`,
31
+ errorMessageId: `error-message-${id}`,
32
+ isInvalid: isInvalid ?? false,
33
+ isRequired: isRequired ?? false
34
+ }
36
35
 
37
- return (
38
- <ControllerContext.Provider value={context}>
39
- <div className={cx('mb-4', className)}>
40
- <label
41
- className={cx('block mb-2 text-label', isInvalid && 'text-sun-800')}
42
- htmlFor={context.id}
43
- ref={ref}
44
- {...restProps}
45
- >
46
- {labelText}
47
- {isRequired && <span className="text-sun-800">&nbsp;*</span>}
48
- </label>
49
- {helperText && (
50
- <p id={context.helperTextId} className="text-xs text-sumi-700 mb-2">
51
- {helperText}
52
- </p>
53
- )}
54
- {children}
55
- {isInvalid && (
56
- <p
57
- id={context.errorMessageId}
58
- className={cx('text-xs text-sun-800', helperText ? 'mt-1' : 'mt-2')}
36
+ return (
37
+ <ControllerContext.Provider value={context}>
38
+ <div className={cx('mb-4', className)}>
39
+ <label
40
+ className={cx('block mb-2 text-label', isInvalid && 'text-sun-800')}
41
+ htmlFor={context.id}
42
+ ref={ref}
43
+ {...restProps}
59
44
  >
60
- {errorMessage}
61
- </p>
62
- )}
63
- </div>
64
- </ControllerContext.Provider>
65
- )
66
- }) as React.ElementType
45
+ {labelText}
46
+ {isRequired && <span className="text-sun-800">&nbsp;*</span>}
47
+ </label>
48
+ {helperText && (
49
+ <p id={context.helperTextId} className="text-xs text-sumi-700 mb-2">
50
+ {helperText}
51
+ </p>
52
+ )}
53
+ {children}
54
+ {isInvalid && (
55
+ <p
56
+ id={context.errorMessageId}
57
+ className={cx(
58
+ 'text-xs text-sun-800',
59
+ helperText ? 'mt-1' : 'mt-2'
60
+ )}
61
+ >
62
+ {errorMessage}
63
+ </p>
64
+ )}
65
+ </div>
66
+ </ControllerContext.Provider>
67
+ )
68
+ })
69
+
70
+ LabelControl.displayName = 'LabelControl'
@@ -2,9 +2,12 @@ import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
  import { ControllerContext } from './context'
4
4
 
5
- export interface Props extends React.ComponentProps<'input'> {}
5
+ export interface RadioProps extends React.ComponentPropsWithRef<'input'> {}
6
6
 
7
- export const Radio = React.forwardRef<HTMLInputElement, Props>((props, ref) => {
7
+ export const Radio: React.ElementType<RadioProps> = React.forwardRef<
8
+ HTMLInputElement,
9
+ RadioProps
10
+ >((props, ref) => {
8
11
  const { className, children, ...newProps } = props
9
12
  const ctx = React.useContext(ControllerContext)
10
13
  if (ctx.isRequired) {
@@ -58,4 +61,6 @@ export const Radio = React.forwardRef<HTMLInputElement, Props>((props, ref) => {
58
61
  </span>
59
62
  </label>
60
63
  )
61
- }) as React.ElementType
64
+ })
65
+
66
+ Radio.displayName = 'Radio'
@@ -2,64 +2,65 @@ import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
  import { ControllerContext } from './context'
4
4
 
5
- export interface SelectProps extends React.ComponentProps<'select'> {}
5
+ export interface SelectProps extends React.ComponentPropsWithRef<'select'> {}
6
6
 
7
- export const Select = React.forwardRef<HTMLSelectElement, SelectProps>(
8
- (props, ref) => {
9
- const { className, children, ...restProps } = props
10
- const ctx = React.useContext(ControllerContext)
11
- if (ctx.isRequired) {
12
- restProps.required = true
13
- }
7
+ export const Select: React.ElementType<SelectProps> = React.forwardRef<
8
+ HTMLSelectElement,
9
+ SelectProps
10
+ >((props, ref) => {
11
+ const { className, children, ...restProps } = props
12
+ const ctx = React.useContext(ControllerContext)
13
+ if (ctx.isRequired) {
14
+ restProps.required = true
15
+ }
14
16
 
15
- const invalidStyle = ctx.isInvalid ? 'border-sun-800' : 'border-sumi-900'
17
+ const invalidStyle = ctx.isInvalid ? 'border-sun-800' : 'border-sumi-900'
16
18
 
17
- const style = `
18
- peer
19
- cursor-pointer
20
- appearance-none
21
- text-base
22
- w-full
23
- bg-white-100
24
- border
25
- border-solid
26
- py-4 px-4 pr-8
27
- rounded-[8px]
28
- focus:outline
29
- focus:outline-2
30
- focus:outline-wood-500
31
- disabled:bg-transparent
32
- disabled:text-sumi-500
33
- disabled:border-sumi-500
34
- `
19
+ const style = `
20
+ peer
21
+ cursor-pointer
22
+ appearance-none
23
+ text-base
24
+ w-full
25
+ bg-white-100
26
+ border
27
+ border-solid
28
+ py-4 px-4 pr-8
29
+ rounded-[8px]
30
+ focus:outline
31
+ focus:outline-2
32
+ focus:outline-wood-500
33
+ disabled:bg-transparent
34
+ disabled:text-sumi-500
35
+ disabled:border-sumi-500
36
+ `
35
37
 
36
- const styleArrow = `
37
- flex items-center
38
- absolute inset-y-0 right-0
39
- px-2
40
- pointer-events-none
41
- peer-disabled:fill-sumi-500
42
- `
38
+ const styleArrow = `
39
+ flex items-center
40
+ absolute inset-y-0 right-0
41
+ px-2
42
+ pointer-events-none
43
+ peer-disabled:fill-sumi-500
44
+ `
43
45
 
44
- return (
45
- <label className="inline-block relative">
46
- <select
47
- id={restProps.id ?? ctx.id}
48
- className={cx(style, invalidStyle, props.className)}
49
- aria-describedby={ctx.helperTextId}
50
- aria-errormessage={ctx.errorMessageId}
51
- aria-invalid={ctx.isInvalid ?? false}
52
- {...restProps}
53
- ref={ref}
54
- >
55
- {children}
56
- </select>
57
- <span className={styleArrow}>
58
- <svg xmlns="http://www.w3.org/2000/svg" height="24" width="24">
59
- <path d="M12 15.05 6.35 9.4 7.4 8.35l4.6 4.6 4.6-4.6 1.05 1.05Z" />
60
- </svg>
61
- </span>
62
- </label>
63
- )
64
- }
65
- ) as React.ElementType
46
+ return (
47
+ <label className="inline-block relative">
48
+ <select
49
+ id={restProps.id ?? ctx.id}
50
+ className={cx(style, invalidStyle, props.className)}
51
+ aria-describedby={ctx.helperTextId}
52
+ aria-errormessage={ctx.errorMessageId}
53
+ aria-invalid={ctx.isInvalid ?? false}
54
+ {...restProps}
55
+ ref={ref}
56
+ >
57
+ {children}
58
+ </select>
59
+ <span className={styleArrow}>
60
+ <svg xmlns="http://www.w3.org/2000/svg" height="24" width="24">
61
+ <path d="M12 15.05 6.35 9.4 7.4 8.35l4.6 4.6 4.6-4.6 1.05 1.05Z" />
62
+ </svg>
63
+ </span>
64
+ </label>
65
+ )
66
+ })
@@ -2,44 +2,69 @@ import React from 'react'
2
2
  import { cx } from '../utils/class'
3
3
  import { ControllerContext } from './context'
4
4
 
5
- export interface TextareaProps extends React.ComponentProps<'textarea'> {}
6
-
7
- export const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(
8
- (props, ref) => {
9
- const { className, children, ...restProps } = props
10
-
11
- const ctx = React.useContext(ControllerContext)
12
- if (ctx.isRequired) {
13
- restProps.required = true
14
- }
15
-
16
- const invalidStyle = ctx.isInvalid ? 'border-sun-800' : 'border-sumi-900'
17
-
18
- const style = `
19
- p-4
20
- rounded-lg
21
- border
22
- border-solid
23
- focus:outline
24
- focus:outline-2
25
- focus:outline-wood-500
26
- disabled:bg-transparent
27
- disabled:text-sumi-500
28
- disabled:border-sumi-500
29
- `
30
-
31
- return (
5
+ export interface TextareaProps
6
+ extends React.ComponentPropsWithRef<'textarea'> {}
7
+
8
+ export const Textarea: React.ElementType<TextareaProps> = React.forwardRef<
9
+ HTMLTextAreaElement,
10
+ TextareaProps
11
+ >((props, ref) => {
12
+ const { className, children, onChange, maxLength, ...restProps } = props
13
+
14
+ const [count, setCount] = React.useState(0)
15
+
16
+ const onChangeHandler = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
17
+ if (onChange) onChange(e)
18
+
19
+ setCount(e.target.value.length)
20
+ }
21
+
22
+ const ctx = React.useContext(ControllerContext)
23
+ if (ctx.isRequired) {
24
+ restProps.required = true
25
+ }
26
+
27
+ const invalidStyle = ctx.isInvalid ? 'border-sun-800' : 'border-sumi-900'
28
+ const overtextStyle =
29
+ count > (maxLength || 0) ? 'text-sun-800' : 'text-sumi-700'
30
+
31
+ const style = `
32
+ p-4
33
+ rounded-lg
34
+ border
35
+ border-solid
36
+ focus:outline
37
+ focus:outline-2
38
+ focus:outline-wood-500
39
+ disabled:bg-transparent
40
+ disabled:text-sumi-500
41
+ disabled:border-sumi-500
42
+ `
43
+
44
+ return (
45
+ <>
32
46
  <textarea
33
47
  id={restProps.id ?? ctx.id}
34
48
  className={cx(style, invalidStyle, className)}
35
49
  aria-describedby={ctx.helperTextId}
36
50
  aria-errormessage={ctx.errorMessageId}
37
51
  aria-invalid={ctx.isInvalid ?? false}
52
+ onChange={onChangeHandler}
38
53
  {...restProps}
39
54
  ref={ref}
40
55
  >
41
56
  {children}
42
57
  </textarea>
43
- )
44
- }
45
- ) as React.ElementType
58
+ {maxLength ? (
59
+ <p className="text-xs text-sumi-700">
60
+ <span className={overtextStyle}>{count}</span>/
61
+ <span>{maxLength}</span>
62
+ </p>
63
+ ) : (
64
+ ''
65
+ )}
66
+ </>
67
+ )
68
+ })
69
+
70
+ Textarea.displayName = 'Textarea'
@@ -4,7 +4,7 @@ import { FieldsetControl } from '../FieldsetControl'
4
4
  import { InputItem } from './InputItem'
5
5
 
6
6
  export interface CheckboxGroupProps
7
- extends Omit<React.ComponentProps<'fieldset'>, 'onChange'> {
7
+ extends Omit<React.ComponentPropsWithRef<'fieldset'>, 'onChange'> {
8
8
  items: InputItem[]
9
9
  onChange: React.ChangeEventHandler<HTMLInputElement>
10
10
  labelText: string
@@ -14,40 +14,40 @@ export interface CheckboxGroupProps
14
14
  isRequired?: boolean
15
15
  }
16
16
 
17
- export const CheckboxGroup = React.forwardRef<
18
- HTMLFieldSetElement,
19
- CheckboxGroupProps
20
- >((props, ref) => {
21
- const {
22
- items,
23
- onChange,
24
- className,
25
- labelText,
26
- helperText,
27
- errorMessage,
28
- isInvalid,
29
- isRequired,
30
- ...restProps
31
- } = props
17
+ export const CheckboxGroup: React.ElementType<CheckboxGroupProps> =
18
+ React.forwardRef<HTMLFieldSetElement, CheckboxGroupProps>((props, ref) => {
19
+ const {
20
+ items,
21
+ onChange,
22
+ className,
23
+ labelText,
24
+ helperText,
25
+ errorMessage,
26
+ isInvalid,
27
+ isRequired,
28
+ ...restProps
29
+ } = props
32
30
 
33
- return (
34
- <FieldsetControl
35
- className={className}
36
- labelText={labelText}
37
- helperText={helperText}
38
- errorMessage={errorMessage}
39
- isInvalid={isInvalid}
40
- isRequired={isRequired}
41
- ref={ref}
42
- {...restProps}
43
- >
44
- {items.map(({ label, value }, index) => {
45
- return (
46
- <Checkbox key={index} value={value} onChange={onChange}>
47
- {label}
48
- </Checkbox>
49
- )
50
- })}
51
- </FieldsetControl>
52
- )
53
- }) as React.ElementType
31
+ return (
32
+ <FieldsetControl
33
+ className={className}
34
+ labelText={labelText}
35
+ helperText={helperText}
36
+ errorMessage={errorMessage}
37
+ isInvalid={isInvalid}
38
+ isRequired={isRequired}
39
+ ref={ref}
40
+ {...restProps}
41
+ >
42
+ {items.map(({ label, value }, index) => {
43
+ return (
44
+ <Checkbox key={index} value={value} onChange={onChange}>
45
+ {label}
46
+ </Checkbox>
47
+ )
48
+ })}
49
+ </FieldsetControl>
50
+ )
51
+ })
52
+
53
+ CheckboxGroup.displayName = 'CheckboxGroup'
@@ -4,7 +4,7 @@ import { FieldsetControl } from '../FieldsetControl'
4
4
  import { InputItem } from './InputItem'
5
5
 
6
6
  export interface RadioGroupProps
7
- extends Omit<React.ComponentProps<'fieldset'>, 'onChange'> {
7
+ extends Omit<React.ComponentPropsWithRef<'fieldset'>, 'onChange'> {
8
8
  items: InputItem[]
9
9
  onChange: React.ChangeEventHandler<HTMLInputElement>
10
10
  labelText: string
@@ -15,7 +15,7 @@ export interface RadioGroupProps
15
15
  defaultValue?: string
16
16
  }
17
17
 
18
- export const RadioGroup = React.forwardRef<
18
+ export const RadioGroup: React.ElementType<RadioGroupProps> = React.forwardRef<
19
19
  HTMLFieldSetElement,
20
20
  RadioGroupProps
21
21
  >((props, ref) => {
@@ -57,4 +57,6 @@ export const RadioGroup = React.forwardRef<
57
57
  })}
58
58
  </FieldsetControl>
59
59
  )
60
- }) as React.ElementType
60
+ })
61
+
62
+ RadioGroup.displayName = 'RadioGroup'
@@ -2,7 +2,8 @@ import React from 'react'
2
2
  import { LabelControl } from '../LabelControl'
3
3
  import { Select } from '../Select'
4
4
 
5
- export interface SelectControlProps extends React.ComponentProps<'select'> {
5
+ export interface SelectControlProps
6
+ extends React.ComponentPropsWithRef<'select'> {
6
7
  labelText: string
7
8
  helperText?: string
8
9
  errorMessage?: string
@@ -10,30 +11,30 @@ export interface SelectControlProps extends React.ComponentProps<'select'> {
10
11
  isRequired?: boolean
11
12
  }
12
13
 
13
- export const SelectControl = React.forwardRef<
14
- HTMLSelectElement,
15
- SelectControlProps
16
- >((props, ref) => {
17
- const {
18
- className,
19
- labelText,
20
- helperText,
21
- errorMessage,
22
- isInvalid,
23
- isRequired,
24
- ...restProps
25
- } = props
14
+ export const SelectControl: React.ElementType<SelectControlProps> =
15
+ React.forwardRef<HTMLSelectElement, SelectControlProps>((props, ref) => {
16
+ const {
17
+ className,
18
+ labelText,
19
+ helperText,
20
+ errorMessage,
21
+ isInvalid,
22
+ isRequired,
23
+ ...restProps
24
+ } = props
26
25
 
27
- return (
28
- <LabelControl
29
- className={className}
30
- labelText={labelText}
31
- helperText={helperText}
32
- errorMessage={errorMessage}
33
- isInvalid={isInvalid}
34
- isRequired={isRequired}
35
- >
36
- <Select ref={ref} {...restProps} />
37
- </LabelControl>
38
- )
39
- }) as React.ElementType
26
+ return (
27
+ <LabelControl
28
+ className={className}
29
+ labelText={labelText}
30
+ helperText={helperText}
31
+ errorMessage={errorMessage}
32
+ isInvalid={isInvalid}
33
+ isRequired={isRequired}
34
+ >
35
+ <Select ref={ref} {...restProps} />
36
+ </LabelControl>
37
+ )
38
+ })
39
+
40
+ SelectControl.displayName = 'SelectControl'