@frame-kit/ui-ng 0.2.13 → 0.2.15
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/core/link/README.md +23 -23
- package/fesm2022/frame-kit-ui-ng-forms.mjs +6 -2
- package/fesm2022/frame-kit-ui-ng-forms.mjs.map +1 -1
- package/fesm2022/frame-kit-ui-ng-ui-tabs.mjs +2 -2
- package/fesm2022/frame-kit-ui-ng-ui-tabs.mjs.map +1 -1
- package/package.json +2 -2
- package/ui/card/README.md +9 -9
- package/ui/wizard-dialog/README.md +21 -21
|
@@ -655,11 +655,11 @@ class FkTabListComponent {
|
|
|
655
655
|
this.scrollToActiveTab();
|
|
656
656
|
}
|
|
657
657
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: FkTabListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
658
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: FkTabListComponent, isStandalone: true, selector: "fk-tab-list", inputs: { className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "class": "this.hostClass", "attr.role": "this.role", "attr.aria-orientation": "this.ariaOrientation", "attr.aria-label": "this.hostAriaLabel" } }, queries: [{ propertyName: "scrollStartIconRef", first: true, predicate: FK_TAB_SCROLL_START_ICON, descendants: true, isSignal: true }, { propertyName: "scrollEndIconRef", first: true, predicate: FK_TAB_SCROLL_END_ICON, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (service.scrollable() && service.showScrollButtons()) {\n <button\n class=\"fk-tab-list__scroll-btn\"\n [class.fk-tab-list__scroll-btn--hidden]=\"!canScrollStart()\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n (click)=\"scrollBy(-1)\"\n >\n <ng-content select=\"[fkTabScrollStartIcon]\" />\n @if (!scrollStartIconRef()) {\n <svg\n class=\"fk-tab-list__scroll-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M10 4L6 8l4 4\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n }\n </button>\n}\n\n<div\n class=\"fk-tab-list__scroll-container\"\n #scrollContainer\n (scroll)=\"onScroll()\"\n>\n <ng-content />\n\n @if (showIndicator()) {\n <div\n class=\"fk-tab-list__indicator\"\n [class.fk-tab-list__indicator--hidden]=\"!indicatorState().visible\"\n [ngStyle]=\"indicatorStyles()\"\n ></div>\n }\n</div>\n\n@if (service.scrollable() && service.showScrollButtons()) {\n <button\n class=\"fk-tab-list__scroll-btn\"\n [class.fk-tab-list__scroll-btn--hidden]=\"!canScrollEnd()\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n (click)=\"scrollBy(1)\"\n >\n <ng-content select=\"[fkTabScrollEndIcon]\" />\n @if (!scrollEndIconRef()) {\n <svg\n class=\"fk-tab-list__scroll-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6 4l4 4-4 4\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n }\n </button>\n}\n", styles: [":host{position:relative;display:flex;align-items:center}.fk-tab-list__scroll-container{display:flex;position:relative;flex:1;min-width:0}.fk-tab-list__indicator{position:absolute;bottom:0;left:0;height:var(--fk-tabs-indicator-height, 2px);background:var(--fk-tabs-indicator-color, var(--fk-color-primary, #0a84ff));border-radius:var(--fk-tabs-indicator-radius, var(--fk-radius-full, 9999px));transition:transform .18s ease,width .18s ease;will-change:transform,width;pointer-events:none}.fk-tab-list__indicator--hidden{opacity:0;transition:none}.fk-tab-list__scroll-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;padding:var(--fk-tabs-scroll-btn-padding, var(--fk-rhythm-2, .5rem));border:none;background:var(--fk-tabs-scroll-btn-bg, var(--fk-color-surface, #ffffff));color:var(--fk-tabs-scroll-btn-color, var(--fk-color-text-muted, #64748b));cursor:pointer}.fk-tab-list__scroll-btn:hover{color:var(--fk-tabs-scroll-btn-color-hover, var(--fk-color-text, #1e293b))}.fk-tab-list__scroll-btn:focus-visible{outline:none;box-shadow:var(--fk-focus-ring, 0 0 0 3px rgba(10, 132, 255, .18))}.fk-tab-list__scroll-btn--hidden{visibility:hidden}.fk-tab-list__scroll-icon{width:1rem;height:1rem}:host-context(.fk-tabs--horizontal) .fk-tab-list__scroll-container{overflow-x:auto;scrollbar-width:none}:host-context(.fk-tabs--horizontal) .fk-tab-list__scroll-container::-webkit-scrollbar{display:none}:host-context(.fk-tabs--vertical){flex-direction:column}:host-context(.fk-tabs--vertical) .fk-tab-list__scroll-container{flex-direction:column;overflow-y:auto;scrollbar-width:none}:host-context(.fk-tabs--vertical) .fk-tab-list__scroll-container::-webkit-scrollbar{display:none}:host-context(.fk-tabs--vertical) .fk-tab-list__indicator{bottom:auto;left:0;top:0;width:var(--fk-tabs-indicator-height, 2px);height:auto;transition:transform .18s ease,height .18s ease;will-change:transform,height}:host-context(.fk-tabs--underline):host-context(.fk-tabs--horizontal){border-bottom:var(--fk-tabs-border-width, var(--fk-border-width, 1px)) solid var(--fk-tabs-border-color, var(--fk-color-border, #d9e2ee))}:host-context(.fk-tabs--underline):host-context(.fk-tabs--vertical){border-right:var(--fk-tabs-border-width, var(--fk-border-width, 1px)) solid var(--fk-tabs-border-color, var(--fk-color-border, #d9e2ee))}:host-context(.fk-tabs--contained) .fk-tab-list__scroll-container{background:var(--fk-tabs-contained-bg, var(--fk-color-surface-muted, #f1f5f9));border:var(--fk-tabs-contained-border, none);border-radius:var(--fk-tabs-contained-radius, var(--fk-radius-md, .5rem));padding:var(--fk-tabs-contained-padding, var(--fk-rhythm-1, .25rem))}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
658
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: FkTabListComponent, isStandalone: true, selector: "fk-tab-list", inputs: { className: { classPropertyName: "className", publicName: "className", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "keydown": "onKeydown($event)" }, properties: { "class": "this.hostClass", "attr.role": "this.role", "attr.aria-orientation": "this.ariaOrientation", "attr.aria-label": "this.hostAriaLabel" } }, queries: [{ propertyName: "scrollStartIconRef", first: true, predicate: FK_TAB_SCROLL_START_ICON, descendants: true, isSignal: true }, { propertyName: "scrollEndIconRef", first: true, predicate: FK_TAB_SCROLL_END_ICON, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (service.scrollable() && service.showScrollButtons()) {\n <button\n class=\"fk-tab-list__scroll-btn\"\n [class.fk-tab-list__scroll-btn--hidden]=\"!canScrollStart()\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n (click)=\"scrollBy(-1)\"\n >\n <ng-content select=\"[fkTabScrollStartIcon]\" />\n @if (!scrollStartIconRef()) {\n <svg\n class=\"fk-tab-list__scroll-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M10 4L6 8l4 4\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n }\n </button>\n}\n\n<div\n class=\"fk-tab-list__scroll-container\"\n #scrollContainer\n (scroll)=\"onScroll()\"\n>\n <ng-content />\n\n @if (showIndicator()) {\n <div\n class=\"fk-tab-list__indicator\"\n [class.fk-tab-list__indicator--hidden]=\"!indicatorState().visible\"\n [ngStyle]=\"indicatorStyles()\"\n ></div>\n }\n</div>\n\n@if (service.scrollable() && service.showScrollButtons()) {\n <button\n class=\"fk-tab-list__scroll-btn\"\n [class.fk-tab-list__scroll-btn--hidden]=\"!canScrollEnd()\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n (click)=\"scrollBy(1)\"\n >\n <ng-content select=\"[fkTabScrollEndIcon]\" />\n @if (!scrollEndIconRef()) {\n <svg\n class=\"fk-tab-list__scroll-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6 4l4 4-4 4\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n }\n </button>\n}\n", styles: [":host{position:relative;display:flex;align-items:center}.fk-tab-list__scroll-container{display:flex;position:relative;flex:1;min-width:0}.fk-tab-list__indicator{position:absolute;bottom:0;left:0;height:var(--fk-tabs-indicator-height, 2px);background:var(--fk-tabs-indicator-color, var(--fk-color-primary, #0a84ff));border-radius:var(--fk-tabs-indicator-radius, var(--fk-radius-full, 9999px));transition:transform .18s ease,width .18s ease;will-change:transform,width;pointer-events:none}.fk-tab-list__indicator--hidden{opacity:0;transition:none}.fk-tab-list__scroll-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;padding:var(--fk-tabs-scroll-btn-padding, var(--fk-rhythm-2, .5rem));border:none;background:var(--fk-tabs-scroll-btn-bg, var(--fk-color-surface, #ffffff));color:var(--fk-tabs-scroll-btn-color, var(--fk-color-text-muted, #64748b));cursor:pointer}.fk-tab-list__scroll-btn:hover{color:var(--fk-tabs-scroll-btn-color-hover, var(--fk-color-text, #1e293b))}.fk-tab-list__scroll-btn:focus-visible{outline:none;box-shadow:var(--fk-focus-ring, 0 0 0 3px rgba(10, 132, 255, .18))}.fk-tab-list__scroll-btn--hidden{visibility:hidden}.fk-tab-list__scroll-icon{width:1rem;height:1rem}:host-context(.fk-tabs--horizontal) .fk-tab-list__scroll-container{overflow-x:auto;scrollbar-width:none;padding-block:var(--fk-focus-ring-width, 3px);margin-block:calc(var(--fk-focus-ring-width, 3px) * -1)}:host-context(.fk-tabs--horizontal) .fk-tab-list__scroll-container::-webkit-scrollbar{display:none}:host-context(.fk-tabs--vertical){flex-direction:column}:host-context(.fk-tabs--vertical) .fk-tab-list__scroll-container{flex-direction:column;overflow-y:auto;scrollbar-width:none}:host-context(.fk-tabs--vertical) .fk-tab-list__scroll-container::-webkit-scrollbar{display:none}:host-context(.fk-tabs--vertical) .fk-tab-list__indicator{bottom:auto;left:0;top:0;width:var(--fk-tabs-indicator-height, 2px);height:auto;transition:transform .18s ease,height .18s ease;will-change:transform,height}:host-context(.fk-tabs--underline):host-context(.fk-tabs--horizontal){border-bottom:var(--fk-tabs-border-width, var(--fk-border-width, 1px)) solid var(--fk-tabs-border-color, var(--fk-color-border, #d9e2ee))}:host-context(.fk-tabs--underline):host-context(.fk-tabs--vertical){border-right:var(--fk-tabs-border-width, var(--fk-border-width, 1px)) solid var(--fk-tabs-border-color, var(--fk-color-border, #d9e2ee))}:host-context(.fk-tabs--contained) .fk-tab-list__scroll-container{background:var(--fk-tabs-contained-bg, var(--fk-color-surface-muted, #f1f5f9));border:var(--fk-tabs-contained-border, none);border-radius:var(--fk-tabs-contained-radius, var(--fk-radius-md, .5rem));padding:var(--fk-tabs-contained-padding, var(--fk-rhythm-1, .25rem))}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
659
659
|
}
|
|
660
660
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: FkTabListComponent, decorators: [{
|
|
661
661
|
type: Component,
|
|
662
|
-
args: [{ selector: 'fk-tab-list', standalone: true, imports: [NgStyle], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (service.scrollable() && service.showScrollButtons()) {\n <button\n class=\"fk-tab-list__scroll-btn\"\n [class.fk-tab-list__scroll-btn--hidden]=\"!canScrollStart()\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n (click)=\"scrollBy(-1)\"\n >\n <ng-content select=\"[fkTabScrollStartIcon]\" />\n @if (!scrollStartIconRef()) {\n <svg\n class=\"fk-tab-list__scroll-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M10 4L6 8l4 4\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n }\n </button>\n}\n\n<div\n class=\"fk-tab-list__scroll-container\"\n #scrollContainer\n (scroll)=\"onScroll()\"\n>\n <ng-content />\n\n @if (showIndicator()) {\n <div\n class=\"fk-tab-list__indicator\"\n [class.fk-tab-list__indicator--hidden]=\"!indicatorState().visible\"\n [ngStyle]=\"indicatorStyles()\"\n ></div>\n }\n</div>\n\n@if (service.scrollable() && service.showScrollButtons()) {\n <button\n class=\"fk-tab-list__scroll-btn\"\n [class.fk-tab-list__scroll-btn--hidden]=\"!canScrollEnd()\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n (click)=\"scrollBy(1)\"\n >\n <ng-content select=\"[fkTabScrollEndIcon]\" />\n @if (!scrollEndIconRef()) {\n <svg\n class=\"fk-tab-list__scroll-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6 4l4 4-4 4\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n }\n </button>\n}\n", styles: [":host{position:relative;display:flex;align-items:center}.fk-tab-list__scroll-container{display:flex;position:relative;flex:1;min-width:0}.fk-tab-list__indicator{position:absolute;bottom:0;left:0;height:var(--fk-tabs-indicator-height, 2px);background:var(--fk-tabs-indicator-color, var(--fk-color-primary, #0a84ff));border-radius:var(--fk-tabs-indicator-radius, var(--fk-radius-full, 9999px));transition:transform .18s ease,width .18s ease;will-change:transform,width;pointer-events:none}.fk-tab-list__indicator--hidden{opacity:0;transition:none}.fk-tab-list__scroll-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;padding:var(--fk-tabs-scroll-btn-padding, var(--fk-rhythm-2, .5rem));border:none;background:var(--fk-tabs-scroll-btn-bg, var(--fk-color-surface, #ffffff));color:var(--fk-tabs-scroll-btn-color, var(--fk-color-text-muted, #64748b));cursor:pointer}.fk-tab-list__scroll-btn:hover{color:var(--fk-tabs-scroll-btn-color-hover, var(--fk-color-text, #1e293b))}.fk-tab-list__scroll-btn:focus-visible{outline:none;box-shadow:var(--fk-focus-ring, 0 0 0 3px rgba(10, 132, 255, .18))}.fk-tab-list__scroll-btn--hidden{visibility:hidden}.fk-tab-list__scroll-icon{width:1rem;height:1rem}:host-context(.fk-tabs--horizontal) .fk-tab-list__scroll-container{overflow-x:auto;scrollbar-width:none}:host-context(.fk-tabs--horizontal) .fk-tab-list__scroll-container::-webkit-scrollbar{display:none}:host-context(.fk-tabs--vertical){flex-direction:column}:host-context(.fk-tabs--vertical) .fk-tab-list__scroll-container{flex-direction:column;overflow-y:auto;scrollbar-width:none}:host-context(.fk-tabs--vertical) .fk-tab-list__scroll-container::-webkit-scrollbar{display:none}:host-context(.fk-tabs--vertical) .fk-tab-list__indicator{bottom:auto;left:0;top:0;width:var(--fk-tabs-indicator-height, 2px);height:auto;transition:transform .18s ease,height .18s ease;will-change:transform,height}:host-context(.fk-tabs--underline):host-context(.fk-tabs--horizontal){border-bottom:var(--fk-tabs-border-width, var(--fk-border-width, 1px)) solid var(--fk-tabs-border-color, var(--fk-color-border, #d9e2ee))}:host-context(.fk-tabs--underline):host-context(.fk-tabs--vertical){border-right:var(--fk-tabs-border-width, var(--fk-border-width, 1px)) solid var(--fk-tabs-border-color, var(--fk-color-border, #d9e2ee))}:host-context(.fk-tabs--contained) .fk-tab-list__scroll-container{background:var(--fk-tabs-contained-bg, var(--fk-color-surface-muted, #f1f5f9));border:var(--fk-tabs-contained-border, none);border-radius:var(--fk-tabs-contained-radius, var(--fk-radius-md, .5rem));padding:var(--fk-tabs-contained-padding, var(--fk-rhythm-1, .25rem))}\n"] }]
|
|
662
|
+
args: [{ selector: 'fk-tab-list', standalone: true, imports: [NgStyle], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (service.scrollable() && service.showScrollButtons()) {\n <button\n class=\"fk-tab-list__scroll-btn\"\n [class.fk-tab-list__scroll-btn--hidden]=\"!canScrollStart()\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n (click)=\"scrollBy(-1)\"\n >\n <ng-content select=\"[fkTabScrollStartIcon]\" />\n @if (!scrollStartIconRef()) {\n <svg\n class=\"fk-tab-list__scroll-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M10 4L6 8l4 4\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n }\n </button>\n}\n\n<div\n class=\"fk-tab-list__scroll-container\"\n #scrollContainer\n (scroll)=\"onScroll()\"\n>\n <ng-content />\n\n @if (showIndicator()) {\n <div\n class=\"fk-tab-list__indicator\"\n [class.fk-tab-list__indicator--hidden]=\"!indicatorState().visible\"\n [ngStyle]=\"indicatorStyles()\"\n ></div>\n }\n</div>\n\n@if (service.scrollable() && service.showScrollButtons()) {\n <button\n class=\"fk-tab-list__scroll-btn\"\n [class.fk-tab-list__scroll-btn--hidden]=\"!canScrollEnd()\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n (click)=\"scrollBy(1)\"\n >\n <ng-content select=\"[fkTabScrollEndIcon]\" />\n @if (!scrollEndIconRef()) {\n <svg\n class=\"fk-tab-list__scroll-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6 4l4 4-4 4\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n }\n </button>\n}\n", styles: [":host{position:relative;display:flex;align-items:center}.fk-tab-list__scroll-container{display:flex;position:relative;flex:1;min-width:0}.fk-tab-list__indicator{position:absolute;bottom:0;left:0;height:var(--fk-tabs-indicator-height, 2px);background:var(--fk-tabs-indicator-color, var(--fk-color-primary, #0a84ff));border-radius:var(--fk-tabs-indicator-radius, var(--fk-radius-full, 9999px));transition:transform .18s ease,width .18s ease;will-change:transform,width;pointer-events:none}.fk-tab-list__indicator--hidden{opacity:0;transition:none}.fk-tab-list__scroll-btn{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;padding:var(--fk-tabs-scroll-btn-padding, var(--fk-rhythm-2, .5rem));border:none;background:var(--fk-tabs-scroll-btn-bg, var(--fk-color-surface, #ffffff));color:var(--fk-tabs-scroll-btn-color, var(--fk-color-text-muted, #64748b));cursor:pointer}.fk-tab-list__scroll-btn:hover{color:var(--fk-tabs-scroll-btn-color-hover, var(--fk-color-text, #1e293b))}.fk-tab-list__scroll-btn:focus-visible{outline:none;box-shadow:var(--fk-focus-ring, 0 0 0 3px rgba(10, 132, 255, .18))}.fk-tab-list__scroll-btn--hidden{visibility:hidden}.fk-tab-list__scroll-icon{width:1rem;height:1rem}:host-context(.fk-tabs--horizontal) .fk-tab-list__scroll-container{overflow-x:auto;scrollbar-width:none;padding-block:var(--fk-focus-ring-width, 3px);margin-block:calc(var(--fk-focus-ring-width, 3px) * -1)}:host-context(.fk-tabs--horizontal) .fk-tab-list__scroll-container::-webkit-scrollbar{display:none}:host-context(.fk-tabs--vertical){flex-direction:column}:host-context(.fk-tabs--vertical) .fk-tab-list__scroll-container{flex-direction:column;overflow-y:auto;scrollbar-width:none}:host-context(.fk-tabs--vertical) .fk-tab-list__scroll-container::-webkit-scrollbar{display:none}:host-context(.fk-tabs--vertical) .fk-tab-list__indicator{bottom:auto;left:0;top:0;width:var(--fk-tabs-indicator-height, 2px);height:auto;transition:transform .18s ease,height .18s ease;will-change:transform,height}:host-context(.fk-tabs--underline):host-context(.fk-tabs--horizontal){border-bottom:var(--fk-tabs-border-width, var(--fk-border-width, 1px)) solid var(--fk-tabs-border-color, var(--fk-color-border, #d9e2ee))}:host-context(.fk-tabs--underline):host-context(.fk-tabs--vertical){border-right:var(--fk-tabs-border-width, var(--fk-border-width, 1px)) solid var(--fk-tabs-border-color, var(--fk-color-border, #d9e2ee))}:host-context(.fk-tabs--contained) .fk-tab-list__scroll-container{background:var(--fk-tabs-contained-bg, var(--fk-color-surface-muted, #f1f5f9));border:var(--fk-tabs-contained-border, none);border-radius:var(--fk-tabs-contained-radius, var(--fk-radius-md, .5rem));padding:var(--fk-tabs-contained-padding, var(--fk-rhythm-1, .25rem))}\n"] }]
|
|
663
663
|
}], ctorParameters: () => [], propDecorators: { className: [{ type: i0.Input, args: [{ isSignal: true, alias: "className", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], scrollStartIconRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => FK_TAB_SCROLL_START_ICON), { isSignal: true }] }], scrollEndIconRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => FK_TAB_SCROLL_END_ICON), { isSignal: true }] }], scrollContainer: [{ type: i0.ViewChild, args: ['scrollContainer', { isSignal: true }] }], hostClass: [{
|
|
664
664
|
type: HostBinding,
|
|
665
665
|
args: ['class']
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frame-kit-ui-ng-ui-tabs.mjs","sources":["../../../../packages/ui-ng/ui/tabs/tab-icon.directive.ts","../../../../packages/ui-ng/ui/tabs/tabs.service.ts","../../../../packages/ui-ng/ui/tabs/tab.component.ts","../../../../packages/ui-ng/ui/tabs/tab.component.html","../../../../packages/ui-ng/ui/tabs/tab-list.component.ts","../../../../packages/ui-ng/ui/tabs/tab-list.component.html","../../../../packages/ui-ng/ui/tabs/tab-panel.component.ts","../../../../packages/ui-ng/ui/tabs/tabs.component.ts","../../../../packages/ui-ng/ui/tabs/frame-kit-ui-ng-ui-tabs.ts"],"sourcesContent":["import { Directive, InjectionToken } from '@angular/core';\n\nexport const FK_TAB_CLOSE_ICON = new InjectionToken<FkTabCloseIconDirective>(\n 'FK_TAB_CLOSE_ICON',\n);\n\nexport const FK_TAB_SCROLL_START_ICON =\n new InjectionToken<FkTabScrollStartIconDirective>('FK_TAB_SCROLL_START_ICON');\n\nexport const FK_TAB_SCROLL_END_ICON =\n new InjectionToken<FkTabScrollEndIconDirective>('FK_TAB_SCROLL_END_ICON');\n\n@Directive({\n selector: '[fkTabCloseIcon]',\n standalone: true,\n providers: [\n { provide: FK_TAB_CLOSE_ICON, useExisting: FkTabCloseIconDirective },\n ],\n host: {\n 'aria-hidden': 'true',\n },\n})\nexport class FkTabCloseIconDirective {}\n\n@Directive({\n selector: '[fkTabScrollStartIcon]',\n standalone: true,\n providers: [\n {\n provide: FK_TAB_SCROLL_START_ICON,\n useExisting: FkTabScrollStartIconDirective,\n },\n ],\n host: {\n 'aria-hidden': 'true',\n },\n})\nexport class FkTabScrollStartIconDirective {}\n\n@Directive({\n selector: '[fkTabScrollEndIcon]',\n standalone: true,\n providers: [\n {\n provide: FK_TAB_SCROLL_END_ICON,\n useExisting: FkTabScrollEndIconDirective,\n },\n ],\n host: {\n 'aria-hidden': 'true',\n },\n})\nexport class FkTabScrollEndIconDirective {}\n","import { computed, Injectable, signal } from '@angular/core';\n\nimport type {\n FkPanelRegistration,\n FkTabChangeEvent,\n FkTabRegistration,\n FkTabsActivationMode,\n FkTabsOrientation,\n FkTabsVariant,\n} from './tabs.types';\n\n@Injectable()\nexport class TabsService {\n // ===== ID GENERATION =====\n private tabIdCounter = 0;\n\n createTabIds(value: string): { tabId: string; panelId: string } {\n const key = value || String(this.tabIdCounter++);\n\n return {\n tabId: `fk-tab-${key}`,\n panelId: `fk-tabpanel-${key}`,\n };\n }\n\n // ===== CONFIGURATION (linked to parent component's input signals) =====\n // These are callbacks to the parent component's input signals,\n // set during the parent component's constructor.\n // This avoids effects and eliminates ExpressionChangedAfterItHasBeenCheckedError.\n private _orientationFn: () => FkTabsOrientation = () => 'horizontal';\n private _activationModeFn: () => FkTabsActivationMode = () => 'automatic';\n private _variantFn: () => FkTabsVariant = () => 'underline';\n private _lazyFn: () => boolean = () => false;\n private _keepMountedFn: () => boolean = () => true;\n private _scrollableFn: () => boolean = () => false;\n private _showScrollButtonsFn: () => boolean = () => false;\n\n readonly orientation = computed(() => this._orientationFn());\n readonly activationMode = computed(() => this._activationModeFn());\n readonly variant = computed(() => this._variantFn());\n readonly lazy = computed(() => this._lazyFn());\n readonly keepMounted = computed(() => this._keepMountedFn());\n readonly scrollable = computed(() => this._scrollableFn());\n readonly showScrollButtons = computed(() => this._showScrollButtonsFn());\n\n setConfig(config: {\n orientation: () => FkTabsOrientation;\n activationMode: () => FkTabsActivationMode;\n variant: () => FkTabsVariant;\n lazy: () => boolean;\n keepMounted: () => boolean;\n scrollable: () => boolean;\n showScrollButtons: () => boolean;\n }): void {\n this._orientationFn = config.orientation;\n this._activationModeFn = config.activationMode;\n this._variantFn = config.variant;\n this._lazyFn = config.lazy;\n this._keepMountedFn = config.keepMounted;\n this._scrollableFn = config.scrollable;\n this._showScrollButtonsFn = config.showScrollButtons;\n }\n\n // ===== CONTROLLED VALUE (linked to parent's value input) =====\n private _controlledValueFn: (() => string | undefined) | null = null;\n\n setControlledValue(fn: () => string | undefined): void {\n this._controlledValueFn = fn;\n }\n\n // Active value resolves controlled value first, then internal state\n private readonly _internalActiveValue = signal<string | null>(null);\n readonly activeValue = computed(() => {\n const controlled = this._controlledValueFn?.();\n\n if (controlled !== undefined) {\n return controlled;\n }\n\n return this._internalActiveValue();\n });\n\n // Writable proxy for setting active value\n setActiveValue(value: string | null): void {\n this._internalActiveValue.set(value);\n }\n readonly focusedValue = signal<string | null>(null);\n readonly tabs = signal<FkTabRegistration[]>([]);\n readonly panels = signal<FkPanelRegistration[]>([]);\n readonly activatedPanels = signal<Set<string>>(new Set());\n\n // ===== COMPUTED =====\n readonly enabledTabs = computed(() => this.tabs().filter((t) => !t.disabled));\n\n readonly activeTab = computed(() =>\n this.tabs().find((t) => t.value === this.activeValue()),\n );\n\n // ===== CALLBACKS (set by fk-tabs root) =====\n onTabChange: ((event: FkTabChangeEvent) => void) | null = null;\n onValueChange: ((value: string) => void) | null = null;\n onTabClose: ((value: string) => void) | null = null;\n\n // ===== REGISTRATION =====\n\n registerTab(reg: FkTabRegistration): void {\n this.tabs.update((list) => {\n const existing = list.findIndex((t) => t.value === reg.value);\n\n if (existing >= 0) {\n const updated = [...list];\n\n updated[existing] = reg;\n\n return updated;\n }\n\n return [...list, reg];\n });\n }\n\n unregisterTab(value: string): void {\n const wasActive = this.activeValue() === value;\n\n this.tabs.update((list) => list.filter((t) => t.value !== value));\n\n if (wasActive) {\n this.fallbackSelect();\n }\n }\n\n registerPanel(reg: FkPanelRegistration): void {\n this.panels.update((list) => {\n const existing = list.findIndex((p) => p.value === reg.value);\n\n if (existing >= 0) {\n const updated = [...list];\n\n updated[existing] = reg;\n\n return updated;\n }\n\n return [...list, reg];\n });\n }\n\n unregisterPanel(value: string): void {\n this.panels.update((list) => list.filter((p) => p.value !== value));\n }\n\n // ===== SELECTION =====\n\n selectTab(value: string): void {\n const tab = this.tabs().find((t) => t.value === value);\n\n if (tab && tab.disabled) {\n return;\n }\n\n const previousValue = this.activeValue();\n\n if (previousValue === value) {\n return;\n }\n\n this._internalActiveValue.set(value);\n this.activatedPanels.update((set) => {\n const next = new Set(set);\n\n next.add(value);\n\n return next;\n });\n\n this.onValueChange?.(value);\n this.onTabChange?.({ previousValue, value });\n }\n\n // ===== FOCUS =====\n\n focusTab(value: string): void {\n this.focusedValue.set(value);\n\n const tab = this.tabs().find((t) => t.value === value);\n\n if (tab) {\n tab.element.focus();\n }\n\n if (this.activationMode() === 'automatic') {\n this.selectTab(value);\n }\n }\n\n // ===== KEYBOARD NAVIGATION =====\n\n handleKeydown(event: KeyboardEvent): void {\n const orientation = this.orientation();\n const enabled = this.enabledTabs();\n\n if (enabled.length === 0) {\n return;\n }\n\n const currentValue = this.focusedValue() ?? this.activeValue();\n const currentIndex = enabled.findIndex((t) => t.value === currentValue);\n\n let targetIndex: number | null = null;\n\n switch (event.key) {\n case 'ArrowRight':\n if (orientation === 'horizontal') {\n targetIndex = this.getNextIndex(currentIndex, 1, enabled.length);\n event.preventDefault();\n }\n\n break;\n\n case 'ArrowLeft':\n if (orientation === 'horizontal') {\n targetIndex = this.getNextIndex(currentIndex, -1, enabled.length);\n event.preventDefault();\n }\n\n break;\n\n case 'ArrowDown':\n if (orientation === 'vertical') {\n targetIndex = this.getNextIndex(currentIndex, 1, enabled.length);\n event.preventDefault();\n }\n\n break;\n\n case 'ArrowUp':\n if (orientation === 'vertical') {\n targetIndex = this.getNextIndex(currentIndex, -1, enabled.length);\n event.preventDefault();\n }\n\n break;\n\n case 'Home':\n targetIndex = 0;\n\n event.preventDefault();\n\n break;\n\n case 'End':\n targetIndex = enabled.length - 1;\n\n event.preventDefault();\n\n break;\n\n case 'Enter':\n case ' ':\n if (this.activationMode() === 'manual' && currentValue) {\n this.selectTab(currentValue);\n\n event.preventDefault();\n }\n\n break;\n }\n\n if (targetIndex !== null && enabled[targetIndex]) {\n this.focusTab(enabled[targetIndex].value);\n }\n }\n\n // ===== FALLBACK =====\n\n fallbackSelect(): void {\n const enabled = this.enabledTabs();\n\n if (enabled.length > 0) {\n this.selectTab(enabled[0].value);\n } else {\n this._internalActiveValue.set(null);\n }\n }\n\n // ===== HELPERS =====\n\n private getNextIndex(\n current: number,\n direction: number,\n length: number,\n ): number {\n if (current < 0) {\n return 0;\n }\n\n return (current + direction + length) % length;\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n input,\n OnChanges,\n OnInit,\n signal,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\n\nimport { FK_TAB_CLOSE_ICON } from './tab-icon.directive';\nimport { TabsService } from './tabs.service';\n\n@Component({\n selector: 'fk-tab',\n standalone: true,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './tab.component.html',\n styleUrl: './tab.component.scss',\n})\nexport class FkTabComponent implements OnInit, OnChanges {\n private readonly service = inject(TabsService);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n\n // ===== BASE PROPS =====\n readonly className = input<string>('');\n\n // ===== INPUTS =====\n /** Unique value that identifies this tab and links it to its `fk-tab-panel`. */\n readonly value = input.required<string>();\n /** When true, the tab is non-interactive and cannot be selected. */\n readonly disabled = input(false);\n /** When true, renders a close button on the tab trigger. */\n readonly closable = input(false);\n /** Optional badge content (string or number) rendered in the top-right corner of the trigger. */\n readonly badge = input<string | number | undefined>(undefined);\n /** Optional icon — either an icon name string or a `TemplateRef` — shown before the label. */\n readonly icon = input<TemplateRef<unknown> | string | undefined>(undefined);\n\n // ===== CONTENT CHILDREN =====\n readonly closeIconRef = contentChild(FK_TAB_CLOSE_ICON);\n\n // ===== GENERATED IDS =====\n readonly tabId = signal('');\n readonly panelId = signal('');\n\n // ===== COMPUTED =====\n readonly isActive = computed(\n () => this.service.activeValue() === this.value(),\n );\n\n readonly classes = computed(() => {\n return [\n 'fk-tab',\n this.isActive() ? 'fk-tab--active' : '',\n this.disabled() ? 'fk-tab--disabled' : '',\n this.className(),\n ]\n .filter(Boolean)\n .join(' ');\n });\n\n // ===== HOST BINDINGS =====\n\n @HostBinding('class')\n get hostClass() {\n return this.classes();\n }\n\n @HostBinding('attr.role')\n readonly role = 'tab';\n\n @HostBinding('id')\n get hostId() {\n return this.tabId();\n }\n\n @HostBinding('attr.aria-selected')\n get ariaSelected() {\n return this.isActive();\n }\n\n @HostBinding('attr.aria-controls')\n get ariaControls() {\n return this.panelId();\n }\n\n @HostBinding('attr.tabindex')\n get tabIndex() {\n return this.isActive() ? 0 : -1;\n }\n\n @HostBinding('attr.aria-disabled')\n get ariaDisabled() {\n return this.disabled() || null;\n }\n\n // ===== HOST LISTENERS =====\n\n @HostListener('click')\n onClick(): void {\n if (!this.disabled()) {\n this.service.selectTab(this.value());\n }\n }\n\n @HostListener('focus')\n onFocus(): void {\n this.service.focusedValue.set(this.value());\n }\n\n private initialized = false;\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.service.unregisterTab(this.value());\n });\n }\n\n ngOnInit(): void {\n const val = this.value();\n const dis = this.disabled();\n const ids = this.service.createTabIds(val);\n\n this.tabId.set(ids.tabId);\n this.panelId.set(ids.panelId);\n\n this.service.registerTab({\n value: val,\n disabled: dis,\n element: this.elementRef.nativeElement,\n tabId: ids.tabId,\n panelId: ids.panelId,\n });\n\n // Auto-select first non-disabled tab\n if (this.service.activeValue() === null && !dis) {\n this.service.setActiveValue(val);\n this.service.activatedPanels.update((set) => {\n const next = new Set(set);\n\n next.add(val);\n\n return next;\n });\n }\n\n this.initialized = true;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.initialized) {\n return;\n }\n\n // Re-register when disabled state changes\n if ('disabled' in changes) {\n const val = this.value();\n const ids = this.service.createTabIds(val);\n\n this.service.registerTab({\n value: val,\n disabled: this.disabled(),\n element: this.elementRef.nativeElement,\n tabId: ids.tabId,\n panelId: ids.panelId,\n });\n }\n }\n\n // ===== TEMPLATE HELPERS =====\n\n isTemplateRef(val: unknown): val is TemplateRef<unknown> {\n return val instanceof TemplateRef;\n }\n\n onClose(event: MouseEvent): void {\n event.stopPropagation();\n\n this.service.onTabClose?.(this.value());\n }\n}\n","@if (icon(); as iconValue) {\n <span class=\"fk-tab__icon\">\n @if (isTemplateRef(iconValue)) {\n <ng-container *ngTemplateOutlet=\"iconValue\" />\n } @else {\n {{ iconValue }}\n }\n </span>\n}\n\n<span class=\"fk-tab__label\">\n <ng-content />\n</span>\n\n@if (badge() !== undefined) {\n <span class=\"fk-tab__badge\">{{ badge() }}</span>\n}\n\n@if (closable()) {\n <button\n class=\"fk-tab__close\"\n type=\"button\"\n (click)=\"onClose($event)\"\n [attr.aria-label]=\"'Close ' + value()\"\n tabindex=\"-1\"\n >\n <ng-content select=\"[fkTabCloseIcon]\" />\n @if (!closeIconRef()) {\n <svg\n class=\"fk-tab__close-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M4.5 4.5l7 7m0-7l-7 7\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n }\n </button>\n}\n","import { isPlatformBrowser, NgStyle } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n input,\n NgZone,\n PLATFORM_ID,\n signal,\n viewChild,\n} from '@angular/core';\n\nimport {\n FK_TAB_SCROLL_END_ICON,\n FK_TAB_SCROLL_START_ICON,\n} from './tab-icon.directive';\nimport { TabsService } from './tabs.service';\nimport type { FkTabIndicatorState } from './tabs.types';\n\n@Component({\n selector: 'fk-tab-list',\n standalone: true,\n imports: [NgStyle],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './tab-list.component.html',\n styleUrl: './tab-list.component.scss',\n})\nexport class FkTabListComponent implements AfterViewInit {\n readonly service = inject(TabsService);\n private readonly ngZone = inject(NgZone);\n private readonly destroyRef = inject(DestroyRef);\n private readonly platformId = inject(PLATFORM_ID);\n\n // ===== BASE PROPS =====\n readonly className = input<string>('');\n /** Accessible label for the `tablist` role element. */\n readonly ariaLabel = input<string | null>(null);\n\n // ===== CONTENT CHILDREN =====\n readonly scrollStartIconRef = contentChild(FK_TAB_SCROLL_START_ICON);\n readonly scrollEndIconRef = contentChild(FK_TAB_SCROLL_END_ICON);\n\n // ===== VIEW CHILDREN =====\n readonly scrollContainer =\n viewChild<ElementRef<HTMLElement>>('scrollContainer');\n\n // ===== INDICATOR STATE =====\n readonly indicatorState = signal<FkTabIndicatorState>(\n {\n visible: false,\n offset: 0,\n size: 0,\n },\n {\n equal: (a, b) =>\n a.visible === b.visible && a.offset === b.offset && a.size === b.size,\n },\n );\n\n // ===== SCROLL STATE =====\n readonly canScrollStart = signal(false);\n readonly canScrollEnd = signal(false);\n\n // ===== HOST CLASS =====\n readonly classes = computed(() => {\n return ['fk-tab-list', this.className()].filter(Boolean).join(' ');\n });\n\n @HostBinding('class')\n get hostClass() {\n return this.classes();\n }\n\n @HostBinding('attr.role')\n readonly role = 'tablist';\n\n @HostBinding('attr.aria-orientation')\n get ariaOrientation() {\n return this.service.orientation();\n }\n\n @HostBinding('attr.aria-label')\n get hostAriaLabel() {\n return this.ariaLabel();\n }\n\n // ===== INDICATOR STYLES =====\n readonly indicatorStyles = computed(() => {\n const state = this.indicatorState();\n const orientation = this.service.orientation();\n\n if (!state.visible) {\n return { opacity: '0' };\n }\n\n if (orientation === 'vertical') {\n return {\n opacity: '1',\n height: `${state.size}px`,\n transform: `translateY(${state.offset}px)`,\n };\n }\n\n return {\n opacity: '1',\n width: `${state.size}px`,\n transform: `translateX(${state.offset}px)`,\n };\n });\n\n readonly showIndicator = computed(() => {\n return this.service.variant() === 'underline';\n });\n\n // ===== RESIZE OBSERVER =====\n private resizeObserver: ResizeObserver | null = null;\n private activeTabResizeObserver: ResizeObserver | null = null;\n\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n this.service.handleKeydown(event);\n }\n\n constructor() {\n // Recalculate indicator whenever active tab or tabs list changes.\n // Indicator measurement relies on getBoundingClientRect and\n // ResizeObserver — both browser-only — so the effect no-ops\n // during SSR. The browser pass re-runs it after hydration.\n effect(() => {\n this.service.activeValue();\n this.service.tabs();\n this.service.orientation();\n this.service.variant();\n\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n this.updateIndicator();\n this.observeActiveTab();\n });\n }\n\n ngAfterViewInit(): void {\n // ResizeObserver + requestAnimationFrame are browser-only — the SSR\n // pass skips indicator measurement entirely and lets the browser\n // pass take over once the view re-runs on the client.\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n this.setupResizeObservers();\n\n requestAnimationFrame(() => {\n this.updateIndicator();\n this.updateScrollState();\n });\n }\n\n // ===== SCROLL =====\n\n /** Scrolls the active tab into view inside the scroll container. */\n scrollToActiveTab(): void {\n const activeTab = this.service.activeTab();\n\n if (activeTab) {\n activeTab.element.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n\n /** Scrolls the tab list by 80% of its visible width in the given direction (+1 or −1). */\n scrollBy(direction: number): void {\n const container = this.scrollContainer()?.nativeElement;\n\n if (!container) {\n return;\n }\n\n const amount = container.clientWidth * 0.8;\n const orientation = this.service.orientation();\n\n if (orientation === 'vertical') {\n container.scrollBy({ top: amount * direction, behavior: 'smooth' });\n } else {\n container.scrollBy({ left: amount * direction, behavior: 'smooth' });\n }\n }\n\n onScroll(): void {\n this.updateScrollState();\n this.updateIndicator();\n }\n\n // ===== INDICATOR =====\n\n /** Recalculates the sliding indicator position and size based on the active tab element. */\n updateIndicator(): void {\n if (!this.showIndicator()) {\n this.indicatorState.set({ visible: false, offset: 0, size: 0 });\n\n return;\n }\n\n const activeTab = this.service.activeTab();\n const container = this.scrollContainer()?.nativeElement;\n\n if (!activeTab || !container) {\n this.indicatorState.set({ visible: false, offset: 0, size: 0 });\n\n return;\n }\n\n const tabRect = activeTab.element.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n\n if (tabRect.width === 0 && tabRect.height === 0) {\n this.indicatorState.set({ visible: false, offset: 0, size: 0 });\n\n return;\n }\n\n const orientation = this.service.orientation();\n\n if (orientation === 'vertical') {\n this.indicatorState.set({\n visible: true,\n offset: tabRect.top - containerRect.top + container.scrollTop,\n size: tabRect.height,\n });\n } else {\n this.indicatorState.set({\n visible: true,\n offset: tabRect.left - containerRect.left + container.scrollLeft,\n size: tabRect.width,\n });\n }\n }\n\n // ===== SCROLL STATE =====\n\n private updateScrollState(): void {\n const container = this.scrollContainer()?.nativeElement;\n\n if (!container) {\n return;\n }\n\n const orientation = this.service.orientation();\n\n if (orientation === 'vertical') {\n this.canScrollStart.set(container.scrollTop > 0);\n this.canScrollEnd.set(\n container.scrollTop + container.clientHeight <\n container.scrollHeight - 1,\n );\n } else {\n this.canScrollStart.set(container.scrollLeft > 0);\n this.canScrollEnd.set(\n container.scrollLeft + container.clientWidth <\n container.scrollWidth - 1,\n );\n }\n }\n\n // ===== RESIZE OBSERVERS =====\n\n private setupResizeObservers(): void {\n const container = this.scrollContainer()?.nativeElement;\n\n if (!container || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.resizeObserver = new ResizeObserver(() => {\n this.ngZone.run(() => {\n this.updateIndicator();\n this.updateScrollState();\n });\n });\n\n this.resizeObserver.observe(container);\n });\n\n this.destroyRef.onDestroy(() => {\n this.resizeObserver?.disconnect();\n this.activeTabResizeObserver?.disconnect();\n });\n }\n\n private observeActiveTab(): void {\n const activeTab = this.service.activeTab();\n\n if (this.activeTabResizeObserver) {\n this.activeTabResizeObserver.disconnect();\n }\n\n if (!activeTab || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.activeTabResizeObserver = new ResizeObserver(() => {\n this.ngZone.run(() => {\n this.updateIndicator();\n });\n });\n\n this.activeTabResizeObserver.observe(activeTab.element);\n });\n\n this.scrollToActiveTab();\n }\n}\n","@if (service.scrollable() && service.showScrollButtons()) {\n <button\n class=\"fk-tab-list__scroll-btn\"\n [class.fk-tab-list__scroll-btn--hidden]=\"!canScrollStart()\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n (click)=\"scrollBy(-1)\"\n >\n <ng-content select=\"[fkTabScrollStartIcon]\" />\n @if (!scrollStartIconRef()) {\n <svg\n class=\"fk-tab-list__scroll-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M10 4L6 8l4 4\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n }\n </button>\n}\n\n<div\n class=\"fk-tab-list__scroll-container\"\n #scrollContainer\n (scroll)=\"onScroll()\"\n>\n <ng-content />\n\n @if (showIndicator()) {\n <div\n class=\"fk-tab-list__indicator\"\n [class.fk-tab-list__indicator--hidden]=\"!indicatorState().visible\"\n [ngStyle]=\"indicatorStyles()\"\n ></div>\n }\n</div>\n\n@if (service.scrollable() && service.showScrollButtons()) {\n <button\n class=\"fk-tab-list__scroll-btn\"\n [class.fk-tab-list__scroll-btn--hidden]=\"!canScrollEnd()\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n (click)=\"scrollBy(1)\"\n >\n <ng-content select=\"[fkTabScrollEndIcon]\" />\n @if (!scrollEndIconRef()) {\n <svg\n class=\"fk-tab-list__scroll-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6 4l4 4-4 4\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n }\n </button>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n HostBinding,\n inject,\n input,\n OnInit,\n signal,\n} from '@angular/core';\n\nimport { TabsService } from './tabs.service';\n\n@Component({\n selector: 'fk-tab-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `@if (shouldRender()) {\n <ng-content />\n }`,\n styleUrl: './tab-panel.component.scss',\n})\nexport class FkTabPanelComponent implements OnInit {\n private readonly service = inject(TabsService);\n private readonly destroyRef = inject(DestroyRef);\n\n // ===== BASE PROPS =====\n readonly className = input<string>('');\n\n // ===== INPUTS =====\n /** Unique value matching the corresponding `fk-tab`'s value; determines which panel to show. */\n readonly value = input.required<string>();\n\n // ===== GENERATED IDS =====\n readonly panelId = signal('');\n readonly tabId = signal('');\n\n // ===== COMPUTED =====\n readonly isActive = computed(\n () => this.service.activeValue() === this.value(),\n );\n\n readonly shouldRender = computed(() => {\n const lazy = this.service.lazy();\n const keepMounted = this.service.keepMounted();\n const isActive = this.isActive();\n const wasActivated = this.service.activatedPanels().has(this.value());\n\n if (!lazy) {\n return true;\n }\n\n if (keepMounted) {\n return isActive || wasActivated;\n }\n\n return isActive;\n });\n\n readonly classes = computed(() => {\n return ['fk-tab-panel', this.className()].filter(Boolean).join(' ');\n });\n\n // ===== HOST BINDINGS =====\n\n @HostBinding('class')\n get hostClass() {\n return this.classes();\n }\n\n @HostBinding('attr.role')\n readonly role = 'tabpanel';\n\n @HostBinding('id')\n get hostId() {\n return this.panelId();\n }\n\n @HostBinding('attr.aria-labelledby')\n get ariaLabelledby() {\n return this.tabId();\n }\n\n @HostBinding('hidden')\n get isHidden() {\n return !this.isActive() || null;\n }\n\n @HostBinding('attr.tabindex')\n readonly tabindex = 0;\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.service.unregisterPanel(this.value());\n });\n }\n\n ngOnInit(): void {\n const val = this.value();\n const tabs = this.service.tabs();\n const matchingTab = tabs.find((t) => t.value === val);\n\n if (matchingTab) {\n this.panelId.set(matchingTab.panelId);\n this.tabId.set(matchingTab.tabId);\n } else {\n const ids = this.service.createTabIds(val);\n\n this.panelId.set(ids.panelId);\n this.tabId.set(ids.tabId);\n }\n\n this.service.registerPanel({\n value: val,\n panelId: this.panelId(),\n tabId: this.tabId(),\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n HostBinding,\n inject,\n input,\n OnInit,\n output,\n} from '@angular/core';\n\nimport { TabsService } from './tabs.service';\nimport type {\n FkTabChangeEvent,\n FkTabCloseEvent,\n FkTabsActivationMode,\n FkTabsOrientation,\n FkTabsSize,\n FkTabsVariant,\n} from './tabs.types';\n\n@Component({\n selector: 'fk-tabs',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TabsService],\n template: `<ng-content />`,\n styleUrl: './tabs.component.scss',\n})\nexport class FkTabsComponent implements OnInit {\n private readonly service = inject(TabsService);\n private readonly destroyRef = inject(DestroyRef);\n\n // ===== BASE PROPS =====\n readonly className = input<string>('');\n\n // ===== INPUTS =====\n /** Controlled active tab value; when set, the parent owns the active state. */\n readonly value = input<string | undefined>(undefined);\n /** Initial active tab value used in uncontrolled mode. */\n readonly defaultValue = input<string | undefined>(undefined);\n /** Layout direction of the tab list. */\n readonly orientation = input<FkTabsOrientation>('horizontal');\n /** Whether tabs activate on focus (automatic) or only on click/Enter (manual). */\n readonly activationMode = input<FkTabsActivationMode>('automatic');\n /** Visual style of the tab strip. */\n readonly variant = input<FkTabsVariant>('underline');\n /** Size of the tab triggers. */\n readonly size = input<FkTabsSize>('md');\n /** When true, tab panels are not rendered until first activated. */\n readonly lazy = input(false);\n /** When true (and `lazy` is true), panels remain mounted in the DOM after their first activation. */\n readonly keepMounted = input(true);\n /** When true, each tab trigger stretches to fill an equal share of the tab list. */\n readonly stretch = input(false);\n /** When true, the tab list spans the full width of its container. */\n readonly fullWidth = input(false);\n /** When true, the tab list scrolls horizontally/vertically when tabs overflow. */\n readonly scrollable = input(false);\n /** When true (and `scrollable` is true), arrow buttons appear at the edges of the tab list. */\n readonly showScrollButtons = input(false);\n\n // ===== OUTPUTS =====\n /** Fires when the active tab changes, emitting the new tab value. */\n readonly valueChange = output<string>();\n /** Fires when the active tab changes, emitting the full change event including previous and next values. */\n readonly tabChange = output<FkTabChangeEvent>();\n /** Fires when a closable tab's close button is clicked, emitting the tab value. */\n readonly tabClose = output<FkTabCloseEvent>();\n\n // ===== HOST CLASS =====\n readonly classes = computed(() => {\n return [\n 'fk-tabs',\n `fk-tabs--${this.orientation()}`,\n `fk-tabs--${this.variant()}`,\n `fk-tabs--${this.size()}`,\n this.stretch() ? 'fk-tabs--stretch' : '',\n this.fullWidth() ? 'fk-tabs--full-width' : '',\n this.className(),\n ]\n .filter(Boolean)\n .join(' ');\n });\n\n @HostBinding('class')\n get hostClass() {\n return this.classes();\n }\n\n constructor() {\n // Link config inputs directly to service via callbacks.\n // This avoids effects entirely — the service reads input signals\n // directly through the signal graph, eliminating CD timing issues.\n this.service.setConfig({\n orientation: () => this.orientation(),\n activationMode: () => this.activationMode(),\n variant: () => this.variant(),\n lazy: () => this.lazy(),\n keepMounted: () => this.keepMounted(),\n scrollable: () => this.scrollable(),\n showScrollButtons: () => this.showScrollButtons(),\n });\n\n // Link controlled value input to service\n this.service.setControlledValue(() => this.value());\n\n // Wire service callbacks to outputs\n this.service.onValueChange = (v) => this.valueChange.emit(v);\n this.service.onTabChange = (e) => this.tabChange.emit(e);\n this.service.onTabClose = (v) => this.tabClose.emit({ value: v });\n\n this.destroyRef.onDestroy(() => {\n this.service.onValueChange = null;\n this.service.onTabChange = null;\n this.service.onTabClose = null;\n });\n }\n\n ngOnInit(): void {\n // Set initial value synchronously before child views are checked\n const v = this.value();\n const dv = this.defaultValue();\n\n if (v !== undefined) {\n this.service.setActiveValue(v);\n this.service.activatedPanels.update((set) => {\n const next = new Set(set);\n\n next.add(v);\n\n return next;\n });\n } else if (dv !== undefined) {\n this.service.setActiveValue(dv);\n this.service.activatedPanels.update((set) => {\n const next = new Set(set);\n\n next.add(dv);\n\n return next;\n });\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"frame-kit-ui-ng-ui-tabs.mjs","sources":["../../../../packages/ui-ng/ui/tabs/tab-icon.directive.ts","../../../../packages/ui-ng/ui/tabs/tabs.service.ts","../../../../packages/ui-ng/ui/tabs/tab.component.ts","../../../../packages/ui-ng/ui/tabs/tab.component.html","../../../../packages/ui-ng/ui/tabs/tab-list.component.ts","../../../../packages/ui-ng/ui/tabs/tab-list.component.html","../../../../packages/ui-ng/ui/tabs/tab-panel.component.ts","../../../../packages/ui-ng/ui/tabs/tabs.component.ts","../../../../packages/ui-ng/ui/tabs/frame-kit-ui-ng-ui-tabs.ts"],"sourcesContent":["import { Directive, InjectionToken } from '@angular/core';\n\nexport const FK_TAB_CLOSE_ICON = new InjectionToken<FkTabCloseIconDirective>(\n 'FK_TAB_CLOSE_ICON',\n);\n\nexport const FK_TAB_SCROLL_START_ICON =\n new InjectionToken<FkTabScrollStartIconDirective>('FK_TAB_SCROLL_START_ICON');\n\nexport const FK_TAB_SCROLL_END_ICON =\n new InjectionToken<FkTabScrollEndIconDirective>('FK_TAB_SCROLL_END_ICON');\n\n@Directive({\n selector: '[fkTabCloseIcon]',\n standalone: true,\n providers: [\n { provide: FK_TAB_CLOSE_ICON, useExisting: FkTabCloseIconDirective },\n ],\n host: {\n 'aria-hidden': 'true',\n },\n})\nexport class FkTabCloseIconDirective {}\n\n@Directive({\n selector: '[fkTabScrollStartIcon]',\n standalone: true,\n providers: [\n {\n provide: FK_TAB_SCROLL_START_ICON,\n useExisting: FkTabScrollStartIconDirective,\n },\n ],\n host: {\n 'aria-hidden': 'true',\n },\n})\nexport class FkTabScrollStartIconDirective {}\n\n@Directive({\n selector: '[fkTabScrollEndIcon]',\n standalone: true,\n providers: [\n {\n provide: FK_TAB_SCROLL_END_ICON,\n useExisting: FkTabScrollEndIconDirective,\n },\n ],\n host: {\n 'aria-hidden': 'true',\n },\n})\nexport class FkTabScrollEndIconDirective {}\n","import { computed, Injectable, signal } from '@angular/core';\n\nimport type {\n FkPanelRegistration,\n FkTabChangeEvent,\n FkTabRegistration,\n FkTabsActivationMode,\n FkTabsOrientation,\n FkTabsVariant,\n} from './tabs.types';\n\n@Injectable()\nexport class TabsService {\n // ===== ID GENERATION =====\n private tabIdCounter = 0;\n\n createTabIds(value: string): { tabId: string; panelId: string } {\n const key = value || String(this.tabIdCounter++);\n\n return {\n tabId: `fk-tab-${key}`,\n panelId: `fk-tabpanel-${key}`,\n };\n }\n\n // ===== CONFIGURATION (linked to parent component's input signals) =====\n // These are callbacks to the parent component's input signals,\n // set during the parent component's constructor.\n // This avoids effects and eliminates ExpressionChangedAfterItHasBeenCheckedError.\n private _orientationFn: () => FkTabsOrientation = () => 'horizontal';\n private _activationModeFn: () => FkTabsActivationMode = () => 'automatic';\n private _variantFn: () => FkTabsVariant = () => 'underline';\n private _lazyFn: () => boolean = () => false;\n private _keepMountedFn: () => boolean = () => true;\n private _scrollableFn: () => boolean = () => false;\n private _showScrollButtonsFn: () => boolean = () => false;\n\n readonly orientation = computed(() => this._orientationFn());\n readonly activationMode = computed(() => this._activationModeFn());\n readonly variant = computed(() => this._variantFn());\n readonly lazy = computed(() => this._lazyFn());\n readonly keepMounted = computed(() => this._keepMountedFn());\n readonly scrollable = computed(() => this._scrollableFn());\n readonly showScrollButtons = computed(() => this._showScrollButtonsFn());\n\n setConfig(config: {\n orientation: () => FkTabsOrientation;\n activationMode: () => FkTabsActivationMode;\n variant: () => FkTabsVariant;\n lazy: () => boolean;\n keepMounted: () => boolean;\n scrollable: () => boolean;\n showScrollButtons: () => boolean;\n }): void {\n this._orientationFn = config.orientation;\n this._activationModeFn = config.activationMode;\n this._variantFn = config.variant;\n this._lazyFn = config.lazy;\n this._keepMountedFn = config.keepMounted;\n this._scrollableFn = config.scrollable;\n this._showScrollButtonsFn = config.showScrollButtons;\n }\n\n // ===== CONTROLLED VALUE (linked to parent's value input) =====\n private _controlledValueFn: (() => string | undefined) | null = null;\n\n setControlledValue(fn: () => string | undefined): void {\n this._controlledValueFn = fn;\n }\n\n // Active value resolves controlled value first, then internal state\n private readonly _internalActiveValue = signal<string | null>(null);\n readonly activeValue = computed(() => {\n const controlled = this._controlledValueFn?.();\n\n if (controlled !== undefined) {\n return controlled;\n }\n\n return this._internalActiveValue();\n });\n\n // Writable proxy for setting active value\n setActiveValue(value: string | null): void {\n this._internalActiveValue.set(value);\n }\n readonly focusedValue = signal<string | null>(null);\n readonly tabs = signal<FkTabRegistration[]>([]);\n readonly panels = signal<FkPanelRegistration[]>([]);\n readonly activatedPanels = signal<Set<string>>(new Set());\n\n // ===== COMPUTED =====\n readonly enabledTabs = computed(() => this.tabs().filter((t) => !t.disabled));\n\n readonly activeTab = computed(() =>\n this.tabs().find((t) => t.value === this.activeValue()),\n );\n\n // ===== CALLBACKS (set by fk-tabs root) =====\n onTabChange: ((event: FkTabChangeEvent) => void) | null = null;\n onValueChange: ((value: string) => void) | null = null;\n onTabClose: ((value: string) => void) | null = null;\n\n // ===== REGISTRATION =====\n\n registerTab(reg: FkTabRegistration): void {\n this.tabs.update((list) => {\n const existing = list.findIndex((t) => t.value === reg.value);\n\n if (existing >= 0) {\n const updated = [...list];\n\n updated[existing] = reg;\n\n return updated;\n }\n\n return [...list, reg];\n });\n }\n\n unregisterTab(value: string): void {\n const wasActive = this.activeValue() === value;\n\n this.tabs.update((list) => list.filter((t) => t.value !== value));\n\n if (wasActive) {\n this.fallbackSelect();\n }\n }\n\n registerPanel(reg: FkPanelRegistration): void {\n this.panels.update((list) => {\n const existing = list.findIndex((p) => p.value === reg.value);\n\n if (existing >= 0) {\n const updated = [...list];\n\n updated[existing] = reg;\n\n return updated;\n }\n\n return [...list, reg];\n });\n }\n\n unregisterPanel(value: string): void {\n this.panels.update((list) => list.filter((p) => p.value !== value));\n }\n\n // ===== SELECTION =====\n\n selectTab(value: string): void {\n const tab = this.tabs().find((t) => t.value === value);\n\n if (tab && tab.disabled) {\n return;\n }\n\n const previousValue = this.activeValue();\n\n if (previousValue === value) {\n return;\n }\n\n this._internalActiveValue.set(value);\n this.activatedPanels.update((set) => {\n const next = new Set(set);\n\n next.add(value);\n\n return next;\n });\n\n this.onValueChange?.(value);\n this.onTabChange?.({ previousValue, value });\n }\n\n // ===== FOCUS =====\n\n focusTab(value: string): void {\n this.focusedValue.set(value);\n\n const tab = this.tabs().find((t) => t.value === value);\n\n if (tab) {\n tab.element.focus();\n }\n\n if (this.activationMode() === 'automatic') {\n this.selectTab(value);\n }\n }\n\n // ===== KEYBOARD NAVIGATION =====\n\n handleKeydown(event: KeyboardEvent): void {\n const orientation = this.orientation();\n const enabled = this.enabledTabs();\n\n if (enabled.length === 0) {\n return;\n }\n\n const currentValue = this.focusedValue() ?? this.activeValue();\n const currentIndex = enabled.findIndex((t) => t.value === currentValue);\n\n let targetIndex: number | null = null;\n\n switch (event.key) {\n case 'ArrowRight':\n if (orientation === 'horizontal') {\n targetIndex = this.getNextIndex(currentIndex, 1, enabled.length);\n event.preventDefault();\n }\n\n break;\n\n case 'ArrowLeft':\n if (orientation === 'horizontal') {\n targetIndex = this.getNextIndex(currentIndex, -1, enabled.length);\n event.preventDefault();\n }\n\n break;\n\n case 'ArrowDown':\n if (orientation === 'vertical') {\n targetIndex = this.getNextIndex(currentIndex, 1, enabled.length);\n event.preventDefault();\n }\n\n break;\n\n case 'ArrowUp':\n if (orientation === 'vertical') {\n targetIndex = this.getNextIndex(currentIndex, -1, enabled.length);\n event.preventDefault();\n }\n\n break;\n\n case 'Home':\n targetIndex = 0;\n\n event.preventDefault();\n\n break;\n\n case 'End':\n targetIndex = enabled.length - 1;\n\n event.preventDefault();\n\n break;\n\n case 'Enter':\n case ' ':\n if (this.activationMode() === 'manual' && currentValue) {\n this.selectTab(currentValue);\n\n event.preventDefault();\n }\n\n break;\n }\n\n if (targetIndex !== null && enabled[targetIndex]) {\n this.focusTab(enabled[targetIndex].value);\n }\n }\n\n // ===== FALLBACK =====\n\n fallbackSelect(): void {\n const enabled = this.enabledTabs();\n\n if (enabled.length > 0) {\n this.selectTab(enabled[0].value);\n } else {\n this._internalActiveValue.set(null);\n }\n }\n\n // ===== HELPERS =====\n\n private getNextIndex(\n current: number,\n direction: number,\n length: number,\n ): number {\n if (current < 0) {\n return 0;\n }\n\n return (current + direction + length) % length;\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n input,\n OnChanges,\n OnInit,\n signal,\n SimpleChanges,\n TemplateRef,\n} from '@angular/core';\n\nimport { FK_TAB_CLOSE_ICON } from './tab-icon.directive';\nimport { TabsService } from './tabs.service';\n\n@Component({\n selector: 'fk-tab',\n standalone: true,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './tab.component.html',\n styleUrl: './tab.component.scss',\n})\nexport class FkTabComponent implements OnInit, OnChanges {\n private readonly service = inject(TabsService);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly destroyRef = inject(DestroyRef);\n\n // ===== BASE PROPS =====\n readonly className = input<string>('');\n\n // ===== INPUTS =====\n /** Unique value that identifies this tab and links it to its `fk-tab-panel`. */\n readonly value = input.required<string>();\n /** When true, the tab is non-interactive and cannot be selected. */\n readonly disabled = input(false);\n /** When true, renders a close button on the tab trigger. */\n readonly closable = input(false);\n /** Optional badge content (string or number) rendered in the top-right corner of the trigger. */\n readonly badge = input<string | number | undefined>(undefined);\n /** Optional icon — either an icon name string or a `TemplateRef` — shown before the label. */\n readonly icon = input<TemplateRef<unknown> | string | undefined>(undefined);\n\n // ===== CONTENT CHILDREN =====\n readonly closeIconRef = contentChild(FK_TAB_CLOSE_ICON);\n\n // ===== GENERATED IDS =====\n readonly tabId = signal('');\n readonly panelId = signal('');\n\n // ===== COMPUTED =====\n readonly isActive = computed(\n () => this.service.activeValue() === this.value(),\n );\n\n readonly classes = computed(() => {\n return [\n 'fk-tab',\n this.isActive() ? 'fk-tab--active' : '',\n this.disabled() ? 'fk-tab--disabled' : '',\n this.className(),\n ]\n .filter(Boolean)\n .join(' ');\n });\n\n // ===== HOST BINDINGS =====\n\n @HostBinding('class')\n get hostClass() {\n return this.classes();\n }\n\n @HostBinding('attr.role')\n readonly role = 'tab';\n\n @HostBinding('id')\n get hostId() {\n return this.tabId();\n }\n\n @HostBinding('attr.aria-selected')\n get ariaSelected() {\n return this.isActive();\n }\n\n @HostBinding('attr.aria-controls')\n get ariaControls() {\n return this.panelId();\n }\n\n @HostBinding('attr.tabindex')\n get tabIndex() {\n return this.isActive() ? 0 : -1;\n }\n\n @HostBinding('attr.aria-disabled')\n get ariaDisabled() {\n return this.disabled() || null;\n }\n\n // ===== HOST LISTENERS =====\n\n @HostListener('click')\n onClick(): void {\n if (!this.disabled()) {\n this.service.selectTab(this.value());\n }\n }\n\n @HostListener('focus')\n onFocus(): void {\n this.service.focusedValue.set(this.value());\n }\n\n private initialized = false;\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.service.unregisterTab(this.value());\n });\n }\n\n ngOnInit(): void {\n const val = this.value();\n const dis = this.disabled();\n const ids = this.service.createTabIds(val);\n\n this.tabId.set(ids.tabId);\n this.panelId.set(ids.panelId);\n\n this.service.registerTab({\n value: val,\n disabled: dis,\n element: this.elementRef.nativeElement,\n tabId: ids.tabId,\n panelId: ids.panelId,\n });\n\n // Auto-select first non-disabled tab\n if (this.service.activeValue() === null && !dis) {\n this.service.setActiveValue(val);\n this.service.activatedPanels.update((set) => {\n const next = new Set(set);\n\n next.add(val);\n\n return next;\n });\n }\n\n this.initialized = true;\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.initialized) {\n return;\n }\n\n // Re-register when disabled state changes\n if ('disabled' in changes) {\n const val = this.value();\n const ids = this.service.createTabIds(val);\n\n this.service.registerTab({\n value: val,\n disabled: this.disabled(),\n element: this.elementRef.nativeElement,\n tabId: ids.tabId,\n panelId: ids.panelId,\n });\n }\n }\n\n // ===== TEMPLATE HELPERS =====\n\n isTemplateRef(val: unknown): val is TemplateRef<unknown> {\n return val instanceof TemplateRef;\n }\n\n onClose(event: MouseEvent): void {\n event.stopPropagation();\n\n this.service.onTabClose?.(this.value());\n }\n}\n","@if (icon(); as iconValue) {\n <span class=\"fk-tab__icon\">\n @if (isTemplateRef(iconValue)) {\n <ng-container *ngTemplateOutlet=\"iconValue\" />\n } @else {\n {{ iconValue }}\n }\n </span>\n}\n\n<span class=\"fk-tab__label\">\n <ng-content />\n</span>\n\n@if (badge() !== undefined) {\n <span class=\"fk-tab__badge\">{{ badge() }}</span>\n}\n\n@if (closable()) {\n <button\n class=\"fk-tab__close\"\n type=\"button\"\n (click)=\"onClose($event)\"\n [attr.aria-label]=\"'Close ' + value()\"\n tabindex=\"-1\"\n >\n <ng-content select=\"[fkTabCloseIcon]\" />\n @if (!closeIconRef()) {\n <svg\n class=\"fk-tab__close-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M4.5 4.5l7 7m0-7l-7 7\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n }\n </button>\n}\n","import { isPlatformBrowser, NgStyle } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n effect,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n input,\n NgZone,\n PLATFORM_ID,\n signal,\n viewChild,\n} from '@angular/core';\n\nimport {\n FK_TAB_SCROLL_END_ICON,\n FK_TAB_SCROLL_START_ICON,\n} from './tab-icon.directive';\nimport { TabsService } from './tabs.service';\nimport type { FkTabIndicatorState } from './tabs.types';\n\n@Component({\n selector: 'fk-tab-list',\n standalone: true,\n imports: [NgStyle],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './tab-list.component.html',\n styleUrl: './tab-list.component.scss',\n})\nexport class FkTabListComponent implements AfterViewInit {\n readonly service = inject(TabsService);\n private readonly ngZone = inject(NgZone);\n private readonly destroyRef = inject(DestroyRef);\n private readonly platformId = inject(PLATFORM_ID);\n\n // ===== BASE PROPS =====\n readonly className = input<string>('');\n /** Accessible label for the `tablist` role element. */\n readonly ariaLabel = input<string | null>(null);\n\n // ===== CONTENT CHILDREN =====\n readonly scrollStartIconRef = contentChild(FK_TAB_SCROLL_START_ICON);\n readonly scrollEndIconRef = contentChild(FK_TAB_SCROLL_END_ICON);\n\n // ===== VIEW CHILDREN =====\n readonly scrollContainer =\n viewChild<ElementRef<HTMLElement>>('scrollContainer');\n\n // ===== INDICATOR STATE =====\n readonly indicatorState = signal<FkTabIndicatorState>(\n {\n visible: false,\n offset: 0,\n size: 0,\n },\n {\n equal: (a, b) =>\n a.visible === b.visible && a.offset === b.offset && a.size === b.size,\n },\n );\n\n // ===== SCROLL STATE =====\n readonly canScrollStart = signal(false);\n readonly canScrollEnd = signal(false);\n\n // ===== HOST CLASS =====\n readonly classes = computed(() => {\n return ['fk-tab-list', this.className()].filter(Boolean).join(' ');\n });\n\n @HostBinding('class')\n get hostClass() {\n return this.classes();\n }\n\n @HostBinding('attr.role')\n readonly role = 'tablist';\n\n @HostBinding('attr.aria-orientation')\n get ariaOrientation() {\n return this.service.orientation();\n }\n\n @HostBinding('attr.aria-label')\n get hostAriaLabel() {\n return this.ariaLabel();\n }\n\n // ===== INDICATOR STYLES =====\n readonly indicatorStyles = computed(() => {\n const state = this.indicatorState();\n const orientation = this.service.orientation();\n\n if (!state.visible) {\n return { opacity: '0' };\n }\n\n if (orientation === 'vertical') {\n return {\n opacity: '1',\n height: `${state.size}px`,\n transform: `translateY(${state.offset}px)`,\n };\n }\n\n return {\n opacity: '1',\n width: `${state.size}px`,\n transform: `translateX(${state.offset}px)`,\n };\n });\n\n readonly showIndicator = computed(() => {\n return this.service.variant() === 'underline';\n });\n\n // ===== RESIZE OBSERVER =====\n private resizeObserver: ResizeObserver | null = null;\n private activeTabResizeObserver: ResizeObserver | null = null;\n\n @HostListener('keydown', ['$event'])\n onKeydown(event: KeyboardEvent): void {\n this.service.handleKeydown(event);\n }\n\n constructor() {\n // Recalculate indicator whenever active tab or tabs list changes.\n // Indicator measurement relies on getBoundingClientRect and\n // ResizeObserver — both browser-only — so the effect no-ops\n // during SSR. The browser pass re-runs it after hydration.\n effect(() => {\n this.service.activeValue();\n this.service.tabs();\n this.service.orientation();\n this.service.variant();\n\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n this.updateIndicator();\n this.observeActiveTab();\n });\n }\n\n ngAfterViewInit(): void {\n // ResizeObserver + requestAnimationFrame are browser-only — the SSR\n // pass skips indicator measurement entirely and lets the browser\n // pass take over once the view re-runs on the client.\n if (!isPlatformBrowser(this.platformId)) {\n return;\n }\n\n this.setupResizeObservers();\n\n requestAnimationFrame(() => {\n this.updateIndicator();\n this.updateScrollState();\n });\n }\n\n // ===== SCROLL =====\n\n /** Scrolls the active tab into view inside the scroll container. */\n scrollToActiveTab(): void {\n const activeTab = this.service.activeTab();\n\n if (activeTab) {\n activeTab.element.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }\n\n /** Scrolls the tab list by 80% of its visible width in the given direction (+1 or −1). */\n scrollBy(direction: number): void {\n const container = this.scrollContainer()?.nativeElement;\n\n if (!container) {\n return;\n }\n\n const amount = container.clientWidth * 0.8;\n const orientation = this.service.orientation();\n\n if (orientation === 'vertical') {\n container.scrollBy({ top: amount * direction, behavior: 'smooth' });\n } else {\n container.scrollBy({ left: amount * direction, behavior: 'smooth' });\n }\n }\n\n onScroll(): void {\n this.updateScrollState();\n this.updateIndicator();\n }\n\n // ===== INDICATOR =====\n\n /** Recalculates the sliding indicator position and size based on the active tab element. */\n updateIndicator(): void {\n if (!this.showIndicator()) {\n this.indicatorState.set({ visible: false, offset: 0, size: 0 });\n\n return;\n }\n\n const activeTab = this.service.activeTab();\n const container = this.scrollContainer()?.nativeElement;\n\n if (!activeTab || !container) {\n this.indicatorState.set({ visible: false, offset: 0, size: 0 });\n\n return;\n }\n\n const tabRect = activeTab.element.getBoundingClientRect();\n const containerRect = container.getBoundingClientRect();\n\n if (tabRect.width === 0 && tabRect.height === 0) {\n this.indicatorState.set({ visible: false, offset: 0, size: 0 });\n\n return;\n }\n\n const orientation = this.service.orientation();\n\n if (orientation === 'vertical') {\n this.indicatorState.set({\n visible: true,\n offset: tabRect.top - containerRect.top + container.scrollTop,\n size: tabRect.height,\n });\n } else {\n this.indicatorState.set({\n visible: true,\n offset: tabRect.left - containerRect.left + container.scrollLeft,\n size: tabRect.width,\n });\n }\n }\n\n // ===== SCROLL STATE =====\n\n private updateScrollState(): void {\n const container = this.scrollContainer()?.nativeElement;\n\n if (!container) {\n return;\n }\n\n const orientation = this.service.orientation();\n\n if (orientation === 'vertical') {\n this.canScrollStart.set(container.scrollTop > 0);\n this.canScrollEnd.set(\n container.scrollTop + container.clientHeight <\n container.scrollHeight - 1,\n );\n } else {\n this.canScrollStart.set(container.scrollLeft > 0);\n this.canScrollEnd.set(\n container.scrollLeft + container.clientWidth <\n container.scrollWidth - 1,\n );\n }\n }\n\n // ===== RESIZE OBSERVERS =====\n\n private setupResizeObservers(): void {\n const container = this.scrollContainer()?.nativeElement;\n\n if (!container || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.resizeObserver = new ResizeObserver(() => {\n this.ngZone.run(() => {\n this.updateIndicator();\n this.updateScrollState();\n });\n });\n\n this.resizeObserver.observe(container);\n });\n\n this.destroyRef.onDestroy(() => {\n this.resizeObserver?.disconnect();\n this.activeTabResizeObserver?.disconnect();\n });\n }\n\n private observeActiveTab(): void {\n const activeTab = this.service.activeTab();\n\n if (this.activeTabResizeObserver) {\n this.activeTabResizeObserver.disconnect();\n }\n\n if (!activeTab || typeof ResizeObserver === 'undefined') {\n return;\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.activeTabResizeObserver = new ResizeObserver(() => {\n this.ngZone.run(() => {\n this.updateIndicator();\n });\n });\n\n this.activeTabResizeObserver.observe(activeTab.element);\n });\n\n this.scrollToActiveTab();\n }\n}\n","@if (service.scrollable() && service.showScrollButtons()) {\n <button\n class=\"fk-tab-list__scroll-btn\"\n [class.fk-tab-list__scroll-btn--hidden]=\"!canScrollStart()\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n (click)=\"scrollBy(-1)\"\n >\n <ng-content select=\"[fkTabScrollStartIcon]\" />\n @if (!scrollStartIconRef()) {\n <svg\n class=\"fk-tab-list__scroll-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M10 4L6 8l4 4\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n }\n </button>\n}\n\n<div\n class=\"fk-tab-list__scroll-container\"\n #scrollContainer\n (scroll)=\"onScroll()\"\n>\n <ng-content />\n\n @if (showIndicator()) {\n <div\n class=\"fk-tab-list__indicator\"\n [class.fk-tab-list__indicator--hidden]=\"!indicatorState().visible\"\n [ngStyle]=\"indicatorStyles()\"\n ></div>\n }\n</div>\n\n@if (service.scrollable() && service.showScrollButtons()) {\n <button\n class=\"fk-tab-list__scroll-btn\"\n [class.fk-tab-list__scroll-btn--hidden]=\"!canScrollEnd()\"\n type=\"button\"\n tabindex=\"-1\"\n aria-hidden=\"true\"\n (click)=\"scrollBy(1)\"\n >\n <ng-content select=\"[fkTabScrollEndIcon]\" />\n @if (!scrollEndIconRef()) {\n <svg\n class=\"fk-tab-list__scroll-icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M6 4l4 4-4 4\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n }\n </button>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n HostBinding,\n inject,\n input,\n OnInit,\n signal,\n} from '@angular/core';\n\nimport { TabsService } from './tabs.service';\n\n@Component({\n selector: 'fk-tab-panel',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `@if (shouldRender()) {\n <ng-content />\n }`,\n styleUrl: './tab-panel.component.scss',\n})\nexport class FkTabPanelComponent implements OnInit {\n private readonly service = inject(TabsService);\n private readonly destroyRef = inject(DestroyRef);\n\n // ===== BASE PROPS =====\n readonly className = input<string>('');\n\n // ===== INPUTS =====\n /** Unique value matching the corresponding `fk-tab`'s value; determines which panel to show. */\n readonly value = input.required<string>();\n\n // ===== GENERATED IDS =====\n readonly panelId = signal('');\n readonly tabId = signal('');\n\n // ===== COMPUTED =====\n readonly isActive = computed(\n () => this.service.activeValue() === this.value(),\n );\n\n readonly shouldRender = computed(() => {\n const lazy = this.service.lazy();\n const keepMounted = this.service.keepMounted();\n const isActive = this.isActive();\n const wasActivated = this.service.activatedPanels().has(this.value());\n\n if (!lazy) {\n return true;\n }\n\n if (keepMounted) {\n return isActive || wasActivated;\n }\n\n return isActive;\n });\n\n readonly classes = computed(() => {\n return ['fk-tab-panel', this.className()].filter(Boolean).join(' ');\n });\n\n // ===== HOST BINDINGS =====\n\n @HostBinding('class')\n get hostClass() {\n return this.classes();\n }\n\n @HostBinding('attr.role')\n readonly role = 'tabpanel';\n\n @HostBinding('id')\n get hostId() {\n return this.panelId();\n }\n\n @HostBinding('attr.aria-labelledby')\n get ariaLabelledby() {\n return this.tabId();\n }\n\n @HostBinding('hidden')\n get isHidden() {\n return !this.isActive() || null;\n }\n\n @HostBinding('attr.tabindex')\n readonly tabindex = 0;\n\n constructor() {\n this.destroyRef.onDestroy(() => {\n this.service.unregisterPanel(this.value());\n });\n }\n\n ngOnInit(): void {\n const val = this.value();\n const tabs = this.service.tabs();\n const matchingTab = tabs.find((t) => t.value === val);\n\n if (matchingTab) {\n this.panelId.set(matchingTab.panelId);\n this.tabId.set(matchingTab.tabId);\n } else {\n const ids = this.service.createTabIds(val);\n\n this.panelId.set(ids.panelId);\n this.tabId.set(ids.tabId);\n }\n\n this.service.registerPanel({\n value: val,\n panelId: this.panelId(),\n tabId: this.tabId(),\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n HostBinding,\n inject,\n input,\n OnInit,\n output,\n} from '@angular/core';\n\nimport { TabsService } from './tabs.service';\nimport type {\n FkTabChangeEvent,\n FkTabCloseEvent,\n FkTabsActivationMode,\n FkTabsOrientation,\n FkTabsSize,\n FkTabsVariant,\n} from './tabs.types';\n\n@Component({\n selector: 'fk-tabs',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [TabsService],\n template: `<ng-content />`,\n styleUrl: './tabs.component.scss',\n})\nexport class FkTabsComponent implements OnInit {\n private readonly service = inject(TabsService);\n private readonly destroyRef = inject(DestroyRef);\n\n // ===== BASE PROPS =====\n readonly className = input<string>('');\n\n // ===== INPUTS =====\n /** Controlled active tab value; when set, the parent owns the active state. */\n readonly value = input<string | undefined>(undefined);\n /** Initial active tab value used in uncontrolled mode. */\n readonly defaultValue = input<string | undefined>(undefined);\n /** Layout direction of the tab list. */\n readonly orientation = input<FkTabsOrientation>('horizontal');\n /** Whether tabs activate on focus (automatic) or only on click/Enter (manual). */\n readonly activationMode = input<FkTabsActivationMode>('automatic');\n /** Visual style of the tab strip. */\n readonly variant = input<FkTabsVariant>('underline');\n /** Size of the tab triggers. */\n readonly size = input<FkTabsSize>('md');\n /** When true, tab panels are not rendered until first activated. */\n readonly lazy = input(false);\n /** When true (and `lazy` is true), panels remain mounted in the DOM after their first activation. */\n readonly keepMounted = input(true);\n /** When true, each tab trigger stretches to fill an equal share of the tab list. */\n readonly stretch = input(false);\n /** When true, the tab list spans the full width of its container. */\n readonly fullWidth = input(false);\n /** When true, the tab list scrolls horizontally/vertically when tabs overflow. */\n readonly scrollable = input(false);\n /** When true (and `scrollable` is true), arrow buttons appear at the edges of the tab list. */\n readonly showScrollButtons = input(false);\n\n // ===== OUTPUTS =====\n /** Fires when the active tab changes, emitting the new tab value. */\n readonly valueChange = output<string>();\n /** Fires when the active tab changes, emitting the full change event including previous and next values. */\n readonly tabChange = output<FkTabChangeEvent>();\n /** Fires when a closable tab's close button is clicked, emitting the tab value. */\n readonly tabClose = output<FkTabCloseEvent>();\n\n // ===== HOST CLASS =====\n readonly classes = computed(() => {\n return [\n 'fk-tabs',\n `fk-tabs--${this.orientation()}`,\n `fk-tabs--${this.variant()}`,\n `fk-tabs--${this.size()}`,\n this.stretch() ? 'fk-tabs--stretch' : '',\n this.fullWidth() ? 'fk-tabs--full-width' : '',\n this.className(),\n ]\n .filter(Boolean)\n .join(' ');\n });\n\n @HostBinding('class')\n get hostClass() {\n return this.classes();\n }\n\n constructor() {\n // Link config inputs directly to service via callbacks.\n // This avoids effects entirely — the service reads input signals\n // directly through the signal graph, eliminating CD timing issues.\n this.service.setConfig({\n orientation: () => this.orientation(),\n activationMode: () => this.activationMode(),\n variant: () => this.variant(),\n lazy: () => this.lazy(),\n keepMounted: () => this.keepMounted(),\n scrollable: () => this.scrollable(),\n showScrollButtons: () => this.showScrollButtons(),\n });\n\n // Link controlled value input to service\n this.service.setControlledValue(() => this.value());\n\n // Wire service callbacks to outputs\n this.service.onValueChange = (v) => this.valueChange.emit(v);\n this.service.onTabChange = (e) => this.tabChange.emit(e);\n this.service.onTabClose = (v) => this.tabClose.emit({ value: v });\n\n this.destroyRef.onDestroy(() => {\n this.service.onValueChange = null;\n this.service.onTabChange = null;\n this.service.onTabClose = null;\n });\n }\n\n ngOnInit(): void {\n // Set initial value synchronously before child views are checked\n const v = this.value();\n const dv = this.defaultValue();\n\n if (v !== undefined) {\n this.service.setActiveValue(v);\n this.service.activatedPanels.update((set) => {\n const next = new Set(set);\n\n next.add(v);\n\n return next;\n });\n } else if (dv !== undefined) {\n this.service.setActiveValue(dv);\n this.service.activatedPanels.update((set) => {\n const next = new Set(set);\n\n next.add(dv);\n\n return next;\n });\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frame-kit/ui-ng",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.15",
|
|
4
4
|
"description": "Style-agnostic, token-driven Angular UI component library for FrameKit.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"@angular/forms": "^21.2.0",
|
|
18
18
|
"@angular/platform-browser": "^21.2.0",
|
|
19
19
|
"@angular/router": "^21.2.0",
|
|
20
|
-
"@frame-kit/utils": "0.2.
|
|
20
|
+
"@frame-kit/utils": "0.2.15",
|
|
21
21
|
"rxjs": "^7.0.0"
|
|
22
22
|
},
|
|
23
23
|
"sideEffects": false,
|
package/ui/card/README.md
CHANGED
|
@@ -8,16 +8,16 @@ A token-driven container component for grouping related content with consistent
|
|
|
8
8
|
|
|
9
9
|
### Inputs
|
|
10
10
|
|
|
11
|
-
| Input | Type | Default | Description
|
|
12
|
-
| ------------- | ------------------------------------------- | ----------- |
|
|
13
|
-
| `size` | `'sm' \| 'md' \| 'lg' \| string` | `'md'` | Padding preset or custom CSS value (e.g. `'3rem'`)
|
|
14
|
-
| `align` | `'start' \| 'center' \| 'end' \| 'stretch'` | `'stretch'` | Cross-axis alignment of projected content
|
|
15
|
-
| `transparent` | `boolean` | `false` | Removes the background fill — for a card used purely as a layout primitive
|
|
16
|
-
| `borderless` | `boolean` | `false` | Removes the border — pair with `transparent` for a fully chromeless container
|
|
11
|
+
| Input | Type | Default | Description |
|
|
12
|
+
| ------------- | ------------------------------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
13
|
+
| `size` | `'sm' \| 'md' \| 'lg' \| string` | `'md'` | Padding preset or custom CSS value (e.g. `'3rem'`) |
|
|
14
|
+
| `align` | `'start' \| 'center' \| 'end' \| 'stretch'` | `'stretch'` | Cross-axis alignment of projected content |
|
|
15
|
+
| `transparent` | `boolean` | `false` | Removes the background fill — for a card used purely as a layout primitive |
|
|
16
|
+
| `borderless` | `boolean` | `false` | Removes the border — pair with `transparent` for a fully chromeless container |
|
|
17
17
|
| `clip` | `boolean` | `false` | Clips projected content to the rounded corners (`overflow: hidden`). Use for flush media or tables so their square corners don't poke past the radius |
|
|
18
|
-
| `className` | `string` | `''` | Additional CSS classes for the host element
|
|
19
|
-
| `id` | `string \| null` | `null` | Sets the `id` attribute on the host element
|
|
20
|
-
| `ariaLabel` | `string \| null` | `null` | Sets `aria-label` on the host element for assistive technology
|
|
18
|
+
| `className` | `string` | `''` | Additional CSS classes for the host element |
|
|
19
|
+
| `id` | `string \| null` | `null` | Sets the `id` attribute on the host element |
|
|
20
|
+
| `ariaLabel` | `string \| null` | `null` | Sets `aria-label` on the host element for assistive technology |
|
|
21
21
|
|
|
22
22
|
### Outputs
|
|
23
23
|
|
|
@@ -36,27 +36,27 @@ A service-driven wizard dialog for multi-step workflows. Opens its own dialog vi
|
|
|
36
36
|
|
|
37
37
|
### WizardDialogRef
|
|
38
38
|
|
|
39
|
-
| Property / Method
|
|
40
|
-
|
|
|
41
|
-
| `currentIndex`
|
|
42
|
-
| `isFirstStep`
|
|
43
|
-
| `isLastStep`
|
|
44
|
-
| `totalSteps`
|
|
45
|
-
| `currentStep`
|
|
46
|
-
| `submitDisabled`
|
|
47
|
-
| `nextDisabled`
|
|
48
|
-
| `chromeVisible`
|
|
49
|
-
| `extraAction`
|
|
50
|
-
| `submitted`
|
|
51
|
-
| `stepChanged`
|
|
52
|
-
| `data`
|
|
53
|
-
| `next()`
|
|
54
|
-
| `previous()`
|
|
55
|
-
| `goTo(index)`
|
|
56
|
-
| `close(result?)`
|
|
57
|
-
| `size()`
|
|
58
|
-
| `updateSize(size)` | `void`
|
|
59
|
-
| `afterClosed()`
|
|
39
|
+
| Property / Method | Type | Description |
|
|
40
|
+
| ------------------ | ----------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
|
|
41
|
+
| `currentIndex` | `Signal<number>` | Current step index |
|
|
42
|
+
| `isFirstStep` | `Signal<boolean>` | Whether on the first step |
|
|
43
|
+
| `isLastStep` | `Signal<boolean>` | Whether on the last step |
|
|
44
|
+
| `totalSteps` | `Signal<number>` | Total number of steps |
|
|
45
|
+
| `currentStep` | `Signal<WizardDialogStep>` | Current step definition |
|
|
46
|
+
| `submitDisabled` | `WritableSignal<boolean>` | Disable submit button |
|
|
47
|
+
| `nextDisabled` | `WritableSignal<boolean>` | Disable next button |
|
|
48
|
+
| `chromeVisible` | `WritableSignal<boolean>` | Show or hide the stepper + footer (both flip together) |
|
|
49
|
+
| `extraAction` | `WritableSignal<WizardExtraAction\|null>` | Optional third footer button rendered between Back and Submit (see [Extra Footer Action](#extra-footer-action)) |
|
|
50
|
+
| `submitted` | `Observable<void>` | Emitted when submit is clicked |
|
|
51
|
+
| `stepChanged` | `Observable<number>` | Emitted when step changes |
|
|
52
|
+
| `data` | `TData` | Config data |
|
|
53
|
+
| `next()` | `boolean` | Advance to next step |
|
|
54
|
+
| `previous()` | `boolean` | Go back one step |
|
|
55
|
+
| `goTo(index)` | `boolean` | Jump to step (respects linear mode) |
|
|
56
|
+
| `close(result?)` | `void` | Close the dialog |
|
|
57
|
+
| `size()` | `DialogSize` | Current panel size of the underlying dialog |
|
|
58
|
+
| `updateSize(size)` | `void` | Resize the open wizard in place (e.g. toggle `"fullscreen"` from custom chrome) |
|
|
59
|
+
| `afterClosed()` | `Observable<TResult>` | Emitted after dialog closes |
|
|
60
60
|
|
|
61
61
|
### WizardExtraAction
|
|
62
62
|
|