@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.
Files changed (155) hide show
  1. package/dist/components/ai/ApprovalCard/ApprovalCard.js +1 -1
  2. package/dist/components/ai/CodeBlock/CodeBlock.theme.js +2 -2
  3. package/dist/components/ai/PromptInput/PromptInput.js +2 -2
  4. package/dist/components/ai/PromptInput/PromptInput.theme.js +1 -1
  5. package/dist/components/ai/PromptSuggestions/PromptSuggestion.theme.js +1 -1
  6. package/dist/components/ai/StreamingResponse/MarkdownRenderer.js +6 -6
  7. package/dist/components/ai/StreamingResponse/StreamingResponse.theme.js +4 -4
  8. package/dist/components/ai/ThinkingIndicator/ThinkingIndicator.theme.js +2 -2
  9. package/dist/components/ai/TokenCounter/TokenCounter.theme.js +6 -6
  10. package/dist/components/charts/ActivityRings/ActivityRings.js +1 -1
  11. package/dist/components/charts/ActivityRings/ActivityRings.theme.js +2 -2
  12. package/dist/components/charts/BarChart/BarChart.js +3 -3
  13. package/dist/components/charts/ChartContainer.js +1 -1
  14. package/dist/components/charts/ComboChart/ComboChart.js +2 -2
  15. package/dist/components/charts/DonutChart/DonutChart.theme.js +1 -1
  16. package/dist/components/charts/DonutChart/MultiSegmentDonutChart.js +1 -1
  17. package/dist/components/charts/DonutChart/MultiSegmentDonutChart.theme.js +1 -1
  18. package/dist/components/charts/FunnelChart/FunnelChart.js +7 -7
  19. package/dist/components/charts/Heatmap/Heatmap.theme.js +1 -1
  20. package/dist/components/charts/Heatmap/HeatmapCell.js +1 -1
  21. package/dist/components/charts/Heatmap/HeatmapLegend.js +1 -1
  22. package/dist/components/charts/RadarChart/RadarChart.theme.js +2 -2
  23. package/dist/components/charts/ScatterPlot/ScatterPlot.js +1 -1
  24. package/dist/components/charts/ScatterPlot/ScatterPlot.theme.js +2 -2
  25. package/dist/components/charts/StackedBarChart/StackedBarChart.js +2 -2
  26. package/dist/components/charts/shared/ChartErrorBoundary/ChartErrorBoundary.js +1 -1
  27. package/dist/components/charts/shared/ChartLegend/ChartLegendContent.js +1 -1
  28. package/dist/components/charts/shared/ChartText/ChartText.js +1 -1
  29. package/dist/components/charts/shared/ChartText/ChartText.theme.js +1 -1
  30. package/dist/components/charts/shared/ChartTooltip/ChartTooltip.theme.js +4 -4
  31. package/dist/components/core/Alert/Alert.js +1 -0
  32. package/dist/components/core/Alert/Alert.theme.js +4 -8
  33. package/dist/components/core/Alert/Alert.types.d.ts +2 -1
  34. package/dist/components/core/AlertDialog/AlertDialog.js +1 -1
  35. package/dist/components/core/Avatar/Avatar.theme.js +5 -5
  36. package/dist/components/core/AvatarGroup/AvatarGroup.theme.js +1 -1
  37. package/dist/components/core/Badge/Badge.theme.js +11 -6
  38. package/dist/components/core/Badge/Badge.types.d.ts +2 -1
  39. package/dist/components/core/Breadcrumbs/Breadcrumbs.js +1 -1
  40. package/dist/components/core/Button/Button.theme.js +38 -32
  41. package/dist/components/core/Button/Button.types.d.ts +2 -1
  42. package/dist/components/core/ButtonGroup/ButtonGroup.theme.js +1 -1
  43. package/dist/components/core/Calendar/Calendar.js +1 -1
  44. package/dist/components/core/Calendar/Calendar.theme.js +5 -5
  45. package/dist/components/core/Calendar/CalendarMini/CalendarMini.js +1 -1
  46. package/dist/components/core/Card/Card.theme.js +2 -2
  47. package/dist/components/core/CommandPalette/CommandItem.js +1 -1
  48. package/dist/components/core/CommandPalette/CommandPalette.theme.js +3 -3
  49. package/dist/components/core/ContextMenu/ContextMenu.theme.js +3 -3
  50. package/dist/components/core/ContextMenu/ContextMenuItem.js +1 -1
  51. package/dist/components/core/Drawer/Drawer.theme.js +2 -2
  52. package/dist/components/core/Dropdown/Dropdown.theme.js +1 -1
  53. package/dist/components/core/Empty/Empty.theme.js +2 -2
  54. package/dist/components/core/Kbd/Kbd.theme.js +3 -3
  55. package/dist/components/core/Loader/Loader.theme.js +1 -1
  56. package/dist/components/core/MenuItem/MenuItem.theme.js +2 -2
  57. package/dist/components/core/Message/Message.js +1 -1
  58. package/dist/components/core/Message/Message.theme.js +4 -4
  59. package/dist/components/core/Modal/Modal.theme.js +2 -2
  60. package/dist/components/core/NavItem/NavItem.js +1 -1
  61. package/dist/components/core/NavItem/NavItem.theme.js +1 -1
  62. package/dist/components/core/OfflineIndicator/OfflineIndicator.theme.js +2 -2
  63. package/dist/components/core/PageHeading/PageHeading.theme.js +1 -1
  64. package/dist/components/core/Pagination/Pagination.theme.js +2 -2
  65. package/dist/components/core/Pill/Pill.theme.js +3 -3
  66. package/dist/components/core/Popover/PopoverContent.js +2 -0
  67. package/dist/components/core/Progress/Progress.theme.js +10 -7
  68. package/dist/components/core/Progress/Progress.types.d.ts +2 -1
  69. package/dist/components/core/Segmented/Segmented.theme.js +3 -3
  70. package/dist/components/core/Sidebar/SidebarNavGroup.js +1 -1
  71. package/dist/components/core/Spinner/Spinner.theme.js +3 -5
  72. package/dist/components/core/Spinner/Spinner.types.d.ts +2 -1
  73. package/dist/components/core/Tabs/Tabs.theme.js +2 -2
  74. package/dist/components/core/Tag/Tag.theme.js +2 -2
  75. package/dist/components/core/Toast/Toast.theme.js +4 -4
  76. package/dist/components/core/Tooltip/Tooltip.theme.js +1 -1
  77. package/dist/components/core/Tree/Tree.theme.js +1 -1
  78. package/dist/components/data-display/DescriptionList/DescriptionList.theme.js +2 -2
  79. package/dist/components/data-display/Feed/Feed.js +1 -1
  80. package/dist/components/data-display/Feed/Feed.theme.js +2 -2
  81. package/dist/components/data-display/GanttChart/GanttChart.theme.js +2 -2
  82. package/dist/components/data-display/GanttChart/GanttChartPanel.js +1 -1
  83. package/dist/components/data-display/GanttChart/GanttMilestone.js +2 -2
  84. package/dist/components/data-display/GanttChart/GanttTableGroupRow.js +1 -1
  85. package/dist/components/data-display/GanttChart/GanttTaskBar.js +2 -2
  86. package/dist/components/data-display/KPI/KPI.js +1 -1
  87. package/dist/components/data-display/KPI/KPI.theme.js +10 -11
  88. package/dist/components/data-display/KPI/KPI.types.d.ts +2 -1
  89. package/dist/components/data-display/Metric/Metric.js +1 -1
  90. package/dist/components/data-display/Metric/Metric.theme.js +11 -7
  91. package/dist/components/data-display/Metric/Metric.types.d.ts +2 -1
  92. package/dist/components/data-display/Table/Table.theme.js +3 -3
  93. package/dist/components/data-display/Table/TableActionsMenu.js +1 -1
  94. package/dist/components/data-display/Table/TableColumnManager.js +1 -1
  95. package/dist/components/data-display/Table/TableFilter.js +3 -3
  96. package/dist/components/data-display/Table/TableHeader.js +1 -1
  97. package/dist/components/data-display/Table/TablePagination.js +1 -1
  98. package/dist/components/data-display/Table/TableSelectionHeader.js +1 -1
  99. package/dist/components/effects/CustomCursor/CustomCursor.js +1 -1
  100. package/dist/components/effects/CustomCursor/CustomCursor.theme.js +3 -1
  101. package/dist/components/effects/CustomCursor/CustomCursor.types.d.ts +2 -1
  102. package/dist/components/effects/StickyScroll/StickyScroll.js +1 -1
  103. package/dist/components/forms/Checkbox/Checkbox.d.ts +3 -4
  104. package/dist/components/forms/Checkbox/Checkbox.js +33 -9
  105. package/dist/components/forms/Checkbox/Checkbox.theme.js +7 -1
  106. package/dist/components/forms/Checkbox/Checkbox.types.d.ts +28 -2
  107. package/dist/components/forms/Checkbox/CheckboxContext.d.ts +14 -0
  108. package/dist/components/forms/Checkbox/CheckboxContext.js +12 -0
  109. package/dist/components/forms/Checkbox/CheckboxGroup.d.ts +3 -0
  110. package/dist/components/forms/Checkbox/CheckboxGroup.js +40 -0
  111. package/dist/components/forms/Checkbox/index.d.ts +1 -1
  112. package/dist/components/forms/ColorPicker/ColorPicker.js +1 -1
  113. package/dist/components/forms/ColorPicker/ColorPicker.theme.js +1 -1
  114. package/dist/components/forms/ColorPicker/ColorPickerInput.js +7 -7
  115. package/dist/components/forms/CronInput/CronInput.js +1 -1
  116. package/dist/components/forms/CronInput/CronInput.theme.js +8 -8
  117. package/dist/components/forms/DatePicker/DatePicker.theme.js +1 -1
  118. package/dist/components/forms/DatePicker/DatePickerContent.js +1 -1
  119. package/dist/components/forms/FileUpload/FileUpload.js +2 -2
  120. package/dist/components/forms/FileUpload/FileUpload.theme.js +4 -4
  121. package/dist/components/forms/FormLabel/FormLabel.theme.js +1 -1
  122. package/dist/components/forms/Input/Input.theme.js +1 -1
  123. package/dist/components/forms/InputCounter/InputCounter.theme.js +1 -1
  124. package/dist/components/forms/InputOTP/InputOTP.theme.js +1 -1
  125. package/dist/components/forms/InputTag/InputTag.js +1 -1
  126. package/dist/components/forms/Mention/Mention.theme.js +3 -3
  127. package/dist/components/forms/Radio/Radio.d.ts +3 -4
  128. package/dist/components/forms/Radio/Radio.js +21 -4
  129. package/dist/components/forms/Radio/Radio.theme.js +7 -1
  130. package/dist/components/forms/Radio/Radio.types.d.ts +30 -4
  131. package/dist/components/forms/Radio/RadioContext.d.ts +14 -0
  132. package/dist/components/forms/Radio/RadioContext.js +12 -0
  133. package/dist/components/forms/Radio/RadioGroup.d.ts +3 -0
  134. package/dist/components/forms/Radio/RadioGroup.js +36 -0
  135. package/dist/components/forms/Radio/index.d.ts +1 -1
  136. package/dist/components/forms/RichTextEditor/RichTextEditor.js +2 -2
  137. package/dist/components/forms/RichTextEditor/RichTextEditor.theme.js +1 -1
  138. package/dist/components/forms/Select/Select.theme.js +1 -1
  139. package/dist/components/forms/Signature/Signature.theme.js +1 -1
  140. package/dist/components/forms/Slider/Slider.theme.js +3 -3
  141. package/dist/components/forms/Switch/Switch.theme.js +1 -1
  142. package/dist/components/forms/TimePicker/TimePicker.theme.js +2 -2
  143. package/dist/components/forms/TransferList/TransferList.js +2 -2
  144. package/dist/components/forms/TransferList/TransferList.theme.js +6 -6
  145. package/dist/components/forms/forms.theme.js +6 -6
  146. package/dist/components/forms/index.d.ts +2 -2
  147. package/dist/components/layout/FormLayout/FormLayout.theme.js +4 -4
  148. package/dist/hooks/useSelectPortal.d.ts +3 -2
  149. package/dist/hooks/useSelectPortal.js +44 -19
  150. package/dist/styles.css +1 -1
  151. package/dist/utils/colorUtils.d.ts +23 -0
  152. package/dist/utils/colorUtils.js +45 -0
  153. package/dist/utils/index.d.ts +1 -0
  154. package/package.json +1 -1
  155. 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 = "neutral" | "primary" | "success" | "warning" | "danger";
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-sm", children: subtitle }) }), footer && (jsx(Modal.Footer, { className: "pb-6", children: footer(handleClose) }))] })] }));
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-[var(--avatar-text-xs)]",
10
- sm: "size-[var(--avatar-size-sm)] text-[var(--avatar-text-sm)]",
11
- md: "size-[var(--avatar-size-md)] text-[var(--avatar-text-md)]",
12
- lg: "size-[var(--avatar-size-lg)] text-[var(--avatar-text-lg)]",
13
- xl: "size-[var(--avatar-size-xl)] text-[var(--avatar-text-xl)]",
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-sm flex items-center justify-center hover:bg-neutral-200 transition-colors duration-200",
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-xs px-1.5 py-0.5 gap-1",
59
- md: "text-sm px-2 py-0.5 gap-1",
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 = "neutral" | "primary" | "success" | "warning" | "danger";
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-sm", 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}`));
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
- "dark:hover:bg-[var(--color-primary-500)]",
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)] hover:ring-2 hover:ring-[var(--color-border)] " +
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)] hover:ring-2 hover:ring-[var(--color-primary)]/30 " +
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)] hover:ring-2 hover:ring-[var(--color-success)]/30 " +
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)] hover:ring-2 hover:ring-[var(--color-warning)]/30 " +
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)] hover:ring-2 hover:ring-[var(--color-danger)]/30 " +
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)] hover:ring-2 hover:ring-[var(--color-border)] " +
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)] hover:ring-2 hover:ring-[var(--color-primary)]/10 " +
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)] hover:ring-2 hover:ring-[var(--color-success)]/20 " +
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)] hover:ring-2 hover:ring-[var(--color-warning)]/20 " +
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)] hover:ring-2 hover:ring-[var(--color-danger)]/20 " +
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-sm",
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-sm h-fit",
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-sm",
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-sm h-fit",
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-base",
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-base h-fit",
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 = "neutral" | "primary" | "success" | "warning" | "danger";
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-sm text-[var(--color-text-primary)] flex items-center",
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-sm font-medium" })), (resolvedHeaderMode === 'dropdown' || (resolvedHeaderMode === 'mixed' && enableYearDropdown)) && (jsx(Select, { value: currentYear.toString(), onChange: handleYearChange, options: yearOptions, size: "sm", className: "text-sm 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) => {
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-base font-semibold text-[var(--color-text-primary)] cursor-pointer hover:text-[var(--color-primary)] transition-colors " +
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-xs font-medium text-[var(--color-text-muted)] " +
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-sm",
49
- md: "size-10 text-sm",
50
- lg: "size-12 text-base",
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-sm font-medium opacity-60", children: formatDayName(date) }), jsx("time", { dateTime: date.toISOString(), className: cn("font-semibold"), children: formatDateNumber(date) })] }, date.toISOString()));
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-base font-semibold leading-none text-[var(--color-text-primary)]",
5
- subtitleStyle: "text-sm text-[var(--color-text-muted)]",
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-sm truncate", children: command.label }), command.subtitle && (jsx("div", { className: "text-sm opacity-70 truncate mt-0", children: command.subtitle }))] }), renderContentEnd()] }));
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-sm bg-transparent border-none outline-none " +
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-xs font-semibold text-[var(--color-text-muted)]/50 uppercase " +
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-sm text-[var(--color-text-muted)] " +
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 - similar to main menu but slightly smaller
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-secondary)] shadow-xl flex flex-col p-1 focus:outline-none " +
19
- "dark:bg-[var(--color-neutral-800)] dark:border-[var(--color-neutral-700)]",
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-xs text-[var(--color-text-muted)] font-mono", children: shortcut })) : undefined);
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-base font-semibold leading-6 text-[var(--color-text-primary)]",
12
- subtitle: "text-sm text-[var(--color-text-secondary)] mt-0.5",
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-xs font-semibold text-[var(--color-text-muted)] uppercase tracking-tight",
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-base font-semibold text-[var(--color-text-primary)]",
8
+ titleStyle: "text-lg font-semibold text-[var(--color-text-primary)]",
9
9
  // Description text styles - customizable typography and colors
10
- subtitleStyle: "text-sm text-[var(--color-text-muted)]",
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-xs px-1 py-0.5 min-w-[1.25rem]',
8
- md: 'text-sm px-1.5 py-0.5 min-w-[1.5rem]',
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-xs',
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-sm font-medium text-[var(--color-text-secondary)] min-w-[3ch] tabular-nums",
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-sm font-[500] text-[var(--color-text-primary)] cursor-pointer outline-none select-none rounded-[var(--radius-base)] transition-colors duration-300 " +
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-xs text-[var(--color-text-muted)] mt-0.5 truncate",
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-sm", 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" })] }) }));
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-sm",
9
- timestampStyle: "text-xs text-[var(--color-text-placeholder)] dark:text-[var(--color-neutral-500)]",
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-xs border-none " +
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-xs " +
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-base leading-6 font-semibold text-[var(--color-text-primary)]",
12
- subtitle: "text-sm text-[var(--color-text-secondary)] mt-0.5",
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-xs 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-xs 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 }))] }));
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 }));