ngx-tethys 19.1.0-next.0 → 19.1.0-next.2
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/CHANGELOG.md +36 -0
- package/README.md +0 -1
- package/action/action.component.d.ts +7 -8
- package/affix/affix.component.d.ts +3 -4
- package/arrow-switcher/arrow-switcher.component.d.ts +5 -1
- package/button/button-group.component.d.ts +5 -12
- package/button/button-icon.component.d.ts +14 -28
- package/button/button.component.d.ts +17 -27
- package/date-picker/styles/calendar.scss +1 -1
- package/date-picker/styles/range-picker.scss +1 -0
- package/date-picker/styles/week-picker.scss +1 -0
- package/dropdown/dropdown-active.directive.d.ts +4 -5
- package/dropdown/dropdown-menu-item.directive.d.ts +7 -15
- package/dropdown/dropdown-menu.component.d.ts +6 -13
- package/dropdown/dropdown-submenu.component.d.ts +2 -4
- package/dropdown/dropdown.directive.d.ts +14 -25
- package/fesm2022/ngx-tethys-action.mjs +15 -16
- package/fesm2022/ngx-tethys-action.mjs.map +1 -1
- package/fesm2022/ngx-tethys-affix.mjs +14 -18
- package/fesm2022/ngx-tethys-affix.mjs.map +1 -1
- package/fesm2022/ngx-tethys-arrow-switcher.mjs +15 -3
- package/fesm2022/ngx-tethys-arrow-switcher.mjs.map +1 -1
- package/fesm2022/ngx-tethys-button.mjs +225 -322
- package/fesm2022/ngx-tethys-button.mjs.map +1 -1
- package/fesm2022/ngx-tethys-carousel.mjs +1 -0
- package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
- package/fesm2022/ngx-tethys-collapse.mjs +2 -2
- package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
- package/fesm2022/ngx-tethys-date-picker.mjs +6 -6
- package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
- package/fesm2022/ngx-tethys-dropdown.mjs +155 -203
- package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
- package/fesm2022/ngx-tethys-flexible-text.mjs +67 -86
- package/fesm2022/ngx-tethys-flexible-text.mjs.map +1 -1
- package/fesm2022/ngx-tethys-grid.mjs +10 -15
- package/fesm2022/ngx-tethys-grid.mjs.map +1 -1
- package/fesm2022/ngx-tethys-icon.mjs +44 -59
- package/fesm2022/ngx-tethys-icon.mjs.map +1 -1
- package/fesm2022/ngx-tethys-image.mjs +40 -36
- package/fesm2022/ngx-tethys-image.mjs.map +1 -1
- package/fesm2022/ngx-tethys-input-number.mjs.map +1 -1
- package/fesm2022/ngx-tethys-progress.mjs +7 -11
- package/fesm2022/ngx-tethys-progress.mjs.map +1 -1
- package/fesm2022/ngx-tethys-property.mjs +8 -19
- package/fesm2022/ngx-tethys-property.mjs.map +1 -1
- package/fesm2022/ngx-tethys-radio.mjs +42 -54
- package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
- package/fesm2022/ngx-tethys-rate.mjs +115 -157
- package/fesm2022/ngx-tethys-rate.mjs.map +1 -1
- package/fesm2022/ngx-tethys-resizable.mjs +111 -157
- package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
- package/fesm2022/ngx-tethys-segment.mjs +84 -103
- package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
- package/fesm2022/ngx-tethys-shared.mjs +2 -1
- package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
- package/fesm2022/ngx-tethys-slide.mjs +37 -56
- package/fesm2022/ngx-tethys-slide.mjs.map +1 -1
- package/fesm2022/ngx-tethys-slider.mjs.map +1 -1
- package/fesm2022/ngx-tethys-space.mjs +2 -8
- package/fesm2022/ngx-tethys-space.mjs.map +1 -1
- package/fesm2022/ngx-tethys-strength.mjs +52 -66
- package/fesm2022/ngx-tethys-strength.mjs.map +1 -1
- package/fesm2022/ngx-tethys-transfer.mjs +98 -119
- package/fesm2022/ngx-tethys-transfer.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree-select.mjs +2 -4
- package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
- package/fesm2022/ngx-tethys-tree.mjs +281 -401
- package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
- package/fesm2022/ngx-tethys-upload.mjs +2 -2
- package/fesm2022/ngx-tethys-upload.mjs.map +1 -1
- package/fesm2022/ngx-tethys-vote.mjs +53 -99
- package/fesm2022/ngx-tethys-vote.mjs.map +1 -1
- package/fesm2022/ngx-tethys.mjs +1 -1
- package/fesm2022/ngx-tethys.mjs.map +1 -1
- package/flexible-text/flexible-text.component.d.ts +9 -15
- package/grid/flex.d.ts +1 -3
- package/grid/thy-row.directive.d.ts +1 -4
- package/icon/icon.component.d.ts +10 -18
- package/image/image.directive.d.ts +10 -13
- package/image/image.token.d.ts +5 -5
- package/input-number/input-number.component.d.ts +1 -1
- package/package.json +1 -1
- package/progress/progress-circle.component.d.ts +3 -5
- package/progress/progress.component.d.ts +2 -4
- package/property/properties.component.d.ts +0 -2
- package/property/property-item.component.d.ts +3 -10
- package/radio/group/radio-group.component.d.ts +5 -9
- package/rate/rate-item.component.d.ts +8 -11
- package/rate/rate.component.d.ts +18 -29
- package/resizable/resizable.directive.d.ts +18 -31
- package/resizable/resize-handle.component.d.ts +6 -7
- package/resizable/resize-handles.component.d.ts +5 -9
- package/schematics/version.d.ts +1 -1
- package/schematics/version.js +1 -1
- package/segment/segment-item.component.d.ts +9 -15
- package/segment/segment.component.d.ts +11 -15
- package/segment/segment.token.d.ts +4 -3
- package/slide/slide-body/slide-body-section.component.d.ts +2 -6
- package/slide/slide-header/slide-header.component.d.ts +6 -9
- package/space/space.component.d.ts +5 -11
- package/strength/strength.component.d.ts +8 -13
- package/transfer/transfer-list.component.d.ts +15 -15
- package/transfer/transfer.component.d.ts +20 -23
- package/tree/tree-abstract.d.ts +5 -5
- package/tree/tree-node.component.d.ts +24 -37
- package/tree/tree.class.d.ts +4 -4
- package/tree/tree.component.d.ts +47 -75
- package/tree/tree.service.d.ts +3 -4
- package/tree-select/tree-select.component.d.ts +2 -2
- package/vote/vote.component.d.ts +13 -33
|
@@ -9,9 +9,6 @@ import { ThyTooltipDirective, ThyTooltipModule } from 'ngx-tethys/tooltip';
|
|
|
9
9
|
* @private
|
|
10
10
|
*/
|
|
11
11
|
class ThyProgressCircle {
|
|
12
|
-
get strokeWidth() {
|
|
13
|
-
return this.thyStrokeWidth() || 6;
|
|
14
|
-
}
|
|
15
12
|
constructor() {
|
|
16
13
|
this.hostRenderer = useHostRenderer();
|
|
17
14
|
this.thyType = input(undefined);
|
|
@@ -23,6 +20,9 @@ class ThyProgressCircle {
|
|
|
23
20
|
this.thyGapDegree = input(undefined, { transform: numberAttribute });
|
|
24
21
|
this.thyGapPosition = input('top');
|
|
25
22
|
this.thyStrokeWidth = input(undefined, { transform: numberAttribute });
|
|
23
|
+
this.strokeWidth = computed(() => {
|
|
24
|
+
return this.thyStrokeWidth() || 6;
|
|
25
|
+
});
|
|
26
26
|
this.progressSize = computed(() => {
|
|
27
27
|
const size = this.thySize();
|
|
28
28
|
if (size && isString(size)) {
|
|
@@ -51,7 +51,7 @@ class ThyProgressCircle {
|
|
|
51
51
|
else {
|
|
52
52
|
values = [{ value: thyValue }];
|
|
53
53
|
}
|
|
54
|
-
const radius = 50 - this.strokeWidth / 2;
|
|
54
|
+
const radius = 50 - this.strokeWidth() / 2;
|
|
55
55
|
const gapPosition = this.thyGapPosition() || 'top';
|
|
56
56
|
const len = Math.PI * 2 * radius;
|
|
57
57
|
const gapDegree = this.thyGapDegree() || 0;
|
|
@@ -106,16 +106,14 @@ class ThyProgressCircle {
|
|
|
106
106
|
this.hostRenderer.updateClass(type ? [`progress-circle-${type}`] : []);
|
|
107
107
|
});
|
|
108
108
|
}
|
|
109
|
-
ngOnInit() { }
|
|
110
|
-
ngOnChanges(changes) { }
|
|
111
109
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyProgressCircle, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
112
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: ThyProgressCircle, isStandalone: true, selector: "thy-progress-circle", inputs: { thyType: { classPropertyName: "thyType", publicName: "thyType", isSignal: true, isRequired: false, transformFunction: null }, thySize: { classPropertyName: "thySize", publicName: "thySize", isSignal: true, isRequired: false, transformFunction: null }, thyValue: { classPropertyName: "thyValue", publicName: "thyValue", isSignal: true, isRequired: false, transformFunction: null }, thyMax: { classPropertyName: "thyMax", publicName: "thyMax", isSignal: true, isRequired: false, transformFunction: null }, thyTips: { classPropertyName: "thyTips", publicName: "thyTips", isSignal: true, isRequired: false, transformFunction: null }, thyShape: { classPropertyName: "thyShape", publicName: "thyShape", isSignal: true, isRequired: false, transformFunction: null }, thyGapDegree: { classPropertyName: "thyGapDegree", publicName: "thyGapDegree", isSignal: true, isRequired: false, transformFunction: null }, thyGapPosition: { classPropertyName: "thyGapPosition", publicName: "thyGapPosition", isSignal: true, isRequired: false, transformFunction: null }, thyStrokeWidth: { classPropertyName: "thyStrokeWidth", publicName: "thyStrokeWidth", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "progress-circle" },
|
|
110
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: ThyProgressCircle, isStandalone: true, selector: "thy-progress-circle", inputs: { thyType: { classPropertyName: "thyType", publicName: "thyType", isSignal: true, isRequired: false, transformFunction: null }, thySize: { classPropertyName: "thySize", publicName: "thySize", isSignal: true, isRequired: false, transformFunction: null }, thyValue: { classPropertyName: "thyValue", publicName: "thyValue", isSignal: true, isRequired: false, transformFunction: null }, thyMax: { classPropertyName: "thyMax", publicName: "thyMax", isSignal: true, isRequired: false, transformFunction: null }, thyTips: { classPropertyName: "thyTips", publicName: "thyTips", isSignal: true, isRequired: false, transformFunction: null }, thyShape: { classPropertyName: "thyShape", publicName: "thyShape", isSignal: true, isRequired: false, transformFunction: null }, thyGapDegree: { classPropertyName: "thyGapDegree", publicName: "thyGapDegree", isSignal: true, isRequired: false, transformFunction: null }, thyGapPosition: { classPropertyName: "thyGapPosition", publicName: "thyGapPosition", isSignal: true, isRequired: false, transformFunction: null }, thyStrokeWidth: { classPropertyName: "thyStrokeWidth", publicName: "thyStrokeWidth", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "progress-circle" }, ngImport: i0, template: "@let tips = thyTips();\n@let circleAttr = circle();\n<div\n [thyTooltip]=\"tips\"\n [thyTooltipDisabled]=\"!tips\"\n [style.width.px]=\"width()\"\n [style.height.px]=\"width()\"\n [ngClass]=\"progressSize()\"\n class=\"progress-circle-inner\">\n <svg class=\"progress-circle-svg\" viewBox=\"0 0 100 100\">\n <path\n class=\"progress-circle-trail\"\n fill-opacity=\"0\"\n [attr.d]=\"circleAttr.pathString\"\n [ngStyle]=\"circleAttr.trailPathStyle\"\n [attr.stroke-width]=\"strokeWidth()\"></path>\n @for (p of circleAttr.progressCirclePath; track $index) {\n <path\n class=\"progress-circle-path\"\n [ngClass]=\"p.className\"\n fill-opacity=\"0\"\n [attr.d]=\"circleAttr.pathString\"\n [attr.stroke-linecap]=\"'round'\"\n [attr.stroke]=\"p.stroke\"\n [attr.stroke-width]=\"p.value ? strokeWidth() : 0\"\n [ngStyle]=\"p.strokePathStyle\"></path>\n }\n </svg>\n <span class=\"progress-circle-content\">\n <ng-content></ng-content>\n </span>\n</div>\n", dependencies: [{ kind: "directive", type: ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
113
111
|
}
|
|
114
112
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyProgressCircle, decorators: [{
|
|
115
113
|
type: Component,
|
|
116
114
|
args: [{ selector: 'thy-progress-circle', encapsulation: ViewEncapsulation.None, host: {
|
|
117
115
|
class: 'progress-circle'
|
|
118
|
-
}, imports: [ThyTooltipDirective, NgClass, NgStyle], template: "@let tips = thyTips();\n@let circleAttr = circle();\n<div\n [thyTooltip]=\"tips\"\n [thyTooltipDisabled]=\"!tips\"\n [style.width.px]=\"width()\"\n [style.height.px]=\"width()\"\n [ngClass]=\"progressSize()\"\n class=\"progress-circle-inner\">\n <svg class=\"progress-circle-svg\" viewBox=\"0 0 100 100\">\n <path\n class=\"progress-circle-trail\"\n fill-opacity=\"0\"\n [attr.d]=\"circleAttr.pathString\"\n [ngStyle]=\"circleAttr.trailPathStyle\"\n [attr.stroke-width]=\"strokeWidth\"></path>\n @for (p of circleAttr.progressCirclePath; track $index) {\n <path\n class=\"progress-circle-path\"\n [ngClass]=\"p.className\"\n fill-opacity=\"0\"\n [attr.d]=\"circleAttr.pathString\"\n [attr.stroke-linecap]=\"'round'\"\n [attr.stroke]=\"p.stroke\"\n [attr.stroke-width]=\"p.value ? strokeWidth : 0\"\n [ngStyle]=\"p.strokePathStyle\"></path>\n }\n </svg>\n <span class=\"progress-circle-content\">\n <ng-content></ng-content>\n </span>\n</div>\n" }]
|
|
116
|
+
}, imports: [ThyTooltipDirective, NgClass, NgStyle], template: "@let tips = thyTips();\n@let circleAttr = circle();\n<div\n [thyTooltip]=\"tips\"\n [thyTooltipDisabled]=\"!tips\"\n [style.width.px]=\"width()\"\n [style.height.px]=\"width()\"\n [ngClass]=\"progressSize()\"\n class=\"progress-circle-inner\">\n <svg class=\"progress-circle-svg\" viewBox=\"0 0 100 100\">\n <path\n class=\"progress-circle-trail\"\n fill-opacity=\"0\"\n [attr.d]=\"circleAttr.pathString\"\n [ngStyle]=\"circleAttr.trailPathStyle\"\n [attr.stroke-width]=\"strokeWidth()\"></path>\n @for (p of circleAttr.progressCirclePath; track $index) {\n <path\n class=\"progress-circle-path\"\n [ngClass]=\"p.className\"\n fill-opacity=\"0\"\n [attr.d]=\"circleAttr.pathString\"\n [attr.stroke-linecap]=\"'round'\"\n [attr.stroke]=\"p.stroke\"\n [attr.stroke-width]=\"p.value ? strokeWidth() : 0\"\n [ngStyle]=\"p.strokePathStyle\"></path>\n }\n </svg>\n <span class=\"progress-circle-content\">\n <ng-content></ng-content>\n </span>\n</div>\n" }]
|
|
119
117
|
}], ctorParameters: () => [] });
|
|
120
118
|
|
|
121
119
|
const THY_PROGRESS_COMPONENT = new InjectionToken('THY_PROGRESS_COMPONENT');
|
|
@@ -245,15 +243,13 @@ class ThyProgress {
|
|
|
245
243
|
this.hostRenderer.updateClass(size ? [`progress-${size}`] : []);
|
|
246
244
|
});
|
|
247
245
|
}
|
|
248
|
-
ngOnInit() { }
|
|
249
|
-
ngOnChanges(changes) { }
|
|
250
246
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyProgress, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
251
247
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.8", type: ThyProgress, isStandalone: true, selector: "thy-progress", inputs: { thyType: { classPropertyName: "thyType", publicName: "thyType", isSignal: true, isRequired: false, transformFunction: null }, thySize: { classPropertyName: "thySize", publicName: "thySize", isSignal: true, isRequired: false, transformFunction: null }, thyValue: { classPropertyName: "thyValue", publicName: "thyValue", isSignal: true, isRequired: false, transformFunction: null }, thyMax: { classPropertyName: "thyMax", publicName: "thyMax", isSignal: true, isRequired: false, transformFunction: null }, thyTips: { classPropertyName: "thyTips", publicName: "thyTips", isSignal: true, isRequired: false, transformFunction: null }, thyShape: { classPropertyName: "thyShape", publicName: "thyShape", isSignal: true, isRequired: false, transformFunction: null }, thyGapDegree: { classPropertyName: "thyGapDegree", publicName: "thyGapDegree", isSignal: true, isRequired: false, transformFunction: null }, thyGapPosition: { classPropertyName: "thyGapPosition", publicName: "thyGapPosition", isSignal: true, isRequired: false, transformFunction: null }, thyStrokeWidth: { classPropertyName: "thyStrokeWidth", publicName: "thyStrokeWidth", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.thy-progress-strip": "thyShape() === 'strip'", "class.thy-progress-circle": "thyShape() === 'circle'", "class.progress-stacked": "isStacked()", "attr.max": "max()" }, classAttribute: "thy-progress progress" }, providers: [
|
|
252
248
|
{
|
|
253
249
|
provide: THY_PROGRESS_COMPONENT,
|
|
254
250
|
useExisting: ThyProgress
|
|
255
251
|
}
|
|
256
|
-
], viewQueries: [{ propertyName: "bars", predicate: ThyProgressStrip, descendants: true, isSignal: true }],
|
|
252
|
+
], viewQueries: [{ propertyName: "bars", predicate: ThyProgressStrip, descendants: true, isSignal: true }], ngImport: i0, template: "<ng-container>\n @if (thyShape()=== 'strip') {\n <div class=\"thy-progress-strip-outer\">\n @if (isStacked()) {\n @for (item of thyValue(); track $index) {\n <thy-progress-bar\n [thyType]=\"item.type\"\n [ngClass]=\"{ 'cursor-pointer': item.tips || thyTips()}\"\n [thyTooltip]=\"item.tips || thyTips()\"\n [thyTooltipTemplateContext]=\"item\"\n [thyTooltipDisabled]=\"!thyTips() && !item.tips\"\n [thyColor]=\"item.color\"\n [thyValue]=\"item.value\"\n >{{ item.label }}\n </thy-progress-bar>\n }\n } @else {\n @let value = thyValue();\n @if (value) {\n <thy-progress-bar\n [thyType]=\"thyType()\"\n [ngClass]=\"{ 'cursor-pointer': thyTips()}\"\n [thyTooltip]=\"thyTips()\"\n [thyTooltipTemplateContext]=\"value\"\n [thyTooltipDisabled]=\"!thyTips()\"\n [thyValue]=\"value\">\n </thy-progress-bar>\n }\n }\n </div>\n @if (thyShape()=== 'strip') {\n <div class=\"thy-progress-strip-text\">\n <ng-template [ngTemplateOutlet]=\"contentTemplate\"></ng-template>\n </div>\n }\n } @else {\n @let value = thyValue();\n <thy-progress-circle\n [thyType]=\"thyType()\"\n [thyTooltip]=\"thyTips()\"\n [thyTooltipDisabled]=\"!thyTips()\"\n [thyTooltipTemplateContext]=\"value\"\n [thyValue]=\"value\"\n [thySize]=\"thySize()\"\n [thyMax]=\"max()\"\n [thyGapDegree]=\"thyGapDegree()\"\n [thyGapPosition]=\"thyGapPosition()\"\n [thyStrokeWidth]=\"thyStrokeWidth()\">\n <ng-template [ngTemplateOutlet]=\"contentTemplate\"></ng-template\n ></thy-progress-circle>\n }\n</ng-container>\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "component", type: ThyProgressStrip, selector: "thy-progress-bar", inputs: ["thyTips", "thyType", "thyValue", "thyColor"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ThyProgressCircle, selector: "thy-progress-circle", inputs: ["thyType", "thySize", "thyValue", "thyMax", "thyTips", "thyShape", "thyGapDegree", "thyGapPosition", "thyStrokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
257
253
|
}
|
|
258
254
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyProgress, decorators: [{
|
|
259
255
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-progress.mjs","sources":["../../../src/progress/progress-circle.component.ts","../../../src/progress/progress-circle.component.html","../../../src/progress/progress-strip.component.ts","../../../src/progress/progress-strip.component.html","../../../src/progress/progress.component.ts","../../../src/progress/progress.component.html","../../../src/progress/progress.module.ts","../../../src/progress/ngx-tethys-progress.ts"],"sourcesContent":["import { isNumber, isString } from 'ngx-tethys/util';\n\nimport {\n Component,\n OnChanges,\n OnInit,\n SimpleChanges,\n TemplateRef,\n ViewEncapsulation,\n numberAttribute,\n input,\n effect,\n computed\n} from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\n\nimport {\n ThyProgressCirclePath,\n ThyProgressGapPositionType,\n ThyProgressPathStyle,\n ThyProgressShapeType,\n ThyProgressStackedValue,\n ThyProgressType\n} from './interfaces';\nimport { NgClass, NgStyle } from '@angular/common';\nimport { ThyTooltipDirective } from 'ngx-tethys/tooltip';\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-progress-circle',\n templateUrl: './progress-circle.component.html',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'progress-circle'\n },\n imports: [ThyTooltipDirective, NgClass, NgStyle]\n})\nexport class ThyProgressCircle implements OnInit, OnChanges {\n private hostRenderer = useHostRenderer();\n\n readonly thyType = input<ThyProgressType>(undefined);\n\n readonly thySize = input<string | number>(undefined);\n\n readonly thyValue = input<number | ThyProgressStackedValue[]>(undefined);\n\n readonly thyMax = input<number, unknown>(undefined, { transform: numberAttribute });\n\n readonly thyTips = input<string | TemplateRef<unknown>>(undefined);\n\n readonly thyShape = input<ThyProgressShapeType>('strip');\n\n readonly thyGapDegree = input<number, unknown>(undefined, { transform: numberAttribute });\n\n readonly thyGapPosition = input<ThyProgressGapPositionType>('top');\n\n readonly thyStrokeWidth = input<number, unknown>(undefined, { transform: numberAttribute });\n\n get strokeWidth(): number {\n return this.thyStrokeWidth() || 6;\n }\n\n readonly progressSize = computed(() => {\n const size = this.thySize();\n if (size && isString(size)) {\n return `progress-circle-inner-${size}`;\n }\n return '';\n });\n\n readonly width = computed(() => {\n const size = this.thySize();\n if (size && isNumber(size)) {\n return size;\n }\n return 112;\n });\n\n readonly circle = computed(() => {\n let values: ThyProgressStackedValue[] = [];\n\n const thyValue = this.thyValue();\n if (Array.isArray(thyValue)) {\n let totalValue = 0;\n values = (thyValue as ThyProgressStackedValue[]).map((item, index) => {\n totalValue += item.value;\n const currentValue = +((totalValue / this.thyMax()) * 100).toFixed(2);\n return { ...item, value: currentValue };\n });\n } else {\n values = [{ value: thyValue }];\n }\n\n const radius = 50 - this.strokeWidth / 2;\n const gapPosition = this.thyGapPosition() || 'top';\n const len = Math.PI * 2 * radius;\n const gapDegree = this.thyGapDegree() || 0;\n\n let beginPositionX = 0;\n let beginPositionY = -radius;\n let endPositionX = 0;\n let endPositionY = radius * -2;\n\n switch (gapPosition) {\n case 'left':\n beginPositionX = -radius;\n beginPositionY = 0;\n endPositionX = radius * 2;\n endPositionY = 0;\n break;\n case 'right':\n beginPositionX = radius;\n beginPositionY = 0;\n endPositionX = radius * -2;\n endPositionY = 0;\n break;\n case 'bottom':\n beginPositionY = radius;\n endPositionY = radius * 2;\n break;\n default:\n }\n\n const pathString = `M 50,50 m ${beginPositionX},${beginPositionY} a ${radius},${radius} 0 1 1 ${endPositionX},${-endPositionY} a ${radius},${radius} 0 1 1 ${-endPositionX},${endPositionY}`;\n\n const trailPathStyle = {\n strokeDasharray: `${len - gapDegree}px ${len}px`,\n strokeDashoffset: `-${gapDegree / 2}px`,\n transition: 'stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s'\n };\n\n const progressCirclePath = values\n .map((item, index) => {\n return {\n stroke: '',\n value: +item.value,\n className: item.type ? `progress-circle-path-${item.type}` : null,\n strokePathStyle: {\n stroke: item?.color ? item?.color : null,\n transition: 'stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s',\n strokeDasharray: `${((item.value || 0) / 100) * (len - gapDegree)}px ${len}px`,\n strokeDashoffset: `-${gapDegree / 2}px`\n }\n };\n })\n .reverse();\n return { pathString, trailPathStyle, progressCirclePath };\n });\n\n constructor() {\n effect(() => {\n const type = this.thyType();\n this.hostRenderer.updateClass(type ? [`progress-circle-${type}`] : []);\n });\n }\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {}\n}\n","@let tips = thyTips();\n@let circleAttr = circle();\n<div\n [thyTooltip]=\"tips\"\n [thyTooltipDisabled]=\"!tips\"\n [style.width.px]=\"width()\"\n [style.height.px]=\"width()\"\n [ngClass]=\"progressSize()\"\n class=\"progress-circle-inner\">\n <svg class=\"progress-circle-svg\" viewBox=\"0 0 100 100\">\n <path\n class=\"progress-circle-trail\"\n fill-opacity=\"0\"\n [attr.d]=\"circleAttr.pathString\"\n [ngStyle]=\"circleAttr.trailPathStyle\"\n [attr.stroke-width]=\"strokeWidth\"></path>\n @for (p of circleAttr.progressCirclePath; track $index) {\n <path\n class=\"progress-circle-path\"\n [ngClass]=\"p.className\"\n fill-opacity=\"0\"\n [attr.d]=\"circleAttr.pathString\"\n [attr.stroke-linecap]=\"'round'\"\n [attr.stroke]=\"p.stroke\"\n [attr.stroke-width]=\"p.value ? strokeWidth : 0\"\n [ngStyle]=\"p.strokePathStyle\"></path>\n }\n </svg>\n <span class=\"progress-circle-content\">\n <ng-content></ng-content>\n </span>\n</div>\n","import {\n Component,\n InjectionToken,\n computed,\n TemplateRef,\n ViewEncapsulation,\n numberAttribute,\n inject,\n input,\n effect,\n Signal\n} from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyProgressType } from './interfaces';\nimport { NgStyle } from '@angular/common';\n\nexport interface ThyParentProgress {\n readonly max: Signal<number>;\n readonly bars: Signal<readonly ThyProgressStrip[]>;\n}\nexport const THY_PROGRESS_COMPONENT = new InjectionToken<ThyParentProgress>('THY_PROGRESS_COMPONENT');\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-progress-bar',\n templateUrl: './progress-strip.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [NgStyle],\n host: {\n class: 'progress-bar',\n '[style.width.%]': 'percent()'\n }\n})\nexport class ThyProgressStrip {\n private progress = inject(THY_PROGRESS_COMPONENT);\n\n private hostRenderer = useHostRenderer();\n\n readonly thyTips = input<string | TemplateRef<HTMLElement>>(undefined);\n\n readonly thyType = input<ThyProgressType>();\n\n readonly thyValue = input(0, {\n transform: numberAttribute\n });\n\n readonly thyColor = input<string>();\n\n protected readonly percent = computed(() => {\n const value = this.thyValue();\n if (!value && value !== 0) {\n return 0;\n }\n return +((value / this.progress.max()) * 100).toFixed(2);\n });\n\n constructor() {\n effect(() => {\n const type = this.thyType();\n this.hostRenderer.updateClass(type ? [`progress-bar-${type}`] : []);\n });\n }\n}\n","<div class=\"progress-bar-inner\" [ngStyle]=\"{ 'background-color': thyColor() }\">\n <ng-content></ng-content>\n</div>\n","import { isNumber } from 'ngx-tethys/util';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n Input,\n OnChanges,\n OnInit,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChildren,\n ViewEncapsulation,\n numberAttribute,\n input,\n signal,\n viewChildren,\n effect\n} from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\n\nimport { ThyProgressGapPositionType, ThyProgressShapeType, ThyProgressStackedValue, ThyProgressType } from './interfaces';\nimport { THY_PROGRESS_COMPONENT, ThyParentProgress, ThyProgressStrip } from './progress-strip.component';\nimport { ThyProgressCircle } from './progress-circle.component';\nimport { ThyTooltipDirective } from 'ngx-tethys/tooltip';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\n\n/**\n * 进度条组件\n * @name thy-progress\n */\n@Component({\n selector: 'thy-progress',\n templateUrl: './progress.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: THY_PROGRESS_COMPONENT,\n useExisting: ThyProgress\n }\n ],\n host: {\n class: `thy-progress progress`,\n '[class.thy-progress-strip]': `thyShape() === 'strip'`,\n '[class.thy-progress-circle]': `thyShape() === 'circle'`,\n '[class.progress-stacked]': 'isStacked()',\n '[attr.max]': 'max()'\n },\n imports: [ThyProgressStrip, NgClass, ThyTooltipDirective, NgTemplateOutlet, ThyProgressCircle]\n})\nexport class ThyProgress implements ThyParentProgress, OnInit, OnChanges {\n private hostRenderer = useHostRenderer();\n\n readonly barsTotalValue = computed(() => {\n const value = this.thyValue();\n if (Array.isArray(value)) {\n return value.reduce((total, item) => {\n return total + item.value;\n }, 0);\n }\n return undefined;\n });\n\n readonly max = computed(() => {\n const setMax = this.thyMax();\n const barsTotalValue = this.barsTotalValue();\n let result: number = 100;\n if (isNumber(setMax) && setMax > 0) {\n result = setMax;\n } else if (isNumber(barsTotalValue)) {\n result = barsTotalValue;\n }\n if (result < barsTotalValue) {\n result = barsTotalValue;\n }\n return result;\n });\n\n readonly isStacked = computed(() => {\n return Array.isArray(this.thyValue());\n });\n\n readonly bars = viewChildren(ThyProgressStrip);\n\n /**\n * 进度条类型: `primary` | `success` | `info` | `warning` | `danger`\n */\n readonly thyType = input<ThyProgressType>('primary');\n\n /**\n * 进度条大小\n * @type xs | sm | md\n * @default md\n */\n readonly thySize = input<string | number>('md');\n\n /**\n * 进度值,传入数字时显示百分比 = value / max * 100,当传入数组时显示多个 bar,stacked 模式的进度条\n * @type number | ThyProgressStackedValue[]\n */\n readonly thyValue = input<number | ThyProgressStackedValue[], number | ThyProgressStackedValue[]>(undefined, {\n transform: (value: number | ThyProgressStackedValue[]) => {\n if (Array.isArray(value)) {\n return [...value].filter(item => item.value !== 0);\n } else {\n return value;\n }\n }\n });\n\n /**\n * 最大值,主要计算百分比进度的分母使用,当 thyValue 传入数组时,自动累加数组中的 value 之和为 max\n */\n readonly thyMax = input<number, number | string | unknown>(undefined, { transform: numberAttribute });\n\n /**\n * 鼠标移入进度条时显示的提示文案或者模板\n */\n readonly thyTips = input<string | TemplateRef<unknown>>(undefined);\n\n /**\n * 进度形状\n * @type strip | circle\n */\n readonly thyShape = input<ThyProgressShapeType>('strip');\n\n /**\n * 圆形进度条缺口角度,可取值 0 ~ 360\n */\n readonly thyGapDegree = input<number, unknown>(undefined, { transform: numberAttribute });\n\n /**\n * 圆形进度条缺口位置\n * @type top | bottom | left | right\n */\n readonly thyGapPosition = input<ThyProgressGapPositionType>('top');\n\n /**\n * \t圆形进度条线的宽度\n */\n readonly thyStrokeWidth = input<number, unknown>(undefined, { transform: numberAttribute });\n\n constructor() {\n effect(() => {\n const size = this.thySize();\n this.hostRenderer.updateClass(size ? [`progress-${size}`] : []);\n });\n }\n\n ngOnInit() {}\n\n ngOnChanges(changes: SimpleChanges): void {}\n}\n","<ng-container>\n @if (thyShape()=== 'strip') {\n <div class=\"thy-progress-strip-outer\">\n @if (isStacked()) {\n @for (item of thyValue(); track $index) {\n <thy-progress-bar\n [thyType]=\"item.type\"\n [ngClass]=\"{ 'cursor-pointer': item.tips || thyTips()}\"\n [thyTooltip]=\"item.tips || thyTips()\"\n [thyTooltipTemplateContext]=\"item\"\n [thyTooltipDisabled]=\"!thyTips() && !item.tips\"\n [thyColor]=\"item.color\"\n [thyValue]=\"item.value\"\n >{{ item.label }}\n </thy-progress-bar>\n }\n } @else {\n @let value = thyValue();\n @if (value) {\n <thy-progress-bar\n [thyType]=\"thyType()\"\n [ngClass]=\"{ 'cursor-pointer': thyTips()}\"\n [thyTooltip]=\"thyTips()\"\n [thyTooltipTemplateContext]=\"value\"\n [thyTooltipDisabled]=\"!thyTips()\"\n [thyValue]=\"value\">\n </thy-progress-bar>\n }\n }\n </div>\n @if (thyShape()=== 'strip') {\n <div class=\"thy-progress-strip-text\">\n <ng-template [ngTemplateOutlet]=\"contentTemplate\"></ng-template>\n </div>\n }\n } @else {\n @let value = thyValue();\n <thy-progress-circle\n [thyType]=\"thyType()\"\n [thyTooltip]=\"thyTips()\"\n [thyTooltipDisabled]=\"!thyTips()\"\n [thyTooltipTemplateContext]=\"value\"\n [thyValue]=\"value\"\n [thySize]=\"thySize()\"\n [thyMax]=\"max()\"\n [thyGapDegree]=\"thyGapDegree()\"\n [thyGapPosition]=\"thyGapPosition()\"\n [thyStrokeWidth]=\"thyStrokeWidth()\">\n <ng-template [ngTemplateOutlet]=\"contentTemplate\"></ng-template\n ></thy-progress-circle>\n }\n</ng-container>\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>\n","import { ThyTooltipModule } from 'ngx-tethys/tooltip';\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ThyProgressCircle } from './progress-circle.component';\nimport { ThyProgressStrip } from './progress-strip.component';\nimport { ThyProgress } from './progress.component';\n\n@NgModule({\n imports: [CommonModule, ThyTooltipModule, ThyProgress, ThyProgressStrip, ThyProgressCircle],\n exports: [ThyProgress]\n})\nexport class ThyProgressModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-progress.mjs","sources":["../../../src/progress/progress-circle.component.ts","../../../src/progress/progress-circle.component.html","../../../src/progress/progress-strip.component.ts","../../../src/progress/progress-strip.component.html","../../../src/progress/progress.component.ts","../../../src/progress/progress.component.html","../../../src/progress/progress.module.ts","../../../src/progress/ngx-tethys-progress.ts"],"sourcesContent":["import { isNumber, isString } from 'ngx-tethys/util';\nimport { Component, TemplateRef, ViewEncapsulation, numberAttribute, input, effect, computed } from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyProgressGapPositionType, ThyProgressShapeType, ThyProgressStackedValue, ThyProgressType } from './interfaces';\nimport { NgClass, NgStyle } from '@angular/common';\nimport { ThyTooltipDirective } from 'ngx-tethys/tooltip';\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-progress-circle',\n templateUrl: './progress-circle.component.html',\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'progress-circle'\n },\n imports: [ThyTooltipDirective, NgClass, NgStyle]\n})\nexport class ThyProgressCircle {\n private hostRenderer = useHostRenderer();\n\n readonly thyType = input<ThyProgressType>(undefined);\n\n readonly thySize = input<string | number>(undefined);\n\n readonly thyValue = input<number | ThyProgressStackedValue[]>(undefined);\n\n readonly thyMax = input<number, unknown>(undefined, { transform: numberAttribute });\n\n readonly thyTips = input<string | TemplateRef<unknown>>(undefined);\n\n readonly thyShape = input<ThyProgressShapeType>('strip');\n\n readonly thyGapDegree = input<number, unknown>(undefined, { transform: numberAttribute });\n\n readonly thyGapPosition = input<ThyProgressGapPositionType>('top');\n\n readonly thyStrokeWidth = input<number, unknown>(undefined, { transform: numberAttribute });\n\n readonly strokeWidth = computed(() => {\n return this.thyStrokeWidth() || 6;\n });\n\n readonly progressSize = computed(() => {\n const size = this.thySize();\n if (size && isString(size)) {\n return `progress-circle-inner-${size}`;\n }\n return '';\n });\n\n readonly width = computed(() => {\n const size = this.thySize();\n if (size && isNumber(size)) {\n return size;\n }\n return 112;\n });\n\n readonly circle = computed(() => {\n let values: ThyProgressStackedValue[] = [];\n\n const thyValue = this.thyValue();\n if (Array.isArray(thyValue)) {\n let totalValue = 0;\n values = (thyValue as ThyProgressStackedValue[]).map((item, index) => {\n totalValue += item.value;\n const currentValue = +((totalValue / this.thyMax()) * 100).toFixed(2);\n return { ...item, value: currentValue };\n });\n } else {\n values = [{ value: thyValue }];\n }\n\n const radius = 50 - this.strokeWidth() / 2;\n const gapPosition = this.thyGapPosition() || 'top';\n const len = Math.PI * 2 * radius;\n const gapDegree = this.thyGapDegree() || 0;\n\n let beginPositionX = 0;\n let beginPositionY = -radius;\n let endPositionX = 0;\n let endPositionY = radius * -2;\n\n switch (gapPosition) {\n case 'left':\n beginPositionX = -radius;\n beginPositionY = 0;\n endPositionX = radius * 2;\n endPositionY = 0;\n break;\n case 'right':\n beginPositionX = radius;\n beginPositionY = 0;\n endPositionX = radius * -2;\n endPositionY = 0;\n break;\n case 'bottom':\n beginPositionY = radius;\n endPositionY = radius * 2;\n break;\n default:\n }\n\n const pathString = `M 50,50 m ${beginPositionX},${beginPositionY} a ${radius},${radius} 0 1 1 ${endPositionX},${-endPositionY} a ${radius},${radius} 0 1 1 ${-endPositionX},${endPositionY}`;\n\n const trailPathStyle = {\n strokeDasharray: `${len - gapDegree}px ${len}px`,\n strokeDashoffset: `-${gapDegree / 2}px`,\n transition: 'stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s'\n };\n\n const progressCirclePath = values\n .map((item, index) => {\n return {\n stroke: '',\n value: +item.value,\n className: item.type ? `progress-circle-path-${item.type}` : null,\n strokePathStyle: {\n stroke: item?.color ? item?.color : null,\n transition: 'stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s',\n strokeDasharray: `${((item.value || 0) / 100) * (len - gapDegree)}px ${len}px`,\n strokeDashoffset: `-${gapDegree / 2}px`\n }\n };\n })\n .reverse();\n return { pathString, trailPathStyle, progressCirclePath };\n });\n\n constructor() {\n effect(() => {\n const type = this.thyType();\n this.hostRenderer.updateClass(type ? [`progress-circle-${type}`] : []);\n });\n }\n}\n","@let tips = thyTips();\n@let circleAttr = circle();\n<div\n [thyTooltip]=\"tips\"\n [thyTooltipDisabled]=\"!tips\"\n [style.width.px]=\"width()\"\n [style.height.px]=\"width()\"\n [ngClass]=\"progressSize()\"\n class=\"progress-circle-inner\">\n <svg class=\"progress-circle-svg\" viewBox=\"0 0 100 100\">\n <path\n class=\"progress-circle-trail\"\n fill-opacity=\"0\"\n [attr.d]=\"circleAttr.pathString\"\n [ngStyle]=\"circleAttr.trailPathStyle\"\n [attr.stroke-width]=\"strokeWidth()\"></path>\n @for (p of circleAttr.progressCirclePath; track $index) {\n <path\n class=\"progress-circle-path\"\n [ngClass]=\"p.className\"\n fill-opacity=\"0\"\n [attr.d]=\"circleAttr.pathString\"\n [attr.stroke-linecap]=\"'round'\"\n [attr.stroke]=\"p.stroke\"\n [attr.stroke-width]=\"p.value ? strokeWidth() : 0\"\n [ngStyle]=\"p.strokePathStyle\"></path>\n }\n </svg>\n <span class=\"progress-circle-content\">\n <ng-content></ng-content>\n </span>\n</div>\n","import {\n Component,\n InjectionToken,\n computed,\n TemplateRef,\n ViewEncapsulation,\n numberAttribute,\n inject,\n input,\n effect,\n Signal\n} from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyProgressType } from './interfaces';\nimport { NgStyle } from '@angular/common';\n\nexport interface ThyParentProgress {\n readonly max: Signal<number>;\n readonly bars: Signal<readonly ThyProgressStrip[]>;\n}\nexport const THY_PROGRESS_COMPONENT = new InjectionToken<ThyParentProgress>('THY_PROGRESS_COMPONENT');\n\n/**\n * @private\n */\n@Component({\n selector: 'thy-progress-bar',\n templateUrl: './progress-strip.component.html',\n encapsulation: ViewEncapsulation.None,\n imports: [NgStyle],\n host: {\n class: 'progress-bar',\n '[style.width.%]': 'percent()'\n }\n})\nexport class ThyProgressStrip {\n private progress = inject(THY_PROGRESS_COMPONENT);\n\n private hostRenderer = useHostRenderer();\n\n readonly thyTips = input<string | TemplateRef<HTMLElement>>(undefined);\n\n readonly thyType = input<ThyProgressType>();\n\n readonly thyValue = input(0, {\n transform: numberAttribute\n });\n\n readonly thyColor = input<string>();\n\n protected readonly percent = computed(() => {\n const value = this.thyValue();\n if (!value && value !== 0) {\n return 0;\n }\n return +((value / this.progress.max()) * 100).toFixed(2);\n });\n\n constructor() {\n effect(() => {\n const type = this.thyType();\n this.hostRenderer.updateClass(type ? [`progress-bar-${type}`] : []);\n });\n }\n}\n","<div class=\"progress-bar-inner\" [ngStyle]=\"{ 'background-color': thyColor() }\">\n <ng-content></ng-content>\n</div>\n","import { isNumber } from 'ngx-tethys/util';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n TemplateRef,\n ViewEncapsulation,\n numberAttribute,\n input,\n viewChildren,\n effect\n} from '@angular/core';\nimport { useHostRenderer } from '@tethys/cdk/dom';\nimport { ThyProgressGapPositionType, ThyProgressShapeType, ThyProgressStackedValue, ThyProgressType } from './interfaces';\nimport { THY_PROGRESS_COMPONENT, ThyParentProgress, ThyProgressStrip } from './progress-strip.component';\nimport { ThyProgressCircle } from './progress-circle.component';\nimport { ThyTooltipDirective } from 'ngx-tethys/tooltip';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\n\n/**\n * 进度条组件\n * @name thy-progress\n */\n@Component({\n selector: 'thy-progress',\n templateUrl: './progress.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: THY_PROGRESS_COMPONENT,\n useExisting: ThyProgress\n }\n ],\n host: {\n class: `thy-progress progress`,\n '[class.thy-progress-strip]': `thyShape() === 'strip'`,\n '[class.thy-progress-circle]': `thyShape() === 'circle'`,\n '[class.progress-stacked]': 'isStacked()',\n '[attr.max]': 'max()'\n },\n imports: [ThyProgressStrip, NgClass, ThyTooltipDirective, NgTemplateOutlet, ThyProgressCircle]\n})\nexport class ThyProgress implements ThyParentProgress {\n private hostRenderer = useHostRenderer();\n\n readonly barsTotalValue = computed(() => {\n const value = this.thyValue();\n if (Array.isArray(value)) {\n return value.reduce((total, item) => {\n return total + item.value;\n }, 0);\n }\n return undefined;\n });\n\n readonly max = computed(() => {\n const setMax = this.thyMax();\n const barsTotalValue = this.barsTotalValue();\n let result: number = 100;\n if (isNumber(setMax) && setMax > 0) {\n result = setMax;\n } else if (isNumber(barsTotalValue)) {\n result = barsTotalValue;\n }\n if (result < barsTotalValue) {\n result = barsTotalValue;\n }\n return result;\n });\n\n readonly isStacked = computed(() => {\n return Array.isArray(this.thyValue());\n });\n\n readonly bars = viewChildren(ThyProgressStrip);\n\n /**\n * 进度条类型: `primary` | `success` | `info` | `warning` | `danger`\n */\n readonly thyType = input<ThyProgressType>('primary');\n\n /**\n * 进度条大小\n * @type xs | sm | md\n * @default md\n */\n readonly thySize = input<string | number>('md');\n\n /**\n * 进度值,传入数字时显示百分比 = value / max * 100,当传入数组时显示多个 bar,stacked 模式的进度条\n * @type number | ThyProgressStackedValue[]\n */\n readonly thyValue = input<number | ThyProgressStackedValue[], number | ThyProgressStackedValue[]>(undefined, {\n transform: (value: number | ThyProgressStackedValue[]) => {\n if (Array.isArray(value)) {\n return [...value].filter(item => item.value !== 0);\n } else {\n return value;\n }\n }\n });\n\n /**\n * 最大值,主要计算百分比进度的分母使用,当 thyValue 传入数组时,自动累加数组中的 value 之和为 max\n */\n readonly thyMax = input<number, unknown>(undefined, { transform: numberAttribute });\n\n /**\n * 鼠标移入进度条时显示的提示文案或者模板\n */\n readonly thyTips = input<string | TemplateRef<unknown>>(undefined);\n\n /**\n * 进度形状\n * @type strip | circle\n */\n readonly thyShape = input<ThyProgressShapeType>('strip');\n\n /**\n * 圆形进度条缺口角度,可取值 0 ~ 360\n */\n readonly thyGapDegree = input<number, unknown>(undefined, { transform: numberAttribute });\n\n /**\n * 圆形进度条缺口位置\n * @type top | bottom | left | right\n */\n readonly thyGapPosition = input<ThyProgressGapPositionType>('top');\n\n /**\n * \t圆形进度条线的宽度\n */\n readonly thyStrokeWidth = input<number, unknown>(undefined, { transform: numberAttribute });\n\n constructor() {\n effect(() => {\n const size = this.thySize();\n this.hostRenderer.updateClass(size ? [`progress-${size}`] : []);\n });\n }\n}\n","<ng-container>\n @if (thyShape()=== 'strip') {\n <div class=\"thy-progress-strip-outer\">\n @if (isStacked()) {\n @for (item of thyValue(); track $index) {\n <thy-progress-bar\n [thyType]=\"item.type\"\n [ngClass]=\"{ 'cursor-pointer': item.tips || thyTips()}\"\n [thyTooltip]=\"item.tips || thyTips()\"\n [thyTooltipTemplateContext]=\"item\"\n [thyTooltipDisabled]=\"!thyTips() && !item.tips\"\n [thyColor]=\"item.color\"\n [thyValue]=\"item.value\"\n >{{ item.label }}\n </thy-progress-bar>\n }\n } @else {\n @let value = thyValue();\n @if (value) {\n <thy-progress-bar\n [thyType]=\"thyType()\"\n [ngClass]=\"{ 'cursor-pointer': thyTips()}\"\n [thyTooltip]=\"thyTips()\"\n [thyTooltipTemplateContext]=\"value\"\n [thyTooltipDisabled]=\"!thyTips()\"\n [thyValue]=\"value\">\n </thy-progress-bar>\n }\n }\n </div>\n @if (thyShape()=== 'strip') {\n <div class=\"thy-progress-strip-text\">\n <ng-template [ngTemplateOutlet]=\"contentTemplate\"></ng-template>\n </div>\n }\n } @else {\n @let value = thyValue();\n <thy-progress-circle\n [thyType]=\"thyType()\"\n [thyTooltip]=\"thyTips()\"\n [thyTooltipDisabled]=\"!thyTips()\"\n [thyTooltipTemplateContext]=\"value\"\n [thyValue]=\"value\"\n [thySize]=\"thySize()\"\n [thyMax]=\"max()\"\n [thyGapDegree]=\"thyGapDegree()\"\n [thyGapPosition]=\"thyGapPosition()\"\n [thyStrokeWidth]=\"thyStrokeWidth()\">\n <ng-template [ngTemplateOutlet]=\"contentTemplate\"></ng-template\n ></thy-progress-circle>\n }\n</ng-container>\n\n<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>\n","import { ThyTooltipModule } from 'ngx-tethys/tooltip';\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { ThyProgressCircle } from './progress-circle.component';\nimport { ThyProgressStrip } from './progress-strip.component';\nimport { ThyProgress } from './progress.component';\n\n@NgModule({\n imports: [CommonModule, ThyTooltipModule, ThyProgress, ThyProgressStrip, ThyProgressCircle],\n exports: [ThyProgress]\n})\nexport class ThyProgressModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, numberAttribute, computed, ChangeDetectionStrategy, Component, inject, NgZone, output, contentChild, viewChild, signal, effect, NgModule } from '@angular/core';
|
|
2
|
+
import { input, numberAttribute, computed, ChangeDetectionStrategy, Component, inject, NgZone, DestroyRef, output, contentChild, viewChild, signal, effect, NgModule } from '@angular/core';
|
|
3
3
|
import { ThyClickDispatcher } from 'ngx-tethys/core';
|
|
4
4
|
import { ThyFlexibleText, ThyFlexibleTextModule } from 'ngx-tethys/flexible-text';
|
|
5
5
|
import { Subject, fromEvent, combineLatest, timer } from 'rxjs';
|
|
@@ -7,6 +7,7 @@ import { takeUntil, delay, take, filter } from 'rxjs/operators';
|
|
|
7
7
|
import { OverlayOutsideClickDispatcher } from '@angular/cdk/overlay';
|
|
8
8
|
import { NgTemplateOutlet, CommonModule } from '@angular/common';
|
|
9
9
|
import { coerceBooleanProperty } from 'ngx-tethys/util';
|
|
10
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
10
11
|
import { ThyTooltipModule } from 'ngx-tethys/tooltip';
|
|
11
12
|
|
|
12
13
|
/**
|
|
@@ -18,12 +19,10 @@ class ThyProperties {
|
|
|
18
19
|
/**
|
|
19
20
|
* 展示布局
|
|
20
21
|
* @type "horizontal" | "vertical"
|
|
21
|
-
* @default horizontal
|
|
22
22
|
*/
|
|
23
23
|
this.layout = input('horizontal', { alias: 'thyLayout' });
|
|
24
24
|
/**
|
|
25
25
|
* 设置一行的可以 property-item 的数量
|
|
26
|
-
* @type number
|
|
27
26
|
*/
|
|
28
27
|
this.thyColumn = input(1, { transform: numberAttribute });
|
|
29
28
|
/**
|
|
@@ -60,21 +59,17 @@ class ThyPropertyItem {
|
|
|
60
59
|
this.ngZone = inject(NgZone);
|
|
61
60
|
this.overlayOutsideClickDispatcher = inject(OverlayOutsideClickDispatcher);
|
|
62
61
|
this.parent = inject(ThyProperties, { optional: true });
|
|
62
|
+
this.destroyRef = inject(DestroyRef);
|
|
63
63
|
/**
|
|
64
64
|
* 属性名称
|
|
65
|
-
* @type sting
|
|
66
|
-
* @default thyLabelText
|
|
67
65
|
*/
|
|
68
66
|
this.thyLabelText = input();
|
|
69
67
|
/**
|
|
70
68
|
* 设置属性是否是可编辑的
|
|
71
|
-
* @type sting
|
|
72
|
-
* @default false
|
|
73
69
|
*/
|
|
74
70
|
this.thyEditable = input(false, { transform: coerceBooleanProperty });
|
|
75
71
|
/**
|
|
76
72
|
* 设置跨列的数量
|
|
77
|
-
* @type number
|
|
78
73
|
*/
|
|
79
74
|
this.thySpan = input(1, { transform: numberAttribute });
|
|
80
75
|
/**
|
|
@@ -112,14 +107,14 @@ class ThyPropertyItem {
|
|
|
112
107
|
*/
|
|
113
108
|
this.itemContent = viewChild('item');
|
|
114
109
|
this.editing = signal(false);
|
|
115
|
-
this.changes$ = new Subject();
|
|
116
|
-
this.destroy$ = new Subject();
|
|
117
110
|
this.eventDestroy$ = new Subject();
|
|
118
111
|
this.originOverlays = [];
|
|
119
112
|
this.gridColumn = computed(() => {
|
|
120
113
|
return `span ${Math.min(this.thySpan(), this.parent?.thyColumn())}`;
|
|
121
114
|
});
|
|
122
|
-
this.isVertical =
|
|
115
|
+
this.isVertical = computed(() => {
|
|
116
|
+
return this.parent?.layout() === 'vertical';
|
|
117
|
+
});
|
|
123
118
|
this.originOverlays = [...this.overlayOutsideClickDispatcher._attachedOverlays];
|
|
124
119
|
effect(() => {
|
|
125
120
|
if (this.thyEditable()) {
|
|
@@ -135,10 +130,6 @@ class ThyPropertyItem {
|
|
|
135
130
|
}
|
|
136
131
|
}
|
|
137
132
|
});
|
|
138
|
-
effect(() => {
|
|
139
|
-
const layout = this.parent?.layout();
|
|
140
|
-
this.isVertical.set(layout === 'vertical');
|
|
141
|
-
});
|
|
142
133
|
}
|
|
143
134
|
setEditing(editing) {
|
|
144
135
|
this.ngZone.run(() => {
|
|
@@ -179,7 +170,7 @@ class ThyPropertyItem {
|
|
|
179
170
|
const overlaysDetachments$ = openedOverlays.map(overlay => overlay.detachments());
|
|
180
171
|
if (overlaysDetachments$.length) {
|
|
181
172
|
combineLatest(overlaysDetachments$)
|
|
182
|
-
.pipe(delay(50), take(1),
|
|
173
|
+
.pipe(delay(50), take(1), takeUntilDestroyed(this.destroyRef))
|
|
183
174
|
.subscribe(() => {
|
|
184
175
|
this.setEditing(false);
|
|
185
176
|
});
|
|
@@ -190,7 +181,7 @@ class ThyPropertyItem {
|
|
|
190
181
|
.clicked(0)
|
|
191
182
|
.pipe(filter(event => {
|
|
192
183
|
return !editorElement.contains(event.target);
|
|
193
|
-
}), take(1),
|
|
184
|
+
}), take(1), takeUntilDestroyed(this.destroyRef))
|
|
194
185
|
.subscribe(() => {
|
|
195
186
|
this.setEditing(false);
|
|
196
187
|
});
|
|
@@ -206,8 +197,6 @@ class ThyPropertyItem {
|
|
|
206
197
|
});
|
|
207
198
|
}
|
|
208
199
|
ngOnDestroy() {
|
|
209
|
-
this.destroy$.next();
|
|
210
|
-
this.destroy$.complete();
|
|
211
200
|
this.eventDestroy$.next();
|
|
212
201
|
this.eventDestroy$.complete();
|
|
213
202
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-tethys-property.mjs","sources":["../../../src/property/properties.component.ts","../../../src/property/properties.component.html","../../../src/property/property-item.component.ts","../../../src/property/property-item.component.html","../../../src/property/module.ts","../../../src/property/ngx-tethys-property.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, numberAttribute, input, computed, effect } from '@angular/core';\n\nexport type ThyPropertiesLayout = 'horizontal' | 'vertical';\n\n/**\n * 属性列表组件\n * @name thy-properties\n */\n@Component({\n selector: 'thy-properties',\n templateUrl: './properties.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'thy-properties',\n '[class.thy-properties-vertical]': 'layout() === \"vertical\"',\n '[class.thy-properties-horizontal]': 'layout() === \"horizontal\"',\n '[class.thy-property-edit-trigger-hover]': 'thyEditTrigger() === \"hover\"',\n '[class.thy-property-edit-trigger-click]': 'thyEditTrigger() === \"click\"',\n '[style.grid-template-columns]': 'gridTemplateColumns()'\n }\n})\nexport class ThyProperties {\n /**\n * 展示布局\n * @type \"horizontal\" | \"vertical\"\n * @default horizontal\n */\n readonly layout = input<ThyPropertiesLayout>('horizontal', { alias: 'thyLayout' });\n\n /**\n * 设置一行的可以 property-item 的数量\n * @type number\n */\n readonly thyColumn = input(1, { transform: numberAttribute });\n\n /**\n * 设置编辑状态触发方法\n * @type 'hover' | 'click'\n */\n readonly thyEditTrigger = input<'hover' | 'click'>('hover');\n\n protected readonly gridTemplateColumns = computed(() => {\n return `repeat(${this.thyColumn()}, 1fr)`;\n });\n}\n","<ng-content></ng-content>\n","import { ThyClickDispatcher } from 'ngx-tethys/core';\nimport { ThyFlexibleText } from 'ngx-tethys/flexible-text';\nimport { combineLatest, fromEvent, Subject, Subscription, timer } from 'rxjs';\nimport { delay, filter, take, takeUntil } from 'rxjs/operators';\n\nimport { OverlayOutsideClickDispatcher, OverlayRef } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n NgZone,\n numberAttribute,\n OnDestroy,\n OnInit,\n SimpleChanges,\n TemplateRef,\n inject,\n input,\n computed,\n effect,\n output,\n contentChild,\n viewChild,\n signal\n} from '@angular/core';\n\nimport { ThyProperties } from './properties.component';\nimport { coerceBooleanProperty, ThyBooleanInput } from 'ngx-tethys/util';\n\nexport type ThyPropertyItemOperationTrigger = 'hover' | 'always';\n\n/**\n * 属性组件\n * @name thy-property-item\n */\n@Component({\n selector: 'thy-property-item',\n templateUrl: './property-item.component.html',\n host: {\n class: 'thy-property-item',\n '[class.thy-property-edit-trigger-hover]': 'thyEditTrigger() === \"hover\"',\n '[class.thy-property-edit-trigger-click]': 'thyEditTrigger() === \"click\"',\n '[class.thy-property-item-operational]': '!!operation()',\n '[class.thy-property-item-operational-hover]': \"thyOperationTrigger() === 'hover'\",\n '[style.grid-column]': 'gridColumn()',\n '[class.thy-property-item-single]': '!parent'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ThyFlexibleText, NgTemplateOutlet]\n})\nexport class ThyPropertyItem implements OnDestroy {\n private clickDispatcher = inject(ThyClickDispatcher);\n private ngZone = inject(NgZone);\n private overlayOutsideClickDispatcher = inject(OverlayOutsideClickDispatcher);\n private parent = inject(ThyProperties, { optional: true });\n\n /**\n * 属性名称\n * @type sting\n * @default thyLabelText\n */\n readonly thyLabelText = input<string>();\n\n /**\n * 设置属性是否是可编辑的\n * @type sting\n * @default false\n */\n readonly thyEditable = input<boolean, ThyBooleanInput>(false, { transform: coerceBooleanProperty });\n\n /**\n * 设置跨列的数量\n * @type number\n */\n readonly thySpan = input(1, { transform: numberAttribute });\n\n /**\n * 设置编辑状态触发方法\n * @type 'hover' | 'click'\n */\n readonly thyEditTrigger = input<'hover' | 'click'>();\n\n /**\n * 设置属性操作现实触发方式,默认 always 一直显示\n * @type 'hover' | 'always'\n */\n readonly thyOperationTrigger = input<ThyPropertyItemOperationTrigger>('always');\n\n readonly thyEditingChange = output<boolean>();\n\n /**\n * 属性名称自定义模板\n * @type TemplateRef\n */\n readonly label = contentChild<TemplateRef<void>>('label');\n\n /**\n * 属性内容编辑模板,只有在 thyEditable 为 true 时生效\n * @type TemplateRef\n */\n readonly editor = contentChild<TemplateRef<void>>('editor');\n\n /**\n * 操作区模板\n * @type TemplateRef\n */\n readonly operation = contentChild<TemplateRef<void>>('operation');\n\n /**\n * @private\n */\n readonly content = viewChild<TemplateRef<void>>('contentTemplate');\n\n /**\n * @private\n */\n readonly itemContent = viewChild<ElementRef<HTMLElement>>('item');\n\n editing = signal(false);\n\n changes$ = new Subject<SimpleChanges>();\n\n private destroy$ = new Subject<void>();\n\n private eventDestroy$ = new Subject<void>();\n\n private originOverlays: OverlayRef[] = [];\n\n private clickEventSubscription: Subscription;\n\n protected readonly gridColumn = computed(() => {\n return `span ${Math.min(this.thySpan(), this.parent?.thyColumn())}`;\n });\n\n isVertical = signal(false);\n\n constructor() {\n this.originOverlays = [...this.overlayOutsideClickDispatcher._attachedOverlays] as OverlayRef[];\n\n effect(() => {\n if (this.thyEditable()) {\n this.subscribeClick();\n } else {\n this.setEditing(false);\n this.eventDestroy$.next();\n this.eventDestroy$.complete();\n\n if (this.clickEventSubscription) {\n this.clickEventSubscription.unsubscribe();\n this.clickEventSubscription = null;\n }\n }\n });\n\n effect(() => {\n const layout = this.parent?.layout();\n this.isVertical.set(layout === 'vertical');\n });\n }\n\n setEditing(editing: boolean) {\n this.ngZone.run(() => {\n if (!!this.editing() !== !!editing) {\n this.thyEditingChange.emit(editing);\n }\n this.editing.set(editing);\n });\n }\n\n /**\n * @deprecated please use setEditing(editing: boolean)\n */\n setKeepEditing(keep: boolean) {\n this.setEditing(keep);\n }\n\n private hasOverlay() {\n return !!this.overlayOutsideClickDispatcher._attachedOverlays.filter(overlay => !this.originOverlays.includes(overlay)).length;\n }\n\n private subscribeClick() {\n if (this.thyEditable() === true) {\n this.ngZone.runOutsideAngular(() => {\n if (this.clickEventSubscription) {\n return;\n }\n const itemElement = this.itemContent().nativeElement;\n this.clickEventSubscription = fromEvent(itemElement, 'click')\n .pipe(takeUntil(this.eventDestroy$))\n .subscribe(() => {\n this.setEditing(true);\n this.bindEditorBlurEvent(itemElement);\n itemElement.querySelector('input')?.focus();\n });\n });\n }\n }\n\n private subscribeOverlayDetach() {\n const openedOverlays = this.overlayOutsideClickDispatcher._attachedOverlays.filter(\n overlay => !this.originOverlays.includes(overlay)\n );\n const overlaysDetachments$ = openedOverlays.map(overlay => overlay.detachments());\n if (overlaysDetachments$.length) {\n combineLatest(overlaysDetachments$)\n .pipe(delay(50), take(1), takeUntil(this.destroy$))\n .subscribe(() => {\n this.setEditing(false);\n });\n }\n }\n\n private subscribeDocumentClick(editorElement: HTMLElement) {\n this.clickDispatcher\n .clicked(0)\n .pipe(\n filter(event => {\n return !editorElement.contains(event.target as HTMLElement);\n }),\n take(1),\n takeUntil(this.destroy$)\n )\n .subscribe(() => {\n this.setEditing(false);\n });\n }\n\n private bindEditorBlurEvent(editorElement: HTMLElement) {\n timer(0).subscribe(() => {\n if (this.hasOverlay()) {\n this.subscribeOverlayDetach();\n } else {\n this.subscribeDocumentClick(editorElement);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n\n this.eventDestroy$.next();\n this.eventDestroy$.complete();\n }\n}\n","<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>\n\n@let labelText = thyLabelText();\n@let labelTemplate = label();\n@let operationTemplate = operation();\n\n@if (labelText || labelTemplate || (operationTemplate && isVertical())) {\n <div class=\"thy-property-item-label\">\n @if (labelText) {\n <span thyFlexibleText [thyTooltipContent]=\"labelText\">{{ labelText }}</span>\n }\n @if (labelTemplate) {\n <span> <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template></span>\n }\n @if (operationTemplate && isVertical()) {\n <div class=\"thy-property-item-operation\">\n <ng-template [ngTemplateOutlet]=\"operationTemplate\"></ng-template>\n </div>\n }\n </div>\n}\n\n<div class=\"thy-property-item-wrapper\">\n <div\n #item\n class=\"thy-property-item-content\"\n [class.thy-property-item-content-editable]=\"thyEditable()\"\n [class.thy-property-item-content-editing]=\"editing()\">\n <div class=\"thy-property-item-content-text\">\n @if (content()) {\n <ng-template [ngTemplateOutlet]=\"content()\"></ng-template>\n }\n </div>\n @if (thyEditable()) {\n <div class=\"thy-property-item-content-editor\">\n @if (editor()) {\n <ng-template [ngTemplateOutlet]=\"editor()\"></ng-template>\n }\n </div>\n }\n </div>\n @if (operation() && !isVertical()) {\n <div class=\"thy-property-item-operation\">\n <ng-template [ngTemplateOutlet]=\"operation()\"></ng-template>\n </div>\n }\n</div>\n","import { ThyFlexibleTextModule } from 'ngx-tethys/flexible-text';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ThyProperties } from './properties.component';\nimport { ThyPropertyItem } from './property-item.component';\nimport { ThyTooltipModule } from 'ngx-tethys/tooltip';\n\n@NgModule({\n imports: [CommonModule, ThyFlexibleTextModule, ThyTooltipModule, ThyProperties, ThyPropertyItem],\n exports: [ThyProperties, ThyPropertyItem]\n})\nexport class ThyPropertyModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-tethys-property.mjs","sources":["../../../src/property/properties.component.ts","../../../src/property/properties.component.html","../../../src/property/property-item.component.ts","../../../src/property/property-item.component.html","../../../src/property/module.ts","../../../src/property/ngx-tethys-property.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, numberAttribute, input, computed } from '@angular/core';\n\nexport type ThyPropertiesLayout = 'horizontal' | 'vertical';\n\n/**\n * 属性列表组件\n * @name thy-properties\n */\n@Component({\n selector: 'thy-properties',\n templateUrl: './properties.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'thy-properties',\n '[class.thy-properties-vertical]': 'layout() === \"vertical\"',\n '[class.thy-properties-horizontal]': 'layout() === \"horizontal\"',\n '[class.thy-property-edit-trigger-hover]': 'thyEditTrigger() === \"hover\"',\n '[class.thy-property-edit-trigger-click]': 'thyEditTrigger() === \"click\"',\n '[style.grid-template-columns]': 'gridTemplateColumns()'\n }\n})\nexport class ThyProperties {\n /**\n * 展示布局\n * @type \"horizontal\" | \"vertical\"\n */\n readonly layout = input<ThyPropertiesLayout>('horizontal', { alias: 'thyLayout' });\n\n /**\n * 设置一行的可以 property-item 的数量\n */\n readonly thyColumn = input(1, { transform: numberAttribute });\n\n /**\n * 设置编辑状态触发方法\n * @type 'hover' | 'click'\n */\n readonly thyEditTrigger = input<'hover' | 'click'>('hover');\n\n protected readonly gridTemplateColumns = computed(() => {\n return `repeat(${this.thyColumn()}, 1fr)`;\n });\n}\n","<ng-content></ng-content>\n","import { ThyClickDispatcher } from 'ngx-tethys/core';\nimport { ThyFlexibleText } from 'ngx-tethys/flexible-text';\nimport { combineLatest, fromEvent, Subject, Subscription, timer } from 'rxjs';\nimport { delay, filter, take, takeUntil } from 'rxjs/operators';\nimport { OverlayOutsideClickDispatcher, OverlayRef } from '@angular/cdk/overlay';\nimport { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n NgZone,\n numberAttribute,\n OnDestroy,\n TemplateRef,\n inject,\n input,\n computed,\n effect,\n output,\n contentChild,\n viewChild,\n signal,\n DestroyRef\n} from '@angular/core';\nimport { ThyProperties } from './properties.component';\nimport { coerceBooleanProperty, ThyBooleanInput } from 'ngx-tethys/util';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nexport type ThyPropertyItemOperationTrigger = 'hover' | 'always';\n\n/**\n * 属性组件\n * @name thy-property-item\n */\n@Component({\n selector: 'thy-property-item',\n templateUrl: './property-item.component.html',\n host: {\n class: 'thy-property-item',\n '[class.thy-property-edit-trigger-hover]': 'thyEditTrigger() === \"hover\"',\n '[class.thy-property-edit-trigger-click]': 'thyEditTrigger() === \"click\"',\n '[class.thy-property-item-operational]': '!!operation()',\n '[class.thy-property-item-operational-hover]': \"thyOperationTrigger() === 'hover'\",\n '[style.grid-column]': 'gridColumn()',\n '[class.thy-property-item-single]': '!parent'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ThyFlexibleText, NgTemplateOutlet]\n})\nexport class ThyPropertyItem implements OnDestroy {\n private clickDispatcher = inject(ThyClickDispatcher);\n private ngZone = inject(NgZone);\n private overlayOutsideClickDispatcher = inject(OverlayOutsideClickDispatcher);\n private parent = inject(ThyProperties, { optional: true });\n private destroyRef = inject(DestroyRef);\n\n /**\n * 属性名称\n */\n readonly thyLabelText = input<string>();\n\n /**\n * 设置属性是否是可编辑的\n */\n readonly thyEditable = input<boolean, ThyBooleanInput>(false, { transform: coerceBooleanProperty });\n\n /**\n * 设置跨列的数量\n */\n readonly thySpan = input(1, { transform: numberAttribute });\n\n /**\n * 设置编辑状态触发方法\n * @type 'hover' | 'click'\n */\n readonly thyEditTrigger = input<'hover' | 'click'>();\n\n /**\n * 设置属性操作现实触发方式,默认 always 一直显示\n * @type 'hover' | 'always'\n */\n readonly thyOperationTrigger = input<ThyPropertyItemOperationTrigger>('always');\n\n readonly thyEditingChange = output<boolean>();\n\n /**\n * 属性名称自定义模板\n * @type TemplateRef\n */\n readonly label = contentChild<TemplateRef<void>>('label');\n\n /**\n * 属性内容编辑模板,只有在 thyEditable 为 true 时生效\n * @type TemplateRef\n */\n readonly editor = contentChild<TemplateRef<void>>('editor');\n\n /**\n * 操作区模板\n * @type TemplateRef\n */\n readonly operation = contentChild<TemplateRef<void>>('operation');\n\n /**\n * @private\n */\n readonly content = viewChild<TemplateRef<void>>('contentTemplate');\n\n /**\n * @private\n */\n readonly itemContent = viewChild<ElementRef<HTMLElement>>('item');\n\n editing = signal(false);\n\n private eventDestroy$ = new Subject<void>();\n\n private originOverlays: OverlayRef[] = [];\n\n private clickEventSubscription: Subscription;\n\n protected readonly gridColumn = computed(() => {\n return `span ${Math.min(this.thySpan(), this.parent?.thyColumn())}`;\n });\n\n readonly isVertical = computed(() => {\n return this.parent?.layout() === 'vertical';\n });\n\n constructor() {\n this.originOverlays = [...this.overlayOutsideClickDispatcher._attachedOverlays] as OverlayRef[];\n\n effect(() => {\n if (this.thyEditable()) {\n this.subscribeClick();\n } else {\n this.setEditing(false);\n this.eventDestroy$.next();\n this.eventDestroy$.complete();\n\n if (this.clickEventSubscription) {\n this.clickEventSubscription.unsubscribe();\n this.clickEventSubscription = null;\n }\n }\n });\n }\n\n setEditing(editing: boolean) {\n this.ngZone.run(() => {\n if (!!this.editing() !== !!editing) {\n this.thyEditingChange.emit(editing);\n }\n this.editing.set(editing);\n });\n }\n\n /**\n * @deprecated please use setEditing(editing: boolean)\n */\n setKeepEditing(keep: boolean) {\n this.setEditing(keep);\n }\n\n private hasOverlay() {\n return !!this.overlayOutsideClickDispatcher._attachedOverlays.filter(overlay => !this.originOverlays.includes(overlay)).length;\n }\n\n private subscribeClick() {\n if (this.thyEditable() === true) {\n this.ngZone.runOutsideAngular(() => {\n if (this.clickEventSubscription) {\n return;\n }\n const itemElement = this.itemContent().nativeElement;\n this.clickEventSubscription = fromEvent(itemElement, 'click')\n .pipe(takeUntil(this.eventDestroy$))\n .subscribe(() => {\n this.setEditing(true);\n this.bindEditorBlurEvent(itemElement);\n itemElement.querySelector('input')?.focus();\n });\n });\n }\n }\n\n private subscribeOverlayDetach() {\n const openedOverlays = this.overlayOutsideClickDispatcher._attachedOverlays.filter(\n overlay => !this.originOverlays.includes(overlay)\n );\n const overlaysDetachments$ = openedOverlays.map(overlay => overlay.detachments());\n if (overlaysDetachments$.length) {\n combineLatest(overlaysDetachments$)\n .pipe(delay(50), take(1), takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.setEditing(false);\n });\n }\n }\n\n private subscribeDocumentClick(editorElement: HTMLElement) {\n this.clickDispatcher\n .clicked(0)\n .pipe(\n filter(event => {\n return !editorElement.contains(event.target as HTMLElement);\n }),\n take(1),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(() => {\n this.setEditing(false);\n });\n }\n\n private bindEditorBlurEvent(editorElement: HTMLElement) {\n timer(0).subscribe(() => {\n if (this.hasOverlay()) {\n this.subscribeOverlayDetach();\n } else {\n this.subscribeDocumentClick(editorElement);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.eventDestroy$.next();\n this.eventDestroy$.complete();\n }\n}\n","<ng-template #contentTemplate>\n <ng-content></ng-content>\n</ng-template>\n\n@let labelText = thyLabelText();\n@let labelTemplate = label();\n@let operationTemplate = operation();\n\n@if (labelText || labelTemplate || (operationTemplate && isVertical())) {\n <div class=\"thy-property-item-label\">\n @if (labelText) {\n <span thyFlexibleText [thyTooltipContent]=\"labelText\">{{ labelText }}</span>\n }\n @if (labelTemplate) {\n <span> <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template></span>\n }\n @if (operationTemplate && isVertical()) {\n <div class=\"thy-property-item-operation\">\n <ng-template [ngTemplateOutlet]=\"operationTemplate\"></ng-template>\n </div>\n }\n </div>\n}\n\n<div class=\"thy-property-item-wrapper\">\n <div\n #item\n class=\"thy-property-item-content\"\n [class.thy-property-item-content-editable]=\"thyEditable()\"\n [class.thy-property-item-content-editing]=\"editing()\">\n <div class=\"thy-property-item-content-text\">\n @if (content()) {\n <ng-template [ngTemplateOutlet]=\"content()\"></ng-template>\n }\n </div>\n @if (thyEditable()) {\n <div class=\"thy-property-item-content-editor\">\n @if (editor()) {\n <ng-template [ngTemplateOutlet]=\"editor()\"></ng-template>\n }\n </div>\n }\n </div>\n @if (operation() && !isVertical()) {\n <div class=\"thy-property-item-operation\">\n <ng-template [ngTemplateOutlet]=\"operation()\"></ng-template>\n </div>\n }\n</div>\n","import { ThyFlexibleTextModule } from 'ngx-tethys/flexible-text';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ThyProperties } from './properties.component';\nimport { ThyPropertyItem } from './property-item.component';\nimport { ThyTooltipModule } from 'ngx-tethys/tooltip';\n\n@NgModule({\n imports: [CommonModule, ThyFlexibleTextModule, ThyTooltipModule, ThyProperties, ThyPropertyItem],\n exports: [ThyProperties, ThyPropertyItem]\n})\nexport class ThyPropertyModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, input, forwardRef, ChangeDetectionStrategy, Component, HostListener, HostBinding, ChangeDetectorRef, NgModule } from '@angular/core';
|
|
2
|
+
import { InjectionToken, inject, input, forwardRef, ChangeDetectionStrategy, Component, HostListener, HostBinding, ChangeDetectorRef, signal, effect, NgModule } from '@angular/core';
|
|
3
3
|
import { NgClass, CommonModule } from '@angular/common';
|
|
4
4
|
import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
|
|
5
5
|
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
@@ -125,32 +125,6 @@ const radioGroupLayoutMap = {
|
|
|
125
125
|
* @order 20
|
|
126
126
|
*/
|
|
127
127
|
class ThyRadioGroup {
|
|
128
|
-
constructor() {
|
|
129
|
-
this.changeDetectorRef = inject(ChangeDetectorRef);
|
|
130
|
-
this.thyRadioGroup = true;
|
|
131
|
-
this.isButtonGroup = false;
|
|
132
|
-
this.isButtonGroupOutline = false;
|
|
133
|
-
/**
|
|
134
|
-
* 大小
|
|
135
|
-
* @type sm | md | lg
|
|
136
|
-
* @default md
|
|
137
|
-
*/
|
|
138
|
-
this.thySize = input('md');
|
|
139
|
-
/**
|
|
140
|
-
* 布局
|
|
141
|
-
* @type flex
|
|
142
|
-
*/
|
|
143
|
-
this.thyLayout = input();
|
|
144
|
-
this.radios = [];
|
|
145
|
-
this.hostRenderer = useHostRenderer();
|
|
146
|
-
/**
|
|
147
|
-
* 是否禁用单选组合框
|
|
148
|
-
* @default false
|
|
149
|
-
*/
|
|
150
|
-
this.thyDisabled = input(false, { transform: coerceBooleanProperty$1 });
|
|
151
|
-
this.onChange = () => null;
|
|
152
|
-
this.onTouched = () => null;
|
|
153
|
-
}
|
|
154
128
|
addRadio(radio) {
|
|
155
129
|
this.radios.push(radio);
|
|
156
130
|
radio.thyChecked = radio.thyValue() === this._innerValue;
|
|
@@ -181,24 +155,44 @@ class ThyRadioGroup {
|
|
|
181
155
|
});
|
|
182
156
|
}
|
|
183
157
|
setGroup() {
|
|
184
|
-
if (!this.isButtonGroup && !this.isButtonGroupOutline) {
|
|
185
|
-
this.isButtonGroup
|
|
186
|
-
this.isButtonGroupOutline
|
|
158
|
+
if (!this.isButtonGroup() && !this.isButtonGroupOutline()) {
|
|
159
|
+
this.isButtonGroup.set(true);
|
|
160
|
+
this.isButtonGroupOutline.set(true);
|
|
187
161
|
}
|
|
188
162
|
}
|
|
189
|
-
|
|
190
|
-
this.
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
163
|
+
constructor() {
|
|
164
|
+
this.changeDetectorRef = inject(ChangeDetectorRef);
|
|
165
|
+
this.isButtonGroup = signal(false);
|
|
166
|
+
this.isButtonGroupOutline = signal(false);
|
|
167
|
+
/**
|
|
168
|
+
* 大小
|
|
169
|
+
* @type sm | md | lg
|
|
170
|
+
* @default md
|
|
171
|
+
*/
|
|
172
|
+
this.thySize = input('md');
|
|
173
|
+
/**
|
|
174
|
+
* 布局
|
|
175
|
+
* @type flex
|
|
176
|
+
*/
|
|
177
|
+
this.thyLayout = input();
|
|
178
|
+
this.radios = [];
|
|
179
|
+
this.hostRenderer = useHostRenderer();
|
|
180
|
+
/**
|
|
181
|
+
* 是否禁用单选组合框
|
|
182
|
+
* @default false
|
|
183
|
+
*/
|
|
184
|
+
this.thyDisabled = input(false, { transform: coerceBooleanProperty$1 });
|
|
185
|
+
this.onChange = () => null;
|
|
186
|
+
this.onTouched = () => null;
|
|
187
|
+
effect(() => {
|
|
188
|
+
this.setClasses();
|
|
189
|
+
});
|
|
190
|
+
effect(() => {
|
|
191
|
+
const disabled = this.thyDisabled();
|
|
192
|
+
this.setDisabledState(disabled);
|
|
193
|
+
});
|
|
200
194
|
}
|
|
201
|
-
|
|
195
|
+
setClasses() {
|
|
202
196
|
const classNames = [];
|
|
203
197
|
const size = this.thySize();
|
|
204
198
|
if (size && buttonGroupSizeMap[size]) {
|
|
@@ -211,7 +205,7 @@ class ThyRadioGroup {
|
|
|
211
205
|
this.hostRenderer.updateClass(classNames);
|
|
212
206
|
}
|
|
213
207
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyRadioGroup, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
214
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.8", type: ThyRadioGroup, isStandalone: true, selector: "thy-radio-group", inputs: { thySize: { classPropertyName: "thySize", publicName: "thySize", isSignal: true, isRequired: false, transformFunction: null }, thyLayout: { classPropertyName: "thyLayout", publicName: "thyLayout", isSignal: true, isRequired: false, transformFunction: null }, thyDisabled: { classPropertyName: "thyDisabled", publicName: "thyDisabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "
|
|
208
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.2.8", type: ThyRadioGroup, isStandalone: true, selector: "thy-radio-group", inputs: { thySize: { classPropertyName: "thySize", publicName: "thySize", isSignal: true, isRequired: false, transformFunction: null }, thyLayout: { classPropertyName: "thyLayout", publicName: "thyLayout", isSignal: true, isRequired: false, transformFunction: null }, thyDisabled: { classPropertyName: "thyDisabled", publicName: "thyDisabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.btn-group": "isButtonGroup()", "class.btn-group-outline-default": "isButtonGroupOutline()", "attr.tabindex": "-1" }, classAttribute: "thy-radio-group" }, providers: [
|
|
215
209
|
{
|
|
216
210
|
provide: NG_VALUE_ACCESSOR,
|
|
217
211
|
useExisting: forwardRef(() => ThyRadioGroup),
|
|
@@ -221,7 +215,7 @@ class ThyRadioGroup {
|
|
|
221
215
|
provide: THY_RADIO_GROUP_COMPONENT,
|
|
222
216
|
useExisting: ThyRadioGroup
|
|
223
217
|
}
|
|
224
|
-
],
|
|
218
|
+
], ngImport: i0, template: "<ng-content></ng-content>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
225
219
|
}
|
|
226
220
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyRadioGroup, decorators: [{
|
|
227
221
|
type: Component,
|
|
@@ -236,18 +230,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.8", ngImpor
|
|
|
236
230
|
useExisting: ThyRadioGroup
|
|
237
231
|
}
|
|
238
232
|
], host: {
|
|
233
|
+
class: 'thy-radio-group',
|
|
234
|
+
'[class.btn-group]': 'isButtonGroup()',
|
|
235
|
+
'[class.btn-group-outline-default]': 'isButtonGroupOutline()',
|
|
239
236
|
'[attr.tabindex]': `-1`
|
|
240
237
|
}, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n" }]
|
|
241
|
-
}],
|
|
242
|
-
type: HostBinding,
|
|
243
|
-
args: ['class.thy-radio-group']
|
|
244
|
-
}], isButtonGroup: [{
|
|
245
|
-
type: HostBinding,
|
|
246
|
-
args: ['class.btn-group']
|
|
247
|
-
}], isButtonGroupOutline: [{
|
|
248
|
-
type: HostBinding,
|
|
249
|
-
args: ['class.btn-group-outline-default']
|
|
250
|
-
}] } });
|
|
238
|
+
}], ctorParameters: () => [] });
|
|
251
239
|
|
|
252
240
|
class ThyRadioModule {
|
|
253
241
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.8", ngImport: i0, type: ThyRadioModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|