@12-apps/ui 1.0.0
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.
- package/components-catalog.md +806 -0
- package/components-guidelines.md +347 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/eslint.config.js +77 -0
- package/package.json +247 -0
- package/src/__tests__/package-wiring.test.ts +37 -0
- package/src/__tests__/setup.ts +1 -0
- package/src/__tests__/social-login-button.test.tsx +186 -0
- package/src/__tests__/user-avatar.test.tsx +195 -0
- package/src/button.tsx +22 -0
- package/src/components/command/__tests__/command.test.tsx +112 -0
- package/src/components/data-display/Alert/Alert.md +209 -0
- package/src/components/data-display/Alert/Alert.stories.tsx +561 -0
- package/src/components/data-display/Alert/Alert.test.stories.tsx +709 -0
- package/src/components/data-display/Alert/Alert.tsx +449 -0
- package/src/components/data-display/Alert/Alert.types.ts +79 -0
- package/src/components/data-display/Alert/index.ts +2 -0
- package/src/components/data-display/AlertDialog/AlertDialog.md +408 -0
- package/src/components/data-display/AlertDialog/AlertDialog.stories.tsx +360 -0
- package/src/components/data-display/AlertDialog/AlertDialog.test.stories.tsx +753 -0
- package/src/components/data-display/AlertDialog/AlertDialog.tsx +273 -0
- package/src/components/data-display/AlertDialog/AlertDialog.types.ts +74 -0
- package/src/components/data-display/AlertDialog/index.ts +2 -0
- package/src/components/data-display/AsyncStateContainer/AsyncStateContainer.stories.tsx +230 -0
- package/src/components/data-display/AsyncStateContainer/AsyncStateContainer.test.stories.tsx +270 -0
- package/src/components/data-display/AsyncStateContainer/AsyncStateContainer.tsx +116 -0
- package/src/components/data-display/AsyncStateContainer/AsyncStateContainer.types.ts +70 -0
- package/src/components/data-display/AsyncStateContainer/index.ts +2 -0
- package/src/components/data-display/Avatar/Avatar.md +568 -0
- package/src/components/data-display/Avatar/Avatar.stories.tsx +718 -0
- package/src/components/data-display/Avatar/Avatar.test.stories.tsx +820 -0
- package/src/components/data-display/Avatar/Avatar.tsx +507 -0
- package/src/components/data-display/Avatar/Avatar.types.ts +88 -0
- package/src/components/data-display/Avatar/index.ts +2 -0
- package/src/components/data-display/Badge/Badge.md +469 -0
- package/src/components/data-display/Badge/Badge.stories.tsx +1136 -0
- package/src/components/data-display/Badge/Badge.test.stories.tsx +1193 -0
- package/src/components/data-display/Badge/Badge.tsx +606 -0
- package/src/components/data-display/Badge/Badge.types.ts +118 -0
- package/src/components/data-display/Badge/index.ts +2 -0
- package/src/components/data-display/Banner/Banner.stories.tsx +524 -0
- package/src/components/data-display/Banner/Banner.test.stories.tsx +503 -0
- package/src/components/data-display/Banner/Banner.tsx +350 -0
- package/src/components/data-display/Banner/Banner.types.ts +41 -0
- package/src/components/data-display/Banner/banner.md +141 -0
- package/src/components/data-display/Banner/index.ts +2 -0
- package/src/components/data-display/Carousel/Carousel.md +815 -0
- package/src/components/data-display/Carousel/Carousel.stories.tsx +607 -0
- package/src/components/data-display/Carousel/Carousel.test.stories.tsx +691 -0
- package/src/components/data-display/Carousel/Carousel.tsx +765 -0
- package/src/components/data-display/Carousel/Carousel.types.ts +79 -0
- package/src/components/data-display/Carousel/index.ts +8 -0
- package/src/components/data-display/Chart/Chart.md +352 -0
- package/src/components/data-display/Chart/Chart.stories.tsx +568 -0
- package/src/components/data-display/Chart/Chart.test.stories.tsx +174 -0
- package/src/components/data-display/Chart/Chart.tsx +520 -0
- package/src/components/data-display/Chart/Chart.types.ts +65 -0
- package/src/components/data-display/Chart/index.ts +2 -0
- package/src/components/data-display/Chip/Chip.stories.tsx +251 -0
- package/src/components/data-display/Chip/Chip.test.stories.tsx +263 -0
- package/src/components/data-display/Chip/Chip.tsx +134 -0
- package/src/components/data-display/Chip/Chip.types.ts +51 -0
- package/src/components/data-display/Chip/chip.md +395 -0
- package/src/components/data-display/Chip/index.ts +2 -0
- package/src/components/data-display/DataGrid/DataGrid.md +602 -0
- package/src/components/data-display/DataGrid/DataGrid.stories.tsx +515 -0
- package/src/components/data-display/DataGrid/DataGrid.test.stories.tsx +659 -0
- package/src/components/data-display/DataGrid/DataGrid.tsx +743 -0
- package/src/components/data-display/DataGrid/DataGrid.types.ts +171 -0
- package/src/components/data-display/DataGrid/index.ts +21 -0
- package/src/components/data-display/DateTimeDisplay/DateTimeDisplay.tsx +197 -0
- package/src/components/data-display/DateTimeDisplay/DateTimeDisplay.types.ts +46 -0
- package/src/components/data-display/DateTimeDisplay/index.ts +2 -0
- package/src/components/data-display/DescriptionItem/DescriptionItem.md +226 -0
- package/src/components/data-display/DescriptionItem/DescriptionItem.stories.tsx +254 -0
- package/src/components/data-display/DescriptionItem/DescriptionItem.tsx +100 -0
- package/src/components/data-display/DescriptionItem/DescriptionItem.types.ts +1 -0
- package/src/components/data-display/DescriptionItem/index.ts +2 -0
- package/src/components/data-display/EmptyState/EmptyState.md +265 -0
- package/src/components/data-display/EmptyState/EmptyState.stories.tsx +282 -0
- package/src/components/data-display/EmptyState/EmptyState.test.stories.tsx +441 -0
- package/src/components/data-display/EmptyState/EmptyState.tsx +180 -0
- package/src/components/data-display/EmptyState/EmptyState.types.ts +31 -0
- package/src/components/data-display/EmptyState/index.ts +2 -0
- package/src/components/data-display/ErrorState/ErrorState.stories.tsx +110 -0
- package/src/components/data-display/ErrorState/ErrorState.test.stories.tsx +133 -0
- package/src/components/data-display/ErrorState/ErrorState.tsx +118 -0
- package/src/components/data-display/ErrorState/ErrorState.types.ts +45 -0
- package/src/components/data-display/ErrorState/index.ts +2 -0
- package/src/components/data-display/HoverCard/HoverCard.md +389 -0
- package/src/components/data-display/HoverCard/HoverCard.stories.tsx +648 -0
- package/src/components/data-display/HoverCard/HoverCard.test.stories.tsx +929 -0
- package/src/components/data-display/HoverCard/HoverCard.tsx +657 -0
- package/src/components/data-display/HoverCard/HoverCard.types.ts +116 -0
- package/src/components/data-display/HoverCard/index.ts +2 -0
- package/src/components/data-display/InteractiveTooltip/InteractiveTooltip.md +532 -0
- package/src/components/data-display/InteractiveTooltip/InteractiveTooltip.stories.tsx +411 -0
- package/src/components/data-display/InteractiveTooltip/InteractiveTooltip.tsx +245 -0
- package/src/components/data-display/InteractiveTooltip/InteractiveTooltip.types.ts +64 -0
- package/src/components/data-display/InteractiveTooltip/index.ts +2 -0
- package/src/components/data-display/LazyImage/LazyImage.md +356 -0
- package/src/components/data-display/LazyImage/LazyImage.stories.tsx +387 -0
- package/src/components/data-display/LazyImage/LazyImage.tsx +323 -0
- package/src/components/data-display/LazyImage/LazyImage.types.ts +205 -0
- package/src/components/data-display/LazyImage/index.ts +2 -0
- package/src/components/data-display/Lightbox/Lightbox.stories.tsx +315 -0
- package/src/components/data-display/Lightbox/Lightbox.test.stories.tsx +605 -0
- package/src/components/data-display/Lightbox/Lightbox.tsx +666 -0
- package/src/components/data-display/Lightbox/Lightbox.types.ts +49 -0
- package/src/components/data-display/Lightbox/index.ts +2 -0
- package/src/components/data-display/Lightbox/lightbox.md +298 -0
- package/src/components/data-display/LoadingState/LoadingState.stories.tsx +124 -0
- package/src/components/data-display/LoadingState/LoadingState.test.stories.tsx +99 -0
- package/src/components/data-display/LoadingState/LoadingState.tsx +103 -0
- package/src/components/data-display/LoadingState/LoadingState.types.ts +37 -0
- package/src/components/data-display/LoadingState/index.ts +2 -0
- package/src/components/data-display/MapPreview/MapPreview.md +154 -0
- package/src/components/data-display/MapPreview/MapPreview.stories.tsx +458 -0
- package/src/components/data-display/MapPreview/MapPreview.test.stories.tsx +390 -0
- package/src/components/data-display/MapPreview/MapPreview.tsx +922 -0
- package/src/components/data-display/MapPreview/MapPreview.types.ts +56 -0
- package/src/components/data-display/MapPreview/index.ts +2 -0
- package/src/components/data-display/Popover/Popover.md +245 -0
- package/src/components/data-display/Popover/Popover.stories.tsx +295 -0
- package/src/components/data-display/Popover/Popover.test.stories.tsx +1168 -0
- package/src/components/data-display/Popover/Popover.tsx +132 -0
- package/src/components/data-display/Popover/Popover.types.ts +33 -0
- package/src/components/data-display/Popover/index.ts +2 -0
- package/src/components/data-display/Progress/Progress.md +450 -0
- package/src/components/data-display/Progress/Progress.stories.tsx +481 -0
- package/src/components/data-display/Progress/Progress.test.stories.tsx +2070 -0
- package/src/components/data-display/Progress/Progress.tsx +332 -0
- package/src/components/data-display/Progress/Progress.types.ts +61 -0
- package/src/components/data-display/Progress/index.ts +2 -0
- package/src/components/data-display/SectionOnboarding/SectionOnboarding.md +108 -0
- package/src/components/data-display/SectionOnboarding/SectionOnboarding.stories.tsx +160 -0
- package/src/components/data-display/SectionOnboarding/SectionOnboarding.test.stories.tsx +190 -0
- package/src/components/data-display/SectionOnboarding/SectionOnboarding.tsx +224 -0
- package/src/components/data-display/SectionOnboarding/SectionOnboarding.types.ts +101 -0
- package/src/components/data-display/SectionOnboarding/index.ts +7 -0
- package/src/components/data-display/Sheet/Sheet.md +475 -0
- package/src/components/data-display/Sheet/Sheet.stories.tsx +883 -0
- package/src/components/data-display/Sheet/Sheet.test.stories.tsx +1101 -0
- package/src/components/data-display/Sheet/Sheet.tsx +978 -0
- package/src/components/data-display/Sheet/Sheet.types.ts +93 -0
- package/src/components/data-display/Sheet/index.ts +8 -0
- package/src/components/data-display/Stepper/Stepper.md +542 -0
- package/src/components/data-display/Stepper/Stepper.stories.tsx +540 -0
- package/src/components/data-display/Stepper/Stepper.test.stories.tsx +607 -0
- package/src/components/data-display/Stepper/Stepper.tsx +328 -0
- package/src/components/data-display/Stepper/Stepper.types.ts +97 -0
- package/src/components/data-display/Stepper/index.ts +2 -0
- package/src/components/data-display/Table/Table.md +243 -0
- package/src/components/data-display/Table/Table.stories.tsx +801 -0
- package/src/components/data-display/Table/Table.test.stories.tsx +369 -0
- package/src/components/data-display/Table/Table.tsx +831 -0
- package/src/components/data-display/Table/Table.types.ts +335 -0
- package/src/components/data-display/Table/index.ts +2 -0
- package/src/components/data-display/Timeline/Timeline.md +201 -0
- package/src/components/data-display/Timeline/Timeline.stories.tsx +444 -0
- package/src/components/data-display/Timeline/Timeline.test.stories.tsx +944 -0
- package/src/components/data-display/Timeline/Timeline.tsx +348 -0
- package/src/components/data-display/Timeline/Timeline.types.ts +26 -0
- package/src/components/data-display/Timeline/index.ts +2 -0
- package/src/components/data-display/TimingDiagram/TimingDiagram.md +162 -0
- package/src/components/data-display/TimingDiagram/TimingDiagram.stories.tsx +475 -0
- package/src/components/data-display/TimingDiagram/TimingDiagram.test.stories.tsx +734 -0
- package/src/components/data-display/TimingDiagram/TimingDiagram.tsx +399 -0
- package/src/components/data-display/TimingDiagram/TimingDiagram.types.ts +19 -0
- package/src/components/data-display/TimingDiagram/index.ts +2 -0
- package/src/components/data-display/Tooltip/Tooltip.md +397 -0
- package/src/components/data-display/Tooltip/Tooltip.stories.tsx +465 -0
- package/src/components/data-display/Tooltip/Tooltip.test.stories.tsx +1168 -0
- package/src/components/data-display/Tooltip/Tooltip.tsx +161 -0
- package/src/components/data-display/Tooltip/Tooltip.types.ts +33 -0
- package/src/components/data-display/Tooltip/index.ts +2 -0
- package/src/components/data-display/index.ts +29 -0
- package/src/components/feedback/Dialog/Dialog.md +527 -0
- package/src/components/feedback/Dialog/Dialog.stories.tsx +833 -0
- package/src/components/feedback/Dialog/Dialog.styles.ts +171 -0
- package/src/components/feedback/Dialog/Dialog.test.stories.tsx +955 -0
- package/src/components/feedback/Dialog/Dialog.tsx +256 -0
- package/src/components/feedback/Dialog/Dialog.types.ts +46 -0
- package/src/components/feedback/Dialog/index.ts +9 -0
- package/src/components/feedback/Modal/Modal.md +629 -0
- package/src/components/feedback/Modal/Modal.stories.tsx +765 -0
- package/src/components/feedback/Modal/Modal.test.stories.tsx +251 -0
- package/src/components/feedback/Modal/Modal.tsx +279 -0
- package/src/components/feedback/Modal/Modal.types.ts +26 -0
- package/src/components/feedback/Modal/index.ts +7 -0
- package/src/components/feedback/Sonner/Sonner.stories.tsx +698 -0
- package/src/components/feedback/Sonner/Sonner.test.stories.tsx +896 -0
- package/src/components/feedback/Sonner/Sonner.tsx +493 -0
- package/src/components/feedback/Sonner/Sonner.types.ts +65 -0
- package/src/components/feedback/Sonner/index.ts +8 -0
- package/src/components/feedback/StackedModal/StackedModal.md +273 -0
- package/src/components/feedback/StackedModal/StackedModal.stories.tsx +1785 -0
- package/src/components/feedback/StackedModal/StackedModal.test.stories.tsx +975 -0
- package/src/components/feedback/StackedModal/StackedModal.tsx +664 -0
- package/src/components/feedback/StackedModal/StackedModal.types.ts +70 -0
- package/src/components/feedback/StackedModal/index.ts +11 -0
- package/src/components/feedback/Toast/Toast.md +547 -0
- package/src/components/feedback/Toast/Toast.stories.tsx +548 -0
- package/src/components/feedback/Toast/Toast.test.stories.tsx +834 -0
- package/src/components/feedback/Toast/Toast.tsx +279 -0
- package/src/components/feedback/Toast/Toast.types.ts +59 -0
- package/src/components/feedback/Toast/index.ts +8 -0
- package/src/components/feedback/TutorialOverlay/TutorialOverlay.md +610 -0
- package/src/components/feedback/TutorialOverlay/TutorialOverlay.stories.tsx +691 -0
- package/src/components/feedback/TutorialOverlay/TutorialOverlay.test.stories.tsx +634 -0
- package/src/components/feedback/TutorialOverlay/TutorialOverlay.tsx +554 -0
- package/src/components/feedback/TutorialOverlay/TutorialOverlay.types.ts +30 -0
- package/src/components/feedback/TutorialOverlay/index.ts +2 -0
- package/src/components/feedback/index.ts +6 -0
- package/src/components/form/AddressAutocomplete/AddressAutocomplete.md +633 -0
- package/src/components/form/AddressAutocomplete/AddressAutocomplete.stories.tsx +663 -0
- package/src/components/form/AddressAutocomplete/AddressAutocomplete.test.stories.tsx +723 -0
- package/src/components/form/AddressAutocomplete/AddressAutocomplete.tsx +836 -0
- package/src/components/form/AddressAutocomplete/AddressAutocomplete.types.ts +37 -0
- package/src/components/form/AddressAutocomplete/index.ts +2 -0
- package/src/components/form/Autocomplete/Autocomplete.helpers.ts +115 -0
- package/src/components/form/Autocomplete/Autocomplete.keys.ts +134 -0
- package/src/components/form/Autocomplete/Autocomplete.parts.tsx +337 -0
- package/src/components/form/Autocomplete/Autocomplete.stories.tsx +715 -0
- package/src/components/form/Autocomplete/Autocomplete.test.stories.tsx +825 -0
- package/src/components/form/Autocomplete/Autocomplete.tsx +166 -0
- package/src/components/form/Autocomplete/Autocomplete.types.ts +116 -0
- package/src/components/form/Autocomplete/autocomplete.md +789 -0
- package/src/components/form/Autocomplete/index.ts +8 -0
- package/src/components/form/Autocomplete/useAutocomplete.ts +311 -0
- package/src/components/form/Button/Button.md +411 -0
- package/src/components/form/Button/Button.stories.tsx +362 -0
- package/src/components/form/Button/Button.test.stories.tsx +603 -0
- package/src/components/form/Button/Button.tsx +326 -0
- package/src/components/form/Button/Button.types.ts +74 -0
- package/src/components/form/Button/index.ts +2 -0
- package/src/components/form/Calendar/Calendar.md +807 -0
- package/src/components/form/Calendar/Calendar.stories.tsx +349 -0
- package/src/components/form/Calendar/Calendar.test.stories.tsx +465 -0
- package/src/components/form/Calendar/Calendar.tsx +571 -0
- package/src/components/form/Calendar/Calendar.types.ts +81 -0
- package/src/components/form/Calendar/index.ts +11 -0
- package/src/components/form/Checkbox/Checkbox.md +200 -0
- package/src/components/form/Checkbox/Checkbox.stories.tsx +265 -0
- package/src/components/form/Checkbox/Checkbox.test.stories.tsx +181 -0
- package/src/components/form/Checkbox/Checkbox.tsx +170 -0
- package/src/components/form/Checkbox/Checkbox.types.ts +20 -0
- package/src/components/form/Checkbox/index.ts +2 -0
- package/src/components/form/CodeEditor/CodeEditor.md +350 -0
- package/src/components/form/CodeEditor/CodeEditor.stories.tsx +871 -0
- package/src/components/form/CodeEditor/CodeEditor.test.stories.tsx +575 -0
- package/src/components/form/CodeEditor/CodeEditor.tsx +415 -0
- package/src/components/form/CodeEditor/CodeEditor.types.ts +38 -0
- package/src/components/form/CodeEditor/index.ts +2 -0
- package/src/components/form/Command/Command.md +468 -0
- package/src/components/form/Command/Command.stories.tsx +580 -0
- package/src/components/form/Command/Command.test.stories.tsx +215 -0
- package/src/components/form/Command/Command.tsx +545 -0
- package/src/components/form/Command/Command.types.ts +116 -0
- package/src/components/form/Command/index.ts +12 -0
- package/src/components/form/CreatableSelect/CreatableSelect.md +114 -0
- package/src/components/form/CreatableSelect/CreatableSelect.stories.tsx +112 -0
- package/src/components/form/CreatableSelect/CreatableSelect.test.stories.tsx +134 -0
- package/src/components/form/CreatableSelect/CreatableSelect.tsx +149 -0
- package/src/components/form/CreatableSelect/CreatableSelect.types.ts +37 -0
- package/src/components/form/CreatableSelect/index.ts +2 -0
- package/src/components/form/Form/Form.md +325 -0
- package/src/components/form/Form/Form.stories.tsx +687 -0
- package/src/components/form/Form/Form.test.stories.tsx +601 -0
- package/src/components/form/Form/Form.tsx +136 -0
- package/src/components/form/Form/Form.types.ts +42 -0
- package/src/components/form/Form/index.ts +8 -0
- package/src/components/form/Input/Input.md +252 -0
- package/src/components/form/Input/Input.stories.tsx +256 -0
- package/src/components/form/Input/Input.test.stories.tsx +1184 -0
- package/src/components/form/Input/Input.tsx +263 -0
- package/src/components/form/Input/Input.types.ts +24 -0
- package/src/components/form/Input/index.ts +2 -0
- package/src/components/form/InputOTP/InputOTP.md +419 -0
- package/src/components/form/InputOTP/InputOTP.stories.tsx +774 -0
- package/src/components/form/InputOTP/InputOTP.test.stories.tsx +596 -0
- package/src/components/form/InputOTP/InputOTP.tsx +231 -0
- package/src/components/form/InputOTP/InputOTP.types.ts +68 -0
- package/src/components/form/InputOTP/index.ts +2 -0
- package/src/components/form/Label/Label.md +426 -0
- package/src/components/form/Label/Label.stories.tsx +473 -0
- package/src/components/form/Label/Label.test.stories.tsx +909 -0
- package/src/components/form/Label/Label.tsx +367 -0
- package/src/components/form/Label/Label.types.ts +35 -0
- package/src/components/form/Label/index.ts +2 -0
- package/src/components/form/Menubar/Menubar.md +275 -0
- package/src/components/form/Menubar/Menubar.stories.tsx +472 -0
- package/src/components/form/Menubar/Menubar.test.stories.tsx +588 -0
- package/src/components/form/Menubar/Menubar.tsx +467 -0
- package/src/components/form/Menubar/Menubar.types.ts +71 -0
- package/src/components/form/Menubar/index.ts +8 -0
- package/src/components/form/PasswordStrength/PasswordStrength.md +139 -0
- package/src/components/form/PasswordStrength/PasswordStrength.stories.tsx +562 -0
- package/src/components/form/PasswordStrength/PasswordStrength.test.stories.tsx +327 -0
- package/src/components/form/PasswordStrength/PasswordStrength.tsx +419 -0
- package/src/components/form/PasswordStrength/PasswordStrength.types.ts +18 -0
- package/src/components/form/PasswordStrength/index.ts +2 -0
- package/src/components/form/PhoneInput/PhoneInput.md +578 -0
- package/src/components/form/PhoneInput/PhoneInput.stories.tsx +495 -0
- package/src/components/form/PhoneInput/PhoneInput.test.stories.tsx +666 -0
- package/src/components/form/PhoneInput/PhoneInput.tsx +376 -0
- package/src/components/form/PhoneInput/PhoneInput.types.ts +25 -0
- package/src/components/form/PhoneInput/index.ts +2 -0
- package/src/components/form/RadioGroup/RadioGroup.md +477 -0
- package/src/components/form/RadioGroup/RadioGroup.stories.tsx +518 -0
- package/src/components/form/RadioGroup/RadioGroup.test.stories.tsx +685 -0
- package/src/components/form/RadioGroup/RadioGroup.tsx +664 -0
- package/src/components/form/RadioGroup/RadioGroup.types.ts +82 -0
- package/src/components/form/RadioGroup/index.ts +2 -0
- package/src/components/form/RichTextEditor/RichTextEditor.md +710 -0
- package/src/components/form/RichTextEditor/RichTextEditor.stories.tsx +261 -0
- package/src/components/form/RichTextEditor/RichTextEditor.test.stories.tsx +498 -0
- package/src/components/form/RichTextEditor/RichTextEditor.tsx +468 -0
- package/src/components/form/RichTextEditor/RichTextEditor.types.ts +72 -0
- package/src/components/form/RichTextEditor/index.ts +2 -0
- package/src/components/form/SearchPalette/SearchPalette.md +69 -0
- package/src/components/form/SearchPalette/SearchPalette.parts.tsx +358 -0
- package/src/components/form/SearchPalette/SearchPalette.stories.tsx +135 -0
- package/src/components/form/SearchPalette/SearchPalette.tsx +141 -0
- package/src/components/form/SearchPalette/SearchPalette.types.ts +82 -0
- package/src/components/form/SearchPalette/index.ts +7 -0
- package/src/components/form/Select/Select.md +254 -0
- package/src/components/form/Select/Select.stories.tsx +364 -0
- package/src/components/form/Select/Select.test.stories.tsx +977 -0
- package/src/components/form/Select/Select.tsx +239 -0
- package/src/components/form/Select/Select.types.ts +57 -0
- package/src/components/form/Select/index.ts +2 -0
- package/src/components/form/Slider/Slider.md +326 -0
- package/src/components/form/Slider/Slider.stories.tsx +418 -0
- package/src/components/form/Slider/Slider.test.stories.tsx +1044 -0
- package/src/components/form/Slider/Slider.tsx +374 -0
- package/src/components/form/Slider/Slider.types.ts +113 -0
- package/src/components/form/Slider/index.ts +2 -0
- package/src/components/form/Switch/Switch.md +565 -0
- package/src/components/form/Switch/Switch.stories.tsx +697 -0
- package/src/components/form/Switch/Switch.test.stories.tsx +597 -0
- package/src/components/form/Switch/Switch.tsx +578 -0
- package/src/components/form/Switch/Switch.types.ts +130 -0
- package/src/components/form/Switch/index.ts +2 -0
- package/src/components/form/Textarea/Textarea.stories.tsx +473 -0
- package/src/components/form/Textarea/Textarea.test.stories.tsx +708 -0
- package/src/components/form/Textarea/Textarea.tsx +678 -0
- package/src/components/form/Textarea/Textarea.types.ts +84 -0
- package/src/components/form/Textarea/index.ts +2 -0
- package/src/components/form/Toggle/Toggle.md +234 -0
- package/src/components/form/Toggle/Toggle.stories.tsx +638 -0
- package/src/components/form/Toggle/Toggle.test.stories.tsx +1167 -0
- package/src/components/form/Toggle/Toggle.tsx +265 -0
- package/src/components/form/Toggle/Toggle.types.ts +79 -0
- package/src/components/form/Toggle/index.ts +2 -0
- package/src/components/form/ToggleGroup/ToggleGroup.md +329 -0
- package/src/components/form/ToggleGroup/ToggleGroup.stories.tsx +617 -0
- package/src/components/form/ToggleGroup/ToggleGroup.test.stories.tsx +918 -0
- package/src/components/form/ToggleGroup/ToggleGroup.tsx +129 -0
- package/src/components/form/ToggleGroup/ToggleGroup.types.ts +53 -0
- package/src/components/form/ToggleGroup/index.ts +2 -0
- package/src/components/form/UploadButton/UploadButton.md +44 -0
- package/src/components/form/UploadButton/UploadButton.stories.tsx +366 -0
- package/src/components/form/UploadButton/UploadButton.test.stories.tsx +454 -0
- package/src/components/form/UploadButton/UploadButton.tsx +312 -0
- package/src/components/form/UploadButton/UploadButton.types.ts +58 -0
- package/src/components/form/UploadButton/index.ts +2 -0
- package/src/components/form/index.ts +25 -0
- package/src/components/form/total-form/Fields/SelectField.tsx +57 -0
- package/src/components/form/total-form/Fields/TextField.tsx +58 -0
- package/src/components/form/total-form/Fields/index.ts +4 -0
- package/src/components/form/total-form/FormContainer.tsx +104 -0
- package/src/components/form/total-form/FormContext.tsx +38 -0
- package/src/components/form/total-form/FormErrorSnackbar.tsx +35 -0
- package/src/components/form/total-form/SubmitButton.tsx +27 -0
- package/src/components/form/total-form/index.ts +12 -0
- package/src/components/form/total-form/total-form.test.tsx +97 -0
- package/src/components/index.ts +7 -0
- package/src/components/layout/Accordion/Accordion.md +725 -0
- package/src/components/layout/Accordion/Accordion.stories.tsx +690 -0
- package/src/components/layout/Accordion/Accordion.test.stories.tsx +1362 -0
- package/src/components/layout/Accordion/Accordion.tsx +242 -0
- package/src/components/layout/Accordion/Accordion.types.ts +32 -0
- package/src/components/layout/Accordion/index.ts +8 -0
- package/src/components/layout/Card/Card.md +533 -0
- package/src/components/layout/Card/Card.stories.tsx +593 -0
- package/src/components/layout/Card/Card.test.stories.tsx +1134 -0
- package/src/components/layout/Card/Card.tsx +404 -0
- package/src/components/layout/Card/Card.types.ts +57 -0
- package/src/components/layout/Card/index.ts +8 -0
- package/src/components/layout/Collapsible/Collapsible.md +135 -0
- package/src/components/layout/Collapsible/Collapsible.stories.tsx +180 -0
- package/src/components/layout/Collapsible/Collapsible.test.stories.tsx +304 -0
- package/src/components/layout/Collapsible/Collapsible.tsx +198 -0
- package/src/components/layout/Collapsible/Collapsible.types.ts +35 -0
- package/src/components/layout/Collapsible/index.ts +6 -0
- package/src/components/layout/Container/Container.md +420 -0
- package/src/components/layout/Container/Container.stories.tsx +557 -0
- package/src/components/layout/Container/Container.test.stories.tsx +750 -0
- package/src/components/layout/Container/Container.tsx +72 -0
- package/src/components/layout/Container/Container.types.ts +11 -0
- package/src/components/layout/Container/index.ts +2 -0
- package/src/components/layout/ContentToolbar/ColumnsMenu.tsx +99 -0
- package/src/components/layout/ContentToolbar/ContentToolbar.md +75 -0
- package/src/components/layout/ContentToolbar/ContentToolbar.stories.tsx +129 -0
- package/src/components/layout/ContentToolbar/ContentToolbar.test.stories.tsx +251 -0
- package/src/components/layout/ContentToolbar/ContentToolbar.tsx +108 -0
- package/src/components/layout/ContentToolbar/ContentToolbar.types.ts +229 -0
- package/src/components/layout/ContentToolbar/FilterTrigger.tsx +71 -0
- package/src/components/layout/ContentToolbar/MultiSelectDropdown.tsx +297 -0
- package/src/components/layout/ContentToolbar/SavedViewsMenu.tsx +334 -0
- package/src/components/layout/ContentToolbar/SortByDropdown.tsx +213 -0
- package/src/components/layout/ContentToolbar/ViewSelector.tsx +98 -0
- package/src/components/layout/ContentToolbar/__tests__/ColumnsMenu.test.tsx +39 -0
- package/src/components/layout/ContentToolbar/__tests__/MultiSelectDropdown.test.tsx +110 -0
- package/src/components/layout/ContentToolbar/__tests__/SavedViewsMenu.test.tsx +99 -0
- package/src/components/layout/ContentToolbar/index.ts +24 -0
- package/src/components/layout/ContentToolbar/tests.md +42 -0
- package/src/components/layout/ContentToolbar/track.md +41 -0
- package/src/components/layout/Dashboard/Dashboard.md +71 -0
- package/src/components/layout/Dashboard/Dashboard.stories.tsx +104 -0
- package/src/components/layout/Dashboard/Dashboard.test.stories.tsx +164 -0
- package/src/components/layout/Dashboard/Dashboard.tsx +297 -0
- package/src/components/layout/Dashboard/Dashboard.types.ts +157 -0
- package/src/components/layout/Dashboard/DashboardContext.tsx +47 -0
- package/src/components/layout/Dashboard/DashboardParts.tsx +216 -0
- package/src/components/layout/Dashboard/index.ts +18 -0
- package/src/components/layout/Dashboard/tests.md +46 -0
- package/src/components/layout/Dashboard/track.md +50 -0
- package/src/components/layout/Drawer/Drawer.md +479 -0
- package/src/components/layout/Drawer/Drawer.stories.tsx +660 -0
- package/src/components/layout/Drawer/Drawer.test.stories.tsx +1339 -0
- package/src/components/layout/Drawer/Drawer.tsx +150 -0
- package/src/components/layout/Drawer/Drawer.types.ts +34 -0
- package/src/components/layout/Drawer/index.ts +2 -0
- package/src/components/layout/Resizable/Resizable.md +308 -0
- package/src/components/layout/Resizable/Resizable.stories.tsx +1039 -0
- package/src/components/layout/Resizable/Resizable.test.stories.tsx +750 -0
- package/src/components/layout/Resizable/Resizable.tsx +190 -0
- package/src/components/layout/Resizable/Resizable.types.ts +34 -0
- package/src/components/layout/Resizable/index.ts +2 -0
- package/src/components/layout/ScrollArea/ScrollArea.md +122 -0
- package/src/components/layout/ScrollArea/ScrollArea.stories.tsx +651 -0
- package/src/components/layout/ScrollArea/ScrollArea.test.stories.tsx +619 -0
- package/src/components/layout/ScrollArea/ScrollArea.tsx +449 -0
- package/src/components/layout/ScrollArea/ScrollArea.types.ts +80 -0
- package/src/components/layout/ScrollArea/index.ts +7 -0
- package/src/components/layout/Separator/Separator.stories.tsx +563 -0
- package/src/components/layout/Separator/Separator.test.stories.tsx +527 -0
- package/src/components/layout/Separator/Separator.tsx +187 -0
- package/src/components/layout/Separator/Separator.types.ts +17 -0
- package/src/components/layout/Separator/index.ts +2 -0
- package/src/components/layout/SettingsLayout/SettingsLayout.md +139 -0
- package/src/components/layout/SettingsLayout/SettingsLayout.parts.tsx +357 -0
- package/src/components/layout/SettingsLayout/SettingsLayout.stories.tsx +194 -0
- package/src/components/layout/SettingsLayout/SettingsLayout.test.stories.tsx +175 -0
- package/src/components/layout/SettingsLayout/SettingsLayout.tsx +69 -0
- package/src/components/layout/SettingsLayout/SettingsLayout.types.ts +61 -0
- package/src/components/layout/SettingsLayout/index.ts +6 -0
- package/src/components/layout/Sidebar/Sidebar.md +367 -0
- package/src/components/layout/Sidebar/Sidebar.stories.tsx +611 -0
- package/src/components/layout/Sidebar/Sidebar.test.stories.tsx +1326 -0
- package/src/components/layout/Sidebar/Sidebar.tsx +131 -0
- package/src/components/layout/Sidebar/Sidebar.types.ts +30 -0
- package/src/components/layout/Sidebar/index.ts +7 -0
- package/src/components/layout/Skeleton/Skeleton.md +240 -0
- package/src/components/layout/Skeleton/Skeleton.stories.tsx +689 -0
- package/src/components/layout/Skeleton/Skeleton.test.stories.tsx +521 -0
- package/src/components/layout/Skeleton/Skeleton.tsx +166 -0
- package/src/components/layout/Skeleton/Skeleton.types.ts +19 -0
- package/src/components/layout/Skeleton/index.ts +2 -0
- package/src/components/layout/Spacer/Spacer.md +84 -0
- package/src/components/layout/Spacer/Spacer.stories.tsx +502 -0
- package/src/components/layout/Spacer/Spacer.test.stories.tsx +472 -0
- package/src/components/layout/Spacer/Spacer.tsx +68 -0
- package/src/components/layout/Spacer/Spacer.types.ts +12 -0
- package/src/components/layout/Spacer/index.ts +2 -0
- package/src/components/layout/TableFilter/TableFilter.md +55 -0
- package/src/components/layout/TableFilter/TableFilter.stories.tsx +82 -0
- package/src/components/layout/TableFilter/TableFilter.test.stories.tsx +87 -0
- package/src/components/layout/TableFilter/TableFilter.tsx +383 -0
- package/src/components/layout/TableFilter/TableFilter.types.ts +87 -0
- package/src/components/layout/TableFilter/TableFilterContext.tsx +29 -0
- package/src/components/layout/TableFilter/index.ts +15 -0
- package/src/components/layout/TableFilter/tests.md +37 -0
- package/src/components/layout/TableFilter/track.md +36 -0
- package/src/components/layout/index.ts +14 -0
- package/src/components/navigation/Breadcrumbs/Breadcrumbs.md +558 -0
- package/src/components/navigation/Breadcrumbs/Breadcrumbs.stories.tsx +640 -0
- package/src/components/navigation/Breadcrumbs/Breadcrumbs.test.stories.tsx +1007 -0
- package/src/components/navigation/Breadcrumbs/Breadcrumbs.tsx +516 -0
- package/src/components/navigation/Breadcrumbs/Breadcrumbs.types.ts +132 -0
- package/src/components/navigation/Breadcrumbs/index.ts +2 -0
- package/src/components/navigation/CommandPalette/CommandPalette.md +201 -0
- package/src/components/navigation/CommandPalette/CommandPalette.stories.tsx +384 -0
- package/src/components/navigation/CommandPalette/CommandPalette.test.stories.tsx +437 -0
- package/src/components/navigation/CommandPalette/CommandPalette.tsx +434 -0
- package/src/components/navigation/CommandPalette/CommandPalette.types.ts +25 -0
- package/src/components/navigation/CommandPalette/index.ts +2 -0
- package/src/components/navigation/ContextMenu/ContextMenu.md +535 -0
- package/src/components/navigation/ContextMenu/ContextMenu.stories.tsx +611 -0
- package/src/components/navigation/ContextMenu/ContextMenu.test.stories.tsx +850 -0
- package/src/components/navigation/ContextMenu/ContextMenu.tsx +254 -0
- package/src/components/navigation/ContextMenu/ContextMenu.types.ts +96 -0
- package/src/components/navigation/ContextMenu/index.ts +2 -0
- package/src/components/navigation/DropdownMenu/DropdownMenu.md +514 -0
- package/src/components/navigation/DropdownMenu/DropdownMenu.stories.tsx +580 -0
- package/src/components/navigation/DropdownMenu/DropdownMenu.test.stories.tsx +660 -0
- package/src/components/navigation/DropdownMenu/DropdownMenu.tsx +305 -0
- package/src/components/navigation/DropdownMenu/DropdownMenu.types.ts +116 -0
- package/src/components/navigation/DropdownMenu/index.ts +2 -0
- package/src/components/navigation/NavigationMenu/NavigationMenu.md +580 -0
- package/src/components/navigation/NavigationMenu/NavigationMenu.tsx +874 -0
- package/src/components/navigation/NavigationMenu/NavigationMenu.types.ts +135 -0
- package/src/components/navigation/NavigationMenu/index.ts +2 -0
- package/src/components/navigation/NavigationMenu/stories/NavigationMenu.stories.tsx +518 -0
- package/src/components/navigation/NavigationMenu/stories/NavigationMenu.test.stories.tsx +931 -0
- package/src/components/navigation/NavigationMenu/stories/NavigationMenuHorizontal.stories.tsx +503 -0
- package/src/components/navigation/NavigationMenu/stories/NavigationMenuVertical.stories.tsx +455 -0
- package/src/components/navigation/Pagination/Pagination.md +699 -0
- package/src/components/navigation/Pagination/Pagination.stories.tsx +604 -0
- package/src/components/navigation/Pagination/Pagination.test.stories.tsx +520 -0
- package/src/components/navigation/Pagination/Pagination.tsx +356 -0
- package/src/components/navigation/Pagination/Pagination.types.ts +129 -0
- package/src/components/navigation/Pagination/index.ts +2 -0
- package/src/components/navigation/Tabs/Tabs.md +774 -0
- package/src/components/navigation/Tabs/Tabs.stories.tsx +1006 -0
- package/src/components/navigation/Tabs/Tabs.test.stories.tsx +1225 -0
- package/src/components/navigation/Tabs/Tabs.tsx +433 -0
- package/src/components/navigation/Tabs/Tabs.types.ts +239 -0
- package/src/components/navigation/Tabs/index.ts +2 -0
- package/src/components/navigation/index.ts +7 -0
- package/src/components/typography/Blockquote/Blockquote.md +130 -0
- package/src/components/typography/Blockquote/Blockquote.stories.tsx +359 -0
- package/src/components/typography/Blockquote/Blockquote.test.stories.tsx +432 -0
- package/src/components/typography/Blockquote/Blockquote.tsx +166 -0
- package/src/components/typography/Blockquote/Blockquote.types.ts +11 -0
- package/src/components/typography/Blockquote/index.ts +2 -0
- package/src/components/typography/Code/Code.md +182 -0
- package/src/components/typography/Code/Code.stories.tsx +686 -0
- package/src/components/typography/Code/Code.test.stories.tsx +703 -0
- package/src/components/typography/Code/Code.tsx +228 -0
- package/src/components/typography/Code/Code.types.ts +12 -0
- package/src/components/typography/Code/index.ts +2 -0
- package/src/components/typography/Heading/Heading.md +143 -0
- package/src/components/typography/Heading/Heading.stories.tsx +451 -0
- package/src/components/typography/Heading/Heading.test.stories.tsx +830 -0
- package/src/components/typography/Heading/Heading.tsx +178 -0
- package/src/components/typography/Heading/Heading.types.ts +11 -0
- package/src/components/typography/Heading/index.ts +2 -0
- package/src/components/typography/Paragraph/Paragraph.md +80 -0
- package/src/components/typography/Paragraph/Paragraph.stories.tsx +280 -0
- package/src/components/typography/Paragraph/Paragraph.test.stories.tsx +238 -0
- package/src/components/typography/Paragraph/Paragraph.tsx +99 -0
- package/src/components/typography/Paragraph/Paragraph.types.ts +10 -0
- package/src/components/typography/Paragraph/index.ts +2 -0
- package/src/components/typography/Text/Text.md +129 -0
- package/src/components/typography/Text/Text.stories.tsx +359 -0
- package/src/components/typography/Text/Text.test.stories.tsx +762 -0
- package/src/components/typography/Text/Text.tsx +159 -0
- package/src/components/typography/Text/Text.types.ts +15 -0
- package/src/components/typography/Text/index.ts +2 -0
- package/src/components/typography/index.ts +5 -0
- package/src/components/utility/AnimatedIcon/AnimatedIcon.md +359 -0
- package/src/components/utility/AnimatedIcon/AnimatedIcon.stories.tsx +947 -0
- package/src/components/utility/AnimatedIcon/AnimatedIcon.test.stories.tsx +596 -0
- package/src/components/utility/AnimatedIcon/AnimatedIcon.tsx +595 -0
- package/src/components/utility/AnimatedIcon/AnimatedIcon.types.ts +98 -0
- package/src/components/utility/AnimatedIcon/index.ts +2 -0
- package/src/components/utility/AspectRatio/AspectRatio.md +200 -0
- package/src/components/utility/AspectRatio/AspectRatio.stories.tsx +414 -0
- package/src/components/utility/AspectRatio/AspectRatio.test.stories.tsx +859 -0
- package/src/components/utility/AspectRatio/AspectRatio.tsx +76 -0
- package/src/components/utility/AspectRatio/AspectRatio.types.ts +13 -0
- package/src/components/utility/AspectRatio/index.ts +2 -0
- package/src/components/utility/InfiniteScroll/InfiniteScroll.md +531 -0
- package/src/components/utility/InfiniteScroll/InfiniteScroll.stories.tsx +620 -0
- package/src/components/utility/InfiniteScroll/InfiniteScroll.test.stories.tsx +358 -0
- package/src/components/utility/InfiniteScroll/InfiniteScroll.tsx +204 -0
- package/src/components/utility/InfiniteScroll/InfiniteScroll.types.ts +39 -0
- package/src/components/utility/InfiniteScroll/index.ts +6 -0
- package/src/components/utility/Portal/Portal.button-container.example.tsx +99 -0
- package/src/components/utility/Portal/Portal.md +593 -0
- package/src/components/utility/Portal/Portal.stories.tsx +340 -0
- package/src/components/utility/Portal/Portal.test.stories.tsx +2086 -0
- package/src/components/utility/Portal/Portal.tsx +39 -0
- package/src/components/utility/Portal/Portal.types.ts +7 -0
- package/src/components/utility/Portal/index.ts +2 -0
- package/src/components/utility/Transition/Transition.md +684 -0
- package/src/components/utility/Transition/Transition.stories.tsx +493 -0
- package/src/components/utility/Transition/Transition.test.stories.tsx +854 -0
- package/src/components/utility/Transition/Transition.tsx +140 -0
- package/src/components/utility/Transition/Transition.types.ts +14 -0
- package/src/components/utility/Transition/index.ts +6 -0
- package/src/components/utility/VirtualList/VirtualList.md +520 -0
- package/src/components/utility/VirtualList/VirtualList.stories.tsx +1073 -0
- package/src/components/utility/VirtualList/VirtualList.test.stories.tsx +1074 -0
- package/src/components/utility/VirtualList/VirtualList.tsx +369 -0
- package/src/components/utility/VirtualList/VirtualList.types.ts +56 -0
- package/src/components/utility/VirtualList/index.ts +7 -0
- package/src/components/utility/WorkflowStep/WorkflowStep.md +187 -0
- package/src/components/utility/WorkflowStep/WorkflowStep.stories.tsx +433 -0
- package/src/components/utility/WorkflowStep/WorkflowStep.test.stories.tsx +364 -0
- package/src/components/utility/WorkflowStep/WorkflowStep.tsx +506 -0
- package/src/components/utility/WorkflowStep/WorkflowStep.types.ts +133 -0
- package/src/components/utility/WorkflowStep/index.ts +13 -0
- package/src/components/utility/index.ts +7 -0
- package/src/index.ts +17 -0
- package/src/mui/AppBar.ts +2 -0
- package/src/mui/Box.ts +2 -0
- package/src/mui/CssBaseline.ts +2 -0
- package/src/mui/FormControl.ts +2 -0
- package/src/mui/FormControlLabel.ts +2 -0
- package/src/mui/Grid2.ts +2 -0
- package/src/mui/InputLabel.ts +2 -0
- package/src/mui/List.ts +2 -0
- package/src/mui/ListItem.ts +2 -0
- package/src/mui/ListItemButton.ts +2 -0
- package/src/mui/ListItemText.ts +2 -0
- package/src/mui/Stack.ts +2 -0
- package/src/mui/SvgIcon.ts +2 -0
- package/src/mui/Toolbar.ts +2 -0
- package/src/mui/styles.ts +2 -0
- package/src/mui/useMediaQuery.ts +1 -0
- package/src/social-login-button.tsx +199 -0
- package/src/user-avatar.tsx +102 -0
- package/src/utils/cn.ts +9 -0
- package/src/utils/index.ts +1 -0
|
@@ -0,0 +1,565 @@
|
|
|
1
|
+
# Switch Component
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The Switch component is a highly customizable toggle control that allows users to switch between checked and unchecked states. It provides extensive visual styling options, animations, and full accessibility support while maintaining a clean, modern interface.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **Multiple Variants**: default, iOS, Android, Material Design, and label styles
|
|
10
|
+
- **Color Themes**: primary, secondary, success, warning, danger, neutral
|
|
11
|
+
- **Size Options**: xs, sm, md, lg, xl
|
|
12
|
+
- **Special Effects**: glow, glass morphism, gradient, pulse, ripple animations
|
|
13
|
+
- **Loading States**: Built-in loading spinner with disabled interaction
|
|
14
|
+
- **Icon Support**: Custom on/off icons with smooth transitions
|
|
15
|
+
- **Label Text**: On/off text display within the switch track
|
|
16
|
+
- **Accessibility**: Full ARIA support, keyboard navigation, screen reader compatible
|
|
17
|
+
- **Label Positioning**: start, end, top, bottom positioning options
|
|
18
|
+
- **Error States**: Error styling with helper text support
|
|
19
|
+
|
|
20
|
+
## Usage
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
import { Switch } from '@procurement/ui';
|
|
24
|
+
|
|
25
|
+
// Basic usage
|
|
26
|
+
<Switch checked={isChecked} onChange={handleChange} />
|
|
27
|
+
|
|
28
|
+
// With label
|
|
29
|
+
<Switch
|
|
30
|
+
label="Enable notifications"
|
|
31
|
+
checked={isChecked}
|
|
32
|
+
onChange={handleChange}
|
|
33
|
+
/>
|
|
34
|
+
|
|
35
|
+
// With description and helper text
|
|
36
|
+
<Switch
|
|
37
|
+
label="Dark mode"
|
|
38
|
+
description="Switch to dark theme"
|
|
39
|
+
helperText="This setting will apply to all pages"
|
|
40
|
+
checked={isDarkMode}
|
|
41
|
+
onChange={toggleDarkMode}
|
|
42
|
+
/>
|
|
43
|
+
|
|
44
|
+
// iOS style with icons
|
|
45
|
+
<Switch
|
|
46
|
+
variant="ios"
|
|
47
|
+
onIcon={<CheckIcon />}
|
|
48
|
+
offIcon={<CloseIcon />}
|
|
49
|
+
checked={isEnabled}
|
|
50
|
+
onChange={handleToggle}
|
|
51
|
+
/>
|
|
52
|
+
|
|
53
|
+
// With special effects
|
|
54
|
+
<Switch
|
|
55
|
+
variant="gradient"
|
|
56
|
+
glow
|
|
57
|
+
pulse
|
|
58
|
+
label="Premium feature"
|
|
59
|
+
checked={isPremium}
|
|
60
|
+
onChange={togglePremium}
|
|
61
|
+
/>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Props
|
|
65
|
+
|
|
66
|
+
| Prop | Type | Default | Description |
|
|
67
|
+
| --------------- | ----------------------------------------------------------------------------- | ----------- | ------------------------------------------------ |
|
|
68
|
+
| `variant` | `'default' \| 'ios' \| 'android' \| 'label' \| 'material'` | `'default'` | Visual style variant |
|
|
69
|
+
| `color` | `'primary' \| 'secondary' \| 'success' \| 'warning' \| 'danger' \| 'neutral'` | `'primary'` | Color theme |
|
|
70
|
+
| `size` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `'md'` | Switch size |
|
|
71
|
+
| `label` | `string` | - | Label text displayed next to switch |
|
|
72
|
+
| `description` | `string` | - | Description text below the label |
|
|
73
|
+
| `glow` | `boolean` | `false` | Adds glow animation effect when checked |
|
|
74
|
+
| `glass` | `boolean` | `false` | Applies glass morphism effect |
|
|
75
|
+
| `gradient` | `boolean` | `false` | Adds gradient background effect |
|
|
76
|
+
| `labelPosition` | `'start' \| 'end' \| 'top' \| 'bottom'` | `'end'` | Position of the label relative to switch |
|
|
77
|
+
| `onIcon` | `ReactNode` | - | Icon to display when switch is on |
|
|
78
|
+
| `offIcon` | `ReactNode` | - | Icon to display when switch is off |
|
|
79
|
+
| `onText` | `string` | - | Text to display in track when switch is on |
|
|
80
|
+
| `offText` | `string` | - | Text to display in track when switch is off |
|
|
81
|
+
| `error` | `boolean` | `false` | Error state flag |
|
|
82
|
+
| `helperText` | `string` | - | Helper or error text displayed below |
|
|
83
|
+
| `trackWidth` | `number` | - | Custom width for the switch track |
|
|
84
|
+
| `trackHeight` | `number` | - | Custom height for the switch track |
|
|
85
|
+
| `checked` | `boolean` | - | Checked state (controlled component) |
|
|
86
|
+
| `onChange` | `(event, checked) => void` | - | Change event handler |
|
|
87
|
+
| `animated` | `boolean` | `true` | Enable/disable animations |
|
|
88
|
+
| `loading` | `boolean` | `false` | Shows loading spinner and disables switch |
|
|
89
|
+
| `ripple` | `boolean` | `false` | Enable ripple effect on interaction |
|
|
90
|
+
| `pulse` | `boolean` | `false` | Enable pulse animation on thumb |
|
|
91
|
+
| `disabled` | `boolean` | `false` | Disables switch interaction |
|
|
92
|
+
| `dataTestId` | `string` | - | Custom test ID for testing |
|
|
93
|
+
| `onClick` | `(event) => void` | - | Click event handler |
|
|
94
|
+
| `onFocus` | `(event) => void` | - | Focus event handler |
|
|
95
|
+
| `onBlur` | `(event) => void` | - | Blur event handler |
|
|
96
|
+
|
|
97
|
+
## Variants
|
|
98
|
+
|
|
99
|
+
### Default
|
|
100
|
+
|
|
101
|
+
Standard Material-UI switch styling with smooth transitions.
|
|
102
|
+
|
|
103
|
+
```tsx
|
|
104
|
+
<Switch label="Default switch" checked={checked} onChange={handleChange} />
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### iOS
|
|
108
|
+
|
|
109
|
+
Apple iOS-style switch with rounded appearance and subtle shadows.
|
|
110
|
+
|
|
111
|
+
```tsx
|
|
112
|
+
<Switch variant="ios" label="iOS style" checked={checked} onChange={handleChange} />
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Android
|
|
116
|
+
|
|
117
|
+
Google Material Design switch with squared corners and bold shadows.
|
|
118
|
+
|
|
119
|
+
```tsx
|
|
120
|
+
<Switch variant="android" label="Android style" checked={checked} onChange={handleChange} />
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Label
|
|
124
|
+
|
|
125
|
+
Switch with text labels (on/off) displayed within the track.
|
|
126
|
+
|
|
127
|
+
```tsx
|
|
128
|
+
<Switch
|
|
129
|
+
variant="label"
|
|
130
|
+
onText="ON"
|
|
131
|
+
offText="OFF"
|
|
132
|
+
checked={checked}
|
|
133
|
+
onChange={handleChange}
|
|
134
|
+
/>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### Material
|
|
138
|
+
|
|
139
|
+
Material Design 3 switch with modern rounded rectangular thumb.
|
|
140
|
+
|
|
141
|
+
```tsx
|
|
142
|
+
<Switch variant="material" label="Material Design" checked={checked} onChange={handleChange} />
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Color Themes
|
|
146
|
+
|
|
147
|
+
All color themes integrate with your application's theme:
|
|
148
|
+
|
|
149
|
+
```tsx
|
|
150
|
+
<Switch color="primary" label="Primary" />
|
|
151
|
+
<Switch color="secondary" label="Secondary" />
|
|
152
|
+
<Switch color="success" label="Success" />
|
|
153
|
+
<Switch color="warning" label="Warning" />
|
|
154
|
+
<Switch color="danger" label="Danger" />
|
|
155
|
+
<Switch color="neutral" label="Neutral" />
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Sizes
|
|
159
|
+
|
|
160
|
+
Available sizes from extra small to extra large:
|
|
161
|
+
|
|
162
|
+
```tsx
|
|
163
|
+
<Switch size="xs" label="Extra Small" />
|
|
164
|
+
<Switch size="sm" label="Small" />
|
|
165
|
+
<Switch size="md" label="Medium" />
|
|
166
|
+
<Switch size="lg" label="Large" />
|
|
167
|
+
<Switch size="xl" label="Extra Large" />
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Special Effects
|
|
171
|
+
|
|
172
|
+
### Glow Effect
|
|
173
|
+
|
|
174
|
+
Adds an animated glow effect when the switch is checked:
|
|
175
|
+
|
|
176
|
+
```tsx
|
|
177
|
+
<Switch glow label="Glow effect" checked={checked} onChange={handleChange} />
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Glass Morphism
|
|
181
|
+
|
|
182
|
+
Applies a modern glass morphism effect with blur and transparency:
|
|
183
|
+
|
|
184
|
+
```tsx
|
|
185
|
+
<Switch glass label="Glass effect" checked={checked} onChange={handleChange} />
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### Gradient
|
|
189
|
+
|
|
190
|
+
Adds gradient background with shimmer animation:
|
|
191
|
+
|
|
192
|
+
```tsx
|
|
193
|
+
<Switch gradient label="Gradient effect" checked={checked} onChange={handleChange} />
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Pulse Animation
|
|
197
|
+
|
|
198
|
+
Adds a pulse animation to the switch thumb:
|
|
199
|
+
|
|
200
|
+
```tsx
|
|
201
|
+
<Switch pulse label="Pulse effect" checked={checked} onChange={handleChange} />
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Ripple Effect
|
|
205
|
+
|
|
206
|
+
Adds a ripple animation on hover:
|
|
207
|
+
|
|
208
|
+
```tsx
|
|
209
|
+
<Switch ripple label="Ripple effect" checked={checked} onChange={handleChange} />
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Loading State
|
|
213
|
+
|
|
214
|
+
Show a loading spinner and disable interaction:
|
|
215
|
+
|
|
216
|
+
```tsx
|
|
217
|
+
<Switch
|
|
218
|
+
loading
|
|
219
|
+
label="Saving..."
|
|
220
|
+
checked={checked}
|
|
221
|
+
onChange={handleChange}
|
|
222
|
+
/>
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
## Error State
|
|
226
|
+
|
|
227
|
+
Display error styling with helper text:
|
|
228
|
+
|
|
229
|
+
```tsx
|
|
230
|
+
<Switch
|
|
231
|
+
error
|
|
232
|
+
label="Enable feature"
|
|
233
|
+
helperText="This field is required"
|
|
234
|
+
checked={checked}
|
|
235
|
+
onChange={handleChange}
|
|
236
|
+
/>
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## Label Positioning
|
|
240
|
+
|
|
241
|
+
Control the position of the label relative to the switch:
|
|
242
|
+
|
|
243
|
+
```tsx
|
|
244
|
+
// Label at the end (default)
|
|
245
|
+
<Switch labelPosition="end" label="Label at end" />
|
|
246
|
+
|
|
247
|
+
// Label at the start
|
|
248
|
+
<Switch labelPosition="start" label="Label at start" />
|
|
249
|
+
|
|
250
|
+
// Label on top
|
|
251
|
+
<Switch labelPosition="top" label="Label on top" />
|
|
252
|
+
|
|
253
|
+
// Label at bottom
|
|
254
|
+
<Switch labelPosition="bottom" label="Label at bottom" />
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
## Icons
|
|
258
|
+
|
|
259
|
+
Add custom icons that transition based on the switch state:
|
|
260
|
+
|
|
261
|
+
```tsx
|
|
262
|
+
import { Check, Close } from '@mui/icons-material';
|
|
263
|
+
|
|
264
|
+
<Switch
|
|
265
|
+
onIcon={<Check />}
|
|
266
|
+
offIcon={<Close />}
|
|
267
|
+
label="With icons"
|
|
268
|
+
checked={checked}
|
|
269
|
+
onChange={handleChange}
|
|
270
|
+
/>
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
## Accessibility
|
|
274
|
+
|
|
275
|
+
The Switch component follows WCAG 2.1 AA guidelines:
|
|
276
|
+
|
|
277
|
+
- **Keyboard Navigation**: Supports Tab and Space key activation
|
|
278
|
+
- **Focus Management**: Clear focus indicators with visible outline
|
|
279
|
+
- **ARIA Attributes**: Supports aria-label, aria-describedby, role="switch"
|
|
280
|
+
- **Screen Reader**: Properly announces switch state (on/off)
|
|
281
|
+
- **Disabled State**: Communicates disabled state to assistive technologies
|
|
282
|
+
- **Error State**: Associates error messages with the switch
|
|
283
|
+
- **Helper Text**: Properly linked via aria-describedby
|
|
284
|
+
|
|
285
|
+
### Keyboard Shortcuts
|
|
286
|
+
|
|
287
|
+
- `Tab`: Navigate to switch
|
|
288
|
+
- `Space`: Toggle switch state
|
|
289
|
+
- `Shift + Tab`: Navigate to previous element
|
|
290
|
+
|
|
291
|
+
## Best Practices
|
|
292
|
+
|
|
293
|
+
1. **Use meaningful labels**: Provide clear, concise labels that describe what the switch controls
|
|
294
|
+
|
|
295
|
+
2. **Consider label position**: Use `labelPosition="start"` for long labels or descriptions
|
|
296
|
+
|
|
297
|
+
3. **Provide feedback**: Use loading states for async operations
|
|
298
|
+
|
|
299
|
+
4. **Use semantic colors**: Match colors to the action intent (success for enabling features, danger for destructive toggles)
|
|
300
|
+
|
|
301
|
+
5. **Add helper text**: Provide context about what the switch does
|
|
302
|
+
|
|
303
|
+
6. **Avoid nested switches**: Don't place switches inside clickable containers
|
|
304
|
+
|
|
305
|
+
7. **Test accessibility**: Ensure keyboard navigation and screen reader support
|
|
306
|
+
|
|
307
|
+
8. **Consider mobile**: Use appropriate sizes for touch targets (minimum 44x44px)
|
|
308
|
+
|
|
309
|
+
## Examples
|
|
310
|
+
|
|
311
|
+
### Settings Toggle
|
|
312
|
+
|
|
313
|
+
```tsx
|
|
314
|
+
<Switch
|
|
315
|
+
label="Email notifications"
|
|
316
|
+
description="Receive updates via email"
|
|
317
|
+
checked={emailEnabled}
|
|
318
|
+
onChange={handleEmailToggle}
|
|
319
|
+
/>
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Feature Flag
|
|
323
|
+
|
|
324
|
+
```tsx
|
|
325
|
+
<Switch
|
|
326
|
+
variant="ios"
|
|
327
|
+
color="success"
|
|
328
|
+
label="Beta features"
|
|
329
|
+
helperText="Enable experimental features (may be unstable)"
|
|
330
|
+
checked={betaEnabled}
|
|
331
|
+
onChange={toggleBeta}
|
|
332
|
+
/>
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
### Dark Mode Toggle
|
|
336
|
+
|
|
337
|
+
```tsx
|
|
338
|
+
<Switch
|
|
339
|
+
variant="material"
|
|
340
|
+
onIcon={<DarkModeIcon />}
|
|
341
|
+
offIcon={<LightModeIcon />}
|
|
342
|
+
label="Dark mode"
|
|
343
|
+
checked={isDarkMode}
|
|
344
|
+
onChange={toggleDarkMode}
|
|
345
|
+
/>
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### Premium Feature
|
|
349
|
+
|
|
350
|
+
```tsx
|
|
351
|
+
<Switch
|
|
352
|
+
variant="gradient"
|
|
353
|
+
glow
|
|
354
|
+
color="warning"
|
|
355
|
+
label="Premium mode"
|
|
356
|
+
description="Unlock premium features"
|
|
357
|
+
checked={isPremium}
|
|
358
|
+
onChange={togglePremium}
|
|
359
|
+
disabled={!hasSubscription}
|
|
360
|
+
helperText={!hasSubscription ? "Requires active subscription" : undefined}
|
|
361
|
+
/>
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
### Async Toggle
|
|
365
|
+
|
|
366
|
+
```tsx
|
|
367
|
+
<Switch
|
|
368
|
+
label="Auto-save"
|
|
369
|
+
loading={isSaving}
|
|
370
|
+
checked={autoSave}
|
|
371
|
+
onChange={handleAutoSaveToggle}
|
|
372
|
+
/>
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
## Theming
|
|
376
|
+
|
|
377
|
+
The Switch component integrates with MUI's theme system:
|
|
378
|
+
|
|
379
|
+
```tsx
|
|
380
|
+
const theme = createTheme({
|
|
381
|
+
palette: {
|
|
382
|
+
primary: {
|
|
383
|
+
main: '#1976d2',
|
|
384
|
+
},
|
|
385
|
+
success: {
|
|
386
|
+
main: '#4caf50',
|
|
387
|
+
},
|
|
388
|
+
},
|
|
389
|
+
});
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
## Performance
|
|
393
|
+
|
|
394
|
+
- Component uses React.forwardRef for ref forwarding
|
|
395
|
+
- Styled with MUI's styled API for optimal performance
|
|
396
|
+
- Animation effects use CSS keyframes for smooth 60fps animations
|
|
397
|
+
- Conditional rendering of icons to minimize DOM nodes
|
|
398
|
+
- Memoized color calculations to reduce re-renders
|
|
399
|
+
|
|
400
|
+
## Testing
|
|
401
|
+
|
|
402
|
+
### Test IDs
|
|
403
|
+
|
|
404
|
+
The Switch component includes `data-testid` attributes for reliable testing:
|
|
405
|
+
|
|
406
|
+
| Test ID | Element | Description |
|
|
407
|
+
| --------------------------- | -------------- | ------------------------------------------------------- |
|
|
408
|
+
| `switch` | Switch input | Main switch input element (default) |
|
|
409
|
+
| `{dataTestId}` | Switch input | Switch input with custom testId |
|
|
410
|
+
| `switch-container` | Container Box | Wrapper containing switch, label, and helper text |
|
|
411
|
+
| `{dataTestId}-container` | Container Box | Container with custom testId |
|
|
412
|
+
| `switch-label` | Typography | Label text element (when label is provided) |
|
|
413
|
+
| `{dataTestId}-label` | Typography | Label with custom testId |
|
|
414
|
+
| `switch-helper` | FormHelperText | Helper text element (when helperText is provided) |
|
|
415
|
+
| `{dataTestId}-helper` | FormHelperText | Helper text with custom testId |
|
|
416
|
+
|
|
417
|
+
### Testing Best Practices
|
|
418
|
+
|
|
419
|
+
**Wait for Switch to Render:**
|
|
420
|
+
```typescript
|
|
421
|
+
const switchElement = await canvas.findByTestId('switch');
|
|
422
|
+
expect(switchElement).toBeInTheDocument();
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
**Test with Custom TestId:**
|
|
426
|
+
```typescript
|
|
427
|
+
<Switch dataTestId="dark-mode-switch" label="Dark Mode" />
|
|
428
|
+
|
|
429
|
+
const switchElement = await canvas.findByTestId('dark-mode-switch');
|
|
430
|
+
const container = await canvas.findByTestId('dark-mode-switch-container');
|
|
431
|
+
const label = await canvas.findByTestId('dark-mode-switch-label');
|
|
432
|
+
expect(switchElement).toBeInTheDocument();
|
|
433
|
+
expect(container).toBeInTheDocument();
|
|
434
|
+
expect(label).toHaveTextContent('Dark Mode');
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
**Test Interactions:**
|
|
438
|
+
```typescript
|
|
439
|
+
const switchElement = await canvas.findByTestId('switch');
|
|
440
|
+
await userEvent.click(switchElement);
|
|
441
|
+
expect(onChange).toHaveBeenCalledWith(expect.anything(), true);
|
|
442
|
+
|
|
443
|
+
// Toggle again
|
|
444
|
+
await userEvent.click(switchElement);
|
|
445
|
+
expect(onChange).toHaveBeenCalledWith(expect.anything(), false);
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
**Test Keyboard Navigation:**
|
|
449
|
+
```typescript
|
|
450
|
+
const switchElement = await canvas.findByTestId('switch');
|
|
451
|
+
switchElement.focus();
|
|
452
|
+
await userEvent.keyboard(' '); // Space key
|
|
453
|
+
expect(onChange).toHaveBeenCalled();
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
**Test States:**
|
|
457
|
+
```typescript
|
|
458
|
+
// Loading state
|
|
459
|
+
const loadingSwitch = await canvas.findByTestId('switch');
|
|
460
|
+
expect(loadingSwitch).toBeDisabled();
|
|
461
|
+
const loadingIndicator = container.querySelector('[class*="spin"]');
|
|
462
|
+
expect(loadingIndicator).toBeInTheDocument();
|
|
463
|
+
|
|
464
|
+
// Error state with helper text
|
|
465
|
+
const helperText = await canvas.findByTestId('switch-helper');
|
|
466
|
+
expect(helperText).toHaveTextContent('Error message');
|
|
467
|
+
expect(helperText).toHaveClass('Mui-error');
|
|
468
|
+
|
|
469
|
+
// Disabled state
|
|
470
|
+
const disabledSwitch = await canvas.findByTestId('switch');
|
|
471
|
+
expect(disabledSwitch).toBeDisabled();
|
|
472
|
+
expect(disabledSwitch).toHaveAttribute('aria-disabled', 'true');
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
**Test Checked State:**
|
|
476
|
+
```typescript
|
|
477
|
+
// Checked
|
|
478
|
+
<Switch dataTestId="test-switch" checked={true} />
|
|
479
|
+
const switchElement = await canvas.findByTestId('test-switch');
|
|
480
|
+
expect(switchElement).toBeChecked();
|
|
481
|
+
expect(switchElement).toHaveAttribute('aria-checked', 'true');
|
|
482
|
+
|
|
483
|
+
// Unchecked
|
|
484
|
+
<Switch dataTestId="test-switch" checked={false} />
|
|
485
|
+
expect(switchElement).not.toBeChecked();
|
|
486
|
+
expect(switchElement).toHaveAttribute('aria-checked', 'false');
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
**Test Accessibility:**
|
|
490
|
+
```typescript
|
|
491
|
+
const switchElement = await canvas.findByRole('switch');
|
|
492
|
+
expect(switchElement).toHaveAttribute('aria-label');
|
|
493
|
+
|
|
494
|
+
// With label
|
|
495
|
+
const switchWithLabel = await canvas.findByRole('switch', { name: /enable notifications/i });
|
|
496
|
+
expect(switchWithLabel).toBeInTheDocument();
|
|
497
|
+
|
|
498
|
+
// With helper text
|
|
499
|
+
const helperTextId = switchElement.getAttribute('aria-describedby');
|
|
500
|
+
expect(helperTextId).toBeTruthy();
|
|
501
|
+
const helperText = document.getElementById(helperTextId);
|
|
502
|
+
expect(helperText).toHaveTextContent('Helper text message');
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
**Test Variants:**
|
|
506
|
+
```typescript
|
|
507
|
+
// iOS variant
|
|
508
|
+
<Switch dataTestId="ios-switch" variant="ios" />
|
|
509
|
+
const iosSwitch = await canvas.findByTestId('ios-switch');
|
|
510
|
+
expect(iosSwitch.closest('.MuiSwitch-root')).toBeInTheDocument();
|
|
511
|
+
|
|
512
|
+
// With icons
|
|
513
|
+
<Switch
|
|
514
|
+
dataTestId="icon-switch"
|
|
515
|
+
onIcon={<CheckIcon />}
|
|
516
|
+
offIcon={<CloseIcon />}
|
|
517
|
+
checked={true}
|
|
518
|
+
/>
|
|
519
|
+
const iconContainer = container.querySelector('[role="img"]');
|
|
520
|
+
expect(iconContainer).toBeInTheDocument();
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
**Test Special Effects:**
|
|
524
|
+
```typescript
|
|
525
|
+
// Glow effect
|
|
526
|
+
<Switch dataTestId="glow-switch" glow checked={true} />
|
|
527
|
+
const glowSwitch = await canvas.findByTestId('glow-switch');
|
|
528
|
+
const track = glowSwitch.nextElementSibling;
|
|
529
|
+
expect(track).toHaveStyle({ animation: expect.stringContaining('glow') });
|
|
530
|
+
|
|
531
|
+
// Gradient effect
|
|
532
|
+
<Switch dataTestId="gradient-switch" gradient checked={true} />
|
|
533
|
+
const gradientTrack = gradientSwitch.nextElementSibling;
|
|
534
|
+
expect(gradientTrack).toHaveStyle({ background: expect.stringContaining('gradient') });
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
### Common Test Scenarios
|
|
538
|
+
|
|
539
|
+
1. **Basic Rendering** - Verify switch renders correctly
|
|
540
|
+
2. **Toggle State** - Test switching between checked and unchecked
|
|
541
|
+
3. **Controlled Component** - Verify checked prop controls state
|
|
542
|
+
4. **Change Handler** - Test onChange callback with correct arguments
|
|
543
|
+
5. **Loading State** - Verify loading spinner and disabled interaction
|
|
544
|
+
6. **Error State** - Test error styling and helper text
|
|
545
|
+
7. **Disabled State** - Verify switch cannot be toggled when disabled
|
|
546
|
+
8. **Variants** - Test all visual variants (default, iOS, Android, material, label)
|
|
547
|
+
9. **Sizes** - Test all size options (xs, sm, md, lg, xl)
|
|
548
|
+
10. **Colors** - Test all color themes
|
|
549
|
+
11. **Label Positioning** - Test all label positions (start, end, top, bottom)
|
|
550
|
+
12. **Icons** - Test on/off icon rendering and transitions
|
|
551
|
+
13. **Text Labels** - Test on/off text in track
|
|
552
|
+
14. **Special Effects** - Test glow, glass, gradient, pulse, ripple
|
|
553
|
+
15. **Keyboard Navigation** - Test Space key toggle
|
|
554
|
+
16. **Focus Management** - Test focus and blur events
|
|
555
|
+
17. **Accessibility** - Verify ARIA attributes and screen reader support
|
|
556
|
+
18. **Helper Text** - Test helper text display and association
|
|
557
|
+
19. **Custom Dimensions** - Test trackWidth and trackHeight props
|
|
558
|
+
20. **Animations** - Test animated prop and animation effects
|
|
559
|
+
|
|
560
|
+
## Related Components
|
|
561
|
+
|
|
562
|
+
- Checkbox - For multi-select scenarios
|
|
563
|
+
- Radio - For exclusive selection from a group
|
|
564
|
+
- ToggleButton - For visual toggle with button appearance
|
|
565
|
+
- FormControlLabel - For wrapping form controls with labels
|