@skra/ui 0.4.0 → 0.6.0
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/consumer-guide/README.md +88 -85
- package/consumer-guide/custom-components.md +154 -0
- package/consumer-guide/wrapping-patterns.md +98 -90
- package/fesm2022/skra-ui-accordion.mjs +2 -2
- package/fesm2022/skra-ui-accordion.mjs.map +1 -1
- package/fesm2022/skra-ui-alert.mjs +2 -2
- package/fesm2022/skra-ui-alert.mjs.map +1 -1
- package/fesm2022/skra-ui-avatar.mjs.map +1 -1
- package/fesm2022/skra-ui-badge.mjs.map +1 -1
- package/fesm2022/skra-ui-button.mjs +2 -2
- package/fesm2022/skra-ui-button.mjs.map +1 -1
- package/fesm2022/skra-ui-checkbox.mjs +2 -2
- package/fesm2022/skra-ui-checkbox.mjs.map +1 -1
- package/fesm2022/skra-ui-chip.mjs +2 -2
- package/fesm2022/skra-ui-chip.mjs.map +1 -1
- package/fesm2022/skra-ui-combobox.mjs +120 -120
- package/fesm2022/skra-ui-combobox.mjs.map +1 -1
- package/fesm2022/skra-ui-core.mjs +64 -39
- package/fesm2022/skra-ui-core.mjs.map +1 -1
- package/fesm2022/skra-ui-counter.mjs.map +1 -1
- package/fesm2022/skra-ui-datepicker.mjs +605 -190
- package/fesm2022/skra-ui-datepicker.mjs.map +1 -1
- package/fesm2022/skra-ui-dialog.mjs.map +1 -1
- package/fesm2022/skra-ui-field.mjs.map +1 -1
- package/fesm2022/skra-ui-icon.mjs.map +1 -1
- package/fesm2022/skra-ui-input.mjs +2 -2
- package/fesm2022/skra-ui-input.mjs.map +1 -1
- package/fesm2022/skra-ui-kbd.mjs.map +1 -1
- package/fesm2022/skra-ui-layout.mjs.map +1 -1
- package/fesm2022/skra-ui-link.mjs +2 -2
- package/fesm2022/skra-ui-link.mjs.map +1 -1
- package/fesm2022/skra-ui-loading-indicator.mjs.map +1 -1
- package/fesm2022/skra-ui-menu.mjs +40 -16
- package/fesm2022/skra-ui-menu.mjs.map +1 -1
- package/fesm2022/skra-ui-multi-select.mjs +94 -94
- package/fesm2022/skra-ui-multi-select.mjs.map +1 -1
- package/fesm2022/skra-ui-native-select.mjs +2 -2
- package/fesm2022/skra-ui-native-select.mjs.map +1 -1
- package/fesm2022/skra-ui-popover.mjs +25 -9
- package/fesm2022/skra-ui-popover.mjs.map +1 -1
- package/fesm2022/skra-ui-progress.mjs.map +1 -1
- package/fesm2022/skra-ui-radio.mjs +2 -2
- package/fesm2022/skra-ui-radio.mjs.map +1 -1
- package/fesm2022/skra-ui-rating-display.mjs +2 -2
- package/fesm2022/skra-ui-rating-display.mjs.map +1 -1
- package/fesm2022/skra-ui-select.mjs +92 -92
- package/fesm2022/skra-ui-select.mjs.map +1 -1
- package/fesm2022/skra-ui-skeleton.mjs +8 -8
- package/fesm2022/skra-ui-skeleton.mjs.map +1 -1
- package/fesm2022/skra-ui-star-rating.mjs +2 -2
- package/fesm2022/skra-ui-star-rating.mjs.map +1 -1
- package/fesm2022/skra-ui-status-dot.mjs.map +1 -1
- package/fesm2022/skra-ui-switch.mjs +2 -2
- package/fesm2022/skra-ui-switch.mjs.map +1 -1
- package/fesm2022/skra-ui-tabs.mjs +2 -2
- package/fesm2022/skra-ui-tabs.mjs.map +1 -1
- package/fesm2022/skra-ui-textarea.mjs +2 -2
- package/fesm2022/skra-ui-textarea.mjs.map +1 -1
- package/fesm2022/skra-ui-toast.mjs +2 -2
- package/fesm2022/skra-ui-toast.mjs.map +1 -1
- package/fesm2022/skra-ui-tooltip.mjs +7 -2
- package/fesm2022/skra-ui-tooltip.mjs.map +1 -1
- package/fesm2022/skra-ui-typography.mjs.map +1 -1
- package/package.json +3 -3
- package/types/skra-ui-core.d.ts.map +1 -1
- package/types/skra-ui-datepicker.d.ts +146 -46
- package/types/skra-ui-datepicker.d.ts.map +1 -1
- package/types/skra-ui-menu.d.ts +18 -6
- package/types/skra-ui-menu.d.ts.map +1 -1
- package/types/skra-ui-popover.d.ts +13 -4
- package/types/skra-ui-popover.d.ts.map +1 -1
- package/types/skra-ui-tooltip.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skra-ui-button.mjs","sources":["../../../../libs/ui/button/src/lib/button.directives.ts","../../../../libs/ui/button/src/lib/button/button.ts","../../../../libs/ui/button/src/lib/button/button.html","../../../../libs/ui/button/src/skra-ui-button.ts"],"sourcesContent":["import { Directive } from '@angular/core';\
|
|
1
|
+
{"version":3,"file":"skra-ui-button.mjs","sources":["../../../../libs/ui/button/src/lib/button.directives.ts","../../../../libs/ui/button/src/lib/button/button.ts","../../../../libs/ui/button/src/lib/button/button.html","../../../../libs/ui/button/src/skra-ui-button.ts"],"sourcesContent":["import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[skra-start]',\n standalone: true,\n})\nexport class SkraButtonStart {}\n\n@Directive({\n selector: '[skra-end]',\n standalone: true,\n})\nexport class SkraButtonEnd {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n input,\n computed,\n contentChild,\n} from '@angular/core';\nimport { SkraButtonStart, SkraButtonEnd } from '../button.directives';\nimport { SkraLoadingIndicator } from '@skra/ui/loading-indicator';\n\n/**\n * ButtonIntent — semantic role of the action (ADR 035 §3.1).\n * Closed enum; extension requires amendment to ADR 035.\n */\nexport type ButtonIntent =\n | 'neutral'\n | 'primary'\n | 'secondary'\n | 'info'\n | 'success'\n | 'warning'\n | 'danger';\n\n/**\n * ButtonEmphasis — visual loudness within the chosen intent (ADR 035 §3.1).\n * Skin maps each level to its own treatment (filled / outlined / ghost / other).\n */\nexport type ButtonEmphasis = 'high' | 'medium' | 'low';\n\n/**\n * ButtonSize — per-instance scale relative to typography and spacing (ADR 035 §3.1).\n * Distinct from Density (ADR 016 §3.5), which is subtree-runtime.\n */\nexport type ButtonSize = 'sm' | 'md' | 'lg';\n\n@Component({\n selector: 'button[skraButton]',\n standalone: true,\n templateUrl: './button.html',\n styleUrl: './button.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n // Variant Surface reflection (ADR 035 §3.5)\n '[attr.data-skra-intent]': 'intent()',\n '[attr.data-skra-emphasis]': 'emphasis()',\n '[attr.data-skra-size]': 'size()',\n\n // State Surface reflection — Transient category (ADR 027 §3.1 cat 4)\n '[attr.data-skra-loading]': 'loading() ? \"\" : null',\n '[attr.aria-busy]': 'loading() ? \"true\" : null',\n\n // Smart Slots layout reflection (ADR 020 v2.0 §3.2 — slot-presence, exempt from State Surface per ADR 027 §3.6)\n '[attr.data-skra-has-start]': 'hasStart() ? \"\" : null',\n '[attr.data-skra-has-end]': 'hasEnd() ? \"\" : null',\n },\n})\nexport class SkraButton {\n // --- Variant Surface (ADR 035) ---\n readonly intent = input<ButtonIntent>('neutral');\n readonly emphasis = input<ButtonEmphasis>('high');\n readonly size = input<ButtonSize>('md');\n\n // --- State Surface — Transient (ADR 027 cat 4 + ADR 028) ---\n readonly loading = input(false, { transform: booleanAttribute });\n\n // --- Smart Slots v2.0 (ADR 020) ---\n readonly startSlot = contentChild(SkraButtonStart);\n readonly endSlot = contentChild(SkraButtonEnd);\n\n readonly hasStart = computed(() => !!this.startSlot());\n readonly hasEnd = computed(() => !!this.endSlot());\n\n // --- Loading Indicator Slot (ADR 028) ---\n readonly loadingIndicatorSlot = contentChild(SkraLoadingIndicator);\n readonly hasLoadingIndicator = computed(() => !!this.loadingIndicatorSlot());\n}\n","@if (hasStart()) {\r\n<span class=\"skra-button-slot-wrapper\">\r\n <ng-content select=\"[skra-start]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<span class=\"skra-button-label-wrapper\">\r\n <ng-content></ng-content>\r\n</span>\r\n\r\n@if (hasEnd()) {\r\n<span class=\"skra-button-slot-wrapper\">\r\n <ng-content select=\"[skra-end]\"></ng-content>\r\n</span>\r\n} @if (loading()) {\r\n<span class=\"skra-button-loading-indicator\" data-skra-loading-indicator>\r\n @if (hasLoadingIndicator()) {\r\n <ng-content select=\"[skraLoadingIndicator]\"></ng-content>\r\n } @else {\r\n <span data-skra-loading-indicator-fallback aria-hidden=\"true\"></span>\r\n }\r\n</span>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -72,7 +72,7 @@ class SkraCheckbox {
|
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: SkraCheckbox, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
75
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.1", type: SkraCheckbox, isStandalone: true, selector: "input[type=\"checkbox\"][skraCheckbox]", inputs: { indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "blockWhenReadonly($event)", "keydown": "blockKeyWhenReadonly($event)" }, properties: { "attr.data-skra-disabled": "context?.isDisabled() ? \"\" : null", "attr.aria-invalid": "context?.hasError() ? \"true\" : null", "attr.aria-readonly": "context?.isReadonly() ? \"true\" : null", "attr.aria-describedby": "context?.describedByIds() ?? null" } }, ngImport: i0, template: '', isInline: true, styles: [":host{appearance:none;flex-shrink:0;cursor:pointer;outline:none;background-repeat:no-repeat;background-position:center;inline-size:var(--skra-comp-field-checkbox-size);block-size:var(--skra-comp-field-checkbox-size);border-width:var(--skra-comp-field-checkbox-border-width);border-style:solid;border-color:var(--skra-comp-field-checkbox-border-color);border-radius:var(--skra-comp-field-checkbox-border-radius);background-color:var(--skra-comp-field-checkbox-background);background-size:70% 70%;transition:background-color var(--skra-comp-field-motion-duration) var(--skra-comp-field-motion-easing),border-color var(--skra-comp-field-motion-duration) var(--skra-comp-field-motion-easing),box-shadow var(--skra-comp-field-motion-duration) var(--skra-comp-field-motion-easing)}:host(:checked){background-color:var(--skra-comp-field-checkbox-checked-background);border-color:var(--skra-comp-field-checkbox-checked-background);background-image:var(--skra-comp-field-checkbox-check-glyph)}:host(:indeterminate){background-color:var(--skra-comp-field-checkbox-checked-background);border-color:var(--skra-comp-field-checkbox-checked-background);background-image:linear-gradient(to bottom,transparent 42%,var(--skra-comp-field-checkbox-check-color) 42%,var(--skra-comp-field-checkbox-check-color) 58%,transparent 58%)}:host(:hover:not(:disabled):not([aria-readonly=true])){border-color:var(--skra-comp-field-checkbox-border-color-hover)}:host(:checked:hover:not(:disabled):not([aria-readonly=true])),:host(:indeterminate:hover:not(:disabled):not([aria-readonly=true])){background-color:var(--skra-comp-field-checkbox-checked-background-hover);border-color:var(--skra-comp-field-checkbox-checked-background-hover)}:host(:focus-visible){box-shadow:0 0 0 var(--skra-comp-field-focus-ring-width) var(--skra-comp-field-focus-ring-color)}:host(:disabled),:host([data-skra-disabled]){cursor:not-allowed;opacity:var(--skra-sys-opacity-disabled)}:host([aria-readonly=true]){cursor:default;background-color:var(--skra-comp-field-background-readonly);border-color:var(--skra-comp-field-border-color-readonly)}:host(:checked[aria-readonly=true]),:host(:indeterminate[aria-readonly=true]){background-color:var(--skra-comp-field-checkbox-checked-background-readonly);border-color:var(--skra-comp-field-checkbox-checked-background-readonly)}:host([aria-invalid=true]){border-color:var(--skra-comp-field-error-color)}:host([aria-invalid=true]:focus-visible){box-shadow:0 0 0 var(--skra-comp-field-focus-ring-width) var(--skra-comp-field-error-color)}@media(prefers-reduced-motion:reduce){:host{transition:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
75
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.1", type: SkraCheckbox, isStandalone: true, selector: "input[type=\"checkbox\"][skraCheckbox]", inputs: { indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "blockWhenReadonly($event)", "keydown": "blockKeyWhenReadonly($event)" }, properties: { "attr.data-skra-disabled": "context?.isDisabled() ? \"\" : null", "attr.aria-invalid": "context?.hasError() ? \"true\" : null", "attr.aria-readonly": "context?.isReadonly() ? \"true\" : null", "attr.aria-describedby": "context?.describedByIds() ?? null" } }, ngImport: i0, template: '', isInline: true, styles: [":host{appearance:none;flex-shrink:0;cursor:pointer;outline:none;background-repeat:no-repeat;background-position:center;inline-size:var(--skra-comp-field-checkbox-size);block-size:var(--skra-comp-field-checkbox-size);border-width:var(--skra-comp-field-checkbox-border-width);border-style:solid;border-color:var(--skra-comp-field-checkbox-border-color);border-radius:var(--skra-comp-field-checkbox-border-radius);background-color:var(--skra-comp-field-checkbox-background);background-size:70% 70%;transition:background-color var(--skra-comp-field-motion-duration) var(--skra-comp-field-motion-easing),border-color var(--skra-comp-field-motion-duration) var(--skra-comp-field-motion-easing),box-shadow var(--skra-comp-field-motion-duration) var(--skra-comp-field-motion-easing)}:host(:checked){background-color:var(--skra-comp-field-checkbox-checked-background);border-color:var(--skra-comp-field-checkbox-checked-background);background-image:var(--skra-comp-field-checkbox-check-glyph)}:host(:indeterminate){background-color:var(--skra-comp-field-checkbox-checked-background);border-color:var(--skra-comp-field-checkbox-checked-background);background-image:linear-gradient(to bottom,transparent 42%,var(--skra-comp-field-checkbox-check-color) 42%,var(--skra-comp-field-checkbox-check-color) 58%,transparent 58%)}@media(hover:hover)and (pointer:fine){:host(:hover:not(:disabled):not([aria-readonly=true])){border-color:var(--skra-comp-field-checkbox-border-color-hover)}:host(:checked:hover:not(:disabled):not([aria-readonly=true])),:host(:indeterminate:hover:not(:disabled):not([aria-readonly=true])){background-color:var(--skra-comp-field-checkbox-checked-background-hover);border-color:var(--skra-comp-field-checkbox-checked-background-hover)}}:host(:focus-visible){box-shadow:0 0 0 var(--skra-comp-field-focus-ring-width) var(--skra-comp-field-focus-ring-color)}:host(:disabled),:host([data-skra-disabled]){cursor:not-allowed;opacity:var(--skra-sys-opacity-disabled)}:host([aria-readonly=true]){cursor:default;background-color:var(--skra-comp-field-background-readonly);border-color:var(--skra-comp-field-border-color-readonly)}:host(:checked[aria-readonly=true]),:host(:indeterminate[aria-readonly=true]){background-color:var(--skra-comp-field-checkbox-checked-background-readonly);border-color:var(--skra-comp-field-checkbox-checked-background-readonly);--skra-comp-field-checkbox-check-color: var( --skra-comp-field-checkbox-check-color-readonly )}:host(:checked[aria-readonly=true]){background-image:var(--skra-comp-field-checkbox-check-glyph-readonly)}:host([aria-invalid=true]){border-color:var(--skra-comp-field-error-color)}:host([aria-invalid=true]:focus-visible){box-shadow:0 0 0 var(--skra-comp-field-focus-ring-width) var(--skra-comp-field-error-color)}@media(prefers-reduced-motion:reduce){:host{transition:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
76
76
|
}
|
|
77
77
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: SkraCheckbox, decorators: [{
|
|
78
78
|
type: Component,
|
|
@@ -87,7 +87,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImpor
|
|
|
87
87
|
'[attr.aria-describedby]': 'context?.describedByIds() ?? null',
|
|
88
88
|
'(click)': 'blockWhenReadonly($event)',
|
|
89
89
|
'(keydown)': 'blockKeyWhenReadonly($event)',
|
|
90
|
-
}, styles: [":host{appearance:none;flex-shrink:0;cursor:pointer;outline:none;background-repeat:no-repeat;background-position:center;inline-size:var(--skra-comp-field-checkbox-size);block-size:var(--skra-comp-field-checkbox-size);border-width:var(--skra-comp-field-checkbox-border-width);border-style:solid;border-color:var(--skra-comp-field-checkbox-border-color);border-radius:var(--skra-comp-field-checkbox-border-radius);background-color:var(--skra-comp-field-checkbox-background);background-size:70% 70%;transition:background-color var(--skra-comp-field-motion-duration) var(--skra-comp-field-motion-easing),border-color var(--skra-comp-field-motion-duration) var(--skra-comp-field-motion-easing),box-shadow var(--skra-comp-field-motion-duration) var(--skra-comp-field-motion-easing)}:host(:checked){background-color:var(--skra-comp-field-checkbox-checked-background);border-color:var(--skra-comp-field-checkbox-checked-background);background-image:var(--skra-comp-field-checkbox-check-glyph)}:host(:indeterminate){background-color:var(--skra-comp-field-checkbox-checked-background);border-color:var(--skra-comp-field-checkbox-checked-background);background-image:linear-gradient(to bottom,transparent 42%,var(--skra-comp-field-checkbox-check-color) 42%,var(--skra-comp-field-checkbox-check-color) 58%,transparent 58%)}:host(:hover:not(:disabled):not([aria-readonly=true])){border-color:var(--skra-comp-field-checkbox-border-color-hover)}:host(:checked:hover:not(:disabled):not([aria-readonly=true])),:host(:indeterminate:hover:not(:disabled):not([aria-readonly=true])){background-color:var(--skra-comp-field-checkbox-checked-background-hover);border-color:var(--skra-comp-field-checkbox-checked-background-hover)}:host(:focus-visible){box-shadow:0 0 0 var(--skra-comp-field-focus-ring-width) var(--skra-comp-field-focus-ring-color)}:host(:disabled),:host([data-skra-disabled]){cursor:not-allowed;opacity:var(--skra-sys-opacity-disabled)}:host([aria-readonly=true]){cursor:default;background-color:var(--skra-comp-field-background-readonly);border-color:var(--skra-comp-field-border-color-readonly)}:host(:checked[aria-readonly=true]),:host(:indeterminate[aria-readonly=true]){background-color:var(--skra-comp-field-checkbox-checked-background-readonly);border-color:var(--skra-comp-field-checkbox-checked-background-readonly)}:host([aria-invalid=true]){border-color:var(--skra-comp-field-error-color)}:host([aria-invalid=true]:focus-visible){box-shadow:0 0 0 var(--skra-comp-field-focus-ring-width) var(--skra-comp-field-error-color)}@media(prefers-reduced-motion:reduce){:host{transition:none}}\n"] }]
|
|
90
|
+
}, styles: [":host{appearance:none;flex-shrink:0;cursor:pointer;outline:none;background-repeat:no-repeat;background-position:center;inline-size:var(--skra-comp-field-checkbox-size);block-size:var(--skra-comp-field-checkbox-size);border-width:var(--skra-comp-field-checkbox-border-width);border-style:solid;border-color:var(--skra-comp-field-checkbox-border-color);border-radius:var(--skra-comp-field-checkbox-border-radius);background-color:var(--skra-comp-field-checkbox-background);background-size:70% 70%;transition:background-color var(--skra-comp-field-motion-duration) var(--skra-comp-field-motion-easing),border-color var(--skra-comp-field-motion-duration) var(--skra-comp-field-motion-easing),box-shadow var(--skra-comp-field-motion-duration) var(--skra-comp-field-motion-easing)}:host(:checked){background-color:var(--skra-comp-field-checkbox-checked-background);border-color:var(--skra-comp-field-checkbox-checked-background);background-image:var(--skra-comp-field-checkbox-check-glyph)}:host(:indeterminate){background-color:var(--skra-comp-field-checkbox-checked-background);border-color:var(--skra-comp-field-checkbox-checked-background);background-image:linear-gradient(to bottom,transparent 42%,var(--skra-comp-field-checkbox-check-color) 42%,var(--skra-comp-field-checkbox-check-color) 58%,transparent 58%)}@media(hover:hover)and (pointer:fine){:host(:hover:not(:disabled):not([aria-readonly=true])){border-color:var(--skra-comp-field-checkbox-border-color-hover)}:host(:checked:hover:not(:disabled):not([aria-readonly=true])),:host(:indeterminate:hover:not(:disabled):not([aria-readonly=true])){background-color:var(--skra-comp-field-checkbox-checked-background-hover);border-color:var(--skra-comp-field-checkbox-checked-background-hover)}}:host(:focus-visible){box-shadow:0 0 0 var(--skra-comp-field-focus-ring-width) var(--skra-comp-field-focus-ring-color)}:host(:disabled),:host([data-skra-disabled]){cursor:not-allowed;opacity:var(--skra-sys-opacity-disabled)}:host([aria-readonly=true]){cursor:default;background-color:var(--skra-comp-field-background-readonly);border-color:var(--skra-comp-field-border-color-readonly)}:host(:checked[aria-readonly=true]),:host(:indeterminate[aria-readonly=true]){background-color:var(--skra-comp-field-checkbox-checked-background-readonly);border-color:var(--skra-comp-field-checkbox-checked-background-readonly);--skra-comp-field-checkbox-check-color: var( --skra-comp-field-checkbox-check-color-readonly )}:host(:checked[aria-readonly=true]){background-image:var(--skra-comp-field-checkbox-check-glyph-readonly)}:host([aria-invalid=true]){border-color:var(--skra-comp-field-error-color)}:host([aria-invalid=true]:focus-visible){box-shadow:0 0 0 var(--skra-comp-field-focus-ring-width) var(--skra-comp-field-error-color)}@media(prefers-reduced-motion:reduce){:host{transition:none}}\n"] }]
|
|
91
91
|
}], ctorParameters: () => [], propDecorators: { indeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "indeterminate", required: false }] }] } });
|
|
92
92
|
|
|
93
93
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skra-ui-checkbox.mjs","sources":["../../../../libs/ui/checkbox/src/lib/checkbox/checkbox.ts","../../../../libs/ui/checkbox/src/skra-ui-checkbox.ts"],"sourcesContent":["import {\
|
|
1
|
+
{"version":3,"file":"skra-ui-checkbox.mjs","sources":["../../../../libs/ui/checkbox/src/lib/checkbox/checkbox.ts","../../../../libs/ui/checkbox/src/skra-ui-checkbox.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n ViewEncapsulation,\n booleanAttribute,\n effect,\n inject,\n input,\n} from '@angular/core';\nimport { SkraFieldContext } from '@skra/ui/field';\n\n/**\n * Wires a native `<input type=\"checkbox\">` to SkraFieldContext when inside\n * `<skra-field>` (ADR 013), or stands alone with no cascade. Per ADR 039/040,\n * Forge ships no `<skra-checkbox>` wrapper — this is a Component-on-the-native-\n * host (`<input>` is void → `template: ''`, ADR 040 §2) carrying its own\n * `checkbox.scss` via Emulated encapsulation. Value channel stays consumer-owned\n * per ADR 037: bind\n * via native `[checked]` + `(change)`, Reactive Forms `formControlName`,\n * Signal Forms `[formField]`, or `[(ngModel)]` — all work orthogonally with\n * this directive (which only handles a11y + skin context).\n *\n * <!-- inside Field -->\n * <skra-field>\n * <input type=\"checkbox\" skraCheckbox [checked]=\"x()\" (change)=\"x.set($any($event.target).checked)\" />\n * <label skraLabelFor>Accept ToS</label>\n * </skra-field>\n *\n * <!-- standalone (label wraps input — no id/for needed) -->\n * <label>\n * <input type=\"checkbox\" skraCheckbox [checked]=\"x()\" (change)=\"x.set($any($event.target).checked)\" />\n * Accept ToS\n * </label>\n *\n * Toggle state (`checked`, `indeterminate`) is NOT reflected as `data-skra-*`\n * — that would require Forge to observe native state, violating ADR 037. Slice\n * CSS targets native `:checked` and `:indeterminate` pseudo-classes directly;\n * browsers handle `aria-checked` natively (including `\"mixed\"` for indeterminate).\n */\n@Component({\n selector: 'input[type=\"checkbox\"][skraCheckbox]',\n standalone: true,\n // Void host — no <ng-content>. See ADR 040 §2.\n template: '',\n styleUrl: './checkbox.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n '[attr.data-skra-disabled]': 'context?.isDisabled() ? \"\" : null',\n '[attr.aria-invalid]': 'context?.hasError() ? \"true\" : null',\n // Readonly is ARIA-only (native `readonly` doesn't apply to checkboxes per\n // HTML spec). No `data-skra-readonly` — it was dead surface (no SCSS\n // consumer; styling keys off `[aria-readonly]`), removed 2026-05-31 to match\n // the select atom's Q-3 ARIA-only pattern (Batch 5 cleanroom review).\n '[attr.aria-readonly]': 'context?.isReadonly() ? \"true\" : null',\n '[attr.aria-describedby]': 'context?.describedByIds() ?? null',\n '(click)': 'blockWhenReadonly($event)',\n '(keydown)': 'blockKeyWhenReadonly($event)',\n },\n})\nexport class SkraCheckbox {\n private readonly el = inject<ElementRef<HTMLInputElement>>(ElementRef);\n readonly context = inject(SkraFieldContext, { optional: true });\n\n // `indeterminate` is the ONE state Forge writes back to the native input,\n // because HTML does not expose it as an attribute — only the JS property.\n // Consumer is expected to drive it (e.g. tristate parent-of-children checkbox).\n readonly indeterminate = input(false, { transform: booleanAttribute });\n\n constructor() {\n const el = this.el.nativeElement;\n\n effect(() => {\n el.indeterminate = this.indeterminate();\n });\n\n // Field-cascaded native properties — only bind when context is present so\n // standalone consumers retain full control of their static attributes.\n if (this.context) {\n const ctx = this.context;\n effect(() => {\n el.id = ctx.fieldId();\n });\n effect(() => {\n el.disabled = ctx.isDisabled();\n });\n }\n }\n\n /**\n * Readonly enforcement — native checkbox has no `[readonly]`, so without this\n * the `aria-readonly` we announce would be a lie (the user could still toggle\n * it). `preventDefault` on `click` blocks the toggle from both pointer and\n * Space/Enter (keyboard activation dispatches a click on form controls).\n * Mirrors the `<select skraSelect>` / `skraRadio` readonly guards.\n */\n protected blockWhenReadonly(event: Event): void {\n if (this.context?.isReadonly()) event.preventDefault();\n }\n\n /** Block keyboard activation (Space) when readonly; let `Tab` through. */\n protected blockKeyWhenReadonly(event: KeyboardEvent): void {\n if (this.context?.isReadonly() && event.key !== 'Tab') {\n event.preventDefault();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;MAsBU,YAAY,CAAA;AACN,IAAA,EAAE,GAAG,MAAM,CAA+B,UAAU,CAAC;IAC7D,OAAO,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;;;IAKtD,aAAa,GAAG,KAAK,CAAC,KAAK,qFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEtE,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,aAAa;QAEhC,MAAM,CAAC,MAAK;AACV,YAAA,EAAE,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;AACzC,QAAA,CAAC,CAAC;;;AAIF,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO;YACxB,MAAM,CAAC,MAAK;AACV,gBAAA,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE;AACvB,YAAA,CAAC,CAAC;YACF,MAAM,CAAC,MAAK;AACV,gBAAA,EAAE,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,EAAE;AAChC,YAAA,CAAC,CAAC;QACJ;IACF;AAEA;;;;;;AAMG;AACO,IAAA,iBAAiB,CAAC,KAAY,EAAA;AACtC,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE;YAAE,KAAK,CAAC,cAAc,EAAE;IACxD;;AAGU,IAAA,oBAAoB,CAAC,KAAoB,EAAA;AACjD,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;YACrD,KAAK,CAAC,cAAc,EAAE;QACxB;IACF;uGA7CW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,unBAjBb,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+wFAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAiBD,YAAY,EAAA,UAAA,EAAA,CAAA;kBArBxB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sCAAsC,EAAA,UAAA,EACpC,IAAI,EAAA,QAAA,EAEN,EAAE,EAAA,eAAA,EAEK,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,QAAQ,EAAA,IAAA,EACnC;AACJ,wBAAA,2BAA2B,EAAE,mCAAmC;AAChE,wBAAA,qBAAqB,EAAE,qCAAqC;;;;;AAK5D,wBAAA,sBAAsB,EAAE,uCAAuC;AAC/D,wBAAA,yBAAyB,EAAE,mCAAmC;AAC9D,wBAAA,SAAS,EAAE,2BAA2B;AACtC,wBAAA,WAAW,EAAE,8BAA8B;AAC5C,qBAAA,EAAA,MAAA,EAAA,CAAA,+wFAAA,CAAA,EAAA;;;AC3DH;;AAEG;;;;"}
|
|
@@ -61,7 +61,7 @@ class SkraChip {
|
|
|
61
61
|
this.removed.emit();
|
|
62
62
|
}
|
|
63
63
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: SkraChip, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
64
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: SkraChip, isStandalone: true, selector: "skra-chip", inputs: { intent: { classPropertyName: "intent", publicName: "intent", isSignal: true, isRequired: false, transformFunction: null }, emphasis: { classPropertyName: "emphasis", publicName: "emphasis", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { removed: "removed" }, host: { properties: { "attr.data-skra-intent": "intent()", "attr.data-skra-emphasis": "emphasis()", "attr.data-skra-disabled": "disabled() ? \"\" : null", "attr.data-skra-has-icon": "hasIcon() ? \"\" : null" } }, queries: [{ propertyName: "iconSlot", first: true, predicate: SkraChipIcon, descendants: true, isSignal: true }], ngImport: i0, template: "@if (hasIcon()) {\r\n<span class=\"skra-chip-icon\">\r\n <ng-content select=\"[skra-chip-icon]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<span class=\"skra-chip-label\">\r\n <ng-content></ng-content>\r\n</span>\r\n\r\n<button\r\n type=\"button\"\r\n class=\"skra-chip-remove\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"onRemove()\"\r\n>\r\n <svg\r\n class=\"skra-chip-remove-glyph\"\r\n aria-hidden=\"true\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2.5\"\r\n stroke-linecap=\"round\"\r\n >\r\n <path d=\"M18 6 6 18\" />\r\n <path d=\"m6 6 12 12\" />\r\n </svg>\r\n <ng-content select=\"[skra-chip-remove-label]\"></ng-content>\r\n</button>\r\n", styles: ["@charset \"UTF-8\";:host{display:inline-flex;align-items:center;box-sizing:border-box;margin:0;white-space:nowrap;min-block-size:var(--skra-comp-chip-remove-size);font-family:var(--skra-sys-typography-role-label-medium-font-family);font-size:var(--skra-sys-typography-role-label-medium-font-size);font-weight:var(--skra-sys-typography-role-label-medium-font-weight);line-height:var(--skra-sys-typography-role-label-medium-line-height);letter-spacing:var(--skra-sys-typography-role-label-medium-letter-spacing);background:var(--skra-comp-chip-background);color:var(--skra-comp-chip-foreground);border-color:var(--skra-comp-chip-border-color);border-width:var(--skra-comp-chip-border-width);border-style:var(--skra-comp-chip-border-style);border-radius:var(--skra-comp-chip-radius);padding-block:var(--skra-comp-chip-padding-block);padding-inline:var(--skra-comp-chip-padding-inline);box-shadow:var(--skra-comp-chip-shadow)}:host([data-skra-emphasis=high]){--skra-comp-chip-border-width: 0}:host([data-skra-disabled]){cursor:not-allowed;background:var(--skra-sys-color-neutral-soft);color:var(--skra-sys-color-neutral-strong);border-color:var(--skra-sys-color-neutral-border)}:host([data-skra-disabled]) .skra-chip-icon,:host([data-skra-disabled]) .skra-chip-remove{opacity:var(--skra-sys-opacity-disabled)}:host([data-skra-intent=neutral][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-neutral-high, var(--skra-sys-color-neutral-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-neutral-high, var(--skra-sys-color-neutral-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-neutral-high, transparent )}:host([data-skra-intent=neutral][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-neutral-medium, var(--skra-sys-color-neutral-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-neutral-medium, var(--skra-sys-color-neutral-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-neutral-medium, var(--skra-sys-color-neutral-border) )}:host([data-skra-intent=info][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-info-high, var(--skra-sys-color-info-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-info-high, var(--skra-sys-color-info-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-info-high, transparent )}:host([data-skra-intent=info][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-info-medium, var(--skra-sys-color-info-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-info-medium, var(--skra-sys-color-info-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-info-medium, var(--skra-sys-color-info-border) )}:host([data-skra-intent=success][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-success-high, var(--skra-sys-color-success-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-success-high, var(--skra-sys-color-success-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-success-high, transparent )}:host([data-skra-intent=success][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-success-medium, var(--skra-sys-color-success-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-success-medium, var(--skra-sys-color-success-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-success-medium, var(--skra-sys-color-success-border) )}:host([data-skra-intent=warning][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-warning-high, var(--skra-sys-color-warning-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-warning-high, var(--skra-sys-color-warning-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-warning-high, transparent )}:host([data-skra-intent=warning][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-warning-medium, var(--skra-sys-color-warning-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-warning-medium, var(--skra-sys-color-warning-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-warning-medium, var(--skra-sys-color-warning-border) )}:host([data-skra-intent=danger][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-danger-high, var(--skra-sys-color-danger-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-danger-high, var(--skra-sys-color-danger-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-danger-high, transparent )}:host([data-skra-intent=danger][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-danger-medium, var(--skra-sys-color-danger-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-danger-medium, var(--skra-sys-color-danger-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-danger-medium, var(--skra-sys-color-danger-border) )}.skra-chip-icon{display:inline-flex;flex-shrink:0;align-items:center;block-size:1lh;margin-inline-end:var(--skra-comp-chip-icon-gap);--skra-comp-icon-size: var(--skra-comp-chip-icon-size)}.skra-chip-label{display:inline-flex;align-items:center;min-inline-size:0}.skra-chip-remove{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;inline-size:var(--skra-comp-chip-remove-size);block-size:var(--skra-comp-chip-remove-size);margin:0;margin-inline-start:var(--skra-comp-chip-remove-gap);padding:0;border:0;background:transparent;color:inherit;cursor:pointer;border-radius:var(--skra-comp-chip-radius);transition:opacity var(--skra-comp-chip-motion-duration) var(--skra-comp-chip-motion-easing)}.skra-chip-remove:hover{opacity:.7}.skra-chip-remove:focus-visible{outline-style:solid;outline-color:var(--skra-comp-chip-focus-ring-color);outline-width:var(--skra-comp-chip-focus-ring-width);outline-offset:2px}.skra-chip-remove:disabled{cursor:not-allowed}.skra-chip-remove-glyph{inline-size:.875em;block-size:.875em;display:block}@media(prefers-reduced-motion:reduce){.skra-chip-remove{transition:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
64
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: SkraChip, isStandalone: true, selector: "skra-chip", inputs: { intent: { classPropertyName: "intent", publicName: "intent", isSignal: true, isRequired: false, transformFunction: null }, emphasis: { classPropertyName: "emphasis", publicName: "emphasis", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { removed: "removed" }, host: { properties: { "attr.data-skra-intent": "intent()", "attr.data-skra-emphasis": "emphasis()", "attr.data-skra-disabled": "disabled() ? \"\" : null", "attr.data-skra-has-icon": "hasIcon() ? \"\" : null" } }, queries: [{ propertyName: "iconSlot", first: true, predicate: SkraChipIcon, descendants: true, isSignal: true }], ngImport: i0, template: "@if (hasIcon()) {\r\n<span class=\"skra-chip-icon\">\r\n <ng-content select=\"[skra-chip-icon]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<span class=\"skra-chip-label\">\r\n <ng-content></ng-content>\r\n</span>\r\n\r\n<button\r\n type=\"button\"\r\n class=\"skra-chip-remove\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"onRemove()\"\r\n>\r\n <svg\r\n class=\"skra-chip-remove-glyph\"\r\n aria-hidden=\"true\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2.5\"\r\n stroke-linecap=\"round\"\r\n >\r\n <path d=\"M18 6 6 18\" />\r\n <path d=\"m6 6 12 12\" />\r\n </svg>\r\n <ng-content select=\"[skra-chip-remove-label]\"></ng-content>\r\n</button>\r\n", styles: ["@charset \"UTF-8\";:host{display:inline-flex;align-items:center;box-sizing:border-box;margin:0;white-space:nowrap;min-block-size:var(--skra-comp-chip-remove-size);font-family:var(--skra-sys-typography-role-label-medium-font-family);font-size:var(--skra-sys-typography-role-label-medium-font-size);font-weight:var(--skra-sys-typography-role-label-medium-font-weight);line-height:var(--skra-sys-typography-role-label-medium-line-height);letter-spacing:var(--skra-sys-typography-role-label-medium-letter-spacing);background:var(--skra-comp-chip-background);color:var(--skra-comp-chip-foreground);border-color:var(--skra-comp-chip-border-color);border-width:var(--skra-comp-chip-border-width);border-style:var(--skra-comp-chip-border-style);border-radius:var(--skra-comp-chip-radius);padding-block:var(--skra-comp-chip-padding-block);padding-inline:var(--skra-comp-chip-padding-inline);box-shadow:var(--skra-comp-chip-shadow)}:host([data-skra-emphasis=high]){--skra-comp-chip-border-width: 0}:host([data-skra-disabled]){cursor:not-allowed;background:var(--skra-sys-color-neutral-soft);color:var(--skra-sys-color-neutral-strong);border-color:var(--skra-sys-color-neutral-border)}:host([data-skra-disabled]) .skra-chip-icon,:host([data-skra-disabled]) .skra-chip-remove{opacity:var(--skra-sys-opacity-disabled)}:host([data-skra-intent=neutral][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-neutral-high, var(--skra-sys-color-neutral-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-neutral-high, var(--skra-sys-color-neutral-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-neutral-high, transparent )}:host([data-skra-intent=neutral][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-neutral-medium, var(--skra-sys-color-neutral-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-neutral-medium, var(--skra-sys-color-neutral-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-neutral-medium, var(--skra-sys-color-neutral-border) )}:host([data-skra-intent=info][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-info-high, var(--skra-sys-color-info-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-info-high, var(--skra-sys-color-info-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-info-high, transparent )}:host([data-skra-intent=info][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-info-medium, var(--skra-sys-color-info-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-info-medium, var(--skra-sys-color-info-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-info-medium, var(--skra-sys-color-info-border) )}:host([data-skra-intent=success][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-success-high, var(--skra-sys-color-success-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-success-high, var(--skra-sys-color-success-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-success-high, transparent )}:host([data-skra-intent=success][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-success-medium, var(--skra-sys-color-success-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-success-medium, var(--skra-sys-color-success-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-success-medium, var(--skra-sys-color-success-border) )}:host([data-skra-intent=warning][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-warning-high, var(--skra-sys-color-warning-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-warning-high, var(--skra-sys-color-warning-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-warning-high, transparent )}:host([data-skra-intent=warning][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-warning-medium, var(--skra-sys-color-warning-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-warning-medium, var(--skra-sys-color-warning-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-warning-medium, var(--skra-sys-color-warning-border) )}:host([data-skra-intent=danger][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-danger-high, var(--skra-sys-color-danger-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-danger-high, var(--skra-sys-color-danger-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-danger-high, transparent )}:host([data-skra-intent=danger][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-danger-medium, var(--skra-sys-color-danger-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-danger-medium, var(--skra-sys-color-danger-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-danger-medium, var(--skra-sys-color-danger-border) )}.skra-chip-icon{display:inline-flex;flex-shrink:0;align-items:center;block-size:1lh;margin-inline-end:var(--skra-comp-chip-icon-gap);--skra-comp-icon-size: var(--skra-comp-chip-icon-size)}.skra-chip-label{display:inline-flex;align-items:center;min-inline-size:0}.skra-chip-remove{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;inline-size:var(--skra-comp-chip-remove-size);block-size:var(--skra-comp-chip-remove-size);margin:0;margin-inline-start:var(--skra-comp-chip-remove-gap);padding:0;border:0;background:transparent;color:inherit;cursor:pointer;border-radius:var(--skra-comp-chip-radius);transition:opacity var(--skra-comp-chip-motion-duration) var(--skra-comp-chip-motion-easing)}@media(hover:hover)and (pointer:fine){.skra-chip-remove:hover{opacity:.7}}.skra-chip-remove:focus-visible{outline-style:solid;outline-color:var(--skra-comp-chip-focus-ring-color);outline-width:var(--skra-comp-chip-focus-ring-width);outline-offset:2px}.skra-chip-remove:disabled{cursor:not-allowed}.skra-chip-remove-glyph{inline-size:.875em;block-size:.875em;display:block}@media(prefers-reduced-motion:reduce){.skra-chip-remove{transition:none}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
65
65
|
}
|
|
66
66
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: SkraChip, decorators: [{
|
|
67
67
|
type: Component,
|
|
@@ -75,7 +75,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImpor
|
|
|
75
75
|
'[attr.data-skra-disabled]': 'disabled() ? "" : null',
|
|
76
76
|
// Smart Slot layout reflection (ADR 020 v2.0 — slot-presence, State-Surface-exempt §3.6)
|
|
77
77
|
'[attr.data-skra-has-icon]': 'hasIcon() ? "" : null',
|
|
78
|
-
}, template: "@if (hasIcon()) {\r\n<span class=\"skra-chip-icon\">\r\n <ng-content select=\"[skra-chip-icon]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<span class=\"skra-chip-label\">\r\n <ng-content></ng-content>\r\n</span>\r\n\r\n<button\r\n type=\"button\"\r\n class=\"skra-chip-remove\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"onRemove()\"\r\n>\r\n <svg\r\n class=\"skra-chip-remove-glyph\"\r\n aria-hidden=\"true\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2.5\"\r\n stroke-linecap=\"round\"\r\n >\r\n <path d=\"M18 6 6 18\" />\r\n <path d=\"m6 6 12 12\" />\r\n </svg>\r\n <ng-content select=\"[skra-chip-remove-label]\"></ng-content>\r\n</button>\r\n", styles: ["@charset \"UTF-8\";:host{display:inline-flex;align-items:center;box-sizing:border-box;margin:0;white-space:nowrap;min-block-size:var(--skra-comp-chip-remove-size);font-family:var(--skra-sys-typography-role-label-medium-font-family);font-size:var(--skra-sys-typography-role-label-medium-font-size);font-weight:var(--skra-sys-typography-role-label-medium-font-weight);line-height:var(--skra-sys-typography-role-label-medium-line-height);letter-spacing:var(--skra-sys-typography-role-label-medium-letter-spacing);background:var(--skra-comp-chip-background);color:var(--skra-comp-chip-foreground);border-color:var(--skra-comp-chip-border-color);border-width:var(--skra-comp-chip-border-width);border-style:var(--skra-comp-chip-border-style);border-radius:var(--skra-comp-chip-radius);padding-block:var(--skra-comp-chip-padding-block);padding-inline:var(--skra-comp-chip-padding-inline);box-shadow:var(--skra-comp-chip-shadow)}:host([data-skra-emphasis=high]){--skra-comp-chip-border-width: 0}:host([data-skra-disabled]){cursor:not-allowed;background:var(--skra-sys-color-neutral-soft);color:var(--skra-sys-color-neutral-strong);border-color:var(--skra-sys-color-neutral-border)}:host([data-skra-disabled]) .skra-chip-icon,:host([data-skra-disabled]) .skra-chip-remove{opacity:var(--skra-sys-opacity-disabled)}:host([data-skra-intent=neutral][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-neutral-high, var(--skra-sys-color-neutral-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-neutral-high, var(--skra-sys-color-neutral-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-neutral-high, transparent )}:host([data-skra-intent=neutral][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-neutral-medium, var(--skra-sys-color-neutral-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-neutral-medium, var(--skra-sys-color-neutral-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-neutral-medium, var(--skra-sys-color-neutral-border) )}:host([data-skra-intent=info][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-info-high, var(--skra-sys-color-info-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-info-high, var(--skra-sys-color-info-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-info-high, transparent )}:host([data-skra-intent=info][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-info-medium, var(--skra-sys-color-info-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-info-medium, var(--skra-sys-color-info-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-info-medium, var(--skra-sys-color-info-border) )}:host([data-skra-intent=success][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-success-high, var(--skra-sys-color-success-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-success-high, var(--skra-sys-color-success-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-success-high, transparent )}:host([data-skra-intent=success][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-success-medium, var(--skra-sys-color-success-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-success-medium, var(--skra-sys-color-success-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-success-medium, var(--skra-sys-color-success-border) )}:host([data-skra-intent=warning][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-warning-high, var(--skra-sys-color-warning-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-warning-high, var(--skra-sys-color-warning-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-warning-high, transparent )}:host([data-skra-intent=warning][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-warning-medium, var(--skra-sys-color-warning-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-warning-medium, var(--skra-sys-color-warning-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-warning-medium, var(--skra-sys-color-warning-border) )}:host([data-skra-intent=danger][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-danger-high, var(--skra-sys-color-danger-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-danger-high, var(--skra-sys-color-danger-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-danger-high, transparent )}:host([data-skra-intent=danger][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-danger-medium, var(--skra-sys-color-danger-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-danger-medium, var(--skra-sys-color-danger-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-danger-medium, var(--skra-sys-color-danger-border) )}.skra-chip-icon{display:inline-flex;flex-shrink:0;align-items:center;block-size:1lh;margin-inline-end:var(--skra-comp-chip-icon-gap);--skra-comp-icon-size: var(--skra-comp-chip-icon-size)}.skra-chip-label{display:inline-flex;align-items:center;min-inline-size:0}.skra-chip-remove{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;inline-size:var(--skra-comp-chip-remove-size);block-size:var(--skra-comp-chip-remove-size);margin:0;margin-inline-start:var(--skra-comp-chip-remove-gap);padding:0;border:0;background:transparent;color:inherit;cursor:pointer;border-radius:var(--skra-comp-chip-radius);transition:opacity var(--skra-comp-chip-motion-duration) var(--skra-comp-chip-motion-easing)}.skra-chip-remove:hover{opacity:.7}.skra-chip-remove:focus-visible{outline-style:solid;outline-color:var(--skra-comp-chip-focus-ring-color);outline-width:var(--skra-comp-chip-focus-ring-width);outline-offset:2px}.skra-chip-remove:disabled{cursor:not-allowed}.skra-chip-remove-glyph{inline-size:.875em;block-size:.875em;display:block}@media(prefers-reduced-motion:reduce){.skra-chip-remove{transition:none}}\n"] }]
|
|
78
|
+
}, template: "@if (hasIcon()) {\r\n<span class=\"skra-chip-icon\">\r\n <ng-content select=\"[skra-chip-icon]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<span class=\"skra-chip-label\">\r\n <ng-content></ng-content>\r\n</span>\r\n\r\n<button\r\n type=\"button\"\r\n class=\"skra-chip-remove\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"onRemove()\"\r\n>\r\n <svg\r\n class=\"skra-chip-remove-glyph\"\r\n aria-hidden=\"true\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2.5\"\r\n stroke-linecap=\"round\"\r\n >\r\n <path d=\"M18 6 6 18\" />\r\n <path d=\"m6 6 12 12\" />\r\n </svg>\r\n <ng-content select=\"[skra-chip-remove-label]\"></ng-content>\r\n</button>\r\n", styles: ["@charset \"UTF-8\";:host{display:inline-flex;align-items:center;box-sizing:border-box;margin:0;white-space:nowrap;min-block-size:var(--skra-comp-chip-remove-size);font-family:var(--skra-sys-typography-role-label-medium-font-family);font-size:var(--skra-sys-typography-role-label-medium-font-size);font-weight:var(--skra-sys-typography-role-label-medium-font-weight);line-height:var(--skra-sys-typography-role-label-medium-line-height);letter-spacing:var(--skra-sys-typography-role-label-medium-letter-spacing);background:var(--skra-comp-chip-background);color:var(--skra-comp-chip-foreground);border-color:var(--skra-comp-chip-border-color);border-width:var(--skra-comp-chip-border-width);border-style:var(--skra-comp-chip-border-style);border-radius:var(--skra-comp-chip-radius);padding-block:var(--skra-comp-chip-padding-block);padding-inline:var(--skra-comp-chip-padding-inline);box-shadow:var(--skra-comp-chip-shadow)}:host([data-skra-emphasis=high]){--skra-comp-chip-border-width: 0}:host([data-skra-disabled]){cursor:not-allowed;background:var(--skra-sys-color-neutral-soft);color:var(--skra-sys-color-neutral-strong);border-color:var(--skra-sys-color-neutral-border)}:host([data-skra-disabled]) .skra-chip-icon,:host([data-skra-disabled]) .skra-chip-remove{opacity:var(--skra-sys-opacity-disabled)}:host([data-skra-intent=neutral][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-neutral-high, var(--skra-sys-color-neutral-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-neutral-high, var(--skra-sys-color-neutral-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-neutral-high, transparent )}:host([data-skra-intent=neutral][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-neutral-medium, var(--skra-sys-color-neutral-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-neutral-medium, var(--skra-sys-color-neutral-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-neutral-medium, var(--skra-sys-color-neutral-border) )}:host([data-skra-intent=info][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-info-high, var(--skra-sys-color-info-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-info-high, var(--skra-sys-color-info-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-info-high, transparent )}:host([data-skra-intent=info][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-info-medium, var(--skra-sys-color-info-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-info-medium, var(--skra-sys-color-info-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-info-medium, var(--skra-sys-color-info-border) )}:host([data-skra-intent=success][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-success-high, var(--skra-sys-color-success-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-success-high, var(--skra-sys-color-success-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-success-high, transparent )}:host([data-skra-intent=success][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-success-medium, var(--skra-sys-color-success-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-success-medium, var(--skra-sys-color-success-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-success-medium, var(--skra-sys-color-success-border) )}:host([data-skra-intent=warning][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-warning-high, var(--skra-sys-color-warning-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-warning-high, var(--skra-sys-color-warning-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-warning-high, transparent )}:host([data-skra-intent=warning][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-warning-medium, var(--skra-sys-color-warning-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-warning-medium, var(--skra-sys-color-warning-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-warning-medium, var(--skra-sys-color-warning-border) )}:host([data-skra-intent=danger][data-skra-emphasis=high]){--skra-comp-chip-background: var( --skra-comp-chip-background-danger-high, var(--skra-sys-color-danger-base) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-danger-high, var(--skra-sys-color-danger-contrast) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-danger-high, transparent )}:host([data-skra-intent=danger][data-skra-emphasis=medium]){--skra-comp-chip-background: var( --skra-comp-chip-background-danger-medium, var(--skra-sys-color-danger-soft) );--skra-comp-chip-foreground: var( --skra-comp-chip-foreground-danger-medium, var(--skra-sys-color-danger-strong) );--skra-comp-chip-border-color: var( --skra-comp-chip-border-color-danger-medium, var(--skra-sys-color-danger-border) )}.skra-chip-icon{display:inline-flex;flex-shrink:0;align-items:center;block-size:1lh;margin-inline-end:var(--skra-comp-chip-icon-gap);--skra-comp-icon-size: var(--skra-comp-chip-icon-size)}.skra-chip-label{display:inline-flex;align-items:center;min-inline-size:0}.skra-chip-remove{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;inline-size:var(--skra-comp-chip-remove-size);block-size:var(--skra-comp-chip-remove-size);margin:0;margin-inline-start:var(--skra-comp-chip-remove-gap);padding:0;border:0;background:transparent;color:inherit;cursor:pointer;border-radius:var(--skra-comp-chip-radius);transition:opacity var(--skra-comp-chip-motion-duration) var(--skra-comp-chip-motion-easing)}@media(hover:hover)and (pointer:fine){.skra-chip-remove:hover{opacity:.7}}.skra-chip-remove:focus-visible{outline-style:solid;outline-color:var(--skra-comp-chip-focus-ring-color);outline-width:var(--skra-comp-chip-focus-ring-width);outline-offset:2px}.skra-chip-remove:disabled{cursor:not-allowed}.skra-chip-remove-glyph{inline-size:.875em;block-size:.875em;display:block}@media(prefers-reduced-motion:reduce){.skra-chip-remove{transition:none}}\n"] }]
|
|
79
79
|
}], propDecorators: { intent: [{ type: i0.Input, args: [{ isSignal: true, alias: "intent", required: false }] }], emphasis: [{ type: i0.Input, args: [{ isSignal: true, alias: "emphasis", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], removed: [{ type: i0.Output, args: ["removed"] }], iconSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SkraChipIcon), { isSignal: true }] }] } });
|
|
80
80
|
|
|
81
81
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skra-ui-chip.mjs","sources":["../../../../libs/ui/chip/src/lib/chip.directives.ts","../../../../libs/ui/chip/src/lib/chip/chip.ts","../../../../libs/ui/chip/src/lib/chip/chip.html","../../../../libs/ui/chip/src/skra-ui-chip.ts"],"sourcesContent":["import { Directive } from '@angular/core';\
|
|
1
|
+
{"version":3,"file":"skra-ui-chip.mjs","sources":["../../../../libs/ui/chip/src/lib/chip.directives.ts","../../../../libs/ui/chip/src/lib/chip/chip.ts","../../../../libs/ui/chip/src/lib/chip/chip.html","../../../../libs/ui/chip/src/skra-ui-chip.ts"],"sourcesContent":["import { Directive } from '@angular/core';\n\n/**\n * Marker directive for the leading icon/dot/avatar slot of `<skra-chip>`.\n * Detected via `contentChild` (ADR 020 Smart Slots v2.0) to toggle the icon\n * wrapper without emitting an empty DOM node. Feedback-local (mirrors\n * `SkraBadgeIcon`/`SkraAlertIcon`) to avoid a cross-lib marker dependency.\n */\n@Directive({\n selector: '[skra-chip-icon]',\n standalone: true,\n})\nexport class SkraChipIcon {}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n contentChild,\n input,\n output,\n} from '@angular/core';\nimport { SkraChipIcon } from '../chip.directives';\n\n/**\n * ChipIntent — semantic meaning (ADR 035 §3.1, downward subset). Excludes the\n * action intents `primary`/`secondary` (meaningless for a status/category pill).\n * Closed enum; extension requires an ADR 035 amendment.\n */\nexport type ChipIntent = 'neutral' | 'info' | 'success' | 'warning' | 'danger';\n\n/**\n * ChipEmphasis — visual loudness within the chosen intent (ADR 035 §3.1, subset).\n * `high` = filled pill, `medium` = soft/tinted. `low` deferred.\n */\nexport type ChipEmphasis = 'high' | 'medium';\n\n/**\n * `<skra-chip>` — a small, inline, **removable** labelled pill (Feedback/Status\n * family, Wave 2): a selected multi-select value, an applied filter, an input tag.\n * The host is a non-interactive presentational pill (the label is plain text, no\n * host role/focus); it contains exactly ONE interactive sub-control — the built-in\n * remove `<button>` (the Alert dismiss precedent).\n *\n * SRP-distinct from `<skra-badge>` (a NON-removable status pill): the remove\n * control is intrinsic to Chip — there is no `removable` flag, because a chip\n * without it would be a Badge. A SELECTABLE/filter chip (a toggle) is a SEPARATE\n * deferred atom (ARCHITECTURE_BACKLOG watch-list), NOT a `selectable` variant —\n * one atom carrying both interaction models is an SRP smell.\n *\n * No `live` axis (unlike Badge/Alert): a chip is an input/selection element, not a\n * status announcer; add/remove announcements are the consumer's own `aria-live`.\n *\n * Removal (ADR 037): the remove control fires `(removed)`. Forge does NOT remove\n * itself from the DOM — the consumer owns removal (splice the bound array / `@if`).\n * The remove control's accessible name comes from a projected\n * `[skra-chip-remove-label]` (sr-only; ADR 033 Path 2) — the \"×\" glyph is `aria-hidden`.\n */\n@Component({\n selector: 'skra-chip',\n standalone: true,\n imports: [SkraChipIcon],\n templateUrl: './chip.html',\n styleUrl: './chip.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.Emulated,\n host: {\n // Variant Surface reflection (ADR 035 §3.5; ADR 021 — never [style.--var])\n '[attr.data-skra-intent]': 'intent()',\n '[attr.data-skra-emphasis]': 'emphasis()',\n\n // Availability reflection (ADR 027 cat 2; presence boolean). The host is a custom\n // element with no native `disabled`, so its reflection is the Forge-semantic\n // data-attr; the remove <button> takes the NATIVE `disabled` (native-attr-first).\n '[attr.data-skra-disabled]': 'disabled() ? \"\" : null',\n\n // Smart Slot layout reflection (ADR 020 v2.0 — slot-presence, State-Surface-exempt §3.6)\n '[attr.data-skra-has-icon]': 'hasIcon() ? \"\" : null',\n },\n})\nexport class SkraChip {\n // --- Variant Surface (ADR 035) ---\n readonly intent = input<ChipIntent>('neutral');\n readonly emphasis = input<ChipEmphasis>('medium');\n\n // --- Availability (ADR 027 cat 2) ---\n readonly disabled = input(false, { transform: booleanAttribute });\n\n // --- Removal (ADR 037 — consumer-owned presence) ---\n readonly removed = output<void>();\n\n // --- Smart Slots v2.0 (ADR 020) ---\n readonly iconSlot = contentChild(SkraChipIcon);\n readonly hasIcon = computed(() => !!this.iconSlot());\n\n protected onRemove(): void {\n if (this.disabled()) return;\n this.removed.emit();\n }\n}\n","@if (hasIcon()) {\r\n<span class=\"skra-chip-icon\">\r\n <ng-content select=\"[skra-chip-icon]\"></ng-content>\r\n</span>\r\n}\r\n\r\n<span class=\"skra-chip-label\">\r\n <ng-content></ng-content>\r\n</span>\r\n\r\n<button\r\n type=\"button\"\r\n class=\"skra-chip-remove\"\r\n [disabled]=\"disabled()\"\r\n (click)=\"onRemove()\"\r\n>\r\n <svg\r\n class=\"skra-chip-remove-glyph\"\r\n aria-hidden=\"true\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2.5\"\r\n stroke-linecap=\"round\"\r\n >\r\n <path d=\"M18 6 6 18\" />\r\n <path d=\"m6 6 12 12\" />\r\n </svg>\r\n <ng-content select=\"[skra-chip-remove-label]\"></ng-content>\r\n</button>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -177,130 +177,130 @@ class SkraCombobox extends _SkraListboxWidgetBase {
|
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
179
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: SkraCombobox, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
180
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: SkraCombobox, isStandalone: true, selector: "skra-combobox", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", filterChange: "filterChange" }, host: { properties: { "attr.data-skra-loading": "loading() ? \"\" : null", "attr.data-skra-empty": "!loading() && options().length === 0 ? \"\" : null" } }, providers: [{ provide: SKRA_LISTBOX_PANEL, useExisting: SkraCombobox }], exportAs: ["skraCombobox"], usesInheritance: true, ngImport: i0, template: `
|
|
181
|
-
<input
|
|
182
|
-
#trigger
|
|
183
|
-
class="skra-combobox-input"
|
|
184
|
-
type="text"
|
|
185
|
-
role="combobox"
|
|
186
|
-
autocomplete="off"
|
|
187
|
-
aria-autocomplete="list"
|
|
188
|
-
aria-haspopup="listbox"
|
|
189
|
-
[attr.id]="triggerId()"
|
|
190
|
-
[attr.aria-controls]="panelId"
|
|
191
|
-
[attr.aria-expanded]="isOpen()"
|
|
192
|
-
[attr.aria-activedescendant]="activeOptionId()"
|
|
193
|
-
[attr.aria-describedby]="describedBy()"
|
|
194
|
-
[attr.aria-invalid]="hasError() ? 'true' : null"
|
|
195
|
-
[attr.aria-required]="isRequired() ? 'true' : null"
|
|
196
|
-
[attr.aria-busy]="loading() ? 'true' : null"
|
|
197
|
-
[attr.placeholder]="placeholder()"
|
|
198
|
-
[disabled]="isDisabled()"
|
|
199
|
-
[readOnly]="isReadonly()"
|
|
200
|
-
[value]="displayValue()"
|
|
201
|
-
(focus)="onFocus()"
|
|
202
|
-
(input)="onInput($event)"
|
|
203
|
-
(keydown)="onTriggerKeydown($event)"
|
|
204
|
-
(blur)="onBlur()"
|
|
205
|
-
/>
|
|
206
|
-
<button
|
|
207
|
-
class="skra-combobox-toggle"
|
|
208
|
-
type="button"
|
|
209
|
-
tabindex="-1"
|
|
210
|
-
aria-hidden="true"
|
|
211
|
-
[disabled]="isDisabled()"
|
|
212
|
-
(mousedown)="$event.preventDefault()"
|
|
213
|
-
(click)="toggle()"
|
|
214
|
-
>
|
|
215
|
-
<span class="skra-combobox-arrow" aria-hidden="true"></span>
|
|
216
|
-
</button>
|
|
217
|
-
|
|
218
|
-
<div
|
|
219
|
-
#panel
|
|
220
|
-
class="skra-combobox-listbox"
|
|
221
|
-
[id]="panelId"
|
|
222
|
-
role="listbox"
|
|
223
|
-
popover="auto"
|
|
224
|
-
(mousedown)="$event.preventDefault()"
|
|
225
|
-
(toggle)="onPanelToggle($event)"
|
|
226
|
-
>
|
|
227
|
-
<!-- ONE persistent live region (text swapped via @if) so loading/empty announce reliably —
|
|
228
|
-
a region injected on demand is unreliably spoken (ADR 0049 rule 4). Hidden when empty via
|
|
229
|
-
:empty in SCSS. -->
|
|
230
|
-
<div class="skra-combobox-status" role="status" aria-live="polite">
|
|
231
|
-
@if (loading()) {
|
|
232
|
-
<ng-content select="[skraLoadingIndicator]"></ng-content>
|
|
233
|
-
<span class="skra-combobox-spinner" aria-hidden="true"></span>
|
|
234
|
-
} @else if (options().length === 0) {
|
|
235
|
-
<ng-content select="[skraComboboxEmpty]"></ng-content>
|
|
236
|
-
}
|
|
237
|
-
</div>
|
|
238
|
-
<ng-content></ng-content>
|
|
239
|
-
</div>
|
|
180
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: SkraCombobox, isStandalone: true, selector: "skra-combobox", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", filterChange: "filterChange" }, host: { properties: { "attr.data-skra-loading": "loading() ? \"\" : null", "attr.data-skra-empty": "!loading() && options().length === 0 ? \"\" : null" } }, providers: [{ provide: SKRA_LISTBOX_PANEL, useExisting: SkraCombobox }], exportAs: ["skraCombobox"], usesInheritance: true, ngImport: i0, template: `
|
|
181
|
+
<input
|
|
182
|
+
#trigger
|
|
183
|
+
class="skra-combobox-input"
|
|
184
|
+
type="text"
|
|
185
|
+
role="combobox"
|
|
186
|
+
autocomplete="off"
|
|
187
|
+
aria-autocomplete="list"
|
|
188
|
+
aria-haspopup="listbox"
|
|
189
|
+
[attr.id]="triggerId()"
|
|
190
|
+
[attr.aria-controls]="panelId"
|
|
191
|
+
[attr.aria-expanded]="isOpen()"
|
|
192
|
+
[attr.aria-activedescendant]="activeOptionId()"
|
|
193
|
+
[attr.aria-describedby]="describedBy()"
|
|
194
|
+
[attr.aria-invalid]="hasError() ? 'true' : null"
|
|
195
|
+
[attr.aria-required]="isRequired() ? 'true' : null"
|
|
196
|
+
[attr.aria-busy]="loading() ? 'true' : null"
|
|
197
|
+
[attr.placeholder]="placeholder()"
|
|
198
|
+
[disabled]="isDisabled()"
|
|
199
|
+
[readOnly]="isReadonly()"
|
|
200
|
+
[value]="displayValue()"
|
|
201
|
+
(focus)="onFocus()"
|
|
202
|
+
(input)="onInput($event)"
|
|
203
|
+
(keydown)="onTriggerKeydown($event)"
|
|
204
|
+
(blur)="onBlur()"
|
|
205
|
+
/>
|
|
206
|
+
<button
|
|
207
|
+
class="skra-combobox-toggle"
|
|
208
|
+
type="button"
|
|
209
|
+
tabindex="-1"
|
|
210
|
+
aria-hidden="true"
|
|
211
|
+
[disabled]="isDisabled()"
|
|
212
|
+
(mousedown)="$event.preventDefault()"
|
|
213
|
+
(click)="toggle()"
|
|
214
|
+
>
|
|
215
|
+
<span class="skra-combobox-arrow" aria-hidden="true"></span>
|
|
216
|
+
</button>
|
|
217
|
+
|
|
218
|
+
<div
|
|
219
|
+
#panel
|
|
220
|
+
class="skra-combobox-listbox"
|
|
221
|
+
[id]="panelId"
|
|
222
|
+
role="listbox"
|
|
223
|
+
popover="auto"
|
|
224
|
+
(mousedown)="$event.preventDefault()"
|
|
225
|
+
(toggle)="onPanelToggle($event)"
|
|
226
|
+
>
|
|
227
|
+
<!-- ONE persistent live region (text swapped via @if) so loading/empty announce reliably —
|
|
228
|
+
a region injected on demand is unreliably spoken (ADR 0049 rule 4). Hidden when empty via
|
|
229
|
+
:empty in SCSS. -->
|
|
230
|
+
<div class="skra-combobox-status" role="status" aria-live="polite">
|
|
231
|
+
@if (loading()) {
|
|
232
|
+
<ng-content select="[skraLoadingIndicator]"></ng-content>
|
|
233
|
+
<span class="skra-combobox-spinner" aria-hidden="true"></span>
|
|
234
|
+
} @else if (options().length === 0) {
|
|
235
|
+
<ng-content select="[skraComboboxEmpty]"></ng-content>
|
|
236
|
+
}
|
|
237
|
+
</div>
|
|
238
|
+
<ng-content></ng-content>
|
|
239
|
+
</div>
|
|
240
240
|
`, isInline: true, styles: ["@charset \"UTF-8\";:host{display:flex;align-items:center;gap:var(--skra-comp-combobox-gap);inline-size:100%;min-block-size:var(--skra-comp-combobox-min-block-size);box-sizing:border-box;margin:0;padding-inline:var(--skra-comp-combobox-padding-inline);background:var(--skra-comp-combobox-background);color:var(--skra-comp-combobox-foreground);border-color:var(--skra-comp-combobox-border-color);border-width:var(--skra-comp-combobox-border-width);border-style:var(--skra-comp-combobox-border-style);border-radius:var(--skra-comp-combobox-radius);box-shadow:var(--skra-comp-combobox-shadow);transition:background-color var(--skra-comp-combobox-motion-duration) var(--skra-comp-combobox-motion-easing),border-color var(--skra-comp-combobox-motion-duration) var(--skra-comp-combobox-motion-easing)}:host:has(.skra-combobox-input:focus-visible){outline:var(--skra-comp-combobox-focus-ring-width) solid var(--skra-comp-combobox-focus-ring-color);outline-offset:.125rem}:host([data-skra-disabled]){background:var(--skra-comp-combobox-background-disabled);color:var(--skra-comp-combobox-foreground-disabled)}:host([data-skra-readonly]){background:var(--skra-comp-combobox-background-readonly)}:host([data-skra-validation=invalid]){border-color:var(--skra-comp-combobox-border-color-validation-invalid)}.skra-combobox-input{flex:1 1 auto;min-inline-size:0;box-sizing:border-box;margin:0;padding-block:var(--skra-comp-combobox-padding-block);padding-inline:0;border:none;background:transparent;color:inherit;appearance:none;outline:none;font-family:var(--skra-sys-typography-role-body-medium-font-family);font-size:var(--skra-sys-typography-role-body-medium-font-size);font-weight:var(--skra-sys-typography-role-body-medium-font-weight);line-height:var(--skra-sys-typography-role-body-medium-line-height);letter-spacing:var(--skra-sys-typography-role-body-medium-letter-spacing)}.skra-combobox-input::placeholder{color:var(--skra-comp-combobox-foreground-disabled)}.skra-combobox-input:disabled{color:var(--skra-comp-combobox-foreground-disabled);cursor:not-allowed}.skra-combobox-toggle{flex:none;display:inline-flex;align-items:center;justify-content:center;inline-size:var(--skra-comp-combobox-arrow-icon-size);block-size:var(--skra-comp-combobox-arrow-icon-size);margin:0;padding:0;border:none;background:transparent;cursor:pointer}.skra-combobox-toggle:disabled{cursor:not-allowed}.skra-combobox-arrow{inline-size:100%;block-size:100%;background-color:var(--skra-comp-combobox-arrow-color);mask:url(\"data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3E%3Cpath%20d='M6%209l6%206%206-6'%20fill='none'%20stroke='%23000'%20stroke-width='2'/%3E%3C/svg%3E\") no-repeat center/contain;-webkit-mask:url(\"data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%3E%3Cpath%20d='M6%209l6%206%206-6'%20fill='none'%20stroke='%23000'%20stroke-width='2'/%3E%3C/svg%3E\") no-repeat center/contain;transition:transform var(--skra-comp-combobox-motion-duration) var(--skra-comp-combobox-motion-easing)}:host:has(.skra-combobox-input[aria-expanded=true]) .skra-combobox-arrow{transform:rotate(180deg)}.skra-combobox-listbox{position:fixed;margin:0;inset:auto;box-sizing:border-box;padding-block:var(--skra-comp-combobox-panel-padding-block);padding-inline:var(--skra-comp-combobox-panel-padding-inline);background:var(--skra-comp-combobox-panel-background);color:var(--skra-comp-combobox-panel-foreground);border:var(--skra-comp-combobox-border-width) solid var(--skra-comp-combobox-panel-border-color);border-radius:var(--skra-comp-combobox-panel-radius);box-shadow:var(--skra-comp-combobox-panel-shadow);inline-size:max-content;max-block-size:var(--skra-comp-combobox-panel-max-block-size);overflow-y:auto;flex-direction:column;opacity:0;transition:opacity var(--skra-comp-combobox-motion-duration) var(--skra-comp-combobox-motion-easing),display var(--skra-comp-combobox-motion-duration) allow-discrete,overlay var(--skra-comp-combobox-motion-duration) allow-discrete}.skra-combobox-listbox:popover-open{display:flex;opacity:1}@starting-style{.skra-combobox-listbox:popover-open{opacity:0}}.skra-combobox-status{display:flex;align-items:center;gap:var(--skra-comp-combobox-gap);padding-block:var(--skra-comp-combobox-status-padding-block);padding-inline:var(--skra-comp-combobox-status-padding-inline);font-family:var(--skra-sys-typography-role-body-small-font-family);font-size:var(--skra-sys-typography-role-body-small-font-size);font-weight:var(--skra-sys-typography-role-body-small-font-weight);line-height:var(--skra-sys-typography-role-body-small-line-height);letter-spacing:var(--skra-sys-typography-role-body-small-letter-spacing)}.skra-combobox-status:empty{display:none}:host([data-skra-empty]) .skra-combobox-status{color:var(--skra-comp-combobox-empty-foreground)}.skra-combobox-status:has([skraLoadingIndicator]) .skra-combobox-spinner{display:none}.skra-combobox-spinner{flex:none;inline-size:1em;block-size:1em;border:.125rem solid var(--skra-comp-combobox-loading-indicator-color);border-block-start-color:transparent;border-radius:50%;animation:skra-combobox-spin .6s linear infinite}@keyframes skra-combobox-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){:host,.skra-combobox-arrow,.skra-combobox-listbox{transition-duration:0ms}.skra-combobox-spinner{animation-duration:0ms}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
241
241
|
}
|
|
242
242
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: SkraCombobox, decorators: [{
|
|
243
243
|
type: Component,
|
|
244
|
-
args: [{ selector: 'skra-combobox', standalone: true, exportAs: 'skraCombobox', template: `
|
|
245
|
-
<input
|
|
246
|
-
#trigger
|
|
247
|
-
class="skra-combobox-input"
|
|
248
|
-
type="text"
|
|
249
|
-
role="combobox"
|
|
250
|
-
autocomplete="off"
|
|
251
|
-
aria-autocomplete="list"
|
|
252
|
-
aria-haspopup="listbox"
|
|
253
|
-
[attr.id]="triggerId()"
|
|
254
|
-
[attr.aria-controls]="panelId"
|
|
255
|
-
[attr.aria-expanded]="isOpen()"
|
|
256
|
-
[attr.aria-activedescendant]="activeOptionId()"
|
|
257
|
-
[attr.aria-describedby]="describedBy()"
|
|
258
|
-
[attr.aria-invalid]="hasError() ? 'true' : null"
|
|
259
|
-
[attr.aria-required]="isRequired() ? 'true' : null"
|
|
260
|
-
[attr.aria-busy]="loading() ? 'true' : null"
|
|
261
|
-
[attr.placeholder]="placeholder()"
|
|
262
|
-
[disabled]="isDisabled()"
|
|
263
|
-
[readOnly]="isReadonly()"
|
|
264
|
-
[value]="displayValue()"
|
|
265
|
-
(focus)="onFocus()"
|
|
266
|
-
(input)="onInput($event)"
|
|
267
|
-
(keydown)="onTriggerKeydown($event)"
|
|
268
|
-
(blur)="onBlur()"
|
|
269
|
-
/>
|
|
270
|
-
<button
|
|
271
|
-
class="skra-combobox-toggle"
|
|
272
|
-
type="button"
|
|
273
|
-
tabindex="-1"
|
|
274
|
-
aria-hidden="true"
|
|
275
|
-
[disabled]="isDisabled()"
|
|
276
|
-
(mousedown)="$event.preventDefault()"
|
|
277
|
-
(click)="toggle()"
|
|
278
|
-
>
|
|
279
|
-
<span class="skra-combobox-arrow" aria-hidden="true"></span>
|
|
280
|
-
</button>
|
|
281
|
-
|
|
282
|
-
<div
|
|
283
|
-
#panel
|
|
284
|
-
class="skra-combobox-listbox"
|
|
285
|
-
[id]="panelId"
|
|
286
|
-
role="listbox"
|
|
287
|
-
popover="auto"
|
|
288
|
-
(mousedown)="$event.preventDefault()"
|
|
289
|
-
(toggle)="onPanelToggle($event)"
|
|
290
|
-
>
|
|
291
|
-
<!-- ONE persistent live region (text swapped via @if) so loading/empty announce reliably —
|
|
292
|
-
a region injected on demand is unreliably spoken (ADR 0049 rule 4). Hidden when empty via
|
|
293
|
-
:empty in SCSS. -->
|
|
294
|
-
<div class="skra-combobox-status" role="status" aria-live="polite">
|
|
295
|
-
@if (loading()) {
|
|
296
|
-
<ng-content select="[skraLoadingIndicator]"></ng-content>
|
|
297
|
-
<span class="skra-combobox-spinner" aria-hidden="true"></span>
|
|
298
|
-
} @else if (options().length === 0) {
|
|
299
|
-
<ng-content select="[skraComboboxEmpty]"></ng-content>
|
|
300
|
-
}
|
|
301
|
-
</div>
|
|
302
|
-
<ng-content></ng-content>
|
|
303
|
-
</div>
|
|
244
|
+
args: [{ selector: 'skra-combobox', standalone: true, exportAs: 'skraCombobox', template: `
|
|
245
|
+
<input
|
|
246
|
+
#trigger
|
|
247
|
+
class="skra-combobox-input"
|
|
248
|
+
type="text"
|
|
249
|
+
role="combobox"
|
|
250
|
+
autocomplete="off"
|
|
251
|
+
aria-autocomplete="list"
|
|
252
|
+
aria-haspopup="listbox"
|
|
253
|
+
[attr.id]="triggerId()"
|
|
254
|
+
[attr.aria-controls]="panelId"
|
|
255
|
+
[attr.aria-expanded]="isOpen()"
|
|
256
|
+
[attr.aria-activedescendant]="activeOptionId()"
|
|
257
|
+
[attr.aria-describedby]="describedBy()"
|
|
258
|
+
[attr.aria-invalid]="hasError() ? 'true' : null"
|
|
259
|
+
[attr.aria-required]="isRequired() ? 'true' : null"
|
|
260
|
+
[attr.aria-busy]="loading() ? 'true' : null"
|
|
261
|
+
[attr.placeholder]="placeholder()"
|
|
262
|
+
[disabled]="isDisabled()"
|
|
263
|
+
[readOnly]="isReadonly()"
|
|
264
|
+
[value]="displayValue()"
|
|
265
|
+
(focus)="onFocus()"
|
|
266
|
+
(input)="onInput($event)"
|
|
267
|
+
(keydown)="onTriggerKeydown($event)"
|
|
268
|
+
(blur)="onBlur()"
|
|
269
|
+
/>
|
|
270
|
+
<button
|
|
271
|
+
class="skra-combobox-toggle"
|
|
272
|
+
type="button"
|
|
273
|
+
tabindex="-1"
|
|
274
|
+
aria-hidden="true"
|
|
275
|
+
[disabled]="isDisabled()"
|
|
276
|
+
(mousedown)="$event.preventDefault()"
|
|
277
|
+
(click)="toggle()"
|
|
278
|
+
>
|
|
279
|
+
<span class="skra-combobox-arrow" aria-hidden="true"></span>
|
|
280
|
+
</button>
|
|
281
|
+
|
|
282
|
+
<div
|
|
283
|
+
#panel
|
|
284
|
+
class="skra-combobox-listbox"
|
|
285
|
+
[id]="panelId"
|
|
286
|
+
role="listbox"
|
|
287
|
+
popover="auto"
|
|
288
|
+
(mousedown)="$event.preventDefault()"
|
|
289
|
+
(toggle)="onPanelToggle($event)"
|
|
290
|
+
>
|
|
291
|
+
<!-- ONE persistent live region (text swapped via @if) so loading/empty announce reliably —
|
|
292
|
+
a region injected on demand is unreliably spoken (ADR 0049 rule 4). Hidden when empty via
|
|
293
|
+
:empty in SCSS. -->
|
|
294
|
+
<div class="skra-combobox-status" role="status" aria-live="polite">
|
|
295
|
+
@if (loading()) {
|
|
296
|
+
<ng-content select="[skraLoadingIndicator]"></ng-content>
|
|
297
|
+
<span class="skra-combobox-spinner" aria-hidden="true"></span>
|
|
298
|
+
} @else if (options().length === 0) {
|
|
299
|
+
<ng-content select="[skraComboboxEmpty]"></ng-content>
|
|
300
|
+
}
|
|
301
|
+
</div>
|
|
302
|
+
<ng-content></ng-content>
|
|
303
|
+
</div>
|
|
304
304
|
`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, host: {
|
|
305
305
|
'[attr.data-skra-loading]': 'loading() ? "" : null',
|
|
306
306
|
'[attr.data-skra-empty]': '!loading() && options().length === 0 ? "" : null',
|