@progress/kendo-angular-layout 17.0.0-develop.10 → 17.0.0-develop.11

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.
@@ -9,7 +9,7 @@ export const packageMetadata = {
9
9
  name: '@progress/kendo-angular-layout',
10
10
  productName: 'Kendo UI for Angular',
11
11
  productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],
12
- publishDate: 1729175986,
13
- version: '17.0.0-develop.10',
12
+ publishDate: 1729238832,
13
+ version: '17.0.0-develop.11',
14
14
  licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'
15
15
  };
@@ -5,7 +5,7 @@
5
5
  /* eslint-disable @typescript-eslint/no-explicit-any */
6
6
  import { ChangeDetectorRef, Component, ElementRef, Host, HostBinding, Input, Renderer2 } from '@angular/core';
7
7
  import { LocalizationService } from '@progress/kendo-angular-l10n';
8
- import { DraggableDirective, Keys } from '@progress/kendo-angular-common';
8
+ import { DraggableDirective, Keys, isObjectPresent, parseAttributes, removeHTMLAttributes, setHTMLAttributes } from '@progress/kendo-angular-common';
9
9
  import { SplitterService } from './splitter.service';
10
10
  import { Subscription, of } from 'rxjs';
11
11
  import { delay, filter, map, switchMap, takeUntil, tap } from 'rxjs/operators';
@@ -42,10 +42,12 @@ export class SplitterBarComponent {
42
42
  this.renderer = renderer;
43
43
  this.cdr = cdr;
44
44
  this.ariaRole = 'separator';
45
+ this.ariaLabel = 'Splitter pane';
45
46
  this.focused = false;
46
47
  this.orientation = 'horizontal';
47
48
  this.index = 0;
48
49
  this.subscriptions = new Subscription();
50
+ this.parsedAttributes = {};
49
51
  }
50
52
  get hostOrientation() {
51
53
  return this.orientation === 'horizontal' ? 'vertical' : 'horizontal';
@@ -72,6 +74,28 @@ export class SplitterBarComponent {
72
74
  get order() {
73
75
  return 2 * this.index + 1;
74
76
  }
77
+ set htmlAttributes(attributes) {
78
+ if (isObjectPresent(this.parsedAttributes)) {
79
+ removeHTMLAttributes(this.parsedAttributes, this.renderer, this.element.nativeElement);
80
+ }
81
+ this._htmlAttributes = attributes;
82
+ this.parsedAttributes = this.htmlAttributes ?
83
+ parseAttributes(this.htmlAttributes, this.defaultAttributes) :
84
+ this.htmlAttributes;
85
+ this.setHtmlAttributes();
86
+ }
87
+ get htmlAttributes() {
88
+ return this._htmlAttributes;
89
+ }
90
+ get defaultAttributes() {
91
+ return {
92
+ 'aria-orientation': this.hostOrientation,
93
+ role: this.ariaRole
94
+ };
95
+ }
96
+ get mutableAttributes() {
97
+ return { 'tabindex': this.tabIndex };
98
+ }
75
99
  ngOnInit() {
76
100
  let state;
77
101
  const listener = this.draggable.kendoPress.pipe(tap(stopPropagation), filter(() => this.splitterService.isDraggable(this.index)), tap(() => state = this.splitterService.dragState(this.index)), tap(() => this.splitterService.toggleContentOverlay(this.index, true)), switchMap(preventOnDblClick(this.draggable.kendoRelease)), switchMap(createMoveStream(this.draggable))).subscribe(({ pageX, pageY, originalX, originalY }) => {
@@ -218,9 +242,13 @@ export class SplitterBarComponent {
218
242
  this.splitterService.tryToggle(next);
219
243
  }
220
244
  }
245
+ setHtmlAttributes() {
246
+ const attributesToRender = { ...this.mutableAttributes, ...this.parsedAttributes };
247
+ setHTMLAttributes(attributesToRender, this.renderer, this.element.nativeElement);
248
+ }
221
249
  }
222
250
  SplitterBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SplitterBarComponent, deps: [{ token: i1.DraggableDirective, host: true }, { token: i2.LocalizationService }, { token: i3.SplitterService }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
223
- SplitterBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SplitterBarComponent, isStandalone: true, selector: "kendo-splitter-bar", inputs: { orientation: "orientation", index: "index" }, host: { properties: { "attr.role": "this.ariaRole", "class.k-focus": "this.focused", "attr.aria-orientation": "this.hostOrientation", "attr.tabindex": "this.tabIndex", "class": "this.hostClasses", "style.-ms-flex-order": "this.order", "style.order": "this.order" } }, ngImport: i0, template: `
251
+ SplitterBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SplitterBarComponent, isStandalone: true, selector: "kendo-splitter-bar", inputs: { orientation: "orientation", index: "index", htmlAttributes: "htmlAttributes" }, host: { properties: { "attr.role": "this.ariaRole", "attr.aria-label": "this.ariaLabel", "class.k-focus": "this.focused", "attr.aria-orientation": "this.hostOrientation", "attr.tabindex": "this.tabIndex", "class": "this.hostClasses", "style.-ms-flex-order": "this.order", "style.order": "this.order" } }, ngImport: i0, template: `
224
252
  <div *ngIf="shouldShowIcon('prev')" class="k-collapse-prev" (click)="togglePrevious()">
225
253
  <kendo-icon-wrapper
226
254
  size="xsmall"
@@ -266,6 +294,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
266
294
  }] }, { type: i2.LocalizationService }, { type: i3.SplitterService }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { ariaRole: [{
267
295
  type: HostBinding,
268
296
  args: ['attr.role']
297
+ }], ariaLabel: [{
298
+ type: HostBinding,
299
+ args: ['attr.aria-label']
269
300
  }], focused: [{
270
301
  type: HostBinding,
271
302
  args: ['class.k-focus']
@@ -288,4 +319,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
288
319
  type: Input
289
320
  }], index: [{
290
321
  type: Input
322
+ }], htmlAttributes: [{
323
+ type: Input
291
324
  }] } });
@@ -4,19 +4,18 @@
4
4
  *-------------------------------------------------------------------------------------------*/
5
5
  import { ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, Renderer2, Input, Output } from '@angular/core';
6
6
  import { NgIf } from '@angular/common';
7
+ import { SplitterService } from './splitter.service';
7
8
  import * as i0 from "@angular/core";
9
+ import * as i1 from "./splitter.service";
8
10
  /**
9
11
  * Represents the pane component of the Splitter.
10
12
  */
11
13
  export class SplitterPaneComponent {
12
- constructor(element, renderer, cdr) {
14
+ constructor(element, renderer, cdr, splitterService) {
13
15
  this.element = element;
14
16
  this.renderer = renderer;
15
17
  this.cdr = cdr;
16
- /**
17
- * The value of the aria-label attribute of the auxiliary separator.
18
- */
19
- this.separatorLabel = 'Splitter pane';
18
+ this.splitterService = splitterService;
20
19
  /**
21
20
  * Specifies if the user is allowed to resize the pane and provide space for other panes.
22
21
  */
@@ -94,6 +93,21 @@ export class SplitterPaneComponent {
94
93
  get size() {
95
94
  return this._size;
96
95
  }
96
+ /**
97
+ * Sets the HTML attributes of the splitter bar.
98
+ * The property accepts string key-value based pairs.
99
+ * Attributes which are essential for certain functionalities cannot be changed.
100
+ */
101
+ set splitterBarAttributes(attributes) {
102
+ this._splitterBarAttributes = attributes;
103
+ const splitterBar = this.splitterService.getPaneSplitterBar(this);
104
+ if (splitterBar) {
105
+ splitterBar.htmlAttributes = attributes;
106
+ }
107
+ }
108
+ get splitterBarAttributes() {
109
+ return this._splitterBarAttributes;
110
+ }
97
111
  /**
98
112
  * @hidden
99
113
  */
@@ -162,8 +176,8 @@ export class SplitterPaneComponent {
162
176
  this.renderer.setStyle(element, 'order', this.order);
163
177
  }
164
178
  }
165
- SplitterPaneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SplitterPaneComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
166
- SplitterPaneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SplitterPaneComponent, isStandalone: true, selector: "kendo-splitter-pane", inputs: { order: "order", size: "size", separatorLabel: "separatorLabel", min: "min", max: "max", resizable: "resizable", collapsible: "collapsible", scrollable: "scrollable", collapsed: "collapsed", orientation: "orientation", containsSplitter: "containsSplitter", overlayContent: "overlayContent" }, outputs: { sizeChange: "sizeChange", collapsedChange: "collapsedChange" }, host: { properties: { "attr.role": "this.ariaRole", "class.k-pane": "this.hostClass", "class.k-pane-static": "this.staticPaneClass", "class.k-scrollable": "this.scrollablePaneClass" } }, exportAs: ["kendoSplitterPane"], ngImport: i0, template: `
179
+ SplitterPaneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SplitterPaneComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }, { token: i1.SplitterService }], target: i0.ɵɵFactoryTarget.Component });
180
+ SplitterPaneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SplitterPaneComponent, isStandalone: true, selector: "kendo-splitter-pane", inputs: { order: "order", size: "size", splitterBarAttributes: "splitterBarAttributes", splitterBarClass: "splitterBarClass", min: "min", max: "max", resizable: "resizable", collapsible: "collapsible", scrollable: "scrollable", collapsed: "collapsed", orientation: "orientation", containsSplitter: "containsSplitter", overlayContent: "overlayContent" }, outputs: { sizeChange: "sizeChange", collapsedChange: "collapsedChange" }, host: { properties: { "attr.role": "this.ariaRole", "class.k-pane": "this.hostClass", "class.k-pane-static": "this.staticPaneClass", "class.k-scrollable": "this.scrollablePaneClass" } }, exportAs: ["kendoSplitterPane"], ngImport: i0, template: `
167
181
  <ng-container *ngIf="!collapsed"><ng-content></ng-content></ng-container>
168
182
  <div *ngIf="overlayContent" class="k-splitter-overlay k-overlay"></div>
169
183
  `, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
@@ -179,11 +193,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
179
193
  standalone: true,
180
194
  imports: [NgIf]
181
195
  }]
182
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { order: [{
196
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i1.SplitterService }]; }, propDecorators: { order: [{
183
197
  type: Input
184
198
  }], size: [{
185
199
  type: Input
186
- }], separatorLabel: [{
200
+ }], splitterBarAttributes: [{
201
+ type: Input
202
+ }], splitterBarClass: [{
187
203
  type: Input
188
204
  }], min: [{
189
205
  type: Input
@@ -12,7 +12,7 @@ import { SplitterBarComponent } from './splitter-bar.component';
12
12
  import { SplitterService } from './splitter.service';
13
13
  import { isPresent } from '../common/util';
14
14
  import { DraggableDirective } from '@progress/kendo-angular-common';
15
- import { NgFor, NgIf, NgStyle } from '@angular/common';
15
+ import { NgClass, NgFor, NgIf, NgStyle } from '@angular/common';
16
16
  import * as i0 from "@angular/core";
17
17
  import * as i1 from "./splitter.service";
18
18
  import * as i2 from "@progress/kendo-angular-l10n";
@@ -97,6 +97,7 @@ export class SplitterComponent {
97
97
  return this.direction;
98
98
  }
99
99
  set splitbars(splitbars) {
100
+ this.splitterService.splitterBars = splitbars ? splitbars.toArray() : [];
100
101
  if (!isPresent(splitbars) || !isPresent(this.panes)) {
101
102
  return;
102
103
  }
@@ -109,9 +110,9 @@ export class SplitterComponent {
109
110
  .sort((a, b) => a.order - b.order);
110
111
  const elements = components.map(component => component.element.nativeElement);
111
112
  panesArray.forEach((pane, i) => {
112
- if (splitBarsArray[i] && pane.separatorLabel) {
113
- const splitbar = splitBarsArray[i].element.nativeElement;
114
- this.renderer.setAttribute(splitbar, 'aria-label', pane.separatorLabel);
113
+ const splitbar = splitBarsArray[i];
114
+ if (splitbar && pane.splitterBarAttributes) {
115
+ splitbar.htmlAttributes = pane.splitterBarAttributes;
115
116
  }
116
117
  });
117
118
  elements.forEach(element => this.renderer.appendChild(this.element.nativeElement, element));
@@ -161,7 +162,7 @@ export class SplitterComponent {
161
162
  }
162
163
  }
163
164
  SplitterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SplitterComponent, deps: [{ token: i0.ElementRef }, { token: i1.SplitterService }, { token: i2.LocalizationService }, { token: i0.Renderer2 }, { token: SplitterPaneComponent, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Component });
164
- SplitterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SplitterComponent, isStandalone: true, selector: "kendo-splitter", inputs: { orientation: "orientation", splitbarWidth: "splitbarWidth", resizeStep: "resizeStep" }, outputs: { layoutChange: "layoutChange" }, host: { properties: { "class.k-splitter": "this.hostClasses", "class.k-splitter-flex": "this.hostClasses", "class.k-splitter-horizontal": "this.horizontalHostClasses", "class.k-splitter-vertical": "this.verticalHostClasses", "attr.dir": "this.dir" } }, providers: [
165
+ SplitterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SplitterComponent, isStandalone: true, selector: "kendo-splitter", inputs: { orientation: "orientation", splitbarWidth: "splitbarWidth", resizeStep: "resizeStep", splitterBarClass: "splitterBarClass" }, outputs: { layoutChange: "layoutChange" }, host: { properties: { "class.k-splitter": "this.hostClasses", "class.k-splitter-flex": "this.hostClasses", "class.k-splitter-horizontal": "this.horizontalHostClasses", "class.k-splitter-vertical": "this.verticalHostClasses", "attr.dir": "this.dir" } }, providers: [
165
166
  SplitterService,
166
167
  LocalizationService,
167
168
  {
@@ -180,13 +181,14 @@ SplitterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
180
181
  *ngIf="!last"
181
182
  [index]="index"
182
183
  [orientation]="orientation"
184
+ [ngClass]="pane.splitterBarClass || splitterBarClass"
183
185
  [ngStyle]="{
184
186
  width: orientation === 'horizontal' ? splitbarWidth + 'px' : undefined,
185
187
  height: orientation === 'vertical' ? splitbarWidth + 'px' : undefined
186
188
  }">
187
189
  </kendo-splitter-bar>
188
190
  </ng-container>
189
- `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SplitterBarComponent, selector: "kendo-splitter-bar", inputs: ["orientation", "index"] }, { kind: "directive", type: DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
191
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SplitterBarComponent, selector: "kendo-splitter-bar", inputs: ["orientation", "index", "htmlAttributes"] }, { kind: "directive", type: DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
190
192
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SplitterComponent, decorators: [{
191
193
  type: Component,
192
194
  args: [{
@@ -212,6 +214,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
212
214
  *ngIf="!last"
213
215
  [index]="index"
214
216
  [orientation]="orientation"
217
+ [ngClass]="pane.splitterBarClass || splitterBarClass"
215
218
  [ngStyle]="{
216
219
  width: orientation === 'horizontal' ? splitbarWidth + 'px' : undefined,
217
220
  height: orientation === 'vertical' ? splitbarWidth + 'px' : undefined
@@ -220,7 +223,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
220
223
  </ng-container>
221
224
  `,
222
225
  standalone: true,
223
- imports: [NgFor, NgIf, SplitterBarComponent, DraggableDirective, NgStyle]
226
+ imports: [NgFor, NgIf, SplitterBarComponent, DraggableDirective, NgStyle, NgClass]
224
227
  }]
225
228
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.SplitterService }, { type: i2.LocalizationService }, { type: i0.Renderer2 }, { type: i3.SplitterPaneComponent, decorators: [{
226
229
  type: Optional
@@ -235,6 +238,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
235
238
  type: Input
236
239
  }], resizeStep: [{
237
240
  type: Input
241
+ }], splitterBarClass: [{
242
+ type: Input
238
243
  }], layoutChange: [{
239
244
  type: Output
240
245
  }], hostClasses: [{
@@ -122,6 +122,22 @@ export class SplitterService {
122
122
  }
123
123
  return this.panes[index];
124
124
  }
125
+ paneByIndex(pane) {
126
+ if (!this.panes) {
127
+ return -1;
128
+ }
129
+ return this.panes.findIndex(splitterPane => splitterPane === pane);
130
+ }
131
+ getPaneSplitterBar(pane) {
132
+ if (!this.splitterBars) {
133
+ return;
134
+ }
135
+ const paneIndex = this.paneByIndex(pane);
136
+ if (paneIndex < 0 || paneIndex >= this.splitterBars.length) {
137
+ return null;
138
+ }
139
+ return this.splitterBars[paneIndex];
140
+ }
125
141
  configure({ panes, orientation, containerSize, direction }) {
126
142
  this.panes = panes;
127
143
  this.panes.forEach((pane, index) => {