@theseam/ui-common 1.0.2-beta.48 → 1.0.2-beta.51
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.
|
@@ -1,9 +1,44 @@
|
|
|
1
|
+
import { ComponentHarness } from '@angular/cdk/testing';
|
|
1
2
|
import { __decorate } from 'tslib';
|
|
2
3
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { Input, ViewEncapsulation, Component, NgModule } from '@angular/core';
|
|
4
|
+
import { Input, ViewEncapsulation, Component, inject, DestroyRef, input, signal, computed, effect, ChangeDetectionStrategy, booleanAttribute, output, NgModule } from '@angular/core';
|
|
4
5
|
import { InputBoolean, InputNumber } from '@theseam/ui-common/core';
|
|
5
6
|
import * as i1 from '@angular/common';
|
|
6
7
|
import { CommonModule } from '@angular/common';
|
|
8
|
+
import { TheSeamTooltipDirective } from '@theseam/ui-common/tooltip';
|
|
9
|
+
|
|
10
|
+
/** Harness for a single cell inside `TheSeamSegmentedProgressBarComponent`. */
|
|
11
|
+
class TheSeamSegmentedProgressBarCellHarness extends ComponentHarness {
|
|
12
|
+
static hostSelector = 'seam-segmented-progress-bar-cell';
|
|
13
|
+
/** The visual state of the cell, derived from its host classes. */
|
|
14
|
+
async getState() {
|
|
15
|
+
const host = await this.host();
|
|
16
|
+
if (await host.hasClass('bg-success')) {
|
|
17
|
+
return 'complete';
|
|
18
|
+
}
|
|
19
|
+
return 'default';
|
|
20
|
+
}
|
|
21
|
+
async click() {
|
|
22
|
+
return (await this.host()).click();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/** Harness for `TheSeamSegmentedProgressBarComponent`. */
|
|
26
|
+
class TheSeamSegmentedProgressBarHarness extends ComponentHarness {
|
|
27
|
+
static hostSelector = 'seam-segmented-progress-bar';
|
|
28
|
+
_cells = this.locatorForAll(TheSeamSegmentedProgressBarCellHarness);
|
|
29
|
+
/** Gets harnesses for every rendered cell, in order. */
|
|
30
|
+
async getCells() {
|
|
31
|
+
return this._cells();
|
|
32
|
+
}
|
|
33
|
+
/** Clicks the cell at the given zero-based index. */
|
|
34
|
+
async clickCell(index) {
|
|
35
|
+
const cells = await this.getCells();
|
|
36
|
+
if (index < 0 || index >= cells.length) {
|
|
37
|
+
throw new Error(`TheSeamSegmentedProgressBarHarness.clickCell: index ${index} out of range (0..${cells.length - 1})`);
|
|
38
|
+
}
|
|
39
|
+
await cells[index].click();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
7
42
|
|
|
8
43
|
function calcDashoffset(value, circumference) {
|
|
9
44
|
const progress = value / 100;
|
|
@@ -71,17 +106,86 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
71
106
|
type: Input
|
|
72
107
|
}] } });
|
|
73
108
|
|
|
109
|
+
class SegmentedProgressBarCellComponent {
|
|
110
|
+
_destroyRef = inject(DestroyRef);
|
|
111
|
+
step = input.required(...(ngDevMode ? [{ debugName: "step" }] : []));
|
|
112
|
+
_controlStatus = signal(null, ...(ngDevMode ? [{ debugName: "_controlStatus" }] : []));
|
|
113
|
+
_state = computed(() => {
|
|
114
|
+
const s = this.step();
|
|
115
|
+
if (s.completed !== undefined) {
|
|
116
|
+
return s.completed ? 'COMPLETE' : 'DEFAULT';
|
|
117
|
+
}
|
|
118
|
+
if (s.control) {
|
|
119
|
+
const status = this._controlStatus();
|
|
120
|
+
if (status === 'VALID' && (s.isCurrent || s.hasVisited)) {
|
|
121
|
+
return 'COMPLETE';
|
|
122
|
+
}
|
|
123
|
+
return 'DEFAULT';
|
|
124
|
+
}
|
|
125
|
+
return 'DEFAULT';
|
|
126
|
+
}, ...(ngDevMode ? [{ debugName: "_state" }] : []));
|
|
127
|
+
constructor() {
|
|
128
|
+
let sub;
|
|
129
|
+
effect(() => {
|
|
130
|
+
const s = this.step();
|
|
131
|
+
sub?.unsubscribe();
|
|
132
|
+
sub = undefined;
|
|
133
|
+
if (s.control) {
|
|
134
|
+
this._controlStatus.set(s.control.status);
|
|
135
|
+
sub = s.control.statusChanges.subscribe((status) => this._controlStatus.set(status));
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
this._controlStatus.set(null);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
this._destroyRef.onDestroy(() => sub?.unsubscribe());
|
|
142
|
+
}
|
|
143
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SegmentedProgressBarCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
144
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.15", type: SegmentedProgressBarCellComponent, isStandalone: true, selector: "seam-segmented-progress-bar-cell", inputs: { step: { classPropertyName: "step", publicName: "step", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { "class.bg-light": "_state() === \"DEFAULT\"", "class.bg-success": "_state() === \"COMPLETE\"" } }, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
145
|
+
}
|
|
146
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SegmentedProgressBarCellComponent, decorators: [{
|
|
147
|
+
type: Component,
|
|
148
|
+
args: [{
|
|
149
|
+
selector: 'seam-segmented-progress-bar-cell',
|
|
150
|
+
template: '',
|
|
151
|
+
host: {
|
|
152
|
+
'[class.bg-light]': '_state() === "DEFAULT"',
|
|
153
|
+
'[class.bg-success]': '_state() === "COMPLETE"',
|
|
154
|
+
},
|
|
155
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
156
|
+
}]
|
|
157
|
+
}], ctorParameters: () => [], propDecorators: { step: [{ type: i0.Input, args: [{ isSignal: true, alias: "step", required: true }] }] } });
|
|
158
|
+
|
|
159
|
+
class TheSeamSegmentedProgressBarComponent {
|
|
160
|
+
progressSteps = input([], ...(ngDevMode ? [{ debugName: "progressSteps" }] : []));
|
|
161
|
+
clickable = input(false, ...(ngDevMode ? [{ debugName: "clickable", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
162
|
+
enableTooltip = input(false, ...(ngDevMode ? [{ debugName: "enableTooltip", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
163
|
+
cellClicked = output();
|
|
164
|
+
onClickProgressCell(step) {
|
|
165
|
+
if (!this.clickable()) {
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
this.cellClicked.emit(step);
|
|
169
|
+
}
|
|
170
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TheSeamSegmentedProgressBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
171
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: TheSeamSegmentedProgressBarComponent, isStandalone: true, selector: "seam-segmented-progress-bar", inputs: { progressSteps: { classPropertyName: "progressSteps", publicName: "progressSteps", isSignal: true, isRequired: false, transformFunction: null }, clickable: { classPropertyName: "clickable", publicName: "clickable", isSignal: true, isRequired: false, transformFunction: null }, enableTooltip: { classPropertyName: "enableTooltip", publicName: "enableTooltip", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { cellClicked: "cellClicked" }, ngImport: i0, template: "<div class=\"progress-bar--container\">\n @for (step of progressSteps(); track step.value) {\n <seam-segmented-progress-bar-cell\n [step]=\"step\"\n class=\"progress-bar--cell border\"\n [class.is-clickable]=\"clickable()\"\n (click)=\"onClickProgressCell(step)\"\n [seamTooltip]=\"step.label\"\n placement=\"bottom\"\n container=\"body\"\n [disableTooltip]=\"!enableTooltip()\"\n />\n }\n</div>\n", styles: [".progress-bar--container{display:flex;flex-direction:row;flex-wrap:wrap}.progress-bar--container .progress-bar--cell{width:25px;height:20px;border-radius:3px}.progress-bar--container .progress-bar--cell.is-clickable:hover:not(:disabled){cursor:pointer}\n"], dependencies: [{ kind: "component", type: SegmentedProgressBarCellComponent, selector: "seam-segmented-progress-bar-cell", inputs: ["step"] }, { kind: "directive", type: TheSeamTooltipDirective, selector: "[seamTooltip]", inputs: ["seamTooltip", "tooltipClass", "placement", "container", "disableTooltip", "showDelay", "hideDelay", "trigger"], exportAs: ["seamTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
172
|
+
}
|
|
173
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TheSeamSegmentedProgressBarComponent, decorators: [{
|
|
174
|
+
type: Component,
|
|
175
|
+
args: [{ selector: 'seam-segmented-progress-bar', imports: [SegmentedProgressBarCellComponent, TheSeamTooltipDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"progress-bar--container\">\n @for (step of progressSteps(); track step.value) {\n <seam-segmented-progress-bar-cell\n [step]=\"step\"\n class=\"progress-bar--cell border\"\n [class.is-clickable]=\"clickable()\"\n (click)=\"onClickProgressCell(step)\"\n [seamTooltip]=\"step.label\"\n placement=\"bottom\"\n container=\"body\"\n [disableTooltip]=\"!enableTooltip()\"\n />\n }\n</div>\n", styles: [".progress-bar--container{display:flex;flex-direction:row;flex-wrap:wrap}.progress-bar--container .progress-bar--cell{width:25px;height:20px;border-radius:3px}.progress-bar--container .progress-bar--cell.is-clickable:hover:not(:disabled){cursor:pointer}\n"] }]
|
|
176
|
+
}], propDecorators: { progressSteps: [{ type: i0.Input, args: [{ isSignal: true, alias: "progressSteps", required: false }] }], clickable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickable", required: false }] }], enableTooltip: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableTooltip", required: false }] }], cellClicked: [{ type: i0.Output, args: ["cellClicked"] }] } });
|
|
177
|
+
|
|
74
178
|
class TheSeamProgressModule {
|
|
75
179
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TheSeamProgressModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
76
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: TheSeamProgressModule, declarations: [ProgressCircleComponent], imports: [CommonModule], exports: [ProgressCircleComponent] });
|
|
180
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: TheSeamProgressModule, declarations: [ProgressCircleComponent], imports: [CommonModule, TheSeamSegmentedProgressBarComponent], exports: [ProgressCircleComponent, TheSeamSegmentedProgressBarComponent] });
|
|
77
181
|
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TheSeamProgressModule, imports: [CommonModule] });
|
|
78
182
|
}
|
|
79
183
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TheSeamProgressModule, decorators: [{
|
|
80
184
|
type: NgModule,
|
|
81
185
|
args: [{
|
|
82
186
|
declarations: [ProgressCircleComponent],
|
|
83
|
-
imports: [CommonModule],
|
|
84
|
-
exports: [ProgressCircleComponent],
|
|
187
|
+
imports: [CommonModule, TheSeamSegmentedProgressBarComponent],
|
|
188
|
+
exports: [ProgressCircleComponent, TheSeamSegmentedProgressBarComponent],
|
|
85
189
|
}]
|
|
86
190
|
}] });
|
|
87
191
|
|
|
@@ -89,5 +193,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
89
193
|
* Generated bundle index. Do not edit.
|
|
90
194
|
*/
|
|
91
195
|
|
|
92
|
-
export { ProgressCircleComponent, TheSeamProgressModule, calcDashoffset };
|
|
196
|
+
export { ProgressCircleComponent, TheSeamProgressModule, TheSeamSegmentedProgressBarCellHarness, TheSeamSegmentedProgressBarComponent, TheSeamSegmentedProgressBarHarness, calcDashoffset };
|
|
93
197
|
//# sourceMappingURL=theseam-ui-common-progress.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theseam-ui-common-progress.mjs","sources":["../../../projects/ui-common/progress/progress-circle/progress-circle.component.ts","../../../projects/ui-common/progress/progress-circle/progress-circle.component.html","../../../projects/ui-common/progress/progress.module.ts","../../../projects/ui-common/progress/theseam-ui-common-progress.ts"],"sourcesContent":["import { BooleanInput, NumberInput } from '@angular/cdk/coercion'\nimport { Component, Input, ViewEncapsulation } from '@angular/core'\n\nimport { InputBoolean, InputNumber } from '@theseam/ui-common/core'\n\ninterface IProgressInfo {\n dashoffset: number\n circumference: number\n percent: number\n}\n\nexport function calcDashoffset(value: number, circumference: number) {\n const progress = value / 100\n const dashoffset = circumference * (1 - progress)\n return dashoffset\n}\n\n@Component({\n selector: 'seam-progress-circle',\n templateUrl: './progress-circle.component.html',\n styleUrls: ['./progress-circle.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class ProgressCircleComponent {\n static ngAcceptInputType_fillBackground: BooleanInput\n static ngAcceptInputType_showText: BooleanInput\n static ngAcceptInputType_hiddenOnEmpty: BooleanInput\n static ngAcceptInputType_percentage: NumberInput\n static ngAcceptInputType_pending: BooleanInput\n\n private _percentage = 0\n\n @Input() @InputBoolean() fillBackground = false\n @Input() @InputBoolean() showText = false\n @Input() @InputBoolean() hiddenOnEmpty = true\n @Input() @InputBoolean() pending = false\n\n @Input()\n @InputNumber()\n set percentage(value: number) {\n this._percentage = value\n this._progressInfo = this._getProgress()\n }\n get percentage(): number {\n return this._percentage\n }\n\n public readonly radius = 15\n public readonly circumference = 2 * Math.PI * this.radius\n\n _progressInfo?: IProgressInfo | null\n\n private _getProgress(): IProgressInfo {\n return {\n dashoffset: calcDashoffset(this.percentage || 0, this.circumference),\n circumference: this.circumference,\n percent: Math.floor(this.percentage || 0),\n }\n }\n}\n","<div\n class=\"seam-progress-circle\"\n *ngIf=\"_progressInfo as p\"\n [class.seam-progress-circle--in-complete]=\"p.percent < 100\"\n [class.seam-progress-circle--fill-bg]=\"fillBackground\"\n>\n <div class=\"seam-progress-circle-inner\">\n <ng-container *ngIf=\"p.percent > 0 || !hiddenOnEmpty\">\n <svg\n class=\"seam-progress-circle--icon-spinner\"\n viewBox=\"0 0 40 40\"\n [attr.data-percent]=\"p.percent\"\n >\n <circle\n class=\"seam-progress-circle--icon-spinner-path seam-progress-circle--icon-spinner-path-bg\"\n cx=\"20\"\n cy=\"20\"\n r=\"15\"\n fill=\"none\"\n stroke-width=\"4\"\n ></circle>\n <circle\n class=\"seam-progress-circle--icon-spinner-path\"\n cx=\"20\"\n cy=\"20\"\n r=\"15\"\n fill=\"none\"\n transform=\"rotate(-90, 20, 20)\"\n stroke-width=\"4\"\n stroke-miterlimit=\"10\"\n [attr.stroke-dashoffset]=\"p.dashoffset\"\n [style.stroke-dasharray]=\"p.circumference\"\n ></circle>\n <!-- Checkmark -->\n <path\n *ngIf=\"!pending && p.percent === 100\"\n class=\"seam-progress-circle--icon-spinner-path\"\n fill=\"none\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M 11,22 L 18,28 L 28.5,17\"\n ></path>\n <!-- Hourglass -->\n <!-- `p.percent === 101` is still here for backwards compatability, but planing to be removed. -->\n <path\n *ngIf=\"pending || p.percent === 101\"\n class=\"seam-progress-circle--icon-hourglass\"\n fill=\"none\"\n d=\"M27.3,25.8c-0.2-2.5-1.6-4.6-3.6-5.8c2-1.2,3.4-3.3,3.6-5.8c0.7-0.3,1.2-1,1.2-1.8c0-1.1-0.9-2-2-2h-13\n c-1.1,0-2,0.9-2,2c0,0.8,0.5,1.6,1.2,1.8c0.2,2.5,1.6,4.6,3.6,5.8c-2,1.2-3.4,3.3-3.6,5.8c-0.7,0.3-1.2,1-1.2,1.8c0,1.1,0.9,2,2,2\n h13c1.1,0,2-0.9,2-2C28.6,26.9,28,26.1,27.3,25.8z M24.3,25.7h-8.5c0.3-2.1,2.1-3.6,4.2-3.6S24,23.6,24.3,25.7z M20,18\n c-2.1,0-3.9-1.6-4.2-3.6h8.5C24,16.5,22.2,18,20,18z\"\n ></path>\n </svg>\n </ng-container>\n <div\n class=\"seam-progress-circle--icon-text\"\n *ngIf=\"showText && !pending && p.percent > 0 && p.percent < 100\"\n >\n <span>{{ p.percent }}</span>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { ProgressCircleComponent } from './progress-circle/progress-circle.component'\n\n@NgModule({\n declarations: [ProgressCircleComponent],\n imports: [CommonModule],\n exports: [ProgressCircleComponent],\n})\nexport class TheSeamProgressModule {}\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":"theseam-ui-common-progress.mjs","sources":["../../../projects/ui-common/progress/testing/segmented-progress-bar.harness.ts","../../../projects/ui-common/progress/progress-circle/progress-circle.component.ts","../../../projects/ui-common/progress/progress-circle/progress-circle.component.html","../../../projects/ui-common/progress/segmented-progress-bar/segmented-progress-bar-cell.component.ts","../../../projects/ui-common/progress/segmented-progress-bar/segmented-progress-bar.component.ts","../../../projects/ui-common/progress/segmented-progress-bar/segmented-progress-bar.component.html","../../../projects/ui-common/progress/progress.module.ts","../../../projects/ui-common/progress/theseam-ui-common-progress.ts"],"sourcesContent":["import { ComponentHarness } from '@angular/cdk/testing'\n\n/** Harness for a single cell inside `TheSeamSegmentedProgressBarComponent`. */\nexport class TheSeamSegmentedProgressBarCellHarness extends ComponentHarness {\n static hostSelector = 'seam-segmented-progress-bar-cell'\n\n /** The visual state of the cell, derived from its host classes. */\n async getState(): Promise<'default' | 'complete'> {\n const host = await this.host()\n if (await host.hasClass('bg-success')) {\n return 'complete'\n }\n return 'default'\n }\n\n async click(): Promise<void> {\n return (await this.host()).click()\n }\n}\n\n/** Harness for `TheSeamSegmentedProgressBarComponent`. */\nexport class TheSeamSegmentedProgressBarHarness extends ComponentHarness {\n static hostSelector = 'seam-segmented-progress-bar'\n\n private readonly _cells = this.locatorForAll(\n TheSeamSegmentedProgressBarCellHarness,\n )\n\n /** Gets harnesses for every rendered cell, in order. */\n async getCells(): Promise<TheSeamSegmentedProgressBarCellHarness[]> {\n return this._cells()\n }\n\n /** Clicks the cell at the given zero-based index. */\n async clickCell(index: number): Promise<void> {\n const cells = await this.getCells()\n if (index < 0 || index >= cells.length) {\n throw new Error(\n `TheSeamSegmentedProgressBarHarness.clickCell: index ${index} out of range (0..${cells.length - 1})`,\n )\n }\n await cells[index].click()\n }\n}\n","import { BooleanInput, NumberInput } from '@angular/cdk/coercion'\nimport { Component, Input, ViewEncapsulation } from '@angular/core'\n\nimport { InputBoolean, InputNumber } from '@theseam/ui-common/core'\n\ninterface IProgressInfo {\n dashoffset: number\n circumference: number\n percent: number\n}\n\nexport function calcDashoffset(value: number, circumference: number) {\n const progress = value / 100\n const dashoffset = circumference * (1 - progress)\n return dashoffset\n}\n\n@Component({\n selector: 'seam-progress-circle',\n templateUrl: './progress-circle.component.html',\n styleUrls: ['./progress-circle.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class ProgressCircleComponent {\n static ngAcceptInputType_fillBackground: BooleanInput\n static ngAcceptInputType_showText: BooleanInput\n static ngAcceptInputType_hiddenOnEmpty: BooleanInput\n static ngAcceptInputType_percentage: NumberInput\n static ngAcceptInputType_pending: BooleanInput\n\n private _percentage = 0\n\n @Input() @InputBoolean() fillBackground = false\n @Input() @InputBoolean() showText = false\n @Input() @InputBoolean() hiddenOnEmpty = true\n @Input() @InputBoolean() pending = false\n\n @Input()\n @InputNumber()\n set percentage(value: number) {\n this._percentage = value\n this._progressInfo = this._getProgress()\n }\n get percentage(): number {\n return this._percentage\n }\n\n public readonly radius = 15\n public readonly circumference = 2 * Math.PI * this.radius\n\n _progressInfo?: IProgressInfo | null\n\n private _getProgress(): IProgressInfo {\n return {\n dashoffset: calcDashoffset(this.percentage || 0, this.circumference),\n circumference: this.circumference,\n percent: Math.floor(this.percentage || 0),\n }\n }\n}\n","<div\n class=\"seam-progress-circle\"\n *ngIf=\"_progressInfo as p\"\n [class.seam-progress-circle--in-complete]=\"p.percent < 100\"\n [class.seam-progress-circle--fill-bg]=\"fillBackground\"\n>\n <div class=\"seam-progress-circle-inner\">\n <ng-container *ngIf=\"p.percent > 0 || !hiddenOnEmpty\">\n <svg\n class=\"seam-progress-circle--icon-spinner\"\n viewBox=\"0 0 40 40\"\n [attr.data-percent]=\"p.percent\"\n >\n <circle\n class=\"seam-progress-circle--icon-spinner-path seam-progress-circle--icon-spinner-path-bg\"\n cx=\"20\"\n cy=\"20\"\n r=\"15\"\n fill=\"none\"\n stroke-width=\"4\"\n ></circle>\n <circle\n class=\"seam-progress-circle--icon-spinner-path\"\n cx=\"20\"\n cy=\"20\"\n r=\"15\"\n fill=\"none\"\n transform=\"rotate(-90, 20, 20)\"\n stroke-width=\"4\"\n stroke-miterlimit=\"10\"\n [attr.stroke-dashoffset]=\"p.dashoffset\"\n [style.stroke-dasharray]=\"p.circumference\"\n ></circle>\n <!-- Checkmark -->\n <path\n *ngIf=\"!pending && p.percent === 100\"\n class=\"seam-progress-circle--icon-spinner-path\"\n fill=\"none\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M 11,22 L 18,28 L 28.5,17\"\n ></path>\n <!-- Hourglass -->\n <!-- `p.percent === 101` is still here for backwards compatability, but planing to be removed. -->\n <path\n *ngIf=\"pending || p.percent === 101\"\n class=\"seam-progress-circle--icon-hourglass\"\n fill=\"none\"\n d=\"M27.3,25.8c-0.2-2.5-1.6-4.6-3.6-5.8c2-1.2,3.4-3.3,3.6-5.8c0.7-0.3,1.2-1,1.2-1.8c0-1.1-0.9-2-2-2h-13\n c-1.1,0-2,0.9-2,2c0,0.8,0.5,1.6,1.2,1.8c0.2,2.5,1.6,4.6,3.6,5.8c-2,1.2-3.4,3.3-3.6,5.8c-0.7,0.3-1.2,1-1.2,1.8c0,1.1,0.9,2,2,2\n h13c1.1,0,2-0.9,2-2C28.6,26.9,28,26.1,27.3,25.8z M24.3,25.7h-8.5c0.3-2.1,2.1-3.6,4.2-3.6S24,23.6,24.3,25.7z M20,18\n c-2.1,0-3.9-1.6-4.2-3.6h8.5C24,16.5,22.2,18,20,18z\"\n ></path>\n </svg>\n </ng-container>\n <div\n class=\"seam-progress-circle--icon-text\"\n *ngIf=\"showText && !pending && p.percent > 0 && p.percent < 100\"\n >\n <span>{{ p.percent }}</span>\n </div>\n </div>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n computed,\n effect,\n inject,\n input,\n signal,\n} from '@angular/core'\nimport { FormControlStatus } from '@angular/forms'\nimport { Subscription } from 'rxjs'\n\nimport { TheSeamSegmentedProgressBarStep } from './segmented-progress-bar.models'\n\ntype CellState = 'DEFAULT' | 'COMPLETE'\n\n@Component({\n selector: 'seam-segmented-progress-bar-cell',\n template: '',\n host: {\n '[class.bg-light]': '_state() === \"DEFAULT\"',\n '[class.bg-success]': '_state() === \"COMPLETE\"',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class SegmentedProgressBarCellComponent {\n private readonly _destroyRef = inject(DestroyRef)\n\n readonly step = input.required<TheSeamSegmentedProgressBarStep>()\n\n private readonly _controlStatus = signal<FormControlStatus | null>(null)\n\n protected readonly _state = computed<CellState>(() => {\n const s = this.step()\n if (s.completed !== undefined) {\n return s.completed ? 'COMPLETE' : 'DEFAULT'\n }\n if (s.control) {\n const status = this._controlStatus()\n if (status === 'VALID' && (s.isCurrent || s.hasVisited)) {\n return 'COMPLETE'\n }\n return 'DEFAULT'\n }\n return 'DEFAULT'\n })\n\n constructor() {\n let sub: Subscription | undefined\n effect(() => {\n const s = this.step()\n sub?.unsubscribe()\n sub = undefined\n if (s.control) {\n this._controlStatus.set(s.control.status)\n sub = s.control.statusChanges.subscribe((status) =>\n this._controlStatus.set(status),\n )\n } else {\n this._controlStatus.set(null)\n }\n })\n this._destroyRef.onDestroy(() => sub?.unsubscribe())\n }\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n input,\n output,\n} from '@angular/core'\n\nimport { TheSeamTooltipDirective } from '@theseam/ui-common/tooltip'\n\nimport { SegmentedProgressBarCellComponent } from './segmented-progress-bar-cell.component'\nimport { TheSeamSegmentedProgressBarStep } from './segmented-progress-bar.models'\n\n@Component({\n selector: 'seam-segmented-progress-bar',\n templateUrl: './segmented-progress-bar.component.html',\n styleUrls: ['./segmented-progress-bar.component.scss'],\n imports: [SegmentedProgressBarCellComponent, TheSeamTooltipDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TheSeamSegmentedProgressBarComponent {\n readonly progressSteps = input<TheSeamSegmentedProgressBarStep[]>([])\n readonly clickable = input(false, { transform: booleanAttribute })\n readonly enableTooltip = input(false, { transform: booleanAttribute })\n\n readonly cellClicked = output<TheSeamSegmentedProgressBarStep>()\n\n onClickProgressCell(step: TheSeamSegmentedProgressBarStep): void {\n if (!this.clickable()) {\n return\n }\n this.cellClicked.emit(step)\n }\n}\n","<div class=\"progress-bar--container\">\n @for (step of progressSteps(); track step.value) {\n <seam-segmented-progress-bar-cell\n [step]=\"step\"\n class=\"progress-bar--cell border\"\n [class.is-clickable]=\"clickable()\"\n (click)=\"onClickProgressCell(step)\"\n [seamTooltip]=\"step.label\"\n placement=\"bottom\"\n container=\"body\"\n [disableTooltip]=\"!enableTooltip()\"\n />\n }\n</div>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { ProgressCircleComponent } from './progress-circle/progress-circle.component'\nimport { TheSeamSegmentedProgressBarComponent } from './segmented-progress-bar/segmented-progress-bar.component'\n\n@NgModule({\n declarations: [ProgressCircleComponent],\n imports: [CommonModule, TheSeamSegmentedProgressBarComponent],\n exports: [ProgressCircleComponent, TheSeamSegmentedProgressBarComponent],\n})\nexport class TheSeamProgressModule {}\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
package/progress/index.d.ts
CHANGED
|
@@ -1,7 +1,26 @@
|
|
|
1
|
+
import { ComponentHarness } from '@angular/cdk/testing';
|
|
1
2
|
import { BooleanInput, NumberInput } from '@angular/cdk/coercion';
|
|
2
3
|
import * as i0 from '@angular/core';
|
|
4
|
+
import { AbstractControl } from '@angular/forms';
|
|
3
5
|
import * as i2 from '@angular/common';
|
|
4
6
|
|
|
7
|
+
/** Harness for a single cell inside `TheSeamSegmentedProgressBarComponent`. */
|
|
8
|
+
declare class TheSeamSegmentedProgressBarCellHarness extends ComponentHarness {
|
|
9
|
+
static hostSelector: string;
|
|
10
|
+
/** The visual state of the cell, derived from its host classes. */
|
|
11
|
+
getState(): Promise<'default' | 'complete'>;
|
|
12
|
+
click(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
/** Harness for `TheSeamSegmentedProgressBarComponent`. */
|
|
15
|
+
declare class TheSeamSegmentedProgressBarHarness extends ComponentHarness {
|
|
16
|
+
static hostSelector: string;
|
|
17
|
+
private readonly _cells;
|
|
18
|
+
/** Gets harnesses for every rendered cell, in order. */
|
|
19
|
+
getCells(): Promise<TheSeamSegmentedProgressBarCellHarness[]>;
|
|
20
|
+
/** Clicks the cell at the given zero-based index. */
|
|
21
|
+
clickCell(index: number): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
|
|
5
24
|
interface IProgressInfo {
|
|
6
25
|
dashoffset: number;
|
|
7
26
|
circumference: number;
|
|
@@ -29,10 +48,48 @@ declare class ProgressCircleComponent {
|
|
|
29
48
|
static ɵcmp: i0.ɵɵComponentDeclaration<ProgressCircleComponent, "seam-progress-circle", never, { "fillBackground": { "alias": "fillBackground"; "required": false; }; "showText": { "alias": "showText"; "required": false; }; "hiddenOnEmpty": { "alias": "hiddenOnEmpty"; "required": false; }; "pending": { "alias": "pending"; "required": false; }; "percentage": { "alias": "percentage"; "required": false; }; }, {}, never, never, false, never>;
|
|
30
49
|
}
|
|
31
50
|
|
|
51
|
+
/**
|
|
52
|
+
* Describes a single step rendered by `TheSeamSegmentedProgressBarComponent`.
|
|
53
|
+
*
|
|
54
|
+
* A step's visual state is derived from either an explicit `completed` flag
|
|
55
|
+
* or the validity of an injected `control`. When a `control` is provided,
|
|
56
|
+
* the step is considered visually complete only after it has been visited
|
|
57
|
+
* (either `isCurrent` or `hasVisited` is true) to avoid marking steps as
|
|
58
|
+
* done before the user has seen them.
|
|
59
|
+
*/
|
|
60
|
+
interface TheSeamSegmentedProgressBarStep {
|
|
61
|
+
/** Tooltip label shown on hover when `enableTooltip` is true. */
|
|
62
|
+
label: string;
|
|
63
|
+
/** Unique identifier for the step — used as the `@for` track key. */
|
|
64
|
+
value: string;
|
|
65
|
+
/**
|
|
66
|
+
* Explicit completion flag. When set, takes precedence over `control`.
|
|
67
|
+
* Leave undefined to derive state from `control` instead.
|
|
68
|
+
*/
|
|
69
|
+
completed?: boolean;
|
|
70
|
+
/** Optional form control whose validity drives state when `completed` is unset. */
|
|
71
|
+
control?: AbstractControl;
|
|
72
|
+
/** Whether this step is the currently-active step. */
|
|
73
|
+
isCurrent?: boolean;
|
|
74
|
+
/** Whether the user has previously visited this step. */
|
|
75
|
+
hasVisited?: boolean;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
declare class TheSeamSegmentedProgressBarComponent {
|
|
79
|
+
readonly progressSteps: i0.InputSignal<TheSeamSegmentedProgressBarStep[]>;
|
|
80
|
+
readonly clickable: i0.InputSignalWithTransform<boolean, unknown>;
|
|
81
|
+
readonly enableTooltip: i0.InputSignalWithTransform<boolean, unknown>;
|
|
82
|
+
readonly cellClicked: i0.OutputEmitterRef<TheSeamSegmentedProgressBarStep>;
|
|
83
|
+
onClickProgressCell(step: TheSeamSegmentedProgressBarStep): void;
|
|
84
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TheSeamSegmentedProgressBarComponent, never>;
|
|
85
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TheSeamSegmentedProgressBarComponent, "seam-segmented-progress-bar", never, { "progressSteps": { "alias": "progressSteps"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "enableTooltip": { "alias": "enableTooltip"; "required": false; "isSignal": true; }; }, { "cellClicked": "cellClicked"; }, never, never, true, never>;
|
|
86
|
+
}
|
|
87
|
+
|
|
32
88
|
declare class TheSeamProgressModule {
|
|
33
89
|
static ɵfac: i0.ɵɵFactoryDeclaration<TheSeamProgressModule, never>;
|
|
34
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<TheSeamProgressModule, [typeof ProgressCircleComponent], [typeof i2.CommonModule], [typeof ProgressCircleComponent]>;
|
|
90
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<TheSeamProgressModule, [typeof ProgressCircleComponent], [typeof i2.CommonModule, typeof TheSeamSegmentedProgressBarComponent], [typeof ProgressCircleComponent, typeof TheSeamSegmentedProgressBarComponent]>;
|
|
35
91
|
static ɵinj: i0.ɵɵInjectorDeclaration<TheSeamProgressModule>;
|
|
36
92
|
}
|
|
37
93
|
|
|
38
|
-
export { ProgressCircleComponent, TheSeamProgressModule, calcDashoffset };
|
|
94
|
+
export { ProgressCircleComponent, TheSeamProgressModule, TheSeamSegmentedProgressBarCellHarness, TheSeamSegmentedProgressBarComponent, TheSeamSegmentedProgressBarHarness, calcDashoffset };
|
|
95
|
+
export type { TheSeamSegmentedProgressBarStep };
|