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.
Files changed (110) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +0 -1
  3. package/action/action.component.d.ts +7 -8
  4. package/affix/affix.component.d.ts +3 -4
  5. package/arrow-switcher/arrow-switcher.component.d.ts +5 -1
  6. package/button/button-group.component.d.ts +5 -12
  7. package/button/button-icon.component.d.ts +14 -28
  8. package/button/button.component.d.ts +17 -27
  9. package/date-picker/styles/calendar.scss +1 -1
  10. package/date-picker/styles/range-picker.scss +1 -0
  11. package/date-picker/styles/week-picker.scss +1 -0
  12. package/dropdown/dropdown-active.directive.d.ts +4 -5
  13. package/dropdown/dropdown-menu-item.directive.d.ts +7 -15
  14. package/dropdown/dropdown-menu.component.d.ts +6 -13
  15. package/dropdown/dropdown-submenu.component.d.ts +2 -4
  16. package/dropdown/dropdown.directive.d.ts +14 -25
  17. package/fesm2022/ngx-tethys-action.mjs +15 -16
  18. package/fesm2022/ngx-tethys-action.mjs.map +1 -1
  19. package/fesm2022/ngx-tethys-affix.mjs +14 -18
  20. package/fesm2022/ngx-tethys-affix.mjs.map +1 -1
  21. package/fesm2022/ngx-tethys-arrow-switcher.mjs +15 -3
  22. package/fesm2022/ngx-tethys-arrow-switcher.mjs.map +1 -1
  23. package/fesm2022/ngx-tethys-button.mjs +225 -322
  24. package/fesm2022/ngx-tethys-button.mjs.map +1 -1
  25. package/fesm2022/ngx-tethys-carousel.mjs +1 -0
  26. package/fesm2022/ngx-tethys-carousel.mjs.map +1 -1
  27. package/fesm2022/ngx-tethys-collapse.mjs +2 -2
  28. package/fesm2022/ngx-tethys-collapse.mjs.map +1 -1
  29. package/fesm2022/ngx-tethys-date-picker.mjs +6 -6
  30. package/fesm2022/ngx-tethys-date-picker.mjs.map +1 -1
  31. package/fesm2022/ngx-tethys-dropdown.mjs +155 -203
  32. package/fesm2022/ngx-tethys-dropdown.mjs.map +1 -1
  33. package/fesm2022/ngx-tethys-flexible-text.mjs +67 -86
  34. package/fesm2022/ngx-tethys-flexible-text.mjs.map +1 -1
  35. package/fesm2022/ngx-tethys-grid.mjs +10 -15
  36. package/fesm2022/ngx-tethys-grid.mjs.map +1 -1
  37. package/fesm2022/ngx-tethys-icon.mjs +44 -59
  38. package/fesm2022/ngx-tethys-icon.mjs.map +1 -1
  39. package/fesm2022/ngx-tethys-image.mjs +40 -36
  40. package/fesm2022/ngx-tethys-image.mjs.map +1 -1
  41. package/fesm2022/ngx-tethys-input-number.mjs.map +1 -1
  42. package/fesm2022/ngx-tethys-progress.mjs +7 -11
  43. package/fesm2022/ngx-tethys-progress.mjs.map +1 -1
  44. package/fesm2022/ngx-tethys-property.mjs +8 -19
  45. package/fesm2022/ngx-tethys-property.mjs.map +1 -1
  46. package/fesm2022/ngx-tethys-radio.mjs +42 -54
  47. package/fesm2022/ngx-tethys-radio.mjs.map +1 -1
  48. package/fesm2022/ngx-tethys-rate.mjs +115 -157
  49. package/fesm2022/ngx-tethys-rate.mjs.map +1 -1
  50. package/fesm2022/ngx-tethys-resizable.mjs +111 -157
  51. package/fesm2022/ngx-tethys-resizable.mjs.map +1 -1
  52. package/fesm2022/ngx-tethys-segment.mjs +84 -103
  53. package/fesm2022/ngx-tethys-segment.mjs.map +1 -1
  54. package/fesm2022/ngx-tethys-shared.mjs +2 -1
  55. package/fesm2022/ngx-tethys-shared.mjs.map +1 -1
  56. package/fesm2022/ngx-tethys-slide.mjs +37 -56
  57. package/fesm2022/ngx-tethys-slide.mjs.map +1 -1
  58. package/fesm2022/ngx-tethys-slider.mjs.map +1 -1
  59. package/fesm2022/ngx-tethys-space.mjs +2 -8
  60. package/fesm2022/ngx-tethys-space.mjs.map +1 -1
  61. package/fesm2022/ngx-tethys-strength.mjs +52 -66
  62. package/fesm2022/ngx-tethys-strength.mjs.map +1 -1
  63. package/fesm2022/ngx-tethys-transfer.mjs +98 -119
  64. package/fesm2022/ngx-tethys-transfer.mjs.map +1 -1
  65. package/fesm2022/ngx-tethys-tree-select.mjs +2 -4
  66. package/fesm2022/ngx-tethys-tree-select.mjs.map +1 -1
  67. package/fesm2022/ngx-tethys-tree.mjs +281 -401
  68. package/fesm2022/ngx-tethys-tree.mjs.map +1 -1
  69. package/fesm2022/ngx-tethys-upload.mjs +2 -2
  70. package/fesm2022/ngx-tethys-upload.mjs.map +1 -1
  71. package/fesm2022/ngx-tethys-vote.mjs +53 -99
  72. package/fesm2022/ngx-tethys-vote.mjs.map +1 -1
  73. package/fesm2022/ngx-tethys.mjs +1 -1
  74. package/fesm2022/ngx-tethys.mjs.map +1 -1
  75. package/flexible-text/flexible-text.component.d.ts +9 -15
  76. package/grid/flex.d.ts +1 -3
  77. package/grid/thy-row.directive.d.ts +1 -4
  78. package/icon/icon.component.d.ts +10 -18
  79. package/image/image.directive.d.ts +10 -13
  80. package/image/image.token.d.ts +5 -5
  81. package/input-number/input-number.component.d.ts +1 -1
  82. package/package.json +1 -1
  83. package/progress/progress-circle.component.d.ts +3 -5
  84. package/progress/progress.component.d.ts +2 -4
  85. package/property/properties.component.d.ts +0 -2
  86. package/property/property-item.component.d.ts +3 -10
  87. package/radio/group/radio-group.component.d.ts +5 -9
  88. package/rate/rate-item.component.d.ts +8 -11
  89. package/rate/rate.component.d.ts +18 -29
  90. package/resizable/resizable.directive.d.ts +18 -31
  91. package/resizable/resize-handle.component.d.ts +6 -7
  92. package/resizable/resize-handles.component.d.ts +5 -9
  93. package/schematics/version.d.ts +1 -1
  94. package/schematics/version.js +1 -1
  95. package/segment/segment-item.component.d.ts +9 -15
  96. package/segment/segment.component.d.ts +11 -15
  97. package/segment/segment.token.d.ts +4 -3
  98. package/slide/slide-body/slide-body-section.component.d.ts +2 -6
  99. package/slide/slide-header/slide-header.component.d.ts +6 -9
  100. package/space/space.component.d.ts +5 -11
  101. package/strength/strength.component.d.ts +8 -13
  102. package/transfer/transfer-list.component.d.ts +15 -15
  103. package/transfer/transfer.component.d.ts +20 -23
  104. package/tree/tree-abstract.d.ts +5 -5
  105. package/tree/tree-node.component.d.ts +24 -37
  106. package/tree/tree.class.d.ts +4 -4
  107. package/tree/tree.component.d.ts +47 -75
  108. package/tree/tree.service.d.ts +3 -4
  109. package/tree-select/tree-select.component.d.ts +2 -2
  110. 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" }, usesOnChanges: true, 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 }); }
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 }], usesOnChanges: 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 }); }
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 = signal(false);
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), takeUntil(this.destroy$))
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), takeUntil(this.destroy$))
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 = true;
186
- this.isButtonGroupOutline = true;
158
+ if (!this.isButtonGroup() && !this.isButtonGroupOutline()) {
159
+ this.isButtonGroup.set(true);
160
+ this.isButtonGroupOutline.set(true);
187
161
  }
188
162
  }
189
- ngOnInit() {
190
- this._setClasses();
191
- }
192
- ngOnChanges(changes) {
193
- const { thyDisabled } = changes;
194
- if (thyDisabled) {
195
- this.setDisabledState(this.thyDisabled());
196
- }
197
- }
198
- ngAfterContentInit() {
199
- this.setDisabledState(this.thyDisabled());
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
- _setClasses() {
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: { "attr.tabindex": "-1", "class.thy-radio-group": "this.thyRadioGroup", "class.btn-group": "this.isButtonGroup", "class.btn-group-outline-default": "this.isButtonGroupOutline" } }, providers: [
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
- ], usesOnChanges: true, ngImport: i0, template: "<ng-content></ng-content>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
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
- }], propDecorators: { thyRadioGroup: [{
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 }); }