@flikk/ui 1.0.0-beta.7 → 1.0.0-beta.9
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/dist/components/ai/ApprovalCard/ApprovalCard.js +1 -1
- package/dist/components/ai/CodeBlock/CodeBlock.theme.js +2 -2
- package/dist/components/ai/PromptInput/PromptInput.js +2 -2
- package/dist/components/ai/PromptInput/PromptInput.theme.js +1 -1
- package/dist/components/ai/PromptSuggestions/PromptSuggestion.theme.js +1 -1
- package/dist/components/ai/StreamingResponse/MarkdownRenderer.js +6 -6
- package/dist/components/ai/StreamingResponse/StreamingResponse.theme.js +4 -4
- package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.theme.js +2 -2
- package/dist/components/ai/TokenCounter/TokenCounter.theme.js +6 -6
- package/dist/components/charts/ActivityRings/ActivityRings.js +1 -1
- package/dist/components/charts/ActivityRings/ActivityRings.theme.js +2 -2
- package/dist/components/charts/BarChart/BarChart.js +3 -3
- package/dist/components/charts/ChartContainer.js +1 -1
- package/dist/components/charts/ComboChart/ComboChart.js +2 -2
- package/dist/components/charts/DonutChart/DonutChart.theme.js +1 -1
- package/dist/components/charts/DonutChart/MultiSegmentDonutChart.js +1 -1
- package/dist/components/charts/DonutChart/MultiSegmentDonutChart.theme.js +1 -1
- package/dist/components/charts/FunnelChart/FunnelChart.js +7 -7
- package/dist/components/charts/Heatmap/Heatmap.theme.js +1 -1
- package/dist/components/charts/Heatmap/HeatmapCell.js +1 -1
- package/dist/components/charts/Heatmap/HeatmapLegend.js +1 -1
- package/dist/components/charts/RadarChart/RadarChart.theme.js +2 -2
- package/dist/components/charts/ScatterPlot/ScatterPlot.js +1 -1
- package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +2 -2
- package/dist/components/charts/StackedBarChart/StackedBarChart.js +2 -2
- package/dist/components/charts/shared/ChartErrorBoundary/ChartErrorBoundary.js +1 -1
- package/dist/components/charts/shared/ChartLegend/ChartLegendContent.js +1 -1
- package/dist/components/charts/shared/ChartText/ChartText.js +1 -1
- package/dist/components/charts/shared/ChartText/ChartText.theme.js +1 -1
- package/dist/components/charts/shared/ChartTooltip/ChartTooltip.theme.js +4 -4
- package/dist/components/core/Alert/Alert.js +1 -0
- package/dist/components/core/Alert/Alert.theme.js +4 -8
- package/dist/components/core/Alert/Alert.types.d.ts +2 -1
- package/dist/components/core/AlertDialog/AlertDialog.js +1 -1
- package/dist/components/core/Avatar/Avatar.theme.js +5 -5
- package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +1 -1
- package/dist/components/core/Badge/Badge.theme.js +11 -6
- package/dist/components/core/Badge/Badge.types.d.ts +2 -1
- package/dist/components/core/Breadcrumbs/Breadcrumbs.js +1 -1
- package/dist/components/core/Button/Button.theme.js +38 -32
- package/dist/components/core/Button/Button.types.d.ts +2 -1
- package/dist/components/core/ButtonGroup/ButtonGroup.theme.js +1 -1
- package/dist/components/core/Calendar/Calendar.js +1 -1
- package/dist/components/core/Calendar/Calendar.theme.js +5 -5
- package/dist/components/core/Calendar/CalendarMini/CalendarMini.js +1 -1
- package/dist/components/core/Card/Card.theme.js +2 -2
- package/dist/components/core/CommandPalette/CommandItem.js +1 -1
- package/dist/components/core/CommandPalette/CommandPalette.theme.js +3 -3
- package/dist/components/core/ContextMenu/ContextMenu.theme.js +3 -3
- package/dist/components/core/ContextMenu/ContextMenuItem.js +1 -1
- package/dist/components/core/Drawer/Drawer.theme.js +2 -2
- package/dist/components/core/Dropdown/Dropdown.theme.js +1 -1
- package/dist/components/core/Empty/Empty.theme.js +2 -2
- package/dist/components/core/Kbd/Kbd.theme.js +3 -3
- package/dist/components/core/Loader/Loader.theme.js +1 -1
- package/dist/components/core/MenuItem/MenuItem.theme.js +2 -2
- package/dist/components/core/Message/Message.js +1 -1
- package/dist/components/core/Message/Message.theme.js +4 -4
- package/dist/components/core/Modal/Modal.theme.js +2 -2
- package/dist/components/core/NavItem/NavItem.js +1 -1
- package/dist/components/core/NavItem/NavItem.theme.js +1 -1
- package/dist/components/core/OfflineIndicator/OfflineIndicator.theme.js +2 -2
- package/dist/components/core/PageHeading/PageHeading.theme.js +1 -1
- package/dist/components/core/Pagination/Pagination.theme.js +2 -2
- package/dist/components/core/Pill/Pill.theme.js +3 -3
- package/dist/components/core/Popover/PopoverContent.js +2 -0
- package/dist/components/core/Progress/Progress.theme.js +10 -7
- package/dist/components/core/Progress/Progress.types.d.ts +2 -1
- package/dist/components/core/Segmented/Segmented.theme.js +3 -3
- package/dist/components/core/Sidebar/SidebarNavGroup.js +1 -1
- package/dist/components/core/Spinner/Spinner.theme.js +3 -5
- package/dist/components/core/Spinner/Spinner.types.d.ts +2 -1
- package/dist/components/core/Tabs/Tabs.theme.js +2 -2
- package/dist/components/core/Tag/Tag.theme.js +2 -2
- package/dist/components/core/Toast/Toast.theme.js +4 -4
- package/dist/components/core/Tooltip/Tooltip.theme.js +1 -1
- package/dist/components/core/Tree/Tree.theme.js +1 -1
- package/dist/components/data-display/DescriptionList/DescriptionList.theme.js +2 -2
- package/dist/components/data-display/Feed/Feed.js +1 -1
- package/dist/components/data-display/Feed/Feed.theme.js +2 -2
- package/dist/components/data-display/GanttChart/GanttChart.theme.js +2 -2
- package/dist/components/data-display/GanttChart/GanttChartPanel.js +1 -1
- package/dist/components/data-display/GanttChart/GanttMilestone.js +2 -2
- package/dist/components/data-display/GanttChart/GanttTableGroupRow.js +1 -1
- package/dist/components/data-display/GanttChart/GanttTaskBar.js +2 -2
- package/dist/components/data-display/KPI/KPI.js +1 -1
- package/dist/components/data-display/KPI/KPI.theme.js +10 -11
- package/dist/components/data-display/KPI/KPI.types.d.ts +2 -1
- package/dist/components/data-display/Metric/Metric.js +1 -1
- package/dist/components/data-display/Metric/Metric.theme.js +11 -7
- package/dist/components/data-display/Metric/Metric.types.d.ts +2 -1
- package/dist/components/data-display/Table/Table.theme.js +3 -3
- package/dist/components/data-display/Table/TableActionsMenu.js +1 -1
- package/dist/components/data-display/Table/TableColumnManager.js +1 -1
- package/dist/components/data-display/Table/TableFilter.js +3 -3
- package/dist/components/data-display/Table/TableHeader.js +1 -1
- package/dist/components/data-display/Table/TablePagination.js +1 -1
- package/dist/components/data-display/Table/TableSelectionHeader.js +1 -1
- package/dist/components/effects/CustomCursor/CustomCursor.js +1 -1
- package/dist/components/effects/CustomCursor/CustomCursor.theme.js +3 -1
- package/dist/components/effects/CustomCursor/CustomCursor.types.d.ts +2 -1
- package/dist/components/effects/StickyScroll/StickyScroll.js +1 -1
- package/dist/components/forms/Checkbox/Checkbox.d.ts +3 -4
- package/dist/components/forms/Checkbox/Checkbox.js +33 -9
- package/dist/components/forms/Checkbox/Checkbox.theme.js +7 -1
- package/dist/components/forms/Checkbox/Checkbox.types.d.ts +28 -2
- package/dist/components/forms/Checkbox/CheckboxContext.d.ts +14 -0
- package/dist/components/forms/Checkbox/CheckboxContext.js +12 -0
- package/dist/components/forms/Checkbox/CheckboxGroup.d.ts +3 -0
- package/dist/components/forms/Checkbox/CheckboxGroup.js +40 -0
- package/dist/components/forms/Checkbox/index.d.ts +1 -1
- package/dist/components/forms/ColorPicker/ColorPicker.js +1 -1
- package/dist/components/forms/ColorPicker/ColorPicker.theme.js +1 -1
- package/dist/components/forms/ColorPicker/ColorPickerInput.js +7 -7
- package/dist/components/forms/CronInput/CronInput.js +1 -1
- package/dist/components/forms/CronInput/CronInput.theme.js +8 -8
- package/dist/components/forms/DatePicker/DatePicker.theme.js +1 -1
- package/dist/components/forms/DatePicker/DatePickerContent.js +1 -1
- package/dist/components/forms/FileUpload/FileUpload.js +2 -2
- package/dist/components/forms/FileUpload/FileUpload.theme.js +4 -4
- package/dist/components/forms/FormLabel/FormLabel.theme.js +1 -1
- package/dist/components/forms/Input/Input.theme.js +1 -1
- package/dist/components/forms/InputCounter/InputCounter.theme.js +1 -1
- package/dist/components/forms/InputOTP/InputOTP.theme.js +1 -1
- package/dist/components/forms/InputTag/InputTag.js +1 -1
- package/dist/components/forms/Mention/Mention.theme.js +3 -3
- package/dist/components/forms/Radio/Radio.d.ts +3 -4
- package/dist/components/forms/Radio/Radio.js +21 -4
- package/dist/components/forms/Radio/Radio.theme.js +7 -1
- package/dist/components/forms/Radio/Radio.types.d.ts +30 -4
- package/dist/components/forms/Radio/RadioContext.d.ts +14 -0
- package/dist/components/forms/Radio/RadioContext.js +12 -0
- package/dist/components/forms/Radio/RadioGroup.d.ts +3 -0
- package/dist/components/forms/Radio/RadioGroup.js +36 -0
- package/dist/components/forms/Radio/index.d.ts +1 -1
- package/dist/components/forms/RichTextEditor/RichTextEditor.js +2 -2
- package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +1 -1
- package/dist/components/forms/Select/Select.theme.js +1 -1
- package/dist/components/forms/Signature/Signature.theme.js +1 -1
- package/dist/components/forms/Slider/Slider.theme.js +3 -3
- package/dist/components/forms/Switch/Switch.theme.js +1 -1
- package/dist/components/forms/TimePicker/TimePicker.theme.js +2 -2
- package/dist/components/forms/TransferList/TransferList.js +2 -2
- package/dist/components/forms/TransferList/TransferList.theme.js +6 -6
- package/dist/components/forms/forms.theme.js +6 -6
- package/dist/components/forms/index.d.ts +2 -2
- package/dist/components/layout/FormLayout/FormLayout.theme.js +4 -4
- package/dist/hooks/useSelectPortal.d.ts +3 -2
- package/dist/hooks/useSelectPortal.js +44 -19
- package/dist/styles.css +1 -1
- package/dist/utils/colorUtils.d.ts +23 -0
- package/dist/utils/colorUtils.js +45 -0
- package/dist/utils/index.d.ts +1 -0
- package/package.json +1 -1
- package/src/styles/theme.css +19 -17
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { HTMLAttributes, ReactNode } from "react";
|
|
2
|
+
import { SemanticColor } from "../../../utils/colorUtils";
|
|
2
3
|
/**
|
|
3
4
|
* Alert semantic colors (intent)
|
|
4
5
|
*/
|
|
5
|
-
export type AlertColor =
|
|
6
|
+
export type AlertColor = SemanticColor;
|
|
6
7
|
/**
|
|
7
8
|
* Alert visual variant
|
|
8
9
|
*/
|
|
@@ -10,7 +10,7 @@ const AlertDialog = ({ trigger, icon, title, subtitle, footer, className, }) =>
|
|
|
10
10
|
const triggerElement = isValidElement(trigger)
|
|
11
11
|
? cloneElement(trigger, { onClick: handleOpen })
|
|
12
12
|
: null;
|
|
13
|
-
return (jsxs(Fragment, { children: [triggerElement, jsxs(Modal, { isOpen: isOpen, onClose: handleClose, size: "sm", closeOnOverlayClick: false, closeOnEsc: false, showCloseButton: false, role: "alertdialog", className: cn("!overflow-visible", className), children: [jsxs(Modal.Header, { children: [icon && (jsx("div", { className: "text-2xl rounded-full p-3 mb-3 w-fit glass-effect shadow-xl shadow-black/5", "aria-hidden": "true", children: icon })), jsx(Modal.Title, { children: title })] }), jsx(Modal.Body, { className: "pt-2", children: jsx("div", { className: "text-[var(--color-text-secondary)] text-
|
|
13
|
+
return (jsxs(Fragment, { children: [triggerElement, jsxs(Modal, { isOpen: isOpen, onClose: handleClose, size: "sm", closeOnOverlayClick: false, closeOnEsc: false, showCloseButton: false, role: "alertdialog", className: cn("!overflow-visible", className), children: [jsxs(Modal.Header, { children: [icon && (jsx("div", { className: "text-2xl rounded-full p-3 mb-3 w-fit glass-effect shadow-xl shadow-black/5", "aria-hidden": "true", children: icon })), jsx(Modal.Title, { children: title })] }), jsx(Modal.Body, { className: "pt-2", children: jsx("div", { className: "text-[var(--color-text-secondary)] text-base", children: subtitle }) }), footer && (jsx(Modal.Footer, { className: "pb-6", children: footer(handleClose) }))] })] }));
|
|
14
14
|
};
|
|
15
15
|
AlertDialog.displayName = "AlertDialog";
|
|
16
16
|
|
|
@@ -6,11 +6,11 @@ const avatarTheme = {
|
|
|
6
6
|
baseStyle: "relative inline-flex items-center justify-center overflow-hidden bg-neutral-200 text-[var(--color-text-primary)] font-semibold tracking-tighter rounded-[var(--avatar-radius)] ring-2 ring-[var(--color-primary)]/10 border border-[var(--border)] transition-all duration-200 focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--color-primary)] focus-visible:ring-offset-2 glass-effect",
|
|
7
7
|
// Size variants using CSS variables
|
|
8
8
|
sizes: {
|
|
9
|
-
xs: "size-[var(--avatar-size-xs)] text-
|
|
10
|
-
sm: "size-[var(--avatar-size-sm)] text-
|
|
11
|
-
md: "size-[var(--avatar-size-md)] text-
|
|
12
|
-
lg: "size-[var(--avatar-size-lg)] text-
|
|
13
|
-
xl: "size-[var(--avatar-size-xl)] text-
|
|
9
|
+
xs: "size-[var(--avatar-size-xs)] text-sm",
|
|
10
|
+
sm: "size-[var(--avatar-size-sm)] text-base",
|
|
11
|
+
md: "size-[var(--avatar-size-md)] text-lg",
|
|
12
|
+
lg: "size-[var(--avatar-size-lg)] text-xl",
|
|
13
|
+
xl: "size-[var(--avatar-size-xl)] text-2xl",
|
|
14
14
|
},
|
|
15
15
|
// Status indicator styles
|
|
16
16
|
statuses: {
|
|
@@ -11,7 +11,7 @@ const avatarGroupTheme = {
|
|
|
11
11
|
loose: "-ml-2 z-10",
|
|
12
12
|
},
|
|
13
13
|
// Overflow avatar styles
|
|
14
|
-
overflowAvatarStyle: "bg-[var(--color-neutral-100)] text-[var(--color-text-primary)] font-semibold text-
|
|
14
|
+
overflowAvatarStyle: "bg-[var(--color-neutral-100)] text-[var(--color-text-primary)] font-semibold text-base flex items-center justify-center hover:bg-neutral-200 transition-colors duration-200",
|
|
15
15
|
};
|
|
16
16
|
|
|
17
17
|
export { avatarGroupTheme };
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { semanticBgColors } from '../../../utils/colorUtils.js';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Default theme configuration for Badge component
|
|
3
5
|
* Uses variant-first color organization for reliable dark mode and className overrides
|
|
@@ -20,6 +22,8 @@ const badgeTheme = {
|
|
|
20
22
|
"dark:bg-[var(--color-neutral-700)] dark:ring-[var(--color-neutral-600)]",
|
|
21
23
|
primary: "bg-[var(--color-primary)] text-[var(--color-primary-contrast)] ring-[var(--color-primary-400)] " +
|
|
22
24
|
"dark:bg-[var(--color-primary-600)] dark:ring-[var(--color-primary-500)]",
|
|
25
|
+
secondary: "bg-[var(--color-secondary)] text-[var(--color-secondary-contrast)] ring-[var(--color-secondary-400)] " +
|
|
26
|
+
"dark:bg-[var(--color-secondary-600)] dark:ring-[var(--color-secondary-500)]",
|
|
23
27
|
success: "bg-[var(--color-success-600)] text-[var(--color-success-contrast)] ring-[var(--color-success-300)] " +
|
|
24
28
|
"dark:bg-[var(--color-success-600)] dark:ring-[var(--color-success-400)]",
|
|
25
29
|
warning: "bg-[var(--color-warning)] text-[var(--color-warning-contrast)] ring-[var(--color-warning-300)] " +
|
|
@@ -32,6 +36,8 @@ const badgeTheme = {
|
|
|
32
36
|
neutral: "text-[var(--color-text-secondary)] border-[var(--color-border)] " + "",
|
|
33
37
|
primary: "text-[var(--color-primary)] border-[var(--color-border)] " +
|
|
34
38
|
"dark:text-[var(--color-primary-400)]",
|
|
39
|
+
secondary: "text-[var(--color-secondary)] border-[var(--color-border)] " +
|
|
40
|
+
"dark:text-[var(--color-secondary-400)]",
|
|
35
41
|
success: "text-[var(--color-success)] border-[var(--color-border)] " +
|
|
36
42
|
"dark:text-[var(--color-success-400)]",
|
|
37
43
|
warning: "text-[var(--color-warning)] border-[var(--color-border)] " +
|
|
@@ -45,6 +51,8 @@ const badgeTheme = {
|
|
|
45
51
|
"dark:bg-[var(--color-neutral-900)] ",
|
|
46
52
|
primary: "bg-[var(--color-primary-100)] text-[var(--color-primary-700)] " +
|
|
47
53
|
"dark:bg-[var(--color-primary-600)]/30 dark:text-[var(--color-primary-400)]",
|
|
54
|
+
secondary: "bg-[var(--color-secondary-100)] text-[var(--color-secondary-700)] " +
|
|
55
|
+
"dark:bg-[var(--color-secondary-600)]/30 dark:text-[var(--color-secondary-400)]",
|
|
48
56
|
success: "bg-[var(--color-success-100)] text-[var(--color-success-600)] " +
|
|
49
57
|
"dark:bg-[var(--color-success-600)]/30 dark:text-[var(--color-success-400)]",
|
|
50
58
|
warning: "bg-[var(--color-warning-100)] text-[var(--color-warning-600)] " +
|
|
@@ -55,8 +63,8 @@ const badgeTheme = {
|
|
|
55
63
|
},
|
|
56
64
|
// Flat size structure (no nested objects)
|
|
57
65
|
sizes: {
|
|
58
|
-
sm: "text-
|
|
59
|
-
md: "text-
|
|
66
|
+
sm: "text-sm px-1.5 py-0.5 gap-1",
|
|
67
|
+
md: "text-base px-2 py-0.5 gap-1",
|
|
60
68
|
},
|
|
61
69
|
// Border radius per size (using CSS variable)
|
|
62
70
|
radiusSizes: {
|
|
@@ -90,11 +98,8 @@ const badgeTheme = {
|
|
|
90
98
|
},
|
|
91
99
|
// Dot indicator colors (simple, no dark mode needed - inherits from parent)
|
|
92
100
|
dotColors: {
|
|
101
|
+
...semanticBgColors,
|
|
93
102
|
neutral: "bg-[var(--color-text-secondary)]",
|
|
94
|
-
primary: "bg-[var(--color-primary)]",
|
|
95
|
-
success: "bg-[var(--color-success)]",
|
|
96
|
-
warning: "bg-[var(--color-warning)]",
|
|
97
|
-
danger: "bg-[var(--color-danger)]",
|
|
98
103
|
},
|
|
99
104
|
// State styles
|
|
100
105
|
states: {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { ReactNode, MouseEvent } from "react";
|
|
2
|
+
import { SemanticColor } from "../../../utils/colorUtils";
|
|
2
3
|
export type BadgeVariant = "filled" | "outline" | "ghost";
|
|
3
|
-
export type BadgeColor =
|
|
4
|
+
export type BadgeColor = SemanticColor;
|
|
4
5
|
export type BadgeSize = "sm" | "md";
|
|
5
6
|
/**
|
|
6
7
|
* Theme configuration for Badge component
|
|
@@ -43,7 +43,7 @@ const Breadcrumbs = ({ items, separator, maxItems = 4, variant = "default", clas
|
|
|
43
43
|
const renderItem = (item, index, isLast) => {
|
|
44
44
|
const isCurrentPage = isLast || !item.href;
|
|
45
45
|
const itemContent = (jsxs(Fragment, { children: [showIcons && item.iconStart && (jsx("span", { className: "mr-1.5 flex-shrink-0", children: item.iconStart })), item.label] }));
|
|
46
|
-
return (jsx("span", { className: "flex items-center text-
|
|
46
|
+
return (jsx("span", { className: "flex items-center text-base", children: isCurrentPage ? (jsx("span", { className: cn("flex items-center", theme.current), "aria-current": "page", children: itemContent })) : (jsx("a", { href: item.href, className: cn("flex items-center", theme.link), "aria-label": `Navigate to ${item.label}`, children: itemContent })) }, `${item.label}-${index}`));
|
|
47
47
|
};
|
|
48
48
|
// Render separator
|
|
49
49
|
const renderSeparator = (index) => {
|
|
@@ -6,7 +6,7 @@ const buttonTheme = {
|
|
|
6
6
|
baseStyle: "relative inline-flex items-center justify-center gap-2 font-semibold focus:outline-none rounded-[var(--button-radius)] overflow-hidden cursor-pointer transition-all duration-300 ease-in-out min-w-fit flex-shrink-0 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 cursor-pointer",
|
|
7
7
|
// Visual style variants - STRUCTURE only (no colors)
|
|
8
8
|
variantStyles: {
|
|
9
|
-
filled: "border",
|
|
9
|
+
filled: "border hover:brightness-[0.9] dark:hover:brightness-[1.15]",
|
|
10
10
|
outline: "bg-transparent border",
|
|
11
11
|
ghost: "border-transparent",
|
|
12
12
|
link: "bg-transparent border-transparent",
|
|
@@ -16,54 +16,52 @@ const buttonTheme = {
|
|
|
16
16
|
// Filled variant - solid backgrounds
|
|
17
17
|
filled: {
|
|
18
18
|
neutral: "bg-[var(--color-neutral-900)] text-white border-[var(--color-border)] " +
|
|
19
|
-
"hover:bg-[var(--color-neutral-800)] hover:ring-2 hover:ring-[var(--color-neutral-900)]/20 " +
|
|
20
19
|
"focus-visible:outline-[var(--color-neutral-800)] " +
|
|
21
|
-
"dark:bg-[var(--color-neutral-200)] dark:text-[var(--color-neutral-900)] dark:border-[var(--color-neutral-200)]
|
|
22
|
-
"dark:hover:bg-[var(--color-neutral-300)]",
|
|
20
|
+
"dark:bg-[var(--color-neutral-200)] dark:text-[var(--color-neutral-900)] dark:border-[var(--color-neutral-200)]",
|
|
23
21
|
primary: "bg-[var(--color-primary)] text-[var(--color-primary-contrast)] border-[var(--color-primary)] " +
|
|
24
|
-
"hover:bg-[var(--color-primary-700)] hover:ring-2 hover:ring-[var(--color-primary)]/20 " +
|
|
25
22
|
"focus-visible:outline-[var(--color-primary-600)] " +
|
|
26
|
-
"dark:text-[var(--color-primary-contrast)] dark:bg-[var(--color-primary-600)] dark:border-[var(--color-primary-600)]
|
|
27
|
-
|
|
23
|
+
"dark:text-[var(--color-primary-contrast)] dark:bg-[var(--color-primary-600)] dark:border-[var(--color-primary-600)]",
|
|
24
|
+
secondary: "bg-[var(--color-secondary)] text-[var(--color-secondary-contrast)] border-[var(--color-secondary)] " +
|
|
25
|
+
"focus-visible:outline-[var(--color-secondary-600)] " +
|
|
26
|
+
"dark:text-[var(--color-secondary-contrast)] dark:bg-[var(--color-secondary-600)] dark:border-[var(--color-secondary-600)]",
|
|
28
27
|
success: "bg-[var(--color-success)] text-[var(--color-success-contrast)] border-[var(--color-success)] " +
|
|
29
|
-
"hover:bg-[var(--color-success-600)] hover:ring-2 hover:ring-[var(--color-success)]/20 " +
|
|
30
28
|
"focus-visible:outline-[var(--color-success-600)] " +
|
|
31
|
-
"dark:bg-[var(--color-success-700)] dark:border-[var(--color-success-700)]
|
|
32
|
-
"dark:hover:bg-[var(--color-success-600)]",
|
|
29
|
+
"dark:bg-[var(--color-success-700)] dark:border-[var(--color-success-700)]",
|
|
33
30
|
warning: "bg-[var(--color-warning)] text-[var(--color-warning-contrast)] border-[var(--color-warning)] " +
|
|
34
|
-
"hover:bg-[var(--color-warning-600)] hover:ring-2 hover:ring-[var(--color-warning)]/20 " +
|
|
35
31
|
"focus-visible:outline-[var(--color-warning-600)] " +
|
|
36
|
-
"dark:bg-[var(--color-warning-600)] dark:border-[var(--color-warning-600)]
|
|
37
|
-
"dark:hover:bg-[var(--color-warning-500)]",
|
|
32
|
+
"dark:bg-[var(--color-warning-600)] dark:border-[var(--color-warning-600)]",
|
|
38
33
|
danger: "bg-[var(--color-danger)] text-[var(--color-danger-contrast)] border-[var(--color-danger)] " +
|
|
39
|
-
"hover:bg-[var(--color-danger-600)] hover:ring-2 hover:ring-[var(--color-danger)]/20 " +
|
|
40
34
|
"focus-visible:outline-[var(--color-danger-600)] " +
|
|
41
|
-
"dark:bg-[var(--color-danger-600)] dark:border-[var(--color-danger-600)]
|
|
42
|
-
"dark:hover:bg-[var(--color-danger-500)]",
|
|
35
|
+
"dark:bg-[var(--color-danger-600)] dark:border-[var(--color-danger-600)]",
|
|
43
36
|
},
|
|
44
37
|
// Outline variant - transparent bg with colored border
|
|
45
38
|
outline: {
|
|
46
39
|
neutral: "text-[var(--color-text-primary)] border-[var(--color-border)] " +
|
|
47
|
-
"hover:bg-[var(--color-neutral-100)]
|
|
40
|
+
"hover:bg-[var(--color-neutral-100)] " +
|
|
48
41
|
"focus-visible:outline-[var(--color-text-secondary)] " +
|
|
49
42
|
"dark:hover:bg-[var(--color-background-secondary)]",
|
|
50
43
|
primary: "text-[var(--color-primary-600)] border-[var(--color-primary-600)] " +
|
|
51
|
-
"hover:bg-[var(--color-primary-50)]
|
|
44
|
+
"hover:bg-[var(--color-primary-50)] " +
|
|
52
45
|
"focus-visible:outline-[var(--color-primary-600)] " +
|
|
53
46
|
"dark:text-[var(--color-primary-300)] dark:border-[var(--color-primary-400)] " +
|
|
54
47
|
"dark:hover:bg-[var(--color-primary-900)]/30",
|
|
48
|
+
secondary: "text-[var(--color-secondary-600)] border-[var(--color-secondary-600)] " +
|
|
49
|
+
"hover:bg-[var(--color-secondary-50)] " +
|
|
50
|
+
"focus-visible:outline-[var(--color-secondary-600)] " +
|
|
51
|
+
"dark:text-[var(--color-secondary-300)] dark:border-[var(--color-secondary-400)] " +
|
|
52
|
+
"dark:hover:bg-[var(--color-secondary-900)]/30",
|
|
55
53
|
success: "text-[var(--color-success-600)] border-[var(--color-success-600)] " +
|
|
56
|
-
"hover:bg-[var(--color-success-50)]
|
|
54
|
+
"hover:bg-[var(--color-success-50)] " +
|
|
57
55
|
"focus-visible:outline-[var(--color-success-600)] " +
|
|
58
56
|
"dark:text-[var(--color-success-300)] dark:border-[var(--color-success-400)] " +
|
|
59
57
|
"dark:hover:bg-[var(--color-success-900)]/30",
|
|
60
58
|
warning: "text-[var(--color-warning-600)] border-[var(--color-warning-600)] " +
|
|
61
|
-
"hover:bg-[var(--color-warning-50)]
|
|
59
|
+
"hover:bg-[var(--color-warning-50)] " +
|
|
62
60
|
"focus-visible:outline-[var(--color-warning-600)] " +
|
|
63
61
|
"dark:text-[var(--color-warning-300)] dark:border-[var(--color-warning-400)] " +
|
|
64
62
|
"dark:hover:bg-[var(--color-warning-900)]/30",
|
|
65
63
|
danger: "text-[var(--color-danger-600)] border-[var(--color-danger-600)] " +
|
|
66
|
-
"hover:bg-[var(--color-danger-50)]
|
|
64
|
+
"hover:bg-[var(--color-danger-50)] " +
|
|
67
65
|
"focus-visible:outline-[var(--color-danger-600)] " +
|
|
68
66
|
"dark:text-[var(--color-danger-300)] dark:border-[var(--color-danger-400)] " +
|
|
69
67
|
"dark:hover:bg-[var(--color-danger-900)]/30",
|
|
@@ -71,27 +69,32 @@ const buttonTheme = {
|
|
|
71
69
|
// Ghost variant - subtle background tints
|
|
72
70
|
ghost: {
|
|
73
71
|
neutral: "text-[var(--color-text-primary)] bg-[var(--color-neutral-100)] " +
|
|
74
|
-
"hover:bg-[var(--color-neutral-200)]
|
|
72
|
+
"hover:bg-[var(--color-neutral-200)] " +
|
|
75
73
|
"focus-visible:outline-[var(--color-text-secondary)] " +
|
|
76
74
|
"dark:text-[var(--color-text-primary)] dark:bg-[var(--color-neutral-900)] " +
|
|
77
75
|
"dark:hover:bg-[var(--color-neutral-800)]",
|
|
78
76
|
primary: "text-[var(--color-primary-600)] bg-[var(--color-primary)]/10 " +
|
|
79
|
-
"hover:bg-[var(--color-primary-50)]
|
|
77
|
+
"hover:bg-[var(--color-primary-50)] " +
|
|
80
78
|
"focus-visible:outline-[var(--color-primary-600)] " +
|
|
81
79
|
"dark:text-[var(--color-primary-300)] dark:bg-[var(--color-primary-900)]/30 " +
|
|
82
80
|
"dark:hover:bg-[var(--color-primary-900)]/50",
|
|
81
|
+
secondary: "text-[var(--color-secondary-600)] bg-[var(--color-secondary)]/10 " +
|
|
82
|
+
"hover:bg-[var(--color-secondary-50)] " +
|
|
83
|
+
"focus-visible:outline-[var(--color-secondary-600)] " +
|
|
84
|
+
"dark:text-[var(--color-secondary-300)] dark:bg-[var(--color-secondary-900)]/30 " +
|
|
85
|
+
"dark:hover:bg-[var(--color-secondary-900)]/50",
|
|
83
86
|
success: "text-[var(--color-success-600)] bg-[var(--color-success)]/10 " +
|
|
84
|
-
"hover:bg-[var(--color-success-50)]
|
|
87
|
+
"hover:bg-[var(--color-success-50)] " +
|
|
85
88
|
"focus-visible:outline-[var(--color-success-600)] " +
|
|
86
89
|
"dark:text-[var(--color-success-300)] dark:bg-[var(--color-success-900)]/30 " +
|
|
87
90
|
"dark:hover:bg-[var(--color-success-900)]/50",
|
|
88
91
|
warning: "text-[var(--color-warning-600)] bg-[var(--color-warning)]/10 " +
|
|
89
|
-
"hover:bg-[var(--color-warning-50)]
|
|
92
|
+
"hover:bg-[var(--color-warning-50)] " +
|
|
90
93
|
"focus-visible:outline-[var(--color-warning-600)] " +
|
|
91
94
|
"dark:text-[var(--color-warning-300)] dark:bg-[var(--color-warning-900)]/30 " +
|
|
92
95
|
"dark:hover:bg-[var(--color-warning-900)]/50",
|
|
93
96
|
danger: "text-[var(--color-danger-600)] bg-[var(--color-danger)]/10 " +
|
|
94
|
-
"hover:bg-[var(--color-danger-50)]
|
|
97
|
+
"hover:bg-[var(--color-danger-50)] " +
|
|
95
98
|
"focus-visible:outline-[var(--color-danger-600)] " +
|
|
96
99
|
"dark:text-[var(--color-danger-300)] dark:bg-[var(--color-danger-900)]/30 " +
|
|
97
100
|
"dark:hover:bg-[var(--color-danger-900)]/50",
|
|
@@ -104,6 +107,9 @@ const buttonTheme = {
|
|
|
104
107
|
primary: "text-[var(--color-primary-600)] underline-offset-4 hover:underline " +
|
|
105
108
|
"focus-visible:outline-[var(--color-primary-600)] " +
|
|
106
109
|
"dark:text-[var(--color-primary-300)]",
|
|
110
|
+
secondary: "text-[var(--color-secondary-600)] underline-offset-4 hover:underline " +
|
|
111
|
+
"focus-visible:outline-[var(--color-secondary-600)] " +
|
|
112
|
+
"dark:text-[var(--color-secondary-300)]",
|
|
107
113
|
success: "text-[var(--color-success-600)] underline-offset-4 hover:underline " +
|
|
108
114
|
"focus-visible:outline-[var(--color-success-600)] " +
|
|
109
115
|
"dark:text-[var(--color-success-300)]",
|
|
@@ -118,19 +124,19 @@ const buttonTheme = {
|
|
|
118
124
|
// Size variants
|
|
119
125
|
sizes: {
|
|
120
126
|
sm: {
|
|
121
|
-
default: "min-h-[var(--button-min-h-sm)] px-[var(--button-px-sm)] py-[var(--button-py-sm)] text-
|
|
127
|
+
default: "min-h-[var(--button-min-h-sm)] px-[var(--button-px-sm)] py-[var(--button-py-sm)] text-base",
|
|
122
128
|
iconOnly: "size-[var(--button-icon-size-sm)] p-[var(--button-icon-p-sm)]",
|
|
123
|
-
link: "p-0 text-
|
|
129
|
+
link: "p-0 text-base h-fit",
|
|
124
130
|
},
|
|
125
131
|
md: {
|
|
126
|
-
default: "min-h-[var(--button-min-h-md)] px-[var(--button-px-md)] py-[var(--button-py-md)] text-
|
|
132
|
+
default: "min-h-[var(--button-min-h-md)] px-[var(--button-px-md)] py-[var(--button-py-md)] text-base",
|
|
127
133
|
iconOnly: "size-[var(--button-icon-size-md)] p-[var(--button-icon-p-md)]",
|
|
128
|
-
link: "p-0 text-
|
|
134
|
+
link: "p-0 text-base h-fit",
|
|
129
135
|
},
|
|
130
136
|
lg: {
|
|
131
|
-
default: "min-h-[var(--button-min-h-lg)] px-[var(--button-px-lg)] py-[var(--button-py-lg)] text-
|
|
137
|
+
default: "min-h-[var(--button-min-h-lg)] px-[var(--button-px-lg)] py-[var(--button-py-lg)] text-lg",
|
|
132
138
|
iconOnly: "size-[var(--button-icon-size-lg)] p-[var(--button-icon-p-lg)]",
|
|
133
|
-
link: "p-0 text-
|
|
139
|
+
link: "p-0 text-lg h-fit",
|
|
134
140
|
},
|
|
135
141
|
},
|
|
136
142
|
// State styles
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { RippleEffectType } from "./Button.ripple";
|
|
3
|
+
import { SemanticColor } from "../../../utils/colorUtils";
|
|
3
4
|
/**
|
|
4
5
|
* Button component props
|
|
5
6
|
* @property {ButtonColor} color - The semantic color/intent of the button
|
|
@@ -49,7 +50,7 @@ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElemen
|
|
|
49
50
|
*/
|
|
50
51
|
darkMode?: boolean;
|
|
51
52
|
}
|
|
52
|
-
export type ButtonColor =
|
|
53
|
+
export type ButtonColor = SemanticColor;
|
|
53
54
|
export type ButtonVariant = "filled" | "outline" | "ghost" | "link";
|
|
54
55
|
export type ButtonSize = "sm" | "md" | "lg";
|
|
55
56
|
export type ButtonState = "default" | "disabled" | "error" | "loading";
|
|
@@ -44,7 +44,7 @@ const buttonGroupTheme = {
|
|
|
44
44
|
vertical: "h-px self-stretch",
|
|
45
45
|
},
|
|
46
46
|
// Text styles for ButtonGroupText component
|
|
47
|
-
textStyles: "px-3 py-2 text-
|
|
47
|
+
textStyles: "px-3 py-2 text-base text-[var(--color-text-primary)] flex items-center",
|
|
48
48
|
};
|
|
49
49
|
|
|
50
50
|
export { buttonGroupTheme };
|
|
@@ -371,7 +371,7 @@ const Calendar = React__default.forwardRef(({ mode = 'single', value, defaultVal
|
|
|
371
371
|
}
|
|
372
372
|
}
|
|
373
373
|
}, [minDate, maxDate, customIsDateDisabled, currentMonth, currentYear, onViewDateChange, mode, value, onChange, selectedValue, rangeSelectionState]);
|
|
374
|
-
return (jsxs("div", { ref: ref, className: cn(calendarTheme.baseStyle, className), ...props, children: [jsxs("div", { className: calendarTheme.headerStyle, children: [onNavigatePrev !== null && (jsx(Button, { onClick: navigateToPreviousMonth, "aria-label": "Previous month", disabled: !canNavigateToPrev, iconOnly: true, variant: "link", color: "neutral", size: "sm", children: jsx(ChevronLeftIcon, { className: "size-4", strokeWidth: 2 }) })), onNavigatePrev === null && jsx("div", { className: "w-8" }), resolvedHeaderMode === 'static' ? (jsxs("h2", { className: calendarTheme.titleStyle, children: [getMonthName(viewDate, months), " ", currentYear] })) : (jsxs("div", { className: calendarTheme.headerDropdownsStyle, children: [(resolvedHeaderMode === 'dropdown' || (resolvedHeaderMode === 'mixed' && enableMonthDropdown)) && (jsx(Select, { value: currentMonth.toString(), onChange: handleMonthChange, options: monthOptions, displayValue: currentAbbreviatedMonth, size: "sm", className: "text-
|
|
374
|
+
return (jsxs("div", { ref: ref, className: cn(calendarTheme.baseStyle, className), ...props, children: [jsxs("div", { className: calendarTheme.headerStyle, children: [onNavigatePrev !== null && (jsx(Button, { onClick: navigateToPreviousMonth, "aria-label": "Previous month", disabled: !canNavigateToPrev, iconOnly: true, variant: "link", color: "neutral", size: "sm", children: jsx(ChevronLeftIcon, { className: "size-4", strokeWidth: 2 }) })), onNavigatePrev === null && jsx("div", { className: "w-8" }), resolvedHeaderMode === 'static' ? (jsxs("h2", { className: calendarTheme.titleStyle, children: [getMonthName(viewDate, months), " ", currentYear] })) : (jsxs("div", { className: calendarTheme.headerDropdownsStyle, children: [(resolvedHeaderMode === 'dropdown' || (resolvedHeaderMode === 'mixed' && enableMonthDropdown)) && (jsx(Select, { value: currentMonth.toString(), onChange: handleMonthChange, options: monthOptions, displayValue: currentAbbreviatedMonth, size: "sm", className: "text-base font-medium" })), (resolvedHeaderMode === 'dropdown' || (resolvedHeaderMode === 'mixed' && enableYearDropdown)) && (jsx(Select, { value: currentYear.toString(), onChange: handleYearChange, options: yearOptions, size: "sm", className: "text-base font-medium" }))] })), onNavigateNext !== null && (jsx(Button, { onClick: navigateToNextMonth, "aria-label": "Next month", disabled: !canNavigateToNext, iconOnly: true, variant: "link", color: "neutral", size: "sm", children: jsx(ChevronRightIcon, { className: "size-4", strokeWidth: 2 }) })), onNavigateNext === null && jsx("div", { className: "w-8" })] }), jsx("div", { className: calendarTheme.weekdaysStyle, children: weekdays.map((day, index) => (jsx("div", { className: calendarTheme.weekdayStyle, children: day }, index))) }), jsx("div", { className: calendarTheme.daysGridStyle, children: calendarDays.map((day) => {
|
|
375
375
|
var _a;
|
|
376
376
|
const dayNumber = day.date.getDate();
|
|
377
377
|
return (jsxs(motion.button, { type: "button", onClick: () => handleDateSelect(day.date), disabled: day.isDisabled, className: cn(calendarTheme.dayButtonStyle, (_a = calendarTheme.dayButtonSizes) === null || _a === void 0 ? void 0 : _a[size]), "data-selected": day.isSelected, "data-range-start": day.isRangeStart, "data-range-end": day.isRangeEnd, "data-in-range": day.isInRange, "data-today": day.isToday && !day.isSelected && !day.isRangeStart && !day.isRangeEnd, "data-disabled": day.isDisabled, "data-other-month": !day.isCurrentMonth, "aria-label": `Select ${day.date.toLocaleDateString()}`, variants: shouldReduceMotion ? {} : calendarAnimations.dayButton, whileHover: shouldReduceMotion ? undefined : (!day.isDisabled ? "hover" : undefined), whileTap: shouldReduceMotion ? undefined : (!day.isDisabled ? "tap" : undefined), children: [jsx("time", { dateTime: day.date.toISOString().split("T")[0], children: dayNumber }), day.isToday && (jsx(motion.span, { className: "absolute z-10 bottom-1 left-1/2 -translate-x-1/2 w-1 h-1 bg-[var(--color-primary)] rounded-full", variants: shouldReduceMotion ? {} : calendarAnimations.todayDot, initial: shouldReduceMotion ? undefined : "initial", animate: shouldReduceMotion ? undefined : "animate" }))] }, day.date.toISOString()));
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
const calendarTheme = {
|
|
6
6
|
baseStyle: "select-none w-full bg-white dark:bg-[var(--color-neutral-900)]",
|
|
7
7
|
headerStyle: "flex items-center justify-between mb-4",
|
|
8
|
-
titleStyle: "text-
|
|
8
|
+
titleStyle: "text-lg font-semibold text-[var(--color-text-primary)] cursor-pointer hover:text-[var(--color-primary)] transition-colors " +
|
|
9
9
|
"dark:text-[var(--color-neutral-200)] dark:hover:text-[var(--color-primary-400)]",
|
|
10
10
|
headerDropdownsStyle: "grid grid-cols-2 items-center gap-2 flex-1 justify-center mx-3",
|
|
11
11
|
navButtonStyle: "inline-flex items-center justify-center size-8 rounded-[calc(var(--radius-base)*0.75)] border-0 bg-transparent " +
|
|
@@ -16,7 +16,7 @@ const calendarTheme = {
|
|
|
16
16
|
"dark:text-[var(--color-neutral-500)] dark:hover:text-[var(--color-neutral-200)] dark:hover:bg-[var(--color-neutral-800)] " +
|
|
17
17
|
"dark:focus-visible:ring-offset-[var(--color-neutral-900)]",
|
|
18
18
|
weekdaysStyle: "grid grid-cols-7 mb-2",
|
|
19
|
-
weekdayStyle: "flex items-center justify-center h-8 text-
|
|
19
|
+
weekdayStyle: "flex items-center justify-center h-8 text-sm font-medium text-[var(--color-text-muted)] " +
|
|
20
20
|
"dark:text-[var(--color-neutral-500)]",
|
|
21
21
|
daysGridStyle: "grid grid-cols-7 gap-0.5",
|
|
22
22
|
dayButtonStyle: "relative flex items-center justify-center rounded-full border-0 bg-transparent font-medium cursor-pointer " +
|
|
@@ -45,9 +45,9 @@ const calendarTheme = {
|
|
|
45
45
|
// Focus offset for dark mode
|
|
46
46
|
"dark:focus-visible:ring-offset-[var(--color-neutral-900)]",
|
|
47
47
|
dayButtonSizes: {
|
|
48
|
-
sm: "size-8 text-
|
|
49
|
-
md: "size-10 text-
|
|
50
|
-
lg: "size-12 text-
|
|
48
|
+
sm: "size-8 text-base",
|
|
49
|
+
md: "size-10 text-base",
|
|
50
|
+
lg: "size-12 text-lg",
|
|
51
51
|
},
|
|
52
52
|
};
|
|
53
53
|
|
|
@@ -242,7 +242,7 @@ const CalendarMini = React__default.forwardRef(({ selectedDate, currentMonth, on
|
|
|
242
242
|
day: "numeric",
|
|
243
243
|
}), "aria-selected": isSelected, "aria-current": isToday ? "date" : undefined, "aria-disabled": disabled, type: "button", ...(enableAnimations && {
|
|
244
244
|
whileTap: !disabled ? { scale: 0.95 } : undefined,
|
|
245
|
-
}), children: [jsx("div", { className: "text-
|
|
245
|
+
}), children: [jsx("div", { className: "text-base font-medium opacity-60", children: formatDayName(date) }), jsx("time", { dateTime: date.toISOString(), className: cn("font-semibold"), children: formatDateNumber(date) })] }, date.toISOString()));
|
|
246
246
|
}) }, `${startDate.getTime()}-dates`) }) }) })] }), jsx(Button, { iconOnly: true, color: "neutral", variant: "ghost", className: "!flex-shrink !flex-grow-0 !w-fit self-stretch !h-auto !min-h-0 px-0.5", onClick: handleNextMonth, "aria-label": "Next month", children: jsx(ChevronRightIcon, { className: "size-5 text-[var(--color-text-primary)]" }) })] }));
|
|
247
247
|
});
|
|
248
248
|
CalendarMini.displayName = "CalendarMini";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const cardTheme = {
|
|
2
2
|
baseStyle: "rounded-[var(--card-radius)] overflow-hidden bg-white border border-[var(--color-border)] shadow-xs dark:bg-[var(--color-background-secondary)] [&>*+*]:pt-0",
|
|
3
3
|
headerStyle: "flex flex-col space-y-1.5 p-6",
|
|
4
|
-
titleStyle: "text-
|
|
5
|
-
subtitleStyle: "text-
|
|
4
|
+
titleStyle: "text-lg font-semibold leading-none text-[var(--color-text-primary)]",
|
|
5
|
+
subtitleStyle: "text-base text-[var(--color-text-muted)]",
|
|
6
6
|
contentStyle: "p-6",
|
|
7
7
|
footerStyle: "flex items-center p-6",
|
|
8
8
|
};
|
|
@@ -126,7 +126,7 @@ const CommandItem = ({ command, index, isHighlighted, contentStart, contentEnd,
|
|
|
126
126
|
}
|
|
127
127
|
return null;
|
|
128
128
|
};
|
|
129
|
-
return (jsxs("div", { "data-command-index": index, "data-highlighted": isHighlighted, "data-disabled": command.disabled || false, className: cn(theme.commandItem, className), onClick: handleClick, onMouseEnter: handleMouseEnter, children: [finalContentStart && (jsx("div", { className: "flex-shrink-0", children: finalContentStart })), jsxs("div", { className: "flex-1 min-w-0", children: [jsx("div", { className: "text-
|
|
129
|
+
return (jsxs("div", { "data-command-index": index, "data-highlighted": isHighlighted, "data-disabled": command.disabled || false, className: cn(theme.commandItem, className), onClick: handleClick, onMouseEnter: handleMouseEnter, children: [finalContentStart && (jsx("div", { className: "flex-shrink-0", children: finalContentStart })), jsxs("div", { className: "flex-1 min-w-0", children: [jsx("div", { className: "text-base truncate", children: command.label }), command.subtitle && (jsx("div", { className: "text-base opacity-70 truncate mt-0", children: command.subtitle }))] }), renderContentEnd()] }));
|
|
130
130
|
};
|
|
131
131
|
|
|
132
132
|
export { CommandItem };
|
|
@@ -8,12 +8,12 @@ const commandPaletteTheme = {
|
|
|
8
8
|
// Dark mode
|
|
9
9
|
"dark:ring-black/30",
|
|
10
10
|
searchWrapper: "border-b border-[var(--color-border)] px-4 py-3 " + "",
|
|
11
|
-
searchInput: "w-full px-0 py-0 text-
|
|
11
|
+
searchInput: "w-full px-0 py-0 text-base bg-transparent border-none outline-none " +
|
|
12
12
|
"text-[var(--color-text-primary)] placeholder:text-[var(--color-text-placeholder)] " +
|
|
13
13
|
"focus:outline-none focus:ring-0 " +
|
|
14
14
|
// Dark mode
|
|
15
15
|
"dark:text-[var(--color-neutral-200)] dark:placeholder:text-[var(--color-neutral-500)]",
|
|
16
|
-
groupLabel: "px-4 py-1 text-
|
|
16
|
+
groupLabel: "px-4 py-1 text-sm font-semibold text-[var(--color-text-muted)]/50 uppercase " +
|
|
17
17
|
"dark:text-[var(--color-neutral-500)]",
|
|
18
18
|
commandItem: "flex items-center gap-3 px-4 py-2 rounded-[var(--radius-base)] cursor-pointer transition-colors " +
|
|
19
19
|
"hover:bg-[var(--color-primary)] " +
|
|
@@ -23,7 +23,7 @@ const commandPaletteTheme = {
|
|
|
23
23
|
// Dark mode - adjust hover state
|
|
24
24
|
"dark:text-[var(--color-neutral-200)] dark:hover:bg-[var(--color-primary-600)] " +
|
|
25
25
|
"dark:data-[highlighted=true]:bg-[var(--color-primary-600)]",
|
|
26
|
-
emptyState: "px-4 py-12 text-center text-
|
|
26
|
+
emptyState: "px-4 py-12 text-center text-base text-[var(--color-text-muted)] " +
|
|
27
27
|
"dark:text-[var(--color-neutral-500)]",
|
|
28
28
|
};
|
|
29
29
|
|
|
@@ -13,10 +13,10 @@ const contextMenuTheme = {
|
|
|
13
13
|
// Submenu trigger - based on Dropdown item style with chevron space
|
|
14
14
|
subTriggerStyle: `${dropdownTheme.itemBaseStyle} pr-8 data-[state=open]:bg-[var(--color-background-tertiary)] ` +
|
|
15
15
|
"dark:data-[state=open]:bg-[var(--color-neutral-700)]",
|
|
16
|
-
// Submenu content -
|
|
16
|
+
// Submenu content - matches main dropdown menu style
|
|
17
17
|
subContentStyle: "min-w-[180px] max-h-[400px] overflow-y-auto rounded-[var(--dropdown-radius)] border border-[var(--color-border)] " +
|
|
18
|
-
"bg-[var(--color-background
|
|
19
|
-
"dark:bg-[var(--color-
|
|
18
|
+
"bg-[var(--color-background)] shadow-real-xl flex flex-col p-1 focus:outline-none " +
|
|
19
|
+
"dark:bg-[var(--color-background-secondary)]",
|
|
20
20
|
// Separator - horizontal divider
|
|
21
21
|
separatorStyle: "h-px bg-[var(--color-border)] my-1 -mx-1 " +
|
|
22
22
|
"dark:bg-[var(--color-neutral-700)]",
|
|
@@ -22,7 +22,7 @@ const ContextMenuItem = React__default.forwardRef(({ children, className, checke
|
|
|
22
22
|
const resolvedStartContent = hasPrefix ? (jsxs(Fragment, { children: [checked && (jsx(CheckIcon, { className: theme.itemCheckedStyle, "aria-hidden": "true" })), startContent] })) : undefined;
|
|
23
23
|
// Build end content: user's endContent OR shortcut display
|
|
24
24
|
const resolvedEndContent = endContent ||
|
|
25
|
-
(shortcut ? (jsx("span", { className: "text-
|
|
25
|
+
(shortcut ? (jsx("span", { className: "text-sm text-[var(--color-text-muted)] font-mono", children: shortcut })) : undefined);
|
|
26
26
|
return (jsx(MenuItem, { ref: ref, role: "menuitem", disabled: disabled, isDanger: isDanger, startContent: resolvedStartContent, endContent: resolvedEndContent, subtitle: subtitle, onActivate: handleActivate, "data-checked": checked, "aria-checked": checked ? "true" : undefined, className: cn(checked && "pl-8", className), theme: {
|
|
27
27
|
baseStyle: theme.itemStyle,
|
|
28
28
|
dangerStyle: theme.itemDangerStyle,
|
|
@@ -8,8 +8,8 @@ const drawerTheme = {
|
|
|
8
8
|
content: "h-full flex flex-col",
|
|
9
9
|
header: "flex items-start justify-between p-4 border-b border-[var(--color-border)] shrink-0 text-[var(--color-text-primary)] gap-4",
|
|
10
10
|
headerContent: "flex items-start gap-3 flex-1 min-w-0",
|
|
11
|
-
title: "text-
|
|
12
|
-
subtitle: "text-
|
|
11
|
+
title: "text-lg font-semibold leading-6 text-[var(--color-text-primary)]",
|
|
12
|
+
subtitle: "text-base text-[var(--color-text-secondary)] mt-0.5",
|
|
13
13
|
body: "flex-1 overflow-y-auto p-4",
|
|
14
14
|
footer: "flex items-center justify-end gap-3 p-4 border-t border-[var(--color-border)] shrink-0 " +
|
|
15
15
|
"dark:border-[var(--color-neutral-700)]",
|
|
@@ -9,7 +9,7 @@ const dropdownTheme = {
|
|
|
9
9
|
itemDangerStyle: menuItemTheme.dangerStyle,
|
|
10
10
|
itemFocusStyle: menuItemTheme.focusStyle,
|
|
11
11
|
// Section title styling
|
|
12
|
-
sectionTitleStyle: "px-2 py-1.5 text-
|
|
12
|
+
sectionTitleStyle: "px-2 py-1.5 text-sm font-semibold text-[var(--color-text-muted)] uppercase tracking-tight",
|
|
13
13
|
// Section container styling
|
|
14
14
|
sectionStyle: "py-1",
|
|
15
15
|
// Separator between sections
|
|
@@ -5,9 +5,9 @@ const emptyTheme = {
|
|
|
5
5
|
// Base container styles - customizable spacing, colors, and layout
|
|
6
6
|
baseStyle: "flex flex-col items-center justify-center text-center w-full max-w-md mx-auto space-y-3 py-12 px-6 ",
|
|
7
7
|
// Title text styles - customizable typography and colors
|
|
8
|
-
titleStyle: "text-
|
|
8
|
+
titleStyle: "text-lg font-semibold text-[var(--color-text-primary)]",
|
|
9
9
|
// Description text styles - customizable typography and colors
|
|
10
|
-
subtitleStyle: "text-
|
|
10
|
+
subtitleStyle: "text-base text-[var(--color-text-muted)]",
|
|
11
11
|
};
|
|
12
12
|
|
|
13
13
|
export { emptyTheme };
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
const kbdTheme = {
|
|
5
5
|
baseStyle: 'inline-flex items-center justify-center font-sans font-medium rounded-[calc(var(--radius-base)*0.75)] bg-neutral-100 border border-[var(--color-border)] text-[var(--color-text-secondary)] glass-effect',
|
|
6
6
|
sizes: {
|
|
7
|
-
sm: 'text-
|
|
8
|
-
md: 'text-
|
|
7
|
+
sm: 'text-sm px-1 py-0.5 min-w-[1.25rem]',
|
|
8
|
+
md: 'text-base px-1.5 py-0.5 min-w-[1.5rem]',
|
|
9
9
|
},
|
|
10
|
-
separatorStyle: 'text-[var(--color-text-muted)] text-
|
|
10
|
+
separatorStyle: 'text-[var(--color-text-muted)] text-sm',
|
|
11
11
|
};
|
|
12
12
|
|
|
13
13
|
export { kbdTheme };
|
|
@@ -14,7 +14,7 @@ const loaderTheme = {
|
|
|
14
14
|
// Linear bar (foreground)
|
|
15
15
|
linearBarStyle: "h-full rounded-full transition-all duration-300 ease-out",
|
|
16
16
|
// Label text for linear variant
|
|
17
|
-
linearLabelStyle: "text-
|
|
17
|
+
linearLabelStyle: "text-base font-medium text-[var(--color-text-secondary)] min-w-[3ch] tabular-nums",
|
|
18
18
|
// Size variants for both circular and linear
|
|
19
19
|
sizes: {
|
|
20
20
|
sm: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const menuItemTheme = {
|
|
2
2
|
// Base item styling with hover, focus, and disabled states
|
|
3
|
-
baseStyle: "relative flex items-center gap-2 px-2.5 py-1.5 text-
|
|
3
|
+
baseStyle: "relative flex items-center gap-2 px-2.5 py-1.5 text-base font-[500] text-[var(--color-text-primary)] cursor-pointer outline-none select-none rounded-[var(--radius-base)] transition-colors duration-300 " +
|
|
4
4
|
"hover:bg-[var(--color-background-secondary)] focus:bg-[var(--color-background-secondary)] " +
|
|
5
5
|
"data-[focused=true]:bg-[var(--color-background-secondary)] " +
|
|
6
6
|
"data-[selected=true]:bg-[var(--color-primary)]/5 data-[selected=true]:text-[var(--color-primary)] " +
|
|
@@ -19,7 +19,7 @@ const menuItemTheme = {
|
|
|
19
19
|
focusStyle: "focus-visible:ring-2 focus-visible:ring-[var(--color-primary)] focus-visible:ring-offset-2 " +
|
|
20
20
|
"dark:focus-visible:ring-[var(--color-primary-400)] dark:focus-visible:ring-offset-[var(--color-neutral-900)]",
|
|
21
21
|
// Description text below the label
|
|
22
|
-
subtitleStyle: "text-
|
|
22
|
+
subtitleStyle: "text-sm text-[var(--color-text-muted)] mt-0.5 truncate",
|
|
23
23
|
};
|
|
24
24
|
|
|
25
25
|
export { menuItemTheme };
|
|
@@ -98,7 +98,7 @@ const MessageRoot = React__default.forwardRef(({ role, variant: variantProp, con
|
|
|
98
98
|
const renderedContent = shouldAnimate ? (jsx(TypeWriter, { text: messageContent, speed: typingSpeed, enabled: true, className: "break-words" })) : (messageContent);
|
|
99
99
|
// System messages render differently (centered, no avatar)
|
|
100
100
|
if (variant === "system") {
|
|
101
|
-
return (jsx("div", { ref: ref, className: cn("w-full max-w-full", className), "data-variant": "system", "data-role": role, ...props, children: jsxs("div", { className: containerStyle, children: [jsx("div", { className: bubbleStyle, children: typeof renderedContent === "string" ? (jsx("p", { className: "text-
|
|
101
|
+
return (jsx("div", { ref: ref, className: cn("w-full max-w-full", className), "data-variant": "system", "data-role": role, ...props, children: jsxs("div", { className: containerStyle, children: [jsx("div", { className: bubbleStyle, children: typeof renderedContent === "string" ? (jsx("p", { className: "text-base", children: renderedContent })) : (renderedContent) }), jsx(MessageFooter, { isStreaming: isStreaming, streamingIndicator: streamingIndicator, showTimestamp: showTimestamp, timestamp: timestamp, actions: undefined, timestampStyle: timestampStyle, streamingIndicatorStyle: cn(messageTheme.streamingIndicatorStyle, customTheme.streamingIndicatorStyle), actionsContainerStyle: undefined, variant: "system" })] }) }));
|
|
102
102
|
}
|
|
103
103
|
return (jsx("div", { ref: ref, className: cn("w-full max-w-full group", className), "data-variant": variant, "data-role": role, ...props, children: jsxs("div", { className: containerStyle, children: [avatar && (jsx("div", { className: "flex-shrink-0", children: jsx(Avatar, { src: avatar.src, alt: avatar.alt, fallback: avatar.fallback, size: "xs" }) })), jsxs("div", { className: cn("flex flex-col", variant === "sender" ? "items-end" : "items-start"), children: [jsx("div", { className: bubbleStyle, children: typeof renderedContent === "string" ? (jsx("p", { className: "break-words", children: renderedContent })) : (renderedContent) }), jsx(MessageFooter, { isStreaming: isStreaming, streamingIndicator: streamingIndicator, showTimestamp: showTimestamp, timestamp: timestamp, actions: finalActions, timestampStyle: timestampStyle, streamingIndicatorStyle: cn(messageTheme.streamingIndicatorStyle, customTheme.streamingIndicatorStyle), actionsContainerStyle: cn(messageTheme.actionsContainerStyle, customTheme.actionsContainerStyle), variant: variant })] })] }) }));
|
|
104
104
|
});
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
const messageTheme = {
|
|
6
6
|
// Shared base styles (apply to all variants)
|
|
7
7
|
bubbleBaseStyle: "max-w-[80%] sm:max-w-[85%] rounded-[calc(var(--radius-base)*1.5)] px-3 py-2 w-fit min-w-fit h-fit",
|
|
8
|
-
containerBaseStyle: "flex items-start gap-3 h-fit text-
|
|
9
|
-
timestampStyle: "text-
|
|
8
|
+
containerBaseStyle: "flex items-start gap-3 h-fit text-base",
|
|
9
|
+
timestampStyle: "text-sm text-[var(--color-text-placeholder)] dark:text-[var(--color-neutral-500)]",
|
|
10
10
|
// Variant-specific modifiers (only differences)
|
|
11
11
|
variants: {
|
|
12
12
|
sender: {
|
|
@@ -29,14 +29,14 @@ const messageTheme = {
|
|
|
29
29
|
system: {
|
|
30
30
|
containerModifier: "justify-center", // Center alignment
|
|
31
31
|
bubbleStyle: "bg-[var(--color-background)] text-[var(--color-text-muted)]/80 rounded-[calc(var(--radius-base)*0.75)] px-1 py-0.5 " +
|
|
32
|
-
"text-
|
|
32
|
+
"text-sm border-none " +
|
|
33
33
|
// Dark mode
|
|
34
34
|
"",
|
|
35
35
|
timestampModifier: "text-center",
|
|
36
36
|
},
|
|
37
37
|
},
|
|
38
38
|
// Feature styles (streaming, actions)
|
|
39
|
-
streamingIndicatorStyle: "flex items-center gap-1 text-[var(--color-text-placeholder)] text-
|
|
39
|
+
streamingIndicatorStyle: "flex items-center gap-1 text-[var(--color-text-placeholder)] text-sm " +
|
|
40
40
|
"dark:text-[var(--color-neutral-500)]",
|
|
41
41
|
actionsContainerStyle: "flex items-start gap-3",
|
|
42
42
|
};
|
|
@@ -8,8 +8,8 @@ const modalTheme = {
|
|
|
8
8
|
},
|
|
9
9
|
header: "flex items-start justify-between p-6 pb-0 shrink-0 border-b border-transparent gap-6 relative",
|
|
10
10
|
headerContent: "flex flex-col items-start gap-2 flex-1",
|
|
11
|
-
title: "text-
|
|
12
|
-
subtitle: "text-
|
|
11
|
+
title: "text-lg leading-6 font-semibold text-[var(--color-text-primary)]",
|
|
12
|
+
subtitle: "text-base text-[var(--color-text-secondary)] mt-0.5",
|
|
13
13
|
body: "flex-1 overflow-y-auto p-6 pb-3",
|
|
14
14
|
footer: "flex items-center justify-end gap-2 p-6 py-3 border-t border-transparent",
|
|
15
15
|
};
|
|
@@ -104,7 +104,7 @@ description, shortcut, href, onClick, active = false, disabled = false, isDisabl
|
|
|
104
104
|
? React__default.cloneElement(startContent, {
|
|
105
105
|
className: cn(iconClasses, startContent.props.className),
|
|
106
106
|
})
|
|
107
|
-
: startContent })), (!isInSidebar || !collapsed) && (jsxs("div", { className: "flex-1 min-w-0", children: [jsxs("div", { className: "flex items-center justify-between gap-2", children: [jsx("span", { className: cn("truncate", textClasses), children: children }), shortcut && (jsx("kbd", { className: "hidden group-hover:inline-block text-
|
|
107
|
+
: startContent })), (!isInSidebar || !collapsed) && (jsxs("div", { className: "flex-1 min-w-0", children: [jsxs("div", { className: "flex items-center justify-between gap-2", children: [jsx("span", { className: cn("truncate", textClasses), children: children }), shortcut && (jsx("kbd", { className: "hidden group-hover:inline-block text-sm text-[var(--color-text-muted)] font-sans border border-[var(--color-border)] rounded px-1.5 py-0.5", children: shortcut }))] }), description && (jsx("div", { className: "text-sm text-[var(--color-text-muted)] mt-0.5 truncate", children: description }))] })), endContent && (!isInSidebar || !collapsed) && (jsx("div", { className: "flex items-center justify-center flex-shrink-0", children: endContent })), isInSidebar && collapsed && (jsx("span", { className: "sr-only", children: children }))] }));
|
|
108
108
|
// Wrap with link if href is provided
|
|
109
109
|
if (href && !actualIsDisabled) {
|
|
110
110
|
const LinkContent = (jsx("a", { href: href, className: "block group", children: content }));
|