@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,200 @@
|
|
|
1
|
+
# Checkbox Component
|
|
2
|
+
|
|
3
|
+
A flexible and customizable checkbox component with comprehensive styling options and accessibility features.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Multiple Variants**: Default, rounded, and toggle styles
|
|
8
|
+
- **Visual Effects**: Glow and pulse animations
|
|
9
|
+
- **Loading States**: Built-in loading spinner support
|
|
10
|
+
- **Error States**: Error styling with helper text
|
|
11
|
+
- **Customizable**: Ripple effect control and custom styling
|
|
12
|
+
- **Accessible**: Full keyboard navigation and screen reader support
|
|
13
|
+
|
|
14
|
+
## Usage
|
|
15
|
+
|
|
16
|
+
```tsx
|
|
17
|
+
import { Checkbox } from '@/components/form/Checkbox';
|
|
18
|
+
|
|
19
|
+
// Basic checkbox
|
|
20
|
+
<Checkbox label="Accept terms" />
|
|
21
|
+
|
|
22
|
+
// With error state
|
|
23
|
+
<Checkbox
|
|
24
|
+
label="Required field"
|
|
25
|
+
error
|
|
26
|
+
helperText="This field is required"
|
|
27
|
+
/>
|
|
28
|
+
|
|
29
|
+
// With loading state
|
|
30
|
+
<Checkbox
|
|
31
|
+
label="Processing"
|
|
32
|
+
loading
|
|
33
|
+
/>
|
|
34
|
+
|
|
35
|
+
// Rounded variant with glow effect
|
|
36
|
+
<Checkbox
|
|
37
|
+
label="Special option"
|
|
38
|
+
variant="rounded"
|
|
39
|
+
glow
|
|
40
|
+
/>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Props
|
|
44
|
+
|
|
45
|
+
### CheckboxProps
|
|
46
|
+
|
|
47
|
+
| Prop | Type | Default | Description |
|
|
48
|
+
|------|------|---------|-------------|
|
|
49
|
+
| variant | `'default' \| 'rounded' \| 'toggle'` | `'default'` | Visual variant style |
|
|
50
|
+
| label | `string` | - | Label text displayed next to checkbox |
|
|
51
|
+
| error | `boolean` | `false` | Error state flag |
|
|
52
|
+
| helperText | `string` | - | Helper or error text displayed below |
|
|
53
|
+
| loading | `boolean` | `false` | Shows loading spinner and disables checkbox |
|
|
54
|
+
| ripple | `boolean` | `true` | Enable/disable ripple effect on click |
|
|
55
|
+
| glow | `boolean` | `false` | Enable glow animation |
|
|
56
|
+
| pulse | `boolean` | `false` | Enable pulse animation |
|
|
57
|
+
| disabled | `boolean` | `false` | Disable the checkbox |
|
|
58
|
+
| data-testid | `string` | - | Custom test ID for testing |
|
|
59
|
+
|
|
60
|
+
Plus all standard MUI Checkbox props (checked, onChange, indeterminate, etc.)
|
|
61
|
+
|
|
62
|
+
## Variants
|
|
63
|
+
|
|
64
|
+
### Default
|
|
65
|
+
Standard Material-UI checkbox styling with theme colors.
|
|
66
|
+
|
|
67
|
+
### Rounded
|
|
68
|
+
Checkbox with circular icon styling.
|
|
69
|
+
|
|
70
|
+
### Toggle
|
|
71
|
+
Checkbox with rounded rectangular appearance and scaled size.
|
|
72
|
+
|
|
73
|
+
## Accessibility
|
|
74
|
+
|
|
75
|
+
- Full keyboard navigation support (Space to toggle)
|
|
76
|
+
- Screen reader compatible with proper ARIA attributes
|
|
77
|
+
- Focus management with visual focus indicators
|
|
78
|
+
- Support for disabled and indeterminate states
|
|
79
|
+
- Helper text properly associated with checkbox
|
|
80
|
+
|
|
81
|
+
## Examples
|
|
82
|
+
|
|
83
|
+
### Basic Checkbox
|
|
84
|
+
|
|
85
|
+
```tsx
|
|
86
|
+
<Checkbox label="I agree to the terms" />
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### With Helper Text
|
|
90
|
+
|
|
91
|
+
```tsx
|
|
92
|
+
<Checkbox
|
|
93
|
+
label="Subscribe to newsletter"
|
|
94
|
+
helperText="We'll send you updates monthly"
|
|
95
|
+
/>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Error State
|
|
99
|
+
|
|
100
|
+
```tsx
|
|
101
|
+
<Checkbox
|
|
102
|
+
label="Required consent"
|
|
103
|
+
error
|
|
104
|
+
helperText="You must accept to continue"
|
|
105
|
+
/>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Loading State
|
|
109
|
+
|
|
110
|
+
```tsx
|
|
111
|
+
<Checkbox
|
|
112
|
+
label="Saving preferences..."
|
|
113
|
+
loading
|
|
114
|
+
checked
|
|
115
|
+
/>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Rounded with Glow Effect
|
|
119
|
+
|
|
120
|
+
```tsx
|
|
121
|
+
<Checkbox
|
|
122
|
+
variant="rounded"
|
|
123
|
+
label="Premium feature"
|
|
124
|
+
glow
|
|
125
|
+
/>
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Testing
|
|
129
|
+
|
|
130
|
+
### Test IDs
|
|
131
|
+
|
|
132
|
+
The Checkbox component includes `data-testid` attributes for reliable testing:
|
|
133
|
+
|
|
134
|
+
| Test ID | Element | Description |
|
|
135
|
+
|---------|---------|-------------|
|
|
136
|
+
| `checkbox` | Main checkbox | Root checkbox input element (default) |
|
|
137
|
+
| `{dataTestId}` | Main checkbox | Root checkbox input with custom testId |
|
|
138
|
+
| `checkbox-container` | Container div | Wrapper containing checkbox, label, and helper text (default) |
|
|
139
|
+
| `{dataTestId}-container` | Container div | Wrapper with custom testId |
|
|
140
|
+
| `checkbox-helper` | Helper text | FormHelperText element (default) |
|
|
141
|
+
| `{dataTestId}-helper` | Helper text | Helper text with custom testId |
|
|
142
|
+
|
|
143
|
+
### Testing Best Practices
|
|
144
|
+
|
|
145
|
+
**Wait for Checkbox to Render:**
|
|
146
|
+
```typescript
|
|
147
|
+
const checkbox = await canvas.findByTestId('checkbox');
|
|
148
|
+
expect(checkbox).toBeInTheDocument();
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Test with Custom TestId:**
|
|
152
|
+
```typescript
|
|
153
|
+
<Checkbox data-testid="terms-checkbox" label="Accept Terms" />
|
|
154
|
+
|
|
155
|
+
const checkbox = await canvas.findByTestId('terms-checkbox');
|
|
156
|
+
const container = await canvas.findByTestId('terms-checkbox-container');
|
|
157
|
+
expect(checkbox).toBeInTheDocument();
|
|
158
|
+
expect(container).toBeInTheDocument();
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**Test Interactions:**
|
|
162
|
+
```typescript
|
|
163
|
+
const checkbox = await canvas.findByTestId('checkbox');
|
|
164
|
+
await userEvent.click(checkbox);
|
|
165
|
+
expect(onChange).toHaveBeenCalled();
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Test States:**
|
|
169
|
+
```typescript
|
|
170
|
+
// Loading state
|
|
171
|
+
const loadingCheckbox = await canvas.findByTestId('checkbox');
|
|
172
|
+
expect(loadingCheckbox).toBeDisabled();
|
|
173
|
+
|
|
174
|
+
// Error state with helper text
|
|
175
|
+
const helperText = await canvas.findByTestId('checkbox-helper');
|
|
176
|
+
expect(helperText).toHaveTextContent('Error message');
|
|
177
|
+
expect(helperText).toHaveClass('Mui-error');
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Test Accessibility:**
|
|
181
|
+
```typescript
|
|
182
|
+
const checkbox = await canvas.findByRole('checkbox');
|
|
183
|
+
expect(checkbox).toHaveAttribute('aria-label');
|
|
184
|
+
|
|
185
|
+
// Indeterminate state
|
|
186
|
+
expect(checkbox).toHaveAttribute('aria-checked', 'mixed');
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Common Test Scenarios
|
|
190
|
+
|
|
191
|
+
1. **Basic Rendering** - Verify checkbox renders with label
|
|
192
|
+
2. **Checked/Unchecked States** - Test toggling between states
|
|
193
|
+
3. **Indeterminate State** - Test partial selection state
|
|
194
|
+
4. **Loading State** - Verify spinner shows and checkbox is disabled
|
|
195
|
+
5. **Error State** - Test error styling and helper text display
|
|
196
|
+
6. **Disabled State** - Verify checkbox is not interactive when disabled
|
|
197
|
+
7. **Variants** - Test default, rounded, and toggle visual variants
|
|
198
|
+
8. **Visual Effects** - Test glow and pulse animations
|
|
199
|
+
9. **Keyboard Navigation** - Test Space key to toggle
|
|
200
|
+
10. **Accessibility** - Verify ARIA attributes and screen reader support
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
import { FormGroup,Stack } from '@mui/material';
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
3
|
+
|
|
4
|
+
import { Checkbox } from './Checkbox';
|
|
5
|
+
|
|
6
|
+
const meta: Meta<typeof Checkbox> = {
|
|
7
|
+
title: 'Form/Checkbox',
|
|
8
|
+
component: Checkbox,
|
|
9
|
+
parameters: {
|
|
10
|
+
layout: 'centered',
|
|
11
|
+
},
|
|
12
|
+
tags: ['autodocs', 'component:Checkbox'],
|
|
13
|
+
argTypes: {
|
|
14
|
+
variant: {
|
|
15
|
+
control: { type: 'select' },
|
|
16
|
+
options: ['default', 'rounded', 'toggle'],
|
|
17
|
+
},
|
|
18
|
+
color: {
|
|
19
|
+
control: { type: 'select' },
|
|
20
|
+
options: ['primary', 'secondary', 'success', 'warning', 'error'],
|
|
21
|
+
},
|
|
22
|
+
size: {
|
|
23
|
+
control: { type: 'select' },
|
|
24
|
+
options: ['small', 'medium', 'large'],
|
|
25
|
+
},
|
|
26
|
+
loading: {
|
|
27
|
+
control: { type: 'boolean' },
|
|
28
|
+
},
|
|
29
|
+
ripple: {
|
|
30
|
+
control: { type: 'boolean' },
|
|
31
|
+
},
|
|
32
|
+
glow: {
|
|
33
|
+
control: { type: 'boolean' },
|
|
34
|
+
},
|
|
35
|
+
pulse: {
|
|
36
|
+
control: { type: 'boolean' },
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
export default meta;
|
|
42
|
+
type Story = StoryObj<typeof meta>;
|
|
43
|
+
|
|
44
|
+
export const Default: Story = {
|
|
45
|
+
args: {
|
|
46
|
+
label: 'Default checkbox',
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export const Variants: Story = {
|
|
51
|
+
render: () => (
|
|
52
|
+
<Stack spacing={2}>
|
|
53
|
+
<Checkbox variant="default" label="Default checkbox" defaultChecked />
|
|
54
|
+
<Checkbox variant="rounded" label="Rounded checkbox" defaultChecked />
|
|
55
|
+
<Checkbox variant="toggle" label="Toggle-style checkbox" defaultChecked />
|
|
56
|
+
</Stack>
|
|
57
|
+
),
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const States: Story = {
|
|
61
|
+
render: () => (
|
|
62
|
+
<Stack spacing={2}>
|
|
63
|
+
<Checkbox label="Unchecked" />
|
|
64
|
+
<Checkbox label="Checked" defaultChecked />
|
|
65
|
+
<Checkbox label="Indeterminate" indeterminate />
|
|
66
|
+
<Checkbox label="Disabled" disabled />
|
|
67
|
+
<Checkbox label="Disabled & Checked" disabled checked />
|
|
68
|
+
</Stack>
|
|
69
|
+
),
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export const Colors: Story = {
|
|
73
|
+
render: () => (
|
|
74
|
+
<Stack spacing={2}>
|
|
75
|
+
<Checkbox label="Primary" color="primary" defaultChecked />
|
|
76
|
+
<Checkbox label="Secondary" color="secondary" defaultChecked />
|
|
77
|
+
<Checkbox label="Success" color="success" defaultChecked />
|
|
78
|
+
<Checkbox label="Warning" color="warning" defaultChecked />
|
|
79
|
+
<Checkbox label="Error" color="error" defaultChecked />
|
|
80
|
+
</Stack>
|
|
81
|
+
),
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export const Sizes: Story = {
|
|
85
|
+
render: () => (
|
|
86
|
+
<Stack spacing={2}>
|
|
87
|
+
<Checkbox label="Small" size="small" defaultChecked />
|
|
88
|
+
<Checkbox label="Medium" size="medium" defaultChecked />
|
|
89
|
+
<Checkbox label="Large" size="large" defaultChecked />
|
|
90
|
+
</Stack>
|
|
91
|
+
),
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
export const WithHelperText: Story = {
|
|
95
|
+
render: () => (
|
|
96
|
+
<Stack spacing={2}>
|
|
97
|
+
<Checkbox
|
|
98
|
+
label="Terms and Conditions"
|
|
99
|
+
helperText="Please read and accept our terms and conditions"
|
|
100
|
+
/>
|
|
101
|
+
<Checkbox label="Newsletter" helperText="Subscribe to our weekly newsletter" defaultChecked />
|
|
102
|
+
<Checkbox label="Required Field" helperText="This field is required" error />
|
|
103
|
+
</Stack>
|
|
104
|
+
),
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
export const CheckboxGroup: Story = {
|
|
108
|
+
render: () => (
|
|
109
|
+
<FormGroup>
|
|
110
|
+
<Checkbox label="Option 1" defaultChecked />
|
|
111
|
+
<Checkbox label="Option 2" />
|
|
112
|
+
<Checkbox label="Option 3" defaultChecked />
|
|
113
|
+
<Checkbox label="Option 4 (Disabled)" disabled />
|
|
114
|
+
</FormGroup>
|
|
115
|
+
),
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
export const ErrorState: Story = {
|
|
119
|
+
args: {
|
|
120
|
+
label: 'I accept the terms',
|
|
121
|
+
error: true,
|
|
122
|
+
helperText: 'You must accept the terms to continue',
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
export const LoadingState: Story = {
|
|
127
|
+
render: () => (
|
|
128
|
+
<Stack spacing={2}>
|
|
129
|
+
<Checkbox label="Loading checkbox" loading />
|
|
130
|
+
<Checkbox label="Loading with text" loading defaultChecked />
|
|
131
|
+
<Checkbox loading /> {/* Without label */}
|
|
132
|
+
</Stack>
|
|
133
|
+
),
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
export const AnimationEffects: Story = {
|
|
137
|
+
render: () => (
|
|
138
|
+
<Stack spacing={2}>
|
|
139
|
+
<Checkbox label="Glow effect" glow defaultChecked />
|
|
140
|
+
<Checkbox label="Pulse effect" pulse defaultChecked />
|
|
141
|
+
<Checkbox label="No ripple effect" ripple={false} />
|
|
142
|
+
<Checkbox label="All effects" glow pulse defaultChecked />
|
|
143
|
+
</Stack>
|
|
144
|
+
),
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
export const Accessibility: Story = {
|
|
148
|
+
render: () => (
|
|
149
|
+
<Stack spacing={2}>
|
|
150
|
+
<Checkbox
|
|
151
|
+
label="Accessible checkbox"
|
|
152
|
+
data-testid="accessible-checkbox"
|
|
153
|
+
aria-describedby="checkbox-description"
|
|
154
|
+
/>
|
|
155
|
+
<div id="checkbox-description">This checkbox has proper accessibility attributes</div>
|
|
156
|
+
<Checkbox
|
|
157
|
+
label="Required field"
|
|
158
|
+
required
|
|
159
|
+
error
|
|
160
|
+
helperText="This field is required"
|
|
161
|
+
data-testid="required-checkbox"
|
|
162
|
+
/>
|
|
163
|
+
</Stack>
|
|
164
|
+
),
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
export const Playground: Story = {
|
|
168
|
+
args: {
|
|
169
|
+
variant: 'default',
|
|
170
|
+
label: 'Playground Checkbox',
|
|
171
|
+
color: 'primary',
|
|
172
|
+
size: 'medium',
|
|
173
|
+
checked: false,
|
|
174
|
+
disabled: false,
|
|
175
|
+
indeterminate: false,
|
|
176
|
+
error: false,
|
|
177
|
+
helperText: '',
|
|
178
|
+
loading: false,
|
|
179
|
+
ripple: true,
|
|
180
|
+
glow: false,
|
|
181
|
+
pulse: false,
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
// Required story exports for validation
|
|
186
|
+
export const AllVariants: Story = {
|
|
187
|
+
render: () => (
|
|
188
|
+
<Stack spacing={3}>
|
|
189
|
+
<Stack direction="row" spacing={2} alignItems="center">
|
|
190
|
+
<Checkbox variant="default" label="Default variant" defaultChecked />
|
|
191
|
+
<Checkbox variant="rounded" label="Rounded variant" defaultChecked />
|
|
192
|
+
<Checkbox variant="toggle" label="Toggle variant" defaultChecked />
|
|
193
|
+
</Stack>
|
|
194
|
+
</Stack>
|
|
195
|
+
),
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
export const AllSizes: Story = {
|
|
199
|
+
render: () => (
|
|
200
|
+
<Stack direction="row" spacing={2} alignItems="center">
|
|
201
|
+
<Checkbox size="small" label="Small" defaultChecked />
|
|
202
|
+
<Checkbox size="medium" label="Medium" defaultChecked />
|
|
203
|
+
<Checkbox size="large" label="Large" defaultChecked />
|
|
204
|
+
</Stack>
|
|
205
|
+
),
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
export const AllStates: Story = {
|
|
209
|
+
render: () => (
|
|
210
|
+
<Stack spacing={2}>
|
|
211
|
+
<Stack direction="row" spacing={2}>
|
|
212
|
+
<Checkbox label="Default" />
|
|
213
|
+
<Checkbox label="Checked" defaultChecked />
|
|
214
|
+
<Checkbox label="Indeterminate" indeterminate />
|
|
215
|
+
</Stack>
|
|
216
|
+
<Stack direction="row" spacing={2}>
|
|
217
|
+
<Checkbox label="Disabled" disabled />
|
|
218
|
+
<Checkbox label="Disabled Checked" disabled defaultChecked />
|
|
219
|
+
<Checkbox label="Loading" loading />
|
|
220
|
+
</Stack>
|
|
221
|
+
<Stack direction="row" spacing={2}>
|
|
222
|
+
<Checkbox label="Error" error helperText="Error message" />
|
|
223
|
+
<Checkbox label="With Helper" helperText="Helper text" />
|
|
224
|
+
</Stack>
|
|
225
|
+
</Stack>
|
|
226
|
+
),
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
export const InteractiveStates: Story = {
|
|
230
|
+
render: () => (
|
|
231
|
+
<Stack spacing={3}>
|
|
232
|
+
<Stack direction="row" spacing={2}>
|
|
233
|
+
<Checkbox label="Hover me" glow />
|
|
234
|
+
<Checkbox label="Focus me" pulse />
|
|
235
|
+
<Checkbox label="Click me" defaultChecked />
|
|
236
|
+
</Stack>
|
|
237
|
+
<Stack direction="row" spacing={2}>
|
|
238
|
+
<Checkbox label="With ripple" ripple defaultChecked />
|
|
239
|
+
<Checkbox label="No ripple" ripple={false} defaultChecked />
|
|
240
|
+
</Stack>
|
|
241
|
+
</Stack>
|
|
242
|
+
),
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
export const Responsive: Story = {
|
|
246
|
+
parameters: {
|
|
247
|
+
viewport: {
|
|
248
|
+
viewports: {
|
|
249
|
+
mobile: { name: 'Mobile', styles: { width: '360px', height: '640px' } },
|
|
250
|
+
tablet: { name: 'Tablet', styles: { width: '768px', height: '1024px' } },
|
|
251
|
+
desktop: { name: 'Desktop', styles: { width: '1440px', height: '900px' } },
|
|
252
|
+
},
|
|
253
|
+
},
|
|
254
|
+
},
|
|
255
|
+
render: () => (
|
|
256
|
+
<Stack spacing={2} sx={{ width: '100%', p: 2 }}>
|
|
257
|
+
<FormGroup>
|
|
258
|
+
<Checkbox label="Responsive checkbox 1" defaultChecked />
|
|
259
|
+
<Checkbox label="Responsive checkbox 2" />
|
|
260
|
+
<Checkbox label="Responsive checkbox 3" defaultChecked />
|
|
261
|
+
<Checkbox label="Responsive checkbox 4" disabled />
|
|
262
|
+
</FormGroup>
|
|
263
|
+
</Stack>
|
|
264
|
+
),
|
|
265
|
+
};
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { Stack } from '@mui/material';
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { expect, fn,userEvent, within } from 'storybook/test';
|
|
5
|
+
|
|
6
|
+
import { Checkbox } from './Checkbox';
|
|
7
|
+
|
|
8
|
+
const meta: Meta<typeof Checkbox> = {
|
|
9
|
+
title: 'Form/Checkbox/Tests',
|
|
10
|
+
component: Checkbox,
|
|
11
|
+
parameters: {
|
|
12
|
+
layout: 'centered',
|
|
13
|
+
chromatic: { disableSnapshot: false },
|
|
14
|
+
},
|
|
15
|
+
tags: ['autodocs', 'test', 'component:Checkbox'],
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export default meta;
|
|
19
|
+
type Story = StoryObj<typeof meta>;
|
|
20
|
+
|
|
21
|
+
// Basic Interaction Tests
|
|
22
|
+
export const BasicInteraction: Story = {
|
|
23
|
+
name: '🧪 Basic Interaction Test',
|
|
24
|
+
args: {
|
|
25
|
+
label: 'Test Checkbox',
|
|
26
|
+
onChange: fn(),
|
|
27
|
+
onClick: fn(),
|
|
28
|
+
onFocus: fn(),
|
|
29
|
+
onBlur: fn(),
|
|
30
|
+
},
|
|
31
|
+
play: async ({ canvasElement, step }) => {
|
|
32
|
+
const canvas = within(canvasElement);
|
|
33
|
+
|
|
34
|
+
await step('Initial render verification', async () => {
|
|
35
|
+
const checkbox = canvas.getByRole('checkbox', { name: /test checkbox/i });
|
|
36
|
+
await expect(checkbox).toBeInTheDocument();
|
|
37
|
+
await expect(checkbox).not.toBeChecked();
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
await step('Click to check', async () => {
|
|
41
|
+
const checkbox = canvas.getByRole('checkbox', { name: /test checkbox/i });
|
|
42
|
+
await userEvent.click(checkbox);
|
|
43
|
+
await expect(checkbox).toBeChecked();
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export const KeyboardNavigation: Story = {
|
|
49
|
+
name: '⌨️ Keyboard Navigation Test',
|
|
50
|
+
render: () => (
|
|
51
|
+
<Stack spacing={2}>
|
|
52
|
+
<Checkbox label="First checkbox" />
|
|
53
|
+
<Checkbox label="Second checkbox" />
|
|
54
|
+
</Stack>
|
|
55
|
+
),
|
|
56
|
+
play: async ({ canvasElement, step }) => {
|
|
57
|
+
const canvas = within(canvasElement);
|
|
58
|
+
|
|
59
|
+
await step('Tab navigation', async () => {
|
|
60
|
+
const firstCheckbox = canvas.getByRole('checkbox', { name: /first checkbox/i });
|
|
61
|
+
await expect(firstCheckbox).toBeInTheDocument();
|
|
62
|
+
});
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export const FocusManagement: Story = {
|
|
67
|
+
name: '🎯 Focus Management Test',
|
|
68
|
+
render: () => (
|
|
69
|
+
<Stack spacing={2}>
|
|
70
|
+
<Checkbox autoFocus label="Auto-focus checkbox" />
|
|
71
|
+
<Checkbox label="Regular checkbox" />
|
|
72
|
+
</Stack>
|
|
73
|
+
),
|
|
74
|
+
play: async ({ canvasElement, step }) => {
|
|
75
|
+
const canvas = within(canvasElement);
|
|
76
|
+
|
|
77
|
+
await step('Auto focus', async () => {
|
|
78
|
+
const autoFocusCheckbox = canvas.getByRole('checkbox', { name: /auto-focus checkbox/i });
|
|
79
|
+
await expect(autoFocusCheckbox).toBeInTheDocument();
|
|
80
|
+
});
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export const VisualStates: Story = {
|
|
85
|
+
name: '👁️ Visual States Test',
|
|
86
|
+
render: () => (
|
|
87
|
+
<Stack spacing={2}>
|
|
88
|
+
<Checkbox label="Default state" />
|
|
89
|
+
<Checkbox label="Checked state" defaultChecked />
|
|
90
|
+
<Checkbox label="Disabled state" disabled />
|
|
91
|
+
</Stack>
|
|
92
|
+
),
|
|
93
|
+
play: async ({ canvasElement, step }) => {
|
|
94
|
+
const canvas = within(canvasElement);
|
|
95
|
+
|
|
96
|
+
await step('Default state', async () => {
|
|
97
|
+
const checkbox = canvas.getByRole('checkbox', { name: /default state/i });
|
|
98
|
+
await expect(checkbox).not.toBeChecked();
|
|
99
|
+
});
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
export const ResponsiveDesign: Story = {
|
|
104
|
+
name: '📱 Responsive Design Test',
|
|
105
|
+
render: () => (
|
|
106
|
+
<Stack spacing={2}>
|
|
107
|
+
<Checkbox label="Mobile checkbox" size="small" />
|
|
108
|
+
<Checkbox label="Tablet checkbox" size="medium" />
|
|
109
|
+
<Checkbox label="Desktop checkbox" size="large" />
|
|
110
|
+
</Stack>
|
|
111
|
+
),
|
|
112
|
+
play: async ({ canvasElement, step }) => {
|
|
113
|
+
const canvas = within(canvasElement);
|
|
114
|
+
|
|
115
|
+
await step('Responsive layout', async () => {
|
|
116
|
+
const checkboxes = canvas.getAllByRole('checkbox');
|
|
117
|
+
await expect(checkboxes).toHaveLength(3);
|
|
118
|
+
});
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
export const ThemeVariations: Story = {
|
|
123
|
+
name: '🎨 Theme Variations Test',
|
|
124
|
+
render: () => (
|
|
125
|
+
<Stack spacing={2}>
|
|
126
|
+
<Checkbox label="Primary checkbox" color="primary" defaultChecked />
|
|
127
|
+
<Checkbox label="Secondary checkbox" color="secondary" defaultChecked />
|
|
128
|
+
</Stack>
|
|
129
|
+
),
|
|
130
|
+
play: async ({ canvasElement, step }) => {
|
|
131
|
+
const canvas = within(canvasElement);
|
|
132
|
+
|
|
133
|
+
await step('Theme colors', async () => {
|
|
134
|
+
const checkboxes = canvas.getAllByRole('checkbox');
|
|
135
|
+
await expect(checkboxes).toHaveLength(2);
|
|
136
|
+
});
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
export const EdgeCases: Story = {
|
|
141
|
+
name: '🔧 Edge Cases Test',
|
|
142
|
+
render: () => (
|
|
143
|
+
<Stack spacing={2}>
|
|
144
|
+
<Checkbox label="Long text that wraps around multiple lines to test layout" />
|
|
145
|
+
<Checkbox label="Unicode: 🚀 ✨ 💫" />
|
|
146
|
+
</Stack>
|
|
147
|
+
),
|
|
148
|
+
play: async ({ canvasElement, step }) => {
|
|
149
|
+
const canvas = within(canvasElement);
|
|
150
|
+
|
|
151
|
+
await step('Edge cases', async () => {
|
|
152
|
+
const checkboxes = canvas.getAllByRole('checkbox');
|
|
153
|
+
await expect(checkboxes).toHaveLength(2);
|
|
154
|
+
});
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
export const Integration: Story = {
|
|
159
|
+
name: '🔗 Integration Test',
|
|
160
|
+
render: () => {
|
|
161
|
+
const [checked, setChecked] = React.useState(false);
|
|
162
|
+
return (
|
|
163
|
+
<Checkbox
|
|
164
|
+
label="Integration test"
|
|
165
|
+
checked={checked}
|
|
166
|
+
onChange={(e, value) => setChecked(value)}
|
|
167
|
+
/>
|
|
168
|
+
);
|
|
169
|
+
},
|
|
170
|
+
play: async ({ canvasElement, step }) => {
|
|
171
|
+
const canvas = within(canvasElement);
|
|
172
|
+
|
|
173
|
+
await step('Integration test', async () => {
|
|
174
|
+
const checkbox = canvas.getByRole('checkbox', { name: /integration test/i });
|
|
175
|
+
await expect(checkbox).not.toBeChecked();
|
|
176
|
+
|
|
177
|
+
await userEvent.click(checkbox);
|
|
178
|
+
await expect(checkbox).toBeChecked();
|
|
179
|
+
});
|
|
180
|
+
},
|
|
181
|
+
};
|