@agilant/toga-blox 1.0.313 → 1.0.315
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/BaseButton/BaseButton.d.ts +1 -1
- package/dist/components/EnvironmentBadge/EnvironmentBadge.d.ts +3 -0
- package/dist/components/EnvironmentBadge/EnvironmentBadge.js +28 -0
- package/dist/components/EnvironmentBadge/index.d.ts +1 -0
- package/dist/components/EnvironmentBadge/index.js +1 -0
- package/dist/components/EnvironmentBadge/types.d.ts +0 -0
- package/dist/components/EnvironmentBadge/types.js +0 -0
- package/dist/components/SearchInput/SearchInputDatePicker.js +1 -1
- package/dist/components/Table/Table.d.ts +5 -0
- package/dist/components/Table/Table.js +10 -0
- package/dist/components/Table/Table.stories.d.ts +24 -0
- package/dist/components/Table/Table.stories.js +40 -0
- package/dist/components/Table/Table.tanstack.stories.d.ts +21 -0
- package/dist/components/Table/Table.tanstack.stories.js +124 -0
- package/dist/components/Table/TableBody.d.ts +5 -0
- package/dist/components/Table/TableBody.js +5 -0
- package/dist/components/Table/TableCell.d.ts +5 -0
- package/dist/components/Table/TableCell.js +5 -0
- package/dist/components/Table/TableHead.d.ts +6 -0
- package/dist/components/Table/TableHead.js +5 -0
- package/dist/components/Table/TableHeaderCell.d.ts +5 -0
- package/dist/components/Table/TableHeaderCell.js +5 -0
- package/dist/components/Table/TableRow.d.ts +5 -0
- package/dist/components/Table/TableRow.js +5 -0
- package/dist/components/Table/index.d.ts +6 -0
- package/dist/components/Table/index.js +6 -0
- package/dist/index.d.ts +16 -70
- package/dist/index.js +16 -74
- package/dist/main.css +1 -1
- package/dist/reactQuery/queryHelpers.js +11 -4
- package/dist/reactQuery/useApiQuery.d.ts +1 -1
- package/dist/utils/getEndpointFromEnvironment.d.ts +1 -0
- package/dist/utils/getEndpointFromEnvironment.js +20 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +2 -0
- package/package.json +5 -5
- package/dist/hooks/useApiMutation.d.ts +0 -2
- package/dist/hooks/useApiMutation.js +0 -25
- package/dist/hooks/useApiQuery.d.ts +0 -2
- package/dist/hooks/useApiQuery.js +0 -9
- package/dist/utils/queryHelpers.d.ts +0 -67
- package/dist/utils/queryHelpers.js +0 -132
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import type { BaseButtonProps } from "./BaseButton.types";
|
|
3
|
-
declare const BaseButton: React.ForwardRefExoticComponent<BaseButtonProps & React.RefAttributes<
|
|
3
|
+
declare const BaseButton: React.ForwardRefExoticComponent<BaseButtonProps & React.RefAttributes<HTMLAnchorElement | HTMLButtonElement>>;
|
|
4
4
|
export default BaseButton;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { getEndPointFromEnvironment } from "../../utils/getEndpointFromEnvironment";
|
|
3
|
+
import Badge from "../Badge/Badge";
|
|
4
|
+
const envColor = {
|
|
5
|
+
development: "bg-mint-200",
|
|
6
|
+
alpha: "bg-mauve-100",
|
|
7
|
+
beta: "bg-pumpkin-100",
|
|
8
|
+
gamma: "bg-indigo-100",
|
|
9
|
+
sprint: "bg-honey-100",
|
|
10
|
+
stage: "bg-violet-100",
|
|
11
|
+
test: "bg-pink-100",
|
|
12
|
+
production: "bg-crimson-700 text-white",
|
|
13
|
+
};
|
|
14
|
+
const EnvironmentBadge = () => {
|
|
15
|
+
const env = getEndPointFromEnvironment();
|
|
16
|
+
// Only hide on actual production deployment, not when dev targets prod
|
|
17
|
+
if (import.meta.env.MODE === "production")
|
|
18
|
+
return null;
|
|
19
|
+
const mode = import.meta.env.MODE;
|
|
20
|
+
const color = envColor[env] || undefined;
|
|
21
|
+
const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
|
|
22
|
+
const envLabel = `Environment: ${capitalize(mode)}`;
|
|
23
|
+
const endpointLabel = `Endpoint: ${capitalize(env)}`;
|
|
24
|
+
// Shows deployed environments
|
|
25
|
+
// Development shows env + endpoint
|
|
26
|
+
return (_jsxs("div", { className: "flex absolute gap-2", children: [_jsx(Badge, { type: "span", text: envLabel, backgroundColor: envColor[mode] || undefined, badgeContainerClasses: "flex justify-center items-center py-1 px-2 font-omnes-medium text-base" }), mode === "development" && (_jsx(Badge, { type: "span", text: endpointLabel, backgroundColor: color, badgeContainerClasses: "flex justify-center items-center py-1 px-2 font-omnes-medium text-base" }))] }));
|
|
27
|
+
};
|
|
28
|
+
export default EnvironmentBadge;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./EnvironmentBadge";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default } from "./EnvironmentBadge";
|
|
File without changes
|
|
File without changes
|
|
@@ -372,7 +372,7 @@ function SearchDatePickerInput({ themeBgColor = "bg-sky-500", lightThemeBg = "bg
|
|
|
372
372
|
}
|
|
373
373
|
}, firstIcon: _jsx("span", { className: `${buttonPlaceHolderTextColor}`, children: getFontAwesomeIcon("calendar", "regular") }), required: false, additionalClasses: "border-2 px-3 py-2 flex-auto h-10 text-left rounded-r min-w-52 max-w-52", hasAutoFocus: true, firstIconTop: firstIconTop, placeHolderColor: placeHolderColor }) })) : (_jsx(_Fragment, { children: _jsxs("button", { onClick: openSinglePicker, className: `${selectedDate
|
|
374
374
|
? ""
|
|
375
|
-
: buttonPlaceHolderTextColor} border-2 px-3 py-2 flex-auto h-10 text-left rounded-r min-w-52 max-w-52
|
|
375
|
+
: buttonPlaceHolderTextColor} border-2 px-3 py-2 flex-auto h-10 text-left rounded-r min-w-52 max-w-52`, children: [_jsx("span", { className: `pr-2 ${buttonPlaceHolderTextColor}`, children: getFontAwesomeIcon("calendar", "regular") }), localDate
|
|
376
376
|
? formatDateAsMonthDayYear(localDate)
|
|
377
377
|
: "mm/dd/yyyy"] }) }))] })) }), dayPicker, _jsxs("div", { className: "flex justify-between items-end bg-white px-5 pb-2 rounded-md mt-4", children: [_jsx(ToggleButton, { initialStatus: toggleStatus, onClick: () => setToggleStatus?.(!toggleStatus), activeColorBackground: toggleColor, activeColorBorder: activeColorBorder, activeLabel: "Range", activeTextColor: toggleTextColor, additionalClasses: "flex items-center", inactiveColorBackground: inactiveColorBackground, inactiveColorBorder: inactiveColorBorder, inactiveLabel: "Range", inactiveTextColor: "text-gray-500", pillHeight: "h-8", textPosition: "right", textSize: "text-sm", smallToggle: true, borderStyle: true, inactiveCircleColor: inactiveCircleColor, activeCircleColor: activeCircleColor }), _jsx(BaseButton, { text: buttonText, backgroundColor: themeBgColor, additionalClasses: "py-0.5 px-6 text-white", borderColor: "border-none", onClick: handleFilterClick, shape: "rounded-full" })] }), searchItems?.length ? (_jsx("div", { className: "py-1 border-t", children: _jsx("div", { className: "flex flex-wrap bg-white py-2 px-2 mt-2 rounded-md", children: searchItems.map((item, index) => {
|
|
378
378
|
const cleanedText = getCleanedText(item, removePattern);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { cn } from "../../utils/cn";
|
|
4
|
+
// forwardRef lets a parent component get a direct reference to the underlying <table> DOM element.
|
|
5
|
+
// This enables the parent to imperatively scroll, measure, focus, or animate the table.
|
|
6
|
+
export const Table = React.forwardRef(({ children, className, fullWidth, style, ...props }, ref) => (_jsx("table", { ref: ref, className: cn(fullWidth && "w-full", className), style: {
|
|
7
|
+
borderCollapse: "collapse",
|
|
8
|
+
...style,
|
|
9
|
+
}, ...props, children: children })));
|
|
10
|
+
Table.displayName = "Table";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { StoryFn } from "@storybook/react";
|
|
3
|
+
import { Table } from "./index";
|
|
4
|
+
declare const _default: {
|
|
5
|
+
title: string;
|
|
6
|
+
component: React.ForwardRefExoticComponent<import("./Table").TableProps & React.RefAttributes<HTMLTableElement>>;
|
|
7
|
+
tags: string[];
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: string;
|
|
10
|
+
};
|
|
11
|
+
argTypes: {
|
|
12
|
+
fullWidth: {
|
|
13
|
+
control: string;
|
|
14
|
+
description: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export default _default;
|
|
19
|
+
/** Default table */
|
|
20
|
+
export declare const Default: StoryFn<typeof Table>;
|
|
21
|
+
/** Default table with basic styles */
|
|
22
|
+
export declare const DefaultWithStyles: StoryFn<typeof Table>;
|
|
23
|
+
/** Sticky header — scroll to see the header stay pinned */
|
|
24
|
+
export declare const StickyHeader: StoryFn<typeof Table>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Table, TableHead, TableBody, TableRow, TableHeaderCell, TableCell, } from "./index";
|
|
3
|
+
export default {
|
|
4
|
+
title: "Components/Table",
|
|
5
|
+
component: Table,
|
|
6
|
+
tags: ["autodocs"],
|
|
7
|
+
parameters: {
|
|
8
|
+
layout: "centered",
|
|
9
|
+
},
|
|
10
|
+
argTypes: {
|
|
11
|
+
fullWidth: {
|
|
12
|
+
control: "boolean",
|
|
13
|
+
description: "Whether the table takes the full width of its container.",
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
const columns = [
|
|
18
|
+
{ key: "name", header: "Name" },
|
|
19
|
+
{ key: "email", header: "Email" },
|
|
20
|
+
{ key: "role", header: "Role" },
|
|
21
|
+
];
|
|
22
|
+
const rows = [
|
|
23
|
+
{ name: "Alice", email: "alice@example.com", role: "Admin" },
|
|
24
|
+
{ name: "Bob", email: "bob@example.com", role: "Editor" },
|
|
25
|
+
{ name: "Carol", email: "carol@example.com", role: "Viewer" },
|
|
26
|
+
];
|
|
27
|
+
/** Default table */
|
|
28
|
+
export const Default = (args) => (_jsxs(Table, { ...args, children: [_jsx(TableHead, { children: _jsx(TableRow, { children: columns.map((col) => (_jsx(TableHeaderCell, { children: col.header }, col.key))) }) }), _jsx(TableBody, { children: rows.map((row) => (_jsx(TableRow, { children: columns.map((col) => (_jsx(TableCell, { children: row[col.key] }, col.key))) }, row.email))) })] }));
|
|
29
|
+
Default.args = {
|
|
30
|
+
fullWidth: true,
|
|
31
|
+
};
|
|
32
|
+
/** Default table with basic styles */
|
|
33
|
+
export const DefaultWithStyles = (args) => (_jsxs(Table, { ...args, className: "w-96", children: [_jsx(TableHead, { children: _jsx(TableRow, { className: "bg-gray-50", children: columns.map((col) => (_jsx(TableHeaderCell, { className: "px-4 py-3 text-left font-bold", children: col.header }, col.key))) }) }), _jsx(TableBody, { className: "bg-white", children: rows.map((row) => (_jsx(TableRow, { className: "hover:bg-gray-200 border-b", children: columns.map((col) => (_jsx(TableCell, { className: "px-4 py-2 text-sm", children: row[col.key] }, col.key))) }, row.email))) })] }));
|
|
34
|
+
const manyRows = Array.from({ length: 20 }, (_, i) => ({
|
|
35
|
+
name: `User ${i + 1}`,
|
|
36
|
+
email: `user${i + 1}@example.com`,
|
|
37
|
+
role: i % 3 === 0 ? "Admin" : i % 3 === 1 ? "Editor" : "Viewer",
|
|
38
|
+
}));
|
|
39
|
+
/** Sticky header — scroll to see the header stay pinned */
|
|
40
|
+
export const StickyHeader = () => (_jsx("div", { className: "h-64 overflow-auto w-[500px]", children: _jsxs(Table, { fullWidth: true, children: [_jsx(TableHead, { sticky: true, children: _jsx(TableRow, { className: "bg-gray-50", children: columns.map((col) => (_jsx(TableHeaderCell, { className: "px-4 py-3 text-left font-bold border-b", children: col.header }, col.key))) }) }), _jsx(TableBody, { children: manyRows.map((row) => (_jsx(TableRow, { className: "hover:bg-gray-100 border-b", children: columns.map((col) => (_jsx(TableCell, { className: "px-4 py-2 text-sm", children: row[col.key] }, col.key))) }, row.email))) })] }) }));
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { StoryFn } from "@storybook/react";
|
|
3
|
+
declare const _default: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: React.ForwardRefExoticComponent<import("./Table").TableProps & React.RefAttributes<HTMLTableElement>>;
|
|
6
|
+
tags: string[];
|
|
7
|
+
parameters: {
|
|
8
|
+
layout: string;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export default _default;
|
|
12
|
+
/** Shows the minimum wiring needed: column defs, data, `getCoreRowModel`, and your Table primitives. */
|
|
13
|
+
export declare const Basic: StoryFn;
|
|
14
|
+
/** Click any column header to cycle through ascending → descending → unsorted. */
|
|
15
|
+
export declare const Sorting: StoryFn;
|
|
16
|
+
/** Type in the search box to filter all columns at once. */
|
|
17
|
+
export declare const Filtering: StoryFn;
|
|
18
|
+
/** Rows are split into pages of 5. Use the controls below the table to navigate. */
|
|
19
|
+
export declare const Pagination: StoryFn;
|
|
20
|
+
/** All features enabled together: sort by clicking headers, search with the text input, and paginate with the controls. */
|
|
21
|
+
export declare const Combined: StoryFn;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { useReactTable, getCoreRowModel, getSortedRowModel, getFilteredRowModel, getPaginationRowModel, flexRender, createColumnHelper, } from "@tanstack/react-table";
|
|
4
|
+
import { Table, TableHead, TableBody, TableRow, TableHeaderCell, TableCell, } from "./index";
|
|
5
|
+
export default {
|
|
6
|
+
title: "Demos/TanStack Table",
|
|
7
|
+
component: Table,
|
|
8
|
+
tags: ["autodocs"],
|
|
9
|
+
parameters: {
|
|
10
|
+
layout: "centered",
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
const data = [
|
|
14
|
+
{ name: "Alice", email: "alice@example.com", role: "Admin", age: 32 },
|
|
15
|
+
{ name: "Bob", email: "bob@example.com", role: "Editor", age: 25 },
|
|
16
|
+
{ name: "Carol", email: "carol@example.com", role: "Viewer", age: 28 },
|
|
17
|
+
{ name: "Dan", email: "dan@example.com", role: "Admin", age: 41 },
|
|
18
|
+
{ name: "Eve", email: "eve@example.com", role: "Editor", age: 35 },
|
|
19
|
+
{ name: "Frank", email: "frank@example.com", role: "Viewer", age: 23 },
|
|
20
|
+
{ name: "Grace", email: "grace@example.com", role: "Admin", age: 29 },
|
|
21
|
+
{ name: "Hank", email: "hank@example.com", role: "Editor", age: 37 },
|
|
22
|
+
{ name: "Iris", email: "iris@example.com", role: "Viewer", age: 26 },
|
|
23
|
+
{ name: "Jack", email: "jack@example.com", role: "Admin", age: 44 },
|
|
24
|
+
{ name: "Kate", email: "kate@example.com", role: "Editor", age: 31 },
|
|
25
|
+
{ name: "Leo", email: "leo@example.com", role: "Viewer", age: 22 },
|
|
26
|
+
];
|
|
27
|
+
const columnHelper = createColumnHelper();
|
|
28
|
+
const columns = [
|
|
29
|
+
columnHelper.accessor("name", { header: "Name" }),
|
|
30
|
+
columnHelper.accessor("email", { header: "Email" }),
|
|
31
|
+
columnHelper.accessor("role", { header: "Role" }),
|
|
32
|
+
columnHelper.accessor("age", { header: "Age" }),
|
|
33
|
+
];
|
|
34
|
+
// ── Shared style classes ──
|
|
35
|
+
const headerCellClasses = "px-4 py-3 text-left font-bold";
|
|
36
|
+
const cellClasses = "px-4 py-2 text-sm";
|
|
37
|
+
const headerRowClasses = "bg-gray-50";
|
|
38
|
+
const bodyRowClasses = "hover:bg-gray-100 border-b";
|
|
39
|
+
// ────────────────────────────────────────────
|
|
40
|
+
// 1. Basic — minimal TanStack Table wiring
|
|
41
|
+
// ────────────────────────────────────────────
|
|
42
|
+
/** Shows the minimum wiring needed: column defs, data, `getCoreRowModel`, and your Table primitives. */
|
|
43
|
+
export const Basic = () => {
|
|
44
|
+
const table = useReactTable({
|
|
45
|
+
data,
|
|
46
|
+
columns,
|
|
47
|
+
getCoreRowModel: getCoreRowModel(),
|
|
48
|
+
});
|
|
49
|
+
return (_jsxs(Table, { fullWidth: true, className: "w-[600px]", children: [_jsx(TableHead, { children: table.getHeaderGroups().map((headerGroup) => (_jsx(TableRow, { className: headerRowClasses, children: headerGroup.headers.map((header) => (_jsx(TableHeaderCell, { className: headerCellClasses, children: flexRender(header.column.columnDef.header, header.getContext()) }, header.id))) }, headerGroup.id))) }), _jsx(TableBody, { children: table.getRowModel().rows.map((row) => (_jsx(TableRow, { className: bodyRowClasses, children: row.getVisibleCells().map((cell) => (_jsx(TableCell, { className: cellClasses, children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id))) }, row.id))) })] }));
|
|
50
|
+
};
|
|
51
|
+
// ────────────────────────────────────────────
|
|
52
|
+
// 2. Sorting — click headers to sort
|
|
53
|
+
// ────────────────────────────────────────────
|
|
54
|
+
/** Click any column header to cycle through ascending → descending → unsorted. */
|
|
55
|
+
export const Sorting = () => {
|
|
56
|
+
const [sorting, setSorting] = useState([]);
|
|
57
|
+
const table = useReactTable({
|
|
58
|
+
data,
|
|
59
|
+
columns,
|
|
60
|
+
state: { sorting },
|
|
61
|
+
onSortingChange: setSorting,
|
|
62
|
+
getCoreRowModel: getCoreRowModel(),
|
|
63
|
+
getSortedRowModel: getSortedRowModel(),
|
|
64
|
+
});
|
|
65
|
+
return (_jsxs(Table, { fullWidth: true, className: "w-[600px]", children: [_jsx(TableHead, { children: table.getHeaderGroups().map((headerGroup) => (_jsx(TableRow, { className: headerRowClasses, children: headerGroup.headers.map((header) => (_jsx(TableHeaderCell, { className: `${headerCellClasses} cursor-pointer select-none`, onClick: header.column.getToggleSortingHandler(), children: _jsxs("span", { className: "flex items-center gap-1", children: [flexRender(header.column.columnDef.header, header.getContext()), {
|
|
66
|
+
asc: " ▲",
|
|
67
|
+
desc: " ▼",
|
|
68
|
+
}[header.column.getIsSorted()] ??
|
|
69
|
+
null] }) }, header.id))) }, headerGroup.id))) }), _jsx(TableBody, { children: table.getRowModel().rows.map((row) => (_jsx(TableRow, { className: bodyRowClasses, children: row.getVisibleCells().map((cell) => (_jsx(TableCell, { className: cellClasses, children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id))) }, row.id))) })] }));
|
|
70
|
+
};
|
|
71
|
+
// ────────────────────────────────────────────
|
|
72
|
+
// 3. Filtering — global text filter
|
|
73
|
+
// ────────────────────────────────────────────
|
|
74
|
+
/** Type in the search box to filter all columns at once. */
|
|
75
|
+
export const Filtering = () => {
|
|
76
|
+
const [globalFilter, setGlobalFilter] = useState("");
|
|
77
|
+
const table = useReactTable({
|
|
78
|
+
data,
|
|
79
|
+
columns,
|
|
80
|
+
state: { globalFilter },
|
|
81
|
+
onGlobalFilterChange: setGlobalFilter,
|
|
82
|
+
getCoreRowModel: getCoreRowModel(),
|
|
83
|
+
getFilteredRowModel: getFilteredRowModel(),
|
|
84
|
+
});
|
|
85
|
+
return (_jsxs("div", { className: "w-[600px] flex flex-col gap-3", children: [_jsx("input", { value: globalFilter, onChange: (e) => setGlobalFilter(e.target.value), placeholder: "Search all columns\u2026", className: "px-3 py-2 border rounded-md text-sm w-60" }), _jsxs(Table, { fullWidth: true, children: [_jsx(TableHead, { children: table.getHeaderGroups().map((headerGroup) => (_jsx(TableRow, { className: headerRowClasses, children: headerGroup.headers.map((header) => (_jsx(TableHeaderCell, { className: headerCellClasses, children: flexRender(header.column.columnDef.header, header.getContext()) }, header.id))) }, headerGroup.id))) }), _jsxs(TableBody, { children: [table.getRowModel().rows.map((row) => (_jsx(TableRow, { className: bodyRowClasses, children: row.getVisibleCells().map((cell) => (_jsx(TableCell, { className: cellClasses, children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id))) }, row.id))), table.getRowModel().rows.length === 0 && (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: columns.length, className: "px-4 py-8 text-center text-gray-400 text-sm", children: "No results found." }) }))] })] })] }));
|
|
86
|
+
};
|
|
87
|
+
// ────────────────────────────────────────────
|
|
88
|
+
// 4. Pagination — navigate pages of rows
|
|
89
|
+
// ────────────────────────────────────────────
|
|
90
|
+
/** Rows are split into pages of 5. Use the controls below the table to navigate. */
|
|
91
|
+
export const Pagination = () => {
|
|
92
|
+
const table = useReactTable({
|
|
93
|
+
data,
|
|
94
|
+
columns,
|
|
95
|
+
getCoreRowModel: getCoreRowModel(),
|
|
96
|
+
getPaginationRowModel: getPaginationRowModel(),
|
|
97
|
+
initialState: { pagination: { pageSize: 5 } },
|
|
98
|
+
});
|
|
99
|
+
return (_jsxs("div", { className: "w-[600px] flex flex-col gap-3", children: [_jsxs(Table, { fullWidth: true, children: [_jsx(TableHead, { children: table.getHeaderGroups().map((headerGroup) => (_jsx(TableRow, { className: headerRowClasses, children: headerGroup.headers.map((header) => (_jsx(TableHeaderCell, { className: headerCellClasses, children: flexRender(header.column.columnDef.header, header.getContext()) }, header.id))) }, headerGroup.id))) }), _jsx(TableBody, { children: table.getRowModel().rows.map((row) => (_jsx(TableRow, { className: bodyRowClasses, children: row.getVisibleCells().map((cell) => (_jsx(TableCell, { className: cellClasses, children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id))) }, row.id))) })] }), _jsxs("div", { className: "flex items-center justify-between text-sm", children: [_jsxs("span", { className: "text-gray-500", children: ["Page ", table.getState().pagination.pageIndex + 1, " of", " ", table.getPageCount()] }), _jsxs("span", { className: "flex gap-2", children: [_jsx("button", { className: "px-3 py-1 border rounded disabled:opacity-40", onClick: () => table.previousPage(), disabled: !table.getCanPreviousPage(), children: "Previous" }), _jsx("button", { className: "px-3 py-1 border rounded disabled:opacity-40", onClick: () => table.nextPage(), disabled: !table.getCanNextPage(), children: "Next" })] })] })] }));
|
|
100
|
+
};
|
|
101
|
+
// ────────────────────────────────────────────
|
|
102
|
+
// 5. Combined — sorting + filtering + pagination
|
|
103
|
+
// ────────────────────────────────────────────
|
|
104
|
+
/** All features enabled together: sort by clicking headers, search with the text input, and paginate with the controls. */
|
|
105
|
+
export const Combined = () => {
|
|
106
|
+
const [sorting, setSorting] = useState([]);
|
|
107
|
+
const [globalFilter, setGlobalFilter] = useState("");
|
|
108
|
+
const table = useReactTable({
|
|
109
|
+
data,
|
|
110
|
+
columns,
|
|
111
|
+
state: { sorting, globalFilter },
|
|
112
|
+
onSortingChange: setSorting,
|
|
113
|
+
onGlobalFilterChange: setGlobalFilter,
|
|
114
|
+
getCoreRowModel: getCoreRowModel(),
|
|
115
|
+
getSortedRowModel: getSortedRowModel(),
|
|
116
|
+
getFilteredRowModel: getFilteredRowModel(),
|
|
117
|
+
getPaginationRowModel: getPaginationRowModel(),
|
|
118
|
+
initialState: { pagination: { pageSize: 5 } },
|
|
119
|
+
});
|
|
120
|
+
return (_jsxs("div", { className: "w-[600px] flex flex-col gap-3", children: [_jsx("input", { value: globalFilter, onChange: (e) => setGlobalFilter(e.target.value), placeholder: "Search all columns\u2026", className: "px-3 py-2 border rounded-md text-sm w-60" }), _jsxs(Table, { fullWidth: true, children: [_jsx(TableHead, { children: table.getHeaderGroups().map((headerGroup) => (_jsx(TableRow, { className: headerRowClasses, children: headerGroup.headers.map((header) => (_jsx(TableHeaderCell, { className: `${headerCellClasses} cursor-pointer select-none`, onClick: header.column.getToggleSortingHandler(), children: _jsxs("span", { className: "flex items-center gap-1", children: [flexRender(header.column.columnDef.header, header.getContext()), {
|
|
121
|
+
asc: " ▲",
|
|
122
|
+
desc: " ▼",
|
|
123
|
+
}[header.column.getIsSorted()] ?? null] }) }, header.id))) }, headerGroup.id))) }), _jsxs(TableBody, { children: [table.getRowModel().rows.map((row) => (_jsx(TableRow, { className: bodyRowClasses, children: row.getVisibleCells().map((cell) => (_jsx(TableCell, { className: cellClasses, children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id))) }, row.id))), table.getRowModel().rows.length === 0 && (_jsx(TableRow, { children: _jsx(TableCell, { colSpan: columns.length, className: "px-4 py-8 text-center text-gray-400 text-sm", children: "No results found." }) }))] })] }), _jsxs("div", { className: "flex items-center justify-between text-sm", children: [_jsxs("span", { className: "text-gray-500", children: ["Page ", table.getState().pagination.pageIndex + 1, " of", " ", table.getPageCount()] }), _jsxs("span", { className: "flex gap-2", children: [_jsx("button", { className: "px-3 py-1 border rounded disabled:opacity-40", onClick: () => table.previousPage(), disabled: !table.getCanPreviousPage(), children: "Previous" }), _jsx("button", { className: "px-3 py-1 border rounded disabled:opacity-40", onClick: () => table.nextPage(), disabled: !table.getCanNextPage(), children: "Next" })] })] })] }));
|
|
124
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { cn } from "../../utils/cn";
|
|
4
|
+
export const TableBody = React.forwardRef(({ children, className, ...props }, ref) => (_jsx("tbody", { ref: ref, className: cn(className), ...props, children: children })));
|
|
5
|
+
TableBody.displayName = "TableBody";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { cn } from "../../utils/cn";
|
|
4
|
+
export const TableCell = React.forwardRef(({ children, className, ...props }, ref) => (_jsx("td", { ref: ref, className: cn(className), ...props, children: children })));
|
|
5
|
+
TableCell.displayName = "TableCell";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface TableHeadProps extends React.HTMLAttributes<HTMLTableSectionElement> {
|
|
3
|
+
sticky?: boolean;
|
|
4
|
+
}
|
|
5
|
+
export declare const TableHead: React.ForwardRefExoticComponent<TableHeadProps & React.RefAttributes<HTMLTableSectionElement>>;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { cn } from "../../utils/cn";
|
|
4
|
+
export const TableHead = React.forwardRef(({ children, className, sticky, style, ...props }, ref) => (_jsx("thead", { ref: ref, className: cn(sticky && "sticky top-0", className), style: style, ...props, children: children })));
|
|
5
|
+
TableHead.displayName = "TableHead";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { cn } from "../../utils/cn";
|
|
4
|
+
export const TableHeaderCell = React.forwardRef(({ children, className, ...props }, ref) => (_jsx("th", { ref: ref, className: cn(className), ...props, children: children })));
|
|
5
|
+
TableHeaderCell.displayName = "TableHeaderCell";
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { cn } from "../../utils/cn";
|
|
4
|
+
export const TableRow = React.forwardRef(({ children, className, ...props }, ref) => (_jsx("tr", { ref: ref, className: cn(className), ...props, children: children })));
|
|
5
|
+
TableRow.displayName = "TableRow";
|
package/dist/index.d.ts
CHANGED
|
@@ -2,103 +2,49 @@ export { default as Badge } from "./components/Badge";
|
|
|
2
2
|
export * from "./components/Badge";
|
|
3
3
|
export { default as BaseButton } from "./components/BaseButton";
|
|
4
4
|
export * from "./components/BaseButton";
|
|
5
|
-
export { default as BaseInput } from "./components/BaseInput";
|
|
6
|
-
export * from "./components/BaseInput";
|
|
7
5
|
export { default as BaseToolTip } from "./components/BaseToolTip";
|
|
8
6
|
export * from "./components/BaseToolTip";
|
|
9
|
-
export {
|
|
7
|
+
export { Card } from "./components/Card";
|
|
10
8
|
export * from "./components/Card";
|
|
11
|
-
export { default as CounterButton } from "./components/CounterButton";
|
|
12
|
-
export * from "./components/CounterButton";
|
|
13
|
-
export { default as Description } from "./components/Description";
|
|
14
|
-
export * from "./components/Description";
|
|
15
|
-
export { default as Dropdown } from "./components/Dropdown";
|
|
16
|
-
export * from "./components/Dropdown";
|
|
17
9
|
export { default as DropdownContainer } from "./components/DropdownContainer";
|
|
18
|
-
export * from "./components/DropdownContainer";
|
|
19
10
|
export { default as DropDownIconButton } from "./components/DropDownIconButton";
|
|
20
11
|
export * from "./components/DropDownIconButton";
|
|
21
|
-
export {
|
|
22
|
-
export
|
|
23
|
-
export
|
|
24
|
-
export { default as Footer } from "./components/Footer";
|
|
25
|
-
export * from "./components/Footer";
|
|
12
|
+
export { DynamicSection } from "./components/DynamicSection";
|
|
13
|
+
export type { DynamicSectionProps } from "./components/DynamicSection";
|
|
14
|
+
export { FeatureList } from "./components/FeatureList";
|
|
26
15
|
export { default as GenericList } from "./components/GenericList";
|
|
27
16
|
export * from "./components/GenericList";
|
|
28
|
-
export { default as GetSupport } from "./components/GetSupport";
|
|
29
|
-
export * from "./components/GetSupport";
|
|
30
17
|
export { default as HamburgerButton } from "./components/HamburgerButton";
|
|
31
18
|
export * from "./components/HamburgerButton";
|
|
32
19
|
export { default as Header } from "./components/Header";
|
|
33
20
|
export * from "./components/Header";
|
|
34
|
-
export { default as HeaderFilterIcon } from "./components/HeaderFilterIcon";
|
|
35
|
-
export * from "./components/HeaderFilterIcon";
|
|
36
21
|
export { default as Hero } from "./components/Hero";
|
|
37
22
|
export * from "./components/Hero";
|
|
38
23
|
export { default as IconButton } from "./components/IconButton";
|
|
39
24
|
export * from "./components/IconButton";
|
|
40
25
|
export { default as Image } from "./components/Image";
|
|
41
26
|
export * from "./components/Image";
|
|
42
|
-
export {
|
|
43
|
-
export
|
|
44
|
-
export { default as InfoBanner } from "./components/InfoBanner";
|
|
45
|
-
export * from "./components/InfoBanner";
|
|
46
|
-
export { default as InitialsAvatar } from "./components/InitialsAvatar";
|
|
47
|
-
export * from "./components/InitialsAvatar";
|
|
48
|
-
export { default as Input } from "./components/Input";
|
|
27
|
+
export { InfoBanner } from "./components/InfoBanner";
|
|
28
|
+
export { Input } from "./components/Input";
|
|
49
29
|
export * from "./components/Input";
|
|
50
|
-
export { default as InputAndCheck } from "./components/InputAndCheck";
|
|
51
|
-
export * from "./components/InputAndCheck";
|
|
52
30
|
export { default as MobileMenu } from "./components/MobileMenu";
|
|
53
31
|
export * from "./components/MobileMenu";
|
|
54
|
-
export { default as MultiSelect } from "./components/MultiSelect";
|
|
55
|
-
export * from "./components/MultiSelect";
|
|
56
32
|
export { default as Nav } from "./components/Nav";
|
|
57
33
|
export * from "./components/Nav";
|
|
58
|
-
export { default as
|
|
59
|
-
export * from "./components/NotesList";
|
|
60
|
-
export { default as Page } from "./components/Page";
|
|
34
|
+
export { default as ViewPageTemplate } from "./components/Page";
|
|
61
35
|
export * from "./components/Page";
|
|
62
36
|
export { default as PageSection } from "./components/PageSection";
|
|
63
37
|
export * from "./components/PageSection";
|
|
64
|
-
export {
|
|
65
|
-
export * from "./components/PrimaryTableHeader";
|
|
66
|
-
export { default as SearchInput } from "./components/SearchInput";
|
|
67
|
-
export * from "./components/SearchInput";
|
|
68
|
-
export { default as Slider } from "./components/Slider";
|
|
69
|
-
export * from "./components/Slider";
|
|
70
|
-
export { default as SortArrowIcon } from "./components/SortArrowIcon";
|
|
71
|
-
export * from "./components/SortArrowIcon";
|
|
72
|
-
export { default as SortArrows } from "./components/SortArrows";
|
|
73
|
-
export * from "./components/SortArrows";
|
|
74
|
-
export { default as Submenus } from "./components/Submenus";
|
|
75
|
-
export * from "./components/Submenus";
|
|
76
|
-
export { default as TableCell } from "./components/TableCell";
|
|
77
|
-
export * from "./components/TableCell";
|
|
78
|
-
export { default as TableHeaderContent } from "./components/TableHeaderContent";
|
|
79
|
-
export * from "./components/TableHeaderContent";
|
|
80
|
-
export { default as TableHeaderInput } from "./components/TableHeaderInput";
|
|
81
|
-
export * from "./components/TableHeaderInput";
|
|
82
|
-
export { default as TableRow } from "./components/TableRow";
|
|
83
|
-
export * from "./components/TableRow";
|
|
84
|
-
export * from "./components/TabList";
|
|
38
|
+
export { TabList } from "./components/TabList";
|
|
85
39
|
export { default as Text } from "./components/Text";
|
|
86
40
|
export * from "./components/Text";
|
|
87
41
|
export { default as Toaster } from "./components/Toaster";
|
|
88
42
|
export * from "./components/Toaster";
|
|
89
|
-
export { default as
|
|
90
|
-
export
|
|
91
|
-
export
|
|
92
|
-
export
|
|
93
|
-
export
|
|
94
|
-
export
|
|
95
|
-
export
|
|
96
|
-
export
|
|
97
|
-
export * from "./api/apiFunctions";
|
|
98
|
-
export * from "./api/auth";
|
|
99
|
-
export * from "./api/axiosInstance";
|
|
100
|
-
export * from "./api/checkSsoAuth";
|
|
101
|
-
export * from "./api/events";
|
|
102
|
-
export * from "./api/genericApi";
|
|
103
|
-
export * from "./api/handleSamlAuth";
|
|
104
|
-
export * from "./api/types";
|
|
43
|
+
export { default as EnvironmentBadge } from "./components/EnvironmentBadge";
|
|
44
|
+
export { withStoryBook } from "./hoc";
|
|
45
|
+
export { withMemo } from "./userHoc";
|
|
46
|
+
export { Table, TableHead, TableBody, TableRow, TableHeaderCell, TableCell, } from "./components/Table";
|
|
47
|
+
export type { useTableInfiniteScrollOptions } from "./hooks";
|
|
48
|
+
export { useTableInfiniteScroll } from "./hooks";
|
|
49
|
+
export { formatPhoneNumber, getFontAwesomeIcon, roundNumToDecimalPlaces, formatCurrency, formatDate, validateEmailFormat, assertTagName, formatTimestamp, getEndPointFromEnvironment, } from "./utils";
|
|
50
|
+
export { apiGet, apiPost, apiPut, apiDelete } from "./api/apiFunctions";
|
package/dist/index.js
CHANGED
|
@@ -3,108 +3,50 @@ export { default as Badge } from "./components/Badge";
|
|
|
3
3
|
export * from "./components/Badge";
|
|
4
4
|
export { default as BaseButton } from "./components/BaseButton";
|
|
5
5
|
export * from "./components/BaseButton";
|
|
6
|
-
export { default as BaseInput } from "./components/BaseInput";
|
|
7
|
-
export * from "./components/BaseInput";
|
|
8
6
|
export { default as BaseToolTip } from "./components/BaseToolTip";
|
|
9
7
|
export * from "./components/BaseToolTip";
|
|
10
|
-
export {
|
|
8
|
+
export { Card } from "./components/Card";
|
|
11
9
|
export * from "./components/Card";
|
|
12
|
-
export { default as CounterButton } from "./components/CounterButton";
|
|
13
|
-
export * from "./components/CounterButton";
|
|
14
|
-
export { default as Description } from "./components/Description";
|
|
15
|
-
export * from "./components/Description";
|
|
16
|
-
export { default as Dropdown } from "./components/Dropdown";
|
|
17
|
-
export * from "./components/Dropdown";
|
|
18
10
|
export { default as DropdownContainer } from "./components/DropdownContainer";
|
|
19
|
-
export * from "./components/DropdownContainer";
|
|
20
11
|
export { default as DropDownIconButton } from "./components/DropDownIconButton";
|
|
21
12
|
export * from "./components/DropDownIconButton";
|
|
22
|
-
export {
|
|
23
|
-
export
|
|
24
|
-
export * from "./components/FeatureList";
|
|
25
|
-
export { default as Footer } from "./components/Footer";
|
|
26
|
-
export * from "./components/Footer";
|
|
13
|
+
export { DynamicSection } from "./components/DynamicSection";
|
|
14
|
+
export { FeatureList } from "./components/FeatureList";
|
|
27
15
|
export { default as GenericList } from "./components/GenericList";
|
|
28
16
|
export * from "./components/GenericList";
|
|
29
|
-
export { default as GetSupport } from "./components/GetSupport";
|
|
30
|
-
export * from "./components/GetSupport";
|
|
31
17
|
export { default as HamburgerButton } from "./components/HamburgerButton";
|
|
32
18
|
export * from "./components/HamburgerButton";
|
|
33
19
|
export { default as Header } from "./components/Header";
|
|
34
20
|
export * from "./components/Header";
|
|
35
|
-
export { default as HeaderFilterIcon } from "./components/HeaderFilterIcon";
|
|
36
|
-
export * from "./components/HeaderFilterIcon";
|
|
37
21
|
export { default as Hero } from "./components/Hero";
|
|
38
22
|
export * from "./components/Hero";
|
|
39
23
|
export { default as IconButton } from "./components/IconButton";
|
|
40
24
|
export * from "./components/IconButton";
|
|
41
25
|
export { default as Image } from "./components/Image";
|
|
42
26
|
export * from "./components/Image";
|
|
43
|
-
export {
|
|
44
|
-
export
|
|
45
|
-
export { default as InfoBanner } from "./components/InfoBanner";
|
|
46
|
-
export * from "./components/InfoBanner";
|
|
47
|
-
export { default as InitialsAvatar } from "./components/InitialsAvatar";
|
|
48
|
-
export * from "./components/InitialsAvatar";
|
|
49
|
-
export { default as Input } from "./components/Input";
|
|
27
|
+
export { InfoBanner } from "./components/InfoBanner";
|
|
28
|
+
export { Input } from "./components/Input";
|
|
50
29
|
export * from "./components/Input";
|
|
51
|
-
export { default as InputAndCheck } from "./components/InputAndCheck";
|
|
52
|
-
export * from "./components/InputAndCheck";
|
|
53
30
|
export { default as MobileMenu } from "./components/MobileMenu";
|
|
54
31
|
export * from "./components/MobileMenu";
|
|
55
|
-
export { default as MultiSelect } from "./components/MultiSelect";
|
|
56
|
-
export * from "./components/MultiSelect";
|
|
57
32
|
export { default as Nav } from "./components/Nav";
|
|
58
33
|
export * from "./components/Nav";
|
|
59
|
-
export { default as
|
|
60
|
-
export * from "./components/NotesList";
|
|
61
|
-
export { default as Page } from "./components/Page";
|
|
34
|
+
export { default as ViewPageTemplate } from "./components/Page";
|
|
62
35
|
export * from "./components/Page";
|
|
63
36
|
export { default as PageSection } from "./components/PageSection";
|
|
64
37
|
export * from "./components/PageSection";
|
|
65
|
-
export {
|
|
66
|
-
export * from "./components/PrimaryTableHeader";
|
|
67
|
-
export { default as SearchInput } from "./components/SearchInput";
|
|
68
|
-
export * from "./components/SearchInput";
|
|
69
|
-
export { default as Slider } from "./components/Slider";
|
|
70
|
-
export * from "./components/Slider";
|
|
71
|
-
export { default as SortArrowIcon } from "./components/SortArrowIcon";
|
|
72
|
-
export * from "./components/SortArrowIcon";
|
|
73
|
-
export { default as SortArrows } from "./components/SortArrows";
|
|
74
|
-
export * from "./components/SortArrows";
|
|
75
|
-
export { default as Submenus } from "./components/Submenus";
|
|
76
|
-
export * from "./components/Submenus";
|
|
77
|
-
export { default as TableCell } from "./components/TableCell";
|
|
78
|
-
export * from "./components/TableCell";
|
|
79
|
-
export { default as TableHeaderContent } from "./components/TableHeaderContent";
|
|
80
|
-
export * from "./components/TableHeaderContent";
|
|
81
|
-
export { default as TableHeaderInput } from "./components/TableHeaderInput";
|
|
82
|
-
export * from "./components/TableHeaderInput";
|
|
83
|
-
export { default as TableRow } from "./components/TableRow";
|
|
84
|
-
export * from "./components/TableRow";
|
|
85
|
-
export * from "./components/TabList";
|
|
38
|
+
export { TabList } from "./components/TabList";
|
|
86
39
|
export { default as Text } from "./components/Text";
|
|
87
40
|
export * from "./components/Text";
|
|
88
41
|
export { default as Toaster } from "./components/Toaster";
|
|
89
42
|
export * from "./components/Toaster";
|
|
90
|
-
export { default as
|
|
91
|
-
export * from "./components/ToggleButton";
|
|
92
|
-
// Hooks
|
|
93
|
-
export * from "./hooks";
|
|
94
|
-
// Utils
|
|
95
|
-
export * from "./utils";
|
|
43
|
+
export { default as EnvironmentBadge } from "./components/EnvironmentBadge";
|
|
96
44
|
// HOC
|
|
97
|
-
export
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
export
|
|
101
|
-
export
|
|
102
|
-
//
|
|
103
|
-
export
|
|
104
|
-
export
|
|
105
|
-
export * from "./api/axiosInstance";
|
|
106
|
-
export * from "./api/checkSsoAuth";
|
|
107
|
-
export * from "./api/events";
|
|
108
|
-
export * from "./api/genericApi";
|
|
109
|
-
export * from "./api/handleSamlAuth";
|
|
110
|
-
export * from "./api/types";
|
|
45
|
+
export { withStoryBook } from "./hoc";
|
|
46
|
+
export { withMemo } from "./userHoc";
|
|
47
|
+
// Table Components
|
|
48
|
+
export { Table, TableHead, TableBody, TableRow, TableHeaderCell, TableCell, } from "./components/Table";
|
|
49
|
+
export { useTableInfiniteScroll } from "./hooks";
|
|
50
|
+
// Utils
|
|
51
|
+
export { formatPhoneNumber, getFontAwesomeIcon, roundNumToDecimalPlaces, formatCurrency, formatDate, validateEmailFormat, assertTagName, formatTimestamp, getEndPointFromEnvironment, } from "./utils";
|
|
52
|
+
export { apiGet, apiPost, apiPut, apiDelete } from "./api/apiFunctions";
|
package/dist/main.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
/*! tailwindcss v3.4.6 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.visible{visibility:visible}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.-right-2{right:-.5rem}.-top-2{top:-.5rem}.bottom-1{bottom:.25rem}.left-1{left:.25rem}.left-2{left:.5rem}.left-3{left:.75rem}.right-1{right:.25rem}.top-0{top:0}.top-1{top:.25rem}.top-10{top:2.5rem}.top-16{top:4rem}.top-2{top:.5rem}.top-3{top:.75rem}.z-10{z-index:10}.z-\[1000\]{z-index:1000}.order-first{order:-9999}.order-last{order:9999}.col-span-6{grid-column:span 6/span 6}.m-0{margin:0}.m-2{margin:.5rem}.m-4{margin:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-20{margin-top:5rem;margin-bottom:5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-8{margin-top:2rem;margin-bottom:2rem}.my-auto{margin-top:auto;margin-bottom:auto}.-ml-\[20px\]{margin-left:-20px}.mb-0{margin-bottom:0}.mb-1{margin-bottom:.25rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-8{margin-left:2rem}.mr-2{margin-right:.5rem}.mr-8{margin-right:2rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-auto{margin-top:auto}.block{display:block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-20{height:5rem}.h-3{height:.75rem}.h-36{height:9rem}.h-4{height:1rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-8{height:2rem}.h-\[100\%\]{height:100%}.h-\[100px\]{height:100px}.h-\[30px\]{height:30px}.h-\[32px\]{height:32px}.h-\[80px\]{height:80px}.h-\[fit-content\]{height:-moz-fit-content;height:fit-content}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.max-h-0{max-height:0}.max-h-60{max-height:15rem}.max-h-96{max-height:24rem}.max-h-fit{max-height:-moz-fit-content;max-height:fit-content}.max-h-full{max-height:100%}.min-h-20{min-height:5rem}.min-h-72{min-height:18rem}.min-h-96{min-height:24rem}.min-h-fit{min-height:-moz-fit-content;min-height:fit-content}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2\/3{width:66.666667%}.w-24{width:6rem}.w-3{width:.75rem}.w-3\/4{width:75%}.w-36{width:9rem}.w-4{width:1rem}.w-40{width:10rem}.w-48{width:12rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-72{width:18rem}.w-8{width:2rem}.w-96{width:24rem}.w-\[10\%\]{width:10%}.w-\[100px\]{width:100px}.w-\[30px\]{width:30px}.w-\[40rem\]{width:40rem}.w-\[80px\]{width:80px}.w-\[fit-content\]{width:-moz-fit-content;width:fit-content}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.min-w-14{min-width:3.5rem}.min-w-\[120px\]{min-width:120px}.min-w-\[200px\]{min-width:200px}.min-w-full{min-width:100%}.min-w-navDropDown{min-width:25em}.max-w-72{max-width:18rem}.max-w-\[320px\]{max-width:320px}.max-w-\[408px\]{max-width:408px}.max-w-pageSectionMaxWidth{max-width:1500px}.flex-1{flex:1 1 0%}.flex-auto{flex:1 1 auto}.flex-shrink-0{flex-shrink:0}.rotate-180{--tw-rotate:180deg}.rotate-180,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-items-center{justify-items:center}.gap-1{gap:.25rem}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.gap-\[4px\]{gap:4px}.gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.gap-y-12{row-gap:3rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.25rem*var(--tw-space-x-reverse));margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem*var(--tw-space-y-reverse))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-right-width:calc(1px*var(--tw-divide-x-reverse));border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(229 231 235/var(--tw-divide-opacity))}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-x-scroll{overflow-x:scroll}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-x{border-left-width:1px;border-right-width:1px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l-4{border-left-width:4px}.border-none{border-style:none}.border-\[\#00B9A8\]{--tw-border-opacity:1;border-color:rgb(0 185 168/var(--tw-border-opacity))}.border-\[\#DFE4EA\]{--tw-border-opacity:1;border-color:rgb(223 228 234/var(--tw-border-opacity))}.border-black{--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-gray-500{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity))}.border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.border-orange-500{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity))}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity))}.border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity))}.border-slate-50{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity))}.border-teal-500{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity))}.border-transparent{border-color:#0000}.border-b-blue-700{--tw-border-opacity:1;border-bottom-color:rgb(29 78 216/var(--tw-border-opacity))}.border-b-teal-700{--tw-border-opacity:1;border-bottom-color:rgb(15 118 110/var(--tw-border-opacity))}.bg-\[\#9ca3af\]{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity))}.bg-\[\#DAF8E6\]{--tw-bg-opacity:1;background-color:rgb(218 248 230/var(--tw-bg-opacity))}.bg-\[\#DBEAFE\]{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity))}.bg-blue-400{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity))}.bg-blue-800{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity))}.bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity))}.bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity))}.bg-slate-600{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity))}.bg-teal-100{--tw-bg-opacity:1;background-color:rgb(204 251 241/var(--tw-bg-opacity))}.bg-teal-500{--tw-bg-opacity:1;background-color:rgb(20 184 166/var(--tw-bg-opacity))}.bg-teal-600{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity))}.bg-teal-700{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity))}.bg-transparent{background-color:initial}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-cyan-700{--tw-gradient-from:#0e7490 var(--tw-gradient-from-position);--tw-gradient-to:#0e749000 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-blue-900{--tw-gradient-to:#1e3a8a var(--tw-gradient-to-position)}.bg-cover{background-size:cover}.bg-no-repeat{background-repeat:no-repeat}.fill-current{fill:currentColor}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-\[10px\]{padding-left:10px;padding-right:10px}.px-\[8px\]{padding-left:8px;padding-right:8px}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-\[3px\]{padding-top:3px;padding-bottom:3px}.py-\[4px\]{padding-top:4px;padding-bottom:4px}.pb-0{padding-bottom:0}.pb-1{padding-bottom:.25rem}.pb-12{padding-bottom:3rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pl-1{padding-left:.25rem}.pl-10{padding-left:2.5rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pt-0{padding-top:0}.pt-16{padding-top:4rem}.pt-2{padding-top:.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace}.font-sans{font-family:ui-sans-serif}.font-serif{font-family:ui-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl,.text-4xl{font-size:2.25rem}.text-4xl{line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-6xl{font-size:3.75rem;line-height:1}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.uppercase{text-transform:uppercase}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity))}.text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity))}.text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity))}.text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity))}.text-slate-950{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity))}.text-teal-600{--tw-text-opacity:1;color:rgb(13 148 136/var(--tw-text-opacity))}.text-teal-700{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity))}.text-teal-800{--tw-text-opacity:1;color:rgb(17 94 89/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-yellow-300{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity))}.text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity))}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-50{opacity:.5}.shadow{--tw-shadow:0 1px 3px 0 #0000001a,0 1px 2px -1px #0000001a;--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid #0000;outline-offset:2px}.outline{outline-style:solid}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[max-height\]{transition-property:max-height;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.delay-150{transition-delay:.15s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.hover\:-translate-y-1:hover{--tw-translate-y:-0.25rem}.hover\:-translate-y-1:hover,.hover\:scale-110:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1}.hover\:cursor-pointer:hover{cursor:pointer}.hover\:border-none:hover{border-style:none}.hover\:border-blue-700:hover{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity))}.hover\:border-gray-400:hover{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.hover\:border-green-500:hover{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity))}.hover\:border-green-900:hover{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity))}.hover\:border-red-700:hover{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}.hover\:border-teal-500:hover{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity))}.hover\:border-teal-600:hover{--tw-border-opacity:1;border-color:rgb(13 148 136/var(--tw-border-opacity))}.hover\:bg-\[\#FFEBEE\]:hover{--tw-bg-opacity:1;background-color:rgb(255 235 238/var(--tw-bg-opacity))}.hover\:bg-black:hover{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity))}.hover\:bg-blue-500:hover{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.hover\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity))}.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity))}.hover\:bg-green-500:hover{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity))}.hover\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.hover\:bg-teal-700:hover{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity))}.hover\:bg-teal-800:hover{--tw-bg-opacity:1;background-color:rgb(17 94 89/var(--tw-bg-opacity))}.hover\:text-black:hover{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity))}.hover\:text-blue-500:hover{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity))}.hover\:text-green-500:hover{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-inner:hover{--tw-shadow:inset 0 2px 4px 0 #0000000d;--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.group:hover .group-hover\:bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity))}.group:hover .group-hover\:text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity))}@media not all and (min-width:1280px){.max-xl\:flex{display:flex}.max-xl\:hidden{display:none}.max-xl\:justify-end{justify-content:flex-end}.max-xl\:gap-1{gap:.25rem}.max-xl\:gap-10{gap:2.5rem}.max-xl\:px-2{padding-left:.5rem;padding-right:.5rem}.max-xl\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media not all and (min-width:1024px){.max-lg\:flex{display:flex}.max-lg\:w-full{width:100%}.max-lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.max-lg\:flex-col{flex-direction:column}.max-lg\:justify-between{justify-content:space-between}.max-lg\:justify-items-center{justify-items:center}.max-lg\:gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.max-lg\:gap-y-12{row-gap:3rem}.max-lg\:gap-y-24{row-gap:6rem}.max-lg\:text-xl{font-size:1.25rem;line-height:1.75rem}.max-lg\:transition-none{transition-property:none}.max-lg\:hover\:transform-none:hover{transform:none}}@media not all and (min-width:768px){.max-md\:flex{display:flex}.max-md\:hidden{display:none}.max-md\:gap-12{gap:3rem}.max-md\:p-0{padding:0}.max-md\:text-sm{font-size:.875rem;line-height:1.25rem}}@media not all and (min-width:640px){.max-sm\:mb-1{margin-bottom:.25rem}.max-sm\:mb-2{margin-bottom:.5rem}.max-sm\:flex{display:flex}.max-sm\:hidden{display:none}.max-sm\:w-1\/2{width:50%}.max-sm\:w-3\/4{width:75%}.max-sm\:w-\[90\%\]{width:90%}.max-sm\:w-full{width:100%}.max-sm\:flex-row{flex-direction:row}.max-sm\:flex-col{flex-direction:column}.max-sm\:items-end{align-items:flex-end}.max-sm\:justify-between{justify-content:space-between}.max-sm\:gap-8{gap:2rem}.max-sm\:p-2{padding:.5rem}.max-sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.max-sm\:text-xl{font-size:1.25rem;line-height:1.75rem}.max-sm\:text-xs{font-size:.75rem;line-height:1rem}}@media (min-width:640px){.sm\:static{position:static}.sm\:left-5{left:1.25rem}.sm\:top-5{top:1.25rem}.sm\:m-20{margin:5rem}.sm\:m-5{margin:1.25rem}.sm\:mb-0{margin-bottom:0}.sm\:mb-2{margin-bottom:.5rem}.sm\:mb-4{margin-bottom:1rem}.sm\:mb-5{margin-bottom:1.25rem}.sm\:ml-5{margin-left:1.25rem}.sm\:mt-0{margin-top:0}.sm\:mt-20{margin-top:5rem}.sm\:mt-4{margin-top:1rem}.sm\:mt-auto{margin-top:auto}.sm\:h-20{height:5rem}.sm\:h-64{height:16rem}.sm\:h-8{height:2rem}.sm\:h-\[100px\]{height:100px}.sm\:h-\[120px\]{height:120px}.sm\:h-\[255px\]{height:255px}.sm\:h-\[300px\]{height:300px}.sm\:h-\[350px\]{height:350px}.sm\:h-\[40px\]{height:40px}.sm\:h-\[500px\]{height:500px}.sm\:h-auto{height:auto}.sm\:w-24{width:6rem}.sm\:w-8{width:2rem}.sm\:w-\[100px\]{width:100px}.sm\:w-\[120px\]{width:120px}.sm\:w-\[244px\]{width:244px}.sm\:w-\[300px\]{width:300px}.sm\:w-auto{width:auto}.sm\:min-w-\[150px\]{min-width:150px}.sm\:max-w-\[408px\]{max-width:408px}.sm\:max-w-full{max-width:100%}.sm\:flex-row{flex-direction:row}.sm\:p-3{padding:.75rem}.sm\:p-4{padding:1rem}.sm\:p-6{padding:1.5rem}.sm\:px-3{padding-left:.75rem;padding-right:.75rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-5{padding-left:1.25rem;padding-right:1.25rem}.sm\:px-\[14px\]{padding-left:14px;padding-right:14px}.sm\:py-2{padding-top:.5rem;padding-bottom:.5rem}.sm\:py-\[8px\]{padding-top:8px;padding-bottom:8px}.sm\:pb-5{padding-bottom:1.25rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-base{font-size:1rem;line-height:1.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:text-xs{font-size:.75rem;line-height:1rem}}@media (min-width:768px){.md\:p-8{padding:2rem}.md\:text-3xl{font-size:2.25rem}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width:1024px){.lg\:max-h-view-page{max-height:1000px}.lg\:gap-10{gap:2.5rem}.lg\:p-10{padding:2.5rem}.lg\:text-2xl{font-size:1.5rem;line-height:2rem}.lg\:text-4xl{font-size:2.25rem;line-height:2.5rem}}@media (min-width:1536px){.\32xl\:flex{display:flex}}.rtl\:space-x-reverse:where([dir=rtl],[dir=rtl] *)>:not([hidden])~:not([hidden]){--tw-space-x-reverse:1}.\[\&\:has\(\:focus-visible\)\]\:ring-2:has(:focus-visible){--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}
|
|
1
|
+
*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.collapse{visibility:collapse}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.-right-2{right:-.5rem}.-right-4{right:-1rem}.-top-1{top:-.25rem}.bottom-0{bottom:0}.bottom-1\.5{bottom:.375rem}.bottom-4{bottom:1rem}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:.5rem}.left-3{left:.75rem}.left-4{left:1rem}.left-\[10px\]{left:10px}.left-\[3px\]{left:3px}.left-\[5px\]{left:5px}.left-full{left:100%}.right-0{right:0}.right-16{right:4rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-6{right:1.5rem}.right-full{right:100%}.top-0{top:0}.top-0\.5{top:.125rem}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-10{top:2.5rem}.top-12{top:3rem}.top-16{top:4rem}.top-2{top:.5rem}.top-3{top:.75rem}.top-6{top:1.5rem}.top-\[-14px\]{top:-14px}.top-\[-5px\]{top:-5px}.top-\[10px\]{top:10px}.top-\[12px\]{top:12px}.top-\[3px\]{top:3px}.top-\[5px\]{top:5px}.top-\[8px\]{top:8px}.top-full{top:100%}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[1000\]{z-index:1000}.z-\[9989\]{z-index:9989}.order-first{order:-9999}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-6{grid-column:span 6/span 6}.m-0{margin:0}.m-2{margin:.5rem}.m-4{margin:1rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-12{margin-left:3rem;margin-right:3rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-20{margin-top:5rem;margin-bottom:5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-8{margin-top:2rem;margin-bottom:2rem}.my-auto{margin-top:auto;margin-bottom:auto}.-ml-\[20px\]{margin-left:-20px}.mb-0{margin-bottom:0}.mb-1{margin-bottom:.25rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.mr-8{margin-right:2rem}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-auto{margin-top:auto}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.\!table{display:table!important}.table{display:table}.table-row{display:table-row}.grid{display:grid}.hidden{display:none}.size-5{width:1.25rem;height:1.25rem}.size-80{width:20rem;height:20rem}.size-96{width:24rem;height:24rem}.size-\[18px\]{width:18px;height:18px}.h-0\.5{height:.125rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-18px{height:18px}.h-2{height:.5rem}.h-20{height:5rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-36{height:9rem}.h-4{height:1rem}.h-42px{height:42px}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-72{height:18rem}.h-8{height:2rem}.h-\[1\.25rem\]{height:1.25rem}.h-\[100\%\]{height:100%}.h-\[100px\]{height:100px}.h-\[300px\]{height:300px}.h-\[30px\]{height:30px}.h-\[32px\]{height:32px}.h-\[50px\]{height:50px}.h-\[75px\]{height:75px}.h-\[80px\]{height:80px}.h-\[9px\]{height:9px}.h-\[fit-content\]{height:-moz-fit-content;height:fit-content}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-0{max-height:0}.max-h-11{max-height:2.75rem}.max-h-16{max-height:4rem}.max-h-36{max-height:9rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-72{max-height:18rem}.max-h-80{max-height:20rem}.max-h-96{max-height:24rem}.max-h-\[300px\]{max-height:300px}.max-h-fit{max-height:-moz-fit-content;max-height:fit-content}.max-h-full{max-height:100%}.min-h-12{min-height:3rem}.min-h-20{min-height:5rem}.min-h-72{min-height:18rem}.min-h-8{min-height:2rem}.min-h-96{min-height:24rem}.min-h-\[40px\]{min-height:40px}.min-h-fit{min-height:-moz-fit-content;min-height:fit-content}.min-h-full{min-height:100%}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-1\/4{width:25%}.w-10{width:2.5rem}.w-11{width:2.75rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-18px{width:18px}.w-2\/3{width:66.666667%}.w-20{width:5rem}.w-24{width:6rem}.w-26px{width:26px}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-40{width:10rem}.w-42px{width:42px}.w-44{width:11rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-64{width:16rem}.w-72{width:18rem}.w-8{width:2rem}.w-96{width:24rem}.w-\[10\%\]{width:10%}.w-\[100px\]{width:100px}.w-\[200px\]{width:200px}.w-\[2rem\]{width:2rem}.w-\[300px\]{width:300px}.w-\[30px\]{width:30px}.w-\[344px\]{width:344px}.w-\[40rem\]{width:40rem}.w-\[425px\]{width:425px}.w-\[500px\]{width:500px}.w-\[600px\]{width:600px}.w-\[75px\]{width:75px}.w-\[80px\]{width:80px}.w-\[9px\]{width:9px}.w-\[fit-content\]{width:-moz-fit-content;width:fit-content}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.min-w-10{min-width:2.5rem}.min-w-14{min-width:3.5rem}.min-w-20{min-width:5rem}.min-w-28{min-width:7rem}.min-w-4{min-width:1rem}.min-w-40{min-width:10rem}.min-w-44{min-width:11rem}.min-w-52{min-width:13rem}.min-w-96{min-width:24rem}.min-w-\[120px\]{min-width:120px}.min-w-\[180px\]{min-width:180px}.min-w-\[200px\]{min-width:200px}.min-w-\[250px\]{min-width:250px}.min-w-\[300px\]{min-width:300px}.min-w-\[700px\]{min-width:700px}.min-w-full{min-width:100%}.min-w-navDropDown{min-width:25em}.max-w-14{max-width:3.5rem}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-44{max-width:11rem}.max-w-52{max-width:13rem}.max-w-72{max-width:18rem}.max-w-\[180px\]{max-width:180px}.max-w-\[250px\]{max-width:250px}.max-w-\[320px\]{max-width:320px}.max-w-\[408px\]{max-width:408px}.max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.max-w-lg{max-width:32rem}.max-w-pageSectionMaxWidth{max-width:1500px}.flex-1{flex:1 1 0%}.flex-\[1\]{flex:1}.flex-\[2\]{flex:2}.flex-auto{flex:1 1 auto}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.rotate-0{--tw-rotate:0deg}.rotate-0,.rotate-180{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate:180deg}.scale-0{--tw-scale-x:0;--tw-scale-y:0}.scale-0,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.cursor-none{cursor:none}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-items-center{justify-items:center}.gap-1{gap:.25rem}.gap-12{gap:3rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.gap-y-12{row-gap:3rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.25rem*var(--tw-space-x-reverse));margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.space-x-3>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.75rem*var(--tw-space-x-reverse));margin-left:calc(.75rem*(1 - var(--tw-space-x-reverse)))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem*var(--tw-space-y-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem*var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem*var(--tw-space-y-reverse))}.divide-x>:not([hidden])~:not([hidden]){--tw-divide-x-reverse:0;border-right-width:calc(1px*var(--tw-divide-x-reverse));border-left-width:calc(1px*(1 - var(--tw-divide-x-reverse)))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px*var(--tw-divide-y-reverse))}.divide-gray-200>:not([hidden])~:not([hidden]){--tw-divide-opacity:1;border-color:rgb(229 231 235/var(--tw-divide-opacity,1))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-x-scroll{overflow-x:scroll}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.text-nowrap{text-wrap:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-\[3px\]{border-radius:3px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-tl-lg{border-top-left-radius:.5rem}.rounded-tl-none{border-top-left-radius:0}.rounded-tr-lg{border-top-right-radius:.5rem}.border{border-width:1px}.border-0{border-width:0}.border-2{border-width:2px}.border-4{border-width:4px}.border-y{border-top-width:1px}.border-b,.border-y{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-r-0{border-right-width:0}.border-r-2{border-right-width:2px}.border-t{border-top-width:1px}.border-t-0{border-top-width:0}.border-none{border-style:none}.border-\[\#00B9A8\]{--tw-border-opacity:1;border-color:rgb(0 185 168/var(--tw-border-opacity,1))}.border-\[\#DFE4EA\]{--tw-border-opacity:1;border-color:rgb(223 228 234/var(--tw-border-opacity,1))}.border-black{--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity,1))}.border-blue-300{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.border-gray-500{--tw-border-opacity:1;border-color:rgb(107 114 128/var(--tw-border-opacity,1))}.border-green-500{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity,1))}.border-green-600{--tw-border-opacity:1;border-color:rgb(22 163 74/var(--tw-border-opacity,1))}.border-orange-500{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity,1))}.border-orange-900{--tw-border-opacity:1;border-color:rgb(124 45 18/var(--tw-border-opacity,1))}.border-purple-300{--tw-border-opacity:1;border-color:rgb(216 180 254/var(--tw-border-opacity,1))}.border-purple-500{--tw-border-opacity:1;border-color:rgb(168 85 247/var(--tw-border-opacity,1))}.border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity,1))}.border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.border-slate-50{--tw-border-opacity:1;border-color:rgb(248 250 252/var(--tw-border-opacity,1))}.border-teal-500{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity,1))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.border-yellow-500{--tw-border-opacity:1;border-color:rgb(234 179 8/var(--tw-border-opacity,1))}.border-b-blue-700{--tw-border-opacity:1;border-bottom-color:rgb(29 78 216/var(--tw-border-opacity,1))}.border-b-teal-700{--tw-border-opacity:1;border-bottom-color:rgb(15 118 110/var(--tw-border-opacity,1))}.bg-\[\#9ca3af\]{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.bg-\[\#DAF8E6\]{--tw-bg-opacity:1;background-color:rgb(218 248 230/var(--tw-bg-opacity,1))}.bg-\[\#DBEAFE\]{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.bg-blue-200{--tw-bg-opacity:1;background-color:rgb(191 219 254/var(--tw-bg-opacity,1))}.bg-blue-300{--tw-bg-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity,1))}.bg-blue-400{--tw-bg-opacity:1;background-color:rgb(96 165 250/var(--tw-bg-opacity,1))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.bg-blue-800{--tw-bg-opacity:1;background-color:rgb(30 64 175/var(--tw-bg-opacity,1))}.bg-crimson-700{--tw-bg-opacity:1;background-color:rgb(214 0 39/var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.bg-green-200{--tw-bg-opacity:1;background-color:rgb(187 247 208/var(--tw-bg-opacity,1))}.bg-green-400{--tw-bg-opacity:1;background-color:rgb(74 222 128/var(--tw-bg-opacity,1))}.bg-green-500{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.bg-honey-100{--tw-bg-opacity:1;background-color:rgb(255 232 184/var(--tw-bg-opacity,1))}.bg-indigo-100{--tw-bg-opacity:1;background-color:rgb(211 207 255/var(--tw-bg-opacity,1))}.bg-mauve-100{--tw-bg-opacity:1;background-color:rgb(246 226 228/var(--tw-bg-opacity,1))}.bg-mint-200{--tw-bg-opacity:1;background-color:rgb(234 252 232/var(--tw-bg-opacity,1))}.bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.bg-pink-100{--tw-bg-opacity:1;background-color:rgb(252 231 243/var(--tw-bg-opacity,1))}.bg-pink-300{--tw-bg-opacity:1;background-color:rgb(249 168 212/var(--tw-bg-opacity,1))}.bg-pumpkin-100{--tw-bg-opacity:1;background-color:rgb(255 208 185/var(--tw-bg-opacity,1))}.bg-purple-100{--tw-bg-opacity:1;background-color:rgb(243 232 255/var(--tw-bg-opacity,1))}.bg-purple-200{--tw-bg-opacity:1;background-color:rgb(233 213 255/var(--tw-bg-opacity,1))}.bg-purple-300{--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity,1))}.bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.bg-red-200{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity,1))}.bg-red-400{--tw-bg-opacity:1;background-color:rgb(248 113 113/var(--tw-bg-opacity,1))}.bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.bg-sky-100{--tw-bg-opacity:1;background-color:rgb(224 242 254/var(--tw-bg-opacity,1))}.bg-sky-500{--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,1))}.bg-slate-100{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity,1))}.bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.bg-slate-600{--tw-bg-opacity:1;background-color:rgb(71 85 105/var(--tw-bg-opacity,1))}.bg-teal-100{--tw-bg-opacity:1;background-color:rgb(204 251 241/var(--tw-bg-opacity,1))}.bg-teal-500{--tw-bg-opacity:1;background-color:rgb(20 184 166/var(--tw-bg-opacity,1))}.bg-teal-600{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity,1))}.bg-teal-700{--tw-bg-opacity:1;background-color:rgb(15 118 110/var(--tw-bg-opacity,1))}.bg-transparent{background-color:transparent}.bg-violet-100{--tw-bg-opacity:1;background-color:rgb(230 206 255/var(--tw-bg-opacity,1))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.bg-yellow-400{--tw-bg-opacity:1;background-color:rgb(250 204 21/var(--tw-bg-opacity,1))}.bg-opacity-50{--tw-bg-opacity:0.5}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-cyan-700{--tw-gradient-from:#0e7490 var(--tw-gradient-from-position);--tw-gradient-to:rgba(14,116,144,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-blue-900{--tw-gradient-to:#1e3a8a var(--tw-gradient-to-position)}.bg-cover{background-size:cover}.bg-no-repeat{background-repeat:no-repeat}.fill-blue-500{fill:#3b82f6}.fill-current{fill:currentColor}.fill-red-500{fill:#ef4444}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-0{padding-bottom:0}.pb-0\.5{padding-bottom:.125rem}.pb-1{padding-bottom:.25rem}.pb-12{padding-bottom:3rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pl-1{padding-left:.25rem}.pl-10{padding-left:2.5rem}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-8{padding-left:2rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-2\.5{padding-right:.625rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-5{padding-right:1.25rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-16{padding-top:4rem}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-\[1px\]{padding-top:1px}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace}.font-sans{font-family:ui-sans-serif}.font-serif{font-family:ui-serif}.text-11px{font-size:11px}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl,.text-4xl{font-size:2.25rem}.text-4xl{line-height:2.5rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.text-xxs{font-size:.6rem}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-\[18px\]{line-height:18px}.leading-relaxed{line-height:1.625}.text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.text-blue-400{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.text-crimson-700{--tw-text-opacity:1;color:rgb(214 0 39/var(--tw-text-opacity,1))}.text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.text-neutral-200{--tw-text-opacity:1;color:rgb(229 229 229/var(--tw-text-opacity,1))}.text-neutral-600{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity,1))}.text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity,1))}.text-purple-500{--tw-text-opacity:1;color:rgb(168 85 247/var(--tw-text-opacity,1))}.text-purple-700{--tw-text-opacity:1;color:rgb(126 34 206/var(--tw-text-opacity,1))}.text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.text-sky-500{--tw-text-opacity:1;color:rgb(14 165 233/var(--tw-text-opacity,1))}.text-sky-700{--tw-text-opacity:1;color:rgb(3 105 161/var(--tw-text-opacity,1))}.text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.text-slate-950{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity,1))}.text-teal-700{--tw-text-opacity:1;color:rgb(15 118 110/var(--tw-text-opacity,1))}.text-teal-800{--tw-text-opacity:1;color:rgb(17 94 89/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.text-yellow-300{--tw-text-opacity:1;color:rgb(253 224 71/var(--tw-text-opacity,1))}.text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity,1))}.text-yellow-800{--tw-text-opacity:1;color:rgb(133 77 14/var(--tw-text-opacity,1))}.underline{text-decoration-line:underline}.placeholder-gray-400::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}.placeholder-gray-400::placeholder{--tw-placeholder-opacity:1;color:rgb(156 163 175/var(--tw-placeholder-opacity,1))}.opacity-0{opacity:0}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-inner{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 rgba(0,0,0,.05);--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-md{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.outline-0{outline-width:0}.blur{--tw-blur:blur(8px)}.blur,.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[max-height\]{transition-property:max-height;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.delay-150{transition-delay:.15s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.placeholder\:text-gray-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.placeholder\:text-gray-500::placeholder{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.placeholder\:text-green-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.placeholder\:text-green-500::placeholder{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:left-\[3px\]:after{content:var(--tw-content);left:3px}.after\:left-\[4px\]:after{content:var(--tw-content);left:4px}.after\:top-1:after{content:var(--tw-content);top:.25rem}.after\:top-\[4\.5px\]:after{content:var(--tw-content);top:4.5px}.after\:h-3:after{content:var(--tw-content);height:.75rem}.after\:h-\[19px\]:after{content:var(--tw-content);height:19px}.after\:w-3:after{content:var(--tw-content);width:.75rem}.after\:w-\[19px\]:after{content:var(--tw-content);width:19px}.after\:rounded-full:after{content:var(--tw-content);border-radius:9999px}.after\:bg-gray-300:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.after\:bg-purple-300:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(216 180 254/var(--tw-bg-opacity,1))}.after\:bg-red-300:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(252 165 165/var(--tw-bg-opacity,1))}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.after\:content-\[\'\'\]:after{--tw-content:"";content:var(--tw-content)}.checked\:border-blue-600:checked{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.checked\:bg-blue-600:checked{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.hover\:-translate-y-1:hover{--tw-translate-y:-0.25rem}.hover\:-translate-y-1:hover,.hover\:scale-105:hover{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05}.hover\:scale-110:hover{--tw-scale-x:1.1;--tw-scale-y:1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:cursor-not-allowed:hover{cursor:not-allowed}.hover\:cursor-pointer:hover{cursor:pointer}.hover\:border-2:hover{border-width:2px}.hover\:border-none:hover{border-style:none}.hover\:border-black:hover{--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity,1))}.hover\:border-blue-500:hover{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.hover\:border-blue-700:hover{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity,1))}.hover\:border-gray-400:hover{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity,1))}.hover\:border-green-500:hover{--tw-border-opacity:1;border-color:rgb(34 197 94/var(--tw-border-opacity,1))}.hover\:border-green-900:hover{--tw-border-opacity:1;border-color:rgb(20 83 45/var(--tw-border-opacity,1))}.hover\:border-red-700:hover{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity,1))}.hover\:border-teal-500:hover{--tw-border-opacity:1;border-color:rgb(20 184 166/var(--tw-border-opacity,1))}.hover\:border-teal-600:hover{--tw-border-opacity:1;border-color:rgb(13 148 136/var(--tw-border-opacity,1))}.hover\:bg-\[\#FFEBEE\]:hover{--tw-bg-opacity:1;background-color:rgb(255 235 238/var(--tw-bg-opacity,1))}.hover\:bg-black:hover{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.hover\:bg-blue-50:hover{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.hover\:bg-blue-500:hover{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.hover\:bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.hover\:bg-gray-200:hover{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.hover\:bg-gray-300:hover{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.hover\:bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.hover\:bg-gray-700:hover{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.hover\:bg-green-500:hover{--tw-bg-opacity:1;background-color:rgb(34 197 94/var(--tw-bg-opacity,1))}.hover\:bg-green-600:hover{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.hover\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity,1))}.hover\:bg-orange-50:hover{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.hover\:bg-purple-500:hover{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.hover\:bg-red-200:hover{--tw-bg-opacity:1;background-color:rgb(254 202 202/var(--tw-bg-opacity,1))}.hover\:bg-sky-600:hover{--tw-bg-opacity:1;background-color:rgb(2 132 199/var(--tw-bg-opacity,1))}.hover\:bg-slate-300:hover{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity,1))}.hover\:bg-teal-600:hover{--tw-bg-opacity:1;background-color:rgb(13 148 136/var(--tw-bg-opacity,1))}.hover\:bg-teal-800:hover{--tw-bg-opacity:1;background-color:rgb(17 94 89/var(--tw-bg-opacity,1))}.hover\:bg-white:hover{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.hover\:bg-none:hover{background-image:none}.hover\:text-black:hover{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.hover\:text-blue-400:hover{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.hover\:text-blue-500:hover{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.hover\:text-green-500:hover{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.hover\:text-neutral-400:hover{--tw-text-opacity:1;color:rgb(163 163 163/var(--tw-text-opacity,1))}.hover\:text-neutral-800:hover{--tw-text-opacity:1;color:rgb(38 38 38/var(--tw-text-opacity,1))}.hover\:text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\:text-sky-600:hover{--tw-text-opacity:1;color:rgb(2 132 199/var(--tw-text-opacity,1))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:shadow-inner:hover{--tw-shadow:inset 0 2px 4px 0 rgba(0,0,0,.05);--tw-shadow-colored:inset 0 2px 4px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\:border-l-2:focus{border-left-width:2px}.focus\:border-blue-600:focus{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:outline-4:focus{outline-width:4px}.focus\:ring-0:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-0:focus,.focus\:ring-1:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring-gray-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(107 114 128/var(--tw-ring-opacity,1))}.focus\:ring-red-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(239 68 68/var(--tw-ring-opacity,1))}.focus\:ring-transparent:focus{--tw-ring-color:transparent}.disabled\:opacity-40:disabled{opacity:.4}.group:hover .group-hover\:inline{display:inline}.group:hover .group-hover\:bg-slate-200{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity,1))}.group:hover .group-hover\:bg-slate-300{--tw-bg-opacity:1;background-color:rgb(203 213 225/var(--tw-bg-opacity,1))}.group:hover .group-hover\:text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.group:hover .group-hover\:text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.group:hover .group-hover\:opacity-100{opacity:1}.peer:checked~.peer-checked\:scale-100{--tw-scale-x:1;--tw-scale-y:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:checked~.peer-checked\:opacity-100{opacity:1}.peer:checked~.peer-checked\:after\:translate-x-full:after{content:var(--tw-content);--tw-translate-x:100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:checked~.peer-checked\:after\:border-white:after{content:var(--tw-content);--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity,1))}.peer:checked~.peer-checked\:after\:bg-purple-500:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.peer:checked~.peer-checked\:after\:bg-red-500:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.peer:checked~.peer-checked\:after\:bg-sky-500:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(14 165 233/var(--tw-bg-opacity,1))}@media not all and (min-width:1280px){.max-xl\:flex{display:flex}.max-xl\:hidden{display:none}.max-xl\:justify-end{justify-content:flex-end}.max-xl\:gap-1{gap:.25rem}.max-xl\:gap-10{gap:2.5rem}.max-xl\:px-2{padding-left:.5rem;padding-right:.5rem}.max-xl\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media not all and (min-width:1024px){.max-lg\:flex{display:flex}.max-lg\:w-full{width:100%}.max-lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.max-lg\:flex-col{flex-direction:column}.max-lg\:justify-between{justify-content:space-between}.max-lg\:justify-items-center{justify-items:center}.max-lg\:gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.max-lg\:gap-y-12{row-gap:3rem}.max-lg\:gap-y-24{row-gap:6rem}.max-lg\:text-xl{font-size:1.25rem;line-height:1.75rem}.max-lg\:transition-none{transition-property:none}.max-lg\:hover\:transform-none:hover{transform:none}}@media not all and (min-width:768px){.max-md\:flex{display:flex}.max-md\:hidden{display:none}.max-md\:gap-12{gap:3rem}.max-md\:p-0{padding:0}.max-md\:text-sm{font-size:.875rem;line-height:1.25rem}}@media not all and (min-width:640px){.max-sm\:mb-1{margin-bottom:.25rem}.max-sm\:mb-2{margin-bottom:.5rem}.max-sm\:flex{display:flex}.max-sm\:hidden{display:none}.max-sm\:w-1\/2{width:50%}.max-sm\:w-3\/4{width:75%}.max-sm\:w-\[90\%\]{width:90%}.max-sm\:w-full{width:100%}.max-sm\:flex-row{flex-direction:row}.max-sm\:flex-col{flex-direction:column}.max-sm\:items-end{align-items:flex-end}.max-sm\:justify-between{justify-content:space-between}.max-sm\:gap-8{gap:2rem}.max-sm\:p-2{padding:.5rem}.max-sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.max-sm\:text-xl{font-size:1.25rem;line-height:1.75rem}.max-sm\:text-xs{font-size:.75rem;line-height:1rem}}@media (min-width:640px){.sm\:left-5{left:1.25rem}.sm\:top-5{top:1.25rem}.sm\:m-20{margin:5rem}.sm\:m-5{margin:1.25rem}.sm\:mb-0{margin-bottom:0}.sm\:mb-2{margin-bottom:.5rem}.sm\:mb-4{margin-bottom:1rem}.sm\:mb-5{margin-bottom:1.25rem}.sm\:ml-5{margin-left:1.25rem}.sm\:mt-0{margin-top:0}.sm\:mt-20{margin-top:5rem}.sm\:mt-4{margin-top:1rem}.sm\:mt-auto{margin-top:auto}.sm\:h-20{height:5rem}.sm\:h-64{height:16rem}.sm\:h-8{height:2rem}.sm\:h-\[100px\]{height:100px}.sm\:h-\[120px\]{height:120px}.sm\:h-\[255px\]{height:255px}.sm\:h-\[300px\]{height:300px}.sm\:h-\[350px\]{height:350px}.sm\:h-\[40px\]{height:40px}.sm\:h-\[500px\]{height:500px}.sm\:h-auto{height:auto}.sm\:w-24{width:6rem}.sm\:w-8{width:2rem}.sm\:w-\[100px\]{width:100px}.sm\:w-\[120px\]{width:120px}.sm\:w-\[244px\]{width:244px}.sm\:w-\[300px\]{width:300px}.sm\:w-auto{width:auto}.sm\:min-w-\[150px\]{min-width:150px}.sm\:max-w-\[408px\]{max-width:408px}.sm\:max-w-full{max-width:100%}.sm\:flex-row{flex-direction:row}.sm\:p-3{padding:.75rem}.sm\:p-4{padding:1rem}.sm\:p-6{padding:1.5rem}.sm\:px-3{padding-left:.75rem;padding-right:.75rem}.sm\:px-4{padding-left:1rem;padding-right:1rem}.sm\:px-5{padding-left:1.25rem;padding-right:1.25rem}.sm\:py-2{padding-top:.5rem;padding-bottom:.5rem}.sm\:pb-5{padding-bottom:1.25rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-base{font-size:1rem;line-height:1.5rem}.sm\:text-lg{font-size:1.125rem;line-height:1.75rem}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:text-xs{font-size:.75rem;line-height:1rem}}@media (min-width:768px){.md\:w-full{width:100%}.md\:p-8{padding:2rem}.md\:text-center{text-align:center}.md\:text-3xl{font-size:2.25rem}.md\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width:1024px){.lg\:max-h-view-page{max-height:1000px}.lg\:gap-10{gap:2.5rem}.lg\:p-10{padding:2.5rem}.lg\:text-center{text-align:center}.lg\:text-2xl{font-size:1.5rem;line-height:2rem}.lg\:text-3xl,.lg\:text-4xl{font-size:2.25rem}.lg\:text-4xl{line-height:2.5rem}}@media (min-width:1536px){.\32xl\:flex{display:flex}}.rtl\:space-x-reverse:where([dir=rtl],[dir=rtl] *)>:not([hidden])~:not([hidden]){--tw-space-x-reverse:1}.\[\&\:has\(\:focus-visible\)\]\:ring-2:has(:focus-visible){--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}
|
|
@@ -114,19 +114,26 @@ export function assembleOptionsSort(input) {
|
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
export function urlEncode(input, encodeSpecialChars = true) {
|
|
117
|
-
if (
|
|
118
|
-
|
|
117
|
+
if (input == null) {
|
|
118
|
+
return "";
|
|
119
|
+
}
|
|
120
|
+
if (encodeSpecialChars) {
|
|
121
|
+
// Encode special URL characters including # which marks fragment identifiers
|
|
122
|
+
input = input.replace(/[%&?#]/g, (match) => {
|
|
119
123
|
return encodeURIComponent(match);
|
|
120
124
|
});
|
|
125
|
+
if (!input) {
|
|
126
|
+
return "";
|
|
127
|
+
}
|
|
121
128
|
input = input.replace(/[!'()*\-._~,]/g, (c) => {
|
|
122
129
|
return "%" + c.charCodeAt(0).toString(16).toUpperCase();
|
|
123
130
|
});
|
|
124
131
|
return input;
|
|
125
132
|
}
|
|
126
133
|
else {
|
|
127
|
-
return encodeURIComponent(input);
|
|
134
|
+
return input ? encodeURIComponent(input) : "";
|
|
128
135
|
}
|
|
129
136
|
}
|
|
130
137
|
export function toCamelCase(slug) {
|
|
131
|
-
return slug.replace(/-([a-z])/g, (letter) => letter.toUpperCase());
|
|
138
|
+
return slug.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
132
139
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { UseQueryOptions, QueryKey } from "@tanstack/react-query";
|
|
2
|
-
export declare const useApiQuery: <TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(key: TQueryKey, route: string, options?: {}, payload?: {}, queryOptions?: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<import("@tanstack/
|
|
2
|
+
export declare const useApiQuery: <TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(key: TQueryKey, route: string, options?: {}, payload?: {}, queryOptions?: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<import("@tanstack/query-core").NoInfer<TData>, TError>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getEndPointFromEnvironment: () => string;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const getEndPointFromEnvironment = () => {
|
|
2
|
+
switch (import.meta.env.MODE) {
|
|
3
|
+
// Gets current endpoint from development env
|
|
4
|
+
case "development": {
|
|
5
|
+
const baseUrl = import.meta.env.VITE_API || "";
|
|
6
|
+
const match = baseUrl.match(/api\.([\w-]+)\.togahub\.com/);
|
|
7
|
+
return match ? match[1] : "production";
|
|
8
|
+
}
|
|
9
|
+
// Gets current environment name
|
|
10
|
+
case "alpha":
|
|
11
|
+
case "beta":
|
|
12
|
+
case "gamma":
|
|
13
|
+
case "sprint":
|
|
14
|
+
case "stage":
|
|
15
|
+
case "test":
|
|
16
|
+
return import.meta.env.MODE;
|
|
17
|
+
default:
|
|
18
|
+
return "Unknown";
|
|
19
|
+
}
|
|
20
|
+
};
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -14,3 +14,5 @@ import assertTagName from "./assertTagName";
|
|
|
14
14
|
export { assertTagName };
|
|
15
15
|
import formatTimestamp from "./formatTimestamp";
|
|
16
16
|
export { formatTimestamp };
|
|
17
|
+
import { getEndPointFromEnvironment } from "./getEndpointFromEnvironment";
|
|
18
|
+
export { getEndPointFromEnvironment };
|
package/dist/utils/index.js
CHANGED
|
@@ -14,3 +14,5 @@ import assertTagName from "./assertTagName";
|
|
|
14
14
|
export { assertTagName };
|
|
15
15
|
import formatTimestamp from "./formatTimestamp";
|
|
16
16
|
export { formatTimestamp };
|
|
17
|
+
import { getEndPointFromEnvironment } from "./getEndpointFromEnvironment";
|
|
18
|
+
export { getEndPointFromEnvironment };
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agilant/toga-blox",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "1.0.
|
|
5
|
-
"description": "",
|
|
4
|
+
"version": "1.0.315",
|
|
5
|
+
"description": "Toga-Blox is a comprehensive and reusable React component library",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"scripts": {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"@storybook/addon-viewport": "^7.6.10",
|
|
31
31
|
"@tanstack/react-virtual": "^3.1.3",
|
|
32
32
|
"@tanstack/virtual-core": "^3.1.3",
|
|
33
|
-
"axios": "
|
|
33
|
+
"axios": "1.8.4",
|
|
34
34
|
"classnames": "^2.5.1",
|
|
35
35
|
"clsx": "^2.1.1",
|
|
36
36
|
"dayjs": "^1.11.19",
|
|
@@ -66,6 +66,7 @@
|
|
|
66
66
|
"@tanstack/react-query": "^5.59.19",
|
|
67
67
|
"@tanstack/react-query-devtools": "^5.59.19",
|
|
68
68
|
"@tanstack/react-query-persist-client": "^5.59.20",
|
|
69
|
+
"@tanstack/react-table": "^8.21.3",
|
|
69
70
|
"@testing-library/jest-dom": "^6.6.3",
|
|
70
71
|
"@testing-library/react": "^16.2.0",
|
|
71
72
|
"@testing-library/user-event": "^14.5.2",
|
|
@@ -98,9 +99,8 @@
|
|
|
98
99
|
"@tanstack/react-query": "^5.59.19",
|
|
99
100
|
"@tanstack/react-query-devtools": "^5.59.19",
|
|
100
101
|
"@tanstack/react-query-persist-client": "^5.59.20",
|
|
101
|
-
"axios": "
|
|
102
|
+
"axios": "1.8.4",
|
|
102
103
|
"react-hook-form": "^7.43.9",
|
|
103
104
|
"react-router-dom": "^6.16.0"
|
|
104
|
-
|
|
105
105
|
}
|
|
106
106
|
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { UseMutationOptions, UseMutationResult } from "@tanstack/react-query";
|
|
2
|
-
export declare const useApiMutation: <TData = unknown, TError = unknown, TVariables extends Record<string, any> = {}, TContext = unknown>(method: "POST" | "PUT" | "DELETE", route: string, options?: Record<string, any>, mutationOptions?: Omit<UseMutationOptions<TData, TError, TVariables, TContext>, "mutationFn">) => UseMutationResult<TData, TError, TVariables, TContext>;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { useMutation, useQueryClient, } from "@tanstack/react-query";
|
|
2
|
-
import { apiDelete, apiPost, apiPut } from "../api/apiFunctions";
|
|
3
|
-
export const useApiMutation = (method, route, options = {}, mutationOptions) => {
|
|
4
|
-
const queryClient = useQueryClient();
|
|
5
|
-
const mutationFn = (payload) => {
|
|
6
|
-
switch (method) {
|
|
7
|
-
case "POST":
|
|
8
|
-
return apiPost(route, payload, options);
|
|
9
|
-
case "PUT":
|
|
10
|
-
return apiPut(route, payload, options);
|
|
11
|
-
case "DELETE":
|
|
12
|
-
return apiDelete(route, payload, options);
|
|
13
|
-
default:
|
|
14
|
-
throw new Error(`Unsupported method: ${method}`);
|
|
15
|
-
}
|
|
16
|
-
};
|
|
17
|
-
return useMutation({
|
|
18
|
-
mutationFn,
|
|
19
|
-
onSuccess: () => {
|
|
20
|
-
// Invalidate all queries (or scope it to specific keys)
|
|
21
|
-
queryClient.invalidateQueries();
|
|
22
|
-
},
|
|
23
|
-
...mutationOptions,
|
|
24
|
-
});
|
|
25
|
-
};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { UseQueryOptions, QueryKey } from "@tanstack/react-query";
|
|
2
|
-
export declare const useApiQuery: <TQueryFnData = unknown, TError = unknown, TData = TQueryFnData, TQueryKey extends QueryKey = readonly unknown[]>(key: TQueryKey, route: string, options?: {}, payload?: {}, queryOptions?: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, "queryKey" | "queryFn">) => import("@tanstack/react-query").UseQueryResult<TData, TError>;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { useQuery } from "@tanstack/react-query";
|
|
2
|
-
import { apiGet } from "../api/apiFunctions";
|
|
3
|
-
export const useApiQuery = (key, route, options = {}, payload = {}, queryOptions) => {
|
|
4
|
-
return useQuery({
|
|
5
|
-
queryKey: key,
|
|
6
|
-
queryFn: () => apiGet(route, options, payload),
|
|
7
|
-
...queryOptions,
|
|
8
|
-
});
|
|
9
|
-
};
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
export interface Options {
|
|
2
|
-
fields?: any;
|
|
3
|
-
where?: any;
|
|
4
|
-
join?: any;
|
|
5
|
-
ojoin?: any;
|
|
6
|
-
sort?: any;
|
|
7
|
-
[key: string]: any;
|
|
8
|
-
}
|
|
9
|
-
export interface OptionsType {
|
|
10
|
-
transactionId?: string;
|
|
11
|
-
fields?: (string | Field | {
|
|
12
|
-
location: string[];
|
|
13
|
-
shipToAddress: string[];
|
|
14
|
-
})[];
|
|
15
|
-
sort?: any;
|
|
16
|
-
slug?: string;
|
|
17
|
-
id?: string;
|
|
18
|
-
join?: Array<{
|
|
19
|
-
[key: string]: {
|
|
20
|
-
[key: string]: string;
|
|
21
|
-
};
|
|
22
|
-
}>;
|
|
23
|
-
where?: {
|
|
24
|
-
[key: string]: any;
|
|
25
|
-
and?: any[];
|
|
26
|
-
or?: any[];
|
|
27
|
-
};
|
|
28
|
-
recordsPerPage?: number;
|
|
29
|
-
page?: number;
|
|
30
|
-
}
|
|
31
|
-
export interface ExtendedOptionsType extends Omit<OptionsType, "fields"> {
|
|
32
|
-
depth?: number;
|
|
33
|
-
fields?: (string | Field | {
|
|
34
|
-
location: string[];
|
|
35
|
-
shipToAddress: string[];
|
|
36
|
-
})[];
|
|
37
|
-
where?: any;
|
|
38
|
-
join?: any;
|
|
39
|
-
ojoin?: any;
|
|
40
|
-
sort?: any;
|
|
41
|
-
recordsPerPage?: number;
|
|
42
|
-
page?: number;
|
|
43
|
-
}
|
|
44
|
-
export interface Field {
|
|
45
|
-
[key: string]: string | string[] | Field;
|
|
46
|
-
}
|
|
47
|
-
export interface ExtendedOptionsType extends Omit<OptionsType, "fields"> {
|
|
48
|
-
depth?: number;
|
|
49
|
-
fields?: (string | Field | {
|
|
50
|
-
location: string[];
|
|
51
|
-
shipToAddress: string[];
|
|
52
|
-
})[];
|
|
53
|
-
where?: any;
|
|
54
|
-
join?: any;
|
|
55
|
-
ojoin?: any;
|
|
56
|
-
sort?: any;
|
|
57
|
-
recordsPerPage?: number;
|
|
58
|
-
page?: number;
|
|
59
|
-
[key: string]: any;
|
|
60
|
-
}
|
|
61
|
-
export declare function assembleOptions(options: Options): string;
|
|
62
|
-
export declare function assembleOptionsFields(fields: any, prefix?: string): string[];
|
|
63
|
-
export declare function assembleOptionsWhere(input: Record<string, any>): string;
|
|
64
|
-
export declare function assembleOptionsJoin(input: Record<string, any>): string;
|
|
65
|
-
export declare function assembleOptionsSort(input: any): string;
|
|
66
|
-
export declare function urlEncode(input: string, encodeSpecialChars?: boolean): string;
|
|
67
|
-
export declare function toCamelCase(slug: string): string;
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
export function assembleOptions(options) {
|
|
2
|
-
const queryString = new URLSearchParams();
|
|
3
|
-
for (const optionKey in options) {
|
|
4
|
-
const optionVal = options[optionKey];
|
|
5
|
-
switch (optionKey.toLowerCase()) {
|
|
6
|
-
case "fields":
|
|
7
|
-
queryString.set("fields", assembleOptionsFields(optionVal).join(","));
|
|
8
|
-
break;
|
|
9
|
-
case "where":
|
|
10
|
-
queryString.set("where", assembleOptionsWhere(optionVal));
|
|
11
|
-
break;
|
|
12
|
-
case "join":
|
|
13
|
-
queryString.set("join", assembleOptionsJoin(optionVal));
|
|
14
|
-
break;
|
|
15
|
-
case "ojoin":
|
|
16
|
-
queryString.set("ojoin", assembleOptionsJoin(optionVal));
|
|
17
|
-
break;
|
|
18
|
-
case "sort":
|
|
19
|
-
queryString.set("sort", assembleOptionsSort(optionVal));
|
|
20
|
-
break;
|
|
21
|
-
default:
|
|
22
|
-
queryString.set(optionKey, optionVal);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
// Decode URI because URLSearchParams automatically encodes URI components
|
|
26
|
-
return decodeURIComponent(queryString.toString());
|
|
27
|
-
}
|
|
28
|
-
export function assembleOptionsFields(fields, prefix = "") {
|
|
29
|
-
let output = [];
|
|
30
|
-
for (const key in fields) {
|
|
31
|
-
const value = fields[key];
|
|
32
|
-
if (typeof value === "object" && value !== null) {
|
|
33
|
-
let newPrefix = prefix + (isNaN(Number(key)) ? key : "") + ".";
|
|
34
|
-
if (newPrefix === ".") {
|
|
35
|
-
newPrefix = "";
|
|
36
|
-
}
|
|
37
|
-
if (newPrefix.slice(-2) === "..") {
|
|
38
|
-
newPrefix = newPrefix.slice(0, -1);
|
|
39
|
-
}
|
|
40
|
-
output = output.concat(assembleOptionsFields(value, newPrefix));
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
output.push(prefix + value);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return output;
|
|
47
|
-
}
|
|
48
|
-
export function assembleOptionsWhere(input) {
|
|
49
|
-
const output = [];
|
|
50
|
-
let operator = "and";
|
|
51
|
-
for (const key in input) {
|
|
52
|
-
const value = input[key];
|
|
53
|
-
operator = key.toUpperCase();
|
|
54
|
-
for (const fieldConditions of value) {
|
|
55
|
-
for (const field in fieldConditions) {
|
|
56
|
-
const conditions = fieldConditions[field];
|
|
57
|
-
const childOperator = field.toUpperCase();
|
|
58
|
-
if (childOperator === "AND" || childOperator === "OR") {
|
|
59
|
-
output.push(assembleOptionsWhere({ [childOperator]: conditions }));
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
for (let comparison in conditions) {
|
|
63
|
-
let conditionValue = conditions[comparison];
|
|
64
|
-
comparison = comparison.replace(/<>/g, "ne");
|
|
65
|
-
comparison = comparison.replace(/>=/g, "ge");
|
|
66
|
-
comparison = comparison.replace(/>/g, "gt");
|
|
67
|
-
comparison = comparison.replace(/<=/g, "le");
|
|
68
|
-
comparison = comparison.replace(/</g, "lt");
|
|
69
|
-
comparison = comparison.replace(/==/g, "eq");
|
|
70
|
-
comparison = comparison.replace(/!=/g, "ne");
|
|
71
|
-
comparison = comparison.replace(/=/g, "eq");
|
|
72
|
-
comparison = comparison.replace(/not/g, "not");
|
|
73
|
-
comparison = comparison.replace(/like/g, "like");
|
|
74
|
-
comparison = comparison.replace(/contains/g, "contains");
|
|
75
|
-
comparison = comparison.replace(/starts/g, "starts");
|
|
76
|
-
comparison = comparison.replace(/ends/g, "ends");
|
|
77
|
-
comparison = comparison.replace(/excludes/g, "excludes");
|
|
78
|
-
conditionValue = urlEncode(conditionValue);
|
|
79
|
-
output.push(`${field}:${comparison}:${conditionValue}`);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
return `(${output.join(`,${operator},`)})`;
|
|
86
|
-
}
|
|
87
|
-
export function assembleOptionsJoin(input) {
|
|
88
|
-
const out = [];
|
|
89
|
-
for (const item of Object.values(input)) {
|
|
90
|
-
let thisJoin = "";
|
|
91
|
-
for (const table in item) {
|
|
92
|
-
const value = item[table];
|
|
93
|
-
thisJoin += table + ":";
|
|
94
|
-
const thisJoinConditions = [];
|
|
95
|
-
for (const fieldA in value) {
|
|
96
|
-
const fieldB = value[fieldA];
|
|
97
|
-
thisJoinConditions.push(`${fieldA}=${fieldB}`);
|
|
98
|
-
}
|
|
99
|
-
thisJoin += thisJoinConditions.join(";");
|
|
100
|
-
}
|
|
101
|
-
out.push(thisJoin);
|
|
102
|
-
}
|
|
103
|
-
return out.join(",");
|
|
104
|
-
}
|
|
105
|
-
export function assembleOptionsSort(input) {
|
|
106
|
-
if (Array.isArray(input)) {
|
|
107
|
-
return input.join(",");
|
|
108
|
-
}
|
|
109
|
-
else if (typeof input === "string") {
|
|
110
|
-
return input;
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
return "";
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
export function urlEncode(input, encodeSpecialChars = true) {
|
|
117
|
-
if (encodeSpecialChars && input) {
|
|
118
|
-
input = input.replace(/[%&?]/g, (match) => {
|
|
119
|
-
return encodeURIComponent(match);
|
|
120
|
-
});
|
|
121
|
-
input = input.replace(/[!'()*\-._~]/g, (c) => {
|
|
122
|
-
return "%" + c.charCodeAt(0).toString(16).toUpperCase();
|
|
123
|
-
});
|
|
124
|
-
return input;
|
|
125
|
-
}
|
|
126
|
-
else {
|
|
127
|
-
return encodeURIComponent(input);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
export function toCamelCase(slug) {
|
|
131
|
-
return slug.replace(/-([a-z])/g, (letter) => letter.toUpperCase());
|
|
132
|
-
}
|