uibee 2.14.0 → 2.16.0
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/bun.lock +680 -0
- package/dist/src/components/index.d.ts +3 -0
- package/dist/src/components/index.js +6 -0
- package/dist/src/components/inputs/shared/fieldWrapper.js +2 -2
- package/dist/src/components/inputs/textarea.js +4 -6
- package/dist/src/components/layout/toggle.d.ts +14 -0
- package/dist/src/components/layout/toggle.js +12 -0
- package/dist/src/components/markdownrender/markdownRender.d.ts +3 -0
- package/dist/src/components/markdownrender/markdownRender.js +6 -0
- package/dist/src/components/vulnerability/constants.d.ts +4 -0
- package/dist/src/components/vulnerability/constants.js +14 -0
- package/dist/src/components/vulnerability/severityPill.d.ts +8 -0
- package/dist/src/components/vulnerability/severityPill.js +8 -0
- package/dist/src/globals.css +228 -115
- package/package.json +13 -12
- package/src/components/index.ts +10 -1
- package/src/components/inputs/shared/fieldWrapper.tsx +4 -4
- package/src/components/inputs/textarea.tsx +5 -7
- package/src/components/layout/toggle.tsx +62 -0
- package/src/components/markdownrender/markdownRender.tsx +17 -0
- package/src/components/vulnerability/constants.ts +17 -0
- package/src/components/vulnerability/severityPill.tsx +22 -0
- package/src/globals.css +20 -0
- package/tsconfig.json +1 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useState } from 'react'
|
|
2
|
-
import ReactMarkdown from 'react-markdown'
|
|
3
2
|
import { Eye, Pencil } from 'lucide-react'
|
|
4
3
|
import { FieldWrapper } from './shared'
|
|
4
|
+
import MarkdownRender from '@components/markdownrender/markdownRender'
|
|
5
5
|
|
|
6
6
|
export type TextareaProps = Omit<React.ComponentProps<'textarea'>, 'name'> & {
|
|
7
7
|
name: string
|
|
@@ -31,6 +31,8 @@ export default function Textarea(props: TextareaProps) {
|
|
|
31
31
|
const jsonError = type === 'json' && value ? isValidJson(value as string) : undefined
|
|
32
32
|
const displayError = jsonError || error
|
|
33
33
|
|
|
34
|
+
console.log(value)
|
|
35
|
+
|
|
34
36
|
return (
|
|
35
37
|
<FieldWrapper
|
|
36
38
|
label={label}
|
|
@@ -60,14 +62,10 @@ export default function Textarea(props: TextareaProps) {
|
|
|
60
62
|
<div
|
|
61
63
|
className={`
|
|
62
64
|
w-full rounded-md bg-login-500/50 border border-login-500
|
|
63
|
-
|
|
64
|
-
p-3
|
|
65
|
-
prose prose-invert prose-base max-w-none overflow-y-auto
|
|
66
|
-
${error ? 'border-red-500' : ''}
|
|
65
|
+
p-3 overflow-y-auto ${error ? 'border-red-500' : ''}
|
|
67
66
|
`}
|
|
68
|
-
style={{ minHeight: `${rows * 1.5}rem` }}
|
|
69
67
|
>
|
|
70
|
-
<
|
|
68
|
+
<MarkdownRender MDstr={String(value || '')} />
|
|
71
69
|
</div>
|
|
72
70
|
)}
|
|
73
71
|
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
type ToggleOption<T> = {
|
|
2
|
+
value: T
|
|
3
|
+
label?: string
|
|
4
|
+
text?: string
|
|
5
|
+
icon?: React.ReactNode
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
type ToggleProps<T> = {
|
|
9
|
+
value: T
|
|
10
|
+
onChange: (value: T) => void
|
|
11
|
+
left: ToggleOption<T>
|
|
12
|
+
right: ToggleOption<T>
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export default function Toggle<T>({
|
|
16
|
+
value,
|
|
17
|
+
onChange,
|
|
18
|
+
left,
|
|
19
|
+
right,
|
|
20
|
+
}: ToggleProps<T>) {
|
|
21
|
+
const active = 'bg-login-200 text-login-950 shadow'
|
|
22
|
+
const idle = 'text-login-200 hover:bg-login-50/10 hover:text-login-50'
|
|
23
|
+
|
|
24
|
+
const base =
|
|
25
|
+
'flex items-center justify-center rounded-full transition gap-1'
|
|
26
|
+
|
|
27
|
+
function renderContent(opt: ToggleOption<T>) {
|
|
28
|
+
return (
|
|
29
|
+
<>
|
|
30
|
+
{opt.icon}
|
|
31
|
+
{opt.text && <span>{opt.text}</span>}
|
|
32
|
+
</>
|
|
33
|
+
)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const isLeftActive = value === left.value
|
|
37
|
+
const isRightActive = value === right.value
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<div className='flex items-center rounded-full border border-login-100/10 bg-login-50/5 p-1'>
|
|
41
|
+
<button
|
|
42
|
+
type='button'
|
|
43
|
+
onClick={() => onChange(left.value)}
|
|
44
|
+
aria-label={left.label ?? left.text}
|
|
45
|
+
aria-pressed={isLeftActive}
|
|
46
|
+
className={`${base} px-2 h-7 ${isLeftActive ? active : idle}`}
|
|
47
|
+
>
|
|
48
|
+
{renderContent(left)}
|
|
49
|
+
</button>
|
|
50
|
+
|
|
51
|
+
<button
|
|
52
|
+
type='button'
|
|
53
|
+
onClick={() => onChange(right.value)}
|
|
54
|
+
aria-label={right.label ?? right.text}
|
|
55
|
+
aria-pressed={isRightActive}
|
|
56
|
+
className={`${base} px-2 h-7 ${isRightActive ? active : idle}`}
|
|
57
|
+
>
|
|
58
|
+
{renderContent(right)}
|
|
59
|
+
</button>
|
|
60
|
+
</div>
|
|
61
|
+
)
|
|
62
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import Markdown from 'react-markdown'
|
|
2
|
+
import remarkGfm from 'remark-gfm'
|
|
3
|
+
|
|
4
|
+
export default function MarkdownRender({MDstr}: {MDstr: string}) {
|
|
5
|
+
return (
|
|
6
|
+
<div className='prose prose-sm prose-custom max-w-none'>
|
|
7
|
+
<Markdown
|
|
8
|
+
components={{ h1: ({...props}) => <h2 {...props} /> }}
|
|
9
|
+
remarkPlugins={
|
|
10
|
+
[remarkGfm]
|
|
11
|
+
}
|
|
12
|
+
>
|
|
13
|
+
{MDstr.replace(/\\n/g, '\n')}
|
|
14
|
+
</Markdown>
|
|
15
|
+
</div>
|
|
16
|
+
)
|
|
17
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type SeverityLevel = 'critical' | 'high' | 'medium' | 'low' | 'unknown'
|
|
2
|
+
|
|
3
|
+
export const severityLabel: Record<SeverityLevel, string> = {
|
|
4
|
+
critical: 'Critical',
|
|
5
|
+
high: 'High',
|
|
6
|
+
medium: 'Medium',
|
|
7
|
+
low: 'Low',
|
|
8
|
+
unknown: 'Unknown',
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const severityClasses: Record<SeverityLevel, string> = {
|
|
12
|
+
critical: 'border-red-400/25 bg-red-500/10 text-red-200',
|
|
13
|
+
high: 'border-orange-400/25 bg-orange-500/10 text-orange-200',
|
|
14
|
+
medium: 'border-amber-400/25 bg-amber-500/10 text-amber-200',
|
|
15
|
+
low: 'border-sky-400/25 bg-sky-500/10 text-sky-200',
|
|
16
|
+
unknown: 'border-login-100/10 bg-login-50/5 text-login-200',
|
|
17
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { severityClasses, severityLabel } from './constants'
|
|
2
|
+
|
|
3
|
+
type SeverityLevel = 'critical' | 'high' | 'medium' | 'low' | 'unknown'
|
|
4
|
+
|
|
5
|
+
type SeverityPillProps = {
|
|
6
|
+
severity: SeverityLevel
|
|
7
|
+
count: number
|
|
8
|
+
compact?: boolean
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export default function SeverityPill({ severity, count, compact = false }: SeverityPillProps) {
|
|
12
|
+
if (count === 0) {
|
|
13
|
+
return null
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return (
|
|
17
|
+
<div className={`rounded-xl border ${compact ? 'px-3 py-2' : 'p-3'} ${severityClasses[severity]}`}>
|
|
18
|
+
<div className='text-[11px] font-medium uppercase tracking-[0.18em]'>{severityLabel[severity]}</div>
|
|
19
|
+
<div className={`${compact ? 'mt-1 text-sm' : 'mt-2 text-lg'} font-semibold`}>{count}</div>
|
|
20
|
+
</div>
|
|
21
|
+
)
|
|
22
|
+
}
|
package/src/globals.css
CHANGED
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
--color-login-300: #5e5e5e;
|
|
34
34
|
--color-login-200: #727272;
|
|
35
35
|
--color-login-100: #b0b0b0;
|
|
36
|
+
--color-login-75: #e4e4e4;
|
|
36
37
|
--color-login-50: #ededed;
|
|
37
38
|
|
|
38
39
|
--color-login-text: #ededed;
|
|
@@ -98,6 +99,25 @@
|
|
|
98
99
|
--color-login-text: #0e0e0e;
|
|
99
100
|
}
|
|
100
101
|
|
|
102
|
+
@utility prose-custom {
|
|
103
|
+
--tw-prose-body: var(--color-login-text);
|
|
104
|
+
--tw-prose-headings: var(--color-login-text);
|
|
105
|
+
--tw-prose-lead: var(--color-login-300);
|
|
106
|
+
--tw-prose-links: var(--color-login);
|
|
107
|
+
--tw-prose-bold: var(--color-login-text);
|
|
108
|
+
--tw-prose-counters: var(--color-login-400);
|
|
109
|
+
--tw-prose-bullets: var(--color-login-400);
|
|
110
|
+
--tw-prose-hr: var(--color-login-300);
|
|
111
|
+
--tw-prose-quotes: var(--color-login-text);
|
|
112
|
+
--tw-prose-quote-borders: var(--color-login-300);
|
|
113
|
+
--tw-prose-captions: var(--color-login-300);
|
|
114
|
+
--tw-prose-code: var(--color-login-text);
|
|
115
|
+
--tw-prose-pre-code: var(--color-login-text);
|
|
116
|
+
--tw-prose-pre-bg: var(--color-login-800);
|
|
117
|
+
--tw-prose-th-borders: var(--color-login-500);
|
|
118
|
+
--tw-prose-td-borders: var(--color-login-500);
|
|
119
|
+
}
|
|
120
|
+
|
|
101
121
|
@keyframes jump {
|
|
102
122
|
40% {
|
|
103
123
|
transform: translateY(-0.3rem);
|