@axinom/mosaic-ui 0.67.0-rc.0 → 0.67.0-rc.11

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 (41) hide show
  1. package/dist/components/Explorer/Explorer.d.ts.map +1 -1
  2. package/dist/components/Filters/Filter/Filter.d.ts.map +1 -1
  3. package/dist/components/Filters/SelectionTypes/DateTimeFilter/DateTimeFilter.d.ts.map +1 -1
  4. package/dist/components/FormElements/DateTimeField/DateTimeText.d.ts.map +1 -1
  5. package/dist/index.es.js +4 -4
  6. package/dist/index.es.js.map +1 -1
  7. package/dist/index.js +4 -4
  8. package/dist/index.js.map +1 -1
  9. package/package.json +2 -2
  10. package/src/components/Accordion/Accordion.scss +1 -1
  11. package/src/components/Accordion/AccordionItem/AccordionItem.scss +2 -2
  12. package/src/components/Buttons/Button/Button.scss +5 -5
  13. package/src/components/Buttons/CompositeButton/CompositeButton.scss +5 -5
  14. package/src/components/Buttons/TextButton/TextButton.scss +4 -4
  15. package/src/components/ConfirmDialog/ConfirmDialog.scss +1 -1
  16. package/src/components/DateTime/DatePicker/DatePicker.scss +12 -12
  17. package/src/components/DateTime/TimePicker/ScrollColumn/ScrollColumn.scss +7 -7
  18. package/src/components/DateTime/TimePicker/TimePicker.scss +1 -1
  19. package/src/components/DynamicDataList/DynamicListHeader/DynamicListHeader.scss +2 -2
  20. package/src/components/DynamicDataList/DynamicListRow/DynamicListRow.scss +2 -2
  21. package/src/components/Explorer/Explorer.tsx +3 -1
  22. package/src/components/Filters/Filter/Filter.scss +7 -1
  23. package/src/components/Filters/Filter/Filter.tsx +4 -2
  24. package/src/components/Filters/SelectionTypes/DateTimeFilter/DateTimeFilter.scss +12 -5
  25. package/src/components/Filters/SelectionTypes/DateTimeFilter/DateTimeFilter.tsx +28 -26
  26. package/src/components/Filters/SelectionTypes/OptionsFilter/OptionsFilter.scss +0 -1
  27. package/src/components/FormElements/Checkbox/Checkbox.scss +4 -4
  28. package/src/components/FormElements/CustomTags/CustomTags.scss +1 -1
  29. package/src/components/FormElements/DateTimeField/DateTimeText.scss +5 -6
  30. package/src/components/FormElements/DateTimeField/DateTimeText.tsx +58 -43
  31. package/src/components/FormElements/FileUploadControl/FileUploadControl.scss +3 -3
  32. package/src/components/FormElements/Radio/Radio.scss +5 -5
  33. package/src/components/FormElements/ToggleButton/ToggleButton.scss +7 -7
  34. package/src/components/List/List.scss +4 -4
  35. package/src/components/List/ListHeader/ListHeader.scss +2 -2
  36. package/src/components/List/ListRow/ListRow.scss +1 -1
  37. package/src/components/PageHeader/PageHeader.scss +1 -1
  38. package/src/components/Tabs/Tab/CustomTab.scss +4 -4
  39. package/src/components/Tabs/TabList/CustomTabList.scss +2 -2
  40. package/src/styles/branding.scss +32 -28
  41. package/src/styles/variables.scss +275 -150
@@ -1,6 +1,8 @@
1
1
  import clsx from 'clsx';
2
2
  import { DateTime } from 'luxon';
3
3
  import React, { useCallback, useEffect, useRef, useState } from 'react';
4
+ import { createPortal } from 'react-dom';
5
+ import { usePopper } from 'react-popper';
4
6
  import { noop } from '../../../helpers/utils';
5
7
  import { Button, ButtonContext } from '../../Buttons';
6
8
  import { DateTimePicker } from '../../DateTime/DateTimePicker';
@@ -46,6 +48,9 @@ export const DateTimeText: React.FC<DateTimeTextProps> = ({
46
48
  ...rest
47
49
  }) => {
48
50
  const container = useRef<HTMLDivElement>(null);
51
+ const [pickerElement, setPickerElement] = useState<HTMLDivElement | null>(
52
+ null,
53
+ );
49
54
  const errorMsg: string | undefined = error;
50
55
  const [display, setDisplay] = useState<string>(() => {
51
56
  const locale = fromISODate(value, modifyTime);
@@ -54,6 +59,30 @@ export const DateTimeText: React.FC<DateTimeTextProps> = ({
54
59
 
55
60
  const [showPicker, setShowPicker] = useState(false);
56
61
 
62
+ const { styles, attributes } = usePopper(container.current, pickerElement, {
63
+ placement: 'bottom-start',
64
+ modifiers: [
65
+ {
66
+ name: 'flip',
67
+ options: {
68
+ fallbackPlacements: ['top-start', 'bottom-start'],
69
+ },
70
+ },
71
+ {
72
+ name: 'preventOverflow',
73
+ options: {
74
+ padding: 8,
75
+ },
76
+ },
77
+ {
78
+ name: 'offset',
79
+ options: {
80
+ offset: [0, 4],
81
+ },
82
+ },
83
+ ],
84
+ });
85
+
57
86
  useEffect(() => {
58
87
  const locale = fromISODate(value, modifyTime);
59
88
  setDisplay(locale ?? '');
@@ -119,31 +148,36 @@ export const DateTimeText: React.FC<DateTimeTextProps> = ({
119
148
  }}
120
149
  />
121
150
  </div>
122
- {showPicker && (
123
- <>
124
- <div
125
- className={clsx(classes.picker)}
126
- style={calculatePosition(container.current)}
127
- >
128
- <DateTimePicker
129
- value={getValue(value)}
130
- onSelected={(value) => {
131
- if (!modifyTime) {
132
- setShowPicker(false);
133
- }
134
- onChange && onChange(DateTime.fromJSDate(value).toISO(), true);
151
+ {showPicker &&
152
+ createPortal(
153
+ <>
154
+ <div
155
+ ref={setPickerElement}
156
+ className={clsx(classes.picker)}
157
+ style={styles.popper}
158
+ {...attributes.popper}
159
+ >
160
+ <DateTimePicker
161
+ value={getValue(value)}
162
+ onSelected={(value) => {
163
+ if (!modifyTime) {
164
+ setShowPicker(false);
165
+ }
166
+ onChange &&
167
+ onChange(DateTime.fromJSDate(value).toISO(), true);
168
+ }}
169
+ showTimePicker={modifyTime}
170
+ />
171
+ </div>
172
+ <div
173
+ className={clsx(classes.backdrop)}
174
+ onClick={() => {
175
+ setShowPicker(false);
135
176
  }}
136
- showTimePicker={modifyTime}
137
- />
138
- </div>
139
- <div
140
- className={clsx(classes.backdrop)}
141
- onClick={() => {
142
- setShowPicker(false);
143
- }}
144
- ></div>
145
- </>
146
- )}
177
+ ></div>
178
+ </>,
179
+ document.body,
180
+ )}
147
181
  </FormElementContainer>
148
182
  );
149
183
  };
@@ -172,22 +206,3 @@ function fromISODate(ISODateString: string, modifyTime: boolean): string {
172
206
  return ISODateString;
173
207
  }
174
208
  }
175
-
176
- const calculatePosition = (
177
- container: HTMLDivElement | null,
178
- ): React.CSSProperties => {
179
- if (!container) {
180
- return {};
181
- }
182
-
183
- const PICKER_HEIGHT = 280;
184
-
185
- const rect = container.getBoundingClientRect();
186
- const top = rect.bottom;
187
-
188
- if (top + PICKER_HEIGHT > window.innerHeight) {
189
- return { top: rect.top - PICKER_HEIGHT, left: container.offsetLeft };
190
- } else {
191
- return { top, left: container.offsetLeft };
192
- }
193
- };
@@ -19,7 +19,7 @@
19
19
 
20
20
  margin-left: -50px;
21
21
  border: none;
22
- background-color: var(--ax-primary);
22
+ background-color: var(--file-upload-button-bg-color, $file-upload-button-bg-color);
23
23
 
24
24
  transition: box-shadow 0.15s ease-in-out 0s;
25
25
 
@@ -35,12 +35,12 @@
35
35
 
36
36
  &:hover {
37
37
  border: none;
38
- background-color: color-mix(in srgb, var(--ax-primary) 75%, transparent);
38
+ background-color: var(--file-upload-button-hover-bg-color, $file-upload-button-hover-bg-color);
39
39
  }
40
40
 
41
41
  &.disabled {
42
42
  border: none;
43
- background-color: var(--ax-neutral);
43
+ background-color: var(--file-upload-button-disabled-bg-color, $file-upload-button-disabled-bg-color);
44
44
  cursor: default;
45
45
 
46
46
  svg * {
@@ -27,7 +27,7 @@
27
27
  grid: 1fr / 30px 1fr;
28
28
  column-gap: 8px;
29
29
 
30
- color: var(--ax-neutral-dark);
30
+ color: var(--radio-label-color, $radio-label-color);
31
31
  font-size: 16px;
32
32
  font-weight: unset;
33
33
 
@@ -37,12 +37,12 @@
37
37
 
38
38
  &.disabled {
39
39
  .radioOutline {
40
- fill: var(--ax-neutral-lighter);
40
+ fill: var(--radio-disabled-outline-color, $radio-disabled-outline-color);
41
41
  }
42
42
 
43
43
  .checked {
44
44
  .radioDot {
45
- fill: var(--ax-neutral-light);
45
+ fill: var(--radio-disabled-dot-color, $radio-disabled-dot-color);
46
46
  }
47
47
  }
48
48
  }
@@ -60,7 +60,7 @@
60
60
 
61
61
  .radioOutline {
62
62
  fill: none;
63
- stroke: var(--ax-neutral);
63
+ stroke: var(--radio-outline-stroke-color, $radio-outline-stroke-color);
64
64
  stroke-width: 1;
65
65
  }
66
66
 
@@ -87,7 +87,7 @@
87
87
 
88
88
  &.hasConfirm {
89
89
  .radioOutline {
90
- stroke: var(--ax-warning);
90
+ stroke: var(--radio-warning-stroke-color, $radio-warning-stroke-color);
91
91
  stroke-width: 3;
92
92
  }
93
93
  }
@@ -94,13 +94,13 @@
94
94
  }
95
95
  }
96
96
  &.off {
97
- border-top: 1px solid var(--ax-warning);
98
- border-bottom: 1px solid var(--ax-warning);
99
- border-left: 1px solid var(--ax-warning);
97
+ border-top: 1px solid var(--toggle-button-warning-border-color, $toggle-button-warning-border-color);
98
+ border-bottom: 1px solid var(--toggle-button-warning-border-color, $toggle-button-warning-border-color);
99
+ border-left: 1px solid var(--toggle-button-warning-border-color, $toggle-button-warning-border-color);
100
100
  transition: border $confirmation-transition linear;
101
101
  }
102
102
  &.on {
103
- border: 1px solid var(--ax-warning);
103
+ border: 1px solid var(--toggle-button-warning-border-color, $toggle-button-warning-border-color);
104
104
  transition: border $confirmation-transition linear;
105
105
  }
106
106
  }
@@ -108,19 +108,19 @@
108
108
  div.active.off {
109
109
  svg {
110
110
  .svgText {
111
- fill: var(--ax-warning);
111
+ fill: var(--toggle-button-warning-text-color, $toggle-button-warning-text-color);
112
112
  transition: fill $confirmation-transition linear;
113
113
  }
114
114
  }
115
115
  }
116
116
 
117
117
  div.active.on {
118
- background-color: var(--ax-warning) !important;
118
+ background-color: var(--toggle-button-warning-bg-color, $toggle-button-warning-bg-color) !important;
119
119
  transition: background-color $confirmation-transition linear;
120
120
  }
121
121
 
122
122
  &:hover {
123
- box-shadow: 0 0 0 2px var(--ax-warning);
123
+ box-shadow: 0 0 0 2px var(--toggle-button-warning-hover-shadow-color, $toggle-button-warning-hover-shadow-color);
124
124
  transition: box-shadow $confirmation-transition linear;
125
125
  }
126
126
  }
@@ -42,10 +42,10 @@
42
42
  p {
43
43
  margin-left: 10px;
44
44
 
45
- color: var(--ax-neutral-dark);
45
+ color: var(--list-no-data-text-color, $list-no-data-text-color);
46
46
  }
47
47
 
48
- background-color: var(--ax-neutral-light) !important;
48
+ background-color: var(--list-no-data-bg-color, $list-no-data-bg-color) !important;
49
49
  }
50
50
 
51
51
  .error {
@@ -56,9 +56,9 @@
56
56
  p {
57
57
  margin: 10px 0px 10px 10px;
58
58
 
59
- color: var(--ax-error);
59
+ color: var(--list-error-text-color, $list-error-text-color);
60
60
  }
61
61
 
62
- background-color: color-mix(in srgb, var(--ax-error) 15%, transparent) !important;
62
+ background-color: var(--list-error-bg-color, $list-error-bg-color) !important;
63
63
  }
64
64
  }
@@ -12,7 +12,7 @@
12
12
  );
13
13
 
14
14
  box-sizing: border-box;
15
- border-bottom: solid 1px var(--ax-neutral-light);
15
+ border-bottom: solid 1px var(--list-header-border-color, $list-header-border-color);
16
16
 
17
17
  .columnLabel {
18
18
  box-sizing: border-box;
@@ -28,7 +28,7 @@
28
28
  height: 100%;
29
29
 
30
30
  z-index: 1;
31
- border-right: var(--explorer-list-row-border, 1px solid var(--ax-neutral-light));
31
+ border-right: var(--explorer-list-row-border, 1px solid var(--list-header-resize-handle-border-color, $list-header-resize-handle-border-color));
32
32
  position: absolute;
33
33
  right: 0;
34
34
 
@@ -29,7 +29,7 @@
29
29
 
30
30
  &.disabled {
31
31
  cursor: not-allowed;
32
- color: var(--disabled-text-color, var(--ax-neutral));
32
+ color: var(--disabled-text-color, var(--list-row-disabled-text-color, $list-row-disabled-text-color));
33
33
  }
34
34
 
35
35
  .actions {
@@ -38,7 +38,7 @@
38
38
 
39
39
  margin-top: 12px;
40
40
 
41
- color: var(--ax-neutral);
41
+ color: var(--page-header-subtitle-color, $page-header-subtitle-color);
42
42
  font-size: 16px;
43
43
  }
44
44
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  display: grid;
7
7
  height: 50px;
8
- color: var(--ax-primary);
8
+ color: var(--tab-text-color, $tab-text-color);
9
9
  font-size: 14px;
10
10
  font-weight: bold;
11
11
  border-bottom: none;
@@ -17,17 +17,17 @@
17
17
 
18
18
  &.selected {
19
19
  background: white;
20
- color: var(--ax-primary-dark);
20
+ color: var(--tab-selected-text-color, $tab-selected-text-color);
21
21
  }
22
22
 
23
23
  &:hover:not(.selected):not(.disabled) {
24
- background-color: var(--ax-primary);
24
+ background-color: var(--tab-hover-bg-color, $tab-hover-bg-color);
25
25
  transition: background-color $confirmation-transition linear;
26
26
  color: white;
27
27
  }
28
28
 
29
29
  &.disabled {
30
- color: var(--ax-neutral);
30
+ color: var(--tab-disabled-text-color, $tab-disabled-text-color);
31
31
  cursor: default;
32
32
  }
33
33
  }
@@ -4,6 +4,6 @@
4
4
  border: none;
5
5
  margin: 0;
6
6
  padding: 0;
7
- background-color: var(--ax-neutral-lighter);
8
- border-top: 1px solid var(--ax-neutral-lighter);
7
+ background-color: var(--tab-list-bg-color, $tab-list-bg-color);
8
+ border-top: 1px solid var(--tab-list-border-color, $tab-list-border-color);
9
9
  }
@@ -7,20 +7,20 @@
7
7
  * ## CSS Custom Properties Defined
8
8
  *
9
9
  * ### Primary Colors (Blues)
10
- * - `--ax-primary`: Base primary color (#1478af)
11
- * - `--ax-primary-dark`: Darker variant (auto-derived using HSL relative color syntax)
12
- * - `--ax-primary-light`: Lighter variant (auto-derived using HSL relative color syntax)
10
+ * - `--mosaic-primary`: Base primary light color (#28aae1)
11
+ * - `--mosaic-secondary`: Base variant (#1478af - auto-derived using RGB relative color syntax)
12
+ * - `--mosaic-accent`: Darker variant (#00467d - auto-derived using RGB relative color syntax)
13
13
  *
14
14
  * ### Neutral Colors (Grays)
15
- * - `--ax-neutral`: Base neutral color (#b7b7b7)
16
- * - `--ax-neutral-dark`: Darker variant (#707070)
17
- * - `--ax-neutral-light`: Lighter variant (#dddddd)
18
- * - `--ax-neutral-lighter`: Lightest variant (#eeeeee)
15
+ * - `--mosaic-neutral`: Base neutral color (#b7b7b7)
16
+ * - `--mosaic-neutral-1`: Darker variant (#707070)
17
+ * - `--mosaic-neutral-2`: Lighter variant (#dddddd)
18
+ * - `--mosaic-neutral-3`: Lightest variant (#eeeeee)
19
19
  *
20
20
  * ### Semantic Colors
21
- * - `--ax-error`: Error/danger state color (#f06c55 - red)
22
- * - `--ax-warning`: Warning state color (#ffc81a - yellow)
23
- * - `--ax-success`: Success state color (#95c852 - green)
21
+ * - `--mosaic-error`: Error/danger state color (#f06c55 - red)
22
+ * - `--mosaic-warning`: Warning state color (#ffc81a - yellow)
23
+ * - `--mosaic-success`: Success state color (#95c852 - green)
24
24
  *
25
25
  * ## Runtime Theming Usage
26
26
  *
@@ -32,20 +32,20 @@
32
32
  * Override colors in your application's CSS/SCSS:
33
33
  *
34
34
  * :root {
35
- * --ax-primary: #ff5733; // No !important needed
36
- * --ax-neutral: #666666;
35
+ * --mosaic-secondary: #ff5733; // No !important needed
36
+ * --mosaic-neutral: #666666;
37
37
  * }
38
38
  *
39
39
  * ### Example - Purple Theme
40
40
  *
41
41
  * :root {
42
- * --ax-primary: #7c3aed;
42
+ * --mosaic-primary: #9d7aed;
43
43
  * }
44
- * // --ax-primary-dark and --ax-primary-light automatically adjust!
44
+ * // --mosaic-secondary and --mosaic-accent automatically adjust!
45
45
  *
46
46
  * ### Dynamic Runtime Override
47
47
  *
48
- * document.documentElement.style.setProperty('--ax-primary', '#7c3aed');
48
+ * document.documentElement.style.setProperty('--mosaic-primary', '#9d7aed');
49
49
  *
50
50
  * ### Why This Works
51
51
  *
@@ -56,7 +56,7 @@
56
56
  *
57
57
  * ## Browser Support
58
58
  *
59
- * - CSS Relative Color Syntax (`hsl(from var(...))`) requires:
59
+ * - CSS Relative Color Syntax (`rgb(from var(...))`) requires:
60
60
  * - Chrome 119+
61
61
  * - Firefox 128+
62
62
  * - Safari 16.4+
@@ -69,21 +69,25 @@
69
69
  */
70
70
  @layer ax-defaults {
71
71
  :root {
72
- /* Base Primary Color - override this to change the entire primary palette */
73
- --ax-primary: #1478af;
74
- --ax-primary-dark: hsl(from var(--ax-primary) h calc(s + 24) calc(l - 13));
75
- --ax-primary-light: hsl(
76
- from var(--ax-primary) calc(h - 4) calc(s + 3) calc(l + 14)
72
+ /* Base Primary Light Color - override this to change the entire primary palette */
73
+ --mosaic-primary: #28aae1;
74
+ --mosaic-secondary: #1478af;
75
+ --mosaic-secondary: rgb(
76
+ from var(--mosaic-primary) calc(r * 0.5) calc(g * 0.706) calc(b * 0.778)
77
+ );
78
+ --mosaic-accent: #00467d;
79
+ --mosaic-accent: rgb(
80
+ from var(--mosaic-primary) calc(r * 0) calc(g * 0.412) calc(b * 0.556)
77
81
  );
78
82
 
79
- --ax-neutral: #b7b7b7;
80
- --ax-neutral-dark: #707070;
81
- --ax-neutral-light: #dddddd;
82
- --ax-neutral-lighter: #eeeeee;
83
+ --mosaic-neutral: #b7b7b7;
84
+ --mosaic-neutral-1: #707070;
85
+ --mosaic-neutral-2: #dddddd;
86
+ --mosaic-neutral-3: #eeeeee;
83
87
 
84
88
  /* Semantic Colors */
85
- --ax-error: #f06c55;
86
- --ax-warning: #ffc81a;
87
- --ax-success: #95c852;
89
+ --mosaic-error: #f06c55;
90
+ --mosaic-warning: #ffc81a;
91
+ --mosaic-success: #95c852;
88
92
  }
89
93
  }