@leanix/components 0.4.818 → 0.4.820
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/leanix-components.mjs +1744 -124
- package/fesm2022/leanix-components.mjs.map +1 -1
- package/lib/core-ui/components/avatar/avatar.component.d.ts +27 -0
- package/lib/core-ui/components/avatar-group/avatar-group.component.d.ts +45 -0
- package/lib/core-ui/components/badge/badge.component.d.ts +10 -0
- package/lib/core-ui/components/banner/banner.component.d.ts +18 -0
- package/lib/core-ui/components/button/button.component.d.ts +22 -0
- package/lib/core-ui/components/button-group/button-group.component.d.ts +26 -0
- package/lib/core-ui/components/card/card.component.d.ts +16 -3
- package/lib/core-ui/components/collapsible/collapsible.component.d.ts +39 -0
- package/lib/core-ui/components/counter/counter.component.d.ts +20 -3
- package/lib/core-ui/components/ellipsis/ellipsis.component.d.ts +13 -0
- package/lib/core-ui/components/empty-state/empty-state.component.d.ts +38 -15
- package/lib/core-ui/components/page-header/page-header.component.d.ts +2 -1
- package/lib/core-ui/components/skeleton/skeleton.component.d.ts +16 -4
- package/lib/core-ui/components/spinner/spinner.component.d.ts +15 -0
- package/lib/core-ui/components/stepper/stepper.component.d.ts +23 -0
- package/lib/core-ui/components/table/table-header/table-header.component.d.ts +26 -5
- package/lib/core-ui/components/table/table.component.d.ts +25 -2
- package/lib/core-ui/components/tokenizer/token/token.component.d.ts +16 -0
- package/lib/core-ui/components/tokenizer/tokenizer-overflow-popover/tokenizer-overflow-popover.component.d.ts +38 -0
- package/lib/core-ui/components/tokenizer/tokenizer.component.d.ts +22 -5
- package/lib/core-ui/icon/fa-to-sap-icon.pipe.d.ts +2 -1
- package/lib/core-ui/tooltip/tooltip.component.d.ts +30 -0
- package/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.d.ts +79 -0
- package/lib/forms-ui/components/basic-dropdown-item/basic-dropdown-item.component.d.ts +36 -0
- package/lib/forms-ui/components/breadcrumb/breadcrumb.component.d.ts +20 -2
- package/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.d.ts +34 -0
- package/lib/forms-ui/components/cdk-options-sub-dropdown/cdk-options-sub-dropdown.component.d.ts +21 -0
- package/lib/forms-ui/components/currency/currency-input.component.d.ts +53 -0
- package/lib/forms-ui/components/currency/currency-symbol.component.d.ts +16 -0
- package/lib/forms-ui/components/date-input/date-input.component.d.ts +135 -33
- package/lib/forms-ui/components/date-picker-ui/datepicker-inner.component.d.ts +35 -0
- package/lib/forms-ui/components/date-picker-ui/daypicker.component.d.ts +6 -0
- package/lib/forms-ui/components/date-picker-ui/monthpicker.component.d.ts +6 -0
- package/lib/forms-ui/components/date-picker-ui/yearpicker.component.d.ts +6 -0
- package/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.d.ts +27 -2
- package/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.d.ts +37 -6
- package/lib/forms-ui/components/error-message/error-message.component.d.ts +15 -0
- package/lib/forms-ui/components/form-error/form-error.component.d.ts +18 -0
- package/lib/forms-ui/components/input/input.component.d.ts +27 -0
- package/lib/forms-ui/components/multi-select/multi-select-selection/multi-select-selection.component.d.ts +30 -0
- package/lib/forms-ui/components/multi-select/multi-select.component.d.ts +80 -0
- package/lib/forms-ui/components/option/option.component.d.ts +41 -0
- package/lib/forms-ui/components/option-group/option-group.component.d.ts +24 -2
- package/lib/forms-ui/components/option-group-dropdown/option-group-dropdown.component.d.ts +51 -4
- package/lib/forms-ui/components/options-dropdown/options-dropdown.component.d.ts +73 -0
- package/lib/forms-ui/components/options-sub-dropdown/options-sub-dropdown.component.d.ts +22 -0
- package/lib/forms-ui/components/picker/picker.component.d.ts +25 -17
- package/lib/forms-ui/components/picker-option/picker-option.component.d.ts +34 -5
- package/lib/forms-ui/components/pill-item/pill-item.component.d.ts +25 -0
- package/lib/forms-ui/components/pill-list/pill-list.component.d.ts +58 -2
- package/lib/forms-ui/components/responsive-input/responsive-input.component.d.ts +20 -0
- package/lib/forms-ui/components/rich-text-editor/components/rich-text-editor-toolbar/rich-text-editor-toolbar.component.d.ts +26 -0
- package/lib/forms-ui/components/rich-text-editor/extensions/link/components/link-modal/link-modal.component.d.ts +15 -0
- package/lib/forms-ui/components/rich-text-editor/extensions/table/table-bubble-menu/table-bubble-menu.component.d.ts +17 -0
- package/lib/forms-ui/components/rich-text-editor/ngx-tiptap/node-view.component.d.ts +14 -0
- package/lib/forms-ui/components/single-select/single-select.component.d.ts +39 -0
- package/lib/forms-ui/components/sorting-dropdown/sorting-dropdown.component.d.ts +24 -0
- package/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.d.ts +20 -0
- package/lib/forms-ui/components/switch/switch.component.d.ts +37 -8
- package/lib/modal-ui/components/modal-footer/modal-footer.component.d.ts +19 -0
- package/lib/modal-ui/components/modal-header/modal-header.component.d.ts +22 -0
- package/lib/popover-ui/components/popover/popover.component.d.ts +15 -24
- package/lib/tab-ui/components/tab/tab.component.d.ts +66 -5
- package/lib/tab-ui/components/tab-group/tab-group.component.d.ts +29 -1
- package/package.json +1 -1
|
@@ -84,11 +84,21 @@ const GLOBAL_TRANSLATION_OPTIONS = new InjectionToken('GLOBAL_TRANSLATION_OPTION
|
|
|
84
84
|
|
|
85
85
|
/**
|
|
86
86
|
* Badge component is used to show a small piece of information in a colored badge.
|
|
87
|
+
* Commonly used for status indicators, counts, or labels.
|
|
88
|
+
*
|
|
89
|
+
* ### Example
|
|
90
|
+
* @example
|
|
91
|
+
* ```html
|
|
92
|
+
* <lx-badge [content]="42" color="blue" />
|
|
93
|
+
* <lx-badge [content]="'New'" color="green" />
|
|
94
|
+
* <lx-badge [content]="errorCount" color="red" />
|
|
95
|
+
* ```
|
|
87
96
|
*/
|
|
88
97
|
class BadgeComponent {
|
|
89
98
|
constructor() {
|
|
90
99
|
/**
|
|
91
100
|
* The color of the badge component
|
|
101
|
+
* @default 'blue'
|
|
92
102
|
*/
|
|
93
103
|
this.color = 'blue';
|
|
94
104
|
}
|
|
@@ -121,15 +131,33 @@ const BANNER_SIZE = {
|
|
|
121
131
|
|
|
122
132
|
/**
|
|
123
133
|
* Banner can be used to display important information to the user. It allows for any type of content to be displayed in a banner.
|
|
134
|
+
* Banners automatically display an icon based on the type when using the 'big' size.
|
|
135
|
+
*
|
|
136
|
+
* ### Projection slots
|
|
137
|
+
* - Default slot: Main content of the banner (text, links, actions)
|
|
138
|
+
*
|
|
139
|
+
* ### Example
|
|
140
|
+
* @example
|
|
141
|
+
* ```html
|
|
142
|
+
* <lx-banner [type]="'warning'" [size]="'big'">
|
|
143
|
+
* <p>Your session will expire in 5 minutes.</p>
|
|
144
|
+
* </lx-banner>
|
|
145
|
+
*
|
|
146
|
+
* <lx-banner [type]="'success'" [size]="'small'">
|
|
147
|
+
* Changes saved successfully!
|
|
148
|
+
* </lx-banner>
|
|
149
|
+
* ```
|
|
124
150
|
*/
|
|
125
151
|
class BannerComponent {
|
|
126
152
|
constructor() {
|
|
127
153
|
/**
|
|
128
154
|
* The type of the banner
|
|
155
|
+
* @default BANNER_TYPE.WARNING
|
|
129
156
|
*/
|
|
130
157
|
this.type = input(BANNER_TYPE.WARNING);
|
|
131
158
|
/**
|
|
132
159
|
* The size of the banner
|
|
160
|
+
* @default BANNER_SIZE.BIG
|
|
133
161
|
*/
|
|
134
162
|
this.size = input(BANNER_SIZE.BIG);
|
|
135
163
|
this.showIcon = computed(() => this.size() === BANNER_SIZE.BIG);
|
|
@@ -175,8 +203,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
175
203
|
}, imports: [IconComponent$1], template: "<div class=\"banner-wrapper\">\n @if (showIcon()) {\n <ui5-icon [name]=\"iconName()\" [design]=\"iconDesign()\" />\n }\n <div class=\"banner-content\">\n <ng-content />\n </div>\n</div>\n", styles: [":host{display:block;border-left:2px solid}:host[type=success]{background-color:color-mix(in srgb,#33cc58 10%,white);border-color:#33cc58}:host[type=info]{background-color:color-mix(in srgb,#2889ff 10%,white);border-color:#2889ff}:host[type=warning]{background-color:color-mix(in srgb,#ffb62a 10%,white);border-color:#ffb62a}:host[type=danger]{background-color:color-mix(in srgb,#f96464 10%,white);border-color:#f96464}:host[size=big]{margin-bottom:12px}:host[size=big] .banner-wrapper{position:relative;padding:.75rem}:host[size=big] .banner-content{padding-left:2rem}:host[size=big] ui5-icon{position:absolute;top:.875rem;left:.75rem}:host[size=small]{margin-bottom:6px}:host[size=small] .banner-wrapper{padding:.5rem}:host ::ng-deep .banner-content h4{margin-top:0;color:inherit}:host ::ng-deep .banner-content .alert-link{font-weight:700}:host ::ng-deep .banner-content>p,:host ::ng-deep .banner-content>ul{margin-bottom:0}:host ::ng-deep .banner-content p+p{margin-bottom:5px}:host ::ng-deep .banner-content p:last-child{margin-bottom:0}\n"] }]
|
|
176
204
|
}] });
|
|
177
205
|
|
|
206
|
+
/**
|
|
207
|
+
* Button group component arranges multiple buttons in a horizontal layout with configurable separators.
|
|
208
|
+
* Use 'margin' for spaced buttons or 'border' for connected buttons with dividing lines.
|
|
209
|
+
*
|
|
210
|
+
* ### Projection slots
|
|
211
|
+
* - Default slot: Button elements to display in the group
|
|
212
|
+
*
|
|
213
|
+
* ### Example
|
|
214
|
+
* @example
|
|
215
|
+
* ```html
|
|
216
|
+
* <lx-button-group separator="margin">
|
|
217
|
+
* <button lx-button color="primary">Save</button>
|
|
218
|
+
* <button lx-button>Cancel</button>
|
|
219
|
+
* </lx-button-group>
|
|
220
|
+
*
|
|
221
|
+
* <lx-button-group separator="border">
|
|
222
|
+
* <button lx-button mode="outline">View</button>
|
|
223
|
+
* <button lx-button mode="outline">Edit</button>
|
|
224
|
+
* <button lx-button mode="outline">Delete</button>
|
|
225
|
+
* </lx-button-group>
|
|
226
|
+
* ```
|
|
227
|
+
*/
|
|
178
228
|
class ButtonGroupComponent {
|
|
179
229
|
constructor() {
|
|
230
|
+
/**
|
|
231
|
+
* The type of separator between buttons: 'margin' for spacing or 'border' for dividing lines.
|
|
232
|
+
* @default 'margin'
|
|
233
|
+
*/
|
|
180
234
|
this.separator = 'margin';
|
|
181
235
|
}
|
|
182
236
|
get hasMarginSeperator() {
|
|
@@ -204,39 +258,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
204
258
|
/**
|
|
205
259
|
* Button component is used to create a button with different styles and sizes. This uses native button element and
|
|
206
260
|
* only provides styling and some additional features like loading spinner.
|
|
261
|
+
*
|
|
262
|
+
* ### Projection slots
|
|
263
|
+
* - Default slot: Button label or content
|
|
264
|
+
*
|
|
265
|
+
* ### Example
|
|
266
|
+
* @example
|
|
267
|
+
* ```html
|
|
268
|
+
* <button lx-button color="primary" size="medium">Save</button>
|
|
269
|
+
* <button lx-button icon="delete" color="danger" mode="outline">Delete</button>
|
|
270
|
+
* <button lx-button [showSpinner]="isLoading" [disabled]="isLoading">Submit</button>
|
|
271
|
+
* <button lx-button icon="download" endIcon="slim-arrow-down" mode="ghost">Export</button>
|
|
272
|
+
* <button lx-button icon="action-settings" [square]="true" [circle]="true" mode="ghost"></button>
|
|
273
|
+
* ```
|
|
207
274
|
*/
|
|
208
275
|
class ButtonComponent {
|
|
209
276
|
constructor() {
|
|
210
277
|
/**
|
|
211
278
|
* The size of the button.
|
|
279
|
+
* @default 'medium'
|
|
212
280
|
*/
|
|
213
281
|
this.size = 'medium';
|
|
214
282
|
/**
|
|
215
283
|
* The color of the button.
|
|
284
|
+
* @default 'default'
|
|
216
285
|
*/
|
|
217
286
|
this.color = 'default';
|
|
218
287
|
/**
|
|
219
288
|
* The mode of the button.
|
|
289
|
+
* @default 'solid'
|
|
220
290
|
*/
|
|
221
291
|
this.mode = 'solid';
|
|
222
292
|
/**
|
|
223
293
|
* The pressed state of the button. This simulates the `:active` state of the button.
|
|
294
|
+
* @default false
|
|
224
295
|
*/
|
|
225
296
|
this.pressed = false;
|
|
226
297
|
/**
|
|
227
298
|
* The selected state of the button. This simulates the `:hover` state of the button.
|
|
299
|
+
* @default false
|
|
228
300
|
*/
|
|
229
301
|
this.selected = false;
|
|
230
302
|
/**
|
|
231
303
|
* This makes the button square.
|
|
304
|
+
* @default false
|
|
232
305
|
*/
|
|
233
306
|
this.square = false;
|
|
234
307
|
/**
|
|
235
308
|
* This makes corners rounded. Use with `square` for a true circle.
|
|
309
|
+
* @default false
|
|
236
310
|
*/
|
|
237
311
|
this.circle = false;
|
|
238
312
|
/**
|
|
239
313
|
* This disables the button.
|
|
314
|
+
* @default false
|
|
240
315
|
*/
|
|
241
316
|
this.disabled = false;
|
|
242
317
|
/**
|
|
@@ -269,6 +344,7 @@ class ButtonComponent {
|
|
|
269
344
|
this.endIconKind = computed(() => (isFontAwesomeIcon(this.endIconName()) ? 'fa' : 'sap'));
|
|
270
345
|
/**
|
|
271
346
|
* This shows a spinner inside the button.
|
|
347
|
+
* @default false
|
|
272
348
|
*/
|
|
273
349
|
this.showSpinner = false;
|
|
274
350
|
}
|
|
@@ -361,13 +437,26 @@ function removeFontAwesomeVariant(iconName) {
|
|
|
361
437
|
}
|
|
362
438
|
|
|
363
439
|
/**
|
|
364
|
-
*
|
|
365
|
-
*
|
|
440
|
+
* A simple container component for displaying content in a card-like style.
|
|
441
|
+
* Provides consistent styling and layout for grouped content.
|
|
442
|
+
*
|
|
443
|
+
* ### Projection slots
|
|
444
|
+
* - Default slot: All card content including title, body, and any other elements
|
|
445
|
+
*
|
|
446
|
+
* ### Example
|
|
447
|
+
* @example
|
|
448
|
+
* ```html
|
|
449
|
+
* <lx-card [dataStyle]="'white'">
|
|
450
|
+
* <h3>Card Title</h3>
|
|
451
|
+
* <p>Card content goes here.</p>
|
|
452
|
+
* </lx-card>
|
|
453
|
+
* ```
|
|
366
454
|
*/
|
|
367
455
|
class CardComponent {
|
|
368
456
|
constructor() {
|
|
369
457
|
/**
|
|
370
|
-
* The style of the card.
|
|
458
|
+
* The visual style variant of the card.
|
|
459
|
+
* @default 'white'
|
|
371
460
|
*/
|
|
372
461
|
this.dataStyle = 'white';
|
|
373
462
|
}
|
|
@@ -384,14 +473,53 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
384
473
|
args: ['attr.data-style']
|
|
385
474
|
}] } });
|
|
386
475
|
|
|
476
|
+
/**
|
|
477
|
+
* An expandable and collapsible section container with a toggle button.
|
|
478
|
+
* Useful for organizing content that can be shown or hidden on demand.
|
|
479
|
+
*
|
|
480
|
+
* ### Projection slots
|
|
481
|
+
* - Default slot: The title or header content that is always visible. The entire component is clickable to toggle.
|
|
482
|
+
*
|
|
483
|
+
* ### Example
|
|
484
|
+
* @example
|
|
485
|
+
* ```html
|
|
486
|
+
* <lx-collapsible [toggleTitle]="'Show Details'" [(collapsed)]="isCollapsed">
|
|
487
|
+
* <h3>Section Title</h3>
|
|
488
|
+
* <span class="subtitle">Additional info</span>
|
|
489
|
+
* </lx-collapsible>
|
|
490
|
+
* ```
|
|
491
|
+
*/
|
|
387
492
|
class CollapsibleComponent {
|
|
388
493
|
constructor() {
|
|
389
494
|
this.NAME = 'CollapsibleComponent';
|
|
495
|
+
/**
|
|
496
|
+
* When true, prevents the section from being toggled. The toggle button remains visible but disabled.
|
|
497
|
+
* @default false
|
|
498
|
+
*/
|
|
390
499
|
this.disableSectionToggle = false;
|
|
500
|
+
/**
|
|
501
|
+
* When true, hides the toggle button entirely. The section cannot be collapsed/expanded.
|
|
502
|
+
* @default false
|
|
503
|
+
*/
|
|
391
504
|
this.hideSectionToggle = false;
|
|
505
|
+
/**
|
|
506
|
+
* Size of the toggle button (arrow icon).
|
|
507
|
+
* @default 'small'
|
|
508
|
+
*/
|
|
392
509
|
this.toggleSize = 'small';
|
|
510
|
+
/**
|
|
511
|
+
* Text label displayed as the title attribute of the toggle button for accessibility.
|
|
512
|
+
* @default ''
|
|
513
|
+
*/
|
|
393
514
|
this.toggleTitle = '';
|
|
515
|
+
/**
|
|
516
|
+
* Whether the section is currently collapsed. Can be used with two-way binding.
|
|
517
|
+
* @default false
|
|
518
|
+
*/
|
|
394
519
|
this.collapsed = false;
|
|
520
|
+
/**
|
|
521
|
+
* Emitted when the collapsed state changes, either through user interaction or programmatic changes.
|
|
522
|
+
*/
|
|
395
523
|
this.collapsedChange = new EventEmitter();
|
|
396
524
|
}
|
|
397
525
|
get notClickable() {
|
|
@@ -435,12 +563,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
435
563
|
|
|
436
564
|
/**
|
|
437
565
|
* Counter component is used to create a counter with different styles and sizes.
|
|
566
|
+
* Useful for displaying notification counts, item quantities, or numeric indicators.
|
|
567
|
+
*
|
|
568
|
+
* ### Example
|
|
569
|
+
* @example
|
|
570
|
+
* ```html
|
|
571
|
+
* <lx-counter [content]="5" color="primary" size="default" />
|
|
572
|
+
* <lx-counter [content]="99" color="red" size="small" />
|
|
573
|
+
* <lx-counter [content]="unreadCount" color="green" />
|
|
574
|
+
* ```
|
|
438
575
|
*/
|
|
439
576
|
class CounterComponent {
|
|
440
577
|
constructor() {
|
|
441
|
-
/**
|
|
578
|
+
/**
|
|
579
|
+
* The size of the counter.
|
|
580
|
+
* @default 'default'
|
|
581
|
+
*/
|
|
442
582
|
this.size = 'default';
|
|
443
|
-
/**
|
|
583
|
+
/**
|
|
584
|
+
* The color of the counter.
|
|
585
|
+
* @default 'primary'
|
|
586
|
+
*/
|
|
444
587
|
this.color = 'primary';
|
|
445
588
|
}
|
|
446
589
|
get classes() {
|
|
@@ -613,6 +756,14 @@ const LX_ELLIPSIS_DEBOUNCE_ON_RESIZE = new InjectionToken('LX_ELLIPSIS_DEBOUNCE_
|
|
|
613
756
|
});
|
|
614
757
|
/**
|
|
615
758
|
* You can set `max-width` CSS property on your `lx-ellipsis` host element or the parent element if you want its content to never exceed a specific width.
|
|
759
|
+
* The component automatically truncates overflowing text and provides a "Show more" / "Show less" toggle button.
|
|
760
|
+
*
|
|
761
|
+
* ### Example
|
|
762
|
+
* @example
|
|
763
|
+
* ```html
|
|
764
|
+
* <lx-ellipsis [content]="longDescription" style="max-width: 300px;" />
|
|
765
|
+
* <lx-ellipsis [content]="userInput" [escapeHtmlInContent]="true" />
|
|
766
|
+
* ```
|
|
616
767
|
*/
|
|
617
768
|
class EllipsisComponent {
|
|
618
769
|
/** @internal */
|
|
@@ -623,10 +774,15 @@ class EllipsisComponent {
|
|
|
623
774
|
this.hostEl = hostEl;
|
|
624
775
|
this.resizeObserverService = resizeObserverService;
|
|
625
776
|
this.translateService = translateService;
|
|
777
|
+
/**
|
|
778
|
+
* The text content to display and potentially truncate.
|
|
779
|
+
* @default ''
|
|
780
|
+
*/
|
|
626
781
|
this.content = '';
|
|
627
782
|
/**
|
|
628
783
|
* Only set this to false if the content is not a user provided string
|
|
629
784
|
* or if you sanitize the provided content yourself.
|
|
785
|
+
* @default true
|
|
630
786
|
*/
|
|
631
787
|
this.escapeHtmlInContent = true;
|
|
632
788
|
/** @internal */
|
|
@@ -739,59 +895,82 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
739
895
|
args: ['showMoreButton', { read: ElementRef }]
|
|
740
896
|
}], content$: [] } });
|
|
741
897
|
|
|
898
|
+
/**
|
|
899
|
+
* Displays an empty state with an optional icon, title, description, action buttons, and a more link.
|
|
900
|
+
* Useful for showing initial states before data is loaded or when no data is available.
|
|
901
|
+
*
|
|
902
|
+
* ### Projection slots
|
|
903
|
+
* - Default slot: Description text or additional content to display below the title
|
|
904
|
+
*
|
|
905
|
+
* ### Example
|
|
906
|
+
* @example
|
|
907
|
+
* ```html
|
|
908
|
+
* <lx-empty-state
|
|
909
|
+
* [title]="'No items found'"
|
|
910
|
+
* [icon]="'inbox'"
|
|
911
|
+
* [buttonLabel]="'Add Item'"
|
|
912
|
+
* [secondaryButtonLabel]="'Import'"
|
|
913
|
+
* [moreLinkLabel]="'Learn more'"
|
|
914
|
+
* [moreLink]="'https://docs.example.com'"
|
|
915
|
+
* (buttonClicked)="onAddItem()"
|
|
916
|
+
* (secondaryButtonClicked)="onImport()"
|
|
917
|
+
* >
|
|
918
|
+
* <p>Start by adding your first item or importing existing data.</p>
|
|
919
|
+
* </lx-empty-state>
|
|
920
|
+
* ```
|
|
921
|
+
*/
|
|
742
922
|
class EmptyStateComponent {
|
|
743
923
|
constructor() {
|
|
744
924
|
/**
|
|
745
|
-
* The title to be displayed
|
|
925
|
+
* The title to be displayed. Can contain HTML.
|
|
746
926
|
*/
|
|
747
927
|
this.title = input.required();
|
|
748
928
|
/**
|
|
749
|
-
* The SAP icon to show in the empty state.
|
|
929
|
+
* The SAP icon name to show in the empty state (e.g., 'inbox', 'add-document').
|
|
750
930
|
*/
|
|
751
931
|
this.icon = input();
|
|
752
932
|
/**
|
|
753
|
-
* The main call-to-action button label
|
|
933
|
+
* The main call-to-action button label. If not provided, the button will not be shown.
|
|
754
934
|
*/
|
|
755
935
|
this.buttonLabel = input();
|
|
756
936
|
/**
|
|
757
|
-
* The secondary call-to-action button label
|
|
937
|
+
* The secondary call-to-action button label. If not provided, the button will not be shown.
|
|
758
938
|
*/
|
|
759
939
|
this.secondaryButtonLabel = input();
|
|
760
940
|
/**
|
|
761
|
-
* Whether the empty state is in a loading state. If true,
|
|
941
|
+
* Whether the empty state is in a loading state. If true, action buttons will show a spinner.
|
|
942
|
+
* @default false
|
|
762
943
|
*/
|
|
763
944
|
this.loading = input(false);
|
|
764
945
|
/**
|
|
765
|
-
* The more link
|
|
946
|
+
* The text label for the more link.
|
|
766
947
|
*/
|
|
767
948
|
this.moreLinkLabel = input();
|
|
768
949
|
/**
|
|
769
|
-
* The URL of the more link
|
|
950
|
+
* The URL of the more link. Can be a string for external links or an array for Angular router links.
|
|
770
951
|
*/
|
|
771
952
|
this.moreLink = input();
|
|
772
953
|
/**
|
|
773
|
-
* Whether the more link should be opened in a new tab
|
|
774
|
-
*
|
|
954
|
+
* Whether the more link should be opened in a new tab.
|
|
775
955
|
* @default true
|
|
776
956
|
*/
|
|
777
957
|
this.openMoreLinkInNewTab = input(true);
|
|
778
958
|
/**
|
|
779
|
-
* The size of the empty state
|
|
780
|
-
*
|
|
781
|
-
* @default medium
|
|
959
|
+
* The size of the empty state.
|
|
960
|
+
* @default 'medium'
|
|
782
961
|
*/
|
|
783
962
|
this.size = input('medium');
|
|
784
963
|
this.useRouterLink = computed(() => Array.isArray(this.moreLink()));
|
|
785
964
|
/**
|
|
786
|
-
* Emitted when the main call-to-action button is clicked
|
|
965
|
+
* Emitted when the main call-to-action button is clicked.
|
|
787
966
|
*/
|
|
788
967
|
this.buttonClicked = new EventEmitter();
|
|
789
968
|
/**
|
|
790
|
-
* Emitted when the secondary call-to-action button is clicked
|
|
969
|
+
* Emitted when the secondary call-to-action button is clicked.
|
|
791
970
|
*/
|
|
792
971
|
this.secondaryButtonClicked = new EventEmitter();
|
|
793
972
|
/**
|
|
794
|
-
* Emitted when the more link is clicked
|
|
973
|
+
* Emitted when the more link is clicked.
|
|
795
974
|
*/
|
|
796
975
|
this.moreLinkClicked = new EventEmitter();
|
|
797
976
|
}
|
|
@@ -822,10 +1001,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
822
1001
|
* (or ancestor with new rendering context, created, for example, with `transform: translate(0, 0)`
|
|
823
1002
|
* - `fadeBackground`: Sets background to 60% transparent white. TODO: Always use for fullSpace* classes and remove.
|
|
824
1003
|
*
|
|
1004
|
+
* ### Projection slots
|
|
1005
|
+
* - Default slot: Optional text or content to display below the spinner
|
|
1006
|
+
*
|
|
825
1007
|
* @deprecated Use the `ui5-busy-indicator` component instead.
|
|
1008
|
+
*
|
|
1009
|
+
* ### Example
|
|
1010
|
+
* @example
|
|
1011
|
+
* ```html
|
|
1012
|
+
* <lx-spinner class="fullSpace fadeBackground">Loading...</lx-spinner>
|
|
1013
|
+
* <lx-spinner [fadeBackground]="true" />
|
|
1014
|
+
* ```
|
|
826
1015
|
*/
|
|
827
1016
|
class SpinnerComponent {
|
|
828
1017
|
constructor() {
|
|
1018
|
+
/**
|
|
1019
|
+
* Applies a semi-transparent white background.
|
|
1020
|
+
* @default false
|
|
1021
|
+
* @deprecated Use the `fadeBackground` CSS class instead.
|
|
1022
|
+
*/
|
|
829
1023
|
this.fadeBackground = false;
|
|
830
1024
|
}
|
|
831
1025
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
@@ -845,6 +1039,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
845
1039
|
* Stepper component is a wrapper around the Angular CDK Stepper component. It provides a way to create a linear
|
|
846
1040
|
* sequence of steps that guide users through a process.
|
|
847
1041
|
*
|
|
1042
|
+
* ### Projection slots
|
|
1043
|
+
* Each `cdk-step` element projects its content into the stepper's content area when that step is active.
|
|
1044
|
+
*
|
|
1045
|
+
* ### Example
|
|
1046
|
+
* @example
|
|
1047
|
+
* ```html
|
|
1048
|
+
* <lx-stepper [selectedIndex]="currentStep">
|
|
1049
|
+
* <cdk-step label="Personal Info">
|
|
1050
|
+
* <form>
|
|
1051
|
+
* <input type="text" placeholder="Name" />
|
|
1052
|
+
* </form>
|
|
1053
|
+
* </cdk-step>
|
|
1054
|
+
* <cdk-step label="Contact Details">
|
|
1055
|
+
* <form>
|
|
1056
|
+
* <input type="email" placeholder="Email" />
|
|
1057
|
+
* </form>
|
|
1058
|
+
* </cdk-step>
|
|
1059
|
+
* <cdk-step label="Review">
|
|
1060
|
+
* <p>Review your information</p>
|
|
1061
|
+
* </cdk-step>
|
|
1062
|
+
* </lx-stepper>
|
|
1063
|
+
* ```
|
|
1064
|
+
*
|
|
848
1065
|
* ## Usage
|
|
849
1066
|
*
|
|
850
1067
|
* 1. Import `LxCoreUiModule` module from `@leanix/components` and `CdkStepperModule` module from `@angular/cdk/stepper` in your module where you want to use the component, or in case of a standalone parent component, import the
|
|
@@ -910,6 +1127,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
910
1127
|
* The `lx-table` directive can be applied to `<table>` elements to provide a common styling.
|
|
911
1128
|
* Furthermore it supports column sorting in combination with `<lx-th>` for table headers.
|
|
912
1129
|
*
|
|
1130
|
+
* ### Example
|
|
1131
|
+
* @example
|
|
1132
|
+
* ```html
|
|
1133
|
+
* <table lx-table [isSortable]="true" [(sort)]="sort">
|
|
1134
|
+
* <thead>
|
|
1135
|
+
* <tr>
|
|
1136
|
+
* <lx-th column="name">Name</lx-th>
|
|
1137
|
+
* <lx-th column="status" [disableSortClear]="true">Status</lx-th>
|
|
1138
|
+
* <lx-th column="actions" [disableSort]="true">Actions</lx-th>
|
|
1139
|
+
* </tr>
|
|
1140
|
+
* </thead>
|
|
1141
|
+
* <tbody>
|
|
1142
|
+
* <tr>
|
|
1143
|
+
* <td>Item 1</td>
|
|
1144
|
+
* <td>Active</td>
|
|
1145
|
+
* <td><button>Edit</button></td>
|
|
1146
|
+
* </tr>
|
|
1147
|
+
* </tbody>
|
|
1148
|
+
* </table>
|
|
1149
|
+
* ```
|
|
913
1150
|
*
|
|
914
1151
|
* ## Usage
|
|
915
1152
|
*
|
|
@@ -951,11 +1188,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
951
1188
|
class TableComponent {
|
|
952
1189
|
constructor() {
|
|
953
1190
|
/**
|
|
954
|
-
*
|
|
1191
|
+
* Enables or disables the sortability of the table. When enabled, `<lx-th>` elements with a `column` attribute become sortable.
|
|
1192
|
+
* @default false
|
|
955
1193
|
*/
|
|
956
1194
|
this.isSortable = input(false);
|
|
957
1195
|
/**
|
|
958
|
-
* The sort state of the table
|
|
1196
|
+
* The sort state of the table containing the column key and sort order (ASC, DESC, or undefined).
|
|
1197
|
+
* Can be used with two-way binding to control and react to sort changes.
|
|
1198
|
+
* @default {}
|
|
959
1199
|
*/
|
|
960
1200
|
this.sort = model({});
|
|
961
1201
|
}
|
|
@@ -1020,22 +1260,43 @@ registerIcon('sort-asc', {
|
|
|
1020
1260
|
});
|
|
1021
1261
|
/**
|
|
1022
1262
|
* The `lx-th` can be used in combination with `lx-table` to implement sortable `<table>` elements.
|
|
1263
|
+
* Renders a table header cell with optional sorting functionality.
|
|
1264
|
+
*
|
|
1265
|
+
* ### Projection slots
|
|
1266
|
+
* - Default slot: The header text content
|
|
1267
|
+
*
|
|
1268
|
+
* ### Example
|
|
1269
|
+
* @example
|
|
1270
|
+
* ```html
|
|
1271
|
+
* <table lx-table [isSortable]="true" [(sort)]="sort">
|
|
1272
|
+
* <thead>
|
|
1273
|
+
* <tr>
|
|
1274
|
+
* <lx-th column="name">Name</lx-th>
|
|
1275
|
+
* <lx-th column="date" [disableSortClear]="true">Date</lx-th>
|
|
1276
|
+
* <lx-th column="actions" [disableSort]="true">Actions</lx-th>
|
|
1277
|
+
* </tr>
|
|
1278
|
+
* </thead>
|
|
1279
|
+
* </table>
|
|
1280
|
+
* ```
|
|
1023
1281
|
*/
|
|
1024
1282
|
class TableHeaderComponent {
|
|
1025
1283
|
#sort;
|
|
1026
1284
|
constructor(parentTable) {
|
|
1027
1285
|
this.parentTable = parentTable;
|
|
1028
1286
|
/**
|
|
1029
|
-
*
|
|
1287
|
+
* Disables sorting for this column even when the table has sorting enabled.
|
|
1288
|
+
* @default false
|
|
1030
1289
|
*/
|
|
1031
1290
|
this.disableSort = false;
|
|
1032
1291
|
/**
|
|
1033
|
-
* Prevents the user from clearing the sort.
|
|
1034
|
-
*
|
|
1292
|
+
* Prevents the user from clearing the sort state.
|
|
1293
|
+
* When true, only allows toggling between ascending and descending order.
|
|
1294
|
+
* @default false
|
|
1035
1295
|
*/
|
|
1036
1296
|
this.disableSortClear = false;
|
|
1037
1297
|
/**
|
|
1038
|
-
*
|
|
1298
|
+
* Emitted whenever the user changes the sort order by clicking the header.
|
|
1299
|
+
* Provides the new sort state with column key and order.
|
|
1039
1300
|
*/
|
|
1040
1301
|
this.sortChange = new EventEmitter();
|
|
1041
1302
|
this.sortable = computed(() => (this.parentTable?.isSortable() && !this.disableSort) ?? false);
|
|
@@ -2129,10 +2390,40 @@ function isValidY(y) {
|
|
|
2129
2390
|
return ['top', 'center', 'bottom'].includes(y);
|
|
2130
2391
|
}
|
|
2131
2392
|
|
|
2393
|
+
/**
|
|
2394
|
+
* Tooltip component for displaying contextual information on hover.
|
|
2395
|
+
*
|
|
2396
|
+
* Supports plain text or HTML content with configurable positioning.
|
|
2397
|
+
* Typically used via the `lxTooltip` directive rather than directly.
|
|
2398
|
+
*
|
|
2399
|
+
* ### Example
|
|
2400
|
+
* @example
|
|
2401
|
+
* ```html
|
|
2402
|
+
* <button [lxTooltip]="'Save changes'">Save</button>
|
|
2403
|
+
*
|
|
2404
|
+
* <button [lxTooltip]="'<strong>Warning:</strong> Cannot be undone'" [lxTooltipHtml]="true">Delete</button>
|
|
2405
|
+
* ```
|
|
2406
|
+
*/
|
|
2132
2407
|
class TooltipComponent {
|
|
2133
2408
|
constructor() {
|
|
2409
|
+
/**
|
|
2410
|
+
* The tooltip content to display as plain text or HTML.
|
|
2411
|
+
*
|
|
2412
|
+
* @default ''
|
|
2413
|
+
*/
|
|
2134
2414
|
this.content = '';
|
|
2415
|
+
/**
|
|
2416
|
+
* Whether the content should be rendered as HTML.
|
|
2417
|
+
* When false, content is displayed as plain text.
|
|
2418
|
+
*
|
|
2419
|
+
* @default false
|
|
2420
|
+
*/
|
|
2135
2421
|
this.isHtmlContent = false;
|
|
2422
|
+
/**
|
|
2423
|
+
* The position of the tooltip relative to the target element.
|
|
2424
|
+
*
|
|
2425
|
+
* @default { x: 'center', y: 'top' }
|
|
2426
|
+
*/
|
|
2136
2427
|
this.position = {
|
|
2137
2428
|
x: 'center',
|
|
2138
2429
|
y: 'top'
|
|
@@ -2674,7 +2965,8 @@ const ICON_MAP = {
|
|
|
2674
2965
|
'fa-users': ['family-care'],
|
|
2675
2966
|
'fa-window': ['lx-icons/window'], // ['tnt/subject'],
|
|
2676
2967
|
'fa-wrench': ['wrench'],
|
|
2677
|
-
'fa-yen-sign': ['lx-icons/yen-sign']
|
|
2968
|
+
'fa-yen-sign': ['lx-icons/yen-sign'],
|
|
2969
|
+
'fa-sigma': ['sum']
|
|
2678
2970
|
};
|
|
2679
2971
|
/**
|
|
2680
2972
|
* Retrieves the SAP icon for a given Font Awesome icon name.
|
|
@@ -2697,7 +2989,8 @@ const FA_MODIFIER_REGEX = /\s*\b(fas|far|fal|fad|fab)\b\s*/g;
|
|
|
2697
2989
|
* Useful for scenarios in which icon names need to be mapped at runtime,
|
|
2698
2990
|
* e.g. because they are stored in the backend.
|
|
2699
2991
|
*
|
|
2700
|
-
* @example
|
|
2992
|
+
* @example
|
|
2993
|
+
* ```html
|
|
2701
2994
|
* <ui5-icon [name]="fontAwesomeIcon() | lxFaToSapIcon" />
|
|
2702
2995
|
* ```
|
|
2703
2996
|
*/
|
|
@@ -2798,11 +3091,35 @@ const AVATAR_COLORS = [
|
|
|
2798
3091
|
'#fc9785'
|
|
2799
3092
|
];
|
|
2800
3093
|
|
|
3094
|
+
/**
|
|
3095
|
+
* Avatar component displays a user's profile picture or a placeholder icon for technical users.
|
|
3096
|
+
* Optionally includes a mailto link when an email is provided.
|
|
3097
|
+
*
|
|
3098
|
+
* ### Example
|
|
3099
|
+
* @example
|
|
3100
|
+
* ```html
|
|
3101
|
+
* <lx-avatar [user]="currentUser" size="M" />
|
|
3102
|
+
* <lx-avatar [user]="{ displayName: 'Bot', technicalUser: true }" [showMailToLink]="false" />
|
|
3103
|
+
* <lx-avatar [user]="inactiveUser" [disabled]="true" size="S" />
|
|
3104
|
+
* ```
|
|
3105
|
+
*/
|
|
2801
3106
|
class AvatarComponent {
|
|
2802
3107
|
constructor(imageReader) {
|
|
2803
3108
|
this.imageReader = imageReader;
|
|
3109
|
+
/**
|
|
3110
|
+
* The size of the avatar.
|
|
3111
|
+
* @default 'M'
|
|
3112
|
+
*/
|
|
2804
3113
|
this.size = 'M';
|
|
3114
|
+
/**
|
|
3115
|
+
* Whether to show a mailto link when clicking on the avatar.
|
|
3116
|
+
* @default true
|
|
3117
|
+
*/
|
|
2805
3118
|
this.showMailToLink = true;
|
|
3119
|
+
/**
|
|
3120
|
+
* Whether the avatar should appear in a disabled state.
|
|
3121
|
+
* @default false
|
|
3122
|
+
*/
|
|
2806
3123
|
this.disabled = false;
|
|
2807
3124
|
this.NAME = 'AvatarComponent';
|
|
2808
3125
|
this.imageURL = this.imageReader.getAvatar(DEFAULT_IMAGE_ID, this.size, this.user?.displayName);
|
|
@@ -2833,6 +3150,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
2833
3150
|
type: Input
|
|
2834
3151
|
}] } });
|
|
2835
3152
|
|
|
3153
|
+
/**
|
|
3154
|
+
* Avatar group component displays multiple user avatars in a compact layout.
|
|
3155
|
+
* Supports automatic overflow handling with a "+N" indicator and overlay expansion.
|
|
3156
|
+
* Includes tooltip showing all user names on hover and click-to-expand functionality.
|
|
3157
|
+
*
|
|
3158
|
+
* ### Example
|
|
3159
|
+
* @example
|
|
3160
|
+
* ```html
|
|
3161
|
+
* <lx-avatar-group [users]="teamMembers" size="M" />
|
|
3162
|
+
* <lx-avatar-group [users]="assignees" type="individual" [maxLength]="5" />
|
|
3163
|
+
* <lx-avatar-group
|
|
3164
|
+
* [users]="participants"
|
|
3165
|
+
* [title]="'Project Team'"
|
|
3166
|
+
* [disabledUserIds]="inactiveUserIds"
|
|
3167
|
+
* [autoScale]="true"
|
|
3168
|
+
* />
|
|
3169
|
+
* ```
|
|
3170
|
+
*/
|
|
2836
3171
|
class AvatarGroupComponent {
|
|
2837
3172
|
get userNames() {
|
|
2838
3173
|
return this.users
|
|
@@ -2845,11 +3180,35 @@ class AvatarGroupComponent {
|
|
|
2845
3180
|
this.zone = zone;
|
|
2846
3181
|
this.resizeObserverService = resizeObserverService;
|
|
2847
3182
|
this.NAME = 'AvatarGroupComponent';
|
|
3183
|
+
/**
|
|
3184
|
+
* Array of user objects to display as avatars.
|
|
3185
|
+
* @default []
|
|
3186
|
+
*/
|
|
2848
3187
|
this.users = [];
|
|
3188
|
+
/**
|
|
3189
|
+
* The size of all avatars in the group.
|
|
3190
|
+
* @default 'M'
|
|
3191
|
+
*/
|
|
2849
3192
|
this.size = 'M';
|
|
3193
|
+
/**
|
|
3194
|
+
* The display type: 'individual' for separate avatars or 'group' for overlapping.
|
|
3195
|
+
* @default 'group'
|
|
3196
|
+
*/
|
|
2850
3197
|
this.type = 'group';
|
|
3198
|
+
/**
|
|
3199
|
+
* Maximum number of avatars to display before showing "+N" indicator.
|
|
3200
|
+
* @default 0
|
|
3201
|
+
*/
|
|
2851
3202
|
this.maxLength = 0;
|
|
3203
|
+
/**
|
|
3204
|
+
* Whether to automatically scale down avatars to fit container width.
|
|
3205
|
+
* @default false
|
|
3206
|
+
*/
|
|
2852
3207
|
this.autoScale = false;
|
|
3208
|
+
/**
|
|
3209
|
+
* Array of user IDs that should be displayed in a disabled state.
|
|
3210
|
+
* @default []
|
|
3211
|
+
*/
|
|
2853
3212
|
this.disabledUserIds = [];
|
|
2854
3213
|
this.overlayVisible = false;
|
|
2855
3214
|
}
|
|
@@ -2923,7 +3282,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
2923
3282
|
*
|
|
2924
3283
|
*
|
|
2925
3284
|
* ### Example
|
|
2926
|
-
* @example
|
|
3285
|
+
* @example
|
|
3286
|
+
* ```html
|
|
2927
3287
|
* <lx-page-header [pageTitle]="'Agile Tracking'">
|
|
2928
3288
|
* <ui5-breadcrumbs>
|
|
2929
3289
|
* <ui5-breadcrumbs-item routerLink="/">Root Page</ui5-breadcrumbs-item>
|
|
@@ -2995,11 +3355,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
2995
3355
|
* Use skeleton loaders for pages or sections that load content progressively, like text and images. The component can
|
|
2996
3356
|
* be used to compose various scenarios like placeholders for thumbnails, lists, and avatars. See the example
|
|
2997
3357
|
* [patterns](?path=/docs/skeleton-patterns--docs) for more details.
|
|
3358
|
+
*
|
|
3359
|
+
* ### Example
|
|
3360
|
+
* @example
|
|
3361
|
+
* ```html
|
|
3362
|
+
* <lx-skeleton width="100%" height="20px" />
|
|
3363
|
+
* <lx-skeleton width="200px" height="200px" borderRadius="50%" />
|
|
3364
|
+
* <lx-skeleton width="80%" height="16px" color="dark" />
|
|
3365
|
+
* ```
|
|
2998
3366
|
*/
|
|
2999
3367
|
class SkeletonComponent {
|
|
3000
3368
|
constructor() {
|
|
3001
3369
|
/**
|
|
3002
|
-
* Color of the skeleton element. 'dark' or 'light' are supported.
|
|
3370
|
+
* Color of the skeleton element. 'dark' or 'light' are supported.
|
|
3371
|
+
* @default 'light'
|
|
3003
3372
|
*/
|
|
3004
3373
|
this.color = 'light';
|
|
3005
3374
|
}
|
|
@@ -3031,6 +3400,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
3031
3400
|
type: Input
|
|
3032
3401
|
}] } });
|
|
3033
3402
|
|
|
3403
|
+
/**
|
|
3404
|
+
* A token wrapper component used within `lx-tokenizer` to represent individual items.
|
|
3405
|
+
* The tokenizer manages visibility of tokens based on available space.
|
|
3406
|
+
*
|
|
3407
|
+
* ### Projection slots
|
|
3408
|
+
* - Default slot: The content to display inside the token (text, icons, badges, etc.)
|
|
3409
|
+
*
|
|
3410
|
+
* ### Example
|
|
3411
|
+
* @example
|
|
3412
|
+
* ```html
|
|
3413
|
+
* <lx-tokenizer>
|
|
3414
|
+
* <lx-token>Token One</lx-token>
|
|
3415
|
+
* <lx-token>Token Two</lx-token>
|
|
3416
|
+
* </lx-tokenizer>
|
|
3417
|
+
* ```
|
|
3418
|
+
*/
|
|
3034
3419
|
class TokenComponent {
|
|
3035
3420
|
constructor(elementRef) {
|
|
3036
3421
|
this.elementRef = elementRef;
|
|
@@ -3049,13 +3434,51 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
3049
3434
|
args: [{ selector: 'lx-token', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content />\n" }]
|
|
3050
3435
|
}], ctorParameters: () => [{ type: i0.ElementRef }] });
|
|
3051
3436
|
|
|
3437
|
+
/**
|
|
3438
|
+
* A companion component for `lx-tokenizer` that displays overflowing tokens in a popover.
|
|
3439
|
+
* Automatically listens to the tokenizer's overflow events and shows a popover anchored to the counter button.
|
|
3440
|
+
*
|
|
3441
|
+
* ### Projection slots
|
|
3442
|
+
* - `popoverTemplate`: Template to render inside the popover. Receives the `startIndex` of overflowing tokens as context.
|
|
3443
|
+
*
|
|
3444
|
+
* ### Example
|
|
3445
|
+
* @example
|
|
3446
|
+
* ```html
|
|
3447
|
+
* <lx-tokenizer #tokenizer [active]="true">
|
|
3448
|
+
* <lx-token>Item 1</lx-token>
|
|
3449
|
+
* <lx-token>Item 2</lx-token>
|
|
3450
|
+
* <lx-token>Item 3</lx-token>
|
|
3451
|
+
* </lx-tokenizer>
|
|
3452
|
+
*
|
|
3453
|
+
* <lx-tokenizer-overflow-popover [tokenizer]="tokenizer">
|
|
3454
|
+
* <ng-template #popoverTemplate let-startIndex>
|
|
3455
|
+
* <div class="overflow-items">
|
|
3456
|
+
* @for (item of getOverflowItems(startIndex); track item) {
|
|
3457
|
+
* <div>{{ item }}</div>
|
|
3458
|
+
* }
|
|
3459
|
+
* </div>
|
|
3460
|
+
* </ng-template>
|
|
3461
|
+
* </lx-tokenizer-overflow-popover>
|
|
3462
|
+
* ```
|
|
3463
|
+
*/
|
|
3052
3464
|
class TokenizerOverflowPopoverComponent {
|
|
3053
3465
|
constructor() {
|
|
3054
3466
|
this.destroyRef = inject(DestroyRef);
|
|
3055
3467
|
this.startIndex = signal(0);
|
|
3056
3468
|
this.changeDetectorRef = inject(ChangeDetectorRef);
|
|
3469
|
+
/**
|
|
3470
|
+
* Reference to the tokenizer component to listen for overflow events.
|
|
3471
|
+
*/
|
|
3057
3472
|
this.tokenizer = input.required();
|
|
3473
|
+
/**
|
|
3474
|
+
* Horizontal alignment of the popover relative to the counter button.
|
|
3475
|
+
* @default 'after'
|
|
3476
|
+
*/
|
|
3058
3477
|
this.horizontalAlign = input('after');
|
|
3478
|
+
/**
|
|
3479
|
+
* Vertical alignment of the popover relative to the counter button.
|
|
3480
|
+
* @default 'start'
|
|
3481
|
+
*/
|
|
3059
3482
|
this.verticalAlign = input('start');
|
|
3060
3483
|
effect(() => {
|
|
3061
3484
|
this.overflowClickSubscription?.unsubscribe();
|
|
@@ -3087,7 +3510,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
3087
3510
|
}] } });
|
|
3088
3511
|
|
|
3089
3512
|
/**
|
|
3090
|
-
*
|
|
3513
|
+
* Renders a list of items (`lx-token`) into a container and hides overflowing items behind a counter (e.g., "+4").
|
|
3514
|
+
* Automatically calculates how many tokens fit based on available width and responds to container resize events.
|
|
3515
|
+
*
|
|
3516
|
+
* ### Projection slots
|
|
3517
|
+
* - `lx-token`: Individual token items to be managed by the tokenizer
|
|
3518
|
+
*
|
|
3519
|
+
* ### Example
|
|
3520
|
+
* @example
|
|
3521
|
+
* ```html
|
|
3522
|
+
* <lx-tokenizer [active]="true" (overflowPlaceholderClick)="onOverflowClick($event)">
|
|
3523
|
+
* <lx-token>Item 1</lx-token>
|
|
3524
|
+
* <lx-token>Item 2</lx-token>
|
|
3525
|
+
* <lx-token>Item 3</lx-token>
|
|
3526
|
+
* <lx-token>Item 4</lx-token>
|
|
3527
|
+
* </lx-tokenizer>
|
|
3528
|
+
* ```
|
|
3091
3529
|
*
|
|
3092
3530
|
* ## Usage
|
|
3093
3531
|
*
|
|
@@ -3135,14 +3573,16 @@ class TokenizerComponent {
|
|
|
3135
3573
|
this.overflowItems = signal([]);
|
|
3136
3574
|
this.overflowItemCount = computed(() => this.overflowItems().length);
|
|
3137
3575
|
this.showCounter = computed(() => this.active() && this.overflowItemCount() > 0);
|
|
3138
|
-
/**
|
|
3576
|
+
/**
|
|
3577
|
+
* Enables or disables tokenization. When false, all tokens are shown regardless of available space.
|
|
3578
|
+
* @default true
|
|
3579
|
+
*/
|
|
3139
3580
|
this.active = input(true);
|
|
3140
3581
|
this.active$ = toObservable(this.active);
|
|
3141
3582
|
this.overflowStartIndex = signal(null);
|
|
3142
3583
|
/**
|
|
3143
|
-
* Emitted when the counter button is clicked
|
|
3144
|
-
*
|
|
3145
|
-
* @param counterElement The counter button element
|
|
3584
|
+
* Emitted when the overflow counter button (e.g., "+4") is clicked.
|
|
3585
|
+
* Provides the index of the first hidden token and the counter button element for positioning popovers.
|
|
3146
3586
|
*/
|
|
3147
3587
|
this.overflowPlaceholderClick = new EventEmitter();
|
|
3148
3588
|
afterRenderEffect(() => {
|
|
@@ -3350,9 +3790,37 @@ function isSupportedNode(node) {
|
|
|
3350
3790
|
return node.nodeType === Node.ELEMENT_NODE && node.nodeName !== 'SCRIPT' && node.nodeName !== 'STYLE';
|
|
3351
3791
|
}
|
|
3352
3792
|
|
|
3793
|
+
/**
|
|
3794
|
+
* Renders a dropdown item with label and optional description.
|
|
3795
|
+
* Supports text highlighting and custom styling options.
|
|
3796
|
+
*
|
|
3797
|
+
* ### Projection slots
|
|
3798
|
+
* - `optionLabelSuffix`: Template to append to the label (e.g., badges, icons)
|
|
3799
|
+
*
|
|
3800
|
+
* ### Example
|
|
3801
|
+
* @example
|
|
3802
|
+
* ```html
|
|
3803
|
+
* <lx-basic-dropdown-item
|
|
3804
|
+
* label="Option Name"
|
|
3805
|
+
* description="Additional details"
|
|
3806
|
+
* highlightTerm="search">
|
|
3807
|
+
* <ng-template #optionLabelSuffix>
|
|
3808
|
+
* <span class="badge">New</span>
|
|
3809
|
+
* </ng-template>
|
|
3810
|
+
* </lx-basic-dropdown-item>
|
|
3811
|
+
* ```
|
|
3812
|
+
*/
|
|
3353
3813
|
class BasicDropdownItemComponent {
|
|
3354
3814
|
constructor() {
|
|
3815
|
+
/**
|
|
3816
|
+
* Font weight for the label text.
|
|
3817
|
+
* @default 'bold'
|
|
3818
|
+
*/
|
|
3355
3819
|
this.labelFontWeight = 'bold';
|
|
3820
|
+
/**
|
|
3821
|
+
* Font style for the description text.
|
|
3822
|
+
* @default 'normal'
|
|
3823
|
+
*/
|
|
3356
3824
|
this.descriptionFontStyle = 'normal';
|
|
3357
3825
|
}
|
|
3358
3826
|
get hasDescription() {
|
|
@@ -3560,6 +4028,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
3560
4028
|
args: ['keyboardSelectContainer', { static: true }]
|
|
3561
4029
|
}] } });
|
|
3562
4030
|
|
|
4031
|
+
/**
|
|
4032
|
+
* A simple dropdown component for selecting a single value from a flat list of options.
|
|
4033
|
+
* Supports keyboard navigation, custom templates, infinite scrolling, and the ability to create new options.
|
|
4034
|
+
* Uses Angular CDK overlay for positioning and supports both top and bottom dropdown placement.
|
|
4035
|
+
*
|
|
4036
|
+
* ### Projection slots
|
|
4037
|
+
* - `optionTemplate`: Custom template for rendering each option
|
|
4038
|
+
* - `createNewOptionTemplate`: Custom template for the "create new option" button
|
|
4039
|
+
* - `descriptionTemplateRef`: Custom template for additional description content
|
|
4040
|
+
*
|
|
4041
|
+
* ### Example
|
|
4042
|
+
* @example
|
|
4043
|
+
* ```html
|
|
4044
|
+
* <lx-basic-dropdown
|
|
4045
|
+
* [options]="items"
|
|
4046
|
+
* [labelKey]="'name'"
|
|
4047
|
+
* [itemKey]="'id'"
|
|
4048
|
+
* [placeholder]="'Select an item'"
|
|
4049
|
+
* (onItemSelected)="handleSelection($event)">
|
|
4050
|
+
* </lx-basic-dropdown>
|
|
4051
|
+
* ```
|
|
4052
|
+
*/
|
|
3563
4053
|
class BasicDropdownComponent extends KeyboardSelectDirective {
|
|
3564
4054
|
static isNewItem(items, term, key) {
|
|
3565
4055
|
if (!term) {
|
|
@@ -3574,17 +4064,59 @@ class BasicDropdownComponent extends KeyboardSelectDirective {
|
|
|
3574
4064
|
constructor() {
|
|
3575
4065
|
super();
|
|
3576
4066
|
this.NAME = 'BasicDropdownComponent';
|
|
4067
|
+
/**
|
|
4068
|
+
* Array of options to display in the dropdown.
|
|
4069
|
+
*/
|
|
3577
4070
|
this.options = [];
|
|
4071
|
+
/**
|
|
4072
|
+
* Index of the option to be selected initially.
|
|
4073
|
+
* @default -1
|
|
4074
|
+
*/
|
|
3578
4075
|
this.initiallySelectedIndex = -1;
|
|
4076
|
+
/**
|
|
4077
|
+
* Whether the dropdown is in a loading state.
|
|
4078
|
+
* @default false
|
|
4079
|
+
*/
|
|
3579
4080
|
this.loading = false;
|
|
4081
|
+
/**
|
|
4082
|
+
* Padding variant for the dropdown items.
|
|
4083
|
+
* @default 'default'
|
|
4084
|
+
*/
|
|
3580
4085
|
this.padding = 'default';
|
|
4086
|
+
/**
|
|
4087
|
+
* Whether to show the "create new option" button.
|
|
4088
|
+
* @default false
|
|
4089
|
+
*/
|
|
3581
4090
|
this.showCreateNewOption = false;
|
|
4091
|
+
/**
|
|
4092
|
+
* Map of disabled options, keyed by the item's unique identifier.
|
|
4093
|
+
*/
|
|
3582
4094
|
this.disabledOptions = {};
|
|
4095
|
+
/**
|
|
4096
|
+
* Whether to use CDK overlay positioning.
|
|
4097
|
+
* @default false
|
|
4098
|
+
*/
|
|
3583
4099
|
this.overlayPositioning = false;
|
|
4100
|
+
/**
|
|
4101
|
+
* Whether to truncate long option text.
|
|
4102
|
+
* @default false
|
|
4103
|
+
*/
|
|
3584
4104
|
this.truncateOptions = false;
|
|
4105
|
+
/**
|
|
4106
|
+
* Event emitted when an option is selected.
|
|
4107
|
+
*/
|
|
3585
4108
|
this.onItemSelected = new EventEmitter();
|
|
4109
|
+
/**
|
|
4110
|
+
* Event emitted when the user scrolls to the bottom, triggering a request for more entries (infinite scroll).
|
|
4111
|
+
*/
|
|
3586
4112
|
this.triggerRequestForMoreEntries = new EventEmitter();
|
|
4113
|
+
/**
|
|
4114
|
+
* Event emitted when a new option label is selected (for creating new items).
|
|
4115
|
+
*/
|
|
3587
4116
|
this.newOptionLabelSelected = new EventEmitter();
|
|
4117
|
+
/**
|
|
4118
|
+
* Event emitted when the "create new option" button is clicked.
|
|
4119
|
+
*/
|
|
3588
4120
|
this.createNewOptionSelected = new EventEmitter();
|
|
3589
4121
|
this.isTopDropdown = false;
|
|
3590
4122
|
}
|
|
@@ -3761,13 +4293,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
3761
4293
|
}]
|
|
3762
4294
|
}], ctorParameters: () => [{ type: i0.ElementRef }] });
|
|
3763
4295
|
|
|
4296
|
+
/**
|
|
4297
|
+
* Groups options under a labeled section inside dropdowns.
|
|
4298
|
+
* Used to organize related options within OptionsDropdownComponent, SingleSelectComponent, or MultiSelectComponent.
|
|
4299
|
+
*
|
|
4300
|
+
* ### Projection slots
|
|
4301
|
+
* - Default slot: Option components (`lx-option`) to group together.
|
|
4302
|
+
*
|
|
4303
|
+
* ### Example
|
|
4304
|
+
* @example
|
|
4305
|
+
* ```html
|
|
4306
|
+
* <lx-option-group label="Recent Items" [hasSelectedState]="true">
|
|
4307
|
+
* <lx-option [value]="1">Item 1</lx-option>
|
|
4308
|
+
* <lx-option [value]="2">Item 2</lx-option>
|
|
4309
|
+
* </lx-option-group>
|
|
4310
|
+
* ```
|
|
4311
|
+
*/
|
|
3764
4312
|
class OptionGroupComponent {
|
|
3765
4313
|
constructor() {
|
|
3766
4314
|
/**
|
|
3767
|
-
*
|
|
3768
|
-
*
|
|
4315
|
+
* Whether option children have a selected state.
|
|
4316
|
+
* When true, aligns the padding of the group label with the options.
|
|
4317
|
+
* @default true
|
|
3769
4318
|
*/
|
|
3770
4319
|
this.hasSelectedState = true;
|
|
4320
|
+
/**
|
|
4321
|
+
* Event emitted when an option within the group is selected.
|
|
4322
|
+
* Emits the selected option's value.
|
|
4323
|
+
*/
|
|
3771
4324
|
this.select = new EventEmitter();
|
|
3772
4325
|
}
|
|
3773
4326
|
selectOption(value) {
|
|
@@ -3787,6 +4340,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
3787
4340
|
type: Output
|
|
3788
4341
|
}] } });
|
|
3789
4342
|
|
|
4343
|
+
/**
|
|
4344
|
+
* Individual option used inside OptionsDropdownComponent, SingleSelectComponent, or MultiSelectComponent.
|
|
4345
|
+
* Can be used standalone or grouped within an OptionGroupComponent for organized selections.
|
|
4346
|
+
*/
|
|
3790
4347
|
class OptionComponent {
|
|
3791
4348
|
selectOption(event) {
|
|
3792
4349
|
if (this.disabled || this.hasSubdropdown) {
|
|
@@ -3807,8 +4364,20 @@ class OptionComponent {
|
|
|
3807
4364
|
constructor(group, elementRef) {
|
|
3808
4365
|
this.group = group;
|
|
3809
4366
|
this.elementRef = elementRef;
|
|
4367
|
+
/**
|
|
4368
|
+
* Whether the option is currently selected.
|
|
4369
|
+
* @default false
|
|
4370
|
+
*/
|
|
3810
4371
|
this.selected = false;
|
|
4372
|
+
/**
|
|
4373
|
+
* Whether the option is currently highlighted (e.g., via keyboard navigation).
|
|
4374
|
+
* @default false
|
|
4375
|
+
*/
|
|
3811
4376
|
this.isHighlighted = false;
|
|
4377
|
+
/**
|
|
4378
|
+
* Whether the option is disabled and cannot be interacted with.
|
|
4379
|
+
* @default false
|
|
4380
|
+
*/
|
|
3812
4381
|
this.disabled = false;
|
|
3813
4382
|
/**
|
|
3814
4383
|
* Is true when option has a selection nature like sorting.
|
|
@@ -3816,16 +4385,37 @@ class OptionComponent {
|
|
|
3816
4385
|
*
|
|
3817
4386
|
* Is false when option represents a one time action like printing.
|
|
3818
4387
|
* Cannot have selectedState when Option has dropdown
|
|
4388
|
+
* @default true
|
|
3819
4389
|
*/
|
|
3820
4390
|
this.hasSelectedState = true;
|
|
3821
4391
|
/**
|
|
4392
|
+
* The icon used to indicate selection state.
|
|
4393
|
+
* @default 'check'
|
|
3822
4394
|
* @deprecated Use the default `'check'` value. The `'circle'` option is deprecated and will be removed in a future release.
|
|
3823
4395
|
*/
|
|
3824
4396
|
this.selectIcon = 'check';
|
|
4397
|
+
/**
|
|
4398
|
+
* Event emitted when the option is selected.
|
|
4399
|
+
* Emits the option's value.
|
|
4400
|
+
*/
|
|
3825
4401
|
this.select = new EventEmitter();
|
|
4402
|
+
/**
|
|
4403
|
+
* Event emitted when the option's highlight state changes.
|
|
4404
|
+
* Emits a boolean indicating the new highlight state.
|
|
4405
|
+
*/
|
|
3826
4406
|
this.highlight = new EventEmitter();
|
|
4407
|
+
/**
|
|
4408
|
+
* Event emitted when an already selected option is clicked.
|
|
4409
|
+
*/
|
|
3827
4410
|
this.selectedClick = new EventEmitter();
|
|
4411
|
+
/**
|
|
4412
|
+
* Event emitted when a keyboard event occurs on the option.
|
|
4413
|
+
* Emits the KeyboardEvent for parent handling.
|
|
4414
|
+
*/
|
|
3828
4415
|
this.keyDownAction = new EventEmitter();
|
|
4416
|
+
/**
|
|
4417
|
+
* Event emitted when the mouse enters the option area.
|
|
4418
|
+
*/
|
|
3829
4419
|
this.mouseEnter = new EventEmitter();
|
|
3830
4420
|
this.hasSubdropdown = false;
|
|
3831
4421
|
this.isSuboption = false;
|
|
@@ -3915,6 +4505,24 @@ const TOP_RIGHT_POSITION$1 = {
|
|
|
3915
4505
|
};
|
|
3916
4506
|
const LEFT_ALIGN_POSITIONS$1 = [BOTTOM_LEFT_POSITION$1, TOP_LEFT_POSITION$1, BOTTOM_RIGHT_POSITION$1, TOP_RIGHT_POSITION$1];
|
|
3917
4507
|
const RIGHT_ALIGN_POSITIONS$1 = [BOTTOM_RIGHT_POSITION$1, TOP_RIGHT_POSITION$1, BOTTOM_LEFT_POSITION$1, TOP_LEFT_POSITION$1];
|
|
4508
|
+
/**
|
|
4509
|
+
* A dropdown component using CDK Overlay with keyboard navigation support.
|
|
4510
|
+
* Manages option selection, highlighting, and sub-dropdown interactions.
|
|
4511
|
+
*
|
|
4512
|
+
* ### Projection slots
|
|
4513
|
+
* - `[lxKeyboardActionSource]`: The trigger element (e.g., button) that opens the dropdown.
|
|
4514
|
+
* - Default slot: Dropdown options (`lx-option` components).
|
|
4515
|
+
*
|
|
4516
|
+
* ### Example
|
|
4517
|
+
* @example
|
|
4518
|
+
* ```html
|
|
4519
|
+
* <lx-cdk-options-dropdown [open]="isOpen" align="left" maxHeight="300px">
|
|
4520
|
+
* <button lxKeyboardActionSource>Select Option</button>
|
|
4521
|
+
* <lx-option [value]="1">Option 1</lx-option>
|
|
4522
|
+
* <lx-option [value]="2">Option 2</lx-option>
|
|
4523
|
+
* </lx-cdk-options-dropdown>
|
|
4524
|
+
* ```
|
|
4525
|
+
*/
|
|
3918
4526
|
class CdkOptionsDropdownComponent {
|
|
3919
4527
|
set open(value) {
|
|
3920
4528
|
if (this.disabled) {
|
|
@@ -3939,9 +4547,25 @@ class CdkOptionsDropdownComponent {
|
|
|
3939
4547
|
}
|
|
3940
4548
|
constructor(changeDetection) {
|
|
3941
4549
|
this.changeDetection = changeDetection;
|
|
4550
|
+
/**
|
|
4551
|
+
* Horizontal alignment of the dropdown relative to its trigger.
|
|
4552
|
+
* @default 'right'
|
|
4553
|
+
*/
|
|
3942
4554
|
this.align = 'right';
|
|
4555
|
+
/**
|
|
4556
|
+
* Whether to close the dropdown when the window is scrolled.
|
|
4557
|
+
* @default false
|
|
4558
|
+
*/
|
|
3943
4559
|
this.closeOnScroll = false;
|
|
4560
|
+
/**
|
|
4561
|
+
* Whether the dropdown trigger is disabled.
|
|
4562
|
+
* @default false
|
|
4563
|
+
*/
|
|
3944
4564
|
this.disabled = false;
|
|
4565
|
+
/**
|
|
4566
|
+
* Maximum height of the dropdown container. Use 'none' for no limit.
|
|
4567
|
+
* @default 'none'
|
|
4568
|
+
*/
|
|
3945
4569
|
this.maxHeight = 'none';
|
|
3946
4570
|
this.highlightedOptionIndex$ = new BehaviorSubject(0);
|
|
3947
4571
|
this._open = false;
|
|
@@ -4101,12 +4725,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
4101
4725
|
/**
|
|
4102
4726
|
* @deprecated Use the `ui5-breadcrumbs` instead.
|
|
4103
4727
|
*
|
|
4104
|
-
* Breadcrumb component
|
|
4728
|
+
* Breadcrumb component displays a list of labels showing the navigation path.
|
|
4729
|
+
* Supports ellipsing consecutive items into a dropdown for space efficiency.
|
|
4730
|
+
*
|
|
4731
|
+
* ### Example
|
|
4732
|
+
* @example
|
|
4733
|
+
* ```html
|
|
4734
|
+
* <lx-breadcrumb [breadcrumbs]="breadcrumbs"></lx-breadcrumb>
|
|
4735
|
+
* ```
|
|
4736
|
+
*
|
|
4737
|
+
* ```ts
|
|
4738
|
+
* breadcrumbs: Breadcrumb[] = [
|
|
4739
|
+
* { label: 'Home', onClick: (b) => this.navigate(b) },
|
|
4740
|
+
* { label: 'Products', onClick: (b) => this.navigate(b) },
|
|
4741
|
+
* { label: 'Category', ellipsed: true },
|
|
4742
|
+
* { label: 'Subcategory', ellipsed: true },
|
|
4743
|
+
* { label: 'Item Details' }
|
|
4744
|
+
* ];
|
|
4745
|
+
* ```
|
|
4105
4746
|
*/
|
|
4106
4747
|
class BreadcrumbComponent {
|
|
4107
4748
|
constructor() {
|
|
4108
4749
|
/**
|
|
4109
|
-
*
|
|
4750
|
+
* Array of breadcrumb items to display. Consecutive items with `ellipsed: true` are grouped into a dropdown.
|
|
4751
|
+
* @default []
|
|
4110
4752
|
*/
|
|
4111
4753
|
this.breadcrumbs = [];
|
|
4112
4754
|
/** @internal */
|
|
@@ -4179,9 +4821,29 @@ const TOP_RIGHT_POSITION = {
|
|
|
4179
4821
|
};
|
|
4180
4822
|
const LEFT_ALIGN_POSITIONS = [BOTTOM_LEFT_POSITION, TOP_LEFT_POSITION, BOTTOM_RIGHT_POSITION, TOP_RIGHT_POSITION];
|
|
4181
4823
|
const RIGHT_ALIGN_POSITIONS = [BOTTOM_RIGHT_POSITION, TOP_RIGHT_POSITION, BOTTOM_LEFT_POSITION, TOP_LEFT_POSITION];
|
|
4824
|
+
/**
|
|
4825
|
+
* A nested sub-dropdown that appears next to a parent option.
|
|
4826
|
+
* Opens on hover or keyboard navigation and supports both mouse and keyboard interactions.
|
|
4827
|
+
*
|
|
4828
|
+
* ### Projection slots
|
|
4829
|
+
* - Default slot: Nested dropdown options (`lx-option` components).
|
|
4830
|
+
*
|
|
4831
|
+
* ### Example
|
|
4832
|
+
* @example
|
|
4833
|
+
* ```html
|
|
4834
|
+
* <lx-cdk-options-sub-dropdown [trigger]="parentOption" align="right">
|
|
4835
|
+
* <lx-option [value]="1">Sub-option 1</lx-option>
|
|
4836
|
+
* <lx-option [value]="2">Sub-option 2</lx-option>
|
|
4837
|
+
* </lx-cdk-options-sub-dropdown>
|
|
4838
|
+
* ```
|
|
4839
|
+
*/
|
|
4182
4840
|
class CdkOptionsSubDropdownComponent {
|
|
4183
4841
|
constructor(changeDetection) {
|
|
4184
4842
|
this.changeDetection = changeDetection;
|
|
4843
|
+
/**
|
|
4844
|
+
* Horizontal alignment of the sub-dropdown relative to the trigger option.
|
|
4845
|
+
* @default 'right'
|
|
4846
|
+
*/
|
|
4185
4847
|
this.align = 'right';
|
|
4186
4848
|
this.open = false;
|
|
4187
4849
|
this.isPositionComputed = true;
|
|
@@ -4412,6 +5074,18 @@ const CURRENCY_SYMBOL_MAP = {
|
|
|
4412
5074
|
ZWD: 'ZWD'
|
|
4413
5075
|
};
|
|
4414
5076
|
|
|
5077
|
+
/**
|
|
5078
|
+
* Displays a currency symbol based on an ISO currency code.
|
|
5079
|
+
*
|
|
5080
|
+
* Converts currency codes (e.g., 'USD', 'EUR') to their symbolic representations ($, €).
|
|
5081
|
+
*
|
|
5082
|
+
* ### Example
|
|
5083
|
+
* @example
|
|
5084
|
+
* ```html
|
|
5085
|
+
* <lx-currency-symbol [code]="'USD'"></lx-currency-symbol>
|
|
5086
|
+
* <lx-currency-symbol [code]="'EUR'"></lx-currency-symbol>
|
|
5087
|
+
* ```
|
|
5088
|
+
*/
|
|
4415
5089
|
class CurrencySymbolComponent {
|
|
4416
5090
|
ngOnInit() {
|
|
4417
5091
|
this.currency$ = this.code$.pipe(map((code) => CURRENCY_SYMBOL_MAP[code] || code));
|
|
@@ -4429,20 +5103,69 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
4429
5103
|
type: Input
|
|
4430
5104
|
}], code$: [] } });
|
|
4431
5105
|
|
|
5106
|
+
/**
|
|
5107
|
+
* Currency input field with locale-aware formatting and validation.
|
|
5108
|
+
*
|
|
5109
|
+
* Supports both view and edit modes with configurable currency symbols, decimal separators, and number types.
|
|
5110
|
+
*
|
|
5111
|
+
* ### Example
|
|
5112
|
+
* @example
|
|
5113
|
+
* ```html
|
|
5114
|
+
* <lx-currency-input
|
|
5115
|
+
* [code]="'USD'"
|
|
5116
|
+
* [data]="1234.56"
|
|
5117
|
+
* [mode]="'edit'"
|
|
5118
|
+
* [fieldDefinitionType]="'DOUBLE'"
|
|
5119
|
+
* [decimalSeparator]="'.'"
|
|
5120
|
+
* [iconPosition]="'first'"
|
|
5121
|
+
* (onChange)="handleValueChange($event)"
|
|
5122
|
+
* ></lx-currency-input>
|
|
5123
|
+
* ```
|
|
5124
|
+
*/
|
|
4432
5125
|
class CurrencyInputComponent {
|
|
4433
5126
|
get allowedCharacters() {
|
|
4434
5127
|
return this.fieldDefinitionType === 'DOUBLE' ? new RegExp(`[0-9\e\\${this.decimalSeparator}\]`) : /[0-9\e\\]/;
|
|
4435
5128
|
}
|
|
4436
5129
|
constructor(changeDetector) {
|
|
4437
5130
|
this.changeDetector = changeDetector;
|
|
5131
|
+
/**
|
|
5132
|
+
* Character used as decimal separator in input.
|
|
5133
|
+
* @default '.'
|
|
5134
|
+
*/
|
|
4438
5135
|
this.decimalSeparator = '.';
|
|
5136
|
+
/**
|
|
5137
|
+
* The numeric value of the input.
|
|
5138
|
+
* @default 0
|
|
5139
|
+
*/
|
|
4439
5140
|
this.data = 0;
|
|
5141
|
+
/**
|
|
5142
|
+
* Whether the input is disabled.
|
|
5143
|
+
* @default false
|
|
5144
|
+
*/
|
|
4440
5145
|
this.disabled = false;
|
|
5146
|
+
/**
|
|
5147
|
+
* Display mode of the component.
|
|
5148
|
+
* @default 'edit'
|
|
5149
|
+
*/
|
|
4441
5150
|
this.mode = 'edit';
|
|
5151
|
+
/**
|
|
5152
|
+
* Position of the currency symbol relative to the value.
|
|
5153
|
+
* @default 'first'
|
|
5154
|
+
*/
|
|
4442
5155
|
this.iconPosition = 'first';
|
|
5156
|
+
/**
|
|
5157
|
+
* Angular decimal pipe format string.
|
|
5158
|
+
* @default '1.2-2'
|
|
5159
|
+
*/
|
|
4443
5160
|
this.format = '1.2-2';
|
|
5161
|
+
/**
|
|
5162
|
+
* Whether to visually mark the input as invalid.
|
|
5163
|
+
* @default false
|
|
5164
|
+
*/
|
|
4444
5165
|
this.markInvalid = false;
|
|
5166
|
+
/** Emitted when the input loses focus. */
|
|
4445
5167
|
this.onFocusLost = new EventEmitter();
|
|
5168
|
+
/** Emitted when the numeric value changes. */
|
|
4446
5169
|
this.onChange = new EventEmitter();
|
|
4447
5170
|
/** @internal */
|
|
4448
5171
|
this.showCurrencyInput = false;
|
|
@@ -4622,10 +5345,22 @@ class DateFormatter {
|
|
|
4622
5345
|
}
|
|
4623
5346
|
|
|
4624
5347
|
/* tslint:disable: max-file-line-count */
|
|
5348
|
+
/**
|
|
5349
|
+
* Core datepicker component managing date selection logic.
|
|
5350
|
+
*
|
|
5351
|
+
* Provides the underlying logic for day, month, and year selection modes.
|
|
5352
|
+
* Used internally by DatePickerComponent.
|
|
5353
|
+
*
|
|
5354
|
+
* ### Projection slots
|
|
5355
|
+
* - Default slot: Child picker components (daypicker, monthpicker, yearpicker).
|
|
5356
|
+
*/
|
|
4625
5357
|
class DatePickerInnerComponent {
|
|
4626
5358
|
constructor() {
|
|
5359
|
+
/** Emitted when a date is selected. */
|
|
4627
5360
|
this.selectionDone = new EventEmitter(undefined);
|
|
5361
|
+
/** Emitted when active date is updated. */
|
|
4628
5362
|
this.update = new EventEmitter(false);
|
|
5363
|
+
/** Emitted when active date changes. */
|
|
4629
5364
|
this.activeDateChange = new EventEmitter(undefined);
|
|
4630
5365
|
/* tslint:disable-next-line: no-any*/
|
|
4631
5366
|
this.stepDay = {};
|
|
@@ -4933,6 +5668,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
4933
5668
|
|
|
4934
5669
|
const isBs3 = () => true;
|
|
4935
5670
|
|
|
5671
|
+
/**
|
|
5672
|
+
* Day selection view for the datepicker.
|
|
5673
|
+
*
|
|
5674
|
+
* Displays a calendar grid for selecting individual days within a month.
|
|
5675
|
+
* Used internally by DatePickerInnerComponent.
|
|
5676
|
+
*/
|
|
4936
5677
|
class DayPickerComponent {
|
|
4937
5678
|
constructor(datePicker) {
|
|
4938
5679
|
this.labels = [];
|
|
@@ -5233,6 +5974,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
5233
5974
|
`, imports: [NgClass, ButtonComponent], styles: [":host .btn-secondary:not([lx-button]){color:#292b2c;background-color:#fff;border-color:#ccc}:host .btn-info .text-muted{color:#292b2c!important}\n"] }]
|
|
5234
5975
|
}], ctorParameters: () => [{ type: DatePickerInnerComponent }] });
|
|
5235
5976
|
|
|
5977
|
+
/**
|
|
5978
|
+
* Month selection view for the datepicker.
|
|
5979
|
+
*
|
|
5980
|
+
* Displays a grid of months for selecting a month within a year.
|
|
5981
|
+
* Used internally by DatePickerInnerComponent.
|
|
5982
|
+
*/
|
|
5236
5983
|
class MonthPickerComponent {
|
|
5237
5984
|
constructor(datePicker) {
|
|
5238
5985
|
this.rows = [];
|
|
@@ -5397,6 +6144,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
5397
6144
|
|
|
5398
6145
|
// @deprecated
|
|
5399
6146
|
// tslint:disable
|
|
6147
|
+
/**
|
|
6148
|
+
* Year selection view for the datepicker.
|
|
6149
|
+
*
|
|
6150
|
+
* Displays a grid of years for selecting a year within a range.
|
|
6151
|
+
* Used internally by DatePickerInnerComponent.
|
|
6152
|
+
*/
|
|
5400
6153
|
class YearPickerComponent {
|
|
5401
6154
|
constructor(datePicker) {
|
|
5402
6155
|
this.rows = [];
|
|
@@ -5788,74 +6541,176 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
5788
6541
|
const DEFAULT_MIN_DATE = new Date('0000-01-01');
|
|
5789
6542
|
const DEFAULT_MAX_DATE = new Date('9999-12-31');
|
|
5790
6543
|
/**
|
|
5791
|
-
*
|
|
6544
|
+
* Date input with integrated datepicker dropdown.
|
|
6545
|
+
*
|
|
6546
|
+
* Supports multiple rendering styles (input, link, button) and flexible date range restrictions.
|
|
6547
|
+
*
|
|
6548
|
+
* ### Projection slots
|
|
6549
|
+
* - `dateStringTemplate`: Custom template for displaying the date string when `renderingStyle` is 'BUTTON'.
|
|
6550
|
+
*
|
|
6551
|
+
* ### Example
|
|
6552
|
+
* @example
|
|
6553
|
+
* ```html
|
|
6554
|
+
* <lx-date-input
|
|
6555
|
+
* [(date)]="selectedDate"
|
|
6556
|
+
* [minDate]="minDate"
|
|
6557
|
+
* [maxDate]="maxDate"
|
|
6558
|
+
* [renderingStyle]="'INPUT'"
|
|
6559
|
+
* [placeholder]="'Select a date'"
|
|
6560
|
+
* (dateChange)="onDateSelected($event)"
|
|
6561
|
+
* ></lx-date-input>
|
|
6562
|
+
* ```
|
|
5792
6563
|
*/
|
|
5793
6564
|
class DateInputComponent {
|
|
5794
6565
|
constructor(cd, dateFormatsProvider, getDateFnLocale) {
|
|
5795
6566
|
this.cd = cd;
|
|
5796
6567
|
this.dateFormatsProvider = dateFormatsProvider;
|
|
5797
6568
|
this.getDateFnLocale = getDateFnLocale;
|
|
5798
|
-
/**
|
|
6569
|
+
/**
|
|
6570
|
+
* The initial date value for the date input field. This is used for `ngModel` and `formControl`.
|
|
6571
|
+
* @default null
|
|
6572
|
+
*/
|
|
5799
6573
|
this.date = null;
|
|
5800
|
-
/**
|
|
6574
|
+
/**
|
|
6575
|
+
* Secondary, alternative input with date string (format: 'yyyy-mm-dd').
|
|
6576
|
+
* @default null
|
|
6577
|
+
*/
|
|
5801
6578
|
this.dateString = null;
|
|
5802
|
-
/**
|
|
6579
|
+
/**
|
|
6580
|
+
* Determines whether formGroup's value accessor uses Date objects or date strings.
|
|
6581
|
+
* @default 'date'
|
|
6582
|
+
*/
|
|
5803
6583
|
this.valueAccessor = 'date';
|
|
5804
|
-
/**
|
|
6584
|
+
/**
|
|
6585
|
+
* ID to be set on input to correspond to outside label.
|
|
6586
|
+
* @default ''
|
|
6587
|
+
*/
|
|
5805
6588
|
this.inputId = '';
|
|
5806
|
-
/**
|
|
6589
|
+
/**
|
|
6590
|
+
* The rendering style of the date input component.
|
|
6591
|
+
* @default 'INPUT'
|
|
6592
|
+
*/
|
|
5807
6593
|
this.renderingStyle = 'INPUT';
|
|
5808
|
-
/**
|
|
6594
|
+
/**
|
|
6595
|
+
* The placeholder text to show in the date input field when there is no date selected.
|
|
6596
|
+
* @default 'yyyy-mm-dd'
|
|
6597
|
+
*/
|
|
5809
6598
|
this.placeholder = 'yyyy-mm-dd';
|
|
5810
|
-
/**
|
|
6599
|
+
/**
|
|
6600
|
+
* Use CDK overlay for datepicker positioning. Set to false to use legacy positioning.
|
|
6601
|
+
* @default true
|
|
6602
|
+
*/
|
|
5811
6603
|
this.cdk = true;
|
|
5812
|
-
/**
|
|
6604
|
+
/**
|
|
6605
|
+
* Sets datepicker mode, supports: 'day', 'month', 'year'.
|
|
6606
|
+
* @default 'day'
|
|
6607
|
+
*/
|
|
5813
6608
|
this.datepickerMode = 'day';
|
|
5814
|
-
/**
|
|
6609
|
+
/**
|
|
6610
|
+
* Oldest selectable date.
|
|
6611
|
+
* @default new Date('0000-01-01')
|
|
6612
|
+
*/
|
|
5815
6613
|
this.minDate = DEFAULT_MIN_DATE;
|
|
5816
|
-
/**
|
|
6614
|
+
/**
|
|
6615
|
+
* Latest selectable date.
|
|
6616
|
+
* @default new Date('9999-12-31')
|
|
6617
|
+
*/
|
|
5817
6618
|
this.maxDate = DEFAULT_MAX_DATE;
|
|
5818
|
-
/**
|
|
6619
|
+
/**
|
|
6620
|
+
* Set lower datepicker mode, supports: 'day', 'month', 'year'.
|
|
6621
|
+
* @default 'day'
|
|
6622
|
+
*/
|
|
5819
6623
|
this.minMode = 'day';
|
|
5820
|
-
/**
|
|
6624
|
+
/**
|
|
6625
|
+
* Sets upper datepicker mode, supports: 'day', 'month', 'year'.
|
|
6626
|
+
* @default 'year'
|
|
6627
|
+
*/
|
|
5821
6628
|
this.maxMode = 'year';
|
|
5822
|
-
/**
|
|
6629
|
+
/**
|
|
6630
|
+
* If false week numbers will be hidden in day picker.
|
|
6631
|
+
* @default true
|
|
6632
|
+
*/
|
|
5823
6633
|
this.showWeeks = true;
|
|
5824
|
-
/**
|
|
6634
|
+
/**
|
|
6635
|
+
* Format of day in month (date-fns format).
|
|
6636
|
+
* @default 'dd'
|
|
6637
|
+
*/
|
|
5825
6638
|
this.formatDay = 'dd';
|
|
5826
|
-
/**
|
|
6639
|
+
/**
|
|
6640
|
+
* Format of month in year (date-fns format).
|
|
6641
|
+
* @default 'MMMM'
|
|
6642
|
+
*/
|
|
5827
6643
|
this.formatMonth = 'MMMM';
|
|
5828
|
-
/**
|
|
6644
|
+
/**
|
|
6645
|
+
* Format of year in year range (date-fns format).
|
|
6646
|
+
* @default 'yyyy'
|
|
6647
|
+
*/
|
|
5829
6648
|
this.formatYear = 'yyyy';
|
|
5830
|
-
/**
|
|
6649
|
+
/**
|
|
6650
|
+
* Format of day in week header (date-fns format).
|
|
6651
|
+
* @default 'EE'
|
|
6652
|
+
*/
|
|
5831
6653
|
this.formatDayHeader = 'EE';
|
|
5832
|
-
/**
|
|
6654
|
+
/**
|
|
6655
|
+
* Format of title when selecting day (date-fns format).
|
|
6656
|
+
* @default 'MMMM yyyy'
|
|
6657
|
+
*/
|
|
5833
6658
|
this.formatDayTitle = 'MMMM yyyy';
|
|
5834
|
-
/**
|
|
6659
|
+
/**
|
|
6660
|
+
* Format of title when selecting month (date-fns format).
|
|
6661
|
+
* @default 'yyyy'
|
|
6662
|
+
*/
|
|
5835
6663
|
this.formatMonthTitle = 'yyyy';
|
|
5836
|
-
/**
|
|
6664
|
+
/**
|
|
6665
|
+
* Starting day of the week from 0-6 (0=Sunday, 6=Saturday).
|
|
6666
|
+
* @default 0
|
|
6667
|
+
*/
|
|
5837
6668
|
this.startingDay = 0;
|
|
5838
|
-
/**
|
|
6669
|
+
/**
|
|
6670
|
+
* Number of years displayed in year selection.
|
|
6671
|
+
* @default 20
|
|
6672
|
+
*/
|
|
5839
6673
|
this.yearRange = 20;
|
|
5840
|
-
/**
|
|
6674
|
+
/**
|
|
6675
|
+
* If true only dates from the currently displayed month will be shown.
|
|
6676
|
+
* @default false
|
|
6677
|
+
*/
|
|
5841
6678
|
this.onlyCurrentMonth = false;
|
|
5842
|
-
/**
|
|
6679
|
+
/**
|
|
6680
|
+
* If true shortcut event propagation will be disabled.
|
|
6681
|
+
* @default false
|
|
6682
|
+
*/
|
|
5843
6683
|
this.shortcutPropagation = false;
|
|
5844
|
-
/**
|
|
6684
|
+
/**
|
|
6685
|
+
* Array of custom css classes to be applied to specific dates.
|
|
6686
|
+
* @default []
|
|
6687
|
+
*/
|
|
5845
6688
|
this.customClass = [];
|
|
5846
|
-
/**
|
|
6689
|
+
/**
|
|
6690
|
+
* Array of disabled dates with mode specification.
|
|
6691
|
+
* @default []
|
|
6692
|
+
*/
|
|
5847
6693
|
this.dateDisabled = [];
|
|
5848
|
-
/**
|
|
6694
|
+
/**
|
|
6695
|
+
* If true, the date input field will be auto-focused when the component is first rendered.
|
|
6696
|
+
* @default false
|
|
6697
|
+
*/
|
|
5849
6698
|
this.autoFocus = false;
|
|
5850
|
-
/**
|
|
6699
|
+
/**
|
|
6700
|
+
* If true, the date input field will be marked as invalid.
|
|
6701
|
+
* @default false
|
|
6702
|
+
*/
|
|
5851
6703
|
this.markInvalid = false;
|
|
5852
|
-
/**
|
|
6704
|
+
/**
|
|
6705
|
+
* Also emit dateStringChange on invalid date string.
|
|
6706
|
+
* @default false
|
|
6707
|
+
*/
|
|
5853
6708
|
this.alwaysEmitDateString = false;
|
|
5854
|
-
/**
|
|
6709
|
+
/** Emitted whenever the datepicker is closed. */
|
|
5855
6710
|
this.closeDateInput = new EventEmitter();
|
|
5856
|
-
/**
|
|
6711
|
+
/** Emitted whenever the date string changes. */
|
|
5857
6712
|
this.dateStringChange = new EventEmitter();
|
|
5858
|
-
/**
|
|
6713
|
+
/** Emitted whenever the date changes. */
|
|
5859
6714
|
this.dateChange = new EventEmitter();
|
|
5860
6715
|
/** @internal */
|
|
5861
6716
|
this.showDatepicker = false;
|
|
@@ -6138,6 +6993,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
6138
6993
|
}]
|
|
6139
6994
|
}] });
|
|
6140
6995
|
|
|
6996
|
+
/**
|
|
6997
|
+
* Individual item within a drag-and-drop list.
|
|
6998
|
+
*
|
|
6999
|
+
* Supports custom templates and optional action buttons.
|
|
7000
|
+
*
|
|
7001
|
+
* ### Projection slots
|
|
7002
|
+
* - `customTemplate`: Custom template for the item content. If not provided, displays the item string with a drag handle.
|
|
7003
|
+
*
|
|
7004
|
+
* ### Example
|
|
7005
|
+
* @example
|
|
7006
|
+
* ```html
|
|
7007
|
+
* <lx-drag-and-drop-list-item
|
|
7008
|
+
* [item]="'Task 1'"
|
|
7009
|
+
* [draggable]="true"
|
|
7010
|
+
* [actions]="[{ id: 'delete', label: 'Delete', icon: 'delete', showOnlyOnHover: true }]"
|
|
7011
|
+
* (action)="handleAction($event)"
|
|
7012
|
+
* ></lx-drag-and-drop-list-item>
|
|
7013
|
+
* ```
|
|
7014
|
+
*/
|
|
6141
7015
|
class DragAndDropListItemComponent {
|
|
6142
7016
|
get draggingDisabled() {
|
|
6143
7017
|
return !this.draggable;
|
|
@@ -6148,7 +7022,12 @@ class DragAndDropListItemComponent {
|
|
|
6148
7022
|
constructor(element) {
|
|
6149
7023
|
this.element = element;
|
|
6150
7024
|
this.NAME = 'DragAndDropListItemComponent';
|
|
7025
|
+
/**
|
|
7026
|
+
* Whether the item can be dragged.
|
|
7027
|
+
* @default true
|
|
7028
|
+
*/
|
|
6151
7029
|
this.draggable = true;
|
|
7030
|
+
/** Emitted when an action button is clicked. */
|
|
6152
7031
|
this.action = new EventEmitter();
|
|
6153
7032
|
this.customTemplateRef = null;
|
|
6154
7033
|
}
|
|
@@ -6343,21 +7222,54 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
6343
7222
|
type: Input
|
|
6344
7223
|
}] } });
|
|
6345
7224
|
|
|
7225
|
+
/**
|
|
7226
|
+
* Sortable list with drag-and-drop and keyboard navigation support.
|
|
7227
|
+
*
|
|
7228
|
+
* Items can be reordered via mouse drag or keyboard controls (Arrow keys, Space).
|
|
7229
|
+
*
|
|
7230
|
+
* ### Example
|
|
7231
|
+
* @example
|
|
7232
|
+
* ```html
|
|
7233
|
+
* <lx-drag-and-drop-list
|
|
7234
|
+
* [label]="'My Tasks'"
|
|
7235
|
+
* (moveToIndex)="handleReorder($event)"
|
|
7236
|
+
* >
|
|
7237
|
+
* @for (task of tasks; track $index) {
|
|
7238
|
+
* <lx-drag-and-drop-list-item
|
|
7239
|
+
* [item]="task.name"
|
|
7240
|
+
* [draggable]="true"
|
|
7241
|
+
* />
|
|
7242
|
+
* }
|
|
7243
|
+
* </lx-drag-and-drop-list>
|
|
7244
|
+
* ```
|
|
7245
|
+
*/
|
|
6346
7246
|
class DragAndDropListComponent {
|
|
6347
7247
|
constructor() {
|
|
6348
7248
|
/** @internal */
|
|
6349
7249
|
this.NAME = DRAG_AND_DROP_LIST_TRANSLATION_NAME;
|
|
6350
7250
|
/**
|
|
6351
|
-
* Override the global label font weight
|
|
7251
|
+
* Override the global label font weight.
|
|
7252
|
+
* @default 700
|
|
6352
7253
|
*/
|
|
6353
7254
|
this.labelFontWeight = 700;
|
|
7255
|
+
/**
|
|
7256
|
+
* Color theme of the list items.
|
|
7257
|
+
* @default 'light'
|
|
7258
|
+
*/
|
|
6354
7259
|
this.color = 'light';
|
|
7260
|
+
/**
|
|
7261
|
+
* Font size of the list items.
|
|
7262
|
+
* @default 'normal'
|
|
7263
|
+
*/
|
|
6355
7264
|
this.fontSize = 'normal';
|
|
6356
7265
|
/**
|
|
6357
|
-
*
|
|
6358
|
-
*
|
|
7266
|
+
* Emitted when an item is moved, providing the new and previous index.
|
|
7267
|
+
* Use this when you need index-based reordering.
|
|
6359
7268
|
*/
|
|
6360
7269
|
this.moveToIndex = new EventEmitter();
|
|
7270
|
+
/**
|
|
7271
|
+
* Emitted when an item is moved, providing the item data and new index.
|
|
7272
|
+
*/
|
|
6361
7273
|
this.moveItem = new EventEmitter();
|
|
6362
7274
|
/**
|
|
6363
7275
|
* TODO: extract state about keyboard sorting into KeyboardSortableListDirective
|
|
@@ -6475,8 +7387,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
6475
7387
|
}]
|
|
6476
7388
|
}] });
|
|
6477
7389
|
|
|
7390
|
+
/**
|
|
7391
|
+
* Displays form validation error messages.
|
|
7392
|
+
*
|
|
7393
|
+
* Shows either projected content or a programmatically set error message.
|
|
7394
|
+
*
|
|
7395
|
+
* ### Projection slots
|
|
7396
|
+
* - Default slot: Static error message text. Hidden but captured for display.
|
|
7397
|
+
*
|
|
7398
|
+
* ### Example
|
|
7399
|
+
* @example
|
|
7400
|
+
* ```html
|
|
7401
|
+
* <lx-error-message>This field is required</lx-error-message>
|
|
7402
|
+
* ```
|
|
7403
|
+
*/
|
|
6478
7404
|
class ErrorMessageComponent {
|
|
6479
7405
|
constructor() {
|
|
7406
|
+
/** Signal for setting error message programmatically. */
|
|
6480
7407
|
this.dynamicErrorMessage = signal('');
|
|
6481
7408
|
this.wrapper = viewChild.required('contentWrapper');
|
|
6482
7409
|
this.computedErrorMessage = computed(() => this.dynamicErrorMessage() || this.wrapper().nativeElement.innerText);
|
|
@@ -6489,6 +7416,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
6489
7416
|
args: [{ selector: 'lx-error-message', changeDetection: ChangeDetectionStrategy.OnPush, template: "<span #contentWrapper hidden>\n <ng-content />\n</span>\n\n@if (computedErrorMessage()) {\n <div class=\"error\">\n {{ computedErrorMessage() }}\n </div>\n}\n", styles: [".error{color:#f96464;padding:4px}\n"] }]
|
|
6490
7417
|
}] });
|
|
6491
7418
|
|
|
7419
|
+
/**
|
|
7420
|
+
* Displays translated form validation errors for a specific form control.
|
|
7421
|
+
*
|
|
7422
|
+
* Automatically updates when form errors change.
|
|
7423
|
+
*
|
|
7424
|
+
* ### Example
|
|
7425
|
+
* @example
|
|
7426
|
+
* ```html
|
|
7427
|
+
* <lx-form-error
|
|
7428
|
+
* [form]="myFormGroup"
|
|
7429
|
+
* [controlName]="'email'"
|
|
7430
|
+
* [namespace]="'USER_FORM'"
|
|
7431
|
+
* ></lx-form-error>
|
|
7432
|
+
* ```
|
|
7433
|
+
*/
|
|
6492
7434
|
class FormErrorComponent {
|
|
6493
7435
|
constructor() {
|
|
6494
7436
|
/** @internal */
|
|
@@ -6532,10 +7474,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
6532
7474
|
type: Input
|
|
6533
7475
|
}] } });
|
|
6534
7476
|
|
|
7477
|
+
/**
|
|
7478
|
+
* A directive applied to native `<input>` elements to provide consistent styling and automatic error state handling.
|
|
7479
|
+
* Integrates with Angular's `NgControl` to automatically apply error and disabled classes based on form control state.
|
|
7480
|
+
* The directive listens to form control status changes and updates the visual state accordingly.
|
|
7481
|
+
*
|
|
7482
|
+
* ### Example
|
|
7483
|
+
* @example
|
|
7484
|
+
* ```html
|
|
7485
|
+
* <input lx-input type="text" [formControl]="nameControl" />
|
|
7486
|
+
* ```
|
|
7487
|
+
*
|
|
7488
|
+
* ### Example
|
|
7489
|
+
* @example
|
|
7490
|
+
* ```html
|
|
7491
|
+
* <input lx-input type="email" [error]="true" [disabled]="false" />
|
|
7492
|
+
* ```
|
|
7493
|
+
*/
|
|
6535
7494
|
class InputComponent {
|
|
6536
7495
|
constructor(ngControl) {
|
|
6537
7496
|
this.ngControl = ngControl;
|
|
7497
|
+
/**
|
|
7498
|
+
* Whether to display the input in an error state (applies 'error' CSS class).
|
|
7499
|
+
* Automatically updated when used with `NgControl` based on validation state.
|
|
7500
|
+
* @default false
|
|
7501
|
+
*/
|
|
6538
7502
|
this.error = false;
|
|
7503
|
+
/**
|
|
7504
|
+
* Whether the input is disabled (applies 'disabled' CSS class).
|
|
7505
|
+
* Automatically updated when used with `NgControl` based on control state.
|
|
7506
|
+
* @default false
|
|
7507
|
+
*/
|
|
6539
7508
|
this.disabled = false;
|
|
6540
7509
|
this.destroyed$ = new Subject();
|
|
6541
7510
|
}
|
|
@@ -6780,10 +7749,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
6780
7749
|
args: [KeyboardSelectDirective, { static: false, descendants: true }]
|
|
6781
7750
|
}] } });
|
|
6782
7751
|
|
|
7752
|
+
/**
|
|
7753
|
+
* Input that dynamically adjusts its width based on content length.
|
|
7754
|
+
*
|
|
7755
|
+
* Useful for inline editing or space-constrained layouts.
|
|
7756
|
+
*
|
|
7757
|
+
* ### Example
|
|
7758
|
+
* @example
|
|
7759
|
+
* ```html
|
|
7760
|
+
* <lx-responsive-input
|
|
7761
|
+
* [(ngModel)]="searchTerm"
|
|
7762
|
+
* [inputId]="'search'"
|
|
7763
|
+
* (focus)="onFocus()"
|
|
7764
|
+
* (blur)="onBlur()"
|
|
7765
|
+
* ></lx-responsive-input>
|
|
7766
|
+
* ```
|
|
7767
|
+
*/
|
|
6783
7768
|
class ResponsiveInputComponent {
|
|
6784
7769
|
constructor() {
|
|
7770
|
+
/** Emitted when the input receives focus. */
|
|
6785
7771
|
this.focus = new EventEmitter();
|
|
7772
|
+
/** Emitted when the input receives focus via Tab key. */
|
|
6786
7773
|
this.focusViaTab = new EventEmitter();
|
|
7774
|
+
/** Emitted when the input loses focus. */
|
|
6787
7775
|
this.blur = new EventEmitter();
|
|
6788
7776
|
this.inputWidth$ = new BehaviorSubject('1px');
|
|
6789
7777
|
this.inputControl = new UntypedFormControl();
|
|
@@ -6874,11 +7862,41 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
6874
7862
|
args: ['inputWidth', { static: true }]
|
|
6875
7863
|
}] } });
|
|
6876
7864
|
|
|
7865
|
+
/**
|
|
7866
|
+
* Displays selected items in a multi-select component.
|
|
7867
|
+
*
|
|
7868
|
+
* Items can be rendered as tokens or custom templates.
|
|
7869
|
+
*
|
|
7870
|
+
* ### Projection slots
|
|
7871
|
+
* - `innerSelectionTemplate`: Custom template for rendering each selected item.
|
|
7872
|
+
*
|
|
7873
|
+
* ### Example
|
|
7874
|
+
* @example
|
|
7875
|
+
* ```html
|
|
7876
|
+
* <lx-multi-select-selection
|
|
7877
|
+
* [selection]="selectedItems"
|
|
7878
|
+
* [tokenize]="true"
|
|
7879
|
+
* (removeItem)="handleRemove($event)"
|
|
7880
|
+
* >
|
|
7881
|
+
* <ng-template #innerSelectionTemplate let-item>
|
|
7882
|
+
* {{ item.name }}
|
|
7883
|
+
* </ng-template>
|
|
7884
|
+
* </lx-multi-select-selection>
|
|
7885
|
+
* ```
|
|
7886
|
+
*/
|
|
6877
7887
|
class MultiSelectSelectionComponent extends KeyboardSelectDirective {
|
|
6878
7888
|
constructor() {
|
|
6879
7889
|
super(...arguments);
|
|
7890
|
+
/**
|
|
7891
|
+
* Array of selected items to display.
|
|
7892
|
+
*/
|
|
6880
7893
|
this.selection = input();
|
|
7894
|
+
/**
|
|
7895
|
+
* Whether to render items as tokens (pills).
|
|
7896
|
+
* @default true
|
|
7897
|
+
*/
|
|
6881
7898
|
this.tokenize = input(true);
|
|
7899
|
+
/** Emitted when an item is clicked for removal. */
|
|
6882
7900
|
this.removeItem = new EventEmitter();
|
|
6883
7901
|
this.selectionTemplate = null;
|
|
6884
7902
|
}
|
|
@@ -6895,6 +7913,63 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
6895
7913
|
args: ['innerSelectionTemplate', { read: TemplateRef, static: true }]
|
|
6896
7914
|
}] } });
|
|
6897
7915
|
|
|
7916
|
+
/**
|
|
7917
|
+
* A dropdown component for selecting multiple values from a list of options.
|
|
7918
|
+
* Implements `ControlValueAccessor` for seamless integration with Angular reactive forms.
|
|
7919
|
+
* Supports keyboard navigation, custom templates, and various sizing options.
|
|
7920
|
+
*
|
|
7921
|
+
* ### Projection slots
|
|
7922
|
+
* - `.pills`: Contains the pill list for selected items (`lx-pill-list`).
|
|
7923
|
+
* The pill list shows removable pills for each selected item.
|
|
7924
|
+
* Use `lx-pill-item` inside a `#pillTemplate` for custom pill rendering.
|
|
7925
|
+
* - `.dropdownComponent`: Contains the dropdown (`lx-basic-dropdown`)
|
|
7926
|
+
*
|
|
7927
|
+
* Alternatively, use `lxSelectDropdown` directive on `<ng-template>` for the dropdown,
|
|
7928
|
+
* and `#selectionTemplate` on `<ng-template>` for tokenized selection display.
|
|
7929
|
+
*
|
|
7930
|
+
* ### Example — with pill list and basic dropdown
|
|
7931
|
+
* @example
|
|
7932
|
+
* ```html
|
|
7933
|
+
* <lx-multi-select
|
|
7934
|
+
* #multiSelect
|
|
7935
|
+
* [(selection)]="selectedItems"
|
|
7936
|
+
* (query)="searchTerm = $event">
|
|
7937
|
+
* <lx-pill-list
|
|
7938
|
+
* class="pills"
|
|
7939
|
+
* [keyboardSelectAction]="multiSelect.selectionKeyboardSelectAction$"
|
|
7940
|
+
* [pills]="selectedItems"
|
|
7941
|
+
* labelKey="name"
|
|
7942
|
+
* itemKey="id"
|
|
7943
|
+
* (remove)="multiSelect.removeItem($event)">
|
|
7944
|
+
* </lx-pill-list>
|
|
7945
|
+
* <lx-basic-dropdown
|
|
7946
|
+
* class="dropdownComponent"
|
|
7947
|
+
* [keyboardSelectAction]="multiSelect.optionsKeyboardSelectAction$"
|
|
7948
|
+
* [options]="options | lxFilterBySelection: selectedItems | lxFilterByTerm: { term: searchTerm }"
|
|
7949
|
+
* labelKey="name"
|
|
7950
|
+
* (onItemSelected)="multiSelect.addItemToSelection($event)">
|
|
7951
|
+
* </lx-basic-dropdown>
|
|
7952
|
+
* </lx-multi-select>
|
|
7953
|
+
* ```
|
|
7954
|
+
*
|
|
7955
|
+
* ### Example — with custom pill template
|
|
7956
|
+
* @example
|
|
7957
|
+
* ```html
|
|
7958
|
+
* <lx-multi-select #multiSelect [(selection)]="selectedItems">
|
|
7959
|
+
* <lx-pill-list
|
|
7960
|
+
* class="pills"
|
|
7961
|
+
* [keyboardSelectAction]="multiSelect.selectionKeyboardSelectAction$"
|
|
7962
|
+
* [pills]="selectedItems"
|
|
7963
|
+
* itemKey="id"
|
|
7964
|
+
* (remove)="multiSelect.removeItem($event)">
|
|
7965
|
+
* <ng-template #pillTemplate let-pill>
|
|
7966
|
+
* <lx-pill-item [label]="pill.name" [item]="pill" [class.readOnly]="pill.readOnly" />
|
|
7967
|
+
* </ng-template>
|
|
7968
|
+
* </lx-pill-list>
|
|
7969
|
+
* <!-- dropdown omitted for brevity -->
|
|
7970
|
+
* </lx-multi-select>
|
|
7971
|
+
* ```
|
|
7972
|
+
*/
|
|
6898
7973
|
class MultiSelectComponent extends BaseSelectDirective {
|
|
6899
7974
|
/** @internal */
|
|
6900
7975
|
static isStillPossibleMoveToLeft(eventSet) {
|
|
@@ -6950,11 +8025,31 @@ class MultiSelectComponent extends BaseSelectDirective {
|
|
|
6950
8025
|
constructor(cd) {
|
|
6951
8026
|
super();
|
|
6952
8027
|
this.cd = cd;
|
|
8028
|
+
/**
|
|
8029
|
+
* Whether to visually mark the input as invalid.
|
|
8030
|
+
*/
|
|
6953
8031
|
this.markInvalid = false;
|
|
8032
|
+
/**
|
|
8033
|
+
* Array of currently selected items.
|
|
8034
|
+
*/
|
|
6954
8035
|
this.selection = [];
|
|
8036
|
+
/**
|
|
8037
|
+
* Visual size variant of the multi-select component.
|
|
8038
|
+
* @default 'default'
|
|
8039
|
+
*/
|
|
6955
8040
|
this.size = 'default';
|
|
8041
|
+
/**
|
|
8042
|
+
* Whether pressing Tab should close the dropdown.
|
|
8043
|
+
* @default true
|
|
8044
|
+
*/
|
|
6956
8045
|
this.closeDropdownOnTab = true;
|
|
8046
|
+
/**
|
|
8047
|
+
* Event emitted when the selection changes.
|
|
8048
|
+
*/
|
|
6957
8049
|
this.selectionChange = new EventEmitter();
|
|
8050
|
+
/**
|
|
8051
|
+
* Event emitted when the input loses focus.
|
|
8052
|
+
*/
|
|
6958
8053
|
this.blur = new EventEmitter();
|
|
6959
8054
|
/** @internal */
|
|
6960
8055
|
this.destroyed$ = new Subject();
|
|
@@ -7211,23 +8306,67 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
7211
8306
|
}] } });
|
|
7212
8307
|
|
|
7213
8308
|
/**
|
|
7214
|
-
*
|
|
7215
|
-
*
|
|
7216
|
-
*
|
|
8309
|
+
* Dropdown component that displays options grouped by categories.
|
|
8310
|
+
* Supports keyboard navigation, infinite scroll, custom templates, and creating new options.
|
|
8311
|
+
* Used standalone or with SingleSelectComponent/MultiSelectComponent.
|
|
8312
|
+
*
|
|
8313
|
+
* ### Projection slots
|
|
8314
|
+
* - `optionTemplate`: Template for custom option rendering (context: `$implicit`, `index`, `groupIndex`).
|
|
8315
|
+
* - `noResultsOptionTemplateRef`: Template for custom "no results" message (context: `group`, `groupIndex`).
|
|
8316
|
+
*
|
|
8317
|
+
* ### Example
|
|
8318
|
+
* @example
|
|
8319
|
+
* ```html
|
|
8320
|
+
* <lx-option-group-dropdown
|
|
8321
|
+
* [optionGroups]="groups"
|
|
8322
|
+
* [highlightTerm]="searchTerm"
|
|
8323
|
+
* (onItemSelected)="handleSelection($event)">
|
|
8324
|
+
* <ng-template #optionTemplate let-option>
|
|
8325
|
+
* <span>{{ option.label }}</span>
|
|
8326
|
+
* </ng-template>
|
|
8327
|
+
* </lx-option-group-dropdown>
|
|
8328
|
+
* ```
|
|
7217
8329
|
*/
|
|
7218
8330
|
class OptionGroupDropdownComponent extends KeyboardSelectDirective {
|
|
7219
8331
|
constructor() {
|
|
7220
8332
|
super(...arguments);
|
|
7221
8333
|
/** @internal */
|
|
7222
8334
|
this.NAME = 'OptionGroupDropdownComponent';
|
|
8335
|
+
/**
|
|
8336
|
+
* Array of option groups to display in the dropdown.
|
|
8337
|
+
* @default []
|
|
8338
|
+
*/
|
|
7223
8339
|
this.optionGroups = [];
|
|
8340
|
+
/**
|
|
8341
|
+
* Whether to show a "create new option" entry at the top of the dropdown.
|
|
8342
|
+
* @default false
|
|
8343
|
+
*/
|
|
7224
8344
|
this.showCreateNewOption = false;
|
|
8345
|
+
/**
|
|
8346
|
+
* Property name to use as the label for each option.
|
|
8347
|
+
* @default 'label'
|
|
8348
|
+
*/
|
|
7225
8349
|
this.labelKey = 'label';
|
|
8350
|
+
/**
|
|
8351
|
+
* Whether the dropdown is in a loading state.
|
|
8352
|
+
* @default false
|
|
8353
|
+
*/
|
|
7226
8354
|
this.loading = false;
|
|
8355
|
+
/**
|
|
8356
|
+
* Whether to show "no results" message when a group has no options.
|
|
8357
|
+
* @default false
|
|
8358
|
+
*/
|
|
7227
8359
|
this.showNoResultsIfGroupIsEmpty = false;
|
|
8360
|
+
/**
|
|
8361
|
+
* Whether to use CDK overlay positioning for the dropdown.
|
|
8362
|
+
* @default false
|
|
8363
|
+
*/
|
|
7228
8364
|
this.overlayPositioning = false;
|
|
8365
|
+
/** Event emitted when an option is selected. */
|
|
7229
8366
|
this.onItemSelected = new EventEmitter();
|
|
8367
|
+
/** Event emitted when the dropdown container is scrolled (for infinite scroll). */
|
|
7230
8368
|
this.containerScrolled = new EventEmitter();
|
|
8369
|
+
/** Event emitted when the user requests to create a new option. */
|
|
7231
8370
|
this.createNewOption = new EventEmitter();
|
|
7232
8371
|
/** @internal */
|
|
7233
8372
|
this.isTopDropdown = false;
|
|
@@ -7317,6 +8456,36 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
7317
8456
|
args: ['selectOrigin', { static: false }]
|
|
7318
8457
|
}] } });
|
|
7319
8458
|
|
|
8459
|
+
/**
|
|
8460
|
+
* A dropdown component that displays a list of selectable options.
|
|
8461
|
+
* The dropdown opens when triggered and provides keyboard navigation support for accessible option selection.
|
|
8462
|
+
* It supports nested option groups and sub-dropdowns with full ARIA compliance.
|
|
8463
|
+
*
|
|
8464
|
+
* ### Projection slots
|
|
8465
|
+
* - Default (trigger): The button or element that triggers the dropdown (must have `lxKeyboardActionSource` directive)
|
|
8466
|
+
* - `lx-option`: Individual selectable options within the dropdown
|
|
8467
|
+
* - `lx-option-group`: Optional groups of options with labels
|
|
8468
|
+
*
|
|
8469
|
+
* ### Example
|
|
8470
|
+
* @example
|
|
8471
|
+
* ```html
|
|
8472
|
+
* <lx-options-dropdown [disabled]="disabled" [maxHeight]="maxHeight">
|
|
8473
|
+
* <button lxKeyboardActionSource lx-button [disabled]="disabled" endIcon="slim-arrow-down">
|
|
8474
|
+
* <span>{{ activeView?.label }}</span>
|
|
8475
|
+
* </button>
|
|
8476
|
+
* @for (viewGroup of viewGroups; track viewGroup.groupKey) {
|
|
8477
|
+
* <lx-option-group [label]="'viewGroups.' + viewGroup.groupKey | translate">
|
|
8478
|
+
* @for (view of viewGroup.views; track view.key) {
|
|
8479
|
+
* <lx-option
|
|
8480
|
+
* [selected]="view === activeView"
|
|
8481
|
+
* (select)="applyView.emit(view.key)"
|
|
8482
|
+
* >{{ view.label }}</lx-option>
|
|
8483
|
+
* }
|
|
8484
|
+
* </lx-option-group>
|
|
8485
|
+
* }
|
|
8486
|
+
* </lx-options-dropdown>
|
|
8487
|
+
* ```
|
|
8488
|
+
*/
|
|
7320
8489
|
class OptionsDropdownComponent {
|
|
7321
8490
|
/** @internal */
|
|
7322
8491
|
get displayStyle() {
|
|
@@ -7381,18 +8550,61 @@ class OptionsDropdownComponent {
|
|
|
7381
8550
|
this.renderer = renderer;
|
|
7382
8551
|
/** @internal */
|
|
7383
8552
|
this.NAME = 'OptionsDropdownComponent';
|
|
8553
|
+
/**
|
|
8554
|
+
* The alignment of the dropdown relative to the trigger element.
|
|
8555
|
+
* @default 'right'
|
|
8556
|
+
*/
|
|
7384
8557
|
this.align = 'right';
|
|
8558
|
+
/**
|
|
8559
|
+
* Whether the dropdown should close when the page is scrolled.
|
|
8560
|
+
* @default false
|
|
8561
|
+
*/
|
|
7385
8562
|
this.closeOnScroll = false;
|
|
8563
|
+
/**
|
|
8564
|
+
* Whether the dropdown is disabled and cannot be opened.
|
|
8565
|
+
* @default false
|
|
8566
|
+
*/
|
|
7386
8567
|
this.disabled = false;
|
|
8568
|
+
/**
|
|
8569
|
+
* The maximum height of the dropdown. Can be any valid CSS height value.
|
|
8570
|
+
* @default 'none'
|
|
8571
|
+
*/
|
|
7387
8572
|
this.maxHeight = 'none';
|
|
8573
|
+
/**
|
|
8574
|
+
* Whether the dropdown should close automatically when an option is selected.
|
|
8575
|
+
* @default true
|
|
8576
|
+
*/
|
|
7388
8577
|
this.closeOnSelect = true;
|
|
8578
|
+
/**
|
|
8579
|
+
* Whether to enable advanced overlay positioning using CDK overlay.
|
|
8580
|
+
* Use when the dropdown is wider than its trigger or positioned near a viewport edge —
|
|
8581
|
+
* enables CDK overlay positioning with automatic boundary detection to prevent off-screen clipping
|
|
8582
|
+
* @default false
|
|
8583
|
+
*/
|
|
7389
8584
|
this.overlayPositioning = false;
|
|
8585
|
+
/**
|
|
8586
|
+
* Additional CSS class to apply to the dropdown overlay.
|
|
8587
|
+
* @default ''
|
|
8588
|
+
*/
|
|
7390
8589
|
this.dropdownClass = '';
|
|
8590
|
+
/**
|
|
8591
|
+
* Whether the trigger container should use display flex instead of inline-block.
|
|
8592
|
+
* @default false
|
|
8593
|
+
*/
|
|
7391
8594
|
this.isFlexEnabledTriggerContainer = false;
|
|
7392
8595
|
/** @internal */
|
|
7393
8596
|
this.overlayScrollStrategy = this.closeOnScroll ? this.scrollStrategies.close() : this.scrollStrategies.reposition();
|
|
8597
|
+
/**
|
|
8598
|
+
* Event emitted when the dropdown is opened.
|
|
8599
|
+
*/
|
|
7394
8600
|
this.opened = new EventEmitter();
|
|
8601
|
+
/**
|
|
8602
|
+
* Event emitted when the dropdown is closed for any reason.
|
|
8603
|
+
*/
|
|
7395
8604
|
this.closed = new EventEmitter();
|
|
8605
|
+
/**
|
|
8606
|
+
* Event emitted when the dropdown is closed without an option being selected (e.g., by pressing Escape or clicking outside).
|
|
8607
|
+
*/
|
|
7396
8608
|
this.closedWithoutSelection = new EventEmitter();
|
|
7397
8609
|
this.highlightedOptionIndex$ = new BehaviorSubject(0);
|
|
7398
8610
|
this._open = false;
|
|
@@ -7611,9 +8823,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
7611
8823
|
args: ['style.display']
|
|
7612
8824
|
}] } });
|
|
7613
8825
|
|
|
8826
|
+
/**
|
|
8827
|
+
* A nested sub-dropdown that appears next to a parent option.
|
|
8828
|
+
* Opens on hover or keyboard navigation with debounced interactions.
|
|
8829
|
+
* Automatically adjusts max height to fit viewport.
|
|
8830
|
+
*
|
|
8831
|
+
* ### Projection slots
|
|
8832
|
+
* - Default slot: Nested dropdown options (`lx-option` components).
|
|
8833
|
+
*
|
|
8834
|
+
* ### Example
|
|
8835
|
+
* @example
|
|
8836
|
+
* ```html
|
|
8837
|
+
* <lx-options-sub-dropdown [trigger]="parentOption" align="left">
|
|
8838
|
+
* <lx-option [value]="1">Sub-option 1</lx-option>
|
|
8839
|
+
* <lx-option [value]="2">Sub-option 2</lx-option>
|
|
8840
|
+
* </lx-options-sub-dropdown>
|
|
8841
|
+
* ```
|
|
8842
|
+
*/
|
|
7614
8843
|
class OptionsSubDropdownComponent {
|
|
7615
8844
|
constructor(changeDetection) {
|
|
7616
8845
|
this.changeDetection = changeDetection;
|
|
8846
|
+
/**
|
|
8847
|
+
* Horizontal alignment of the sub-dropdown relative to the trigger option.
|
|
8848
|
+
* @default 'right'
|
|
8849
|
+
*/
|
|
7617
8850
|
this.align = 'right';
|
|
7618
8851
|
this.hidden = true;
|
|
7619
8852
|
this.mouseInside$ = new BehaviorSubject(false);
|
|
@@ -7696,6 +8929,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
7696
8929
|
args: ['mouseleave']
|
|
7697
8930
|
}] } });
|
|
7698
8931
|
|
|
8932
|
+
/**
|
|
8933
|
+
* Individual option within a picker dropdown.
|
|
8934
|
+
*
|
|
8935
|
+
* Must be a direct child of lx-picker.
|
|
8936
|
+
*
|
|
8937
|
+
* ### Projection slots
|
|
8938
|
+
* - Default slot: Option content (text, icons, or custom elements). Hidden when `isClearOption` is true.
|
|
8939
|
+
*
|
|
8940
|
+
* ### Example
|
|
8941
|
+
* @example
|
|
8942
|
+
* ```html
|
|
8943
|
+
* <lx-picker>
|
|
8944
|
+
* <button lxPickerTrigger>Select</button>
|
|
8945
|
+
* <li lx-picker-option [optionId]="'opt1'" [value]="'option1'" [ariaLabel]="'Option 1'">
|
|
8946
|
+
* Option 1
|
|
8947
|
+
* </li>
|
|
8948
|
+
* <li lx-picker-option [optionId]="'opt2'" [value]="'option2'" [ariaLabel]="'Option 2'">
|
|
8949
|
+
* Option 2
|
|
8950
|
+
* </li>
|
|
8951
|
+
* </lx-picker>
|
|
8952
|
+
* ```
|
|
8953
|
+
*/
|
|
7699
8954
|
class PickerOptionComponent {
|
|
7700
8955
|
get ariaLabelValue() {
|
|
7701
8956
|
if (this.isClearOption) {
|
|
@@ -7731,11 +8986,17 @@ class PickerOptionComponent {
|
|
|
7731
8986
|
this.NAME = 'PickerOptionComponent';
|
|
7732
8987
|
this.role = 'option';
|
|
7733
8988
|
this.ariaSelected = false;
|
|
8989
|
+
/**
|
|
8990
|
+
* Whether this option is currently selected.
|
|
8991
|
+
* @default false
|
|
8992
|
+
*/
|
|
7734
8993
|
this.selected = false;
|
|
7735
|
-
this.isClearOption = false;
|
|
7736
8994
|
/**
|
|
7737
|
-
*
|
|
8995
|
+
* Whether this is a special "clear selection" option.
|
|
8996
|
+
* @default false
|
|
7738
8997
|
*/
|
|
8998
|
+
this.isClearOption = false;
|
|
8999
|
+
/** Emitted when the option is selected. */
|
|
7739
9000
|
this.select = new EventEmitter();
|
|
7740
9001
|
this._highlighted = false;
|
|
7741
9002
|
}
|
|
@@ -7852,22 +9113,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
7852
9113
|
}], ctorParameters: () => [{ type: i0.ElementRef }] });
|
|
7853
9114
|
|
|
7854
9115
|
/**
|
|
7855
|
-
*
|
|
7856
|
-
*
|
|
7857
|
-
* 1. A lxPickerTrigger, preferably a button element, which we use to open the dropdown on click or enter.
|
|
7858
|
-
* 2. A list of `<li>` elements with an lx-picker-option attribute that own the option template as content children.
|
|
9116
|
+
* A dropdown picker for selecting a value from a list of options.
|
|
9117
|
+
* Supports keyboard navigation, `ControlValueAccessor` for reactive forms, and custom trigger elements.
|
|
7859
9118
|
*
|
|
7860
|
-
*
|
|
9119
|
+
* ### Projection slots
|
|
9120
|
+
* - `lxPickerTrigger`: A button element used to open the dropdown on click or Enter
|
|
9121
|
+
* - `li[lx-picker-option]`: List items representing selectable options
|
|
7861
9122
|
*
|
|
7862
|
-
* Example
|
|
7863
|
-
*
|
|
7864
|
-
*
|
|
7865
|
-
*
|
|
7866
|
-
*
|
|
7867
|
-
*
|
|
7868
|
-
*
|
|
7869
|
-
*
|
|
7870
|
-
*
|
|
9123
|
+
* ### Example
|
|
9124
|
+
* @example
|
|
9125
|
+
* ```html
|
|
9126
|
+
* <lx-picker listBoxAriaLabel="Color picker">
|
|
9127
|
+
* <button lxPickerTrigger lx-button mode="outline" size="large" [square]="true">
|
|
9128
|
+
* {{ selection.label }}
|
|
9129
|
+
* </button>
|
|
9130
|
+
* @for (option of options; track option.id) {
|
|
9131
|
+
* <li lx-picker-option [value]="option.value" [selected]="selection === option"
|
|
9132
|
+
* (select)="selection = option" [optionId]="option.id">
|
|
9133
|
+
* {{ option.label }}
|
|
9134
|
+
* </li>
|
|
9135
|
+
* }
|
|
7871
9136
|
* </lx-picker>
|
|
7872
9137
|
* ```
|
|
7873
9138
|
*/
|
|
@@ -7901,6 +9166,10 @@ class PickerComponent {
|
|
|
7901
9166
|
constructor(dir, cdRef) {
|
|
7902
9167
|
this.dir = dir;
|
|
7903
9168
|
this.cdRef = cdRef;
|
|
9169
|
+
/**
|
|
9170
|
+
* Direction the picker options dropdown opens.
|
|
9171
|
+
* @default 'right'
|
|
9172
|
+
*/
|
|
7904
9173
|
this.openDirection = 'right';
|
|
7905
9174
|
/** @internal */
|
|
7906
9175
|
this._isFormControl = false;
|
|
@@ -8058,10 +9327,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
8058
9327
|
args: ['document:keydown', ['$event']]
|
|
8059
9328
|
}] } });
|
|
8060
9329
|
|
|
9330
|
+
/**
|
|
9331
|
+
* An individual pill/tag item with a remove button.
|
|
9332
|
+
* Typically used within `lx-pill-list` to display selected items.
|
|
9333
|
+
*
|
|
9334
|
+
* ### Example
|
|
9335
|
+
* @example
|
|
9336
|
+
* ```html
|
|
9337
|
+
* <lx-pill-item [item]="selectedItem"
|
|
9338
|
+
* [label]="'Option A'"
|
|
9339
|
+
* (remove)="onRemove($event)">
|
|
9340
|
+
* </lx-pill-item>
|
|
9341
|
+
* ```
|
|
9342
|
+
*/
|
|
8061
9343
|
class PillItemComponent {
|
|
8062
9344
|
constructor() {
|
|
8063
9345
|
this.NAME = 'PillItemComponent';
|
|
9346
|
+
/**
|
|
9347
|
+
* When set to true, disables the pill and prevents removal.
|
|
9348
|
+
*/
|
|
8064
9349
|
this.disabled = false;
|
|
9350
|
+
/**
|
|
9351
|
+
* Event emitted when the pill is removed.
|
|
9352
|
+
*/
|
|
8065
9353
|
this.remove = new EventEmitter();
|
|
8066
9354
|
}
|
|
8067
9355
|
removePill(item, isMouse = false) {
|
|
@@ -8088,11 +9376,64 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
8088
9376
|
type: Output
|
|
8089
9377
|
}] } });
|
|
8090
9378
|
|
|
9379
|
+
/**
|
|
9380
|
+
* A container for displaying a list of removable pill/tag items.
|
|
9381
|
+
* Commonly used inside `lx-multi-select` to show selected items.
|
|
9382
|
+
*
|
|
9383
|
+
* When used inside `lx-multi-select`, apply `class="pills"` for proper projection
|
|
9384
|
+
* and wire up `[keyboardSelectAction]` for keyboard navigation.
|
|
9385
|
+
*
|
|
9386
|
+
* ### Projection slots
|
|
9387
|
+
* - `#pillTemplate`: Optional custom template for rendering individual pills.
|
|
9388
|
+
* Receives each pill as implicit context. Use when you need custom styling
|
|
9389
|
+
* or attributes on individual pills.
|
|
9390
|
+
*
|
|
9391
|
+
* ### Example — Basic usage inside multi-select
|
|
9392
|
+
* @example
|
|
9393
|
+
* ```html
|
|
9394
|
+
* <lx-pill-list
|
|
9395
|
+
* class="pills"
|
|
9396
|
+
* [keyboardSelectAction]="multiSelect.selectionKeyboardSelectAction$"
|
|
9397
|
+
* [pills]="selectedItems"
|
|
9398
|
+
* labelKey="name"
|
|
9399
|
+
* itemKey="id"
|
|
9400
|
+
* (remove)="multiSelect.removeItem($event)">
|
|
9401
|
+
* </lx-pill-list>
|
|
9402
|
+
* ```
|
|
9403
|
+
*
|
|
9404
|
+
* ### Example — Custom pill template
|
|
9405
|
+
* @example
|
|
9406
|
+
* ```html
|
|
9407
|
+
* <lx-pill-list
|
|
9408
|
+
* class="pills"
|
|
9409
|
+
* [keyboardSelectAction]="multiSelect.selectionKeyboardSelectAction$"
|
|
9410
|
+
* [pills]="selectedItems"
|
|
9411
|
+
* itemKey="id"
|
|
9412
|
+
* (remove)="multiSelect.removeItem($event)">
|
|
9413
|
+
* <ng-template #pillTemplate let-pill>
|
|
9414
|
+
* <lx-pill-item
|
|
9415
|
+
* [label]="pill.name"
|
|
9416
|
+
* [item]="pill"
|
|
9417
|
+
* [class.readOnly]="pill.readOnly">
|
|
9418
|
+
* </lx-pill-item>
|
|
9419
|
+
* </ng-template>
|
|
9420
|
+
* </lx-pill-list>
|
|
9421
|
+
* ```
|
|
9422
|
+
*/
|
|
8091
9423
|
class PillListComponent extends KeyboardSelectDirective {
|
|
8092
9424
|
constructor() {
|
|
8093
9425
|
super(...arguments);
|
|
9426
|
+
/**
|
|
9427
|
+
* Array of items to display as pills.
|
|
9428
|
+
*/
|
|
8094
9429
|
this.pills = [];
|
|
9430
|
+
/**
|
|
9431
|
+
* When set to true, disables removal of pills.
|
|
9432
|
+
*/
|
|
8095
9433
|
this.disabled = false;
|
|
9434
|
+
/**
|
|
9435
|
+
* Event emitted when a pill is removed.
|
|
9436
|
+
*/
|
|
8096
9437
|
this.remove = new EventEmitter();
|
|
8097
9438
|
}
|
|
8098
9439
|
ngAfterViewInit() {
|
|
@@ -8199,6 +9540,34 @@ function stopKeyboardEventPropagation(evt) {
|
|
|
8199
9540
|
evt.stopImmediatePropagation();
|
|
8200
9541
|
}
|
|
8201
9542
|
|
|
9543
|
+
/**
|
|
9544
|
+
* A dropdown component for selecting a single value from a list of options.
|
|
9545
|
+
* Implements `ControlValueAccessor` for seamless integration with Angular reactive forms.
|
|
9546
|
+
*
|
|
9547
|
+
* ### Projection slots
|
|
9548
|
+
* - `.selectedOption`: Displays the currently selected value in the input field
|
|
9549
|
+
* - `.dropdownComponent`: Contains the dropdown (typically `lx-basic-dropdown`)
|
|
9550
|
+
*
|
|
9551
|
+
* Alternatively, use `lxSelectDropdown` and `lxSelectedOption` directives on `<ng-template>`.
|
|
9552
|
+
*
|
|
9553
|
+
* ### Example
|
|
9554
|
+
* @example
|
|
9555
|
+
* ```html
|
|
9556
|
+
* <lx-single-select
|
|
9557
|
+
* #select
|
|
9558
|
+
* [formControl]="control"
|
|
9559
|
+
* (query)="searchTerm = $event">
|
|
9560
|
+
* <span class="selectedOption">{{ control.value?.name }}</span>
|
|
9561
|
+
* <lx-basic-dropdown
|
|
9562
|
+
* class="dropdownComponent"
|
|
9563
|
+
* [keyboardSelectAction]="select.optionsKeyboardSelectAction$"
|
|
9564
|
+
* [options]="options | lxFilterByTerm: { term: searchTerm }"
|
|
9565
|
+
* labelKey="name"
|
|
9566
|
+
* (onItemSelected)="select.selectOption($event)">
|
|
9567
|
+
* </lx-basic-dropdown>
|
|
9568
|
+
* </lx-single-select>
|
|
9569
|
+
* ```
|
|
9570
|
+
*/
|
|
8202
9571
|
class SingleSelectComponent extends BaseSelectDirective {
|
|
8203
9572
|
/** @internal */
|
|
8204
9573
|
static calculateNewCursorPostionOnKeyboardNavigation(cursorPosition, keyCode) {
|
|
@@ -8239,16 +9608,25 @@ class SingleSelectComponent extends BaseSelectDirective {
|
|
|
8239
9608
|
constructor(cd) {
|
|
8240
9609
|
super();
|
|
8241
9610
|
this.cd = cd;
|
|
9611
|
+
/** Background color of the selection input field. */
|
|
8242
9612
|
this.selectionBackground = 'white';
|
|
9613
|
+
/** Size variant of the select component. */
|
|
8243
9614
|
this.size = 'default';
|
|
8244
9615
|
/** @deprecated To keep different inputs aligned, we should use the default padding */
|
|
8245
9616
|
this.padding = 'default';
|
|
9617
|
+
/** Whether the select field is required. */
|
|
8246
9618
|
this.required = false;
|
|
9619
|
+
/** Whether to close the dropdown when the Tab key is pressed. */
|
|
8247
9620
|
this.closeDropdownOnTab = true;
|
|
9621
|
+
/** Event emitted when the selection changes. */
|
|
8248
9622
|
this.selectionChange = new EventEmitter();
|
|
9623
|
+
/** Event emitted when the input loses focus. */
|
|
8249
9624
|
this.blur = new EventEmitter();
|
|
9625
|
+
/** Whether to show a clear button to remove the selection. */
|
|
8250
9626
|
this.allowClear = true;
|
|
9627
|
+
/** Tab index of the input element for keyboard navigation. */
|
|
8251
9628
|
this.tabIndex = 0;
|
|
9629
|
+
/** Whether to visually mark the input as invalid. */
|
|
8252
9630
|
this.markInvalid = false;
|
|
8253
9631
|
/** @internal */
|
|
8254
9632
|
this.destroyed$ = new Subject();
|
|
@@ -8486,8 +9864,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
8486
9864
|
args: ['queryInput', { static: true }]
|
|
8487
9865
|
}] } });
|
|
8488
9866
|
|
|
9867
|
+
/**
|
|
9868
|
+
* Trigger button for the sorting dropdown.
|
|
9869
|
+
* Displays the current sorting mode with a dropdown chevron icon.
|
|
9870
|
+
*
|
|
9871
|
+
* ### Example
|
|
9872
|
+
* @example
|
|
9873
|
+
* ```html
|
|
9874
|
+
* <lx-sorting-dropdown-trigger
|
|
9875
|
+
* label="Sort by"
|
|
9876
|
+
* currentSortingLabel="Name"
|
|
9877
|
+
* [disabled]="false">
|
|
9878
|
+
* </lx-sorting-dropdown-trigger>
|
|
9879
|
+
* ```
|
|
9880
|
+
*/
|
|
8489
9881
|
class SortingDropdownTriggerComponent {
|
|
8490
9882
|
constructor() {
|
|
9883
|
+
/**
|
|
9884
|
+
* Whether the trigger button is disabled.
|
|
9885
|
+
* @default false
|
|
9886
|
+
*/
|
|
8491
9887
|
this.disabled = false;
|
|
8492
9888
|
}
|
|
8493
9889
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SortingDropdownTriggerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
@@ -8510,10 +9906,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
8510
9906
|
* score will be used for sorting.
|
|
8511
9907
|
*/
|
|
8512
9908
|
const RELEVANCE_SORTING_KEY = 'lx-relevance';
|
|
9909
|
+
/**
|
|
9910
|
+
* Dropdown for selecting sorting mode and direction.
|
|
9911
|
+
* Displays available sorting options and allows toggling between ascending/descending order.
|
|
9912
|
+
*
|
|
9913
|
+
* ### Example
|
|
9914
|
+
* @example
|
|
9915
|
+
* ```html
|
|
9916
|
+
* <lx-sorting-dropdown
|
|
9917
|
+
* [currentSorting]="{ key: 'name', order: 'asc' }"
|
|
9918
|
+
* [sortingOptions]="sortOptions"
|
|
9919
|
+
* (apply)="handleSortChange($event)">
|
|
9920
|
+
* </lx-sorting-dropdown>
|
|
9921
|
+
* ```
|
|
9922
|
+
*/
|
|
8513
9923
|
class SortingDropdownComponent {
|
|
8514
9924
|
constructor() {
|
|
9925
|
+
/**
|
|
9926
|
+
* Available sorting options to choose from.
|
|
9927
|
+
* @default []
|
|
9928
|
+
*/
|
|
8515
9929
|
this.sortingOptions = [];
|
|
9930
|
+
/**
|
|
9931
|
+
* Whether to show ascending/descending direction options.
|
|
9932
|
+
* @default true
|
|
9933
|
+
*/
|
|
8516
9934
|
this.showDirectionOptions = true;
|
|
9935
|
+
/** Event emitted when a new sorting configuration is applied. */
|
|
8517
9936
|
this.apply = new EventEmitter();
|
|
8518
9937
|
this.NAME = 'SortingDropdownComponent';
|
|
8519
9938
|
this.sortingDirections = ['asc', 'desc'];
|
|
@@ -8564,17 +9983,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
8564
9983
|
}] } });
|
|
8565
9984
|
|
|
8566
9985
|
/**
|
|
8567
|
-
*
|
|
9986
|
+
* A toggle switch component for selecting between two states (on/off, true/false).
|
|
9987
|
+
* Provides a visual toggle with optional label and supports disabled states.
|
|
9988
|
+
*
|
|
9989
|
+
* ### Example
|
|
9990
|
+
* @example
|
|
9991
|
+
* ```html
|
|
9992
|
+
* <lx-switch
|
|
9993
|
+
* [value]="isEnabled"
|
|
9994
|
+
* [label]="'Enable notifications'"
|
|
9995
|
+
* [labelInFront]="true"
|
|
9996
|
+
* (toggle)="handleToggle($event)">
|
|
9997
|
+
* </lx-switch>
|
|
9998
|
+
* ```
|
|
8568
9999
|
*/
|
|
8569
10000
|
class SwitchComponent {
|
|
8570
10001
|
constructor() {
|
|
8571
|
-
/**
|
|
10002
|
+
/**
|
|
10003
|
+
* Visual size variant of the switch.
|
|
10004
|
+
* @default 'small'
|
|
10005
|
+
*/
|
|
8572
10006
|
this.size = 'small';
|
|
8573
|
-
/**
|
|
10007
|
+
/**
|
|
10008
|
+
* Whether the switch is disabled and cannot be toggled.
|
|
10009
|
+
* @default false
|
|
10010
|
+
*/
|
|
8574
10011
|
this.disabled = false;
|
|
8575
|
-
/**
|
|
10012
|
+
/**
|
|
10013
|
+
* Whether the label should appear before (left of) the switch.
|
|
10014
|
+
* @default true
|
|
10015
|
+
*/
|
|
8576
10016
|
this.labelInFront = true;
|
|
8577
|
-
/**
|
|
10017
|
+
/**
|
|
10018
|
+
* Event emitted when the switch is toggled, returning the new boolean value.
|
|
10019
|
+
*/
|
|
8578
10020
|
this.toggle = new EventEmitter();
|
|
8579
10021
|
}
|
|
8580
10022
|
/** @internal */
|
|
@@ -9600,6 +11042,20 @@ const isRowSelectorActive = (params) => {
|
|
|
9600
11042
|
return isSelectorActive({ ...params, selectorType: 'selector-row' });
|
|
9601
11043
|
};
|
|
9602
11044
|
|
|
11045
|
+
/**
|
|
11046
|
+
* Contextual bubble menu for table editing in the rich text editor.
|
|
11047
|
+
*
|
|
11048
|
+
* Provides three context-sensitive menus that appear when interacting with tables:
|
|
11049
|
+
* - Row menu: appears when a table row selector is active
|
|
11050
|
+
* - Column menu: appears when a table column selector is active
|
|
11051
|
+
* - Table menu: appears when the entire table is selected
|
|
11052
|
+
*
|
|
11053
|
+
* ### Example
|
|
11054
|
+
* @example
|
|
11055
|
+
* ```html
|
|
11056
|
+
* <lx-table-bubble-menu [editor]="editor" />
|
|
11057
|
+
* ```
|
|
11058
|
+
*/
|
|
9603
11059
|
class TableBubbleMenuComponent {
|
|
9604
11060
|
constructor() {
|
|
9605
11061
|
this.NAME = 'RichTextEditorTableActions';
|
|
@@ -10170,8 +11626,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
10170
11626
|
}]
|
|
10171
11627
|
}] });
|
|
10172
11628
|
|
|
11629
|
+
/**
|
|
11630
|
+
* Footer component for modals with content projection for action buttons.
|
|
11631
|
+
*
|
|
11632
|
+
* ### Projection slots
|
|
11633
|
+
* - Default slot: Action buttons or footer content
|
|
11634
|
+
*
|
|
11635
|
+
* ### Example
|
|
11636
|
+
* @example
|
|
11637
|
+
* ```html
|
|
11638
|
+
* <lx-modal-footer [border]="true">
|
|
11639
|
+
* <button lx-button (click)="cancel()">Cancel</button>
|
|
11640
|
+
* <button lx-button color="primary" (click)="save()">Save</button>
|
|
11641
|
+
* </lx-modal-footer>
|
|
11642
|
+
* ```
|
|
11643
|
+
*/
|
|
10173
11644
|
class ModalFooterComponent {
|
|
10174
11645
|
constructor() {
|
|
11646
|
+
/**
|
|
11647
|
+
* Whether to show a top border on the footer.
|
|
11648
|
+
* @default false
|
|
11649
|
+
*/
|
|
10175
11650
|
this.border = false;
|
|
10176
11651
|
}
|
|
10177
11652
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ModalFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
@@ -10184,9 +11659,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
10184
11659
|
type: Input
|
|
10185
11660
|
}] } });
|
|
10186
11661
|
|
|
11662
|
+
/**
|
|
11663
|
+
* Header component for modals with optional title and content projection.
|
|
11664
|
+
*
|
|
11665
|
+
* ### Projection slots
|
|
11666
|
+
* - Default slot: Custom header content displayed before the title
|
|
11667
|
+
*
|
|
11668
|
+
* ### Example
|
|
11669
|
+
* @example
|
|
11670
|
+
* ```html
|
|
11671
|
+
* <lx-modal-header [title]="'Create New Item'" [bottomBorder]="true">
|
|
11672
|
+
* <button class="close-button">×</button>
|
|
11673
|
+
* </lx-modal-header>
|
|
11674
|
+
* ```
|
|
11675
|
+
*/
|
|
10187
11676
|
class ModalHeaderComponent {
|
|
10188
11677
|
constructor() {
|
|
11678
|
+
/**
|
|
11679
|
+
* The title text to display in the header.
|
|
11680
|
+
* @default ''
|
|
11681
|
+
*/
|
|
10189
11682
|
this.title = '';
|
|
11683
|
+
/**
|
|
11684
|
+
* Whether to show a bottom border on the header.
|
|
11685
|
+
* @default true
|
|
11686
|
+
*/
|
|
10190
11687
|
this.bottomBorder = true;
|
|
10191
11688
|
}
|
|
10192
11689
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ModalHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
@@ -10504,6 +12001,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
10504
12001
|
}]
|
|
10505
12002
|
}] });
|
|
10506
12003
|
|
|
12004
|
+
/**
|
|
12005
|
+
* Modal dialog for creating and editing hyperlinks in the rich text editor.
|
|
12006
|
+
*
|
|
12007
|
+
* Provides a form to input link text and URL with validation. Supports creating new links
|
|
12008
|
+
* and editing existing ones. The modal state is managed by the link plugin.
|
|
12009
|
+
*
|
|
12010
|
+
* ### Example
|
|
12011
|
+
* @example
|
|
12012
|
+
* ```html
|
|
12013
|
+
* <lx-link-modal [editor]="editor" />
|
|
12014
|
+
* ```
|
|
12015
|
+
*/
|
|
10507
12016
|
class LinkModalComponent {
|
|
10508
12017
|
constructor() {
|
|
10509
12018
|
this.NAME = 'LinkModalComponent';
|
|
@@ -10575,9 +12084,32 @@ const ensureHttpProtocol = (url) => {
|
|
|
10575
12084
|
return url.startsWith('http://') || url.startsWith('https://') ? url : `http://${url}`;
|
|
10576
12085
|
};
|
|
10577
12086
|
|
|
12087
|
+
/**
|
|
12088
|
+
* Toolbar component for the rich text editor providing formatting controls.
|
|
12089
|
+
*
|
|
12090
|
+
* Displays formatting buttons based on enabled Tiptap extensions, including text styles,
|
|
12091
|
+
* bold/italic/underline, lists, alignment, links, code blocks, and table insertion.
|
|
12092
|
+
* The toolbar visibility is controlled by the `isVisible` input and link modal state.
|
|
12093
|
+
*
|
|
12094
|
+
* ### Projection slots
|
|
12095
|
+
* - `.diagram-btn`: Custom diagram button when `lxDiagram` extension is enabled
|
|
12096
|
+
*
|
|
12097
|
+
* ### Example
|
|
12098
|
+
* @example
|
|
12099
|
+
* ```html
|
|
12100
|
+
* <lx-rich-text-editor-toolbar [editor]="editor" [isVisible]="true">
|
|
12101
|
+
* <button class="diagram-btn" lx-button>Insert Diagram</button>
|
|
12102
|
+
* </lx-rich-text-editor-toolbar>
|
|
12103
|
+
* ```
|
|
12104
|
+
*/
|
|
10578
12105
|
class RichTextEditorToolbarComponent {
|
|
10579
12106
|
constructor() {
|
|
10580
12107
|
this.NAME = 'RichTextEditorToolbarComponent';
|
|
12108
|
+
/**
|
|
12109
|
+
* Controls the visibility of the toolbar.
|
|
12110
|
+
*
|
|
12111
|
+
* @default true
|
|
12112
|
+
*/
|
|
10581
12113
|
this.isVisible = input(true);
|
|
10582
12114
|
this.headingLevels = [];
|
|
10583
12115
|
this.isLinkModalOpen = signal(false);
|
|
@@ -10785,16 +12317,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
10785
12317
|
}]
|
|
10786
12318
|
}], ctorParameters: () => [] });
|
|
10787
12319
|
|
|
12320
|
+
/**
|
|
12321
|
+
* Base component for custom Tiptap node views in Angular.
|
|
12322
|
+
*
|
|
12323
|
+
* Extend this component to create custom node views for the rich text editor.
|
|
12324
|
+
* Provides all Tiptap NodeViewProps as required input signals.
|
|
12325
|
+
*/
|
|
10788
12326
|
// eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection
|
|
10789
12327
|
class AngularNodeViewComponent {
|
|
10790
12328
|
constructor() {
|
|
12329
|
+
/** The Tiptap editor instance. */
|
|
10791
12330
|
this.editor = input.required();
|
|
12331
|
+
/** The ProseMirror node being rendered. */
|
|
10792
12332
|
this.node = input.required();
|
|
12333
|
+
/** Array of decorations for this node. */
|
|
10793
12334
|
this.decorations = input.required();
|
|
12335
|
+
/** Whether the node is currently selected. */
|
|
10794
12336
|
this.selected = input.required();
|
|
12337
|
+
/** The Tiptap extension that created this node. */
|
|
10795
12338
|
this.extension = input.required();
|
|
12339
|
+
/** Function to get the node's position in the document. */
|
|
10796
12340
|
this.getPos = input.required();
|
|
12341
|
+
/** Function to update the node's attributes. */
|
|
10797
12342
|
this.updateAttributes = input.required();
|
|
12343
|
+
/** Function to delete the node from the document. */
|
|
10798
12344
|
this.deleteNode = input.required();
|
|
10799
12345
|
}
|
|
10800
12346
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: AngularNodeViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
@@ -11236,25 +12782,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
11236
12782
|
}] });
|
|
11237
12783
|
|
|
11238
12784
|
/**
|
|
11239
|
-
*
|
|
11240
|
-
*
|
|
11241
|
-
* ## Examples
|
|
11242
|
-
|
|
11243
|
-
* This popover encapsulates this open source library: https://github.com/ncstate-sat/popover,
|
|
11244
|
-
* make sure to also check out the docs over there.
|
|
12785
|
+
* A floating overlay component anchored to a trigger element.
|
|
12786
|
+
* Based on the [ncstate-sat/popover](https://github.com/ncstate-sat/popover) library.
|
|
11245
12787
|
*
|
|
11246
|
-
*
|
|
11247
|
-
*
|
|
11248
|
-
*
|
|
12788
|
+
* The popover requires one of the trigger directives:
|
|
12789
|
+
* - `lxPopoverHover`: Shows on hover (both anchor and popover body)
|
|
12790
|
+
* - `lxPopoverClick`: Shows on click (stays open while hovering popover body)
|
|
11249
12791
|
*
|
|
11250
|
-
*
|
|
11251
|
-
*
|
|
11252
|
-
* ### Example:
|
|
12792
|
+
* ### Example with hover trigger
|
|
12793
|
+
* @example
|
|
11253
12794
|
* ```html
|
|
11254
12795
|
* <div lxPopoverHover
|
|
11255
12796
|
* hoverAnchor
|
|
11256
12797
|
* satPopoverAnchor
|
|
11257
|
-
* #anchor="hoverAnchor"
|
|
12798
|
+
* #anchor="hoverAnchor">Hover me</div>
|
|
11258
12799
|
* <lx-popover [trigger]="anchor"
|
|
11259
12800
|
* horizontalAlign="after"
|
|
11260
12801
|
* verticalAlign="center">
|
|
@@ -11262,18 +12803,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
11262
12803
|
* </lx-popover>
|
|
11263
12804
|
* ```
|
|
11264
12805
|
*
|
|
11265
|
-
*
|
|
11266
|
-
*
|
|
11267
|
-
* needs to fetch some data before opening it, we do not register a click EventListener in this directive,
|
|
11268
|
-
* but require the developer to implement that in the component, where the popover is used.
|
|
11269
|
-
*
|
|
11270
|
-
* ### Example:
|
|
12806
|
+
* ### Example with click trigger
|
|
12807
|
+
* @example
|
|
11271
12808
|
* ```html
|
|
11272
12809
|
* <div lxPopoverClick
|
|
11273
12810
|
* clickAnchor
|
|
11274
12811
|
* satPopoverAnchor
|
|
11275
12812
|
* #anchor="clickAnchor"
|
|
11276
|
-
* (click)="popover.open()">Click
|
|
12813
|
+
* (click)="popover.open()">Click me</div>
|
|
11277
12814
|
* <lx-popover [trigger]="anchor"
|
|
11278
12815
|
* horizontalAlign="after"
|
|
11279
12816
|
* verticalAlign="center"
|
|
@@ -11282,10 +12819,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
11282
12819
|
* </lx-popover>
|
|
11283
12820
|
* ```
|
|
11284
12821
|
*
|
|
11285
|
-
*
|
|
11286
|
-
*
|
|
11287
|
-
*
|
|
11288
|
-
*
|
|
12822
|
+
* ### With strict templates
|
|
12823
|
+
* When using `strictTemplates=true`, bind `satPopoverAnchor` to the popover's internal reference:
|
|
12824
|
+
* ### Example
|
|
12825
|
+
* @example
|
|
11289
12826
|
* ```html
|
|
11290
12827
|
* <div [satPopoverAnchor]="popover.satPopover"></div>
|
|
11291
12828
|
* <lx-popover #popover>
|
|
@@ -11700,6 +13237,27 @@ var LxTabGroupKeyCode;
|
|
|
11700
13237
|
LxTabGroupKeyCode["End"] = "End";
|
|
11701
13238
|
})(LxTabGroupKeyCode || (LxTabGroupKeyCode = {}));
|
|
11702
13239
|
|
|
13240
|
+
/**
|
|
13241
|
+
* Individual tab component used inside `lx-tab-group`.
|
|
13242
|
+
* Supports icons, counters, router links, and keyboard navigation.
|
|
13243
|
+
* Content is projected and rendered by the parent tab group when the tab is active.
|
|
13244
|
+
*
|
|
13245
|
+
* ### Example
|
|
13246
|
+
* @example
|
|
13247
|
+
* ```html
|
|
13248
|
+
* <lx-tab-group>
|
|
13249
|
+
* <lx-tab [label]="'General'" [icon]="'settings'" [disabled]="false">
|
|
13250
|
+
* <p>General content</p>
|
|
13251
|
+
* </lx-tab>
|
|
13252
|
+
* <lx-tab [label]="'Notifications'" [counter]="3">
|
|
13253
|
+
* <p>Notification content</p>
|
|
13254
|
+
* </lx-tab>
|
|
13255
|
+
* <lx-tab [label]="'Settings'" [tabLink]="['/settings']">
|
|
13256
|
+
* <p>Settings content</p>
|
|
13257
|
+
* </lx-tab>
|
|
13258
|
+
* </lx-tab-group>
|
|
13259
|
+
* ```
|
|
13260
|
+
*/
|
|
11703
13261
|
class TabComponent {
|
|
11704
13262
|
set isActive(value) {
|
|
11705
13263
|
this._isActive = value;
|
|
@@ -11716,18 +13274,52 @@ class TabComponent {
|
|
|
11716
13274
|
this.router = router;
|
|
11717
13275
|
this.activatedRoute = activatedRoute;
|
|
11718
13276
|
/**
|
|
11719
|
-
* The
|
|
13277
|
+
* The design of the icon.
|
|
11720
13278
|
* @default NonInteractive
|
|
11721
13279
|
*/
|
|
11722
13280
|
this.iconDesign = 'NonInteractive';
|
|
13281
|
+
/**
|
|
13282
|
+
* The label text displayed for the tab.
|
|
13283
|
+
* @default ''
|
|
13284
|
+
*/
|
|
11723
13285
|
this.label = '';
|
|
13286
|
+
/**
|
|
13287
|
+
* Options for the RouterLinkActive directive.
|
|
13288
|
+
* @default { exact: true }
|
|
13289
|
+
*/
|
|
11724
13290
|
this.routerLinkActiveOptions = { exact: true };
|
|
13291
|
+
/**
|
|
13292
|
+
* Size of the counter badge.
|
|
13293
|
+
* @default 'default'
|
|
13294
|
+
*/
|
|
11725
13295
|
this.counterBadgeSize = 'default';
|
|
13296
|
+
/**
|
|
13297
|
+
* Whether to remove margin from the tab.
|
|
13298
|
+
* @default false
|
|
13299
|
+
*/
|
|
11726
13300
|
this.noMargin = false;
|
|
13301
|
+
/**
|
|
13302
|
+
* Whether to remove left margin for the first tab.
|
|
13303
|
+
* @default false
|
|
13304
|
+
*/
|
|
11727
13305
|
this.noLeftMarginForFirstTab = false;
|
|
13306
|
+
/**
|
|
13307
|
+
* Background color of the tab.
|
|
13308
|
+
* @default 'white'
|
|
13309
|
+
*/
|
|
11728
13310
|
this.background = 'white';
|
|
13311
|
+
/**
|
|
13312
|
+
* Whether the tab is disabled and cannot be selected.
|
|
13313
|
+
* @default false
|
|
13314
|
+
*/
|
|
11729
13315
|
this.disabled = false;
|
|
13316
|
+
/**
|
|
13317
|
+
* Event emitted when the tab is selected.
|
|
13318
|
+
*/
|
|
11730
13319
|
this.switch = new EventEmitter();
|
|
13320
|
+
/**
|
|
13321
|
+
* Event emitted when a keyboard key is pressed on the tab.
|
|
13322
|
+
*/
|
|
11731
13323
|
this.keyDownAction = new EventEmitter();
|
|
11732
13324
|
this._isActive = false;
|
|
11733
13325
|
this.tabId = uniqueId$1('tab');
|
|
@@ -11812,6 +13404,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
11812
13404
|
args: [RouterLinkActive]
|
|
11813
13405
|
}] } });
|
|
11814
13406
|
|
|
13407
|
+
/**
|
|
13408
|
+
* Container for tab navigation that manages active tab state and keyboard interactions.
|
|
13409
|
+
* Supports both static tabs and router-linked tabs with keyboard navigation (arrow keys, Home, End).
|
|
13410
|
+
*
|
|
13411
|
+
* ### Content Projection
|
|
13412
|
+
* - Project `lx-tab` components as children
|
|
13413
|
+
*
|
|
13414
|
+
* ### Example
|
|
13415
|
+
* @example
|
|
13416
|
+
* ```html
|
|
13417
|
+
* <lx-tab-group [selectedIndex]="0" (indexChange)="onTabChange($event)">
|
|
13418
|
+
* <lx-tab [label]="'General'" [icon]="'settings'">
|
|
13419
|
+
* <p>General content</p>
|
|
13420
|
+
* </lx-tab>
|
|
13421
|
+
* <lx-tab [label]="'Notifications'" [counter]="3">
|
|
13422
|
+
* <p>Notification content</p>
|
|
13423
|
+
* </lx-tab>
|
|
13424
|
+
* </lx-tab-group>
|
|
13425
|
+
* ```
|
|
13426
|
+
*/
|
|
11815
13427
|
class TabGroupComponent {
|
|
11816
13428
|
/** @internal */
|
|
11817
13429
|
get tabIds() {
|
|
@@ -11826,11 +13438,19 @@ class TabGroupComponent {
|
|
|
11826
13438
|
}
|
|
11827
13439
|
constructor(cd) {
|
|
11828
13440
|
this.cd = cd;
|
|
13441
|
+
/**
|
|
13442
|
+
* Whether the tabs should be centered.
|
|
13443
|
+
* @default false
|
|
13444
|
+
*/
|
|
11829
13445
|
this.isCentered = false;
|
|
11830
13446
|
/**
|
|
11831
|
-
* The tab whose content should be displayed.
|
|
13447
|
+
* The index of the tab whose content should be displayed.
|
|
13448
|
+
* @default 0
|
|
11832
13449
|
*/
|
|
11833
13450
|
this.selectedIndex = 0;
|
|
13451
|
+
/**
|
|
13452
|
+
* Event emitted when the selected tab index changes.
|
|
13453
|
+
*/
|
|
11834
13454
|
this.indexChange = new EventEmitter();
|
|
11835
13455
|
/**
|
|
11836
13456
|
* The tab that is currently focused via keyboard.
|