@cube-dev/ui-kit 0.121.0 → 0.121.2
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 +12 -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 +695 -0
- package/package.json +4 -8
|
@@ -0,0 +1,644 @@
|
|
|
1
|
+
# Form
|
|
2
|
+
|
|
3
|
+
Forms allow users to enter data that can be submitted while providing alignment and styling for form fields. The Form component provides structure, validation, and state management for user input through a collection of input components with built-in field support.
|
|
4
|
+
|
|
5
|
+
The form system is inspired by AntD Forms and [rc-field-form](https://field-form-react-component.vercel.app/) with a similar API.
|
|
6
|
+
|
|
7
|
+
## When to Use
|
|
8
|
+
|
|
9
|
+
- When collecting user information or input data
|
|
10
|
+
- When you need structured validation and error handling
|
|
11
|
+
- When building login forms, registration forms, or data entry interfaces
|
|
12
|
+
- When you need programmatic control over form state and submission
|
|
13
|
+
|
|
14
|
+
## Component
|
|
15
|
+
|
|
16
|
+
## Properties
|
|
17
|
+
|
|
18
|
+
### Form-specific Properties
|
|
19
|
+
|
|
20
|
+
- **`name`** `string` — Form name attribute
|
|
21
|
+
- **`defaultValues`** `Partial<T>` — Default field values
|
|
22
|
+
- **`onValuesChange`** `(data: T) => void` — Triggered when any field value changes
|
|
23
|
+
- **`onSubmit`** `(data: T) => void | Promise<void>` — Triggered on successful form submission. When returning a promise, the form and submit button show loading state until resolved
|
|
24
|
+
- **`onSubmitFailed`** `(error: any) => void` — Triggered when form submission fails
|
|
25
|
+
- **`form`** `CubeFormInstance<T>` — Form instance created by `Form.useForm()`
|
|
26
|
+
- **`labelWidth`** `Styles['width']` — Width of label area for side-positioned labels
|
|
27
|
+
- **`orientation`** `'vertical' | 'horizontal'` (default: `vertical`) — Form layout orientation
|
|
28
|
+
|
|
29
|
+
### Inherited Form Properties
|
|
30
|
+
|
|
31
|
+
These properties are inherited by all input components within the form:
|
|
32
|
+
|
|
33
|
+
- **`labelPosition`** `'top' | 'side' | 'split'` (default: `top`) — Where to place labels relative to inputs. `'top'` places labels above inputs, `'side'` places labels beside inputs with fixed width, `'split'` places labels and inputs on opposite sides without fixed label width
|
|
34
|
+
- **`labelStyles`** `Styles` — Styles applied to field labels
|
|
35
|
+
- **`requiredMark`** `boolean` (default: `true`) — Whether to show required field indicators
|
|
36
|
+
- **`necessityIndicator`** `'icon' | 'label'` (default: `icon`) — Type of necessity indicator
|
|
37
|
+
- **`isReadOnly`** `boolean` (default: `false`) — Whether fields are read-only by default
|
|
38
|
+
- **`validationState`** `'valid' | 'invalid'` — Validation state for all fields
|
|
39
|
+
- **`validateTrigger`** `'onBlur' | 'onChange' | 'onSubmit'` (default: `onBlur`) — When to trigger validation
|
|
40
|
+
- **`showValid`** `boolean` (default: `false`) — Whether to show valid state indicators
|
|
41
|
+
|
|
42
|
+
### HTML Form Properties
|
|
43
|
+
|
|
44
|
+
- **`action`** `string` — Form action URL (for server submission)
|
|
45
|
+
- **`autoComplete`** `string` — Browser autocomplete behavior
|
|
46
|
+
- **`encType`** `string` — Form encoding type
|
|
47
|
+
- **`method`** `'get' | 'post'` — HTTP method for form submission
|
|
48
|
+
- **`target`** `string` — Target for form submission
|
|
49
|
+
|
|
50
|
+
### Base Properties
|
|
51
|
+
|
|
52
|
+
Supports [Base properties](../../BaseProperties.md)
|
|
53
|
+
|
|
54
|
+
### Styling Properties
|
|
55
|
+
|
|
56
|
+
#### styles
|
|
57
|
+
|
|
58
|
+
Customizes the root form element.
|
|
59
|
+
|
|
60
|
+
The Form component does not expose styled sub-elements via the `styles` prop. It uses a simple container layout that can be customized through the main styles property.
|
|
61
|
+
|
|
62
|
+
### Style Properties
|
|
63
|
+
|
|
64
|
+
These properties allow direct style application without using the `styles` prop: `display`, `flow`, `gap`, `placeItems`, `width`, `height`, `padding`, `margin`.
|
|
65
|
+
|
|
66
|
+
### Modifiers
|
|
67
|
+
|
|
68
|
+
The `mods` property accepts the following modifiers:
|
|
69
|
+
|
|
70
|
+
- **`has-sider`** `boolean` — Applied when `labelPosition="side"`
|
|
71
|
+
- **`has-split`** `boolean` — Applied when `labelPosition="split"`
|
|
72
|
+
- **`horizontal`** `boolean` — Applied when `orientation="horizontal"`
|
|
73
|
+
|
|
74
|
+
## Static Methods
|
|
75
|
+
|
|
76
|
+
### Form.useForm
|
|
77
|
+
|
|
78
|
+
```jsx
|
|
79
|
+
const [form] = Form.useForm();
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Creates a form instance for programmatic control. See [FormInstance documentation](./FormInstance.md) for detailed API.
|
|
83
|
+
|
|
84
|
+
You can also pass options:
|
|
85
|
+
|
|
86
|
+
```jsx
|
|
87
|
+
const [form] = Form.useForm(undefined, undefined, {
|
|
88
|
+
onSubmit: async (data) => {
|
|
89
|
+
await apiCall(data);
|
|
90
|
+
},
|
|
91
|
+
onValuesChange: (data) => {
|
|
92
|
+
console.log('Changed:', data);
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Form.Submit (SubmitButton)
|
|
98
|
+
|
|
99
|
+
```jsx
|
|
100
|
+
<Form.Submit>Submit</Form.Submit>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Specialized button that automatically handles form submission and loading states. When `onSubmit` returns a promise, the button shows a loading spinner until the promise resolves.
|
|
104
|
+
|
|
105
|
+
### Form.Reset (ResetButton)
|
|
106
|
+
|
|
107
|
+
```jsx
|
|
108
|
+
<Form.Reset>Reset</Form.Reset>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Button that resets all form fields to their initial values.
|
|
112
|
+
|
|
113
|
+
### Form.SubmitError
|
|
114
|
+
|
|
115
|
+
```jsx
|
|
116
|
+
<Form.SubmitError />
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Component that displays submission errors returned from the `onSubmit` handler.
|
|
120
|
+
|
|
121
|
+
### Form.Item (Field) - Deprecated
|
|
122
|
+
|
|
123
|
+
```jsx
|
|
124
|
+
<Form.Item name="email" label="Email">
|
|
125
|
+
<Input.Text />
|
|
126
|
+
</Form.Item>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Deprecated**: The Field wrapper is not recommended for regular use. Input components now have built-in field support, so you can pass field properties directly to them.
|
|
130
|
+
|
|
131
|
+
The Field component should only be used when wrapping read-only content or custom components without built-in field support.
|
|
132
|
+
|
|
133
|
+
## Built-in Field Support
|
|
134
|
+
|
|
135
|
+
**All input components have built-in field support**, meaning you can pass field properties directly to them without needing a wrapper:
|
|
136
|
+
|
|
137
|
+
```jsx
|
|
138
|
+
// Recommended — direct field properties
|
|
139
|
+
<Input.Text
|
|
140
|
+
name="email"
|
|
141
|
+
label="Email"
|
|
142
|
+
rules={[{ required: true, type: 'email' }]}
|
|
143
|
+
placeholder="Enter your email"
|
|
144
|
+
/>
|
|
145
|
+
|
|
146
|
+
// Deprecated — Field wrapper (still works but not recommended)
|
|
147
|
+
<Field name="email" label="Email" rules={[{ required: true, type: 'email' }]}>
|
|
148
|
+
<Input.Text placeholder="Enter your email" />
|
|
149
|
+
</Field>
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Field Properties for Input Components
|
|
153
|
+
|
|
154
|
+
All input components within a Form accept these field-related properties:
|
|
155
|
+
|
|
156
|
+
- **`name`** `string` — Field name for form data. Supports dot notation for nested objects (e.g. `"user.email"`)
|
|
157
|
+
- **`label`** `ReactNode` — Field label text
|
|
158
|
+
- **`description`** `ReactNode` — Help text displayed below the field
|
|
159
|
+
- **`errorMessage`** `ReactNode` — Error message displayed when validation fails
|
|
160
|
+
- **`rules`** `ValidationRule[]` — Validation rules array (see [Validation Rules](#validation-rules))
|
|
161
|
+
- **`isRequired`** `boolean` — Whether the field is required
|
|
162
|
+
- **`extra`** `ReactNode` — Additional content displayed next to the label
|
|
163
|
+
- **`tooltip`** `ReactNode` — Tooltip content for the field label
|
|
164
|
+
- **`labelSuffix`** `ReactNode` — Content appended after the label
|
|
165
|
+
- **`isHidden`** `boolean` — Hides the field
|
|
166
|
+
- **`validateTrigger`** `'onBlur' | 'onChange' | 'onSubmit'` — When to validate (overrides form-level setting)
|
|
167
|
+
|
|
168
|
+
## Validation Rules
|
|
169
|
+
|
|
170
|
+
The form uses an async rule-based validation system. Each rule is an object with one or more validators:
|
|
171
|
+
|
|
172
|
+
### Built-in Validators
|
|
173
|
+
|
|
174
|
+
- **`required`** `boolean` — Field must have a non-empty value
|
|
175
|
+
- **`type`** `string` — Validates data type: `'string'`, `'number'`, `'boolean'`, `'email'`, `'url'`, `'integer'`, `'array'`, `'object'`, `'date'`, `'hex'`, `'regexp'`
|
|
176
|
+
- **`pattern`** `RegExp` — Value must match the regex pattern
|
|
177
|
+
- **`min`** `number` — Minimum length (for strings/arrays) or minimum value (for numbers)
|
|
178
|
+
- **`max`** `number` — Maximum length (for strings/arrays) or maximum value (for numbers)
|
|
179
|
+
- **`len`** `number` — Exact length (for strings/arrays) or exact value (for numbers)
|
|
180
|
+
- **`enum`** `any[]` — Value must be one of the allowed values
|
|
181
|
+
- **`whitespace`** `boolean` — String must not be only whitespace
|
|
182
|
+
- **`validator`** `(rule, value) => Promise<void>` — Custom async validation function. Throw an `Error` to fail validation
|
|
183
|
+
- **`transform`** `(value) => value` — Transform the value before validation
|
|
184
|
+
- **`message`** `string` — Error message displayed when the rule fails
|
|
185
|
+
|
|
186
|
+
### Rules Example
|
|
187
|
+
|
|
188
|
+
```jsx
|
|
189
|
+
<Input.Text
|
|
190
|
+
name="email"
|
|
191
|
+
label="Email"
|
|
192
|
+
rules={[
|
|
193
|
+
{ required: true, message: 'Email is required' },
|
|
194
|
+
{ type: 'email', message: 'Please enter a valid email' },
|
|
195
|
+
]}
|
|
196
|
+
/>
|
|
197
|
+
|
|
198
|
+
<Input.Text
|
|
199
|
+
name="username"
|
|
200
|
+
label="Username"
|
|
201
|
+
rules={[
|
|
202
|
+
{ required: true, message: 'Username is required' },
|
|
203
|
+
{ min: 3, message: 'Must be at least 3 characters' },
|
|
204
|
+
{ max: 20, message: 'Must be at most 20 characters' },
|
|
205
|
+
{ pattern: /^[a-zA-Z0-9_]+$/, message: 'Only letters, numbers, and underscores' },
|
|
206
|
+
]}
|
|
207
|
+
/>
|
|
208
|
+
|
|
209
|
+
<Input.Text
|
|
210
|
+
name="invite"
|
|
211
|
+
label="Invite Code"
|
|
212
|
+
rules={[
|
|
213
|
+
{
|
|
214
|
+
async validator(rule, value) {
|
|
215
|
+
const isValid = await checkInviteCode(value);
|
|
216
|
+
if (!isValid) {
|
|
217
|
+
throw new Error('Invalid invite code');
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
},
|
|
221
|
+
]}
|
|
222
|
+
/>
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Rules can also be functions that receive the form instance, useful for cross-field validation:
|
|
226
|
+
|
|
227
|
+
```jsx
|
|
228
|
+
<Input.Password
|
|
229
|
+
name="confirmPassword"
|
|
230
|
+
label="Confirm Password"
|
|
231
|
+
rules={[
|
|
232
|
+
(form) => ({
|
|
233
|
+
async validator(rule, value) {
|
|
234
|
+
if (value !== form.getFieldValue('password')) {
|
|
235
|
+
throw new Error('Passwords do not match');
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
}),
|
|
239
|
+
]}
|
|
240
|
+
/>
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## Examples
|
|
244
|
+
|
|
245
|
+
### Basic Form
|
|
246
|
+
|
|
247
|
+
```jsx
|
|
248
|
+
import { Form, Input, SubmitButton } from '@cube-dev/ui-kit';
|
|
249
|
+
|
|
250
|
+
function BasicForm() {
|
|
251
|
+
function handleSubmit(data) {
|
|
252
|
+
console.log('Submitted:', data);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return (
|
|
256
|
+
<Form onSubmit={handleSubmit}>
|
|
257
|
+
<Input.Text
|
|
258
|
+
name="email"
|
|
259
|
+
label="Email"
|
|
260
|
+
type="email"
|
|
261
|
+
rules={[
|
|
262
|
+
{ required: true, message: 'Email is required' },
|
|
263
|
+
{ type: 'email', message: 'Please enter a valid email' },
|
|
264
|
+
]}
|
|
265
|
+
placeholder="Enter your email"
|
|
266
|
+
/>
|
|
267
|
+
|
|
268
|
+
<Input.Password
|
|
269
|
+
name="password"
|
|
270
|
+
label="Password"
|
|
271
|
+
rules={[
|
|
272
|
+
{ required: true, message: 'Password is required' },
|
|
273
|
+
{ min: 6, message: 'Password must be at least 6 characters' },
|
|
274
|
+
]}
|
|
275
|
+
placeholder="Enter your password"
|
|
276
|
+
/>
|
|
277
|
+
|
|
278
|
+
<Form.SubmitError />
|
|
279
|
+
<SubmitButton>Submit</SubmitButton>
|
|
280
|
+
</Form>
|
|
281
|
+
);
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
### Login Form
|
|
286
|
+
|
|
287
|
+
An example with async submission that shows loading state:
|
|
288
|
+
|
|
289
|
+
```jsx
|
|
290
|
+
import { Form, Field, SubmitButton, Input, SubmitError } from '@cube-dev/ui-kit';
|
|
291
|
+
|
|
292
|
+
export function LoginForm() {
|
|
293
|
+
async function onSubmit(data) {
|
|
294
|
+
await Auth.login(data); // { email, password }
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return (
|
|
298
|
+
<Form onSubmit={onSubmit} requiredMark={false}>
|
|
299
|
+
<Input.Text
|
|
300
|
+
name="email"
|
|
301
|
+
label="Email"
|
|
302
|
+
description="Your email"
|
|
303
|
+
type="email"
|
|
304
|
+
autoFocus
|
|
305
|
+
rules={[
|
|
306
|
+
{ required: true, message: 'E-mail required' },
|
|
307
|
+
{ type: 'email', message: 'Please enter a valid e-mail' },
|
|
308
|
+
]}
|
|
309
|
+
/>
|
|
310
|
+
|
|
311
|
+
<Input.Password
|
|
312
|
+
name="password"
|
|
313
|
+
label="Password"
|
|
314
|
+
rules={[{ required: true, message: 'Password required' }]}
|
|
315
|
+
/>
|
|
316
|
+
|
|
317
|
+
<Form.SubmitError />
|
|
318
|
+
<SubmitButton>Submit</SubmitButton>
|
|
319
|
+
</Form>
|
|
320
|
+
);
|
|
321
|
+
}
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
### Horizontal Layout
|
|
325
|
+
|
|
326
|
+
```jsx
|
|
327
|
+
<Form orientation="horizontal" labelPosition="side">
|
|
328
|
+
<Input.Text
|
|
329
|
+
name="email"
|
|
330
|
+
label="Email"
|
|
331
|
+
type="email"
|
|
332
|
+
size="small"
|
|
333
|
+
rules={[{ required: true, type: 'email' }]}
|
|
334
|
+
placeholder="Enter your email"
|
|
335
|
+
/>
|
|
336
|
+
<Input.Password
|
|
337
|
+
name="password"
|
|
338
|
+
label="Password"
|
|
339
|
+
size="small"
|
|
340
|
+
rules={[{ required: true }]}
|
|
341
|
+
placeholder="Enter your password"
|
|
342
|
+
/>
|
|
343
|
+
<SubmitButton size="small">Submit</SubmitButton>
|
|
344
|
+
</Form>
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### With Default Values
|
|
348
|
+
|
|
349
|
+
```jsx
|
|
350
|
+
<Form
|
|
351
|
+
defaultValues={{
|
|
352
|
+
email: 'user@example.com',
|
|
353
|
+
name: 'John Doe',
|
|
354
|
+
}}
|
|
355
|
+
onSubmit={handleSubmit}
|
|
356
|
+
>
|
|
357
|
+
<Input.Text name="email" label="Email" type="email" />
|
|
358
|
+
<Input.Text name="name" label="Name" />
|
|
359
|
+
<SubmitButton>Submit</SubmitButton>
|
|
360
|
+
</Form>
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
### Form with Validation
|
|
364
|
+
|
|
365
|
+
### Complex Form with Different Input Types
|
|
366
|
+
|
|
367
|
+
```jsx
|
|
368
|
+
<Form onSubmit={handleSubmit}>
|
|
369
|
+
<Input.Text
|
|
370
|
+
name="username"
|
|
371
|
+
label="Username"
|
|
372
|
+
rules={[{ required: true, min: 3 }]}
|
|
373
|
+
placeholder="Enter username"
|
|
374
|
+
/>
|
|
375
|
+
|
|
376
|
+
<Input.Password
|
|
377
|
+
name="password"
|
|
378
|
+
label="Password"
|
|
379
|
+
rules={[{ required: true, min: 8 }]}
|
|
380
|
+
/>
|
|
381
|
+
|
|
382
|
+
<Select
|
|
383
|
+
name="country"
|
|
384
|
+
label="Country"
|
|
385
|
+
rules={[{ required: true }]}
|
|
386
|
+
options={[
|
|
387
|
+
{ value: 'us', label: 'United States' },
|
|
388
|
+
{ value: 'uk', label: 'United Kingdom' },
|
|
389
|
+
{ value: 'ca', label: 'Canada' },
|
|
390
|
+
]}
|
|
391
|
+
/>
|
|
392
|
+
|
|
393
|
+
<Checkbox
|
|
394
|
+
name="agree"
|
|
395
|
+
label="I agree to the terms and conditions"
|
|
396
|
+
rules={[{ required: true, message: 'You must agree to continue' }]}
|
|
397
|
+
/>
|
|
398
|
+
|
|
399
|
+
<SubmitButton>Register</SubmitButton>
|
|
400
|
+
</Form>
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### Nested Field Names
|
|
404
|
+
|
|
405
|
+
Use dot notation in field names to create nested data structures:
|
|
406
|
+
|
|
407
|
+
```jsx
|
|
408
|
+
<Form onSubmit={(data) => console.log(data)}>
|
|
409
|
+
<Input.Text name="user.firstName" label="First Name" />
|
|
410
|
+
<Input.Text name="user.lastName" label="Last Name" />
|
|
411
|
+
<Input.Text name="user.address.city" label="City" />
|
|
412
|
+
|
|
413
|
+
{/* Submits: { user: { firstName: '...', lastName: '...', address: { city: '...' } } } */}
|
|
414
|
+
<SubmitButton>Submit</SubmitButton>
|
|
415
|
+
</Form>
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
### Programmatic Form Control
|
|
419
|
+
|
|
420
|
+
```jsx
|
|
421
|
+
function ControlledForm() {
|
|
422
|
+
const [form] = Form.useForm();
|
|
423
|
+
|
|
424
|
+
const handleReset = () => {
|
|
425
|
+
form.resetFields();
|
|
426
|
+
};
|
|
427
|
+
|
|
428
|
+
const handleFillDemo = () => {
|
|
429
|
+
form.setFieldsValue({
|
|
430
|
+
email: 'demo@example.com',
|
|
431
|
+
name: 'Demo User',
|
|
432
|
+
});
|
|
433
|
+
};
|
|
434
|
+
|
|
435
|
+
return (
|
|
436
|
+
<Form form={form} onSubmit={handleSubmit}>
|
|
437
|
+
<Input.Text name="email" label="Email" type="email" />
|
|
438
|
+
<Input.Text name="name" label="Name" />
|
|
439
|
+
|
|
440
|
+
<Space>
|
|
441
|
+
<SubmitButton>Submit</SubmitButton>
|
|
442
|
+
<Button onPress={handleReset}>Reset</Button>
|
|
443
|
+
<Button onPress={handleFillDemo}>Fill Demo Data</Button>
|
|
444
|
+
</Space>
|
|
445
|
+
</Form>
|
|
446
|
+
);
|
|
447
|
+
}
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
### When to Use Field Component
|
|
451
|
+
|
|
452
|
+
The Field component should **only** be used when wrapping read-only content or custom components that don't have built-in field support:
|
|
453
|
+
|
|
454
|
+
```jsx
|
|
455
|
+
<Form onSubmit={handleSubmit}>
|
|
456
|
+
{/* Regular inputs — use built-in field support */}
|
|
457
|
+
<Input.Text name="name" label="Name" rules={[{ required: true }]} />
|
|
458
|
+
|
|
459
|
+
{/* Read-only content — use Field wrapper */}
|
|
460
|
+
<Field name="readonly" label="Read-only Information">
|
|
461
|
+
<div>This is some read-only content that should look like a field</div>
|
|
462
|
+
</Field>
|
|
463
|
+
|
|
464
|
+
{/* Custom component without field support — use Field wrapper */}
|
|
465
|
+
<Field name="custom" label="Custom Component" rules={[{ required: true }]}>
|
|
466
|
+
<CustomComponent />
|
|
467
|
+
</Field>
|
|
468
|
+
</Form>
|
|
469
|
+
```
|
|
470
|
+
|
|
471
|
+
### Dialog Form
|
|
472
|
+
|
|
473
|
+
It's possible to create forms inside dialogs. The `DialogForm` contains all props of `Form` and `Dialog` components. When `onSubmit` returns a promise, the dialog stays open with a loading state until the promise resolves.
|
|
474
|
+
|
|
475
|
+
```jsx
|
|
476
|
+
import {
|
|
477
|
+
DialogForm,
|
|
478
|
+
Field,
|
|
479
|
+
Paragraph,
|
|
480
|
+
Input,
|
|
481
|
+
Text,
|
|
482
|
+
} from '@cube-dev/ui-kit';
|
|
483
|
+
|
|
484
|
+
export function ConfirmDeletionDialogForm({ name, onSubmit, onDismiss }) {
|
|
485
|
+
return (
|
|
486
|
+
<DialogForm
|
|
487
|
+
title="Delete Deployment"
|
|
488
|
+
onSubmit={onSubmit}
|
|
489
|
+
onDismiss={onDismiss}
|
|
490
|
+
submitProps={{
|
|
491
|
+
label: 'Delete',
|
|
492
|
+
theme: 'danger',
|
|
493
|
+
}}
|
|
494
|
+
cancelProps={{
|
|
495
|
+
label: 'I changed my mind',
|
|
496
|
+
}}
|
|
497
|
+
>
|
|
498
|
+
<Paragraph>
|
|
499
|
+
To delete the instance, please enter its full name:{' '}
|
|
500
|
+
<Text.Strong>{name}</Text.Strong>
|
|
501
|
+
</Paragraph>
|
|
502
|
+
|
|
503
|
+
<Input.Text
|
|
504
|
+
name="name"
|
|
505
|
+
rules={[
|
|
506
|
+
{ required: true, message: 'This field is required' },
|
|
507
|
+
{
|
|
508
|
+
async validator(rule, value) {
|
|
509
|
+
if (value !== name) {
|
|
510
|
+
throw new Error('Incorrect name');
|
|
511
|
+
}
|
|
512
|
+
},
|
|
513
|
+
},
|
|
514
|
+
]}
|
|
515
|
+
placeholder="Enter the name of the instance"
|
|
516
|
+
/>
|
|
517
|
+
</DialogForm>
|
|
518
|
+
);
|
|
519
|
+
}
|
|
520
|
+
```
|
|
521
|
+
|
|
522
|
+
## Known Differences with AntD Forms
|
|
523
|
+
|
|
524
|
+
- `onSubmit` instead of `onSuccess`
|
|
525
|
+
- `onSubmitFailed` instead of `onFailed`
|
|
526
|
+
- `defaultValues` instead of `initialValues`
|
|
527
|
+
- `onSubmit` can return a promise — the form and submit button show loading state until the promise resolves
|
|
528
|
+
- Arrays inside form data are not supported
|
|
529
|
+
- `preserve` property is not yet implemented
|
|
530
|
+
- The `Field` component is a virtual wrapper (does not render a DOM element)
|
|
531
|
+
- Nested properties are handled via field names with `.` dot notation
|
|
532
|
+
- Does not support `validating` state (but validation rules can be async)
|
|
533
|
+
|
|
534
|
+
## Accessibility
|
|
535
|
+
|
|
536
|
+
### Keyboard Navigation
|
|
537
|
+
|
|
538
|
+
- `Tab` - Moves focus through form fields in sequence
|
|
539
|
+
- `Shift + Tab` - Moves focus backwards through form fields
|
|
540
|
+
- `Enter` - Submits the form when focus is on a submit button
|
|
541
|
+
- Form fields inherit their specific keyboard navigation patterns
|
|
542
|
+
|
|
543
|
+
### Screen Reader Support
|
|
544
|
+
|
|
545
|
+
- Form is announced as "form" to screen readers
|
|
546
|
+
- Field labels are properly associated with their inputs
|
|
547
|
+
- Validation errors are announced when they appear
|
|
548
|
+
- Required fields are indicated to screen readers
|
|
549
|
+
- Form submission status is communicated
|
|
550
|
+
|
|
551
|
+
### ARIA Properties
|
|
552
|
+
|
|
553
|
+
- Form uses proper semantic HTML (`<form>` element)
|
|
554
|
+
- Fields are associated with labels via `htmlFor` and `id` attributes
|
|
555
|
+
- Validation errors use `aria-describedby` to associate with fields
|
|
556
|
+
- Required fields use `aria-required` attribute
|
|
557
|
+
- Form submission state is indicated via loading states
|
|
558
|
+
|
|
559
|
+
## Best Practices
|
|
560
|
+
|
|
561
|
+
1. **Use direct field properties**: Pass field properties directly to input components instead of using Field wrapper
|
|
562
|
+
```jsx
|
|
563
|
+
// Recommended
|
|
564
|
+
<Input.Text name="email" label="Email" type="email" rules={[{ required: true }]} />
|
|
565
|
+
|
|
566
|
+
// Deprecated
|
|
567
|
+
<Field name="email" label="Email" rules={[{ required: true }]}>
|
|
568
|
+
<Input.Text type="email" />
|
|
569
|
+
</Field>
|
|
570
|
+
```
|
|
571
|
+
|
|
572
|
+
2. **Provide clear labels**: Always include descriptive labels for form fields
|
|
573
|
+
```jsx
|
|
574
|
+
<Input.Text name="email" label="Email Address" type="email" />
|
|
575
|
+
```
|
|
576
|
+
|
|
577
|
+
3. **Use appropriate validation**: Combine built-in validators for common cases and custom validators for complex logic
|
|
578
|
+
```jsx
|
|
579
|
+
<Input.Text
|
|
580
|
+
name="email"
|
|
581
|
+
label="Email"
|
|
582
|
+
type="email"
|
|
583
|
+
rules={[
|
|
584
|
+
{ required: true, message: 'Email is required' },
|
|
585
|
+
{ type: 'email', message: 'Please enter a valid email' },
|
|
586
|
+
]}
|
|
587
|
+
/>
|
|
588
|
+
```
|
|
589
|
+
|
|
590
|
+
4. **Handle errors gracefully**: Always provide feedback for validation and submission errors
|
|
591
|
+
```jsx
|
|
592
|
+
<Form onSubmit={handleSubmit} onSubmitFailed={handleError}>
|
|
593
|
+
{/* fields */}
|
|
594
|
+
<Form.SubmitError />
|
|
595
|
+
</Form>
|
|
596
|
+
```
|
|
597
|
+
|
|
598
|
+
5. **Use proper field types**: Choose appropriate input types for better UX and validation
|
|
599
|
+
```jsx
|
|
600
|
+
<Input.Text type="email" /> {/* for email addresses */}
|
|
601
|
+
<Input.Password /> {/* for passwords */}
|
|
602
|
+
<Input.Number /> {/* for numeric input */}
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
6. **Group related fields**: Use logical grouping and layout for complex forms
|
|
606
|
+
```jsx
|
|
607
|
+
<Form orientation="horizontal"> {/* for compact forms */}
|
|
608
|
+
<Form labelPosition="side"> {/* for wide layouts */}
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
## Integration with Input Components
|
|
612
|
+
|
|
613
|
+
All input components automatically register with the parent Form and inherit form-level properties:
|
|
614
|
+
|
|
615
|
+
- Validation triggers (`validateTrigger`)
|
|
616
|
+
- Label positioning (`labelPosition`)
|
|
617
|
+
- Required indicators (`requiredMark`)
|
|
618
|
+
- Read-only state (`isReadOnly`)
|
|
619
|
+
- Disabled state (`isDisabled`)
|
|
620
|
+
|
|
621
|
+
Field properties can be passed directly to any input component:
|
|
622
|
+
|
|
623
|
+
```jsx
|
|
624
|
+
<Form>
|
|
625
|
+
<Input.Text name="text" label="Text Input" />
|
|
626
|
+
<Input.Password name="password" label="Password" />
|
|
627
|
+
<Select name="select" label="Select" options={[]} />
|
|
628
|
+
<Checkbox name="checkbox" label="Checkbox" />
|
|
629
|
+
<RadioGroup name="radio" label="Radio Group" options={[]} />
|
|
630
|
+
<DatePicker name="date" label="Date Picker" />
|
|
631
|
+
<Slider name="slider" label="Slider" />
|
|
632
|
+
<Switch name="switch" label="Switch" />
|
|
633
|
+
</Form>
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
## Related Components
|
|
637
|
+
|
|
638
|
+
- [FormInstance](./FormInstance.md) - Programmatic form control API
|
|
639
|
+
- [Field](./Field.md) - Field wrapper (deprecated for regular use)
|
|
640
|
+
- [Input.Text](../fields/TextInput.md) - Text input field
|
|
641
|
+
- [Input.Password](../fields/PasswordInput.md) - Password input field
|
|
642
|
+
- [Select](../fields/Select.md) - Dropdown selection field
|
|
643
|
+
- [Checkbox](../fields/Checkbox.md) - Checkbox input field
|
|
644
|
+
- [DialogForm](../overlays/DialogForm.md) - Form within a dialog
|