hds-web 1.24.0 → 1.24.2
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/index.css +2 -2
- package/dist/index.es.css +2 -2
- package/dist/index.es.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/HDS/components/Tabs/tab.js +29 -57
- package/src/HDS/modules/navCard/navCard.js +14 -5
- package/src/styles/tailwind.css +8 -0
package/package.json
CHANGED
@@ -2,6 +2,7 @@ import React, { useState, useRef } from 'react';
|
|
2
2
|
import { HDSColor } from '../../foundation/ColorPalette';
|
3
3
|
import { Typography } from '../../foundation/Typography'
|
4
4
|
import PropTypes from 'prop-types';
|
5
|
+
import { motion } from 'framer-motion';
|
5
6
|
|
6
7
|
export default function Tab(props) {
|
7
8
|
const {
|
@@ -9,83 +10,54 @@ export default function Tab(props) {
|
|
9
10
|
onTabClick,
|
10
11
|
pillColor,
|
11
12
|
} = props;
|
12
|
-
const [activeTab, setActiveTab] = useState(tabs.find(tab => tab.current) || tabs[0]);
|
13
|
-
const pillRef = useRef(null);
|
13
|
+
const [activeTab, setActiveTab] = useState(tabs.find(tab => tab.current) || tabs[0].name);
|
14
14
|
let pillColorClass = '';
|
15
|
-
if(pillColor){
|
16
|
-
|
15
|
+
if (pillColor) {
|
16
|
+
pillColorClass = HDSColor(pillColor);
|
17
17
|
}
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
event.preventDefault();
|
22
|
-
setActiveTab(clickedTab);
|
18
|
+
|
19
|
+
const handleTabClick = (clickedTab) => {
|
20
|
+
setActiveTab(clickedTab.name);
|
23
21
|
if (onTabClick) {
|
24
22
|
onTabClick(clickedTab);
|
25
23
|
}
|
26
24
|
|
27
|
-
// Move the pill indicator to the clicked tab
|
28
|
-
const pill = pillRef.current;
|
29
|
-
if (pill) {
|
30
|
-
const pillWidth = event.currentTarget.offsetWidth;
|
31
|
-
const clickedTabOffset = event.currentTarget.offsetLeft;
|
32
|
-
const pillOffset = pill.parentElement.offsetLeft;
|
33
|
-
const translateX = clickedTabOffset;
|
34
|
-
|
35
|
-
pill.style.transform = `translateX(${translateX}px)`;
|
36
|
-
pill.style.width = `${pillWidth}px`;
|
37
|
-
}
|
38
25
|
};
|
39
|
-
let tabTextClass = '';
|
40
|
-
|
41
|
-
function tabClass(name) {
|
42
|
-
// console.log(currentTab['tabTextColorClass']);
|
43
|
-
|
44
|
-
if(activeTab['tabTextColorClass']){
|
45
|
-
tabTextClass = HDSColor(activeTab['tabTextColorClass']);
|
46
|
-
}
|
47
|
-
else tabTextClass = 'text-neutral-500'
|
26
|
+
let tabTextClass = '';
|
48
27
|
|
49
|
-
let classActive = ' text-neutral-0 transition-all rounded-full ' + pillColorClass;
|
50
|
-
let clasnInActive = ' flex-nowrap rounded-full ' + tabTextClass;
|
51
|
-
if (activeTab.name === name) {
|
52
|
-
return classActive;
|
53
|
-
}
|
54
|
-
else {
|
55
|
-
return clasnInActive;
|
56
|
-
}
|
57
|
-
}
|
58
28
|
return (
|
59
|
-
<div className=
|
60
|
-
<div className="block">
|
61
|
-
<nav className="relative inline-flex gap-2 rounded-
|
62
|
-
{tabs.map(tab => (
|
63
|
-
<
|
29
|
+
<div className="">
|
30
|
+
<div className="block ">
|
31
|
+
<nav className="relative inline-flex gap-2 rounded-[32px] " aria-label="Tabs">
|
32
|
+
{tabs.map((tab) => (
|
33
|
+
<button
|
64
34
|
key={tab.name}
|
65
|
-
onClick={(
|
35
|
+
onClick={() => {
|
36
|
+
handleTabClick(tab);
|
37
|
+
}}
|
38
|
+
className={`${activeTab === tab.name ? ' text-neutral-0 transition-all duration-300' : ' hover:bg-neutral-500/30 text-neutral-400'} relative px-3 py-1 whitespace-nowrap rounded-full hover:text-neutral-0`}
|
66
39
|
>
|
67
|
-
|
68
|
-
|
69
|
-
|
40
|
+
{activeTab === tab.name && (
|
41
|
+
<motion.div
|
42
|
+
layoutId="active-pill"
|
43
|
+
className={`absolute inset-0 ${pillColorClass}`}
|
44
|
+
style={{ borderRadius: 32 }}
|
45
|
+
// transition={{ duration:1 }}
|
46
|
+
|
47
|
+
/>
|
48
|
+
)}
|
49
|
+
<Typography textStyle="body3c-medium" className={`relative z-10 `}>
|
70
50
|
{tab.name}
|
71
51
|
</Typography>
|
72
|
-
</
|
52
|
+
</button>
|
73
53
|
))}
|
74
|
-
<span
|
75
|
-
ref={pillRef}
|
76
|
-
className={`absolute left-0 z-[1] ${pillColorClass} rounded-full transition-all ease-in duration-150`}
|
77
|
-
style={{
|
78
|
-
left: `${activeTab.index * 100}%`,
|
79
|
-
width: `${activeTab.width}px`, // Use the width of the clicked tab
|
80
|
-
height: '28px' // Add desired height to make the pill visible
|
81
|
-
}}
|
82
|
-
/>
|
83
54
|
</nav>
|
84
55
|
</div>
|
85
56
|
</div>
|
86
57
|
);
|
87
58
|
}
|
88
59
|
|
60
|
+
|
89
61
|
Tab.defaultProps = {
|
90
62
|
pillColor: 'bg-blue-500',
|
91
63
|
}
|
@@ -6,18 +6,19 @@ import { HDSColor } from '../../foundation/ColorPalette';
|
|
6
6
|
import { Tab } from '../../components/Tabs';
|
7
7
|
import { Icon } from '../../components/common-components/Icon'
|
8
8
|
import PropTypes from 'prop-types';
|
9
|
+
import { motion } from 'framer-motion';
|
9
10
|
|
10
11
|
|
11
12
|
export default function NavCard(props) {
|
12
13
|
const [showVideo, setShowVideo] = useState(false);
|
13
14
|
const TabCard = (tabContent) => {
|
14
|
-
|
15
|
+
|
15
16
|
return (
|
16
17
|
<>
|
17
18
|
<div className=''>
|
18
19
|
{tabContent.title && <Typography textStyle='body1c-semi-bold' className={HDSColor(tabContent.title_color)}>{tabContent.title}</Typography>}
|
19
20
|
|
20
|
-
{tabContent.subTitle && <Typography textStyle='body3' className={
|
21
|
+
{tabContent.subTitle && <Typography textStyle='body3' className={'mt-2 ' + HDSColor(tabContent.sub_title_color)}>{tabContent.subTitle}</Typography>}
|
21
22
|
{tabContent.readMore_cta && <div className="flex">
|
22
23
|
<a href={tabContent.readMore_cta_link ?? ''} >
|
23
24
|
<HDSButton
|
@@ -74,7 +75,7 @@ export default function NavCard(props) {
|
|
74
75
|
<div className="relative">
|
75
76
|
{
|
76
77
|
tabContent.img_url && (
|
77
|
-
<img src={tabContent.img_url} alt="Illustration" className=' rounded-2xl'/>
|
78
|
+
<img src={tabContent.img_url} alt="Illustration" className=' rounded-2xl' />
|
78
79
|
)
|
79
80
|
}
|
80
81
|
{
|
@@ -126,13 +127,21 @@ export default function NavCard(props) {
|
|
126
127
|
bgColorTab={props.bgColorTab}
|
127
128
|
/>
|
128
129
|
</div>
|
129
|
-
<div
|
130
|
+
<motion.div
|
131
|
+
key={activeTab}
|
132
|
+
initial={{ opacity: 0.8 }} // Initial opacity when the component is rendered
|
133
|
+
animate={{ opacity: 1 }} // Opacity when the tab switches
|
134
|
+
exit={{ opacity: 0.8 }} // Opacity when exiting the component
|
135
|
+
transition={{ duration: 1, ease: 'easeIn' }} // Tr
|
136
|
+
|
137
|
+
className=''>
|
130
138
|
{props.tabContent &&
|
131
139
|
props.tabContent[activeTab] &&
|
132
140
|
TabCard(props.tabContent[activeTab])}
|
133
|
-
</div>
|
141
|
+
</motion.div>
|
134
142
|
|
135
143
|
</div>}
|
136
144
|
</div>
|
137
145
|
)
|
138
146
|
}
|
147
|
+
|
package/src/styles/tailwind.css
CHANGED
@@ -9829,6 +9829,14 @@ select{
|
|
9829
9829
|
background-color: rgb(133 77 24 / var(--tw-bg-opacity));
|
9830
9830
|
}
|
9831
9831
|
|
9832
|
+
.hover\:bg-neutral-0\/20:hover{
|
9833
|
+
background-color: rgb(255 255 255 / 0.2);
|
9834
|
+
}
|
9835
|
+
|
9836
|
+
.hover\:bg-neutral-500\/30:hover{
|
9837
|
+
background-color: rgb(108 115 127 / 0.3);
|
9838
|
+
}
|
9839
|
+
|
9832
9840
|
.hover\:pl-\[9px\]:hover{
|
9833
9841
|
padding-left: 9px;
|
9834
9842
|
}
|