@axinom/mosaic-ui 0.66.0-rc.2 → 0.66.0-rc.21
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/DynamicDataList/DynamicListHeader/DynamicListHeader.d.ts.map +1 -1
- package/dist/components/Explorer/BulkEdit/FormFieldsConfigConverter.d.ts.map +1 -1
- package/dist/components/FieldSelection/FieldSelection.d.ts.map +1 -1
- package/dist/components/Filters/Filter/Filter.d.ts.map +1 -1
- package/dist/components/Filters/Filters.model.d.ts +5 -0
- package/dist/components/Filters/Filters.model.d.ts.map +1 -1
- package/dist/components/Filters/SelectionTypes/DateTimeFilter/DateTimeFilter.d.ts +2 -0
- package/dist/components/Filters/SelectionTypes/DateTimeFilter/DateTimeFilter.d.ts.map +1 -1
- package/dist/components/Filters/SelectionTypes/FreeTextFilter/FreeTextFilter.d.ts +2 -0
- package/dist/components/Filters/SelectionTypes/FreeTextFilter/FreeTextFilter.d.ts.map +1 -1
- package/dist/components/Filters/SelectionTypes/MultiOptionFilter/MultiOptionFilter.d.ts +2 -0
- package/dist/components/Filters/SelectionTypes/MultiOptionFilter/MultiOptionFilter.d.ts.map +1 -1
- package/dist/components/Filters/SelectionTypes/NumericTextFilter/NumericTextFilter.d.ts +2 -0
- package/dist/components/Filters/SelectionTypes/NumericTextFilter/NumericTextFilter.d.ts.map +1 -1
- package/dist/components/Filters/SelectionTypes/OptionsFilter/OptionsFilter.d.ts +2 -0
- package/dist/components/Filters/SelectionTypes/OptionsFilter/OptionsFilter.d.ts.map +1 -1
- package/dist/components/Filters/SelectionTypes/SearcheableOptionsFilter/SearcheableOptionsFilter.d.ts +2 -0
- package/dist/components/Filters/SelectionTypes/SearcheableOptionsFilter/SearcheableOptionsFilter.d.ts.map +1 -1
- package/dist/components/FormElements/Radio/Radio.d.ts.map +1 -1
- package/dist/components/FormElements/ToggleButton/ToggleButton.d.ts.map +1 -1
- package/dist/components/Hub/Tile/Tile.d.ts.map +1 -1
- package/dist/components/Icons/Icons.d.ts +4 -9
- package/dist/components/Icons/Icons.d.ts.map +1 -1
- package/dist/components/LandingPageTiles/TileLarge/TileLarge.d.ts.map +1 -1
- package/dist/components/LandingPageTiles/TileSmall/TileSmall.d.ts.map +1 -1
- package/dist/components/List/ListCheckBox/ListCheckBox.d.ts.map +1 -1
- package/dist/components/List/ListHeader/ColumnLabel/ColumnLabel.d.ts.map +1 -1
- package/dist/components/List/ListHeader/ListHeader.d.ts.map +1 -1
- package/dist/components/List/ListRow/ListRow.d.ts.map +1 -1
- package/dist/components/List/ListRow/ListRowCell/ListRowCell.d.ts +15 -0
- package/dist/components/List/ListRow/ListRowCell/ListRowCell.d.ts.map +1 -0
- package/dist/components/List/ListRow/ListRowCell/renderData.d.ts +9 -0
- package/dist/components/List/ListRow/ListRowCell/renderData.d.ts.map +1 -0
- package/dist/components/List/ListRow/Renderers/TagsRenderer/TagsRenderer.d.ts.map +1 -1
- package/dist/components/Loaders/ImageLoader/ImageLoader.d.ts.map +1 -1
- package/dist/components/PageHeader/PageHeaderAction/PageHeaderAction.d.ts.map +1 -1
- package/dist/components/VisualElements/ImgElement.d.ts +50 -0
- package/dist/components/VisualElements/ImgElement.d.ts.map +1 -0
- package/dist/components/VisualElements/SvgElement.d.ts +14 -0
- package/dist/components/VisualElements/SvgElement.d.ts.map +1 -0
- package/dist/components/VisualElements/index.d.ts +3 -0
- package/dist/components/VisualElements/index.d.ts.map +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/helpers/idleCallbackHelpers.d.ts +42 -0
- package/dist/helpers/idleCallbackHelpers.d.ts.map +1 -0
- package/dist/helpers/index.d.ts +1 -0
- package/dist/helpers/index.d.ts.map +1 -1
- package/dist/hooks/useResize/ResizeIndicator.d.ts +8 -0
- package/dist/hooks/useResize/ResizeIndicator.d.ts.map +1 -0
- package/dist/hooks/useResize/useResize.d.ts +5 -2
- package/dist/hooks/useResize/useResize.d.ts.map +1 -1
- package/dist/index.es.js +4 -4
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/components/DynamicDataList/DynamicListHeader/DynamicListHeader.spec.tsx +2 -0
- package/src/components/DynamicDataList/DynamicListHeader/DynamicListHeader.tsx +62 -50
- package/src/components/Explorer/BulkEdit/FormFieldsConfigConverter.tsx +5 -21
- package/src/components/Explorer/Explorer.stories.tsx +17 -0
- package/src/components/FieldSelection/FieldSelection.scss +4 -0
- package/src/components/FieldSelection/FieldSelection.tsx +1 -0
- package/src/components/Filters/Filter/Filter.scss +34 -15
- package/src/components/Filters/Filter/Filter.spec.tsx +1 -1
- package/src/components/Filters/Filter/Filter.tsx +46 -34
- package/src/components/Filters/Filters.model.ts +6 -0
- package/src/components/Filters/SelectionTypes/DateTimeFilter/DateTimeFilter.tsx +6 -1
- package/src/components/Filters/SelectionTypes/FreeTextFilter/FreeTextFilter.tsx +4 -0
- package/src/components/Filters/SelectionTypes/MultiOptionFilter/MultiOptionFilter.tsx +9 -1
- package/src/components/Filters/SelectionTypes/NumericTextFilter/NumericTextFilter.tsx +5 -0
- package/src/components/Filters/SelectionTypes/OptionsFilter/OptionsFilter.scss +6 -10
- package/src/components/Filters/SelectionTypes/OptionsFilter/OptionsFilter.tsx +8 -0
- package/src/components/Filters/SelectionTypes/SearcheableOptionsFilter/SearcheableOptionsFilter.tsx +6 -1
- package/src/components/FormElements/Radio/Radio.tsx +3 -2
- package/src/components/FormElements/Select/Select.scss +11 -6
- package/src/components/FormElements/ToggleButton/ToggleButton.tsx +32 -27
- package/src/components/Hub/Hub.stories.tsx +3 -2
- package/src/components/Hub/Tile/Tile.spec.tsx +7 -2
- package/src/components/Hub/Tile/Tile.tsx +2 -1
- package/src/components/Icons/Icons.scss +1 -0
- package/src/components/Icons/Icons.spec.tsx +90 -41
- package/src/components/Icons/Icons.tsx +357 -765
- package/src/components/InfoTooltip/InfoTooltip.scss +1 -1
- package/src/components/InlineMenu/InlineMenu.scss +1 -1
- package/src/components/LandingPageTiles/LandingPageTiles.stories.tsx +3 -2
- package/src/components/LandingPageTiles/TileLarge/TileLarge.spec.tsx +5 -1
- package/src/components/LandingPageTiles/TileLarge/TileLarge.tsx +2 -1
- package/src/components/LandingPageTiles/TileSmall/TileSmall.spec.tsx +7 -2
- package/src/components/LandingPageTiles/TileSmall/TileSmall.tsx +2 -1
- package/src/components/List/ListCheckBox/ListCheckBox.tsx +1 -0
- package/src/components/List/ListHeader/ColumnLabel/ColumnLabel.spec.tsx +6 -6
- package/src/components/List/ListHeader/ColumnLabel/ColumnLabel.tsx +10 -13
- package/src/components/List/ListHeader/ListHeader.scss +0 -1
- package/src/components/List/ListHeader/ListHeader.spec.tsx +2 -0
- package/src/components/List/ListHeader/ListHeader.tsx +57 -51
- package/src/components/List/ListRow/ListRow.scss +0 -27
- package/src/components/List/ListRow/ListRow.spec.tsx +10 -8
- package/src/components/List/ListRow/ListRow.tsx +20 -152
- package/src/components/List/ListRow/ListRowCell/ListRowCell.scss +26 -0
- package/src/components/List/ListRow/ListRowCell/ListRowCell.spec.tsx +491 -0
- package/src/components/List/ListRow/ListRowCell/ListRowCell.tsx +57 -0
- package/src/components/List/ListRow/ListRowCell/renderData.tsx +124 -0
- package/src/components/List/ListRow/Renderers/TagsRenderer/TagsRenderer.scss +2 -1
- package/src/components/List/ListRow/Renderers/TagsRenderer/TagsRenderer.spec.tsx +187 -104
- package/src/components/List/ListRow/Renderers/TagsRenderer/TagsRenderer.tsx +134 -80
- package/src/components/Loaders/ImageLoader/ImageLoader.spec.tsx +13 -14
- package/src/components/Loaders/ImageLoader/ImageLoader.tsx +5 -3
- package/src/components/PageHeader/PageHeaderAction/PageHeaderAction.tsx +13 -2
- package/src/components/Utils/Postgraphile/CreateConnectionRenderer.spec.ts +22 -75
- package/src/components/VisualElements/ImgElement.spec.tsx +92 -0
- package/src/components/VisualElements/ImgElement.tsx +72 -0
- package/src/components/VisualElements/SvgElement.spec.tsx +160 -0
- package/src/components/VisualElements/SvgElement.tsx +40 -0
- package/src/components/VisualElements/index.ts +7 -0
- package/src/components/index.ts +1 -0
- package/src/helpers/idleCallbackHelpers.ts +66 -0
- package/src/helpers/index.ts +5 -0
- package/src/hooks/useResize/ResizeIndicator.scss +7 -0
- package/src/hooks/useResize/ResizeIndicator.tsx +39 -0
- package/src/hooks/useResize/{useResize.ts → useResize.tsx} +38 -6
- package/src/styles/variables.scss +7 -6
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type for the callback handle returned by scheduleIdleCallback.
|
|
3
|
+
* Can be either a number (from requestIdleCallback) or a NodeJS.Timeout (from setTimeout).
|
|
4
|
+
*/
|
|
5
|
+
export type IdleCallbackHandle = number | NodeJS.Timeout;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Safely schedules a callback to be executed when the browser is idle.
|
|
9
|
+
* Falls back to setTimeout if requestIdleCallback is not available.
|
|
10
|
+
*
|
|
11
|
+
* @param callback - The function to execute during idle time
|
|
12
|
+
* @param options - Optional configuration (timeout in ms)
|
|
13
|
+
* @returns A handle that can be passed to cancelScheduledCallback
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const handle = scheduleIdleCallback(() => {
|
|
18
|
+
* console.log('Running during idle time');
|
|
19
|
+
* });
|
|
20
|
+
*
|
|
21
|
+
* // Later, if needed:
|
|
22
|
+
* cancelScheduledCallback(handle);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export function scheduleIdleCallback(
|
|
26
|
+
callback: IdleRequestCallback,
|
|
27
|
+
options?: IdleRequestOptions,
|
|
28
|
+
): IdleCallbackHandle {
|
|
29
|
+
if (typeof requestIdleCallback !== 'undefined') {
|
|
30
|
+
return requestIdleCallback(callback, options);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Fallback to setTimeout for browsers that don't support requestIdleCallback
|
|
34
|
+
// Use a short timeout to approximate idle behavior
|
|
35
|
+
const timeout = options?.timeout ?? 1;
|
|
36
|
+
return setTimeout(() => {
|
|
37
|
+
const deadline: IdleDeadline = {
|
|
38
|
+
didTimeout: false,
|
|
39
|
+
timeRemaining: () => 50, // Approximate 50ms of available time
|
|
40
|
+
};
|
|
41
|
+
callback(deadline);
|
|
42
|
+
}, timeout);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Cancels a callback scheduled with scheduleIdleCallback.
|
|
47
|
+
* Works with both requestIdleCallback and setTimeout fallback.
|
|
48
|
+
*
|
|
49
|
+
* @param handle - The handle returned by scheduleIdleCallback
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* const handle = scheduleIdleCallback(() => {
|
|
54
|
+
* console.log('This might not run');
|
|
55
|
+
* });
|
|
56
|
+
*
|
|
57
|
+
* cancelScheduledCallback(handle);
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export function cancelScheduledCallback(handle: IdleCallbackHandle): void {
|
|
61
|
+
if (typeof cancelIdleCallback !== 'undefined' && typeof handle === 'number') {
|
|
62
|
+
cancelIdleCallback(handle);
|
|
63
|
+
} else {
|
|
64
|
+
clearTimeout(handle as NodeJS.Timeout);
|
|
65
|
+
}
|
|
66
|
+
}
|
package/src/helpers/index.ts
CHANGED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import classes from './ResizeIndicator.scss';
|
|
3
|
+
|
|
4
|
+
interface ResizeIndicatorProps {
|
|
5
|
+
resizePosition: number | undefined;
|
|
6
|
+
isResizing: boolean;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export const ResizeIndicator: React.FC<ResizeIndicatorProps> = ({
|
|
10
|
+
resizePosition,
|
|
11
|
+
isResizing,
|
|
12
|
+
}) => {
|
|
13
|
+
const containerRef = React.useRef<HTMLDivElement>(null);
|
|
14
|
+
const getResizeIndicatorBounds = (): React.CSSProperties => {
|
|
15
|
+
if (containerRef.current) {
|
|
16
|
+
const listWrapper = containerRef.current.parentElement;
|
|
17
|
+
if (listWrapper) {
|
|
18
|
+
const rect = listWrapper.getBoundingClientRect();
|
|
19
|
+
return {
|
|
20
|
+
left: `${resizePosition}px`,
|
|
21
|
+
top: `${rect.top}px`,
|
|
22
|
+
height: `${rect.height}px`,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return { left: `${resizePosition}px` };
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
return (
|
|
30
|
+
<div ref={containerRef}>
|
|
31
|
+
{isResizing && resizePosition !== undefined && (
|
|
32
|
+
<div
|
|
33
|
+
className={classes.resizeIndicator}
|
|
34
|
+
style={getResizeIndicatorBounds()}
|
|
35
|
+
/>
|
|
36
|
+
)}
|
|
37
|
+
</div>
|
|
38
|
+
);
|
|
39
|
+
};
|
|
@@ -2,13 +2,15 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
|
2
2
|
import { DynamicListColumn } from '../../components';
|
|
3
3
|
import { Column } from '../../components/List/List.model';
|
|
4
4
|
import { Data } from '../../types';
|
|
5
|
+
import { ResizeIndicator } from './ResizeIndicator';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Handles the resizing logic of the columns
|
|
8
9
|
* @param columns The list of column definitions
|
|
9
10
|
* @param onColumnSizesChanged Callback that will be called when the column sizes change
|
|
10
|
-
* @returns an object containing the refs to the columns (add these to all column header elements)
|
|
11
|
-
*
|
|
11
|
+
* @returns an object containing the refs to the columns (add these to all column header elements),
|
|
12
|
+
* the mouseDown handler (add this to the element that should be used to resize the column),
|
|
13
|
+
* and the ResizeIndicator element (render this to show the resize indicator)
|
|
12
14
|
*/
|
|
13
15
|
export const useResize = <T extends Data>(
|
|
14
16
|
columns: Column<T>[] | DynamicListColumn<T>[],
|
|
@@ -19,7 +21,10 @@ export const useResize = <T extends Data>(
|
|
|
19
21
|
orgSize: string | undefined;
|
|
20
22
|
}[];
|
|
21
23
|
mouseDown: (index: number) => void;
|
|
24
|
+
ResizeIndicator: JSX.Element;
|
|
22
25
|
} => {
|
|
26
|
+
const currentGridColumns = React.useRef<string | undefined>(undefined);
|
|
27
|
+
|
|
23
28
|
const minCellWidth = 50;
|
|
24
29
|
|
|
25
30
|
const cols = useMemo(
|
|
@@ -35,6 +40,9 @@ export const useResize = <T extends Data>(
|
|
|
35
40
|
);
|
|
36
41
|
|
|
37
42
|
const [activeIndex, setActiveIndex] = useState<number | undefined>(undefined);
|
|
43
|
+
const [resizePosition, setResizePosition] = useState<number | undefined>(
|
|
44
|
+
undefined,
|
|
45
|
+
);
|
|
38
46
|
const resizeStart = React.useRef<
|
|
39
47
|
{ mouse: number; width: number } | undefined
|
|
40
48
|
>(undefined);
|
|
@@ -59,6 +67,10 @@ export const useResize = <T extends Data>(
|
|
|
59
67
|
return;
|
|
60
68
|
}
|
|
61
69
|
|
|
70
|
+
// Calculate position (clientX gives viewport position for fixed positioning)
|
|
71
|
+
|
|
72
|
+
setResizePosition(e.clientX);
|
|
73
|
+
|
|
62
74
|
const gridColumns = cols.map((col, i) => {
|
|
63
75
|
if (!col.ref.current) {
|
|
64
76
|
return col.orgSize;
|
|
@@ -68,15 +80,17 @@ export const useResize = <T extends Data>(
|
|
|
68
80
|
const width = start.width + e.clientX - start.mouse;
|
|
69
81
|
if (width >= minCellWidth) {
|
|
70
82
|
return `${width}px`;
|
|
83
|
+
} else {
|
|
84
|
+
return `${minCellWidth}px`;
|
|
71
85
|
}
|
|
72
86
|
}
|
|
73
87
|
return `${col.ref.current.offsetWidth}px`;
|
|
74
88
|
});
|
|
75
89
|
|
|
76
|
-
|
|
90
|
+
currentGridColumns.current = gridColumns.join(' ');
|
|
77
91
|
}
|
|
78
92
|
},
|
|
79
|
-
[activeIndex, cols
|
|
93
|
+
[activeIndex, cols],
|
|
80
94
|
);
|
|
81
95
|
|
|
82
96
|
const mouseDown = (index: number): void => {
|
|
@@ -89,10 +103,19 @@ export const useResize = <T extends Data>(
|
|
|
89
103
|
}, [mouseMove]);
|
|
90
104
|
|
|
91
105
|
const mouseUp = useCallback(() => {
|
|
106
|
+
// Apply the new column sizes only if a resize actually happened
|
|
107
|
+
if (resizeStart.current !== undefined) {
|
|
108
|
+
onColumnSizesChanged(
|
|
109
|
+
currentGridColumns.current || cols.map((col) => col.orgSize).join(' '),
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
|
|
92
113
|
setActiveIndex(undefined);
|
|
114
|
+
setResizePosition(undefined);
|
|
93
115
|
resizeStart.current = undefined;
|
|
116
|
+
currentGridColumns.current = undefined;
|
|
94
117
|
removeListeners();
|
|
95
|
-
}, [
|
|
118
|
+
}, [removeListeners, onColumnSizesChanged, cols]);
|
|
96
119
|
|
|
97
120
|
useEffect(() => {
|
|
98
121
|
if (activeIndex !== undefined) {
|
|
@@ -105,5 +128,14 @@ export const useResize = <T extends Data>(
|
|
|
105
128
|
};
|
|
106
129
|
}, [activeIndex, mouseMove, mouseUp, removeListeners]);
|
|
107
130
|
|
|
108
|
-
return {
|
|
131
|
+
return {
|
|
132
|
+
cols,
|
|
133
|
+
mouseDown,
|
|
134
|
+
ResizeIndicator: (
|
|
135
|
+
<ResizeIndicator
|
|
136
|
+
resizePosition={resizePosition}
|
|
137
|
+
isResizing={activeIndex !== undefined}
|
|
138
|
+
/>
|
|
139
|
+
),
|
|
140
|
+
};
|
|
109
141
|
};
|
|
@@ -71,8 +71,8 @@ $filter-light-font-color: $dark-gray;
|
|
|
71
71
|
$filter-option-background-color: #d7e9f1;
|
|
72
72
|
$filter-context-button-color: $blue;
|
|
73
73
|
$filter-title-color: $blue;
|
|
74
|
-
$filter-font-size:
|
|
75
|
-
$filter-width:
|
|
74
|
+
$filter-font-size: 14px;
|
|
75
|
+
$filter-width: 330px;
|
|
76
76
|
$filter-controller-background-color: $light-gray-2;
|
|
77
77
|
$filter-border-color: $blue;
|
|
78
78
|
$multi-option-checbox-border: $blue;
|
|
@@ -320,7 +320,8 @@ $icon-button-hover-color: $blue;
|
|
|
320
320
|
/* Autocomplete */
|
|
321
321
|
$popper-border-color: $blue;
|
|
322
322
|
$popper-trigger-button-color: $blue;
|
|
323
|
-
$popper-
|
|
324
|
-
$popper-
|
|
325
|
-
$popper-
|
|
326
|
-
$popper-
|
|
323
|
+
$popper-item-font-size: 14px;
|
|
324
|
+
$popper-text-color: $dark-gray;
|
|
325
|
+
$popper-background-selected-color: $light-gray-2;
|
|
326
|
+
$popper-item-hover-color: rgba($blue, 0.1);
|
|
327
|
+
$popper-item-selected-color: rgba($blue, 0.2);
|