@sakura-ui/sakura-ui 0.1.12 → 0.1.14

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 (104) hide show
  1. package/README.md +3 -3
  2. package/package.json +1 -1
  3. package/packages/config/package.json +1 -1
  4. package/packages/config/src/index.ts +68 -53
  5. package/packages/core/.eslintrc.json +25 -0
  6. package/packages/core/coverage/clover.xml +258 -0
  7. package/packages/core/coverage/coverage-final.json +2700 -0
  8. package/packages/core/coverage/lcov-report/base.css +362 -0
  9. package/packages/core/coverage/lcov-report/block-navigation.js +85 -0
  10. package/packages/core/coverage/lcov-report/favicon.png +0 -0
  11. package/packages/core/coverage/lcov-report/index.html +216 -0
  12. package/packages/core/coverage/lcov-report/prettify.css +101 -0
  13. package/packages/core/coverage/lcov-report/prettify.js +1004 -0
  14. package/packages/core/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  15. package/packages/core/coverage/lcov-report/sorter.js +191 -0
  16. package/packages/core/coverage/lcov-report/src/components/Button.tsx.html +303 -0
  17. package/packages/core/coverage/lcov-report/src/components/Card.tsx.html +399 -0
  18. package/packages/core/coverage/lcov-report/src/components/Code.tsx.html +144 -0
  19. package/packages/core/coverage/lcov-report/src/components/Heading.tsx.html +405 -0
  20. package/packages/core/coverage/lcov-report/src/components/Icon.tsx.html +183 -0
  21. package/packages/core/coverage/lcov-report/src/components/IconButton.tsx.html +378 -0
  22. package/packages/core/coverage/lcov-report/src/components/InfoCard.tsx.html +240 -0
  23. package/packages/core/coverage/lcov-report/src/components/Link.tsx.html +324 -0
  24. package/packages/core/coverage/lcov-report/src/components/List.tsx.html +204 -0
  25. package/packages/core/coverage/lcov-report/src/components/Pre.tsx.html +153 -0
  26. package/packages/core/coverage/lcov-report/src/components/Table.tsx.html +429 -0
  27. package/packages/core/coverage/lcov-report/src/components/index.html +396 -0
  28. package/packages/core/coverage/lcov-report/src/components/index.ts.html +126 -0
  29. package/packages/core/coverage/lcov-report/src/index.html +176 -0
  30. package/packages/core/coverage/lcov-report/src/index.ts.html +171 -0
  31. package/packages/core/coverage/lcov-report/src/utils/class.ts.html +90 -0
  32. package/packages/core/coverage/lcov-report/src/utils/index.html +176 -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 +16 -2
  36. package/packages/core/src/components/Button.tsx +57 -53
  37. package/packages/core/src/components/Card.tsx +86 -7
  38. package/packages/core/src/components/Code.tsx +1 -1
  39. package/packages/core/src/components/Faq.tsx +82 -0
  40. package/packages/core/src/components/Heading.tsx +42 -30
  41. package/packages/core/src/components/Icon.tsx +1 -4
  42. package/packages/core/src/components/IconButton.tsx +88 -73
  43. package/packages/core/src/components/InfoCard.tsx +13 -13
  44. package/packages/core/src/components/Link.tsx +23 -24
  45. package/packages/core/src/components/List.tsx +3 -3
  46. package/packages/core/src/components/Pre.tsx +1 -1
  47. package/packages/core/src/components/Table.tsx +7 -9
  48. package/packages/core/src/components/index.ts +5 -2
  49. package/packages/core/src/index.ts +6 -0
  50. package/packages/core/tests/Card.test.tsx +19 -0
  51. package/packages/forms/dist/components/Checkbox.d.ts +1 -1
  52. package/packages/forms/dist/components/Checkbox.d.ts.map +1 -1
  53. package/packages/forms/dist/components/Checkbox.js.map +1 -1
  54. package/packages/forms/dist/components/FieldsetControl.d.ts +1 -1
  55. package/packages/forms/dist/components/FieldsetControl.d.ts.map +1 -1
  56. package/packages/forms/dist/components/FieldsetControl.js +1 -1
  57. package/packages/forms/dist/components/FieldsetControl.js.map +1 -1
  58. package/packages/forms/dist/components/Input.d.ts +1 -1
  59. package/packages/forms/dist/components/Input.d.ts.map +1 -1
  60. package/packages/forms/dist/components/Input.js.map +1 -1
  61. package/packages/forms/dist/components/LabelControl.d.ts +1 -1
  62. package/packages/forms/dist/components/LabelControl.d.ts.map +1 -1
  63. package/packages/forms/dist/components/LabelControl.js +1 -1
  64. package/packages/forms/dist/components/LabelControl.js.map +1 -1
  65. package/packages/forms/dist/components/Radio.d.ts +1 -1
  66. package/packages/forms/dist/components/Radio.d.ts.map +1 -1
  67. package/packages/forms/dist/components/Radio.js.map +1 -1
  68. package/packages/forms/dist/components/Select.d.ts +1 -1
  69. package/packages/forms/dist/components/Select.d.ts.map +1 -1
  70. package/packages/forms/dist/components/Select.js.map +1 -1
  71. package/packages/forms/dist/components/Textarea.d.ts +1 -1
  72. package/packages/forms/dist/components/Textarea.d.ts.map +1 -1
  73. package/packages/forms/dist/components/Textarea.js +1 -1
  74. package/packages/forms/dist/components/Textarea.js.map +1 -1
  75. package/packages/forms/dist/components/controlled/CheckboxGroup.d.ts +1 -1
  76. package/packages/forms/dist/components/controlled/CheckboxGroup.d.ts.map +1 -1
  77. package/packages/forms/dist/components/controlled/CheckboxGroup.js.map +1 -1
  78. package/packages/forms/dist/components/controlled/RadioGroup.d.ts +1 -1
  79. package/packages/forms/dist/components/controlled/RadioGroup.d.ts.map +1 -1
  80. package/packages/forms/dist/components/controlled/RadioGroup.js.map +1 -1
  81. package/packages/forms/dist/components/controlled/SelectControl.d.ts +1 -1
  82. package/packages/forms/dist/components/controlled/SelectControl.d.ts.map +1 -1
  83. package/packages/forms/dist/components/controlled/SelectControl.js.map +1 -1
  84. package/packages/forms/dist/components/controlled/TextareaControl.d.ts +1 -1
  85. package/packages/forms/dist/components/controlled/TextareaControl.d.ts.map +1 -1
  86. package/packages/forms/dist/components/controlled/TextareaControl.js.map +1 -1
  87. package/packages/forms/dist/index.cjs.js +1 -1
  88. package/packages/forms/dist/index.cjs.js.map +1 -1
  89. package/packages/forms/dist/index.es.js +123 -116
  90. package/packages/forms/dist/index.es.js.map +1 -1
  91. package/packages/forms/jest.config.ts +0 -3
  92. package/packages/forms/node_modules/.bin/browserslist +17 -0
  93. package/packages/forms/package.json +1 -1
  94. package/packages/forms/src/components/Checkbox.tsx +35 -36
  95. package/packages/forms/src/components/FieldsetControl.tsx +57 -58
  96. package/packages/forms/src/components/Input.tsx +23 -24
  97. package/packages/forms/src/components/LabelControl.tsx +54 -52
  98. package/packages/forms/src/components/Radio.tsx +32 -33
  99. package/packages/forms/src/components/Select.tsx +32 -33
  100. package/packages/forms/src/components/Textarea.tsx +42 -43
  101. package/packages/forms/src/components/controlled/CheckboxGroup.tsx +36 -34
  102. package/packages/forms/src/components/controlled/RadioGroup.tsx +1 -1
  103. package/packages/forms/src/components/controlled/SelectControl.tsx +26 -24
  104. package/packages/forms/src/components/controlled/TextareaControl.tsx +26 -24
@@ -12,67 +12,66 @@ export interface FieldsetControlProps
12
12
  direction?: 'flex-col' | 'flex-row'
13
13
  }
14
14
 
15
- export const FieldsetControl: React.ElementType<FieldsetControlProps> =
16
- React.forwardRef<HTMLFieldSetElement, FieldsetControlProps>((props, ref) => {
17
- const id = React.useId()
18
- const {
19
- labelText,
20
- className,
21
- helperText,
22
- errorMessage,
23
- isInvalid,
24
- isRequired,
25
- direction,
26
- children,
27
- ...restProps
28
- } = props
15
+ export const FieldsetControl = React.forwardRef<
16
+ HTMLFieldSetElement,
17
+ FieldsetControlProps
18
+ >((props, ref) => {
19
+ const id = React.useId()
20
+ const {
21
+ labelText,
22
+ className,
23
+ helperText,
24
+ errorMessage,
25
+ isInvalid,
26
+ isRequired,
27
+ direction,
28
+ children,
29
+ ...restProps
30
+ } = props
29
31
 
30
- const groupName = restProps.name ?? `group-${id}`
32
+ const groupName = restProps.name ?? `group-${id}`
31
33
 
32
- const context = {
33
- groupName: groupName,
34
- helperTextId: `helper-text-${id}`,
35
- errorMessageId: `error-message-${id}`,
36
- isInvalid: isInvalid ?? false,
37
- isRequired: isRequired ?? false
38
- }
34
+ const context = {
35
+ groupName: groupName,
36
+ helperTextId: `helper-text-${id}`,
37
+ errorMessageId: `error-message-${id}`,
38
+ isInvalid: isInvalid ?? false,
39
+ isRequired: isRequired ?? false
40
+ }
39
41
 
40
- const styleDirection = direction ?? 'flex-col'
42
+ const styleDirection = direction ?? 'flex-col'
41
43
 
42
- return (
43
- <ControllerContext.Provider value={context}>
44
- <fieldset className={cx('mb-4', className)} ref={ref} {...restProps}>
45
- <legend>
46
- <p
47
- className={cx(
48
- 'block mb-2 text-label',
49
- isInvalid && 'text-sun-800'
50
- )}
51
- >
52
- {labelText}
53
- {isRequired && <span className="text-sun-800">&nbsp;*</span>}
54
- </p>
55
- </legend>
56
- <div className={cx('inline-flex', styleDirection)}>{children}</div>
57
- {helperText && (
58
- <p id={context.helperTextId} className="text-xs text-sumi-700 mt-2">
59
- {helperText}
60
- </p>
61
- )}
62
- {isInvalid && (
63
- <p
64
- id={context.errorMessageId}
65
- className={cx(
66
- 'text-xs text-sun-800',
67
- helperText ? 'mt-1' : 'mt-2'
68
- )}
69
- >
70
- {errorMessage}
71
- </p>
72
- )}
73
- </fieldset>
74
- </ControllerContext.Provider>
75
- )
76
- })
44
+ return (
45
+ <ControllerContext.Provider value={context}>
46
+ <fieldset className={cx('mb-4', className)} ref={ref} {...restProps}>
47
+ <legend>
48
+ <p
49
+ className={cx('block mb-2 text-label', isInvalid && 'text-sun-800')}
50
+ >
51
+ {labelText}
52
+ {isRequired && <span className="text-sun-800">&nbsp;*</span>}
53
+ </p>
54
+ </legend>
55
+ <div className={cx('inline-flex', styleDirection)}>{children}</div>
56
+ {helperText && (
57
+ <p id={context.helperTextId} className="text-sup text-sumi-700 mt-2">
58
+ {helperText}
59
+ </p>
60
+ )}
61
+ {isInvalid && (
62
+ <p
63
+ id={context.errorMessageId}
64
+ className={cx(
65
+ 'text-sup text-sun-800',
66
+ helperText ? 'mt-1' : 'mt-2'
67
+ )}
68
+ >
69
+ {errorMessage}
70
+ </p>
71
+ )}
72
+ </fieldset>
73
+ </ControllerContext.Provider>
74
+ )
75
+ })
77
76
 
78
77
  FieldsetControl.displayName = 'FieldsetControl'
@@ -4,19 +4,17 @@ import { ControllerContext } from './context'
4
4
 
5
5
  export interface InputProps extends React.ComponentPropsWithRef<'input'> {}
6
6
 
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
- }
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
+ }
16
14
 
17
- const invalidStyle = ctx.isInvalid ? 'border-sun-800' : 'border-sumi-900'
15
+ const invalidStyle = ctx.isInvalid ? 'border-sun-800' : 'border-sumi-900'
18
16
 
19
- const style = `
17
+ const style = `
20
18
  p-4
21
19
  rounded-lg
22
20
  border
@@ -29,18 +27,19 @@ export const Input: React.ElementType<InputProps> = React.forwardRef<
29
27
  disabled:border-sumi-500
30
28
  `
31
29
 
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
- })
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
+ ref={ref}
39
+ {...restProps}
40
+ />
41
+ )
42
+ }
43
+ )
45
44
 
46
45
  Input.displayName = 'Input'
@@ -11,60 +11,62 @@ export interface LabelControlProps
11
11
  isRequired?: boolean
12
12
  }
13
13
 
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
14
+ export const LabelControl = React.forwardRef<
15
+ HTMLLabelElement,
16
+ LabelControlProps
17
+ >((props, ref) => {
18
+ const id = React.useId()
19
+ const {
20
+ labelText,
21
+ className,
22
+ helperText,
23
+ errorMessage,
24
+ isInvalid,
25
+ isRequired,
26
+ children,
27
+ ...restProps
28
+ } = props
27
29
 
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
- }
30
+ const context = {
31
+ id: props.htmlFor ?? `input-${id}`,
32
+ helperTextId: `helper-text-${id}`,
33
+ errorMessageId: `error-message-${id}`,
34
+ isInvalid: isInvalid ?? false,
35
+ isRequired: isRequired ?? false
36
+ }
35
37
 
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}
38
+ return (
39
+ <ControllerContext.Provider value={context}>
40
+ <div className={cx('mb-4', className)}>
41
+ <label
42
+ className={cx('block mb-2 text-label', isInvalid && 'text-sun-800')}
43
+ htmlFor={context.id}
44
+ ref={ref}
45
+ {...restProps}
46
+ >
47
+ {labelText}
48
+ {isRequired && <span className="text-sun-800">&nbsp;*</span>}
49
+ </label>
50
+ {helperText && (
51
+ <p id={context.helperTextId} className="text-sup text-sumi-700 mb-2">
52
+ {helperText}
53
+ </p>
54
+ )}
55
+ {children}
56
+ {isInvalid && (
57
+ <p
58
+ id={context.errorMessageId}
59
+ className={cx(
60
+ 'text-sup text-sun-800',
61
+ helperText ? 'mt-1' : 'mt-2'
62
+ )}
44
63
  >
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
- })
64
+ {errorMessage}
65
+ </p>
66
+ )}
67
+ </div>
68
+ </ControllerContext.Provider>
69
+ )
70
+ })
69
71
 
70
72
  LabelControl.displayName = 'LabelControl'
@@ -4,20 +4,18 @@ import { ControllerContext } from './context'
4
4
 
5
5
  export interface RadioProps extends React.ComponentPropsWithRef<'input'> {}
6
6
 
7
- export const Radio: React.ElementType<RadioProps> = React.forwardRef<
8
- HTMLInputElement,
9
- RadioProps
10
- >((props, ref) => {
11
- const { className, children, ...newProps } = props
12
- const ctx = React.useContext(ControllerContext)
13
- if (ctx.isRequired) {
14
- newProps.required = true
15
- }
16
- if (ctx.groupName) {
17
- newProps.name = ctx.groupName
18
- }
7
+ export const Radio = React.forwardRef<HTMLInputElement, RadioProps>(
8
+ (props, ref) => {
9
+ const { className, children, ...newProps } = props
10
+ const ctx = React.useContext(ControllerContext)
11
+ if (ctx.isRequired) {
12
+ newProps.required = true
13
+ }
14
+ if (ctx.groupName) {
15
+ newProps.name = ctx.groupName
16
+ }
19
17
 
20
- const style = `
18
+ const style = `
21
19
  inline-block
22
20
  text-base
23
21
  cursor-pointer
@@ -25,12 +23,12 @@ export const Radio: React.ElementType<RadioProps> = React.forwardRef<
25
23
  mr-4
26
24
 
27
25
  `
28
- const styleInput = `
26
+ const styleInput = `
29
27
  peer
30
28
  hidden
31
29
  `
32
30
 
33
- const styleRadio = `
31
+ const styleRadio = `
34
32
  bg-clip-content
35
33
  w-6 h-6
36
34
  ml-1
@@ -44,23 +42,24 @@ export const Radio: React.ElementType<RadioProps> = React.forwardRef<
44
42
  peer-checked:border-sea-600
45
43
  peer-disabled:border-sumi-500
46
44
  `
47
- return (
48
- <label htmlFor={newProps.id} className={cx(style, className)}>
49
- <span className="flex items-center">
50
- <input
51
- className={styleInput}
52
- type="radio"
53
- aria-describedby={ctx.helperTextId}
54
- aria-errormessage={ctx.errorMessageId}
55
- aria-invalid={ctx.isInvalid ?? false}
56
- {...newProps}
57
- ref={ref}
58
- />
59
- <span className={styleRadio}></span>
60
- <span className="peer-disabled:text-sumi-500">{children}</span>
61
- </span>
62
- </label>
63
- )
64
- })
45
+ return (
46
+ <label htmlFor={newProps.id} className={cx(style, className)}>
47
+ <span className="flex items-center">
48
+ <input
49
+ className={styleInput}
50
+ type="radio"
51
+ aria-describedby={ctx.helperTextId}
52
+ aria-errormessage={ctx.errorMessageId}
53
+ aria-invalid={ctx.isInvalid ?? false}
54
+ {...newProps}
55
+ ref={ref}
56
+ />
57
+ <span className={styleRadio}></span>
58
+ <span className="peer-disabled:text-sumi-500">{children}</span>
59
+ </span>
60
+ </label>
61
+ )
62
+ }
63
+ )
65
64
 
66
65
  Radio.displayName = 'Radio'
@@ -4,19 +4,17 @@ import { ControllerContext } from './context'
4
4
 
5
5
  export interface SelectProps extends React.ComponentPropsWithRef<'select'> {}
6
6
 
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
- }
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
+ }
16
14
 
17
- const invalidStyle = ctx.isInvalid ? 'border-sun-800' : 'border-sumi-900'
15
+ const invalidStyle = ctx.isInvalid ? 'border-sun-800' : 'border-sumi-900'
18
16
 
19
- const style = `
17
+ const style = `
20
18
  peer
21
19
  cursor-pointer
22
20
  appearance-none
@@ -35,7 +33,7 @@ export const Select: React.ElementType<SelectProps> = React.forwardRef<
35
33
  disabled:border-sumi-500
36
34
  `
37
35
 
38
- const styleArrow = `
36
+ const styleArrow = `
39
37
  flex items-center
40
38
  absolute inset-y-0 right-0
41
39
  px-2
@@ -43,24 +41,25 @@ export const Select: React.ElementType<SelectProps> = React.forwardRef<
43
41
  peer-disabled:fill-sumi-500
44
42
  `
45
43
 
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
- })
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
+ )
@@ -5,30 +5,28 @@ import { ControllerContext } from './context'
5
5
  export interface TextareaProps
6
6
  extends React.ComponentPropsWithRef<'textarea'> {}
7
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
8
+ export const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(
9
+ (props, ref) => {
10
+ const { className, children, onChange, maxLength, ...restProps } = props
13
11
 
14
- const [count, setCount] = React.useState(0)
12
+ const [count, setCount] = React.useState(0)
15
13
 
16
- const onChangeHandler = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
17
- if (onChange) onChange(e)
14
+ const onChangeHandler = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
15
+ if (onChange) onChange(e)
18
16
 
19
- setCount(e.target.value.length)
20
- }
17
+ setCount(e.target.value.length)
18
+ }
21
19
 
22
- const ctx = React.useContext(ControllerContext)
23
- if (ctx.isRequired) {
24
- restProps.required = true
25
- }
20
+ const ctx = React.useContext(ControllerContext)
21
+ if (ctx.isRequired) {
22
+ restProps.required = true
23
+ }
26
24
 
27
- const invalidStyle = ctx.isInvalid ? 'border-sun-800' : 'border-sumi-900'
28
- const overtextStyle =
29
- count > (maxLength || 0) ? 'text-sun-800' : 'text-sumi-700'
25
+ const invalidStyle = ctx.isInvalid ? 'border-sun-800' : 'border-sumi-900'
26
+ const overtextStyle =
27
+ count > (maxLength || 0) ? 'text-sun-800' : 'text-sumi-700'
30
28
 
31
- const style = `
29
+ const style = `
32
30
  p-4
33
31
  rounded-lg
34
32
  border
@@ -41,30 +39,31 @@ export const Textarea: React.ElementType<TextareaProps> = React.forwardRef<
41
39
  disabled:border-sumi-500
42
40
  `
43
41
 
44
- return (
45
- <>
46
- <textarea
47
- id={restProps.id ?? ctx.id}
48
- className={cx(style, invalidStyle, className)}
49
- aria-describedby={ctx.helperTextId}
50
- aria-errormessage={ctx.errorMessageId}
51
- aria-invalid={ctx.isInvalid ?? false}
52
- onChange={onChangeHandler}
53
- {...restProps}
54
- ref={ref}
55
- >
56
- {children}
57
- </textarea>
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
- })
42
+ return (
43
+ <>
44
+ <textarea
45
+ id={restProps.id ?? ctx.id}
46
+ className={cx(style, invalidStyle, className)}
47
+ aria-describedby={ctx.helperTextId}
48
+ aria-errormessage={ctx.errorMessageId}
49
+ aria-invalid={ctx.isInvalid ?? false}
50
+ onChange={onChangeHandler}
51
+ {...restProps}
52
+ ref={ref}
53
+ >
54
+ {children}
55
+ </textarea>
56
+ {maxLength ? (
57
+ <p className="text-sup text-sumi-700">
58
+ <span className={overtextStyle}>{count}</span>/
59
+ <span>{maxLength}</span>
60
+ </p>
61
+ ) : (
62
+ ''
63
+ )}
64
+ </>
65
+ )
66
+ }
67
+ )
69
68
 
70
69
  Textarea.displayName = 'Textarea'
@@ -14,40 +14,42 @@ export interface CheckboxGroupProps
14
14
  isRequired?: boolean
15
15
  }
16
16
 
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
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
30
32
 
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
- })
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
+ })
52
54
 
53
55
  CheckboxGroup.displayName = 'CheckboxGroup'
@@ -15,7 +15,7 @@ export interface RadioGroupProps
15
15
  defaultValue?: string
16
16
  }
17
17
 
18
- export const RadioGroup: React.ElementType<RadioGroupProps> = React.forwardRef<
18
+ export const RadioGroup = React.forwardRef<
19
19
  HTMLFieldSetElement,
20
20
  RadioGroupProps
21
21
  >((props, ref) => {