@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,527 @@
|
|
|
1
|
+
# Dialog Component
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The Dialog component provides a powerful, flexible modal dialog system with multiple variants, advanced styling options, and comprehensive accessibility features. It includes support for glass morphism effects, fullscreen and drawer modes, and comes with composable sub-components for header, content, and actions.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **Multiple Variants**: Default, glass, fullscreen, and drawer modes
|
|
10
|
+
- **Flexible Sizing**: Five size options (xs, sm, md, lg, xl)
|
|
11
|
+
- **Composable Architecture**: Separate DialogHeader, DialogContent, and DialogActions components
|
|
12
|
+
- **Padded By Default**: Raw children (no DialogContent/DialogActions) get comfortable body padding automatically; composed dialogs keep managing their own spacing
|
|
13
|
+
- **Advanced Styling**: Glass morphism, gradient backgrounds, glow, and pulse effects
|
|
14
|
+
- **Persistent Mode**: Prevent dismissal via backdrop click or escape key
|
|
15
|
+
- **Customizable Border Radius**: Five border radius options (none, sm, md, lg, xl)
|
|
16
|
+
- **Optional Backdrop**: Can be disabled for custom overlay behavior
|
|
17
|
+
- **Close Button**: Optional close button in header
|
|
18
|
+
- **Full Accessibility**: ARIA attributes, keyboard navigation, and focus management
|
|
19
|
+
- **Theme Integration**: Material-UI theming with custom color support
|
|
20
|
+
|
|
21
|
+
## Props
|
|
22
|
+
|
|
23
|
+
### Dialog Component Props
|
|
24
|
+
|
|
25
|
+
| Prop | Type | Default | Description |
|
|
26
|
+
|------|------|---------|-------------|
|
|
27
|
+
| `open` | `boolean` | (required) | Controls dialog visibility |
|
|
28
|
+
| `onClose` | `() => void` | `undefined` | Callback when dialog is closed |
|
|
29
|
+
| `variant` | `'default' \| 'glass' \| 'fullscreen' \| 'drawer'` | `'default'` | Visual style variant of the dialog |
|
|
30
|
+
| `size` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `'md'` | Dialog size (xs: 400px, sm: 600px, md: 800px, lg: 1000px, xl: 1200px) |
|
|
31
|
+
| `title` | `ReactNode` | `undefined` | Dialog title content |
|
|
32
|
+
| `description` | `string` | `undefined` | Dialog subtitle/description text |
|
|
33
|
+
| `showCloseButton` | `boolean` | `true` | Whether to show close button in header |
|
|
34
|
+
| `backdrop` | `boolean` | `true` | Whether to show backdrop overlay |
|
|
35
|
+
| `persistent` | `boolean` | `false` | If true, prevents dismissal via backdrop or escape key |
|
|
36
|
+
| `glass` | `boolean` | `false` | Enables glass morphism effect with backdrop blur |
|
|
37
|
+
| `gradient` | `boolean` | `false` | Enables gradient background |
|
|
38
|
+
| `glow` | `boolean` | `false` | Adds glowing shadow effect |
|
|
39
|
+
| `pulse` | `boolean` | `false` | Adds pulsing animation effect |
|
|
40
|
+
| `borderRadius` | `'none' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `'lg'` | Border radius size |
|
|
41
|
+
| `children` | `ReactNode` | (required) | Dialog content |
|
|
42
|
+
| `dataTestId` | `string` | `undefined` | Custom test ID for testing |
|
|
43
|
+
|
|
44
|
+
### DialogHeader Props
|
|
45
|
+
|
|
46
|
+
| Prop | Type | Default | Description |
|
|
47
|
+
|------|------|---------|-------------|
|
|
48
|
+
| `title` | `ReactNode` | `undefined` | Header title content |
|
|
49
|
+
| `subtitle` | `ReactNode` | `undefined` | Header subtitle content |
|
|
50
|
+
| `showCloseButton` | `boolean` | `true` | Whether to show close button |
|
|
51
|
+
| `onClose` | `() => void` | `undefined` | Callback when close button is clicked |
|
|
52
|
+
| `children` | `ReactNode` | `undefined` | Custom header content (overrides title/subtitle) |
|
|
53
|
+
| `dataTestId` | `string` | `undefined` | Custom test ID for testing |
|
|
54
|
+
|
|
55
|
+
### DialogContent Props
|
|
56
|
+
|
|
57
|
+
| Prop | Type | Default | Description |
|
|
58
|
+
|------|------|---------|-------------|
|
|
59
|
+
| `children` | `ReactNode` | (required) | Content to display in dialog body |
|
|
60
|
+
| `dividers` | `boolean` | `false` | Whether to show top and bottom dividers |
|
|
61
|
+
| `dense` | `boolean` | `false` | Use reduced padding for compact layouts |
|
|
62
|
+
| `dataTestId` | `string` | `undefined` | Custom test ID for testing |
|
|
63
|
+
|
|
64
|
+
### DialogActions Props
|
|
65
|
+
|
|
66
|
+
| Prop | Type | Default | Description |
|
|
67
|
+
|------|------|---------|-------------|
|
|
68
|
+
| `children` | `ReactNode` | (required) | Action buttons or elements |
|
|
69
|
+
| `alignment` | `'left' \| 'center' \| 'right' \| 'space-between'` | `'right'` | Alignment of action buttons |
|
|
70
|
+
| `spacing` | `number` | `1` | Gap spacing between buttons |
|
|
71
|
+
| `dataTestId` | `string` | `undefined` | Custom test ID for testing |
|
|
72
|
+
|
|
73
|
+
## Usage
|
|
74
|
+
|
|
75
|
+
### Basic Dialog
|
|
76
|
+
|
|
77
|
+
```tsx
|
|
78
|
+
import { Dialog, DialogContent, DialogActions, Button } from '@procurement/ui';
|
|
79
|
+
|
|
80
|
+
function BasicDialog() {
|
|
81
|
+
const [open, setOpen] = React.useState(false);
|
|
82
|
+
|
|
83
|
+
return (
|
|
84
|
+
<>
|
|
85
|
+
<Button onClick={() => setOpen(true)}>Open Dialog</Button>
|
|
86
|
+
<Dialog
|
|
87
|
+
open={open}
|
|
88
|
+
onClose={() => setOpen(false)}
|
|
89
|
+
title="Basic Dialog"
|
|
90
|
+
description="This is a simple dialog example"
|
|
91
|
+
>
|
|
92
|
+
<DialogContent>
|
|
93
|
+
<p>Dialog content goes here.</p>
|
|
94
|
+
</DialogContent>
|
|
95
|
+
<DialogActions>
|
|
96
|
+
<Button onClick={() => setOpen(false)}>Cancel</Button>
|
|
97
|
+
<Button variant="contained" onClick={() => setOpen(false)}>
|
|
98
|
+
Confirm
|
|
99
|
+
</Button>
|
|
100
|
+
</DialogActions>
|
|
101
|
+
</Dialog>
|
|
102
|
+
</>
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Glass Morphism Effect
|
|
108
|
+
|
|
109
|
+
```tsx
|
|
110
|
+
<Dialog
|
|
111
|
+
open={open}
|
|
112
|
+
onClose={() => setOpen(false)}
|
|
113
|
+
variant="glass"
|
|
114
|
+
title="Glass Effect Dialog"
|
|
115
|
+
glass
|
|
116
|
+
>
|
|
117
|
+
<DialogContent>
|
|
118
|
+
<p>Beautiful glass morphism with backdrop blur.</p>
|
|
119
|
+
</DialogContent>
|
|
120
|
+
<DialogActions>
|
|
121
|
+
<Button onClick={() => setOpen(false)}>Close</Button>
|
|
122
|
+
</DialogActions>
|
|
123
|
+
</Dialog>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Fullscreen Dialog
|
|
127
|
+
|
|
128
|
+
```tsx
|
|
129
|
+
<Dialog
|
|
130
|
+
open={open}
|
|
131
|
+
onClose={() => setOpen(false)}
|
|
132
|
+
variant="fullscreen"
|
|
133
|
+
title="Fullscreen Mode"
|
|
134
|
+
description="Dialog takes up entire viewport"
|
|
135
|
+
>
|
|
136
|
+
<DialogContent>
|
|
137
|
+
<p>Fullscreen dialog content with lots of space.</p>
|
|
138
|
+
</DialogContent>
|
|
139
|
+
<DialogActions>
|
|
140
|
+
<Button onClick={() => setOpen(false)}>Close</Button>
|
|
141
|
+
</DialogActions>
|
|
142
|
+
</Dialog>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Drawer Dialog
|
|
146
|
+
|
|
147
|
+
```tsx
|
|
148
|
+
<Dialog
|
|
149
|
+
open={open}
|
|
150
|
+
onClose={() => setOpen(false)}
|
|
151
|
+
variant="drawer"
|
|
152
|
+
title="Drawer Panel"
|
|
153
|
+
size="md"
|
|
154
|
+
>
|
|
155
|
+
<DialogContent>
|
|
156
|
+
<p>Slides in from the right side.</p>
|
|
157
|
+
</DialogContent>
|
|
158
|
+
<DialogActions>
|
|
159
|
+
<Button onClick={() => setOpen(false)}>Close</Button>
|
|
160
|
+
</DialogActions>
|
|
161
|
+
</Dialog>
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Persistent Dialog
|
|
165
|
+
|
|
166
|
+
```tsx
|
|
167
|
+
<Dialog
|
|
168
|
+
open={open}
|
|
169
|
+
onClose={() => setOpen(false)}
|
|
170
|
+
title="Confirm Action"
|
|
171
|
+
persistent
|
|
172
|
+
>
|
|
173
|
+
<DialogContent>
|
|
174
|
+
<p>This dialog cannot be dismissed by clicking the backdrop or pressing escape.</p>
|
|
175
|
+
</DialogContent>
|
|
176
|
+
<DialogActions>
|
|
177
|
+
<Button onClick={() => setOpen(false)}>Cancel</Button>
|
|
178
|
+
<Button variant="contained" color="error" onClick={handleDelete}>
|
|
179
|
+
Delete
|
|
180
|
+
</Button>
|
|
181
|
+
</DialogActions>
|
|
182
|
+
</Dialog>
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### With Glow and Pulse Effects
|
|
186
|
+
|
|
187
|
+
```tsx
|
|
188
|
+
<Dialog
|
|
189
|
+
open={open}
|
|
190
|
+
onClose={() => setOpen(false)}
|
|
191
|
+
title="Attention Required"
|
|
192
|
+
glow
|
|
193
|
+
pulse
|
|
194
|
+
variant="default"
|
|
195
|
+
>
|
|
196
|
+
<DialogContent>
|
|
197
|
+
<p>Important message with visual effects.</p>
|
|
198
|
+
</DialogContent>
|
|
199
|
+
<DialogActions>
|
|
200
|
+
<Button onClick={() => setOpen(false)}>Acknowledge</Button>
|
|
201
|
+
</DialogActions>
|
|
202
|
+
</Dialog>
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Custom Header
|
|
206
|
+
|
|
207
|
+
```tsx
|
|
208
|
+
<Dialog open={open} onClose={() => setOpen(false)}>
|
|
209
|
+
<DialogHeader>
|
|
210
|
+
<Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>
|
|
211
|
+
<Avatar>JD</Avatar>
|
|
212
|
+
<Box>
|
|
213
|
+
<Typography variant="h6">Custom Header</Typography>
|
|
214
|
+
<Typography variant="caption">With custom layout</Typography>
|
|
215
|
+
</Box>
|
|
216
|
+
</Box>
|
|
217
|
+
</DialogHeader>
|
|
218
|
+
<DialogContent>
|
|
219
|
+
<p>Dialog with custom header content.</p>
|
|
220
|
+
</DialogContent>
|
|
221
|
+
<DialogActions>
|
|
222
|
+
<Button onClick={() => setOpen(false)}>Close</Button>
|
|
223
|
+
</DialogActions>
|
|
224
|
+
</Dialog>
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Different Sizes
|
|
228
|
+
|
|
229
|
+
```tsx
|
|
230
|
+
// Extra Small
|
|
231
|
+
<Dialog open={open} onClose={handleClose} title="XS Dialog" size="xs">
|
|
232
|
+
<DialogContent>Compact dialog (400px)</DialogContent>
|
|
233
|
+
</Dialog>
|
|
234
|
+
|
|
235
|
+
// Small
|
|
236
|
+
<Dialog open={open} onClose={handleClose} title="SM Dialog" size="sm">
|
|
237
|
+
<DialogContent>Small dialog (600px)</DialogContent>
|
|
238
|
+
</Dialog>
|
|
239
|
+
|
|
240
|
+
// Medium (default)
|
|
241
|
+
<Dialog open={open} onClose={handleClose} title="MD Dialog" size="md">
|
|
242
|
+
<DialogContent>Medium dialog (800px)</DialogContent>
|
|
243
|
+
</Dialog>
|
|
244
|
+
|
|
245
|
+
// Large
|
|
246
|
+
<Dialog open={open} onClose={handleClose} title="LG Dialog" size="lg">
|
|
247
|
+
<DialogContent>Large dialog (1000px)</DialogContent>
|
|
248
|
+
</Dialog>
|
|
249
|
+
|
|
250
|
+
// Extra Large
|
|
251
|
+
<Dialog open={open} onClose={handleClose} title="XL Dialog" size="xl">
|
|
252
|
+
<DialogContent>Extra large dialog (1200px)</DialogContent>
|
|
253
|
+
</Dialog>
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### Form Dialog
|
|
257
|
+
|
|
258
|
+
```tsx
|
|
259
|
+
function FormDialog() {
|
|
260
|
+
const [open, setOpen] = React.useState(false);
|
|
261
|
+
const [formData, setFormData] = React.useState({ name: '', email: '' });
|
|
262
|
+
|
|
263
|
+
const handleSubmit = () => {
|
|
264
|
+
console.log('Submitting:', formData);
|
|
265
|
+
setOpen(false);
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
return (
|
|
269
|
+
<Dialog
|
|
270
|
+
open={open}
|
|
271
|
+
onClose={() => setOpen(false)}
|
|
272
|
+
title="User Information"
|
|
273
|
+
description="Please fill in your details"
|
|
274
|
+
>
|
|
275
|
+
<DialogContent dividers>
|
|
276
|
+
<TextField
|
|
277
|
+
label="Name"
|
|
278
|
+
fullWidth
|
|
279
|
+
value={formData.name}
|
|
280
|
+
onChange={(e) => setFormData({ ...formData, name: e.target.value })}
|
|
281
|
+
sx={{ mb: 2 }}
|
|
282
|
+
/>
|
|
283
|
+
<TextField
|
|
284
|
+
label="Email"
|
|
285
|
+
fullWidth
|
|
286
|
+
type="email"
|
|
287
|
+
value={formData.email}
|
|
288
|
+
onChange={(e) => setFormData({ ...formData, email: e.target.value })}
|
|
289
|
+
/>
|
|
290
|
+
</DialogContent>
|
|
291
|
+
<DialogActions alignment="space-between">
|
|
292
|
+
<Button onClick={() => setOpen(false)}>Cancel</Button>
|
|
293
|
+
<Button variant="contained" onClick={handleSubmit}>
|
|
294
|
+
Submit
|
|
295
|
+
</Button>
|
|
296
|
+
</DialogActions>
|
|
297
|
+
</Dialog>
|
|
298
|
+
);
|
|
299
|
+
}
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
## Variants
|
|
303
|
+
|
|
304
|
+
### Default
|
|
305
|
+
Standard dialog with Material-UI paper background and elevation.
|
|
306
|
+
|
|
307
|
+
### Glass
|
|
308
|
+
Glass morphism effect with backdrop blur, semi-transparent background, and subtle border.
|
|
309
|
+
|
|
310
|
+
### Fullscreen
|
|
311
|
+
Full viewport dialog that takes up the entire screen, useful for complex forms or detailed views.
|
|
312
|
+
|
|
313
|
+
### Drawer
|
|
314
|
+
Slides in from the right side of the screen, similar to a side panel or drawer.
|
|
315
|
+
|
|
316
|
+
## Accessibility
|
|
317
|
+
|
|
318
|
+
The Dialog component implements comprehensive accessibility features:
|
|
319
|
+
|
|
320
|
+
- **ARIA Roles**: Uses `role="dialog"` with proper ARIA attributes
|
|
321
|
+
- **ARIA Labels**: Proper labeling for title (`aria-labelledby`) and description (`aria-describedby`)
|
|
322
|
+
- **Focus Management**:
|
|
323
|
+
- Focus is trapped within dialog when open
|
|
324
|
+
- Focus returns to trigger element when closed
|
|
325
|
+
- First focusable element receives focus on open
|
|
326
|
+
- **Keyboard Navigation**:
|
|
327
|
+
- `Escape` - Closes dialog (unless persistent mode is enabled)
|
|
328
|
+
- `Tab` - Navigates between focusable elements
|
|
329
|
+
- `Shift + Tab` - Reverse navigation
|
|
330
|
+
- **Screen Reader Support**: Announces dialog opening and closing
|
|
331
|
+
- **Backdrop Click**: Can be disabled via `persistent` prop for better UX
|
|
332
|
+
|
|
333
|
+
## Styling
|
|
334
|
+
|
|
335
|
+
The Dialog component uses Material-UI theming and supports:
|
|
336
|
+
|
|
337
|
+
- Theme-aware colors and backgrounds
|
|
338
|
+
- Responsive design that adapts to viewport size
|
|
339
|
+
- Custom border radius configurations
|
|
340
|
+
- Glass morphism with backdrop blur
|
|
341
|
+
- Gradient backgrounds
|
|
342
|
+
- Glow effects using box-shadow
|
|
343
|
+
- Pulse animations with keyframes
|
|
344
|
+
- Smooth transitions for all interactive states
|
|
345
|
+
|
|
346
|
+
## Best Practices
|
|
347
|
+
|
|
348
|
+
1. **Use appropriate variants**: Choose variant based on context (default for most cases, fullscreen for complex content, drawer for side panels)
|
|
349
|
+
2. **Keep titles concise**: Dialog titles should be clear and brief
|
|
350
|
+
3. **Use persistent mode sparingly**: Only for critical actions that require user confirmation
|
|
351
|
+
4. **Provide clear actions**: Always include clear primary and secondary actions
|
|
352
|
+
5. **Consider mobile**: Test dialog responsiveness on mobile devices
|
|
353
|
+
6. **Avoid nesting dialogs**: Don't open dialogs from within dialogs
|
|
354
|
+
7. **Focus management**: Ensure proper focus handling for keyboard users
|
|
355
|
+
8. **Loading states**: Show loading indicators for async operations in dialogs
|
|
356
|
+
|
|
357
|
+
## Testing
|
|
358
|
+
|
|
359
|
+
### Test IDs
|
|
360
|
+
|
|
361
|
+
| Test ID | Element | Description |
|
|
362
|
+
|---------|---------|-------------|
|
|
363
|
+
| `dialog` | Dialog container | Main dialog wrapper (Paper or Drawer component) |
|
|
364
|
+
| `dialog-title` | Dialog title | Header title section |
|
|
365
|
+
| `dialog-content` | Dialog content | Dialog body content area |
|
|
366
|
+
| `dialog-actions` | Dialog actions | Footer actions container |
|
|
367
|
+
| `dialog-close` | Close button | Close button in header (when showCloseButton is true) |
|
|
368
|
+
|
|
369
|
+
Custom test IDs can be provided via the `dataTestId` prop:
|
|
370
|
+
```typescript
|
|
371
|
+
<Dialog dataTestId="custom-dialog" />
|
|
372
|
+
// Results in: custom-dialog, custom-dialog-title, custom-dialog-content, custom-dialog-actions, custom-dialog-close
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
The `dataTestId` prop can also be passed to individual sub-components:
|
|
376
|
+
```typescript
|
|
377
|
+
<DialogHeader dataTestId="header" />
|
|
378
|
+
<DialogContent dataTestId="content" />
|
|
379
|
+
<DialogActions dataTestId="actions" />
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### Testing Best Practices
|
|
383
|
+
|
|
384
|
+
**Wait for Dialog to Open:**
|
|
385
|
+
```typescript
|
|
386
|
+
const dialog = await canvas.findByTestId('dialog');
|
|
387
|
+
expect(dialog).toBeInTheDocument();
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
**Test Close Interaction:**
|
|
391
|
+
```typescript
|
|
392
|
+
const closeButton = await canvas.findByTestId('dialog-close');
|
|
393
|
+
await userEvent.click(closeButton);
|
|
394
|
+
expect(onClose).toHaveBeenCalled();
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
**Test Actions:**
|
|
398
|
+
```typescript
|
|
399
|
+
const actions = await canvas.findByTestId('dialog-actions');
|
|
400
|
+
const confirmButton = within(actions).getByRole('button', { name: /confirm/i });
|
|
401
|
+
await userEvent.click(confirmButton);
|
|
402
|
+
expect(handleConfirm).toHaveBeenCalled();
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
**Test Backdrop Click:**
|
|
406
|
+
```typescript
|
|
407
|
+
// For non-persistent dialogs
|
|
408
|
+
const backdrop = document.querySelector('.MuiBackdrop-root');
|
|
409
|
+
await userEvent.click(backdrop);
|
|
410
|
+
expect(onClose).toHaveBeenCalled();
|
|
411
|
+
|
|
412
|
+
// For persistent dialogs
|
|
413
|
+
await userEvent.click(backdrop);
|
|
414
|
+
expect(onClose).not.toHaveBeenCalled();
|
|
415
|
+
```
|
|
416
|
+
|
|
417
|
+
**Test Keyboard Navigation:**
|
|
418
|
+
```typescript
|
|
419
|
+
await userEvent.keyboard('{Escape}');
|
|
420
|
+
expect(onClose).toHaveBeenCalled();
|
|
421
|
+
|
|
422
|
+
await userEvent.keyboard('{Tab}');
|
|
423
|
+
expect(document.activeElement).toBe(firstFocusableElement);
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
**Test Focus Management:**
|
|
427
|
+
```typescript
|
|
428
|
+
const dialog = await canvas.findByTestId('dialog');
|
|
429
|
+
const firstButton = within(dialog).getAllByRole('button')[0];
|
|
430
|
+
expect(document.activeElement).toBe(firstButton);
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
### Common Test Scenarios
|
|
434
|
+
|
|
435
|
+
1. **Dialog Opens and Closes** - Verify open prop controls visibility
|
|
436
|
+
2. **Close Button Functionality** - Test close button triggers onClose callback
|
|
437
|
+
3. **Backdrop Dismiss** - Test clicking backdrop closes dialog (when not persistent)
|
|
438
|
+
4. **Persistent Mode** - Verify persistent dialog cannot be dismissed via backdrop/escape
|
|
439
|
+
5. **Keyboard Navigation** - Test escape key closes dialog
|
|
440
|
+
6. **Focus Trap** - Verify focus stays within dialog when open
|
|
441
|
+
7. **Multiple Variants** - Test all variants render correctly (default, glass, fullscreen, drawer)
|
|
442
|
+
8. **Size Variations** - Test all size options
|
|
443
|
+
9. **Custom Actions** - Verify action buttons work correctly
|
|
444
|
+
10. **Form Submission** - Test form dialogs handle submit/cancel properly
|
|
445
|
+
11. **Accessibility** - Verify ARIA attributes are present and correct
|
|
446
|
+
12. **Visual Effects** - Test glow and pulse effects render without errors
|
|
447
|
+
|
|
448
|
+
### Example Test
|
|
449
|
+
|
|
450
|
+
```typescript
|
|
451
|
+
import { render, screen, within, userEvent } from '@testing-library/react';
|
|
452
|
+
import { Dialog, DialogContent, DialogActions } from './Dialog';
|
|
453
|
+
|
|
454
|
+
describe('Dialog Component', () => {
|
|
455
|
+
it('should open and close dialog', async () => {
|
|
456
|
+
const onClose = vi.fn();
|
|
457
|
+
const { rerender } = render(
|
|
458
|
+
<Dialog open={false} onClose={onClose} title="Test Dialog">
|
|
459
|
+
<DialogContent>Content</DialogContent>
|
|
460
|
+
</Dialog>
|
|
461
|
+
);
|
|
462
|
+
|
|
463
|
+
expect(screen.queryByTestId('dialog')).not.toBeInTheDocument();
|
|
464
|
+
|
|
465
|
+
rerender(
|
|
466
|
+
<Dialog open={true} onClose={onClose} title="Test Dialog">
|
|
467
|
+
<DialogContent>Content</DialogContent>
|
|
468
|
+
</Dialog>
|
|
469
|
+
);
|
|
470
|
+
|
|
471
|
+
const dialog = await screen.findByTestId('dialog');
|
|
472
|
+
expect(dialog).toBeInTheDocument();
|
|
473
|
+
expect(screen.getByTestId('dialog-title')).toHaveTextContent('Test Dialog');
|
|
474
|
+
});
|
|
475
|
+
|
|
476
|
+
it('should call onClose when close button is clicked', async () => {
|
|
477
|
+
const onClose = vi.fn();
|
|
478
|
+
render(
|
|
479
|
+
<Dialog open={true} onClose={onClose} title="Test Dialog">
|
|
480
|
+
<DialogContent>Content</DialogContent>
|
|
481
|
+
</Dialog>
|
|
482
|
+
);
|
|
483
|
+
|
|
484
|
+
const closeButton = await screen.findByTestId('dialog-close');
|
|
485
|
+
await userEvent.click(closeButton);
|
|
486
|
+
expect(onClose).toHaveBeenCalledTimes(1);
|
|
487
|
+
});
|
|
488
|
+
|
|
489
|
+
it('should not close persistent dialog on backdrop click', async () => {
|
|
490
|
+
const onClose = vi.fn();
|
|
491
|
+
render(
|
|
492
|
+
<Dialog open={true} onClose={onClose} title="Test Dialog" persistent>
|
|
493
|
+
<DialogContent>Content</DialogContent>
|
|
494
|
+
</Dialog>
|
|
495
|
+
);
|
|
496
|
+
|
|
497
|
+
const backdrop = document.querySelector('.MuiBackdrop-root');
|
|
498
|
+
await userEvent.click(backdrop);
|
|
499
|
+
expect(onClose).not.toHaveBeenCalled();
|
|
500
|
+
});
|
|
501
|
+
|
|
502
|
+
it('should render custom actions', async () => {
|
|
503
|
+
const handleConfirm = vi.fn();
|
|
504
|
+
render(
|
|
505
|
+
<Dialog open={true} title="Confirm Action">
|
|
506
|
+
<DialogContent>Are you sure?</DialogContent>
|
|
507
|
+
<DialogActions>
|
|
508
|
+
<Button onClick={handleConfirm}>Confirm</Button>
|
|
509
|
+
</DialogActions>
|
|
510
|
+
</Dialog>
|
|
511
|
+
);
|
|
512
|
+
|
|
513
|
+
const actions = await screen.findByTestId('dialog-actions');
|
|
514
|
+
const confirmButton = within(actions).getByRole('button', { name: /confirm/i });
|
|
515
|
+
await userEvent.click(confirmButton);
|
|
516
|
+
expect(handleConfirm).toHaveBeenCalled();
|
|
517
|
+
});
|
|
518
|
+
});
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
## Related Components
|
|
522
|
+
|
|
523
|
+
- **AlertDialog** - Simplified dialog for alerts and confirmations
|
|
524
|
+
- **Drawer** - Side panel component (used internally for drawer variant)
|
|
525
|
+
- **Modal** - Lower-level modal component
|
|
526
|
+
- **Popover** - Lightweight overlay for contextual content
|
|
527
|
+
- **Sheet** - Bottom sheet component for mobile-first experiences
|