@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,475 @@
|
|
|
1
|
+
# Sheet Component
|
|
2
|
+
|
|
3
|
+
A flexible and feature-rich sheet component that provides sliding panels from any edge of the viewport. The Sheet component supports dragging, swipe gestures, snap points, and multiple visual variants including glass morphism and gradient effects.
|
|
4
|
+
|
|
5
|
+
## Purpose and Use Cases
|
|
6
|
+
|
|
7
|
+
The Sheet component is ideal for:
|
|
8
|
+
|
|
9
|
+
- Mobile-first navigation menus and action panels
|
|
10
|
+
- Form overlays and modal dialogs that slide in from edges
|
|
11
|
+
- Draggable bottom sheets with snap points for mobile experiences
|
|
12
|
+
- Side panels for filtering, settings, or additional content
|
|
13
|
+
- Contextual information panels that don't block the main content
|
|
14
|
+
- Touch-enabled interfaces with swipe gestures
|
|
15
|
+
|
|
16
|
+
## Props Documentation
|
|
17
|
+
|
|
18
|
+
### Core Props
|
|
19
|
+
|
|
20
|
+
- **open** (boolean): Controls whether the sheet is open or closed
|
|
21
|
+
- **onOpenChange** ((open: boolean) => void): Callback fired when the open state changes
|
|
22
|
+
- **children** (React.ReactNode): Content to render inside the sheet
|
|
23
|
+
- **title** (string): Optional title displayed in the sheet header
|
|
24
|
+
- **description** (string): Optional description text displayed below the title
|
|
25
|
+
|
|
26
|
+
### Positioning and Sizing
|
|
27
|
+
|
|
28
|
+
- **position** ('top' | 'right' | 'bottom' | 'left'): Edge from which the sheet slides (default: 'bottom')
|
|
29
|
+
- **size** ('xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full'): Predefined size options (default: 'md'). For **side sheets** (`left`/`right`) the width is **viewport-aware**: a pixel floor keeps the panel usable while the larger presets grow with the screen — `lg` occupies ≥32% and `xl` ≥40% of the viewport on wide screens — and every preset is capped at `92vw` so it never overflows a small screen. `full` is always 100%. Vertical sheets (`top`/`bottom`) use fixed heights.
|
|
30
|
+
- **fullHeight** (boolean): Expand the sheet along its **cross axis** — side sheets become full-height (keeping the `size` width); top/bottom sheets become full-width (keeping the `size` height)
|
|
31
|
+
|
|
32
|
+
### Visual Variants
|
|
33
|
+
|
|
34
|
+
- **variant** ('default' | 'draggable' | 'glass' | 'gradient' | 'elevated' | 'minimal'): Visual style variant (default: 'default')
|
|
35
|
+
- **color** (MUI color): Theme color for accents and highlights
|
|
36
|
+
- **glass** (boolean): Enable glass morphism effect with backdrop blur
|
|
37
|
+
- **gradient** (boolean): Enable gradient background
|
|
38
|
+
- **glow** (boolean): Enable animated glow effect
|
|
39
|
+
- **pulse** (boolean): Enable pulse animation effect
|
|
40
|
+
- **rounded** (boolean): Apply rounded corners to the sheet
|
|
41
|
+
- **elevation** (number): Shadow depth level (0-24)
|
|
42
|
+
|
|
43
|
+
### Interactive Behavior
|
|
44
|
+
|
|
45
|
+
- **swipeable** (boolean): Enable swipe gestures for touch devices (default: true)
|
|
46
|
+
- **draggable** (boolean): Enable drag handle and dragging behavior
|
|
47
|
+
- **showHandle** (boolean): Show visual drag handle indicator (default: true)
|
|
48
|
+
- **disabled** (boolean): Disable all user interactions
|
|
49
|
+
- **loading** (boolean): Show loading spinner and disable interactions
|
|
50
|
+
- **persistent** (boolean): Prevent sheet from being closed by user actions
|
|
51
|
+
|
|
52
|
+
### Snap Points (for draggable variant)
|
|
53
|
+
|
|
54
|
+
- **snapPoints** (number[]): Array of snap positions as percentages (0-1) (default: [0.25, 0.5, 0.75, 1])
|
|
55
|
+
- **defaultSnapPoint** (number): Initial snap position (default: 0.5)
|
|
56
|
+
- **onSnapPointChange** ((point: number) => void): Callback when snap point changes
|
|
57
|
+
- **minSnapPoint** (number): Minimum allowed snap point (default: 0)
|
|
58
|
+
- **maxSnapPoint** (number): Maximum allowed snap point (default: 1)
|
|
59
|
+
|
|
60
|
+
### Animation and Physics
|
|
61
|
+
|
|
62
|
+
- **velocityThreshold** (number): Velocity threshold for snap detection (default: 0.5)
|
|
63
|
+
- **dragResistance** (number): Resistance factor at boundaries (default: 0.3)
|
|
64
|
+
- **animationConfig** (object): Spring animation configuration with tension, friction, and velocity
|
|
65
|
+
|
|
66
|
+
### Overlay and Closing
|
|
67
|
+
|
|
68
|
+
- **showOverlay** (boolean): Show backdrop overlay behind sheet (default: true)
|
|
69
|
+
- **closeOnOverlayClick** (boolean): Close sheet when overlay is clicked (default: true)
|
|
70
|
+
- **closeOnEscape** (boolean): Close sheet on Escape key press (default: true)
|
|
71
|
+
- **showCloseButton** (boolean): Show close button in header (default: true)
|
|
72
|
+
|
|
73
|
+
### Event Handlers
|
|
74
|
+
|
|
75
|
+
- **onClick** (() => void): Click event handler
|
|
76
|
+
- **onFocus** (() => void): Focus event handler
|
|
77
|
+
- **onBlur** (() => void): Blur event handler
|
|
78
|
+
- **onClose** (() => void): Called when sheet closes
|
|
79
|
+
- **onOpen** (() => void): Called when sheet opens
|
|
80
|
+
- **onDragStart** (() => void): Called when dragging starts
|
|
81
|
+
- **onDragEnd** (() => void): Called when dragging ends
|
|
82
|
+
|
|
83
|
+
### Content Sections
|
|
84
|
+
|
|
85
|
+
- **header** (React.ReactNode): Custom header content (overrides title/description)
|
|
86
|
+
- **footer** (React.ReactNode): Footer content rendered at bottom of sheet
|
|
87
|
+
|
|
88
|
+
### Testing
|
|
89
|
+
|
|
90
|
+
- **dataTestId** (string): Base test ID for the component (default: 'sheet'). All child elements derive their test IDs from this base value
|
|
91
|
+
|
|
92
|
+
## Usage Examples
|
|
93
|
+
|
|
94
|
+
### Basic Sheet
|
|
95
|
+
|
|
96
|
+
```tsx
|
|
97
|
+
import { Sheet } from '@/components/data-display/Sheet';
|
|
98
|
+
|
|
99
|
+
function BasicExample() {
|
|
100
|
+
const [open, setOpen] = useState(false);
|
|
101
|
+
|
|
102
|
+
return (
|
|
103
|
+
<>
|
|
104
|
+
<button onClick={() => setOpen(true)}>Open Sheet</button>
|
|
105
|
+
<Sheet
|
|
106
|
+
open={open}
|
|
107
|
+
onOpenChange={setOpen}
|
|
108
|
+
title="Settings"
|
|
109
|
+
description="Adjust your preferences"
|
|
110
|
+
>
|
|
111
|
+
<div>Sheet content goes here</div>
|
|
112
|
+
</Sheet>
|
|
113
|
+
</>
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Draggable Bottom Sheet with Snap Points
|
|
119
|
+
|
|
120
|
+
```tsx
|
|
121
|
+
<Sheet
|
|
122
|
+
open={open}
|
|
123
|
+
onOpenChange={setOpen}
|
|
124
|
+
position="bottom"
|
|
125
|
+
variant="draggable"
|
|
126
|
+
snapPoints={[0.1, 0.5, 0.9]}
|
|
127
|
+
defaultSnapPoint={0.5}
|
|
128
|
+
onSnapPointChange={(point) => console.log('Snapped to:', point)}
|
|
129
|
+
showHandle
|
|
130
|
+
>
|
|
131
|
+
<div>Draggable content</div>
|
|
132
|
+
</Sheet>
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Glass Morphism Side Panel
|
|
136
|
+
|
|
137
|
+
```tsx
|
|
138
|
+
<Sheet
|
|
139
|
+
open={open}
|
|
140
|
+
onOpenChange={setOpen}
|
|
141
|
+
position="right"
|
|
142
|
+
variant="glass"
|
|
143
|
+
glass
|
|
144
|
+
size="lg"
|
|
145
|
+
title="Filters"
|
|
146
|
+
>
|
|
147
|
+
<FilterContent />
|
|
148
|
+
</Sheet>
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Full-Screen Modal Sheet
|
|
152
|
+
|
|
153
|
+
```tsx
|
|
154
|
+
<Sheet
|
|
155
|
+
open={open}
|
|
156
|
+
onOpenChange={setOpen}
|
|
157
|
+
size="full"
|
|
158
|
+
fullHeight
|
|
159
|
+
showOverlay
|
|
160
|
+
closeOnEscape
|
|
161
|
+
title="Create New Item"
|
|
162
|
+
footer={
|
|
163
|
+
<div>
|
|
164
|
+
<button onClick={() => setOpen(false)}>Cancel</button>
|
|
165
|
+
<button onClick={handleSave}>Save</button>
|
|
166
|
+
</div>
|
|
167
|
+
}
|
|
168
|
+
>
|
|
169
|
+
<FormContent />
|
|
170
|
+
</Sheet>
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Accessibility Notes
|
|
174
|
+
|
|
175
|
+
- **Focus Management**: Sheet traps focus when open and returns focus to trigger element on close
|
|
176
|
+
- **Keyboard Navigation**:
|
|
177
|
+
- Escape key closes the sheet (when closeOnEscape is true)
|
|
178
|
+
- Tab cycles through focusable elements within the sheet
|
|
179
|
+
- Shift+Tab cycles backwards
|
|
180
|
+
- **ARIA Attributes**:
|
|
181
|
+
- Uses role="dialog" for modal behavior
|
|
182
|
+
- aria-labelledby points to the title
|
|
183
|
+
- aria-describedby points to the description
|
|
184
|
+
- aria-modal="true" when overlay is shown
|
|
185
|
+
- **Screen Readers**: Announces sheet opening/closing and reads title/description
|
|
186
|
+
- **Touch Gestures**: Swipe gestures are accessible on touch devices when swipeable is enabled
|
|
187
|
+
|
|
188
|
+
## Best Practices
|
|
189
|
+
|
|
190
|
+
1. **Position Selection**: Choose position based on content and device:
|
|
191
|
+
- Bottom sheets work best on mobile devices
|
|
192
|
+
- Side sheets are ideal for desktop filtering/navigation
|
|
193
|
+
- Top sheets for notifications or alerts
|
|
194
|
+
|
|
195
|
+
2. **Snap Points**: For draggable sheets, provide meaningful snap points:
|
|
196
|
+
- Include a minimal peek state (e.g., 0.1)
|
|
197
|
+
- Provide a comfortable reading position (e.g., 0.5)
|
|
198
|
+
- Allow full expansion for detailed content (e.g., 1.0)
|
|
199
|
+
|
|
200
|
+
3. **Loading States**: Always show loading state during async operations:
|
|
201
|
+
|
|
202
|
+
```tsx
|
|
203
|
+
<Sheet loading={isLoading}>{content}</Sheet>
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
4. **Responsive Design**: Adjust size and position based on viewport:
|
|
207
|
+
|
|
208
|
+
```tsx
|
|
209
|
+
<Sheet
|
|
210
|
+
position={isMobile ? 'bottom' : 'right'}
|
|
211
|
+
size={isMobile ? 'full' : 'lg'}
|
|
212
|
+
>
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
5. **Performance**: For sheets with heavy content:
|
|
216
|
+
- Use lazy loading for content
|
|
217
|
+
- Implement virtualization for long lists
|
|
218
|
+
- Debounce drag events if needed
|
|
219
|
+
|
|
220
|
+
6. **Accessibility**: Always provide:
|
|
221
|
+
- Clear title and description
|
|
222
|
+
- Proper focus management
|
|
223
|
+
- Keyboard navigation support
|
|
224
|
+
- Escape key to close (unless persistent)
|
|
225
|
+
|
|
226
|
+
7. **Visual Hierarchy**: Use variants consistently:
|
|
227
|
+
- Default for standard overlays
|
|
228
|
+
- Glass for elegant, semi-transparent panels
|
|
229
|
+
- Elevated for important actions
|
|
230
|
+
- Minimal for subtle, non-intrusive content
|
|
231
|
+
|
|
232
|
+
## Testing
|
|
233
|
+
|
|
234
|
+
### Test IDs
|
|
235
|
+
|
|
236
|
+
The Sheet component provides comprehensive test IDs for automated testing:
|
|
237
|
+
|
|
238
|
+
#### Main Container
|
|
239
|
+
- `sheet` (default) or custom via `dataTestId` prop - Main sheet container element
|
|
240
|
+
|
|
241
|
+
#### Header Section
|
|
242
|
+
- `{dataTestId}-header` - Sheet header container
|
|
243
|
+
- `{dataTestId}-header-title` - Title text element
|
|
244
|
+
- `{dataTestId}-header-close-button` - Close button (when `showCloseButton` is true)
|
|
245
|
+
|
|
246
|
+
#### Content Section
|
|
247
|
+
- `{dataTestId}-content` - Main content area
|
|
248
|
+
|
|
249
|
+
#### Footer Section
|
|
250
|
+
- `{dataTestId}-footer` - Footer container (when `footer` prop is provided)
|
|
251
|
+
|
|
252
|
+
### Testing Examples
|
|
253
|
+
|
|
254
|
+
#### Basic Rendering Test
|
|
255
|
+
```tsx
|
|
256
|
+
import { render, screen } from '@testing-library/react';
|
|
257
|
+
import { Sheet } from '@/components/data-display/Sheet';
|
|
258
|
+
|
|
259
|
+
test('renders sheet with content', () => {
|
|
260
|
+
render(
|
|
261
|
+
<Sheet open title="Test Sheet" dataTestId="test-sheet">
|
|
262
|
+
<div>Sheet content</div>
|
|
263
|
+
</Sheet>
|
|
264
|
+
);
|
|
265
|
+
|
|
266
|
+
expect(screen.getByTestId('test-sheet')).toBeInTheDocument();
|
|
267
|
+
expect(screen.getByTestId('test-sheet-header')).toBeInTheDocument();
|
|
268
|
+
expect(screen.getByTestId('test-sheet-header-title')).toHaveTextContent('Test Sheet');
|
|
269
|
+
expect(screen.getByTestId('test-sheet-content')).toBeInTheDocument();
|
|
270
|
+
});
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
#### Interaction Testing
|
|
274
|
+
```tsx
|
|
275
|
+
import { render, screen, fireEvent } from '@testing-library/react';
|
|
276
|
+
import { Sheet } from '@/components/data-display/Sheet';
|
|
277
|
+
|
|
278
|
+
test('closes sheet when close button is clicked', () => {
|
|
279
|
+
const handleClose = vi.fn();
|
|
280
|
+
|
|
281
|
+
render(
|
|
282
|
+
<Sheet
|
|
283
|
+
open
|
|
284
|
+
onOpenChange={handleClose}
|
|
285
|
+
showCloseButton
|
|
286
|
+
dataTestId="test-sheet"
|
|
287
|
+
>
|
|
288
|
+
Content
|
|
289
|
+
</Sheet>
|
|
290
|
+
);
|
|
291
|
+
|
|
292
|
+
const closeButton = screen.getByTestId('test-sheet-header-close-button');
|
|
293
|
+
fireEvent.click(closeButton);
|
|
294
|
+
|
|
295
|
+
expect(handleClose).toHaveBeenCalledWith(false);
|
|
296
|
+
});
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
#### Footer Testing
|
|
300
|
+
```tsx
|
|
301
|
+
import { render, screen } from '@testing-library/react';
|
|
302
|
+
import { Sheet } from '@/components/data-display/Sheet';
|
|
303
|
+
|
|
304
|
+
test('renders footer when provided', () => {
|
|
305
|
+
render(
|
|
306
|
+
<Sheet
|
|
307
|
+
open
|
|
308
|
+
dataTestId="test-sheet"
|
|
309
|
+
footer={<button>Save</button>}
|
|
310
|
+
>
|
|
311
|
+
Content
|
|
312
|
+
</Sheet>
|
|
313
|
+
);
|
|
314
|
+
|
|
315
|
+
expect(screen.getByTestId('test-sheet-footer')).toBeInTheDocument();
|
|
316
|
+
expect(screen.getByRole('button', { name: 'Save' })).toBeInTheDocument();
|
|
317
|
+
});
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
#### Draggable Sheet Testing
|
|
321
|
+
```tsx
|
|
322
|
+
import { render, screen } from '@testing-library/react';
|
|
323
|
+
import { Sheet } from '@/components/data-display/Sheet';
|
|
324
|
+
|
|
325
|
+
test('renders draggable sheet with snap points', () => {
|
|
326
|
+
const handleSnapChange = vi.fn();
|
|
327
|
+
|
|
328
|
+
render(
|
|
329
|
+
<Sheet
|
|
330
|
+
open
|
|
331
|
+
variant="draggable"
|
|
332
|
+
position="bottom"
|
|
333
|
+
snapPoints={[0.25, 0.5, 0.75, 1]}
|
|
334
|
+
defaultSnapPoint={0.5}
|
|
335
|
+
onSnapPointChange={handleSnapChange}
|
|
336
|
+
dataTestId="draggable-sheet"
|
|
337
|
+
>
|
|
338
|
+
Draggable content
|
|
339
|
+
</Sheet>
|
|
340
|
+
);
|
|
341
|
+
|
|
342
|
+
const sheet = screen.getByTestId('draggable-sheet');
|
|
343
|
+
expect(sheet).toBeInTheDocument();
|
|
344
|
+
|
|
345
|
+
// Test drag interactions here using fireEvent or userEvent
|
|
346
|
+
});
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
#### Loading State Testing
|
|
350
|
+
```tsx
|
|
351
|
+
import { render, screen } from '@testing-library/react';
|
|
352
|
+
import { Sheet } from '@/components/data-display/Sheet';
|
|
353
|
+
|
|
354
|
+
test('shows loading spinner when loading prop is true', () => {
|
|
355
|
+
render(
|
|
356
|
+
<Sheet open loading dataTestId="loading-sheet">
|
|
357
|
+
Content
|
|
358
|
+
</Sheet>
|
|
359
|
+
);
|
|
360
|
+
|
|
361
|
+
expect(screen.getByRole('progressbar')).toBeInTheDocument();
|
|
362
|
+
});
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
#### Accessibility Testing
|
|
366
|
+
```tsx
|
|
367
|
+
import { render } from '@testing-library/react';
|
|
368
|
+
import { axe } from 'jest-axe';
|
|
369
|
+
import { Sheet } from '@/components/data-display/Sheet';
|
|
370
|
+
|
|
371
|
+
test('has no accessibility violations', async () => {
|
|
372
|
+
const { container } = render(
|
|
373
|
+
<Sheet
|
|
374
|
+
open
|
|
375
|
+
title="Accessible Sheet"
|
|
376
|
+
description="This is a description"
|
|
377
|
+
dataTestId="accessible-sheet"
|
|
378
|
+
>
|
|
379
|
+
Content
|
|
380
|
+
</Sheet>
|
|
381
|
+
);
|
|
382
|
+
|
|
383
|
+
const results = await axe(container);
|
|
384
|
+
expect(results).toHaveNoViolations();
|
|
385
|
+
});
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
#### Testing with Custom Test IDs
|
|
389
|
+
```tsx
|
|
390
|
+
import { render, screen } from '@testing-library/react';
|
|
391
|
+
import { Sheet } from '@/components/data-display/Sheet';
|
|
392
|
+
|
|
393
|
+
test('uses custom dataTestId for all elements', () => {
|
|
394
|
+
render(
|
|
395
|
+
<Sheet
|
|
396
|
+
open
|
|
397
|
+
title="Custom ID Sheet"
|
|
398
|
+
showCloseButton
|
|
399
|
+
dataTestId="custom-sheet"
|
|
400
|
+
footer={<div>Footer</div>}
|
|
401
|
+
>
|
|
402
|
+
Content
|
|
403
|
+
</Sheet>
|
|
404
|
+
);
|
|
405
|
+
|
|
406
|
+
// All test IDs derive from the custom dataTestId
|
|
407
|
+
expect(screen.getByTestId('custom-sheet')).toBeInTheDocument();
|
|
408
|
+
expect(screen.getByTestId('custom-sheet-header')).toBeInTheDocument();
|
|
409
|
+
expect(screen.getByTestId('custom-sheet-header-title')).toBeInTheDocument();
|
|
410
|
+
expect(screen.getByTestId('custom-sheet-header-close-button')).toBeInTheDocument();
|
|
411
|
+
expect(screen.getByTestId('custom-sheet-content')).toBeInTheDocument();
|
|
412
|
+
expect(screen.getByTestId('custom-sheet-footer')).toBeInTheDocument();
|
|
413
|
+
});
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
### Playwright E2E Testing
|
|
417
|
+
|
|
418
|
+
```typescript
|
|
419
|
+
import { test, expect } from '@playwright/test';
|
|
420
|
+
|
|
421
|
+
test('sheet opens and closes correctly', async ({ page }) => {
|
|
422
|
+
await page.goto('/sheet-demo');
|
|
423
|
+
|
|
424
|
+
// Open sheet
|
|
425
|
+
await page.click('button:has-text("Open Sheet")');
|
|
426
|
+
await expect(page.getByTestId('demo-sheet')).toBeVisible();
|
|
427
|
+
|
|
428
|
+
// Verify content
|
|
429
|
+
await expect(page.getByTestId('demo-sheet-header-title')).toHaveText('Demo Sheet');
|
|
430
|
+
await expect(page.getByTestId('demo-sheet-content')).toBeVisible();
|
|
431
|
+
|
|
432
|
+
// Close sheet
|
|
433
|
+
await page.getByTestId('demo-sheet-header-close-button').click();
|
|
434
|
+
await expect(page.getByTestId('demo-sheet')).not.toBeVisible();
|
|
435
|
+
});
|
|
436
|
+
|
|
437
|
+
test('draggable sheet responds to drag gestures', async ({ page }) => {
|
|
438
|
+
await page.goto('/draggable-sheet-demo');
|
|
439
|
+
|
|
440
|
+
const sheet = page.getByTestId('draggable-sheet');
|
|
441
|
+
const header = page.getByTestId('draggable-sheet-header');
|
|
442
|
+
|
|
443
|
+
// Get initial position
|
|
444
|
+
const initialBox = await sheet.boundingBox();
|
|
445
|
+
|
|
446
|
+
// Drag sheet down
|
|
447
|
+
await header.hover();
|
|
448
|
+
await page.mouse.down();
|
|
449
|
+
await page.mouse.move(initialBox.x, initialBox.y + 200);
|
|
450
|
+
await page.mouse.up();
|
|
451
|
+
|
|
452
|
+
// Verify sheet moved
|
|
453
|
+
const newBox = await sheet.boundingBox();
|
|
454
|
+
expect(newBox.y).toBeGreaterThan(initialBox.y);
|
|
455
|
+
});
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
### Best Practices for Testing
|
|
459
|
+
|
|
460
|
+
1. **Always Use dataTestId**: Provide unique test IDs for each Sheet instance to avoid collisions in tests
|
|
461
|
+
2. **Test All States**: Verify open, closed, loading, and disabled states
|
|
462
|
+
3. **Test Interactions**: Verify close buttons, overlay clicks, escape key, and drag gestures work correctly
|
|
463
|
+
4. **Test Accessibility**: Ensure keyboard navigation, focus management, and ARIA attributes are correct
|
|
464
|
+
5. **Test Responsive Behavior**: Verify different positions (top, right, bottom, left) and sizes work correctly
|
|
465
|
+
6. **Test Visual Variants**: Verify glass, gradient, elevated, and draggable variants render correctly
|
|
466
|
+
7. **Mock Animations**: Use `vi.useFakeTimers()` or similar to control animation timing in tests
|
|
467
|
+
8. **Test Snap Points**: For draggable variants, verify snap points are respected during drag operations
|
|
468
|
+
|
|
469
|
+
## Related Components
|
|
470
|
+
|
|
471
|
+
- **Drawer**: MUI's native drawer component (Sheet extends this)
|
|
472
|
+
- **Modal**: For centered dialog boxes
|
|
473
|
+
- **Popover**: For small contextual overlays
|
|
474
|
+
- **Dialog**: For important user decisions
|
|
475
|
+
- **Sidebar**: For persistent navigation panels
|