@cascivo/react 0.3.7 → 0.3.8
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/README.md +11 -1
- package/dist/button/button.css +1 -1
- package/dist/button/button.module.js +1 -1
- package/dist/index.d.ts +59 -1
- package/dist/log-viewer/log-viewer.css +1 -0
- package/dist/log-viewer/log-viewer.js +184 -0
- package/dist/log-viewer/log-viewer.module.js +19 -0
- package/dist/otp-input/otp-input.js +1 -1
- package/dist/react/src/index.js +47 -46
- package/dist/styles.css +3 -1
- package/package.json +3 -3
- package/readme.body.md +11 -1
package/README.md
CHANGED
|
@@ -150,7 +150,7 @@ routing break after adding one of these, check that the import resolves to
|
|
|
150
150
|
|
|
151
151
|
## Component index
|
|
152
152
|
|
|
153
|
-
|
|
153
|
+
191 components, exported from `@cascivo/react`. Full props, examples, and live demos at [docs.cascivo.com](https://docs.cascivo.com).
|
|
154
154
|
|
|
155
155
|
### Inputs
|
|
156
156
|
|
|
@@ -232,6 +232,7 @@ routing break after adding one of these, check that the import resolves to
|
|
|
232
232
|
- **Kbd** — Displays a keyboard key or shortcut
|
|
233
233
|
- **List** — Styled unordered or ordered list with ListItem
|
|
234
234
|
- **LoginPage** — Authentication login page with email and password form.
|
|
235
|
+
- **LogViewer** — Virtualized monospace console for high-frequency log and stream output
|
|
235
236
|
- **NotificationCenter** — A list of notification alerts with a mark-all-read action.
|
|
236
237
|
- **PageWithBreadcrumb** — A centered content page with a breadcrumb navigation and page header.
|
|
237
238
|
- **Prose** — Wrapper that styles raw descendant HTML — headings, lists, code, quotes, tables
|
|
@@ -342,16 +343,25 @@ routing break after adding one of these, check that the import resolves to
|
|
|
342
343
|
- **Boxplot** — Box-and-whisker plot with five-number summary and outlier dots per series.
|
|
343
344
|
- **BubbleChart** — Bubble chart mapping x, y, and size dimensions; radius is area-proportional via sqrt scale.
|
|
344
345
|
- **Bullet** — Bullet chart with background range bands, measure bar, and target tick.
|
|
346
|
+
- **Calendar** — Calendar heatmap — a week-column grid of day cells colored by value (GitHub-style).
|
|
347
|
+
- **Candlestick** — OHLC financial chart — each period a high–low wick and an open↔close body, coloured up/down.
|
|
345
348
|
- **ComboChart** — Combination bar + line chart on shared or dual y-axes.
|
|
349
|
+
- **Funnel** — Vertical conversion funnel — each stage is a trapezoid narrowing toward the next, with optional conversion labels.
|
|
350
|
+
- **Gauge** — A speedometer gauge — a value arc over a min–max sweep with threshold zones, ticks, and a needle.
|
|
346
351
|
- **Heatmap** — Two-dimensional heatmap with band scales and color-mix cell interpolation.
|
|
347
352
|
- **Histogram** — Frequency histogram using Freedman–Diaconis binning with hover tooltips.
|
|
348
353
|
- **Kpi** — KPI card showing a primary metric with optional delta indicator, icon, and sparkline.
|
|
349
354
|
- **LineChart** — Time-series or numeric line chart with multi-series support, hover tooltip, and legend.
|
|
350
355
|
- **Meter** — Progress meter in bar or gauge variant with threshold coloring.
|
|
351
356
|
- **PieChart** — Pie or donut chart with hover segments and optional legend.
|
|
357
|
+
- **Polar** — A polar coordinate plot — categories around the circle, value as radius. Bars (a rose), or a polar line/area.
|
|
352
358
|
- **Radar** — Radar / spider chart with polar grid rings, spokes, and multi-series polygon overlays.
|
|
359
|
+
- **RadialBar** — Concentric radial bars (a circular gauge family) — each datum is a ring whose sweep is proportional to its value.
|
|
360
|
+
- **Sankey** — Flow diagram — ranked nodes connected by throughput-sized link ribbons.
|
|
353
361
|
- **ScatterChart** — Scatter plot with variable point radius, multi-series, and hover tooltip.
|
|
354
362
|
- **Sparkline** — Compact inline sparkline for embedding trend data in dashboards or KPI cards.
|
|
363
|
+
- **Stream** — Streamgraph — stacked areas on a centered (silhouette) flowing baseline.
|
|
364
|
+
- **Sunburst** — Radial hierarchy — concentric rings where each node is an annular segment sized by value.
|
|
355
365
|
- **Treemap** — Squarified treemap for visualizing part-to-whole hierarchical data.
|
|
356
366
|
|
|
357
367
|
<!-- COMPONENT_INDEX:END -->
|
package/dist/button/button.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer cascivo.component{.
|
|
1
|
+
@layer cascivo.component{._button_11p57_2{justify-content:center;align-items:center;gap:var(--cascivo-space-2);font-family:var(--cascivo-font-sans);font-weight:var(--cascivo-font-medium);line-height:var(--cascivo-leading-none);white-space:nowrap;cursor:pointer;transition:background-color var(--cascivo-duration-150) var(--cascivo-ease-out), color var(--cascivo-duration-150) var(--cascivo-ease-out), box-shadow var(--cascivo-duration-150) var(--cascivo-ease-out);border-radius:var(--cascivo-button-radius,var(--cascivo-radius-control));border:1px solid #0000;display:inline-flex}._button_11p57_2:focus-visible{box-shadow:var(--cascivo-focus-ring);outline:none}._button_11p57_2:disabled{opacity:.5;opacity:var(--cascivo-disabled-opacity,.5);cursor:not-allowed;pointer-events:none}._button_11p57_2[data-size=sm]{height:var(--cascivo-control-height-sm);padding-inline:var(--cascivo-space-3);font-size:var(--cascivo-text-ui)}._button_11p57_2[data-size=md]{height:var(--cascivo-control-height-md);padding-inline:var(--cascivo-space-4);padding-block:.5rem;padding-block:--cascivo-step(2);font-size:var(--cascivo-text-ui)}._button_11p57_2[data-size=lg]{height:var(--cascivo-control-height-lg);padding-inline:var(--cascivo-space-6);font-size:var(--cascivo-text-body)}@media (pointer:coarse){._button_11p57_2[data-size=sm],._button_11p57_2[data-size=md]{min-block-size:var(--cascivo-target-min-coarse,2.75rem)}}._button_11p57_2[data-variant=primary]{background-color:var(--cascivo-color-primary);color:var(--cascivo-color-primary-fg)}._button_11p57_2[data-variant=primary]:hover:not(:disabled){background-color:var(--cascivo-color-primary-hover)}._button_11p57_2[data-variant=primary]:active:not(:disabled){background-color:var(--cascivo-color-primary-active)}._button_11p57_2[data-variant=secondary]{background-color:var(--cascivo-color-secondary);color:var(--cascivo-color-secondary-content)}._button_11p57_2[data-variant=secondary]:hover:not(:disabled){background-color:var(--cascivo-color-secondary-hover)}._button_11p57_2[data-variant=ghost]{color:var(--cascivo-color-text);background-color:#0000}._button_11p57_2[data-variant=ghost]:hover:not(:disabled){background-color:var(--cascivo-color-bg-subtle)}._button_11p57_2[data-variant=destructive]{background-color:var(--cascivo-color-destructive);color:var(--cascivo-color-text-on-destructive)}._button_11p57_2[data-variant=destructive]:hover:not(:disabled){background-color:var(--cascivo-color-destructive-hover)}}@media (forced-colors:active){._button_11p57_2{border:1px solid buttontext}._button_11p57_2:focus-visible{outline-offset:2px;outline:2px solid highlight}._button_11p57_2:disabled{color:graytext;border-color:graytext}}
|
package/dist/index.d.ts
CHANGED
|
@@ -1984,6 +1984,64 @@ declare function ListItem({
|
|
|
1984
1984
|
children,
|
|
1985
1985
|
...props
|
|
1986
1986
|
}: ListItemProps): import("react").JSX.Element;
|
|
1987
|
+
type LogLevel = 'info' | 'warn' | 'error' | 'debug';
|
|
1988
|
+
interface LogLine {
|
|
1989
|
+
/** Stable identity for the line (e.g. a sequence number). */
|
|
1990
|
+
id: string | number;
|
|
1991
|
+
/** The line text. May contain ANSI SGR escapes when `ansi` is set. */
|
|
1992
|
+
text: string;
|
|
1993
|
+
/** Semantic level driving the row color when `ansi` is off. */
|
|
1994
|
+
level?: LogLevel;
|
|
1995
|
+
}
|
|
1996
|
+
interface LogViewerLabels {
|
|
1997
|
+
searchPlaceholder?: string;
|
|
1998
|
+
follow?: string;
|
|
1999
|
+
paused?: string;
|
|
2000
|
+
copy?: string;
|
|
2001
|
+
copied?: string;
|
|
2002
|
+
empty?: string;
|
|
2003
|
+
matchCount?: (count: number) => string;
|
|
2004
|
+
lineCount?: (count: number) => string;
|
|
2005
|
+
}
|
|
2006
|
+
interface LogViewerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
|
|
2007
|
+
/** The log lines — a signal (for live streams) or a plain array. */
|
|
2008
|
+
lines: {
|
|
2009
|
+
readonly value: readonly LogLine[];
|
|
2010
|
+
} | readonly LogLine[];
|
|
2011
|
+
/** Pixel height of one row. Default 20. */
|
|
2012
|
+
rowHeight?: number;
|
|
2013
|
+
/** Extra rows rendered above/below the viewport. Default 8. */
|
|
2014
|
+
overscan?: number;
|
|
2015
|
+
/** Controlled pin-to-bottom. Omit for uncontrolled (defaults to following). */
|
|
2016
|
+
follow?: boolean;
|
|
2017
|
+
onFollowChange?: (follow: boolean) => void;
|
|
2018
|
+
/** Parse ANSI SGR color escapes. Default false (use `level` instead). */
|
|
2019
|
+
ansi?: boolean;
|
|
2020
|
+
/** Seed the search/highlight box. */
|
|
2021
|
+
search?: string;
|
|
2022
|
+
/** Max block size of the scroll region (CSS length). Default '24rem'. */
|
|
2023
|
+
maxHeight?: string;
|
|
2024
|
+
labels?: LogViewerLabels;
|
|
2025
|
+
}
|
|
2026
|
+
/**
|
|
2027
|
+
* A virtualized monospace console for high-frequency log/stream output. Only the
|
|
2028
|
+
* visible rows mount (windowed DOM), so a 100k-line buffer stays responsive.
|
|
2029
|
+
* Auto-follows the tail and releases when the user scrolls up. Pairs with
|
|
2030
|
+
* `createStreamBuffer` from `@cascivo/core`. No `useState`/`useEffect`.
|
|
2031
|
+
*/
|
|
2032
|
+
declare function LogViewer({
|
|
2033
|
+
lines,
|
|
2034
|
+
rowHeight,
|
|
2035
|
+
overscan,
|
|
2036
|
+
follow,
|
|
2037
|
+
onFollowChange,
|
|
2038
|
+
ansi,
|
|
2039
|
+
search,
|
|
2040
|
+
maxHeight,
|
|
2041
|
+
labels,
|
|
2042
|
+
className,
|
|
2043
|
+
...props
|
|
2044
|
+
}: LogViewerProps): import("react").JSX.Element;
|
|
1987
2045
|
type ProseProps = HTMLAttributes<HTMLDivElement>;
|
|
1988
2046
|
declare function Prose({
|
|
1989
2047
|
className,
|
|
@@ -3060,4 +3118,4 @@ declare function SwipeItem({
|
|
|
3060
3118
|
trailingActions,
|
|
3061
3119
|
className
|
|
3062
3120
|
}: SwipeItemProps): import("react").JSX.Element;
|
|
3063
|
-
export { Accordion, AccordionContent, AccordionItem, AccordionItemProps, AccordionProps, AccordionTrigger, ActionSheet, ActionSheetAction, ActionSheetProps, Alert, AlertDialog, AlertDialogLabels, AlertDialogProps, AlertProps, AppShell, AppShellProps, AspectRatio, AspectRatioProps, Avatar, AvatarGroup, AvatarGroupLabels, AvatarGroupProps, AvatarProps, Badge, BadgeProps, Blockquote, BlockquoteProps, BottomSheet, BottomSheetProps, Breadcrumb, BreadcrumbItem, BreadcrumbProps, Button, ButtonGroup, ButtonGroupProps, ButtonProps, Calendar, CalendarLabels, CalendarProps, Card, CardContent, CardContentProps, CardFooter, CardFooterProps, CardHeader, CardHeaderProps, CardProps, CardTitle, CardTitleProps, Carousel, CarouselLabels, CarouselProps, ChatBubble, ChatBubbleProps, ChatBubbleSide, Checkbox, CheckboxCard, CheckboxCardProps, CheckboxProps, Code, type CodeLang, CodeProps, CodeSnippet, CodeSnippetProps, Collapsible, CollapsibleProps, ColorPicker, ColorPickerLabels, ColorPickerProps, Column, Combobox, ComboboxLabels, ComboboxOption, ComboboxProps, CommandGroup, CommandItem, CommandMenu, CommandMenuProps, CommandPage, Comparison, ComparisonProps, ContainedList, ContainedListItem, ContainedListItemProps, ContainedListProps, ContextMenu, ContextMenuItem, ContextMenuItemProps, ContextMenuProps, CopyButton, CopyButtonProps, DataList, DataListItem, DataListProps, DataTable, DataTableLabels, DataTableProps, DatePicker, DatePickerLabels, DatePickerProps, DateRange, DateRangePicker, DateRangePickerLabels, DateRangePickerProps, DateRangePreset, Dock, DockItem, DockProps, Drawer, DrawerProps, Dropdown, DropdownItem, DropdownProps, Editable, EditableProps, EmptyState, EmptyStateProps, ErrorBoundary, Fab, FabAction, FabProps, Field, FieldProps, FileUploader, FileUploaderLabels, FileUploaderProps, Filter, FilterOption, FilterProps, FilterVariant, FocusScope, Form, FormConfig, FormProps, FormStore, Header, HeaderLabels, HeaderLink, HeaderPanel, HeaderPanelLabels, HeaderPanelProps, HeaderProps, Heading, HeadingLevel, HeadingProps, HeadingSize, HoverCard, HoverCardContent, HoverCardContentProps, HoverCardProps, HoverCardTrigger, HoverCardTriggerProps, IconButton, IconButtonProps, Image, ImageProps, Indicator, IndicatorPlacement, IndicatorProps, InlineLoading, InlineLoadingProps, InlineLoadingStatus, Input, InputGroup, InputGroupAddon, type InputGroupAddonProps, type InputGroupProps, InputProps, Item, ItemActions, ItemActionsProps, ItemContent, ItemContentProps, ItemDescription, ItemDescriptionProps, ItemMedia, ItemMediaProps, ItemProps, ItemTitle, ItemTitleProps, Join, JoinOrientation, JoinProps, Kbd, KbdProps, Label, LabelProps, Link, LinkProps, List, ListItem, ListItemProps, ListProps, Menu, MenuButton, MenuButtonItem, MenuButtonProps, MenuItem, MenuItemProps, MenuProps, MenuSeparator, MenuTrigger, MenuTriggerProps, Menubar, MenubarItem, MenubarMenu, MenubarProps, Modal, ModalProps, MultiSelect, MultiSelectLabels, MultiSelectOption, MultiSelectProps, NativeSelect, NativeSelectOption, NativeSelectProps, NavigationMenu, NavigationMenuItem, NavigationMenuProps, Notification, NotificationProps, NotificationVariant, NumberInput, NumberInputProps, OtpInput, OtpInputProps, OverflowMenu, OverflowMenuItem, OverflowMenuProps, Pagination, PaginationLabels, PaginationProps, PasswordInput, PasswordInputLabels, PasswordInputProps, Popover, PopoverContent, PopoverContentProps, PopoverProps, PopoverTrigger, PopoverTriggerProps, Portal, Progress, ProgressBar, ProgressBarProps, ProgressCircle, ProgressCircleProps, ProgressIndicator, ProgressIndicatorProps, ProgressProps, ProgressSize, ProgressStep, ProgressVariant, Prose, ProseProps, PullToRefresh, PullToRefreshProps, QrCode, QrCodeProps, RadialProgress, RadialProgressProps, RadialProgressSize, RadialProgressVariant, Radio, RadioCard, RadioCardGroup, RadioCardGroupProps, RadioCardProps, RadioGroup, RadioGroupProps, RadioProps, RatingGroup, RatingGroupLabels, RatingGroupProps, RelativeTime, RelativeTimeProps, Resizable, ResizableProps, ScrollArea, ScrollAreaProps, Search, SearchProps, SegmentedControl, SegmentedControlOption, SegmentedControlProps, Select, SelectOption, SelectProps, Separator, SeparatorProps, Sheet, SheetProps, ShellHeader, ShellHeaderAction, ShellHeaderBrand, ShellHeaderLabels, ShellHeaderNavItem, ShellHeaderNavLink, ShellHeaderNavMenu, ShellHeaderNavMenuItem, ShellHeaderProps, SideNav, SideNavGroup, SideNavItem, SideNavLinkSubItem, SideNavProps, SideNavSubItem, SideNavTone, Skeleton, SkeletonProps, SkipNavLink, SkipNavLinkProps, SkipNavTarget, SkipNavTargetProps, Slider, SliderProps, SortDirection, SortState, Spinner, SpinnerProps, Stack, StackProps, type StandardSchemaV1, Stat, StatProps, Status, StatusProps, Step, StepState, Steps, StepsProps, StructuredList, StructuredListItem, StructuredListProps, SuspenseBoundary, Swap, SwapMode, SwapProps, SwipeAction, SwipeItem, SwipeItemProps, Switcher, SwitcherEntry, SwitcherLink, SwitcherProps, Tabs, TabsContent, TabsContentProps, TabsList, TabsProps, TabsTrigger, TabsTriggerProps, Tag$1 as Tag, TagProps, TagsInput, TagsInputProps, Text, TextProps, Textarea, TextareaProps, Tile, TileProps, TimePicker, TimePickerProps, Timeline, TimelineItem, TimelineProps, ToastOptions, ToastProvider, ToastVariant, Toc, TocItem, TocProps, Toggle, ToggleGroup, ToggleGroupItem, ToggleGroupProps, ToggleProps, Toggletip, ToggletipPlacement, ToggletipProps, Tooltip, TooltipProps, TreeNode, TreeView, TreeViewProps, UploaderFile, type UsePopoverOptions, type UsePopoverReturn, type UseTocFromRegionOptions, User, UserProps, VisuallyHidden, VisuallyHiddenProps, createForm, dismissAllToasts, fuzzyScore, treeViewMessages, useForm, usePopover, useToast, useTocFromRegion };
|
|
3121
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionItemProps, AccordionProps, AccordionTrigger, ActionSheet, ActionSheetAction, ActionSheetProps, Alert, AlertDialog, AlertDialogLabels, AlertDialogProps, AlertProps, AppShell, AppShellProps, AspectRatio, AspectRatioProps, Avatar, AvatarGroup, AvatarGroupLabels, AvatarGroupProps, AvatarProps, Badge, BadgeProps, Blockquote, BlockquoteProps, BottomSheet, BottomSheetProps, Breadcrumb, BreadcrumbItem, BreadcrumbProps, Button, ButtonGroup, ButtonGroupProps, ButtonProps, Calendar, CalendarLabels, CalendarProps, Card, CardContent, CardContentProps, CardFooter, CardFooterProps, CardHeader, CardHeaderProps, CardProps, CardTitle, CardTitleProps, Carousel, CarouselLabels, CarouselProps, ChatBubble, ChatBubbleProps, ChatBubbleSide, Checkbox, CheckboxCard, CheckboxCardProps, CheckboxProps, Code, type CodeLang, CodeProps, CodeSnippet, CodeSnippetProps, Collapsible, CollapsibleProps, ColorPicker, ColorPickerLabels, ColorPickerProps, Column, Combobox, ComboboxLabels, ComboboxOption, ComboboxProps, CommandGroup, CommandItem, CommandMenu, CommandMenuProps, CommandPage, Comparison, ComparisonProps, ContainedList, ContainedListItem, ContainedListItemProps, ContainedListProps, ContextMenu, ContextMenuItem, ContextMenuItemProps, ContextMenuProps, CopyButton, CopyButtonProps, DataList, DataListItem, DataListProps, DataTable, DataTableLabels, DataTableProps, DatePicker, DatePickerLabels, DatePickerProps, DateRange, DateRangePicker, DateRangePickerLabels, DateRangePickerProps, DateRangePreset, Dock, DockItem, DockProps, Drawer, DrawerProps, Dropdown, DropdownItem, DropdownProps, Editable, EditableProps, EmptyState, EmptyStateProps, ErrorBoundary, Fab, FabAction, FabProps, Field, FieldProps, FileUploader, FileUploaderLabels, FileUploaderProps, Filter, FilterOption, FilterProps, FilterVariant, FocusScope, Form, FormConfig, FormProps, FormStore, Header, HeaderLabels, HeaderLink, HeaderPanel, HeaderPanelLabels, HeaderPanelProps, HeaderProps, Heading, HeadingLevel, HeadingProps, HeadingSize, HoverCard, HoverCardContent, HoverCardContentProps, HoverCardProps, HoverCardTrigger, HoverCardTriggerProps, IconButton, IconButtonProps, Image, ImageProps, Indicator, IndicatorPlacement, IndicatorProps, InlineLoading, InlineLoadingProps, InlineLoadingStatus, Input, InputGroup, InputGroupAddon, type InputGroupAddonProps, type InputGroupProps, InputProps, Item, ItemActions, ItemActionsProps, ItemContent, ItemContentProps, ItemDescription, ItemDescriptionProps, ItemMedia, ItemMediaProps, ItemProps, ItemTitle, ItemTitleProps, Join, JoinOrientation, JoinProps, Kbd, KbdProps, Label, LabelProps, Link, LinkProps, List, ListItem, ListItemProps, ListProps, LogLevel, LogLine, LogViewer, LogViewerLabels, LogViewerProps, Menu, MenuButton, MenuButtonItem, MenuButtonProps, MenuItem, MenuItemProps, MenuProps, MenuSeparator, MenuTrigger, MenuTriggerProps, Menubar, MenubarItem, MenubarMenu, MenubarProps, Modal, ModalProps, MultiSelect, MultiSelectLabels, MultiSelectOption, MultiSelectProps, NativeSelect, NativeSelectOption, NativeSelectProps, NavigationMenu, NavigationMenuItem, NavigationMenuProps, Notification, NotificationProps, NotificationVariant, NumberInput, NumberInputProps, OtpInput, OtpInputProps, OverflowMenu, OverflowMenuItem, OverflowMenuProps, Pagination, PaginationLabels, PaginationProps, PasswordInput, PasswordInputLabels, PasswordInputProps, Popover, PopoverContent, PopoverContentProps, PopoverProps, PopoverTrigger, PopoverTriggerProps, Portal, Progress, ProgressBar, ProgressBarProps, ProgressCircle, ProgressCircleProps, ProgressIndicator, ProgressIndicatorProps, ProgressProps, ProgressSize, ProgressStep, ProgressVariant, Prose, ProseProps, PullToRefresh, PullToRefreshProps, QrCode, QrCodeProps, RadialProgress, RadialProgressProps, RadialProgressSize, RadialProgressVariant, Radio, RadioCard, RadioCardGroup, RadioCardGroupProps, RadioCardProps, RadioGroup, RadioGroupProps, RadioProps, RatingGroup, RatingGroupLabels, RatingGroupProps, RelativeTime, RelativeTimeProps, Resizable, ResizableProps, ScrollArea, ScrollAreaProps, Search, SearchProps, SegmentedControl, SegmentedControlOption, SegmentedControlProps, Select, SelectOption, SelectProps, Separator, SeparatorProps, Sheet, SheetProps, ShellHeader, ShellHeaderAction, ShellHeaderBrand, ShellHeaderLabels, ShellHeaderNavItem, ShellHeaderNavLink, ShellHeaderNavMenu, ShellHeaderNavMenuItem, ShellHeaderProps, SideNav, SideNavGroup, SideNavItem, SideNavLinkSubItem, SideNavProps, SideNavSubItem, SideNavTone, Skeleton, SkeletonProps, SkipNavLink, SkipNavLinkProps, SkipNavTarget, SkipNavTargetProps, Slider, SliderProps, SortDirection, SortState, Spinner, SpinnerProps, Stack, StackProps, type StandardSchemaV1, Stat, StatProps, Status, StatusProps, Step, StepState, Steps, StepsProps, StructuredList, StructuredListItem, StructuredListProps, SuspenseBoundary, Swap, SwapMode, SwapProps, SwipeAction, SwipeItem, SwipeItemProps, Switcher, SwitcherEntry, SwitcherLink, SwitcherProps, Tabs, TabsContent, TabsContentProps, TabsList, TabsProps, TabsTrigger, TabsTriggerProps, Tag$1 as Tag, TagProps, TagsInput, TagsInputProps, Text, TextProps, Textarea, TextareaProps, Tile, TileProps, TimePicker, TimePickerProps, Timeline, TimelineItem, TimelineProps, ToastOptions, ToastProvider, ToastVariant, Toc, TocItem, TocProps, Toggle, ToggleGroup, ToggleGroupItem, ToggleGroupProps, ToggleProps, Toggletip, ToggletipPlacement, ToggletipProps, Tooltip, TooltipProps, TreeNode, TreeView, TreeViewProps, UploaderFile, type UsePopoverOptions, type UsePopoverReturn, type UseTocFromRegionOptions, User, UserProps, VisuallyHidden, VisuallyHiddenProps, createForm, dismissAllToasts, fuzzyScore, treeViewMessages, useForm, usePopover, useToast, useTocFromRegion };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer cascivo.component{._root_1sc67_2{border:1px solid var(--cascivo-color-border);border-radius:var(--cascivo-radius-surface);background-color:var(--cascivo-color-surface);flex-direction:column;display:flex;overflow:clip}._toolbar_1sc67_11{align-items:center;gap:var(--cascivo-space-2);padding-block:var(--cascivo-space-2);padding-inline:var(--cascivo-space-3);border-block-end:1px solid var(--cascivo-color-border);display:flex}._search_1sc67_20{min-inline-size:0;font:inherit;font-size:var(--cascivo-text-sm);color:var(--cascivo-color-text);background-color:var(--cascivo-color-surface-raised);border:1px solid var(--cascivo-color-border);border-radius:var(--cascivo-radius-field);padding-block:var(--cascivo-space-1);padding-inline:var(--cascivo-space-2);flex:0 16rem}._count_1sc67_33{font-size:var(--cascivo-text-sm);color:var(--cascivo-color-text-muted)}._spacer_1sc67_38{flex:auto}._toggle_1sc67_42,._copy_1sc67_43{font:inherit;font-size:var(--cascivo-text-sm);color:var(--cascivo-color-text);background-color:var(--cascivo-color-surface-raised);border:1px solid var(--cascivo-color-border);border-radius:var(--cascivo-radius-button);padding-block:var(--cascivo-space-1);padding-inline:var(--cascivo-space-3);cursor:pointer}:is(._toggle_1sc67_42,._copy_1sc67_43):hover{background-color:var(--cascivo-color-surface)}:is(._toggle_1sc67_42,._copy_1sc67_43):focus-visible{outline:2px solid var(--cascivo-color-accent);outline-offset:2px}._toggle_1sc67_42[aria-pressed=true]{color:var(--cascivo-color-accent-content,var(--cascivo-color-text-on-accent));background-color:var(--cascivo-color-accent);border-color:var(--cascivo-color-accent)}@media (pointer:coarse){._toggle_1sc67_42,._copy_1sc67_43,._search_1sc67_20{min-block-size:var(--cascivo-target-min-coarse,2.75rem)}}._scroll_1sc67_81{font-family:var(--cascivo-font-mono);font-size:var(--cascivo-text-sm);color:var(--cascivo-color-text);background-color:var(--cascivo-color-surface);line-height:1.45;position:relative;overflow:auto}._scroll_1sc67_81:focus-visible{outline:2px solid var(--cascivo-color-accent);outline-offset:-2px}._sizer_1sc67_96{inline-size:100%;position:relative}._line_1sc67_101{padding-inline:var(--cascivo-space-3);white-space:pre;align-items:center;display:flex;position:absolute;inset-inline:0}._line_1sc67_101[data-level=warn]{color:var(--cascivo-color-warning)}._line_1sc67_101[data-level=error]{color:var(--cascivo-color-error)}._line_1sc67_101[data-level=debug]{color:var(--cascivo-color-text-subtle)}._line_1sc67_101 mark{color:inherit;background-color:var(--cascivo-color-warning-subtle);border-radius:var(--cascivo-radius-indicator)}._ansi_1sc67_128[data-ansi=red]{color:var(--cascivo-color-error)}._ansi_1sc67_128[data-ansi=green]{color:var(--cascivo-color-success)}._ansi_1sc67_128[data-ansi=yellow]{color:var(--cascivo-color-warning)}._ansi_1sc67_128[data-ansi=blue],._ansi_1sc67_128[data-ansi=cyan]{color:var(--cascivo-color-info)}._ansi_1sc67_128[data-ansi=magenta]{color:var(--cascivo-color-accent)}._ansi_1sc67_128[data-ansi=black],._ansi_1sc67_128[data-ansi=bright-black]{color:var(--cascivo-color-text-muted)}._empty_1sc67_149{padding-block:var(--cascivo-space-6);padding-inline:var(--cascivo-space-3);text-align:center;color:var(--cascivo-color-text-muted)}}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import e from "./log-viewer.module.js";
|
|
4
|
+
import { VisuallyHidden as t, cn as n, useClipboard as r, useComputed as i, useControllableSignal as a, useResizeObserver as o, useSignal as s, useSignalEffect as c, useSignals as l } from "@cascivo/core";
|
|
5
|
+
import { builtin as u, t as d } from "@cascivo/i18n";
|
|
6
|
+
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
7
|
+
import { Fragment as m } from "react";
|
|
8
|
+
//#region ../components/src/log-viewer/log-viewer.tsx
|
|
9
|
+
var h = {
|
|
10
|
+
30: "black",
|
|
11
|
+
31: "red",
|
|
12
|
+
32: "green",
|
|
13
|
+
33: "yellow",
|
|
14
|
+
34: "blue",
|
|
15
|
+
35: "magenta",
|
|
16
|
+
36: "cyan",
|
|
17
|
+
37: "white",
|
|
18
|
+
90: "bright-black",
|
|
19
|
+
91: "red",
|
|
20
|
+
92: "green",
|
|
21
|
+
93: "yellow",
|
|
22
|
+
94: "blue",
|
|
23
|
+
95: "magenta",
|
|
24
|
+
96: "cyan",
|
|
25
|
+
97: "white"
|
|
26
|
+
};
|
|
27
|
+
function g(e) {
|
|
28
|
+
if (!e.includes("\x1B[")) return [{ text: e }];
|
|
29
|
+
try {
|
|
30
|
+
let t = [], n = /\[([0-9;]*)m/g, r = 0, i, a = !1, o;
|
|
31
|
+
for (; (o = n.exec(e)) !== null;) {
|
|
32
|
+
o.index > r && t.push({
|
|
33
|
+
text: e.slice(r, o.index),
|
|
34
|
+
color: i,
|
|
35
|
+
bold: a
|
|
36
|
+
});
|
|
37
|
+
for (let e of o[1].split(";")) {
|
|
38
|
+
let t = Number(e || "0");
|
|
39
|
+
t === 0 ? (i = void 0, a = !1) : t === 1 ? a = !0 : t === 22 ? a = !1 : h[t] && (i = h[t]);
|
|
40
|
+
}
|
|
41
|
+
r = n.lastIndex;
|
|
42
|
+
}
|
|
43
|
+
return r < e.length && t.push({
|
|
44
|
+
text: e.slice(r),
|
|
45
|
+
color: i,
|
|
46
|
+
bold: a
|
|
47
|
+
}), t.length > 0 ? t : [{ text: e }];
|
|
48
|
+
} catch {
|
|
49
|
+
return [{ text: e }];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function _(e, t, n) {
|
|
53
|
+
if (!t) return e;
|
|
54
|
+
let r = e.toLowerCase(), i = t.toLowerCase(), a = [], o = 0, s = r.indexOf(i, o), c = 0;
|
|
55
|
+
for (; s !== -1;) s > o && a.push(e.slice(o, s)), a.push(/* @__PURE__ */ f("mark", { children: e.slice(s, s + i.length) }, `${n}-${c++}`)), o = s + i.length, s = r.indexOf(i, o);
|
|
56
|
+
return o < e.length && a.push(e.slice(o)), a;
|
|
57
|
+
}
|
|
58
|
+
function v(t, n, r) {
|
|
59
|
+
return (n ? g(t.text) : [{ text: t.text }]).map((n, i) => /* @__PURE__ */ f("span", {
|
|
60
|
+
"data-ansi": n.color,
|
|
61
|
+
style: n.bold ? { fontWeight: 700 } : void 0,
|
|
62
|
+
className: n.color ? e.ansi : void 0,
|
|
63
|
+
children: _(n.text, r, `${String(t.id)}-${i}`)
|
|
64
|
+
}, i));
|
|
65
|
+
}
|
|
66
|
+
function y({ lines: h, rowHeight: g = 20, overscan: _ = 8, follow: y, onFollowChange: b, ansi: x = !1, search: S, maxHeight: C = "24rem", labels: w, className: T, ...E }) {
|
|
67
|
+
l();
|
|
68
|
+
let D = {
|
|
69
|
+
searchPlaceholder: w?.searchPlaceholder ?? d(u.logViewer.search),
|
|
70
|
+
follow: w?.follow ?? d(u.logViewer.follow),
|
|
71
|
+
paused: w?.paused ?? d(u.logViewer.paused),
|
|
72
|
+
copy: w?.copy ?? d(u.logViewer.copy),
|
|
73
|
+
copied: w?.copied ?? d(u.logViewer.copied),
|
|
74
|
+
empty: w?.empty ?? d(u.logViewer.empty),
|
|
75
|
+
label: d(u.logViewer.label)
|
|
76
|
+
}, O = s(Array.isArray(h) ? h : []);
|
|
77
|
+
Array.isArray(h) && (O.value = h);
|
|
78
|
+
let k = Array.isArray(h) ? O : h, { ref: A, size: j } = o(), M = s(0), [N, P] = a({
|
|
79
|
+
value: y,
|
|
80
|
+
defaultValue: !0,
|
|
81
|
+
onChange: b
|
|
82
|
+
}), F = s(S ?? ""), { copied: I, copy: L } = r(), R = i(() => {
|
|
83
|
+
let e = k.value, t = e.length, n = j.value?.height ?? 320, r = Math.max(0, t * g - n), i = N.value ? r : M.value, a = Math.floor(i / g), o = Math.ceil(n / g) + _ * 2, s = Math.max(0, a - _), c = Math.min(t, s + o);
|
|
84
|
+
return {
|
|
85
|
+
total: t,
|
|
86
|
+
start: s,
|
|
87
|
+
end: c,
|
|
88
|
+
rows: e.slice(s, c)
|
|
89
|
+
};
|
|
90
|
+
}), z = i(() => {
|
|
91
|
+
let e = F.value.trim().toLowerCase();
|
|
92
|
+
if (!e) return 0;
|
|
93
|
+
let t = 0;
|
|
94
|
+
for (let n of k.value) n.text.toLowerCase().includes(e) && t++;
|
|
95
|
+
return t;
|
|
96
|
+
});
|
|
97
|
+
c(() => {
|
|
98
|
+
if (k.value, !N.value) return;
|
|
99
|
+
let e = A.current;
|
|
100
|
+
e && (e.scrollTop = e.scrollHeight);
|
|
101
|
+
});
|
|
102
|
+
let B = (e) => {
|
|
103
|
+
let t = e.currentTarget;
|
|
104
|
+
M.value = t.scrollTop, P(t.scrollHeight - t.clientHeight - t.scrollTop <= g);
|
|
105
|
+
}, V = R.value, H = F.value.trim();
|
|
106
|
+
return /* @__PURE__ */ p("div", {
|
|
107
|
+
className: n(e.root, T),
|
|
108
|
+
...E,
|
|
109
|
+
children: [
|
|
110
|
+
/* @__PURE__ */ p("div", {
|
|
111
|
+
className: e.toolbar,
|
|
112
|
+
children: [
|
|
113
|
+
/* @__PURE__ */ f("input", {
|
|
114
|
+
type: "search",
|
|
115
|
+
className: e.search,
|
|
116
|
+
placeholder: D.searchPlaceholder,
|
|
117
|
+
"aria-label": D.searchPlaceholder,
|
|
118
|
+
value: F.value,
|
|
119
|
+
onInput: (e) => {
|
|
120
|
+
F.value = e.currentTarget.value;
|
|
121
|
+
}
|
|
122
|
+
}),
|
|
123
|
+
H ? /* @__PURE__ */ f("span", {
|
|
124
|
+
className: e.count,
|
|
125
|
+
"aria-live": "polite",
|
|
126
|
+
children: d(u.logViewer.matches, { count: z.value })
|
|
127
|
+
}) : null,
|
|
128
|
+
/* @__PURE__ */ f("span", { className: e.spacer }),
|
|
129
|
+
/* @__PURE__ */ f("button", {
|
|
130
|
+
type: "button",
|
|
131
|
+
className: e.toggle,
|
|
132
|
+
"aria-pressed": N.value,
|
|
133
|
+
onClick: () => {
|
|
134
|
+
let e = !N.value;
|
|
135
|
+
if (P(e), e) {
|
|
136
|
+
let e = A.current;
|
|
137
|
+
e && (e.scrollTop = e.scrollHeight);
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
children: N.value ? D.follow : D.paused
|
|
141
|
+
}),
|
|
142
|
+
/* @__PURE__ */ f("button", {
|
|
143
|
+
type: "button",
|
|
144
|
+
className: e.copy,
|
|
145
|
+
onClick: () => void L(k.value.map((e) => e.text).join("\n")),
|
|
146
|
+
children: I.value ? D.copied : D.copy
|
|
147
|
+
})
|
|
148
|
+
]
|
|
149
|
+
}),
|
|
150
|
+
/* @__PURE__ */ f("div", {
|
|
151
|
+
ref: A,
|
|
152
|
+
className: e.scroll,
|
|
153
|
+
role: "log",
|
|
154
|
+
"aria-live": "polite",
|
|
155
|
+
"aria-label": D.label,
|
|
156
|
+
tabIndex: 0,
|
|
157
|
+
style: { maxBlockSize: C },
|
|
158
|
+
onScroll: B,
|
|
159
|
+
children: V.total === 0 ? /* @__PURE__ */ f("div", {
|
|
160
|
+
className: e.empty,
|
|
161
|
+
children: D.empty
|
|
162
|
+
}) : /* @__PURE__ */ f("div", {
|
|
163
|
+
className: e.sizer,
|
|
164
|
+
style: { blockSize: V.total * g },
|
|
165
|
+
children: V.rows.map((t, n) => /* @__PURE__ */ f(m, { children: /* @__PURE__ */ f("div", {
|
|
166
|
+
className: e.line,
|
|
167
|
+
"data-level": t.level,
|
|
168
|
+
style: {
|
|
169
|
+
insetBlockStart: (V.start + n) * g,
|
|
170
|
+
blockSize: g
|
|
171
|
+
},
|
|
172
|
+
children: v(t, x, H)
|
|
173
|
+
}) }, t.id))
|
|
174
|
+
})
|
|
175
|
+
}),
|
|
176
|
+
/* @__PURE__ */ f(t, {
|
|
177
|
+
"aria-live": "polite",
|
|
178
|
+
children: d(u.logViewer.lines, { count: V.total })
|
|
179
|
+
})
|
|
180
|
+
]
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
//#endregion
|
|
184
|
+
export { y as LogViewer };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import './log-viewer.css';
|
|
4
|
+
var e = {
|
|
5
|
+
root: "_root_1sc67_2",
|
|
6
|
+
toolbar: "_toolbar_1sc67_11",
|
|
7
|
+
search: "_search_1sc67_20",
|
|
8
|
+
count: "_count_1sc67_33",
|
|
9
|
+
spacer: "_spacer_1sc67_38",
|
|
10
|
+
toggle: "_toggle_1sc67_42",
|
|
11
|
+
copy: "_copy_1sc67_43",
|
|
12
|
+
scroll: "_scroll_1sc67_81",
|
|
13
|
+
sizer: "_sizer_1sc67_96",
|
|
14
|
+
line: "_line_1sc67_101",
|
|
15
|
+
ansi: "_ansi_1sc67_128",
|
|
16
|
+
empty: "_empty_1sc67_149"
|
|
17
|
+
};
|
|
18
|
+
//#endregion
|
|
19
|
+
export { e as default };
|
|
@@ -30,9 +30,9 @@ function c({ length: c = 6, value: l, onValueChange: u, disabled: d = !1, type:
|
|
|
30
30
|
} else t.key === "ArrowLeft" ? (t.preventDefault(), y(e - 1)) : t.key === "ArrowRight" && (t.preventDefault(), y(e + 1));
|
|
31
31
|
}
|
|
32
32
|
function S(e, t) {
|
|
33
|
-
t.preventDefault();
|
|
34
33
|
let n = t.clipboardData.getData("text").replace(/\s/g, "").slice(0, c - e);
|
|
35
34
|
if (!(f === "numeric" ? /^\d+$/ : /^[a-zA-Z0-9]+$/).test(n)) return;
|
|
35
|
+
t.preventDefault();
|
|
36
36
|
let r = [...h.value];
|
|
37
37
|
for (let t = 0; t < n.length; t++) e + t < c && (r[e + t] = n[t] ?? "");
|
|
38
38
|
v(r), y(Math.min(e + n.length, c - 1));
|
package/dist/react/src/index.js
CHANGED
|
@@ -82,49 +82,50 @@ import { Text as Ze } from "../../text/text.js";
|
|
|
82
82
|
import { Code as Qe } from "../../code/code.js";
|
|
83
83
|
import { Blockquote as $e } from "../../blockquote/blockquote.js";
|
|
84
84
|
import { List as et, ListItem as tt } from "../../list/list.js";
|
|
85
|
-
import {
|
|
86
|
-
import {
|
|
87
|
-
import {
|
|
88
|
-
import {
|
|
89
|
-
import {
|
|
90
|
-
import {
|
|
91
|
-
import {
|
|
92
|
-
import {
|
|
93
|
-
import {
|
|
94
|
-
import {
|
|
95
|
-
import {
|
|
96
|
-
import {
|
|
97
|
-
import {
|
|
98
|
-
import {
|
|
99
|
-
import {
|
|
100
|
-
import {
|
|
101
|
-
import {
|
|
102
|
-
import {
|
|
103
|
-
import {
|
|
104
|
-
import {
|
|
105
|
-
import {
|
|
106
|
-
import {
|
|
107
|
-
import {
|
|
108
|
-
import {
|
|
109
|
-
import {
|
|
110
|
-
import {
|
|
111
|
-
import {
|
|
112
|
-
import {
|
|
113
|
-
import {
|
|
114
|
-
import {
|
|
115
|
-
import {
|
|
116
|
-
import {
|
|
117
|
-
import {
|
|
118
|
-
import {
|
|
119
|
-
import {
|
|
120
|
-
import {
|
|
121
|
-
import {
|
|
122
|
-
import {
|
|
123
|
-
import {
|
|
124
|
-
import {
|
|
125
|
-
import {
|
|
126
|
-
import {
|
|
127
|
-
import {
|
|
128
|
-
import {
|
|
129
|
-
import {
|
|
130
|
-
|
|
85
|
+
import { LogViewer as nt } from "../../log-viewer/log-viewer.js";
|
|
86
|
+
import { Prose as rt } from "../../prose/prose.js";
|
|
87
|
+
import { PullToRefresh as it } from "../../pull-to-refresh/pull-to-refresh.js";
|
|
88
|
+
import { QrCode as at } from "../../qr-code/qr-code.js";
|
|
89
|
+
import { RelativeTime as ot } from "../../relative-time/relative-time.js";
|
|
90
|
+
import { Label as st } from "../../label/label.js";
|
|
91
|
+
import { Field as ct } from "../../field/field.js";
|
|
92
|
+
import { Filter as lt } from "../../filter/filter.js";
|
|
93
|
+
import { IconButton as ut } from "../../icon-button/icon-button.js";
|
|
94
|
+
import { ButtonGroup as dt } from "../../button-group/button-group.js";
|
|
95
|
+
import { ToggleGroup as ft } from "../../toggle-group/toggle-group.js";
|
|
96
|
+
import { InlineLoading as pt } from "../../inline-loading/inline-loading.js";
|
|
97
|
+
import { Notification as mt } from "../../notification/notification.js";
|
|
98
|
+
import { ScrollArea as ht } from "../../scroll-area/scroll-area.js";
|
|
99
|
+
import { Collapsible as gt } from "../../collapsible/collapsible.js";
|
|
100
|
+
import { AspectRatio as _t } from "../../aspect-ratio/aspect-ratio.js";
|
|
101
|
+
import { MenuButton as vt } from "../../menu-button/menu-button.js";
|
|
102
|
+
import { Toggletip as yt } from "../../toggletip/toggletip.js";
|
|
103
|
+
import { Menubar as bt } from "../../menubar/menubar.js";
|
|
104
|
+
import { NavigationMenu as xt } from "../../navigation-menu/navigation-menu.js";
|
|
105
|
+
import { TreeView as St, treeViewMessages as Ct } from "../../tree-view/tree-view.js";
|
|
106
|
+
import { StructuredList as wt } from "../../structured-list/structured-list.js";
|
|
107
|
+
import { ContainedList as Tt, ContainedListItem as Et } from "../../contained-list/contained-list.js";
|
|
108
|
+
import { DataList as Dt } from "../../data-list/data-list.js";
|
|
109
|
+
import { Timeline as Ot } from "../../timeline/timeline.js";
|
|
110
|
+
import { Item as kt, ItemActions as At, ItemContent as jt, ItemDescription as Mt, ItemMedia as Nt, ItemTitle as Pt } from "../../item/item.js";
|
|
111
|
+
import { Calendar as Ft } from "../../calendar/calendar.js";
|
|
112
|
+
import { DateRangePicker as It } from "../../date-range-picker/date-range-picker.js";
|
|
113
|
+
import { ColorPicker as Lt } from "../../color-picker/color-picker.js";
|
|
114
|
+
import { Carousel as Rt } from "../../carousel/carousel.js";
|
|
115
|
+
import { Resizable as zt } from "../../resizable/resizable.js";
|
|
116
|
+
import { Dock as Bt } from "../../dock/dock.js";
|
|
117
|
+
import { Drawer as Vt } from "../../drawer/drawer.js";
|
|
118
|
+
import { NativeSelect as Ht } from "../../native-select/native-select.js";
|
|
119
|
+
import { CodeSnippet as Ut } from "../../code-snippet/code-snippet.js";
|
|
120
|
+
import { Steps as Wt } from "../../steps/steps.js";
|
|
121
|
+
import { Tile as Gt } from "../../tile/tile.js";
|
|
122
|
+
import { Indicator as Kt } from "../../indicator/indicator.js";
|
|
123
|
+
import { Join as qt } from "../../join/join.js";
|
|
124
|
+
import { Stack as Jt } from "../../stack/stack.js";
|
|
125
|
+
import { AppShell as Yt } from "../../app-shell/app-shell.js";
|
|
126
|
+
import { ChatBubble as Xt } from "../../chat-bubble/chat-bubble.js";
|
|
127
|
+
import { RadialProgress as Zt } from "../../radial-progress/radial-progress.js";
|
|
128
|
+
import { Swap as Qt } from "../../swap/swap.js";
|
|
129
|
+
import { SwipeItem as $t } from "../../swipe-item/swipe-item.js";
|
|
130
|
+
import { ErrorBoundary as en, FocusScope as tn, Portal as nn, SuspenseBoundary as rn } from "@cascivo/core";
|
|
131
|
+
export { M as Accordion, N as AccordionContent, P as AccordionItem, F as AccordionTrigger, I as ActionSheet, d as Alert, ve as AlertDialog, Yt as AppShell, _t as AspectRatio, f as Avatar, p as AvatarGroup, c as Badge, $e as Blockquote, be as BottomSheet, z as Breadcrumb, t as Button, dt as ButtonGroup, Ft as Calendar, r as Card, i as CardContent, a as CardFooter, o as CardHeader, s as CardTitle, Rt as Carousel, Xt as ChatBubble, v as Checkbox, Ve as CheckboxCard, Qe as Code, Ut as CodeSnippet, gt as Collapsible, Lt as ColorPicker, se as Combobox, ne as CommandMenu, Ce as Comparison, Tt as ContainedList, Et as ContainedListItem, xe as ContextMenu, Se as ContextMenuItem, He as CopyButton, Dt as DataList, te as DataTable, ce as DatePicker, It as DateRangePicker, Bt as Dock, Vt as Drawer, w as Dropdown, Fe as Editable, X as EmptyState, en as ErrorBoundary, Z as Fab, ct as Field, le as FileUploader, lt as Filter, tn as FocusScope, ie as Form, H as Header, ze as HeaderPanel, Xe as Heading, we as HoverCard, Te as HoverCardContent, Ee as HoverCardTrigger, ut as IconButton, h as Image, Kt as Indicator, pt as InlineLoading, n as Input, Me as InputGroup, Ne as InputGroupAddon, kt as Item, At as ItemActions, jt as ItemContent, Mt as ItemDescription, Nt as ItemMedia, Pt as ItemTitle, qt as Join, L as Kbd, st as Label, R as Link, et as List, tt as ListItem, nt as LogViewer, me as Menu, vt as MenuButton, he as MenuItem, ge as MenuSeparator, _e as MenuTrigger, bt as Menubar, l as Modal, Oe as MultiSelect, Ht as NativeSelect, xt as NavigationMenu, mt as Notification, ee as NumberInput, Ae as OtpInput, Q as OverflowMenu, G as Pagination, De as PasswordInput, de as Popover, fe as PopoverContent, pe as PopoverTrigger, nn as Portal, Je as Progress, Y as ProgressBar, Ye as ProgressCircle, K as ProgressIndicator, rt as Prose, it as PullToRefresh, at as QrCode, Zt as RadialProgress, y as Radio, Ie as RadioCard, Le as RadioCardGroup, b as RadioGroup, Pe as RatingGroup, ot as RelativeTime, zt as Resizable, ht as ScrollArea, $ as Search, je as SegmentedControl, _ as Select, u as Separator, ye as Sheet, Re as ShellHeader, W as SideNav, J as Skeleton, Ke as SkipNavLink, qe as SkipNavTarget, S as Slider, e as Spinner, Jt as Stack, Ue as Stat, We as Status, Wt as Steps, wt as StructuredList, rn as SuspenseBoundary, Qt as Swap, $t as SwipeItem, Be as Switcher, O as Tabs, k as TabsContent, A as TabsList, j as TabsTrigger, q as Tag, ke as TagsInput, Ze as Text, g as Textarea, Gt as Tile, ue as TimePicker, Ot as Timeline, T as ToastProvider, B as Toc, x as Toggle, ft as ToggleGroup, yt as Toggletip, C as Tooltip, St as TreeView, m as User, Ge as VisuallyHidden, ae as createForm, E as dismissAllToasts, re as fuzzyScore, Ct as treeViewMessages, oe as useForm, U as usePopover, D as useToast, V as useTocFromRegion };
|
package/dist/styles.css
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
/*$vite$:1*/
|
|
25
25
|
@layer cascivo.component{._buttonGroup_3e81x_2{--_radius:var(--cascivo-button-radius,var(--cascivo-radius-control));display:inline-flex}._buttonGroup_3e81x_2[data-orientation=horizontal]{flex-direction:row}._buttonGroup_3e81x_2[data-orientation=vertical]{flex-direction:column}._buttonGroup_3e81x_2>*{border-radius:0}._buttonGroup_3e81x_2[data-orientation=horizontal]>:first-child{border-start-start-radius:var(--_radius);border-end-start-radius:var(--_radius)}._buttonGroup_3e81x_2[data-orientation=horizontal]>:last-child{border-start-end-radius:var(--_radius);border-end-end-radius:var(--_radius)}._buttonGroup_3e81x_2[data-orientation=horizontal]>:not(:first-child){margin-inline-start:-1px}._buttonGroup_3e81x_2[data-orientation=vertical]>:first-child{border-start-start-radius:var(--_radius);border-start-end-radius:var(--_radius)}._buttonGroup_3e81x_2[data-orientation=vertical]>:last-child{border-end-end-radius:var(--_radius);border-end-start-radius:var(--_radius)}._buttonGroup_3e81x_2[data-orientation=vertical]>:not(:first-child){margin-block-start:-1px}._buttonGroup_3e81x_2>:hover,._buttonGroup_3e81x_2>:focus-visible,._buttonGroup_3e81x_2>:focus-within{z-index:1;position:relative}}
|
|
26
26
|
/*$vite$:1*/
|
|
27
|
-
@layer cascivo.component{.
|
|
27
|
+
@layer cascivo.component{._button_11p57_2{justify-content:center;align-items:center;gap:var(--cascivo-space-2);font-family:var(--cascivo-font-sans);font-weight:var(--cascivo-font-medium);line-height:var(--cascivo-leading-none);white-space:nowrap;cursor:pointer;transition:background-color var(--cascivo-duration-150) var(--cascivo-ease-out), color var(--cascivo-duration-150) var(--cascivo-ease-out), box-shadow var(--cascivo-duration-150) var(--cascivo-ease-out);border-radius:var(--cascivo-button-radius,var(--cascivo-radius-control));border:1px solid #0000;display:inline-flex}._button_11p57_2:focus-visible{box-shadow:var(--cascivo-focus-ring);outline:none}._button_11p57_2:disabled{opacity:.5;opacity:var(--cascivo-disabled-opacity,.5);cursor:not-allowed;pointer-events:none}._button_11p57_2[data-size=sm]{height:var(--cascivo-control-height-sm);padding-inline:var(--cascivo-space-3);font-size:var(--cascivo-text-ui)}._button_11p57_2[data-size=md]{height:var(--cascivo-control-height-md);padding-inline:var(--cascivo-space-4);padding-block:.5rem;padding-block:--cascivo-step(2);font-size:var(--cascivo-text-ui)}._button_11p57_2[data-size=lg]{height:var(--cascivo-control-height-lg);padding-inline:var(--cascivo-space-6);font-size:var(--cascivo-text-body)}@media (pointer:coarse){._button_11p57_2[data-size=sm],._button_11p57_2[data-size=md]{min-block-size:var(--cascivo-target-min-coarse,2.75rem)}}._button_11p57_2[data-variant=primary]{background-color:var(--cascivo-color-primary);color:var(--cascivo-color-primary-fg)}._button_11p57_2[data-variant=primary]:hover:not(:disabled){background-color:var(--cascivo-color-primary-hover)}._button_11p57_2[data-variant=primary]:active:not(:disabled){background-color:var(--cascivo-color-primary-active)}._button_11p57_2[data-variant=secondary]{background-color:var(--cascivo-color-secondary);color:var(--cascivo-color-secondary-content)}._button_11p57_2[data-variant=secondary]:hover:not(:disabled){background-color:var(--cascivo-color-secondary-hover)}._button_11p57_2[data-variant=ghost]{color:var(--cascivo-color-text);background-color:#0000}._button_11p57_2[data-variant=ghost]:hover:not(:disabled){background-color:var(--cascivo-color-bg-subtle)}._button_11p57_2[data-variant=destructive]{background-color:var(--cascivo-color-destructive);color:var(--cascivo-color-text-on-destructive)}._button_11p57_2[data-variant=destructive]:hover:not(:disabled){background-color:var(--cascivo-color-destructive-hover)}}@media (forced-colors:active){._button_11p57_2{border:1px solid buttontext}._button_11p57_2:focus-visible{outline-offset:2px;outline:2px solid highlight}._button_11p57_2:disabled{color:graytext;border-color:graytext}}
|
|
28
28
|
/*$vite$:1*/
|
|
29
29
|
@layer cascivo.component{._calendar_7pqxh_2{--cascivo-calendar-bg:var(--cascivo-color-surface);--cascivo-calendar-radius:var(--cascivo-radius-overlay);--cascivo-calendar-cell-size:2.25rem;--cascivo-calendar-day-selected-bg:var(--cascivo-color-accent);--cascivo-calendar-day-selected-fg:var(--cascivo-color-accent-foreground,var(--cascivo-color-text-on-accent));--cascivo-calendar-day-today-color:var(--cascivo-color-accent);--cascivo-calendar-range-bg:color-mix(in srgb, var(--cascivo-color-accent) 16%, transparent);gap:var(--cascivo-space-2);padding:var(--cascivo-space-3);font-family:var(--cascivo-font-sans);background-color:var(--cascivo-calendar-bg);border-radius:var(--cascivo-calendar-radius);flex-direction:column;display:inline-flex}._calendar_7pqxh_2[data-size=sm]{--cascivo-calendar-cell-size:1.875rem}._calendar_7pqxh_2[data-size=md]{--cascivo-calendar-cell-size:2.25rem}._calendar_7pqxh_2[data-size=lg]{--cascivo-calendar-cell-size:2.75rem}._header_7pqxh_33{justify-content:space-between;align-items:center;margin-block-end:var(--cascivo-space-1);display:flex}._monthLabel_7pqxh_40{font-size:var(--cascivo-text-sm);font-weight:var(--cascivo-font-semibold);color:var(--cascivo-color-text)}._navButton_7pqxh_46{border-radius:var(--cascivo-radius-control);cursor:pointer;block-size:2rem;inline-size:2rem;color:var(--cascivo-color-text-muted);font-size:var(--cascivo-text-base);background:0 0;border:1px solid #0000;outline:none;justify-content:center;align-items:center;display:inline-flex}._navButton_7pqxh_46:hover{background-color:var(--cascivo-color-bg-subtle);color:var(--cascivo-color-text)}._navButton_7pqxh_46:focus-visible{box-shadow:var(--cascivo-focus-ring)}._navSpacer_7pqxh_69{block-size:2rem;inline-size:2rem}._grid_7pqxh_74{border-collapse:collapse;inline-size:100%}._weekday_7pqxh_79{padding-block:var(--cascivo-space-1);font-size:var(--cascivo-text-xs);font-weight:var(--cascivo-font-medium);color:var(--cascivo-color-text-muted);text-align:center;inline-size:var(--cascivo-calendar-cell-size)}._cell_7pqxh_88{text-align:center;padding:0}._cell_7pqxh_88[data-in-range]{background-color:var(--cascivo-calendar-range-bg)}._cell_7pqxh_88:has([data-in-range]){background-color:var(--cascivo-calendar-range-bg)}._empty_7pqxh_99{inline-size:var(--cascivo-calendar-cell-size);block-size:var(--cascivo-calendar-cell-size)}._day_7pqxh_104{inline-size:var(--cascivo-calendar-cell-size);block-size:var(--cascivo-calendar-cell-size);font-family:var(--cascivo-font-sans);font-size:var(--cascivo-text-sm);color:var(--cascivo-color-text);border-radius:var(--cascivo-radius-control);cursor:pointer;background:0 0;border:none;outline:none;justify-content:center;align-items:center;display:inline-flex}._day_7pqxh_104:hover:not([aria-disabled]){background-color:var(--cascivo-color-bg-subtle)}._day_7pqxh_104:focus-visible{box-shadow:var(--cascivo-focus-ring)}._day_7pqxh_104[data-today]{font-weight:var(--cascivo-font-semibold);color:var(--cascivo-calendar-day-today-color)}._day_7pqxh_104[data-in-range]{background-color:var(--cascivo-calendar-range-bg)}._day_7pqxh_104[data-selected],._day_7pqxh_104[data-range-start],._day_7pqxh_104[data-range-end]{background-color:var(--cascivo-calendar-day-selected-bg);color:var(--cascivo-calendar-day-selected-fg)}._day_7pqxh_104[aria-disabled]{opacity:.35;cursor:not-allowed}}@media (forced-colors:active){._day_7pqxh_104[data-selected]{outline:2px solid highlight}}
|
|
30
30
|
/*$vite$:1*/
|
|
@@ -118,6 +118,8 @@
|
|
|
118
118
|
/*$vite$:1*/
|
|
119
119
|
@layer cascivo.component{._list_96m5o_2{font-family:var(--cascivo-font-sans);font-size:var(--cascivo-text-base);line-height:var(--cascivo-leading-normal);color:var(--cascivo-color-text);margin:0;padding-inline-start:var(--cascivo-space-6)}._list_96m5o_2[data-marker=disc]{list-style-type:disc}._list_96m5o_2[data-marker=decimal]{list-style-type:decimal}._list_96m5o_2[data-marker=none]{padding-inline-start:0;list-style-type:none}._item_96m5o_24{margin-block:var(--cascivo-space-1)}}
|
|
120
120
|
/*$vite$:1*/
|
|
121
|
+
@layer cascivo.component{._root_1sc67_2{border:1px solid var(--cascivo-color-border);border-radius:var(--cascivo-radius-surface);background-color:var(--cascivo-color-surface);flex-direction:column;display:flex;overflow:clip}._toolbar_1sc67_11{align-items:center;gap:var(--cascivo-space-2);padding-block:var(--cascivo-space-2);padding-inline:var(--cascivo-space-3);border-block-end:1px solid var(--cascivo-color-border);display:flex}._search_1sc67_20{min-inline-size:0;font:inherit;font-size:var(--cascivo-text-sm);color:var(--cascivo-color-text);background-color:var(--cascivo-color-surface-raised);border:1px solid var(--cascivo-color-border);border-radius:var(--cascivo-radius-field);padding-block:var(--cascivo-space-1);padding-inline:var(--cascivo-space-2);flex:0 16rem}._count_1sc67_33{font-size:var(--cascivo-text-sm);color:var(--cascivo-color-text-muted)}._spacer_1sc67_38{flex:auto}._toggle_1sc67_42,._copy_1sc67_43{font:inherit;font-size:var(--cascivo-text-sm);color:var(--cascivo-color-text);background-color:var(--cascivo-color-surface-raised);border:1px solid var(--cascivo-color-border);border-radius:var(--cascivo-radius-button);padding-block:var(--cascivo-space-1);padding-inline:var(--cascivo-space-3);cursor:pointer}:is(._toggle_1sc67_42,._copy_1sc67_43):hover{background-color:var(--cascivo-color-surface)}:is(._toggle_1sc67_42,._copy_1sc67_43):focus-visible{outline:2px solid var(--cascivo-color-accent);outline-offset:2px}._toggle_1sc67_42[aria-pressed=true]{color:var(--cascivo-color-accent-content,var(--cascivo-color-text-on-accent));background-color:var(--cascivo-color-accent);border-color:var(--cascivo-color-accent)}@media (pointer:coarse){._toggle_1sc67_42,._copy_1sc67_43,._search_1sc67_20{min-block-size:var(--cascivo-target-min-coarse,2.75rem)}}._scroll_1sc67_81{font-family:var(--cascivo-font-mono);font-size:var(--cascivo-text-sm);color:var(--cascivo-color-text);background-color:var(--cascivo-color-surface);line-height:1.45;position:relative;overflow:auto}._scroll_1sc67_81:focus-visible{outline:2px solid var(--cascivo-color-accent);outline-offset:-2px}._sizer_1sc67_96{inline-size:100%;position:relative}._line_1sc67_101{padding-inline:var(--cascivo-space-3);white-space:pre;align-items:center;display:flex;position:absolute;inset-inline:0}._line_1sc67_101[data-level=warn]{color:var(--cascivo-color-warning)}._line_1sc67_101[data-level=error]{color:var(--cascivo-color-error)}._line_1sc67_101[data-level=debug]{color:var(--cascivo-color-text-subtle)}._line_1sc67_101 mark{color:inherit;background-color:var(--cascivo-color-warning-subtle);border-radius:var(--cascivo-radius-indicator)}._ansi_1sc67_128[data-ansi=red]{color:var(--cascivo-color-error)}._ansi_1sc67_128[data-ansi=green]{color:var(--cascivo-color-success)}._ansi_1sc67_128[data-ansi=yellow]{color:var(--cascivo-color-warning)}._ansi_1sc67_128[data-ansi=blue],._ansi_1sc67_128[data-ansi=cyan]{color:var(--cascivo-color-info)}._ansi_1sc67_128[data-ansi=magenta]{color:var(--cascivo-color-accent)}._ansi_1sc67_128[data-ansi=black],._ansi_1sc67_128[data-ansi=bright-black]{color:var(--cascivo-color-text-muted)}._empty_1sc67_149{padding-block:var(--cascivo-space-6);padding-inline:var(--cascivo-space-3);text-align:center;color:var(--cascivo-color-text-muted)}}
|
|
122
|
+
/*$vite$:1*/
|
|
121
123
|
@layer cascivo.component{._root_rzxsi_2{display:inline-block;position:relative}._trigger_rzxsi_7{justify-content:center;align-items:center;gap:var(--cascivo-space-2);font-family:var(--cascivo-font-sans);font-weight:var(--cascivo-font-medium);line-height:var(--cascivo-leading-none);white-space:nowrap;cursor:pointer;border-radius:var(--cascivo-radius-control);transition:background-color var(--cascivo-duration-150) var(--cascivo-ease-out), color var(--cascivo-duration-150) var(--cascivo-ease-out), box-shadow var(--cascivo-duration-150) var(--cascivo-ease-out);border:1px solid #0000;display:inline-flex}._trigger_rzxsi_7:focus-visible{box-shadow:var(--cascivo-focus-ring);outline:none}._trigger_rzxsi_7:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}._trigger_rzxsi_7[data-size=sm]{height:2rem;padding-inline:var(--cascivo-space-3);font-size:var(--cascivo-text-sm)}._trigger_rzxsi_7[data-size=md]{height:2.5rem;padding-inline:var(--cascivo-space-4);font-size:var(--cascivo-text-sm)}._trigger_rzxsi_7[data-size=lg]{height:3rem;padding-inline:var(--cascivo-space-6);font-size:var(--cascivo-text-base)}._trigger_rzxsi_7[data-variant=primary]{background-color:var(--cascivo-color-primary);color:var(--cascivo-color-primary-fg)}._trigger_rzxsi_7[data-variant=primary]:hover:not(:disabled){background-color:var(--cascivo-color-primary-hover)}._trigger_rzxsi_7[data-variant=secondary]{background-color:var(--cascivo-color-surface);color:var(--cascivo-color-text);border-color:var(--cascivo-color-border)}._trigger_rzxsi_7[data-variant=secondary]:hover:not(:disabled){background-color:var(--cascivo-color-bg-subtle)}._trigger_rzxsi_7[data-variant=ghost]{color:var(--cascivo-color-text);background-color:#0000}._trigger_rzxsi_7[data-variant=ghost]:hover:not(:disabled){background-color:var(--cascivo-color-bg-subtle)}._menu_rzxsi_82{z-index:var(--cascivo-z-dropdown);min-inline-size:12rem;padding:var(--cascivo-space-1);background:var(--cascivo-color-surface);border:1px solid var(--cascivo-color-border);border-radius:var(--cascivo-radius-overlay);box-shadow:var(--cascivo-shadow-md);opacity:1;transition:opacity var(--cascivo-motion-enter), translate var(--cascivo-motion-enter);margin-block-start:var(--cascivo-space-1);translate:0}@starting-style{._menu_rzxsi_82{opacity:0;translate:0 calc(-1 * var(--cascivo-space-2))}}._item_rzxsi_104{align-items:center;gap:var(--cascivo-space-2);padding:var(--cascivo-space-2) var(--cascivo-space-3);border-radius:var(--cascivo-radius-item);font-family:var(--cascivo-font-sans);font-size:var(--cascivo-text-sm);color:var(--cascivo-color-text);cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;display:flex}._item_rzxsi_104:hover,._item_rzxsi_104:focus-visible{background:var(--cascivo-color-bg-subtle)}._item_rzxsi_104[aria-disabled=true]{opacity:.5;cursor:not-allowed}}@media (prefers-reduced-motion:reduce){._menu_rzxsi_82{transition:none}}@media (forced-colors:active){._trigger_rzxsi_7{border:1px solid buttontext}._trigger_rzxsi_7:focus-visible{outline-offset:2px;outline:2px solid highlight}._menu_rzxsi_82{border:1px solid canvastext}._item_rzxsi_104:focus-visible{outline:2px solid highlight}}
|
|
122
124
|
/*$vite$:1*/
|
|
123
125
|
@layer cascivo.component{._trigger_1eutv_2{padding:var(--cascivo-space-1);border-radius:var(--cascivo-radius-control);color:inherit;cursor:pointer;background:0 0;border:none;justify-content:center;align-items:center;display:inline-flex}._trigger_1eutv_2:hover{background:var(--cascivo-color-active-bg)}._trigger_1eutv_2:focus-visible{outline:var(--cascivo-focus-ring);outline-offset:2px}._panel_1eutv_23{padding:var(--cascivo-space-1);background:var(--cascivo-color-surface);border:1px solid var(--cascivo-color-border);border-radius:var(--cascivo-radius-overlay);min-width:10rem;box-shadow:var(--cascivo-shadow-md);margin:0;position:fixed;inset:auto}@supports (anchor-name:--a){._panel_1eutv_23{position-try-fallbacks:flip-block, flip-inline, flip-block flip-inline;inset-block-start:anchor(end);inset-inline-start:anchor(start)}}._panel_1eutv_23{opacity:1;transition:opacity var(--cascivo-motion-enter), translate var(--cascivo-motion-enter), display var(--cascivo-motion-enter) allow-discrete, overlay var(--cascivo-motion-enter) allow-discrete;translate:0}@starting-style{._panel_1eutv_23{opacity:0;translate:0 calc(-1 * var(--cascivo-space-2))}}._panel_1eutv_23[data-state=closed]{opacity:0;translate:0 calc(-1 * var(--cascivo-space-2));transition:opacity var(--cascivo-motion-exit), translate var(--cascivo-motion-exit), display var(--cascivo-motion-exit) allow-discrete, overlay var(--cascivo-motion-exit) allow-discrete}._item_1eutv_67{align-items:center;gap:var(--cascivo-space-2);padding:var(--cascivo-space-2) var(--cascivo-space-3);border-radius:var(--cascivo-radius-item);font-size:var(--cascivo-text-sm);color:var(--cascivo-color-text);cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;display:flex}._item_1eutv_67:hover,._item_1eutv_67:focus-visible{background:var(--cascivo-color-bg-subtle)}._item_1eutv_67[aria-disabled=true]{opacity:.5;cursor:not-allowed}._separator_1eutv_90{height:1px;margin-block:var(--cascivo-space-1);background:var(--cascivo-color-border)}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cascivo/react",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.8",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Prebuilt cascivo design system components — use without copying source",
|
|
6
6
|
"keywords": [
|
|
@@ -44,8 +44,8 @@
|
|
|
44
44
|
"provenance": true
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@cascivo/core": "^0.2.
|
|
48
|
-
"@cascivo/i18n": "^0.1.
|
|
47
|
+
"@cascivo/core": "^0.2.3",
|
|
48
|
+
"@cascivo/i18n": "^0.1.11"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@testing-library/jest-dom": "^6.9.1",
|
package/readme.body.md
CHANGED
|
@@ -132,7 +132,7 @@ routing break after adding one of these, check that the import resolves to
|
|
|
132
132
|
|
|
133
133
|
## Component index
|
|
134
134
|
|
|
135
|
-
|
|
135
|
+
191 components, exported from `@cascivo/react`. Full props, examples, and live demos at [docs.cascivo.com](https://docs.cascivo.com).
|
|
136
136
|
|
|
137
137
|
### Inputs
|
|
138
138
|
|
|
@@ -214,6 +214,7 @@ routing break after adding one of these, check that the import resolves to
|
|
|
214
214
|
- **Kbd** — Displays a keyboard key or shortcut
|
|
215
215
|
- **List** — Styled unordered or ordered list with ListItem
|
|
216
216
|
- **LoginPage** — Authentication login page with email and password form.
|
|
217
|
+
- **LogViewer** — Virtualized monospace console for high-frequency log and stream output
|
|
217
218
|
- **NotificationCenter** — A list of notification alerts with a mark-all-read action.
|
|
218
219
|
- **PageWithBreadcrumb** — A centered content page with a breadcrumb navigation and page header.
|
|
219
220
|
- **Prose** — Wrapper that styles raw descendant HTML — headings, lists, code, quotes, tables
|
|
@@ -324,16 +325,25 @@ routing break after adding one of these, check that the import resolves to
|
|
|
324
325
|
- **Boxplot** — Box-and-whisker plot with five-number summary and outlier dots per series.
|
|
325
326
|
- **BubbleChart** — Bubble chart mapping x, y, and size dimensions; radius is area-proportional via sqrt scale.
|
|
326
327
|
- **Bullet** — Bullet chart with background range bands, measure bar, and target tick.
|
|
328
|
+
- **Calendar** — Calendar heatmap — a week-column grid of day cells colored by value (GitHub-style).
|
|
329
|
+
- **Candlestick** — OHLC financial chart — each period a high–low wick and an open↔close body, coloured up/down.
|
|
327
330
|
- **ComboChart** — Combination bar + line chart on shared or dual y-axes.
|
|
331
|
+
- **Funnel** — Vertical conversion funnel — each stage is a trapezoid narrowing toward the next, with optional conversion labels.
|
|
332
|
+
- **Gauge** — A speedometer gauge — a value arc over a min–max sweep with threshold zones, ticks, and a needle.
|
|
328
333
|
- **Heatmap** — Two-dimensional heatmap with band scales and color-mix cell interpolation.
|
|
329
334
|
- **Histogram** — Frequency histogram using Freedman–Diaconis binning with hover tooltips.
|
|
330
335
|
- **Kpi** — KPI card showing a primary metric with optional delta indicator, icon, and sparkline.
|
|
331
336
|
- **LineChart** — Time-series or numeric line chart with multi-series support, hover tooltip, and legend.
|
|
332
337
|
- **Meter** — Progress meter in bar or gauge variant with threshold coloring.
|
|
333
338
|
- **PieChart** — Pie or donut chart with hover segments and optional legend.
|
|
339
|
+
- **Polar** — A polar coordinate plot — categories around the circle, value as radius. Bars (a rose), or a polar line/area.
|
|
334
340
|
- **Radar** — Radar / spider chart with polar grid rings, spokes, and multi-series polygon overlays.
|
|
341
|
+
- **RadialBar** — Concentric radial bars (a circular gauge family) — each datum is a ring whose sweep is proportional to its value.
|
|
342
|
+
- **Sankey** — Flow diagram — ranked nodes connected by throughput-sized link ribbons.
|
|
335
343
|
- **ScatterChart** — Scatter plot with variable point radius, multi-series, and hover tooltip.
|
|
336
344
|
- **Sparkline** — Compact inline sparkline for embedding trend data in dashboards or KPI cards.
|
|
345
|
+
- **Stream** — Streamgraph — stacked areas on a centered (silhouette) flowing baseline.
|
|
346
|
+
- **Sunburst** — Radial hierarchy — concentric rings where each node is an annular segment sized by value.
|
|
337
347
|
- **Treemap** — Squarified treemap for visualizing part-to-whole hierarchical data.
|
|
338
348
|
|
|
339
349
|
<!-- COMPONENT_INDEX:END -->
|