@addev-be/ui 0.2.13 → 0.2.15

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.
Files changed (114) hide show
  1. package/dist/Icons.d.ts +3 -1
  2. package/dist/Icons.js +5 -1
  3. package/dist/components/data/DataGrid/{FilterValuesScroller.d.ts → DataGridFilterMenu/FilterValuesScroller.d.ts} +1 -1
  4. package/dist/components/data/DataGrid/{FilterValuesScroller.js → DataGridFilterMenu/FilterValuesScroller.js} +6 -9
  5. package/dist/components/data/DataGrid/DataGridFilterMenu/index.js +3 -3
  6. package/dist/components/data/DataGrid/DataGridFilterMenu/styles.d.ts +9 -0
  7. package/dist/components/data/DataGrid/DataGridFilterMenu/styles.js +12 -2
  8. package/dist/components/data/DataGrid/FilterModalContent/index.js +18 -9
  9. package/dist/components/data/DataGrid/helpers/columns.d.ts +1 -0
  10. package/dist/components/data/DataGrid/helpers/columns.js +7 -6
  11. package/dist/components/data/DataGrid/helpers/filters.d.ts +1 -0
  12. package/dist/components/data/DataGrid/helpers/filters.js +71 -2
  13. package/dist/components/data/DataGrid/hooks/useDataGrid.js +2 -1
  14. package/dist/components/data/DataGrid/hooks/useDataGridCopy.js +2 -0
  15. package/dist/components/data/DataGrid/styles.d.ts +0 -9
  16. package/dist/components/data/DataGrid/styles.js +2 -12
  17. package/dist/components/data/DataGrid/types.d.ts +2 -0
  18. package/dist/components/data/SqlRequestDataGrid/helpers/columns.js +6 -6
  19. package/dist/helpers/numbers.d.ts +1 -0
  20. package/dist/helpers/numbers.js +9 -1
  21. package/dist/services/globalSearch.d.ts +13 -0
  22. package/dist/services/globalSearch.js +8 -0
  23. package/package.json +18 -12
  24. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.d.ts +0 -9
  25. package/dist/components/data/DataGrid/AdvancedRequestDataGrid.js +0 -171
  26. package/dist/components/data/DataGrid/helpers/advancedRequests.d.ts +0 -12
  27. package/dist/components/data/DataGrid/helpers/advancedRequests.js +0 -53
  28. package/eslint.config.js +0 -28
  29. package/src/Icons.tsx +0 -108
  30. package/src/components/data/AdvancedRequestDataGrid/helpers/advancedRequests.ts +0 -93
  31. package/src/components/data/AdvancedRequestDataGrid/helpers/columns.tsx +0 -262
  32. package/src/components/data/AdvancedRequestDataGrid/helpers/index.ts +0 -2
  33. package/src/components/data/AdvancedRequestDataGrid/index.tsx +0 -267
  34. package/src/components/data/AdvancedRequestDataGrid/types.ts +0 -47
  35. package/src/components/data/DataGrid/DataGridCell.tsx +0 -73
  36. package/src/components/data/DataGrid/DataGridColumnsModal/helpers.ts +0 -14
  37. package/src/components/data/DataGrid/DataGridColumnsModal/hooks.tsx +0 -59
  38. package/src/components/data/DataGrid/DataGridColumnsModal/index.tsx +0 -181
  39. package/src/components/data/DataGrid/DataGridColumnsModal/styles.ts +0 -104
  40. package/src/components/data/DataGrid/DataGridEditableCell.tsx +0 -43
  41. package/src/components/data/DataGrid/DataGridFilterMenu/FilterValuesScroller.tsx +0 -120
  42. package/src/components/data/DataGrid/DataGridFilterMenu/hooks.tsx +0 -75
  43. package/src/components/data/DataGrid/DataGridFilterMenu/index.tsx +0 -360
  44. package/src/components/data/DataGrid/DataGridFilterMenu/styles.ts +0 -96
  45. package/src/components/data/DataGrid/DataGridFooter.tsx +0 -42
  46. package/src/components/data/DataGrid/DataGridHeader.tsx +0 -126
  47. package/src/components/data/DataGrid/DataGridHeaderCell.tsx +0 -132
  48. package/src/components/data/DataGrid/FilterModalContent/index.tsx +0 -136
  49. package/src/components/data/DataGrid/FilterModalContent/styles.ts +0 -22
  50. package/src/components/data/DataGrid/VirtualScroller.tsx +0 -46
  51. package/src/components/data/DataGrid/helpers/columns.tsx +0 -295
  52. package/src/components/data/DataGrid/helpers/filters.ts +0 -287
  53. package/src/components/data/DataGrid/helpers/index.ts +0 -2
  54. package/src/components/data/DataGrid/hooks/index.ts +0 -30
  55. package/src/components/data/DataGrid/hooks/useDataGrid.tsx +0 -306
  56. package/src/components/data/DataGrid/hooks/useDataGridCopy.ts +0 -175
  57. package/src/components/data/DataGrid/hooks/useDataGridSettings.ts +0 -48
  58. package/src/components/data/DataGrid/index.tsx +0 -140
  59. package/src/components/data/DataGrid/styles.ts +0 -323
  60. package/src/components/data/DataGrid/types.ts +0 -267
  61. package/src/components/data/SqlRequestDataGrid/helpers/columns.tsx +0 -277
  62. package/src/components/data/SqlRequestDataGrid/helpers/index.ts +0 -2
  63. package/src/components/data/SqlRequestDataGrid/helpers/sqlRequests.ts +0 -16
  64. package/src/components/data/SqlRequestDataGrid/index.tsx +0 -347
  65. package/src/components/data/SqlRequestDataGrid/types.ts +0 -47
  66. package/src/components/data/index.ts +0 -8
  67. package/src/components/forms/Button.tsx +0 -99
  68. package/src/components/forms/IconButton.tsx +0 -56
  69. package/src/components/forms/IndeterminateCheckbox.tsx +0 -46
  70. package/src/components/forms/Select.tsx +0 -40
  71. package/src/components/forms/index.ts +0 -5
  72. package/src/components/forms/styles.ts +0 -20
  73. package/src/components/index.ts +0 -3
  74. package/src/components/layout/Dropdown/index.tsx +0 -79
  75. package/src/components/layout/Dropdown/styles.ts +0 -44
  76. package/src/components/layout/Loading/index.tsx +0 -29
  77. package/src/components/layout/Loading/styles.ts +0 -29
  78. package/src/components/layout/Modal/index.tsx +0 -51
  79. package/src/components/layout/Modal/styles.ts +0 -110
  80. package/src/components/layout/index.ts +0 -3
  81. package/src/components/ui/ContextMenu/index.tsx +0 -79
  82. package/src/components/ui/ContextMenu/styles.ts +0 -119
  83. package/src/config/index.ts +0 -14
  84. package/src/helpers/dates.ts +0 -9
  85. package/src/helpers/getScrollbarSize.ts +0 -14
  86. package/src/helpers/numbers.ts +0 -26
  87. package/src/hooks/index.ts +0 -2
  88. package/src/hooks/useElementSize.ts +0 -24
  89. package/src/hooks/useWindowSize.ts +0 -20
  90. package/src/index.ts +0 -7
  91. package/src/providers/PortalsProvider/index.tsx +0 -54
  92. package/src/providers/PortalsProvider/styles.ts +0 -27
  93. package/src/providers/SettingsProvider/index.tsx +0 -70
  94. package/src/providers/ThemeProvider/ThemeProvider.ts +0 -55
  95. package/src/providers/ThemeProvider/defaultTheme.ts +0 -444
  96. package/src/providers/ThemeProvider/index.ts +0 -3
  97. package/src/providers/ThemeProvider/types.ts +0 -123
  98. package/src/providers/UiProviders/index.tsx +0 -65
  99. package/src/providers/UiProviders/styles.ts +0 -10
  100. package/src/providers/hooks.ts +0 -8
  101. package/src/providers/index.ts +0 -5
  102. package/src/services/HttpService.ts +0 -80
  103. package/src/services/WebSocketService.ts +0 -147
  104. package/src/services/advancedRequests.ts +0 -101
  105. package/src/services/base.ts +0 -31
  106. package/src/services/globalSearch.ts +0 -27
  107. package/src/services/hooks.ts +0 -23
  108. package/src/services/index.ts +0 -2
  109. package/src/services/sqlRequests.ts +0 -110
  110. package/src/styles/animations.scss +0 -30
  111. package/src/styles/index.scss +0 -42
  112. package/src/typings.d.ts +0 -6
  113. package/tsconfig.json +0 -18
  114. package/tsconfig.tsbuildinfo +0 -1
@@ -1,347 +0,0 @@
1
- import {
2
- ConditionDTO,
3
- OrderByDTO,
4
- SqlRequestFooterFunction,
5
- SqlRequestRow,
6
- useSqlRequestHandler,
7
- } from '../../../services/sqlRequests';
8
- import {
9
- DataGridFilters,
10
- DataGridFooterFunction,
11
- DataGridSort,
12
- } from '../DataGrid/types';
13
- import _, { debounce } from 'lodash';
14
- import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
15
-
16
- import { DataGrid } from '../DataGrid';
17
- import { SqlRequestDataGridProps } from './types';
18
- import { convertSqlFiltersToConditions } from './helpers';
19
- import { isColumnVisible } from '../DataGrid/helpers';
20
-
21
- export const SqlRequestDataGrid = <R,>({
22
- onSelectionChange: onSelectionChangeFromProps,
23
- ...props
24
- }: SqlRequestDataGridProps<R>) => {
25
- const currentRows = useRef<R[]>([]);
26
- const [rows, setRows] = useState<R[]>([]);
27
- const [start, setStart] = useState(0);
28
- const [length, setLength] = useState(50);
29
- const [count, setCount] = useState(-1);
30
- const [sqlRequest, sqlIdRequest, sqlPartialRequest] = useSqlRequestHandler<R>(
31
- props.type
32
- );
33
-
34
- const [conditions, setConditions] = useState<Record<string, ConditionDTO>>(
35
- {}
36
- );
37
- const [orderBy, setOrderBy] = useState<OrderByDTO[]>(
38
- Object.entries(props.initialSorts ?? {}).map(
39
- ([columnKey, direction]): OrderByDTO => ({
40
- field: props.columns[columnKey].field?.fieldAlias ?? columnKey,
41
- type: props.columns[columnKey].type ?? 'text',
42
- direction: direction.toUpperCase() as 'ASC' | 'DESC',
43
- })
44
- )
45
- );
46
-
47
- const [columnsKeys, visibleColumnsKeys] = useMemo(
48
- () => [
49
- [...Object.keys(props.columns), ...(props.hiddenColumns ?? [])],
50
- [
51
- ...Object.keys(props.columns).filter((key) =>
52
- isColumnVisible(props.columns[key])
53
- ),
54
- ...(props.hiddenColumns ?? []),
55
- ],
56
- ],
57
- [props.columns, props.hiddenColumns]
58
- );
59
- const columnTypes = useMemo(
60
- () =>
61
- visibleColumnsKeys.map((key) =>
62
- String(props.columns[key]?.type ?? 'text')
63
- ),
64
- [visibleColumnsKeys, props.columns]
65
- );
66
-
67
- const refresh = useCallback(() => {
68
- setRows([]);
69
- setStart(0);
70
- setLength(50);
71
- setCount(-1);
72
- }, []);
73
-
74
- const onFiltersChanged = useCallback((filters: DataGridFilters) => {
75
- const newConditions = convertSqlFiltersToConditions(filters);
76
- setCount(-1);
77
- setConditions(newConditions);
78
- }, []);
79
-
80
- const onSortsChanged = useCallback(
81
- (sorts: Record<string, DataGridSort>) => {
82
- refresh();
83
- const newOrderBy = Object.entries(sorts).map(
84
- ([columnKey, direction]) =>
85
- ({
86
- field: columnKey,
87
- direction: direction.toUpperCase(),
88
- } as OrderByDTO)
89
- );
90
- setOrderBy(newOrderBy);
91
- },
92
- [refresh]
93
- );
94
-
95
- const loadRows = useRef(
96
- debounce(
97
- (
98
- columns: string[],
99
- returnColumns: string[],
100
- conditions: ConditionDTO[] = [],
101
- orderBy: OrderByDTO[] = [],
102
- start = 0,
103
- length = 100,
104
- getCount = false
105
- ) => {
106
- sqlRequest({
107
- columns: columns.includes('Id') ? columns : [...columns, 'Id'],
108
- returnColumns: returnColumns.includes('Id')
109
- ? returnColumns
110
- : [...returnColumns, 'Id'],
111
- columnTypes: columnTypes.includes('Id')
112
- ? columnTypes
113
- : [...columnTypes, 'Id'],
114
- conditions,
115
- orderBy,
116
- start,
117
- length,
118
- getCount,
119
- }).then((response) => {
120
- if (getCount) {
121
- currentRows.current = Array(response.count).fill(null);
122
- if (getCount) setCount(response.count ?? 0);
123
- }
124
- const parsedRows = props.parser
125
- ? response.data.map(props.parser)
126
- : (response.data as R[]);
127
- currentRows.current.splice(start, length, ...parsedRows);
128
- setRows([...currentRows.current]);
129
- });
130
- },
131
- 100,
132
- {
133
- leading: true,
134
- trailing: true,
135
- }
136
- )
137
- );
138
-
139
- const loadFilterValues = useCallback(
140
- (columnKey: string) => {
141
- return sqlRequest({
142
- columns: columnsKeys,
143
- returnColumns: [columnKey],
144
- columnTypes: [props.columns[columnKey].type ?? 'text'],
145
- conditions: [
146
- ...(props.conditions ?? []),
147
- ...Object.values(_.pickBy(conditions, (_, key) => key !== columnKey)),
148
- ].filter((condition) => condition.field !== columnKey),
149
- orderBy: [
150
- {
151
- field:
152
- props.columns[columnKey].filterField ??
153
- props.columns[columnKey].field?.fieldAlias ??
154
- props.columns[columnKey].field?.fieldName ??
155
- columnKey,
156
- type: props.columns[columnKey].type ?? 'text',
157
- direction: 'ASC',
158
- },
159
- ],
160
- getCount: false,
161
- unique: true,
162
- }).then((response) =>
163
- response.data.map(
164
- (row) => props.columns[columnKey].filter?.getter?.(row) ?? null
165
- )
166
- );
167
- },
168
- [columnsKeys, conditions, props.columns, props.conditions, sqlRequest]
169
- );
170
-
171
- useEffect(
172
- () =>
173
- loadRows.current(
174
- columnsKeys,
175
- visibleColumnsKeys,
176
- [...(props.conditions ?? []), ...(Object.values(conditions) ?? [])],
177
- orderBy,
178
- start,
179
- length,
180
- count < 0
181
- ),
182
- [
183
- props.columns,
184
- conditions,
185
- orderBy,
186
- start,
187
- length,
188
- count,
189
- props.conditions,
190
- columnsKeys,
191
- visibleColumnsKeys,
192
- ]
193
- );
194
-
195
- const loadCopyRows = useCallback(
196
- () =>
197
- sqlRequest({
198
- columns: columnsKeys,
199
- returnColumns: visibleColumnsKeys,
200
- columnTypes,
201
- conditions: [
202
- ...(props.conditions ?? []),
203
- ...(Object.values(conditions) ?? []),
204
- ],
205
- orderBy,
206
- start: 0,
207
- length: count,
208
- }).then((response) =>
209
- props.parser ? response.data.map(props.parser) : (response.data as R[])
210
- ),
211
- [
212
- sqlRequest,
213
- columnsKeys,
214
- visibleColumnsKeys,
215
- columnTypes,
216
- props.conditions,
217
- props.parser,
218
- conditions,
219
- orderBy,
220
- count,
221
- ]
222
- );
223
-
224
- const loadAllIds = useCallback(
225
- () =>
226
- sqlIdRequest({
227
- columns: columnsKeys.includes('Id')
228
- ? columnsKeys
229
- : [...columnsKeys, 'Id'],
230
- returnColumns: ['Id'],
231
- columnTypes: ['text'],
232
- conditions: [
233
- ...(props.conditions ?? []),
234
- ...(Object.values(conditions) ?? []),
235
- ],
236
- orderBy,
237
- start: 0,
238
- length: count,
239
- }).then((response) => response.data.map((row) => row['Id'])),
240
- [columnsKeys, conditions, orderBy, props.conditions, sqlIdRequest, count]
241
- );
242
-
243
- const onVisibleRowsChanged = useCallback(
244
- (newStart: number, newLength: number) => {
245
- if (newStart !== start || newLength !== length) {
246
- setStart(newStart);
247
- setLength(newLength);
248
- }
249
- },
250
- [length, start]
251
- );
252
-
253
- const onSelectionChange = useCallback(
254
- (selectedKeys: string[]) => {
255
- onSelectionChangeFromProps?.(selectedKeys);
256
- },
257
- [onSelectionChangeFromProps]
258
- );
259
-
260
- /** FOOTERS */
261
- const [footers, setFooters] = useState<Record<string, string>>(
262
- props.initialFooters ?? {}
263
- );
264
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
265
- const [footerData, setFooterData] = useState<SqlRequestRow<any>>({});
266
-
267
- const loadFooters = useCallback(() => {
268
- if (Object.keys(footers).length === 0) {
269
- setFooterData({});
270
- } else {
271
- sqlPartialRequest({
272
- columns: columnsKeys.includes('Id')
273
- ? columnsKeys
274
- : [...columnsKeys, 'Id'],
275
- returnColumns: [],
276
- columnTypes: [],
277
- totalColumns: footers as Record<string, SqlRequestFooterFunction>,
278
- conditions: [
279
- ...(props.conditions ?? []),
280
- ...(Object.values(conditions) ?? []),
281
- ],
282
- orderBy,
283
- }).then((response) => setFooterData(response.totals ?? {}));
284
- }
285
- }, [
286
- columnsKeys,
287
- conditions,
288
- footers,
289
- orderBy,
290
- props.conditions,
291
- sqlPartialRequest,
292
- ]);
293
-
294
- useEffect(() => {
295
- loadFooters();
296
- }, [loadFooters]);
297
-
298
- const footerFunctions = useMemo(
299
- () =>
300
- !footerData
301
- ? {}
302
- : Object.entries(footers).reduce((acc, [columnKey, footerKey]) => {
303
- const column = props.columns[columnKey];
304
- const footerFunc =
305
- typeof column?.footer === 'function'
306
- ? column.footer
307
- : column?.footer?.[footerKey];
308
- const render = footerFunc
309
- ? // eslint-disable-next-line @typescript-eslint/no-explicit-any
310
- (data: any) => footerFunc([data], [], [])
311
- : column?.render ?? _.identity;
312
- if (!column) {
313
- return acc;
314
- }
315
- acc[columnKey] = () => render(footerData, column);
316
- return acc;
317
- }, {} as Record<string, DataGridFooterFunction<R>>),
318
- [footerData, footers, props.columns]
319
- );
320
-
321
- const contextOverride = useMemo(
322
- () => ({
323
- footers,
324
- setFooters,
325
- footerFunctions,
326
- }),
327
- [footers, setFooters, footerFunctions]
328
- );
329
-
330
- return (
331
- <DataGrid
332
- onVisibleRowsChange={onVisibleRowsChanged}
333
- filter={false}
334
- sort={false}
335
- onFiltersChanged={onFiltersChanged}
336
- onSortsChanged={onSortsChanged}
337
- filterValuesLoader={loadFilterValues}
338
- rows={rows}
339
- loadCopyRows={loadCopyRows}
340
- refresh={refresh}
341
- onSelectionChange={onSelectionChange}
342
- getAllIds={loadAllIds}
343
- contextOverride={contextOverride}
344
- {...props}
345
- />
346
- );
347
- };
@@ -1,47 +0,0 @@
1
- import {
2
- ConditionDTO,
3
- FieldDTO,
4
- OrderByDTO,
5
- SqlRequestRow,
6
- } from '../../../services/sqlRequests';
7
- import {
8
- DataGridColumn,
9
- DataGridFilter,
10
- DataGridFilterType,
11
- DataGridProps,
12
- } from '../DataGrid/types';
13
-
14
- export type SqlRequestDataGridFilter<
15
- T extends DataGridFilterType = DataGridFilterType
16
- > = DataGridFilter<T> & {
17
- field?: FieldDTO;
18
- };
19
-
20
- export type SqlRequestDataGridFilters = Record<
21
- string,
22
- SqlRequestDataGridFilter
23
- >;
24
-
25
- export type SqlRequestDataGridColumn<R> = DataGridColumn<R> & {
26
- filter?: SqlRequestDataGridFilter;
27
- field?: FieldDTO;
28
- filterField?: string;
29
- sortField?: string;
30
- };
31
-
32
- export type SqlRequestDataGridColumns<R> = Record<
33
- string,
34
- SqlRequestDataGridColumn<R>
35
- >;
36
-
37
- export type SqlRequestDataGridProps<R> = Omit<
38
- DataGridProps<R>,
39
- 'rows' | 'columns'
40
- > & {
41
- columns: SqlRequestDataGridColumns<R>;
42
- hiddenColumns?: string[];
43
- type: string;
44
- orderBy?: OrderByDTO[];
45
- conditions?: ConditionDTO[];
46
- parser?: (row: SqlRequestRow<R>) => R;
47
- };
@@ -1,8 +0,0 @@
1
- export * from './DataGrid';
2
- export * from './DataGrid/helpers';
3
- export * from './DataGrid/styles';
4
- export * from './AdvancedRequestDataGrid';
5
- export * from './SqlRequestDataGrid';
6
- export * from './SqlRequestDataGrid/helpers';
7
- export * from './SqlRequestDataGrid/types';
8
- export * from './AdvancedRequestDataGrid/helpers';
@@ -1,99 +0,0 @@
1
- import { ComponentProps, forwardRef } from 'react';
2
- import styled, { css } from 'styled-components';
3
-
4
- import { IconFC } from '../../Icons';
5
- import { ThemeColor } from '../../providers/ThemeProvider/types';
6
-
7
- export const StyledButton = styled.button.withConfig({
8
- shouldForwardProp: () => true,
9
- })<ButtonProps>`
10
- display: inline-flex;
11
- vertical-align: middle;
12
- align-items: center;
13
- justify-content: center;
14
- box-shadow: var(--shadow-sm);
15
- /* font-weight: bold; */
16
- border-radius: var(--rounded-md);
17
- font-family: var(--font-sans);
18
- cursor: pointer;
19
-
20
- ${({ color }) =>
21
- color
22
- ? css`
23
- background-color: var(--color-${color}-400);
24
- border: 1px solid var(--color-${color}-500);
25
- &:hover {
26
- background-color: var(--color-${color}-300);
27
- border: 1px solid var(--color-${color}-400);
28
- }
29
- color: var(--color-${color}-950);
30
- svg {
31
- fill: var(--color-${color}-950);
32
- }
33
- `
34
- : css`
35
- background-color: var(--color-neutral-100);
36
- border: 1px solid var(--color-neutral-300);
37
- &:hover {
38
- background-color: var(--color-neutral-200);
39
- border: 1px solid var(--color-neutral-400);
40
- }
41
- color: var(--color-neutral-900);
42
- svg {
43
- fill: var(--color-neutral-900);
44
- }
45
- `}
46
-
47
- ${({ rounded }) => rounded && 'border-radius: var(--rounded-full);'}
48
-
49
- &.small {
50
- padding: var(--space-1) var(--space-1_5);
51
- font-size: var(--text-sm);
52
- height: var(--space-6);
53
- box-shadow: var(--shadow-sm);
54
- svg {
55
- margin-right: var(--space-1);
56
- width: var(--space-3);
57
- height: var(--space-3);
58
- }
59
- }
60
- &.medium {
61
- padding: var(--space-2) var(--space-3);
62
- font-size: var(--text-base);
63
- height: var(--space-8);
64
- box-shadow: var(--shadow-sm);
65
- svg {
66
- margin-right: var(--space-1);
67
- width: var(--space-4);
68
- height: var(--space-4);
69
- }
70
- }
71
- &.large {
72
- padding: var(--space-3) var(--space-4);
73
- font-size: var(--text-lg);
74
- height: var(--space-10);
75
- box-shadow: var(--shadow-sm);
76
- svg {
77
- margin-right: var(--space-1);
78
- width: var(--space-5);
79
- height: var(--space-5);
80
- }
81
- }
82
- `;
83
-
84
- export type ButtonProps = {
85
- color?: ThemeColor;
86
- size?: 'small' | 'medium' | 'large';
87
- icon?: IconFC;
88
- rounded?: boolean;
89
- };
90
-
91
- export const Button = forwardRef<
92
- HTMLButtonElement,
93
- ComponentProps<typeof StyledButton> & ButtonProps
94
- >(({ children, size = 'medium', icon: Icon, className, ...props }, ref) => (
95
- <StyledButton ref={ref} className={`${size} ${className}`} {...props}>
96
- {Icon && <Icon />}
97
- {children}
98
- </StyledButton>
99
- ));
@@ -1,56 +0,0 @@
1
- import { Button, ButtonProps } from './Button';
2
- import { ButtonHTMLAttributes, forwardRef } from 'react';
3
-
4
- import { IconFC } from '../../Icons';
5
- import styled from 'styled-components';
6
-
7
- type IconButtonProps = ButtonProps & {
8
- icon: IconFC;
9
- $iconSize?: string;
10
- };
11
-
12
- const styles = {
13
- IconButton: styled(Button).attrs({
14
- className: 'IconButton',
15
- })<Omit<IconButtonProps, 'icon'>>`
16
- &.small {
17
- padding: var(--space-1);
18
- height: var(--space-6);
19
- width: var(--space-6);
20
- svg {
21
- margin-right: 0;
22
- width: ${({ $iconSize = 'var(--space-4)' }) => $iconSize};
23
- height: ${({ $iconSize = 'var(--space-4)' }) => $iconSize};
24
- }
25
- }
26
- &.medium {
27
- padding: var(--space-2);
28
- height: var(--space-8);
29
- width: var(--space-8);
30
- svg {
31
- margin-right: 0;
32
- width: ${({ $iconSize = 'var(--space-5)' }) => $iconSize};
33
- height: ${({ $iconSize = 'var(--space-5)' }) => $iconSize};
34
- }
35
- }
36
- &.large {
37
- padding: var(--space-3);
38
- height: var(--space-10);
39
- width: var(--space-10);
40
- svg {
41
- margin-right: 0;
42
- width: ${({ $iconSize = 'var(--space-6)' }) => $iconSize};
43
- height: ${({ $iconSize = 'var(--space-6)' }) => $iconSize};
44
- }
45
- }
46
- `,
47
- };
48
-
49
- export const IconButton = forwardRef<
50
- HTMLButtonElement,
51
- IconButtonProps & ButtonHTMLAttributes<HTMLButtonElement>
52
- >(({ icon: Icon, ...props }, ref) => (
53
- <styles.IconButton ref={ref} {...props}>
54
- <Icon className="iconbutton-icon" />
55
- </styles.IconButton>
56
- ));
@@ -1,46 +0,0 @@
1
- import {
2
- ChangeEvent,
3
- FC,
4
- InputHTMLAttributes,
5
- useLayoutEffect,
6
- useRef,
7
- } from 'react';
8
-
9
- import { join } from 'lodash';
10
-
11
- type IndeterminateCheckboxProps = InputHTMLAttributes<HTMLInputElement> & {
12
- className?: string;
13
- checked: boolean | undefined;
14
- onChange?: (e: ChangeEvent<HTMLInputElement>) => void;
15
- };
16
-
17
- export const IndeterminateCheckbox: FC<IndeterminateCheckboxProps> = ({
18
- className,
19
- checked,
20
- onChange,
21
- ...props
22
- }) => {
23
- const checkbox = useRef<HTMLInputElement>(null);
24
-
25
- useLayoutEffect(() => {
26
- if (checkbox.current)
27
- checkbox.current.indeterminate = checked === undefined;
28
- }, [checked]);
29
-
30
- return (
31
- <input
32
- type="checkbox"
33
- className={join(
34
- [
35
- 'h-4 w-4 rounded border-gray-300 text-sky-600 focus:ring-sky-600',
36
- className,
37
- ],
38
- ' '
39
- )}
40
- ref={checkbox}
41
- checked={!!checked}
42
- onChange={onChange}
43
- {...props}
44
- />
45
- );
46
- };
@@ -1,40 +0,0 @@
1
- import { SelectHTMLAttributes } from 'react';
2
- import { inputStyle } from './styles';
3
- import styled from 'styled-components';
4
-
5
- type SelectProps<T> = {
6
- items: T[];
7
- itemKey: keyof T | ((item: T) => string);
8
- itemLabel: keyof T | ((item: T) => string);
9
- };
10
-
11
- const StyledSelect = styled.select`
12
- ${inputStyle}
13
- `;
14
-
15
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
- export const Select = <T extends { [k: string]: any }>({
17
- items,
18
- itemKey,
19
- itemLabel,
20
- ...props
21
- }: SelectProps<T> & SelectHTMLAttributes<HTMLSelectElement>) => {
22
- const keyGetter =
23
- typeof itemKey === 'function' ? itemKey : (item: T) => item[itemKey];
24
- const labelGetter =
25
- typeof itemLabel === 'function' ? itemLabel : (item: T) => item[itemLabel];
26
-
27
- return (
28
- <StyledSelect {...props}>
29
- {items.map((item) => {
30
- const key = keyGetter(item);
31
- const label = labelGetter(item);
32
- return (
33
- <option key={key} value={key}>
34
- {label}
35
- </option>
36
- );
37
- })}
38
- </StyledSelect>
39
- );
40
- };
@@ -1,5 +0,0 @@
1
- export * from './Button';
2
- export * from './Select';
3
- export * from './IconButton';
4
- export * from './IndeterminateCheckbox';
5
- export { Input } from './styles';
@@ -1,20 +0,0 @@
1
- import styled, { css } from 'styled-components';
2
-
3
- export const inputStyle = css`
4
- font-family: inherit;
5
- font-size: inherit;
6
- color: inherit;
7
- border: 1px solid var(--color-gray-300);
8
- border-radius: var(--rounded-md);
9
- padding: var(--space-1);
10
- width: 100%;
11
- box-sizing: border-box;
12
-
13
- &:focus {
14
- outline: 2px solid var(--color-primary-500);
15
- }
16
- `;
17
-
18
- export const Input = styled.input`
19
- ${inputStyle}
20
- `;
@@ -1,3 +0,0 @@
1
- export * from './data';
2
- export * from './forms';
3
- export * from './layout';