@cube-dev/ui-kit 0.121.0 → 0.121.1
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/dist/CHANGELOG.md +6 -0
- package/dist/_internal/hooks/use-chained-callback.js +1 -1
- package/dist/_internal/hooks/use-debounced-value.js +1 -1
- package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
- package/dist/_internal/hooks/use-event.js +1 -1
- package/dist/_internal/hooks/use-is-first-render.js +1 -1
- package/dist/_internal/hooks/use-sync-ref.js +1 -1
- package/dist/_internal/hooks/use-timer/timer.js +1 -1
- package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
- package/dist/_internal/hooks/use-warn.js +1 -1
- package/dist/components/Block.js +1 -1
- package/dist/components/CollectionItem.js +1 -1
- package/dist/components/GlobalStyles.js +1 -1
- package/dist/components/GridProvider.js +1 -1
- package/dist/components/HiddenInput.js +1 -1
- package/dist/components/Root.js +1 -1
- package/dist/components/actions/Action/Action.js +1 -1
- package/dist/components/actions/Banner/Banner.js +1 -1
- package/dist/components/actions/Button/Button.js +1 -1
- package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
- package/dist/components/actions/ButtonSplit/context.js +1 -1
- package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
- package/dist/components/actions/CommandMenu/styled.js +1 -1
- package/dist/components/actions/ItemAction/ItemAction.js +1 -1
- package/dist/components/actions/ItemActionContext.js +1 -1
- package/dist/components/actions/ItemButton/ItemButton.js +1 -1
- package/dist/components/actions/Link/Link.js +1 -1
- package/dist/components/actions/Menu/Menu.js +1 -1
- package/dist/components/actions/Menu/MenuItem.js +1 -1
- package/dist/components/actions/Menu/MenuSection.js +1 -1
- package/dist/components/actions/Menu/MenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/dist/components/actions/Menu/context.js +1 -1
- package/dist/components/actions/Menu/styled.js +1 -1
- package/dist/components/actions/index.js +1 -1
- package/dist/components/actions/use-action.js +1 -1
- package/dist/components/actions/use-anchored-menu.js +1 -1
- package/dist/components/actions/use-context-menu.js +1 -1
- package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
- package/dist/components/content/Alert/Alert.js +1 -1
- package/dist/components/content/Alert/use-alert.js +1 -1
- package/dist/components/content/Avatar/Avatar.js +1 -1
- package/dist/components/content/Badge/Badge.js +1 -1
- package/dist/components/content/Card/Card.js +1 -1
- package/dist/components/content/Content.js +1 -1
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
- package/dist/components/content/Disclosure/Disclosure.js +1 -1
- package/dist/components/content/Divider.js +1 -1
- package/dist/components/content/Footer.js +1 -1
- package/dist/components/content/Header.js +1 -1
- package/dist/components/content/HotKeys/HotKeys.js +1 -1
- package/dist/components/content/Item/Item.js +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
- package/dist/components/content/ItemCard/ItemCard.js +1 -1
- package/dist/components/content/Layout/GridLayout.js +1 -1
- package/dist/components/content/Layout/Layout.js +1 -1
- package/dist/components/content/Layout/LayoutBlock.js +1 -1
- package/dist/components/content/Layout/LayoutCenter.js +1 -1
- package/dist/components/content/Layout/LayoutContainer.js +1 -1
- package/dist/components/content/Layout/LayoutContent.js +1 -1
- package/dist/components/content/Layout/LayoutContext.js +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +1 -1
- package/dist/components/content/Layout/LayoutGrid.js +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +1 -1
- package/dist/components/content/Layout/LayoutPane.js +1 -1
- package/dist/components/content/Layout/LayoutPanel.js +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
- package/dist/components/content/Layout/LayoutToolbar.js +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/dist/components/content/Layout/index.js +1 -1
- package/dist/components/content/Layout/utils.js +1 -1
- package/dist/components/content/Paragraph.js +1 -1
- package/dist/components/content/Placeholder/Placeholder.js +1 -1
- package/dist/components/content/PrismCode/PrismCode.js +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/dist/components/content/Result/Result.js +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Tag/Tag.js +1 -1
- package/dist/components/content/Text.js +1 -1
- package/dist/components/content/TextItem/TextItem.js +1 -1
- package/dist/components/content/Title.js +1 -1
- package/dist/components/content/highlightText.js +1 -1
- package/dist/components/content/use-auto-tooltip.js +1 -1
- package/dist/components/fields/Checkbox/Checkbox.js +1 -1
- package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/dist/components/fields/Checkbox/context.js +1 -1
- package/dist/components/fields/ComboBox/ComboBox.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/intl.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.js +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
- package/dist/components/fields/Input/Input.js +1 -1
- package/dist/components/fields/ListBox/ListBox.js +1 -1
- package/dist/components/fields/NumberInput/NumberInput.js +1 -1
- package/dist/components/fields/NumberInput/StepButton.js +1 -1
- package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
- package/dist/components/fields/Picker/Picker.js +1 -1
- package/dist/components/fields/RadioGroup/Radio.js +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +1 -1
- package/dist/components/fields/Select/Select.d.ts +8 -2
- package/dist/components/fields/Select/Select.js +1 -1
- package/dist/components/fields/Select/Select.js.map +1 -1
- package/dist/components/fields/Slider/Gradation.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js +1 -1
- package/dist/components/fields/Slider/RangeSlider.js +1 -1
- package/dist/components/fields/Slider/Slider.js +1 -1
- package/dist/components/fields/Slider/SliderBase.js +1 -1
- package/dist/components/fields/Slider/SliderThumb.js +1 -1
- package/dist/components/fields/Slider/SliderTrack.js +1 -1
- package/dist/components/fields/Slider/elements.js +1 -1
- package/dist/components/fields/Slider/index.js +1 -1
- package/dist/components/fields/Switch/Switch.js +1 -1
- package/dist/components/fields/TextArea/TextArea.js +1 -1
- package/dist/components/fields/TextInput/TextInput.js +1 -1
- package/dist/components/fields/TextInput/TextInputBase.js +1 -1
- package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/dist/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
- package/dist/components/form/Form/Field.js +1 -1
- package/dist/components/form/Form/Form.js +1 -1
- package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/dist/components/form/Form/SubmitError.js +1 -1
- package/dist/components/form/Form/index.js +1 -1
- package/dist/components/form/Form/use-field/use-field-props.js +1 -1
- package/dist/components/form/Form/use-field/use-field.js +1 -1
- package/dist/components/form/Form/use-form.js +1 -1
- package/dist/components/form/Form/validation.js +1 -1
- package/dist/components/form/Label.js +1 -1
- package/dist/components/form/wrapper.js +1 -1
- package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
- package/dist/components/layout/Flex.js +1 -1
- package/dist/components/layout/Flow.js +1 -1
- package/dist/components/layout/Grid.js +1 -1
- package/dist/components/layout/Panel.js +1 -1
- package/dist/components/layout/Prefix.js +1 -1
- package/dist/components/layout/ResizablePanel.js +1 -1
- package/dist/components/layout/Space.js +1 -1
- package/dist/components/layout/Suffix.js +1 -1
- package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
- package/dist/components/navigation/Tabs/EditableTitle.js +1 -1
- package/dist/components/navigation/Tabs/TabButton.js +1 -1
- package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
- package/dist/components/navigation/Tabs/TabPanel.js +1 -1
- package/dist/components/navigation/Tabs/TabPicker.js +1 -1
- package/dist/components/navigation/Tabs/Tabs.js +1 -1
- package/dist/components/navigation/Tabs/TabsAction.js +1 -1
- package/dist/components/navigation/Tabs/TabsContext.js +1 -1
- package/dist/components/navigation/Tabs/styled.js +1 -1
- package/dist/components/navigation/Tabs/types.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
- package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
- package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
- package/dist/components/other/Calendar/Calendar.js +1 -1
- package/dist/components/other/Calendar/CalendarCell.js +1 -1
- package/dist/components/other/Calendar/CalendarGrid.js +1 -1
- package/dist/components/other/Calendar/RangeCalendar.js +1 -1
- package/dist/components/other/CloudLogo/CloudLogo.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
- package/dist/components/overlays/Dialog/Dialog.js +1 -1
- package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
- package/dist/components/overlays/Dialog/DialogForm.js +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
- package/dist/components/overlays/Dialog/context.js +1 -1
- package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/dist/components/overlays/Modal/Modal.js +1 -1
- package/dist/components/overlays/Modal/OpenTransition.js +1 -1
- package/dist/components/overlays/Modal/Overlay.js +1 -1
- package/dist/components/overlays/Modal/Popover.js +1 -1
- package/dist/components/overlays/Modal/Tray.js +1 -1
- package/dist/components/overlays/Modal/Underlay.js +1 -1
- package/dist/components/overlays/Notifications/Notification.js +1 -1
- package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
- package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
- package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
- package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
- package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
- package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
- package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
- package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
- package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
- package/dist/components/overlays/Notifications/index.js +1 -1
- package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
- package/dist/components/overlays/Notifications/use-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
- package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
- package/dist/components/overlays/Toast/ToastItem.js +1 -1
- package/dist/components/overlays/Toast/index.js +1 -1
- package/dist/components/overlays/Toast/useProgressToast.js +1 -1
- package/dist/components/overlays/Toast/useToast.js +1 -1
- package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
- package/dist/components/overlays/Tooltip/context.js +1 -1
- package/dist/components/portal/Portal.js +1 -1
- package/dist/components/portal/PortalProvider.js +1 -1
- package/dist/components/portal/usePortal.js +1 -1
- package/dist/components/shared/InvalidIcon.js +1 -1
- package/dist/components/shared/ValidIcon.js +1 -1
- package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
- package/dist/components/status/Spin/Cube.js +1 -1
- package/dist/components/status/Spin/InternalSpinner.js +1 -1
- package/dist/components/status/Spin/Spin.js +1 -1
- package/dist/components/status/Spin/SpinsContainer.js +1 -1
- package/dist/data/item-themes.js +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/dist/icons/AdjustmentsIcon.js +1 -1
- package/dist/icons/AiIcon.js +1 -1
- package/dist/icons/AreaChartIcon.js +1 -1
- package/dist/icons/BackwardIcon.js +1 -1
- package/dist/icons/BarChartIcon.js +1 -1
- package/dist/icons/BellFilledIcon.js +1 -1
- package/dist/icons/BellIcon.js +1 -1
- package/dist/icons/BooleanIcon.js +1 -1
- package/dist/icons/CalendarEditIcon.js +1 -1
- package/dist/icons/CalendarIcon.js +1 -1
- package/dist/icons/CaretDownIcon.js +1 -1
- package/dist/icons/CaretUpIcon.js +1 -1
- package/dist/icons/ChartAreaStackedIcon.js +1 -1
- package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarGroupedIcon.js +1 -1
- package/dist/icons/ChartBarHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarLineIcon.js +1 -1
- package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBoxPlot2Icon.js +1 -1
- package/dist/icons/ChartBoxPlotIcon.js +1 -1
- package/dist/icons/ChartBubbleIcon.js +1 -1
- package/dist/icons/ChartDonut2Icon.js +1 -1
- package/dist/icons/ChartFunnelIcon.js +1 -1
- package/dist/icons/ChartHeatmapIcon.js +1 -1
- package/dist/icons/ChartKPIIcon.js +1 -1
- package/dist/icons/ChartPie2Icon.js +1 -1
- package/dist/icons/ChartScatterIcon.js +1 -1
- package/dist/icons/CheckCircleFilledIcon.js +1 -1
- package/dist/icons/CheckCircleIcon.js +1 -1
- package/dist/icons/CheckIcon.js +1 -1
- package/dist/icons/CircleFilledIcon.js +1 -1
- package/dist/icons/ClearIcon.js +1 -1
- package/dist/icons/CloseCircleFilledIcon.js +1 -1
- package/dist/icons/CloseCircleIcon.js +1 -1
- package/dist/icons/CloseIcon.js +1 -1
- package/dist/icons/CodeIcon.js +1 -1
- package/dist/icons/ColumnTotalIcon.js +1 -1
- package/dist/icons/CopyIcon.js +1 -1
- package/dist/icons/CountIcon.js +1 -1
- package/dist/icons/CubeIcon.js +1 -1
- package/dist/icons/CubePauseIcon.js +1 -1
- package/dist/icons/CubePlayIcon.js +1 -1
- package/dist/icons/CurrencyDollarIcon.js +1 -1
- package/dist/icons/DangerIcon.js +1 -1
- package/dist/icons/DashboardIcon.js +1 -1
- package/dist/icons/DatabaseIcon.js +1 -1
- package/dist/icons/DecimalDecreaseIcon.js +1 -1
- package/dist/icons/DecimalIncreaseIcon.js +1 -1
- package/dist/icons/DirectionIcon.js +1 -1
- package/dist/icons/DonutIcon.js +1 -1
- package/dist/icons/DownIcon.js +1 -1
- package/dist/icons/EditIcon.js +1 -1
- package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
- package/dist/icons/ExclamationCircleIcon.js +1 -1
- package/dist/icons/ExclamationIcon.js +1 -1
- package/dist/icons/EyeIcon.js +1 -1
- package/dist/icons/EyeInvisibleIcon.js +1 -1
- package/dist/icons/FilterIcon.js +1 -1
- package/dist/icons/FolderFilledIcon.js +1 -1
- package/dist/icons/FolderIcon.js +1 -1
- package/dist/icons/FolderOpenFilledIcon.js +1 -1
- package/dist/icons/FolderOpenIcon.js +1 -1
- package/dist/icons/ForwardIcon.js +1 -1
- package/dist/icons/HierarchyIcon.js +1 -1
- package/dist/icons/HierarchyOpenIcon.js +1 -1
- package/dist/icons/Icon.js +1 -1
- package/dist/icons/InfoCircleIcon.js +1 -1
- package/dist/icons/InfoIcon.js +1 -1
- package/dist/icons/KeyIcon.js +1 -1
- package/dist/icons/LeftIcon.js +1 -1
- package/dist/icons/LineChartIcon.js +1 -1
- package/dist/icons/LoadingIcon.js +1 -1
- package/dist/icons/LockFilledIcon.js +1 -1
- package/dist/icons/LockIcon.js +1 -1
- package/dist/icons/MoreIcon.js +1 -1
- package/dist/icons/NotAllowedIcon.js +1 -1
- package/dist/icons/Number123Icon.js +1 -1
- package/dist/icons/NumberIcon.js +1 -1
- package/dist/icons/PauseCircleFilledIcon.js +1 -1
- package/dist/icons/PauseCircleIcon.js +1 -1
- package/dist/icons/PauseIcon.js +1 -1
- package/dist/icons/PercentageIcon.js +1 -1
- package/dist/icons/PieChartIcon.js +1 -1
- package/dist/icons/PlayCircleIcon.js +1 -1
- package/dist/icons/PlayIcon.js +1 -1
- package/dist/icons/PlusIcon.js +1 -1
- package/dist/icons/ProgressBarIcon.js +1 -1
- package/dist/icons/ReloadIcon.js +1 -1
- package/dist/icons/ReportIcon.js +1 -1
- package/dist/icons/ReturnIcon.js +1 -1
- package/dist/icons/RightIcon.js +1 -1
- package/dist/icons/RowTotalsIcon.js +1 -1
- package/dist/icons/SchemeIcon.js +1 -1
- package/dist/icons/SearchIcon.js +1 -1
- package/dist/icons/SemanticQueryIcon.js +1 -1
- package/dist/icons/SettingsIcon.js +1 -1
- package/dist/icons/ShieldFilledIcon.js +1 -1
- package/dist/icons/ShieldIcon.js +1 -1
- package/dist/icons/SlashIcon.js +1 -1
- package/dist/icons/SparklesIcon.js +1 -1
- package/dist/icons/SqlIcon.js +1 -1
- package/dist/icons/StatsIcon.js +1 -1
- package/dist/icons/StopIcon.js +1 -1
- package/dist/icons/StringIcon.js +1 -1
- package/dist/icons/SubtotalsIcon.js +1 -1
- package/dist/icons/SwitchIcon.js +1 -1
- package/dist/icons/TableIcon.js +1 -1
- package/dist/icons/ThumbsDownIcon.js +1 -1
- package/dist/icons/ThumbsUpIcon.js +1 -1
- package/dist/icons/ThunderboltCrossedIcon.js +1 -1
- package/dist/icons/ThunderboltFilledIcon.js +1 -1
- package/dist/icons/ThunderboltIcon.js +1 -1
- package/dist/icons/TimeIcon.js +1 -1
- package/dist/icons/TrashIcon.js +1 -1
- package/dist/icons/UnlockIcon.js +1 -1
- package/dist/icons/UpIcon.js +1 -1
- package/dist/icons/UserGroupIcon.js +1 -1
- package/dist/icons/UserIcon.js +1 -1
- package/dist/icons/UserLockIcon.js +1 -1
- package/dist/icons/ViewIcon.js +1 -1
- package/dist/icons/WarningFilledIcon.js +1 -1
- package/dist/icons/WarningIcon.js +1 -1
- package/dist/icons/wrap-icon.js +1 -1
- package/dist/index.js +1 -1
- package/dist/provider.js +1 -1
- package/dist/providers/TrackingProvider.js +1 -1
- package/dist/providers/navigationAdapter.default.js +1 -1
- package/dist/tokens/base.js +1 -1
- package/dist/tokens/colors.js +1 -1
- package/dist/tokens/index.js +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/shadows.js +1 -1
- package/dist/tokens/sizes.js +1 -1
- package/dist/tokens/spacing.js +1 -1
- package/dist/utils/ResizeSensor.js +1 -1
- package/dist/utils/is-dev-env.js +1 -1
- package/dist/utils/modules.js +1 -1
- package/dist/utils/promise.js +1 -1
- package/dist/utils/raf.js +1 -1
- package/dist/utils/random.js +1 -1
- package/dist/utils/range.js +1 -1
- package/dist/utils/react/RenderCache.js +1 -1
- package/dist/utils/react/Slots.js +1 -1
- package/dist/utils/react/chain.js +1 -1
- package/dist/utils/react/forwardRefWithGenerics.js +1 -1
- package/dist/utils/react/index.js +1 -1
- package/dist/utils/react/interactions.js +1 -1
- package/dist/utils/react/isTextOnly.js +1 -1
- package/dist/utils/react/mapProps.js +1 -1
- package/dist/utils/react/mergeProps.js +1 -1
- package/dist/utils/react/nullableValue.js +1 -1
- package/dist/utils/react/resolveIcon.js +1 -1
- package/dist/utils/react/sharedStore.js +1 -1
- package/dist/utils/react/useCombinedRefs.js +1 -1
- package/dist/utils/react/useControlledFocusVisible.js +1 -1
- package/dist/utils/react/useEventBus.js +1 -1
- package/dist/utils/react/useId.js +1 -1
- package/dist/utils/react/useIsDarwin.js +1 -1
- package/dist/utils/react/useKeySymbols.js +1 -1
- package/dist/utils/react/useLayoutEffect.js +1 -1
- package/dist/utils/react/useLocalStorage.js +1 -1
- package/dist/utils/react/useMergeStyles.js +1 -1
- package/dist/utils/react/useQaProps.js +1 -1
- package/dist/utils/react/useViewportSize.js +1 -1
- package/dist/utils/react/wrapNodeIfPlain.js +1 -1
- package/dist/utils/tree.js +1 -1
- package/dist/utils/warnings.js +1 -1
- package/dist/version.js +2 -2
- package/docs/BaseProperties.md +78 -0
- package/docs/ComplexLayout.md +459 -0
- package/docs/CreateComponent.md +410 -0
- package/docs/FieldProperties.md +117 -0
- package/docs/Introduction.md +122 -0
- package/docs/RenderCache.md +177 -0
- package/docs/Result.md +42 -0
- package/docs/SimpleLayout.md +26 -0
- package/docs/Typography.md +38 -0
- package/docs/components/Block.md +33 -0
- package/docs/components/CollectionItem.md +293 -0
- package/docs/components/GridProvider.md +38 -0
- package/docs/components/Root.md +50 -0
- package/docs/components/actions/Action.md +47 -0
- package/docs/components/actions/Banner.md +195 -0
- package/docs/components/actions/Button.md +209 -0
- package/docs/components/actions/ButtonGroup.md +46 -0
- package/docs/components/actions/ButtonSplit.md +199 -0
- package/docs/components/actions/CommandMenu.md +422 -0
- package/docs/components/actions/ItemAction.md +60 -0
- package/docs/components/actions/ItemButton.md +316 -0
- package/docs/components/actions/Link.md +325 -0
- package/docs/components/actions/Menu.md +485 -0
- package/docs/components/actions/MenuTrigger.md +47 -0
- package/docs/components/actions/SubMenuTrigger.md +38 -0
- package/docs/components/actions/use-anchored-menu.md +209 -0
- package/docs/components/actions/use-context-menu.md +218 -0
- package/docs/components/content/ActiveZone.md +37 -0
- package/docs/components/content/Alert.md +40 -0
- package/docs/components/content/Avatar.md +37 -0
- package/docs/components/content/Badge.md +194 -0
- package/docs/components/content/Card.md +40 -0
- package/docs/components/content/Content.md +44 -0
- package/docs/components/content/CopyPasteBlock.md +36 -0
- package/docs/components/content/CopySnippet.md +43 -0
- package/docs/components/content/Disclosure.md +181 -0
- package/docs/components/content/Divider.md +39 -0
- package/docs/components/content/Footer.md +35 -0
- package/docs/components/content/Header.md +35 -0
- package/docs/components/content/HotKeys.md +352 -0
- package/docs/components/content/Item.md +499 -0
- package/docs/components/content/ItemBadge.md +31 -0
- package/docs/components/content/ItemCard.md +131 -0
- package/docs/components/content/Layout.md +843 -0
- package/docs/components/content/Paragraph.md +32 -0
- package/docs/components/content/Placeholder.md +37 -0
- package/docs/components/content/PrismCode.md +36 -0
- package/docs/components/content/PrismDiffCode.md +29 -0
- package/docs/components/content/Result.md +46 -0
- package/docs/components/content/Skeleton.md +35 -0
- package/docs/components/content/Tag.md +165 -0
- package/docs/components/content/Text.md +54 -0
- package/docs/components/content/TextItem.md +217 -0
- package/docs/components/content/Title.md +45 -0
- package/docs/components/fields/Checkbox.md +176 -0
- package/docs/components/fields/ComboBox.md +651 -0
- package/docs/components/fields/DatePicker.md +227 -0
- package/docs/components/fields/FileInput.md +194 -0
- package/docs/components/fields/FilterListBox.md +726 -0
- package/docs/components/fields/FilterPicker.md +776 -0
- package/docs/components/fields/HueSlider.md +175 -0
- package/docs/components/fields/ListBox.md +714 -0
- package/docs/components/fields/NumberInput.md +180 -0
- package/docs/components/fields/PasswordInput.md +214 -0
- package/docs/components/fields/Picker.md +906 -0
- package/docs/components/fields/RadioGroup.md +310 -0
- package/docs/components/fields/SearchInput.md +224 -0
- package/docs/components/fields/Select.md +576 -0
- package/docs/components/fields/Slider.md +53 -0
- package/docs/components/fields/Switch.md +169 -0
- package/docs/components/fields/TextArea.md +61 -0
- package/docs/components/fields/TextInput.md +205 -0
- package/docs/components/fields/TextInputMapper.md +34 -0
- package/docs/components/form/Field.md +333 -0
- package/docs/components/form/Form.md +644 -0
- package/docs/components/form/FormInstance.md +307 -0
- package/docs/components/helpers/DisplayTransition.md +268 -0
- package/docs/components/helpers/IconSwitch.md +160 -0
- package/docs/components/layout/Flex.md +51 -0
- package/docs/components/layout/Flow.md +32 -0
- package/docs/components/layout/Grid.md +46 -0
- package/docs/components/layout/Panel.md +65 -0
- package/docs/components/layout/Prefix.md +37 -0
- package/docs/components/layout/ResizablePanel.md +69 -0
- package/docs/components/layout/Space.md +44 -0
- package/docs/components/layout/Suffix.md +39 -0
- package/docs/components/navigation/Tabs.md +726 -0
- package/docs/components/organisms/FileTabs.md +39 -0
- package/docs/components/organisms/StatsCard.md +40 -0
- package/docs/components/other/CloudLogo.md +33 -0
- package/docs/components/overlays/AlertDialog.md +51 -0
- package/docs/components/overlays/Dialog.md +200 -0
- package/docs/components/overlays/DialogContainer.md +201 -0
- package/docs/components/overlays/DialogForm.md +295 -0
- package/docs/components/overlays/DialogTrigger.md +191 -0
- package/docs/components/overlays/Notifications.md +402 -0
- package/docs/components/overlays/Toast.md +289 -0
- package/docs/components/overlays/Tooltip.md +400 -0
- package/docs/components/overlays/TooltipProvider.md +42 -0
- package/docs/components/overlays/TooltipTrigger.md +42 -0
- package/docs/components/overlays/UseDialogContainer.md +597 -0
- package/docs/components/portal/Portal.md +29 -0
- package/docs/components/status/LoadingAnimation.md +27 -0
- package/docs/components/status/Spin.md +35 -0
- package/docs/tasty/configuration.md +211 -0
- package/docs/tasty/debug.md +505 -0
- package/docs/tasty/injector.md +528 -0
- package/docs/tasty/styles.md +567 -0
- package/docs/tasty/tasty-static.md +376 -0
- package/docs/tasty/usage.md +643 -0
- package/package.json +4 -8
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
# FormInstance
|
|
2
|
+
|
|
3
|
+
The `CubeFormInstance` is the core form management class that provides programmatic control over form state, validation, and data handling. It serves as the central API for interacting with form fields, managing validation states, and handling form submission workflows.
|
|
4
|
+
|
|
5
|
+
## Creation
|
|
6
|
+
|
|
7
|
+
Form instances are typically created using the `useForm` hook:
|
|
8
|
+
|
|
9
|
+
```tsx
|
|
10
|
+
import { Form } from '@cube-dev/ui-kit';
|
|
11
|
+
|
|
12
|
+
function MyComponent() {
|
|
13
|
+
const [form] = Form.useForm();
|
|
14
|
+
|
|
15
|
+
return <Form form={form}>{/* form fields */}</Form>;
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Alternatively, you can create an instance directly:
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
import { CubeFormInstance } from '@cube-dev/ui-kit';
|
|
23
|
+
|
|
24
|
+
const formInstance = new CubeFormInstance();
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Field Management
|
|
28
|
+
|
|
29
|
+
### Field Values
|
|
30
|
+
|
|
31
|
+
Access and modify individual field values:
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
// Get a field value
|
|
35
|
+
const email = form.getFieldValue('email');
|
|
36
|
+
|
|
37
|
+
// Set a field value
|
|
38
|
+
form.setFieldValue('email', 'user@example.com');
|
|
39
|
+
|
|
40
|
+
// Get all field values (flat structure)
|
|
41
|
+
const allValues = form.getFieldsValue();
|
|
42
|
+
|
|
43
|
+
// Get form data (respects dot notation for nested objects)
|
|
44
|
+
const formData = form.getFormData();
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Batch Operations
|
|
48
|
+
|
|
49
|
+
Update multiple fields at once:
|
|
50
|
+
|
|
51
|
+
```tsx
|
|
52
|
+
// Set multiple field values
|
|
53
|
+
form.setFieldsValue({
|
|
54
|
+
email: 'user@example.com',
|
|
55
|
+
name: 'John Doe',
|
|
56
|
+
'profile.age': 25
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
// Reset specific fields to default values
|
|
60
|
+
form.resetFields(['email', 'name']);
|
|
61
|
+
|
|
62
|
+
// Reset all fields
|
|
63
|
+
form.resetFields();
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Validation
|
|
67
|
+
|
|
68
|
+
### Individual Field Validation
|
|
69
|
+
|
|
70
|
+
```tsx
|
|
71
|
+
// Validate a single field
|
|
72
|
+
try {
|
|
73
|
+
await form.validateField('email');
|
|
74
|
+
console.log('Field is valid');
|
|
75
|
+
} catch (error) {
|
|
76
|
+
console.log('Validation failed:', error);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Check validation state
|
|
80
|
+
const isValid = form.isFieldValid('email');
|
|
81
|
+
const isInvalid = form.isFieldInvalid('email');
|
|
82
|
+
const errors = form.getFieldError('email');
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Form-wide Validation
|
|
86
|
+
|
|
87
|
+
```tsx
|
|
88
|
+
// Validate all fields
|
|
89
|
+
try {
|
|
90
|
+
const validData = await form.validateFields();
|
|
91
|
+
console.log('All fields valid:', validData);
|
|
92
|
+
} catch (errors) {
|
|
93
|
+
console.log('Validation errors:', errors);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Check overall form state
|
|
97
|
+
const allValid = form.isValid;
|
|
98
|
+
const hasErrors = form.isInvalid;
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Manual Error Handling
|
|
102
|
+
|
|
103
|
+
```tsx
|
|
104
|
+
// Set custom error for a field
|
|
105
|
+
form.setFieldError('email', 'This email is already taken');
|
|
106
|
+
|
|
107
|
+
// Clear validation errors
|
|
108
|
+
form.resetFieldsValidation(['email']);
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Form State
|
|
112
|
+
|
|
113
|
+
### Touch State
|
|
114
|
+
|
|
115
|
+
Track user interaction with fields:
|
|
116
|
+
|
|
117
|
+
```tsx
|
|
118
|
+
// Check if field was touched
|
|
119
|
+
const wasTouched = form.isFieldTouched('email');
|
|
120
|
+
|
|
121
|
+
// Check if any field was touched
|
|
122
|
+
const formTouched = form.isTouched;
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Dirty State
|
|
126
|
+
|
|
127
|
+
Detect changes from initial values:
|
|
128
|
+
|
|
129
|
+
```tsx
|
|
130
|
+
// Check if form has unsaved changes
|
|
131
|
+
const hasChanges = form.isDirty;
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Initial Values
|
|
135
|
+
|
|
136
|
+
Manage default form state:
|
|
137
|
+
|
|
138
|
+
```tsx
|
|
139
|
+
// Set initial values during setup
|
|
140
|
+
form.setInitialFieldsValue({
|
|
141
|
+
email: 'default@example.com',
|
|
142
|
+
name: 'Default Name'
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
// Update initial values (useful for edit forms)
|
|
146
|
+
form.updateInitialFieldsValue({
|
|
147
|
+
'profile.age': 30
|
|
148
|
+
});
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Submission
|
|
152
|
+
|
|
153
|
+
### Basic Submission
|
|
154
|
+
|
|
155
|
+
```tsx
|
|
156
|
+
// Submit the form (calls the onSubmit handler)
|
|
157
|
+
await form.submit();
|
|
158
|
+
|
|
159
|
+
// Check submission state
|
|
160
|
+
const isSubmitting = form.isSubmitting;
|
|
161
|
+
|
|
162
|
+
// Control submission state manually
|
|
163
|
+
form.setSubmitting(true);
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Submission Errors
|
|
167
|
+
|
|
168
|
+
```tsx
|
|
169
|
+
// Access submission errors
|
|
170
|
+
const submitError = form.submitError;
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Advanced Usage
|
|
174
|
+
|
|
175
|
+
### Dot Notation Support
|
|
176
|
+
|
|
177
|
+
The form instance supports dot notation for nested object structures:
|
|
178
|
+
|
|
179
|
+
```tsx
|
|
180
|
+
// Set nested value
|
|
181
|
+
form.setFieldValue('user.profile.name', 'John');
|
|
182
|
+
|
|
183
|
+
// This creates the structure:
|
|
184
|
+
// {
|
|
185
|
+
// user: {
|
|
186
|
+
// profile: {
|
|
187
|
+
// name: 'John'
|
|
188
|
+
// }
|
|
189
|
+
// }
|
|
190
|
+
// }
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Field Instance Access
|
|
194
|
+
|
|
195
|
+
Access the internal field data structure:
|
|
196
|
+
|
|
197
|
+
```tsx
|
|
198
|
+
const fieldInstance = form.getFieldInstance('email');
|
|
199
|
+
// Returns: {
|
|
200
|
+
// name: 'email',
|
|
201
|
+
// value: '...',
|
|
202
|
+
// errors: [...],
|
|
203
|
+
// touched: boolean,
|
|
204
|
+
// validating: boolean,
|
|
205
|
+
// status: 'valid' | 'invalid' | undefined
|
|
206
|
+
// }
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## Event Handlers
|
|
210
|
+
|
|
211
|
+
Form instances support event callbacks:
|
|
212
|
+
|
|
213
|
+
```tsx
|
|
214
|
+
const [form] = Form.useForm(undefined, undefined, {
|
|
215
|
+
onSubmit: async (data) => {
|
|
216
|
+
// Handle form submission
|
|
217
|
+
await apiCall(data);
|
|
218
|
+
},
|
|
219
|
+
onValuesChange: (data) => {
|
|
220
|
+
// Handle value changes
|
|
221
|
+
console.log('Form data changed:', data);
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## API Reference
|
|
227
|
+
|
|
228
|
+
### Properties
|
|
229
|
+
|
|
230
|
+
- **`isSubmitting`** `boolean` — Whether the form is currently being submitted
|
|
231
|
+
- **`submitError`** `unknown` — Error from the last submission attempt
|
|
232
|
+
- **`isTouched`** `boolean` — Whether any field has been interacted with
|
|
233
|
+
- **`isDirty`** `boolean` — Whether any field value differs from initial values
|
|
234
|
+
- **`isValid`** `boolean` — Whether all fields are validated and valid
|
|
235
|
+
- **`isInvalid`** `boolean` — Whether any field is validated and invalid
|
|
236
|
+
|
|
237
|
+
### Methods
|
|
238
|
+
|
|
239
|
+
#### Field Value Management
|
|
240
|
+
|
|
241
|
+
- **`getFieldValue`** `<Name>(name: Name) => T[Name]` — Get the value of a specific field
|
|
242
|
+
- **`setFieldValue`** `<Name>(name: Name, value: T[Name], isTouched?, skipRender?) => void` — Set the value of a specific field
|
|
243
|
+
- **`getFieldsValue`** `() => PartialString<T>` — Get all field values as a flat object
|
|
244
|
+
- **`setFieldsValue`** `(newData: PartialString<T>, touched?, skipRender?) => void` — Set multiple field values
|
|
245
|
+
- **`getFormData`** `() => T` — Get form data with dot notation converted to nested objects
|
|
246
|
+
|
|
247
|
+
#### Initial Values
|
|
248
|
+
|
|
249
|
+
- **`setInitialFieldsValue`** `(values: PartialString<T>) => void` — Set initial values for fields
|
|
250
|
+
- **`updateInitialFieldsValue`** `(values: FieldTypes) => void` — Update initial values (merge with existing)
|
|
251
|
+
- **`resetFields`** `(names?: string[], skipRender?) => void` — Reset fields to initial values
|
|
252
|
+
|
|
253
|
+
#### Validation
|
|
254
|
+
|
|
255
|
+
- **`validateField`** `<Name>(name: Name) => Promise<any>` — Validate a single field
|
|
256
|
+
- **`validateFields`** `<Names>(names?: Names) => Promise<any>` — Validate multiple or all fields
|
|
257
|
+
- **`isFieldValid`** `<Name>(name: Name) => boolean` — Check if a field is valid
|
|
258
|
+
- **`isFieldInvalid`** `<Name>(name: Name) => boolean` — Check if a field is invalid
|
|
259
|
+
- **`getFieldError`** `<Name>(name: Name) => ReactNode[]` — Get validation errors for a field
|
|
260
|
+
- **`setFieldError`** `(name: string, error: ReactNode, skipRender?) => void` — Set a custom error for a field
|
|
261
|
+
- **`resetFieldsValidation`** `(names?: string[], skipRender?) => void` — Clear validation errors
|
|
262
|
+
|
|
263
|
+
#### State Checking
|
|
264
|
+
|
|
265
|
+
- **`isFieldTouched`** `<Name>(name: Name) => boolean` — Check if a field has been interacted with
|
|
266
|
+
- **`getFieldInstance`** `<Name>(name: Name) => TFormData[Name]` — Get the internal field instance
|
|
267
|
+
|
|
268
|
+
#### Submission
|
|
269
|
+
|
|
270
|
+
- **`submit`** `() => Promise<void>` — Submit the form
|
|
271
|
+
- **`setSubmitting`** `(isSubmitting: boolean) => void` — Set the submission state
|
|
272
|
+
|
|
273
|
+
## Type Definitions
|
|
274
|
+
|
|
275
|
+
```tsx
|
|
276
|
+
type FieldTypes = {
|
|
277
|
+
[key: string]: any;
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
type CubeFormData<T extends FieldTypes> = {
|
|
281
|
+
[K in keyof T & string]?: CubeFieldData<K, T[K]>;
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
type CubeFieldData<Name extends string, Value> = {
|
|
285
|
+
readonly name: Name;
|
|
286
|
+
errors: ReactNode[];
|
|
287
|
+
value?: Value;
|
|
288
|
+
touched?: boolean;
|
|
289
|
+
rules?: any[];
|
|
290
|
+
validating?: boolean;
|
|
291
|
+
validationId?: number;
|
|
292
|
+
status?: 'valid' | 'invalid';
|
|
293
|
+
};
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
## Best Practices
|
|
297
|
+
|
|
298
|
+
1. **Always use the `useForm` hook** in React components rather than creating instances manually
|
|
299
|
+
2. **Handle async validation errors** appropriately using try-catch blocks
|
|
300
|
+
3. **Set initial values early** in the component lifecycle to avoid field state inconsistencies
|
|
301
|
+
4. **Use dot notation** for nested object structures instead of managing complex object hierarchies manually
|
|
302
|
+
5. **Check validation state** before allowing form submission in complex workflows
|
|
303
|
+
6. **Reset fields appropriately** when switching between different data sets (e.g., edit vs. create modes)
|
|
304
|
+
|
|
305
|
+
## Integration with Forms
|
|
306
|
+
|
|
307
|
+
Form instances are designed to work seamlessly with the `Form` component and field components. The instance automatically manages field registration, validation triggers, and re-rendering optimization.
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
# DisplayTransition
|
|
2
|
+
|
|
3
|
+
A headless helper component that manages enter and exit animation states for showing and hiding content. It provides phase information through a render prop, allowing you to apply appropriate CSS transitions or animations based on the current transition state.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- When you need to animate content appearing and disappearing with full control over timing
|
|
8
|
+
- When you want to coordinate CSS transitions with component mount/unmount
|
|
9
|
+
- When you need to delay unmounting until exit animations complete
|
|
10
|
+
- When building custom animated overlays, modals, or dropdowns
|
|
11
|
+
|
|
12
|
+
## Component
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
### Properties
|
|
17
|
+
|
|
18
|
+
- **`isShown`** `boolean` — Desired visibility state (driver for the transition)
|
|
19
|
+
- **`duration`** `number` — Transition duration in milliseconds. If `0`, transitions are instant. If `undefined`, uses native CSS transition events for timing.
|
|
20
|
+
- **`animateOnMount`** `boolean` (default: `true`) — Whether to animate on first mount. Set to `false` to skip the initial enter animation
|
|
21
|
+
- **`respectReducedMotion`** `boolean` (default: `true`) — Respect the user's `prefers-reduced-motion` setting by collapsing duration to 0
|
|
22
|
+
- **`preserveContent`** `boolean` (default: `true`) — Preserve children content during exit transition. When true, uses stored children from when content was visible
|
|
23
|
+
- **`exposeUnmounted`** `boolean` (default: `false`) — Keep calling children during the `unmounted` phase instead of returning `null`
|
|
24
|
+
- **`onRest`** `(transition: 'enter' | 'exit') => void` — Fires after enter settles or after exit completes (unmount)
|
|
25
|
+
- **`onPhaseChange`** `(phase: ReportedPhase) => void` — Fires when the transition phase changes
|
|
26
|
+
- **`onToggle`** `(isShown: boolean) => void` — Fires when the derived `isShown` value changes
|
|
27
|
+
- **`children`** `(props: { phase, isShown, ref }) => ReactNode` — Render prop receiving the current phase, visibility state, and a ref callback to bind to the transitioned element
|
|
28
|
+
|
|
29
|
+
### Base Properties
|
|
30
|
+
|
|
31
|
+
This is a headless component and does not support base properties.
|
|
32
|
+
|
|
33
|
+
## Transition Phases
|
|
34
|
+
|
|
35
|
+
The component manages four distinct phases:
|
|
36
|
+
|
|
37
|
+
- **`unmounted`** — Content is not mounted (isShown: `false`)
|
|
38
|
+
- **`enter`** — Content is mounting, enter animation should start (isShown: `false`)
|
|
39
|
+
- **`entered`** — Enter animation complete, content is visible (isShown: `true`)
|
|
40
|
+
- **`exit`** — Content is exiting, exit animation should start (isShown: `false`)
|
|
41
|
+
|
|
42
|
+
The render prop receives an object `{ phase, isShown }` where `isShown` is only `true` during the `entered` phase.
|
|
43
|
+
|
|
44
|
+
## Examples
|
|
45
|
+
|
|
46
|
+
### Basic Usage
|
|
47
|
+
|
|
48
|
+
```jsx
|
|
49
|
+
import { Block } from '@cube-dev/ui-kit';
|
|
50
|
+
|
|
51
|
+
<DisplayTransition isShown={isVisible} duration={150}>
|
|
52
|
+
{({ phase, isShown }) => (
|
|
53
|
+
<Block
|
|
54
|
+
data-phase={phase}
|
|
55
|
+
mods={{ entered: phase === 'entered' }}
|
|
56
|
+
styles={{
|
|
57
|
+
transition: 'fade',
|
|
58
|
+
opacity: {
|
|
59
|
+
'': '0',
|
|
60
|
+
'entered': '1',
|
|
61
|
+
},
|
|
62
|
+
'$transition': '150ms'
|
|
63
|
+
}}
|
|
64
|
+
>
|
|
65
|
+
Content
|
|
66
|
+
</Block>
|
|
67
|
+
)}
|
|
68
|
+
</DisplayTransition>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### With Tasty Styles
|
|
72
|
+
|
|
73
|
+
```jsx
|
|
74
|
+
const AnimatedCard = tasty(Card, {
|
|
75
|
+
styles: {
|
|
76
|
+
'$transition': '150ms',
|
|
77
|
+
transition: 'fade, translate',
|
|
78
|
+
opacity: {
|
|
79
|
+
'': '0',
|
|
80
|
+
'entered': '1',
|
|
81
|
+
},
|
|
82
|
+
transform: {
|
|
83
|
+
'': 'translateY(-8px)',
|
|
84
|
+
'entered': 'translateY(0)',
|
|
85
|
+
'exit': 'translateY(8px)',
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
<DisplayTransition isShown={isVisible}>
|
|
91
|
+
{({ phase }) => (
|
|
92
|
+
<AnimatedCard mods={{ entered: phase === 'entered', exit: phase === 'exit' }}>
|
|
93
|
+
Content
|
|
94
|
+
</AnimatedCard>
|
|
95
|
+
)}
|
|
96
|
+
</DisplayTransition>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Instant Transitions
|
|
100
|
+
|
|
101
|
+
Set `duration={0}` for instant show/hide without animation.
|
|
102
|
+
|
|
103
|
+
### Skip Mount Animation
|
|
104
|
+
|
|
105
|
+
Set `animateOnMount={false}` to skip the initial enter animation when the component mounts with `isShown={true}`. Useful for server-side rendering or preventing layout shift.
|
|
106
|
+
|
|
107
|
+
### Slow Transition
|
|
108
|
+
|
|
109
|
+
Longer durations can be used for more dramatic entrance and exit effects.
|
|
110
|
+
|
|
111
|
+
### With Callbacks
|
|
112
|
+
|
|
113
|
+
```jsx
|
|
114
|
+
<DisplayTransition
|
|
115
|
+
isShown={isVisible}
|
|
116
|
+
onRest={(transition) => {
|
|
117
|
+
console.log(`${transition} transition completed`);
|
|
118
|
+
}}
|
|
119
|
+
>
|
|
120
|
+
{({ phase, isShown }) => (
|
|
121
|
+
<Block
|
|
122
|
+
data-phase={phase}
|
|
123
|
+
mods={{ entered: phase === 'entered' }}
|
|
124
|
+
>
|
|
125
|
+
Content
|
|
126
|
+
</Block>
|
|
127
|
+
)}
|
|
128
|
+
</DisplayTransition>
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
The `onRest` callback fires after the enter animation settles (when reaching `entered` phase) or after the exit animation completes (when reaching `unmounted` phase).
|
|
132
|
+
|
|
133
|
+
## Advanced Features
|
|
134
|
+
|
|
135
|
+
### Exposing Unmounted Phase
|
|
136
|
+
|
|
137
|
+
By default, the component returns `null` when in the `unmounted` phase. Set `exposeUnmounted={true}` to continue calling the render prop even when unmounted:
|
|
138
|
+
|
|
139
|
+
```jsx
|
|
140
|
+
<DisplayTransition isShown={isVisible} exposeUnmounted>
|
|
141
|
+
{({ phase, isShown }) => {
|
|
142
|
+
if (phase === 'unmounted') {
|
|
143
|
+
return <Block>Custom unmounted state</Block>;
|
|
144
|
+
}
|
|
145
|
+
return <Block data-phase={phase}>Content</Block>;
|
|
146
|
+
}}
|
|
147
|
+
</DisplayTransition>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### Reduced Motion Support
|
|
151
|
+
|
|
152
|
+
The component automatically respects the `prefers-reduced-motion` media query when `respectReducedMotion={true}` (default). When the user has requested reduced motion, the internal duration is collapsed to 0, resulting in instant transitions.
|
|
153
|
+
|
|
154
|
+
### Preserve Content During Exit
|
|
155
|
+
|
|
156
|
+
By default (`preserveContent={true}`), the component stores the children render function when content is visible and uses the stored version during exit transitions. This ensures the exiting content remains consistent even if the parent stops providing content immediately after hiding.
|
|
157
|
+
|
|
158
|
+
```jsx
|
|
159
|
+
<DisplayTransition isShown={isVisible} preserveContent>
|
|
160
|
+
{({ phase }) => (
|
|
161
|
+
<Block mods={{ entered: phase === 'entered' }}>
|
|
162
|
+
{/* This content will be preserved during exit animation */}
|
|
163
|
+
{isVisible ? dynamicContent : null}
|
|
164
|
+
</Block>
|
|
165
|
+
)}
|
|
166
|
+
</DisplayTransition>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Set `preserveContent={false}` if you need the exit animation to reflect real-time children changes:
|
|
170
|
+
|
|
171
|
+
```jsx
|
|
172
|
+
<DisplayTransition isShown={isVisible} preserveContent={false}>
|
|
173
|
+
{({ phase }) => (
|
|
174
|
+
<Block mods={{ entered: phase === 'entered' }}>
|
|
175
|
+
{/* Content updates during exit will be reflected */}
|
|
176
|
+
{currentContent}
|
|
177
|
+
</Block>
|
|
178
|
+
)}
|
|
179
|
+
</DisplayTransition>
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Animation Flow
|
|
183
|
+
|
|
184
|
+
### Enter Flow
|
|
185
|
+
1. `isShown` changes from `false` to `true`
|
|
186
|
+
2. Phase changes to `enter` (isShown = false)
|
|
187
|
+
3. After next paint, phase changes to `entered` (isShown = true)
|
|
188
|
+
4. After `duration` milliseconds, `onRest('enter')` fires
|
|
189
|
+
|
|
190
|
+
### Exit Flow
|
|
191
|
+
1. `isShown` changes from `true` to `false`
|
|
192
|
+
2. Phase changes to `exit` (isShown = false)
|
|
193
|
+
3. After `duration` milliseconds, phase changes to `unmounted` and `onRest('exit')` fires
|
|
194
|
+
4. Component returns `null` (unless `exposeUnmounted={true}`)
|
|
195
|
+
|
|
196
|
+
## Best Practices
|
|
197
|
+
|
|
198
|
+
1. **Match CSS duration with duration prop**: Ensure your CSS transition/animation duration matches the `duration` prop for proper timing
|
|
199
|
+
```jsx
|
|
200
|
+
<DisplayTransition duration={300}>
|
|
201
|
+
{({ phase }) => (
|
|
202
|
+
<Block
|
|
203
|
+
data-phase={phase}
|
|
204
|
+
mods={{ entered: phase === 'entered' }}
|
|
205
|
+
styles={{
|
|
206
|
+
transition: 'fade',
|
|
207
|
+
opacity: { '': '0', 'entered': '1' },
|
|
208
|
+
'$transition': '300ms',
|
|
209
|
+
}}
|
|
210
|
+
>
|
|
211
|
+
...
|
|
212
|
+
</Block>
|
|
213
|
+
)}
|
|
214
|
+
</DisplayTransition>
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
2. **Use stable callbacks**: The component uses `useEvent` internally, but you should still avoid recreating callbacks on every render when possible
|
|
218
|
+
|
|
219
|
+
3. **Animate on mount thoughtfully**: Set `animateOnMount={false}` for content that should appear immediately on SSR or first paint
|
|
220
|
+
```jsx
|
|
221
|
+
<DisplayTransition isShown={true} animateOnMount={false}>
|
|
222
|
+
{({ phase }) => (
|
|
223
|
+
<Block
|
|
224
|
+
data-phase={phase}
|
|
225
|
+
mods={{ entered: phase === 'entered' }}
|
|
226
|
+
>
|
|
227
|
+
Initially visible content
|
|
228
|
+
</Block>
|
|
229
|
+
)}
|
|
230
|
+
</DisplayTransition>
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
4. **Respect reduced motion**: Keep the default `respectReducedMotion={true}` to provide a better experience for users with motion sensitivity
|
|
234
|
+
|
|
235
|
+
5. **Don't use for list items**: This component is designed for single element show/hide. For animating lists, consider using React Aria's built-in list animation features or a dedicated list animation library
|
|
236
|
+
|
|
237
|
+
## Performance Considerations
|
|
238
|
+
|
|
239
|
+
- The component uses `requestAnimationFrame` and `setTimeout` for efficient animation scheduling
|
|
240
|
+
- Rapid toggles are handled gracefully with automatic cancellation of pending timers
|
|
241
|
+
- React Strict Mode compatible with versioned flow control
|
|
242
|
+
- Zero additional DOM nodes (headless component)
|
|
243
|
+
|
|
244
|
+
## Accessibility
|
|
245
|
+
|
|
246
|
+
### Reduced Motion
|
|
247
|
+
|
|
248
|
+
The component automatically respects the user's motion preferences when `respectReducedMotion={true}`. Users who have enabled "Reduce motion" in their OS settings will see instant transitions instead of animations.
|
|
249
|
+
|
|
250
|
+
### Screen Reader Considerations
|
|
251
|
+
|
|
252
|
+
Since this is a purely visual transition component, ensure that:
|
|
253
|
+
- Content changes are announced appropriately (use `aria-live` if needed)
|
|
254
|
+
- Focus management is handled by parent components
|
|
255
|
+
- Critical state changes aren't communicated only through animations
|
|
256
|
+
|
|
257
|
+
## Suggested Improvements
|
|
258
|
+
|
|
259
|
+
- `onPhaseChange` - Callback that fires on every phase change with (newPhase, oldPhase)
|
|
260
|
+
- `onEnter` / `onExit` - Separate callbacks instead of combined `onRest`
|
|
261
|
+
- `skipAnimation` - Runtime prop to skip animations without changing duration
|
|
262
|
+
|
|
263
|
+
## Related Components
|
|
264
|
+
|
|
265
|
+
- [Modal](/components/Modal) - Uses DisplayTransition internally for overlay animations
|
|
266
|
+
- [Popover](/components/Popover) - Can use DisplayTransition for custom entrance animations
|
|
267
|
+
- [OverlayWrapper](/components/OverlayWrapper) - Another component that may benefit from transition management
|
|
268
|
+
|