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
|
@@ -24,4 +24,7 @@ export { default as Alert } from './alert/alert';
|
|
|
24
24
|
export { MenuButton } from './table/menu';
|
|
25
25
|
export { default as Table } from './table/table';
|
|
26
26
|
export { default as Pagination } from './table/pagination';
|
|
27
|
+
export { default as MarkdownRender } from './markdownrender/markdownRender';
|
|
27
28
|
export { default as ConfirmPopup } from './confirm/confirmPopup';
|
|
29
|
+
export { default as SeverityPill } from './vulnerability/severityPill';
|
|
30
|
+
export { default as Toggle } from './layout/toggle';
|
|
@@ -34,5 +34,11 @@ export { default as Alert } from './alert/alert';
|
|
|
34
34
|
export { MenuButton } from './table/menu';
|
|
35
35
|
export { default as Table } from './table/table';
|
|
36
36
|
export { default as Pagination } from './table/pagination';
|
|
37
|
+
// Markdown
|
|
38
|
+
export { default as MarkdownRender } from './markdownrender/markdownRender';
|
|
37
39
|
// Confirm
|
|
38
40
|
export { default as ConfirmPopup } from './confirm/confirmPopup';
|
|
41
|
+
// Vulnerability
|
|
42
|
+
export { default as SeverityPill } from './vulnerability/severityPill';
|
|
43
|
+
// Layout
|
|
44
|
+
export { default as Toggle } from './layout/toggle';
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import InputLabel from './inputLabel';
|
|
3
3
|
import InputInfo from './inputInfo';
|
|
4
4
|
import InputError from './inputError';
|
|
5
|
-
import
|
|
5
|
+
import MarkdownRender from '../../markdownrender/markdownRender';
|
|
6
6
|
export default function FieldWrapper({ label, name, required, info, error, description, textSize = 'sm', children, className, }) {
|
|
7
|
-
return (_jsxs("div", { className: `flex flex-col gap-1 w-full relative ${className || ''}`, children: [(label || info) && (_jsxs("div", { className: 'flex items-center justify-between mb-1', children: [label && (_jsx(InputLabel, { label: label, name: name, required: required, className: `ml-1 ${textSize === 'sm' ? 'text-sm!' : 'text-base!'}` })), info && _jsx(InputInfo, { info: info })] })), description && (_jsx("
|
|
7
|
+
return (_jsxs("div", { className: `flex flex-col gap-1 w-full relative ${className || ''}`, children: [(label || info) && (_jsxs("div", { className: 'flex items-center justify-between mb-1', children: [label && (_jsx(InputLabel, { label: label, name: name, required: required, className: `ml-1 ${textSize === 'sm' ? 'text-sm!' : 'text-base!'}` })), info && _jsx(InputInfo, { info: info })] })), description && (_jsx("div", { className: 'text-login-100 **:text-xs! ml-1 mb-1', children: _jsx(MarkdownRender, { MDstr: String(description || '') }) })), children, _jsx(InputError, { error: error, id: `${name}-error` })] }));
|
|
8
8
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useState } from 'react';
|
|
3
|
-
import ReactMarkdown from 'react-markdown';
|
|
4
3
|
import { Eye, Pencil } from 'lucide-react';
|
|
5
4
|
import { FieldWrapper } from './shared';
|
|
5
|
+
import MarkdownRender from '../markdownrender/markdownRender';
|
|
6
6
|
function isValidJson(str) {
|
|
7
7
|
try {
|
|
8
8
|
JSON.parse(str);
|
|
@@ -18,13 +18,11 @@ export default function Textarea(props) {
|
|
|
18
18
|
const [preview, setPreview] = useState(false);
|
|
19
19
|
const jsonError = type === 'json' && value ? isValidJson(value) : undefined;
|
|
20
20
|
const displayError = jsonError || error;
|
|
21
|
+
console.log(value);
|
|
21
22
|
return (_jsx(FieldWrapper, { label: label, name: name, required: textareaProps.required, info: info, description: description, error: displayError, textSize: textSize, className: className, children: _jsxs("div", { className: 'relative', children: [type === 'markdown' && (_jsx("div", { className: 'absolute right-2 top-2 z-10 flex gap-2', children: _jsx("button", { type: 'button', onClick: () => setPreview(!preview), className: 'p-1 rounded hover:bg-login-500/50 text-login-text transition-colors', title: preview ? 'Edit' : 'Preview', children: preview ? _jsx(Pencil, { size: 16 }) : _jsx(Eye, { size: 16 }) }) })), type === 'markdown' && preview && (_jsx("div", { className: `
|
|
22
23
|
w-full rounded-md bg-login-500/50 border border-login-500
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
prose prose-invert prose-base max-w-none overflow-y-auto
|
|
26
|
-
${error ? 'border-red-500' : ''}
|
|
27
|
-
`, style: { minHeight: `${rows * 1.5}rem` }, children: _jsx(ReactMarkdown, { children: String(value || '') }) })), _jsx("textarea", { ...textareaProps, id: name, name: name, rows: rows, title: label, "aria-invalid": !!error, "aria-describedby": error ? `${name}-error` : undefined, className: `
|
|
24
|
+
p-3 overflow-y-auto ${error ? 'border-red-500' : ''}
|
|
25
|
+
`, children: _jsx(MarkdownRender, { MDstr: String(value || '') }) })), _jsx("textarea", { ...textareaProps, id: name, name: name, rows: rows, title: label, "aria-invalid": !!error, "aria-describedby": error ? `${name}-error` : undefined, className: `
|
|
28
26
|
${type === 'markdown' && preview ? 'hidden' : ''}
|
|
29
27
|
w-full rounded-md bg-login-500/50 border border-login-500
|
|
30
28
|
text-login-text placeholder-login-200
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
type ToggleOption<T> = {
|
|
2
|
+
value: T;
|
|
3
|
+
label?: string;
|
|
4
|
+
text?: string;
|
|
5
|
+
icon?: React.ReactNode;
|
|
6
|
+
};
|
|
7
|
+
type ToggleProps<T> = {
|
|
8
|
+
value: T;
|
|
9
|
+
onChange: (value: T) => void;
|
|
10
|
+
left: ToggleOption<T>;
|
|
11
|
+
right: ToggleOption<T>;
|
|
12
|
+
};
|
|
13
|
+
export default function Toggle<T>({ value, onChange, left, right, }: ToggleProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export default function Toggle({ value, onChange, left, right, }) {
|
|
3
|
+
const active = 'bg-login-200 text-login-950 shadow';
|
|
4
|
+
const idle = 'text-login-200 hover:bg-login-50/10 hover:text-login-50';
|
|
5
|
+
const base = 'flex items-center justify-center rounded-full transition gap-1';
|
|
6
|
+
function renderContent(opt) {
|
|
7
|
+
return (_jsxs(_Fragment, { children: [opt.icon, opt.text && _jsx("span", { children: opt.text })] }));
|
|
8
|
+
}
|
|
9
|
+
const isLeftActive = value === left.value;
|
|
10
|
+
const isRightActive = value === right.value;
|
|
11
|
+
return (_jsxs("div", { className: 'flex items-center rounded-full border border-login-100/10 bg-login-50/5 p-1', children: [_jsx("button", { type: 'button', onClick: () => onChange(left.value), "aria-label": left.label ?? left.text, "aria-pressed": isLeftActive, className: `${base} px-2 h-7 ${isLeftActive ? active : idle}`, children: renderContent(left) }), _jsx("button", { type: 'button', onClick: () => onChange(right.value), "aria-label": right.label ?? right.text, "aria-pressed": isRightActive, className: `${base} px-2 h-7 ${isRightActive ? active : idle}`, children: renderContent(right) })] }));
|
|
12
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import Markdown from 'react-markdown';
|
|
3
|
+
import remarkGfm from 'remark-gfm';
|
|
4
|
+
export default function MarkdownRender({ MDstr }) {
|
|
5
|
+
return (_jsx("div", { className: 'prose prose-sm prose-custom max-w-none', children: _jsx(Markdown, { components: { h1: ({ ...props }) => _jsx("h2", { ...props }) }, remarkPlugins: [remarkGfm], children: MDstr.replace(/\\n/g, '\n') }) }));
|
|
6
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const severityLabel = {
|
|
2
|
+
critical: 'Critical',
|
|
3
|
+
high: 'High',
|
|
4
|
+
medium: 'Medium',
|
|
5
|
+
low: 'Low',
|
|
6
|
+
unknown: 'Unknown',
|
|
7
|
+
};
|
|
8
|
+
export const severityClasses = {
|
|
9
|
+
critical: 'border-red-400/25 bg-red-500/10 text-red-200',
|
|
10
|
+
high: 'border-orange-400/25 bg-orange-500/10 text-orange-200',
|
|
11
|
+
medium: 'border-amber-400/25 bg-amber-500/10 text-amber-200',
|
|
12
|
+
low: 'border-sky-400/25 bg-sky-500/10 text-sky-200',
|
|
13
|
+
unknown: 'border-login-100/10 bg-login-50/5 text-login-200',
|
|
14
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
type SeverityLevel = 'critical' | 'high' | 'medium' | 'low' | 'unknown';
|
|
2
|
+
type SeverityPillProps = {
|
|
3
|
+
severity: SeverityLevel;
|
|
4
|
+
count: number;
|
|
5
|
+
compact?: boolean;
|
|
6
|
+
};
|
|
7
|
+
export default function SeverityPill({ severity, count, compact }: SeverityPillProps): import("react/jsx-runtime").JSX.Element | null;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { severityClasses, severityLabel } from './constants';
|
|
3
|
+
export default function SeverityPill({ severity, count, compact = false }) {
|
|
4
|
+
if (count === 0) {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
return (_jsxs("div", { className: `rounded-xl border ${compact ? 'px-3 py-2' : 'p-3'} ${severityClasses[severity]}`, children: [_jsx("div", { className: 'text-[11px] font-medium uppercase tracking-[0.18em]', children: severityLabel[severity] }), _jsx("div", { className: `${compact ? 'mt-1 text-sm' : 'mt-2 text-lg'} font-semibold`, children: count })] }));
|
|
8
|
+
}
|