@cube-dev/ui-kit 0.0.0-canary-d688797 → 0.0.0-canary-bdfccbd
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/_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 +31 -41
- package/docs/RenderCache.md +5 -0
- package/docs/Result.md +8 -1
- package/docs/components/Block.md +33 -0
- package/docs/components/CollectionItem.md +14 -20
- 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 +11 -5
- package/docs/components/actions/Button.md +45 -19
- package/docs/components/actions/ButtonGroup.md +46 -0
- package/docs/components/actions/ButtonSplit.md +11 -1
- package/docs/components/actions/CommandMenu.md +17 -25
- package/docs/components/actions/ItemAction.md +60 -0
- package/docs/components/actions/ItemButton.md +25 -13
- package/docs/components/actions/Link.md +1 -1
- package/docs/components/actions/Menu.md +49 -73
- package/docs/components/actions/MenuTrigger.md +47 -0
- package/docs/components/actions/SubMenuTrigger.md +38 -0
- package/docs/components/actions/use-anchored-menu.md +6 -8
- package/docs/components/actions/use-context-menu.md +6 -8
- 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 +7 -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 +14 -10
- 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 +1 -1
- package/docs/components/content/Item.md +46 -35
- package/docs/components/content/ItemBadge.md +31 -0
- package/docs/components/content/ItemCard.md +7 -1
- package/docs/components/content/Layout.md +91 -114
- 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 +9 -0
- package/docs/components/content/Text.md +54 -0
- package/docs/components/content/TextItem.md +7 -1
- package/docs/components/content/Title.md +45 -0
- package/docs/components/fields/Checkbox.md +10 -12
- package/docs/components/fields/ComboBox.md +48 -11
- package/docs/components/fields/DatePicker.md +8 -10
- package/docs/components/fields/FileInput.md +7 -9
- package/docs/components/fields/FilterListBox.md +48 -23
- package/docs/components/fields/FilterPicker.md +64 -22
- package/docs/components/fields/HueSlider.md +3 -5
- package/docs/components/fields/ListBox.md +52 -29
- package/docs/components/fields/NumberInput.md +8 -10
- package/docs/components/fields/PasswordInput.md +7 -9
- package/docs/components/fields/Picker.md +93 -70
- package/docs/components/fields/RadioGroup.md +5 -7
- package/docs/components/fields/SearchInput.md +7 -9
- package/docs/components/fields/Select.md +26 -31
- package/docs/components/fields/Switch.md +9 -11
- package/docs/components/fields/TextInput.md +18 -14
- package/docs/components/form/Field.md +21 -29
- package/docs/components/form/Form.md +304 -115
- package/docs/components/form/FormInstance.md +25 -37
- package/docs/components/helpers/DisplayTransition.md +15 -6
- package/docs/components/helpers/IconSwitch.md +5 -1
- 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 +71 -49
- 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 +3 -5
- package/docs/components/overlays/DialogContainer.md +1 -1
- package/docs/components/overlays/DialogForm.md +15 -10
- package/docs/components/overlays/DialogTrigger.md +1 -1
- package/docs/components/overlays/Notifications.md +9 -13
- package/docs/components/overlays/Toast.md +5 -1
- package/docs/components/overlays/Tooltip.md +37 -8
- package/docs/components/overlays/TooltipProvider.md +42 -0
- package/docs/components/overlays/TooltipTrigger.md +42 -0
- package/docs/components/overlays/UseDialogContainer.md +8 -14
- 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/package.json +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Form
|
|
2
2
|
|
|
3
|
-
<Badge variant="accent">Form component</Badge>
|
|
4
|
-
|
|
5
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.
|
|
6
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
7
|
## When to Use
|
|
8
8
|
|
|
9
9
|
- When collecting user information or input data
|
|
@@ -15,78 +15,64 @@ Forms allow users to enter data that can be submitted while providing alignment
|
|
|
15
15
|
|
|
16
16
|
## Properties
|
|
17
17
|
|
|
18
|
-
###
|
|
18
|
+
### Form-specific Properties
|
|
19
19
|
|
|
20
|
-
|
|
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
|
|
21
28
|
|
|
22
|
-
###
|
|
29
|
+
### Inherited Form Properties
|
|
23
30
|
|
|
24
|
-
|
|
31
|
+
These properties are inherited by all input components within the form:
|
|
25
32
|
|
|
26
|
-
|
|
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
|
|
27
41
|
|
|
28
|
-
|
|
42
|
+
### HTML Form Properties
|
|
29
43
|
|
|
30
|
-
|
|
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
|
|
31
49
|
|
|
32
|
-
|
|
50
|
+
### Base Properties
|
|
33
51
|
|
|
34
|
-
|
|
52
|
+
Supports [Base properties](../../BaseProperties.md)
|
|
35
53
|
|
|
36
|
-
|
|
37
|
-
|----------|------|-------------|
|
|
38
|
-
| `name` | `string` | Form name attribute |
|
|
39
|
-
| `defaultValues` | `Partial<T>` | Default field values |
|
|
40
|
-
| `onValuesChange` | `(data: T) => void` | Triggered when any field value changes |
|
|
41
|
-
| `onSubmit` | `(data: T) => void \| Promise<void>` | Triggered on successful form submission |
|
|
42
|
-
| `onSubmitFailed` | `(error: any) => void` | Triggered when form submission fails |
|
|
43
|
-
| `form` | `CubeFormInstance<T>` | Form instance created by `useForm` |
|
|
44
|
-
| `labelWidth` | `Styles['width']` | Width of label area for side-positioned labels |
|
|
45
|
-
| `orientation` | `'vertical' \| 'horizontal'` | Form layout orientation |
|
|
54
|
+
### Styling Properties
|
|
46
55
|
|
|
47
|
-
|
|
56
|
+
#### styles
|
|
48
57
|
|
|
49
|
-
|
|
58
|
+
Customizes the root form element.
|
|
50
59
|
|
|
51
|
-
|
|
52
|
-
|----------|------|-------------|
|
|
53
|
-
| `labelPosition` | `'top' \| 'side' \| 'split'` | 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 |
|
|
54
|
-
| `requiredMark` | `boolean` | Whether to show required field indicators |
|
|
55
|
-
| `isRequired` | `boolean` | Whether fields are required by default |
|
|
56
|
-
| `necessityIndicator` | `'icon' \| 'label'` | Type of necessity indicator |
|
|
57
|
-
| `isReadOnly` | `boolean` | Whether fields are read-only by default |
|
|
58
|
-
| `validationState` | `'valid' \| 'invalid'` | Validation state for all fields |
|
|
59
|
-
| `validateTrigger` | `'onBlur' \| 'onChange' \| 'onSubmit'` | When to trigger validation |
|
|
60
|
-
| `showValid` | `boolean` | Whether to show valid state indicators |
|
|
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
61
|
|
|
62
|
-
###
|
|
62
|
+
### Style Properties
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|----------|------|-------------|
|
|
66
|
-
| `action` | `string` | Form action URL (for server submission) |
|
|
67
|
-
| `autoComplete` | `string` | Browser autocomplete behavior |
|
|
68
|
-
| `encType` | `string` | Form encoding type |
|
|
69
|
-
| `method` | `'get' \| 'post'` | HTTP method for form submission |
|
|
70
|
-
| `target` | `string` | Target for form submission |
|
|
64
|
+
These properties allow direct style application without using the `styles` prop: `display`, `flow`, `gap`, `placeItems`, `width`, `height`, `padding`, `margin`.
|
|
71
65
|
|
|
72
66
|
### Modifiers
|
|
73
67
|
|
|
74
68
|
The `mods` property accepts the following modifiers:
|
|
75
69
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
| `has-split` | `boolean` | Applied when `labelPosition="split"` |
|
|
80
|
-
| `horizontal` | `boolean` | Applied when `orientation="horizontal"` |
|
|
81
|
-
|
|
82
|
-
## Variants
|
|
83
|
-
|
|
84
|
-
The Form component does not have built-in variants. Styling is controlled through the `styles` prop and layout properties.
|
|
70
|
+
- **`has-sider`** `boolean` — Applied when `labelPosition="side"`
|
|
71
|
+
- **`has-split`** `boolean` — Applied when `labelPosition="split"`
|
|
72
|
+
- **`horizontal`** `boolean` — Applied when `orientation="horizontal"`
|
|
85
73
|
|
|
86
74
|
## Static Methods
|
|
87
75
|
|
|
88
|
-
The Form component provides several static methods for form functionality:
|
|
89
|
-
|
|
90
76
|
### Form.useForm
|
|
91
77
|
|
|
92
78
|
```jsx
|
|
@@ -95,13 +81,26 @@ const [form] = Form.useForm();
|
|
|
95
81
|
|
|
96
82
|
Creates a form instance for programmatic control. See [FormInstance documentation](./FormInstance.md) for detailed API.
|
|
97
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
|
+
|
|
98
97
|
### Form.Submit (SubmitButton)
|
|
99
98
|
|
|
100
99
|
```jsx
|
|
101
100
|
<Form.Submit>Submit</Form.Submit>
|
|
102
101
|
```
|
|
103
102
|
|
|
104
|
-
Specialized button that automatically handles form submission and loading states.
|
|
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.
|
|
105
104
|
|
|
106
105
|
### Form.Reset (ResetButton)
|
|
107
106
|
|
|
@@ -127,16 +126,16 @@ Component that displays submission errors returned from the `onSubmit` handler.
|
|
|
127
126
|
</Form.Item>
|
|
128
127
|
```
|
|
129
128
|
|
|
130
|
-
|
|
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.
|
|
131
130
|
|
|
132
|
-
The Field component should only be used when wrapping read-only content
|
|
131
|
+
The Field component should only be used when wrapping read-only content or custom components without built-in field support.
|
|
133
132
|
|
|
134
133
|
## Built-in Field Support
|
|
135
134
|
|
|
136
135
|
**All input components have built-in field support**, meaning you can pass field properties directly to them without needing a wrapper:
|
|
137
136
|
|
|
138
137
|
```jsx
|
|
139
|
-
//
|
|
138
|
+
// Recommended — direct field properties
|
|
140
139
|
<Input.Text
|
|
141
140
|
name="email"
|
|
142
141
|
label="Email"
|
|
@@ -144,7 +143,7 @@ The Field component should only be used when wrapping read-only content to make
|
|
|
144
143
|
placeholder="Enter your email"
|
|
145
144
|
/>
|
|
146
145
|
|
|
147
|
-
//
|
|
146
|
+
// Deprecated — Field wrapper (still works but not recommended)
|
|
148
147
|
<Field name="email" label="Email" rules={[{ required: true, type: 'email' }]}>
|
|
149
148
|
<Input.Text placeholder="Enter your email" />
|
|
150
149
|
</Field>
|
|
@@ -154,17 +153,92 @@ The Field component should only be used when wrapping read-only content to make
|
|
|
154
153
|
|
|
155
154
|
All input components within a Form accept these field-related properties:
|
|
156
155
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
+
```
|
|
168
242
|
|
|
169
243
|
## Examples
|
|
170
244
|
|
|
@@ -186,7 +260,7 @@ function BasicForm() {
|
|
|
186
260
|
type="email"
|
|
187
261
|
rules={[
|
|
188
262
|
{ required: true, message: 'Email is required' },
|
|
189
|
-
{ type: 'email', message: 'Please enter a valid email' }
|
|
263
|
+
{ type: 'email', message: 'Please enter a valid email' },
|
|
190
264
|
]}
|
|
191
265
|
placeholder="Enter your email"
|
|
192
266
|
/>
|
|
@@ -196,11 +270,51 @@ function BasicForm() {
|
|
|
196
270
|
label="Password"
|
|
197
271
|
rules={[
|
|
198
272
|
{ required: true, message: 'Password is required' },
|
|
199
|
-
{ min: 6, message: 'Password must be at least 6 characters' }
|
|
273
|
+
{ min: 6, message: 'Password must be at least 6 characters' },
|
|
200
274
|
]}
|
|
201
275
|
placeholder="Enter your password"
|
|
202
276
|
/>
|
|
203
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 />
|
|
204
318
|
<SubmitButton>Submit</SubmitButton>
|
|
205
319
|
</Form>
|
|
206
320
|
);
|
|
@@ -236,7 +350,7 @@ function BasicForm() {
|
|
|
236
350
|
<Form
|
|
237
351
|
defaultValues={{
|
|
238
352
|
email: 'user@example.com',
|
|
239
|
-
name: 'John Doe'
|
|
353
|
+
name: 'John Doe',
|
|
240
354
|
}}
|
|
241
355
|
onSubmit={handleSubmit}
|
|
242
356
|
>
|
|
@@ -272,7 +386,7 @@ function BasicForm() {
|
|
|
272
386
|
options={[
|
|
273
387
|
{ value: 'us', label: 'United States' },
|
|
274
388
|
{ value: 'uk', label: 'United Kingdom' },
|
|
275
|
-
{ value: 'ca', label: 'Canada' }
|
|
389
|
+
{ value: 'ca', label: 'Canada' },
|
|
276
390
|
]}
|
|
277
391
|
/>
|
|
278
392
|
|
|
@@ -286,27 +400,137 @@ function BasicForm() {
|
|
|
286
400
|
</Form>
|
|
287
401
|
```
|
|
288
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
|
+
|
|
289
450
|
### When to Use Field Component
|
|
290
451
|
|
|
291
452
|
The Field component should **only** be used when wrapping read-only content or custom components that don't have built-in field support:
|
|
292
453
|
|
|
293
454
|
```jsx
|
|
294
455
|
<Form onSubmit={handleSubmit}>
|
|
295
|
-
{/* Regular inputs
|
|
456
|
+
{/* Regular inputs — use built-in field support */}
|
|
296
457
|
<Input.Text name="name" label="Name" rules={[{ required: true }]} />
|
|
297
458
|
|
|
298
|
-
{/* Read-only content
|
|
459
|
+
{/* Read-only content — use Field wrapper */}
|
|
299
460
|
<Field name="readonly" label="Read-only Information">
|
|
300
461
|
<div>This is some read-only content that should look like a field</div>
|
|
301
462
|
</Field>
|
|
302
463
|
|
|
303
|
-
{/* Custom component without field support
|
|
464
|
+
{/* Custom component without field support — use Field wrapper */}
|
|
304
465
|
<Field name="custom" label="Custom Component" rules={[{ required: true }]}>
|
|
305
466
|
<CustomComponent />
|
|
306
467
|
</Field>
|
|
307
468
|
</Form>
|
|
308
469
|
```
|
|
309
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
|
+
|
|
310
534
|
## Accessibility
|
|
311
535
|
|
|
312
536
|
### Keyboard Navigation
|
|
@@ -336,10 +560,10 @@ The Field component should **only** be used when wrapping read-only content or c
|
|
|
336
560
|
|
|
337
561
|
1. **Use direct field properties**: Pass field properties directly to input components instead of using Field wrapper
|
|
338
562
|
```jsx
|
|
339
|
-
//
|
|
563
|
+
// Recommended
|
|
340
564
|
<Input.Text name="email" label="Email" type="email" rules={[{ required: true }]} />
|
|
341
565
|
|
|
342
|
-
//
|
|
566
|
+
// Deprecated
|
|
343
567
|
<Field name="email" label="Email" rules={[{ required: true }]}>
|
|
344
568
|
<Input.Text type="email" />
|
|
345
569
|
</Field>
|
|
@@ -350,7 +574,7 @@ The Field component should **only** be used when wrapping read-only content or c
|
|
|
350
574
|
<Input.Text name="email" label="Email Address" type="email" />
|
|
351
575
|
```
|
|
352
576
|
|
|
353
|
-
3. **Use appropriate validation**:
|
|
577
|
+
3. **Use appropriate validation**: Combine built-in validators for common cases and custom validators for complex logic
|
|
354
578
|
```jsx
|
|
355
579
|
<Input.Text
|
|
356
580
|
name="email"
|
|
@@ -358,7 +582,7 @@ The Field component should **only** be used when wrapping read-only content or c
|
|
|
358
582
|
type="email"
|
|
359
583
|
rules={[
|
|
360
584
|
{ required: true, message: 'Email is required' },
|
|
361
|
-
{ type: 'email', message: 'Please enter a valid email' }
|
|
585
|
+
{ type: 'email', message: 'Please enter a valid email' },
|
|
362
586
|
]}
|
|
363
587
|
/>
|
|
364
588
|
```
|
|
@@ -384,40 +608,6 @@ The Field component should **only** be used when wrapping read-only content or c
|
|
|
384
608
|
<Form labelPosition="side"> {/* for wide layouts */}
|
|
385
609
|
```
|
|
386
610
|
|
|
387
|
-
## Form Management
|
|
388
|
-
|
|
389
|
-
Forms can be controlled programmatically using the form instance:
|
|
390
|
-
|
|
391
|
-
```jsx
|
|
392
|
-
function ControlledForm() {
|
|
393
|
-
const [form] = Form.useForm();
|
|
394
|
-
|
|
395
|
-
const handleReset = () => {
|
|
396
|
-
form.resetFields();
|
|
397
|
-
};
|
|
398
|
-
|
|
399
|
-
const handleFillDemo = () => {
|
|
400
|
-
form.setFieldsValue({
|
|
401
|
-
email: 'demo@example.com',
|
|
402
|
-
name: 'Demo User'
|
|
403
|
-
});
|
|
404
|
-
};
|
|
405
|
-
|
|
406
|
-
return (
|
|
407
|
-
<Form form={form} onSubmit={handleSubmit}>
|
|
408
|
-
<Input.Text name="email" label="Email" type="email" />
|
|
409
|
-
<Input.Text name="name" label="Name" />
|
|
410
|
-
|
|
411
|
-
<Space>
|
|
412
|
-
<SubmitButton>Submit</SubmitButton>
|
|
413
|
-
<Button onPress={handleReset}>Reset</Button>
|
|
414
|
-
<Button onPress={handleFillDemo}>Fill Demo Data</Button>
|
|
415
|
-
</Space>
|
|
416
|
-
</Form>
|
|
417
|
-
);
|
|
418
|
-
}
|
|
419
|
-
```
|
|
420
|
-
|
|
421
611
|
## Integration with Input Components
|
|
422
612
|
|
|
423
613
|
All input components automatically register with the parent Form and inherit form-level properties:
|
|
@@ -437,7 +627,6 @@ Field properties can be passed directly to any input component:
|
|
|
437
627
|
<Select name="select" label="Select" options={[]} />
|
|
438
628
|
<Checkbox name="checkbox" label="Checkbox" />
|
|
439
629
|
<RadioGroup name="radio" label="Radio Group" options={[]} />
|
|
440
|
-
<TextArea name="textarea" label="Text Area" />
|
|
441
630
|
<DatePicker name="date" label="Date Picker" />
|
|
442
631
|
<Slider name="slider" label="Slider" />
|
|
443
632
|
<Switch name="switch" label="Switch" />
|
|
@@ -447,9 +636,9 @@ Field properties can be passed directly to any input component:
|
|
|
447
636
|
## Related Components
|
|
448
637
|
|
|
449
638
|
- [FormInstance](./FormInstance.md) - Programmatic form control API
|
|
639
|
+
- [Field](./Field.md) - Field wrapper (deprecated for regular use)
|
|
450
640
|
- [Input.Text](../fields/TextInput.md) - Text input field
|
|
451
641
|
- [Input.Password](../fields/PasswordInput.md) - Password input field
|
|
452
642
|
- [Select](../fields/Select.md) - Dropdown selection field
|
|
453
643
|
- [Checkbox](../fields/Checkbox.md) - Checkbox input field
|
|
454
|
-
- [Field](./Field.md) - Field wrapper (deprecated for regular use)
|
|
455
644
|
- [DialogForm](../overlays/DialogForm.md) - Form within a dialog
|