@raintonic/formaui 0.2.0 → 0.2.1
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/CHANGELOG.md +7 -7
- package/README.md +145 -145
- package/fesm2022/raintonic-formaui-cdk-drag-drop.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-cdk-form-field.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-cdk-overlay.mjs +0 -26
- package/fesm2022/raintonic-formaui-cdk-overlay.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-cdk-virtual-scroll.mjs +2 -2
- package/fesm2022/raintonic-formaui-cdk-virtual-scroll.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-accordion.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-accordion.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-alert.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-autocomplete.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-avatar.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-badge.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-badge.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-big-menu.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-big-menu.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-breadcrumb.mjs +4 -4
- package/fesm2022/raintonic-formaui-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-button-group.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-button.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-card.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-checkbox.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-checkbox.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-data-table.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-date-picker.mjs +4 -4
- package/fesm2022/raintonic-formaui-components-date-picker.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-divider.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-divider.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-drawer.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-drawer.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-empty-state.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-empty-state.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-file-upload.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-file-upload.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-form-field.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-icon.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-input.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-list.mjs +4 -4
- package/fesm2022/raintonic-formaui-components-list.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-menu.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-number-input.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-number-input.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-paginator.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-paginator.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-password-input.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-password-input.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-popover.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-popover.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-progressbar.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-radio.mjs +4 -4
- package/fesm2022/raintonic-formaui-components-radio.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-select.mjs +24 -24
- package/fesm2022/raintonic-formaui-components-select.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-side-panel.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-side-panel.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-sidebar.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-sidebar.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-skeleton.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-skeleton.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-slider.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-slider.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-spinner.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-spinner.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-stepper.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-stepper.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tab.mjs +10 -10
- package/fesm2022/raintonic-formaui-components-tab.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tag.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-tag.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-time-picker.mjs +4 -4
- package/fesm2022/raintonic-formaui-components-time-picker.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-toggle.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-toolbar.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tooltip.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tree-select.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-tree-select.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tree-table.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-tree-table.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tree.mjs +4 -4
- package/fesm2022/raintonic-formaui-components-tree.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-core.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-services-dialog.mjs +36 -36
- package/fesm2022/raintonic-formaui-services-dialog.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-services-notification.mjs +2 -2
- package/fesm2022/raintonic-formaui-services-notification.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-services-theme.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-test-utils.mjs.map +1 -1
- package/fesm2022/raintonic-formaui.mjs.map +1 -1
- package/llms-full.txt +3 -97
- package/llms.txt +3 -3
- package/package.json +1 -1
- package/styles/index.scss +3 -3
- package/styles/partials/components/_button.scss +367 -0
- package/styles/partials/components/_dialog.scss +180 -0
- package/styles/partials/components/_overlay.scss +87 -0
- package/types/raintonic-formaui-cdk-overlay.d.ts +0 -1
- package/types/raintonic-formaui-cdk-overlay.d.ts.map +1 -1
|
@@ -12,7 +12,7 @@ class FuiBreadcrumbItemComponent {
|
|
|
12
12
|
_separator = signal('/', ...(ngDevMode ? [{ debugName: "_separator" }] : /* istanbul ignore next */ []));
|
|
13
13
|
isLink = computed(() => this.routerLink() != null && !this.isLast() && !this.disabled(), ...(ngDevMode ? [{ debugName: "isLink" }] : /* istanbul ignore next */ []));
|
|
14
14
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: FuiBreadcrumbItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.6", type: FuiBreadcrumbItemComponent, isStandalone: true, selector: "fui-breadcrumb-item", inputs: { routerLink: { classPropertyName: "routerLink", publicName: "routerLink", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.fui-breadcrumb-item--active": "isLast()", "class.fui-breadcrumb-item--disabled": "disabled()", "attr.aria-current": "isLast() ? \"page\" : null" }, classAttribute: "fui-breadcrumb-item" }, ngImport: i0, template: "<li class=\"fui-breadcrumb-item__wrapper\">\n @if (isLink()) {\n <a class=\"fui-breadcrumb-item__link\" [routerLink]=\"routerLink()\"><ng-content></ng-content></a>\n } @else {\n <span class=\"fui-breadcrumb-item__text\"><ng-content></ng-content></span>\n }\n</li>\n@if (!isLast()) {\n <li class=\"fui-breadcrumb-item__separator\" aria-hidden=\"true\">{{ _separator() }}</li>\n}\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition:opacity var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-motion-fade-out{transition:opacity var(--fui-duration-fast-01) var(--fui-ease-exit) 0ms}.fui-motion-slide-in-bottom{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition:transform,opacity var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-moderate-01) var(--fui-ease-entrance)}.fui-breadcrumb{display:block}.fui-breadcrumb__list{display:flex;flex-wrap:wrap;align-items:center;list-style:none;margin:0;padding:0;gap:var(--fui-gap-4, .25rem)}.fui-breadcrumb-item{display:contents}.fui-breadcrumb-item__wrapper{display:flex;align-items:center}.fui-breadcrumb-item__link{color:var(--fui-primary);text-decoration:none;font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);transition:color var(--fui-duration-fast-02, .15s) var(--fui-ease-standard) 0ms}.fui-breadcrumb-item__link:hover{color:var(--fui-primary-80);text-decoration:underline}.fui-breadcrumb-item__link:focus-visible{outline:2px solid var(--fui-primary);outline-offset:2px;border-radius:var(--fui-border-radius-sm, 8px)}.fui-breadcrumb-item__text{font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);color:var(--fui-text-primary)}.fui-breadcrumb-item--active .fui-breadcrumb-item__text{font-weight:var(--fui-font-weight-medium, 500);color:var(--fui-text-primary)}.fui-breadcrumb-item--disabled .fui-breadcrumb-item__text{color:var(--fui-text-disabled)}.fui-breadcrumb-item__separator{display:flex;align-items:center;color:var(--fui-text-secondary);font-size:var(--fui-font-size-02);-webkit-user-select:none;user-select:none;padding:0 var(--fui-gap-4, .25rem)}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
15
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.6", type: FuiBreadcrumbItemComponent, isStandalone: true, selector: "fui-breadcrumb-item", inputs: { routerLink: { classPropertyName: "routerLink", publicName: "routerLink", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.fui-breadcrumb-item--active": "isLast()", "class.fui-breadcrumb-item--disabled": "disabled()", "attr.aria-current": "isLast() ? \"page\" : null" }, classAttribute: "fui-breadcrumb-item" }, ngImport: i0, template: "<li class=\"fui-breadcrumb-item__wrapper\">\r\n @if (isLink()) {\r\n <a class=\"fui-breadcrumb-item__link\" [routerLink]=\"routerLink()\"><ng-content></ng-content></a>\r\n } @else {\r\n <span class=\"fui-breadcrumb-item__text\"><ng-content></ng-content></span>\r\n }\r\n</li>\r\n@if (!isLast()) {\r\n <li class=\"fui-breadcrumb-item__separator\" aria-hidden=\"true\">{{ _separator() }}</li>\r\n}\r\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition:opacity var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-motion-fade-out{transition:opacity var(--fui-duration-fast-01) var(--fui-ease-exit) 0ms}.fui-motion-slide-in-bottom{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition:transform,opacity var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-moderate-01) var(--fui-ease-entrance)}.fui-breadcrumb{display:block}.fui-breadcrumb__list{display:flex;flex-wrap:wrap;align-items:center;list-style:none;margin:0;padding:0;gap:var(--fui-gap-4, .25rem)}.fui-breadcrumb-item{display:contents}.fui-breadcrumb-item__wrapper{display:flex;align-items:center}.fui-breadcrumb-item__link{color:var(--fui-primary);text-decoration:none;font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);transition:color var(--fui-duration-fast-02, .15s) var(--fui-ease-standard) 0ms}.fui-breadcrumb-item__link:hover{color:var(--fui-primary-80);text-decoration:underline}.fui-breadcrumb-item__link:focus-visible{outline:2px solid var(--fui-primary);outline-offset:2px;border-radius:var(--fui-border-radius-sm, 8px)}.fui-breadcrumb-item__text{font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);color:var(--fui-text-primary)}.fui-breadcrumb-item--active .fui-breadcrumb-item__text{font-weight:var(--fui-font-weight-medium, 500);color:var(--fui-text-primary)}.fui-breadcrumb-item--disabled .fui-breadcrumb-item__text{color:var(--fui-text-disabled)}.fui-breadcrumb-item__separator{display:flex;align-items:center;color:var(--fui-text-secondary);font-size:var(--fui-font-size-02);-webkit-user-select:none;user-select:none;padding:0 var(--fui-gap-4, .25rem)}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
16
16
|
}
|
|
17
17
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: FuiBreadcrumbItemComponent, decorators: [{
|
|
18
18
|
type: Component,
|
|
@@ -21,7 +21,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImpor
|
|
|
21
21
|
'[class.fui-breadcrumb-item--active]': 'isLast()',
|
|
22
22
|
'[class.fui-breadcrumb-item--disabled]': 'disabled()',
|
|
23
23
|
'[attr.aria-current]': 'isLast() ? "page" : null',
|
|
24
|
-
}, template: "<li class=\"fui-breadcrumb-item__wrapper\">\n @if (isLink()) {\n <a class=\"fui-breadcrumb-item__link\" [routerLink]=\"routerLink()\"><ng-content></ng-content></a>\n } @else {\n <span class=\"fui-breadcrumb-item__text\"><ng-content></ng-content></span>\n }\n</li>\n@if (!isLast()) {\n <li class=\"fui-breadcrumb-item__separator\" aria-hidden=\"true\">{{ _separator() }}</li>\n}\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition:opacity var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-motion-fade-out{transition:opacity var(--fui-duration-fast-01) var(--fui-ease-exit) 0ms}.fui-motion-slide-in-bottom{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition:transform,opacity var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-moderate-01) var(--fui-ease-entrance)}.fui-breadcrumb{display:block}.fui-breadcrumb__list{display:flex;flex-wrap:wrap;align-items:center;list-style:none;margin:0;padding:0;gap:var(--fui-gap-4, .25rem)}.fui-breadcrumb-item{display:contents}.fui-breadcrumb-item__wrapper{display:flex;align-items:center}.fui-breadcrumb-item__link{color:var(--fui-primary);text-decoration:none;font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);transition:color var(--fui-duration-fast-02, .15s) var(--fui-ease-standard) 0ms}.fui-breadcrumb-item__link:hover{color:var(--fui-primary-80);text-decoration:underline}.fui-breadcrumb-item__link:focus-visible{outline:2px solid var(--fui-primary);outline-offset:2px;border-radius:var(--fui-border-radius-sm, 8px)}.fui-breadcrumb-item__text{font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);color:var(--fui-text-primary)}.fui-breadcrumb-item--active .fui-breadcrumb-item__text{font-weight:var(--fui-font-weight-medium, 500);color:var(--fui-text-primary)}.fui-breadcrumb-item--disabled .fui-breadcrumb-item__text{color:var(--fui-text-disabled)}.fui-breadcrumb-item__separator{display:flex;align-items:center;color:var(--fui-text-secondary);font-size:var(--fui-font-size-02);-webkit-user-select:none;user-select:none;padding:0 var(--fui-gap-4, .25rem)}\n"] }]
|
|
24
|
+
}, template: "<li class=\"fui-breadcrumb-item__wrapper\">\r\n @if (isLink()) {\r\n <a class=\"fui-breadcrumb-item__link\" [routerLink]=\"routerLink()\"><ng-content></ng-content></a>\r\n } @else {\r\n <span class=\"fui-breadcrumb-item__text\"><ng-content></ng-content></span>\r\n }\r\n</li>\r\n@if (!isLast()) {\r\n <li class=\"fui-breadcrumb-item__separator\" aria-hidden=\"true\">{{ _separator() }}</li>\r\n}\r\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition:opacity var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-motion-fade-out{transition:opacity var(--fui-duration-fast-01) var(--fui-ease-exit) 0ms}.fui-motion-slide-in-bottom{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition:transform,opacity var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-moderate-01) var(--fui-ease-entrance)}.fui-breadcrumb{display:block}.fui-breadcrumb__list{display:flex;flex-wrap:wrap;align-items:center;list-style:none;margin:0;padding:0;gap:var(--fui-gap-4, .25rem)}.fui-breadcrumb-item{display:contents}.fui-breadcrumb-item__wrapper{display:flex;align-items:center}.fui-breadcrumb-item__link{color:var(--fui-primary);text-decoration:none;font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);transition:color var(--fui-duration-fast-02, .15s) var(--fui-ease-standard) 0ms}.fui-breadcrumb-item__link:hover{color:var(--fui-primary-80);text-decoration:underline}.fui-breadcrumb-item__link:focus-visible{outline:2px solid var(--fui-primary);outline-offset:2px;border-radius:var(--fui-border-radius-sm, 8px)}.fui-breadcrumb-item__text{font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);color:var(--fui-text-primary)}.fui-breadcrumb-item--active .fui-breadcrumb-item__text{font-weight:var(--fui-font-weight-medium, 500);color:var(--fui-text-primary)}.fui-breadcrumb-item--disabled .fui-breadcrumb-item__text{color:var(--fui-text-disabled)}.fui-breadcrumb-item__separator{display:flex;align-items:center;color:var(--fui-text-secondary);font-size:var(--fui-font-size-02);-webkit-user-select:none;user-select:none;padding:0 var(--fui-gap-4, .25rem)}\n"] }]
|
|
25
25
|
}], propDecorators: { routerLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLink", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
|
|
26
26
|
|
|
27
27
|
class FuiBreadcrumbComponent {
|
|
@@ -38,13 +38,13 @@ class FuiBreadcrumbComponent {
|
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
40
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: FuiBreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
41
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.6", type: FuiBreadcrumbComponent, isStandalone: true, selector: "fui-breadcrumb", inputs: { separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "fui-breadcrumb" }, providers: [{ provide: FUI_BREADCRUMB, useExisting: FuiBreadcrumbComponent }], queries: [{ propertyName: "items", predicate: FuiBreadcrumbItemComponent, isSignal: true }], ngImport: i0, template: "<nav [attr.aria-label]=\"ariaLabel()\">\n <ol class=\"fui-breadcrumb__list\">\n <ng-content></ng-content>\n </ol>\n</nav>\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition:opacity var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-motion-fade-out{transition:opacity var(--fui-duration-fast-01) var(--fui-ease-exit) 0ms}.fui-motion-slide-in-bottom{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition:transform,opacity var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-moderate-01) var(--fui-ease-entrance)}.fui-breadcrumb{display:block}.fui-breadcrumb__list{display:flex;flex-wrap:wrap;align-items:center;list-style:none;margin:0;padding:0;gap:var(--fui-gap-4, .25rem)}.fui-breadcrumb-item{display:contents}.fui-breadcrumb-item__wrapper{display:flex;align-items:center}.fui-breadcrumb-item__link{color:var(--fui-primary);text-decoration:none;font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);transition:color var(--fui-duration-fast-02, .15s) var(--fui-ease-standard) 0ms}.fui-breadcrumb-item__link:hover{color:var(--fui-primary-80);text-decoration:underline}.fui-breadcrumb-item__link:focus-visible{outline:2px solid var(--fui-primary);outline-offset:2px;border-radius:var(--fui-border-radius-sm, 8px)}.fui-breadcrumb-item__text{font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);color:var(--fui-text-primary)}.fui-breadcrumb-item--active .fui-breadcrumb-item__text{font-weight:var(--fui-font-weight-medium, 500);color:var(--fui-text-primary)}.fui-breadcrumb-item--disabled .fui-breadcrumb-item__text{color:var(--fui-text-disabled)}.fui-breadcrumb-item__separator{display:flex;align-items:center;color:var(--fui-text-secondary);font-size:var(--fui-font-size-02);-webkit-user-select:none;user-select:none;padding:0 var(--fui-gap-4, .25rem)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
41
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.6", type: FuiBreadcrumbComponent, isStandalone: true, selector: "fui-breadcrumb", inputs: { separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "fui-breadcrumb" }, providers: [{ provide: FUI_BREADCRUMB, useExisting: FuiBreadcrumbComponent }], queries: [{ propertyName: "items", predicate: FuiBreadcrumbItemComponent, isSignal: true }], ngImport: i0, template: "<nav [attr.aria-label]=\"ariaLabel()\">\r\n <ol class=\"fui-breadcrumb__list\">\r\n <ng-content></ng-content>\r\n </ol>\r\n</nav>\r\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition:opacity var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-motion-fade-out{transition:opacity var(--fui-duration-fast-01) var(--fui-ease-exit) 0ms}.fui-motion-slide-in-bottom{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition:transform,opacity var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-moderate-01) var(--fui-ease-entrance)}.fui-breadcrumb{display:block}.fui-breadcrumb__list{display:flex;flex-wrap:wrap;align-items:center;list-style:none;margin:0;padding:0;gap:var(--fui-gap-4, .25rem)}.fui-breadcrumb-item{display:contents}.fui-breadcrumb-item__wrapper{display:flex;align-items:center}.fui-breadcrumb-item__link{color:var(--fui-primary);text-decoration:none;font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);transition:color var(--fui-duration-fast-02, .15s) var(--fui-ease-standard) 0ms}.fui-breadcrumb-item__link:hover{color:var(--fui-primary-80);text-decoration:underline}.fui-breadcrumb-item__link:focus-visible{outline:2px solid var(--fui-primary);outline-offset:2px;border-radius:var(--fui-border-radius-sm, 8px)}.fui-breadcrumb-item__text{font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);color:var(--fui-text-primary)}.fui-breadcrumb-item--active .fui-breadcrumb-item__text{font-weight:var(--fui-font-weight-medium, 500);color:var(--fui-text-primary)}.fui-breadcrumb-item--disabled .fui-breadcrumb-item__text{color:var(--fui-text-disabled)}.fui-breadcrumb-item__separator{display:flex;align-items:center;color:var(--fui-text-secondary);font-size:var(--fui-font-size-02);-webkit-user-select:none;user-select:none;padding:0 var(--fui-gap-4, .25rem)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
42
42
|
}
|
|
43
43
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: FuiBreadcrumbComponent, decorators: [{
|
|
44
44
|
type: Component,
|
|
45
45
|
args: [{ selector: 'fui-breadcrumb', standalone: true, imports: [], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
46
46
|
class: 'fui-breadcrumb',
|
|
47
|
-
}, providers: [{ provide: FUI_BREADCRUMB, useExisting: FuiBreadcrumbComponent }], template: "<nav [attr.aria-label]=\"ariaLabel()\">\n <ol class=\"fui-breadcrumb__list\">\n <ng-content></ng-content>\n </ol>\n</nav>\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition:opacity var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-motion-fade-out{transition:opacity var(--fui-duration-fast-01) var(--fui-ease-exit) 0ms}.fui-motion-slide-in-bottom{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition:transform,opacity var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-moderate-01) var(--fui-ease-entrance)}.fui-breadcrumb{display:block}.fui-breadcrumb__list{display:flex;flex-wrap:wrap;align-items:center;list-style:none;margin:0;padding:0;gap:var(--fui-gap-4, .25rem)}.fui-breadcrumb-item{display:contents}.fui-breadcrumb-item__wrapper{display:flex;align-items:center}.fui-breadcrumb-item__link{color:var(--fui-primary);text-decoration:none;font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);transition:color var(--fui-duration-fast-02, .15s) var(--fui-ease-standard) 0ms}.fui-breadcrumb-item__link:hover{color:var(--fui-primary-80);text-decoration:underline}.fui-breadcrumb-item__link:focus-visible{outline:2px solid var(--fui-primary);outline-offset:2px;border-radius:var(--fui-border-radius-sm, 8px)}.fui-breadcrumb-item__text{font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);color:var(--fui-text-primary)}.fui-breadcrumb-item--active .fui-breadcrumb-item__text{font-weight:var(--fui-font-weight-medium, 500);color:var(--fui-text-primary)}.fui-breadcrumb-item--disabled .fui-breadcrumb-item__text{color:var(--fui-text-disabled)}.fui-breadcrumb-item__separator{display:flex;align-items:center;color:var(--fui-text-secondary);font-size:var(--fui-font-size-02);-webkit-user-select:none;user-select:none;padding:0 var(--fui-gap-4, .25rem)}\n"] }]
|
|
47
|
+
}, providers: [{ provide: FUI_BREADCRUMB, useExisting: FuiBreadcrumbComponent }], template: "<nav [attr.aria-label]=\"ariaLabel()\">\r\n <ol class=\"fui-breadcrumb__list\">\r\n <ng-content></ng-content>\r\n </ol>\r\n</nav>\r\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition:opacity var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-motion-fade-out{transition:opacity var(--fui-duration-fast-01) var(--fui-ease-exit) 0ms}.fui-motion-slide-in-bottom{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition:transform,opacity var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-moderate-01) var(--fui-ease-entrance)}.fui-breadcrumb{display:block}.fui-breadcrumb__list{display:flex;flex-wrap:wrap;align-items:center;list-style:none;margin:0;padding:0;gap:var(--fui-gap-4, .25rem)}.fui-breadcrumb-item{display:contents}.fui-breadcrumb-item__wrapper{display:flex;align-items:center}.fui-breadcrumb-item__link{color:var(--fui-primary);text-decoration:none;font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);transition:color var(--fui-duration-fast-02, .15s) var(--fui-ease-standard) 0ms}.fui-breadcrumb-item__link:hover{color:var(--fui-primary-80);text-decoration:underline}.fui-breadcrumb-item__link:focus-visible{outline:2px solid var(--fui-primary);outline-offset:2px;border-radius:var(--fui-border-radius-sm, 8px)}.fui-breadcrumb-item__text{font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);color:var(--fui-text-primary)}.fui-breadcrumb-item--active .fui-breadcrumb-item__text{font-weight:var(--fui-font-weight-medium, 500);color:var(--fui-text-primary)}.fui-breadcrumb-item--disabled .fui-breadcrumb-item__text{color:var(--fui-text-disabled)}.fui-breadcrumb-item__separator{display:flex;align-items:center;color:var(--fui-text-secondary);font-size:var(--fui-font-size-02);-webkit-user-select:none;user-select:none;padding:0 var(--fui-gap-4, .25rem)}\n"] }]
|
|
48
48
|
}], ctorParameters: () => [], propDecorators: { separator: [{ type: i0.Input, args: [{ isSignal: true, alias: "separator", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => FuiBreadcrumbItemComponent), { isSignal: true }] }] } });
|
|
49
49
|
|
|
50
50
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raintonic-formaui-components-breadcrumb.mjs","sources":["../../../lib/components/breadcrumb/breadcrumb.types.ts","../../../lib/components/breadcrumb/breadcrumb-item.component.ts","../../../lib/components/breadcrumb/breadcrumb-item.component.html","../../../lib/components/breadcrumb/breadcrumb.component.ts","../../../lib/components/breadcrumb/breadcrumb.component.html","../../../lib/components/breadcrumb/raintonic-formaui-components-breadcrumb.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const FUI_BREADCRUMB = new InjectionToken<unknown>('FUI_BREADCRUMB');\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n input,\n signal,\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\n\n@Component({\n selector: 'fui-breadcrumb-item',\n standalone: true,\n imports: [RouterLink],\n templateUrl: './breadcrumb-item.component.html',\n styleUrls: ['./breadcrumb.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fui-breadcrumb-item',\n '[class.fui-breadcrumb-item--active]': 'isLast()',\n '[class.fui-breadcrumb-item--disabled]': 'disabled()',\n '[attr.aria-current]': 'isLast() ? \"page\" : null',\n },\n})\nexport class FuiBreadcrumbItemComponent {\n readonly routerLink = input<string | unknown[] | null>(null);\n readonly disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n // Set by parent breadcrumb\n readonly isLast = signal(false);\n readonly _separator = signal('/');\n\n readonly isLink = computed(() => this.routerLink() != null && !this.isLast() && !this.disabled());\n}\n","<li class=\"fui-breadcrumb-item__wrapper\">\n @if (isLink()) {\n <a class=\"fui-breadcrumb-item__link\" [routerLink]=\"routerLink()\"><ng-content></ng-content></a>\n } @else {\n <span class=\"fui-breadcrumb-item__text\"><ng-content></ng-content></span>\n }\n</li>\n@if (!isLast()) {\n <li class=\"fui-breadcrumb-item__separator\" aria-hidden=\"true\">{{ _separator() }}</li>\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, contentChildren, effect, input } from '@angular/core';\nimport { FUI_BREADCRUMB } from './breadcrumb.types';\nimport { FuiBreadcrumbItemComponent } from './breadcrumb-item.component';\n\n@Component({\n selector: 'fui-breadcrumb',\n standalone: true,\n imports: [],\n templateUrl: './breadcrumb.component.html',\n styleUrls: ['./breadcrumb.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fui-breadcrumb',\n },\n providers: [{ provide: FUI_BREADCRUMB, useExisting: FuiBreadcrumbComponent }],\n})\nexport class FuiBreadcrumbComponent {\n readonly separator = input('/');\n readonly ariaLabel = input('Breadcrumb', { alias: 'aria-label' });\n\n readonly items = contentChildren(FuiBreadcrumbItemComponent);\n\n constructor() {\n effect(() => {\n const items = this.items();\n items.forEach((item, idx) => {\n item.isLast.set(idx === items.length - 1);\n item._separator.set(this.separator());\n });\n });\n }\n}\n","<nav [attr.aria-label]=\"ariaLabel()\">\n <ol class=\"fui-breadcrumb__list\">\n <ng-content></ng-content>\n </ol>\n</nav>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAEa,cAAc,GAAG,IAAI,cAAc,CAAU,gBAAgB;;MCwB7D,0BAA0B,CAAA;AAC5B,IAAA,UAAU,GAAG,KAAK,CAA4B,IAAI,iFAAC;IACnD,QAAQ,GAAG,KAAK,CAAmB,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAG1E,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,6EAAC;AACtB,IAAA,UAAU,GAAG,MAAM,CAAC,GAAG,iFAAC;IAExB,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;uGARtF,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mCAAA,EAAA,UAAA,EAAA,qCAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,4BAAA,EAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1BvC,
|
|
1
|
+
{"version":3,"file":"raintonic-formaui-components-breadcrumb.mjs","sources":["../../../lib/components/breadcrumb/breadcrumb.types.ts","../../../lib/components/breadcrumb/breadcrumb-item.component.ts","../../../lib/components/breadcrumb/breadcrumb-item.component.html","../../../lib/components/breadcrumb/breadcrumb.component.ts","../../../lib/components/breadcrumb/breadcrumb.component.html","../../../lib/components/breadcrumb/raintonic-formaui-components-breadcrumb.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport const FUI_BREADCRUMB = new InjectionToken<unknown>('FUI_BREADCRUMB');\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ViewEncapsulation,\r\n booleanAttribute,\r\n computed,\r\n input,\r\n signal,\r\n} from '@angular/core';\r\nimport { RouterLink } from '@angular/router';\r\n\r\n@Component({\r\n selector: 'fui-breadcrumb-item',\r\n standalone: true,\r\n imports: [RouterLink],\r\n templateUrl: './breadcrumb-item.component.html',\r\n styleUrls: ['./breadcrumb.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'fui-breadcrumb-item',\r\n '[class.fui-breadcrumb-item--active]': 'isLast()',\r\n '[class.fui-breadcrumb-item--disabled]': 'disabled()',\r\n '[attr.aria-current]': 'isLast() ? \"page\" : null',\r\n },\r\n})\r\nexport class FuiBreadcrumbItemComponent {\r\n readonly routerLink = input<string | unknown[] | null>(null);\r\n readonly disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n\r\n // Set by parent breadcrumb\r\n readonly isLast = signal(false);\r\n readonly _separator = signal('/');\r\n\r\n readonly isLink = computed(() => this.routerLink() != null && !this.isLast() && !this.disabled());\r\n}\r\n","<li class=\"fui-breadcrumb-item__wrapper\">\r\n @if (isLink()) {\r\n <a class=\"fui-breadcrumb-item__link\" [routerLink]=\"routerLink()\"><ng-content></ng-content></a>\r\n } @else {\r\n <span class=\"fui-breadcrumb-item__text\"><ng-content></ng-content></span>\r\n }\r\n</li>\r\n@if (!isLast()) {\r\n <li class=\"fui-breadcrumb-item__separator\" aria-hidden=\"true\">{{ _separator() }}</li>\r\n}\r\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, contentChildren, effect, input } from '@angular/core';\r\nimport { FUI_BREADCRUMB } from './breadcrumb.types';\r\nimport { FuiBreadcrumbItemComponent } from './breadcrumb-item.component';\r\n\r\n@Component({\r\n selector: 'fui-breadcrumb',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './breadcrumb.component.html',\r\n styleUrls: ['./breadcrumb.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'fui-breadcrumb',\r\n },\r\n providers: [{ provide: FUI_BREADCRUMB, useExisting: FuiBreadcrumbComponent }],\r\n})\r\nexport class FuiBreadcrumbComponent {\r\n readonly separator = input('/');\r\n readonly ariaLabel = input('Breadcrumb', { alias: 'aria-label' });\r\n\r\n readonly items = contentChildren(FuiBreadcrumbItemComponent);\r\n\r\n constructor() {\r\n effect(() => {\r\n const items = this.items();\r\n items.forEach((item, idx) => {\r\n item.isLast.set(idx === items.length - 1);\r\n item._separator.set(this.separator());\r\n });\r\n });\r\n }\r\n}\r\n","<nav [attr.aria-label]=\"ariaLabel()\">\r\n <ol class=\"fui-breadcrumb__list\">\r\n <ng-content></ng-content>\r\n </ol>\r\n</nav>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAEa,cAAc,GAAG,IAAI,cAAc,CAAU,gBAAgB;;MCwB7D,0BAA0B,CAAA;AAC5B,IAAA,UAAU,GAAG,KAAK,CAA4B,IAAI,iFAAC;IACnD,QAAQ,GAAG,KAAK,CAAmB,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;;AAG1E,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,6EAAC;AACtB,IAAA,UAAU,GAAG,MAAM,CAAC,GAAG,iFAAC;IAExB,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;uGARtF,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA1B,0BAA0B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,mCAAA,EAAA,UAAA,EAAA,qCAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,4BAAA,EAAA,EAAA,cAAA,EAAA,qBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1BvC,2ZAUA,EAAA,MAAA,EAAA,CAAA,6zFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDIY,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAYT,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAftC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,OAAA,EACP,CAAC,UAAU,CAAC,EAAA,eAAA,EAGJ,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,qBAAqB;AAC5B,wBAAA,qCAAqC,EAAE,UAAU;AACjD,wBAAA,uCAAuC,EAAE,YAAY;AACrD,wBAAA,qBAAqB,EAAE,0BAA0B;AAClD,qBAAA,EAAA,QAAA,EAAA,2ZAAA,EAAA,MAAA,EAAA,CAAA,6zFAAA,CAAA,EAAA;;;MEPU,sBAAsB,CAAA;AACxB,IAAA,SAAS,GAAG,KAAK,CAAC,GAAG,gFAAC;IACtB,SAAS,GAAG,KAAK,CAAC,YAAY,iFAAI,KAAK,EAAE,YAAY,EAAA,CAAG;AAExD,IAAA,KAAK,GAAG,eAAe,CAAC,0BAA0B,4EAAC;AAE5D,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;YAC1B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,KAAI;AAC1B,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBACzC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;AACvC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;uGAdW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,EAAA,SAAA,EAFtB,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,sBAAsB,EAAE,CAAC,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAM5C,0BAA0B,6CCrB7D,4IAKA,EAAA,MAAA,EAAA,CAAA,6zFAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FDYa,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAblC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP,EAAE,EAAA,eAAA,EAGM,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,gBAAgB;qBACxB,EAAA,SAAA,EACU,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAA,sBAAwB,EAAE,CAAC,EAAA,QAAA,EAAA,4IAAA,EAAA,MAAA,EAAA,CAAA,6zFAAA,CAAA,EAAA;4TAM5C,0BAA0B,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AErB7D;;AAEG;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raintonic-formaui-components-button-group.mjs","sources":["../../../lib/components/button-group/button-group.component.ts","../../../lib/components/button-group/raintonic-formaui-components-button-group.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n ViewEncapsulation,\n AfterContentInit,\n ElementRef,\n Renderer2,\n inject,\n effect,\n input,\n} from '@angular/core';\n\n/**\n * # Button Group Component\n *\n * A container component that groups multiple buttons together, creating a unified\n * visual element with connected borders. Follows Carbon Design System patterns.\n *\n * ## Features\n * - Groups multiple buttons into a single visual unit\n * - Removes internal border-radius, keeping only the extremities rounded\n * - Surface-02 background with small padding\n * - Automatically handles button border-radius for first and last buttons\n *\n * ## Usage\n *\n * ### Basic Button Group\n * ```html\n * <fui-button-group>\n * <button fuiButton variant=\"outline\">Left</button>\n * <button fuiButton variant=\"outline\">Center</button>\n * <button fuiButton variant=\"outline\">Right</button>\n * </fui-button-group>\n * ```\n *\n * @example\n * ```typescript\n * import { FuiButtonGroupComponent } from '@raintonic/formaui/components/button-group';\n * import { FuiButtonDirective } from '@raintonic/formaui/components/button';\n *\n * @Component({\n * standalone: true,\n * imports: [FuiButtonGroupComponent, FuiButtonDirective],\n * template: `\n * <fui-button-group>\n * <button fuiButton variant=\"outline\">Option 1</button>\n * <button fuiButton variant=\"outline\">Option 2</button>\n * <button fuiButton variant=\"outline\">Option 3</button>\n * </fui-button-group>\n * `\n * })\n * export class MyComponent {}\n * ```\n */\n@Component({\n selector: 'fui-button-group',\n standalone: true,\n template: `<ng-content></ng-content>`,\n styleUrls: ['./button-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fui-button-group',\n role: 'group',\n '[attr.aria-label]': 'ariaLabel()',\n },\n})\nexport class FuiButtonGroupComponent implements AfterContentInit {\n /**\n * Accessible label for the button group\n */\n readonly ariaLabel = input<string | undefined>(undefined);\n\n private readonly _elementRef = inject(ElementRef);\n private readonly _renderer = inject(Renderer2);\n\n constructor() {\n // Set up an effect to handle dynamic button changes\n effect(() => {\n this._updateButtonStyles();\n });\n }\n\n ngAfterContentInit(): void {\n this._updateButtonStyles();\n }\n\n private _updateButtonStyles(): void {\n const hostElement = this._elementRef.nativeElement as HTMLElement;\n const buttons = hostElement.querySelectorAll('[fuiButton]');\n\n buttons.forEach((button, index) => {\n // Remove all position classes first\n this._renderer.removeClass(button, 'fui-button-group__button--first');\n this._renderer.removeClass(button, 'fui-button-group__button--middle');\n this._renderer.removeClass(button, 'fui-button-group__button--last');\n this._renderer.removeClass(button, 'fui-button-group__button--only');\n\n // Add appropriate class based on position\n if (buttons.length === 1) {\n this._renderer.addClass(button, 'fui-button-group__button--only');\n } else if (index === 0) {\n this._renderer.addClass(button, 'fui-button-group__button--first');\n } else if (index === buttons.length - 1) {\n this._renderer.addClass(button, 'fui-button-group__button--last');\n } else {\n this._renderer.addClass(button, 'fui-button-group__button--middle');\n }\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCG;MAcU,uBAAuB,CAAA;AAClC;;AAEG;AACM,IAAA,SAAS,GAAG,KAAK,CAAqB,SAAS,gFAAC;AAExC,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAE9C,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,mBAAmB,EAAE;AAC5B,QAAA,CAAC,CAAC;IACJ;IAEA,kBAAkB,GAAA;QAChB,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAEQ,mBAAmB,GAAA;AACzB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,aAA4B;QACjE,MAAM,OAAO,GAAG,WAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC;QAE3D,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;;YAEhC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,iCAAiC,CAAC;YACrE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,kCAAkC,CAAC;YACtE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,gCAAgC,CAAC;YACpE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,gCAAgC,CAAC;;AAGpE,YAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,gCAAgC,CAAC;YACnE;AAAO,iBAAA,IAAI,KAAK,KAAK,CAAC,EAAE;gBACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iCAAiC,CAAC;YACpE;iBAAO,IAAI,KAAK,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,gCAAgC,CAAC;YACnE;iBAAO;gBACL,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,kCAAkC,CAAC;YACrE;AACF,QAAA,CAAC,CAAC;IACJ;uGA1CW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,6VAVxB,CAAA,yBAAA,CAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yhBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAU1B,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAbnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,QAAA,EACN,CAAA,yBAAA,CAA2B,EAAA,eAAA,EAEpB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,kBAAkB;AACzB,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,mBAAmB,EAAE,aAAa;AACnC,qBAAA,EAAA,MAAA,EAAA,CAAA,yhBAAA,CAAA,EAAA;;;ACjEH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"raintonic-formaui-components-button-group.mjs","sources":["../../../lib/components/button-group/button-group.component.ts","../../../lib/components/button-group/raintonic-formaui-components-button-group.ts"],"sourcesContent":["import {\r\n Component,\r\n ChangeDetectionStrategy,\r\n ViewEncapsulation,\r\n AfterContentInit,\r\n ElementRef,\r\n Renderer2,\r\n inject,\r\n effect,\r\n input,\r\n} from '@angular/core';\r\n\r\n/**\r\n * # Button Group Component\r\n *\r\n * A container component that groups multiple buttons together, creating a unified\r\n * visual element with connected borders. Follows Carbon Design System patterns.\r\n *\r\n * ## Features\r\n * - Groups multiple buttons into a single visual unit\r\n * - Removes internal border-radius, keeping only the extremities rounded\r\n * - Surface-02 background with small padding\r\n * - Automatically handles button border-radius for first and last buttons\r\n *\r\n * ## Usage\r\n *\r\n * ### Basic Button Group\r\n * ```html\r\n * <fui-button-group>\r\n * <button fuiButton variant=\"outline\">Left</button>\r\n * <button fuiButton variant=\"outline\">Center</button>\r\n * <button fuiButton variant=\"outline\">Right</button>\r\n * </fui-button-group>\r\n * ```\r\n *\r\n * @example\r\n * ```typescript\r\n * import { FuiButtonGroupComponent } from '@raintonic/formaui/components/button-group';\r\n * import { FuiButtonDirective } from '@raintonic/formaui/components/button';\r\n *\r\n * @Component({\r\n * standalone: true,\r\n * imports: [FuiButtonGroupComponent, FuiButtonDirective],\r\n * template: `\r\n * <fui-button-group>\r\n * <button fuiButton variant=\"outline\">Option 1</button>\r\n * <button fuiButton variant=\"outline\">Option 2</button>\r\n * <button fuiButton variant=\"outline\">Option 3</button>\r\n * </fui-button-group>\r\n * `\r\n * })\r\n * export class MyComponent {}\r\n * ```\r\n */\r\n@Component({\r\n selector: 'fui-button-group',\r\n standalone: true,\r\n template: `<ng-content></ng-content>`,\r\n styleUrls: ['./button-group.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'fui-button-group',\r\n role: 'group',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n },\r\n})\r\nexport class FuiButtonGroupComponent implements AfterContentInit {\r\n /**\r\n * Accessible label for the button group\r\n */\r\n readonly ariaLabel = input<string | undefined>(undefined);\r\n\r\n private readonly _elementRef = inject(ElementRef);\r\n private readonly _renderer = inject(Renderer2);\r\n\r\n constructor() {\r\n // Set up an effect to handle dynamic button changes\r\n effect(() => {\r\n this._updateButtonStyles();\r\n });\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this._updateButtonStyles();\r\n }\r\n\r\n private _updateButtonStyles(): void {\r\n const hostElement = this._elementRef.nativeElement as HTMLElement;\r\n const buttons = hostElement.querySelectorAll('[fuiButton]');\r\n\r\n buttons.forEach((button, index) => {\r\n // Remove all position classes first\r\n this._renderer.removeClass(button, 'fui-button-group__button--first');\r\n this._renderer.removeClass(button, 'fui-button-group__button--middle');\r\n this._renderer.removeClass(button, 'fui-button-group__button--last');\r\n this._renderer.removeClass(button, 'fui-button-group__button--only');\r\n\r\n // Add appropriate class based on position\r\n if (buttons.length === 1) {\r\n this._renderer.addClass(button, 'fui-button-group__button--only');\r\n } else if (index === 0) {\r\n this._renderer.addClass(button, 'fui-button-group__button--first');\r\n } else if (index === buttons.length - 1) {\r\n this._renderer.addClass(button, 'fui-button-group__button--last');\r\n } else {\r\n this._renderer.addClass(button, 'fui-button-group__button--middle');\r\n }\r\n });\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCG;MAcU,uBAAuB,CAAA;AAClC;;AAEG;AACM,IAAA,SAAS,GAAG,KAAK,CAAqB,SAAS,gFAAC;AAExC,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,IAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AAE9C,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,mBAAmB,EAAE;AAC5B,QAAA,CAAC,CAAC;IACJ;IAEA,kBAAkB,GAAA;QAChB,IAAI,CAAC,mBAAmB,EAAE;IAC5B;IAEQ,mBAAmB,GAAA;AACzB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,aAA4B;QACjE,MAAM,OAAO,GAAG,WAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC;QAE3D,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;;YAEhC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,iCAAiC,CAAC;YACrE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,kCAAkC,CAAC;YACtE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,gCAAgC,CAAC;YACpE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,EAAE,gCAAgC,CAAC;;AAGpE,YAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;gBACxB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,gCAAgC,CAAC;YACnE;AAAO,iBAAA,IAAI,KAAK,KAAK,CAAC,EAAE;gBACtB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iCAAiC,CAAC;YACpE;iBAAO,IAAI,KAAK,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,gCAAgC,CAAC;YACnE;iBAAO;gBACL,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,kCAAkC,CAAC;YACrE;AACF,QAAA,CAAC,CAAC;IACJ;uGA1CW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,6VAVxB,CAAA,yBAAA,CAA2B,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,yhBAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAU1B,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAbnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,EAAA,UAAA,EAChB,IAAI,EAAA,QAAA,EACN,CAAA,yBAAA,CAA2B,EAAA,eAAA,EAEpB,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,IAAA,EAC/B;AACJ,wBAAA,KAAK,EAAE,kBAAkB;AACzB,wBAAA,IAAI,EAAE,OAAO;AACb,wBAAA,mBAAmB,EAAE,aAAa;AACnC,qBAAA,EAAA,MAAA,EAAA,CAAA,yhBAAA,CAAA,EAAA;;;ACjEH;;AAEG;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raintonic-formaui-components-button.mjs","sources":["../../../lib/components/button/button.directive.ts","../../../lib/components/button/raintonic-formaui-components-button.ts"],"sourcesContent":["import {\n Directive,\n ElementRef,\n Renderer2,\n input,\n computed,\n effect,\n HostListener,\n inject,\n Signal,\n AfterViewInit,\n booleanAttribute,\n} from '@angular/core';\n\n/**\n * Available button variants following Carbon Design System patterns\n */\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'outline' | 'danger' | 'link' | 'icon';\n\n/**\n * Available button sizes\n */\nexport type ButtonSize = 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\nexport const FUI_BUTTON_VARIANTS = ['primary', 'secondary', 'ghost', 'outline', 'danger', 'link', 'icon'] as const;\nexport const FUI_BUTTON_SIZES = ['sm', 'md', 'lg', 'xl', '2xl'] as const;\n\nexport type ButtonType = 'button' | 'submit' | 'reset';\n\n/**\n * # Button Directive\n *\n * A versatile button directive that can be applied to both `<button>` and `<a>` elements.\n * Follows Carbon Design System patterns with full accessibility support.\n *\n * ## Features\n * - Multiple variants: primary, secondary,ghost, outline, danger, link\n * - Six sizes: sm, md, lg, xl, 2xl, field\n * - Full accessibility support (ARIA attributes, keyboard navigation)\n * - Loading and disabled states\n * - Icon support with proper spacing\n * - Full-width option\n * - Works with both button and anchor elements\n *\n *\n * ### Link Button\n * ```html\n * <a fuiButton href=\"/dashboard\" variant=\"ghost\">Go to Dashboard</a>\n * ```\n *\n * @example\n * ```typescript\n * import { FuiButtonDirective } from '@raintonic/formaui/components/button';\n *\n * @Component({\n * standalone: true,\n * imports: [FuiButtonDirective],\n * template: `\n * <button fuiButton variant=\"primary\" (click)=\"save()\">\n * Save Changes\n * </button>\n * `\n * })\n * export class MyComponent {\n * save() {\n * // Handle save action\n * }\n * }\n * ```\n */\n@Directive({\n selector: 'button[fuiButton], a[fuiButton]',\n standalone: true,\n host: {\n '[class]': 'computedClasses()',\n // Use attribute binding for boolean disabled; valid on <button>, ignored on <a>\n '[attr.disabled]': 'isButton && (disabled() || loading()) ? \"\" : null',\n // ARIA: present only when true\n '[attr.aria-disabled]': '(disabled() || loading()) ? \"true\" : null',\n '[attr.aria-busy]': 'loading() ? \"true\" : null',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-live]': 'loading() ? \"polite\" : null',\n // For anchors, provide role and manage tabindex\n '[attr.role]': 'isAnchor ? \"button\" : null',\n '[attr.tabindex]': 'isAnchor && (disabled() || loading()) ? \"-1\" : null',\n // Optionally prevent interactions for anchors when disabled/loading\n '[style.pointer-events]': 'isAnchor && (disabled() || loading()) ? \"none\" : null',\n },\n})\nexport class FuiButtonDirective implements AfterViewInit {\n /**\n * Button variant that determines the color scheme\n * @default 'primary'\n */\n readonly variant = input<ButtonVariant, ButtonVariant | string>('primary', {\n transform: (v) => ((FUI_BUTTON_VARIANTS as readonly string[]).includes(v) ? (v as ButtonVariant) : 'primary'),\n });\n\n /**\n * Button size\n * @default 'md'\n */\n readonly size = input<ButtonSize, ButtonSize | string>('md', {\n transform: (v) => ((FUI_BUTTON_SIZES as readonly string[]).includes(v) ? (v as ButtonSize) : 'md'),\n });\n\n /**\n * Whether the button is disabled\n * @default false\n */\n readonly disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Whether the button should take full width of its container\n * @default false\n */\n readonly fullWidth = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Whether the button is in loading state\n * @default false\n */\n readonly loading = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Whether the button contains only an icon (for proper padding)\n * @default false\n */\n readonly iconOnly = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Accessible label for icon-only buttons.\n * Required when `iconOnly` is true so screen readers can announce the button's purpose.\n */\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n\n /**\n * Button type for native button elements\n * @default 'button'\n */\n readonly type = input<ButtonType>('button');\n\n // Computed properties\n readonly computedClasses: Signal<string> = computed(() => {\n const classes: string[] = ['fui-button', `fui-button--${this.variant()}`, `fui-button--${this.size()}`];\n\n if (this.disabled()) {\n classes.push('fui-button--disabled');\n }\n\n if (this.fullWidth()) {\n classes.push('fui-button--full-width');\n }\n\n if (this.loading()) {\n classes.push('fui-button--loading');\n }\n\n if (this.iconOnly()) {\n classes.push('fui-button--icon-only');\n }\n\n return classes.join(' ');\n });\n\n private readonly _elementRef: ElementRef<HTMLElement> = inject(ElementRef);\n private readonly _renderer: Renderer2 = inject(Renderer2);\n\n // Element kind guards\n get isButton(): boolean {\n return this._elementRef.nativeElement.tagName.toLowerCase() === 'button';\n }\n get isAnchor(): boolean {\n return this._elementRef.nativeElement.tagName.toLowerCase() === 'a';\n }\n\n constructor() {\n // Manage loading spinner and anchor href disabled-state together\n effect(() => {\n if (this.loading()) {\n this._addLoadingSpinner();\n } else {\n this._removeLoadingSpinner();\n }\n this._syncAnchorHrefDisabledState();\n });\n }\n\n ngAfterViewInit(): void {\n // Ensure explicit type for native buttons to prevent accidental form submit\n const el = this._elementRef.nativeElement;\n if (this.isButton) {\n this._renderer.setAttribute(el, 'type', this.type());\n }\n }\n\n @HostListener('click', ['$event'])\n onClick(event: Event): void {\n if (this.disabled() || this.loading()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n }\n\n @HostListener('keydown', ['$event'])\n onKeydown(event: Event): void {\n if (this.disabled() || this.loading()) {\n event.preventDefault();\n return;\n }\n\n // Only synthesize activation for anchors\n if (this.isAnchor) {\n const ke = event as KeyboardEvent;\n if (ke.key === 'Enter') {\n event.preventDefault();\n this._elementRef.nativeElement.click();\n } else if (ke.key === ' ') {\n // prevent page scroll; activation handled on keyup\n event.preventDefault();\n }\n }\n }\n\n @HostListener('keyup', ['$event'])\n onKeyup(event: Event): void {\n if (this.disabled() || this.loading()) {\n return;\n }\n if (this.isAnchor && (event as KeyboardEvent).key === ' ') {\n this._elementRef.nativeElement.click();\n }\n }\n\n private _addLoadingSpinner(): void {\n // Prevent duplicate spinner nodes\n if (this._elementRef.nativeElement.querySelector('.fui-icon')) return;\n\n const spinner = this._renderer.createElement('fui-icon');\n this._renderer.addClass(spinner, 'fui-button__spinner');\n this._renderer.setAttribute(spinner, 'aria-hidden', 'true');\n\n // Add spinner icon\n const spinnerIcon = this._renderer.createElement('span');\n this._renderer.addClass(spinnerIcon, 'fui-button__spinner-icon');\n this._renderer.appendChild(spinner, spinnerIcon);\n\n this._renderer.appendChild(this._elementRef.nativeElement, spinner);\n }\n\n private _removeLoadingSpinner(): void {\n const spinner = this._elementRef.nativeElement.querySelector('.fui-button__spinner');\n if (spinner) {\n this._renderer.removeChild(this._elementRef.nativeElement, spinner);\n }\n }\n\n private _syncAnchorHrefDisabledState(): void {\n const el = this._elementRef.nativeElement as HTMLElement & { getAttribute(name: string): string | null };\n if (!this.isAnchor) return;\n const disabledLike = this.disabled() || this.loading();\n const stored = el.getAttribute('data-fuiStoredHref');\n const href = el.getAttribute('href');\n\n if (disabledLike && href) {\n this._renderer.setAttribute(el, 'data-fuiStoredHref', href);\n this._renderer.removeAttribute(el, 'href');\n } else if (!disabledLike && !href && stored) {\n this._renderer.setAttribute(el, 'href', stored);\n this._renderer.removeAttribute(el, 'data-fuiStoredHref');\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":"raintonic-formaui-components-button.mjs","sources":["../../../lib/components/button/button.directive.ts","../../../lib/components/button/raintonic-formaui-components-button.ts"],"sourcesContent":["import {\r\n Directive,\r\n ElementRef,\r\n Renderer2,\r\n input,\r\n computed,\r\n effect,\r\n HostListener,\r\n inject,\r\n Signal,\r\n AfterViewInit,\r\n booleanAttribute,\r\n} from '@angular/core';\r\n\r\n/**\r\n * Available button variants following Carbon Design System patterns\r\n */\r\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'outline' | 'danger' | 'link' | 'icon';\r\n\r\n/**\r\n * Available button sizes\r\n */\r\nexport type ButtonSize = 'sm' | 'md' | 'lg' | 'xl' | '2xl';\r\n\r\nexport const FUI_BUTTON_VARIANTS = ['primary', 'secondary', 'ghost', 'outline', 'danger', 'link', 'icon'] as const;\r\nexport const FUI_BUTTON_SIZES = ['sm', 'md', 'lg', 'xl', '2xl'] as const;\r\n\r\nexport type ButtonType = 'button' | 'submit' | 'reset';\r\n\r\n/**\r\n * # Button Directive\r\n *\r\n * A versatile button directive that can be applied to both `<button>` and `<a>` elements.\r\n * Follows Carbon Design System patterns with full accessibility support.\r\n *\r\n * ## Features\r\n * - Multiple variants: primary, secondary,ghost, outline, danger, link\r\n * - Six sizes: sm, md, lg, xl, 2xl, field\r\n * - Full accessibility support (ARIA attributes, keyboard navigation)\r\n * - Loading and disabled states\r\n * - Icon support with proper spacing\r\n * - Full-width option\r\n * - Works with both button and anchor elements\r\n *\r\n *\r\n * ### Link Button\r\n * ```html\r\n * <a fuiButton href=\"/dashboard\" variant=\"ghost\">Go to Dashboard</a>\r\n * ```\r\n *\r\n * @example\r\n * ```typescript\r\n * import { FuiButtonDirective } from '@raintonic/formaui/components/button';\r\n *\r\n * @Component({\r\n * standalone: true,\r\n * imports: [FuiButtonDirective],\r\n * template: `\r\n * <button fuiButton variant=\"primary\" (click)=\"save()\">\r\n * Save Changes\r\n * </button>\r\n * `\r\n * })\r\n * export class MyComponent {\r\n * save() {\r\n * // Handle save action\r\n * }\r\n * }\r\n * ```\r\n */\r\n@Directive({\r\n selector: 'button[fuiButton], a[fuiButton]',\r\n standalone: true,\r\n host: {\r\n '[class]': 'computedClasses()',\r\n // Use attribute binding for boolean disabled; valid on <button>, ignored on <a>\r\n '[attr.disabled]': 'isButton && (disabled() || loading()) ? \"\" : null',\r\n // ARIA: present only when true\r\n '[attr.aria-disabled]': '(disabled() || loading()) ? \"true\" : null',\r\n '[attr.aria-busy]': 'loading() ? \"true\" : null',\r\n '[attr.aria-label]': 'ariaLabel()',\r\n '[attr.aria-live]': 'loading() ? \"polite\" : null',\r\n // For anchors, provide role and manage tabindex\r\n '[attr.role]': 'isAnchor ? \"button\" : null',\r\n '[attr.tabindex]': 'isAnchor && (disabled() || loading()) ? \"-1\" : null',\r\n // Optionally prevent interactions for anchors when disabled/loading\r\n '[style.pointer-events]': 'isAnchor && (disabled() || loading()) ? \"none\" : null',\r\n },\r\n})\r\nexport class FuiButtonDirective implements AfterViewInit {\r\n /**\r\n * Button variant that determines the color scheme\r\n * @default 'primary'\r\n */\r\n readonly variant = input<ButtonVariant, ButtonVariant | string>('primary', {\r\n transform: (v) => ((FUI_BUTTON_VARIANTS as readonly string[]).includes(v) ? (v as ButtonVariant) : 'primary'),\r\n });\r\n\r\n /**\r\n * Button size\r\n * @default 'md'\r\n */\r\n readonly size = input<ButtonSize, ButtonSize | string>('md', {\r\n transform: (v) => ((FUI_BUTTON_SIZES as readonly string[]).includes(v) ? (v as ButtonSize) : 'md'),\r\n });\r\n\r\n /**\r\n * Whether the button is disabled\r\n * @default false\r\n */\r\n readonly disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Whether the button should take full width of its container\r\n * @default false\r\n */\r\n readonly fullWidth = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Whether the button is in loading state\r\n * @default false\r\n */\r\n readonly loading = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Whether the button contains only an icon (for proper padding)\r\n * @default false\r\n */\r\n readonly iconOnly = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Accessible label for icon-only buttons.\r\n * Required when `iconOnly` is true so screen readers can announce the button's purpose.\r\n */\r\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\r\n\r\n /**\r\n * Button type for native button elements\r\n * @default 'button'\r\n */\r\n readonly type = input<ButtonType>('button');\r\n\r\n // Computed properties\r\n readonly computedClasses: Signal<string> = computed(() => {\r\n const classes: string[] = ['fui-button', `fui-button--${this.variant()}`, `fui-button--${this.size()}`];\r\n\r\n if (this.disabled()) {\r\n classes.push('fui-button--disabled');\r\n }\r\n\r\n if (this.fullWidth()) {\r\n classes.push('fui-button--full-width');\r\n }\r\n\r\n if (this.loading()) {\r\n classes.push('fui-button--loading');\r\n }\r\n\r\n if (this.iconOnly()) {\r\n classes.push('fui-button--icon-only');\r\n }\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n private readonly _elementRef: ElementRef<HTMLElement> = inject(ElementRef);\r\n private readonly _renderer: Renderer2 = inject(Renderer2);\r\n\r\n // Element kind guards\r\n get isButton(): boolean {\r\n return this._elementRef.nativeElement.tagName.toLowerCase() === 'button';\r\n }\r\n get isAnchor(): boolean {\r\n return this._elementRef.nativeElement.tagName.toLowerCase() === 'a';\r\n }\r\n\r\n constructor() {\r\n // Manage loading spinner and anchor href disabled-state together\r\n effect(() => {\r\n if (this.loading()) {\r\n this._addLoadingSpinner();\r\n } else {\r\n this._removeLoadingSpinner();\r\n }\r\n this._syncAnchorHrefDisabledState();\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n // Ensure explicit type for native buttons to prevent accidental form submit\r\n const el = this._elementRef.nativeElement;\r\n if (this.isButton) {\r\n this._renderer.setAttribute(el, 'type', this.type());\r\n }\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(event: Event): void {\r\n if (this.disabled() || this.loading()) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return;\r\n }\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n onKeydown(event: Event): void {\r\n if (this.disabled() || this.loading()) {\r\n event.preventDefault();\r\n return;\r\n }\r\n\r\n // Only synthesize activation for anchors\r\n if (this.isAnchor) {\r\n const ke = event as KeyboardEvent;\r\n if (ke.key === 'Enter') {\r\n event.preventDefault();\r\n this._elementRef.nativeElement.click();\r\n } else if (ke.key === ' ') {\r\n // prevent page scroll; activation handled on keyup\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n @HostListener('keyup', ['$event'])\r\n onKeyup(event: Event): void {\r\n if (this.disabled() || this.loading()) {\r\n return;\r\n }\r\n if (this.isAnchor && (event as KeyboardEvent).key === ' ') {\r\n this._elementRef.nativeElement.click();\r\n }\r\n }\r\n\r\n private _addLoadingSpinner(): void {\r\n // Prevent duplicate spinner nodes\r\n if (this._elementRef.nativeElement.querySelector('.fui-icon')) return;\r\n\r\n const spinner = this._renderer.createElement('fui-icon');\r\n this._renderer.addClass(spinner, 'fui-button__spinner');\r\n this._renderer.setAttribute(spinner, 'aria-hidden', 'true');\r\n\r\n // Add spinner icon\r\n const spinnerIcon = this._renderer.createElement('span');\r\n this._renderer.addClass(spinnerIcon, 'fui-button__spinner-icon');\r\n this._renderer.appendChild(spinner, spinnerIcon);\r\n\r\n this._renderer.appendChild(this._elementRef.nativeElement, spinner);\r\n }\r\n\r\n private _removeLoadingSpinner(): void {\r\n const spinner = this._elementRef.nativeElement.querySelector('.fui-button__spinner');\r\n if (spinner) {\r\n this._renderer.removeChild(this._elementRef.nativeElement, spinner);\r\n }\r\n }\r\n\r\n private _syncAnchorHrefDisabledState(): void {\r\n const el = this._elementRef.nativeElement as HTMLElement & { getAttribute(name: string): string | null };\r\n if (!this.isAnchor) return;\r\n const disabledLike = this.disabled() || this.loading();\r\n const stored = el.getAttribute('data-fuiStoredHref');\r\n const href = el.getAttribute('href');\r\n\r\n if (disabledLike && href) {\r\n this._renderer.setAttribute(el, 'data-fuiStoredHref', href);\r\n this._renderer.removeAttribute(el, 'href');\r\n } else if (!disabledLike && !href && stored) {\r\n this._renderer.setAttribute(el, 'href', stored);\r\n this._renderer.removeAttribute(el, 'data-fuiStoredHref');\r\n }\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raintonic-formaui-components-card.mjs","sources":["../../../lib/components/card/card-header.component.ts","../../../lib/components/card/card-header.component.html","../../../lib/components/card/card-actions.component.ts","../../../lib/components/card/card-actions.component.html","../../../lib/components/card/card.component.ts","../../../lib/components/card/card.component.html","../../../lib/components/card/raintonic-formaui-components-card.ts"],"sourcesContent":["import { Component, input, InputSignal } from '@angular/core';\n\n/**\n * # FuiCardHeader Component\n *\n * Header section for cards with optional title, subtitle, and additional content.\n *\n * ## Usage\n * ```html\n * <fui-card-header title=\"Card Title\" subtitle=\"Optional subtitle\">\n * <button fuiButton variant=\"ghost\">\n * <fui-icon name=\"dots-three\"></fui-icon>\n * </button>\n * </fui-card-header>\n * ```\n */\n@Component({\n selector: 'fui-card-header',\n standalone: true,\n imports: [],\n templateUrl: './card-header.component.html',\n host: {\n class: 'fui-card-header',\n },\n})\nexport class FuiCardHeaderComponent {\n /**\n * Unique id for linking with aria-labelledby from the card\n */\n readonly hostId = `fui-card-header-${Math.random().toString(36).slice(2)}`;\n\n /**\n * Main title text for the card header\n */\n readonly title: InputSignal<string | undefined> = input<string>();\n\n /**\n * Optional subtitle text for the card header\n */\n readonly subtitle: InputSignal<string | undefined> = input<string>();\n}\n","@if (title()) {\r\n <div class=\"fui-card-header__title\" [attr.id]=\"hostId\">\r\n {{ title() }}\r\n </div>\r\n}\r\n@if (subtitle()) {\r\n <div class=\"fui-card-header__subtitle\">\r\n {{ subtitle() }}\r\n </div>\r\n}\r\n<div class=\"fui-card-header__content\">\r\n <ng-content></ng-content>\r\n</div>\r\n","import { Component, input, InputSignal } from '@angular/core';\n\n/**\n * # FuiCardActions Component\n *\n * Actions section for cards, typically containing buttons or other interactive elements.\n *\n * ## Usage\n * ```html\n * <fui-card-actions align=\"end\">\n * <button fuiButton variant=\"tertiary\">Cancel</button>\n * <button fuiButton variant=\"primary\" color=\"primary\">Save</button>\n * </fui-card-actions>\n * ```\n *\n * ### Paddingless Actions\n * ```html\n * <fui-card-actions align=\"start\" paddingless=\"true\">\n * <button fuiButton variant=\"ghost\">\n * <fui-icon name=\"heart\"></fui-icon>\n * </button>\n * </fui-card-actions>\n * ```\n */\n@Component({\n selector: 'fui-card-actions',\n standalone: true,\n templateUrl: './card-actions.component.html',\n host: {\n class: 'fui-card-actions',\n '[class.fui-card-actions--align-start]': 'align() === \"start\"',\n '[class.fui-card-actions--align-center]': 'align() === \"center\"',\n '[class.fui-card-actions--align-end]': 'align() === \"end\"',\n '[class.fui-card-actions--paddingless]': 'paddingless()',\n },\n})\nexport class FuiCardActionsComponent {\n /**\n * Alignment of actions within the container\n * @default 'end'\n */\n readonly align: InputSignal<'start' | 'center' | 'end'> = input<'start' | 'center' | 'end'>('end');\n\n /**\n * Whether to remove padding from the actions container\n * @default false\n */\n readonly paddingless: InputSignal<boolean> = input(false);\n}\n","<ng-content></ng-content>\r\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ContentChild,\n HostListener,\n input,\n InputSignal,\n Signal,\n signal,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\n\nimport { FuiCardHeaderComponent } from './card-header.component';\nimport { FuiCardActionsComponent } from './card-actions.component';\n\n/**\n * Available card variants following Carbon Design System patterns\n */\nexport type FuiCardVariant = 'elevated' | 'outlined' | 'flat';\n\n/**\n * Available padding options for card content\n */\nexport type FuiCardPadding = 'none' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * # FuiCard Component\n *\n * A flexible container component following Carbon Design System patterns.\n * Provides a structured layout with optional header, content, and actions sections.\n *\n * ## Features\n * - Multiple variants: elevated, outlined, flat\n * - Configurable padding: none, sm, md, lg, xl\n * - Structured content areas: header, content, actions\n * - Clickable state support with hover animations\n * - Disabled state support\n * - Full accessibility support\n * - Smooth motion transitions\n *\n * ## Usage\n *\n * ### Basic Card\n * ```html\n * <fui-card>\n * <p>Card content goes here</p>\n * </fui-card>\n * ```\n *\n * ### Card with Header and Actions\n * ```html\n * <fui-card variant=\"outlined\">\n * <fui-card-header title=\"Card Title\" subtitle=\"Optional subtitle\">\n * <button fuiButton variant=\"ghost\" size=\"sm\" [iconOnly]=\"true\">\n * <fui-icon name=\"overflow-menu-vertical\"></fui-icon>\n * </button>\n * </fui-card-header>\n *\n * <p>Main card content</p>\n *\n * <fui-card-actions align=\"end\">\n * <button fuiButton variant=\"secondary\" kind=\"ghost\">Cancel</button>\n * <button fuiButton variant=\"primary\">Save</button>\n * </fui-card-actions>\n * </fui-card>\n * ```\n *\n * ### Clickable Card\n * ```html\n * <fui-card [clickable]=\"true\" (click)=\"handleCardClick()\">\n * <p>This entire card is clickable</p>\n * </fui-card>\n * ```\n *\n * @example\n * ```typescript\n * import { FuiCardComponent, FuiCardHeaderComponent, FuiCardActionsComponent } from '@raintonic/formaui/components/card';\n *\n * @Component({\n * standalone: true,\n * imports: [FuiCardComponent, FuiCardHeaderComponent, FuiCardActionsComponent],\n * template: `\n * <fui-card variant=\"elevated\" padding=\"lg\">\n * <fui-card-header title=\"User Profile\"></fui-card-header>\n * <div class=\"user-info\">\n * <p>User details here...</p>\n * </div>\n * <fui-card-actions>\n * <button fuiButton>Edit</button>\n * </fui-card-actions>\n * </fui-card>\n * `\n * })\n * export class UserCardComponent {}\n * ```\n */\n@Component({\n selector: 'fui-card',\n standalone: true,\n imports: [],\n templateUrl: './card.component.html',\n styleUrls: ['./card.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fui-card',\n '[class]': 'computedClasses()',\n '[attr.role]': 'clickable() ? \"button\" : \"region\"',\n '[attr.tabindex]': 'clickable() && !disabled() ? \"0\" : null',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.aria-labelledby]': 'headerId',\n },\n})\nexport class FuiCardComponent implements AfterContentInit {\n /**\n * Card variant that determines the visual style\n * @default 'outlined'\n */\n readonly variant: InputSignal<FuiCardVariant> = input<FuiCardVariant>('outlined');\n\n /**\n * Padding applied to card content\n * @default 'lg'\n */\n readonly padding: InputSignal<FuiCardPadding> = input<FuiCardPadding>('lg');\n\n /**\n * Whether the card is clickable (adds hover effects and cursor pointer)\n * @default false\n */\n readonly clickable: InputSignal<boolean> = input(false);\n\n /**\n * Whether the card is disabled\n * @default false\n */\n readonly disabled: InputSignal<boolean> = input(false);\n\n // Animation state\n readonly hovered: WritableSignal<boolean> = signal(false);\n readonly liftState: Signal<'idle' | 'lifted'> = computed(() =>\n this.clickable() && this.hovered() && !this.disabled() ? 'lifted' : 'idle',\n );\n\n // Projected content queries and ARIA label linkage\n @ContentChild(FuiCardHeaderComponent) headerCmp?: FuiCardHeaderComponent;\n @ContentChild(FuiCardActionsComponent) actionsCmp?: FuiCardActionsComponent;\n\n headerId = '';\n\n // Computed classes\n readonly computedClasses: Signal<string> = computed(() => {\n const classes: string[] = [`fui-card--${this.variant()}`, `fui-card--padding-${this.padding()}`];\n\n if (this.clickable()) {\n classes.push('fui-card--clickable');\n }\n\n if (this.disabled()) {\n classes.push('fui-card--disabled');\n }\n\n if (this.hovered()) {\n classes.push('fui-card--hovered');\n }\n\n return classes.join(' ');\n });\n\n @HostListener('mouseenter')\n onMouseEnter(): void {\n if (this.clickable() && !this.disabled()) {\n this.hovered.set(true);\n }\n }\n\n @HostListener('mouseleave')\n onMouseLeave(): void {\n this.hovered.set(false);\n }\n\n @HostListener('keydown', ['$event'])\n onKeyDown(event: KeyboardEvent): void {\n if (this.clickable() && !this.disabled() && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n (event.target as HTMLElement).click();\n }\n }\n\n @HostListener('click', ['$event'])\n onClick(event: MouseEvent): void {\n if (this.disabled()) {\n event.stopImmediatePropagation();\n event.preventDefault();\n }\n }\n\n ngAfterContentInit(): void {\n this.headerId = this.headerCmp ? this.headerCmp.hostId : '';\n }\n\n // Check if header content is projected\n get hasHeader(): boolean {\n return !!this.headerCmp;\n }\n\n // Check if actions content is projected\n get hasActions(): boolean {\n return !!this.actionsCmp;\n }\n}\n","@if (hasHeader) {\r\n <div class=\"fui-card__header\">\r\n <ng-content select=\"fui-card-header, [rtCardHeader]\"></ng-content>\r\n </div>\r\n}\r\n\r\n<div class=\"fui-card__content\" [class.fui-card__content--no-padding]=\"padding() === 'none'\">\r\n <ng-content></ng-content>\r\n</div>\r\n\r\n@if (hasActions) {\r\n <div class=\"fui-card__actions\">\r\n <ng-content select=\"fui-card-actions, [rtCardActions]\"></ng-content>\r\n </div>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"raintonic-formaui-components-card.mjs","sources":["../../../lib/components/card/card-header.component.ts","../../../lib/components/card/card-header.component.html","../../../lib/components/card/card-actions.component.ts","../../../lib/components/card/card-actions.component.html","../../../lib/components/card/card.component.ts","../../../lib/components/card/card.component.html","../../../lib/components/card/raintonic-formaui-components-card.ts"],"sourcesContent":["import { Component, input, InputSignal } from '@angular/core';\r\n\r\n/**\r\n * # FuiCardHeader Component\r\n *\r\n * Header section for cards with optional title, subtitle, and additional content.\r\n *\r\n * ## Usage\r\n * ```html\r\n * <fui-card-header title=\"Card Title\" subtitle=\"Optional subtitle\">\r\n * <button fuiButton variant=\"ghost\">\r\n * <fui-icon name=\"dots-three\"></fui-icon>\r\n * </button>\r\n * </fui-card-header>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'fui-card-header',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './card-header.component.html',\r\n host: {\r\n class: 'fui-card-header',\r\n },\r\n})\r\nexport class FuiCardHeaderComponent {\r\n /**\r\n * Unique id for linking with aria-labelledby from the card\r\n */\r\n readonly hostId = `fui-card-header-${Math.random().toString(36).slice(2)}`;\r\n\r\n /**\r\n * Main title text for the card header\r\n */\r\n readonly title: InputSignal<string | undefined> = input<string>();\r\n\r\n /**\r\n * Optional subtitle text for the card header\r\n */\r\n readonly subtitle: InputSignal<string | undefined> = input<string>();\r\n}\r\n","@if (title()) {\r\n <div class=\"fui-card-header__title\" [attr.id]=\"hostId\">\r\n {{ title() }}\r\n </div>\r\n}\r\n@if (subtitle()) {\r\n <div class=\"fui-card-header__subtitle\">\r\n {{ subtitle() }}\r\n </div>\r\n}\r\n<div class=\"fui-card-header__content\">\r\n <ng-content></ng-content>\r\n</div>\r\n","import { Component, input, InputSignal } from '@angular/core';\r\n\r\n/**\r\n * # FuiCardActions Component\r\n *\r\n * Actions section for cards, typically containing buttons or other interactive elements.\r\n *\r\n * ## Usage\r\n * ```html\r\n * <fui-card-actions align=\"end\">\r\n * <button fuiButton variant=\"tertiary\">Cancel</button>\r\n * <button fuiButton variant=\"primary\" color=\"primary\">Save</button>\r\n * </fui-card-actions>\r\n * ```\r\n *\r\n * ### Paddingless Actions\r\n * ```html\r\n * <fui-card-actions align=\"start\" paddingless=\"true\">\r\n * <button fuiButton variant=\"ghost\">\r\n * <fui-icon name=\"heart\"></fui-icon>\r\n * </button>\r\n * </fui-card-actions>\r\n * ```\r\n */\r\n@Component({\r\n selector: 'fui-card-actions',\r\n standalone: true,\r\n templateUrl: './card-actions.component.html',\r\n host: {\r\n class: 'fui-card-actions',\r\n '[class.fui-card-actions--align-start]': 'align() === \"start\"',\r\n '[class.fui-card-actions--align-center]': 'align() === \"center\"',\r\n '[class.fui-card-actions--align-end]': 'align() === \"end\"',\r\n '[class.fui-card-actions--paddingless]': 'paddingless()',\r\n },\r\n})\r\nexport class FuiCardActionsComponent {\r\n /**\r\n * Alignment of actions within the container\r\n * @default 'end'\r\n */\r\n readonly align: InputSignal<'start' | 'center' | 'end'> = input<'start' | 'center' | 'end'>('end');\r\n\r\n /**\r\n * Whether to remove padding from the actions container\r\n * @default false\r\n */\r\n readonly paddingless: InputSignal<boolean> = input(false);\r\n}\r\n","<ng-content></ng-content>\r\n","import {\r\n AfterContentInit,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n ContentChild,\r\n HostListener,\r\n input,\r\n InputSignal,\r\n Signal,\r\n signal,\r\n ViewEncapsulation,\r\n WritableSignal,\r\n} from '@angular/core';\r\n\r\nimport { FuiCardHeaderComponent } from './card-header.component';\r\nimport { FuiCardActionsComponent } from './card-actions.component';\r\n\r\n/**\r\n * Available card variants following Carbon Design System patterns\r\n */\r\nexport type FuiCardVariant = 'elevated' | 'outlined' | 'flat';\r\n\r\n/**\r\n * Available padding options for card content\r\n */\r\nexport type FuiCardPadding = 'none' | 'sm' | 'md' | 'lg' | 'xl';\r\n\r\n/**\r\n * # FuiCard Component\r\n *\r\n * A flexible container component following Carbon Design System patterns.\r\n * Provides a structured layout with optional header, content, and actions sections.\r\n *\r\n * ## Features\r\n * - Multiple variants: elevated, outlined, flat\r\n * - Configurable padding: none, sm, md, lg, xl\r\n * - Structured content areas: header, content, actions\r\n * - Clickable state support with hover animations\r\n * - Disabled state support\r\n * - Full accessibility support\r\n * - Smooth motion transitions\r\n *\r\n * ## Usage\r\n *\r\n * ### Basic Card\r\n * ```html\r\n * <fui-card>\r\n * <p>Card content goes here</p>\r\n * </fui-card>\r\n * ```\r\n *\r\n * ### Card with Header and Actions\r\n * ```html\r\n * <fui-card variant=\"outlined\">\r\n * <fui-card-header title=\"Card Title\" subtitle=\"Optional subtitle\">\r\n * <button fuiButton variant=\"ghost\" size=\"sm\" [iconOnly]=\"true\">\r\n * <fui-icon name=\"overflow-menu-vertical\"></fui-icon>\r\n * </button>\r\n * </fui-card-header>\r\n *\r\n * <p>Main card content</p>\r\n *\r\n * <fui-card-actions align=\"end\">\r\n * <button fuiButton variant=\"secondary\" kind=\"ghost\">Cancel</button>\r\n * <button fuiButton variant=\"primary\">Save</button>\r\n * </fui-card-actions>\r\n * </fui-card>\r\n * ```\r\n *\r\n * ### Clickable Card\r\n * ```html\r\n * <fui-card [clickable]=\"true\" (click)=\"handleCardClick()\">\r\n * <p>This entire card is clickable</p>\r\n * </fui-card>\r\n * ```\r\n *\r\n * @example\r\n * ```typescript\r\n * import { FuiCardComponent, FuiCardHeaderComponent, FuiCardActionsComponent } from '@raintonic/formaui/components/card';\r\n *\r\n * @Component({\r\n * standalone: true,\r\n * imports: [FuiCardComponent, FuiCardHeaderComponent, FuiCardActionsComponent],\r\n * template: `\r\n * <fui-card variant=\"elevated\" padding=\"lg\">\r\n * <fui-card-header title=\"User Profile\"></fui-card-header>\r\n * <div class=\"user-info\">\r\n * <p>User details here...</p>\r\n * </div>\r\n * <fui-card-actions>\r\n * <button fuiButton>Edit</button>\r\n * </fui-card-actions>\r\n * </fui-card>\r\n * `\r\n * })\r\n * export class UserCardComponent {}\r\n * ```\r\n */\r\n@Component({\r\n selector: 'fui-card',\r\n standalone: true,\r\n imports: [],\r\n templateUrl: './card.component.html',\r\n styleUrls: ['./card.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n host: {\r\n class: 'fui-card',\r\n '[class]': 'computedClasses()',\r\n '[attr.role]': 'clickable() ? \"button\" : \"region\"',\r\n '[attr.tabindex]': 'clickable() && !disabled() ? \"0\" : null',\r\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\r\n '[attr.aria-labelledby]': 'headerId',\r\n },\r\n})\r\nexport class FuiCardComponent implements AfterContentInit {\r\n /**\r\n * Card variant that determines the visual style\r\n * @default 'outlined'\r\n */\r\n readonly variant: InputSignal<FuiCardVariant> = input<FuiCardVariant>('outlined');\r\n\r\n /**\r\n * Padding applied to card content\r\n * @default 'lg'\r\n */\r\n readonly padding: InputSignal<FuiCardPadding> = input<FuiCardPadding>('lg');\r\n\r\n /**\r\n * Whether the card is clickable (adds hover effects and cursor pointer)\r\n * @default false\r\n */\r\n readonly clickable: InputSignal<boolean> = input(false);\r\n\r\n /**\r\n * Whether the card is disabled\r\n * @default false\r\n */\r\n readonly disabled: InputSignal<boolean> = input(false);\r\n\r\n // Animation state\r\n readonly hovered: WritableSignal<boolean> = signal(false);\r\n readonly liftState: Signal<'idle' | 'lifted'> = computed(() =>\r\n this.clickable() && this.hovered() && !this.disabled() ? 'lifted' : 'idle',\r\n );\r\n\r\n // Projected content queries and ARIA label linkage\r\n @ContentChild(FuiCardHeaderComponent) headerCmp?: FuiCardHeaderComponent;\r\n @ContentChild(FuiCardActionsComponent) actionsCmp?: FuiCardActionsComponent;\r\n\r\n headerId = '';\r\n\r\n // Computed classes\r\n readonly computedClasses: Signal<string> = computed(() => {\r\n const classes: string[] = [`fui-card--${this.variant()}`, `fui-card--padding-${this.padding()}`];\r\n\r\n if (this.clickable()) {\r\n classes.push('fui-card--clickable');\r\n }\r\n\r\n if (this.disabled()) {\r\n classes.push('fui-card--disabled');\r\n }\r\n\r\n if (this.hovered()) {\r\n classes.push('fui-card--hovered');\r\n }\r\n\r\n return classes.join(' ');\r\n });\r\n\r\n @HostListener('mouseenter')\r\n onMouseEnter(): void {\r\n if (this.clickable() && !this.disabled()) {\r\n this.hovered.set(true);\r\n }\r\n }\r\n\r\n @HostListener('mouseleave')\r\n onMouseLeave(): void {\r\n this.hovered.set(false);\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n onKeyDown(event: KeyboardEvent): void {\r\n if (this.clickable() && !this.disabled() && (event.key === 'Enter' || event.key === ' ')) {\r\n event.preventDefault();\r\n (event.target as HTMLElement).click();\r\n }\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(event: MouseEvent): void {\r\n if (this.disabled()) {\r\n event.stopImmediatePropagation();\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n this.headerId = this.headerCmp ? this.headerCmp.hostId : '';\r\n }\r\n\r\n // Check if header content is projected\r\n get hasHeader(): boolean {\r\n return !!this.headerCmp;\r\n }\r\n\r\n // Check if actions content is projected\r\n get hasActions(): boolean {\r\n return !!this.actionsCmp;\r\n }\r\n}\r\n","@if (hasHeader) {\r\n <div class=\"fui-card__header\">\r\n <ng-content select=\"fui-card-header, [rtCardHeader]\"></ng-content>\r\n </div>\r\n}\r\n\r\n<div class=\"fui-card__content\" [class.fui-card__content--no-padding]=\"padding() === 'none'\">\r\n <ng-content></ng-content>\r\n</div>\r\n\r\n@if (hasActions) {\r\n <div class=\"fui-card__actions\">\r\n <ng-content select=\"fui-card-actions, [rtCardActions]\"></ng-content>\r\n </div>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -263,7 +263,7 @@ class FuiCheckboxComponent {
|
|
|
263
263
|
useExisting: FuiCheckboxComponent,
|
|
264
264
|
multi: true,
|
|
265
265
|
},
|
|
266
|
-
], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true, isSignal: true }], ngImport: i0, template: "<label class=\"fui-checkbox__container\" [attr.for]=\"inputId\">\n <!-- Label before checkbox -->\n @if (labelPosition() === 'before') {\n <span class=\"fui-checkbox__label fui-checkbox__label--before\">\n <ng-content></ng-content>\n </span>\n }\n\n <!-- Checkbox wrapper -->\n <span class=\"fui-checkbox__frame\">\n <!-- Hidden native input -->\n <input\n #inputElement\n type=\"checkbox\"\n class=\"fui-checkbox__native-control\"\n [id]=\"inputId\"\n [name]=\"name()\"\n [value]=\"value()\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n [attr.aria-checked]=\"indeterminate() ? 'mixed' : checked()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-describedby]=\"ariaDescribedby()\"\n [attr.aria-invalid]=\"errorState() ? 'true' : null\"\n [attr.aria-required]=\"required() ? 'true' : null\"\n [attr.tabindex]=\"tabIndex()\"\n (change)=\"onInputChange($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n\n <!-- Custom checkbox visual -->\n <span class=\"fui-checkbox__checkmark\">\n <!-- Checkmark icon -->\n @if (checked() && !indeterminate()) {\n <svg\n class=\"fui-checkbox__checkmark-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n }\n\n <!-- Indeterminate icon -->\n @if (indeterminate()) {\n <svg\n class=\"fui-checkbox__indeterminate-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\n </svg>\n }\n </span>\n\n <!-- Ripple effect (when not disabled) -->\n @if (!disableRipple() && !disabled()) {\n <span class=\"fui-checkbox__ripple\"></span>\n }\n </span>\n\n <!-- Label after checkbox (default) -->\n @if (labelPosition() === 'after') {\n <span class=\"fui-checkbox__label fui-checkbox__label--after\">\n <ng-content></ng-content>\n </span>\n }\n</label>\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition:opacity var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-motion-fade-out{transition:opacity var(--fui-duration-fast-01) var(--fui-ease-exit) 0ms}.fui-motion-slide-in-bottom{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition:transform,opacity var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-moderate-01) var(--fui-ease-entrance)}.fui-checkbox{--fui-checkbox-size: 1.125rem;--fui-checkbox-border-width: 2px;--fui-checkbox-border-radius: var(--fui-border-radius-xs);--fui-checkbox-border-color: var(--fui-secondary-80);--fui-checkbox-checked-bg: var(--fui-primary);--fui-checkbox-checked-color: var(--fui-white);--fui-checkbox-label-gap: var(--fui-spacing-03);--fui-checkbox-label-font-size: var(--fui-font-size-02);--fui-checkbox-ripple-size: 2.5rem;display:inline-flex;align-items:flex-start;position:relative;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:middle}.fui-checkbox__container{display:inline-flex;align-items:center;cursor:inherit;gap:var(--fui-spacing-03);width:100%}.fui-checkbox__frame{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.125rem;height:1.125rem}.fui-checkbox__native-control{position:absolute;width:100%;height:100%;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1}.fui-checkbox__native-control:focus-visible+.fui-checkbox__checkmark{outline:2px solid var(--fui-primary);outline-offset:2px}.fui-checkbox__checkmark{display:flex;align-items:center;justify-content:center;width:1.125rem;height:1.125rem;border:2px solid var(--fui-checkbox-border-color);border-radius:var(--fui-checkbox-border-radius);background-color:transparent;transition:background-color,border-color,transform var(--fui-duration-fast-02) var(--fui-ease-standard) 0ms}.fui-checkbox__checkmark:hover{border-color:var(--fui-primary)}.fui-checkbox__checkmark-icon,.fui-checkbox__indeterminate-icon{width:.75rem;height:.75rem;color:var(--fui-checkbox-checked-color);opacity:0;transform:scale(.5);transition:opacity,transform var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-checkbox__label{font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);font-weight:var(--fui-font-weight-regular);line-height:1.5;color:var(--fui-text-primary);cursor:inherit}.fui-checkbox__label--before{order:-1}.fui-checkbox__label--after{order:1}.fui-checkbox__ripple{position:absolute;top:50%;left:50%;width:2.5rem;height:2.5rem;transform:translate(-50%,-50%);border-radius:50%;background-color:var(--fui-primary);opacity:0;pointer-events:none;transition:opacity,transform var(--fui-duration-fast-02) var(--fui-ease-standard) 0ms}.fui-checkbox:not(.fui-checkbox--disabled):hover .fui-checkbox__checkmark{border-color:var(--fui-primary-hover)}.fui-checkbox:not(.fui-checkbox--disabled):hover .fui-checkbox__ripple{opacity:.04}.fui-checkbox--focused:not(.fui-checkbox--disabled) .fui-checkbox__ripple{opacity:.08}.fui-checkbox--checked .fui-checkbox__checkmark{background-color:var(--fui-checkbox-checked-bg);border-color:var(--fui-checkbox-checked-bg)}.fui-checkbox--checked .fui-checkbox__checkmark-icon{opacity:1;transform:scale(1)}.fui-checkbox--checked:not(.fui-checkbox--disabled):hover .fui-checkbox__checkmark{background-color:var(--fui-primary-hover);border-color:var(--fui-primary-hover)}.fui-checkbox--indeterminate .fui-checkbox__checkmark{background-color:var(--fui-checkbox-checked-bg);border-color:var(--fui-checkbox-checked-bg)}.fui-checkbox--indeterminate .fui-checkbox__indeterminate-icon{opacity:1;transform:scale(1)}.fui-checkbox--indeterminate:not(.fui-checkbox--disabled):hover .fui-checkbox__checkmark{background-color:var(--fui-primary-hover);border-color:var(--fui-primary-hover)}.fui-checkbox--disabled{cursor:not-allowed;opacity:var(--fui-opacity-disabled)}.fui-checkbox--disabled .fui-checkbox__checkmark{border-color:var(--fui-text-disabled);background-color:transparent}.fui-checkbox--disabled.fui-checkbox--checked .fui-checkbox__checkmark,.fui-checkbox--disabled.fui-checkbox--indeterminate .fui-checkbox__checkmark{background-color:var(--fui-text-disabled);border-color:var(--fui-text-disabled)}.fui-checkbox--disabled .fui-checkbox__label{color:var(--fui-text-disabled)}.fui-checkbox--disabled .fui-checkbox__ripple{display:none}.fui-checkbox--readonly{cursor:default;pointer-events:none}.fui-checkbox--readonly .fui-checkbox__label{color:var(--fui-text-secondary)}.fui-checkbox--readonly .fui-checkbox__ripple{display:none}.fui-checkbox--error .fui-checkbox__checkmark{border-color:var(--fui-state-error)}.fui-checkbox--error.fui-checkbox--checked .fui-checkbox__checkmark,.fui-checkbox--error.fui-checkbox--indeterminate .fui-checkbox__checkmark{background-color:var(--fui-state-error);border-color:var(--fui-state-error)}.fui-checkbox--error .fui-checkbox__label{color:var(--fui-state-error)}.fui-checkbox--label-before .fui-checkbox__container{flex-direction:row-reverse;justify-content:flex-end}@media(prefers-contrast:high){.fui-checkbox__checkmark{border-width:3px}.fui-checkbox__native-control:focus-visible+.fui-checkbox__checkmark{outline-width:3px}}@media(prefers-reduced-motion:reduce){.fui-checkbox__checkmark,.fui-checkbox__checkmark-icon,.fui-checkbox__indeterminate-icon,.fui-checkbox__ripple{transition:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
266
|
+
], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true, isSignal: true }], ngImport: i0, template: "<label class=\"fui-checkbox__container\" [attr.for]=\"inputId\">\r\n <!-- Label before checkbox -->\r\n @if (labelPosition() === 'before') {\r\n <span class=\"fui-checkbox__label fui-checkbox__label--before\">\r\n <ng-content></ng-content>\r\n </span>\r\n }\r\n\r\n <!-- Checkbox wrapper -->\r\n <span class=\"fui-checkbox__frame\">\r\n <!-- Hidden native input -->\r\n <input\r\n #inputElement\r\n type=\"checkbox\"\r\n class=\"fui-checkbox__native-control\"\r\n [id]=\"inputId\"\r\n [name]=\"name()\"\r\n [value]=\"value()\"\r\n [checked]=\"checked()\"\r\n [disabled]=\"disabled()\"\r\n [required]=\"required()\"\r\n [attr.aria-checked]=\"indeterminate() ? 'mixed' : checked()\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [attr.aria-labelledby]=\"ariaLabelledby()\"\r\n [attr.aria-describedby]=\"ariaDescribedby()\"\r\n [attr.aria-invalid]=\"errorState() ? 'true' : null\"\r\n [attr.aria-required]=\"required() ? 'true' : null\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n (change)=\"onInputChange($event)\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n />\r\n\r\n <!-- Custom checkbox visual -->\r\n <span class=\"fui-checkbox__checkmark\">\r\n <!-- Checkmark icon -->\r\n @if (checked() && !indeterminate()) {\r\n <svg\r\n class=\"fui-checkbox__checkmark-icon\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"3\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n aria-hidden=\"true\"\r\n >\r\n <polyline points=\"20 6 9 17 4 12\"></polyline>\r\n </svg>\r\n }\r\n\r\n <!-- Indeterminate icon -->\r\n @if (indeterminate()) {\r\n <svg\r\n class=\"fui-checkbox__indeterminate-icon\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"3\"\r\n stroke-linecap=\"round\"\r\n aria-hidden=\"true\"\r\n >\r\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\r\n </svg>\r\n }\r\n </span>\r\n\r\n <!-- Ripple effect (when not disabled) -->\r\n @if (!disableRipple() && !disabled()) {\r\n <span class=\"fui-checkbox__ripple\"></span>\r\n }\r\n </span>\r\n\r\n <!-- Label after checkbox (default) -->\r\n @if (labelPosition() === 'after') {\r\n <span class=\"fui-checkbox__label fui-checkbox__label--after\">\r\n <ng-content></ng-content>\r\n </span>\r\n }\r\n</label>\r\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition:opacity var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-motion-fade-out{transition:opacity var(--fui-duration-fast-01) var(--fui-ease-exit) 0ms}.fui-motion-slide-in-bottom{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition:transform,opacity var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-moderate-01) var(--fui-ease-entrance)}.fui-checkbox{--fui-checkbox-size: 1.125rem;--fui-checkbox-border-width: 2px;--fui-checkbox-border-radius: var(--fui-border-radius-xs);--fui-checkbox-border-color: var(--fui-secondary-80);--fui-checkbox-checked-bg: var(--fui-primary);--fui-checkbox-checked-color: var(--fui-white);--fui-checkbox-label-gap: var(--fui-spacing-03);--fui-checkbox-label-font-size: var(--fui-font-size-02);--fui-checkbox-ripple-size: 2.5rem;display:inline-flex;align-items:flex-start;position:relative;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:middle}.fui-checkbox__container{display:inline-flex;align-items:center;cursor:inherit;gap:var(--fui-spacing-03);width:100%}.fui-checkbox__frame{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.125rem;height:1.125rem}.fui-checkbox__native-control{position:absolute;width:100%;height:100%;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1}.fui-checkbox__native-control:focus-visible+.fui-checkbox__checkmark{outline:2px solid var(--fui-primary);outline-offset:2px}.fui-checkbox__checkmark{display:flex;align-items:center;justify-content:center;width:1.125rem;height:1.125rem;border:2px solid var(--fui-checkbox-border-color);border-radius:var(--fui-checkbox-border-radius);background-color:transparent;transition:background-color,border-color,transform var(--fui-duration-fast-02) var(--fui-ease-standard) 0ms}.fui-checkbox__checkmark:hover{border-color:var(--fui-primary)}.fui-checkbox__checkmark-icon,.fui-checkbox__indeterminate-icon{width:.75rem;height:.75rem;color:var(--fui-checkbox-checked-color);opacity:0;transform:scale(.5);transition:opacity,transform var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-checkbox__label{font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);font-weight:var(--fui-font-weight-regular);line-height:1.5;color:var(--fui-text-primary);cursor:inherit}.fui-checkbox__label--before{order:-1}.fui-checkbox__label--after{order:1}.fui-checkbox__ripple{position:absolute;top:50%;left:50%;width:2.5rem;height:2.5rem;transform:translate(-50%,-50%);border-radius:50%;background-color:var(--fui-primary);opacity:0;pointer-events:none;transition:opacity,transform var(--fui-duration-fast-02) var(--fui-ease-standard) 0ms}.fui-checkbox:not(.fui-checkbox--disabled):hover .fui-checkbox__checkmark{border-color:var(--fui-primary-hover)}.fui-checkbox:not(.fui-checkbox--disabled):hover .fui-checkbox__ripple{opacity:.04}.fui-checkbox--focused:not(.fui-checkbox--disabled) .fui-checkbox__ripple{opacity:.08}.fui-checkbox--checked .fui-checkbox__checkmark{background-color:var(--fui-checkbox-checked-bg);border-color:var(--fui-checkbox-checked-bg)}.fui-checkbox--checked .fui-checkbox__checkmark-icon{opacity:1;transform:scale(1)}.fui-checkbox--checked:not(.fui-checkbox--disabled):hover .fui-checkbox__checkmark{background-color:var(--fui-primary-hover);border-color:var(--fui-primary-hover)}.fui-checkbox--indeterminate .fui-checkbox__checkmark{background-color:var(--fui-checkbox-checked-bg);border-color:var(--fui-checkbox-checked-bg)}.fui-checkbox--indeterminate .fui-checkbox__indeterminate-icon{opacity:1;transform:scale(1)}.fui-checkbox--indeterminate:not(.fui-checkbox--disabled):hover .fui-checkbox__checkmark{background-color:var(--fui-primary-hover);border-color:var(--fui-primary-hover)}.fui-checkbox--disabled{cursor:not-allowed;opacity:var(--fui-opacity-disabled)}.fui-checkbox--disabled .fui-checkbox__checkmark{border-color:var(--fui-text-disabled);background-color:transparent}.fui-checkbox--disabled.fui-checkbox--checked .fui-checkbox__checkmark,.fui-checkbox--disabled.fui-checkbox--indeterminate .fui-checkbox__checkmark{background-color:var(--fui-text-disabled);border-color:var(--fui-text-disabled)}.fui-checkbox--disabled .fui-checkbox__label{color:var(--fui-text-disabled)}.fui-checkbox--disabled .fui-checkbox__ripple{display:none}.fui-checkbox--readonly{cursor:default;pointer-events:none}.fui-checkbox--readonly .fui-checkbox__label{color:var(--fui-text-secondary)}.fui-checkbox--readonly .fui-checkbox__ripple{display:none}.fui-checkbox--error .fui-checkbox__checkmark{border-color:var(--fui-state-error)}.fui-checkbox--error.fui-checkbox--checked .fui-checkbox__checkmark,.fui-checkbox--error.fui-checkbox--indeterminate .fui-checkbox__checkmark{background-color:var(--fui-state-error);border-color:var(--fui-state-error)}.fui-checkbox--error .fui-checkbox__label{color:var(--fui-state-error)}.fui-checkbox--label-before .fui-checkbox__container{flex-direction:row-reverse;justify-content:flex-end}@media(prefers-contrast:high){.fui-checkbox__checkmark{border-width:3px}.fui-checkbox__native-control:focus-visible+.fui-checkbox__checkmark{outline-width:3px}}@media(prefers-reduced-motion:reduce){.fui-checkbox__checkmark,.fui-checkbox__checkmark-icon,.fui-checkbox__indeterminate-icon,.fui-checkbox__ripple{transition:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
267
267
|
}
|
|
268
268
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: FuiCheckboxComponent, decorators: [{
|
|
269
269
|
type: Component,
|
|
@@ -284,7 +284,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImpor
|
|
|
284
284
|
useExisting: FuiCheckboxComponent,
|
|
285
285
|
multi: true,
|
|
286
286
|
},
|
|
287
|
-
], template: "<label class=\"fui-checkbox__container\" [attr.for]=\"inputId\">\n <!-- Label before checkbox -->\n @if (labelPosition() === 'before') {\n <span class=\"fui-checkbox__label fui-checkbox__label--before\">\n <ng-content></ng-content>\n </span>\n }\n\n <!-- Checkbox wrapper -->\n <span class=\"fui-checkbox__frame\">\n <!-- Hidden native input -->\n <input\n #inputElement\n type=\"checkbox\"\n class=\"fui-checkbox__native-control\"\n [id]=\"inputId\"\n [name]=\"name()\"\n [value]=\"value()\"\n [checked]=\"checked()\"\n [disabled]=\"disabled()\"\n [required]=\"required()\"\n [attr.aria-checked]=\"indeterminate() ? 'mixed' : checked()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-describedby]=\"ariaDescribedby()\"\n [attr.aria-invalid]=\"errorState() ? 'true' : null\"\n [attr.aria-required]=\"required() ? 'true' : null\"\n [attr.tabindex]=\"tabIndex()\"\n (change)=\"onInputChange($event)\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n />\n\n <!-- Custom checkbox visual -->\n <span class=\"fui-checkbox__checkmark\">\n <!-- Checkmark icon -->\n @if (checked() && !indeterminate()) {\n <svg\n class=\"fui-checkbox__checkmark-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n >\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n }\n\n <!-- Indeterminate icon -->\n @if (indeterminate()) {\n <svg\n class=\"fui-checkbox__indeterminate-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\n </svg>\n }\n </span>\n\n <!-- Ripple effect (when not disabled) -->\n @if (!disableRipple() && !disabled()) {\n <span class=\"fui-checkbox__ripple\"></span>\n }\n </span>\n\n <!-- Label after checkbox (default) -->\n @if (labelPosition() === 'after') {\n <span class=\"fui-checkbox__label fui-checkbox__label--after\">\n <ng-content></ng-content>\n </span>\n }\n</label>\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition:opacity var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-motion-fade-out{transition:opacity var(--fui-duration-fast-01) var(--fui-ease-exit) 0ms}.fui-motion-slide-in-bottom{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition:transform,opacity var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-moderate-01) var(--fui-ease-entrance)}.fui-checkbox{--fui-checkbox-size: 1.125rem;--fui-checkbox-border-width: 2px;--fui-checkbox-border-radius: var(--fui-border-radius-xs);--fui-checkbox-border-color: var(--fui-secondary-80);--fui-checkbox-checked-bg: var(--fui-primary);--fui-checkbox-checked-color: var(--fui-white);--fui-checkbox-label-gap: var(--fui-spacing-03);--fui-checkbox-label-font-size: var(--fui-font-size-02);--fui-checkbox-ripple-size: 2.5rem;display:inline-flex;align-items:flex-start;position:relative;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:middle}.fui-checkbox__container{display:inline-flex;align-items:center;cursor:inherit;gap:var(--fui-spacing-03);width:100%}.fui-checkbox__frame{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.125rem;height:1.125rem}.fui-checkbox__native-control{position:absolute;width:100%;height:100%;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1}.fui-checkbox__native-control:focus-visible+.fui-checkbox__checkmark{outline:2px solid var(--fui-primary);outline-offset:2px}.fui-checkbox__checkmark{display:flex;align-items:center;justify-content:center;width:1.125rem;height:1.125rem;border:2px solid var(--fui-checkbox-border-color);border-radius:var(--fui-checkbox-border-radius);background-color:transparent;transition:background-color,border-color,transform var(--fui-duration-fast-02) var(--fui-ease-standard) 0ms}.fui-checkbox__checkmark:hover{border-color:var(--fui-primary)}.fui-checkbox__checkmark-icon,.fui-checkbox__indeterminate-icon{width:.75rem;height:.75rem;color:var(--fui-checkbox-checked-color);opacity:0;transform:scale(.5);transition:opacity,transform var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-checkbox__label{font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);font-weight:var(--fui-font-weight-regular);line-height:1.5;color:var(--fui-text-primary);cursor:inherit}.fui-checkbox__label--before{order:-1}.fui-checkbox__label--after{order:1}.fui-checkbox__ripple{position:absolute;top:50%;left:50%;width:2.5rem;height:2.5rem;transform:translate(-50%,-50%);border-radius:50%;background-color:var(--fui-primary);opacity:0;pointer-events:none;transition:opacity,transform var(--fui-duration-fast-02) var(--fui-ease-standard) 0ms}.fui-checkbox:not(.fui-checkbox--disabled):hover .fui-checkbox__checkmark{border-color:var(--fui-primary-hover)}.fui-checkbox:not(.fui-checkbox--disabled):hover .fui-checkbox__ripple{opacity:.04}.fui-checkbox--focused:not(.fui-checkbox--disabled) .fui-checkbox__ripple{opacity:.08}.fui-checkbox--checked .fui-checkbox__checkmark{background-color:var(--fui-checkbox-checked-bg);border-color:var(--fui-checkbox-checked-bg)}.fui-checkbox--checked .fui-checkbox__checkmark-icon{opacity:1;transform:scale(1)}.fui-checkbox--checked:not(.fui-checkbox--disabled):hover .fui-checkbox__checkmark{background-color:var(--fui-primary-hover);border-color:var(--fui-primary-hover)}.fui-checkbox--indeterminate .fui-checkbox__checkmark{background-color:var(--fui-checkbox-checked-bg);border-color:var(--fui-checkbox-checked-bg)}.fui-checkbox--indeterminate .fui-checkbox__indeterminate-icon{opacity:1;transform:scale(1)}.fui-checkbox--indeterminate:not(.fui-checkbox--disabled):hover .fui-checkbox__checkmark{background-color:var(--fui-primary-hover);border-color:var(--fui-primary-hover)}.fui-checkbox--disabled{cursor:not-allowed;opacity:var(--fui-opacity-disabled)}.fui-checkbox--disabled .fui-checkbox__checkmark{border-color:var(--fui-text-disabled);background-color:transparent}.fui-checkbox--disabled.fui-checkbox--checked .fui-checkbox__checkmark,.fui-checkbox--disabled.fui-checkbox--indeterminate .fui-checkbox__checkmark{background-color:var(--fui-text-disabled);border-color:var(--fui-text-disabled)}.fui-checkbox--disabled .fui-checkbox__label{color:var(--fui-text-disabled)}.fui-checkbox--disabled .fui-checkbox__ripple{display:none}.fui-checkbox--readonly{cursor:default;pointer-events:none}.fui-checkbox--readonly .fui-checkbox__label{color:var(--fui-text-secondary)}.fui-checkbox--readonly .fui-checkbox__ripple{display:none}.fui-checkbox--error .fui-checkbox__checkmark{border-color:var(--fui-state-error)}.fui-checkbox--error.fui-checkbox--checked .fui-checkbox__checkmark,.fui-checkbox--error.fui-checkbox--indeterminate .fui-checkbox__checkmark{background-color:var(--fui-state-error);border-color:var(--fui-state-error)}.fui-checkbox--error .fui-checkbox__label{color:var(--fui-state-error)}.fui-checkbox--label-before .fui-checkbox__container{flex-direction:row-reverse;justify-content:flex-end}@media(prefers-contrast:high){.fui-checkbox__checkmark{border-width:3px}.fui-checkbox__native-control:focus-visible+.fui-checkbox__checkmark{outline-width:3px}}@media(prefers-reduced-motion:reduce){.fui-checkbox__checkmark,.fui-checkbox__checkmark-icon,.fui-checkbox__indeterminate-icon,.fui-checkbox__ripple{transition:none}}\n"] }]
|
|
287
|
+
], template: "<label class=\"fui-checkbox__container\" [attr.for]=\"inputId\">\r\n <!-- Label before checkbox -->\r\n @if (labelPosition() === 'before') {\r\n <span class=\"fui-checkbox__label fui-checkbox__label--before\">\r\n <ng-content></ng-content>\r\n </span>\r\n }\r\n\r\n <!-- Checkbox wrapper -->\r\n <span class=\"fui-checkbox__frame\">\r\n <!-- Hidden native input -->\r\n <input\r\n #inputElement\r\n type=\"checkbox\"\r\n class=\"fui-checkbox__native-control\"\r\n [id]=\"inputId\"\r\n [name]=\"name()\"\r\n [value]=\"value()\"\r\n [checked]=\"checked()\"\r\n [disabled]=\"disabled()\"\r\n [required]=\"required()\"\r\n [attr.aria-checked]=\"indeterminate() ? 'mixed' : checked()\"\r\n [attr.aria-label]=\"ariaLabel()\"\r\n [attr.aria-labelledby]=\"ariaLabelledby()\"\r\n [attr.aria-describedby]=\"ariaDescribedby()\"\r\n [attr.aria-invalid]=\"errorState() ? 'true' : null\"\r\n [attr.aria-required]=\"required() ? 'true' : null\"\r\n [attr.tabindex]=\"tabIndex()\"\r\n (change)=\"onInputChange($event)\"\r\n (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\"\r\n />\r\n\r\n <!-- Custom checkbox visual -->\r\n <span class=\"fui-checkbox__checkmark\">\r\n <!-- Checkmark icon -->\r\n @if (checked() && !indeterminate()) {\r\n <svg\r\n class=\"fui-checkbox__checkmark-icon\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"3\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n aria-hidden=\"true\"\r\n >\r\n <polyline points=\"20 6 9 17 4 12\"></polyline>\r\n </svg>\r\n }\r\n\r\n <!-- Indeterminate icon -->\r\n @if (indeterminate()) {\r\n <svg\r\n class=\"fui-checkbox__indeterminate-icon\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"3\"\r\n stroke-linecap=\"round\"\r\n aria-hidden=\"true\"\r\n >\r\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\r\n </svg>\r\n }\r\n </span>\r\n\r\n <!-- Ripple effect (when not disabled) -->\r\n @if (!disableRipple() && !disabled()) {\r\n <span class=\"fui-checkbox__ripple\"></span>\r\n }\r\n </span>\r\n\r\n <!-- Label after checkbox (default) -->\r\n @if (labelPosition() === 'after') {\r\n <span class=\"fui-checkbox__label fui-checkbox__label--after\">\r\n <ng-content></ng-content>\r\n </span>\r\n }\r\n</label>\r\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition:opacity var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-motion-fade-out{transition:opacity var(--fui-duration-fast-01) var(--fui-ease-exit) 0ms}.fui-motion-slide-in-bottom{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition:transform,opacity var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-moderate-01) var(--fui-ease-entrance)}.fui-checkbox{--fui-checkbox-size: 1.125rem;--fui-checkbox-border-width: 2px;--fui-checkbox-border-radius: var(--fui-border-radius-xs);--fui-checkbox-border-color: var(--fui-secondary-80);--fui-checkbox-checked-bg: var(--fui-primary);--fui-checkbox-checked-color: var(--fui-white);--fui-checkbox-label-gap: var(--fui-spacing-03);--fui-checkbox-label-font-size: var(--fui-font-size-02);--fui-checkbox-ripple-size: 2.5rem;display:inline-flex;align-items:flex-start;position:relative;cursor:pointer;-webkit-user-select:none;user-select:none;vertical-align:middle}.fui-checkbox__container{display:inline-flex;align-items:center;cursor:inherit;gap:var(--fui-spacing-03);width:100%}.fui-checkbox__frame{position:relative;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;width:1.125rem;height:1.125rem}.fui-checkbox__native-control{position:absolute;width:100%;height:100%;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1}.fui-checkbox__native-control:focus-visible+.fui-checkbox__checkmark{outline:2px solid var(--fui-primary);outline-offset:2px}.fui-checkbox__checkmark{display:flex;align-items:center;justify-content:center;width:1.125rem;height:1.125rem;border:2px solid var(--fui-checkbox-border-color);border-radius:var(--fui-checkbox-border-radius);background-color:transparent;transition:background-color,border-color,transform var(--fui-duration-fast-02) var(--fui-ease-standard) 0ms}.fui-checkbox__checkmark:hover{border-color:var(--fui-primary)}.fui-checkbox__checkmark-icon,.fui-checkbox__indeterminate-icon{width:.75rem;height:.75rem;color:var(--fui-checkbox-checked-color);opacity:0;transform:scale(.5);transition:opacity,transform var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-checkbox__label{font-family:var(--fui-font-family-sans);font-size:var(--fui-font-size-02);font-weight:var(--fui-font-weight-regular);line-height:1.5;color:var(--fui-text-primary);cursor:inherit}.fui-checkbox__label--before{order:-1}.fui-checkbox__label--after{order:1}.fui-checkbox__ripple{position:absolute;top:50%;left:50%;width:2.5rem;height:2.5rem;transform:translate(-50%,-50%);border-radius:50%;background-color:var(--fui-primary);opacity:0;pointer-events:none;transition:opacity,transform var(--fui-duration-fast-02) var(--fui-ease-standard) 0ms}.fui-checkbox:not(.fui-checkbox--disabled):hover .fui-checkbox__checkmark{border-color:var(--fui-primary-hover)}.fui-checkbox:not(.fui-checkbox--disabled):hover .fui-checkbox__ripple{opacity:.04}.fui-checkbox--focused:not(.fui-checkbox--disabled) .fui-checkbox__ripple{opacity:.08}.fui-checkbox--checked .fui-checkbox__checkmark{background-color:var(--fui-checkbox-checked-bg);border-color:var(--fui-checkbox-checked-bg)}.fui-checkbox--checked .fui-checkbox__checkmark-icon{opacity:1;transform:scale(1)}.fui-checkbox--checked:not(.fui-checkbox--disabled):hover .fui-checkbox__checkmark{background-color:var(--fui-primary-hover);border-color:var(--fui-primary-hover)}.fui-checkbox--indeterminate .fui-checkbox__checkmark{background-color:var(--fui-checkbox-checked-bg);border-color:var(--fui-checkbox-checked-bg)}.fui-checkbox--indeterminate .fui-checkbox__indeterminate-icon{opacity:1;transform:scale(1)}.fui-checkbox--indeterminate:not(.fui-checkbox--disabled):hover .fui-checkbox__checkmark{background-color:var(--fui-primary-hover);border-color:var(--fui-primary-hover)}.fui-checkbox--disabled{cursor:not-allowed;opacity:var(--fui-opacity-disabled)}.fui-checkbox--disabled .fui-checkbox__checkmark{border-color:var(--fui-text-disabled);background-color:transparent}.fui-checkbox--disabled.fui-checkbox--checked .fui-checkbox__checkmark,.fui-checkbox--disabled.fui-checkbox--indeterminate .fui-checkbox__checkmark{background-color:var(--fui-text-disabled);border-color:var(--fui-text-disabled)}.fui-checkbox--disabled .fui-checkbox__label{color:var(--fui-text-disabled)}.fui-checkbox--disabled .fui-checkbox__ripple{display:none}.fui-checkbox--readonly{cursor:default;pointer-events:none}.fui-checkbox--readonly .fui-checkbox__label{color:var(--fui-text-secondary)}.fui-checkbox--readonly .fui-checkbox__ripple{display:none}.fui-checkbox--error .fui-checkbox__checkmark{border-color:var(--fui-state-error)}.fui-checkbox--error.fui-checkbox--checked .fui-checkbox__checkmark,.fui-checkbox--error.fui-checkbox--indeterminate .fui-checkbox__checkmark{background-color:var(--fui-state-error);border-color:var(--fui-state-error)}.fui-checkbox--error .fui-checkbox__label{color:var(--fui-state-error)}.fui-checkbox--label-before .fui-checkbox__container{flex-direction:row-reverse;justify-content:flex-end}@media(prefers-contrast:high){.fui-checkbox__checkmark{border-width:3px}.fui-checkbox__native-control:focus-visible+.fui-checkbox__checkmark{outline-width:3px}}@media(prefers-reduced-motion:reduce){.fui-checkbox__checkmark,.fui-checkbox__checkmark-icon,.fui-checkbox__indeterminate-icon,.fui-checkbox__ripple{transition:none}}\n"] }]
|
|
288
288
|
}], ctorParameters: () => [], propDecorators: { readonlyInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], checkedInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], disabledInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], indeterminateInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "indeterminate", required: false }] }], requiredInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], labelPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelPosition", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-label", required: false }] }], ariaLabelledby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-labelledby", required: false }] }], ariaDescribedby: [{ type: i0.Input, args: [{ isSignal: true, alias: "aria-describedby", required: false }] }], disableRipple: [{ type: i0.Input, args: [{ isSignal: true, alias: "disableRipple", required: false }] }], tabIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabIndex", required: false }] }], errorStateMatcher: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorStateMatcher", required: false }] }], change: [{ type: i0.Output, args: ["change"] }], indeterminateChange: [{ type: i0.Output, args: ["indeterminateChange"] }], inputElement: [{ type: i0.ViewChild, args: ['inputElement', { isSignal: true }] }] } });
|
|
289
289
|
|
|
290
290
|
/**
|