@arolariu/components 1.1.0 → 2.0.0
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/CHANGELOG.md +32 -0
- package/dist/components/ui/accordion.js +3 -3
- package/dist/components/ui/accordion.js.map +1 -1
- package/dist/components/ui/accordion_module.css.map +1 -1
- package/dist/components/ui/alert-dialog.js +8 -8
- package/dist/components/ui/alert-dialog.js.map +1 -1
- package/dist/components/ui/alert-dialog_module.css +1 -1
- package/dist/components/ui/alert-dialog_module.css.map +1 -1
- package/dist/components/ui/alert.js +4 -4
- package/dist/components/ui/alert.js.map +1 -1
- package/dist/components/ui/alert_module.css.map +1 -1
- package/dist/components/ui/aspect-ratio.js +2 -2
- package/dist/components/ui/aspect-ratio.js.map +1 -1
- package/dist/components/ui/aspect-ratio_module.css.map +1 -1
- package/dist/components/ui/async-boundary.js +2 -2
- package/dist/components/ui/async-boundary.js.map +1 -1
- package/dist/components/ui/avatar.js +4 -4
- package/dist/components/ui/avatar.js.map +1 -1
- package/dist/components/ui/avatar_module.css.map +1 -1
- package/dist/components/ui/background-beams.js +3 -3
- package/dist/components/ui/background-beams.js.map +1 -1
- package/dist/components/ui/background-beams_module.css.map +1 -1
- package/dist/components/ui/badge.js +2 -2
- package/dist/components/ui/badge.js.map +1 -1
- package/dist/components/ui/badge_module.css.map +1 -1
- package/dist/components/ui/breadcrumb.js +10 -10
- package/dist/components/ui/breadcrumb.js.map +1 -1
- package/dist/components/ui/breadcrumb_module.css.map +1 -1
- package/dist/components/ui/bubble-background.js +5 -5
- package/dist/components/ui/bubble-background.js.map +1 -1
- package/dist/components/ui/bubble-background_module.css.map +1 -1
- package/dist/components/ui/button-group.js +6 -6
- package/dist/components/ui/button-group.js.map +1 -1
- package/dist/components/ui/button-group_module.css.map +1 -1
- package/dist/components/ui/button.js +4 -4
- package/dist/components/ui/button.js.map +1 -1
- package/dist/components/ui/button_module.css.map +1 -1
- package/dist/components/ui/calendar.d.ts +2 -1
- package/dist/components/ui/calendar.d.ts.map +1 -1
- package/dist/components/ui/calendar.js +4 -4
- package/dist/components/ui/calendar.js.map +1 -1
- package/dist/components/ui/calendar_module.css.map +1 -1
- package/dist/components/ui/card-skeleton.js +2 -2
- package/dist/components/ui/card-skeleton.js.map +1 -1
- package/dist/components/ui/card-skeleton_module.css.map +1 -1
- package/dist/components/ui/card.js +8 -8
- package/dist/components/ui/card.js.map +1 -1
- package/dist/components/ui/card_module.css.map +1 -1
- package/dist/components/ui/carousel.js +16 -16
- package/dist/components/ui/carousel.js.map +1 -1
- package/dist/components/ui/carousel_module.css +1 -1
- package/dist/components/ui/carousel_module.css.map +1 -1
- package/dist/components/ui/chart.d.ts +6 -3
- package/dist/components/ui/chart.d.ts.map +1 -1
- package/dist/components/ui/chart.js +70 -136
- package/dist/components/ui/chart.js.map +1 -1
- package/dist/components/ui/chart_module.css.map +1 -1
- package/dist/components/ui/checkbox-group.js +2 -2
- package/dist/components/ui/checkbox-group.js.map +1 -1
- package/dist/components/ui/checkbox-group_module.css.map +1 -1
- package/dist/components/ui/checkbox.js +2 -2
- package/dist/components/ui/checkbox.js.map +1 -1
- package/dist/components/ui/checkbox_module.css.map +1 -1
- package/dist/components/ui/collapsible.js +4 -4
- package/dist/components/ui/collapsible.js.map +1 -1
- package/dist/components/ui/collapsible_module.css.map +1 -1
- package/dist/components/ui/combobox.js +13 -13
- package/dist/components/ui/combobox.js.map +1 -1
- package/dist/components/ui/combobox_module.css.map +1 -1
- package/dist/components/ui/command.js +40 -40
- package/dist/components/ui/command.js.map +1 -1
- package/dist/components/ui/command_module.css +1 -1
- package/dist/components/ui/command_module.css.map +1 -1
- package/dist/components/ui/context-menu.js +6 -6
- package/dist/components/ui/context-menu.js.map +1 -1
- package/dist/components/ui/context-menu_module.css.map +1 -1
- package/dist/components/ui/copy-button.js +6 -6
- package/dist/components/ui/copy-button.js.map +1 -1
- package/dist/components/ui/copy-button_module.css.map +1 -1
- package/dist/components/ui/counting-number.js +6 -6
- package/dist/components/ui/counting-number.js.map +1 -1
- package/dist/components/ui/counting-number_module.css.map +1 -1
- package/dist/components/ui/dialog.js +6 -6
- package/dist/components/ui/dialog.js.map +1 -1
- package/dist/components/ui/dialog_module.css +1 -1
- package/dist/components/ui/dialog_module.css.map +1 -1
- package/dist/components/ui/dot-background_module.css.map +1 -1
- package/dist/components/ui/drawer.js +5 -5
- package/dist/components/ui/drawer.js.map +1 -1
- package/dist/components/ui/drawer_module.css.map +1 -1
- package/dist/components/ui/dropdown-menu.js +6 -6
- package/dist/components/ui/dropdown-menu.js.map +1 -1
- package/dist/components/ui/dropdown-menu_module.css.map +1 -1
- package/dist/components/ui/dropdrawer.js +52 -52
- package/dist/components/ui/dropdrawer.js.map +1 -1
- package/dist/components/ui/dropdrawer_module.css.map +1 -1
- package/dist/components/ui/empty.js +7 -7
- package/dist/components/ui/empty.js.map +1 -1
- package/dist/components/ui/empty_module.css.map +1 -1
- package/dist/components/ui/error-boundary.js +2 -2
- package/dist/components/ui/error-boundary.js.map +1 -1
- package/dist/components/ui/error-boundary_module.css.map +1 -1
- package/dist/components/ui/field.js +12 -12
- package/dist/components/ui/field.js.map +1 -1
- package/dist/components/ui/field_module.css.map +1 -1
- package/dist/components/ui/fireworks-background.js +6 -6
- package/dist/components/ui/fireworks-background.js.map +1 -1
- package/dist/components/ui/fireworks-background_module.css.map +1 -1
- package/dist/components/ui/flip-button.js +5 -5
- package/dist/components/ui/flip-button.js.map +1 -1
- package/dist/components/ui/flip-button_module.css.map +1 -1
- package/dist/components/ui/focus-scope.js +6 -6
- package/dist/components/ui/focus-scope.js.map +1 -1
- package/dist/components/ui/focus-scope_module.css.map +1 -1
- package/dist/components/ui/form-skeleton.js +2 -2
- package/dist/components/ui/form-skeleton.js.map +1 -1
- package/dist/components/ui/form-skeleton_module.css.map +1 -1
- package/dist/components/ui/form.d.ts +3 -3
- package/dist/components/ui/form.d.ts.map +1 -1
- package/dist/components/ui/form.js +13 -13
- package/dist/components/ui/form.js.map +1 -1
- package/dist/components/ui/form_module.css.map +1 -1
- package/dist/components/ui/gradient-background.js +2 -2
- package/dist/components/ui/gradient-background.js.map +1 -1
- package/dist/components/ui/gradient-background_module.css.map +1 -1
- package/dist/components/ui/gradient-text.js +2 -2
- package/dist/components/ui/gradient-text.js.map +1 -1
- package/dist/components/ui/gradient-text_module.css.map +1 -1
- package/dist/components/ui/highlight-text.js +4 -4
- package/dist/components/ui/highlight-text.js.map +1 -1
- package/dist/components/ui/highlight-text_module.css.map +1 -1
- package/dist/components/ui/hole-background.js +21 -21
- package/dist/components/ui/hole-background.js.map +1 -1
- package/dist/components/ui/hole-background_module.css.map +1 -1
- package/dist/components/ui/hover-card.js +3 -3
- package/dist/components/ui/hover-card.js.map +1 -1
- package/dist/components/ui/hover-card_module.css.map +1 -1
- package/dist/components/ui/input-group.js +7 -7
- package/dist/components/ui/input-group.js.map +1 -1
- package/dist/components/ui/input-group_module.css.map +1 -1
- package/dist/components/ui/input-otp.d.ts +3 -3
- package/dist/components/ui/input-otp.d.ts.map +1 -1
- package/dist/components/ui/input-otp.js +6 -6
- package/dist/components/ui/input-otp.js.map +1 -1
- package/dist/components/ui/input-otp_module.css.map +1 -1
- package/dist/components/ui/input.js +2 -2
- package/dist/components/ui/input.js.map +1 -1
- package/dist/components/ui/input_module.css.map +1 -1
- package/dist/components/ui/item.js +13 -13
- package/dist/components/ui/item.js.map +1 -1
- package/dist/components/ui/item_module.css.map +1 -1
- package/dist/components/ui/kbd.js +3 -3
- package/dist/components/ui/kbd.js.map +1 -1
- package/dist/components/ui/kbd_module.css.map +1 -1
- package/dist/components/ui/label.js +2 -2
- package/dist/components/ui/label.js.map +1 -1
- package/dist/components/ui/label_module.css.map +1 -1
- package/dist/components/ui/list-skeleton.js +2 -2
- package/dist/components/ui/list-skeleton.js.map +1 -1
- package/dist/components/ui/list-skeleton_module.css.map +1 -1
- package/dist/components/ui/loading-overlay.js +2 -2
- package/dist/components/ui/loading-overlay.js.map +1 -1
- package/dist/components/ui/loading-overlay_module.css.map +1 -1
- package/dist/components/ui/menubar.js +4 -4
- package/dist/components/ui/menubar.js.map +1 -1
- package/dist/components/ui/menubar_module.css.map +1 -1
- package/dist/components/ui/meter.js +5 -5
- package/dist/components/ui/meter.js.map +1 -1
- package/dist/components/ui/meter_module.css.map +1 -1
- package/dist/components/ui/navigation-menu.js +5 -5
- package/dist/components/ui/navigation-menu.js.map +1 -1
- package/dist/components/ui/navigation-menu_module.css +1 -1
- package/dist/components/ui/navigation-menu_module.css.map +1 -1
- package/dist/components/ui/number-field.js +3 -3
- package/dist/components/ui/number-field.js.map +1 -1
- package/dist/components/ui/number-field_module.css.map +1 -1
- package/dist/components/ui/pagination.js +8 -8
- package/dist/components/ui/pagination.js.map +1 -1
- package/dist/components/ui/pagination_module.css.map +1 -1
- package/dist/components/ui/popover.js +5 -5
- package/dist/components/ui/popover.js.map +1 -1
- package/dist/components/ui/popover_module.css.map +1 -1
- package/dist/components/ui/progress.js +2 -2
- package/dist/components/ui/progress.js.map +1 -1
- package/dist/components/ui/progress_module.css.map +1 -1
- package/dist/components/ui/radio-group.js +3 -3
- package/dist/components/ui/radio-group.js.map +1 -1
- package/dist/components/ui/radio-group_module.css.map +1 -1
- package/dist/components/ui/resizable.d.ts +13 -29
- package/dist/components/ui/resizable.d.ts.map +1 -1
- package/dist/components/ui/resizable.js +8 -7
- package/dist/components/ui/resizable.js.map +1 -1
- package/dist/components/ui/resizable_module.css.map +1 -1
- package/dist/components/ui/ripple-button.js +9 -9
- package/dist/components/ui/ripple-button.js.map +1 -1
- package/dist/components/ui/ripple-button_module.css.map +1 -1
- package/dist/components/ui/scratcher_module.css.map +1 -1
- package/dist/components/ui/scroll-area.js +2 -2
- package/dist/components/ui/scroll-area.js.map +1 -1
- package/dist/components/ui/scroll-area_module.css.map +1 -1
- package/dist/components/ui/select.js +4 -4
- package/dist/components/ui/select.js.map +1 -1
- package/dist/components/ui/select_module.css.map +1 -1
- package/dist/components/ui/separator.js +2 -2
- package/dist/components/ui/separator.js.map +1 -1
- package/dist/components/ui/separator_module.css.map +1 -1
- package/dist/components/ui/sheet.js +6 -6
- package/dist/components/ui/sheet.js.map +1 -1
- package/dist/components/ui/sheet_module.css.map +1 -1
- package/dist/components/ui/sidebar.js +36 -36
- package/dist/components/ui/sidebar.js.map +1 -1
- package/dist/components/ui/sidebar_module.css.map +1 -1
- package/dist/components/ui/skeleton.js +2 -2
- package/dist/components/ui/skeleton.js.map +1 -1
- package/dist/components/ui/skeleton_module.css.map +1 -1
- package/dist/components/ui/slider.js +2 -2
- package/dist/components/ui/slider.js.map +1 -1
- package/dist/components/ui/slider_module.css.map +1 -1
- package/dist/components/ui/spinner.js +2 -2
- package/dist/components/ui/spinner.js.map +1 -1
- package/dist/components/ui/spinner_module.css.map +1 -1
- package/dist/components/ui/stepper.js +2 -2
- package/dist/components/ui/stepper.js.map +1 -1
- package/dist/components/ui/stepper_module.css.map +1 -1
- package/dist/components/ui/switch.js +2 -2
- package/dist/components/ui/switch.js.map +1 -1
- package/dist/components/ui/switch_module.css.map +1 -1
- package/dist/components/ui/table-skeleton.js +2 -2
- package/dist/components/ui/table-skeleton.js.map +1 -1
- package/dist/components/ui/table-skeleton_module.css.map +1 -1
- package/dist/components/ui/table.js +9 -9
- package/dist/components/ui/table.js.map +1 -1
- package/dist/components/ui/table_module.css.map +1 -1
- package/dist/components/ui/tabs.js +3 -3
- package/dist/components/ui/tabs.js.map +1 -1
- package/dist/components/ui/tabs_module.css.map +1 -1
- package/dist/components/ui/textarea.js +2 -2
- package/dist/components/ui/textarea.js.map +1 -1
- package/dist/components/ui/textarea_module.css.map +1 -1
- package/dist/components/ui/timeline.js +5 -5
- package/dist/components/ui/timeline.js.map +1 -1
- package/dist/components/ui/timeline_module.css.map +1 -1
- package/dist/components/ui/{sonner.d.ts → toast.d.ts} +10 -2
- package/dist/components/ui/toast.d.ts.map +1 -0
- package/dist/components/ui/{sonner.js → toast.js} +40 -40
- package/dist/components/ui/toast.js.map +1 -0
- package/dist/components/ui/toast.module.js +34 -0
- package/dist/components/ui/toast.module.js.map +1 -0
- package/dist/components/ui/{sonner_module.css → toast_module.css} +35 -35
- package/dist/components/ui/toast_module.css.map +1 -0
- package/dist/components/ui/toggle-group.js +5 -5
- package/dist/components/ui/toggle-group.js.map +1 -1
- package/dist/components/ui/toggle-group_module.css.map +1 -1
- package/dist/components/ui/toggle.js +2 -2
- package/dist/components/ui/toggle.js.map +1 -1
- package/dist/components/ui/toggle_module.css.map +1 -1
- package/dist/components/ui/toolbar.js +6 -6
- package/dist/components/ui/toolbar.js.map +1 -1
- package/dist/components/ui/toolbar_module.css.map +1 -1
- package/dist/components/ui/tooltip.js +4 -4
- package/dist/components/ui/tooltip.js.map +1 -1
- package/dist/components/ui/tooltip_module.css.map +1 -1
- package/dist/components/ui/typewriter.js +4 -4
- package/dist/components/ui/typewriter.js.map +1 -1
- package/dist/components/ui/typewriter_module.css.map +1 -1
- package/dist/components/ui/visually-hidden.js +2 -2
- package/dist/components/ui/visually-hidden.js.map +1 -1
- package/dist/components/ui/visually-hidden_module.css.map +1 -1
- package/dist/hooks/useAnnounce.js +5 -5
- package/dist/hooks/useAnnounce.js.map +1 -1
- package/dist/hooks/useClipboard.js +6 -6
- package/dist/hooks/useClipboard.js.map +1 -1
- package/dist/hooks/useControllableState.js +3 -3
- package/dist/hooks/useControllableState.js.map +1 -1
- package/dist/hooks/useDebounce.js +3 -3
- package/dist/hooks/useDebounce.js.map +1 -1
- package/dist/hooks/useEventCallback.js +4 -4
- package/dist/hooks/useEventCallback.js.map +1 -1
- package/dist/hooks/useFocusManager.js +6 -6
- package/dist/hooks/useFocusManager.js.map +1 -1
- package/dist/hooks/useFocusVisible.js +5 -5
- package/dist/hooks/useFocusVisible.js.map +1 -1
- package/dist/hooks/useId.js +4 -4
- package/dist/hooks/useId.js.map +1 -1
- package/dist/hooks/useIntersectionObserver.js +3 -3
- package/dist/hooks/useIntersectionObserver.js.map +1 -1
- package/dist/hooks/useInterval.js +4 -4
- package/dist/hooks/useInterval.js.map +1 -1
- package/dist/hooks/useLocalStorage.js +4 -4
- package/dist/hooks/useLocalStorage.js.map +1 -1
- package/dist/hooks/useMediaQuery.js +3 -3
- package/dist/hooks/useMediaQuery.js.map +1 -1
- package/dist/hooks/useMergedRefs.js +2 -2
- package/dist/hooks/useMergedRefs.js.map +1 -1
- package/dist/hooks/useOnClickOutside.js +2 -2
- package/dist/hooks/useOnClickOutside.js.map +1 -1
- package/dist/hooks/usePrevious.js +3 -3
- package/dist/hooks/usePrevious.js.map +1 -1
- package/dist/hooks/useThrottle.js +7 -7
- package/dist/hooks/useThrottle.js.map +1 -1
- package/dist/hooks/useTimeout.js +4 -4
- package/dist/hooks/useTimeout.js.map +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/motion/Collapse.js +2 -2
- package/dist/motion/Collapse.js.map +1 -1
- package/dist/motion/Collapse_module.css.map +1 -1
- package/package.json +7 -8
- package/src/components/ui/calendar.tsx +2 -1
- package/src/components/ui/chart.tsx +2 -2
- package/src/components/ui/form.tsx +28 -3
- package/src/components/ui/input-otp.tsx +3 -3
- package/src/components/ui/resizable.tsx +15 -18
- package/src/components/ui/{sonner.module.css → toast.module.css} +1 -1
- package/src/components/ui/{sonner.tsx → toast.tsx} +2 -2
- package/src/index.ts +4 -4
- package/dist/components/ui/sonner.d.ts.map +0 -1
- package/dist/components/ui/sonner.js.map +0 -1
- package/dist/components/ui/sonner.module.js +0 -34
- package/dist/components/ui/sonner.module.js.map +0 -1
- package/dist/components/ui/sonner_module.css.map +0 -1
- package/dist/rslib-runtime.js +0 -39
- package/dist/rslib-runtime.js.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { motion } from "motion/react";
|
|
4
|
-
import { forwardRef, useCallback, useEffect, useImperativeHandle, useRef } from "react";
|
|
5
4
|
import { cn } from "../../lib/utilities.js";
|
|
6
5
|
import hole_background_module from "./hole-background.module.js";
|
|
6
|
+
import * as __rspack_external_react from "react";
|
|
7
7
|
const linear = (progress)=>progress;
|
|
8
8
|
const easeInExpo = (progress)=>0 === progress ? 0 : 2 ** (10 * (progress - 1));
|
|
9
9
|
const createEmptyDisc = ()=>({
|
|
@@ -43,21 +43,21 @@ const createInitialState = ()=>({
|
|
|
43
43
|
particleArea: createEmptyParticleArea(),
|
|
44
44
|
linesCanvas: null
|
|
45
45
|
});
|
|
46
|
-
const HoleBackground = /*#__PURE__*/ forwardRef(({ strokeColor = "#737373", numberOfLines = 50, numberOfDiscs = 50, particleRGBColor = [
|
|
46
|
+
const HoleBackground = /*#__PURE__*/ __rspack_external_react.forwardRef(({ strokeColor = "#737373", numberOfLines = 50, numberOfDiscs = 50, particleRGBColor = [
|
|
47
47
|
255,
|
|
48
48
|
255,
|
|
49
49
|
255
|
|
50
50
|
], className, children, ...props }, ref)=>{
|
|
51
|
-
const canvasRef = useRef(null);
|
|
52
|
-
const animationFrameIdRef = useRef(0);
|
|
53
|
-
const stateRef = useRef(createInitialState());
|
|
54
|
-
useImperativeHandle(ref, ()=>canvasRef.current, []);
|
|
55
|
-
const tweenValue = useCallback((start, end, progress, ease = null)=>{
|
|
51
|
+
const canvasRef = __rspack_external_react.useRef(null);
|
|
52
|
+
const animationFrameIdRef = __rspack_external_react.useRef(0);
|
|
53
|
+
const stateRef = __rspack_external_react.useRef(createInitialState());
|
|
54
|
+
__rspack_external_react.useImperativeHandle(ref, ()=>canvasRef.current, []);
|
|
55
|
+
const tweenValue = __rspack_external_react.useCallback((start, end, progress, ease = null)=>{
|
|
56
56
|
const delta = end - start;
|
|
57
57
|
const easeFunction = "inExpo" === ease ? easeInExpo : linear;
|
|
58
58
|
return start + delta * easeFunction(progress);
|
|
59
59
|
}, []);
|
|
60
|
-
const tweenDisc = useCallback((disc)=>{
|
|
60
|
+
const tweenDisc = __rspack_external_react.useCallback((disc)=>{
|
|
61
61
|
const { startDisc, endDisc } = stateRef.current;
|
|
62
62
|
disc.x = tweenValue(startDisc.x, endDisc.x, disc.p);
|
|
63
63
|
disc.y = tweenValue(startDisc.y, endDisc.y, disc.p, "inExpo");
|
|
@@ -66,7 +66,7 @@ const HoleBackground = /*#__PURE__*/ forwardRef(({ strokeColor = "#737373", numb
|
|
|
66
66
|
}, [
|
|
67
67
|
tweenValue
|
|
68
68
|
]);
|
|
69
|
-
const setSize = useCallback(()=>{
|
|
69
|
+
const setSize = __rspack_external_react.useCallback(()=>{
|
|
70
70
|
const canvas = canvasRef.current;
|
|
71
71
|
if (!canvas) return;
|
|
72
72
|
const rect = canvas.getBoundingClientRect();
|
|
@@ -82,7 +82,7 @@ const HoleBackground = /*#__PURE__*/ forwardRef(({ strokeColor = "#737373", numb
|
|
|
82
82
|
canvas.width = stateRef.current.render.width * stateRef.current.render.dpi;
|
|
83
83
|
canvas.height = stateRef.current.render.height * stateRef.current.render.dpi;
|
|
84
84
|
}, []);
|
|
85
|
-
const setDiscs = useCallback(()=>{
|
|
85
|
+
const setDiscs = __rspack_external_react.useCallback(()=>{
|
|
86
86
|
const { width, height } = stateRef.current.rect;
|
|
87
87
|
stateRef.current.discs = [];
|
|
88
88
|
stateRef.current.startDisc = {
|
|
@@ -135,7 +135,7 @@ const HoleBackground = /*#__PURE__*/ forwardRef(({ strokeColor = "#737373", numb
|
|
|
135
135
|
numberOfDiscs,
|
|
136
136
|
tweenDisc
|
|
137
137
|
]);
|
|
138
|
-
const setLines = useCallback(()=>{
|
|
138
|
+
const setLines = __rspack_external_react.useCallback(()=>{
|
|
139
139
|
const { width, height } = stateRef.current.rect;
|
|
140
140
|
stateRef.current.lines = [];
|
|
141
141
|
const linesAngle = 2 * Math.PI / numberOfLines;
|
|
@@ -179,7 +179,7 @@ const HoleBackground = /*#__PURE__*/ forwardRef(({ strokeColor = "#737373", numb
|
|
|
179
179
|
numberOfLines,
|
|
180
180
|
strokeColor
|
|
181
181
|
]);
|
|
182
|
-
const initParticle = useCallback((start = false)=>{
|
|
182
|
+
const initParticle = __rspack_external_react.useCallback((start = false)=>{
|
|
183
183
|
const { particleArea } = stateRef.current;
|
|
184
184
|
const sx = particleArea.sx + particleArea.sw * Math.random();
|
|
185
185
|
const ex = particleArea.ex + particleArea.ew * Math.random();
|
|
@@ -200,7 +200,7 @@ const HoleBackground = /*#__PURE__*/ forwardRef(({ strokeColor = "#737373", numb
|
|
|
200
200
|
}, [
|
|
201
201
|
particleRGBColor
|
|
202
202
|
]);
|
|
203
|
-
const setParticles = useCallback(()=>{
|
|
203
|
+
const setParticles = __rspack_external_react.useCallback(()=>{
|
|
204
204
|
const { width, height } = stateRef.current.rect;
|
|
205
205
|
stateRef.current.particles = [];
|
|
206
206
|
const { disc } = stateRef.current.clip;
|
|
@@ -215,7 +215,7 @@ const HoleBackground = /*#__PURE__*/ forwardRef(({ strokeColor = "#737373", numb
|
|
|
215
215
|
}, [
|
|
216
216
|
initParticle
|
|
217
217
|
]);
|
|
218
|
-
const drawDiscs = useCallback((context)=>{
|
|
218
|
+
const drawDiscs = __rspack_external_react.useCallback((context)=>{
|
|
219
219
|
context.strokeStyle = strokeColor;
|
|
220
220
|
context.lineWidth = 2;
|
|
221
221
|
const outerDisc = stateRef.current.startDisc;
|
|
@@ -239,10 +239,10 @@ const HoleBackground = /*#__PURE__*/ forwardRef(({ strokeColor = "#737373", numb
|
|
|
239
239
|
}, [
|
|
240
240
|
strokeColor
|
|
241
241
|
]);
|
|
242
|
-
const drawLines = useCallback((context)=>{
|
|
242
|
+
const drawLines = __rspack_external_react.useCallback((context)=>{
|
|
243
243
|
if (stateRef.current.linesCanvas) context.drawImage(stateRef.current.linesCanvas, 0, 0);
|
|
244
244
|
}, []);
|
|
245
|
-
const drawParticles = useCallback((context)=>{
|
|
245
|
+
const drawParticles = __rspack_external_react.useCallback((context)=>{
|
|
246
246
|
const clipPath = stateRef.current.clip.path;
|
|
247
247
|
if (!clipPath) return;
|
|
248
248
|
context.save();
|
|
@@ -256,7 +256,7 @@ const HoleBackground = /*#__PURE__*/ forwardRef(({ strokeColor = "#737373", numb
|
|
|
256
256
|
});
|
|
257
257
|
context.restore();
|
|
258
258
|
}, []);
|
|
259
|
-
const moveDiscs = useCallback(()=>{
|
|
259
|
+
const moveDiscs = __rspack_external_react.useCallback(()=>{
|
|
260
260
|
stateRef.current.discs.forEach((disc)=>{
|
|
261
261
|
disc.p = (disc.p + 0.001) % 1;
|
|
262
262
|
tweenDisc(disc);
|
|
@@ -264,7 +264,7 @@ const HoleBackground = /*#__PURE__*/ forwardRef(({ strokeColor = "#737373", numb
|
|
|
264
264
|
}, [
|
|
265
265
|
tweenDisc
|
|
266
266
|
]);
|
|
267
|
-
const moveParticles = useCallback(()=>{
|
|
267
|
+
const moveParticles = __rspack_external_react.useCallback(()=>{
|
|
268
268
|
stateRef.current.particles.forEach((particle, index)=>{
|
|
269
269
|
particle.p = 1 - particle.y / Math.max(stateRef.current.particleArea.h, 1);
|
|
270
270
|
particle.x = particle.sx + particle.dx * particle.p;
|
|
@@ -274,7 +274,7 @@ const HoleBackground = /*#__PURE__*/ forwardRef(({ strokeColor = "#737373", numb
|
|
|
274
274
|
}, [
|
|
275
275
|
initParticle
|
|
276
276
|
]);
|
|
277
|
-
const tick = useCallback(()=>{
|
|
277
|
+
const tick = __rspack_external_react.useCallback(()=>{
|
|
278
278
|
const canvas = canvasRef.current;
|
|
279
279
|
if (!canvas) return;
|
|
280
280
|
const context = canvas.getContext("2d");
|
|
@@ -296,7 +296,7 @@ const HoleBackground = /*#__PURE__*/ forwardRef(({ strokeColor = "#737373", numb
|
|
|
296
296
|
moveDiscs,
|
|
297
297
|
moveParticles
|
|
298
298
|
]);
|
|
299
|
-
const init = useCallback(()=>{
|
|
299
|
+
const init = __rspack_external_react.useCallback(()=>{
|
|
300
300
|
setSize();
|
|
301
301
|
setDiscs();
|
|
302
302
|
setLines();
|
|
@@ -307,7 +307,7 @@ const HoleBackground = /*#__PURE__*/ forwardRef(({ strokeColor = "#737373", numb
|
|
|
307
307
|
setParticles,
|
|
308
308
|
setSize
|
|
309
309
|
]);
|
|
310
|
-
useEffect(()=>{
|
|
310
|
+
__rspack_external_react.useEffect(()=>{
|
|
311
311
|
const canvas = canvasRef.current;
|
|
312
312
|
if (!canvas) return;
|
|
313
313
|
init();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/ui/hole-background.js","sources":["../../../src/components/ui/hole-background.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {motion} from \"motion/react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./hole-background.module.css\";\r\n\r\n/** Props accepted by {@link HoleBackground}. */\r\nexport interface HoleBackgroundProps extends React.HTMLAttributes<HTMLCanvasElement> {\r\n /** Stroke color used for the wireframe discs and line work. @default \"#737373\" */\r\n strokeColor?: string;\r\n /** Number of radial line groups drawn through the tunnel. @default 50 */\r\n numberOfLines?: number;\r\n /** Number of animated discs used to build the tunnel depth effect. @default 50 */\r\n numberOfDiscs?: number;\r\n /** RGB tuple used to tint the floating particle field. @default [255, 255, 255] */\r\n particleRGBColor?: [number, number, number];\r\n}\r\n\r\ninterface Disc {\r\n p: number;\r\n x: number;\r\n y: number;\r\n w: number;\r\n h: number;\r\n}\r\n\r\ninterface Point {\r\n x: number;\r\n y: number;\r\n}\r\n\r\ninterface Particle {\r\n x: number;\r\n sx: number;\r\n dx: number;\r\n y: number;\r\n vy: number;\r\n p: number;\r\n r: number;\r\n c: string;\r\n}\r\n\r\ninterface ClipState {\r\n disc: Disc;\r\n i: number;\r\n path: Path2D | null;\r\n}\r\n\r\ninterface RectState {\r\n width: number;\r\n height: number;\r\n}\r\n\r\ninterface RenderState {\r\n width: number;\r\n height: number;\r\n dpi: number;\r\n}\r\n\r\ninterface ParticleArea {\r\n sx: number;\r\n sw: number;\r\n ex: number;\r\n ew: number;\r\n h: number;\r\n}\r\n\r\ninterface HoleState {\r\n discs: Array<Disc>;\r\n lines: Array<Array<Point>>;\r\n particles: Array<Particle>;\r\n clip: ClipState;\r\n startDisc: Disc;\r\n endDisc: Disc;\r\n rect: RectState;\r\n render: RenderState;\r\n particleArea: ParticleArea;\r\n linesCanvas: HTMLCanvasElement | null;\r\n}\r\n\r\nconst linear = (progress: number): number => progress;\r\nconst easeInExpo = (progress: number): number => (progress === 0 ? 0 : 2 ** (10 * (progress - 1)));\r\n\r\nconst createEmptyDisc = (): Disc => ({p: 0, x: 0, y: 0, w: 0, h: 0});\r\nconst createEmptyParticleArea = (): ParticleArea => ({sx: 0, sw: 0, ex: 0, ew: 0, h: 0});\r\nconst createInitialState = (): HoleState => ({\r\n discs: [],\r\n lines: [],\r\n particles: [],\r\n clip: {disc: createEmptyDisc(), i: 0, path: null},\r\n startDisc: createEmptyDisc(),\r\n endDisc: createEmptyDisc(),\r\n rect: {width: 0, height: 0},\r\n render: {width: 0, height: 0, dpi: 1},\r\n particleArea: createEmptyParticleArea(),\r\n linesCanvas: null,\r\n});\r\n\r\n/**\r\n * Renders a vortex-style tunnel animation with discs, scanlines, and particles.\r\n *\r\n * @remarks\r\n * - Animated component using the `motion` library\r\n * - Renders a `<div>` element containing a `<canvas>`\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n * - Client-side only (`\"use client\"` directive)\r\n *\r\n * @example\r\n * ```tsx\r\n * <HoleBackground />\r\n * ```\r\n *\r\n * @see {@link HoleBackgroundProps} for available props\r\n */\r\nconst HoleBackground = React.forwardRef<HTMLCanvasElement, HoleBackgroundProps>(\r\n (\r\n {strokeColor = \"#737373\", numberOfLines = 50, numberOfDiscs = 50, particleRGBColor = [255, 255, 255], className, children, ...props},\r\n ref,\r\n ) => {\r\n const canvasRef = React.useRef<HTMLCanvasElement>(null);\r\n const animationFrameIdRef = React.useRef(0);\r\n const stateRef = React.useRef<HoleState>(createInitialState());\r\n\r\n React.useImperativeHandle(ref, () => canvasRef.current!, []);\r\n\r\n const tweenValue = React.useCallback((start: number, end: number, progress: number, ease: \"inExpo\" | null = null): number => {\r\n const delta = end - start;\r\n const easeFunction = ease === \"inExpo\" ? easeInExpo : linear;\r\n return start + delta * easeFunction(progress);\r\n }, []);\r\n\r\n const tweenDisc = React.useCallback(\r\n (disc: Disc): void => {\r\n const {startDisc, endDisc} = stateRef.current;\r\n disc.x = tweenValue(startDisc.x, endDisc.x, disc.p);\r\n disc.y = tweenValue(startDisc.y, endDisc.y, disc.p, \"inExpo\");\r\n disc.w = tweenValue(startDisc.w, endDisc.w, disc.p);\r\n disc.h = tweenValue(startDisc.h, endDisc.h, disc.p);\r\n },\r\n [tweenValue],\r\n );\r\n\r\n const setSize = React.useCallback((): void => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) {\r\n return;\r\n }\r\n\r\n const rect = canvas.getBoundingClientRect();\r\n stateRef.current.rect = {width: rect.width, height: rect.height};\r\n stateRef.current.render = {\r\n width: rect.width,\r\n height: rect.height,\r\n dpi: globalThis.window.devicePixelRatio || 1,\r\n };\r\n canvas.width = stateRef.current.render.width * stateRef.current.render.dpi;\r\n canvas.height = stateRef.current.render.height * stateRef.current.render.dpi;\r\n }, []);\r\n\r\n const setDiscs = React.useCallback((): void => {\r\n const {width, height} = stateRef.current.rect;\r\n stateRef.current.discs = [];\r\n stateRef.current.startDisc = {\r\n x: width * 0.5,\r\n y: height * 0.45,\r\n w: width * 0.75,\r\n h: height * 0.7,\r\n p: 0,\r\n };\r\n stateRef.current.endDisc = {\r\n x: width * 0.5,\r\n y: height * 0.95,\r\n w: 0,\r\n h: 0,\r\n p: 0,\r\n };\r\n\r\n let previousBottom = height;\r\n stateRef.current.clip = {disc: createEmptyDisc(), i: 0, path: null};\r\n\r\n for (let index = 0; index < numberOfDiscs; index += 1) {\r\n const progress = index / numberOfDiscs;\r\n const disc: Disc = {p: progress, x: 0, y: 0, w: 0, h: 0};\r\n tweenDisc(disc);\r\n const bottom = disc.y + disc.h;\r\n if (bottom <= previousBottom) {\r\n stateRef.current.clip = {disc: {...disc}, i: index, path: null};\r\n }\r\n previousBottom = bottom;\r\n stateRef.current.discs.push(disc);\r\n }\r\n\r\n const clipPath = new globalThis.Path2D();\r\n const {disc} = stateRef.current.clip;\r\n clipPath.ellipse(disc.x, disc.y, disc.w, disc.h, 0, 0, Math.PI * 2);\r\n clipPath.rect(disc.x - disc.w, 0, disc.w * 2, disc.y);\r\n stateRef.current.clip.path = clipPath;\r\n }, [numberOfDiscs, tweenDisc]);\r\n\r\n const setLines = React.useCallback((): void => {\r\n const {width, height} = stateRef.current.rect;\r\n stateRef.current.lines = [];\r\n const linesAngle = (Math.PI * 2) / numberOfLines;\r\n for (let index = 0; index < numberOfLines; index += 1) {\r\n stateRef.current.lines.push([]);\r\n }\r\n\r\n stateRef.current.discs.forEach((disc) => {\r\n for (let index = 0; index < numberOfLines; index += 1) {\r\n const angle = index * linesAngle;\r\n const point: Point = {\r\n x: disc.x + Math.cos(angle) * disc.w,\r\n y: disc.y + Math.sin(angle) * disc.h,\r\n };\r\n stateRef.current.lines[index]!.push(point);\r\n }\r\n });\r\n\r\n const offCanvas = globalThis.document.createElement(\"canvas\");\r\n offCanvas.width = width;\r\n offCanvas.height = height;\r\n const context = offCanvas.getContext(\"2d\");\r\n const clipPath = stateRef.current.clip.path;\r\n if (!context || !clipPath) {\r\n return;\r\n }\r\n\r\n stateRef.current.lines.forEach((line) => {\r\n context.save();\r\n let lineIsIn = false;\r\n line.forEach((point, lineIndex) => {\r\n if (lineIndex === 0) {\r\n return;\r\n }\r\n\r\n const previousPoint = line[lineIndex - 1]!;\r\n if (!lineIsIn && (context.isPointInPath(clipPath, point.x, point.y) || context.isPointInStroke(clipPath, point.x, point.y))) {\r\n lineIsIn = true;\r\n } else if (lineIsIn) {\r\n context.clip(clipPath);\r\n }\r\n\r\n context.beginPath();\r\n context.moveTo(previousPoint.x, previousPoint.y);\r\n context.lineTo(point.x, point.y);\r\n context.strokeStyle = strokeColor;\r\n context.lineWidth = 2;\r\n context.stroke();\r\n context.closePath();\r\n });\r\n context.restore();\r\n });\r\n\r\n stateRef.current.linesCanvas = offCanvas;\r\n }, [numberOfLines, strokeColor]);\r\n\r\n const initParticle = React.useCallback(\r\n (start = false): Particle => {\r\n const {particleArea} = stateRef.current;\r\n const sx = particleArea.sx + particleArea.sw * Math.random();\r\n const ex = particleArea.ex + particleArea.ew * Math.random();\r\n const dx = ex - sx;\r\n const y = start ? particleArea.h * Math.random() : particleArea.h;\r\n const radius = 0.5 + Math.random() * 4;\r\n const vy = 0.5 + Math.random();\r\n\r\n return {\r\n x: sx,\r\n sx,\r\n dx,\r\n y,\r\n vy,\r\n p: 0,\r\n r: radius,\r\n c: `rgba(${particleRGBColor[0]}, ${particleRGBColor[1]}, ${particleRGBColor[2]}, ${Math.random()})`,\r\n };\r\n },\r\n [particleRGBColor],\r\n );\r\n\r\n const setParticles = React.useCallback((): void => {\r\n const {width, height} = stateRef.current.rect;\r\n stateRef.current.particles = [];\r\n const {disc} = stateRef.current.clip;\r\n stateRef.current.particleArea = {\r\n sx: (width - disc.w * 0.5) / 2,\r\n sw: disc.w * 0.5,\r\n ex: (width - disc.w * 2) / 2,\r\n ew: disc.w * 2,\r\n h: height * 0.85,\r\n };\r\n\r\n for (let index = 0; index < 100; index += 1) {\r\n stateRef.current.particles.push(initParticle(true));\r\n }\r\n }, [initParticle]);\r\n\r\n const drawDiscs = React.useCallback(\r\n (context: CanvasRenderingContext2D): void => {\r\n context.strokeStyle = strokeColor;\r\n context.lineWidth = 2;\r\n const outerDisc = stateRef.current.startDisc;\r\n context.beginPath();\r\n context.ellipse(outerDisc.x, outerDisc.y, outerDisc.w, outerDisc.h, 0, 0, Math.PI * 2);\r\n context.stroke();\r\n context.closePath();\r\n\r\n const clipPath = stateRef.current.clip.path;\r\n stateRef.current.discs.forEach((disc, index) => {\r\n if (index % 5 !== 0) {\r\n return;\r\n }\r\n\r\n if (clipPath && disc.w < stateRef.current.clip.disc.w - 5) {\r\n context.save();\r\n context.clip(clipPath);\r\n }\r\n\r\n context.beginPath();\r\n context.ellipse(disc.x, disc.y, disc.w, disc.h, 0, 0, Math.PI * 2);\r\n context.stroke();\r\n context.closePath();\r\n\r\n if (clipPath && disc.w < stateRef.current.clip.disc.w - 5) {\r\n context.restore();\r\n }\r\n });\r\n },\r\n [strokeColor],\r\n );\r\n\r\n const drawLines = React.useCallback((context: CanvasRenderingContext2D): void => {\r\n if (stateRef.current.linesCanvas) {\r\n context.drawImage(stateRef.current.linesCanvas, 0, 0);\r\n }\r\n }, []);\r\n\r\n const drawParticles = React.useCallback((context: CanvasRenderingContext2D): void => {\r\n const clipPath = stateRef.current.clip.path;\r\n if (!clipPath) {\r\n return;\r\n }\r\n\r\n context.save();\r\n context.clip(clipPath);\r\n stateRef.current.particles.forEach((particle) => {\r\n context.fillStyle = particle.c;\r\n context.beginPath();\r\n context.rect(particle.x, particle.y, particle.r, particle.r);\r\n context.closePath();\r\n context.fill();\r\n });\r\n context.restore();\r\n }, []);\r\n\r\n const moveDiscs = React.useCallback((): void => {\r\n stateRef.current.discs.forEach((disc) => {\r\n disc.p = (disc.p + 0.001) % 1;\r\n tweenDisc(disc);\r\n });\r\n }, [tweenDisc]);\r\n\r\n const moveParticles = React.useCallback((): void => {\r\n stateRef.current.particles.forEach((particle, index) => {\r\n particle.p = 1 - particle.y / Math.max(stateRef.current.particleArea.h, 1);\r\n particle.x = particle.sx + particle.dx * particle.p;\r\n particle.y -= particle.vy;\r\n if (particle.y < 0) {\r\n stateRef.current.particles[index] = initParticle();\r\n }\r\n });\r\n }, [initParticle]);\r\n\r\n const tick = React.useCallback((): void => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) {\r\n return;\r\n }\r\n\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n return;\r\n }\r\n\r\n context.clearRect(0, 0, canvas.width, canvas.height);\r\n context.save();\r\n context.scale(stateRef.current.render.dpi, stateRef.current.render.dpi);\r\n moveDiscs();\r\n moveParticles();\r\n drawDiscs(context);\r\n drawLines(context);\r\n drawParticles(context);\r\n context.restore();\r\n animationFrameIdRef.current = globalThis.requestAnimationFrame(tick);\r\n }, [drawDiscs, drawLines, drawParticles, moveDiscs, moveParticles]);\r\n\r\n const init = React.useCallback((): void => {\r\n setSize();\r\n setDiscs();\r\n setLines();\r\n setParticles();\r\n }, [setDiscs, setLines, setParticles, setSize]);\r\n\r\n React.useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) {\r\n return;\r\n }\r\n\r\n init();\r\n tick();\r\n\r\n const handleResize = (): void => {\r\n setSize();\r\n setDiscs();\r\n setLines();\r\n setParticles();\r\n };\r\n\r\n globalThis.window.addEventListener(\"resize\", handleResize);\r\n return () => {\r\n globalThis.window.removeEventListener(\"resize\", handleResize);\r\n globalThis.cancelAnimationFrame(animationFrameIdRef.current);\r\n };\r\n }, [init, setDiscs, setLines, setParticles, setSize, tick]);\r\n\r\n return (\r\n <div className={cn(styles.root, className)}>\r\n {children}\r\n <canvas\r\n ref={canvasRef}\r\n className={styles.canvas}\r\n {...props}\r\n />\r\n <motion.div\r\n aria-hidden='true'\r\n className={styles.glow}\r\n animate={{backgroundPosition: \"0% 300%\"}}\r\n transition={{duration: 5, ease: \"linear\", repeat: Infinity}}\r\n />\r\n <div\r\n aria-hidden='true'\r\n className={styles.scanlines}\r\n />\r\n </div>\r\n );\r\n },\r\n);\r\n\r\nHoleBackground.displayName = \"HoleBackground\";\r\n\r\nexport {HoleBackground};\r\n"],"names":["linear","progress","easeInExpo","createEmptyDisc","createEmptyParticleArea","createInitialState","HoleBackground","React","strokeColor","numberOfLines","numberOfDiscs","particleRGBColor","className","children","props","ref","canvasRef","animationFrameIdRef","stateRef","tweenValue","start","end","ease","delta","easeFunction","tweenDisc","disc","startDisc","endDisc","setSize","canvas","rect","globalThis","setDiscs","width","height","previousBottom","index","bottom","clipPath","Math","setLines","linesAngle","angle","point","offCanvas","context","line","lineIsIn","lineIndex","previousPoint","initParticle","particleArea","sx","ex","dx","y","radius","vy","setParticles","drawDiscs","outerDisc","drawLines","drawParticles","particle","moveDiscs","moveParticles","tick","init","handleResize","cn","styles","motion","Infinity"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"components/ui/hole-background.js","sources":["../../../src/components/ui/hole-background.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {motion} from \"motion/react\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./hole-background.module.css\";\r\n\r\n/** Props accepted by {@link HoleBackground}. */\r\nexport interface HoleBackgroundProps extends React.HTMLAttributes<HTMLCanvasElement> {\r\n /** Stroke color used for the wireframe discs and line work. @default \"#737373\" */\r\n strokeColor?: string;\r\n /** Number of radial line groups drawn through the tunnel. @default 50 */\r\n numberOfLines?: number;\r\n /** Number of animated discs used to build the tunnel depth effect. @default 50 */\r\n numberOfDiscs?: number;\r\n /** RGB tuple used to tint the floating particle field. @default [255, 255, 255] */\r\n particleRGBColor?: [number, number, number];\r\n}\r\n\r\ninterface Disc {\r\n p: number;\r\n x: number;\r\n y: number;\r\n w: number;\r\n h: number;\r\n}\r\n\r\ninterface Point {\r\n x: number;\r\n y: number;\r\n}\r\n\r\ninterface Particle {\r\n x: number;\r\n sx: number;\r\n dx: number;\r\n y: number;\r\n vy: number;\r\n p: number;\r\n r: number;\r\n c: string;\r\n}\r\n\r\ninterface ClipState {\r\n disc: Disc;\r\n i: number;\r\n path: Path2D | null;\r\n}\r\n\r\ninterface RectState {\r\n width: number;\r\n height: number;\r\n}\r\n\r\ninterface RenderState {\r\n width: number;\r\n height: number;\r\n dpi: number;\r\n}\r\n\r\ninterface ParticleArea {\r\n sx: number;\r\n sw: number;\r\n ex: number;\r\n ew: number;\r\n h: number;\r\n}\r\n\r\ninterface HoleState {\r\n discs: Array<Disc>;\r\n lines: Array<Array<Point>>;\r\n particles: Array<Particle>;\r\n clip: ClipState;\r\n startDisc: Disc;\r\n endDisc: Disc;\r\n rect: RectState;\r\n render: RenderState;\r\n particleArea: ParticleArea;\r\n linesCanvas: HTMLCanvasElement | null;\r\n}\r\n\r\nconst linear = (progress: number): number => progress;\r\nconst easeInExpo = (progress: number): number => (progress === 0 ? 0 : 2 ** (10 * (progress - 1)));\r\n\r\nconst createEmptyDisc = (): Disc => ({p: 0, x: 0, y: 0, w: 0, h: 0});\r\nconst createEmptyParticleArea = (): ParticleArea => ({sx: 0, sw: 0, ex: 0, ew: 0, h: 0});\r\nconst createInitialState = (): HoleState => ({\r\n discs: [],\r\n lines: [],\r\n particles: [],\r\n clip: {disc: createEmptyDisc(), i: 0, path: null},\r\n startDisc: createEmptyDisc(),\r\n endDisc: createEmptyDisc(),\r\n rect: {width: 0, height: 0},\r\n render: {width: 0, height: 0, dpi: 1},\r\n particleArea: createEmptyParticleArea(),\r\n linesCanvas: null,\r\n});\r\n\r\n/**\r\n * Renders a vortex-style tunnel animation with discs, scanlines, and particles.\r\n *\r\n * @remarks\r\n * - Animated component using the `motion` library\r\n * - Renders a `<div>` element containing a `<canvas>`\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n * - Client-side only (`\"use client\"` directive)\r\n *\r\n * @example\r\n * ```tsx\r\n * <HoleBackground />\r\n * ```\r\n *\r\n * @see {@link HoleBackgroundProps} for available props\r\n */\r\nconst HoleBackground = React.forwardRef<HTMLCanvasElement, HoleBackgroundProps>(\r\n (\r\n {strokeColor = \"#737373\", numberOfLines = 50, numberOfDiscs = 50, particleRGBColor = [255, 255, 255], className, children, ...props},\r\n ref,\r\n ) => {\r\n const canvasRef = React.useRef<HTMLCanvasElement>(null);\r\n const animationFrameIdRef = React.useRef(0);\r\n const stateRef = React.useRef<HoleState>(createInitialState());\r\n\r\n React.useImperativeHandle(ref, () => canvasRef.current!, []);\r\n\r\n const tweenValue = React.useCallback((start: number, end: number, progress: number, ease: \"inExpo\" | null = null): number => {\r\n const delta = end - start;\r\n const easeFunction = ease === \"inExpo\" ? easeInExpo : linear;\r\n return start + delta * easeFunction(progress);\r\n }, []);\r\n\r\n const tweenDisc = React.useCallback(\r\n (disc: Disc): void => {\r\n const {startDisc, endDisc} = stateRef.current;\r\n disc.x = tweenValue(startDisc.x, endDisc.x, disc.p);\r\n disc.y = tweenValue(startDisc.y, endDisc.y, disc.p, \"inExpo\");\r\n disc.w = tweenValue(startDisc.w, endDisc.w, disc.p);\r\n disc.h = tweenValue(startDisc.h, endDisc.h, disc.p);\r\n },\r\n [tweenValue],\r\n );\r\n\r\n const setSize = React.useCallback((): void => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) {\r\n return;\r\n }\r\n\r\n const rect = canvas.getBoundingClientRect();\r\n stateRef.current.rect = {width: rect.width, height: rect.height};\r\n stateRef.current.render = {\r\n width: rect.width,\r\n height: rect.height,\r\n dpi: globalThis.window.devicePixelRatio || 1,\r\n };\r\n canvas.width = stateRef.current.render.width * stateRef.current.render.dpi;\r\n canvas.height = stateRef.current.render.height * stateRef.current.render.dpi;\r\n }, []);\r\n\r\n const setDiscs = React.useCallback((): void => {\r\n const {width, height} = stateRef.current.rect;\r\n stateRef.current.discs = [];\r\n stateRef.current.startDisc = {\r\n x: width * 0.5,\r\n y: height * 0.45,\r\n w: width * 0.75,\r\n h: height * 0.7,\r\n p: 0,\r\n };\r\n stateRef.current.endDisc = {\r\n x: width * 0.5,\r\n y: height * 0.95,\r\n w: 0,\r\n h: 0,\r\n p: 0,\r\n };\r\n\r\n let previousBottom = height;\r\n stateRef.current.clip = {disc: createEmptyDisc(), i: 0, path: null};\r\n\r\n for (let index = 0; index < numberOfDiscs; index += 1) {\r\n const progress = index / numberOfDiscs;\r\n const disc: Disc = {p: progress, x: 0, y: 0, w: 0, h: 0};\r\n tweenDisc(disc);\r\n const bottom = disc.y + disc.h;\r\n if (bottom <= previousBottom) {\r\n stateRef.current.clip = {disc: {...disc}, i: index, path: null};\r\n }\r\n previousBottom = bottom;\r\n stateRef.current.discs.push(disc);\r\n }\r\n\r\n const clipPath = new globalThis.Path2D();\r\n const {disc} = stateRef.current.clip;\r\n clipPath.ellipse(disc.x, disc.y, disc.w, disc.h, 0, 0, Math.PI * 2);\r\n clipPath.rect(disc.x - disc.w, 0, disc.w * 2, disc.y);\r\n stateRef.current.clip.path = clipPath;\r\n }, [numberOfDiscs, tweenDisc]);\r\n\r\n const setLines = React.useCallback((): void => {\r\n const {width, height} = stateRef.current.rect;\r\n stateRef.current.lines = [];\r\n const linesAngle = (Math.PI * 2) / numberOfLines;\r\n for (let index = 0; index < numberOfLines; index += 1) {\r\n stateRef.current.lines.push([]);\r\n }\r\n\r\n stateRef.current.discs.forEach((disc) => {\r\n for (let index = 0; index < numberOfLines; index += 1) {\r\n const angle = index * linesAngle;\r\n const point: Point = {\r\n x: disc.x + Math.cos(angle) * disc.w,\r\n y: disc.y + Math.sin(angle) * disc.h,\r\n };\r\n stateRef.current.lines[index]!.push(point);\r\n }\r\n });\r\n\r\n const offCanvas = globalThis.document.createElement(\"canvas\");\r\n offCanvas.width = width;\r\n offCanvas.height = height;\r\n const context = offCanvas.getContext(\"2d\");\r\n const clipPath = stateRef.current.clip.path;\r\n if (!context || !clipPath) {\r\n return;\r\n }\r\n\r\n stateRef.current.lines.forEach((line) => {\r\n context.save();\r\n let lineIsIn = false;\r\n line.forEach((point, lineIndex) => {\r\n if (lineIndex === 0) {\r\n return;\r\n }\r\n\r\n const previousPoint = line[lineIndex - 1]!;\r\n if (!lineIsIn && (context.isPointInPath(clipPath, point.x, point.y) || context.isPointInStroke(clipPath, point.x, point.y))) {\r\n lineIsIn = true;\r\n } else if (lineIsIn) {\r\n context.clip(clipPath);\r\n }\r\n\r\n context.beginPath();\r\n context.moveTo(previousPoint.x, previousPoint.y);\r\n context.lineTo(point.x, point.y);\r\n context.strokeStyle = strokeColor;\r\n context.lineWidth = 2;\r\n context.stroke();\r\n context.closePath();\r\n });\r\n context.restore();\r\n });\r\n\r\n stateRef.current.linesCanvas = offCanvas;\r\n }, [numberOfLines, strokeColor]);\r\n\r\n const initParticle = React.useCallback(\r\n (start = false): Particle => {\r\n const {particleArea} = stateRef.current;\r\n const sx = particleArea.sx + particleArea.sw * Math.random();\r\n const ex = particleArea.ex + particleArea.ew * Math.random();\r\n const dx = ex - sx;\r\n const y = start ? particleArea.h * Math.random() : particleArea.h;\r\n const radius = 0.5 + Math.random() * 4;\r\n const vy = 0.5 + Math.random();\r\n\r\n return {\r\n x: sx,\r\n sx,\r\n dx,\r\n y,\r\n vy,\r\n p: 0,\r\n r: radius,\r\n c: `rgba(${particleRGBColor[0]}, ${particleRGBColor[1]}, ${particleRGBColor[2]}, ${Math.random()})`,\r\n };\r\n },\r\n [particleRGBColor],\r\n );\r\n\r\n const setParticles = React.useCallback((): void => {\r\n const {width, height} = stateRef.current.rect;\r\n stateRef.current.particles = [];\r\n const {disc} = stateRef.current.clip;\r\n stateRef.current.particleArea = {\r\n sx: (width - disc.w * 0.5) / 2,\r\n sw: disc.w * 0.5,\r\n ex: (width - disc.w * 2) / 2,\r\n ew: disc.w * 2,\r\n h: height * 0.85,\r\n };\r\n\r\n for (let index = 0; index < 100; index += 1) {\r\n stateRef.current.particles.push(initParticle(true));\r\n }\r\n }, [initParticle]);\r\n\r\n const drawDiscs = React.useCallback(\r\n (context: CanvasRenderingContext2D): void => {\r\n context.strokeStyle = strokeColor;\r\n context.lineWidth = 2;\r\n const outerDisc = stateRef.current.startDisc;\r\n context.beginPath();\r\n context.ellipse(outerDisc.x, outerDisc.y, outerDisc.w, outerDisc.h, 0, 0, Math.PI * 2);\r\n context.stroke();\r\n context.closePath();\r\n\r\n const clipPath = stateRef.current.clip.path;\r\n stateRef.current.discs.forEach((disc, index) => {\r\n if (index % 5 !== 0) {\r\n return;\r\n }\r\n\r\n if (clipPath && disc.w < stateRef.current.clip.disc.w - 5) {\r\n context.save();\r\n context.clip(clipPath);\r\n }\r\n\r\n context.beginPath();\r\n context.ellipse(disc.x, disc.y, disc.w, disc.h, 0, 0, Math.PI * 2);\r\n context.stroke();\r\n context.closePath();\r\n\r\n if (clipPath && disc.w < stateRef.current.clip.disc.w - 5) {\r\n context.restore();\r\n }\r\n });\r\n },\r\n [strokeColor],\r\n );\r\n\r\n const drawLines = React.useCallback((context: CanvasRenderingContext2D): void => {\r\n if (stateRef.current.linesCanvas) {\r\n context.drawImage(stateRef.current.linesCanvas, 0, 0);\r\n }\r\n }, []);\r\n\r\n const drawParticles = React.useCallback((context: CanvasRenderingContext2D): void => {\r\n const clipPath = stateRef.current.clip.path;\r\n if (!clipPath) {\r\n return;\r\n }\r\n\r\n context.save();\r\n context.clip(clipPath);\r\n stateRef.current.particles.forEach((particle) => {\r\n context.fillStyle = particle.c;\r\n context.beginPath();\r\n context.rect(particle.x, particle.y, particle.r, particle.r);\r\n context.closePath();\r\n context.fill();\r\n });\r\n context.restore();\r\n }, []);\r\n\r\n const moveDiscs = React.useCallback((): void => {\r\n stateRef.current.discs.forEach((disc) => {\r\n disc.p = (disc.p + 0.001) % 1;\r\n tweenDisc(disc);\r\n });\r\n }, [tweenDisc]);\r\n\r\n const moveParticles = React.useCallback((): void => {\r\n stateRef.current.particles.forEach((particle, index) => {\r\n particle.p = 1 - particle.y / Math.max(stateRef.current.particleArea.h, 1);\r\n particle.x = particle.sx + particle.dx * particle.p;\r\n particle.y -= particle.vy;\r\n if (particle.y < 0) {\r\n stateRef.current.particles[index] = initParticle();\r\n }\r\n });\r\n }, [initParticle]);\r\n\r\n const tick = React.useCallback((): void => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) {\r\n return;\r\n }\r\n\r\n const context = canvas.getContext(\"2d\");\r\n if (!context) {\r\n return;\r\n }\r\n\r\n context.clearRect(0, 0, canvas.width, canvas.height);\r\n context.save();\r\n context.scale(stateRef.current.render.dpi, stateRef.current.render.dpi);\r\n moveDiscs();\r\n moveParticles();\r\n drawDiscs(context);\r\n drawLines(context);\r\n drawParticles(context);\r\n context.restore();\r\n animationFrameIdRef.current = globalThis.requestAnimationFrame(tick);\r\n }, [drawDiscs, drawLines, drawParticles, moveDiscs, moveParticles]);\r\n\r\n const init = React.useCallback((): void => {\r\n setSize();\r\n setDiscs();\r\n setLines();\r\n setParticles();\r\n }, [setDiscs, setLines, setParticles, setSize]);\r\n\r\n React.useEffect(() => {\r\n const canvas = canvasRef.current;\r\n if (!canvas) {\r\n return;\r\n }\r\n\r\n init();\r\n tick();\r\n\r\n const handleResize = (): void => {\r\n setSize();\r\n setDiscs();\r\n setLines();\r\n setParticles();\r\n };\r\n\r\n globalThis.window.addEventListener(\"resize\", handleResize);\r\n return () => {\r\n globalThis.window.removeEventListener(\"resize\", handleResize);\r\n globalThis.cancelAnimationFrame(animationFrameIdRef.current);\r\n };\r\n }, [init, setDiscs, setLines, setParticles, setSize, tick]);\r\n\r\n return (\r\n <div className={cn(styles.root, className)}>\r\n {children}\r\n <canvas\r\n ref={canvasRef}\r\n className={styles.canvas}\r\n {...props}\r\n />\r\n <motion.div\r\n aria-hidden='true'\r\n className={styles.glow}\r\n animate={{backgroundPosition: \"0% 300%\"}}\r\n transition={{duration: 5, ease: \"linear\", repeat: Infinity}}\r\n />\r\n <div\r\n aria-hidden='true'\r\n className={styles.scanlines}\r\n />\r\n </div>\r\n );\r\n },\r\n);\r\n\r\nHoleBackground.displayName = \"HoleBackground\";\r\n\r\nexport {HoleBackground};\r\n"],"names":["linear","progress","easeInExpo","createEmptyDisc","createEmptyParticleArea","createInitialState","HoleBackground","React","strokeColor","numberOfLines","numberOfDiscs","particleRGBColor","className","children","props","ref","canvasRef","animationFrameIdRef","stateRef","tweenValue","start","end","ease","delta","easeFunction","tweenDisc","disc","startDisc","endDisc","setSize","canvas","rect","globalThis","setDiscs","width","height","previousBottom","index","bottom","clipPath","Math","setLines","linesAngle","angle","point","offCanvas","context","line","lineIsIn","lineIndex","previousPoint","initParticle","particleArea","sx","ex","dx","y","radius","vy","setParticles","drawDiscs","outerDisc","drawLines","drawParticles","particle","moveDiscs","moveParticles","tick","init","handleResize","cn","styles","motion","Infinity"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack
|
|
1
|
+
{"version":3,"sources":["webpack://./../../node_modules/@rslib/core/node_modules/@rsbuild/core/compiled/css-loader/index.js??ruleSet[1].rules[1].oneOf[2].use[1]!builtin:lightningcss-loader??ruleSet[1].rules[1].oneOf[2].use[2]!/home/runner/work/arolariu.ro/arolariu.ro/node_modules/@rslib/core/node_modules/@rsbuild/core/compiled/postcss-loader/index.js??ruleSet[1].rules[1].oneOf[2].use[3]!/home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/hole-background.module.css","webpack://./src/components/ui/hole-background.module.css"],"names":[],"mappings":"AAAA;ECCE,WAAW;EACX,YAAY;EACZ,kBAAkB;EAClB,gBAAgB;AAClB;;ADL+D;ECQ7D,WAAW;EACX,4DAA4D;EAC5D,WAAW;EACX,YAAY;EACZ,cAAc;EACd,kBAAkB;EAClB,QAAQ;EACR,SAAS;EACT,qCAAqC;AACvC;;ADjB0Q;ECoBxQ,4DAA4D;AAC9D;;ADrB0Q;ECwBxQ,4DAA4D;AAC9D;;ADzBsZ;EC4BpZ,WAAW;EACX,uBAAuB;EACvB,UAAU;EACV,+DAA+D;EAC/D,QAAQ;EACR,SAAS;EACT,qCAAqC;AACvC;;ADnC6kB;ECsC3kB,WAAW;EACX,YAAY;EACZ,cAAc;EACd,kBAAkB;AACpB;;AD1CwpB;EC6CtpB,WAAW;EACX,QAAQ;AACV;;AD/CmrB;ECkDjrB,WAAW;AACb;;ADnDwvB;ECsDtvB,kBAAkB;EAClB,2BAA2B;EAC3B,YAAY;EACZ,UAAU;EACV,oJAAoJ;EACpJ,kCAAkC;EAClC,iCAAiC;EACjC,UAAU;EACV,YAAY;EACZ,kBAAkB;EAClB,WAAW;EACX,SAAS;EACT,kCAAkC;AACpC;;ADnE+qC;ECsE7qC,4BAA4B;EAC5B,iIAAiI;AACnI;;ADxE+5C;EC2E75C,uBAAuB;EACvB,WAAW;EACX,UAAU;EACV,mEAAmE;EACnE,kBAAkB;EAClB,QAAQ;AACV","sourcesContent":[".root{height:100%;overflow:hidden;position:relative;width:100%}.root:before{background:radial-gradient(ellipse at 50% 55%,transparent 10%,#fff 50%);content:\"\";display:block;height:140%;left:50%;position:absolute;top:50%;transform:translate3d(-50%,-50%,0);width:140%}:global(.dark) .root:before,:global([data-theme=dark]) .root:before{background:radial-gradient(ellipse at 50% 55%,transparent 10%,#000 50%)}.root:after{background:radial-gradient(ellipse at 50% 75%,#a900ff 20%,transparent 75%);content:\"\";left:50%;mix-blend-mode:overlay;top:50%;transform:translate3d(-50%,-50%,0);z-index:5}.canvas,.root:after{display:block;height:100%;position:absolute;width:100%}.canvas{inset:0;opacity:.1}:global(.dark) .canvas,:global([data-theme=dark]) .canvas{opacity:.2}.glow{background:linear-gradient(20deg,#00f8f1,rgba(255,189,30,.25) 16.5%,#fe848f 33%,rgba(254,132,143,.25) 49.5%,#00f8f1 66%,rgba(0,248,241,.5) 85.5%,#ffbd1e);background-position:0 100%;background-size:100% 200%;border-bottom-left-radius:9999px;border-bottom-right-radius:9999px;filter:blur(48px);height:140%;left:50%;mix-blend-mode:plus-darker;opacity:.75;position:absolute;top:-71.5%;transform:translate3d(-50%,0,0);width:30%;z-index:3}:global(.dark) .glow,:global([data-theme=dark]) .glow{background:linear-gradient(20deg,#00f8f1,rgba(255,189,30,.125) 16.5%,#fe848f 33%,rgba(254,132,143,.125) 49.5%,#00f8f1 66%,rgba(0,248,241,.375) 85.5%,#ffbd1e);mix-blend-mode:plus-lighter}.scanlines{background:repeating-linear-gradient(transparent,transparent 1px,#fff 0,#fff 2px);inset:0;mix-blend-mode:overlay;opacity:.5;position:absolute;z-index:7}",".root {\n width: 100%;\n height: 100%;\n position: relative;\n overflow: hidden;\n}\n\n.root:before {\n content: \"\";\n background: radial-gradient(at 50% 55%, #0000 10%, #fff 50%);\n width: 140%;\n height: 140%;\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate3d(-50%, -50%, 0);\n}\n\n:global(.dark) .root:before {\n background: radial-gradient(at 50% 55%, #0000 10%, #000 50%);\n}\n\n:global([data-theme=dark]) .root:before {\n background: radial-gradient(at 50% 55%, #0000 10%, #000 50%);\n}\n\n.root:after {\n content: \"\";\n mix-blend-mode: overlay;\n z-index: 5;\n background: radial-gradient(at 50% 75%, #a900ff 20%, #0000 75%);\n top: 50%;\n left: 50%;\n transform: translate3d(-50%, -50%, 0);\n}\n\n.canvas, .root:after {\n width: 100%;\n height: 100%;\n display: block;\n position: absolute;\n}\n\n.canvas {\n opacity: .1;\n inset: 0;\n}\n\n:is(:global(.dark) .canvas, :global([data-theme=dark]) .canvas) {\n opacity: .2;\n}\n\n.glow {\n filter: blur(48px);\n mix-blend-mode: plus-darker;\n opacity: .75;\n z-index: 3;\n background: linear-gradient(20deg, #00f8f1, #ffbd1e40 16.5%, #fe848f 33%, #fe848f40 49.5%, #00f8f1 66%, #00f8f180 85.5%, #ffbd1e) 0 100% / 100% 200%;\n border-bottom-right-radius: 9999px;\n border-bottom-left-radius: 9999px;\n width: 30%;\n height: 140%;\n position: absolute;\n top: -71.5%;\n left: 50%;\n transform: translate3d(-50%, 0, 0);\n}\n\n:is(:global(.dark) .glow, :global([data-theme=dark]) .glow) {\n mix-blend-mode: plus-lighter;\n background: linear-gradient(20deg, #00f8f1, #ffbd1e20 16.5%, #fe848f 33%, #fe848f20 49.5%, #00f8f1 66%, #00f8f160 85.5%, #ffbd1e);\n}\n\n.scanlines {\n mix-blend-mode: overlay;\n opacity: .5;\n z-index: 7;\n background: repeating-linear-gradient(#0000, #0000 1px, #fff 0 2px);\n position: absolute;\n inset: 0;\n}\n"],"sourceRoot":""}
|
|
@@ -3,15 +3,15 @@ import { jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import { mergeProps } from "@base-ui/react/merge-props";
|
|
4
4
|
import { PreviewCard } from "@base-ui/react/preview-card";
|
|
5
5
|
import { useRender } from "@base-ui/react/use-render";
|
|
6
|
-
import { forwardRef } from "react";
|
|
7
6
|
import { cn } from "../../lib/utilities.js";
|
|
8
7
|
import hover_card_module from "./hover-card.module.js";
|
|
8
|
+
import * as __rspack_external_react from "react";
|
|
9
9
|
function HoverCard(props) {
|
|
10
10
|
return /*#__PURE__*/ jsx(PreviewCard.Root, {
|
|
11
11
|
...props
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
|
-
const HoverCardTrigger = /*#__PURE__*/ forwardRef((props, ref)=>{
|
|
14
|
+
const HoverCardTrigger = /*#__PURE__*/ __rspack_external_react.forwardRef((props, ref)=>{
|
|
15
15
|
const { className, children, render, ...otherProps } = props;
|
|
16
16
|
return /*#__PURE__*/ jsx(PreviewCard.Trigger, {
|
|
17
17
|
ref: ref,
|
|
@@ -26,7 +26,7 @@ const HoverCardTrigger = /*#__PURE__*/ forwardRef((props, ref)=>{
|
|
|
26
26
|
children: children
|
|
27
27
|
});
|
|
28
28
|
});
|
|
29
|
-
const HoverCardContent = /*#__PURE__*/ forwardRef((props, ref)=>{
|
|
29
|
+
const HoverCardContent = /*#__PURE__*/ __rspack_external_react.forwardRef((props, ref)=>{
|
|
30
30
|
const { className, children, render, sideOffset = 4, ...otherProps } = props;
|
|
31
31
|
return /*#__PURE__*/ jsx(PreviewCard.Portal, {
|
|
32
32
|
children: /*#__PURE__*/ jsx(PreviewCard.Positioner, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/ui/hover-card.js","sources":["../../../src/components/ui/hover-card.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {mergeProps} from \"@base-ui/react/merge-props\";\r\nimport {PreviewCard as BasePreviewCard} from \"@base-ui/react/preview-card\";\r\nimport {useRender} from \"@base-ui/react/use-render\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./hover-card.module.css\";\r\n\r\ninterface HoverCardProps extends React.ComponentPropsWithRef<typeof BasePreviewCard.Root> {}\r\ninterface HoverCardTriggerProps extends Omit<React.ComponentPropsWithRef<typeof BasePreviewCard.Trigger>, \"className\"> {\r\n /**\r\n * Applies additional CSS classes to the component root element.\r\n * @default undefined\r\n */\r\n className?: string;\r\n}\r\ninterface HoverCardContentProps extends Omit<React.ComponentPropsWithRef<typeof BasePreviewCard.Positioner>, \"className\"> {\r\n /**\r\n * Applies additional CSS classes to the component root element.\r\n * @default undefined\r\n */\r\n className?: string;\r\n /**\r\n * Offsets the floating content from its anchor in pixels.\r\n * @default 4\r\n */\r\n sideOffset?: number;\r\n}\r\n\r\n/**\r\n * Coordinates hover card state and accessibility behavior.\r\n *\r\n * @remarks\r\n * - Delegates structure and state to the underlying Base UI primitive\r\n * - Built on {@link https://base-ui.com/react/components/preview-card | Base UI Preview Card}\r\n * - Preserves the underlying primitive API for advanced composition\r\n *\r\n * @example\r\n * ```tsx\r\n * <HoverCard>Content</HoverCard>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/preview-card | Base UI Documentation}\r\n */\r\nfunction HoverCard(props: Readonly<HoverCard.Props>): React.ReactElement {\r\n return <BasePreviewCard.Root {...props} />;\r\n}\r\n\r\n/**\r\n * Renders the hover card trigger.\r\n *\r\n * @remarks\r\n * - Renders a `<a>` element by default\r\n * - Built on {@link https://base-ui.com/react/components/preview-card | Base UI Preview Card}\r\n * - Supports the `render` prop for element composition\r\n *\r\n * @example\r\n * ```tsx\r\n * <HoverCardTrigger>Content</HoverCardTrigger>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/preview-card | Base UI Documentation}\r\n */\r\nconst HoverCardTrigger = React.forwardRef<HTMLAnchorElement, HoverCardTrigger.Props>(\r\n (props: Readonly<HoverCardTrigger.Props>, ref): React.ReactElement => {\r\n const {className, children, render, ...otherProps} = props;\r\n\r\n return (\r\n <BasePreviewCard.Trigger\r\n ref={ref}\r\n {...otherProps}\r\n render={useRender({\r\n defaultTagName: \"a\",\r\n render: render as never,\r\n props: mergeProps({className}, {}),\r\n })}>\r\n {children}\r\n </BasePreviewCard.Trigger>\r\n );\r\n },\r\n);\r\n\r\n/**\r\n * Renders the hover card content.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element by default\r\n * - Built on {@link https://base-ui.com/react/components/preview-card | Base UI Preview Card}\r\n * - Supports the `render` prop for element composition\r\n *\r\n * @example\r\n * ```tsx\r\n * <HoverCardContent>Content</HoverCardContent>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/preview-card | Base UI Documentation}\r\n */\r\nconst HoverCardContent = React.forwardRef<React.ComponentRef<typeof BasePreviewCard.Popup>, HoverCardContent.Props>(\r\n (props: Readonly<HoverCardContent.Props>, ref): React.ReactElement => {\r\n const {className, children, render, sideOffset = 4, ...otherProps} = props;\r\n\r\n return (\r\n <BasePreviewCard.Portal>\r\n <BasePreviewCard.Positioner\r\n sideOffset={sideOffset}\r\n {...otherProps}\r\n render={useRender({\r\n defaultTagName: \"div\",\r\n props: mergeProps({className: styles.positioner}, {}),\r\n })}>\r\n <BasePreviewCard.Popup\r\n ref={ref}\r\n render={useRender({\r\n defaultTagName: \"div\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.popup, className)}, {}),\r\n })}>\r\n {children}\r\n </BasePreviewCard.Popup>\r\n </BasePreviewCard.Positioner>\r\n </BasePreviewCard.Portal>\r\n );\r\n },\r\n);\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace HoverCard {\r\n export type Props = HoverCardProps;\r\n export type State = BasePreviewCard.Root.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace HoverCardTrigger {\r\n export type Props = HoverCardTriggerProps;\r\n export type State = BasePreviewCard.Trigger.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace HoverCardContent {\r\n export type Props = HoverCardContentProps;\r\n export type State = BasePreviewCard.Popup.State;\r\n}\r\n\r\nHoverCard.displayName = \"HoverCard\";\r\nHoverCardTrigger.displayName = \"HoverCardTrigger\";\r\nHoverCardContent.displayName = \"HoverCardContent\";\r\n\r\nexport {HoverCard, HoverCardContent, HoverCardTrigger};\r\n"],"names":["HoverCard","props","BasePreviewCard","HoverCardTrigger","React","ref","className","children","render","otherProps","useRender","mergeProps","HoverCardContent","sideOffset","styles","cn"],"mappings":";;;;;;;;AA8CA,SAASA,UAAUC,KAAgC;IACjD,OAAO,WAAP,GAAO,IAACC,YAAAA,IAAoB;QAAE,GAAGD,KAAK;;AACxC;AAiBA,MAAME,mBAAmB,WAAHA,GAAGC,
|
|
1
|
+
{"version":3,"file":"components/ui/hover-card.js","sources":["../../../src/components/ui/hover-card.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport {mergeProps} from \"@base-ui/react/merge-props\";\r\nimport {PreviewCard as BasePreviewCard} from \"@base-ui/react/preview-card\";\r\nimport {useRender} from \"@base-ui/react/use-render\";\r\nimport * as React from \"react\";\r\n\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./hover-card.module.css\";\r\n\r\ninterface HoverCardProps extends React.ComponentPropsWithRef<typeof BasePreviewCard.Root> {}\r\ninterface HoverCardTriggerProps extends Omit<React.ComponentPropsWithRef<typeof BasePreviewCard.Trigger>, \"className\"> {\r\n /**\r\n * Applies additional CSS classes to the component root element.\r\n * @default undefined\r\n */\r\n className?: string;\r\n}\r\ninterface HoverCardContentProps extends Omit<React.ComponentPropsWithRef<typeof BasePreviewCard.Positioner>, \"className\"> {\r\n /**\r\n * Applies additional CSS classes to the component root element.\r\n * @default undefined\r\n */\r\n className?: string;\r\n /**\r\n * Offsets the floating content from its anchor in pixels.\r\n * @default 4\r\n */\r\n sideOffset?: number;\r\n}\r\n\r\n/**\r\n * Coordinates hover card state and accessibility behavior.\r\n *\r\n * @remarks\r\n * - Delegates structure and state to the underlying Base UI primitive\r\n * - Built on {@link https://base-ui.com/react/components/preview-card | Base UI Preview Card}\r\n * - Preserves the underlying primitive API for advanced composition\r\n *\r\n * @example\r\n * ```tsx\r\n * <HoverCard>Content</HoverCard>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/preview-card | Base UI Documentation}\r\n */\r\nfunction HoverCard(props: Readonly<HoverCard.Props>): React.ReactElement {\r\n return <BasePreviewCard.Root {...props} />;\r\n}\r\n\r\n/**\r\n * Renders the hover card trigger.\r\n *\r\n * @remarks\r\n * - Renders a `<a>` element by default\r\n * - Built on {@link https://base-ui.com/react/components/preview-card | Base UI Preview Card}\r\n * - Supports the `render` prop for element composition\r\n *\r\n * @example\r\n * ```tsx\r\n * <HoverCardTrigger>Content</HoverCardTrigger>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/preview-card | Base UI Documentation}\r\n */\r\nconst HoverCardTrigger = React.forwardRef<HTMLAnchorElement, HoverCardTrigger.Props>(\r\n (props: Readonly<HoverCardTrigger.Props>, ref): React.ReactElement => {\r\n const {className, children, render, ...otherProps} = props;\r\n\r\n return (\r\n <BasePreviewCard.Trigger\r\n ref={ref}\r\n {...otherProps}\r\n render={useRender({\r\n defaultTagName: \"a\",\r\n render: render as never,\r\n props: mergeProps({className}, {}),\r\n })}>\r\n {children}\r\n </BasePreviewCard.Trigger>\r\n );\r\n },\r\n);\r\n\r\n/**\r\n * Renders the hover card content.\r\n *\r\n * @remarks\r\n * - Renders a `<div>` element by default\r\n * - Built on {@link https://base-ui.com/react/components/preview-card | Base UI Preview Card}\r\n * - Supports the `render` prop for element composition\r\n *\r\n * @example\r\n * ```tsx\r\n * <HoverCardContent>Content</HoverCardContent>\r\n * ```\r\n *\r\n * @see {@link https://base-ui.com/react/components/preview-card | Base UI Documentation}\r\n */\r\nconst HoverCardContent = React.forwardRef<React.ComponentRef<typeof BasePreviewCard.Popup>, HoverCardContent.Props>(\r\n (props: Readonly<HoverCardContent.Props>, ref): React.ReactElement => {\r\n const {className, children, render, sideOffset = 4, ...otherProps} = props;\r\n\r\n return (\r\n <BasePreviewCard.Portal>\r\n <BasePreviewCard.Positioner\r\n sideOffset={sideOffset}\r\n {...otherProps}\r\n render={useRender({\r\n defaultTagName: \"div\",\r\n props: mergeProps({className: styles.positioner}, {}),\r\n })}>\r\n <BasePreviewCard.Popup\r\n ref={ref}\r\n render={useRender({\r\n defaultTagName: \"div\",\r\n render: render as never,\r\n props: mergeProps({className: cn(styles.popup, className)}, {}),\r\n })}>\r\n {children}\r\n </BasePreviewCard.Popup>\r\n </BasePreviewCard.Positioner>\r\n </BasePreviewCard.Portal>\r\n );\r\n },\r\n);\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace HoverCard {\r\n export type Props = HoverCardProps;\r\n export type State = BasePreviewCard.Root.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace HoverCardTrigger {\r\n export type Props = HoverCardTriggerProps;\r\n export type State = BasePreviewCard.Trigger.State;\r\n}\r\n\r\n// eslint-disable-next-line no-redeclare -- required for the canonical component namespace typing API\r\nnamespace HoverCardContent {\r\n export type Props = HoverCardContentProps;\r\n export type State = BasePreviewCard.Popup.State;\r\n}\r\n\r\nHoverCard.displayName = \"HoverCard\";\r\nHoverCardTrigger.displayName = \"HoverCardTrigger\";\r\nHoverCardContent.displayName = \"HoverCardContent\";\r\n\r\nexport {HoverCard, HoverCardContent, HoverCardTrigger};\r\n"],"names":["HoverCard","props","BasePreviewCard","HoverCardTrigger","React","ref","className","children","render","otherProps","useRender","mergeProps","HoverCardContent","sideOffset","styles","cn"],"mappings":";;;;;;;;AA8CA,SAASA,UAAUC,KAAgC;IACjD,OAAO,WAAP,GAAO,IAACC,YAAAA,IAAoB;QAAE,GAAGD,KAAK;;AACxC;AAiBA,MAAME,mBAAmB,WAAHA,GAAGC,wBAAAA,UAAgB,CACvC,CAACH,OAAyCI;IACxC,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAE,GAAGC,YAAW,GAAGR;IAErD,OAAO,WAAP,GACE,IAACC,YAAAA,OAAuB;QACtB,KAAKG;QACJ,GAAGI,UAAU;QACd,QAAQC,UAAU;YAChB,gBAAgB;YAChB,QAAQF;YACR,OAAOG,WAAW;gBAACL;YAAS,GAAG,CAAC;QAClC;kBACCC;;AAGP;AAkBF,MAAMK,mBAAmB,WAAHA,GAAGR,wBAAAA,UAAgB,CACvC,CAACH,OAAyCI;IACxC,MAAM,EAACC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEK,aAAa,CAAC,EAAE,GAAGJ,YAAW,GAAGR;IAErE,OAAO,WAAP,GACE,IAACC,YAAAA,MAAsB;kBACrB,kBAACA,YAAAA,UAA0B;YACzB,YAAYW;YACX,GAAGJ,UAAU;YACd,QAAQC,UAAU;gBAChB,gBAAgB;gBAChB,OAAOC,WAAW;oBAAC,WAAWG,kBAAAA,UAAiB;gBAAA,GAAG,CAAC;YACrD;sBACA,kBAACZ,YAAAA,KAAqB;gBACpB,KAAKG;gBACL,QAAQK,UAAU;oBAChB,gBAAgB;oBAChB,QAAQF;oBACR,OAAOG,WAAW;wBAAC,WAAWI,GAAGD,kBAAAA,KAAY,EAAER;oBAAU,GAAG,CAAC;gBAC/D;0BACCC;;;;AAKX;AAqBFP,UAAU,WAAW,GAAG;AACxBG,iBAAiB,WAAW,GAAG;AAC/BS,iBAAiB,WAAW,GAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack
|
|
1
|
+
{"version":3,"sources":["webpack://./../../node_modules/@rslib/core/node_modules/@rsbuild/core/compiled/css-loader/index.js??ruleSet[1].rules[1].oneOf[2].use[1]!builtin:lightningcss-loader??ruleSet[1].rules[1].oneOf[2].use[2]!/home/runner/work/arolariu.ro/arolariu.ro/node_modules/@rslib/core/node_modules/@rsbuild/core/compiled/postcss-loader/index.js??ruleSet[1].rules[1].oneOf[2].use[3]!/home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/hover-card.module.css","webpack://./src/components/ui/hover-card.module.css"],"names":[],"mappings":"AAAA;ECCE,WAAW;AACb;;ADFuB;ECKrB,mCAAmC;EACnC,kCAAkC;EAClC,kCAAkC;EAClC,mCAAmC;EACnC,0BAA0B;EAC1B,qFAAqF;EACrF,aAAa;EACb,YAAY;EACZ,uCAAuC;AACzC;;ADd4V;ECiB1V,UAAU;EACV,qBAAqB;AACvB","sourcesContent":[".positioner{z-index:50}.popup{background-color:var(--ac-popover);border:1px solid var(--ac-border);border-radius:var(--ac-radius-md);box-shadow:0 16px 40px -16px rgba(0,0,0,.3);color:var(--ac-popover-foreground);outline:none;padding:var(--ac-space-4);transition:opacity var(--ac-transition-normal),transform var(--ac-transition-normal);width:16rem}.popup[data-ending-style],.popup[data-starting-style]{opacity:0;transform:scale(.96)}",".positioner {\n z-index: 50;\n}\n\n.popup {\n background-color: var(--ac-popover);\n border: 1px solid var(--ac-border);\n border-radius: var(--ac-radius-md);\n color: var(--ac-popover-foreground);\n padding: var(--ac-space-4);\n transition: opacity var(--ac-transition-normal),transform var(--ac-transition-normal);\n outline: none;\n width: 16rem;\n box-shadow: 0 16px 40px -16px #0000004d;\n}\n\n.popup[data-ending-style], .popup[data-starting-style] {\n opacity: 0;\n transform: scale(.96);\n}\n"],"sourceRoot":""}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
|
-
import { forwardRef } from "react";
|
|
4
3
|
import { Button } from "./button.js";
|
|
5
4
|
import { Input } from "./input.js";
|
|
6
5
|
import { Textarea } from "./textarea.js";
|
|
7
6
|
import { cn } from "../../lib/utilities.js";
|
|
8
7
|
import input_group_module from "./input-group.module.js";
|
|
8
|
+
import * as __rspack_external_react from "react";
|
|
9
9
|
function getAddonAlignClass(align) {
|
|
10
10
|
switch(align){
|
|
11
11
|
case "block-end":
|
|
@@ -30,14 +30,14 @@ function getButtonSizeClass(size) {
|
|
|
30
30
|
return input_group_module.buttonXs;
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
const InputGroup = /*#__PURE__*/ forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ jsx("div", {
|
|
33
|
+
const InputGroup = /*#__PURE__*/ __rspack_external_react.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ jsx("div", {
|
|
34
34
|
ref: ref,
|
|
35
35
|
role: "group",
|
|
36
36
|
"data-slot": "input-group",
|
|
37
37
|
className: cn(input_group_module.group, className),
|
|
38
38
|
...props
|
|
39
39
|
}));
|
|
40
|
-
const InputGroupAddon = /*#__PURE__*/ forwardRef(({ className, align = "inline-start", onClick, ...props }, ref)=>/*#__PURE__*/ jsx("div", {
|
|
40
|
+
const InputGroupAddon = /*#__PURE__*/ __rspack_external_react.forwardRef(({ className, align = "inline-start", onClick, ...props }, ref)=>/*#__PURE__*/ jsx("div", {
|
|
41
41
|
ref: ref,
|
|
42
42
|
role: "group",
|
|
43
43
|
"data-slot": "input-group-addon",
|
|
@@ -51,7 +51,7 @@ const InputGroupAddon = /*#__PURE__*/ forwardRef(({ className, align = "inline-s
|
|
|
51
51
|
},
|
|
52
52
|
...props
|
|
53
53
|
}));
|
|
54
|
-
const InputGroupButton = /*#__PURE__*/ forwardRef(({ className, type = "button", variant = "ghost", size = "xs", ...props }, ref)=>/*#__PURE__*/ jsx(Button, {
|
|
54
|
+
const InputGroupButton = /*#__PURE__*/ __rspack_external_react.forwardRef(({ className, type = "button", variant = "ghost", size = "xs", ...props }, ref)=>/*#__PURE__*/ jsx(Button, {
|
|
55
55
|
ref: ref,
|
|
56
56
|
type: type,
|
|
57
57
|
"data-size": size,
|
|
@@ -59,18 +59,18 @@ const InputGroupButton = /*#__PURE__*/ forwardRef(({ className, type = "button",
|
|
|
59
59
|
className: cn(input_group_module.button, getButtonSizeClass(size), className),
|
|
60
60
|
...props
|
|
61
61
|
}));
|
|
62
|
-
const InputGroupText = /*#__PURE__*/ forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ jsx("span", {
|
|
62
|
+
const InputGroupText = /*#__PURE__*/ __rspack_external_react.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ jsx("span", {
|
|
63
63
|
ref: ref,
|
|
64
64
|
className: cn(input_group_module.text, className),
|
|
65
65
|
...props
|
|
66
66
|
}));
|
|
67
|
-
const InputGroupInput = /*#__PURE__*/ forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ jsx(Input, {
|
|
67
|
+
const InputGroupInput = /*#__PURE__*/ __rspack_external_react.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ jsx(Input, {
|
|
68
68
|
ref: ref,
|
|
69
69
|
"data-slot": "input-group-control",
|
|
70
70
|
className: cn(input_group_module.input, className),
|
|
71
71
|
...props
|
|
72
72
|
}));
|
|
73
|
-
const InputGroupTextarea = /*#__PURE__*/ forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ jsx(Textarea, {
|
|
73
|
+
const InputGroupTextarea = /*#__PURE__*/ __rspack_external_react.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ jsx(Textarea, {
|
|
74
74
|
ref: ref,
|
|
75
75
|
"data-slot": "input-group-control",
|
|
76
76
|
className: cn(input_group_module.textarea, className),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components/ui/input-group.js","sources":["../../../src/components/ui/input-group.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\nimport {Button} from \"@/components/ui/button\";\r\nimport {Input} from \"@/components/ui/input\";\r\nimport {Textarea} from \"@/components/ui/textarea\";\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./input-group.module.css\";\r\n\r\n/** Supported alignment options for {@link InputGroupAddon}. */\r\nexport type InputGroupAddonAlign = \"inline-start\" | \"inline-end\" | \"block-start\" | \"block-end\";\r\n\r\n/** Supported compact button sizes for {@link InputGroupButton}. */\r\nexport type InputGroupButtonSize = \"xs\" | \"sm\" | \"icon-xs\" | \"icon-sm\";\r\n\r\n/**\r\n * Props for the {@link InputGroup} component.\r\n */\r\nexport type InputGroupProps = React.ComponentPropsWithoutRef<\"div\">;\r\n\r\n/**\r\n * Props for the {@link InputGroupAddon} component.\r\n */\r\nexport interface InputGroupAddonProps extends React.ComponentPropsWithoutRef<\"div\"> {\r\n /** Position of the addon relative to the input control. @default \"inline-start\" */\r\n align?: InputGroupAddonAlign;\r\n}\r\n\r\n/**\r\n * Props for the {@link InputGroupButton} component.\r\n */\r\nexport interface InputGroupButtonProps extends Omit<React.ComponentPropsWithoutRef<typeof Button>, \"size\"> {\r\n /** Compact button size used within the group chrome. @default \"xs\" */\r\n size?: InputGroupButtonSize;\r\n}\r\n\r\n/**\r\n * Props for the {@link InputGroupText} component.\r\n */\r\nexport type InputGroupTextProps = React.ComponentPropsWithoutRef<\"span\">;\r\n\r\n/**\r\n * Props for the {@link InputGroupInput} component.\r\n */\r\nexport type InputGroupInputProps = React.ComponentPropsWithoutRef<\"input\">;\r\n\r\n/**\r\n * Props for the {@link InputGroupTextarea} component.\r\n */\r\nexport type InputGroupTextareaProps = React.ComponentPropsWithoutRef<\"textarea\">;\r\n\r\nfunction getAddonAlignClass(align: InputGroupAddonAlign): string {\r\n switch (align) {\r\n case \"block-end\": {\r\n return styles.blockEnd;\r\n }\r\n case \"block-start\": {\r\n return styles.blockStart;\r\n }\r\n case \"inline-end\": {\r\n return styles.inlineEnd;\r\n }\r\n default: {\r\n return styles.inlineStart;\r\n }\r\n }\r\n}\r\n\r\nfunction getButtonSizeClass(size: InputGroupButtonSize): string {\r\n switch (size) {\r\n case \"icon-sm\": {\r\n return styles.buttonIconSm;\r\n }\r\n case \"icon-xs\": {\r\n return styles.buttonIconXs;\r\n }\r\n case \"sm\": {\r\n return styles.buttonSm;\r\n }\r\n default: {\r\n return styles.buttonXs;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Creates a composable shell for grouped text inputs and controls.\r\n *\r\n * @remarks\r\n * - Pure CSS component (no Base UI primitive)\r\n * - Renders a `<div>` element\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n *\r\n * @example\r\n * ```tsx\r\n * <InputGroup>\r\n * <InputGroupInput />\r\n * </InputGroup>\r\n * ```\r\n *\r\n * @see {@link InputGroupProps} for available props\r\n */\r\nconst InputGroup = React.forwardRef<HTMLDivElement, InputGroupProps>(\r\n ({className, ...props}: Readonly<InputGroupProps>, ref): React.JSX.Element => (\r\n <div\r\n ref={ref}\r\n role='group'\r\n data-slot='input-group'\r\n className={cn(styles.group, className)}\r\n {...props}\r\n />\r\n ),\r\n);\r\n\r\n/**\r\n * Renders supplementary content around an input group control.\r\n *\r\n * @remarks\r\n * - Pure CSS component (no Base UI primitive)\r\n * - Renders a `<div>` element\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n *\r\n * @example\r\n * ```tsx\r\n * <InputGroupAddon align='inline-end'>.com</InputGroupAddon>\r\n * ```\r\n *\r\n * @see {@link InputGroupAddonProps} for available props\r\n */\r\nconst InputGroupAddon = React.forwardRef<HTMLDivElement, InputGroupAddonProps>(\r\n ({className, align = \"inline-start\", onClick, ...props}: Readonly<InputGroupAddonProps>, ref): React.JSX.Element => (\r\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions -- clicking the addon focuses the related control.\r\n <div\r\n ref={ref}\r\n role='group'\r\n data-slot='input-group-addon'\r\n data-align={align}\r\n className={cn(styles.addon, getAddonAlignClass(align), className)}\r\n onClick={(event): void => {\r\n if ((event.target as HTMLElement).closest(\"button\")) {\r\n onClick?.(event);\r\n return;\r\n }\r\n\r\n onClick?.(event);\r\n\r\n if (event.defaultPrevented) {\r\n return;\r\n }\r\n\r\n event.currentTarget.parentElement?.querySelector<HTMLInputElement | HTMLTextAreaElement>(\"input, textarea\")?.focus();\r\n }}\r\n {...props}\r\n />\r\n ),\r\n);\r\n\r\n/**\r\n * Renders a compact button matched to input group dimensions.\r\n *\r\n * @remarks\r\n * - Pure CSS component (no Base UI primitive)\r\n * - Renders a wrapped `Button` component\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n *\r\n * @example\r\n * ```tsx\r\n * <InputGroupButton size='sm'>Search</InputGroupButton>\r\n * ```\r\n *\r\n * @see {@link InputGroupButtonProps} for available props\r\n */\r\nconst InputGroupButton = React.forwardRef<HTMLButtonElement, InputGroupButtonProps>(\r\n ({className, type = \"button\", variant = \"ghost\", size = \"xs\", ...props}: Readonly<InputGroupButtonProps>, ref): React.JSX.Element => (\r\n <Button\r\n ref={ref}\r\n type={type}\r\n data-size={size}\r\n variant={variant}\r\n className={cn(styles.button, getButtonSizeClass(size), className)}\r\n {...props}\r\n />\r\n ),\r\n);\r\n\r\n/**\r\n * Displays static inline text within an input group.\r\n *\r\n * @remarks\r\n * - Pure CSS component (no Base UI primitive)\r\n * - Renders a `<span>` element\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n *\r\n * @example\r\n * ```tsx\r\n * <InputGroupText>@</InputGroupText>\r\n * ```\r\n *\r\n * @see {@link InputGroupTextProps} for available props\r\n */\r\nconst InputGroupText = React.forwardRef<HTMLSpanElement, InputGroupTextProps>(\r\n ({className, ...props}: Readonly<InputGroupTextProps>, ref): React.JSX.Element => (\r\n <span\r\n ref={ref}\r\n className={cn(styles.text, className)}\r\n {...props}\r\n />\r\n ),\r\n);\r\n\r\n/**\r\n * Renders the primary input control inside an input group.\r\n *\r\n * @remarks\r\n * - Pure CSS component (no Base UI primitive)\r\n * - Renders a wrapped `Input` component\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n *\r\n * @example\r\n * ```tsx\r\n * <InputGroupInput placeholder='Search...' />\r\n * ```\r\n *\r\n * @see {@link InputGroupInputProps} for available props\r\n */\r\nconst InputGroupInput = React.forwardRef<HTMLInputElement, InputGroupInputProps>(\r\n ({className, ...props}: Readonly<InputGroupInputProps>, ref): React.JSX.Element => (\r\n <Input\r\n ref={ref}\r\n data-slot='input-group-control'\r\n className={cn(styles.input, className)}\r\n {...props}\r\n />\r\n ),\r\n);\r\n\r\n/**\r\n * Renders a textarea control inside an input group.\r\n *\r\n * @remarks\r\n * - Pure CSS component (no Base UI primitive)\r\n * - Renders a wrapped `Textarea` component\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n *\r\n * @example\r\n * ```tsx\r\n * <InputGroupTextarea rows={4} />\r\n * ```\r\n *\r\n * @see {@link InputGroupTextareaProps} for available props\r\n */\r\nconst InputGroupTextarea = React.forwardRef<HTMLTextAreaElement, InputGroupTextareaProps>(\r\n ({className, ...props}: Readonly<InputGroupTextareaProps>, ref): React.JSX.Element => (\r\n <Textarea\r\n ref={ref}\r\n data-slot='input-group-control'\r\n className={cn(styles.textarea, className)}\r\n {...props}\r\n />\r\n ),\r\n);\r\n\r\nInputGroup.displayName = \"InputGroup\";\r\nInputGroupAddon.displayName = \"InputGroupAddon\";\r\nInputGroupButton.displayName = \"InputGroupButton\";\r\nInputGroupText.displayName = \"InputGroupText\";\r\nInputGroupInput.displayName = \"InputGroupInput\";\r\nInputGroupTextarea.displayName = \"InputGroupTextarea\";\r\n\r\nexport {InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea};\r\n"],"names":["getAddonAlignClass","align","styles","getButtonSizeClass","size","InputGroup","React","className","props","ref","cn","InputGroupAddon","onClick","event","InputGroupButton","type","variant","Button","InputGroupText","InputGroupInput","Input","InputGroupTextarea","Textarea"],"mappings":";;;;;;;;AAoDA,SAASA,mBAAmBC,KAA2B;IACrD,OAAQA;QACN,KAAK;YACH,OAAOC,mBAAAA,QAAe;QAExB,KAAK;YACH,OAAOA,mBAAAA,UAAiB;QAE1B,KAAK;YACH,OAAOA,mBAAAA,SAAgB;QAEzB;YACE,OAAOA,mBAAAA,WAAkB;IAE7B;AACF;AAEA,SAASC,mBAAmBC,IAA0B;IACpD,OAAQA;QACN,KAAK;YACH,OAAOF,mBAAAA,YAAmB;QAE5B,KAAK;YACH,OAAOA,mBAAAA,YAAmB;QAE5B,KAAK;YACH,OAAOA,mBAAAA,QAAe;QAExB;YACE,OAAOA,mBAAAA,QAAe;IAE1B;AACF;AAmBA,MAAMG,aAAa,WAAHA,GAAGC,WACjB,CAAC,EAACC,SAAS,EAAE,GAAGC,OAAiC,EAAEC,MAAAA,WAAAA,GACjD,IAAC;QACC,KAAKA;QACL,MAAK;QACL,aAAU;QACV,WAAWC,GAAGR,mBAAAA,KAAY,EAAEK;QAC3B,GAAGC,KAAK;;AAoBf,MAAMG,kBAAkB,WAAHA,GAAGL,WACtB,CAAC,EAACC,SAAS,EAAEN,QAAQ,cAAc,EAAEW,OAAO,EAAE,GAAGJ,OAAsC,EAAEC,M,cAEvF,IAAC;QACC,KAAKA;QACL,MAAK;QACL,aAAU;QACV,cAAYR;QACZ,WAAWS,GAAGR,mBAAAA,KAAY,EAAEF,mBAAmBC,QAAQM;QACvD,SAAS,CAACM;YACR,IAAKA,MAAM,MAAM,CAAiB,OAAO,CAAC,WAAW,YACnDD,UAAUC;YAIZD,UAAUC;YAEV,IAAIA,MAAM,gBAAgB,EACxB;YAGFA,MAAM,aAAa,CAAC,aAAa,EAAE,cAAsD,oBAAoB;QAC/G;QACC,GAAGL,KAAK;;AAoBf,MAAMM,mBAAmB,WAAHA,GAAGR,WACvB,CAAC,EAACC,SAAS,EAAEQ,OAAO,QAAQ,EAAEC,UAAU,OAAO,EAAEZ,OAAO,IAAI,EAAE,GAAGI,OAAuC,EAAEC,MAAAA,WAAAA,GACxG,IAACQ,QAAMA;QACL,KAAKR;QACL,MAAMM;QACN,aAAWX;QACX,SAASY;QACT,WAAWN,GAAGR,mBAAAA,MAAa,EAAEC,mBAAmBC,OAAOG;QACtD,GAAGC,KAAK;;AAoBf,MAAMU,iBAAiB,WAAHA,GAAGZ,WACrB,CAAC,EAACC,SAAS,EAAE,GAAGC,OAAqC,EAAEC,MAAAA,WAAAA,GACrD,IAAC;QACC,KAAKA;QACL,WAAWC,GAAGR,mBAAAA,IAAW,EAAEK;QAC1B,GAAGC,KAAK;;AAoBf,MAAMW,kBAAkB,WAAHA,GAAGb,WACtB,CAAC,EAACC,SAAS,EAAE,GAAGC,OAAsC,EAAEC,MAAAA,WAAAA,GACtD,IAACW,OAAKA;QACJ,KAAKX;QACL,aAAU;QACV,WAAWC,GAAGR,mBAAAA,KAAY,EAAEK;QAC3B,GAAGC,KAAK;;AAoBf,MAAMa,qBAAqB,WAAHA,GAAGf,WACzB,CAAC,EAACC,SAAS,EAAE,GAAGC,OAAyC,EAAEC,MAAAA,WAAAA,GACzD,IAACa,UAAQA;QACP,KAAKb;QACL,aAAU;QACV,WAAWC,GAAGR,mBAAAA,QAAe,EAAEK;QAC9B,GAAGC,KAAK;;AAKfH,WAAW,WAAW,GAAG;AACzBM,gBAAgB,WAAW,GAAG;AAC9BG,iBAAiB,WAAW,GAAG;AAC/BI,eAAe,WAAW,GAAG;AAC7BC,gBAAgB,WAAW,GAAG;AAC9BE,mBAAmB,WAAW,GAAG"}
|
|
1
|
+
{"version":3,"file":"components/ui/input-group.js","sources":["../../../src/components/ui/input-group.tsx"],"sourcesContent":["\"use client\";\r\n\r\nimport * as React from \"react\";\r\n\r\nimport {Button} from \"@/components/ui/button\";\r\nimport {Input} from \"@/components/ui/input\";\r\nimport {Textarea} from \"@/components/ui/textarea\";\r\nimport {cn} from \"@/lib/utilities\";\r\nimport styles from \"./input-group.module.css\";\r\n\r\n/** Supported alignment options for {@link InputGroupAddon}. */\r\nexport type InputGroupAddonAlign = \"inline-start\" | \"inline-end\" | \"block-start\" | \"block-end\";\r\n\r\n/** Supported compact button sizes for {@link InputGroupButton}. */\r\nexport type InputGroupButtonSize = \"xs\" | \"sm\" | \"icon-xs\" | \"icon-sm\";\r\n\r\n/**\r\n * Props for the {@link InputGroup} component.\r\n */\r\nexport type InputGroupProps = React.ComponentPropsWithoutRef<\"div\">;\r\n\r\n/**\r\n * Props for the {@link InputGroupAddon} component.\r\n */\r\nexport interface InputGroupAddonProps extends React.ComponentPropsWithoutRef<\"div\"> {\r\n /** Position of the addon relative to the input control. @default \"inline-start\" */\r\n align?: InputGroupAddonAlign;\r\n}\r\n\r\n/**\r\n * Props for the {@link InputGroupButton} component.\r\n */\r\nexport interface InputGroupButtonProps extends Omit<React.ComponentPropsWithoutRef<typeof Button>, \"size\"> {\r\n /** Compact button size used within the group chrome. @default \"xs\" */\r\n size?: InputGroupButtonSize;\r\n}\r\n\r\n/**\r\n * Props for the {@link InputGroupText} component.\r\n */\r\nexport type InputGroupTextProps = React.ComponentPropsWithoutRef<\"span\">;\r\n\r\n/**\r\n * Props for the {@link InputGroupInput} component.\r\n */\r\nexport type InputGroupInputProps = React.ComponentPropsWithoutRef<\"input\">;\r\n\r\n/**\r\n * Props for the {@link InputGroupTextarea} component.\r\n */\r\nexport type InputGroupTextareaProps = React.ComponentPropsWithoutRef<\"textarea\">;\r\n\r\nfunction getAddonAlignClass(align: InputGroupAddonAlign): string {\r\n switch (align) {\r\n case \"block-end\": {\r\n return styles.blockEnd;\r\n }\r\n case \"block-start\": {\r\n return styles.blockStart;\r\n }\r\n case \"inline-end\": {\r\n return styles.inlineEnd;\r\n }\r\n default: {\r\n return styles.inlineStart;\r\n }\r\n }\r\n}\r\n\r\nfunction getButtonSizeClass(size: InputGroupButtonSize): string {\r\n switch (size) {\r\n case \"icon-sm\": {\r\n return styles.buttonIconSm;\r\n }\r\n case \"icon-xs\": {\r\n return styles.buttonIconXs;\r\n }\r\n case \"sm\": {\r\n return styles.buttonSm;\r\n }\r\n default: {\r\n return styles.buttonXs;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Creates a composable shell for grouped text inputs and controls.\r\n *\r\n * @remarks\r\n * - Pure CSS component (no Base UI primitive)\r\n * - Renders a `<div>` element\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n *\r\n * @example\r\n * ```tsx\r\n * <InputGroup>\r\n * <InputGroupInput />\r\n * </InputGroup>\r\n * ```\r\n *\r\n * @see {@link InputGroupProps} for available props\r\n */\r\nconst InputGroup = React.forwardRef<HTMLDivElement, InputGroupProps>(\r\n ({className, ...props}: Readonly<InputGroupProps>, ref): React.JSX.Element => (\r\n <div\r\n ref={ref}\r\n role='group'\r\n data-slot='input-group'\r\n className={cn(styles.group, className)}\r\n {...props}\r\n />\r\n ),\r\n);\r\n\r\n/**\r\n * Renders supplementary content around an input group control.\r\n *\r\n * @remarks\r\n * - Pure CSS component (no Base UI primitive)\r\n * - Renders a `<div>` element\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n *\r\n * @example\r\n * ```tsx\r\n * <InputGroupAddon align='inline-end'>.com</InputGroupAddon>\r\n * ```\r\n *\r\n * @see {@link InputGroupAddonProps} for available props\r\n */\r\nconst InputGroupAddon = React.forwardRef<HTMLDivElement, InputGroupAddonProps>(\r\n ({className, align = \"inline-start\", onClick, ...props}: Readonly<InputGroupAddonProps>, ref): React.JSX.Element => (\r\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-noninteractive-element-interactions -- clicking the addon focuses the related control.\r\n <div\r\n ref={ref}\r\n role='group'\r\n data-slot='input-group-addon'\r\n data-align={align}\r\n className={cn(styles.addon, getAddonAlignClass(align), className)}\r\n onClick={(event): void => {\r\n if ((event.target as HTMLElement).closest(\"button\")) {\r\n onClick?.(event);\r\n return;\r\n }\r\n\r\n onClick?.(event);\r\n\r\n if (event.defaultPrevented) {\r\n return;\r\n }\r\n\r\n event.currentTarget.parentElement?.querySelector<HTMLInputElement | HTMLTextAreaElement>(\"input, textarea\")?.focus();\r\n }}\r\n {...props}\r\n />\r\n ),\r\n);\r\n\r\n/**\r\n * Renders a compact button matched to input group dimensions.\r\n *\r\n * @remarks\r\n * - Pure CSS component (no Base UI primitive)\r\n * - Renders a wrapped `Button` component\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n *\r\n * @example\r\n * ```tsx\r\n * <InputGroupButton size='sm'>Search</InputGroupButton>\r\n * ```\r\n *\r\n * @see {@link InputGroupButtonProps} for available props\r\n */\r\nconst InputGroupButton = React.forwardRef<HTMLButtonElement, InputGroupButtonProps>(\r\n ({className, type = \"button\", variant = \"ghost\", size = \"xs\", ...props}: Readonly<InputGroupButtonProps>, ref): React.JSX.Element => (\r\n <Button\r\n ref={ref}\r\n type={type}\r\n data-size={size}\r\n variant={variant}\r\n className={cn(styles.button, getButtonSizeClass(size), className)}\r\n {...props}\r\n />\r\n ),\r\n);\r\n\r\n/**\r\n * Displays static inline text within an input group.\r\n *\r\n * @remarks\r\n * - Pure CSS component (no Base UI primitive)\r\n * - Renders a `<span>` element\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n *\r\n * @example\r\n * ```tsx\r\n * <InputGroupText>@</InputGroupText>\r\n * ```\r\n *\r\n * @see {@link InputGroupTextProps} for available props\r\n */\r\nconst InputGroupText = React.forwardRef<HTMLSpanElement, InputGroupTextProps>(\r\n ({className, ...props}: Readonly<InputGroupTextProps>, ref): React.JSX.Element => (\r\n <span\r\n ref={ref}\r\n className={cn(styles.text, className)}\r\n {...props}\r\n />\r\n ),\r\n);\r\n\r\n/**\r\n * Renders the primary input control inside an input group.\r\n *\r\n * @remarks\r\n * - Pure CSS component (no Base UI primitive)\r\n * - Renders a wrapped `Input` component\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n *\r\n * @example\r\n * ```tsx\r\n * <InputGroupInput placeholder='Search...' />\r\n * ```\r\n *\r\n * @see {@link InputGroupInputProps} for available props\r\n */\r\nconst InputGroupInput = React.forwardRef<HTMLInputElement, InputGroupInputProps>(\r\n ({className, ...props}: Readonly<InputGroupInputProps>, ref): React.JSX.Element => (\r\n <Input\r\n ref={ref}\r\n data-slot='input-group-control'\r\n className={cn(styles.input, className)}\r\n {...props}\r\n />\r\n ),\r\n);\r\n\r\n/**\r\n * Renders a textarea control inside an input group.\r\n *\r\n * @remarks\r\n * - Pure CSS component (no Base UI primitive)\r\n * - Renders a wrapped `Textarea` component\r\n * - Styling via CSS Modules with `--ac-*` custom properties\r\n *\r\n * @example\r\n * ```tsx\r\n * <InputGroupTextarea rows={4} />\r\n * ```\r\n *\r\n * @see {@link InputGroupTextareaProps} for available props\r\n */\r\nconst InputGroupTextarea = React.forwardRef<HTMLTextAreaElement, InputGroupTextareaProps>(\r\n ({className, ...props}: Readonly<InputGroupTextareaProps>, ref): React.JSX.Element => (\r\n <Textarea\r\n ref={ref}\r\n data-slot='input-group-control'\r\n className={cn(styles.textarea, className)}\r\n {...props}\r\n />\r\n ),\r\n);\r\n\r\nInputGroup.displayName = \"InputGroup\";\r\nInputGroupAddon.displayName = \"InputGroupAddon\";\r\nInputGroupButton.displayName = \"InputGroupButton\";\r\nInputGroupText.displayName = \"InputGroupText\";\r\nInputGroupInput.displayName = \"InputGroupInput\";\r\nInputGroupTextarea.displayName = \"InputGroupTextarea\";\r\n\r\nexport {InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea};\r\n"],"names":["getAddonAlignClass","align","styles","getButtonSizeClass","size","InputGroup","React","className","props","ref","cn","InputGroupAddon","onClick","event","InputGroupButton","type","variant","Button","InputGroupText","InputGroupInput","Input","InputGroupTextarea","Textarea"],"mappings":";;;;;;;;AAoDA,SAASA,mBAAmBC,KAA2B;IACrD,OAAQA;QACN,KAAK;YACH,OAAOC,mBAAAA,QAAe;QAExB,KAAK;YACH,OAAOA,mBAAAA,UAAiB;QAE1B,KAAK;YACH,OAAOA,mBAAAA,SAAgB;QAEzB;YACE,OAAOA,mBAAAA,WAAkB;IAE7B;AACF;AAEA,SAASC,mBAAmBC,IAA0B;IACpD,OAAQA;QACN,KAAK;YACH,OAAOF,mBAAAA,YAAmB;QAE5B,KAAK;YACH,OAAOA,mBAAAA,YAAmB;QAE5B,KAAK;YACH,OAAOA,mBAAAA,QAAe;QAExB;YACE,OAAOA,mBAAAA,QAAe;IAE1B;AACF;AAmBA,MAAMG,aAAa,WAAHA,GAAGC,wBAAAA,UAAgB,CACjC,CAAC,EAACC,SAAS,EAAE,GAAGC,OAAiC,EAAEC,MAAAA,WAAAA,GACjD,IAAC;QACC,KAAKA;QACL,MAAK;QACL,aAAU;QACV,WAAWC,GAAGR,mBAAAA,KAAY,EAAEK;QAC3B,GAAGC,KAAK;;AAoBf,MAAMG,kBAAkB,WAAHA,GAAGL,wBAAAA,UAAgB,CACtC,CAAC,EAACC,SAAS,EAAEN,QAAQ,cAAc,EAAEW,OAAO,EAAE,GAAGJ,OAAsC,EAAEC,M,cAEvF,IAAC;QACC,KAAKA;QACL,MAAK;QACL,aAAU;QACV,cAAYR;QACZ,WAAWS,GAAGR,mBAAAA,KAAY,EAAEF,mBAAmBC,QAAQM;QACvD,SAAS,CAACM;YACR,IAAKA,MAAM,MAAM,CAAiB,OAAO,CAAC,WAAW,YACnDD,UAAUC;YAIZD,UAAUC;YAEV,IAAIA,MAAM,gBAAgB,EACxB;YAGFA,MAAM,aAAa,CAAC,aAAa,EAAE,cAAsD,oBAAoB;QAC/G;QACC,GAAGL,KAAK;;AAoBf,MAAMM,mBAAmB,WAAHA,GAAGR,wBAAAA,UAAgB,CACvC,CAAC,EAACC,SAAS,EAAEQ,OAAO,QAAQ,EAAEC,UAAU,OAAO,EAAEZ,OAAO,IAAI,EAAE,GAAGI,OAAuC,EAAEC,MAAAA,WAAAA,GACxG,IAACQ,QAAMA;QACL,KAAKR;QACL,MAAMM;QACN,aAAWX;QACX,SAASY;QACT,WAAWN,GAAGR,mBAAAA,MAAa,EAAEC,mBAAmBC,OAAOG;QACtD,GAAGC,KAAK;;AAoBf,MAAMU,iBAAiB,WAAHA,GAAGZ,wBAAAA,UAAgB,CACrC,CAAC,EAACC,SAAS,EAAE,GAAGC,OAAqC,EAAEC,MAAAA,WAAAA,GACrD,IAAC;QACC,KAAKA;QACL,WAAWC,GAAGR,mBAAAA,IAAW,EAAEK;QAC1B,GAAGC,KAAK;;AAoBf,MAAMW,kBAAkB,WAAHA,GAAGb,wBAAAA,UAAgB,CACtC,CAAC,EAACC,SAAS,EAAE,GAAGC,OAAsC,EAAEC,MAAAA,WAAAA,GACtD,IAACW,OAAKA;QACJ,KAAKX;QACL,aAAU;QACV,WAAWC,GAAGR,mBAAAA,KAAY,EAAEK;QAC3B,GAAGC,KAAK;;AAoBf,MAAMa,qBAAqB,WAAHA,GAAGf,wBAAAA,UAAgB,CACzC,CAAC,EAACC,SAAS,EAAE,GAAGC,OAAyC,EAAEC,MAAAA,WAAAA,GACzD,IAACa,UAAQA;QACP,KAAKb;QACL,aAAU;QACV,WAAWC,GAAGR,mBAAAA,QAAe,EAAEK;QAC9B,GAAGC,KAAK;;AAKfH,WAAW,WAAW,GAAG;AACzBM,gBAAgB,WAAW,GAAG;AAC9BG,iBAAiB,WAAW,GAAG;AAC/BI,eAAe,WAAW,GAAG;AAC7BC,gBAAgB,WAAW,GAAG;AAC9BE,mBAAmB,WAAW,GAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack
|
|
1
|
+
{"version":3,"sources":["webpack://./../../node_modules/@rslib/core/node_modules/@rsbuild/core/compiled/css-loader/index.js??ruleSet[1].rules[1].oneOf[2].use[1]!builtin:lightningcss-loader??ruleSet[1].rules[1].oneOf[2].use[2]!/home/runner/work/arolariu.ro/arolariu.ro/node_modules/@rslib/core/node_modules/@rsbuild/core/compiled/postcss-loader/index.js??ruleSet[1].rules[1].oneOf[2].use[3]!/home/runner/work/arolariu.ro/arolariu.ro/packages/components/src/components/ui/input-group.module.css","webpack://./src/components/ui/input-group.module.css"],"names":[],"mappings":"AAAA;ECCE,sCAAsC;EACtC,iCAAiC;EACjC,kCAAkC;EAClC,kCAAkC;EAClC,uFAAuF;EACvF,mBAAmB;EACnB,WAAW;EACX,aAAa;EACb,kBAAkB;EAClB,+BAA+B;AACjC;;ADX6U;ECc3U,4BAA4B;EAC5B,oCAAoC;AACtC;;ADhBia;ECmB/Z,oBAAoB;EACpB,gBAAgB;AAClB;;ADrB0d;ECwBxd,mCAAmC;EACnC,+EAA+E;AACjF;;AD1B4mB;EC6B1mB,WAAW;AACb;;AD9BkpB;ECiChpB,sBAAsB;EACtB,oBAAoB;AACtB;;ADnCowB;ECsClwB,iCAAiC;EACjC,YAAY;EACZ,4BAA4B;EAC5B,mBAAmB;EACnB,sBAAsB;EACtB,yBAAyB;EACzB,iBAAiB;EACjB,gBAAgB;EAChB,aAAa;AACf;;AD/C26B;ECkDz6B,cAAc;EACd,WAAW;EACX,YAAY;AACd;;ADrDq+B;ECwDn+B,+BAA+B;EAC/B,gCAAgC;EAChC,SAAS;AACX;;AD3D0jC;EC8DxjC,+BAA+B;EAC/B,gCAAgC;EAChC,QAAQ;AACV;;ADjE4oC;ECoE1oC,8CAA8C;EAC9C,SAAS;AACX;;ADtE+sC;ECyE7sC,2BAA2B;EAC3B,WAAW;AACb;;AD3E2wC;EC8EzwC,8CAA8C;EAC9C,QAAQ;AACV;;ADhF20C;ECmFz0C,gBAAgB;EAChB,cAAc;AAChB;;ADrFi3C;ECwF/2C,8CAA8C;EAC9C,4BAA4B;EAC5B,yBAAyB;EACzB,4BAA4B;AAC9B;;AD5F0/C;EC+Fx/C,8CAA8C;EAC9C,8BAA8B;EAC9B,4BAA4B;AAC9B;;ADlG4mD;ECqG1mD,8CAA8C;EAC9C,yBAAyB;EACzB,wBAAwB;EACxB,UAAU;AACZ;;ADzGmuD;EC4GjuD,8BAA8B;EAC9B,6BAA6B;EAC7B,UAAU;AACZ;;AD/GszD;ECkHpzD,iCAAiC;EACjC,4BAA4B;EAC5B,mBAAmB;EACnB,sBAAsB;EACtB,aAAa;AACf;;ADvH+6D;EC0H76D,gBAAgB;EAChB,uBAAuB;EACvB,SAAS;EACT,gBAAgB;EAChB,UAAU;EACV,YAAY;AACd;;ADhIshE;ECmIphE,gBAAgB;EAChB,mBAAmB;AACrB;;ADrI4mE;ECwI1mE,gBAAgB;EAChB,0CAA0C;EAC1C,YAAY;EACZ,iCAAiC;EACjC,8BAA8B;EAC9B,YAAY;EACZ,uBAAuB;EACvB,SAAS;EACT,gBAAgB;EAChB,UAAU;AACZ","sourcesContent":[".group{align-items:center;background-color:var(--ac-background);border:1px solid var(--ac-input);border-radius:var(--ac-radius-md);box-shadow:0 1px 2px 0 rgba(0,0,0,.04);display:flex;min-height:var(--ac-size-default);position:relative;transition:border-color var(--ac-transition-fast),box-shadow var(--ac-transition-fast);width:100%}.group:focus-within{border-color:var(--ac-ring);box-shadow:0 0 0 1px var(--ac-ring)}.group:has(textarea){align-items:stretch;min-height:auto}.group:has([aria-invalid=true]){border-color:var(--ac-destructive);box-shadow:0 0 0 1px color-mix(in oklch,var(--ac-destructive),transparent 65%)}.group[data-disabled=true]{opacity:.5}.group:has([data-align=block-end]),.group:has([data-align=block-start]){align-items:stretch;flex-direction:column}.addon{align-items:center;color:var(--ac-muted-foreground);cursor:text;display:flex;font-size:var(--ac-text-sm);font-weight:500;gap:var(--ac-space-2);user-select:none}.addon>svg,.text>svg{flex-shrink:0;height:1rem;width:1rem}.inlineStart{order:-1;padding-left:var(--ac-space-3);padding-right:var(--ac-space-2)}.inlineEnd{order:1;padding-left:var(--ac-space-2);padding-right:var(--ac-space-3)}.blockStart{order:-1;padding:var(--ac-space-3) var(--ac-space-3) 0}.blockEnd,.blockStart{justify-content:flex-start;width:100%}.blockEnd{order:1;padding:0 var(--ac-space-3) var(--ac-space-3)}.button{box-shadow:none;flex-shrink:0}.buttonXs{border-radius:calc(var(--ac-radius-md) - 2px);font-size:var(--ac-text-xs);height:var(--ac-size-sm);padding:0 var(--ac-space-2)}.buttonSm{border-radius:calc(var(--ac-radius-md) - 1px);height:var(--ac-size-default);padding:0 var(--ac-space-3)}.buttonIconXs{border-radius:calc(var(--ac-radius-md) - 2px);height:var(--ac-size-sm);padding:0;width:var(--ac-size-sm)}.buttonIconSm{height:var(--ac-size-default);padding:0;width:var(--ac-size-default)}.text{align-items:center;color:var(--ac-muted-foreground);display:flex;font-size:var(--ac-text-sm);gap:var(--ac-space-2)}.input{background-color:transparent;border:0;border-radius:0;box-shadow:none;flex:1 1 auto;min-width:0}.input:focus-visible,.textarea:focus-visible{border-color:transparent;box-shadow:none}.textarea{background-color:transparent;border:0;border-radius:0;box-shadow:none;flex:1 1 auto;min-height:calc(var(--ac-size-default)*2);min-width:0;padding-bottom:var(--ac-space-3);padding-top:var(--ac-space-3);resize:none}",".group {\n background-color: var(--ac-background);\n border: 1px solid var(--ac-input);\n border-radius: var(--ac-radius-md);\n min-height: var(--ac-size-default);\n transition: border-color var(--ac-transition-fast),box-shadow var(--ac-transition-fast);\n align-items: center;\n width: 100%;\n display: flex;\n position: relative;\n box-shadow: 0 1px 2px #0000000a;\n}\n\n.group:focus-within {\n border-color: var(--ac-ring);\n box-shadow: 0 0 0 1px var(--ac-ring);\n}\n\n.group:has(textarea) {\n align-items: stretch;\n min-height: auto;\n}\n\n.group:has([aria-invalid=\"true\"]) {\n border-color: var(--ac-destructive);\n box-shadow: 0 0 0 1px color-mix(in oklch,var(--ac-destructive),transparent 65%);\n}\n\n.group[data-disabled=\"true\"] {\n opacity: .5;\n}\n\n.group:has([data-align=\"block-end\"]), .group:has([data-align=\"block-start\"]) {\n flex-direction: column;\n align-items: stretch;\n}\n\n.addon {\n color: var(--ac-muted-foreground);\n cursor: text;\n font-size: var(--ac-text-sm);\n align-items: center;\n gap: var(--ac-space-2);\n -webkit-user-select: none;\n user-select: none;\n font-weight: 500;\n display: flex;\n}\n\n.addon > svg, .text > svg {\n flex-shrink: 0;\n width: 1rem;\n height: 1rem;\n}\n\n.inlineStart {\n padding-left: var(--ac-space-3);\n padding-right: var(--ac-space-2);\n order: -1;\n}\n\n.inlineEnd {\n padding-left: var(--ac-space-2);\n padding-right: var(--ac-space-3);\n order: 1;\n}\n\n.blockStart {\n padding: var(--ac-space-3) var(--ac-space-3) 0;\n order: -1;\n}\n\n.blockEnd, .blockStart {\n justify-content: flex-start;\n width: 100%;\n}\n\n.blockEnd {\n padding: 0 var(--ac-space-3) var(--ac-space-3);\n order: 1;\n}\n\n.button {\n box-shadow: none;\n flex-shrink: 0;\n}\n\n.buttonXs {\n border-radius: calc(var(--ac-radius-md) - 2px);\n font-size: var(--ac-text-xs);\n height: var(--ac-size-sm);\n padding: 0 var(--ac-space-2);\n}\n\n.buttonSm {\n border-radius: calc(var(--ac-radius-md) - 1px);\n height: var(--ac-size-default);\n padding: 0 var(--ac-space-3);\n}\n\n.buttonIconXs {\n border-radius: calc(var(--ac-radius-md) - 2px);\n height: var(--ac-size-sm);\n width: var(--ac-size-sm);\n padding: 0;\n}\n\n.buttonIconSm {\n height: var(--ac-size-default);\n width: var(--ac-size-default);\n padding: 0;\n}\n\n.text {\n color: var(--ac-muted-foreground);\n font-size: var(--ac-text-sm);\n align-items: center;\n gap: var(--ac-space-2);\n display: flex;\n}\n\n.input {\n box-shadow: none;\n background-color: #0000;\n border: 0;\n border-radius: 0;\n flex: auto;\n min-width: 0;\n}\n\n.input:focus-visible, .textarea:focus-visible {\n box-shadow: none;\n border-color: #0000;\n}\n\n.textarea {\n box-shadow: none;\n min-height: calc(var(--ac-size-default)*2);\n min-width: 0;\n padding-bottom: var(--ac-space-3);\n padding-top: var(--ac-space-3);\n resize: none;\n background-color: #0000;\n border: 0;\n border-radius: 0;\n flex: auto;\n}\n"],"sourceRoot":""}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { OTPInput } from "input-otp";
|
|
1
|
+
import { OTPInput, REGEXP_ONLY_CHARS, REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS, type OTPInputProps, type SlotProps } from "input-otp";
|
|
2
2
|
import * as React from "react";
|
|
3
|
-
export { REGEXP_ONLY_CHARS, REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS }
|
|
4
|
-
export type { OTPInputProps, SlotProps }
|
|
3
|
+
export { REGEXP_ONLY_CHARS, REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS };
|
|
4
|
+
export type { OTPInputProps, SlotProps };
|
|
5
5
|
/**
|
|
6
6
|
* Props for the {@link InputOTP} component.
|
|
7
7
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-otp.d.ts","sourceRoot":"","sources":["../../../src/components/ui/input-otp.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"input-otp.d.ts","sourceRoot":"","sources":["../../../src/components/ui/input-otp.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAC,QAAQ,EAAmB,iBAAiB,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAC,MAAM,WAAW,CAAC;AAE7J,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAC,iBAAiB,EAAE,kBAAkB,EAAE,4BAA4B,EAAC,CAAC;AAC7E,YAAY,EAAC,aAAa,EAAE,SAAS,EAAC,CAAC;AAEvC;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,QAAQ,CAAC,CAAC;AAE5E;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC;IAC9E,wEAAwE;IACxE,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,MAAM,sBAAsB,GAAG,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,QAAA,MAAM,QAAQ,wFASb,CAAC;AAEF;;;;;;;;;;;;;;;;;GAiBG;AACH,QAAA,MAAM,aAAa,mKAQlB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,YAAY,0FA2BjB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,QAAA,MAAM,iBAAiB,mKAUtB,CAAC;AAOF,OAAO,EAAC,QAAQ,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAC,CAAC"}
|
|
@@ -2,23 +2,23 @@
|
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { OTPInput, OTPInputContext, REGEXP_ONLY_CHARS, REGEXP_ONLY_DIGITS, REGEXP_ONLY_DIGITS_AND_CHARS } from "input-otp";
|
|
4
4
|
import { Minus } from "lucide-react";
|
|
5
|
-
import { forwardRef, useContext } from "react";
|
|
6
5
|
import { cn } from "../../lib/utilities.js";
|
|
7
6
|
import input_otp_module from "./input-otp.module.js";
|
|
7
|
+
import * as __rspack_external_react from "react";
|
|
8
8
|
const DEFAULT_SLOT_PLACEHOLDER_CHARACTER = "·";
|
|
9
|
-
const InputOTP = /*#__PURE__*/ forwardRef(({ className, containerClassName, ...props }, ref)=>/*#__PURE__*/ jsx(OTPInput, {
|
|
9
|
+
const InputOTP = /*#__PURE__*/ __rspack_external_react.forwardRef(({ className, containerClassName, ...props }, ref)=>/*#__PURE__*/ jsx(OTPInput, {
|
|
10
10
|
ref: ref,
|
|
11
11
|
containerClassName: cn(input_otp_module.container, containerClassName),
|
|
12
12
|
className: cn(input_otp_module.input, className),
|
|
13
13
|
...props
|
|
14
14
|
}));
|
|
15
|
-
const InputOTPGroup = /*#__PURE__*/ forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ jsx("div", {
|
|
15
|
+
const InputOTPGroup = /*#__PURE__*/ __rspack_external_react.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ jsx("div", {
|
|
16
16
|
ref: ref,
|
|
17
17
|
className: cn(input_otp_module.group, className),
|
|
18
18
|
...props
|
|
19
19
|
}));
|
|
20
|
-
const InputOTPSlot = /*#__PURE__*/ forwardRef(({ index, className, ...props }, ref)=>{
|
|
21
|
-
const inputOTPContext = useContext(OTPInputContext);
|
|
20
|
+
const InputOTPSlot = /*#__PURE__*/ __rspack_external_react.forwardRef(({ index, className, ...props }, ref)=>{
|
|
21
|
+
const inputOTPContext = __rspack_external_react.useContext(OTPInputContext);
|
|
22
22
|
const slot = inputOTPContext.slots[index];
|
|
23
23
|
if (!slot) throw new Error(`InputOTPSlot could not find slot at index ${index}.`);
|
|
24
24
|
const { char, hasFakeCaret, isActive, placeholderChar } = slot;
|
|
@@ -39,7 +39,7 @@ const InputOTPSlot = /*#__PURE__*/ forwardRef(({ index, className, ...props }, r
|
|
|
39
39
|
]
|
|
40
40
|
});
|
|
41
41
|
});
|
|
42
|
-
const InputOTPSeparator = /*#__PURE__*/ forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ jsx("div", {
|
|
42
|
+
const InputOTPSeparator = /*#__PURE__*/ __rspack_external_react.forwardRef(({ className, ...props }, ref)=>/*#__PURE__*/ jsx("div", {
|
|
43
43
|
ref: ref,
|
|
44
44
|
role: "separator",
|
|
45
45
|
className: cn(input_otp_module.separator, className),
|