codexly-ui 0.10.98 → 0.10.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/codexly-ui.mjs +112 -81
- package/fesm2022/codexly-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/codexly-ui.d.ts +4 -3
package/fesm2022/codexly-ui.mjs
CHANGED
|
@@ -2148,9 +2148,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
|
|
|
2148
2148
|
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }] } });
|
|
2149
2149
|
|
|
2150
2150
|
const STEPPER_SIZE_MAP = {
|
|
2151
|
-
sm: { circle: 'w-7 h-7', iconSize: 'xs', label: 'text-xs', desc: 'text-xs', connector: 'h-0.5' },
|
|
2152
|
-
md: { circle: 'w-9 h-9', iconSize: 'sm', label: 'text-sm', desc: 'text-xs', connector: 'h-0.5' },
|
|
2153
|
-
lg: { circle: 'w-11 h-11', iconSize: 'md', label: 'text-sm', desc: 'text-xs', connector: 'h-1' },
|
|
2151
|
+
sm: { circle: 'w-7 h-7', iconSize: 'xs', label: 'text-xs', desc: 'text-xs', connector: 'h-0.5', connectorOffsetH: 'mt-3.5' },
|
|
2152
|
+
md: { circle: 'w-9 h-9', iconSize: 'sm', label: 'text-sm', desc: 'text-xs', connector: 'h-0.5', connectorOffsetH: 'mt-4.5' },
|
|
2153
|
+
lg: { circle: 'w-11 h-11', iconSize: 'md', label: 'text-sm', desc: 'text-xs', connector: 'h-1', connectorOffsetH: 'mt-[1.375rem]' },
|
|
2154
2154
|
};
|
|
2155
2155
|
|
|
2156
2156
|
class ClxStepperComponent {
|
|
@@ -2169,24 +2169,25 @@ class ClxStepperComponent {
|
|
|
2169
2169
|
: 'flex flex-col w-full';
|
|
2170
2170
|
}, ...(ngDevMode ? [{ debugName: "_hostClass" }] : /* istanbul ignore next */ []));
|
|
2171
2171
|
// ── Step wrapper ──────────────────────────────────────────────────────────────
|
|
2172
|
+
// Horizontal: circle-column first (fixed to its own content width), connector fills the
|
|
2173
|
+
// rest of the step's flex-1 share — so the label (inside the circle column) always centers
|
|
2174
|
+
// under its own circle instead of under circle+connector combined.
|
|
2172
2175
|
_stepWrapClass = computed(() => {
|
|
2173
2176
|
const horiz = this.orientation() === 'horizontal';
|
|
2174
2177
|
return horiz
|
|
2175
|
-
? 'flex flex-
|
|
2176
|
-
: 'flex flex-row
|
|
2178
|
+
? 'flex flex-row items-start flex-1 min-w-0'
|
|
2179
|
+
: 'flex flex-row';
|
|
2177
2180
|
}, ...(ngDevMode ? [{ debugName: "_stepWrapClass" }] : /* istanbul ignore next */ []));
|
|
2178
|
-
// ──
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
: 'flex flex-col items-center shrink-0';
|
|
2184
|
-
}, ...(ngDevMode ? [{ debugName: "_axisClass" }] : /* istanbul ignore next */ []));
|
|
2181
|
+
// ── Circle column ──────────────────────────────────────────────────────────────
|
|
2182
|
+
// Horizontal: circle + label stacked, so the label centers directly under the circle
|
|
2183
|
+
// regardless of the connector's flex-1 width next to it.
|
|
2184
|
+
// Vertical: circle + connector stacked, with the label as a separate sibling beside it.
|
|
2185
|
+
_circleColClass = computed(() => 'flex flex-col items-center shrink-0', ...(ngDevMode ? [{ debugName: "_circleColClass" }] : /* istanbul ignore next */ []));
|
|
2185
2186
|
// ── Label wrapper ─────────────────────────────────────────────────────────────
|
|
2186
2187
|
_labelWrapClass = computed(() => {
|
|
2187
2188
|
const horiz = this.orientation() === 'horizontal';
|
|
2188
2189
|
return horiz
|
|
2189
|
-
? 'flex flex-col items-center text-center mt-2 px-1'
|
|
2190
|
+
? 'flex flex-col items-center text-center mt-2 px-1 max-w-[8rem]'
|
|
2190
2191
|
: 'flex flex-col justify-center pb-6 min-w-0';
|
|
2191
2192
|
}, ...(ngDevMode ? [{ debugName: "_labelWrapClass" }] : /* istanbul ignore next */ []));
|
|
2192
2193
|
// ── Circle ────────────────────────────────────────────────────────────────────
|
|
@@ -2205,10 +2206,10 @@ class ClxStepperComponent {
|
|
|
2205
2206
|
_connectorClass(status) {
|
|
2206
2207
|
const t = resolveColor(this._color());
|
|
2207
2208
|
const horiz = this.orientation() === 'horizontal';
|
|
2208
|
-
const
|
|
2209
|
+
const tokens = this._tokens();
|
|
2209
2210
|
const filled = status === 'completed' ? `${t.bg}` : 'bg-clx-border';
|
|
2210
2211
|
return horiz
|
|
2211
|
-
? `flex-1 ${
|
|
2212
|
+
? `flex-1 ${tokens.connector} ${tokens.connectorOffsetH} ${filled} transition-colors duration-300`
|
|
2212
2213
|
: `w-0.5 flex-1 my-1 min-h-[1.5rem] ${filled} transition-colors duration-300`;
|
|
2213
2214
|
}
|
|
2214
2215
|
// ── Label ─────────────────────────────────────────────────────────────────────
|
|
@@ -2227,104 +2228,134 @@ class ClxStepperComponent {
|
|
|
2227
2228
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxStepperComponent, isStandalone: true, selector: "clx-stepper", inputs: { steps: { classPropertyName: "steps", publicName: "steps", isSignal: true, isRequired: true, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_hostClass()" } }, ngImport: i0, template: `
|
|
2228
2229
|
@for (step of steps(); track $index; let last = $last; let i = $index) {
|
|
2229
2230
|
|
|
2230
|
-
<!--
|
|
2231
|
+
<!-- Horizontal: circle+label form one fixed-width column, connector is a separate flex-1
|
|
2232
|
+
track next to it — so the label centers under its own circle, not under circle+connector.
|
|
2233
|
+
Vertical: circle+connector form one column, label sits beside it. -->
|
|
2231
2234
|
<div [class]="_stepWrapClass()">
|
|
2232
2235
|
|
|
2233
|
-
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
@case ('error') {
|
|
2243
|
-
<span clx-icon name="close" [size]="_tokens().iconSize"></span>
|
|
2244
|
-
}
|
|
2245
|
-
@default {
|
|
2246
|
-
@if (step.icon) {
|
|
2247
|
-
<span clx-icon [name]="step.icon" [size]="_tokens().iconSize"></span>
|
|
2248
|
-
} @else {
|
|
2249
|
-
<span [class]="'font-bold leading-none select-none ' + _tokens().label">{{ i + 1 }}</span>
|
|
2250
|
-
}
|
|
2236
|
+
@if (orientation() === 'horizontal') {
|
|
2237
|
+
<div [class]="_circleColClass()">
|
|
2238
|
+
<div [class]="_circleClass(step.status)">
|
|
2239
|
+
<ng-container [ngTemplateOutlet]="circleContent" [ngTemplateOutletContext]="{ step, i }" />
|
|
2240
|
+
</div>
|
|
2241
|
+
<div [class]="_labelWrapClass()">
|
|
2242
|
+
<span [class]="_labelClass(step.status)">{{ step.label }}</span>
|
|
2243
|
+
@if (step.description) {
|
|
2244
|
+
<span [class]="'text-clx-text-subtle ' + _tokens().desc">{{ step.description }}</span>
|
|
2251
2245
|
}
|
|
2252
|
-
|
|
2246
|
+
</div>
|
|
2253
2247
|
</div>
|
|
2254
|
-
|
|
2255
|
-
<!-- Connector -->
|
|
2256
2248
|
@if (!last) {
|
|
2257
2249
|
<div [class]="_connectorClass(step.status)"></div>
|
|
2258
2250
|
}
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2251
|
+
} @else {
|
|
2252
|
+
<div [class]="_circleColClass()">
|
|
2253
|
+
<div [class]="_circleClass(step.status)">
|
|
2254
|
+
<ng-container [ngTemplateOutlet]="circleContent" [ngTemplateOutletContext]="{ step, i }" />
|
|
2255
|
+
</div>
|
|
2256
|
+
@if (!last) {
|
|
2257
|
+
<div [class]="_connectorClass(step.status)"></div>
|
|
2258
|
+
}
|
|
2259
|
+
</div>
|
|
2260
|
+
<div [class]="_labelWrapClass()">
|
|
2261
|
+
<span [class]="_labelClass(step.status)">{{ step.label }}</span>
|
|
2262
|
+
@if (step.description) {
|
|
2263
|
+
<span [class]="'text-clx-text-subtle ' + _tokens().desc">{{ step.description }}</span>
|
|
2264
|
+
}
|
|
2265
|
+
</div>
|
|
2266
|
+
}
|
|
2269
2267
|
|
|
2270
2268
|
</div>
|
|
2271
2269
|
}
|
|
2272
|
-
|
|
2270
|
+
|
|
2271
|
+
<ng-template #circleContent let-step="step" let-i="i">
|
|
2272
|
+
@switch (step.status) {
|
|
2273
|
+
@case ('completed') {
|
|
2274
|
+
<span clx-icon name="check" [size]="_tokens().iconSize"></span>
|
|
2275
|
+
}
|
|
2276
|
+
@case ('error') {
|
|
2277
|
+
<span clx-icon name="close" [size]="_tokens().iconSize"></span>
|
|
2278
|
+
}
|
|
2279
|
+
@default {
|
|
2280
|
+
@if (step.icon) {
|
|
2281
|
+
<span clx-icon [name]="step.icon" [size]="_tokens().iconSize"></span>
|
|
2282
|
+
} @else {
|
|
2283
|
+
<span [class]="'font-bold leading-none select-none ' + _tokens().label">{{ i + 1 }}</span>
|
|
2284
|
+
}
|
|
2285
|
+
}
|
|
2286
|
+
}
|
|
2287
|
+
</ng-template>
|
|
2288
|
+
`, isInline: true, dependencies: [{ kind: "component", type: ClxIconComponent, selector: "span[clx-icon]", inputs: ["name", "size", "color", "fill"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
2273
2289
|
}
|
|
2274
2290
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxStepperComponent, decorators: [{
|
|
2275
2291
|
type: Component,
|
|
2276
2292
|
args: [{
|
|
2277
2293
|
selector: 'clx-stepper',
|
|
2278
2294
|
standalone: true,
|
|
2279
|
-
imports: [ClxIconComponent],
|
|
2295
|
+
imports: [ClxIconComponent, NgTemplateOutlet],
|
|
2280
2296
|
encapsulation: ViewEncapsulation.None,
|
|
2281
2297
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
2282
2298
|
host: { '[class]': '_hostClass()' },
|
|
2283
2299
|
template: `
|
|
2284
2300
|
@for (step of steps(); track $index; let last = $last; let i = $index) {
|
|
2285
2301
|
|
|
2286
|
-
<!--
|
|
2302
|
+
<!-- Horizontal: circle+label form one fixed-width column, connector is a separate flex-1
|
|
2303
|
+
track next to it — so the label centers under its own circle, not under circle+connector.
|
|
2304
|
+
Vertical: circle+connector form one column, label sits beside it. -->
|
|
2287
2305
|
<div [class]="_stepWrapClass()">
|
|
2288
2306
|
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
|
|
2292
|
-
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
@case ('error') {
|
|
2299
|
-
<span clx-icon name="close" [size]="_tokens().iconSize"></span>
|
|
2300
|
-
}
|
|
2301
|
-
@default {
|
|
2302
|
-
@if (step.icon) {
|
|
2303
|
-
<span clx-icon [name]="step.icon" [size]="_tokens().iconSize"></span>
|
|
2304
|
-
} @else {
|
|
2305
|
-
<span [class]="'font-bold leading-none select-none ' + _tokens().label">{{ i + 1 }}</span>
|
|
2306
|
-
}
|
|
2307
|
+
@if (orientation() === 'horizontal') {
|
|
2308
|
+
<div [class]="_circleColClass()">
|
|
2309
|
+
<div [class]="_circleClass(step.status)">
|
|
2310
|
+
<ng-container [ngTemplateOutlet]="circleContent" [ngTemplateOutletContext]="{ step, i }" />
|
|
2311
|
+
</div>
|
|
2312
|
+
<div [class]="_labelWrapClass()">
|
|
2313
|
+
<span [class]="_labelClass(step.status)">{{ step.label }}</span>
|
|
2314
|
+
@if (step.description) {
|
|
2315
|
+
<span [class]="'text-clx-text-subtle ' + _tokens().desc">{{ step.description }}</span>
|
|
2307
2316
|
}
|
|
2308
|
-
|
|
2317
|
+
</div>
|
|
2309
2318
|
</div>
|
|
2310
|
-
|
|
2311
|
-
<!-- Connector -->
|
|
2312
2319
|
@if (!last) {
|
|
2313
2320
|
<div [class]="_connectorClass(step.status)"></div>
|
|
2314
2321
|
}
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
2321
|
-
|
|
2322
|
-
|
|
2323
|
-
|
|
2324
|
-
|
|
2322
|
+
} @else {
|
|
2323
|
+
<div [class]="_circleColClass()">
|
|
2324
|
+
<div [class]="_circleClass(step.status)">
|
|
2325
|
+
<ng-container [ngTemplateOutlet]="circleContent" [ngTemplateOutletContext]="{ step, i }" />
|
|
2326
|
+
</div>
|
|
2327
|
+
@if (!last) {
|
|
2328
|
+
<div [class]="_connectorClass(step.status)"></div>
|
|
2329
|
+
}
|
|
2330
|
+
</div>
|
|
2331
|
+
<div [class]="_labelWrapClass()">
|
|
2332
|
+
<span [class]="_labelClass(step.status)">{{ step.label }}</span>
|
|
2333
|
+
@if (step.description) {
|
|
2334
|
+
<span [class]="'text-clx-text-subtle ' + _tokens().desc">{{ step.description }}</span>
|
|
2335
|
+
}
|
|
2336
|
+
</div>
|
|
2337
|
+
}
|
|
2325
2338
|
|
|
2326
2339
|
</div>
|
|
2327
2340
|
}
|
|
2341
|
+
|
|
2342
|
+
<ng-template #circleContent let-step="step" let-i="i">
|
|
2343
|
+
@switch (step.status) {
|
|
2344
|
+
@case ('completed') {
|
|
2345
|
+
<span clx-icon name="check" [size]="_tokens().iconSize"></span>
|
|
2346
|
+
}
|
|
2347
|
+
@case ('error') {
|
|
2348
|
+
<span clx-icon name="close" [size]="_tokens().iconSize"></span>
|
|
2349
|
+
}
|
|
2350
|
+
@default {
|
|
2351
|
+
@if (step.icon) {
|
|
2352
|
+
<span clx-icon [name]="step.icon" [size]="_tokens().iconSize"></span>
|
|
2353
|
+
} @else {
|
|
2354
|
+
<span [class]="'font-bold leading-none select-none ' + _tokens().label">{{ i + 1 }}</span>
|
|
2355
|
+
}
|
|
2356
|
+
}
|
|
2357
|
+
}
|
|
2358
|
+
</ng-template>
|
|
2328
2359
|
`,
|
|
2329
2360
|
}]
|
|
2330
2361
|
}], propDecorators: { steps: [{ type: i0.Input, args: [{ isSignal: true, alias: "steps", required: true }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
|