@ng-nest/ui 21.0.2 → 21.0.3

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.
@@ -44,10 +44,25 @@ class XStepsProperty extends XPropertyFunction(X_STEPS_CONFIG_NAME) {
44
44
  */
45
45
  this.status = input(...(ngDevMode ? [undefined, { debugName: "status" }] : []));
46
46
  /**
47
- * @zh_CN 自定义节点
48
- * @en_US Custom node
47
+ * @zh_CN 自定义节点(22 版本将废弃)
48
+ * @en_US Custom node (will be deprecated in version 22)
49
49
  */
50
50
  this.customTpl = input(...(ngDevMode ? [undefined, { debugName: "customTpl" }] : []));
51
+ /**
52
+ * @zh_CN 自定义节点图标
53
+ * @en_US Custom node icon
54
+ */
55
+ this.customIconTpl = input(...(ngDevMode ? [undefined, { debugName: "customIconTpl" }] : []));
56
+ /**
57
+ * @zh_CN 自定义节点标题
58
+ * @en_US Custom node label
59
+ */
60
+ this.customLabelTpl = input(...(ngDevMode ? [undefined, { debugName: "customLabelTpl" }] : []));
61
+ /**
62
+ * @zh_CN 自定义节点描述
63
+ * @en_US Custom node description
64
+ */
65
+ this.customDescriptionTpl = input(...(ngDevMode ? [undefined, { debugName: "customDescriptionTpl" }] : []));
51
66
  /**
52
67
  * @zh_CN 节点设置的状态优先,将不会自动计算当前节点,`activatedIndex` 和 `status` 将失效
53
68
  * @en_US the status set by the node takes precedence, and the current node will not be calculated, `activatedIndex` and `status` will be invalidated
@@ -55,12 +70,12 @@ class XStepsProperty extends XPropertyFunction(X_STEPS_CONFIG_NAME) {
55
70
  this.nodeStatus = input(false, ...(ngDevMode ? [{ debugName: "nodeStatus", transform: XToBoolean }] : [{ transform: XToBoolean }]));
56
71
  }
57
72
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: XStepsProperty, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
58
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.0", type: XStepsProperty, isStandalone: true, selector: "x-steps-property", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, activatedIndex: { classPropertyName: "activatedIndex", publicName: "activatedIndex", isSignal: true, isRequired: false, transformFunction: null }, startIndex: { classPropertyName: "startIndex", publicName: "startIndex", isSignal: true, isRequired: false, transformFunction: null }, status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, customTpl: { classPropertyName: "customTpl", publicName: "customTpl", isSignal: true, isRequired: false, transformFunction: null }, nodeStatus: { classPropertyName: "nodeStatus", publicName: "nodeStatus", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
73
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.0", type: XStepsProperty, isStandalone: true, selector: "x-steps-property", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, layout: { classPropertyName: "layout", publicName: "layout", isSignal: true, isRequired: false, transformFunction: null }, activatedIndex: { classPropertyName: "activatedIndex", publicName: "activatedIndex", isSignal: true, isRequired: false, transformFunction: null }, startIndex: { classPropertyName: "startIndex", publicName: "startIndex", isSignal: true, isRequired: false, transformFunction: null }, status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null }, customTpl: { classPropertyName: "customTpl", publicName: "customTpl", isSignal: true, isRequired: false, transformFunction: null }, customIconTpl: { classPropertyName: "customIconTpl", publicName: "customIconTpl", isSignal: true, isRequired: false, transformFunction: null }, customLabelTpl: { classPropertyName: "customLabelTpl", publicName: "customLabelTpl", isSignal: true, isRequired: false, transformFunction: null }, customDescriptionTpl: { classPropertyName: "customDescriptionTpl", publicName: "customDescriptionTpl", isSignal: true, isRequired: false, transformFunction: null }, nodeStatus: { classPropertyName: "nodeStatus", publicName: "nodeStatus", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); }
59
74
  }
60
75
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: XStepsProperty, decorators: [{
61
76
  type: Component,
62
77
  args: [{ selector: `${XStepsPrefix}-property`, template: '' }]
63
- }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], activatedIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "activatedIndex", required: false }] }], startIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "startIndex", required: false }] }], status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }], customTpl: [{ type: i0.Input, args: [{ isSignal: true, alias: "customTpl", required: false }] }], nodeStatus: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodeStatus", required: false }] }] } });
78
+ }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], layout: [{ type: i0.Input, args: [{ isSignal: true, alias: "layout", required: false }] }], activatedIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "activatedIndex", required: false }] }], startIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "startIndex", required: false }] }], status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }], customTpl: [{ type: i0.Input, args: [{ isSignal: true, alias: "customTpl", required: false }] }], customIconTpl: [{ type: i0.Input, args: [{ isSignal: true, alias: "customIconTpl", required: false }] }], customLabelTpl: [{ type: i0.Input, args: [{ isSignal: true, alias: "customLabelTpl", required: false }] }], customDescriptionTpl: [{ type: i0.Input, args: [{ isSignal: true, alias: "customDescriptionTpl", required: false }] }], nodeStatus: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodeStatus", required: false }] }] } });
64
79
 
65
80
  class XStepsComponent extends XStepsProperty {
66
81
  constructor() {
@@ -97,11 +112,11 @@ class XStepsComponent extends XStepsProperty {
97
112
  return this.startIndex() + index + 1;
98
113
  }
99
114
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: XStepsComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
100
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: XStepsComponent, isStandalone: true, selector: "x-steps", usesInheritance: true, ngImport: i0, template: "<div #steps class=\"x-steps\" [ngClass]=\"classMap()\">\r\n @for (node of nodes(); track node.id; let i = $index) {\r\n <div class=\"x-steps-node x-steps-{{ node.status }}\">\r\n <div class=\"x-steps-header\">\r\n <ng-container *xOutlet=\"customTpl(); context: { $node: node, $index: i }\">\r\n <div class=\"x-steps-icon\" [class.x-steps-only-icon]=\"node.icon\">\r\n @if (node.icon) {\r\n <x-icon [type]=\"node.icon\"></x-icon>\r\n } @else {\r\n @switch (node.status) {\r\n @case ('finish') {\r\n <x-icon type=\"fto-check\"></x-icon>\r\n }\r\n @case ('error') {\r\n <x-icon type=\"fto-x\"></x-icon>\r\n }\r\n @default {\r\n <span>{{ getIndex(i) }}</span>\r\n }\r\n }\r\n }\r\n </div>\r\n </ng-container>\r\n @if (layout() === 'column') {\r\n <span class=\"x-steps-line\"></span>\r\n }\r\n </div>\r\n <div class=\"x-steps-content\">\r\n <div class=\"x-steps-title\">\r\n <span class=\"x-steps-label\">{{ node.label }}</span>\r\n @if (layout() === 'row') {\r\n <span class=\"x-steps-line\"></span>\r\n }\r\n </div>\r\n <div class=\"x-steps-description\">{{ node.description }}</div>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n", styles: [".x-steps{margin:0;padding:0}.x-steps{display:flex}.x-steps-node{position:relative;flex:1;display:flex}.x-steps-node:last-child{flex:inherit}.x-steps-node:last-child .x-steps-line{display:none}.x-steps-content{padding:0 .5rem;position:relative;flex:1;display:flex;flex-direction:column}.x-steps-header{display:flex;flex-direction:column;align-items:center}.x-steps-title{display:flex;align-items:center;line-height:2rem;transition:var(--x-animation-duration-base)}.x-steps-label{padding-right:.5rem;white-space:nowrap;transition:var(--x-animation-duration-base)}.x-steps-line{flex:1;border-bottom:var(--x-border-width) var(--x-border-style) var(--x-border);transition:var(--x-animation-duration-base)}.x-steps-icon{height:2rem;width:2rem;border:var(--x-border-width) var(--x-border-style) var(--x-border);background-color:var(--x-background);border-radius:50%;display:flex;align-items:center;justify-content:center;transition:var(--x-animation-duration-base)}.x-steps-icon>.x-icon{font-size:1rem}.x-steps-icon.x-steps-only-icon{border:none}.x-steps-icon.x-steps-only-icon .x-icon{font-size:1.5rem}.x-steps-description{font-size:var(--x-font-size-small);color:var(--x-text-400);max-width:8rem}.x-steps-row{flex-direction:row}.x-steps-column{flex-direction:column}.x-steps-column .x-steps-header{min-height:5rem}.x-steps-column .x-steps-line{border-bottom:none;border-right:var(--x-border-width) var(--x-border-style) var(--x-border);margin:.5rem 0}.x-steps-column .x-steps-content{padding:0 0 .5rem .5rem}.x-steps-column .x-steps-description{max-width:inherit}.x-steps-wait .x-steps-label{color:var(--x-text-400);font-weight:\"\"}.x-steps-wait .x-steps-icon{color:var(--x-text-400);background-color:\"\";border-color:\"\"}.x-steps-wait .x-steps-line{border-color:\"\"}.x-steps-process .x-steps-label{color:var(--x-text-300);font-weight:700}.x-steps-process .x-steps-icon{color:var(--x-white);background-color:var(--x-primary);border-color:var(--x-primary)}.x-steps-process .x-steps-icon.x-steps-only-icon{color:var(--x-primary);background-color:inherit}.x-steps-process .x-steps-line{border-color:\"\"}.x-steps-finish .x-steps-label{color:var(--x-text-400);font-weight:\"\"}.x-steps-finish .x-steps-icon{color:var(--x-primary);background-color:\"\";border-color:\"\"}.x-steps-finish .x-steps-line{border-color:var(--x-primary)}.x-steps-error .x-steps-label{color:var(--x-danger);font-weight:\"\"}.x-steps-error .x-steps-icon{color:var(--x-danger);background-color:\"\";border-color:var(--x-danger)}.x-steps-error .x-steps-line{border-color:\"\"}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: XIconComponent, selector: "x-icon" }, { kind: "directive", type: XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
115
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", type: XStepsComponent, isStandalone: true, selector: "x-steps", usesInheritance: true, ngImport: i0, template: "<div #steps class=\"x-steps\" [ngClass]=\"classMap()\">\r\n @for (node of nodes(); track node.id; let i = $index) {\r\n <div class=\"x-steps-node x-steps-{{ node.status }}\">\r\n <div class=\"x-steps-header\">\r\n <ng-container *xOutlet=\"customTpl() ?? customIconTpl(); context: { $node: node, $index: i }\">\r\n <div class=\"x-steps-icon\" [class.x-steps-only-icon]=\"node.icon\">\r\n @if (node.icon) {\r\n <x-icon [type]=\"node.icon\"></x-icon>\r\n } @else {\r\n @switch (node.status) {\r\n @case ('finish') {\r\n <x-icon type=\"fto-check\"></x-icon>\r\n }\r\n @case ('error') {\r\n <x-icon type=\"fto-x\"></x-icon>\r\n }\r\n @default {\r\n <span>{{ getIndex(i) }}</span>\r\n }\r\n }\r\n }\r\n </div>\r\n </ng-container>\r\n @if (layout() === 'column') {\r\n <span class=\"x-steps-line\"></span>\r\n }\r\n </div>\r\n <div class=\"x-steps-content\">\r\n <div class=\"x-steps-title\">\r\n <span class=\"x-steps-label\">\r\n <ng-container *xOutlet=\"customLabelTpl(); context: { $node: node, $index: i }\">{{\r\n node.label\r\n }}</ng-container>\r\n </span>\r\n\r\n @if (layout() === 'row') {\r\n <span class=\"x-steps-line\"></span>\r\n }\r\n </div>\r\n <div class=\"x-steps-description\">\r\n <ng-container *xOutlet=\"customDescriptionTpl(); context: { $node: node, $index: i }\">{{\r\n node.description\r\n }}</ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n", styles: [".x-steps{margin:0;padding:0}.x-steps{display:flex}.x-steps-node{position:relative;flex:1;display:flex}.x-steps-node:last-child{flex:inherit}.x-steps-node:last-child .x-steps-line{display:none}.x-steps-content{padding:0 .5rem;position:relative;flex:1;display:flex;flex-direction:column}.x-steps-header{display:flex;flex-direction:column;align-items:center}.x-steps-title{display:flex;align-items:center;line-height:2rem;transition:var(--x-animation-duration-base)}.x-steps-label{padding-right:.5rem;white-space:nowrap;transition:var(--x-animation-duration-base)}.x-steps-line{flex:1;border-bottom:var(--x-border-width) var(--x-border-style) var(--x-border);transition:var(--x-animation-duration-base)}.x-steps-icon{height:2rem;width:2rem;border:var(--x-border-width) var(--x-border-style) var(--x-border);background-color:var(--x-background);border-radius:50%;display:flex;align-items:center;justify-content:center;transition:var(--x-animation-duration-base)}.x-steps-icon>.x-icon{font-size:1rem}.x-steps-icon.x-steps-only-icon{border:none}.x-steps-icon.x-steps-only-icon .x-icon{font-size:1.5rem}.x-steps-description{font-size:var(--x-font-size-small);color:var(--x-text-400);max-width:8rem}.x-steps-row{flex-direction:row}.x-steps-column{flex-direction:column}.x-steps-column .x-steps-header{min-height:5rem}.x-steps-column .x-steps-line{border-bottom:none;border-right:var(--x-border-width) var(--x-border-style) var(--x-border);margin:.5rem 0}.x-steps-column .x-steps-content{padding:0 0 .5rem .5rem}.x-steps-column .x-steps-description{max-width:inherit}.x-steps-wait .x-steps-label{color:var(--x-text-400);font-weight:\"\"}.x-steps-wait .x-steps-icon{color:var(--x-text-400);background-color:\"\";border-color:\"\"}.x-steps-wait .x-steps-line{border-color:\"\"}.x-steps-process .x-steps-label{color:var(--x-text-300);font-weight:700}.x-steps-process .x-steps-icon{color:var(--x-white);background-color:var(--x-primary);border-color:var(--x-primary)}.x-steps-process .x-steps-icon.x-steps-only-icon{color:var(--x-primary);background-color:inherit}.x-steps-process .x-steps-line{border-color:\"\"}.x-steps-finish .x-steps-label{color:var(--x-text-400);font-weight:\"\"}.x-steps-finish .x-steps-icon{color:var(--x-primary);background-color:\"\";border-color:\"\"}.x-steps-finish .x-steps-line{border-color:var(--x-primary)}.x-steps-error .x-steps-label{color:var(--x-danger);font-weight:\"\"}.x-steps-error .x-steps-icon{color:var(--x-danger);background-color:\"\";border-color:var(--x-danger)}.x-steps-error .x-steps-line{border-color:\"\"}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: XIconComponent, selector: "x-icon" }, { kind: "directive", type: XOutletDirective, selector: "[xOutlet]", inputs: ["xOutletContext", "xOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
101
116
  }
102
117
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: XStepsComponent, decorators: [{
103
118
  type: Component,
104
- args: [{ selector: `${XStepsPrefix}`, imports: [NgClass, XIconComponent, XOutletDirective], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #steps class=\"x-steps\" [ngClass]=\"classMap()\">\r\n @for (node of nodes(); track node.id; let i = $index) {\r\n <div class=\"x-steps-node x-steps-{{ node.status }}\">\r\n <div class=\"x-steps-header\">\r\n <ng-container *xOutlet=\"customTpl(); context: { $node: node, $index: i }\">\r\n <div class=\"x-steps-icon\" [class.x-steps-only-icon]=\"node.icon\">\r\n @if (node.icon) {\r\n <x-icon [type]=\"node.icon\"></x-icon>\r\n } @else {\r\n @switch (node.status) {\r\n @case ('finish') {\r\n <x-icon type=\"fto-check\"></x-icon>\r\n }\r\n @case ('error') {\r\n <x-icon type=\"fto-x\"></x-icon>\r\n }\r\n @default {\r\n <span>{{ getIndex(i) }}</span>\r\n }\r\n }\r\n }\r\n </div>\r\n </ng-container>\r\n @if (layout() === 'column') {\r\n <span class=\"x-steps-line\"></span>\r\n }\r\n </div>\r\n <div class=\"x-steps-content\">\r\n <div class=\"x-steps-title\">\r\n <span class=\"x-steps-label\">{{ node.label }}</span>\r\n @if (layout() === 'row') {\r\n <span class=\"x-steps-line\"></span>\r\n }\r\n </div>\r\n <div class=\"x-steps-description\">{{ node.description }}</div>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n", styles: [".x-steps{margin:0;padding:0}.x-steps{display:flex}.x-steps-node{position:relative;flex:1;display:flex}.x-steps-node:last-child{flex:inherit}.x-steps-node:last-child .x-steps-line{display:none}.x-steps-content{padding:0 .5rem;position:relative;flex:1;display:flex;flex-direction:column}.x-steps-header{display:flex;flex-direction:column;align-items:center}.x-steps-title{display:flex;align-items:center;line-height:2rem;transition:var(--x-animation-duration-base)}.x-steps-label{padding-right:.5rem;white-space:nowrap;transition:var(--x-animation-duration-base)}.x-steps-line{flex:1;border-bottom:var(--x-border-width) var(--x-border-style) var(--x-border);transition:var(--x-animation-duration-base)}.x-steps-icon{height:2rem;width:2rem;border:var(--x-border-width) var(--x-border-style) var(--x-border);background-color:var(--x-background);border-radius:50%;display:flex;align-items:center;justify-content:center;transition:var(--x-animation-duration-base)}.x-steps-icon>.x-icon{font-size:1rem}.x-steps-icon.x-steps-only-icon{border:none}.x-steps-icon.x-steps-only-icon .x-icon{font-size:1.5rem}.x-steps-description{font-size:var(--x-font-size-small);color:var(--x-text-400);max-width:8rem}.x-steps-row{flex-direction:row}.x-steps-column{flex-direction:column}.x-steps-column .x-steps-header{min-height:5rem}.x-steps-column .x-steps-line{border-bottom:none;border-right:var(--x-border-width) var(--x-border-style) var(--x-border);margin:.5rem 0}.x-steps-column .x-steps-content{padding:0 0 .5rem .5rem}.x-steps-column .x-steps-description{max-width:inherit}.x-steps-wait .x-steps-label{color:var(--x-text-400);font-weight:\"\"}.x-steps-wait .x-steps-icon{color:var(--x-text-400);background-color:\"\";border-color:\"\"}.x-steps-wait .x-steps-line{border-color:\"\"}.x-steps-process .x-steps-label{color:var(--x-text-300);font-weight:700}.x-steps-process .x-steps-icon{color:var(--x-white);background-color:var(--x-primary);border-color:var(--x-primary)}.x-steps-process .x-steps-icon.x-steps-only-icon{color:var(--x-primary);background-color:inherit}.x-steps-process .x-steps-line{border-color:\"\"}.x-steps-finish .x-steps-label{color:var(--x-text-400);font-weight:\"\"}.x-steps-finish .x-steps-icon{color:var(--x-primary);background-color:\"\";border-color:\"\"}.x-steps-finish .x-steps-line{border-color:var(--x-primary)}.x-steps-error .x-steps-label{color:var(--x-danger);font-weight:\"\"}.x-steps-error .x-steps-icon{color:var(--x-danger);background-color:\"\";border-color:var(--x-danger)}.x-steps-error .x-steps-line{border-color:\"\"}\n"] }]
119
+ args: [{ selector: `${XStepsPrefix}`, imports: [NgClass, XIconComponent, XOutletDirective], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #steps class=\"x-steps\" [ngClass]=\"classMap()\">\r\n @for (node of nodes(); track node.id; let i = $index) {\r\n <div class=\"x-steps-node x-steps-{{ node.status }}\">\r\n <div class=\"x-steps-header\">\r\n <ng-container *xOutlet=\"customTpl() ?? customIconTpl(); context: { $node: node, $index: i }\">\r\n <div class=\"x-steps-icon\" [class.x-steps-only-icon]=\"node.icon\">\r\n @if (node.icon) {\r\n <x-icon [type]=\"node.icon\"></x-icon>\r\n } @else {\r\n @switch (node.status) {\r\n @case ('finish') {\r\n <x-icon type=\"fto-check\"></x-icon>\r\n }\r\n @case ('error') {\r\n <x-icon type=\"fto-x\"></x-icon>\r\n }\r\n @default {\r\n <span>{{ getIndex(i) }}</span>\r\n }\r\n }\r\n }\r\n </div>\r\n </ng-container>\r\n @if (layout() === 'column') {\r\n <span class=\"x-steps-line\"></span>\r\n }\r\n </div>\r\n <div class=\"x-steps-content\">\r\n <div class=\"x-steps-title\">\r\n <span class=\"x-steps-label\">\r\n <ng-container *xOutlet=\"customLabelTpl(); context: { $node: node, $index: i }\">{{\r\n node.label\r\n }}</ng-container>\r\n </span>\r\n\r\n @if (layout() === 'row') {\r\n <span class=\"x-steps-line\"></span>\r\n }\r\n </div>\r\n <div class=\"x-steps-description\">\r\n <ng-container *xOutlet=\"customDescriptionTpl(); context: { $node: node, $index: i }\">{{\r\n node.description\r\n }}</ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n", styles: [".x-steps{margin:0;padding:0}.x-steps{display:flex}.x-steps-node{position:relative;flex:1;display:flex}.x-steps-node:last-child{flex:inherit}.x-steps-node:last-child .x-steps-line{display:none}.x-steps-content{padding:0 .5rem;position:relative;flex:1;display:flex;flex-direction:column}.x-steps-header{display:flex;flex-direction:column;align-items:center}.x-steps-title{display:flex;align-items:center;line-height:2rem;transition:var(--x-animation-duration-base)}.x-steps-label{padding-right:.5rem;white-space:nowrap;transition:var(--x-animation-duration-base)}.x-steps-line{flex:1;border-bottom:var(--x-border-width) var(--x-border-style) var(--x-border);transition:var(--x-animation-duration-base)}.x-steps-icon{height:2rem;width:2rem;border:var(--x-border-width) var(--x-border-style) var(--x-border);background-color:var(--x-background);border-radius:50%;display:flex;align-items:center;justify-content:center;transition:var(--x-animation-duration-base)}.x-steps-icon>.x-icon{font-size:1rem}.x-steps-icon.x-steps-only-icon{border:none}.x-steps-icon.x-steps-only-icon .x-icon{font-size:1.5rem}.x-steps-description{font-size:var(--x-font-size-small);color:var(--x-text-400);max-width:8rem}.x-steps-row{flex-direction:row}.x-steps-column{flex-direction:column}.x-steps-column .x-steps-header{min-height:5rem}.x-steps-column .x-steps-line{border-bottom:none;border-right:var(--x-border-width) var(--x-border-style) var(--x-border);margin:.5rem 0}.x-steps-column .x-steps-content{padding:0 0 .5rem .5rem}.x-steps-column .x-steps-description{max-width:inherit}.x-steps-wait .x-steps-label{color:var(--x-text-400);font-weight:\"\"}.x-steps-wait .x-steps-icon{color:var(--x-text-400);background-color:\"\";border-color:\"\"}.x-steps-wait .x-steps-line{border-color:\"\"}.x-steps-process .x-steps-label{color:var(--x-text-300);font-weight:700}.x-steps-process .x-steps-icon{color:var(--x-white);background-color:var(--x-primary);border-color:var(--x-primary)}.x-steps-process .x-steps-icon.x-steps-only-icon{color:var(--x-primary);background-color:inherit}.x-steps-process .x-steps-line{border-color:\"\"}.x-steps-finish .x-steps-label{color:var(--x-text-400);font-weight:\"\"}.x-steps-finish .x-steps-icon{color:var(--x-primary);background-color:\"\";border-color:\"\"}.x-steps-finish .x-steps-line{border-color:var(--x-primary)}.x-steps-error .x-steps-label{color:var(--x-danger);font-weight:\"\"}.x-steps-error .x-steps-icon{color:var(--x-danger);background-color:\"\";border-color:var(--x-danger)}.x-steps-error .x-steps-line{border-color:\"\"}\n"] }]
105
120
  }] });
106
121
 
107
122
  class XStepsModule {
@@ -1 +1 @@
1
- {"version":3,"file":"ng-nest-ui-steps.mjs","sources":["../../../../lib/ng-nest/ui/steps/steps.property.ts","../../../../lib/ng-nest/ui/steps/steps.component.ts","../../../../lib/ng-nest/ui/steps/steps.component.html","../../../../lib/ng-nest/ui/steps/steps.module.ts","../../../../lib/ng-nest/ui/steps/ng-nest-ui-steps.ts"],"sourcesContent":["import { XToDataArray, XToNumber, XToBoolean, XPropertyFunction } from '@ng-nest/ui/core';\r\nimport { Component, input, TemplateRef } from '@angular/core';\r\nimport type { XParentIdentityProperty, XNumber, XBoolean, XDataArray } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * Steps\r\n * @selector x-steps\r\n * @decorator component\r\n */\r\nexport const XStepsPrefix = 'x-steps';\r\nconst X_STEPS_CONFIG_NAME = 'steps';\r\n\r\n/**\r\n * Steps Property\r\n */\r\n@Component({ selector: `${XStepsPrefix}-property`, template: '' })\r\nexport class XStepsProperty extends XPropertyFunction(X_STEPS_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 节点数据\r\n * @en_US Node data\r\n */\r\n readonly data = input<XStepsNode[], XDataArray<XStepsNode>>([], { transform: XToDataArray });\r\n /**\r\n * @zh_CN 布局方式\r\n * @en_US Layout\r\n */\r\n readonly layout = input<XStepsLayout>('row');\r\n /**\r\n * @zh_CN 当前激活节点\r\n * @en_US Currently active node\r\n */\r\n readonly activatedIndex = input<number, XNumber>(0, { transform: XToNumber });\r\n /**\r\n * @zh_CN 步骤开始序号\r\n * @en_US Step start number\r\n */\r\n readonly startIndex = input<number, XNumber>(0, { transform: XToNumber });\r\n /**\r\n * @zh_CN 当前激活节点状态\r\n * @en_US Current active node status\r\n */\r\n readonly status = input<XStepsStatus>();\r\n /**\r\n * @zh_CN 自定义节点\r\n * @en_US Custom node\r\n */\r\n readonly customTpl = input<TemplateRef<any>>();\r\n /**\r\n * @zh_CN 节点设置的状态优先,将不会自动计算当前节点,`activatedIndex` 和 `status` 将失效\r\n * @en_US the status set by the node takes precedence, and the current node will not be calculated, `activatedIndex` and `status` will be invalidated\r\n */\r\n readonly nodeStatus = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n}\r\n\r\nexport interface XStepsNode extends XParentIdentityProperty<XStepsNode> {\r\n /**\r\n * @zh_CN 状态\r\n * @en_US Status\r\n */\r\n status?: XStepsStatus;\r\n /**\r\n * @zh_CN 描述\r\n * @en_US Description\r\n */\r\n description?: string;\r\n /**\r\n * @zh_CN 图标\r\n * @en_US Icon\r\n */\r\n icon?: string;\r\n}\r\n\r\n/**\r\n * @zh_CN 布局方式\r\n * @en_US Layout\r\n */\r\nexport type XStepsLayout = 'row' | 'column';\r\n\r\n/**\r\n * @zh_CN 节点状态\r\n * @en_US Node status\r\n */\r\nexport type XStepsStatus = 'wait' | 'process' | 'finish' | 'error';\r\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, computed } from '@angular/core';\r\nimport { XStepsPrefix, XStepsProperty } from './steps.property';\r\nimport { XIsUndefined, XIsNumber, XIsEmpty } from '@ng-nest/ui/core';\r\nimport { NgClass } from '@angular/common';\r\nimport { XIconComponent } from '@ng-nest/ui/icon';\r\nimport { XOutletDirective } from '@ng-nest/ui/outlet';\r\n\r\n@Component({\r\n selector: `${XStepsPrefix}`,\r\n imports: [NgClass, XIconComponent, XOutletDirective],\r\n templateUrl: './steps.component.html',\r\n styleUrls: ['./steps.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XStepsComponent extends XStepsProperty {\r\n nodes = computed(() => {\r\n const data = this.data();\r\n const activatedIndex = this.activatedIndex();\r\n const status = this.status();\r\n const nodeStatus = this.nodeStatus();\r\n return data.map((x, index) => {\r\n if (nodeStatus) {\r\n if (XIsUndefined(x.status)) {\r\n x.status = 'wait';\r\n }\r\n } else {\r\n if (XIsUndefined(activatedIndex)) {\r\n x.status = 'wait';\r\n } else if (XIsNumber(activatedIndex)) {\r\n x.status = index < activatedIndex ? 'finish' : index === activatedIndex ? 'process' : 'wait';\r\n }\r\n if (status && index === activatedIndex) x.status = status;\r\n }\r\n\r\n return x;\r\n });\r\n });\r\n\r\n classMap = computed(() => ({\r\n [`${XStepsPrefix}-${this.layout()}`]: !XIsEmpty(this.layout())\r\n }));\r\n\r\n getIndex(index: number) {\r\n return this.startIndex() + index + 1;\r\n }\r\n}\r\n","<div #steps class=\"x-steps\" [ngClass]=\"classMap()\">\r\n @for (node of nodes(); track node.id; let i = $index) {\r\n <div class=\"x-steps-node x-steps-{{ node.status }}\">\r\n <div class=\"x-steps-header\">\r\n <ng-container *xOutlet=\"customTpl(); context: { $node: node, $index: i }\">\r\n <div class=\"x-steps-icon\" [class.x-steps-only-icon]=\"node.icon\">\r\n @if (node.icon) {\r\n <x-icon [type]=\"node.icon\"></x-icon>\r\n } @else {\r\n @switch (node.status) {\r\n @case ('finish') {\r\n <x-icon type=\"fto-check\"></x-icon>\r\n }\r\n @case ('error') {\r\n <x-icon type=\"fto-x\"></x-icon>\r\n }\r\n @default {\r\n <span>{{ getIndex(i) }}</span>\r\n }\r\n }\r\n }\r\n </div>\r\n </ng-container>\r\n @if (layout() === 'column') {\r\n <span class=\"x-steps-line\"></span>\r\n }\r\n </div>\r\n <div class=\"x-steps-content\">\r\n <div class=\"x-steps-title\">\r\n <span class=\"x-steps-label\">{{ node.label }}</span>\r\n @if (layout() === 'row') {\r\n <span class=\"x-steps-line\"></span>\r\n }\r\n </div>\r\n <div class=\"x-steps-description\">{{ node.description }}</div>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { XStepsComponent } from './steps.component';\r\n\r\n@NgModule({\r\n exports: [XStepsComponent],\r\n imports: [XStepsComponent]\r\n})\r\nexport class XStepsModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ng-nest-ui-steps.mjs","sources":["../../../../lib/ng-nest/ui/steps/steps.property.ts","../../../../lib/ng-nest/ui/steps/steps.component.ts","../../../../lib/ng-nest/ui/steps/steps.component.html","../../../../lib/ng-nest/ui/steps/steps.module.ts","../../../../lib/ng-nest/ui/steps/ng-nest-ui-steps.ts"],"sourcesContent":["import { XToDataArray, XToNumber, XToBoolean, XPropertyFunction } from '@ng-nest/ui/core';\r\nimport { Component, input, TemplateRef } from '@angular/core';\r\nimport type { XParentIdentityProperty, XNumber, XBoolean, XDataArray } from '@ng-nest/ui/core';\r\n\r\n/**\r\n * Steps\r\n * @selector x-steps\r\n * @decorator component\r\n */\r\nexport const XStepsPrefix = 'x-steps';\r\nconst X_STEPS_CONFIG_NAME = 'steps';\r\n\r\n/**\r\n * Steps Property\r\n */\r\n@Component({ selector: `${XStepsPrefix}-property`, template: '' })\r\nexport class XStepsProperty extends XPropertyFunction(X_STEPS_CONFIG_NAME) {\r\n /**\r\n * @zh_CN 节点数据\r\n * @en_US Node data\r\n */\r\n readonly data = input<XStepsNode[], XDataArray<XStepsNode>>([], { transform: XToDataArray });\r\n /**\r\n * @zh_CN 布局方式\r\n * @en_US Layout\r\n */\r\n readonly layout = input<XStepsLayout>('row');\r\n /**\r\n * @zh_CN 当前激活节点\r\n * @en_US Currently active node\r\n */\r\n readonly activatedIndex = input<number, XNumber>(0, { transform: XToNumber });\r\n /**\r\n * @zh_CN 步骤开始序号\r\n * @en_US Step start number\r\n */\r\n readonly startIndex = input<number, XNumber>(0, { transform: XToNumber });\r\n /**\r\n * @zh_CN 当前激活节点状态\r\n * @en_US Current active node status\r\n */\r\n readonly status = input<XStepsStatus>();\r\n /**\r\n * @zh_CN 自定义节点(22 版本将废弃)\r\n * @en_US Custom node (will be deprecated in version 22)\r\n */\r\n readonly customTpl = input<TemplateRef<any>>();\r\n /**\r\n * @zh_CN 自定义节点图标\r\n * @en_US Custom node icon\r\n */\r\n readonly customIconTpl = input<TemplateRef<any>>();\r\n /**\r\n * @zh_CN 自定义节点标题\r\n * @en_US Custom node label\r\n */\r\n readonly customLabelTpl = input<TemplateRef<any>>();\r\n /**\r\n * @zh_CN 自定义节点描述\r\n * @en_US Custom node description\r\n */\r\n readonly customDescriptionTpl = input<TemplateRef<any>>();\r\n /**\r\n * @zh_CN 节点设置的状态优先,将不会自动计算当前节点,`activatedIndex` 和 `status` 将失效\r\n * @en_US the status set by the node takes precedence, and the current node will not be calculated, `activatedIndex` and `status` will be invalidated\r\n */\r\n readonly nodeStatus = input<boolean, XBoolean>(false, { transform: XToBoolean });\r\n}\r\n\r\nexport interface XStepsNode extends XParentIdentityProperty<XStepsNode> {\r\n /**\r\n * @zh_CN 状态\r\n * @en_US Status\r\n */\r\n status?: XStepsStatus;\r\n /**\r\n * @zh_CN 描述\r\n * @en_US Description\r\n */\r\n description?: string;\r\n /**\r\n * @zh_CN 图标\r\n * @en_US Icon\r\n */\r\n icon?: string;\r\n}\r\n\r\n/**\r\n * @zh_CN 布局方式\r\n * @en_US Layout\r\n */\r\nexport type XStepsLayout = 'row' | 'column';\r\n\r\n/**\r\n * @zh_CN 节点状态\r\n * @en_US Node status\r\n */\r\nexport type XStepsStatus = 'wait' | 'process' | 'finish' | 'error';\r\n","import { Component, ViewEncapsulation, ChangeDetectionStrategy, computed } from '@angular/core';\r\nimport { XStepsPrefix, XStepsProperty } from './steps.property';\r\nimport { XIsUndefined, XIsNumber, XIsEmpty } from '@ng-nest/ui/core';\r\nimport { NgClass } from '@angular/common';\r\nimport { XIconComponent } from '@ng-nest/ui/icon';\r\nimport { XOutletDirective } from '@ng-nest/ui/outlet';\r\n\r\n@Component({\r\n selector: `${XStepsPrefix}`,\r\n imports: [NgClass, XIconComponent, XOutletDirective],\r\n templateUrl: './steps.component.html',\r\n styleUrls: ['./steps.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class XStepsComponent extends XStepsProperty {\r\n nodes = computed(() => {\r\n const data = this.data();\r\n const activatedIndex = this.activatedIndex();\r\n const status = this.status();\r\n const nodeStatus = this.nodeStatus();\r\n return data.map((x, index) => {\r\n if (nodeStatus) {\r\n if (XIsUndefined(x.status)) {\r\n x.status = 'wait';\r\n }\r\n } else {\r\n if (XIsUndefined(activatedIndex)) {\r\n x.status = 'wait';\r\n } else if (XIsNumber(activatedIndex)) {\r\n x.status = index < activatedIndex ? 'finish' : index === activatedIndex ? 'process' : 'wait';\r\n }\r\n if (status && index === activatedIndex) x.status = status;\r\n }\r\n\r\n return x;\r\n });\r\n });\r\n\r\n classMap = computed(() => ({\r\n [`${XStepsPrefix}-${this.layout()}`]: !XIsEmpty(this.layout())\r\n }));\r\n\r\n getIndex(index: number) {\r\n return this.startIndex() + index + 1;\r\n }\r\n}\r\n","<div #steps class=\"x-steps\" [ngClass]=\"classMap()\">\r\n @for (node of nodes(); track node.id; let i = $index) {\r\n <div class=\"x-steps-node x-steps-{{ node.status }}\">\r\n <div class=\"x-steps-header\">\r\n <ng-container *xOutlet=\"customTpl() ?? customIconTpl(); context: { $node: node, $index: i }\">\r\n <div class=\"x-steps-icon\" [class.x-steps-only-icon]=\"node.icon\">\r\n @if (node.icon) {\r\n <x-icon [type]=\"node.icon\"></x-icon>\r\n } @else {\r\n @switch (node.status) {\r\n @case ('finish') {\r\n <x-icon type=\"fto-check\"></x-icon>\r\n }\r\n @case ('error') {\r\n <x-icon type=\"fto-x\"></x-icon>\r\n }\r\n @default {\r\n <span>{{ getIndex(i) }}</span>\r\n }\r\n }\r\n }\r\n </div>\r\n </ng-container>\r\n @if (layout() === 'column') {\r\n <span class=\"x-steps-line\"></span>\r\n }\r\n </div>\r\n <div class=\"x-steps-content\">\r\n <div class=\"x-steps-title\">\r\n <span class=\"x-steps-label\">\r\n <ng-container *xOutlet=\"customLabelTpl(); context: { $node: node, $index: i }\">{{\r\n node.label\r\n }}</ng-container>\r\n </span>\r\n\r\n @if (layout() === 'row') {\r\n <span class=\"x-steps-line\"></span>\r\n }\r\n </div>\r\n <div class=\"x-steps-description\">\r\n <ng-container *xOutlet=\"customDescriptionTpl(); context: { $node: node, $index: i }\">{{\r\n node.description\r\n }}</ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { XStepsComponent } from './steps.component';\r\n\r\n@NgModule({\r\n exports: [XStepsComponent],\r\n imports: [XStepsComponent]\r\n})\r\nexport class XStepsModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ng-nest/ui",
3
- "version": "21.0.2",
3
+ "version": "21.0.3",
4
4
  "license": "MIT",
5
5
  "homepage": "https://www.ngnest.com",
6
6
  "author": "ng-nest",
@@ -43,17 +43,32 @@ declare class XStepsProperty extends XStepsProperty_base {
43
43
  */
44
44
  readonly status: _angular_core.InputSignal<XStepsStatus | undefined>;
45
45
  /**
46
- * @zh_CN 自定义节点
47
- * @en_US Custom node
46
+ * @zh_CN 自定义节点(22 版本将废弃)
47
+ * @en_US Custom node (will be deprecated in version 22)
48
48
  */
49
49
  readonly customTpl: _angular_core.InputSignal<TemplateRef<any> | undefined>;
50
+ /**
51
+ * @zh_CN 自定义节点图标
52
+ * @en_US Custom node icon
53
+ */
54
+ readonly customIconTpl: _angular_core.InputSignal<TemplateRef<any> | undefined>;
55
+ /**
56
+ * @zh_CN 自定义节点标题
57
+ * @en_US Custom node label
58
+ */
59
+ readonly customLabelTpl: _angular_core.InputSignal<TemplateRef<any> | undefined>;
60
+ /**
61
+ * @zh_CN 自定义节点描述
62
+ * @en_US Custom node description
63
+ */
64
+ readonly customDescriptionTpl: _angular_core.InputSignal<TemplateRef<any> | undefined>;
50
65
  /**
51
66
  * @zh_CN 节点设置的状态优先,将不会自动计算当前节点,`activatedIndex` 和 `status` 将失效
52
67
  * @en_US the status set by the node takes precedence, and the current node will not be calculated, `activatedIndex` and `status` will be invalidated
53
68
  */
54
69
  readonly nodeStatus: _angular_core.InputSignalWithTransform<boolean, XBoolean>;
55
70
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<XStepsProperty, never>;
56
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<XStepsProperty, "x-steps-property", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "activatedIndex": { "alias": "activatedIndex"; "required": false; "isSignal": true; }; "startIndex": { "alias": "startIndex"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "customTpl": { "alias": "customTpl"; "required": false; "isSignal": true; }; "nodeStatus": { "alias": "nodeStatus"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
71
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<XStepsProperty, "x-steps-property", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "activatedIndex": { "alias": "activatedIndex"; "required": false; "isSignal": true; }; "startIndex": { "alias": "startIndex"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "customTpl": { "alias": "customTpl"; "required": false; "isSignal": true; }; "customIconTpl": { "alias": "customIconTpl"; "required": false; "isSignal": true; }; "customLabelTpl": { "alias": "customLabelTpl"; "required": false; "isSignal": true; }; "customDescriptionTpl": { "alias": "customDescriptionTpl"; "required": false; "isSignal": true; }; "nodeStatus": { "alias": "nodeStatus"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
57
72
  }
58
73
  interface XStepsNode extends XParentIdentityProperty<XStepsNode> {
59
74
  /**