flikkui 0.2.0-beta.2 → 0.2.0-beta.4

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 (214) hide show
  1. package/dist/components/ai/PromptInput/PromptInput.js +23 -15
  2. package/dist/components/ai/PromptSuggestions/PromptSuggestion.d.ts +27 -0
  3. package/dist/components/ai/PromptSuggestions/PromptSuggestion.js +62 -0
  4. package/dist/components/ai/PromptSuggestions/PromptSuggestion.theme.d.ts +10 -0
  5. package/dist/components/ai/PromptSuggestions/PromptSuggestion.theme.js +12 -0
  6. package/dist/components/ai/PromptSuggestions/PromptSuggestion.types.d.ts +53 -0
  7. package/dist/components/ai/PromptSuggestions/index.d.ts +4 -2
  8. package/dist/components/ai/index.d.ts +2 -12
  9. package/dist/components/charts/ActivityRings/ActivityRings.js +70 -58
  10. package/dist/components/charts/ActivityRings/ActivityRings.theme.js +0 -1
  11. package/dist/components/charts/ActivityRings/ActivityRings.types.d.ts +17 -0
  12. package/dist/components/charts/BarChart/BarChart.js +8 -4
  13. package/dist/components/charts/BarChart/BarChart.types.d.ts +14 -0
  14. package/dist/components/charts/DonutChart/DonutChart.js +11 -8
  15. package/dist/components/charts/DonutChart/DonutChart.theme.d.ts +3 -0
  16. package/dist/components/charts/DonutChart/DonutChart.theme.js +5 -4
  17. package/dist/components/charts/DonutChart/donut-utils.d.ts +5 -0
  18. package/dist/components/charts/DonutChart/donut-utils.js +26 -1
  19. package/dist/components/charts/Heatmap/Heatmap.theme.js +2 -2
  20. package/dist/components/charts/shared/ChartAxis/XAxis.d.ts +2 -2
  21. package/dist/components/charts/shared/ChartAxis/XAxis.js +4 -4
  22. package/dist/components/charts/shared/ChartAxis/YAxis.d.ts +2 -2
  23. package/dist/components/charts/shared/ChartAxis/YAxis.js +8 -7
  24. package/dist/components/charts/shared/ChartGrid/HorizontalGrid.d.ts +1 -1
  25. package/dist/components/charts/shared/ChartGrid/HorizontalGrid.js +2 -2
  26. package/dist/components/charts/theme/chart.theme.d.ts +1 -1
  27. package/dist/components/charts/theme/chart.theme.js +39 -39
  28. package/dist/components/core/Accordion/Accordion.d.ts +1 -1
  29. package/dist/components/core/Accordion/Accordion.js +2 -2
  30. package/dist/components/core/Accordion/Accordion.types.d.ts +8 -0
  31. package/dist/components/core/Badge/Badge.js +11 -15
  32. package/dist/components/core/Badge/Badge.theme.js +7 -21
  33. package/dist/components/core/Badge/Badge.types.d.ts +9 -1
  34. package/dist/components/core/Button/Button.js +2 -2
  35. package/dist/components/core/Button/Button.theme.js +1 -1
  36. package/dist/components/core/Button/Button.types.d.ts +8 -0
  37. package/dist/components/core/Card/Card.js +8 -2
  38. package/dist/components/core/Card/Card.theme.js +1 -1
  39. package/dist/components/core/Card/Card.types.d.ts +24 -1
  40. package/dist/components/core/Drawer/Drawer.d.ts +1 -1
  41. package/dist/components/core/Drawer/Drawer.js +10 -40
  42. package/dist/components/core/Drawer/Drawer.theme.js +2 -1
  43. package/dist/components/core/Drawer/Drawer.types.d.ts +8 -0
  44. package/dist/components/core/Dropdown/Dropdown.d.ts +1 -1
  45. package/dist/components/core/Dropdown/Dropdown.js +2 -2
  46. package/dist/components/core/Dropdown/Dropdown.types.d.ts +8 -0
  47. package/dist/components/core/Metric/Metric.d.ts +1 -1
  48. package/dist/components/core/Metric/Metric.js +9 -5
  49. package/dist/components/core/Metric/Metric.theme.d.ts +1 -1
  50. package/dist/components/core/Metric/Metric.theme.js +38 -28
  51. package/dist/components/core/Metric/Metric.types.d.ts +27 -8
  52. package/dist/components/core/Modal/Modal.d.ts +1 -1
  53. package/dist/components/core/Modal/Modal.js +17 -40
  54. package/dist/components/core/Modal/Modal.theme.js +8 -3
  55. package/dist/components/core/Modal/Modal.types.d.ts +18 -0
  56. package/dist/components/core/Modal/index.d.ts +1 -1
  57. package/dist/components/core/Notification/Notification.js +2 -0
  58. package/dist/components/core/Pill/Pill.d.ts +6 -11
  59. package/dist/components/core/Pill/Pill.theme.d.ts +2 -2
  60. package/dist/components/core/Pill/Pill.types.d.ts +9 -22
  61. package/dist/components/core/Pill/index.d.ts +1 -1
  62. package/dist/components/core/Popover/Popover.d.ts +1 -1
  63. package/dist/components/core/Popover/Popover.js +2 -2
  64. package/dist/components/core/Popover/Popover.types.d.ts +8 -0
  65. package/dist/components/core/Progress/Progress.d.ts +28 -0
  66. package/dist/components/core/Progress/Progress.js +114 -0
  67. package/dist/components/core/Progress/Progress.theme.d.ts +5 -0
  68. package/dist/components/core/Progress/Progress.theme.js +33 -0
  69. package/dist/components/core/Progress/Progress.types.d.ts +92 -0
  70. package/dist/components/core/Progress/index.d.ts +2 -0
  71. package/dist/components/core/Tabs/Tabs.js +2 -2
  72. package/dist/components/core/Tabs/Tabs.types.d.ts +8 -0
  73. package/dist/components/core/Tag/Tag.animations.d.ts +3 -0
  74. package/dist/components/core/Tag/Tag.animations.js +31 -0
  75. package/dist/components/core/Tag/Tag.d.ts +14 -0
  76. package/dist/components/core/Tag/Tag.js +45 -0
  77. package/dist/components/core/Tag/Tag.theme.d.ts +2 -0
  78. package/dist/components/core/Tag/Tag.theme.js +21 -0
  79. package/dist/components/core/Tag/Tag.types.d.ts +40 -0
  80. package/dist/components/core/Tag/index.d.ts +3 -0
  81. package/dist/components/core/Tooltip/Tooltip.d.ts +1 -1
  82. package/dist/components/core/Tooltip/Tooltip.js +3 -3
  83. package/dist/components/core/Tooltip/Tooltip.theme.js +1 -1
  84. package/dist/components/core/Tooltip/Tooltip.types.d.ts +17 -0
  85. package/dist/components/core/index.d.ts +2 -1
  86. package/dist/components/core/index.js +3 -2
  87. package/dist/components/effects/CustomCursor/CustomCursor.d.ts +0 -13
  88. package/dist/components/effects/CustomCursor/CustomCursor.js +26 -2
  89. package/dist/components/effects/CustomCursor/CustomCursor.theme.js +12 -1
  90. package/dist/components/effects/CustomCursor/CustomCursor.types.d.ts +14 -1
  91. package/dist/components/forms/Combobox/Combobox.d.ts +25 -0
  92. package/dist/components/forms/Combobox/Combobox.js +412 -0
  93. package/dist/components/forms/Combobox/Combobox.theme.d.ts +6 -0
  94. package/dist/components/forms/Combobox/Combobox.theme.js +60 -0
  95. package/dist/components/forms/Combobox/Combobox.types.d.ts +111 -0
  96. package/dist/components/forms/Combobox/index.d.ts +3 -0
  97. package/dist/components/forms/FileUpload/FileUpload.js +2 -0
  98. package/dist/components/forms/Input/Input.js +25 -28
  99. package/dist/components/forms/Input/inputMasks.d.ts +15 -0
  100. package/dist/components/forms/Input/inputMasks.js +72 -1
  101. package/dist/components/forms/InputTag/InputTag.d.ts +40 -0
  102. package/dist/components/forms/InputTag/InputTag.js +491 -0
  103. package/dist/components/forms/InputTag/InputTag.theme.d.ts +2 -0
  104. package/dist/components/forms/InputTag/InputTag.theme.js +16 -0
  105. package/dist/components/forms/InputTag/InputTag.types.d.ts +107 -0
  106. package/dist/components/forms/InputTag/index.d.ts +3 -0
  107. package/dist/components/forms/Select/Select.d.ts +101 -2
  108. package/dist/components/forms/Select/Select.js +128 -132
  109. package/dist/components/forms/Select/Select.theme.js +10 -14
  110. package/dist/components/forms/Select/Select.types.d.ts +6 -2
  111. package/dist/components/forms/Select/index.d.ts +7 -4
  112. package/dist/components/forms/Select/useSelectState.d.ts +66 -0
  113. package/dist/components/forms/Select/useSelectState.js +134 -0
  114. package/dist/components/forms/SelectExpand/SelectExpand.animations.d.ts +20 -0
  115. package/dist/components/forms/SelectExpand/SelectExpand.animations.js +74 -0
  116. package/dist/components/forms/SelectExpand/SelectExpand.d.ts +9 -0
  117. package/dist/components/forms/SelectExpand/SelectExpand.js +223 -0
  118. package/dist/components/forms/SelectExpand/SelectExpand.theme.d.ts +5 -0
  119. package/dist/components/forms/SelectExpand/SelectExpand.theme.js +74 -0
  120. package/dist/components/forms/SelectExpand/SelectExpand.types.d.ts +126 -0
  121. package/dist/components/forms/SelectExpand/index.d.ts +4 -0
  122. package/dist/components/forms/Switch/Switch.js +3 -3
  123. package/dist/components/forms/Switch/Switch.theme.d.ts +1 -1
  124. package/dist/components/forms/Switch/Switch.theme.js +2 -2
  125. package/dist/components/forms/TimePicker/TimePicker.animations.d.ts +0 -46
  126. package/dist/components/forms/TimePicker/TimePicker.d.ts +15 -6
  127. package/dist/components/forms/TimePicker/TimePicker.js +285 -124
  128. package/dist/components/forms/TimePicker/TimePicker.theme.d.ts +1 -1
  129. package/dist/components/forms/TimePicker/TimePicker.theme.js +39 -22
  130. package/dist/components/forms/TimePicker/TimePicker.types.d.ts +88 -34
  131. package/dist/components/forms/TimePicker/TimePickerContent.d.ts +7 -10
  132. package/dist/components/forms/TimePicker/TimePickerContent.js +149 -16
  133. package/dist/components/forms/TimePicker/TimePickerTrigger.d.ts +3 -3
  134. package/dist/components/forms/TimePicker/TimePickerTrigger.js +22 -19
  135. package/dist/components/forms/TimePicker/WheelColumn.d.ts +14 -0
  136. package/dist/components/forms/TimePicker/WheelColumn.js +90 -0
  137. package/dist/components/forms/TimePicker/index.d.ts +4 -1
  138. package/dist/components/forms/TimePicker/useWheelPicker.d.ts +37 -0
  139. package/dist/components/forms/TimePicker/useWheelPicker.js +138 -0
  140. package/dist/components/forms/forms.theme.d.ts +14 -0
  141. package/dist/components/forms/forms.theme.js +31 -0
  142. package/dist/components/forms/index.d.ts +9 -3
  143. package/dist/components/forms/index.js +73 -2
  144. package/dist/hooks/index.d.ts +0 -4
  145. package/dist/icons/Icon.d.ts +7 -0
  146. package/dist/icons/Icon.js +6 -2
  147. package/dist/index.js +12 -16
  148. package/dist/styles.css +1 -1
  149. package/dist/utils/index.d.ts +0 -1
  150. package/dist/utils/optimisticErrors.js +1 -70
  151. package/package.json +1 -1
  152. package/dist/components/ai/EditingIndicator/EditingIndicator.animations.d.ts +0 -31
  153. package/dist/components/ai/EditingIndicator/EditingIndicator.animations.js +0 -115
  154. package/dist/components/ai/EditingIndicator/EditingIndicator.d.ts +0 -35
  155. package/dist/components/ai/EditingIndicator/EditingIndicator.js +0 -94
  156. package/dist/components/ai/EditingIndicator/EditingIndicator.theme.d.ts +0 -2
  157. package/dist/components/ai/EditingIndicator/EditingIndicator.theme.js +0 -13
  158. package/dist/components/ai/EditingIndicator/EditingIndicator.types.d.ts +0 -54
  159. package/dist/components/ai/EditingIndicator/index.d.ts +0 -9
  160. package/dist/components/ai/GenerativeRenderer/GenerativeRenderer.d.ts +0 -3
  161. package/dist/components/ai/GenerativeRenderer/GenerativeRenderer.js +0 -126
  162. package/dist/components/ai/GenerativeRenderer/GenerativeRenderer.theme.d.ts +0 -2
  163. package/dist/components/ai/GenerativeRenderer/GenerativeRenderer.theme.js +0 -8
  164. package/dist/components/ai/GenerativeRenderer/GenerativeRenderer.types.d.ts +0 -45
  165. package/dist/components/ai/GenerativeRenderer/index.d.ts +0 -3
  166. package/dist/components/ai/PresenceIndicator/PresenceIndicator.animations.d.ts +0 -17
  167. package/dist/components/ai/PresenceIndicator/PresenceIndicator.animations.js +0 -56
  168. package/dist/components/ai/PresenceIndicator/PresenceIndicator.d.ts +0 -38
  169. package/dist/components/ai/PresenceIndicator/PresenceIndicator.js +0 -110
  170. package/dist/components/ai/PresenceIndicator/PresenceIndicator.theme.d.ts +0 -2
  171. package/dist/components/ai/PresenceIndicator/PresenceIndicator.theme.js +0 -13
  172. package/dist/components/ai/PresenceIndicator/PresenceIndicator.types.d.ts +0 -53
  173. package/dist/components/ai/PresenceIndicator/index.d.ts +0 -8
  174. package/dist/components/ai/PresenceProvider/PresenceContext.d.ts +0 -24
  175. package/dist/components/ai/PresenceProvider/PresenceContext.js +0 -34
  176. package/dist/components/ai/PresenceProvider/PresenceProvider.d.ts +0 -32
  177. package/dist/components/ai/PresenceProvider/PresenceProvider.js +0 -321
  178. package/dist/components/ai/PresenceProvider/PresenceProvider.types.d.ts +0 -140
  179. package/dist/components/ai/PresenceProvider/adapters/MockAdapter.d.ts +0 -102
  180. package/dist/components/ai/PresenceProvider/adapters/MockAdapter.js +0 -331
  181. package/dist/components/ai/PresenceProvider/adapters/PresenceAdapter.d.ts +0 -93
  182. package/dist/components/ai/PresenceProvider/adapters/SupabaseAdapter.d.ts +0 -134
  183. package/dist/components/ai/PresenceProvider/adapters/WebSocketAdapter.d.ts +0 -149
  184. package/dist/components/ai/PresenceProvider/adapters/index.d.ts +0 -11
  185. package/dist/components/ai/PresenceProvider/index.d.ts +0 -10
  186. package/dist/components/ai/PromptSuggestions/PromptSuggestions.d.ts +0 -27
  187. package/dist/components/ai/PromptSuggestions/PromptSuggestions.js +0 -61
  188. package/dist/components/ai/PromptSuggestions/PromptSuggestions.types.d.ts +0 -65
  189. package/dist/components/ai/VersionSlider/VersionSlider.d.ts +0 -3
  190. package/dist/components/ai/VersionSlider/VersionSlider.js +0 -97
  191. package/dist/components/ai/VersionSlider/VersionSlider.theme.d.ts +0 -2
  192. package/dist/components/ai/VersionSlider/VersionSlider.theme.js +0 -18
  193. package/dist/components/ai/VersionSlider/VersionSlider.types.d.ts +0 -77
  194. package/dist/components/ai/VersionSlider/index.d.ts +0 -3
  195. package/dist/components/core/Pill/Pill.animations.js +0 -25
  196. package/dist/components/core/Pill/Pill.js +0 -145
  197. package/dist/components/core/Pill/Pill.theme.js +0 -65
  198. package/dist/components/core/RetryBoundary/RetryBoundary.d.ts +0 -35
  199. package/dist/components/core/RetryBoundary/RetryBoundary.js +0 -154
  200. package/dist/components/core/RetryBoundary/RetryBoundary.theme.d.ts +0 -2
  201. package/dist/components/core/RetryBoundary/RetryBoundary.theme.js +0 -7
  202. package/dist/components/core/RetryBoundary/RetryBoundary.types.d.ts +0 -51
  203. package/dist/components/core/RetryBoundary/index.d.ts +0 -3
  204. package/dist/components/forms/OptimisticForm/OptimisticForm.d.ts +0 -33
  205. package/dist/components/forms/OptimisticForm/OptimisticForm.js +0 -87
  206. package/dist/components/forms/OptimisticForm/OptimisticForm.theme.d.ts +0 -2
  207. package/dist/components/forms/OptimisticForm/OptimisticForm.theme.js +0 -8
  208. package/dist/components/forms/OptimisticForm/OptimisticForm.types.d.ts +0 -74
  209. package/dist/components/forms/OptimisticForm/index.d.ts +0 -3
  210. package/dist/hooks/useOptimisticMutation.d.ts +0 -109
  211. package/dist/hooks/useOptimisticMutation.js +0 -171
  212. package/dist/hooks/usePresence.d.ts +0 -88
  213. package/dist/utils/presenceUtils.d.ts +0 -66
  214. package/dist/utils/presenceUtils.js +0 -107
@@ -3,17 +3,16 @@ import React from "react";
3
3
  * Pill component props
4
4
  *
5
5
  * A simplified, focused component for filters, tags, and selectable chips.
6
- * Lighter alternative to Badge without icons, avatars, or dismissible functionality.
6
+ * Single outline style - use Badge for colorful semantic variations.
7
7
  *
8
8
  * @example Basic usage
9
9
  * ```tsx
10
- * <Pill variant="primary">Design</Pill>
10
+ * <Pill>Design</Pill>
11
11
  * ```
12
12
  *
13
13
  * @example Selectable filter
14
14
  * ```tsx
15
15
  * <Pill
16
- * variant="primary"
17
16
  * selected={isSelected}
18
17
  * onSelect={setIsSelected}
19
18
  * >
@@ -24,10 +23,6 @@ import React from "react";
24
23
  export interface PillProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "onChange" | "onSelect" | "onAnimationStart" | "onDragStart" | "onDragEnd" | "onDrag"> {
25
24
  /** Content to display inside the pill */
26
25
  children: React.ReactNode;
27
- /** Visual style variant (filled, outline, soft) */
28
- variant?: PillVariant;
29
- /** Semantic color (primary, success, danger, etc.) */
30
- color?: PillColor;
31
26
  /** Size of the pill */
32
27
  size?: PillSize;
33
28
  /**
@@ -53,14 +48,6 @@ export interface PillProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "
53
48
  /** Theme overrides for component styling */
54
49
  theme?: PillThemeOverrides;
55
50
  }
56
- /**
57
- * Pill visual variants (appearance)
58
- */
59
- export type PillVariant = "filled" | "outline" | "soft";
60
- /**
61
- * Pill semantic colors (intent)
62
- */
63
- export type PillColor = "neutral" | "primary" | "success" | "warning" | "danger";
64
51
  /**
65
52
  * Pill size variants
66
53
  */
@@ -72,12 +59,12 @@ export type PillSize = "sm" | "md" | "lg";
72
59
  * the shadcn approach where className prop takes highest priority.
73
60
  */
74
61
  export interface PillThemeOverrides {
75
- /** Style for the pill container */
62
+ /** Base style - structure and default colors */
76
63
  baseStyle?: string;
77
- /** Variant-specific styles (visual appearance) */
78
- variants?: Partial<Record<PillVariant, string>>;
79
- /** Color-specific styles (semantic intent) */
80
- colors?: Partial<Record<PillColor, string>>;
64
+ /** Hover state - applied when interactive and NOT selected */
65
+ hoverStyle?: string;
66
+ /** Selected state - applied when selected */
67
+ selectedStyle?: string;
81
68
  /** Size-specific styles */
82
69
  sizes?: Partial<Record<PillSize, string>>;
83
70
  /** Icon sizes for iconStart and CheckIcon */
@@ -88,8 +75,8 @@ export interface PillThemeOverrides {
88
75
  */
89
76
  export interface PillTheme {
90
77
  baseStyle: string;
91
- variants: Record<PillVariant, string>;
92
- colors: Record<PillColor, string>;
78
+ hoverStyle: string;
79
+ selectedStyle: string;
93
80
  sizes: Record<PillSize, string>;
94
81
  iconSizes: Record<PillSize, string>;
95
82
  }
@@ -1,3 +1,3 @@
1
1
  export { Pill } from './Pill';
2
- export type { PillProps, PillVariant, PillSize, PillTheme, PillThemeOverrides, } from './Pill.types';
2
+ export type { PillProps, PillSize, PillTheme, PillThemeOverrides, } from './Pill.types';
3
3
  export { pillTheme } from './Pill.theme';
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import { PopoverRootProps as PopoverProps } from "./Popover.types";
3
- export declare const Popover: (({ children, className, isOpen: controlledIsOpen, defaultIsOpen, onOpenChange, placement, offset, triggerType, closeOnClickOutside, closeOnEsc, preventClose, hasBackdrop, theme: themeOverrides, ...props }: PopoverProps) => React.JSX.Element) & {
3
+ export declare const Popover: (({ children, className, isOpen: controlledIsOpen, defaultIsOpen, onOpenChange, placement, offset, triggerType, closeOnClickOutside, closeOnEsc, preventClose, hasBackdrop, theme: themeOverrides, darkMode, ...props }: PopoverProps) => React.JSX.Element) & {
4
4
  Trigger: React.ForwardRefExoticComponent<Omit<import("./Popover.types").PopoverTriggerProps, "ref"> & React.RefAttributes<any>>;
5
5
  Content: React.ForwardRefExoticComponent<import("./Popover.types").PopoverContentProps & React.RefAttributes<HTMLDivElement>>;
6
6
  };
@@ -21,7 +21,7 @@ import { popoverTheme } from './Popover.theme.js';
21
21
  * </Popover>
22
22
  * ```
23
23
  */
24
- const PopoverRoot = ({ children, className, isOpen: controlledIsOpen, defaultIsOpen = false, onOpenChange, placement = "bottom", offset = 8, triggerType = "click", closeOnClickOutside = true, closeOnEsc = true, preventClose = false, hasBackdrop = false, theme: themeOverrides, ...props }) => {
24
+ const PopoverRoot = ({ children, className, isOpen: controlledIsOpen, defaultIsOpen = false, onOpenChange, placement = "bottom", offset = 8, triggerType = "click", closeOnClickOutside = true, closeOnEsc = true, preventClose = false, hasBackdrop = false, theme: themeOverrides, darkMode = false, ...props }) => {
25
25
  // State for uncontrolled mode
26
26
  const [uncontrolledIsOpen, setUncontrolledIsOpen] = useState(defaultIsOpen);
27
27
  // Determine if controlled or uncontrolled
@@ -58,7 +58,7 @@ const PopoverRoot = ({ children, className, isOpen: controlledIsOpen, defaultIsO
58
58
  theme,
59
59
  };
60
60
  return (React__default.createElement(PopoverContext.Provider, { value: contextValue },
61
- React__default.createElement("div", { className: cn("popover", className), "data-state": isOpen ? "open" : "closed", "data-backdrop": hasBackdrop ? "true" : "false", ...props }, children)));
61
+ React__default.createElement("div", { className: cn("popover", darkMode && "dark", className), "data-state": isOpen ? "open" : "closed", "data-backdrop": hasBackdrop ? "true" : "false", ...props }, children)));
62
62
  };
63
63
  // Export as a unified component
64
64
  const Popover = Object.assign(PopoverRoot, {
@@ -29,6 +29,14 @@ export interface PopoverRootProps extends React.HTMLAttributes<HTMLDivElement> {
29
29
  preventClose?: boolean;
30
30
  hasBackdrop?: boolean;
31
31
  theme?: Partial<PopoverTheme>;
32
+ /**
33
+ * Force dark mode styling for the component. Use when placing the component
34
+ * on a dark background while the page is in light mode. This applies the
35
+ * 'dark' class to the container, making text, borders, and other elements
36
+ * use light colors for visibility.
37
+ * @default false
38
+ */
39
+ darkMode?: boolean;
32
40
  }
33
41
  export interface PopoverTriggerProps {
34
42
  children: React.ReactElement;
@@ -0,0 +1,28 @@
1
+ import React from "react";
2
+ import { ProgressProps } from "./Progress.types";
3
+ /**
4
+ * Progress component - Linear progress bar for tracking completion
5
+ *
6
+ * Features:
7
+ * - Determinate mode: Shows specific progress value (0-100)
8
+ * - Indeterminate mode: Animated loading state when value is undefined
9
+ * - Multiple sizes and semantic colors
10
+ * - Flexible label positioning (right, top, bottom, inside)
11
+ * - Respects reduced motion preferences
12
+ * - Full className override support
13
+ *
14
+ * @example
15
+ * // Determinate progress
16
+ * <Progress value={60} color="primary" />
17
+ *
18
+ * // With label
19
+ * <Progress value={75} showLabel labelPosition="right" />
20
+ *
21
+ * // Indeterminate (loading)
22
+ * <Progress color="primary" />
23
+ *
24
+ * // Custom label format
25
+ * <Progress value={50} showLabel formatLabel={(pct) => `${pct}% complete`} />
26
+ */
27
+ declare const Progress: React.FC<ProgressProps>;
28
+ export { Progress };
@@ -0,0 +1,114 @@
1
+ import React__default, { useMemo } from 'react';
2
+ import { useReducedMotion, motion } from 'motion/react';
3
+ import { progressTheme } from './Progress.theme.js';
4
+ import { cn } from '../../../utils/cn.js';
5
+
6
+ /**
7
+ * Progress component - Linear progress bar for tracking completion
8
+ *
9
+ * Features:
10
+ * - Determinate mode: Shows specific progress value (0-100)
11
+ * - Indeterminate mode: Animated loading state when value is undefined
12
+ * - Multiple sizes and semantic colors
13
+ * - Flexible label positioning (right, top, bottom, inside)
14
+ * - Respects reduced motion preferences
15
+ * - Full className override support
16
+ *
17
+ * @example
18
+ * // Determinate progress
19
+ * <Progress value={60} color="primary" />
20
+ *
21
+ * // With label
22
+ * <Progress value={75} showLabel labelPosition="right" />
23
+ *
24
+ * // Indeterminate (loading)
25
+ * <Progress color="primary" />
26
+ *
27
+ * // Custom label format
28
+ * <Progress value={50} showLabel formatLabel={(pct) => `${pct}% complete`} />
29
+ */
30
+ const Progress = ({ value, size = "md", color = "primary", showLabel = false, labelPosition = "right", formatLabel, animated = true, trackClassName, fillClassName, className, theme: customTheme, ...props }) => {
31
+ const shouldReduceMotion = useReducedMotion();
32
+ // Merge custom theme with default theme
33
+ const theme = useMemo(() => {
34
+ if (!customTheme)
35
+ return progressTheme;
36
+ return {
37
+ ...progressTheme,
38
+ ...customTheme,
39
+ sizes: { ...progressTheme.sizes, ...customTheme.sizes },
40
+ colors: { ...progressTheme.colors, ...customTheme.colors },
41
+ };
42
+ }, [customTheme]);
43
+ // Calculate percentage (clamped to 0-100)
44
+ const percentage = useMemo(() => {
45
+ if (value === undefined || value === null)
46
+ return 0;
47
+ return Math.min(Math.max(Math.round(value), 0), 100);
48
+ }, [value]);
49
+ // Determine if this is indeterminate mode
50
+ const isIndeterminate = value === undefined || value === null;
51
+ // Format the label
52
+ const label = useMemo(() => {
53
+ if (formatLabel)
54
+ return formatLabel(percentage);
55
+ return `${percentage}%`;
56
+ }, [percentage, formatLabel]);
57
+ // Determine if animation should be applied
58
+ const shouldAnimate = animated && !shouldReduceMotion;
59
+ // Get container layout based on label position
60
+ const containerLayoutClass = useMemo(() => {
61
+ if (!showLabel || isIndeterminate)
62
+ return "";
63
+ switch (labelPosition) {
64
+ case "top":
65
+ return "flex flex-col gap-1.5";
66
+ case "bottom":
67
+ return "flex flex-col-reverse gap-1.5";
68
+ case "right":
69
+ return "flex items-center gap-3";
70
+ case "inside":
71
+ return "";
72
+ default:
73
+ return "";
74
+ }
75
+ }, [showLabel, labelPosition, isIndeterminate]);
76
+ // Render label element
77
+ const renderLabel = () => {
78
+ if (!showLabel || isIndeterminate)
79
+ return null;
80
+ if (labelPosition === "inside") {
81
+ // Only show inside label for lg size (enough height)
82
+ if (size !== "lg")
83
+ return null;
84
+ return React__default.createElement("span", { className: theme.insideLabelStyle }, label);
85
+ }
86
+ return (React__default.createElement("span", { className: cn(theme.labelStyle, labelPosition === "top" || labelPosition === "bottom"
87
+ ? "text-left"
88
+ : "") }, label));
89
+ };
90
+ // Track element with optional fill
91
+ const renderTrack = () => (React__default.createElement("div", { className: cn(theme.trackStyle, theme.sizes[size], "relative", trackClassName) },
92
+ isIndeterminate ? (
93
+ // Indeterminate animation
94
+ React__default.createElement("div", { className: cn(theme.fillStyle, theme.colors[color], "w-1/3", theme.indeterminateStyle, fillClassName) })) : shouldAnimate ? (
95
+ // Animated determinate progress with spring animation
96
+ React__default.createElement(motion.div, { className: cn(theme.fillStyle, theme.colors[color], fillClassName), initial: { width: 0 }, animate: { width: `${percentage}%` }, transition: {
97
+ type: "spring",
98
+ stiffness: 100,
99
+ damping: 20,
100
+ mass: 0.5,
101
+ } })) : (
102
+ // Static determinate progress
103
+ React__default.createElement("div", { className: cn(theme.fillStyle, theme.colors[color], fillClassName), style: { width: `${percentage}%` } })),
104
+ showLabel && labelPosition === "inside" && size === "lg" && !isIndeterminate && (React__default.createElement("span", { className: theme.insideLabelStyle }, label))));
105
+ return (React__default.createElement("div", { className: cn(theme.containerStyle, containerLayoutClass, className), role: "progressbar", "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": isIndeterminate ? undefined : percentage, "aria-label": isIndeterminate ? "Loading" : `${percentage}% complete`, ...props },
106
+ labelPosition === "top" && renderLabel(),
107
+ labelPosition === "right" ? (React__default.createElement(React__default.Fragment, null,
108
+ React__default.createElement("div", { className: "flex-1" }, renderTrack()),
109
+ renderLabel())) : (renderTrack()),
110
+ labelPosition === "bottom" && renderLabel()));
111
+ };
112
+ Progress.displayName = "Progress";
113
+
114
+ export { Progress };
@@ -0,0 +1,5 @@
1
+ import { ProgressTheme } from "./Progress.types";
2
+ /**
3
+ * Default theme configuration for Progress component
4
+ */
5
+ export declare const progressTheme: ProgressTheme;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Default theme configuration for Progress component
3
+ */
4
+ const progressTheme = {
5
+ // Container styles
6
+ containerStyle: "w-full",
7
+ // Track (background) styles
8
+ trackStyle: "relative w-full rounded-full bg-[var(--color-background-tertiary)] overflow-hidden",
9
+ // Fill (progress bar) styles
10
+ fillStyle: "h-full rounded-full",
11
+ // Label text styles
12
+ labelStyle: "text-sm font-medium text-[var(--color-text-secondary)] tabular-nums min-w-[2.5rem] text-right",
13
+ // Inside label styles (when label is positioned inside the bar)
14
+ insideLabelStyle: "absolute inset-0 flex items-center justify-center text-xs font-medium text-white tabular-nums",
15
+ // Size variants for track height
16
+ sizes: {
17
+ sm: "h-1.5",
18
+ md: "h-2.5",
19
+ lg: "h-4",
20
+ },
21
+ // Color variants for the fill
22
+ colors: {
23
+ neutral: "bg-[var(--color-neutral-400)] dark:bg-[var(--color-neutral-500)]",
24
+ primary: "bg-[var(--color-primary)] dark:bg-[var(--color-primary-400)]",
25
+ success: "bg-[var(--color-success)] dark:bg-[var(--color-success-400)]",
26
+ warning: "bg-[var(--color-warning)] dark:bg-[var(--color-warning-400)]",
27
+ danger: "bg-[var(--color-danger)] dark:bg-[var(--color-danger-400)]",
28
+ },
29
+ // Indeterminate animation styles
30
+ indeterminateStyle: "animate-[progress-indeterminate_1.5s_ease-in-out_infinite]",
31
+ };
32
+
33
+ export { progressTheme };
@@ -0,0 +1,92 @@
1
+ import React from "react";
2
+ export type ProgressSize = "sm" | "md" | "lg";
3
+ export type ProgressColor = "neutral" | "primary" | "success" | "warning" | "danger";
4
+ export type ProgressLabelPosition = "right" | "top" | "bottom" | "inside";
5
+ /**
6
+ * Theme configuration for Progress component
7
+ */
8
+ export interface ProgressTheme {
9
+ /** Outer container styles */
10
+ containerStyle: string;
11
+ /** Track (background) styles */
12
+ trackStyle: string;
13
+ /** Fill (progress bar) styles */
14
+ fillStyle: string;
15
+ /** Label text styles */
16
+ labelStyle: string;
17
+ /** Inside label styles (when label is inside the bar) */
18
+ insideLabelStyle: string;
19
+ /** Size variants for the track height */
20
+ sizes: Record<ProgressSize, string>;
21
+ /** Color variants for the fill */
22
+ colors: Record<ProgressColor, string>;
23
+ /** Indeterminate animation styles */
24
+ indeterminateStyle: string;
25
+ }
26
+ /**
27
+ * Theme overrides for Progress component
28
+ */
29
+ export interface ProgressThemeOverrides {
30
+ containerStyle?: string;
31
+ trackStyle?: string;
32
+ fillStyle?: string;
33
+ labelStyle?: string;
34
+ insideLabelStyle?: string;
35
+ sizes?: Partial<Record<ProgressSize, string>>;
36
+ colors?: Partial<Record<ProgressColor, string>>;
37
+ indeterminateStyle?: string;
38
+ }
39
+ export interface ProgressProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
40
+ /**
41
+ * Progress value from 0 to 100.
42
+ * If undefined, the progress bar will be in indeterminate mode.
43
+ */
44
+ value?: number;
45
+ /**
46
+ * The size of the progress bar
47
+ * @default 'md'
48
+ */
49
+ size?: ProgressSize;
50
+ /**
51
+ * The semantic color of the progress bar
52
+ * @default 'primary'
53
+ */
54
+ color?: ProgressColor;
55
+ /**
56
+ * Whether to show the percentage label
57
+ * @default false
58
+ */
59
+ showLabel?: boolean;
60
+ /**
61
+ * Position of the label
62
+ * @default 'right'
63
+ */
64
+ labelPosition?: ProgressLabelPosition;
65
+ /**
66
+ * Custom label formatter function
67
+ * @param percentage - The current percentage value (0-100)
68
+ * @returns The formatted label string
69
+ */
70
+ formatLabel?: (percentage: number) => string;
71
+ /**
72
+ * Whether to animate value changes
73
+ * @default true
74
+ */
75
+ animated?: boolean;
76
+ /**
77
+ * Additional class name for the track (background) element
78
+ */
79
+ trackClassName?: string;
80
+ /**
81
+ * Additional class name for the fill (progress) element
82
+ */
83
+ fillClassName?: string;
84
+ /**
85
+ * Additional class name for the container
86
+ */
87
+ className?: string;
88
+ /**
89
+ * Component-level theme overrides
90
+ */
91
+ theme?: ProgressThemeOverrides;
92
+ }
@@ -0,0 +1,2 @@
1
+ export { Progress } from "./Progress";
2
+ export type { ProgressProps, ProgressSize, ProgressColor, ProgressLabelPosition, ProgressThemeOverrides, } from "./Progress.types";
@@ -11,7 +11,7 @@ import { TabsContent } from './TabsContent.js';
11
11
  * Uses compound component pattern with Tabs.List, Tabs.Trigger, and Tabs.Content
12
12
  * Supports optional Framer Motion animations and comprehensive accessibility
13
13
  */
14
- const TabsComponent = React__default.forwardRef(({ value, defaultValue, onValueChange, orientation = "horizontal", size = "md", disabled = false, children, className, ...props }, ref) => {
14
+ const TabsComponent = React__default.forwardRef(({ value, defaultValue, onValueChange, orientation = "horizontal", size = "md", disabled = false, children, className, darkMode = false, ...props }, ref) => {
15
15
  const [currentValue, setCurrentValue] = useState(value || defaultValue || "");
16
16
  // Track trigger elements for underline positioning
17
17
  const triggerRefs = useRef(new Map());
@@ -74,7 +74,7 @@ const TabsComponent = React__default.forwardRef(({ value, defaultValue, onValueC
74
74
  disabledStyle: disabled ? "opacity-50 cursor-not-allowed pointer-events-none" : "",
75
75
  }), [disabled]);
76
76
  return (React__default.createElement(TabsContext.Provider, { value: contextValue },
77
- React__default.createElement("div", { ref: ref, className: cn(themeClasses.baseStyle, themeClasses.disabledStyle, className // User overrides take precedence
77
+ React__default.createElement("div", { ref: ref, className: cn(themeClasses.baseStyle, themeClasses.disabledStyle, darkMode && "dark", className // User overrides take precedence
78
78
  ), "data-orientation": orientation, "data-size": size, "data-disabled": disabled, role: "tablist" // Add semantic role for screen readers
79
79
  , "aria-orientation": orientation, ...props }, children)));
80
80
  });
@@ -48,6 +48,14 @@ export interface TabsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'o
48
48
  disabled?: boolean;
49
49
  /** Children components - typically Tabs.List and Tabs.Content components */
50
50
  children?: React.ReactNode;
51
+ /**
52
+ * Force dark mode styling for the component. Use when placing the component
53
+ * on a dark background while the page is in light mode. This applies the
54
+ * 'dark' class to the container, making text, borders, and other elements
55
+ * use light colors for visibility.
56
+ * @default false
57
+ */
58
+ darkMode?: boolean;
51
59
  }
52
60
  /**
53
61
  * TabsList component props - container for tab trigger buttons
@@ -0,0 +1,3 @@
1
+ import type { Variants, Transition } from "motion/react";
2
+ export declare const tagVariants: Variants;
3
+ export declare const tagLayoutTransition: Transition;
@@ -0,0 +1,31 @@
1
+ const tagVariants = {
2
+ initial: {
3
+ scale: 0,
4
+ opacity: 0,
5
+ },
6
+ animate: {
7
+ scale: 1,
8
+ opacity: 1,
9
+ transition: {
10
+ type: "spring",
11
+ stiffness: 500,
12
+ damping: 25,
13
+ },
14
+ },
15
+ exit: {
16
+ scale: 0,
17
+ opacity: 0,
18
+ transition: {
19
+ type: "spring",
20
+ stiffness: 500,
21
+ damping: 30,
22
+ },
23
+ },
24
+ };
25
+ const tagLayoutTransition = {
26
+ type: "spring",
27
+ stiffness: 500,
28
+ damping: 30,
29
+ };
30
+
31
+ export { tagLayoutTransition, tagVariants };
@@ -0,0 +1,14 @@
1
+ import React from "react";
2
+ import { TagProps } from "./Tag.types";
3
+ /**
4
+ * Tag component for displaying removable labels or keywords.
5
+ *
6
+ * @component
7
+ * @example
8
+ * ```tsx
9
+ * <Tag onRemove={() => handleRemove('tag1')}>JavaScript</Tag>
10
+ * <Tag size="sm" removable={false}>Read Only</Tag>
11
+ * <Tag disabled>Disabled Tag</Tag>
12
+ * ```
13
+ */
14
+ export declare const Tag: React.ForwardRefExoticComponent<TagProps & React.RefAttributes<HTMLSpanElement>>;
@@ -0,0 +1,45 @@
1
+ import React__default from 'react';
2
+ import { motion } from 'motion/react';
3
+ import { XMarkIcon } from '@heroicons/react/24/outline';
4
+ import { cn } from '../../../utils/cn.js';
5
+ import { tagTheme } from './Tag.theme.js';
6
+ import { tagVariants, tagLayoutTransition } from './Tag.animations.js';
7
+
8
+ /**
9
+ * Tag component for displaying removable labels or keywords.
10
+ *
11
+ * @component
12
+ * @example
13
+ * ```tsx
14
+ * <Tag onRemove={() => handleRemove('tag1')}>JavaScript</Tag>
15
+ * <Tag size="sm" removable={false}>Read Only</Tag>
16
+ * <Tag disabled>Disabled Tag</Tag>
17
+ * ```
18
+ */
19
+ const Tag = React__default.forwardRef(({ children, size = "md", removable = true, onRemove, disabled = false, className, theme: customTheme, ...props }, ref) => {
20
+ var _a, _b, _c;
21
+ // Merge default theme with custom theme overrides
22
+ const theme = {
23
+ baseStyle: (_a = customTheme === null || customTheme === void 0 ? void 0 : customTheme.baseStyle) !== null && _a !== void 0 ? _a : tagTheme.baseStyle,
24
+ sizes: { ...tagTheme.sizes, ...customTheme === null || customTheme === void 0 ? void 0 : customTheme.sizes },
25
+ disabledStyle: (_b = customTheme === null || customTheme === void 0 ? void 0 : customTheme.disabledStyle) !== null && _b !== void 0 ? _b : tagTheme.disabledStyle,
26
+ removeButtonStyle: (_c = customTheme === null || customTheme === void 0 ? void 0 : customTheme.removeButtonStyle) !== null && _c !== void 0 ? _c : tagTheme.removeButtonStyle,
27
+ removeIconSizes: {
28
+ ...tagTheme.removeIconSizes,
29
+ ...customTheme === null || customTheme === void 0 ? void 0 : customTheme.removeIconSizes,
30
+ },
31
+ };
32
+ const handleRemove = (e) => {
33
+ e.stopPropagation();
34
+ if (!disabled && onRemove) {
35
+ onRemove();
36
+ }
37
+ };
38
+ return (React__default.createElement(motion.span, { ref: ref, className: cn(theme.baseStyle, theme.sizes[size], disabled && theme.disabledStyle, className), layout: true, transition: tagLayoutTransition, variants: tagVariants, initial: "initial", animate: "animate", exit: "exit", "data-size": size, "data-disabled": disabled ? "true" : "false", "data-removable": removable ? "true" : "false", ...props },
39
+ children,
40
+ removable && onRemove && !disabled && (React__default.createElement("button", { type: "button", onClick: handleRemove, className: theme.removeButtonStyle, "aria-label": `Remove ${typeof children === "string" ? children : "tag"}` },
41
+ React__default.createElement(XMarkIcon, { className: theme.removeIconSizes[size] })))));
42
+ });
43
+ Tag.displayName = "Tag";
44
+
45
+ export { Tag };
@@ -0,0 +1,2 @@
1
+ import { TagTheme } from "./Tag.types";
2
+ export declare const tagTheme: TagTheme;
@@ -0,0 +1,21 @@
1
+ const tagTheme = {
2
+ baseStyle: "inline-flex items-center gap-1 font-medium rounded-full " +
3
+ "bg-[var(--color-background-secondary)] border border-[var(--color-border)] " +
4
+ "text-[var(--color-text-primary)]",
5
+ sizes: {
6
+ sm: "text-xs px-2 py-0.5 pr-0.5",
7
+ md: "text-sm px-2.5 py-0.5 pr-0.5",
8
+ },
9
+ disabledStyle: "opacity-50 cursor-not-allowed",
10
+ removeButtonStyle: "inline-flex items-center justify-center rounded-full p-1 " +
11
+ "hover:bg-[var(--color-background-quaternary)] " +
12
+ "text-[var(--color-text-muted)] hover:text-[var(--color-text-primary)] " +
13
+ "transition-all duration-300 cursor-pointer focus:outline-none " +
14
+ "focus-visible:ring-2 focus-visible:ring-[var(--color-primary)]",
15
+ removeIconSizes: {
16
+ sm: "size-3",
17
+ md: "size-3.5",
18
+ },
19
+ };
20
+
21
+ export { tagTheme };
@@ -0,0 +1,40 @@
1
+ import React from "react";
2
+ /**
3
+ * Tag component props
4
+ */
5
+ export interface TagProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, "onRemove" | "onDrag" | "onDragEnd" | "onDragStart" | "onAnimationStart"> {
6
+ /** The content of the tag */
7
+ children: React.ReactNode;
8
+ /** The size of the tag */
9
+ size?: TagSize;
10
+ /** Whether to show the remove button (default: true) */
11
+ removable?: boolean;
12
+ /** Callback when the remove button is clicked */
13
+ onRemove?: () => void;
14
+ /** Whether the tag is disabled */
15
+ disabled?: boolean;
16
+ /** Additional class name for the tag */
17
+ className?: string;
18
+ /** Theme overrides */
19
+ theme?: TagThemeOverrides;
20
+ }
21
+ export type TagSize = "sm" | "md";
22
+ export interface TagTheme {
23
+ /** Base styles for the tag container */
24
+ baseStyle: string;
25
+ /** Size-specific styles */
26
+ sizes: Record<TagSize, string>;
27
+ /** Disabled state style */
28
+ disabledStyle: string;
29
+ /** Remove button style */
30
+ removeButtonStyle: string;
31
+ /** Remove icon sizes for each tag size */
32
+ removeIconSizes: Record<TagSize, string>;
33
+ }
34
+ export interface TagThemeOverrides {
35
+ baseStyle?: string;
36
+ sizes?: Partial<Record<TagSize, string>>;
37
+ disabledStyle?: string;
38
+ removeButtonStyle?: string;
39
+ removeIconSizes?: Partial<Record<TagSize, string>>;
40
+ }
@@ -0,0 +1,3 @@
1
+ export { Tag } from "./Tag";
2
+ export type { TagProps, TagSize, TagTheme, TagThemeOverrides } from "./Tag.types";
3
+ export { tagTheme } from "./Tag.theme";
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import { TooltipProps } from "./Tooltip.types";
3
3
  declare const Tooltip: {
4
- ({ content, children, placement, delay, disabled, className, maxWidth, minWidth, showOnFocus, wrapText, id, theme: themeOverrides, "aria-label": ariaLabel, role, }: TooltipProps): React.JSX.Element;
4
+ ({ content, children, placement, delay, disabled, className, maxWidth, minWidth, showOnFocus, wrapText, id, theme: themeOverrides, "aria-label": ariaLabel, role, offset, darkMode, }: TooltipProps): React.JSX.Element;
5
5
  displayName: string;
6
6
  };
7
7
  export { Tooltip };
@@ -35,7 +35,7 @@ const useDarkMode = () => {
35
35
  }, []);
36
36
  return isDark;
37
37
  };
38
- const Tooltip = ({ content, children, placement = "top", delay = 300, disabled = false, className, maxWidth = "360px", minWidth = "fit-content", showOnFocus = true, wrapText = false, id, theme: themeOverrides, "aria-label": ariaLabel, role = "tooltip", }) => {
38
+ const Tooltip = ({ content, children, placement = "top", delay = 300, disabled = false, className, maxWidth = "360px", minWidth = "fit-content", showOnFocus = true, wrapText = false, id, theme: themeOverrides, "aria-label": ariaLabel, role = "tooltip", offset = 8, darkMode = false, }) => {
39
39
  const [isVisible, setIsVisible] = useState(false);
40
40
  const tooltipRef = useRef(null);
41
41
  const triggerRef = useRef(null);
@@ -53,7 +53,7 @@ const Tooltip = ({ content, children, placement = "top", delay = 300, disabled =
53
53
  triggerRef,
54
54
  isOpen: isVisible,
55
55
  placement: placement, // TooltipPlacement matches SelectPlacement subset
56
- offset: 8,
56
+ offset,
57
57
  autoWidth: true,
58
58
  });
59
59
  // Event handlers - simplified timer management
@@ -123,7 +123,7 @@ const Tooltip = ({ content, children, placement = "top", delay = 300, disabled =
123
123
  return (React__default.createElement("div", { className: "relative inline-block", ref: triggerRef, ...triggerHandlers, tabIndex: showOnFocus ? 0 : undefined, "aria-describedby": isVisible && id ? id : undefined },
124
124
  children,
125
125
  typeof document !== "undefined" &&
126
- createPortal(React__default.createElement("div", { className: isDarkMode ? "dark" : undefined }, tooltipContent), document.body)));
126
+ createPortal(React__default.createElement("div", { className: darkMode || isDarkMode ? "dark" : undefined }, tooltipContent), document.body)));
127
127
  };
128
128
  // Set display name for dev tools and Storybook
129
129
  Tooltip.displayName = "Tooltip";