@sikka/hawa 0.0.271 → 0.0.273
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/styles.css +157 -8
- package/es/blocks/Pricing/HorizontalPricing.d.ts +47 -0
- package/es/blocks/Pricing/index.d.ts +1 -0
- package/es/elements/HawaLandingCard.d.ts +1 -0
- package/es/elements/HawaLoading.d.ts +8 -0
- package/es/elements/HawaRadio.d.ts +7 -10
- package/es/elements/index.d.ts +1 -1
- package/es/index.es.js +3 -3
- package/es/layout/HawaGrid.d.ts +6 -0
- package/es/layout/index.d.ts +1 -0
- package/lib/blocks/Pricing/HorizontalPricing.d.ts +47 -0
- package/lib/blocks/Pricing/index.d.ts +1 -0
- package/lib/elements/HawaLandingCard.d.ts +1 -0
- package/lib/elements/HawaLoading.d.ts +8 -0
- package/lib/elements/HawaRadio.d.ts +7 -10
- package/lib/elements/index.d.ts +1 -1
- package/lib/index.js +3 -3
- package/lib/layout/HawaGrid.d.ts +6 -0
- package/lib/layout/index.d.ts +1 -0
- package/package.json +2 -1
- package/src/blocks/Pricing/HorizontalPricing.tsx +140 -0
- package/src/blocks/Pricing/index.ts +1 -0
- package/src/elements/HawaButton.tsx +9 -5
- package/src/elements/HawaCodeBlock.tsx +4 -12
- package/src/elements/HawaLandingCard.tsx +12 -10
- package/src/elements/HawaLoading.tsx +83 -0
- package/src/elements/HawaPhoneInput.tsx +5 -1
- package/src/elements/HawaRadio.tsx +9 -11
- package/src/elements/HawaStats.tsx +3 -3
- package/src/elements/index.ts +1 -1
- package/src/layout/HawaGrid.tsx +15 -0
- package/src/layout/index.ts +1 -0
- package/src/styles.css +157 -8
- package/tailwind.config.js +22 -9
- package/es/elements/HawaSpinner.d.ts +0 -6
- package/lib/elements/HawaSpinner.d.ts +0 -6
- package/src/elements/HawaSpinner.tsx +0 -42
package/lib/layout/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sikka/hawa",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.273",
|
|
4
4
|
"description": "SaaS Oriented UI Kit",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.es.js",
|
|
@@ -78,6 +78,7 @@
|
|
|
78
78
|
"rollup-plugin-swc": "^0.2.1",
|
|
79
79
|
"rollup-plugin-typescript2": "^0.34.1",
|
|
80
80
|
"tailwindcss": "^3.3.3",
|
|
81
|
+
"tailwindcss-animate": "^1.0.6",
|
|
81
82
|
"tinycolor2": "^1.4.2",
|
|
82
83
|
"tslib": "^2.4.1",
|
|
83
84
|
"typescript": "^4.8.4",
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import React, { FC, useState } from "react"
|
|
2
|
+
import { HawaRadio } from "../../elements"
|
|
3
|
+
import clsx from "clsx"
|
|
4
|
+
|
|
5
|
+
type HorizontalPricingTypes = {
|
|
6
|
+
plans: [
|
|
7
|
+
{
|
|
8
|
+
direction: "rtl" | "ltr"
|
|
9
|
+
features: [{ included: boolean; text: string }]
|
|
10
|
+
price: number
|
|
11
|
+
texts: {
|
|
12
|
+
title: string
|
|
13
|
+
subtitle: string
|
|
14
|
+
buttonText: string
|
|
15
|
+
cycleText: string
|
|
16
|
+
currencyText: string
|
|
17
|
+
}
|
|
18
|
+
size: "small" | "medium" | "large"
|
|
19
|
+
}
|
|
20
|
+
]
|
|
21
|
+
currencies: [
|
|
22
|
+
{
|
|
23
|
+
label: string
|
|
24
|
+
value: string
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
billingCycles: [
|
|
28
|
+
{
|
|
29
|
+
label: string
|
|
30
|
+
value: string
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
onPlanClicked?: (e) => void
|
|
34
|
+
currentCycle: {
|
|
35
|
+
label: string
|
|
36
|
+
value: string
|
|
37
|
+
}
|
|
38
|
+
currentCurrency: {
|
|
39
|
+
label: string
|
|
40
|
+
value: string
|
|
41
|
+
}
|
|
42
|
+
onCycleChange?: (e) => void
|
|
43
|
+
onCurrencyChange?: (e) => void
|
|
44
|
+
direction?: "rtl" | "ltr"
|
|
45
|
+
}
|
|
46
|
+
export const HorizontalPricing: FC<HorizontalPricingTypes> = (props) => {
|
|
47
|
+
const [selectedCard, setSelectedCard] = useState(null)
|
|
48
|
+
let data = [
|
|
49
|
+
{ title: "basic", price: "$49", cycle: "/mo" },
|
|
50
|
+
{ title: "business", price: "$99", cycle: "/mo" },
|
|
51
|
+
{ title: "enterprise", price: "$149", cycle: "/mo" },
|
|
52
|
+
]
|
|
53
|
+
return (
|
|
54
|
+
<div className="z-10 w-full max-w-screen-sm">
|
|
55
|
+
<div className="max-w-2xl ">
|
|
56
|
+
<div className="flex flex-row justify-between">
|
|
57
|
+
<HawaRadio
|
|
58
|
+
design="tabs"
|
|
59
|
+
options={props.currencies}
|
|
60
|
+
defaultValue={props.currentCurrency}
|
|
61
|
+
/>
|
|
62
|
+
<HawaRadio
|
|
63
|
+
design="tabs"
|
|
64
|
+
options={props.billingCycles}
|
|
65
|
+
defaultValue={props.currentCycle}
|
|
66
|
+
/>
|
|
67
|
+
</div>
|
|
68
|
+
{data.map((d) => (
|
|
69
|
+
<label htmlFor={d.title} onClick={() => setSelectedCard(d.title)}>
|
|
70
|
+
<input
|
|
71
|
+
type="radio"
|
|
72
|
+
name="radio"
|
|
73
|
+
id={d.title}
|
|
74
|
+
className="peer appearance-none"
|
|
75
|
+
/>
|
|
76
|
+
<div
|
|
77
|
+
className={clsx(
|
|
78
|
+
selectedCard === d.title ? "peer-checked:border-blue-500" : "",
|
|
79
|
+
"peer flex cursor-pointer items-center justify-between rounded-xl border-2 border-transparent bg-white px-5 py-4 shadow peer-checked:[&_.active]:block peer-checked:[&_.default]:hidden"
|
|
80
|
+
)}
|
|
81
|
+
>
|
|
82
|
+
<div className="peer flex items-center gap-4">
|
|
83
|
+
<CheckIcons />
|
|
84
|
+
<CardText
|
|
85
|
+
title="Enterprise"
|
|
86
|
+
subtitle="For startups and new businesses"
|
|
87
|
+
/>
|
|
88
|
+
</div>
|
|
89
|
+
|
|
90
|
+
<CardPrice amount={d.price} cycle={d.cycle} />
|
|
91
|
+
</div>
|
|
92
|
+
</label>
|
|
93
|
+
))}
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const CheckIcons = () => (
|
|
100
|
+
<>
|
|
101
|
+
<svg
|
|
102
|
+
fill="none"
|
|
103
|
+
viewBox="0 0 24 24"
|
|
104
|
+
stroke-width="1.5"
|
|
105
|
+
stroke="currentColor"
|
|
106
|
+
className="default h-8 w-8 text-neutral-500"
|
|
107
|
+
>
|
|
108
|
+
<path
|
|
109
|
+
stroke-linecap="round"
|
|
110
|
+
stroke-linejoin="round"
|
|
111
|
+
d="M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
112
|
+
/>
|
|
113
|
+
</svg>
|
|
114
|
+
<svg
|
|
115
|
+
viewBox="0 0 24 24"
|
|
116
|
+
fill="currentColor"
|
|
117
|
+
className="active hidden h-8 w-8 text-blue-500"
|
|
118
|
+
>
|
|
119
|
+
<path
|
|
120
|
+
fill-rule="evenodd"
|
|
121
|
+
clip-rule="evenodd"
|
|
122
|
+
d="M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zm13.36-1.814a.75.75 0 10-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 00-1.06 1.06l2.25 2.25a.75.75 0 001.14-.094l3.75-5.25z"
|
|
123
|
+
/>
|
|
124
|
+
</svg>
|
|
125
|
+
</>
|
|
126
|
+
)
|
|
127
|
+
const CardText = (props) => (
|
|
128
|
+
<div className="peer flex flex-col items-start">
|
|
129
|
+
<h2 className="font-medium text-neutral-700 sm:text-xl">{props.title}</h2>
|
|
130
|
+
<p className="text-sm text-neutral-500">{props.subtitle} </p>
|
|
131
|
+
</div>
|
|
132
|
+
)
|
|
133
|
+
const CardPrice = (props) => (
|
|
134
|
+
<h2 className="peer text-xl font-semibold text-neutral-900 sm:text-2xl">
|
|
135
|
+
{props.amount}
|
|
136
|
+
<span className="text-base font-medium text-neutral-400">
|
|
137
|
+
{props.cycle}
|
|
138
|
+
</span>
|
|
139
|
+
</h2>
|
|
140
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { FC, ButtonHTMLAttributes, useState } from "react"
|
|
2
2
|
import clsx from "clsx"
|
|
3
|
-
import {
|
|
3
|
+
import { HawaLoading } from "./HawaLoading"
|
|
4
4
|
import { HawaTooltip } from "./HawaTooltip"
|
|
5
5
|
|
|
6
6
|
interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
|
|
@@ -165,7 +165,7 @@ export const HawaButton: FC<ButtonProps> = ({
|
|
|
165
165
|
onClick={props.onClick}
|
|
166
166
|
// onClick={handleClick}
|
|
167
167
|
>
|
|
168
|
-
{!isLoading ? children : <
|
|
168
|
+
{!isLoading ? children : <HawaLoading size="button" />}
|
|
169
169
|
</button>
|
|
170
170
|
</HawaTooltip>
|
|
171
171
|
) : (
|
|
@@ -210,14 +210,18 @@ export const HawaButton: FC<ButtonProps> = ({
|
|
|
210
210
|
{isClicked && feedback ? (
|
|
211
211
|
<div className="w-full text-center">{buttonText}</div>
|
|
212
212
|
) : null}
|
|
213
|
-
<div className="flex w-full flex-row items-center
|
|
213
|
+
<div className="flex w-full select-none flex-row items-center justify-center gap-2 whitespace-nowrap">
|
|
214
214
|
{props.startIcon && props.startIcon}
|
|
215
215
|
{children}
|
|
216
216
|
{props.endIcon && props.endIcon}
|
|
217
217
|
</div>
|
|
218
218
|
</div>
|
|
219
219
|
) : (
|
|
220
|
-
<
|
|
220
|
+
<HawaLoading
|
|
221
|
+
design="dots-pulse"
|
|
222
|
+
color={"bg-white"}
|
|
223
|
+
size="button"
|
|
224
|
+
/>
|
|
221
225
|
)}
|
|
222
226
|
</button>
|
|
223
227
|
)}
|
|
@@ -229,7 +233,7 @@ export const HawaButton: FC<ButtonProps> = ({
|
|
|
229
233
|
: typeof badge === "string"
|
|
230
234
|
? "h-5 w-7"
|
|
231
235
|
: "h-6 w-6",
|
|
232
|
-
"absolute -right-2
|
|
236
|
+
"absolute -right-2 -top-2 inline-flex select-none items-center justify-center rounded-full border-2 border-white bg-red-500 text-[9px] font-bold text-white dark:border-gray-900"
|
|
233
237
|
)}
|
|
234
238
|
>
|
|
235
239
|
{typeof badge === "number" && badge > 100 ? "+99" : badge}
|
|
@@ -75,19 +75,11 @@ export const HawaCodeBlock: FC<CodeBlockTypes> = ({
|
|
|
75
75
|
{fileName && (
|
|
76
76
|
<div className="flex flex-row gap-2 rounded-t bg-gray-700 p-2 pb-0">
|
|
77
77
|
<div
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
// : "bg-transparent"
|
|
82
|
-
// )}
|
|
78
|
+
className={clsx(
|
|
79
|
+
"mb-1 w-full max-w-[52px] rounded-inner p-2 py-1 text-center text-[0.75rem]"
|
|
80
|
+
)}
|
|
83
81
|
>
|
|
84
|
-
|
|
85
|
-
className={clsx(
|
|
86
|
-
"mb-1 w-full max-w-[52px] rounded-inner p-2 py-1 text-center text-[0.75rem] "
|
|
87
|
-
)}
|
|
88
|
-
>
|
|
89
|
-
{fileName}
|
|
90
|
-
</div>
|
|
82
|
+
{fileName}
|
|
91
83
|
</div>
|
|
92
84
|
</div>
|
|
93
85
|
)}
|
|
@@ -14,9 +14,10 @@ type LandingCardTypes = {
|
|
|
14
14
|
linkText?: string
|
|
15
15
|
}
|
|
16
16
|
buttonLink?: string
|
|
17
|
+
className?: any
|
|
17
18
|
}
|
|
18
19
|
export const HawaLandingCard: FC<LandingCardTypes> = ({
|
|
19
|
-
orientation,
|
|
20
|
+
orientation = "horizontal",
|
|
20
21
|
...props
|
|
21
22
|
}) => {
|
|
22
23
|
let cardStyles = {
|
|
@@ -36,12 +37,13 @@ export const HawaLandingCard: FC<LandingCardTypes> = ({
|
|
|
36
37
|
className={clsx(
|
|
37
38
|
cardStyles[orientation],
|
|
38
39
|
"flex flex-col p-10",
|
|
39
|
-
"relative overflow-hidden"
|
|
40
|
+
"relative overflow-hidden",
|
|
41
|
+
props.className
|
|
40
42
|
)}
|
|
41
43
|
{...props}
|
|
42
44
|
>
|
|
43
|
-
{props.texts
|
|
44
|
-
<div className="text-sm text-red-600">{props.texts
|
|
45
|
+
{props.texts?.titleTip && (
|
|
46
|
+
<div className="text-sm text-red-600">{props.texts?.titleTip}</div>
|
|
45
47
|
)}
|
|
46
48
|
{props.imageURL && (
|
|
47
49
|
<img
|
|
@@ -50,15 +52,15 @@ export const HawaLandingCard: FC<LandingCardTypes> = ({
|
|
|
50
52
|
/>
|
|
51
53
|
)}
|
|
52
54
|
|
|
53
|
-
{props.texts
|
|
54
|
-
<div className="mt-2 text-lg font-medium">{props.texts
|
|
55
|
+
{props.texts?.title && (
|
|
56
|
+
<div className="mt-2 text-lg font-medium">{props.texts?.title} </div>
|
|
55
57
|
)}
|
|
56
|
-
{props.texts
|
|
57
|
-
<div className="z-10 mt-4 text-sm">{props.texts
|
|
58
|
+
{props.texts?.description && (
|
|
59
|
+
<div className="z-10 mt-4 text-sm">{props.texts?.description}</div>
|
|
58
60
|
)}
|
|
59
|
-
{props.texts
|
|
61
|
+
{props.texts?.linkText && (
|
|
60
62
|
<div className="z-10 mt-6 text-sm underline underline-offset-8">
|
|
61
|
-
{props.texts
|
|
63
|
+
{props.texts?.linkText}
|
|
62
64
|
</div>
|
|
63
65
|
)}
|
|
64
66
|
</div>
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import React, { FC } from "react"
|
|
2
|
+
import clsx from "clsx"
|
|
3
|
+
|
|
4
|
+
type LoadingTypes = {
|
|
5
|
+
size?: "button" | "sm" | "normal" | "lg" | "xl"
|
|
6
|
+
design?: "spinner" | "dots-bounce" | "dots-pulse" | "pulse" | "spinner-dots"
|
|
7
|
+
color?: any
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const HawaLoading: FC<LoadingTypes> = ({
|
|
11
|
+
design = "spinner",
|
|
12
|
+
size = "sm",
|
|
13
|
+
color,
|
|
14
|
+
...props
|
|
15
|
+
}) => {
|
|
16
|
+
let sizeStyles = {
|
|
17
|
+
button: "h-4 w-4",
|
|
18
|
+
sm: "h-6 w-6",
|
|
19
|
+
normal: "h-8 w-8",
|
|
20
|
+
lg: "h-14 w-14",
|
|
21
|
+
xl: "h-24 w-24",
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
let animationStyles = {
|
|
25
|
+
pulse: "animate-in fade-in duration-1000",
|
|
26
|
+
bounce: "animate-bounce",
|
|
27
|
+
}
|
|
28
|
+
switch (design.split("-")[0]) {
|
|
29
|
+
case "dots":
|
|
30
|
+
return (
|
|
31
|
+
<div className="flex flex-row space-x-2 ">
|
|
32
|
+
<div
|
|
33
|
+
className={clsx(
|
|
34
|
+
"animate-bounce rounded-full delay-100 repeat-infinite",
|
|
35
|
+
size === "button" ? "h-2 w-2" : sizeStyles[size],
|
|
36
|
+
animationStyles[design.split("-")[1]],
|
|
37
|
+
color ? color : "bg-buttonPrimary-500"
|
|
38
|
+
)}
|
|
39
|
+
></div>
|
|
40
|
+
<div
|
|
41
|
+
className={clsx(
|
|
42
|
+
"animate-bounce rounded-full delay-200 repeat-infinite",
|
|
43
|
+
size === "button" ? "h-2 w-2" : sizeStyles[size],
|
|
44
|
+
animationStyles[design.split("-")[1]],
|
|
45
|
+
|
|
46
|
+
color ? color : "bg-buttonPrimary-500"
|
|
47
|
+
)}
|
|
48
|
+
></div>
|
|
49
|
+
<div
|
|
50
|
+
className={clsx(
|
|
51
|
+
"animate-bounce rounded-full delay-300 repeat-infinite",
|
|
52
|
+
size === "button" ? "h-2 w-2" : sizeStyles[size],
|
|
53
|
+
animationStyles[design.split("-")[1]],
|
|
54
|
+
|
|
55
|
+
color ? color : "bg-buttonPrimary-500"
|
|
56
|
+
)}
|
|
57
|
+
></div>
|
|
58
|
+
</div>
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
default:
|
|
62
|
+
return (
|
|
63
|
+
<div className="flex flex-row gap-x-3">
|
|
64
|
+
<div aria-label="Loading..." role="status">
|
|
65
|
+
<svg
|
|
66
|
+
className={clsx(sizeStyles[size], "animate-spin")}
|
|
67
|
+
viewBox="3 3 18 18"
|
|
68
|
+
>
|
|
69
|
+
<path
|
|
70
|
+
className="fill-gray-200"
|
|
71
|
+
d="M12 5C8.13401 5 5 8.13401 5 12C5 15.866 8.13401 19 12 19C15.866 19 19 15.866 19 12C19 8.13401 15.866 5 12 5ZM3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12Z"
|
|
72
|
+
></path>
|
|
73
|
+
<path
|
|
74
|
+
// className="fill-buttonPrimary-500 "
|
|
75
|
+
className={color ? color : "fill-buttonPrimary-500"}
|
|
76
|
+
d="M16.9497 7.05015C14.2161 4.31648 9.78392 4.31648 7.05025 7.05015C6.65973 7.44067 6.02656 7.44067 5.63604 7.05015C5.24551 6.65962 5.24551 6.02646 5.63604 5.63593C9.15076 2.12121 14.8492 2.12121 18.364 5.63593C18.7545 6.02646 18.7545 6.65962 18.364 7.05015C17.9734 7.44067 17.3403 7.44067 16.9497 7.05015Z"
|
|
77
|
+
></path>
|
|
78
|
+
</svg>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -60,6 +60,7 @@ export const HawaPhoneInput: FC<HawaPhoneInputTypes> = (props) => {
|
|
|
60
60
|
},
|
|
61
61
|
lineHeight: "1.25rem",
|
|
62
62
|
padding: "0.37rem",
|
|
63
|
+
paddingLeft: 0,
|
|
63
64
|
}),
|
|
64
65
|
singleValue: (base) => ({
|
|
65
66
|
...base,
|
|
@@ -84,6 +85,8 @@ export const HawaPhoneInput: FC<HawaPhoneInputTypes> = (props) => {
|
|
|
84
85
|
DropdownIndicator: () => null,
|
|
85
86
|
IndicatorSeparator: () => null,
|
|
86
87
|
}}
|
|
88
|
+
// className="bg-red-500"
|
|
89
|
+
|
|
87
90
|
options={Countries}
|
|
88
91
|
isMulti={false}
|
|
89
92
|
isSearchable={true}
|
|
@@ -96,7 +99,8 @@ export const HawaPhoneInput: FC<HawaPhoneInputTypes> = (props) => {
|
|
|
96
99
|
<input
|
|
97
100
|
onChange={props.handleChange}
|
|
98
101
|
type="number"
|
|
99
|
-
|
|
102
|
+
placeholder="531045453"
|
|
103
|
+
className="block w-full appearance-none rounded rounded-l-none border border-l-0 border-gray-300 bg-gray-50 p-2.5 text-[0.875rem] text-gray-900 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-500 dark:focus:ring-blue-500"
|
|
100
104
|
/>
|
|
101
105
|
{props.helperText && (
|
|
102
106
|
<p className="mb-1 mt-1 text-xs text-red-600 dark:text-red-500">
|
|
@@ -4,16 +4,14 @@ import clsx from "clsx"
|
|
|
4
4
|
type RadioTypes = {
|
|
5
5
|
orientation?: "vertical" | "horizontal"
|
|
6
6
|
design?: "default" | "tabs" | "cards" | "bordered"
|
|
7
|
-
options?:
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
]
|
|
7
|
+
options?: {
|
|
8
|
+
value: any
|
|
9
|
+
label: any
|
|
10
|
+
disabled?: any
|
|
11
|
+
sublabel?: any
|
|
12
|
+
icon?: any
|
|
13
|
+
}[]
|
|
14
|
+
|
|
17
15
|
onChangeTab?: any
|
|
18
16
|
defaultValue?: any
|
|
19
17
|
}
|
|
@@ -59,7 +57,7 @@ export const HawaRadio: FC<RadioTypes> = ({
|
|
|
59
57
|
: inactiveTabStyle
|
|
60
58
|
)}
|
|
61
59
|
>
|
|
62
|
-
{
|
|
60
|
+
{opt.icon && opt.icon}
|
|
63
61
|
{opt.label}
|
|
64
62
|
</button>
|
|
65
63
|
</li>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { FC } from "react"
|
|
2
2
|
import clsx from "clsx"
|
|
3
|
-
import {
|
|
4
|
-
import { BsFilesAlt } from "react-icons/bs"
|
|
3
|
+
import { HawaLoading } from "./HawaLoading"
|
|
4
|
+
// import { BsFilesAlt } from "react-icons/bs"
|
|
5
5
|
|
|
6
6
|
type StatTypes = {
|
|
7
7
|
label?: string
|
|
@@ -60,7 +60,7 @@ export const HawaStats: FC<StatTypes> = ({ variant = "default", ...props }) => {
|
|
|
60
60
|
{props.icon && <div className="mb-2">{props.icon} </div>}
|
|
61
61
|
<div>{props.label}</div>
|
|
62
62
|
{props.isLoading ? (
|
|
63
|
-
<
|
|
63
|
+
<HawaLoading />
|
|
64
64
|
) : (
|
|
65
65
|
<div className="text-2xl font-bold">{props.number}</div>
|
|
66
66
|
)}
|
package/src/elements/index.ts
CHANGED
|
@@ -23,7 +23,7 @@ export * from "./HawaCopyrights"
|
|
|
23
23
|
export * from "./HawaStepper"
|
|
24
24
|
export * from "./HawaStats"
|
|
25
25
|
export * from "./HawaCodeBlock"
|
|
26
|
-
export * from "./
|
|
26
|
+
export * from "./HawaLoading"
|
|
27
27
|
export * from "./HawaRadio"
|
|
28
28
|
export * from "./HawaDatepicker"
|
|
29
29
|
export * from "./DragDropImages"
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React, { FC } from "react"
|
|
2
|
+
import clsx from "clsx"
|
|
3
|
+
|
|
4
|
+
type GridTypes = {
|
|
5
|
+
children?: any
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const HawaGrid: FC<GridTypes> = (props) => {
|
|
9
|
+
return (
|
|
10
|
+
// [&>*:not(:first-child)]:mt-8
|
|
11
|
+
<div className=" columns-1 gap-5 sm:columns-2 sm:gap-8 md:columns-3 lg:columns-4 [&>*:not(:first-child)]:mt-8">
|
|
12
|
+
{props.children}
|
|
13
|
+
</div>
|
|
14
|
+
)
|
|
15
|
+
}
|
package/src/layout/index.ts
CHANGED