@cube-dev/ui-kit 0.137.0 → 0.137.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CHANGELOG.md +22 -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.d.ts +0 -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/InlineInput/InlineInput.d.ts +25 -0
- package/dist/components/content/InlineInput/InlineInput.js +109 -44
- package/dist/components/content/InlineInput/InlineInput.js.map +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/Tree/Tree.js +1 -1
- package/dist/components/content/Tree/TreeNode.js +1 -1
- package/dist/components/content/Tree/styled.js +1 -1
- package/dist/components/content/Tree/tree-index.js +1 -1
- package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
- package/dist/components/content/Tree/use-load-data.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/DraggableListBox.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.js +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/TabButton.js +5 -2
- package/dist/components/navigation/Tabs/TabButton.js.map +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.d.ts +1 -2
- package/dist/components/overlays/Modal/Modal.js +1 -1
- package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
- package/dist/components/overlays/Modal/Overlay.d.ts +0 -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/Modal/types.d.ts +0 -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.d.ts +0 -2
- 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/index.d.ts +0 -1
- package/dist/components/portal/usePortal.js +1 -1
- package/dist/components/shared/DraggableCollection.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/GripVerticalIcon.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/tokens/typography.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/usePopoverSync.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/selection.js +1 -1
- package/dist/utils/styles.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/components/content/InlineInput.md +55 -10
- package/docs/components/navigation/Tabs.md +2 -0
- package/package.json +1 -1
- package/dist/components/portal/PortalProvider.d.ts +0 -2
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
5
|
+
import { useAutoTooltip } from "../use-auto-tooltip.js";
|
|
5
6
|
import { BLOCK_STYLES, COLOR_STYLES, OUTER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
|
|
6
7
|
import { forwardRef, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
7
8
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
-
import { FocusScope, useFocusWithin } from "react-aria";
|
|
9
|
+
import { FocusScope, useFocusRing, useFocusWithin } from "react-aria";
|
|
9
10
|
import { useControlledState } from "@react-stately/utils";
|
|
10
11
|
|
|
11
12
|
//#region src/components/content/InlineInput/InlineInput.tsx
|
|
@@ -13,14 +14,35 @@ const InlineInputRoot = tasty({
|
|
|
13
14
|
as: "span",
|
|
14
15
|
styles: {
|
|
15
16
|
display: "inline-flex",
|
|
17
|
+
alignItems: "baseline",
|
|
16
18
|
verticalAlign: "baseline",
|
|
17
19
|
position: "relative",
|
|
20
|
+
maxWidth: "100%",
|
|
18
21
|
color: "inherit",
|
|
19
22
|
preset: "inherit",
|
|
20
23
|
cursor: {
|
|
21
24
|
"": "inherit",
|
|
22
25
|
"editable & !editing": "text"
|
|
23
26
|
},
|
|
27
|
+
outline: {
|
|
28
|
+
"": "1bw #primary.0",
|
|
29
|
+
focused: "1bw #primary"
|
|
30
|
+
},
|
|
31
|
+
outlineOffset: 1,
|
|
32
|
+
radius: {
|
|
33
|
+
"": 0,
|
|
34
|
+
focused: true
|
|
35
|
+
},
|
|
36
|
+
transition: "theme",
|
|
37
|
+
Display: {
|
|
38
|
+
display: "block",
|
|
39
|
+
whiteSpace: "nowrap",
|
|
40
|
+
overflow: "hidden",
|
|
41
|
+
textOverflow: "ellipsis",
|
|
42
|
+
maxWidth: "100%",
|
|
43
|
+
preset: "inherit",
|
|
44
|
+
color: "inherit"
|
|
45
|
+
},
|
|
24
46
|
Input: {
|
|
25
47
|
recipe: "reset input / input-autofill",
|
|
26
48
|
preset: "inherit",
|
|
@@ -63,7 +85,7 @@ const STYLE_PROPS = [
|
|
|
63
85
|
* works regardless of `editTrigger`.
|
|
64
86
|
*/
|
|
65
87
|
const InlineInput = forwardRef(function InlineInput(allProps, ref) {
|
|
66
|
-
const { value: valueProp, defaultValue, onChange, isEditing: isEditingProp, defaultIsEditing, onEditingChange, onSubmit, onCancel, editTrigger = "dblclick", submitOnBlur = true, trimOnSubmit = true, allowEmpty = false, isDisabled = false, isReadOnly = false, placeholder, renderDisplay, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, qa, qaVal, styles: stylesProp, inputStyles, mods: customMods, tokens: customTokens, ...otherProps } = allProps;
|
|
88
|
+
const { value: valueProp, defaultValue, onChange, isEditing: isEditingProp, defaultIsEditing, onEditingChange, onSubmit, onCancel, editTrigger = "dblclick", keyboardActivation = true, submitOnBlur = true, trimOnSubmit = true, allowEmpty = false, isDisabled = false, isReadOnly = false, placeholder, renderDisplay, tooltip = true, tooltipPlacement = "top", "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, qa, qaVal, styles: stylesProp, inputStyles, mods: customMods, tokens: customTokens, ...otherProps } = allProps;
|
|
67
89
|
const isControlled = valueProp !== void 0;
|
|
68
90
|
const inputRef = useRef(null);
|
|
69
91
|
const measureRef = useRef(null);
|
|
@@ -76,7 +98,9 @@ const InlineInput = forwardRef(function InlineInput(allProps, ref) {
|
|
|
76
98
|
const [inputWidth, setInputWidth] = useState(null);
|
|
77
99
|
const submitTokenRef = useRef(0);
|
|
78
100
|
const isEditingRef = useRef(isEditing);
|
|
79
|
-
|
|
101
|
+
useLayoutEffect(() => {
|
|
102
|
+
isEditingRef.current = isEditing;
|
|
103
|
+
}, [isEditing]);
|
|
80
104
|
useEffect(() => {
|
|
81
105
|
setOptimisticValue(null);
|
|
82
106
|
}, [value]);
|
|
@@ -146,6 +170,7 @@ const InlineInput = forwardRef(function InlineInput(allProps, ref) {
|
|
|
146
170
|
const handleInputChange = useEvent((e) => {
|
|
147
171
|
setDraft(e.target.value);
|
|
148
172
|
});
|
|
173
|
+
const { isFocusVisible, focusProps: focusRingProps } = useFocusRing();
|
|
149
174
|
const { focusWithinProps } = useFocusWithin({
|
|
150
175
|
isDisabled: !isEditing,
|
|
151
176
|
onBlurWithin: () => {
|
|
@@ -154,26 +179,31 @@ const InlineInput = forwardRef(function InlineInput(allProps, ref) {
|
|
|
154
179
|
}
|
|
155
180
|
});
|
|
156
181
|
const handleDblClick = useEvent((e) => {
|
|
157
|
-
if (editTrigger !== "dblclick") return;
|
|
158
182
|
e.preventDefault();
|
|
159
183
|
e.stopPropagation();
|
|
160
184
|
enterEditing();
|
|
161
185
|
});
|
|
162
186
|
const handleClick = useEvent((e) => {
|
|
163
|
-
if (editTrigger !== "click") return;
|
|
164
187
|
e.preventDefault();
|
|
165
188
|
e.stopPropagation();
|
|
166
189
|
enterEditing();
|
|
167
190
|
});
|
|
191
|
+
const handleRootKeyDown = useEvent((e) => {
|
|
192
|
+
if (e.key === "Enter" || e.key === "F2" || e.key === " ") {
|
|
193
|
+
e.preventDefault();
|
|
194
|
+
e.stopPropagation();
|
|
195
|
+
enterEditing();
|
|
196
|
+
}
|
|
197
|
+
});
|
|
168
198
|
useImperativeHandle(ref, () => ({
|
|
169
199
|
startEditing: () => enterEditing(),
|
|
170
200
|
stopEditing: (submit = true) => {
|
|
171
|
-
if (!
|
|
201
|
+
if (!isEditingRef.current) return;
|
|
172
202
|
if (submit) commit(draft);
|
|
173
203
|
else cancel();
|
|
174
204
|
},
|
|
175
205
|
focus: () => {
|
|
176
|
-
if (
|
|
206
|
+
if (isEditingRef.current) inputRef.current?.focus();
|
|
177
207
|
else rootRef.current?.focus();
|
|
178
208
|
},
|
|
179
209
|
getValue: () => displayedValue
|
|
@@ -182,13 +212,14 @@ const InlineInput = forwardRef(function InlineInput(allProps, ref) {
|
|
|
182
212
|
commit,
|
|
183
213
|
cancel,
|
|
184
214
|
draft,
|
|
185
|
-
displayedValue
|
|
186
|
-
isEditing
|
|
215
|
+
displayedValue
|
|
187
216
|
]);
|
|
188
217
|
const isEditable = editTrigger !== "none" && !isDisabled && !isReadOnly;
|
|
218
|
+
const showFocusRing = isFocusVisible && isEditable && !isEditing;
|
|
189
219
|
const mods = useMemo(() => ({
|
|
190
220
|
editing: isEditing,
|
|
191
221
|
editable: isEditable,
|
|
222
|
+
focused: showFocusRing,
|
|
192
223
|
disabled: isDisabled,
|
|
193
224
|
"read-only": isReadOnly,
|
|
194
225
|
empty: !displayedValue,
|
|
@@ -196,6 +227,7 @@ const InlineInput = forwardRef(function InlineInput(allProps, ref) {
|
|
|
196
227
|
}), [
|
|
197
228
|
isEditing,
|
|
198
229
|
isEditable,
|
|
230
|
+
showFocusRing,
|
|
199
231
|
isDisabled,
|
|
200
232
|
isReadOnly,
|
|
201
233
|
displayedValue,
|
|
@@ -222,41 +254,74 @@ const InlineInput = forwardRef(function InlineInput(allProps, ref) {
|
|
|
222
254
|
children: placeholder
|
|
223
255
|
}) : "");
|
|
224
256
|
const baseProps = filterBaseProps(otherProps, { eventProps: true });
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
qaVal,
|
|
229
|
-
mods,
|
|
230
|
-
tokens,
|
|
231
|
-
styles: extractedStyles,
|
|
232
|
-
...mergeProps$1(baseProps, focusWithinProps, {
|
|
233
|
-
onDoubleClick: isEditing ? void 0 : handleDblClick,
|
|
234
|
-
onClick: isEditing ? void 0 : handleClick
|
|
235
|
-
}),
|
|
236
|
-
children: isEditing ? /* @__PURE__ */ jsxs(FocusScope, {
|
|
237
|
-
autoFocus: true,
|
|
238
|
-
restoreFocus: false,
|
|
239
|
-
contain: false,
|
|
240
|
-
children: [/* @__PURE__ */ jsx("span", {
|
|
241
|
-
ref: measureRef,
|
|
242
|
-
"data-element": "Measure",
|
|
243
|
-
"aria-hidden": "true",
|
|
244
|
-
children: draft || placeholder || " "
|
|
245
|
-
}), /* @__PURE__ */ jsx("input", {
|
|
246
|
-
ref: inputRef,
|
|
247
|
-
"data-element": "Input",
|
|
248
|
-
type: "text",
|
|
249
|
-
value: draft,
|
|
250
|
-
placeholder,
|
|
251
|
-
disabled: isDisabled,
|
|
252
|
-
readOnly: isReadOnly,
|
|
253
|
-
"aria-label": ariaLabel,
|
|
254
|
-
"aria-labelledby": ariaLabelledby,
|
|
255
|
-
onChange: handleInputChange,
|
|
256
|
-
onKeyDown: handleKeyDown
|
|
257
|
-
})]
|
|
258
|
-
}) : displayContent
|
|
257
|
+
const { labelRef: tooltipLabelRef, renderWithTooltip } = useAutoTooltip({
|
|
258
|
+
tooltip: isEditing || renderDisplay ? false : tooltip,
|
|
259
|
+
children: displayedValue
|
|
259
260
|
});
|
|
261
|
+
const wantsClick = !isEditing && isEditable && editTrigger === "click";
|
|
262
|
+
const wantsDblClick = !isEditing && isEditable && editTrigger === "dblclick";
|
|
263
|
+
const wantsKeyboard = !isEditing && isEditable && keyboardActivation;
|
|
264
|
+
const renderRoot = (triggerProps, tooltipRef) => {
|
|
265
|
+
const handleRootRef = (element) => {
|
|
266
|
+
rootRef.current = element;
|
|
267
|
+
if (tooltipRef) tooltipRef.current = element;
|
|
268
|
+
};
|
|
269
|
+
const handleDisplayRef = (element) => {
|
|
270
|
+
tooltipLabelRef(element);
|
|
271
|
+
};
|
|
272
|
+
const a11yProps = {};
|
|
273
|
+
if (wantsKeyboard) {
|
|
274
|
+
a11yProps.tabIndex = 0;
|
|
275
|
+
a11yProps.role = "button";
|
|
276
|
+
a11yProps["aria-roledescription"] = "editable text";
|
|
277
|
+
if (ariaLabel) a11yProps["aria-label"] = ariaLabel;
|
|
278
|
+
if (ariaLabelledby) a11yProps["aria-labelledby"] = ariaLabelledby;
|
|
279
|
+
}
|
|
280
|
+
if (isDisabled) a11yProps["aria-disabled"] = true;
|
|
281
|
+
if (isReadOnly) a11yProps["aria-readonly"] = true;
|
|
282
|
+
return /* @__PURE__ */ jsx(InlineInputRoot, {
|
|
283
|
+
ref: handleRootRef,
|
|
284
|
+
qa: qa ?? "InlineInput",
|
|
285
|
+
qaVal,
|
|
286
|
+
mods,
|
|
287
|
+
tokens,
|
|
288
|
+
styles: extractedStyles,
|
|
289
|
+
...mergeProps$1(baseProps, focusWithinProps, focusRingProps, triggerProps ?? {}, {
|
|
290
|
+
onDoubleClick: wantsDblClick ? handleDblClick : void 0,
|
|
291
|
+
onClick: wantsClick ? handleClick : void 0,
|
|
292
|
+
onKeyDown: wantsKeyboard ? handleRootKeyDown : void 0,
|
|
293
|
+
...a11yProps
|
|
294
|
+
}),
|
|
295
|
+
children: isEditing ? /* @__PURE__ */ jsxs(FocusScope, {
|
|
296
|
+
autoFocus: true,
|
|
297
|
+
restoreFocus: false,
|
|
298
|
+
contain: false,
|
|
299
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
300
|
+
ref: measureRef,
|
|
301
|
+
"data-element": "Measure",
|
|
302
|
+
"aria-hidden": "true",
|
|
303
|
+
children: draft || placeholder || " "
|
|
304
|
+
}), /* @__PURE__ */ jsx("input", {
|
|
305
|
+
ref: inputRef,
|
|
306
|
+
"data-element": "Input",
|
|
307
|
+
type: "text",
|
|
308
|
+
value: draft,
|
|
309
|
+
placeholder,
|
|
310
|
+
disabled: isDisabled,
|
|
311
|
+
readOnly: isReadOnly,
|
|
312
|
+
"aria-label": ariaLabel,
|
|
313
|
+
"aria-labelledby": ariaLabelledby,
|
|
314
|
+
onChange: handleInputChange,
|
|
315
|
+
onKeyDown: handleKeyDown
|
|
316
|
+
})]
|
|
317
|
+
}) : /* @__PURE__ */ jsx("span", {
|
|
318
|
+
ref: handleDisplayRef,
|
|
319
|
+
"data-element": "Display",
|
|
320
|
+
children: displayContent
|
|
321
|
+
})
|
|
322
|
+
});
|
|
323
|
+
};
|
|
324
|
+
return renderWithTooltip(renderRoot, tooltipPlacement);
|
|
260
325
|
});
|
|
261
326
|
|
|
262
327
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InlineInput.js","names":["mergeProps"],"sources":["../../../../src/components/content/InlineInput/InlineInput.tsx"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport {\n BaseProps,\n BLOCK_STYLES,\n BlockStyleProps,\n COLOR_STYLES,\n ColorStyleProps,\n filterBaseProps,\n OUTER_STYLES,\n OuterStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FocusScope, useFocusWithin } from 'react-aria';\n\nimport { useEvent } from '../../../_internal/hooks';\nimport { mergeProps } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\n\nimport type { ChangeEvent, KeyboardEvent, MouseEvent, ReactNode } from 'react';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type CubeInlineInputEditTrigger = 'dblclick' | 'click' | 'none';\n\nexport interface CubeInlineInputProps\n extends BaseProps,\n BlockStyleProps,\n OuterStyleProps,\n ColorStyleProps {\n /** Controlled value. When provided, the component is controlled. */\n value?: string;\n /** Initial value for uncontrolled usage. */\n defaultValue?: string;\n /**\n * Fires on commit *only when the value actually changed*. Use this to update\n * external state. Pair with `value` for the controlled pattern.\n */\n onChange?: (value: string) => void;\n\n /** Controlled editing state. When provided, the editing state is controlled. */\n isEditing?: boolean;\n /** Default editing state for uncontrolled usage. */\n defaultIsEditing?: boolean;\n /** Called when editing mode starts or ends. */\n onEditingChange?: (isEditing: boolean) => void;\n\n /**\n * Fires every time the user commits (Enter / submit-on-blur / `ref.stopEditing(true)`),\n * even if the value did not change. Use for side effects like analytics or\n * \"save\" toasts. For state updates, prefer `onChange`.\n *\n * May return a Promise. If the returned Promise **rejects**, the component\n * automatically reverts its optimistic display to the actual `value` prop —\n * this gives async-save flows free rollback on failure (in controlled mode).\n */\n onSubmit?: (value: string) => void | Promise<unknown>;\n /** Called when editing is cancelled (Escape or empty submit when `allowEmpty` is false). */\n onCancel?: () => void;\n\n /** How edit mode is activated from the display element. Default: `'dblclick'`. */\n editTrigger?: CubeInlineInputEditTrigger;\n /** Whether to submit when focus leaves the input. Default: `true`. */\n submitOnBlur?: boolean;\n /** Whether to trim the value on submit. Default: `true`. */\n trimOnSubmit?: boolean;\n /** When false, submitting an empty/whitespace value cancels instead. Default: `false`. */\n allowEmpty?: boolean;\n /** When true, edit mode cannot be entered (programmatically or otherwise). */\n isDisabled?: boolean;\n /** When true, edit mode cannot be entered, but the display reads as enabled. */\n isReadOnly?: boolean;\n\n /** Placeholder text shown in the input when the draft is empty. */\n placeholder?: string;\n /** Custom render for display (non-editing) mode. Receives the currently-displayed value (including optimistic). */\n renderDisplay?: (value: string) => ReactNode;\n /** ARIA label for the input (used when no visible label is associated). */\n 'aria-label'?: string;\n /** ARIA labelledby for the input. */\n 'aria-labelledby'?: string;\n\n /** Convenience prop for styling the `Input` sub-element. Merged into `styles.Input`. */\n inputStyles?: Styles;\n}\n\nexport interface CubeInlineInputRef {\n /** Programmatically enter edit mode. */\n startEditing(): void;\n /** Programmatically exit edit mode. `submit=true` commits, `submit=false` cancels. Defaults to commit. */\n stopEditing(submit?: boolean): void;\n /** Focus the underlying element (input when editing, root span otherwise). */\n focus(): void;\n /** Current committed value (includes optimistic value if a parent hasn't synced yet). */\n getValue(): string;\n}\n\n// =============================================================================\n// Styled element\n// =============================================================================\n\nconst InlineInputRoot = tasty({\n as: 'span',\n styles: {\n display: 'inline-flex',\n verticalAlign: 'baseline',\n position: 'relative',\n color: 'inherit',\n preset: 'inherit',\n cursor: {\n '': 'inherit',\n 'editable & !editing': 'text',\n },\n\n Input: {\n recipe: 'reset input / input-autofill',\n preset: 'inherit',\n color: 'inherit',\n fill: 'transparent',\n width: 'initial $input-width 100%',\n minWidth: '1em',\n '&::placeholder': { recipe: 'input-placeholder' },\n },\n\n Measure: {\n position: 'absolute',\n visibility: 'hidden',\n pointerEvents: 'none',\n whiteSpace: 'pre',\n preset: 'inherit',\n height: 0,\n overflow: 'hidden',\n },\n\n Placeholder: {\n recipe: 'input-placeholder',\n preset: 'inherit',\n },\n },\n});\n\nconst STYLE_PROPS = [...BLOCK_STYLES, ...OUTER_STYLES, ...COLOR_STYLES];\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * Inline editable text. Renders the value as inline content by default and\n * swaps to an auto-sizing text input when entering edit mode.\n *\n * Designed to drop into any text context (tab title, heading, paragraph,\n * table cell) without style customization: typography, color, and font family\n * are all inherited from the parent.\n *\n * Value and `isEditing` can each be controlled or uncontrolled independently.\n * Programmatic entry via the imperative ref (`startEditing`/`stopEditing`)\n * works regardless of `editTrigger`.\n */\nexport const InlineInput = forwardRef<CubeInlineInputRef, CubeInlineInputProps>(\n function InlineInput(allProps, ref) {\n const {\n value: valueProp,\n defaultValue,\n onChange,\n isEditing: isEditingProp,\n defaultIsEditing,\n onEditingChange,\n onSubmit,\n onCancel,\n editTrigger = 'dblclick',\n submitOnBlur = true,\n trimOnSubmit = true,\n allowEmpty = false,\n isDisabled = false,\n isReadOnly = false,\n placeholder,\n renderDisplay,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n qa,\n qaVal,\n styles: stylesProp,\n inputStyles,\n mods: customMods,\n tokens: customTokens,\n ...otherProps\n } = allProps;\n\n const isControlled = valueProp !== undefined;\n\n const inputRef = useRef<HTMLInputElement>(null);\n const measureRef = useRef<HTMLSpanElement>(null);\n const rootRef = useRef<HTMLSpanElement>(null);\n\n const [value, setValue] = useControlledState<string>(\n valueProp as string,\n (defaultValue ?? '') as string,\n onChange,\n );\n\n const [isEditing, setIsEditing] = useControlledState<boolean>(\n isEditingProp as boolean,\n (defaultIsEditing ?? false) as boolean,\n onEditingChange,\n );\n\n // Optimistic value. Holds the just-committed value while we wait for the\n // (potentially async) controlled parent to sync `value`. In uncontrolled\n // mode `value` updates immediately so this stays null after each render.\n const [optimisticValue, setOptimisticValue] = useState<string | null>(null);\n const displayedValue = optimisticValue ?? value;\n\n const [draft, setDraft] = useState<string>(value);\n const [inputWidth, setInputWidth] = useState<number | null>(null);\n\n // Token to invalidate in-flight onSubmit promises if a newer commit /\n // re-entry happens before they settle.\n const submitTokenRef = useRef(0);\n\n // Synchronous mirror of `isEditing`. We need this because cancel/commit\n // call user callbacks (`onCancel`/`onSubmit`) that may synchronously\n // re-focus another element — that causes a synchronous blur on the\n // input which would otherwise re-enter `commit` via `onBlurWithin` (the\n // state update from `setIsEditing(false)` isn't committed yet, so the\n // closure still sees `isEditing === true`).\n const isEditingRef = useRef(isEditing);\n\n isEditingRef.current = isEditing;\n\n // Clear the optimistic value once `value` catches up or changes externally.\n useEffect(() => {\n setOptimisticValue(null);\n }, [value]);\n\n const enterEditing = useEvent(() => {\n if (isDisabled || isReadOnly || isEditing) return;\n // Invalidate any in-flight onSubmit promise — its outcome no longer\n // matters because the user is about to commit a new value anyway.\n submitTokenRef.current += 1;\n isEditingRef.current = true;\n // Start from the actual prop value, not optimistic — gives the user a\n // way to recover if a previous commit was rejected by the parent.\n setOptimisticValue(null);\n setDraft(value);\n setIsEditing(true);\n });\n\n const commit = useEvent((rawValue: string) => {\n // Re-entry guard. `onSubmit`/`onCancel` may synchronously refocus and\n // trigger another blur-driven commit before the state update lands.\n if (!isEditingRef.current) return;\n\n const next = trimOnSubmit ? rawValue.trim() : rawValue;\n\n if (!next && !allowEmpty) {\n isEditingRef.current = false;\n setIsEditing(false);\n onCancel?.();\n\n return;\n }\n\n const token = ++submitTokenRef.current;\n\n if (isControlled) {\n // Show the new value optimistically until the parent re-renders.\n setOptimisticValue(next);\n }\n isEditingRef.current = false;\n setValue(next);\n setIsEditing(false);\n\n const result = onSubmit?.(next);\n // If onSubmit returns a Promise that rejects, the parent is signalling\n // a save failure — revert the optimistic value back to the actual prop.\n // We guard with a token so a slow rejection doesn't clobber a newer\n // commit's optimistic display.\n if (\n result != null &&\n typeof (result as Promise<unknown>).then === 'function'\n ) {\n (result as Promise<unknown>).then(\n () => {},\n () => {\n if (submitTokenRef.current === token && isControlled) {\n setOptimisticValue(null);\n }\n },\n );\n }\n });\n\n const cancel = useEvent(() => {\n if (!isEditingRef.current) return;\n isEditingRef.current = false;\n setIsEditing(false);\n onCancel?.();\n });\n\n // Keep draft in sync with the external value while NOT editing.\n useEffect(() => {\n if (!isEditing) setDraft(value);\n }, [value, isEditing]);\n\n // Select all text synchronously when entering edit mode.\n useLayoutEffect(() => {\n if (!isEditing) return;\n inputRef.current?.select();\n }, [isEditing]);\n\n // Measure the draft so the input width follows the typed glyphs.\n useLayoutEffect(() => {\n if (!isEditing) return;\n const measure = measureRef.current;\n\n if (!measure) return;\n setInputWidth(measure.scrollWidth);\n }, [isEditing, draft, placeholder]);\n\n const handleKeyDown = useEvent((e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n commit(draft);\n\n return;\n }\n\n if (e.key === 'Escape') {\n e.preventDefault();\n cancel();\n\n return;\n }\n\n // Prevent the host (e.g. Tabs) from intercepting text-editing keys.\n if (\n e.key === 'ArrowLeft' ||\n e.key === 'ArrowRight' ||\n e.key === ' ' ||\n e.key === 'Delete' ||\n e.key === 'Backspace'\n ) {\n e.stopPropagation();\n }\n });\n\n const handleInputChange = useEvent((e: ChangeEvent<HTMLInputElement>) => {\n setDraft(e.target.value);\n });\n\n const { focusWithinProps } = useFocusWithin({\n isDisabled: !isEditing,\n onBlurWithin: () => {\n if (!submitOnBlur) return;\n commit(draft);\n },\n });\n\n const handleDblClick = useEvent((e: MouseEvent) => {\n if (editTrigger !== 'dblclick') return;\n e.preventDefault();\n e.stopPropagation();\n enterEditing();\n });\n\n const handleClick = useEvent((e: MouseEvent) => {\n if (editTrigger !== 'click') return;\n e.preventDefault();\n e.stopPropagation();\n enterEditing();\n });\n\n useImperativeHandle(\n ref,\n () => ({\n startEditing: () => enterEditing(),\n stopEditing: (submit = true) => {\n if (!isEditing) return;\n if (submit) commit(draft);\n else cancel();\n },\n focus: () => {\n if (isEditing) inputRef.current?.focus();\n else rootRef.current?.focus();\n },\n getValue: () => displayedValue,\n }),\n [enterEditing, commit, cancel, draft, displayedValue, isEditing],\n );\n\n const isEditable = editTrigger !== 'none' && !isDisabled && !isReadOnly;\n\n const mods = useMemo(\n () => ({\n editing: isEditing,\n editable: isEditable,\n disabled: isDisabled,\n 'read-only': isReadOnly,\n empty: !displayedValue,\n ...customMods,\n }),\n [\n isEditing,\n isEditable,\n isDisabled,\n isReadOnly,\n displayedValue,\n customMods,\n ],\n );\n\n const mergedStyles = useMemo<Styles | undefined>(() => {\n if (!stylesProp && !inputStyles) return undefined;\n if (!inputStyles) return stylesProp;\n const existingInput =\n (stylesProp?.Input as Styles | undefined) ?? undefined;\n\n return {\n ...stylesProp,\n Input: existingInput\n ? { ...existingInput, ...inputStyles }\n : inputStyles,\n };\n }, [stylesProp, inputStyles]);\n\n const extractedStyles = extractStyles(\n otherProps,\n STYLE_PROPS,\n mergedStyles,\n );\n\n const tokens = useMemo(\n () => ({\n ...customTokens,\n '$input-width': inputWidth != null ? `${inputWidth}px` : 'auto',\n }),\n [customTokens, inputWidth],\n );\n\n // In display mode, render the placeholder when the value is empty so the\n // component remains visible / clickable. Consumers using `renderDisplay`\n // take full control and are responsible for handling empty values\n // themselves.\n const displayContent = renderDisplay\n ? renderDisplay(displayedValue)\n : displayedValue ||\n (placeholder ? (\n <span data-element=\"Placeholder\">{placeholder}</span>\n ) : (\n ''\n ));\n\n const baseProps = filterBaseProps(otherProps, { eventProps: true });\n\n return (\n <InlineInputRoot\n ref={rootRef}\n qa={qa ?? 'InlineInput'}\n qaVal={qaVal}\n mods={mods}\n tokens={tokens}\n styles={extractedStyles}\n {...mergeProps(baseProps, focusWithinProps, {\n onDoubleClick: isEditing ? undefined : handleDblClick,\n onClick: isEditing ? undefined : handleClick,\n })}\n >\n {isEditing ? (\n <FocusScope autoFocus restoreFocus={false} contain={false}>\n <span ref={measureRef} data-element=\"Measure\" aria-hidden=\"true\">\n {draft || placeholder || ' '}\n </span>\n <input\n ref={inputRef}\n data-element=\"Input\"\n type=\"text\"\n value={draft}\n placeholder={placeholder}\n disabled={isDisabled}\n readOnly={isReadOnly}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n />\n </FocusScope>\n ) : (\n displayContent\n )}\n </InlineInputRoot>\n );\n },\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"InlineInput.js","names":["mergeProps"],"sources":["../../../../src/components/content/InlineInput/InlineInput.tsx"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport {\n BaseProps,\n BLOCK_STYLES,\n BlockStyleProps,\n COLOR_STYLES,\n ColorStyleProps,\n filterBaseProps,\n OUTER_STYLES,\n OuterStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n FocusScope,\n OverlayProps,\n useFocusRing,\n useFocusWithin,\n} from 'react-aria';\n\nimport { useEvent } from '../../../_internal/hooks';\nimport { mergeProps } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\nimport { AutoTooltipValue, useAutoTooltip } from '../use-auto-tooltip';\n\nimport type {\n ChangeEvent,\n HTMLAttributes,\n KeyboardEvent,\n MouseEvent,\n ReactNode,\n RefObject,\n} from 'react';\n\n// =============================================================================\n// Types\n// =============================================================================\n\nexport type CubeInlineInputEditTrigger = 'dblclick' | 'click' | 'none';\n\nexport interface CubeInlineInputProps\n extends BaseProps,\n BlockStyleProps,\n OuterStyleProps,\n ColorStyleProps {\n /** Controlled value. When provided, the component is controlled. */\n value?: string;\n /** Initial value for uncontrolled usage. */\n defaultValue?: string;\n /**\n * Fires on commit *only when the value actually changed*. Use this to update\n * external state. Pair with `value` for the controlled pattern.\n */\n onChange?: (value: string) => void;\n\n /** Controlled editing state. When provided, the editing state is controlled. */\n isEditing?: boolean;\n /** Default editing state for uncontrolled usage. */\n defaultIsEditing?: boolean;\n /** Called when editing mode starts or ends. */\n onEditingChange?: (isEditing: boolean) => void;\n\n /**\n * Fires every time the user commits (Enter / submit-on-blur / `ref.stopEditing(true)`),\n * even if the value did not change. Use for side effects like analytics or\n * \"save\" toasts. For state updates, prefer `onChange`.\n *\n * May return a Promise. If the returned Promise **rejects**, the component\n * automatically reverts its optimistic display to the actual `value` prop —\n * this gives async-save flows free rollback on failure (in controlled mode).\n */\n onSubmit?: (value: string) => void | Promise<unknown>;\n /** Called when editing is cancelled (Escape or empty submit when `allowEmpty` is false). */\n onCancel?: () => void;\n\n /** How edit mode is activated from the display element. Default: `'dblclick'`. */\n editTrigger?: CubeInlineInputEditTrigger;\n /**\n * When true (default) the display element is keyboard-focusable and\n * responds to `Enter`, `F2` and `Space` by entering edit mode. Set to\n * `false` when a host (e.g. an editable tab inside a button) already\n * routes keyboard activation through `ref.startEditing()` — exposing the\n * display element as a separate tab stop would create a nested keyboard\n * focus inside the host.\n *\n * @default true\n */\n keyboardActivation?: boolean;\n /** Whether to submit when focus leaves the input. Default: `true`. */\n submitOnBlur?: boolean;\n /** Whether to trim the value on submit. Default: `true`. */\n trimOnSubmit?: boolean;\n /** When false, submitting an empty/whitespace value cancels instead. Default: `false`. */\n allowEmpty?: boolean;\n /** When true, edit mode cannot be entered (programmatically or otherwise). */\n isDisabled?: boolean;\n /** When true, edit mode cannot be entered, but the display reads as enabled. */\n isReadOnly?: boolean;\n\n /** Placeholder text shown in the input when the draft is empty. */\n placeholder?: string;\n /** Custom render for display (non-editing) mode. Receives the currently-displayed value (including optimistic). */\n renderDisplay?: (value: string) => ReactNode;\n /** ARIA label for the input (used when no visible label is associated). */\n 'aria-label'?: string;\n /** ARIA labelledby for the input. */\n 'aria-labelledby'?: string;\n\n /**\n * Tooltip behaviour for the display value:\n * - `true` (default): auto-tooltip — show the full value when the text is truncated.\n * - `false`: never show a tooltip.\n * - `string`: always show this tooltip text.\n * - object: full `TooltipProvider` configuration (with optional `auto`).\n *\n * The tooltip is automatically suppressed while editing and when `renderDisplay` is used.\n */\n tooltip?: AutoTooltipValue;\n /** Default tooltip placement. @default 'top' */\n tooltipPlacement?: OverlayProps['placement'];\n\n /** Convenience prop for styling the `Input` sub-element. Merged into `styles.Input`. */\n inputStyles?: Styles;\n}\n\nexport interface CubeInlineInputRef {\n /** Programmatically enter edit mode. */\n startEditing(): void;\n /** Programmatically exit edit mode. `submit=true` commits, `submit=false` cancels. Defaults to commit. */\n stopEditing(submit?: boolean): void;\n /** Focus the underlying element (input when editing, root span otherwise). */\n focus(): void;\n /** Current committed value (includes optimistic value if a parent hasn't synced yet). */\n getValue(): string;\n}\n\n// =============================================================================\n// Styled element\n// =============================================================================\n\nconst InlineInputRoot = tasty({\n as: 'span',\n styles: {\n // `inline-flex` with `alignItems: baseline` is used (instead of\n // `inline-block` + `overflow: hidden`) so the container's baseline comes\n // from the first flex item's content baseline. With `inline-block` +\n // `overflow: hidden`, the CSS spec forces the baseline to the bottom\n // margin edge, which visibly shifts the text upward inside surrounding\n // line boxes (notably inside Tabs' centered `Item.Label`).\n display: 'inline-flex',\n alignItems: 'baseline',\n verticalAlign: 'baseline',\n position: 'relative',\n maxWidth: '100%',\n color: 'inherit',\n preset: 'inherit',\n cursor: {\n '': 'inherit',\n 'editable & !editing': 'text',\n },\n // Keyboard focus ring (only when the display element is keyboard-focusable,\n // which is gated by `keyboardActivation` on the React side via the\n // `focused` mod). Outline doesn't take layout space and respects rounded\n // corners via `outlineOffset`.\n outline: {\n '': '1bw #primary.0',\n focused: '1bw #primary',\n },\n outlineOffset: 1,\n radius: {\n '': 0,\n focused: true,\n },\n transition: 'theme',\n\n // Display flex item: owns the truncation (`overflow: hidden` here is a\n // block-level rule that does *not* alter the parent's baseline, unlike\n // an `inline-block` overflow rule).\n Display: {\n display: 'block',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n maxWidth: '100%',\n preset: 'inherit',\n color: 'inherit',\n },\n\n Input: {\n recipe: 'reset input / input-autofill',\n preset: 'inherit',\n color: 'inherit',\n fill: 'transparent',\n width: 'initial $input-width 100%',\n minWidth: '1em',\n '&::placeholder': { recipe: 'input-placeholder' },\n },\n\n Measure: {\n position: 'absolute',\n visibility: 'hidden',\n pointerEvents: 'none',\n whiteSpace: 'pre',\n preset: 'inherit',\n height: 0,\n overflow: 'hidden',\n },\n\n Placeholder: {\n recipe: 'input-placeholder',\n preset: 'inherit',\n },\n },\n});\n\nconst STYLE_PROPS = [...BLOCK_STYLES, ...OUTER_STYLES, ...COLOR_STYLES];\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * Inline editable text. Renders the value as inline content by default and\n * swaps to an auto-sizing text input when entering edit mode.\n *\n * Designed to drop into any text context (tab title, heading, paragraph,\n * table cell) without style customization: typography, color, and font family\n * are all inherited from the parent.\n *\n * Value and `isEditing` can each be controlled or uncontrolled independently.\n * Programmatic entry via the imperative ref (`startEditing`/`stopEditing`)\n * works regardless of `editTrigger`.\n */\nexport const InlineInput = forwardRef<CubeInlineInputRef, CubeInlineInputProps>(\n function InlineInput(allProps, ref) {\n const {\n value: valueProp,\n defaultValue,\n onChange,\n isEditing: isEditingProp,\n defaultIsEditing,\n onEditingChange,\n onSubmit,\n onCancel,\n editTrigger = 'dblclick',\n keyboardActivation = true,\n submitOnBlur = true,\n trimOnSubmit = true,\n allowEmpty = false,\n isDisabled = false,\n isReadOnly = false,\n placeholder,\n renderDisplay,\n tooltip = true,\n tooltipPlacement = 'top',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n qa,\n qaVal,\n styles: stylesProp,\n inputStyles,\n mods: customMods,\n tokens: customTokens,\n ...otherProps\n } = allProps;\n\n const isControlled = valueProp !== undefined;\n\n const inputRef = useRef<HTMLInputElement>(null);\n const measureRef = useRef<HTMLSpanElement>(null);\n const rootRef = useRef<HTMLSpanElement>(null);\n\n const [value, setValue] = useControlledState<string>(\n valueProp as string,\n (defaultValue ?? '') as string,\n onChange,\n );\n\n const [isEditing, setIsEditing] = useControlledState<boolean>(\n isEditingProp as boolean,\n (defaultIsEditing ?? false) as boolean,\n onEditingChange,\n );\n\n // Optimistic value. Holds the just-committed value while we wait for the\n // (potentially async) controlled parent to sync `value`. In uncontrolled\n // mode `value` updates immediately so this stays null after each render.\n const [optimisticValue, setOptimisticValue] = useState<string | null>(null);\n const displayedValue = optimisticValue ?? value;\n\n const [draft, setDraft] = useState<string>(value);\n const [inputWidth, setInputWidth] = useState<number | null>(null);\n\n // Token to invalidate in-flight onSubmit promises if a newer commit /\n // re-entry happens before they settle.\n const submitTokenRef = useRef(0);\n\n // Synchronous mirror of `isEditing`. We need this because cancel/commit\n // call user callbacks (`onCancel`/`onSubmit`) that may synchronously\n // re-focus another element — that causes a synchronous blur on the\n // input which would otherwise re-enter `commit` via `onBlurWithin` (the\n // state update from `setIsEditing(false)` isn't committed yet, so the\n // closure still sees `isEditing === true`).\n //\n // The ref is kept in sync via `useLayoutEffect` so concurrent renders\n // that get thrown away don't leak a stale value into the next commit.\n const isEditingRef = useRef(isEditing);\n\n useLayoutEffect(() => {\n isEditingRef.current = isEditing;\n }, [isEditing]);\n\n // Clear the optimistic value once `value` catches up or changes externally.\n useEffect(() => {\n setOptimisticValue(null);\n }, [value]);\n\n const enterEditing = useEvent(() => {\n if (isDisabled || isReadOnly || isEditing) return;\n // Invalidate any in-flight onSubmit promise — its outcome no longer\n // matters because the user is about to commit a new value anyway.\n submitTokenRef.current += 1;\n isEditingRef.current = true;\n // Start from the actual prop value, not optimistic — gives the user a\n // way to recover if a previous commit was rejected by the parent.\n setOptimisticValue(null);\n setDraft(value);\n setIsEditing(true);\n });\n\n const commit = useEvent((rawValue: string) => {\n // Re-entry guard. `onSubmit`/`onCancel` may synchronously refocus and\n // trigger another blur-driven commit before the state update lands.\n if (!isEditingRef.current) return;\n\n const next = trimOnSubmit ? rawValue.trim() : rawValue;\n\n if (!next && !allowEmpty) {\n isEditingRef.current = false;\n setIsEditing(false);\n onCancel?.();\n\n return;\n }\n\n const token = ++submitTokenRef.current;\n\n if (isControlled) {\n // Show the new value optimistically until the parent re-renders.\n setOptimisticValue(next);\n }\n isEditingRef.current = false;\n setValue(next);\n setIsEditing(false);\n\n const result = onSubmit?.(next);\n // If onSubmit returns a Promise that rejects, the parent is signalling\n // a save failure — revert the optimistic value back to the actual prop.\n // We guard with a token so a slow rejection doesn't clobber a newer\n // commit's optimistic display.\n if (\n result != null &&\n typeof (result as Promise<unknown>).then === 'function'\n ) {\n (result as Promise<unknown>).then(\n () => {},\n () => {\n if (submitTokenRef.current === token && isControlled) {\n setOptimisticValue(null);\n }\n },\n );\n }\n });\n\n const cancel = useEvent(() => {\n if (!isEditingRef.current) return;\n isEditingRef.current = false;\n setIsEditing(false);\n onCancel?.();\n });\n\n // Keep draft in sync with the external value while NOT editing.\n useEffect(() => {\n if (!isEditing) setDraft(value);\n }, [value, isEditing]);\n\n // Select all text synchronously when entering edit mode.\n useLayoutEffect(() => {\n if (!isEditing) return;\n inputRef.current?.select();\n }, [isEditing]);\n\n // Measure the draft so the input width follows the typed glyphs.\n useLayoutEffect(() => {\n if (!isEditing) return;\n const measure = measureRef.current;\n\n if (!measure) return;\n setInputWidth(measure.scrollWidth);\n }, [isEditing, draft, placeholder]);\n\n const handleKeyDown = useEvent((e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n commit(draft);\n\n return;\n }\n\n if (e.key === 'Escape') {\n e.preventDefault();\n cancel();\n\n return;\n }\n\n // Prevent the host (e.g. Tabs) from intercepting text-editing keys.\n if (\n e.key === 'ArrowLeft' ||\n e.key === 'ArrowRight' ||\n e.key === ' ' ||\n e.key === 'Delete' ||\n e.key === 'Backspace'\n ) {\n e.stopPropagation();\n }\n });\n\n const handleInputChange = useEvent((e: ChangeEvent<HTMLInputElement>) => {\n setDraft(e.target.value);\n });\n\n // Keyboard focus ring on the root. Only fires when the span itself is\n // keyboard-focused (i.e. `wantsKeyboard` made it tabbable) — clicking\n // does not trigger focus-visible, and once edit mode starts focus moves\n // to the inner input, so the ring vanishes naturally.\n const { isFocusVisible, focusProps: focusRingProps } = useFocusRing();\n\n const { focusWithinProps } = useFocusWithin({\n isDisabled: !isEditing,\n onBlurWithin: () => {\n if (!submitOnBlur) return;\n commit(draft);\n },\n });\n\n const handleDblClick = useEvent((e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n enterEditing();\n });\n\n const handleClick = useEvent((e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n enterEditing();\n });\n\n // Keyboard activation from the display element (standalone usage).\n // Hosts that own keyboard handling themselves should pass\n // `keyboardActivation={false}` (see `TabButton` for an example).\n const handleRootKeyDown = useEvent((e: KeyboardEvent<HTMLSpanElement>) => {\n if (e.key === 'Enter' || e.key === 'F2' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n enterEditing();\n }\n });\n\n useImperativeHandle(\n ref,\n () => ({\n startEditing: () => enterEditing(),\n stopEditing: (submit = true) => {\n if (!isEditingRef.current) return;\n if (submit) commit(draft);\n else cancel();\n },\n focus: () => {\n if (isEditingRef.current) inputRef.current?.focus();\n else rootRef.current?.focus();\n },\n getValue: () => displayedValue,\n }),\n [enterEditing, commit, cancel, draft, displayedValue],\n );\n\n const isEditable = editTrigger !== 'none' && !isDisabled && !isReadOnly;\n\n // `focused` is the keyboard-focus ring state. We gate it on `isEditable`\n // and `!isEditing` so the ring never shows on a non-editable display\n // (e.g. inside Tabs with `keyboardActivation={false}` — the span isn't\n // focusable there, but we belt-and-braces it anyway) or while editing\n // (focus is on the inner input).\n const showFocusRing = isFocusVisible && isEditable && !isEditing;\n\n const mods = useMemo(\n () => ({\n editing: isEditing,\n editable: isEditable,\n focused: showFocusRing,\n disabled: isDisabled,\n 'read-only': isReadOnly,\n empty: !displayedValue,\n ...customMods,\n }),\n [\n isEditing,\n isEditable,\n showFocusRing,\n isDisabled,\n isReadOnly,\n displayedValue,\n customMods,\n ],\n );\n\n const mergedStyles = useMemo<Styles | undefined>(() => {\n if (!stylesProp && !inputStyles) return undefined;\n if (!inputStyles) return stylesProp;\n const existingInput =\n (stylesProp?.Input as Styles | undefined) ?? undefined;\n\n return {\n ...stylesProp,\n Input: existingInput\n ? { ...existingInput, ...inputStyles }\n : inputStyles,\n };\n }, [stylesProp, inputStyles]);\n\n const extractedStyles = extractStyles(\n otherProps,\n STYLE_PROPS,\n mergedStyles,\n );\n\n const tokens = useMemo(\n () => ({\n ...customTokens,\n '$input-width': inputWidth != null ? `${inputWidth}px` : 'auto',\n }),\n [customTokens, inputWidth],\n );\n\n // In display mode, render the placeholder when the value is empty so the\n // component remains visible / clickable. Consumers using `renderDisplay`\n // take full control and are responsible for handling empty values\n // themselves.\n const displayContent = renderDisplay\n ? renderDisplay(displayedValue)\n : displayedValue ||\n (placeholder ? (\n <span data-element=\"Placeholder\">{placeholder}</span>\n ) : (\n ''\n ));\n\n const baseProps = filterBaseProps(otherProps, { eventProps: true });\n\n // Overflow detection / auto-tooltip. Suppressed while editing (the input\n // owns the visible text and isn't truncated), and when the consumer\n // provides `renderDisplay` (they own the display story and should attach\n // their own tooltip if needed).\n const { labelRef: tooltipLabelRef, renderWithTooltip } = useAutoTooltip({\n tooltip: isEditing || renderDisplay ? false : tooltip,\n children: displayedValue,\n });\n\n // Wire pointer/keyboard activators only when relevant. Hosts that drive\n // editing through `ref.startEditing()` keep all of these `undefined` so\n // they don't intercept their own keyboard / focus story.\n const wantsClick = !isEditing && isEditable && editTrigger === 'click';\n const wantsDblClick =\n !isEditing && isEditable && editTrigger === 'dblclick';\n const wantsKeyboard = !isEditing && isEditable && keyboardActivation;\n\n const renderRoot = (\n triggerProps?: HTMLAttributes<HTMLElement>,\n tooltipRef?: RefObject<HTMLElement>,\n ) => {\n const handleRootRef = (element: HTMLSpanElement | null) => {\n rootRef.current = element;\n if (tooltipRef) {\n (tooltipRef as { current: HTMLElement | null }).current = element;\n }\n };\n\n // Overflow detection has to look at the truncating element, which is now\n // the inner `Display` (the root is `inline-flex` and doesn't clip). The\n // tooltip still anchors to the root via `tooltipRef` above.\n const handleDisplayRef = (element: HTMLSpanElement | null) => {\n tooltipLabelRef(element);\n };\n\n const a11yProps: HTMLAttributes<HTMLElement> = {};\n\n if (wantsKeyboard) {\n a11yProps.tabIndex = 0;\n a11yProps.role = 'button';\n a11yProps['aria-roledescription'] = 'editable text';\n if (ariaLabel) a11yProps['aria-label'] = ariaLabel;\n if (ariaLabelledby) a11yProps['aria-labelledby'] = ariaLabelledby;\n }\n\n if (isDisabled) a11yProps['aria-disabled'] = true;\n if (isReadOnly) a11yProps['aria-readonly'] = true;\n\n return (\n <InlineInputRoot\n ref={handleRootRef}\n qa={qa ?? 'InlineInput'}\n qaVal={qaVal}\n mods={mods}\n tokens={tokens}\n styles={extractedStyles}\n {...mergeProps(\n baseProps,\n focusWithinProps,\n // Always attach focusRingProps so the hook sees the blur event\n // when focus moves into the inner input on edit-mode entry. If\n // we only attached them while `wantsKeyboard` is true, the hook\n // would miss the blur (since `wantsKeyboard` flips to false the\n // moment editing starts), leaving `isFocused` stale and the\n // ring stuck on after editing ends. `useFocusRing` filters\n // bubbled focus from descendants internally (`target ===\n // currentTarget`), so spreading these on a non-focusable span\n // is a no-op.\n focusRingProps,\n triggerProps ?? {},\n {\n onDoubleClick: wantsDblClick ? handleDblClick : undefined,\n onClick: wantsClick ? handleClick : undefined,\n onKeyDown: wantsKeyboard ? handleRootKeyDown : undefined,\n ...a11yProps,\n },\n )}\n >\n {isEditing ? (\n <FocusScope autoFocus restoreFocus={false} contain={false}>\n <span ref={measureRef} data-element=\"Measure\" aria-hidden=\"true\">\n {draft || placeholder || ' '}\n </span>\n <input\n ref={inputRef}\n data-element=\"Input\"\n type=\"text\"\n value={draft}\n placeholder={placeholder}\n disabled={isDisabled}\n readOnly={isReadOnly}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n />\n </FocusScope>\n ) : (\n <span ref={handleDisplayRef} data-element=\"Display\">\n {displayContent}\n </span>\n )}\n </InlineInputRoot>\n );\n };\n\n return renderWithTooltip(renderRoot, tooltipPlacement);\n },\n);\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { mergeProps } from "../../../utils/react/mergeProps.js";
|
|
3
3
|
import { resolveIcon } from "../../../utils/react/resolveIcon.js";
|
|
4
4
|
import { highlightText } from "../highlightText.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { mergeProps } from "../../../utils/react/mergeProps.js";
|
|
3
3
|
import { TooltipProvider } from "../../overlays/Tooltip/TooltipProvider.js";
|
|
4
4
|
import { DANGER_CLEAR_STYLES, DANGER_NEUTRAL_STYLES, DANGER_PRIMARY_STYLES, DANGER_SECONDARY_STYLES, DEFAULT_CLEAR_STYLES, DEFAULT_NEUTRAL_STYLES, DEFAULT_PRIMARY_STYLES, DEFAULT_SECONDARY_STYLES, ITEM_ACTION_BASE_STYLES, SPECIAL_CLEAR_STYLES, SPECIAL_NEUTRAL_STYLES, SPECIAL_PRIMARY_STYLES, SPECIAL_SECONDARY_STYLES, SUCCESS_CLEAR_STYLES, SUCCESS_NEUTRAL_STYLES, SUCCESS_PRIMARY_STYLES, SUCCESS_SECONDARY_STYLES } from "../../../data/item-themes.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
|
|
3
3
|
import { _Item } from "../Item/Item.js";
|
|
4
4
|
import { forwardRef } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { _Layout } from "./Layout.js";
|
|
3
3
|
import { _LayoutContent } from "./LayoutContent.js";
|
|
4
4
|
import { _LayoutBlock } from "./LayoutBlock.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
|
|
4
4
|
import { Alert } from "../Alert/Alert.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
|
|
4
4
|
import { LayoutContextReset } from "./LayoutContext.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
|
|
4
4
|
import { LayoutContextReset } from "./LayoutContext.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
3
|
import { createContext, useContext, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { _LayoutContent } from "./LayoutContent.js";
|
|
3
3
|
import { tasty } from "@tenphi/tasty";
|
|
4
4
|
import { forwardRef, useMemo } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { useAutoTooltip } from "../use-auto-tooltip.js";
|
|
3
3
|
import { SlashIcon } from "../../../icons/SlashIcon.js";
|
|
4
4
|
import { Button } from "../../actions/Button/Button.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
|
|
4
4
|
import { _Item } from "../Item/Item.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { LayoutActionsContext, LayoutContextReset, LayoutPanelContext, LayoutRefsContext, LayoutStateContext, useLayoutActionsContext, useLayoutPanelContext, useLayoutRefsContext, useLayoutStateContext } from "./LayoutContext.js";
|
|
3
3
|
import { _Layout } from "./Layout.js";
|
|
4
4
|
import { _LayoutContent } from "./LayoutContent.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../utils/styles.js";
|
|
3
3
|
import { _Text } from "./Text.js";
|
|
4
4
|
import { CONTAINER_STYLES, TEXT_STYLES } from "@tenphi/tasty";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { CONTAINER_STYLES, filterBaseProps, keyframes, tasty } from "@tenphi/tasty";
|
|
4
4
|
import { forwardRef } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { RendererPrism, ensureYamlSqlExtensions } from "./prismSetup.js";
|
|
3
3
|
import { CONTAINER_STYLES, tasty } from "@tenphi/tasty";
|
|
4
4
|
import { forwardRef } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { wrapNodeIfPlain } from "../../../utils/react/wrapNodeIfPlain.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { Space } from "../../layout/Space.js";
|
|
3
3
|
import { Grid } from "../../layout/Grid.js";
|
|
4
4
|
import { Flow } from "../../layout/Flow.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { _Item } from "../Item/Item.js";
|
|
3
3
|
import { CloseIcon } from "../../../icons/CloseIcon.js";
|
|
4
4
|
import { tasty } from "@tenphi/tasty";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../utils/styles.js";
|
|
3
3
|
import { useSlotProps } from "../../utils/react/Slots.js";
|
|
4
4
|
import { BASE_STYLES, COLOR_STYLES, TEXT_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { TEXT_PROP_MAP, _Text } from "../Text.js";
|
|
4
4
|
import { highlightText } from "../highlightText.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../utils/styles.js";
|
|
3
3
|
import { useSlotProps } from "../../utils/react/Slots.js";
|
|
4
4
|
import { TEXT_PROP_MAP } from "./Text.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeRefs } from "../../../utils/react/useCombinedRefs.js";
|
|
4
4
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.137.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.137.1 | Cube Dev Team */
|
|
2
2
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
3
3
|
import { mergeRefs } from "../../../utils/react/useCombinedRefs.js";
|
|
4
4
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|