@eocrm/design-system 0.0.0-stage → 0.6.18
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/AI-PRIMER.md +341 -0
- package/LICENSE +202 -0
- package/README.md +266 -2
- package/docs/components/Accordion.md +114 -0
- package/docs/components/AgentAvatar.md +58 -0
- package/docs/components/Alert.md +81 -0
- package/docs/components/AppLayout.md +70 -0
- package/docs/components/Avatar.md +49 -0
- package/docs/components/AvatarGroup.md +47 -0
- package/docs/components/Badge.md +60 -0
- package/docs/components/Banner.md +89 -0
- package/docs/components/BrandIcon.md +32 -0
- package/docs/components/Breadcrumb.md +72 -0
- package/docs/components/Button.md +107 -0
- package/docs/components/ButtonGroup.md +78 -0
- package/docs/components/Calendar.md +158 -0
- package/docs/components/Card.md +165 -0
- package/docs/components/CatalogPicker.md +83 -0
- package/docs/components/Chart.md +114 -0
- package/docs/components/ChatBubble.md +55 -0
- package/docs/components/ChatLauncher.md +97 -0
- package/docs/components/Checkbox.md +55 -0
- package/docs/components/CircularProgress.md +53 -0
- package/docs/components/Cluster.md +96 -0
- package/docs/components/Code.md +35 -0
- package/docs/components/CodeBlock.md +67 -0
- package/docs/components/ColorPicker.md +115 -0
- package/docs/components/ConfirmationPopover.md +70 -0
- package/docs/components/Constrain.md +39 -0
- package/docs/components/CurrencySelect.md +57 -0
- package/docs/components/CursorPagination.md +43 -0
- package/docs/components/DashboardCanvas.md +79 -0
- package/docs/components/DashboardWidget.md +131 -0
- package/docs/components/DataTable.md +88 -0
- package/docs/components/DatePicker.md +68 -0
- package/docs/components/DateRangePicker.md +71 -0
- package/docs/components/DateStrip.md +56 -0
- package/docs/components/DefinitionList.md +82 -0
- package/docs/components/Divider.md +57 -0
- package/docs/components/Dot.md +26 -0
- package/docs/components/Drawer.md +94 -0
- package/docs/components/DropdownMenu.md +299 -0
- package/docs/components/EmojiPicker.md +84 -0
- package/docs/components/EmptyState.md +55 -0
- package/docs/components/EntityChip.md +102 -0
- package/docs/components/ErrorState.md +72 -0
- package/docs/components/Field.md +91 -0
- package/docs/components/FileUpload.md +109 -0
- package/docs/components/FilterChip.md +88 -0
- package/docs/components/FlowCanvas.md +108 -0
- package/docs/components/FormRow.md +31 -0
- package/docs/components/FormSection.md +37 -0
- package/docs/components/Grid.md +103 -0
- package/docs/components/Highlight.md +75 -0
- package/docs/components/HighlightedText.md +50 -0
- package/docs/components/IconPicker.md +134 -0
- package/docs/components/IconTile.md +30 -0
- package/docs/components/Image.md +84 -0
- package/docs/components/ImageCrop.md +163 -0
- package/docs/components/Indent.md +31 -0
- package/docs/components/InlineDatePicker.md +58 -0
- package/docs/components/InlineDateRangePicker.md +57 -0
- package/docs/components/Input.md +54 -0
- package/docs/components/Kanban.md +122 -0
- package/docs/components/Kbd.md +41 -0
- package/docs/components/Lightbox.md +105 -0
- package/docs/components/Link.md +65 -0
- package/docs/components/LinkCard.md +41 -0
- package/docs/components/LiquidEditor.md +84 -0
- package/docs/components/List.md +68 -0
- package/docs/components/LiveRegion.md +29 -0
- package/docs/components/LocaleProvider.md +25 -0
- package/docs/components/Logo.md +41 -0
- package/docs/components/Masonry.md +48 -0
- package/docs/components/MediaTile.md +95 -0
- package/docs/components/Modal.md +107 -0
- package/docs/components/MoneyInput.md +62 -0
- package/docs/components/OptionsPicker.md +123 -0
- package/docs/components/OtpInput.md +65 -0
- package/docs/components/Page.md +35 -0
- package/docs/components/PageHeader.md +133 -0
- package/docs/components/Pagination.md +44 -0
- package/docs/components/Palette.md +32 -0
- package/docs/components/PasswordInput.md +45 -0
- package/docs/components/PasswordStrengthMeter.md +27 -0
- package/docs/components/PersonDisplay.md +153 -0
- package/docs/components/PhoneInput.md +54 -0
- package/docs/components/PillMenu.md +91 -0
- package/docs/components/Popover.md +127 -0
- package/docs/components/Progress.md +56 -0
- package/docs/components/QrCode.md +34 -0
- package/docs/components/Radio.md +37 -0
- package/docs/components/RadioGroup.md +56 -0
- package/docs/components/Rail.md +191 -0
- package/docs/components/RelativeDateInput.md +114 -0
- package/docs/components/RichText.md +44 -0
- package/docs/components/RichTextEditor.md +112 -0
- package/docs/components/Screen.md +37 -0
- package/docs/components/ScrollArea.md +39 -0
- package/docs/components/Select.md +131 -0
- package/docs/components/SettingRow.md +98 -0
- package/docs/components/Skeleton.md +68 -0
- package/docs/components/Slider.md +92 -0
- package/docs/components/SlotGrid.md +55 -0
- package/docs/components/SocialButton.md +31 -0
- package/docs/components/Sortable.md +127 -0
- package/docs/components/SortableGroup.md +52 -0
- package/docs/components/Sparkline.md +51 -0
- package/docs/components/Split.md +76 -0
- package/docs/components/Stack.md +59 -0
- package/docs/components/StagePath.md +66 -0
- package/docs/components/StatGroup.md +61 -0
- package/docs/components/StatTile.md +58 -0
- package/docs/components/Sticky.md +69 -0
- package/docs/components/Switch.md +89 -0
- package/docs/components/Table.md +184 -0
- package/docs/components/TableOfContents.md +76 -0
- package/docs/components/Tabs.md +94 -0
- package/docs/components/Text.md +63 -0
- package/docs/components/Textarea.md +59 -0
- package/docs/components/Thread.md +52 -0
- package/docs/components/TimeField.md +70 -0
- package/docs/components/Timeline.md +57 -0
- package/docs/components/Title.md +54 -0
- package/docs/components/ToastViewport.md +61 -0
- package/docs/components/Tooltip.md +63 -0
- package/docs/components/TopBar.md +214 -0
- package/docs/components/Tour.md +85 -0
- package/docs/components/TreeView.md +113 -0
- package/docs/components/VisuallyHidden.md +43 -0
- package/docs/components/WidgetPreview.md +54 -0
- package/docs/components/useBelowBreakpoint.md +11 -0
- package/docs/components/useMonth.md +18 -0
- package/docs/setup.md +51 -0
- package/docs/theming.md +95 -0
- package/docs/tokens.md +123 -0
- package/docs/transient-state.md +56 -0
- package/package.json +86 -4
- package/src/_meta/manifest.ts +293 -0
- package/src/app/AppProvider.tsx +78 -0
- package/src/app/index.ts +3 -0
- package/src/app/themeTokens.ts +95 -0
- package/src/calendar/dateMath.ts +114 -0
- package/src/calendar/formatters.ts +75 -0
- package/src/calendar/index.ts +39 -0
- package/src/calendar/types.ts +36 -0
- package/src/calendar/useAgenda.ts +70 -0
- package/src/calendar/useDay.ts +51 -0
- package/src/calendar/useMonth.ts +82 -0
- package/src/calendar/useWeek.ts +62 -0
- package/src/calendar/weekInfo.ts +83 -0
- package/src/components/Accordion/Accordion.module.scss +304 -0
- package/src/components/Accordion/Accordion.tokens.scss +64 -0
- package/src/components/Accordion/Accordion.tsx +272 -0
- package/src/components/Accordion/AccordionContent.tsx +36 -0
- package/src/components/Accordion/AccordionItem.tsx +66 -0
- package/src/components/Accordion/AccordionTrigger.tsx +121 -0
- package/src/components/Accordion/context.ts +47 -0
- package/src/components/Accordion/index.ts +14 -0
- package/src/components/Alert/Alert.module.scss +92 -0
- package/src/components/Alert/Alert.tokens.scss +60 -0
- package/src/components/Alert/Alert.tsx +136 -0
- package/src/components/Alert/index.ts +2 -0
- package/src/components/AppLayout/AppLayout.module.scss +130 -0
- package/src/components/AppLayout/AppLayout.tokens.scss +27 -0
- package/src/components/AppLayout/AppLayout.tsx +211 -0
- package/src/components/AppLayout/index.ts +2 -0
- package/src/components/Avatar/AgentAvatar.module.scss +117 -0
- package/src/components/Avatar/AgentAvatar.tsx +122 -0
- package/src/components/Avatar/Avatar.module.scss +181 -0
- package/src/components/Avatar/Avatar.tokens.scss +107 -0
- package/src/components/Avatar/Avatar.tsx +210 -0
- package/src/components/Avatar/AvatarGroup.module.scss +128 -0
- package/src/components/Avatar/AvatarGroup.tsx +119 -0
- package/src/components/Avatar/AvatarGroupContext.tsx +20 -0
- package/src/components/Avatar/index.ts +6 -0
- package/src/components/Badge/Badge.module.scss +124 -0
- package/src/components/Badge/Badge.tokens.scss +74 -0
- package/src/components/Badge/Badge.tsx +164 -0
- package/src/components/Badge/index.ts +2 -0
- package/src/components/Banner/Banner.module.scss +73 -0
- package/src/components/Banner/Banner.tokens.scss +51 -0
- package/src/components/Banner/Banner.tsx +138 -0
- package/src/components/Banner/index.ts +2 -0
- package/src/components/BrandIcon/BrandIcon.module.scss +5 -0
- package/src/components/BrandIcon/BrandIcon.tsx +99 -0
- package/src/components/BrandIcon/index.ts +2 -0
- package/src/components/Breadcrumb/Breadcrumb.module.scss +32 -0
- package/src/components/Breadcrumb/Breadcrumb.tokens.scss +9 -0
- package/src/components/Breadcrumb/Breadcrumb.tsx +146 -0
- package/src/components/Breadcrumb/index.ts +2 -0
- package/src/components/Button/Button.module.scss +167 -0
- package/src/components/Button/Button.tokens.scss +90 -0
- package/src/components/Button/Button.tsx +205 -0
- package/src/components/Button/index.ts +2 -0
- package/src/components/ButtonGroup/ButtonGroup.module.scss +134 -0
- package/src/components/ButtonGroup/ButtonGroup.tokens.scss +42 -0
- package/src/components/ButtonGroup/ButtonGroup.tsx +278 -0
- package/src/components/ButtonGroup/ButtonGroupItem.tsx +74 -0
- package/src/components/ButtonGroup/context.ts +45 -0
- package/src/components/ButtonGroup/index.ts +2 -0
- package/src/components/Calendar/AgendaView.module.scss +231 -0
- package/src/components/Calendar/AgendaView.tsx +214 -0
- package/src/components/Calendar/AllDayBand.module.scss +18 -0
- package/src/components/Calendar/AllDayBand.tsx +75 -0
- package/src/components/Calendar/Calendar.module.scss +23 -0
- package/src/components/Calendar/Calendar.tokens.scss +262 -0
- package/src/components/Calendar/Calendar.tsx +370 -0
- package/src/components/Calendar/DayCell.module.scss +30 -0
- package/src/components/Calendar/DayCell.tsx +50 -0
- package/src/components/Calendar/DayView.module.scss +10 -0
- package/src/components/Calendar/DayView.tsx +163 -0
- package/src/components/Calendar/EventChip.module.scss +171 -0
- package/src/components/Calendar/EventChip.tsx +115 -0
- package/src/components/Calendar/HourGrid.module.scss +123 -0
- package/src/components/Calendar/HourGrid.tsx +381 -0
- package/src/components/Calendar/MonthView.module.scss +99 -0
- package/src/components/Calendar/MonthView.tsx +296 -0
- package/src/components/Calendar/TimedEvent.module.scss +205 -0
- package/src/components/Calendar/TimedEvent.tsx +247 -0
- package/src/components/Calendar/ViewSwitcher.module.scss +3 -0
- package/src/components/Calendar/ViewSwitcher.tsx +47 -0
- package/src/components/Calendar/WeekView.module.scss +10 -0
- package/src/components/Calendar/WeekView.tsx +137 -0
- package/src/components/Calendar/eventColor.ts +60 -0
- package/src/components/Calendar/index.ts +18 -0
- package/src/components/Calendar/types.ts +451 -0
- package/src/components/Calendar/useEventDrag.ts +783 -0
- package/src/components/Calendar/utils.ts +622 -0
- package/src/components/Card/Card.module.scss +264 -0
- package/src/components/Card/Card.tokens.scss +55 -0
- package/src/components/Card/Card.tsx +170 -0
- package/src/components/Card/CardBody.tsx +45 -0
- package/src/components/Card/CardHeader.tsx +113 -0
- package/src/components/Card/CardList.tsx +24 -0
- package/src/components/Card/CardListRow.tsx +24 -0
- package/src/components/Card/index.ts +7 -0
- package/src/components/CatalogPicker/CatalogPicker.module.scss +193 -0
- package/src/components/CatalogPicker/CatalogPicker.tokens.scss +26 -0
- package/src/components/CatalogPicker/CatalogPicker.tsx +339 -0
- package/src/components/CatalogPicker/index.ts +2 -0
- package/src/components/Chart/Chart.module.scss +287 -0
- package/src/components/Chart/Chart.tokens.scss +63 -0
- package/src/components/Chart/Chart.tsx +607 -0
- package/src/components/Chart/ChartLegend.tsx +99 -0
- package/src/components/Chart/ChartTable.tsx +62 -0
- package/src/components/Chart/ChartTooltip.tsx +91 -0
- package/src/components/Chart/chartModel.ts +689 -0
- package/src/components/Chart/index.ts +2 -0
- package/src/components/ChatBubble/ChatBubble.module.scss +93 -0
- package/src/components/ChatBubble/ChatBubble.tokens.scss +17 -0
- package/src/components/ChatBubble/ChatBubble.tsx +61 -0
- package/src/components/ChatBubble/ChatBubbleList.tsx +27 -0
- package/src/components/ChatBubble/index.ts +3 -0
- package/src/components/ChatLauncher/ChatLauncher.module.scss +68 -0
- package/src/components/ChatLauncher/ChatLauncher.tokens.scss +27 -0
- package/src/components/ChatLauncher/ChatLauncher.tsx +202 -0
- package/src/components/ChatLauncher/index.ts +2 -0
- package/src/components/ChatLauncher/isAtBottom.ts +12 -0
- package/src/components/Checkbox/Checkbox.module.scss +147 -0
- package/src/components/Checkbox/Checkbox.tokens.scss +44 -0
- package/src/components/Checkbox/Checkbox.tsx +188 -0
- package/src/components/Checkbox/index.ts +2 -0
- package/src/components/CircularProgress/CircularProgress.module.scss +133 -0
- package/src/components/CircularProgress/CircularProgress.tokens.scss +40 -0
- package/src/components/CircularProgress/CircularProgress.tsx +139 -0
- package/src/components/CircularProgress/index.ts +7 -0
- package/src/components/Cluster/Cluster.module.scss +145 -0
- package/src/components/Cluster/Cluster.tokens.scss +11 -0
- package/src/components/Cluster/Cluster.tsx +215 -0
- package/src/components/Cluster/index.ts +2 -0
- package/src/components/Code/Code.module.scss +28 -0
- package/src/components/Code/Code.tokens.scss +15 -0
- package/src/components/Code/Code.tsx +44 -0
- package/src/components/Code/index.ts +2 -0
- package/src/components/CodeBlock/CodeBlock.module.scss +146 -0
- package/src/components/CodeBlock/CodeBlock.tokens.scss +27 -0
- package/src/components/CodeBlock/CodeBlock.tsx +274 -0
- package/src/components/CodeBlock/highlight.ts +179 -0
- package/src/components/CodeBlock/index.ts +8 -0
- package/src/components/CodeBlock/sampleSync.ts +42 -0
- package/src/components/ColorPicker/ColorPicker.module.scss +286 -0
- package/src/components/ColorPicker/ColorPicker.tokens.scss +60 -0
- package/src/components/ColorPicker/ColorPicker.tsx +367 -0
- package/src/components/ColorPicker/ColorPickerPanel.tsx +265 -0
- package/src/components/ColorPicker/SVSquare.tsx +189 -0
- package/src/components/ColorPicker/colorMath.ts +141 -0
- package/src/components/ColorPicker/index.ts +6 -0
- package/src/components/ConfirmationPopover/ConfirmationPopover.module.scss +39 -0
- package/src/components/ConfirmationPopover/ConfirmationPopover.tokens.scss +13 -0
- package/src/components/ConfirmationPopover/ConfirmationPopover.tsx +395 -0
- package/src/components/ConfirmationPopover/index.ts +2 -0
- package/src/components/Constrain/Constrain.module.scss +99 -0
- package/src/components/Constrain/Constrain.tsx +79 -0
- package/src/components/Constrain/index.ts +2 -0
- package/src/components/CurrencySelect/CurrencySelect.module.scss +7 -0
- package/src/components/CurrencySelect/CurrencySelect.tsx +167 -0
- package/src/components/CurrencySelect/index.ts +3 -0
- package/src/components/CursorPagination/CursorPagination.module.scss +69 -0
- package/src/components/CursorPagination/CursorPagination.tokens.scss +32 -0
- package/src/components/CursorPagination/CursorPagination.tsx +121 -0
- package/src/components/CursorPagination/index.ts +2 -0
- package/src/components/DashboardCanvas/DashboardCanvas.module.scss +360 -0
- package/src/components/DashboardCanvas/DashboardCanvas.tokens.scss +48 -0
- package/src/components/DashboardCanvas/DashboardCanvas.tsx +1270 -0
- package/src/components/DashboardCanvas/DashboardCanvasItem.tsx +140 -0
- package/src/components/DashboardCanvas/DashboardCanvasSection.tsx +174 -0
- package/src/components/DashboardCanvas/engine.ts +363 -0
- package/src/components/DashboardCanvas/index.ts +9 -0
- package/src/components/DashboardWidget/DashboardWidget.module.scss +100 -0
- package/src/components/DashboardWidget/DashboardWidget.tokens.scss +16 -0
- package/src/components/DashboardWidget/DashboardWidget.tsx +188 -0
- package/src/components/DashboardWidget/index.ts +7 -0
- package/src/components/DataTable/BodyRow.tsx +197 -0
- package/src/components/DataTable/ColumnVisibilityTrigger.module.scss +7 -0
- package/src/components/DataTable/ColumnVisibilityTrigger.tsx +105 -0
- package/src/components/DataTable/DataTable.module.scss +511 -0
- package/src/components/DataTable/DataTable.tokens.scss +80 -0
- package/src/components/DataTable/DataTable.tsx +734 -0
- package/src/components/DataTable/HeaderCell.module.scss +215 -0
- package/src/components/DataTable/HeaderCell.tsx +440 -0
- package/src/components/DataTable/columnShift.ts +117 -0
- package/src/components/DataTable/index.ts +23 -0
- package/src/components/DataTable/pinStyle.ts +47 -0
- package/src/components/DataTable/reorderColumns.ts +66 -0
- package/src/components/DataTable/types.ts +289 -0
- package/src/components/DataTable/useColumnDragShift.ts +216 -0
- package/src/components/DataTable/useDataTable.ts +372 -0
- package/src/components/DataTable/useResizeHandle.ts +97 -0
- package/src/components/DatePicker/DatePicker.module.scss +180 -0
- package/src/components/DatePicker/DatePicker.tokens.scss +152 -0
- package/src/components/DatePicker/DatePicker.tsx +664 -0
- package/src/components/DatePicker/DatePickerGrid.module.scss +172 -0
- package/src/components/DatePicker/DatePickerGrid.tsx +341 -0
- package/src/components/DatePicker/InlineDatePicker.module.scss +32 -0
- package/src/components/DatePicker/InlineDatePicker.tsx +201 -0
- package/src/components/DatePicker/index.ts +4 -0
- package/src/components/DatePicker/utils.ts +364 -0
- package/src/components/DateRangePicker/DateRangePicker.module.scss +237 -0
- package/src/components/DateRangePicker/DateRangePicker.tokens.scss +78 -0
- package/src/components/DateRangePicker/DateRangePicker.tsx +720 -0
- package/src/components/DateRangePicker/InlineDateRangePicker.module.scss +94 -0
- package/src/components/DateRangePicker/InlineDateRangePicker.tsx +376 -0
- package/src/components/DateRangePicker/index.ts +5 -0
- package/src/components/DateRangePicker/utils.ts +151 -0
- package/src/components/DateStrip/DateStrip.module.scss +78 -0
- package/src/components/DateStrip/DateStrip.tokens.scss +23 -0
- package/src/components/DateStrip/DateStrip.tsx +205 -0
- package/src/components/DateStrip/index.ts +2 -0
- package/src/components/DefinitionList/DefinitionList.module.scss +102 -0
- package/src/components/DefinitionList/DefinitionList.tokens.scss +29 -0
- package/src/components/DefinitionList/DefinitionList.tsx +198 -0
- package/src/components/DefinitionList/index.ts +9 -0
- package/src/components/Divider/Divider.module.scss +144 -0
- package/src/components/Divider/Divider.tokens.scss +21 -0
- package/src/components/Divider/Divider.tsx +103 -0
- package/src/components/Divider/index.ts +2 -0
- package/src/components/Dot/Dot.module.scss +40 -0
- package/src/components/Dot/Dot.tokens.scss +4 -0
- package/src/components/Dot/Dot.tsx +45 -0
- package/src/components/Dot/index.ts +2 -0
- package/src/components/Drawer/Body.tsx +23 -0
- package/src/components/Drawer/Close.tsx +35 -0
- package/src/components/Drawer/Content.tsx +93 -0
- package/src/components/Drawer/Drawer.module.scss +232 -0
- package/src/components/Drawer/Drawer.tokens.scss +38 -0
- package/src/components/Drawer/Drawer.tsx +23 -0
- package/src/components/Drawer/DrawerRoot.tsx +190 -0
- package/src/components/Drawer/Footer.tsx +24 -0
- package/src/components/Drawer/Header.tsx +64 -0
- package/src/components/Drawer/Overlay.tsx +82 -0
- package/src/components/Drawer/context.ts +44 -0
- package/src/components/Drawer/index.ts +12 -0
- package/src/components/Drawer/useDragToClose.ts +149 -0
- package/src/components/DropdownMenu/CheckboxItem.tsx +144 -0
- package/src/components/DropdownMenu/Content.tsx +419 -0
- package/src/components/DropdownMenu/DropdownMenu.module.scss +280 -0
- package/src/components/DropdownMenu/DropdownMenu.tokens.scss +88 -0
- package/src/components/DropdownMenu/DropdownMenu.tsx +43 -0
- package/src/components/DropdownMenu/Group.tsx +76 -0
- package/src/components/DropdownMenu/Item.tsx +148 -0
- package/src/components/DropdownMenu/ItemIndicator.tsx +30 -0
- package/src/components/DropdownMenu/Radio.tsx +178 -0
- package/src/components/DropdownMenu/Root.tsx +100 -0
- package/src/components/DropdownMenu/Sub.tsx +332 -0
- package/src/components/DropdownMenu/Trigger.tsx +76 -0
- package/src/components/DropdownMenu/context.ts +65 -0
- package/src/components/DropdownMenu/index.ts +20 -0
- package/src/components/EmojiPicker/EmojiPicker.module.scss +84 -0
- package/src/components/EmojiPicker/EmojiPicker.tokens.scss +24 -0
- package/src/components/EmojiPicker/EmojiPicker.tsx +341 -0
- package/src/components/EmojiPicker/emojiData.ts +245 -0
- package/src/components/EmojiPicker/index.ts +3 -0
- package/src/components/EmptyState/EmptyState.module.scss +102 -0
- package/src/components/EmptyState/EmptyState.tokens.scss +28 -0
- package/src/components/EmptyState/EmptyState.tsx +112 -0
- package/src/components/EmptyState/index.ts +7 -0
- package/src/components/EntityChip/EntityChip.module.scss +275 -0
- package/src/components/EntityChip/EntityChip.tokens.scss +66 -0
- package/src/components/EntityChip/EntityChip.tsx +649 -0
- package/src/components/EntityChip/index.ts +10 -0
- package/src/components/ErrorState/ErrorState.module.scss +105 -0
- package/src/components/ErrorState/ErrorState.tokens.scss +32 -0
- package/src/components/ErrorState/ErrorState.tsx +125 -0
- package/src/components/ErrorState/index.ts +8 -0
- package/src/components/Field/Field.module.scss +46 -0
- package/src/components/Field/Field.tsx +185 -0
- package/src/components/Field/index.ts +2 -0
- package/src/components/FileUpload/FileUpload.module.scss +187 -0
- package/src/components/FileUpload/FileUpload.tokens.scss +81 -0
- package/src/components/FileUpload/FileUpload.tsx +569 -0
- package/src/components/FileUpload/formatBytes.ts +34 -0
- package/src/components/FileUpload/iconForFile.ts +40 -0
- package/src/components/FileUpload/index.ts +2 -0
- package/src/components/FilterChip/FilterChip.module.scss +61 -0
- package/src/components/FilterChip/FilterChip.tokens.scss +25 -0
- package/src/components/FilterChip/FilterChip.tsx +208 -0
- package/src/components/FilterChip/index.ts +5 -0
- package/src/components/FlowCanvas/FlowCanvas.module.scss +329 -0
- package/src/components/FlowCanvas/FlowCanvas.tokens.scss +45 -0
- package/src/components/FlowCanvas/FlowCanvas.tsx +1867 -0
- package/src/components/FlowCanvas/FlowControls.tsx +46 -0
- package/src/components/FlowCanvas/FlowEdge.tsx +58 -0
- package/src/components/FlowCanvas/FlowNode.tsx +76 -0
- package/src/components/FlowCanvas/edgePath.ts +85 -0
- package/src/components/FlowCanvas/index.ts +4 -0
- package/src/components/FlowCanvas/layout.ts +148 -0
- package/src/components/FlowCanvas/spatialNav.ts +76 -0
- package/src/components/FlowCanvas/types.ts +59 -0
- package/src/components/FlowCanvas/useViewport.ts +122 -0
- package/src/components/FormRow/FormRow.module.scss +2 -0
- package/src/components/FormRow/FormRow.tsx +37 -0
- package/src/components/FormRow/index.ts +2 -0
- package/src/components/FormSection/FormSection.module.scss +24 -0
- package/src/components/FormSection/FormSection.tsx +46 -0
- package/src/components/FormSection/index.ts +2 -0
- package/src/components/Grid/Grid.module.scss +162 -0
- package/src/components/Grid/Grid.tokens.scss +13 -0
- package/src/components/Grid/Grid.tsx +226 -0
- package/src/components/Grid/GridItem.tsx +77 -0
- package/src/components/Grid/index.ts +11 -0
- package/src/components/Highlight/Highlight.module.scss +43 -0
- package/src/components/Highlight/Highlight.tokens.scss +35 -0
- package/src/components/Highlight/Highlight.tsx +164 -0
- package/src/components/Highlight/HighlightOverlay.tsx +100 -0
- package/src/components/Highlight/index.ts +2 -0
- package/src/components/HighlightedText/HighlightedText.module.scss +11 -0
- package/src/components/HighlightedText/HighlightedText.tokens.scss +9 -0
- package/src/components/HighlightedText/HighlightedText.tsx +50 -0
- package/src/components/HighlightedText/highlightRanges.ts +44 -0
- package/src/components/HighlightedText/index.ts +2 -0
- package/src/components/IconPicker/IconPicker.module.scss +175 -0
- package/src/components/IconPicker/IconPicker.tokens.scss +40 -0
- package/src/components/IconPicker/IconPicker.tsx +629 -0
- package/src/components/IconPicker/index.ts +9 -0
- package/src/components/IconTile/IconTile.module.scss +57 -0
- package/src/components/IconTile/IconTile.tokens.scss +16 -0
- package/src/components/IconTile/IconTile.tsx +91 -0
- package/src/components/IconTile/index.ts +2 -0
- package/src/components/Image/Image.module.scss +266 -0
- package/src/components/Image/Image.tokens.scss +55 -0
- package/src/components/Image/Image.tsx +342 -0
- package/src/components/Image/index.ts +2 -0
- package/src/components/ImageCrop/ImageCrop.module.scss +274 -0
- package/src/components/ImageCrop/ImageCrop.tokens.scss +33 -0
- package/src/components/ImageCrop/ImageCrop.tsx +542 -0
- package/src/components/ImageCrop/cropGeometry.ts +120 -0
- package/src/components/ImageCrop/extractCropBlob.ts +140 -0
- package/src/components/ImageCrop/index.ts +11 -0
- package/src/components/ImageCrop/useCropPreview.ts +161 -0
- package/src/components/Indent/Indent.module.scss +33 -0
- package/src/components/Indent/Indent.tokens.scss +10 -0
- package/src/components/Indent/Indent.tsx +46 -0
- package/src/components/Indent/index.ts +2 -0
- package/src/components/Input/Input.module.scss +99 -0
- package/src/components/Input/Input.tokens.scss +54 -0
- package/src/components/Input/Input.tsx +105 -0
- package/src/components/Input/Suggestions.tsx +260 -0
- package/src/components/Input/index.ts +2 -0
- package/src/components/Kanban/Kanban.module.scss +39 -0
- package/src/components/Kanban/Kanban.tokens.scss +15 -0
- package/src/components/Kanban/Kanban.tsx +951 -0
- package/src/components/Kanban/index.ts +7 -0
- package/src/components/Kbd/Kbd.module.scss +47 -0
- package/src/components/Kbd/Kbd.tokens.scss +26 -0
- package/src/components/Kbd/Kbd.tsx +73 -0
- package/src/components/Kbd/index.ts +2 -0
- package/src/components/Lightbox/Lightbox.module.scss +283 -0
- package/src/components/Lightbox/Lightbox.tokens.scss +36 -0
- package/src/components/Lightbox/Lightbox.tsx +506 -0
- package/src/components/Lightbox/index.ts +2 -0
- package/src/components/Link/Link.module.scss +78 -0
- package/src/components/Link/Link.tokens.scss +28 -0
- package/src/components/Link/Link.tsx +114 -0
- package/src/components/Link/index.ts +2 -0
- package/src/components/LinkCard/LinkCard.module.scss +92 -0
- package/src/components/LinkCard/LinkCard.tokens.scss +9 -0
- package/src/components/LinkCard/LinkCard.tsx +72 -0
- package/src/components/LinkCard/index.ts +2 -0
- package/src/components/LiquidEditor/AutocompleteMenu.tsx +133 -0
- package/src/components/LiquidEditor/HighlightLayer.tsx +53 -0
- package/src/components/LiquidEditor/InsertVariableMenu.tsx +81 -0
- package/src/components/LiquidEditor/LiquidEditor.module.scss +339 -0
- package/src/components/LiquidEditor/LiquidEditor.tokens.scss +81 -0
- package/src/components/LiquidEditor/LiquidEditor.tsx +412 -0
- package/src/components/LiquidEditor/PreviewPane.tsx +29 -0
- package/src/components/LiquidEditor/caretCoordinates.ts +97 -0
- package/src/components/LiquidEditor/index.ts +7 -0
- package/src/components/LiquidEditor/liquidFilters.ts +23 -0
- package/src/components/LiquidEditor/liquidTokenizer.ts +235 -0
- package/src/components/LiquidEditor/types.ts +101 -0
- package/src/components/LiquidEditor/useLiquidAutocomplete.ts +178 -0
- package/src/components/List/List.module.scss +105 -0
- package/src/components/List/List.tokens.scss +42 -0
- package/src/components/List/List.tsx +124 -0
- package/src/components/List/index.ts +9 -0
- package/src/components/LiveRegion/LiveRegion.module.scss +3 -0
- package/src/components/LiveRegion/LiveRegion.tsx +116 -0
- package/src/components/LiveRegion/index.ts +2 -0
- package/src/components/Logo/Logo.module.scss +139 -0
- package/src/components/Logo/Logo.tokens.scss +14 -0
- package/src/components/Logo/Logo.tsx +126 -0
- package/src/components/Logo/index.ts +2 -0
- package/src/components/Masonry/Masonry.module.scss +42 -0
- package/src/components/Masonry/Masonry.tokens.scss +8 -0
- package/src/components/Masonry/Masonry.tsx +136 -0
- package/src/components/Masonry/index.ts +2 -0
- package/src/components/Masonry/masonryUtils.ts +42 -0
- package/src/components/MediaTile/MediaTile.module.scss +183 -0
- package/src/components/MediaTile/MediaTile.tokens.scss +60 -0
- package/src/components/MediaTile/MediaTile.tsx +208 -0
- package/src/components/MediaTile/index.ts +8 -0
- package/src/components/Modal/Body.tsx +27 -0
- package/src/components/Modal/Close.tsx +45 -0
- package/src/components/Modal/Content.tsx +98 -0
- package/src/components/Modal/Footer.tsx +28 -0
- package/src/components/Modal/Header.tsx +51 -0
- package/src/components/Modal/Modal.module.scss +262 -0
- package/src/components/Modal/Modal.tokens.scss +50 -0
- package/src/components/Modal/Modal.tsx +23 -0
- package/src/components/Modal/ModalRoot.tsx +299 -0
- package/src/components/Modal/Overlay.tsx +101 -0
- package/src/components/Modal/context.ts +60 -0
- package/src/components/Modal/index.ts +11 -0
- package/src/components/MoneyInput/MoneyInput.module.scss +57 -0
- package/src/components/MoneyInput/MoneyInput.tsx +433 -0
- package/src/components/MoneyInput/index.ts +2 -0
- package/src/components/OptionsPicker/OptionsPicker.module.scss +216 -0
- package/src/components/OptionsPicker/OptionsPicker.tokens.scss +68 -0
- package/src/components/OptionsPicker/OptionsPicker.tsx +936 -0
- package/src/components/OptionsPicker/index.ts +9 -0
- package/src/components/OtpInput/OtpInput.module.scss +69 -0
- package/src/components/OtpInput/OtpInput.tokens.scss +45 -0
- package/src/components/OtpInput/OtpInput.tsx +368 -0
- package/src/components/OtpInput/index.ts +2 -0
- package/src/components/Page/Page.module.scss +30 -0
- package/src/components/Page/Page.tokens.scss +11 -0
- package/src/components/Page/Page.tsx +53 -0
- package/src/components/Page/index.ts +2 -0
- package/src/components/PageHeader/PageHeader.module.scss +197 -0
- package/src/components/PageHeader/PageHeader.tokens.scss +41 -0
- package/src/components/PageHeader/PageHeader.tsx +310 -0
- package/src/components/PageHeader/index.ts +20 -0
- package/src/components/Pagination/Pagination.module.scss +117 -0
- package/src/components/Pagination/Pagination.tokens.scss +54 -0
- package/src/components/Pagination/Pagination.tsx +165 -0
- package/src/components/Pagination/index.ts +4 -0
- package/src/components/Pagination/paginationRange.ts +72 -0
- package/src/components/PasswordInput/PasswordInput.module.scss +120 -0
- package/src/components/PasswordInput/PasswordInput.tokens.scss +44 -0
- package/src/components/PasswordInput/PasswordInput.tsx +210 -0
- package/src/components/PasswordInput/index.ts +2 -0
- package/src/components/PasswordStrengthMeter/PasswordStrengthMeter.module.scss +80 -0
- package/src/components/PasswordStrengthMeter/PasswordStrengthMeter.tokens.scss +40 -0
- package/src/components/PasswordStrengthMeter/PasswordStrengthMeter.tsx +96 -0
- package/src/components/PasswordStrengthMeter/index.ts +2 -0
- package/src/components/PersonDisplay/PersonDisplay.module.scss +180 -0
- package/src/components/PersonDisplay/PersonDisplay.tokens.scss +35 -0
- package/src/components/PersonDisplay/PersonDisplay.tsx +420 -0
- package/src/components/PersonDisplay/index.ts +10 -0
- package/src/components/PhoneInput/PhoneInput.module.scss +23 -0
- package/src/components/PhoneInput/PhoneInput.tsx +271 -0
- package/src/components/PhoneInput/index.ts +4 -0
- package/src/components/PhoneInput/phone.ts +128 -0
- package/src/components/PillMenu/PillMenu.module.scss +117 -0
- package/src/components/PillMenu/PillMenu.tokens.scss +22 -0
- package/src/components/PillMenu/PillMenu.tsx +324 -0
- package/src/components/PillMenu/index.ts +2 -0
- package/src/components/Popover/Anchor.tsx +37 -0
- package/src/components/Popover/Close.tsx +45 -0
- package/src/components/Popover/Content.tsx +213 -0
- package/src/components/Popover/Heading.tsx +33 -0
- package/src/components/Popover/Popover.module.scss +177 -0
- package/src/components/Popover/Popover.tokens.scss +22 -0
- package/src/components/Popover/Popover.tsx +23 -0
- package/src/components/Popover/PopoverRoot.tsx +75 -0
- package/src/components/Popover/Trigger.tsx +86 -0
- package/src/components/Popover/context.ts +22 -0
- package/src/components/Popover/index.ts +7 -0
- package/src/components/Progress/Progress.module.scss +110 -0
- package/src/components/Progress/Progress.tokens.scss +44 -0
- package/src/components/Progress/Progress.tsx +129 -0
- package/src/components/Progress/index.ts +2 -0
- package/src/components/QrCode/QrCode.module.scss +97 -0
- package/src/components/QrCode/QrCode.tokens.scss +17 -0
- package/src/components/QrCode/QrCode.tsx +233 -0
- package/src/components/QrCode/index.ts +2 -0
- package/src/components/QrCode/qr.ts +161 -0
- package/src/components/Radio/Radio.module.scss +175 -0
- package/src/components/Radio/Radio.tokens.scss +59 -0
- package/src/components/Radio/Radio.tsx +127 -0
- package/src/components/Radio/RadioGroup.module.scss +42 -0
- package/src/components/Radio/RadioGroup.tsx +120 -0
- package/src/components/Radio/RadioGroupContext.tsx +30 -0
- package/src/components/Radio/index.ts +4 -0
- package/src/components/Rail/Rail.module.scss +510 -0
- package/src/components/Rail/Rail.tokens.scss +92 -0
- package/src/components/Rail/Rail.tsx +287 -0
- package/src/components/Rail/RailCollapseToggle.tsx +57 -0
- package/src/components/Rail/RailFooter.tsx +17 -0
- package/src/components/Rail/RailGroup.tsx +728 -0
- package/src/components/Rail/RailGroupContext.ts +9 -0
- package/src/components/Rail/RailHeader.tsx +23 -0
- package/src/components/Rail/RailItem.tsx +119 -0
- package/src/components/Rail/RailSection.tsx +39 -0
- package/src/components/Rail/RailSpacer.tsx +19 -0
- package/src/components/Rail/index.ts +9 -0
- package/src/components/RelativeDateInput/RelativeDateInput.module.scss +15 -0
- package/src/components/RelativeDateInput/RelativeDateInput.tokens.scss +6 -0
- package/src/components/RelativeDateInput/RelativeDateInput.tsx +474 -0
- package/src/components/RelativeDateInput/index.ts +10 -0
- package/src/components/RelativeDateInput/relativeDate.ts +127 -0
- package/src/components/RichText/RichText.module.scss +5 -0
- package/src/components/RichText/RichText.tsx +70 -0
- package/src/components/RichText/RichTextAttachment.module.scss +82 -0
- package/src/components/RichText/RichTextAttachment.tsx +122 -0
- package/src/components/RichText/_prose.scss +79 -0
- package/src/components/RichText/attachmentIcon.tsx +24 -0
- package/src/components/RichText/engine/attachment.ts +154 -0
- package/src/components/RichText/engine/autolink.ts +64 -0
- package/src/components/RichText/engine/blockUnit.ts +174 -0
- package/src/components/RichText/engine/colorMarks.ts +85 -0
- package/src/components/RichText/engine/escape.ts +11 -0
- package/src/components/RichText/engine/fromHtml.ts +353 -0
- package/src/components/RichText/engine/fromMarkdown.ts +20 -0
- package/src/components/RichText/engine/inlines.ts +82 -0
- package/src/components/RichText/engine/listDepths.ts +32 -0
- package/src/components/RichText/engine/marks.ts +80 -0
- package/src/components/RichText/engine/mdToHtml.ts +178 -0
- package/src/components/RichText/engine/model.ts +157 -0
- package/src/components/RichText/engine/position.ts +118 -0
- package/src/components/RichText/engine/renderDoc.tsx +395 -0
- package/src/components/RichText/engine/renderLink.ts +15 -0
- package/src/components/RichText/engine/renderMention.ts +16 -0
- package/src/components/RichText/engine/safeHref.ts +22 -0
- package/src/components/RichText/engine/toHtml.ts +154 -0
- package/src/components/RichText/engine/toMarkdown.ts +97 -0
- package/src/components/RichText/engine/transforms.ts +434 -0
- package/src/components/RichText/imageMaxHeightStyle.ts +10 -0
- package/src/components/RichText/index.ts +31 -0
- package/src/components/RichTextEditor/RichTextAttachmentConfig.tsx +264 -0
- package/src/components/RichTextEditor/RichTextBlockControls.tsx +365 -0
- package/src/components/RichTextEditor/RichTextBlockMenu.tsx +162 -0
- package/src/components/RichTextEditor/RichTextColorMenu.tsx +115 -0
- package/src/components/RichTextEditor/RichTextEditor.module.scss +298 -0
- package/src/components/RichTextEditor/RichTextEditor.tsx +1910 -0
- package/src/components/RichTextEditor/RichTextImageResizer.tsx +131 -0
- package/src/components/RichTextEditor/RichTextLinkEditor.tsx +151 -0
- package/src/components/RichTextEditor/RichTextMentionMenu.tsx +99 -0
- package/src/components/RichTextEditor/RichTextToolbar.tsx +379 -0
- package/src/components/RichTextEditor/autolinkInput.ts +65 -0
- package/src/components/RichTextEditor/blockDrop.ts +9 -0
- package/src/components/RichTextEditor/blockReflow.ts +62 -0
- package/src/components/RichTextEditor/commands.ts +300 -0
- package/src/components/RichTextEditor/history.ts +93 -0
- package/src/components/RichTextEditor/icons.tsx +152 -0
- package/src/components/RichTextEditor/imageSize.ts +70 -0
- package/src/components/RichTextEditor/index.ts +5 -0
- package/src/components/RichTextEditor/input.ts +209 -0
- package/src/components/RichTextEditor/inputRules.ts +71 -0
- package/src/components/RichTextEditor/links.ts +103 -0
- package/src/components/RichTextEditor/mentionContext.ts +37 -0
- package/src/components/RichTextEditor/mentions.ts +28 -0
- package/src/components/RichTextEditor/preventSelectionLoss.ts +15 -0
- package/src/components/RichTextEditor/selection.ts +415 -0
- package/src/components/RichTextEditor/shortcuts.ts +44 -0
- package/src/components/RichTextEditor/useAnchoredFloating.ts +50 -0
- package/src/components/RichTextEditor/useAttachmentConfig.ts +134 -0
- package/src/components/RichTextEditor/useDismissOnOutsidePointerDown.ts +26 -0
- package/src/components/RichTextEditor/useLinkEditor.ts +107 -0
- package/src/components/RichTextEditor/useMention.ts +226 -0
- package/src/components/RichTextEditor/useOverlayRect.ts +73 -0
- package/src/components/RichTextEditor/useUpload.ts +246 -0
- package/src/components/Screen/Screen.module.scss +46 -0
- package/src/components/Screen/Screen.tokens.scss +20 -0
- package/src/components/Screen/Screen.tsx +97 -0
- package/src/components/Screen/index.ts +2 -0
- package/src/components/ScrollArea/ScrollArea.module.scss +39 -0
- package/src/components/ScrollArea/ScrollArea.tokens.scss +15 -0
- package/src/components/ScrollArea/ScrollArea.tsx +154 -0
- package/src/components/ScrollArea/index.ts +2 -0
- package/src/components/Select/Chip.tsx +45 -0
- package/src/components/Select/Empty.tsx +39 -0
- package/src/components/Select/Error.tsx +51 -0
- package/src/components/Select/HiddenInputs.tsx +44 -0
- package/src/components/Select/Listbox.tsx +557 -0
- package/src/components/Select/Loading.tsx +30 -0
- package/src/components/Select/Select.module.scss +512 -0
- package/src/components/Select/Select.tokens.scss +140 -0
- package/src/components/Select/Select.tsx +685 -0
- package/src/components/Select/Trigger.tsx +952 -0
- package/src/components/Select/context.ts +101 -0
- package/src/components/Select/emptyStateText.ts +19 -0
- package/src/components/Select/index.ts +9 -0
- package/src/components/Select/useSelectState.ts +157 -0
- package/src/components/Select/utils-types.ts +7 -0
- package/src/components/Select/utils.ts +122 -0
- package/src/components/SettingRow/SettingRow.module.scss +166 -0
- package/src/components/SettingRow/SettingRow.tokens.scss +37 -0
- package/src/components/SettingRow/SettingRow.tsx +242 -0
- package/src/components/SettingRow/index.ts +7 -0
- package/src/components/Skeleton/Skeleton.module.scss +55 -0
- package/src/components/Skeleton/Skeleton.tokens.scss +17 -0
- package/src/components/Skeleton/Skeleton.tsx +131 -0
- package/src/components/Skeleton/index.ts +4 -0
- package/src/components/Skeleton/useSkeletonVisibility.ts +95 -0
- package/src/components/Slider/Slider.module.scss +293 -0
- package/src/components/Slider/Slider.tokens.scss +98 -0
- package/src/components/Slider/Slider.tsx +624 -0
- package/src/components/Slider/index.ts +9 -0
- package/src/components/SlotGrid/SlotGrid.module.scss +61 -0
- package/src/components/SlotGrid/SlotGrid.tokens.scss +21 -0
- package/src/components/SlotGrid/SlotGrid.tsx +111 -0
- package/src/components/SlotGrid/index.ts +2 -0
- package/src/components/SocialButton/SocialButton.module.scss +4 -0
- package/src/components/SocialButton/SocialButton.tsx +40 -0
- package/src/components/SocialButton/index.ts +2 -0
- package/src/components/Sortable/Sortable.module.scss +177 -0
- package/src/components/Sortable/Sortable.tokens.scss +27 -0
- package/src/components/Sortable/Sortable.tsx +572 -0
- package/src/components/Sortable/containerAwareCollision.ts +125 -0
- package/src/components/Sortable/index.ts +13 -0
- package/src/components/SortableGroup/SortableGroup.module.scss +23 -0
- package/src/components/SortableGroup/SortableGroup.tsx +315 -0
- package/src/components/SortableGroup/index.ts +4 -0
- package/src/components/SortableGroup/moveSortableItem.ts +39 -0
- package/src/components/Sparkline/Sparkline.module.scss +28 -0
- package/src/components/Sparkline/Sparkline.tokens.scss +7 -0
- package/src/components/Sparkline/Sparkline.tsx +133 -0
- package/src/components/Sparkline/index.ts +2 -0
- package/src/components/Sparkline/sparklineModel.ts +119 -0
- package/src/components/Split/Split.module.scss +158 -0
- package/src/components/Split/Split.tokens.scss +10 -0
- package/src/components/Split/Split.tsx +231 -0
- package/src/components/Split/index.ts +2 -0
- package/src/components/Stack/Stack.module.scss +67 -0
- package/src/components/Stack/Stack.tokens.scss +11 -0
- package/src/components/Stack/Stack.tsx +100 -0
- package/src/components/Stack/index.ts +2 -0
- package/src/components/StagePath/StagePath.module.scss +255 -0
- package/src/components/StagePath/StagePath.tokens.scss +43 -0
- package/src/components/StagePath/StagePath.tsx +176 -0
- package/src/components/StagePath/index.ts +2 -0
- package/src/components/StatGroup/StatGroup.module.scss +6 -0
- package/src/components/StatGroup/StatGroup.tsx +70 -0
- package/src/components/StatGroup/StatGroupContext.ts +10 -0
- package/src/components/StatGroup/StatTile.module.scss +99 -0
- package/src/components/StatGroup/StatTile.tokens.scss +35 -0
- package/src/components/StatGroup/StatTile.tsx +143 -0
- package/src/components/StatGroup/index.ts +4 -0
- package/src/components/Sticky/Sticky.module.scss +98 -0
- package/src/components/Sticky/Sticky.tokens.scss +17 -0
- package/src/components/Sticky/Sticky.tsx +103 -0
- package/src/components/Sticky/index.ts +2 -0
- package/src/components/Switch/Switch.module.scss +182 -0
- package/src/components/Switch/Switch.tokens.scss +59 -0
- package/src/components/Switch/Switch.tsx +214 -0
- package/src/components/Switch/index.ts +2 -0
- package/src/components/Table/Table.module.scss +308 -0
- package/src/components/Table/Table.tokens.scss +79 -0
- package/src/components/Table/Table.tsx +381 -0
- package/src/components/Table/index.ts +15 -0
- package/src/components/TableOfContents/TableOfContents.module.scss +83 -0
- package/src/components/TableOfContents/TableOfContents.tokens.scss +26 -0
- package/src/components/TableOfContents/TableOfContents.tsx +192 -0
- package/src/components/TableOfContents/activeSection.ts +18 -0
- package/src/components/TableOfContents/index.ts +2 -0
- package/src/components/Tabs/Tabs.module.scss +359 -0
- package/src/components/Tabs/Tabs.tokens.scss +50 -0
- package/src/components/Tabs/Tabs.tsx +538 -0
- package/src/components/Tabs/index.ts +2 -0
- package/src/components/Text/Text.module.scss +115 -0
- package/src/components/Text/Text.tokens.scss +55 -0
- package/src/components/Text/Text.tsx +197 -0
- package/src/components/Text/index.ts +2 -0
- package/src/components/Textarea/Textarea.module.scss +94 -0
- package/src/components/Textarea/Textarea.tokens.scss +48 -0
- package/src/components/Textarea/Textarea.tsx +246 -0
- package/src/components/Textarea/index.ts +2 -0
- package/src/components/Thread/Thread.module.scss +161 -0
- package/src/components/Thread/Thread.tokens.scss +32 -0
- package/src/components/Thread/Thread.tsx +176 -0
- package/src/components/Thread/index.ts +2 -0
- package/src/components/TimeField/TimeField.module.scss +232 -0
- package/src/components/TimeField/TimeField.tsx +793 -0
- package/src/components/TimeField/index.ts +2 -0
- package/src/components/Timeline/Timeline.module.scss +58 -0
- package/src/components/Timeline/Timeline.tokens.scss +13 -0
- package/src/components/Timeline/Timeline.tsx +53 -0
- package/src/components/Timeline/index.ts +2 -0
- package/src/components/Title/Title.module.scss +84 -0
- package/src/components/Title/Title.tokens.scss +37 -0
- package/src/components/Title/Title.tsx +150 -0
- package/src/components/Title/index.ts +2 -0
- package/src/components/Toast/Toast.module.scss +299 -0
- package/src/components/Toast/Toast.tokens.scss +65 -0
- package/src/components/Toast/Toast.tsx +122 -0
- package/src/components/Toast/ToastViewport.tsx +166 -0
- package/src/components/Toast/api.ts +175 -0
- package/src/components/Toast/index.ts +5 -0
- package/src/components/Toast/store.ts +133 -0
- package/src/components/Toast/useToastTimer.ts +94 -0
- package/src/components/Tooltip/Tooltip.module.scss +99 -0
- package/src/components/Tooltip/Tooltip.tokens.scss +23 -0
- package/src/components/Tooltip/Tooltip.tsx +341 -0
- package/src/components/Tooltip/index.ts +2 -0
- package/src/components/TopBar/TopBar.module.scss +235 -0
- package/src/components/TopBar/TopBar.tokens.scss +79 -0
- package/src/components/TopBar/TopBar.tsx +87 -0
- package/src/components/TopBar/TopBarEnd.tsx +20 -0
- package/src/components/TopBar/TopBarIconButton.tsx +86 -0
- package/src/components/TopBar/TopBarSearch.tsx +319 -0
- package/src/components/TopBar/TopBarSearchPanel.tsx +268 -0
- package/src/components/TopBar/TopBarStart.tsx +20 -0
- package/src/components/TopBar/index.ts +11 -0
- package/src/components/Tour/Spotlight.tsx +121 -0
- package/src/components/Tour/Tour.module.scss +210 -0
- package/src/components/Tour/Tour.tokens.scss +58 -0
- package/src/components/Tour/Tour.tsx +617 -0
- package/src/components/Tour/index.ts +2 -0
- package/src/components/Tour/useTourTarget.ts +115 -0
- package/src/components/TreeView/TreeView.module.scss +268 -0
- package/src/components/TreeView/TreeView.tokens.scss +36 -0
- package/src/components/TreeView/TreeView.tsx +536 -0
- package/src/components/TreeView/index.ts +3 -0
- package/src/components/TreeView/treeModel.ts +224 -0
- package/src/components/VisuallyHidden/VisuallyHidden.module.scss +7 -0
- package/src/components/VisuallyHidden/VisuallyHidden.tsx +29 -0
- package/src/components/VisuallyHidden/index.ts +2 -0
- package/src/components/WidgetPreview/WidgetPreview.module.scss +11 -0
- package/src/components/WidgetPreview/WidgetPreview.tokens.scss +26 -0
- package/src/components/WidgetPreview/WidgetPreview.tsx +36 -0
- package/src/components/WidgetPreview/WidgetShape.module.scss +140 -0
- package/src/components/WidgetPreview/WidgetShape.tsx +159 -0
- package/src/components/WidgetPreview/index.ts +2 -0
- package/src/components/_internal/Trend.tsx +27 -0
- package/src/components/_internal/choiceTile.scss +74 -0
- package/src/components/_internal/collapse.scss +10 -0
- package/src/components/_internal/collapse.ts +58 -0
- package/src/components/_internal/currency.ts +257 -0
- package/src/components/_internal/dragAnnouncements.ts +200 -0
- package/src/components/_internal/fieldWiring.ts +225 -0
- package/src/components/_internal/gridSpan.ts +54 -0
- package/src/components/_internal/isoDay.ts +35 -0
- package/src/components/_internal/letterKey.ts +26 -0
- package/src/components/_internal/overlay/focusRestore.ts +21 -0
- package/src/components/_internal/overlay/index.ts +12 -0
- package/src/components/_internal/overlay/tourHold.ts +23 -0
- package/src/components/_internal/overlay/useFocusTrap.ts +120 -0
- package/src/components/_internal/overlay/useInOverlay.ts +81 -0
- package/src/components/_internal/overlay/useOverlayStack.ts +232 -0
- package/src/components/_internal/overlay/useScrollLock.ts +112 -0
- package/src/components/_internal/refs.ts +48 -0
- package/src/components/_internal/statusColor.ts +26 -0
- package/src/components/_internal/timeUtils.ts +23 -0
- package/src/components/_internal/useAsyncOptions.ts +145 -0
- package/src/components/_internal/useClippedTooltip.ts +50 -0
- package/src/components/_internal/useControllableState.ts +50 -0
- package/src/components.manifest.json +1141 -0
- package/src/hooks/useBelowBreakpoint.ts +58 -0
- package/src/i18n/I18nProvider.tsx +52 -0
- package/src/i18n/LocaleProvider.tsx +17 -0
- package/src/i18n/en.ts +648 -0
- package/src/i18n/format.ts +71 -0
- package/src/i18n/index.ts +13 -0
- package/src/i18n/messages.ts +1275 -0
- package/src/i18n/ru.ts +677 -0
- package/src/i18n/useLocale.ts +19 -0
- package/src/i18n/useTranslation.ts +58 -0
- package/src/index.ts +913 -0
- package/src/palette/index.ts +2 -0
- package/src/palette/palette.ts +108 -0
- package/src/styles/dark.scss +4 -0
- package/src/styles/global.scss +7 -0
- package/src/styles/mixins.scss +143 -0
- package/src/styles/reset.scss +78 -0
- package/src/styles/tokens.scss +18 -0
- package/src/styles/typography.scss +44 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';
|
|
2
|
+
import { Grid, type GridGap } from '../Grid';
|
|
3
|
+
|
|
4
|
+
// Extends HTMLAttributes<HTMLElement> (not HTMLDivElement) to match Grid's prop
|
|
5
|
+
// surface, so {...rest} spreads cleanly onto Grid.
|
|
6
|
+
export interface FormRowProps extends HTMLAttributes<HTMLElement> {
|
|
7
|
+
/** Fixed equal-width column count. Omit for responsive auto-fit (the default). */
|
|
8
|
+
columns?: 2 | 3;
|
|
9
|
+
/** Min field width before the row reflows to stacked (auto-fit mode). Default `'16rem'`. */
|
|
10
|
+
minColumnWidth?: string;
|
|
11
|
+
/** Gap between fields. Default `'lg'`. */
|
|
12
|
+
gap?: GridGap;
|
|
13
|
+
/** The fields (usually `<Field>`). */
|
|
14
|
+
children: ReactNode;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Lays form fields side by side; auto-fits and reflows to stacked as the container narrows.
|
|
19
|
+
* @see docs/components/FormRow.md
|
|
20
|
+
*/
|
|
21
|
+
export const FormRow = forwardRef<HTMLDivElement, FormRowProps>(function FormRow(
|
|
22
|
+
{ columns, minColumnWidth, gap = 'lg', children, ...rest },
|
|
23
|
+
ref,
|
|
24
|
+
) {
|
|
25
|
+
if (columns !== undefined) {
|
|
26
|
+
return (
|
|
27
|
+
<Grid ref={ref} columns={columns} gap={gap} {...rest}>
|
|
28
|
+
{children}
|
|
29
|
+
</Grid>
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
return (
|
|
33
|
+
<Grid ref={ref} minColumnWidth={minColumnWidth ?? '16rem'} gap={gap} {...rest}>
|
|
34
|
+
{children}
|
|
35
|
+
</Grid>
|
|
36
|
+
);
|
|
37
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
.section {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
gap: var(--space-4);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
// Separator between consecutive sections — padding + border only (no margin),
|
|
8
|
+
// keyed by adjacency so the first section has none.
|
|
9
|
+
.section + .section {
|
|
10
|
+
padding-top: var(--space-6);
|
|
11
|
+
border-top: var(--border-width) solid var(--color-border);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.header {
|
|
15
|
+
display: flex;
|
|
16
|
+
flex-direction: column;
|
|
17
|
+
gap: var(--space-1);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.fields {
|
|
21
|
+
display: flex;
|
|
22
|
+
flex-direction: column;
|
|
23
|
+
gap: var(--space-4);
|
|
24
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import { Title, type TitleOrder } from '../Title';
|
|
4
|
+
import { Text } from '../Text';
|
|
5
|
+
import styles from './FormSection.module.scss';
|
|
6
|
+
|
|
7
|
+
export interface FormSectionProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
|
|
8
|
+
/** Section heading. */
|
|
9
|
+
title?: ReactNode;
|
|
10
|
+
/** Secondary text under the heading. */
|
|
11
|
+
description?: ReactNode;
|
|
12
|
+
/** Heading level for `title`. Default `2`. */
|
|
13
|
+
titleOrder?: TitleOrder;
|
|
14
|
+
/** The fields (usually `<Field>` / `<FormRow>`). */
|
|
15
|
+
children: ReactNode;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Titled group of form fields: a heading + description over a vertical stack.
|
|
20
|
+
* @see docs/components/FormSection.md
|
|
21
|
+
*/
|
|
22
|
+
export const FormSection = forwardRef<HTMLElement, FormSectionProps>(function FormSection(
|
|
23
|
+
{ title, description, titleOrder = 2, className, children, ...rest },
|
|
24
|
+
ref,
|
|
25
|
+
) {
|
|
26
|
+
const hasHeader = title != null || description != null;
|
|
27
|
+
return (
|
|
28
|
+
<section ref={ref} className={clsx(styles.section, className)} {...rest}>
|
|
29
|
+
{hasHeader && (
|
|
30
|
+
<div className={styles.header}>
|
|
31
|
+
{title != null && (
|
|
32
|
+
<Title order={titleOrder} size="md">
|
|
33
|
+
{title}
|
|
34
|
+
</Title>
|
|
35
|
+
)}
|
|
36
|
+
{description != null && (
|
|
37
|
+
<Text as="p" size="sm" tone="muted">
|
|
38
|
+
{description}
|
|
39
|
+
</Text>
|
|
40
|
+
)}
|
|
41
|
+
</div>
|
|
42
|
+
)}
|
|
43
|
+
<div className={styles.fields}>{children}</div>
|
|
44
|
+
</section>
|
|
45
|
+
);
|
|
46
|
+
});
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
@use './Grid.tokens' as tokens;
|
|
2
|
+
@use '../_internal/collapse' as bp;
|
|
3
|
+
|
|
4
|
+
.grid {
|
|
5
|
+
display: grid;
|
|
6
|
+
grid-template-columns: var(--grid-columns, repeat(auto-fit, minmax(240px, 1fr)));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// Grid.Item placement — the value is resolved in GridItem.tsx and injected
|
|
10
|
+
// as an inline custom property (span N / 1 / -1). Declared before the
|
|
11
|
+
// collapse rules so a collapsed grid's `1 / -1` override wins by source order.
|
|
12
|
+
.item {
|
|
13
|
+
// stylelint-disable-next-line property-disallowed-list -- Grid.Item's sanctioned job: per-cell column placement is the layout family's own prop, not consumer layout (see GridItem.tsx)
|
|
14
|
+
grid-column: var(--grid-item-span, auto);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// Gap presets — mirror Stack/Cluster scale + camelCase naming
|
|
18
|
+
.gapXs {
|
|
19
|
+
gap: var(--grid-gap-xs);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.gapSm {
|
|
23
|
+
gap: var(--grid-gap-sm);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.gapMd {
|
|
27
|
+
gap: var(--grid-gap-md);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.gapLg {
|
|
31
|
+
gap: var(--grid-gap-lg);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.gapXl {
|
|
35
|
+
gap: var(--grid-gap-xl);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.gap2xl {
|
|
39
|
+
gap: var(--grid-gap-2xl);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Item alignment — cross-axis
|
|
43
|
+
.alignItemsStart {
|
|
44
|
+
align-items: start;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.alignItemsCenter {
|
|
48
|
+
align-items: center;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.alignItemsEnd {
|
|
52
|
+
align-items: end;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.alignItemsStretch {
|
|
56
|
+
align-items: stretch;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Item alignment — main-axis
|
|
60
|
+
.justifyItemsStart {
|
|
61
|
+
justify-items: start;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.justifyItemsCenter {
|
|
65
|
+
justify-items: center;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.justifyItemsEnd {
|
|
69
|
+
justify-items: end;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.justifyItemsStretch {
|
|
73
|
+
justify-items: stretch;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// --- collapseBelow -----------------------------------------------------
|
|
77
|
+
// Only grids with the STRING form become size containers themselves, so
|
|
78
|
+
// existing grids get zero containment changes. Safe here because every rule
|
|
79
|
+
// below queries a DESCENDANT (`> *`), never the grid itself.
|
|
80
|
+
.collapsible {
|
|
81
|
+
container-type: inline-size;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// The map form needs the container on an ANCESTOR instead: its step rules
|
|
85
|
+
// re-template the GRID, and an element is never matched by a query against
|
|
86
|
+
// its own container (Split.module.scss says the same thing). Grid.tsx renders
|
|
87
|
+
// this zero-styling wrapper only for the map form — same trick as
|
|
88
|
+
// DashboardCanvas's `.sizer`.
|
|
89
|
+
// `display: grid` (not the default block) so the wrapper is geometrically
|
|
90
|
+
// transparent: its single child stretches in BOTH axes by default, so a grid
|
|
91
|
+
// that is itself a stretched flex/grid item keeps its height. A block wrapper
|
|
92
|
+
// would take the stretch and leave the grid at content height.
|
|
93
|
+
.stepContainer {
|
|
94
|
+
display: grid;
|
|
95
|
+
container-type: inline-size;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Below the container threshold every direct child spans the full row —
|
|
99
|
+
// the template is untouched but the grid renders as one visual column.
|
|
100
|
+
// Double class (.collapsible.collapseXx) gives specificity (0,2,0) so the
|
|
101
|
+
// collapse beats any single-class consumer `grid-column` rule regardless of
|
|
102
|
+
// CSS bundle emission order; vs `.item` it also still wins by source order.
|
|
103
|
+
@container (max-width: #{bp.$collapse-sm}) {
|
|
104
|
+
.collapsible.collapseSm > * {
|
|
105
|
+
// stylelint-disable-next-line property-disallowed-list -- collapse override is Grid's own placement mechanism, same sanction as `.item` above
|
|
106
|
+
grid-column: 1 / -1;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
@container (max-width: #{bp.$collapse-md}) {
|
|
111
|
+
.collapsible.collapseMd > * {
|
|
112
|
+
// stylelint-disable-next-line property-disallowed-list -- collapse override is Grid's own placement mechanism, same sanction as `.item` above
|
|
113
|
+
grid-column: 1 / -1;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
@container (max-width: #{bp.$collapse-lg}) {
|
|
118
|
+
.collapsible.collapseLg > * {
|
|
119
|
+
// stylelint-disable-next-line property-disallowed-list -- collapse override is Grid's own placement mechanism, same sanction as `.item` above
|
|
120
|
+
grid-column: 1 / -1;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// --- graduated (map) collapse ------------------------------------------
|
|
125
|
+
// Step track templates + per-item clamped spans are computed in Grid.tsx /
|
|
126
|
+
// GridItem.tsx and injected inline (--grid-columns-<bp>, --grid-item-span-<bp>).
|
|
127
|
+
// Declared lg → md → sm so when several steps match at a narrow width the
|
|
128
|
+
// smallest breakpoint wins by source order (equal specificity). Queried
|
|
129
|
+
// against `.stepContainer`, the wrapper above; `.grid.stepXx` keeps the same
|
|
130
|
+
// (0,2,0) specificity the old `.collapsible.stepXx` pair had.
|
|
131
|
+
@container (max-width: #{bp.$collapse-lg}) {
|
|
132
|
+
.grid.stepLg {
|
|
133
|
+
grid-template-columns: var(--grid-columns-lg, none);
|
|
134
|
+
|
|
135
|
+
> .item {
|
|
136
|
+
// stylelint-disable-next-line property-disallowed-list -- graduated collapse override is Grid's own placement mechanism, same sanction as `.item` above
|
|
137
|
+
grid-column: var(--grid-item-span-lg, auto);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
@container (max-width: #{bp.$collapse-md}) {
|
|
143
|
+
.grid.stepMd {
|
|
144
|
+
grid-template-columns: var(--grid-columns-md, none);
|
|
145
|
+
|
|
146
|
+
> .item {
|
|
147
|
+
// stylelint-disable-next-line property-disallowed-list -- graduated collapse override is Grid's own placement mechanism, same sanction as `.item` above
|
|
148
|
+
grid-column: var(--grid-item-span-md, auto);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
@container (max-width: #{bp.$collapse-sm}) {
|
|
154
|
+
.grid.stepSm {
|
|
155
|
+
grid-template-columns: var(--grid-columns-sm, none);
|
|
156
|
+
|
|
157
|
+
> .item {
|
|
158
|
+
// stylelint-disable-next-line property-disallowed-list -- graduated collapse override is Grid's own placement mechanism, same sanction as `.item` above
|
|
159
|
+
grid-column: var(--grid-item-span-sm, auto);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Grid.tokens.scss — Component-scoped tokens for <Grid>. Each token
|
|
2
|
+
// defaults to the primitive the SCSS used before this migration.
|
|
3
|
+
:root {
|
|
4
|
+
// Gap per size
|
|
5
|
+
--grid-gap-xs: var(--space-1);
|
|
6
|
+
--grid-gap-sm: var(--space-2);
|
|
7
|
+
--grid-gap-md: var(--space-3);
|
|
8
|
+
--grid-gap-lg: var(--space-4);
|
|
9
|
+
--grid-gap-xl: var(--space-6);
|
|
10
|
+
--grid-gap-2xl: var(--space-8);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// Collapse breakpoints live in ../_internal/collapse.scss (shared with Sortable).
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { forwardRef, type CSSProperties, type HTMLAttributes, type ReactElement } from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import styles from './Grid.module.scss';
|
|
4
|
+
import { GridItem } from './GridItem';
|
|
5
|
+
import {
|
|
6
|
+
CollapseColumnsContext,
|
|
7
|
+
COLLAPSE_BREAKPOINTS,
|
|
8
|
+
collapseTrackTemplate,
|
|
9
|
+
type CollapseBreakpoint,
|
|
10
|
+
type CollapseColumnsMap,
|
|
11
|
+
} from '../_internal/collapse';
|
|
12
|
+
|
|
13
|
+
/** Gap between cells. Same scale as Stack/Cluster: pixels 4/8/12/16/24/32. */
|
|
14
|
+
export type GridGap = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
15
|
+
|
|
16
|
+
/** Cross-axis (vertical within row) alignment of each cell. */
|
|
17
|
+
export type GridAlignItems = 'start' | 'center' | 'end' | 'stretch';
|
|
18
|
+
|
|
19
|
+
/** Main-axis (horizontal within track) alignment of each cell. */
|
|
20
|
+
export type GridJustifyItems = 'start' | 'center' | 'end' | 'stretch';
|
|
21
|
+
|
|
22
|
+
/** Container-width threshold below which a fixed-column grid collapses. `sm` 480px / `md` 640px / `lg` 768px. */
|
|
23
|
+
export type GridCollapseBreakpoint = CollapseBreakpoint;
|
|
24
|
+
export type { CollapseColumnsMap };
|
|
25
|
+
|
|
26
|
+
/** Limited polymorphic element type. Covers the layout / semantic elements Grid is likely to render as. */
|
|
27
|
+
export type GridAs =
|
|
28
|
+
| 'div'
|
|
29
|
+
| 'section'
|
|
30
|
+
| 'ul'
|
|
31
|
+
| 'ol'
|
|
32
|
+
| 'nav'
|
|
33
|
+
| 'main'
|
|
34
|
+
| 'aside'
|
|
35
|
+
| 'article'
|
|
36
|
+
| 'header'
|
|
37
|
+
| 'footer';
|
|
38
|
+
|
|
39
|
+
interface GridBaseProps {
|
|
40
|
+
/**
|
|
41
|
+
* Gap between cells.
|
|
42
|
+
* `xs` (4) / `sm` (8) / `md` (12, default) / `lg` (16) / `xl` (24) / `2xl` (32).
|
|
43
|
+
* Same scale as Stack and Cluster.
|
|
44
|
+
*/
|
|
45
|
+
gap?: GridGap;
|
|
46
|
+
/**
|
|
47
|
+
* Cross-axis (vertical within row) alignment of each cell. Default browser
|
|
48
|
+
* behavior is `stretch`; omit to use the default. Useful for cards of varying intrinsic height.
|
|
49
|
+
*/
|
|
50
|
+
alignItems?: GridAlignItems;
|
|
51
|
+
/**
|
|
52
|
+
* Main-axis (horizontal within track) alignment of each cell. Default
|
|
53
|
+
* browser behavior is `stretch`; omit to use the default.
|
|
54
|
+
*/
|
|
55
|
+
justifyItems?: GridJustifyItems;
|
|
56
|
+
/** Element to render. Default `'div'`. Limited to `div`, `section`, `ul`, `ol`, `nav`, `main`, `aside`, `article`, `header`, `footer` rather than fully polymorphic. */
|
|
57
|
+
as?: GridAs;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
interface GridFixedColumns extends GridBaseProps, HTMLAttributes<HTMLElement> {
|
|
61
|
+
/** Fixed number of equal-width columns. Mutually exclusive with `minColumnWidth`. */
|
|
62
|
+
columns: number;
|
|
63
|
+
minColumnWidth?: never;
|
|
64
|
+
/**
|
|
65
|
+
* Collapse to a single visual column when the GRID'S OWN width (container
|
|
66
|
+
* query, not viewport) drops below the preset: `sm` 480px / `md` 640px /
|
|
67
|
+
* `lg` 768px. Every child spans the full row below the threshold —
|
|
68
|
+
* `Grid.Item` spans included. Only valid with `columns` (auto-fit grids
|
|
69
|
+
* already reflow).
|
|
70
|
+
*
|
|
71
|
+
* Consumer inline `style={{ gridColumn }}` on a child still wins below the
|
|
72
|
+
* threshold (inline beats any stylesheet rule) — don't do that; use
|
|
73
|
+
* `Grid.Item span` instead.
|
|
74
|
+
*
|
|
75
|
+
* ❌ Anti-pattern: a `collapseBelow` grid must get its width from its
|
|
76
|
+
* parent. `container-type: inline-size` zeroes the grid's contribution to
|
|
77
|
+
* intrinsic sizing, so in an intrinsic-width context (`Split`'s default
|
|
78
|
+
* `auto` aside track, a `Cluster` item, `width: max-content`) it renders at
|
|
79
|
+
* width 0 — give the parent a concrete width instead. Whichever element
|
|
80
|
+
* carries the containment also becomes the containing block for
|
|
81
|
+
* absolutely-positioned descendants (layout containment) — the grid itself
|
|
82
|
+
* for the string form, the wrapper below for the map form.
|
|
83
|
+
*
|
|
84
|
+
* Also accepts a graduated breakpoint→columns map, e.g.
|
|
85
|
+
* `collapseBelow={{ md: 6, sm: 1 }}`: below 640px the grid re-templates to
|
|
86
|
+
* 6 columns (item spans clamp to fit — a span wider than the step becomes a
|
|
87
|
+
* full row), and below 480px to a single column. Use when jumping straight
|
|
88
|
+
* from N columns to 1 wastes tablet widths. When several breakpoints match,
|
|
89
|
+
* the smallest wins. Only `Grid.Item` children get span clamping; plain
|
|
90
|
+
* children auto-place into the step's tracks.
|
|
91
|
+
*
|
|
92
|
+
* ⚠️ The map form (and ONLY the map form) renders an extra wrapper `<div>`
|
|
93
|
+
* around the grid element — it carries `container-type: inline-size`,
|
|
94
|
+
* because re-templating the grid requires querying an ancestor, not the
|
|
95
|
+
* grid itself. Consequences: a `> child` CSS selector aimed at the grid from
|
|
96
|
+
* its parent now hits the wrapper instead, and layout the parent applies to
|
|
97
|
+
* "the Grid" (`flex: 1`, `grid-column`, `align-self` via `className`) lands
|
|
98
|
+
* on the grid *inside* the wrapper, where the parent's layout can't see it —
|
|
99
|
+
* put that layout on an element you control around the Grid. `ref`,
|
|
100
|
+
* `className`, `style`, `as` and all spread props stay on the grid element.
|
|
101
|
+
*/
|
|
102
|
+
collapseBelow?: GridCollapseBreakpoint | CollapseColumnsMap;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
interface GridAutoFit extends GridBaseProps, HTMLAttributes<HTMLElement> {
|
|
106
|
+
/**
|
|
107
|
+
* Minimum column width for auto-fit responsive layout. Columns reflow
|
|
108
|
+
* based on container width — no breakpoints needed. CSS length string
|
|
109
|
+
* like `'240px'` or `'15rem'`. Defaults to `'240px'` when neither
|
|
110
|
+
* `columns` nor `minColumnWidth` is provided.
|
|
111
|
+
*/
|
|
112
|
+
minColumnWidth?: string;
|
|
113
|
+
columns?: never;
|
|
114
|
+
collapseBelow?: never;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Public props — discriminated union enforces mutual exclusion. */
|
|
118
|
+
export type GridProps = GridFixedColumns | GridAutoFit;
|
|
119
|
+
|
|
120
|
+
const gapClass: Record<GridGap, string> = {
|
|
121
|
+
xs: styles.gapXs,
|
|
122
|
+
sm: styles.gapSm,
|
|
123
|
+
md: styles.gapMd,
|
|
124
|
+
lg: styles.gapLg,
|
|
125
|
+
xl: styles.gapXl,
|
|
126
|
+
'2xl': styles.gap2xl,
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
const alignItemsClass: Record<GridAlignItems, string> = {
|
|
130
|
+
start: styles.alignItemsStart,
|
|
131
|
+
center: styles.alignItemsCenter,
|
|
132
|
+
end: styles.alignItemsEnd,
|
|
133
|
+
stretch: styles.alignItemsStretch,
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
const justifyItemsClass: Record<GridJustifyItems, string> = {
|
|
137
|
+
start: styles.justifyItemsStart,
|
|
138
|
+
center: styles.justifyItemsCenter,
|
|
139
|
+
end: styles.justifyItemsEnd,
|
|
140
|
+
stretch: styles.justifyItemsStretch,
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
const collapseClass: Record<GridCollapseBreakpoint, string> = {
|
|
144
|
+
sm: styles.collapseSm,
|
|
145
|
+
md: styles.collapseMd,
|
|
146
|
+
lg: styles.collapseLg,
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
const stepClass: Record<CollapseBreakpoint, string> = {
|
|
150
|
+
sm: styles.stepSm,
|
|
151
|
+
md: styles.stepMd,
|
|
152
|
+
lg: styles.stepLg,
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const GridBase = forwardRef<HTMLElement, GridProps>(function Grid(
|
|
156
|
+
{
|
|
157
|
+
gap = 'md',
|
|
158
|
+
alignItems,
|
|
159
|
+
justifyItems,
|
|
160
|
+
as = 'div',
|
|
161
|
+
columns,
|
|
162
|
+
minColumnWidth,
|
|
163
|
+
collapseBelow,
|
|
164
|
+
className,
|
|
165
|
+
style,
|
|
166
|
+
...rest
|
|
167
|
+
},
|
|
168
|
+
ref,
|
|
169
|
+
) {
|
|
170
|
+
const template =
|
|
171
|
+
columns !== undefined
|
|
172
|
+
? collapseTrackTemplate(columns)
|
|
173
|
+
: `repeat(auto-fit, minmax(${minColumnWidth ?? '240px'}, 1fr))`;
|
|
174
|
+
|
|
175
|
+
const collapseMap = typeof collapseBelow === 'object' ? collapseBelow : undefined;
|
|
176
|
+
const collapseKeys = collapseMap
|
|
177
|
+
? COLLAPSE_BREAKPOINTS.filter((b) => collapseMap[b] !== undefined)
|
|
178
|
+
: [];
|
|
179
|
+
const stepVars = Object.fromEntries(
|
|
180
|
+
collapseKeys.map((b) => [`--grid-columns-${b}`, collapseTrackTemplate(collapseMap![b]!)]),
|
|
181
|
+
);
|
|
182
|
+
|
|
183
|
+
// `as` is a string union of intrinsic JSX elements; cast through unknown
|
|
184
|
+
// for the limited union. At runtime React just uses the element name.
|
|
185
|
+
const Tag = as as unknown as 'div';
|
|
186
|
+
|
|
187
|
+
// Tag is constrained at the type level via GridAs; the ref + rest casts
|
|
188
|
+
// satisfy React's intrinsic-element signature without per-tag branching.
|
|
189
|
+
const grid = (
|
|
190
|
+
<Tag
|
|
191
|
+
ref={ref as React.Ref<HTMLDivElement>}
|
|
192
|
+
className={clsx(
|
|
193
|
+
styles.grid,
|
|
194
|
+
gapClass[gap],
|
|
195
|
+
alignItems && alignItemsClass[alignItems],
|
|
196
|
+
justifyItems && justifyItemsClass[justifyItems],
|
|
197
|
+
// String form only: those rules query descendants, so the grid can be
|
|
198
|
+
// its own container. The map form's container is the wrapper below.
|
|
199
|
+
typeof collapseBelow === 'string' && styles.collapsible,
|
|
200
|
+
typeof collapseBelow === 'string' && collapseClass[collapseBelow],
|
|
201
|
+
...collapseKeys.map((b) => stepClass[b]),
|
|
202
|
+
className,
|
|
203
|
+
)}
|
|
204
|
+
style={{ ...(style as CSSProperties), ...stepVars, ['--grid-columns' as string]: template }}
|
|
205
|
+
{...(rest as HTMLAttributes<HTMLDivElement>)}
|
|
206
|
+
/>
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
// Map form only: the step rules re-template the grid itself, and a container
|
|
210
|
+
// query never matches its own container — so the size container has to be a
|
|
211
|
+
// wrapper. `ref`, `className`, `style`, `as` and `{...rest}` all stay on the
|
|
212
|
+
// grid element; the wrapper is a bare div that only carries containment.
|
|
213
|
+
return collapseMap && collapseKeys.length > 0 ? (
|
|
214
|
+
<CollapseColumnsContext.Provider value={collapseMap}>
|
|
215
|
+
<div className={styles.stepContainer}>{grid}</div>
|
|
216
|
+
</CollapseColumnsContext.Provider>
|
|
217
|
+
) : (
|
|
218
|
+
grid
|
|
219
|
+
);
|
|
220
|
+
}) as <T extends GridProps>(props: T & { ref?: React.Ref<HTMLElement> }) => ReactElement;
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* 2D layout primitive: a CSS Grid wrapper with token-driven gap.
|
|
224
|
+
* @see docs/components/Grid.md
|
|
225
|
+
*/
|
|
226
|
+
export const Grid = Object.assign(GridBase, { Item: GridItem });
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { forwardRef, useContext, type CSSProperties, type HTMLAttributes } from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import {
|
|
4
|
+
resolveGridItemSpan,
|
|
5
|
+
resolveCollapsedGridItemSpan,
|
|
6
|
+
type GridItemSpan,
|
|
7
|
+
} from '../_internal/gridSpan';
|
|
8
|
+
import { CollapseColumnsContext } from '../_internal/collapse';
|
|
9
|
+
import styles from './Grid.module.scss';
|
|
10
|
+
|
|
11
|
+
// The span vocabulary (type + fraction→track resolver) is shared with
|
|
12
|
+
// Sortable.Item's grid arrangement; it lives in _internal/gridSpan so neither
|
|
13
|
+
// component imports the other. Re-exported here so `GridItemSpan` stays part of
|
|
14
|
+
// Grid's public type surface.
|
|
15
|
+
export type { GridItemSpan };
|
|
16
|
+
|
|
17
|
+
/** Elements `Grid.Item` can render as. `'li'` pairs with `<Grid as="ul">`. */
|
|
18
|
+
export type GridItemAs = 'div' | 'li' | 'section' | 'article' | 'aside';
|
|
19
|
+
|
|
20
|
+
export interface GridItemProps extends HTMLAttributes<HTMLElement> {
|
|
21
|
+
/**
|
|
22
|
+
* Column span. Omit for a single track (auto placement).
|
|
23
|
+
* - number — `span N` of the parent's `columns`.
|
|
24
|
+
* - `'25%' | '33%' | '50%' | '67%' | '75%'` — fractions of a 12-column
|
|
25
|
+
* grid; use with `columns={12}` (other counts won't produce the named
|
|
26
|
+
* fraction — documented, not validated).
|
|
27
|
+
* - `'100%'` / `'full'` — the entire row; safe with any Grid variant.
|
|
28
|
+
*/
|
|
29
|
+
span?: GridItemSpan;
|
|
30
|
+
/** Element to render. Default `'div'`. Use `'li'` inside `<Grid as="ul">`. */
|
|
31
|
+
as?: GridItemAs;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* A cell of `<Grid>` with an explicit column span.
|
|
36
|
+
* @see docs/components/Grid.md
|
|
37
|
+
*/
|
|
38
|
+
export const GridItem = forwardRef<HTMLElement, GridItemProps>(function GridItem(
|
|
39
|
+
{ span, as = 'div', className, style, ...rest },
|
|
40
|
+
ref,
|
|
41
|
+
) {
|
|
42
|
+
const resolved = resolveGridItemSpan(span);
|
|
43
|
+
|
|
44
|
+
// Set only when a graduated (map-form) `collapseBelow` grid is an
|
|
45
|
+
// ancestor — same always-stamp rationale as `--grid-item-span`: custom
|
|
46
|
+
// properties inherit, so every map key present on the container gets
|
|
47
|
+
// stamped on every Item (see resolveCollapsedGridItemSpan for clamping).
|
|
48
|
+
const collapseMap = useContext(CollapseColumnsContext);
|
|
49
|
+
const collapseVars = collapseMap
|
|
50
|
+
? Object.fromEntries(
|
|
51
|
+
(Object.keys(collapseMap) as (keyof typeof collapseMap)[]).map((b) => [
|
|
52
|
+
`--grid-item-span-${b}`,
|
|
53
|
+
resolveCollapsedGridItemSpan(span, collapseMap[b]!),
|
|
54
|
+
]),
|
|
55
|
+
)
|
|
56
|
+
: undefined;
|
|
57
|
+
|
|
58
|
+
const Tag = as as unknown as 'div';
|
|
59
|
+
return (
|
|
60
|
+
// Grid/Stack/Cluster are the layout primitives — `grid-column` via the
|
|
61
|
+
// `.item` class is Grid.Item's sanctioned job (Rule 4 does not apply to
|
|
62
|
+
// the layout family's own placement props).
|
|
63
|
+
<Tag
|
|
64
|
+
ref={ref as React.Ref<HTMLDivElement>}
|
|
65
|
+
className={clsx(styles.item, className)}
|
|
66
|
+
// Always set the property — custom properties inherit, so an unset
|
|
67
|
+
// span-less item nested under a spanned one would resolve the
|
|
68
|
+
// ancestor's value instead of `auto`.
|
|
69
|
+
style={{
|
|
70
|
+
...(style as CSSProperties),
|
|
71
|
+
...collapseVars,
|
|
72
|
+
['--grid-item-span' as string]: resolved ?? 'auto',
|
|
73
|
+
}}
|
|
74
|
+
{...(rest as HTMLAttributes<HTMLDivElement>)}
|
|
75
|
+
/>
|
|
76
|
+
);
|
|
77
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { Grid } from './Grid';
|
|
2
|
+
export type {
|
|
3
|
+
GridProps,
|
|
4
|
+
GridGap,
|
|
5
|
+
GridAlignItems,
|
|
6
|
+
GridJustifyItems,
|
|
7
|
+
GridAs,
|
|
8
|
+
GridCollapseBreakpoint,
|
|
9
|
+
CollapseColumnsMap,
|
|
10
|
+
} from './Grid';
|
|
11
|
+
export type { GridItemProps, GridItemSpan, GridItemAs } from './GridItem';
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
@use './Highlight.tokens';
|
|
2
|
+
@use '../../styles/mixins' as *;
|
|
3
|
+
|
|
4
|
+
// The overlay HighlightOverlay portals to <body>: position: fixed and its
|
|
5
|
+
// rect are inline (like Tour's spotlight), sized to the child's visible rect.
|
|
6
|
+
// Nothing on the child changes — its own shadow/outline/tone stripe stay.
|
|
7
|
+
// The ring is an outline outside the box; the waves (mixin pseudo-elements)
|
|
8
|
+
// grow outward from the edge. Being fixed on <body>, nothing clips either.
|
|
9
|
+
.overlay {
|
|
10
|
+
z-index: var(--highlight-z);
|
|
11
|
+
pointer-events: none;
|
|
12
|
+
border-radius: var(--highlight-radius);
|
|
13
|
+
outline: var(--highlight-ring-width) solid var(--highlight-color);
|
|
14
|
+
outline-offset: 0;
|
|
15
|
+
|
|
16
|
+
@include attention-waves(
|
|
17
|
+
var(--highlight-color),
|
|
18
|
+
var(--highlight-wave-duration),
|
|
19
|
+
var(--highlight-wave-delay),
|
|
20
|
+
var(--highlight-wave-reach),
|
|
21
|
+
var(--highlight-wave-edge),
|
|
22
|
+
var(--highlight-wave-glow),
|
|
23
|
+
var(--highlight-radius)
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.overlay[data-in-overlay] {
|
|
28
|
+
z-index: var(--z-overlay-floating);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Transition only on the fade-out, so entry appears at once.
|
|
32
|
+
.overlay[data-stage='fading'] {
|
|
33
|
+
opacity: var(--opacity-hidden);
|
|
34
|
+
transition: opacity var(--highlight-fade);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Waves are hidden by the mixin; the ring stays static and drops at once
|
|
38
|
+
// (onDone fires straight after `duration`, no fading stage).
|
|
39
|
+
@media (prefers-reduced-motion: reduce) {
|
|
40
|
+
.overlay[data-stage='fading'] {
|
|
41
|
+
transition: none;
|
|
42
|
+
}
|
|
43
|
+
}
|