@ptsecurity/mosaic 14.6.2 → 14.7.1
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/_theming.scss +1916 -173
- package/_visual.scss +341 -0
- package/button/button.component.d.ts +2 -0
- package/card/card.component.d.ts +2 -0
- package/checkbox/checkbox.d.ts +1 -0
- package/code-block/README.md +32 -0
- package/code-block/actionbar.component.d.ts +22 -0
- package/code-block/code-block.component.d.ts +74 -0
- package/code-block/code-block.module.d.ts +14 -0
- package/code-block/code-block.types.d.ts +16 -0
- package/code-block/index.d.ts +1 -0
- package/code-block/public-api.d.ts +3 -0
- package/core/formatters/date/formatter.d.ts +55 -1
- package/core/option/action.d.ts +2 -0
- package/core/selection/pseudo-checkbox/pseudo-checkbox.d.ts +1 -0
- package/datepicker/calendar-body.component.d.ts +3 -11
- package/datepicker/calendar-header.component.d.ts +45 -0
- package/datepicker/calendar.component.d.ts +10 -81
- package/datepicker/datepicker-input.directive.d.ts +4 -3
- package/datepicker/datepicker-module.d.ts +8 -8
- package/datepicker/datepicker.component.d.ts +2 -12
- package/datepicker/month-view.component.d.ts +7 -26
- package/datepicker/public-api.d.ts +1 -2
- package/design-tokens/legacy-2017/tokens/components/code-block.json5 +704 -0
- package/design-tokens/legacy-2017/tokens.d.ts +341 -0
- package/design-tokens/pt-2022/tokens/components/code-block.json5 +697 -0
- package/design-tokens/pt-2022/tokens.d.ts +341 -0
- package/design-tokens/style-dictionary/configs/index.js +6 -8
- package/dropdown/dropdown-item.component.d.ts +1 -0
- package/esm2020/autocomplete/autocomplete.component.mjs +2 -2
- package/esm2020/button/button.component.mjs +3 -3
- package/esm2020/card/card.component.mjs +3 -3
- package/esm2020/checkbox/checkbox.mjs +2 -2
- package/esm2020/code-block/actionbar.component.mjs +67 -0
- package/esm2020/code-block/code-block.component.mjs +157 -0
- package/esm2020/code-block/code-block.module.mjs +60 -0
- package/esm2020/code-block/code-block.types.mjs +2 -0
- package/esm2020/code-block/index.mjs +2 -0
- package/esm2020/code-block/ptsecurity-mosaic-code-block.mjs +5 -0
- package/esm2020/code-block/public-api.mjs +4 -0
- package/esm2020/core/formatters/date/formatter.mjs +77 -1
- package/esm2020/core/formatters/date/templates/en-US.mjs +56 -1
- package/esm2020/core/formatters/date/templates/ru-RU.mjs +92 -1
- package/esm2020/core/option/action.mjs +3 -2
- package/esm2020/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +2 -2
- package/esm2020/core/version.mjs +2 -2
- package/esm2020/datepicker/calendar-body.component.mjs +9 -28
- package/esm2020/datepicker/calendar-header.component.mjs +135 -0
- package/esm2020/datepicker/calendar.component.mjs +25 -212
- package/esm2020/datepicker/datepicker-input.directive.mjs +65 -56
- package/esm2020/datepicker/datepicker-module.mjs +13 -17
- package/esm2020/datepicker/datepicker.component.mjs +10 -21
- package/esm2020/datepicker/month-view.component.mjs +32 -131
- package/esm2020/datepicker/public-api.mjs +2 -3
- package/esm2020/design-tokens/legacy-2017/tokens.mjs +342 -1
- package/esm2020/design-tokens/pt-2022/tokens.mjs +342 -1
- package/esm2020/dropdown/dropdown-item.component.mjs +2 -2
- package/esm2020/form-field/form-field.mjs +3 -2
- package/esm2020/form-field/hint.mjs +3 -2
- package/esm2020/form-field/validate.directive.mjs +6 -7
- package/esm2020/icon/icon.component.mjs +3 -2
- package/esm2020/input/input-number-validators.mjs +3 -7
- package/esm2020/input/input.mjs +3 -2
- package/esm2020/link/link.component.mjs +3 -2
- package/esm2020/list/list-selection.component.mjs +3 -2
- package/esm2020/modal/modal.component.mjs +4 -3
- package/esm2020/popover/popover.component.mjs +6 -2
- package/esm2020/progress-bar/progress-bar.component.mjs +3 -2
- package/esm2020/progress-spinner/progress-spinner.component.mjs +3 -2
- package/esm2020/radio/radio.component.mjs +3 -4
- package/esm2020/select/select.component.mjs +18 -6
- package/esm2020/select/select.module.mjs +6 -2
- package/esm2020/tabs/tab-group.component.mjs +2 -2
- package/esm2020/tabs/tab-label-wrapper.directive.mjs +2 -2
- package/esm2020/tabs/tab-nav-bar/tab-nav-bar.mjs +3 -2
- package/esm2020/tabs/tab.component.mjs +3 -2
- package/esm2020/tags/tag-list.component.mjs +3 -2
- package/esm2020/tags/tag.component.mjs +3 -2
- package/esm2020/textarea/textarea.component.mjs +3 -2
- package/esm2020/timezone/timezone-select.component.mjs +2 -2
- package/esm2020/toggle/toggle.component.mjs +3 -2
- package/esm2020/tree/control/flat-tree-control.mjs +1 -1
- package/esm2020/tree/toggle.mjs +3 -2
- package/esm2020/tree/tree-base.mjs +1 -1
- package/esm2020/tree-select/tree-select.component.mjs +3 -2
- package/fesm2015/ptsecurity-mosaic-autocomplete.mjs +2 -2
- package/fesm2015/ptsecurity-mosaic-autocomplete.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-button.mjs +2 -2
- package/fesm2015/ptsecurity-mosaic-button.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-card.mjs +2 -2
- package/fesm2015/ptsecurity-mosaic-card.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-checkbox.mjs +1 -1
- package/fesm2015/ptsecurity-mosaic-checkbox.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-code-block.mjs +280 -0
- package/fesm2015/ptsecurity-mosaic-code-block.mjs.map +1 -0
- package/fesm2015/ptsecurity-mosaic-core.mjs +226 -3
- package/fesm2015/ptsecurity-mosaic-core.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-datepicker.mjs +283 -908
- package/fesm2015/ptsecurity-mosaic-datepicker.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-design-tokens.mjs +1024 -1
- package/fesm2015/ptsecurity-mosaic-design-tokens.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-dropdown.mjs +1 -1
- package/fesm2015/ptsecurity-mosaic-dropdown.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-form-field.mjs +10 -8
- package/fesm2015/ptsecurity-mosaic-form-field.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-icon.mjs +2 -1
- package/fesm2015/ptsecurity-mosaic-icon.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-input.mjs +4 -7
- package/fesm2015/ptsecurity-mosaic-input.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-link.mjs +2 -1
- package/fesm2015/ptsecurity-mosaic-link.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-list.mjs +2 -1
- package/fesm2015/ptsecurity-mosaic-list.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-modal.mjs +3 -2
- package/fesm2015/ptsecurity-mosaic-modal.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-popover.mjs +5 -1
- package/fesm2015/ptsecurity-mosaic-popover.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-progress-bar.mjs +2 -1
- package/fesm2015/ptsecurity-mosaic-progress-bar.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-progress-spinner.mjs +2 -1
- package/fesm2015/ptsecurity-mosaic-progress-spinner.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-radio.mjs +2 -3
- package/fesm2015/ptsecurity-mosaic-radio.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-select.mjs +22 -6
- package/fesm2015/ptsecurity-mosaic-select.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-tabs.mjs +6 -4
- package/fesm2015/ptsecurity-mosaic-tabs.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-tags.mjs +4 -2
- package/fesm2015/ptsecurity-mosaic-tags.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-textarea.mjs +2 -1
- package/fesm2015/ptsecurity-mosaic-textarea.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-timezone.mjs +2 -2
- package/fesm2015/ptsecurity-mosaic-timezone.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-toggle.mjs +2 -1
- package/fesm2015/ptsecurity-mosaic-toggle.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-tree-select.mjs +2 -1
- package/fesm2015/ptsecurity-mosaic-tree-select.mjs.map +1 -1
- package/fesm2015/ptsecurity-mosaic-tree.mjs +2 -1
- package/fesm2015/ptsecurity-mosaic-tree.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-autocomplete.mjs +2 -2
- package/fesm2020/ptsecurity-mosaic-autocomplete.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-button.mjs +2 -2
- package/fesm2020/ptsecurity-mosaic-button.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-card.mjs +2 -2
- package/fesm2020/ptsecurity-mosaic-card.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-checkbox.mjs +1 -1
- package/fesm2020/ptsecurity-mosaic-checkbox.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-code-block.mjs +278 -0
- package/fesm2020/ptsecurity-mosaic-code-block.mjs.map +1 -0
- package/fesm2020/ptsecurity-mosaic-core.mjs +226 -3
- package/fesm2020/ptsecurity-mosaic-core.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-datepicker.mjs +281 -903
- package/fesm2020/ptsecurity-mosaic-datepicker.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-design-tokens.mjs +1024 -1
- package/fesm2020/ptsecurity-mosaic-design-tokens.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-dropdown.mjs +1 -1
- package/fesm2020/ptsecurity-mosaic-dropdown.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-form-field.mjs +9 -8
- package/fesm2020/ptsecurity-mosaic-form-field.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-icon.mjs +2 -1
- package/fesm2020/ptsecurity-mosaic-icon.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-input.mjs +4 -7
- package/fesm2020/ptsecurity-mosaic-input.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-link.mjs +2 -1
- package/fesm2020/ptsecurity-mosaic-link.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-list.mjs +2 -1
- package/fesm2020/ptsecurity-mosaic-list.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-modal.mjs +3 -2
- package/fesm2020/ptsecurity-mosaic-modal.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-popover.mjs +5 -1
- package/fesm2020/ptsecurity-mosaic-popover.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-progress-bar.mjs +2 -1
- package/fesm2020/ptsecurity-mosaic-progress-bar.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-progress-spinner.mjs +2 -1
- package/fesm2020/ptsecurity-mosaic-progress-spinner.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-radio.mjs +2 -3
- package/fesm2020/ptsecurity-mosaic-radio.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-select.mjs +22 -6
- package/fesm2020/ptsecurity-mosaic-select.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-tabs.mjs +6 -4
- package/fesm2020/ptsecurity-mosaic-tabs.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-tags.mjs +4 -2
- package/fesm2020/ptsecurity-mosaic-tags.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-textarea.mjs +2 -1
- package/fesm2020/ptsecurity-mosaic-textarea.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-timezone.mjs +2 -2
- package/fesm2020/ptsecurity-mosaic-timezone.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-toggle.mjs +2 -1
- package/fesm2020/ptsecurity-mosaic-toggle.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-tree-select.mjs +2 -1
- package/fesm2020/ptsecurity-mosaic-tree-select.mjs.map +1 -1
- package/fesm2020/ptsecurity-mosaic-tree.mjs +2 -1
- package/fesm2020/ptsecurity-mosaic-tree.mjs.map +1 -1
- package/form-field/form-field.d.ts +2 -0
- package/form-field/hint.d.ts +2 -0
- package/form-field/validate.directive.d.ts +1 -1
- package/icon/icon.component.d.ts +2 -0
- package/input/input-number-validators.d.ts +2 -6
- package/input/input.d.ts +2 -0
- package/link/link.component.d.ts +2 -0
- package/list/list-selection.component.d.ts +2 -0
- package/package.json +12 -4
- package/popover/popover.component.d.ts +1 -0
- package/prebuilt-themes/dark-theme.css +1 -1
- package/prebuilt-themes/default-theme.css +1 -1
- package/progress-bar/progress-bar.component.d.ts +2 -0
- package/progress-spinner/progress-spinner.component.d.ts +2 -0
- package/radio/radio.component.d.ts +2 -0
- package/select/select.component.d.ts +9 -2
- package/select/select.module.d.ts +1 -1
- package/tabs/tab-group.component.d.ts +1 -0
- package/tabs/tab-label-wrapper.directive.d.ts +1 -0
- package/tabs/tab-nav-bar/tab-nav-bar.d.ts +2 -0
- package/tabs/tab.component.d.ts +2 -0
- package/tags/tag-list.component.d.ts +2 -0
- package/tags/tag.component.d.ts +2 -0
- package/textarea/textarea.component.d.ts +2 -0
- package/toggle/toggle.component.d.ts +2 -0
- package/tree/control/flat-tree-control.d.ts +4 -4
- package/tree/toggle.d.ts +2 -0
- package/tree-select/tree-select.component.d.ts +2 -0
- package/datepicker/multi-year-view.component.d.ts +0 -72
- package/datepicker/year-view.component.d.ts +0 -90
- package/esm2020/datepicker/multi-year-view.component.mjs +0 -218
- package/esm2020/datepicker/year-view.component.mjs +0 -253
@@ -0,0 +1,280 @@
|
|
1
|
+
import * as i2 from '@angular/common';
|
2
|
+
import { CommonModule } from '@angular/common';
|
3
|
+
import * as i0 from '@angular/core';
|
4
|
+
import { EventEmitter, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, Input, Output, InjectionToken, Optional, Inject, NgModule } from '@angular/core';
|
5
|
+
import * as i2$1 from '@ptsecurity/mosaic/button';
|
6
|
+
import { McButtonModule } from '@ptsecurity/mosaic/button';
|
7
|
+
import * as i4 from '@ptsecurity/mosaic/icon';
|
8
|
+
import { McIconModule } from '@ptsecurity/mosaic/icon';
|
9
|
+
import * as i5 from '@ptsecurity/mosaic/tabs';
|
10
|
+
import { McTabGroup, McTabsModule } from '@ptsecurity/mosaic/tabs';
|
11
|
+
import * as i3 from '@ptsecurity/mosaic/tooltip';
|
12
|
+
import { McToolTipModule } from '@ptsecurity/mosaic/tooltip';
|
13
|
+
import * as i4$1 from 'ngx-highlightjs';
|
14
|
+
import { HighlightModule, HIGHLIGHT_OPTIONS } from 'ngx-highlightjs';
|
15
|
+
import { filter, debounceTime } from 'rxjs/operators';
|
16
|
+
import { Subject, Subscription } from 'rxjs';
|
17
|
+
import * as i1 from '@angular/cdk/clipboard';
|
18
|
+
|
19
|
+
class McActionBarComponent {
|
20
|
+
constructor() {
|
21
|
+
this.selectedTabIndex = 0;
|
22
|
+
this.toggleSoftWrap = new EventEmitter();
|
23
|
+
this.downloadCode = new EventEmitter();
|
24
|
+
this.copyCode = new EventEmitter();
|
25
|
+
this.openExternalSystem = new EventEmitter();
|
26
|
+
}
|
27
|
+
ngAfterViewInit() {
|
28
|
+
this.copyTooltipText = this.config.copyTooltip;
|
29
|
+
this.copyTooltip.visibleChange
|
30
|
+
.pipe(filter((state) => !state))
|
31
|
+
.subscribe(() => {
|
32
|
+
if (this.copyTooltipText === this.config.copiedTooltip) {
|
33
|
+
this.copyTooltipText = this.config.copyTooltip;
|
34
|
+
}
|
35
|
+
});
|
36
|
+
}
|
37
|
+
onCopy() {
|
38
|
+
this.copyCode.emit();
|
39
|
+
setTimeout(() => {
|
40
|
+
this.copyTooltipText = this.config.copiedTooltip;
|
41
|
+
this.copyTooltip.show();
|
42
|
+
});
|
43
|
+
}
|
44
|
+
}
|
45
|
+
/** @nocollapse */ McActionBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: McActionBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
46
|
+
/** @nocollapse */ McActionBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: McActionBarComponent, selector: "mc-actionbar-block", inputs: { config: "config", codeFiles: "codeFiles", lessContrast: "lessContrast", selectedTabIndex: "selectedTabIndex", multiLine: "multiLine", softWrap: "softWrap" }, outputs: { toggleSoftWrap: "toggleSoftWrap", downloadCode: "downloadCode", copyCode: "copyCode", openExternalSystem: "openExternalSystem" }, host: { properties: { "class.mc-code-block-actionbar_less-contrast": "lessContrast" }, classAttribute: "mc-code-block-actionbar" }, viewQueries: [{ propertyName: "copyTooltip", first: true, predicate: ["copyTooltip"], descendants: true }], ngImport: i0, template: "<button mc-button\n class=\"mc-icon-button mc-button_transparent\"\n *ngIf=\"multiLine\"\n [mcTooltip]=\"softWrap ? config.softWrapOffTooltip : config.softWrapOnTooltip\"\n (click)=\"toggleSoftWrap.emit()\">\n <i *ngIf=\"!softWrap\" mc-icon=\"mc-word-wrap_16\"></i>\n <i *ngIf=\"softWrap\" mc-icon=\"mc-word-wrap-slash_16\"></i>\n</button>\n\n<button mc-button\n class=\"mc-button_transparent\"\n [mcTooltip]=\"config.downloadTooltip\"\n (click)=\"downloadCode.emit()\">\n <i mc-icon=\"mc-download_16\"></i>\n</button>\n\n<button mc-button\n class=\"mc-button_transparent\"\n #copyTooltip=\"mcTooltip\"\n [mcTooltip]=\"copyTooltipText\"\n (click)=\"onCopy()\">\n <i mc-icon=\"mc-copy-o_16\"></i>\n</button>\n\n<button mc-button\n class=\"mc-button_transparent\"\n *ngIf=\"codeFiles[selectedTabIndex].link\"\n [mcTooltip]=\"config.openExternalSystemTooltip\"\n (click)=\"openExternalSystem.emit()\">\n <i mc-icon=\"mc-external-link_16\"></i>\n</button>\n", styles: [".mc-code-block-actionbar{display:flex;justify-content:right;align-items:center;position:absolute;top:4px;right:8px;gap:0;border-radius:4px}.mc-code-block-actionbar.mc-actionbar-block_floating{top:6px;right:6px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.McButton, selector: "[mc-button]", inputs: ["color", "tabIndex", "disabled"] }, { kind: "directive", type: i2$1.McButtonCssStyler, selector: "[mc-button]" }, { kind: "directive", type: i3.McTooltipTrigger, selector: "[mcTooltip]", inputs: ["mcVisible", "mcPlacement", "mcPlacementPriority", "mcTooltip", "mcTooltipDisabled", "mcEnterDelay", "mcLeaveDelay", "mcTrigger", "mcTooltipClass"], outputs: ["mcPlacementChange", "mcVisibleChange"], exportAs: ["mcTooltip"] }, { kind: "component", type: i4.McIcon, selector: "[mc-icon]", inputs: ["color"] }, { kind: "directive", type: i4.McIconCSSStyler, selector: "[mc-icon]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: McActionBarComponent, decorators: [{
|
48
|
+
type: Component,
|
49
|
+
args: [{ selector: 'mc-actionbar-block', host: {
|
50
|
+
class: 'mc-code-block-actionbar',
|
51
|
+
'[class.mc-code-block-actionbar_less-contrast]': 'lessContrast'
|
52
|
+
}, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<button mc-button\n class=\"mc-icon-button mc-button_transparent\"\n *ngIf=\"multiLine\"\n [mcTooltip]=\"softWrap ? config.softWrapOffTooltip : config.softWrapOnTooltip\"\n (click)=\"toggleSoftWrap.emit()\">\n <i *ngIf=\"!softWrap\" mc-icon=\"mc-word-wrap_16\"></i>\n <i *ngIf=\"softWrap\" mc-icon=\"mc-word-wrap-slash_16\"></i>\n</button>\n\n<button mc-button\n class=\"mc-button_transparent\"\n [mcTooltip]=\"config.downloadTooltip\"\n (click)=\"downloadCode.emit()\">\n <i mc-icon=\"mc-download_16\"></i>\n</button>\n\n<button mc-button\n class=\"mc-button_transparent\"\n #copyTooltip=\"mcTooltip\"\n [mcTooltip]=\"copyTooltipText\"\n (click)=\"onCopy()\">\n <i mc-icon=\"mc-copy-o_16\"></i>\n</button>\n\n<button mc-button\n class=\"mc-button_transparent\"\n *ngIf=\"codeFiles[selectedTabIndex].link\"\n [mcTooltip]=\"config.openExternalSystemTooltip\"\n (click)=\"openExternalSystem.emit()\">\n <i mc-icon=\"mc-external-link_16\"></i>\n</button>\n", styles: [".mc-code-block-actionbar{display:flex;justify-content:right;align-items:center;position:absolute;top:4px;right:8px;gap:0;border-radius:4px}.mc-code-block-actionbar.mc-actionbar-block_floating{top:6px;right:6px}\n"] }]
|
53
|
+
}], propDecorators: { copyTooltip: [{
|
54
|
+
type: ViewChild,
|
55
|
+
args: ['copyTooltip']
|
56
|
+
}], config: [{
|
57
|
+
type: Input
|
58
|
+
}], codeFiles: [{
|
59
|
+
type: Input
|
60
|
+
}], lessContrast: [{
|
61
|
+
type: Input
|
62
|
+
}], selectedTabIndex: [{
|
63
|
+
type: Input
|
64
|
+
}], multiLine: [{
|
65
|
+
type: Input
|
66
|
+
}], softWrap: [{
|
67
|
+
type: Input
|
68
|
+
}], toggleSoftWrap: [{
|
69
|
+
type: Output
|
70
|
+
}], downloadCode: [{
|
71
|
+
type: Output
|
72
|
+
}], copyCode: [{
|
73
|
+
type: Output
|
74
|
+
}], openExternalSystem: [{
|
75
|
+
type: Output
|
76
|
+
}] } });
|
77
|
+
|
78
|
+
const COPIED_MESSAGE_TOOLTIP_TIMEOUT = 100;
|
79
|
+
const DEFAULT_EXTENSION = 'txt';
|
80
|
+
const LANGUAGES_EXTENSIONS = {
|
81
|
+
html: 'html',
|
82
|
+
css: 'css',
|
83
|
+
php: 'php',
|
84
|
+
java: 'java',
|
85
|
+
bash: 'sh',
|
86
|
+
javascript: 'js',
|
87
|
+
typescript: 'ts',
|
88
|
+
python: 'py',
|
89
|
+
ruby: 'rb',
|
90
|
+
c: 'c',
|
91
|
+
'c++': 'cpp',
|
92
|
+
'c#': 'cs',
|
93
|
+
csharp: 'cs',
|
94
|
+
lua: 'lua',
|
95
|
+
xml: 'xml',
|
96
|
+
json: 'json'
|
97
|
+
};
|
98
|
+
const MC_CODE_BLOCK_CONFIGURATION = new InjectionToken('McCodeBlockConfiguration');
|
99
|
+
const MC_CODE_BLOCK_DEFAULT_CONFIGURATION = {
|
100
|
+
softWrapOnTooltip: 'Включить перенос по словам',
|
101
|
+
softWrapOffTooltip: 'Выключить перенос по словам',
|
102
|
+
downloadTooltip: 'Скачать',
|
103
|
+
copiedTooltip: '✓ Скопировано',
|
104
|
+
copyTooltip: 'Скопировать',
|
105
|
+
viewAllText: 'Показать все',
|
106
|
+
viewLessText: 'Свернуть',
|
107
|
+
openExternalSystemTooltip: 'Открыть во внешней системе'
|
108
|
+
};
|
109
|
+
const actionBarBlockLeftMargin = 24;
|
110
|
+
class McCodeBlockComponent {
|
111
|
+
constructor(elementRef, changeDetectorRef, clipboard, renderer, config) {
|
112
|
+
this.elementRef = elementRef;
|
113
|
+
this.changeDetectorRef = changeDetectorRef;
|
114
|
+
this.clipboard = clipboard;
|
115
|
+
this.renderer = renderer;
|
116
|
+
this.config = config;
|
117
|
+
this.lineNumbers = true;
|
118
|
+
this.softWrap = false;
|
119
|
+
this.selectedTabIndex = 0;
|
120
|
+
this.copied = false;
|
121
|
+
this.viewAll = false;
|
122
|
+
this.multiLine = false;
|
123
|
+
this.resizeStream = new Subject();
|
124
|
+
this.resizeDebounceInterval = 100;
|
125
|
+
this.resizeSubscription = Subscription.EMPTY;
|
126
|
+
this.updateHeader = () => {
|
127
|
+
const clientWidth = this.elementRef.nativeElement.querySelector('mc-actionbar-block').clientWidth;
|
128
|
+
this.renderer.setStyle(this.tabGroup.tabHeader.elementRef.nativeElement, 'margin-right', `${actionBarBlockLeftMargin + clientWidth}px`);
|
129
|
+
this.changeDetectorRef.markForCheck();
|
130
|
+
};
|
131
|
+
this.updateMultiline = () => {
|
132
|
+
this.multiLine = this.elementRef.nativeElement
|
133
|
+
.querySelectorAll('.hljs-ln-numbers').length > 1;
|
134
|
+
this.updateHeader();
|
135
|
+
this.changeDetectorRef.markForCheck();
|
136
|
+
};
|
137
|
+
this.config = config || MC_CODE_BLOCK_DEFAULT_CONFIGURATION;
|
138
|
+
this.resizeSubscription = this.resizeStream
|
139
|
+
.pipe(debounceTime(this.resizeDebounceInterval))
|
140
|
+
.subscribe(this.updateHeader);
|
141
|
+
}
|
142
|
+
get noHeader() {
|
143
|
+
return this.codeFiles.length === 1 && !this.codeFiles[0].filename;
|
144
|
+
}
|
145
|
+
get singleFile() {
|
146
|
+
return this.codeFiles.length === 1;
|
147
|
+
}
|
148
|
+
ngOnDestroy() {
|
149
|
+
this.resizeSubscription.unsubscribe();
|
150
|
+
}
|
151
|
+
toggleSoftWrap() {
|
152
|
+
this.softWrap = !this.softWrap;
|
153
|
+
}
|
154
|
+
toggleViewAll() {
|
155
|
+
this.viewAll = !this.viewAll;
|
156
|
+
}
|
157
|
+
downloadCode() {
|
158
|
+
const codeFile = this.codeFiles[this.selectedTabIndex];
|
159
|
+
const blob = new Blob([codeFile.content], { type: 'text/plain' });
|
160
|
+
const url = window.URL.createObjectURL(blob);
|
161
|
+
const link = document.createElement('a');
|
162
|
+
link.setAttribute('href', url);
|
163
|
+
link.setAttribute('download', `${this.getFullFileName(codeFile)}`);
|
164
|
+
link.click();
|
165
|
+
}
|
166
|
+
copyCode() {
|
167
|
+
this.clipboard.copy(this.codeFiles[this.selectedTabIndex].content);
|
168
|
+
this.copied = true;
|
169
|
+
}
|
170
|
+
openExternalSystem() {
|
171
|
+
const externalLink = this.codeFiles[this.selectedTabIndex].link;
|
172
|
+
window.open(externalLink, '_blank');
|
173
|
+
}
|
174
|
+
onHighlighted() {
|
175
|
+
setTimeout(this.updateMultiline, 1);
|
176
|
+
}
|
177
|
+
getMaxHeight() {
|
178
|
+
return this.maxHeight > 0 && !this.viewAll ? `${this.maxHeight}px` : 'none';
|
179
|
+
}
|
180
|
+
onSelectTab($event) {
|
181
|
+
this.selectedTabIndex = $event.index;
|
182
|
+
this.updateMultiline();
|
183
|
+
setTimeout(this.updateHeader);
|
184
|
+
}
|
185
|
+
getFullFileName(codeFile) {
|
186
|
+
const fileName = codeFile.filename || 'code';
|
187
|
+
const extension = LANGUAGES_EXTENSIONS[codeFile.language] || DEFAULT_EXTENSION;
|
188
|
+
return `${fileName}.${extension}`;
|
189
|
+
}
|
190
|
+
}
|
191
|
+
/** @nocollapse */ McCodeBlockComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: McCodeBlockComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.Clipboard }, { token: i0.Renderer2 }, { token: MC_CODE_BLOCK_CONFIGURATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
192
|
+
/** @nocollapse */ McCodeBlockComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: McCodeBlockComponent, selector: "mc-code-block", inputs: { lineNumbers: "lineNumbers", codeFiles: "codeFiles", lessContrast: "lessContrast", maxHeight: "maxHeight", softWrap: "softWrap" }, host: { listeners: { "window:resize": "resizeStream.next($event)" }, properties: { "class.mc-code-block_less-contrast": "lessContrast", "class.mc-code-block_hide-line-numbers": "!lineNumbers", "class.mc-code-block_single-file": "singleFile", "class.mc-code-block_no-header": "noHeader" }, classAttribute: "mc-code-block" }, viewQueries: [{ propertyName: "tabGroup", first: true, predicate: McTabGroup, descendants: true }], exportAs: ["mcCodeBlock"], ngImport: i0, template: "<mc-tab-group (selectedTabChange)=\"onSelectTab($event)\">\n <mc-tab\n *ngFor=\"let codeFile of codeFiles; let i = index\"\n [disabled]=\"singleFile\">\n\n <ng-template mc-tab-label>{{ codeFile.filename }}</ng-template>\n\n <pre class=\"mc-code-block__code mc-scrollbar\"\n #codeContent\n [style.max-height]=\"getMaxHeight()\"\n [class.mc-code-block__code_soft-wrap]=\"softWrap\"\n [class.mc-code-block__code_view-all]=\"viewAll\"\n ><code class=\"hljs\"\n [id]=\"codeFile.filename + '_' + i\"\n [class.hljs-line-numbers]=\"lineNumbers\"\n [highlight]=\"codeFiles[i].content\"\n [lineNumbers]=\"true\"\n (highlighted)=\"onHighlighted()\">\n </code><mc-actionbar-block\n [class.mc-actionbar-block_floating]=\"noHeader\"\n [config]=\"config\"\n [codeFiles]=\"codeFiles\"\n [selectedTabIndex]=\"selectedTabIndex\"\n [lessContrast]=\"lessContrast\"\n [multiLine]=\"multiLine\"\n [softWrap]=\"softWrap\"\n (toggleSoftWrap)=\"toggleSoftWrap()\"\n (downloadCode)=\"downloadCode()\"\n (copyCode)=\"copyCode()\"\n (openExternalSystem)=\"openExternalSystem()\">\n </mc-actionbar-block></pre>\n\n <button\n class=\"mc-button_transparent mc-code-block__show-more\"\n mc-button\n *ngIf=\"viewAll || codeContent.offsetHeight < codeContent.scrollHeight\"\n (click)=\"toggleViewAll()\">\n\n {{ viewAll ? config.viewLessText : config.viewAllText}}\n <i class=\"mc mc-angle-down-S_16\" *ngIf=\"!viewAll\"></i>\n <i class=\"mc mc-angle-up-S_16\" *ngIf=\"viewAll\"></i>\n </button>\n </mc-tab>\n</mc-tab-group>\n", styles: [".mc-code-block{display:block;position:relative;box-sizing:border-box;hyphens:none;-ms-hyphens:none;-moz-hyphens:none;-webkit-hyphens:none;border-width:1px;border-style:solid;border-radius:4px}.mc-code-block:not(.mc-code-block_no-header) .mc-tab-group:after{content:\"\";position:absolute;top:39px;left:0;right:0;height:1px}.mc-code-block .mc-tab-header{margin-right:152px}.mc-code-block.mc-code-block_hide-line-numbers .hljs-ln-line.hljs-ln-numbers{display:none}.mc-code-block.mc-code-block_single-file .mc-tab-label:before{content:none}.mc-code-block.mc-code-block_single-file .mc-tab-label:hover{background:transparent!important}.mc-code-block.mc-code-block_no-header .mc-code-block__code{position:relative}.mc-code-block.mc-code-block_no-header .mc-tab-header{display:none}.mc-code-block pre{margin:0}.mc-code-block .mc-tab-body__wrapper{flex-direction:column;position:static;position:initial}.mc-code-block .mc-tab-body.mc-tab-body__active{position:static;position:initial}.mc-code-block__code{overflow-y:hidden}.mc-code-block__code.mc-code-block__code_view-all{max-height:none;max-height:initial;overflow-y:visible;overflow-y:initial}.mc-code-block__code.mc-code-block__code_soft-wrap{white-space:pre-wrap}.mc-code-block__code>code{padding:12px!important}.mc-code-block__code .hljs-ln{border-collapse:inherit}.mc-code-block__code .hljs-ln .hljs{padding:0}.mc-code-block__code .hljs-ln-numbers{border-right-width:0;padding:2px 12px 0 0;vertical-align:baseline;text-align:right}.mc-code-block__code .hljs-ln-n:before{white-space:nowrap}.mc-code-block__show-more{overflow:hidden;width:100%;border-top-style:solid!important;border-top-width:1px!important;border-top-left-radius:0!important;border-top-right-radius:0!important}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.McButton, selector: "[mc-button]", inputs: ["color", "tabIndex", "disabled"] }, { kind: "directive", type: i2$1.McButtonCssStyler, selector: "[mc-button]" }, { kind: "directive", type: i4$1.Highlight, selector: "[highlight]", inputs: ["highlight", "languages", "lineNumbers"], outputs: ["highlighted"] }, { kind: "component", type: i5.McTabGroup, selector: "mc-tab-group", inputs: ["disabled", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["mcTabGroup"] }, { kind: "directive", type: i5.McTabLabel, selector: "[mc-tab-label], [mcTabLabel]" }, { kind: "component", type: i5.McTab, selector: "mc-tab", inputs: ["disabled", "tooltipTitle", "tooltipPlacement", "label", "empty", "tabId"], exportAs: ["mcTab"] }, { kind: "component", type: McActionBarComponent, selector: "mc-actionbar-block", inputs: ["config", "codeFiles", "lessContrast", "selectedTabIndex", "multiLine", "softWrap"], outputs: ["toggleSoftWrap", "downloadCode", "copyCode", "openExternalSystem"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
193
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: McCodeBlockComponent, decorators: [{
|
194
|
+
type: Component,
|
195
|
+
args: [{ selector: 'mc-code-block', exportAs: 'mcCodeBlock', host: {
|
196
|
+
class: 'mc-code-block',
|
197
|
+
'[class.mc-code-block_less-contrast]': 'lessContrast',
|
198
|
+
'[class.mc-code-block_hide-line-numbers]': '!lineNumbers',
|
199
|
+
'[class.mc-code-block_single-file]': 'singleFile',
|
200
|
+
'[class.mc-code-block_no-header]': 'noHeader',
|
201
|
+
'(window:resize)': 'resizeStream.next($event)'
|
202
|
+
}, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<mc-tab-group (selectedTabChange)=\"onSelectTab($event)\">\n <mc-tab\n *ngFor=\"let codeFile of codeFiles; let i = index\"\n [disabled]=\"singleFile\">\n\n <ng-template mc-tab-label>{{ codeFile.filename }}</ng-template>\n\n <pre class=\"mc-code-block__code mc-scrollbar\"\n #codeContent\n [style.max-height]=\"getMaxHeight()\"\n [class.mc-code-block__code_soft-wrap]=\"softWrap\"\n [class.mc-code-block__code_view-all]=\"viewAll\"\n ><code class=\"hljs\"\n [id]=\"codeFile.filename + '_' + i\"\n [class.hljs-line-numbers]=\"lineNumbers\"\n [highlight]=\"codeFiles[i].content\"\n [lineNumbers]=\"true\"\n (highlighted)=\"onHighlighted()\">\n </code><mc-actionbar-block\n [class.mc-actionbar-block_floating]=\"noHeader\"\n [config]=\"config\"\n [codeFiles]=\"codeFiles\"\n [selectedTabIndex]=\"selectedTabIndex\"\n [lessContrast]=\"lessContrast\"\n [multiLine]=\"multiLine\"\n [softWrap]=\"softWrap\"\n (toggleSoftWrap)=\"toggleSoftWrap()\"\n (downloadCode)=\"downloadCode()\"\n (copyCode)=\"copyCode()\"\n (openExternalSystem)=\"openExternalSystem()\">\n </mc-actionbar-block></pre>\n\n <button\n class=\"mc-button_transparent mc-code-block__show-more\"\n mc-button\n *ngIf=\"viewAll || codeContent.offsetHeight < codeContent.scrollHeight\"\n (click)=\"toggleViewAll()\">\n\n {{ viewAll ? config.viewLessText : config.viewAllText}}\n <i class=\"mc mc-angle-down-S_16\" *ngIf=\"!viewAll\"></i>\n <i class=\"mc mc-angle-up-S_16\" *ngIf=\"viewAll\"></i>\n </button>\n </mc-tab>\n</mc-tab-group>\n", styles: [".mc-code-block{display:block;position:relative;box-sizing:border-box;hyphens:none;-ms-hyphens:none;-moz-hyphens:none;-webkit-hyphens:none;border-width:1px;border-style:solid;border-radius:4px}.mc-code-block:not(.mc-code-block_no-header) .mc-tab-group:after{content:\"\";position:absolute;top:39px;left:0;right:0;height:1px}.mc-code-block .mc-tab-header{margin-right:152px}.mc-code-block.mc-code-block_hide-line-numbers .hljs-ln-line.hljs-ln-numbers{display:none}.mc-code-block.mc-code-block_single-file .mc-tab-label:before{content:none}.mc-code-block.mc-code-block_single-file .mc-tab-label:hover{background:transparent!important}.mc-code-block.mc-code-block_no-header .mc-code-block__code{position:relative}.mc-code-block.mc-code-block_no-header .mc-tab-header{display:none}.mc-code-block pre{margin:0}.mc-code-block .mc-tab-body__wrapper{flex-direction:column;position:static;position:initial}.mc-code-block .mc-tab-body.mc-tab-body__active{position:static;position:initial}.mc-code-block__code{overflow-y:hidden}.mc-code-block__code.mc-code-block__code_view-all{max-height:none;max-height:initial;overflow-y:visible;overflow-y:initial}.mc-code-block__code.mc-code-block__code_soft-wrap{white-space:pre-wrap}.mc-code-block__code>code{padding:12px!important}.mc-code-block__code .hljs-ln{border-collapse:inherit}.mc-code-block__code .hljs-ln .hljs{padding:0}.mc-code-block__code .hljs-ln-numbers{border-right-width:0;padding:2px 12px 0 0;vertical-align:baseline;text-align:right}.mc-code-block__code .hljs-ln-n:before{white-space:nowrap}.mc-code-block__show-more{overflow:hidden;width:100%;border-top-style:solid!important;border-top-width:1px!important;border-top-left-radius:0!important;border-top-right-radius:0!important}\n"] }]
|
203
|
+
}], ctorParameters: function () {
|
204
|
+
return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.Clipboard }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
|
205
|
+
type: Optional
|
206
|
+
}, {
|
207
|
+
type: Inject,
|
208
|
+
args: [MC_CODE_BLOCK_CONFIGURATION]
|
209
|
+
}] }];
|
210
|
+
}, propDecorators: { tabGroup: [{
|
211
|
+
type: ViewChild,
|
212
|
+
args: [McTabGroup]
|
213
|
+
}], lineNumbers: [{
|
214
|
+
type: Input
|
215
|
+
}], codeFiles: [{
|
216
|
+
type: Input
|
217
|
+
}], lessContrast: [{
|
218
|
+
type: Input
|
219
|
+
}], maxHeight: [{
|
220
|
+
type: Input
|
221
|
+
}], softWrap: [{
|
222
|
+
type: Input
|
223
|
+
}] } });
|
224
|
+
|
225
|
+
class McCodeBlockModule {
|
226
|
+
}
|
227
|
+
/** @nocollapse */ McCodeBlockModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: McCodeBlockModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
228
|
+
/** @nocollapse */ McCodeBlockModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: McCodeBlockModule, declarations: [McCodeBlockComponent,
|
229
|
+
McActionBarComponent], imports: [CommonModule,
|
230
|
+
McButtonModule,
|
231
|
+
McToolTipModule,
|
232
|
+
McIconModule,
|
233
|
+
HighlightModule,
|
234
|
+
McTabsModule], exports: [McCodeBlockComponent] });
|
235
|
+
/** @nocollapse */ McCodeBlockModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: McCodeBlockModule, providers: [{
|
236
|
+
provide: HIGHLIGHT_OPTIONS,
|
237
|
+
useValue: {
|
238
|
+
fullLibraryLoader: (() => import('highlight.js')),
|
239
|
+
lineNumbersLoader: (() => import('highlightjs-line-numbers.js')),
|
240
|
+
lineNumbers: true
|
241
|
+
}
|
242
|
+
}], imports: [CommonModule,
|
243
|
+
McButtonModule,
|
244
|
+
McToolTipModule,
|
245
|
+
McIconModule,
|
246
|
+
HighlightModule,
|
247
|
+
McTabsModule] });
|
248
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: McCodeBlockModule, decorators: [{
|
249
|
+
type: NgModule,
|
250
|
+
args: [{
|
251
|
+
imports: [
|
252
|
+
CommonModule,
|
253
|
+
McButtonModule,
|
254
|
+
McToolTipModule,
|
255
|
+
McIconModule,
|
256
|
+
HighlightModule,
|
257
|
+
McTabsModule
|
258
|
+
],
|
259
|
+
declarations: [
|
260
|
+
McCodeBlockComponent,
|
261
|
+
McActionBarComponent
|
262
|
+
],
|
263
|
+
providers: [{
|
264
|
+
provide: HIGHLIGHT_OPTIONS,
|
265
|
+
useValue: {
|
266
|
+
fullLibraryLoader: (() => import('highlight.js')),
|
267
|
+
lineNumbersLoader: (() => import('highlightjs-line-numbers.js')),
|
268
|
+
lineNumbers: true
|
269
|
+
}
|
270
|
+
}],
|
271
|
+
exports: [McCodeBlockComponent]
|
272
|
+
}]
|
273
|
+
}] });
|
274
|
+
|
275
|
+
/**
|
276
|
+
* Generated bundle index. Do not edit.
|
277
|
+
*/
|
278
|
+
|
279
|
+
export { COPIED_MESSAGE_TOOLTIP_TIMEOUT, DEFAULT_EXTENSION, LANGUAGES_EXTENSIONS, MC_CODE_BLOCK_CONFIGURATION, MC_CODE_BLOCK_DEFAULT_CONFIGURATION, McCodeBlockComponent, McCodeBlockModule };
|
280
|
+
//# sourceMappingURL=ptsecurity-mosaic-code-block.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"ptsecurity-mosaic-code-block.mjs","sources":["../../../packages/mosaic/code-block/actionbar.component.ts","../../../packages/mosaic/code-block/actionbar.component.html","../../../packages/mosaic/code-block/code-block.component.ts","../../../packages/mosaic/code-block/code-block.component.html","../../../packages/mosaic/code-block/code-block.module.ts","../../../packages/mosaic/code-block/ptsecurity-mosaic-code-block.ts"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { McTooltipTrigger } from '@ptsecurity/mosaic/tooltip';\nimport { filter } from 'rxjs/operators';\n\nimport {\n McCodeBlockConfiguration,\n McCodeFile\n} from './code-block.types';\n\n\n@Component({\n selector: 'mc-actionbar-block',\n templateUrl: './actionbar.component.html',\n styleUrls: ['./actionbar.component.scss'],\n host: {\n class: 'mc-code-block-actionbar',\n '[class.mc-code-block-actionbar_less-contrast]': 'lessContrast'\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class McActionBarComponent implements AfterViewInit {\n @ViewChild('copyTooltip') copyTooltip: McTooltipTrigger;\n\n @Input() config: McCodeBlockConfiguration;\n @Input() codeFiles: McCodeFile[];\n @Input() lessContrast: boolean;\n @Input() selectedTabIndex = 0;\n @Input() multiLine: boolean;\n @Input() softWrap: boolean;\n\n @Output() toggleSoftWrap = new EventEmitter<void>();\n @Output() downloadCode = new EventEmitter<void>();\n @Output() copyCode = new EventEmitter<void>();\n @Output() openExternalSystem = new EventEmitter<void>();\n\n copyTooltipText: string;\n\n ngAfterViewInit(): void {\n this.copyTooltipText = this.config.copyTooltip;\n\n this.copyTooltip.visibleChange\n .pipe(filter((state) => !state))\n .subscribe(() => {\n if (this.copyTooltipText === this.config.copiedTooltip) {\n this.copyTooltipText = this.config.copyTooltip;\n }\n });\n }\n\n onCopy() {\n this.copyCode.emit();\n\n setTimeout(() => {\n this.copyTooltipText = this.config.copiedTooltip;\n this.copyTooltip.show();\n });\n }\n}\n","<button mc-button\n class=\"mc-icon-button mc-button_transparent\"\n *ngIf=\"multiLine\"\n [mcTooltip]=\"softWrap ? config.softWrapOffTooltip : config.softWrapOnTooltip\"\n (click)=\"toggleSoftWrap.emit()\">\n <i *ngIf=\"!softWrap\" mc-icon=\"mc-word-wrap_16\"></i>\n <i *ngIf=\"softWrap\" mc-icon=\"mc-word-wrap-slash_16\"></i>\n</button>\n\n<button mc-button\n class=\"mc-button_transparent\"\n [mcTooltip]=\"config.downloadTooltip\"\n (click)=\"downloadCode.emit()\">\n <i mc-icon=\"mc-download_16\"></i>\n</button>\n\n<button mc-button\n class=\"mc-button_transparent\"\n #copyTooltip=\"mcTooltip\"\n [mcTooltip]=\"copyTooltipText\"\n (click)=\"onCopy()\">\n <i mc-icon=\"mc-copy-o_16\"></i>\n</button>\n\n<button mc-button\n class=\"mc-button_transparent\"\n *ngIf=\"codeFiles[selectedTabIndex].link\"\n [mcTooltip]=\"config.openExternalSystemTooltip\"\n (click)=\"openExternalSystem.emit()\">\n <i mc-icon=\"mc-external-link_16\"></i>\n</button>\n","import { Clipboard } from '@angular/cdk/clipboard';\nimport {\n Component,\n ViewEncapsulation,\n Input,\n Inject,\n InjectionToken,\n ChangeDetectionStrategy,\n Optional,\n ElementRef,\n ChangeDetectorRef,\n OnDestroy,\n ViewChild,\n Renderer2\n} from '@angular/core';\nimport { McTabChangeEvent, McTabGroup } from '@ptsecurity/mosaic/tabs';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime } from 'rxjs/operators';\n\nimport {\n McCodeBlockConfiguration,\n McCodeFile\n} from './code-block.types';\n\n\nexport const COPIED_MESSAGE_TOOLTIP_TIMEOUT = 100;\nexport const DEFAULT_EXTENSION = 'txt';\nexport const LANGUAGES_EXTENSIONS = {\n html: 'html',\n css: 'css',\n php: 'php',\n java: 'java',\n bash: 'sh',\n javascript: 'js',\n typescript: 'ts',\n python: 'py',\n ruby: 'rb',\n c: 'c',\n 'c++': 'cpp',\n 'c#': 'cs',\n csharp: 'cs',\n lua: 'lua',\n xml: 'xml',\n json: 'json'\n};\n\nexport const MC_CODE_BLOCK_CONFIGURATION = new InjectionToken<any>('McCodeBlockConfiguration');\n\nexport const MC_CODE_BLOCK_DEFAULT_CONFIGURATION = {\n softWrapOnTooltip: 'Включить перенос по словам',\n softWrapOffTooltip: 'Выключить перенос по словам',\n downloadTooltip: 'Скачать',\n copiedTooltip: '✓ Скопировано',\n copyTooltip: 'Скопировать',\n viewAllText: 'Показать все',\n viewLessText: 'Свернуть',\n openExternalSystemTooltip: 'Открыть во внешней системе'\n};\n\n\nconst actionBarBlockLeftMargin = 24;\n\n@Component({\n selector: 'mc-code-block',\n exportAs: 'mcCodeBlock',\n templateUrl: './code-block.component.html',\n styleUrls: ['./code-block.scss'],\n host: {\n class: 'mc-code-block',\n '[class.mc-code-block_less-contrast]': 'lessContrast',\n '[class.mc-code-block_hide-line-numbers]': '!lineNumbers',\n '[class.mc-code-block_single-file]': 'singleFile',\n '[class.mc-code-block_no-header]': 'noHeader',\n '(window:resize)': 'resizeStream.next($event)'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class McCodeBlockComponent implements OnDestroy {\n\n @ViewChild(McTabGroup) tabGroup: McTabGroup;\n\n @Input() lineNumbers = true;\n @Input() codeFiles: McCodeFile[];\n @Input() lessContrast: boolean;\n @Input() maxHeight: number;\n @Input() softWrap: boolean = false;\n\n get noHeader(): any {\n return this.codeFiles.length === 1 && !this.codeFiles[0].filename;\n }\n\n get singleFile(): boolean {\n return this.codeFiles.length === 1;\n }\n\n selectedTabIndex = 0;\n copied: boolean = false;\n viewAll: boolean = false;\n multiLine: boolean = false;\n\n readonly resizeStream = new Subject<Event>();\n\n private readonly resizeDebounceInterval: number = 100;\n private resizeSubscription = Subscription.EMPTY;\n\n constructor(\n private elementRef: ElementRef,\n private changeDetectorRef: ChangeDetectorRef,\n private clipboard: Clipboard,\n private renderer: Renderer2,\n @Optional() @Inject(MC_CODE_BLOCK_CONFIGURATION) public config: McCodeBlockConfiguration\n ) {\n this.config = config || MC_CODE_BLOCK_DEFAULT_CONFIGURATION;\n\n this.resizeSubscription = this.resizeStream\n .pipe(debounceTime(this.resizeDebounceInterval))\n .subscribe(this.updateHeader);\n }\n\n ngOnDestroy(): void {\n this.resizeSubscription.unsubscribe();\n }\n\n updateHeader = () => {\n const clientWidth: number = this.elementRef.nativeElement.querySelector('mc-actionbar-block').clientWidth;\n\n this.renderer.setStyle(\n this.tabGroup.tabHeader.elementRef.nativeElement,\n 'margin-right',\n `${actionBarBlockLeftMargin + clientWidth}px`\n );\n\n this.changeDetectorRef.markForCheck();\n }\n\n toggleSoftWrap() {\n this.softWrap = !this.softWrap;\n }\n\n toggleViewAll() {\n this.viewAll = !this.viewAll;\n }\n\n downloadCode() {\n const codeFile = this.codeFiles[this.selectedTabIndex];\n const blob = new Blob([codeFile.content], { type: 'text/plain' });\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n\n link.setAttribute('href', url);\n link.setAttribute('download', `${this.getFullFileName(codeFile)}`);\n link.click();\n }\n\n copyCode() {\n this.clipboard.copy(this.codeFiles[this.selectedTabIndex].content);\n this.copied = true;\n }\n\n openExternalSystem() {\n const externalLink = this.codeFiles[this.selectedTabIndex].link;\n window.open(externalLink, '_blank');\n }\n\n onHighlighted() {\n setTimeout(this.updateMultiline, 1);\n }\n\n getMaxHeight(): string {\n return this.maxHeight > 0 && !this.viewAll ? `${this.maxHeight}px` : 'none';\n }\n\n onSelectTab($event: McTabChangeEvent) {\n this.selectedTabIndex = $event.index;\n this.updateMultiline();\n\n setTimeout(this.updateHeader);\n }\n\n private updateMultiline = () => {\n this.multiLine = this.elementRef.nativeElement\n .querySelectorAll('.hljs-ln-numbers').length > 1;\n\n this.updateHeader();\n\n this.changeDetectorRef.markForCheck();\n }\n\n private getFullFileName(codeFile: McCodeFile): string {\n const fileName = codeFile.filename || 'code';\n const extension = LANGUAGES_EXTENSIONS[codeFile.language] || DEFAULT_EXTENSION;\n\n return `${fileName}.${extension}`;\n }\n}\n","<mc-tab-group (selectedTabChange)=\"onSelectTab($event)\">\n <mc-tab\n *ngFor=\"let codeFile of codeFiles; let i = index\"\n [disabled]=\"singleFile\">\n\n <ng-template mc-tab-label>{{ codeFile.filename }}</ng-template>\n\n <pre class=\"mc-code-block__code mc-scrollbar\"\n #codeContent\n [style.max-height]=\"getMaxHeight()\"\n [class.mc-code-block__code_soft-wrap]=\"softWrap\"\n [class.mc-code-block__code_view-all]=\"viewAll\"\n ><code class=\"hljs\"\n [id]=\"codeFile.filename + '_' + i\"\n [class.hljs-line-numbers]=\"lineNumbers\"\n [highlight]=\"codeFiles[i].content\"\n [lineNumbers]=\"true\"\n (highlighted)=\"onHighlighted()\">\n </code><mc-actionbar-block\n [class.mc-actionbar-block_floating]=\"noHeader\"\n [config]=\"config\"\n [codeFiles]=\"codeFiles\"\n [selectedTabIndex]=\"selectedTabIndex\"\n [lessContrast]=\"lessContrast\"\n [multiLine]=\"multiLine\"\n [softWrap]=\"softWrap\"\n (toggleSoftWrap)=\"toggleSoftWrap()\"\n (downloadCode)=\"downloadCode()\"\n (copyCode)=\"copyCode()\"\n (openExternalSystem)=\"openExternalSystem()\">\n </mc-actionbar-block></pre>\n\n <button\n class=\"mc-button_transparent mc-code-block__show-more\"\n mc-button\n *ngIf=\"viewAll || codeContent.offsetHeight < codeContent.scrollHeight\"\n (click)=\"toggleViewAll()\">\n\n {{ viewAll ? config.viewLessText : config.viewAllText}}\n <i class=\"mc mc-angle-down-S_16\" *ngIf=\"!viewAll\"></i>\n <i class=\"mc mc-angle-up-S_16\" *ngIf=\"viewAll\"></i>\n </button>\n </mc-tab>\n</mc-tab-group>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { McButtonModule } from '@ptsecurity/mosaic/button';\nimport { McIconModule } from '@ptsecurity/mosaic/icon';\nimport { McTabsModule } from '@ptsecurity/mosaic/tabs';\nimport { McToolTipModule } from '@ptsecurity/mosaic/tooltip';\nimport { HIGHLIGHT_OPTIONS, HighlightModule } from 'ngx-highlightjs';\n\nimport { McActionBarComponent } from './actionbar.component';\nimport { McCodeBlockComponent } from './code-block.component';\n\n\n@NgModule({\n imports: [\n CommonModule,\n McButtonModule,\n McToolTipModule,\n McIconModule,\n HighlightModule,\n McTabsModule\n ], // , I18nModule\n declarations: [\n McCodeBlockComponent,\n McActionBarComponent\n ],\n providers: [{\n provide: HIGHLIGHT_OPTIONS,\n useValue: {\n fullLibraryLoader: () => import('highlight.js'),\n lineNumbersLoader: () => import('highlightjs-line-numbers.js'),\n lineNumbers: true\n }\n }],\n exports: [McCodeBlockComponent]\n})\nexport class McCodeBlockModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","i6.McActionBarComponent"],"mappings":"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"}
|
@@ -17,7 +17,7 @@ import { takeUntil, distinctUntilChanged, delay } from 'rxjs/operators';
|
|
17
17
|
import * as i1$1 from '@angular/cdk/a11y';
|
18
18
|
import { ComponentPortal } from '@angular/cdk/portal';
|
19
19
|
|
20
|
-
const VERSION = new Version('14.
|
20
|
+
const VERSION = new Version('14.7.1+sha-dad4a73');
|
21
21
|
|
22
22
|
function isBoolean(val) { return typeof val === 'boolean'; }
|
23
23
|
function toBoolean(value) {
|
@@ -563,6 +563,61 @@ const enUS = {
|
|
563
563
|
}`
|
564
564
|
}
|
565
565
|
}
|
566
|
+
},
|
567
|
+
durationTemplates: {
|
568
|
+
shortest: {
|
569
|
+
FULL: '{D, duration}{SHOW_MILLISECONDS, select, yes{,{MILLISECONDS}} other {}}',
|
570
|
+
ONLY_MINUTES: '{HOURS}:{MINUTES, number, ::integer-width/00}'
|
571
|
+
},
|
572
|
+
long: {
|
573
|
+
SEPARATOR: '',
|
574
|
+
YEARS: `{years, plural,
|
575
|
+
=1 {# year}
|
576
|
+
other {# years}
|
577
|
+
}`,
|
578
|
+
MONTHS: `{months, plural,
|
579
|
+
=1 {# month}
|
580
|
+
other {# months}
|
581
|
+
}`,
|
582
|
+
WEEKS: `{weeks, plural,
|
583
|
+
=1 {# week}
|
584
|
+
other {# weeks}
|
585
|
+
}`,
|
586
|
+
DAYS: `{days, plural,
|
587
|
+
=1 {# day}
|
588
|
+
other {# days}
|
589
|
+
}`,
|
590
|
+
HOURS: `{hours, plural,
|
591
|
+
=1 {# hour}
|
592
|
+
other {# hours}
|
593
|
+
}`,
|
594
|
+
MINUTES: `{minutes, plural,
|
595
|
+
=1 {# minute}
|
596
|
+
other {# minutes}
|
597
|
+
}`,
|
598
|
+
SECONDS: `{seconds, plural,
|
599
|
+
=1 {# second}
|
600
|
+
other {# seconds}
|
601
|
+
}`,
|
602
|
+
YEARS_FRACTION: `{years} years`,
|
603
|
+
MONTHS_FRACTION: `{months} months`
|
604
|
+
},
|
605
|
+
short: {
|
606
|
+
SEPARATOR: '',
|
607
|
+
YEARS: `{years} y`,
|
608
|
+
MONTHS: `{months} mo`,
|
609
|
+
WEEKS: `{weeks} w`,
|
610
|
+
DAYS: `{days} d`,
|
611
|
+
HOURS: `{hours} h`,
|
612
|
+
MINUTES: `{minutes} min`,
|
613
|
+
SECONDS: `{SHOW_MILLISECONDS, select, yes
|
614
|
+
{{seconds}.{milliseconds} s}
|
615
|
+
other
|
616
|
+
{{seconds} s}
|
617
|
+
}`,
|
618
|
+
YEARS_FRACTION: '{years} y',
|
619
|
+
MONTHS_FRACTION: '{months} mo'
|
620
|
+
}
|
566
621
|
}
|
567
622
|
};
|
568
623
|
|
@@ -844,6 +899,97 @@ const ruRU = {
|
|
844
899
|
}`
|
845
900
|
}
|
846
901
|
}
|
902
|
+
},
|
903
|
+
durationTemplates: {
|
904
|
+
shortest: {
|
905
|
+
FULL: '{D, duration}{SHOW_MILLISECONDS, select, yes{,{MILLISECONDS}} other {}}',
|
906
|
+
ONLY_MINUTES: '{HOURS}:{MINUTES, number, ::integer-width/00}'
|
907
|
+
},
|
908
|
+
long: {
|
909
|
+
SEPARATOR: 'и',
|
910
|
+
YEARS: `{years, plural,
|
911
|
+
one {# год}
|
912
|
+
few {# года}
|
913
|
+
many {# лет}
|
914
|
+
other {}
|
915
|
+
}`,
|
916
|
+
MONTHS: `{months, plural,
|
917
|
+
one {# месяц}
|
918
|
+
few {# месяца}
|
919
|
+
many {# месяцев}
|
920
|
+
other {}
|
921
|
+
}`,
|
922
|
+
WEEKS: `{weeks, plural,
|
923
|
+
one {# неделя}
|
924
|
+
few {# недели}
|
925
|
+
many {# недель}
|
926
|
+
other {}
|
927
|
+
}`,
|
928
|
+
DAYS: `{days, plural,
|
929
|
+
one {# день}
|
930
|
+
few {# дня}
|
931
|
+
many {# дней}
|
932
|
+
other {}
|
933
|
+
}`,
|
934
|
+
HOURS: `{hours, plural,
|
935
|
+
one {# час}
|
936
|
+
few {# часа}
|
937
|
+
many {# часов}
|
938
|
+
other {}
|
939
|
+
}`,
|
940
|
+
MINUTES: `{minutes, plural,
|
941
|
+
one {# минута}
|
942
|
+
few {# минуты}
|
943
|
+
many {# минут}
|
944
|
+
other {}
|
945
|
+
}`,
|
946
|
+
SECONDS: `{seconds, plural,
|
947
|
+
one {# секунда}
|
948
|
+
few {# секунды}
|
949
|
+
many {# секунд}
|
950
|
+
other {}
|
951
|
+
}`,
|
952
|
+
YEARS_FRACTION: `{floorValue, plural,
|
953
|
+
=1 {{years, number, ::#,#} года}
|
954
|
+
one {{years, number, ::#,#} год}
|
955
|
+
few {{years, number, ::#,#} года}
|
956
|
+
other {{years, number, ::#,#} лет}
|
957
|
+
}`,
|
958
|
+
MONTHS_FRACTION: `{floorValue, plural,
|
959
|
+
=1 {{months, number, ::#,#} месяца}
|
960
|
+
one {{months, number, ::#,#} месяц}
|
961
|
+
few {{months, number, ::#,#} месяца}
|
962
|
+
other {{months, number, ::#,#} месяцев}
|
963
|
+
}`
|
964
|
+
},
|
965
|
+
short: {
|
966
|
+
SEPARATOR: '',
|
967
|
+
YEARS: `{years, plural,
|
968
|
+
one {# г}
|
969
|
+
few {# г}
|
970
|
+
many {# л}
|
971
|
+
other {}
|
972
|
+
}`,
|
973
|
+
MONTHS: `{months} мес`,
|
974
|
+
WEEKS: `{weeks} нед`,
|
975
|
+
DAYS: `{days} д`,
|
976
|
+
HOURS: `{hours} ч`,
|
977
|
+
MINUTES: `{minutes} мин`,
|
978
|
+
SECONDS: `{SHOW_MILLISECONDS, select, yes
|
979
|
+
{{seconds},{milliseconds} с}
|
980
|
+
other
|
981
|
+
{{seconds} с}
|
982
|
+
}`,
|
983
|
+
YEARS_FRACTION: `{floorValue, plural,
|
984
|
+
one {{years, number, ::#,#} г}
|
985
|
+
few {{years, number, ::#,#} г}
|
986
|
+
other {{years, number, ::#,#} л}
|
987
|
+
}`,
|
988
|
+
MONTHS_FRACTION: `{floorValue, plural,
|
989
|
+
=1 {{months, number, ::#,#} мес}
|
990
|
+
other {{months, number, ::#,#} мес}
|
991
|
+
}`
|
992
|
+
}
|
847
993
|
}
|
848
994
|
};
|
849
995
|
|
@@ -1134,6 +1280,82 @@ class DateFormatter {
|
|
1134
1280
|
rangeMiddleDateTime(startDate, endDate, options) {
|
1135
1281
|
return this.rangeDateTime(startDate, endDate, this.config.rangeTemplates.closedRange.middle, options === null || options === void 0 ? void 0 : options.seconds, options === null || options === void 0 ? void 0 : options.milliseconds);
|
1136
1282
|
}
|
1283
|
+
/**
|
1284
|
+
* @param startDate - start date
|
1285
|
+
* @param endDate - end date
|
1286
|
+
* @param seconds - add seconds to formatted value
|
1287
|
+
* @param milliseconds - add milliseconds to formatted value
|
1288
|
+
* @returns formatted duration as string like 48:02:25
|
1289
|
+
*/
|
1290
|
+
durationShortest(startDate, endDate, seconds = true, milliseconds = false) {
|
1291
|
+
this.checkDates(startDate, endDate);
|
1292
|
+
if (startDate > endDate) {
|
1293
|
+
throw new Error(this.invalidDateErrorText);
|
1294
|
+
}
|
1295
|
+
const durationObject = this.adapter.durationObjectFromDates(startDate, endDate, ['hours', 'minutes', 'seconds', 'milliseconds']);
|
1296
|
+
const roundedSeconds = Math.floor(this.adapter.durationAs(durationObject, 'seconds'));
|
1297
|
+
if (seconds) {
|
1298
|
+
return this.compileMessage(this.config.durationTemplates.shortest.FULL, {
|
1299
|
+
D: roundedSeconds,
|
1300
|
+
SHOW_MILLISECONDS: milliseconds ? 'yes' : 'no',
|
1301
|
+
MILLISECONDS: durationObject.milliseconds
|
1302
|
+
});
|
1303
|
+
}
|
1304
|
+
return roundedSeconds - (roundedSeconds % 60) ? this.compileMessage(this.config.durationTemplates.shortest.ONLY_MINUTES, {
|
1305
|
+
HOURS: durationObject.hours,
|
1306
|
+
MINUTES: durationObject.minutes
|
1307
|
+
}) : '';
|
1308
|
+
}
|
1309
|
+
/**
|
1310
|
+
* @param startDate - start date
|
1311
|
+
* @param endDate - end date
|
1312
|
+
* @param units - if defined, units to show will be specified
|
1313
|
+
* @param fraction - shows fraction part for years and months
|
1314
|
+
* @param template - specify template
|
1315
|
+
* @returns formatted duration as string
|
1316
|
+
*/
|
1317
|
+
duration(startDate, endDate, units, fraction, template) {
|
1318
|
+
this.checkDates(startDate, endDate);
|
1319
|
+
if (startDate > endDate) {
|
1320
|
+
throw new Error(this.invalidDateErrorText);
|
1321
|
+
}
|
1322
|
+
const values = this.adapter.durationObjectFromDates(startDate, endDate, units, fraction);
|
1323
|
+
const variables = Object.assign({}, values);
|
1324
|
+
variables.SHOW_MILLISECONDS = values.milliseconds ? 'yes' : 'no';
|
1325
|
+
return Object
|
1326
|
+
.keys(values)
|
1327
|
+
.reduce((acc, unit, index, arr) => {
|
1328
|
+
if (fraction) {
|
1329
|
+
variables.floorValue = Math.floor(values[unit]);
|
1330
|
+
acc.push(this.compileMessage(template[`${unit.toUpperCase()}_FRACTION`], variables));
|
1331
|
+
}
|
1332
|
+
else {
|
1333
|
+
if (arr.length > 1 && index === arr.length - 1) {
|
1334
|
+
acc.push(this.compileMessage(template.SEPARATOR, variables));
|
1335
|
+
}
|
1336
|
+
acc.push(this.compileMessage(template[unit.toUpperCase()], variables));
|
1337
|
+
}
|
1338
|
+
return acc;
|
1339
|
+
}, [])
|
1340
|
+
.filter((text) => !!text)
|
1341
|
+
.join(' ');
|
1342
|
+
}
|
1343
|
+
durationLong(startDate, endDate, units = [], fraction = false) {
|
1344
|
+
return this.duration(startDate, endDate, units, fraction, this.config.durationTemplates.long);
|
1345
|
+
}
|
1346
|
+
durationShort(startDate, endDate, units = [], fraction = false) {
|
1347
|
+
return this.duration(startDate, endDate, units, fraction, this.config.durationTemplates.short);
|
1348
|
+
}
|
1349
|
+
checkDates(...args) {
|
1350
|
+
args.forEach((date) => {
|
1351
|
+
if (!this.adapter.isDateInstance(date) || !this.adapter.isValid(date)) {
|
1352
|
+
throw new Error(this.invalidDateErrorText);
|
1353
|
+
}
|
1354
|
+
});
|
1355
|
+
}
|
1356
|
+
compileMessage(message, variables) {
|
1357
|
+
return this.messageFormat.compile(message)(variables);
|
1358
|
+
}
|
1137
1359
|
/**
|
1138
1360
|
* @param date - date for compile
|
1139
1361
|
* @param variables - date template variables
|
@@ -1997,7 +2219,7 @@ class McPseudoCheckboxBase {
|
|
1997
2219
|
this.elementRef = elementRef;
|
1998
2220
|
}
|
1999
2221
|
}
|
2000
|
-
|
2222
|
+
/** @docs-private */
|
2001
2223
|
const McPseudoCheckboxMixinBase = mixinColor(mixinDisabled(McPseudoCheckboxBase), ThemePalette.Primary);
|
2002
2224
|
/**
|
2003
2225
|
* Component that shows a simplified checkbox without including any kind of "real" checkbox.
|
@@ -2375,9 +2597,10 @@ function getOptionScrollPosition(optionIndex, optionHeight, currentScrollPositio
|
|
2375
2597
|
}
|
2376
2598
|
|
2377
2599
|
const MC_OPTION_ACTION_PARENT = new InjectionToken('MC_OPTION_ACTION_PARENT');
|
2600
|
+
/** @docs-private */
|
2378
2601
|
class McOptionActionBase {
|
2379
2602
|
}
|
2380
|
-
|
2603
|
+
/** @docs-private */
|
2381
2604
|
const McOptionActionMixinBase = mixinTabIndex(mixinDisabled(McOptionActionBase));
|
2382
2605
|
class McOptionActionComponent extends McOptionActionMixinBase {
|
2383
2606
|
constructor(elementRef, focusMonitor, option) {
|