@pushwoosh/dumb-components 1.1.147 → 1.1.149

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 (325) hide show
  1. package/AccessForbidden/AccessForbidden.d.ts +3 -0
  2. package/AccessForbidden/AccessForbidden.js +3 -0
  3. package/Alert/Alert.d.ts +7 -0
  4. package/Alert/Alert.js +7 -0
  5. package/Alert/types.d.ts +6 -0
  6. package/ApplicationPreloader/ApplicationPreloader.d.ts +8 -0
  7. package/ApplicationPreloader/ApplicationPreloader.js +6 -0
  8. package/Badge/Badge.d.ts +6 -0
  9. package/Badge/Badge.js +6 -0
  10. package/Badge/types.d.ts +6 -0
  11. package/Banner/Banner.d.ts +7 -0
  12. package/Banner/Banner.js +7 -0
  13. package/Banner/types.d.ts +16 -0
  14. package/Button/Button.d.ts +19 -0
  15. package/Button/GhostButton.d.ts +1 -0
  16. package/Button/GhostButton.js +1 -0
  17. package/Button/RemoveButton.d.ts +6 -0
  18. package/Button/RemoveButton.js +6 -0
  19. package/Button/types.d.ts +21 -0
  20. package/Calendar/CalendarDropdown/CalendarDropdown.d.ts +12 -0
  21. package/Calendar/CalendarDropdown/CalendarDropdown.js +12 -0
  22. package/Calendar/CalendarDropdown/helpers.d.ts +4 -0
  23. package/Calendar/CalendarDropdown/helpers.js +4 -0
  24. package/Calendar/CalendarDropdown/types.d.ts +33 -0
  25. package/Calendar/CalendarSuperForm/CalendarSuperForm.d.ts +7 -0
  26. package/Calendar/CalendarSuperForm/CalendarSuperForm.js +10 -1
  27. package/Calendar/CalendarSuperForm/components/CalendarRangePicker/CalendarRangePicker.d.ts +1 -0
  28. package/Calendar/CalendarSuperForm/components/CalendarRangePicker/CalendarRangePicker.js +3 -2
  29. package/Calendar/CalendarSuperForm/types.d.ts +37 -9
  30. package/Calendar/helpers.d.ts +10 -0
  31. package/Calendar/helpers.js +10 -0
  32. package/Calendar/types.d.ts +16 -1
  33. package/CardMetric/CardMetric.d.ts +7 -0
  34. package/CardMetric/CardMetric.js +7 -0
  35. package/CardMetric/types.d.ts +13 -0
  36. package/Checkbox/Checkbox.d.ts +6 -0
  37. package/Checkbox/Checkbox.js +6 -0
  38. package/Checkbox/types.d.ts +13 -0
  39. package/Chip/Chip.d.ts +7 -0
  40. package/Chip/Chip.js +7 -0
  41. package/Chip/Chip.types.d.ts +9 -0
  42. package/CodeEditor/CodeEditor.d.ts +7 -0
  43. package/CodeEditor/CodeEditor.js +7 -0
  44. package/CodeEditor/languages/html.d.ts +1 -0
  45. package/CodeEditor/languages/html.js +1 -0
  46. package/CodeEditor/languages/json.d.ts +1 -0
  47. package/CodeEditor/languages/json.js +1 -0
  48. package/CodeEditor/languages/liquid.d.ts +1 -0
  49. package/CodeEditor/languages/liquid.js +1 -0
  50. package/CodeEditor/types.d.ts +11 -0
  51. package/CrashScreen/CrashScreen.d.ts +4 -0
  52. package/CrashScreen/CrashScreen.js +4 -0
  53. package/DateTimePicker/components/DatePicker/DatePicker.d.ts +5 -0
  54. package/DateTimePicker/components/DatePicker/DatePicker.js +5 -0
  55. package/DateTimePicker/components/DatePicker/types.d.ts +9 -0
  56. package/DateTimePicker/components/DatePickerField/DatePickerField.d.ts +5 -0
  57. package/DateTimePicker/components/DatePickerField/DatePickerField.js +5 -0
  58. package/DateTimePicker/components/DatePickerField/types.d.ts +9 -0
  59. package/DateTimePicker/components/DateTimePicker/DateTimePicker.d.ts +5 -0
  60. package/DateTimePicker/components/DateTimePicker/DateTimePicker.js +5 -0
  61. package/DateTimePicker/components/DateTimePicker/types.d.ts +6 -0
  62. package/DateTimePicker/components/DateTimePickerField/DateTimePickerField.d.ts +5 -0
  63. package/DateTimePicker/components/DateTimePickerField/DateTimePickerField.js +5 -0
  64. package/DateTimePicker/components/DateTimePickerField/types.d.ts +9 -0
  65. package/DateTimePicker/types.d.ts +5 -0
  66. package/Drawer/components/Drawer/Drawer.d.ts +11 -0
  67. package/Drawer/components/Drawer/Drawer.js +11 -0
  68. package/Drawer/components/Drawer/types.d.ts +9 -0
  69. package/Drawer/components/DrawerContent/styles.d.ts +3 -0
  70. package/Drawer/components/DrawerContent/styles.js +3 -0
  71. package/Drawer/components/DrawerDocs/DrawerDocs.d.ts +7 -0
  72. package/Drawer/components/DrawerDocs/DrawerDocs.js +7 -0
  73. package/Drawer/components/DrawerDocs/hooks.d.ts +4 -0
  74. package/Drawer/components/DrawerDocs/hooks.js +4 -0
  75. package/Drawer/components/DrawerDocs/types.d.ts +4 -0
  76. package/DropdownMenu/components/DropdownMenu/DropdownMenu.d.ts +12 -0
  77. package/DropdownMenu/components/DropdownMenu/DropdownMenu.js +12 -0
  78. package/DropdownMenu/components/DropdownMenu/types.d.ts +15 -0
  79. package/DropdownMenu/components/DropdownMenuButton/DropdownMenuButton.d.ts +8 -0
  80. package/DropdownMenu/components/DropdownMenuButton/DropdownMenuButton.js +8 -0
  81. package/DropdownMenu/components/DropdownMenuButton/types.d.ts +16 -0
  82. package/DropdownMenu/components/DropdownMenuItem/DropdownMenuItem.d.ts +7 -0
  83. package/DropdownMenu/components/DropdownMenuItem/DropdownMenuItem.js +7 -0
  84. package/DropdownMenu/components/DropdownMenuItem/types.d.ts +6 -0
  85. package/DropdownMenu/components/DropdownMenuSection/DropdownMenuSection.d.ts +8 -0
  86. package/DropdownMenu/components/DropdownMenuSection/DropdownMenuSection.js +8 -0
  87. package/DropdownMenu/components/DropdownMenuSection/types.d.ts +3 -0
  88. package/DropdownMenu/components/DropdownMenuSubmenu/DropdownMenuSubmenu.d.ts +9 -0
  89. package/DropdownMenu/components/DropdownMenuSubmenu/DropdownMenuSubmenu.js +9 -0
  90. package/DropdownMenu/components/DropdownMenuSubmenu/types.d.ts +5 -0
  91. package/EditableField/EditableField.d.ts +9 -0
  92. package/EditableField/EditableField.js +9 -0
  93. package/EditableField/types.d.ts +12 -0
  94. package/EmailTemplatePreview/EmailTemplatePreview.d.ts +7 -0
  95. package/EmailTemplatePreview/EmailTemplatePreview.js +7 -0
  96. package/EmailTemplatePreview/components/NoEmailTemplatePreview/NoEmailTemplatePreview.d.ts +4 -0
  97. package/EmailTemplatePreview/components/NoEmailTemplatePreview/NoEmailTemplatePreview.js +4 -0
  98. package/EmailTemplatePreview/helpers.d.ts +8 -0
  99. package/EmailTemplatePreview/helpers.js +8 -0
  100. package/EmailTemplatePreview/types.d.ts +7 -0
  101. package/EnhancedInput/EnhancedInput.d.ts +7 -0
  102. package/EnhancedInput/EnhancedInput.js +7 -0
  103. package/EnhancedInput/SearchInput.d.ts +6 -0
  104. package/EnhancedInput/SearchInput.js +6 -0
  105. package/EnhancedInput/types.d.ts +5 -0
  106. package/ExportResult/ExportResult.d.ts +7 -0
  107. package/ExportResult/ExportResult.js +7 -0
  108. package/ExportResult/types.d.ts +7 -0
  109. package/ExternalImagePreview/ExternalImagePreview.d.ts +7 -0
  110. package/ExternalImagePreview/ExternalImagePreview.js +7 -0
  111. package/ExternalImagePreview/types.d.ts +7 -0
  112. package/FieldBox/FieldBox.d.ts +9 -0
  113. package/FieldBox/FieldBox.js +9 -0
  114. package/FieldBox/types.d.ts +10 -0
  115. package/FrequencyCapping/FrequencyCappingEdit.d.ts +7 -0
  116. package/FrequencyCapping/FrequencyCappingEdit.js +7 -0
  117. package/FrequencyCapping/FrequencyCappingInApps.d.ts +7 -0
  118. package/FrequencyCapping/FrequencyCappingInApps.js +7 -0
  119. package/FrequencyCapping/FrequencyCappingReadonly.d.ts +3 -0
  120. package/FrequencyCapping/FrequencyCappingReadonly.js +3 -0
  121. package/FrequencyCapping/types.d.ts +37 -0
  122. package/FrequencyCapping/types.js +1 -0
  123. package/GetStartedPage/GetStartedPage.d.ts +7 -0
  124. package/GetStartedPage/GetStartedPage.js +7 -0
  125. package/GetStartedPage/types.d.ts +7 -0
  126. package/InputFile/InputFile.d.ts +7 -0
  127. package/InputFile/InputFile.js +7 -0
  128. package/InputFile/types.d.ts +18 -0
  129. package/Link/Link.d.ts +18 -0
  130. package/Link/types.d.ts +17 -0
  131. package/Modal/components/Modal/Modal.d.ts +11 -0
  132. package/Modal/components/Modal/Modal.js +11 -0
  133. package/Modal/components/Modal/types.d.ts +6 -0
  134. package/Modal/components/ModalConfirm/ModalConfirm.d.ts +8 -0
  135. package/Modal/components/ModalConfirm/ModalConfirm.js +8 -0
  136. package/Modal/components/ModalConfirm/ModalConfirmProvider.d.ts +7 -0
  137. package/Modal/components/ModalConfirm/ModalConfirmProvider.js +7 -0
  138. package/Modal/components/ModalConfirm/hooks.d.ts +8 -0
  139. package/Modal/components/ModalConfirm/hooks.js +8 -0
  140. package/Modal/components/ModalConfirm/types.d.ts +16 -0
  141. package/Modal/components/ModalContent/styles.d.ts +5 -0
  142. package/Modal/components/ModalContent/styles.js +5 -0
  143. package/Modal/components/ModalTitle/ModalTitle.d.ts +6 -0
  144. package/Modal/components/ModalTitle/ModalTitle.js +6 -0
  145. package/Modal/components/ModalTitle/types.d.ts +3 -0
  146. package/NotificationInbox/NotificationBar.d.ts +7 -0
  147. package/NotificationInbox/NotificationBar.js +7 -0
  148. package/NotificationInbox/NotificationBell.d.ts +7 -0
  149. package/NotificationInbox/NotificationBell.js +7 -0
  150. package/NotificationInbox/NotificationInbox.d.ts +7 -0
  151. package/NotificationInbox/NotificationInbox.js +7 -0
  152. package/NotificationInbox/types.d.ts +31 -0
  153. package/NumberPicker/NumberPicker.d.ts +7 -0
  154. package/NumberPicker/NumberPicker.js +7 -0
  155. package/NumberPicker/types.d.ts +12 -0
  156. package/PageHeader/components/AutosizeInput/AutosizeInput.d.ts +7 -0
  157. package/PageHeader/components/AutosizeInput/AutosizeInput.js +7 -0
  158. package/PageHeader/components/AutosizeInput/types.d.ts +7 -0
  159. package/PageHeader/components/PageHeader/PageHeader.d.ts +7 -0
  160. package/PageHeader/components/PageHeader/PageHeader.js +7 -0
  161. package/PageHeader/components/PageHeader/types.d.ts +13 -0
  162. package/PageHeader/components/PageHeaderEditable/PageHeaderEditable.d.ts +7 -0
  163. package/PageHeader/components/PageHeaderEditable/PageHeaderEditable.js +7 -0
  164. package/PageHeader/components/PageHeaderEditable/types.d.ts +19 -0
  165. package/Pagination/Pagination.d.ts +7 -0
  166. package/Pagination/Pagination.js +7 -0
  167. package/Pagination/types.d.ts +7 -0
  168. package/Popover/Popover.d.ts +10 -0
  169. package/Popover/Popover.js +10 -0
  170. package/Popover/styles.d.ts +1 -0
  171. package/Popover/styles.js +1 -0
  172. package/Popover/types.d.ts +9 -0
  173. package/ProgressBar/ProgressBar.d.ts +6 -0
  174. package/ProgressBar/ProgressBar.js +6 -0
  175. package/ProgressBar/types.d.ts +7 -0
  176. package/PushPreview/PushPreview.d.ts +7 -0
  177. package/PushPreview/PushPreview.js +7 -0
  178. package/PushPreview/types.d.ts +17 -0
  179. package/Radio/Radio.d.ts +7 -0
  180. package/Radio/Radio.js +7 -0
  181. package/Radio/types.d.ts +14 -0
  182. package/RadioCard/RadioCard.d.ts +7 -0
  183. package/RadioCard/RadioCard.js +7 -0
  184. package/RadioCard/types.d.ts +7 -0
  185. package/ReCaptcha/ReCaptcha.d.ts +8 -0
  186. package/ReCaptcha/ReCaptcha.js +8 -0
  187. package/ReCaptcha/helpers.d.ts +4 -0
  188. package/ReCaptcha/helpers.js +4 -0
  189. package/ReCaptcha/hooks.d.ts +4 -0
  190. package/ReCaptcha/hooks.js +4 -0
  191. package/ReCaptcha/types.d.ts +5 -0
  192. package/RichMessageEditor/RichMessageEditor.d.ts +8 -0
  193. package/RichMessageEditor/RichMessageEditor.js +8 -0
  194. package/RichMessageEditor/RichMessageEditor.types.d.ts +10 -0
  195. package/RichMessageEditor/RichMessageViewer.d.ts +10 -0
  196. package/RichMessageEditor/RichMessageViewer.js +7 -0
  197. package/RichMessageEditor/slate/types.d.ts +5 -0
  198. package/RichMessageEditor/types.d.ts +1 -0
  199. package/RichmediaPreview/RichmediaPreview.d.ts +7 -0
  200. package/RichmediaPreview/RichmediaPreview.js +7 -0
  201. package/RichmediaPreview/hooks.d.ts +4 -0
  202. package/RichmediaPreview/hooks.js +4 -0
  203. package/RichmediaPreview/types.d.ts +13 -0
  204. package/Select/Select.d.ts +22 -0
  205. package/Select/Select.js +22 -0
  206. package/Select/constants.d.ts +1 -0
  207. package/Select/constants.js +1 -0
  208. package/Select/types.d.ts +19 -0
  209. package/SendRate/SendRateEdit.d.ts +7 -0
  210. package/SendRate/SendRateEdit.js +7 -0
  211. package/SendRate/SendRateReadonly.d.ts +3 -0
  212. package/SendRate/SendRateReadonly.js +3 -0
  213. package/SendRate/types.d.ts +20 -0
  214. package/Skeleton/TextSkeleton.d.ts +6 -0
  215. package/Skeleton/TextSkeleton.js +6 -0
  216. package/Skeleton/styles.d.ts +2 -0
  217. package/Skeleton/styles.js +2 -0
  218. package/Skeleton/types.d.ts +11 -0
  219. package/SortButton/SortButton.d.ts +6 -0
  220. package/SortButton/SortButton.js +6 -0
  221. package/SortButton/types.d.ts +11 -0
  222. package/Spinner/Spinner.d.ts +6 -0
  223. package/Spinner/Spinner.js +6 -0
  224. package/Spinner/types.d.ts +4 -0
  225. package/StatisticCard/StatisticCard.d.ts +7 -0
  226. package/StatisticCard/StatisticCard.js +7 -0
  227. package/StatisticCard/types.d.ts +21 -0
  228. package/Switch/Switch.d.ts +6 -0
  229. package/Switch/Switch.js +6 -0
  230. package/Switch/types.d.ts +8 -0
  231. package/Tabs/components/Tab/Tab.d.ts +4 -0
  232. package/Tabs/components/Tab/Tab.js +4 -0
  233. package/Tabs/components/Tab/types.d.ts +6 -0
  234. package/Tabs/components/TabBar/TabBar.d.ts +3 -0
  235. package/Tabs/components/TabBar/TabBar.js +3 -0
  236. package/Tabs/components/TabBar/types.d.ts +2 -0
  237. package/Tabs/components/TabPanel/TabPanel.d.ts +4 -0
  238. package/Tabs/components/TabPanel/TabPanel.js +4 -0
  239. package/Tabs/components/TabPanel/types.d.ts +3 -0
  240. package/Tabs/components/Tabs/Tabs.d.ts +11 -0
  241. package/Tabs/components/Tabs/Tabs.js +11 -0
  242. package/Tabs/components/Tabs/types.d.ts +4 -0
  243. package/Tabs/types.d.ts +4 -0
  244. package/Toast/Toast.d.ts +5 -0
  245. package/Toast/Toast.js +5 -0
  246. package/Toast/ToastProvider.d.ts +7 -0
  247. package/Toast/ToastProvider.js +7 -0
  248. package/Toast/hooks.d.ts +8 -0
  249. package/Toast/hooks.js +8 -0
  250. package/Toast/types.d.ts +24 -0
  251. package/Tooltip/Tooltip.d.ts +7 -0
  252. package/Tooltip/Tooltip.js +7 -0
  253. package/Tooltip/TooltipTrigger.d.ts +13 -0
  254. package/Tooltip/TooltipTrigger.js +7 -0
  255. package/Tooltip/types.d.ts +12 -0
  256. package/hooks/useElementWidth.d.ts +4 -3
  257. package/hooks/useElementWidth.js +4 -3
  258. package/hooks/useLayer.d.ts +7 -0
  259. package/hooks/useLayer.js +7 -0
  260. package/hooks/useOnClickOutside.d.ts +7 -0
  261. package/hooks/useOnClickOutside.js +7 -0
  262. package/native/Input.d.ts +3 -0
  263. package/native/Input.js +1 -0
  264. package/native/NativeTimeInput.d.ts +1 -0
  265. package/native/NativeTimeInput.js +1 -0
  266. package/native/Select.d.ts +1 -0
  267. package/native/Select.js +1 -0
  268. package/native/Textarea.d.ts +1 -0
  269. package/native/Textarea.js +1 -0
  270. package/package.json +2 -3
  271. package/polyglot/react.d.ts +19 -0
  272. package/polyglot/react.js +19 -0
  273. package/polyglot/types.d.ts +4 -0
  274. package/shared/dropdownField/FieldInput.d.ts +1 -0
  275. package/shared/dropdownField/FieldInput.js +1 -0
  276. package/shared/dropdownField/FieldShell.d.ts +4 -0
  277. package/shared/dropdownField/FieldShell.js +4 -0
  278. package/shared/dropdownField/SuggestionsDropdown.d.ts +4 -0
  279. package/shared/dropdownField/SuggestionsDropdown.js +4 -0
  280. package/shared/dropdownField/constants.d.ts +1 -0
  281. package/shared/dropdownField/constants.js +1 -0
  282. package/shared/dropdownField/shared.d.ts +7 -0
  283. package/shared/dropdownField/shared.js +7 -0
  284. package/shared/dropdownField/types.d.ts +7 -0
  285. package/shared/dropdownField/useActiveIndex.d.ts +4 -0
  286. package/shared/dropdownField/useActiveIndex.js +4 -0
  287. package/shared/dropdownField/useAsyncItems.d.ts +4 -0
  288. package/shared/dropdownField/useAsyncItems.js +4 -0
  289. package/shared/dropdownField/useDebouncedValue.d.ts +1 -0
  290. package/shared/dropdownField/useDebouncedValue.js +1 -0
  291. package/shared/dropdownField/useDropdownItems.d.ts +4 -0
  292. package/shared/dropdownField/useDropdownItems.js +4 -0
  293. package/shared/dropdownField/useDropdownPosition.d.ts +4 -0
  294. package/shared/dropdownField/useDropdownPosition.js +4 -0
  295. package/shared/dropdownField/useFieldOpenEffects.d.ts +4 -0
  296. package/shared/dropdownField/useFieldOpenEffects.js +4 -0
  297. package/shared/dropdownField/useListNavigation.d.ts +5 -0
  298. package/shared/dropdownField/useListNavigation.js +5 -0
  299. package/Alert/ai-documentation.md +0 -132
  300. package/Badge/ai-documentation.md +0 -155
  301. package/Banner/ai-documentation.md +0 -285
  302. package/Button/ai-documentation.md +0 -247
  303. package/CardMetric/ai-documentation.md +0 -277
  304. package/Checkbox/ai-documentation.md +0 -231
  305. package/Chip/ai-documentation.md +0 -281
  306. package/CodeEditor/ai-documentation.md +0 -350
  307. package/DateTimePicker/ai-documentation.md +0 -400
  308. package/Drawer/ai-documentation.md +0 -417
  309. package/EnhancedInput/ai-documentation.md +0 -352
  310. package/InputFile/ai-documentation.md +0 -420
  311. package/Modal/ai-documentation.md +0 -285
  312. package/PageHeader/ai-documentation.md +0 -511
  313. package/Pagination/ai-documentation.md +0 -509
  314. package/Popover/ai-documentation.md +0 -625
  315. package/ProgressBar/ai-documentation.md +0 -533
  316. package/Radio/ai-documentation.md +0 -243
  317. package/Select/ai-documentation.md +0 -374
  318. package/Skeleton/ai-documentation.md +0 -574
  319. package/Spinner/ai-documentation.md +0 -607
  320. package/Switch/ai-documentation.md +0 -312
  321. package/Tabs/ai-documentation.md +0 -475
  322. package/Toast/ai-documentation.md +0 -220
  323. package/Tooltip/ai-documentation.md +0 -340
  324. package/ai-documentation.md +0 -124
  325. package/native/ai-documentation.md +0 -485
@@ -1,312 +0,0 @@
1
- # Switch Component - @pushwoosh/dumb-components
2
-
3
- ## Overview
4
-
5
- - **Component Name**: Switch
6
- - **Import Path**: `@pushwoosh/dumb-components`
7
- - **Files**:
8
- - `/src/Switch/Switch.tsx` - Main component implementation
9
- - `/src/Switch/types.ts` - TypeScript type definitions
10
- - `/src/Switch/styles.ts` - Styled components
11
- - `/src/Switch/index.ts` - Component exports
12
- - **Type**: Form Control
13
- - **Description**: A toggle switch component that represents a boolean state. Features customizable label positioning, disabled state, and smooth visual transitions.
14
-
15
- ## TypeScript Interfaces
16
-
17
- ```typescript
18
- export interface SwitchProps {
19
- labelPosition?: 'left' | 'right';
20
- enabled?: boolean;
21
- isDisabled?: boolean;
22
- children?: ReactNode;
23
- onChange: () => void;
24
- }
25
-
26
- export interface AlignProps {
27
- labelPosition?: string;
28
- }
29
-
30
- export interface ComponentProps {
31
- enabled: boolean;
32
- isDisabled?: boolean;
33
- }
34
- ```
35
-
36
- ## Import & Usage
37
-
38
- ```typescript
39
- import { Switch } from '@pushwoosh/dumb-components';
40
-
41
- // Basic usage
42
- function MyComponent() {
43
- const [isEnabled, setIsEnabled] = useState(false);
44
-
45
- return (
46
- <Switch
47
- enabled={isEnabled}
48
- onChange={() => setIsEnabled(!isEnabled)}
49
- >
50
- Enable notifications
51
- </Switch>
52
- );
53
- }
54
-
55
- // Left-aligned label
56
- function LeftLabelSwitch() {
57
- const [darkMode, setDarkMode] = useState(false);
58
-
59
- return (
60
- <Switch
61
- enabled={darkMode}
62
- labelPosition="left"
63
- onChange={() => setDarkMode(!darkMode)}
64
- >
65
- Dark Mode
66
- </Switch>
67
- );
68
- }
69
- ```
70
-
71
- ## Advanced Examples
72
-
73
- ```typescript
74
- // Switch without label
75
- function MinimalSwitch() {
76
- const [enabled, setEnabled] = useState(false);
77
-
78
- return (
79
- <Switch
80
- enabled={enabled}
81
- onChange={() => setEnabled(!enabled)}
82
- />
83
- );
84
- }
85
-
86
- // Disabled switch
87
- function DisabledSwitch() {
88
- return (
89
- <Switch
90
- enabled={true}
91
- isDisabled={true}
92
- onChange={() => {}}
93
- >
94
- Read-only Setting
95
- </Switch>
96
- );
97
- }
98
-
99
- // Form integration
100
- function SettingsForm() {
101
- const [settings, setSettings] = useState({
102
- notifications: false,
103
- darkMode: false,
104
- autoSave: true,
105
- });
106
-
107
- const updateSetting = (key: string) => {
108
- setSettings(prev => ({
109
- ...prev,
110
- [key]: !prev[key as keyof typeof prev]
111
- }));
112
- };
113
-
114
- return (
115
- <div>
116
- <h3>User Settings</h3>
117
-
118
- <Switch
119
- enabled={settings.notifications}
120
- labelPosition="left"
121
- onChange={() => updateSetting('notifications')}
122
- >
123
- Email Notifications
124
- </Switch>
125
-
126
- <Switch
127
- enabled={settings.darkMode}
128
- labelPosition="left"
129
- onChange={() => updateSetting('darkMode')}
130
- >
131
- Dark Theme
132
- </Switch>
133
-
134
- <Switch
135
- enabled={settings.autoSave}
136
- labelPosition="left"
137
- onChange={() => updateSetting('autoSave')}
138
- >
139
- Auto-save Documents
140
- </Switch>
141
- </div>
142
- );
143
- }
144
-
145
- // Permission toggle
146
- function PermissionToggle() {
147
- const [permissions, setPermissions] = useState({
148
- canEdit: false,
149
- canDelete: false,
150
- canShare: true,
151
- });
152
-
153
- return (
154
- <div>
155
- <h4>User Permissions</h4>
156
-
157
- <Switch
158
- enabled={permissions.canEdit}
159
- onChange={() => setPermissions(prev => ({
160
- ...prev,
161
- canEdit: !prev.canEdit
162
- }))}
163
- >
164
- Can Edit Content
165
- </Switch>
166
-
167
- <Switch
168
- enabled={permissions.canDelete}
169
- isDisabled={!permissions.canEdit} // Dependent permission
170
- onChange={() => setPermissions(prev => ({
171
- ...prev,
172
- canDelete: !prev.canDelete
173
- }))}
174
- >
175
- Can Delete Content
176
- </Switch>
177
-
178
- <Switch
179
- enabled={permissions.canShare}
180
- onChange={() => setPermissions(prev => ({
181
- ...prev,
182
- canShare: !prev.canShare
183
- }))}
184
- >
185
- Can Share Content
186
- </Switch>
187
- </div>
188
- );
189
- }
190
-
191
- // Async state management
192
- function AsyncSwitch() {
193
- const [enabled, setEnabled] = useState(false);
194
- const [loading, setLoading] = useState(false);
195
-
196
- const handleToggle = async () => {
197
- setLoading(true);
198
- try {
199
- // Simulate API call
200
- await new Promise(resolve => setTimeout(resolve, 1000));
201
- setEnabled(!enabled);
202
- } finally {
203
- setLoading(false);
204
- }
205
- };
206
-
207
- return (
208
- <Switch
209
- enabled={enabled}
210
- isDisabled={loading}
211
- onChange={handleToggle}
212
- >
213
- {loading ? 'Updating...' : 'Feature Toggle'}
214
- </Switch>
215
- );
216
- }
217
- ```
218
-
219
- ## Props Reference
220
-
221
- | Prop | Type | Default | Required | Description |
222
- |------|------|---------|----------|-------------|
223
- | `labelPosition` | `'left' \| 'right'` | `'right'` | No | Position of the label relative to the switch |
224
- | `enabled` | `boolean` | `false` | No | Whether the switch is in the enabled/on state |
225
- | `isDisabled` | `boolean` | `false` | No | Whether the switch is disabled and non-interactive |
226
- | `children` | `ReactNode` | `undefined` | No | Label content displayed next to the switch |
227
- | `onChange` | `() => void` | - | Yes | Callback fired when the switch is toggled |
228
-
229
- ## AI Agent Guidelines
230
-
231
- ### Recommended Patterns
232
-
233
- 1. **State Management**: Use boolean state for switch values
234
- ```typescript
235
- const [isEnabled, setIsEnabled] = useState(false);
236
-
237
- <Switch
238
- enabled={isEnabled}
239
- onChange={() => setIsEnabled(!isEnabled)}
240
- >
241
- Setting Name
242
- </Switch>
243
- ```
244
-
245
- 2. **Label Positioning**: Use consistent positioning within a form
246
- ```typescript
247
- // Consistent left positioning for form layouts
248
- <Switch labelPosition="left" enabled={setting1} onChange={toggle1}>Setting 1</Switch>
249
- <Switch labelPosition="left" enabled={setting2} onChange={toggle2}>Setting 2</Switch>
250
- ```
251
-
252
- 3. **Form Integration**: Integrate with form state management
253
- ```typescript
254
- const [formData, setFormData] = useState({ notifications: false });
255
-
256
- const toggleNotifications = () => {
257
- setFormData(prev => ({
258
- ...prev,
259
- notifications: !prev.notifications
260
- }));
261
- };
262
- ```
263
-
264
- ### Common Mistakes to Avoid
265
-
266
- 1. **Missing onChange**: Always provide an `onChange` handler, even for disabled switches
267
- 2. **Inconsistent State**: Don't mix controlled and uncontrolled patterns
268
- 3. **Wrong Data Type**: The `enabled` prop expects a boolean, not a string
269
- 4. **Accessibility**: Don't forget to provide meaningful labels via `children`
270
-
271
- ### Integration Tips
272
-
273
- 1. **Accessibility**: The component automatically handles ARIA attributes and keyboard navigation
274
- 2. **Visual States**: The switch provides clear visual feedback for enabled/disabled states
275
- 3. **Performance**: Use React.memo() for switches in large lists to prevent unnecessary re-renders
276
- 4. **Form Libraries**: Works well with React Hook Form and Formik
277
- ```typescript
278
- // React Hook Form integration
279
- const { watch, setValue } = useForm();
280
- const enabled = watch('featureEnabled');
281
-
282
- <Switch
283
- enabled={enabled}
284
- onChange={() => setValue('featureEnabled', !enabled)}
285
- >
286
- Feature Toggle
287
- </Switch>
288
- ```
289
-
290
- 5. **Async Operations**: Handle loading states by temporarily disabling the switch
291
- ```typescript
292
- const [loading, setLoading] = useState(false);
293
-
294
- <Switch
295
- enabled={enabled}
296
- isDisabled={loading}
297
- onChange={async () => {
298
- setLoading(true);
299
- await saveSettings();
300
- setLoading(false);
301
- }}
302
- >
303
- {loading ? 'Saving...' : 'Auto Save'}
304
- </Switch>
305
- ```
306
-
307
- ## Related Components
308
-
309
- - **Radio**: For mutually exclusive options
310
- - **Checkbox**: For multi-select scenarios
311
- - **Button**: For action-based toggles
312
- - **Select**: For multiple option selections