@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,451 @@
|
|
|
1
|
+
import type { PaletteColor } from '../../palette';
|
|
2
|
+
|
|
3
|
+
export type CalendarEventTone = 'neutral' | 'accent' | 'success' | 'warning' | 'danger';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* One event to render on the Calendar.
|
|
7
|
+
*
|
|
8
|
+
* - `startsAt` is the local-time start instant. `endsAt` (optional) is the
|
|
9
|
+
* local-time end instant. For multi-day events, the bar extends from the
|
|
10
|
+
* start day through the end day inclusive; week boundaries split it into
|
|
11
|
+
* continuous bars with flattened edges.
|
|
12
|
+
* - `allDay: true` renders a tone-filled band without a time prefix
|
|
13
|
+
* (birthdays, vacations). Default `false` renders a tone-tinted bar with
|
|
14
|
+
* a hour-formatted time prefix.
|
|
15
|
+
*/
|
|
16
|
+
export interface CalendarEvent {
|
|
17
|
+
/** Stable unique ID. Used as React key and as the `onEventClick` argument. */
|
|
18
|
+
id: string;
|
|
19
|
+
/**
|
|
20
|
+
* Which resource column this event belongs to, matched against
|
|
21
|
+
* `CalendarResource.id`. Only meaningful when `<Calendar>` is given
|
|
22
|
+
* `resources` and rendered in `view="day"` — every other view ignores it.
|
|
23
|
+
*
|
|
24
|
+
* A timed event whose `resourceId` matches no supplied resource — or that
|
|
25
|
+
* omits it entirely — lands in the trailing "unassigned" column, which is
|
|
26
|
+
* only rendered when at least one such event exists. All-day events with no
|
|
27
|
+
* `resourceId` are treated as day-wide and span every column.
|
|
28
|
+
*/
|
|
29
|
+
resourceId?: string;
|
|
30
|
+
/** Display title. Single line; ellipses on overflow. */
|
|
31
|
+
title: string;
|
|
32
|
+
/** When the event starts (local time). */
|
|
33
|
+
startsAt: Date;
|
|
34
|
+
/** When the event ends (local time). Defaults to the start day for `allDay`, or to a point-in-time for timed events. */
|
|
35
|
+
endsAt?: Date;
|
|
36
|
+
/**
|
|
37
|
+
* Semantic state of the event — what is going on with it. Defaults to
|
|
38
|
+
* `'neutral'`.
|
|
39
|
+
*
|
|
40
|
+
* Independent of `color`, and the two do not compete for the same pixels:
|
|
41
|
+
* when `color` is also set it takes the fill and `tone` moves to a stripe on
|
|
42
|
+
* the event's leading edge, so a category-coloured event can still show a
|
|
43
|
+
* state that must not be missed. See `color`.
|
|
44
|
+
*/
|
|
45
|
+
tone?: CalendarEventTone;
|
|
46
|
+
/**
|
|
47
|
+
* Category identity — WHICH kind of thing this event is, as one of the 30
|
|
48
|
+
* `PaletteColor`s. Use it when your events belong to a colour-bearing
|
|
49
|
+
* category the tenant chose (an appointment type, a calendar, a resource
|
|
50
|
+
* class).
|
|
51
|
+
*
|
|
52
|
+
* Paints the block itself: the palette's tinted background with its saturated
|
|
53
|
+
* colour for text and border. That is deliberate — in a calendar the natural
|
|
54
|
+
* reading is that the block IS the colour, rather than that it carries a
|
|
55
|
+
* small coloured dot.
|
|
56
|
+
*
|
|
57
|
+
* `color` and `tone` are different axes and are shown together rather than
|
|
58
|
+
* one overriding the other: `color` takes the fill, and a non-`neutral`
|
|
59
|
+
* `tone` becomes a saturated stripe down the event's leading edge. So a
|
|
60
|
+
* "consultation" that is also "masked" reads as both. With no `color`, tone
|
|
61
|
+
* behaves exactly as before and paints the whole block.
|
|
62
|
+
*
|
|
63
|
+
* In the agenda view, where the row is not filled, `color` sets the leading
|
|
64
|
+
* dot and `tone` the band.
|
|
65
|
+
*
|
|
66
|
+
* **Unlike `Badge`**, where `color` overrides `tone` entirely, Calendar
|
|
67
|
+
* renders both. The reason is that a calendar tone can carry states closer to
|
|
68
|
+
* safety than decoration — a masked hour, a released slot — and silently
|
|
69
|
+
* dropping one would make a free hour read as a booked one.
|
|
70
|
+
*
|
|
71
|
+
* **Pick category colours that contrast with the semantic tones you use.**
|
|
72
|
+
* The band and the category fill are different colours by design, but some
|
|
73
|
+
* pairs land almost on top of each other. Measured RGB distance between each
|
|
74
|
+
* band colour and the category's own saturated colour — the worst pairs,
|
|
75
|
+
* grouped by tone and ordered within each group:
|
|
76
|
+
*
|
|
77
|
+
* - `tone: 'success'` — `mint` (11), `emerald` (15), `teal` (35), `green` (41)
|
|
78
|
+
* - `tone: 'danger'` — `red` (17), `coral` (44)
|
|
79
|
+
* - `tone: 'warning'` — `orange` (16), `coral` (25), `red` (43), `amber` (44)
|
|
80
|
+
* - `tone: 'accent'` — `blue` (40)
|
|
81
|
+
*
|
|
82
|
+
* Read it as a threshold, not a ranking. The worst pair is `success` +
|
|
83
|
+
* `mint` at 11, and anything under about 20 is effectively invisible at the
|
|
84
|
+
* rendered 4px — a 3px band plus the 1px border painted the same colour.
|
|
85
|
+
* (The agenda row has no border, so its stripe is the 3px alone.) The low 20s
|
|
86
|
+
* are detectable side-by-side but unreliable in isolation, and the low 40s
|
|
87
|
+
* are where this list stops rather than where the problem does: the pair just
|
|
88
|
+
* off the end is no safer than the last one on it.
|
|
89
|
+
*
|
|
90
|
+
* These numbers moved when `danger`, `success`, and `accent` were raised
|
|
91
|
+
* to clear WCAG AA as text. The bands got closer to their neighbouring
|
|
92
|
+
* category colours as a result: `success` + `mint` went 18 → 11 and `danger`
|
|
93
|
+
* + `red` went 36 → 17. `Calendar.collisions.test.ts` recomputes this list
|
|
94
|
+
* from the shipped tokens so it cannot drift again.
|
|
95
|
+
*
|
|
96
|
+
* Nothing enforces this — if a tenant picks `mint` for a category whose
|
|
97
|
+
* events can be `success`, keep that state in the title too.
|
|
98
|
+
*
|
|
99
|
+
* **Both axes are visual only.** Neither sets ARIA, and a 3px band is not an
|
|
100
|
+
* accessible signal — same contract as `Badge`, whose tone is also decoration.
|
|
101
|
+
* If a state must reach assistive tech, keep it in the event `title` (or wrap
|
|
102
|
+
* your own live region); do not rely on the band alone.
|
|
103
|
+
*
|
|
104
|
+
* On a multi-day bar the band repeats on every segment, including ones that
|
|
105
|
+
* continue from a previous week. It marks the event's state, not its start.
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* // A booked consultation: category violet, no special state.
|
|
109
|
+
* { id: '1', title: 'Consultation', startsAt, color: 'violet' }
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* // Same category, but the slot was released — colour AND state, both visible.
|
|
113
|
+
* { id: '2', title: 'Consultation', startsAt, color: 'violet', tone: 'success' }
|
|
114
|
+
*/
|
|
115
|
+
color?: PaletteColor;
|
|
116
|
+
/** Renders as a full-band, time-prefix-free bar. Defaults to false. */
|
|
117
|
+
allDay?: boolean;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* One bookable subject rendered as its own column in the resource day view:
|
|
122
|
+
* a practitioner, a chair, a room, a bay. Pass an array of these as
|
|
123
|
+
* `<Calendar resources={…} view="day">` to split the day into lanes that
|
|
124
|
+
* share one time axis and one scroll container.
|
|
125
|
+
*/
|
|
126
|
+
export interface CalendarResource {
|
|
127
|
+
/** Stable id. Matched against `CalendarEvent.resourceId`. */
|
|
128
|
+
id: string;
|
|
129
|
+
/** Column header text. Not translated by the library — pass it localized. */
|
|
130
|
+
label: string;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Shading intent for a `CalendarBackgroundInterval`.
|
|
135
|
+
*
|
|
136
|
+
* - `'unavailable'` — outside working hours / closed / blocked. Shaded, so
|
|
137
|
+
* the user can see that the row exists and is not bookable.
|
|
138
|
+
* - `'available'` — working and free. Lightly tinted, so bookable space
|
|
139
|
+
* reads differently from closed space.
|
|
140
|
+
*/
|
|
141
|
+
export type CalendarBackgroundTone = 'available' | 'unavailable';
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* A non-interactive band painted behind the hour grid — the availability
|
|
145
|
+
* underlay. Use it to distinguish "closed" from "open and free"; "open and
|
|
146
|
+
* busy" is already expressed by the event blocks themselves.
|
|
147
|
+
*
|
|
148
|
+
* Intervals are an interval list rather than a weekly-hours object on
|
|
149
|
+
* purpose: working hours vary per day (a lunch break, a Tuesday late
|
|
150
|
+
* evening), per date (a public holiday, a short day) and per column (each
|
|
151
|
+
* practitioner has their own shift), and only an interval list expresses all
|
|
152
|
+
* three.
|
|
153
|
+
*/
|
|
154
|
+
export interface CalendarBackgroundInterval {
|
|
155
|
+
/** Start instant (local time). */
|
|
156
|
+
startsAt: Date;
|
|
157
|
+
/** End instant (local time). Must be after `startsAt`; equal/inverted intervals are dropped. */
|
|
158
|
+
endsAt: Date;
|
|
159
|
+
/**
|
|
160
|
+
* Restrict this band to one resource column. Ignored unless the view
|
|
161
|
+
* actually has resource columns — in week view and in a resource-less day
|
|
162
|
+
* view every interval applies to whichever columns its dates cover.
|
|
163
|
+
*
|
|
164
|
+
* Note that dropping the `resourceId` filter does NOT make an interval
|
|
165
|
+
* span the week: intervals are always clipped to each column's own date,
|
|
166
|
+
* so shading 08:00–09:00 across a week takes seven intervals, one per day.
|
|
167
|
+
*/
|
|
168
|
+
resourceId?: string;
|
|
169
|
+
/** Shading intent. Defaults to `'unavailable'`. */
|
|
170
|
+
tone?: CalendarBackgroundTone;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* The new placement proposed by a drag. Passed to `onEventMove`.
|
|
175
|
+
*
|
|
176
|
+
* The event's wall-clock duration is preserved: a 90-minute booking stays 90
|
|
177
|
+
* minutes on the clock. On a daylight-saving transition day that is not the
|
|
178
|
+
* same as preserving elapsed time — the proposal keeps the clock duration,
|
|
179
|
+
* which is what a calendar means by "the same appointment, an hour later" —
|
|
180
|
+
* and a start that lands in a skipped hour normalizes forward (02:30 → 03:30).
|
|
181
|
+
*/
|
|
182
|
+
export interface CalendarEventMove {
|
|
183
|
+
/** Proposed new start instant (local time), snapped to `dragSnapMinutes`. */
|
|
184
|
+
startsAt: Date;
|
|
185
|
+
/**
|
|
186
|
+
* Proposed new end instant (local time). Always present, even for an event
|
|
187
|
+
* that omitted `endsAt` — such an event has zero duration, so `endsAt`
|
|
188
|
+
* equals `startsAt`. Committing the proposal verbatim therefore turns an
|
|
189
|
+
* open-ended event into an explicitly zero-length one; keep `endsAt`
|
|
190
|
+
* undefined in your own state if that distinction matters to you.
|
|
191
|
+
*/
|
|
192
|
+
endsAt: Date;
|
|
193
|
+
/**
|
|
194
|
+
* The resource column the event was dropped on, when the view has resource
|
|
195
|
+
* columns. `undefined` means the unassigned column (or a view without
|
|
196
|
+
* resource columns at all).
|
|
197
|
+
*/
|
|
198
|
+
resourceId?: string;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* The new duration proposed by a resize. Passed to `onEventResize`;
|
|
203
|
+
* `startsAt` is unchanged from the original event.
|
|
204
|
+
*/
|
|
205
|
+
export interface CalendarEventResize {
|
|
206
|
+
/** Unchanged start instant. */
|
|
207
|
+
startsAt: Date;
|
|
208
|
+
/** Proposed new end instant (local time), snapped to `dragSnapMinutes`. */
|
|
209
|
+
endsAt: Date;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* The placement `canDropEvent` is asked to judge, discriminated by which
|
|
214
|
+
* gesture produced it.
|
|
215
|
+
*
|
|
216
|
+
* A move and a resize are different questions — "may this booking be
|
|
217
|
+
* relocated (possibly to another practitioner)?" versus "may it run longer?" —
|
|
218
|
+
* and ordinary rules distinguish them. Without the tag they are
|
|
219
|
+
* indistinguishable: the predicate fires continuously *during* the drag,
|
|
220
|
+
* including while the pointer is still at the origin, where both gestures
|
|
221
|
+
* report the event's own start.
|
|
222
|
+
*
|
|
223
|
+
* `mode` narrows the payload, so `resourceId` is only reachable on the branch
|
|
224
|
+
* where a drag can actually change it.
|
|
225
|
+
*/
|
|
226
|
+
export type CalendarDropCandidate =
|
|
227
|
+
| ({ mode: 'move' } & CalendarEventMove)
|
|
228
|
+
| ({
|
|
229
|
+
mode: 'resize';
|
|
230
|
+
/**
|
|
231
|
+
* The lane the event is already in. Present on this branch too — a
|
|
232
|
+
* resize cannot CHANGE the column, but per-resource rules ("Ben's shift
|
|
233
|
+
* ends at 14:00") still need to know which one they are judging.
|
|
234
|
+
*/
|
|
235
|
+
resourceId?: string;
|
|
236
|
+
} & CalendarEventResize);
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* What a drag handler may return. Returning `false` — or a promise that
|
|
240
|
+
* resolves to `false` or rejects — rejects the drop and the block snaps back
|
|
241
|
+
* to where it started. Returning nothing accepts it.
|
|
242
|
+
*
|
|
243
|
+
* Accepting does NOT move the event on its own: `events` stays the source of
|
|
244
|
+
* truth, so the consumer must commit the change to their own state.
|
|
245
|
+
*/
|
|
246
|
+
export type CalendarDropResult = void | boolean | Promise<void | boolean>;
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Active Calendar view. Month / week / day render a grid; agenda is a
|
|
250
|
+
* scannable list of events grouped by day for the cursor's current week.
|
|
251
|
+
*/
|
|
252
|
+
export type CalendarView = 'month' | 'week' | 'day' | 'agenda';
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* One placed event bar inside the month grid. Produced by
|
|
256
|
+
* `layoutEventsForMonth` and consumed by `MonthView`.
|
|
257
|
+
*/
|
|
258
|
+
export interface EventBar {
|
|
259
|
+
event: CalendarEvent;
|
|
260
|
+
/** Index into `MonthGrid.weeks`. */
|
|
261
|
+
weekIndex: number;
|
|
262
|
+
/** 1..7, inclusive — first day this bar covers within the week. */
|
|
263
|
+
startCol: number;
|
|
264
|
+
/** 1..7, inclusive — last day this bar covers within the week. */
|
|
265
|
+
endCol: number;
|
|
266
|
+
/** 0..N — lane row assignment for stacking within the week. */
|
|
267
|
+
lane: number;
|
|
268
|
+
/** True when the event began in a previous week — the bar's left edge is flattened. */
|
|
269
|
+
continuesLeft: boolean;
|
|
270
|
+
/** True when the event continues into a later week — the bar's right edge is flattened. */
|
|
271
|
+
continuesRight: boolean;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/** Result of `layoutEventsForMonth`. */
|
|
275
|
+
export interface MonthLayout {
|
|
276
|
+
/** Visible bars (lane < `maxLanes`) ordered by (weekIndex, lane, startCol). */
|
|
277
|
+
bars: readonly EventBar[];
|
|
278
|
+
/**
|
|
279
|
+
* Per-cell count of events hidden because their lane is >= `maxLanes`.
|
|
280
|
+
* Keyed by `toDateKey(day)`. Used by `DayCell` to render "+N more".
|
|
281
|
+
*/
|
|
282
|
+
hiddenCounts: ReadonlyMap<string, number>;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* One positioned timed-event block inside an `<HourGrid>` column. Produced
|
|
287
|
+
* by `layoutEventsForHourGrid` and consumed by `WeekView`/`DayView`.
|
|
288
|
+
*
|
|
289
|
+
* Horizontal placement (Google-Calendar-style cascade):
|
|
290
|
+
* - Lanes are offset to the right by a small constant step per lane
|
|
291
|
+
* (`LANE_OFFSET_PERCENT` in TimedEvent.tsx — currently 10% of the column
|
|
292
|
+
* width). Every block still extends to the column's right edge.
|
|
293
|
+
* - Higher lanes overlay earlier ones via `z-index = lane + 1`, so the
|
|
294
|
+
* later/right-side event partially covers the one beneath while keeping
|
|
295
|
+
* the predecessor's left edge visible.
|
|
296
|
+
* - On hover or keyboard focus, a block lifts to `left: 0; width: 100%`
|
|
297
|
+
* above all neighbours — see TimedEvent.module.scss.
|
|
298
|
+
*/
|
|
299
|
+
export interface TimedEventBlock {
|
|
300
|
+
event: CalendarEvent;
|
|
301
|
+
/**
|
|
302
|
+
* Column index within the rendered view (0..N-1). One per weekday in week
|
|
303
|
+
* view; `0` in a plain day view; one per resource (plus the trailing
|
|
304
|
+
* unassigned column, when present) in a resource day view.
|
|
305
|
+
*/
|
|
306
|
+
dayIndex: number;
|
|
307
|
+
/** Minutes from `hourRange[0] * 60`. May be negative if the event started earlier. */
|
|
308
|
+
startMinutes: number;
|
|
309
|
+
/** Minutes from `hourRange[0] * 60`. May exceed `(hourRange[1] - hourRange[0]) * 60`. */
|
|
310
|
+
endMinutes: number;
|
|
311
|
+
/** Cascade lane within the collision group (0..N). Drives both left offset and z-index. */
|
|
312
|
+
lane: number;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* One bar in the AllDayBand (above the hour grid in WeekView/DayView).
|
|
317
|
+
* Multi-day events span columns as a single visual element.
|
|
318
|
+
*/
|
|
319
|
+
export interface AllDayBar {
|
|
320
|
+
event: CalendarEvent;
|
|
321
|
+
/** First column the bar covers (inclusive, 0-indexed within the view). */
|
|
322
|
+
startCol: number;
|
|
323
|
+
/** Last column the bar covers (inclusive). */
|
|
324
|
+
endCol: number;
|
|
325
|
+
/** 0..N — row position within the band stack. */
|
|
326
|
+
lane: number;
|
|
327
|
+
/** True when the event begins before the view's first day. */
|
|
328
|
+
continuesLeft: boolean;
|
|
329
|
+
/** True when the event continues past the view's last day. */
|
|
330
|
+
continuesRight: boolean;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* One painted band of the availability underlay, positioned inside a single
|
|
335
|
+
* hour-grid column. Produced by `layoutBackgroundIntervals`.
|
|
336
|
+
*/
|
|
337
|
+
export interface BackgroundBlock {
|
|
338
|
+
/** Stable React key (interval index + column index). */
|
|
339
|
+
key: string;
|
|
340
|
+
/** Column index within the rendered view. */
|
|
341
|
+
dayIndex: number;
|
|
342
|
+
/** Minutes from `hourRange[0] * 60`, clamped to the visible range. */
|
|
343
|
+
startMinutes: number;
|
|
344
|
+
/** Minutes from `hourRange[0] * 60`, clamped to the visible range. */
|
|
345
|
+
endMinutes: number;
|
|
346
|
+
/** Resolved tone (defaults applied). */
|
|
347
|
+
tone: CalendarBackgroundTone;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/** Result of `layoutEventsForHourGrid`. */
|
|
351
|
+
export interface HourGridLayout {
|
|
352
|
+
/** Positioned timed-event blocks, one per non-allDay event placed in the view. */
|
|
353
|
+
timedBlocks: readonly TimedEventBlock[];
|
|
354
|
+
/** Continuous bars in the all-day band above the hour grid. */
|
|
355
|
+
allDayBars: readonly AllDayBar[];
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
/**
|
|
359
|
+
* Context passed to a `renderEvent` callback. The chip wrapper (button +
|
|
360
|
+
* tone background + tooltip + click handler + positioning) stays default;
|
|
361
|
+
* the consumer's returned ReactNode replaces the inner content (time + title
|
|
362
|
+
* labels). To override the chip's background fully, wrap your content in an
|
|
363
|
+
* element with `position: absolute; inset: 0; background: ...` so it covers
|
|
364
|
+
* the default tone fill.
|
|
365
|
+
*/
|
|
366
|
+
export interface RenderEventContext {
|
|
367
|
+
/** Which view is rendering this chip. */
|
|
368
|
+
view: CalendarView;
|
|
369
|
+
/** True when the chip is in the all-day band (week/day) or `event.allDay` (month). */
|
|
370
|
+
asAllDay: boolean;
|
|
371
|
+
/** True when the bar continues from a previous week (multi-day events). */
|
|
372
|
+
continuesLeft?: boolean;
|
|
373
|
+
/** True when the bar continues into a next week (multi-day events). */
|
|
374
|
+
continuesRight?: boolean;
|
|
375
|
+
/** Pre-formatted time label. Single time (e.g., "9:00 AM") for zero-duration; range otherwise. Absent for all-day. */
|
|
376
|
+
timeLabel?: string;
|
|
377
|
+
/** Pre-formatted human duration ("30m" / "1h 30m" / "2d 5h"). */
|
|
378
|
+
duration: string;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Custom event renderer. When provided on `<Calendar>`, it's called for every
|
|
383
|
+
* event chip across views; the returned ReactNode replaces the inner content
|
|
384
|
+
* of the default chip. The chip wrapper still handles positioning, click,
|
|
385
|
+
* tooltip, and tone background — return content with inline `background` /
|
|
386
|
+
* `style` to override colors.
|
|
387
|
+
*
|
|
388
|
+
* Note on truncation. The rule, rather than the per-view markup, because the
|
|
389
|
+
* markup differs. A flex item gets an automatic minimum size — a floor at its
|
|
390
|
+
* own content's min-content width — while its computed `overflow` is
|
|
391
|
+
* NON-SCROLLABLE (CSS Flexbox §4.5). The non-scrollable values are `visible`
|
|
392
|
+
* and `clip`, which keep the floor; the scrollable ones (`hidden` / `auto` /
|
|
393
|
+
* `scroll`) drop it to `0`. So wherever your
|
|
394
|
+
* content lands in a flex ROW, anything you put there that is not a scroll
|
|
395
|
+
* container is floored, and a long `<Text truncate>` inside it never
|
|
396
|
+
* ellipsizes.
|
|
397
|
+
*
|
|
398
|
+
* That is the whole difference between your content and the DS default title.
|
|
399
|
+
* The default title's span sets `overflow: hidden`, making it a scroll
|
|
400
|
+
* container, so it has no automatic minimum to begin with — not because it is a
|
|
401
|
+
* direct child, and not because of the `min-width: 0` it also carries. A
|
|
402
|
+
* `Cluster` sets no `overflow` at all, so it is floored, and `minWidth0` is how
|
|
403
|
+
* you release it.
|
|
404
|
+
*
|
|
405
|
+
* `<Text truncate>` sets both `overflow: hidden` and `min-width: 0`, which is
|
|
406
|
+
* why the inner text is fine either way. What it cannot do is release the floor
|
|
407
|
+
* on a WRAPPER around it — and you need a wrapper as soon as your content has a
|
|
408
|
+
* leading element (a `Dot`, an icon). Inside the button the only valid wrapper
|
|
409
|
+
* among the DS layout primitives is `<Cluster as="span">` (`Stack` and `Constrain`
|
|
410
|
+
* render a `<div>`), so that is where `minWidth0` goes:
|
|
411
|
+
*
|
|
412
|
+
* ```tsx
|
|
413
|
+
* <Cluster as="span" gap="xs" align="center" wrap={false} minWidth0>
|
|
414
|
+
* ```
|
|
415
|
+
*
|
|
416
|
+
* Where that applies: the event chip — month cells AND the all-day band, so in
|
|
417
|
+
* month, week and day — and short hour-grid blocks, where the button itself is
|
|
418
|
+
* the row; plus the agenda row, where the row is an inner span rather than the
|
|
419
|
+
* button.
|
|
420
|
+
*
|
|
421
|
+
* What happens to the overflow is decided by the ELEMENT, not the view:
|
|
422
|
+
* `EventChip`'s chip and `TimedEvent`'s block set `overflow: hidden` on
|
|
423
|
+
* themselves, so they cut it. The agenda row sets none anywhere up the tree, so
|
|
424
|
+
* an unguarded wrapper there does not clip — it widens the document and gives
|
|
425
|
+
* the whole page a horizontal scrollbar, which is the louder failure of the
|
|
426
|
+
* two.
|
|
427
|
+
*
|
|
428
|
+
* Where it does NOT: a tall hour-grid block is `flex-direction: column` (see
|
|
429
|
+
* the layout note below), and the automatic minimum size applies only on the
|
|
430
|
+
* main axis, so there is no horizontal floor to release and `minWidth0` is a
|
|
431
|
+
* no-op.
|
|
432
|
+
*
|
|
433
|
+
* ```tsx
|
|
434
|
+
* renderEvent={(event) => (
|
|
435
|
+
* <Cluster as="span" gap="xs" align="center" wrap={false} minWidth0>
|
|
436
|
+
* <Dot color="violet" />
|
|
437
|
+
* <Text as="span" size="inherit" truncate>{event.title}</Text>
|
|
438
|
+
* </Cluster>
|
|
439
|
+
* )}
|
|
440
|
+
* ```
|
|
441
|
+
*
|
|
442
|
+
* Note on layout: for hour-grid blocks shorter than ~30px tall (`isShort`),
|
|
443
|
+
* the wrapping `<button>` switches from `flex-direction: column` to `row`
|
|
444
|
+
* to keep the start time visible alongside the title. Author your inner
|
|
445
|
+
* content so it works in both layouts (e.g., let text shrink with
|
|
446
|
+
* `min-width: 0; overflow: hidden` instead of pinning a fixed width).
|
|
447
|
+
*/
|
|
448
|
+
export type RenderEvent = (
|
|
449
|
+
event: CalendarEvent,
|
|
450
|
+
ctx: RenderEventContext,
|
|
451
|
+
) => import('react').ReactNode;
|