@yuuvis/client-framework 3.0.0-beta.20.2 → 3.0.0-beta.21.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.
Files changed (129) hide show
  1. package/autocomplete/README.md +1 -1
  2. package/common/README.md +1 -1
  3. package/fesm2022/yuuvis-client-framework-actions.mjs +25 -25
  4. package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -1
  5. package/fesm2022/yuuvis-client-framework-app-bar.mjs +6 -6
  6. package/fesm2022/yuuvis-client-framework-app-bar.mjs.map +1 -1
  7. package/fesm2022/yuuvis-client-framework-autocomplete.mjs +5 -236
  8. package/fesm2022/yuuvis-client-framework-autocomplete.mjs.map +1 -1
  9. package/fesm2022/yuuvis-client-framework-breadcrumb.mjs +4 -4
  10. package/fesm2022/yuuvis-client-framework-breadcrumb.mjs.map +1 -1
  11. package/fesm2022/yuuvis-client-framework-clipboard.mjs +7 -6
  12. package/fesm2022/yuuvis-client-framework-clipboard.mjs.map +1 -1
  13. package/fesm2022/yuuvis-client-framework-common.mjs +3 -1793
  14. package/fesm2022/yuuvis-client-framework-common.mjs.map +1 -1
  15. package/fesm2022/yuuvis-client-framework-datepicker.mjs +51 -51
  16. package/fesm2022/yuuvis-client-framework-datepicker.mjs.map +1 -1
  17. package/fesm2022/yuuvis-client-framework-forms.mjs +154 -167
  18. package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
  19. package/fesm2022/yuuvis-client-framework-icons.mjs +14 -14
  20. package/fesm2022/yuuvis-client-framework-icons.mjs.map +1 -1
  21. package/fesm2022/yuuvis-client-framework-list.mjs +3 -679
  22. package/fesm2022/yuuvis-client-framework-list.mjs.map +1 -1
  23. package/fesm2022/yuuvis-client-framework-master-details.mjs +3 -136
  24. package/fesm2022/yuuvis-client-framework-master-details.mjs.map +1 -1
  25. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs +7 -7
  26. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs.map +1 -1
  27. package/fesm2022/yuuvis-client-framework-metadata-form.mjs +28 -28
  28. package/fesm2022/yuuvis-client-framework-metadata-form.mjs.map +1 -1
  29. package/fesm2022/yuuvis-client-framework-object-details.mjs +92 -95
  30. package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
  31. package/fesm2022/yuuvis-client-framework-object-flavor.mjs +46 -44
  32. package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -1
  33. package/fesm2022/yuuvis-client-framework-object-form.mjs +47 -47
  34. package/fesm2022/yuuvis-client-framework-object-form.mjs.map +1 -1
  35. package/fesm2022/yuuvis-client-framework-object-preview.mjs +37 -58
  36. package/fesm2022/yuuvis-client-framework-object-preview.mjs.map +1 -1
  37. package/fesm2022/yuuvis-client-framework-object-relationship.mjs +80 -80
  38. package/fesm2022/yuuvis-client-framework-object-relationship.mjs.map +1 -1
  39. package/fesm2022/yuuvis-client-framework-object-summary.mjs +37 -38
  40. package/fesm2022/yuuvis-client-framework-object-summary.mjs.map +1 -1
  41. package/fesm2022/yuuvis-client-framework-object-versions.mjs +20 -20
  42. package/fesm2022/yuuvis-client-framework-object-versions.mjs.map +1 -1
  43. package/fesm2022/yuuvis-client-framework-overflow-hidden.mjs +3 -62
  44. package/fesm2022/yuuvis-client-framework-overflow-hidden.mjs.map +1 -1
  45. package/fesm2022/yuuvis-client-framework-overflow-menu.mjs +3 -129
  46. package/fesm2022/yuuvis-client-framework-overflow-menu.mjs.map +1 -1
  47. package/fesm2022/yuuvis-client-framework-pagination.mjs +5 -5
  48. package/fesm2022/yuuvis-client-framework-pagination.mjs.map +1 -1
  49. package/fesm2022/yuuvis-client-framework-popout.mjs +3 -239
  50. package/fesm2022/yuuvis-client-framework-popout.mjs.map +1 -1
  51. package/fesm2022/yuuvis-client-framework-query-list.mjs +26 -28
  52. package/fesm2022/yuuvis-client-framework-query-list.mjs.map +1 -1
  53. package/fesm2022/yuuvis-client-framework-renderer.mjs +51 -51
  54. package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -1
  55. package/fesm2022/yuuvis-client-framework-sequence-list.mjs +7 -7
  56. package/fesm2022/yuuvis-client-framework-sequence-list.mjs.map +1 -1
  57. package/fesm2022/yuuvis-client-framework-simple-search.mjs +4 -4
  58. package/fesm2022/yuuvis-client-framework-simple-search.mjs.map +1 -1
  59. package/fesm2022/yuuvis-client-framework-sort.mjs +34 -55
  60. package/fesm2022/yuuvis-client-framework-sort.mjs.map +1 -1
  61. package/fesm2022/yuuvis-client-framework-split-view.mjs +3 -321
  62. package/fesm2022/yuuvis-client-framework-split-view.mjs.map +1 -1
  63. package/fesm2022/yuuvis-client-framework-tile-list.mjs +88 -90
  64. package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
  65. package/fesm2022/yuuvis-client-framework-token-search.mjs +21 -21
  66. package/fesm2022/yuuvis-client-framework-token-search.mjs.map +1 -1
  67. package/fesm2022/yuuvis-client-framework-tree.mjs +16 -16
  68. package/fesm2022/yuuvis-client-framework-tree.mjs.map +1 -1
  69. package/fesm2022/yuuvis-client-framework-upload-progress.mjs +15 -15
  70. package/fesm2022/yuuvis-client-framework-upload-progress.mjs.map +1 -1
  71. package/fesm2022/yuuvis-client-framework-widget-grid.mjs +3 -946
  72. package/fesm2022/yuuvis-client-framework-widget-grid.mjs.map +1 -1
  73. package/fesm2022/yuuvis-client-framework.mjs +22 -22
  74. package/fesm2022/yuuvis-client-framework.mjs.map +1 -1
  75. package/lib/assets/i18n/de.json +1 -55
  76. package/lib/assets/i18n/en.json +1 -55
  77. package/list/README.md +1 -1
  78. package/master-details/README.md +1 -1
  79. package/overflow-hidden/README.md +1 -1
  80. package/overflow-menu/README.md +1 -1
  81. package/package.json +50 -48
  82. package/popout/README.md +1 -1
  83. package/split-view/README.md +1 -1
  84. package/types/yuuvis-client-framework-autocomplete.d.ts +1 -0
  85. package/{clipboard/index.d.ts → types/yuuvis-client-framework-clipboard.d.ts} +1 -1
  86. package/types/yuuvis-client-framework-common.d.ts +1 -0
  87. package/types/yuuvis-client-framework-list.d.ts +1 -0
  88. package/types/yuuvis-client-framework-master-details.d.ts +1 -0
  89. package/{object-flavor/index.d.ts → types/yuuvis-client-framework-object-flavor.d.ts} +1 -0
  90. package/types/yuuvis-client-framework-overflow-hidden.d.ts +1 -0
  91. package/types/yuuvis-client-framework-overflow-menu.d.ts +1 -0
  92. package/types/yuuvis-client-framework-popout.d.ts +1 -0
  93. package/{renderer/index.d.ts → types/yuuvis-client-framework-renderer.d.ts} +2 -2
  94. package/types/yuuvis-client-framework-split-view.d.ts +1 -0
  95. package/types/yuuvis-client-framework-widget-grid.d.ts +1 -0
  96. package/widget-grid/README.md +1 -46
  97. package/autocomplete/index.d.ts +0 -89
  98. package/common/index.d.ts +0 -536
  99. package/list/index.d.ts +0 -380
  100. package/master-details/index.d.ts +0 -69
  101. package/overflow-hidden/index.d.ts +0 -28
  102. package/overflow-menu/index.d.ts +0 -52
  103. package/popout/index.d.ts +0 -106
  104. package/split-view/index.d.ts +0 -197
  105. package/widget-grid/index.d.ts +0 -299
  106. /package/{actions/index.d.ts → types/yuuvis-client-framework-actions.d.ts} +0 -0
  107. /package/{app-bar/index.d.ts → types/yuuvis-client-framework-app-bar.d.ts} +0 -0
  108. /package/{breadcrumb/index.d.ts → types/yuuvis-client-framework-breadcrumb.d.ts} +0 -0
  109. /package/{datepicker/index.d.ts → types/yuuvis-client-framework-datepicker.d.ts} +0 -0
  110. /package/{forms/index.d.ts → types/yuuvis-client-framework-forms.d.ts} +0 -0
  111. /package/{icons/index.d.ts → types/yuuvis-client-framework-icons.d.ts} +0 -0
  112. /package/{metadata-form-defaults/index.d.ts → types/yuuvis-client-framework-metadata-form-defaults.d.ts} +0 -0
  113. /package/{metadata-form/index.d.ts → types/yuuvis-client-framework-metadata-form.d.ts} +0 -0
  114. /package/{object-details/index.d.ts → types/yuuvis-client-framework-object-details.d.ts} +0 -0
  115. /package/{object-form/index.d.ts → types/yuuvis-client-framework-object-form.d.ts} +0 -0
  116. /package/{object-preview/index.d.ts → types/yuuvis-client-framework-object-preview.d.ts} +0 -0
  117. /package/{object-relationship/index.d.ts → types/yuuvis-client-framework-object-relationship.d.ts} +0 -0
  118. /package/{object-summary/index.d.ts → types/yuuvis-client-framework-object-summary.d.ts} +0 -0
  119. /package/{object-versions/index.d.ts → types/yuuvis-client-framework-object-versions.d.ts} +0 -0
  120. /package/{pagination/index.d.ts → types/yuuvis-client-framework-pagination.d.ts} +0 -0
  121. /package/{query-list/index.d.ts → types/yuuvis-client-framework-query-list.d.ts} +0 -0
  122. /package/{sequence-list/index.d.ts → types/yuuvis-client-framework-sequence-list.d.ts} +0 -0
  123. /package/{simple-search/index.d.ts → types/yuuvis-client-framework-simple-search.d.ts} +0 -0
  124. /package/{sort/index.d.ts → types/yuuvis-client-framework-sort.d.ts} +0 -0
  125. /package/{tile-list/index.d.ts → types/yuuvis-client-framework-tile-list.d.ts} +0 -0
  126. /package/{token-search/index.d.ts → types/yuuvis-client-framework-token-search.d.ts} +0 -0
  127. /package/{tree/index.d.ts → types/yuuvis-client-framework-tree.d.ts} +0 -0
  128. /package/{upload-progress/index.d.ts → types/yuuvis-client-framework-upload-progress.d.ts} +0 -0
  129. /package/{index.d.ts → types/yuuvis-client-framework.d.ts} +0 -0
@@ -8,7 +8,7 @@ import { MatIconModule } from '@angular/material/icon';
8
8
  import * as i2 from '@angular/material/menu';
9
9
  import { MatMenuModule } from '@angular/material/menu';
10
10
  import { MatTooltip } from '@angular/material/tooltip';
11
- import { SystemService, TranslateService, TranslatePipe } from '@yuuvis/client-core';
11
+ import { SystemService, TranslateService } from '@yuuvis/client-core';
12
12
  import { YmtIconButtonDirective } from '@yuuvis/material';
13
13
 
14
14
  const MATERIAL_MODULES = [MatTooltip, MatIconModule, MatMenuModule, MatButtonModule, MatDivider];
@@ -19,17 +19,17 @@ class SortComponent {
19
19
  constructor() {
20
20
  this.#systemService = inject(SystemService);
21
21
  this.translate = inject(TranslateService);
22
- this.tooltip = signal(this.translate.instant('yuv.sort.tooltip'), ...(ngDevMode ? [{ debugName: "tooltip" }] : []));
23
- this.sortOptions = input([], ...(ngDevMode ? [{ debugName: "sortOptions" }] : []));
24
- this.selectedSortOption = input(undefined, ...(ngDevMode ? [{ debugName: "selectedSortOption" }] : []));
25
- this.storageKey = input(...(ngDevMode ? [undefined, { debugName: "storageKey" }] : []));
22
+ this.tooltip = signal(this.translate.instant('yuv.sort.tooltip'), ...(ngDevMode ? [{ debugName: "tooltip" }] : /* istanbul ignore next */ []));
23
+ this.sortOptions = input([], ...(ngDevMode ? [{ debugName: "sortOptions" }] : /* istanbul ignore next */ []));
24
+ this.selectedSortOption = input(undefined, ...(ngDevMode ? [{ debugName: "selectedSortOption" }] : /* istanbul ignore next */ []));
25
+ this.storageKey = input(...(ngDevMode ? [undefined, { debugName: "storageKey" }] : /* istanbul ignore next */ []));
26
26
  // If true, renders a smaller icon button
27
- this.small = input(false, ...(ngDevMode ? [{ debugName: "small" }] : []));
27
+ this.small = input(false, ...(ngDevMode ? [{ debugName: "small" }] : /* istanbul ignore next */ []));
28
28
  this.sortChanged = output();
29
29
  this.orderOptions = signal([
30
30
  { label: this.translate.instant('yuv.sort.ascending'), value: 'asc', type: 'order', selected: true },
31
31
  { label: this.translate.instant('yuv.sort.descending'), value: 'desc', type: 'order', selected: false }
32
- ], ...(ngDevMode ? [{ debugName: "orderOptions" }] : []));
32
+ ], ...(ngDevMode ? [{ debugName: "orderOptions" }] : /* istanbul ignore next */ []));
33
33
  this.#rememberSort = effect(() => {
34
34
  const storageKey = this.storageKey();
35
35
  if (storageKey) {
@@ -59,51 +59,29 @@ class SortComponent {
59
59
  }
60
60
  }
61
61
  }
62
- }, ...(ngDevMode ? [{ debugName: "#rememberSort" }] : []));
63
- this.#reEvaluate = signal(null, ...(ngDevMode ? [{ debugName: "#reEvaluate" }] : []));
64
- this.sortFields = linkedSignal(...(ngDevMode ? [{ debugName: "sortFields", source: () => ({
65
- sortOptions: this.sortOptions(),
66
- orderOptions: this.orderOptions(),
67
- selectedSortOption: this.selectedSortOption(),
68
- evaluate: this.#reEvaluate()
69
- }),
70
- computation: ({ sortOptions, orderOptions, selectedSortOption }) => {
71
- // Ensure selectedSortOption.field is present in sortOptions
72
- if (selectedSortOption?.field && !sortOptions.includes(selectedSortOption.order)) {
73
- orderOptions = orderOptions.map((order) => order.value === selectedSortOption.order ? { ...order, selected: true } : { ...order, selected: false });
74
- }
75
- return [
76
- ...sortOptions.map((value, index) => ({
77
- value,
78
- label: this.#systemService.getLocalizedLabel(value) || value,
79
- type: 'sort',
80
- selected: index === 0 // first sort option is default
81
- })),
82
- ...orderOptions
83
- ];
84
- } }] : [{
85
- source: () => ({
86
- sortOptions: this.sortOptions(),
87
- orderOptions: this.orderOptions(),
88
- selectedSortOption: this.selectedSortOption(),
89
- evaluate: this.#reEvaluate()
90
- }),
91
- computation: ({ sortOptions, orderOptions, selectedSortOption }) => {
92
- // Ensure selectedSortOption.field is present in sortOptions
93
- if (selectedSortOption?.field && !sortOptions.includes(selectedSortOption.order)) {
94
- orderOptions = orderOptions.map((order) => order.value === selectedSortOption.order ? { ...order, selected: true } : { ...order, selected: false });
95
- }
96
- return [
97
- ...sortOptions.map((value, index) => ({
98
- value,
99
- label: this.#systemService.getLocalizedLabel(value) || value,
100
- type: 'sort',
101
- selected: index === 0 // first sort option is default
102
- })),
103
- ...orderOptions
104
- ];
62
+ }, ...(ngDevMode ? [{ debugName: "#rememberSort" }] : /* istanbul ignore next */ []));
63
+ this.#reEvaluate = signal(null, ...(ngDevMode ? [{ debugName: "#reEvaluate" }] : /* istanbul ignore next */ []));
64
+ this.sortFields = linkedSignal({ ...(ngDevMode ? { debugName: "sortFields" } : /* istanbul ignore next */ {}), source: () => ({
65
+ sortOptions: this.sortOptions(),
66
+ orderOptions: this.orderOptions(),
67
+ selectedSortOption: this.selectedSortOption(),
68
+ evaluate: this.#reEvaluate()
69
+ }),
70
+ computation: ({ sortOptions, orderOptions, selectedSortOption }) => {
71
+ // Ensure selectedSortOption.field is present in sortOptions
72
+ if (selectedSortOption?.field && !sortOptions.includes(selectedSortOption.order)) {
73
+ orderOptions = orderOptions.map((order) => order.value === selectedSortOption.order ? { ...order, selected: true } : { ...order, selected: false });
105
74
  }
106
- }]));
75
+ return [
76
+ ...sortOptions.map((value, index) => ({
77
+ value,
78
+ label: this.#systemService.getLocalizedLabel(value) || value,
79
+ type: 'sort',
80
+ selected: index === 0 // first sort option is default
81
+ })),
82
+ ...orderOptions
83
+ ];
84
+ } });
107
85
  this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe({ next: () => this.#reEvaluate.set(new Date()) });
108
86
  }
109
87
  selectSort(option) {
@@ -117,11 +95,12 @@ class SortComponent {
117
95
  return acc;
118
96
  }, { field: '', order: 'asc' });
119
97
  const storageKey = this.storageKey();
98
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
120
99
  storageKey && localStorage.setItem(storageKey, JSON.stringify(fields));
121
100
  this.sortChanged.emit(fields);
122
101
  }
123
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: SortComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
124
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: SortComponent, isStandalone: true, selector: "yuv-sort", inputs: { sortOptions: { classPropertyName: "sortOptions", publicName: "sortOptions", isSignal: true, isRequired: false, transformFunction: null }, selectedSortOption: { classPropertyName: "selectedSortOption", publicName: "selectedSortOption", isSignal: true, isRequired: false, transformFunction: null }, storageKey: { classPropertyName: "storageKey", publicName: "storageKey", isSignal: true, isRequired: false, transformFunction: null }, small: { classPropertyName: "small", publicName: "small", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sortChanged: "sortChanged" }, ngImport: i0, template: `<button
102
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SortComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
103
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: SortComponent, isStandalone: true, selector: "yuv-sort", inputs: { sortOptions: { classPropertyName: "sortOptions", publicName: "sortOptions", isSignal: true, isRequired: false, transformFunction: null }, selectedSortOption: { classPropertyName: "selectedSortOption", publicName: "selectedSortOption", isSignal: true, isRequired: false, transformFunction: null }, storageKey: { classPropertyName: "storageKey", publicName: "storageKey", isSignal: true, isRequired: false, transformFunction: null }, small: { classPropertyName: "small", publicName: "small", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sortChanged: "sortChanged" }, ngImport: i0, template: `<button
125
104
  ymt-icon-button
126
105
  [icon-button-size]="small() ? 'small' : 'medium'"
127
106
  [matTooltip]="tooltip()"
@@ -152,9 +131,9 @@ class SortComponent {
152
131
  }
153
132
  </mat-menu>`, isInline: true, styles: [":host{display:block}.mat-mdc-menu-item.sort-menu-item.selected .mat-icon{scale:.5}\n"], dependencies: [{ kind: "directive", type: YmtIconButtonDirective, selector: "button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]", inputs: ["disabled", "disableRipple", "aria-disabled", "disabledInteractive", "icon-button-size"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
154
133
  }
155
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: SortComponent, decorators: [{
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SortComponent, decorators: [{
156
135
  type: Component,
157
- args: [{ selector: 'yuv-sort', imports: [TranslatePipe, YmtIconButtonDirective, ...MATERIAL_MODULES], template: `<button
136
+ args: [{ selector: 'yuv-sort', imports: [YmtIconButtonDirective, ...MATERIAL_MODULES], template: `<button
158
137
  ymt-icon-button
159
138
  [icon-button-size]="small() ? 'small' : 'medium'"
160
139
  [matTooltip]="tooltip()"
@@ -1 +1 @@
1
- {"version":3,"file":"yuuvis-client-framework-sort.mjs","sources":["../../../../../libs/yuuvis/client-framework/sort/src/lib/sort/sort.component.ts","../../../../../libs/yuuvis/client-framework/sort/src/yuuvis-client-framework-sort.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, effect, inject, input, linkedSignal, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDivider } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { SystemService, TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { SortMenuOption, SortType } from './models';\n\nconst MATERIAL_MODULES = [MatTooltip, MatIconModule, MatMenuModule, MatButtonModule, MatDivider];\n\n@Component({\n selector: 'yuv-sort',\n imports: [TranslatePipe, YmtIconButtonDirective, ...MATERIAL_MODULES],\n template: `<button\n ymt-icon-button\n [icon-button-size]=\"small() ? 'small' : 'medium'\"\n [matTooltip]=\"tooltip()\"\n matTooltipPosition=\"below\"\n [matMenuTriggerFor]=\"menu\"\n [attr.aria-label]=\"tooltip()\"\n >\n <mat-icon>swap_vert</mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\" class=\"sort-menu\" [ariaLabel]=\"tooltip()\">\n @for (option of sortFields(); track $index) {\n <button\n mat-menu-item\n class=\"sort-menu-item\"\n [class.selected]=\"option.selected\"\n (click)=\"selectSort(option)\"\n [attr.aria-label]=\"option.label\"\n [matTooltip]=\"option.label\"\n matTooltipPosition=\"right\"\n >\n <mat-icon>{{ option.selected ? 'radio_button_checked' : '' }}</mat-icon>\n <span>{{ option.label }}</span>\n </button>\n @if (sortFields().length - 3 === $index) {\n <mat-divider />\n }\n }\n </mat-menu>`,\n styleUrls: ['./sort.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SortComponent {\n readonly #systemService = inject(SystemService);\n readonly translate = inject(TranslateService);\n\n tooltip = signal<string>(this.translate.instant('yuv.sort.tooltip'));\n\n sortOptions = input<string[]>([]);\n selectedSortOption = input<{ field: string; order: SortType } | undefined>(undefined);\n storageKey = input<string>();\n // If true, renders a smaller icon button\n small = input<boolean>(false);\n sortChanged = output<{ field: string; order: SortType }>();\n\n orderOptions = signal<SortMenuOption[]>([\n { label: this.translate.instant('yuv.sort.ascending'), value: 'asc', type: 'order', selected: true },\n { label: this.translate.instant('yuv.sort.descending'), value: 'desc', type: 'order', selected: false }\n ]);\n\n #rememberSort = effect(() => {\n const storageKey = this.storageKey();\n if (storageKey) {\n const storage = localStorage.getItem(storageKey);\n if (storage) {\n try {\n const data = JSON.parse(storage);\n this.sortFields.update((fields) => {\n const updated = fields.map((field) =>\n field.type === 'sort' && field.value === data.field\n ? { ...field, selected: true }\n : field.type === 'order' && field.value === data.order\n ? { ...field, selected: true }\n : { ...field, selected: false }\n );\n\n // Fallback: if no sort field matched, select the first one\n const hasSortSelected = updated.some((opt) => opt.type === 'sort' && opt.selected);\n if (!hasSortSelected) {\n const firstSortIndex = updated.findIndex((opt) => opt.type === 'sort');\n if (firstSortIndex !== -1) {\n updated[firstSortIndex] = { ...updated[firstSortIndex], selected: true };\n }\n }\n\n return updated;\n });\n } catch (error) {\n console.error('Error parsing sort data from localStorage:', error);\n }\n }\n }\n });\n\n #reEvaluate = signal<Date | null>(null);\n sortFields = linkedSignal({\n source: () => ({\n sortOptions: this.sortOptions(),\n orderOptions: this.orderOptions(),\n selectedSortOption: this.selectedSortOption(),\n evaluate: this.#reEvaluate()\n }),\n computation: ({ sortOptions, orderOptions, selectedSortOption }) => {\n // Ensure selectedSortOption.field is present in sortOptions\n if (selectedSortOption?.field && !sortOptions.includes(selectedSortOption.order)) {\n orderOptions = orderOptions.map((order) =>\n order.value === selectedSortOption.order ? { ...order, selected: true } : { ...order, selected: false }\n );\n }\n return [\n ...sortOptions.map((value, index) => ({\n value,\n label: this.#systemService.getLocalizedLabel(value) || value,\n type: 'sort' as const,\n selected: index === 0 // first sort option is default\n })),\n ...orderOptions\n ];\n }\n });\n\n constructor() {\n this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe({ next: () => this.#reEvaluate.set(new Date()) });\n }\n\n selectSort(option: SortMenuOption): void {\n this.sortFields.update((fields) =>\n fields.map((field) => (field.type === option.type ? { ...field, selected: field.value === option.value } : field))\n );\n const selectedFields = this.sortFields().filter((field) => field.selected);\n const fields = selectedFields.reduce(\n (acc, field) => {\n if (field.type === 'sort') acc.field = field.value;\n if (field.type === 'order') acc.order = field.value as SortType;\n return acc;\n },\n { field: '', order: 'asc' as SortType }\n );\n\n const storageKey = this.storageKey();\n storageKey && localStorage.setItem(storageKey, JSON.stringify(fields));\n this.sortChanged.emit(fields);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"yuuvis-client-framework-sort.mjs","sources":["../../../../../libs/yuuvis/client-framework/sort/src/lib/sort/sort.component.ts","../../../../../libs/yuuvis/client-framework/sort/src/yuuvis-client-framework-sort.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, effect, inject, input, linkedSignal, output, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDivider } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { SystemService, TranslateService } from '@yuuvis/client-core';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { SortMenuOption, SortType } from './models';\n\nconst MATERIAL_MODULES = [MatTooltip, MatIconModule, MatMenuModule, MatButtonModule, MatDivider];\n\n@Component({\n selector: 'yuv-sort',\n imports: [YmtIconButtonDirective, ...MATERIAL_MODULES],\n template: `<button\n ymt-icon-button\n [icon-button-size]=\"small() ? 'small' : 'medium'\"\n [matTooltip]=\"tooltip()\"\n matTooltipPosition=\"below\"\n [matMenuTriggerFor]=\"menu\"\n [attr.aria-label]=\"tooltip()\"\n >\n <mat-icon>swap_vert</mat-icon>\n </button>\n\n <mat-menu #menu=\"matMenu\" class=\"sort-menu\" [ariaLabel]=\"tooltip()\">\n @for (option of sortFields(); track $index) {\n <button\n mat-menu-item\n class=\"sort-menu-item\"\n [class.selected]=\"option.selected\"\n (click)=\"selectSort(option)\"\n [attr.aria-label]=\"option.label\"\n [matTooltip]=\"option.label\"\n matTooltipPosition=\"right\"\n >\n <mat-icon>{{ option.selected ? 'radio_button_checked' : '' }}</mat-icon>\n <span>{{ option.label }}</span>\n </button>\n @if (sortFields().length - 3 === $index) {\n <mat-divider />\n }\n }\n </mat-menu>`,\n styleUrls: ['./sort.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SortComponent {\n readonly #systemService = inject(SystemService);\n readonly translate = inject(TranslateService);\n\n tooltip = signal<string>(this.translate.instant('yuv.sort.tooltip'));\n\n sortOptions = input<string[]>([]);\n selectedSortOption = input<{ field: string; order: SortType } | undefined>(undefined);\n storageKey = input<string>();\n // If true, renders a smaller icon button\n small = input<boolean>(false);\n sortChanged = output<{ field: string; order: SortType }>();\n\n orderOptions = signal<SortMenuOption[]>([\n { label: this.translate.instant('yuv.sort.ascending'), value: 'asc', type: 'order', selected: true },\n { label: this.translate.instant('yuv.sort.descending'), value: 'desc', type: 'order', selected: false }\n ]);\n\n #rememberSort = effect(() => {\n const storageKey = this.storageKey();\n if (storageKey) {\n const storage = localStorage.getItem(storageKey);\n if (storage) {\n try {\n const data = JSON.parse(storage);\n this.sortFields.update((fields) => {\n const updated = fields.map((field) =>\n field.type === 'sort' && field.value === data.field\n ? { ...field, selected: true }\n : field.type === 'order' && field.value === data.order\n ? { ...field, selected: true }\n : { ...field, selected: false }\n );\n\n // Fallback: if no sort field matched, select the first one\n const hasSortSelected = updated.some((opt) => opt.type === 'sort' && opt.selected);\n if (!hasSortSelected) {\n const firstSortIndex = updated.findIndex((opt) => opt.type === 'sort');\n if (firstSortIndex !== -1) {\n updated[firstSortIndex] = { ...updated[firstSortIndex], selected: true };\n }\n }\n\n return updated;\n });\n } catch (error) {\n console.error('Error parsing sort data from localStorage:', error);\n }\n }\n }\n });\n\n #reEvaluate = signal<Date | null>(null);\n sortFields = linkedSignal({\n source: () => ({\n sortOptions: this.sortOptions(),\n orderOptions: this.orderOptions(),\n selectedSortOption: this.selectedSortOption(),\n evaluate: this.#reEvaluate()\n }),\n computation: ({ sortOptions, orderOptions, selectedSortOption }) => {\n // Ensure selectedSortOption.field is present in sortOptions\n if (selectedSortOption?.field && !sortOptions.includes(selectedSortOption.order)) {\n orderOptions = orderOptions.map((order) =>\n order.value === selectedSortOption.order ? { ...order, selected: true } : { ...order, selected: false }\n );\n }\n return [\n ...sortOptions.map((value, index) => ({\n value,\n label: this.#systemService.getLocalizedLabel(value) || value,\n type: 'sort' as const,\n selected: index === 0 // first sort option is default\n })),\n ...orderOptions\n ];\n }\n });\n\n constructor() {\n this.translate.onLangChange.pipe(takeUntilDestroyed()).subscribe({ next: () => this.#reEvaluate.set(new Date()) });\n }\n\n selectSort(option: SortMenuOption): void {\n this.sortFields.update((fields) =>\n fields.map((field) => (field.type === option.type ? { ...field, selected: field.value === option.value } : field))\n );\n const selectedFields = this.sortFields().filter((field) => field.selected);\n const fields = selectedFields.reduce(\n (acc, field) => {\n if (field.type === 'sort') acc.field = field.value;\n if (field.type === 'order') acc.order = field.value as SortType;\n return acc;\n },\n { field: '', order: 'asc' as SortType }\n );\n\n const storageKey = this.storageKey();\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n storageKey && localStorage.setItem(storageKey, JSON.stringify(fields));\n this.sortChanged.emit(fields);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;AAWA,MAAM,gBAAgB,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,CAAC;MAsCnF,aAAa,CAAA;AACf,IAAA,cAAc;AAiBvB,IAAA,aAAa;AAkCb,IAAA,WAAW;AA2BX,IAAA,WAAA,GAAA;AA9ES,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,aAAa,CAAC;AACtC,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE7C,QAAA,IAAA,CAAA,OAAO,GAAG,MAAM,CAAS,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAEpE,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAW,EAAE,kFAAC;AACjC,QAAA,IAAA,CAAA,kBAAkB,GAAG,KAAK,CAAiD,SAAS,yFAAC;QACrF,IAAA,CAAA,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAU;;AAE5B,QAAA,IAAA,CAAA,KAAK,GAAG,KAAK,CAAU,KAAK,4EAAC;QAC7B,IAAA,CAAA,WAAW,GAAG,MAAM,EAAsC;QAE1D,IAAA,CAAA,YAAY,GAAG,MAAM,CAAmB;YACtC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;YACpG,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,qBAAqB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK;AACtG,SAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,MAAK;AAC1B,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YACpC,IAAI,UAAU,EAAE;gBACd,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;gBAChD,IAAI,OAAO,EAAE;AACX,oBAAA,IAAI;wBACF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;wBAChC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,KAAI;4BAChC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAC/B,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;kCAC1C,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,IAAI;AAC5B,kCAAE,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;sCAC7C,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,IAAI;sCAC1B,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CACpC;;4BAGD,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC;4BAClF,IAAI,CAAC,eAAe,EAAE;AACpB,gCAAA,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC;AACtE,gCAAA,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE;AACzB,oCAAA,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;gCAC1E;4BACF;AAEA,4BAAA,OAAO,OAAO;AAChB,wBAAA,CAAC,CAAC;oBACJ;oBAAE,OAAO,KAAK,EAAE;AACd,wBAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC;oBACpE;gBACF;YACF;AACF,QAAA,CAAC,oFAAC;AAEF,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAc,IAAI,kFAAC;QACvC,IAAA,CAAA,UAAU,GAAG,YAAY,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,YAAA,EAAA,8BAAA,EAAA,CAAA,EACvB,MAAM,EAAE,OAAO;AACb,gBAAA,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;AAC/B,gBAAA,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE;AACjC,gBAAA,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE;AAC7C,gBAAA,QAAQ,EAAE,IAAI,CAAC,WAAW;aAC3B,CAAC;YACF,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,KAAI;;AAEjE,gBAAA,IAAI,kBAAkB,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;AAChF,oBAAA,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,KACpC,KAAK,CAAC,KAAK,KAAK,kBAAkB,CAAC,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CACxG;gBACH;gBACA,OAAO;oBACL,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,MAAM;wBACpC,KAAK;wBACL,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,KAAK;AAC5D,wBAAA,IAAI,EAAE,MAAe;AACrB,wBAAA,QAAQ,EAAE,KAAK,KAAK,CAAC;AACtB,qBAAA,CAAC,CAAC;AACH,oBAAA,GAAG;iBACJ;AACH,YAAA,CAAC,GACD;AAGA,QAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;IACpH;AAEA,IAAA,UAAU,CAAC,MAAsB,EAAA;QAC/B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,KAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC,CACnH;AACD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC;QAC1E,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAClC,CAAC,GAAG,EAAE,KAAK,KAAI;AACb,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;AAAE,gBAAA,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK;AAClD,YAAA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;AAAE,gBAAA,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,KAAiB;AAC/D,YAAA,OAAO,GAAG;QACZ,CAAC,EACD,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAiB,EAAE,CACxC;AAED,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;;AAEpC,QAAA,UAAU,IAAI,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACtE,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/B;8GArGW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,kBAAA,EAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjCd,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA6BI,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,sFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA9BJ,sBAAsB,EAAA,QAAA,EAAA,mFAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAJR,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,aAAa,mLAAE,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,WAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,6CAAA,EAAA,MAAA,EAAA,CAAA,sBAAA,EAAA,mBAAA,EAAA,oBAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAsClF,aAAa,EAAA,UAAA,EAAA,CAAA;kBApCzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,WACX,CAAC,sBAAsB,EAAE,GAAG,gBAAgB,CAAC,EAAA,QAAA,EAC5C,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA6BI,EAAA,eAAA,EAEG,uBAAuB,CAAC,MAAM,EAAA,MAAA,EAAA,CAAA,sFAAA,CAAA,EAAA;;;AC/CjD;;AAEG;;;;"}
@@ -1,329 +1,11 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, TemplateRef, input, linkedSignal, Directive, ElementRef, effect, contentChildren, viewChild, computed, output, signal, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
3
- import * as i1 from '@angular/common';
4
- import { CommonModule } from '@angular/common';
5
- import { LayoutSettingsService } from '@yuuvis/client-framework/common';
6
- import * as i2 from 'angular-split';
7
- import { SplitComponent, AngularSplitModule } from 'angular-split';
8
-
9
- class SplitAreaDirective {
10
- constructor() {
11
- this.template = inject((TemplateRef));
12
- this.size = input(...(ngDevMode ? [undefined, { debugName: "size" }] : []));
13
- this.minSize = input(...(ngDevMode ? [undefined, { debugName: "minSize" }] : []));
14
- this.maxSize = input(...(ngDevMode ? [undefined, { debugName: "maxSize" }] : []));
15
- this.panelClass = input(...(ngDevMode ? [undefined, { debugName: "panelClass" }] : []));
16
- this.visible = input(true, ...(ngDevMode ? [{ debugName: "visible" }] : []));
17
- this.lockSize = input(false, ...(ngDevMode ? [{ debugName: "lockSize" }] : []));
18
- this.areaProperties = linkedSignal(...(ngDevMode ? [{ debugName: "areaProperties", source: () => ({ size: this.size(), visible: this.visible(), lockSize: this.lockSize() }),
19
- computation: ({ size, visible, lockSize }) => ({ size, visible, lockSize }) }] : [{
20
- source: () => ({ size: this.size(), visible: this.visible(), lockSize: this.lockSize() }),
21
- computation: ({ size, visible, lockSize }) => ({ size, visible, lockSize })
22
- }]));
23
- }
24
- updateSettings(s) {
25
- this.areaProperties.set({
26
- size: s.size || this.size(),
27
- visible: s.visible !== undefined ? !!s.visible : this.visible(),
28
- lockSize: s.lockSize || this.lockSize()
29
- });
30
- }
31
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: SplitAreaDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
32
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.19", type: SplitAreaDirective, isStandalone: true, selector: "[yuvSplitArea]", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, minSize: { classPropertyName: "minSize", publicName: "minSize", isSignal: true, isRequired: false, transformFunction: null }, maxSize: { classPropertyName: "maxSize", publicName: "maxSize", isSignal: true, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null }, visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, lockSize: { classPropertyName: "lockSize", publicName: "lockSize", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
33
- }
34
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: SplitAreaDirective, decorators: [{
35
- type: Directive,
36
- args: [{
37
- selector: '[yuvSplitArea]'
38
- }]
39
- }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], minSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "minSize", required: false }] }], maxSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxSize", required: false }] }], panelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelClass", required: false }] }], visible: [{ type: i0.Input, args: [{ isSignal: true, alias: "visible", required: false }] }], lockSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "lockSize", required: false }] }] } });
40
-
41
- /**
42
- * Directive to add a cover overlay to a split area during dragging.
43
- * This is useful when the split area contains elements like iframes
44
- * that can capture drag events and interfere with the split view's
45
- * dragging functionality.
46
- * The overlay will be transparent and therefore not recognized by
47
- * the user, but will capture the drag events.
48
- */
49
- class SplitAreaCoverDirective {
50
- constructor() {
51
- this.#elRef = inject(ElementRef);
52
- this.yuvSplitAreaCover = input(false, ...(ngDevMode ? [{ debugName: "yuvSplitAreaCover" }] : []));
53
- this.#draggingEffect = effect(() => {
54
- this.#toggleCover(this.yuvSplitAreaCover());
55
- }, ...(ngDevMode ? [{ debugName: "#draggingEffect" }] : []));
56
- }
57
- #elRef;
58
- #draggingEffect;
59
- #coverElement;
60
- #toggleCover(active) {
61
- const el = this.#elRef.nativeElement;
62
- if (this.#coverElement) {
63
- el.style.position = 'initial';
64
- this.#coverElement.remove();
65
- this.#coverElement = undefined;
66
- }
67
- if (active) {
68
- el.style.position = 'relative';
69
- this.#coverElement = this.#createCoverElement();
70
- el.append(this.#coverElement);
71
- }
72
- }
73
- #createCoverElement() {
74
- const coverElement = document.createElement('div');
75
- coverElement.classList.add('yuv-split-area-cover');
76
- coverElement.style.position = 'absolute';
77
- coverElement.style.zIndex = '500';
78
- coverElement.style.inset = '0';
79
- return coverElement;
80
- }
81
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: SplitAreaCoverDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
82
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.19", type: SplitAreaCoverDirective, isStandalone: true, selector: "[yuvSplitAreaCover]", inputs: { yuvSplitAreaCover: { classPropertyName: "yuvSplitAreaCover", publicName: "yuvSplitAreaCover", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
83
- }
84
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: SplitAreaCoverDirective, decorators: [{
85
- type: Directive,
86
- args: [{
87
- selector: '[yuvSplitAreaCover]'
88
- }]
89
- }], propDecorators: { yuvSplitAreaCover: [{ type: i0.Input, args: [{ isSignal: true, alias: "yuvSplitAreaCover", required: false }] }] } });
1
+ export * from '@yuuvis/client-components/split-view';
90
2
 
91
3
  /**
92
- * Component for creating a split view with resizable areas.
93
- *
94
- * Each area is defined using the `yuvSplitArea` directive on an `ng-template`.
95
- * Areas can be resized by dragging the gutter between them.
96
- *
97
- * ### Basic usage
98
- * ```html
99
- * <yuv-split-view>
100
- * <ng-template yuvSplitArea [size]="20">Aside</ng-template>
101
- * <ng-template yuvSplitArea [size]="80">Main</ng-template>
102
- * </yuv-split-view>
103
- * ```
104
- *
105
- * ### Collapsible areas
106
- * Areas can be shown, hidden, or toggled programmatically. Use a template
107
- * reference variable to call the visibility methods from the template:
108
- *
109
- * ```html
110
- * <yuv-split-view #sv>
111
- * <ng-template yuvSplitArea [size]="25">
112
- * <button (click)="sv.hideArea(0)">Collapse</button>
113
- * Left pane
114
- * </ng-template>
115
- * <ng-template yuvSplitArea [size]="75">
116
- * <button (click)="sv.showArea(0)">Expand left</button>
117
- * Main pane
118
- * </ng-template>
119
- * </yuv-split-view>
120
- * ```
121
- *
122
- * ### Persisting layout state
123
- * Set `layoutSettingsID` to persist area sizes and visibility to
124
- * localStorage. The saved state is automatically restored on init.
125
- *
126
- * ```html
127
- * <yuv-split-view [layoutSettingsID]="'my-layout'">
128
- * ...
129
- * </yuv-split-view>
130
- * ```
4
+ * @deprecated Import from `@yuuvis/client-components/split-view` instead.
5
+ * This entry point is a backward-compatibility shim and will be removed in a future release.
131
6
  */
132
- class SplitViewComponent {
133
- constructor() {
134
- this.#layoutSettings = inject(LayoutSettingsService);
135
- this.splitAreas = contentChildren(SplitAreaDirective, ...(ngDevMode ? [{ debugName: "splitAreas" }] : []));
136
- this.asSplitComponent = viewChild.required(SplitComponent);
137
- this.splitAreaSizes = [];
138
- /**
139
- * The split views direction. Could be 'horizontal' or 'vertical'. Defaults to 'horizontal'.
140
- */
141
- this.direction = input('horizontal', ...(ngDevMode ? [{ debugName: "direction" }] : []));
142
- this.isVertical = computed(() => this.direction() === 'vertical', ...(ngDevMode ? [{ debugName: "isVertical" }] : []));
143
- this.isHorizontal = computed(() => this.direction() === 'horizontal', ...(ngDevMode ? [{ debugName: "isHorizontal" }] : []));
144
- /**
145
- * Size of the gutter in Pixel (defaults to 16).
146
- */
147
- this.gutterSize = input(16, ...(ngDevMode ? [{ debugName: "gutterSize" }] : []));
148
- /**
149
- * If true, the gutter can only be moved in steps of 1%.
150
- */
151
- this.restrictMove = input(false, ...(ngDevMode ? [{ debugName: "restrictMove" }] : []));
152
- /**
153
- * Disable the dragging feature (remove cursor/image on gutters).
154
- */
155
- this.disabledInput = input(false, ...(ngDevMode ? [{ debugName: "disabledInput", alias: 'disabled' }] : [{ alias: 'disabled' }]));
156
- this.disabled = linkedSignal(() => this.disabledInput(), ...(ngDevMode ? [{ debugName: "disabled" }] : []));
157
- /**
158
- * Layout settings are the state of the split view that could be persisted.
159
- * Setting a `layoutSettingsID` will save the current state (split area sizes etc.)
160
- * to the local storage. If the component is created, it will load those settings and
161
- * re-apply them.
162
- */
163
- this.layoutSettingsID = input(...(ngDevMode ? [undefined, { debugName: "layoutSettingsID" }] : []));
164
- /**
165
- * Emitted when the state (split area sizes etc.) of the split view changed.
166
- */
167
- this.layoutSettingsChange = output();
168
- /**
169
- * Emitted when dragging the split gutter starts
170
- */
171
- this.dragStart = output();
172
- /**
173
- * Emitted when dragging the split gutter ends
174
- */
175
- this.dragEnd = output();
176
- /**
177
- * Emitted when the split gutter is clicked.
178
- */
179
- this.gutterClick = output();
180
- /**
181
- * Emitted when the split gutter is double clicked (you may also want to
182
- * set a different click duration indicating a double click). This could be
183
- * set using the `gutterDblClickDuration` to a value in milliseconds (default is 400ms)
184
- */
185
- this.gutterDblClick = output();
186
- this.dragging = signal(false, ...(ngDevMode ? [{ debugName: "dragging" }] : []));
187
- }
188
- #layoutSettings;
189
- onDragStart(e) {
190
- this.dragging.set(true);
191
- this.dragStart.emit(e);
192
- }
193
- onDragEnd(e) {
194
- this.dragging.set(false);
195
- this.splitAreas().forEach((splitArea, index) => {
196
- splitArea.areaProperties.update((s) => ({ ...s, size: e.sizes[index] }));
197
- });
198
- this.#updateLayoutSettings(e.sizes);
199
- this.dragEnd.emit(e);
200
- }
201
- /**
202
- * Show a previously hidden split area, restoring it to its last known size.
203
- *
204
- * ```html
205
- * <button (click)="sv.showArea(0)">Show left pane</button>
206
- * ```
207
- * @param index Zero-based index of the split area to show
208
- */
209
- showArea(index) {
210
- this.splitAreas()[index].areaProperties.update((s) => ({ ...s, visible: true }));
211
- }
212
- /**
213
- * Hide a split area by collapsing it to zero width/height. The adjacent
214
- * areas will expand to fill the freed space.
215
- *
216
- * ```html
217
- * <button (click)="sv.hideArea(0)">Hide left pane</button>
218
- * ```
219
- * @param index Zero-based index of the split area to hide
220
- */
221
- hideArea(index) {
222
- this.splitAreas()[index].areaProperties.update((s) => ({ ...s, visible: false }));
223
- }
224
- /**
225
- * Toggle the visibility of a split area. If the area is currently visible
226
- * it will be collapsed; if it is hidden it will be restored.
227
- *
228
- * ```html
229
- * <button (click)="sv.toggleArea(0)">Toggle left pane</button>
230
- * ```
231
- * @param index Zero-based index of the split area to toggle
232
- */
233
- toggleArea(index) {
234
- this.splitAreas()[index].areaProperties.update((s) => ({ ...s, visible: !s.visible }));
235
- }
236
- /**
237
- * Returns whether a split area is currently visible. Useful for
238
- * conditionally rendering expand/collapse buttons in the template.
239
- *
240
- * ```html
241
- * @if (!sv.isAreaVisible(0)) {
242
- * <button (click)="sv.showArea(0)">Expand left</button>
243
- * }
244
- * ```
245
- * @param index Zero-based index of the split area to check
246
- * @returns `true` if the area is visible, `false` if hidden
247
- */
248
- isAreaVisible(index) {
249
- return this.splitAreas()[index].areaProperties().visible;
250
- }
251
- /** @deprecated Use `showArea()` / `hideArea()` instead */
252
- splitAreaSetVisibility(index, visible) {
253
- this.splitAreas()[index].areaProperties.update((s) => ({ ...s, visible }));
254
- }
255
- /** @deprecated Use `toggleArea()` instead */
256
- splitAreaToggleVisibility(index) {
257
- this.splitAreas()[index].areaProperties.update((s) => ({ ...s, visible: !s.visible }));
258
- }
259
- #updateLayoutSettings(sizes) {
260
- this.splitAreaSizes = sizes;
261
- const layoutSettings = {
262
- disabled: this.disabled(),
263
- areas: this.splitAreas().map((a, idx) => ({
264
- visible: a.visible(),
265
- size: sizes[idx]
266
- }))
267
- };
268
- this.layoutSettingsChange.emit(layoutSettings);
269
- // save layout settings if persistence is enabled
270
- const lsid = this.layoutSettingsID();
271
- if (lsid) {
272
- this.#layoutSettings.saveSettings(lsid, layoutSettings);
273
- }
274
- }
275
- /**
276
- * Programmatically apply layout settings (area sizes, visibility, disabled state).
277
- * This is called automatically on init when `layoutSettingsID` is set, but can
278
- * also be used to restore a specific layout configuration at any time.
279
- * @param settings The layout settings to apply
280
- */
281
- applyLayoutSettings(settings) {
282
- if (!this.#isLayoutSettingsObject(settings))
283
- return;
284
- this.disabled.set(!!settings.disabled);
285
- this.splitAreaSizes = settings.areas.map((a) => a.size);
286
- settings.areas.forEach((a, index) => {
287
- this.splitAreas()[index].updateSettings(a);
288
- });
289
- }
290
- #isLayoutSettingsObject(v) {
291
- return v && 'disabled' in v && 'areas' in v;
292
- }
293
- ngAfterViewInit() {
294
- // try to load layout settings if persistence is enabled
295
- const lsid = this.layoutSettingsID();
296
- if (lsid) {
297
- this.applyLayoutSettings(this.#layoutSettings.getSettings(lsid));
298
- }
299
- }
300
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: SplitViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
301
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: SplitViewComponent, isStandalone: true, selector: "yuv-split-view", inputs: { direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, gutterSize: { classPropertyName: "gutterSize", publicName: "gutterSize", isSignal: true, isRequired: false, transformFunction: null }, restrictMove: { classPropertyName: "restrictMove", publicName: "restrictMove", isSignal: true, isRequired: false, transformFunction: null }, disabledInput: { classPropertyName: "disabledInput", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, layoutSettingsID: { classPropertyName: "layoutSettingsID", publicName: "layoutSettingsID", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { layoutSettingsChange: "layoutSettingsChange", dragStart: "dragStart", dragEnd: "dragEnd", gutterClick: "gutterClick", gutterDblClick: "gutterDblClick" }, host: { attributes: { "attr.data-gutter-size": "gutterSize()", "class.dragging": "dragging()" } }, queries: [{ propertyName: "splitAreas", predicate: SplitAreaDirective, isSignal: true }], viewQueries: [{ propertyName: "asSplitComponent", first: true, predicate: SplitComponent, descendants: true, isSignal: true }], ngImport: i0, template: "<as-split\n [direction]=\"direction()\"\n [unit]=\"'percent'\"\n [gutterSize]=\"gutterSize()\"\n [gutterStep]=\"1\"\n [restrictMove]=\"restrictMove()\"\n [useTransition]=\"false\"\n [disabled]=\"disabled()\"\n (dragEnd)=\"onDragEnd($event)\"\n (dragStart)=\"onDragStart($event)\"\n (gutterDblClick)=\"gutterDblClick.emit($event)\"\n (gutterClick)=\"gutterClick.emit($event)\"\n>\n @if (gutterSize() === 1) {\n <div *asSplitGutter=\"let isDragged = isDragged\" class=\"shade-gutter\" [class.dragged]=\"isDragged\">\n <div class=\"shade-gutter-icon\" [class.vertical]=\"isVertical()\" [class.horizontal]=\"isHorizontal()\"></div>\n </div>\n } @else {\n <div *asSplitGutter class=\"split-gutter\">\n <div asSplitGutterDragHandle class=\"split-gutter-handle\" [class.vertical]=\"isVertical()\" [class.horizontal]=\"isHorizontal()\"></div>\n </div>\n }\n\n @for (a of splitAreas(); track a; let i = $index) {\n <as-split-area\n [yuvSplitAreaCover]=\"dragging()\"\n class=\"yuv-split-area {{ a.panelClass() }}\"\n [maxSize]=\"a.maxSize()\"\n [minSize]=\"a.minSize()\"\n [lockSize]=\"a.areaProperties().lockSize\"\n [size]=\"a.areaProperties().size\"\n [visible]=\"a.areaProperties().visible\"\n ><ng-template [ngTemplateOutlet]=\"a.template\"></ng-template\n ></as-split-area>\n }\n</as-split>\n", styles: [":host{--_split-gutter-background-color: var(--split-gutter-background-color, transparent);--_split-gutter-handle-border-radius: var(--split-gutter-handle-border-radius, 2px);--_split-gutter-handle-width: var(--split-gutter-handle-width, 2px);--_split-gutter-handle-height: var(--split-gutter-handle-height, var(--ymt-spacing-3xl));--_split-gutter-shade-background: var(--split-gutter-shade-background, var(--ymt-outline-variant));--_split-gutter-shade-hover-background: var(--split-gutter-shade-hover-background, currentColor);--_split-gutter-shade-size: var(--split-gutter-shade-size, 16px);overflow:hidden}:host as-split{--as-gutter-background-color: var(--_split-gutter-background-color)}:host .split-gutter{width:100%;height:100%}:host .split-gutter .split-gutter-handle{width:100%;height:100%;display:flex;align-items:center;justify-content:center}:host .split-gutter .split-gutter-handle:after{content:\"\";transition:background-color .3s ease-in-out;background-color:rgb(from var(--ymt-text-color) r g b/.2);display:block;width:var(--_split-gutter-handle-width);height:var(--_split-gutter-handle-height);border-radius:var(--_split-gutter-handle-border-radius)}:host .split-gutter .split-gutter-handle.vertical:after{width:var(--_split-gutter-handle-height);height:var(--_split-gutter-handle-width)}:host .split-gutter:hover .split-gutter-handle:after{background-color:rgb(from var(--ymt-text-color) r g b/.9)}:host .shade-gutter{width:100%;height:100%;background-color:var(--_split-gutter-shade-background);position:relative}:host .shade-gutter-icon{height:100%;width:100%;background-color:var(--_split-gutter-shade-hover-background);transition:opacity .3s;opacity:0;position:absolute;z-index:500}.dragged :host .shade-gutter-icon,:host .shade-gutter-icon:hover{opacity:.1}:host .shade-gutter-icon.horizontal{width:calc(var(--_split-gutter-shade-size) + 1px);inset-inline-start:calc(var(--_split-gutter-shade-size) / -2);inset-inline-end:var(--_split-gutter-shade-size)}:host .shade-gutter-icon.vertical{height:calc(var(--_split-gutter-shade-size) + 1px);inset-block-start:calc(var(--_split-gutter-shade-size) / -2);inset-block-end:var(--_split-gutter-shade-size)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AngularSplitModule }, { kind: "component", type: i2.SplitComponent, selector: "as-split", inputs: ["gutterSize", "gutterStep", "disabled", "gutterClickDeltaPx", "direction", "dir", "unit", "gutterAriaLabel", "restrictMove", "useTransition", "gutterDblClickDuration"], outputs: ["gutterClick", "gutterDblClick", "dragStart", "dragEnd", "transitionEnd"], exportAs: ["asSplit"] }, { kind: "component", type: i2.SplitAreaComponent, selector: "as-split-area", inputs: ["size", "minSize", "maxSize", "lockSize", "visible"], exportAs: ["asSplitArea"] }, { kind: "directive", type: i2.SplitGutterDirective, selector: "[asSplitGutter]" }, { kind: "directive", type: i2.SplitGutterDragHandleDirective, selector: "[asSplitGutterDragHandle]" }, { kind: "directive", type: SplitAreaCoverDirective, selector: "[yuvSplitAreaCover]", inputs: ["yuvSplitAreaCover"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
302
- }
303
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: SplitViewComponent, decorators: [{
304
- type: Component,
305
- args: [{ selector: 'yuv-split-view', imports: [CommonModule, AngularSplitModule, SplitAreaCoverDirective], changeDetection: ChangeDetectionStrategy.OnPush, host: {
306
- 'attr.data-gutter-size': 'gutterSize()',
307
- 'class.dragging': 'dragging()'
308
- }, template: "<as-split\n [direction]=\"direction()\"\n [unit]=\"'percent'\"\n [gutterSize]=\"gutterSize()\"\n [gutterStep]=\"1\"\n [restrictMove]=\"restrictMove()\"\n [useTransition]=\"false\"\n [disabled]=\"disabled()\"\n (dragEnd)=\"onDragEnd($event)\"\n (dragStart)=\"onDragStart($event)\"\n (gutterDblClick)=\"gutterDblClick.emit($event)\"\n (gutterClick)=\"gutterClick.emit($event)\"\n>\n @if (gutterSize() === 1) {\n <div *asSplitGutter=\"let isDragged = isDragged\" class=\"shade-gutter\" [class.dragged]=\"isDragged\">\n <div class=\"shade-gutter-icon\" [class.vertical]=\"isVertical()\" [class.horizontal]=\"isHorizontal()\"></div>\n </div>\n } @else {\n <div *asSplitGutter class=\"split-gutter\">\n <div asSplitGutterDragHandle class=\"split-gutter-handle\" [class.vertical]=\"isVertical()\" [class.horizontal]=\"isHorizontal()\"></div>\n </div>\n }\n\n @for (a of splitAreas(); track a; let i = $index) {\n <as-split-area\n [yuvSplitAreaCover]=\"dragging()\"\n class=\"yuv-split-area {{ a.panelClass() }}\"\n [maxSize]=\"a.maxSize()\"\n [minSize]=\"a.minSize()\"\n [lockSize]=\"a.areaProperties().lockSize\"\n [size]=\"a.areaProperties().size\"\n [visible]=\"a.areaProperties().visible\"\n ><ng-template [ngTemplateOutlet]=\"a.template\"></ng-template\n ></as-split-area>\n }\n</as-split>\n", styles: [":host{--_split-gutter-background-color: var(--split-gutter-background-color, transparent);--_split-gutter-handle-border-radius: var(--split-gutter-handle-border-radius, 2px);--_split-gutter-handle-width: var(--split-gutter-handle-width, 2px);--_split-gutter-handle-height: var(--split-gutter-handle-height, var(--ymt-spacing-3xl));--_split-gutter-shade-background: var(--split-gutter-shade-background, var(--ymt-outline-variant));--_split-gutter-shade-hover-background: var(--split-gutter-shade-hover-background, currentColor);--_split-gutter-shade-size: var(--split-gutter-shade-size, 16px);overflow:hidden}:host as-split{--as-gutter-background-color: var(--_split-gutter-background-color)}:host .split-gutter{width:100%;height:100%}:host .split-gutter .split-gutter-handle{width:100%;height:100%;display:flex;align-items:center;justify-content:center}:host .split-gutter .split-gutter-handle:after{content:\"\";transition:background-color .3s ease-in-out;background-color:rgb(from var(--ymt-text-color) r g b/.2);display:block;width:var(--_split-gutter-handle-width);height:var(--_split-gutter-handle-height);border-radius:var(--_split-gutter-handle-border-radius)}:host .split-gutter .split-gutter-handle.vertical:after{width:var(--_split-gutter-handle-height);height:var(--_split-gutter-handle-width)}:host .split-gutter:hover .split-gutter-handle:after{background-color:rgb(from var(--ymt-text-color) r g b/.9)}:host .shade-gutter{width:100%;height:100%;background-color:var(--_split-gutter-shade-background);position:relative}:host .shade-gutter-icon{height:100%;width:100%;background-color:var(--_split-gutter-shade-hover-background);transition:opacity .3s;opacity:0;position:absolute;z-index:500}.dragged :host .shade-gutter-icon,:host .shade-gutter-icon:hover{opacity:.1}:host .shade-gutter-icon.horizontal{width:calc(var(--_split-gutter-shade-size) + 1px);inset-inline-start:calc(var(--_split-gutter-shade-size) / -2);inset-inline-end:var(--_split-gutter-shade-size)}:host .shade-gutter-icon.vertical{height:calc(var(--_split-gutter-shade-size) + 1px);inset-block-start:calc(var(--_split-gutter-shade-size) / -2);inset-block-end:var(--_split-gutter-shade-size)}\n"] }]
309
- }], propDecorators: { splitAreas: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => SplitAreaDirective), { isSignal: true }] }], asSplitComponent: [{ type: i0.ViewChild, args: [i0.forwardRef(() => SplitComponent), { isSignal: true }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], gutterSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "gutterSize", required: false }] }], restrictMove: [{ type: i0.Input, args: [{ isSignal: true, alias: "restrictMove", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], layoutSettingsID: [{ type: i0.Input, args: [{ isSignal: true, alias: "layoutSettingsID", required: false }] }], layoutSettingsChange: [{ type: i0.Output, args: ["layoutSettingsChange"] }], dragStart: [{ type: i0.Output, args: ["dragStart"] }], dragEnd: [{ type: i0.Output, args: ["dragEnd"] }], gutterClick: [{ type: i0.Output, args: ["gutterClick"] }], gutterDblClick: [{ type: i0.Output, args: ["gutterDblClick"] }] } });
310
-
311
- class YuvSplitViewModule {
312
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: YuvSplitViewModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
313
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.19", ngImport: i0, type: YuvSplitViewModule, imports: [SplitAreaDirective, SplitViewComponent], exports: [SplitAreaDirective, SplitViewComponent] }); }
314
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: YuvSplitViewModule, imports: [SplitViewComponent] }); }
315
- }
316
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: YuvSplitViewModule, decorators: [{
317
- type: NgModule,
318
- args: [{
319
- imports: [SplitAreaDirective, SplitViewComponent],
320
- exports: [SplitAreaDirective, SplitViewComponent]
321
- }]
322
- }] });
323
7
 
324
8
  /**
325
9
  * Generated bundle index. Do not edit.
326
10
  */
327
-
328
- export { SplitAreaDirective, SplitViewComponent, YuvSplitViewModule };
329
11
  //# sourceMappingURL=yuuvis-client-framework-split-view.mjs.map