@taiga-ui/kit
Version:
Taiga UI Angular main components kit
72 lines • 13.2 kB
JavaScript
import { inject, Injectable } from '@angular/core';
import { MutationObserverService } from '@ng-web-apis/mutation-observer';
import { ResizeObserverService } from '@ng-web-apis/resize-observer';
import { tuiZonefreeScheduler, tuiZoneOptimized } from '@taiga-ui/cdk/observables';
import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
import { tuiClamp } from '@taiga-ui/cdk/utils/math';
import { debounceTime, distinctUntilChanged, map, merge, Observable, share } from 'rxjs';
import { TuiItemsWithMoreDirective } from './items-with-more.directive';
import * as i0 from "@angular/core";
class TuiItemsWithMoreService extends Observable {
constructor() {
super((subscriber) => this.stream$.subscribe(subscriber));
this.el = tuiInjectElement();
this.directive = inject(TuiItemsWithMoreDirective);
this.stream$ = merge(this.directive.change$, inject(MutationObserverService, { self: true }), inject(ResizeObserverService, { self: true })).pipe(debounceTime(0, tuiZonefreeScheduler()), map(() => this.getOverflowIndex()), distinctUntilChanged(), tuiZoneOptimized(), share());
}
getOverflowIndex() {
const { side, itemsLimit } = this.directive;
const { clientWidth, children } = this.el;
const items = Array.from(children, ({ clientWidth }) => clientWidth);
const index = side === 'start' ? 0 : items.length - 1;
const more = children[index]?.tagName === 'SPAN' ? (items[index] ?? 0) : 0;
const total = items.reduce((sum, width) => sum + width, 0) - more;
if (total <= clientWidth && itemsLimit >= items.length) {
return side === 'end' ? itemsLimit : 0;
}
return side === 'start'
? this.getIndexStart(items, total, more)
: this.getIndexEnd(items, total, more);
}
getIndexStart(items, total, more) {
const { required, itemsLimit } = this.directive;
const { clientWidth } = this.el;
const min = Number.isFinite(itemsLimit) ? items.length - itemsLimit - 1 : 0;
const last = items.length - 1;
const mandatory = required === -1 ? last : required;
for (let i = 1; i < last; i++) {
if (i === mandatory + 1) {
continue;
}
total -= items[i] ?? 0;
if (total + more <= clientWidth) {
return tuiClamp(i, mandatory < min ? min + 1 : min, items.length);
}
}
return items.length;
}
getIndexEnd(items, total, more) {
const { required, itemsLimit } = this.directive;
const { clientWidth } = this.el;
const max = itemsLimit > required ? itemsLimit - 1 : itemsLimit - 2;
const last = items.length - 1;
const mandatory = required === -1 ? 0 : required;
for (let i = last - 1; i > 0; i--) {
if (i === mandatory) {
continue;
}
total -= items[i] ?? 0;
if (total + more <= clientWidth) {
return tuiClamp(i - 1, -1, max);
}
}
return -1;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiItemsWithMoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiItemsWithMoreService }); }
}
export { TuiItemsWithMoreService };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiItemsWithMoreService, decorators: [{
type: Injectable
}], ctorParameters: function () { return []; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbXMtd2l0aC1tb3JlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXQvY29tcG9uZW50cy9pdGVtcy13aXRoLW1vcmUvaXRlbXMtd2l0aC1tb3JlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFDLG9CQUFvQixFQUFFLGdCQUFnQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDakYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXZGLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDOztBQUV0RSxNQUNhLHVCQUF3QixTQUFRLFVBQWtCO0lBZ0IzRDtRQUNJLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQWhCN0MsT0FBRSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsY0FBUyxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBRTVDLFlBQU8sR0FBRyxLQUFLLENBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUN0QixNQUFNLENBQUMsdUJBQXVCLEVBQUUsRUFBQyxJQUFJ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QUMsQ0FBQztJQUNkLENBQUM7K0dBL0VRLHVCQUF1QjttSEFBdkIsdUJBQXVCOztTQUF2Qix1QkFBdUI7NEZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TXV0YXRpb25PYnNlcnZlclNlcnZpY2V9IGZyb20gJ0BuZy13ZWItYXBpcy9tdXRhdGlvbi1vYnNlcnZlcic7XG5pbXBvcnQge1Jlc2l6ZU9ic2VydmVyU2VydmljZX0gZnJvbSAnQG5nLXdlYi1hcGlzL3Jlc2l6ZS1vYnNlcnZlcic7XG5pbXBvcnQge3R1aVpvbmVmcmVlU2NoZWR1bGVyLCB0dWlab25lT3B0aW1pemVkfSBmcm9tICdAdGFpZ2EtdWkvY2RrL29ic2VydmFibGVzJztcbmltcG9ydCB7dHVpSW5qZWN0RWxlbWVudH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9kb20nO1xuaW1wb3J0IHt0dWlDbGFtcH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9tYXRoJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBtZXJnZSwgT2JzZXJ2YWJsZSwgc2hhcmV9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1R1aUl0ZW1zV2l0aE1vcmVEaXJlY3RpdmV9IGZyb20gJy4vaXRlbXMtd2l0aC1tb3JlLmRpcmVjdGl2ZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUdWlJdGVtc1dpdGhNb3JlU2VydmljZSBleHRlbmRzIE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbCA9IHR1aUluamVjdEVsZW1lbnQoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpcmVjdGl2ZSA9IGluamVjdChUdWlJdGVtc1dpdGhNb3JlRGlyZWN0aXZlKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBzdHJlYW0kID0gbWVyZ2UoXG4gICAgICAgIHRoaXMuZGlyZWN0aXZlLmNoYW5nZSQsXG4gICAgICAgIGluamVjdChNdXRhdGlvbk9ic2VydmVyU2VydmljZSwge3NlbGY6IHRydWV9KSxcbiAgICAgICAgaW5qZWN0KFJlc2l6ZU9ic2VydmVyU2VydmljZSwge3NlbGY6IHRydWV9KSxcbiAgICApLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgwLCB0dWlab25lZnJlZVNjaGVkdWxlcigpKSxcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuZ2V0T3ZlcmZsb3dJbmRleCgpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdHVpWm9uZU9wdGltaXplZCgpLFxuICAgICAgICBzaGFyZSgpLFxuICAgICk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKHN1YnNjcmliZXIpID0+IHRoaXMuc3RyZWFtJC5zdWJzY3JpYmUoc3Vic2NyaWJlcikpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3ZlcmZsb3dJbmRleCgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB7c2lkZSwgaXRlbXNMaW1pdH0gPSB0aGlzLmRpcmVjdGl2ZTtcbiAgICAgICAgY29uc3Qge2NsaWVudFdpZHRoLCBjaGlsZHJlbn0gPSB0aGlzLmVsO1xuICAgICAgICBjb25zdCBpdGVtcyA9IEFycmF5LmZyb20oY2hpbGRyZW4sICh7Y2xpZW50V2lkdGh9KSA9PiBjbGllbnRXaWR0aCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gc2lkZSA9PT0gJ3N0YXJ0JyA/IDAgOiBpdGVtcy5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBtb3JlID0gY2hpbGRyZW5baW5kZXhdPy50YWdOYW1lID09PSAnU1BBTicgPyAoaXRlbXNbaW5kZXhdID8/IDApIDogMDtcbiAgICAgICAgY29uc3QgdG90YWwgPSBpdGVtcy5yZWR1Y2UoKHN1bSwgd2lkdGgpID0+IHN1bSArIHdpZHRoLCAwKSAtIG1vcmU7XG5cbiAgICAgICAgaWYgKHRvdGFsIDw9IGNsaWVudFdpZHRoICYmIGl0ZW1zTGltaXQgPj0gaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gc2lkZSA9PT0gJ2VuZCcgPyBpdGVtc0xpbWl0IDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzaWRlID09PSAnc3RhcnQnXG4gICAgICAgICAgICA/IHRoaXMuZ2V0SW5kZXhTdGFydChpdGVtcywgdG90YWwsIG1vcmUpXG4gICAgICAgICAgICA6IHRoaXMuZ2V0SW5kZXhFbmQoaXRlbXMsIHRvdGFsLCBtb3JlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEluZGV4U3RhcnQoaXRlbXM6IG51bWJlcltdLCB0b3RhbDogbnVtYmVyLCBtb3JlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCB7cmVxdWlyZWQsIGl0ZW1zTGltaXR9ID0gdGhpcy5kaXJlY3RpdmU7XG4gICAgICAgIGNvbnN0IHtjbGllbnRXaWR0aH0gPSB0aGlzLmVsO1xuICAgICAgICBjb25zdCBtaW4gPSBOdW1iZXIuaXNGaW5pdGUoaXRlbXNMaW1pdCkgPyBpdGVtcy5sZW5ndGggLSBpdGVtc0xpbWl0IC0gMSA6IDA7XG4gICAgICAgIGNvbnN0IGxhc3QgPSBpdGVtcy5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBtYW5kYXRvcnkgPSByZXF1aXJlZCA9PT0gLTEgPyBsYXN0IDogcmVxdWlyZWQ7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBsYXN0OyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpID09PSBtYW5kYXRvcnkgKyAxKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRvdGFsIC09IGl0ZW1zW2ldID8/IDA7XG5cbiAgICAgICAgICAgIGlmICh0b3RhbCArIG1vcmUgPD0gY2xpZW50V2lkdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHVpQ2xhbXAoaSwgbWFuZGF0b3J5IDwgbWluID8gbWluICsgMSA6IG1pbiwgaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJbmRleEVuZChpdGVtczogbnVtYmVyW10sIHRvdGFsOiBudW1iZXIsIG1vcmU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHtyZXF1aXJlZCwgaXRlbXNMaW1pdH0gPSB0aGlzLmRpcmVjdGl2ZTtcbiAgICAgICAgY29uc3Qge2NsaWVudFdpZHRofSA9IHRoaXMuZWw7XG4gICAgICAgIGNvbnN0IG1heCA9IGl0ZW1zTGltaXQgPiByZXF1aXJlZCA/IGl0ZW1zTGltaXQgLSAxIDogaXRlbXNMaW1pdCAtIDI7XG4gICAgICAgIGNvbnN0IGxhc3QgPSBpdGVtcy5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBtYW5kYXRvcnkgPSByZXF1aXJlZCA9PT0gLTEgPyAwIDogcmVxdWlyZWQ7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGxhc3QgLSAxOyBpID4gMDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gbWFuZGF0b3J5KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRvdGFsIC09IGl0ZW1zW2ldID8/IDA7XG5cbiAgICAgICAgICAgIGlmICh0b3RhbCArIG1vcmUgPD0gY2xpZW50V2lkdGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHVpQ2xhbXAoaSAtIDEsIC0xLCBtYXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbn1cbiJdfQ==