@masterteam/components 0.0.165 → 0.0.167

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 (55) hide show
  1. package/assets/common.css +2 -2
  2. package/assets/i18n/ar.json +128 -0
  3. package/assets/i18n/en.json +128 -0
  4. package/fesm2022/masterteam-components-business-fields.mjs +40 -20
  5. package/fesm2022/masterteam-components-business-fields.mjs.map +1 -1
  6. package/fesm2022/masterteam-components-client-page.mjs +6 -4
  7. package/fesm2022/masterteam-components-client-page.mjs.map +1 -1
  8. package/fesm2022/masterteam-components-drawer.mjs +4 -2
  9. package/fesm2022/masterteam-components-drawer.mjs.map +1 -1
  10. package/fesm2022/masterteam-components-dynamic-drawer.mjs +9 -4
  11. package/fesm2022/masterteam-components-dynamic-drawer.mjs.map +1 -1
  12. package/fesm2022/masterteam-components-entities.mjs +34 -13
  13. package/fesm2022/masterteam-components-entities.mjs.map +1 -1
  14. package/fesm2022/masterteam-components-formula.mjs +52 -14
  15. package/fesm2022/masterteam-components-formula.mjs.map +1 -1
  16. package/fesm2022/masterteam-components-icon-field.mjs +4 -3
  17. package/fesm2022/masterteam-components-icon-field.mjs.map +1 -1
  18. package/fesm2022/masterteam-components-modal.mjs +35 -0
  19. package/fesm2022/masterteam-components-modal.mjs.map +1 -1
  20. package/fesm2022/masterteam-components-module-summary-card.mjs +4 -2
  21. package/fesm2022/masterteam-components-module-summary-card.mjs.map +1 -1
  22. package/fesm2022/masterteam-components-pick-list-field.mjs +5 -3
  23. package/fesm2022/masterteam-components-pick-list-field.mjs.map +1 -1
  24. package/fesm2022/masterteam-components-runtime-action.mjs +21 -13
  25. package/fesm2022/masterteam-components-runtime-action.mjs.map +1 -1
  26. package/fesm2022/masterteam-components-sidebar.mjs +3 -2
  27. package/fesm2022/masterteam-components-sidebar.mjs.map +1 -1
  28. package/fesm2022/masterteam-components-table.mjs +60 -13
  29. package/fesm2022/masterteam-components-table.mjs.map +1 -1
  30. package/fesm2022/masterteam-components-tabs.mjs +4 -2
  31. package/fesm2022/masterteam-components-tabs.mjs.map +1 -1
  32. package/fesm2022/masterteam-components-text-field.mjs +16 -4
  33. package/fesm2022/masterteam-components-text-field.mjs.map +1 -1
  34. package/fesm2022/masterteam-components-topbar.mjs +3 -2
  35. package/fesm2022/masterteam-components-topbar.mjs.map +1 -1
  36. package/fesm2022/masterteam-components-upload-field.mjs +4 -3
  37. package/fesm2022/masterteam-components-upload-field.mjs.map +1 -1
  38. package/fesm2022/masterteam-components-user-search-field.mjs +5 -6
  39. package/fesm2022/masterteam-components-user-search-field.mjs.map +1 -1
  40. package/package.json +1 -1
  41. package/types/masterteam-components-business-fields.d.ts +2 -0
  42. package/types/masterteam-components-client-page.d.ts +2 -1
  43. package/types/masterteam-components-drawer.d.ts +1 -0
  44. package/types/masterteam-components-dynamic-drawer.d.ts +2 -0
  45. package/types/masterteam-components-entities.d.ts +4 -0
  46. package/types/masterteam-components-formula.d.ts +7 -3
  47. package/types/masterteam-components-modal.d.ts +10 -2
  48. package/types/masterteam-components-module-summary-card.d.ts +1 -0
  49. package/types/masterteam-components-pick-list-field.d.ts +1 -0
  50. package/types/masterteam-components-runtime-action.d.ts +2 -0
  51. package/types/masterteam-components-table.d.ts +28 -13
  52. package/types/masterteam-components-tabs.d.ts +1 -0
  53. package/types/masterteam-components-text-field.d.ts +4 -3
  54. package/types/masterteam-components-upload-field.d.ts +1 -0
  55. package/types/masterteam-components-user-search-field.d.ts +0 -1
@@ -192,6 +192,7 @@ declare class EntityField {
192
192
  readonly hideLabel: _angular_core.Signal<boolean>;
193
193
  readonly labelPosition: _angular_core.Signal<_masterteam_components_entities.EntityLabelPosition>;
194
194
  readonly labelContainerClass: _angular_core.Signal<string>;
195
+ readonly contentContainerClass: _angular_core.Signal<string>;
195
196
  readonly containerClass: _angular_core.Signal<string>;
196
197
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityField, never>;
197
198
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityField, "mt-entity-field", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "labelIconName": { "alias": "labelIconName"; "required": false; "isSignal": true; }; "configuration": { "alias": "configuration"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
@@ -358,6 +359,7 @@ declare class EntityAttachment {
358
359
  readonly endPoint: _angular_core.InputSignal<string>;
359
360
  readonly context: _angular_core.InputSignal<HttpContext | undefined>;
360
361
  private readonly httpClient;
362
+ private readonly transloco;
361
363
  readonly displayName: _angular_core.Signal<string>;
362
364
  readonly loading: _angular_core.WritableSignal<boolean>;
363
365
  readonly attachments: _angular_core.WritableSignal<EntityAttachmentItemValue[]>;
@@ -435,6 +437,7 @@ interface OperationBadge {
435
437
  classes: string;
436
438
  }
437
439
  declare class ComparisonEntityList {
440
+ private readonly transloco;
438
441
  readonly data: _angular_core.InputSignal<EntityData>;
439
442
  readonly comparison: _angular_core.Signal<EntityListComparison | null>;
440
443
  readonly rows: _angular_core.Signal<EntityListComparisonRow[]>;
@@ -457,6 +460,7 @@ interface EntityClickEvent {
457
460
  source: MouseEvent;
458
461
  }
459
462
  declare class EntitiesPreview {
463
+ private readonly transloco;
460
464
  /** Array of entity data to display */
461
465
  readonly entities: _angular_core.InputSignal<EntityData[]>;
462
466
  readonly attachmentShape: _angular_core.InputSignal<"compact" | "default">;
@@ -465,6 +465,7 @@ interface OperatorGroup {
465
465
  operators: OperatorDefinition[];
466
466
  }
467
467
  declare class FormulaToolbar {
468
+ private readonly transloco;
468
469
  /** Known properties to show in properties tab */
469
470
  readonly knownProperties: _angular_core.InputSignal<string[]>;
470
471
  /** Custom properties template */
@@ -497,10 +498,10 @@ declare class FormulaToolbar {
497
498
  /** Active tab */
498
499
  readonly activeTab: _angular_core.WritableSignal<ToolbarTab>;
499
500
  /** Tab options */
500
- readonly tabOptions: {
501
+ readonly tabOptions: _angular_core.Signal<{
501
502
  label: string;
502
503
  value: ToolbarTab;
503
- }[];
504
+ }[]>;
504
505
  /** Tabs actually rendered */
505
506
  readonly resolvedTabOptions: _angular_core.Signal<{
506
507
  label: string;
@@ -531,6 +532,8 @@ declare class FormulaToolbar {
531
532
  }[]>;
532
533
  /** Filtered properties based on search */
533
534
  readonly filteredProperties: _angular_core.Signal<string[]>;
535
+ /** Operators translated through the active locale */
536
+ private readonly translatedOperators;
534
537
  /** Filtered operators based on search */
535
538
  readonly filteredOperators: _angular_core.Signal<OperatorDefinition[]>;
536
539
  /** Count of filtered items per tab */
@@ -567,6 +570,7 @@ declare class FormulaToolbar {
567
570
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormulaToolbar, "mt-formula-toolbar", never, { "knownProperties": { "alias": "knownProperties"; "required": false; "isSignal": true; }; "propertiesTemplate": { "alias": "propertiesTemplate"; "required": false; "isSignal": true; }; "functionCategories": { "alias": "functionCategories"; "required": false; "isSignal": true; }; "operators": { "alias": "operators"; "required": false; "isSignal": true; }; "initialTab": { "alias": "initialTab"; "required": false; "isSignal": true; }; "visibleTabs": { "alias": "visibleTabs"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; }, { "onBlockInsert": "onBlockInsert"; "onTabChange": "onTabChange"; }, ["projectedPropertiesTemplate"], never, true, never>;
568
571
  }
569
572
 
573
+ declare const OPERATOR_SYMBOL_TO_TRANSLATION_KEY: Record<string, string>;
570
574
  declare const DEFAULT_OPERATORS: OperatorDefinition[];
571
575
 
572
576
  type ToolbarItemType = 'function' | 'property' | 'operator';
@@ -722,5 +726,5 @@ declare class FormulaRuntimeEngine {
722
726
  private evaluateAst;
723
727
  }
724
728
 
725
- export { CONDITION_FUNCTION_CATEGORIES, CONDITION_OPERATORS, CONDITION_RUNTIME_CATALOG, DEFAULT_OPERATORS, FormulaEditor, FormulaEditorCode, FormulaRuntimeEngine, FormulaStatusBar, FormulaToolbar, FormulaToolbarItem, VALIDATION_FUNCTION_CATEGORIES, VALIDATION_OPERATORS, VALIDATION_RUNTIME_CATALOG, cloneBlock, cloneToken, cloneTokens, createFunctionBlock, createFunctionTokens, createLiteralBlock, createLiteralToken, createOperatorBlock, createOperatorToken, createPropertyBlock, createPropertyToken, createTextToken, findFunctionRange, generateFunctionId, generateSmartBlockId, generateTokenId, getArgumentIndexAtPosition, getFunctionTokens, isValidDropPosition, parseSignature, recalculateDepths, serializeTokens, tokenizeFormulaTemplate };
729
+ export { CONDITION_FUNCTION_CATEGORIES, CONDITION_OPERATORS, CONDITION_RUNTIME_CATALOG, DEFAULT_OPERATORS, FormulaEditor, FormulaEditorCode, FormulaRuntimeEngine, FormulaStatusBar, FormulaToolbar, FormulaToolbarItem, OPERATOR_SYMBOL_TO_TRANSLATION_KEY, VALIDATION_FUNCTION_CATEGORIES, VALIDATION_OPERATORS, VALIDATION_RUNTIME_CATALOG, cloneBlock, cloneToken, cloneTokens, createFunctionBlock, createFunctionTokens, createLiteralBlock, createLiteralToken, createOperatorBlock, createOperatorToken, createPropertyBlock, createPropertyToken, createTextToken, findFunctionRange, generateFunctionId, generateSmartBlockId, generateTokenId, getArgumentIndexAtPosition, getFunctionTokens, isValidDropPosition, parseSignature, recalculateDepths, serializeTokens, tokenizeFormulaTemplate };
726
730
  export type { ApiErrorResponse, ArgumentSlot, AutocompleteContext, AutocompleteRequest, AutocompleteResponse, AutocompleteSuggestion, BlockType, DragBehavior, ExampleItem, FormulaConditionEvaluation, FormulaEvaluationContext, FormulaRuntimeCatalog, FormulaRuntimeDomain, FormulaRuntimeEngineError, FormulaRuntimeEngineErrorCode, FormulaToken, FormulaToolbarPropertiesContext, FormulaValidationEvaluation, FormulaValidationRulesEvaluation, FunctionCategory, FunctionCategoryGroup, FunctionDefinition, FunctionExample, FunctionInfo, OperatorDefinition, ParameterDefinition, SmartBlock, TokenType, ToolbarItemType, ToolbarTab, ValidationError, ValidationRequest, ValidationResult, ValidationSeverity, ValidationWarning };
@@ -1,16 +1,24 @@
1
1
  import { DrawerService, DynamicDrawerConfigInterface } from '@masterteam/components/dynamic-drawer';
2
- import { DialogService, DynamicDialogConfig } from '@masterteam/components/dialog';
2
+ import { DialogService, DynamicDialogConfig, DynamicDialogRef } from '@masterteam/components/dialog';
3
3
  import * as i0 from '@angular/core';
4
4
 
5
5
  declare class ModalService {
6
6
  readonly drawerService: DrawerService;
7
7
  readonly dialogService: DialogService;
8
8
  private dir;
9
+ private readonly openRefs;
9
10
  footerClass: string;
10
11
  contentClass: string;
11
12
  modalConfig: any;
12
- openModal(component: any, modalType: 'drawer' | 'dialog', config: DynamicDialogConfig | DynamicDrawerConfigInterface): any;
13
+ openModal(component: any, modalType: 'drawer' | 'dialog', config: DynamicDialogConfig | DynamicDrawerConfigInterface): DynamicDialogRef<any>;
14
+ /**
15
+ * Closes every modal/drawer opened through this service.
16
+ * Useful on session expiry, forced logout, or any global reset
17
+ * where leftover popups would confuse the user.
18
+ */
19
+ closeAll(): void;
13
20
  handelStartEndPosition(position: string | undefined): string;
21
+ private trackRef;
14
22
  static ɵfac: i0.ɵɵFactoryDeclaration<ModalService, never>;
15
23
  static ɵprov: i0.ɵɵInjectableDeclaration<ModalService>;
16
24
  }
@@ -2,6 +2,7 @@ import * as _angular_core from '@angular/core';
2
2
  import { MTIcon } from '@masterteam/icons';
3
3
 
4
4
  declare class ModuleSummaryCard {
5
+ private readonly transloco;
5
6
  readonly icon: _angular_core.InputSignal<MTIcon | undefined>;
6
7
  readonly title: _angular_core.InputSignal<string | undefined>;
7
8
  readonly description: _angular_core.InputSignal<string | undefined>;
@@ -5,6 +5,7 @@ import { PickList } from 'primeng/picklist';
5
5
  import { isInvalid } from '@masterteam/components';
6
6
 
7
7
  declare class PickListField implements ControlValueAccessor, OnInit {
8
+ private readonly transloco;
8
9
  readonly label: _angular_core.InputSignal<string | undefined>;
9
10
  readonly class: _angular_core.InputSignal<string>;
10
11
  readonly readonly: _angular_core.InputSignal<boolean>;
@@ -90,10 +90,12 @@ declare class RuntimeActionRunner {
90
90
  private readonly confirmation;
91
91
  private readonly modal;
92
92
  private readonly toast;
93
+ private readonly transloco;
93
94
  private readonly confirmDialogClass;
94
95
  execute(action: RuntimeAction, options?: RuntimeActionExecuteOptions): Promise<RuntimeActionResult>;
95
96
  private confirm;
96
97
  private run;
98
+ private notExecutableMessage;
97
99
  static ɵfac: i0.ɵɵFactoryDeclaration<RuntimeActionRunner, never>;
98
100
  static ɵprov: i0.ɵɵInjectableDeclaration<RuntimeActionRunner>;
99
101
  }
@@ -2,6 +2,7 @@ import * as _angular_core from '@angular/core';
2
2
  import { TemplateRef, Signal, WritableSignal } from '@angular/core';
3
3
  import { MTIcon } from '@masterteam/icons';
4
4
  import { ConfirmationConfig, ConfirmationService } from '@masterteam/components/confirmation';
5
+ import { TranslocoService } from '@jsverse/transloco';
5
6
  import { TablePageEvent } from 'primeng/table';
6
7
  import { EntityData } from '@masterteam/components/entities';
7
8
  import { ControlValueAccessor } from '@angular/forms';
@@ -30,6 +31,13 @@ interface FilterConfig {
30
31
  type: 'text' | 'select' | 'userSelect' | 'date' | 'boolean' | 'user' | 'numberRange';
31
32
  label?: string;
32
33
  options?: FilterOption[];
34
+ /**
35
+ * Controls multi-select behaviour for `select` / `userSelect` filters.
36
+ * Defaults to `true` — opt out with `multiple: false` for a single-select.
37
+ * The stored filter value is an array; rows match if the cell value matches
38
+ * *any* selected entry.
39
+ */
40
+ multiple?: boolean;
33
41
  [key: string]: unknown;
34
42
  }
35
43
  /**
@@ -125,7 +133,9 @@ declare class TableGroupingController {
125
133
  private readonly groupBy;
126
134
  private readonly sortField;
127
135
  private readonly sortDirection;
128
- constructor(columns: Signal<ColumnDef[]>, rows: Signal<unknown[]>, groupBy: WritableSignal<string | null>, sortField: WritableSignal<string | null>, sortDirection: WritableSignal<'asc' | 'desc' | null>);
136
+ private readonly transloco?;
137
+ constructor(columns: Signal<ColumnDef[]>, rows: Signal<unknown[]>, groupBy: WritableSignal<string | null>, sortField: WritableSignal<string | null>, sortDirection: WritableSignal<'asc' | 'desc' | null>, transloco?: TranslocoService | undefined);
138
+ private translate;
129
139
  readonly groupableColumns: Signal<ColumnDef[]>;
130
140
  /**
131
141
  * Row counts per group key — consumed by the group header template so each
@@ -238,6 +248,7 @@ declare class Table {
238
248
  sortDirection: _angular_core.WritableSignal<"asc" | "desc" | null>;
239
249
  confirmationService: ConfirmationService;
240
250
  private readonly exportService;
251
+ private readonly transloco;
241
252
  protected readonly grouping: TableGroupingController;
242
253
  protected selectedRowKeys: _angular_core.WritableSignal<Set<string>>;
243
254
  protected transientSelectedRows: _angular_core.WritableSignal<Set<any>>;
@@ -358,6 +369,12 @@ declare class TableValueResolver {
358
369
  private static readonly UNSORTABLE_ENTITY_VIEW_TYPES;
359
370
  private static readonly EXPORTABLE_ENTITY_VIEW_TYPES;
360
371
  private static readonly FILTERABLE_ENTITY_VIEW_TYPES;
372
+ /**
373
+ * Sentinel `key` value that resolves to the whole row instead of a property
374
+ * path. Use it when a cell renderer (e.g. `type: 'user'`) needs the full
375
+ * record, not a single field — `key: '{{record}}'` in the column def.
376
+ */
377
+ static readonly RECORD_KEY = "{{record}}";
361
378
  static getProperty(obj: unknown, key: string): unknown;
362
379
  /**
363
380
  * Recursively scans `value` for any string field that contains `searchTerm`.
@@ -442,24 +459,22 @@ declare class TableFilter implements ControlValueAccessor {
442
459
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableFilter, "mt-table-filter", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; }, { "filterApplied": "filterApplied"; "filterReset": "filterReset"; }, never, never, true, never>;
443
460
  }
444
461
 
445
- /**
446
- * Renders a single filter control for one `ColumnDef`, dispatching on
447
- * `column.filterConfig.type` (`text` | `select` | `date` | `boolean` | `user`
448
- * | `numberRange`).
449
- *
450
- * Two-way binds the filter value via `value` / `valueChange`. Shared by both
451
- * filter UX modes (popover + per-column) so field rendering lives in one place.
452
- * Add a new filter type by adding a `@case` in the template and extending
453
- * `FilterConfig['type']`.
454
- */
455
462
  declare class TableFilterField {
456
463
  readonly column: _angular_core.InputSignal<ColumnDef>;
457
464
  readonly value: _angular_core.ModelSignal<any>;
458
- protected readonly booleanOptions: {
465
+ private readonly transloco;
466
+ protected readonly booleanOptions: _angular_core.Signal<{
459
467
  label: string;
460
468
  value: boolean;
461
- }[];
469
+ }[]>;
470
+ protected readonly multiValue: _angular_core.Signal<readonly unknown[]>;
471
+ protected readonly filterOptions: _angular_core.Signal<readonly unknown[]>;
462
472
  protected getFilterType(): string;
473
+ /**
474
+ * `select` / `userSelect` filters default to multi-select unless the caller
475
+ * opts out with `filterConfig.multiple: false`.
476
+ */
477
+ protected isMultiple(): boolean;
463
478
  protected getScalarValue(): any;
464
479
  protected getDateRangeValue(part: 'from' | 'to'): Date | null;
465
480
  protected getNumberRangeValue(part: 'from' | 'to'): number | null;
@@ -10,6 +10,7 @@ interface OptionItem {
10
10
  [key: string]: unknown;
11
11
  }
12
12
  declare class Tabs {
13
+ private readonly transloco;
13
14
  options: _angular_core.InputSignal<OptionItem[]>;
14
15
  optionLabel: _angular_core.InputSignal<string>;
15
16
  optionValue: _angular_core.InputSignal<string>;
@@ -1,6 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { OnInit, OnChanges, SimpleChanges } from '@angular/core';
3
- import { ControlValueAccessor, Validators, NgControl } from '@angular/forms';
3
+ import { ControlValueAccessor, ValidatorFn, NgControl } from '@angular/forms';
4
4
  import { isInvalid } from '@masterteam/components';
5
5
  import { MTIcon } from '@masterteam/icons';
6
6
 
@@ -18,7 +18,7 @@ declare class TextField implements ControlValueAccessor, OnInit, OnChanges {
18
18
  readonly icon: _angular_core.InputSignal<MTIcon | undefined>;
19
19
  readonly iconPosition: _angular_core.InputSignal<"start" | "end">;
20
20
  styleClass: string;
21
- requiredValidator: typeof Validators.required;
21
+ requiredValidator: ValidatorFn;
22
22
  value: _angular_core.WritableSignal<string | null>;
23
23
  disabled: _angular_core.WritableSignal<boolean>;
24
24
  passwordVisible: _angular_core.WritableSignal<boolean>;
@@ -30,7 +30,8 @@ declare class TextField implements ControlValueAccessor, OnInit, OnChanges {
30
30
  hasEndActions: _angular_core.Signal<boolean>;
31
31
  hasTwoEndActions: _angular_core.Signal<boolean>;
32
32
  passwordToggleIcon: _angular_core.Signal<MTIcon>;
33
- passwordToggleLabel: _angular_core.Signal<"Hide password" | "Show password">;
33
+ private readonly transloco;
34
+ passwordToggleLabel: _angular_core.Signal<string>;
34
35
  alphaNum: RegExp;
35
36
  onTouched: () => void;
36
37
  onModelChange: (value: any) => void;
@@ -5,6 +5,7 @@ import { HttpContext, HttpClient } from '@angular/common/http';
5
5
  import { DomSanitizer, SafeUrl } from '@angular/platform-browser';
6
6
 
7
7
  declare class UploadField implements ControlValueAccessor {
8
+ private readonly transloco;
8
9
  readonly label: _angular_core.InputSignal<string | undefined>;
9
10
  readonly title: _angular_core.InputSignal<string>;
10
11
  readonly description: _angular_core.InputSignal<string>;
@@ -33,7 +33,6 @@ declare class UserSearchField implements ControlValueAccessor, OnInit {
33
33
  filteredUsers: _angular_core.WritableSignal<User[]>;
34
34
  private searchTerms;
35
35
  private readonly translocoService;
36
- translatedPlaceholder: _angular_core.Signal<string>;
37
36
  readonly autocomplete: _angular_core.Signal<AutoComplete | undefined>;
38
37
  onTouched: () => void;
39
38
  onModelChange: (value: any) => void;