@skyux/tabs 5.5.0 → 5.6.0
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/bundles/skyux-tabs.umd.js +510 -510
- package/documentation.json +111 -111
- package/esm2015/lib/modules/sectioned-form/sectioned-form-section.component.js +2 -2
- package/esm2015/lib/modules/sectioned-form/sectioned-form-section.component.js.map +1 -1
- package/esm2015/lib/modules/sectioned-form/sectioned-form.component.js +3 -3
- package/esm2015/lib/modules/sectioned-form/sectioned-form.component.js.map +1 -1
- package/esm2015/lib/modules/sectioned-form/sectioned-form.module.js +4 -4
- package/esm2015/lib/modules/sectioned-form/sectioned-form.module.js.map +1 -1
- package/esm2015/lib/modules/shared/sky-tabs-resources.module.js +1 -1
- package/esm2015/lib/modules/shared/sky-tabs-resources.module.js.map +1 -1
- package/esm2015/lib/modules/tabs/tab.component.js.map +1 -1
- package/esm2015/lib/modules/tabs/tabs.module.js.map +1 -1
- package/esm2015/lib/modules/tabs/tabset-nav-button.component.js +4 -4
- package/esm2015/lib/modules/tabs/tabset-nav-button.component.js.map +1 -1
- package/esm2015/lib/modules/tabs/tabset-permalink.service.js.map +1 -1
- package/esm2015/lib/modules/tabs/tabset.component.js +1 -1
- package/esm2015/lib/modules/tabs/tabset.component.js.map +1 -1
- package/esm2015/lib/modules/tabs/tabset.service.js.map +1 -1
- package/esm2015/lib/modules/vertical-tabset/vertical-tab-media-query.service.js.map +1 -1
- package/esm2015/lib/modules/vertical-tabset/vertical-tab.component.js +1 -1
- package/esm2015/lib/modules/vertical-tabset/vertical-tab.component.js.map +1 -1
- package/esm2015/lib/modules/vertical-tabset/vertical-tabset-adapter.service.js.map +1 -1
- package/esm2015/lib/modules/vertical-tabset/vertical-tabset-group.component.js +1 -1
- package/esm2015/lib/modules/vertical-tabset/vertical-tabset-group.component.js.map +1 -1
- package/esm2015/lib/modules/vertical-tabset/vertical-tabset.component.js +3 -3
- package/esm2015/lib/modules/vertical-tabset/vertical-tabset.component.js.map +1 -1
- package/esm2015/lib/modules/vertical-tabset/vertical-tabset.module.js +4 -4
- package/esm2015/lib/modules/vertical-tabset/vertical-tabset.module.js.map +1 -1
- package/esm2015/lib/modules/vertical-tabset/vertical-tabset.service.js +5 -5
- package/esm2015/lib/modules/vertical-tabset/vertical-tabset.service.js.map +1 -1
- package/esm2015/testing/tabs/tabset-fixture.js.map +1 -1
- package/fesm2015/skyux-tabs-testing.js.map +1 -1
- package/fesm2015/skyux-tabs.js +472 -472
- package/fesm2015/skyux-tabs.js.map +1 -1
- package/lib/modules/sectioned-form/sectioned-form-section.component.d.ts +2 -2
- package/lib/modules/sectioned-form/sectioned-form.component.d.ts +1 -1
- package/lib/modules/tabs/tabset.component.d.ts +2 -2
- package/lib/modules/vertical-tabset/vertical-tab.component.d.ts +1 -1
- package/lib/modules/vertical-tabset/vertical-tabset.component.d.ts +1 -1
- package/package.json +8 -8
package/fesm2015/skyux-tabs.js
CHANGED
|
@@ -1,25 +1,187 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { Injectable, EventEmitter, Component, ChangeDetectionStrategy, Input, Output, ViewChild, HostListener, NgModule, ContentChildren, ViewEncapsulation } from '@angular/core';
|
|
3
1
|
import * as i2 from '@angular/common';
|
|
4
2
|
import { CommonModule } from '@angular/common';
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
import { NgModule, Injectable, Component, ChangeDetectionStrategy, Input, ViewChild, HostListener, ContentChildren, EventEmitter, Output, ViewEncapsulation } from '@angular/core';
|
|
5
|
+
import { SkyCheckboxModule } from '@skyux/forms';
|
|
6
|
+
import * as i8 from '@skyux/theme';
|
|
7
|
+
import { SkyThemeModule } from '@skyux/theme';
|
|
8
8
|
import * as i1 from '@skyux/core';
|
|
9
9
|
import { SkyMediaBreakpoints, SkyMediaQueryService, SkyIdModule } from '@skyux/core';
|
|
10
10
|
import * as i4 from '@skyux/indicators';
|
|
11
11
|
import { SkyIconModule, SkyExpansionIndicatorModule, SkyStatusIndicatorModule } from '@skyux/indicators';
|
|
12
|
-
import * as i8 from '@skyux/theme';
|
|
13
|
-
import { SkyThemeModule } from '@skyux/theme';
|
|
14
12
|
import * as i3 from '@skyux/i18n';
|
|
15
13
|
import { getLibStringForLocale, SkyI18nModule, SKY_LIB_RESOURCES_PROVIDERS } from '@skyux/i18n';
|
|
14
|
+
import { BehaviorSubject, Subject, combineLatest, race, forkJoin } from 'rxjs';
|
|
15
|
+
import { takeUntil, take, distinctUntilChanged } from 'rxjs/operators';
|
|
16
16
|
import { skyAnimationSlide } from '@skyux/animations';
|
|
17
|
-
import {
|
|
17
|
+
import { trigger, transition, style, animate } from '@angular/animations';
|
|
18
18
|
import * as i1$1 from '@angular/router';
|
|
19
19
|
import { RouterModule } from '@angular/router';
|
|
20
20
|
import * as i4$1 from '@skyux/popovers';
|
|
21
21
|
import { SkyDropdownModule } from '@skyux/popovers';
|
|
22
22
|
|
|
23
|
+
/**
|
|
24
|
+
* NOTICE: DO NOT MODIFY THIS FILE!
|
|
25
|
+
* The contents of this file were automatically generated by
|
|
26
|
+
* the 'ng generate @skyux/i18n:lib-resources-module modules/shared/sky-tabs' schematic.
|
|
27
|
+
* To update this file, simply rerun the command.
|
|
28
|
+
*/
|
|
29
|
+
const RESOURCES = {
|
|
30
|
+
'EN-US': {
|
|
31
|
+
skyux_tab_add: { message: 'Add tab' },
|
|
32
|
+
skyux_tab_close: { message: 'Close {0} tab' },
|
|
33
|
+
skyux_tabs_navigator_next: { message: 'Next' },
|
|
34
|
+
skyux_tabs_navigator_previous: { message: 'Previous' },
|
|
35
|
+
skyux_tab_open: { message: 'Open tab' },
|
|
36
|
+
skyux_vertical_tabs_show_tabs_text: { message: 'Tab list' },
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
class SkyTabsResourcesProvider {
|
|
40
|
+
getString(localeInfo, name) {
|
|
41
|
+
return getLibStringForLocale(RESOURCES, localeInfo.locale, name);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Import into any component library module that needs to use resource strings.
|
|
46
|
+
*/
|
|
47
|
+
class SkyTabsResourcesModule {
|
|
48
|
+
}
|
|
49
|
+
SkyTabsResourcesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyTabsResourcesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
50
|
+
SkyTabsResourcesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyTabsResourcesModule, exports: [SkyI18nModule] });
|
|
51
|
+
SkyTabsResourcesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyTabsResourcesModule, providers: [
|
|
52
|
+
{
|
|
53
|
+
provide: SKY_LIB_RESOURCES_PROVIDERS,
|
|
54
|
+
useClass: SkyTabsResourcesProvider,
|
|
55
|
+
multi: true,
|
|
56
|
+
},
|
|
57
|
+
], imports: [SkyI18nModule] });
|
|
58
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyTabsResourcesModule, decorators: [{
|
|
59
|
+
type: NgModule,
|
|
60
|
+
args: [{
|
|
61
|
+
exports: [SkyI18nModule],
|
|
62
|
+
providers: [
|
|
63
|
+
{
|
|
64
|
+
provide: SKY_LIB_RESOURCES_PROVIDERS,
|
|
65
|
+
useClass: SkyTabsResourcesProvider,
|
|
66
|
+
multi: true,
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
}]
|
|
70
|
+
}] });
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* @internal
|
|
74
|
+
*/
|
|
75
|
+
class SkyVerticalTabMediaQueryService {
|
|
76
|
+
constructor() {
|
|
77
|
+
this.currentSubject = new BehaviorSubject(this.current);
|
|
78
|
+
this._current = SkyMediaBreakpoints.xs;
|
|
79
|
+
this.currentSubject.next(this._current);
|
|
80
|
+
}
|
|
81
|
+
get current() {
|
|
82
|
+
return this._current;
|
|
83
|
+
}
|
|
84
|
+
subscribe(listener) {
|
|
85
|
+
return this.currentSubject.subscribe({
|
|
86
|
+
next: (breakpoints) => {
|
|
87
|
+
listener(breakpoints);
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
setBreakpointForWidth(width) {
|
|
92
|
+
let breakpoint;
|
|
93
|
+
if (this.isWidthWithinBreakpiont(width, SkyMediaBreakpoints.xs)) {
|
|
94
|
+
breakpoint = SkyMediaBreakpoints.xs;
|
|
95
|
+
}
|
|
96
|
+
else if (this.isWidthWithinBreakpiont(width, SkyMediaBreakpoints.sm)) {
|
|
97
|
+
breakpoint = SkyMediaBreakpoints.sm;
|
|
98
|
+
}
|
|
99
|
+
else if (this.isWidthWithinBreakpiont(width, SkyMediaBreakpoints.md)) {
|
|
100
|
+
breakpoint = SkyMediaBreakpoints.md;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
breakpoint = SkyMediaBreakpoints.lg;
|
|
104
|
+
}
|
|
105
|
+
this._current = breakpoint;
|
|
106
|
+
this.currentSubject.next(this._current);
|
|
107
|
+
}
|
|
108
|
+
isWidthWithinBreakpiont(width, breakpoint) {
|
|
109
|
+
const xsBreakpointMaxPixels = 767;
|
|
110
|
+
const smBreakpointMinPixels = 768;
|
|
111
|
+
const smBreakpointMaxPixels = 991;
|
|
112
|
+
const mdBreakpointMinPixels = 992;
|
|
113
|
+
const mdBreakpointMaxPixels = 1199;
|
|
114
|
+
const lgBreakpointMinPixels = 1200;
|
|
115
|
+
switch (breakpoint) {
|
|
116
|
+
case SkyMediaBreakpoints.xs: {
|
|
117
|
+
return width <= xsBreakpointMaxPixels;
|
|
118
|
+
}
|
|
119
|
+
case SkyMediaBreakpoints.sm: {
|
|
120
|
+
return width >= smBreakpointMinPixels && width <= smBreakpointMaxPixels;
|
|
121
|
+
}
|
|
122
|
+
case SkyMediaBreakpoints.md: {
|
|
123
|
+
return width >= mdBreakpointMinPixels && width <= mdBreakpointMaxPixels;
|
|
124
|
+
}
|
|
125
|
+
default: {
|
|
126
|
+
return width >= lgBreakpointMinPixels;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
destroy() {
|
|
131
|
+
this.currentSubject.complete();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
SkyVerticalTabMediaQueryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyVerticalTabMediaQueryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
135
|
+
SkyVerticalTabMediaQueryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyVerticalTabMediaQueryService });
|
|
136
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyVerticalTabMediaQueryService, decorators: [{
|
|
137
|
+
type: Injectable
|
|
138
|
+
}], ctorParameters: function () { return []; } });
|
|
139
|
+
|
|
140
|
+
class SkyVerticalTabsetAdapterService {
|
|
141
|
+
constructor(rendererFactory) {
|
|
142
|
+
this.rendererFactory = rendererFactory;
|
|
143
|
+
this.renderer = this.rendererFactory.createRenderer(undefined, undefined);
|
|
144
|
+
}
|
|
145
|
+
getWidth(elementRef) {
|
|
146
|
+
return elementRef.nativeElement.clientWidth;
|
|
147
|
+
}
|
|
148
|
+
scrollToContentTop(element) {
|
|
149
|
+
element.nativeElement.scrollTop = 0;
|
|
150
|
+
}
|
|
151
|
+
setResponsiveClass(element, breakpoint) {
|
|
152
|
+
const nativeEl = element.nativeElement;
|
|
153
|
+
this.renderer.removeClass(nativeEl, 'sky-responsive-container-xs');
|
|
154
|
+
this.renderer.removeClass(nativeEl, 'sky-responsive-container-sm');
|
|
155
|
+
this.renderer.removeClass(nativeEl, 'sky-responsive-container-md');
|
|
156
|
+
this.renderer.removeClass(nativeEl, 'sky-responsive-container-lg');
|
|
157
|
+
let newClass;
|
|
158
|
+
switch (breakpoint) {
|
|
159
|
+
case SkyMediaBreakpoints.xs: {
|
|
160
|
+
newClass = 'sky-responsive-container-xs';
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
case SkyMediaBreakpoints.sm: {
|
|
164
|
+
newClass = 'sky-responsive-container-sm';
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
case SkyMediaBreakpoints.md: {
|
|
168
|
+
newClass = 'sky-responsive-container-md';
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
default: {
|
|
172
|
+
newClass = 'sky-responsive-container-lg';
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
this.renderer.addClass(nativeEl, newClass);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
SkyVerticalTabsetAdapterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyVerticalTabsetAdapterService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
180
|
+
SkyVerticalTabsetAdapterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyVerticalTabsetAdapterService });
|
|
181
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyVerticalTabsetAdapterService, decorators: [{
|
|
182
|
+
type: Injectable
|
|
183
|
+
}], ctorParameters: function () { return [{ type: i0.RendererFactory2 }]; } });
|
|
184
|
+
|
|
23
185
|
const VISIBLE_STATE = 'shown';
|
|
24
186
|
const HIDDEN_STATE = 'void';
|
|
25
187
|
/**
|
|
@@ -73,7 +235,7 @@ class SkyVerticalTabsetService {
|
|
|
73
235
|
}
|
|
74
236
|
destroyTab(tab) {
|
|
75
237
|
var _a;
|
|
76
|
-
|
|
238
|
+
const tabIndex = this.tabs.indexOf(tab);
|
|
77
239
|
if (tabIndex === -1) {
|
|
78
240
|
return;
|
|
79
241
|
}
|
|
@@ -93,7 +255,7 @@ class SkyVerticalTabsetService {
|
|
|
93
255
|
}
|
|
94
256
|
// Try selecting the next tab first, and if there's no next tab then
|
|
95
257
|
// try selecting the previous one.
|
|
96
|
-
|
|
258
|
+
const newActiveTab = this.tabs[tabIndex] || this.tabs[tabIndex - 1];
|
|
97
259
|
/*istanbul ignore else */
|
|
98
260
|
if (newActiveTab) {
|
|
99
261
|
newActiveTab.activateTab();
|
|
@@ -102,7 +264,7 @@ class SkyVerticalTabsetService {
|
|
|
102
264
|
}
|
|
103
265
|
activateTab(tab) {
|
|
104
266
|
// unactivate active tab
|
|
105
|
-
|
|
267
|
+
const activeTab = this.tabs.find((t) => t.index === this.activeIndex);
|
|
106
268
|
if (activeTab && activeTab.index !== tab.index) {
|
|
107
269
|
activeTab.active = false;
|
|
108
270
|
activeTab.tabDeactivated();
|
|
@@ -159,8 +321,8 @@ class SkyVerticalTabsetService {
|
|
|
159
321
|
moveContent() {
|
|
160
322
|
/* istanbul ignore else */
|
|
161
323
|
if (this._content && !this._contentAdded) {
|
|
162
|
-
|
|
163
|
-
|
|
324
|
+
const activeTab = this.activeTab();
|
|
325
|
+
const activeContent = activeTab ? activeTab.tabContent : undefined;
|
|
164
326
|
if (activeContent && activeContent.nativeElement) {
|
|
165
327
|
this._content.nativeElement.appendChild(activeContent.nativeElement);
|
|
166
328
|
activeTab.contentRendered = true;
|
|
@@ -185,276 +347,55 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
185
347
|
type: Injectable
|
|
186
348
|
}], ctorParameters: function () { return [{ type: i1.SkyMediaQueryService }]; } });
|
|
187
349
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
constructor(tabService, changeRef) {
|
|
193
|
-
this.tabService = tabService;
|
|
350
|
+
let nextId$2 = 0;
|
|
351
|
+
class SkyVerticalTabComponent {
|
|
352
|
+
constructor(adapterService, changeRef, tabsetService, verticalTabMediaQueryService) {
|
|
353
|
+
this.adapterService = adapterService;
|
|
194
354
|
this.changeRef = changeRef;
|
|
355
|
+
this.tabsetService = tabsetService;
|
|
356
|
+
this.verticalTabMediaQueryService = verticalTabMediaQueryService;
|
|
195
357
|
/**
|
|
196
|
-
* Indicates whether the
|
|
197
|
-
* displays content without moving around elements in the content container.
|
|
198
|
-
* @default false
|
|
358
|
+
* Indicates whether the tab is active when the tabset loads.
|
|
199
359
|
*/
|
|
200
|
-
this.
|
|
360
|
+
this.active = false;
|
|
201
361
|
/**
|
|
202
|
-
*
|
|
203
|
-
* section. The index is based on the section's position when the form loads.
|
|
362
|
+
* Indicates whether to disable the tab.
|
|
204
363
|
*/
|
|
205
|
-
this.
|
|
364
|
+
this.disabled = false;
|
|
365
|
+
/**
|
|
366
|
+
* Indicates whether to indicate that the tab has an error.
|
|
367
|
+
* @internal This is used for sectioned forms and is not currently a supported design for pure vertical tabs.
|
|
368
|
+
*/
|
|
369
|
+
this.errorIndicator = false;
|
|
370
|
+
/**
|
|
371
|
+
* Specifies an ID for the tab.
|
|
372
|
+
* @deprecated Now that the vertical tabs provide aria labels automatically, this input is no longer necessary.
|
|
373
|
+
*/
|
|
374
|
+
this.tabId = `sky-vertical-tab-${++nextId$2}`;
|
|
206
375
|
this.isMobile = false;
|
|
376
|
+
this._contentRendered = false;
|
|
377
|
+
this._mobileSubscription = new Subject();
|
|
207
378
|
this._ngUnsubscribe = new Subject();
|
|
379
|
+
this._showTabRightArrow = false;
|
|
208
380
|
}
|
|
381
|
+
/**
|
|
382
|
+
* Specifies an ARIA role for the vertical tab
|
|
383
|
+
* [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility)
|
|
384
|
+
* by indicating how the tab functions and what it controls. For information about how
|
|
385
|
+
* an ARIA role indicates what an item represents on a web page, see the
|
|
386
|
+
* [WAI-ARIA roles model](https://www.w3.org/WAI/PF/aria/roles).
|
|
387
|
+
* @default "tab"
|
|
388
|
+
* @deprecated Any other value than `tab` could lead to a poor user experience for users with assistive technology.
|
|
389
|
+
* In the next major version, this property will be automatically set to `tab`.
|
|
390
|
+
*/
|
|
209
391
|
get ariaRole() {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
ngOnInit() {
|
|
213
|
-
this.tabService.maintainTabContent = this.maintainSectionContent;
|
|
214
|
-
this.tabService.indexChanged
|
|
215
|
-
.pipe(takeUntil(this._ngUnsubscribe))
|
|
216
|
-
.subscribe((index) => {
|
|
217
|
-
this.indexChanged.emit(index);
|
|
218
|
-
this.changeRef.markForCheck();
|
|
219
|
-
});
|
|
220
|
-
this.tabService.switchingMobile
|
|
221
|
-
.pipe(takeUntil(this._ngUnsubscribe))
|
|
222
|
-
.subscribe((mobile) => {
|
|
223
|
-
this.isMobile = mobile;
|
|
224
|
-
this.changeRef.markForCheck();
|
|
225
|
-
});
|
|
226
|
-
if (this.tabService.isMobile()) {
|
|
227
|
-
this.isMobile = true;
|
|
228
|
-
this.tabService.animationContentVisibleState = VISIBLE_STATE;
|
|
229
|
-
this.changeRef.markForCheck();
|
|
392
|
+
if (this.isMobile) {
|
|
393
|
+
return undefined;
|
|
230
394
|
}
|
|
395
|
+
return this._ariaRole || 'tab';
|
|
231
396
|
}
|
|
232
|
-
|
|
233
|
-
this.
|
|
234
|
-
this.tabService.updateContent();
|
|
235
|
-
}
|
|
236
|
-
ngOnDestroy() {
|
|
237
|
-
this._ngUnsubscribe.next();
|
|
238
|
-
this._ngUnsubscribe.complete();
|
|
239
|
-
}
|
|
240
|
-
tabsVisible() {
|
|
241
|
-
this.changeRef.markForCheck();
|
|
242
|
-
return this.tabService.tabsVisible();
|
|
243
|
-
}
|
|
244
|
-
showTabs() {
|
|
245
|
-
this.tabService.showTabs();
|
|
246
|
-
this.changeRef.markForCheck();
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
SkySectionedFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkySectionedFormComponent, deps: [{ token: SkyVerticalTabsetService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
250
|
-
SkySectionedFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SkySectionedFormComponent, selector: "sky-sectioned-form", inputs: { maintainSectionContent: "maintainSectionContent" }, outputs: { indexChanged: "indexChanged" }, providers: [SkyVerticalTabsetService], viewQueries: [{ propertyName: "content", first: true, predicate: ["skySectionSideContent"], descendants: true }], ngImport: i0, template: "<div\n aria-orientation=\"vertical\"\n class=\"sky-sectioned-form\"\n [attr.role]=\"ariaRole\"\n (window:resize)=\"tabService.updateContent()\"\n>\n <div\n *ngIf=\"maintainSectionContent || tabsVisible()\"\n class=\"sky-sectioned-form-tabs\"\n [ngClass]=\"{ 'sky-sectioned-form-tabs-hidden': !tabsVisible() }\"\n [@tabEnter]=\"tabService.animationTabsVisibleState\"\n >\n <ng-content></ng-content>\n </div>\n <div\n *ngIf=\"maintainSectionContent || tabService.contentVisible()\"\n class=\"sky-sectioned-form-content\"\n [ngClass]=\"{\n 'sky-sectioned-form-content-hidden': !tabService.contentVisible()\n }\"\n [@contentEnter]=\"tabService.animationContentVisibleState\"\n #skySectionSideContent\n ></div>\n</div>\n", styles: [":host .sky-sectioned-form{display:block;max-height:none}:host .sky-sectioned-form-content{flex-basis:auto;overflow-y:visible}:host .sky-sectioned-form-tabs{flex-basis:auto;overflow-y:visible;border-right:1px solid #e2e3e4}:host-context(.sky-responsive-container-xs) .sky-sectioned-form,:host-context(.sky-responsive-container-sm) .sky-sectioned-form,:host-context(.sky-responsive-container-md) .sky-sectioned-form,:host-context(.sky-responsive-container-lg) .sky-sectioned-form{display:block;max-height:none}:host-context(.sky-responsive-container-xs) .sky-sectioned-form-content,:host-context(.sky-responsive-container-sm) .sky-sectioned-form-content,:host-context(.sky-responsive-container-md) .sky-sectioned-form-content,:host-context(.sky-responsive-container-lg) .sky-sectioned-form-content{flex-basis:auto;overflow-y:visible}:host-context(.sky-responsive-container-xs) .sky-sectioned-form-tabs,:host-context(.sky-responsive-container-sm) .sky-sectioned-form-tabs,:host-context(.sky-responsive-container-md) .sky-sectioned-form-tabs,:host-context(.sky-responsive-container-lg) .sky-sectioned-form-tabs{flex-basis:auto;overflow-y:visible;border-right:1px solid #e2e3e4}@media (min-width: 768px){:host .sky-sectioned-form{display:flex;max-height:100%}:host .sky-sectioned-form-content{flex-basis:70%;margin:15px;overflow-y:auto}:host .sky-sectioned-form-tabs{flex-basis:30%;overflow-y:auto}}:host-context(.sky-responsive-container-sm) .sky-sectioned-form,:host-context(.sky-responsive-container-md) .sky-sectioned-form,:host-context(.sky-responsive-container-lg) .sky-sectioned-form{display:flex;max-height:100%}:host-context(.sky-responsive-container-sm) .sky-sectioned-form-content,:host-context(.sky-responsive-container-md) .sky-sectioned-form-content,:host-context(.sky-responsive-container-lg) .sky-sectioned-form-content{flex-basis:70%;margin:15px;overflow-y:auto}:host-context(.sky-responsive-container-sm) .sky-sectioned-form-tabs,:host-context(.sky-responsive-container-md) .sky-sectioned-form-tabs,:host-context(.sky-responsive-container-lg) .sky-sectioned-form-tabs{flex-basis:30%;overflow-y:auto}.sky-sectioned-form-tabs-hidden{display:none}.sky-sectioned-form-content-hidden{display:none}:host-context(.sky-theme-modern) .sky-sectioned-form-content{margin:15px}:host-context(.sky-theme-modern) .sky-sectioned-form-tabs{border-right:1px solid #d2d2d2}@media (min-width: 768px){:host-context(.sky-theme-modern) :host .sky-sectioned-form-content{margin:20px 30px}}:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-sm) .sky-sectioned-form-content,:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-md) .sky-sectioned-form-content,:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-lg) .sky-sectioned-form-content{margin:20px 30px}.sky-theme-modern .sky-sectioned-form-content{margin:15px}.sky-theme-modern .sky-sectioned-form-tabs{border-right:1px solid #d2d2d2}@media (min-width: 768px){.sky-theme-modern :host .sky-sectioned-form-content{margin:20px 30px}}.sky-theme-modern :host-context(.sky-responsive-container-sm) .sky-sectioned-form-content,.sky-theme-modern :host-context(.sky-responsive-container-md) .sky-sectioned-form-content,.sky-theme-modern :host-context(.sky-responsive-container-lg) .sky-sectioned-form-content{margin:20px 30px}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], animations: [
|
|
251
|
-
trigger('tabEnter', [
|
|
252
|
-
transition(`${HIDDEN_STATE} => ${VISIBLE_STATE}`, [
|
|
253
|
-
style({ transform: 'translate(-100%)' }),
|
|
254
|
-
animate('150ms ease-in'),
|
|
255
|
-
]),
|
|
256
|
-
]),
|
|
257
|
-
trigger('contentEnter', [
|
|
258
|
-
transition(`${HIDDEN_STATE} => ${VISIBLE_STATE}`, [
|
|
259
|
-
style({ transform: 'translate(100%)' }),
|
|
260
|
-
animate('150ms ease-in'),
|
|
261
|
-
]),
|
|
262
|
-
]),
|
|
263
|
-
], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
264
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkySectionedFormComponent, decorators: [{
|
|
265
|
-
type: Component,
|
|
266
|
-
args: [{
|
|
267
|
-
selector: 'sky-sectioned-form',
|
|
268
|
-
templateUrl: './sectioned-form.component.html',
|
|
269
|
-
styleUrls: ['./sectioned-form.component.scss'],
|
|
270
|
-
providers: [SkyVerticalTabsetService],
|
|
271
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
272
|
-
animations: [
|
|
273
|
-
trigger('tabEnter', [
|
|
274
|
-
transition(`${HIDDEN_STATE} => ${VISIBLE_STATE}`, [
|
|
275
|
-
style({ transform: 'translate(-100%)' }),
|
|
276
|
-
animate('150ms ease-in'),
|
|
277
|
-
]),
|
|
278
|
-
]),
|
|
279
|
-
trigger('contentEnter', [
|
|
280
|
-
transition(`${HIDDEN_STATE} => ${VISIBLE_STATE}`, [
|
|
281
|
-
style({ transform: 'translate(100%)' }),
|
|
282
|
-
animate('150ms ease-in'),
|
|
283
|
-
]),
|
|
284
|
-
]),
|
|
285
|
-
],
|
|
286
|
-
}]
|
|
287
|
-
}], ctorParameters: function () { return [{ type: SkyVerticalTabsetService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { maintainSectionContent: [{
|
|
288
|
-
type: Input
|
|
289
|
-
}], indexChanged: [{
|
|
290
|
-
type: Output
|
|
291
|
-
}], content: [{
|
|
292
|
-
type: ViewChild,
|
|
293
|
-
args: ['skySectionSideContent']
|
|
294
|
-
}] } });
|
|
295
|
-
|
|
296
|
-
/**
|
|
297
|
-
* @internal
|
|
298
|
-
*/
|
|
299
|
-
class SkyVerticalTabMediaQueryService {
|
|
300
|
-
constructor() {
|
|
301
|
-
this.currentSubject = new BehaviorSubject(this.current);
|
|
302
|
-
this._current = SkyMediaBreakpoints.xs;
|
|
303
|
-
this.currentSubject.next(this._current);
|
|
304
|
-
}
|
|
305
|
-
get current() {
|
|
306
|
-
return this._current;
|
|
307
|
-
}
|
|
308
|
-
subscribe(listener) {
|
|
309
|
-
return this.currentSubject.subscribe({
|
|
310
|
-
next: (breakpoints) => {
|
|
311
|
-
listener(breakpoints);
|
|
312
|
-
},
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
|
-
setBreakpointForWidth(width) {
|
|
316
|
-
let breakpoint;
|
|
317
|
-
if (this.isWidthWithinBreakpiont(width, SkyMediaBreakpoints.xs)) {
|
|
318
|
-
breakpoint = SkyMediaBreakpoints.xs;
|
|
319
|
-
}
|
|
320
|
-
else if (this.isWidthWithinBreakpiont(width, SkyMediaBreakpoints.sm)) {
|
|
321
|
-
breakpoint = SkyMediaBreakpoints.sm;
|
|
322
|
-
}
|
|
323
|
-
else if (this.isWidthWithinBreakpiont(width, SkyMediaBreakpoints.md)) {
|
|
324
|
-
breakpoint = SkyMediaBreakpoints.md;
|
|
325
|
-
}
|
|
326
|
-
else {
|
|
327
|
-
breakpoint = SkyMediaBreakpoints.lg;
|
|
328
|
-
}
|
|
329
|
-
this._current = breakpoint;
|
|
330
|
-
this.currentSubject.next(this._current);
|
|
331
|
-
}
|
|
332
|
-
isWidthWithinBreakpiont(width, breakpoint) {
|
|
333
|
-
const xsBreakpointMaxPixels = 767;
|
|
334
|
-
const smBreakpointMinPixels = 768;
|
|
335
|
-
const smBreakpointMaxPixels = 991;
|
|
336
|
-
const mdBreakpointMinPixels = 992;
|
|
337
|
-
const mdBreakpointMaxPixels = 1199;
|
|
338
|
-
const lgBreakpointMinPixels = 1200;
|
|
339
|
-
switch (breakpoint) {
|
|
340
|
-
case SkyMediaBreakpoints.xs: {
|
|
341
|
-
return width <= xsBreakpointMaxPixels;
|
|
342
|
-
}
|
|
343
|
-
case SkyMediaBreakpoints.sm: {
|
|
344
|
-
return width >= smBreakpointMinPixels && width <= smBreakpointMaxPixels;
|
|
345
|
-
}
|
|
346
|
-
case SkyMediaBreakpoints.md: {
|
|
347
|
-
return width >= mdBreakpointMinPixels && width <= mdBreakpointMaxPixels;
|
|
348
|
-
}
|
|
349
|
-
default: {
|
|
350
|
-
return width >= lgBreakpointMinPixels;
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
destroy() {
|
|
355
|
-
this.currentSubject.complete();
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
SkyVerticalTabMediaQueryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyVerticalTabMediaQueryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
359
|
-
SkyVerticalTabMediaQueryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyVerticalTabMediaQueryService });
|
|
360
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyVerticalTabMediaQueryService, decorators: [{
|
|
361
|
-
type: Injectable
|
|
362
|
-
}], ctorParameters: function () { return []; } });
|
|
363
|
-
|
|
364
|
-
class SkyVerticalTabsetAdapterService {
|
|
365
|
-
constructor(rendererFactory) {
|
|
366
|
-
this.rendererFactory = rendererFactory;
|
|
367
|
-
this.renderer = this.rendererFactory.createRenderer(undefined, undefined);
|
|
368
|
-
}
|
|
369
|
-
getWidth(elementRef) {
|
|
370
|
-
return elementRef.nativeElement.clientWidth;
|
|
371
|
-
}
|
|
372
|
-
scrollToContentTop(element) {
|
|
373
|
-
element.nativeElement.scrollTop = 0;
|
|
374
|
-
}
|
|
375
|
-
setResponsiveClass(element, breakpoint) {
|
|
376
|
-
const nativeEl = element.nativeElement;
|
|
377
|
-
this.renderer.removeClass(nativeEl, 'sky-responsive-container-xs');
|
|
378
|
-
this.renderer.removeClass(nativeEl, 'sky-responsive-container-sm');
|
|
379
|
-
this.renderer.removeClass(nativeEl, 'sky-responsive-container-md');
|
|
380
|
-
this.renderer.removeClass(nativeEl, 'sky-responsive-container-lg');
|
|
381
|
-
let newClass;
|
|
382
|
-
switch (breakpoint) {
|
|
383
|
-
case SkyMediaBreakpoints.xs: {
|
|
384
|
-
newClass = 'sky-responsive-container-xs';
|
|
385
|
-
break;
|
|
386
|
-
}
|
|
387
|
-
case SkyMediaBreakpoints.sm: {
|
|
388
|
-
newClass = 'sky-responsive-container-sm';
|
|
389
|
-
break;
|
|
390
|
-
}
|
|
391
|
-
case SkyMediaBreakpoints.md: {
|
|
392
|
-
newClass = 'sky-responsive-container-md';
|
|
393
|
-
break;
|
|
394
|
-
}
|
|
395
|
-
default: {
|
|
396
|
-
newClass = 'sky-responsive-container-lg';
|
|
397
|
-
break;
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
this.renderer.addClass(nativeEl, newClass);
|
|
401
|
-
}
|
|
402
|
-
}
|
|
403
|
-
SkyVerticalTabsetAdapterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyVerticalTabsetAdapterService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
404
|
-
SkyVerticalTabsetAdapterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyVerticalTabsetAdapterService });
|
|
405
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyVerticalTabsetAdapterService, decorators: [{
|
|
406
|
-
type: Injectable
|
|
407
|
-
}], ctorParameters: function () { return [{ type: i0.RendererFactory2 }]; } });
|
|
408
|
-
|
|
409
|
-
let nextId$2 = 0;
|
|
410
|
-
class SkyVerticalTabComponent {
|
|
411
|
-
constructor(adapterService, changeRef, tabsetService, verticalTabMediaQueryService) {
|
|
412
|
-
this.adapterService = adapterService;
|
|
413
|
-
this.changeRef = changeRef;
|
|
414
|
-
this.tabsetService = tabsetService;
|
|
415
|
-
this.verticalTabMediaQueryService = verticalTabMediaQueryService;
|
|
416
|
-
/**
|
|
417
|
-
* Indicates whether the tab is active when the tabset loads.
|
|
418
|
-
*/
|
|
419
|
-
this.active = false;
|
|
420
|
-
/**
|
|
421
|
-
* Indicates whether to disable the tab.
|
|
422
|
-
*/
|
|
423
|
-
this.disabled = false;
|
|
424
|
-
/**
|
|
425
|
-
* Indicates whether to indicate that the tab has an error.
|
|
426
|
-
* @internal This is used for sectioned forms and is not currently a supported design for pure vertical tabs.
|
|
427
|
-
*/
|
|
428
|
-
this.errorIndicator = false;
|
|
429
|
-
/**
|
|
430
|
-
* Specifies an ID for the tab.
|
|
431
|
-
* @deprecated Now that the vertical tabs provide aria labels automatically, this input is no longer necessary.
|
|
432
|
-
*/
|
|
433
|
-
this.tabId = `sky-vertical-tab-${++nextId$2}`;
|
|
434
|
-
this.isMobile = false;
|
|
435
|
-
this._contentRendered = false;
|
|
436
|
-
this._mobileSubscription = new Subject();
|
|
437
|
-
this._ngUnsubscribe = new Subject();
|
|
438
|
-
this._showTabRightArrow = false;
|
|
439
|
-
}
|
|
440
|
-
/**
|
|
441
|
-
* Specifies an ARIA role for the vertical tab
|
|
442
|
-
* [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility)
|
|
443
|
-
* by indicating how the tab functions and what it controls. For information about how
|
|
444
|
-
* an ARIA role indicates what an item represents on a web page, see the
|
|
445
|
-
* [WAI-ARIA roles model](https://www.w3.org/WAI/PF/aria/roles).
|
|
446
|
-
* @default "tab"
|
|
447
|
-
* @deprecated Any other value than `tab` could lead to a poor user experience for users with assistive technology.
|
|
448
|
-
* In the next major version, this property will be automatically set to `tab`.
|
|
449
|
-
*/
|
|
450
|
-
get ariaRole() {
|
|
451
|
-
if (this.isMobile) {
|
|
452
|
-
return undefined;
|
|
453
|
-
}
|
|
454
|
-
return this._ariaRole || 'tab';
|
|
455
|
-
}
|
|
456
|
-
set ariaRole(value) {
|
|
457
|
-
this._ariaRole = value;
|
|
397
|
+
set ariaRole(value) {
|
|
398
|
+
this._ariaRole = value;
|
|
458
399
|
}
|
|
459
400
|
/**
|
|
460
401
|
* Indicates whether to display a chevron-right icon in the righthand side of the tab.
|
|
@@ -595,143 +536,84 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
595
536
|
args: ['window:resize']
|
|
596
537
|
}] } });
|
|
597
538
|
|
|
598
|
-
class
|
|
599
|
-
constructor() {
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
this.
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
539
|
+
class SkyVerticalTabsetGroupComponent {
|
|
540
|
+
constructor(tabService, changeRef) {
|
|
541
|
+
this.tabService = tabService;
|
|
542
|
+
this.changeRef = changeRef;
|
|
543
|
+
this.ngUnsubscribe = new Subject();
|
|
544
|
+
this.openBeforeTabsHidden = false;
|
|
545
|
+
this._open = false;
|
|
546
|
+
this.tabClicked = () => {
|
|
547
|
+
this.changeRef.markForCheck();
|
|
548
|
+
};
|
|
549
|
+
this.tabsHidden = () => {
|
|
550
|
+
// this fixes an animation bug with ngIf when the parent component goes from visible to hidden
|
|
551
|
+
this.openBeforeTabsHidden = this.open;
|
|
552
|
+
this.open = false;
|
|
553
|
+
this.changeRef.markForCheck();
|
|
554
|
+
};
|
|
555
|
+
this.tabsShown = () => {
|
|
556
|
+
this.open = this.openBeforeTabsHidden;
|
|
557
|
+
this.changeRef.markForCheck();
|
|
558
|
+
};
|
|
608
559
|
}
|
|
609
560
|
/**
|
|
610
|
-
*
|
|
611
|
-
*
|
|
561
|
+
* Indicates whether the collapsible group is expanded.
|
|
562
|
+
* @default false
|
|
612
563
|
*/
|
|
613
|
-
|
|
614
|
-
this.
|
|
564
|
+
set open(value) {
|
|
565
|
+
this._open = value;
|
|
615
566
|
}
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
* This method is used within a `sky-sectioned-form-section` element.
|
|
619
|
-
*/
|
|
620
|
-
requiredFieldChanged(isRequired) {
|
|
621
|
-
this.requiredChange.next(isRequired);
|
|
622
|
-
}
|
|
623
|
-
}
|
|
624
|
-
SkySectionedFormService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkySectionedFormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
625
|
-
SkySectionedFormService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkySectionedFormService });
|
|
626
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkySectionedFormService, decorators: [{
|
|
627
|
-
type: Injectable
|
|
628
|
-
}] });
|
|
629
|
-
|
|
630
|
-
let nextId$1 = 0;
|
|
631
|
-
/**
|
|
632
|
-
* Creates an individual form to display as a section within the sectioned form.
|
|
633
|
-
*/
|
|
634
|
-
class SkySectionedFormSectionComponent {
|
|
635
|
-
constructor(sectionedFormService, tabsetService, changeRef) {
|
|
636
|
-
this.sectionedFormService = sectionedFormService;
|
|
637
|
-
this.tabsetService = tabsetService;
|
|
638
|
-
this.changeRef = changeRef;
|
|
639
|
-
this.sectionTabId = `sky-sectioned-form-tab-${++nextId$1}`;
|
|
640
|
-
this.sectionContentId = `sky-sectioned-form-section-${++nextId$1}`;
|
|
641
|
-
/**
|
|
642
|
-
* Indicates whether the section is active when the form loads.
|
|
643
|
-
* @default false
|
|
644
|
-
*/
|
|
645
|
-
this.active = false;
|
|
646
|
-
this._ngUnsubscribe = new Subject();
|
|
567
|
+
get open() {
|
|
568
|
+
return !this.disabled && this._open;
|
|
647
569
|
}
|
|
648
570
|
ngOnInit() {
|
|
649
|
-
this.
|
|
650
|
-
|
|
651
|
-
this.
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
.
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
.
|
|
658
|
-
.subscribe((invalid) => (this.fieldInvalid = invalid));
|
|
571
|
+
this.tabService.hidingTabs
|
|
572
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
573
|
+
.subscribe(this.tabsHidden);
|
|
574
|
+
this.tabService.showingTabs
|
|
575
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
576
|
+
.subscribe(this.tabsShown);
|
|
577
|
+
this.tabService.tabClicked
|
|
578
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
579
|
+
.subscribe(this.tabClicked);
|
|
659
580
|
}
|
|
660
581
|
ngOnDestroy() {
|
|
661
|
-
this.
|
|
662
|
-
this.
|
|
582
|
+
this.ngUnsubscribe.next();
|
|
583
|
+
this.ngUnsubscribe.complete();
|
|
584
|
+
}
|
|
585
|
+
toggleMenuOpen() {
|
|
586
|
+
if (!this.disabled) {
|
|
587
|
+
this.open = !this.open;
|
|
588
|
+
}
|
|
589
|
+
this.changeRef.markForCheck();
|
|
590
|
+
}
|
|
591
|
+
subMenuOpen() {
|
|
592
|
+
return this.tabs && this.tabs.find((t) => t.active) !== undefined;
|
|
663
593
|
}
|
|
664
594
|
}
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type:
|
|
595
|
+
SkyVerticalTabsetGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyVerticalTabsetGroupComponent, deps: [{ token: SkyVerticalTabsetService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
596
|
+
SkyVerticalTabsetGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SkyVerticalTabsetGroupComponent, selector: "sky-vertical-tabset-group", inputs: { disabled: "disabled", groupHeading: "groupHeading", open: "open" }, queries: [{ propertyName: "tabs", predicate: SkyVerticalTabComponent }], ngImport: i0, template: "<div class=\"sky-vertical-tabset-group\">\n <!-- [ngClass] includes font classes for both modern and default styles -->\n <div\n class=\"sky-vertical-tabset-group-header\"\n [ngClass]=\"{\n 'sky-vertical-tabset-group-header-sub-open sky-font-emphasized sky-emphasized':\n subMenuOpen(),\n 'sky-font-deemphasized': disabled,\n 'sky-deemphasized': disabled,\n 'sky-vertical-tabset-disabled': disabled\n }\"\n [tabIndex]=\"-1\"\n >\n <button\n class=\"sky-padding-even-default\"\n type=\"button\"\n skyId\n [attr.aria-controls]=\"groupContent.id\"\n [attr.aria-expanded]=\"open\"\n (click)=\"toggleMenuOpen()\"\n #groupHeadingButton\n >\n {{ groupHeading }}\n <sky-expansion-indicator\n class=\"sky-vertical-tabset-group-expansion-indicator\"\n [direction]=\"open ? 'up' : 'down'\"\n >\n </sky-expansion-indicator>\n </button>\n </div>\n <div\n class=\"sky-vertical-tabset-group-content\"\n role=\"region\"\n skyId\n [attr.labelledby]=\"groupHeadingButton.id\"\n [@skyAnimationSlide]=\"open ? 'down' : 'up'\"\n #groupContent\n >\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".sky-vertical-tabset-group{border-bottom:1px solid #e2e3e4;margin:5px 0 5px 5px}.sky-vertical-tabset-group-header button{cursor:pointer;display:flex;justify-content:space-between;border:none;width:100%;text-align:left;background:none}.sky-vertical-tabset-group-content{overflow:hidden;border-top:1px solid #e2e3e4}:host ::ng-deep .sky-vertical-tabset-group-expansion-indicator>button{font-size:14px!important}.sky-vertical-tabset-disabled{cursor:not-allowed;pointer-events:none}:host-context(.sky-theme-modern) .sky-vertical-tabset-group{border:none;margin:10px 0}:host-context(.sky-theme-modern) .sky-vertical-tabset-group-content{border:none;padding-left:25px}:host-context(.sky-theme-modern) .sky-vertical-tabset-group-header{position:relative}:host-context(.sky-theme-modern) .sky-vertical-tabset-group-expansion-indicator{position:absolute;top:6px;right:5px}.sky-theme-modern .sky-vertical-tabset-group{border:none;margin:10px 0}.sky-theme-modern .sky-vertical-tabset-group-content{border:none;padding-left:25px}.sky-theme-modern .sky-vertical-tabset-group-header{position:relative}.sky-theme-modern .sky-vertical-tabset-group-expansion-indicator{position:absolute;top:6px;right:5px}\n"], components: [{ type: i4.λ15, selector: "sky-expansion-indicator", inputs: ["direction"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.λ2, selector: "[skyId]", exportAs: ["skyId"] }], animations: [skyAnimationSlide], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
597
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyVerticalTabsetGroupComponent, decorators: [{
|
|
668
598
|
type: Component,
|
|
669
599
|
args: [{
|
|
670
|
-
selector: 'sky-
|
|
671
|
-
templateUrl: './
|
|
672
|
-
|
|
673
|
-
|
|
600
|
+
selector: 'sky-vertical-tabset-group',
|
|
601
|
+
templateUrl: './vertical-tabset-group.component.html',
|
|
602
|
+
styleUrls: ['./vertical-tabset-group.component.scss'],
|
|
603
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
604
|
+
animations: [skyAnimationSlide],
|
|
674
605
|
}]
|
|
675
|
-
}], ctorParameters: function () { return [{ type:
|
|
606
|
+
}], ctorParameters: function () { return [{ type: SkyVerticalTabsetService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { disabled: [{
|
|
676
607
|
type: Input
|
|
677
|
-
}],
|
|
608
|
+
}], groupHeading: [{
|
|
678
609
|
type: Input
|
|
679
|
-
}],
|
|
610
|
+
}], open: [{
|
|
680
611
|
type: Input
|
|
681
|
-
}],
|
|
682
|
-
type:
|
|
612
|
+
}], tabs: [{
|
|
613
|
+
type: ContentChildren,
|
|
683
614
|
args: [SkyVerticalTabComponent]
|
|
684
615
|
}] } });
|
|
685
616
|
|
|
686
|
-
/**
|
|
687
|
-
* NOTICE: DO NOT MODIFY THIS FILE!
|
|
688
|
-
* The contents of this file were automatically generated by
|
|
689
|
-
* the 'ng generate @skyux/i18n:lib-resources-module modules/shared/sky-tabs' schematic.
|
|
690
|
-
* To update this file, simply rerun the command.
|
|
691
|
-
*/
|
|
692
|
-
const RESOURCES = {
|
|
693
|
-
'EN-US': {
|
|
694
|
-
skyux_tab_add: { message: 'Add tab' },
|
|
695
|
-
skyux_tab_close: { message: 'Close {0} tab' },
|
|
696
|
-
skyux_tabs_navigator_next: { message: 'Next' },
|
|
697
|
-
skyux_tabs_navigator_previous: { message: 'Previous' },
|
|
698
|
-
skyux_tab_open: { message: 'Open tab' },
|
|
699
|
-
skyux_vertical_tabs_show_tabs_text: { message: 'Tab list' },
|
|
700
|
-
},
|
|
701
|
-
};
|
|
702
|
-
class SkyTabsResourcesProvider {
|
|
703
|
-
getString(localeInfo, name) {
|
|
704
|
-
return getLibStringForLocale(RESOURCES, localeInfo.locale, name);
|
|
705
|
-
}
|
|
706
|
-
}
|
|
707
|
-
/**
|
|
708
|
-
* Import into any component library module that needs to use resource strings.
|
|
709
|
-
*/
|
|
710
|
-
class SkyTabsResourcesModule {
|
|
711
|
-
}
|
|
712
|
-
SkyTabsResourcesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyTabsResourcesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
713
|
-
SkyTabsResourcesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyTabsResourcesModule, exports: [SkyI18nModule] });
|
|
714
|
-
SkyTabsResourcesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyTabsResourcesModule, providers: [
|
|
715
|
-
{
|
|
716
|
-
provide: SKY_LIB_RESOURCES_PROVIDERS,
|
|
717
|
-
useClass: SkyTabsResourcesProvider,
|
|
718
|
-
multi: true,
|
|
719
|
-
},
|
|
720
|
-
], imports: [SkyI18nModule] });
|
|
721
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyTabsResourcesModule, decorators: [{
|
|
722
|
-
type: NgModule,
|
|
723
|
-
args: [{
|
|
724
|
-
exports: [SkyI18nModule],
|
|
725
|
-
providers: [
|
|
726
|
-
{
|
|
727
|
-
provide: SKY_LIB_RESOURCES_PROVIDERS,
|
|
728
|
-
useClass: SkyTabsResourcesProvider,
|
|
729
|
-
multi: true,
|
|
730
|
-
},
|
|
731
|
-
],
|
|
732
|
-
}]
|
|
733
|
-
}] });
|
|
734
|
-
|
|
735
617
|
class SkyVerticalTabsetComponent {
|
|
736
618
|
constructor(adapterService, tabService, resources, changeRef) {
|
|
737
619
|
this.adapterService = adapterService;
|
|
@@ -876,84 +758,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
876
758
|
args: ['contentContainerWrapper']
|
|
877
759
|
}] } });
|
|
878
760
|
|
|
879
|
-
class SkyVerticalTabsetGroupComponent {
|
|
880
|
-
constructor(tabService, changeRef) {
|
|
881
|
-
this.tabService = tabService;
|
|
882
|
-
this.changeRef = changeRef;
|
|
883
|
-
this.ngUnsubscribe = new Subject();
|
|
884
|
-
this.openBeforeTabsHidden = false;
|
|
885
|
-
this._open = false;
|
|
886
|
-
this.tabClicked = () => {
|
|
887
|
-
this.changeRef.markForCheck();
|
|
888
|
-
};
|
|
889
|
-
this.tabsHidden = () => {
|
|
890
|
-
// this fixes an animation bug with ngIf when the parent component goes from visible to hidden
|
|
891
|
-
this.openBeforeTabsHidden = this.open;
|
|
892
|
-
this.open = false;
|
|
893
|
-
this.changeRef.markForCheck();
|
|
894
|
-
};
|
|
895
|
-
this.tabsShown = () => {
|
|
896
|
-
this.open = this.openBeforeTabsHidden;
|
|
897
|
-
this.changeRef.markForCheck();
|
|
898
|
-
};
|
|
899
|
-
}
|
|
900
|
-
/**
|
|
901
|
-
* Indicates whether the collapsible group is expanded.
|
|
902
|
-
* @default false
|
|
903
|
-
*/
|
|
904
|
-
set open(value) {
|
|
905
|
-
this._open = value;
|
|
906
|
-
}
|
|
907
|
-
get open() {
|
|
908
|
-
return !this.disabled && this._open;
|
|
909
|
-
}
|
|
910
|
-
ngOnInit() {
|
|
911
|
-
this.tabService.hidingTabs
|
|
912
|
-
.pipe(takeUntil(this.ngUnsubscribe))
|
|
913
|
-
.subscribe(this.tabsHidden);
|
|
914
|
-
this.tabService.showingTabs
|
|
915
|
-
.pipe(takeUntil(this.ngUnsubscribe))
|
|
916
|
-
.subscribe(this.tabsShown);
|
|
917
|
-
this.tabService.tabClicked
|
|
918
|
-
.pipe(takeUntil(this.ngUnsubscribe))
|
|
919
|
-
.subscribe(this.tabClicked);
|
|
920
|
-
}
|
|
921
|
-
ngOnDestroy() {
|
|
922
|
-
this.ngUnsubscribe.next();
|
|
923
|
-
this.ngUnsubscribe.complete();
|
|
924
|
-
}
|
|
925
|
-
toggleMenuOpen() {
|
|
926
|
-
if (!this.disabled) {
|
|
927
|
-
this.open = !this.open;
|
|
928
|
-
}
|
|
929
|
-
this.changeRef.markForCheck();
|
|
930
|
-
}
|
|
931
|
-
subMenuOpen() {
|
|
932
|
-
return this.tabs && this.tabs.find((t) => t.active) !== undefined;
|
|
933
|
-
}
|
|
934
|
-
}
|
|
935
|
-
SkyVerticalTabsetGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyVerticalTabsetGroupComponent, deps: [{ token: SkyVerticalTabsetService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
936
|
-
SkyVerticalTabsetGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SkyVerticalTabsetGroupComponent, selector: "sky-vertical-tabset-group", inputs: { disabled: "disabled", groupHeading: "groupHeading", open: "open" }, queries: [{ propertyName: "tabs", predicate: SkyVerticalTabComponent }], ngImport: i0, template: "<div class=\"sky-vertical-tabset-group\">\n <!-- [ngClass] includes font classes for both modern and default styles -->\n <div\n class=\"sky-vertical-tabset-group-header\"\n [ngClass]=\"{\n 'sky-vertical-tabset-group-header-sub-open sky-font-emphasized sky-emphasized':\n subMenuOpen(),\n 'sky-font-deemphasized': disabled,\n 'sky-deemphasized': disabled,\n 'sky-vertical-tabset-disabled': disabled\n }\"\n [tabIndex]=\"-1\"\n >\n <button\n class=\"sky-padding-even-default\"\n type=\"button\"\n skyId\n [attr.aria-controls]=\"groupContent.id\"\n [attr.aria-expanded]=\"open\"\n (click)=\"toggleMenuOpen()\"\n #groupHeadingButton\n >\n {{ groupHeading }}\n <sky-expansion-indicator\n class=\"sky-vertical-tabset-group-expansion-indicator\"\n [direction]=\"open ? 'up' : 'down'\"\n >\n </sky-expansion-indicator>\n </button>\n </div>\n <div\n class=\"sky-vertical-tabset-group-content\"\n role=\"region\"\n skyId\n [attr.labelledby]=\"groupHeadingButton.id\"\n [@skyAnimationSlide]=\"open ? 'down' : 'up'\"\n #groupContent\n >\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [".sky-vertical-tabset-group{border-bottom:1px solid #e2e3e4;margin:5px 0 5px 5px}.sky-vertical-tabset-group-header button{cursor:pointer;display:flex;justify-content:space-between;border:none;width:100%;text-align:left;background:none}.sky-vertical-tabset-group-content{overflow:hidden;border-top:1px solid #e2e3e4}:host ::ng-deep .sky-vertical-tabset-group-expansion-indicator>button{font-size:14px!important}.sky-vertical-tabset-disabled{cursor:not-allowed;pointer-events:none}:host-context(.sky-theme-modern) .sky-vertical-tabset-group{border:none;margin:10px 0}:host-context(.sky-theme-modern) .sky-vertical-tabset-group-content{border:none;padding-left:25px}:host-context(.sky-theme-modern) .sky-vertical-tabset-group-header{position:relative}:host-context(.sky-theme-modern) .sky-vertical-tabset-group-expansion-indicator{position:absolute;top:6px;right:5px}.sky-theme-modern .sky-vertical-tabset-group{border:none;margin:10px 0}.sky-theme-modern .sky-vertical-tabset-group-content{border:none;padding-left:25px}.sky-theme-modern .sky-vertical-tabset-group-header{position:relative}.sky-theme-modern .sky-vertical-tabset-group-expansion-indicator{position:absolute;top:6px;right:5px}\n"], components: [{ type: i4.λ15, selector: "sky-expansion-indicator", inputs: ["direction"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.λ2, selector: "[skyId]", exportAs: ["skyId"] }], animations: [skyAnimationSlide], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
937
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyVerticalTabsetGroupComponent, decorators: [{
|
|
938
|
-
type: Component,
|
|
939
|
-
args: [{
|
|
940
|
-
selector: 'sky-vertical-tabset-group',
|
|
941
|
-
templateUrl: './vertical-tabset-group.component.html',
|
|
942
|
-
styleUrls: ['./vertical-tabset-group.component.scss'],
|
|
943
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
944
|
-
animations: [skyAnimationSlide],
|
|
945
|
-
}]
|
|
946
|
-
}], ctorParameters: function () { return [{ type: SkyVerticalTabsetService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { disabled: [{
|
|
947
|
-
type: Input
|
|
948
|
-
}], groupHeading: [{
|
|
949
|
-
type: Input
|
|
950
|
-
}], open: [{
|
|
951
|
-
type: Input
|
|
952
|
-
}], tabs: [{
|
|
953
|
-
type: ContentChildren,
|
|
954
|
-
args: [SkyVerticalTabComponent]
|
|
955
|
-
}] } });
|
|
956
|
-
|
|
957
761
|
class SkyVerticalTabsetModule {
|
|
958
762
|
}
|
|
959
763
|
SkyVerticalTabsetModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyVerticalTabsetModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
@@ -1003,6 +807,202 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
|
|
|
1003
807
|
}]
|
|
1004
808
|
}] });
|
|
1005
809
|
|
|
810
|
+
class SkySectionedFormService {
|
|
811
|
+
constructor() {
|
|
812
|
+
/**
|
|
813
|
+
* @internal
|
|
814
|
+
*/
|
|
815
|
+
this.invalidChange = new BehaviorSubject(undefined);
|
|
816
|
+
/**
|
|
817
|
+
* @internal
|
|
818
|
+
*/
|
|
819
|
+
this.requiredChange = new BehaviorSubject(undefined);
|
|
820
|
+
}
|
|
821
|
+
/**
|
|
822
|
+
* Sets the current section's invalid state based on the `isInvalid` parameter.
|
|
823
|
+
* This method is used within a `sky-sectioned-form-section` element.
|
|
824
|
+
*/
|
|
825
|
+
invalidFieldChanged(isInvalid) {
|
|
826
|
+
this.invalidChange.next(isInvalid);
|
|
827
|
+
}
|
|
828
|
+
/**
|
|
829
|
+
* Sets the current section's required state based on the `isRequired` parameter.
|
|
830
|
+
* This method is used within a `sky-sectioned-form-section` element.
|
|
831
|
+
*/
|
|
832
|
+
requiredFieldChanged(isRequired) {
|
|
833
|
+
this.requiredChange.next(isRequired);
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
SkySectionedFormService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkySectionedFormService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
837
|
+
SkySectionedFormService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkySectionedFormService });
|
|
838
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkySectionedFormService, decorators: [{
|
|
839
|
+
type: Injectable
|
|
840
|
+
}] });
|
|
841
|
+
|
|
842
|
+
let nextId$1 = 0;
|
|
843
|
+
/**
|
|
844
|
+
* Creates an individual form to display as a section within the sectioned form.
|
|
845
|
+
*/
|
|
846
|
+
class SkySectionedFormSectionComponent {
|
|
847
|
+
constructor(sectionedFormService, tabsetService, changeRef) {
|
|
848
|
+
this.sectionedFormService = sectionedFormService;
|
|
849
|
+
this.tabsetService = tabsetService;
|
|
850
|
+
this.changeRef = changeRef;
|
|
851
|
+
this.sectionTabId = `sky-sectioned-form-tab-${++nextId$1}`;
|
|
852
|
+
this.sectionContentId = `sky-sectioned-form-section-${++nextId$1}`;
|
|
853
|
+
/**
|
|
854
|
+
* Indicates whether the section is active when the form loads.
|
|
855
|
+
* @default false
|
|
856
|
+
*/
|
|
857
|
+
this.active = false;
|
|
858
|
+
this._ngUnsubscribe = new Subject();
|
|
859
|
+
}
|
|
860
|
+
ngOnInit() {
|
|
861
|
+
this.changeRef.detectChanges();
|
|
862
|
+
this.tabsetService.switchingMobile.subscribe((mobile) => {
|
|
863
|
+
this.changeRef.detectChanges();
|
|
864
|
+
});
|
|
865
|
+
this.sectionedFormService.requiredChange
|
|
866
|
+
.pipe(takeUntil(this._ngUnsubscribe))
|
|
867
|
+
.subscribe((required) => (this.fieldRequired = required));
|
|
868
|
+
this.sectionedFormService.invalidChange
|
|
869
|
+
.pipe(takeUntil(this._ngUnsubscribe))
|
|
870
|
+
.subscribe((invalid) => (this.fieldInvalid = invalid));
|
|
871
|
+
}
|
|
872
|
+
ngOnDestroy() {
|
|
873
|
+
this._ngUnsubscribe.next();
|
|
874
|
+
this._ngUnsubscribe.complete();
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
SkySectionedFormSectionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkySectionedFormSectionComponent, deps: [{ token: SkySectionedFormService }, { token: SkyVerticalTabsetService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
878
|
+
SkySectionedFormSectionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SkySectionedFormSectionComponent, selector: "sky-sectioned-form-section", inputs: { heading: "heading", itemCount: "itemCount", active: "active" }, providers: [SkySectionedFormService], viewQueries: [{ propertyName: "tab", first: true, predicate: SkyVerticalTabComponent, descendants: true }], ngImport: i0, template: "<sky-vertical-tab\n [active]=\"active\"\n [errorIndicator]=\"fieldInvalid\"\n [ngClass]=\"{\n 'sky-tab-field-required': fieldRequired\n }\"\n [showTabRightArrow]=\"true\"\n [tabHeaderCount]=\"itemCount\"\n [tabHeading]=\"heading\"\n [tabId]=\"sectionTabId\"\n>\n <ng-content></ng-content>\n</sky-vertical-tab>\n", styles: [":host .sky-tab-field-required ::ng-deep .sky-vertical-tab-heading:after{content:\"*\";color:#ef4044;padding-left:5px}\n"], components: [{ type: SkyVerticalTabComponent, selector: "sky-vertical-tab", inputs: ["active", "ariaControls", "ariaRole", "disabled", "errorIndicator", "tabHeaderCount", "tabHeading", "showTabRightArrow", "tabId"] }], directives: [{ type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
879
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkySectionedFormSectionComponent, decorators: [{
|
|
880
|
+
type: Component,
|
|
881
|
+
args: [{
|
|
882
|
+
selector: 'sky-sectioned-form-section',
|
|
883
|
+
templateUrl: './sectioned-form-section.component.html',
|
|
884
|
+
providers: [SkySectionedFormService],
|
|
885
|
+
styleUrls: ['./sectioned-form-section.component.scss'],
|
|
886
|
+
}]
|
|
887
|
+
}], ctorParameters: function () { return [{ type: SkySectionedFormService }, { type: SkyVerticalTabsetService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { heading: [{
|
|
888
|
+
type: Input
|
|
889
|
+
}], itemCount: [{
|
|
890
|
+
type: Input
|
|
891
|
+
}], active: [{
|
|
892
|
+
type: Input
|
|
893
|
+
}], tab: [{
|
|
894
|
+
type: ViewChild,
|
|
895
|
+
args: [SkyVerticalTabComponent]
|
|
896
|
+
}] } });
|
|
897
|
+
|
|
898
|
+
/**
|
|
899
|
+
* Creates a container for the sectioned forms.
|
|
900
|
+
*/
|
|
901
|
+
class SkySectionedFormComponent {
|
|
902
|
+
constructor(tabService, changeRef) {
|
|
903
|
+
this.tabService = tabService;
|
|
904
|
+
this.changeRef = changeRef;
|
|
905
|
+
/**
|
|
906
|
+
* Indicates whether the sectioned form loads section content during initialization so that it
|
|
907
|
+
* displays content without moving around elements in the content container.
|
|
908
|
+
* @default false
|
|
909
|
+
*/
|
|
910
|
+
this.maintainSectionContent = false;
|
|
911
|
+
/**
|
|
912
|
+
* Fires when the active tab changes and emits the index of the active
|
|
913
|
+
* section. The index is based on the section's position when the form loads.
|
|
914
|
+
*/
|
|
915
|
+
this.indexChanged = new EventEmitter();
|
|
916
|
+
this.isMobile = false;
|
|
917
|
+
this._ngUnsubscribe = new Subject();
|
|
918
|
+
}
|
|
919
|
+
get ariaRole() {
|
|
920
|
+
return this.isMobile ? undefined : 'tablist';
|
|
921
|
+
}
|
|
922
|
+
ngOnInit() {
|
|
923
|
+
this.tabService.maintainTabContent = this.maintainSectionContent;
|
|
924
|
+
this.tabService.indexChanged
|
|
925
|
+
.pipe(takeUntil(this._ngUnsubscribe))
|
|
926
|
+
.subscribe((index) => {
|
|
927
|
+
this.indexChanged.emit(index);
|
|
928
|
+
this.changeRef.markForCheck();
|
|
929
|
+
});
|
|
930
|
+
this.tabService.switchingMobile
|
|
931
|
+
.pipe(takeUntil(this._ngUnsubscribe))
|
|
932
|
+
.subscribe((mobile) => {
|
|
933
|
+
this.isMobile = mobile;
|
|
934
|
+
this.changeRef.markForCheck();
|
|
935
|
+
});
|
|
936
|
+
if (this.tabService.isMobile()) {
|
|
937
|
+
this.isMobile = true;
|
|
938
|
+
this.tabService.animationContentVisibleState = VISIBLE_STATE;
|
|
939
|
+
this.changeRef.markForCheck();
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
ngAfterViewChecked() {
|
|
943
|
+
this.tabService.content = this.content;
|
|
944
|
+
this.tabService.updateContent();
|
|
945
|
+
}
|
|
946
|
+
ngOnDestroy() {
|
|
947
|
+
this._ngUnsubscribe.next();
|
|
948
|
+
this._ngUnsubscribe.complete();
|
|
949
|
+
}
|
|
950
|
+
tabsVisible() {
|
|
951
|
+
this.changeRef.markForCheck();
|
|
952
|
+
return this.tabService.tabsVisible();
|
|
953
|
+
}
|
|
954
|
+
showTabs() {
|
|
955
|
+
this.tabService.showTabs();
|
|
956
|
+
this.changeRef.markForCheck();
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
SkySectionedFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkySectionedFormComponent, deps: [{ token: SkyVerticalTabsetService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
960
|
+
SkySectionedFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SkySectionedFormComponent, selector: "sky-sectioned-form", inputs: { maintainSectionContent: "maintainSectionContent" }, outputs: { indexChanged: "indexChanged" }, providers: [SkyVerticalTabsetService], viewQueries: [{ propertyName: "content", first: true, predicate: ["skySectionSideContent"], descendants: true }], ngImport: i0, template: "<div\n aria-orientation=\"vertical\"\n class=\"sky-sectioned-form\"\n [attr.role]=\"ariaRole\"\n (window:resize)=\"tabService.updateContent()\"\n>\n <div\n *ngIf=\"maintainSectionContent || tabsVisible()\"\n class=\"sky-sectioned-form-tabs\"\n [ngClass]=\"{ 'sky-sectioned-form-tabs-hidden': !tabsVisible() }\"\n [@tabEnter]=\"tabService.animationTabsVisibleState\"\n >\n <ng-content></ng-content>\n </div>\n <div\n *ngIf=\"maintainSectionContent || tabService.contentVisible()\"\n class=\"sky-sectioned-form-content\"\n [ngClass]=\"{\n 'sky-sectioned-form-content-hidden': !tabService.contentVisible()\n }\"\n [@contentEnter]=\"tabService.animationContentVisibleState\"\n #skySectionSideContent\n ></div>\n</div>\n", styles: [":host .sky-sectioned-form{display:block;max-height:none}:host .sky-sectioned-form-content{flex-basis:auto;overflow-y:visible}:host .sky-sectioned-form-tabs{flex-basis:auto;overflow-y:visible;border-right:1px solid #e2e3e4}:host-context(.sky-responsive-container-xs) .sky-sectioned-form,:host-context(.sky-responsive-container-sm) .sky-sectioned-form,:host-context(.sky-responsive-container-md) .sky-sectioned-form,:host-context(.sky-responsive-container-lg) .sky-sectioned-form{display:block;max-height:none}:host-context(.sky-responsive-container-xs) .sky-sectioned-form-content,:host-context(.sky-responsive-container-sm) .sky-sectioned-form-content,:host-context(.sky-responsive-container-md) .sky-sectioned-form-content,:host-context(.sky-responsive-container-lg) .sky-sectioned-form-content{flex-basis:auto;overflow-y:visible}:host-context(.sky-responsive-container-xs) .sky-sectioned-form-tabs,:host-context(.sky-responsive-container-sm) .sky-sectioned-form-tabs,:host-context(.sky-responsive-container-md) .sky-sectioned-form-tabs,:host-context(.sky-responsive-container-lg) .sky-sectioned-form-tabs{flex-basis:auto;overflow-y:visible;border-right:1px solid #e2e3e4}@media (min-width: 768px){:host .sky-sectioned-form{display:flex;max-height:100%}:host .sky-sectioned-form-content{flex-basis:70%;margin:15px;overflow-y:auto}:host .sky-sectioned-form-tabs{flex-basis:30%;overflow-y:auto}}:host-context(.sky-responsive-container-sm) .sky-sectioned-form,:host-context(.sky-responsive-container-md) .sky-sectioned-form,:host-context(.sky-responsive-container-lg) .sky-sectioned-form{display:flex;max-height:100%}:host-context(.sky-responsive-container-sm) .sky-sectioned-form-content,:host-context(.sky-responsive-container-md) .sky-sectioned-form-content,:host-context(.sky-responsive-container-lg) .sky-sectioned-form-content{flex-basis:70%;margin:15px;overflow-y:auto}:host-context(.sky-responsive-container-sm) .sky-sectioned-form-tabs,:host-context(.sky-responsive-container-md) .sky-sectioned-form-tabs,:host-context(.sky-responsive-container-lg) .sky-sectioned-form-tabs{flex-basis:30%;overflow-y:auto}.sky-sectioned-form-tabs-hidden{display:none}.sky-sectioned-form-content-hidden{display:none}:host-context(.sky-theme-modern) .sky-sectioned-form-content{margin:15px}:host-context(.sky-theme-modern) .sky-sectioned-form-tabs{border-right:1px solid #d2d2d2}@media (min-width: 768px){:host-context(.sky-theme-modern) :host .sky-sectioned-form-content{margin:20px 30px}}:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-sm) .sky-sectioned-form-content,:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-md) .sky-sectioned-form-content,:host-context(.sky-theme-modern) :host-context(.sky-responsive-container-lg) .sky-sectioned-form-content{margin:20px 30px}.sky-theme-modern .sky-sectioned-form-content{margin:15px}.sky-theme-modern .sky-sectioned-form-tabs{border-right:1px solid #d2d2d2}@media (min-width: 768px){.sky-theme-modern :host .sky-sectioned-form-content{margin:20px 30px}}.sky-theme-modern :host-context(.sky-responsive-container-sm) .sky-sectioned-form-content,.sky-theme-modern :host-context(.sky-responsive-container-md) .sky-sectioned-form-content,.sky-theme-modern :host-context(.sky-responsive-container-lg) .sky-sectioned-form-content{margin:20px 30px}\n"], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], animations: [
|
|
961
|
+
trigger('tabEnter', [
|
|
962
|
+
transition(`${HIDDEN_STATE} => ${VISIBLE_STATE}`, [
|
|
963
|
+
style({ transform: 'translate(-100%)' }),
|
|
964
|
+
animate('150ms ease-in'),
|
|
965
|
+
]),
|
|
966
|
+
]),
|
|
967
|
+
trigger('contentEnter', [
|
|
968
|
+
transition(`${HIDDEN_STATE} => ${VISIBLE_STATE}`, [
|
|
969
|
+
style({ transform: 'translate(100%)' }),
|
|
970
|
+
animate('150ms ease-in'),
|
|
971
|
+
]),
|
|
972
|
+
]),
|
|
973
|
+
], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
974
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkySectionedFormComponent, decorators: [{
|
|
975
|
+
type: Component,
|
|
976
|
+
args: [{
|
|
977
|
+
selector: 'sky-sectioned-form',
|
|
978
|
+
templateUrl: './sectioned-form.component.html',
|
|
979
|
+
styleUrls: ['./sectioned-form.component.scss'],
|
|
980
|
+
providers: [SkyVerticalTabsetService],
|
|
981
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
982
|
+
animations: [
|
|
983
|
+
trigger('tabEnter', [
|
|
984
|
+
transition(`${HIDDEN_STATE} => ${VISIBLE_STATE}`, [
|
|
985
|
+
style({ transform: 'translate(-100%)' }),
|
|
986
|
+
animate('150ms ease-in'),
|
|
987
|
+
]),
|
|
988
|
+
]),
|
|
989
|
+
trigger('contentEnter', [
|
|
990
|
+
transition(`${HIDDEN_STATE} => ${VISIBLE_STATE}`, [
|
|
991
|
+
style({ transform: 'translate(100%)' }),
|
|
992
|
+
animate('150ms ease-in'),
|
|
993
|
+
]),
|
|
994
|
+
]),
|
|
995
|
+
],
|
|
996
|
+
}]
|
|
997
|
+
}], ctorParameters: function () { return [{ type: SkyVerticalTabsetService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { maintainSectionContent: [{
|
|
998
|
+
type: Input
|
|
999
|
+
}], indexChanged: [{
|
|
1000
|
+
type: Output
|
|
1001
|
+
}], content: [{
|
|
1002
|
+
type: ViewChild,
|
|
1003
|
+
args: ['skySectionSideContent']
|
|
1004
|
+
}] } });
|
|
1005
|
+
|
|
1006
1006
|
class SkySectionedFormModule {
|
|
1007
1007
|
}
|
|
1008
1008
|
SkySectionedFormModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkySectionedFormModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
@@ -1946,17 +1946,17 @@ class SkyTabsetNavButtonComponent {
|
|
|
1946
1946
|
return selectedTab;
|
|
1947
1947
|
}
|
|
1948
1948
|
get nextTab() {
|
|
1949
|
-
|
|
1949
|
+
const selectedTab = this.selectedTab;
|
|
1950
1950
|
if (selectedTab) {
|
|
1951
|
-
|
|
1951
|
+
const tabs = this.tabset.tabs.toArray();
|
|
1952
1952
|
return tabs[tabs.indexOf(selectedTab) + 1];
|
|
1953
1953
|
}
|
|
1954
1954
|
return undefined;
|
|
1955
1955
|
}
|
|
1956
1956
|
get previousTab() {
|
|
1957
|
-
|
|
1957
|
+
const selectedTab = this.selectedTab;
|
|
1958
1958
|
if (selectedTab) {
|
|
1959
|
-
|
|
1959
|
+
const tabs = this.tabset.tabs.toArray();
|
|
1960
1960
|
return tabs[tabs.indexOf(selectedTab) - 1];
|
|
1961
1961
|
}
|
|
1962
1962
|
return undefined;
|