sodtrack-web-ui 0.7.14 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/alert.mjs CHANGED
@@ -1,5 +1,5 @@
1
- export { Alert } from './chunk-OO4FIPNF.mjs';
1
+ export { Alert } from './chunk-XDQ2Y2UR.mjs';
2
2
  import './chunk-P3UP2HUA.mjs';
3
3
  import './chunk-2MWIFYP3.mjs';
4
- import './chunk-GY2JBRY6.mjs';
4
+ import './chunk-ERH7LWVL.mjs';
5
5
  import './chunk-PLJ6ZHAI.mjs';
package/dist/button.d.mts CHANGED
@@ -8,7 +8,7 @@ type ButtonProps = {
8
8
  } & React__default.DetailedHTMLProps<React__default.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement> & VariantProps<typeof button>;
9
9
  declare const Button: FC<ButtonProps>;
10
10
  declare const button: (props?: ({
11
- size?: "small" | "large" | "medium" | undefined;
11
+ size?: "large" | "medium" | "small" | undefined;
12
12
  variant?: "link" | "contained" | "outlined" | "ghost" | "standard" | undefined;
13
13
  loading?: boolean | undefined;
14
14
  } & ({
package/dist/button.mjs CHANGED
@@ -1,5 +1,5 @@
1
- export { Button } from './chunk-22IACXYD.mjs';
1
+ export { Button } from './chunk-4YE5CU7E.mjs';
2
2
  import './chunk-P3UP2HUA.mjs';
3
3
  import './chunk-2MWIFYP3.mjs';
4
- import './chunk-GY2JBRY6.mjs';
4
+ import './chunk-ERH7LWVL.mjs';
5
5
  import './chunk-PLJ6ZHAI.mjs';
@@ -2,7 +2,7 @@ import React__default, { FC } from 'react';
2
2
  import { VariantProps } from 'cva';
3
3
 
4
4
  declare const chipForm: (props?: ({
5
- variant?: "neutral" | "color" | undefined;
5
+ variant?: "color" | "neutral" | undefined;
6
6
  size?: "sm" | "md" | undefined;
7
7
  } & ({
8
8
  class?: string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | any | {
@@ -1,6 +1,6 @@
1
1
  import { cn } from './chunk-P3UP2HUA.mjs';
2
2
  import { require_jsx_runtime } from './chunk-2MWIFYP3.mjs';
3
- import { LoaderCircleIcon } from './chunk-GY2JBRY6.mjs';
3
+ import { LoaderCircleIcon } from './chunk-ERH7LWVL.mjs';
4
4
  import { __toESM, require_react } from './chunk-PLJ6ZHAI.mjs';
5
5
  import { cva } from 'cva';
6
6
 
@@ -76,6 +76,16 @@ var ChevronDown = createLucideIcon("ChevronDown", [
76
76
  ["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]
77
77
  ]);
78
78
 
79
+ // node_modules/.pnpm/lucide-react@0.379.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-left.js
80
+ var ChevronLeft = createLucideIcon("ChevronLeft", [
81
+ ["path", { d: "m15 18-6-6 6-6", key: "1wnfg3" }]
82
+ ]);
83
+
84
+ // node_modules/.pnpm/lucide-react@0.379.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/chevron-right.js
85
+ var ChevronRight = createLucideIcon("ChevronRight", [
86
+ ["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]
87
+ ]);
88
+
79
89
  // node_modules/.pnpm/lucide-react@0.379.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/circle-check.js
80
90
  var CircleCheck = createLucideIcon("CircleCheck", [
81
91
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
@@ -128,6 +138,8 @@ var CloseIcon = X;
128
138
  var InfoIcon = Info;
129
139
  var TriangleAlertIcon = TriangleAlert;
130
140
  var ChevronDownIcon = ChevronDown;
141
+ var ChevronRightIcon = ChevronRight;
142
+ var ChevronLeftIcon = ChevronLeft;
131
143
  /*! Bundled license information:
132
144
 
133
145
  lucide-react/dist/esm/shared/src/utils.js:
@@ -170,6 +182,22 @@ lucide-react/dist/esm/icons/chevron-down.js:
170
182
  * See the LICENSE file in the root directory of this source tree.
171
183
  *)
172
184
 
185
+ lucide-react/dist/esm/icons/chevron-left.js:
186
+ (**
187
+ * @license lucide-react v0.379.0 - ISC
188
+ *
189
+ * This source code is licensed under the ISC license.
190
+ * See the LICENSE file in the root directory of this source tree.
191
+ *)
192
+
193
+ lucide-react/dist/esm/icons/chevron-right.js:
194
+ (**
195
+ * @license lucide-react v0.379.0 - ISC
196
+ *
197
+ * This source code is licensed under the ISC license.
198
+ * See the LICENSE file in the root directory of this source tree.
199
+ *)
200
+
173
201
  lucide-react/dist/esm/icons/circle-check.js:
174
202
  (**
175
203
  * @license lucide-react v0.379.0 - ISC
@@ -227,4 +255,4 @@ lucide-react/dist/esm/lucide-react.js:
227
255
  *)
228
256
  */
229
257
 
230
- export { ChevronDownIcon, CircleCheckIcon, CircleXIcon, CloseIcon, InfoIcon, LoaderCircleIcon, TriangleAlertIcon };
258
+ export { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, CircleCheckIcon, CircleXIcon, CloseIcon, InfoIcon, LoaderCircleIcon, TriangleAlertIcon };
@@ -1,6 +1,6 @@
1
1
  import { cn } from './chunk-P3UP2HUA.mjs';
2
2
  import { require_jsx_runtime } from './chunk-2MWIFYP3.mjs';
3
- import { ChevronDownIcon } from './chunk-GY2JBRY6.mjs';
3
+ import { ChevronDownIcon } from './chunk-ERH7LWVL.mjs';
4
4
  import { __toESM, require_react } from './chunk-PLJ6ZHAI.mjs';
5
5
  import { Label } from '@radix-ui/react-label';
6
6
 
@@ -0,0 +1,143 @@
1
+ import { cn } from './chunk-P3UP2HUA.mjs';
2
+ import { require_jsx_runtime } from './chunk-2MWIFYP3.mjs';
3
+ import { ChevronDownIcon } from './chunk-ERH7LWVL.mjs';
4
+ import { __toESM, require_react } from './chunk-PLJ6ZHAI.mjs';
5
+ import { useFloating, autoUpdate, offset, flip, size, useClick, useDismiss, useRole, useListNavigation, useTypeahead, useInteractions, FloatingPortal, FloatingFocusManager } from '@floating-ui/react';
6
+
7
+ // src/components/rows-per-page-select.tsx
8
+ var React = __toESM(require_react());
9
+ var import_jsx_runtime = __toESM(require_jsx_runtime());
10
+ var options = ["10", "25", "50"];
11
+ var RowsPerPageSelect = ({
12
+ value,
13
+ onRowsPerPageChange
14
+ }) => {
15
+ const [isOpen, setIsOpen] = React.useState(false);
16
+ const [activeIndex, setActiveIndex] = React.useState(null);
17
+ const [selectedIndex, setSelectedIndex] = React.useState(
18
+ options.findIndex((option) => option === value)
19
+ );
20
+ const { refs, floatingStyles, context } = useFloating({
21
+ placement: "bottom-start",
22
+ open: isOpen,
23
+ onOpenChange: setIsOpen,
24
+ whileElementsMounted: autoUpdate,
25
+ middleware: [
26
+ offset(5),
27
+ flip({ padding: 10 }),
28
+ size({
29
+ apply({ rects, elements, availableHeight }) {
30
+ Object.assign(elements.floating.style, {
31
+ maxHeight: `${availableHeight}px`,
32
+ minWidth: `${rects.reference.width}px`
33
+ });
34
+ },
35
+ padding: 10
36
+ })
37
+ ]
38
+ });
39
+ const listRef = React.useRef([]);
40
+ const listContentRef = React.useRef(options);
41
+ const isTypingRef = React.useRef(false);
42
+ const click = useClick(context, { event: "mousedown" });
43
+ const dismiss = useDismiss(context);
44
+ const role = useRole(context, { role: "listbox" });
45
+ const listNav = useListNavigation(context, {
46
+ listRef,
47
+ activeIndex,
48
+ selectedIndex,
49
+ onNavigate: setActiveIndex,
50
+ // This is a large list, allow looping.
51
+ loop: true
52
+ });
53
+ const typeahead = useTypeahead(context, {
54
+ listRef: listContentRef,
55
+ activeIndex,
56
+ selectedIndex,
57
+ onMatch: isOpen ? setActiveIndex : setSelectedIndex,
58
+ onTypingChange(isTyping) {
59
+ isTypingRef.current = isTyping;
60
+ }
61
+ });
62
+ const { getReferenceProps, getFloatingProps, getItemProps } = useInteractions(
63
+ [dismiss, role, listNav, typeahead, click]
64
+ );
65
+ const handleSelect = (index) => {
66
+ onRowsPerPageChange(options[index]);
67
+ setSelectedIndex(index);
68
+ setIsOpen(false);
69
+ };
70
+ const selectedItemLabel = selectedIndex !== null ? options[selectedIndex] : void 0;
71
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { minWidth: "40px" }, children: [
72
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
73
+ "div",
74
+ {
75
+ tabIndex: 0,
76
+ ref: refs.setReference,
77
+ "aria-labelledby": "select-label",
78
+ "aria-autocomplete": "none",
79
+ ...getReferenceProps(),
80
+ className: "flex cursor-pointer items-center gap-1 text-sm leading-[120%] text-neutral-900",
81
+ children: [
82
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: selectedItemLabel }),
83
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
84
+ ChevronDownIcon,
85
+ {
86
+ width: "18px",
87
+ height: "18px",
88
+ className: "h-[1.125rem] w-[1.125rem] text-neutral-900"
89
+ }
90
+ )
91
+ ]
92
+ }
93
+ ),
94
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FloatingPortal, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FloatingFocusManager, { context, modal: false, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
95
+ "div",
96
+ {
97
+ ref: refs.setFloating,
98
+ className: "overflow-y-auto rounded-lg bg-neutral-100 text-sm font-semibold leading-[120%] text-neutral-900 outline-none",
99
+ style: {
100
+ ...floatingStyles
101
+ },
102
+ ...getFloatingProps(),
103
+ children: options.map((value2, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
104
+ "div",
105
+ {
106
+ ref: (node) => {
107
+ listRef.current[i] = node;
108
+ },
109
+ role: "option",
110
+ tabIndex: i === activeIndex ? 0 : -1,
111
+ "aria-selected": i === selectedIndex && i === activeIndex,
112
+ className: cn(
113
+ "cursor-default p-[0.625rem]",
114
+ i === activeIndex && "bg-neutral-200"
115
+ ),
116
+ ...getItemProps({
117
+ // Handle pointer select.
118
+ onClick() {
119
+ handleSelect(i);
120
+ },
121
+ // Handle keyboard select.
122
+ onKeyDown(event) {
123
+ if (event.key === "Enter") {
124
+ event.preventDefault();
125
+ handleSelect(i);
126
+ }
127
+ if (event.key === " " && !isTypingRef.current) {
128
+ event.preventDefault();
129
+ handleSelect(i);
130
+ }
131
+ }
132
+ }),
133
+ children: value2
134
+ },
135
+ value2
136
+ ))
137
+ }
138
+ ) }) })
139
+ ] });
140
+ };
141
+ var rows_per_page_select_default = RowsPerPageSelect;
142
+
143
+ export { rows_per_page_select_default };
@@ -1,6 +1,6 @@
1
1
  import { cn } from './chunk-P3UP2HUA.mjs';
2
2
  import { require_jsx_runtime } from './chunk-2MWIFYP3.mjs';
3
- import { TriangleAlertIcon, CircleCheckIcon, CircleXIcon, InfoIcon, CloseIcon } from './chunk-GY2JBRY6.mjs';
3
+ import { TriangleAlertIcon, CircleCheckIcon, CircleXIcon, InfoIcon, CloseIcon } from './chunk-ERH7LWVL.mjs';
4
4
  import { __toESM, require_react } from './chunk-PLJ6ZHAI.mjs';
5
5
  import { cva } from 'cva';
6
6
 
@@ -1,5 +1,5 @@
1
1
  import { require_jsx_runtime } from './chunk-2MWIFYP3.mjs';
2
- import { LoaderCircleIcon } from './chunk-GY2JBRY6.mjs';
2
+ import { LoaderCircleIcon } from './chunk-ERH7LWVL.mjs';
3
3
  import { __toESM } from './chunk-PLJ6ZHAI.mjs';
4
4
  import { cva } from 'cva';
5
5
 
@@ -0,0 +1,49 @@
1
+ import { cn } from './chunk-P3UP2HUA.mjs';
2
+ import { require_jsx_runtime } from './chunk-2MWIFYP3.mjs';
3
+ import { __toESM, require_react } from './chunk-PLJ6ZHAI.mjs';
4
+ import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
5
+
6
+ // src/components/scrollarea.tsx
7
+ var React = __toESM(require_react());
8
+ var import_jsx_runtime = __toESM(require_jsx_runtime());
9
+ var ScrollArea = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
10
+ ScrollAreaPrimitive.Root,
11
+ {
12
+ ref,
13
+ className: cn("relative h-full overflow-hidden", className),
14
+ ...props,
15
+ children: [
16
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit] [&>div]:!flex [&>div]:h-full [&>div]:flex-col", children }),
17
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ScrollBar, {}),
18
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ScrollAreaPrimitive.Corner, {})
19
+ ]
20
+ }
21
+ ));
22
+ ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
23
+ var ScrollBar = React.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
24
+ ScrollAreaPrimitive.ScrollAreaScrollbar,
25
+ {
26
+ ref,
27
+ orientation,
28
+ className: cn(
29
+ "flex touch-none select-none bg-neutral-200 transition-colors",
30
+ orientation === "vertical" && "h-full w-4 py-2",
31
+ orientation === "horizontal" && "h-4 flex-col px-2",
32
+ className
33
+ ),
34
+ ...props,
35
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
36
+ ScrollAreaPrimitive.ScrollAreaThumb,
37
+ {
38
+ className: cn(
39
+ "relative flex-1 rounded bg-primary-500",
40
+ orientation === "vertical" && "mx-1 w-2",
41
+ orientation === "horizontal" && "my-1 h-2"
42
+ )
43
+ }
44
+ )
45
+ }
46
+ ));
47
+ ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
48
+
49
+ export { ScrollArea, ScrollBar };
@@ -0,0 +1,24 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React__default, { HTMLAttributes } from 'react';
3
+ import { ColumnDef, OnChangeFn, PaginationState } from '@tanstack/react-table';
4
+
5
+ interface DataTableProps<TData, TValue> extends HTMLAttributes<HTMLDivElement> {
6
+ columns: ColumnDef<TData, TValue>[];
7
+ data: TData[];
8
+ rowsCount?: number;
9
+ pagination?: {
10
+ pageIndex: number;
11
+ pageSize: number;
12
+ };
13
+ onPaginationChange?: OnChangeFn<PaginationState>;
14
+ noResults: {
15
+ icon: React__default.ReactNode;
16
+ title: string;
17
+ description?: string;
18
+ };
19
+ rowsPerPageText?: string;
20
+ ofText?: string;
21
+ }
22
+ declare function DataTable<TData, TValue>({ columns, data, rowsCount, pagination, onPaginationChange, noResults, rowsPerPageText, ofText, className, ...props }: DataTableProps<TData, TValue>): react_jsx_runtime.JSX.Element;
23
+
24
+ export { DataTable, DataTable as default };
@@ -0,0 +1,192 @@
1
+ import { rows_per_page_select_default } from './chunk-O5QOPJOD.mjs';
2
+ import { ScrollArea, ScrollBar } from './chunk-ZVOUAD54.mjs';
3
+ import { cn } from './chunk-P3UP2HUA.mjs';
4
+ import { require_jsx_runtime } from './chunk-2MWIFYP3.mjs';
5
+ import { ChevronLeftIcon, ChevronRightIcon } from './chunk-ERH7LWVL.mjs';
6
+ import { __toESM } from './chunk-PLJ6ZHAI.mjs';
7
+ import { useReactTable, getCoreRowModel, getPaginationRowModel, flexRender } from '@tanstack/react-table';
8
+
9
+ var import_jsx_runtime = __toESM(require_jsx_runtime());
10
+ function DataTable({
11
+ columns,
12
+ data,
13
+ rowsCount,
14
+ pagination,
15
+ onPaginationChange,
16
+ noResults,
17
+ rowsPerPageText = "Rows per page",
18
+ ofText = "of",
19
+ className,
20
+ ...props
21
+ }) {
22
+ const table = useReactTable({
23
+ data,
24
+ columns,
25
+ rowCount: rowsCount,
26
+ state: { pagination },
27
+ onPaginationChange,
28
+ manualPagination: true,
29
+ getCoreRowModel: getCoreRowModel(),
30
+ getPaginationRowModel: getPaginationRowModel()
31
+ });
32
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
33
+ "div",
34
+ {
35
+ className: cn(
36
+ "flex flex-col overflow-hidden rounded-2xl border border-neutral-200 bg-neutral-50",
37
+ className
38
+ ),
39
+ ...props,
40
+ children: [
41
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(ScrollArea, { children: [
42
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ScrollBar, { orientation: "horizontal" }),
43
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
44
+ "table",
45
+ {
46
+ cellPadding: 0,
47
+ cellSpacing: 0,
48
+ className: "w-full table-auto overflow-hidden text-neutral-900",
49
+ children: [
50
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("colgroup", { children: table.getHeaderGroups()[0].headers.map((header) => {
51
+ const width = header.column.getSize() / table.getHeaderGroups()[0].headers.reduce((acc, curr) => acc + curr.getSize(), 0) * 100;
52
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
53
+ "col",
54
+ {
55
+ span: 1,
56
+ style: {
57
+ width: `${width}%`
58
+ }
59
+ },
60
+ header.id
61
+ );
62
+ }) }),
63
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("thead", { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("tr", { className: "bg-neutral-100", children: headerGroup.headers.map((header) => {
64
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
65
+ "th",
66
+ {
67
+ className: "h-14 px-4 py-3 text-left text-sm font-semibold uppercase leading-[120%] tracking-sm",
68
+ children: header.isPlaceholder ? null : flexRender(
69
+ header.column.columnDef.header,
70
+ header.getContext()
71
+ )
72
+ },
73
+ header.id
74
+ );
75
+ }) }, headerGroup.id)) }),
76
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("tbody", { children: table.getRowModel().rows?.length ? table.getRowModel().rows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
77
+ "tr",
78
+ {
79
+ "data-state": row.getIsSelected() && "selected",
80
+ className: "text-base font-normal leading-[130%] tracking-body",
81
+ children: row.getVisibleCells().map((cell) => {
82
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("td", { className: cn("p-4"), children: flexRender(
83
+ cell.column.columnDef.cell,
84
+ cell.getContext()
85
+ ) }, cell.id);
86
+ })
87
+ },
88
+ row.id
89
+ )) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("tr", { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("td", { colSpan: columns.length, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
90
+ "div",
91
+ {
92
+ className: "flex flex-col items-center justify-center px-10 pb-12 pt-10 font-normal leading-[120%] tracking-body-lg text-neutral-500",
93
+ children: [
94
+ noResults.icon,
95
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "mt-2 text-lg text-neutral-500", children: noResults.title }),
96
+ noResults.description && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-sm text-neutral-500", children: noResults.description })
97
+ ]
98
+ }
99
+ ) }) }) })
100
+ ]
101
+ }
102
+ )
103
+ ] }),
104
+ pagination && onPaginationChange && !!rowsCount && data.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
105
+ "div",
106
+ {
107
+ className: "mx-6 ml-auto flex h-8 items-center justify-end gap-6 border-t-1 border-t-neutral-200",
108
+ children: [
109
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center", children: [
110
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
111
+ "span",
112
+ {
113
+ className: "mr-2 text-sm font-semibold leading-[120%] tracking-sm text-neutral-700",
114
+ children: `${rowsPerPageText}:`
115
+ }
116
+ ),
117
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
118
+ rows_per_page_select_default,
119
+ {
120
+ value: "10",
121
+ onRowsPerPageChange: (value) => {
122
+ table.setPageSize(Number(value));
123
+ table.setPageIndex(0);
124
+ }
125
+ }
126
+ )
127
+ ] }),
128
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
129
+ "span",
130
+ {
131
+ className: "text-sm font-normal leading-[120%] tracking-sm text-neutral-900",
132
+ children: `${pagination?.pageIndex * pagination.pageSize + 1}-${rowsCount > pagination?.pageIndex * pagination.pageSize + pagination.pageSize ? pagination?.pageIndex * pagination.pageSize + pagination.pageSize : rowsCount} ${ofText} ${rowsCount}`
133
+ }
134
+ ),
135
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center", children: [
136
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
137
+ "div",
138
+ {
139
+ className: cn(
140
+ "flex h-8 items-center px-3",
141
+ table.getCanPreviousPage() ? "cursor-pointer" : "cursor-not-allowed"
142
+ ),
143
+ onClick: () => {
144
+ if (table.getCanPreviousPage()) {
145
+ table.previousPage();
146
+ }
147
+ },
148
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
149
+ ChevronLeftIcon,
150
+ {
151
+ className: cn(
152
+ "h-[1.125rem] w-[1.125rem]",
153
+ table.getCanPreviousPage() ? "text-neutral-900" : "text-neutral-500"
154
+ )
155
+ }
156
+ )
157
+ }
158
+ ),
159
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
160
+ "div",
161
+ {
162
+ className: cn(
163
+ "flex h-8 items-center px-3",
164
+ table.getCanNextPage() ? "cursor-pointer" : "cursor-not-allowed"
165
+ ),
166
+ onClick: () => {
167
+ if (table.getCanNextPage()) {
168
+ table.nextPage();
169
+ }
170
+ },
171
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
172
+ ChevronRightIcon,
173
+ {
174
+ className: cn(
175
+ "h-[1.125rem] w-[1.125rem]",
176
+ table.getCanNextPage() ? "text-neutral-900" : "text-neutral-500"
177
+ )
178
+ }
179
+ )
180
+ }
181
+ )
182
+ ] })
183
+ ]
184
+ }
185
+ )
186
+ ]
187
+ }
188
+ );
189
+ }
190
+ var data_table_default = DataTable;
191
+
192
+ export { DataTable, data_table_default as default };
@@ -6,7 +6,7 @@ type IconButtonProps = {
6
6
  } & VariantProps<typeof iconButton> & React__default.DetailedHTMLProps<React__default.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>;
7
7
  declare const iconButton: (props?: ({
8
8
  variant?: "contained" | "outlined" | "ghost" | "standard" | undefined;
9
- size?: "small" | "large" | "medium" | undefined;
9
+ size?: "large" | "medium" | "small" | undefined;
10
10
  } & ({
11
11
  class?: string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | (string | number | boolean | any | {
12
12
  [x: string]: any;
package/dist/icons.d.mts CHANGED
@@ -8,5 +8,7 @@ declare const CloseIcon: React.ForwardRefExoticComponent<Omit<lucide_react.Lucid
8
8
  declare const InfoIcon: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
9
9
  declare const TriangleAlertIcon: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
10
10
  declare const ChevronDownIcon: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
11
+ declare const ChevronRightIcon: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
12
+ declare const ChevronLeftIcon: React.ForwardRefExoticComponent<Omit<lucide_react.LucideProps, "ref"> & React.RefAttributes<SVGSVGElement>>;
11
13
 
12
- export { ChevronDownIcon, CircleCheckIcon, CircleXIcon, CloseIcon, InfoIcon, LoaderCircleIcon, TriangleAlertIcon };
14
+ export { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, CircleCheckIcon, CircleXIcon, CloseIcon, InfoIcon, LoaderCircleIcon, TriangleAlertIcon };
package/dist/icons.mjs CHANGED
@@ -1,2 +1,2 @@
1
- export { ChevronDownIcon, CircleCheckIcon, CircleXIcon, CloseIcon, InfoIcon, LoaderCircleIcon, TriangleAlertIcon } from './chunk-GY2JBRY6.mjs';
1
+ export { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon, CircleCheckIcon, CircleXIcon, CloseIcon, InfoIcon, LoaderCircleIcon, TriangleAlertIcon } from './chunk-ERH7LWVL.mjs';
2
2
  import './chunk-PLJ6ZHAI.mjs';
package/dist/index.css CHANGED
@@ -361,19 +361,37 @@ video {
361
361
  .z-30 {
362
362
  z-index: 30;
363
363
  }
364
+ .mx-1 {
365
+ margin-left: 0.25rem;
366
+ margin-right: 0.25rem;
367
+ }
364
368
  .mx-4 {
365
369
  margin-left: 1rem;
366
370
  margin-right: 1rem;
367
371
  }
372
+ .mx-6 {
373
+ margin-left: 1.5rem;
374
+ margin-right: 1.5rem;
375
+ }
376
+ .my-1 {
377
+ margin-top: 0.25rem;
378
+ margin-bottom: 0.25rem;
379
+ }
368
380
  .-mt-1 {
369
381
  margin-top: -0.25rem;
370
382
  }
383
+ .mb-4 {
384
+ margin-bottom: 1rem;
385
+ }
371
386
  .ml-3 {
372
387
  margin-left: 0.75rem;
373
388
  }
374
389
  .ml-4 {
375
390
  margin-left: 1rem;
376
391
  }
392
+ .ml-auto {
393
+ margin-left: auto;
394
+ }
377
395
  .mr-2 {
378
396
  margin-right: 0.5rem;
379
397
  }
@@ -383,9 +401,15 @@ video {
383
401
  .mt-1 {
384
402
  margin-top: 0.25rem;
385
403
  }
404
+ .mt-2 {
405
+ margin-top: 0.5rem;
406
+ }
386
407
  .flex {
387
408
  display: flex;
388
409
  }
410
+ .table {
411
+ display: table;
412
+ }
389
413
  .hidden {
390
414
  display: none;
391
415
  }
@@ -398,15 +422,27 @@ video {
398
422
  .h-14 {
399
423
  height: 3.5rem;
400
424
  }
425
+ .h-2 {
426
+ height: 0.5rem;
427
+ }
428
+ .h-4 {
429
+ height: 1rem;
430
+ }
401
431
  .h-6 {
402
432
  height: 1.5rem;
403
433
  }
404
434
  .h-8 {
405
435
  height: 2rem;
406
436
  }
437
+ .h-\[1\.125rem\] {
438
+ height: 1.125rem;
439
+ }
407
440
  .h-\[1\.375rem\] {
408
441
  height: 1.375rem;
409
442
  }
443
+ .h-\[20rem\] {
444
+ height: 20rem;
445
+ }
410
446
  .h-full {
411
447
  height: 100%;
412
448
  }
@@ -422,18 +458,30 @@ video {
422
458
  .w-12 {
423
459
  width: 3rem;
424
460
  }
461
+ .w-2 {
462
+ width: 0.5rem;
463
+ }
464
+ .w-4 {
465
+ width: 1rem;
466
+ }
425
467
  .w-6 {
426
468
  width: 1.5rem;
427
469
  }
428
470
  .w-8 {
429
471
  width: 2rem;
430
472
  }
473
+ .w-\[1\.125rem\] {
474
+ width: 1.125rem;
475
+ }
431
476
  .w-\[1\.375rem\] {
432
477
  width: 1.375rem;
433
478
  }
434
479
  .w-\[20rem\] {
435
480
  width: 20rem;
436
481
  }
482
+ .w-\[40rem\] {
483
+ width: 40rem;
484
+ }
437
485
  .w-fit {
438
486
  width: -moz-fit-content;
439
487
  width: fit-content;
@@ -444,12 +492,18 @@ video {
444
492
  .max-w-\[20\.5rem\] {
445
493
  max-width: 20.5rem;
446
494
  }
495
+ .flex-1 {
496
+ flex: 1 1 0%;
497
+ }
447
498
  .flex-shrink-0 {
448
499
  flex-shrink: 0;
449
500
  }
450
501
  .shrink-0 {
451
502
  flex-shrink: 0;
452
503
  }
504
+ .table-auto {
505
+ table-layout: auto;
506
+ }
453
507
  @keyframes spin {
454
508
  to {
455
509
  transform: rotate(360deg);
@@ -458,15 +512,32 @@ video {
458
512
  .animate-spin {
459
513
  animation: spin 1s linear infinite;
460
514
  }
515
+ .cursor-default {
516
+ cursor: default;
517
+ }
518
+ .cursor-not-allowed {
519
+ cursor: not-allowed;
520
+ }
461
521
  .cursor-pointer {
462
522
  cursor: pointer;
463
523
  }
524
+ .touch-none {
525
+ touch-action: none;
526
+ }
527
+ .select-none {
528
+ -webkit-user-select: none;
529
+ -moz-user-select: none;
530
+ user-select: none;
531
+ }
464
532
  .flex-col {
465
533
  flex-direction: column;
466
534
  }
467
535
  .items-center {
468
536
  align-items: center;
469
537
  }
538
+ .justify-end {
539
+ justify-content: flex-end;
540
+ }
470
541
  .justify-center {
471
542
  justify-content: center;
472
543
  }
@@ -479,25 +550,54 @@ video {
479
550
  .gap-2 {
480
551
  gap: 0.5rem;
481
552
  }
553
+ .gap-6 {
554
+ gap: 1.5rem;
555
+ }
556
+ .overflow-hidden {
557
+ overflow: hidden;
558
+ }
559
+ .overflow-y-auto {
560
+ overflow-y: auto;
561
+ }
482
562
  .rounded {
483
563
  border-radius: 0.25rem;
484
564
  }
485
565
  .rounded-2xl {
486
566
  border-radius: 1rem;
487
567
  }
568
+ .rounded-\[inherit\] {
569
+ border-radius: inherit;
570
+ }
488
571
  .rounded-full {
489
572
  border-radius: 9999px;
490
573
  }
491
574
  .rounded-lg {
492
575
  border-radius: 0.5rem;
493
576
  }
577
+ .rounded-md {
578
+ border-radius: 0.375rem;
579
+ }
580
+ .border {
581
+ border-width: 1px;
582
+ }
494
583
  .border-b-1 {
495
584
  border-bottom-width: 1px;
496
585
  }
586
+ .border-t-1 {
587
+ border-top-width: 1px;
588
+ }
589
+ .border-neutral-200 {
590
+ --tw-border-opacity: 1;
591
+ border-color: rgb(225 231 230 / var(--tw-border-opacity));
592
+ }
497
593
  .border-neutral-600 {
498
594
  --tw-border-opacity: 1;
499
595
  border-color: rgb(126 138 134 / var(--tw-border-opacity));
500
596
  }
597
+ .border-t-neutral-200 {
598
+ --tw-border-opacity: 1;
599
+ border-top-color: rgb(225 231 230 / var(--tw-border-opacity));
600
+ }
501
601
  .bg-error-100 {
502
602
  --tw-bg-opacity: 1;
503
603
  background-color: rgb(255 231 216 / var(--tw-bg-opacity));
@@ -506,6 +606,14 @@ video {
506
606
  --tw-bg-opacity: 1;
507
607
  background-color: rgb(207 235 254 / var(--tw-bg-opacity));
508
608
  }
609
+ .bg-neutral-100 {
610
+ --tw-bg-opacity: 1;
611
+ background-color: rgb(243 246 245 / var(--tw-bg-opacity));
612
+ }
613
+ .bg-neutral-200 {
614
+ --tw-bg-opacity: 1;
615
+ background-color: rgb(225 231 230 / var(--tw-bg-opacity));
616
+ }
509
617
  .bg-neutral-300 {
510
618
  --tw-bg-opacity: 1;
511
619
  background-color: rgb(207 217 215 / var(--tw-bg-opacity));
@@ -546,10 +654,21 @@ video {
546
654
  .p-4 {
547
655
  padding: 1rem;
548
656
  }
657
+ .p-\[0\.625rem\] {
658
+ padding: 0.625rem;
659
+ }
549
660
  .px-1 {
550
661
  padding-left: 0.25rem;
551
662
  padding-right: 0.25rem;
552
663
  }
664
+ .px-10 {
665
+ padding-left: 2.5rem;
666
+ padding-right: 2.5rem;
667
+ }
668
+ .px-2 {
669
+ padding-left: 0.5rem;
670
+ padding-right: 0.5rem;
671
+ }
553
672
  .px-3 {
554
673
  padding-left: 0.75rem;
555
674
  padding-right: 0.75rem;
@@ -570,12 +689,29 @@ video {
570
689
  padding-top: 0.25rem;
571
690
  padding-bottom: 0.25rem;
572
691
  }
692
+ .py-2 {
693
+ padding-top: 0.5rem;
694
+ padding-bottom: 0.5rem;
695
+ }
696
+ .py-3 {
697
+ padding-top: 0.75rem;
698
+ padding-bottom: 0.75rem;
699
+ }
700
+ .pb-12 {
701
+ padding-bottom: 3rem;
702
+ }
573
703
  .pl-4 {
574
704
  padding-left: 1rem;
575
705
  }
576
706
  .pr-2 {
577
707
  padding-right: 0.5rem;
578
708
  }
709
+ .pt-10 {
710
+ padding-top: 2.5rem;
711
+ }
712
+ .text-left {
713
+ text-align: left;
714
+ }
579
715
  .text-start {
580
716
  text-align: start;
581
717
  }
@@ -586,6 +722,10 @@ video {
586
722
  font-size: 1rem;
587
723
  line-height: 1.5rem;
588
724
  }
725
+ .text-lg {
726
+ font-size: 1.125rem;
727
+ line-height: 1.75rem;
728
+ }
589
729
  .text-sm {
590
730
  font-size: 0.875rem;
591
731
  line-height: 1.25rem;
@@ -594,9 +734,18 @@ video {
594
734
  font-size: 0.75rem;
595
735
  line-height: 1rem;
596
736
  }
737
+ .font-medium {
738
+ font-weight: 500;
739
+ }
740
+ .font-normal {
741
+ font-weight: 400;
742
+ }
597
743
  .font-semibold {
598
744
  font-weight: 600;
599
745
  }
746
+ .uppercase {
747
+ text-transform: uppercase;
748
+ }
600
749
  .leading-\[110\%\] {
601
750
  line-height: 110%;
602
751
  }
@@ -606,6 +755,18 @@ video {
606
755
  .leading-\[130\%\] {
607
756
  line-height: 130%;
608
757
  }
758
+ .leading-none {
759
+ line-height: 1;
760
+ }
761
+ .tracking-body {
762
+ letter-spacing: 0.32px;
763
+ }
764
+ .tracking-body-lg {
765
+ letter-spacing: 0.36px;
766
+ }
767
+ .tracking-sm {
768
+ letter-spacing: 0.28px;
769
+ }
609
770
  .text-error-500 {
610
771
  --tw-text-opacity: 1;
611
772
  color: rgb(241 96 89 / var(--tw-text-opacity));
@@ -705,6 +866,10 @@ video {
705
866
  .caret-neutral-900 {
706
867
  caret-color: #283331;
707
868
  }
869
+ .outline-none {
870
+ outline: 2px solid transparent;
871
+ outline-offset: 2px;
872
+ }
708
873
  .outline-0 {
709
874
  outline-width: 0px;
710
875
  }
@@ -756,6 +921,17 @@ video {
756
921
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
757
922
  transition-duration: 150ms;
758
923
  }
924
+ .transition-colors {
925
+ transition-property:
926
+ color,
927
+ background-color,
928
+ border-color,
929
+ text-decoration-color,
930
+ fill,
931
+ stroke;
932
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
933
+ transition-duration: 150ms;
934
+ }
759
935
  .ease-linear {
760
936
  transition-timing-function: linear;
761
937
  }
@@ -1067,6 +1243,15 @@ video {
1067
1243
  .aria-selected\:\[\&\>button\]\:pb-\[0\.53125rem\] > button[aria-selected=true] {
1068
1244
  padding-bottom: 0.53125rem;
1069
1245
  }
1246
+ .\[\&\>div\]\:\!flex > div {
1247
+ display: flex !important;
1248
+ }
1249
+ .\[\&\>div\]\:h-full > div {
1250
+ height: 100%;
1251
+ }
1252
+ .\[\&\>div\]\:flex-col > div {
1253
+ flex-direction: column;
1254
+ }
1070
1255
  .\[\&_svg\]\:h-\[0\.875rem\] svg {
1071
1256
  height: 0.875rem;
1072
1257
  }
package/dist/index.mjs CHANGED
@@ -1,13 +1,13 @@
1
+ export { Spinner } from './chunk-YXXI2T2N.mjs';
1
2
  export { Tabs, TabsContent, TabsList, TabsTrigger } from './chunk-2OWGGXTX.mjs';
2
- export { TextField } from './chunk-VIVTNX5U.mjs';
3
+ export { TextField } from './chunk-KY2KI4AD.mjs';
3
4
  export { Tooltip, TooltipProvider } from './chunk-FRPPC3Z5.mjs';
4
- export { Alert } from './chunk-OO4FIPNF.mjs';
5
- export { Button } from './chunk-22IACXYD.mjs';
5
+ export { Alert } from './chunk-XDQ2Y2UR.mjs';
6
+ export { Button } from './chunk-4YE5CU7E.mjs';
6
7
  export { ChipForm } from './chunk-RZ2JP5UH.mjs';
7
- import './chunk-P3UP2HUA.mjs';
8
8
  export { ChipStatus } from './chunk-WSAW6L2X.mjs';
9
+ import './chunk-P3UP2HUA.mjs';
9
10
  export { IconButton } from './chunk-JVSF3AX2.mjs';
10
- export { Spinner } from './chunk-TLX6BZS2.mjs';
11
11
  import './chunk-2MWIFYP3.mjs';
12
- import './chunk-GY2JBRY6.mjs';
12
+ import './chunk-ERH7LWVL.mjs';
13
13
  import './chunk-PLJ6ZHAI.mjs';
@@ -0,0 +1,10 @@
1
+ import { FC } from 'react';
2
+
3
+ declare const options: readonly ["10", "25", "50"];
4
+ type RowsPerPageSelectProps = {
5
+ value: (typeof options)[number];
6
+ onRowsPerPageChange: (value: (typeof options)[number]) => void;
7
+ };
8
+ declare const RowsPerPageSelect: FC<RowsPerPageSelectProps>;
9
+
10
+ export { RowsPerPageSelect as default };
@@ -0,0 +1,5 @@
1
+ export { rows_per_page_select_default as default } from './chunk-O5QOPJOD.mjs';
2
+ import './chunk-P3UP2HUA.mjs';
3
+ import './chunk-2MWIFYP3.mjs';
4
+ import './chunk-ERH7LWVL.mjs';
5
+ import './chunk-PLJ6ZHAI.mjs';
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
3
+
4
+ declare const ScrollArea: React.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
5
+ declare const ScrollBar: React.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaScrollbarProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
6
+
7
+ export { ScrollArea, ScrollBar };
@@ -0,0 +1,4 @@
1
+ export { ScrollArea, ScrollBar } from './chunk-ZVOUAD54.mjs';
2
+ import './chunk-P3UP2HUA.mjs';
3
+ import './chunk-2MWIFYP3.mjs';
4
+ import './chunk-PLJ6ZHAI.mjs';
package/dist/spinner.mjs CHANGED
@@ -1,4 +1,4 @@
1
- export { Spinner } from './chunk-TLX6BZS2.mjs';
1
+ export { Spinner } from './chunk-YXXI2T2N.mjs';
2
2
  import './chunk-2MWIFYP3.mjs';
3
- import './chunk-GY2JBRY6.mjs';
3
+ import './chunk-ERH7LWVL.mjs';
4
4
  import './chunk-PLJ6ZHAI.mjs';
@@ -1,5 +1,5 @@
1
- export { TextField } from './chunk-VIVTNX5U.mjs';
1
+ export { TextField } from './chunk-KY2KI4AD.mjs';
2
2
  import './chunk-P3UP2HUA.mjs';
3
3
  import './chunk-2MWIFYP3.mjs';
4
- import './chunk-GY2JBRY6.mjs';
4
+ import './chunk-ERH7LWVL.mjs';
5
5
  import './chunk-PLJ6ZHAI.mjs';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sodtrack-web-ui",
3
- "version": "0.7.14",
3
+ "version": "0.9.0",
4
4
  "description": "UI components for Sodtrack Web",
5
5
  "exports": {
6
6
  "./dist/index.css": "./dist/index.css",
@@ -45,9 +45,12 @@
45
45
  "typescript": "^5.4.5"
46
46
  },
47
47
  "dependencies": {
48
+ "@floating-ui/react": "^0.26.16",
48
49
  "@radix-ui/react-label": "^2.0.2",
50
+ "@radix-ui/react-scroll-area": "^1.0.5",
49
51
  "@radix-ui/react-tabs": "^1.0.4",
50
52
  "@radix-ui/react-tooltip": "^1.0.7",
53
+ "@tanstack/react-table": "^8.17.3",
51
54
  "cva": "1.0.0-beta.1"
52
55
  },
53
56
  "scripts": {