@cryptlex/web-components 1.3.3 → 1.3.5
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/components/data-table/column-picker.es.js +15 -17
- package/dist/components/data-table/column-picker.es.js.map +1 -1
- package/dist/components/data-table/data-table.es.js +60 -57
- package/dist/components/data-table/data-table.es.js.map +1 -1
- package/dist/components/data-table/table-actions.es.js +19 -23
- package/dist/components/data-table/table-actions.es.js.map +1 -1
- package/dist/components/data-table/table-commons.es.js +21 -24
- package/dist/components/data-table/table-commons.es.js.map +1 -1
- package/dist/components/data-table/table-content.es.js +21 -17
- package/dist/components/data-table/table-content.es.js.map +1 -1
- package/dist/components/data-table/table-utils/createTableFetchFn.es.js +8 -9
- package/dist/components/data-table/table-utils/createTableFetchFn.es.js.map +1 -1
- package/dist/components/data-table/table-utils/types.es.js.map +1 -1
- package/dist/components/key-value-card/key-value-card.es.js +85 -0
- package/dist/components/key-value-card/key-value-card.es.js.map +1 -0
- package/dist/components/sidebar/app-layout.es.js +14 -27
- package/dist/components/sidebar/app-layout.es.js.map +1 -1
- package/dist/components/sidebar/nav-main.es.js +44 -42
- package/dist/components/sidebar/nav-main.es.js.map +1 -1
- package/dist/components/static-data-table/data-table.es.js +6 -6
- package/dist/components/static-data-table/data-table.es.js.map +1 -1
- package/dist/components/ui/avatar.es.js +12 -14
- package/dist/components/ui/avatar.es.js.map +1 -1
- package/dist/components/ui/button.es.js +11 -10
- package/dist/components/ui/button.es.js.map +1 -1
- package/dist/components/ui/chart.es.js +48 -59
- package/dist/components/ui/chart.es.js.map +1 -1
- package/dist/components/ui/collapsible.es.js +1 -0
- package/dist/components/ui/collapsible.es.js.map +1 -1
- package/dist/components/ui/copy-button.es.js +72 -0
- package/dist/components/ui/copy-button.es.js.map +1 -0
- package/dist/components/ui/dialog.es.js +23 -22
- package/dist/components/ui/dialog.es.js.map +1 -1
- package/dist/components/ui/drawer.es.js +21 -57
- package/dist/components/ui/drawer.es.js.map +1 -1
- package/dist/components/ui/form.es.js +28 -29
- package/dist/components/ui/form.es.js.map +1 -1
- package/dist/components/ui/link-button.es.js +22 -0
- package/dist/components/ui/link-button.es.js.map +1 -0
- package/dist/components/ui/mutli-select.es.js +15 -15
- package/dist/components/ui/mutli-select.es.js.map +1 -1
- package/dist/components/ui/pagination.es.js +20 -20
- package/dist/components/ui/password-input.es.js +9 -8
- package/dist/components/ui/password-input.es.js.map +1 -1
- package/dist/components/ui/search-input.es.js +5 -4
- package/dist/components/ui/search-input.es.js.map +1 -1
- package/dist/components/ui/select.es.js +17 -22
- package/dist/components/ui/select.es.js.map +1 -1
- package/dist/components/ui/separator.es.js +17 -18
- package/dist/components/ui/separator.es.js.map +1 -1
- package/dist/components/ui/sheet.es.js +1 -0
- package/dist/components/ui/sheet.es.js.map +1 -1
- package/dist/components/ui/sonner.es.js +3 -2
- package/dist/components/ui/sonner.es.js.map +1 -1
- package/dist/components/ui/table.es.js +19 -19
- package/dist/components/ui/table.es.js.map +1 -1
- package/dist/components/ui/tooltip.es.js +9 -8
- package/dist/components/ui/tooltip.es.js.map +1 -1
- package/dist/index.es.d.ts +55 -82
- package/dist/index.es.js +215 -220
- package/dist/utils/index.es.js +19 -14
- package/dist/utils/index.es.js.map +1 -1
- package/package.json +10 -6
- package/tailwind.preset.ts +55 -47
- package/dist/components/data-table/table-utils/fetch.es.js +0 -40
- package/dist/components/data-table/table-utils/fetch.es.js.map +0 -1
- package/dist/components/info-card/info-card.es.js +0 -74
- package/dist/components/info-card/info-card.es.js.map +0 -1
- package/dist/components/ui/dynamic-input.es.js +0 -141
- package/dist/components/ui/dynamic-input.es.js.map +0 -1
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { Table as
|
|
3
|
-
import { flexRender as
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
columns:
|
|
1
|
+
import { jsxs as a, jsx as e, Fragment as m } from "react/jsx-runtime";
|
|
2
|
+
import { Table as g, TableHeader as p, TableRow as c, TableCell as s, TableBody as h, TableFooter as u } from "../ui/table.es.js";
|
|
3
|
+
import { flexRender as d } from "@tanstack/react-table";
|
|
4
|
+
import { Info as f } from "lucide-react";
|
|
5
|
+
function y({
|
|
6
|
+
table: r,
|
|
7
|
+
columns: i,
|
|
8
|
+
dataQuery: o
|
|
8
9
|
}) {
|
|
9
|
-
return /* @__PURE__ */
|
|
10
|
-
/* @__PURE__ */ e(p, { className: "sticky top-0 z-10", children:
|
|
11
|
-
|
|
10
|
+
return /* @__PURE__ */ a(g, { className: "relative h-full w-full", children: [
|
|
11
|
+
/* @__PURE__ */ e(p, { className: "sticky top-0 z-10", children: r.getHeaderGroups().map((n, l) => /* @__PURE__ */ e(c, { className: "border-b", children: n.headers.map((t) => /* @__PURE__ */ a(
|
|
12
|
+
s,
|
|
12
13
|
{
|
|
13
14
|
className: `
|
|
14
15
|
px-4 py-2 text-left text-sm font-medium cursor-pointer whitespace-nowrap
|
|
@@ -17,7 +18,7 @@ function h({
|
|
|
17
18
|
`,
|
|
18
19
|
onClick: t.column.getToggleSortingHandler(),
|
|
19
20
|
children: [
|
|
20
|
-
t.isPlaceholder ? null :
|
|
21
|
+
t.isPlaceholder ? null : d(t.column.columnDef.header, t.getContext()),
|
|
21
22
|
{
|
|
22
23
|
asc: "↑",
|
|
23
24
|
desc: "↓"
|
|
@@ -26,21 +27,24 @@ function h({
|
|
|
26
27
|
},
|
|
27
28
|
t.id
|
|
28
29
|
)) }, l)) }),
|
|
29
|
-
/* @__PURE__ */ e(
|
|
30
|
-
|
|
30
|
+
/* @__PURE__ */ e(h, { className: "flex-1 overflow-y-auto", children: r.getRowModel().rows.length ? r.getRowModel().rows.map((n) => /* @__PURE__ */ e(c, { "data-state": n.getIsSelected() && "selected", children: n.getVisibleCells().map((l) => /* @__PURE__ */ e(
|
|
31
|
+
s,
|
|
31
32
|
{
|
|
32
33
|
className: `
|
|
33
34
|
px-4 py-2 text-left text-sm whitespace-nowrap
|
|
34
35
|
${l.column.id === "actions" ? "sticky right-0 bg-card text-center shadow-2xl" : ""}
|
|
35
36
|
`,
|
|
36
|
-
children:
|
|
37
|
+
children: d(l.column.columnDef.cell, l.getContext())
|
|
37
38
|
},
|
|
38
39
|
l.id
|
|
39
|
-
)) },
|
|
40
|
-
|
|
40
|
+
)) }, n.id)) : /* @__PURE__ */ e(c, { className: "h-[55vh] hover:bg-transparent cursor-not-allowed", children: !o.isFetching && o.isError ? /* @__PURE__ */ e(m, { children: /* @__PURE__ */ e(s, { colSpan: i.length, className: "border-none ", children: /* @__PURE__ */ a("span", { className: "flex gap-3 justify-center align-middle items-center ", children: [
|
|
41
|
+
/* @__PURE__ */ e(f, {}),
|
|
42
|
+
" You don't have the required permissions. Please contact your admin."
|
|
43
|
+
] }) }) }) : /* @__PURE__ */ e(s, { colSpan: i.length, children: /* @__PURE__ */ e("span", { className: "flex gap-3 justify-center align-middle items-center ", children: "No result found." }) }) }) }),
|
|
44
|
+
o.isFetching && /* @__PURE__ */ e(u, { className: "absolute inset-0 z-20 flex justify-center items-center bg-card/80" })
|
|
41
45
|
] });
|
|
42
46
|
}
|
|
43
47
|
export {
|
|
44
|
-
|
|
48
|
+
y as TableContent
|
|
45
49
|
};
|
|
46
50
|
//# sourceMappingURL=table-content.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-content.es.js","sources":["../../../lib/components/data-table/table-content.tsx"],"sourcesContent":["import {\n Table as CxTable,\n TableBody,\n TableCell,\n TableFooter,\n TableHeader,\n TableRow,\n} from '@/components/ui/table';\nimport { ColumnDef, Table, flexRender } from '@tanstack/react-table';\n\nexport function TableContent<TData, TValue>({\n table,\n
|
|
1
|
+
{"version":3,"file":"table-content.es.js","sources":["../../../lib/components/data-table/table-content.tsx"],"sourcesContent":["import {\n Table as CxTable,\n TableBody,\n TableCell,\n TableFooter,\n TableHeader,\n TableRow,\n} from '@/components/ui/table';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { ColumnDef, Table, flexRender } from '@tanstack/react-table';\nimport { Info } from 'lucide-react';\n\nexport function TableContent<TData, TValue>({\n table,\n columns,\n dataQuery,\n}: {\n table: Table<TData>;\n columns: ColumnDef<TData, TValue>[];\n dataQuery: UseQueryResult<any, unknown>;\n}) {\n return (\n <CxTable className=\"relative h-full w-full\">\n <TableHeader className=\"sticky top-0 z-10\">\n {table.getHeaderGroups().map((headerGroup, index) => (\n <TableRow key={index} className=\"border-b\">\n {headerGroup.headers.map((header) => (\n <TableCell\n key={header.id}\n className={`\n px-4 py-2 text-left text-sm font-medium cursor-pointer whitespace-nowrap \n bg-card \n ${header.id === 'actions' ? 'sticky right-0 z-50 bg-card' : ''}\n `}\n onClick={header.column.getToggleSortingHandler()}\n >\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n {{\n asc: '↑',\n desc: '↓',\n }[header.column.getIsSorted() as string] ?? null}\n </TableCell>\n ))}\n </TableRow>\n ))}\n </TableHeader>\n <TableBody className=\"flex-1 overflow-y-auto\">\n {table.getRowModel().rows.length ? (\n table.getRowModel().rows.map((row) => (\n <TableRow key={row.id} data-state={row.getIsSelected() && 'selected'}>\n {row.getVisibleCells().map((cell) => (\n <TableCell\n key={cell.id}\n className={`\n px-4 py-2 text-left text-sm whitespace-nowrap \n ${\n cell.column.id === 'actions'\n ? 'sticky right-0 bg-card text-center shadow-2xl'\n : ''\n }\n `}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </TableCell>\n ))}\n </TableRow>\n ))\n ) : (\n <TableRow className=\"h-[55vh] hover:bg-transparent cursor-not-allowed\">\n {!dataQuery.isFetching && dataQuery.isError ? (\n <>\n <TableCell colSpan={columns.length} className=\"border-none \">\n <span className=\"flex gap-3 justify-center align-middle items-center \">\n <Info /> You don't have the required permissions. Please contact your admin.\n </span>\n </TableCell>\n </>\n ) : (\n <TableCell colSpan={columns.length}>\n <span className=\"flex gap-3 justify-center align-middle items-center \">\n No result found.\n </span>\n </TableCell>\n )}\n </TableRow>\n )}\n </TableBody>\n {/* Loader positioned to cover entire table viewport */}\n {dataQuery.isFetching && (\n <TableFooter className=\"absolute inset-0 z-20 flex justify-center items-center bg-card/80\" />\n )}\n </CxTable>\n );\n}\n"],"names":["TableContent","table","columns","dataQuery","jsxs","CxTable","jsx","TableHeader","headerGroup","index","TableRow","header","TableCell","flexRender","TableBody","row","cell","Fragment","Info","TableFooter"],"mappings":";;;;AAYO,SAASA,EAA4B;AAAA,EAC1C,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AACF,GAIG;AAEC,SAAA,gBAAAC,EAACC,GAAQ,EAAA,WAAU,0BACjB,UAAA;AAAA,IAAA,gBAAAC,EAACC,KAAY,WAAU,qBACpB,YAAM,gBAAgB,EAAE,IAAI,CAACC,GAAaC,MACzC,gBAAAH,EAACI,KAAqB,WAAU,YAC7B,YAAY,QAAQ,IAAI,CAACC,MACxB,gBAAAP;AAAA,MAACQ;AAAA,MAAA;AAAA,QAEC,WAAW;AAAA;AAAA;AAAA,oBAGPD,EAAO,OAAO,YAAY,gCAAgC,EAAE;AAAA;AAAA,QAEhE,SAASA,EAAO,OAAO,wBAAwB;AAAA,QAE9C,UAAA;AAAA,UAAOA,EAAA,gBACJ,OACAE,EAAWF,EAAO,OAAO,UAAU,QAAQA,EAAO,YAAY;AAAA,UACjE;AAAA,YACC,KAAK;AAAA,YACL,MAAM;AAAA,UACN,EAAAA,EAAO,OAAO,YAAA,CAAuB,KAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAdvCA,EAAO;AAAA,IAAA,CAgBf,EAAA,GAnBYF,CAoBf,CACD,GACH;AAAA,IACC,gBAAAH,EAAAQ,GAAA,EAAU,WAAU,0BAClB,UAAMb,EAAA,YAAA,EAAc,KAAK,SACxBA,EAAM,YAAY,EAAE,KAAK,IAAI,CAACc,MAC3B,gBAAAT,EAAAI,GAAA,EAAsB,cAAYK,EAAI,cAAc,KAAK,YACvD,UAAAA,EAAI,gBAAgB,EAAE,IAAI,CAACC,MAC1B,gBAAAV;AAAA,MAACM;AAAA,MAAA;AAAA,QAEC,WAAW;AAAA;AAAA,sBAGPI,EAAK,OAAO,OAAO,YACf,kDACA,EACN;AAAA;AAAA,QAGD,YAAWA,EAAK,OAAO,UAAU,MAAMA,EAAK,WAAY,CAAA;AAAA,MAAA;AAAA,MAVpDA,EAAK;AAAA,IAAA,CAYb,EAfY,GAAAD,EAAI,EAgBnB,CACD,IAED,gBAAAT,EAACI,GAAS,EAAA,WAAU,oDACjB,UAAA,CAACP,EAAU,cAAcA,EAAU,UAClC,gBAAAG,EAAAW,GAAA,EACE,UAAC,gBAAAX,EAAAM,GAAA,EAAU,SAASV,EAAQ,QAAQ,WAAU,iBAC5C,UAAA,gBAAAE,EAAC,QAAK,EAAA,WAAU,yDACd,UAAA;AAAA,MAAA,gBAAAE,EAACY,GAAK,EAAA;AAAA,MAAE;AAAA,IAAA,GACV,EACF,CAAA,EAAA,CACF,IAEA,gBAAAZ,EAACM,KAAU,SAASV,EAAQ,QAC1B,UAAA,gBAAAI,EAAC,UAAK,WAAU,wDAAuD,UAEvE,oBAAA,EAAA,CACF,EAEJ,CAAA,GAEJ;AAAA,IAECH,EAAU,cACR,gBAAAG,EAAAa,GAAA,EAAY,WAAU,oEAAoE,CAAA;AAAA,EAAA,GAE/F;AAEJ;"}
|
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
import { merge as
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const r = {
|
|
1
|
+
import { merge as d } from "lodash-es";
|
|
2
|
+
function f(e, n, a) {
|
|
3
|
+
return async (t, o, u, s) => {
|
|
4
|
+
const c = {
|
|
6
5
|
params: {
|
|
7
6
|
query: {
|
|
8
7
|
page: t.pageIndex + 1,
|
|
9
8
|
limit: t.pageSize,
|
|
10
9
|
sort: p(o[0]),
|
|
11
|
-
query:
|
|
12
|
-
...
|
|
10
|
+
query: u,
|
|
11
|
+
...s
|
|
13
12
|
}
|
|
14
13
|
}
|
|
15
|
-
},
|
|
16
|
-
return
|
|
14
|
+
}, i = d(c, a);
|
|
15
|
+
return e.GET(n, i).then((r) => ({ total: parseInt(r.response.headers.get("Pagination-Count") || "0"), data: r.data }));
|
|
17
16
|
};
|
|
18
17
|
}
|
|
19
18
|
function p(e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTableFetchFn.es.js","sources":["../../../../lib/components/data-table/table-utils/createTableFetchFn.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"createTableFetchFn.es.js","sources":["../../../../lib/components/data-table/table-utils/createTableFetchFn.ts"],"sourcesContent":["import type { paths } from '@cryptlex/web-api-types';\nimport { merge } from 'lodash-es';\nimport createClient, { ParamsOption } from 'openapi-fetch';\nimport { type TableFetchFn } from './types';\n\ninterface Params {\n query: Record<string, string | number | boolean | Record<string, string | number | boolean>>;\n}\n\ntype Client = ReturnType<typeof createClient<paths>>;\n\n// Helper type to extract valid GET paths\ntype GetPaths = {\n [P in keyof paths]: paths[P] extends { get: any } ? P : never;\n}[keyof paths];\n\nexport function createTableFetchFn<_any, Return>(\n ctxclient: Client,\n path: GetPaths,\n // TODO: Use generic type instead\n params?: ParamsOption<any>,\n): TableFetchFn<Return> {\n return async (pagination, sorting, searching, filtering) => {\n const ab: { params: Params } = {\n params: {\n query: {\n page: pagination.pageIndex + 1,\n limit: pagination.pageSize,\n sort: generateSortParam(sorting[0]),\n query: searching,\n ...filtering,\n },\n },\n };\n\n const pathParams = merge(ab, params) as { params: Params };\n\n return ctxclient.GET(path, pathParams).then((value) => {\n const rowCount = parseInt(value.response.headers.get('Pagination-Count') || '0');\n return { total: rowCount, data: value.data };\n });\n };\n}\n\nfunction generateSortParam(sort: { id: string; desc: boolean } | undefined): string {\n if (sort) {\n if (sort.desc) {\n return `-${sort.id}`;\n } else {\n return `+${sort.id}`;\n }\n } else {\n return '-createdAt';\n }\n}\n"],"names":["createTableFetchFn","ctxclient","path","params","pagination","sorting","searching","filtering","ab","generateSortParam","pathParams","merge","value","sort"],"mappings":";AAgBgB,SAAAA,EACdC,GACAC,GAEAC,GACsB;AACtB,SAAO,OAAOC,GAAYC,GAASC,GAAWC,MAAc;AAC1D,UAAMC,IAAyB;AAAA,MAC7B,QAAQ;AAAA,QACN,OAAO;AAAA,UACL,MAAMJ,EAAW,YAAY;AAAA,UAC7B,OAAOA,EAAW;AAAA,UAClB,MAAMK,EAAkBJ,EAAQ,CAAC,CAAC;AAAA,UAClC,OAAOC;AAAA,UACP,GAAGC;AAAA,QAAA;AAAA,MACL;AAAA,IAEJ,GAEMG,IAAaC,EAAMH,GAAIL,CAAM;AAEnC,WAAOF,EAAU,IAAIC,GAAMQ,CAAU,EAAE,KAAK,CAACE,OAEpC,EAAE,OADQ,SAASA,EAAM,SAAS,QAAQ,IAAI,kBAAkB,KAAK,GAAG,GACrD,MAAMA,EAAM,KAAK,EAC5C;AAAA,EACH;AACF;AAEA,SAASH,EAAkBI,GAAyD;AAClF,SAAIA,IACEA,EAAK,OACA,IAAIA,EAAK,EAAE,KAEX,IAAIA,EAAK,EAAE,KAGb;AAEX;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.es.js","sources":["../../../../lib/components/data-table/table-utils/types.ts"],"sourcesContent":["import { components } from '@cryptlex/web-api-types';\nimport { PaginationState, SortingState } from '@tanstack/react-table';\n// export type RoutePath = RoutePaths<typeof routeTree>;\nexport type fieldsToDisplay = {\n display: string;\n accessor: string;\n};\n[];\nexport enum DYNAMIC_INPUT_TARGET {\n USER,\n ORGANIZATION,\n RESELLER,\n}\nexport type VisibilityState<T> = {\n [K in keyof T]?: boolean;\n};\nexport type TableActions = {\n /** True if reading this resource is allowed. */\n read: boolean;\n\n /** True if creation of resource from dashboard is allowed. */\n create: boolean;\n\n /** True if the resource can be updated */\n update: boolean;\n\n /** True if the resource can be deleted */\n delete: boolean;\n\n /** True if the resource can be exported */\n export: boolean;\n\n /** True if the resource can be linked to tags. */\n tag: boolean;\n\n /** True if searching is supported. Search is defined by the `query` QueryParameter in the Web API */\n search: boolean;\n\n /** True if selection using checkboxes is allowed */\n selection: boolean;\n\n /** True if the resource has support for segments */\n segments: boolean;\n};\n\nexport type
|
|
1
|
+
{"version":3,"file":"types.es.js","sources":["../../../../lib/components/data-table/table-utils/types.ts"],"sourcesContent":["import { components } from '@cryptlex/web-api-types';\nimport { PaginationState, SortingState } from '@tanstack/react-table';\n// export type RoutePath = RoutePaths<typeof routeTree>;\nexport type fieldsToDisplay = {\n display: string;\n accessor: string;\n};\n[];\nexport enum DYNAMIC_INPUT_TARGET {\n USER,\n ORGANIZATION,\n RESELLER,\n}\nexport type VisibilityState<T> = {\n [K in keyof T]?: boolean;\n};\nexport type TableActions = {\n /** True if reading this resource is allowed. */\n read: boolean;\n\n /** True if creation of resource from dashboard is allowed. */\n create: boolean;\n\n /** True if the resource can be updated */\n update: boolean;\n\n /** True if the resource can be deleted */\n delete: boolean;\n\n /** True if the resource can be exported */\n export: boolean;\n\n /** True if the resource can be linked to tags. */\n tag: boolean;\n\n /** True if searching is supported. Search is defined by the `query` QueryParameter in the Web API */\n search: boolean;\n\n /** True if selection using checkboxes is allowed */\n selection: boolean;\n\n /** True if the resource has support for segments */\n segments: boolean;\n};\n\nexport type MetadataDto = components['schemas']['MetadataDto'];\n\nexport type TableFetchFn<TData> = (\n p: PaginationState,\n s: SortingState,\n q: string,\n f: any,\n) => Promise<{\n total: number;\n data: TData[] | undefined;\n}>;\n/*** Type for hide some of the columns based on the dto of the particular page\n ** `id`, `updatedAt` are by default hidden\n */\nexport type DefaultVisibilityState<T> = {\n [K in keyof T]?: boolean;\n};\n"],"names":["DYNAMIC_INPUT_TARGET","DYNAMIC_INPUT_TARGET2"],"mappings":"AAQY,IAAAA,sBAAAA,OACVA,EAAAC,EAAA,OAAA,CAAA,IAAA,QACAD,EAAAC,EAAA,eAAA,CAAA,IAAA,gBACAD,EAAAC,EAAA,WAAA,CAAA,IAAA,YAHUD,IAAAA,KAAA,CAAA,CAAA;"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { jsxs as m, jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { Badge as c } from "../ui/badge.es.js";
|
|
3
|
+
import "../ui/accordion.es.js";
|
|
4
|
+
import "../ui/avatar.es.js";
|
|
5
|
+
import "../ui/breadcrumb.es.js";
|
|
6
|
+
import "../ui/button.es.js";
|
|
7
|
+
import "../ui/calendar.es.js";
|
|
8
|
+
import { Card as l, CardHeader as d, CardTitle as f, CardContent as h } from "../ui/card.es.js";
|
|
9
|
+
import "../ui/chart.es.js";
|
|
10
|
+
import "../ui/checkbox.es.js";
|
|
11
|
+
import "@radix-ui/react-collapsible";
|
|
12
|
+
import "../ui/command.es.js";
|
|
13
|
+
import { CopyButton as u } from "../ui/copy-button.es.js";
|
|
14
|
+
import "../ui/dialog.es.js";
|
|
15
|
+
import "../ui/drawer.es.js";
|
|
16
|
+
import "../ui/dropdown-menu.es.js";
|
|
17
|
+
import "../ui/form.es.js";
|
|
18
|
+
import "../ui/input.es.js";
|
|
19
|
+
import "../ui/input-otp.es.js";
|
|
20
|
+
import "../ui/label.es.js";
|
|
21
|
+
import { Link as x } from "@tanstack/react-router";
|
|
22
|
+
import "lucide-react";
|
|
23
|
+
import "../ui/mutli-select.es.js";
|
|
24
|
+
import "../ui/navigation-menu.es.js";
|
|
25
|
+
import "../ui/pagination.es.js";
|
|
26
|
+
import "../ui/password-input.es.js";
|
|
27
|
+
import "../ui/popover.es.js";
|
|
28
|
+
import "../ui/radio-group.es.js";
|
|
29
|
+
import "react";
|
|
30
|
+
import "../ui/select.es.js";
|
|
31
|
+
import "../ui/separator.es.js";
|
|
32
|
+
import "../ui/sheet.es.js";
|
|
33
|
+
import "../ui/sidebar.es.js";
|
|
34
|
+
import { Skeleton as y } from "../ui/skeleton.es.js";
|
|
35
|
+
import "sonner";
|
|
36
|
+
import "../ui/table.es.js";
|
|
37
|
+
import "../ui/tabs.es.js";
|
|
38
|
+
import "../ui/tooltip.es.js";
|
|
39
|
+
import { FormatDate as w } from "../data-table/table-utils/date.es.js";
|
|
40
|
+
const ir = ({ data: e, label: s, fields: n }) => {
|
|
41
|
+
const a = (p, r) => {
|
|
42
|
+
if (p.transform)
|
|
43
|
+
return p.transform(r);
|
|
44
|
+
switch (p.type) {
|
|
45
|
+
case "link":
|
|
46
|
+
return /* @__PURE__ */ t(x, { to: r, children: r });
|
|
47
|
+
case "copyButton":
|
|
48
|
+
return /* @__PURE__ */ t(u, { value: r });
|
|
49
|
+
case "date":
|
|
50
|
+
return /* @__PURE__ */ t("span", { children: w(r) });
|
|
51
|
+
case "yesno":
|
|
52
|
+
return /* @__PURE__ */ t("span", { children: r ? "Yes" : "No" });
|
|
53
|
+
case "badge":
|
|
54
|
+
return /* @__PURE__ */ t("div", { className: "flex flex-wrap gap-1", children: Array.isArray(r) ? r.map((o, i) => /* @__PURE__ */ t(c, { variant: "secondary", children: typeof o == "object" ? (o == null ? void 0 : o.name) || (o == null ? void 0 : o.id) : o }, i)) : r });
|
|
55
|
+
case "boolean":
|
|
56
|
+
return /* @__PURE__ */ t("span", { children: r.toString() });
|
|
57
|
+
default:
|
|
58
|
+
return /* @__PURE__ */ t("span", { children: r ?? "-" });
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
return /* @__PURE__ */ m(l, { children: [
|
|
62
|
+
/* @__PURE__ */ t(d, { children: /* @__PURE__ */ t(f, { children: s }) }),
|
|
63
|
+
/* @__PURE__ */ t(h, { children: /* @__PURE__ */ t("div", { className: "flex flex-col gap-2", children: e ? n.map((p) => {
|
|
64
|
+
const r = p.accessor ? p.accessor.split(".").reduce(
|
|
65
|
+
(o, i) => o && i in o ? o[i] : void 0,
|
|
66
|
+
e
|
|
67
|
+
) : null;
|
|
68
|
+
return /* @__PURE__ */ m(
|
|
69
|
+
"div",
|
|
70
|
+
{
|
|
71
|
+
className: "flex w-full flex-col md:flex-row justify-between first:pt-0 last:pb-0",
|
|
72
|
+
children: [
|
|
73
|
+
/* @__PURE__ */ t("p", { className: "text-sm flex w-full justify-start col-span-1", children: p.display }),
|
|
74
|
+
/* @__PURE__ */ t("div", { className: "text-sm flex w-full justify-start text-wrap", children: a(p, r) })
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
p.display
|
|
78
|
+
);
|
|
79
|
+
}) : n.map((p, r) => /* @__PURE__ */ t(y, { className: "h-12 w-full" }, r)) }) })
|
|
80
|
+
] });
|
|
81
|
+
};
|
|
82
|
+
export {
|
|
83
|
+
ir as KeyValueCard
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=key-value-card.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-value-card.es.js","sources":["../../../lib/components/key-value-card/key-value-card.tsx"],"sourcesContent":["import { Badge } from '@/components/ui/badge';\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n CopyButton,\n FormatDate,\n Skeleton,\n} from '@/index';\nimport { Link } from '@tanstack/react-router';\n\n// Utility type to handle nested keys (dot notation) in any object\ntype NestedKeyOf<T> = T extends object\n ? {\n [K in keyof T]: K extends string | number\n ? `${K & string}` | `${K & string}.${NestedKeyOf<T[K]>}`\n : never;\n }[keyof T]\n : never;\n\n// DisplayField type that works with nested keys\nexport type DisplayField<T> = {\n display: string;\n accessor: NestedKeyOf<T>;\n type?: 'text' | 'badge' | 'boolean' | 'date' | 'yesno' | 'copyButton' | 'link'; // Field types\n transform?: (value: any) => React.ReactNode;\n};\n\nexport interface KeyValueCardProps<T> {\n data: T; // Ensure data is of type T\n label: string;\n fields: DisplayField<T>[];\n className?: string;\n}\n\nexport const KeyValueCard = <T extends {}>({ data, label, fields }: KeyValueCardProps<T>) => {\n const renderValue = (field: DisplayField<T>, value: any) => {\n if (field.transform) {\n return field.transform(value);\n }\n switch (field.type) {\n case 'link':\n return <Link to={value}>{value}</Link>;\n case 'copyButton':\n return <CopyButton value={value} />;\n case 'date':\n return <span>{FormatDate(value)}</span>;\n case 'yesno':\n return <span>{value ? 'Yes' : 'No'}</span>;\n case 'badge':\n return (\n <div className=\"flex flex-wrap gap-1\">\n {Array.isArray(value)\n ? value.map((item, index) => (\n <Badge key={index} variant=\"secondary\">\n {typeof item === 'object' ? item?.name || item?.id : item}\n </Badge>\n ))\n : value}\n </div>\n );\n\n case 'boolean':\n return <span>{value.toString()}</span>;\n default:\n return <span>{value ?? '-'}</span>;\n }\n };\n\n return (\n <Card>\n <CardHeader>\n <CardTitle>{label}</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"flex flex-col gap-2\">\n {data\n ? fields.map((field) => {\n // TODO: improve this\n const value = field.accessor\n ? field.accessor\n .split('.')\n .reduce(\n (obj, key) => (obj && key in obj ? obj[key] : undefined),\n data as Record<string, any>,\n )\n : null;\n\n return (\n <div\n key={field.display}\n className=\"flex w-full flex-col md:flex-row justify-between first:pt-0 last:pb-0\"\n >\n <p className=\"text-sm flex w-full justify-start col-span-1\">{field.display}</p>\n <div className=\"text-sm flex w-full justify-start text-wrap\">\n {renderValue(field, value)}\n </div>\n </div>\n );\n })\n : fields.map((_, index) => <Skeleton key={index} className=\"h-12 w-full\" />)}\n </div>\n </CardContent>\n </Card>\n );\n};"],"names":["KeyValueCard","data","label","fields","renderValue","field","value","jsx","Link","CopyButton","FormatDate","item","index","Badge","Card","CardHeader","CardTitle","CardContent","obj","key","jsxs","_","Skeleton"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCO,MAAMA,KAAe,CAAe,EAAE,MAAAC,GAAM,OAAAC,GAAO,QAAAC,QAAmC;AACrF,QAAAC,IAAc,CAACC,GAAwBC,MAAe;AAC1D,QAAID,EAAM;AACD,aAAAA,EAAM,UAAUC,CAAK;AAE9B,YAAQD,EAAM,MAAM;AAAA,MAClB,KAAK;AACH,eAAQ,gBAAAE,EAAAC,GAAA,EAAK,IAAIF,GAAQ,UAAMA,GAAA;AAAA,MACjC,KAAK;AACI,eAAA,gBAAAC,EAACE,KAAW,OAAAH,GAAc;AAAA,MACnC,KAAK;AACH,eAAQ,gBAAAC,EAAA,QAAA,EAAM,UAAWG,EAAAJ,CAAK,GAAE;AAAA,MAClC,KAAK;AACH,eAAQ,gBAAAC,EAAA,QAAA,EAAM,UAAQD,IAAA,QAAQ,MAAK;AAAA,MACrC,KAAK;AACH,eACG,gBAAAC,EAAA,OAAA,EAAI,WAAU,wBACZ,UAAM,MAAA,QAAQD,CAAK,IAChBA,EAAM,IAAI,CAACK,GAAMC,MACf,gBAAAL,EAACM,GAAkB,EAAA,SAAQ,aACxB,UAAA,OAAOF,KAAS,YAAWA,KAAA,gBAAAA,EAAM,UAAQA,KAAA,gBAAAA,EAAM,MAAKA,EAD3C,GAAAC,CAEZ,CACD,IACDN,GACN;AAAA,MAGJ,KAAK;AACH,eAAQ,gBAAAC,EAAA,QAAA,EAAM,UAAMD,EAAA,SAAA,GAAW;AAAA,MACjC;AACS,eAAA,gBAAAC,EAAC,QAAM,EAAA,UAAAD,KAAS,IAAI,CAAA;AAAA,IAAA;AAAA,EAEjC;AAEA,2BACGQ,GACC,EAAA,UAAA;AAAA,IAAA,gBAAAP,EAACQ,GACC,EAAA,UAAA,gBAAAR,EAACS,GAAW,EAAA,UAAAd,EAAM,CAAA,GACpB;AAAA,IACA,gBAAAK,EAACU,GACC,EAAA,UAAA,gBAAAV,EAAC,OAAI,EAAA,WAAU,uBACZ,UACGN,IAAAE,EAAO,IAAI,CAACE,MAAU;AAEpB,YAAMC,IAAQD,EAAM,WAChBA,EAAM,SACH,MAAM,GAAG,EACT;AAAA,QACC,CAACa,GAAKC,MAASD,KAAOC,KAAOD,IAAMA,EAAIC,CAAG,IAAI;AAAA,QAC9ClB;AAAA,MAAA,IAEJ;AAGF,aAAA,gBAAAmB;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAU;AAAA,UAEV,UAAA;AAAA,YAAA,gBAAAb,EAAC,KAAE,EAAA,WAAU,gDAAgD,UAAAF,EAAM,SAAQ;AAAA,8BAC1E,OAAI,EAAA,WAAU,+CACZ,UAAYD,EAAAC,GAAOC,CAAK,EAC3B,CAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QANKD,EAAM;AAAA,MAOb;AAAA,IAEH,CAAA,IACDF,EAAO,IAAI,CAACkB,GAAGT,MAAW,gBAAAL,EAAAe,GAAA,EAAqB,WAAU,cAAA,GAAjBV,CAA+B,CAAE,EAC/E,CAAA,EACF,CAAA;AAAA,EAAA,GACF;AAEJ;"}
|
|
@@ -1,33 +1,34 @@
|
|
|
1
1
|
import { jsxs as t, jsx as r } from "react/jsx-runtime";
|
|
2
2
|
import { SideBar as p } from "./sidebar.es.js";
|
|
3
|
-
import { SidebarProvider as
|
|
3
|
+
import { SidebarProvider as c, SidebarTrigger as a } from "../ui/sidebar.es.js";
|
|
4
4
|
import "../ui/accordion.es.js";
|
|
5
|
-
import { Avatar as
|
|
5
|
+
import { Avatar as l, AvatarImage as n, AvatarFallback as d } from "../ui/avatar.es.js";
|
|
6
6
|
import "../ui/badge.es.js";
|
|
7
7
|
import "../ui/breadcrumb.es.js";
|
|
8
|
-
import { Button as
|
|
8
|
+
import { Button as h } from "../ui/button.es.js";
|
|
9
9
|
import "../ui/calendar.es.js";
|
|
10
10
|
import "../ui/card.es.js";
|
|
11
11
|
import "../ui/chart.es.js";
|
|
12
12
|
import "../ui/checkbox.es.js";
|
|
13
13
|
import "@radix-ui/react-collapsible";
|
|
14
14
|
import "../ui/command.es.js";
|
|
15
|
+
import { LogOut as f } from "lucide-react";
|
|
16
|
+
import "react";
|
|
15
17
|
import "../ui/dialog.es.js";
|
|
16
18
|
import "../ui/drawer.es.js";
|
|
17
|
-
import { DropdownMenu as
|
|
19
|
+
import { DropdownMenu as s, DropdownMenuTrigger as v, DropdownMenuContent as g, DropdownMenuItem as N } from "../ui/dropdown-menu.es.js";
|
|
18
20
|
import "../ui/form.es.js";
|
|
19
21
|
import "../ui/input.es.js";
|
|
20
22
|
import "../ui/input-otp.es.js";
|
|
21
23
|
import "../ui/label.es.js";
|
|
22
24
|
import { logout as x } from "../../utils/index.es.js";
|
|
23
|
-
import {
|
|
25
|
+
import { Outlet as w } from "@tanstack/react-router";
|
|
24
26
|
import "../ui/mutli-select.es.js";
|
|
25
27
|
import "../ui/navigation-menu.es.js";
|
|
26
28
|
import "../ui/pagination.es.js";
|
|
27
29
|
import "../ui/password-input.es.js";
|
|
28
30
|
import "../ui/popover.es.js";
|
|
29
31
|
import "../ui/radio-group.es.js";
|
|
30
|
-
import "react";
|
|
31
32
|
import "../ui/select.es.js";
|
|
32
33
|
import "../ui/separator.es.js";
|
|
33
34
|
import "../ui/sheet.es.js";
|
|
@@ -35,30 +36,16 @@ import "sonner";
|
|
|
35
36
|
import "../ui/table.es.js";
|
|
36
37
|
import "../ui/tabs.es.js";
|
|
37
38
|
import "../ui/tooltip.es.js";
|
|
38
|
-
|
|
39
|
-
import "cmdk";
|
|
40
|
-
import "use-debounce";
|
|
41
|
-
import { Outlet as w } from "@tanstack/react-router";
|
|
42
|
-
function lr({ data: e, user: o }) {
|
|
39
|
+
function mr({ data: e, user: o }) {
|
|
43
40
|
var i, m;
|
|
44
41
|
return /* @__PURE__ */ t("div", { className: "h-screen", children: [
|
|
45
|
-
/* @__PURE__ */ t(
|
|
42
|
+
/* @__PURE__ */ t(c, { children: [
|
|
46
43
|
/* @__PURE__ */ r(p, { data: e }),
|
|
47
44
|
/* @__PURE__ */ t("div", { className: "flex flex-col h-screen w-full overflow-auto", children: [
|
|
48
45
|
/* @__PURE__ */ t("header", { className: "h-[7vh] sticky top-0 bg-card flex items-center justify-between p-4 pl-0 border-b z-10", children: [
|
|
49
|
-
/* @__PURE__ */
|
|
50
|
-
|
|
51
|
-
/* @__PURE__ */ r(
|
|
52
|
-
"img",
|
|
53
|
-
{
|
|
54
|
-
src: "https://assets.cryptlex.com/images/logos/cryptlex-logo.svg",
|
|
55
|
-
alt: "logo",
|
|
56
|
-
className: "m-0"
|
|
57
|
-
}
|
|
58
|
-
)
|
|
59
|
-
] }),
|
|
60
|
-
/* @__PURE__ */ t(h, { children: [
|
|
61
|
-
/* @__PURE__ */ r(f, { asChild: !0, children: /* @__PURE__ */ r("div", { className: "cursor-pointer", children: /* @__PURE__ */ t(a, { className: "justify-center items-center", children: [
|
|
46
|
+
/* @__PURE__ */ r("div", { className: "flex gap-1 items-center", children: /* @__PURE__ */ r(a, {}) }),
|
|
47
|
+
/* @__PURE__ */ t(s, { children: [
|
|
48
|
+
/* @__PURE__ */ r(v, { asChild: !0, children: /* @__PURE__ */ r("div", { className: "cursor-pointer", children: /* @__PURE__ */ t(l, { className: "justify-center items-center", children: [
|
|
62
49
|
/* @__PURE__ */ r(
|
|
63
50
|
n,
|
|
64
51
|
{
|
|
@@ -71,7 +58,7 @@ function lr({ data: e, user: o }) {
|
|
|
71
58
|
(m = o == null ? void 0 : o.lastName) == null ? void 0 : m.charAt(0)
|
|
72
59
|
] })
|
|
73
60
|
] }) }) }),
|
|
74
|
-
/* @__PURE__ */ r(g, { children: /* @__PURE__ */ r(
|
|
61
|
+
/* @__PURE__ */ r(g, { children: /* @__PURE__ */ r(N, { children: /* @__PURE__ */ r(h, { icon: f, onClick: () => x(), children: "Log Out" }) }) })
|
|
75
62
|
] })
|
|
76
63
|
] }),
|
|
77
64
|
/* @__PURE__ */ r("div", { className: "flex-1 overflow-auto p-4", children: /* @__PURE__ */ r(w, {}) })
|
|
@@ -81,6 +68,6 @@ function lr({ data: e, user: o }) {
|
|
|
81
68
|
] });
|
|
82
69
|
}
|
|
83
70
|
export {
|
|
84
|
-
|
|
71
|
+
mr as AppLayout
|
|
85
72
|
};
|
|
86
73
|
//# sourceMappingURL=app-layout.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-layout.es.js","sources":["../../../lib/components/sidebar/app-layout.tsx"],"sourcesContent":["import type { NavItem } from '@/components/sidebar/nav-main';\nimport { SideBar } from '@/components/sidebar/sidebar';\nimport { SidebarProvider, SidebarTrigger } from '@/components/ui/sidebar';\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n logout,\n} from '@/index';\nimport { Outlet } from '@tanstack/react-router';\nimport { LogOut } from 'lucide-react';\n\nexport interface AppLayoutProps {\n data: NavItem[]; // Navigation items\n user?: {\n firstName?: string;\n lastName?: string;\n logoUrl?: string;\n }; // Optional user information\n}\n\nexport function AppLayout({ data, user }: AppLayoutProps) {\n return (\n <div className=\"h-screen\">\n <SidebarProvider>\n {/* Sidebar */}\n <SideBar data={data} />\n\n {/* Main Content */}\n <div className=\"flex flex-col h-screen w-full overflow-auto\">\n {/* Header */}\n <header className=\"h-[7vh] sticky top-0 bg-card flex items-center justify-between p-4 pl-0 border-b z-10\">\n {/* Sidebar Trigger */}\n <div className=\"flex gap-1 items-center\">\n <SidebarTrigger />\n {/* //TODO: Will be replaced with dynamic url */}\n <img\n src=\"https://assets.cryptlex.com/images/logos/cryptlex-logo.svg\"\n alt=\"logo\"\n className=\"m-0\"\n
|
|
1
|
+
{"version":3,"file":"app-layout.es.js","sources":["../../../lib/components/sidebar/app-layout.tsx"],"sourcesContent":["import type { NavItem } from '@/components/sidebar/nav-main';\nimport { SideBar } from '@/components/sidebar/sidebar';\nimport { SidebarProvider, SidebarTrigger } from '@/components/ui/sidebar';\nimport {\n Avatar,\n AvatarFallback,\n AvatarImage,\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n logout,\n} from '@/index';\nimport { Outlet } from '@tanstack/react-router';\nimport { LogOut } from 'lucide-react';\n\nexport interface AppLayoutProps {\n data: NavItem[]; // Navigation items\n user?: {\n firstName?: string;\n lastName?: string;\n logoUrl?: string;\n }; // Optional user information\n}\n\nexport function AppLayout({ data, user }: AppLayoutProps) {\n return (\n <div className=\"h-screen\">\n <SidebarProvider>\n {/* Sidebar */}\n <SideBar data={data} />\n\n {/* Main Content */}\n <div className=\"flex flex-col h-screen w-full overflow-auto\">\n {/* Header */}\n <header className=\"h-[7vh] sticky top-0 bg-card flex items-center justify-between p-4 pl-0 border-b z-10\">\n {/* Sidebar Trigger */}\n <div className=\"flex gap-1 items-center\">\n <SidebarTrigger />\n {/* //TODO: Improve position for this and Will be replaced with dynamic url */}\n {/* <img\n src=\"https://assets.cryptlex.com/images/logos/cryptlex-logo.svg\"\n alt=\"logo\"\n className=\"m-0\"\n /> */}\n </div>\n\n {/* User Dropdown */}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <div className=\"cursor-pointer\">\n {/* //TODO: Image url to be replaced by the dynamic url from /account/config */}\n <Avatar className=\"justify-center items-center\">\n <AvatarImage\n src={user?.logoUrl ?? 'https://app.dev.cryptlex.com/favicon.ico'}\n alt=\"icon\"\n />\n <AvatarFallback className=\"uppercase\">\n {user?.firstName?.charAt(0)}\n {user?.lastName?.charAt(0)}\n </AvatarFallback>\n </Avatar>\n </div>\n </DropdownMenuTrigger>\n\n <DropdownMenuContent>\n <DropdownMenuItem>\n <Button icon={LogOut} onClick={() => logout()}>\n Log Out\n </Button>\n </DropdownMenuItem>\n </DropdownMenuContent>\n </DropdownMenu>\n </header>\n\n {/* Scrollable Content */}\n <div className=\"flex-1 overflow-auto p-4\">\n <Outlet />\n </div>\n </div>\n </SidebarProvider>{' '}\n </div>\n );\n}\n"],"names":["AppLayout","data","user","jsxs","SidebarProvider","jsx","SideBar","SidebarTrigger","DropdownMenu","DropdownMenuTrigger","Avatar","AvatarImage","AvatarFallback","_a","_b","DropdownMenuContent","DropdownMenuItem","Button","LogOut","logout","Outlet"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BO,SAASA,GAAU,EAAE,MAAAC,GAAM,MAAAC,KAAwB;;AAEtD,SAAA,gBAAAC,EAAC,OAAI,EAAA,WAAU,YACb,UAAA;AAAA,IAAA,gBAAAA,EAACC,GAEC,EAAA,UAAA;AAAA,MAAA,gBAAAC,EAACC,KAAQ,MAAAL,GAAY;AAAA,MAGrB,gBAAAE,EAAC,OAAI,EAAA,WAAU,+CAEb,UAAA;AAAA,QAAC,gBAAAA,EAAA,UAAA,EAAO,WAAU,0FAEhB,UAAA;AAAA,UAAA,gBAAAE,EAAC,OAAI,EAAA,WAAU,2BACb,UAAA,gBAAAA,EAACE,IAAe,CAAA,GAOlB;AAAA,4BAGCC,GACC,EAAA,UAAA;AAAA,YAAC,gBAAAH,EAAAI,GAAA,EAAoB,SAAO,IAC1B,UAAC,gBAAAJ,EAAA,OAAA,EAAI,WAAU,kBAEb,UAAA,gBAAAF,EAACO,GAAO,EAAA,WAAU,gCAChB,UAAA;AAAA,cAAA,gBAAAL;AAAA,gBAACM;AAAA,gBAAA;AAAA,kBACC,MAAKT,KAAA,gBAAAA,EAAM,YAAW;AAAA,kBACtB,KAAI;AAAA,gBAAA;AAAA,cACN;AAAA,cACA,gBAAAC,EAACS,GAAe,EAAA,WAAU,aACvB,UAAA;AAAA,iBAAMC,IAAAX,KAAA,gBAAAA,EAAA,cAAA,gBAAAW,EAAW,OAAO;AAAA,iBACxBC,IAAAZ,KAAA,gBAAAA,EAAM,aAAN,gBAAAY,EAAgB,OAAO;AAAA,cAAC,EAC3B,CAAA;AAAA,YAAA,EACF,CAAA,EACF,CAAA,GACF;AAAA,YAEC,gBAAAT,EAAAU,GAAA,EACC,UAAC,gBAAAV,EAAAW,GAAA,EACC,4BAACC,GAAO,EAAA,MAAMC,GAAQ,SAAS,MAAMC,EAAA,GAAU,UAAA,UAAA,CAE/C,GACF,EACF,CAAA;AAAA,UAAA,EACF,CAAA;AAAA,QAAA,GACF;AAAA,0BAGC,OAAI,EAAA,WAAU,4BACb,UAAA,gBAAAd,EAACe,KAAO,EACV,CAAA;AAAA,MAAA,EACF,CAAA;AAAA,IAAA,GACF;AAAA,IAAmB;AAAA,EAAA,GACrB;AAEJ;"}
|
|
@@ -1,76 +1,78 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { Collapsible as
|
|
3
|
-
import { useSidebar as g, SidebarGroup as
|
|
4
|
-
import { Link as
|
|
5
|
-
import { ChevronRight as
|
|
1
|
+
import { jsx as e, jsxs as r } from "react/jsx-runtime";
|
|
2
|
+
import { Collapsible as p, CollapsibleTrigger as u, CollapsibleContent as b } from "../ui/collapsible.es.js";
|
|
3
|
+
import { useSidebar as g, SidebarGroup as f, SidebarMenu as S, SidebarMenuItem as o, SidebarMenuButton as i, SidebarMenuSub as C, SidebarMenuSubItem as N, SidebarMenuSubButton as v } from "../ui/sidebar.es.js";
|
|
4
|
+
import { Link as c } from "@tanstack/react-router";
|
|
5
|
+
import { ChevronRight as x } from "lucide-react";
|
|
6
6
|
import { useState as M } from "react";
|
|
7
|
-
function
|
|
8
|
-
const { setOpen:
|
|
9
|
-
|
|
7
|
+
function P({ items: d }) {
|
|
8
|
+
const { setOpen: s } = g(), [a, t] = M(null), h = (l) => {
|
|
9
|
+
t((n) => n === l ? null : l);
|
|
10
10
|
};
|
|
11
|
-
return /* @__PURE__ */
|
|
12
|
-
(
|
|
13
|
-
|
|
11
|
+
return /* @__PURE__ */ e(f, { children: /* @__PURE__ */ e(S, { className: "flex gap-2 ", children: d.map(
|
|
12
|
+
(l) => l.children && l.display && l.children.length > 0 ? /* @__PURE__ */ e(
|
|
13
|
+
p,
|
|
14
14
|
{
|
|
15
15
|
asChild: !0,
|
|
16
|
-
open: a ===
|
|
16
|
+
open: a === l.label,
|
|
17
17
|
className: "group/collapsible",
|
|
18
18
|
children: /* @__PURE__ */ r(o, { children: [
|
|
19
|
-
/* @__PURE__ */
|
|
19
|
+
/* @__PURE__ */ e(u, { asChild: !0, children: /* @__PURE__ */ r(
|
|
20
20
|
i,
|
|
21
21
|
{
|
|
22
|
-
tooltip:
|
|
22
|
+
tooltip: l.label,
|
|
23
23
|
onClick: () => {
|
|
24
|
-
|
|
24
|
+
s(!0), h(l.label);
|
|
25
25
|
},
|
|
26
26
|
className: "hover:bg-neutral-5",
|
|
27
27
|
children: [
|
|
28
|
-
|
|
29
|
-
/* @__PURE__ */
|
|
30
|
-
/* @__PURE__ */
|
|
31
|
-
|
|
28
|
+
l.icon && /* @__PURE__ */ e(l.icon, {}),
|
|
29
|
+
/* @__PURE__ */ e("span", { children: l.label }),
|
|
30
|
+
/* @__PURE__ */ e(
|
|
31
|
+
x,
|
|
32
32
|
{
|
|
33
|
-
className: `ml-auto transition-transform duration-200 ${a ===
|
|
33
|
+
className: `ml-auto transition-transform duration-200 ${a === l.label ? "rotate-90" : ""}`
|
|
34
34
|
}
|
|
35
35
|
)
|
|
36
36
|
]
|
|
37
37
|
}
|
|
38
38
|
) }),
|
|
39
|
-
/* @__PURE__ */
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
39
|
+
/* @__PURE__ */ e(b, { children: /* @__PURE__ */ e(C, { children: l.children.map(
|
|
40
|
+
(n) => n.display && /* @__PURE__ */ e(N, { children: /* @__PURE__ */ e(v, { asChild: !0, children: /* @__PURE__ */ r(
|
|
41
|
+
c,
|
|
42
|
+
{
|
|
43
|
+
activeProps: {
|
|
44
|
+
className: "bg-neutral-4 font-bold"
|
|
45
|
+
},
|
|
46
|
+
className: "text-neutral-10 no-underline hover:bg-neutral-5",
|
|
47
|
+
to: n.path,
|
|
48
|
+
children: [
|
|
49
|
+
n.icon && /* @__PURE__ */ e(n.icon, {}),
|
|
50
|
+
/* @__PURE__ */ e("span", { children: n.label })
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
) }) }, n.label)
|
|
54
|
+
) }) })
|
|
53
55
|
] })
|
|
54
56
|
},
|
|
55
|
-
|
|
56
|
-
) : /* @__PURE__ */
|
|
57
|
-
|
|
57
|
+
l.label
|
|
58
|
+
) : l.display && /* @__PURE__ */ e(o, { children: /* @__PURE__ */ e(i, { asChild: !0, tooltip: l.label, children: /* @__PURE__ */ r(
|
|
59
|
+
c,
|
|
58
60
|
{
|
|
59
61
|
activeProps: {
|
|
60
62
|
className: "bg-neutral-4 font-bold"
|
|
61
63
|
// Add active styling here
|
|
62
64
|
},
|
|
63
65
|
className: "no-underline text-neutral-10 flex items-center hover:bg-neutral-5",
|
|
64
|
-
to:
|
|
66
|
+
to: l.path,
|
|
65
67
|
children: [
|
|
66
|
-
|
|
67
|
-
/* @__PURE__ */
|
|
68
|
+
l.icon && /* @__PURE__ */ e(l.icon, {}),
|
|
69
|
+
/* @__PURE__ */ e("span", { children: l.label })
|
|
68
70
|
]
|
|
69
71
|
}
|
|
70
|
-
) }) },
|
|
72
|
+
) }) }, l.label)
|
|
71
73
|
) }) });
|
|
72
74
|
}
|
|
73
75
|
export {
|
|
74
|
-
|
|
76
|
+
P as NavMain
|
|
75
77
|
};
|
|
76
78
|
//# sourceMappingURL=nav-main.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nav-main.es.js","sources":["../../../lib/components/sidebar/nav-main.tsx"],"sourcesContent":["import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible';\nimport {\n SidebarGroup,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n useSidebar,\n} from '@/components/ui/sidebar';\nimport { Link } from '@tanstack/react-router';\nimport { ChevronRight, type LucideIcon } from 'lucide-react';\nimport { useState } from 'react';\n\nexport type NavItem = {\n path: string;\n label: string;\n display: boolean;\n icon: LucideIcon;\n
|
|
1
|
+
{"version":3,"file":"nav-main.es.js","sources":["../../../lib/components/sidebar/nav-main.tsx"],"sourcesContent":["import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible';\nimport {\n SidebarGroup,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n useSidebar,\n} from '@/components/ui/sidebar';\nimport { Link } from '@tanstack/react-router';\nimport { ChevronRight, type LucideIcon } from 'lucide-react';\nimport { useState } from 'react';\n\nexport type NavItem = {\n path: string;\n label: string;\n display: boolean;\n icon: LucideIcon;\n children?: { path: string; label: string; icon: LucideIcon; display: boolean }[];\n};\n\nexport function NavMain({ items }: { items: NavItem[] }) {\n const { setOpen } = useSidebar();\n const [openItem, setOpenItem] = useState<string | null>(null); // Tracks the currently open item\n\n const handleToggle = (title: string) => {\n setOpenItem((prev) => (prev === title ? null : title)); // Toggle the open state\n };\n\n return (\n <SidebarGroup>\n <SidebarMenu className=\"flex gap-2 \">\n {items.map((item) =>\n item.children && item.display && item.children.length > 0 ? (\n <Collapsible\n key={item.label}\n asChild\n open={openItem === item.label}\n className=\"group/collapsible\"\n >\n <SidebarMenuItem>\n <CollapsibleTrigger asChild>\n <SidebarMenuButton\n tooltip={item.label}\n onClick={() => {\n setOpen(true);\n handleToggle(item.label);\n }}\n className=\"hover:bg-neutral-5\"\n >\n {item.icon && <item.icon />}\n <span>{item.label}</span>\n <ChevronRight\n className={`ml-auto transition-transform duration-200 ${\n openItem === item.label ? 'rotate-90' : ''\n }`}\n />\n </SidebarMenuButton>\n </CollapsibleTrigger>\n <CollapsibleContent>\n <SidebarMenuSub>\n {item.children.map(\n (subItem) =>\n subItem.display && (\n <SidebarMenuSubItem key={subItem.label}>\n <SidebarMenuSubButton asChild>\n <Link\n activeProps={{\n className: 'bg-neutral-4 font-bold',\n }}\n className=\"text-neutral-10 no-underline hover:bg-neutral-5\"\n to={subItem.path}\n >\n {subItem.icon && <subItem.icon />}\n <span>{subItem.label}</span>\n </Link>\n </SidebarMenuSubButton>\n </SidebarMenuSubItem>\n ),\n )}\n </SidebarMenuSub>\n </CollapsibleContent>\n </SidebarMenuItem>\n </Collapsible>\n ) : (\n item.display && (\n <SidebarMenuItem key={item.label}>\n <SidebarMenuButton asChild tooltip={item.label}>\n <Link\n activeProps={{\n className: 'bg-neutral-4 font-bold', // Add active styling here\n }}\n className=\"no-underline text-neutral-10 flex items-center hover:bg-neutral-5\"\n to={item.path}\n >\n {item.icon && <item.icon />}\n <span>{item.label}</span>\n </Link>\n </SidebarMenuButton>\n </SidebarMenuItem>\n )\n ),\n )}\n </SidebarMenu>\n </SidebarGroup>\n );\n}\n"],"names":["NavMain","items","setOpen","useSidebar","openItem","setOpenItem","useState","handleToggle","title","prev","SidebarGroup","jsx","SidebarMenu","item","Collapsible","SidebarMenuItem","CollapsibleTrigger","jsxs","SidebarMenuButton","ChevronRight","CollapsibleContent","SidebarMenuSub","subItem","SidebarMenuSubItem","SidebarMenuSubButton","Link"],"mappings":";;;;;;AAuBgB,SAAAA,EAAQ,EAAE,OAAAC,KAA+B;AACjD,QAAA,EAAE,SAAAC,EAAQ,IAAIC,EAAW,GACzB,CAACC,GAAUC,CAAW,IAAIC,EAAwB,IAAI,GAEtDC,IAAe,CAACC,MAAkB;AACtC,IAAAH,EAAY,CAACI,MAAUA,MAASD,IAAQ,OAAOA,CAAM;AAAA,EACvD;AAEA,2BACGE,GACC,EAAA,UAAA,gBAAAC,EAACC,GAAY,EAAA,WAAU,eACpB,UAAMX,EAAA;AAAA,IAAI,CAACY,MACVA,EAAK,YAAYA,EAAK,WAAWA,EAAK,SAAS,SAAS,IACtD,gBAAAF;AAAA,MAACG;AAAA,MAAA;AAAA,QAEC,SAAO;AAAA,QACP,MAAMV,MAAaS,EAAK;AAAA,QACxB,WAAU;AAAA,QAEV,4BAACE,GACC,EAAA,UAAA;AAAA,UAAC,gBAAAJ,EAAAK,GAAA,EAAmB,SAAO,IACzB,UAAA,gBAAAC;AAAA,YAACC;AAAA,YAAA;AAAA,cACC,SAASL,EAAK;AAAA,cACd,SAAS,MAAM;AACb,gBAAAX,EAAQ,EAAI,GACZK,EAAaM,EAAK,KAAK;AAAA,cACzB;AAAA,cACA,WAAU;AAAA,cAET,UAAA;AAAA,gBAAAA,EAAK,QAAQ,gBAAAF,EAACE,EAAK,MAAL,CAAA,CAAU;AAAA,gBACzB,gBAAAF,EAAC,QAAM,EAAA,UAAAE,EAAK,MAAM,CAAA;AAAA,gBAClB,gBAAAF;AAAA,kBAACQ;AAAA,kBAAA;AAAA,oBACC,WAAW,6CACTf,MAAaS,EAAK,QAAQ,cAAc,EAC1C;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACF;AAAA,YAAA;AAAA,UAAA,GAEJ;AAAA,UACC,gBAAAF,EAAAS,GAAA,EACC,UAAC,gBAAAT,EAAAU,GAAA,EACE,YAAK,SAAS;AAAA,YACb,CAACC,MACCA,EAAQ,6BACLC,GACC,EAAA,UAAA,gBAAAZ,EAACa,GAAqB,EAAA,SAAO,IAC3B,UAAA,gBAAAP;AAAA,cAACQ;AAAA,cAAA;AAAA,gBACC,aAAa;AAAA,kBACX,WAAW;AAAA,gBACb;AAAA,gBACA,WAAU;AAAA,gBACV,IAAIH,EAAQ;AAAA,gBAEX,UAAA;AAAA,kBAAAA,EAAQ,QAAQ,gBAAAX,EAACW,EAAQ,MAAR,CAAA,CAAa;AAAA,kBAC/B,gBAAAX,EAAC,QAAM,EAAA,UAAAW,EAAQ,MAAM,CAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA,GAEzB,EAZuB,GAAAA,EAAQ,KAajC;AAAA,aAGR,EACF,CAAA;AAAA,QAAA,EACF,CAAA;AAAA,MAAA;AAAA,MA/CKT,EAAK;AAAA,IAAA,IAkDZA,EAAK,WACF,gBAAAF,EAAAI,GAAA,EACC,UAAC,gBAAAJ,EAAAO,GAAA,EAAkB,SAAO,IAAC,SAASL,EAAK,OACvC,UAAA,gBAAAI;AAAA,MAACQ;AAAA,MAAA;AAAA,QACC,aAAa;AAAA,UACX,WAAW;AAAA;AAAA,QACb;AAAA,QACA,WAAU;AAAA,QACV,IAAIZ,EAAK;AAAA,QAER,UAAA;AAAA,UAAAA,EAAK,QAAQ,gBAAAF,EAACE,EAAK,MAAL,CAAA,CAAU;AAAA,UACzB,gBAAAF,EAAC,QAAM,EAAA,UAAAE,EAAK,MAAM,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA,GAEtB,EAZoB,GAAAA,EAAK,KAa3B;AAAA,KAIR,EACF,CAAA;AAEJ;"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { jsx as e, jsxs as n } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { Badge as s } from "../ui/badge.es.js";
|
|
3
|
+
import { Table as x, TableHeader as f, TableRow as p, TableCell as a, TableBody as g } from "../ui/table.es.js";
|
|
4
4
|
import { getResourceDisplayName as u, getValueFromData as v } from "../data-table/table-utils/constants.es.js";
|
|
5
5
|
function b({ accessors: d, data: m, affectedData: t }) {
|
|
6
|
-
return /* @__PURE__ */ e("div", { className: "relative overflow-hidden border max-h-[50vh]", children: /* @__PURE__ */ e("div", { className: "overflow-y-auto max-h-[50vh]", children: /* @__PURE__ */ n(
|
|
7
|
-
/* @__PURE__ */ e(
|
|
6
|
+
return /* @__PURE__ */ e("div", { className: "relative overflow-hidden border max-h-[50vh]", children: /* @__PURE__ */ e("div", { className: "overflow-y-auto max-h-[50vh]", children: /* @__PURE__ */ n(x, { children: [
|
|
7
|
+
/* @__PURE__ */ e(f, { className: "text-left align-middle uppercase sticky top-0 z-10 bg-card", children: /* @__PURE__ */ n(p, { children: [
|
|
8
8
|
d.map((r) => /* @__PURE__ */ e(
|
|
9
9
|
a,
|
|
10
10
|
{
|
|
@@ -15,10 +15,10 @@ function b({ accessors: d, data: m, affectedData: t }) {
|
|
|
15
15
|
)),
|
|
16
16
|
t && /* @__PURE__ */ e(a, { className: "px-4 py-2 text-left text-sm font-medium cursor-pointer whitespace-nowrap bg-card", children: "Affected" })
|
|
17
17
|
] }) }),
|
|
18
|
-
/* @__PURE__ */ e(
|
|
18
|
+
/* @__PURE__ */ e(g, { children: m.map((r, o) => /* @__PURE__ */ n(p, { children: [
|
|
19
19
|
d.map((l) => {
|
|
20
20
|
const c = r[l];
|
|
21
|
-
return Array.isArray(c) ? /* @__PURE__ */ e(a, { className: "flex gap-4", children: c.map((i, h) => /* @__PURE__ */ e(
|
|
21
|
+
return Array.isArray(c) ? /* @__PURE__ */ e(a, { className: "flex gap-4", children: c.map((i, h) => /* @__PURE__ */ e(s, { children: (i == null ? void 0 : i.name) || i }, h)) }, String(l)) : /* @__PURE__ */ e(a, { children: v(r, l) }, String(l));
|
|
22
22
|
}),
|
|
23
23
|
t && /* @__PURE__ */ e(a, { children: t.includes(r) ? /* @__PURE__ */ e("span", { className: "text-success-10", children: "✔" }) : /* @__PURE__ */ e("span", { className: "text-destructive", children: "✖" }) })
|
|
24
24
|
] }, o)) })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.es.js","sources":["../../../lib/components/static-data-table/data-table.tsx"],"sourcesContent":["import { getResourceDisplayName, getValueFromData } from '@/components/data-table';\nimport { Table, TableBody, TableCell, TableHeader, TableRow } from '@/components/ui/table';\
|
|
1
|
+
{"version":3,"file":"data-table.es.js","sources":["../../../lib/components/static-data-table/data-table.tsx"],"sourcesContent":["import { getResourceDisplayName, getValueFromData } from '@/components/data-table';\nimport { Badge } from '@/components/ui/badge';\nimport { Table, TableBody, TableCell, TableHeader, TableRow } from '@/components/ui/table';\n\n\nexport interface StaticDataTableProps<T> {\n accessors: (keyof T)[];\n data: T[];\n affectedData?: T[];\n}\n\nexport function StaticDataTable<T>({ accessors, data, affectedData }: StaticDataTableProps<T>) {\n return (\n <div className=\"relative overflow-hidden border max-h-[50vh]\">\n <div className=\"overflow-y-auto max-h-[50vh]\">\n <Table>\n <TableHeader className=\"text-left align-middle uppercase sticky top-0 z-10 bg-card\">\n <TableRow>\n {accessors.map((accessor) => (\n <TableCell\n key={String(accessor)}\n className=\"px-4 py-2 text-left text-sm font-medium cursor-pointer whitespace-nowrap bg-card\"\n >\n {getResourceDisplayName(String(accessor), 'admin-portal')}\n </TableCell>\n ))}\n {affectedData && (\n <TableCell className=\"px-4 py-2 text-left text-sm font-medium cursor-pointer whitespace-nowrap bg-card\">\n Affected\n </TableCell>\n )}\n </TableRow>\n </TableHeader>\n <TableBody>\n {data.map((item, index) => (\n <TableRow key={index}>\n {accessors.map((accessor) => {\n const value = item[accessor];\n // Handle arrays (e.g., userGroups) with badges\n if (Array.isArray(value)) {\n return (\n <TableCell key={String(accessor)} className=\"flex gap-4\">\n {value.map((subItem, subIndex) => (\n <Badge key={subIndex}>{subItem?.name || subItem}</Badge>\n ))}\n </TableCell>\n );\n }\n // Handle other data types\n return (\n <TableCell key={String(accessor)}>{getValueFromData(item, accessor)}</TableCell>\n );\n })}\n {affectedData && (\n <TableCell>\n {affectedData.includes(item) ? (\n <span className=\"text-success-10\">✔</span>\n ) : (\n <span className=\"text-destructive\">✖</span>\n )}\n </TableCell>\n )}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </div>\n </div>\n );\n}\n"],"names":["StaticDataTable","accessors","data","affectedData","jsx","jsxs","Table","TableHeader","TableRow","accessor","TableCell","getResourceDisplayName","TableBody","item","index","value","subItem","subIndex","Badge","getValueFromData"],"mappings":";;;;AAWO,SAASA,EAAmB,EAAE,WAAAC,GAAW,MAAAC,GAAM,cAAAC,KAAyC;AAE3F,SAAA,gBAAAC,EAAC,SAAI,WAAU,gDACb,4BAAC,OAAI,EAAA,WAAU,gCACb,UAAA,gBAAAC,EAACC,GACC,EAAA,UAAA;AAAA,IAAA,gBAAAF,EAACG,GAAY,EAAA,WAAU,8DACrB,UAAA,gBAAAF,EAACG,GACE,EAAA,UAAA;AAAA,MAAUP,EAAA,IAAI,CAACQ,MACd,gBAAAL;AAAA,QAACM;AAAA,QAAA;AAAA,UAEC,WAAU;AAAA,UAET,UAAuBC,EAAA,OAAOF,CAAQ,GAAG,cAAc;AAAA,QAAA;AAAA,QAHnD,OAAOA,CAAQ;AAAA,MAAA,CAKvB;AAAA,MACAN,KACC,gBAAAC,EAACM,GAAU,EAAA,WAAU,oFAAmF,UAExG,WAAA,CAAA;AAAA,IAAA,EAAA,CAEJ,EACF,CAAA;AAAA,IACA,gBAAAN,EAACQ,KACE,UAAKV,EAAA,IAAI,CAACW,GAAMC,wBACdN,GACE,EAAA,UAAA;AAAA,MAAUP,EAAA,IAAI,CAACQ,MAAa;AACrB,cAAAM,IAAQF,EAAKJ,CAAQ;AAEvB,eAAA,MAAM,QAAQM,CAAK,sBAElBL,GAAiC,EAAA,WAAU,cACzC,UAAMK,EAAA,IAAI,CAACC,GAASC,wBAClBC,GAAsB,EAAA,WAAAF,KAAA,gBAAAA,EAAS,SAAQA,EAA5B,GAAAC,CAAoC,CACjD,EAHa,GAAA,OAAOR,CAAQ,CAI/B,IAKF,gBAAAL,EAACM,KAAkC,UAAiBS,EAAAN,GAAMJ,CAAQ,EAAlD,GAAA,OAAOA,CAAQ,CAAqC;AAAA,MAAA,CAEvE;AAAA,MACAN,KACE,gBAAAC,EAAAM,GAAA,EACE,YAAa,SAASG,CAAI,IACxB,gBAAAT,EAAA,QAAA,EAAK,WAAU,mBAAkB,eAAC,IAEnC,gBAAAA,EAAC,UAAK,WAAU,oBAAmB,cAAC,CAAA,EAExC,CAAA;AAAA,IAAA,EAzBW,GAAAU,CA2Bf,CACD,EACH,CAAA;AAAA,EAAA,EACF,CAAA,EACF,CAAA,GACF;AAEJ;"}
|