@sakura-ui/sakura-ui 0.1.16 → 0.1.17

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 (66) hide show
  1. package/package.json +1 -1
  2. package/packages/config/package.json +2 -1
  3. package/packages/config/src/index.ts +8 -0
  4. package/packages/core/package.json +2 -1
  5. package/packages/core/src/components/Button.tsx +23 -56
  6. package/packages/core/src/components/Card.tsx +14 -14
  7. package/packages/core/src/components/Code.tsx +1 -1
  8. package/packages/core/src/components/Faq.tsx +3 -5
  9. package/packages/core/src/components/Heading.tsx +1 -1
  10. package/packages/core/src/components/Icon.tsx +2 -6
  11. package/packages/core/src/components/IconButton.tsx +47 -76
  12. package/packages/core/src/components/InfoCard.tsx +1 -1
  13. package/packages/core/src/components/Link.tsx +53 -44
  14. package/packages/core/src/components/List.tsx +1 -1
  15. package/packages/core/src/components/Pre.tsx +1 -1
  16. package/packages/core/src/components/Table.tsx +1 -1
  17. package/packages/core/src/components/buttonStyle.ts +83 -0
  18. package/packages/core/src/components/index.ts +24 -7
  19. package/packages/core/src/index.ts +26 -0
  20. package/packages/core/src/libs/forward-ref.ts +41 -0
  21. package/packages/core/src/types/component.ts +82 -0
  22. package/packages/forms/dist/components/Checkbox.d.ts.map +1 -1
  23. package/packages/forms/dist/components/Checkbox.js +26 -23
  24. package/packages/forms/dist/components/Checkbox.js.map +1 -1
  25. package/packages/forms/dist/components/FileInput.d.ts +5 -0
  26. package/packages/forms/dist/components/FileInput.d.ts.map +1 -0
  27. package/packages/forms/dist/components/FileInput.js +51 -0
  28. package/packages/forms/dist/components/FileInput.js.map +1 -0
  29. package/packages/forms/dist/components/Input.d.ts.map +1 -1
  30. package/packages/forms/dist/components/Input.js +1 -0
  31. package/packages/forms/dist/components/Input.js.map +1 -1
  32. package/packages/forms/dist/components/LabelControl.d.ts.map +1 -1
  33. package/packages/forms/dist/components/LabelControl.js +7 -1
  34. package/packages/forms/dist/components/LabelControl.js.map +1 -1
  35. package/packages/forms/dist/components/Radio.d.ts.map +1 -1
  36. package/packages/forms/dist/components/Radio.js +25 -23
  37. package/packages/forms/dist/components/Radio.js.map +1 -1
  38. package/packages/forms/dist/components/Select.d.ts.map +1 -1
  39. package/packages/forms/dist/components/Select.js +1 -0
  40. package/packages/forms/dist/components/Select.js.map +1 -1
  41. package/packages/forms/dist/components/Textarea.d.ts.map +1 -1
  42. package/packages/forms/dist/components/Textarea.js +1 -0
  43. package/packages/forms/dist/components/Textarea.js.map +1 -1
  44. package/packages/forms/dist/components/index.d.ts +8 -7
  45. package/packages/forms/dist/components/index.d.ts.map +1 -1
  46. package/packages/forms/dist/components/index.js +1 -0
  47. package/packages/forms/dist/components/index.js.map +1 -1
  48. package/packages/forms/dist/index.cjs.js +103 -59
  49. package/packages/forms/dist/index.cjs.js.map +1 -1
  50. package/packages/forms/dist/index.d.ts +2 -1
  51. package/packages/forms/dist/index.d.ts.map +1 -1
  52. package/packages/forms/dist/index.es.js +383 -313
  53. package/packages/forms/dist/index.es.js.map +1 -1
  54. package/packages/forms/dist/index.js +1 -1
  55. package/packages/forms/dist/index.js.map +1 -1
  56. package/packages/forms/package.json +2 -1
  57. package/packages/forms/src/components/Checkbox.tsx +26 -23
  58. package/packages/forms/src/components/FileInput.tsx +77 -0
  59. package/packages/forms/src/components/Input.tsx +1 -0
  60. package/packages/forms/src/components/LabelControl.tsx +13 -6
  61. package/packages/forms/src/components/Radio.tsx +27 -23
  62. package/packages/forms/src/components/Select.tsx +1 -0
  63. package/packages/forms/src/components/Textarea.tsx +1 -0
  64. package/packages/forms/src/components/index.ts +8 -7
  65. package/packages/forms/src/index.ts +12 -0
  66. /package/packages/core/src/{utils/class.ts → libs/cx.ts} +0 -0
@@ -0,0 +1,77 @@
1
+ import React from 'react'
2
+ import { cx } from '../utils/class'
3
+ import { ControllerContext } from './context'
4
+
5
+ export interface FileInputProps extends React.ComponentPropsWithRef<'input'> {}
6
+
7
+ export const FileInput = React.forwardRef<HTMLInputElement, FileInputProps>(
8
+ (props, ref) => {
9
+ const { className, ...restProps } = props
10
+ const ctx = React.useContext(ControllerContext)
11
+ if (ctx.isRequired) {
12
+ restProps.required = true
13
+ }
14
+
15
+ const invalidStyle = ctx.isInvalid ? 'text-sun-800' : 'text-sumi-900'
16
+
17
+ const base = `
18
+ file:inline-block
19
+ file:text-button
20
+ file:text-center
21
+ file:cursor-pointer
22
+ file:whitespace-nowrap
23
+ file:border
24
+ file:border-solid
25
+ file:border-sea-800
26
+ file:active:border-sea-1200
27
+ file:hover:border-sea-900
28
+ file:disabled:border-sumi-500
29
+ file:disabled:cursor-not-allowed
30
+ `
31
+
32
+ const secondary = `
33
+ file:text-sea-800
34
+ file:bg-transparent
35
+ file:active:bg-sea-200
36
+ file:hover:bg-sea-100
37
+ file:active:text-sea-1200
38
+ file:hover:text-sea-900
39
+ file:disabled:text-sumi-500
40
+ file:disabled:bg-transparent
41
+ `
42
+ const styleLg = `
43
+ file:p-4
44
+ file:text-button
45
+ file:rounded-lg
46
+ `
47
+ const styleInput = `
48
+ rounded-lg
49
+ outline-offset-2
50
+ focus:outline
51
+ focus:outline-2
52
+ focus:outline-wood-600
53
+ `
54
+
55
+ return (
56
+ <input
57
+ type="file"
58
+ id={restProps.id ?? ctx.id}
59
+ className={cx(
60
+ base,
61
+ secondary,
62
+ styleLg,
63
+ styleInput,
64
+ invalidStyle,
65
+ className
66
+ )}
67
+ aria-describedby={ctx.helperTextId}
68
+ aria-errormessage={ctx.errorMessageId}
69
+ aria-invalid={ctx.isInvalid ?? false}
70
+ ref={ref}
71
+ {...restProps}
72
+ />
73
+ )
74
+ }
75
+ )
76
+
77
+ FileInput.displayName = 'FileInput'
@@ -19,6 +19,7 @@ export const Input = React.forwardRef<HTMLInputElement, InputProps>(
19
19
  rounded-lg
20
20
  border
21
21
  border-solid
22
+ outline-offset-2
22
23
  focus:outline
23
24
  focus:outline-2
24
25
  focus:outline-wood-500
@@ -35,6 +35,14 @@ export const LabelControl = React.forwardRef<
35
35
  isRequired: isRequired ?? false
36
36
  }
37
37
 
38
+ const styleHelp = `
39
+ text-sup text-sumi-700
40
+ `
41
+
42
+ const styleError = `
43
+ text-sup text-sun-800
44
+ `
45
+
38
46
  return (
39
47
  <ControllerContext.Provider value={context}>
40
48
  <div className={cx('mb-4', className)}>
@@ -45,10 +53,12 @@ export const LabelControl = React.forwardRef<
45
53
  {...restProps}
46
54
  >
47
55
  {labelText}
48
- {isRequired && <span className="text-sun-800">&nbsp;*</span>}
56
+ {isRequired && (
57
+ <span className="text-label text-sun-800">&nbsp;*</span>
58
+ )}
49
59
  </label>
50
60
  {helperText && (
51
- <p id={context.helperTextId} className="text-sup text-sumi-700 mb-2">
61
+ <p id={context.helperTextId} className={cx(styleHelp, 'mb-2')}>
52
62
  {helperText}
53
63
  </p>
54
64
  )}
@@ -56,10 +66,7 @@ export const LabelControl = React.forwardRef<
56
66
  {isInvalid && (
57
67
  <p
58
68
  id={context.errorMessageId}
59
- className={cx(
60
- 'text-sup text-sun-800',
61
- helperText ? 'mt-1' : 'mt-2'
62
- )}
69
+ className={cx(styleError, helperText ? 'mt-1' : 'mt-2')}
63
70
  >
64
71
  {errorMessage}
65
72
  </p>
@@ -16,32 +16,36 @@ export const Radio = React.forwardRef<HTMLInputElement, RadioProps>(
16
16
  }
17
17
 
18
18
  const style = `
19
- inline-block
20
- text-base
21
- cursor-pointer
22
- py-2
23
- mr-4
24
-
25
- `
19
+ inline-block
20
+ text-base
21
+ cursor-pointer
22
+ py-2
23
+ mr-4
24
+ `
25
+
26
26
  const styleInput = `
27
- peer
28
- hidden
29
- `
27
+ peer
28
+ sr-only
29
+ `
30
30
 
31
31
  const styleRadio = `
32
- bg-clip-content
33
- w-6 h-6
34
- ml-1
35
- mr-2
36
- p-1
37
- rounded-full
38
- border
39
- border-solid
40
- border-sumi-900
41
- peer-checked:bg-sea-600
42
- peer-checked:border-sea-600
43
- peer-disabled:border-sumi-500
44
- `
32
+ bg-clip-content
33
+ w-6 h-6
34
+ ml-1
35
+ mr-2
36
+ p-1
37
+ rounded-full
38
+ border
39
+ border-solid
40
+ border-sumi-900
41
+ peer-checked:bg-sea-600
42
+ peer-checked:border-sea-600
43
+ peer-disabled:border-sumi-500
44
+ peer-focus-visible:ring-2
45
+ peer-focus-visible:ring-offset-2
46
+ peer-focus-visible:ring-wood-500
47
+ `
48
+
45
49
  return (
46
50
  <label htmlFor={newProps.id} className={cx(style, className)}>
47
51
  <span className="flex items-center">
@@ -25,6 +25,7 @@ export const Select = React.forwardRef<HTMLSelectElement, SelectProps>(
25
25
  border-solid
26
26
  py-4 px-4 pr-8
27
27
  rounded-[8px]
28
+ outline-offset-2
28
29
  focus:outline
29
30
  focus:outline-2
30
31
  focus:outline-wood-500
@@ -31,6 +31,7 @@ export const Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(
31
31
  rounded-lg
32
32
  border
33
33
  border-solid
34
+ outline-offset-2
34
35
  focus:outline
35
36
  focus:outline-2
36
37
  focus:outline-wood-500
@@ -1,7 +1,8 @@
1
- export { Checkbox } from './Checkbox'
2
- export { Radio } from './Radio'
3
- export { Select } from './Select'
4
- export { Input } from './Input'
5
- export { Textarea } from './Textarea'
6
- export { LabelControl } from './LabelControl'
7
- export { FieldsetControl } from './FieldsetControl'
1
+ export { Checkbox, type CheckboxProps } from './Checkbox'
2
+ export { Radio, type RadioProps } from './Radio'
3
+ export { Select, type SelectProps } from './Select'
4
+ export { FileInput, type FileInputProps } from './FileInput'
5
+ export { Input, type InputProps } from './Input'
6
+ export { Textarea, type TextareaProps } from './Textarea'
7
+ export { LabelControl, type LabelControlProps } from './LabelControl'
8
+ export { FieldsetControl, type FieldsetControlProps } from './FieldsetControl'
@@ -2,12 +2,24 @@ export {
2
2
  Checkbox,
3
3
  Radio,
4
4
  Select,
5
+ FileInput,
5
6
  Input,
6
7
  Textarea,
7
8
  LabelControl,
8
9
  FieldsetControl
9
10
  } from './components'
10
11
 
12
+ export type {
13
+ CheckboxProps,
14
+ RadioProps,
15
+ SelectProps,
16
+ FileInputProps,
17
+ InputProps,
18
+ TextareaProps,
19
+ LabelControlProps,
20
+ FieldsetControlProps
21
+ } from './components'
22
+
11
23
  export {
12
24
  CheckboxGroup,
13
25
  RadioGroup,