@cube-dev/ui-kit 0.0.0-canary-c210a8c → 0.0.0-canary-60981ef
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.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/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/ComplexLayout.md +469 -0
- package/docs/CreateComponent.md +410 -0
- package/docs/Introduction.md +122 -0
- package/docs/RenderCache.md +172 -0
- package/docs/Result.md +35 -0
- package/docs/SimpleLayout.md +26 -0
- package/docs/Typography.md +38 -0
- package/docs/components/CollectionItem.md +299 -0
- package/docs/components/actions/Banner.md +189 -0
- package/docs/components/actions/Button.md +183 -0
- package/docs/components/actions/ButtonSplit.md +189 -0
- package/docs/components/actions/CommandMenu.md +430 -0
- package/docs/components/actions/ItemButton.md +304 -0
- package/docs/components/actions/Link.md +325 -0
- package/docs/components/actions/Menu.md +509 -0
- package/docs/components/actions/use-anchored-menu.md +211 -0
- package/docs/components/actions/use-context-menu.md +220 -0
- package/docs/components/content/Badge.md +187 -0
- package/docs/components/content/Disclosure.md +177 -0
- package/docs/components/content/HotKeys.md +352 -0
- package/docs/components/content/Item.md +488 -0
- package/docs/components/content/ItemCard.md +125 -0
- package/docs/components/content/Layout.md +866 -0
- package/docs/components/content/Tag.md +156 -0
- package/docs/components/content/TextItem.md +211 -0
- package/docs/components/fields/Checkbox.md +180 -0
- package/docs/components/fields/ComboBox.md +617 -0
- package/docs/components/fields/DatePicker.md +231 -0
- package/docs/components/fields/FileInput.md +197 -0
- package/docs/components/fields/FilterListBox.md +703 -0
- package/docs/components/fields/FilterPicker.md +736 -0
- package/docs/components/fields/HueSlider.md +175 -0
- package/docs/components/fields/ListBox.md +691 -0
- package/docs/components/fields/NumberInput.md +184 -0
- package/docs/components/fields/PasswordInput.md +218 -0
- package/docs/components/fields/Picker.md +884 -0
- package/docs/components/fields/RadioGroup.md +314 -0
- package/docs/components/fields/SearchInput.md +227 -0
- package/docs/components/fields/Select.md +583 -0
- package/docs/components/fields/Slider.md +53 -0
- package/docs/components/fields/Switch.md +174 -0
- package/docs/components/fields/TextArea.md +61 -0
- package/docs/components/fields/TextInput.md +204 -0
- package/docs/components/fields/TextInputMapper.md +34 -0
- package/docs/components/form/Field.md +341 -0
- package/docs/components/form/Form.md +455 -0
- package/docs/components/form/FormInstance.md +319 -0
- package/docs/components/helpers/DisplayTransition.md +259 -0
- package/docs/components/helpers/IconSwitch.md +156 -0
- package/docs/components/navigation/Tabs.md +704 -0
- package/docs/components/overlays/Dialog.md +202 -0
- package/docs/components/overlays/DialogContainer.md +201 -0
- package/docs/components/overlays/DialogForm.md +290 -0
- package/docs/components/overlays/DialogTrigger.md +191 -0
- package/docs/components/overlays/Notifications.md +406 -0
- package/docs/components/overlays/Toast.md +285 -0
- package/docs/components/overlays/Tooltip.md +371 -0
- package/docs/components/overlays/UseDialogContainer.md +603 -0
- package/package.json +1 -1
- package/docs/.gitignore +0 -3
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
# DialogTrigger
|
|
2
|
+
|
|
3
|
+
DialogTrigger serves as a wrapper around a Dialog and its associated trigger, linking the Dialog's open state with the trigger's press state. Additionally, it allows you to customize the type and positioning of the Dialog.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- When you need to open a Dialog in response to user interaction with a trigger element
|
|
8
|
+
- To display contextual information, forms, or workflows that require user attention
|
|
9
|
+
- When you want to control the positioning and behavior of overlay content
|
|
10
|
+
- For creating modal dialogs, popovers, trays, or fullscreen overlays
|
|
11
|
+
|
|
12
|
+
## Component
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
### Properties
|
|
17
|
+
|
|
18
|
+
- **`children`** — The Dialog and its trigger element
|
|
19
|
+
- **`type`** `'modal' | 'popover' | 'tray' | 'fullscreen' | 'fullscreenTakeover' | 'panel'` (default: `modal`) — The type of Dialog that should be rendered
|
|
20
|
+
- **`mobileType`** `'modal' | 'tray' | 'fullscreen' | 'fullscreenTakeover' | 'panel' | 'popover'` — The type of Dialog that should be rendered when on a mobile device
|
|
21
|
+
- **`placement`** `'top' | 'bottom' | 'left' | 'right' | 'top start' | 'top end' | 'bottom start' | 'bottom end' | 'left top' | 'left bottom' | 'right top' | 'right bottom'` — The placement of the dialog relative to its trigger
|
|
22
|
+
- **`hideArrow`** `boolean` (default: `false`) — Whether a popover type Dialog's arrow should be hidden
|
|
23
|
+
- **`mobileViewport`** `number` (default: `700`) — The screen breakpoint for the mobile type
|
|
24
|
+
- **`isDismissable`** `boolean` (default: `true`) — Whether a modal type Dialog should be dismissable
|
|
25
|
+
- **`isKeyboardDismissDisabled`** `boolean` (default: `false`) — Whether pressing the escape key to close the dialog should be disabled
|
|
26
|
+
- **`isOpen`** `boolean` — Whether the dialog is open (controlled)
|
|
27
|
+
- **`defaultOpen`** `boolean` (default: `false`) — Whether the dialog is open by default (uncontrolled)
|
|
28
|
+
- **`offset`** `number` (default: `8`) — The additional offset applied along the main axis
|
|
29
|
+
- **`crossOffset`** `number` (default: `0`) — The additional offset applied along the cross axis
|
|
30
|
+
- **`containerPadding`** `number` (default: `12`) — The padding between the edge of the overlay and the boundary
|
|
31
|
+
- **`shouldFlip`** `boolean` (default: `true`) — Whether the overlay should flip positions when insufficient space
|
|
32
|
+
- **`onOpenChange`** `function` — Callback fired when the dialog open state changes
|
|
33
|
+
- **`onDismiss`** `function` — Callback fired when the dialog is dismissed
|
|
34
|
+
- **`targetRef`** — The ref of the element the Dialog should visually attach itself to
|
|
35
|
+
- **`styles`** — The style map for the overlay
|
|
36
|
+
- **`shouldCloseOnInteractOutside`** — Function to determine if overlay should close on outside interaction
|
|
37
|
+
|
|
38
|
+
### Base Properties
|
|
39
|
+
|
|
40
|
+
Supports [Base properties](../../tasty/tasty.md)
|
|
41
|
+
|
|
42
|
+
### Styling Properties
|
|
43
|
+
|
|
44
|
+
DialogTrigger has no styling capabilities.
|
|
45
|
+
|
|
46
|
+
## Variants
|
|
47
|
+
|
|
48
|
+
### Types
|
|
49
|
+
|
|
50
|
+
- `modal` - Full modal dialog with backdrop (default)
|
|
51
|
+
- `popover` - Positioned relative to trigger element
|
|
52
|
+
- `tray` - Slides up from bottom on mobile
|
|
53
|
+
- `fullscreen` - Takes up entire screen
|
|
54
|
+
- `fullscreenTakeover` - Fullscreen without padding
|
|
55
|
+
- `panel` - Side panel overlay
|
|
56
|
+
|
|
57
|
+
### Mobile Types
|
|
58
|
+
|
|
59
|
+
- `modal` - Mobile modal dialog
|
|
60
|
+
- `tray` - Bottom tray on mobile
|
|
61
|
+
- `fullscreen` - Mobile fullscreen
|
|
62
|
+
- `fullscreenTakeover` - Mobile fullscreen takeover
|
|
63
|
+
- `panel` - Mobile side panel
|
|
64
|
+
- `popover` - Mobile popover (not recommended)
|
|
65
|
+
|
|
66
|
+
## Examples
|
|
67
|
+
|
|
68
|
+
### Basic Modal
|
|
69
|
+
|
|
70
|
+
```jsx
|
|
71
|
+
<DialogTrigger>
|
|
72
|
+
<Button>Open Dialog</Button>
|
|
73
|
+
<Dialog>
|
|
74
|
+
<Header>
|
|
75
|
+
<Title>Dialog Title</Title>
|
|
76
|
+
</Header>
|
|
77
|
+
<Content>
|
|
78
|
+
<Paragraph>Dialog content goes here.</Paragraph>
|
|
79
|
+
</Content>
|
|
80
|
+
</Dialog>
|
|
81
|
+
</DialogTrigger>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Popover Dialog
|
|
85
|
+
|
|
86
|
+
```jsx
|
|
87
|
+
<DialogTrigger type="popover" placement="bottom">
|
|
88
|
+
<Button>Show Popover</Button>
|
|
89
|
+
<Dialog>
|
|
90
|
+
<Content>
|
|
91
|
+
<Paragraph>Popover content</Paragraph>
|
|
92
|
+
</Content>
|
|
93
|
+
</Dialog>
|
|
94
|
+
</DialogTrigger>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### With Close Function
|
|
98
|
+
|
|
99
|
+
```jsx
|
|
100
|
+
<DialogTrigger>
|
|
101
|
+
<Button>Open Dialog</Button>
|
|
102
|
+
{(close) => (
|
|
103
|
+
<Dialog>
|
|
104
|
+
<Header>
|
|
105
|
+
<Title>Confirm Action</Title>
|
|
106
|
+
</Header>
|
|
107
|
+
<Content>
|
|
108
|
+
<Paragraph>Are you sure you want to continue?</Paragraph>
|
|
109
|
+
</Content>
|
|
110
|
+
<Footer>
|
|
111
|
+
<Button onPress={close}>Cancel</Button>
|
|
112
|
+
<Button type="primary" onPress={close}>Confirm</Button>
|
|
113
|
+
</Footer>
|
|
114
|
+
</Dialog>
|
|
115
|
+
)}
|
|
116
|
+
</DialogTrigger>
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Controlled State
|
|
120
|
+
|
|
121
|
+
```jsx
|
|
122
|
+
function ControlledDialog() {
|
|
123
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
124
|
+
|
|
125
|
+
return (
|
|
126
|
+
<DialogTrigger isOpen={isOpen} onOpenChange={setIsOpen}>
|
|
127
|
+
<Button>Open Dialog</Button>
|
|
128
|
+
<Dialog>
|
|
129
|
+
<Content>
|
|
130
|
+
<Paragraph>Controlled dialog content</Paragraph>
|
|
131
|
+
</Content>
|
|
132
|
+
</Dialog>
|
|
133
|
+
</DialogTrigger>
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Accessibility
|
|
139
|
+
|
|
140
|
+
### Keyboard Navigation
|
|
141
|
+
|
|
142
|
+
- `Enter/Space` - Opens the dialog when trigger is focused
|
|
143
|
+
- `Escape` - Closes the dialog (unless disabled)
|
|
144
|
+
- `Tab` - Cycles through focusable elements within the dialog
|
|
145
|
+
|
|
146
|
+
### Screen Reader Support
|
|
147
|
+
|
|
148
|
+
- Dialog announces as "dialog" to screen readers
|
|
149
|
+
- Focus is trapped within the dialog when open
|
|
150
|
+
- Focus returns to trigger element when dialog closes
|
|
151
|
+
- Proper ARIA attributes are applied automatically
|
|
152
|
+
|
|
153
|
+
### ARIA Properties
|
|
154
|
+
|
|
155
|
+
- `aria-haspopup` - Automatically applied to trigger element
|
|
156
|
+
- `aria-expanded` - Indicates dialog open state
|
|
157
|
+
- `aria-labelledby` - Links dialog to its title
|
|
158
|
+
- `aria-describedby` - Links dialog to its description
|
|
159
|
+
|
|
160
|
+
## Best Practices
|
|
161
|
+
|
|
162
|
+
1. **Do**: Provide clear trigger labels
|
|
163
|
+
```jsx
|
|
164
|
+
<DialogTrigger>
|
|
165
|
+
<Button>Edit Profile</Button>
|
|
166
|
+
<Dialog>...</Dialog>
|
|
167
|
+
</DialogTrigger>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
2. **Don't**: Use vague trigger text
|
|
171
|
+
```jsx
|
|
172
|
+
<DialogTrigger>
|
|
173
|
+
<Button>Click</Button>
|
|
174
|
+
<Dialog>...</Dialog>
|
|
175
|
+
</DialogTrigger>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
3. **Focus Management**: Always ensure focus returns properly after dialog closes
|
|
179
|
+
4. **Mobile Considerations**: Use appropriate mobile types for better UX
|
|
180
|
+
5. **Dismissible**: Make modal dialogs dismissible unless absolutely necessary
|
|
181
|
+
|
|
182
|
+
## Suggested Improvements
|
|
183
|
+
|
|
184
|
+
- Enhancement 1: Add animation duration customization options
|
|
185
|
+
- Enhancement 2: Support for multiple dialog instances
|
|
186
|
+
- Enhancement 3: Improved positioning algorithms for complex layouts
|
|
187
|
+
|
|
188
|
+
## Related Components
|
|
189
|
+
|
|
190
|
+
- [Dialog](./Dialog.md) - The content component used within DialogTrigger
|
|
191
|
+
- [Button](../actions/Button.md) - Common trigger element
|
|
@@ -0,0 +1,406 @@
|
|
|
1
|
+
# Notification
|
|
2
|
+
|
|
3
|
+
Action-oriented overlay messages that support custom actions, a dismiss button, timer-based auto-dismiss, and persistent storage. Notifications share the same floating container with [Toast](./Toast.md) (top-center position) via the unified `OverlayProvider`.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- When a message requires user action (e.g., "View logs", "Upgrade", "Accept")
|
|
8
|
+
- When you need persistent notifications that remain in a list after dismissal
|
|
9
|
+
- When server-sourced events need to be stored for later review
|
|
10
|
+
- For simple dismissible messages with no custom actions (only the auto-appended "Dismiss" button)
|
|
11
|
+
- **If no actions are needed and no persistence is required, use [Toast](./Toast.md) instead**
|
|
12
|
+
|
|
13
|
+
## Component
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
### Base Properties
|
|
18
|
+
|
|
19
|
+
Supports [Base properties](../../tasty/tasty.md)
|
|
20
|
+
|
|
21
|
+
### Styling Properties
|
|
22
|
+
|
|
23
|
+
#### styles
|
|
24
|
+
|
|
25
|
+
Customizes the root element of the notification.
|
|
26
|
+
|
|
27
|
+
**Sub-elements:**
|
|
28
|
+
- `Description` - The description text area below the title
|
|
29
|
+
|
|
30
|
+
## Variants
|
|
31
|
+
|
|
32
|
+
### Themes
|
|
33
|
+
|
|
34
|
+
- `success` - Positive outcome (CheckIcon)
|
|
35
|
+
- `danger` - Error or failure (ExclamationIcon)
|
|
36
|
+
- `warning` - Caution or attention needed (WarningIcon)
|
|
37
|
+
- `note` - Informational message (InfoIcon)
|
|
38
|
+
- No theme - Neutral styling with no icon
|
|
39
|
+
|
|
40
|
+
## Examples
|
|
41
|
+
|
|
42
|
+
### Imperative API
|
|
43
|
+
|
|
44
|
+
Use `useNotifications()` to show notifications programmatically. Each hook instance acts as an owner scope — on unmount, all attached visible notifications are dismissed.
|
|
45
|
+
|
|
46
|
+
```jsx
|
|
47
|
+
import { useNotifications, Notification } from '@cube-dev/ui-kit';
|
|
48
|
+
|
|
49
|
+
const { notify, record, dismiss } = useNotifications();
|
|
50
|
+
|
|
51
|
+
const handle = notify({
|
|
52
|
+
id: 'deploy:123',
|
|
53
|
+
theme: 'success',
|
|
54
|
+
title: 'Deployment completed',
|
|
55
|
+
description: 'Version 1.4.2 is live.',
|
|
56
|
+
actions: (
|
|
57
|
+
<>
|
|
58
|
+
<Notification.Action onPress={() => openLogs()}>
|
|
59
|
+
View logs
|
|
60
|
+
</Notification.Action>
|
|
61
|
+
<Notification.Action onPress={() => openDeployment()}>
|
|
62
|
+
Open
|
|
63
|
+
</Notification.Action>
|
|
64
|
+
</>
|
|
65
|
+
),
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// Dismiss programmatically
|
|
69
|
+
handle.dismiss();
|
|
70
|
+
// or
|
|
71
|
+
dismiss('deploy:123');
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Declarative API
|
|
75
|
+
|
|
76
|
+
The `<Notification>` component shows a notification while mounted and removes it on unmount.
|
|
77
|
+
|
|
78
|
+
```jsx
|
|
79
|
+
import { Notification } from '@cube-dev/ui-kit';
|
|
80
|
+
|
|
81
|
+
<Notification
|
|
82
|
+
id="release:new-version"
|
|
83
|
+
theme="warning"
|
|
84
|
+
title="New release available"
|
|
85
|
+
description="2.0.0 can be installed now."
|
|
86
|
+
actions={
|
|
87
|
+
<>
|
|
88
|
+
<Notification.Action onPress={() => upgrade()}>
|
|
89
|
+
Upgrade
|
|
90
|
+
</Notification.Action>
|
|
91
|
+
<Notification.Action isDismiss>Later</Notification.Action>
|
|
92
|
+
</>
|
|
93
|
+
}
|
|
94
|
+
/>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Notification.Action
|
|
98
|
+
|
|
99
|
+
Action buttons inside notifications. Every action auto-dismisses the notification by default (`closeOnPress: true`).
|
|
100
|
+
|
|
101
|
+
| Prop | Type | Default | Description |
|
|
102
|
+
|------|------|---------|-------------|
|
|
103
|
+
| `onPress` | `() => void \| false \| Promise<void \| false>` | — | Called when the action is pressed. Return `false` to cancel the auto-dismiss. |
|
|
104
|
+
| `closeOnPress` | `boolean` | `true` | Auto-dismiss the notification after press |
|
|
105
|
+
| `isDismiss` | `boolean` | `false` | Marks this action as the dismiss button (see below) |
|
|
106
|
+
| `isDisabled` | `boolean` | `false` | Disables the action |
|
|
107
|
+
|
|
108
|
+
#### Cancelling dismiss
|
|
109
|
+
|
|
110
|
+
When `closeOnPress` is `true` (the default), the notification is dismissed after `onPress` completes. To conditionally prevent this — for example, when the user cancels a confirmation dialog — return `false` from `onPress`:
|
|
111
|
+
|
|
112
|
+
```jsx
|
|
113
|
+
<Notification.Action
|
|
114
|
+
onPress={async () => {
|
|
115
|
+
const confirmed = await showConfirmDialog();
|
|
116
|
+
if (!confirmed) {
|
|
117
|
+
return false; // keep the notification visible
|
|
118
|
+
}
|
|
119
|
+
await performAction();
|
|
120
|
+
}}
|
|
121
|
+
>
|
|
122
|
+
Resume
|
|
123
|
+
</Notification.Action>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
This works with both sync and async handlers. Returning `undefined` (the default `void` return) proceeds with dismiss as usual.
|
|
127
|
+
|
|
128
|
+
#### Dismiss behavior
|
|
129
|
+
|
|
130
|
+
By default, a "Dismiss" button is auto-appended to the right of the actions area (when `isDismissable` is `true`). To customize the dismiss label, add `isDismiss` to a `Notification.Action` — the default button is automatically suppressed via context detection (no extra prop needed).
|
|
131
|
+
|
|
132
|
+
When `actions` is omitted, only the default "Dismiss" button is shown.
|
|
133
|
+
|
|
134
|
+
Place the dismiss action **last** so it renders on the right (consistent with the auto-appended position):
|
|
135
|
+
|
|
136
|
+
```jsx
|
|
137
|
+
// Custom dismiss label — "Later" appears on the right.
|
|
138
|
+
// isDismiss auto-suppresses the default "Dismiss" button.
|
|
139
|
+
notify({
|
|
140
|
+
actions: (
|
|
141
|
+
<>
|
|
142
|
+
<Notification.Action onPress={() => alert('View plans')}>
|
|
143
|
+
View plans
|
|
144
|
+
</Notification.Action>
|
|
145
|
+
<Notification.Action isDismiss>Later</Notification.Action>
|
|
146
|
+
</>
|
|
147
|
+
),
|
|
148
|
+
});
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
```jsx
|
|
152
|
+
// No isDismiss action — default "Dismiss" button is auto-appended on the right
|
|
153
|
+
notify({
|
|
154
|
+
actions: (
|
|
155
|
+
<Notification.Action onPress={() => openLogs()}>
|
|
156
|
+
View logs
|
|
157
|
+
</Notification.Action>
|
|
158
|
+
),
|
|
159
|
+
});
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
```jsx
|
|
163
|
+
// No actions at all — only the default "Dismiss" button is shown
|
|
164
|
+
notify({
|
|
165
|
+
theme: 'success',
|
|
166
|
+
title: 'Saved successfully',
|
|
167
|
+
});
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Update by ID
|
|
171
|
+
|
|
172
|
+
Calling `notify()` with the same `id` performs an in-place update (instant content swap). The auto-dismiss timer resets when `title` or `description` changes (string values only).
|
|
173
|
+
|
|
174
|
+
```jsx
|
|
175
|
+
const { notify } = useNotifications();
|
|
176
|
+
|
|
177
|
+
// Initial notification
|
|
178
|
+
notify({
|
|
179
|
+
id: 'sync:workspace-42',
|
|
180
|
+
theme: 'warning',
|
|
181
|
+
title: 'Sync in progress',
|
|
182
|
+
persistent: true,
|
|
183
|
+
duration: null,
|
|
184
|
+
actions: (
|
|
185
|
+
<Notification.Action onPress={() => alert('Details')}>
|
|
186
|
+
Details
|
|
187
|
+
</Notification.Action>
|
|
188
|
+
),
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
// Later: update same id — timer resets because title changed
|
|
192
|
+
notify({
|
|
193
|
+
id: 'sync:workspace-42',
|
|
194
|
+
theme: 'success',
|
|
195
|
+
title: 'Sync complete',
|
|
196
|
+
persistent: true,
|
|
197
|
+
actions: (
|
|
198
|
+
<Notification.Action onPress={() => alert('Open')}>
|
|
199
|
+
Open
|
|
200
|
+
</Notification.Action>
|
|
201
|
+
),
|
|
202
|
+
});
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Persistent Notifications
|
|
206
|
+
|
|
207
|
+
Overlay notifications with `persistent: true` are stored in an in-memory list whenever they leave the overlay — whether by auto-dismiss timeout, user clicking an action, or the dismiss button. The only exception is programmatic cleanup (component unmount / `dismiss()` call), which removes the notification without archiving it.
|
|
208
|
+
|
|
209
|
+
Once a persistent notification has been archived, subsequent calls with the **same `id`** skip the overlay entirely and update the persistent list directly. This prevents the same notification from re-appearing as a popup after the user has already seen it. Removing the item from the persistent list (via `remove()`) permanently suppresses the notification — future calls with that `id` are completely ignored (no overlay, no persistent storage).
|
|
210
|
+
|
|
211
|
+
#### `record()` — Store Directly
|
|
212
|
+
|
|
213
|
+
Use `record()` to write notifications directly to the persistent list without rendering in the overlay. This is a shorthand for `notify({ mode: 'stored', ... })`.
|
|
214
|
+
|
|
215
|
+
The persistent list is **in-memory only** — it does not send data to a server. The intended flow is one-way: the server pushes events to the client, and the client uses `record()` to populate the list. Pass `createdAt` (epoch ms) to preserve the original server timestamp; if omitted it defaults to `Date.now()`.
|
|
216
|
+
|
|
217
|
+
```jsx
|
|
218
|
+
const { notify, record } = useNotifications();
|
|
219
|
+
const { items, count, remove, clear } = usePersistentNotifications();
|
|
220
|
+
|
|
221
|
+
// Overlay notification that persists after timeout
|
|
222
|
+
notify({
|
|
223
|
+
id: 'deploy:1',
|
|
224
|
+
theme: 'success',
|
|
225
|
+
title: 'Deployment completed',
|
|
226
|
+
persistent: true,
|
|
227
|
+
actions: (
|
|
228
|
+
<Notification.Action onPress={() => alert('View')}>
|
|
229
|
+
View
|
|
230
|
+
</Notification.Action>
|
|
231
|
+
),
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
// Stored notification (no overlay, goes directly to list)
|
|
235
|
+
record({
|
|
236
|
+
id: 'server:alert-1',
|
|
237
|
+
theme: 'warning',
|
|
238
|
+
title: 'Server alert',
|
|
239
|
+
createdAt: serverEvent.timestamp, // preserve original server timestamp
|
|
240
|
+
actions: (
|
|
241
|
+
<Notification.Action onPress={() => alert('Details')}>
|
|
242
|
+
View details
|
|
243
|
+
</Notification.Action>
|
|
244
|
+
),
|
|
245
|
+
});
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### PersistentNotificationsList
|
|
249
|
+
|
|
250
|
+
Renders archived notifications with relative timestamps. Automatically marks all items as read after being visible for 2 seconds.
|
|
251
|
+
|
|
252
|
+
Reads items directly from the notification context store.
|
|
253
|
+
|
|
254
|
+
```jsx
|
|
255
|
+
import { PersistentNotificationsList, usePersistentNotifications } from '@cube-dev/ui-kit';
|
|
256
|
+
|
|
257
|
+
const { remove } = usePersistentNotifications();
|
|
258
|
+
|
|
259
|
+
<PersistentNotificationsList
|
|
260
|
+
onDismissItem={(item) => remove(item.id)}
|
|
261
|
+
emptyState="No notifications"
|
|
262
|
+
/>
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Unread Count
|
|
266
|
+
|
|
267
|
+
Use `useNotificationsCount()` to track total and unread persistent notifications. Unread count resets when `PersistentNotificationsList` has been visible for 2 seconds.
|
|
268
|
+
|
|
269
|
+
```jsx
|
|
270
|
+
import { useNotificationsCount } from '@cube-dev/ui-kit';
|
|
271
|
+
|
|
272
|
+
const { total, unread } = useNotificationsCount();
|
|
273
|
+
|
|
274
|
+
<Button>
|
|
275
|
+
Notifications {unread > 0 && `(${unread})`}
|
|
276
|
+
</Button>
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### Stack Cap
|
|
280
|
+
|
|
281
|
+
Maximum 5 notifications are visible at once. When a new notification arrives and the cap is reached, the oldest notification is evicted (dismissed) to make room. This ensures the most recent notifications are always visible. Evicted persistent notifications are moved to the persistent list.
|
|
282
|
+
|
|
283
|
+
## Duration Defaults
|
|
284
|
+
|
|
285
|
+
| Scenario | Default Duration |
|
|
286
|
+
|----------|-----------------|
|
|
287
|
+
| Non-persistent overlay | 3000ms |
|
|
288
|
+
| Persistent overlay | 5000ms |
|
|
289
|
+
| `duration: null` | No auto-dismiss |
|
|
290
|
+
|
|
291
|
+
All timers pause when any item in the container receives hover or focus, ensuring actionable notifications remain reliably clickable.
|
|
292
|
+
|
|
293
|
+
## Toast Collapse Behavior
|
|
294
|
+
|
|
295
|
+
When only toasts are visible in the overlay container (no notifications), hovering over the toast stack collapses all toasts behind the newest one. Moving the mouse away from the collapsed area expands them back. This reduces visual clutter for transient messages while keeping the latest toast visible.
|
|
296
|
+
|
|
297
|
+
Collapse is disabled when notifications are present, since notifications require user interaction.
|
|
298
|
+
|
|
299
|
+
## Accessibility
|
|
300
|
+
|
|
301
|
+
### ARIA Roles and Live Regions
|
|
302
|
+
|
|
303
|
+
- `success`, `note` themes: `role="status"`, `aria-live="polite"`
|
|
304
|
+
- `danger`, `warning` themes: `role="alert"`, `aria-live="assertive"`
|
|
305
|
+
- All live regions use `aria-atomic="true"` for full content announcement on updates
|
|
306
|
+
- `aria-relevant="additions text"` announces new items and text changes
|
|
307
|
+
- `PersistentNotificationsList` uses `role="log"` and `aria-label="Notifications"`
|
|
308
|
+
|
|
309
|
+
### Keyboard Navigation
|
|
310
|
+
|
|
311
|
+
- `Tab` - Moves focus to notification items (notifications are focusable)
|
|
312
|
+
- `Escape` - Dismisses the focused notification
|
|
313
|
+
- Action buttons are keyboard-focusable in tab order (left to right)
|
|
314
|
+
|
|
315
|
+
### Screen Reader Support
|
|
316
|
+
|
|
317
|
+
- Notifications do not steal focus on arrival
|
|
318
|
+
- Screen reader announcement is handled by `aria-live` regions
|
|
319
|
+
|
|
320
|
+
### Timer Behavior
|
|
321
|
+
|
|
322
|
+
- All timers pause when any item in the container receives hover or focus
|
|
323
|
+
- This ensures actionable notifications remain reliably clickable
|
|
324
|
+
|
|
325
|
+
## Best Practices
|
|
326
|
+
|
|
327
|
+
1. **Do**: Use notifications for action-oriented messages
|
|
328
|
+
```jsx
|
|
329
|
+
notify({
|
|
330
|
+
theme: 'success',
|
|
331
|
+
title: 'Deployment completed',
|
|
332
|
+
actions: (
|
|
333
|
+
<Notification.Action onPress={() => viewLogs()}>
|
|
334
|
+
View logs
|
|
335
|
+
</Notification.Action>
|
|
336
|
+
),
|
|
337
|
+
});
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
2. **Don't**: Use notifications for simple messages without actions — use Toast instead
|
|
341
|
+
```jsx
|
|
342
|
+
// Use toast.success('Copied to clipboard') instead
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
3. **Do**: Provide explicit `id` for persistent and stored notifications
|
|
346
|
+
```jsx
|
|
347
|
+
notify({ id: 'deploy:123', persistent: true, ... });
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
4. **Do**: Place the dismiss action last for consistent right-side positioning
|
|
351
|
+
```jsx
|
|
352
|
+
notify({
|
|
353
|
+
actions: (
|
|
354
|
+
<>
|
|
355
|
+
<Notification.Action onPress={() => upgrade()}>Upgrade</Notification.Action>
|
|
356
|
+
<Notification.Action isDismiss>Later</Notification.Action>
|
|
357
|
+
</>
|
|
358
|
+
),
|
|
359
|
+
});
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
5. **Do**: When using `isDismissable: false`, always provide actions — the user needs a way to interact
|
|
363
|
+
```jsx
|
|
364
|
+
// isDismissable: false hides the default "Dismiss" button and Escape key,
|
|
365
|
+
// but actions with closeOnPress (default true) still close the notification.
|
|
366
|
+
notify({
|
|
367
|
+
isDismissable: false,
|
|
368
|
+
duration: null,
|
|
369
|
+
actions: (
|
|
370
|
+
<>
|
|
371
|
+
<Notification.Action onPress={() => accept()}>Accept</Notification.Action>
|
|
372
|
+
<Notification.Action onPress={() => decline()}>Decline</Notification.Action>
|
|
373
|
+
</>
|
|
374
|
+
),
|
|
375
|
+
});
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
6. **Do**: Return `false` from `onPress` to keep the notification when the user cancels a confirmation flow
|
|
379
|
+
```jsx
|
|
380
|
+
<Notification.Action
|
|
381
|
+
onPress={async () => {
|
|
382
|
+
const confirmed = await showConfirmDialog();
|
|
383
|
+
if (!confirmed) return false;
|
|
384
|
+
await performAction();
|
|
385
|
+
}}
|
|
386
|
+
>
|
|
387
|
+
Upgrade
|
|
388
|
+
</Notification.Action>
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
7. **Do**: Use `record()` for server-sourced events that don't need overlay display. Pass `createdAt` to preserve the original timestamp.
|
|
392
|
+
```jsx
|
|
393
|
+
const { record } = useNotifications();
|
|
394
|
+
record({
|
|
395
|
+
id: 'alert:1',
|
|
396
|
+
theme: 'warning',
|
|
397
|
+
title: 'Server alert',
|
|
398
|
+
createdAt: serverEvent.timestamp,
|
|
399
|
+
});
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
## Related Components
|
|
403
|
+
|
|
404
|
+
- [Toast](./Toast.md) - Lightweight transient messages without actions
|
|
405
|
+
- [Item](../content/Item.md) - Base component used for notification rendering
|
|
406
|
+
- ItemAction - Base action component wrapped by Notification.Action
|