@lucca-front/ng 22.1.0-rc.1 → 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 (177) hide show
  1. package/README.md +1 -0
  2. package/fesm2022/lucca-front-ng-a11y.mjs +1 -0
  3. package/fesm2022/lucca-front-ng-a11y.mjs.map +1 -1
  4. package/fesm2022/lucca-front-ng-activity-feed.mjs +15 -12
  5. package/fesm2022/lucca-front-ng-activity-feed.mjs.map +1 -1
  6. package/fesm2022/lucca-front-ng-approbation-inbox.mjs +3 -3
  7. package/fesm2022/lucca-front-ng-approbation-inbox.mjs.map +1 -1
  8. package/fesm2022/lucca-front-ng-box.mjs +1 -1
  9. package/fesm2022/lucca-front-ng-box.mjs.map +1 -1
  10. package/fesm2022/lucca-front-ng-breadcrumbs.mjs +1 -1
  11. package/fesm2022/lucca-front-ng-breadcrumbs.mjs.map +1 -1
  12. package/fesm2022/lucca-front-ng-bubble-icon.mjs +2 -2
  13. package/fesm2022/lucca-front-ng-bubble-icon.mjs.map +1 -1
  14. package/fesm2022/lucca-front-ng-callout.mjs +3 -3
  15. package/fesm2022/lucca-front-ng-callout.mjs.map +1 -1
  16. package/fesm2022/lucca-front-ng-chip.mjs +14 -7
  17. package/fesm2022/lucca-front-ng-chip.mjs.map +1 -1
  18. package/fesm2022/lucca-front-ng-clear.mjs +1 -1
  19. package/fesm2022/lucca-front-ng-clear.mjs.map +1 -1
  20. package/fesm2022/lucca-front-ng-core-select-api.mjs +42 -3
  21. package/fesm2022/lucca-front-ng-core-select-api.mjs.map +1 -1
  22. package/fesm2022/lucca-front-ng-core-select-department.mjs.map +1 -1
  23. package/fesm2022/lucca-front-ng-core-select-establishment.mjs +32 -9
  24. package/fesm2022/lucca-front-ng-core-select-establishment.mjs.map +1 -1
  25. package/fesm2022/lucca-front-ng-core-select-job-qualification.mjs +11 -0
  26. package/fesm2022/lucca-front-ng-core-select-job-qualification.mjs.map +1 -1
  27. package/fesm2022/lucca-front-ng-core-select-legal-units.mjs.map +1 -1
  28. package/fesm2022/lucca-front-ng-core-select-occupation-category.mjs.map +1 -1
  29. package/fesm2022/lucca-front-ng-core-select-user.mjs +32 -32
  30. package/fesm2022/lucca-front-ng-core-select-user.mjs.map +1 -1
  31. package/fesm2022/lucca-front-ng-core-select.mjs +309 -39
  32. package/fesm2022/lucca-front-ng-core-select.mjs.map +1 -1
  33. package/fesm2022/lucca-front-ng-data-table.mjs +22 -14
  34. package/fesm2022/lucca-front-ng-data-table.mjs.map +1 -1
  35. package/fesm2022/lucca-front-ng-date.mjs +2 -4
  36. package/fesm2022/lucca-front-ng-date.mjs.map +1 -1
  37. package/fesm2022/lucca-front-ng-date2.mjs +210 -107
  38. package/fesm2022/lucca-front-ng-date2.mjs.map +1 -1
  39. package/fesm2022/lucca-front-ng-dialog.mjs +9 -4
  40. package/fesm2022/lucca-front-ng-dialog.mjs.map +1 -1
  41. package/fesm2022/lucca-front-ng-dropdown.mjs +3 -0
  42. package/fesm2022/lucca-front-ng-dropdown.mjs.map +1 -1
  43. package/fesm2022/lucca-front-ng-fancy-box.mjs +47 -24
  44. package/fesm2022/lucca-front-ng-fancy-box.mjs.map +1 -1
  45. package/fesm2022/lucca-front-ng-file-upload.mjs +6 -6
  46. package/fesm2022/lucca-front-ng-file-upload.mjs.map +1 -1
  47. package/fesm2022/lucca-front-ng-filter-pills-core.mjs +55 -0
  48. package/fesm2022/lucca-front-ng-filter-pills-core.mjs.map +1 -0
  49. package/fesm2022/lucca-front-ng-filter-pills.mjs +119 -70
  50. package/fesm2022/lucca-front-ng-filter-pills.mjs.map +1 -1
  51. package/fesm2022/lucca-front-ng-form-field.mjs +110 -28
  52. package/fesm2022/lucca-front-ng-form-field.mjs.map +1 -1
  53. package/fesm2022/lucca-front-ng-form-label.mjs +2 -2
  54. package/fesm2022/lucca-front-ng-form-label.mjs.map +1 -1
  55. package/fesm2022/lucca-front-ng-form.mjs +42 -5
  56. package/fesm2022/lucca-front-ng-form.mjs.map +1 -1
  57. package/fesm2022/lucca-front-ng-forms-phone-number-input.mjs +15 -13
  58. package/fesm2022/lucca-front-ng-forms-phone-number-input.mjs.map +1 -1
  59. package/fesm2022/lucca-front-ng-forms-rich-text-input-formatters-plain-text.mjs +5 -2
  60. package/fesm2022/lucca-front-ng-forms-rich-text-input-formatters-plain-text.mjs.map +1 -1
  61. package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs +61 -29
  62. package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs.map +1 -1
  63. package/fesm2022/lucca-front-ng-forms.mjs +23 -16
  64. package/fesm2022/lucca-front-ng-forms.mjs.map +1 -1
  65. package/fesm2022/lucca-front-ng-highlight-data.mjs +6 -7
  66. package/fesm2022/lucca-front-ng-highlight-data.mjs.map +1 -1
  67. package/fesm2022/lucca-front-ng-impersonation.mjs +20 -5
  68. package/fesm2022/lucca-front-ng-impersonation.mjs.map +1 -1
  69. package/fesm2022/lucca-front-ng-index-table.mjs +13 -8
  70. package/fesm2022/lucca-front-ng-index-table.mjs.map +1 -1
  71. package/fesm2022/lucca-front-ng-inline-message.mjs +1 -1
  72. package/fesm2022/lucca-front-ng-inline-message.mjs.map +1 -1
  73. package/fesm2022/lucca-front-ng-link.mjs +9 -4
  74. package/fesm2022/lucca-front-ng-link.mjs.map +1 -1
  75. package/fesm2022/lucca-front-ng-listbox.mjs +3 -2
  76. package/fesm2022/lucca-front-ng-listbox.mjs.map +1 -1
  77. package/fesm2022/lucca-front-ng-markdown.mjs +51 -0
  78. package/fesm2022/lucca-front-ng-markdown.mjs.map +1 -0
  79. package/fesm2022/lucca-front-ng-mobile-push.mjs +2 -2
  80. package/fesm2022/lucca-front-ng-mobile-push.mjs.map +1 -1
  81. package/fesm2022/lucca-front-ng-modal.mjs +9 -4
  82. package/fesm2022/lucca-front-ng-modal.mjs.map +1 -1
  83. package/fesm2022/lucca-front-ng-multi-select.mjs +153 -48
  84. package/fesm2022/lucca-front-ng-multi-select.mjs.map +1 -1
  85. package/fesm2022/lucca-front-ng-option.mjs +6 -2
  86. package/fesm2022/lucca-front-ng-option.mjs.map +1 -1
  87. package/fesm2022/lucca-front-ng-pagination.mjs +1 -1
  88. package/fesm2022/lucca-front-ng-pagination.mjs.map +1 -1
  89. package/fesm2022/lucca-front-ng-picker.mjs.map +1 -1
  90. package/fesm2022/lucca-front-ng-plg-push.mjs +1 -1
  91. package/fesm2022/lucca-front-ng-plg-push.mjs.map +1 -1
  92. package/fesm2022/lucca-front-ng-popover2.mjs +21 -12
  93. package/fesm2022/lucca-front-ng-popover2.mjs.map +1 -1
  94. package/fesm2022/lucca-front-ng-priority-levels.mjs +128 -0
  95. package/fesm2022/lucca-front-ng-priority-levels.mjs.map +1 -0
  96. package/fesm2022/lucca-front-ng-progress-stepper.mjs +2 -2
  97. package/fesm2022/lucca-front-ng-progress-stepper.mjs.map +1 -1
  98. package/fesm2022/lucca-front-ng-read-more.mjs +3 -3
  99. package/fesm2022/lucca-front-ng-read-more.mjs.map +1 -1
  100. package/fesm2022/lucca-front-ng-resource-card.mjs +2 -2
  101. package/fesm2022/lucca-front-ng-resource-card.mjs.map +1 -1
  102. package/fesm2022/lucca-front-ng-safe-content.mjs +43 -3
  103. package/fesm2022/lucca-front-ng-safe-content.mjs.map +1 -1
  104. package/fesm2022/lucca-front-ng-scroll-box.mjs +8 -4
  105. package/fesm2022/lucca-front-ng-scroll-box.mjs.map +1 -1
  106. package/fesm2022/lucca-front-ng-segmented-control-tabs.mjs +9 -4
  107. package/fesm2022/lucca-front-ng-segmented-control-tabs.mjs.map +1 -1
  108. package/fesm2022/lucca-front-ng-segmented-control.mjs +10 -5
  109. package/fesm2022/lucca-front-ng-segmented-control.mjs.map +1 -1
  110. package/fesm2022/lucca-front-ng-select.mjs +1 -1
  111. package/fesm2022/lucca-front-ng-select.mjs.map +1 -1
  112. package/fesm2022/lucca-front-ng-simple-select.mjs +71 -17
  113. package/fesm2022/lucca-front-ng-simple-select.mjs.map +1 -1
  114. package/fesm2022/lucca-front-ng-software-icon-wrapper.mjs +1 -1
  115. package/fesm2022/lucca-front-ng-software-icon-wrapper.mjs.map +1 -1
  116. package/fesm2022/lucca-front-ng-software-icon.mjs +1 -1
  117. package/fesm2022/lucca-front-ng-software-icon.mjs.map +1 -1
  118. package/fesm2022/lucca-front-ng-status-badge.mjs +1 -1
  119. package/fesm2022/lucca-front-ng-status-badge.mjs.map +1 -1
  120. package/fesm2022/lucca-front-ng-time.mjs +1 -1
  121. package/fesm2022/lucca-front-ng-time.mjs.map +1 -1
  122. package/fesm2022/lucca-front-ng-user-popover.mjs +3 -2
  123. package/fesm2022/lucca-front-ng-user-popover.mjs.map +1 -1
  124. package/package.json +17 -4
  125. package/schematics/collection.json +5 -0
  126. package/schematics/deprecated-resolver/index.js +1 -4
  127. package/schematics/file-upload/index.js +22 -0
  128. package/schematics/file-upload/migration.js +230 -0
  129. package/schematics/file-upload/migration.spec.js +56 -0
  130. package/schematics/file-upload/schema.json +23 -0
  131. package/schematics/lib/angular-component-ast.js +3 -1
  132. package/schematics/lib/deprecated-mapper.js +2 -10
  133. package/schematics/lib/html-ast.js +26 -0
  134. package/src/components/_listbox.scss +12 -6
  135. package/src/components/cdk/_overlay.scss +3 -1
  136. package/types/lucca-front-ng-activity-feed.d.ts +16 -10
  137. package/types/lucca-front-ng-approbation-inbox.d.ts +32 -25
  138. package/types/lucca-front-ng-box.d.ts +12 -6
  139. package/types/lucca-front-ng-breadcrumbs.d.ts +12 -7
  140. package/types/lucca-front-ng-chip.d.ts +16 -9
  141. package/types/lucca-front-ng-clear.d.ts +12 -8
  142. package/types/lucca-front-ng-core-select-api.d.ts +30 -1
  143. package/types/lucca-front-ng-core-select-establishment.d.ts +7 -0
  144. package/types/lucca-front-ng-core-select-job-qualification.d.ts +8 -0
  145. package/types/lucca-front-ng-core-select-user.d.ts +6 -0
  146. package/types/lucca-front-ng-core-select.d.ts +115 -7
  147. package/types/lucca-front-ng-data-table.d.ts +16 -10
  148. package/types/lucca-front-ng-date.d.ts +12 -10
  149. package/types/lucca-front-ng-date2.d.ts +46 -21
  150. package/types/lucca-front-ng-fancy-box.d.ts +29 -12
  151. package/types/lucca-front-ng-file-upload.d.ts +41 -36
  152. package/types/lucca-front-ng-filter-pills-core.d.ts +69 -0
  153. package/types/lucca-front-ng-filter-pills.d.ts +53 -69
  154. package/types/lucca-front-ng-form-field.d.ts +34 -5
  155. package/types/lucca-front-ng-form-label.d.ts +13 -8
  156. package/types/lucca-front-ng-form.d.ts +7 -1
  157. package/types/lucca-front-ng-forms-rich-text-input.d.ts +40 -35
  158. package/types/lucca-front-ng-forms.d.ts +36 -44
  159. package/types/lucca-front-ng-highlight-data.d.ts +1 -2
  160. package/types/lucca-front-ng-impersonation.d.ts +28 -10
  161. package/types/lucca-front-ng-index-table.d.ts +3 -1
  162. package/types/lucca-front-ng-link.d.ts +16 -7
  163. package/types/lucca-front-ng-markdown.d.ts +24 -0
  164. package/types/lucca-front-ng-mobile-push.d.ts +18 -12
  165. package/types/lucca-front-ng-multi-select.d.ts +10 -1
  166. package/types/lucca-front-ng-option.d.ts +8 -8
  167. package/types/lucca-front-ng-pagination.d.ts +15 -10
  168. package/types/lucca-front-ng-picker.d.ts +2 -2
  169. package/types/lucca-front-ng-plg-push.d.ts +12 -6
  170. package/types/lucca-front-ng-popover2.d.ts +7 -1
  171. package/types/lucca-front-ng-priority-levels.d.ts +44 -0
  172. package/types/lucca-front-ng-read-more.d.ts +13 -9
  173. package/types/lucca-front-ng-safe-content.d.ts +8 -2
  174. package/types/lucca-front-ng-segmented-control-tabs.d.ts +5 -1
  175. package/types/lucca-front-ng-segmented-control.d.ts +5 -1
  176. package/types/lucca-front-ng-select.d.ts +6 -6
  177. package/types/lucca-front-ng-simple-select.d.ts +5 -1
@@ -1,5 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { TemplateRef } from '@angular/core';
2
+ import { TemplateRef, InjectionToken } from '@angular/core';
3
+ import * as _lucca_front_ng_breadcrumbs from '@lucca-front/ng/breadcrumbs';
4
+ import { LuTranslation } from '@lucca-front/ng/core';
3
5
 
4
6
  declare class BreadcrumbsLinkDirective {
5
7
  template: TemplateRef<any>;
@@ -7,12 +9,8 @@ declare class BreadcrumbsLinkDirective {
7
9
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BreadcrumbsLinkDirective, "[luBreadcrumbsLink]", never, {}, {}, never, never, true, never>;
8
10
  }
9
11
 
10
- interface LuBreadcrumbsLabel {
11
- breadcrumbs: string;
12
- }
13
-
14
12
  declare class BreadcrumbsComponent {
15
- readonly intl: _angular_core.InputSignalWithTransform<LuBreadcrumbsLabel, Partial<LuBreadcrumbsLabel>>;
13
+ readonly intl: _angular_core.InputSignalWithTransform<_lucca_front_ng_breadcrumbs.LuBreadcrumbsLabel, Partial<_lucca_front_ng_breadcrumbs.LuBreadcrumbsLabel>>;
16
14
  readonly disableCompact: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
17
15
  readonly links: _angular_core.Signal<readonly BreadcrumbsLinkDirective[]>;
18
16
  readonly isCompact: _angular_core.Signal<boolean>;
@@ -21,4 +19,11 @@ declare class BreadcrumbsComponent {
21
19
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<BreadcrumbsComponent, "lu-breadcrumbs", never, { "intl": { "alias": "intl"; "required": false; "isSignal": true; }; "disableCompact": { "alias": "disableCompact"; "required": false; "isSignal": true; }; }, {}, ["links"], never, true, never>;
22
20
  }
23
21
 
24
- export { BreadcrumbsComponent, BreadcrumbsLinkDirective };
22
+ declare const LU_BREADCRUMBS_TRANSLATIONS: InjectionToken<LuTranslation<LuBreadcrumbsLabel>>;
23
+ interface LuBreadcrumbsLabel {
24
+ breadcrumbs: string;
25
+ }
26
+ declare const luBreadcrumbsTranslations: LuTranslation<LuBreadcrumbsLabel>;
27
+
28
+ export { BreadcrumbsComponent, BreadcrumbsLinkDirective, LU_BREADCRUMBS_TRANSLATIONS, luBreadcrumbsTranslations };
29
+ export type { LuBreadcrumbsLabel };
@@ -1,5 +1,8 @@
1
1
  import * as _angular_core from '@angular/core';
2
+ import { InjectionToken } from '@angular/core';
3
+ import * as _lucca_front_ng_chip from '@lucca-front/ng/chip';
2
4
  import { LuccaIcon } from '@lucca-front/icons';
5
+ import { LuTranslation } from '@lucca-front/ng/core';
3
6
 
4
7
  /**
5
8
  * Available ChipComponent Types
@@ -9,14 +12,9 @@ type ChipSize = (typeof CHIP_SIZE)[number];
9
12
  declare const CHIP_STATE: readonly ["warning", "critical"];
10
13
  type ChipState = (typeof CHIP_STATE)[number];
11
14
 
12
- interface ChipTranslate {
13
- delete: string;
14
- error: string;
15
- warning: string;
16
- }
17
-
18
15
  declare class ChipComponent {
19
- readonly intl: _angular_core.InputSignalWithTransform<ChipTranslate, Partial<ChipTranslate>>;
16
+ #private;
17
+ readonly intl: _angular_core.InputSignalWithTransform<_lucca_front_ng_chip.ChipTranslate, Partial<_lucca_front_ng_chip.ChipTranslate>>;
20
18
  /**
21
19
  * Add an ellipsis if the text is too long
22
20
  */
@@ -59,9 +57,18 @@ declare class ChipComponent {
59
57
  readonly isWarning: _angular_core.Signal<boolean>;
60
58
  readonly isCritical: _angular_core.Signal<boolean>;
61
59
  readonly displayedIcon: _angular_core.Signal<LuccaIcon>;
60
+ protected readonly tooltipTriggerAnchor: _angular_core.Signal<HTMLElement>;
62
61
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChipComponent, never>;
63
62
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChipComponent, "lu-chip, button[luChip], a[luChip]", never, { "intl": { "alias": "intl"; "required": false; "isSignal": true; }; "withEllipsis": { "alias": "withEllipsis"; "required": false; "isSignal": true; }; "unkillable": { "alias": "unkillable"; "required": false; "isSignal": true; }; "palette": { "alias": "palette"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, { "kill": "kill"; }, never, ["*"], true, never>;
64
63
  }
65
64
 
66
- export { CHIP_SIZE, CHIP_STATE, ChipComponent };
67
- export type { ChipSize, ChipState };
65
+ declare const LU_CHIP_TRANSLATIONS: InjectionToken<LuTranslation<ChipTranslate>>;
66
+ interface ChipTranslate {
67
+ delete: string;
68
+ error: string;
69
+ warning: string;
70
+ }
71
+ declare const luChipTranslations: LuTranslation<ChipTranslate>;
72
+
73
+ export { CHIP_SIZE, CHIP_STATE, ChipComponent, LU_CHIP_TRANSLATIONS, luChipTranslations };
74
+ export type { ChipSize, ChipState, ChipTranslate };
@@ -1,6 +1,8 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { EventEmitter, ElementRef } from '@angular/core';
2
+ import { EventEmitter, ElementRef, InjectionToken } from '@angular/core';
3
+ import * as _lucca_front_ng_clear from '@lucca-front/ng/clear';
3
4
  import { Observable } from 'rxjs';
5
+ import { LuTranslation } from '@lucca-front/ng/core';
4
6
 
5
7
  /**
6
8
  * Available ClearComponent Types
@@ -8,10 +10,6 @@ import { Observable } from 'rxjs';
8
10
  declare const CLEAR_SIZE: readonly ["S"];
9
11
  type ClearSize = (typeof CLEAR_SIZE)[number];
10
12
 
11
- interface LuClearLabel {
12
- clear: string;
13
- }
14
-
15
13
  interface ILuClear<T> {
16
14
  onClear: Observable<T>;
17
15
  }
@@ -21,7 +19,7 @@ declare abstract class ALuClear<T> implements ILuClear<T> {
21
19
 
22
20
  declare class ClearComponent<T> extends ALuClear<T> implements ILuClear<T> {
23
21
  #private;
24
- readonly intl: _angular_core.InputSignalWithTransform<LuClearLabel, Partial<LuClearLabel>>;
22
+ readonly intl: _angular_core.InputSignalWithTransform<_lucca_front_ng_clear.LuClearLabel, Partial<_lucca_front_ng_clear.LuClearLabel>>;
25
23
  /**
26
24
  * Which size should the clear be? Defaults to small
27
25
  */
@@ -50,5 +48,11 @@ declare class ClearComponent<T> extends ALuClear<T> implements ILuClear<T> {
50
48
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ClearComponent<any>, "lu-clear", ["luClearer"], { "intl": { "alias": "intl"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "palette": { "alias": "palette"; "required": false; "isSignal": true; }; "inverted": { "alias": "inverted"; "required": false; "isSignal": true; }; }, { "onClearOutput": "onClear"; }, ["contentRef"], ["*"], true, never>;
51
49
  }
52
50
 
53
- export { ALuClear, CLEAR_SIZE, ClearComponent };
54
- export type { ClearSize, ILuClear };
51
+ declare const LU_CLEAR_TRANSLATIONS: InjectionToken<LuTranslation<LuClearLabel>>;
52
+ interface LuClearLabel {
53
+ clear: string;
54
+ }
55
+ declare const luClearTranslations: LuTranslation<LuClearLabel>;
56
+
57
+ export { ALuClear, CLEAR_SIZE, ClearComponent, LU_CLEAR_TRANSLATIONS, luClearTranslations };
58
+ export type { ClearSize, ILuClear, LuClearLabel };
@@ -44,9 +44,38 @@ declare abstract class ALuCoreSelectApiDirective<TOption, TParams = Record<strin
44
44
  * Return the options for the given params and page
45
45
  */
46
46
  protected abstract getOptions(params: TParams, page: number): Observable<TOption[]>;
47
+ /**
48
+ * Return every option of a group, ignoring pagination, so the group "select all" acts on the whole
49
+ * group and not only on the pages already loaded. Override it in directives that set a grouping;
50
+ * left undefined, the panel keeps its default behaviour and toggles the rendered options only.
51
+ */
52
+ protected getGroupOptions?: (group: unknown) => Observable<TOption[]>;
47
53
  ngOnInit(): void;
54
+ /**
55
+ * Emits whenever something *other than the clue* changed in {@link params$}, so the option stream
56
+ * resets and reloads from page 0 — a panel header toggle, a filter bound to an input…
57
+ *
58
+ * Clue changes are already the select's own business (debounce included), and every directive folds
59
+ * the clue into its params under its own key — sometimes driving the sort along with it — so there
60
+ * is no clue key to strip generically. They are recognized here by comparing the clue of two
61
+ * consecutive params emissions instead: same clue but different params means a real params change.
62
+ */
63
+ protected buildParamsChange(): Observable<TParams>;
64
+ /**
65
+ * Post-process the whole list of loaded options (all pages accumulated). Override it for
66
+ * decorations that can't be computed page by page, eg. flagging homonyms across pages.
67
+ */
68
+ protected transformOptions(options: readonly TOption[]): Observable<readonly TOption[]>;
48
69
  protected buildParamsFromClue(clue: string): Observable<TParams>;
49
- abstract totalCount$: Observable<number>;
70
+ /**
71
+ * Total number of options matching the current params, ignoring pagination. Only the select-all
72
+ * feature of `lu-multi-select` needs it, so it is optional: a directive that has no cheap way to
73
+ * count — or whose select never offers a select-all — simply leaves it undefined.
74
+ *
75
+ * Being a property of this class, it has to be implemented as a field: TypeScript rejects an
76
+ * accessor overriding a property (TS2611).
77
+ */
78
+ totalCount$: Observable<number> | undefined;
50
79
  protected clearLastPageByClue(): void;
51
80
  protected getOptionsPage(params: TParams, page: number): Observable<{
52
81
  items: TOption[];
@@ -41,6 +41,13 @@ declare class LuCoreSelectEstablishmentsDirective<T extends LuCoreSelectEstablis
41
41
  ngOnInit(): void;
42
42
  protected initGrouping(): void;
43
43
  protected buildParamsFromClue(clue: string): Observable<Record<string, string | number | boolean>>;
44
+ /**
45
+ * Establishments are grouped by legal unit, but the panel only knows the options of the pages it
46
+ * already loaded: a legal unit spanning several pages would be partially selected. Fetch the whole
47
+ * legal unit instead, page by page, so "select all" covers the options that are not rendered yet.
48
+ * Groups are only displayed when the clue is empty, hence the clue-less params.
49
+ */
50
+ protected getGroupOptions: (legalUnitId: unknown) => Observable<T[]>;
44
51
  protected getOptions(params: Record<string, string | number | boolean> | null, page: number): Observable<T[]>;
45
52
  protected readonly paramsSignal: _angular_core.Signal<Record<string, string | number | boolean>>;
46
53
  protected readonly params$: Observable<Record<string, string | number | boolean>>;
@@ -14,6 +14,7 @@ interface LuCoreSelectJobQualification extends ILuApiItem {
14
14
  }
15
15
 
16
16
  declare class LuCoreSelectJobQualificationsDirective<T extends LuCoreSelectJobQualification = LuCoreSelectJobQualification> extends ALuCoreSelectApiDirective<T> implements OnInit, CoreSelectApiTotalCountProvider {
17
+ #private;
17
18
  protected httpClient: HttpClient;
18
19
  readonly url: _angular_core.InputSignal<string>;
19
20
  readonly filters: _angular_core.InputSignal<Record<string, string | number | boolean>>;
@@ -21,6 +22,13 @@ declare class LuCoreSelectJobQualificationsDirective<T extends LuCoreSelectJobQu
21
22
  protected readonly clue: _angular_core.Signal<string>;
22
23
  constructor();
23
24
  protected buildParamsFromClue(clue: string): Observable<Record<string, string | number | boolean>>;
25
+ /**
26
+ * Job qualifications are grouped by job, but the panel only knows the options of the pages it
27
+ * already loaded: a job spanning several pages would be partially selected. Fetch the whole job
28
+ * instead, page by page, so "select all" covers the options that are not rendered yet. Groups are
29
+ * only displayed when the clue is empty, hence the clue-less params.
30
+ */
31
+ protected getGroupOptions: (jobId: unknown) => Observable<T[]>;
24
32
  protected getOptions(params: Record<string, string | number | boolean> | null, page: number): Observable<T[]>;
25
33
  protected readonly paramsSignal: _angular_core.Signal<Record<string, string | number | boolean>>;
26
34
  protected readonly params$: Observable<Record<string, string | number | boolean>>;
@@ -67,6 +67,12 @@ declare class LuCoreSelectUsersDirective<T extends LuCoreSelectUser = LuCoreSele
67
67
  items: LuCoreSelectWithAdditionnalInformation<T>[];
68
68
  isLastPage: boolean;
69
69
  }>;
70
+ /**
71
+ * Homonyms can only be detected by looking at every loaded option at once: two homonyms may
72
+ * land on different pages (last option of a page, first of the next one), in which case a
73
+ * page by page detection would find none. So we run it on the accumulated list instead.
74
+ */
75
+ protected transformOptions(options: readonly LuCoreSelectWithAdditionnalInformation<T>[]): Observable<readonly LuCoreSelectWithAdditionnalInformation<T>[]>;
70
76
  protected optionKey: (option: T) => number;
71
77
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<LuCoreSelectUsersDirective<any>, never>;
72
78
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LuCoreSelectUsersDirective<any>, "lu-simple-select[users],lu-multi-select[users]", ["luUsers"], { "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "filters": { "alias": "filters"; "required": false; "isSignal": true; }; "url": { "alias": "url"; "required": false; "isSignal": true; }; "orderBy": { "alias": "orderBy"; "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; }; "enableFormerEmployees": { "alias": "enableFormerEmployees"; "required": false; "isSignal": true; }; "displayMeOption": { "alias": "displayMeOption"; "required": false; "isSignal": true; }; "customUserOptionTpl": { "alias": "customUserOptionTpl"; "required": false; "isSignal": true; }; "searchDelimiter": { "alias": "searchDelimiter"; "required": false; "isSignal": true; }; }, { "customUserOptionTpl": "customUserOptionTplChange"; }, never, never, true, never>;
@@ -2,24 +2,46 @@ import * as _angular_core from '@angular/core';
2
2
  import { InjectionToken, OnDestroy, ElementRef, Signal, EventEmitter, TemplateRef, Injector, WritableSignal, OnInit, ChangeDetectorRef, Type, Provider, PipeTransform } from '@angular/core';
3
3
  import * as rxjs from 'rxjs';
4
4
  import { Observable, Subject, BehaviorSubject, ReplaySubject } from 'rxjs';
5
- import * as _lucca_front_ng_filter_pills from '@lucca-front/ng/filter-pills';
6
- import { FilterPillInputComponent } from '@lucca-front/ng/filter-pills';
7
- import { OverlayConfig, OverlayRef } from '@angular/cdk/overlay';
5
+ import * as _lucca_front_ng_filter_pills_core from '@lucca-front/ng/filter-pills/core';
6
+ import { FilterPillInputComponent } from '@lucca-front/ng/filter-pills/core';
7
+ import { ComponentType, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';
8
8
  import { ControlValueAccessor } from '@angular/forms';
9
9
  import { PortalContent, LuTranslation } from '@lucca-front/ng/core';
10
+ import { FormFieldComponent } from '@lucca-front/ng/form-field';
10
11
  import * as _lucca_front_ng_core_select from '@lucca-front/ng/core-select';
11
12
  import { Treeitem } from '@lucca-front/ng/listbox';
12
13
  import { Highlightable } from '@angular/cdk/a11y';
14
+ import { LuDialogService, LuDialogRef } from '@lucca-front/ng/dialog';
13
15
 
14
16
  interface SelectDataSourceParams {
15
17
  clue: string;
16
18
  page: number;
17
19
  }
18
20
  interface SelectDataSource<TOption, TGroup = never> {
21
+ /**
22
+ * Emits when the params behind `getOptions` changed, so the select resets and reloads from page 0
23
+ * with the current clue — a panel header toggle, a filter bound to an input…
24
+ *
25
+ * It must not emit on clue changes: those are the select's own business, debounce included, and an
26
+ * emission here would load the same page a second time.
27
+ */
19
28
  paramsChange?: Observable<unknown>;
20
29
  /** Optional debounce in ms for clue-based re-queries (useful for API data sources) */
21
30
  clueDebounceMs?: number;
31
+ /**
32
+ * Whether `getOptions` answers page by page. When false, it emits the whole list at once and `page`
33
+ * is always 0: the select accumulates nothing, `nextPage` is only a request for more, and the loading
34
+ * row is left to the consumer through the `loading` input.
35
+ * @default true
36
+ */
37
+ paginated?: boolean;
22
38
  getOptions(params: SelectDataSourceParams): Observable<readonly TOption[]>;
39
+ /**
40
+ * Optional post-processing applied to the whole list of loaded options (all pages accumulated),
41
+ * every time it changes. Use it for decorations that can't be computed page by page —
42
+ * for example flagging homonyms, which requires seeing every loaded option at once.
43
+ */
44
+ transformOptions?(options: readonly TOption[]): Observable<readonly TOption[]>;
23
45
  getTotalCount?(params: SelectDataSourceParams): Observable<number>;
24
46
  getGroupOptions?: [TGroup] extends [never] ? never : (group: TGroup) => Observable<TOption[]>;
25
47
  reset?(): void;
@@ -43,6 +65,11 @@ type CoreSelectAddOptionStrategy = 'never' | 'always' | 'if-empty-clue' | 'if-no
43
65
  declare const SELECT_ID: InjectionToken<number>;
44
66
  declare const SELECT_LABEL: InjectionToken<HTMLLabelElement>;
45
67
  declare const SELECT_LABEL_ID: InjectionToken<string>;
68
+ /**
69
+ * Contract behind {@link CORE_SELECT_API_TOTAL_COUNT_PROVIDER}: a directive fulfills it by declaring
70
+ * a `totalCount$`, which the select-all of `lu-multi-select` then reads through the token. Providing
71
+ * a count stays optional — see `ALuCoreSelectApiDirective.totalCount$`.
72
+ */
46
73
  interface CoreSelectApiTotalCountProvider {
47
74
  totalCount$: Observable<number>;
48
75
  }
@@ -141,6 +168,30 @@ declare abstract class LuSelectPanelRef<TOption, TValue> {
141
168
  close(): void;
142
169
  }
143
170
 
171
+ /**
172
+ * Opens a select panel as a bottom sheet.
173
+ *
174
+ * Below the `S` breakpoint the panel stops being a popover anchored to the field and becomes a modal
175
+ * surface pinned to the bottom of the viewport. That surface already exists as the dialog's `sheet`
176
+ * mode — backdrop, blocked page scroll, focus trap, focus restoration and close button all come with
177
+ * it — so the panel is opened as a dialog instead of as a bespoke overlay.
178
+ *
179
+ * The opening animation is disabled (`mod-select`, styled by the select packages themselves — see their
180
+ * `sheet` mixin) and the search input is focused by hand instead of through CDK's `autoFocus`. iOS
181
+ * Safari only raises the virtual keyboard for a `focus()` call made synchronously inside the tap that
182
+ * triggered it; CDK's own autofocus defers the actual `focus()` through `afterNextRender`, which always
183
+ * lands after that window has closed, so the keyboard silently never opens. Forcing a render with
184
+ * `ApplicationRef.tick()` right here — still inside the same synchronous call stack as the tap — makes
185
+ * the search input exist in the DOM in time to focus it for real, and skipping the animation keeps the
186
+ * sheet from visibly jumping once the keyboard's own viewport resize kicks in immediately after.
187
+ *
188
+ * @param dialogService the dialog service provided alongside the select input
189
+ * @param panel the panel component to render inside the sheet
190
+ * @param injector the injector carrying the panel ref and the select input for the panel
191
+ * @param ariaLabel names the sheet, so it stays named even before its header has rendered
192
+ */
193
+ declare function openSelectPanelSheet<TPanel>(dialogService: LuDialogService, panel: ComponentType<TPanel>, injector: Injector, ariaLabel: string): LuDialogRef<TPanel, never>;
194
+
144
195
  /**
145
196
  * Scrolls an element into view once its layout has settled.
146
197
  *
@@ -160,6 +211,34 @@ type GroupTemplateLocation = 'group-header' | 'option' | 'none';
160
211
  * the options are being (re)fetched, then flip to the final location on the next options emission.
161
212
  */
162
213
  declare function getGroupTemplateLocation(hasGrouping: Signal<boolean>, clue: Signal<string>, options: Signal<readonly unknown[]>, searchable?: boolean): Signal<GroupTemplateLocation>;
214
+ /**
215
+ * Requests the next page for as long as the panel's scroll viewport can't scroll.
216
+ *
217
+ * Pagination is driven by the scroll event: reaching the bottom of the viewport asks the consumer
218
+ * for the next page. A page that doesn't overflow the viewport therefore never asks for anything —
219
+ * there is nothing to scroll. The popover panel caps its content at 20rem, which a page of options
220
+ * always overflows, so this never came up; the bottom sheet is only as tall as its content instead,
221
+ * so a first page of a few options leaves it short of a scrollbar and pagination stops right there.
222
+ *
223
+ * So the viewport is measured again after every render and, while it still can't scroll, the next
224
+ * page is requested. The option count is what guards against an endless loop: a page that brought
225
+ * no new option — the data source is exhausted — is never requested twice. A new search landing on
226
+ * exactly the same count as the last requested page is the one case left unfilled, which the next
227
+ * scroll — or the next keystroke — resolves on its own.
228
+ *
229
+ * The request itself is deferred by a microtask: the panel's first render happens inside the sheet's
230
+ * own `ApplicationRef.tick()`, which `openPanel` runs *before* subscribing the select input to the
231
+ * panel ref, so a page requested straight from that render would be emitted into the void. A
232
+ * microtask lands once `openPanel` has returned, still well ahead of anything the user could do.
233
+ *
234
+ * Must be called from an injection context.
235
+ */
236
+ declare function fillScrollViewport({ viewport, optionCount, loading, nextPage, }: {
237
+ viewport: Signal<HTMLElement | undefined>;
238
+ optionCount: Signal<number>;
239
+ loading: Signal<boolean>;
240
+ nextPage: () => void;
241
+ }): void;
163
242
 
164
243
  interface CoreSelectPanelInstance<T = unknown> {
165
244
  options: WritableSignal<CoreSelectPanelElement<T>[]>;
@@ -211,12 +290,19 @@ declare abstract class ALuSelectInputComponent<TOption, TValue> implements OnDes
211
290
  protected overlayContainerRef: HTMLElement;
212
291
  protected labelElement: HTMLElement | undefined;
213
292
  protected labelId: string;
293
+ protected formField: FormFieldComponent;
214
294
  protected abstract intl: Signal<LuCoreSelectLabel>;
215
- protected filterPillHost: _lucca_front_ng_filter_pills.FilterPillComponent;
295
+ protected filterPillHost: _lucca_front_ng_filter_pills_core.FilterPillHostComponent;
216
296
  protected afterCloseFn?: () => void;
217
297
  protected updatePositionFn?: () => void;
218
- filterPillMode: boolean;
298
+ get filterPillMode(): boolean;
299
+ set filterPillMode(filterPillMode: boolean);
219
300
  readonly ignorePresentation: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
301
+ /**
302
+ * Width of the select itself, using the same scale as the form field width
303
+ */
304
+ readonly width: _angular_core.InputSignalWithTransform<10 | 20 | 30 | 40 | 50 | 60, 10 | 20 | 30 | 40 | 50 | 60 | "null" | "10" | "20" | "30" | "40" | "50" | "60">;
305
+ protected readonly widthClass: Signal<string>;
220
306
  selectParent$?: Subject<void>;
221
307
  selectChildren$?: Subject<void>;
222
308
  readonly panelClosed: _angular_core.OutputEmitterRef<void>;
@@ -240,6 +326,25 @@ declare abstract class ALuSelectInputComponent<TOption, TValue> implements OnDes
240
326
  get isPanelOpen(): boolean;
241
327
  readonly isPanelOpen$: BehaviorSubject<boolean>;
242
328
  readonly panelOpenSignal: Signal<boolean>;
329
+ private readonly belowSmallBreakpoint;
330
+ /**
331
+ * Below the `S` breakpoint (800px) the panel opens as a dialog in `sheet` mode that embeds its own
332
+ * search input, instead of a popover anchored to the field — mirroring how filter pills move the input
333
+ * inside their overlay. Filter pills already provide their own overlay, so they keep their behavior.
334
+ */
335
+ readonly bottomSheetMode: Signal<boolean>;
336
+ /**
337
+ * Whether the currently open panel is a sheet, snapshotted when it opens rather than tracking
338
+ * `bottomSheetMode()` live: the panel's own ref (`SelectPanelSheetRef` vs `SelectPanelRef`) is
339
+ * chosen once at open time too, so resizing across the breakpoint while the panel stays open must
340
+ * not flip which surface its template renders — that surface was never actually attached as a
341
+ * dialog, so switching to it crashes with a missing `LuDialogRef` provider.
342
+ */
343
+ readonly panelBottomSheetMode: _angular_core.WritableSignal<boolean>;
344
+ /** Field label echoed as the bottom sheet's title, snapshotted when the sheet opens. */
345
+ readonly panelTitle: _angular_core.WritableSignal<string>;
346
+ /** Whether that field label carries the required marker, so the sheet's title can echo it too. */
347
+ readonly panelTitleRequired: Signal<boolean>;
243
348
  readonly activeDescendant$: BehaviorSubject<string>;
244
349
  protected manualOptions$: ReplaySubject<readonly TOption[]>;
245
350
  get ariaControls(): string;
@@ -299,6 +404,7 @@ declare abstract class ALuSelectInputComponent<TOption, TValue> implements OnDes
299
404
  protected _panelRef?: LuSelectPanelRef<TOption, TValue>;
300
405
  protected readonly destroyed$: Subject<void>;
301
406
  private readonly injector;
407
+ private readonly hostElementRef;
302
408
  constructor();
303
409
  onClickOpenPanel($event: Event): void;
304
410
  onKeyDownNavigation(event: Event): void;
@@ -313,6 +419,8 @@ declare abstract class ALuSelectInputComponent<TOption, TValue> implements OnDes
313
419
  protected abstract buildPanelRef(): this['panelRef'];
314
420
  protected bindInputToPanelRefEvents(): void;
315
421
  focusInput(): void;
422
+ private resolvePanelTitle;
423
+ private getLabelText;
316
424
  protected emptyClue(): void;
317
425
  closePanel(): void;
318
426
  writeValue(value: TValue | null): void;
@@ -324,7 +432,7 @@ declare abstract class ALuSelectInputComponent<TOption, TValue> implements OnDes
324
432
  onFilterPillOpened(): void;
325
433
  onFilterPillClosed(): void;
326
434
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ALuSelectInputComponent<any, any>, never>;
327
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ALuSelectInputComponent<any, any>, never, never, { "ignorePresentation": { "alias": "ignorePresentation"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "clearableInput": { "alias": "clearable"; "required": false; "isSignal": true; }; "addOptionLabelInput": { "alias": "addOptionLabel"; "required": false; "isSignal": true; }; "addOptionStrategy": { "alias": "addOptionStrategy"; "required": false; "isSignal": true; }; "overlayConfig": { "alias": "overlayConfig"; "required": false; "isSignal": true; }; "loadingInput": { "alias": "loading"; "required": false; "isSignal": true; }; "optionsInput": { "alias": "options"; "required": false; "isSignal": true; }; "optionComparerInput": { "alias": "optionComparer"; "required": false; "isSignal": true; }; "optionKeyInput": { "alias": "optionKey"; "required": false; "isSignal": true; }; "noClueIcon": { "alias": "noClueIcon"; "required": false; "isSignal": true; }; "inputTabindex": { "alias": "inputTabindex"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "colorPicker": { "alias": "colorPicker"; "required": false; "isSignal": true; }; "optionTpl": { "alias": "optionTpl"; "required": false; "isSignal": true; }; "valueTpl": { "alias": "valueTpl"; "required": false; "isSignal": true; }; "panelHeaderTpl": { "alias": "panelHeaderTpl"; "required": false; "isSignal": true; }; "panelFooterTpl": { "alias": "panelFooterTpl"; "required": false; "isSignal": true; }; "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; }, { "panelClosed": "panelClosed"; "panelOpened": "panelOpened"; "highlightedOption": "highlightedOption"; "optionTpl": "optionTplChange"; "valueTpl": "valueTplChange"; "panelHeaderTpl": "panelHeaderTplChange"; "panelFooterTpl": "panelFooterTplChange"; "clueChange": "clueChange"; "nextPage": "nextPage"; "addOption": "addOption"; "dataSource": "dataSourceChange"; }, never, never, true, never>;
435
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ALuSelectInputComponent<any, any>, never, never, { "ignorePresentation": { "alias": "ignorePresentation"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "clearableInput": { "alias": "clearable"; "required": false; "isSignal": true; }; "addOptionLabelInput": { "alias": "addOptionLabel"; "required": false; "isSignal": true; }; "addOptionStrategy": { "alias": "addOptionStrategy"; "required": false; "isSignal": true; }; "overlayConfig": { "alias": "overlayConfig"; "required": false; "isSignal": true; }; "loadingInput": { "alias": "loading"; "required": false; "isSignal": true; }; "optionsInput": { "alias": "options"; "required": false; "isSignal": true; }; "optionComparerInput": { "alias": "optionComparer"; "required": false; "isSignal": true; }; "optionKeyInput": { "alias": "optionKey"; "required": false; "isSignal": true; }; "noClueIcon": { "alias": "noClueIcon"; "required": false; "isSignal": true; }; "inputTabindex": { "alias": "inputTabindex"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "colorPicker": { "alias": "colorPicker"; "required": false; "isSignal": true; }; "optionTpl": { "alias": "optionTpl"; "required": false; "isSignal": true; }; "valueTpl": { "alias": "valueTpl"; "required": false; "isSignal": true; }; "panelHeaderTpl": { "alias": "panelHeaderTpl"; "required": false; "isSignal": true; }; "panelFooterTpl": { "alias": "panelFooterTpl"; "required": false; "isSignal": true; }; "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; }, { "panelClosed": "panelClosed"; "panelOpened": "panelOpened"; "highlightedOption": "highlightedOption"; "optionTpl": "optionTplChange"; "valueTpl": "valueTplChange"; "panelHeaderTpl": "panelHeaderTplChange"; "panelFooterTpl": "panelFooterTplChange"; "clueChange": "clueChange"; "nextPage": "nextPage"; "addOption": "addOption"; "dataSource": "dataSourceChange"; }, never, never, true, never>;
328
436
  }
329
437
 
330
438
  declare function provideLuSelectLabelsAndIds(): Provider[];
@@ -481,5 +589,5 @@ declare class LuIsOptionSelectedPipe<T> implements PipeTransform {
481
589
  static ɵpipe: _angular_core.ɵɵPipeDeclaration<LuIsOptionSelectedPipe<any>, "luIsOptionSelected", true>;
482
590
  }
483
591
 
484
- export { ALuSelectInputComponent, CORE_SELECT_API_TOTAL_COUNT_PROVIDER, CoreSelectKeyManager, LU_CORE_SELECT_TRANSLATIONS, LU_OPTION_CONTEXT, LuCoreSelectNoClueDirective, LuCoreSelectPanelHeaderDirective, LuCoreSelectTotalCountDirective, LuDisabledOptionDirective, LuDisplayerDirective, LuIsOptionSelectedPipe, LuOptionDirective, LuOptionGroupDirective, LuSelectPanelLayoutComponent, LuSelectPanelRef, LuSimpleSelectDefaultOptionComponent, SELECT_ID, SELECT_LABEL, SELECT_LABEL_ID, SELECT_PANEL_INSTANCE, TreeDisplayPipe, addAttributesOnCdkContainer, applySearchDelimiter, coreSelectDefaultOptionComparer, coreSelectDefaultOptionKey, luCoreSelectTranslations, provideLuSelectLabelsAndIds, provideOptionContext, CoreSelectPanelElement as ɵCoreSelectPanelElement, ɵIsSelectedStrategy, LuOptionComponent as ɵLuOptionComponent, LuOptionGroupPipe as ɵLuOptionGroupPipe, LuOptionOutletDirective as ɵLuOptionOutletDirective, generateGroups as ɵgenerateGroups, getGroupTemplateLocation as ɵgetGroupTemplateLocation, injectPointerNavigation as ɵinjectPointerNavigation, scrollIntoViewOnceReady as ɵscrollIntoViewOnceReady };
592
+ export { ALuSelectInputComponent, CORE_SELECT_API_TOTAL_COUNT_PROVIDER, CoreSelectKeyManager, LU_CORE_SELECT_TRANSLATIONS, LU_OPTION_CONTEXT, LuCoreSelectNoClueDirective, LuCoreSelectPanelHeaderDirective, LuCoreSelectTotalCountDirective, LuDisabledOptionDirective, LuDisplayerDirective, LuIsOptionSelectedPipe, LuOptionDirective, LuOptionGroupDirective, LuSelectPanelLayoutComponent, LuSelectPanelRef, LuSimpleSelectDefaultOptionComponent, SELECT_ID, SELECT_LABEL, SELECT_LABEL_ID, SELECT_PANEL_INSTANCE, TreeDisplayPipe, addAttributesOnCdkContainer, applySearchDelimiter, coreSelectDefaultOptionComparer, coreSelectDefaultOptionKey, luCoreSelectTranslations, provideLuSelectLabelsAndIds, provideOptionContext, CoreSelectPanelElement as ɵCoreSelectPanelElement, ɵIsSelectedStrategy, LuOptionComponent as ɵLuOptionComponent, LuOptionGroupPipe as ɵLuOptionGroupPipe, LuOptionOutletDirective as ɵLuOptionOutletDirective, fillScrollViewport as ɵfillScrollViewport, generateGroups as ɵgenerateGroups, getGroupTemplateLocation as ɵgetGroupTemplateLocation, injectPointerNavigation as ɵinjectPointerNavigation, openSelectPanelSheet as ɵopenSelectPanelSheet, scrollIntoViewOnceReady as ɵscrollIntoViewOnceReady };
485
593
  export type { CoreSelectAddOptionStrategy, CoreSelectApiTotalCountProvider, CoreSelectPanelInstance, ILuOptionContext, LuCoreSelectLabel, LuOptionComparer, LuOptionContext, LuOptionGroup, LuOptionGroupByContext, LuOptionGrouping, SelectDataSource, SelectDataSourceParams, TreeGenerator, TreeGroupingFn, TreeNode };
@@ -1,7 +1,7 @@
1
1
  import * as _lucca_front_ng_data_table from '@lucca-front/ng/data-table';
2
2
  import * as _angular_core from '@angular/core';
3
3
  import { AfterContentInit, ElementRef, OnInit, InjectionToken } from '@angular/core';
4
- import { PortalContent } from '@lucca-front/ng/core';
4
+ import { PortalContent, LuTranslation } from '@lucca-front/ng/core';
5
5
 
6
6
  declare class DataTableBodyComponent {
7
7
  readonly group: _angular_core.InputSignal<PortalContent>;
@@ -35,13 +35,15 @@ declare class DataTableRowCellHeaderComponent extends BaseDataTableCell implemen
35
35
  readonly sort: _angular_core.ModelSignal<"none" | "ascending" | "descending">;
36
36
  readonly fixedWidth: _angular_core.InputSignal<string>;
37
37
  readonly inlineSize: _angular_core.InputSignal<string>;
38
+ readonly sortWithEllipsis: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
39
+ protected readonly sortButtonRef: _angular_core.Signal<ElementRef<HTMLElement>>;
38
40
  readonly insetInlineStart: _angular_core.Signal<string>;
39
41
  readonly insetInlineEnd: _angular_core.Signal<string>;
40
42
  readonly inlineSizePx: _angular_core.Signal<number>;
41
43
  ngAfterContentInit(): void;
42
44
  toggleSort(): void;
43
45
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataTableRowCellHeaderComponent, never>;
44
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataTableRowCellHeaderComponent, "th[luDataTableCell]", never, { "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "fixedWidth": { "alias": "fixedWidth"; "required": false; "isSignal": true; }; "inlineSize": { "alias": "inlineSize"; "required": false; "isSignal": true; }; }, { "sort": "sortChange"; }, never, ["*"], true, never>;
46
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataTableRowCellHeaderComponent, "th[luDataTableCell]", never, { "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "fixedWidth": { "alias": "fixedWidth"; "required": false; "isSignal": true; }; "inlineSize": { "alias": "inlineSize"; "required": false; "isSignal": true; }; "sortWithEllipsis": { "alias": "sortWithEllipsis"; "required": false; "isSignal": true; }; }, { "sort": "sortChange"; }, never, ["*"], true, never>;
45
47
  }
46
48
 
47
49
  declare class DataTableRowCellComponent extends BaseDataTableCell {
@@ -63,16 +65,13 @@ declare class DataTableHeadComponent {
63
65
  readonly sticky: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
64
66
  readonly isFirstVisible: _angular_core.WritableSignal<boolean>;
65
67
  readonly cols: _angular_core.Signal<readonly DataTableRowCellHeaderComponent[]>;
68
+ tableRef: _lucca_front_ng_data_table.DataTableComponent;
66
69
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataTableHeadComponent, never>;
67
70
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataTableHeadComponent, "thead[luDataTableHead]", never, { "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; }, {}, ["cols"], ["*"], true, never>;
68
71
  }
69
72
 
70
- interface LuDataTableTranslations {
71
- move: string;
72
- }
73
-
74
73
  declare class DataTableRowComponent {
75
- readonly intl: _angular_core.InputSignalWithTransform<LuDataTableTranslations, Partial<LuDataTableTranslations>>;
74
+ readonly intl: _angular_core.InputSignalWithTransform<_lucca_front_ng_data_table.LuDataTableTranslations, Partial<_lucca_front_ng_data_table.LuDataTableTranslations>>;
76
75
  readonly bodyRef: _lucca_front_ng_data_table.DataTableBodyComponent;
77
76
  readonly headRef: _lucca_front_ng_data_table.DataTableHeadComponent;
78
77
  readonly footRef: _lucca_front_ng_data_table.DataTableFootComponent;
@@ -97,6 +96,7 @@ declare class DataTableComponent implements OnInit {
97
96
  readonly nested: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
98
97
  readonly drag: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
99
98
  readonly noOverflow: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
99
+ readonly empty: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
100
100
  readonly responsive: _angular_core.InputSignal<Partial<Record<"layoutFixedAtMediaMinXXXS" | "layoutFixedAtMediaMinXXS" | "layoutFixedAtMediaMinXS" | "layoutFixedAtMediaMinS" | "layoutFixedAtMediaMinM" | "layoutFixedAtMediaMinL" | "layoutFixedAtMediaMinXL" | "layoutFixedAtMediaMinXXL" | "layoutFixedAtMediaMinXXXL" | "layoutFixedAtContainerMinXXXS" | "layoutFixedAtContainerMinXXS" | "layoutFixedAtContainerMinXS" | "layoutFixedAtContainerMinS" | "layoutFixedAtContainerMinM" | "layoutFixedAtContainerMinL" | "layoutFixedAtContainerMinXL" | "layoutFixedAtContainerMinXXL" | "layoutFixedAtContainerMinXXXL", true>>>;
101
101
  readonly verticalAlign: _angular_core.InputSignal<"top" | "middle" | "bottom">;
102
102
  readonly rows: _angular_core.Signal<readonly DataTableRowComponent[]>;
@@ -132,7 +132,7 @@ declare class DataTableComponent implements OnInit {
132
132
  constructor();
133
133
  ngOnInit(): void;
134
134
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataTableComponent, never>;
135
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataTableComponent, "lu-data-table", never, { "hover": { "alias": "hover"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "layoutFixed": { "alias": "layoutFixed"; "required": false; "isSignal": true; }; "cellBorder": { "alias": "cellBorder"; "required": false; "isSignal": true; }; "nested": { "alias": "nested"; "required": false; "isSignal": true; }; "drag": { "alias": "drag"; "required": false; "isSignal": true; }; "noOverflow": { "alias": "noOverflow"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; "verticalAlign": { "alias": "verticalAlign"; "required": false; "isSignal": true; }; "stickyColsStart": { "alias": "stickyColsStart"; "required": false; "isSignal": true; }; "stickyColsEnd": { "alias": "stickyColsEnd"; "required": false; "isSignal": true; }; }, {}, ["rows", "header"], ["*", "[dataTablePagination]"], true, never>;
135
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataTableComponent, "lu-data-table", never, { "hover": { "alias": "hover"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "layoutFixed": { "alias": "layoutFixed"; "required": false; "isSignal": true; }; "cellBorder": { "alias": "cellBorder"; "required": false; "isSignal": true; }; "nested": { "alias": "nested"; "required": false; "isSignal": true; }; "drag": { "alias": "drag"; "required": false; "isSignal": true; }; "noOverflow": { "alias": "noOverflow"; "required": false; "isSignal": true; }; "empty": { "alias": "empty"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; "verticalAlign": { "alias": "verticalAlign"; "required": false; "isSignal": true; }; "stickyColsStart": { "alias": "stickyColsStart"; "required": false; "isSignal": true; }; "stickyColsEnd": { "alias": "stickyColsEnd"; "required": false; "isSignal": true; }; }, {}, ["rows", "header"], ["*", "[dataTablePagination]"], true, never>;
136
136
  }
137
137
 
138
138
  declare const LU_DATA_TABLE_INSTANCE: InjectionToken<DataTableComponent>;
@@ -147,5 +147,11 @@ type DataTableVerticalAlign = (typeof DATA_TABLE_VERTICAL_ALIGN)[number];
147
147
  declare const DATA_TABLE_ALIGN: readonly ["start", "center", "end"];
148
148
  type DataTableAlign = (typeof DATA_TABLE_ALIGN)[number];
149
149
 
150
- export { DATA_TABLE_ALIGN, DATA_TABLE_SORT, DATA_TABLE_VERTICAL_ALIGN, DataTableBodyComponent, DataTableComponent, DataTableFootComponent, DataTableHeadComponent, DataTableRowCellComponent, DataTableRowCellHeaderComponent, DataTableRowComponent, LU_DATA_TABLE_INSTANCE };
151
- export type { DataTableAlign, DataTableSort, DataTableVerticalAlign };
150
+ declare const LU_DATA_TABLE_TRANSLATIONS: InjectionToken<LuTranslation<LuDataTableTranslations>>;
151
+ interface LuDataTableTranslations {
152
+ move: string;
153
+ }
154
+ declare const luDataTableTranslations: LuTranslation<LuDataTableTranslations>;
155
+
156
+ export { DATA_TABLE_ALIGN, DATA_TABLE_SORT, DATA_TABLE_VERTICAL_ALIGN, DataTableBodyComponent, DataTableComponent, DataTableFootComponent, DataTableHeadComponent, DataTableRowCellComponent, DataTableRowCellHeaderComponent, DataTableRowComponent, LU_DATA_TABLE_INSTANCE, LU_DATA_TABLE_TRANSLATIONS, luDataTableTranslations };
157
+ export type { DataTableAlign, DataTableSort, DataTableVerticalAlign, LuDataTableTranslations };
@@ -1,10 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
- import { PipeTransform, OnInit, ChangeDetectorRef, ElementRef, Renderer2, EventEmitter, AfterViewInit, ViewContainerRef, InjectionToken } from '@angular/core';
2
+ import { PipeTransform, OnInit, ChangeDetectorRef, ElementRef, Renderer2, InjectionToken, EventEmitter, AfterViewInit, ViewContainerRef } from '@angular/core';
3
3
  import { ALuDateAdapter, LuDateGranularity, ELuDateGranularity, LuTranslation } from '@lucca-front/ng/core';
4
+ import * as _lucca_front_ng_date from '@lucca-front/ng/date';
4
5
  import { ControlValueAccessor, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
5
6
  import { ALuInput } from '@lucca-front/ng/input';
6
7
  import { ALuPickerPanel, ILuInputWithPicker } from '@lucca-front/ng/picker';
7
- import * as _lucca_front_ng_date from '@lucca-front/ng/date';
8
8
  import { Overlay } from '@angular/cdk/overlay';
9
9
  import { ALuSelectInputComponent } from '@lucca-front/ng/select';
10
10
  import { Observable } from 'rxjs';
@@ -26,11 +26,6 @@ declare class LuDateAdapterModule {
26
26
  static ɵinj: i0.ɵɵInjectorDeclaration<LuDateAdapterModule>;
27
27
  }
28
28
 
29
- interface LuCalendarInputLabel {
30
- previous: string;
31
- next: string;
32
- }
33
-
34
29
  interface ICalendarItem<D> {
35
30
  id: string;
36
31
  date: D;
@@ -88,7 +83,7 @@ declare class LuCalendarInputComponent<D> extends ALuInput<D> implements Control
88
83
  private _locale;
89
84
  private _factory;
90
85
  private _adapter;
91
- readonly intl: i0.InputSignalWithTransform<LuCalendarInputLabel, Partial<LuCalendarInputLabel>>;
86
+ readonly intl: i0.InputSignalWithTransform<_lucca_front_ng_date.LuCalendarInputLabel, Partial<_lucca_front_ng_date.LuCalendarInputLabel>>;
92
87
  readonly min: i0.InputSignal<D>;
93
88
  readonly max: i0.InputSignal<D>;
94
89
  readonly granularity: i0.InputSignal<string>;
@@ -127,6 +122,13 @@ declare class LuCalendarInputComponent<D> extends ALuInput<D> implements Control
127
122
  static ɵcmp: i0.ɵɵComponentDeclaration<LuCalendarInputComponent<any>, "lu-calendar", never, { "intl": { "alias": "intl"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "granularity": { "alias": "granularity"; "required": false; "isSignal": true; }; "startOn": { "alias": "startOn"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
128
123
  }
129
124
 
125
+ declare const LU_CALENDARINPUT_TRANSLATIONS: InjectionToken<LuTranslation<LuCalendarInputLabel>>;
126
+ interface LuCalendarInputLabel {
127
+ previous: string;
128
+ next: string;
129
+ }
130
+ declare const luCalendarInputTranslations: LuTranslation<LuCalendarInputLabel>;
131
+
130
132
  declare class LuDatePickerComponent<D = Date> extends ALuPickerPanel<D> {
131
133
  private _adapter;
132
134
  _value: D;
@@ -271,5 +273,5 @@ interface ILuDateSelectInputLabel {
271
273
  }
272
274
  declare const luDateSelectInputTranslations: LuTranslation<ILuDateSelectInputLabel>;
273
275
 
274
- export { LU_DATE_INPUT_TRANSLATIONS, LU_DATE_SELECT_INPUT_TRANSLATIONS, LuCalendarInputComponent, LuDateAdapterModule, LuDateAdapterPipe, LuDateInputDirective, LuDateModule, LuDatePickerComponent, LuDatePickerModule, LuDateSelectInputComponent, LuDateSelectInputModule, LuHumanizeDateFormatter, LuHumanizeDatePipe, getRelativeTime, luDateInputTranslations, luDateSelectInputTranslations, luRelativeTimeFormatUnit, relativeTimeTimer };
275
- export type { ILuDateInputLabel, ILuDateSelectInputLabel, LuRelativeTime, LuRelativeTimeFormatUnit };
276
+ export { LU_CALENDARINPUT_TRANSLATIONS, LU_DATE_INPUT_TRANSLATIONS, LU_DATE_SELECT_INPUT_TRANSLATIONS, LuCalendarInputComponent, LuDateAdapterModule, LuDateAdapterPipe, LuDateInputDirective, LuDateModule, LuDatePickerComponent, LuDatePickerModule, LuDateSelectInputComponent, LuDateSelectInputModule, LuHumanizeDateFormatter, LuHumanizeDatePipe, getRelativeTime, luCalendarInputTranslations, luDateInputTranslations, luDateSelectInputTranslations, luRelativeTimeFormatUnit, relativeTimeTimer };
277
+ export type { ILuDateInputLabel, ILuDateSelectInputLabel, LuCalendarInputLabel, LuRelativeTime, LuRelativeTimeFormatUnit };