@lucca-front/ng 22.1.0-rc.4 → 22.1.1
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/README.md +6 -0
- package/fesm2022/lucca-front-ng-a11y.mjs +9 -9
- package/fesm2022/lucca-front-ng-activity-feed.mjs +19 -15
- package/fesm2022/lucca-front-ng-activity-feed.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-api.mjs +40 -40
- package/fesm2022/lucca-front-ng-app-layout.mjs +3 -3
- package/fesm2022/lucca-front-ng-approbation-inbox.mjs +78 -56
- package/fesm2022/lucca-front-ng-approbation-inbox.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-box.mjs +3 -3
- package/fesm2022/lucca-front-ng-breadcrumbs.mjs +6 -6
- package/fesm2022/lucca-front-ng-bubble-icon.mjs +12 -7
- package/fesm2022/lucca-front-ng-bubble-icon.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-bubble-illustration.mjs +3 -3
- package/fesm2022/lucca-front-ng-callout.mjs +24 -24
- package/fesm2022/lucca-front-ng-chip.mjs +4 -4
- package/fesm2022/lucca-front-ng-chip.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-clear.mjs +4 -4
- package/fesm2022/lucca-front-ng-clear.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-code.mjs +3 -3
- package/fesm2022/lucca-front-ng-color.mjs +3 -3
- package/fesm2022/lucca-front-ng-comment.mjs +12 -12
- package/fesm2022/lucca-front-ng-comment.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-container.mjs +3 -3
- package/fesm2022/lucca-front-ng-core-select-api.mjs +9 -9
- package/fesm2022/lucca-front-ng-core-select-department.mjs +8 -6
- package/fesm2022/lucca-front-ng-core-select-department.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-core-select-establishment.mjs +11 -9
- package/fesm2022/lucca-front-ng-core-select-establishment.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-core-select-job-qualification.mjs +6 -6
- package/fesm2022/lucca-front-ng-core-select-legal-units.mjs +8 -8
- package/fesm2022/lucca-front-ng-core-select-legal-units.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-core-select-occupation-category.mjs +3 -3
- package/fesm2022/lucca-front-ng-core-select-user.mjs +22 -20
- package/fesm2022/lucca-front-ng-core-select-user.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-core-select.mjs +77 -62
- package/fesm2022/lucca-front-ng-core-select.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-core.mjs +19 -19
- package/fesm2022/lucca-front-ng-data-table.mjs +40 -32
- package/fesm2022/lucca-front-ng-data-table.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-date.mjs +40 -40
- package/fesm2022/lucca-front-ng-date2.mjs +93 -40
- package/fesm2022/lucca-front-ng-date2.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-department.mjs +24 -24
- package/fesm2022/lucca-front-ng-dialog.mjs +56 -48
- package/fesm2022/lucca-front-ng-dialog.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-divider.mjs +3 -3
- package/fesm2022/lucca-front-ng-dropdown.mjs +42 -42
- package/fesm2022/lucca-front-ng-dropdown.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-empty-state.mjs +9 -9
- package/fesm2022/lucca-front-ng-error-page.mjs +3 -3
- package/fesm2022/lucca-front-ng-establishment.mjs +33 -33
- package/fesm2022/lucca-front-ng-fancy-box.mjs +3 -3
- package/fesm2022/lucca-front-ng-file-upload.mjs +33 -26
- package/fesm2022/lucca-front-ng-file-upload.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-filter-pills-core.mjs +6 -6
- package/fesm2022/lucca-front-ng-filter-pills.mjs +90 -21
- package/fesm2022/lucca-front-ng-filter-pills.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-footer.mjs +3 -3
- package/fesm2022/lucca-front-ng-form-field.mjs +24 -20
- package/fesm2022/lucca-front-ng-form-field.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-form-header.mjs +3 -3
- package/fesm2022/lucca-front-ng-form-label.mjs +3 -3
- package/fesm2022/lucca-front-ng-form.mjs +3 -3
- package/fesm2022/lucca-front-ng-formly.mjs +58 -58
- package/fesm2022/lucca-front-ng-forms-phone-number-input.mjs +6 -6
- package/fesm2022/lucca-front-ng-forms-rich-text-input-formatters-html.mjs +3 -3
- package/fesm2022/lucca-front-ng-forms-rich-text-input-formatters-markdown.mjs +6 -6
- package/fesm2022/lucca-front-ng-forms-rich-text-input-formatters-plain-text.mjs +3 -3
- package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs +38 -37
- package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-forms.mjs +68 -48
- package/fesm2022/lucca-front-ng-forms.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-gauge.mjs +3 -3
- package/fesm2022/lucca-front-ng-grid.mjs +6 -6
- package/fesm2022/lucca-front-ng-highlight-data.mjs +3 -3
- package/fesm2022/lucca-front-ng-highlight-section.mjs +6 -3
- package/fesm2022/lucca-front-ng-highlight-section.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-highlight-text.mjs +3 -3
- package/fesm2022/lucca-front-ng-horizontal-navigation.mjs +9 -9
- package/fesm2022/lucca-front-ng-impersonation.mjs +5 -3
- package/fesm2022/lucca-front-ng-impersonation.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-index-table.mjs +44 -38
- package/fesm2022/lucca-front-ng-index-table.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-inline-message.mjs +3 -3
- package/fesm2022/lucca-front-ng-input.mjs +21 -21
- package/fesm2022/lucca-front-ng-kbd.mjs +306 -0
- package/fesm2022/lucca-front-ng-kbd.mjs.map +1 -0
- package/fesm2022/lucca-front-ng-link.mjs +38 -14
- package/fesm2022/lucca-front-ng-link.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-listbox.mjs +13 -10
- package/fesm2022/lucca-front-ng-listbox.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-listing.mjs +21 -11
- package/fesm2022/lucca-front-ng-listing.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-loading.mjs +51 -10
- package/fesm2022/lucca-front-ng-loading.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-main-layout.mjs +6 -6
- package/fesm2022/lucca-front-ng-markdown.mjs +3 -3
- package/fesm2022/lucca-front-ng-mobile-push.mjs +3 -3
- package/fesm2022/lucca-front-ng-modal.mjs +22 -22
- package/fesm2022/lucca-front-ng-multi-select.mjs +42 -42
- package/fesm2022/lucca-front-ng-multi-select.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-new-badge.mjs +3 -3
- package/fesm2022/lucca-front-ng-number-format.mjs +6 -6
- package/fesm2022/lucca-front-ng-number.mjs +7 -7
- package/fesm2022/lucca-front-ng-option.mjs +130 -130
- package/fesm2022/lucca-front-ng-option.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-page-header.mjs +3 -3
- package/fesm2022/lucca-front-ng-pagination.mjs +3 -3
- package/fesm2022/lucca-front-ng-plg-push.mjs +3 -3
- package/fesm2022/lucca-front-ng-popover.mjs +17 -17
- package/fesm2022/lucca-front-ng-popover2.mjs +54 -21
- package/fesm2022/lucca-front-ng-popover2.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-popup.mjs +10 -10
- package/fesm2022/lucca-front-ng-priority-level.mjs +128 -0
- package/fesm2022/lucca-front-ng-priority-level.mjs.map +1 -0
- package/fesm2022/lucca-front-ng-progress-bar.mjs +3 -3
- package/fesm2022/lucca-front-ng-progress-stepper.mjs +6 -6
- package/fesm2022/lucca-front-ng-read-more.mjs +6 -6
- package/fesm2022/lucca-front-ng-read-more.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-resource-card.mjs +12 -12
- package/fesm2022/lucca-front-ng-safe-content.mjs +10 -10
- package/fesm2022/lucca-front-ng-scroll-box.mjs +4 -4
- package/fesm2022/lucca-front-ng-scroll-box.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-scroll.mjs +9 -10
- package/fesm2022/lucca-front-ng-scroll.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-segmented-control-tabs.mjs +8 -8
- package/fesm2022/lucca-front-ng-segmented-control.mjs +8 -8
- package/fesm2022/lucca-front-ng-select.mjs +14 -14
- package/fesm2022/lucca-front-ng-sidepanel.mjs +7 -7
- package/fesm2022/lucca-front-ng-simple-select.mjs +16 -16
- package/fesm2022/lucca-front-ng-simple-select.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-software-icon-wrapper.mjs +6 -6
- package/fesm2022/lucca-front-ng-software-icon.mjs +3 -3
- package/fesm2022/lucca-front-ng-sortable-list.mjs +6 -6
- package/fesm2022/lucca-front-ng-status-badge.mjs +3 -3
- package/fesm2022/lucca-front-ng-table-of-content.mjs +6 -6
- package/fesm2022/lucca-front-ng-text-flow.mjs +4 -4
- package/fesm2022/lucca-front-ng-text-flow.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-time.mjs +18 -18
- package/fesm2022/lucca-front-ng-title.mjs +10 -10
- package/fesm2022/lucca-front-ng-toast.mjs +10 -10
- package/fesm2022/lucca-front-ng-tree-select.mjs +7 -7
- package/fesm2022/lucca-front-ng-tree-select.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-user-popover.mjs +22 -22
- package/fesm2022/lucca-front-ng-user-popover.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-user.mjs +68 -61
- package/fesm2022/lucca-front-ng-user.mjs.map +1 -1
- package/fesm2022/lucca-front-ng-vertical-navigation.mjs +12 -12
- package/package.json +23 -10
- package/schematics/lib/local-deps/package-lock.json +7 -7
- package/schematics/lib/local-deps/package.json +1 -1
- package/schematics/lu-button/migration.js +59 -33
- package/src/components/_sidepanel.scss +2 -2
- package/src/components/cdk/_global.scss +4 -0
- package/src/components/cdk/_overlay.scss +1 -1
- package/src/definitions/option/_option-item.scss +7 -4
- package/types/lucca-front-ng-a11y.d.ts +1 -1
- package/types/lucca-front-ng-activity-feed.d.ts +13 -9
- package/types/lucca-front-ng-api.d.ts +31 -31
- package/types/lucca-front-ng-approbation-inbox.d.ts +22 -14
- package/types/lucca-front-ng-bubble-icon.d.ts +5 -2
- package/types/lucca-front-ng-callout.d.ts +17 -17
- package/types/lucca-front-ng-chip.d.ts +7 -7
- package/types/lucca-front-ng-clear.d.ts +2 -2
- package/types/lucca-front-ng-color.d.ts +3 -3
- package/types/lucca-front-ng-comment.d.ts +14 -14
- package/types/lucca-front-ng-container.d.ts +1 -1
- package/types/lucca-front-ng-core-select-api.d.ts +7 -7
- package/types/lucca-front-ng-core-select-department.d.ts +7 -5
- package/types/lucca-front-ng-core-select-establishment.d.ts +8 -6
- package/types/lucca-front-ng-core-select-job-qualification.d.ts +2 -2
- package/types/lucca-front-ng-core-select-legal-units.d.ts +3 -3
- package/types/lucca-front-ng-core-select-occupation-category.d.ts +2 -2
- package/types/lucca-front-ng-core-select-user.d.ts +14 -12
- package/types/lucca-front-ng-core-select.d.ts +56 -41
- package/types/lucca-front-ng-core.d.ts +5 -5
- package/types/lucca-front-ng-data-table.d.ts +38 -33
- package/types/lucca-front-ng-date.d.ts +13 -13
- package/types/lucca-front-ng-date2.d.ts +56 -37
- package/types/lucca-front-ng-department.d.ts +2 -2
- package/types/lucca-front-ng-dialog.d.ts +9 -9
- package/types/lucca-front-ng-divider.d.ts +2 -2
- package/types/lucca-front-ng-dropdown.d.ts +2 -2
- package/types/lucca-front-ng-empty-state.d.ts +20 -20
- package/types/lucca-front-ng-establishment.d.ts +15 -15
- package/types/lucca-front-ng-fancy-box.d.ts +12 -12
- package/types/lucca-front-ng-file-upload.d.ts +21 -15
- package/types/lucca-front-ng-filter-pills.d.ts +27 -18
- package/types/lucca-front-ng-footer.d.ts +1 -1
- package/types/lucca-front-ng-form-field.d.ts +19 -19
- package/types/lucca-front-ng-form-label.d.ts +4 -4
- package/types/lucca-front-ng-form.d.ts +1 -1
- package/types/lucca-front-ng-forms-phone-number-input.d.ts +11 -11
- package/types/lucca-front-ng-forms-rich-text-input.d.ts +11 -11
- package/types/lucca-front-ng-forms.d.ts +59 -49
- package/types/lucca-front-ng-grid.d.ts +23 -23
- package/types/lucca-front-ng-highlight-data.d.ts +5 -5
- package/types/lucca-front-ng-highlight-section.d.ts +6 -3
- package/types/lucca-front-ng-horizontal-navigation.d.ts +4 -4
- package/types/lucca-front-ng-impersonation.d.ts +8 -6
- package/types/lucca-front-ng-index-table.d.ts +20 -18
- package/types/lucca-front-ng-inline-message.d.ts +2 -2
- package/types/lucca-front-ng-kbd.d.ts +59 -0
- package/types/lucca-front-ng-link.d.ts +17 -4
- package/types/lucca-front-ng-listbox.d.ts +10 -9
- package/types/lucca-front-ng-listing.d.ts +14 -3
- package/types/lucca-front-ng-loading.d.ts +18 -6
- package/types/lucca-front-ng-main-layout.d.ts +9 -9
- package/types/lucca-front-ng-modal.d.ts +4 -4
- package/types/lucca-front-ng-multi-select.d.ts +21 -21
- package/types/lucca-front-ng-option.d.ts +3 -3
- package/types/lucca-front-ng-page-header.d.ts +2 -2
- package/types/lucca-front-ng-pagination.d.ts +3 -3
- package/types/lucca-front-ng-popover.d.ts +18 -18
- package/types/lucca-front-ng-popover2.d.ts +9 -8
- package/types/lucca-front-ng-popup.d.ts +4 -4
- package/types/{lucca-front-ng-priority-levels.d.ts → lucca-front-ng-priority-level.d.ts} +11 -11
- package/types/lucca-front-ng-progress-bar.d.ts +1 -1
- package/types/lucca-front-ng-progress-stepper.d.ts +2 -2
- package/types/lucca-front-ng-read-more.d.ts +6 -6
- package/types/lucca-front-ng-resource-card.d.ts +3 -3
- package/types/lucca-front-ng-segmented-control-tabs.d.ts +5 -5
- package/types/lucca-front-ng-segmented-control.d.ts +3 -3
- package/types/lucca-front-ng-select.d.ts +9 -9
- package/types/lucca-front-ng-sidepanel.d.ts +1 -1
- package/types/lucca-front-ng-simple-select.d.ts +9 -9
- package/types/lucca-front-ng-software-icon.d.ts +1 -1
- package/types/lucca-front-ng-sortable-list.d.ts +1 -1
- package/types/lucca-front-ng-status-badge.d.ts +1 -1
- package/types/lucca-front-ng-time.d.ts +19 -19
- package/types/lucca-front-ng-title.d.ts +2 -2
- package/types/lucca-front-ng-toast.d.ts +2 -2
- package/types/lucca-front-ng-tree-select.d.ts +2 -2
- package/types/lucca-front-ng-user-popover.d.ts +1 -2
- package/types/lucca-front-ng-user.d.ts +26 -20
- package/types/lucca-front-ng-vertical-navigation.d.ts +5 -5
- package/fesm2022/lucca-front-ng-priority-levels.mjs +0 -128
- package/fesm2022/lucca-front-ng-priority-levels.mjs.map +0 -1
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, input, computed, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { intlInputOptions } from '@lucca-front/ng/core';
|
|
4
|
+
import { NgTemplateOutlet } from '@angular/common';
|
|
5
|
+
import { IconComponent } from '@lucca-front/ng/icon';
|
|
6
|
+
|
|
7
|
+
const Translations = {
|
|
8
|
+
'nl-BE': {
|
|
9
|
+
alt: 'Alt',
|
|
10
|
+
option: 'Option',
|
|
11
|
+
control: 'Ctrl',
|
|
12
|
+
meta: 'Win',
|
|
13
|
+
command: 'Cmd',
|
|
14
|
+
shift: 'Shift',
|
|
15
|
+
tab: 'Tab',
|
|
16
|
+
space: 'Spatie',
|
|
17
|
+
enter: 'Enter',
|
|
18
|
+
escape: 'Esc',
|
|
19
|
+
backspace: 'Backspace',
|
|
20
|
+
delete: 'Delete',
|
|
21
|
+
home: 'Home',
|
|
22
|
+
end: 'End',
|
|
23
|
+
pageUp: 'Page Up',
|
|
24
|
+
pageDown: 'Page Down',
|
|
25
|
+
arrowUp: 'pijl omhoog',
|
|
26
|
+
arrowDown: 'pijl omlaag',
|
|
27
|
+
arrowLeft: 'pijl naar links',
|
|
28
|
+
arrowRight: 'pijl naar rechts',
|
|
29
|
+
},
|
|
30
|
+
fr: {
|
|
31
|
+
alt: 'Alt',
|
|
32
|
+
option: 'Option',
|
|
33
|
+
control: 'Ctrl',
|
|
34
|
+
meta: 'Win',
|
|
35
|
+
command: 'Cmd',
|
|
36
|
+
shift: 'Maj',
|
|
37
|
+
tab: 'Tab',
|
|
38
|
+
space: 'Espace',
|
|
39
|
+
enter: 'Entrée',
|
|
40
|
+
escape: 'Échap',
|
|
41
|
+
backspace: 'Retour arrière',
|
|
42
|
+
delete: 'Suppr',
|
|
43
|
+
home: 'Début',
|
|
44
|
+
end: 'Fin',
|
|
45
|
+
pageUp: 'Page préc',
|
|
46
|
+
pageDown: 'Page suiv',
|
|
47
|
+
arrowUp: 'flèche haut',
|
|
48
|
+
arrowDown: 'flèche bas',
|
|
49
|
+
arrowLeft: 'flèche gauche',
|
|
50
|
+
arrowRight: 'flèche droite',
|
|
51
|
+
},
|
|
52
|
+
de: {
|
|
53
|
+
alt: 'Alt',
|
|
54
|
+
option: 'Option',
|
|
55
|
+
control: 'Strg',
|
|
56
|
+
meta: 'Win',
|
|
57
|
+
command: 'Cmd',
|
|
58
|
+
shift: 'Umschalt',
|
|
59
|
+
tab: 'Tab',
|
|
60
|
+
space: 'Leertaste',
|
|
61
|
+
enter: 'Eingabe',
|
|
62
|
+
escape: 'Esc',
|
|
63
|
+
backspace: 'Rücktaste',
|
|
64
|
+
delete: 'Entf',
|
|
65
|
+
home: 'Pos1',
|
|
66
|
+
end: 'Ende',
|
|
67
|
+
pageUp: 'Bild auf',
|
|
68
|
+
pageDown: 'Bild ab',
|
|
69
|
+
arrowUp: 'Pfeil nach oben',
|
|
70
|
+
arrowDown: 'Pfeil nach unten',
|
|
71
|
+
arrowLeft: 'Pfeil nach links',
|
|
72
|
+
arrowRight: 'Pfeil nach rechts',
|
|
73
|
+
},
|
|
74
|
+
en: {
|
|
75
|
+
alt: 'Alt',
|
|
76
|
+
option: 'Option',
|
|
77
|
+
control: 'Ctrl',
|
|
78
|
+
meta: 'Win',
|
|
79
|
+
command: 'Cmd',
|
|
80
|
+
shift: 'Shift',
|
|
81
|
+
tab: 'Tab',
|
|
82
|
+
space: 'Space',
|
|
83
|
+
enter: 'Enter',
|
|
84
|
+
escape: 'Esc',
|
|
85
|
+
backspace: 'Backspace',
|
|
86
|
+
delete: 'Delete',
|
|
87
|
+
home: 'Home',
|
|
88
|
+
end: 'End',
|
|
89
|
+
pageUp: 'Page Up',
|
|
90
|
+
pageDown: 'Page Down',
|
|
91
|
+
arrowUp: 'up arrow',
|
|
92
|
+
arrowDown: 'down arrow',
|
|
93
|
+
arrowLeft: 'left arrow',
|
|
94
|
+
arrowRight: 'right arrow',
|
|
95
|
+
},
|
|
96
|
+
es: {
|
|
97
|
+
alt: 'Alt',
|
|
98
|
+
option: 'Opción',
|
|
99
|
+
control: 'Ctrl',
|
|
100
|
+
meta: 'Win',
|
|
101
|
+
command: 'Cmd',
|
|
102
|
+
shift: 'Mayús',
|
|
103
|
+
tab: 'Tab',
|
|
104
|
+
space: 'Espacio',
|
|
105
|
+
enter: 'Intro',
|
|
106
|
+
escape: 'Esc',
|
|
107
|
+
backspace: 'Retroceso',
|
|
108
|
+
delete: 'Supr',
|
|
109
|
+
home: 'Inicio',
|
|
110
|
+
end: 'Fin',
|
|
111
|
+
pageUp: 'Re Pág',
|
|
112
|
+
pageDown: 'Av Pág',
|
|
113
|
+
arrowUp: 'flecha arriba',
|
|
114
|
+
arrowDown: 'flecha abajo',
|
|
115
|
+
arrowLeft: 'flecha izquierda',
|
|
116
|
+
arrowRight: 'flecha derecha',
|
|
117
|
+
},
|
|
118
|
+
it: {
|
|
119
|
+
alt: 'Alt',
|
|
120
|
+
option: 'Opzione',
|
|
121
|
+
control: 'Ctrl',
|
|
122
|
+
meta: 'Win',
|
|
123
|
+
command: 'Cmd',
|
|
124
|
+
shift: 'Maiusc',
|
|
125
|
+
tab: 'Tab',
|
|
126
|
+
space: 'Spazio',
|
|
127
|
+
enter: 'Invio',
|
|
128
|
+
escape: 'Esc',
|
|
129
|
+
backspace: 'Backspace',
|
|
130
|
+
delete: 'Canc',
|
|
131
|
+
home: 'Home',
|
|
132
|
+
end: 'Fine',
|
|
133
|
+
pageUp: 'Pag su',
|
|
134
|
+
pageDown: 'Pag giù',
|
|
135
|
+
arrowUp: 'freccia su',
|
|
136
|
+
arrowDown: 'freccia giù',
|
|
137
|
+
arrowLeft: 'freccia sinistra',
|
|
138
|
+
arrowRight: 'freccia destra',
|
|
139
|
+
},
|
|
140
|
+
nl: {
|
|
141
|
+
alt: 'Alt',
|
|
142
|
+
option: 'Option',
|
|
143
|
+
control: 'Ctrl',
|
|
144
|
+
meta: 'Win',
|
|
145
|
+
command: 'Cmd',
|
|
146
|
+
shift: 'Shift',
|
|
147
|
+
tab: 'Tab',
|
|
148
|
+
space: 'Spatie',
|
|
149
|
+
enter: 'Enter',
|
|
150
|
+
escape: 'Esc',
|
|
151
|
+
backspace: 'Backspace',
|
|
152
|
+
delete: 'Delete',
|
|
153
|
+
home: 'Home',
|
|
154
|
+
end: 'End',
|
|
155
|
+
pageUp: 'Page Up',
|
|
156
|
+
pageDown: 'Page Down',
|
|
157
|
+
arrowUp: 'pijl omhoog',
|
|
158
|
+
arrowDown: 'pijl omlaag',
|
|
159
|
+
arrowLeft: 'pijl naar links',
|
|
160
|
+
arrowRight: 'pijl naar rechts',
|
|
161
|
+
},
|
|
162
|
+
pt: {
|
|
163
|
+
alt: 'Alt',
|
|
164
|
+
option: 'Option',
|
|
165
|
+
control: 'Ctrl',
|
|
166
|
+
meta: 'Win',
|
|
167
|
+
command: 'Cmd',
|
|
168
|
+
shift: 'Shift',
|
|
169
|
+
tab: 'Tab',
|
|
170
|
+
space: 'Espaço',
|
|
171
|
+
enter: 'Enter',
|
|
172
|
+
escape: 'Esc',
|
|
173
|
+
backspace: 'Backspace',
|
|
174
|
+
delete: 'Delete',
|
|
175
|
+
home: 'Home',
|
|
176
|
+
end: 'End',
|
|
177
|
+
pageUp: 'Page Up',
|
|
178
|
+
pageDown: 'Page Down',
|
|
179
|
+
arrowUp: 'seta para cima',
|
|
180
|
+
arrowDown: 'seta para baixo',
|
|
181
|
+
arrowLeft: 'seta para a esquerda',
|
|
182
|
+
arrowRight: 'seta para a direita',
|
|
183
|
+
},
|
|
184
|
+
pl: {
|
|
185
|
+
alt: 'Alt',
|
|
186
|
+
option: 'Option',
|
|
187
|
+
control: 'Ctrl',
|
|
188
|
+
meta: 'Win',
|
|
189
|
+
command: 'Cmd',
|
|
190
|
+
shift: 'Shift',
|
|
191
|
+
tab: 'Tab',
|
|
192
|
+
space: 'Spacja',
|
|
193
|
+
enter: 'Enter',
|
|
194
|
+
escape: 'Esc',
|
|
195
|
+
backspace: 'Backspace',
|
|
196
|
+
delete: 'Delete',
|
|
197
|
+
home: 'Home',
|
|
198
|
+
end: 'End',
|
|
199
|
+
pageUp: 'Page Up',
|
|
200
|
+
pageDown: 'Page Down',
|
|
201
|
+
arrowUp: 'strzałka w górę',
|
|
202
|
+
arrowDown: 'strzałka w dół',
|
|
203
|
+
arrowLeft: 'strzałka w lewo',
|
|
204
|
+
arrowRight: 'strzałka w prawo',
|
|
205
|
+
},
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
const LU_KBD_TRANSLATIONS = new InjectionToken('LuKbdTranslations', {
|
|
209
|
+
factory: () => luKbdTranslations,
|
|
210
|
+
});
|
|
211
|
+
const luKbdTranslations = Translations;
|
|
212
|
+
|
|
213
|
+
const LABELS = {
|
|
214
|
+
Alt: 'alt',
|
|
215
|
+
Control: 'control',
|
|
216
|
+
Meta: 'meta',
|
|
217
|
+
' ': 'space',
|
|
218
|
+
Escape: 'escape',
|
|
219
|
+
Home: 'home',
|
|
220
|
+
End: 'end',
|
|
221
|
+
};
|
|
222
|
+
const ICONS = {
|
|
223
|
+
Shift: ['arrowShift', 'shift'],
|
|
224
|
+
Tab: ['arrowLineRight', 'tab'],
|
|
225
|
+
Enter: ['arrowEnter', 'enter'],
|
|
226
|
+
Backspace: ['arrowBackspace', 'backspace'],
|
|
227
|
+
Delete: ['arrowDelete', 'delete'],
|
|
228
|
+
PageUp: ['arrowPageUp', 'pageUp'],
|
|
229
|
+
PageDown: ['arrowPageDown', 'pageDown'],
|
|
230
|
+
ArrowUp: ['arrowTop', 'arrowUp'],
|
|
231
|
+
ArrowDown: ['arrowBottom', 'arrowDown'],
|
|
232
|
+
ArrowLeft: ['arrowLeft', 'arrowLeft'],
|
|
233
|
+
ArrowRight: ['arrowRight', 'arrowRight'],
|
|
234
|
+
};
|
|
235
|
+
/**
|
|
236
|
+
* Apple displays its modifiers as symbols: ⌥ Option and ⌘ Command
|
|
237
|
+
*/
|
|
238
|
+
const MAC_ICONS = {
|
|
239
|
+
...ICONS,
|
|
240
|
+
Alt: ['keyboardOption', 'option'],
|
|
241
|
+
Meta: ['keyboardCommand', 'command'],
|
|
242
|
+
};
|
|
243
|
+
/**
|
|
244
|
+
* Conventional order of the modifiers, displayed before the other keys whatever their order in `keys`:
|
|
245
|
+
* Control, Option, Shift, Command on Mac (Apple Human Interface Guidelines), Windows key, Ctrl, Alt, Shift elsewhere
|
|
246
|
+
*/
|
|
247
|
+
const MAC_MODIFIERS = ['Control', 'Alt', 'Shift', 'Meta'];
|
|
248
|
+
const MODIFIERS = ['Meta', 'Control', 'Alt', 'Shift'];
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Whether the page runs on Apple platforms, whose modifiers differ (Option, Command)
|
|
252
|
+
*/
|
|
253
|
+
function isMacPlatform() {
|
|
254
|
+
return typeof navigator !== 'undefined' && /Mac|iPhone|iPad/.test(navigator.userAgent);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
class KbdComponent {
|
|
258
|
+
constructor() {
|
|
259
|
+
this.#isMac = isMacPlatform();
|
|
260
|
+
/**
|
|
261
|
+
* Key, or combination of keys, to display, as named by `KeyboardEvent.key` (`'Escape'`, `['Control', 'n']`…).
|
|
262
|
+
* Keys follow the platform (Option and Command on Mac).
|
|
263
|
+
* Modifiers are displayed first, in the conventional order of the platform.
|
|
264
|
+
*/
|
|
265
|
+
this.keys = input.required(/* @ts-ignore */
|
|
266
|
+
...(ngDevMode ? [{ debugName: "keys" }] : /* istanbul ignore next */ []));
|
|
267
|
+
/**
|
|
268
|
+
* Overrides the default labels of the keys
|
|
269
|
+
*/
|
|
270
|
+
this.intl = input(...intlInputOptions(LU_KBD_TRANSLATIONS), /* @ts-ignore */
|
|
271
|
+
...(ngDevMode ? [{ debugName: "intl" }] : /* istanbul ignore next */ []));
|
|
272
|
+
this.displayedKeys = computed(() => {
|
|
273
|
+
const keys = this.keys();
|
|
274
|
+
const intl = this.intl();
|
|
275
|
+
const modifiers = this.#isMac ? MAC_MODIFIERS : MODIFIERS;
|
|
276
|
+
const given = typeof keys === 'string' ? [keys] : keys;
|
|
277
|
+
return [...modifiers.filter((modifier) => given.includes(modifier)), ...given.filter((key) => !modifiers.includes(key))].map((key) => this.#display(key, intl));
|
|
278
|
+
}, /* @ts-ignore */
|
|
279
|
+
...(ngDevMode ? [{ debugName: "displayedKeys" }] : /* istanbul ignore next */ []));
|
|
280
|
+
}
|
|
281
|
+
#isMac;
|
|
282
|
+
#display(key, intl) {
|
|
283
|
+
const icon = (this.#isMac ? MAC_ICONS : ICONS)[key];
|
|
284
|
+
if (icon) {
|
|
285
|
+
return { type: 'icon', icon: icon[0], label: intl[icon[1]] };
|
|
286
|
+
}
|
|
287
|
+
const label = LABELS[key];
|
|
288
|
+
if (label) {
|
|
289
|
+
return { type: 'text', label: intl[label] };
|
|
290
|
+
}
|
|
291
|
+
return { type: 'text', label: key.length === 1 ? key.toUpperCase() : key };
|
|
292
|
+
}
|
|
293
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: KbdComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
294
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.1", type: KbdComponent, isStandalone: true, selector: "lu-kbd", inputs: { keys: { classPropertyName: "keys", publicName: "keys", isSignal: true, isRequired: true, transformFunction: null }, intl: { classPropertyName: "intl", publicName: "intl", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (displayedKeys().length === 1) {\n\t<span class=\"kbdWrapper\">\n\t\t<kbd class=\"kbd\">\n\t\t\t<ng-container *ngTemplateOutlet=\"content; context: { $implicit: displayedKeys()[0] }\" />\n\t\t</kbd>\n\t</span>\n} @else {\n\t<kbd class=\"kbdWrapper\">\n\t\t@for (key of displayedKeys(); track $index) {\n\t\t\t@if (!$first) {\n\t\t\t\t+\n\t\t\t}\n\t\t\t<kbd class=\"kbd\">\n\t\t\t\t<ng-container *ngTemplateOutlet=\"content; context: { $implicit: key }\" />\n\t\t\t</kbd>\n\t\t}\n\t</kbd>\n}\n\n<ng-template #content let-key>\n\t@switch (key.type) {\n\t\t@case (\"icon\") {\n\t\t\t<lu-icon [icon]=\"key.icon\" size=\"XXS\" [alt]=\"key.label\" />\n\t\t}\n\t\t@default {\n\t\t\t{{ key.label }}\n\t\t}\n\t}\n</ng-template>\n", styles: ["@layer components{.kbd{--components-kbd-paddingInline: var(--pr-t-spacings-50);--components-kbd-animationDelay: 0s;--components-kbd-animationDuration: calc(var(--components-kbd-animationPause) / .9);--components-kbd-animationName: var(--components-kbd-modifier-animationName);--components-kbd-animationOffset: 0s;--components-kbd-animationPause: calc(var(--commons-animations-durations-slow) * 3.5);--components-kbd-last-animationName: none;--components-kbd-modifier-animationName: none;align-items:center;background-color:var(--palettes-neutral-0);border:1px solid var(--palettes-neutral-200);border-radius:var(--pr-t-border-radius-small);box-shadow:inset 0 -1px 0 var(--palettes-neutral-200);color:var(--pr-t-color-text-subtle);display:inline-flex;font:var(--pr-t-font-body-XS);inset-block-start:0;justify-content:center;min-block-size:var(--pr-t-spacings-250);min-inline-size:var(--pr-t-spacings-250);padding-inline:var(--components-kbd-paddingInline);position:relative;white-space:nowrap;animation-delay:calc(var(--components-kbd-animationDelay) + var(--components-kbd-animationOffset));animation-duration:var(--components-kbd-animationDuration);animation-iteration-count:infinite;animation-name:var(--components-kbd-animationName);animation-timing-function:step-end}.kbd:has(.lucca-icon){--components-kbd-paddingInline: 0}.kbd:nth-of-type(2){--components-kbd-animationOffset: calc(var(--commons-animations-durations-fast) / 2 * 1)}.kbd:nth-of-type(3){--components-kbd-animationOffset: calc(var(--commons-animations-durations-fast) / 2 * 2)}.kbd:nth-of-type(4){--components-kbd-animationOffset: calc(var(--commons-animations-durations-fast) / 2 * 3)}.kbd:nth-of-type(5){--components-kbd-animationOffset: calc(var(--commons-animations-durations-fast) / 2 * 4)}.kbd:last-of-type{--components-kbd-animationName: var(--components-kbd-last-animationName)}@keyframes kbdHold{10%,35%{box-shadow:inset 0 0 0 var(--palettes-neutral-200);inset-block-start:1px}40%{box-shadow:inset 0 -1px 0 var(--palettes-neutral-200);inset-block-start:0}}@keyframes kbdTap{15%,25%{box-shadow:inset 0 -1px 0 var(--palettes-neutral-200);inset-block-start:0}20%{box-shadow:inset 0 0 0 var(--palettes-neutral-200);inset-block-start:1px}}}@layer mods{@media(prefers-reduced-motion:reduce){.kbd{--components-kbd-last-animationName: none;--components-kbd-modifier-animationName: none}}}@layer components{.kbdWrapper{align-items:center;color:var(--pr-t-color-text-subtle);display:inline-flex;font:var(--pr-t-font-body-S);gap:var(--pr-t-spacings-25);vertical-align:middle;white-space:nowrap}.kbdWrapper:has(.kbd:nth-of-type(2)) .kbd{--components-kbd-animationDuration: calc((var(--components-kbd-animationPause) + calc(var(--commons-animations-durations-fast) / 2 * 0)) / .6)}.kbdWrapper:has(.kbd:nth-of-type(3)) .kbd{--components-kbd-animationDuration: calc((var(--components-kbd-animationPause) + calc(var(--commons-animations-durations-fast) / 2 * 1)) / .6)}.kbdWrapper:has(.kbd:nth-of-type(4)) .kbd{--components-kbd-animationDuration: calc((var(--components-kbd-animationPause) + calc(var(--commons-animations-durations-fast) / 2 * 2)) / .6)}.kbdWrapper:has(.kbd:nth-of-type(5)) .kbd{--components-kbd-animationDuration: calc((var(--components-kbd-animationPause) + calc(var(--commons-animations-durations-fast) / 2 * 3)) / .6)}}lu-kbd{display:contents}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "lu-icon, pr-icon", inputs: ["icon", "alt", "size", "color", "AI"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
295
|
+
}
|
|
296
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: KbdComponent, decorators: [{
|
|
297
|
+
type: Component,
|
|
298
|
+
args: [{ selector: 'lu-kbd', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [IconComponent, NgTemplateOutlet], template: "@if (displayedKeys().length === 1) {\n\t<span class=\"kbdWrapper\">\n\t\t<kbd class=\"kbd\">\n\t\t\t<ng-container *ngTemplateOutlet=\"content; context: { $implicit: displayedKeys()[0] }\" />\n\t\t</kbd>\n\t</span>\n} @else {\n\t<kbd class=\"kbdWrapper\">\n\t\t@for (key of displayedKeys(); track $index) {\n\t\t\t@if (!$first) {\n\t\t\t\t+\n\t\t\t}\n\t\t\t<kbd class=\"kbd\">\n\t\t\t\t<ng-container *ngTemplateOutlet=\"content; context: { $implicit: key }\" />\n\t\t\t</kbd>\n\t\t}\n\t</kbd>\n}\n\n<ng-template #content let-key>\n\t@switch (key.type) {\n\t\t@case (\"icon\") {\n\t\t\t<lu-icon [icon]=\"key.icon\" size=\"XXS\" [alt]=\"key.label\" />\n\t\t}\n\t\t@default {\n\t\t\t{{ key.label }}\n\t\t}\n\t}\n</ng-template>\n", styles: ["@layer components{.kbd{--components-kbd-paddingInline: var(--pr-t-spacings-50);--components-kbd-animationDelay: 0s;--components-kbd-animationDuration: calc(var(--components-kbd-animationPause) / .9);--components-kbd-animationName: var(--components-kbd-modifier-animationName);--components-kbd-animationOffset: 0s;--components-kbd-animationPause: calc(var(--commons-animations-durations-slow) * 3.5);--components-kbd-last-animationName: none;--components-kbd-modifier-animationName: none;align-items:center;background-color:var(--palettes-neutral-0);border:1px solid var(--palettes-neutral-200);border-radius:var(--pr-t-border-radius-small);box-shadow:inset 0 -1px 0 var(--palettes-neutral-200);color:var(--pr-t-color-text-subtle);display:inline-flex;font:var(--pr-t-font-body-XS);inset-block-start:0;justify-content:center;min-block-size:var(--pr-t-spacings-250);min-inline-size:var(--pr-t-spacings-250);padding-inline:var(--components-kbd-paddingInline);position:relative;white-space:nowrap;animation-delay:calc(var(--components-kbd-animationDelay) + var(--components-kbd-animationOffset));animation-duration:var(--components-kbd-animationDuration);animation-iteration-count:infinite;animation-name:var(--components-kbd-animationName);animation-timing-function:step-end}.kbd:has(.lucca-icon){--components-kbd-paddingInline: 0}.kbd:nth-of-type(2){--components-kbd-animationOffset: calc(var(--commons-animations-durations-fast) / 2 * 1)}.kbd:nth-of-type(3){--components-kbd-animationOffset: calc(var(--commons-animations-durations-fast) / 2 * 2)}.kbd:nth-of-type(4){--components-kbd-animationOffset: calc(var(--commons-animations-durations-fast) / 2 * 3)}.kbd:nth-of-type(5){--components-kbd-animationOffset: calc(var(--commons-animations-durations-fast) / 2 * 4)}.kbd:last-of-type{--components-kbd-animationName: var(--components-kbd-last-animationName)}@keyframes kbdHold{10%,35%{box-shadow:inset 0 0 0 var(--palettes-neutral-200);inset-block-start:1px}40%{box-shadow:inset 0 -1px 0 var(--palettes-neutral-200);inset-block-start:0}}@keyframes kbdTap{15%,25%{box-shadow:inset 0 -1px 0 var(--palettes-neutral-200);inset-block-start:0}20%{box-shadow:inset 0 0 0 var(--palettes-neutral-200);inset-block-start:1px}}}@layer mods{@media(prefers-reduced-motion:reduce){.kbd{--components-kbd-last-animationName: none;--components-kbd-modifier-animationName: none}}}@layer components{.kbdWrapper{align-items:center;color:var(--pr-t-color-text-subtle);display:inline-flex;font:var(--pr-t-font-body-S);gap:var(--pr-t-spacings-25);vertical-align:middle;white-space:nowrap}.kbdWrapper:has(.kbd:nth-of-type(2)) .kbd{--components-kbd-animationDuration: calc((var(--components-kbd-animationPause) + calc(var(--commons-animations-durations-fast) / 2 * 0)) / .6)}.kbdWrapper:has(.kbd:nth-of-type(3)) .kbd{--components-kbd-animationDuration: calc((var(--components-kbd-animationPause) + calc(var(--commons-animations-durations-fast) / 2 * 1)) / .6)}.kbdWrapper:has(.kbd:nth-of-type(4)) .kbd{--components-kbd-animationDuration: calc((var(--components-kbd-animationPause) + calc(var(--commons-animations-durations-fast) / 2 * 2)) / .6)}.kbdWrapper:has(.kbd:nth-of-type(5)) .kbd{--components-kbd-animationDuration: calc((var(--components-kbd-animationPause) + calc(var(--commons-animations-durations-fast) / 2 * 3)) / .6)}}lu-kbd{display:contents}\n"] }]
|
|
299
|
+
}], propDecorators: { keys: [{ type: i0.Input, args: [{ isSignal: true, alias: "keys", required: true }] }], intl: [{ type: i0.Input, args: [{ isSignal: true, alias: "intl", required: false }] }] } });
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* Generated bundle index. Do not edit.
|
|
303
|
+
*/
|
|
304
|
+
|
|
305
|
+
export { KbdComponent, LU_KBD_TRANSLATIONS, luKbdTranslations };
|
|
306
|
+
//# sourceMappingURL=lucca-front-ng-kbd.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lucca-front-ng-kbd.mjs","sources":["../../../packages/ng/kbd/translations.ts","../../../packages/ng/kbd/kbd.translate.ts","../../../packages/ng/kbd/kbd.type.ts","../../../packages/ng/kbd/kbd.utils.ts","../../../packages/ng/kbd/kbd.component.ts","../../../packages/ng/kbd/kbd.component.html","../../../packages/ng/kbd/lucca-front-ng-kbd.ts"],"sourcesContent":["export const Translations = {\n\t'nl-BE': {\n\t\talt: 'Alt',\n\t\toption: 'Option',\n\t\tcontrol: 'Ctrl',\n\t\tmeta: 'Win',\n\t\tcommand: 'Cmd',\n\t\tshift: 'Shift',\n\t\ttab: 'Tab',\n\t\tspace: 'Spatie',\n\t\tenter: 'Enter',\n\t\tescape: 'Esc',\n\t\tbackspace: 'Backspace',\n\t\tdelete: 'Delete',\n\t\thome: 'Home',\n\t\tend: 'End',\n\t\tpageUp: 'Page Up',\n\t\tpageDown: 'Page Down',\n\t\tarrowUp: 'pijl omhoog',\n\t\tarrowDown: 'pijl omlaag',\n\t\tarrowLeft: 'pijl naar links',\n\t\tarrowRight: 'pijl naar rechts',\n\t},\n\tfr: {\n\t\talt: 'Alt',\n\t\toption: 'Option',\n\t\tcontrol: 'Ctrl',\n\t\tmeta: 'Win',\n\t\tcommand: 'Cmd',\n\t\tshift: 'Maj',\n\t\ttab: 'Tab',\n\t\tspace: 'Espace',\n\t\tenter: 'Entrée',\n\t\tescape: 'Échap',\n\t\tbackspace: 'Retour arrière',\n\t\tdelete: 'Suppr',\n\t\thome: 'Début',\n\t\tend: 'Fin',\n\t\tpageUp: 'Page préc',\n\t\tpageDown: 'Page suiv',\n\t\tarrowUp: 'flèche haut',\n\t\tarrowDown: 'flèche bas',\n\t\tarrowLeft: 'flèche gauche',\n\t\tarrowRight: 'flèche droite',\n\t},\n\tde: {\n\t\talt: 'Alt',\n\t\toption: 'Option',\n\t\tcontrol: 'Strg',\n\t\tmeta: 'Win',\n\t\tcommand: 'Cmd',\n\t\tshift: 'Umschalt',\n\t\ttab: 'Tab',\n\t\tspace: 'Leertaste',\n\t\tenter: 'Eingabe',\n\t\tescape: 'Esc',\n\t\tbackspace: 'Rücktaste',\n\t\tdelete: 'Entf',\n\t\thome: 'Pos1',\n\t\tend: 'Ende',\n\t\tpageUp: 'Bild auf',\n\t\tpageDown: 'Bild ab',\n\t\tarrowUp: 'Pfeil nach oben',\n\t\tarrowDown: 'Pfeil nach unten',\n\t\tarrowLeft: 'Pfeil nach links',\n\t\tarrowRight: 'Pfeil nach rechts',\n\t},\n\ten: {\n\t\talt: 'Alt',\n\t\toption: 'Option',\n\t\tcontrol: 'Ctrl',\n\t\tmeta: 'Win',\n\t\tcommand: 'Cmd',\n\t\tshift: 'Shift',\n\t\ttab: 'Tab',\n\t\tspace: 'Space',\n\t\tenter: 'Enter',\n\t\tescape: 'Esc',\n\t\tbackspace: 'Backspace',\n\t\tdelete: 'Delete',\n\t\thome: 'Home',\n\t\tend: 'End',\n\t\tpageUp: 'Page Up',\n\t\tpageDown: 'Page Down',\n\t\tarrowUp: 'up arrow',\n\t\tarrowDown: 'down arrow',\n\t\tarrowLeft: 'left arrow',\n\t\tarrowRight: 'right arrow',\n\t},\n\tes: {\n\t\talt: 'Alt',\n\t\toption: 'Opción',\n\t\tcontrol: 'Ctrl',\n\t\tmeta: 'Win',\n\t\tcommand: 'Cmd',\n\t\tshift: 'Mayús',\n\t\ttab: 'Tab',\n\t\tspace: 'Espacio',\n\t\tenter: 'Intro',\n\t\tescape: 'Esc',\n\t\tbackspace: 'Retroceso',\n\t\tdelete: 'Supr',\n\t\thome: 'Inicio',\n\t\tend: 'Fin',\n\t\tpageUp: 'Re Pág',\n\t\tpageDown: 'Av Pág',\n\t\tarrowUp: 'flecha arriba',\n\t\tarrowDown: 'flecha abajo',\n\t\tarrowLeft: 'flecha izquierda',\n\t\tarrowRight: 'flecha derecha',\n\t},\n\tit: {\n\t\talt: 'Alt',\n\t\toption: 'Opzione',\n\t\tcontrol: 'Ctrl',\n\t\tmeta: 'Win',\n\t\tcommand: 'Cmd',\n\t\tshift: 'Maiusc',\n\t\ttab: 'Tab',\n\t\tspace: 'Spazio',\n\t\tenter: 'Invio',\n\t\tescape: 'Esc',\n\t\tbackspace: 'Backspace',\n\t\tdelete: 'Canc',\n\t\thome: 'Home',\n\t\tend: 'Fine',\n\t\tpageUp: 'Pag su',\n\t\tpageDown: 'Pag giù',\n\t\tarrowUp: 'freccia su',\n\t\tarrowDown: 'freccia giù',\n\t\tarrowLeft: 'freccia sinistra',\n\t\tarrowRight: 'freccia destra',\n\t},\n\tnl: {\n\t\talt: 'Alt',\n\t\toption: 'Option',\n\t\tcontrol: 'Ctrl',\n\t\tmeta: 'Win',\n\t\tcommand: 'Cmd',\n\t\tshift: 'Shift',\n\t\ttab: 'Tab',\n\t\tspace: 'Spatie',\n\t\tenter: 'Enter',\n\t\tescape: 'Esc',\n\t\tbackspace: 'Backspace',\n\t\tdelete: 'Delete',\n\t\thome: 'Home',\n\t\tend: 'End',\n\t\tpageUp: 'Page Up',\n\t\tpageDown: 'Page Down',\n\t\tarrowUp: 'pijl omhoog',\n\t\tarrowDown: 'pijl omlaag',\n\t\tarrowLeft: 'pijl naar links',\n\t\tarrowRight: 'pijl naar rechts',\n\t},\n\tpt: {\n\t\talt: 'Alt',\n\t\toption: 'Option',\n\t\tcontrol: 'Ctrl',\n\t\tmeta: 'Win',\n\t\tcommand: 'Cmd',\n\t\tshift: 'Shift',\n\t\ttab: 'Tab',\n\t\tspace: 'Espaço',\n\t\tenter: 'Enter',\n\t\tescape: 'Esc',\n\t\tbackspace: 'Backspace',\n\t\tdelete: 'Delete',\n\t\thome: 'Home',\n\t\tend: 'End',\n\t\tpageUp: 'Page Up',\n\t\tpageDown: 'Page Down',\n\t\tarrowUp: 'seta para cima',\n\t\tarrowDown: 'seta para baixo',\n\t\tarrowLeft: 'seta para a esquerda',\n\t\tarrowRight: 'seta para a direita',\n\t},\n\tpl: {\n\t\talt: 'Alt',\n\t\toption: 'Option',\n\t\tcontrol: 'Ctrl',\n\t\tmeta: 'Win',\n\t\tcommand: 'Cmd',\n\t\tshift: 'Shift',\n\t\ttab: 'Tab',\n\t\tspace: 'Spacja',\n\t\tenter: 'Enter',\n\t\tescape: 'Esc',\n\t\tbackspace: 'Backspace',\n\t\tdelete: 'Delete',\n\t\thome: 'Home',\n\t\tend: 'End',\n\t\tpageUp: 'Page Up',\n\t\tpageDown: 'Page Down',\n\t\tarrowUp: 'strzałka w górę',\n\t\tarrowDown: 'strzałka w dół',\n\t\tarrowLeft: 'strzałka w lewo',\n\t\tarrowRight: 'strzałka w prawo',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_KBD_TRANSLATIONS = new InjectionToken('LuKbdTranslations', {\n\tfactory: () => luKbdTranslations,\n});\n\nexport interface LuKbdTranslations {\n\talt: string;\n\toption: string;\n\tcontrol: string;\n\tmeta: string;\n\tcommand: string;\n\tshift: string;\n\ttab: string;\n\tspace: string;\n\tenter: string;\n\tescape: string;\n\tbackspace: string;\n\tdelete: string;\n\thome: string;\n\tend: string;\n\tpageUp: string;\n\tpageDown: string;\n\tarrowUp: string;\n\tarrowDown: string;\n\tarrowLeft: string;\n\tarrowRight: string;\n}\n\nexport const luKbdTranslations: LuTranslation<LuKbdTranslations> = Translations;\n","import { LuccaIcon } from '@lucca-front/ng/icon';\nimport { LuKbdTranslations } from './kbd.translate';\n\nexport type KbdKey =\n\t| 'Alt'\n\t| 'Control'\n\t| 'Meta'\n\t| 'Shift'\n\t| 'Tab'\n\t| ' '\n\t| 'Enter'\n\t| 'Escape'\n\t| 'Backspace'\n\t| 'Delete'\n\t| 'Home'\n\t| 'End'\n\t| 'PageUp'\n\t| 'PageDown'\n\t| 'ArrowUp'\n\t| 'ArrowDown'\n\t| 'ArrowLeft'\n\t| 'ArrowRight'\n\t| (string & Record<never, never>);\n\nexport type DisplayedKey = { type: 'text'; label: string } | { type: 'icon'; label: string; icon: LuccaIcon };\n\nexport const LABELS: Partial<Record<KbdKey, keyof LuKbdTranslations>> = {\n\tAlt: 'alt',\n\tControl: 'control',\n\tMeta: 'meta',\n\t' ': 'space',\n\tEscape: 'escape',\n\tHome: 'home',\n\tEnd: 'end',\n};\n\nexport const ICONS: Partial<Record<KbdKey, [LuccaIcon, keyof LuKbdTranslations]>> = {\n\tShift: ['arrowShift', 'shift'],\n\tTab: ['arrowLineRight', 'tab'],\n\tEnter: ['arrowEnter', 'enter'],\n\tBackspace: ['arrowBackspace', 'backspace'],\n\tDelete: ['arrowDelete', 'delete'],\n\tPageUp: ['arrowPageUp', 'pageUp'],\n\tPageDown: ['arrowPageDown', 'pageDown'],\n\tArrowUp: ['arrowTop', 'arrowUp'],\n\tArrowDown: ['arrowBottom', 'arrowDown'],\n\tArrowLeft: ['arrowLeft', 'arrowLeft'],\n\tArrowRight: ['arrowRight', 'arrowRight'],\n};\n\n/**\n * Apple displays its modifiers as symbols: ⌥ Option and ⌘ Command\n */\nexport const MAC_ICONS: Partial<Record<KbdKey, [LuccaIcon, keyof LuKbdTranslations]>> = {\n\t...ICONS,\n\tAlt: ['keyboardOption', 'option'],\n\tMeta: ['keyboardCommand', 'command'],\n};\n\n/**\n * Conventional order of the modifiers, displayed before the other keys whatever their order in `keys`:\n * Control, Option, Shift, Command on Mac (Apple Human Interface Guidelines), Windows key, Ctrl, Alt, Shift elsewhere\n */\nexport const MAC_MODIFIERS: KbdKey[] = ['Control', 'Alt', 'Shift', 'Meta'];\nexport const MODIFIERS: KbdKey[] = ['Meta', 'Control', 'Alt', 'Shift'];\n","/**\n * Whether the page runs on Apple platforms, whose modifiers differ (Option, Command)\n */\nexport function isMacPlatform(): boolean {\n\treturn typeof navigator !== 'undefined' && /Mac|iPhone|iPad/.test(navigator.userAgent);\n}\n","import { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { intlInputOptions } from '@lucca-front/ng/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { IconComponent } from '@lucca-front/ng/icon';\nimport { LU_KBD_TRANSLATIONS, LuKbdTranslations } from './kbd.translate';\nimport { DisplayedKey, ICONS, KbdKey, LABELS, MAC_ICONS, MAC_MODIFIERS, MODIFIERS } from './kbd.type';\nimport { isMacPlatform } from './kbd.utils';\n\n@Component({\n\tselector: 'lu-kbd',\n\ttemplateUrl: './kbd.component.html',\n\tstyleUrl: './kbd.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\timports: [IconComponent, NgTemplateOutlet],\n})\nexport class KbdComponent {\n\treadonly #isMac = isMacPlatform();\n\n\t/**\n\t * Key, or combination of keys, to display, as named by `KeyboardEvent.key` (`'Escape'`, `['Control', 'n']`…).\n\t * Keys follow the platform (Option and Command on Mac).\n\t * Modifiers are displayed first, in the conventional order of the platform.\n\t */\n\treadonly keys = input.required<KbdKey | readonly KbdKey[]>();\n\n\t/**\n\t * Overrides the default labels of the keys\n\t */\n\treadonly intl = input(...intlInputOptions(LU_KBD_TRANSLATIONS));\n\n\treadonly displayedKeys = computed<DisplayedKey[]>(() => {\n\t\tconst keys = this.keys();\n\t\tconst intl = this.intl();\n\t\tconst modifiers = this.#isMac ? MAC_MODIFIERS : MODIFIERS;\n\t\tconst given = typeof keys === 'string' ? [keys] : keys;\n\t\treturn [...modifiers.filter((modifier) => given.includes(modifier)), ...given.filter((key) => !modifiers.includes(key))].map((key) => this.#display(key, intl));\n\t});\n\n\t#display(key: KbdKey, intl: LuKbdTranslations): DisplayedKey {\n\t\tconst icon = (this.#isMac ? MAC_ICONS : ICONS)[key];\n\t\tif (icon) {\n\t\t\treturn { type: 'icon', icon: icon[0], label: intl[icon[1]] };\n\t\t}\n\t\tconst label = LABELS[key];\n\t\tif (label) {\n\t\t\treturn { type: 'text', label: intl[label] };\n\t\t}\n\t\treturn { type: 'text', label: key.length === 1 ? key.toUpperCase() : key };\n\t}\n}\n","@if (displayedKeys().length === 1) {\n\t<span class=\"kbdWrapper\">\n\t\t<kbd class=\"kbd\">\n\t\t\t<ng-container *ngTemplateOutlet=\"content; context: { $implicit: displayedKeys()[0] }\" />\n\t\t</kbd>\n\t</span>\n} @else {\n\t<kbd class=\"kbdWrapper\">\n\t\t@for (key of displayedKeys(); track $index) {\n\t\t\t@if (!$first) {\n\t\t\t\t+\n\t\t\t}\n\t\t\t<kbd class=\"kbd\">\n\t\t\t\t<ng-container *ngTemplateOutlet=\"content; context: { $implicit: key }\" />\n\t\t\t</kbd>\n\t\t}\n\t</kbd>\n}\n\n<ng-template #content let-key>\n\t@switch (key.type) {\n\t\t@case (\"icon\") {\n\t\t\t<lu-icon [icon]=\"key.icon\" size=\"XXS\" [alt]=\"key.label\" />\n\t\t}\n\t\t@default {\n\t\t\t{{ key.label }}\n\t\t}\n\t}\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i2 from '@angular/common';
|
|
2
2
|
import { Location } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { InjectionToken, Attribute, Directive, input, inject, Injector, ElementRef, effect, afterNextRender, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
4
|
+
import { InjectionToken, signal, linkedSignal, Attribute, Directive, input, inject, Injector, ElementRef, effect, afterNextRender, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
|
|
5
5
|
import * as i1 from '@angular/router';
|
|
6
6
|
import { RouterLink, Router, ActivatedRoute, UrlTree } from '@angular/router';
|
|
7
7
|
import { intlInputOptions, luBooleanAttribute } from '@lucca-front/ng/core';
|
|
@@ -38,19 +38,40 @@ const LU_LINK_TRANSLATIONS = new InjectionToken('luLinkTranslations', {
|
|
|
38
38
|
const luLinkTranslations = Translations;
|
|
39
39
|
|
|
40
40
|
class LuRouterLink extends RouterLink {
|
|
41
|
+
// Field initializers run after `super()`, so this still references the router-computed `linkedSignal` of `RouterLink`.
|
|
42
|
+
#routerHref;
|
|
41
43
|
// Workaround for a storybook bug = implement the constructor https://github.com/storybookjs/storybook/issues/23534#issuecomment-2042888436
|
|
42
44
|
constructor(router, route, tabIndexAttribute, renderer, el, locationStrategy) {
|
|
43
45
|
super(router, route, tabIndexAttribute, renderer, el, locationStrategy);
|
|
46
|
+
/**
|
|
47
|
+
* Href forced by `luLink` (raw `href`, external or disabled link). `undefined` lets the router compute it.
|
|
48
|
+
*/
|
|
49
|
+
this.hrefOverride = signal(undefined, /* @ts-ignore */
|
|
50
|
+
...(ngDevMode ? [{ debugName: "hrefOverride" }] : /* istanbul ignore next */ []));
|
|
51
|
+
// Field initializers run after `super()`, so this still references the router-computed `linkedSignal` of `RouterLink`.
|
|
52
|
+
this.#routerHref = this.reactiveHref;
|
|
53
|
+
// Since Angular 22, `reactiveHref` is a `linkedSignal` recomputed on every navigation, which wipes any value written with `set()`.
|
|
54
|
+
// Deriving it from `hrefOverride` keeps the forced href across navigations.
|
|
55
|
+
this.reactiveHref = linkedSignal(() => {
|
|
56
|
+
const hrefOverride = this.hrefOverride();
|
|
57
|
+
return hrefOverride === undefined ? this.#routerHref() : hrefOverride;
|
|
58
|
+
}, /* @ts-ignore */
|
|
59
|
+
...(ngDevMode ? [{ debugName: "reactiveHref" }] : /* istanbul ignore next */ []));
|
|
60
|
+
/**
|
|
61
|
+
* Href bound to the host element: `hrefOverride` when set, the router-computed href otherwise.
|
|
62
|
+
*/
|
|
63
|
+
this.resolvedHref = this.reactiveHref.asReadonly();
|
|
44
64
|
}
|
|
45
|
-
|
|
46
|
-
|
|
65
|
+
/**
|
|
66
|
+
* @deprecated a value written with `set()` is wiped on every navigation, use `hrefOverride` to force the href and `resolvedHref` to read it instead
|
|
67
|
+
*/
|
|
47
68
|
get publicReactiveHref() {
|
|
48
69
|
return this.reactiveHref;
|
|
49
70
|
}
|
|
50
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1
|
|
51
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1
|
|
71
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: LuRouterLink, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: 'tabindex', attribute: true }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i2.LocationStrategy }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
72
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.2.1", type: LuRouterLink, isStandalone: true, selector: "[luRouterLink]", usesInheritance: true, ngImport: i0 }); }
|
|
52
73
|
}
|
|
53
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1
|
|
74
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: LuRouterLink, decorators: [{
|
|
54
75
|
type: Directive,
|
|
55
76
|
args: [{
|
|
56
77
|
selector: '[luRouterLink]',
|
|
@@ -107,16 +128,17 @@ class LinkComponent {
|
|
|
107
128
|
effect(() => {
|
|
108
129
|
if (href()) {
|
|
109
130
|
this.hrefBackup = href();
|
|
110
|
-
this.routerLink.
|
|
131
|
+
this.routerLink.hrefOverride.set(this.hrefBackup);
|
|
111
132
|
}
|
|
112
133
|
if (this.disabled()) {
|
|
113
134
|
if (this.routerLinkCommands()) {
|
|
114
135
|
this.routerLink.routerLink = null;
|
|
115
136
|
}
|
|
116
|
-
this.routerLink.
|
|
137
|
+
this.routerLink.hrefOverride.set(null);
|
|
117
138
|
}
|
|
118
139
|
else if (this.routerLinkCommands() && !this.external()) {
|
|
119
140
|
this.routerLink.routerLink = this.routerLinkCommands();
|
|
141
|
+
this.routerLink.hrefOverride.set(undefined);
|
|
120
142
|
// We need to do this in order to have `routerLink` update the value for `href`:
|
|
121
143
|
// See https://github.com/angular/angular/blob/main/packages/router/src/directives/router_link.ts#L281
|
|
122
144
|
this.routerLink.ngOnChanges({});
|
|
@@ -125,10 +147,12 @@ class LinkComponent {
|
|
|
125
147
|
// External router links must not wire up the `RouterLink` directive (it would navigate in-place),
|
|
126
148
|
// but they still need an `href` so the anchor is keyboard-focusable and its destination is previewable.
|
|
127
149
|
// Actual navigation is handled natively by `target="_blank"` (anchors) or by `redirect()` (buttons).
|
|
128
|
-
|
|
150
|
+
// Commands set while the link was internal are cleared, otherwise `RouterLink` keeps intercepting the click.
|
|
151
|
+
this.routerLink.routerLink = null;
|
|
152
|
+
this.routerLink.hrefOverride.set(this.#serializeExternalUrl());
|
|
129
153
|
}
|
|
130
154
|
else if (!href() && this.hrefBackup) {
|
|
131
|
-
this.routerLink.
|
|
155
|
+
this.routerLink.hrefOverride.set(this.hrefBackup);
|
|
132
156
|
}
|
|
133
157
|
});
|
|
134
158
|
}
|
|
@@ -165,14 +189,14 @@ class LinkComponent {
|
|
|
165
189
|
// they all describe an internal route, so the serialized URL must carry the baseHref.
|
|
166
190
|
return this.location.prepareExternalUrl(serializedUrl);
|
|
167
191
|
}
|
|
168
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1
|
|
169
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1
|
|
192
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: LinkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
193
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.2.1", type: LinkComponent, isStandalone: true, selector: "a[luLink], button[luLink]", inputs: { intl: { classPropertyName: "intl", publicName: "intl", isSignal: true, isRequired: false, transformFunction: null }, luHref: { classPropertyName: "luHref", publicName: "href", isSignal: true, isRequired: false, transformFunction: null }, routerLinkCommands: { classPropertyName: "routerLinkCommands", publicName: "luLink", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, decorationHover: { classPropertyName: "decorationHover", publicName: "decorationHover", isSignal: true, isRequired: false, transformFunction: null }, external: { classPropertyName: "external", publicName: "external", isSignal: true, isRequired: false, transformFunction: null }, hiddenIcon: { classPropertyName: "hiddenIcon", publicName: "hiddenIcon", isSignal: true, isRequired: false, transformFunction: null }, neutral: { classPropertyName: "neutral", publicName: "neutral", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "redirect()" }, properties: { "attr.href": "routerLink.resolvedHref()", "class.mod-decorationHover": "decorationHover()", "class.mod-icon": "external()", "class.mod-neutral": "neutral()", "class.mod-hiddenIcon": "hiddenIcon() || (this.insideIndexTable && external()) || (this.insideDataTable && external())", "class.is-disabled": "this.disabled()", "attr.rel": "external() && !disabled() ? \"noopener noreferrer\" : null", "attr.target": "external() && !disabled() ? \"_blank\" : null", "attr.role": "disabled() ? \"presentation\" : null" }, classAttribute: "link" }, hostDirectives: [{ directive: LuRouterLink, inputs: ["preserveFragment", "preserveFragment", "skipLocationChange", "skipLocationChange", "replaceUrl", "replaceUrl", "queryParams", "queryParams", "fragment", "fragment", "queryParamsHandling", "queryParamsHandling", "state", "state", "info", "info", "relativeTo", "relativeTo"] }], ngImport: i0, template: "<span class=\"link-text\"><ng-content /></span>\n@if (external()) {\n\t<span class=\"link-icon\">\n\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowExternal\"></span>\n\t</span>\n\t<span class=\"pr-u-mask\">{{ intl().external }}</span>\n}\n", styles: ["@charset \"UTF-8\";@layer components{.link{--components-link-textDecoration: underline;--components-link-text-textDecoration: underline;--components-link-color: var(--commons-text-link-color);--components-link-color-hover: var(--commons-text-link-hover);--components-link-cursor: pointer;--components-link-icon-marginInlineStart: 0;--components-link-icon-opacity: 1;background-color:transparent;color:var(--components-link-color);cursor:var(--components-link-cursor);font-family:inherit;border:0;margin:0;padding:0;text-decoration:var(--components-link-textDecoration)}.link:not(:disabled,.is-disabled):hover{color:var(--components-link-color-hover)}.link:not(:disabled,.is-disabled):focus-visible{outline:2px solid var(--palettes-700, var(--palettes-product-700));outline-offset:2px;border-radius:var(--pr-t-border-radius-small)}.link .lucca-icon{text-decoration:none;font-size:1em;vertical-align:baseline;position:relative;inset-block-start:.075rem;margin-inline-start:var(--components-link-icon-marginInlineStart)}.link .link-text{text-decoration:var(--components-link-text-textDecoration)}.link-icon{white-space:nowrap;opacity:var(--components-link-icon-opacity);transition-property:opacity;transition-duration:var(--commons-animations-durations-fast)}.link-icon:before{content:\"\\a0\"/\"\"}}@layer mods{.link.mod-decorationHover{--components-link-textDecoration: none;--components-link-text-textDecoration: none}.link.mod-decorationHover:hover{--components-link-text-textDecoration: underline}.link.mod-decorationHover:hover:not(:has(.link-text)){--components-link-textDecoration: underline}.link.mod-neutral{--components-link-color: var(--pr-t-color-text);--components-link-color-hover: var(--palettes-neutral-900)}@media not (any-pointer:coarse){.link.mod-hiddenIcon:not(:hover,:focus-visible){--components-link-icon-opacity: 0}}.link:is(:disabled,.is-disabled){--components-link-color: var(--pr-t-color-text-disabled);--components-link-cursor: not-allowed}.link:has(.link-text){--components-link-textDecoration: none}.link:not(:has(.link-icon)){--components-link-icon-marginInlineStart: .2em}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
170
194
|
}
|
|
171
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1
|
|
195
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.1", ngImport: i0, type: LinkComponent, decorators: [{
|
|
172
196
|
type: Component,
|
|
173
197
|
args: [{ selector: 'a[luLink], button[luLink]', standalone: true, encapsulation: ViewEncapsulation.None, host: {
|
|
174
198
|
class: 'link',
|
|
175
|
-
'[attr.href]': 'routerLink.
|
|
199
|
+
'[attr.href]': 'routerLink.resolvedHref()',
|
|
176
200
|
'[class.mod-decorationHover]': 'decorationHover()',
|
|
177
201
|
'[class.mod-icon]': 'external()',
|
|
178
202
|
'[class.mod-neutral]': 'neutral()',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lucca-front-ng-link.mjs","sources":["../../../packages/ng/link/translations.ts","../../../packages/ng/link/link.translate.ts","../../../packages/ng/link/lu-router-link.ts","../../../packages/ng/link/link.component.ts","../../../packages/ng/link/link.component.html","../../../packages/ng/link/link.token.ts","../../../packages/ng/link/lucca-front-ng-link.ts"],"sourcesContent":["export const Translations = {\n\ten: {\n\t\texternal: '(Open in a new window.)',\n\t},\n\tde: {\n\t\texternal: '(In einem neuen Fenster öffnen.)',\n\t},\n\tfr: {\n\t\texternal: '(Ouvrir dans une nouvelle fenêtre.)',\n\t},\n\tit: {\n\t\texternal: '(Aprire in una nuova finestra.)',\n\t},\n\tnl: {\n\t\texternal: '(Open in een nieuw venster.)',\n\t},\n\tes: {\n\t\texternal: '(Abrir en una nueva ventana.)',\n\t},\n\tpt: {\n\t\texternal: '(Abrir numa nova janela.)',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_LINK_TRANSLATIONS = new InjectionToken('luLinkTranslations', {\n\tfactory: () => luLinkTranslations,\n});\n\nexport interface LinkTranslate {\n\texternal: string;\n}\n\nexport const luLinkTranslations: LuTranslation<LinkTranslate> = Translations;\n","import { LocationStrategy } from '@angular/common';\nimport { Attribute, Directive, ElementRef, Renderer2, WritableSignal } from '@angular/core';\nimport { ActivatedRoute, Router, RouterLink } from '@angular/router';\n\n@Directive({\n\tselector: '[luRouterLink]',\n})\nexport class LuRouterLink extends RouterLink {\n\t// Workaround for a storybook bug = implement the constructor https://github.com/storybookjs/storybook/issues/23534#issuecomment-2042888436\n\tconstructor(router: Router, route: ActivatedRoute, @Attribute('tabindex') tabIndexAttribute: string | null | undefined, renderer: Renderer2, el: ElementRef, locationStrategy?: LocationStrategy) {\n\t\tsuper(router, route, tabIndexAttribute, renderer, el, locationStrategy);\n\t}\n\n\t// With angular 20, RouterLink changed to use an internal, protected, readonly signal that is directly bound to `attr.href`, breaking any possibility to override it\n\t// So we had to do this to expose it to our `luLink` component.\n\tget publicReactiveHref(): WritableSignal<string | null> {\n\t\treturn this.reactiveHref;\n\t}\n}\n","import { Location } from '@angular/common';\nimport { afterNextRender, ChangeDetectionStrategy, Component, effect, ElementRef, inject, Injector, input, ViewEncapsulation } from '@angular/core';\nimport { ActivatedRoute, Router, UrlTree } from '@angular/router';\nimport { intlInputOptions, luBooleanAttribute } from '@lucca-front/ng/core';\nimport { LU_INDEX_TABLE_INSTANCE } from '@lucca-front/ng/index-table';\n\nimport { LU_DATA_TABLE_INSTANCE } from '@lucca-front/ng/data-table';\nimport { LU_LINK_TRANSLATIONS } from './link.translate';\nimport { LuRouterLink } from './lu-router-link';\n\n@Component({\n\t// eslint-disable-next-line @angular-eslint/component-selector\n\tselector: 'a[luLink], button[luLink]',\n\tstandalone: true,\n\ttemplateUrl: './link.component.html',\n\tstyleUrl: './link.component.scss',\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\tclass: 'link',\n\t\t'[attr.href]': 'routerLink.publicReactiveHref()',\n\t\t'[class.mod-decorationHover]': 'decorationHover()',\n\t\t'[class.mod-icon]': 'external()',\n\t\t'[class.mod-neutral]': 'neutral()',\n\t\t'[class.mod-hiddenIcon]': 'hiddenIcon() || (this.insideIndexTable && external()) || (this.insideDataTable && external())',\n\t\t'[class.is-disabled]': 'this.disabled()',\n\t\t'[attr.rel]': 'external() && !disabled() ? \"noopener noreferrer\" : null',\n\t\t'[attr.target]': 'external() && !disabled() ? \"_blank\" : null',\n\t\t'[attr.role]': 'disabled() ? \"presentation\" : null',\n\t\t'(click)': 'redirect()',\n\t},\n\thostDirectives: [\n\t\t{\n\t\t\tdirective: LuRouterLink,\n\t\t\tinputs: ['preserveFragment', 'skipLocationChange', 'replaceUrl', 'queryParams', 'fragment', 'queryParamsHandling', 'state', 'info', 'relativeTo'],\n\t\t},\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LinkComponent {\n\treadonly intl = input(...intlInputOptions(LU_LINK_TRANSLATIONS));\n\treadonly routerLink = inject(LuRouterLink);\n\t#injector = inject(Injector);\n\t#elementRef = inject(ElementRef);\n\treadonly router = inject(Router);\n\treadonly location = inject(Location);\n\treadonly #activatedRoute = inject(ActivatedRoute, { optional: true });\n\treadonly insideIndexTable = inject(LU_INDEX_TABLE_INSTANCE, { optional: true });\n\treadonly insideDataTable = inject(LU_DATA_TABLE_INSTANCE, { optional: true });\n\n\t/**\n\t * Target page address. Use only for external links or pages not recognized by the router.\n\t */\n\treadonly luHref = input('', { alias: 'href' });\n\n\t/**\n\t * Target page address\n\t */\n\treadonly routerLinkCommands = input<LuRouterLink['routerLink'] | null>(null, { alias: 'luLink' });\n\n\t/**\n\t * Disables the link\n\t */\n\treadonly disabled = input(false, { transform: luBooleanAttribute });\n\n\t/**\n\t * Underlines the link only on hover\n\t */\n\treadonly decorationHover = input(false, { transform: luBooleanAttribute });\n\n\t/**\n\t * Indicates that the link will open in a new tab\n\t */\n\treadonly external = input(false, { transform: luBooleanAttribute });\n\n\t/**\n\t * External icon only visible on hover/focus\n\t */\n\treadonly hiddenIcon = input(false, { transform: luBooleanAttribute });\n\n\t/**\n\t * Renders the link with the default text color instead of the link color\n\t */\n\treadonly neutral = input(false, { transform: luBooleanAttribute });\n\n\threfBackup: string;\n\n\tconstructor() {\n\t\tconst href = this.luHref;\n\n\t\teffect(() => {\n\t\t\tif (href()) {\n\t\t\t\tthis.hrefBackup = href();\n\t\t\t\tthis.routerLink.publicReactiveHref.set(this.hrefBackup);\n\t\t\t}\n\t\t\tif (this.disabled()) {\n\t\t\t\tif (this.routerLinkCommands()) {\n\t\t\t\t\tthis.routerLink.routerLink = null;\n\t\t\t\t}\n\t\t\t\tthis.routerLink.publicReactiveHref.set(null);\n\t\t\t} else if (this.routerLinkCommands() && !this.external()) {\n\t\t\t\tthis.routerLink.routerLink = this.routerLinkCommands();\n\t\t\t\t// We need to do this in order to have `routerLink` update the value for `href`:\n\t\t\t\t// See https://github.com/angular/angular/blob/main/packages/router/src/directives/router_link.ts#L281\n\t\t\t\tthis.routerLink.ngOnChanges({});\n\t\t\t} else if (this.routerLinkCommands() && this.external()) {\n\t\t\t\t// External router links must not wire up the `RouterLink` directive (it would navigate in-place),\n\t\t\t\t// but they still need an `href` so the anchor is keyboard-focusable and its destination is previewable.\n\t\t\t\t// Actual navigation is handled natively by `target=\"_blank\"` (anchors) or by `redirect()` (buttons).\n\t\t\t\tthis.routerLink.publicReactiveHref.set(this.#serializeExternalUrl());\n\t\t\t} else if (!href() && this.hrefBackup) {\n\t\t\t\tthis.routerLink.publicReactiveHref.set(this.hrefBackup);\n\t\t\t}\n\t\t});\n\t}\n\n\tredirect(): void {\n\t\t// Anchors carry an `href` with `target=\"_blank\"`, so the browser opens the new tab natively.\n\t\t// Only non-anchor hosts (e.g. `button[luLink]`) need us to open the window programmatically.\n\t\tif (!this.disabled() && this.routerLinkCommands() && this.external() && !this.#isAnchor()) {\n\t\t\tconst externalUrl = this.#serializeExternalUrl();\n\t\t\tafterNextRender(() => window.open(externalUrl ?? undefined, '_blank'), { injector: this.#injector });\n\t\t}\n\t}\n\n\t#isAnchor(): boolean {\n\t\treturn (this.#elementRef.nativeElement as HTMLElement).tagName === 'A';\n\t}\n\n\t#serializeExternalUrl(): string | null {\n\t\tconst routerLinkCommands = this.routerLinkCommands();\n\t\tif (!routerLinkCommands) {\n\t\t\treturn null;\n\t\t}\n\t\tconst urlTree =\n\t\t\trouterLinkCommands instanceof UrlTree\n\t\t\t\t? routerLinkCommands\n\t\t\t\t: this.router.createUrlTree(Array.isArray(routerLinkCommands) ? routerLinkCommands : [routerLinkCommands], {\n\t\t\t\t\t\t// Resolve relative commands against the current route, like Angular's `RouterLink` does.\n\t\t\t\t\t\t// An explicit `relativeTo` wins, including `null` which means \"resolve from the root\";\n\t\t\t\t\t\t// only `undefined` falls back to the injected `ActivatedRoute`.\n\t\t\t\t\t\trelativeTo: this.routerLink.relativeTo === undefined ? this.#activatedRoute : this.routerLink.relativeTo,\n\t\t\t\t\t\tqueryParams: this.routerLink.queryParams,\n\t\t\t\t\t\tfragment: this.routerLink.fragment,\n\t\t\t\t\t\tqueryParamsHandling: this.routerLink.queryParamsHandling,\n\t\t\t\t\t\tpreserveFragment: this.routerLink.preserveFragment,\n\t\t\t\t\t});\n\t\tconst serializedUrl = this.router.serializeUrl(urlTree);\n\t\t// Apply the app's baseHref regardless of the commands' shape (string, array or `UrlTree`):\n\t\t// they all describe an internal route, so the serialized URL must carry the baseHref.\n\t\treturn this.location.prepareExternalUrl(serializedUrl);\n\t}\n}\n","<span class=\"link-text\"><ng-content /></span>\n@if (external()) {\n\t<span class=\"link-icon\">\n\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowExternal\"></span>\n\t</span>\n\t<span class=\"pr-u-mask\">{{ intl().external }}</span>\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const LU_LINK_INSTANCE = new InjectionToken<boolean>('LU_LINK_INSTANCE');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lucca-front-ng-link.mjs","sources":["../../../packages/ng/link/translations.ts","../../../packages/ng/link/link.translate.ts","../../../packages/ng/link/lu-router-link.ts","../../../packages/ng/link/link.component.ts","../../../packages/ng/link/link.component.html","../../../packages/ng/link/link.token.ts","../../../packages/ng/link/lucca-front-ng-link.ts"],"sourcesContent":["export const Translations = {\n\ten: {\n\t\texternal: '(Open in a new window.)',\n\t},\n\tde: {\n\t\texternal: '(In einem neuen Fenster öffnen.)',\n\t},\n\tfr: {\n\t\texternal: '(Ouvrir dans une nouvelle fenêtre.)',\n\t},\n\tit: {\n\t\texternal: '(Aprire in una nuova finestra.)',\n\t},\n\tnl: {\n\t\texternal: '(Open in een nieuw venster.)',\n\t},\n\tes: {\n\t\texternal: '(Abrir en una nueva ventana.)',\n\t},\n\tpt: {\n\t\texternal: '(Abrir numa nova janela.)',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_LINK_TRANSLATIONS = new InjectionToken('luLinkTranslations', {\n\tfactory: () => luLinkTranslations,\n});\n\nexport interface LinkTranslate {\n\texternal: string;\n}\n\nexport const luLinkTranslations: LuTranslation<LinkTranslate> = Translations;\n","import { LocationStrategy } from '@angular/common';\nimport { Attribute, Directive, ElementRef, linkedSignal, Renderer2, signal, WritableSignal } from '@angular/core';\nimport { ActivatedRoute, Router, RouterLink } from '@angular/router';\n\n@Directive({\n\tselector: '[luRouterLink]',\n})\nexport class LuRouterLink extends RouterLink {\n\t/**\n\t * Href forced by `luLink` (raw `href`, external or disabled link). `undefined` lets the router compute it.\n\t */\n\treadonly hrefOverride = signal<string | null | undefined>(undefined);\n\n\t// Field initializers run after `super()`, so this still references the router-computed `linkedSignal` of `RouterLink`.\n\treadonly #routerHref: WritableSignal<string | null> = this.reactiveHref;\n\n\t// Since Angular 22, `reactiveHref` is a `linkedSignal` recomputed on every navigation, which wipes any value written with `set()`.\n\t// Deriving it from `hrefOverride` keeps the forced href across navigations.\n\tprotected override readonly reactiveHref = linkedSignal<string | null>(() => {\n\t\tconst hrefOverride = this.hrefOverride();\n\t\treturn hrefOverride === undefined ? this.#routerHref() : hrefOverride;\n\t});\n\n\t/**\n\t * Href bound to the host element: `hrefOverride` when set, the router-computed href otherwise.\n\t */\n\treadonly resolvedHref = this.reactiveHref.asReadonly();\n\n\t// Workaround for a storybook bug = implement the constructor https://github.com/storybookjs/storybook/issues/23534#issuecomment-2042888436\n\tconstructor(router: Router, route: ActivatedRoute, @Attribute('tabindex') tabIndexAttribute: string | null | undefined, renderer: Renderer2, el: ElementRef, locationStrategy?: LocationStrategy) {\n\t\tsuper(router, route, tabIndexAttribute, renderer, el, locationStrategy);\n\t}\n\n\t/**\n\t * @deprecated a value written with `set()` is wiped on every navigation, use `hrefOverride` to force the href and `resolvedHref` to read it instead\n\t */\n\tget publicReactiveHref(): WritableSignal<string | null> {\n\t\treturn this.reactiveHref;\n\t}\n}\n","import { Location } from '@angular/common';\nimport { afterNextRender, ChangeDetectionStrategy, Component, effect, ElementRef, inject, Injector, input, ViewEncapsulation } from '@angular/core';\nimport { ActivatedRoute, Router, UrlTree } from '@angular/router';\nimport { intlInputOptions, luBooleanAttribute } from '@lucca-front/ng/core';\nimport { LU_INDEX_TABLE_INSTANCE } from '@lucca-front/ng/index-table';\n\nimport { LU_DATA_TABLE_INSTANCE } from '@lucca-front/ng/data-table';\nimport { LU_LINK_TRANSLATIONS } from './link.translate';\nimport { LuRouterLink } from './lu-router-link';\n\n@Component({\n\t// eslint-disable-next-line @angular-eslint/component-selector\n\tselector: 'a[luLink], button[luLink]',\n\tstandalone: true,\n\ttemplateUrl: './link.component.html',\n\tstyleUrl: './link.component.scss',\n\tencapsulation: ViewEncapsulation.None,\n\thost: {\n\t\tclass: 'link',\n\t\t'[attr.href]': 'routerLink.resolvedHref()',\n\t\t'[class.mod-decorationHover]': 'decorationHover()',\n\t\t'[class.mod-icon]': 'external()',\n\t\t'[class.mod-neutral]': 'neutral()',\n\t\t'[class.mod-hiddenIcon]': 'hiddenIcon() || (this.insideIndexTable && external()) || (this.insideDataTable && external())',\n\t\t'[class.is-disabled]': 'this.disabled()',\n\t\t'[attr.rel]': 'external() && !disabled() ? \"noopener noreferrer\" : null',\n\t\t'[attr.target]': 'external() && !disabled() ? \"_blank\" : null',\n\t\t'[attr.role]': 'disabled() ? \"presentation\" : null',\n\t\t'(click)': 'redirect()',\n\t},\n\thostDirectives: [\n\t\t{\n\t\t\tdirective: LuRouterLink,\n\t\t\tinputs: ['preserveFragment', 'skipLocationChange', 'replaceUrl', 'queryParams', 'fragment', 'queryParamsHandling', 'state', 'info', 'relativeTo'],\n\t\t},\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LinkComponent {\n\treadonly intl = input(...intlInputOptions(LU_LINK_TRANSLATIONS));\n\treadonly routerLink = inject(LuRouterLink);\n\t#injector = inject(Injector);\n\t#elementRef = inject(ElementRef);\n\treadonly router = inject(Router);\n\treadonly location = inject(Location);\n\treadonly #activatedRoute = inject(ActivatedRoute, { optional: true });\n\treadonly insideIndexTable = inject(LU_INDEX_TABLE_INSTANCE, { optional: true });\n\treadonly insideDataTable = inject(LU_DATA_TABLE_INSTANCE, { optional: true });\n\n\t/**\n\t * Target page address. Use only for external links or pages not recognized by the router.\n\t */\n\treadonly luHref = input('', { alias: 'href' });\n\n\t/**\n\t * Target page address\n\t */\n\treadonly routerLinkCommands = input<LuRouterLink['routerLink'] | null>(null, { alias: 'luLink' });\n\n\t/**\n\t * Disables the link\n\t */\n\treadonly disabled = input(false, { transform: luBooleanAttribute });\n\n\t/**\n\t * Underlines the link only on hover\n\t */\n\treadonly decorationHover = input(false, { transform: luBooleanAttribute });\n\n\t/**\n\t * Indicates that the link will open in a new tab\n\t */\n\treadonly external = input(false, { transform: luBooleanAttribute });\n\n\t/**\n\t * External icon only visible on hover/focus\n\t */\n\treadonly hiddenIcon = input(false, { transform: luBooleanAttribute });\n\n\t/**\n\t * Renders the link with the default text color instead of the link color\n\t */\n\treadonly neutral = input(false, { transform: luBooleanAttribute });\n\n\threfBackup: string;\n\n\tconstructor() {\n\t\tconst href = this.luHref;\n\n\t\teffect(() => {\n\t\t\tif (href()) {\n\t\t\t\tthis.hrefBackup = href();\n\t\t\t\tthis.routerLink.hrefOverride.set(this.hrefBackup);\n\t\t\t}\n\t\t\tif (this.disabled()) {\n\t\t\t\tif (this.routerLinkCommands()) {\n\t\t\t\t\tthis.routerLink.routerLink = null;\n\t\t\t\t}\n\t\t\t\tthis.routerLink.hrefOverride.set(null);\n\t\t\t} else if (this.routerLinkCommands() && !this.external()) {\n\t\t\t\tthis.routerLink.routerLink = this.routerLinkCommands();\n\t\t\t\tthis.routerLink.hrefOverride.set(undefined);\n\t\t\t\t// We need to do this in order to have `routerLink` update the value for `href`:\n\t\t\t\t// See https://github.com/angular/angular/blob/main/packages/router/src/directives/router_link.ts#L281\n\t\t\t\tthis.routerLink.ngOnChanges({});\n\t\t\t} else if (this.routerLinkCommands() && this.external()) {\n\t\t\t\t// External router links must not wire up the `RouterLink` directive (it would navigate in-place),\n\t\t\t\t// but they still need an `href` so the anchor is keyboard-focusable and its destination is previewable.\n\t\t\t\t// Actual navigation is handled natively by `target=\"_blank\"` (anchors) or by `redirect()` (buttons).\n\t\t\t\t// Commands set while the link was internal are cleared, otherwise `RouterLink` keeps intercepting the click.\n\t\t\t\tthis.routerLink.routerLink = null;\n\t\t\t\tthis.routerLink.hrefOverride.set(this.#serializeExternalUrl());\n\t\t\t} else if (!href() && this.hrefBackup) {\n\t\t\t\tthis.routerLink.hrefOverride.set(this.hrefBackup);\n\t\t\t}\n\t\t});\n\t}\n\n\tredirect(): void {\n\t\t// Anchors carry an `href` with `target=\"_blank\"`, so the browser opens the new tab natively.\n\t\t// Only non-anchor hosts (e.g. `button[luLink]`) need us to open the window programmatically.\n\t\tif (!this.disabled() && this.routerLinkCommands() && this.external() && !this.#isAnchor()) {\n\t\t\tconst externalUrl = this.#serializeExternalUrl();\n\t\t\tafterNextRender(() => window.open(externalUrl ?? undefined, '_blank'), { injector: this.#injector });\n\t\t}\n\t}\n\n\t#isAnchor(): boolean {\n\t\treturn (this.#elementRef.nativeElement as HTMLElement).tagName === 'A';\n\t}\n\n\t#serializeExternalUrl(): string | null {\n\t\tconst routerLinkCommands = this.routerLinkCommands();\n\t\tif (!routerLinkCommands) {\n\t\t\treturn null;\n\t\t}\n\t\tconst urlTree =\n\t\t\trouterLinkCommands instanceof UrlTree\n\t\t\t\t? routerLinkCommands\n\t\t\t\t: this.router.createUrlTree(Array.isArray(routerLinkCommands) ? routerLinkCommands : [routerLinkCommands], {\n\t\t\t\t\t\t// Resolve relative commands against the current route, like Angular's `RouterLink` does.\n\t\t\t\t\t\t// An explicit `relativeTo` wins, including `null` which means \"resolve from the root\";\n\t\t\t\t\t\t// only `undefined` falls back to the injected `ActivatedRoute`.\n\t\t\t\t\t\trelativeTo: this.routerLink.relativeTo === undefined ? this.#activatedRoute : this.routerLink.relativeTo,\n\t\t\t\t\t\tqueryParams: this.routerLink.queryParams,\n\t\t\t\t\t\tfragment: this.routerLink.fragment,\n\t\t\t\t\t\tqueryParamsHandling: this.routerLink.queryParamsHandling,\n\t\t\t\t\t\tpreserveFragment: this.routerLink.preserveFragment,\n\t\t\t\t\t});\n\t\tconst serializedUrl = this.router.serializeUrl(urlTree);\n\t\t// Apply the app's baseHref regardless of the commands' shape (string, array or `UrlTree`):\n\t\t// they all describe an internal route, so the serialized URL must carry the baseHref.\n\t\treturn this.location.prepareExternalUrl(serializedUrl);\n\t}\n}\n","<span class=\"link-text\"><ng-content /></span>\n@if (external()) {\n\t<span class=\"link-icon\">\n\t\t<span aria-hidden=\"true\" class=\"lucca-icon icon-arrowExternal\"></span>\n\t</span>\n\t<span class=\"pr-u-mask\">{{ intl().external }}</span>\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const LU_LINK_INSTANCE = new InjectionToken<boolean>('LU_LINK_INSTANCE');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|