@axinom/mosaic-ui 0.66.0-rc.2 → 0.66.0-rc.20

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 (122) hide show
  1. package/dist/components/DynamicDataList/DynamicListHeader/DynamicListHeader.d.ts.map +1 -1
  2. package/dist/components/Explorer/BulkEdit/FormFieldsConfigConverter.d.ts.map +1 -1
  3. package/dist/components/FieldSelection/FieldSelection.d.ts.map +1 -1
  4. package/dist/components/Filters/Filter/Filter.d.ts.map +1 -1
  5. package/dist/components/Filters/Filters.model.d.ts +5 -0
  6. package/dist/components/Filters/Filters.model.d.ts.map +1 -1
  7. package/dist/components/Filters/SelectionTypes/DateTimeFilter/DateTimeFilter.d.ts +2 -0
  8. package/dist/components/Filters/SelectionTypes/DateTimeFilter/DateTimeFilter.d.ts.map +1 -1
  9. package/dist/components/Filters/SelectionTypes/FreeTextFilter/FreeTextFilter.d.ts +2 -0
  10. package/dist/components/Filters/SelectionTypes/FreeTextFilter/FreeTextFilter.d.ts.map +1 -1
  11. package/dist/components/Filters/SelectionTypes/MultiOptionFilter/MultiOptionFilter.d.ts +2 -0
  12. package/dist/components/Filters/SelectionTypes/MultiOptionFilter/MultiOptionFilter.d.ts.map +1 -1
  13. package/dist/components/Filters/SelectionTypes/NumericTextFilter/NumericTextFilter.d.ts +2 -0
  14. package/dist/components/Filters/SelectionTypes/NumericTextFilter/NumericTextFilter.d.ts.map +1 -1
  15. package/dist/components/Filters/SelectionTypes/OptionsFilter/OptionsFilter.d.ts +2 -0
  16. package/dist/components/Filters/SelectionTypes/OptionsFilter/OptionsFilter.d.ts.map +1 -1
  17. package/dist/components/Filters/SelectionTypes/SearcheableOptionsFilter/SearcheableOptionsFilter.d.ts +2 -0
  18. package/dist/components/Filters/SelectionTypes/SearcheableOptionsFilter/SearcheableOptionsFilter.d.ts.map +1 -1
  19. package/dist/components/FormElements/Radio/Radio.d.ts.map +1 -1
  20. package/dist/components/FormElements/ToggleButton/ToggleButton.d.ts.map +1 -1
  21. package/dist/components/Hub/Tile/Tile.d.ts.map +1 -1
  22. package/dist/components/Icons/Icons.d.ts +4 -9
  23. package/dist/components/Icons/Icons.d.ts.map +1 -1
  24. package/dist/components/LandingPageTiles/TileLarge/TileLarge.d.ts.map +1 -1
  25. package/dist/components/LandingPageTiles/TileSmall/TileSmall.d.ts.map +1 -1
  26. package/dist/components/List/ListCheckBox/ListCheckBox.d.ts.map +1 -1
  27. package/dist/components/List/ListHeader/ColumnLabel/ColumnLabel.d.ts.map +1 -1
  28. package/dist/components/List/ListHeader/ListHeader.d.ts.map +1 -1
  29. package/dist/components/List/ListRow/ListRow.d.ts.map +1 -1
  30. package/dist/components/List/ListRow/ListRowCell/ListRowCell.d.ts +15 -0
  31. package/dist/components/List/ListRow/ListRowCell/ListRowCell.d.ts.map +1 -0
  32. package/dist/components/List/ListRow/ListRowCell/renderData.d.ts +9 -0
  33. package/dist/components/List/ListRow/ListRowCell/renderData.d.ts.map +1 -0
  34. package/dist/components/List/ListRow/Renderers/TagsRenderer/TagsRenderer.d.ts.map +1 -1
  35. package/dist/components/Loaders/ImageLoader/ImageLoader.d.ts.map +1 -1
  36. package/dist/components/PageHeader/PageHeaderAction/PageHeaderAction.d.ts.map +1 -1
  37. package/dist/components/VisualElements/ImgElement.d.ts +50 -0
  38. package/dist/components/VisualElements/ImgElement.d.ts.map +1 -0
  39. package/dist/components/VisualElements/SvgElement.d.ts +14 -0
  40. package/dist/components/VisualElements/SvgElement.d.ts.map +1 -0
  41. package/dist/components/VisualElements/index.d.ts +3 -0
  42. package/dist/components/VisualElements/index.d.ts.map +1 -0
  43. package/dist/components/index.d.ts +1 -0
  44. package/dist/components/index.d.ts.map +1 -1
  45. package/dist/helpers/idleCallbackHelpers.d.ts +42 -0
  46. package/dist/helpers/idleCallbackHelpers.d.ts.map +1 -0
  47. package/dist/helpers/index.d.ts +1 -0
  48. package/dist/helpers/index.d.ts.map +1 -1
  49. package/dist/hooks/useResize/ResizeIndicator.d.ts +8 -0
  50. package/dist/hooks/useResize/ResizeIndicator.d.ts.map +1 -0
  51. package/dist/hooks/useResize/useResize.d.ts +5 -2
  52. package/dist/hooks/useResize/useResize.d.ts.map +1 -1
  53. package/dist/index.es.js +4 -4
  54. package/dist/index.es.js.map +1 -1
  55. package/dist/index.js +4 -4
  56. package/dist/index.js.map +1 -1
  57. package/package.json +2 -2
  58. package/src/components/DynamicDataList/DynamicListHeader/DynamicListHeader.spec.tsx +2 -0
  59. package/src/components/DynamicDataList/DynamicListHeader/DynamicListHeader.tsx +62 -50
  60. package/src/components/Explorer/BulkEdit/FormFieldsConfigConverter.tsx +5 -21
  61. package/src/components/Explorer/Explorer.stories.tsx +17 -0
  62. package/src/components/FieldSelection/FieldSelection.scss +4 -0
  63. package/src/components/FieldSelection/FieldSelection.tsx +1 -0
  64. package/src/components/Filters/Filter/Filter.scss +34 -15
  65. package/src/components/Filters/Filter/Filter.spec.tsx +1 -1
  66. package/src/components/Filters/Filter/Filter.tsx +46 -34
  67. package/src/components/Filters/Filters.model.ts +6 -0
  68. package/src/components/Filters/SelectionTypes/DateTimeFilter/DateTimeFilter.tsx +6 -1
  69. package/src/components/Filters/SelectionTypes/FreeTextFilter/FreeTextFilter.tsx +4 -0
  70. package/src/components/Filters/SelectionTypes/MultiOptionFilter/MultiOptionFilter.tsx +9 -1
  71. package/src/components/Filters/SelectionTypes/NumericTextFilter/NumericTextFilter.tsx +5 -0
  72. package/src/components/Filters/SelectionTypes/OptionsFilter/OptionsFilter.scss +6 -10
  73. package/src/components/Filters/SelectionTypes/OptionsFilter/OptionsFilter.tsx +8 -0
  74. package/src/components/Filters/SelectionTypes/SearcheableOptionsFilter/SearcheableOptionsFilter.tsx +6 -1
  75. package/src/components/FormElements/Radio/Radio.tsx +3 -2
  76. package/src/components/FormElements/Select/Select.scss +11 -6
  77. package/src/components/FormElements/ToggleButton/ToggleButton.tsx +32 -27
  78. package/src/components/Hub/Hub.stories.tsx +3 -2
  79. package/src/components/Hub/Tile/Tile.spec.tsx +7 -2
  80. package/src/components/Hub/Tile/Tile.tsx +2 -1
  81. package/src/components/Icons/Icons.scss +1 -0
  82. package/src/components/Icons/Icons.spec.tsx +90 -41
  83. package/src/components/Icons/Icons.tsx +357 -765
  84. package/src/components/InfoTooltip/InfoTooltip.scss +1 -1
  85. package/src/components/InlineMenu/InlineMenu.scss +1 -1
  86. package/src/components/LandingPageTiles/LandingPageTiles.stories.tsx +3 -2
  87. package/src/components/LandingPageTiles/TileLarge/TileLarge.spec.tsx +5 -1
  88. package/src/components/LandingPageTiles/TileLarge/TileLarge.tsx +2 -1
  89. package/src/components/LandingPageTiles/TileSmall/TileSmall.spec.tsx +7 -2
  90. package/src/components/LandingPageTiles/TileSmall/TileSmall.tsx +2 -1
  91. package/src/components/List/ListCheckBox/ListCheckBox.tsx +1 -0
  92. package/src/components/List/ListHeader/ColumnLabel/ColumnLabel.spec.tsx +6 -6
  93. package/src/components/List/ListHeader/ColumnLabel/ColumnLabel.tsx +10 -13
  94. package/src/components/List/ListHeader/ListHeader.scss +0 -1
  95. package/src/components/List/ListHeader/ListHeader.spec.tsx +2 -0
  96. package/src/components/List/ListHeader/ListHeader.tsx +57 -51
  97. package/src/components/List/ListRow/ListRow.scss +0 -27
  98. package/src/components/List/ListRow/ListRow.spec.tsx +10 -8
  99. package/src/components/List/ListRow/ListRow.tsx +20 -152
  100. package/src/components/List/ListRow/ListRowCell/ListRowCell.scss +26 -0
  101. package/src/components/List/ListRow/ListRowCell/ListRowCell.spec.tsx +491 -0
  102. package/src/components/List/ListRow/ListRowCell/ListRowCell.tsx +57 -0
  103. package/src/components/List/ListRow/ListRowCell/renderData.tsx +124 -0
  104. package/src/components/List/ListRow/Renderers/TagsRenderer/TagsRenderer.scss +2 -1
  105. package/src/components/List/ListRow/Renderers/TagsRenderer/TagsRenderer.spec.tsx +187 -104
  106. package/src/components/List/ListRow/Renderers/TagsRenderer/TagsRenderer.tsx +134 -80
  107. package/src/components/Loaders/ImageLoader/ImageLoader.spec.tsx +13 -14
  108. package/src/components/Loaders/ImageLoader/ImageLoader.tsx +5 -3
  109. package/src/components/PageHeader/PageHeaderAction/PageHeaderAction.tsx +13 -2
  110. package/src/components/Utils/Postgraphile/CreateConnectionRenderer.spec.ts +22 -75
  111. package/src/components/VisualElements/ImgElement.spec.tsx +92 -0
  112. package/src/components/VisualElements/ImgElement.tsx +72 -0
  113. package/src/components/VisualElements/SvgElement.spec.tsx +160 -0
  114. package/src/components/VisualElements/SvgElement.tsx +40 -0
  115. package/src/components/VisualElements/index.ts +7 -0
  116. package/src/components/index.ts +1 -0
  117. package/src/helpers/idleCallbackHelpers.ts +66 -0
  118. package/src/helpers/index.ts +5 -0
  119. package/src/hooks/useResize/ResizeIndicator.scss +7 -0
  120. package/src/hooks/useResize/ResizeIndicator.tsx +39 -0
  121. package/src/hooks/useResize/{useResize.ts → useResize.tsx} +38 -6
  122. 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
+ }
@@ -1 +1,6 @@
1
+ export {
2
+ cancelScheduledCallback,
3
+ scheduleIdleCallback,
4
+ type IdleCallbackHandle,
5
+ } from './idleCallbackHelpers';
1
6
  export { Nullable } from './utils';
@@ -0,0 +1,7 @@
1
+ .resizeIndicator {
2
+ position: fixed;
3
+ width: 1px;
4
+ background-color: var(--explorer-list-row-border, #dddddd);
5
+ pointer-events: none;
6
+ z-index: 10;
7
+ }
@@ -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
- * and the mouseDown handler (add this to the element that should be used to resize the column)
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
- onColumnSizesChanged(gridColumns.join(' '));
90
+ currentGridColumns.current = gridColumns.join(' ');
77
91
  }
78
92
  },
79
- [activeIndex, cols, onColumnSizesChanged],
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
- }, [setActiveIndex, removeListeners]);
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 { cols, mouseDown };
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: 16px;
75
- $filter-width: 360px;
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-background-color: $light-gray-2;
324
- $popper-item-font-size: 16px;
325
- $popper-text-color: $blue;
326
- $popper-background-selected-color: rgba($blue, 0.15);
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);