@sikka/hawa 0.0.246 → 0.0.248
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 +17 -0
- package/es/elements/FloatingCommentExec.d.ts +4 -0
- package/es/elements/HawaModal.d.ts +5 -15
- package/es/elements/UserFeedback.d.ts +1 -0
- package/es/elements/index.d.ts +1 -0
- package/es/index.es.js +65 -2
- package/lib/elements/FloatingCommentExec.d.ts +4 -0
- package/lib/elements/HawaModal.d.ts +5 -15
- package/lib/elements/UserFeedback.d.ts +1 -0
- package/lib/elements/index.d.ts +1 -0
- package/lib/index.js +65 -2
- package/package.json +5 -21
- package/src/elements/FloatingCommentExec.tsx +106 -0
- package/src/elements/HawaModal.tsx +5 -15
- package/src/elements/HawaPanelTabs.tsx +1 -1
- package/src/elements/HawaStats.tsx +0 -1
- package/src/elements/UserFeedback.tsx +108 -38
- package/src/elements/index.ts +1 -0
- package/src/styles.css +17 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sikka/hawa",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.248",
|
|
4
4
|
"description": "SaaS Oriented UI Kit",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.es.js",
|
|
@@ -52,12 +52,8 @@
|
|
|
52
52
|
"@types/react": "^18.0.25",
|
|
53
53
|
"@types/react-dom": "^18.0.9",
|
|
54
54
|
"babel-loader": "^8.2.2",
|
|
55
|
-
"clsx": "^1.2.1",
|
|
56
|
-
"color": "^4.2.3",
|
|
57
|
-
"crypto-js": "^4.1.1",
|
|
58
55
|
"framer-motion": "^4.1.7",
|
|
59
56
|
"html-webpack-plugin": "^5.5.0",
|
|
60
|
-
"next-scripts": "^0.3.4",
|
|
61
57
|
"postcss": "^8.4.18",
|
|
62
58
|
"postcss-cli": "^10.0.0",
|
|
63
59
|
"postcss-focus-visible": "^7.1.0",
|
|
@@ -79,25 +75,11 @@
|
|
|
79
75
|
"rollup-plugin-postcss": "^4.0.0",
|
|
80
76
|
"rollup-plugin-swc": "^0.2.1",
|
|
81
77
|
"rollup-plugin-terser": "^7.0.2",
|
|
82
|
-
"tailwindcss": "^3.2.1",
|
|
83
78
|
"tinycolor2": "^1.4.2",
|
|
84
79
|
"tslib": "^2.4.1",
|
|
85
80
|
"typescript": "^4.8.4",
|
|
86
|
-
"webpack": "^5.75.0"
|
|
87
|
-
|
|
88
|
-
"peerDependencies": {
|
|
89
|
-
"crypto-js": "^4.1.1",
|
|
90
|
-
"next-scripts": "^0.3.4",
|
|
91
|
-
"prop-types": "^15.7.2",
|
|
92
|
-
"react": ">=17.0.1",
|
|
93
|
-
"react-color": "^2.19.3",
|
|
94
|
-
"react-dnd": "^15.1.2",
|
|
95
|
-
"react-dom": ">=17.0.1",
|
|
96
|
-
"react-hook-form": "^7.28.0",
|
|
97
|
-
"react-phone-input-2": "^2.15.1",
|
|
98
|
-
"react-select": "^5.3.2",
|
|
99
|
-
"react-transition-group": "^4.4.2",
|
|
100
|
-
"tinycolor2": "^1.4.2"
|
|
81
|
+
"webpack": "^5.75.0",
|
|
82
|
+
"tailwindcss": "^3.3.3"
|
|
101
83
|
},
|
|
102
84
|
"resolutions": {
|
|
103
85
|
"@storybook/react/webpack": "^5",
|
|
@@ -107,6 +89,8 @@
|
|
|
107
89
|
"@storybook/manager-webpack5/webpack": "^5"
|
|
108
90
|
},
|
|
109
91
|
"dependencies": {
|
|
92
|
+
"clsx": "^1.2.1",
|
|
93
|
+
"react": ">=17.0.1",
|
|
110
94
|
"react-dropzone": "^12.0.4",
|
|
111
95
|
"react-hook-form": "^7.28.0",
|
|
112
96
|
"react-icons": "^4.6.0",
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import React, { useRef, useState, useEffect, FC } from "react"
|
|
2
|
+
import ReactDOMServer from "react-dom/server"
|
|
3
|
+
import { AiOutlineClose } from "react-icons/ai"
|
|
4
|
+
|
|
5
|
+
let base64 =
|
|
6
|
+
"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"
|
|
7
|
+
|
|
8
|
+
type ComponentTypes = {}
|
|
9
|
+
const Property = (props) => {
|
|
10
|
+
return (
|
|
11
|
+
<div
|
|
12
|
+
className="border-box mr-[10px] flex h-[32px] w-fit min-w-[32px] items-center justify-center rounded bg-gray-300 p-2 transition-all hover:opacity-50"
|
|
13
|
+
onMouseDown={props.onMouseDown}
|
|
14
|
+
>
|
|
15
|
+
{props.name}
|
|
16
|
+
</div>
|
|
17
|
+
)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const Image = (props) => {
|
|
21
|
+
return (
|
|
22
|
+
<div className="group relative w-fit">
|
|
23
|
+
<img src={`data:image/pngg;charset=utf-8;base64,${base64}`} />
|
|
24
|
+
<div className="absolute right-0 top-0 text-red-900 opacity-0 transition-all hover:opacity-50 group-hover:opacity-100">
|
|
25
|
+
<AiOutlineClose />
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const styles = {
|
|
32
|
+
bold: "B",
|
|
33
|
+
italic: "I",
|
|
34
|
+
underline: "U",
|
|
35
|
+
strikeThrough: "S",
|
|
36
|
+
subscript: "SubS",
|
|
37
|
+
superscript: "SuperS",
|
|
38
|
+
removeFormat: "Plain",
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export const FloatingCommentExec: React.FC<ComponentTypes> = (props) => {
|
|
42
|
+
return (
|
|
43
|
+
<div className="align-center box-border flex h-min w-[400px] flex-col items-center justify-center rounded shadow-md">
|
|
44
|
+
<div className={"flex w-full flex-row justify-start p-2"}>
|
|
45
|
+
{Object.entries(styles).map(([id, acronym]) => {
|
|
46
|
+
return (
|
|
47
|
+
<Property
|
|
48
|
+
name={acronym}
|
|
49
|
+
key={`property-${id}`}
|
|
50
|
+
onMouseDown={(event) => {
|
|
51
|
+
event.preventDefault()
|
|
52
|
+
document.execCommand(id, false, null)
|
|
53
|
+
console.log(`Executing ${id}`)
|
|
54
|
+
// perform(id)
|
|
55
|
+
}}
|
|
56
|
+
/>
|
|
57
|
+
)
|
|
58
|
+
})}
|
|
59
|
+
<Property
|
|
60
|
+
name="Image"
|
|
61
|
+
key={`property-insertImage`}
|
|
62
|
+
onMouseDown={(event) => {
|
|
63
|
+
event.preventDefault()
|
|
64
|
+
let html = ReactDOMServer.renderToString(<Image />)
|
|
65
|
+
document.execCommand("insertHTML", false, html)
|
|
66
|
+
|
|
67
|
+
// const byteCharacters = atob(base64)
|
|
68
|
+
// const byteNumbers = new Array(byteCharacters.length)
|
|
69
|
+
// for (let i = 0; i < byteCharacters.length; i++) {
|
|
70
|
+
// byteNumbers[i] = byteCharacters.charCodeAt(i)
|
|
71
|
+
// }
|
|
72
|
+
// const byteArray = new Uint8Array(byteNumbers)
|
|
73
|
+
// const blob = new Blob([byteArray], { type: "image/png" })
|
|
74
|
+
|
|
75
|
+
// let url = URL.createObjectURL(blob)
|
|
76
|
+
|
|
77
|
+
// document.execCommand("insertImage", false, url)
|
|
78
|
+
}}
|
|
79
|
+
/>
|
|
80
|
+
</div>
|
|
81
|
+
<div className="h-[1px] w-full bg-slate-600"> </div>
|
|
82
|
+
|
|
83
|
+
<div className=" box-border w-full p-2">
|
|
84
|
+
<div
|
|
85
|
+
contentEditable="true"
|
|
86
|
+
className="rtl h-[150px] w-full resize-none overflow-auto overflow-x-hidden border-none font-['Arial'] text-[16px] outline-none"
|
|
87
|
+
|
|
88
|
+
// onKeyDown={(event) => {
|
|
89
|
+
// if (event.key == "Tab") {
|
|
90
|
+
// event.preventDefault()
|
|
91
|
+
// document.execCommand("indent", false, null)
|
|
92
|
+
// return
|
|
93
|
+
// }
|
|
94
|
+
// }}
|
|
95
|
+
></div>
|
|
96
|
+
</div>
|
|
97
|
+
<div className="h-[1px] w-full bg-slate-600"> </div>
|
|
98
|
+
<button
|
|
99
|
+
className="my-1 rounded bg-cyan-800 p-2 py-1 text-white"
|
|
100
|
+
onClick={() => {}}
|
|
101
|
+
>
|
|
102
|
+
Submit
|
|
103
|
+
</button>
|
|
104
|
+
</div>
|
|
105
|
+
)
|
|
106
|
+
}
|
|
@@ -2,31 +2,21 @@ import { ReactElement, useEffect, FC } from "react"
|
|
|
2
2
|
import clsx from "clsx"
|
|
3
3
|
|
|
4
4
|
type ModalTypes = {
|
|
5
|
-
/**
|
|
6
|
-
* The boolean to open and close the modal
|
|
7
|
-
*/
|
|
5
|
+
/** * The boolean to open and close the modal */
|
|
8
6
|
open: boolean
|
|
9
|
-
/**
|
|
10
|
-
* The title of the modal, it will appear in the header of the modal
|
|
11
|
-
*/
|
|
7
|
+
/** * The title of the modal, it will appear in the header of the modal */
|
|
12
8
|
title: string
|
|
13
9
|
/**
|
|
14
10
|
* a function that's triggered when the modal is closed either by the clicking the close button or outside the modal.
|
|
15
11
|
* @returns void
|
|
16
12
|
*/
|
|
17
13
|
onClose: () => void
|
|
18
|
-
/**
|
|
19
|
-
* Boolean to enable/disable closing the modal upon clicking outside the modal
|
|
20
|
-
*/
|
|
14
|
+
/** * Boolean to enable/disable closing the modal upon clicking outside the modal */
|
|
21
15
|
closeOnClickOutside?: boolean
|
|
22
|
-
/**
|
|
23
|
-
* The id of the modal
|
|
24
|
-
*/
|
|
16
|
+
/** * The id of the modal */
|
|
25
17
|
modalID?: string
|
|
26
18
|
children: ReactElement
|
|
27
|
-
/**
|
|
28
|
-
* The array of actions for the modal, it will appear in the footer of the modal
|
|
29
|
-
*/
|
|
19
|
+
/** * The array of actions for the modal, it will appear in the footer of the modal */
|
|
30
20
|
actions: any
|
|
31
21
|
}
|
|
32
22
|
export const HawaModal: FC<ModalTypes> = ({
|
|
@@ -17,7 +17,6 @@ export const HawaStats: FC<StatTypes> = (props) => {
|
|
|
17
17
|
let statStyles = {
|
|
18
18
|
plain: "",
|
|
19
19
|
contained: "bg-layoutPrimary-500",
|
|
20
|
-
// contained: props.color ? `bg-[${props.color}]` : "bg-layoutPrimary-500",
|
|
21
20
|
outlined: "ring-2 w-fit",
|
|
22
21
|
neobrutalism: "shadow-neobrutalism border-4 border-black bg-white",
|
|
23
22
|
dropshadow: "bg-white drop-shadow-md",
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import clsx from "clsx"
|
|
2
|
+
import { FC, useEffect, useRef, useState } from "react"
|
|
3
|
+
import { HawaButton } from "./HawaButton"
|
|
2
4
|
|
|
3
5
|
type ComponentTypes = {
|
|
4
6
|
title?: string
|
|
@@ -8,50 +10,118 @@ type ComponentTypes = {
|
|
|
8
10
|
least: string
|
|
9
11
|
most: string
|
|
10
12
|
}
|
|
13
|
+
position?: "bottom-right" | "bottom-left"
|
|
11
14
|
onOptionClicked?: (option) => void
|
|
12
15
|
}
|
|
13
|
-
export const UserFeedback: FC<ComponentTypes> = ({
|
|
16
|
+
export const UserFeedback: FC<ComponentTypes> = ({
|
|
17
|
+
position = "bottom-right",
|
|
18
|
+
...props
|
|
19
|
+
}) => {
|
|
20
|
+
const [closed, setClosed] = useState(false)
|
|
21
|
+
const [answered, setAnswered] = useState(false)
|
|
22
|
+
const [clickedOption, setClickedOption] = useState(null)
|
|
23
|
+
const [closingTimer, setClosingTimer] = useState(5)
|
|
24
|
+
const popUpRef = useRef(null)
|
|
25
|
+
|
|
26
|
+
const boxPosition = {
|
|
27
|
+
"bottom-right": "right-4",
|
|
28
|
+
"bottom-left": "left-4",
|
|
29
|
+
}
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
//To change opacity and hide the component
|
|
32
|
+
const timeoutHide = setTimeout(() => {
|
|
33
|
+
setClosingTimer(closingTimer - 1)
|
|
34
|
+
}, 1000)
|
|
35
|
+
|
|
36
|
+
return () => {
|
|
37
|
+
clearTimeout(timeoutHide)
|
|
38
|
+
}
|
|
39
|
+
}, [closingTimer])
|
|
40
|
+
|
|
41
|
+
const slowClose = () => {
|
|
42
|
+
setClosed(true)
|
|
43
|
+
setTimeout(() => {
|
|
44
|
+
popUpRef.current.removeChild(popUpRef.current.children[0])
|
|
45
|
+
}, 200)
|
|
46
|
+
}
|
|
14
47
|
return (
|
|
15
|
-
<div
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
48
|
+
<div
|
|
49
|
+
ref={popUpRef}
|
|
50
|
+
className={clsx("fixed bottom-4", boxPosition[position])}
|
|
51
|
+
>
|
|
52
|
+
<div
|
|
53
|
+
className={clsx(
|
|
54
|
+
"relative flex w-full max-w-sm flex-col gap-2 rounded bg-white p-4 shadow-md transition-all",
|
|
55
|
+
closed ? "opacity-0" : "opacity-100"
|
|
56
|
+
)}
|
|
23
57
|
>
|
|
24
|
-
<
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
58
|
+
<div className="absolute left-2 top-2 p-1.5 text-sm">{props.title}</div>
|
|
59
|
+
<button
|
|
60
|
+
type="button"
|
|
61
|
+
className="absolute right-2 top-2 inline-flex h-8 w-8 rounded p-1.5 text-gray-400 hover:bg-gray-100 hover:text-gray-900 focus:ring-2 focus:ring-gray-300 dark:bg-gray-800 dark:text-gray-500 dark:hover:bg-gray-700 dark:hover:text-white"
|
|
62
|
+
data-dismiss-target="#toast-default"
|
|
63
|
+
aria-label="Close"
|
|
64
|
+
onClick={() => slowClose()}
|
|
30
65
|
>
|
|
31
|
-
<
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
</button>
|
|
38
|
-
<div className="mt-8">{props.question}</div>
|
|
39
|
-
<div className="flex w-full flex-row gap-1 rounded">
|
|
40
|
-
{props.options.map((op) => (
|
|
41
|
-
<span
|
|
42
|
-
onClick={() => props.onOptionClicked(op)}
|
|
43
|
-
className="w-full cursor-pointer rounded border bg-white p-4 text-center transition-all hover:bg-gray-100"
|
|
66
|
+
<svg
|
|
67
|
+
aria-hidden="true"
|
|
68
|
+
className="h-5 w-5"
|
|
69
|
+
fill="currentColor"
|
|
70
|
+
viewBox="0 0 20 20"
|
|
71
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
44
72
|
>
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
73
|
+
<path
|
|
74
|
+
fillRule="evenodd"
|
|
75
|
+
d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z"
|
|
76
|
+
clipRule="evenodd"
|
|
77
|
+
></path>
|
|
78
|
+
</svg>
|
|
79
|
+
</button>
|
|
80
|
+
<div className="mt-8">{props.question}</div>
|
|
81
|
+
<div className="flex w-full flex-row gap-1 rounded">
|
|
82
|
+
{props.options.map((op) => (
|
|
83
|
+
<span
|
|
84
|
+
onClick={() => {
|
|
85
|
+
props.onOptionClicked(op)
|
|
86
|
+
setClickedOption(op)
|
|
87
|
+
setAnswered(true)
|
|
88
|
+
const timeoutDestroy = setTimeout(() => {
|
|
89
|
+
setClosed(true)
|
|
90
|
+
}, 4800)
|
|
91
|
+
setTimeout(() => {
|
|
92
|
+
popUpRef.current.removeChild(popUpRef.current.children[0])
|
|
93
|
+
clearTimeout(timeoutDestroy)
|
|
94
|
+
}, 5300)
|
|
95
|
+
}}
|
|
96
|
+
className={clsx(
|
|
97
|
+
"w-full cursor-pointer rounded border p-4 text-center transition-all ",
|
|
98
|
+
clickedOption === op
|
|
99
|
+
? "bg-gray-500 text-white"
|
|
100
|
+
: "bg-white hover:bg-gray-100"
|
|
101
|
+
)}
|
|
102
|
+
>
|
|
103
|
+
{op}
|
|
104
|
+
</span>
|
|
105
|
+
))}
|
|
53
106
|
</div>
|
|
54
|
-
|
|
107
|
+
{props.texts && (
|
|
108
|
+
<div className=" flex flex-row justify-between text-xs">
|
|
109
|
+
<span>{props.texts.least}</span>
|
|
110
|
+
<span>{props.texts.most}</span>
|
|
111
|
+
</div>
|
|
112
|
+
)}
|
|
113
|
+
{answered && (
|
|
114
|
+
<div className="absolute left-0 top-0 flex h-full w-full flex-col items-center justify-center rounded bg-black bg-opacity-80 p-4 text-center transition-all">
|
|
115
|
+
<span className="font-bold text-white">
|
|
116
|
+
Thank you for your answer. This box will disappear in
|
|
117
|
+
{" " + closingTimer} seconds
|
|
118
|
+
</span>
|
|
119
|
+
<div className="flex flex-row gap-2">
|
|
120
|
+
<HawaButton onClick={() => slowClose()}>Close</HawaButton>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
)}
|
|
124
|
+
</div>
|
|
55
125
|
</div>
|
|
56
126
|
)
|
|
57
127
|
}
|
package/src/elements/index.ts
CHANGED
|
@@ -35,6 +35,7 @@ export * from "./UserFeedback"
|
|
|
35
35
|
export * from "./ArrowCarousel"
|
|
36
36
|
export * from "./FloatingComment"
|
|
37
37
|
export * from "./FloatingCommentSlate"
|
|
38
|
+
export * from "./FloatingCommentExec"
|
|
38
39
|
export * from "./BackToTop"
|
|
39
40
|
// Inputs
|
|
40
41
|
export * from "./HawaTextField"
|
package/src/styles.css
CHANGED
|
@@ -624,6 +624,9 @@ video {
|
|
|
624
624
|
.left-3 {
|
|
625
625
|
left: 0.75rem;
|
|
626
626
|
}
|
|
627
|
+
.left-4 {
|
|
628
|
+
left: 1rem;
|
|
629
|
+
}
|
|
627
630
|
.right-0 {
|
|
628
631
|
right: 0px;
|
|
629
632
|
}
|
|
@@ -1062,6 +1065,9 @@ video {
|
|
|
1062
1065
|
.min-w-\[24px\] {
|
|
1063
1066
|
min-width: 24px;
|
|
1064
1067
|
}
|
|
1068
|
+
.min-w-\[32px\] {
|
|
1069
|
+
min-width: 32px;
|
|
1070
|
+
}
|
|
1065
1071
|
.min-w-fit {
|
|
1066
1072
|
min-width: -moz-fit-content;
|
|
1067
1073
|
min-width: fit-content;
|
|
@@ -1659,6 +1665,9 @@ video {
|
|
|
1659
1665
|
.bg-opacity-75 {
|
|
1660
1666
|
--tw-bg-opacity: 0.75;
|
|
1661
1667
|
}
|
|
1668
|
+
.bg-opacity-80 {
|
|
1669
|
+
--tw-bg-opacity: 0.8;
|
|
1670
|
+
}
|
|
1662
1671
|
.bg-none {
|
|
1663
1672
|
background-image: none;
|
|
1664
1673
|
}
|
|
@@ -1962,6 +1971,10 @@ video {
|
|
|
1962
1971
|
--tw-text-opacity: 1;
|
|
1963
1972
|
color: rgb(185 28 28 / var(--tw-text-opacity));
|
|
1964
1973
|
}
|
|
1974
|
+
.text-red-900 {
|
|
1975
|
+
--tw-text-opacity: 1;
|
|
1976
|
+
color: rgb(127 29 29 / var(--tw-text-opacity));
|
|
1977
|
+
}
|
|
1965
1978
|
.text-white {
|
|
1966
1979
|
--tw-text-opacity: 1;
|
|
1967
1980
|
color: rgb(255 255 255 / var(--tw-text-opacity));
|
|
@@ -2310,6 +2323,10 @@ body {
|
|
|
2310
2323
|
text-decoration-thickness: 2px;
|
|
2311
2324
|
}
|
|
2312
2325
|
|
|
2326
|
+
.hover\:opacity-50:hover {
|
|
2327
|
+
opacity: 0.5;
|
|
2328
|
+
}
|
|
2329
|
+
|
|
2313
2330
|
.hover\:shadow-lg:hover {
|
|
2314
2331
|
--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
2315
2332
|
--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);
|