@charcoal-ui/react 6.0.0-rc.7 → 6.0.0-rc.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_lib/createDivComponent.cjs +20 -0
- package/dist/_lib/createDivComponent.cjs.map +1 -0
- package/dist/_lib/createDivComponent.js +19 -0
- package/dist/_lib/createDivComponent.js.map +1 -0
- package/dist/_lib/index.cjs +22 -0
- package/dist/_lib/index.cjs.map +1 -0
- package/dist/_lib/index.js +20 -0
- package/dist/_lib/index.js.map +1 -0
- package/dist/_lib/useClassNames.cjs +15 -0
- package/dist/_lib/useClassNames.cjs.map +1 -0
- package/dist/_lib/useClassNames.js +14 -0
- package/dist/_lib/useClassNames.js.map +1 -0
- package/dist/_lib/useForwardedRef.cjs +19 -0
- package/dist/_lib/useForwardedRef.cjs.map +1 -0
- package/dist/_lib/useForwardedRef.js +17 -0
- package/dist/_lib/useForwardedRef.js.map +1 -0
- package/dist/_lib/useIsomorphicLayoutEffect.cjs +13 -0
- package/dist/_lib/useIsomorphicLayoutEffect.cjs.map +1 -0
- package/dist/_lib/useIsomorphicLayoutEffect.js +12 -0
- package/dist/_lib/useIsomorphicLayoutEffect.js.map +1 -0
- package/dist/_virtual/_rolldown/runtime.cjs +30 -0
- package/dist/components/Button/index2.cjs +26 -0
- package/dist/components/Button/index2.cjs.map +1 -0
- package/dist/components/Button/index2.js +24 -0
- package/dist/components/Button/index2.js.map +1 -0
- package/dist/components/Carousel/CarouselItem.cjs +46 -0
- package/dist/components/Carousel/CarouselItem.cjs.map +1 -0
- package/dist/components/Carousel/CarouselItem.js +45 -0
- package/dist/components/Carousel/CarouselItem.js.map +1 -0
- package/dist/components/Carousel/carouselStore.cjs +38 -0
- package/dist/components/Carousel/carouselStore.cjs.map +1 -0
- package/dist/components/Carousel/carouselStore.js +37 -0
- package/dist/components/Carousel/carouselStore.js.map +1 -0
- package/dist/components/Carousel/index2.cjs +145 -0
- package/dist/components/Carousel/index2.cjs.map +1 -0
- package/dist/components/Carousel/index2.js +144 -0
- package/dist/components/Carousel/index2.js.map +1 -0
- package/dist/components/Carousel/intersectionObserver.cjs +46 -0
- package/dist/components/Carousel/intersectionObserver.cjs.map +1 -0
- package/dist/components/Carousel/intersectionObserver.js +45 -0
- package/dist/components/Carousel/intersectionObserver.js.map +1 -0
- package/dist/components/Carousel/resizeObserver.cjs +34 -0
- package/dist/components/Carousel/resizeObserver.cjs.map +1 -0
- package/dist/components/Carousel/resizeObserver.js +33 -0
- package/dist/components/Carousel/resizeObserver.js.map +1 -0
- package/dist/components/Carousel/store.cjs +24 -0
- package/dist/components/Carousel/store.cjs.map +1 -0
- package/dist/components/Carousel/store.js +23 -0
- package/dist/components/Carousel/store.js.map +1 -0
- package/dist/components/Carousel/useCarouselScroller.cjs +149 -0
- package/dist/components/Carousel/useCarouselScroller.cjs.map +1 -0
- package/dist/components/Carousel/useCarouselScroller.js +148 -0
- package/dist/components/Carousel/useCarouselScroller.js.map +1 -0
- package/dist/components/Checkbox/CheckboxInput/index2.cjs +29 -0
- package/dist/components/Checkbox/CheckboxInput/index2.cjs.map +1 -0
- package/dist/components/Checkbox/CheckboxInput/index2.js +28 -0
- package/dist/components/Checkbox/CheckboxInput/index2.js.map +1 -0
- package/dist/components/Checkbox/CheckboxWithLabel.cjs +23 -0
- package/dist/components/Checkbox/CheckboxWithLabel.cjs.map +1 -0
- package/dist/components/Checkbox/CheckboxWithLabel.js +21 -0
- package/dist/components/Checkbox/CheckboxWithLabel.js.map +1 -0
- package/dist/components/Checkbox/index2.cjs +34 -0
- package/dist/components/Checkbox/index2.cjs.map +1 -0
- package/dist/components/Checkbox/index2.js +33 -0
- package/dist/components/Checkbox/index2.js.map +1 -0
- package/dist/components/Clickable/index2.cjs +21 -0
- package/dist/components/Clickable/index2.cjs.map +1 -0
- package/dist/components/Clickable/index2.js +19 -0
- package/dist/components/Clickable/index2.js.map +1 -0
- package/dist/components/DropdownSelector/DropdownMenuItem/index2.cjs +44 -0
- package/dist/components/DropdownSelector/DropdownMenuItem/index2.cjs.map +1 -0
- package/dist/components/DropdownSelector/DropdownMenuItem/index2.js +43 -0
- package/dist/components/DropdownSelector/DropdownMenuItem/index2.js.map +1 -0
- package/dist/components/DropdownSelector/DropdownPopover.cjs +41 -0
- package/dist/components/DropdownSelector/DropdownPopover.cjs.map +1 -0
- package/dist/components/DropdownSelector/DropdownPopover.js +40 -0
- package/dist/components/DropdownSelector/DropdownPopover.js.map +1 -0
- package/dist/components/DropdownSelector/ListItem/index2.cjs +19 -0
- package/dist/components/DropdownSelector/ListItem/index2.cjs.map +1 -0
- package/dist/components/DropdownSelector/ListItem/index2.js +18 -0
- package/dist/components/DropdownSelector/ListItem/index2.js.map +1 -0
- package/dist/components/DropdownSelector/MenuItem/index.cjs +30 -0
- package/dist/components/DropdownSelector/MenuItem/index.cjs.map +1 -0
- package/dist/components/DropdownSelector/MenuItem/index.js +29 -0
- package/dist/components/DropdownSelector/MenuItem/index.js.map +1 -0
- package/dist/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.cjs +30 -0
- package/dist/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.cjs.map +1 -0
- package/dist/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.js +29 -0
- package/dist/components/DropdownSelector/MenuItem/internals/handleFocusByKeyBoard.js.map +1 -0
- package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.cjs +53 -0
- package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.cjs.map +1 -0
- package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.js +52 -0
- package/dist/components/DropdownSelector/MenuItem/internals/useMenuItemHandleKeyDown.js.map +1 -0
- package/dist/components/DropdownSelector/MenuItemGroup/index2.cjs +20 -0
- package/dist/components/DropdownSelector/MenuItemGroup/index2.cjs.map +1 -0
- package/dist/components/DropdownSelector/MenuItemGroup/index2.js +19 -0
- package/dist/components/DropdownSelector/MenuItemGroup/index2.js.map +1 -0
- package/dist/components/DropdownSelector/MenuList/MenuListContext.cjs +15 -0
- package/dist/components/DropdownSelector/MenuList/MenuListContext.cjs.map +1 -0
- package/dist/components/DropdownSelector/MenuList/MenuListContext.js +14 -0
- package/dist/components/DropdownSelector/MenuList/MenuListContext.js.map +1 -0
- package/dist/components/DropdownSelector/MenuList/index2.cjs +32 -0
- package/dist/components/DropdownSelector/MenuList/index2.cjs.map +1 -0
- package/dist/components/DropdownSelector/MenuList/index2.js +31 -0
- package/dist/components/DropdownSelector/MenuList/index2.js.map +1 -0
- package/dist/components/DropdownSelector/MenuList/internals/getValuesRecursive.cjs +34 -0
- package/dist/components/DropdownSelector/MenuList/internals/getValuesRecursive.cjs.map +1 -0
- package/dist/components/DropdownSelector/MenuList/internals/getValuesRecursive.js +32 -0
- package/dist/components/DropdownSelector/MenuList/internals/getValuesRecursive.js.map +1 -0
- package/dist/components/DropdownSelector/Popover/index2.cjs +71 -0
- package/dist/components/DropdownSelector/Popover/index2.cjs.map +1 -0
- package/dist/components/DropdownSelector/Popover/index2.js +70 -0
- package/dist/components/DropdownSelector/Popover/index2.js.map +1 -0
- package/dist/components/DropdownSelector/Popover/usePreventScroll.cjs +27 -0
- package/dist/components/DropdownSelector/Popover/usePreventScroll.cjs.map +1 -0
- package/dist/components/DropdownSelector/Popover/usePreventScroll.js +26 -0
- package/dist/components/DropdownSelector/Popover/usePreventScroll.js.map +1 -0
- package/dist/components/DropdownSelector/index2.cjs +113 -0
- package/dist/components/DropdownSelector/index2.cjs.map +1 -0
- package/dist/components/DropdownSelector/index2.js +111 -0
- package/dist/components/DropdownSelector/index2.js.map +1 -0
- package/dist/components/DropdownSelector/utils/findPreviewRecursive.cjs +34 -0
- package/dist/components/DropdownSelector/utils/findPreviewRecursive.cjs.map +1 -0
- package/dist/components/DropdownSelector/utils/findPreviewRecursive.js +32 -0
- package/dist/components/DropdownSelector/utils/findPreviewRecursive.js.map +1 -0
- package/dist/components/FieldLabel/index2.cjs +35 -0
- package/dist/components/FieldLabel/index2.cjs.map +1 -0
- package/dist/components/FieldLabel/index2.js +33 -0
- package/dist/components/FieldLabel/index2.js.map +1 -0
- package/dist/components/HintText/index2.cjs +25 -0
- package/dist/components/HintText/index2.cjs.map +1 -0
- package/dist/components/HintText/index2.js +24 -0
- package/dist/components/HintText/index2.js.map +1 -0
- package/dist/components/Icon/index.cjs +39 -0
- package/dist/components/Icon/index.cjs.map +1 -0
- package/dist/components/Icon/index.js +37 -0
- package/dist/components/Icon/index.js.map +1 -0
- package/dist/components/IconButton/index2.cjs +46 -0
- package/dist/components/IconButton/index2.cjs.map +1 -0
- package/dist/components/IconButton/index2.js +44 -0
- package/dist/components/IconButton/index2.js.map +1 -0
- package/dist/components/LoadingSpinner/index2.cjs +43 -0
- package/dist/components/LoadingSpinner/index2.cjs.map +1 -0
- package/dist/components/LoadingSpinner/index2.js +41 -0
- package/dist/components/LoadingSpinner/index2.js.map +1 -0
- package/dist/components/Modal/Dialog/index2.cjs +30 -0
- package/dist/components/Modal/Dialog/index2.cjs.map +1 -0
- package/dist/components/Modal/Dialog/index2.js +28 -0
- package/dist/components/Modal/Dialog/index2.js.map +1 -0
- package/dist/components/Modal/ModalBackgroundContext.cjs +14 -0
- package/dist/components/Modal/ModalBackgroundContext.cjs.map +1 -0
- package/dist/components/Modal/ModalBackgroundContext.js +12 -0
- package/dist/components/Modal/ModalBackgroundContext.js.map +1 -0
- package/dist/components/Modal/ModalPlumbing2.cjs +30 -0
- package/dist/components/Modal/ModalPlumbing2.cjs.map +1 -0
- package/dist/components/Modal/ModalPlumbing2.js +26 -0
- package/dist/components/Modal/ModalPlumbing2.js.map +1 -0
- package/dist/components/Modal/index2.cjs +121 -0
- package/dist/components/Modal/index2.cjs.map +1 -0
- package/dist/components/Modal/index2.js +118 -0
- package/dist/components/Modal/index2.js.map +1 -0
- package/dist/components/Modal/useCustomModalOverlay.cjs +48 -0
- package/dist/components/Modal/useCustomModalOverlay.cjs.map +1 -0
- package/dist/components/Modal/useCustomModalOverlay.js +45 -0
- package/dist/components/Modal/useCustomModalOverlay.js.map +1 -0
- package/dist/components/Modal/useTransitionPresence.cjs +57 -0
- package/dist/components/Modal/useTransitionPresence.cjs.map +1 -0
- package/dist/components/Modal/useTransitionPresence.js +56 -0
- package/dist/components/Modal/useTransitionPresence.js.map +1 -0
- package/dist/components/MultiSelect/context.cjs +19 -0
- package/dist/components/MultiSelect/context.cjs.map +1 -0
- package/dist/components/MultiSelect/context.js +18 -0
- package/dist/components/MultiSelect/context.js.map +1 -0
- package/dist/components/MultiSelect/index2.cjs +97 -0
- package/dist/components/MultiSelect/index2.cjs.map +1 -0
- package/dist/components/MultiSelect/index2.js +93 -0
- package/dist/components/MultiSelect/index2.js.map +1 -0
- package/dist/components/Pagination/PaginationContext.cjs +16 -0
- package/dist/components/Pagination/PaginationContext.cjs.map +1 -0
- package/dist/components/Pagination/PaginationContext.js +14 -0
- package/dist/components/Pagination/PaginationContext.js.map +1 -0
- package/dist/components/Pagination/helper.cjs +63 -0
- package/dist/components/Pagination/helper.cjs.map +1 -0
- package/dist/components/Pagination/helper.js +61 -0
- package/dist/components/Pagination/helper.js.map +1 -0
- package/dist/components/Pagination/index2.cjs +301 -0
- package/dist/components/Pagination/index2.cjs.map +1 -0
- package/dist/components/Pagination/index2.js +288 -0
- package/dist/components/Pagination/index2.js.map +1 -0
- package/dist/components/Radio/RadioGroup/index2.cjs +49 -0
- package/dist/components/Radio/RadioGroup/index2.cjs.map +1 -0
- package/dist/components/Radio/RadioGroup/index2.js +47 -0
- package/dist/components/Radio/RadioGroup/index2.js.map +1 -0
- package/dist/components/Radio/RadioGroupContext.cjs +20 -0
- package/dist/components/Radio/RadioGroupContext.cjs.map +1 -0
- package/dist/components/Radio/RadioGroupContext.js +18 -0
- package/dist/components/Radio/RadioGroupContext.js.map +1 -0
- package/dist/components/Radio/RadioInput/index2.cjs +27 -0
- package/dist/components/Radio/RadioInput/index2.cjs.map +1 -0
- package/dist/components/Radio/RadioInput/index2.js +26 -0
- package/dist/components/Radio/RadioInput/index2.js.map +1 -0
- package/dist/components/Radio/index2.cjs +42 -0
- package/dist/components/Radio/index2.cjs.map +1 -0
- package/dist/components/Radio/index2.js +39 -0
- package/dist/components/Radio/index2.js.map +1 -0
- package/dist/components/SegmentedControl/RadioGroupContext.cjs +24 -0
- package/dist/components/SegmentedControl/RadioGroupContext.cjs.map +1 -0
- package/dist/components/SegmentedControl/RadioGroupContext.js +21 -0
- package/dist/components/SegmentedControl/RadioGroupContext.js.map +1 -0
- package/dist/components/SegmentedControl/index2.cjs +72 -0
- package/dist/components/SegmentedControl/index2.cjs.map +1 -0
- package/dist/components/SegmentedControl/index2.js +70 -0
- package/dist/components/SegmentedControl/index2.js.map +1 -0
- package/dist/components/Switch/SwitchInput/index2.cjs +25 -0
- package/dist/components/Switch/SwitchInput/index2.cjs.map +1 -0
- package/dist/components/Switch/SwitchInput/index2.js +24 -0
- package/dist/components/Switch/SwitchInput/index2.js.map +1 -0
- package/dist/components/Switch/SwitchWithLabel.cjs +23 -0
- package/dist/components/Switch/SwitchWithLabel.cjs.map +1 -0
- package/dist/components/Switch/SwitchWithLabel.js +21 -0
- package/dist/components/Switch/SwitchWithLabel.js.map +1 -0
- package/dist/components/Switch/index2.cjs +37 -0
- package/dist/components/Switch/index2.cjs.map +1 -0
- package/dist/components/Switch/index2.js +36 -0
- package/dist/components/Switch/index2.js.map +1 -0
- package/dist/components/TagItem/index2.cjs +57 -0
- package/dist/components/TagItem/index2.cjs.map +1 -0
- package/dist/components/TagItem/index2.js +55 -0
- package/dist/components/TagItem/index2.js.map +1 -0
- package/dist/components/TextArea/index2.cjs +134 -0
- package/dist/components/TextArea/index2.cjs.map +1 -0
- package/dist/components/TextArea/index2.js +133 -0
- package/dist/components/TextArea/index2.js.map +1 -0
- package/dist/components/TextEllipsis/helper.cjs +31 -0
- package/dist/components/TextEllipsis/helper.cjs.map +1 -0
- package/dist/components/TextEllipsis/helper.js +30 -0
- package/dist/components/TextEllipsis/helper.js.map +1 -0
- package/dist/components/TextEllipsis/index2.cjs +119 -0
- package/dist/components/TextEllipsis/index2.cjs.map +1 -0
- package/dist/components/TextEllipsis/index2.js +114 -0
- package/dist/components/TextEllipsis/index2.js.map +1 -0
- package/dist/components/TextField/AssistiveText/index2.cjs +10 -0
- package/dist/components/TextField/AssistiveText/index2.cjs.map +1 -0
- package/dist/components/TextField/AssistiveText/index2.js +10 -0
- package/dist/components/TextField/AssistiveText/index2.js.map +1 -0
- package/dist/components/TextField/index2.cjs +101 -0
- package/dist/components/TextField/index2.cjs.map +1 -0
- package/dist/components/TextField/index2.js +100 -0
- package/dist/components/TextField/index2.js.map +1 -0
- package/dist/components/TextField/useFocusWithClick.cjs +23 -0
- package/dist/components/TextField/useFocusWithClick.cjs.map +1 -0
- package/dist/components/TextField/useFocusWithClick.js +22 -0
- package/dist/components/TextField/useFocusWithClick.js.map +1 -0
- package/dist/core/CharcoalProvider.cjs +16 -0
- package/dist/core/CharcoalProvider.cjs.map +1 -0
- package/dist/core/CharcoalProvider.js +14 -0
- package/dist/core/CharcoalProvider.js.map +1 -0
- package/dist/core/OverlayProvider.js +4 -0
- package/dist/core/SSRProvider.cjs +15 -0
- package/dist/core/SSRProvider.cjs.map +1 -0
- package/dist/core/SSRProvider.js +14 -0
- package/dist/core/SSRProvider.js.map +1 -0
- package/dist/core/SetThemeScript.cjs +45 -0
- package/dist/core/SetThemeScript.cjs.map +1 -0
- package/dist/core/SetThemeScript.js +43 -0
- package/dist/core/SetThemeScript.js.map +1 -0
- package/dist/core/themeHelper.cjs +154 -0
- package/dist/core/themeHelper.cjs.map +1 -0
- package/dist/core/themeHelper.js +143 -0
- package/dist/core/themeHelper.js.map +1 -0
- package/dist/index.cjs +81 -12
- package/dist/index.css +1536 -1530
- package/dist/index.js +31 -12
- package/dist/layered.css +1508 -1502
- package/dist/layered.css.map +1 -1
- package/package.json +5 -5
- package/src/__tests__/css-shorthand-safety.test.ts +150 -0
- package/src/components/Button/__snapshots__/index.css.snap +8 -3
- package/src/components/Button/index.css +8 -3
- package/src/components/LoadingSpinner/__snapshots__/index.css.snap +1 -2
- package/src/components/LoadingSpinner/index.css +1 -2
- package/src/components/Pagination/__snapshots__/index.css.snap +3 -1
- package/src/components/Pagination/index.css +3 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
const require_useIsomorphicLayoutEffect = require('../../_lib/useIsomorphicLayoutEffect.cjs');
|
|
4
|
+
let react = require("react");
|
|
5
|
+
|
|
6
|
+
//#region src/components/Carousel/useCarouselScroller.ts
|
|
7
|
+
const INTERACTION_EVENTS = [
|
|
8
|
+
"pointerdown",
|
|
9
|
+
"wheel",
|
|
10
|
+
"touchstart"
|
|
11
|
+
];
|
|
12
|
+
function useCarouselScroller(scrollerRef, store, itemCount, options) {
|
|
13
|
+
const { align, offset, scrollStep, onScroll, onResize, onScrollStateChange } = options;
|
|
14
|
+
const initialScrollActive = (0, react.useRef)(true);
|
|
15
|
+
const callbacksRef = (0, react.useRef)({
|
|
16
|
+
onScroll,
|
|
17
|
+
onResize,
|
|
18
|
+
onScrollStateChange
|
|
19
|
+
});
|
|
20
|
+
(0, react.useEffect)(() => {
|
|
21
|
+
callbacksRef.current = {
|
|
22
|
+
onScroll,
|
|
23
|
+
onResize,
|
|
24
|
+
onScrollStateChange
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
const prevCanScroll = (0, react.useRef)(null);
|
|
28
|
+
const updateScrollState = (0, react.useCallback)(() => {
|
|
29
|
+
const el = scrollerRef.current;
|
|
30
|
+
if (!el) return;
|
|
31
|
+
const { scrollLeft, scrollWidth, clientWidth } = el;
|
|
32
|
+
const canPrev = scrollLeft > 1;
|
|
33
|
+
const canNext = scrollLeft < scrollWidth - clientWidth - 1;
|
|
34
|
+
store.dispatch({
|
|
35
|
+
type: "setScrollState",
|
|
36
|
+
canPrev,
|
|
37
|
+
canNext
|
|
38
|
+
});
|
|
39
|
+
const canScroll = canPrev || canNext;
|
|
40
|
+
if (prevCanScroll.current !== canScroll) {
|
|
41
|
+
prevCanScroll.current = canScroll;
|
|
42
|
+
callbacksRef.current.onScrollStateChange?.(canScroll);
|
|
43
|
+
}
|
|
44
|
+
}, [scrollerRef, store]);
|
|
45
|
+
const applyInitialScroll = (0, react.useCallback)(() => {
|
|
46
|
+
const el = scrollerRef.current;
|
|
47
|
+
if (!el || !initialScrollActive.current) return;
|
|
48
|
+
const maxScroll = el.scrollWidth - el.clientWidth;
|
|
49
|
+
let left = offset;
|
|
50
|
+
switch (align) {
|
|
51
|
+
case "center":
|
|
52
|
+
left = maxScroll / 2 + offset;
|
|
53
|
+
break;
|
|
54
|
+
case "right":
|
|
55
|
+
left = maxScroll + offset;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
el.scrollTo({
|
|
59
|
+
left: Math.max(0, Math.min(left, maxScroll)),
|
|
60
|
+
behavior: "instant"
|
|
61
|
+
});
|
|
62
|
+
}, [
|
|
63
|
+
scrollerRef,
|
|
64
|
+
align,
|
|
65
|
+
offset
|
|
66
|
+
]);
|
|
67
|
+
require_useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
|
|
68
|
+
const el = scrollerRef.current;
|
|
69
|
+
if (!el) return;
|
|
70
|
+
updateScrollState();
|
|
71
|
+
const handleScroll = () => {
|
|
72
|
+
updateScrollState();
|
|
73
|
+
callbacksRef.current.onScroll?.(el.scrollLeft);
|
|
74
|
+
};
|
|
75
|
+
el.addEventListener("scroll", handleScroll, { passive: true });
|
|
76
|
+
return () => el.removeEventListener("scroll", handleScroll);
|
|
77
|
+
}, [
|
|
78
|
+
scrollerRef,
|
|
79
|
+
updateScrollState,
|
|
80
|
+
itemCount
|
|
81
|
+
]);
|
|
82
|
+
require_useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
|
|
83
|
+
const el = scrollerRef.current;
|
|
84
|
+
if (!el || typeof ResizeObserver === "undefined") return;
|
|
85
|
+
const ro = new ResizeObserver(() => {
|
|
86
|
+
applyInitialScroll();
|
|
87
|
+
updateScrollState();
|
|
88
|
+
callbacksRef.current.onResize?.(el.clientWidth);
|
|
89
|
+
});
|
|
90
|
+
ro.observe(el);
|
|
91
|
+
return () => ro.disconnect();
|
|
92
|
+
}, [
|
|
93
|
+
scrollerRef,
|
|
94
|
+
applyInitialScroll,
|
|
95
|
+
updateScrollState
|
|
96
|
+
]);
|
|
97
|
+
require_useIsomorphicLayoutEffect.useIsomorphicLayoutEffect(() => {
|
|
98
|
+
initialScrollActive.current = true;
|
|
99
|
+
applyInitialScroll();
|
|
100
|
+
updateScrollState();
|
|
101
|
+
const el = scrollerRef.current;
|
|
102
|
+
if (!el) return;
|
|
103
|
+
const stop = () => {
|
|
104
|
+
initialScrollActive.current = false;
|
|
105
|
+
};
|
|
106
|
+
for (const type of INTERACTION_EVENTS) el.addEventListener(type, stop, true);
|
|
107
|
+
return () => {
|
|
108
|
+
for (const type of INTERACTION_EVENTS) el.removeEventListener(type, stop, true);
|
|
109
|
+
};
|
|
110
|
+
}, [
|
|
111
|
+
scrollerRef,
|
|
112
|
+
applyInitialScroll,
|
|
113
|
+
updateScrollState,
|
|
114
|
+
itemCount
|
|
115
|
+
]);
|
|
116
|
+
const onItemResize = (0, react.useCallback)(() => {
|
|
117
|
+
applyInitialScroll();
|
|
118
|
+
updateScrollState();
|
|
119
|
+
}, [applyInitialScroll, updateScrollState]);
|
|
120
|
+
const resetScroll = (0, react.useCallback)(() => {
|
|
121
|
+
initialScrollActive.current = true;
|
|
122
|
+
applyInitialScroll();
|
|
123
|
+
updateScrollState();
|
|
124
|
+
}, [applyInitialScroll, updateScrollState]);
|
|
125
|
+
return {
|
|
126
|
+
scrollByStep: (0, react.useCallback)((direction) => {
|
|
127
|
+
const el = scrollerRef.current;
|
|
128
|
+
if (!el) return;
|
|
129
|
+
initialScrollActive.current = false;
|
|
130
|
+
const { clientWidth, scrollWidth, scrollLeft } = el;
|
|
131
|
+
const delta = typeof scrollStep === "function" ? scrollStep({
|
|
132
|
+
clientWidth,
|
|
133
|
+
scrollWidth,
|
|
134
|
+
scrollLeft,
|
|
135
|
+
direction
|
|
136
|
+
}) : clientWidth * scrollStep;
|
|
137
|
+
el.scrollBy({
|
|
138
|
+
left: direction === "next" ? delta : -delta,
|
|
139
|
+
behavior: "smooth"
|
|
140
|
+
});
|
|
141
|
+
}, [scrollerRef, scrollStep]),
|
|
142
|
+
onItemResize,
|
|
143
|
+
resetScroll
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
//#endregion
|
|
148
|
+
exports.useCarouselScroller = useCarouselScroller;
|
|
149
|
+
//# sourceMappingURL=useCarouselScroller.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCarouselScroller.cjs","names":["useCallback","useEffect","useRef","RefObject","useIsomorphicLayoutEffect","CarouselStore","ScrollAlign","ScrollStep","INTERACTION_EVENTS","const","CarouselScrollerOptions","Readonly","align","offset","scrollStep","onScroll","left","onResize","width","onScrollStateChange","canScroll","CarouselScrollerResult","scrollByStep","direction","onItemResize","resetScroll","useCarouselScroller","scrollerRef","HTMLElement","store","itemCount","options","initialScrollActive","callbacksRef","current","prevCanScroll","updateScrollState","el","scrollLeft","scrollWidth","clientWidth","canPrev","canNext","dispatch","type","applyInitialScroll","maxScroll","scrollTo","Math","max","min","behavior","handleScroll","addEventListener","passive","removeEventListener","ResizeObserver","ro","observe","disconnect","stop","delta","scrollBy"],"sources":["../../../src/components/Carousel/useCarouselScroller.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, type RefObject } from 'react'\nimport { useIsomorphicLayoutEffect } from '../../_lib/useIsomorphicLayoutEffect'\nimport type { CarouselStore } from './carouselStore'\nimport type { ScrollAlign, ScrollStep } from './index'\n\nconst INTERACTION_EVENTS = ['pointerdown', 'wheel', 'touchstart'] as const\n\nexport type CarouselScrollerOptions = Readonly<{\n align: ScrollAlign\n offset: number\n scrollStep: ScrollStep\n onScroll?: (left: number) => void\n onResize?: (width: number) => void\n onScrollStateChange?: (canScroll: boolean) => void\n}>\n\nexport type CarouselScrollerResult = Readonly<{\n scrollByStep: (direction: 'prev' | 'next') => void\n onItemResize: () => void\n resetScroll: () => void\n}>\n\nexport function useCarouselScroller(\n scrollerRef: RefObject<HTMLElement | null>,\n store: CarouselStore,\n itemCount: number,\n options: CarouselScrollerOptions,\n): CarouselScrollerResult {\n const { align, offset, scrollStep, onScroll, onResize, onScrollStateChange } =\n options\n const initialScrollActive = useRef(true)\n\n // コールバックは最新参照を ref に保持し、リスナーの貼り直しを避ける。\n const callbacksRef = useRef({ onScroll, onResize, onScrollStateChange })\n useEffect(() => {\n callbacksRef.current = { onScroll, onResize, onScrollStateChange }\n })\n\n // onScrollStateChange は canScroll(=canPrev||canNext) が変化した時だけ発火する。\n const prevCanScroll = useRef<boolean | null>(null)\n\n const updateScrollState = useCallback(() => {\n const el = scrollerRef.current\n if (!el) return\n const { scrollLeft, scrollWidth, clientWidth } = el\n const canPrev = scrollLeft > 1\n const canNext = scrollLeft < scrollWidth - clientWidth - 1\n store.dispatch({ type: 'setScrollState', canPrev, canNext })\n const canScroll = canPrev || canNext\n if (prevCanScroll.current !== canScroll) {\n prevCanScroll.current = canScroll\n callbacksRef.current.onScrollStateChange?.(canScroll)\n }\n }, [scrollerRef, store])\n\n const applyInitialScroll = useCallback(() => {\n const el = scrollerRef.current\n if (!el || !initialScrollActive.current) return\n const maxScroll = el.scrollWidth - el.clientWidth\n let left = offset\n switch (align) {\n case 'center':\n left = maxScroll / 2 + offset\n break\n case 'right':\n left = maxScroll + offset\n break\n }\n // scrollLeft 代入は CSS の scroll-behavior: smooth の対象になり\n // 初期位置決めがアニメーションしてしまうため、instant で確定させる。\n el.scrollTo({\n left: Math.max(0, Math.min(left, maxScroll)),\n behavior: 'instant',\n })\n }, [scrollerRef, align, offset])\n\n // canPrev/canNext: scroll で更新。onScroll もここから発火。itemCount 変化で貼り直し。\n useIsomorphicLayoutEffect(() => {\n const el = scrollerRef.current\n if (!el) return\n updateScrollState()\n const handleScroll = () => {\n updateScrollState()\n callbacksRef.current.onScroll?.(el.scrollLeft)\n }\n el.addEventListener('scroll', handleScroll, { passive: true })\n return () => el.removeEventListener('scroll', handleScroll)\n }, [scrollerRef, updateScrollState, itemCount])\n\n // scroller 幅の変化で onResize(clientWidth) を通知し、状態と初期位置を再計算する。\n useIsomorphicLayoutEffect(() => {\n const el = scrollerRef.current\n if (!el || typeof ResizeObserver === 'undefined') return\n const ro = new ResizeObserver(() => {\n applyInitialScroll()\n updateScrollState()\n callbacksRef.current.onResize?.(el.clientWidth)\n })\n ro.observe(el)\n return () => ro.disconnect()\n }, [scrollerRef, applyInitialScroll, updateScrollState])\n\n // 初期スクロール適用 + ユーザー操作で打ち切り。\n useIsomorphicLayoutEffect(() => {\n initialScrollActive.current = true\n applyInitialScroll()\n // 初期位置適用後の scrollLeft で canPrev/canNext を確定させる\n // (center/right 初期化で scroll イベント待ちにならないように)。\n updateScrollState()\n const el = scrollerRef.current\n if (!el) return\n const stop = () => {\n initialScrollActive.current = false\n }\n for (const type of INTERACTION_EVENTS) el.addEventListener(type, stop, true)\n return () => {\n for (const type of INTERACTION_EVENTS)\n el.removeEventListener(type, stop, true)\n }\n }, [scrollerRef, applyInitialScroll, updateScrollState, itemCount])\n\n const onItemResize = useCallback(() => {\n applyInitialScroll()\n updateScrollState()\n }, [applyInitialScroll, updateScrollState])\n\n // defaultScroll の初期位置へ戻す(命令的 API: CarouselHandlerRef.resetScroll)。\n const resetScroll = useCallback(() => {\n initialScrollActive.current = true\n applyInitialScroll()\n updateScrollState()\n }, [applyInitialScroll, updateScrollState])\n\n const scrollByStep = useCallback(\n (direction: 'prev' | 'next') => {\n const el = scrollerRef.current\n if (!el) return\n initialScrollActive.current = false\n const { clientWidth, scrollWidth, scrollLeft } = el\n // 進む量(px)の絶対値。符号は direction で付ける。\n const delta =\n typeof scrollStep === 'function'\n ? scrollStep({ clientWidth, scrollWidth, scrollLeft, direction })\n : clientWidth * scrollStep\n el.scrollBy({\n left: direction === 'next' ? delta : -delta,\n behavior: 'smooth',\n })\n },\n [scrollerRef, scrollStep],\n )\n\n return { scrollByStep, onItemResize, resetScroll }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useIsomorphicLayoutEffect } from "../../_lib/useIsomorphicLayoutEffect.js";
|
|
3
|
+
import { useCallback, useEffect, useRef } from "react";
|
|
4
|
+
|
|
5
|
+
//#region src/components/Carousel/useCarouselScroller.ts
|
|
6
|
+
const INTERACTION_EVENTS = [
|
|
7
|
+
"pointerdown",
|
|
8
|
+
"wheel",
|
|
9
|
+
"touchstart"
|
|
10
|
+
];
|
|
11
|
+
function useCarouselScroller(scrollerRef, store, itemCount, options) {
|
|
12
|
+
const { align, offset, scrollStep, onScroll, onResize, onScrollStateChange } = options;
|
|
13
|
+
const initialScrollActive = useRef(true);
|
|
14
|
+
const callbacksRef = useRef({
|
|
15
|
+
onScroll,
|
|
16
|
+
onResize,
|
|
17
|
+
onScrollStateChange
|
|
18
|
+
});
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
callbacksRef.current = {
|
|
21
|
+
onScroll,
|
|
22
|
+
onResize,
|
|
23
|
+
onScrollStateChange
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
const prevCanScroll = useRef(null);
|
|
27
|
+
const updateScrollState = useCallback(() => {
|
|
28
|
+
const el = scrollerRef.current;
|
|
29
|
+
if (!el) return;
|
|
30
|
+
const { scrollLeft, scrollWidth, clientWidth } = el;
|
|
31
|
+
const canPrev = scrollLeft > 1;
|
|
32
|
+
const canNext = scrollLeft < scrollWidth - clientWidth - 1;
|
|
33
|
+
store.dispatch({
|
|
34
|
+
type: "setScrollState",
|
|
35
|
+
canPrev,
|
|
36
|
+
canNext
|
|
37
|
+
});
|
|
38
|
+
const canScroll = canPrev || canNext;
|
|
39
|
+
if (prevCanScroll.current !== canScroll) {
|
|
40
|
+
prevCanScroll.current = canScroll;
|
|
41
|
+
callbacksRef.current.onScrollStateChange?.(canScroll);
|
|
42
|
+
}
|
|
43
|
+
}, [scrollerRef, store]);
|
|
44
|
+
const applyInitialScroll = useCallback(() => {
|
|
45
|
+
const el = scrollerRef.current;
|
|
46
|
+
if (!el || !initialScrollActive.current) return;
|
|
47
|
+
const maxScroll = el.scrollWidth - el.clientWidth;
|
|
48
|
+
let left = offset;
|
|
49
|
+
switch (align) {
|
|
50
|
+
case "center":
|
|
51
|
+
left = maxScroll / 2 + offset;
|
|
52
|
+
break;
|
|
53
|
+
case "right":
|
|
54
|
+
left = maxScroll + offset;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
el.scrollTo({
|
|
58
|
+
left: Math.max(0, Math.min(left, maxScroll)),
|
|
59
|
+
behavior: "instant"
|
|
60
|
+
});
|
|
61
|
+
}, [
|
|
62
|
+
scrollerRef,
|
|
63
|
+
align,
|
|
64
|
+
offset
|
|
65
|
+
]);
|
|
66
|
+
useIsomorphicLayoutEffect(() => {
|
|
67
|
+
const el = scrollerRef.current;
|
|
68
|
+
if (!el) return;
|
|
69
|
+
updateScrollState();
|
|
70
|
+
const handleScroll = () => {
|
|
71
|
+
updateScrollState();
|
|
72
|
+
callbacksRef.current.onScroll?.(el.scrollLeft);
|
|
73
|
+
};
|
|
74
|
+
el.addEventListener("scroll", handleScroll, { passive: true });
|
|
75
|
+
return () => el.removeEventListener("scroll", handleScroll);
|
|
76
|
+
}, [
|
|
77
|
+
scrollerRef,
|
|
78
|
+
updateScrollState,
|
|
79
|
+
itemCount
|
|
80
|
+
]);
|
|
81
|
+
useIsomorphicLayoutEffect(() => {
|
|
82
|
+
const el = scrollerRef.current;
|
|
83
|
+
if (!el || typeof ResizeObserver === "undefined") return;
|
|
84
|
+
const ro = new ResizeObserver(() => {
|
|
85
|
+
applyInitialScroll();
|
|
86
|
+
updateScrollState();
|
|
87
|
+
callbacksRef.current.onResize?.(el.clientWidth);
|
|
88
|
+
});
|
|
89
|
+
ro.observe(el);
|
|
90
|
+
return () => ro.disconnect();
|
|
91
|
+
}, [
|
|
92
|
+
scrollerRef,
|
|
93
|
+
applyInitialScroll,
|
|
94
|
+
updateScrollState
|
|
95
|
+
]);
|
|
96
|
+
useIsomorphicLayoutEffect(() => {
|
|
97
|
+
initialScrollActive.current = true;
|
|
98
|
+
applyInitialScroll();
|
|
99
|
+
updateScrollState();
|
|
100
|
+
const el = scrollerRef.current;
|
|
101
|
+
if (!el) return;
|
|
102
|
+
const stop = () => {
|
|
103
|
+
initialScrollActive.current = false;
|
|
104
|
+
};
|
|
105
|
+
for (const type of INTERACTION_EVENTS) el.addEventListener(type, stop, true);
|
|
106
|
+
return () => {
|
|
107
|
+
for (const type of INTERACTION_EVENTS) el.removeEventListener(type, stop, true);
|
|
108
|
+
};
|
|
109
|
+
}, [
|
|
110
|
+
scrollerRef,
|
|
111
|
+
applyInitialScroll,
|
|
112
|
+
updateScrollState,
|
|
113
|
+
itemCount
|
|
114
|
+
]);
|
|
115
|
+
const onItemResize = useCallback(() => {
|
|
116
|
+
applyInitialScroll();
|
|
117
|
+
updateScrollState();
|
|
118
|
+
}, [applyInitialScroll, updateScrollState]);
|
|
119
|
+
const resetScroll = useCallback(() => {
|
|
120
|
+
initialScrollActive.current = true;
|
|
121
|
+
applyInitialScroll();
|
|
122
|
+
updateScrollState();
|
|
123
|
+
}, [applyInitialScroll, updateScrollState]);
|
|
124
|
+
return {
|
|
125
|
+
scrollByStep: useCallback((direction) => {
|
|
126
|
+
const el = scrollerRef.current;
|
|
127
|
+
if (!el) return;
|
|
128
|
+
initialScrollActive.current = false;
|
|
129
|
+
const { clientWidth, scrollWidth, scrollLeft } = el;
|
|
130
|
+
const delta = typeof scrollStep === "function" ? scrollStep({
|
|
131
|
+
clientWidth,
|
|
132
|
+
scrollWidth,
|
|
133
|
+
scrollLeft,
|
|
134
|
+
direction
|
|
135
|
+
}) : clientWidth * scrollStep;
|
|
136
|
+
el.scrollBy({
|
|
137
|
+
left: direction === "next" ? delta : -delta,
|
|
138
|
+
behavior: "smooth"
|
|
139
|
+
});
|
|
140
|
+
}, [scrollerRef, scrollStep]),
|
|
141
|
+
onItemResize,
|
|
142
|
+
resetScroll
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
//#endregion
|
|
147
|
+
export { useCarouselScroller };
|
|
148
|
+
//# sourceMappingURL=useCarouselScroller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCarouselScroller.js","names":["useCallback","useEffect","useRef","RefObject","useIsomorphicLayoutEffect","CarouselStore","ScrollAlign","ScrollStep","INTERACTION_EVENTS","const","CarouselScrollerOptions","Readonly","align","offset","scrollStep","onScroll","left","onResize","width","onScrollStateChange","canScroll","CarouselScrollerResult","scrollByStep","direction","onItemResize","resetScroll","useCarouselScroller","scrollerRef","HTMLElement","store","itemCount","options","initialScrollActive","callbacksRef","current","prevCanScroll","updateScrollState","el","scrollLeft","scrollWidth","clientWidth","canPrev","canNext","dispatch","type","applyInitialScroll","maxScroll","scrollTo","Math","max","min","behavior","handleScroll","addEventListener","passive","removeEventListener","ResizeObserver","ro","observe","disconnect","stop","delta","scrollBy"],"sources":["../../../src/components/Carousel/useCarouselScroller.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, type RefObject } from 'react'\nimport { useIsomorphicLayoutEffect } from '../../_lib/useIsomorphicLayoutEffect'\nimport type { CarouselStore } from './carouselStore'\nimport type { ScrollAlign, ScrollStep } from './index'\n\nconst INTERACTION_EVENTS = ['pointerdown', 'wheel', 'touchstart'] as const\n\nexport type CarouselScrollerOptions = Readonly<{\n align: ScrollAlign\n offset: number\n scrollStep: ScrollStep\n onScroll?: (left: number) => void\n onResize?: (width: number) => void\n onScrollStateChange?: (canScroll: boolean) => void\n}>\n\nexport type CarouselScrollerResult = Readonly<{\n scrollByStep: (direction: 'prev' | 'next') => void\n onItemResize: () => void\n resetScroll: () => void\n}>\n\nexport function useCarouselScroller(\n scrollerRef: RefObject<HTMLElement | null>,\n store: CarouselStore,\n itemCount: number,\n options: CarouselScrollerOptions,\n): CarouselScrollerResult {\n const { align, offset, scrollStep, onScroll, onResize, onScrollStateChange } =\n options\n const initialScrollActive = useRef(true)\n\n // コールバックは最新参照を ref に保持し、リスナーの貼り直しを避ける。\n const callbacksRef = useRef({ onScroll, onResize, onScrollStateChange })\n useEffect(() => {\n callbacksRef.current = { onScroll, onResize, onScrollStateChange }\n })\n\n // onScrollStateChange は canScroll(=canPrev||canNext) が変化した時だけ発火する。\n const prevCanScroll = useRef<boolean | null>(null)\n\n const updateScrollState = useCallback(() => {\n const el = scrollerRef.current\n if (!el) return\n const { scrollLeft, scrollWidth, clientWidth } = el\n const canPrev = scrollLeft > 1\n const canNext = scrollLeft < scrollWidth - clientWidth - 1\n store.dispatch({ type: 'setScrollState', canPrev, canNext })\n const canScroll = canPrev || canNext\n if (prevCanScroll.current !== canScroll) {\n prevCanScroll.current = canScroll\n callbacksRef.current.onScrollStateChange?.(canScroll)\n }\n }, [scrollerRef, store])\n\n const applyInitialScroll = useCallback(() => {\n const el = scrollerRef.current\n if (!el || !initialScrollActive.current) return\n const maxScroll = el.scrollWidth - el.clientWidth\n let left = offset\n switch (align) {\n case 'center':\n left = maxScroll / 2 + offset\n break\n case 'right':\n left = maxScroll + offset\n break\n }\n // scrollLeft 代入は CSS の scroll-behavior: smooth の対象になり\n // 初期位置決めがアニメーションしてしまうため、instant で確定させる。\n el.scrollTo({\n left: Math.max(0, Math.min(left, maxScroll)),\n behavior: 'instant',\n })\n }, [scrollerRef, align, offset])\n\n // canPrev/canNext: scroll で更新。onScroll もここから発火。itemCount 変化で貼り直し。\n useIsomorphicLayoutEffect(() => {\n const el = scrollerRef.current\n if (!el) return\n updateScrollState()\n const handleScroll = () => {\n updateScrollState()\n callbacksRef.current.onScroll?.(el.scrollLeft)\n }\n el.addEventListener('scroll', handleScroll, { passive: true })\n return () => el.removeEventListener('scroll', handleScroll)\n }, [scrollerRef, updateScrollState, itemCount])\n\n // scroller 幅の変化で onResize(clientWidth) を通知し、状態と初期位置を再計算する。\n useIsomorphicLayoutEffect(() => {\n const el = scrollerRef.current\n if (!el || typeof ResizeObserver === 'undefined') return\n const ro = new ResizeObserver(() => {\n applyInitialScroll()\n updateScrollState()\n callbacksRef.current.onResize?.(el.clientWidth)\n })\n ro.observe(el)\n return () => ro.disconnect()\n }, [scrollerRef, applyInitialScroll, updateScrollState])\n\n // 初期スクロール適用 + ユーザー操作で打ち切り。\n useIsomorphicLayoutEffect(() => {\n initialScrollActive.current = true\n applyInitialScroll()\n // 初期位置適用後の scrollLeft で canPrev/canNext を確定させる\n // (center/right 初期化で scroll イベント待ちにならないように)。\n updateScrollState()\n const el = scrollerRef.current\n if (!el) return\n const stop = () => {\n initialScrollActive.current = false\n }\n for (const type of INTERACTION_EVENTS) el.addEventListener(type, stop, true)\n return () => {\n for (const type of INTERACTION_EVENTS)\n el.removeEventListener(type, stop, true)\n }\n }, [scrollerRef, applyInitialScroll, updateScrollState, itemCount])\n\n const onItemResize = useCallback(() => {\n applyInitialScroll()\n updateScrollState()\n }, [applyInitialScroll, updateScrollState])\n\n // defaultScroll の初期位置へ戻す(命令的 API: CarouselHandlerRef.resetScroll)。\n const resetScroll = useCallback(() => {\n initialScrollActive.current = true\n applyInitialScroll()\n updateScrollState()\n }, [applyInitialScroll, updateScrollState])\n\n const scrollByStep = useCallback(\n (direction: 'prev' | 'next') => {\n const el = scrollerRef.current\n if (!el) return\n initialScrollActive.current = false\n const { clientWidth, scrollWidth, scrollLeft } = el\n // 進む量(px)の絶対値。符号は direction で付ける。\n const delta =\n typeof scrollStep === 'function'\n ? scrollStep({ clientWidth, scrollWidth, scrollLeft, direction })\n : clientWidth * scrollStep\n el.scrollBy({\n left: direction === 'next' ? delta : -delta,\n behavior: 'smooth',\n })\n },\n [scrollerRef, scrollStep],\n )\n\n return { scrollByStep, onItemResize, resetScroll }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const require_runtime = require('../../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
const require_useClassNames = require('../../../_lib/useClassNames.cjs');
|
|
4
|
+
require('./index.cjs');
|
|
5
|
+
let react = require("react");
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
|
|
8
|
+
//#region src/components/Checkbox/CheckboxInput/index.tsx
|
|
9
|
+
const CheckboxInput = (0, react.forwardRef)(function CheckboxInput({ onChange, checked, invalid, className, rounded, ...props }, ref) {
|
|
10
|
+
const handleChange = (0, react.useCallback)((e) => {
|
|
11
|
+
const el = e.currentTarget;
|
|
12
|
+
onChange?.(el.checked);
|
|
13
|
+
}, [onChange]);
|
|
14
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
15
|
+
className: require_useClassNames.useClassNames("charcoal-checkbox-input", className),
|
|
16
|
+
ref,
|
|
17
|
+
type: "checkbox",
|
|
18
|
+
onChange: handleChange,
|
|
19
|
+
"aria-invalid": invalid,
|
|
20
|
+
checked,
|
|
21
|
+
"data-rounded": rounded,
|
|
22
|
+
...props
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
var CheckboxInput_default = (0, react.memo)(CheckboxInput);
|
|
26
|
+
|
|
27
|
+
//#endregion
|
|
28
|
+
exports.default = CheckboxInput_default;
|
|
29
|
+
//# sourceMappingURL=index2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.cjs","names":["forwardRef","memo","useCallback","useClassNames","CharcoalCheckboxInputProps","invalid","onChange","checked","rounded","InputProps","React","HTMLProps","HTMLInputElement","CheckboxInputProps","Omit","CheckboxInput","className","props","ref","handleChange","e","ChangeEvent","el","currentTarget","classNames"],"sources":["../../../../src/components/Checkbox/CheckboxInput/index.tsx"],"sourcesContent":["import './index.css'\n\nimport { forwardRef, memo, useCallback } from 'react'\nimport { useClassNames } from '../../../_lib/useClassNames'\n\ntype CharcoalCheckboxInputProps = {\n invalid?: boolean\n onChange?: (checked: boolean) => void\n rounded?: boolean\n}\n\ntype InputProps = React.HTMLProps<HTMLInputElement>\n\nexport type CheckboxInputProps = CharcoalCheckboxInputProps &\n Omit<InputProps, keyof CharcoalCheckboxInputProps | 'ref'>\n\nconst CheckboxInput = forwardRef<HTMLInputElement, CheckboxInputProps>(\n function CheckboxInput(\n { onChange, checked, invalid, className, rounded, ...props },\n ref,\n ) {\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const el = e.currentTarget\n onChange?.(el.checked)\n },\n [onChange],\n )\n\n const classNames = useClassNames('charcoal-checkbox-input', className)\n\n return (\n <input\n className={classNames}\n ref={ref}\n type=\"checkbox\"\n onChange={handleChange}\n aria-invalid={invalid}\n checked={checked}\n data-rounded={rounded}\n {...props}\n />\n )\n },\n)\n\nexport default memo(CheckboxInput)\n"],"mappings":";;;;;;;;AAgBA,MAAMe,sCACJ,SAASA,cACP,EAAET,UAAUC,SAASF,SAASW,WAAWR,SAAS,GAAGS,SACrDC,KACA;CACA,MAAMC,uCACHC,MAA2C;EAC1C,MAAME,KAAKF,EAAEG;EACbjB,WAAWgB,GAAGf,QAAQ;IAExB,CAACD,SACH,CAAC;CAID,OACE,2CAAC,SAAD;EACE,WAJeH,oCAAc,2BAA2Ba,UAInC;EAChBE;EACL,MAAK;EACL,UAAUC;EACV,gBAAcd;EACLE;EACT,gBAAcC;EACd,GAAIS;EACJ;EAGP;AAED,4CAAoBF,cAAc"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useClassNames } from "../../../_lib/useClassNames.js";
|
|
3
|
+
/* empty css */
|
|
4
|
+
import { forwardRef, memo, useCallback } from "react";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
|
|
7
|
+
//#region src/components/Checkbox/CheckboxInput/index.tsx
|
|
8
|
+
const CheckboxInput = forwardRef(function CheckboxInput({ onChange, checked, invalid, className, rounded, ...props }, ref) {
|
|
9
|
+
const handleChange = useCallback((e) => {
|
|
10
|
+
const el = e.currentTarget;
|
|
11
|
+
onChange?.(el.checked);
|
|
12
|
+
}, [onChange]);
|
|
13
|
+
return /* @__PURE__ */ jsx("input", {
|
|
14
|
+
className: useClassNames("charcoal-checkbox-input", className),
|
|
15
|
+
ref,
|
|
16
|
+
type: "checkbox",
|
|
17
|
+
onChange: handleChange,
|
|
18
|
+
"aria-invalid": invalid,
|
|
19
|
+
checked,
|
|
20
|
+
"data-rounded": rounded,
|
|
21
|
+
...props
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
var CheckboxInput_default = memo(CheckboxInput);
|
|
25
|
+
|
|
26
|
+
//#endregion
|
|
27
|
+
export { CheckboxInput_default as default };
|
|
28
|
+
//# sourceMappingURL=index2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.js","names":["forwardRef","memo","useCallback","useClassNames","CharcoalCheckboxInputProps","invalid","onChange","checked","rounded","InputProps","React","HTMLProps","HTMLInputElement","CheckboxInputProps","Omit","CheckboxInput","className","props","ref","handleChange","e","ChangeEvent","el","currentTarget","classNames"],"sources":["../../../../src/components/Checkbox/CheckboxInput/index.tsx"],"sourcesContent":["import './index.css'\n\nimport { forwardRef, memo, useCallback } from 'react'\nimport { useClassNames } from '../../../_lib/useClassNames'\n\ntype CharcoalCheckboxInputProps = {\n invalid?: boolean\n onChange?: (checked: boolean) => void\n rounded?: boolean\n}\n\ntype InputProps = React.HTMLProps<HTMLInputElement>\n\nexport type CheckboxInputProps = CharcoalCheckboxInputProps &\n Omit<InputProps, keyof CharcoalCheckboxInputProps | 'ref'>\n\nconst CheckboxInput = forwardRef<HTMLInputElement, CheckboxInputProps>(\n function CheckboxInput(\n { onChange, checked, invalid, className, rounded, ...props },\n ref,\n ) {\n const handleChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const el = e.currentTarget\n onChange?.(el.checked)\n },\n [onChange],\n )\n\n const classNames = useClassNames('charcoal-checkbox-input', className)\n\n return (\n <input\n className={classNames}\n ref={ref}\n type=\"checkbox\"\n onChange={handleChange}\n aria-invalid={invalid}\n checked={checked}\n data-rounded={rounded}\n {...props}\n />\n )\n },\n)\n\nexport default memo(CheckboxInput)\n"],"mappings":";;;;;;;AAgBA,MAAMe,gBAAgBf,WACpB,SAASe,cACP,EAAET,UAAUC,SAASF,SAASW,WAAWR,SAAS,GAAGS,SACrDC,KACA;CACA,MAAMC,eAAejB,aAClBkB,MAA2C;EAC1C,MAAME,KAAKF,EAAEG;EACbjB,WAAWgB,GAAGf,QAAQ;IAExB,CAACD,SACH,CAAC;CAID,OACE,oBAAC,SAAD;EACE,WAJeH,cAAc,2BAA2Ba,UAInC;EAChBE;EACL,MAAK;EACL,UAAUC;EACV,gBAAcd;EACLE;EACT,gBAAcC;EACd,GAAIS;EACJ;EAGP;AAED,4BAAehB,KAAKc,cAAc"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
const require_useClassNames = require('../../_lib/useClassNames.cjs');
|
|
4
|
+
let react = require("react");
|
|
5
|
+
react = require_runtime.__toESM(react);
|
|
6
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
|
+
|
|
8
|
+
//#region src/components/Checkbox/CheckboxWithLabel.tsx
|
|
9
|
+
const CheckboxWithLabel = react.default.memo(function CheckboxWithLabel({ className, children, input, id, disabled }) {
|
|
10
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
11
|
+
htmlFor: id,
|
|
12
|
+
"aria-disabled": disabled,
|
|
13
|
+
className: require_useClassNames.useClassNames("charcoal-checkbox__label", className),
|
|
14
|
+
children: [input, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
15
|
+
className: "charcoal-checkbox__label_div",
|
|
16
|
+
children
|
|
17
|
+
})]
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
//#endregion
|
|
22
|
+
exports.CheckboxWithLabel = CheckboxWithLabel;
|
|
23
|
+
//# sourceMappingURL=CheckboxWithLabel.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CheckboxWithLabel.cjs","names":["React","useClassNames","CheckboxWithLabel","memo","className","children","input","id","disabled","ReactNode","classNames"],"sources":["../../../src/components/Checkbox/CheckboxWithLabel.tsx"],"sourcesContent":["import React from 'react'\nimport { useClassNames } from '../../_lib/useClassNames'\n\nexport const CheckboxWithLabel = React.memo(function CheckboxWithLabel({\n className,\n children,\n input,\n id,\n disabled,\n}: {\n children: React.ReactNode\n input: React.ReactNode\n disabled?: boolean\n className?: string\n id?: string\n}) {\n const classNames = useClassNames('charcoal-checkbox__label', className)\n return (\n <label htmlFor={id} aria-disabled={disabled} className={classNames}>\n {input}\n <div className=\"charcoal-checkbox__label_div\">{children}</div>\n </label>\n )\n})\n"],"mappings":";;;;;;;;AAGA,MAAaE,oBAAoBF,cAAMG,KAAK,SAASD,kBAAkB,EACrEE,WACAC,UACAC,OACAC,IACAC,YAOC;CAED,OACE,4CAAC,SAAD;EAAO,SAASD;EAAI,iBAAeC;EAAU,WAF5BP,oCAAc,4BAA4BG,UAEO;YAAlE,CACGE,OACD,2CAAC,OAAD;GAAK,WAAU;GAAgCD;GAAc,EACvD;;EAEV"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useClassNames } from "../../_lib/useClassNames.js";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
|
|
6
|
+
//#region src/components/Checkbox/CheckboxWithLabel.tsx
|
|
7
|
+
const CheckboxWithLabel = React.memo(function CheckboxWithLabel({ className, children, input, id, disabled }) {
|
|
8
|
+
return /* @__PURE__ */ jsxs("label", {
|
|
9
|
+
htmlFor: id,
|
|
10
|
+
"aria-disabled": disabled,
|
|
11
|
+
className: useClassNames("charcoal-checkbox__label", className),
|
|
12
|
+
children: [input, /* @__PURE__ */ jsx("div", {
|
|
13
|
+
className: "charcoal-checkbox__label_div",
|
|
14
|
+
children
|
|
15
|
+
})]
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
//#endregion
|
|
20
|
+
export { CheckboxWithLabel };
|
|
21
|
+
//# sourceMappingURL=CheckboxWithLabel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CheckboxWithLabel.js","names":["React","useClassNames","CheckboxWithLabel","memo","className","children","input","id","disabled","ReactNode","classNames"],"sources":["../../../src/components/Checkbox/CheckboxWithLabel.tsx"],"sourcesContent":["import React from 'react'\nimport { useClassNames } from '../../_lib/useClassNames'\n\nexport const CheckboxWithLabel = React.memo(function CheckboxWithLabel({\n className,\n children,\n input,\n id,\n disabled,\n}: {\n children: React.ReactNode\n input: React.ReactNode\n disabled?: boolean\n className?: string\n id?: string\n}) {\n const classNames = useClassNames('charcoal-checkbox__label', className)\n return (\n <label htmlFor={id} aria-disabled={disabled} className={classNames}>\n {input}\n <div className=\"charcoal-checkbox__label_div\">{children}</div>\n </label>\n )\n})\n"],"mappings":";;;;;;AAGA,MAAaE,oBAAoBF,MAAMG,KAAK,SAASD,kBAAkB,EACrEE,WACAC,UACAC,OACAC,IACAC,YAOC;CAED,OACE,qBAAC,SAAD;EAAO,SAASD;EAAI,iBAAeC;EAAU,WAF5BP,cAAc,4BAA4BG,UAEO;YAAlE,CACGE,OACD,oBAAC,OAAD;GAAK,WAAU;GAAgCD;GAAc,EACvD;;EAEV"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
require('./index.cjs');
|
|
4
|
+
const require_index$1 = require('./CheckboxInput/index2.cjs');
|
|
5
|
+
const require_CheckboxWithLabel = require('./CheckboxWithLabel.cjs');
|
|
6
|
+
let react = require("react");
|
|
7
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
|
+
let react_aria_useId = require("react-aria/useId");
|
|
9
|
+
|
|
10
|
+
//#region src/components/Checkbox/index.tsx
|
|
11
|
+
const Checkbox = (0, react.forwardRef)(function Checkbox({ disabled, className, id, children, ...props }, ref) {
|
|
12
|
+
const htmlId = (0, react_aria_useId.useId)(id);
|
|
13
|
+
const noChildren = children === void 0;
|
|
14
|
+
const input = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_index$1.default, {
|
|
15
|
+
...props,
|
|
16
|
+
className: noChildren ? className : void 0,
|
|
17
|
+
disabled,
|
|
18
|
+
id: htmlId,
|
|
19
|
+
ref
|
|
20
|
+
});
|
|
21
|
+
if (noChildren) return input;
|
|
22
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_CheckboxWithLabel.CheckboxWithLabel, {
|
|
23
|
+
className,
|
|
24
|
+
disabled,
|
|
25
|
+
id: htmlId,
|
|
26
|
+
input,
|
|
27
|
+
children
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
var Checkbox_default = (0, react.memo)(Checkbox);
|
|
31
|
+
|
|
32
|
+
//#endregion
|
|
33
|
+
exports.default = Checkbox_default;
|
|
34
|
+
//# sourceMappingURL=index2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.cjs","names":["forwardRef","memo","CheckboxInput","CheckboxInputProps","CheckboxWithLabel","useId","CheckboxProps","Checkbox","HTMLInputElement","disabled","className","id","children","props","ref","htmlId","noChildren","undefined","input"],"sources":["../../../src/components/Checkbox/index.tsx"],"sourcesContent":["import './index.css'\n\nimport { forwardRef, memo } from 'react'\nimport CheckboxInput, { CheckboxInputProps } from './CheckboxInput'\nimport { CheckboxWithLabel } from './CheckboxWithLabel'\nimport { useId } from 'react-aria/useId'\n\nexport type CheckboxProps = CheckboxInputProps\n\nconst Checkbox = forwardRef<HTMLInputElement, CheckboxInputProps>(\n function Checkbox({ disabled, className, id, children, ...props }, ref) {\n const htmlId = useId(id)\n const noChildren = children === undefined\n const input = (\n <CheckboxInput\n {...props}\n className={noChildren ? className : undefined}\n disabled={disabled}\n id={htmlId}\n ref={ref}\n />\n )\n if (noChildren) {\n return input\n }\n return (\n <CheckboxWithLabel\n className={className}\n disabled={disabled}\n id={htmlId}\n input={input}\n >\n {children}\n </CheckboxWithLabel>\n )\n },\n)\n\nexport default memo(Checkbox)\n"],"mappings":";;;;;;;;;;AASA,MAAMO,iCACJ,SAASA,SAAS,EAAEE,UAAUC,WAAWC,IAAIC,UAAU,GAAGC,SAASC,KAAK;CACtE,MAAMC,qCAAeJ,GAAG;CACxB,MAAMK,aAAaJ,aAAaK;CAChC,MAAMC,QACJ,2CAAC,yBAAD;EACE,GAAIL;EACJ,WAAWG,aAAaN,YAAYO;EAC1BR;EACV,IAAIM;EACCD;EAER;CACD,IAAIE,YACF,OAAOE;CAET,OACE,2CAAC,6CAAD;EACaR;EACDD;EACV,IAAIM;EACGG;EAENN;EACiB;EAGzB;AAED,uCAAoBL,SAAS"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
/* empty css */
|
|
3
|
+
import CheckboxInput_default from "./CheckboxInput/index2.js";
|
|
4
|
+
import { CheckboxWithLabel } from "./CheckboxWithLabel.js";
|
|
5
|
+
import { forwardRef, memo } from "react";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
import { useId } from "react-aria/useId";
|
|
8
|
+
|
|
9
|
+
//#region src/components/Checkbox/index.tsx
|
|
10
|
+
const Checkbox = forwardRef(function Checkbox({ disabled, className, id, children, ...props }, ref) {
|
|
11
|
+
const htmlId = useId(id);
|
|
12
|
+
const noChildren = children === void 0;
|
|
13
|
+
const input = /* @__PURE__ */ jsx(CheckboxInput_default, {
|
|
14
|
+
...props,
|
|
15
|
+
className: noChildren ? className : void 0,
|
|
16
|
+
disabled,
|
|
17
|
+
id: htmlId,
|
|
18
|
+
ref
|
|
19
|
+
});
|
|
20
|
+
if (noChildren) return input;
|
|
21
|
+
return /* @__PURE__ */ jsx(CheckboxWithLabel, {
|
|
22
|
+
className,
|
|
23
|
+
disabled,
|
|
24
|
+
id: htmlId,
|
|
25
|
+
input,
|
|
26
|
+
children
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
var Checkbox_default = memo(Checkbox);
|
|
30
|
+
|
|
31
|
+
//#endregion
|
|
32
|
+
export { Checkbox_default as default };
|
|
33
|
+
//# sourceMappingURL=index2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.js","names":["forwardRef","memo","CheckboxInput","CheckboxInputProps","CheckboxWithLabel","useId","CheckboxProps","Checkbox","HTMLInputElement","disabled","className","id","children","props","ref","htmlId","noChildren","undefined","input"],"sources":["../../../src/components/Checkbox/index.tsx"],"sourcesContent":["import './index.css'\n\nimport { forwardRef, memo } from 'react'\nimport CheckboxInput, { CheckboxInputProps } from './CheckboxInput'\nimport { CheckboxWithLabel } from './CheckboxWithLabel'\nimport { useId } from 'react-aria/useId'\n\nexport type CheckboxProps = CheckboxInputProps\n\nconst Checkbox = forwardRef<HTMLInputElement, CheckboxInputProps>(\n function Checkbox({ disabled, className, id, children, ...props }, ref) {\n const htmlId = useId(id)\n const noChildren = children === undefined\n const input = (\n <CheckboxInput\n {...props}\n className={noChildren ? className : undefined}\n disabled={disabled}\n id={htmlId}\n ref={ref}\n />\n )\n if (noChildren) {\n return input\n }\n return (\n <CheckboxWithLabel\n className={className}\n disabled={disabled}\n id={htmlId}\n input={input}\n >\n {children}\n </CheckboxWithLabel>\n )\n },\n)\n\nexport default memo(Checkbox)\n"],"mappings":";;;;;;;;;AASA,MAAMO,WAAWP,WACf,SAASO,SAAS,EAAEE,UAAUC,WAAWC,IAAIC,UAAU,GAAGC,SAASC,KAAK;CACtE,MAAMC,SAASV,MAAMM,GAAG;CACxB,MAAMK,aAAaJ,aAAaK;CAChC,MAAMC,QACJ,oBAAC,uBAAD;EACE,GAAIL;EACJ,WAAWG,aAAaN,YAAYO;EAC1BR;EACV,IAAIM;EACCD;EAER;CACD,IAAIE,YACF,OAAOE;CAET,OACE,oBAAC,mBAAD;EACaR;EACDD;EACV,IAAIM;EACGG;EAENN;EACiB;EAGzB;AAED,uBAAeX,KAAKM,SAAS"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
const require_useClassNames = require('../../_lib/useClassNames.cjs');
|
|
4
|
+
require('./index.cjs');
|
|
5
|
+
let react = require("react");
|
|
6
|
+
react = require_runtime.__toESM(react);
|
|
7
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
8
|
+
|
|
9
|
+
//#region src/components/Clickable/index.tsx
|
|
10
|
+
const Clickable = (0, react.forwardRef)(function Clickable({ component, ...props }, ref) {
|
|
11
|
+
const className = require_useClassNames.useClassNames("charcoal-clickable", props.className);
|
|
12
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)((0, react.useMemo)(() => component ?? "button", [component]), {
|
|
13
|
+
...props,
|
|
14
|
+
ref,
|
|
15
|
+
className
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
//#endregion
|
|
20
|
+
exports.default = Clickable;
|
|
21
|
+
//# sourceMappingURL=index2.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.cjs","names":["React","useMemo","forwardRef","ReactNode","JSX","useClassNames","ClickableProps","ElementType","children","component","T","Omit","ComponentPropsWithRef","Clickable","props","ref","ForwardedRef","HTMLButtonElement","className","Component","p","Element","ClickableElement","HTMLAnchorElement"],"sources":["../../../src/components/Clickable/index.tsx"],"sourcesContent":["import React, { useMemo, forwardRef, ReactNode, type JSX } from 'react'\nimport { useClassNames } from '../../_lib/useClassNames'\nimport './index.css'\n\nexport type ClickableProps<T extends React.ElementType = 'button'> = {\n children?: ReactNode\n /**\n * The component used for root element.\n * @type T extends React.ElementType = 'button'\n */\n component?: T\n} & Omit<React.ComponentPropsWithRef<T>, 'children'>\n\nconst Clickable = forwardRef(function Clickable<T extends React.ElementType>(\n { component, ...props }: ClickableProps<T>,\n ref: React.ForwardedRef<HTMLButtonElement>,\n) {\n const className = useClassNames('charcoal-clickable', props.className)\n\n const Component = useMemo(() => component ?? 'button', [component])\n\n return <Component {...props} ref={ref} className={className} />\n}) as <T extends React.ElementType = 'button'>(\n p: ClickableProps<T>,\n) => JSX.Element\nexport default Clickable\n\n/**\n * @deprecated\n * remained for v3 compatibility and will be removed in the future\n */\nexport type ClickableElement = HTMLButtonElement & HTMLAnchorElement\n"],"mappings":";;;;;;;;;AAaA,MAAMa,kCAAuB,SAASA,UACpC,EAAEJ,WAAW,GAAGK,SAChBC,KACA;CACA,MAAMG,YAAYb,oCAAc,sBAAsBS,MAAMI,UAAU;CAItE,OAAO,oEAFyBT,aAAa,UAAU,CAACA,UAAU,CAEjD,EAAV;EAAW,GAAIK;EAAYC;EAAgBG;EAAa;EAC/D"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useClassNames } from "../../_lib/useClassNames.js";
|
|
3
|
+
/* empty css */
|
|
4
|
+
import React, { forwardRef, useMemo } from "react";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
|
|
7
|
+
//#region src/components/Clickable/index.tsx
|
|
8
|
+
const Clickable = forwardRef(function Clickable({ component, ...props }, ref) {
|
|
9
|
+
const className = useClassNames("charcoal-clickable", props.className);
|
|
10
|
+
return /* @__PURE__ */ jsx(useMemo(() => component ?? "button", [component]), {
|
|
11
|
+
...props,
|
|
12
|
+
ref,
|
|
13
|
+
className
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { Clickable as default };
|
|
19
|
+
//# sourceMappingURL=index2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index2.js","names":["React","useMemo","forwardRef","ReactNode","JSX","useClassNames","ClickableProps","ElementType","children","component","T","Omit","ComponentPropsWithRef","Clickable","props","ref","ForwardedRef","HTMLButtonElement","className","Component","p","Element","ClickableElement","HTMLAnchorElement"],"sources":["../../../src/components/Clickable/index.tsx"],"sourcesContent":["import React, { useMemo, forwardRef, ReactNode, type JSX } from 'react'\nimport { useClassNames } from '../../_lib/useClassNames'\nimport './index.css'\n\nexport type ClickableProps<T extends React.ElementType = 'button'> = {\n children?: ReactNode\n /**\n * The component used for root element.\n * @type T extends React.ElementType = 'button'\n */\n component?: T\n} & Omit<React.ComponentPropsWithRef<T>, 'children'>\n\nconst Clickable = forwardRef(function Clickable<T extends React.ElementType>(\n { component, ...props }: ClickableProps<T>,\n ref: React.ForwardedRef<HTMLButtonElement>,\n) {\n const className = useClassNames('charcoal-clickable', props.className)\n\n const Component = useMemo(() => component ?? 'button', [component])\n\n return <Component {...props} ref={ref} className={className} />\n}) as <T extends React.ElementType = 'button'>(\n p: ClickableProps<T>,\n) => JSX.Element\nexport default Clickable\n\n/**\n * @deprecated\n * remained for v3 compatibility and will be removed in the future\n */\nexport type ClickableElement = HTMLButtonElement & HTMLAnchorElement\n"],"mappings":";;;;;;;AAaA,MAAMa,YAAYX,WAAW,SAASW,UACpC,EAAEJ,WAAW,GAAGK,SAChBC,KACA;CACA,MAAMG,YAAYb,cAAc,sBAAsBS,MAAMI,UAAU;CAItE,OAAO,oBAFWjB,cAAcQ,aAAa,UAAU,CAACA,UAAU,CAEjD,EAAV;EAAW,GAAIK;EAAYC;EAAgBG;EAAa;EAC/D"}
|