@charcoal-ui/react 4.0.0-beta.0 → 4.0.0-beta.11

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 (265) hide show
  1. package/README.md +1 -1
  2. package/dist/_lib/compat.d.ts +0 -12
  3. package/dist/_lib/compat.d.ts.map +1 -1
  4. package/dist/_lib/createDivComponent.d.ts +4 -0
  5. package/dist/_lib/createDivComponent.d.ts.map +1 -0
  6. package/dist/_lib/useClassNames.d.ts +2 -2
  7. package/dist/_lib/useClassNames.d.ts.map +1 -1
  8. package/dist/components/Button/index.d.ts +5 -1
  9. package/dist/components/Button/index.d.ts.map +1 -1
  10. package/dist/components/Checkbox/CheckboxInput/index.d.ts +11 -0
  11. package/dist/components/Checkbox/CheckboxInput/index.d.ts.map +1 -0
  12. package/dist/components/Checkbox/CheckboxWithLabel.d.ts +9 -0
  13. package/dist/components/Checkbox/CheckboxWithLabel.d.ts.map +1 -0
  14. package/dist/components/Checkbox/index.d.ts +12 -21
  15. package/dist/components/Checkbox/index.d.ts.map +1 -1
  16. package/dist/components/Clickable/index.d.ts +9 -15
  17. package/dist/components/Clickable/index.d.ts.map +1 -1
  18. package/dist/components/DropdownSelector/Divider/index.d.ts +3 -0
  19. package/dist/components/DropdownSelector/Divider/index.d.ts.map +1 -0
  20. package/dist/components/DropdownSelector/DropdownMenuItem/index.d.ts +8 -0
  21. package/dist/components/DropdownSelector/DropdownMenuItem/index.d.ts.map +1 -0
  22. package/dist/components/DropdownSelector/DropdownPopover.d.ts.map +1 -1
  23. package/dist/components/DropdownSelector/ListItem/index.d.ts +5 -13
  24. package/dist/components/DropdownSelector/ListItem/index.d.ts.map +1 -1
  25. package/dist/components/DropdownSelector/MenuItem/index.d.ts +10 -3
  26. package/dist/components/DropdownSelector/MenuItem/index.d.ts.map +1 -1
  27. package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.d.ts +1 -1
  28. package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.d.ts.map +1 -1
  29. package/dist/components/DropdownSelector/MenuItemGroup/index.d.ts +1 -3
  30. package/dist/components/DropdownSelector/MenuItemGroup/index.d.ts.map +1 -1
  31. package/dist/components/DropdownSelector/MenuList/index.d.ts +1 -4
  32. package/dist/components/DropdownSelector/MenuList/index.d.ts.map +1 -1
  33. package/dist/components/DropdownSelector/Popover/index.d.ts +2 -2
  34. package/dist/components/DropdownSelector/Popover/index.d.ts.map +1 -1
  35. package/dist/components/DropdownSelector/index.d.ts +3 -1
  36. package/dist/components/DropdownSelector/index.d.ts.map +1 -1
  37. package/dist/components/FieldLabel/index.d.ts +1 -0
  38. package/dist/components/FieldLabel/index.d.ts.map +1 -1
  39. package/dist/components/IconButton/index.d.ts +7 -5
  40. package/dist/components/IconButton/index.d.ts.map +1 -1
  41. package/dist/components/LoadingSpinner/index.d.ts +1 -0
  42. package/dist/components/LoadingSpinner/index.d.ts.map +1 -1
  43. package/dist/components/Modal/Dialog/index.d.ts +6 -24
  44. package/dist/components/Modal/Dialog/index.d.ts.map +1 -1
  45. package/dist/components/Modal/ModalPlumbing.d.ts +10 -3
  46. package/dist/components/Modal/ModalPlumbing.d.ts.map +1 -1
  47. package/dist/components/Modal/index.d.ts +6 -2
  48. package/dist/components/Modal/index.d.ts.map +1 -1
  49. package/dist/components/Modal/useCustomModalOverlay.d.ts +1 -0
  50. package/dist/components/Modal/useCustomModalOverlay.d.ts.map +1 -1
  51. package/dist/components/Radio/RadioGroup/index.d.ts +20 -0
  52. package/dist/components/Radio/RadioGroup/index.d.ts.map +1 -0
  53. package/dist/components/Radio/RadioGroupContext.d.ts +11 -0
  54. package/dist/components/Radio/RadioGroupContext.d.ts.map +1 -0
  55. package/dist/components/Radio/RadioInput/index.d.ts +10 -0
  56. package/dist/components/Radio/RadioInput/index.d.ts.map +1 -0
  57. package/dist/components/Radio/index.d.ts +1 -14
  58. package/dist/components/Radio/index.d.ts.map +1 -1
  59. package/dist/components/SegmentedControl/index.d.ts +1 -0
  60. package/dist/components/SegmentedControl/index.d.ts.map +1 -1
  61. package/dist/components/Switch/SwitchInput/index.d.ts +9 -0
  62. package/dist/components/Switch/SwitchInput/index.d.ts.map +1 -0
  63. package/dist/components/Switch/SwitchWithLabel.d.ts +9 -0
  64. package/dist/components/Switch/SwitchWithLabel.d.ts.map +1 -0
  65. package/dist/components/Switch/index.d.ts +4 -15
  66. package/dist/components/Switch/index.d.ts.map +1 -1
  67. package/dist/components/TagItem/index.d.ts +10 -15
  68. package/dist/components/TagItem/index.d.ts.map +1 -1
  69. package/dist/components/TextArea/index.d.ts +29 -18
  70. package/dist/components/TextArea/index.d.ts.map +1 -1
  71. package/dist/components/TextField/AssistiveText/index.d.ts +5 -0
  72. package/dist/components/TextField/AssistiveText/index.d.ts.map +1 -0
  73. package/dist/components/TextField/index.d.ts +33 -22
  74. package/dist/components/TextField/index.d.ts.map +1 -1
  75. package/dist/core/CharcoalProvider.d.ts +4 -11
  76. package/dist/core/CharcoalProvider.d.ts.map +1 -1
  77. package/dist/core/SSRProvider.d.ts +3 -1
  78. package/dist/core/SSRProvider.d.ts.map +1 -1
  79. package/dist/index.cjs.js +576 -1255
  80. package/dist/index.cjs.js.map +1 -1
  81. package/dist/index.css +1097 -3
  82. package/dist/index.css.map +1 -1
  83. package/dist/index.d.ts +4 -5
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.esm.js +555 -1231
  86. package/dist/index.esm.js.map +1 -1
  87. package/package.json +25 -23
  88. package/src/README.mdx +68 -0
  89. package/src/SSR.mdx +67 -0
  90. package/src/_lib/compat.ts +0 -11
  91. package/src/_lib/createDivComponent.tsx +11 -0
  92. package/src/_lib/useClassNames.ts +3 -9
  93. package/src/components/Button/__snapshots__/index.story.storyshot +18 -56
  94. package/src/components/Button/index.css +2 -3
  95. package/src/components/Button/index.story.tsx +14 -67
  96. package/src/components/Button/index.tsx +7 -3
  97. package/src/components/Checkbox/CheckboxInput/__snapshots__/index.story.storyshot +77 -0
  98. package/src/components/Checkbox/CheckboxInput/index.css +110 -0
  99. package/src/components/Checkbox/CheckboxInput/index.story.tsx +51 -0
  100. package/src/components/Checkbox/CheckboxInput/index.tsx +47 -0
  101. package/src/components/Checkbox/CheckboxWithLabel.tsx +24 -0
  102. package/src/components/Checkbox/__snapshots__/index.story.storyshot +103 -538
  103. package/src/components/Checkbox/index.css +21 -0
  104. package/src/components/Checkbox/index.story.tsx +49 -79
  105. package/src/components/Checkbox/index.tsx +32 -162
  106. package/src/components/Clickable/__snapshots__/index.story.storyshot +4 -80
  107. package/src/components/Clickable/index.css +41 -0
  108. package/src/components/Clickable/index.story.tsx +2 -2
  109. package/src/components/Clickable/index.tsx +19 -84
  110. package/src/components/DropdownSelector/Divider/index.css +11 -0
  111. package/src/components/DropdownSelector/Divider/index.tsx +5 -0
  112. package/src/components/DropdownSelector/DropdownMenuItem/index.css +20 -0
  113. package/src/components/DropdownSelector/DropdownMenuItem/index.tsx +34 -0
  114. package/src/components/DropdownSelector/DropdownPopover.tsx +16 -9
  115. package/src/components/DropdownSelector/ListItem/__snapshots__/index.story.storyshot +41 -224
  116. package/src/components/DropdownSelector/ListItem/index.css +24 -0
  117. package/src/components/DropdownSelector/ListItem/index.story.tsx +12 -6
  118. package/src/components/DropdownSelector/ListItem/index.tsx +14 -53
  119. package/src/components/DropdownSelector/MenuItem/index.tsx +17 -12
  120. package/src/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.tsx +2 -2
  121. package/src/components/DropdownSelector/MenuItemGroup/index.css +19 -0
  122. package/src/components/DropdownSelector/MenuItemGroup/index.tsx +6 -28
  123. package/src/components/DropdownSelector/MenuList/__snapshots__/index.story.storyshot +162 -416
  124. package/src/components/DropdownSelector/MenuList/index.css +4 -0
  125. package/src/components/DropdownSelector/MenuList/index.story.tsx +1 -1
  126. package/src/components/DropdownSelector/MenuList/index.tsx +4 -12
  127. package/src/components/DropdownSelector/Popover/__snapshots__/index.story.storyshot +5 -5
  128. package/src/components/DropdownSelector/Popover/index.css +11 -0
  129. package/src/components/DropdownSelector/Popover/index.story.tsx +1 -1
  130. package/src/components/DropdownSelector/Popover/index.tsx +7 -17
  131. package/src/components/DropdownSelector/__snapshots__/index.story.storyshot +468 -2494
  132. package/src/components/DropdownSelector/index.css +84 -0
  133. package/src/components/DropdownSelector/index.story.tsx +2 -6
  134. package/src/components/DropdownSelector/index.tsx +61 -137
  135. package/src/components/FieldLabel/index.css +35 -0
  136. package/src/components/FieldLabel/index.tsx +15 -105
  137. package/src/components/Icon/__snapshots__/index.story.storyshot +1 -1
  138. package/src/components/Icon/index.story.tsx +1 -1
  139. package/src/components/IconButton/__snapshots__/index.story.storyshot +19 -297
  140. package/src/components/IconButton/index.css +118 -0
  141. package/src/components/IconButton/index.story.tsx +17 -40
  142. package/src/components/IconButton/index.tsx +41 -118
  143. package/src/components/LoadingSpinner/__snapshots__/LoadingSpinnerIcon.story.storyshot +2 -17
  144. package/src/components/LoadingSpinner/__snapshots__/index.story.storyshot +80 -30
  145. package/src/components/LoadingSpinner/index.css +42 -0
  146. package/src/components/LoadingSpinner/index.story.tsx +19 -8
  147. package/src/components/LoadingSpinner/index.tsx +26 -52
  148. package/src/components/Modal/Dialog/index.css +44 -0
  149. package/src/components/Modal/Dialog/index.tsx +14 -57
  150. package/src/components/Modal/ModalPlumbing.css +40 -0
  151. package/src/components/Modal/ModalPlumbing.tsx +13 -61
  152. package/src/components/Modal/__snapshots__/index.story.storyshot +281 -2221
  153. package/src/components/Modal/index.css +36 -0
  154. package/src/components/Modal/index.story.tsx +26 -13
  155. package/src/components/Modal/index.tsx +42 -78
  156. package/src/components/Modal/useCustomModalOverlay.tsx +19 -4
  157. package/src/components/Radio/RadioGroup/index.css +5 -0
  158. package/src/components/Radio/RadioGroup/index.tsx +80 -0
  159. package/src/components/Radio/RadioGroupContext.ts +23 -0
  160. package/src/components/Radio/RadioInput/index.css +82 -0
  161. package/src/components/Radio/RadioInput/index.tsx +41 -0
  162. package/src/components/Radio/__snapshots__/index.story.storyshot +111 -855
  163. package/src/components/Radio/index.css +18 -0
  164. package/src/components/Radio/index.story.tsx +47 -40
  165. package/src/components/Radio/index.test.tsx +18 -26
  166. package/src/components/Radio/index.tsx +16 -208
  167. package/src/components/SegmentedControl/__snapshots__/index.story.storyshot +32 -262
  168. package/src/components/SegmentedControl/index.css +50 -0
  169. package/src/components/SegmentedControl/index.story.tsx +1 -1
  170. package/src/components/SegmentedControl/index.tsx +20 -89
  171. package/src/components/Switch/SwitchInput/index.css +82 -0
  172. package/src/components/Switch/SwitchInput/index.tsx +40 -0
  173. package/src/components/Switch/SwitchWithLabel.tsx +24 -0
  174. package/src/components/Switch/__snapshots__/index.story.storyshot +35 -539
  175. package/src/components/Switch/index.css +23 -0
  176. package/src/components/Switch/index.story.tsx +16 -19
  177. package/src/components/Switch/index.tsx +43 -140
  178. package/src/components/TagItem/__snapshots__/index.story.storyshot +212 -1063
  179. package/src/components/TagItem/index.css +140 -0
  180. package/src/components/TagItem/index.story.tsx +45 -162
  181. package/src/components/TagItem/index.tsx +72 -220
  182. package/src/components/TextArea/TextArea.story.tsx +63 -25
  183. package/src/components/TextArea/__snapshots__/TextArea.story.storyshot +615 -1055
  184. package/src/components/TextArea/index.css +78 -0
  185. package/src/components/TextArea/index.tsx +83 -174
  186. package/src/components/TextField/AssistiveText/index.css +10 -0
  187. package/src/components/TextField/AssistiveText/index.tsx +6 -0
  188. package/src/components/TextField/TextField.story.tsx +85 -76
  189. package/src/components/TextField/__snapshots__/TextField.story.storyshot +632 -1710
  190. package/src/components/TextField/index.css +87 -0
  191. package/src/components/TextField/index.tsx +92 -211
  192. package/src/core/CharcoalProvider.tsx +5 -29
  193. package/src/core/SSRProvider.tsx +12 -1
  194. package/src/index.ts +7 -19
  195. package/src/type.d.ts +3 -8
  196. package/dist/components/Button/index.story.d.ts +0 -24
  197. package/dist/components/Button/index.story.d.ts.map +0 -1
  198. package/dist/components/Checkbox/index.story.d.ts +0 -8
  199. package/dist/components/Checkbox/index.story.d.ts.map +0 -1
  200. package/dist/components/Clickable/index.story.d.ts +0 -6
  201. package/dist/components/Clickable/index.story.d.ts.map +0 -1
  202. package/dist/components/DropdownSelector/Divider.d.ts +0 -7
  203. package/dist/components/DropdownSelector/Divider.d.ts.map +0 -1
  204. package/dist/components/DropdownSelector/DropdownMenuItem.d.ts +0 -7
  205. package/dist/components/DropdownSelector/DropdownMenuItem.d.ts.map +0 -1
  206. package/dist/components/DropdownSelector/ListItem/index.story.d.ts +0 -9
  207. package/dist/components/DropdownSelector/ListItem/index.story.d.ts.map +0 -1
  208. package/dist/components/DropdownSelector/MenuList/index.story.d.ts +0 -8
  209. package/dist/components/DropdownSelector/MenuList/index.story.d.ts.map +0 -1
  210. package/dist/components/DropdownSelector/Popover/index.story.d.ts +0 -5
  211. package/dist/components/DropdownSelector/Popover/index.story.d.ts.map +0 -1
  212. package/dist/components/DropdownSelector/index.story.d.ts +0 -19
  213. package/dist/components/DropdownSelector/index.story.d.ts.map +0 -1
  214. package/dist/components/Icon/index.story.d.ts +0 -6
  215. package/dist/components/Icon/index.story.d.ts.map +0 -1
  216. package/dist/components/IconButton/index.story.d.ts +0 -9
  217. package/dist/components/IconButton/index.story.d.ts.map +0 -1
  218. package/dist/components/LoadingSpinner/LoadingSpinnerIcon.story.d.ts +0 -8
  219. package/dist/components/LoadingSpinner/LoadingSpinnerIcon.story.d.ts.map +0 -1
  220. package/dist/components/LoadingSpinner/index.story.d.ts +0 -6
  221. package/dist/components/LoadingSpinner/index.story.d.ts.map +0 -1
  222. package/dist/components/Modal/__stories__/InternalScrollStory.d.ts +0 -4
  223. package/dist/components/Modal/__stories__/InternalScrollStory.d.ts.map +0 -1
  224. package/dist/components/Modal/index.story.d.ts +0 -21
  225. package/dist/components/Modal/index.story.d.ts.map +0 -1
  226. package/dist/components/MultiSelect/context.d.ts +0 -14
  227. package/dist/components/MultiSelect/context.d.ts.map +0 -1
  228. package/dist/components/MultiSelect/index.d.ts +0 -36
  229. package/dist/components/MultiSelect/index.d.ts.map +0 -1
  230. package/dist/components/MultiSelect/index.story.d.ts +0 -82
  231. package/dist/components/MultiSelect/index.story.d.ts.map +0 -1
  232. package/dist/components/MultiSelect/index.test.d.ts +0 -2
  233. package/dist/components/MultiSelect/index.test.d.ts.map +0 -1
  234. package/dist/components/Radio/index.story.d.ts +0 -26
  235. package/dist/components/Radio/index.story.d.ts.map +0 -1
  236. package/dist/components/Radio/index.test.d.ts +0 -2
  237. package/dist/components/Radio/index.test.d.ts.map +0 -1
  238. package/dist/components/SegmentedControl/index.story.d.ts +0 -7
  239. package/dist/components/SegmentedControl/index.story.d.ts.map +0 -1
  240. package/dist/components/Switch/index.story.d.ts +0 -9
  241. package/dist/components/Switch/index.story.d.ts.map +0 -1
  242. package/dist/components/TagItem/index.story.d.ts +0 -16
  243. package/dist/components/TagItem/index.story.d.ts.map +0 -1
  244. package/dist/components/TextArea/TextArea.story.d.ts +0 -9
  245. package/dist/components/TextArea/TextArea.story.d.ts.map +0 -1
  246. package/dist/components/TextField/TextField.story.d.ts +0 -22
  247. package/dist/components/TextField/TextField.story.d.ts.map +0 -1
  248. package/dist/components/a11y.test.d.ts +0 -2
  249. package/dist/components/a11y.test.d.ts.map +0 -1
  250. package/dist/core/ComponentAbstraction.d.ts +0 -24
  251. package/dist/core/ComponentAbstraction.d.ts.map +0 -1
  252. package/dist/styled.d.ts +0 -95
  253. package/dist/styled.d.ts.map +0 -1
  254. package/src/components/DropdownSelector/Divider.tsx +0 -16
  255. package/src/components/DropdownSelector/DropdownMenuItem.tsx +0 -43
  256. package/src/components/LoadingSpinner/LoadingSpinnerIcon.story.tsx +0 -13
  257. package/src/components/Modal/__stories__/InternalScrollStory.tsx +0 -75
  258. package/src/components/MultiSelect/__snapshots__/index.story.storyshot +0 -1066
  259. package/src/components/MultiSelect/context.ts +0 -23
  260. package/src/components/MultiSelect/index.story.tsx +0 -216
  261. package/src/components/MultiSelect/index.test.tsx +0 -263
  262. package/src/components/MultiSelect/index.tsx +0 -281
  263. package/src/components/a11y.test.tsx +0 -99
  264. package/src/core/ComponentAbstraction.tsx +0 -48
  265. package/src/styled.ts +0 -3
@@ -3,18 +3,19 @@ import Switch from '.'
3
3
  import { Meta, StoryObj } from '@storybook/react'
4
4
 
5
5
  export default {
6
- title: 'Switch',
6
+ title: 'react/Switch',
7
7
  component: Switch,
8
- args: {
9
- name: 'name',
10
- label: 'label',
11
- },
12
8
  parameters: {
13
9
  layout: 'centered',
14
10
  },
15
11
  } as Meta<typeof Switch>
16
12
 
17
- export const Basic: StoryObj<typeof Switch> = {
13
+ export const Default: StoryObj<typeof Switch> = {
14
+ argTypes: {
15
+ checked: { type: 'boolean' },
16
+ children: { type: 'string' },
17
+ disabled: { type: 'boolean' },
18
+ },
18
19
  render: function Render(args) {
19
20
  const [checked, setChecked] = useState(false)
20
21
  return (
@@ -33,33 +34,29 @@ export const Basic: StoryObj<typeof Switch> = {
33
34
  }
34
35
 
35
36
  export const Checked: StoryObj<typeof Switch> = {
36
- render: function Render(args) {
37
+ render: function Render() {
37
38
  const [checked, setChecked] = useState(true)
38
39
  return (
39
40
  <div>
40
41
  <Switch
41
- {...args}
42
42
  name="name"
43
+ label="checked"
43
44
  onChange={(v) => {
44
45
  setChecked(v)
45
46
  }}
46
- checked={args.checked ?? checked}
47
+ checked={checked}
47
48
  />
48
49
  </div>
49
50
  )
50
51
  },
51
52
  }
52
53
 
53
- export const Labelled: StoryObj<typeof Switch> = {
54
- render: function Render(args) {
54
+ export const Label: StoryObj<typeof Switch> = {
55
+ render: function Render() {
55
56
  const [checked, setChecked] = useState(false)
56
57
  return (
57
58
  <div>
58
- <Switch
59
- {...args}
60
- checked={args.checked ?? checked}
61
- onChange={setChecked}
62
- >
59
+ <Switch name="label" checked={checked} onChange={setChecked}>
63
60
  Label
64
61
  </Switch>
65
62
  </div>
@@ -68,13 +65,13 @@ export const Labelled: StoryObj<typeof Switch> = {
68
65
  }
69
66
 
70
67
  export const Disabled: StoryObj<typeof Switch> = {
71
- render: function Render(args) {
68
+ render: function Render() {
72
69
  const [checked, setChecked] = useState(false)
73
70
  return (
74
71
  <div>
75
72
  <Switch
76
- {...args}
77
- checked={args.checked ?? checked}
73
+ name="disabled"
74
+ checked={checked}
78
75
  onChange={setChecked}
79
76
  disabled
80
77
  >
@@ -1,142 +1,45 @@
1
- import { useSwitch } from '@react-aria/switch'
2
- import type { AriaSwitchProps } from '@react-types/switch'
3
- import { useMemo, memo, forwardRef } from 'react'
4
- import * as React from 'react'
5
- import { useToggleState } from 'react-stately'
6
- import styled from 'styled-components'
7
- import { useObjectRef } from '@react-aria/utils'
8
- import { focusVisibleFocusRingCss } from '@charcoal-ui/styled'
9
-
10
- export type SwitchProps = {
11
- name: string
12
- className?: string
13
- value?: string
14
- checked?: boolean
15
- disabled?: boolean
16
- onChange(checked: boolean): void
17
- } & (
18
- | // children か label は片方が必須
19
- {
20
- children: React.ReactNode
21
- }
22
- | {
23
- label: string
24
- }
25
- )
26
-
27
- const SwitchCheckbox = forwardRef<HTMLInputElement, SwitchProps>(
28
- function SwitchCheckboxInner(props, external) {
29
- const { disabled, className } = props
30
-
31
- const ariaSwitchProps: AriaSwitchProps = useMemo(
32
- () => ({
33
- ...props,
34
-
35
- // children がいない場合は aria-label をつけないといけない
36
- 'aria-label': 'children' in props ? undefined : props.label,
37
- isDisabled: props.disabled,
38
- isSelected: props.checked,
39
- }),
40
- [props]
41
- )
42
-
43
- const state = useToggleState(ariaSwitchProps)
44
- const ref = useObjectRef<HTMLInputElement>(external)
45
- const {
46
- inputProps: { className: _className, type: _type, ...rest },
47
- } = useSwitch(ariaSwitchProps, state, ref)
48
-
49
- return (
50
- <Label className={className} aria-disabled={disabled}>
51
- <SwitchInput {...rest} ref={ref} />
52
- {'children' in props ? (
53
- // eslint-disable-next-line react/destructuring-assignment
54
- <LabelInner>{props.children}</LabelInner>
55
- ) : undefined}
56
- </Label>
57
- )
58
- }
59
- )
60
-
61
- export default memo(SwitchCheckbox)
62
-
63
- const Label = styled.label`
64
- display: inline-grid;
65
- grid-template-columns: auto 1fr;
66
- align-items: center;
67
- cursor: pointer;
68
- outline: 0;
69
-
70
- &:disabled,
71
- &[aria-disabled]:not([aria-disabled='false']) {
72
- opacity: 0.32;
73
- cursor: default;
1
+ import './index.css'
2
+
3
+ import { memo, forwardRef } from 'react'
4
+ import { useId } from '@react-aria/utils'
5
+ import SwitchInput, { type SwitchInputProps } from './SwitchInput'
6
+ import { SwitchWithLabel } from './SwitchWithLabel'
7
+
8
+ export type SwitchProps = SwitchInputProps
9
+
10
+ const Switch = forwardRef<HTMLInputElement, SwitchProps>(function Switch(
11
+ { children, onChange, disabled, className, id, ...props },
12
+ ref
13
+ ) {
14
+ const htmlId = useId(id)
15
+ const noChildren = children === undefined
16
+ const input = (
17
+ <SwitchInput
18
+ {...props}
19
+ disabled={disabled}
20
+ className={noChildren ? className : undefined}
21
+ id={htmlId}
22
+ onChange={onChange}
23
+ ref={ref}
24
+ role="switch"
25
+ type="checkbox"
26
+ />
27
+ )
28
+
29
+ if (noChildren) {
30
+ return input
74
31
  }
75
- `
76
32
 
77
- const LabelInner = styled.div`
78
- font-size: 14px;
79
- line-height: 22px;
80
- color: var(--charcoal-text2);
81
- margin-left: 4px;
82
- `
83
-
84
- const SwitchInput = styled.input.attrs({ type: 'checkbox' })`
85
- appearance: none;
86
- display: inline-flex;
87
- position: relative;
88
- box-sizing: border-box;
89
- width: 28px;
90
- border: 2px solid transparent;
91
-
92
- transition-property: background-color, box-shadow;
93
- transition-duration: 0.2s;
94
- cursor: inherit;
95
-
96
- outline: none;
97
- border-radius: 16px;
98
- height: 16px;
99
- margin: 0;
100
- background-color: var(--charcoal-text4);
101
- :hover {
102
- background-color: var(--charcoal-text4-hover);
103
- }
104
- :active {
105
- background-color: var(--charcoal-text4-press);
106
- }
107
- ${focusVisibleFocusRingCss}
108
-
109
- &::after {
110
- content: '';
111
- position: absolute;
112
- display: block;
113
- top: 0;
114
- left: 0;
115
- width: 12px;
116
- height: 12px;
117
- transform: translateX(0);
118
- transition: transform 0.2s;
119
- border-radius: 1024px;
120
- background-color: var(--charcoal-text5);
121
- :hover {
122
- background-color: var(--charcoal-text5-hover);
123
- }
124
- :active {
125
- background-color: var(--charcoal-text5-press);
126
- }
127
- }
128
-
129
- &:checked {
130
- background-color: var(--charcoal-brand);
131
- :hover {
132
- background-color: var(--charcoal-brand-hover);
133
- }
134
- :active {
135
- background-color: var(--charcoal-brand-press);
136
- }
137
- &::after {
138
- transform: translateX(12px);
139
- transition: transform 0.2s;
140
- }
141
- }
142
- `
33
+ return (
34
+ <SwitchWithLabel
35
+ className={className}
36
+ disabled={disabled}
37
+ id={htmlId}
38
+ input={input}
39
+ >
40
+ {children}
41
+ </SwitchWithLabel>
42
+ )
43
+ })
44
+
45
+ export default memo(Switch)