@lucca-front/ng 22.0.5 → 22.1.0-rc.2

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 (76) hide show
  1. package/fesm2022/lucca-front-ng-activity-feed.mjs +12 -9
  2. package/fesm2022/lucca-front-ng-activity-feed.mjs.map +1 -1
  3. package/fesm2022/lucca-front-ng-approbation-inbox.mjs +1 -1
  4. package/fesm2022/lucca-front-ng-approbation-inbox.mjs.map +1 -1
  5. package/fesm2022/lucca-front-ng-callout.mjs +1 -1
  6. package/fesm2022/lucca-front-ng-callout.mjs.map +1 -1
  7. package/fesm2022/lucca-front-ng-core-select.mjs +236 -8
  8. package/fesm2022/lucca-front-ng-core-select.mjs.map +1 -1
  9. package/fesm2022/lucca-front-ng-core.mjs +5 -1
  10. package/fesm2022/lucca-front-ng-core.mjs.map +1 -1
  11. package/fesm2022/lucca-front-ng-data-table.mjs +2 -2
  12. package/fesm2022/lucca-front-ng-data-table.mjs.map +1 -1
  13. package/fesm2022/lucca-front-ng-date2.mjs +217 -159
  14. package/fesm2022/lucca-front-ng-date2.mjs.map +1 -1
  15. package/fesm2022/lucca-front-ng-dialog.mjs +2 -2
  16. package/fesm2022/lucca-front-ng-dialog.mjs.map +1 -1
  17. package/fesm2022/lucca-front-ng-fancy-box.mjs +47 -24
  18. package/fesm2022/lucca-front-ng-fancy-box.mjs.map +1 -1
  19. package/fesm2022/lucca-front-ng-file-upload.mjs +1 -1
  20. package/fesm2022/lucca-front-ng-file-upload.mjs.map +1 -1
  21. package/fesm2022/lucca-front-ng-filter-pills-core.mjs +55 -0
  22. package/fesm2022/lucca-front-ng-filter-pills-core.mjs.map +1 -0
  23. package/fesm2022/lucca-front-ng-filter-pills.mjs +74 -69
  24. package/fesm2022/lucca-front-ng-filter-pills.mjs.map +1 -1
  25. package/fesm2022/lucca-front-ng-form-field.mjs +37 -5
  26. package/fesm2022/lucca-front-ng-form-field.mjs.map +1 -1
  27. package/fesm2022/lucca-front-ng-form-label.mjs +1 -1
  28. package/fesm2022/lucca-front-ng-form-label.mjs.map +1 -1
  29. package/fesm2022/lucca-front-ng-form.mjs +42 -5
  30. package/fesm2022/lucca-front-ng-form.mjs.map +1 -1
  31. package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs +3 -3
  32. package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs.map +1 -1
  33. package/fesm2022/lucca-front-ng-forms.mjs +12 -6
  34. package/fesm2022/lucca-front-ng-forms.mjs.map +1 -1
  35. package/fesm2022/lucca-front-ng-highlight-data.mjs +6 -7
  36. package/fesm2022/lucca-front-ng-highlight-data.mjs.map +1 -1
  37. package/fesm2022/lucca-front-ng-impersonation.mjs +19 -4
  38. package/fesm2022/lucca-front-ng-impersonation.mjs.map +1 -1
  39. package/fesm2022/lucca-front-ng-link.mjs +8 -3
  40. package/fesm2022/lucca-front-ng-link.mjs.map +1 -1
  41. package/fesm2022/lucca-front-ng-markdown.mjs +51 -0
  42. package/fesm2022/lucca-front-ng-markdown.mjs.map +1 -0
  43. package/fesm2022/lucca-front-ng-multi-select.mjs +147 -43
  44. package/fesm2022/lucca-front-ng-multi-select.mjs.map +1 -1
  45. package/fesm2022/lucca-front-ng-popover2.mjs +11 -5
  46. package/fesm2022/lucca-front-ng-popover2.mjs.map +1 -1
  47. package/fesm2022/lucca-front-ng-priority-levels.mjs +128 -0
  48. package/fesm2022/lucca-front-ng-priority-levels.mjs.map +1 -0
  49. package/fesm2022/lucca-front-ng-safe-content.mjs +5 -2
  50. package/fesm2022/lucca-front-ng-safe-content.mjs.map +1 -1
  51. package/fesm2022/lucca-front-ng-simple-select.mjs +63 -12
  52. package/fesm2022/lucca-front-ng-simple-select.mjs.map +1 -1
  53. package/fesm2022/lucca-front-ng-software-icon-wrapper.mjs +1 -1
  54. package/fesm2022/lucca-front-ng-software-icon-wrapper.mjs.map +1 -1
  55. package/fesm2022/lucca-front-ng-user-popover.mjs +3 -2
  56. package/fesm2022/lucca-front-ng-user-popover.mjs.map +1 -1
  57. package/package.json +17 -4
  58. package/src/components/cdk/_overlay.scss +3 -1
  59. package/types/lucca-front-ng-activity-feed.d.ts +3 -1
  60. package/types/lucca-front-ng-core-select.d.ts +90 -7
  61. package/types/lucca-front-ng-core.d.ts +3 -1
  62. package/types/lucca-front-ng-date2.d.ts +31 -5
  63. package/types/lucca-front-ng-fancy-box.d.ts +29 -12
  64. package/types/lucca-front-ng-filter-pills-core.d.ts +69 -0
  65. package/types/lucca-front-ng-filter-pills.d.ts +28 -55
  66. package/types/lucca-front-ng-form-field.d.ts +12 -4
  67. package/types/lucca-front-ng-form.d.ts +7 -1
  68. package/types/lucca-front-ng-forms.d.ts +7 -2
  69. package/types/lucca-front-ng-highlight-data.d.ts +1 -2
  70. package/types/lucca-front-ng-impersonation.d.ts +14 -1
  71. package/types/lucca-front-ng-link.d.ts +5 -1
  72. package/types/lucca-front-ng-markdown.d.ts +24 -0
  73. package/types/lucca-front-ng-multi-select.d.ts +10 -1
  74. package/types/lucca-front-ng-popover2.d.ts +7 -1
  75. package/types/lucca-front-ng-priority-levels.d.ts +44 -0
  76. package/types/lucca-front-ng-simple-select.d.ts +4 -0
@@ -2,27 +2,36 @@ import * as _angular_core from '@angular/core';
2
2
 
3
3
  declare class FancyBoxComponent {
4
4
  #private;
5
+ readonly domain = "https://cdn.lucca.fr";
6
+ readonly path = "/transverse/prisme/visuals/fancy-box/";
7
+ readonly extension = ".svg";
5
8
  /**
6
- * foreground image (URL)
9
+ * @deprecated use `foregroundStartEnd` instead
7
10
  */
8
11
  readonly foreground: _angular_core.InputSignal<string>;
9
12
  /**
10
- * Background left image (URL)
13
+ * @deprecated use `backgroundEndStart` instead
11
14
  */
12
15
  readonly backgroundLeft: _angular_core.InputSignal<string>;
13
16
  /**
14
- * Background right image (URL)
17
+ * @deprecated use `backgroundStartEnd` instead
15
18
  */
16
19
  readonly backgroundRight: _angular_core.InputSignal<string>;
17
- /**
18
- * Which size should the callout be? Defaults to small
19
- */
20
+ readonly foregroundStartEnd: _angular_core.InputSignal<string>;
21
+ readonly foregroundEndStart: _angular_core.InputSignal<string>;
22
+ readonly backgroundEndStart: _angular_core.InputSignal<string>;
23
+ readonly backgroundStartEnd: _angular_core.InputSignal<string>;
20
24
  readonly size: _angular_core.InputSignal<"S">;
21
- readonly foregroundStyle: _angular_core.Signal<string>;
22
- readonly backgroundLeftStyle: _angular_core.Signal<string>;
23
- readonly backgroundRightStyle: _angular_core.Signal<string>;
25
+ readonly palette: _angular_core.InputSignal<string>;
26
+ readonly paletteClass: _angular_core.Signal<{
27
+ [x: string]: boolean;
28
+ }>;
29
+ readonly backgroundEndStartUrl: _angular_core.Signal<string>;
30
+ readonly backgroundStartEndUrl: _angular_core.Signal<string>;
31
+ readonly foregroundStartEndUrl: _angular_core.Signal<string>;
32
+ readonly foregroundEndStartUrl: _angular_core.Signal<string>;
24
33
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FancyBoxComponent, never>;
25
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FancyBoxComponent, "lu-fancy-box", never, { "foreground": { "alias": "foreground"; "required": false; "isSignal": true; }; "backgroundLeft": { "alias": "backgroundLeft"; "required": true; "isSignal": true; }; "backgroundRight": { "alias": "backgroundRight"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
34
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FancyBoxComponent, "lu-fancy-box", never, { "foreground": { "alias": "foreground"; "required": false; "isSignal": true; }; "backgroundLeft": { "alias": "backgroundLeft"; "required": false; "isSignal": true; }; "backgroundRight": { "alias": "backgroundRight"; "required": false; "isSignal": true; }; "foregroundStartEnd": { "alias": "foregroundStartEnd"; "required": false; "isSignal": true; }; "foregroundEndStart": { "alias": "foregroundEndStart"; "required": false; "isSignal": true; }; "backgroundEndStart": { "alias": "backgroundEndStart"; "required": false; "isSignal": true; }; "backgroundStartEnd": { "alias": "backgroundStartEnd"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "palette": { "alias": "palette"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
26
35
  }
27
36
 
28
37
  /**
@@ -30,6 +39,14 @@ declare class FancyBoxComponent {
30
39
  */
31
40
  declare const FANCY_BOX_SIZE: readonly ["S"];
32
41
  type FancyBoxSize = (typeof FANCY_BOX_SIZE)[number];
42
+ declare const FANCY_BOX_BACKGROUND_END_START: readonly ["bubbles", "plant"];
43
+ type FancyBoxBackgroundEndStart = (typeof FANCY_BOX_BACKGROUND_END_START)[number];
44
+ declare const FANCY_BOX_BACKGROUND_START_END: readonly ["bubbles", "candies"];
45
+ type FancyBoxBackgroundStartEnd = (typeof FANCY_BOX_BACKGROUND_START_END)[number];
46
+ declare const FANCY_BOX_FOREGROUND_END_START: readonly ["clips"];
47
+ type FancyBoxForegroundEndStart = (typeof FANCY_BOX_FOREGROUND_END_START)[number];
48
+ declare const FANCY_BOX_FOREGROUND_START_END: readonly ["pizza"];
49
+ type FancyBoxForegroundStartEnd = (typeof FANCY_BOX_FOREGROUND_START_END)[number];
33
50
 
34
- export { FANCY_BOX_SIZE, FancyBoxComponent };
35
- export type { FancyBoxSize };
51
+ export { FANCY_BOX_BACKGROUND_END_START, FANCY_BOX_BACKGROUND_START_END, FANCY_BOX_FOREGROUND_END_START, FANCY_BOX_FOREGROUND_START_END, FANCY_BOX_SIZE, FancyBoxComponent };
52
+ export type { FancyBoxBackgroundEndStart, FancyBoxBackgroundStartEnd, FancyBoxForegroundEndStart, FancyBoxForegroundStartEnd, FancyBoxSize };
@@ -0,0 +1,69 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Signal, TemplateRef, WritableSignal, InjectionToken } from '@angular/core';
3
+ import { LuccaIcon } from '@lucca-front/icons';
4
+
5
+ type FilterPillLayout = 'checkable';
6
+ interface FilterPillInputComponent {
7
+ parentInput?: FilterPillInputComponent | null;
8
+ isFilterPillEmpty: Signal<boolean>;
9
+ isFilterPillClearable: Signal<boolean>;
10
+ filterPillLayout?: Signal<FilterPillLayout>;
11
+ hideCombobox?: Signal<boolean>;
12
+ showColon?: Signal<boolean>;
13
+ filterPillDisabled?: Signal<boolean>;
14
+ clearFilterPillValue(): void;
15
+ registerFilterPillClosePopover(closeFn: () => void): void;
16
+ registerFilterPillUpdatePosition?(updateFn: () => void): void;
17
+ enableFilterPillMode?(): void;
18
+ onFilterPillClosed?(): void;
19
+ onFilterPillOpened?(): void;
20
+ onFilterPillClick?(): void;
21
+ getDefaultFilterPillIcon?(): LuccaIcon;
22
+ }
23
+
24
+ /**
25
+ * Contract exposed by `lu-filter-pill` to the inputs and directives it hosts.
26
+ * Declared here rather than typing the token with `FilterPillComponent` so this entry point
27
+ * stays independent from the components one, which depends on inputs such as `lu-multi-select`.
28
+ */
29
+ interface FilterPillHostComponent {
30
+ /** Template rendering the input's value inside the pill, set by `luFilterPillDisplayer`. */
31
+ pillTpl: TemplateRef<unknown>;
32
+ /** Template overriding the pill's label, set by `luFilterPillLabel`. */
33
+ readonly customLabelTpl: WritableSignal<TemplateRef<unknown> | null>;
34
+ /** Lets an input register itself when it's too deep to be picked up by content query. */
35
+ registerInput(input: FilterPillInputComponent): void;
36
+ }
37
+
38
+ declare const FILTER_PILL_INPUT_COMPONENT: InjectionToken<FilterPillInputComponent>;
39
+ declare const FILTER_PILL_HOST_COMPONENT: InjectionToken<FilterPillHostComponent>;
40
+
41
+ interface FilterPillDisplayerContext {
42
+ label: string;
43
+ placeholder: string;
44
+ isEmpty: boolean;
45
+ }
46
+ declare class FilterPillDisplayerDirective {
47
+ #private;
48
+ constructor();
49
+ static ngTemplateContextGuard(_dir: FilterPillDisplayerDirective, _ctx: unknown): _ctx is FilterPillDisplayerContext;
50
+ static ɵfac: i0.ɵɵFactoryDeclaration<FilterPillDisplayerDirective, never>;
51
+ static ɵdir: i0.ɵɵDirectiveDeclaration<FilterPillDisplayerDirective, "[luFilterPillDisplayer]", never, {}, {}, never, never, true, never>;
52
+ }
53
+
54
+ interface FilterPillLabelContext {
55
+ label: string;
56
+ placeholder: string;
57
+ isEmpty: boolean;
58
+ colon: string;
59
+ }
60
+ declare class FilterPillLabelDirective {
61
+ #private;
62
+ constructor();
63
+ static ngTemplateContextGuard(_dir: FilterPillLabelDirective, _ctx: unknown): _ctx is FilterPillLabelContext;
64
+ static ɵfac: i0.ɵɵFactoryDeclaration<FilterPillLabelDirective, never>;
65
+ static ɵdir: i0.ɵɵDirectiveDeclaration<FilterPillLabelDirective, "[luFilterPillLabel]", never, {}, {}, never, never, true, never>;
66
+ }
67
+
68
+ export { FILTER_PILL_HOST_COMPONENT, FILTER_PILL_INPUT_COMPONENT, FilterPillDisplayerDirective, FilterPillLabelDirective };
69
+ export type { FilterPillHostComponent, FilterPillInputComponent, FilterPillLayout };
@@ -1,61 +1,15 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Signal, InjectionToken, ElementRef, TemplateRef } from '@angular/core';
2
+ import { ElementRef, TemplateRef, InjectionToken } from '@angular/core';
3
3
  import * as _lucca_front_ng_filter_pills from '@lucca-front/ng/filter-pills';
4
4
  import { ConnectionPositionPair } from '@angular/cdk/overlay';
5
5
  import { LuccaIcon } from '@lucca-front/icons';
6
6
  import { PopoverDirective } from '@lucca-front/ng/popover2';
7
+ import { FilterPillHostComponent, FilterPillInputComponent } from '@lucca-front/ng/filter-pills/core';
8
+ export * from '@lucca-front/ng/filter-pills/core';
9
+ import { LuOptionComparer as LuOptionComparer$1 } from '@lucca-front/ng/core-select';
7
10
  import { LuTranslation } from '@lucca-front/ng/core';
8
11
 
9
- type FilterPillLayout = 'checkable';
10
- interface FilterPillInputComponent {
11
- parentInput?: FilterPillInputComponent | null;
12
- isFilterPillEmpty: Signal<boolean>;
13
- isFilterPillClearable: Signal<boolean>;
14
- filterPillLayout?: Signal<FilterPillLayout>;
15
- hideCombobox?: Signal<boolean>;
16
- showColon?: Signal<boolean>;
17
- filterPillDisabled?: Signal<boolean>;
18
- clearFilterPillValue(): void;
19
- registerFilterPillClosePopover(closeFn: () => void): void;
20
- registerFilterPillUpdatePosition?(updateFn: () => void): void;
21
- enableFilterPillMode?(): void;
22
- onFilterPillClosed?(): void;
23
- onFilterPillOpened?(): void;
24
- onFilterPillClick?(): void;
25
- getDefaultFilterPillIcon?(): LuccaIcon;
26
- }
27
-
28
- declare const FILTER_PILL_INPUT_COMPONENT: InjectionToken<FilterPillInputComponent>;
29
- declare const FILTER_PILL_HOST_COMPONENT: InjectionToken<FilterPillComponent>;
30
-
31
- interface FilterPillDisplayerContext {
32
- label: string;
33
- placeholder: string;
34
- isEmpty: boolean;
35
- }
36
- declare class FilterPillDisplayerDirective {
37
- #private;
38
- constructor();
39
- static ngTemplateContextGuard(_dir: FilterPillDisplayerDirective, _ctx: unknown): _ctx is FilterPillDisplayerContext;
40
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterPillDisplayerDirective, never>;
41
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FilterPillDisplayerDirective, "[luFilterPillDisplayer]", never, {}, {}, never, never, true, never>;
42
- }
43
-
44
- interface FilterPillLabelContext {
45
- label: string;
46
- placeholder: string;
47
- isEmpty: boolean;
48
- colon: string;
49
- }
50
- declare class FilterPillLabelDirective {
51
- #private;
52
- constructor();
53
- static ngTemplateContextGuard(_dir: FilterPillLabelDirective, _ctx: unknown): _ctx is FilterPillLabelContext;
54
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterPillLabelDirective, never>;
55
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<FilterPillLabelDirective, "[luFilterPillLabel]", never, {}, {}, never, never, true, never>;
56
- }
57
-
58
- declare class FilterPillComponent {
12
+ declare class FilterPillComponent implements FilterPillHostComponent {
59
13
  #private;
60
14
  readonly intl: _angular_core.InputSignalWithTransform<_lucca_front_ng_filter_pills.LuFilterPillsLabel, Partial<_lucca_front_ng_filter_pills.LuFilterPillsLabel>>;
61
15
  readonly elementRef: ElementRef<any>;
@@ -70,6 +24,12 @@ declare class FilterPillComponent {
70
24
  readonly customLabelTpl: _angular_core.WritableSignal<TemplateRef<unknown>>;
71
25
  readonly name: _angular_core.InputSignal<string>;
72
26
  readonly optional: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
27
+ /** Groups the pill with the ones sharing the same value in the filter bar's optional filters list. Empty means no group. */
28
+ readonly grouping: _angular_core.InputSignal<string>;
29
+ /** Renders the pill as an icon-only button, its label being carried by a tooltip. */
30
+ readonly iconOnly: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
31
+ /** Catches the click that closes the popover instead of letting it through to the page. */
32
+ readonly backdrop: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
73
33
  readonly disabled: _angular_core.Signal<boolean>;
74
34
  get isHiddenClass(): boolean;
75
35
  readonly displayed: _angular_core.ModelSignal<boolean>;
@@ -99,7 +59,7 @@ declare class FilterPillComponent {
99
59
  clear(): void;
100
60
  registerInput(input: FilterPillInputComponent): void;
101
61
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterPillComponent, never>;
102
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterPillComponent, "lu-filter-pill", never, { "intl": { "alias": "intl"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "optional": { "alias": "optional"; "required": false; "isSignal": true; }; "displayed": { "alias": "displayed"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "placeholderOverride": { "alias": "placeholder"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, { "displayed": "displayedChange"; }, ["childInputComponentRef"], ["*"], true, never>;
62
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterPillComponent, "lu-filter-pill", never, { "intl": { "alias": "intl"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "optional": { "alias": "optional"; "required": false; "isSignal": true; }; "grouping": { "alias": "grouping"; "required": false; "isSignal": true; }; "iconOnly": { "alias": "iconOnly"; "required": false; "isSignal": true; }; "backdrop": { "alias": "backdrop"; "required": false; "isSignal": true; }; "displayed": { "alias": "displayed"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "placeholderOverride": { "alias": "placeholder"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, { "displayed": "displayedChange"; }, ["childInputComponentRef"], ["*"], true, never>;
103
63
  }
104
64
 
105
65
  declare class FilterBarComponent {
@@ -112,9 +72,22 @@ declare class FilterBarComponent {
112
72
  readonly autoApplyAnnouncementId: string;
113
73
  readonly addonBefore: _angular_core.WritableSignal<TemplateRef<unknown>>;
114
74
  readonly addonAfter: _angular_core.WritableSignal<TemplateRef<unknown>>;
115
- popoverPositions: ConnectionPositionPair[];
116
75
  readonly pills: _angular_core.Signal<readonly FilterPillComponent[]>;
117
76
  readonly optionalPills: _angular_core.Signal<FilterPillComponent[]>;
77
+ protected readonly displayedOptionalPills: _angular_core.Signal<FilterPillComponent[]>;
78
+ /** Mirrors the search clue of the optional filters select, which filters its options on its own. */
79
+ protected readonly clue: _angular_core.WritableSignal<string>;
80
+ /**
81
+ * The panel builds a group out of each run of consecutive options, so the pills of a same group
82
+ * have to be listed together. Groups keep the order of their first pill, ungrouped pills come first.
83
+ */
84
+ protected readonly optionalPillOptions: _angular_core.Signal<FilterPillComponent[]>;
85
+ /** Optional pills are identified by their instance, they have no serializable value to compare. */
86
+ protected readonly optionalPillComparer: LuOptionComparer$1<FilterPillComponent>;
87
+ private readonly optionalPillsSelect;
88
+ private readonly optionalPillsGroupTpl;
89
+ constructor();
90
+ protected displayOptionalPills(pills: FilterPillComponent[]): void;
118
91
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterBarComponent, never>;
119
92
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterBarComponent, "lu-filter-bar", never, { "intl": { "alias": "intl"; "required": false; "isSignal": true; }; "manualApply": { "alias": "manualApply"; "required": false; "isSignal": true; }; }, {}, ["pills"], ["*"], true, never>;
120
93
  }
@@ -180,5 +153,5 @@ interface LuFilterPillsLabel {
180
153
  }
181
154
  declare const luFilterPillsTranslations: LuTranslation<LuFilterPillsLabel>;
182
155
 
183
- export { FILTER_PILL_HOST_COMPONENT, FILTER_PILL_INPUT_COMPONENT, FilterBarComponent, FilterPillAddonAfterDirective, FilterPillAddonBeforeDirective, FilterPillComponent, FilterPillDisplayerDirective, FilterPillLabelDirective, FilterViewSelectorComponent, LU_FILTER_BAR_INSTANCE, LU_FILTER_PILLS_TRANSLATIONS, filterViewDefaultOptionComparer, filterViewDefaultOptionKey, luFilterPillsTranslations };
184
- export type { FilterPillInputComponent, FilterPillLayout, LuFilterPillsLabel, LuOptionComparer };
156
+ export { FilterBarComponent, FilterPillAddonAfterDirective, FilterPillAddonBeforeDirective, FilterPillComponent, FilterViewSelectorComponent, LU_FILTER_BAR_INSTANCE, LU_FILTER_PILLS_TRANSLATIONS, filterViewDefaultOptionComparer, filterViewDefaultOptionKey, luFilterPillsTranslations };
157
+ export type { LuFilterPillsLabel, LuOptionComparer };
@@ -1,6 +1,6 @@
1
1
  import * as _lucca_front_ng_form from '@lucca-front/ng/form';
2
2
  import * as _angular_core from '@angular/core';
3
- import { OnInit, ElementRef, OnDestroy, DoCheck, TemplateRef, InjectionToken } from '@angular/core';
3
+ import { OnInit, OnDestroy, ElementRef, DoCheck, TemplateRef, InjectionToken } from '@angular/core';
4
4
  import * as _lucca_front_ng_form_field from '@lucca-front/ng/form-field';
5
5
  import { RequiredValidator, NgControl, AbstractControl } from '@angular/forms';
6
6
  import { FormField } from '@angular/forms/signals';
@@ -14,12 +14,12 @@ type FormFieldSize = (typeof FORM_FIELD_SIZE)[number];
14
14
  /**
15
15
  * Available FormFieldComponent types
16
16
  */
17
- declare const FORM_FIELD_WIDTH: readonly [20, 30, 40, 50, 60];
17
+ declare const FORM_FIELD_WIDTH: readonly [10, 20, 30, 40, 50, 60];
18
18
  type FormFieldWidth = (typeof FORM_FIELD_WIDTH)[number];
19
19
  declare const FORM_FIELD_LAYOUT: readonly ["default", "checkable", "fieldset"];
20
20
  type FormFieldLayout = (typeof FORM_FIELD_LAYOUT)[number];
21
21
 
22
- declare class InputDirective implements OnInit {
22
+ declare class InputDirective implements OnInit, OnDestroy {
23
23
  #private;
24
24
  readonly host: ElementRef<HTMLElement>;
25
25
  readonly formFieldRef: _lucca_front_ng_form_field.FormFieldComponent;
@@ -39,6 +39,7 @@ declare class InputDirective implements OnInit {
39
39
  readonly describedBy: _angular_core.InputSignal<string>;
40
40
  constructor();
41
41
  ngOnInit(): void;
42
+ ngOnDestroy(): void;
42
43
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputDirective, never>;
43
44
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<InputDirective, "[luInput]", never, { "standalone": { "alias": "luInputStandalone"; "required": false; "isSignal": true; }; "labelledBy": { "alias": "luInputLabelledBy"; "required": false; "isSignal": true; }; "describedBy": { "alias": "luInputDescribedBy"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
44
45
  }
@@ -74,7 +75,7 @@ declare class FormFieldComponent implements OnDestroy, DoCheck {
74
75
  readonly AI: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
75
76
  readonly iconAItooltip: _angular_core.InputSignal<string>;
76
77
  readonly iconAIalt: _angular_core.InputSignal<string>;
77
- readonly width: _angular_core.InputSignalWithTransform<20 | 30 | 40 | 50 | 60, 20 | 30 | 40 | 50 | 60 | "null" | "20" | "30" | "40" | "50" | "60">;
78
+ readonly width: _angular_core.InputSignalWithTransform<10 | 20 | 30 | 40 | 50 | 60, 10 | 20 | 30 | 40 | 50 | 60 | "null" | "10" | "20" | "30" | "40" | "50" | "60">;
78
79
  invalidStatus: _angular_core.Signal<boolean>;
79
80
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true" | "null">;
80
81
  readonly inlineMessage: _angular_core.InputSignal<PortalContent>;
@@ -102,6 +103,13 @@ declare class FormFieldComponent implements OnDestroy, DoCheck {
102
103
  readonly presentationDisplayTpl: _angular_core.WritableSignal<TemplateRef<unknown>>;
103
104
  readonly hasInlineMessage: _angular_core.Signal<boolean>;
104
105
  addInput(input: InputDirective): void;
106
+ /**
107
+ * Unregisters an input that's being destroyed — e.g. one side of an `@if`/`@else` toggling which
108
+ * element carries `luInput` (a text field swapping for a button below a breakpoint, say). Without
109
+ * this, the detached element lingers in `#inputs` forever: `prepareInput` keeps reassigning it a
110
+ * fresh id on every future change, and each one gets added to `aria-labelledby` and never removed.
111
+ */
112
+ removeInput(input: InputDirective): void;
105
113
  get inputs(): InputDirective[];
106
114
  readonly id: _angular_core.WritableSignal<string>;
107
115
  readonly ready$: BehaviorSubject<boolean>;
@@ -3,11 +3,17 @@ import { InjectionToken } from '@angular/core';
3
3
  import { LuDialogRef } from '@lucca-front/ng/dialog';
4
4
 
5
5
  declare class FormComponent {
6
+ #private;
6
7
  protected readonly dialogRef: LuDialogRef<any, any>;
7
8
  readonly maxWidth: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
8
9
  readonly presentation: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
10
+ /**
11
+ * When enabled, submitting an invalid form moves focus to the first invalid field. Disabled by default.
12
+ */
13
+ readonly focusInvalidOnSubmit: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
14
+ protected onSubmit(): void;
9
15
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FormComponent, never>;
10
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormComponent, "form[luForm]", never, { "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "presentation": { "alias": "presentation"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
16
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FormComponent, "form[luForm]", never, { "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "presentation": { "alias": "presentation"; "required": false; "isSignal": true; }; "focusInvalidOnSubmit": { "alias": "focusInvalidOnSubmit"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
11
17
  }
12
18
 
13
19
  declare const LU_FORM_INSTANCE: InjectionToken<FormComponent>;
@@ -2,7 +2,7 @@ import * as _angular_core from '@angular/core';
2
2
  import { OnDestroy, OnInit, Signal, WritableSignal, AfterViewInit, ElementRef, InjectionToken } from '@angular/core';
3
3
  import * as _angular_forms from '@angular/forms';
4
4
  import { NgModel, FormControlDirective, FormControlName, NgControl, FormControl, ControlValueAccessor, ValidatorFn } from '@angular/forms';
5
- import { FilterPillInputComponent, FilterPillLayout } from '@lucca-front/ng/filter-pills';
5
+ import { FilterPillInputComponent, FilterPillLayout } from '@lucca-front/ng/filter-pills/core';
6
6
  import { FormFieldComponent } from '@lucca-front/ng/form-field';
7
7
  import * as _lucca_front_ng_forms from '@lucca-front/ng/forms';
8
8
  import { ConnectionPositionPair } from '@angular/cdk/overlay';
@@ -285,15 +285,20 @@ declare class TextInputComponent {
285
285
  */
286
286
  readonly searchIcon: _angular_core.InputSignal<LuccaIcon>;
287
287
  readonly type: _angular_core.InputSignal<TextFieldType>;
288
+ /**
289
+ * Width of the input itself, using the same scale as the form field width
290
+ */
291
+ readonly width: _angular_core.InputSignalWithTransform<10 | 20 | 30 | 40 | 50 | 60, 10 | 20 | 30 | 40 | 50 | 60 | "null" | "10" | "20" | "30" | "40" | "50" | "60">;
288
292
  readonly blur: _angular_core.OutputEmitterRef<FocusEvent>;
289
293
  protected readonly showPassword: _angular_core.WritableSignal<boolean>;
290
294
  protected readonly typeRef: _angular_core.Signal<TextFieldType>;
291
295
  protected readonly hasTogglePasswordVisibilityIcon: _angular_core.Signal<boolean>;
296
+ protected readonly widthClass: _angular_core.Signal<string>;
292
297
  protected hasValue(): boolean;
293
298
  clearValue(): void;
294
299
  togglePasswordVisibility(): void;
295
300
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextInputComponent, never>;
296
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextInputComponent, "lu-text-input", never, { "intl": { "alias": "intl"; "required": false; "isSignal": true; }; "mask": { "alias": "mask"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "hasClearer": { "alias": "hasClearer"; "required": false; "isSignal": true; }; "hasSearchIcon": { "alias": "hasSearchIcon"; "required": false; "isSignal": true; }; "valueAlignRight": { "alias": "valueAlignRight"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "minlength": { "alias": "minlength"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "searchIcon": { "alias": "searchIcon"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; }, { "blur": "blur"; }, never, never, true, [{ directive: typeof NoopValueAccessorDirective; inputs: {}; outputs: {}; }]>;
301
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextInputComponent, "lu-text-input", never, { "intl": { "alias": "intl"; "required": false; "isSignal": true; }; "mask": { "alias": "mask"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "hasClearer": { "alias": "hasClearer"; "required": false; "isSignal": true; }; "hasSearchIcon": { "alias": "hasSearchIcon"; "required": false; "isSignal": true; }; "valueAlignRight": { "alias": "valueAlignRight"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "minlength": { "alias": "minlength"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "searchIcon": { "alias": "searchIcon"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; }, { "blur": "blur"; }, never, never, true, [{ directive: typeof NoopValueAccessorDirective; inputs: {}; outputs: {}; }]>;
297
302
  }
298
303
 
299
304
  declare class TextareaInputComponent implements OnInit {
@@ -38,7 +38,7 @@ declare class HighlightDataComponent {
38
38
  */
39
39
  readonly theme: _angular_core.InputSignal<"white" | "light" | "dark">;
40
40
  /**
41
- * Apply product name to illustration URL and CSS component palette
41
+ * Apply a palette to the component and its bubble colors
42
42
  * This specific palette must be set up on config.scss
43
43
  */
44
44
  readonly palette: _angular_core.InputSignal<string>;
@@ -61,7 +61,6 @@ declare class HighlightDataComponent {
61
61
  readonly nested: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
62
62
  readonly illustrationSrc: _angular_core.Signal<string>;
63
63
  readonly bubbleSrc: _angular_core.Signal<string>;
64
- readonly bubbleTheme: _angular_core.Signal<"light" | "dark">;
65
64
  constructor();
66
65
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<HighlightDataComponent, never>;
67
66
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<HighlightDataComponent, "lu-highlight-data", never, { "heading": { "alias": "heading"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "subText": { "alias": "subText"; "required": false; "isSignal": true; }; "bubble": { "alias": "bubble"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "palette": { "alias": "palette"; "required": false; "isSignal": true; }; "illustration": { "alias": "illustration"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "valueFirst": { "alias": "valueFirst"; "required": false; "isSignal": true; }; "nested": { "alias": "nested"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
@@ -16,6 +16,19 @@ declare class ImpersonationComponent {
16
16
  readonly popoverRef: _angular_core.Signal<PopoverDirective>;
17
17
  readonly selectedUser: _angular_core.ModelSignal<ILuUser>;
18
18
  readonly enableFormerEmployees: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
19
+ /**
20
+ * Restricts the users to the ones reachable through these operations, scoped by `appInstanceId`.
21
+ */
22
+ readonly operationIds: _angular_core.InputSignal<readonly number[]>;
23
+ /**
24
+ * Restricts the users to the ones reachable through these unique operations.
25
+ * Takes precedence over `operationIds` / `appInstanceId`, which the API then ignores.
26
+ */
27
+ readonly uniqueOperationIds: _angular_core.InputSignal<readonly number[]>;
28
+ /**
29
+ * Application instance the `operationIds` are scoped to. Unused with `uniqueOperationIds`.
30
+ */
31
+ readonly appInstanceId: _angular_core.InputSignalWithTransform<number, number | `${number}` | "null">;
19
32
  readonly isNotMe: _angular_core.Signal<boolean>;
20
33
  readonly clear: _angular_core.OutputEmitterRef<void>;
21
34
  readonly popoverPositions: ConnectionPositionPair[];
@@ -23,7 +36,7 @@ declare class ImpersonationComponent {
23
36
  closePopover: () => void;
24
37
  updatePosition: () => void;
25
38
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ImpersonationComponent, never>;
26
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ImpersonationComponent, "lu-impersonation", never, { "intl": { "alias": "intl"; "required": false; "isSignal": true; }; "selectedUser": { "alias": "selectedUser"; "required": false; "isSignal": true; }; "enableFormerEmployees": { "alias": "enableFormerEmployees"; "required": false; "isSignal": true; }; }, { "selectedUser": "selectedUserChange"; "clear": "clear"; }, never, never, true, never>;
39
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ImpersonationComponent, "lu-impersonation", never, { "intl": { "alias": "intl"; "required": false; "isSignal": true; }; "selectedUser": { "alias": "selectedUser"; "required": false; "isSignal": true; }; "enableFormerEmployees": { "alias": "enableFormerEmployees"; "required": false; "isSignal": true; }; "operationIds": { "alias": "operationIds"; "required": false; "isSignal": true; }; "uniqueOperationIds": { "alias": "uniqueOperationIds"; "required": false; "isSignal": true; }; "appInstanceId": { "alias": "appInstanceId"; "required": false; "isSignal": true; }; }, { "selectedUser": "selectedUserChange"; "clear": "clear"; }, never, never, true, never>;
27
40
  }
28
41
 
29
42
  declare const LU_IMPERSONATION_TRANSLATIONS: InjectionToken<LuTranslation<LuImpersonationTranslations>>;
@@ -46,11 +46,15 @@ declare class LinkComponent {
46
46
  * External icon only visible on hover/focus
47
47
  */
48
48
  readonly hiddenIcon: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
49
+ /**
50
+ * Renders the link with the default text color instead of the link color
51
+ */
52
+ readonly neutral: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
49
53
  hrefBackup: string;
50
54
  constructor();
51
55
  redirect(): void;
52
56
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LinkComponent, never>;
53
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<LinkComponent, "a[luLink], button[luLink]", never, { "intl": { "alias": "intl"; "required": false; "isSignal": true; }; "luHref": { "alias": "href"; "required": false; "isSignal": true; }; "routerLinkCommands": { "alias": "luLink"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "decorationHover": { "alias": "decorationHover"; "required": false; "isSignal": true; }; "external": { "alias": "external"; "required": false; "isSignal": true; }; "hiddenIcon": { "alias": "hiddenIcon"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof LuRouterLink; inputs: { "preserveFragment": "preserveFragment"; "skipLocationChange": "skipLocationChange"; "replaceUrl": "replaceUrl"; "queryParams": "queryParams"; "fragment": "fragment"; "queryParamsHandling": "queryParamsHandling"; "state": "state"; "info": "info"; "relativeTo": "relativeTo"; }; outputs: {}; }]>;
57
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LinkComponent, "a[luLink], button[luLink]", never, { "intl": { "alias": "intl"; "required": false; "isSignal": true; }; "luHref": { "alias": "href"; "required": false; "isSignal": true; }; "routerLinkCommands": { "alias": "luLink"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "decorationHover": { "alias": "decorationHover"; "required": false; "isSignal": true; }; "external": { "alias": "external"; "required": false; "isSignal": true; }; "hiddenIcon": { "alias": "hiddenIcon"; "required": false; "isSignal": true; }; "neutral": { "alias": "neutral"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof LuRouterLink; inputs: { "preserveFragment": "preserveFragment"; "skipLocationChange": "skipLocationChange"; "replaceUrl": "replaceUrl"; "queryParams": "queryParams"; "fragment": "fragment"; "queryParamsHandling": "queryParamsHandling"; "state": "state"; "info": "info"; "relativeTo": "relativeTo"; }; outputs: {}; }]>;
54
58
  }
55
59
 
56
60
  declare const LU_LINK_INSTANCE: InjectionToken<boolean>;
@@ -0,0 +1,24 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ declare class MarkdownComponent {
4
+ readonly content: _angular_core.InputSignal<string>;
5
+ readonly headingLevel: _angular_core.InputSignalWithTransform<number, unknown>;
6
+ protected html: _angular_core.Signal<string>;
7
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MarkdownComponent, never>;
8
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MarkdownComponent, "lu-markdown", never, { "content": { "alias": "content"; "required": true; "isSignal": true; }; "headingLevel": { "alias": "headingLevel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
9
+ }
10
+
11
+ interface RenderMarkdownOptions {
12
+ /**
13
+ * Heading level used for the top-level markdown heading (`# Heading`), the following ones being nested from it.
14
+ * Set it to the level that keeps the document outline valid where the markdown is displayed: with `2`,
15
+ * `# Heading` renders a `<h2 class="pr-u-h1">`, keeping the heading semantics clean while preserving its style.
16
+ *
17
+ * @default 1
18
+ */
19
+ headingLevel?: number;
20
+ }
21
+ declare function renderMarkdown(content: string, { headingLevel }?: RenderMarkdownOptions): string;
22
+
23
+ export { MarkdownComponent, renderMarkdown };
24
+ export type { RenderMarkdownOptions };
@@ -8,6 +8,7 @@ import { LuPluralForms, LuTranslation } from '@lucca-front/ng/core';
8
8
  import * as rxjs from 'rxjs';
9
9
  import { Subject, BehaviorSubject } from 'rxjs';
10
10
  import { Overlay, OverlayPositionBuilder, ScrollStrategyOptions, OverlayConfig, ConnectedPosition } from '@angular/cdk/overlay';
11
+ import { LuDialogService } from '@lucca-front/ng/dialog';
11
12
  import * as i1 from '@lucca-front/ng/form-field';
12
13
  import { LuOptionComparer } from '@lucca-front/ng/option';
13
14
 
@@ -36,6 +37,7 @@ declare class LuMultiSelectPanelRefFactory {
36
37
  protected positionBuilder: OverlayPositionBuilder;
37
38
  protected scrollStrategies: ScrollStrategyOptions;
38
39
  protected parentInjector: Injector;
40
+ protected dialogService: LuDialogService;
39
41
  private selectLabelId;
40
42
  private selectId;
41
43
  buildPanelRef<T>(selectInput: LuMultiSelectInputComponent<T>, defaultOverlayConfigOverride?: OverlayConfig): LuMultiSelectPanelRef<T>;
@@ -216,6 +218,13 @@ declare class LuMultiSelectDisplayerInputDirective<T> implements OnInit {
216
218
  readonly context: ILuOptionContext<T[]>;
217
219
  readonly elementRef: ElementRef<HTMLInputElement>;
218
220
  readonly destroyRef: DestroyRef;
221
+ /**
222
+ * Below the `S` breakpoint the panel opens as a modal sheet carrying its own search input, so this
223
+ * element is only ever a trigger and the displayers render it as a `<button>`. Typing into it is
224
+ * impossible by then, and an `<input>` would make iOS raise the software keyboard on a field the
225
+ * sheet is about to cover.
226
+ */
227
+ get isButton(): boolean;
219
228
  get panelOpen(): boolean;
220
229
  get activeDescendant(): string;
221
230
  get controls(): string;
@@ -226,7 +235,7 @@ declare class LuMultiSelectDisplayerInputDirective<T> implements OnInit {
226
235
  constructor();
227
236
  ngOnInit(): void;
228
237
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LuMultiSelectDisplayerInputDirective<any>, never>;
229
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LuMultiSelectDisplayerInputDirective<any>, "[luMultiSelectDisplayerInput]", never, {}, {}, never, never, true, [{ directive: typeof i1.InputDirective; inputs: { "luInputLabelledBy": "luInputLabelledBy"; }; outputs: {}; }]>;
238
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LuMultiSelectDisplayerInputDirective<any>, "[luMultiSelectDisplayerInput]", ["luMultiSelectDisplayerInput"], {}, {}, never, never, true, [{ directive: typeof i1.InputDirective; inputs: { "luInputLabelledBy": "luInputLabelledBy"; }; outputs: {}; }]>;
230
239
  }
231
240
 
232
241
  declare class LuMultiDisplayerDirective<T> {
@@ -38,6 +38,12 @@ declare class PopoverDirective implements OnDestroy {
38
38
  * for placement purpose
39
39
  */
40
40
  readonly luPopoverAnchor: _angular_core.InputSignal<FlexibleConnectedPositionStrategyOrigin>;
41
+ /**
42
+ * Renders a transparent backdrop catching the outside click instead of letting it through to the page.
43
+ * Reserved for menu-like popovers (a filter dropdown, where the click that closes the panel shouldn't
44
+ * also hit what's underneath): a description popover must stay non-blocking, see #5012.
45
+ */
46
+ readonly luPopoverBackdrop: InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
41
47
  /**
42
48
  * Extra element(s) to treat as "inside" the popover for outside-pointer detection. Pointer events
43
49
  * originating from them won't close the popover. Useful when an external control opens the popover
@@ -76,7 +82,7 @@ declare class PopoverDirective implements OnDestroy {
76
82
  focusOutBefore(): void;
77
83
  updatePosition(): void;
78
84
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PopoverDirective, never>;
79
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<PopoverDirective, "[luPopover2]", ["luPopover2"], { "intl": { "alias": "intl"; "required": false; "isSignal": true; }; "luPopover2": { "alias": "luPopover2"; "required": false; "isSignal": true; }; "luPopoverPosition": { "alias": "luPopoverPosition"; "required": false; "isSignal": true; }; "luPopoverMaxBlockSize": { "alias": "luPopoverMaxBlockSize"; "required": false; "isSignal": true; }; "luPopoverMaxInlineSize": { "alias": "luPopoverMaxInlineSize"; "required": false; "isSignal": true; }; "overlayScrollStrategy": { "alias": "overlayScrollStrategy"; "required": false; "isSignal": true; }; "luPopoverDisabledInput": { "alias": "luPopoverDisabled"; "required": false; "isSignal": true; }; "luPopoverTrigger": { "alias": "luPopoverTrigger"; "required": false; "isSignal": true; }; "customPositionsInput": { "alias": "customPositions"; "required": false; "isSignal": true; }; "luPopoverNoCloseButtonInput": { "alias": "luPopoverNoCloseButton"; "required": false; "isSignal": true; }; "luPopoverAnchor": { "alias": "luPopoverAnchor"; "required": false; "isSignal": true; }; "luPopoverIgnoredOutsidePointerTargets": { "alias": "luPopoverIgnoredOutsidePointerTargets"; "required": false; "isSignal": true; }; "luPopoverOpenDelay": { "alias": "luPopoverOpenDelay"; "required": false; "isSignal": true; }; "luPopoverCloseDelay": { "alias": "luPopoverCloseDelay"; "required": false; "isSignal": true; }; }, { "luPopoverTrigger": "luPopoverTriggerChange"; "luPopoverClosed": "luPopoverClosed"; "luPopoverOpened": "luPopoverOpened"; }, never, never, true, never>;
85
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<PopoverDirective, "[luPopover2]", ["luPopover2"], { "intl": { "alias": "intl"; "required": false; "isSignal": true; }; "luPopover2": { "alias": "luPopover2"; "required": false; "isSignal": true; }; "luPopoverPosition": { "alias": "luPopoverPosition"; "required": false; "isSignal": true; }; "luPopoverMaxBlockSize": { "alias": "luPopoverMaxBlockSize"; "required": false; "isSignal": true; }; "luPopoverMaxInlineSize": { "alias": "luPopoverMaxInlineSize"; "required": false; "isSignal": true; }; "overlayScrollStrategy": { "alias": "overlayScrollStrategy"; "required": false; "isSignal": true; }; "luPopoverDisabledInput": { "alias": "luPopoverDisabled"; "required": false; "isSignal": true; }; "luPopoverTrigger": { "alias": "luPopoverTrigger"; "required": false; "isSignal": true; }; "customPositionsInput": { "alias": "customPositions"; "required": false; "isSignal": true; }; "luPopoverNoCloseButtonInput": { "alias": "luPopoverNoCloseButton"; "required": false; "isSignal": true; }; "luPopoverAnchor": { "alias": "luPopoverAnchor"; "required": false; "isSignal": true; }; "luPopoverBackdrop": { "alias": "luPopoverBackdrop"; "required": false; "isSignal": true; }; "luPopoverIgnoredOutsidePointerTargets": { "alias": "luPopoverIgnoredOutsidePointerTargets"; "required": false; "isSignal": true; }; "luPopoverOpenDelay": { "alias": "luPopoverOpenDelay"; "required": false; "isSignal": true; }; "luPopoverCloseDelay": { "alias": "luPopoverCloseDelay"; "required": false; "isSignal": true; }; }, { "luPopoverTrigger": "luPopoverTriggerChange"; "luPopoverClosed": "luPopoverClosed"; "luPopoverOpened": "luPopoverOpened"; }, never, never, true, never>;
80
86
  }
81
87
 
82
88
  declare class PopoverContentComponent implements AfterViewInit, OnDestroy {
@@ -0,0 +1,44 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ interface PriorityLevelsTranslate {
4
+ low: string;
5
+ medium: string;
6
+ high: string;
7
+ }
8
+
9
+ declare class PriorityLevelsComponent {
10
+ /**
11
+ * Which priority level should be displayed (1 = low, 2 = medium, 3 = high)
12
+ */
13
+ readonly level: _angular_core.InputSignalWithTransform<1 | 2 | 3, 1 | 2 | 3 | "1" | "2" | "3">;
14
+ /**
15
+ * Which size should the component be? Defaults to M
16
+ */
17
+ readonly size: _angular_core.InputSignal<"S" | "M" | "L">;
18
+ /**
19
+ * Overrides for the default translations
20
+ */
21
+ readonly intl: _angular_core.InputSignalWithTransform<PriorityLevelsTranslate, Partial<PriorityLevelsTranslate>>;
22
+ /**
23
+ * Visually hides the label while keeping it in the DOM for screen readers, and shows it in a tooltip on the icon instead
24
+ */
25
+ readonly hiddenLabel: _angular_core.InputSignalWithTransform<boolean, unknown>;
26
+ readonly label: _angular_core.Signal<string>;
27
+ readonly iconSize: _angular_core.Signal<"S" | "M" | "L" | "XXS" | "XS" | "XL" | "XXL">;
28
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PriorityLevelsComponent, never>;
29
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PriorityLevelsComponent, "lu-priority-levels", never, { "level": { "alias": "level"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "intl": { "alias": "intl"; "required": false; "isSignal": true; }; "hiddenLabel": { "alias": "hiddenLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
30
+ }
31
+
32
+ /**
33
+ * Available PriorityLevelsComponent levels (1 = low, 2 = medium, 3 = high)
34
+ */
35
+ declare const PRIORITY_LEVELS: readonly [1, 2, 3];
36
+ type PriorityLevel = (typeof PRIORITY_LEVELS)[number];
37
+ /**
38
+ * Available PriorityLevelsComponent sizes
39
+ */
40
+ declare const PRIORITY_LEVELS_SIZES: readonly ["S", "M", "L"];
41
+ type PriorityLevelsSize = (typeof PRIORITY_LEVELS_SIZES)[number];
42
+
43
+ export { PRIORITY_LEVELS, PRIORITY_LEVELS_SIZES, PriorityLevelsComponent };
44
+ export type { PriorityLevel, PriorityLevelsSize };
@@ -5,6 +5,7 @@ import * as _lucca_front_ng_core_select from '@lucca-front/ng/core-select';
5
5
  import { LuSelectPanelRef, ALuSelectInputComponent, CoreSelectPanelInstance, ɵCoreSelectPanelElement as _CoreSelectPanelElement, CoreSelectKeyManager } from '@lucca-front/ng/core-select';
6
6
  import { ControlValueAccessor } from '@angular/forms';
7
7
  import { Overlay, OverlayPositionBuilder, ScrollStrategyOptions, OverlayConfig } from '@angular/cdk/overlay';
8
+ import { LuDialogService } from '@lucca-front/ng/dialog';
8
9
  import { LuTranslation } from '@lucca-front/ng/core';
9
10
 
10
11
  declare class LuSimpleSelectPanelRefFactory {
@@ -13,6 +14,7 @@ declare class LuSimpleSelectPanelRefFactory {
13
14
  protected positionBuilder: OverlayPositionBuilder;
14
15
  protected scrollStrategies: ScrollStrategyOptions;
15
16
  protected parentInjector: Injector;
17
+ protected dialogService: LuDialogService;
16
18
  private selectLabelId;
17
19
  private selectId;
18
20
  buildPanelRef<T>(selectInput: LuSimpleSelectInputComponent<T>, overlayConfigOverride?: OverlayConfig): LuSelectPanelRef<T, T>;
@@ -63,6 +65,8 @@ declare class LuSelectPanelComponent<T> implements AfterViewInit, CoreSelectPane
63
65
  groupTemplateLocation: _angular_core.Signal<"group-header" | "option" | "none">;
64
66
  readonly listboxState: _angular_core.Signal<"loading" | "empty">;
65
67
  readonly listboxStatusMsg: _angular_core.Signal<string>;
68
+ private readonly sheetViewport;
69
+ constructor();
66
70
  onScroll(evt: Event): void;
67
71
  ngAfterViewInit(): void;
68
72
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LuSelectPanelComponent<any>, never>;