@flikk/ui 1.0.0-beta.11 → 1.0.0-beta.13

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 (220) hide show
  1. package/dist/components/ai/ApprovalCard/ApprovalCard.js +1 -1
  2. package/dist/components/ai/MessageHistory/MessageHistory.js +1 -0
  3. package/dist/components/ai/PromptInput/PromptInput.js +7 -125
  4. package/dist/components/ai/PromptInput/VoiceRecorder.js +0 -77
  5. package/dist/components/ai/StreamingResponse/StreamingResponse.js +1 -0
  6. package/dist/components/ai/StreamingResponse/StreamingResponse.types.d.ts +7 -7
  7. package/dist/components/ai/index.js +1 -0
  8. package/dist/components/core/Accordion/Accordion.d.ts +1 -1
  9. package/dist/components/core/Accordion/Accordion.js +2 -2
  10. package/dist/components/core/Accordion/Accordion.theme.d.ts +2 -2
  11. package/dist/components/core/Accordion/Accordion.theme.js +4 -4
  12. package/dist/components/core/Accordion/Accordion.types.d.ts +19 -20
  13. package/dist/components/core/Accordion/AccordionBody.d.ts +3 -0
  14. package/dist/components/core/Accordion/{AccordionContent.js → AccordionBody.js} +4 -4
  15. package/dist/components/core/Accordion/AccordionItem.js +1 -1
  16. package/dist/components/core/Accordion/AccordionTrigger.js +14 -7
  17. package/dist/components/core/Accordion/index.d.ts +2 -2
  18. package/dist/components/core/Alert/Alert.js +5 -1
  19. package/dist/components/core/Alert/Alert.types.d.ts +4 -4
  20. package/dist/components/core/Avatar/Avatar.js +22 -18
  21. package/dist/components/core/Avatar/Avatar.theme.js +1 -1
  22. package/dist/components/core/Avatar/Avatar.types.d.ts +9 -8
  23. package/dist/components/core/AvatarGroup/AvatarGroup.js +2 -2
  24. package/dist/components/core/Badge/Badge.js +7 -5
  25. package/dist/components/core/Badge/Badge.theme.js +11 -4
  26. package/dist/components/core/Badge/Badge.types.d.ts +2 -2
  27. package/dist/components/core/Breadcrumbs/Breadcrumbs.js +7 -3
  28. package/dist/components/core/Breadcrumbs/Breadcrumbs.types.d.ts +1 -1
  29. package/dist/components/core/Button/Button.js +2 -8
  30. package/dist/components/core/Button/Button.theme.js +7 -7
  31. package/dist/components/core/Calendar/Calendar.js +3 -3
  32. package/dist/components/core/Calendar/CalendarEvent/CalendarEvent.types.d.ts +5 -6
  33. package/dist/components/core/Card/Card.d.ts +2 -2
  34. package/dist/components/core/Card/Card.js +3 -3
  35. package/dist/components/core/Card/Card.theme.js +3 -3
  36. package/dist/components/core/Card/Card.types.d.ts +4 -4
  37. package/dist/components/core/Card/CardBody.d.ts +3 -0
  38. package/dist/components/core/Card/CardBody.js +11 -0
  39. package/dist/components/core/Card/index.d.ts +2 -2
  40. package/dist/components/core/Carousel/Carousel.js +4 -4
  41. package/dist/components/core/Carousel/Carousel.types.d.ts +4 -4
  42. package/dist/components/core/Carousel/CarouselBody.d.ts +4 -0
  43. package/dist/components/core/Carousel/{CarouselContent.js → CarouselBody.js} +3 -3
  44. package/dist/components/core/Carousel/index.d.ts +2 -1
  45. package/dist/components/core/ContextMenu/ContextMenu.d.ts +2 -2
  46. package/dist/components/core/ContextMenu/ContextMenu.js +6 -6
  47. package/dist/components/core/ContextMenu/ContextMenu.types.d.ts +2 -2
  48. package/dist/components/core/ContextMenu/ContextMenuBody.d.ts +6 -0
  49. package/dist/components/core/ContextMenu/{ContextMenuContent.js → ContextMenuBody.js} +4 -4
  50. package/dist/components/core/ContextMenu/ContextMenuSubBody.d.ts +6 -0
  51. package/dist/components/core/ContextMenu/{ContextMenuSubContent.js → ContextMenuSubBody.js} +4 -4
  52. package/dist/components/core/ContextMenu/index.d.ts +1 -1
  53. package/dist/components/core/Drawer/Drawer.d.ts +2 -2
  54. package/dist/components/core/Drawer/Drawer.js +28 -9
  55. package/dist/components/core/Drawer/Drawer.theme.js +1 -1
  56. package/dist/components/core/Drawer/Drawer.types.d.ts +8 -6
  57. package/dist/components/core/Drawer/DrawerBody.d.ts +5 -0
  58. package/dist/components/core/Drawer/DrawerBody.js +11 -0
  59. package/dist/components/core/Drawer/index.d.ts +2 -1
  60. package/dist/components/core/Dropdown/Dropdown.types.d.ts +3 -3
  61. package/dist/components/core/Dropdown/DropdownSection.js +3 -1
  62. package/dist/components/core/FileTypeIcon/FileTypeIcon.d.ts +3 -0
  63. package/dist/components/core/FileTypeIcon/FileTypeIcon.js +33 -0
  64. package/dist/components/core/FileTypeIcon/FileTypeIcon.theme.d.ts +2 -0
  65. package/dist/components/core/FileTypeIcon/FileTypeIcon.theme.js +12 -0
  66. package/dist/components/core/FileTypeIcon/FileTypeIcon.types.d.ts +19 -0
  67. package/dist/components/core/FileTypeIcon/fileTypes.d.ts +7 -0
  68. package/dist/components/core/FileTypeIcon/fileTypes.js +30 -0
  69. package/dist/components/core/FileTypeIcon/index.d.ts +2 -0
  70. package/dist/components/core/MenuItem/MenuItem.js +3 -1
  71. package/dist/components/core/MenuItem/MenuItem.theme.js +1 -1
  72. package/dist/components/core/MenuItem/MenuItem.types.d.ts +1 -1
  73. package/dist/components/core/Message/Message.d.ts +1 -1
  74. package/dist/components/core/Message/Message.js +3 -3
  75. package/dist/components/core/Message/Message.theme.js +2 -2
  76. package/dist/components/core/Message/Message.types.d.ts +7 -7
  77. package/dist/components/core/Message/MessageAvatar.d.ts +2 -2
  78. package/dist/components/core/Message/MessageAvatar.js +3 -3
  79. package/dist/components/core/Message/MessageBody.d.ts +8 -0
  80. package/dist/components/core/Message/{MessageContent.js → MessageBody.js} +3 -3
  81. package/dist/components/core/Message/index.d.ts +2 -0
  82. package/dist/components/core/Modal/Modal.js +5 -1
  83. package/dist/components/core/Modal/Modal.theme.js +1 -1
  84. package/dist/components/core/Modal/Modal.types.d.ts +5 -2
  85. package/dist/components/core/ModalStack/ModalStackModal.js +1 -0
  86. package/dist/components/core/PageHeading/PageHeading.types.d.ts +1 -1
  87. package/dist/components/core/PageHeading/PageHeadingBackButton.js +3 -1
  88. package/dist/components/core/Popover/Popover.d.ts +1 -1
  89. package/dist/components/core/Popover/Popover.js +4 -4
  90. package/dist/components/core/Popover/Popover.theme.d.ts +1 -1
  91. package/dist/components/core/Popover/Popover.theme.js +2 -2
  92. package/dist/components/core/Popover/Popover.types.d.ts +3 -3
  93. package/dist/components/core/Popover/PopoverBody.d.ts +7 -0
  94. package/dist/components/core/Popover/{PopoverContent.js → PopoverBody.js} +24 -13
  95. package/dist/components/core/Popover/index.d.ts +4 -3
  96. package/dist/components/core/Tabs/Tabs.animations.d.ts +2 -2
  97. package/dist/components/core/Tabs/Tabs.animations.js +3 -3
  98. package/dist/components/core/Tabs/Tabs.d.ts +1 -1
  99. package/dist/components/core/Tabs/Tabs.js +3 -3
  100. package/dist/components/core/Tabs/Tabs.theme.d.ts +1 -1
  101. package/dist/components/core/Tabs/Tabs.theme.js +2 -2
  102. package/dist/components/core/Tabs/Tabs.types.d.ts +9 -9
  103. package/dist/components/core/Tabs/TabsBody.d.ts +6 -0
  104. package/dist/components/core/Tabs/{TabsContent.js → TabsBody.js} +8 -8
  105. package/dist/components/core/Tabs/index.d.ts +2 -2
  106. package/dist/components/core/Tag/Tag.d.ts +1 -1
  107. package/dist/components/core/Tag/Tag.js +2 -2
  108. package/dist/components/core/Tag/Tag.types.d.ts +1 -1
  109. package/dist/components/core/Toast/Toast.js +5 -1
  110. package/dist/components/core/Toast/Toast.types.d.ts +9 -9
  111. package/dist/components/core/index.d.ts +1 -1
  112. package/dist/components/core/index.js +7 -3
  113. package/dist/components/data-display/Feed/Feed.animations.d.ts +40 -0
  114. package/dist/components/data-display/Feed/Feed.animations.js +26 -0
  115. package/dist/components/data-display/Feed/Feed.d.ts +5 -1
  116. package/dist/components/data-display/Feed/Feed.js +87 -52
  117. package/dist/components/data-display/Feed/Feed.theme.js +11 -13
  118. package/dist/components/data-display/Feed/Feed.types.d.ts +35 -34
  119. package/dist/components/data-display/Feed/index.d.ts +1 -1
  120. package/dist/components/data-display/GanttChart/GanttTaskBar.js +11 -9
  121. package/dist/components/data-display/GanttChart/GanttTaskContextMenu.js +1 -1
  122. package/dist/components/data-display/KPI/KPI.js +2 -2
  123. package/dist/components/data-display/KPI/KPI.types.d.ts +3 -3
  124. package/dist/components/data-display/Metric/Metric.js +2 -2
  125. package/dist/components/data-display/Metric/Metric.types.d.ts +3 -3
  126. package/dist/components/data-display/Table/TableColumnManager.js +2 -1
  127. package/dist/components/data-display/Table/TableFilter.js +2 -1
  128. package/dist/components/data-display/Timeline/TimelineMarker.js +2 -2
  129. package/dist/components/effects/3d/index.d.ts +1 -1
  130. package/dist/components/effects/AIOrb/AIOrb.d.ts +1 -0
  131. package/dist/components/effects/AIOrb/AIOrb.js +3 -2
  132. package/dist/components/effects/AIOrb/AIOrb.types.d.ts +1 -0
  133. package/dist/components/effects/AIOrb/hooks/index.d.ts +2 -0
  134. package/dist/components/effects/AIOrb/hooks/useOrbState.d.ts +20 -0
  135. package/dist/components/effects/AIOrb/hooks/useOrbState.js +27 -0
  136. package/dist/components/effects/AIOrb/index.d.ts +2 -2
  137. package/dist/components/effects/AIOrb/variants/Aura/Aura.d.ts +3 -0
  138. package/dist/components/effects/AIOrb/variants/Aura/Aura.js +75 -0
  139. package/dist/components/effects/AIOrb/variants/Aura/Aura.shaders.d.ts +28 -0
  140. package/dist/components/effects/AIOrb/variants/Aura/Aura.shaders.js +191 -0
  141. package/dist/components/effects/AIOrb/variants/Aura/Aura.types.d.ts +53 -0
  142. package/dist/components/effects/AIOrb/variants/Aura/ShaderCanvas.d.ts +17 -0
  143. package/dist/components/effects/AIOrb/variants/Aura/ShaderCanvas.js +149 -0
  144. package/dist/components/effects/AIOrb/variants/Aura/index.d.ts +2 -0
  145. package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.js +38 -7
  146. package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.types.d.ts +6 -0
  147. package/dist/components/effects/AIOrb/variants/Liquid/Liquid.js +34 -8
  148. package/dist/components/effects/AIOrb/variants/Liquid/Liquid.types.d.ts +6 -0
  149. package/dist/components/effects/AIOrb/variants/index.d.ts +2 -0
  150. package/dist/components/effects/CustomCursor/CustomCursor.d.ts +2 -2
  151. package/dist/components/effects/CustomCursor/CustomCursor.js +50 -47
  152. package/dist/components/effects/GlassSurface/GlassSurface.js +24 -12
  153. package/dist/components/effects/GlassSurface/GlassSurface.types.d.ts +8 -0
  154. package/dist/components/forms/Checkbox/Checkbox.js +1 -1
  155. package/dist/components/forms/Checkbox/Checkbox.types.d.ts +5 -5
  156. package/dist/components/forms/Checkbox/CheckboxGroup.js +2 -2
  157. package/dist/components/forms/ColorPicker/ColorPicker.d.ts +1 -1
  158. package/dist/components/forms/ColorPicker/ColorPicker.js +2 -2
  159. package/dist/components/forms/ColorPicker/ColorPicker.types.d.ts +2 -2
  160. package/dist/components/forms/ColorPicker/ColorPickerBody.d.ts +7 -0
  161. package/dist/components/forms/ColorPicker/{ColorPickerContent.js → ColorPickerBody.js} +5 -5
  162. package/dist/components/forms/ColorPicker/index.d.ts +2 -2
  163. package/dist/components/forms/DatePicker/DatePicker.d.ts +7 -3
  164. package/dist/components/forms/DatePicker/DatePicker.js +6 -5
  165. package/dist/components/forms/DatePicker/DatePicker.theme.js +3 -3
  166. package/dist/components/forms/DatePicker/DatePicker.types.d.ts +9 -4
  167. package/dist/components/forms/DatePicker/DatePickerBody.d.ts +7 -0
  168. package/dist/components/forms/DatePicker/{DatePickerContent.js → DatePickerBody.js} +10 -9
  169. package/dist/components/forms/DatePicker/index.d.ts +2 -2
  170. package/dist/components/forms/FileUpload/FileUpload.js +0 -78
  171. package/dist/components/forms/Input/Input.js +2 -2
  172. package/dist/components/forms/Input/Input.types.d.ts +4 -4
  173. package/dist/components/forms/Mention/Mention.js +2 -2
  174. package/dist/components/forms/Radio/Radio.js +1 -1
  175. package/dist/components/forms/Radio/Radio.types.d.ts +5 -5
  176. package/dist/components/forms/Radio/RadioGroup.js +1 -1
  177. package/dist/components/forms/Select/Select.js +2 -2
  178. package/dist/components/forms/Select/Select.types.d.ts +4 -4
  179. package/dist/components/forms/Switch/Switch.js +1 -1
  180. package/dist/components/forms/Switch/Switch.types.d.ts +4 -4
  181. package/dist/components/forms/Textarea/Textarea.js +2 -2
  182. package/dist/components/forms/Textarea/Textarea.types.d.ts +4 -4
  183. package/dist/components/forms/TimePicker/TimePickerContent.js +1 -78
  184. package/dist/components/forms/index.d.ts +2 -2
  185. package/dist/components/forms/index.js +2 -80
  186. package/dist/components/layout/FormLayout/FormLayout.d.ts +0 -2
  187. package/dist/components/layout/FormLayout/FormLayout.js +12 -6
  188. package/dist/components/layout/FormLayout/FormLayout.theme.js +2 -5
  189. package/dist/components/layout/FormLayout/FormLayout.types.d.ts +8 -26
  190. package/dist/components/layout/FormLayout/FormLayoutSection.js +3 -2
  191. package/dist/components/layout/FormLayout/index.d.ts +1 -1
  192. package/dist/index.js +197 -199
  193. package/dist/styles.css +1 -1
  194. package/dist/utils/index.d.ts +1 -0
  195. package/dist/utils/paletteGenerator.d.ts +46 -0
  196. package/package.json +1 -1
  197. package/src/styles/theme.css +2 -6
  198. package/dist/components/core/Accordion/AccordionContent.d.ts +0 -3
  199. package/dist/components/core/Card/CardContent.d.ts +0 -3
  200. package/dist/components/core/Card/CardContent.js +0 -11
  201. package/dist/components/core/Carousel/CarouselContent.d.ts +0 -4
  202. package/dist/components/core/ContextMenu/ContextMenuContent.d.ts +0 -6
  203. package/dist/components/core/ContextMenu/ContextMenuSubContent.d.ts +0 -6
  204. package/dist/components/core/Drawer/DrawerContent.d.ts +0 -5
  205. package/dist/components/core/Drawer/DrawerContent.js +0 -11
  206. package/dist/components/core/Loader/Loader.d.ts +0 -24
  207. package/dist/components/core/Loader/Loader.js +0 -57
  208. package/dist/components/core/Loader/Loader.theme.d.ts +0 -27
  209. package/dist/components/core/Loader/Loader.theme.js +0 -60
  210. package/dist/components/core/Loader/Loader.types.d.ts +0 -71
  211. package/dist/components/core/Loader/index.d.ts +0 -2
  212. package/dist/components/core/Message/MessageContent.d.ts +0 -8
  213. package/dist/components/core/Popover/PopoverContent.d.ts +0 -7
  214. package/dist/components/core/Tabs/TabsContent.d.ts +0 -6
  215. package/dist/components/forms/ColorPicker/ColorPickerContent.d.ts +0 -7
  216. package/dist/components/forms/DatePicker/DatePickerContent.d.ts +0 -7
  217. package/dist/components/layout/FormLayout/FormLayoutBody.d.ts +0 -3
  218. package/dist/components/layout/FormLayout/FormLayoutBody.js +0 -91
  219. package/dist/components/layout/FormLayout/FormLayoutHeader.d.ts +0 -3
  220. package/dist/components/layout/FormLayout/FormLayoutHeader.js +0 -12
@@ -23,7 +23,7 @@ const useDarkMode = () => {
23
23
  * Creates a realistic chromatic aberration glass effect using SVG filters.
24
24
  * Works as a wrapper for any content.
25
25
  */
26
- const GlassSurface = ({ children, width, height, borderRadius = 20, borderWidth = 0.07, brightness = 50, opacity = 0.93, blur = 11, displace = 0.7, backgroundOpacity = 0.1, backgroundColor, saturation = 1.8, distortionScale = -180, redOffset = 0, greenOffset = 10, blueOffset = 20, xChannel = "R", yChannel = "G", mixBlendMode = "difference", frosted = false, className = "", style = {}, }) => {
26
+ const GlassSurface = ({ children, width, height, borderRadius = 20, borderWidth = 0.07, brightness: brightnessProp, opacity: opacityProp, blur: blurProp, displace: displaceProp, backgroundOpacity: backgroundOpacityProp, backgroundColor, saturation: saturationProp, distortionScale: distortionScaleProp, redOffset = 0, greenOffset = 10, blueOffset = 20, xChannel = "R", yChannel = "G", mixBlendMode: mixBlendModeProp, colorScheme = "auto", frosted = false, className = "", style = {}, }) => {
27
27
  const uniqueId = useId().replace(/:/g, "-");
28
28
  const filterId = `glass-filter-${uniqueId}`;
29
29
  const redGradId = `red-grad-${uniqueId}`;
@@ -37,6 +37,19 @@ const GlassSurface = ({ children, width, height, borderRadius = 20, borderWidth
37
37
  const blueChannelRef = useRef(null);
38
38
  const gaussianBlurRef = useRef(null);
39
39
  const isDarkMode = useDarkMode();
40
+ const resolvedDark = colorScheme === "auto" ? isDarkMode : colorScheme === "dark";
41
+ // Theme-aware defaults: user-provided props always win
42
+ // Note: brightness/opacity control the displacement map center fill, NOT visual brightness.
43
+ // brightness=50 + opacity=1 = neutral center (no displacement), only edges refract.
44
+ // On light backgrounds, high displacement pulls in black out-of-bounds pixels → gray artifacts.
45
+ const brightness = brightnessProp !== null && brightnessProp !== void 0 ? brightnessProp : 50;
46
+ const opacity = opacityProp !== null && opacityProp !== void 0 ? opacityProp : (resolvedDark ? 0.93 : 1);
47
+ const blur = blurProp !== null && blurProp !== void 0 ? blurProp : 11;
48
+ const displace = displaceProp !== null && displaceProp !== void 0 ? displaceProp : 0.7;
49
+ const backgroundOpacity = backgroundOpacityProp !== null && backgroundOpacityProp !== void 0 ? backgroundOpacityProp : (resolvedDark ? 0.1 : 0);
50
+ const saturation = saturationProp !== null && saturationProp !== void 0 ? saturationProp : (resolvedDark ? 1.8 : 1.4);
51
+ const distortionScale = distortionScaleProp !== null && distortionScaleProp !== void 0 ? distortionScaleProp : (resolvedDark ? -180 : -40);
52
+ const mixBlendMode = mixBlendModeProp !== null && mixBlendModeProp !== void 0 ? mixBlendModeProp : (resolvedDark ? "difference" : "multiply");
40
53
  /**
41
54
  * Generates the SVG displacement map as a Data URI
42
55
  */
@@ -157,7 +170,7 @@ const GlassSurface = ({ children, width, height, borderRadius = 20, borderWidth
157
170
  const frostedBlur = frosted ? "blur(12px)" : "";
158
171
  if (svgSupported) {
159
172
  // Determine background color: use prop if provided, otherwise auto-detect based on theme
160
- const bgColor = backgroundColor || (isDarkMode ? "hsl(0 0% 0%)" : "hsl(0 0% 100%)");
173
+ const bgColor = backgroundColor || (resolvedDark ? "hsl(0 0% 0%)" : "hsl(0 0% 100%)");
161
174
  // Convert color to rgba if needed to apply opacity
162
175
  const getBackgroundWithOpacity = () => {
163
176
  // If backgroundOpacity is 0, return transparent
@@ -175,19 +188,18 @@ const GlassSurface = ({ children, width, height, borderRadius = 20, borderWidth
175
188
  background: getBackgroundWithOpacity(),
176
189
  backdropFilter: `url(#${filterId}) ${frostedBlur} saturate(${saturation})`,
177
190
  WebkitBackdropFilter: `url(#${filterId}) ${frostedBlur} saturate(${saturation})`,
191
+ ...(!resolvedDark && { border: "1px solid rgba(0, 0, 0, 0.06)" }),
178
192
  ...(hasCustomShadow
179
193
  ? {}
180
194
  : {
181
- boxShadow: isDarkMode
195
+ boxShadow: resolvedDark
182
196
  ? `0 0 2px 1px color-mix(in oklch, white, transparent 65%) inset,
183
197
  0 0 10px 4px color-mix(in oklch, white, transparent 85%) inset,
184
198
  0px 4px 16px rgba(17, 17, 26, 0.05),
185
199
  0px 8px 24px rgba(17, 17, 26, 0.05),
186
200
  0px 16px 56px rgba(17, 17, 26, 0.05)`
187
- : `0 0 1px 1px color-mix(in oklch, white, transparent 40%) inset,
188
- 0 0 12px 1px color-mix(in oklch, white, transparent 70%) inset,
189
- 0 8px 24px -12px rgba(0, 0, 0, 0.08),
190
- 0 4px 12px -4px rgba(0, 0, 0, 0.03)`,
201
+ : `0 8px 24px -12px rgba(0, 0, 0, 0.08),
202
+ 0 4px 12px -4px rgba(0, 0, 0, 0.04)`,
191
203
  }),
192
204
  };
193
205
  }
@@ -197,9 +209,9 @@ const GlassSurface = ({ children, width, height, borderRadius = 20, borderWidth
197
209
  // Increase blur significantly for frosted mode in fallback
198
210
  const effectiveBlur = frosted ? "20px" : baseBlur;
199
211
  const fallbackSaturate = "1.8";
200
- const fallbackBrightness = isDarkMode ? "1.2" : "1.1";
212
+ const fallbackBrightness = resolvedDark ? "1.2" : "1.1";
201
213
  const filterStr = `blur(${effectiveBlur}) saturate(${fallbackSaturate}) brightness(${fallbackBrightness})`;
202
- if (isDarkMode) {
214
+ if (resolvedDark) {
203
215
  return {
204
216
  ...baseStyles,
205
217
  background: supportsBackdrop
@@ -234,11 +246,11 @@ const GlassSurface = ({ children, width, height, borderRadius = 20, borderWidth
234
246
  };
235
247
  }
236
248
  }
237
- }, [style, width, height, borderRadius, frosted, svgSupported, backgroundColor, isDarkMode, backgroundOpacity, filterId, saturation, hasCustomShadow, supportsBackdrop]);
238
- const focusVisibleClasses = isDarkMode
249
+ }, [style, width, height, borderRadius, frosted, svgSupported, backgroundColor, resolvedDark, backgroundOpacity, filterId, saturation, hasCustomShadow, supportsBackdrop]);
250
+ const focusVisibleClasses = resolvedDark
239
251
  ? "focus-visible:outline-2 focus-visible:outline-[#0A84FF] focus-visible:outline-offset-2"
240
252
  : "focus-visible:outline-2 focus-visible:outline-[#007AFF] focus-visible:outline-offset-2";
241
- return (jsxs("div", { ref: containerRef, className: cn("relative transition-opacity duration-[260ms] ease-out", focusVisibleClasses, className), style: containerStyles, children: [jsx("svg", { className: "w-full h-full pointer-events-none absolute inset-0 opacity-0 -z-10", xmlns: "http://www.w3.org/2000/svg", children: jsxs("defs", { children: [jsxs("filter", { id: filterId, colorInterpolationFilters: "sRGB", x: "0%", y: "0%", width: "100%", height: "100%", children: [jsx("feImage", { ref: feImageRef, x: "0", y: "0", width: "100%", height: "100%", preserveAspectRatio: "none", result: "map" }), jsx("feDisplacementMap", { ref: redChannelRef, in: "SourceGraphic", in2: "map", id: "redchannel", result: "dispRed" }), jsx("feColorMatrix", { in: "dispRed", type: "matrix", values: "1 0 0 0 0\n 0 0 0 0 0\n 0 0 0 0 0\n 0 0 0 1 0", result: "red" }), jsx("feDisplacementMap", { ref: greenChannelRef, in: "SourceGraphic", in2: "map", id: "greenchannel", result: "dispGreen" }), jsx("feColorMatrix", { in: "dispGreen", type: "matrix", values: "0 0 0 0 0\n 0 1 0 0 0\n 0 0 0 0 0\n 0 0 0 1 0", result: "green" }), jsx("feDisplacementMap", { ref: blueChannelRef, in: "SourceGraphic", in2: "map", id: "bluechannel", result: "dispBlue" }), jsx("feColorMatrix", { in: "dispBlue", type: "matrix", values: "0 0 0 0 0\n 0 0 0 0 0\n 0 0 1 0 0\n 0 0 0 1 0", result: "blue" }), jsx("feBlend", { in: "red", in2: "green", mode: "screen", result: "rg" }), jsx("feBlend", { in: "rg", in2: "blue", mode: "screen", result: "output" }), jsx("feGaussianBlur", { ref: gaussianBlurRef, in: "output", stdDeviation: "0.7" })] }), jsx("filter", { id: noiseFilterId, x: "0%", y: "0%", width: "100%", height: "100%", children: jsx("feTurbulence", { type: "fractalNoise", baseFrequency: "0.65", numOctaves: "3", stitchTiles: "stitch" }) })] }) }), jsx("div", { className: "relative z-10 rounded-[inherit]", children: children }), jsx("div", { className: "absolute inset-0 pointer-events-none rounded-[inherit] overflow-hidden z-20", children: frosted && (jsx("div", { className: "absolute inset-0 opacity-10 mix-blend-overlay", style: { filter: `url(#${noiseFilterId})` } })) })] }));
253
+ return (jsxs("div", { ref: containerRef, className: cn("relative transition-opacity duration-[260ms] ease-out", focusVisibleClasses, className), style: containerStyles, children: [jsx("svg", { className: "w-full h-full pointer-events-none absolute inset-0 opacity-0 -z-10", xmlns: "http://www.w3.org/2000/svg", children: jsxs("defs", { children: [jsxs("filter", { id: filterId, colorInterpolationFilters: "sRGB", x: "0%", y: "0%", width: "100%", height: "100%", children: [jsx("feImage", { ref: feImageRef, x: "0", y: "0", width: "100%", height: "100%", preserveAspectRatio: "none", result: "map" }), jsx("feDisplacementMap", { ref: redChannelRef, in: "SourceGraphic", in2: "map", id: "redchannel", result: "dispRed" }), jsx("feColorMatrix", { in: "dispRed", type: "matrix", values: "1 0 0 0 0\n 0 0 0 0 0\n 0 0 0 0 0\n 0 0 0 1 0", result: "red" }), jsx("feDisplacementMap", { ref: greenChannelRef, in: "SourceGraphic", in2: "map", id: "greenchannel", result: "dispGreen" }), jsx("feColorMatrix", { in: "dispGreen", type: "matrix", values: "0 0 0 0 0\n 0 1 0 0 0\n 0 0 0 0 0\n 0 0 0 1 0", result: "green" }), jsx("feDisplacementMap", { ref: blueChannelRef, in: "SourceGraphic", in2: "map", id: "bluechannel", result: "dispBlue" }), jsx("feColorMatrix", { in: "dispBlue", type: "matrix", values: "0 0 0 0 0\n 0 0 0 0 0\n 0 0 1 0 0\n 0 0 0 1 0", result: "blue" }), jsx("feBlend", { in: "red", in2: "green", mode: "screen", result: "rg" }), jsx("feBlend", { in: "rg", in2: "blue", mode: "screen", result: "output" }), jsx("feGaussianBlur", { ref: gaussianBlurRef, in: "output", stdDeviation: "0.7" })] }), jsx("filter", { id: noiseFilterId, x: "0%", y: "0%", width: "100%", height: "100%", children: jsx("feTurbulence", { type: "fractalNoise", baseFrequency: "0.65", numOctaves: "3", stitchTiles: "stitch" }) })] }) }), jsx("div", { className: "relative z-10 h-full rounded-[inherit]", children: children }), jsx("div", { className: "absolute inset-0 pointer-events-none rounded-[inherit] overflow-hidden z-20", children: frosted && (jsx("div", { className: "absolute inset-0 opacity-10 mix-blend-overlay", style: { filter: `url(#${noiseFilterId})` } })) })] }));
242
254
  };
243
255
 
244
256
  export { GlassSurface };
@@ -40,6 +40,14 @@ export interface GlassSurfaceProps {
40
40
  yChannel?: GlassChannel;
41
41
  /** Blend mode for the internal gradient layers */
42
42
  mixBlendMode?: GlassMixBlendMode;
43
+ /**
44
+ * Color scheme for the glass effect. Controls theme-aware defaults.
45
+ * - 'auto': detects system preference (default)
46
+ * - 'dark': force dark mode defaults
47
+ * - 'light': force light mode defaults
48
+ * @default 'auto'
49
+ */
50
+ colorScheme?: "auto" | "dark" | "light";
43
51
  /**
44
52
  * Enable frosted glass effect with noise texture
45
53
  * @default false
@@ -57,7 +57,7 @@ const CheckboxComponent = React__default.forwardRef(({ id: idProp, name: namePro
57
57
  ref(node);
58
58
  else if (ref)
59
59
  ref.current = node;
60
- }, type: "checkbox", id: id, name: name, value: value, checked: isChecked, onChange: handleChange, disabled: isDisabled, "aria-describedby": description ? `${id}-description` : undefined, "data-state": isDisabled ? "disabled" : "default", className: cn(checkboxTheme.inputStyle, checkboxTheme.sizes[size], indeterminate && "bg-neutral-200") }), indeterminate && (jsx(MinusIcon, { className: cn("pointer-events-none col-start-1 row-start-1 self-center justify-self-center opacity-100 stroke-neutral-600 transition-opacity duration-200", size === "sm" ? "size-3" : "size-4"), strokeWidth: 3 })), isChecked && !indeterminate && (jsx(CheckIcon, { className: cn("pointer-events-none col-start-1 row-start-1 self-center justify-self-center opacity-100 stroke-white transition-opacity duration-200", size === "sm" ? "size-3" : "size-4"), strokeWidth: 3 }))] }), (label || description) && (jsxs("label", { htmlFor: id, className: cn("cursor-pointer", isDisabled && "cursor-not-allowed"), children: [label && (jsx("span", { className: cn(formLabelTheme.baseStyle, formLabelTheme.stateStyles[state], "mb-0"), children: label })), description && (jsx("div", { id: `${id}-description`, className: checkboxTheme.descriptionStyle, children: description }))] }))] }));
60
+ }, type: "checkbox", id: id, name: name, value: value, checked: isChecked, onChange: handleChange, disabled: isDisabled, "aria-describedby": description ? `${id}-description` : undefined, "data-state": isDisabled ? "disabled" : "default", className: cn(checkboxTheme.inputStyle, checkboxTheme.sizes[size], indeterminate && "bg-neutral-200") }), indeterminate && (jsx(MinusIcon, { className: cn("pointer-events-none col-start-1 row-start-1 self-center justify-self-center opacity-100 stroke-neutral-600 transition-opacity duration-200", size === "sm" ? "size-3" : "size-4"), strokeWidth: 3 })), isChecked && !indeterminate && (jsx(CheckIcon, { className: cn("pointer-events-none col-start-1 row-start-1 self-center justify-self-center opacity-100 stroke-white transition-opacity duration-200", size === "sm" ? "size-3" : "size-4"), strokeWidth: 3 }))] }), (label || description) && (jsxs("label", { htmlFor: id, className: cn("cursor-pointer", isDisabled && "cursor-not-allowed"), children: [label && (typeof label === 'string' ? (jsx("span", { className: cn(formLabelTheme.baseStyle, formLabelTheme.stateStyles[state], "mb-0"), children: label })) : (label)), description && (typeof description === 'string' ? (jsx("div", { id: `${id}-description`, className: checkboxTheme.descriptionStyle, children: description })) : (description))] }))] }));
61
61
  });
62
62
  CheckboxComponent.displayName = "Checkbox";
63
63
  const Checkbox = Object.assign(CheckboxComponent, {
@@ -21,8 +21,8 @@ export interface CheckboxProps extends Omit<React.HTMLAttributes<HTMLInputElemen
21
21
  checked?: boolean;
22
22
  indeterminate?: boolean;
23
23
  onChange?: (checked: boolean, value: string) => void;
24
- label?: string;
25
- description?: string;
24
+ label?: React.ReactNode;
25
+ description?: React.ReactNode;
26
26
  state?: CheckboxState;
27
27
  size?: CheckboxSize;
28
28
  className?: string;
@@ -38,9 +38,9 @@ export interface CheckboxGroupProps extends Omit<React.HTMLAttributes<HTMLFieldS
38
38
  size?: CheckboxSize;
39
39
  state?: CheckboxState;
40
40
  orientation?: CheckboxGroupOrientation;
41
- label?: string;
42
- description?: string;
43
- error?: string;
41
+ label?: React.ReactNode;
42
+ description?: React.ReactNode;
43
+ error?: React.ReactNode;
44
44
  required?: boolean;
45
45
  className?: string;
46
46
  }
@@ -32,8 +32,8 @@ const CheckboxGroup = React__default.forwardRef(({ value: controlledValue, defau
32
32
  state,
33
33
  }), [groupName, currentValue, size, state]);
34
34
  const labelState = error ? "invalid" : state === "disabled" ? "disabled" : "default";
35
- return (jsx(CheckboxGroupContext.Provider, { value: contextValue, children: jsxs("fieldset", { ref: ref, role: "group", "aria-labelledby": label ? labelId : undefined, "aria-describedby": description ? descriptionId : undefined, "aria-required": required || undefined, "aria-invalid": error ? true : undefined, "aria-errormessage": error ? errorId : undefined, className: cn("border-0 p-0 m-0", checkboxTheme.groupStyle, className), ...props, children: [label && (jsxs("legend", { id: labelId, className: cn(formLabelTheme.baseStyle, formLabelTheme.stateStyles[labelState]), children: [label, required && (jsx("span", { className: formLabelTheme.requiredIndicatorStyle, children: "*" }))] })), description && (jsx("p", { id: descriptionId, className: checkboxTheme.groupDescriptionStyle, children: description })), jsx("div", { className: cn(checkboxTheme.groupItemsStyle, orientation === "horizontal" &&
36
- checkboxTheme.groupHorizontalStyle), children: children }), error && (jsx("p", { id: errorId, role: "alert", className: checkboxTheme.groupErrorStyle, children: error }))] }) }));
35
+ return (jsx(CheckboxGroupContext.Provider, { value: contextValue, children: jsxs("fieldset", { ref: ref, role: "group", "aria-labelledby": label ? labelId : undefined, "aria-describedby": description ? descriptionId : undefined, "aria-required": required || undefined, "aria-invalid": error ? true : undefined, "aria-errormessage": error ? errorId : undefined, className: cn("border-0 p-0 m-0", checkboxTheme.groupStyle, className), ...props, children: [label && (typeof label === 'string' ? (jsxs("legend", { id: labelId, className: cn(formLabelTheme.baseStyle, formLabelTheme.stateStyles[labelState]), children: [label, required && (jsx("span", { className: formLabelTheme.requiredIndicatorStyle, children: "*" }))] })) : (label)), description && (typeof description === 'string' ? (jsx("p", { id: descriptionId, className: checkboxTheme.groupDescriptionStyle, children: description })) : (description)), jsx("div", { className: cn(checkboxTheme.groupItemsStyle, orientation === "horizontal" &&
36
+ checkboxTheme.groupHorizontalStyle), children: children }), error && (typeof error === 'string' ? (jsx("p", { id: errorId, role: "alert", className: checkboxTheme.groupErrorStyle, children: error })) : (error))] }) }));
37
37
  });
38
38
  CheckboxGroup.displayName = "Checkbox.Group";
39
39
 
@@ -14,7 +14,7 @@ export declare const useColorPicker: () => ColorPickerContextValue;
14
14
  */
15
15
  export declare const ColorPicker: React.ForwardRefExoticComponent<ColorPickerProps & React.RefAttributes<HTMLDivElement>> & {
16
16
  Trigger: React.FC<import("./ColorPicker.types").ColorPickerTriggerProps>;
17
- Content: React.FC<import("./ColorPicker.types").ColorPickerContentProps>;
17
+ Body: React.FC<import("./ColorPicker.types").ColorPickerBodyProps>;
18
18
  Canvas: React.FC<{
19
19
  className?: string;
20
20
  }>;
@@ -4,7 +4,7 @@ import { cn } from '../../../utils/cn.js';
4
4
  import { FormLabel } from '../FormLabel/FormLabel.js';
5
5
  import { colorPickerTheme } from './ColorPicker.theme.js';
6
6
  import { ColorPicker2DCanvas } from './ColorPicker2DCanvas.js';
7
- import { ColorPickerContent } from './ColorPickerContent.js';
7
+ import { ColorPickerBody } from './ColorPickerBody.js';
8
8
  import { ColorPickerEyeDropper } from './ColorPickerEyeDropper.js';
9
9
  import { ColorPickerFormatSelector } from './ColorPickerFormatSelector.js';
10
10
  import { ColorPickerInput } from './ColorPickerInput.js';
@@ -161,7 +161,7 @@ ColorPickerRoot.displayName = 'ColorPicker';
161
161
  */
162
162
  const ColorPicker = Object.assign(ColorPickerRoot, {
163
163
  Trigger: ColorPickerTrigger,
164
- Content: ColorPickerContent,
164
+ Body: ColorPickerBody,
165
165
  Canvas: ColorPicker2DCanvas,
166
166
  Swatch: ColorPickerSwatch,
167
167
  Sliders: ColorPickerSliders,
@@ -149,9 +149,9 @@ export interface ColorPickerTriggerProps extends Omit<React.InputHTMLAttributes<
149
149
  className?: string;
150
150
  }
151
151
  /**
152
- * ColorPickerContent props
152
+ * ColorPickerBody props
153
153
  */
154
- export interface ColorPickerContentProps extends React.HTMLAttributes<HTMLDivElement> {
154
+ export interface ColorPickerBodyProps extends React.HTMLAttributes<HTMLDivElement> {
155
155
  children?: React.ReactNode;
156
156
  className?: string;
157
157
  /**
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import type { ColorPickerBodyProps } from './ColorPicker.types';
3
+ /**
4
+ * ColorPickerBody - Popover content wrapper following Dropdown/Select patterns
5
+ * Uses portal rendering and useSelectPortal for positioning
6
+ */
7
+ export declare const ColorPickerBody: React.FC<ColorPickerBodyProps>;
@@ -10,16 +10,16 @@ import { ColorPickerContext } from './ColorPicker.js';
10
10
  import { useIsClient } from '../../../hooks/useIsClient.js';
11
11
 
12
12
  /**
13
- * ColorPickerContent - Popover content wrapper following Dropdown/Select patterns
13
+ * ColorPickerBody - Popover content wrapper following Dropdown/Select patterns
14
14
  * Uses portal rendering and useSelectPortal for positioning
15
15
  */
16
- const ColorPickerContent = ({ children, className, portal = true, animation = true, ...rest }) => {
16
+ const ColorPickerBody = ({ children, className, portal = true, animation = true, ...rest }) => {
17
17
  const context = useContext(ColorPickerContext);
18
18
  const contentRef = useRef(null);
19
19
  const shouldReduceMotion = useReducedMotion();
20
20
  const isClient = useIsClient();
21
21
  if (!context) {
22
- throw new Error('ColorPickerContent must be used within a ColorPicker');
22
+ throw new Error('ColorPicker.Body must be used within a ColorPicker');
23
23
  }
24
24
  const { isOpen, setIsOpen, theme, triggerRef, placement, offset } = context;
25
25
  // Use positioning hook (same as Dropdown/Select)
@@ -70,6 +70,6 @@ const ColorPickerContent = ({ children, className, portal = true, animation = tr
70
70
  ? createPortal(content, document.body)
71
71
  : content;
72
72
  };
73
- ColorPickerContent.displayName = 'ColorPickerContent';
73
+ ColorPickerBody.displayName = 'ColorPicker.Body';
74
74
 
75
- export { ColorPickerContent };
75
+ export { ColorPickerBody };
@@ -4,7 +4,7 @@
4
4
  */
5
5
  export { ColorPicker, useColorPicker, ColorPickerContext } from './ColorPicker';
6
6
  export { ColorPickerTrigger } from './ColorPickerTrigger';
7
- export { ColorPickerContent } from './ColorPickerContent';
7
+ export { ColorPickerBody } from './ColorPickerBody';
8
8
  export { ColorPicker2DCanvas } from './ColorPicker2DCanvas';
9
9
  export { ColorPickerSwatch } from './ColorPickerSwatch';
10
10
  export { ColorPickerSliders } from './ColorPickerSliders';
@@ -12,6 +12,6 @@ export { ColorPickerInput } from './ColorPickerInput';
12
12
  export { ColorPickerFormatSelector } from './ColorPickerFormatSelector';
13
13
  export { ColorPickerEyeDropper } from './ColorPickerEyeDropper';
14
14
  export { ColorPickerPresets } from './ColorPickerPresets';
15
- export type { ColorPickerProps, ColorPickerTriggerProps, ColorPickerContentProps, ColorPickerSwatchProps, ColorPickerSlidersProps, ColorPickerInputProps, ColorPickerFormatSelectorProps, ColorPickerEyeDropperProps, ColorPickerPresetsProps, ColorPickerContextValue, ColorPickerTheme, ColorPickerThemeOverrides, ColorFormat, ColorPickerSize, ColorPickerState, } from './ColorPicker.types';
15
+ export type { ColorPickerProps, ColorPickerTriggerProps, ColorPickerBodyProps, ColorPickerSwatchProps, ColorPickerSlidersProps, ColorPickerInputProps, ColorPickerFormatSelectorProps, ColorPickerEyeDropperProps, ColorPickerPresetsProps, ColorPickerContextValue, ColorPickerTheme, ColorPickerThemeOverrides, ColorFormat, ColorPickerSize, ColorPickerState, } from './ColorPicker.types';
16
16
  export type { RGB, RGBA, HSL, HSLA, HSV, HSVA } from './colorUtils';
17
17
  export { hexToRgb, rgbToHex, rgbToHsl, hslToRgb, rgbToHsv, hsvToRgb, validateHex, validateRgb, parseColor, formatHex, formatRgb, formatHsl, } from './colorUtils';
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import type { DatePickerProps, DatePickerState, DatePickerSize, DateRange, DatePickerMode, DatePickerTheme } from "./DatePicker.types";
3
3
  import { DatePickerTrigger } from "./DatePickerTrigger";
4
- import { DatePickerContent } from "./DatePickerContent";
4
+ import { DatePickerBody } from "./DatePickerBody";
5
5
  import { DatePickerPresets } from "./DatePickerPresets";
6
6
  interface DatePickerContextType {
7
7
  mode: DatePickerMode;
@@ -16,6 +16,10 @@ interface DatePickerContextType {
16
16
  selectTodayByDefault?: boolean;
17
17
  weekdays?: string[];
18
18
  months?: string[];
19
+ yearRange?: {
20
+ start: number;
21
+ end: number;
22
+ };
19
23
  handleDateSelect: (date: Date) => void;
20
24
  handleRangeSelect?: (range: DateRange) => void;
21
25
  size: DatePickerSize;
@@ -31,8 +35,8 @@ export declare const DatePickerContext: React.Context<DatePickerContextType | un
31
35
  declare const DatePickerComponent: React.ForwardRefExoticComponent<DatePickerProps & React.RefAttributes<HTMLDivElement>>;
32
36
  declare const DatePickerWithCompounds: typeof DatePickerComponent & {
33
37
  Trigger: typeof DatePickerTrigger;
34
- Content: typeof DatePickerContent;
38
+ Body: typeof DatePickerBody;
35
39
  Presets: typeof DatePickerPresets;
36
40
  };
37
- export { DatePickerTrigger, DatePickerContent, DatePickerPresets, DatePickerWithCompounds as DatePicker, };
41
+ export { DatePickerTrigger, DatePickerBody, DatePickerPresets, DatePickerWithCompounds as DatePicker, };
38
42
  export { DatePickerWithCompounds };
@@ -3,7 +3,7 @@ import React__default, { createContext, useState, useRef, useEffect, useCallback
3
3
  import { datePickerTheme } from './DatePicker.theme.js';
4
4
  import { FormLabel } from '../FormLabel/FormLabel.js';
5
5
  import { DatePickerTrigger } from './DatePickerTrigger.js';
6
- import { DatePickerContent } from './DatePickerContent.js';
6
+ import { DatePickerBody } from './DatePickerBody.js';
7
7
  import { DatePickerPresets } from './DatePickerPresets.js';
8
8
  import { cn } from '../../../utils/cn.js';
9
9
  import { formatDateCustom } from '../../../utils/dateUtils.js';
@@ -43,7 +43,7 @@ const formatDateRange = (range, formatString, options) => {
43
43
  /**
44
44
  * Main DatePicker Component - follows Select pattern exactly
45
45
  */
46
- const DatePickerComponent = React__default.forwardRef(({ id, name, mode = "single", size = "md", state = "default", value, defaultValue, placeholder = "Select date...", disabled = false, required = false, label, helperText, onChange, onFocus, onBlur, minDate, maxDate, isDateDisabled, showToday = true, selectTodayByDefault = false, weekdays, months, dateFormat, formatString, presets, className = "", wrapperClassName = "", portal = true, placement = "bottom-start", offset = 4, children, }, ref) => {
46
+ const DatePickerComponent = React__default.forwardRef(({ id, name, mode = "single", size = "md", state = "default", value, defaultValue, placeholder = "Select date...", disabled = false, required = false, label, helperText, onChange, onFocus, onBlur, minDate, maxDate, isDateDisabled, showToday = true, selectTodayByDefault = false, weekdays, months, dateFormat, formatString, yearRange, presets, className = "", wrapperClassName = "", portal = true, placement = "bottom-start", offset = 4, children, }, ref) => {
47
47
  var _a, _b;
48
48
  // Merge theme with defaults
49
49
  const theme = { ...datePickerTheme };
@@ -112,6 +112,7 @@ const DatePickerComponent = React__default.forwardRef(({ id, name, mode = "singl
112
112
  selectTodayByDefault,
113
113
  weekdays,
114
114
  months,
115
+ yearRange,
115
116
  handleDateSelect,
116
117
  handleRangeSelect,
117
118
  size,
@@ -119,7 +120,7 @@ const DatePickerComponent = React__default.forwardRef(({ id, name, mode = "singl
119
120
  theme,
120
121
  triggerRef,
121
122
  contentRef,
122
- }), [mode, isOpen, selectedValue, minDate, maxDate, isDateDisabled, showToday, selectTodayByDefault, weekdays, months, handleDateSelect, handleRangeSelect, size, state, theme]), children: jsxs("div", { ref: ref, className: cn(containerStyle, wrapperClassName), children: [label && (jsx(FormLabel, { htmlFor: datePickerId, required: required, children: label })), jsx(DatePickerTrigger, { id: datePickerId, disabled: disabled, isOpen: isOpen, state: state, size: size, onClick: handleButtonClick, onFocus: onFocus, onBlur: onBlur, className: className, children: jsx("span", { className: cn("block truncate", selectedValue ? theme.valueTextStyle : theme.placeholderTextStyle), children: displayValue }) }), jsx(DatePickerContent, { isOpen: isOpen, onClose: () => setIsOpen(false), portal: portal, placement: placement, offset: offset, presets: presets, children: children }), helperText && (jsx("p", { className: cn(helperTextStyle, helperTextStateStyle), children: helperText })), name && mode === "single" && selectedValue instanceof Date && (jsx("input", { type: "hidden", name: name, value: selectedValue.toISOString() })), name &&
123
+ }), [mode, isOpen, selectedValue, minDate, maxDate, isDateDisabled, showToday, selectTodayByDefault, weekdays, months, yearRange, handleDateSelect, handleRangeSelect, size, state, theme]), children: jsxs("div", { ref: ref, className: cn(containerStyle, wrapperClassName), children: [label && (jsx(FormLabel, { htmlFor: datePickerId, required: required, children: label })), jsx(DatePickerTrigger, { id: datePickerId, disabled: disabled, isOpen: isOpen, state: state, size: size, onClick: handleButtonClick, onFocus: onFocus, onBlur: onBlur, className: className, children: jsx("span", { className: cn("block truncate", selectedValue ? theme.valueTextStyle : theme.placeholderTextStyle), children: displayValue }) }), jsx(DatePickerBody, { isOpen: isOpen, onClose: () => setIsOpen(false), portal: portal, placement: placement, offset: offset, presets: presets, children: children }), helperText && (jsx("p", { className: cn(helperTextStyle, helperTextStateStyle), children: helperText })), name && mode === "single" && selectedValue instanceof Date && (jsx("input", { type: "hidden", name: name, value: selectedValue.toISOString() })), name &&
123
124
  mode === "range" &&
124
125
  selectedValue &&
125
126
  typeof selectedValue === "object" &&
@@ -130,7 +131,7 @@ DatePickerComponent.displayName = "DatePicker";
130
131
  const DatePickerWithCompounds = DatePickerComponent;
131
132
  // Attach compound components
132
133
  DatePickerWithCompounds.Trigger = DatePickerTrigger;
133
- DatePickerWithCompounds.Content = DatePickerContent;
134
+ DatePickerWithCompounds.Body = DatePickerBody;
134
135
  DatePickerWithCompounds.Presets = DatePickerPresets;
135
136
 
136
- export { DatePickerWithCompounds as DatePicker, DatePickerContent, DatePickerContext, DatePickerPresets, DatePickerTrigger, DatePickerWithCompounds };
137
+ export { DatePickerWithCompounds as DatePicker, DatePickerBody, DatePickerContext, DatePickerPresets, DatePickerTrigger, DatePickerWithCompounds };
@@ -26,10 +26,10 @@ const datePickerTheme = {
26
26
  triggerFocusStates: formsBaseTheme.focusStates,
27
27
  iconEndStyle: formsBaseTheme.iconStyles.right,
28
28
  iconEndPadding: formsBaseTheme.iconStyles.padding.right,
29
- // Dropdown content - with dark mode support
30
- contentStyle: "min-w-fit max-w-none bg-white border border-[var(--color-border)] rounded-[var(--popover-radius)] shadow-real-xl p-0 overflow-hidden z-[1000] fixed " +
29
+ // Dropdown body - with dark mode support
30
+ bodyStyle: "min-w-fit max-w-none bg-white border border-[var(--color-border)] rounded-[var(--popover-radius)] shadow-real-xl p-0 overflow-hidden z-[1000] fixed " +
31
31
  "dark:bg-[var(--color-neutral-900)] dark:border-[var(--color-neutral-700)]",
32
- contentWithPresetsStyle: "flex flex-col sm:flex-row w-fit max-w-[calc(100vw-2rem)] sm:max-w-none bg-white border border-[var(--color-border)] rounded-[var(--popover-radius)] shadow-lg p-0 overflow-hidden z-[1000] fixed " +
32
+ bodyWithPresetsStyle: "flex flex-col sm:flex-row w-fit max-w-[calc(100vw-2rem)] sm:max-w-none bg-white border border-[var(--color-border)] rounded-[var(--popover-radius)] shadow-lg p-0 overflow-hidden z-[1000] fixed " +
33
33
  "dark:bg-[var(--color-neutral-900)] dark:border-[var(--color-neutral-700)]",
34
34
  // Presets sidebar - with dark mode support
35
35
  presetsContainerStyle: "flex flex-col gap-1 p-3 border-b sm:border-b-0 sm:border-r border-[var(--color-border)] bg-[var(--color-neutral-50)] sm:min-w-[180px] " +
@@ -76,6 +76,11 @@ export interface DatePickerProps extends Omit<React.HTMLAttributes<HTMLDivElemen
76
76
  dateFormat?: Intl.DateTimeFormatOptions;
77
77
  /** Custom format string for date display (e.g., 'DD MMM YYYY', 'DD/MM/YYYY') - takes precedence over dateFormat */
78
78
  formatString?: string;
79
+ /** Year range for the year dropdown (default: current year back to 100 years) */
80
+ yearRange?: {
81
+ start: number;
82
+ end: number;
83
+ };
79
84
  /** Auto-select today's date when calendar opens without a value (default: false) */
80
85
  selectTodayByDefault?: boolean;
81
86
  /** Additional class name for trigger button */
@@ -107,9 +112,9 @@ export interface DatePickerTriggerProps {
107
112
  children?: React.ReactNode;
108
113
  }
109
114
  /**
110
- * DatePicker content props
115
+ * DatePicker body props (calendar dropdown content)
111
116
  */
112
- export interface DatePickerContentProps {
117
+ export interface DatePickerBodyProps {
113
118
  isOpen?: boolean;
114
119
  className?: string;
115
120
  onClose?: () => void;
@@ -135,8 +140,8 @@ export interface DatePickerTheme {
135
140
  triggerFocusStates: Record<DatePickerState, string>;
136
141
  iconEndStyle: string;
137
142
  iconEndPadding: string;
138
- contentStyle: string;
139
- contentWithPresetsStyle: string;
143
+ bodyStyle: string;
144
+ bodyWithPresetsStyle: string;
140
145
  presetsContainerStyle: string;
141
146
  presetButtonStyle: string;
142
147
  helperTextStyle: string;
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ import { DatePickerBodyProps } from "./DatePicker.types";
3
+ /**
4
+ * DatePicker Body Component - contains the Calendar and optional Presets
5
+ * Uses portal positioning like Select component
6
+ */
7
+ export declare const DatePickerBody: React.FC<DatePickerBodyProps>;
@@ -43,15 +43,15 @@ const useDarkMode = () => {
43
43
  return isDark;
44
44
  };
45
45
  /**
46
- * DatePicker Content Component - contains the Calendar and optional Presets
46
+ * DatePicker Body Component - contains the Calendar and optional Presets
47
47
  * Uses portal positioning like Select component
48
48
  */
49
- const DatePickerContent = ({ isOpen, className, onClose, portal = true, placement = "bottom-start", offset = 4, presets, children, }) => {
49
+ const DatePickerBody = ({ isOpen, className, onClose, portal = true, placement = "bottom-start", offset = 4, presets, children, }) => {
50
50
  const context = useContext(DatePickerContext);
51
51
  if (!context) {
52
- throw new Error("DatePickerContent must be used within a DatePicker");
52
+ throw new Error("DatePickerBody must be used within a DatePicker");
53
53
  }
54
- const { mode, theme, triggerRef, contentRef, selectedValue, minDate, maxDate, isDateDisabled, showToday, selectTodayByDefault, weekdays, months, handleDateSelect, handleRangeSelect, } = context;
54
+ const { mode, theme, triggerRef, contentRef, selectedValue, minDate, maxDate, isDateDisabled, showToday, selectTodayByDefault, weekdays, months, handleDateSelect, handleRangeSelect, yearRange, } = context;
55
55
  // Determine if we should show presets
56
56
  const showPresets = mode === "range" && presets && presets.length > 0;
57
57
  // Detect dark mode for portal content
@@ -193,7 +193,7 @@ const DatePickerContent = ({ isOpen, className, onClose, portal = true, placemen
193
193
  document.removeEventListener("keydown", handleKeyDown);
194
194
  };
195
195
  }, [isOpen, onClose]);
196
- const contentElement = (jsx(AnimatePresence, { mode: "wait", children: isOpen && (jsxs(motion.div, { ref: combinedRef, className: cn(showPresets ? theme.contentWithPresetsStyle : theme.contentStyle, className), style: {
196
+ const contentElement = (jsx(AnimatePresence, { mode: "wait", children: isOpen && (jsxs(motion.div, { ref: combinedRef, className: cn(showPresets ? theme.bodyWithPresetsStyle : theme.bodyStyle, className), style: {
197
197
  ...cssVariables,
198
198
  ...(portal
199
199
  ? {
@@ -206,24 +206,25 @@ const DatePickerContent = ({ isOpen, className, onClose, portal = true, placemen
206
206
  // Dual calendar for range mode
207
207
  jsxs(Fragment, { children: [jsx("div", { className: "flex justify-between items-start gap-6 p-4", children: children || (jsxs(Fragment, { children: [jsx("div", { className: "flex-1 min-w-fit", children: jsx(Calendar, { mode: "range", value: tempRange, onChange: (value) => {
208
208
  setTempRange(value); // Update temp state only
209
- }, viewDate: leftCalendarDate, onViewDateChange: setLeftCalendarDate, onNavigatePrev: handleNavigatePrev, onNavigateNext: null, minDate: minDate, maxDate: maxDate, isDateDisabled: isDateDisabled, showToday: showToday, selectTodayByDefault: selectTodayByDefault, weekdays: weekdays, months: months, size: "md" }) }), jsx("div", { className: "flex-1 min-w-fit", children: jsx(Calendar, { mode: "range", value: tempRange, onChange: (value) => {
209
+ }, viewDate: leftCalendarDate, onViewDateChange: setLeftCalendarDate, onNavigatePrev: handleNavigatePrev, onNavigateNext: null, minDate: minDate, maxDate: maxDate, isDateDisabled: isDateDisabled, showToday: showToday, selectTodayByDefault: selectTodayByDefault, weekdays: weekdays, months: months, yearRange: yearRange, size: "md" }) }), jsx("div", { className: "flex-1 min-w-fit", children: jsx(Calendar, { mode: "range", value: tempRange, onChange: (value) => {
210
210
  setTempRange(value); // Update temp state only
211
211
  }, viewDate: rightCalendarDate, onViewDateChange: (newDate) => {
212
212
  // Adjust left calendar when right calendar changes
213
213
  const adjustedLeft = new Date(newDate);
214
214
  adjustedLeft.setMonth(adjustedLeft.getMonth() - 1);
215
215
  setLeftCalendarDate(adjustedLeft);
216
- }, onNavigatePrev: null, onNavigateNext: handleNavigateNext, minDate: minDate, maxDate: maxDate, isDateDisabled: isDateDisabled, showToday: showToday, selectTodayByDefault: false, weekdays: weekdays, months: months, size: "md" }) })] })) }), jsxs("div", { className: "flex items-center justify-between px-4 py-3 border-t border-[var(--color-border)] dark:border-[var(--color-neutral-700)]", children: [jsx("div", { className: "text-base text-[var(--color-text-secondary)] dark:text-[var(--color-neutral-400)]", children: formatRangeDisplay(tempRange) }), jsxs("div", { className: "flex items-center gap-2", children: [jsx(Button, { variant: "outline", color: "neutral", size: "sm", onClick: handleCancel, children: "Cancel" }), jsx(Button, { variant: "filled", size: "sm", onClick: handleApply, disabled: !(tempRange === null || tempRange === void 0 ? void 0 : tempRange.start) || !(tempRange === null || tempRange === void 0 ? void 0 : tempRange.end), children: "Apply" })] })] })] })) : (
216
+ }, onNavigatePrev: null, onNavigateNext: handleNavigateNext, minDate: minDate, maxDate: maxDate, isDateDisabled: isDateDisabled, showToday: showToday, selectTodayByDefault: false, weekdays: weekdays, months: months, yearRange: yearRange, size: "md" }) })] })) }), jsxs("div", { className: "flex items-center justify-between px-4 py-3 border-t border-[var(--color-border)] dark:border-[var(--color-neutral-700)]", children: [jsx("div", { className: "text-base text-[var(--color-text-secondary)] dark:text-[var(--color-neutral-400)]", children: formatRangeDisplay(tempRange) }), jsxs("div", { className: "flex items-center gap-2", children: [jsx(Button, { variant: "outline", color: "neutral", size: "sm", onClick: handleCancel, children: "Cancel" }), jsx(Button, { variant: "filled", size: "sm", onClick: handleApply, disabled: !(tempRange === null || tempRange === void 0 ? void 0 : tempRange.start) || !(tempRange === null || tempRange === void 0 ? void 0 : tempRange.end), children: "Apply" })] })] })] })) : (
217
217
  // Single calendar for single mode
218
218
  jsx("div", { className: "flex-1 p-4", children: children || (jsx(Calendar, { mode: "single", value: selectedValue, onChange: (value) => {
219
219
  handleDateSelect(value);
220
220
  onClose === null || onClose === void 0 ? void 0 : onClose();
221
- }, minDate: minDate, maxDate: maxDate, isDateDisabled: isDateDisabled, showToday: showToday, selectTodayByDefault: selectTodayByDefault, weekdays: weekdays, months: months, size: "md" })) })) })] })) }));
221
+ }, minDate: minDate, maxDate: maxDate, isDateDisabled: isDateDisabled, showToday: showToday, selectTodayByDefault: selectTodayByDefault, weekdays: weekdays, months: months, yearRange: yearRange, size: "md" })) })) })] })) }));
222
222
  // Use portal if enabled and client-side - wrap with dark class for dark mode support
223
223
  if (portal && isClient) {
224
224
  return createPortal(jsx("div", { className: isDarkMode ? "dark" : undefined, children: contentElement }), document.body);
225
225
  }
226
226
  return contentElement;
227
227
  };
228
+ DatePickerBody.displayName = "DatePicker.Body";
228
229
 
229
- export { DatePickerContent };
230
+ export { DatePickerBody };
@@ -1,3 +1,3 @@
1
- export { DatePicker, DatePickerTrigger, DatePickerContent, DatePickerPresets } from './DatePicker';
2
- export type { DatePickerProps, DatePickerTriggerProps, DatePickerContentProps, DatePickerSize, DatePickerState, DatePickerPlacement, DatePickerMode, DatePickerTheme, DateRange, DateRangePreset, } from './DatePicker.types';
1
+ export { DatePicker, DatePickerTrigger, DatePickerBody, DatePickerPresets } from './DatePicker';
2
+ export type { DatePickerProps, DatePickerTriggerProps, DatePickerBodyProps, DatePickerSize, DatePickerState, DatePickerPlacement, DatePickerMode, DatePickerTheme, DateRange, DateRangePreset, } from './DatePicker.types';
3
3
  export { datePickerTheme } from './DatePicker.theme';
@@ -3,85 +3,7 @@ import React__default, { useMemo, useRef, useState, useCallback } from 'react';
3
3
  import { fileUploadTheme } from './FileUpload.theme.js';
4
4
  import { cn } from '../../../utils/cn.js';
5
5
  import { CloudArrowUpIcon, DocumentIcon, XMarkIcon } from '@heroicons/react/24/outline';
6
- import '../../core/Accordion/Accordion.js';
7
- import '../../core/AlertDialog/AlertDialog.js';
8
- import '../../core/AspectRatio/AspectRatio.js';
9
- import '../../core/Avatar/Avatar.js';
10
- import '../../core/AvatarGroup/AvatarGroup.js';
11
- import '../../core/Badge/Badge.js';
12
- import '../../core/Breadcrumbs/Breadcrumbs.js';
13
- import '../../core/Breadcrumbs/Breadcrumbs.theme.js';
14
6
  import { Button } from '../../core/Button/Button.js';
15
- import '../../core/ButtonGroup/ButtonGroup.js';
16
- import '../../core/ButtonGroup/ButtonGroupSeparator.js';
17
- import '../../core/ButtonGroup/ButtonGroupText.js';
18
- import '../../core/Calendar/Calendar.js';
19
- import '../../core/Calendar/CalendarMini/CalendarMini.js';
20
- import '../../core/Card/Card.js';
21
- import '../../core/CardStack/CardStack.js';
22
- import '../../core/Carousel/Carousel.js';
23
- import '../../core/CommandPalette/CommandPalette.js';
24
- import '../../core/Separator/Separator.js';
25
- import '../../core/Drawer/Drawer.js';
26
- import '../../core/Dropdown/Dropdown.js';
27
- import '../../core/Dropdown/DropdownTrigger.js';
28
- import '../../core/Dropdown/DropdownMenu.js';
29
- import '../../core/Dropdown/DropdownItem.js';
30
- import '../../core/Dropdown/DropdownSection.js';
31
- import '../../core/Dropdown/DropdownSeparator.js';
32
- import '../../core/Dropdown/Dropdown.theme.js';
33
- import '../../core/Kbd/Kbd.js';
34
- import '../../core/MenuItem/MenuItem.js';
35
- import '../../core/Link/Link.js';
36
- import '../../core/Loader/Loader.js';
37
- import '../../core/Modal/Modal.js';
38
- import '../../core/ModalStack/ModalStack.js';
39
- import '../../core/PageHeading/PageHeading.js';
40
- import '../../core/Pagination/Pagination.js';
41
- import '../../core/Popover/Popover.js';
42
- import '../../core/Popover/PopoverContext.js';
43
- import '../../core/Progress/Progress.js';
44
- import '../../core/Rating/Rating.js';
45
- import '../../core/ScrollArea/ScrollArea.js';
46
- import '../../core/ScrollArea/smooth/SmoothScrollEngine.js';
47
- import '../../core/Segmented/Segmented.js';
48
- import '../../core/Skeleton/Skeleton.js';
49
- import '../../core/SlidingNumber/SlidingNumber.js';
50
- import '../../core/Tabs/Tabs.js';
51
- import '../../core/Tabs/TabsList.js';
52
- import '../../core/Tabs/TabsTrigger.js';
53
- import '../../core/Tabs/TabsContent.js';
54
- import '../../core/Tabs/TabsContext.js';
55
- import '../../core/Tooltip/Tooltip.js';
56
- import '../../core/Tooltip/Tooltip.animations.js';
57
- import '../../core/Tree/Tree.js';
58
- import '../../core/Tag/Tag.js';
59
- import '../../core/Alert/Alert.js';
60
- import '../../core/Toast/Toast.js';
61
- import '../../core/Toast/ToastProvider.js';
62
- import '@heroicons/react/24/solid';
63
- import '../../core/Spinner/Spinner.js';
64
- import '../../core/Message/Message.js';
65
- import '../../core/Message/TypeWriter.js';
66
- import '../../core/Empty/Empty.js';
67
- import '../../core/Masonry/Masonry.js';
68
- import '../../core/DragDrop/DragDrop.js';
69
- import '../../core/Sortable/Sortable.js';
70
- import '../../core/NavItem/NavItem.js';
71
- import '../../core/Sidebar/Sidebar.js';
72
- import '../../core/Sidebar/SidebarHeader.js';
73
- import '../../core/Sidebar/SidebarContent.js';
74
- import '../../core/Sidebar/SidebarFooter.js';
75
- import '../../core/Sidebar/SidebarNav.js';
76
- import '../../core/Sidebar/SidebarNavGroup.js';
77
- import 'motion/react';
78
- import '../../core/Sidebar/SidebarToggle.js';
79
- import '../../core/Sidebar/SidebarContext.js';
80
- import '../../core/OfflineIndicator/OfflineIndicator.js';
81
- import '../../core/ContextMenu/ContextMenu.js';
82
- import '../../core/ContextMenu/ContextMenu.theme.js';
83
- import '../../core/Pill/Pill.js';
84
- import '../../core/SocialIcon/SocialIcon.js';
85
7
 
86
8
  /**
87
9
  * FileUpload component - Drag-and-drop file uploader with previews
@@ -275,14 +275,14 @@ const Input = React__default.forwardRef(({ size = "md", state = "default", class
275
275
  numberValue !== undefined &&
276
276
  typeof min === "number" &&
277
277
  numberValue <= min;
278
- return (jsxs("div", { className: cn(wrapperClasses, stateClass, wrapperClassName), children: [label && (jsxs("div", { className: "flex justify-between items-center", children: [jsx(FormLabel, { htmlFor: inputId, className: labelClassName, state: state, required: required, children: label }), showStrengthWithLabel && (jsx(PasswordStrengthIndicator, { inline: true, passwordStrengthIndicator: passwordStrengthIndicator }))] })), jsx("div", { children: jsxs("div", { className: cn(inputGroupClasses, stateClasses, isFocused && (isInvalid ? inputTheme.inputGroupFocusInvalidStyle : inputTheme.inputGroupFocusStyle), inputGroupClassName), onClick: handleInputGroupClick, role: "presentation", children: [hasContentStart && (jsx("div", { "data-slot": "content-start", className: cn(contentStyleClasses, contentStartStyle), children: contentStart })), jsxs("div", { className: "relative flex-1", children: [jsx("input", { ref: setInputRef, id: inputId, type: actualInputType, className: cn(baseClasses, sizeClasses, hasLeftIcon && iconStartPadding, (hasRightIcon || isPasswordField || displayNumberControls) &&
278
+ return (jsxs("div", { className: cn(wrapperClasses, stateClass, wrapperClassName), children: [label && (typeof label === 'string' ? (jsxs("div", { className: "flex justify-between items-center", children: [jsx(FormLabel, { htmlFor: inputId, className: labelClassName, state: state, required: required, children: label }), showStrengthWithLabel && (jsx(PasswordStrengthIndicator, { inline: true, passwordStrengthIndicator: passwordStrengthIndicator }))] })) : (jsxs("div", { className: "flex justify-between items-center", children: [label, showStrengthWithLabel && (jsx(PasswordStrengthIndicator, { inline: true, passwordStrengthIndicator: passwordStrengthIndicator }))] }))), jsx("div", { children: jsxs("div", { className: cn(inputGroupClasses, stateClasses, isFocused && (isInvalid ? inputTheme.inputGroupFocusInvalidStyle : inputTheme.inputGroupFocusStyle), inputGroupClassName), onClick: handleInputGroupClick, role: "presentation", children: [hasContentStart && (jsx("div", { "data-slot": "content-start", className: cn(contentStyleClasses, contentStartStyle), children: contentStart })), jsxs("div", { className: "relative flex-1", children: [jsx("input", { ref: setInputRef, id: inputId, type: actualInputType, className: cn(baseClasses, sizeClasses, hasLeftIcon && iconStartPadding, (hasRightIcon || isPasswordField || displayNumberControls) &&
279
279
  iconEndPadding, className), disabled: isDisabled, "aria-invalid": isInvalid, required: required, min: min, max: max, step: step, value: value, onChange: handleInputChange, onFocus: (e) => {
280
280
  setIsFocused(true);
281
281
  onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);
282
282
  }, onBlur: (e) => {
283
283
  setIsFocused(false);
284
284
  onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
285
- }, placeholder: props.placeholder, ...props }), hasLeftIcon && (jsx("div", { className: iconStartClasses, children: finalLeftIcon })), hasRightIcon && !isPasswordField && !displayNumberControls && (jsx("div", { className: iconEndClasses, children: iconEnd })), isPasswordField && (jsx(PasswordToggleButton, { showPassword: showPassword, onToggle: handleTogglePassword, passwordToggleClasses: passwordToggleClasses })), displayNumberControls && (jsx(NumberButtons, { isDisabled: isDisabled, isAtMax: isAtMax, isAtMin: isAtMin, onIncrement: handleIncrement, onDecrement: handleDecrement, numberButtonsContainerClasses: numberButtonsContainerClasses, numberButtonClasses: numberButtonClasses })), hasKeyboardShortcut && (jsx("div", { className: inputTheme.keyboardShortcutStyle, children: keyboardShortcut }))] }), hasContentEnd && (jsx("div", { "data-slot": "content-end", className: cn(contentStyleClasses, contentEndStyle), children: contentEnd }))] }) }), showStrengthBelow && jsx(PasswordStrengthIndicator, { inline: false, passwordStrengthIndicator: passwordStrengthIndicator }), helperText && (jsx("div", { className: cn(helperTextClasses, helperTextClassName), children: helperText }))] }));
285
+ }, placeholder: props.placeholder, ...props }), hasLeftIcon && (jsx("div", { className: iconStartClasses, children: finalLeftIcon })), hasRightIcon && !isPasswordField && !displayNumberControls && (jsx("div", { className: iconEndClasses, children: iconEnd })), isPasswordField && (jsx(PasswordToggleButton, { showPassword: showPassword, onToggle: handleTogglePassword, passwordToggleClasses: passwordToggleClasses })), displayNumberControls && (jsx(NumberButtons, { isDisabled: isDisabled, isAtMax: isAtMax, isAtMin: isAtMin, onIncrement: handleIncrement, onDecrement: handleDecrement, numberButtonsContainerClasses: numberButtonsContainerClasses, numberButtonClasses: numberButtonClasses })), hasKeyboardShortcut && (jsx("div", { className: inputTheme.keyboardShortcutStyle, children: keyboardShortcut }))] }), hasContentEnd && (jsx("div", { "data-slot": "content-end", className: cn(contentStyleClasses, contentEndStyle), children: contentEnd }))] }) }), showStrengthBelow && jsx(PasswordStrengthIndicator, { inline: false, passwordStrengthIndicator: passwordStrengthIndicator }), helperText && (typeof helperText === 'string' ? (jsx("div", { className: cn(helperTextClasses, helperTextClassName), children: helperText })) : (helperText))] }));
286
286
  });
287
287
  Input.displayName = "Input";
288
288