@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.
- package/dist/components/ai/ApprovalCard/ApprovalCard.js +1 -1
- package/dist/components/ai/MessageHistory/MessageHistory.js +1 -0
- package/dist/components/ai/PromptInput/PromptInput.js +7 -125
- package/dist/components/ai/PromptInput/VoiceRecorder.js +0 -77
- package/dist/components/ai/StreamingResponse/StreamingResponse.js +1 -0
- package/dist/components/ai/StreamingResponse/StreamingResponse.types.d.ts +7 -7
- package/dist/components/ai/index.js +1 -0
- package/dist/components/core/Accordion/Accordion.d.ts +1 -1
- package/dist/components/core/Accordion/Accordion.js +2 -2
- package/dist/components/core/Accordion/Accordion.theme.d.ts +2 -2
- package/dist/components/core/Accordion/Accordion.theme.js +4 -4
- package/dist/components/core/Accordion/Accordion.types.d.ts +19 -20
- package/dist/components/core/Accordion/AccordionBody.d.ts +3 -0
- package/dist/components/core/Accordion/{AccordionContent.js → AccordionBody.js} +4 -4
- package/dist/components/core/Accordion/AccordionItem.js +1 -1
- package/dist/components/core/Accordion/AccordionTrigger.js +14 -7
- package/dist/components/core/Accordion/index.d.ts +2 -2
- package/dist/components/core/Alert/Alert.js +5 -1
- package/dist/components/core/Alert/Alert.types.d.ts +4 -4
- package/dist/components/core/Avatar/Avatar.js +22 -18
- package/dist/components/core/Avatar/Avatar.theme.js +1 -1
- package/dist/components/core/Avatar/Avatar.types.d.ts +9 -8
- package/dist/components/core/AvatarGroup/AvatarGroup.js +2 -2
- package/dist/components/core/Badge/Badge.js +7 -5
- package/dist/components/core/Badge/Badge.theme.js +11 -4
- package/dist/components/core/Badge/Badge.types.d.ts +2 -2
- package/dist/components/core/Breadcrumbs/Breadcrumbs.js +7 -3
- package/dist/components/core/Breadcrumbs/Breadcrumbs.types.d.ts +1 -1
- package/dist/components/core/Button/Button.js +2 -8
- package/dist/components/core/Button/Button.theme.js +7 -7
- package/dist/components/core/Calendar/Calendar.js +3 -3
- package/dist/components/core/Calendar/CalendarEvent/CalendarEvent.types.d.ts +5 -6
- package/dist/components/core/Card/Card.d.ts +2 -2
- package/dist/components/core/Card/Card.js +3 -3
- package/dist/components/core/Card/Card.theme.js +3 -3
- package/dist/components/core/Card/Card.types.d.ts +4 -4
- package/dist/components/core/Card/CardBody.d.ts +3 -0
- package/dist/components/core/Card/CardBody.js +11 -0
- package/dist/components/core/Card/index.d.ts +2 -2
- package/dist/components/core/Carousel/Carousel.js +4 -4
- package/dist/components/core/Carousel/Carousel.types.d.ts +4 -4
- package/dist/components/core/Carousel/CarouselBody.d.ts +4 -0
- package/dist/components/core/Carousel/{CarouselContent.js → CarouselBody.js} +3 -3
- package/dist/components/core/Carousel/index.d.ts +2 -1
- package/dist/components/core/ContextMenu/ContextMenu.d.ts +2 -2
- package/dist/components/core/ContextMenu/ContextMenu.js +6 -6
- package/dist/components/core/ContextMenu/ContextMenu.types.d.ts +2 -2
- package/dist/components/core/ContextMenu/ContextMenuBody.d.ts +6 -0
- package/dist/components/core/ContextMenu/{ContextMenuContent.js → ContextMenuBody.js} +4 -4
- package/dist/components/core/ContextMenu/ContextMenuSubBody.d.ts +6 -0
- package/dist/components/core/ContextMenu/{ContextMenuSubContent.js → ContextMenuSubBody.js} +4 -4
- package/dist/components/core/ContextMenu/index.d.ts +1 -1
- package/dist/components/core/Drawer/Drawer.d.ts +2 -2
- package/dist/components/core/Drawer/Drawer.js +28 -9
- package/dist/components/core/Drawer/Drawer.theme.js +1 -1
- package/dist/components/core/Drawer/Drawer.types.d.ts +8 -6
- package/dist/components/core/Drawer/DrawerBody.d.ts +5 -0
- package/dist/components/core/Drawer/DrawerBody.js +11 -0
- package/dist/components/core/Drawer/index.d.ts +2 -1
- package/dist/components/core/Dropdown/Dropdown.types.d.ts +3 -3
- package/dist/components/core/Dropdown/DropdownSection.js +3 -1
- package/dist/components/core/FileTypeIcon/FileTypeIcon.d.ts +3 -0
- package/dist/components/core/FileTypeIcon/FileTypeIcon.js +33 -0
- package/dist/components/core/FileTypeIcon/FileTypeIcon.theme.d.ts +2 -0
- package/dist/components/core/FileTypeIcon/FileTypeIcon.theme.js +12 -0
- package/dist/components/core/FileTypeIcon/FileTypeIcon.types.d.ts +19 -0
- package/dist/components/core/FileTypeIcon/fileTypes.d.ts +7 -0
- package/dist/components/core/FileTypeIcon/fileTypes.js +30 -0
- package/dist/components/core/FileTypeIcon/index.d.ts +2 -0
- package/dist/components/core/MenuItem/MenuItem.js +3 -1
- package/dist/components/core/MenuItem/MenuItem.theme.js +1 -1
- package/dist/components/core/MenuItem/MenuItem.types.d.ts +1 -1
- package/dist/components/core/Message/Message.d.ts +1 -1
- package/dist/components/core/Message/Message.js +3 -3
- package/dist/components/core/Message/Message.theme.js +2 -2
- package/dist/components/core/Message/Message.types.d.ts +7 -7
- package/dist/components/core/Message/MessageAvatar.d.ts +2 -2
- package/dist/components/core/Message/MessageAvatar.js +3 -3
- package/dist/components/core/Message/MessageBody.d.ts +8 -0
- package/dist/components/core/Message/{MessageContent.js → MessageBody.js} +3 -3
- package/dist/components/core/Message/index.d.ts +2 -0
- package/dist/components/core/Modal/Modal.js +5 -1
- package/dist/components/core/Modal/Modal.theme.js +1 -1
- package/dist/components/core/Modal/Modal.types.d.ts +5 -2
- package/dist/components/core/ModalStack/ModalStackModal.js +1 -0
- package/dist/components/core/PageHeading/PageHeading.types.d.ts +1 -1
- package/dist/components/core/PageHeading/PageHeadingBackButton.js +3 -1
- package/dist/components/core/Popover/Popover.d.ts +1 -1
- package/dist/components/core/Popover/Popover.js +4 -4
- package/dist/components/core/Popover/Popover.theme.d.ts +1 -1
- package/dist/components/core/Popover/Popover.theme.js +2 -2
- package/dist/components/core/Popover/Popover.types.d.ts +3 -3
- package/dist/components/core/Popover/PopoverBody.d.ts +7 -0
- package/dist/components/core/Popover/{PopoverContent.js → PopoverBody.js} +24 -13
- package/dist/components/core/Popover/index.d.ts +4 -3
- package/dist/components/core/Tabs/Tabs.animations.d.ts +2 -2
- package/dist/components/core/Tabs/Tabs.animations.js +3 -3
- package/dist/components/core/Tabs/Tabs.d.ts +1 -1
- package/dist/components/core/Tabs/Tabs.js +3 -3
- package/dist/components/core/Tabs/Tabs.theme.d.ts +1 -1
- package/dist/components/core/Tabs/Tabs.theme.js +2 -2
- package/dist/components/core/Tabs/Tabs.types.d.ts +9 -9
- package/dist/components/core/Tabs/TabsBody.d.ts +6 -0
- package/dist/components/core/Tabs/{TabsContent.js → TabsBody.js} +8 -8
- package/dist/components/core/Tabs/index.d.ts +2 -2
- package/dist/components/core/Tag/Tag.d.ts +1 -1
- package/dist/components/core/Tag/Tag.js +2 -2
- package/dist/components/core/Tag/Tag.types.d.ts +1 -1
- package/dist/components/core/Toast/Toast.js +5 -1
- package/dist/components/core/Toast/Toast.types.d.ts +9 -9
- package/dist/components/core/index.d.ts +1 -1
- package/dist/components/core/index.js +7 -3
- package/dist/components/data-display/Feed/Feed.animations.d.ts +40 -0
- package/dist/components/data-display/Feed/Feed.animations.js +26 -0
- package/dist/components/data-display/Feed/Feed.d.ts +5 -1
- package/dist/components/data-display/Feed/Feed.js +87 -52
- package/dist/components/data-display/Feed/Feed.theme.js +11 -13
- package/dist/components/data-display/Feed/Feed.types.d.ts +35 -34
- package/dist/components/data-display/Feed/index.d.ts +1 -1
- package/dist/components/data-display/GanttChart/GanttTaskBar.js +11 -9
- package/dist/components/data-display/GanttChart/GanttTaskContextMenu.js +1 -1
- package/dist/components/data-display/KPI/KPI.js +2 -2
- package/dist/components/data-display/KPI/KPI.types.d.ts +3 -3
- package/dist/components/data-display/Metric/Metric.js +2 -2
- package/dist/components/data-display/Metric/Metric.types.d.ts +3 -3
- package/dist/components/data-display/Table/TableColumnManager.js +2 -1
- package/dist/components/data-display/Table/TableFilter.js +2 -1
- package/dist/components/data-display/Timeline/TimelineMarker.js +2 -2
- package/dist/components/effects/3d/index.d.ts +1 -1
- package/dist/components/effects/AIOrb/AIOrb.d.ts +1 -0
- package/dist/components/effects/AIOrb/AIOrb.js +3 -2
- package/dist/components/effects/AIOrb/AIOrb.types.d.ts +1 -0
- package/dist/components/effects/AIOrb/hooks/index.d.ts +2 -0
- package/dist/components/effects/AIOrb/hooks/useOrbState.d.ts +20 -0
- package/dist/components/effects/AIOrb/hooks/useOrbState.js +27 -0
- package/dist/components/effects/AIOrb/index.d.ts +2 -2
- package/dist/components/effects/AIOrb/variants/Aura/Aura.d.ts +3 -0
- package/dist/components/effects/AIOrb/variants/Aura/Aura.js +75 -0
- package/dist/components/effects/AIOrb/variants/Aura/Aura.shaders.d.ts +28 -0
- package/dist/components/effects/AIOrb/variants/Aura/Aura.shaders.js +191 -0
- package/dist/components/effects/AIOrb/variants/Aura/Aura.types.d.ts +53 -0
- package/dist/components/effects/AIOrb/variants/Aura/ShaderCanvas.d.ts +17 -0
- package/dist/components/effects/AIOrb/variants/Aura/ShaderCanvas.js +149 -0
- package/dist/components/effects/AIOrb/variants/Aura/index.d.ts +2 -0
- package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.js +38 -7
- package/dist/components/effects/AIOrb/variants/DotSphere/DotSphere.types.d.ts +6 -0
- package/dist/components/effects/AIOrb/variants/Liquid/Liquid.js +34 -8
- package/dist/components/effects/AIOrb/variants/Liquid/Liquid.types.d.ts +6 -0
- package/dist/components/effects/AIOrb/variants/index.d.ts +2 -0
- package/dist/components/effects/CustomCursor/CustomCursor.d.ts +2 -2
- package/dist/components/effects/CustomCursor/CustomCursor.js +50 -47
- package/dist/components/effects/GlassSurface/GlassSurface.js +24 -12
- package/dist/components/effects/GlassSurface/GlassSurface.types.d.ts +8 -0
- package/dist/components/forms/Checkbox/Checkbox.js +1 -1
- package/dist/components/forms/Checkbox/Checkbox.types.d.ts +5 -5
- package/dist/components/forms/Checkbox/CheckboxGroup.js +2 -2
- package/dist/components/forms/ColorPicker/ColorPicker.d.ts +1 -1
- package/dist/components/forms/ColorPicker/ColorPicker.js +2 -2
- package/dist/components/forms/ColorPicker/ColorPicker.types.d.ts +2 -2
- package/dist/components/forms/ColorPicker/ColorPickerBody.d.ts +7 -0
- package/dist/components/forms/ColorPicker/{ColorPickerContent.js → ColorPickerBody.js} +5 -5
- package/dist/components/forms/ColorPicker/index.d.ts +2 -2
- package/dist/components/forms/DatePicker/DatePicker.d.ts +7 -3
- package/dist/components/forms/DatePicker/DatePicker.js +6 -5
- package/dist/components/forms/DatePicker/DatePicker.theme.js +3 -3
- package/dist/components/forms/DatePicker/DatePicker.types.d.ts +9 -4
- package/dist/components/forms/DatePicker/DatePickerBody.d.ts +7 -0
- package/dist/components/forms/DatePicker/{DatePickerContent.js → DatePickerBody.js} +10 -9
- package/dist/components/forms/DatePicker/index.d.ts +2 -2
- package/dist/components/forms/FileUpload/FileUpload.js +0 -78
- package/dist/components/forms/Input/Input.js +2 -2
- package/dist/components/forms/Input/Input.types.d.ts +4 -4
- package/dist/components/forms/Mention/Mention.js +2 -2
- package/dist/components/forms/Radio/Radio.js +1 -1
- package/dist/components/forms/Radio/Radio.types.d.ts +5 -5
- package/dist/components/forms/Radio/RadioGroup.js +1 -1
- package/dist/components/forms/Select/Select.js +2 -2
- package/dist/components/forms/Select/Select.types.d.ts +4 -4
- package/dist/components/forms/Switch/Switch.js +1 -1
- package/dist/components/forms/Switch/Switch.types.d.ts +4 -4
- package/dist/components/forms/Textarea/Textarea.js +2 -2
- package/dist/components/forms/Textarea/Textarea.types.d.ts +4 -4
- package/dist/components/forms/TimePicker/TimePickerContent.js +1 -78
- package/dist/components/forms/index.d.ts +2 -2
- package/dist/components/forms/index.js +2 -80
- package/dist/components/layout/FormLayout/FormLayout.d.ts +0 -2
- package/dist/components/layout/FormLayout/FormLayout.js +12 -6
- package/dist/components/layout/FormLayout/FormLayout.theme.js +2 -5
- package/dist/components/layout/FormLayout/FormLayout.types.d.ts +8 -26
- package/dist/components/layout/FormLayout/FormLayoutSection.js +3 -2
- package/dist/components/layout/FormLayout/index.d.ts +1 -1
- package/dist/index.js +197 -199
- package/dist/styles.css +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/paletteGenerator.d.ts +46 -0
- package/package.json +1 -1
- package/src/styles/theme.css +2 -6
- package/dist/components/core/Accordion/AccordionContent.d.ts +0 -3
- package/dist/components/core/Card/CardContent.d.ts +0 -3
- package/dist/components/core/Card/CardContent.js +0 -11
- package/dist/components/core/Carousel/CarouselContent.d.ts +0 -4
- package/dist/components/core/ContextMenu/ContextMenuContent.d.ts +0 -6
- package/dist/components/core/ContextMenu/ContextMenuSubContent.d.ts +0 -6
- package/dist/components/core/Drawer/DrawerContent.d.ts +0 -5
- package/dist/components/core/Drawer/DrawerContent.js +0 -11
- package/dist/components/core/Loader/Loader.d.ts +0 -24
- package/dist/components/core/Loader/Loader.js +0 -57
- package/dist/components/core/Loader/Loader.theme.d.ts +0 -27
- package/dist/components/core/Loader/Loader.theme.js +0 -60
- package/dist/components/core/Loader/Loader.types.d.ts +0 -71
- package/dist/components/core/Loader/index.d.ts +0 -2
- package/dist/components/core/Message/MessageContent.d.ts +0 -8
- package/dist/components/core/Popover/PopoverContent.d.ts +0 -7
- package/dist/components/core/Tabs/TabsContent.d.ts +0 -6
- package/dist/components/forms/ColorPicker/ColorPickerContent.d.ts +0 -7
- package/dist/components/forms/DatePicker/DatePickerContent.d.ts +0 -7
- package/dist/components/layout/FormLayout/FormLayoutBody.d.ts +0 -3
- package/dist/components/layout/FormLayout/FormLayoutBody.js +0 -91
- package/dist/components/layout/FormLayout/FormLayoutHeader.d.ts +0 -3
- 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
|
|
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 || (
|
|
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:
|
|
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
|
|
188
|
-
0
|
|
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 =
|
|
212
|
+
const fallbackBrightness = resolvedDark ? "1.2" : "1.1";
|
|
201
213
|
const filterStr = `blur(${effectiveBlur}) saturate(${fallbackSaturate}) brightness(${fallbackBrightness})`;
|
|
202
|
-
if (
|
|
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,
|
|
238
|
-
const focusVisibleClasses =
|
|
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?:
|
|
25
|
-
description?:
|
|
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?:
|
|
42
|
-
description?:
|
|
43
|
-
error?:
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
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
|
-
*
|
|
152
|
+
* ColorPickerBody props
|
|
153
153
|
*/
|
|
154
|
-
export interface
|
|
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
|
-
*
|
|
13
|
+
* ColorPickerBody - Popover content wrapper following Dropdown/Select patterns
|
|
14
14
|
* Uses portal rendering and useSelectPortal for positioning
|
|
15
15
|
*/
|
|
16
|
-
const
|
|
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('
|
|
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
|
-
|
|
73
|
+
ColorPickerBody.displayName = 'ColorPicker.Body';
|
|
74
74
|
|
|
75
|
-
export {
|
|
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 {
|
|
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,
|
|
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 {
|
|
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
|
-
|
|
38
|
+
Body: typeof DatePickerBody;
|
|
35
39
|
Presets: typeof DatePickerPresets;
|
|
36
40
|
};
|
|
37
|
-
export { DatePickerTrigger,
|
|
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 {
|
|
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(
|
|
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.
|
|
134
|
+
DatePickerWithCompounds.Body = DatePickerBody;
|
|
134
135
|
DatePickerWithCompounds.Presets = DatePickerPresets;
|
|
135
136
|
|
|
136
|
-
export { DatePickerWithCompounds as DatePicker,
|
|
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
|
|
30
|
-
|
|
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
|
-
|
|
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
|
|
115
|
+
* DatePicker body props (calendar dropdown content)
|
|
111
116
|
*/
|
|
112
|
-
export interface
|
|
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
|
-
|
|
139
|
-
|
|
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
|
|
46
|
+
* DatePicker Body Component - contains the Calendar and optional Presets
|
|
47
47
|
* Uses portal positioning like Select component
|
|
48
48
|
*/
|
|
49
|
-
const
|
|
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("
|
|
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.
|
|
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 {
|
|
230
|
+
export { DatePickerBody };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { DatePicker, DatePickerTrigger,
|
|
2
|
-
export type { DatePickerProps, DatePickerTriggerProps,
|
|
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
|
|