@package-broker/ui 0.19.7 → 2.0.0-rc.1
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/LICENSE +661 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/api-types.d.ts +9987 -0
- package/dist/api-types.d.ts.map +1 -0
- package/dist/api-types.js +6 -0
- package/dist/api-types.js.map +1 -0
- package/dist/api.d.ts +88 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +179 -0
- package/dist/api.js.map +1 -0
- package/dist/app.d.ts +76 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +239 -0
- package/dist/app.js.map +1 -0
- package/dist/assets/app.0348e5888f99.js +15 -0
- package/dist/assets/app.e8cea8b32d3a.css +2 -0
- package/dist/assets/index.html +13 -0
- package/dist/assets/manifest.json +26 -0
- package/dist/assets/setup.98343039898f.js +1 -0
- package/dist/assets/setup.html +14 -0
- package/dist/auth.d.ts +170 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +551 -0
- package/dist/auth.js.map +1 -0
- package/dist/components/ui/alert.d.ts +10 -0
- package/dist/components/ui/alert.d.ts.map +1 -0
- package/dist/components/ui/alert.js +22 -0
- package/dist/components/ui/alert.js.map +1 -0
- package/dist/components/ui/badge.d.ts +8 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/badge.js +18 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/button.d.ts +13 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +27 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/card.d.ts +10 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/card.js +21 -0
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/confirm-action.d.ts +12 -0
- package/dist/components/ui/confirm-action.d.ts.map +1 -0
- package/dist/components/ui/confirm-action.js +19 -0
- package/dist/components/ui/confirm-action.js.map +1 -0
- package/dist/components/ui/dialog.d.ts +17 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/dialog.js +180 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +8 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.js +71 -0
- package/dist/components/ui/dropdown-menu.js.map +1 -0
- package/dist/components/ui/id-text.d.ts +11 -0
- package/dist/components/ui/id-text.d.ts.map +1 -0
- package/dist/components/ui/id-text.js +23 -0
- package/dist/components/ui/id-text.js.map +1 -0
- package/dist/components/ui/input.d.ts +5 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/input.js +6 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/label.d.ts +4 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/label.js +7 -0
- package/dist/components/ui/label.js.map +1 -0
- package/dist/components/ui/list-state.d.ts +7 -0
- package/dist/components/ui/list-state.d.ts.map +1 -0
- package/dist/components/ui/list-state.js +5 -0
- package/dist/components/ui/list-state.js.map +1 -0
- package/dist/components/ui/overlay-host.d.ts +6 -0
- package/dist/components/ui/overlay-host.d.ts.map +1 -0
- package/dist/components/ui/overlay-host.js +36 -0
- package/dist/components/ui/overlay-host.js.map +1 -0
- package/dist/components/ui/row-actions.d.ts +17 -0
- package/dist/components/ui/row-actions.d.ts.map +1 -0
- package/dist/components/ui/row-actions.js +21 -0
- package/dist/components/ui/row-actions.js.map +1 -0
- package/dist/components/ui/select.d.ts +3 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/select.js +6 -0
- package/dist/components/ui/select.js.map +1 -0
- package/dist/components/ui/status-badge.d.ts +28 -0
- package/dist/components/ui/status-badge.d.ts.map +1 -0
- package/dist/components/ui/status-badge.js +50 -0
- package/dist/components/ui/status-badge.js.map +1 -0
- package/dist/components/ui/table.d.ts +27 -0
- package/dist/components/ui/table.d.ts.map +1 -0
- package/dist/components/ui/table.js +81 -0
- package/dist/components/ui/table.js.map +1 -0
- package/dist/components/ui/tabs.d.ts +7 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/tabs.js +14 -0
- package/dist/components/ui/tabs.js.map +1 -0
- package/dist/components/ui/textarea.d.ts +3 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/textarea.js +14 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/components/ui/time.d.ts +5 -0
- package/dist/components/ui/time.d.ts.map +1 -0
- package/dist/components/ui/time.js +14 -0
- package/dist/components/ui/time.js.map +1 -0
- package/dist/components/ui/toolbar.d.ts +20 -0
- package/dist/components/ui/toolbar.d.ts.map +1 -0
- package/dist/components/ui/toolbar.js +42 -0
- package/dist/components/ui/toolbar.js.map +1 -0
- package/dist/components/vulnerability-status.d.ts +8 -0
- package/dist/components/vulnerability-status.d.ts.map +1 -0
- package/dist/components/vulnerability-status.js +49 -0
- package/dist/components/vulnerability-status.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/use-merged-refs.d.ts +3 -0
- package/dist/lib/use-merged-refs.d.ts.map +1 -0
- package/dist/lib/use-merged-refs.js +22 -0
- package/dist/lib/use-merged-refs.js.map +1 -0
- package/dist/lib/utils.d.ts +4 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +11 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +9 -0
- package/dist/main.js.map +1 -0
- package/dist/manifest.d.ts +8 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +21 -0
- package/dist/manifest.js.map +1 -0
- package/dist/page-hash.d.ts +23 -0
- package/dist/page-hash.d.ts.map +1 -0
- package/dist/page-hash.js +45 -0
- package/dist/page-hash.js.map +1 -0
- package/dist/pages/access.d.ts +69 -0
- package/dist/pages/access.d.ts.map +1 -0
- package/dist/pages/access.js +391 -0
- package/dist/pages/access.js.map +1 -0
- package/dist/pages/audit.d.ts +63 -0
- package/dist/pages/audit.d.ts.map +1 -0
- package/dist/pages/audit.js +182 -0
- package/dist/pages/audit.js.map +1 -0
- package/dist/pages/import.d.ts +41 -0
- package/dist/pages/import.d.ts.map +1 -0
- package/dist/pages/import.js +274 -0
- package/dist/pages/import.js.map +1 -0
- package/dist/pages/management.d.ts +47 -0
- package/dist/pages/management.d.ts.map +1 -0
- package/dist/pages/management.js +141 -0
- package/dist/pages/management.js.map +1 -0
- package/dist/pages/packages.d.ts +74 -0
- package/dist/pages/packages.d.ts.map +1 -0
- package/dist/pages/packages.js +505 -0
- package/dist/pages/packages.js.map +1 -0
- package/dist/pages/projects.d.ts +58 -0
- package/dist/pages/projects.d.ts.map +1 -0
- package/dist/pages/projects.js +357 -0
- package/dist/pages/projects.js.map +1 -0
- package/dist/pages/sources/add-package-dialog.d.ts +10 -0
- package/dist/pages/sources/add-package-dialog.d.ts.map +1 -0
- package/dist/pages/sources/add-package-dialog.js +19 -0
- package/dist/pages/sources/add-package-dialog.js.map +1 -0
- package/dist/pages/sources/proxy-message.d.ts +2 -0
- package/dist/pages/sources/proxy-message.d.ts.map +1 -0
- package/dist/pages/sources/proxy-message.js +2 -0
- package/dist/pages/sources/proxy-message.js.map +1 -0
- package/dist/pages/sources/source-form.d.ts +29 -0
- package/dist/pages/sources/source-form.d.ts.map +1 -0
- package/dist/pages/sources/source-form.js +463 -0
- package/dist/pages/sources/source-form.js.map +1 -0
- package/dist/pages/sources/sync-poll.d.ts +20 -0
- package/dist/pages/sources/sync-poll.d.ts.map +1 -0
- package/dist/pages/sources/sync-poll.js +71 -0
- package/dist/pages/sources/sync-poll.js.map +1 -0
- package/dist/pages/sources.d.ts +325 -0
- package/dist/pages/sources.d.ts.map +1 -0
- package/dist/pages/sources.js +1132 -0
- package/dist/pages/sources.js.map +1 -0
- package/dist/pages/tokens/client-config.d.ts +5 -0
- package/dist/pages/tokens/client-config.d.ts.map +1 -0
- package/dist/pages/tokens/client-config.js +9 -0
- package/dist/pages/tokens/client-config.js.map +1 -0
- package/dist/pages/tokens.d.ts +127 -0
- package/dist/pages/tokens.d.ts.map +1 -0
- package/dist/pages/tokens.js +744 -0
- package/dist/pages/tokens.js.map +1 -0
- package/dist/pending.d.ts +33 -0
- package/dist/pending.d.ts.map +1 -0
- package/dist/pending.js +156 -0
- package/dist/pending.js.map +1 -0
- package/dist/qr.d.ts +14 -0
- package/dist/qr.d.ts.map +1 -0
- package/dist/qr.js +322 -0
- package/dist/qr.js.map +1 -0
- package/dist/setup.d.ts +49 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +390 -0
- package/dist/setup.js.map +1 -0
- package/dist/test-fixtures/api-types.d.ts +228 -0
- package/dist/test-fixtures/api-types.d.ts.map +1 -0
- package/dist/test-fixtures/api-types.js +6 -0
- package/dist/test-fixtures/api-types.js.map +1 -0
- package/package.json +37 -40
- package/public/index.html +11 -0
- package/README.md +0 -11
- package/dist/assets/main-3NLwl1eV.js +0 -111
- package/dist/assets/main-CsTEYyDl.css +0 -1
- package/dist/config.js +0 -3
- package/dist/index.html +0 -22
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as LabelPrimitive from '@radix-ui/react-label';
|
|
3
|
+
import { cn } from '../../lib/utils.js';
|
|
4
|
+
export function Label({ className, ...props }) {
|
|
5
|
+
return (_jsx(LabelPrimitive.Root, { className: cn('text-sm font-medium leading-none peer-disabled:opacity-70', className), ...props }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=label.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label.js","sourceRoot":"","sources":["../../../src/components/ui/label.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,MAAM,UAAU,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA8C;IACvF,OAAO,CACL,KAAC,cAAc,CAAC,IAAI,IAClB,SAAS,EAAE,EAAE,CAAC,2DAA2D,EAAE,SAAS,CAAC,KACjF,KAAK,GACT,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export declare function ListState({ kind, title, children, }: {
|
|
3
|
+
kind: 'placeholder' | 'loading' | 'empty' | 'filtered-empty' | 'error';
|
|
4
|
+
title: string;
|
|
5
|
+
children?: ReactNode;
|
|
6
|
+
}): import("react").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=list-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-state.d.ts","sourceRoot":"","sources":["../../../src/components/ui/list-state.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,KAAK,EACL,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,gBAAgB,GAAG,OAAO,CAAC;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,+BAYA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function ListState({ kind, title, children, }) {
|
|
3
|
+
return (_jsxs("div", { "data-list-state": kind, role: kind === 'error' ? 'alert' : 'status', "aria-busy": kind === 'loading', className: `list-state ${kind === 'error' ? 'list-state-error' : ''}`, children: [_jsx("strong", { children: title }), children] }));
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=list-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-state.js","sourceRoot":"","sources":["../../../src/components/ui/list-state.tsx"],"names":[],"mappings":";AACA,MAAM,UAAU,SAAS,CAAC,EACxB,IAAI,EACJ,KAAK,EACL,QAAQ,GAKT;IACC,OAAO,CACL,kCACmB,IAAI,EACrB,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,eAChC,IAAI,KAAK,SAAS,EAC7B,SAAS,EAAE,cAAc,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,EAAE,aAErE,2BAAS,KAAK,GAAU,EACvB,QAAQ,IACL,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay-host.d.ts","sourceRoot":"","sources":["../../../src/components/ui/overlay-host.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAKvF,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAQhE;AAED,wBAAgB,cAAc,uBAyB7B"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext, useEffect, useState } from 'react';
|
|
3
|
+
const OverlayContext = createContext(undefined);
|
|
4
|
+
const documentHosts = new WeakMap();
|
|
5
|
+
export function OverlayHost({ children }) {
|
|
6
|
+
const [host, setHost] = useState(null);
|
|
7
|
+
return (_jsxs(OverlayContext.Provider, { value: host, children: [children, _jsx("div", { "data-overlay-host": true, ref: setHost })] }));
|
|
8
|
+
}
|
|
9
|
+
export function useOverlayHost() {
|
|
10
|
+
const inherited = useContext(OverlayContext);
|
|
11
|
+
const [host, setHost] = useState(null);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
if (inherited !== undefined)
|
|
14
|
+
return;
|
|
15
|
+
let shared = documentHosts.get(document);
|
|
16
|
+
if (!shared) {
|
|
17
|
+
const element = document.createElement('div');
|
|
18
|
+
element.setAttribute('data-overlay-host', '');
|
|
19
|
+
document.body.append(element);
|
|
20
|
+
shared = { element, users: 0 };
|
|
21
|
+
documentHosts.set(document, shared);
|
|
22
|
+
}
|
|
23
|
+
const owner = document;
|
|
24
|
+
const acquired = shared;
|
|
25
|
+
acquired.users++;
|
|
26
|
+
setHost(acquired.element);
|
|
27
|
+
return () => {
|
|
28
|
+
if (--acquired.users === 0) {
|
|
29
|
+
acquired.element.remove();
|
|
30
|
+
documentHosts.delete(owner);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}, [inherited]);
|
|
34
|
+
return inherited === undefined ? host : inherited;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=overlay-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay-host.js","sourceRoot":"","sources":["../../../src/components/ui/overlay-host.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAEvF,MAAM,cAAc,GAAG,aAAa,CAAiC,SAAS,CAAC,CAAC;AAChF,MAAM,aAAa,GAAG,IAAI,OAAO,EAAwD,CAAC;AAE1F,MAAM,UAAU,WAAW,CAAC,EAAE,QAAQ,EAA2B;IAC/D,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAwB,IAAI,CAAC,CAAC;IAC9D,OAAO,CACL,MAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,aACjC,QAAQ,EACT,yCAAuB,GAAG,EAAE,OAAO,GAAI,IACf,CAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,SAAS,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAC7C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAqB,IAAI,CAAC,CAAC;IAC3D,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO;QACpC,IAAI,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9C,OAAO,CAAC,YAAY,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;YAC9C,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC9B,MAAM,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;YAC/B,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC;QACvB,MAAM,QAAQ,GAAG,MAAM,CAAC;QACxB,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,GAAG,EAAE;YACV,IAAI,EAAE,QAAQ,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;gBAC3B,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC1B,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAChB,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type ButtonProps } from './button.js';
|
|
2
|
+
export interface RowAction {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
onSelect: () => void;
|
|
6
|
+
variant?: NonNullable<ButtonProps['variant']>;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
pending?: boolean;
|
|
9
|
+
describedBy?: string;
|
|
10
|
+
}
|
|
11
|
+
export interface RowActionsProps {
|
|
12
|
+
entityLabel: string;
|
|
13
|
+
actions: readonly RowAction[];
|
|
14
|
+
overflow?: readonly RowAction[];
|
|
15
|
+
}
|
|
16
|
+
export declare function RowActions({ entityLabel, actions, overflow }: RowActionsProps): import("react").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=row-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"row-actions.d.ts","sourceRoot":"","sources":["../../../src/components/ui/row-actions.tsx"],"names":[],"mappings":"AACA,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAQvE,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,SAAS,SAAS,EAAE,CAAC;CACjC;AAgBD,wBAAgB,UAAU,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,QAAa,EAAE,EAAE,eAAe,+BAuDlF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '../../lib/utils.js';
|
|
3
|
+
import { Button, buttonVariants } from './button.js';
|
|
4
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from './dropdown-menu.js';
|
|
5
|
+
const controlClassName = 'h-auto min-h-10 w-fit max-w-full shrink-0 whitespace-normal break-words py-2 sm:min-h-8 sm:py-1';
|
|
6
|
+
function RowActionsTrigger({ entityLabel }) {
|
|
7
|
+
return (_jsx(DropdownMenuTrigger, { "aria-label": `More actions for ${entityLabel}`, className: cn(buttonVariants({ size: 'sm', variant: 'outline' }), controlClassName), children: "More" }));
|
|
8
|
+
}
|
|
9
|
+
export function RowActions({ entityLabel, actions, overflow = [] }) {
|
|
10
|
+
return (_jsxs("div", { role: "group", "aria-label": `Actions for ${entityLabel}`, className: "flex flex-wrap items-center gap-2", children: [actions.map((action) => (_jsx(Button, { size: "sm", className: controlClassName, variant: action.variant ?? 'outline', disabled: Boolean(action.disabled), "aria-disabled": action.pending || undefined, "aria-busy": action.pending || undefined, "aria-describedby": action.describedBy, "aria-label": `${action.label} ${entityLabel}`, onClick: () => {
|
|
11
|
+
if (!action.disabled && !action.pending)
|
|
12
|
+
action.onSelect();
|
|
13
|
+
}, children: action.label }, action.id))), overflow.length > 0 ? (_jsxs(DropdownMenu, { className: "max-w-full", children: [_jsx(RowActionsTrigger, { entityLabel: entityLabel }), _jsx(DropdownMenuContent, { children: overflow.map((action) => (_jsx(DropdownMenuItem, { "data-variant": action.variant ?? 'outline', className: action.variant === 'destructive' ? 'text-red-700' : undefined, disabled: Boolean(action.disabled), "aria-disabled": action.pending || undefined, "aria-busy": action.pending || undefined, "aria-describedby": action.describedBy, "aria-label": `${action.label} ${entityLabel}`, onClick: (event) => {
|
|
14
|
+
if (action.disabled || action.pending) {
|
|
15
|
+
event.preventDefault();
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
action.onSelect();
|
|
19
|
+
}, children: action.label }, action.id))) })] })) : null] }));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=row-actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"row-actions.js","sourceRoot":"","sources":["../../../src/components/ui/row-actions.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAoB,MAAM,aAAa,CAAC;AACvE,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAkB5B,MAAM,gBAAgB,GACpB,iGAAiG,CAAC;AAEpG,SAAS,iBAAiB,CAAC,EAAE,WAAW,EAA2B;IACjE,OAAO,CACL,KAAC,mBAAmB,kBACN,oBAAoB,WAAW,EAAE,EAC7C,SAAS,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,gBAAgB,CAAC,qBAG/D,CACvB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,GAAG,EAAE,EAAmB;IACjF,OAAO,CACL,eACE,IAAI,EAAC,OAAO,gBACA,eAAe,WAAW,EAAE,EACxC,SAAS,EAAC,mCAAmC,aAE5C,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,MAAM,IAEL,IAAI,EAAC,IAAI,EACT,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,SAAS,EACpC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBACnB,MAAM,CAAC,OAAO,IAAI,SAAS,eAC/B,MAAM,CAAC,OAAO,IAAI,SAAS,sBACpB,MAAM,CAAC,WAAW,gBACxB,GAAG,MAAM,CAAC,KAAK,IAAI,WAAW,EAAE,EAC5C,OAAO,EAAE,GAAG,EAAE;oBACZ,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO;wBAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC7D,CAAC,YAEA,MAAM,CAAC,KAAK,IAbR,MAAM,CAAC,EAAE,CAcP,CACV,CAAC,EACD,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACrB,MAAC,YAAY,IAAC,SAAS,EAAC,YAAY,aAClC,KAAC,iBAAiB,IAAC,WAAW,EAAE,WAAW,GAAI,EAC/C,KAAC,mBAAmB,cACjB,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACxB,KAAC,gBAAgB,oBAED,MAAM,CAAC,OAAO,IAAI,SAAS,EACzC,SAAS,EAAE,MAAM,CAAC,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,EACxE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBACnB,MAAM,CAAC,OAAO,IAAI,SAAS,eAC/B,MAAM,CAAC,OAAO,IAAI,SAAS,sBACpB,MAAM,CAAC,WAAW,gBACxB,GAAG,MAAM,CAAC,KAAK,IAAI,WAAW,EAAE,EAC5C,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gCACjB,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oCACtC,KAAK,CAAC,cAAc,EAAE,CAAC;oCACvB,OAAO;gCACT,CAAC;gCACD,MAAM,CAAC,QAAQ,EAAE,CAAC;4BACpB,CAAC,YAEA,MAAM,CAAC,KAAK,IAhBR,MAAM,CAAC,EAAE,CAiBG,CACpB,CAAC,GACkB,IACT,CAChB,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/components/ui/select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAG5C,wBAAgB,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,QAAQ,CAAC,+BAUvE"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from '../../lib/utils.js';
|
|
3
|
+
export function Select({ className, ...props }) {
|
|
4
|
+
return (_jsx("select", { className: cn('h-9 w-full rounded-md border border-neutral-300 bg-white px-3 py-2 text-sm shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-600 disabled:cursor-not-allowed disabled:opacity-50', className), ...props }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/components/ui/select.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,MAAM,UAAU,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA4B;IACtE,OAAO,CACL,iBACE,SAAS,EAAE,EAAE,CACX,kNAAkN,EAClN,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare const STATUS_LABELS: {
|
|
2
|
+
readonly active: "Active";
|
|
3
|
+
readonly archived: "Archived";
|
|
4
|
+
readonly paused: "Paused";
|
|
5
|
+
readonly degraded: "Degraded";
|
|
6
|
+
readonly failing: "Failing";
|
|
7
|
+
readonly expired: "Expired";
|
|
8
|
+
readonly revoked: "Revoked";
|
|
9
|
+
readonly suspended: "Suspended";
|
|
10
|
+
readonly yanked: "Yanked";
|
|
11
|
+
readonly quarantined: "Quarantined";
|
|
12
|
+
readonly tombstoned: "Tombstoned";
|
|
13
|
+
readonly removed_upstream: "Removed upstream";
|
|
14
|
+
readonly planned: "Planned";
|
|
15
|
+
readonly applying: "Applying";
|
|
16
|
+
readonly failed: "Failed";
|
|
17
|
+
readonly applied: "Applied";
|
|
18
|
+
readonly verifying: "Verifying";
|
|
19
|
+
readonly verified: "Verified";
|
|
20
|
+
readonly rolled_back: "Rolled back";
|
|
21
|
+
readonly cancelled: "Cancelled";
|
|
22
|
+
};
|
|
23
|
+
export type Status = keyof typeof STATUS_LABELS;
|
|
24
|
+
export declare const STATUS_COLORS: Record<Status, string>;
|
|
25
|
+
export declare function StatusBadge({ status }: {
|
|
26
|
+
status: Status;
|
|
27
|
+
}): import("react").JSX.Element;
|
|
28
|
+
//# sourceMappingURL=status-badge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-badge.d.ts","sourceRoot":"","sources":["../../../src/components/ui/status-badge.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;CAqBhB,CAAC;AACX,MAAM,MAAM,MAAM,GAAG,MAAM,OAAO,aAAa,CAAC;AAChD,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAqBhD,CAAC;AACF,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,+BAMzD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Badge } from './badge.js';
|
|
3
|
+
export const STATUS_LABELS = {
|
|
4
|
+
active: 'Active',
|
|
5
|
+
archived: 'Archived',
|
|
6
|
+
paused: 'Paused',
|
|
7
|
+
degraded: 'Degraded',
|
|
8
|
+
failing: 'Failing',
|
|
9
|
+
expired: 'Expired',
|
|
10
|
+
revoked: 'Revoked',
|
|
11
|
+
suspended: 'Suspended',
|
|
12
|
+
yanked: 'Yanked',
|
|
13
|
+
quarantined: 'Quarantined',
|
|
14
|
+
tombstoned: 'Tombstoned',
|
|
15
|
+
removed_upstream: 'Removed upstream',
|
|
16
|
+
planned: 'Planned',
|
|
17
|
+
applying: 'Applying',
|
|
18
|
+
failed: 'Failed',
|
|
19
|
+
applied: 'Applied',
|
|
20
|
+
verifying: 'Verifying',
|
|
21
|
+
verified: 'Verified',
|
|
22
|
+
rolled_back: 'Rolled back',
|
|
23
|
+
cancelled: 'Cancelled',
|
|
24
|
+
};
|
|
25
|
+
export const STATUS_COLORS = {
|
|
26
|
+
archived: 'border-neutral-200 bg-neutral-100 text-neutral-700',
|
|
27
|
+
paused: 'border-neutral-200 bg-neutral-100 text-neutral-700',
|
|
28
|
+
expired: 'border-neutral-200 bg-neutral-100 text-neutral-700',
|
|
29
|
+
revoked: 'border-red-200 bg-red-50 text-red-800',
|
|
30
|
+
suspended: 'border-red-200 bg-red-50 text-red-800',
|
|
31
|
+
degraded: 'border-amber-300 bg-amber-50 text-amber-900',
|
|
32
|
+
failing: 'border-red-200 bg-red-50 text-red-800',
|
|
33
|
+
yanked: 'border-red-200 bg-red-50 text-red-800',
|
|
34
|
+
active: 'border-emerald-200 bg-emerald-50 text-emerald-800',
|
|
35
|
+
applied: 'border-emerald-200 bg-emerald-50 text-emerald-800',
|
|
36
|
+
verified: 'border-emerald-200 bg-emerald-50 text-emerald-800',
|
|
37
|
+
quarantined: 'border-amber-300 bg-amber-50 text-amber-900',
|
|
38
|
+
removed_upstream: 'border-amber-300 bg-amber-50 text-amber-900',
|
|
39
|
+
applying: 'border-amber-300 bg-amber-50 text-amber-900',
|
|
40
|
+
verifying: 'border-amber-300 bg-amber-50 text-amber-900',
|
|
41
|
+
tombstoned: 'border-red-200 bg-red-50 text-red-800',
|
|
42
|
+
failed: 'border-red-200 bg-red-50 text-red-800',
|
|
43
|
+
planned: 'border-blue-200 bg-blue-50 text-blue-800',
|
|
44
|
+
rolled_back: 'border-neutral-200 bg-neutral-100 text-neutral-700',
|
|
45
|
+
cancelled: 'border-neutral-200 bg-neutral-100 text-neutral-700',
|
|
46
|
+
};
|
|
47
|
+
export function StatusBadge({ status }) {
|
|
48
|
+
return (_jsx(Badge, { variant: "outline", className: `w-fit whitespace-nowrap ${STATUS_COLORS[status]}`, children: STATUS_LABELS[status] }));
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=status-badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-badge.js","sourceRoot":"","sources":["../../../src/components/ui/status-badge.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,aAAa;IAC1B,UAAU,EAAE,YAAY;IACxB,gBAAgB,EAAE,kBAAkB;IACpC,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,aAAa;IAC1B,SAAS,EAAE,WAAW;CACd,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,QAAQ,EAAE,oDAAoD;IAC9D,MAAM,EAAE,oDAAoD;IAC5D,OAAO,EAAE,oDAAoD;IAC7D,OAAO,EAAE,uCAAuC;IAChD,SAAS,EAAE,uCAAuC;IAClD,QAAQ,EAAE,6CAA6C;IACvD,OAAO,EAAE,uCAAuC;IAChD,MAAM,EAAE,uCAAuC;IAC/C,MAAM,EAAE,mDAAmD;IAC3D,OAAO,EAAE,mDAAmD;IAC5D,QAAQ,EAAE,mDAAmD;IAC7D,WAAW,EAAE,6CAA6C;IAC1D,gBAAgB,EAAE,6CAA6C;IAC/D,QAAQ,EAAE,6CAA6C;IACvD,SAAS,EAAE,6CAA6C;IACxD,UAAU,EAAE,uCAAuC;IACnD,MAAM,EAAE,uCAAuC;IAC/C,OAAO,EAAE,0CAA0C;IACnD,WAAW,EAAE,oDAAoD;IACjE,SAAS,EAAE,oDAAoD;CAChE,CAAC;AACF,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,EAAsB;IACxD,OAAO,CACL,KAAC,KAAK,IAAC,OAAO,EAAC,SAAS,EAAC,SAAS,EAAE,2BAA2B,aAAa,CAAC,MAAM,CAAC,EAAE,YACnF,aAAa,CAAC,MAAM,CAAC,GAChB,CACT,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type HTMLAttributes, type TdHTMLAttributes, type ThHTMLAttributes, type ReactNode } from 'react';
|
|
2
|
+
export declare function Table({ className, label, controls, ...props }: HTMLAttributes<HTMLTableElement> & {
|
|
3
|
+
label?: string;
|
|
4
|
+
controls?: ReactNode;
|
|
5
|
+
}): import("react").JSX.Element;
|
|
6
|
+
export declare function TableHeader({ className, ...props }: HTMLAttributes<HTMLTableSectionElement>): import("react").JSX.Element;
|
|
7
|
+
export declare function TableBody({ className, ...props }: HTMLAttributes<HTMLTableSectionElement>): import("react").JSX.Element;
|
|
8
|
+
export declare function TableRow({ className, ...props }: HTMLAttributes<HTMLTableRowElement>): import("react").JSX.Element;
|
|
9
|
+
export declare function TableHead({ className, ...props }: ThHTMLAttributes<HTMLTableCellElement>): import("react").JSX.Element;
|
|
10
|
+
export declare function TableCell({ className, children, ...props }: TdHTMLAttributes<HTMLTableCellElement>): import("react").JSX.Element;
|
|
11
|
+
export interface DataColumn<T> {
|
|
12
|
+
key: string;
|
|
13
|
+
label: string;
|
|
14
|
+
value: (item: T) => string | number;
|
|
15
|
+
render?: (item: T) => ReactNode;
|
|
16
|
+
priority?: 2 | 3;
|
|
17
|
+
sortable?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function DataTable<T extends {
|
|
20
|
+
id: string;
|
|
21
|
+
}>({ label, items, columns, selectedId, }: {
|
|
22
|
+
label: string;
|
|
23
|
+
items: readonly T[];
|
|
24
|
+
columns: readonly DataColumn<T>[];
|
|
25
|
+
selectedId?: string;
|
|
26
|
+
}): import("react").JSX.Element;
|
|
27
|
+
//# sourceMappingURL=table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/components/ui/table.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAWf,wBAAgB,KAAK,CAAC,EACpB,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,cAAc,CAAC,gBAAgB,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,+BAwB7E;AACD,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,uBAAuB,CAAC,+BAE3F;AACD,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,uBAAuB,CAAC,+BAEzF;AACD,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,mBAAmB,CAAC,+BAIpF;AACD,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,gBAAgB,CAAC,oBAAoB,CAAC,+BAQxF;AACD,wBAAgB,SAAS,CAAC,EACxB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,gBAAgB,CAAC,oBAAoB,CAAC,+BAMxC;AAOD,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,GAAG,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC;IAChC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AACD,wBAAgB,SAAS,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,EAClD,KAAK,EACL,KAAK,EACL,OAAO,EACP,UAAU,GACX,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;IACpB,OAAO,EAAE,SAAS,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,+BAiJA"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useId, } from 'react';
|
|
3
|
+
import { columnVisibilityFeature, createSortedRowModel, rowSortingFeature, sortFn_alphanumeric, tableFeatures, useTable, } from '@tanstack/react-table';
|
|
4
|
+
import { cn } from '../../lib/utils.js';
|
|
5
|
+
export function Table({ className, label, controls, ...props }) {
|
|
6
|
+
const hint = useId();
|
|
7
|
+
return (_jsxs("div", { className: label ? 'table-container' : 'relative w-full overflow-auto', children: [controls, label ? (_jsx("p", { id: hint, className: "table-hint", children: "Scroll horizontally for more columns. On small screens, each row shows labelled values." })) : null, _jsx("div", { role: label ? 'region' : undefined, "aria-label": label, "aria-describedby": label ? hint : undefined, tabIndex: label ? 0 : undefined, className: label ? 'table-scroll' : undefined, children: _jsx("table", { className: cn('w-full caption-bottom text-sm', label && 'responsive-table', className), ...props }) })] }));
|
|
8
|
+
}
|
|
9
|
+
export function TableHeader({ className, ...props }) {
|
|
10
|
+
return _jsx("thead", { className: cn('[&_tr]:border-b', className), ...props });
|
|
11
|
+
}
|
|
12
|
+
export function TableBody({ className, ...props }) {
|
|
13
|
+
return _jsx("tbody", { className: cn('[&_tr:last-child]:border-0', className), ...props });
|
|
14
|
+
}
|
|
15
|
+
export function TableRow({ className, ...props }) {
|
|
16
|
+
return (_jsx("tr", { className: cn('border-b border-neutral-200 hover:bg-neutral-50', className), ...props }));
|
|
17
|
+
}
|
|
18
|
+
export function TableHead({ className, ...props }) {
|
|
19
|
+
return (_jsx("th", { scope: "col", className: cn('h-10 px-3 text-left align-middle font-medium text-neutral-600', className), ...props }));
|
|
20
|
+
}
|
|
21
|
+
export function TableCell({ className, children, ...props }) {
|
|
22
|
+
return (_jsx("td", { className: cn('p-3 align-middle', className), ...props, children: _jsx("div", { className: "cell-value", children: children }) }));
|
|
23
|
+
}
|
|
24
|
+
const features = tableFeatures({
|
|
25
|
+
columnVisibilityFeature,
|
|
26
|
+
rowSortingFeature,
|
|
27
|
+
sortedRowModel: createSortedRowModel(),
|
|
28
|
+
sortFns: { alphanumeric: sortFn_alphanumeric },
|
|
29
|
+
});
|
|
30
|
+
export function DataTable({ label, items, columns, selectedId, }) {
|
|
31
|
+
const table = useTable({
|
|
32
|
+
features,
|
|
33
|
+
data: items,
|
|
34
|
+
getRowId: (item) => item.id,
|
|
35
|
+
columns: columns.map((column) => ({
|
|
36
|
+
id: column.key,
|
|
37
|
+
accessorFn: column.value,
|
|
38
|
+
sortFn: 'alphanumeric',
|
|
39
|
+
enableSorting: column.sortable !== false,
|
|
40
|
+
})),
|
|
41
|
+
});
|
|
42
|
+
return (_jsxs("div", { className: "list-card", children: [_jsxs("details", { className: "column-options", children: [_jsx("summary", { children: "Columns \u00B7 Sort this page" }), _jsx("div", { className: "flex flex-wrap gap-3 p-3", children: table
|
|
43
|
+
.getAllLeafColumns()
|
|
44
|
+
.slice(1)
|
|
45
|
+
.map((column, index) => (_jsxs("label", { className: "inline-flex items-center gap-2", children: [columns[index + 1]?.label, _jsxs("select", { "aria-label": `${columns[index + 1]?.label} visibility`, value: table.state.columnVisibility[column.id] === true
|
|
46
|
+
? 'show'
|
|
47
|
+
: table.state.columnVisibility[column.id] === false
|
|
48
|
+
? 'hide'
|
|
49
|
+
: 'auto', onChange: (event) => {
|
|
50
|
+
const value = event.target.value;
|
|
51
|
+
table.setColumnVisibility((current) => {
|
|
52
|
+
const next = { ...current };
|
|
53
|
+
if (value === 'auto')
|
|
54
|
+
delete next[column.id];
|
|
55
|
+
else
|
|
56
|
+
next[column.id] = value === 'show';
|
|
57
|
+
return next;
|
|
58
|
+
});
|
|
59
|
+
}, children: [_jsx("option", { value: "auto", children: "Automatic" }), _jsx("option", { value: "show", children: "Show" }), _jsx("option", { value: "hide", children: "Hide" })] })] }, column.id))) })] }), _jsxs(Table, { label: label, controls: _jsxs("label", { className: "card-sort", children: ["Sort this page", _jsxs("select", { "aria-label": `Sort ${label} on this page`, value: table.state.sorting[0]
|
|
60
|
+
? `${table.state.sorting[0].id}:${table.state.sorting[0].desc ? 'desc' : 'asc'}`
|
|
61
|
+
: '', onChange: (event) => {
|
|
62
|
+
const [id, direction] = event.target.value.split(':');
|
|
63
|
+
table.setSorting(id ? [{ id, desc: direction === 'desc' }] : []);
|
|
64
|
+
}, children: [_jsx("option", { value: "", children: "Original order" }), columns
|
|
65
|
+
.filter((column) => column.sortable !== false)
|
|
66
|
+
.map((column) => (_jsxs("optgroup", { label: column.label, children: [_jsxs("option", { value: `${column.key}:asc`, children: [column.label, " \u2191"] }), _jsxs("option", { value: `${column.key}:desc`, children: [column.label, " \u2193"] })] }, column.key)))] })] }), children: [_jsx("caption", { className: "sr-only", children: label }), _jsx(TableHeader, { children: _jsx(TableRow, { children: table.getHeaderGroups()[0]?.headers.map((header) => {
|
|
67
|
+
const column = columns.find((entry) => entry.key === header.column.id);
|
|
68
|
+
const sorted = header.column.getIsSorted();
|
|
69
|
+
return (_jsx(TableHead, { className: column.priority ? `priority-${column.priority}` : undefined, "data-visibility": table.state.columnVisibility[column.key] === true ? 'visible' : undefined, "aria-sort": column.sortable === false
|
|
70
|
+
? undefined
|
|
71
|
+
: sorted === 'asc'
|
|
72
|
+
? 'ascending'
|
|
73
|
+
: sorted === 'desc'
|
|
74
|
+
? 'descending'
|
|
75
|
+
: 'none', children: column.sortable === false ? (column.label) : (_jsxs("button", { type: "button", onClick: header.column.getToggleSortingHandler(), children: [column.label, ' ', _jsx("span", { "aria-hidden": "true", children: sorted === 'asc' ? '↑' : sorted === 'desc' ? '↓' : '↕' })] })) }, header.id));
|
|
76
|
+
}) }) }), _jsx(TableBody, { children: table.getRowModel().rows.map((row) => (_jsx(TableRow, { "aria-selected": selectedId ? selectedId === row.original.id : undefined, children: row.getVisibleCells().map((cell) => {
|
|
77
|
+
const column = columns.find((entry) => entry.key === cell.column.id);
|
|
78
|
+
return (_jsx(TableCell, { "data-label": column.label, "data-visibility": table.state.columnVisibility[column.key] === true ? 'visible' : undefined, className: column.priority ? `priority-${column.priority}` : undefined, children: column.render ? column.render(row.original) : column.value(row.original) }, cell.id));
|
|
79
|
+
}) }, row.id))) })] })] }));
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/components/ui/table.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as TabsPrimitive from '@radix-ui/react-tabs';
|
|
2
|
+
import type { ComponentProps } from 'react';
|
|
3
|
+
export declare const Tabs: import("react").ForwardRefExoticComponent<TabsPrimitive.TabsProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
4
|
+
export declare function TabsList({ className, ...props }: ComponentProps<typeof TabsPrimitive.List>): import("react").JSX.Element;
|
|
5
|
+
export declare function TabsTrigger({ className, ...props }: ComponentProps<typeof TabsPrimitive.Trigger>): import("react").JSX.Element;
|
|
6
|
+
export declare function TabsContent({ className, ...props }: ComponentProps<typeof TabsPrimitive.Content>): import("react").JSX.Element;
|
|
7
|
+
//# sourceMappingURL=tabs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../../src/components/ui/tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAG5C,eAAO,MAAM,IAAI,oHAAqB,CAAC;AAEvC,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,OAAO,aAAa,CAAC,IAAI,CAAC,+BAU1F;AAED,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,OAAO,aAAa,CAAC,OAAO,CAAC,+BAUhG;AAED,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,OAAO,aAAa,CAAC,OAAO,CAAC,+BAUhG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as TabsPrimitive from '@radix-ui/react-tabs';
|
|
3
|
+
import { cn } from '../../lib/utils.js';
|
|
4
|
+
export const Tabs = TabsPrimitive.Root;
|
|
5
|
+
export function TabsList({ className, ...props }) {
|
|
6
|
+
return (_jsx(TabsPrimitive.List, { className: cn('inline-flex h-9 items-center justify-center rounded-lg bg-neutral-100 p-1 text-neutral-600', className), ...props }));
|
|
7
|
+
}
|
|
8
|
+
export function TabsTrigger({ className, ...props }) {
|
|
9
|
+
return (_jsx(TabsPrimitive.Trigger, { className: cn('inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-600 disabled:opacity-50 data-[state=active]:bg-white data-[state=active]:text-neutral-900 data-[state=active]:shadow', className), ...props }));
|
|
10
|
+
}
|
|
11
|
+
export function TabsContent({ className, ...props }) {
|
|
12
|
+
return (_jsx(TabsPrimitive.Content, { className: cn('mt-2 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-600', className), ...props }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabs.js","sourceRoot":"","sources":["../../../src/components/ui/tabs.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,aAAa,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AAExC,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;AAEvC,MAAM,UAAU,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA6C;IACzF,OAAO,CACL,KAAC,aAAa,CAAC,IAAI,IACjB,SAAS,EAAE,EAAE,CACX,4FAA4F,EAC5F,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAgD;IAC/F,OAAO,CACL,KAAC,aAAa,CAAC,OAAO,IACpB,SAAS,EAAE,EAAE,CACX,iSAAiS,EACjS,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAgD;IAC/F,OAAO,CACL,KAAC,aAAa,CAAC,OAAO,IACpB,SAAS,EAAE,EAAE,CACX,kFAAkF,EAClF,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textarea.d.ts","sourceRoot":"","sources":["../../../src/components/ui/textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,CAAC,UAAU,CAAC,+BAkB3E"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
export function Textarea({ onKeyDown, ...props }) {
|
|
3
|
+
return (_jsx("textarea", { ...props, onKeyDown: (event) => {
|
|
4
|
+
onKeyDown?.(event);
|
|
5
|
+
if (!event.defaultPrevented &&
|
|
6
|
+
!event.nativeEvent.isComposing &&
|
|
7
|
+
event.key === 'Enter' &&
|
|
8
|
+
(event.metaKey || event.ctrlKey)) {
|
|
9
|
+
event.preventDefault();
|
|
10
|
+
event.currentTarget.form?.requestSubmit();
|
|
11
|
+
}
|
|
12
|
+
} }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=textarea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"textarea.js","sourceRoot":"","sources":["../../../src/components/ui/textarea.tsx"],"names":[],"mappings":";AAEA,MAAM,UAAU,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAA8B;IAC1E,OAAO,CACL,sBACM,KAAK,EACT,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACnB,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC;YACnB,IACE,CAAC,KAAK,CAAC,gBAAgB;gBACvB,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW;gBAC9B,KAAK,CAAC,GAAG,KAAK,OAAO;gBACrB,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,EAChC,CAAC;gBACD,KAAK,CAAC,cAAc,EAAE,CAAC;gBACvB,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,EAAE,CAAC;YAC5C,CAAC;QACH,CAAC,GACD,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../../src/components/ui/time.tsx"],"names":[],"mappings":"AAOA,wBAAgB,IAAI,CAAC,EAAE,KAAK,EAAE,QAAc,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,+BAQ1F"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
const formatter = new Intl.DateTimeFormat(undefined, {
|
|
3
|
+
year: 'numeric',
|
|
4
|
+
month: 'short',
|
|
5
|
+
day: 'numeric',
|
|
6
|
+
hour: '2-digit',
|
|
7
|
+
minute: '2-digit',
|
|
8
|
+
});
|
|
9
|
+
export function Time({ value, fallback = '—' }) {
|
|
10
|
+
if (value === null || !Number.isFinite(Date.parse(value)))
|
|
11
|
+
return _jsx("span", { className: "text-neutral-600", children: fallback });
|
|
12
|
+
return (_jsx("time", { dateTime: value, title: value, className: "whitespace-nowrap tabular-nums", children: formatter.format(new Date(value)) }));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=time.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.js","sourceRoot":"","sources":["../../../src/components/ui/time.tsx"],"names":[],"mappings":";AAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE;IACnD,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;CAClB,CAAC,CAAC;AACH,MAAM,UAAU,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,GAAG,GAAG,EAA+C;IACzF,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvD,OAAO,eAAM,SAAS,EAAC,kBAAkB,YAAE,QAAQ,GAAQ,CAAC;IAC9D,OAAO,CACL,eAAM,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAC,gCAAgC,YAC5E,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAC7B,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export interface FilterChip {
|
|
3
|
+
label: string;
|
|
4
|
+
value: string;
|
|
5
|
+
onRemove: () => void;
|
|
6
|
+
}
|
|
7
|
+
export declare function FilterToolbar({ children, chips, }: {
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
chips?: readonly FilterChip[];
|
|
10
|
+
}): import("react").JSX.Element;
|
|
11
|
+
export declare function LoadedListFilters<K extends string>({ values, fields, onChange, }: {
|
|
12
|
+
values: Record<K, string>;
|
|
13
|
+
fields: readonly {
|
|
14
|
+
key: K;
|
|
15
|
+
label: string;
|
|
16
|
+
options?: readonly string[];
|
|
17
|
+
}[];
|
|
18
|
+
onChange: (values: Record<K, string>) => void;
|
|
19
|
+
}): import("react").JSX.Element;
|
|
20
|
+
//# sourceMappingURL=toolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/toolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAK5D,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AACD,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,KAAU,GACX,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;CAC/B,+BA+CA;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,EAClD,MAAM,EACN,MAAM,EACN,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1B,MAAM,EAAE,SAAS;QAAE,GAAG,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IAC1E,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;CAC/C,+BAwDA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { Button } from './button.js';
|
|
4
|
+
import { Input } from './input.js';
|
|
5
|
+
import { Label } from './label.js';
|
|
6
|
+
import { Select } from './select.js';
|
|
7
|
+
export function FilterToolbar({ children, chips = [], }) {
|
|
8
|
+
const [open, setOpen] = useState(() => typeof window === 'undefined' || !window.matchMedia
|
|
9
|
+
? true
|
|
10
|
+
: window.matchMedia('(min-width: 768px)').matches);
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
const media = window.matchMedia('(min-width: 768px)');
|
|
13
|
+
const change = () => setOpen(media.matches);
|
|
14
|
+
change();
|
|
15
|
+
media.addEventListener('change', change);
|
|
16
|
+
return () => media.removeEventListener('change', change);
|
|
17
|
+
}, []);
|
|
18
|
+
return (_jsxs("div", { className: "my-4", children: [_jsxs("details", { open: open, onToggle: (event) => setOpen(event.currentTarget.open), className: "filter-toolbar", children: [_jsxs("summary", { className: "w-full cursor-pointer p-3 text-left font-medium md:hidden", children: ["Filters", chips.length ? ` (${chips.length})` : '', " ", _jsx("span", { "aria-hidden": "true", children: "\u2304" })] }), _jsx("div", { "data-panel": true, children: children })] }), chips.length ? (_jsx("div", { "aria-label": "Active filters", className: "mt-2 flex flex-wrap gap-2", children: chips.map((chip) => (_jsxs("span", { className: "filter-chip", children: [_jsxs("span", { className: "min-w-0 break-all", children: [chip.label, ": ", chip.value] }), _jsx(Button, { variant: "ghost", size: "sm", type: "button", "aria-label": `Remove ${chip.label} filter`, onClick: chip.onRemove, children: "\u00D7" })] }, chip.label))) })) : null] }));
|
|
19
|
+
}
|
|
20
|
+
export function LoadedListFilters({ values, fields, onChange, }) {
|
|
21
|
+
return (_jsx(FilterToolbar, { chips: fields
|
|
22
|
+
.filter(({ key }) => values[key])
|
|
23
|
+
.map(({ key, label }) => ({
|
|
24
|
+
label,
|
|
25
|
+
value: values[key],
|
|
26
|
+
onRemove: () => onChange({ ...values, [key]: '' }),
|
|
27
|
+
})), children: _jsxs("form", { className: "my-4", onSubmit: (event) => {
|
|
28
|
+
event.preventDefault();
|
|
29
|
+
const data = new FormData(event.currentTarget);
|
|
30
|
+
const next = { ...values };
|
|
31
|
+
for (const { key } of fields)
|
|
32
|
+
next[key] = String(data.get(key) ?? '');
|
|
33
|
+
onChange(next);
|
|
34
|
+
}, children: [fields.map(({ key, label, options }) => (_jsx("div", { children: _jsxs(Label, { className: "grid gap-1", children: [label, options ? (_jsxs(Select, { name: key, defaultValue: values[key], children: [_jsx("option", { value: "", children: "All" }), options.map((value) => (_jsx("option", { value: value, children: value }, value)))] })) : (_jsx(Input, { type: "search", name: key, defaultValue: values[key] }))] }) }, `${key}:${values[key]}`))), _jsx(Button, { type: "submit", children: "Apply filters" }), _jsx(Button, { type: "button", variant: "outline", onClick: (event) => {
|
|
35
|
+
event.currentTarget.form?.reset();
|
|
36
|
+
const next = { ...values };
|
|
37
|
+
for (const { key } of fields)
|
|
38
|
+
next[key] = '';
|
|
39
|
+
onChange(next);
|
|
40
|
+
}, children: "Clear filters" })] }) }));
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=toolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../../../src/components/ui/toolbar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { operations } from '../api-types.js';
|
|
2
|
+
type Assessment = operations['listPackageVersions']['responses'][200]['content']['application/json']['items'][number]['vulnerability'];
|
|
3
|
+
export declare function VulnerabilityStatus({ assessment, sourceType, }: {
|
|
4
|
+
assessment: Assessment;
|
|
5
|
+
sourceType: string;
|
|
6
|
+
}): import("react").JSX.Element;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=vulnerability-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vulnerability-status.d.ts","sourceRoot":"","sources":["../../src/components/vulnerability-status.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIlD,KAAK,UAAU,GACb,UAAU,CAAC,qBAAqB,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC;AAwBvH,wBAAgB,mBAAmB,CAAC,EAClC,UAAU,EACV,UAAU,GACX,EAAE;IACD,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB,+BA+FA"}
|