@chayns-components/core 5.0.0-beta.603 → 5.0.0-beta.604

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.
@@ -50,6 +50,21 @@ const SliderButton = ({
50
50
  duration: 0.2
51
51
  });
52
52
  }, [animate, scope]);
53
+ const setItemPosition = (0, _react.useCallback)(index => {
54
+ if (!isSliderBigger) {
55
+ void animation(itemWidth * index);
56
+ return;
57
+ }
58
+ const count = dragRange.right / itemWidth;
59
+ if (items.length - count >= index) {
60
+ void animation(0);
61
+ } else {
62
+ void animation(itemWidth * (count - (items.length - index)));
63
+ }
64
+ if (sliderButtonWrapperRef.current) {
65
+ sliderButtonWrapperRef.current.scrollLeft = itemWidth * index;
66
+ }
67
+ }, [animation, dragRange.right, isSliderBigger, itemWidth, items.length]);
53
68
  (0, _react.useEffect)(() => {
54
69
  if (selectedButtonId) {
55
70
  setSelectedButton(selectedButtonId);
@@ -57,13 +72,13 @@ const SliderButton = ({
57
72
  id
58
73
  }) => id === selectedButtonId);
59
74
  if (index >= 0) {
60
- void animation(itemWidth * index);
75
+ setItemPosition(index);
61
76
  }
62
77
  } else {
63
78
  var _items$;
64
79
  setSelectedButton((_items$ = items[0]) === null || _items$ === void 0 ? void 0 : _items$.id);
65
80
  }
66
- }, [animation, itemWidth, items, selectedButtonId]);
81
+ }, [animation, dragRange.right, isSliderBigger, itemWidth, items, selectedButtonId, setItemPosition]);
67
82
  const handleClick = (0, _react.useCallback)((id, index) => {
68
83
  if (isDisabled) {
69
84
  return;
@@ -72,20 +87,8 @@ const SliderButton = ({
72
87
  if (typeof onChange === 'function') {
73
88
  onChange(id);
74
89
  }
75
- if (!isSliderBigger) {
76
- void animation(itemWidth * index);
77
- return;
78
- }
79
- const count = dragRange.right / itemWidth;
80
- if (items.length - count >= index) {
81
- void animation(0);
82
- } else {
83
- void animation(itemWidth * (count - (items.length - index)));
84
- }
85
- if (sliderButtonWrapperRef.current) {
86
- sliderButtonWrapperRef.current.scrollLeft = itemWidth * index;
87
- }
88
- }, [animation, dragRange.right, isDisabled, isSliderBigger, itemWidth, items.length, onChange]);
90
+ setItemPosition(index);
91
+ }, [isDisabled, onChange, setItemPosition]);
89
92
  const buttons = (0, _react.useMemo)(() => items.map(({
90
93
  id,
91
94
  text
@@ -1 +1 @@
1
- {"version":3,"file":"SliderButton.js","names":["_chaynsApi","require","_framerMotion","_react","_interopRequireWildcard","_useElementSize","_calculate","_sliderButton","_SliderButton","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","SliderButton","selectedButtonId","isDisabled","items","onChange","selectedButton","setSelectedButton","useState","undefined","dragRange","setDragRange","left","right","sliderButtonRef","useRef","sliderButtonWrapperRef","timeout","preventHandleScroll","scope","animate","useAnimate","itemWidth","useMemo","calculateBiggestWidth","sliderSize","useElementSize","isSliderBigger","width","length","useEffect","sliderWidth","count","Math","floor","animation","useCallback","x","current","type","duration","index","findIndex","id","_items$","handleClick","scrollLeft","buttons","map","text","createElement","StyledSliderButtonItem","$width","key","onClick","$isSelected","thumbText","selectedItem","find","snapPoints","points","push","handleDragEnd","setRefreshScrollEnabled","position","getThumbPosition","middle","getNearestPoint","nearestPoint","nearestIndex","_items$nearestIndex","handleWhileDrag","scrollSpeed","_items$nearestIndex2","handleScroll","event","target","_items$nearestIndex3","clearTimeout","window","setTimeout","StyledSliderButton","$isDisabled","ref","StyledMotionSliderButtonThumb","drag","dragElastic","dragConstraints","onDrag","onDragEnd","StyledSliderButtonWrapper","onScroll","AnimatePresence","StyledSliderButtonButtonsWrapper","displayName","_default","exports"],"sources":["../../../../src/components/slider-button/SliderButton.tsx"],"sourcesContent":["import { setRefreshScrollEnabled } from 'chayns-api';\nimport { AnimatePresence, useAnimate } from 'framer-motion';\nimport React, { FC, UIEvent, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useElementSize } from '../../hooks/useElementSize';\nimport type { SliderButtonItem } from '../../types/slider-button';\nimport { calculateBiggestWidth } from '../../utils/calculate';\nimport { getNearestPoint, getThumbPosition } from '../../utils/sliderButton';\nimport {\n StyledMotionSliderButtonThumb,\n StyledSliderButton,\n StyledSliderButtonButtonsWrapper,\n StyledSliderButtonItem,\n StyledSliderButtonWrapper,\n} from './SliderButton.styles';\n\nexport type SliderButtonProps = {\n /**\n * Whether the button is disabled.\n */\n isDisabled?: boolean;\n /**\n * Function to be executed when a button is selected.\n * @param id\n */\n onChange?: (id: string) => void;\n /**\n * The buttons that are slidable.\n */\n items: SliderButtonItem[];\n /**\n * The id of a button that should be selected.\n */\n selectedButtonId?: string;\n};\n\nconst SliderButton: FC<SliderButtonProps> = ({ selectedButtonId, isDisabled, items, onChange }) => {\n const [selectedButton, setSelectedButton] = useState<string | undefined>(undefined);\n const [dragRange, setDragRange] = useState({ left: 0, right: 0 });\n\n const sliderButtonRef = useRef<HTMLDivElement>(null);\n const sliderButtonWrapperRef = useRef<HTMLDivElement>(null);\n const timeout = useRef<number>();\n const preventHandleScroll = useRef(false);\n\n const [scope, animate] = useAnimate();\n\n const itemWidth = useMemo(() => calculateBiggestWidth(items), [items]);\n\n const sliderSize = useElementSize(sliderButtonRef);\n\n const isSliderBigger = useMemo(\n () => sliderSize && sliderSize.width < itemWidth * (items.length - 1),\n [itemWidth, items.length, sliderSize],\n );\n\n useEffect(() => {\n if (sliderSize) {\n const sliderWidth = itemWidth * (items.length - 1);\n\n const count = Math.floor(sliderSize.width / itemWidth);\n\n setDragRange({ left: 0, right: isSliderBigger ? itemWidth * count : sliderWidth });\n }\n }, [isSliderBigger, itemWidth, items.length, sliderSize]);\n\n const animation = useCallback(\n async (x: number) => {\n await animate(\n scope.current,\n { x },\n {\n type: 'tween',\n duration: 0.2,\n },\n );\n },\n [animate, scope],\n );\n\n useEffect(() => {\n if (selectedButtonId) {\n setSelectedButton(selectedButtonId);\n\n const index = items.findIndex(({ id }) => id === selectedButtonId);\n\n if (index >= 0) {\n void animation(itemWidth * index);\n }\n } else {\n setSelectedButton(items[0]?.id);\n }\n }, [animation, itemWidth, items, selectedButtonId]);\n\n const handleClick = useCallback(\n (id: string, index: number) => {\n if (isDisabled) {\n return;\n }\n\n setSelectedButton(id);\n\n if (typeof onChange === 'function') {\n onChange(id);\n }\n\n if (!isSliderBigger) {\n void animation(itemWidth * index);\n\n return;\n }\n\n const count = dragRange.right / itemWidth;\n\n if (items.length - count >= index) {\n void animation(0);\n } else {\n void animation(itemWidth * (count - (items.length - index)));\n }\n\n if (sliderButtonWrapperRef.current) {\n sliderButtonWrapperRef.current.scrollLeft = itemWidth * index;\n }\n },\n [animation, dragRange.right, isDisabled, isSliderBigger, itemWidth, items.length, onChange],\n );\n\n const buttons = useMemo(\n () =>\n items.map(({ id, text }, index) => (\n <StyledSliderButtonItem\n $width={itemWidth}\n key={`slider-button-${id}`}\n onClick={() => handleClick(id, index)}\n $isSelected={id === selectedButton}\n >\n {text}\n </StyledSliderButtonItem>\n )),\n [handleClick, itemWidth, items, selectedButton],\n );\n\n const thumbText = useMemo(() => {\n const selectedItem = items.find(({ id }) => id === selectedButton);\n\n return selectedItem ? selectedItem.text : '';\n }, [items, selectedButton]);\n\n /**\n * Creates an array with the snap points relative to the width of the items\n */\n const snapPoints = useMemo(() => {\n const points = [0];\n\n for (let i = 1; i < items.length; i++) {\n points.push(itemWidth * i);\n }\n\n return points;\n }, [itemWidth, items.length]);\n\n const handleDragEnd = useCallback(() => {\n void setRefreshScrollEnabled(true);\n\n const position = getThumbPosition({ scope, itemWidth });\n\n if (!position) {\n return;\n }\n\n const { middle, left } = position;\n\n let scrollLeft = 0;\n\n if (sliderButtonWrapperRef.current) {\n scrollLeft = sliderButtonWrapperRef.current.scrollLeft;\n\n sliderButtonWrapperRef.current.scrollLeft = getNearestPoint({\n snapPoints,\n position: middle,\n scrollLeft: scrollLeft - left,\n }).nearestPoint;\n }\n\n const { nearestIndex } = getNearestPoint({\n snapPoints,\n position: middle,\n scrollLeft,\n });\n\n const { nearestPoint } = getNearestPoint({\n snapPoints,\n position: middle,\n scrollLeft: 0,\n });\n\n if (nearestPoint >= 0 && nearestIndex >= 0) {\n void animation(nearestPoint);\n\n const id = items[nearestIndex]?.id;\n\n setSelectedButton(id);\n\n if (typeof onChange === 'function' && id) {\n onChange(id);\n }\n }\n\n preventHandleScroll.current = false;\n }, [animation, itemWidth, items, onChange, scope, snapPoints]);\n\n const handleWhileDrag = useCallback(() => {\n preventHandleScroll.current = true;\n void setRefreshScrollEnabled(false);\n\n const position = getThumbPosition({ scope, itemWidth });\n\n if (!position) {\n return;\n }\n\n const { right, left, middle } = position;\n\n let scrollLeft = 0;\n\n const scrollSpeed = 3;\n\n if (sliderButtonWrapperRef.current) {\n if (right >= dragRange.right) {\n sliderButtonWrapperRef.current.scrollLeft += scrollSpeed;\n }\n\n if (left <= dragRange.left) {\n sliderButtonWrapperRef.current.scrollLeft -= scrollSpeed;\n }\n\n scrollLeft = sliderButtonWrapperRef.current.scrollLeft;\n }\n\n const { nearestIndex } = getNearestPoint({ snapPoints, position: middle, scrollLeft });\n\n if (nearestIndex >= 0) {\n setSelectedButton(items[nearestIndex]?.id);\n }\n }, [dragRange, itemWidth, items, scope, snapPoints]);\n\n // With this, the handleScroll works before the thumb is moved the first time.\n useEffect(() => {\n void animation(1);\n void animation(0);\n }, [animation]);\n\n const handleScroll = useCallback(\n (event: UIEvent<HTMLElement>) => {\n if (preventHandleScroll.current) {\n return;\n }\n\n void setRefreshScrollEnabled(false);\n\n const position = getThumbPosition({ scope, itemWidth });\n\n if (!position) {\n return;\n }\n\n const { middle } = position;\n\n const { scrollLeft } = event.target as HTMLDivElement;\n\n const { nearestIndex } = getNearestPoint({ snapPoints, position: middle, scrollLeft });\n\n if (nearestIndex >= 0) {\n setSelectedButton(items[nearestIndex]?.id);\n }\n\n if (timeout.current) {\n clearTimeout(timeout.current);\n }\n\n timeout.current = window.setTimeout(() => {\n handleDragEnd();\n }, 200);\n },\n [handleDragEnd, itemWidth, items, scope, snapPoints],\n );\n\n return useMemo(\n () => (\n <StyledSliderButton $isDisabled={isDisabled} ref={sliderButtonRef}>\n <StyledMotionSliderButtonThumb\n ref={scope}\n drag={isDisabled ? false : 'x'}\n dragElastic={0}\n dragConstraints={\n isSliderBigger\n ? { ...dragRange, right: dragRange.right - itemWidth }\n : { ...dragRange }\n }\n $width={itemWidth}\n onDrag={handleWhileDrag}\n onDragEnd={handleDragEnd}\n >\n {thumbText}\n </StyledMotionSliderButtonThumb>\n <StyledSliderButtonWrapper\n $width={!isSliderBigger ? dragRange.right + itemWidth : dragRange.right}\n ref={sliderButtonWrapperRef}\n onScroll={handleScroll}\n >\n <AnimatePresence>\n <StyledSliderButtonButtonsWrapper>\n {buttons}\n </StyledSliderButtonButtonsWrapper>\n </AnimatePresence>\n </StyledSliderButtonWrapper>\n </StyledSliderButton>\n ),\n [\n buttons,\n dragRange,\n handleDragEnd,\n handleScroll,\n handleWhileDrag,\n isDisabled,\n isSliderBigger,\n itemWidth,\n scope,\n thumbText,\n ],\n );\n};\n\nSliderButton.displayName = 'SliderButton';\n\nexport default SliderButton;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SliderButton.js","names":["_chaynsApi","require","_framerMotion","_react","_interopRequireWildcard","_useElementSize","_calculate","_sliderButton","_SliderButton","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","SliderButton","selectedButtonId","isDisabled","items","onChange","selectedButton","setSelectedButton","useState","undefined","dragRange","setDragRange","left","right","sliderButtonRef","useRef","sliderButtonWrapperRef","timeout","preventHandleScroll","scope","animate","useAnimate","itemWidth","useMemo","calculateBiggestWidth","sliderSize","useElementSize","isSliderBigger","width","length","useEffect","sliderWidth","count","Math","floor","animation","useCallback","x","current","type","duration","setItemPosition","index","scrollLeft","findIndex","id","_items$","handleClick","buttons","map","text","createElement","StyledSliderButtonItem","$width","key","onClick","$isSelected","thumbText","selectedItem","find","snapPoints","points","push","handleDragEnd","setRefreshScrollEnabled","position","getThumbPosition","middle","getNearestPoint","nearestPoint","nearestIndex","_items$nearestIndex","handleWhileDrag","scrollSpeed","_items$nearestIndex2","handleScroll","event","target","_items$nearestIndex3","clearTimeout","window","setTimeout","StyledSliderButton","$isDisabled","ref","StyledMotionSliderButtonThumb","drag","dragElastic","dragConstraints","onDrag","onDragEnd","StyledSliderButtonWrapper","onScroll","AnimatePresence","StyledSliderButtonButtonsWrapper","displayName","_default","exports"],"sources":["../../../../src/components/slider-button/SliderButton.tsx"],"sourcesContent":["import { setRefreshScrollEnabled } from 'chayns-api';\nimport { AnimatePresence, useAnimate } from 'framer-motion';\nimport React, { FC, UIEvent, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useElementSize } from '../../hooks/useElementSize';\nimport type { SliderButtonItem } from '../../types/slider-button';\nimport { calculateBiggestWidth } from '../../utils/calculate';\nimport { getNearestPoint, getThumbPosition } from '../../utils/sliderButton';\nimport {\n StyledMotionSliderButtonThumb,\n StyledSliderButton,\n StyledSliderButtonButtonsWrapper,\n StyledSliderButtonItem,\n StyledSliderButtonWrapper,\n} from './SliderButton.styles';\n\nexport type SliderButtonProps = {\n /**\n * Whether the button is disabled.\n */\n isDisabled?: boolean;\n /**\n * Function to be executed when a button is selected.\n * @param id\n */\n onChange?: (id: string) => void;\n /**\n * The buttons that are slidable.\n */\n items: SliderButtonItem[];\n /**\n * The id of a button that should be selected.\n */\n selectedButtonId?: string;\n};\n\nconst SliderButton: FC<SliderButtonProps> = ({ selectedButtonId, isDisabled, items, onChange }) => {\n const [selectedButton, setSelectedButton] = useState<string | undefined>(undefined);\n const [dragRange, setDragRange] = useState({ left: 0, right: 0 });\n\n const sliderButtonRef = useRef<HTMLDivElement>(null);\n const sliderButtonWrapperRef = useRef<HTMLDivElement>(null);\n const timeout = useRef<number>();\n const preventHandleScroll = useRef(false);\n\n const [scope, animate] = useAnimate();\n\n const itemWidth = useMemo(() => calculateBiggestWidth(items), [items]);\n\n const sliderSize = useElementSize(sliderButtonRef);\n\n const isSliderBigger = useMemo(\n () => sliderSize && sliderSize.width < itemWidth * (items.length - 1),\n [itemWidth, items.length, sliderSize],\n );\n\n useEffect(() => {\n if (sliderSize) {\n const sliderWidth = itemWidth * (items.length - 1);\n\n const count = Math.floor(sliderSize.width / itemWidth);\n\n setDragRange({ left: 0, right: isSliderBigger ? itemWidth * count : sliderWidth });\n }\n }, [isSliderBigger, itemWidth, items.length, sliderSize]);\n\n const animation = useCallback(\n async (x: number) => {\n await animate(\n scope.current,\n { x },\n {\n type: 'tween',\n duration: 0.2,\n },\n );\n },\n [animate, scope],\n );\n\n const setItemPosition = useCallback(\n (index: number) => {\n if (!isSliderBigger) {\n void animation(itemWidth * index);\n\n return;\n }\n\n const count = dragRange.right / itemWidth;\n\n if (items.length - count >= index) {\n void animation(0);\n } else {\n void animation(itemWidth * (count - (items.length - index)));\n }\n\n if (sliderButtonWrapperRef.current) {\n sliderButtonWrapperRef.current.scrollLeft = itemWidth * index;\n }\n },\n [animation, dragRange.right, isSliderBigger, itemWidth, items.length],\n );\n\n useEffect(() => {\n if (selectedButtonId) {\n setSelectedButton(selectedButtonId);\n\n const index = items.findIndex(({ id }) => id === selectedButtonId);\n\n if (index >= 0) {\n setItemPosition(index);\n }\n } else {\n setSelectedButton(items[0]?.id);\n }\n }, [\n animation,\n dragRange.right,\n isSliderBigger,\n itemWidth,\n items,\n selectedButtonId,\n setItemPosition,\n ]);\n\n const handleClick = useCallback(\n (id: string, index: number) => {\n if (isDisabled) {\n return;\n }\n\n setSelectedButton(id);\n\n if (typeof onChange === 'function') {\n onChange(id);\n }\n\n setItemPosition(index);\n },\n [isDisabled, onChange, setItemPosition],\n );\n\n const buttons = useMemo(\n () =>\n items.map(({ id, text }, index) => (\n <StyledSliderButtonItem\n $width={itemWidth}\n key={`slider-button-${id}`}\n onClick={() => handleClick(id, index)}\n $isSelected={id === selectedButton}\n >\n {text}\n </StyledSliderButtonItem>\n )),\n [handleClick, itemWidth, items, selectedButton],\n );\n\n const thumbText = useMemo(() => {\n const selectedItem = items.find(({ id }) => id === selectedButton);\n\n return selectedItem ? selectedItem.text : '';\n }, [items, selectedButton]);\n\n /**\n * Creates an array with the snap points relative to the width of the items\n */\n const snapPoints = useMemo(() => {\n const points = [0];\n\n for (let i = 1; i < items.length; i++) {\n points.push(itemWidth * i);\n }\n\n return points;\n }, [itemWidth, items.length]);\n\n const handleDragEnd = useCallback(() => {\n void setRefreshScrollEnabled(true);\n\n const position = getThumbPosition({ scope, itemWidth });\n\n if (!position) {\n return;\n }\n\n const { middle, left } = position;\n\n let scrollLeft = 0;\n\n if (sliderButtonWrapperRef.current) {\n scrollLeft = sliderButtonWrapperRef.current.scrollLeft;\n\n sliderButtonWrapperRef.current.scrollLeft = getNearestPoint({\n snapPoints,\n position: middle,\n scrollLeft: scrollLeft - left,\n }).nearestPoint;\n }\n\n const { nearestIndex } = getNearestPoint({\n snapPoints,\n position: middle,\n scrollLeft,\n });\n\n const { nearestPoint } = getNearestPoint({\n snapPoints,\n position: middle,\n scrollLeft: 0,\n });\n\n if (nearestPoint >= 0 && nearestIndex >= 0) {\n void animation(nearestPoint);\n\n const id = items[nearestIndex]?.id;\n\n setSelectedButton(id);\n\n if (typeof onChange === 'function' && id) {\n onChange(id);\n }\n }\n\n preventHandleScroll.current = false;\n }, [animation, itemWidth, items, onChange, scope, snapPoints]);\n\n const handleWhileDrag = useCallback(() => {\n preventHandleScroll.current = true;\n void setRefreshScrollEnabled(false);\n\n const position = getThumbPosition({ scope, itemWidth });\n\n if (!position) {\n return;\n }\n\n const { right, left, middle } = position;\n\n let scrollLeft = 0;\n\n const scrollSpeed = 3;\n\n if (sliderButtonWrapperRef.current) {\n if (right >= dragRange.right) {\n sliderButtonWrapperRef.current.scrollLeft += scrollSpeed;\n }\n\n if (left <= dragRange.left) {\n sliderButtonWrapperRef.current.scrollLeft -= scrollSpeed;\n }\n\n scrollLeft = sliderButtonWrapperRef.current.scrollLeft;\n }\n\n const { nearestIndex } = getNearestPoint({ snapPoints, position: middle, scrollLeft });\n\n if (nearestIndex >= 0) {\n setSelectedButton(items[nearestIndex]?.id);\n }\n }, [dragRange, itemWidth, items, scope, snapPoints]);\n\n // With this, the handleScroll works before the thumb is moved the first time.\n useEffect(() => {\n void animation(1);\n void animation(0);\n }, [animation]);\n\n const handleScroll = useCallback(\n (event: UIEvent<HTMLElement>) => {\n if (preventHandleScroll.current) {\n return;\n }\n\n void setRefreshScrollEnabled(false);\n\n const position = getThumbPosition({ scope, itemWidth });\n\n if (!position) {\n return;\n }\n\n const { middle } = position;\n\n const { scrollLeft } = event.target as HTMLDivElement;\n\n const { nearestIndex } = getNearestPoint({ snapPoints, position: middle, scrollLeft });\n\n if (nearestIndex >= 0) {\n setSelectedButton(items[nearestIndex]?.id);\n }\n\n if (timeout.current) {\n clearTimeout(timeout.current);\n }\n\n timeout.current = window.setTimeout(() => {\n handleDragEnd();\n }, 200);\n },\n [handleDragEnd, itemWidth, items, scope, snapPoints],\n );\n\n return useMemo(\n () => (\n <StyledSliderButton $isDisabled={isDisabled} ref={sliderButtonRef}>\n <StyledMotionSliderButtonThumb\n ref={scope}\n drag={isDisabled ? false : 'x'}\n dragElastic={0}\n dragConstraints={\n isSliderBigger\n ? { ...dragRange, right: dragRange.right - itemWidth }\n : { ...dragRange }\n }\n $width={itemWidth}\n onDrag={handleWhileDrag}\n onDragEnd={handleDragEnd}\n >\n {thumbText}\n </StyledMotionSliderButtonThumb>\n <StyledSliderButtonWrapper\n $width={!isSliderBigger ? dragRange.right + itemWidth : dragRange.right}\n ref={sliderButtonWrapperRef}\n onScroll={handleScroll}\n >\n <AnimatePresence>\n <StyledSliderButtonButtonsWrapper>\n {buttons}\n </StyledSliderButtonButtonsWrapper>\n </AnimatePresence>\n </StyledSliderButtonWrapper>\n </StyledSliderButton>\n ),\n [\n buttons,\n dragRange,\n handleDragEnd,\n handleScroll,\n handleWhileDrag,\n isDisabled,\n isSliderBigger,\n itemWidth,\n scope,\n thumbText,\n ],\n );\n};\n\nSliderButton.displayName = 'SliderButton';\n\nexport default SliderButton;\n"],"mappings":"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","ignoreList":[]}
@@ -43,6 +43,21 @@ const SliderButton = _ref => {
43
43
  duration: 0.2
44
44
  });
45
45
  }, [animate, scope]);
46
+ const setItemPosition = useCallback(index => {
47
+ if (!isSliderBigger) {
48
+ void animation(itemWidth * index);
49
+ return;
50
+ }
51
+ const count = dragRange.right / itemWidth;
52
+ if (items.length - count >= index) {
53
+ void animation(0);
54
+ } else {
55
+ void animation(itemWidth * (count - (items.length - index)));
56
+ }
57
+ if (sliderButtonWrapperRef.current) {
58
+ sliderButtonWrapperRef.current.scrollLeft = itemWidth * index;
59
+ }
60
+ }, [animation, dragRange.right, isSliderBigger, itemWidth, items.length]);
46
61
  useEffect(() => {
47
62
  if (selectedButtonId) {
48
63
  setSelectedButton(selectedButtonId);
@@ -53,12 +68,12 @@ const SliderButton = _ref => {
53
68
  return id === selectedButtonId;
54
69
  });
55
70
  if (index >= 0) {
56
- void animation(itemWidth * index);
71
+ setItemPosition(index);
57
72
  }
58
73
  } else {
59
74
  setSelectedButton(items[0]?.id);
60
75
  }
61
- }, [animation, itemWidth, items, selectedButtonId]);
76
+ }, [animation, dragRange.right, isSliderBigger, itemWidth, items, selectedButtonId, setItemPosition]);
62
77
  const handleClick = useCallback((id, index) => {
63
78
  if (isDisabled) {
64
79
  return;
@@ -67,20 +82,8 @@ const SliderButton = _ref => {
67
82
  if (typeof onChange === 'function') {
68
83
  onChange(id);
69
84
  }
70
- if (!isSliderBigger) {
71
- void animation(itemWidth * index);
72
- return;
73
- }
74
- const count = dragRange.right / itemWidth;
75
- if (items.length - count >= index) {
76
- void animation(0);
77
- } else {
78
- void animation(itemWidth * (count - (items.length - index)));
79
- }
80
- if (sliderButtonWrapperRef.current) {
81
- sliderButtonWrapperRef.current.scrollLeft = itemWidth * index;
82
- }
83
- }, [animation, dragRange.right, isDisabled, isSliderBigger, itemWidth, items.length, onChange]);
85
+ setItemPosition(index);
86
+ }, [isDisabled, onChange, setItemPosition]);
84
87
  const buttons = useMemo(() => items.map((_ref3, index) => {
85
88
  let {
86
89
  id,
@@ -1 +1 @@
1
- {"version":3,"file":"SliderButton.js","names":["setRefreshScrollEnabled","AnimatePresence","useAnimate","React","useCallback","useEffect","useMemo","useRef","useState","useElementSize","calculateBiggestWidth","getNearestPoint","getThumbPosition","StyledMotionSliderButtonThumb","StyledSliderButton","StyledSliderButtonButtonsWrapper","StyledSliderButtonItem","StyledSliderButtonWrapper","SliderButton","_ref","selectedButtonId","isDisabled","items","onChange","selectedButton","setSelectedButton","undefined","dragRange","setDragRange","left","right","sliderButtonRef","sliderButtonWrapperRef","timeout","preventHandleScroll","scope","animate","itemWidth","sliderSize","isSliderBigger","width","length","sliderWidth","count","Math","floor","animation","x","current","type","duration","index","findIndex","_ref2","id","handleClick","scrollLeft","buttons","map","_ref3","text","createElement","$width","key","onClick","$isSelected","thumbText","selectedItem","find","_ref4","snapPoints","points","i","push","handleDragEnd","position","middle","nearestPoint","nearestIndex","handleWhileDrag","scrollSpeed","handleScroll","event","target","clearTimeout","window","setTimeout","$isDisabled","ref","drag","dragElastic","dragConstraints","onDrag","onDragEnd","onScroll","displayName"],"sources":["../../../../src/components/slider-button/SliderButton.tsx"],"sourcesContent":["import { setRefreshScrollEnabled } from 'chayns-api';\nimport { AnimatePresence, useAnimate } from 'framer-motion';\nimport React, { FC, UIEvent, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useElementSize } from '../../hooks/useElementSize';\nimport type { SliderButtonItem } from '../../types/slider-button';\nimport { calculateBiggestWidth } from '../../utils/calculate';\nimport { getNearestPoint, getThumbPosition } from '../../utils/sliderButton';\nimport {\n StyledMotionSliderButtonThumb,\n StyledSliderButton,\n StyledSliderButtonButtonsWrapper,\n StyledSliderButtonItem,\n StyledSliderButtonWrapper,\n} from './SliderButton.styles';\n\nexport type SliderButtonProps = {\n /**\n * Whether the button is disabled.\n */\n isDisabled?: boolean;\n /**\n * Function to be executed when a button is selected.\n * @param id\n */\n onChange?: (id: string) => void;\n /**\n * The buttons that are slidable.\n */\n items: SliderButtonItem[];\n /**\n * The id of a button that should be selected.\n */\n selectedButtonId?: string;\n};\n\nconst SliderButton: FC<SliderButtonProps> = ({ selectedButtonId, isDisabled, items, onChange }) => {\n const [selectedButton, setSelectedButton] = useState<string | undefined>(undefined);\n const [dragRange, setDragRange] = useState({ left: 0, right: 0 });\n\n const sliderButtonRef = useRef<HTMLDivElement>(null);\n const sliderButtonWrapperRef = useRef<HTMLDivElement>(null);\n const timeout = useRef<number>();\n const preventHandleScroll = useRef(false);\n\n const [scope, animate] = useAnimate();\n\n const itemWidth = useMemo(() => calculateBiggestWidth(items), [items]);\n\n const sliderSize = useElementSize(sliderButtonRef);\n\n const isSliderBigger = useMemo(\n () => sliderSize && sliderSize.width < itemWidth * (items.length - 1),\n [itemWidth, items.length, sliderSize],\n );\n\n useEffect(() => {\n if (sliderSize) {\n const sliderWidth = itemWidth * (items.length - 1);\n\n const count = Math.floor(sliderSize.width / itemWidth);\n\n setDragRange({ left: 0, right: isSliderBigger ? itemWidth * count : sliderWidth });\n }\n }, [isSliderBigger, itemWidth, items.length, sliderSize]);\n\n const animation = useCallback(\n async (x: number) => {\n await animate(\n scope.current,\n { x },\n {\n type: 'tween',\n duration: 0.2,\n },\n );\n },\n [animate, scope],\n );\n\n useEffect(() => {\n if (selectedButtonId) {\n setSelectedButton(selectedButtonId);\n\n const index = items.findIndex(({ id }) => id === selectedButtonId);\n\n if (index >= 0) {\n void animation(itemWidth * index);\n }\n } else {\n setSelectedButton(items[0]?.id);\n }\n }, [animation, itemWidth, items, selectedButtonId]);\n\n const handleClick = useCallback(\n (id: string, index: number) => {\n if (isDisabled) {\n return;\n }\n\n setSelectedButton(id);\n\n if (typeof onChange === 'function') {\n onChange(id);\n }\n\n if (!isSliderBigger) {\n void animation(itemWidth * index);\n\n return;\n }\n\n const count = dragRange.right / itemWidth;\n\n if (items.length - count >= index) {\n void animation(0);\n } else {\n void animation(itemWidth * (count - (items.length - index)));\n }\n\n if (sliderButtonWrapperRef.current) {\n sliderButtonWrapperRef.current.scrollLeft = itemWidth * index;\n }\n },\n [animation, dragRange.right, isDisabled, isSliderBigger, itemWidth, items.length, onChange],\n );\n\n const buttons = useMemo(\n () =>\n items.map(({ id, text }, index) => (\n <StyledSliderButtonItem\n $width={itemWidth}\n key={`slider-button-${id}`}\n onClick={() => handleClick(id, index)}\n $isSelected={id === selectedButton}\n >\n {text}\n </StyledSliderButtonItem>\n )),\n [handleClick, itemWidth, items, selectedButton],\n );\n\n const thumbText = useMemo(() => {\n const selectedItem = items.find(({ id }) => id === selectedButton);\n\n return selectedItem ? selectedItem.text : '';\n }, [items, selectedButton]);\n\n /**\n * Creates an array with the snap points relative to the width of the items\n */\n const snapPoints = useMemo(() => {\n const points = [0];\n\n for (let i = 1; i < items.length; i++) {\n points.push(itemWidth * i);\n }\n\n return points;\n }, [itemWidth, items.length]);\n\n const handleDragEnd = useCallback(() => {\n void setRefreshScrollEnabled(true);\n\n const position = getThumbPosition({ scope, itemWidth });\n\n if (!position) {\n return;\n }\n\n const { middle, left } = position;\n\n let scrollLeft = 0;\n\n if (sliderButtonWrapperRef.current) {\n scrollLeft = sliderButtonWrapperRef.current.scrollLeft;\n\n sliderButtonWrapperRef.current.scrollLeft = getNearestPoint({\n snapPoints,\n position: middle,\n scrollLeft: scrollLeft - left,\n }).nearestPoint;\n }\n\n const { nearestIndex } = getNearestPoint({\n snapPoints,\n position: middle,\n scrollLeft,\n });\n\n const { nearestPoint } = getNearestPoint({\n snapPoints,\n position: middle,\n scrollLeft: 0,\n });\n\n if (nearestPoint >= 0 && nearestIndex >= 0) {\n void animation(nearestPoint);\n\n const id = items[nearestIndex]?.id;\n\n setSelectedButton(id);\n\n if (typeof onChange === 'function' && id) {\n onChange(id);\n }\n }\n\n preventHandleScroll.current = false;\n }, [animation, itemWidth, items, onChange, scope, snapPoints]);\n\n const handleWhileDrag = useCallback(() => {\n preventHandleScroll.current = true;\n void setRefreshScrollEnabled(false);\n\n const position = getThumbPosition({ scope, itemWidth });\n\n if (!position) {\n return;\n }\n\n const { right, left, middle } = position;\n\n let scrollLeft = 0;\n\n const scrollSpeed = 3;\n\n if (sliderButtonWrapperRef.current) {\n if (right >= dragRange.right) {\n sliderButtonWrapperRef.current.scrollLeft += scrollSpeed;\n }\n\n if (left <= dragRange.left) {\n sliderButtonWrapperRef.current.scrollLeft -= scrollSpeed;\n }\n\n scrollLeft = sliderButtonWrapperRef.current.scrollLeft;\n }\n\n const { nearestIndex } = getNearestPoint({ snapPoints, position: middle, scrollLeft });\n\n if (nearestIndex >= 0) {\n setSelectedButton(items[nearestIndex]?.id);\n }\n }, [dragRange, itemWidth, items, scope, snapPoints]);\n\n // With this, the handleScroll works before the thumb is moved the first time.\n useEffect(() => {\n void animation(1);\n void animation(0);\n }, [animation]);\n\n const handleScroll = useCallback(\n (event: UIEvent<HTMLElement>) => {\n if (preventHandleScroll.current) {\n return;\n }\n\n void setRefreshScrollEnabled(false);\n\n const position = getThumbPosition({ scope, itemWidth });\n\n if (!position) {\n return;\n }\n\n const { middle } = position;\n\n const { scrollLeft } = event.target as HTMLDivElement;\n\n const { nearestIndex } = getNearestPoint({ snapPoints, position: middle, scrollLeft });\n\n if (nearestIndex >= 0) {\n setSelectedButton(items[nearestIndex]?.id);\n }\n\n if (timeout.current) {\n clearTimeout(timeout.current);\n }\n\n timeout.current = window.setTimeout(() => {\n handleDragEnd();\n }, 200);\n },\n [handleDragEnd, itemWidth, items, scope, snapPoints],\n );\n\n return useMemo(\n () => (\n <StyledSliderButton $isDisabled={isDisabled} ref={sliderButtonRef}>\n <StyledMotionSliderButtonThumb\n ref={scope}\n drag={isDisabled ? false : 'x'}\n dragElastic={0}\n dragConstraints={\n isSliderBigger\n ? { ...dragRange, right: dragRange.right - itemWidth }\n : { ...dragRange }\n }\n $width={itemWidth}\n onDrag={handleWhileDrag}\n onDragEnd={handleDragEnd}\n >\n {thumbText}\n </StyledMotionSliderButtonThumb>\n <StyledSliderButtonWrapper\n $width={!isSliderBigger ? dragRange.right + itemWidth : dragRange.right}\n ref={sliderButtonWrapperRef}\n onScroll={handleScroll}\n >\n <AnimatePresence>\n <StyledSliderButtonButtonsWrapper>\n {buttons}\n </StyledSliderButtonButtonsWrapper>\n </AnimatePresence>\n </StyledSliderButtonWrapper>\n </StyledSliderButton>\n ),\n [\n buttons,\n dragRange,\n handleDragEnd,\n handleScroll,\n handleWhileDrag,\n isDisabled,\n isSliderBigger,\n itemWidth,\n scope,\n thumbText,\n ],\n );\n};\n\nSliderButton.displayName = 'SliderButton';\n\nexport default SliderButton;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"SliderButton.js","names":["setRefreshScrollEnabled","AnimatePresence","useAnimate","React","useCallback","useEffect","useMemo","useRef","useState","useElementSize","calculateBiggestWidth","getNearestPoint","getThumbPosition","StyledMotionSliderButtonThumb","StyledSliderButton","StyledSliderButtonButtonsWrapper","StyledSliderButtonItem","StyledSliderButtonWrapper","SliderButton","_ref","selectedButtonId","isDisabled","items","onChange","selectedButton","setSelectedButton","undefined","dragRange","setDragRange","left","right","sliderButtonRef","sliderButtonWrapperRef","timeout","preventHandleScroll","scope","animate","itemWidth","sliderSize","isSliderBigger","width","length","sliderWidth","count","Math","floor","animation","x","current","type","duration","setItemPosition","index","scrollLeft","findIndex","_ref2","id","handleClick","buttons","map","_ref3","text","createElement","$width","key","onClick","$isSelected","thumbText","selectedItem","find","_ref4","snapPoints","points","i","push","handleDragEnd","position","middle","nearestPoint","nearestIndex","handleWhileDrag","scrollSpeed","handleScroll","event","target","clearTimeout","window","setTimeout","$isDisabled","ref","drag","dragElastic","dragConstraints","onDrag","onDragEnd","onScroll","displayName"],"sources":["../../../../src/components/slider-button/SliderButton.tsx"],"sourcesContent":["import { setRefreshScrollEnabled } from 'chayns-api';\nimport { AnimatePresence, useAnimate } from 'framer-motion';\nimport React, { FC, UIEvent, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useElementSize } from '../../hooks/useElementSize';\nimport type { SliderButtonItem } from '../../types/slider-button';\nimport { calculateBiggestWidth } from '../../utils/calculate';\nimport { getNearestPoint, getThumbPosition } from '../../utils/sliderButton';\nimport {\n StyledMotionSliderButtonThumb,\n StyledSliderButton,\n StyledSliderButtonButtonsWrapper,\n StyledSliderButtonItem,\n StyledSliderButtonWrapper,\n} from './SliderButton.styles';\n\nexport type SliderButtonProps = {\n /**\n * Whether the button is disabled.\n */\n isDisabled?: boolean;\n /**\n * Function to be executed when a button is selected.\n * @param id\n */\n onChange?: (id: string) => void;\n /**\n * The buttons that are slidable.\n */\n items: SliderButtonItem[];\n /**\n * The id of a button that should be selected.\n */\n selectedButtonId?: string;\n};\n\nconst SliderButton: FC<SliderButtonProps> = ({ selectedButtonId, isDisabled, items, onChange }) => {\n const [selectedButton, setSelectedButton] = useState<string | undefined>(undefined);\n const [dragRange, setDragRange] = useState({ left: 0, right: 0 });\n\n const sliderButtonRef = useRef<HTMLDivElement>(null);\n const sliderButtonWrapperRef = useRef<HTMLDivElement>(null);\n const timeout = useRef<number>();\n const preventHandleScroll = useRef(false);\n\n const [scope, animate] = useAnimate();\n\n const itemWidth = useMemo(() => calculateBiggestWidth(items), [items]);\n\n const sliderSize = useElementSize(sliderButtonRef);\n\n const isSliderBigger = useMemo(\n () => sliderSize && sliderSize.width < itemWidth * (items.length - 1),\n [itemWidth, items.length, sliderSize],\n );\n\n useEffect(() => {\n if (sliderSize) {\n const sliderWidth = itemWidth * (items.length - 1);\n\n const count = Math.floor(sliderSize.width / itemWidth);\n\n setDragRange({ left: 0, right: isSliderBigger ? itemWidth * count : sliderWidth });\n }\n }, [isSliderBigger, itemWidth, items.length, sliderSize]);\n\n const animation = useCallback(\n async (x: number) => {\n await animate(\n scope.current,\n { x },\n {\n type: 'tween',\n duration: 0.2,\n },\n );\n },\n [animate, scope],\n );\n\n const setItemPosition = useCallback(\n (index: number) => {\n if (!isSliderBigger) {\n void animation(itemWidth * index);\n\n return;\n }\n\n const count = dragRange.right / itemWidth;\n\n if (items.length - count >= index) {\n void animation(0);\n } else {\n void animation(itemWidth * (count - (items.length - index)));\n }\n\n if (sliderButtonWrapperRef.current) {\n sliderButtonWrapperRef.current.scrollLeft = itemWidth * index;\n }\n },\n [animation, dragRange.right, isSliderBigger, itemWidth, items.length],\n );\n\n useEffect(() => {\n if (selectedButtonId) {\n setSelectedButton(selectedButtonId);\n\n const index = items.findIndex(({ id }) => id === selectedButtonId);\n\n if (index >= 0) {\n setItemPosition(index);\n }\n } else {\n setSelectedButton(items[0]?.id);\n }\n }, [\n animation,\n dragRange.right,\n isSliderBigger,\n itemWidth,\n items,\n selectedButtonId,\n setItemPosition,\n ]);\n\n const handleClick = useCallback(\n (id: string, index: number) => {\n if (isDisabled) {\n return;\n }\n\n setSelectedButton(id);\n\n if (typeof onChange === 'function') {\n onChange(id);\n }\n\n setItemPosition(index);\n },\n [isDisabled, onChange, setItemPosition],\n );\n\n const buttons = useMemo(\n () =>\n items.map(({ id, text }, index) => (\n <StyledSliderButtonItem\n $width={itemWidth}\n key={`slider-button-${id}`}\n onClick={() => handleClick(id, index)}\n $isSelected={id === selectedButton}\n >\n {text}\n </StyledSliderButtonItem>\n )),\n [handleClick, itemWidth, items, selectedButton],\n );\n\n const thumbText = useMemo(() => {\n const selectedItem = items.find(({ id }) => id === selectedButton);\n\n return selectedItem ? selectedItem.text : '';\n }, [items, selectedButton]);\n\n /**\n * Creates an array with the snap points relative to the width of the items\n */\n const snapPoints = useMemo(() => {\n const points = [0];\n\n for (let i = 1; i < items.length; i++) {\n points.push(itemWidth * i);\n }\n\n return points;\n }, [itemWidth, items.length]);\n\n const handleDragEnd = useCallback(() => {\n void setRefreshScrollEnabled(true);\n\n const position = getThumbPosition({ scope, itemWidth });\n\n if (!position) {\n return;\n }\n\n const { middle, left } = position;\n\n let scrollLeft = 0;\n\n if (sliderButtonWrapperRef.current) {\n scrollLeft = sliderButtonWrapperRef.current.scrollLeft;\n\n sliderButtonWrapperRef.current.scrollLeft = getNearestPoint({\n snapPoints,\n position: middle,\n scrollLeft: scrollLeft - left,\n }).nearestPoint;\n }\n\n const { nearestIndex } = getNearestPoint({\n snapPoints,\n position: middle,\n scrollLeft,\n });\n\n const { nearestPoint } = getNearestPoint({\n snapPoints,\n position: middle,\n scrollLeft: 0,\n });\n\n if (nearestPoint >= 0 && nearestIndex >= 0) {\n void animation(nearestPoint);\n\n const id = items[nearestIndex]?.id;\n\n setSelectedButton(id);\n\n if (typeof onChange === 'function' && id) {\n onChange(id);\n }\n }\n\n preventHandleScroll.current = false;\n }, [animation, itemWidth, items, onChange, scope, snapPoints]);\n\n const handleWhileDrag = useCallback(() => {\n preventHandleScroll.current = true;\n void setRefreshScrollEnabled(false);\n\n const position = getThumbPosition({ scope, itemWidth });\n\n if (!position) {\n return;\n }\n\n const { right, left, middle } = position;\n\n let scrollLeft = 0;\n\n const scrollSpeed = 3;\n\n if (sliderButtonWrapperRef.current) {\n if (right >= dragRange.right) {\n sliderButtonWrapperRef.current.scrollLeft += scrollSpeed;\n }\n\n if (left <= dragRange.left) {\n sliderButtonWrapperRef.current.scrollLeft -= scrollSpeed;\n }\n\n scrollLeft = sliderButtonWrapperRef.current.scrollLeft;\n }\n\n const { nearestIndex } = getNearestPoint({ snapPoints, position: middle, scrollLeft });\n\n if (nearestIndex >= 0) {\n setSelectedButton(items[nearestIndex]?.id);\n }\n }, [dragRange, itemWidth, items, scope, snapPoints]);\n\n // With this, the handleScroll works before the thumb is moved the first time.\n useEffect(() => {\n void animation(1);\n void animation(0);\n }, [animation]);\n\n const handleScroll = useCallback(\n (event: UIEvent<HTMLElement>) => {\n if (preventHandleScroll.current) {\n return;\n }\n\n void setRefreshScrollEnabled(false);\n\n const position = getThumbPosition({ scope, itemWidth });\n\n if (!position) {\n return;\n }\n\n const { middle } = position;\n\n const { scrollLeft } = event.target as HTMLDivElement;\n\n const { nearestIndex } = getNearestPoint({ snapPoints, position: middle, scrollLeft });\n\n if (nearestIndex >= 0) {\n setSelectedButton(items[nearestIndex]?.id);\n }\n\n if (timeout.current) {\n clearTimeout(timeout.current);\n }\n\n timeout.current = window.setTimeout(() => {\n handleDragEnd();\n }, 200);\n },\n [handleDragEnd, itemWidth, items, scope, snapPoints],\n );\n\n return useMemo(\n () => (\n <StyledSliderButton $isDisabled={isDisabled} ref={sliderButtonRef}>\n <StyledMotionSliderButtonThumb\n ref={scope}\n drag={isDisabled ? false : 'x'}\n dragElastic={0}\n dragConstraints={\n isSliderBigger\n ? { ...dragRange, right: dragRange.right - itemWidth }\n : { ...dragRange }\n }\n $width={itemWidth}\n onDrag={handleWhileDrag}\n onDragEnd={handleDragEnd}\n >\n {thumbText}\n </StyledMotionSliderButtonThumb>\n <StyledSliderButtonWrapper\n $width={!isSliderBigger ? dragRange.right + itemWidth : dragRange.right}\n ref={sliderButtonWrapperRef}\n onScroll={handleScroll}\n >\n <AnimatePresence>\n <StyledSliderButtonButtonsWrapper>\n {buttons}\n </StyledSliderButtonButtonsWrapper>\n </AnimatePresence>\n </StyledSliderButtonWrapper>\n </StyledSliderButton>\n ),\n [\n buttons,\n dragRange,\n handleDragEnd,\n handleScroll,\n handleWhileDrag,\n isDisabled,\n isSliderBigger,\n itemWidth,\n scope,\n thumbText,\n ],\n );\n};\n\nSliderButton.displayName = 'SliderButton';\n\nexport default SliderButton;\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chayns-components/core",
3
- "version": "5.0.0-beta.603",
3
+ "version": "5.0.0-beta.604",
4
4
  "description": "A set of beautiful React components for developing your own applications with chayns.",
5
5
  "sideEffects": false,
6
6
  "browserslist": [
@@ -83,5 +83,5 @@
83
83
  "publishConfig": {
84
84
  "access": "public"
85
85
  },
86
- "gitHead": "d47f7a6bd3af8eb1373255054e7753066de296c4"
86
+ "gitHead": "cb6e2a5ea3e9b4d15a1e73cf1f7d089394b58320"
87
87
  }