@skyux/core 5.0.0 → 5.1.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-core.umd.js +128 -32
- package/bundles/skyux-core.umd.js.map +1 -1
- package/documentation.json +968 -654
- package/esm2015/modules/scrollable-host/scrollable-host.service.js +75 -0
- package/esm2015/modules/viewkeeper/viewkeeper-host-options.js +1 -1
- package/esm2015/modules/viewkeeper/viewkeeper-options.js +1 -1
- package/esm2015/modules/viewkeeper/viewkeeper.directive.js +34 -15
- package/esm2015/modules/viewkeeper/viewkeeper.js +16 -11
- package/esm2015/public-api.js +2 -1
- package/fesm2015/skyux-core.js +115 -25
- package/fesm2015/skyux-core.js.map +1 -1
- package/modules/scrollable-host/scrollable-host.service.d.ts +16 -0
- package/modules/viewkeeper/viewkeeper-host-options.d.ts +1 -0
- package/modules/viewkeeper/viewkeeper-options.d.ts +5 -0
- package/modules/viewkeeper/viewkeeper.d.ts +1 -0
- package/modules/viewkeeper/viewkeeper.directive.d.ts +5 -2
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
@@ -2935,6 +2935,77 @@
|
|
2935
2935
|
}]
|
2936
2936
|
}] });
|
2937
2937
|
|
2938
|
+
var SkyScrollableHostService = /** @class */ (function () {
|
2939
|
+
function SkyScrollableHostService(mutationObserverSvc, windowRef) {
|
2940
|
+
this.mutationObserverSvc = mutationObserverSvc;
|
2941
|
+
this.windowRef = windowRef;
|
2942
|
+
}
|
2943
|
+
SkyScrollableHostService.prototype.getScrollabeHost = function (elementRef) {
|
2944
|
+
return this.findScrollableHost(elementRef.nativeElement);
|
2945
|
+
};
|
2946
|
+
SkyScrollableHostService.prototype.watchScrollableHost = function (elementRef, completionObservable) {
|
2947
|
+
var _this = this;
|
2948
|
+
var scrollableHost = this.findScrollableHost(elementRef.nativeElement);
|
2949
|
+
var behaviorSubject = new rxjs.BehaviorSubject(scrollableHost);
|
2950
|
+
var mutationObserver = this.mutationObserverSvc.create(function () {
|
2951
|
+
var newScrollableHost = _this.findScrollableHost(elementRef.nativeElement);
|
2952
|
+
if (newScrollableHost !== scrollableHost) {
|
2953
|
+
scrollableHost = newScrollableHost;
|
2954
|
+
_this.observeForScrollableHostChanges(scrollableHost, mutationObserver);
|
2955
|
+
behaviorSubject.next(scrollableHost);
|
2956
|
+
}
|
2957
|
+
});
|
2958
|
+
this.observeForScrollableHostChanges(scrollableHost, mutationObserver);
|
2959
|
+
completionObservable.pipe(operators.take(1)).subscribe(function () {
|
2960
|
+
mutationObserver.disconnect();
|
2961
|
+
});
|
2962
|
+
return behaviorSubject;
|
2963
|
+
};
|
2964
|
+
SkyScrollableHostService.prototype.findScrollableHost = function (element) {
|
2965
|
+
var regex = /(auto|scroll)/;
|
2966
|
+
var windowObj = this.windowRef.nativeWindow;
|
2967
|
+
var bodyObj = windowObj.document.body;
|
2968
|
+
var style = windowObj.getComputedStyle(element);
|
2969
|
+
var parent = element;
|
2970
|
+
do {
|
2971
|
+
parent = parent.parentNode;
|
2972
|
+
style = windowObj.getComputedStyle(parent);
|
2973
|
+
} while (!regex.test(style.overflow) &&
|
2974
|
+
!regex.test(style.overflowY) &&
|
2975
|
+
parent !== bodyObj);
|
2976
|
+
if (parent === bodyObj) {
|
2977
|
+
return windowObj;
|
2978
|
+
}
|
2979
|
+
return parent;
|
2980
|
+
};
|
2981
|
+
SkyScrollableHostService.prototype.observeForScrollableHostChanges = function (element, mutationObserver) {
|
2982
|
+
mutationObserver.disconnect();
|
2983
|
+
if (element instanceof HTMLElement) {
|
2984
|
+
mutationObserver.observe(element, {
|
2985
|
+
attributes: true,
|
2986
|
+
attributeFilter: ["class", "style.overflow", "style.overflow-y"],
|
2987
|
+
subtree: true
|
2988
|
+
});
|
2989
|
+
}
|
2990
|
+
else {
|
2991
|
+
mutationObserver.observe(document.documentElement, {
|
2992
|
+
attributes: true,
|
2993
|
+
attributeFilter: ["class", "style.overflow", "style.overflow-y"],
|
2994
|
+
subtree: true
|
2995
|
+
});
|
2996
|
+
}
|
2997
|
+
};
|
2998
|
+
return SkyScrollableHostService;
|
2999
|
+
}());
|
3000
|
+
SkyScrollableHostService.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0__namespace, type: SkyScrollableHostService, deps: [{ token: MutationObserverService }, { token: SkyAppWindowRef }], target: i0__namespace.ɵɵFactoryTarget.Injectable });
|
3001
|
+
SkyScrollableHostService.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0__namespace, type: SkyScrollableHostService, providedIn: 'root' });
|
3002
|
+
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0__namespace, type: SkyScrollableHostService, decorators: [{
|
3003
|
+
type: i0.Injectable,
|
3004
|
+
args: [{
|
3005
|
+
providedIn: 'root'
|
3006
|
+
}]
|
3007
|
+
}], ctorParameters: function () { return [{ type: MutationObserverService }, { type: SkyAppWindowRef }]; } });
|
3008
|
+
|
2938
3009
|
/**
|
2939
3010
|
* Provides a method for setting a formatted title on the current window.
|
2940
3011
|
*/
|
@@ -3011,11 +3082,12 @@
|
|
3011
3082
|
nextIdIndex = (nextIdIndex || 0) + 1;
|
3012
3083
|
return 'viewkeeper-' + nextIdIndex;
|
3013
3084
|
}
|
3014
|
-
function getOffset(el) {
|
3085
|
+
function getOffset(el, scrollableHost) {
|
3015
3086
|
var rect = el.getBoundingClientRect();
|
3087
|
+
var parent = scrollableHost ? scrollableHost : document.documentElement;
|
3016
3088
|
return {
|
3017
|
-
top: rect.top +
|
3018
|
-
left: rect.left +
|
3089
|
+
top: rect.top + parent.scrollTop,
|
3090
|
+
left: rect.left + parent.scrollLeft
|
3019
3091
|
};
|
3020
3092
|
}
|
3021
3093
|
function px(value) {
|
@@ -3052,6 +3124,7 @@
|
|
3052
3124
|
this.id = nextId();
|
3053
3125
|
this.el = options.el;
|
3054
3126
|
this.boundaryEl = options.boundaryEl;
|
3127
|
+
this.scrollableHost = options.scrollableHost;
|
3055
3128
|
this.verticalOffset = options.verticalOffset || 0;
|
3056
3129
|
this.verticalOffsetEl = options.verticalOffsetEl;
|
3057
3130
|
this.viewportMarginTop = options.viewportMarginTop || 0;
|
@@ -3059,7 +3132,7 @@
|
|
3059
3132
|
if (this.verticalOffsetEl) {
|
3060
3133
|
this.verticalOffsetEl.addEventListener(EVT_AFTER_VIEWKEEPER_SYNC, this.syncElPositionHandler);
|
3061
3134
|
}
|
3062
|
-
window.addEventListener('scroll', this.syncElPositionHandler);
|
3135
|
+
window.addEventListener('scroll', this.syncElPositionHandler, true);
|
3063
3136
|
window.addEventListener('resize', this.syncElPositionHandler);
|
3064
3137
|
window.addEventListener('orientationchange', this.syncElPositionHandler);
|
3065
3138
|
ensureStyleEl();
|
@@ -3087,7 +3160,7 @@
|
|
3087
3160
|
};
|
3088
3161
|
SkyViewkeeper.prototype.destroy = function () {
|
3089
3162
|
if (!this.isDestroyed) {
|
3090
|
-
window.removeEventListener('scroll', this.syncElPositionHandler);
|
3163
|
+
window.removeEventListener('scroll', this.syncElPositionHandler, true);
|
3091
3164
|
window.removeEventListener('resize', this.syncElPositionHandler);
|
3092
3165
|
window.removeEventListener('orientationchange', this.syncElPositionHandler);
|
3093
3166
|
this.unfixEl();
|
@@ -3125,16 +3198,19 @@
|
|
3125
3198
|
var verticalOffsetElTop = parseInt(verticalOffsetElTopStyle, 10) || 0;
|
3126
3199
|
offset += (this.verticalOffsetEl.offsetHeight + verticalOffsetElTop);
|
3127
3200
|
}
|
3201
|
+
else if (this.scrollableHost) {
|
3202
|
+
offset += this.scrollableHost.getBoundingClientRect().top;
|
3203
|
+
}
|
3128
3204
|
return offset;
|
3129
3205
|
};
|
3130
3206
|
SkyViewkeeper.prototype.shouldFixEl = function (boundaryInfo, verticalOffset) {
|
3131
3207
|
var anchorTop;
|
3132
3208
|
var doFixEl;
|
3133
3209
|
if (boundaryInfo.spacerEl) {
|
3134
|
-
anchorTop = getOffset(boundaryInfo.spacerEl).top;
|
3210
|
+
anchorTop = getOffset(boundaryInfo.spacerEl, this.scrollableHost).top;
|
3135
3211
|
}
|
3136
3212
|
else {
|
3137
|
-
anchorTop = getOffset(this.el).top;
|
3213
|
+
anchorTop = getOffset(this.el, this.scrollableHost).top;
|
3138
3214
|
}
|
3139
3215
|
doFixEl = boundaryInfo.scrollTop + verticalOffset + this.viewportMarginTop > anchorTop;
|
3140
3216
|
return doFixEl;
|
@@ -3193,11 +3269,11 @@
|
|
3193
3269
|
var spacerId = this.getSpacerId();
|
3194
3270
|
var spacerEl = document.getElementById(spacerId);
|
3195
3271
|
var boundaryEl = this.boundaryEl;
|
3196
|
-
var boundaryOffset = getOffset(boundaryEl);
|
3272
|
+
var boundaryOffset = getOffset(boundaryEl, this.scrollableHost);
|
3197
3273
|
var boundaryTop = boundaryOffset.top;
|
3198
3274
|
var boundaryBottom = boundaryTop + boundaryEl.getBoundingClientRect().height;
|
3199
|
-
var scrollLeft = document.documentElement.scrollLeft;
|
3200
|
-
var scrollTop = document.documentElement.scrollTop;
|
3275
|
+
var scrollLeft = this.scrollableHost ? this.scrollableHost.scrollLeft : document.documentElement.scrollLeft;
|
3276
|
+
var scrollTop = this.scrollableHost ? this.scrollableHost.scrollTop : document.documentElement.scrollTop;
|
3201
3277
|
var elHeight = getHeightWithMargin(this.el);
|
3202
3278
|
return {
|
3203
3279
|
boundaryBottom: boundaryBottom,
|
@@ -3251,11 +3327,13 @@
|
|
3251
3327
|
} });
|
3252
3328
|
|
3253
3329
|
var SkyViewkeeperDirective = /** @class */ (function () {
|
3254
|
-
function SkyViewkeeperDirective(el, mutationObserverSvc, viewkeeperSvc) {
|
3330
|
+
function SkyViewkeeperDirective(el, mutationObserverSvc, viewkeeperSvc, scrollableHostService) {
|
3255
3331
|
this.el = el;
|
3256
3332
|
this.mutationObserverSvc = mutationObserverSvc;
|
3257
3333
|
this.viewkeeperSvc = viewkeeperSvc;
|
3334
|
+
this.scrollableHostService = scrollableHostService;
|
3258
3335
|
this.viewkeepers = [];
|
3336
|
+
this.scrollableHostWatchUnsubscribe = undefined;
|
3259
3337
|
}
|
3260
3338
|
Object.defineProperty(SkyViewkeeperDirective.prototype, "skyViewkeeper", {
|
3261
3339
|
get: function () {
|
@@ -3336,43 +3414,60 @@
|
|
3336
3414
|
return false;
|
3337
3415
|
};
|
3338
3416
|
SkyViewkeeperDirective.prototype.detectElements = function () {
|
3339
|
-
var
|
3417
|
+
var _this = this;
|
3340
3418
|
var viewkeeperEls = this.getViewkeeperEls();
|
3341
3419
|
if (this.viewkeeperElsChanged(viewkeeperEls)) {
|
3342
|
-
this.
|
3343
|
-
|
3344
|
-
|
3345
|
-
for (var viewkeeperEls_1 = __values(viewkeeperEls), viewkeeperEls_1_1 = viewkeeperEls_1.next(); !viewkeeperEls_1_1.done; viewkeeperEls_1_1 = viewkeeperEls_1.next()) {
|
3346
|
-
var viewkeeperEl = viewkeeperEls_1_1.value;
|
3347
|
-
this.viewkeepers.push(this.viewkeeperSvc.create({
|
3348
|
-
boundaryEl: this.el.nativeElement,
|
3349
|
-
el: viewkeeperEl,
|
3350
|
-
setWidth: true,
|
3351
|
-
verticalOffsetEl: previousViewkeeperEl
|
3352
|
-
}));
|
3353
|
-
previousViewkeeperEl = viewkeeperEl;
|
3354
|
-
}
|
3420
|
+
if (this.scrollableHostWatchUnsubscribe) {
|
3421
|
+
this.scrollableHostWatchUnsubscribe.next();
|
3422
|
+
this.scrollableHostWatchUnsubscribe = new rxjs.Subject();
|
3355
3423
|
}
|
3356
|
-
|
3357
|
-
|
3424
|
+
else {
|
3425
|
+
this.scrollableHostWatchUnsubscribe = new rxjs.Subject();
|
3426
|
+
}
|
3427
|
+
this.scrollableHostService.watchScrollableHost(this.el, this.scrollableHostWatchUnsubscribe)
|
3428
|
+
.pipe(operators.takeUntil(this.scrollableHostWatchUnsubscribe))
|
3429
|
+
.subscribe(function (scrollableHost) {
|
3430
|
+
var e_3, _a;
|
3431
|
+
_this.destroyViewkeepers();
|
3432
|
+
var previousViewkeeperEl;
|
3358
3433
|
try {
|
3359
|
-
|
3434
|
+
for (var viewkeeperEls_1 = __values(viewkeeperEls), viewkeeperEls_1_1 = viewkeeperEls_1.next(); !viewkeeperEls_1_1.done; viewkeeperEls_1_1 = viewkeeperEls_1.next()) {
|
3435
|
+
var viewkeeperEl = viewkeeperEls_1_1.value;
|
3436
|
+
_this.viewkeepers.push(_this.viewkeeperSvc.create({
|
3437
|
+
boundaryEl: _this.el.nativeElement,
|
3438
|
+
scrollableHost: scrollableHost instanceof HTMLElement ? scrollableHost : undefined,
|
3439
|
+
el: viewkeeperEl,
|
3440
|
+
setWidth: true,
|
3441
|
+
verticalOffsetEl: previousViewkeeperEl
|
3442
|
+
}));
|
3443
|
+
previousViewkeeperEl = viewkeeperEl;
|
3444
|
+
}
|
3360
3445
|
}
|
3361
|
-
|
3362
|
-
|
3446
|
+
catch (e_3_1) { e_3 = { error: e_3_1 }; }
|
3447
|
+
finally {
|
3448
|
+
try {
|
3449
|
+
if (viewkeeperEls_1_1 && !viewkeeperEls_1_1.done && (_a = viewkeeperEls_1.return)) _a.call(viewkeeperEls_1);
|
3450
|
+
}
|
3451
|
+
finally { if (e_3) throw e_3.error; }
|
3452
|
+
}
|
3453
|
+
});
|
3363
3454
|
this.currentViewkeeperEls = viewkeeperEls;
|
3364
3455
|
}
|
3365
3456
|
};
|
3366
3457
|
return SkyViewkeeperDirective;
|
3367
3458
|
}());
|
3368
|
-
SkyViewkeeperDirective.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0__namespace, type: SkyViewkeeperDirective, deps: [{ token: i0__namespace.ElementRef }, { token: MutationObserverService }, { token: SkyViewkeeperService }], target: i0__namespace.ɵɵFactoryTarget.Directive });
|
3459
|
+
SkyViewkeeperDirective.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0__namespace, type: SkyViewkeeperDirective, deps: [{ token: i0__namespace.ElementRef }, { token: MutationObserverService }, { token: SkyViewkeeperService }, { token: SkyScrollableHostService, optional: true }], target: i0__namespace.ɵɵFactoryTarget.Directive });
|
3369
3460
|
SkyViewkeeperDirective.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.7", type: SkyViewkeeperDirective, selector: "[skyViewkeeper]", inputs: { skyViewkeeper: "skyViewkeeper" }, ngImport: i0__namespace });
|
3370
3461
|
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.7", ngImport: i0__namespace, type: SkyViewkeeperDirective, decorators: [{
|
3371
3462
|
type: i0.Directive,
|
3372
3463
|
args: [{
|
3373
3464
|
selector: '[skyViewkeeper]'
|
3374
3465
|
}]
|
3375
|
-
}], ctorParameters: function () {
|
3466
|
+
}], ctorParameters: function () {
|
3467
|
+
return [{ type: i0__namespace.ElementRef }, { type: MutationObserverService }, { type: SkyViewkeeperService }, { type: SkyScrollableHostService, decorators: [{
|
3468
|
+
type: i0.Optional
|
3469
|
+
}] }];
|
3470
|
+
}, propDecorators: { skyViewkeeper: [{
|
3376
3471
|
type: i0.Input
|
3377
3472
|
}] } });
|
3378
3473
|
|
@@ -3428,6 +3523,7 @@
|
|
3428
3523
|
exports.SkyOverlayService = SkyOverlayService;
|
3429
3524
|
exports.SkyPercentPipe = SkyPercentPipe;
|
3430
3525
|
exports.SkyPercentPipeModule = SkyPercentPipeModule;
|
3526
|
+
exports.SkyScrollableHostService = SkyScrollableHostService;
|
3431
3527
|
exports.SkyUIConfigService = SkyUIConfigService;
|
3432
3528
|
exports.SkyViewkeeperHostOptions = SkyViewkeeperHostOptions;
|
3433
3529
|
exports.SkyViewkeeperModule = SkyViewkeeperModule;
|