@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,82 @@
|
|
|
1
|
+
import type React from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A single toggleable filter chip in the palette's filter row (e.g. "Last 7
|
|
5
|
+
* days", "From me"). App-agnostic: the host owns the ids and what they mean.
|
|
6
|
+
*/
|
|
7
|
+
export interface SearchFilterChip {
|
|
8
|
+
/** Stable id toggled in {@link SearchPaletteProps.activeFilterIds}. */
|
|
9
|
+
id: string;
|
|
10
|
+
/** Chip text. */
|
|
11
|
+
label: string;
|
|
12
|
+
/** Optional leading icon node. */
|
|
13
|
+
icon?: React.ReactNode;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* The leading visual of a result row — a product image, a contact avatar, or a
|
|
18
|
+
* type icon. Mirrors the Gmail-style result list where each row has one lead.
|
|
19
|
+
*/
|
|
20
|
+
export type SearchResultLead =
|
|
21
|
+
| { kind: 'image'; src: string; alt?: string }
|
|
22
|
+
| { kind: 'avatar'; src?: string; alt?: string; fallback?: string }
|
|
23
|
+
| { kind: 'icon'; node: React.ReactNode };
|
|
24
|
+
|
|
25
|
+
export interface SearchPaletteProps<T> {
|
|
26
|
+
/** Controlled query string. */
|
|
27
|
+
value: string;
|
|
28
|
+
/** Query change (typing). */
|
|
29
|
+
onChange: (value: string) => void;
|
|
30
|
+
|
|
31
|
+
/** Result items to render (already filtered/ranked by the host). */
|
|
32
|
+
items: T[];
|
|
33
|
+
/** Stable key extractor. */
|
|
34
|
+
getKey: (item: T) => string;
|
|
35
|
+
/** Primary line (the match is bold-highlighted against the query). */
|
|
36
|
+
getPrimary: (item: T) => string;
|
|
37
|
+
/** Optional secondary line (e.g. email, SKU, category). */
|
|
38
|
+
getSecondary?: (item: T) => string | undefined;
|
|
39
|
+
/** Optional leading visual (image / avatar / icon). */
|
|
40
|
+
getLead?: (item: T) => SearchResultLead | undefined;
|
|
41
|
+
/** Optional trailing node (e.g. a date). */
|
|
42
|
+
getTrailing?: (item: T) => React.ReactNode | undefined;
|
|
43
|
+
/** Selection handler for a result row. */
|
|
44
|
+
onSelect: (item: T) => void;
|
|
45
|
+
/** Max rows shown before the list scrolls / truncates (default 5). */
|
|
46
|
+
maxItems?: number;
|
|
47
|
+
|
|
48
|
+
/** Filter chips row. Omit for no chips. */
|
|
49
|
+
filters?: SearchFilterChip[];
|
|
50
|
+
/** Ids of the currently-active chips. */
|
|
51
|
+
activeFilterIds?: string[];
|
|
52
|
+
/** Toggle handler for a chip id. */
|
|
53
|
+
onToggleFilter?: (id: string) => void;
|
|
54
|
+
|
|
55
|
+
/** Footer "see all results" action; hidden when omitted. */
|
|
56
|
+
onSubmitAll?: (query: string) => void;
|
|
57
|
+
/** Footer label builder; defaults to `Todos os resultados para "{q}"`. */
|
|
58
|
+
submitAllLabel?: (query: string) => string;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Content shown when the query is empty (e.g. a "Populares" block). Keeps the
|
|
62
|
+
* component app-agnostic — the host supplies whatever pre-typing UI it wants.
|
|
63
|
+
*/
|
|
64
|
+
emptyQueryContent?: React.ReactNode;
|
|
65
|
+
/** Message when a non-empty query yields no items. */
|
|
66
|
+
noResultsLabel?: string;
|
|
67
|
+
|
|
68
|
+
/** Loading spinner in the input while results resolve. */
|
|
69
|
+
isLoading?: boolean;
|
|
70
|
+
/** Inline ghost-text completion of the top result (Tab/→ accepts). */
|
|
71
|
+
showGhostText?: boolean;
|
|
72
|
+
/** Autofocus the input on mount. */
|
|
73
|
+
autoFocus?: boolean;
|
|
74
|
+
placeholder?: string;
|
|
75
|
+
inputAriaLabel?: string;
|
|
76
|
+
/** Esc handler (host closes the overlay). */
|
|
77
|
+
onClose?: () => void;
|
|
78
|
+
|
|
79
|
+
className?: string;
|
|
80
|
+
/** Test id for the outer card (default `search-palette`). */
|
|
81
|
+
dataTestId?: string;
|
|
82
|
+
}
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
# Select Component
|
|
2
|
+
|
|
3
|
+
A customizable select dropdown component with comprehensive functionality for choosing from a list of options.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
The Select component provides a dropdown interface for selecting one option from a list. Built on MUI's Select component, it includes enhanced styling, accessibility features, and supports various visual variants including glass and gradient effects.
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
import { Select } from '@procurement/ui';
|
|
13
|
+
|
|
14
|
+
const options = [
|
|
15
|
+
{ value: 'option1', label: 'Option 1' },
|
|
16
|
+
{ value: 'option2', label: 'Option 2' },
|
|
17
|
+
{ value: 'option3', label: 'Option 3' },
|
|
18
|
+
];
|
|
19
|
+
|
|
20
|
+
function MyComponent() {
|
|
21
|
+
return (
|
|
22
|
+
<Select
|
|
23
|
+
options={options}
|
|
24
|
+
label="Select an option"
|
|
25
|
+
placeholder="Choose one"
|
|
26
|
+
onValueChange={(value) => console.log('Selected:', value)}
|
|
27
|
+
/>
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Props
|
|
33
|
+
|
|
34
|
+
### Required Props
|
|
35
|
+
|
|
36
|
+
- `options`: Array of option objects with `value`, `label`, and optional `disabled` properties
|
|
37
|
+
|
|
38
|
+
### Optional Props
|
|
39
|
+
|
|
40
|
+
- `value`: Currently selected value (controlled)
|
|
41
|
+
- `defaultValue`: Initial value for uncontrolled usage
|
|
42
|
+
- `onValueChange`: Callback function when selection changes
|
|
43
|
+
- `label`: Label text displayed above the select
|
|
44
|
+
- `placeholder`: Placeholder text when no option is selected
|
|
45
|
+
- `helperText`: Helper text displayed below the select
|
|
46
|
+
- `error`: Whether to display error state styling
|
|
47
|
+
- `disabled`: Whether the select is disabled
|
|
48
|
+
- `size`: Size variant ('small' | 'medium')
|
|
49
|
+
- `variant`: Visual style ('default' | 'glass' | 'gradient')
|
|
50
|
+
- `glow`: Whether to show glow effect on hover/focus
|
|
51
|
+
- `pulse`: Whether to show pulse animation
|
|
52
|
+
- `fullWidth`: Whether select should take full width of container
|
|
53
|
+
|
|
54
|
+
## Visual Variants
|
|
55
|
+
|
|
56
|
+
### Default
|
|
57
|
+
|
|
58
|
+
Standard Material-UI select styling with theme colors.
|
|
59
|
+
|
|
60
|
+
### Glass
|
|
61
|
+
|
|
62
|
+
Glassmorphism effect with blur backdrop and translucent appearance.
|
|
63
|
+
|
|
64
|
+
### Gradient
|
|
65
|
+
|
|
66
|
+
Animated gradient border that changes on hover and focus.
|
|
67
|
+
|
|
68
|
+
## Accessibility Features
|
|
69
|
+
|
|
70
|
+
- Full keyboard navigation support (Arrow keys, Enter, Escape)
|
|
71
|
+
- Screen reader compatibility with proper ARIA labels
|
|
72
|
+
- Focus management and visual focus indicators
|
|
73
|
+
- Support for disabled states
|
|
74
|
+
|
|
75
|
+
## Examples
|
|
76
|
+
|
|
77
|
+
### Basic Usage
|
|
78
|
+
|
|
79
|
+
```tsx
|
|
80
|
+
<Select
|
|
81
|
+
options={[
|
|
82
|
+
{ value: 'us', label: 'United States' },
|
|
83
|
+
{ value: 'ca', label: 'Canada' },
|
|
84
|
+
{ value: 'uk', label: 'United Kingdom' },
|
|
85
|
+
]}
|
|
86
|
+
label="Country"
|
|
87
|
+
placeholder="Select your country"
|
|
88
|
+
/>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### With Error State
|
|
92
|
+
|
|
93
|
+
```tsx
|
|
94
|
+
<Select
|
|
95
|
+
options={options}
|
|
96
|
+
label="Required Field"
|
|
97
|
+
placeholder="Please select an option"
|
|
98
|
+
error={true}
|
|
99
|
+
helperText="This field is required"
|
|
100
|
+
/>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Glass Variant with Effects
|
|
104
|
+
|
|
105
|
+
```tsx
|
|
106
|
+
<Select
|
|
107
|
+
options={options}
|
|
108
|
+
label="Glass Select"
|
|
109
|
+
variant="glass"
|
|
110
|
+
glow={true}
|
|
111
|
+
pulse={true}
|
|
112
|
+
placeholder="Choose an option"
|
|
113
|
+
/>
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Best Practices
|
|
117
|
+
|
|
118
|
+
- Always provide descriptive labels for accessibility
|
|
119
|
+
- Use helper text to provide additional context
|
|
120
|
+
- Consider using error states for form validation
|
|
121
|
+
- For long lists, consider grouping options or adding search functionality
|
|
122
|
+
- Test keyboard navigation to ensure accessibility compliance
|
|
123
|
+
- Use appropriate size variants based on your layout needs
|
|
124
|
+
|
|
125
|
+
## Integration Notes
|
|
126
|
+
|
|
127
|
+
- Works seamlessly with form libraries like React Hook Form
|
|
128
|
+
- Supports controlled and uncontrolled usage patterns
|
|
129
|
+
- Integrates with MUI theme system for consistent styling
|
|
130
|
+
- Compatible with all major browsers and screen readers
|
|
131
|
+
|
|
132
|
+
## Testing
|
|
133
|
+
|
|
134
|
+
### Test IDs
|
|
135
|
+
|
|
136
|
+
The Select component includes `data-testid` attributes for reliable testing:
|
|
137
|
+
|
|
138
|
+
| Test ID | Element | Description |
|
|
139
|
+
|---------|---------|-------------|
|
|
140
|
+
| `{dataTestId}` | FormControl | Root FormControl wrapper element |
|
|
141
|
+
| `{dataTestId}-select` | Select element | The MUI Select component |
|
|
142
|
+
| `{dataTestId}-option-{value}` | Menu items | Individual option elements (one per option) |
|
|
143
|
+
|
|
144
|
+
**Default Test IDs (when no dataTestId prop provided):**
|
|
145
|
+
- `select` - The Select element
|
|
146
|
+
- `option-{value}` - Each option element
|
|
147
|
+
|
|
148
|
+
### Testing Best Practices
|
|
149
|
+
|
|
150
|
+
**Wait for Select to Render:**
|
|
151
|
+
```typescript
|
|
152
|
+
const select = await canvas.findByTestId('country-select-select');
|
|
153
|
+
expect(select).toBeInTheDocument();
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**Test Opening Dropdown:**
|
|
157
|
+
```typescript
|
|
158
|
+
const select = await canvas.findByTestId('select-select');
|
|
159
|
+
await userEvent.click(select);
|
|
160
|
+
|
|
161
|
+
// Wait for dropdown to open
|
|
162
|
+
await waitFor(() => {
|
|
163
|
+
const dropdown = document.querySelector('[role="listbox"]');
|
|
164
|
+
expect(dropdown).toBeInTheDocument();
|
|
165
|
+
});
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
**Test Selecting Option:**
|
|
169
|
+
```typescript
|
|
170
|
+
const select = await canvas.findByTestId('country-select-select');
|
|
171
|
+
await userEvent.click(select);
|
|
172
|
+
|
|
173
|
+
// Find and click option
|
|
174
|
+
const option = await canvas.findByTestId('country-select-option-us');
|
|
175
|
+
await userEvent.click(option);
|
|
176
|
+
|
|
177
|
+
expect(onValueChange).toHaveBeenCalledWith('us');
|
|
178
|
+
expect(select).toHaveTextContent('United States');
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
**Test with Default Value:**
|
|
182
|
+
```typescript
|
|
183
|
+
const select = await canvas.findByTestId('select-select');
|
|
184
|
+
expect(select).toHaveTextContent('United States'); // Default selection
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**Test Disabled State:**
|
|
188
|
+
```typescript
|
|
189
|
+
const select = await canvas.findByTestId('disabled-select-select');
|
|
190
|
+
expect(select).toHaveAttribute('aria-disabled', 'true');
|
|
191
|
+
|
|
192
|
+
// Clicking should not open dropdown
|
|
193
|
+
await userEvent.click(select);
|
|
194
|
+
const dropdown = document.querySelector('[role="listbox"]');
|
|
195
|
+
expect(dropdown).not.toBeInTheDocument();
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**Test Error State:**
|
|
199
|
+
```typescript
|
|
200
|
+
const formControl = await canvas.findByTestId('error-select');
|
|
201
|
+
expect(formControl).toHaveClass('Mui-error');
|
|
202
|
+
|
|
203
|
+
// Helper text should show error
|
|
204
|
+
const helperText = formControl.querySelector('.MuiFormHelperText-root');
|
|
205
|
+
expect(helperText).toHaveTextContent('This field is required');
|
|
206
|
+
expect(helperText).toHaveClass('Mui-error');
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Test All Options Render:**
|
|
210
|
+
```typescript
|
|
211
|
+
const select = await canvas.findByTestId('select-select');
|
|
212
|
+
await userEvent.click(select);
|
|
213
|
+
|
|
214
|
+
// Check all options exist
|
|
215
|
+
for (const option of options) {
|
|
216
|
+
const optionElement = await canvas.findByTestId(`select-option-${option.value}`);
|
|
217
|
+
expect(optionElement).toBeInTheDocument();
|
|
218
|
+
expect(optionElement).toHaveTextContent(option.label);
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
**Test Keyboard Navigation:**
|
|
223
|
+
```typescript
|
|
224
|
+
const select = await canvas.findByTestId('select-select');
|
|
225
|
+
select.focus();
|
|
226
|
+
|
|
227
|
+
// Open with Space or Enter
|
|
228
|
+
await userEvent.keyboard('{Space}');
|
|
229
|
+
await waitFor(() => {
|
|
230
|
+
expect(document.querySelector('[role="listbox"]')).toBeInTheDocument();
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
// Navigate with arrow keys
|
|
234
|
+
await userEvent.keyboard('{ArrowDown}');
|
|
235
|
+
await userEvent.keyboard('{Enter}');
|
|
236
|
+
|
|
237
|
+
expect(onValueChange).toHaveBeenCalled();
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Common Test Scenarios
|
|
241
|
+
|
|
242
|
+
1. **Basic Rendering** - Verify select renders with label and options
|
|
243
|
+
2. **Option Selection** - Test clicking options and value change
|
|
244
|
+
3. **Default Value** - Test initial selected value
|
|
245
|
+
4. **Placeholder** - Verify placeholder shows when no selection
|
|
246
|
+
5. **Disabled State** - Test disabled select and disabled options
|
|
247
|
+
6. **Error State** - Test error styling and helper text
|
|
248
|
+
7. **Variants** - Test default, glass, and gradient styles
|
|
249
|
+
8. **Visual Effects** - Test glow and pulse animations
|
|
250
|
+
9. **Keyboard Navigation** - Test arrow keys and Enter/Space
|
|
251
|
+
10. **Multiple Options** - Test with many options
|
|
252
|
+
11. **Full Width** - Test fullWidth prop behavior
|
|
253
|
+
12. **Accessibility** - Verify ARIA attributes and screen reader support
|
|
254
|
+
13. **Form Integration** - Test with form libraries like React Hook Form
|
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
import { Stack } from '@mui/material';
|
|
2
|
+
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
3
|
+
|
|
4
|
+
import { Select } from './Select';
|
|
5
|
+
|
|
6
|
+
const meta: Meta<typeof Select> = {
|
|
7
|
+
title: 'Form/Select',
|
|
8
|
+
component: Select,
|
|
9
|
+
parameters: {
|
|
10
|
+
layout: 'centered',
|
|
11
|
+
},
|
|
12
|
+
tags: ['autodocs', 'component:Select'],
|
|
13
|
+
argTypes: {
|
|
14
|
+
variant: {
|
|
15
|
+
control: { type: 'select' },
|
|
16
|
+
options: ['default', 'glass', 'gradient'],
|
|
17
|
+
description: 'Visual variant of the select component',
|
|
18
|
+
},
|
|
19
|
+
size: {
|
|
20
|
+
control: { type: 'select' },
|
|
21
|
+
options: ['small', 'medium'],
|
|
22
|
+
description: 'Size of the select component',
|
|
23
|
+
},
|
|
24
|
+
glow: {
|
|
25
|
+
control: 'boolean',
|
|
26
|
+
description: 'Whether to show a glow effect',
|
|
27
|
+
},
|
|
28
|
+
pulse: {
|
|
29
|
+
control: 'boolean',
|
|
30
|
+
description: 'Whether to show a pulse animation',
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export default meta;
|
|
36
|
+
type Story = StoryObj<typeof meta>;
|
|
37
|
+
|
|
38
|
+
const defaultOptions = [
|
|
39
|
+
{ value: 'option1', label: 'Option 1' },
|
|
40
|
+
{ value: 'option2', label: 'Option 2' },
|
|
41
|
+
{ value: 'option3', label: 'Option 3' },
|
|
42
|
+
{ value: 'option4', label: 'Option 4 (Disabled)', disabled: true },
|
|
43
|
+
];
|
|
44
|
+
|
|
45
|
+
const countryOptions = [
|
|
46
|
+
{ value: 'us', label: 'United States' },
|
|
47
|
+
{ value: 'ca', label: 'Canada' },
|
|
48
|
+
{ value: 'uk', label: 'United Kingdom' },
|
|
49
|
+
{ value: 'de', label: 'Germany' },
|
|
50
|
+
{ value: 'fr', label: 'France' },
|
|
51
|
+
{ value: 'jp', label: 'Japan' },
|
|
52
|
+
{ value: 'au', label: 'Australia' },
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
export const Default: Story = {
|
|
56
|
+
args: {
|
|
57
|
+
options: defaultOptions,
|
|
58
|
+
label: 'Select Option',
|
|
59
|
+
placeholder: 'Choose an option',
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export const WithLabel: Story = {
|
|
64
|
+
args: {
|
|
65
|
+
options: countryOptions,
|
|
66
|
+
label: 'Country',
|
|
67
|
+
placeholder: 'Select your country',
|
|
68
|
+
helperText: 'Choose your country of residence',
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
export const AllSizes: Story = {
|
|
73
|
+
render: () => (
|
|
74
|
+
<Stack spacing={3} sx={{ width: 300 }}>
|
|
75
|
+
<Select options={defaultOptions} label="Small Select" size="small" placeholder="Small size" />
|
|
76
|
+
<Select
|
|
77
|
+
options={defaultOptions}
|
|
78
|
+
label="Medium Select"
|
|
79
|
+
size="medium"
|
|
80
|
+
placeholder="Medium size"
|
|
81
|
+
/>
|
|
82
|
+
</Stack>
|
|
83
|
+
),
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
export const WithDefaultValue: Story = {
|
|
87
|
+
args: {
|
|
88
|
+
options: countryOptions,
|
|
89
|
+
label: 'Country',
|
|
90
|
+
defaultValue: 'us',
|
|
91
|
+
helperText: 'Default value is pre-selected',
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export const ErrorState: Story = {
|
|
96
|
+
args: {
|
|
97
|
+
options: defaultOptions,
|
|
98
|
+
label: 'Required Field',
|
|
99
|
+
placeholder: 'Please select an option',
|
|
100
|
+
error: true,
|
|
101
|
+
helperText: 'This field is required',
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
export const WithManyOptions: Story = {
|
|
106
|
+
args: {
|
|
107
|
+
options: [
|
|
108
|
+
{ value: 'afghanistan', label: 'Afghanistan' },
|
|
109
|
+
{ value: 'albania', label: 'Albania' },
|
|
110
|
+
{ value: 'algeria', label: 'Algeria' },
|
|
111
|
+
{ value: 'argentina', label: 'Argentina' },
|
|
112
|
+
{ value: 'australia', label: 'Australia' },
|
|
113
|
+
{ value: 'austria', label: 'Austria' },
|
|
114
|
+
{ value: 'bangladesh', label: 'Bangladesh' },
|
|
115
|
+
{ value: 'belgium', label: 'Belgium' },
|
|
116
|
+
{ value: 'brazil', label: 'Brazil' },
|
|
117
|
+
{ value: 'canada', label: 'Canada' },
|
|
118
|
+
{ value: 'china', label: 'China' },
|
|
119
|
+
{ value: 'denmark', label: 'Denmark' },
|
|
120
|
+
{ value: 'egypt', label: 'Egypt' },
|
|
121
|
+
{ value: 'france', label: 'France' },
|
|
122
|
+
{ value: 'germany', label: 'Germany' },
|
|
123
|
+
{ value: 'india', label: 'India' },
|
|
124
|
+
{ value: 'indonesia', label: 'Indonesia' },
|
|
125
|
+
{ value: 'italy', label: 'Italy' },
|
|
126
|
+
{ value: 'japan', label: 'Japan' },
|
|
127
|
+
{ value: 'mexico', label: 'Mexico' },
|
|
128
|
+
{ value: 'netherlands', label: 'Netherlands' },
|
|
129
|
+
{ value: 'norway', label: 'Norway' },
|
|
130
|
+
{ value: 'poland', label: 'Poland' },
|
|
131
|
+
{ value: 'russia', label: 'Russia' },
|
|
132
|
+
{ value: 'spain', label: 'Spain' },
|
|
133
|
+
{ value: 'sweden', label: 'Sweden' },
|
|
134
|
+
{ value: 'switzerland', label: 'Switzerland' },
|
|
135
|
+
{ value: 'turkey', label: 'Turkey' },
|
|
136
|
+
{ value: 'uk', label: 'United Kingdom' },
|
|
137
|
+
{ value: 'us', label: 'United States' },
|
|
138
|
+
],
|
|
139
|
+
label: 'Country',
|
|
140
|
+
placeholder: 'Select a country',
|
|
141
|
+
helperText: 'Scroll to see all options',
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
export const NoFullWidth: Story = {
|
|
146
|
+
args: {
|
|
147
|
+
options: defaultOptions,
|
|
148
|
+
label: 'Compact Select',
|
|
149
|
+
fullWidth: false,
|
|
150
|
+
style: { width: '200px' },
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
export const GlassVariant: Story = {
|
|
155
|
+
args: {
|
|
156
|
+
options: countryOptions,
|
|
157
|
+
label: 'Glass Select',
|
|
158
|
+
variant: 'glass',
|
|
159
|
+
placeholder: 'Choose an option',
|
|
160
|
+
helperText: 'Glass variant with blur effect',
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
export const GradientVariant: Story = {
|
|
165
|
+
args: {
|
|
166
|
+
options: defaultOptions,
|
|
167
|
+
label: 'Gradient Select',
|
|
168
|
+
variant: 'gradient',
|
|
169
|
+
placeholder: 'Choose an option',
|
|
170
|
+
helperText: 'Gradient variant with colorful border',
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
export const AllVariants: Story = {
|
|
175
|
+
render: () => (
|
|
176
|
+
<Stack spacing={3} sx={{ width: 400 }}>
|
|
177
|
+
<Select
|
|
178
|
+
options={defaultOptions}
|
|
179
|
+
label="Default Variant"
|
|
180
|
+
variant="default"
|
|
181
|
+
placeholder="Default style"
|
|
182
|
+
helperText="Standard Material-UI select"
|
|
183
|
+
/>
|
|
184
|
+
<Select
|
|
185
|
+
options={defaultOptions}
|
|
186
|
+
label="Glass Variant"
|
|
187
|
+
variant="glass"
|
|
188
|
+
placeholder="Glass style"
|
|
189
|
+
helperText="Glassmorphism effect with blur"
|
|
190
|
+
/>
|
|
191
|
+
<Select
|
|
192
|
+
options={defaultOptions}
|
|
193
|
+
label="Gradient Variant"
|
|
194
|
+
variant="gradient"
|
|
195
|
+
placeholder="Gradient style"
|
|
196
|
+
helperText="Gradient border effect"
|
|
197
|
+
/>
|
|
198
|
+
</Stack>
|
|
199
|
+
),
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
export const WithGlowEffect: Story = {
|
|
203
|
+
args: {
|
|
204
|
+
options: countryOptions,
|
|
205
|
+
label: 'Glow Select',
|
|
206
|
+
placeholder: 'Choose with glow',
|
|
207
|
+
glow: true,
|
|
208
|
+
helperText: 'Select with glow effect',
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
export const WithPulseAnimation: Story = {
|
|
213
|
+
args: {
|
|
214
|
+
options: defaultOptions,
|
|
215
|
+
label: 'Pulse Select',
|
|
216
|
+
placeholder: 'Choose with pulse',
|
|
217
|
+
pulse: true,
|
|
218
|
+
helperText: 'Select with pulse animation',
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
export const CombinedEffects: Story = {
|
|
223
|
+
render: () => (
|
|
224
|
+
<Stack spacing={3} sx={{ width: 400 }}>
|
|
225
|
+
<Select
|
|
226
|
+
options={defaultOptions}
|
|
227
|
+
label="Glass + Glow"
|
|
228
|
+
variant="glass"
|
|
229
|
+
glow={true}
|
|
230
|
+
placeholder="Glass with glow"
|
|
231
|
+
helperText="Glass variant with glow effect"
|
|
232
|
+
/>
|
|
233
|
+
<Select
|
|
234
|
+
options={defaultOptions}
|
|
235
|
+
label="Gradient + Pulse"
|
|
236
|
+
variant="gradient"
|
|
237
|
+
pulse={true}
|
|
238
|
+
placeholder="Gradient with pulse"
|
|
239
|
+
helperText="Gradient variant with pulse animation"
|
|
240
|
+
/>
|
|
241
|
+
<Select
|
|
242
|
+
options={countryOptions}
|
|
243
|
+
label="All Effects"
|
|
244
|
+
variant="glass"
|
|
245
|
+
glow={true}
|
|
246
|
+
pulse={true}
|
|
247
|
+
placeholder="All effects combined"
|
|
248
|
+
helperText="Glass with glow and pulse effects"
|
|
249
|
+
/>
|
|
250
|
+
</Stack>
|
|
251
|
+
),
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
export const AllStates: Story = {
|
|
255
|
+
render: () => (
|
|
256
|
+
<Stack spacing={3} sx={{ width: 400 }}>
|
|
257
|
+
<Select
|
|
258
|
+
options={defaultOptions}
|
|
259
|
+
label="Normal State"
|
|
260
|
+
placeholder="Select an option"
|
|
261
|
+
helperText="Normal state select"
|
|
262
|
+
/>
|
|
263
|
+
<Select
|
|
264
|
+
options={defaultOptions}
|
|
265
|
+
label="Error State"
|
|
266
|
+
placeholder="Required field"
|
|
267
|
+
error={true}
|
|
268
|
+
helperText="This field is required"
|
|
269
|
+
/>
|
|
270
|
+
<Select
|
|
271
|
+
options={defaultOptions}
|
|
272
|
+
label="Disabled State"
|
|
273
|
+
placeholder="Cannot interact"
|
|
274
|
+
disabled={true}
|
|
275
|
+
helperText="This select is disabled"
|
|
276
|
+
/>
|
|
277
|
+
</Stack>
|
|
278
|
+
),
|
|
279
|
+
};
|
|
280
|
+
|
|
281
|
+
export const InteractiveStates: Story = {
|
|
282
|
+
render: () => (
|
|
283
|
+
<Stack spacing={3} sx={{ width: 400 }}>
|
|
284
|
+
<Select
|
|
285
|
+
options={defaultOptions}
|
|
286
|
+
label="Default Interaction"
|
|
287
|
+
placeholder="Click to open"
|
|
288
|
+
helperText="Hover and click to interact"
|
|
289
|
+
/>
|
|
290
|
+
<Select
|
|
291
|
+
options={defaultOptions}
|
|
292
|
+
label="With Glow Effect"
|
|
293
|
+
placeholder="Hover for glow"
|
|
294
|
+
glow={true}
|
|
295
|
+
helperText="Hover to see glow effect"
|
|
296
|
+
/>
|
|
297
|
+
<Select
|
|
298
|
+
options={defaultOptions}
|
|
299
|
+
label="With Pulse Animation"
|
|
300
|
+
placeholder="Watch the pulse"
|
|
301
|
+
pulse={true}
|
|
302
|
+
helperText="Pulse animation on focus"
|
|
303
|
+
/>
|
|
304
|
+
</Stack>
|
|
305
|
+
),
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
export const DisabledState: Story = {
|
|
309
|
+
args: {
|
|
310
|
+
options: defaultOptions,
|
|
311
|
+
label: 'Disabled Select',
|
|
312
|
+
placeholder: 'Cannot interact',
|
|
313
|
+
disabled: true,
|
|
314
|
+
helperText: 'This select is disabled',
|
|
315
|
+
},
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
export const Responsive: Story = {
|
|
319
|
+
render: () => (
|
|
320
|
+
<Stack spacing={3}>
|
|
321
|
+
<div style={{ width: '100%', maxWidth: '480px' }}>
|
|
322
|
+
<Select
|
|
323
|
+
options={countryOptions}
|
|
324
|
+
label="Mobile View (480px)"
|
|
325
|
+
placeholder="Select country"
|
|
326
|
+
fullWidth={true}
|
|
327
|
+
helperText="Full width on mobile"
|
|
328
|
+
/>
|
|
329
|
+
</div>
|
|
330
|
+
<div style={{ width: '300px' }}>
|
|
331
|
+
<Select
|
|
332
|
+
options={defaultOptions}
|
|
333
|
+
label="Tablet View (300px)"
|
|
334
|
+
placeholder="Fixed width"
|
|
335
|
+
helperText="Fixed width for tablets"
|
|
336
|
+
/>
|
|
337
|
+
</div>
|
|
338
|
+
<div style={{ width: '200px' }}>
|
|
339
|
+
<Select
|
|
340
|
+
options={defaultOptions}
|
|
341
|
+
label="Compact View (200px)"
|
|
342
|
+
placeholder="Compact"
|
|
343
|
+
size="small"
|
|
344
|
+
helperText="Compact for small screens"
|
|
345
|
+
/>
|
|
346
|
+
</div>
|
|
347
|
+
</Stack>
|
|
348
|
+
),
|
|
349
|
+
};
|
|
350
|
+
|
|
351
|
+
export const Playground: Story = {
|
|
352
|
+
args: {
|
|
353
|
+
options: countryOptions,
|
|
354
|
+
label: 'Playground Select',
|
|
355
|
+
placeholder: 'Choose an option',
|
|
356
|
+
variant: 'default',
|
|
357
|
+
size: 'medium',
|
|
358
|
+
fullWidth: true,
|
|
359
|
+
error: false,
|
|
360
|
+
glow: false,
|
|
361
|
+
pulse: false,
|
|
362
|
+
helperText: 'This is a playground select component',
|
|
363
|
+
},
|
|
364
|
+
};
|