@addev-be/ui 0.20.5 → 0.21.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@addev-be/ui",
3
- "version": "0.20.5",
3
+ "version": "0.21.0",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "watch": "tsc -b --watch",
@@ -20,7 +20,7 @@
20
20
  "update-version": "../../node/update-version.mjs"
21
21
  },
22
22
  "devDependencies": {
23
- "@addev-be/framework-utils": "^0.20.5",
23
+ "@addev-be/framework-utils": "^0.21.0",
24
24
  "@types/lodash": "^4",
25
25
  "@types/react": "^18.3.3",
26
26
  "@types/react-dom": "^18.3.0",
@@ -34,12 +34,12 @@ export const ColumnsList = styled.ul.attrs({
34
34
  flex-direction: column;
35
35
  flex: 1;
36
36
  overflow: auto;
37
- border: 1px solid var(--color-neutral-200);
37
+ border: 1px solid var(--color-base-200);
38
38
  margin: 0;
39
- background-color: var(--color-neutral-50);
39
+ background-color: var(--color-base-50);
40
40
 
41
41
  & > li:not(:last-child) {
42
- border-bottom: 1px solid var(--color-neutral-100);
42
+ border-bottom: 1px solid var(--color-base-100);
43
43
  }
44
44
  `;
45
45
 
@@ -66,17 +66,17 @@ export const ColumnItem = styled.li.attrs({
66
66
  width: var(--space-6);
67
67
  height: var(--space-6);
68
68
  border-radius: var(--rounded-full);
69
- background-color: var(--color-neutral-200);
69
+ background-color: var(--color-base-200);
70
70
  border: none;
71
71
  align-items: center;
72
72
  justify-content: center;
73
73
  }
74
74
 
75
75
  &:hover {
76
- background-color: var(--color-neutral-100);
76
+ background-color: var(--color-base-100);
77
77
  button {
78
78
  display: flex;
79
- background-color: var(--color-neutral-300);
79
+ background-color: var(--color-base-300);
80
80
  }
81
81
  }
82
82
  `;
@@ -8,7 +8,7 @@ export const EditableCellContainer = styled.div<{
8
8
  ${dataGridCellCss}
9
9
  padding: 1px 4px 0px 4px;
10
10
  overflow: visible;
11
- background-color: var(--color-neutral-0);
11
+ background-color: var(--color-base-0);
12
12
 
13
13
  & input,
14
14
  & select {
@@ -21,12 +21,12 @@ export const EditableCellContainer = styled.div<{
21
21
  font-weight: inherit;
22
22
  text-align: ${({ $textAlign = 'left' }) => $textAlign};
23
23
 
24
- border: 1px solid var(--color-neutral-300);
24
+ border: 1px solid var(--color-base-300);
25
25
  padding: var(--space-1) var(--space-2);
26
26
 
27
- color: var(--color-neutral-900);
27
+ color: var(--color-base-900);
28
28
  &::placeholder {
29
- color: var(--color-neutral-400);
29
+ color: var(--color-base-400);
30
30
  }
31
31
 
32
32
  border: none;
@@ -16,7 +16,7 @@ export const InputContainer = styled.div.attrs({
16
16
  left: var(--space-4);
17
17
  display: flex;
18
18
  align-items: center;
19
- fill: var(--color-neutral-400);
19
+ fill: var(--color-base-400);
20
20
  width: var(--space-4);
21
21
  height: var(--space-4);
22
22
  }
@@ -34,10 +34,10 @@ export const CheckboxesContainer = styled.div.attrs({
34
34
  padding: var(--space-2);
35
35
  margin: var(--space-1);
36
36
  margin-bottom: 0;
37
- border: 1px solid var(--color-neutral-300);
37
+ border: 1px solid var(--color-base-300);
38
38
  border-radius: var(--rounded-md);
39
39
  box-shadow: var(--shadow-inner);
40
- background-color: var(--color-neutral-0);
40
+ background-color: var(--color-base-0);
41
41
  height: 20em;
42
42
  overflow-y: hidden;
43
43
  white-space: nowrap;
@@ -46,7 +46,7 @@ export const CheckboxesContainer = styled.div.attrs({
46
46
  export const Separator = styled.div.attrs({
47
47
  className: 'Separator',
48
48
  })`
49
- border-top: 1px solid var(--color-neutral-200);
49
+ border-top: 1px solid var(--color-base-200);
50
50
  margin: var(--space-1) 0;
51
51
  `;
52
52
 
@@ -61,7 +61,7 @@ export const FilterValueContainer = styled.div.attrs({
61
61
  align-items: center;
62
62
  cursor: pointer;
63
63
  &:hover {
64
- background-color: var(--color-neutral-50);
64
+ background-color: var(--color-base-50);
65
65
  }
66
66
  `;
67
67
 
@@ -72,7 +72,7 @@ export const FilterValuesScrollerContainer = styled.div.attrs({
72
72
  }>`
73
73
  display: block;
74
74
  font-size: var(--text-base);
75
- background-color: var(--color-neutral-0);
75
+ background-color: var(--color-base-0);
76
76
  overflow-y: scroll;
77
77
  overflow-x: hidden;
78
78
  height: 100%;
@@ -17,6 +17,7 @@ export const DataGridWrapper = styled.div<SpaceProps>`
17
17
  flex-direction: column;
18
18
  overflow: hidden;
19
19
  width: 100%;
20
+ height: 100%;
20
21
 
21
22
  ${space}
22
23
  `;
@@ -38,10 +39,10 @@ export const DataGridResizeGrip = styled.div<{ $headerColor?: ThemeColor }>`
38
39
  }
39
40
  `
40
41
  : css`
41
- background-color: var(--color-neutral-400);
42
+ background-color: var(--color-base-400);
42
43
  &:hover,
43
44
  &.active {
44
- background-color: var(--color-neutral-500);
45
+ background-color: var(--color-base-500);
45
46
  }
46
47
  `}
47
48
 
@@ -95,10 +96,10 @@ export const DataGridHeaderCellContainer = styled.div<DataGridHeaderCellContaine
95
96
  }
96
97
  `
97
98
  : css`
98
- background-color: var(--color-neutral-200);
99
- color: var(--color-neutral-950);
99
+ background-color: var(--color-base-200);
100
+ color: var(--color-base-950);
100
101
  &:hover {
101
- background-color: var(--color-neutral-300);
102
+ background-color: var(--color-base-300);
102
103
  }
103
104
  `}
104
105
 
@@ -137,9 +138,9 @@ export const dataGridCellCss = css<DataGridCellFCProps>`
137
138
  text-overflow: ellipsis;
138
139
  user-select: ${({ $userSelect }) => ($userSelect ? 'text' : 'none')};
139
140
  white-space: nowrap;
140
- border-right: 1px solid var(--color-neutral-200);
141
- border-bottom: 1px solid var(--color-neutral-200);
142
- background-color: ${({ $color = 'neutral' }) => `var(--color-${$color}-50)`};
141
+ border-right: 1px solid var(--color-base-200);
142
+ border-bottom: 1px solid var(--color-base-200);
143
+ background-color: ${({ $color = 'base' }) => `var(--color-${$color}-50)`};
143
144
  text-align: ${({ $textAlign = 'left' }) => $textAlign};
144
145
  `;
145
146
 
@@ -151,7 +152,7 @@ DataGridCell.displayName = 'DataGridCell';
151
152
  export const DataGridHeaderTitle = styled.div`
152
153
  white-space: normal;
153
154
  font-weight: var(--font-bold);
154
- color: var(--color-neutral-900);
155
+ color: var(--color-base-900);
155
156
  height: auto;
156
157
  `;
157
158
 
@@ -193,7 +194,7 @@ export const DataGridContainer = styled.div<{
193
194
  display: grid;
194
195
  width: 100%;
195
196
  height: 100%;
196
- background-color: var(--color-neutral-50);
197
+ background-color: var(--color-base-50);
197
198
  font-size: var(--text-base);
198
199
  overflow: scroll;
199
200
  grid-template-rows: ${({
@@ -233,7 +234,7 @@ export const DataGridContainer = styled.div<{
233
234
  .map((w) => (typeof w === 'number' ? `${w}px` : w))
234
235
  .join(' + ')})`
235
236
  };
236
- background-color: var(--color-neutral-200);
237
+ background-color: var(--color-base-200);
237
238
  z-index: 1;
238
239
  }`
239
240
  )}
@@ -251,7 +252,7 @@ export const DataGridContainer = styled.div<{
251
252
  .map((w) => (typeof w === 'number' ? `${w}px` : w))
252
253
  .join(' + ')})`
253
254
  };
254
- background-color: var(--color-neutral-50);
255
+ background-color: var(--color-base-50);
255
256
  z-index: 1;
256
257
  }`
257
258
  )}
@@ -285,15 +286,15 @@ const dataGridHeaderOrFooterRowCss = css<DataGridHeaderOrFooterRowProps>`
285
286
  color: var(--color-${$headerColor}-900);
286
287
  `
287
288
  : css`
288
- background-color: var(--color-neutral-200);
289
- color: var(--color-neutral-900);
289
+ background-color: var(--color-base-200);
290
+ color: var(--color-base-900);
290
291
  `}
291
292
 
292
293
  ${DataGridHeaderCellContainer}:first-child {
293
- border-left: 1px solid var(--color-neutral-300);
294
+ border-left: 1px solid var(--color-base-300);
294
295
  }
295
296
  ${DataGridHeaderCellContainer}:last-child {
296
- border-left: 1px solid var(--color-neutral-300);
297
+ border-left: 1px solid var(--color-base-300);
297
298
  }
298
299
  `;
299
300
 
@@ -305,7 +306,7 @@ export const DataGridHeaderRow = styled.div.attrs<DataGridHeaderOrFooterRowProps
305
306
  })
306
307
  )`
307
308
  ${dataGridHeaderOrFooterRowCss}
308
- border-top: 1px solid var(--color-neutral-300);
309
+ border-top: 1px solid var(--color-base-300);
309
310
  top: 0;
310
311
  `;
311
312
  DataGridHeaderRow.displayName = 'DataGridHeaderRow';
@@ -318,7 +319,7 @@ export const DataGridFooterRow = styled.div.attrs<DataGridHeaderOrFooterRowProps
318
319
  })
319
320
  )`
320
321
  ${dataGridHeaderOrFooterRowCss}
321
- border-bottom: 1px solid var(--color-neutral-300);
322
+ border-bottom: 1px solid var(--color-base-300);
322
323
  bottom: 0;
323
324
  `;
324
325
  DataGridFooterRow.displayName = 'DataGridFooterRow';
@@ -331,10 +332,10 @@ export const DataGridRow = styled.div<DataGridRowProps>`
331
332
  display: contents;
332
333
 
333
334
  ${DataGridCell}:first-child {
334
- border-left: 1px solid var(--color-neutral-300);
335
+ border-left: 1px solid var(--color-base-300);
335
336
  }
336
337
  ${DataGridCell}:last-child {
337
- border-left: 1px solid var(--color-neutral-300);
338
+ border-left: 1px solid var(--color-base-300);
338
339
  }
339
340
 
340
341
  &:hover > ${DataGridCell} {
@@ -360,7 +361,7 @@ export const LoadingCell = styled(DataGridCell)`
360
361
  box-sizing: border-box;
361
362
 
362
363
  &.animate-pulse > div {
363
- background-color: var(--color-neutral-200);
364
+ background-color: var(--color-base-200);
364
365
  border-radius: var(--rounded-full);
365
366
  width: 100%;
366
367
  height: 100%;
@@ -381,7 +382,7 @@ const selectionCellStyle = css`
381
382
  height: var(--space-4);
382
383
  width: var(--space-4);
383
384
  border-radius: var(--rounded-sm);
384
- border: 1px solid var(--color-neutral-300);
385
+ border: 1px solid var(--color-base-300);
385
386
  color: var(--color-primary-600);
386
387
  }
387
388
  `;
@@ -7,7 +7,7 @@ export const SqlRequestForeignListInput = styled.div<{ $readOnly?: boolean }>`
7
7
  padding: 0;
8
8
  position: relative;
9
9
  cursor: pointer;
10
- background-color: var(--color-neutral-0);
10
+ background-color: var(--color-base-0);
11
11
 
12
12
  & > svg {
13
13
  position: absolute;
@@ -17,7 +17,7 @@ export const SqlRequestForeignListInput = styled.div<{ $readOnly?: boolean }>`
17
17
  pointer-events: none;
18
18
  width: var(--space-4);
19
19
  height: var(--space-4);
20
- fill: var(--color-neutral-900);
20
+ fill: var(--color-base-900);
21
21
  }
22
22
  `;
23
23
 
@@ -18,8 +18,8 @@ export const FiltersSidebarContainer = styled.div`
18
18
  z-index: 1;
19
19
  overflow-y: auto;
20
20
  box-sizing: border-box;
21
- background-color: var(--color-neutral-50);
22
- border-right: 1px solid var(--color-neutral-300);
21
+ background-color: var(--color-base-50);
22
+ border-right: 1px solid var(--color-base-300);
23
23
  box-shadow: var(--shadow-sm);
24
24
 
25
25
  & > ${MenuContainer} {
@@ -43,7 +43,7 @@ export const FiltersSidebarHeader = styled.div`
43
43
  position: sticky;
44
44
  top: 0;
45
45
  z-index: 1;
46
- background-color: var(--color-neutral-50);
46
+ background-color: var(--color-base-50);
47
47
 
48
48
  display: flex;
49
49
  justify-content: space-between;
@@ -52,7 +52,7 @@ export const FiltersSidebarHeader = styled.div`
52
52
  padding: var(--space-2);
53
53
 
54
54
  padding-bottom: var(--space-2);
55
- border-bottom: 1px solid var(--color-neutral-300);
55
+ border-bottom: 1px solid var(--color-base-300);
56
56
 
57
57
  h3 {
58
58
  margin: 0;
@@ -64,11 +64,11 @@ export const FiltersSidebarFilter = styled.div`
64
64
  display: flex;
65
65
  align-items: center;
66
66
  padding: var(--space-4) var(--space-2);
67
- border-bottom: 1px solid var(--color-neutral-300);
67
+ border-bottom: 1px solid var(--color-base-300);
68
68
  cursor: pointer;
69
69
 
70
70
  &:hover {
71
- background-color: var(--color-neutral-100);
71
+ background-color: var(--color-base-100);
72
72
  }
73
73
  svg {
74
74
  margin-left: auto;
@@ -33,7 +33,7 @@ export const StyledButton = styled.button.withConfig({
33
33
  font-family: var(--font-sans);
34
34
  cursor: pointer;
35
35
 
36
- ${({ $color = 'neutral', $bordered = false }) => {
36
+ ${({ $color = 'base', $bordered = false }) => {
37
37
  const colorWithIntensity = getColorWithIntensity($color);
38
38
  const colorName = getColor(colorWithIntensity);
39
39
  const intensity = getIntensity(colorWithIntensity);
@@ -111,8 +111,8 @@ export const Button = forwardRef<
111
111
  icon: Icon,
112
112
  className,
113
113
  rounded = false,
114
- color = 'neutral',
115
- bordered = false,
114
+ color = 'base',
115
+ bordered = true,
116
116
  ...props
117
117
  },
118
118
  ref
@@ -8,7 +8,7 @@ export const FormGroupContainer = styled.fieldset<{
8
8
  }>`
9
9
  display: flex;
10
10
  flex-direction: column;
11
- background: var(--color-neutral-100);
11
+ background: var(--color-base-100);
12
12
  border-radius: var(--rounded-md);
13
13
  box-shadow: var(--shadow-md);
14
14
 
@@ -24,8 +24,8 @@ export const FormGroupContainer = styled.fieldset<{
24
24
  }
25
25
 
26
26
  margin: 0;
27
- border: 1px solid var(--color-neutral-300);
28
- border-left: 8px solid ${({ color = 'neutral' }) => `var(--color-${color})`};
27
+ border: 1px solid var(--color-base-300);
28
+ border-left: 8px solid ${({ color = 'base' }) => `var(--color-${color})`};
29
29
  `;
30
30
 
31
31
  export const FormGroupHeader = styled.div`
@@ -43,7 +43,7 @@ export const FormGroupHeader = styled.div`
43
43
  margin: 0;
44
44
  font-size: var(--text-sm);
45
45
  font-weight: var(--font-normal);
46
- color: var(--color-neutral-500);
46
+ color: var(--color-base-500);
47
47
  }
48
48
 
49
49
  & > svg {
@@ -57,8 +57,8 @@ export const inputCss = css`
57
57
  font-size: var(--text-lg);
58
58
 
59
59
  border: none;
60
- color: var(--color-neutral-900);
61
- background: var(--color-neutral-0);
60
+ color: var(--color-base-900);
61
+ background: var(--color-base-0);
62
62
 
63
63
  box-sizing: border-box;
64
64
  width: 100%;
@@ -73,7 +73,7 @@ export const inputCss = css`
73
73
  `;
74
74
 
75
75
  export const FormRowLabel = styled.span`
76
- color: var(--color-neutral-500);
76
+ color: var(--color-base-500);
77
77
  font-size: var(--text-base);
78
78
  padding: var(--space-1) 0;
79
79
  display: flex;
@@ -86,7 +86,7 @@ export const FormRowLabel = styled.span`
86
86
  & > svg {
87
87
  width: var(--space-4);
88
88
  height: var(--space-4);
89
- fill: var(--color-neutral-500);
89
+ fill: var(--color-base-500);
90
90
  flex-shrink: 0;
91
91
  }
92
92
  `;
@@ -126,8 +126,8 @@ export const FormRowContainer = styled.label<{
126
126
  padding: var(--space-1) var(--space-2);
127
127
  }
128
128
 
129
- border: 1px solid var(--color-neutral-200);
130
- background: var(--color-neutral-0);
129
+ border: 1px solid var(--color-base-200);
130
+ background: var(--color-base-0);
131
131
  &:focus-within {
132
132
  outline: 2px solid var(--color-primary-500);
133
133
  z-index: 1;
@@ -141,7 +141,7 @@ export const FormRowContainer = styled.label<{
141
141
  }
142
142
 
143
143
  & + & {
144
- border-top: 1px solid var(--color-neutral-300);
144
+ border-top: 1px solid var(--color-base-300);
145
145
  }
146
146
 
147
147
  & > div > select,
@@ -149,7 +149,7 @@ export const FormRowContainer = styled.label<{
149
149
  & > div > input,
150
150
  & > div > textarea {
151
151
  background: none;
152
- color: var(--color-neutral-900);
152
+ color: var(--color-base-900);
153
153
  }
154
154
  }
155
155
  `;
@@ -5,9 +5,9 @@ import { NumericFormat } from 'react-number-format';
5
5
  export const inputStyle = css`
6
6
  font-family: var(--font-sans);
7
7
  font-size: inherit;
8
- color: var(--color-neutral-900);
9
- background-color: var(--color-neutral-50);
10
- border: 1px solid var(--color-neutral-300);
8
+ color: var(--color-base-900);
9
+ background-color: var(--color-base-50);
10
+ border: 1px solid var(--color-base-300);
11
11
  border-radius: var(--rounded-md);
12
12
  padding: var(--space-1);
13
13
  width: 100%;
@@ -25,10 +25,10 @@ export type DropdownContainerProps = {
25
25
  export const DropdownContainer = styled.div.attrs({
26
26
  className: 'DropdownContainer',
27
27
  })<DropdownContainerProps>`
28
- background: var(--color-neutral-0);
28
+ background: var(--color-base-0);
29
29
  border-radius: var(--rounded-md);
30
30
  box-shadow: var(--shadow-lg);
31
- outline: 1px solid var(--color-neutral-200);
31
+ outline: 1px solid var(--color-base-200);
32
32
 
33
33
  position: absolute;
34
34
  z-index: 1001;
@@ -28,7 +28,7 @@ export type ModalContainerProps = {
28
28
  export const ModalContainer = styled.div.attrs({
29
29
  className: 'ModalContainer',
30
30
  })<ModalContainerProps>`
31
- background: var(--color-neutral-100);
31
+ background: var(--color-base-100);
32
32
  border-radius: var(--rounded-lg);
33
33
  box-shadow: var(--shadow-lg);
34
34
  display: flex;
@@ -68,7 +68,7 @@ export const ModalHeader = styled.div.attrs({ className: 'ModalHeader' })`
68
68
  font-weight: bold;
69
69
  font-size: var(--text-lg);
70
70
  padding: var(--space-2);
71
- background-color: var(--color-neutral-200);
71
+ background-color: var(--color-base-200);
72
72
  padding: var(--space-4);
73
73
  `;
74
74
 
@@ -108,7 +108,7 @@ export const ModalFooter = styled.div.attrs({ className: 'ModalFooter' })`
108
108
  flex-direction: row;
109
109
  justify-content: space-between;
110
110
  padding: var(--space-2);
111
- background-color: var(--color-neutral-200);
111
+ background-color: var(--color-base-200);
112
112
  padding: var(--space-4);
113
113
  `;
114
114
 
@@ -25,7 +25,7 @@ export const QuickSearchResultsListContainer = styled.div.attrs({
25
25
  display: flex;
26
26
  flex-direction: column;
27
27
  padding: var(--space-2);
28
- border-right: 1px solid var(--color-neutral-200);
28
+ border-right: 1px solid var(--color-base-200);
29
29
  flex: 1;
30
30
  overflow: auto;
31
31
  `;
@@ -42,7 +42,7 @@ export const QuickSearchResultsTitle = styled.div.attrs({
42
42
  font-size: var(--text-sm);
43
43
  text-transform: uppercase;
44
44
  letter-spacing: 0.1em;
45
- color: var(--color-neutral-500);
45
+ color: var(--color-base-500);
46
46
  `;
47
47
 
48
48
  export const QuickSearchResultsItem = styled.div.attrs({
@@ -52,7 +52,7 @@ export const QuickSearchResultsItem = styled.div.attrs({
52
52
  cursor: pointer;
53
53
  border-radius: 4px;
54
54
  &:hover {
55
- background-color: var(--color-neutral-100);
55
+ background-color: var(--color-base-100);
56
56
  }
57
57
  `;
58
58
 
@@ -69,7 +69,7 @@ export const QuickSearchResultsDetailsDivider = styled.hr`
69
69
  margin: var(--space-2) 0;
70
70
  height: 1px;
71
71
  border: none;
72
- background-color: var(--color-neutral-200);
72
+ background-color: var(--color-base-200);
73
73
  `;
74
74
 
75
75
  export const QuickSearchResultDetailsTitle = styled.div.attrs({
@@ -92,5 +92,5 @@ export const QuickSearchResultsDetailsTerm = styled.dt.attrs({
92
92
  text-transform: uppercase;
93
93
  font-size: var(--text-sm);
94
94
  font-weight: bold;
95
- color: var(--color-neutral-500);
95
+ color: var(--color-base-500);
96
96
  `;
@@ -5,11 +5,11 @@ export const CardContainer = styled.div.attrs({
5
5
  })`
6
6
  display: flex;
7
7
  flex-direction: column;
8
- background-color: var(--color-neutral-0);
8
+ background-color: var(--color-base-0);
9
9
  border-radius: var(--rounded-md);
10
10
  box-shadow: var(--shadow-md);
11
11
  padding: var(--space-4);
12
- border: 1px solid var(--color-neutral-100);
12
+ border: 1px solid var(--color-base-100);
13
13
  `;
14
14
 
15
15
  export const CardHeader = styled.div.attrs({
@@ -19,7 +19,7 @@ export const CardHeader = styled.div.attrs({
19
19
  flex-direction: row;
20
20
  align-items: center;
21
21
  padding-bottom: var(--space-2);
22
- border-bottom: 1px solid var(--color-neutral-200);
22
+ border-bottom: 1px solid var(--color-base-200);
23
23
  margin-bottom: var(--space-2);
24
24
  gap: var(--space-2);
25
25
  `;
@@ -31,7 +31,7 @@ export const CardFooter = styled.div.attrs({
31
31
  flex-direction: row;
32
32
  align-items: center;
33
33
  padding-top: var(--space-2);
34
- border-top: 1px solid var(--color-neutral-200);
34
+ border-top: 1px solid var(--color-base-200);
35
35
  margin-top: var(--space-2);
36
36
  gap: var(--space-2);
37
37
  `;
@@ -4,13 +4,13 @@ import { ThemeColor } from '../../../providers/ThemeProvider/types';
4
4
 
5
5
  const menuContainerCss = css`
6
6
  position: absolute;
7
- color: var(--color-neutral-900);
7
+ color: var(--color-base-900);
8
8
  border-radius: var(--rounded-md);
9
9
  padding: var(--space-1) 0;
10
10
  box-shadow: var(--shadow-lg);
11
- background-color: var(--color-neutral-100);
11
+ background-color: var(--color-base-100);
12
12
  min-width: 20em;
13
- outline: 1px solid var(--color-neutral-200);
13
+ outline: 1px solid var(--color-base-200);
14
14
  display: flex;
15
15
  flex-direction: column;
16
16
  `;
@@ -63,30 +63,30 @@ export const MenuItemContainer = styled.div.attrs({
63
63
  top: 50%;
64
64
  transform: translateY(-50%);
65
65
  border: 4px solid transparent;
66
- border-left-color: var(--color-neutral-600);
66
+ border-left-color: var(--color-base-600);
67
67
  }
68
68
  `}
69
69
 
70
70
  ${({ $color, disabled }) =>
71
71
  disabled
72
72
  ? css`
73
- color: var(--color-neutral-300);
74
- background-color: var(--color-neutral-100);
73
+ color: var(--color-base-300);
74
+ background-color: var(--color-base-100);
75
75
  cursor: default;
76
76
  `
77
77
  : $color
78
78
  ? css`
79
79
  color: var(--color-${$color}-600);
80
- background-color: var(--color-neutral-100);
80
+ background-color: var(--color-base-100);
81
81
  &:hover {
82
82
  background-color: var(--color-${$color}-200);
83
83
  }
84
84
  `
85
85
  : css`
86
- color: var(--color-neutral-900);
87
- background-color: var(--color-neutral-100);
86
+ color: var(--color-base-900);
87
+ background-color: var(--color-base-100);
88
88
  &:hover {
89
- background-color: var(--color-neutral-200);
89
+ background-color: var(--color-base-200);
90
90
  }
91
91
  `}
92
92
 
@@ -114,6 +114,6 @@ MenuItemContainer.displayName = 'MenuItemContainer';
114
114
  export const Divider = styled.div.attrs({
115
115
  className: 'Divider',
116
116
  })`
117
- border-top: 1px solid var(--color-neutral-200);
117
+ border-top: 1px solid var(--color-base-200);
118
118
  margin: var(--space-1) 0;
119
119
  `;
@@ -22,10 +22,10 @@ export const StyledLabel = styled.span.withConfig({
22
22
  }
23
23
  `
24
24
  : css`
25
- background-color: var(--color-neutral-100);
26
- color: var(--color-neutral-700);
25
+ background-color: var(--color-base-100);
26
+ color: var(--color-base-700);
27
27
  svg {
28
- fill: var(--color-neutral-700);
28
+ fill: var(--color-base-700);
29
29
  }
30
30
  `}
31
31
 
@@ -33,7 +33,7 @@ export const StyledLabel = styled.span.withConfig({
33
33
  bordered
34
34
  ? css`
35
35
  border: 1px solid
36
- ${color ? `var(--color-${color}-200)` : 'var(--color-neutral-200)'};
36
+ ${color ? `var(--color-${color}-200)` : 'var(--color-base-200)'};
37
37
  `
38
38
  : 'border: none;'}
39
39
 
@@ -44,7 +44,7 @@ const colorsMap: Record<
44
44
  };
45
45
 
46
46
  export const Message: FC<MessageProps> = ({ children, title, type }) => {
47
- const { iconComponent: Icon, baseColor = 'neutral' } = colorsMap[type];
47
+ const { iconComponent: Icon, baseColor = 'base' } = colorsMap[type];
48
48
  return (
49
49
  <styles.MessageContainer $baseColor={baseColor}>
50
50
  <Icon className="MessageIcon" />
@@ -1,4 +1,4 @@
1
- import { FC, useState } from 'react';
1
+ import { FC, useEffect, useState } from 'react';
2
2
  import { TabContentContainer, TabsViewContainer } from './styles';
3
3
 
4
4
  import { Tab } from './types';
@@ -7,12 +7,21 @@ import { TabsList } from './TabsList';
7
7
  type TabsViewProps = {
8
8
  tabs: Tab[];
9
9
  overflow?: boolean;
10
+ onSelectedTabChanged?: (tab: Tab, index: number) => void;
10
11
  };
11
12
 
12
- export const TabsView: FC<TabsViewProps> = ({ tabs, overflow = false }) => {
13
+ export const TabsView: FC<TabsViewProps> = ({
14
+ tabs,
15
+ overflow = false,
16
+ onSelectedTabChanged,
17
+ }) => {
13
18
  const [activeIndex, setActiveIndex] = useState(0);
14
19
  const activeTab = tabs[activeIndex];
15
20
 
21
+ useEffect(() => {
22
+ onSelectedTabChanged?.(tabs[activeIndex], activeIndex);
23
+ }, [activeIndex, tabs, onSelectedTabChanged]);
24
+
16
25
  return (
17
26
  <TabsViewContainer>
18
27
  <TabsList
@@ -32,15 +32,20 @@ export const TabContainer = styled.div<{
32
32
  gap: var(--space-2);
33
33
  cursor: pointer;
34
34
  padding: 0 var(--space-2);
35
+ color: var(--color-base-800);
36
+
37
+ svg {
38
+ height: var(--space-4);
39
+ width: var(--space-4);
40
+ fill: var(--color-base-800);
41
+ }
35
42
 
36
43
  ${({ $color = 'primary' }) => css`
37
44
  &:hover {
38
45
  color: var(--color-${getColorWithIntensity($color, 500)});
39
- fill: var(--color-${getColorWithIntensity($color, 500)});
40
- }
41
- svg {
42
- height: var(--space-4);
43
- width: var(--space-4);
46
+ svg {
47
+ fill: var(--color-${getColorWithIntensity($color, 500)});
48
+ }
44
49
  }
45
50
  `};
46
51
 
@@ -49,7 +54,9 @@ export const TabContainer = styled.div<{
49
54
  css`
50
55
  border-bottom: var(--space-0_5) solid;
51
56
  color: var(--color-${getColorWithIntensity($color, 500)});
52
- fill: var(--color-${getColorWithIntensity($color, 500)});
57
+ svg {
58
+ fill: var(--color-${getColorWithIntensity($color, 500)});
59
+ }
53
60
  `}
54
61
  `;
55
62
 
@@ -1,19 +1,17 @@
1
- import { cloneDeep, merge } from 'lodash';
2
- import { useCallback, useState } from 'react';
1
+ import { useCallback, useMemo, useState } from 'react';
3
2
 
4
3
  import { DeepPartial } from '../typings';
4
+ import { defaultsDeep } from 'lodash';
5
5
 
6
6
  export const useMutableState = <T>(initialValue: T | (() => T) = {} as T) => {
7
7
  const [value, setValue] = useState<T>(initialValue);
8
8
 
9
- const setPartialValue = useCallback(
10
- (partialValue: DeepPartial<T>) => {
11
- const oldValue = cloneDeep(value);
12
- const newValue = merge(oldValue, partialValue);
13
- setValue(() => newValue);
14
- },
15
- [value]
16
- );
9
+ const setPartialValue = useCallback((partialValue: DeepPartial<T>) => {
10
+ setValue((value) => defaultsDeep({}, partialValue, value));
11
+ }, []);
17
12
 
18
- return [value, setValue, setPartialValue] as const;
13
+ return useMemo(
14
+ () => [value, setValue, setPartialValue] as const,
15
+ [setPartialValue, value]
16
+ );
19
17
  };
@@ -4,6 +4,7 @@ import styled from 'styled-components';
4
4
 
5
5
  type ThemeProviderProps = {
6
6
  $theme?: Theme;
7
+ $darkTheme?: Theme;
7
8
  $darkMode?: boolean;
8
9
  };
9
10
 
@@ -40,16 +41,18 @@ const getThemeColorsCss = (colors: Theme['colors'], darkMode = false) => {
40
41
 
41
42
  export const ThemeProvider = styled.div<ThemeProviderProps>`
42
43
  display: contents;
43
- ${({ $theme = {}, $darkMode }) => {
44
+ ${({ $theme = {}, $darkTheme, $darkMode }) => {
45
+ const theme = $darkMode ? $darkTheme ?? $theme : $theme;
46
+ const darkMode = !$darkTheme && $darkMode;
44
47
  return [
45
- getThemeColorsCss($theme.colors, $darkMode),
46
- getThemeValuesCss('font', $theme.fonts),
47
- getThemeValuesCss('text', $theme.texts),
48
- getThemeValuesCss('weight', $theme.weights),
49
- getThemeValuesCss('space', $theme.spaces),
50
- getThemeValuesCss('size', $theme.sizes),
51
- getThemeValuesCss('rounded', $theme.rounded),
52
- getThemeValuesCss('shadow', $theme.shadows),
48
+ getThemeColorsCss(theme.colors, darkMode),
49
+ getThemeValuesCss('font', theme.fonts),
50
+ getThemeValuesCss('text', theme.texts),
51
+ getThemeValuesCss('weight', theme.weights),
52
+ getThemeValuesCss('space', theme.spaces),
53
+ getThemeValuesCss('size', theme.sizes),
54
+ getThemeValuesCss('rounded', theme.rounded),
55
+ getThemeValuesCss('shadow', theme.shadows),
53
56
  ].join('');
54
57
  }}
55
58
 
@@ -348,6 +348,7 @@ export const defaultTheme: Theme = {
348
348
  1000: '#000000',
349
349
  },
350
350
 
351
+ base: 'slate',
351
352
  primary: 'sky',
352
353
  secondary: 'gray',
353
354
  success: 'emerald',
@@ -1,9 +1,22 @@
1
1
  import {
2
+ Theme,
2
3
  ThemeColor,
3
4
  ThemeColorIntensity,
4
5
  ThemeColorWithIntensity,
5
6
  } from './types';
6
7
 
8
+ import { DeepPartial } from '../../typings';
9
+ import { defaultTheme } from './defaultTheme';
10
+ import { defaultsDeep } from 'lodash';
11
+
12
+ export const extendTheme = (
13
+ base: Theme,
14
+ override?: DeepPartial<Theme>
15
+ ): Theme => defaultsDeep({}, override, base);
16
+
17
+ export const extendDefaultTheme = (override?: DeepPartial<Theme>): Theme =>
18
+ extendTheme(defaultTheme, override);
19
+
7
20
  export const getColor = (
8
21
  colorWithIntensity: ThemeColorWithIntensity
9
22
  ): ThemeColor => {
@@ -39,9 +39,9 @@ export type ThemeRawColor =
39
39
  | 'pink'
40
40
  | 'rose';
41
41
  export type ThemePredefinedColor =
42
+ | 'base'
42
43
  | 'primary'
43
44
  | 'secondary'
44
- | 'neutral'
45
45
  | 'success'
46
46
  | 'warning'
47
47
  | 'danger'
@@ -14,12 +14,15 @@ import {
14
14
 
15
15
  import { PortalsProvider } from '../PortalsProvider';
16
16
  import { SettingsProvider } from '../SettingsProvider';
17
+ import { Theme } from '../ThemeProvider/types';
17
18
  import { ThemeProvider } from '../ThemeProvider/ThemeProvider';
18
19
  import { TrackingProvider } from '../TrackingProvider';
19
20
  import { defaultTheme } from '../ThemeProvider/defaultTheme';
20
21
 
21
22
  export type UiProvidersProps = PropsWithChildren<{
22
- $darkMode?: boolean;
23
+ theme?: Theme;
24
+ darkTheme?: Theme;
25
+ darkMode?: boolean;
23
26
  }>;
24
27
 
25
28
  export type UiContextType = {
@@ -32,7 +35,12 @@ export const UiContext = createContext<UiContextType>({
32
35
  getElementScreenRect: () => new DOMRect(),
33
36
  });
34
37
 
35
- export const UiProviders: FC<UiProvidersProps> = ({ $darkMode, children }) => {
38
+ export const UiProviders: FC<UiProvidersProps> = ({
39
+ theme = defaultTheme,
40
+ darkTheme,
41
+ darkMode,
42
+ children,
43
+ }) => {
36
44
  const rootRef = useRef<HTMLDivElement | null>(null);
37
45
 
38
46
  const getElementScreenRect = useCallback((element: HTMLElement) => {
@@ -53,7 +61,7 @@ export const UiProviders: FC<UiProvidersProps> = ({ $darkMode, children }) => {
53
61
  );
54
62
 
55
63
  return (
56
- <ThemeProvider $theme={defaultTheme} $darkMode={$darkMode}>
64
+ <ThemeProvider $theme={theme} $darkTheme={darkTheme} $darkMode={darkMode}>
57
65
  <UiContext.Provider value={value}>
58
66
  <styles.Root ref={rootRef}>
59
67
  <SettingsProvider>
@@ -4,7 +4,7 @@ export const Root = styled.div.attrs({ className: 'Root' })`
4
4
  position: relative;
5
5
  font-family: var(--font-sans);
6
6
  font-size: var(--text-base);
7
- color: var(--color-neutral-900);
7
+ color: var(--color-base-900);
8
8
  width: 100%;
9
9
  height: 100%;
10
10
  `;