@ecodev/natural 65.0.2 → 66.0.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.
Files changed (42) hide show
  1. package/fesm2022/ecodev-natural.mjs +142 -45
  2. package/fesm2022/ecodev-natural.mjs.map +1 -1
  3. package/index.d.ts +43 -2
  4. package/{theming/_natural.theme.scss → natural.scss} +1 -1
  5. package/package.json +2 -2
  6. package/src/lib/_natural.scss +204 -0
  7. package/src/lib/modules/alert/_alert.scss +10 -0
  8. package/src/lib/modules/alert/confirm.component.scss +3 -0
  9. package/src/lib/modules/columns-picker/columns-picker.component.scss +3 -0
  10. package/src/lib/modules/detail-header/detail-header.component.scss +43 -0
  11. package/src/lib/modules/dropdown-components/type-date/type-date.component.scss +13 -0
  12. package/src/lib/modules/dropdown-components/type-number/type-number.component.scss +7 -0
  13. package/src/lib/modules/dropdown-components/type-text/type-text.component.scss +7 -0
  14. package/src/lib/modules/file/component/file.component.scss +73 -0
  15. package/src/lib/modules/fixed-button/fixed-button.component.scss +8 -0
  16. package/src/lib/modules/fixed-button-detail/fixed-button-detail.component.scss +0 -0
  17. package/src/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.scss +63 -0
  18. package/src/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.scss +0 -0
  19. package/src/lib/modules/panels/{_panels.external.scss → panels.scss} +11 -0
  20. package/src/lib/modules/relations/relations.component.scss +22 -0
  21. package/src/lib/modules/search/dropdown-container/dropdown-container.component.scss +55 -0
  22. package/src/lib/modules/search/facet-selector/facet-selector.component.scss +10 -0
  23. package/src/lib/modules/search/group/group.component.scss +17 -0
  24. package/src/lib/modules/search/input/input.component.scss +17 -0
  25. package/src/lib/modules/search/search/search.component.scss +56 -0
  26. package/src/lib/modules/select/select/select.component.scss +35 -0
  27. package/src/lib/modules/select/select-enum/select-enum.component.scss +5 -0
  28. package/src/lib/modules/select/select-hierarchic/select-hierarchic.component.scss +23 -0
  29. package/src/lib/modules/sidenav/sidenav-container/sidenav-container.component.scss +25 -0
  30. package/src/lib/modules/sidenav/sidenav-content/sidenav-content.component.scss +6 -0
  31. package/src/lib/modules/sidenav/sidenav.scss +32 -0
  32. package/src/lib/modules/table-button/table-button.component.scss +35 -0
  33. package/src/lib/modules/theme-changer/theme-changer.component.scss +10 -0
  34. package/src/lib/styles/table.scss +107 -0
  35. package/src/lib/_natural.theme.scss +0 -72
  36. package/src/lib/modules/alert/_alert.theme.scss +0 -14
  37. package/src/lib/modules/file/component/_file.theme.scss +0 -23
  38. package/src/lib/modules/search/dropdown-container/_dropdown-container.theme.scss +0 -14
  39. package/src/lib/modules/search/input/_input.theme.scss +0 -23
  40. package/src/lib/modules/search/search.theme.scss +0 -7
  41. package/src/lib/modules/sidenav/_sidenav.theme.scss +0 -40
  42. package/src/lib/styles/_table.scss +0 -94
@@ -0,0 +1,17 @@
1
+ :host {
2
+ display: flex;
3
+ position: relative; // for matRipple
4
+ flex-direction: column;
5
+ border-top-right-radius: 4px;
6
+ border-top-left-radius: 4px;
7
+ overflow: hidden;
8
+
9
+ .hide {
10
+ margin: 0 50px 0 10px;
11
+ height: 0;
12
+ color: transparent;
13
+ font-size: inherit;
14
+ font-family: Roboto, 'Helvetica Neue', sans-serif;
15
+ white-space: nowrap;
16
+ }
17
+ }
@@ -0,0 +1,56 @@
1
+ .natural-search {
2
+ display: flex;
3
+ flex-direction: row;
4
+ align-items: flex-end;
5
+
6
+ .groupsWrapper {
7
+ display: flex;
8
+ flex: 1;
9
+ flex-direction: column;
10
+ min-width: 0;
11
+ }
12
+
13
+ .groupWrapper {
14
+ display: flex;
15
+ flex-direction: row;
16
+ margin-bottom: 10px;
17
+ min-width: 0;
18
+
19
+ natural-group {
20
+ flex: 1;
21
+ max-width: 100%;
22
+ }
23
+
24
+ &:last-of-type {
25
+ margin-bottom: 0;
26
+ }
27
+ }
28
+
29
+ .endOfRowButton {
30
+ display: flex;
31
+ flex-direction: row;
32
+ align-items: center;
33
+ margin-bottom: 15px;
34
+ height: 53px;
35
+ }
36
+
37
+ mat-divider {
38
+ margin: -10px 0 10px 0;
39
+ }
40
+ }
41
+
42
+ .natural-search.mobile {
43
+ .clear-button {
44
+ display: none;
45
+ }
46
+
47
+ &.hasMultipleGroups {
48
+ flex-direction: column;
49
+ align-items: stretch;
50
+
51
+ .endOfRowButton {
52
+ flex-direction: row-reverse;
53
+ margin-bottom: 0;
54
+ }
55
+ }
56
+ }
@@ -0,0 +1,35 @@
1
+ :host {
2
+ display: flex;
3
+ flex-direction: column;
4
+
5
+ // Gap between vertical elements
6
+ & > *:not(:last-child) {
7
+ margin-bottom: 20px;
8
+ }
9
+
10
+ & > mat-autocomplete {
11
+ margin-bottom: 0 !important;
12
+ }
13
+
14
+ .external-buttons {
15
+ display: flex;
16
+ flex-direction: row;
17
+ }
18
+
19
+ .external-buttons {
20
+ display: flex;
21
+ flex-direction: row;
22
+
23
+ & > *:not(:last-child) {
24
+ margin-right: 10px;
25
+ }
26
+ }
27
+
28
+ .loading-wrapper {
29
+ display: flex;
30
+ justify-content: center;
31
+ align-items: center;
32
+ width: 48px;
33
+ height: 48px;
34
+ }
35
+ }
@@ -0,0 +1,5 @@
1
+ :host {
2
+ // Allow host to extend the with of inner select
3
+ display: flex;
4
+ flex-direction: column;
5
+ }
@@ -0,0 +1,23 @@
1
+ :host {
2
+ display: flex;
3
+ flex-direction: column;
4
+
5
+ // Gap between vertical elements
6
+ & > *:not(:last-child) {
7
+ margin-bottom: 20px;
8
+ }
9
+
10
+ .external-buttons {
11
+ display: flex;
12
+ flex-direction: row;
13
+ }
14
+
15
+ .external-buttons {
16
+ display: flex;
17
+ flex-direction: row;
18
+
19
+ & > *:not(:last-child) {
20
+ margin-right: 10px;
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,25 @@
1
+ :host {
2
+ display: flex;
3
+ flex-direction: column;
4
+ height: 0;
5
+
6
+ mat-sidenav-container {
7
+ display: flex;
8
+ flex: 1;
9
+ flex-direction: column;
10
+ }
11
+
12
+ mat-sidenav-content > div {
13
+ overflow: auto;
14
+ }
15
+
16
+ .menuMinimized {
17
+ overflow-x: hidden;
18
+ }
19
+
20
+ .buttons {
21
+ display: flex;
22
+ flex-direction: row;
23
+ justify-content: flex-end;
24
+ }
25
+ }
@@ -0,0 +1,6 @@
1
+ :host {
2
+ display: flex;
3
+ flex: 1;
4
+ flex-direction: column;
5
+ overflow: auto;
6
+ }
@@ -0,0 +1,32 @@
1
+ natural-sidenav-container {
2
+ .mat-drawer {
3
+ border-right: none;
4
+ }
5
+
6
+ mat-sidenav.mode-side {
7
+ .mat-drawer-inner-container {
8
+ display: flex;
9
+ flex-direction: column;
10
+ }
11
+
12
+ natural-sidenav {
13
+ display: flex;
14
+ flex: 1;
15
+ min-height: 0;
16
+ }
17
+ }
18
+
19
+ mat-sidenav-content {
20
+ display: flex !important;
21
+
22
+ & > div {
23
+ display: flex;
24
+ flex: 1;
25
+
26
+ natural-sidenav-content {
27
+ display: flex;
28
+ flex: 1;
29
+ }
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,35 @@
1
+ natural-table-button {
2
+ $gap: 5px;
3
+ display: flex;
4
+
5
+ flex: 1;
6
+ flex-direction: row;
7
+ justify-content: flex-start;
8
+ align-items: center;
9
+
10
+ mat-icon:not(:last-child) {
11
+ margin-right: $gap;
12
+ }
13
+
14
+ a.mat-mdc-button {
15
+ display: flex;
16
+ flex: 1;
17
+ flex-direction: row;
18
+ justify-content: flex-start;
19
+ align-items: center;
20
+ .mdc-button__label {
21
+ display: flex;
22
+ flex-direction: row;
23
+ align-items: center;
24
+ }
25
+ }
26
+ }
27
+
28
+ natural-table-button > span {
29
+ display: flex;
30
+ flex-direction: row;
31
+ justify-content: flex-start;
32
+ align-items: center;
33
+ // This should same as @angular/material/src/material/button/_button-base.scss
34
+ padding: 0 8px;
35
+ }
@@ -0,0 +1,10 @@
1
+ :host {
2
+ display: block;
3
+ width: fit-content;
4
+ }
5
+
6
+ .wrapper {
7
+ border-radius: var(--mat-sys-corner-full);
8
+ background: var(--mat-sys-surface-bright);
9
+ padding: 5px;
10
+ }
@@ -0,0 +1,107 @@
1
+ @use '@angular/material' as mat;
2
+
3
+ .responsive-table {
4
+ overflow-x: auto;
5
+ overflow-y: hidden;
6
+ }
7
+
8
+ :root {
9
+ @include mat.table-overrides(
10
+ (
11
+ background-color: var(--mat-sys-surface-container-low),
12
+ )
13
+ );
14
+
15
+ .mat-mdc-header-row {
16
+ background-color: var(--mat-sys-surface-container-high);
17
+ }
18
+
19
+ .mat-mdc-footer-row {
20
+ background: var(--mat-sys-surface-container-low);
21
+ }
22
+
23
+ @include mat.paginator-overrides(
24
+ (
25
+ container-background-color: var(--mat-sys-surface-container-low),
26
+ )
27
+ );
28
+ }
29
+
30
+ [mat-table] {
31
+ width: 100%;
32
+ max-width: 100%;
33
+
34
+ [mat-cell] {
35
+ justify-content: center;
36
+ }
37
+
38
+ .mdc-data-table__content .mdc-data-table__row:last-child .mdc-data-table__cell {
39
+ border-bottom: 1px solid var(--mat-sys-outline-variant);
40
+ }
41
+
42
+ .mat-mdc-cell,
43
+ .mat-mdc-header-cell,
44
+ .mat-mdc-footer-cell {
45
+ &:first-child {
46
+ padding-right: 5px;
47
+ }
48
+
49
+ &:last-child {
50
+ padding-left: 5px;
51
+ }
52
+
53
+ &:not(:first-child):not(:last-child) {
54
+ padding-right: 5px;
55
+ padding-left: 5px;
56
+ }
57
+
58
+ &.natural-align-right {
59
+ text-align: right;
60
+ }
61
+
62
+ &.natural-align-center {
63
+ text-align: center;
64
+
65
+ .mat-sort-header-container {
66
+ justify-content: center;
67
+ }
68
+ }
69
+ }
70
+
71
+ [mat-row].selected {
72
+ // todo : remove ? when is it used ?
73
+ //background: mat.m2-get-color-from-palette($background, selected-button);
74
+ }
75
+
76
+ .mat-mdc-footer-cell {
77
+ font-weight: bold;
78
+ }
79
+
80
+ .natural-1em-column {
81
+ width: 1em;
82
+ }
83
+
84
+ .natural-2em-column {
85
+ width: 2em;
86
+ }
87
+
88
+ .natural-3em-column {
89
+ width: 3em;
90
+ }
91
+
92
+ .natural-4em-column {
93
+ width: 4em;
94
+ }
95
+
96
+ .natural-5em-column {
97
+ width: 5em;
98
+ }
99
+
100
+ .natural-6em-column {
101
+ width: 6em;
102
+ }
103
+
104
+ .natural-7em-column {
105
+ width: 7em;
106
+ }
107
+ }
@@ -1,72 +0,0 @@
1
- @use 'sass:map';
2
- @use '@angular/material' as mat;
3
-
4
- // Non themes
5
- @use 'styles/table';
6
- @use 'modules/panels/panels.external';
7
- // Themes
8
- @use 'modules/alert/alert.theme';
9
- @use 'modules/sidenav/sidenav.theme';
10
- @use 'modules/search/search.theme';
11
- @use 'modules/file/component/file.theme';
12
-
13
- /**
14
- * Global css
15
- */
16
- .mat-mdc-table .mdc-button__label {
17
- white-space: nowrap;
18
- }
19
-
20
- /**
21
- * Wrapped theme
22
- */
23
- @mixin natural($theme) {
24
- $primary: map.get($theme, primary);
25
- $accent: map.get($theme, accent);
26
- $warn: map.get($theme, warn);
27
- $background: map.get($theme, background);
28
- $foreground: map.get($theme, foreground);
29
-
30
- @include alert.natural-alert($theme);
31
- @include sidenav.natural-sidenav($theme);
32
- @include search.natural-search($theme);
33
- @include table.natural-table($theme);
34
- @include file.natural-file($theme);
35
-
36
- .mat-mdc-tab-labels,
37
- .mat-mdc-tab-links,
38
- .mdc-data-table__row:last-child .mdc-data-table__cell {
39
- border-bottom: 1px solid mat.m2-get-color-from-palette($foreground, divider);
40
- }
41
-
42
- // Since MDC dialogs, text color is too pale, so we restore a higher contrast for better readability
43
- // See https://github.com/angular/components/issues/26797
44
- .mat-mdc-dialog-container .mdc-dialog__content {
45
- color: mat.m2-get-color-from-palette(map.get($theme, foreground), base, 0.87);
46
- }
47
-
48
- .natural-elevation {
49
- box-shadow:
50
- inset 0 1px rgba(255, 255, 255, 0.3),
51
- 0 2px 1px -1px rgba(0, 0, 0, 0.2),
52
- 0 1px 1px 0 rgba(0, 0, 0, 0.14),
53
- 0 1px 3px 0 rgba(0, 0, 0, 0.12);
54
- }
55
- }
56
-
57
- $defaultConfig: mat.m2-define-typography-config();
58
-
59
- // This is the default Material typography, but with button with normal letter-spacing instead of wider letter-spacing.
60
- $typography: mat.m2-define-typography-config(
61
- $button: mat.m2-define-typography-level(
62
- $font-family: mat.m2-font-family($defaultConfig, 'button'),
63
- $font-weight: mat.m2-font-weight($defaultConfig, 'button'),
64
- $font-size: mat.m2-font-size($defaultConfig, 'button'),
65
- $line-height: mat.m2-line-height($defaultConfig, 'button'),
66
- $letter-spacing: normal,
67
- ),
68
- );
69
-
70
- .mdc-snackbar {
71
- margin-top: 75px !important;
72
- }
@@ -1,14 +0,0 @@
1
- @use 'sass:map';
2
- @use '@angular/material' as mat;
3
- @mixin natural-alert($theme) {
4
- $primary: map.get($theme, primary);
5
- $accent: map.get($theme, accent);
6
- $warn: map.get($theme, warn);
7
- $bg: map.get($theme, background);
8
- $fg: map.get($theme, foreground);
9
-
10
- .snackbar-error .mdc-snackbar__surface {
11
- background-color: mat.m2-get-color-from-palette($warn) !important;
12
- color: mat.m2-get-color-from-palette($warn, default-contrast) !important;
13
- }
14
- }
@@ -1,23 +0,0 @@
1
- @use 'sass:map';
2
- @use '@angular/material' as mat;
3
- @mixin natural-file($theme) {
4
- $primary: map.get($theme, primary);
5
- $accent: map.get($theme, accent);
6
- $bg: map.get($theme, background);
7
-
8
- natural-file {
9
- a {
10
- background-color: mat.m2-get-color-from-palette($bg, card);
11
- }
12
-
13
- .action-overlay {
14
- background-color: mat.m2-get-color-from-palette($accent, 0.85);
15
- color: mat.m2-get-color-from-palette($accent, default-contrast);
16
- }
17
-
18
- .file-preview {
19
- background-color: mat.m2-get-color-from-palette($primary, 0.85);
20
- color: mat.m2-get-color-from-palette($primary, default-contrast);
21
- }
22
- }
23
- }
@@ -1,14 +0,0 @@
1
- @use 'sass:map';
2
- @use '@angular/material' as mat;
3
- @mixin natural-dropdown-container($theme) {
4
- $background: map.get($theme, background);
5
- $foreground: map.get($theme, foreground);
6
-
7
- .natural-dropdown-container {
8
- background: mat.m2-get-color-from-palette($background, 'card');
9
-
10
- & > * > * > * {
11
- outline: none !important;
12
- }
13
- }
14
- }
@@ -1,23 +0,0 @@
1
- /**
2
- This is not really theming as there is no color, but it's some custom styles to allow flexible with inputs that require
3
- to override inner mat-form-field html elements. This styling needs to escape from namespacing and theming is the easier way to apply them.
4
- */
5
- @mixin natural-input($theme) {
6
- natural-input {
7
- .mat-mdc-form-field-infix {
8
- margin-right: 10px;
9
- margin-left: 10px;
10
- width: auto;
11
- }
12
-
13
- .mat-form-field-flex {
14
- align-items: flex-start; // Fix firefox misalignment with baseline and mat-icon-button that seems not accepted by @a/material
15
- padding-right: 0;
16
- padding-left: 0;
17
- }
18
-
19
- .mat-mdc-form-field {
20
- margin-bottom: -1.25em;
21
- }
22
- }
23
- }
@@ -1,7 +0,0 @@
1
- @use 'input/input.theme';
2
- @use 'dropdown-container/dropdown-container.theme';
3
-
4
- @mixin natural-search($theme) {
5
- @include input.natural-input($theme);
6
- @include dropdown-container.natural-dropdown-container($theme);
7
- }
@@ -1,40 +0,0 @@
1
- @use 'sass:map';
2
- @mixin natural-sidenav($theme) {
3
- $primary: map.get($theme, primary);
4
- $accent: map.get($theme, accent);
5
- $background: map.get($theme, background);
6
- $foreground: map.get($theme, foreground);
7
-
8
- natural-sidenav-container {
9
- .mat-drawer {
10
- border-right: none;
11
- }
12
-
13
- mat-sidenav.modeSide {
14
- .mat-drawer-inner-container {
15
- display: flex;
16
- flex-direction: column;
17
- }
18
-
19
- natural-sidenav {
20
- display: flex;
21
- flex: 1;
22
- min-height: 0;
23
- }
24
- }
25
-
26
- mat-sidenav-content {
27
- display: flex !important;
28
-
29
- & > div {
30
- display: flex;
31
- flex: 1;
32
-
33
- natural-sidenav-content {
34
- display: flex;
35
- flex: 1;
36
- }
37
- }
38
- }
39
- }
40
- }
@@ -1,94 +0,0 @@
1
- @use 'sass:map';
2
- @use '@angular/material' as mat;
3
-
4
- @mixin natural-table($theme) {
5
- $primary: map.get($theme, primary);
6
- $accent: map.get($theme, accent);
7
- $background: map.get($theme, background);
8
- $foreground: map.get($theme, foreground);
9
-
10
- .responsive-table {
11
- overflow-x: auto;
12
- overflow-y: hidden;
13
- }
14
-
15
- [mat-table] {
16
- width: 100%;
17
- max-width: 100%;
18
-
19
- [mat-cell] {
20
- justify-content: center;
21
- }
22
-
23
- .mat-mdc-cell,
24
- .mat-mdc-header-cell,
25
- .mat-mdc-footer-cell {
26
- &:first-child {
27
- padding-right: 5px;
28
- }
29
-
30
- &:last-child {
31
- padding-left: 5px;
32
- }
33
-
34
- &:not(:first-child):not(:last-child) {
35
- padding-right: 5px;
36
- padding-left: 5px;
37
- }
38
-
39
- &.natural-align-right {
40
- text-align: right;
41
- }
42
-
43
- &.natural-align-center {
44
- text-align: center;
45
-
46
- .mat-sort-header-container {
47
- justify-content: center;
48
- }
49
- }
50
- }
51
-
52
- [mat-row] {
53
- &.selected {
54
- background: mat.m2-get-color-from-palette($background, selected-button);
55
- }
56
- }
57
-
58
- [mat-header-row] {
59
- background: mat.m2-get-color-from-palette($background, app-bar);
60
- }
61
-
62
- .mat-mdc-footer-cell {
63
- font-weight: bold;
64
- }
65
-
66
- .natural-1em-column {
67
- width: 1em;
68
- }
69
-
70
- .natural-2em-column {
71
- width: 2em;
72
- }
73
-
74
- .natural-3em-column {
75
- width: 3em;
76
- }
77
-
78
- .natural-4em-column {
79
- width: 4em;
80
- }
81
-
82
- .natural-5em-column {
83
- width: 5em;
84
- }
85
-
86
- .natural-6em-column {
87
- width: 6em;
88
- }
89
-
90
- .natural-7em-column {
91
- width: 7em;
92
- }
93
- }
94
- }