@smartbit4all/ng-client 7.3.20 → 7.3.22

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": "@smartbit4all/ng-client",
3
- "version": "7.3.20",
3
+ "version": "7.3.22",
4
4
  "description": "Angular client library for the smartbit4all platform — a server-driven UI framework that renders views, pages, forms, grids, trees and dialogs from backend (ViewApi/PageApi) definitions. Provides reactive view-context state management, dynamic component layouts and OpenAPI-generated BFF clients.",
5
5
  "sideEffects": false,
6
6
  "peerDependencies": {
@@ -27,9 +27,10 @@
27
27
  "dependencies": {
28
28
  "tslib": "^2.3.0"
29
29
  },
30
- "module": "fesm2022/smartbit4all-ng-client.mjs",
31
- "typings": "types/smartbit4all-ng-client.d.ts",
32
30
  "exports": {
31
+ "./styles": {
32
+ "sass": "./src/styles/_ng-client-styles.scss"
33
+ },
33
34
  "./package.json": {
34
35
  "default": "./package.json"
35
36
  },
@@ -38,5 +39,7 @@
38
39
  "default": "./fesm2022/smartbit4all-ng-client.mjs"
39
40
  }
40
41
  },
42
+ "module": "fesm2022/smartbit4all-ng-client.mjs",
43
+ "typings": "types/smartbit4all-ng-client.d.ts",
41
44
  "type": "module"
42
45
  }
@@ -0,0 +1,192 @@
1
+ @use 'sass:map';
2
+
3
+ $default-colors: (
4
+ primary: #4763ff,
5
+ secondary: #a6aabd60,
6
+ accent: #20b6a8,
7
+ warn: #d51d1d,
8
+ success: #16a34a,
9
+ accent-grey: #6b7280,
10
+ text: #132033,
11
+ text-inverted: #ffffff,
12
+ text-muted: #68778e,
13
+ ) !default;
14
+
15
+ // Text color on the raised variant. A color missing from this map gets white.
16
+ $default-text-colors: (
17
+ primary: var(--text-inverted-color),
18
+ ) !default;
19
+
20
+ $default-tokens: (
21
+ // Backgrounds
22
+ color-bg: #f6f8fb,
23
+ color-surface: #ffffff,
24
+ color-surface-alt: #f9fbff,
25
+
26
+ // Borders
27
+ color-border: #e4eaf2,
28
+
29
+ // Tree
30
+ tree-active-background: var(--accent-color),
31
+
32
+ // Semantic
33
+ color-danger: var(--warn-color),
34
+ color-teal: #20b6a8,
35
+
36
+ // UI chrome
37
+ color-chip: #e8f4fd,
38
+ color-input: #ffffff,
39
+
40
+ // Shadows
41
+ shadow-strong: 0 18px 50px rgba(1, 132, 228, 0.1),
42
+ shadow-soft: 0 8px 22px rgba(1, 132, 228, 0.07),
43
+
44
+ border-radius: 0.5rem,
45
+ default-padding: 0.5rem,
46
+ ) !default;
47
+
48
+ @function -text-color($text-colors, $name) {
49
+ $value: map.get($text-colors, $name);
50
+ @if $value {
51
+ @return $value;
52
+ }
53
+ @return var(--text-color);
54
+ }
55
+
56
+ // Emits CSS variables only, so the project chooses the selector.
57
+ // Usage: body { @include sb.tokens($colors, $text-colors, $overrides); }
58
+ @mixin tokens($colors: (), $text-colors: (), $overrides: ()) {
59
+ $all-colors: map.merge($default-colors, $colors);
60
+ $all-text-colors: map.merge($default-text-colors, $text-colors);
61
+ $all-tokens: map.merge($default-tokens, $overrides);
62
+
63
+ // One --<name>-color and one --<name>-text-color for every color
64
+ @each $name, $color in $all-colors {
65
+ --#{$name}-color: #{$color};
66
+ --#{$name}-text-color: #{-text-color($all-text-colors, $name)};
67
+ }
68
+
69
+ @each $name, $value in $all-tokens {
70
+ @if $name == font-family {
71
+ font-family: #{$value} !important;
72
+ } @else {
73
+ --#{$name}: #{$value};
74
+ }
75
+ }
76
+ }
77
+
78
+ // @use '@smartbit4all/ng-client/styles' as sb;
79
+ // @include sb.buttons;
80
+ // @include sb.buttons((new-color: #ff5500), (new-color: white));
81
+ @mixin buttons($colors: (), $text-colors: ()) {
82
+ $all-colors: map.merge($default-colors, $colors);
83
+ $all-text-colors: map.merge($default-text-colors, $text-colors);
84
+
85
+ @each $name, $color in $all-colors {
86
+ $text: -text-color($all-text-colors, $name);
87
+ $color: var(--#{$name}-color, #{$color});
88
+
89
+ .sb4-raised.sb4-#{$name} {
90
+ background-color: #{$color} !important;
91
+ color: #{$text} !important;
92
+ stroke: #{$text} !important;
93
+ border: none;
94
+ }
95
+
96
+ .sb4-raised.sb4-#{$name}:hover {
97
+ background-color: rgb(from #{$color} r g b / 0.8);
98
+ }
99
+
100
+ .sb4-raised.sb4-#{$name} .mdc-button__label {
101
+ color: #{$text};
102
+ }
103
+
104
+ .sb4-normal.sb4-#{$name} {
105
+ background-color: transparent;
106
+ border: 1px solid #{$color};
107
+ color: #{$color} !important;
108
+ stroke: #{$color};
109
+ box-shadow: none;
110
+ }
111
+
112
+ .sb4-flat.sb4-#{$name} {
113
+ background-color: transparent;
114
+ border: 1px solid transparent;
115
+ color: #{$color} !important;
116
+ stroke: #{$color};
117
+ box-shadow: none;
118
+ }
119
+
120
+ .sb4-flat.sb4-#{$name}.sb4-view-activated {
121
+ --sb4-view-activated-bg: transparent !important;
122
+ --sb4-view-activated-color: #{$color} !important;
123
+ border-bottom: 1px solid #{$color} !important;
124
+ border-bottom-right-radius: unset !important;
125
+ border-bottom-left-radius: unset !important;
126
+
127
+ .mat-icon {
128
+ color: #{$color} !important;
129
+ fill: #{$color} !important;
130
+ stroke: #{$color} !important;
131
+ }
132
+ }
133
+
134
+ .sb4-minifab.sb4-#{$name} {
135
+ background-color: transparent;
136
+ border: 1px solid #{$color};
137
+ color: #{$color};
138
+ box-shadow: none;
139
+ }
140
+
141
+ .sb4-icon.sb4-#{$name} {
142
+ background-color: transparent;
143
+ border: 1px solid transparent;
144
+ color: #{$color};
145
+ box-shadow: none;
146
+ }
147
+
148
+ .sb4-minifab.sb4-#{$name}:hover,
149
+ .sb4-normal.sb4-#{$name}:hover {
150
+ background-color: rgb(from #{$color} r g b / 0.1);
151
+ border-color: #{$color};
152
+ }
153
+
154
+ .sb4-flat.sb4-#{$name}:hover {
155
+ background-color: rgb(from #{$color} r g b / 0.1);
156
+ }
157
+
158
+ .sb4-minifab.sb4-#{$name}:focus,
159
+ .sb4-minifab.sb4-#{$name}:hover {
160
+ box-shadow: none;
161
+ }
162
+
163
+ .sb4-minifab.sb4-#{$name},
164
+ .sb4-normal.sb4-#{$name},
165
+ .sb4-flat.sb4-#{$name} {
166
+ .mdc-button__label {
167
+ color: #{$color};
168
+ }
169
+ }
170
+
171
+ .sb4-raised.sb4-#{$name} mat-icon,
172
+ .sb4-raised.sb4-#{$name} .mat-icon,
173
+ .sb4-raised.sb4-#{$name} .pi {
174
+ color: #{$text} !important;
175
+ fill: #{$text} !important;
176
+ stroke: #{$text} !important;
177
+ }
178
+
179
+ .sb4-icon.sb4-#{$name},
180
+ .sb4-minifab.sb4-#{$name},
181
+ .sb4-normal.sb4-#{$name},
182
+ .sb4-flat.sb4-#{$name} {
183
+ mat-icon,
184
+ .mat-icon,
185
+ .pi {
186
+ color: #{$color} !important;
187
+ fill: #{$color} !important;
188
+ stroke: #{$color} !important;
189
+ }
190
+ }
191
+ }
192
+ }
@@ -5,7 +5,7 @@ import { ComponentType as ComponentType$1 } from '@angular/cdk/portal';
5
5
  import { ValidatorFn, UntypedFormGroup, ControlValueAccessor } from '@angular/forms';
6
6
  import { Observable, Subject as Subject$1, Subscription } from 'rxjs';
7
7
  import { QuillModules } from 'ngx-quill';
8
- import { MatDialogRef, MatDialog } from '@angular/material/dialog';
8
+ import { MatDialogRef, MatDialog, MatDialogConfig } from '@angular/material/dialog';
9
9
  import { DateFnsAdapter } from '@angular/material-date-fns-adapter';
10
10
  import { MatDateFormats, ThemePalette } from '@angular/material/core';
11
11
  import { Locale } from 'date-fns';
@@ -8618,6 +8618,8 @@ interface SmartTreeNode {
8618
8618
  childrenNodesLoaded: boolean;
8619
8619
  level: number;
8620
8620
  shortDescription?: string;
8621
+ /** The node's tooltip; when set, it is the tooltip of the icon and of the caption. */
8622
+ tooltip?: string;
8621
8623
  identifier?: string;
8622
8624
  objectUri?: string;
8623
8625
  nodeType: string;
@@ -8777,6 +8779,13 @@ declare class SmartTreeComponent implements OnInit, OnDestroy {
8777
8779
  'padding-left': string;
8778
8780
  };
8779
8781
  customButtonClicked(event: any, button: SmartTreeNodeButton, close?: boolean): void;
8782
+ /**
8783
+ * The CSS hides the short description of a row edited elsewhere, so its caption tooltip carries
8784
+ * it under the tooltip, on a line of its own.
8785
+ */
8786
+ getCaptionTooltipText(node: SmartTreeNode): string | null;
8787
+ /** The tooltip of a text, opening below like a caption's; none without a text. */
8788
+ createTooltip(text?: string | null): UiActionTooltip | undefined;
8780
8789
  getClassesForTreeNode(node: SmartTreeNode): string[];
8781
8790
  getInnerClassesForTreeNode(node: SmartTreeNode): string[];
8782
8791
  getClassesForTreeNodeChildren(node: SmartTreeNode): string[];
@@ -9154,7 +9163,7 @@ declare abstract class SmartdialogService {
9154
9163
  maxWidth: number;
9155
9164
  minWidth: number;
9156
9165
  };
9157
- createDialog(smartDialog: SmartDialogData, component: ComponentType$1<any>): MatDialogRef<any, any>;
9166
+ createDialog(smartDialog: SmartDialogData, component: ComponentType$1<any>, config?: MatDialogConfig): MatDialogRef<any, any>;
9158
9167
  createDialogRef(smartDialog: SmartDialogData, component: ComponentType$1<any>): MatDialogRef<any, any>;
9159
9168
  openComponentAsDialog(component: ComponentType$1<any>, viewName: string): MatDialogRef<any, any>;
9160
9169
  handleAfterClosed(result: any): void;
@@ -9885,7 +9894,7 @@ declare class SmartKeybindingService {
9885
9894
  private readonly injector;
9886
9895
  private readonly isMac;
9887
9896
  private readonly hosts;
9888
- /** The elements of no view whose keys go to a view: a dialog's header to the page it shows. */
9897
+ /** The elements of no view whose keys go to a view: a dialog's container to the page it shows. */
9889
9898
  private readonly forwards;
9890
9899
  /** The view that held the focus last; it keeps the keys after the focus fell to the body. */
9891
9900
  private lastActive?;
@@ -9893,8 +9902,8 @@ declare class SmartKeybindingService {
9893
9902
  /** Lets the view take keys; returns the function that stops it. */
9894
9903
  register(entry: KeybindingHost): () => void;
9895
9904
  /**
9896
- * Sends the keys pressed with the focus in `from`, an element outside every view (the header
9897
- * of a dialog), to the view whose host is `to`; returns the function that stops it.
9905
+ * Sends the keys pressed with the focus in `from`, an element enclosing no view of its own (the
9906
+ * container of a dialog), to the view whose host is `to`; returns the function that stops it.
9898
9907
  */
9899
9908
  forwardKeys(from: HTMLElement, to: HTMLElement): () => void;
9900
9909
  private onFocusin;
@@ -11473,14 +11482,17 @@ declare function hasGroupEditActions(service: ISmartFilterEditorService): boolea
11473
11482
  declare class SmartTooltipDirective {
11474
11483
  private tooltip;
11475
11484
  readonly smartTooltip: i0.InputSignal<UiActionTooltip | undefined>;
11485
+ /** A class the tooltip carries beside the directive's own, for a use that styles its tooltips. */
11486
+ readonly smartTooltipClass: i0.InputSignal<string | undefined>;
11476
11487
  cursor: string;
11477
11488
  mouseover(): void;
11478
11489
  mouseleave(): void;
11490
+ private getTooltipClass;
11479
11491
  getTooltipPos(pos?: UiActionTooltipTooltipPositionEnum): TooltipPosition;
11480
11492
  getTooltipDelay(delay?: number): number;
11481
11493
  getTooltipHideDelay(delay?: number): number;
11482
11494
  static ɵfac: i0.ɵɵFactoryDeclaration<SmartTooltipDirective, never>;
11483
- static ɵdir: i0.ɵɵDirectiveDeclaration<SmartTooltipDirective, "[smartTooltip]", never, { "smartTooltip": { "alias": "smartTooltip"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
11495
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SmartTooltipDirective, "[smartTooltip]", never, { "smartTooltip": { "alias": "smartTooltip"; "required": false; "isSignal": true; }; "smartTooltipClass": { "alias": "smartTooltipClass"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
11484
11496
  }
11485
11497
 
11486
11498
  declare class SmartDatePipe extends DatePipe implements PipeTransform {
Binary file