@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,40 @@
|
|
|
1
|
+
import { File as FileIcon, FileImage, FileText, type LucideIcon } from 'lucide-react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Choose a lucide file-type icon component based on a File's MIME type and
|
|
5
|
+
* extension fallback. Returns the icon COMPONENT (not an element instance)
|
|
6
|
+
* so callers can decide on size / aria-label / className at the render site.
|
|
7
|
+
*
|
|
8
|
+
* Mapping:
|
|
9
|
+
* - `image/*` MIME → `FileImage`
|
|
10
|
+
* - `text/*` MIME → `FileText`
|
|
11
|
+
* - `application/pdf` → `FileText`
|
|
12
|
+
* - extension fallback for `.csv`, `.txt`, `.md`, `.json` → `FileText`
|
|
13
|
+
* - extension fallback for `.png`, `.jpg`, `.jpeg`, `.gif`, `.webp`, `.svg` → `FileImage`
|
|
14
|
+
* - everything else → `File` (generic)
|
|
15
|
+
*
|
|
16
|
+
* Private to the FileUpload directory — not re-exported from the package.
|
|
17
|
+
*/
|
|
18
|
+
export function iconForFile(file: File): LucideIcon {
|
|
19
|
+
const mime = file.type;
|
|
20
|
+
if (mime.startsWith('image/')) return FileImage;
|
|
21
|
+
if (mime.startsWith('text/')) return FileText;
|
|
22
|
+
if (mime === 'application/pdf') return FileText;
|
|
23
|
+
|
|
24
|
+
// Extension fallback for files where the browser didn't fill in `type`
|
|
25
|
+
// (rare but happens — empty MIME on .csv from some OSes).
|
|
26
|
+
const ext = file.name.slice(file.name.lastIndexOf('.')).toLowerCase();
|
|
27
|
+
if (ext === '.csv' || ext === '.txt' || ext === '.md' || ext === '.json') return FileText;
|
|
28
|
+
if (
|
|
29
|
+
ext === '.png' ||
|
|
30
|
+
ext === '.jpg' ||
|
|
31
|
+
ext === '.jpeg' ||
|
|
32
|
+
ext === '.gif' ||
|
|
33
|
+
ext === '.webp' ||
|
|
34
|
+
ext === '.svg'
|
|
35
|
+
) {
|
|
36
|
+
return FileImage;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return FileIcon;
|
|
40
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
@use '../../styles/mixins' as *;
|
|
2
|
+
@use './FilterChip.tokens';
|
|
3
|
+
|
|
4
|
+
.chip {
|
|
5
|
+
display: inline-flex;
|
|
6
|
+
align-items: center;
|
|
7
|
+
gap: var(--filter-chip-gap);
|
|
8
|
+
padding: var(--filter-chip-padding-y) var(--filter-chip-padding-x);
|
|
9
|
+
border: var(--border-width) solid var(--filter-chip-border-color);
|
|
10
|
+
border-radius: var(--filter-chip-radius);
|
|
11
|
+
background: var(--filter-chip-bg);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.body {
|
|
15
|
+
display: inline-flex;
|
|
16
|
+
align-items: center;
|
|
17
|
+
gap: var(--filter-chip-gap);
|
|
18
|
+
padding: 0;
|
|
19
|
+
border: none;
|
|
20
|
+
background: transparent;
|
|
21
|
+
font: inherit;
|
|
22
|
+
color: inherit;
|
|
23
|
+
cursor: pointer;
|
|
24
|
+
border-radius: var(--filter-chip-radius);
|
|
25
|
+
|
|
26
|
+
&:focus-visible {
|
|
27
|
+
@include focus-ring;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.label {
|
|
32
|
+
display: inline-flex;
|
|
33
|
+
align-items: center;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.value {
|
|
37
|
+
display: inline-flex;
|
|
38
|
+
align-items: center;
|
|
39
|
+
gap: var(--filter-chip-value-gap);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.dismiss {
|
|
43
|
+
display: inline-flex;
|
|
44
|
+
align-items: center;
|
|
45
|
+
justify-content: center;
|
|
46
|
+
padding: var(--filter-chip-dismiss-padding);
|
|
47
|
+
border: none;
|
|
48
|
+
background: transparent;
|
|
49
|
+
border-radius: var(--filter-chip-dismiss-radius);
|
|
50
|
+
cursor: pointer;
|
|
51
|
+
color: var(--filter-chip-dismiss-fg);
|
|
52
|
+
|
|
53
|
+
&:hover {
|
|
54
|
+
background: var(--filter-chip-dismiss-bg-hover);
|
|
55
|
+
color: var(--filter-chip-dismiss-fg-hover);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
&:focus-visible {
|
|
59
|
+
@include focus-ring;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// FilterChip.tokens.scss — Component-scoped tokens for <FilterChip>. The
|
|
2
|
+
// pill chrome (bg/border/radius/padding) plus the dismiss-button hover state
|
|
3
|
+
// are tokenized here. The per-tone value-dot colors are driven by a
|
|
4
|
+
// [data-tone] attribute selector in FilterChip.module.scss and intentionally
|
|
5
|
+
// stay on palette tokens — overriding the dot color is not a chip-level
|
|
6
|
+
// concern.
|
|
7
|
+
:root {
|
|
8
|
+
// Chip pill
|
|
9
|
+
--filter-chip-gap: var(--space-2);
|
|
10
|
+
--filter-chip-padding-y: var(--space-1);
|
|
11
|
+
--filter-chip-padding-x: var(--space-2);
|
|
12
|
+
--filter-chip-border-color: var(--color-border);
|
|
13
|
+
--filter-chip-radius: var(--radius-sm);
|
|
14
|
+
--filter-chip-bg: var(--color-bg);
|
|
15
|
+
|
|
16
|
+
// Value cluster (label + dot + value text)
|
|
17
|
+
--filter-chip-value-gap: var(--space-2);
|
|
18
|
+
|
|
19
|
+
// Dismiss button
|
|
20
|
+
--filter-chip-dismiss-padding: var(--space-05);
|
|
21
|
+
--filter-chip-dismiss-radius: var(--radius-sm);
|
|
22
|
+
--filter-chip-dismiss-fg: var(--color-fg-subtle);
|
|
23
|
+
--filter-chip-dismiss-bg-hover: var(--color-bg-muted);
|
|
24
|
+
--filter-chip-dismiss-fg-hover: var(--color-fg);
|
|
25
|
+
}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { forwardRef, type HTMLAttributes, type ReactNode } from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import { X } from 'lucide-react';
|
|
4
|
+
import { Text } from '../Text';
|
|
5
|
+
import { type BadgeTone } from '../Badge';
|
|
6
|
+
import { Dot } from '../Dot';
|
|
7
|
+
import { type PaletteColor } from '../../palette';
|
|
8
|
+
import { useTranslation } from '../../i18n/useTranslation';
|
|
9
|
+
import styles from './FilterChip.module.scss';
|
|
10
|
+
|
|
11
|
+
// ----------------------------------------------------------------------------
|
|
12
|
+
// Public types
|
|
13
|
+
// ----------------------------------------------------------------------------
|
|
14
|
+
|
|
15
|
+
export interface FilterChipProps extends Omit<HTMLAttributes<HTMLDivElement>, 'role'> {
|
|
16
|
+
/**
|
|
17
|
+
* Dismiss callback. When provided, the chip renders a trailing `×`
|
|
18
|
+
* button wired to this handler; the chip itself does NOT animate or
|
|
19
|
+
* unmount — the consumer's state update must remove the chip. Omit
|
|
20
|
+
* the prop to render a read-only chip with no dismiss button.
|
|
21
|
+
*/
|
|
22
|
+
onDismiss?: () => void;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Override the dismiss button's `aria-label`. Defaults to the i18n value
|
|
26
|
+
* at `filterChip.dismiss` (`'Remove filter'` in English) when omitted OR
|
|
27
|
+
* empty — an empty string is not an explicit name, so it takes the default
|
|
28
|
+
* too. Pass a
|
|
29
|
+
* contextual label (e.g., `'Remove Event: auth.* filter'`) when the
|
|
30
|
+
* chip's filter category isn't obvious from the surrounding
|
|
31
|
+
* screen-reader context.
|
|
32
|
+
*/
|
|
33
|
+
dismissLabel?: string;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Makes the chip BODY interactive: when provided, the Label/Value content is
|
|
37
|
+
* wrapped in a `<button>` that fires `onActivate` on click and Enter/Space
|
|
38
|
+
* (native button keyboard). Use for *editable* filters — e.g. a date-range
|
|
39
|
+
* chip whose body re-opens its range-picker. Wire it to a controlled
|
|
40
|
+
* `<Popover open onOpenChange>` to open an editor popover.
|
|
41
|
+
*
|
|
42
|
+
* The dismiss ✕ stays a separate button whose click stops propagation, so
|
|
43
|
+
* removing the filter never fires `onActivate` (and never bubbles to an
|
|
44
|
+
* ancestor click handler). Omit for a read-only chip (current behavior).
|
|
45
|
+
*
|
|
46
|
+
* Controlled-only: FilterChip does NOT consume `Popover.Trigger`'s injected
|
|
47
|
+
* ref/ARIA, so wrapping it in `<Popover.Trigger>` won't auto-wire it — drive
|
|
48
|
+
* the popover's `open` yourself from this callback (see the example above).
|
|
49
|
+
*/
|
|
50
|
+
onActivate?: () => void;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Open state of the disclosure the body opens (e.g. the editor popover),
|
|
54
|
+
* surfaced as `aria-expanded` on the body button (which also carries
|
|
55
|
+
* `aria-haspopup="dialog"`). Only meaningful with
|
|
56
|
+
* `onActivate`. Omit if the body doesn't toggle a disclosure.
|
|
57
|
+
*/
|
|
58
|
+
expanded?: boolean;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* One or two `FilterChip.Label` / `FilterChip.Value` subcomponents.
|
|
62
|
+
* Use both for `Label: Value` chips; pass just a Value for chips
|
|
63
|
+
* where the category is implicit (e.g., a tenant slug).
|
|
64
|
+
*/
|
|
65
|
+
children: ReactNode;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface FilterChipLabelProps extends HTMLAttributes<HTMLSpanElement> {
|
|
69
|
+
/**
|
|
70
|
+
* The category text — typically a noun describing the filter
|
|
71
|
+
* dimension (`Event`, `Tenant`, `Stage`, `Owner`). Rendered muted so
|
|
72
|
+
* the Value is the visual anchor.
|
|
73
|
+
*/
|
|
74
|
+
children: ReactNode;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export interface FilterChipValueProps extends HTMLAttributes<HTMLSpanElement> {
|
|
78
|
+
/**
|
|
79
|
+
* Optional full `PaletteColor` (one of the 30 named categorical colors)
|
|
80
|
+
* for the leading dot. Use when the 6 semantic tones aren't enough to
|
|
81
|
+
* distinguish filter categories (e.g., per-tenant or per-tag color
|
|
82
|
+
* coding that matches an `OptionsPicker` group). Takes precedence over
|
|
83
|
+
* `tone` when both are set. Renders a bare `<Dot>` in that color.
|
|
84
|
+
*/
|
|
85
|
+
color?: PaletteColor;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Optional dot tone. When set, prefixes a 6px colored circle before
|
|
89
|
+
* the value text — use to distinguish filter categories that share
|
|
90
|
+
* a screen (e.g., event filters get a tone-matched dot, tenant
|
|
91
|
+
* filters get no dot). Reuses Badge's tone palette: `neutral`,
|
|
92
|
+
* `info`, `success`, `warning`, `danger`, `purple`. Omit for plain
|
|
93
|
+
* text values. For a richer categorical color, use `color` instead.
|
|
94
|
+
*/
|
|
95
|
+
tone?: BadgeTone;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* The value text — what the filter is actually filtering by
|
|
99
|
+
* (`auth.*`, `beta`, `Won`). Pair with an optional `tone` / `color`
|
|
100
|
+
* dot to categorize.
|
|
101
|
+
*/
|
|
102
|
+
children: ReactNode;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// ----------------------------------------------------------------------------
|
|
106
|
+
// Root
|
|
107
|
+
// ----------------------------------------------------------------------------
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Dismissible "active filter" pill with optional `Label` and `Value` children.
|
|
111
|
+
* @see docs/components/FilterChip.md
|
|
112
|
+
*/
|
|
113
|
+
const FilterChipRoot = forwardRef<HTMLDivElement, FilterChipProps>(function FilterChipRoot(
|
|
114
|
+
{ onDismiss, dismissLabel, onActivate, expanded, className, children, ...rest },
|
|
115
|
+
ref,
|
|
116
|
+
) {
|
|
117
|
+
const t = useTranslation();
|
|
118
|
+
return (
|
|
119
|
+
<div
|
|
120
|
+
ref={ref}
|
|
121
|
+
className={clsx(styles.chip, className)}
|
|
122
|
+
// {...rest} first so role="group" wins — locked semantics per Hard rule 6 pattern B.
|
|
123
|
+
{...rest}
|
|
124
|
+
role="group"
|
|
125
|
+
>
|
|
126
|
+
{onActivate ? (
|
|
127
|
+
<button
|
|
128
|
+
type="button"
|
|
129
|
+
className={styles.body}
|
|
130
|
+
onClick={onActivate}
|
|
131
|
+
aria-haspopup="dialog"
|
|
132
|
+
aria-expanded={expanded}
|
|
133
|
+
>
|
|
134
|
+
{children}
|
|
135
|
+
</button>
|
|
136
|
+
) : (
|
|
137
|
+
children
|
|
138
|
+
)}
|
|
139
|
+
{onDismiss && (
|
|
140
|
+
<button
|
|
141
|
+
type="button"
|
|
142
|
+
className={styles.dismiss}
|
|
143
|
+
// stopPropagation: removing the filter must not fire the body activate
|
|
144
|
+
// OR bubble to a wrapping Popover.Trigger / ancestor click handler.
|
|
145
|
+
onClick={(e) => {
|
|
146
|
+
e.stopPropagation();
|
|
147
|
+
onDismiss();
|
|
148
|
+
}}
|
|
149
|
+
aria-label={dismissLabel || t('filterChip.dismiss')}
|
|
150
|
+
>
|
|
151
|
+
<X size={12} aria-hidden="true" />
|
|
152
|
+
</button>
|
|
153
|
+
)}
|
|
154
|
+
</div>
|
|
155
|
+
);
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
// ----------------------------------------------------------------------------
|
|
159
|
+
// Label
|
|
160
|
+
// ----------------------------------------------------------------------------
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Label slot for the chip's filter category.
|
|
164
|
+
* @see docs/components/FilterChip.md
|
|
165
|
+
*/
|
|
166
|
+
const FilterChipLabel = forwardRef<HTMLSpanElement, FilterChipLabelProps>(function FilterChipLabel(
|
|
167
|
+
{ className, children, ...rest },
|
|
168
|
+
ref,
|
|
169
|
+
) {
|
|
170
|
+
return (
|
|
171
|
+
<span ref={ref} className={clsx(styles.label, className)} {...rest}>
|
|
172
|
+
<Text as="span" size="sm" tone="muted">
|
|
173
|
+
{children}
|
|
174
|
+
</Text>
|
|
175
|
+
</span>
|
|
176
|
+
);
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
// ----------------------------------------------------------------------------
|
|
180
|
+
// Value
|
|
181
|
+
// ----------------------------------------------------------------------------
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Value slot for the chip's filter value, with an optional tone or palette-color dot.
|
|
185
|
+
* @see docs/components/FilterChip.md
|
|
186
|
+
*/
|
|
187
|
+
const FilterChipValue = forwardRef<HTMLSpanElement, FilterChipValueProps>(function FilterChipValue(
|
|
188
|
+
{ color, tone, className, children, ...rest },
|
|
189
|
+
ref,
|
|
190
|
+
) {
|
|
191
|
+
return (
|
|
192
|
+
<span ref={ref} className={clsx(styles.value, className)} {...rest}>
|
|
193
|
+
{(color || tone) && <Dot color={color} tone={tone} />}
|
|
194
|
+
<Text as="span" size="sm">
|
|
195
|
+
{children}
|
|
196
|
+
</Text>
|
|
197
|
+
</span>
|
|
198
|
+
);
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
// ----------------------------------------------------------------------------
|
|
202
|
+
// Compound export
|
|
203
|
+
// ----------------------------------------------------------------------------
|
|
204
|
+
|
|
205
|
+
export const FilterChip = Object.assign(FilterChipRoot, {
|
|
206
|
+
Label: FilterChipLabel,
|
|
207
|
+
Value: FilterChipValue,
|
|
208
|
+
});
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { FilterChip } from './FilterChip';
|
|
2
|
+
export type { FilterChipProps, FilterChipLabelProps, FilterChipValueProps } from './FilterChip';
|
|
3
|
+
// Re-export the tone type so consumers using FilterChip.Value tone={...}
|
|
4
|
+
// can import the union from the same module rather than reaching into Badge.
|
|
5
|
+
export type { BadgeTone } from '../Badge';
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
@use './FlowCanvas.tokens';
|
|
2
|
+
@use '../../styles/mixins' as *;
|
|
3
|
+
|
|
4
|
+
.root {
|
|
5
|
+
// `relative` is allowed by Rule 4 as an internal child anchor: nodes are
|
|
6
|
+
// absolutely positioned over an SVG edge underlay inside the stage.
|
|
7
|
+
position: relative;
|
|
8
|
+
width: 100%;
|
|
9
|
+
height: 100%;
|
|
10
|
+
overflow: hidden;
|
|
11
|
+
background-color: var(--flow-canvas-bg);
|
|
12
|
+
background-image: radial-gradient(var(--flow-canvas-grid-dot) 1px, transparent 1px);
|
|
13
|
+
background-size: var(--flow-canvas-grid-size) var(--flow-canvas-grid-size);
|
|
14
|
+
border-radius: var(--flow-node-radius);
|
|
15
|
+
touch-action: none; // claim touch drags so the page doesn't scroll instead
|
|
16
|
+
cursor: grab;
|
|
17
|
+
|
|
18
|
+
// Never paint the UA focus outline — our indicator is the box-shadow ring
|
|
19
|
+
// below. A `:focus-visible` reset misses a plain MOUSE `:focus` (e.g. clicking
|
|
20
|
+
// empty canvas), where Chrome on Windows paints `outline: auto` around the
|
|
21
|
+
// whole role=application canvas. Suppress it in every focus state.
|
|
22
|
+
outline: none;
|
|
23
|
+
|
|
24
|
+
// Canvas keyboard-focus ring. Since #505 the mixin PAINTS an outline rather
|
|
25
|
+
// than suppressing one — the raw UA outline is killed by the unconditional
|
|
26
|
+
// `outline: none` above instead, which applies in every focus state.
|
|
27
|
+
&:focus-visible {
|
|
28
|
+
@include focus-ring;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Keyboard roving moves real DOM focus onto the child node/edge (which then
|
|
32
|
+
// shows its own ring/recolor), but selecting an edge by CLICK leaves focus on
|
|
33
|
+
// this root (SVG paths don't take reliable click-focus), so the ring above
|
|
34
|
+
// would wrap the WHOLE canvas in a loose rounded box that reads as a giant
|
|
35
|
+
// selection frame around the selected item. That item already shows its own
|
|
36
|
+
// highlight (node accent border / edge recolor), so drop the redundant ring
|
|
37
|
+
// whenever a selection is present. The attribute is gated on the selection
|
|
38
|
+
// resolving to a rendered item (see FlowCanvas.tsx), so a dangling selection
|
|
39
|
+
// keeps the ring — the focused-but-empty state stays visible for keyboard
|
|
40
|
+
// users (WCAG 2.4.7).
|
|
41
|
+
// `outline: none`, not `box-shadow: none`: the focus-ring mixin paints an
|
|
42
|
+
// outline since #505, so cancelling box-shadow cancels nothing and the whole
|
|
43
|
+
// canvas got its giant frame back. This also suppresses the UA outline, which
|
|
44
|
+
// the old wording credited to the mixin.
|
|
45
|
+
&[data-flow-has-selection]:focus-visible {
|
|
46
|
+
outline: none;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.rootPanning {
|
|
51
|
+
cursor: grabbing;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.rootMaximized {
|
|
55
|
+
// stylelint-disable-next-line declaration-property-value-disallowed-list -- must be fixed to fill the viewport
|
|
56
|
+
position: fixed;
|
|
57
|
+
top: 0;
|
|
58
|
+
left: 0;
|
|
59
|
+
width: 100vw;
|
|
60
|
+
width: 100dvw;
|
|
61
|
+
height: 100vh;
|
|
62
|
+
height: 100dvh;
|
|
63
|
+
z-index: var(--flow-canvas-maximized-z);
|
|
64
|
+
border-radius: 0;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.stage {
|
|
68
|
+
position: absolute;
|
|
69
|
+
top: 0;
|
|
70
|
+
left: 0;
|
|
71
|
+
transform-origin: 0 0;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.edges {
|
|
75
|
+
position: absolute;
|
|
76
|
+
top: 0;
|
|
77
|
+
left: 0;
|
|
78
|
+
overflow: visible;
|
|
79
|
+
pointer-events: none;
|
|
80
|
+
|
|
81
|
+
// The global reset clamps `svg { max-width: 100% }` — and this svg's
|
|
82
|
+
// containing block (.stage) is a zero-width absolute anchor, so the clamp
|
|
83
|
+
// resolves to 0. A zero-width SVG viewport DISABLES RENDERING per spec:
|
|
84
|
+
// without this override no edge ever paints in a real browser (jsdom
|
|
85
|
+
// applies no CSS, so unit tests cannot catch it).
|
|
86
|
+
max-width: none;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.edgePath {
|
|
90
|
+
fill: none;
|
|
91
|
+
pointer-events: none;
|
|
92
|
+
stroke: var(--flow-edge-stroke);
|
|
93
|
+
stroke-width: var(--flow-edge-width);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
.edgePath[data-active='true'] {
|
|
97
|
+
stroke: var(--flow-edge-stroke-active);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.edgeHit {
|
|
101
|
+
fill: none;
|
|
102
|
+
cursor: pointer;
|
|
103
|
+
pointer-events: stroke;
|
|
104
|
+
stroke: transparent;
|
|
105
|
+
stroke-width: var(--flow-edge-hit-width);
|
|
106
|
+
|
|
107
|
+
// Keep the 24px corridor in SCREEN pixels regardless of stage zoom —
|
|
108
|
+
// without this, fit-zoom < 1 shrinks the only pointer target of an
|
|
109
|
+
// unlabeled edge below the WCAG 2.5.8 minimum.
|
|
110
|
+
vector-effect: non-scaling-stroke;
|
|
111
|
+
|
|
112
|
+
// Never paint the UA focus outline. This corridor is a WIDE invisible stroke,
|
|
113
|
+
// so an `outline: auto` traces a big rounded box around the edge's bounding
|
|
114
|
+
// area. A `:focus-visible`-scoped reset is NOT enough: a MOUSE click gives
|
|
115
|
+
// plain `:focus` (not `-visible`), and Chrome on Windows paints `outline:
|
|
116
|
+
// auto` in that state (macOS Chromium doesn't — hence it only reproduces on
|
|
117
|
+
// Windows). Focus/selection is shown by recoloring the visible .edgePath
|
|
118
|
+
// (below / [data-active]), so suppress the outline outright.
|
|
119
|
+
outline: none;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Keyboard focus (E-key edge cycling) must stay visible even when the
|
|
123
|
+
// consumer controls `selection` and pins it elsewhere — selection-follows-
|
|
124
|
+
// focus cannot flip `data-active` then. Paint the sibling visible path
|
|
125
|
+
// instead of the hit path itself: with `pointer-events: stroke` the hit
|
|
126
|
+
// corridor IS the stroke, so restyling .edgeHit's stroke-width on focus
|
|
127
|
+
// would collapse the clickable target from the wide hit width down to the
|
|
128
|
+
// visible edge width (WCAG 2.5.8 target size).
|
|
129
|
+
g:has(> .edgeHit:focus-visible) > .edgePath {
|
|
130
|
+
stroke: var(--flow-edge-stroke-active);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.markerFill {
|
|
134
|
+
fill: var(--flow-edge-stroke);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.markerFillActive {
|
|
138
|
+
fill: var(--flow-edge-stroke-active);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.ghostEdge {
|
|
142
|
+
fill: none;
|
|
143
|
+
pointer-events: none;
|
|
144
|
+
stroke: var(--flow-edge-stroke-active);
|
|
145
|
+
stroke-dasharray: var(--space-1) var(--space-1);
|
|
146
|
+
stroke-width: var(--flow-edge-width);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Edge rewire endpoint handles — an HTML overlay ABOVE the nodes (see
|
|
150
|
+
// FlowCanvas.tsx), not SVG inside the edge layer, so a node <div> can't occlude
|
|
151
|
+
// the grab target. Positioned in screen px, so the hit size and dot stay
|
|
152
|
+
// constant regardless of stage zoom.
|
|
153
|
+
.endpointHandle {
|
|
154
|
+
position: absolute;
|
|
155
|
+
|
|
156
|
+
// Screen-constant hit target (WCAG 2.5.8) larger than the visible dot.
|
|
157
|
+
width: var(--flow-handle-hit-size);
|
|
158
|
+
height: var(--flow-handle-hit-size);
|
|
159
|
+
display: flex;
|
|
160
|
+
align-items: center;
|
|
161
|
+
justify-content: center;
|
|
162
|
+
transform: translate(-50%, -50%); // center on the endpoint's screen point
|
|
163
|
+
cursor: grab;
|
|
164
|
+
z-index: 1; // above the nodes within the canvas
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.endpointDot {
|
|
168
|
+
width: var(--flow-endpoint-size);
|
|
169
|
+
height: var(--flow-endpoint-size);
|
|
170
|
+
background: var(--flow-endpoint-bg);
|
|
171
|
+
border: var(--border-width-emphasis) solid var(--flow-endpoint-ring);
|
|
172
|
+
border-radius: var(--radius-full);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.node {
|
|
176
|
+
position: absolute;
|
|
177
|
+
display: flex;
|
|
178
|
+
align-items: center;
|
|
179
|
+
width: max-content;
|
|
180
|
+
gap: var(--flow-node-gap);
|
|
181
|
+
padding: var(--flow-node-padding-y) var(--flow-node-padding-x);
|
|
182
|
+
background: var(--flow-node-bg);
|
|
183
|
+
border: var(--border-width) solid var(--flow-node-border);
|
|
184
|
+
border-left: var(--flow-node-accent-width) solid var(--flow-node-color);
|
|
185
|
+
border-radius: var(--flow-node-radius);
|
|
186
|
+
box-shadow: var(--flow-node-shadow);
|
|
187
|
+
color: var(--color-fg);
|
|
188
|
+
font-size: var(--font-size-sm);
|
|
189
|
+
font-weight: var(--font-weight-medium);
|
|
190
|
+
cursor: grab;
|
|
191
|
+
user-select: none;
|
|
192
|
+
touch-action: none;
|
|
193
|
+
|
|
194
|
+
// Never paint the UA focus outline — selection is the accent border
|
|
195
|
+
// ([data-selected]) and keyboard focus is the glow ring (:focus-visible). A
|
|
196
|
+
// `:focus-visible` reset misses a plain MOUSE `:focus`, where Chrome on
|
|
197
|
+
// Windows paints `outline: auto` around this role=button node.
|
|
198
|
+
outline: none;
|
|
199
|
+
|
|
200
|
+
&:focus-visible {
|
|
201
|
+
@include focus-ring;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.node[data-selected='true'] {
|
|
206
|
+
// Four-value form: highlight three sides but keep the left accent stripe on
|
|
207
|
+
// the node's own color — selection must not erase per-node identity.
|
|
208
|
+
// Deliberately NO ring here: the glow ring is reserved for keyboard focus
|
|
209
|
+
// (:focus-visible above), so mouse clicks don't read as focus outlines —
|
|
210
|
+
// the accent border alone marks the selection.
|
|
211
|
+
border-color: var(--color-accent) var(--color-accent) var(--color-accent) var(--flow-node-color);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.node[data-dragging='true'] {
|
|
215
|
+
cursor: grabbing;
|
|
216
|
+
box-shadow: var(--shadow-lg);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// Decorative — marks a valid connection drop target, not focus. Stays a
|
|
220
|
+
// box-shadow so it cannot suppress a real focus indicator (#505).
|
|
221
|
+
.node[data-connect-target='true'] {
|
|
222
|
+
box-shadow: 0 0 0 var(--ring-width) var(--ring-success);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
.nodeLabel {
|
|
226
|
+
white-space: nowrap;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.handle {
|
|
230
|
+
// The span is the (invisible) 24px pointer target — WCAG 2.5.8: this is
|
|
231
|
+
// the only pointer path that creates an edge, and a missed press starts a
|
|
232
|
+
// node drag instead. The visible dot is the ::after.
|
|
233
|
+
position: absolute;
|
|
234
|
+
top: 50%;
|
|
235
|
+
right: 0;
|
|
236
|
+
display: flex;
|
|
237
|
+
align-items: center;
|
|
238
|
+
justify-content: center;
|
|
239
|
+
width: var(--flow-handle-hit-size);
|
|
240
|
+
height: var(--flow-handle-hit-size);
|
|
241
|
+
cursor: crosshair;
|
|
242
|
+
opacity: var(--opacity-hidden);
|
|
243
|
+
transform: translate(50%, -50%);
|
|
244
|
+
transition: opacity var(--transition-fast);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.handle::after {
|
|
248
|
+
content: '';
|
|
249
|
+
width: var(--flow-handle-size);
|
|
250
|
+
height: var(--flow-handle-size);
|
|
251
|
+
background: var(--flow-handle-bg);
|
|
252
|
+
border-radius: var(--radius-full);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.node:hover .handle,
|
|
256
|
+
.node:focus-visible .handle {
|
|
257
|
+
opacity: var(--opacity-visible);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.chip {
|
|
261
|
+
position: absolute;
|
|
262
|
+
width: max-content;
|
|
263
|
+
padding: var(--flow-chip-padding-y) var(--flow-chip-padding-x);
|
|
264
|
+
background: var(--flow-chip-bg);
|
|
265
|
+
border: var(--border-width) solid var(--flow-chip-border);
|
|
266
|
+
border-radius: var(--flow-chip-radius);
|
|
267
|
+
color: var(--color-fg-muted);
|
|
268
|
+
font-size: var(--font-size-xs);
|
|
269
|
+
white-space: nowrap;
|
|
270
|
+
cursor: pointer;
|
|
271
|
+
transform: translate(-50%, -50%);
|
|
272
|
+
user-select: none;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
.controls {
|
|
276
|
+
position: absolute;
|
|
277
|
+
bottom: var(--space-3);
|
|
278
|
+
left: var(--space-3);
|
|
279
|
+
display: flex;
|
|
280
|
+
gap: var(--space-1);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
.controlsTopLeft {
|
|
284
|
+
position: absolute;
|
|
285
|
+
top: var(--space-3);
|
|
286
|
+
left: var(--space-3);
|
|
287
|
+
display: flex;
|
|
288
|
+
gap: var(--space-1);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
.controlsTopRight {
|
|
292
|
+
position: absolute;
|
|
293
|
+
top: var(--space-3);
|
|
294
|
+
right: var(--space-3);
|
|
295
|
+
display: flex;
|
|
296
|
+
gap: var(--space-1);
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
.selectionActions {
|
|
300
|
+
position: absolute;
|
|
301
|
+
z-index: var(--flow-selection-actions-z);
|
|
302
|
+
display: inline-flex;
|
|
303
|
+
align-items: center;
|
|
304
|
+
gap: var(--space-1);
|
|
305
|
+
|
|
306
|
+
// Node anchor = the node's top-right corner; nudge the toolbar just outside
|
|
307
|
+
// it (up-right) so it doesn't sit on top of the node.
|
|
308
|
+
transform: translate(
|
|
309
|
+
var(--flow-selection-actions-offset-x),
|
|
310
|
+
var(--flow-selection-actions-offset-y)
|
|
311
|
+
);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
// Edge anchor = the edge's MIDPOINT. Center the toolbar horizontally on it and
|
|
315
|
+
// lift the whole bar above the edge by a small gap, so it floats "by the
|
|
316
|
+
// middle" of the edge without covering the line itself.
|
|
317
|
+
.selectionActions[data-flow-selection-edge] {
|
|
318
|
+
transform: translate(-50%, calc(-100% - var(--space-2)));
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
.srOnly {
|
|
322
|
+
@include visually-hidden;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
@media (prefers-reduced-motion: reduce) {
|
|
326
|
+
.handle {
|
|
327
|
+
transition: none;
|
|
328
|
+
}
|
|
329
|
+
}
|