UNPKG

@taiga-ui/cdk

Version:

Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance

84 lines 11 kB
/// <reference types="@taiga-ui/tsconfig/ng-dev-mode" /> import { DATE_FILLER_LENGTH, DATE_RANGE_FILLER_LENGTH } from './date-fillers'; import { RANGE_SEPARATOR_CHAR } from './date-time'; import { TuiDay } from './day'; import { TuiMonthRange } from './month-range'; /** * An immutable range of two {@link TuiDay} objects */ export class TuiDayRange extends TuiMonthRange { constructor(from, to) { super(from, to); this.from = from; this.to = to; ngDevMode && console.assert(from.daySameOrBefore(to)); } /** * Creates range from two days after sorting them * * @param day1 * @param day2 * @return new range with sorted days */ static sort(day1, day2) { return day1.daySameOrBefore(day2) ? new TuiDayRange(day1, day2) : new TuiDayRange(day2, day1); } /** * Parse and correct a day range in string format * * @param rangeString a string of dates in a format dd.mm.yyyy - dd.mm.yyyy * @param dateMode {@link TuiDateMode} * @return normalized day range object */ static normalizeParse(rangeString, dateMode = 'DMY') { const leftDay = TuiDay.normalizeParse(rangeString.slice(0, DATE_FILLER_LENGTH), dateMode); if (rangeString.length < DATE_RANGE_FILLER_LENGTH) { return new TuiDayRange(leftDay, leftDay); } return TuiDayRange.sort(leftDay, TuiDay.normalizeParse(rangeString.slice(DATE_FILLER_LENGTH + RANGE_SEPARATOR_CHAR.length), dateMode)); } get isSingleDay() { return this.from.daySame(this.to); } /** * Tests ranges for identity * * @param another second range to test against current * @return `true` if days are identical */ daySame(another) { return this.from.daySame(another.from) && this.to.daySame(another.to); } /** * Locks range between two days included, or limits from one side if the other is null * * @param min * @param max * @return range — clamped range */ dayLimit(min, max) { return new TuiDayRange(this.from.dayLimit(min, max), this.to.dayLimit(min, max)); } /** * Human readable format. */ getFormattedDayRange(dateFormat, dateSeparator) { const from = this.from.getFormattedDay(dateFormat, dateSeparator); const to = this.to.getFormattedDay(dateFormat, dateSeparator); return `${from}${RANGE_SEPARATOR_CHAR}${to}`; } toString(dateFormat = 'DMY', dateSeparator = '.') { return this.getFormattedDayRange(dateFormat, dateSeparator); } toArray() { const { from, to } = this; const arr = []; for (const day = from.toUtcNativeDate(); day <= to.toUtcNativeDate(); day.setDate(day.getDate() + 1)) { arr.push(TuiDay.fromLocalNativeDate(day)); } return arr; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5LXJhbmdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL2RhdGUtdGltZS9kYXktcmFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBRXhELE9BQU8sRUFBQyxrQkFBa0IsRUFBRSx3QkFBd0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUNqRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzdCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFHNUM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sV0FBWSxTQUFRLGFBQWE7SUFDMUMsWUFDNkIsSUFBWSxFQUNaLEVBQVU7UUFFbkMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUhTLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixPQUFFLEdBQUYsRUFBRSxDQUFRO1FBSW5DLFNBQVMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFVLElBQUksQ0FBQyxJQUFZLEVBQUUsSUFBWTtRQUNsRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxjQUFjLENBQ3hCLFdBQW1CLEVBQ25CLFdBQXdCLEtBQUs7UUFFN0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FDakMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsRUFDeEMsUUFBUSxDQUNYLENBQUM7UUFFRixJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsd0JBQXdCLEVBQUU7WUFDL0MsT0FBTyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDNUM7UUFFRCxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQ25CLE9BQU8sRUFDUCxNQUFNLENBQUMsY0FBYyxDQUNqQixXQUFXLENBQUMsS0FBSyxDQUFDLGtCQUFrQixHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxFQUNuRSxRQUFRLENBQ1gsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVELElBQVcsV0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxPQUFPLENBQUMsT0FBb0I7UUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxRQUFRLENBQUMsR0FBa0IsRUFBRSxHQUFrQjtRQUNsRCxPQUFPLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQ7O09BRUc7SUFDSSxvQkFBb0IsQ0FBQyxVQUF1QixFQUFFLGFBQXFCO1FBQ3RFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNsRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFOUQsT0FBTyxHQUFHLElBQUksR0FBRyxvQkFBb0IsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRWUsUUFBUSxDQUNwQixhQUEwQixLQUFLLEVBQy9CLGFBQWEsR0FBRyxHQUFHO1FBRW5CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU0sT0FBTztRQUNWLE1BQU0sRUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUVmLEtBQ0ksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUNsQyxHQUFHLElBQUksRUFBRSxDQUFDLGVBQWUsRUFBRSxFQUMzQixHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFDaEM7WUFDRSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIkB0YWlnYS11aS90c2NvbmZpZy9uZy1kZXYtbW9kZVwiIC8+XG5cbmltcG9ydCB7REFURV9GSUxMRVJfTEVOR1RILCBEQVRFX1JBTkdFX0ZJTExFUl9MRU5HVEh9IGZyb20gJy4vZGF0ZS1maWxsZXJzJztcbmltcG9ydCB7UkFOR0VfU0VQQVJBVE9SX0NIQVJ9IGZyb20gJy4vZGF0ZS10aW1lJztcbmltcG9ydCB7VHVpRGF5fSBmcm9tICcuL2RheSc7XG5pbXBvcnQge1R1aU1vbnRoUmFuZ2V9IGZyb20gJy4vbW9udGgtcmFuZ2UnO1xuaW1wb3J0IHR5cGUge1R1aURhdGVNb2RlfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBBbiBpbW11dGFibGUgcmFuZ2Ugb2YgdHdvIHtAbGluayBUdWlEYXl9IG9iamVjdHNcbiAqL1xuZXhwb3J0IGNsYXNzIFR1aURheVJhbmdlIGV4dGVuZHMgVHVpTW9udGhSYW5nZSB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBvdmVycmlkZSByZWFkb25seSBmcm9tOiBUdWlEYXksXG4gICAgICAgIHB1YmxpYyBvdmVycmlkZSByZWFkb25seSB0bzogVHVpRGF5LFxuICAgICkge1xuICAgICAgICBzdXBlcihmcm9tLCB0byk7XG5cbiAgICAgICAgbmdEZXZNb2RlICYmIGNvbnNvbGUuYXNzZXJ0KGZyb20uZGF5U2FtZU9yQmVmb3JlKHRvKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyByYW5nZSBmcm9tIHR3byBkYXlzIGFmdGVyIHNvcnRpbmcgdGhlbVxuICAgICAqXG4gICAgICogQHBhcmFtIGRheTFcbiAgICAgKiBAcGFyYW0gZGF5MlxuICAgICAqIEByZXR1cm4gbmV3IHJhbmdlIHdpdGggc29ydGVkIGRheXNcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHNvcnQoZGF5MTogVHVpRGF5LCBkYXkyOiBUdWlEYXkpOiBUdWlEYXlSYW5nZSB7XG4gICAgICAgIHJldHVybiBkYXkxLmRheVNhbWVPckJlZm9yZShkYXkyKVxuICAgICAgICAgICAgPyBuZXcgVHVpRGF5UmFuZ2UoZGF5MSwgZGF5MilcbiAgICAgICAgICAgIDogbmV3IFR1aURheVJhbmdlKGRheTIsIGRheTEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlIGFuZCBjb3JyZWN0IGEgZGF5IHJhbmdlIGluIHN0cmluZyBmb3JtYXRcbiAgICAgKlxuICAgICAqIEBwYXJhbSByYW5nZVN0cmluZyBhIHN0cmluZyBvZiBkYXRlcyBpbiBhIGZvcm1hdCBkZC5tbS55eXl5IC0gZGQubW0ueXl5eVxuICAgICAqIEBwYXJhbSBkYXRlTW9kZSB7QGxpbmsgVHVpRGF0ZU1vZGV9XG4gICAgICogQHJldHVybiBub3JtYWxpemVkIGRheSByYW5nZSBvYmplY3RcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIG5vcm1hbGl6ZVBhcnNlKFxuICAgICAgICByYW5nZVN0cmluZzogc3RyaW5nLFxuICAgICAgICBkYXRlTW9kZTogVHVpRGF0ZU1vZGUgPSAnRE1ZJyxcbiAgICApOiBUdWlEYXlSYW5nZSB7XG4gICAgICAgIGNvbnN0IGxlZnREYXkgPSBUdWlEYXkubm9ybWFsaXplUGFyc2UoXG4gICAgICAgICAgICByYW5nZVN0cmluZy5zbGljZSgwLCBEQVRFX0ZJTExFUl9MRU5HVEgpLFxuICAgICAgICAgICAgZGF0ZU1vZGUsXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHJhbmdlU3RyaW5nLmxlbmd0aCA8IERBVEVfUkFOR0VfRklMTEVSX0xFTkdUSCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUdWlEYXlSYW5nZShsZWZ0RGF5LCBsZWZ0RGF5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBUdWlEYXlSYW5nZS5zb3J0KFxuICAgICAgICAgICAgbGVmdERheSxcbiAgICAgICAgICAgIFR1aURheS5ub3JtYWxpemVQYXJzZShcbiAgICAgICAgICAgICAgICByYW5nZVN0cmluZy5zbGljZShEQVRFX0ZJTExFUl9MRU5HVEggKyBSQU5HRV9TRVBBUkFUT1JfQ0hBUi5sZW5ndGgpLFxuICAgICAgICAgICAgICAgIGRhdGVNb2RlLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzU2luZ2xlRGF5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tLmRheVNhbWUodGhpcy50byk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdHMgcmFuZ2VzIGZvciBpZGVudGl0eVxuICAgICAqXG4gICAgICogQHBhcmFtIGFub3RoZXIgc2Vjb25kIHJhbmdlIHRvIHRlc3QgYWdhaW5zdCBjdXJyZW50XG4gICAgICogQHJldHVybiBgdHJ1ZWAgaWYgZGF5cyBhcmUgaWRlbnRpY2FsXG4gICAgICovXG4gICAgcHVibGljIGRheVNhbWUoYW5vdGhlcjogVHVpRGF5UmFuZ2UpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbS5kYXlTYW1lKGFub3RoZXIuZnJvbSkgJiYgdGhpcy50by5kYXlTYW1lKGFub3RoZXIudG8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvY2tzIHJhbmdlIGJldHdlZW4gdHdvIGRheXMgaW5jbHVkZWQsIG9yIGxpbWl0cyBmcm9tIG9uZSBzaWRlIGlmIHRoZSBvdGhlciBpcyBudWxsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWluXG4gICAgICogQHBhcmFtIG1heFxuICAgICAqIEByZXR1cm4gcmFuZ2Ug4oCUIGNsYW1wZWQgcmFuZ2VcbiAgICAgKi9cbiAgICBwdWJsaWMgZGF5TGltaXQobWluOiBUdWlEYXkgfCBudWxsLCBtYXg6IFR1aURheSB8IG51bGwpOiBUdWlEYXlSYW5nZSB7XG4gICAgICAgIHJldHVybiBuZXcgVHVpRGF5UmFuZ2UodGhpcy5mcm9tLmRheUxpbWl0KG1pbiwgbWF4KSwgdGhpcy50by5kYXlMaW1pdChtaW4sIG1heCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEh1bWFuIHJlYWRhYmxlIGZvcm1hdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Rm9ybWF0dGVkRGF5UmFuZ2UoZGF0ZUZvcm1hdDogVHVpRGF0ZU1vZGUsIGRhdGVTZXBhcmF0b3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGZyb20gPSB0aGlzLmZyb20uZ2V0Rm9ybWF0dGVkRGF5KGRhdGVGb3JtYXQsIGRhdGVTZXBhcmF0b3IpO1xuICAgICAgICBjb25zdCB0byA9IHRoaXMudG8uZ2V0Rm9ybWF0dGVkRGF5KGRhdGVGb3JtYXQsIGRhdGVTZXBhcmF0b3IpO1xuXG4gICAgICAgIHJldHVybiBgJHtmcm9tfSR7UkFOR0VfU0VQQVJBVE9SX0NIQVJ9JHt0b31gO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB0b1N0cmluZyhcbiAgICAgICAgZGF0ZUZvcm1hdDogVHVpRGF0ZU1vZGUgPSAnRE1ZJyxcbiAgICAgICAgZGF0ZVNlcGFyYXRvciA9ICcuJyxcbiAgICApOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGb3JtYXR0ZWREYXlSYW5nZShkYXRlRm9ybWF0LCBkYXRlU2VwYXJhdG9yKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9BcnJheSgpOiByZWFkb25seSBUdWlEYXlbXSB7XG4gICAgICAgIGNvbnN0IHtmcm9tLCB0b30gPSB0aGlzO1xuICAgICAgICBjb25zdCBhcnIgPSBbXTtcblxuICAgICAgICBmb3IgKFxuICAgICAgICAgICAgY29uc3QgZGF5ID0gZnJvbS50b1V0Y05hdGl2ZURhdGUoKTtcbiAgICAgICAgICAgIGRheSA8PSB0by50b1V0Y05hdGl2ZURhdGUoKTtcbiAgICAgICAgICAgIGRheS5zZXREYXRlKGRheS5nZXREYXRlKCkgKyAxKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGFyci5wdXNoKFR1aURheS5mcm9tTG9jYWxOYXRpdmVEYXRlKGRheSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG59XG4iXX0=