hds-web 1.6.8 → 1.6.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/package.json +1 -1
- package/src/HDS/assets/icons/calendar-plus-01.svg +1 -1
- package/src/HDS/assets/icons/calendar-plus-02.svg +1 -1
- package/src/HDS/assets/icons/hasura-1.svg +3 -0
- package/src/HDS/assets/icons/hasura-2.svg +3 -0
- package/src/HDS/assets/icons/hasura-3.svg +3 -0
- package/src/HDS/components/Avatars/hasConAv.js +9 -10
- package/src/HDS/components/Avatars/profileAvatar.js +10 -29
- package/src/HDS/components/BadgesCaption/badges.js +7 -4
- package/src/HDS/components/Buttons/button.js +25 -14
- package/src/HDS/components/Cards/Dropdown/v3Dropdown.js +1 -1
- package/src/HDS/components/Cards/Feedback/feedback.js +1 -1
- package/src/HDS/components/Cards/ImageBox/imagebox.js +51 -0
- package/src/HDS/components/Cards/ImageBox/index.js +1 -0
- package/src/HDS/components/Cards/Link/link.js +19 -13
- package/src/HDS/components/Cards/Menu/flyout.js +5 -4
- package/src/HDS/components/Cards/Menu/flyoutA.js +5 -4
- package/src/HDS/components/Cards/Menu/flyoutFull.js +1 -0
- package/src/HDS/components/Cards/Misc/iconCard.js +71 -60
- package/src/HDS/components/Cards/Misc/index.js +1 -0
- package/src/HDS/components/Cards/Misc/talkCard.js +19 -18
- package/src/HDS/components/Cards/Misc/talkcard2.js +118 -0
- package/src/HDS/components/Cards/TalkDetailCard/talkDetailCard.js +83 -52
- package/src/HDS/components/Carousels/carouselCard.js +101 -90
- package/src/HDS/components/Headers/v3Header.js +111 -85
- package/src/HDS/components/Hero/h2.js +58 -36
- package/src/HDS/components/Hero/h3.js +413 -0
- package/src/HDS/components/Hero/index.js +2 -1
- package/src/HDS/components/Tables/index.js +2 -1
- package/src/HDS/components/Tables/tableB.js +10 -10
- package/src/HDS/components/Tables/tableC.js +20 -23
- package/src/HDS/components/Tables/tableD.js +326 -0
- package/src/HDS/components/Tabs/tab.js +47 -16
- package/src/HDS/components/common-components/Icon/IconMap.js +6 -0
- package/src/HDS/components/index.js +2 -1
- package/src/HDS/foundation/ColorPalette/color.js +193 -1
- package/src/HDS/foundation/Typography/Typography.js +2 -1
- package/src/HDS/helpers/Grid/grid.js +64 -0
- package/src/HDS/helpers/Grid/index.js +1 -0
- package/src/HDS/helpers/Media/index.js +1 -0
- package/src/HDS/helpers/Media/mediabox.js +75 -0
- package/src/HDS/helpers/index.js +2 -1
- package/src/HDS/modules/TextCard/textCard.js +8 -71
- package/src/HDS/modules/index.js +2 -1
- package/src/HDS/modules/navCard/index.js +1 -0
- package/src/HDS/modules/navCard/navCard.js +82 -0
- package/src/index.css +39 -1
- package/src/styles/tailwind.css +3104 -1848
- package/tailwind.config.js +6 -3
@@ -9,6 +9,19 @@ import { v4 as uuidv4 } from 'uuid';
|
|
9
9
|
|
10
10
|
export default function HeroSecondary({ heroData, logo, scrollArrow, fontSize }) {
|
11
11
|
const [valumeMuteIcon, setValumeMuteIcon] = useState("volumex");
|
12
|
+
|
13
|
+
const scrollToNextDiv = (element) => {
|
14
|
+
const nextDiv = element.nextElementSibling;
|
15
|
+
if (nextDiv) {
|
16
|
+
nextDiv.scrollIntoView({ behavior: 'smooth' });
|
17
|
+
}
|
18
|
+
};
|
19
|
+
|
20
|
+
const handleClick = (event) => {
|
21
|
+
const arrowIcon = event.target;
|
22
|
+
const arrowContainer = arrowIcon.parentNode;
|
23
|
+
scrollToNextDiv(arrowContainer);
|
24
|
+
};
|
12
25
|
const videoMute = () => {
|
13
26
|
if (heroData.video_url) {
|
14
27
|
const videoEle = document.getElementById("hero_vid");
|
@@ -95,34 +108,34 @@ export default function HeroSecondary({ heroData, logo, scrollArrow, fontSize })
|
|
95
108
|
const heroButton = () => (
|
96
109
|
heroData.buttons && (
|
97
110
|
<div className={" gap-6 flex items-center tb:justify-center tb-l:justify-start db:justify-start pt-6" + ((heroData.video_url) ? " tb:justify-center" : " tb:justify-start")}>
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
111
|
+
|
112
|
+
|
113
|
+
{heroData.buttons[0] &&
|
114
|
+
<HDSButton
|
102
115
|
type="secondary"
|
103
116
|
btnTextColorClass={HDSColor('text-neutral-0')}
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
117
|
+
leftIconVariant='none'
|
118
|
+
rightIconVariant='none'
|
119
|
+
label={heroData.buttons[0].cta_text}
|
120
|
+
state='default'
|
121
|
+
size='lg'
|
122
|
+
rightAnimatedArrow='true'
|
123
|
+
rightAnimatedArrowColor='#ffffff'
|
124
|
+
/>
|
125
|
+
}
|
126
|
+
{heroData.buttons[1] && <HDSButton
|
127
|
+
type="primaryLink"
|
128
|
+
btnTextColorClass={HDSColor('text-neutral-0')}
|
129
|
+
leftIconVariant='none'
|
130
|
+
rightIconVariant='none'
|
131
|
+
label={heroData.buttons[1].cta_text}
|
132
|
+
state='default'
|
133
|
+
size='lg'
|
134
|
+
rightAnimatedArrow='true'
|
135
|
+
rightAnimatedArrowColor='#ffffff'
|
136
|
+
/>}
|
137
|
+
|
138
|
+
|
126
139
|
</div>
|
127
140
|
)
|
128
141
|
)
|
@@ -153,20 +166,20 @@ export default function HeroSecondary({ heroData, logo, scrollArrow, fontSize })
|
|
153
166
|
|
154
167
|
const imageCard = (heroData) => (
|
155
168
|
heroData.imageUrl && (
|
156
|
-
<div className="
|
157
|
-
<img src={heroData.imageUrl} alt={heroData.imageAlt} className='w-full ' />
|
169
|
+
<div className="">
|
170
|
+
<img src={heroData.imageUrl} alt={heroData.imageAlt} className='tb-l:w-full w-1/2' />
|
158
171
|
</div>
|
159
172
|
)
|
160
173
|
)
|
161
|
-
|
174
|
+
|
162
175
|
const videoGradientBg = HDSColor(heroData.video_gradient_bg);
|
163
176
|
return (
|
164
177
|
<div className="">
|
165
178
|
<div className="">
|
166
179
|
<div className={"max-w-7xl mx-auto px-20 py-20 rounded-3xl overflow-hidden " + ((heroData.bg_color) ? heroData.bg_color : "")} >
|
167
180
|
<div className="w-full">
|
168
|
-
<div className={"tb-l:flex tb-l:items-center tb-l:flex-row db:w-full flex flex-col-reverse tb:gap-x-16 db:gap-x-10 min-[1880px]:gap-x-72" + ((heroData.video_url) ? " " : " tb:flex")}>
|
169
|
-
<div className='w-full tb:flex items-start tb:flex-col mt-4 tb:mt-0'
|
181
|
+
<div className={"tb-l:flex tb-l:justify-between tb-l:items-center tb-l:flex-row db:w-full flex flex-col-reverse tb:gap-x-16 db:gap-x-10 min-[1880px]:gap-x-72" + ((heroData.video_url) ? " " : " tb:flex")}>
|
182
|
+
<div className='max-w-[29.18rem] w-full tb:flex items-start tb:flex-col mt-4 tb:mt-0'
|
170
183
|
>
|
171
184
|
{
|
172
185
|
heroData.tag_line && (
|
@@ -188,14 +201,18 @@ export default function HeroSecondary({ heroData, logo, scrollArrow, fontSize })
|
|
188
201
|
|
189
202
|
{
|
190
203
|
heroData.description && (
|
191
|
-
<Typography textStyle="sub1" className="
|
204
|
+
<Typography textStyle="sub1" className="db:text-left text-neutral-0 [&>*]:mb-8 last:[&>*]:mb-0">{heroData.description}</Typography>
|
192
205
|
)
|
193
206
|
}
|
194
207
|
{heroButton(heroData)}
|
195
208
|
|
196
|
-
|
209
|
+
|
197
210
|
</div>
|
211
|
+
<div className="">
|
212
|
+
|
213
|
+
|
198
214
|
{imageCard(heroData)}
|
215
|
+
</div>
|
199
216
|
</div>
|
200
217
|
|
201
218
|
{LinkCardsFn(heroData)}
|
@@ -203,9 +220,14 @@ export default function HeroSecondary({ heroData, logo, scrollArrow, fontSize })
|
|
203
220
|
</div>
|
204
221
|
</div>
|
205
222
|
{
|
206
|
-
scrollArrow && (
|
207
|
-
|
208
|
-
|
223
|
+
heroData.scrollArrow && (
|
224
|
+
<a className="flex justify-center flex-row z-10" onClick={(e) => scrollToNextDiv(e.currentTarget)}>
|
225
|
+
<div className="flex bg-neutral-0 shadow-md -mt-5 animate-bounce justify-center rounded-full items-center w-12 h-12" onClick={handleClick} >
|
226
|
+
<Icon
|
227
|
+
variant='chevrondowndouble'
|
228
|
+
strokeClass='stroke-neutral-800' height='h-6 w-6' />
|
229
|
+
</div>
|
230
|
+
</a>
|
209
231
|
)
|
210
232
|
}
|
211
233
|
</div>
|
@@ -0,0 +1,413 @@
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
2
|
+
import { MediaBox } from '../../helpers/Media';
|
3
|
+
import { Typography } from '../../foundation/Typography';
|
4
|
+
import { HDSButton } from '../../components/Buttons';
|
5
|
+
import { HDSColor } from '../../foundation/ColorPalette';
|
6
|
+
import { Tab } from '../../components/Tabs';
|
7
|
+
import PropTypes from 'prop-types';
|
8
|
+
import { LinkCard } from '../Cards/Link';
|
9
|
+
|
10
|
+
const tabCard = (Content) => (
|
11
|
+
<>
|
12
|
+
<div className='tb:px-3'>
|
13
|
+
{Content.title &&
|
14
|
+
<Typography
|
15
|
+
textStyle='h2'
|
16
|
+
className={HDSColor(Content.titleTextColor)}>
|
17
|
+
{Content.title}
|
18
|
+
</Typography>}
|
19
|
+
|
20
|
+
{Content.subTitle &&
|
21
|
+
<Typography
|
22
|
+
textStyle='sub2'
|
23
|
+
className={`mt-2 ${HDSColor(Content.subTitleTextColor)}`}>
|
24
|
+
{Content.subTitle}
|
25
|
+
</Typography>}
|
26
|
+
</div>
|
27
|
+
{Content.btnLabel &&
|
28
|
+
<div className='flex pl-3 pt-6'>
|
29
|
+
<HDSButton
|
30
|
+
label={Content.btnLabel}
|
31
|
+
type='secondary'
|
32
|
+
leftIconVariant='none'
|
33
|
+
rightIconVariant='none'
|
34
|
+
state='default'
|
35
|
+
size='sm'
|
36
|
+
rightAnimatedArrow={true}
|
37
|
+
rightAnimatedArrowColor='#1E56E3'
|
38
|
+
animatedHoverStroke='group-hover:stroke-blue-600'
|
39
|
+
className='flex'
|
40
|
+
btnTextColorClass='text-blue-600'
|
41
|
+
/>
|
42
|
+
</div>
|
43
|
+
}
|
44
|
+
|
45
|
+
</>
|
46
|
+
)
|
47
|
+
|
48
|
+
export default function HeroCapability(props) {
|
49
|
+
const {
|
50
|
+
heroData,
|
51
|
+
activeTab,
|
52
|
+
onTabChange
|
53
|
+
} = props;
|
54
|
+
let currentTab;
|
55
|
+
if(activeTab.activeTab){
|
56
|
+
currentTab = activeTab.activeTab;
|
57
|
+
}
|
58
|
+
if (!heroData) {
|
59
|
+
return <div></div>; // Replace with your loading indicator or fallback UI
|
60
|
+
}
|
61
|
+
|
62
|
+
const LinkCardsFn = (heroData) => {
|
63
|
+
return (
|
64
|
+
heroData.linkCards && (
|
65
|
+
<div className="flex px-8 tb:px-0 tb:justify-center overflow-auto scrollbar-hide flex-row mt-16 gap-6 tb:flex-row ">
|
66
|
+
{heroData.linkCards.map((card, index) => (
|
67
|
+
<div key={index} className={`${HDSColor(card.cardBorderClass)} border rounded-2xl w-full pb-2 min-w-[11.5rem] max-w-[22.313rem]`}>
|
68
|
+
<LinkCard
|
69
|
+
titleTextColor= {card.titleTextColor}
|
70
|
+
descTextColor={card.descTextColor}
|
71
|
+
linkUrl={card.linkUrl}
|
72
|
+
cardBgColor={card.cardBgColor}
|
73
|
+
cardHoverBg={card.cardHoverBg}
|
74
|
+
iconVariant={card.iconVariant}
|
75
|
+
iconStrokeClass={card.iconStrokeColor}
|
76
|
+
iconArrowVariant={card.iconArrowVariant}
|
77
|
+
iconArrowStrokeClass={card.iconArrowStrokeColor}
|
78
|
+
title={card.title}
|
79
|
+
description={card.description}
|
80
|
+
/>
|
81
|
+
</div>
|
82
|
+
))}
|
83
|
+
</div>
|
84
|
+
)
|
85
|
+
);
|
86
|
+
};
|
87
|
+
|
88
|
+
|
89
|
+
const handleTabClick = (tab) => {
|
90
|
+
if (tab.name) {
|
91
|
+
const nameCheck = tab.name.replace(/\s/g, ''); // Remove spaces from tab name
|
92
|
+
onTabChange(nameCheck);
|
93
|
+
}
|
94
|
+
else return;
|
95
|
+
// Perform any other actions based on the clicked tab
|
96
|
+
}
|
97
|
+
let heroBgColorClass = '';
|
98
|
+
let bgTabClass = '';
|
99
|
+
let videoUrl = '';
|
100
|
+
let videoPoster = '';
|
101
|
+
let img_url = '';
|
102
|
+
let pillColorClass= '';
|
103
|
+
if(props.heroData && props.heroData.tabContent && props.heroData.tabContent[currentTab] && props.heroData.tabContent[currentTab]['heroBgColor']){
|
104
|
+
heroBgColorClass = HDSColor(props.heroData.tabContent[currentTab]['heroBgColor'])
|
105
|
+
}
|
106
|
+
if(props.heroData && props.heroData.tabContent && props.heroData.tabContent[currentTab] && props.heroData.tabContent[currentTab]['bgColorTab']){
|
107
|
+
bgTabClass = HDSColor(props.heroData.tabContent[currentTab]['bgColorTab'])
|
108
|
+
}
|
109
|
+
if(props.heroData && props.heroData.tabContent && props.heroData.tabContent[currentTab] && props.heroData.tabContent[currentTab]['videoUrl']){
|
110
|
+
videoUrl = props.heroData.tabContent[currentTab]['videoUrl']
|
111
|
+
}
|
112
|
+
if(props.heroData && props.heroData.tabContent && props.heroData.tabContent[currentTab] && props.heroData.tabContent[currentTab]['videoPoster']){
|
113
|
+
videoPoster = props.heroData.tabContent[currentTab]['videoPoster']
|
114
|
+
}
|
115
|
+
if(props.heroData && props.heroData.tabContent && props.heroData.tabContent[currentTab] && props.heroData.tabContent[currentTab]['img_url']){
|
116
|
+
img_url = props.heroData.tabContent[currentTab]['img_url']
|
117
|
+
}
|
118
|
+
if(props.heroData && props.heroData.tabContent && props.heroData.tabContent[currentTab] && props.heroData.tabContent[currentTab]['pillColor']){
|
119
|
+
pillColorClass = props.heroData.tabContent[currentTab]['pillColor']
|
120
|
+
}
|
121
|
+
if(props.heroData && props.heroData.tabContent && props.heroData.tabContent[currentTab] && props.heroData.tabContent[currentTab]['bgColorTab']){
|
122
|
+
bgTabClass = HDSColor(props.heroData.tabContent[currentTab]['bgColorTab']);
|
123
|
+
}
|
124
|
+
|
125
|
+
return (
|
126
|
+
<div className={`${(heroBgColorClass)} -mt-[81px] pt-[81px] tb:mt-0 tb:pt-0 max-w-7xl rounded-b-3xl tb:rounded-3xl`} >
|
127
|
+
{/* <div className={`${(heroBgColorClass)} max-w-7xl rounded-3xl bg-gradient-to-br from-green-500 to-green-900`} > */}
|
128
|
+
{props.heroData.navTabs &&
|
129
|
+
|
130
|
+
<div className='py-5 db:p-20 tb:p-10 flex flex-col shadow rounded-2xl'>
|
131
|
+
|
132
|
+
<div className='flex px-8 tb:px-0 overflow-scroll scrollbar-hide tb-l:justify-center justify-start'>
|
133
|
+
<div className={`${bgTabClass} bg-opacity-30 p-1 rounded-[32px]`}>
|
134
|
+
<Tab
|
135
|
+
onTabClick={handleTabClick}
|
136
|
+
tabs={props.heroData.navTabs}
|
137
|
+
bgColorTab={props.heroData.bgColorTab}
|
138
|
+
pillColor={pillColorClass}
|
139
|
+
/>
|
140
|
+
</div>
|
141
|
+
</div>
|
142
|
+
<div className='flex flex-col-reverse pt-6 px-8 tb:px-0 tb:flex tb:flex-row tb:items-center tb:pt-10 tb:justify-between'>
|
143
|
+
<div className=' mt-3 db:max-w-[488px] tb:w-1/2'>
|
144
|
+
{props.heroData.tabContent &&
|
145
|
+
props.heroData.tabContent[currentTab] &&
|
146
|
+
tabCard(props.heroData.tabContent[currentTab])}
|
147
|
+
</div>
|
148
|
+
<div className=' db:max-w-[540px] tb:w-1/2 '>
|
149
|
+
<MediaBox
|
150
|
+
video_url = {videoUrl}
|
151
|
+
video_poster = {videoPoster}
|
152
|
+
|
153
|
+
/>
|
154
|
+
</div>
|
155
|
+
</div>
|
156
|
+
|
157
|
+
<div className=''>
|
158
|
+
{props.heroData.tabContent[currentTab] &&
|
159
|
+
LinkCardsFn(props.heroData.tabContent[currentTab])}
|
160
|
+
</div>
|
161
|
+
</div>
|
162
|
+
|
163
|
+
}
|
164
|
+
|
165
|
+
</div>
|
166
|
+
)
|
167
|
+
}
|
168
|
+
|
169
|
+
|
170
|
+
|
171
|
+
|
172
|
+
HeroCapability.defaultProps={
|
173
|
+
heroData : {
|
174
|
+
tabContent: {
|
175
|
+
'Performance': {
|
176
|
+
heroBgColor:'bg-green-500',
|
177
|
+
title: 'Blazing-fast APIs at Global Scale ',
|
178
|
+
subTitle: 'Hasura optimizes your API performance up to 10x faster with end-to-end caching, while scaling both vertically and horizontally.',
|
179
|
+
videoUrl: "https://res.cloudinary.com/dh8fp23nd/video/upload/v1683307555/hasura-con-2023/tg_hascon23_homepage_ue29jn.mp4",
|
180
|
+
videoPoster: "https://res.cloudinary.com/dh8fp23nd/image/upload/v1685017301/Group_2608667_gu6idw.png",
|
181
|
+
subTitleTextColor: 'text-neutral-0',
|
182
|
+
titleTextColor: 'text-neutral-0',
|
183
|
+
bgColorTab: 'bg-neutral-1000',
|
184
|
+
pillColor:'bg-pink-500',
|
185
|
+
button: [
|
186
|
+
{
|
187
|
+
cta_text: 'Get Started',
|
188
|
+
btnBg: '',
|
189
|
+
bg_color: 'bg-blue-900',
|
190
|
+
|
191
|
+
cta_link: '',
|
192
|
+
cta_type:''
|
193
|
+
},
|
194
|
+
{
|
195
|
+
cta_text: 'Get Started',
|
196
|
+
btnBg: '',
|
197
|
+
bg_color: 'bg-blue-900',
|
198
|
+
cta_link: '',
|
199
|
+
cta_type:''
|
200
|
+
}
|
201
|
+
],
|
202
|
+
linkCards: [
|
203
|
+
{
|
204
|
+
titleTextColor: 'text-neutral-0',
|
205
|
+
descTextColor: 'text-neutral-0',
|
206
|
+
iconVariant: 'videorecorder',
|
207
|
+
iconStrokeColor: '#3970FD',
|
208
|
+
iconArrowVariant: 'arrownarrowupright',
|
209
|
+
iconArrowStrokeColor: 'blue-400',
|
210
|
+
title: 'Webinar',
|
211
|
+
description: 'Model Level Authorization System for GraphQL with Hasura',
|
212
|
+
|
213
|
+
|
214
|
+
},
|
215
|
+
{
|
216
|
+
cardBgColor: 'bg-pink-300',
|
217
|
+
cardHoverBg: 'bg-pink-900',
|
218
|
+
iconVariant: 'videorecorder',
|
219
|
+
iconStrokeColor: '#3970FD',
|
220
|
+
iconArrowVariant: 'arrownarrowupright',
|
221
|
+
iconArrowStrokeColor: 'blue-400',
|
222
|
+
title: 'Webinar',
|
223
|
+
description: 'GraphQL response caching',
|
224
|
+
|
225
|
+
|
226
|
+
},
|
227
|
+
{
|
228
|
+
cardBgColor: 'bg-pink-300',
|
229
|
+
cardHoverBg: 'bg-pink-900',
|
230
|
+
iconVariant: 'videorecorder',
|
231
|
+
iconStrokeColor: '#3970FD',
|
232
|
+
iconArrowVariant: 'arrownarrowupright',
|
233
|
+
iconArrowStrokeColor: 'blue-400',
|
234
|
+
title: 'Webinar',
|
235
|
+
description: 'Model Level Authorization System for GraphQL with Hasura',
|
236
|
+
|
237
|
+
|
238
|
+
},
|
239
|
+
],
|
240
|
+
|
241
|
+
|
242
|
+
|
243
|
+
|
244
|
+
},
|
245
|
+
'Company': {
|
246
|
+
heroBgColor:'bg-blue-500',
|
247
|
+
title: 'Leverage Hasura’s Authorization Engine',
|
248
|
+
subTitle: 'Hasura optimizes your API performance up to 10x faster with end-to-end caching, while scaling both vertically and horizontally.ss',
|
249
|
+
videoUrl: "https://res.cloudinary.com/dh8fp23nd/video/upload/v1683307555/hasura-con-2023/tg_hascon23_homepage_ue29jn.mp4",
|
250
|
+
videoPoster: "https://res.cloudinary.com/dh8fp23nd/image/upload/v1685017301/Group_2608667_gu6idw.png",
|
251
|
+
imgUrl:'',
|
252
|
+
subTitleTextColor: 'text-neutral-0',
|
253
|
+
titleTextColor: 'text-neutral-0',
|
254
|
+
bgColorTab: 'bg-neutral-1000',
|
255
|
+
pillColor:'bg-amber-500',
|
256
|
+
button: [
|
257
|
+
{
|
258
|
+
cta_text: 'Get Started',
|
259
|
+
btnBg: '',
|
260
|
+
bg_color: 'bg-blue-900',
|
261
|
+
|
262
|
+
cta_link: '',
|
263
|
+
cta_type:''
|
264
|
+
},
|
265
|
+
{
|
266
|
+
cta_text: 'Get Started',
|
267
|
+
btnBg: '',
|
268
|
+
bg_color: 'bg-blue-900',
|
269
|
+
cta_link: '',
|
270
|
+
cta_type:''
|
271
|
+
}
|
272
|
+
],
|
273
|
+
linkCards: [
|
274
|
+
{
|
275
|
+
titleTextColor: 'text-neutral-0',
|
276
|
+
descTextColor: 'text-neutral-0',
|
277
|
+
iconVariant: 'videorecorder',
|
278
|
+
iconStrokeColor: '#3970FD',
|
279
|
+
iconArrowVariant: 'arrownarrowupright',
|
280
|
+
iconArrowStrokeColor: 'blue-400',
|
281
|
+
title: 'Webinar',
|
282
|
+
description: 'Model Level Authorization System for GraphQL with Hasura',
|
283
|
+
|
284
|
+
|
285
|
+
},
|
286
|
+
{
|
287
|
+
cardBgColor: 'bg-pink-300',
|
288
|
+
cardHoverBg: 'bg-pink-900',
|
289
|
+
iconVariant: 'videorecorder',
|
290
|
+
iconStrokeColor: '#3970FD',
|
291
|
+
iconArrowVariant: 'arrownarrowupright',
|
292
|
+
iconArrowStrokeColor: 'blue-400',
|
293
|
+
title: 'Webinar',
|
294
|
+
description: 'Model Level Authorization System for GraphQL with Hasura',
|
295
|
+
|
296
|
+
|
297
|
+
},
|
298
|
+
{
|
299
|
+
cardBgColor: 'bg-pink-300',
|
300
|
+
cardHoverBg: 'bg-pink-900',
|
301
|
+
iconVariant: 'videorecorder',
|
302
|
+
iconStrokeColor: '#3970FD',
|
303
|
+
iconArrowVariant: 'arrownarrowupright',
|
304
|
+
iconArrowStrokeColor: 'blue-400',
|
305
|
+
title: 'Webinar',
|
306
|
+
description: 'Model Level Authorization System for GraphQL with Hasura',
|
307
|
+
|
308
|
+
|
309
|
+
},
|
310
|
+
],
|
311
|
+
|
312
|
+
|
313
|
+
|
314
|
+
|
315
|
+
},
|
316
|
+
'Authorization': {
|
317
|
+
heroBgColor:'bg-cyan-500',
|
318
|
+
title: 'Blazing-fast APIs at Global Scale ',
|
319
|
+
subTitle: 'Hasura optimizes your API performance up to 10x faster with end-to-end caching, while scaling both vertically and horizontally.',
|
320
|
+
videoUrl: "https://res.cloudinary.com/dh8fp23nd/video/upload/v1683307555/hasura-con-2023/tg_hascon23_homepage_ue29jn.mp4",
|
321
|
+
videoPoster: "https://res.cloudinary.com/dh8fp23nd/image/upload/v1685017301/Group_2608667_gu6idw.png",
|
322
|
+
imgUrl:'',
|
323
|
+
subTitleTextColor: 'text-neutral-0',
|
324
|
+
titleTextColor: 'text-neutral-0',
|
325
|
+
bgColorTab: 'bg-pink-500',
|
326
|
+
pillColor:'bg-neutral-500',
|
327
|
+
button: [
|
328
|
+
{
|
329
|
+
cta_text: 'Get Started',
|
330
|
+
btnBg: '',
|
331
|
+
bg_color: 'bg-blue-900',
|
332
|
+
|
333
|
+
cta_link: '',
|
334
|
+
cta_type:''
|
335
|
+
},
|
336
|
+
{
|
337
|
+
cta_text: 'Get Started',
|
338
|
+
btnBg: '',
|
339
|
+
bg_color: 'bg-blue-900',
|
340
|
+
cta_link: '',
|
341
|
+
cta_type:''
|
342
|
+
}
|
343
|
+
],
|
344
|
+
linkCards: [
|
345
|
+
{
|
346
|
+
titleTextColor: 'text-neutral-0',
|
347
|
+
descTextColor: 'text-neutral-0',
|
348
|
+
iconVariant: 'videorecorder',
|
349
|
+
iconStrokeColor: '#3970FD',
|
350
|
+
iconArrowVariant: 'arrownarrowupright',
|
351
|
+
iconArrowStrokeColor: 'blue-400',
|
352
|
+
title: 'Webinar',
|
353
|
+
description: 'Model Level Authorization System for GraphQL with Hasura',
|
354
|
+
|
355
|
+
|
356
|
+
},
|
357
|
+
{
|
358
|
+
cardBgColor: 'bg-pink-300',
|
359
|
+
cardHoverBg: 'bg-pink-900',
|
360
|
+
iconVariant: 'videorecorder',
|
361
|
+
iconStrokeColor: '#3970FD',
|
362
|
+
iconArrowVariant: 'arrownarrowupright',
|
363
|
+
iconArrowStrokeColor: 'blue-400',
|
364
|
+
title: 'Webinar',
|
365
|
+
description: 'Model Level Authorization System for GraphQL with Hasura',
|
366
|
+
|
367
|
+
|
368
|
+
},
|
369
|
+
{
|
370
|
+
cardBgColor: 'bg-pink-300',
|
371
|
+
cardHoverBg: 'bg-pink-900',
|
372
|
+
iconVariant: 'videorecorder',
|
373
|
+
iconStrokeColor: '#3970FD',
|
374
|
+
iconArrowVariant: 'arrownarrowupright',
|
375
|
+
iconArrowStrokeColor: 'blue-400',
|
376
|
+
title: 'Webinar',
|
377
|
+
description: 'Model Level Authorization System for GraphQL with Hasura',
|
378
|
+
|
379
|
+
|
380
|
+
},
|
381
|
+
],
|
382
|
+
|
383
|
+
|
384
|
+
|
385
|
+
|
386
|
+
},
|
387
|
+
},
|
388
|
+
|
389
|
+
navTabs: [
|
390
|
+
{
|
391
|
+
current: true,
|
392
|
+
name: 'Performance'
|
393
|
+
},
|
394
|
+
{
|
395
|
+
current: 'false',
|
396
|
+
name: 'Company'
|
397
|
+
},
|
398
|
+
{
|
399
|
+
current: 'false',
|
400
|
+
name: 'Authorization'
|
401
|
+
},
|
402
|
+
{
|
403
|
+
current: 'false',
|
404
|
+
name: 'Observability'
|
405
|
+
},
|
406
|
+
{
|
407
|
+
current: 'false',
|
408
|
+
name: 'API Security'
|
409
|
+
}
|
410
|
+
]
|
411
|
+
}
|
412
|
+
|
413
|
+
}
|
@@ -7,9 +7,9 @@ import { Tab } from '../Tabs'
|
|
7
7
|
import ReactMarkdown from "react-markdown";
|
8
8
|
|
9
9
|
const tabs = [
|
10
|
-
{ name: '
|
11
|
-
{ name: '
|
12
|
-
{ name: '
|
10
|
+
{ name: 'Tier 1', href: '', current: true },
|
11
|
+
{ name: 'Tier 2', href: '', current: false },
|
12
|
+
{ name: 'Tier 3', href: '', current: false },
|
13
13
|
]
|
14
14
|
|
15
15
|
|
@@ -66,9 +66,9 @@ export default function TableB(props) {
|
|
66
66
|
const [activeTab, setActiveTab] = useState(1);
|
67
67
|
|
68
68
|
function handleTabClick(tab) {
|
69
|
-
if (tab.name === '
|
70
|
-
if (tab.name === '
|
71
|
-
if (tab.name === '
|
69
|
+
if (tab.name === 'Tier 1') setActiveTab(1);
|
70
|
+
if (tab.name === 'Tier 2') setActiveTab(2);
|
71
|
+
if (tab.name === 'Tier 3') setActiveTab(3);
|
72
72
|
// Perform any other actions based on the clicked tab
|
73
73
|
}
|
74
74
|
|
@@ -94,7 +94,7 @@ export default function TableB(props) {
|
|
94
94
|
</Typography>
|
95
95
|
)}
|
96
96
|
</div>
|
97
|
-
<div className=' mt-11 rounded-full shadow tb-l:hidden'>
|
97
|
+
<div className=' mt-11 p-2 bg-neutral-0 rounded-full shadow tb-l:hidden'>
|
98
98
|
<Tab onTabClick={handleTabClick} tabs={tabs} />
|
99
99
|
</div>
|
100
100
|
</div>
|
@@ -170,7 +170,7 @@ export default function TableB(props) {
|
|
170
170
|
<div className="mt-12 bg-neutral-0 rounded-3xl ">
|
171
171
|
<table className="min-w-full shadow tableclss rounded-3xl ">
|
172
172
|
<thead>
|
173
|
-
<tr className='divide-x divide-neutral-200 text-center rounded-t-3xl'>
|
173
|
+
<tr className='divide-x border-b border-neutral-200 divide-neutral-200 text-center rounded-t-3xl'>
|
174
174
|
{Object.keys(TABLE_HEADER).map((key, index) => (
|
175
175
|
<th
|
176
176
|
key={index}
|
@@ -179,7 +179,7 @@ export default function TableB(props) {
|
|
179
179
|
>
|
180
180
|
<div className=''>
|
181
181
|
<div className='flex flex-col justify-center items-center text-center'>
|
182
|
-
<div className={'flex items-center gap-2'}>
|
182
|
+
<div className={'flex items-center gap-2 w-full justify-center'}>
|
183
183
|
{TABLE_HEADER[key]['icon'] &&
|
184
184
|
(
|
185
185
|
<Icon
|
@@ -192,7 +192,7 @@ export default function TableB(props) {
|
|
192
192
|
TABLE_HEADER[key]['title'] && key == 0 && (
|
193
193
|
<Typography
|
194
194
|
textStyle='h5'
|
195
|
-
className={HDSColor(TABLE_HEADER[key]['title_text_color'])}>
|
195
|
+
className={`w-full text-left ${HDSColor(TABLE_HEADER[key]['title_text_color'])}`}>
|
196
196
|
{TABLE_HEADER[key]['title']}
|
197
197
|
</Typography>)
|
198
198
|
}
|