altum 0.0.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/CHANGELOG.md +24 -0
- package/LICENSE +21 -0
- package/README.md +53 -0
- package/dist/base/ButtonBase/ButtonBase.js +1 -0
- package/dist/base/ButtonBase/ButtonBase.module.css.js +1 -0
- package/dist/base/ChartBase/ChartBase.js +1 -0
- package/dist/base/ChartBase/ChartBase.module.css.js +1 -0
- package/dist/base/ChartBase/ChartBase.utils.js +1 -0
- package/dist/base/DialogBase/DialogBase.js +1 -0
- package/dist/base/DialogBase/DialogBase.module.css.js +1 -0
- package/dist/base/FieldBase/FieldBase.js +1 -0
- package/dist/base/FieldBase/FieldBase.module.css.js +1 -0
- package/dist/base/ListOptionBase/ListOptionBase.js +1 -0
- package/dist/base/ListOptionBase/ListOptionBase.module.css.js +1 -0
- package/dist/base/MediaRowBase/MediaRowBase.js +1 -0
- package/dist/base/MediaRowBase/MediaRowBase.module.css.js +1 -0
- package/dist/base/ToggleControlBase/ToggleControlBase.js +1 -0
- package/dist/base/ToggleControlBase/ToggleControlBase.module.css.js +1 -0
- package/dist/components/Accordion/Accordion.js +1 -0
- package/dist/components/Accordion/Accordion.module.css.js +1 -0
- package/dist/components/ActionList/ActionList.js +1 -0
- package/dist/components/ActionList/ActionList.module.css.js +1 -0
- package/dist/components/ActionSheetTrigger/ActionSheetTrigger.js +1 -0
- package/dist/components/ActionSheetTrigger/ActionSheetTrigger.module.css.js +1 -0
- package/dist/components/ActionSheetTrigger/actionSheetContext.js +1 -0
- package/dist/components/Alert/Alert.js +1 -0
- package/dist/components/Alert/Alert.module.css.js +1 -0
- package/dist/components/AspectRatio/AspectRatio.js +1 -0
- package/dist/components/AspectRatio/AspectRatio.module.css.js +1 -0
- package/dist/components/Attachment/Attachment.js +1 -0
- package/dist/components/Attachment/Attachment.module.css.js +1 -0
- package/dist/components/Avatar/Avatar.js +1 -0
- package/dist/components/Avatar/Avatar.module.css.js +1 -0
- package/dist/components/Backdrop/Backdrop.js +1 -0
- package/dist/components/Backdrop/Backdrop.module.css.js +1 -0
- package/dist/components/Badge/Badge.js +1 -0
- package/dist/components/Badge/Badge.module.css.js +1 -0
- package/dist/components/BarChart/BarChart.js +1 -0
- package/dist/components/BarChart/BarChart.module.css.js +1 -0
- package/dist/components/Box/Box.js +1 -0
- package/dist/components/Box/Box.module.css.js +1 -0
- package/dist/components/Bubble/Bubble.js +1 -0
- package/dist/components/Bubble/Bubble.module.css.js +1 -0
- package/dist/components/Button/Button.js +1 -0
- package/dist/components/Button/Button.module.css.js +1 -0
- package/dist/components/ButtonGroup/ButtonGroup.js +1 -0
- package/dist/components/ButtonGroup/ButtonGroup.module.css.js +1 -0
- package/dist/components/ButtonIcon/ButtonIcon.js +1 -0
- package/dist/components/ButtonIcon/ButtonIcon.module.css.js +1 -0
- package/dist/components/Calendar/Calendar.context.js +1 -0
- package/dist/components/Calendar/Calendar.js +1 -0
- package/dist/components/Calendar/Calendar.module.css.js +1 -0
- package/dist/components/Calendar/Calendar.slots.js +1 -0
- package/dist/components/Calendar/Calendar.types.js +1 -0
- package/dist/components/Calendar/Calendar.utils.js +1 -0
- package/dist/components/Calendar/Calendar.views.js +1 -0
- package/dist/components/Calendar/calendar.schedule.js +1 -0
- package/dist/components/CalendarBoard/CalendarBoard.EventBar.js +1 -0
- package/dist/components/CalendarBoard/CalendarBoard.EventBar.module.css.js +1 -0
- package/dist/components/CalendarBoard/CalendarBoard.MonthView.js +1 -0
- package/dist/components/CalendarBoard/CalendarBoard.Schedule.js +1 -0
- package/dist/components/CalendarBoard/CalendarBoard.Schedule.module.css.js +1 -0
- package/dist/components/CalendarBoard/CalendarBoard.Schedule.types.js +1 -0
- package/dist/components/CalendarBoard/CalendarBoard.Schedule.utils.js +1 -0
- package/dist/components/CalendarBoard/CalendarBoard.ScheduleView.js +1 -0
- package/dist/components/CalendarBoard/CalendarBoard.TaskChip.js +1 -0
- package/dist/components/CalendarBoard/CalendarBoard.TimedEvent.js +1 -0
- package/dist/components/CalendarBoard/CalendarBoard.TimedEvent.module.css.js +1 -0
- package/dist/components/CalendarBoard/CalendarBoard.YearView.js +1 -0
- package/dist/components/CalendarBoard/CalendarBoard.chrome.js +1 -0
- package/dist/components/CalendarBoard/CalendarBoard.context.js +1 -0
- package/dist/components/CalendarBoard/CalendarBoard.js +1 -0
- package/dist/components/CalendarBoard/CalendarBoard.module.css.js +1 -0
- package/dist/components/CalendarBoard/CalendarBoard.utils.js +1 -0
- package/dist/components/CalendarBoard/CalendarBoard.views.js +1 -0
- package/dist/components/CalendarBoard/calendarBoardHoverStore.js +1 -0
- package/dist/components/Card/Card.js +1 -0
- package/dist/components/Card/Card.module.css.js +1 -0
- package/dist/components/Checkbox/Checkbox.js +1 -0
- package/dist/components/Chip/Chip.js +1 -0
- package/dist/components/Chip/Chip.module.css.js +1 -0
- package/dist/components/Collapse/Collapse.js +1 -0
- package/dist/components/Collapse/Collapse.module.css.js +1 -0
- package/dist/components/ColorSwatchGroup/ColorSwatchGroup.js +1 -0
- package/dist/components/ColorSwatchGroup/ColorSwatchGroup.module.css.js +1 -0
- package/dist/components/CommandPalette/CommandPalette.js +1 -0
- package/dist/components/CommandPalette/CommandPalette.module.css.js +1 -0
- package/dist/components/ConfirmDialog/ConfirmDialog.js +1 -0
- package/dist/components/ConfirmDialog/ConfirmDialog.module.css.js +1 -0
- package/dist/components/Container/Container.js +1 -0
- package/dist/components/Container/Container.module.css.js +1 -0
- package/dist/components/ContextMenu/ContextMenu.js +1 -0
- package/dist/components/ContextMenu/ContextMenu.module.css.js +1 -0
- package/dist/components/CustomSelect/CustomSelect.Filter.js +1 -0
- package/dist/components/CustomSelect/CustomSelect.List.js +1 -0
- package/dist/components/CustomSelect/CustomSelect.Shell.js +1 -0
- package/dist/components/CustomSelect/CustomSelect.Shell.module.css.js +1 -0
- package/dist/components/CustomSelect/CustomSelect.context.js +1 -0
- package/dist/components/CustomSelect/CustomSelect.js +1 -0
- package/dist/components/CustomSelect/CustomSelect.module.css.js +1 -0
- package/dist/components/CustomSelect/useCustomSelectComboboxKeyboard.js +1 -0
- package/dist/components/DatePicker/DatePicker.js +1 -0
- package/dist/components/DatePicker/DatePicker.utils.js +1 -0
- package/dist/components/DateRangePicker/DateRangePicker.js +1 -0
- package/dist/components/DateRangePicker/DateRangePicker.module.css.js +1 -0
- package/dist/components/DayStripCalendar/DayStripCalendar.js +1 -0
- package/dist/components/DayStripCalendar/DayStripCalendar.module.css.js +1 -0
- package/dist/components/DescriptionList/DescriptionList.js +1 -0
- package/dist/components/DescriptionList/DescriptionList.module.css.js +1 -0
- package/dist/components/DonutChart/DonutChart.js +1 -0
- package/dist/components/DonutChart/DonutChart.module.css.js +1 -0
- package/dist/components/Dropdown/Dropdown.js +1 -0
- package/dist/components/Dropdown/Dropdown.module.css.js +1 -0
- package/dist/components/Dropdown/DropdownMobileSheet.js +1 -0
- package/dist/components/DropdownMenu/DropdownMenu.js +1 -0
- package/dist/components/EmptyState/EmptyState.js +1 -0
- package/dist/components/EmptyState/EmptyState.module.css.js +1 -0
- package/dist/components/FieldLabel/FieldLabel.js +1 -0
- package/dist/components/FieldLabel/FieldLabel.module.css.js +1 -0
- package/dist/components/Fieldset/Fieldset.js +1 -0
- package/dist/components/Fieldset/Fieldset.module.css.js +1 -0
- package/dist/components/FileList/FileList.js +1 -0
- package/dist/components/FileList/FileList.module.css.js +1 -0
- package/dist/components/FocusTrap/FocusTrap.js +1 -0
- package/dist/components/FormMessage/FormMessage.js +1 -0
- package/dist/components/FormMessage/FormMessage.module.css.js +1 -0
- package/dist/components/GrabHandle/GrabHandle.js +1 -0
- package/dist/components/GrabHandle/GrabHandle.module.css.js +1 -0
- package/dist/components/Grid/Grid.js +1 -0
- package/dist/components/Grid/Grid.module.css.js +1 -0
- package/dist/components/Grid/Grid.utils.js +1 -0
- package/dist/components/ImageCrop/ImageCrop.js +1 -0
- package/dist/components/ImageCrop/ImageCrop.module.css.js +1 -0
- package/dist/components/ImageCrop/ImageCrop.utils.js +1 -0
- package/dist/components/ImageGallery/ImageGallery.js +1 -0
- package/dist/components/ImageGallery/ImageGallery.module.css.js +1 -0
- package/dist/components/ImageLightbox/ImageLightbox.js +1 -0
- package/dist/components/ImageLightbox/ImageLightbox.module.css.js +1 -0
- package/dist/components/Item/Item.js +1 -0
- package/dist/components/Item/Item.module.css.js +1 -0
- package/dist/components/Kbd/Kbd.js +1 -0
- package/dist/components/Kbd/Kbd.module.css.js +1 -0
- package/dist/components/Layout/ControlRow.js +1 -0
- package/dist/components/Layout/Inline.js +1 -0
- package/dist/components/Layout/Layout.js +1 -0
- package/dist/components/Layout/Layout.module.css.js +1 -0
- package/dist/components/Layout/Layout.types.js +1 -0
- package/dist/components/Layout/LayoutItem.js +1 -0
- package/dist/components/Layout/Split.js +1 -0
- package/dist/components/Layout/Stack.js +1 -0
- package/dist/components/Layout/flexPrimitives.module.css.js +1 -0
- package/dist/components/Layout/layoutClasses.js +1 -0
- package/dist/components/LineChart/LineChart.js +1 -0
- package/dist/components/LineChart/LineChart.module.css.js +1 -0
- package/dist/components/Link/Link.js +1 -0
- package/dist/components/Link/Link.module.css.js +1 -0
- package/dist/components/Listbox/Listbox.js +1 -0
- package/dist/components/Listbox/Listbox.module.css.js +1 -0
- package/dist/components/LocaleProvider/LocaleProvider.js +1 -0
- package/dist/components/Marker/Marker.js +1 -0
- package/dist/components/Marker/Marker.module.css.js +1 -0
- package/dist/components/MaskedField/MaskedField.js +1 -0
- package/dist/components/MaskedField/MaskedField.module.css.js +1 -0
- package/dist/components/MaskedField/MaskedField.utils.js +1 -0
- package/dist/components/Media/Media.js +1 -0
- package/dist/components/Media/Media.module.css.js +1 -0
- package/dist/components/Modal/Modal.js +1 -0
- package/dist/components/Modal/Modal.module.css.js +1 -0
- package/dist/components/Notification/Notification.js +1 -0
- package/dist/components/Notification/Notification.module.css.js +1 -0
- package/dist/components/Notification/toast.js +1 -0
- package/dist/components/NumberField/NumberField.js +1 -0
- package/dist/components/NumberField/NumberField.module.css.js +1 -0
- package/dist/components/OverflowActions/OverflowActions.js +1 -0
- package/dist/components/OverflowActions/OverflowActions.module.css.js +1 -0
- package/dist/components/OverflowGroup/OverflowGroup.js +1 -0
- package/dist/components/OverflowGroup/OverflowGroup.module.css.js +1 -0
- package/dist/components/Overlay/Overlay.Dismiss.js +1 -0
- package/dist/components/Overlay/Overlay.Focus.js +1 -0
- package/dist/components/Overlay/Overlay.Positioner.js +1 -0
- package/dist/components/Overlay/Overlay.Root.js +1 -0
- package/dist/components/Overlay/Overlay.js +1 -0
- package/dist/components/Overlay/Overlay.module.css.js +1 -0
- package/dist/components/Overlay/Overlay.types.js +1 -0
- package/dist/components/Pagination/Pagination.js +1 -0
- package/dist/components/Pagination/Pagination.module.css.js +1 -0
- package/dist/components/PasswordField/PasswordField.js +1 -0
- package/dist/components/PasswordField/PasswordField.module.css.js +1 -0
- package/dist/components/PinInput/PinInput.js +1 -0
- package/dist/components/PinInput/PinInput.module.css.js +1 -0
- package/dist/components/Popover/Popover.js +1 -0
- package/dist/components/Popover/Popover.module.css.js +1 -0
- package/dist/components/Progress/Progress.js +1 -0
- package/dist/components/Progress/Progress.module.css.js +1 -0
- package/dist/components/PullToRefresh/PullToRefresh.js +1 -0
- package/dist/components/PullToRefresh/PullToRefresh.module.css.js +1 -0
- package/dist/components/Radio/Radio.js +1 -0
- package/dist/components/Rating/Rating.js +1 -0
- package/dist/components/Rating/Rating.module.css.js +1 -0
- package/dist/components/RelativeTime/RelativeTime.js +1 -0
- package/dist/components/SafeArea/SafeArea.js +1 -0
- package/dist/components/SafeArea/SafeArea.module.css.js +1 -0
- package/dist/components/ScrollArea/ScrollArea.js +1 -0
- package/dist/components/ScrollArea/ScrollArea.module.css.js +1 -0
- package/dist/components/SearchField/SearchField.js +1 -0
- package/dist/components/SearchField/SearchField.module.css.js +1 -0
- package/dist/components/SegmentedControl/SegmentedControl.js +1 -0
- package/dist/components/SegmentedControl/SegmentedControl.module.css.js +1 -0
- package/dist/components/Select/Select.js +1 -0
- package/dist/components/Select/Select.module.css.js +1 -0
- package/dist/components/SelectionGroup/SelectionGroup.js +1 -0
- package/dist/components/SelectionGroup/SelectionGroup.module.css.js +1 -0
- package/dist/components/Separator/Separator.js +1 -0
- package/dist/components/Separator/Separator.module.css.js +1 -0
- package/dist/components/Sheet/Sheet.js +1 -0
- package/dist/components/Sheet/Sheet.module.css.js +1 -0
- package/dist/components/Sidebar/Sidebar.js +1 -0
- package/dist/components/Sidebar/Sidebar.module.css.js +1 -0
- package/dist/components/Skeleton/Skeleton.js +1 -0
- package/dist/components/Skeleton/Skeleton.module.css.js +1 -0
- package/dist/components/SkipLink/SkipLink.js +1 -0
- package/dist/components/SkipLink/SkipLink.module.css.js +1 -0
- package/dist/components/Slider/Slider.js +1 -0
- package/dist/components/Slider/Slider.module.css.js +1 -0
- package/dist/components/SortableList/SortableList.js +1 -0
- package/dist/components/SortableList/SortableList.module.css.js +1 -0
- package/dist/components/SortableList/SortableList.types.js +1 -0
- package/dist/components/SortableList/useSortableListDnD.js +1 -0
- package/dist/components/Spinner/Spinner.js +1 -0
- package/dist/components/Spinner/Spinner.module.css.js +1 -0
- package/dist/components/StatBadge/StatBadge.js +1 -0
- package/dist/components/StatBadge/StatBadge.module.css.js +1 -0
- package/dist/components/Steps/Steps.js +1 -0
- package/dist/components/Steps/Steps.module.css.js +1 -0
- package/dist/components/SuggestField/SuggestField.js +1 -0
- package/dist/components/SuggestField/SuggestField.module.css.js +1 -0
- package/dist/components/SwipeToAction/SwipeActionButtons.js +1 -0
- package/dist/components/SwipeToAction/SwipeToAction.js +1 -0
- package/dist/components/SwipeToAction/SwipeToAction.module.css.js +1 -0
- package/dist/components/SwipeToAction/SwipeToAction.utils.js +1 -0
- package/dist/components/Switch/Switch.js +1 -0
- package/dist/components/Switch/Switch.module.css.js +1 -0
- package/dist/components/Table/Table.js +1 -0
- package/dist/components/Table/Table.module.css.js +1 -0
- package/dist/components/Table/Table.slots.js +1 -0
- package/dist/components/Table/TableContext.js +1 -0
- package/dist/components/Table/TableRow.js +1 -0
- package/dist/components/Table/TableRowActions.js +1 -0
- package/dist/components/Table/TableView.js +1 -0
- package/dist/components/Tabs/Tabs.js +1 -0
- package/dist/components/Tabs/Tabs.module.css.js +1 -0
- package/dist/components/Text/Text.js +1 -0
- package/dist/components/Text/Text.module.css.js +1 -0
- package/dist/components/TextField/TextField.js +1 -0
- package/dist/components/TextField/TextField.module.css.js +1 -0
- package/dist/components/TextareaField/TextareaField.js +1 -0
- package/dist/components/TextareaField/TextareaField.module.css.js +1 -0
- package/dist/components/ThemeProvider/ThemeProvider.js +1 -0
- package/dist/components/ThemeProvider/ThemeProvider.module.css.js +1 -0
- package/dist/components/TimePicker/TimePicker.js +1 -0
- package/dist/components/TimePicker/TimePicker.module.css.js +1 -0
- package/dist/components/Timeline/Timeline.js +1 -0
- package/dist/components/Timeline/Timeline.module.css.js +1 -0
- package/dist/components/Title/Title.js +1 -0
- package/dist/components/Title/Title.module.css.js +1 -0
- package/dist/components/Tooltip/Tooltip.js +1 -0
- package/dist/components/Tooltip/Tooltip.module.css.js +1 -0
- package/dist/components/UploadZone/UploadZone.js +1 -0
- package/dist/components/UploadZone/UploadZone.module.css.js +1 -0
- package/dist/components/VirtualList/VirtualList.js +1 -0
- package/dist/components/VirtualList/VirtualList.module.css.js +1 -0
- package/dist/components/VirtualList/VirtualList.utils.js +1 -0
- package/dist/components/VirtualList/VirtualListInner.js +1 -0
- package/dist/components/VirtualList/VirtualListItemCell.js +1 -0
- package/dist/components/VisuallyHidden/VisuallyHidden.js +1 -0
- package/dist/components/VisuallyHidden/VisuallyHidden.module.css.js +1 -0
- package/dist/entries/hooks.js +1 -0
- package/dist/entries/icons.js +1 -0
- package/dist/entries/utils.js +1 -0
- package/dist/hooks/useBodyScrollLock.js +1 -0
- package/dist/hooks/useControlledState.js +1 -0
- package/dist/hooks/useDocumentKeyDown.js +1 -0
- package/dist/hooks/useEscapeKey.js +1 -0
- package/dist/hooks/useFocusRestore.js +1 -0
- package/dist/hooks/useFocusTrap.js +1 -0
- package/dist/hooks/useForm.js +1 -0
- package/dist/hooks/useInertSiblings.js +1 -0
- package/dist/hooks/useLongPress.js +1 -0
- package/dist/hooks/useMediaQuery.js +1 -0
- package/dist/hooks/useOutsideClick.js +1 -0
- package/dist/hooks/useOverlay.js +1 -0
- package/dist/hooks/useOverlayPanel.js +1 -0
- package/dist/hooks/usePrefersReducedMotion.js +1 -0
- package/dist/icons/icons/IconAlarm.js +10 -0
- package/dist/icons/icons/IconAlignCenter.js +3 -0
- package/dist/icons/icons/IconAlignJustify.js +3 -0
- package/dist/icons/icons/IconAlignLeft.js +3 -0
- package/dist/icons/icons/IconAlignRight.js +3 -0
- package/dist/icons/icons/IconAnchor.js +5 -0
- package/dist/icons/icons/IconArchive.js +5 -0
- package/dist/icons/icons/IconArrowDown.js +3 -0
- package/dist/icons/icons/IconArrowLeft.js +3 -0
- package/dist/icons/icons/IconArrowRight.js +3 -0
- package/dist/icons/icons/IconArrowThinDown.js +3 -0
- package/dist/icons/icons/IconArrowThinLeft.js +2 -0
- package/dist/icons/icons/IconArrowThinRight.js +3 -0
- package/dist/icons/icons/IconArrowThinUp.js +2 -0
- package/dist/icons/icons/IconArrowUp.js +3 -0
- package/dist/icons/icons/IconArticle.js +4 -0
- package/dist/icons/icons/IconBackspace.js +3 -0
- package/dist/icons/icons/IconBasket.js +4 -0
- package/dist/icons/icons/IconBasketball.js +7 -0
- package/dist/icons/icons/IconBatteryEmpty.js +2 -0
- package/dist/icons/icons/IconBatteryFull.js +4 -0
- package/dist/icons/icons/IconBatteryLow.js +3 -0
- package/dist/icons/icons/IconBatteryMedium.js +3 -0
- package/dist/icons/icons/IconBell.js +8 -0
- package/dist/icons/icons/IconBlog.js +4 -0
- package/dist/icons/icons/IconBluetooth.js +4 -0
- package/dist/icons/icons/IconBold.js +3 -0
- package/dist/icons/icons/IconBookmark.js +3 -0
- package/dist/icons/icons/IconBookmarks.js +4 -0
- package/dist/icons/icons/IconBox.js +5 -0
- package/dist/icons/icons/IconBriefcase.js +4 -0
- package/dist/icons/icons/IconBrightnessLow.js +10 -0
- package/dist/icons/icons/IconBrightnessMax.js +9 -0
- package/dist/icons/icons/IconBrightnessMedium.js +9 -0
- package/dist/icons/icons/IconBroadcast.js +10 -0
- package/dist/icons/icons/IconBrowser.js +2 -0
- package/dist/icons/icons/IconBrowserUpload.js +5 -0
- package/dist/icons/icons/IconBrush.js +7 -0
- package/dist/icons/icons/IconCalendar.js +4 -0
- package/dist/icons/icons/IconCamcorder.js +3 -0
- package/dist/icons/icons/IconCamera.js +8 -0
- package/dist/icons/icons/IconCard.js +3 -0
- package/dist/icons/icons/IconCart.js +6 -0
- package/dist/icons/icons/IconChecklist.js +6 -0
- package/dist/icons/icons/IconCheckmark.js +2 -0
- package/dist/icons/icons/IconChevronDown.js +2 -0
- package/dist/icons/icons/IconChevronLeft.js +2 -0
- package/dist/icons/icons/IconChevronRight.js +2 -0
- package/dist/icons/icons/IconChevronUp.js +2 -0
- package/dist/icons/icons/IconClipboard.js +4 -0
- package/dist/icons/icons/IconClock.js +3 -0
- package/dist/icons/icons/IconClockwise.js +4 -0
- package/dist/icons/icons/IconCloud.js +6 -0
- package/dist/icons/icons/IconCloudDownload.js +9 -0
- package/dist/icons/icons/IconCloudUpload.js +9 -0
- package/dist/icons/icons/IconCode.js +4 -0
- package/dist/icons/icons/IconContract.js +8 -0
- package/dist/icons/icons/IconContract2.js +4 -0
- package/dist/icons/icons/IconConversation.js +7 -0
- package/dist/icons/icons/IconCopy.js +5 -0
- package/dist/icons/icons/IconCrop.js +6 -0
- package/dist/icons/icons/IconCross.js +3 -0
- package/dist/icons/icons/IconCrosshair.js +4 -0
- package/dist/icons/icons/IconCutlery.js +7 -0
- package/dist/icons/icons/IconDeviceDesktop.js +4 -0
- package/dist/icons/icons/IconDeviceMobile.js +3 -0
- package/dist/icons/icons/IconDeviceTablet.js +3 -0
- package/dist/icons/icons/IconDirection.js +3 -0
- package/dist/icons/icons/IconDisc.js +8 -0
- package/dist/icons/icons/IconDocument.js +5 -0
- package/dist/icons/icons/IconDocumentDelete.js +5 -0
- package/dist/icons/icons/IconDocumentEdit.js +4 -0
- package/dist/icons/icons/IconDocumentNew.js +2 -0
- package/dist/icons/icons/IconDocumentRemove.js +3 -0
- package/dist/icons/icons/IconDot.js +2 -0
- package/dist/icons/icons/IconDots2.js +4 -0
- package/dist/icons/icons/IconDots3.js +5 -0
- package/dist/icons/icons/IconDownload.js +3 -0
- package/dist/icons/icons/IconDragHandle.js +1 -0
- package/dist/icons/icons/IconDuplicate.js +3 -0
- package/dist/icons/icons/IconEnter.js +4 -0
- package/dist/icons/icons/IconExit.js +4 -0
- package/dist/icons/icons/IconExpand.js +8 -0
- package/dist/icons/icons/IconExpand2.js +4 -0
- package/dist/icons/icons/IconExperiment.js +7 -0
- package/dist/icons/icons/IconExport.js +6 -0
- package/dist/icons/icons/IconFeed.js +6 -0
- package/dist/icons/icons/IconFlag.js +6 -0
- package/dist/icons/icons/IconFlashlight.js +4 -0
- package/dist/icons/icons/IconFolder.js +2 -0
- package/dist/icons/icons/IconFolderOpen.js +3 -0
- package/dist/icons/icons/IconForward.js +5 -0
- package/dist/icons/icons/IconGaming.js +14 -0
- package/dist/icons/icons/IconGear.js +21 -0
- package/dist/icons/icons/IconGraduation.js +6 -0
- package/dist/icons/icons/IconGraphBar.js +3 -0
- package/dist/icons/icons/IconGraphLine.js +4 -0
- package/dist/icons/icons/IconGraphPie.js +4 -0
- package/dist/icons/icons/IconHeadset.js +8 -0
- package/dist/icons/icons/IconHeart.js +8 -0
- package/dist/icons/icons/IconHelp.js +12 -0
- package/dist/icons/icons/IconHome.js +4 -0
- package/dist/icons/icons/IconHourglass.js +6 -0
- package/dist/icons/icons/IconInbox.js +6 -0
- package/dist/icons/icons/IconInformation.js +6 -0
- package/dist/icons/icons/IconItalic.js +3 -0
- package/dist/icons/icons/IconJewel.js +4 -0
- package/dist/icons/icons/IconLifting.js +3 -0
- package/dist/icons/icons/IconLightbulb.js +7 -0
- package/dist/icons/icons/IconLink.js +6 -0
- package/dist/icons/icons/IconLinkBroken.js +8 -0
- package/dist/icons/icons/IconList.js +7 -0
- package/dist/icons/icons/IconLoading.js +12 -0
- package/dist/icons/icons/IconLocation.js +5 -0
- package/dist/icons/icons/IconLock.js +2 -0
- package/dist/icons/icons/IconLockOpen.js +3 -0
- package/dist/icons/icons/IconMail.js +9 -0
- package/dist/icons/icons/IconMap.js +8 -0
- package/dist/icons/icons/IconMediaLoop.js +3 -0
- package/dist/icons/icons/IconMediaNext.js +3 -0
- package/dist/icons/icons/IconMediaPause.js +2 -0
- package/dist/icons/icons/IconMediaPlay.js +2 -0
- package/dist/icons/icons/IconMediaPrevious.js +3 -0
- package/dist/icons/icons/IconMediaRecord.js +3 -0
- package/dist/icons/icons/IconMediaShuffle.js +8 -0
- package/dist/icons/icons/IconMediaStop.js +2 -0
- package/dist/icons/icons/IconMedical.js +4 -0
- package/dist/icons/icons/IconMenu.js +3 -0
- package/dist/icons/icons/IconMessage.js +5 -0
- package/dist/icons/icons/IconMeter.js +5 -0
- package/dist/icons/icons/IconMicrophone.js +8 -0
- package/dist/icons/icons/IconMinus.js +1 -0
- package/dist/icons/icons/IconMonitor.js +2 -0
- package/dist/icons/icons/IconMove.js +7 -0
- package/dist/icons/icons/IconMusic.js +8 -0
- package/dist/icons/icons/IconNetwork1.js +6 -0
- package/dist/icons/icons/IconNetwork2.js +6 -0
- package/dist/icons/icons/IconNetwork3.js +8 -0
- package/dist/icons/icons/IconNetwork4.js +7 -0
- package/dist/icons/icons/IconNetwork5.js +4 -0
- package/dist/icons/icons/IconPamphlet.js +6 -0
- package/dist/icons/icons/IconPaperclip.js +5 -0
- package/dist/icons/icons/IconPencil.js +4 -0
- package/dist/icons/icons/IconPhone.js +7 -0
- package/dist/icons/icons/IconPhoto.js +4 -0
- package/dist/icons/icons/IconPhotoGroup.js +6 -0
- package/dist/icons/icons/IconPill.js +8 -0
- package/dist/icons/icons/IconPin.js +8 -0
- package/dist/icons/icons/IconPlus.js +2 -0
- package/dist/icons/icons/IconPower.js +4 -0
- package/dist/icons/icons/IconPreview.js +8 -0
- package/dist/icons/icons/IconPreviewOff.js +8 -0
- package/dist/icons/icons/IconPrint.js +5 -0
- package/dist/icons/icons/IconPulse.js +4 -0
- package/dist/icons/icons/IconQuestion.js +6 -0
- package/dist/icons/icons/IconReply.js +4 -0
- package/dist/icons/icons/IconReplyAll.js +6 -0
- package/dist/icons/icons/IconReturn.js +3 -0
- package/dist/icons/icons/IconRetweet.js +5 -0
- package/dist/icons/icons/IconRocket.js +11 -0
- package/dist/icons/icons/IconScale.js +6 -0
- package/dist/icons/icons/IconSearch.js +6 -0
- package/dist/icons/icons/IconShoppingBag.js +3 -0
- package/dist/icons/icons/IconSkip.js +5 -0
- package/dist/icons/icons/IconStack.js +5 -0
- package/dist/icons/icons/IconStar.js +5 -0
- package/dist/icons/icons/IconStopwatch.js +6 -0
- package/dist/icons/icons/IconStore.js +6 -0
- package/dist/icons/icons/IconSuitcase.js +3 -0
- package/dist/icons/icons/IconSwap.js +5 -0
- package/dist/icons/icons/IconTag.js +4 -0
- package/dist/icons/icons/IconTagDelete.js +5 -0
- package/dist/icons/icons/IconTags.js +7 -0
- package/dist/icons/icons/IconThumbsDown.js +7 -0
- package/dist/icons/icons/IconThumbsUp.js +7 -0
- package/dist/icons/icons/IconTicket.js +8 -0
- package/dist/icons/icons/IconTimeReverse.js +5 -0
- package/dist/icons/icons/IconToDo.js +5 -0
- package/dist/icons/icons/IconToggles.js +9 -0
- package/dist/icons/icons/IconTrash.js +6 -0
- package/dist/icons/icons/IconTrophy.js +7 -0
- package/dist/icons/icons/IconUpload.js +4 -0
- package/dist/icons/icons/IconUser.js +5 -0
- package/dist/icons/icons/IconUserGroup.js +9 -0
- package/dist/icons/icons/IconUserId.js +7 -0
- package/dist/icons/icons/IconVibrate.js +7 -0
- package/dist/icons/icons/IconViewApps.js +14 -0
- package/dist/icons/icons/IconViewList.js +5 -0
- package/dist/icons/icons/IconViewListLarge.js +6 -0
- package/dist/icons/icons/IconViewThumb.js +6 -0
- package/dist/icons/icons/IconVolumeFull.js +8 -0
- package/dist/icons/icons/IconVolumeLow.js +5 -0
- package/dist/icons/icons/IconVolumeMedium.js +6 -0
- package/dist/icons/icons/IconVolumeOff.js +6 -0
- package/dist/icons/icons/IconWallet.js +5 -0
- package/dist/icons/icons/IconWarning.js +4 -0
- package/dist/icons/icons/IconWeb.js +12 -0
- package/dist/icons/icons/IconWeight.js +3 -0
- package/dist/icons/icons/IconWifi.js +7 -0
- package/dist/icons/icons/IconWrong.js +3 -0
- package/dist/icons/icons/IconZoomIn.js +5 -0
- package/dist/icons/icons/IconZoomOut.js +4 -0
- package/dist/index.js +1 -0
- package/dist/locales/en.js +1 -0
- package/dist/locales/localeContext.js +1 -0
- package/dist/locales/ru.js +1 -0
- package/dist/locales/translate.js +1 -0
- package/dist/utils/a11y.js +1 -0
- package/dist/utils/anchorPosition.js +1 -0
- package/dist/utils/arrayMove.js +1 -0
- package/dist/utils/autoHeight.js +1 -0
- package/dist/utils/cn.js +1 -0
- package/dist/utils/composeEvents.js +1 -0
- package/dist/utils/composeRefs.js +1 -0
- package/dist/utils/controlTrack.js +1 -0
- package/dist/utils/controlTrack.module.css.js +1 -0
- package/dist/utils/cssSize.js +1 -0
- package/dist/utils/focus.js +1 -0
- package/dist/utils/formControl.js +1 -0
- package/dist/utils/hoverTriggerGroup.js +1 -0
- package/dist/utils/keyboard.js +1 -0
- package/dist/utils/keyboardShortcut.js +1 -0
- package/dist/utils/listboxOptions.js +1 -0
- package/dist/utils/mergeStyles.js +1 -0
- package/dist/utils/overlayDismiss.js +1 -0
- package/dist/utils/overlayEscapeStack.js +1 -0
- package/dist/utils/overlayPurpose.js +1 -0
- package/dist/utils/overlayStack.js +1 -0
- package/dist/utils/overlayZIndex.js +1 -0
- package/dist/utils/portal.js +1 -0
- package/dist/utils/renderChildren.js +1 -0
- package/dist/utils/slot.js +1 -0
- package/dist/utils/spacing.js +1 -0
- package/dist/utils/transform.js +1 -0
- package/docs/COMPONENTS.md +207 -0
- package/docs/ICONS.md +22 -0
- package/docs/LAYOUT.md +282 -0
- package/docs/THEMING.md +308 -0
- package/package.json +127 -0
- package/types/entries/hooks.d.ts +329 -0
- package/types/entries/icons.d.ts +1621 -0
- package/types/entries/utils.d.ts +519 -0
- package/types/index.d.ts +6083 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function n(t,i){if(!(!t&&!i))return t?i?{...t,...i}:t:i??void 0}export{n as mergeStyles};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
let e=!1;function i(){e=!0}function o(){requestAnimationFrame(()=>{requestAnimationFrame(()=>{e=!1})})}let n=!1;function r(){n||typeof window>"u"||(n=!0,window.addEventListener("blur",i),window.addEventListener("focus",o))}r();function u(){return r(),typeof document<"u"&&!document.hasFocus()?!0:e?(e=!1,!0):!1}function s(t){if(t)return()=>{u()||t()}}export{u as shouldIgnoreOverlayDismiss,s as wrapOverlayDismiss};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
let o=1;const c=[];function s(e){const n=o++;return c.push({id:n,onEscape:e}),n}function p(e,n){const t=c.find(a=>a.id===e);t&&(t.onEscape=n)}function i(e){const n=c.findIndex(t=>t.id===e);n>=0&&c.splice(n,1)}function l(e){const n=c[c.length-1];return n!=null&&n.id===e}export{l as isTopOverlayEscapeHandler,i as popOverlayEscapeHandler,s as pushOverlayEscapeHandler,p as updateOverlayEscapeHandler};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const a={tooltip:"--altum-overlay-offset-tooltip",popover:"--altum-overlay-offset-popover",dropdown:"--altum-overlay-offset-dropdown",modal:"--altum-overlay-offset-modal",sheet:"--altum-overlay-offset-sheet",lightbox:"--altum-overlay-offset-lightbox",notification:"--altum-overlay-offset-notification"},e={tooltip:8,popover:8,dropdown:4,modal:0,sheet:0,lightbox:0,notification:0},r={tooltip:"var(--altum-g-z-tooltip)",popover:"var(--altum-g-z-dropdown)",dropdown:"var(--altum-g-z-dropdown)",modal:"var(--altum-g-z-modal)",sheet:"var(--altum-g-z-overlay)",lightbox:"var(--altum-g-z-lightbox)",notification:"var(--altum-g-z-notification)"};function i(o){if(typeof document>"u")return e[o];const l=getComputedStyle(document.documentElement).getPropertyValue(a[o]).trim(),t=parseFloat(l);return Number.isFinite(t)?t:e[o]}function n(o){return r[o]}export{i as resolveOverlayPurposeSideOffset,n as resolveOverlayPurposeZIndex};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createContext as e,useContext as o}from"react";const r=e(void 0);function a(){return o(r)}const c=r.Provider;function u(t){return typeof t=="number"?String(t):t}function i(t,n="var(--altum-g-z-dropdown)"){if(!(t==null||t===""))return`max(${n}, calc(${u(t)} + 1))`}export{c as OverlayStackProvider,i as elevateAboveOverlayStack,a as useOverlayStackZIndex};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const i={overlay:"var(--altum-g-z-overlay)",modal:"var(--altum-g-z-modal)",dropdown:"var(--altum-g-z-dropdown)",lightbox:"var(--altum-g-z-lightbox)",notification:"var(--altum-g-z-notification)"};function a(n,t){if(t!=null&&t!=="")return t;if(n!=null)return i[n]}const e="var(--altum-g-z-overlay)";function v(n,t,o){const l=a(n,t);if(o==null||o==="")return l;const u=typeof o=="number"?String(o):o,r=l??e;return`max(${typeof r=="number"?String(r):r}, calc(${u} + 1))`}export{e as OVERLAY_Z_INDEX_DEFAULT,a as resolveOverlayZIndex,v as resolveStackedOverlayZIndex};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{createPortal as o}from"react-dom";function e(r,{container:t}={}){return typeof document>"u"?null:o(r,t??document.body)}export{e as createLibraryPortal};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{isValidElement as i,cloneElement as c}from"react";import{composeRefs as f}from"./composeRefs.js";import{cn as d}from"./cn.js";function p({asChild:s,children:e,props:t,contentRef:r}){const l=u=>{typeof r=="function"?r(u):r!=null&&(r.current=u)};if(s){if(!i(e))throw new Error("renderChildren: asChild \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0435\u0434\u0438\u043D\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 React-\u044D\u043B\u0435\u043C\u0435\u043D\u0442");const u=e,n=u.props,o=t;return c(u,{...o,className:d(o.className,n.className),style:{...n.style,...o.style},ref:f(l,n.ref)})}if(typeof e!="function")throw new Error("renderChildren: \u0435\u0441\u043B\u0438 asChild \u0440\u0430\u0432\u0435\u043D false, children \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u0444\u0443\u043D\u043A\u0446\u0438\u0435\u0439 (props, contentRef) => ReactNode");return e(t,l)}export{p as renderChildren};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{forwardRef as c,isValidElement as f,cloneElement as p}from"react";import{composeRefs as d}from"./composeRefs.js";import{cn as y}from"./cn.js";import{mergeStyles as D}from"./mergeStyles.js";function t(u,o,r){const e=o.props,l=typeof u.className=="string"?u.className:void 0,m=typeof e.className=="string"?e.className:void 0,a=u.style,n=e.style,i=e.ref;return{...e,...u,className:y(l,m),style:D(n,a),ref:d(r,i)}}const s=c(function({children:u,...o},r){if(!f(u))throw new Error("Slot: asChild \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0435\u0434\u0438\u043D\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 React-\u044D\u043B\u0435\u043C\u0435\u043D\u0442");return p(u,t(o,u,r))});s.displayName="Slot";export{s as Slot,t as mergeSlotProps};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e={none:"0",xs:"var(--altum-g-space-1)",sm:"var(--altum-g-space-2)",md:"var(--altum-g-space-3)",lg:"var(--altum-g-space-4)",xl:"var(--altum-g-space-6)"};function s(a){return typeof a=="number"?`${a}px`:a in e?e[a]:a}export{e as SPACING_TOKEN_CSS,s as resolveSpacingCss};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function n(r){if(!r||r==="none")return 0;const t=r.match(/translateX\(([-\d.]+)px\)/);if(t)return Number.parseFloat(t[1]??"0");try{const e=typeof DOMMatrix<"u"?DOMMatrix:WebKitCSSMatrix;return new e(r).m41}catch{return 0}}export{n as getTranslateXFromTransform};
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# Компоненты altum-ui
|
|
2
|
+
|
|
3
|
+
Краткий справочник публичного API. Установка и точки входа — [README](../README.md). Токены — [THEMING.md](./THEMING.md). Раскладка — [LAYOUT.md](./LAYOUT.md). Иконки — [ICONS.md](./ICONS.md).
|
|
4
|
+
|
|
5
|
+
**Button / Link `asChild`:** единственный потомок получает стили и обработчики через Slot.
|
|
6
|
+
|
|
7
|
+
Оверлеи: кнопки — в `Modal.Footer` / `Modal.FormFooter` / `Sheet.Footer`, sibling к `Body`, не внутри скролла.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Действия
|
|
12
|
+
|
|
13
|
+
| Компонент | Описание |
|
|
14
|
+
|-----------|----------|
|
|
15
|
+
| **ButtonBase** | Примитив кнопки: `variant` (`primary` / `tinted` / `secondary` / `ghost` / `link`) × `status` (`default` / `danger`), `size`, опциональный `active`. |
|
|
16
|
+
| **Button** | Кнопка на **ButtonBase**: иконки, `loading`, `fullWidth`, `shortcut`. |
|
|
17
|
+
| **ButtonIcon** | Иконка-кнопка на **ButtonBase**; `circle` / `square`; по умолчанию `variant="ghost"`. |
|
|
18
|
+
| **ButtonGroup** | Составная группа (`ButtonGroup` + `ButtonGroup.Item`): высота = `--altum-control-height-*`; `width` `auto` \| `full` (full — колонка формы); `variant` / `status` / `size` / `borderless` на Root; переключение через `active` на Item; циклический клавиатурный фокус. |
|
|
19
|
+
| **SegmentedControl** | Переключатель сегментов (на **SelectionGroup**): `itemFit` `equal` \| `content`; варианты `primary` / `tinted` / `secondary` / `ghost` / `plain`. |
|
|
20
|
+
| **SelectionGroup** | Составной (`Root` / `List` / `Item` / `Panel`): взаимоисключающий выбор + циклический клавиатурный фокус; `value` / `onChange`. База для SegmentedControl и Tabs. |
|
|
21
|
+
| **OverflowActions** | Составной: видимые действия + лишние в `Dropdown` (⋯). `visibleCount`, `display` (`icon` \| `icon-label`), `showOverflowTrigger`, `Item`. |
|
|
22
|
+
| **ActionList** | Клавиатурный список действий на **Listbox** + **SearchField**: группы, сочетание клавиш, `onAction`. |
|
|
23
|
+
| **OverflowGroup** | Лишние потомки по ширине уходят за ⋯ в `Dropdown`. `fit` `content` \| `container`, `gap`, `size`, `maxVisible`. |
|
|
24
|
+
| **ActionSheetTrigger** | Долгое нажатие → OverflowActions; `showOverflowTrigger` (по умолчанию `false`) — на touch+mobile ⋯ скрыт; пульс при срабатывании. |
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Формы
|
|
29
|
+
|
|
30
|
+
| Компонент | Описание |
|
|
31
|
+
|-----------|----------|
|
|
32
|
+
| **FieldBase** | Составная оболочка полей: `Root` / `Label` / `Prefix` / `Control` / `Postfix` / `Button` / `Icon` / `Clear` / `Helper` / `Error`. `Clear` рендерится внутри `Postfix`. |
|
|
33
|
+
| **TextField** | Однострочное поле на **FieldBase**. |
|
|
34
|
+
| **PasswordField** | Пароль на базе TextField: показать/скрыть, опциональный индикатор сложности. |
|
|
35
|
+
| **SearchField** | Обёртка над `TextField` с `labelPlacement="none"` по умолчанию и иконкой поиска (`onClear` от TextField). |
|
|
36
|
+
| **TextareaField** | Многострочное поле на **FieldBase**; авто-рост высоты. |
|
|
37
|
+
| **NumberField** | Числовой ввод на базе `TextField` с кнопками +/-. |
|
|
38
|
+
| **MaskedField** | Поле с маской ввода (телефон, дата и т.п.) на базе `TextField`; опционально `maskAsPlaceholder`. Не переопределяйте `padding` / `font-size` на inner `input`. |
|
|
39
|
+
| **PinInput** | PIN / OTP (2FA, код из SMS). |
|
|
40
|
+
| **Rating** | Оценка звёздами. |
|
|
41
|
+
| **FormMessage** / **FieldError** | Подсказка / ошибка / успех под полем; `variant`; `FieldError` = `variant="error"`. |
|
|
42
|
+
| **Listbox** | Список опций с клавиатурой и группами; база для Select / CustomSelect / SuggestField / ActionList. |
|
|
43
|
+
| **CustomSelect** | Составной примитив select/combobox (`Root` / `Filter` / `List` / `Shell`): Dropdown + Listbox; `groups` + `groupId`; `selectionMode`: `single` \| `multiple` \| `path`; `value` / `onChange`. |
|
|
44
|
+
| **Select** | Составной select на CustomSelect: `Root` / `Trigger` / `Panel` / `Filter` / `List`; `value` / `onChange`; множественный выбор — `Chips` / `Chip`. |
|
|
45
|
+
| **SuggestField** | Автодополнение на TextField; chrome от **`FieldBaseProps`** (`label`, `onClear`, `prefix`, …). |
|
|
46
|
+
| **Checkbox** | `size`, `labelSide`, `indeterminate`, `mode` (`default` \| `task`), `align` (`start` \| `center`; для task по умолчанию `start`), `labelVisibility` (`visible` \| `hidden` + обязательный `aria-label` / `aria-labelledby`). |
|
|
47
|
+
| **Switch** | `size`, `labelSide`. |
|
|
48
|
+
| **CheckboxGroup** | Группа чекбоксов с управляемым `value: string[]`. |
|
|
49
|
+
| **Radio** / **RadioGroup** | Радиокнопка и группа взаимоисключающих опций. |
|
|
50
|
+
| **Slider** | Ползунок: `value: number` или диапазон `value: [from, to]` (два thumb). |
|
|
51
|
+
| **DatePicker** | Выбор даты: MaskedField + календарь; по умолчанию prefix — `FieldBase.Icon` + календарь; chrome от **`FieldBaseProps`**. |
|
|
52
|
+
| **DateRangePicker** | Диапазон дат (`value`/`onChange` как `{ start?, end? }` / `DateRangeValue`); `layout` `single` / `split`. |
|
|
53
|
+
| **TimePicker** / **TimePickerField** | Панель времени + поле с маской `HH:MM`; по умолчанию prefix — `FieldBase.Icon` + часы. |
|
|
54
|
+
| **Calendar** | Составной: `Provider` / `Root` / `Header` / `Title` / `Nav` / `Body`. `selectionMode` `single` \| `range` на Provider. Контекст: `view` / `setView` (`CalendarViewMode`). |
|
|
55
|
+
| **DayStripCalendar** | Горизонтальная полоса дней (недельный chrome): `daysCount`, предыдущий/следующий, `value` / `onChange`, `renderDay`. |
|
|
56
|
+
| **ColorSwatchGroup** | Выбор цвета из набора цветных точек. |
|
|
57
|
+
| **UploadZone** | Зона перетаскивания файлов для загрузки. |
|
|
58
|
+
| **Fieldset** | Составной: `Inner` / `Legend` / `Description` / `Hint` / `Content` / `Footer`; варианты `default` / `card` / `plain`. |
|
|
59
|
+
| **FieldLabel** | Лейбл + контент: `layout` vertical / horizontal; `align` start / center / baseline; `justify` start / between. |
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Оверлеи
|
|
64
|
+
|
|
65
|
+
| Компонент | Описание |
|
|
66
|
+
|-----------|----------|
|
|
67
|
+
| **Overlay** | Примитив позиционирования без chrome: `variant` `modal` / `floating` / `sheet` / `popover` / `dropdown`. Видимость: `open` / `onOpenChange` / `onClose`. Портал + появление/скрытие; z-index / offset — `purpose` (см. [THEMING.md](./THEMING.md)). |
|
|
68
|
+
| **Backdrop** | Затемнение под оверлеем: `variant` `default` / `strong`, `blur`, клик закрывает слой. |
|
|
69
|
+
| **Modal** | Составной на **`Overlay`** (`variant="modal"`): `Header` / `Title` / `Close` / `Body` / `Footer` / **`FormFooter`**. |
|
|
70
|
+
| **ConfirmDialog** | Готовый диалог на **`Modal`**: отмена + подтверждение, `confirmLabel`, `secondaryAction`, `status="danger"`, `onClose`. |
|
|
71
|
+
| **Sheet** | Панель на **`Overlay`** (`variant="sheet"`): `Header` / `Title` / `Close` / `Body` / `Footer`; `mode` / `direction` / `backdrop` / `showHandle`. |
|
|
72
|
+
| **ImageLightbox** | Полноэкранный просмотр на **`Overlay`** (`variant="modal"`, `purpose="lightbox"`, сильный Backdrop); внутри `ImageGallery`. |
|
|
73
|
+
| **Dropdown** | Выпадающая панель на **`Overlay`** (`variant="dropdown"`). Составной: `Dropdown` + `Dropdown.Trigger` + `Dropdown.Content`. Trigger без лишней DOM-обёртки (`asChild` / render-prop). На мобильных — нижний Sheet. |
|
|
74
|
+
| **DropdownMenu** | Готовое меню по клику: Dropdown (`menu`) + ActionList. |
|
|
75
|
+
| **ContextMenu** | Контекстное меню по правому клику (ActionList у курсора). |
|
|
76
|
+
| **Tooltip** | Подсказка на **`Overlay`** (`variant="popover"`, `triggerMode="hover"`); триггер через `renderChildren` (`asChild` / render-prop); `openDelay` / `closeDelay`, wrap, arrow. Мьютекс наведения: не больше одной подсказки одновременно при быстром переходе между триггерами. |
|
|
77
|
+
| **Popover** | Плавающий слой на **`Overlay`** (`variant="popover"`). Составной: `Trigger` (`asChild` / render-prop) + `Content` (`panel`/`tooltip`/`plain`, `arrow`); `trigger` click/hover/manual. |
|
|
78
|
+
| **CommandPalette** | Палитра Cmd+K: явный `ActionList` в `List` (без автосбора команд). |
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Навигация
|
|
83
|
+
|
|
84
|
+
| Компонент | Описание |
|
|
85
|
+
|-----------|----------|
|
|
86
|
+
| **Pagination** | Составной: `Summary` («N–M из K»), `Controls`, `PageSize`; многоточие при многих страницах. |
|
|
87
|
+
| **Sidebar** | Составной: `Root`, `Header`, `Title`, `Collapse`, `Content`, `Group`, `GroupLabel`, `Item`, `Footer`, `MobileTrigger`; `value` / `onChange`; десктопный rail + мобильный Sheet. |
|
|
88
|
+
| **Steps** | Мастер: горизонтальный/вертикальный, статус шага, `onStepClick`. |
|
|
89
|
+
| **Tabs** | Составные вкладки: `Tabs.List` / `Tabs.Trigger` / `Tabs.Panel`; `value` / `defaultValue` / `onChange`; `line` / `pill`, горизонтальные/вертикальные и бейдж на Trigger. |
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Отображение данных
|
|
94
|
+
|
|
95
|
+
| Компонент | Описание |
|
|
96
|
+
|-----------|----------|
|
|
97
|
+
| **Table** | Составной: `Root` / `Toolbar` / `Content` / `Loading` / `Empty` / `Footer` / `RowActions`. `Content` содержит сортировку (клиент/сервер), выбор строк, раскрытие, липкие колонки, `density`, resize и действия строки; loading, empty и пагинация собираются sibling-слотами. |
|
|
98
|
+
| **Timeline** | Вертикальный/горизонтальный, сворачиваемые подробности, `currentId`. |
|
|
99
|
+
| **Card** | `variant` outlined/elevated/ghost; составной `Header` / `Media` / `Body` / `Actions`; `loading`. |
|
|
100
|
+
| **Accordion** | Составной: `Item` / `Trigger` / `Content`; `bordered` (зазор + Box) / `flush` (разделители); `multiple`, отключённый пункт. |
|
|
101
|
+
| **Badge** | `size` sm/md, `position` overlay/standalone, `variant` включая `error`; overlay — `--altum-badge-overhang`. Числовой `label` / `BadgeCounter` ограничивается через `max`; `children` — якорь overlay. |
|
|
102
|
+
| **Avatar** / **AvatarGroup** | Размеры `xs`…`xl`, кольцо статуса, запасная иконка; группа с наложением. |
|
|
103
|
+
| **Chip** | Тег / фильтр: `mode` `chip` \| `tag`, `size`, `active`, `onRemove` / `onClick`. **`ChipGroup`**: `layout` `wrap` \| `scrollX`. |
|
|
104
|
+
| **StatBadge** | Компактный блок статистики: число + подпись; `variant` `default` / `success` / `warning` / `error`; `size` `md` / `sm`. |
|
|
105
|
+
| **EmptyState** | Пустое состояние: иконка (`--altum-color-empty-icon`), заголовок, описание, действие; `size` для вложенных панелей. |
|
|
106
|
+
| **DescriptionList** | Список «ключ — значение» (`stacked` / `inline`, колонки). |
|
|
107
|
+
| **RelativeTime** | Относительное время («2 ч назад»). |
|
|
108
|
+
| **SortableList** | Перетаскивание любой модели `{id}`: `renderItem`, `variant` (`default` / `plain` для Item / SwipeToAction), `handleOnly`, перестановка с клавиатуры. |
|
|
109
|
+
| **CalendarBoard** | Составной: `Provider` / `Root` / `Header` / `Title` / `Nav` / `ViewSwitch` / `Body` / `Month` / `Week` / `Day` / `Year` / `TaskChip`. |
|
|
110
|
+
| **VirtualList** | Виртуализированный список: `items`, `height`, `estimateSize`, `scrollToIndex`, `onRangeChange`. |
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Типографика
|
|
115
|
+
|
|
116
|
+
| Компонент | Описание |
|
|
117
|
+
|-----------|----------|
|
|
118
|
+
| **Title** | Заголовки уровней `h1`–`h4`; цвет `--altum-color-type` (адаптация в `Box`). |
|
|
119
|
+
| **Text** | Текстовый примитив (`--altum-type-*`). Дефолт `as="span"` (inline); для блочного copy — `as="p"` / `as="div"`, иначе соседние `Text` склеятся в одну строку. |
|
|
120
|
+
| **Link** | Ссылка: `variant` `primary`\|`secondary`\|`muted`, `status` `danger`, `size` `xs`–`xl` (или inherit), `--altum-color-link-*`. |
|
|
121
|
+
| **Kbd** / **KbdGroup** | Отображение клавиш и сочетаний клавиатуры. |
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Раскладка
|
|
126
|
+
|
|
127
|
+
| Компонент | Описание |
|
|
128
|
+
|-----------|----------|
|
|
129
|
+
| **Layout** | Панель: скролл на корне; `Header` / `Footer` sticky; алиасы `Stack` / `Inline` / `Split` / `ControlRow` / `Item` / `Grid`. |
|
|
130
|
+
| **Stack** / **Inline** / **Split** / **ControlRow** / **LayoutItem** | Flex-примитивы (вертикаль / чипы / края / ряд контролов / `grow`). |
|
|
131
|
+
| **Grid** / **GridItem** | CSS Grid; `GRID_BREAKPOINTS`. |
|
|
132
|
+
| **Container** / **Page** | Колонка с max-width (`sm`…`xl` / `full`) и оболочка страницы. |
|
|
133
|
+
| **Box** | Поверхность (`outlined` / `elevated` / `floating` / `tinted` / `secondary` / `muted` / `glass` / `overlay` / `ghost` / `plain`). |
|
|
134
|
+
| **Collapse** | Плавное сворачивание по высоте. |
|
|
135
|
+
| **Separator** (`Spacer`) | Разделитель: `orientation` horizontal \| vertical, текст (`children`), отступы `start` / `end`. |
|
|
136
|
+
| **Item** | Составная строка: `Media` / `Content` / `Title` / `Description` / `Actions`; поверхность — `Box`. |
|
|
137
|
+
| **AspectRatio** | Обёртка с `aspect-ratio` (16:9 / 1:1). |
|
|
138
|
+
| **Media** | img/video-превью на базе **AspectRatio**. |
|
|
139
|
+
| **ScrollArea** | Стилизованный скролл (`orientation` y/x/both). |
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Медиа
|
|
144
|
+
|
|
145
|
+
| Компонент | Описание |
|
|
146
|
+
|-----------|----------|
|
|
147
|
+
| **ImageGallery** | Составная галерея: `Root` + `Viewport` / `Image` / `Prev` / `Next` / `Thumbnails` / `Thumb` / `Counter` / `Empty`. |
|
|
148
|
+
| **ImageCrop** | Обрезка изображения. |
|
|
149
|
+
| **FileList** | Список загрузок на **`Attachment`**: progress / retry / remove через `FileList.Item`. |
|
|
150
|
+
| **Attachment** | Карточка файла/изображения (compound `Media` / `Content` / `Title` / `Description` / `Actions`). |
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Графики
|
|
155
|
+
|
|
156
|
+
| Компонент | Описание |
|
|
157
|
+
|-----------|----------|
|
|
158
|
+
| **LineChart** | SVG-линейный график без внешних chart-библиотек. |
|
|
159
|
+
| **BarChart** | Столбчатый SVG-график; `showHoverValue`. |
|
|
160
|
+
| **DonutChart** | Кольцевая диаграмма + легенда; `hoverExpand`. |
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Переписка / AI-лента
|
|
165
|
+
|
|
166
|
+
| Компонент | Описание |
|
|
167
|
+
|-----------|----------|
|
|
168
|
+
| **Bubble** | Пузырь сообщения: `variant` default/outgoing/incoming/system, `align`, `group`, `reactions`, `collapsible`. |
|
|
169
|
+
| **Marker** | Системная заметка / status / bordered row / labeled separator (`Marker.Icon` + `Marker.Content`). |
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Mobile
|
|
174
|
+
|
|
175
|
+
| Компонент | Описание |
|
|
176
|
+
|-----------|----------|
|
|
177
|
+
| **SafeArea** | Отступы под notch / home-indicator (`env(safe-area-inset-*)`). |
|
|
178
|
+
| **PullToRefresh** | Жест «потянуть, чтобы обновить» для контейнера с прокруткой. |
|
|
179
|
+
| **GrabHandle** | Ручка захвата в стиле iOS. |
|
|
180
|
+
| **SwipeToAction** | Сенсорная обёртка: свайп раскрывает действия (iOS). |
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Обратная связь
|
|
185
|
+
|
|
186
|
+
| Компонент | Описание |
|
|
187
|
+
|-----------|----------|
|
|
188
|
+
| **Spinner** | Индикатор загрузки: `spin` \| `dots` \| `pulse` \| `typing`; размеры `sm` \| `md` \| `lg`. |
|
|
189
|
+
| **Skeleton** | Плейсхолдер + пресеты `.Text` / `.Avatar` / `.Card` / `.Table`. |
|
|
190
|
+
| **Progress** / **ProgressCircle** | `size`, `variant` (auto → success при 100%), `showValueText`, indeterminate, labels; у круга `diameter` перекрывает токен размера. |
|
|
191
|
+
| **Alert** | Составной: `Icon`, `Body` (`Title`, `Content`, `Actions`), `Close`; `variant`, `size`, `layout` block/inline. |
|
|
192
|
+
| **Notification** | Составной тост: `Provider`, `Viewport`, `Root`, `Title`, `Description`, `Actions`, `Close`. `variant` `info` / `success` / `warning` / `error`. Императивно: `NotificationProvider` + `notify()`. |
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## Инфраструктура
|
|
197
|
+
|
|
198
|
+
| Экспорт | Описание |
|
|
199
|
+
|---------|----------|
|
|
200
|
+
| **ThemeProvider** | Светлая/тёмная тема. `applyTo` и контролируемая тема — [THEMING.md](./THEMING.md). |
|
|
201
|
+
| **LocaleProvider** | Локаль и переводы встроенных строк (`locale="ru" \| "en"`, опциональный `messages`). |
|
|
202
|
+
| **useLocale** / **useT** | Хук `{ locale, messages, t }` / только `t`. |
|
|
203
|
+
| **ru** / **en** | Встроенные словари. |
|
|
204
|
+
| **useTheme** | Хук `{ theme, setTheme, toggleTheme }` внутри `ThemeProvider`. |
|
|
205
|
+
| **FocusTrap** | Ловушка фокуса для доступности в модальных окнах. |
|
|
206
|
+
| **VisuallyHidden** | Контент только для скринридеров (скрыт визуально). |
|
|
207
|
+
| **SkipLink** | «Перейти к содержимому» (виден при фокусе). |
|
package/docs/ICONS.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Иконки в altum-ui
|
|
2
|
+
|
|
3
|
+
Компоненты принимают иконку как `ReactNode` — свой SVG или элемент из набора библиотеки.
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import {ButtonIcon} from 'altum-ui';
|
|
7
|
+
import {IconSearch} from 'altum-ui/icons';
|
|
8
|
+
|
|
9
|
+
<ButtonIcon aria-label="Поиск" icon={<IconSearch />} />
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Набор **не** входит в главный barrel — только `altum-ui/icons`. Просмотр: Storybook → **Icons**.
|
|
13
|
+
|
|
14
|
+
### Контракт для кастомных SVG
|
|
15
|
+
|
|
16
|
+
| Правило | Значение |
|
|
17
|
+
|---------|----------|
|
|
18
|
+
| Размер | `width` / `height` или проп `size` (16–24 px для кнопок) |
|
|
19
|
+
| Цвет | `fill="currentColor"` |
|
|
20
|
+
| Доступность | На `ButtonIcon` всегда `aria-label` |
|
|
21
|
+
|
|
22
|
+
Продуктовые иконки лучше держать в приложении — так не раздувается бандл, если набор `altum-ui/icons` не нужен целиком.
|
package/docs/LAYOUT.md
ADDED
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
# Layout-компоненты altum-ui
|
|
2
|
+
|
|
3
|
+
Гайд: **что выбрать** и **зачем**, для панели `Layout` и flex-примитивов (`Stack`, `Inline`, `Split`, `ControlRow`, `LayoutItem`).
|
|
4
|
+
|
|
5
|
+
Стили — CSS Modules + токены `--altum-g-space-*` (8pt).
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import {
|
|
9
|
+
Layout,
|
|
10
|
+
Stack,
|
|
11
|
+
Inline,
|
|
12
|
+
Split,
|
|
13
|
+
ControlRow,
|
|
14
|
+
LayoutItem,
|
|
15
|
+
Box,
|
|
16
|
+
Grid,
|
|
17
|
+
Container,
|
|
18
|
+
Page,
|
|
19
|
+
} from 'altum-ui';
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Связанные: **FieldBase** — см. [COMPONENTS.md](./COMPONENTS.md).
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Быстрый выбор
|
|
27
|
+
|
|
28
|
+
| Задача | Компонент |
|
|
29
|
+
|--------|-----------|
|
|
30
|
+
| Панель: шапка + скролл корня + футер (Modal / Sheet / страница) | **Layout** + Header / Content / Footer |
|
|
31
|
+
| Блоки друг под другом (форма, секции) | **Stack** |
|
|
32
|
+
| Чипы / теги / мелкие кнопки в ряд с переносом | **Inline** |
|
|
33
|
+
| Слева заголовок, справа действия | **Split** |
|
|
34
|
+
| Поля + Chip + Button в одной строке фильтров | **ControlRow** |
|
|
35
|
+
| Одному ребёнку — `flex: 1` или «не сжимать» | **LayoutItem** (`ControlRow.Item` / `Layout.Item`) |
|
|
36
|
+
| Колонки сетки | **Grid** / `Layout.Grid` |
|
|
37
|
+
| Оболочка input (label / prefix / clear) | **FieldBase** |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Общие токены
|
|
42
|
+
|
|
43
|
+
| Тип | Значения | Назначение |
|
|
44
|
+
|-----|----------|------------|
|
|
45
|
+
| `LayoutGap` | `none` \| `xs` \| `sm` \| `md` \| `lg` \| `xl` | Промежуток → `--altum-g-space-*` |
|
|
46
|
+
| `LayoutAlign` | `start` \| `center` \| `end` \| `baseline` \| `stretch` | Поперечная ось |
|
|
47
|
+
| `LayoutJustify` | `start` \| `center` \| `end` \| `between` \| `around` \| `evenly` | Главная ось (у **Split** фиксирован `space-between`) |
|
|
48
|
+
|
|
49
|
+
Не задавайте `gap` в px — только шкала токенов.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Layout (панель)
|
|
54
|
+
|
|
55
|
+
Корневая **колонка** для Modal, Sheet, Sidebar, страницы: **скролл на `Layout`**, шапка/футер опционально липкие.
|
|
56
|
+
|
|
57
|
+
### Состав
|
|
58
|
+
|
|
59
|
+
| Часть | Роль | Ключевые пропсы |
|
|
60
|
+
|-------|------|-----------------|
|
|
61
|
+
| `Layout` | Корень-scrollport (`overflow-y: auto`, flex-колонка) | `as` (по умолчанию `div`) |
|
|
62
|
+
| `Layout.Header` | Шапка | `sticky`, `as="header"` |
|
|
63
|
+
| `Layout.Content` | Середина (без собственного overflow) | `as` |
|
|
64
|
+
| `Layout.Footer` | Низ с действиями | `sticky`, `align` (`start` \| `center` \| `end` \| `space-between`), `as="footer"` |
|
|
65
|
+
|
|
66
|
+
`sticky` — элемент остаётся у края при скролле **`Layout`**. Без `sticky` Header/Footer уезжают вместе с контентом.
|
|
67
|
+
|
|
68
|
+
### Когда использовать
|
|
69
|
+
|
|
70
|
+
- диалог / sheet / sidebar с заголовком и кнопками внизу;
|
|
71
|
+
- страница-оболочка с фиксированной шапкой и скроллом тела.
|
|
72
|
+
|
|
73
|
+
### Когда не использовать
|
|
74
|
+
|
|
75
|
+
- только вертикальный ритм полей → **Stack**;
|
|
76
|
+
- toolbar «слева / справа» без панели → **Split**;
|
|
77
|
+
- сетка колонок → **Grid**.
|
|
78
|
+
|
|
79
|
+
### Пример (sticky chrome)
|
|
80
|
+
|
|
81
|
+
```tsx
|
|
82
|
+
<Layout>
|
|
83
|
+
<Layout.Header sticky>
|
|
84
|
+
<Split>
|
|
85
|
+
<h2>Настройки</h2>
|
|
86
|
+
<ButtonIcon aria-label="Закрыть" />
|
|
87
|
+
</Split>
|
|
88
|
+
</Layout.Header>
|
|
89
|
+
<Layout.Content>
|
|
90
|
+
<Stack gap="md">
|
|
91
|
+
{/* поля */}
|
|
92
|
+
</Stack>
|
|
93
|
+
</Layout.Content>
|
|
94
|
+
<Layout.Footer sticky>
|
|
95
|
+
<Split>
|
|
96
|
+
<Button variant="secondary">Отмена</Button>
|
|
97
|
+
<Button variant="primary">Сохранить</Button>
|
|
98
|
+
</Split>
|
|
99
|
+
</Layout.Footer>
|
|
100
|
+
</Layout>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Namespace
|
|
104
|
+
|
|
105
|
+
На `Layout` также висят алиасы: `Layout.Stack`, `.Inline`, `.Split`, `.ControlRow`, `.Item`, `.Grid`, `.GridItem`.
|
|
106
|
+
|
|
107
|
+
В приложении предпочтительны **именованные импорты**; `Layout.*` удобен, когда вы уже внутри панели.
|
|
108
|
+
|
|
109
|
+
Также экспортируются: `LayoutRoot`, `LayoutHeader`, `LayoutContent`, `LayoutFooter`.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Stack
|
|
114
|
+
|
|
115
|
+
Вертикальный flex-стек с токенным `gap`. Всегда `width: 100%` родителя — ширину ограничивает родитель.
|
|
116
|
+
|
|
117
|
+
| Проп | По умолчанию | Смысл |
|
|
118
|
+
|------|--------------|--------|
|
|
119
|
+
| `gap` | `md` | Вертикальный ритм |
|
|
120
|
+
| `align` | `stretch` | Поперечная ось |
|
|
121
|
+
| `justify` | `start` | Главная ось |
|
|
122
|
+
| `as` | `div` | `div` \| `section` \| `ul` \| `ol` \| `nav` |
|
|
123
|
+
|
|
124
|
+
**Использовать:** поля формы друг под другом; секции с одинаковым вертикальным шагом; колонка в `Layout.Content`.
|
|
125
|
+
|
|
126
|
+
**Не использовать:** одна линия → Inline / ControlRow / Split; колонки → Grid.
|
|
127
|
+
|
|
128
|
+
```tsx
|
|
129
|
+
<Stack gap="md" align="stretch">
|
|
130
|
+
<TextField label="Имя" width="full" />
|
|
131
|
+
<TextField label="Эл. почта" width="full" />
|
|
132
|
+
<Button variant="primary">Сохранить</Button>
|
|
133
|
+
</Stack>
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Inline
|
|
139
|
+
|
|
140
|
+
Горизонтальный **кластер с переносом** (чипы, теги, бейджи, мелкие кнопки). Всегда `width: 100%` родителя.
|
|
141
|
+
|
|
142
|
+
| Проп | По умолчанию |
|
|
143
|
+
|------|--------------|
|
|
144
|
+
| `gap` | `sm` |
|
|
145
|
+
| `align` | `center` |
|
|
146
|
+
| `justify` | `start` |
|
|
147
|
+
| `wrap` | `true` |
|
|
148
|
+
|
|
149
|
+
**Использовать:** группы чипов/тегов; label + badge + icon; естественный wrap на узкой ширине.
|
|
150
|
+
|
|
151
|
+
**Не использовать:** заголовок слева / действия справа → **Split**; ряд полей формы → **ControlRow**; вертикальный список → **Stack**.
|
|
152
|
+
|
|
153
|
+
```tsx
|
|
154
|
+
<Inline gap="sm">
|
|
155
|
+
<Chip>Дизайн</Chip>
|
|
156
|
+
<Chip>Разработка</Chip>
|
|
157
|
+
<Chip>QA</Chip>
|
|
158
|
+
</Inline>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Split
|
|
164
|
+
|
|
165
|
+
Горизонтальный ряд с **`justify-content: space-between`** (края контейнера). Всегда `width: 100%` родителя.
|
|
166
|
+
|
|
167
|
+
| Проп | По умолчанию | Примечание |
|
|
168
|
+
|------|--------------|------------|
|
|
169
|
+
| `gap` | `md` | Между левой и правой группами при сжатии |
|
|
170
|
+
| `align` | `center` | |
|
|
171
|
+
| `justify` | — | Нет: всегда space-between |
|
|
172
|
+
|
|
173
|
+
Обычно **два** ребёнка (левая и правая группы); внутри часто **Inline**.
|
|
174
|
+
|
|
175
|
+
| **Использовать:** заголовок страницы (title + действия); строка списка (имя + меню); футер «Отмена \| Сохранить» по краям.
|
|
176
|
+
|
|
177
|
+
**Не использовать:** группа кнопок без «разъезда» к краям → **Inline**; ряд полей → **ControlRow**.
|
|
178
|
+
|
|
179
|
+
```tsx
|
|
180
|
+
<Split>
|
|
181
|
+
<Inline gap="sm" align="center">
|
|
182
|
+
<Text as="h1">Проекты</Text>
|
|
183
|
+
<Badge>12</Badge>
|
|
184
|
+
</Inline>
|
|
185
|
+
<Inline gap="sm">
|
|
186
|
+
<Button variant="secondary">Экспорт</Button>
|
|
187
|
+
<Button variant="primary">Создать</Button>
|
|
188
|
+
</Inline>
|
|
189
|
+
</Split>
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## ControlRow
|
|
195
|
+
|
|
196
|
+
Ряд **смешанных контролов** формы и фильтров (TextField + Chip + Button + Select). Всегда `width: 100%` родителя. По умолчанию `role="group"`.
|
|
197
|
+
|
|
198
|
+
| Проп | По умолчанию | Смысл |
|
|
199
|
+
|------|--------------|--------|
|
|
200
|
+
| `gap` | `sm` | Между контролами |
|
|
201
|
+
| `align` | `center` | `center` — Chip/Button; `end` — рядом с floating-label; `baseline` — по тексту |
|
|
202
|
+
| `justify` | `start` | |
|
|
203
|
+
| `wrap` | `true` | |
|
|
204
|
+
|
|
205
|
+
Ячейка с ростом: **`ControlRow.Item`** (= `LayoutItem`).
|
|
206
|
+
|
|
207
|
+
**Использовать:** панель фильтров; Select + «Сброс»; несколько контролов в линию с общим выравниванием по высоте контрола.
|
|
208
|
+
|
|
209
|
+
**Не использовать:** только чипы → **Inline**; заголовок/действия по краям → **Split**; вертикальная форма → **Stack**.
|
|
210
|
+
|
|
211
|
+
```tsx
|
|
212
|
+
<ControlRow align="end" gap="sm">
|
|
213
|
+
<ControlRow.Item grow>
|
|
214
|
+
<TextField label="Поиск" width="full" />
|
|
215
|
+
</ControlRow.Item>
|
|
216
|
+
<Button variant="secondary">Сброс</Button>
|
|
217
|
+
</ControlRow>
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## LayoutItem
|
|
223
|
+
|
|
224
|
+
Flex-ячейка внутри Stack / Inline / Split / ControlRow.
|
|
225
|
+
|
|
226
|
+
| Проп | По умолчанию | Смысл |
|
|
227
|
+
|------|--------------|--------|
|
|
228
|
+
| `grow` | `false` | `flex: 1` — занять оставшееся место |
|
|
229
|
+
| `shrink` | `true` | `false` — кнопка/чип не сжимаются |
|
|
230
|
+
|
|
231
|
+
Алиасы: `ControlRow.Item`, `Layout.Item`.
|
|
232
|
+
|
|
233
|
+
**Использовать:** поле поиска растягивается, кнопка — по контенту; иконка/чип с `shrink={false}`.
|
|
234
|
+
|
|
235
|
+
**Не нужен:** для обычных детей, которым не нужны `grow` / `shrink`.
|
|
236
|
+
|
|
237
|
+
```tsx
|
|
238
|
+
<ControlRow>
|
|
239
|
+
<LayoutItem grow>
|
|
240
|
+
<SearchField label="Поиск" width="full" />
|
|
241
|
+
</LayoutItem>
|
|
242
|
+
<LayoutItem shrink={false}>
|
|
243
|
+
<Button>Найти</Button>
|
|
244
|
+
</LayoutItem>
|
|
245
|
+
</ControlRow>
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Типичные композиции
|
|
251
|
+
|
|
252
|
+
### Тулбар страницы
|
|
253
|
+
|
|
254
|
+
```tsx
|
|
255
|
+
<Stack gap="lg">
|
|
256
|
+
<Split>
|
|
257
|
+
<Text as="h1">Команда</Text>
|
|
258
|
+
<Button variant="primary">Пригласить</Button>
|
|
259
|
+
</Split>
|
|
260
|
+
<ControlRow>
|
|
261
|
+
<ControlRow.Item grow>
|
|
262
|
+
<SearchField label="Поиск" width="full" />
|
|
263
|
+
</ControlRow.Item>
|
|
264
|
+
<Inline gap="sm">
|
|
265
|
+
<Chip active>Все</Chip>
|
|
266
|
+
<Chip>Активные</Chip>
|
|
267
|
+
</Inline>
|
|
268
|
+
</ControlRow>
|
|
269
|
+
</Stack>
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
---
|
|
273
|
+
|
|
274
|
+
## Частые ошибки
|
|
275
|
+
|
|
276
|
+
| Ошибка | Как правильно |
|
|
277
|
+
|--------|----------------|
|
|
278
|
+
| `Inline` для «заголовок \| действия» | **Split** |
|
|
279
|
+
| `Stack` для чипов в ряд | **Inline** |
|
|
280
|
+
| `div` + `display:flex` + px `gap` | **Stack** / **Inline** с токенами |
|
|
281
|
+
| Оборачивать всё в `LayoutItem` | Только где нужны `grow` / `shrink` |
|
|
282
|
+
| Путать `Layout` и `FieldBase` | `Layout` — панель UI; `FieldBase` — оболочка поля ввода |
|