@kosmeo-ui/react 0.1.0 → 0.2.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/README.md +4 -0
- package/dist/components/buttons/button/index.d.ts +2 -0
- package/dist/components/buttons/button/index.d.ts.map +1 -1
- package/dist/components/buttons/button/index.js +2 -2
- package/dist/components/buttons/button/index.js.map +1 -1
- package/dist/components/buttons/button/styles.css +6 -4
- package/dist/components/buttons/rowActions/styles.css +7 -0
- package/dist/components/data-display/addressBlock/styles.css +2 -4
- package/dist/components/data-display/dataTable/styles.css +15 -0
- package/dist/components/data-display/infiniteScroll/filters/searchFilter.d.ts.map +1 -1
- package/dist/components/data-display/infiniteScroll/filters/searchFilter.js +4 -35
- package/dist/components/data-display/infiniteScroll/filters/searchFilter.js.map +1 -1
- package/dist/components/data-display/infiniteScroll/filters/styles.css +4 -0
- package/dist/components/data-display/infiniteScroll/header/deleteButton.d.ts.map +1 -1
- package/dist/components/data-display/infiniteScroll/header/deleteButton.js +1 -1
- package/dist/components/data-display/infiniteScroll/header/deleteButton.js.map +1 -1
- package/dist/components/data-display/infiniteScroll/header/index.d.ts.map +1 -1
- package/dist/components/data-display/infiniteScroll/header/index.js +1 -1
- package/dist/components/data-display/infiniteScroll/header/index.js.map +1 -1
- package/dist/components/data-display/infiniteScroll/table/index.d.ts.map +1 -1
- package/dist/components/data-display/infiniteScroll/table/index.js +2 -2
- package/dist/components/data-display/infiniteScroll/table/index.js.map +1 -1
- package/dist/components/data-display/infiniteScroll/tags/index.d.ts.map +1 -1
- package/dist/components/data-display/infiniteScroll/tags/index.js +1 -6
- package/dist/components/data-display/infiniteScroll/tags/index.js.map +1 -1
- package/dist/components/data-display/infiniteScroll/tags/listFilterTag.d.ts.map +1 -1
- package/dist/components/data-display/infiniteScroll/tags/listFilterTag.js +3 -3
- package/dist/components/data-display/infiniteScroll/tags/listFilterTag.js.map +1 -1
- package/dist/components/data-display/infiniteScroll/tags/rangeFilterTag.d.ts.map +1 -1
- package/dist/components/data-display/infiniteScroll/tags/rangeFilterTag.js +3 -13
- package/dist/components/data-display/infiniteScroll/tags/rangeFilterTag.js.map +1 -1
- package/dist/components/data-display/infiniteScroll/tags/selectFilterTag.d.ts.map +1 -1
- package/dist/components/data-display/infiniteScroll/tags/selectFilterTag.js +3 -5
- package/dist/components/data-display/infiniteScroll/tags/selectFilterTag.js.map +1 -1
- package/dist/components/data-display/infiniteScroll/tags/styles.css +1 -29
- package/dist/components/data-display/recoveryCodeGrid/styles.css +1 -2
- package/dist/components/data-display/statCard/styles.css +1 -1
- package/dist/components/data-display/table/styles.css +12 -1
- package/dist/components/data-display/tagCard/index.d.ts.map +1 -1
- package/dist/components/data-display/tagCard/index.js +1 -1
- package/dist/components/data-display/tagCard/index.js.map +1 -1
- package/dist/components/feedback/badge/styles.css +8 -6
- package/dist/components/feedback/emptyState/styles.css +2 -4
- package/dist/components/feedback/progressBar/index.d.ts.map +1 -1
- package/dist/components/feedback/progressBar/index.js +7 -2
- package/dist/components/feedback/progressBar/index.js.map +1 -1
- package/dist/components/feedback/progressBar/styles.css +15 -6
- package/dist/components/feedback/spinner/styles.css +0 -13
- package/dist/components/forms/fieldShell/styles.css +1 -1
- package/dist/components/forms/formActions/styles.css +1 -1
- package/dist/components/forms/infoRow/styles.css +1 -2
- package/dist/components/forms/requiredAsterisk/styles.css +1 -1
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/inputs/checkbox/index.d.ts +6 -1
- package/dist/components/inputs/checkbox/index.d.ts.map +1 -1
- package/dist/components/inputs/checkbox/index.js +9 -2
- package/dist/components/inputs/checkbox/index.js.map +1 -1
- package/dist/components/inputs/checkbox/styles.css +8 -0
- package/dist/components/inputs/colorPicker/styles.css +1 -1
- package/dist/components/inputs/dateInput/index.d.ts +3 -3
- package/dist/components/inputs/dateInput/index.d.ts.map +1 -1
- package/dist/components/inputs/dateInput/index.js +13 -3
- package/dist/components/inputs/dateInput/index.js.map +1 -1
- package/dist/components/inputs/dropdown/index.d.ts +2 -0
- package/dist/components/inputs/dropdown/index.d.ts.map +1 -1
- package/dist/components/inputs/dropdown/index.js +1 -1
- package/dist/components/inputs/dropdown/index.js.map +1 -1
- package/dist/components/inputs/dropdownArrowButton/index.d.ts.map +1 -1
- package/dist/components/inputs/dropdownArrowButton/index.js +1 -1
- package/dist/components/inputs/dropdownArrowButton/index.js.map +1 -1
- package/dist/components/inputs/dropdownArrowButton/styles.css +1 -1
- package/dist/components/inputs/input/index.d.ts +5 -1
- package/dist/components/inputs/input/index.d.ts.map +1 -1
- package/dist/components/inputs/input/index.js +25 -4
- package/dist/components/inputs/input/index.js.map +1 -1
- package/dist/components/inputs/input/styles.css +46 -2
- package/dist/components/inputs/multiSelect/index.d.ts.map +1 -1
- package/dist/components/inputs/multiSelect/index.js +1 -1
- package/dist/components/inputs/multiSelect/index.js.map +1 -1
- package/dist/components/inputs/multiSelect/styles.css +1 -1
- package/dist/components/inputs/phoneInput/index.d.ts.map +1 -1
- package/dist/components/inputs/phoneInput/index.js +1 -1
- package/dist/components/inputs/phoneInput/index.js.map +1 -1
- package/dist/components/inputs/richTextEditor/index.d.ts.map +1 -1
- package/dist/components/inputs/richTextEditor/index.js +14 -3
- package/dist/components/inputs/richTextEditor/index.js.map +1 -1
- package/dist/components/layout/borderedSection/index.d.ts +3 -1
- package/dist/components/layout/borderedSection/index.d.ts.map +1 -1
- package/dist/components/layout/borderedSection/index.js +2 -2
- package/dist/components/layout/borderedSection/index.js.map +1 -1
- package/dist/components/layout/card/styles.css +22 -0
- package/dist/components/layout/sectionHeader/styles.css +1 -2
- package/dist/components/navigation/pagination/index.d.ts +23 -0
- package/dist/components/navigation/pagination/index.d.ts.map +1 -0
- package/dist/components/navigation/pagination/index.js +29 -0
- package/dist/components/navigation/pagination/index.js.map +1 -0
- package/dist/components/navigation/pagination/styles.css +113 -0
- package/dist/components/navigation/pagination/utils.d.ts +9 -0
- package/dist/components/navigation/pagination/utils.d.ts.map +1 -0
- package/dist/components/navigation/pagination/utils.js +25 -0
- package/dist/components/navigation/pagination/utils.js.map +1 -0
- package/dist/components/navigation/sidebar/styles.css +9 -1
- package/dist/components/navigation/tabButton/styles.css +6 -6
- package/dist/components/navigation/tabs/styles.css +2 -2
- package/dist/components/overlays/confirmationModal/index.d.ts +5 -0
- package/dist/components/overlays/confirmationModal/index.d.ts.map +1 -1
- package/dist/components/overlays/confirmationModal/index.js +23 -4
- package/dist/components/overlays/confirmationModal/index.js.map +1 -1
- package/dist/components/overlays/confirmationModal/styles.css +3 -0
- package/dist/components/overlays/modal/index.d.ts +2 -0
- package/dist/components/overlays/modal/index.d.ts.map +1 -1
- package/dist/components/overlays/modal/index.js +13 -4
- package/dist/components/overlays/modal/index.js.map +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/usePaginated.d.ts +43 -0
- package/dist/hooks/usePaginated.d.ts.map +1 -0
- package/dist/hooks/usePaginated.js +60 -0
- package/dist/hooks/usePaginated.js.map +1 -0
- package/dist/styles.css +37 -14
- package/package.json +1 -1
- package/src/components/buttons/button/index.tsx +14 -5
- package/src/components/buttons/button/styles.css +6 -4
- package/src/components/buttons/rowActions/styles.css +7 -0
- package/src/components/data-display/addressBlock/styles.css +2 -4
- package/src/components/data-display/dataTable/styles.css +15 -0
- package/src/components/data-display/infiniteScroll/filters/searchFilter.tsx +16 -65
- package/src/components/data-display/infiniteScroll/filters/styles.css +4 -0
- package/src/components/data-display/infiniteScroll/header/deleteButton.tsx +1 -0
- package/src/components/data-display/infiniteScroll/header/index.tsx +4 -0
- package/src/components/data-display/infiniteScroll/table/index.tsx +2 -0
- package/src/components/data-display/infiniteScroll/tags/index.tsx +1 -11
- package/src/components/data-display/infiniteScroll/tags/listFilterTag.tsx +12 -16
- package/src/components/data-display/infiniteScroll/tags/rangeFilterTag.tsx +4 -22
- package/src/components/data-display/infiniteScroll/tags/selectFilterTag.tsx +4 -11
- package/src/components/data-display/infiniteScroll/tags/styles.css +1 -29
- package/src/components/data-display/recoveryCodeGrid/styles.css +1 -2
- package/src/components/data-display/statCard/styles.css +1 -1
- package/src/components/data-display/table/styles.css +12 -1
- package/src/components/data-display/tagCard/index.tsx +5 -3
- package/src/components/feedback/badge/styles.css +8 -6
- package/src/components/feedback/emptyState/styles.css +2 -4
- package/src/components/feedback/progressBar/index.tsx +14 -8
- package/src/components/feedback/progressBar/styles.css +15 -6
- package/src/components/feedback/spinner/styles.css +0 -13
- package/src/components/forms/fieldShell/styles.css +1 -1
- package/src/components/forms/formActions/styles.css +1 -1
- package/src/components/forms/infoRow/styles.css +1 -2
- package/src/components/forms/requiredAsterisk/styles.css +1 -1
- package/src/components/index.ts +2 -0
- package/src/components/inputs/checkbox/index.tsx +24 -4
- package/src/components/inputs/checkbox/styles.css +8 -0
- package/src/components/inputs/colorPicker/styles.css +1 -1
- package/src/components/inputs/dateInput/index.tsx +13 -4
- package/src/components/inputs/dropdown/index.tsx +4 -0
- package/src/components/inputs/dropdownArrowButton/index.tsx +1 -0
- package/src/components/inputs/dropdownArrowButton/styles.css +1 -1
- package/src/components/inputs/input/index.tsx +47 -4
- package/src/components/inputs/input/styles.css +46 -2
- package/src/components/inputs/multiSelect/index.tsx +1 -0
- package/src/components/inputs/multiSelect/styles.css +1 -1
- package/src/components/inputs/phoneInput/index.tsx +6 -2
- package/src/components/inputs/richTextEditor/index.tsx +27 -3
- package/src/components/layout/borderedSection/index.tsx +4 -1
- package/src/components/layout/card/styles.css +22 -0
- package/src/components/layout/sectionHeader/styles.css +1 -2
- package/src/components/navigation/pagination/index.tsx +134 -0
- package/src/components/navigation/pagination/styles.css +113 -0
- package/src/components/navigation/pagination/utils.ts +32 -0
- package/src/components/navigation/sidebar/styles.css +9 -1
- package/src/components/navigation/tabButton/styles.css +6 -6
- package/src/components/navigation/tabs/styles.css +2 -2
- package/src/components/overlays/confirmationModal/index.tsx +37 -1
- package/src/components/overlays/confirmationModal/styles.css +3 -0
- package/src/components/overlays/modal/index.tsx +23 -4
- package/src/hooks/index.ts +4 -0
- package/src/hooks/usePaginated.ts +123 -0
- package/src/styles.css +37 -14
- package/dist/components/data-display/infiniteScroll/tags/searchFilterTag.d.ts +0 -10
- package/dist/components/data-display/infiniteScroll/tags/searchFilterTag.d.ts.map +0 -1
- package/dist/components/data-display/infiniteScroll/tags/searchFilterTag.js +0 -22
- package/dist/components/data-display/infiniteScroll/tags/searchFilterTag.js.map +0 -1
- package/src/components/data-display/infiniteScroll/tags/searchFilterTag.tsx +0 -41
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { keepPreviousData, useQuery } from "@tanstack/react-query";
|
|
4
|
+
import { useCallback, useEffect, useState } from "react";
|
|
5
|
+
import { AxiosInstance } from "axios";
|
|
6
|
+
|
|
7
|
+
interface OffsetPageResponse<T> {
|
|
8
|
+
data: T[];
|
|
9
|
+
total: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
type QueryParams = Record<string, string | number | boolean | undefined>;
|
|
13
|
+
|
|
14
|
+
interface UsePaginatedOptions {
|
|
15
|
+
axiosInstance: AxiosInstance;
|
|
16
|
+
/** API endpoint to fetch from (e.g., "/v1/projects"). It takes `limit` and `offset` and returns `{ data, total }`. */
|
|
17
|
+
endpoint: string;
|
|
18
|
+
/** Query key for React Query caching. */
|
|
19
|
+
queryKey: string;
|
|
20
|
+
/** Organization ID to scope cache keys (prevents stale cross-org data). */
|
|
21
|
+
orgId?: string | null;
|
|
22
|
+
/** Initial page size (default: 10). */
|
|
23
|
+
initialPageSize?: number;
|
|
24
|
+
/** Extra query params such as filters and sort. Changing them returns to page 1. */
|
|
25
|
+
params?: QueryParams;
|
|
26
|
+
enabled?: boolean;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export interface UsePaginatedReturn<T> {
|
|
30
|
+
/** The current page's rows. */
|
|
31
|
+
data: T[];
|
|
32
|
+
/** Total matching rows across all pages. */
|
|
33
|
+
total: number;
|
|
34
|
+
/** Current page, starting at 1. */
|
|
35
|
+
page: number;
|
|
36
|
+
pageSize: number;
|
|
37
|
+
pageCount: number;
|
|
38
|
+
setPage: (page: number) => void;
|
|
39
|
+
/** Changes the page size and returns to page 1. */
|
|
40
|
+
setPageSize: (pageSize: number) => void;
|
|
41
|
+
/** True until the first page arrives. */
|
|
42
|
+
isLoading: boolean;
|
|
43
|
+
/** True whenever a page is loading, including after the first. */
|
|
44
|
+
isFetching: boolean;
|
|
45
|
+
error: Error | null;
|
|
46
|
+
refetch: () => void;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* One page at a time from an offset endpoint (`limit` + `offset` in,
|
|
51
|
+
* `{ data, total }` out), for `Pagination`. The previous page stays on screen
|
|
52
|
+
* while the next one loads. Use `useInfiniteCursor` for `InfiniteScroll`.
|
|
53
|
+
*/
|
|
54
|
+
const usePaginated = <T>(
|
|
55
|
+
options: UsePaginatedOptions
|
|
56
|
+
): UsePaginatedReturn<T> => {
|
|
57
|
+
const {
|
|
58
|
+
axiosInstance,
|
|
59
|
+
endpoint,
|
|
60
|
+
queryKey,
|
|
61
|
+
orgId,
|
|
62
|
+
initialPageSize = 10,
|
|
63
|
+
params,
|
|
64
|
+
enabled = true,
|
|
65
|
+
} = options;
|
|
66
|
+
|
|
67
|
+
const [page, setPage] = useState(1);
|
|
68
|
+
const [pageSize, setPageSizeState] = useState(initialPageSize);
|
|
69
|
+
|
|
70
|
+
// New filters or sort make the old page number meaningless.
|
|
71
|
+
const paramsKey = JSON.stringify(params ?? {});
|
|
72
|
+
const [prevParamsKey, setPrevParamsKey] = useState(paramsKey);
|
|
73
|
+
if (paramsKey !== prevParamsKey) {
|
|
74
|
+
setPrevParamsKey(paramsKey);
|
|
75
|
+
setPage(1);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const query = useQuery<OffsetPageResponse<T>, Error>({
|
|
79
|
+
queryKey: [`${queryKey}-paged`, orgId ?? null, paramsKey, page, pageSize],
|
|
80
|
+
enabled,
|
|
81
|
+
placeholderData: keepPreviousData,
|
|
82
|
+
queryFn: async () => {
|
|
83
|
+
const res = await axiosInstance.get<OffsetPageResponse<T>>(endpoint, {
|
|
84
|
+
params: { ...params, limit: pageSize, offset: (page - 1) * pageSize },
|
|
85
|
+
});
|
|
86
|
+
return res.data;
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
const total = query.data?.total ?? 0;
|
|
91
|
+
const pageCount = Math.max(1, Math.ceil(total / pageSize));
|
|
92
|
+
|
|
93
|
+
// Rows deleted from the last page can leave it empty; step back.
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
if (query.data && !query.isPlaceholderData && page > pageCount) {
|
|
96
|
+
setPage(pageCount);
|
|
97
|
+
}
|
|
98
|
+
}, [query.data, query.isPlaceholderData, page, pageCount]);
|
|
99
|
+
|
|
100
|
+
const setPageSize = useCallback((size: number) => {
|
|
101
|
+
setPageSizeState(size);
|
|
102
|
+
setPage(1);
|
|
103
|
+
}, []);
|
|
104
|
+
|
|
105
|
+
const { refetch } = query;
|
|
106
|
+
const refetchPage = useCallback(() => void refetch(), [refetch]);
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
data: query.data?.data ?? [],
|
|
110
|
+
total,
|
|
111
|
+
page,
|
|
112
|
+
pageSize,
|
|
113
|
+
pageCount,
|
|
114
|
+
setPage,
|
|
115
|
+
setPageSize,
|
|
116
|
+
isLoading: query.isLoading,
|
|
117
|
+
isFetching: query.isFetching,
|
|
118
|
+
error: query.error,
|
|
119
|
+
refetch: refetchPage,
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export default usePaginated;
|
package/src/styles.css
CHANGED
|
@@ -81,12 +81,14 @@ h6 {
|
|
|
81
81
|
--primary-color-active: #141f6c;
|
|
82
82
|
--primary-color-background: #3d52db;
|
|
83
83
|
--primary-color-background-light: #f0f2ff;
|
|
84
|
+
/* Primary as text (links, active tabs) on page and card surfaces. */
|
|
85
|
+
--primary-color-text: #17257d;
|
|
84
86
|
|
|
85
|
-
/* Secondary Colors */
|
|
86
|
-
--secondary-color: #
|
|
87
|
-
--secondary-color-hover: #
|
|
88
|
-
--secondary-color-active: #
|
|
89
|
-
--secondary-color-background: #
|
|
87
|
+
/* Secondary Colors — dark enough for white text (4.5:1) */
|
|
88
|
+
--secondary-color: #6b6b6b;
|
|
89
|
+
--secondary-color-hover: #757575;
|
|
90
|
+
--secondary-color-active: #616161;
|
|
91
|
+
--secondary-color-background: #6b6b6b;
|
|
90
92
|
|
|
91
93
|
/* Light Colors */
|
|
92
94
|
--light-color: #fafafa;
|
|
@@ -101,18 +103,22 @@ h6 {
|
|
|
101
103
|
--warning-color-background: #ffd24d;
|
|
102
104
|
--warning-color-background-light: #fff8e1;
|
|
103
105
|
--warning-color-text: #92400e;
|
|
106
|
+
/* Text on a warning fill. */
|
|
107
|
+
--warning-color-contrast: #333;
|
|
104
108
|
|
|
105
109
|
/* Danger Colors */
|
|
106
110
|
--danger-color: #dc3545;
|
|
107
111
|
--danger-color-hover: #e23243;
|
|
108
112
|
--danger-color-active: #d92638;
|
|
109
|
-
--danger-color-background: #
|
|
113
|
+
--danger-color-background: #c42b3b;
|
|
114
|
+
/* Danger as text (field errors) on page and card surfaces. */
|
|
115
|
+
--danger-color-text: #b92535;
|
|
110
116
|
|
|
111
117
|
/* Success Colors */
|
|
112
118
|
--success-color: #198754;
|
|
113
119
|
--success-color-hover: #1c975d;
|
|
114
120
|
--success-color-active: #188150;
|
|
115
|
-
--success-color-background: #
|
|
121
|
+
--success-color-background: #157347;
|
|
116
122
|
--success-color-background-light: #e8f5e8;
|
|
117
123
|
|
|
118
124
|
/* Background Colors */
|
|
@@ -136,7 +142,7 @@ h6 {
|
|
|
136
142
|
--text-color: #333;
|
|
137
143
|
--text-color-secondary: #666;
|
|
138
144
|
--text-color-light: white;
|
|
139
|
-
--text-color-link: #
|
|
145
|
+
--text-color-link: #0062cc;
|
|
140
146
|
--text-size-sm: 0.875rem;
|
|
141
147
|
--text-size-md: 1rem;
|
|
142
148
|
--text-size-lg: 1.125rem;
|
|
@@ -161,11 +167,12 @@ h6 {
|
|
|
161
167
|
--primary-color-active: #3d4f99;
|
|
162
168
|
--primary-color-background: #4a5fb5;
|
|
163
169
|
--primary-color-background-light: #1c2240;
|
|
170
|
+
--primary-color-text: #9aabf2;
|
|
164
171
|
|
|
165
172
|
/* Secondary Colors */
|
|
166
|
-
--secondary-color: #
|
|
167
|
-
--secondary-color-hover: #
|
|
168
|
-
--secondary-color-active: #
|
|
173
|
+
--secondary-color: #646a75;
|
|
174
|
+
--secondary-color-hover: #6e7480;
|
|
175
|
+
--secondary-color-active: #5a606a;
|
|
169
176
|
--secondary-color-background: #4a4f5a;
|
|
170
177
|
|
|
171
178
|
/* Light Colors — surface-toned (used for "light" variant buttons/pills) */
|
|
@@ -181,17 +188,19 @@ h6 {
|
|
|
181
188
|
--warning-color-background: #4d3a00;
|
|
182
189
|
--warning-color-background-light: #2e2200;
|
|
183
190
|
--warning-color-text: #f5c542;
|
|
191
|
+
--warning-color-contrast: #15181f;
|
|
184
192
|
|
|
185
193
|
/* Danger Colors */
|
|
186
194
|
--danger-color: #c94250;
|
|
187
195
|
--danger-color-hover: #d35261;
|
|
188
196
|
--danger-color-active: #b53847;
|
|
189
197
|
--danger-color-background: #4a1820;
|
|
198
|
+
--danger-color-text: #ff8f9a;
|
|
190
199
|
|
|
191
200
|
/* Success Colors */
|
|
192
|
-
--success-color: #
|
|
193
|
-
--success-color-hover: #
|
|
194
|
-
--success-color-active: #
|
|
201
|
+
--success-color: #1f7a4e;
|
|
202
|
+
--success-color-hover: #238556;
|
|
203
|
+
--success-color-active: #1b6d45;
|
|
195
204
|
--success-color-background: #133e2c;
|
|
196
205
|
--success-color-background-light: #0d2419;
|
|
197
206
|
|
|
@@ -384,3 +393,17 @@ code {
|
|
|
384
393
|
.k-flex-wrap {
|
|
385
394
|
flex-wrap: wrap;
|
|
386
395
|
}
|
|
396
|
+
|
|
397
|
+
/* Visually hidden, still read by screen readers. Global so any component can
|
|
398
|
+
use it without depending on another component's stylesheet. */
|
|
399
|
+
.k-sr-only {
|
|
400
|
+
position: absolute;
|
|
401
|
+
width: 0.0625rem;
|
|
402
|
+
height: 0.0625rem;
|
|
403
|
+
padding: 0;
|
|
404
|
+
margin: -0.0625rem;
|
|
405
|
+
overflow: hidden;
|
|
406
|
+
clip: rect(0, 0, 0, 0);
|
|
407
|
+
white-space: nowrap;
|
|
408
|
+
border: 0;
|
|
409
|
+
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import "./styles.css";
|
|
2
|
-
import { GeneratedSearchFilter, InfiniteScrollMenuGeneratedFilter } from "../types.js";
|
|
3
|
-
interface InfiniteScrollSearchFilterTagProps {
|
|
4
|
-
filter: GeneratedSearchFilter;
|
|
5
|
-
filters: InfiniteScrollMenuGeneratedFilter[];
|
|
6
|
-
handleNewFilters: (filters: InfiniteScrollMenuGeneratedFilter[]) => void;
|
|
7
|
-
}
|
|
8
|
-
declare const SearchFilterTag: (props: InfiniteScrollSearchFilterTagProps) => import("react").JSX.Element;
|
|
9
|
-
export default SearchFilterTag;
|
|
10
|
-
//# sourceMappingURL=searchFilterTag.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"searchFilterTag.d.ts","sourceRoot":"","sources":["../../../../../src/components/data-display/infiniteScroll/tags/searchFilterTag.tsx"],"names":[],"mappings":"AAMA,OAAO,cAAc,CAAC;AACtB,OAAO,EACL,qBAAqB,EACrB,iCAAiC,EAClC,MAAM,aAAa,CAAC;AAErB,UAAU,kCAAkC;IAC1C,MAAM,EAAE,qBAAqB,CAAC;IAC9B,OAAO,EAAE,iCAAiC,EAAE,CAAC;IAC7C,gBAAgB,EAAE,CAAC,OAAO,EAAE,iCAAiC,EAAE,KAAK,IAAI,CAAC;CAC1E;AAED,QAAA,MAAM,eAAe,GAAI,OAAO,kCAAkC,gCAoBjE,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { faMagnifyingGlass, faXmark } from "@fortawesome/free-solid-svg-icons";
|
|
4
|
-
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
5
|
-
import IconButton from "../../../buttons/iconButton/index.js";
|
|
6
|
-
import { useCallback } from "react";
|
|
7
|
-
import "./styles.css";
|
|
8
|
-
const SearchFilterTag = (props) => {
|
|
9
|
-
const handleRemove = useCallback(() => {
|
|
10
|
-
const newFilters = props.filters?.map((f) => {
|
|
11
|
-
if (f.filterId !== props.filter.filterId)
|
|
12
|
-
return f;
|
|
13
|
-
if (f.type !== "SEARCH")
|
|
14
|
-
return f;
|
|
15
|
-
return { ...f, value: "" };
|
|
16
|
-
});
|
|
17
|
-
props.handleNewFilters(newFilters);
|
|
18
|
-
}, [props.filters, props.filter]);
|
|
19
|
-
return (_jsxs("div", { className: "k-tag-container", children: [_jsx("p", { className: "k-tag-title", children: props.filter.title }), _jsxs("div", { className: "k-tag-actions", children: [_jsx(FontAwesomeIcon, { icon: faMagnifyingGlass }), _jsx("p", { className: "k-tag-value", children: props.filter.value }), _jsx(IconButton, { icon: faXmark, onClick: handleRemove, size: "sm" })] })] }));
|
|
20
|
-
};
|
|
21
|
-
export default SearchFilterTag;
|
|
22
|
-
//# sourceMappingURL=searchFilterTag.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"searchFilterTag.js","sourceRoot":"","sources":["../../../../../src/components/data-display/infiniteScroll/tags/searchFilterTag.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,UAAU,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,cAAc,CAAC;AAYtB,MAAM,eAAe,GAAG,CAAC,KAAyC,EAAE,EAAE;IACpE,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;QACpC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1C,IAAI,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,CAAC,QAAQ;gBAAE,OAAO,CAAC,CAAC;YACnD,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,CAAC,CAAC;YAClC,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAElC,OAAO,CACL,eAAK,SAAS,EAAC,iBAAiB,aAC9B,YAAG,SAAS,EAAC,aAAa,YAAE,KAAK,CAAC,MAAM,CAAC,KAAK,GAAK,EACnD,eAAK,SAAS,EAAC,eAAe,aAC5B,KAAC,eAAe,IAAC,IAAI,EAAE,iBAAiB,GAAI,EAC5C,YAAG,SAAS,EAAC,aAAa,YAAE,KAAK,CAAC,MAAM,CAAC,KAAK,GAAK,EACnD,KAAC,UAAU,IAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAC,IAAI,GAAG,IAC1D,IACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
import { faMagnifyingGlass, faXmark } from "@fortawesome/free-solid-svg-icons";
|
|
4
|
-
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
5
|
-
import IconButton from "../../../buttons/iconButton/index.js";
|
|
6
|
-
import { useCallback } from "react";
|
|
7
|
-
import "./styles.css";
|
|
8
|
-
import {
|
|
9
|
-
GeneratedSearchFilter,
|
|
10
|
-
InfiniteScrollMenuGeneratedFilter,
|
|
11
|
-
} from "../types.js";
|
|
12
|
-
|
|
13
|
-
interface InfiniteScrollSearchFilterTagProps {
|
|
14
|
-
filter: GeneratedSearchFilter;
|
|
15
|
-
filters: InfiniteScrollMenuGeneratedFilter[];
|
|
16
|
-
handleNewFilters: (filters: InfiniteScrollMenuGeneratedFilter[]) => void;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const SearchFilterTag = (props: InfiniteScrollSearchFilterTagProps) => {
|
|
20
|
-
const handleRemove = useCallback(() => {
|
|
21
|
-
const newFilters = props.filters?.map((f) => {
|
|
22
|
-
if (f.filterId !== props.filter.filterId) return f;
|
|
23
|
-
if (f.type !== "SEARCH") return f;
|
|
24
|
-
return { ...f, value: "" };
|
|
25
|
-
});
|
|
26
|
-
props.handleNewFilters(newFilters);
|
|
27
|
-
}, [props.filters, props.filter]);
|
|
28
|
-
|
|
29
|
-
return (
|
|
30
|
-
<div className="k-tag-container">
|
|
31
|
-
<p className="k-tag-title">{props.filter.title}</p>
|
|
32
|
-
<div className="k-tag-actions">
|
|
33
|
-
<FontAwesomeIcon icon={faMagnifyingGlass} />
|
|
34
|
-
<p className="k-tag-value">{props.filter.value}</p>
|
|
35
|
-
<IconButton icon={faXmark} onClick={handleRemove} size="sm" />
|
|
36
|
-
</div>
|
|
37
|
-
</div>
|
|
38
|
-
);
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
export default SearchFilterTag;
|