pixelize-design-library 2.4.2-beta.61 → 2.4.2-beta.62
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/CHANGELOG.md +153 -0
- package/COMPONENT-GOTCHAS.md +119 -1
- package/dist/Components/Accordion/Accordion.js +2 -2
- package/dist/Components/AddressCard/AddressCard.js +2 -1
- package/dist/Components/Apexcharts/ApexLineChart/ApexLineChart.js +1 -1
- package/dist/Components/AppSwitcher/AppSwitcher.js +1 -1
- package/dist/Components/AppearanceSettings/AppearanceSettings.js +1 -1
- package/dist/Components/AudioRecorder/AudioRecorder.js +2 -1
- package/dist/Components/Avatar/Avatar.d.ts +2 -1
- package/dist/Components/Avatar/Avatar.js +5 -3
- package/dist/Components/Backdrop/Backdrop.js +1 -1
- package/dist/Components/BagBar/BagBar.js +2 -1
- package/dist/Components/ButtonGroupIcon/ButtonGroupIcon.js +1 -1
- package/dist/Components/CalendarGrid/CalendarGrid.js +5 -5
- package/dist/Components/CalendarGrid/calendarMath.js +18 -6
- package/dist/Components/Card/PaymentCard/PaymentCard.js +6 -5
- package/dist/Components/CartItem/CartItem.js +2 -1
- package/dist/Components/Checkbox/Checkbox.d.ts +18 -3
- package/dist/Components/Checkbox/Checkbox.js +9 -7
- package/dist/Components/CheckoutKit/selectable.js +1 -1
- package/dist/Components/ChoiceCard/ChoiceCard.d.ts +3 -0
- package/dist/Components/ChoiceCard/ChoiceCard.js +16 -0
- package/dist/Components/ChoiceCard/ChoiceCardGroup.d.ts +3 -0
- package/dist/Components/ChoiceCard/ChoiceCardGroup.js +6 -0
- package/dist/Components/ChoiceCard/ChoiceCardProps.d.ts +28 -0
- package/dist/Components/ChoiceCard/ChoiceCardProps.js +2 -0
- package/dist/Components/CircularProgress/CircularProgress.js +4 -8
- package/dist/Components/CircularProgress/CircularProgressProps.d.ts +5 -3
- package/dist/Components/CircularProgress/arc.d.ts +9 -1
- package/dist/Components/CircularProgress/arc.js +15 -1
- package/dist/Components/Common/FormLabel.js +1 -1
- package/dist/Components/Common/FormattedDescription.js +1 -1
- package/dist/Components/Common/HelperText.d.ts +5 -4
- package/dist/Components/Common/HelperText.js +10 -7
- package/dist/Components/Common/fieldStyles.d.ts +4 -4
- package/dist/Components/Common/fieldStyles.js +2 -1
- package/dist/Components/ContactForm/ContactForm.js +1 -1
- package/dist/Components/CopyButton/CopyButton.js +12 -5
- package/dist/Components/CouponField/CouponField.js +4 -3
- package/dist/Components/CustomModulesTable/CustomModulesTableProps.d.ts +18 -0
- package/dist/Components/CustomModulesTable/EditModuleModal.js +1 -1
- package/dist/Components/DatePicker/CalendarPanel.js +2 -2
- package/dist/Components/DatePicker/DatePicker.js +8 -2
- package/dist/Components/DatePicker/RangeDatePicker.d.ts +9 -3
- package/dist/Components/DatePicker/RangeDatePicker.js +6 -5
- package/dist/Components/DatePicker/SingleDatePicker.d.ts +9 -5
- package/dist/Components/DatePicker/SingleDatePicker.js +7 -4
- package/dist/Components/DatePicker/ThemeDatePicker.d.ts +8 -4
- package/dist/Components/DatePicker/ThemeDatePicker.js +9 -6
- package/dist/Components/DatePicker/TimeOnlyPicker.d.ts +9 -5
- package/dist/Components/DatePicker/TimeOnlyPicker.js +6 -4
- package/dist/Components/DatePicker/TimePickerInput.d.ts +2 -2
- package/dist/Components/DatePicker/TimePickerInput.js +6 -5
- package/dist/Components/DescriptionList/DescriptionList.d.ts +1 -1
- package/dist/Components/DescriptionList/DescriptionList.js +3 -3
- package/dist/Components/DescriptionList/DescriptionListProps.d.ts +3 -3
- package/dist/Components/Dropdown/DropDown.js +12 -4
- package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +2 -1
- package/dist/Components/EmptyState/EmptyState.js +2 -2
- package/dist/Components/EmptyState/EmptyStateProps.d.ts +3 -3
- package/dist/Components/FileUpload/FileUpload.js +21 -15
- package/dist/Components/FileUpload/useObjectUrl.d.ts +1 -0
- package/dist/Components/FileUpload/useObjectUrl.js +14 -0
- package/dist/Components/FileUploader/FileUploader.js +9 -3
- package/dist/Components/FileUploader/FileUploaderProps.d.ts +8 -0
- package/dist/Components/FilterBar/FilterBar.d.ts +1 -1
- package/dist/Components/FilterBar/FilterBar.js +2 -2
- package/dist/Components/FilterBar/FilterBarProps.d.ts +3 -3
- package/dist/Components/FilterSidebar/FilterSidebar.js +10 -6
- package/dist/Components/Form/FormWrapper.js +1 -1
- package/dist/Components/FormField/FormField.d.ts +3 -0
- package/dist/Components/FormField/FormField.js +57 -0
- package/dist/Components/FormField/FormFieldProps.d.ts +33 -0
- package/dist/Components/FormField/FormFieldProps.js +2 -0
- package/dist/Components/Header/HeaderActions.js +2 -2
- package/dist/Components/Header/components/mobileMenu.js +1 -1
- package/dist/Components/IconButton/IconButton.d.ts +5 -0
- package/dist/Components/IconButton/IconButton.js +24 -0
- package/dist/Components/IconButton/IconButtonProps.d.ts +10 -0
- package/dist/Components/IconButton/IconButtonProps.js +2 -0
- package/dist/Components/Input/PhoneNumberInput.js +14 -0
- package/dist/Components/Input/PhoneNumberInputProps.d.ts +1 -0
- package/dist/Components/KanbanBoard/AccountCard.js +3 -2
- package/dist/Components/KanbanBoard/AccountRow.js +1 -1
- package/dist/Components/KanbanBoard/KanbanBoard.js +56 -39
- package/dist/Components/KanbanBoard/MeasuredItem.js +6 -14
- package/dist/Components/KanbanBoard/boardStore.d.ts +8 -0
- package/dist/Components/KanbanBoard/boardStore.js +27 -0
- package/dist/Components/Kbd/Kbd.js +1 -1
- package/dist/Components/LimitReachedModal/LimitReachedModal.js +1 -1
- package/dist/Components/Loading/Loading.js +1 -1
- package/dist/Components/MediaGallery/MediaGallery.js +1 -1
- package/dist/Components/MediaGallery/MediaLightbox.js +2 -1
- package/dist/Components/MediaGallery/glass.js +2 -1
- package/dist/Components/MediaViewer/MediaViewer.js +1 -1
- package/dist/Components/MediaViewer/components/MediaAudioPlayer.js +7 -7
- package/dist/Components/MediaViewer/components/MediaImageViewer.js +1 -1
- package/dist/Components/MediaViewer/components/MediaScrubber.js +5 -1
- package/dist/Components/MediaViewer/components/MediaVideoPlayer.js +7 -7
- package/dist/Components/MediaViewer/components/PlaybackTimeline.d.ts +20 -0
- package/dist/Components/MediaViewer/components/PlaybackTimeline.js +47 -0
- package/dist/Components/MediaViewer/components/TileChip.js +1 -1
- package/dist/Components/Modal/Modal.js +1 -1
- package/dist/Components/MoreItems/MoreItems.js +2 -2
- package/dist/Components/NavigationBar/NavigationBar.js +2 -2
- package/dist/Components/NoteTextArea/NoteTextArea.js +18 -4
- package/dist/Components/NoteTextArea/NoteTextAreaProps.d.ts +12 -0
- package/dist/Components/Notification/Notification.js +17 -3
- package/dist/Components/Notification/NotificationProps.d.ts +17 -1
- package/dist/Components/NotificationBell/NotificationBell.js +5 -1
- package/dist/Components/NotificationBell/NotificationItem.js +1 -1
- package/dist/Components/NotificationBell/NotificationList.js +1 -1
- package/dist/Components/OffersList/OffersList.js +2 -1
- package/dist/Components/OptionChip/OptionChip.js +3 -2
- package/dist/Components/OrderStatusTimeline/OrderStatusTimeline.js +2 -1
- package/dist/Components/OrderSummary/OrderSummary.js +5 -5
- package/dist/Components/OrganizationDetails/OrganizationDetails.js +7 -1
- package/dist/Components/PageHeader/PageHeader.d.ts +1 -1
- package/dist/Components/PageHeader/PageHeader.js +2 -2
- package/dist/Components/PageHeader/PageHeaderProps.d.ts +3 -3
- package/dist/Components/Pagination/Pagination.d.ts +5 -0
- package/dist/Components/Pagination/Pagination.js +48 -0
- package/dist/Components/Pagination/PaginationProps.d.ts +46 -0
- package/dist/Components/Pagination/PaginationProps.js +9 -0
- package/dist/Components/Pagination/pageWindow.d.ts +4 -0
- package/dist/Components/Pagination/pageWindow.js +22 -0
- package/dist/Components/PaymentOption/PaymentOption.js +1 -1
- package/dist/Components/PersonChip/PersonChip.js +2 -2
- package/dist/Components/PinInput/PinInput.d.ts +1 -1
- package/dist/Components/PinInput/PinInput.js +17 -2
- package/dist/Components/PinInput/PinInputProps.d.ts +9 -1
- package/dist/Components/PincodeChecker/PincodeChecker.js +4 -4
- package/dist/Components/PlanPill/PlanPill.js +2 -1
- package/dist/Components/PriceBlock/PriceBlock.js +3 -3
- package/dist/Components/Primitives/Primitives.d.ts +2 -2
- package/dist/Components/Primitives/Primitives.js +2 -3
- package/dist/Components/ProductBadges/ProductBadges.js +2 -1
- package/dist/Components/ProductCard/ProductCard.js +1 -1
- package/dist/Components/ProductCard/ProductCardAction.js +2 -2
- package/dist/Components/ProductCard/ProductCardSwatches.js +2 -1
- package/dist/Components/ProductCard/cardMetrics.d.ts +1 -1
- package/dist/Components/ProductCard/cardMetrics.js +5 -1
- package/dist/Components/ProfileCard/ProfileCardProps.d.ts +11 -0
- package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +3 -2
- package/dist/Components/QuantityStepper/QuantityStepper.js +2 -1
- package/dist/Components/RadioButton/RadioButton.d.ts +11 -2
- package/dist/Components/RadioButton/RadioButton.js +9 -6
- package/dist/Components/RangeSlider/RangeSlider.js +3 -3
- package/dist/Components/Rating/Rating.js +2 -1
- package/dist/Components/Reorder/Reorder.js +3 -2
- package/dist/Components/ReviewList/ReviewList.js +3 -3
- package/dist/Components/ReviewSummary/ReviewSummary.js +3 -3
- package/dist/Components/SaveBar/SaveBar.d.ts +1 -1
- package/dist/Components/SaveBar/SaveBar.js +2 -2
- package/dist/Components/SaveBar/SaveBarProps.d.ts +3 -3
- package/dist/Components/Search/Search.js +2 -9
- package/dist/Components/Search/ctrlShortcut.d.ts +1 -0
- package/dist/Components/Search/ctrlShortcut.js +29 -0
- package/dist/Components/SearchSelect/SearchSelect.js +117 -30
- package/dist/Components/SegmentedControl/SegmentedControl.d.ts +8 -2
- package/dist/Components/SegmentedControl/SegmentedControl.js +9 -5
- package/dist/Components/Select/SelectPopup.js +6 -4
- package/dist/Components/SelectSearch/SelectSearch.js +5 -4
- package/dist/Components/SettingRow/SettingRow.js +1 -1
- package/dist/Components/SideBar/SecondaryBar.js +2 -1
- package/dist/Components/SideBar/SideBar.js +82 -21
- package/dist/Components/SideBar/components/MenuItemBox.d.ts +2 -2
- package/dist/Components/SideBar/components/MenuItemBox.js +4 -3
- package/dist/Components/SideBar/components/MenuItems.d.ts +2 -2
- package/dist/Components/SideBar/components/MenuItems.js +3 -3
- package/dist/Components/SideBar/components/OtherApps.js +5 -1
- package/dist/Components/SideBar/components/OverflowTooltipText.js +4 -5
- package/dist/Components/SideBar/components/PinnedSection.js +2 -2
- package/dist/Components/SideBar/components/TextTruncation.js +11 -6
- package/dist/Components/SideBar/sidebarScale.d.ts +1 -1
- package/dist/Components/SideBar/sidebarScale.js +2 -1
- package/dist/Components/SignInActivityTable/SignInActivityTableProps.d.ts +8 -0
- package/dist/Components/Skeletons/SkeletonProps.d.ts +5 -2
- package/dist/Components/Skeletons/Skeletons.d.ts +1 -1
- package/dist/Components/Skeletons/Skeletons.js +4 -2
- package/dist/Components/SkipLink/SkipLink.d.ts +4 -0
- package/dist/Components/SkipLink/SkipLink.js +54 -0
- package/dist/Components/SkipLink/SkipLinkProps.d.ts +8 -0
- package/dist/Components/SkipLink/SkipLinkProps.js +2 -0
- package/dist/Components/Slider/Slider.d.ts +2 -2
- package/dist/Components/Slider/Slider.js +11 -4
- package/dist/Components/SpecTable/SpecTable.js +2 -1
- package/dist/Components/StageProgress/StageItem.js +2 -5
- package/dist/Components/StageProgress/StageProgress.js +2 -1
- package/dist/Components/StageProgress/StageProgressProps.d.ts +1 -1
- package/dist/Components/StageProgress/StepperStage.js +2 -6
- package/dist/Components/StageProgress/centerInStrip.d.ts +2 -0
- package/dist/Components/StageProgress/centerInStrip.js +15 -0
- package/dist/Components/StatCard/StatCard.d.ts +1 -1
- package/dist/Components/StatCard/StatCard.js +5 -4
- package/dist/Components/StatCard/StatCardProps.d.ts +3 -3
- package/dist/Components/StickyBuyBar/StickyBuyBar.js +1 -1
- package/dist/Components/Table/components/TableActions.js +40 -24
- package/dist/Components/Table/components/TableBody.js +25 -40
- package/dist/Components/Table/components/rowMeasurer.d.ts +8 -0
- package/dist/Components/Table/components/rowMeasurer.js +71 -0
- package/dist/Components/Table/filters/TableFilters.js +2 -13
- package/dist/Components/Table/hooks/useTable.js +12 -9
- package/dist/Components/Tabs/components/CountBadge.js +3 -3
- package/dist/Components/Tabs/components/Tab.d.ts +2 -1
- package/dist/Components/Tabs/components/Tab.js +4 -3
- package/dist/Components/Tabs/components/TabList.js +16 -1
- package/dist/Components/Tag/Tag.d.ts +2 -2
- package/dist/Components/Tag/Tag.js +15 -12
- package/dist/Components/Tag/Tag.styles.js +6 -4
- package/dist/Components/TagInput/TagInput.d.ts +3 -0
- package/dist/Components/TagInput/TagInput.js +99 -0
- package/dist/Components/TagInput/TagInputProps.d.ts +46 -0
- package/dist/Components/TagInput/TagInputProps.js +2 -0
- package/dist/Components/TagInput/tagEntries.d.ts +15 -0
- package/dist/Components/TagInput/tagEntries.js +45 -0
- package/dist/Components/TimePicker/TimePicker.d.ts +3 -0
- package/dist/Components/TimePicker/TimePicker.js +50 -0
- package/dist/Components/TimePicker/TimePickerProps.d.ts +44 -0
- package/dist/Components/TimePicker/TimePickerProps.js +2 -0
- package/dist/Components/TimePicker/timeParts.d.ts +10 -0
- package/dist/Components/TimePicker/timeParts.js +36 -0
- package/dist/Components/Timeline/Timeline.js +11 -9
- package/dist/Components/Toaster/Toaster.js +2 -1
- package/dist/Components/Toggle/TableToggle.js +4 -3
- package/dist/Components/ToggleSwitch/ToggleSwitch.d.ts +3 -2
- package/dist/Components/ToggleSwitch/ToggleSwitch.js +6 -5
- package/dist/Components/ToolTip/ToolTip.js +86 -8
- package/dist/Components/UpgradeButton/UpgradeButton.js +4 -2
- package/dist/Components/UserDetails/UserDetails.js +7 -1
- package/dist/Components/VisuallyHidden/VisuallyHidden.d.ts +15 -0
- package/dist/Components/VisuallyHidden/VisuallyHidden.js +21 -0
- package/dist/Components/VisuallyHidden/VisuallyHiddenProps.d.ts +3 -0
- package/dist/Components/VisuallyHidden/VisuallyHiddenProps.js +2 -0
- package/dist/Components/WizardDialog/WizardDialog.js +10 -5
- package/dist/Components/WizardDialog/WizardDialogProps.d.ts +4 -0
- package/dist/Components/WorkspaceWindow/WorkspaceTrayPreview.js +5 -1
- package/dist/Components/WorkspaceWindow/WorkspaceWindow.js +15 -2
- package/dist/Components/WorkspaceWindow/WorkspaceWindowProps.d.ts +2 -1
- package/dist/Hooks/sharedResizeObserver.d.ts +6 -0
- package/dist/Hooks/sharedResizeObserver.js +77 -0
- package/dist/Hooks/useIsTruncated.js +3 -4
- package/dist/Theme/chakra/Menu.styles.d.ts +1 -1
- package/dist/Theme/chakra/common.web.d.ts +1 -0
- package/dist/Theme/chakra/componentStyles.d.ts +1 -1
- package/dist/Theme/chakra/createBrandTheme.d.ts +3 -0
- package/dist/Theme/chakra/createBrandTheme.js +34 -4
- package/dist/Theme/chakra/focusRing.styles.d.ts +2 -0
- package/dist/Theme/chakra/focusRing.styles.js +5 -1
- package/dist/Theme/chakra/fonts.web.d.ts +2 -0
- package/dist/Theme/chakra/motion.d.ts +14 -0
- package/dist/Theme/chakra/motion.js +26 -1
- package/dist/Theme/index.d.ts +2 -1
- package/dist/Theme/index.js +12 -9
- package/dist/Theme/provider/PixelizeThemeProvider.d.ts +4 -1
- package/dist/Theme/provider/PixelizeThemeProvider.js +21 -12
- package/dist/Theme/provider/ThemeSwitcher.js +3 -2
- package/dist/Theme/themeProps.d.ts +3 -0
- package/dist/Theme/tokens/brands/emerald/palette.dark.js +2 -1
- package/dist/Theme/tokens/brands/index.d.ts +1 -1
- package/dist/Theme/tokens/brands/index.js +14 -13
- package/dist/Theme/tokens/brands/lavender/palette.dark.js +2 -1
- package/dist/Theme/tokens/brands/meadow/palette.dark.js +2 -1
- package/dist/Theme/tokens/brands/radiant/palette.dark.js +2 -1
- package/dist/Theme/tokens/brands/rosewood/palette.dark.js +2 -1
- package/dist/Theme/tokens/brands/skyline/palette.dark.js +2 -1
- package/dist/Theme/tokens/brands/slate/palette.dark.js +2 -1
- package/dist/Theme/tokens/brands/storefront/palette.dark.js +2 -1
- package/dist/Theme/tokens/brands/zinc/palette.dark.js +28 -24
- package/dist/Theme/tokens/builders/color.js +11 -7
- package/dist/Theme/tokens/builders/filledSurface.d.ts +3 -1
- package/dist/Theme/tokens/builders/filledSurface.js +7 -7
- package/dist/Theme/tokens/builders/lazy.d.ts +5 -0
- package/dist/Theme/tokens/builders/lazy.js +55 -0
- package/dist/Theme/tokens/builders/memo.d.ts +9 -0
- package/dist/Theme/tokens/builders/memo.js +28 -0
- package/dist/Theme/tokens/builders/memoByReads.d.ts +2 -0
- package/dist/Theme/tokens/builders/memoByReads.js +50 -0
- package/dist/Theme/tokens/builders/outlineRung.js +10 -2
- package/dist/Theme/tokens/builders/tone.js +5 -4
- package/dist/Theme/tokens/primitives/borderWidths.d.ts +6 -0
- package/dist/Theme/tokens/primitives/borderWidths.js +5 -0
- package/dist/Theme/tokens/primitives/index.d.ts +8 -3
- package/dist/Theme/tokens/primitives/index.js +8 -1
- package/dist/Theme/tokens/primitives/motion.d.ts +25 -2
- package/dist/Theme/tokens/primitives/motion.js +23 -5
- package/dist/Theme/tokens/primitives/optionRowSizes.d.ts +1 -1
- package/dist/Theme/tokens/primitives/optionRowSizes.js +2 -1
- package/dist/Theme/tokens/primitives/radii.d.ts +15 -0
- package/dist/Theme/tokens/primitives/radii.js +14 -0
- package/dist/Theme/tokens/primitives/shadows.d.ts +5 -1
- package/dist/Theme/tokens/primitives/shadows.js +5 -1
- package/dist/Theme/tokens/primitives/states.d.ts +1 -0
- package/dist/Theme/tokens/primitives/states.js +4 -0
- package/dist/Theme/tokens/primitives/typography.d.ts +17 -0
- package/dist/Theme/tokens/primitives/typography.js +21 -1
- package/dist/Theme/tokens/primitives/zIndices.d.ts +1 -0
- package/dist/Theme/tokens/primitives/zIndices.js +1 -0
- package/dist/Utils/formatDate.d.ts +25 -0
- package/dist/Utils/formatDate.js +144 -0
- package/dist/esm/Components/Accordion/Accordion.js +2 -2
- package/dist/esm/Components/AddressCard/AddressCard.js +2 -1
- package/dist/esm/Components/Apexcharts/ApexLineChart/ApexLineChart.js +1 -1
- package/dist/esm/Components/AppSwitcher/AppSwitcher.js +1 -1
- package/dist/esm/Components/AppearanceSettings/AppearanceSettings.js +1 -1
- package/dist/esm/Components/AudioRecorder/AudioRecorder.js +2 -1
- package/dist/esm/Components/Avatar/Avatar.js +6 -4
- package/dist/esm/Components/Backdrop/Backdrop.js +1 -1
- package/dist/esm/Components/BagBar/BagBar.js +2 -1
- package/dist/esm/Components/ButtonGroupIcon/ButtonGroupIcon.js +1 -1
- package/dist/esm/Components/CalendarGrid/CalendarGrid.js +6 -6
- package/dist/esm/Components/CalendarGrid/calendarMath.js +18 -6
- package/dist/esm/Components/Card/PaymentCard/PaymentCard.js +6 -5
- package/dist/esm/Components/CartItem/CartItem.js +2 -1
- package/dist/esm/Components/Checkbox/Checkbox.js +8 -5
- package/dist/esm/Components/CheckoutKit/selectable.js +1 -1
- package/dist/esm/Components/ChoiceCard/ChoiceCard.js +14 -0
- package/dist/esm/Components/ChoiceCard/ChoiceCardGroup.js +4 -0
- package/dist/esm/Components/ChoiceCard/ChoiceCardProps.js +1 -0
- package/dist/esm/Components/CircularProgress/CircularProgress.js +5 -9
- package/dist/esm/Components/CircularProgress/arc.js +13 -0
- package/dist/esm/Components/Common/FormLabel.js +1 -1
- package/dist/esm/Components/Common/FormattedDescription.js +1 -1
- package/dist/esm/Components/Common/HelperText.js +11 -8
- package/dist/esm/Components/Common/fieldStyles.js +2 -1
- package/dist/esm/Components/ContactForm/ContactForm.js +1 -1
- package/dist/esm/Components/CopyButton/CopyButton.js +14 -7
- package/dist/esm/Components/CouponField/CouponField.js +4 -3
- package/dist/esm/Components/CustomModulesTable/EditModuleModal.js +1 -1
- package/dist/esm/Components/DatePicker/CalendarPanel.js +2 -2
- package/dist/esm/Components/DatePicker/DatePicker.js +8 -2
- package/dist/esm/Components/DatePicker/RangeDatePicker.js +8 -6
- package/dist/esm/Components/DatePicker/SingleDatePicker.js +7 -4
- package/dist/esm/Components/DatePicker/ThemeDatePicker.js +7 -4
- package/dist/esm/Components/DatePicker/TimeOnlyPicker.js +5 -3
- package/dist/esm/Components/DatePicker/TimePickerInput.js +8 -6
- package/dist/esm/Components/DescriptionList/DescriptionList.js +3 -3
- package/dist/esm/Components/Dropdown/DropDown.js +12 -4
- package/dist/esm/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +2 -1
- package/dist/esm/Components/EmptyState/EmptyState.js +2 -2
- package/dist/esm/Components/FileUpload/FileUpload.js +21 -15
- package/dist/esm/Components/FileUpload/useObjectUrl.js +10 -0
- package/dist/esm/Components/FileUploader/FileUploader.js +9 -3
- package/dist/esm/Components/FilterBar/FilterBar.js +2 -2
- package/dist/esm/Components/FilterSidebar/FilterSidebar.js +10 -6
- package/dist/esm/Components/Form/FormWrapper.js +1 -1
- package/dist/esm/Components/FormField/FormField.js +52 -0
- package/dist/esm/Components/FormField/FormFieldProps.js +1 -0
- package/dist/esm/Components/Header/HeaderActions.js +2 -2
- package/dist/esm/Components/Header/components/mobileMenu.js +1 -1
- package/dist/esm/Components/IconButton/IconButton.js +21 -0
- package/dist/esm/Components/IconButton/IconButtonProps.js +1 -0
- package/dist/esm/Components/Input/PhoneNumberInput.js +15 -1
- package/dist/esm/Components/KanbanBoard/AccountCard.js +3 -2
- package/dist/esm/Components/KanbanBoard/AccountRow.js +1 -1
- package/dist/esm/Components/KanbanBoard/KanbanBoard.js +56 -39
- package/dist/esm/Components/KanbanBoard/MeasuredItem.js +6 -14
- package/dist/esm/Components/KanbanBoard/boardStore.js +22 -0
- package/dist/esm/Components/Kbd/Kbd.js +1 -1
- package/dist/esm/Components/LimitReachedModal/LimitReachedModal.js +1 -1
- package/dist/esm/Components/Loading/Loading.js +1 -1
- package/dist/esm/Components/MediaGallery/MediaGallery.js +2 -2
- package/dist/esm/Components/MediaGallery/MediaLightbox.js +2 -1
- package/dist/esm/Components/MediaGallery/glass.js +2 -1
- package/dist/esm/Components/MediaViewer/MediaViewer.js +1 -1
- package/dist/esm/Components/MediaViewer/components/MediaAudioPlayer.js +7 -7
- package/dist/esm/Components/MediaViewer/components/MediaImageViewer.js +1 -1
- package/dist/esm/Components/MediaViewer/components/MediaScrubber.js +5 -1
- package/dist/esm/Components/MediaViewer/components/MediaVideoPlayer.js +7 -7
- package/dist/esm/Components/MediaViewer/components/PlaybackTimeline.js +38 -0
- package/dist/esm/Components/MediaViewer/components/TileChip.js +1 -1
- package/dist/esm/Components/Modal/Modal.js +1 -1
- package/dist/esm/Components/MoreItems/MoreItems.js +2 -2
- package/dist/esm/Components/NavigationBar/NavigationBar.js +2 -2
- package/dist/esm/Components/NoteTextArea/NoteTextArea.js +18 -4
- package/dist/esm/Components/Notification/Notification.js +17 -3
- package/dist/esm/Components/NotificationBell/NotificationBell.js +2 -1
- package/dist/esm/Components/NotificationBell/NotificationItem.js +1 -1
- package/dist/esm/Components/NotificationBell/NotificationList.js +1 -1
- package/dist/esm/Components/OffersList/OffersList.js +2 -1
- package/dist/esm/Components/OptionChip/OptionChip.js +3 -2
- package/dist/esm/Components/OrderStatusTimeline/OrderStatusTimeline.js +2 -1
- package/dist/esm/Components/OrderSummary/OrderSummary.js +5 -5
- package/dist/esm/Components/OrganizationDetails/OrganizationDetails.js +7 -1
- package/dist/esm/Components/PageHeader/PageHeader.js +2 -2
- package/dist/esm/Components/Pagination/Pagination.js +42 -0
- package/dist/esm/Components/Pagination/PaginationProps.js +6 -0
- package/dist/esm/Components/Pagination/pageWindow.js +16 -0
- package/dist/esm/Components/PaymentOption/PaymentOption.js +1 -1
- package/dist/esm/Components/PersonChip/PersonChip.js +2 -2
- package/dist/esm/Components/PinInput/PinInput.js +14 -2
- package/dist/esm/Components/PincodeChecker/PincodeChecker.js +4 -4
- package/dist/esm/Components/PlanPill/PlanPill.js +2 -1
- package/dist/esm/Components/PriceBlock/PriceBlock.js +3 -3
- package/dist/esm/Components/Primitives/Primitives.js +1 -1
- package/dist/esm/Components/ProductBadges/ProductBadges.js +2 -1
- package/dist/esm/Components/ProductCard/ProductCard.js +1 -1
- package/dist/esm/Components/ProductCard/ProductCardAction.js +3 -3
- package/dist/esm/Components/ProductCard/ProductCardSwatches.js +2 -1
- package/dist/esm/Components/ProductCard/cardMetrics.js +2 -1
- package/dist/esm/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +3 -2
- package/dist/esm/Components/QuantityStepper/QuantityStepper.js +2 -1
- package/dist/esm/Components/RadioButton/RadioButton.js +7 -4
- package/dist/esm/Components/RangeSlider/RangeSlider.js +3 -3
- package/dist/esm/Components/Rating/Rating.js +2 -1
- package/dist/esm/Components/Reorder/Reorder.js +3 -2
- package/dist/esm/Components/ReviewList/ReviewList.js +3 -3
- package/dist/esm/Components/ReviewSummary/ReviewSummary.js +3 -3
- package/dist/esm/Components/SaveBar/SaveBar.js +2 -2
- package/dist/esm/Components/Search/Search.js +2 -9
- package/dist/esm/Components/Search/ctrlShortcut.js +25 -0
- package/dist/esm/Components/SearchSelect/SearchSelect.js +120 -33
- package/dist/esm/Components/SegmentedControl/SegmentedControl.js +11 -6
- package/dist/esm/Components/Select/SelectPopup.js +6 -4
- package/dist/esm/Components/SelectSearch/SelectSearch.js +5 -4
- package/dist/esm/Components/SettingRow/SettingRow.js +1 -1
- package/dist/esm/Components/SideBar/SecondaryBar.js +2 -1
- package/dist/esm/Components/SideBar/SideBar.js +83 -22
- package/dist/esm/Components/SideBar/components/MenuItemBox.js +4 -3
- package/dist/esm/Components/SideBar/components/MenuItems.js +4 -4
- package/dist/esm/Components/SideBar/components/OtherApps.js +2 -1
- package/dist/esm/Components/SideBar/components/OverflowTooltipText.js +4 -5
- package/dist/esm/Components/SideBar/components/PinnedSection.js +2 -2
- package/dist/esm/Components/SideBar/components/TextTruncation.js +9 -7
- package/dist/esm/Components/SideBar/sidebarScale.js +2 -1
- package/dist/esm/Components/Skeletons/Skeletons.js +4 -2
- package/dist/esm/Components/SkipLink/SkipLink.js +50 -0
- package/dist/esm/Components/SkipLink/SkipLinkProps.js +1 -0
- package/dist/esm/Components/Slider/Slider.js +11 -4
- package/dist/esm/Components/SpecTable/SpecTable.js +2 -1
- package/dist/esm/Components/StageProgress/StageItem.js +2 -5
- package/dist/esm/Components/StageProgress/StageProgress.js +2 -1
- package/dist/esm/Components/StageProgress/StepperStage.js +2 -6
- package/dist/esm/Components/StageProgress/centerInStrip.js +11 -0
- package/dist/esm/Components/StatCard/StatCard.js +5 -4
- package/dist/esm/Components/StickyBuyBar/StickyBuyBar.js +2 -2
- package/dist/esm/Components/Table/components/TableActions.js +42 -26
- package/dist/esm/Components/Table/components/TableBody.js +25 -40
- package/dist/esm/Components/Table/components/rowMeasurer.js +66 -0
- package/dist/esm/Components/Table/filters/TableFilters.js +3 -14
- package/dist/esm/Components/Table/hooks/useTable.js +12 -9
- package/dist/esm/Components/Tabs/components/CountBadge.js +3 -3
- package/dist/esm/Components/Tabs/components/Tab.js +5 -4
- package/dist/esm/Components/Tabs/components/TabList.js +16 -1
- package/dist/esm/Components/Tag/Tag.js +11 -8
- package/dist/esm/Components/Tag/Tag.styles.js +6 -4
- package/dist/esm/Components/TagInput/TagInput.js +94 -0
- package/dist/esm/Components/TagInput/TagInputProps.js +1 -0
- package/dist/esm/Components/TagInput/tagEntries.js +39 -0
- package/dist/esm/Components/TimePicker/TimePicker.js +45 -0
- package/dist/esm/Components/TimePicker/TimePickerProps.js +1 -0
- package/dist/esm/Components/TimePicker/timeParts.js +26 -0
- package/dist/esm/Components/Timeline/Timeline.js +11 -9
- package/dist/esm/Components/Toaster/Toaster.js +2 -1
- package/dist/esm/Components/Toggle/TableToggle.js +4 -3
- package/dist/esm/Components/ToggleSwitch/ToggleSwitch.js +7 -5
- package/dist/esm/Components/ToolTip/ToolTip.js +89 -11
- package/dist/esm/Components/UpgradeButton/UpgradeButton.js +4 -2
- package/dist/esm/Components/UserDetails/UserDetails.js +7 -1
- package/dist/esm/Components/VisuallyHidden/VisuallyHidden.js +18 -0
- package/dist/esm/Components/VisuallyHidden/VisuallyHiddenProps.js +1 -0
- package/dist/esm/Components/WizardDialog/WizardDialog.js +11 -6
- package/dist/esm/Components/WorkspaceWindow/WorkspaceTrayPreview.js +2 -1
- package/dist/esm/Components/WorkspaceWindow/WorkspaceWindow.js +13 -3
- package/dist/esm/Hooks/sharedResizeObserver.js +73 -0
- package/dist/esm/Hooks/useIsTruncated.js +3 -4
- package/dist/esm/Theme/chakra/createBrandTheme.js +34 -4
- package/dist/esm/Theme/chakra/focusRing.styles.js +3 -0
- package/dist/esm/Theme/chakra/motion.js +25 -0
- package/dist/esm/Theme/index.js +12 -9
- package/dist/esm/Theme/provider/PixelizeThemeProvider.js +22 -13
- package/dist/esm/Theme/provider/ThemeSwitcher.js +3 -2
- package/dist/esm/Theme/tokens/brands/emerald/palette.dark.js +2 -1
- package/dist/esm/Theme/tokens/brands/index.js +14 -13
- package/dist/esm/Theme/tokens/brands/lavender/palette.dark.js +2 -1
- package/dist/esm/Theme/tokens/brands/meadow/palette.dark.js +2 -1
- package/dist/esm/Theme/tokens/brands/radiant/palette.dark.js +2 -1
- package/dist/esm/Theme/tokens/brands/rosewood/palette.dark.js +2 -1
- package/dist/esm/Theme/tokens/brands/skyline/palette.dark.js +2 -1
- package/dist/esm/Theme/tokens/brands/slate/palette.dark.js +2 -1
- package/dist/esm/Theme/tokens/brands/storefront/palette.dark.js +2 -1
- package/dist/esm/Theme/tokens/brands/zinc/palette.dark.js +28 -24
- package/dist/esm/Theme/tokens/builders/color.js +10 -6
- package/dist/esm/Theme/tokens/builders/filledSurface.js +7 -7
- package/dist/esm/Theme/tokens/builders/lazy.js +49 -0
- package/dist/esm/Theme/tokens/builders/memo.js +21 -0
- package/dist/esm/Theme/tokens/builders/memoByReads.js +46 -0
- package/dist/esm/Theme/tokens/builders/outlineRung.js +10 -2
- package/dist/esm/Theme/tokens/builders/tone.js +5 -4
- package/dist/esm/Theme/tokens/primitives/borderWidths.js +2 -0
- package/dist/esm/Theme/tokens/primitives/index.js +5 -3
- package/dist/esm/Theme/tokens/primitives/motion.js +20 -4
- package/dist/esm/Theme/tokens/primitives/optionRowSizes.js +2 -1
- package/dist/esm/Theme/tokens/primitives/radii.js +13 -0
- package/dist/esm/Theme/tokens/primitives/shadows.js +3 -1
- package/dist/esm/Theme/tokens/primitives/states.js +1 -0
- package/dist/esm/Theme/tokens/primitives/typography.js +20 -0
- package/dist/esm/Theme/tokens/primitives/zIndices.js +1 -0
- package/dist/esm/Utils/formatDate.js +138 -0
- package/dist/esm/index.js +18 -2
- package/dist/index.d.ts +33 -5
- package/dist/index.js +47 -4
- package/package.json +1 -1
|
@@ -9,13 +9,14 @@ const react_2 = require("@chakra-ui/react");
|
|
|
9
9
|
const TabsContext_1 = require("../TabsContext");
|
|
10
10
|
const useTabAppearance_1 = require("../useTabAppearance");
|
|
11
11
|
const CountBadge_1 = __importDefault(require("./CountBadge"));
|
|
12
|
-
|
|
12
|
+
/** One role="tab" button inside a TabList; `ref` is that `<button>`. */
|
|
13
|
+
const Tab = (0, react_1.forwardRef)(function Tab({ value, children, icon, count, isDisabled }, ref) {
|
|
13
14
|
var _a;
|
|
14
15
|
const ctx = (0, TabsContext_1.useTabsContext)();
|
|
15
|
-
const ref = (0, react_1.useRef)(null);
|
|
16
16
|
const isSelected = ctx.selectedId === value;
|
|
17
17
|
const isFocusTarget = ((_a = ctx.focusedId) !== null && _a !== void 0 ? _a : ctx.selectedId) === value;
|
|
18
18
|
const { colors, canvas, scale, style, iconSize, iconSx, boxProps } = (0, useTabAppearance_1.useTabAppearance)(isSelected, isDisabled);
|
|
19
19
|
return ((0, jsx_runtime_1.jsxs)(react_2.Box, { as: "button", type: "button", ref: ref, role: "tab", id: (0, TabsContext_1.tabId)(ctx.baseId, value), "aria-selected": isSelected, "aria-disabled": isDisabled || undefined, "aria-controls": ctx.hasPanels ? (0, TabsContext_1.panelId)(ctx.baseId, value) : undefined, "data-value": value, tabIndex: isDisabled ? -1 : isFocusTarget ? 0 : -1, disabled: isDisabled, onClick: () => !isDisabled && ctx.select(value), onFocus: () => ctx.focusTab(value), ...boxProps, children: [icon ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", "aria-hidden": true, boxSize: `${iconSize}px`, sx: iconSx, children: icon })) : null, (0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", children: children }), count !== undefined ? ((0, jsx_runtime_1.jsx)(CountBadge_1.default, { count: count, colors: colors, scale: scale, surface: ctx.variant === "solid" && isSelected ? style.bg : canvas, size: ctx.size })) : null] }));
|
|
20
|
-
};
|
|
20
|
+
});
|
|
21
|
+
Tab.displayName = "Tab";
|
|
21
22
|
exports.default = Tab;
|
|
@@ -8,19 +8,34 @@ const scrollbar_1 = require("../../../Theme/tokens/builders/scrollbar");
|
|
|
8
8
|
const TabsContext_1 = require("../TabsContext");
|
|
9
9
|
const ENABLED_TAB_SELECTOR = '[role="tab"]:not([aria-disabled="true"])';
|
|
10
10
|
const findByValue = (container, value) => Array.from(container.querySelectorAll("[data-value]")).find((node) => node.dataset.value === value);
|
|
11
|
+
const overshoot = (start, end, boxStart, boxEnd) => start < boxStart ? start - boxStart : Math.max(0, end - boxEnd);
|
|
12
|
+
const revealWithinList = (list, tab) => {
|
|
13
|
+
const box = list.getBoundingClientRect();
|
|
14
|
+
const rect = tab.getBoundingClientRect();
|
|
15
|
+
list.scrollLeft += overshoot(rect.left, rect.right, box.left, box.right);
|
|
16
|
+
list.scrollTop += overshoot(rect.top, rect.bottom, box.top, box.bottom);
|
|
17
|
+
};
|
|
11
18
|
const TabList = ({ children, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy }) => {
|
|
12
19
|
const { colors } = (0, useCustomTheme_1.useCustomTheme)();
|
|
13
20
|
const ctx = (0, TabsContext_1.useTabsContext)();
|
|
14
21
|
const ref = (0, react_1.useRef)(null);
|
|
15
22
|
const isVertical = ctx.orientation === "vertical";
|
|
16
23
|
const isLine = ctx.variant === "line";
|
|
24
|
+
const revealed = (0, react_1.useRef)(false);
|
|
17
25
|
(0, react_1.useEffect)(() => {
|
|
18
26
|
var _a, _b;
|
|
19
27
|
const activeId = (_a = ctx.focusedId) !== null && _a !== void 0 ? _a : ctx.selectedId;
|
|
20
28
|
if (!activeId || !ref.current)
|
|
21
29
|
return;
|
|
22
30
|
const el = findByValue(ref.current, activeId);
|
|
23
|
-
|
|
31
|
+
if (!el)
|
|
32
|
+
return;
|
|
33
|
+
if (!revealed.current) {
|
|
34
|
+
revealed.current = true;
|
|
35
|
+
revealWithinList(ref.current, el);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
(_b = el.scrollIntoView) === null || _b === void 0 ? void 0 : _b.call(el, { block: "nearest", inline: "nearest" });
|
|
24
39
|
}, [ctx.focusedId, ctx.selectedId]);
|
|
25
40
|
const focusAndMaybeSelect = (el) => {
|
|
26
41
|
el.focus();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { TagProps } from "./TagProps";
|
|
3
|
-
/**
|
|
4
|
-
declare const Tag: React.
|
|
3
|
+
/** Pill-shaped status/filter chip (Chakra Tag), not the raw Badge primitive; `ref` is the root element. */
|
|
4
|
+
declare const Tag: React.ForwardRefExoticComponent<TagProps & React.RefAttributes<HTMLElement>>;
|
|
5
5
|
export default Tag;
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
4
|
-
const react_1 = require("
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
const react_2 = require("@chakra-ui/react");
|
|
5
6
|
const tone_1 = require("../../Theme/tokens/builders/tone");
|
|
6
7
|
const motion_1 = require("../../Theme/tokens/primitives/motion");
|
|
8
|
+
const states_1 = require("../../Theme/tokens/primitives/states");
|
|
7
9
|
const motion_2 = require("../../Theme/chakra/motion");
|
|
8
10
|
const focusRing_styles_1 = require("../../Theme/chakra/focusRing.styles");
|
|
9
11
|
const useCustomTheme_1 = require("../../Theme/useCustomTheme");
|
|
10
12
|
const tagDot_1 = require("./tagDot");
|
|
11
13
|
// NOTE: the label's pill radius would slice descenders, so clipping lives on a square child.
|
|
12
|
-
const LabelText = ({ children, title }) => ((0, jsx_runtime_1.jsx)(
|
|
14
|
+
const LabelText = ({ children, title }) => ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", title: title, display: "block", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", borderRadius: 0, px: "0.05em", mx: "-0.05em", children: children }));
|
|
13
15
|
const ICON_SIZE = {
|
|
14
16
|
xs: "0.75rem",
|
|
15
17
|
sm: "0.875rem",
|
|
@@ -17,23 +19,24 @@ const ICON_SIZE = {
|
|
|
17
19
|
lg: "1.1em",
|
|
18
20
|
};
|
|
19
21
|
const DOT_FONT_SIZE = {
|
|
20
|
-
xs: "
|
|
21
|
-
sm: "
|
|
22
|
-
md: "
|
|
22
|
+
xs: "xs",
|
|
23
|
+
sm: "xs-plus",
|
|
24
|
+
md: "sm",
|
|
23
25
|
lg: "0.9375rem",
|
|
24
26
|
};
|
|
25
|
-
/**
|
|
26
|
-
const Tag = ({ label, colorScheme = "primary", tone, variant = "subtle", display = "chip", size = "sm", maxW, icon, leadingIcon, onTagClick, onIconClick, isDisabled, "data-testid": testId, })
|
|
27
|
+
/** Pill-shaped status/filter chip (Chakra Tag), not the raw Badge primitive; `ref` is the root element. */
|
|
28
|
+
const Tag = (0, react_1.forwardRef)(function Tag({ label, colorScheme = "primary", tone, variant = "subtle", display = "chip", size = "sm", maxW, icon, leadingIcon, onTagClick, onIconClick, isDisabled, "data-testid": testId, }, ref) {
|
|
27
29
|
const { colors } = (0, useCustomTheme_1.useCustomTheme)();
|
|
28
30
|
const isInteractive = !!onTagClick;
|
|
29
31
|
if (display === "dot") {
|
|
30
|
-
return ((0, jsx_runtime_1.jsxs)(
|
|
32
|
+
return ((0, jsx_runtime_1.jsxs)(react_2.Flex, { ref: ref, as: isInteractive ? "button" : "span", ...(isInteractive ? { type: "button", disabled: isDisabled || undefined } : {}), display: "inline-flex", alignItems: "center", gap: 2, maxW: maxW, minW: 0, borderRadius: "sm", bg: "transparent", fontSize: DOT_FONT_SIZE[size], fontWeight: 500, color: colors.text[700], cursor: isInteractive ? "pointer" : undefined, opacity: isDisabled ? states_1.DISABLED_OPACITY : undefined, onClick: isInteractive && !isDisabled ? onTagClick : undefined, "data-testid": testId, "data-display": "dot", "data-disabled": isDisabled || undefined, sx: isInteractive ? (0, focusRing_styles_1.focusVisibleStyles)(colors) : undefined, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", "aria-hidden": true, boxSize: "0.5rem", flexShrink: 0, borderRadius: "full", bg: (0, tagDot_1.dotColor)(colors, tone, colorScheme) }), (0, jsx_runtime_1.jsx)(react_2.Text, { as: "span", noOfLines: 1, title: maxW ? label : undefined, children: label })] }));
|
|
31
33
|
}
|
|
32
|
-
return ((0, jsx_runtime_1.jsxs)(
|
|
33
|
-
(onIconClick ? ((0, jsx_runtime_1.jsx)(
|
|
34
|
+
return ((0, jsx_runtime_1.jsxs)(react_2.Tag, { ref: ref, size: size, variant: variant, colorScheme: tone ? tone_1.toneToColorScheme[tone] : colorScheme, borderRadius: "full", maxW: maxW, "data-testid": testId, "data-interactive": isInteractive || undefined, "data-disabled": isDisabled || undefined, "aria-disabled": isDisabled || undefined, children: [leadingIcon && (0, jsx_runtime_1.jsx)(react_2.TagLeftIcon, { as: leadingIcon, boxSize: ICON_SIZE[size], "aria-hidden": true }), isInteractive ? ((0, jsx_runtime_1.jsx)(react_2.TagLabel, { as: "button", type: "button", noOfLines: undefined, disabled: isDisabled || undefined, cursor: "pointer", onClick: isDisabled ? undefined : onTagClick, children: (0, jsx_runtime_1.jsx)(LabelText, { title: maxW ? label : undefined, children: label }) })) : ((0, jsx_runtime_1.jsx)(react_2.TagLabel, { noOfLines: undefined, children: (0, jsx_runtime_1.jsx)(LabelText, { title: maxW ? label : undefined, children: label }) })), icon &&
|
|
35
|
+
(onIconClick ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "button", type: "button", "aria-label": `Remove ${label}`, "data-testid": testId ? `${testId}-remove` : undefined, disabled: isDisabled || undefined, onClick: (e) => {
|
|
34
36
|
e.stopPropagation();
|
|
35
37
|
if (!isDisabled)
|
|
36
38
|
onIconClick();
|
|
37
|
-
}, display: "inline-flex", alignItems: "center", flexShrink: 0, ml: "0.25rem", borderRadius: "full", transition: (0, motion_1.transitionFor)(["opacity"]), _hover: { opacity: 0.8 }, sx: { ...(0, focusRing_styles_1.focusVisibleStyles)(colors), ...(0, motion_2.reducedMotionSx)() }, children: (0, jsx_runtime_1.jsx)(
|
|
38
|
-
};
|
|
39
|
+
}, display: "inline-flex", alignItems: "center", flexShrink: 0, ml: "0.25rem", borderRadius: "full", transition: (0, motion_1.transitionFor)(["opacity"]), _hover: { opacity: 0.8 }, sx: { ...(0, focusRing_styles_1.focusVisibleStyles)(colors), ...(0, motion_2.reducedMotionSx)() }, children: (0, jsx_runtime_1.jsx)(react_2.Icon, { as: icon, boxSize: ICON_SIZE[size] }) })) : ((0, jsx_runtime_1.jsx)(react_2.TagRightIcon, { as: icon, boxSize: ICON_SIZE[size], "aria-hidden": true })))] }));
|
|
40
|
+
});
|
|
41
|
+
Tag.displayName = "Tag";
|
|
39
42
|
exports.default = Tag;
|
|
@@ -5,6 +5,8 @@ const accentText_1 = require("../../Theme/tokens/builders/accentText");
|
|
|
5
5
|
const filledSurface_1 = require("../../Theme/tokens/builders/filledSurface");
|
|
6
6
|
const tone_1 = require("../../Theme/tokens/builders/tone");
|
|
7
7
|
const motion_1 = require("../../Theme/tokens/primitives/motion");
|
|
8
|
+
const states_1 = require("../../Theme/tokens/primitives/states");
|
|
9
|
+
const typography_1 = require("../../Theme/tokens/primitives/typography");
|
|
8
10
|
const motion_2 = require("../../Theme/chakra/motion");
|
|
9
11
|
const focusRing_styles_1 = require("../../Theme/chakra/focusRing.styles");
|
|
10
12
|
exports.INTERACTIVE_HOVER = "&[data-interactive]:hover";
|
|
@@ -33,7 +35,7 @@ exports.Tag = {
|
|
|
33
35
|
transition: (0, motion_1.transitionFor)(["background-color", "color", "border-color", "box-shadow"]),
|
|
34
36
|
...(0, motion_2.reducedMotionSx)(),
|
|
35
37
|
"&[data-interactive]": { cursor: "pointer" },
|
|
36
|
-
"&[data-disabled]": { opacity:
|
|
38
|
+
"&[data-disabled]": { opacity: states_1.DISABLED_OPACITY, cursor: "not-allowed", pointerEvents: "none" },
|
|
37
39
|
},
|
|
38
40
|
label: {
|
|
39
41
|
lineHeight: 1.45,
|
|
@@ -45,13 +47,13 @@ exports.Tag = {
|
|
|
45
47
|
}),
|
|
46
48
|
sizes: {
|
|
47
49
|
xs: {
|
|
48
|
-
container: { fontSize:
|
|
50
|
+
container: { fontSize: typography_1.fontSizes["xs-minus"], px: 2, h: "1.25rem" },
|
|
49
51
|
},
|
|
50
52
|
sm: {
|
|
51
|
-
container: { fontSize:
|
|
53
|
+
container: { fontSize: typography_1.fontSizes.xs, px: 2.5, h: "1.5rem" },
|
|
52
54
|
},
|
|
53
55
|
md: {
|
|
54
|
-
container: { fontSize:
|
|
56
|
+
container: { fontSize: typography_1.fontSizes["xs-plus"], px: 3, h: "1.75rem" },
|
|
55
57
|
},
|
|
56
58
|
lg: {
|
|
57
59
|
container: { fontSize: "0.9375rem", px: 3.5, h: "2rem" },
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
|
+
const react_1 = require("react");
|
|
8
|
+
const react_2 = require("@chakra-ui/react");
|
|
9
|
+
const lucide_react_1 = require("lucide-react");
|
|
10
|
+
const useCustomTheme_1 = require("../../Theme/useCustomTheme");
|
|
11
|
+
const controlSizes_1 = require("../../Theme/tokens/primitives/controlSizes");
|
|
12
|
+
const placeholderInk_1 = require("../../Theme/tokens/builders/placeholderInk");
|
|
13
|
+
const motion_1 = require("../../Theme/chakra/motion");
|
|
14
|
+
const fieldStyles_1 = require("../Common/fieldStyles");
|
|
15
|
+
const FormLabel_1 = require("../Common/FormLabel");
|
|
16
|
+
const FieldMessage_1 = __importDefault(require("../Common/FieldMessage"));
|
|
17
|
+
const useFieldIds_1 = require("../Common/useFieldIds");
|
|
18
|
+
const searchSelectSize_1 = require("../SearchSelect/searchSelectSize");
|
|
19
|
+
const Tag_1 = __importDefault(require("../Tag/Tag"));
|
|
20
|
+
const tagEntries_1 = require("./tagEntries");
|
|
21
|
+
const TagInput = (0, react_1.forwardRef)(function TagInput({ value, onChange, validate, maxTags, allowDuplicates = false, addOnBlur = false, id, name, label, "aria-label": ariaLabel, placeholder, isRequired = false, isInformation, informationMessage, isDisabled = false, isReadOnly = false, error, errorMessage, helperText, size = controlSizes_1.DEFAULT_CONTROL_SIZE, width = "100%", }, ref) {
|
|
22
|
+
const theme = (0, useCustomTheme_1.useCustomTheme)();
|
|
23
|
+
const s = (0, searchSelectSize_1.getSearchSelectSizeStyles)(size);
|
|
24
|
+
const inputRef = (0, react_1.useRef)(null);
|
|
25
|
+
const mergedRef = (0, react_2.useMergeRefs)(inputRef, ref);
|
|
26
|
+
const [draft, setDraft] = (0, react_1.useState)("");
|
|
27
|
+
const [rejection, setRejection] = (0, react_1.useState)(null);
|
|
28
|
+
const [announcement, setAnnouncement] = (0, react_1.useState)("");
|
|
29
|
+
const isInvalid = Boolean(error || rejection);
|
|
30
|
+
const shownError = rejection !== null && rejection !== void 0 ? rejection : errorMessage;
|
|
31
|
+
const ids = (0, useFieldIds_1.useFieldIds)(id, { error: isInvalid, errorMessage: shownError, helperText });
|
|
32
|
+
const locked = isDisabled || isReadOnly;
|
|
33
|
+
const commit = (text) => {
|
|
34
|
+
const result = (0, tagEntries_1.addTags)(value, (0, tagEntries_1.splitEntries)(text), { validate, maxTags, allowDuplicates });
|
|
35
|
+
if (result.added.length) {
|
|
36
|
+
onChange(result.tags);
|
|
37
|
+
setAnnouncement(`Added ${result.added.join(", ")}`);
|
|
38
|
+
}
|
|
39
|
+
setRejection(result.message);
|
|
40
|
+
setDraft(result.rejected.join(", "));
|
|
41
|
+
};
|
|
42
|
+
const removeAt = (index) => {
|
|
43
|
+
const removed = value[index];
|
|
44
|
+
onChange(value.filter((_, i) => i !== index));
|
|
45
|
+
setAnnouncement(`Removed ${removed}`);
|
|
46
|
+
setRejection(null);
|
|
47
|
+
};
|
|
48
|
+
const onKeyDown = (event) => {
|
|
49
|
+
if (locked)
|
|
50
|
+
return;
|
|
51
|
+
if (event.key === "Enter" || event.key === ",") {
|
|
52
|
+
if (event.key === "Enter" && !draft.trim())
|
|
53
|
+
return;
|
|
54
|
+
event.preventDefault();
|
|
55
|
+
commit(draft);
|
|
56
|
+
}
|
|
57
|
+
else if (event.key === "Backspace" && draft === "" && value.length > 0) {
|
|
58
|
+
removeAt(value.length - 1);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const onPaste = (event) => {
|
|
62
|
+
const pasted = event.clipboardData.getData("text");
|
|
63
|
+
if (locked || !(0, tagEntries_1.hasSeparator)(pasted))
|
|
64
|
+
return;
|
|
65
|
+
event.preventDefault();
|
|
66
|
+
const { selectionStart, selectionEnd } = event.currentTarget;
|
|
67
|
+
commit(`${draft.slice(0, selectionStart !== null && selectionStart !== void 0 ? selectionStart : draft.length)}${pasted}${draft.slice(selectionEnd !== null && selectionEnd !== void 0 ? selectionEnd : draft.length)}`);
|
|
68
|
+
};
|
|
69
|
+
const onInput = (event) => {
|
|
70
|
+
setDraft(event.target.value);
|
|
71
|
+
setRejection(null);
|
|
72
|
+
};
|
|
73
|
+
const onBlur = () => {
|
|
74
|
+
if (addOnBlur && !locked && draft.trim())
|
|
75
|
+
commit(draft);
|
|
76
|
+
};
|
|
77
|
+
const focusFromBox = (event) => {
|
|
78
|
+
var _a;
|
|
79
|
+
if (event.target !== event.currentTarget || isDisabled)
|
|
80
|
+
return;
|
|
81
|
+
event.preventDefault();
|
|
82
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
83
|
+
};
|
|
84
|
+
return ((0, jsx_runtime_1.jsxs)(react_2.Box, { width: width, children: [label && ((0, jsx_runtime_1.jsx)(FormLabel_1.TextLabel, { label: label, id: ids.inputId, isRequired: isRequired, isInformation: isInformation, informationMessage: informationMessage })), (0, jsx_runtime_1.jsxs)(react_2.Flex, { wrap: "wrap", gap: s.gap, align: "center", px: s.px, minH: s.minH, onMouseDown: focusFromBox, sx: {
|
|
85
|
+
...(0, fieldStyles_1.getFieldStateStyles)(theme, { error: isInvalid, disabled: isDisabled }),
|
|
86
|
+
...(0, motion_1.reducedMotionSx)(),
|
|
87
|
+
}, _hover: isDisabled || isInvalid ? undefined : { borderColor: (0, fieldStyles_1.fieldHoverBorder)(theme.colors) }, _focusWithin: {
|
|
88
|
+
borderColor: isInvalid ? theme.colors.semanticText.error : theme.colors.primary[500],
|
|
89
|
+
boxShadow: (0, fieldStyles_1.fieldFocusRing)(theme),
|
|
90
|
+
}, children: [value.map((tag, index) => ((0, jsx_runtime_1.jsx)(Tag_1.default, { size: s.tagSize, colorScheme: "primary", label: tag, isDisabled: isDisabled, icon: locked ? undefined : lucide_react_1.X, onIconClick: locked
|
|
91
|
+
? undefined
|
|
92
|
+
: () => {
|
|
93
|
+
var _a;
|
|
94
|
+
removeAt(index);
|
|
95
|
+
(_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
|
|
96
|
+
} }, `${index}:${tag}`))), (0, jsx_runtime_1.jsx)(react_2.Input, { ref: mergedRef, type: "text", value: draft, isDisabled: isDisabled, isReadOnly: isReadOnly, isRequired: isRequired, isInvalid: isInvalid, ...ids.controlProps, "aria-label": label ? undefined : ariaLabel, size: size, variant: "unstyled", h: s.fieldHeight, minH: s.fieldHeight, fontSize: s.fieldFontSize, fontWeight: 400, color: theme.colors.text[900], flex: "1", minW: 0, _placeholder: { color: (0, placeholderInk_1.placeholderInk)(theme.colors), opacity: 1 }, style: { backgroundColor: "transparent" }, onChange: onInput, onKeyDown: onKeyDown, onPaste: onPaste, onBlur: onBlur, placeholder: value.length === 0 ? placeholder : "" })] }), name && value.map((tag, index) => (0, jsx_runtime_1.jsx)("input", { type: "hidden", name: name, value: tag }, `${index}:${tag}`)), (0, jsx_runtime_1.jsx)(react_2.VisuallyHidden, { role: "status", "aria-live": "polite", position: "fixed", top: 0, left: 0, children: announcement }), (0, jsx_runtime_1.jsx)(FieldMessage_1.default, { error: isInvalid, errorMessage: shownError, helperText: helperText, helperId: ids.helperId, errorId: ids.errorId })] }));
|
|
97
|
+
});
|
|
98
|
+
TagInput.displayName = "TagInput";
|
|
99
|
+
exports.default = TagInput;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { ControlSize } from "../../Theme/tokens/primitives/controlSizes";
|
|
2
|
+
/** `false` or a non-empty string rejects `tag` (the string is shown as the message); `true` or `undefined` accepts. */
|
|
3
|
+
export type TagValidator = (tag: string, tags: readonly string[]) => boolean | string | undefined;
|
|
4
|
+
/** Free-text chips: Enter or comma adds, Backspace on an empty input removes the last; `ref` is the text `<input>`. */
|
|
5
|
+
export type TagInputProps = {
|
|
6
|
+
/** The committed tags, in order. Controlled: the field never edits it itself. */
|
|
7
|
+
value: string[];
|
|
8
|
+
/** Called with the next list after an add or a remove. */
|
|
9
|
+
onChange: (tags: string[]) => void;
|
|
10
|
+
/** Runs on each trimmed entry before it is added; a rejected entry stays in the input with its message. */
|
|
11
|
+
validate?: TagValidator;
|
|
12
|
+
/** Cap on tags; adding past it is rejected with a message. */
|
|
13
|
+
maxTags?: number;
|
|
14
|
+
/** Allows the same tag twice. Defaults to false, compared case-insensitively. */
|
|
15
|
+
allowDuplicates?: boolean;
|
|
16
|
+
/** Also commits the typed text when focus leaves the input. Defaults to false. */
|
|
17
|
+
addOnBlur?: boolean;
|
|
18
|
+
/** DOM id of the text input; the label's `for` and the message ids derive from it. Generated when omitted. */
|
|
19
|
+
id?: string;
|
|
20
|
+
/** Submits each tag as its own hidden input with this name; the half-typed text is never submitted. */
|
|
21
|
+
name?: string;
|
|
22
|
+
label?: string;
|
|
23
|
+
/** Names the input when there is no visible `label`. */
|
|
24
|
+
"aria-label"?: string;
|
|
25
|
+
/** Shown only while there are no tags. */
|
|
26
|
+
placeholder?: string;
|
|
27
|
+
/** Label asterisk plus native `required` on the input. */
|
|
28
|
+
isRequired?: boolean;
|
|
29
|
+
/** Shows an info icon beside the label; needs both `label` and `informationMessage`. */
|
|
30
|
+
isInformation?: boolean;
|
|
31
|
+
informationMessage?: string;
|
|
32
|
+
/** Dims the chips, disables the input and drops the remove buttons. */
|
|
33
|
+
isDisabled?: boolean;
|
|
34
|
+
/** Keeps the input focusable but drops typing and the remove buttons. */
|
|
35
|
+
isReadOnly?: boolean;
|
|
36
|
+
/** Error border and `aria-invalid`; swaps `helperText` for `errorMessage`. A rejected entry sets this too. */
|
|
37
|
+
error?: boolean;
|
|
38
|
+
/** Shown while `error` is true; a rejected entry's own message wins until the input changes. */
|
|
39
|
+
errorMessage?: string;
|
|
40
|
+
/** Shown under the field when there is no error; linked via `aria-describedby`. */
|
|
41
|
+
helperText?: string;
|
|
42
|
+
/** Field height on the control scale: xs 32, sm 38, md 40, lg 48px; grows a row at a time. Defaults to `sm`. */
|
|
43
|
+
size?: ControlSize;
|
|
44
|
+
/** Width of the whole field; defaults to "100%". */
|
|
45
|
+
width?: string | number;
|
|
46
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { TagValidator } from "./TagInputProps";
|
|
2
|
+
export type AddRules = {
|
|
3
|
+
validate?: TagValidator;
|
|
4
|
+
maxTags?: number;
|
|
5
|
+
allowDuplicates?: boolean;
|
|
6
|
+
};
|
|
7
|
+
export type AddResult = {
|
|
8
|
+
tags: string[];
|
|
9
|
+
added: string[];
|
|
10
|
+
rejected: string[];
|
|
11
|
+
message: string | null;
|
|
12
|
+
};
|
|
13
|
+
export declare const hasSeparator: (text: string) => boolean;
|
|
14
|
+
export declare const splitEntries: (text: string) => string[];
|
|
15
|
+
export declare const addTags: (current: readonly string[], entries: readonly string[], rules: AddRules) => AddResult;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addTags = exports.splitEntries = exports.hasSeparator = void 0;
|
|
4
|
+
const SEPARATORS = /[,\r\n]/;
|
|
5
|
+
const hasSeparator = (text) => SEPARATORS.test(text);
|
|
6
|
+
exports.hasSeparator = hasSeparator;
|
|
7
|
+
const splitEntries = (text) => text
|
|
8
|
+
.split(SEPARATORS)
|
|
9
|
+
.map((entry) => entry.trim())
|
|
10
|
+
.filter(Boolean);
|
|
11
|
+
exports.splitEntries = splitEntries;
|
|
12
|
+
const fold = (tag) => tag.toLocaleLowerCase();
|
|
13
|
+
const rejection = (entry, tags, seen, rules) => {
|
|
14
|
+
const { validate, maxTags, allowDuplicates = false } = rules;
|
|
15
|
+
if (maxTags !== undefined && tags.length >= maxTags)
|
|
16
|
+
return `You can add up to ${maxTags} ${maxTags === 1 ? "tag" : "tags"}.`;
|
|
17
|
+
if (!allowDuplicates && seen.has(fold(entry)))
|
|
18
|
+
return `"${entry}" is already added.`;
|
|
19
|
+
const verdict = validate === null || validate === void 0 ? void 0 : validate(entry, tags);
|
|
20
|
+
if (verdict === false)
|
|
21
|
+
return `"${entry}" is not valid.`;
|
|
22
|
+
if (typeof verdict === "string" && verdict)
|
|
23
|
+
return verdict;
|
|
24
|
+
return null;
|
|
25
|
+
};
|
|
26
|
+
const addTags = (current, entries, rules) => {
|
|
27
|
+
const tags = [...current];
|
|
28
|
+
const seen = new Set(tags.map(fold));
|
|
29
|
+
const added = [];
|
|
30
|
+
const rejected = [];
|
|
31
|
+
let message = null;
|
|
32
|
+
for (const entry of entries) {
|
|
33
|
+
const reason = rejection(entry, tags, seen, rules);
|
|
34
|
+
if (reason) {
|
|
35
|
+
rejected.push(entry);
|
|
36
|
+
message = message !== null && message !== void 0 ? message : reason;
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
tags.push(entry);
|
|
40
|
+
seen.add(fold(entry));
|
|
41
|
+
added.push(entry);
|
|
42
|
+
}
|
|
43
|
+
return { tags, added, rejected, message };
|
|
44
|
+
};
|
|
45
|
+
exports.addTags = addTags;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
7
|
+
const react_1 = require("react");
|
|
8
|
+
const react_2 = require("@chakra-ui/react");
|
|
9
|
+
const useCustomTheme_1 = require("../../Theme/useCustomTheme");
|
|
10
|
+
const controlSizes_1 = require("../../Theme/tokens/primitives/controlSizes");
|
|
11
|
+
const FormLabel_1 = require("../Common/FormLabel");
|
|
12
|
+
const FieldMessage_1 = __importDefault(require("../Common/FieldMessage"));
|
|
13
|
+
const useFieldIds_1 = require("../Common/useFieldIds");
|
|
14
|
+
const fieldStyles_1 = require("../Common/fieldStyles");
|
|
15
|
+
const timeParts_1 = require("./timeParts");
|
|
16
|
+
const EMPTY = "";
|
|
17
|
+
const TimePicker = (0, react_1.forwardRef)(function TimePicker({ value, date, onChange, use24Hour, dateFormat, minuteStep, baseDate, isDisabled, disabled: legacyDisabled, id, name, label, "aria-label": ariaLabel, isRequired = false, isInformation, informationMessage, error, errorMessage, helperText, size = controlSizes_1.DEFAULT_CONTROL_SIZE, width = "100%", }, ref) {
|
|
18
|
+
var _a;
|
|
19
|
+
const theme = (0, useCustomTheme_1.useCustomTheme)();
|
|
20
|
+
const ids = (0, useFieldIds_1.useFieldIds)(id, { error, errorMessage, helperText });
|
|
21
|
+
const current = value !== undefined ? value : date !== null && date !== void 0 ? date : null;
|
|
22
|
+
const twelveHour = (0, timeParts_1.isTwelveHour)(use24Hour, dateFormat);
|
|
23
|
+
const minutes = (0, react_1.useMemo)(() => (0, timeParts_1.minuteOptions)(minuteStep, current ? current.getMinutes() : null), [minuteStep, current]);
|
|
24
|
+
const disabled = (_a = isDisabled !== null && isDisabled !== void 0 ? isDisabled : legacyDisabled) !== null && _a !== void 0 ? _a : false;
|
|
25
|
+
const selectSx = (0, react_1.useMemo)(() => (0, fieldStyles_1.fieldControlStyles)(theme.colors), [theme.colors]);
|
|
26
|
+
const hour24 = current ? current.getHours() : null;
|
|
27
|
+
const commit = (nextHour24, nextMinute) => { var _a; return onChange((0, timeParts_1.atTime)((_a = current !== null && current !== void 0 ? current : baseDate) !== null && _a !== void 0 ? _a : new Date(), nextHour24, nextMinute)); };
|
|
28
|
+
const onHour = (event) => {
|
|
29
|
+
const picked = Number(event.target.value);
|
|
30
|
+
const next = twelveHour ? (0, timeParts_1.toHour24)(picked, hour24 === null ? "AM" : (0, timeParts_1.meridiemOf)(hour24)) : picked;
|
|
31
|
+
commit(next, current ? current.getMinutes() : 0);
|
|
32
|
+
};
|
|
33
|
+
const onMinute = (event) => commit(hour24 !== null && hour24 !== void 0 ? hour24 : 0, Number(event.target.value));
|
|
34
|
+
const onMeridiem = (event) => {
|
|
35
|
+
const meridiem = event.target.value === "PM" ? "PM" : "AM";
|
|
36
|
+
commit((0, timeParts_1.toHour24)(hour24 === null ? 12 : (0, timeParts_1.displayHour)(hour24, true), meridiem), current ? current.getMinutes() : 0);
|
|
37
|
+
};
|
|
38
|
+
const shared = {
|
|
39
|
+
flex: "1",
|
|
40
|
+
minW: 0,
|
|
41
|
+
size,
|
|
42
|
+
isDisabled: disabled,
|
|
43
|
+
sx: selectSx,
|
|
44
|
+
"aria-describedby": ids.describedBy,
|
|
45
|
+
};
|
|
46
|
+
const placeholder = current ? null : ((0, jsx_runtime_1.jsx)("option", { value: EMPTY, disabled: true, children: "--" }));
|
|
47
|
+
return ((0, jsx_runtime_1.jsxs)(react_2.FormControl, { isDisabled: disabled, isInvalid: error, isRequired: isRequired, width: width, "aria-labelledby": label ? ids.labelId : undefined, "aria-label": label ? undefined : ariaLabel, children: [label && ((0, jsx_runtime_1.jsx)(react_2.Box, { id: ids.labelId, children: (0, jsx_runtime_1.jsx)(FormLabel_1.TextLabel, { label: label, id: `${ids.inputId}-hour`, isRequired: isRequired, isInformation: isInformation, informationMessage: informationMessage }) })), (0, jsx_runtime_1.jsxs)(react_2.HStack, { spacing: 1.5, w: "100%", children: [(0, jsx_runtime_1.jsxs)(react_2.Select, { ...shared, ref: ref, id: `${ids.inputId}-hour`, "aria-label": "Hour", value: hour24 === null ? EMPTY : (0, timeParts_1.displayHour)(hour24, twelveHour), onChange: onHour, children: [placeholder, (twelveHour ? timeParts_1.HOURS_12 : timeParts_1.HOURS_24).map((hour) => ((0, jsx_runtime_1.jsx)("option", { value: hour, children: (0, timeParts_1.pad2)(hour) }, hour)))] }), (0, jsx_runtime_1.jsxs)(react_2.Select, { ...shared, id: `${ids.inputId}-minute`, "aria-label": "Minute", value: current ? current.getMinutes() : EMPTY, onChange: onMinute, children: [placeholder, minutes.map((minute) => ((0, jsx_runtime_1.jsx)("option", { value: minute, children: (0, timeParts_1.pad2)(minute) }, minute)))] }), twelveHour && ((0, jsx_runtime_1.jsxs)(react_2.Select, { ...shared, id: `${ids.inputId}-meridiem`, "aria-label": "AM or PM", value: hour24 === null ? EMPTY : (0, timeParts_1.meridiemOf)(hour24), onChange: onMeridiem, children: [placeholder, (0, jsx_runtime_1.jsx)("option", { value: "AM", children: "AM" }), (0, jsx_runtime_1.jsx)("option", { value: "PM", children: "PM" })] }))] }), name && (0, jsx_runtime_1.jsx)("input", { type: "hidden", name: name, value: current ? `${(0, timeParts_1.pad2)(current.getHours())}:${(0, timeParts_1.pad2)(current.getMinutes())}` : EMPTY }), (0, jsx_runtime_1.jsx)(FieldMessage_1.default, { error: error, errorMessage: errorMessage, helperText: helperText, helperId: ids.helperId, errorId: ids.errorId })] }));
|
|
48
|
+
});
|
|
49
|
+
TimePicker.displayName = "TimePicker";
|
|
50
|
+
exports.default = TimePicker;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { ControlSize } from "../../Theme/tokens/primitives/controlSizes";
|
|
2
|
+
/** Inline hour, minute and AM/PM selects with the field label and message row; `ref` is the hour `<select>`. */
|
|
3
|
+
export type TimePickerProps = {
|
|
4
|
+
/** Controlled time; `null` or omitted shows "--" in every select until one is picked. */
|
|
5
|
+
value?: Date | null;
|
|
6
|
+
/** @deprecated Use `value`; kept so the old DatePicker `TimePickerProps` shape still fits. `value` wins. */
|
|
7
|
+
date?: Date;
|
|
8
|
+
/** Fires with a Date on the day of `value` (else `baseDate`, else today) at the picked time, seconds zeroed. */
|
|
9
|
+
onChange: (date: Date) => void;
|
|
10
|
+
/** 24-hour selects instead of 12-hour plus AM/PM. Defaults to false. */
|
|
11
|
+
use24Hour?: boolean;
|
|
12
|
+
/** @deprecated Use `use24Hour`; only read to pick 12h (`h` then `a`, e.g. `hh:mm a`) or 24h. `use24Hour` wins. */
|
|
13
|
+
dateFormat?: string;
|
|
14
|
+
/** Minutes offered, floored and clamped to 1-60; a `value` off the step is still listed. Defaults to 1. */
|
|
15
|
+
minuteStep?: number;
|
|
16
|
+
/** Day a picked time lands on while `value` is empty; defaults to today. */
|
|
17
|
+
baseDate?: Date;
|
|
18
|
+
isDisabled?: boolean;
|
|
19
|
+
/** @deprecated Use `isDisabled`; `isDisabled` wins when both are set. */
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
/** Base id: the selects get `<id>-hour`, `<id>-minute`, `<id>-meridiem`; generated when omitted. */
|
|
22
|
+
id?: string;
|
|
23
|
+
/** Submits the time as `HH:mm` (24-hour) through a hidden input, or "" while empty. */
|
|
24
|
+
name?: string;
|
|
25
|
+
/** Visible label; names the group, and clicking it focuses the hour select. */
|
|
26
|
+
label?: string;
|
|
27
|
+
/** Names the group when there is no visible `label`. */
|
|
28
|
+
"aria-label"?: string;
|
|
29
|
+
/** Label asterisk plus native `required` on every select. */
|
|
30
|
+
isRequired?: boolean;
|
|
31
|
+
/** Shows an info icon beside the label; needs both `label` and `informationMessage`. */
|
|
32
|
+
isInformation?: boolean;
|
|
33
|
+
informationMessage?: string;
|
|
34
|
+
/** Error border and `aria-invalid` on every select; swaps `helperText` for `errorMessage`. */
|
|
35
|
+
error?: boolean;
|
|
36
|
+
/** Shown while `error` is true. */
|
|
37
|
+
errorMessage?: string;
|
|
38
|
+
/** Shown under the selects when there is no error; linked via `aria-describedby`. */
|
|
39
|
+
helperText?: string;
|
|
40
|
+
/** Control-scale height of each select: xs 32, sm 38, md 40, lg 48px. Defaults to `sm`, as in DatePicker. */
|
|
41
|
+
size?: ControlSize;
|
|
42
|
+
/** Width of the whole field; defaults to "100%". */
|
|
43
|
+
width?: string | number;
|
|
44
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type Meridiem = "AM" | "PM";
|
|
2
|
+
export declare const HOURS_12: readonly number[];
|
|
3
|
+
export declare const HOURS_24: readonly number[];
|
|
4
|
+
export declare const pad2: (value: number) => string;
|
|
5
|
+
export declare const isTwelveHour: (use24Hour: boolean | undefined, dateFormat: string | undefined) => boolean;
|
|
6
|
+
export declare const minuteOptions: (step: number | undefined, current: number | null) => number[];
|
|
7
|
+
export declare const displayHour: (hour24: number, twelveHour: boolean) => number;
|
|
8
|
+
export declare const meridiemOf: (hour24: number) => Meridiem;
|
|
9
|
+
export declare const toHour24: (hour12: number, meridiem: Meridiem) => number;
|
|
10
|
+
export declare const atTime: (day: Date, hour24: number, minute: number) => Date;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.atTime = exports.toHour24 = exports.meridiemOf = exports.displayHour = exports.minuteOptions = exports.isTwelveHour = exports.pad2 = exports.HOURS_24 = exports.HOURS_12 = void 0;
|
|
4
|
+
exports.HOURS_12 = Array.from({ length: 12 }, (_, i) => i + 1);
|
|
5
|
+
exports.HOURS_24 = Array.from({ length: 24 }, (_, i) => i);
|
|
6
|
+
const TWELVE_HOUR_FORMAT = /h.*a/i;
|
|
7
|
+
const pad2 = (value) => String(value).padStart(2, "0");
|
|
8
|
+
exports.pad2 = pad2;
|
|
9
|
+
const isTwelveHour = (use24Hour, dateFormat) => {
|
|
10
|
+
if (use24Hour !== undefined)
|
|
11
|
+
return !use24Hour;
|
|
12
|
+
if (dateFormat !== undefined)
|
|
13
|
+
return TWELVE_HOUR_FORMAT.test(dateFormat);
|
|
14
|
+
return true;
|
|
15
|
+
};
|
|
16
|
+
exports.isTwelveHour = isTwelveHour;
|
|
17
|
+
const minuteOptions = (step, current) => {
|
|
18
|
+
const size = Math.min(60, Math.max(1, Math.floor(step !== null && step !== void 0 ? step : 1) || 1));
|
|
19
|
+
const minutes = [];
|
|
20
|
+
for (let minute = 0; minute < 60; minute += size)
|
|
21
|
+
minutes.push(minute);
|
|
22
|
+
if (current !== null && !minutes.includes(current)) {
|
|
23
|
+
minutes.push(current);
|
|
24
|
+
minutes.sort((a, b) => a - b);
|
|
25
|
+
}
|
|
26
|
+
return minutes;
|
|
27
|
+
};
|
|
28
|
+
exports.minuteOptions = minuteOptions;
|
|
29
|
+
const displayHour = (hour24, twelveHour) => twelveHour ? hour24 % 12 || 12 : hour24;
|
|
30
|
+
exports.displayHour = displayHour;
|
|
31
|
+
const meridiemOf = (hour24) => (hour24 >= 12 ? "PM" : "AM");
|
|
32
|
+
exports.meridiemOf = meridiemOf;
|
|
33
|
+
const toHour24 = (hour12, meridiem) => (hour12 % 12) + (meridiem === "PM" ? 12 : 0);
|
|
34
|
+
exports.toHour24 = toHour24;
|
|
35
|
+
const atTime = (day, hour24, minute) => new Date(day.getFullYear(), day.getMonth(), day.getDate(), hour24, minute, 0, 0);
|
|
36
|
+
exports.atTime = atTime;
|