@eui/eds 22.0.0-alpha.21 → 22.0.0-alpha.23
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/docs/changelog.html +61 -0
- package/docs/components/EdsButton.html +77 -203
- package/docs/components/EdsCalendarDay.html +1 -1
- package/docs/components/EdsCalendarHeader.html +1 -1
- package/docs/components/EdsDatepicker.html +1 -1
- package/docs/components/EdsDialogContainer.html +1 -1
- package/docs/components/EdsFeedbackMessage.html +35 -73
- package/docs/components/EdsFileUpload.html +1 -1
- package/docs/components/EdsFlexLayout.html +1 -1
- package/docs/components/EdsGridLayout.html +1 -1
- package/docs/components/EdsGridLayoutCell.html +1 -1
- package/docs/components/EdsGridLayoutRow.html +1 -1
- package/docs/components/EdsIconState.html +38 -3
- package/docs/components/EdsInputButton.html +0 -57
- package/docs/components/EdsInputCheckbox.html +0 -62
- package/docs/components/EdsInputIcon.html +0 -53
- package/docs/components/EdsInputNumber.html +0 -60
- package/docs/components/EdsInputRadio.html +0 -62
- package/docs/components/EdsInputText.html +0 -62
- package/docs/components/EdsLabel.html +1 -1
- package/docs/components/EdsLanguageSelectorDialog.html +3 -5
- package/docs/components/EdsLink.html +1 -1
- package/docs/components/EdsLoadingIndicator.html +1 -1
- package/docs/components/EdsPaginator.html +1 -1
- package/docs/components/EdsRating.html +66 -57
- package/docs/components/EdsSelect.html +0 -45
- package/docs/components/EdsSnc.html +2 -2
- package/docs/components/EdsTab.html +8 -133
- package/docs/components/EdsTabBody.html +21 -41
- package/docs/components/EdsTabHeader.html +13 -25
- package/docs/components/EdsTabHeaderLabel.html +4 -126
- package/docs/components/EdsTabHeaderLeftContent.html +4 -126
- package/docs/components/EdsTabHeaderRightContent.html +4 -126
- package/docs/components/EdsTabHeaderSublabel.html +4 -126
- package/docs/components/EdsTabs.html +113 -140
- package/docs/components/EdsTextarea.html +0 -62
- package/docs/components/EdsTreeListToolbar.html +1 -1
- package/docs/components/EdsTrend.html +1 -1
- package/docs/directives/EdsColorDirective.html +0 -9
- package/docs/directives/EdsFlexColDirective.html +1 -1
- package/docs/directives/EdsFlexGrowDirective.html +1 -1
- package/docs/directives/EdsFlexNoShrinkDirective.html +1 -1
- package/docs/directives/EdsSizeDirective.html +0 -3
- package/docs/directives/EdsTooltip.html +45 -281
- package/docs/js/search/search_index.js +2 -2
- package/docs/json/EdsButton.md +15 -24
- package/docs/json/EdsFeedbackMessage.md +4 -10
- package/docs/json/EdsIconState.md +2 -1
- package/docs/json/EdsRating.md +2 -0
- package/docs/json/EdsTab.md +1 -1
- package/docs/json/EdsTabs.md +7 -8
- package/docs/json/EdsTooltip.md +3 -3
- package/docs/json/documentation.json +1803 -2031
- package/docs/llms.txt +72 -109
- package/docs/miscellaneous/typealiases.html +179 -16
- package/docs/miscellaneous/variables.html +16 -16
- package/docs/properties.html +1 -1
- package/eds-flex-layout/package.json +4 -0
- package/eds-grid-layout/package.json +4 -0
- package/eds-icon-state/package.json +4 -0
- package/eds-label/package.json +4 -0
- package/eds-link/package.json +4 -0
- package/eds-loading-indicator/package.json +4 -0
- package/eds-snc/package.json +4 -0
- package/eds-trend/package.json +4 -0
- package/fesm2022/eui-eds-eds-alert.mjs +3 -3
- package/fesm2022/eui-eds-eds-alert.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-button.mjs +53 -85
- package/fesm2022/eui-eds-eds-button.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-calendar.mjs +4 -4
- package/fesm2022/eui-eds-eds-calendar.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-datepicker.mjs +2 -2
- package/fesm2022/eui-eds-eds-datepicker.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-dialog.mjs +4 -4
- package/fesm2022/eui-eds-eds-dialog.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-discussion-thread.mjs +3 -3
- package/fesm2022/eui-eds-eds-discussion-thread.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-feedback-message.mjs +28 -42
- package/fesm2022/eui-eds-eds-feedback-message.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-file-upload.mjs +2 -2
- package/fesm2022/eui-eds-eds-file-upload.mjs.map +1 -1
- package/fesm2022/{eui-eds-utilities-eds-flex-layout.mjs → eui-eds-eds-flex-layout.mjs} +1 -1
- package/fesm2022/eui-eds-eds-flex-layout.mjs.map +1 -0
- package/fesm2022/{eui-eds-utilities-eds-grid-layout.mjs → eui-eds-eds-grid-layout.mjs} +1 -1
- package/fesm2022/eui-eds-eds-grid-layout.mjs.map +1 -0
- package/fesm2022/eui-eds-eds-growl.mjs +3 -3
- package/fesm2022/eui-eds-eds-growl.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-icon-state.mjs +56 -0
- package/fesm2022/eui-eds-eds-icon-state.mjs.map +1 -0
- package/fesm2022/eui-eds-eds-input-button.mjs +10 -13
- package/fesm2022/eui-eds-eds-input-button.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-input-checkbox.mjs +6 -17
- package/fesm2022/eui-eds-eds-input-checkbox.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-input-icon.mjs +10 -9
- package/fesm2022/eui-eds-eds-input-icon.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-input-number.mjs +5 -14
- package/fesm2022/eui-eds-eds-input-number.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-input-radio.mjs +6 -17
- package/fesm2022/eui-eds-eds-input-radio.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-input-text.mjs +5 -16
- package/fesm2022/eui-eds-eds-input-text.mjs.map +1 -1
- package/fesm2022/{eui-eds-utilities-eds-label.mjs → eui-eds-eds-label.mjs} +1 -1
- package/fesm2022/eui-eds-eds-label.mjs.map +1 -0
- package/fesm2022/eui-eds-eds-language-selector.mjs +5 -9
- package/fesm2022/eui-eds-eds-language-selector.mjs.map +1 -1
- package/fesm2022/{eui-eds-utilities-eds-link.mjs → eui-eds-eds-link.mjs} +1 -1
- package/fesm2022/eui-eds-eds-link.mjs.map +1 -0
- package/fesm2022/{eui-eds-utilities-eds-loading-indicator.mjs → eui-eds-eds-loading-indicator.mjs} +1 -1
- package/fesm2022/eui-eds-eds-loading-indicator.mjs.map +1 -0
- package/fesm2022/eui-eds-eds-paginator.mjs +2 -2
- package/fesm2022/eui-eds-eds-paginator.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-progress-bar.mjs +3 -3
- package/fesm2022/eui-eds-eds-progress-bar.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-rating.mjs +30 -16
- package/fesm2022/eui-eds-eds-rating.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-select.mjs +10 -33
- package/fesm2022/eui-eds-eds-select.mjs.map +1 -1
- package/fesm2022/{eui-eds-utilities-eds-snc.mjs → eui-eds-eds-snc.mjs} +3 -3
- package/fesm2022/eui-eds-eds-snc.mjs.map +1 -0
- package/fesm2022/eui-eds-eds-tabs.mjs +192 -259
- package/fesm2022/eui-eds-eds-tabs.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-textarea.mjs +5 -16
- package/fesm2022/eui-eds-eds-textarea.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-tooltip.mjs +71 -86
- package/fesm2022/eui-eds-eds-tooltip.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-tree-list.mjs +2 -2
- package/fesm2022/eui-eds-eds-tree-list.mjs.map +1 -1
- package/fesm2022/eui-eds-eds-tree.mjs +2 -2
- package/fesm2022/eui-eds-eds-tree.mjs.map +1 -1
- package/fesm2022/{eui-eds-utilities-eds-trend.mjs → eui-eds-eds-trend.mjs} +1 -1
- package/fesm2022/eui-eds-eds-trend.mjs.map +1 -0
- package/package.json +33 -33
- package/types/eui-eds-eds-button.d.ts +47 -33
- package/types/eui-eds-eds-button.d.ts.map +1 -1
- package/types/eui-eds-eds-feedback-message.d.ts +20 -10
- package/types/eui-eds-eds-feedback-message.d.ts.map +1 -1
- package/types/{eui-eds-utilities-eds-flex-layout.d.ts → eui-eds-eds-flex-layout.d.ts} +1 -1
- package/types/eui-eds-eds-flex-layout.d.ts.map +1 -0
- package/types/{eui-eds-utilities-eds-grid-layout.d.ts → eui-eds-eds-grid-layout.d.ts} +1 -1
- package/types/eui-eds-eds-grid-layout.d.ts.map +1 -0
- package/types/{eui-eds-utilities-eds-icon-state.d.ts → eui-eds-eds-icon-state.d.ts} +8 -3
- package/types/eui-eds-eds-icon-state.d.ts.map +1 -0
- package/types/eui-eds-eds-input-button.d.ts +5 -1
- package/types/eui-eds-eds-input-button.d.ts.map +1 -1
- package/types/eui-eds-eds-input-checkbox.d.ts +0 -4
- package/types/eui-eds-eds-input-checkbox.d.ts.map +1 -1
- package/types/eui-eds-eds-input-icon.d.ts +5 -1
- package/types/eui-eds-eds-input-icon.d.ts.map +1 -1
- package/types/eui-eds-eds-input-number.d.ts +1 -5
- package/types/eui-eds-eds-input-number.d.ts.map +1 -1
- package/types/eui-eds-eds-input-radio.d.ts +0 -4
- package/types/eui-eds-eds-input-radio.d.ts.map +1 -1
- package/types/eui-eds-eds-input-text.d.ts +1 -5
- package/types/eui-eds-eds-input-text.d.ts.map +1 -1
- package/types/{eui-eds-utilities-eds-label.d.ts → eui-eds-eds-label.d.ts} +1 -1
- package/types/eui-eds-eds-label.d.ts.map +1 -0
- package/types/eui-eds-eds-language-selector.d.ts.map +1 -1
- package/types/{eui-eds-utilities-eds-link.d.ts → eui-eds-eds-link.d.ts} +1 -1
- package/types/eui-eds-eds-link.d.ts.map +1 -0
- package/types/{eui-eds-utilities-eds-loading-indicator.d.ts → eui-eds-eds-loading-indicator.d.ts} +1 -1
- package/types/eui-eds-eds-loading-indicator.d.ts.map +1 -0
- package/types/eui-eds-eds-rating.d.ts +19 -2
- package/types/eui-eds-eds-rating.d.ts.map +1 -1
- package/types/eui-eds-eds-select.d.ts +1 -5
- package/types/eui-eds-eds-select.d.ts.map +1 -1
- package/types/{eui-eds-utilities-eds-snc.d.ts → eui-eds-eds-snc.d.ts} +1 -1
- package/types/eui-eds-eds-snc.d.ts.map +1 -0
- package/types/eui-eds-eds-tabs.d.ts +87 -100
- package/types/eui-eds-eds-tabs.d.ts.map +1 -1
- package/types/eui-eds-eds-textarea.d.ts +1 -5
- package/types/eui-eds-eds-textarea.d.ts.map +1 -1
- package/types/eui-eds-eds-tooltip.d.ts +27 -25
- package/types/eui-eds-eds-tooltip.d.ts.map +1 -1
- package/types/{eui-eds-utilities-eds-trend.d.ts → eui-eds-eds-trend.d.ts} +1 -1
- package/types/eui-eds-eds-trend.d.ts.map +1 -0
- package/fesm2022/eui-eds-utilities-eds-flex-layout.mjs.map +0 -1
- package/fesm2022/eui-eds-utilities-eds-grid-layout.mjs.map +0 -1
- package/fesm2022/eui-eds-utilities-eds-icon-state.mjs +0 -49
- package/fesm2022/eui-eds-utilities-eds-icon-state.mjs.map +0 -1
- package/fesm2022/eui-eds-utilities-eds-label.mjs.map +0 -1
- package/fesm2022/eui-eds-utilities-eds-link.mjs.map +0 -1
- package/fesm2022/eui-eds-utilities-eds-loading-indicator.mjs.map +0 -1
- package/fesm2022/eui-eds-utilities-eds-snc.mjs.map +0 -1
- package/fesm2022/eui-eds-utilities-eds-trend.mjs.map +0 -1
- package/types/eui-eds-utilities-eds-flex-layout.d.ts.map +0 -1
- package/types/eui-eds-utilities-eds-grid-layout.d.ts.map +0 -1
- package/types/eui-eds-utilities-eds-icon-state.d.ts.map +0 -1
- package/types/eui-eds-utilities-eds-label.d.ts.map +0 -1
- package/types/eui-eds-utilities-eds-link.d.ts.map +0 -1
- package/types/eui-eds-utilities-eds-loading-indicator.d.ts.map +0 -1
- package/types/eui-eds-utilities-eds-snc.d.ts.map +0 -1
- package/types/eui-eds-utilities-eds-trend.d.ts.map +0 -1
- package/utilities/eds-flex-layout/package.json +0 -4
- package/utilities/eds-grid-layout/package.json +0 -4
- package/utilities/eds-icon-state/package.json +0 -4
- package/utilities/eds-label/package.json +0 -4
- package/utilities/eds-link/package.json +0 -4
- package/utilities/eds-loading-indicator/package.json +0 -4
- package/utilities/eds-snc/package.json +0 -4
- package/utilities/eds-trend/package.json +0 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eui-eds-eds-loading-indicator.mjs","sources":["../../eds-loading-indicator/eds-loading-indicator.ts","../../eds-loading-indicator/eds-loading-indicator.html","../../eds-loading-indicator/index.ts","../../eds-loading-indicator/eui-eds-eds-loading-indicator.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy, input, computed } from '@angular/core';\nimport { EDS_ICON } from '@eui/eds/eds-icon';\n\n/**\n * Local narrowed size union — the loading indicator's size contract.\n */\nexport type EdsLoadingIndicatorSize =\n | '2xs'\n | 'xs'\n | 's'\n | 'm'\n | 'l'\n | 'xl'\n | '2xl'\n | '3xl';\n\n/**\n * A loading indicator component that displays a spinning icon with an optional label beneath it.\n * Useful as a full-area or inline loading state placeholder.\n *\n * Usage:\n * ```html\n * <eds-loading-indicator />\n * <eds-loading-indicator label=\"Loading data...\" size=\"l\" />\n * ```\n */\n@Component({\n selector: 'eds-loading-indicator',\n templateUrl: './eds-loading-indicator.html',\n styleUrl: './eds-loading-indicator.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [...EDS_ICON],\n host: {\n role: 'progressbar',\n '[attr.size]': 'size()',\n '[attr.data-e2e]': 'e2eAttr()',\n '[attr.aria-label]': 'computedAriaLabel()',\n },\n})\nexport class EdsLoadingIndicator {\n /**\n * Label text displayed below the spinner.\n * When empty, only the spinner is shown.\n * @default ''\n */\n label = input('');\n\n /**\n * Size of the loading indicator (drives the spinner icon size).\n * @default 'm'\n */\n size = input<EdsLoadingIndicatorSize>('m');\n\n /**\n * Accessible label for screen readers.\n * Defaults to the label text, or 'Loading' if no label is provided.\n */\n ariaLabel = input('');\n\n /**\n * Data attribute for e2e testing.\n * @default 'eds-loading-indicator'\n */\n e2eAttr = input('eds-loading-indicator');\n\n protected computedAriaLabel = computed(() => {\n return this.ariaLabel() || this.label() || 'Loading';\n });\n}\n","<eds-icon icon=\"circle-notch\" isLoading [size]=\"size()\" />\n\n@if (label()) {\n <span class=\"eds-loading-indicator__label\">{{ label() }}</span>\n}\n","import { EdsLoadingIndicator } from './eds-loading-indicator';\n\nexport { EdsLoadingIndicator } from './eds-loading-indicator';\n\n/** Convenience array for importing eds-loading-indicator. */\nexport const EDS_LOADING_INDICATOR = [\n EdsLoadingIndicator,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAgBA;;;;;;;;;AASG;MAcU,mBAAmB,CAAA;AAbhC,IAAA,WAAA,GAAA;AAcI;;;;AAIG;QACH,IAAA,CAAA,KAAK,GAAG,KAAK,CAAC,EAAE;kFAAC;AAEjB;;;AAGG;QACH,IAAA,CAAA,IAAI,GAAG,KAAK,CAA0B,GAAG;iFAAC;AAE1C;;;AAGG;QACH,IAAA,CAAA,SAAS,GAAG,KAAK,CAAC,EAAE;sFAAC;AAErB;;;AAGG;QACH,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,uBAAuB;oFAAC;AAE9B,QAAA,IAAA,CAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;YACxC,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,SAAS;QACxD,CAAC;8FAAC;AACL,IAAA;8GA7BY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,4uBCvChC,+JAKA,EAAA,MAAA,EAAA,CAAA,oMAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,WAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDkCa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAb/B,SAAS;+BACI,uBAAuB,EAAA,eAAA,EAGhB,uBAAuB,CAAC,MAAM,WACtC,CAAC,GAAG,QAAQ,CAAC,EAAA,IAAA,EAChB;AACF,wBAAA,IAAI,EAAE,aAAa;AACnB,wBAAA,aAAa,EAAE,QAAQ;AACvB,wBAAA,iBAAiB,EAAE,WAAW;AAC9B,wBAAA,mBAAmB,EAAE,qBAAqB;AAC7C,qBAAA,EAAA,QAAA,EAAA,+JAAA,EAAA,MAAA,EAAA,CAAA,oMAAA,CAAA,EAAA;;;AEjCL;AACO,MAAM,qBAAqB,GAAG;IACjC,mBAAmB;;;ACNvB;;AAEG;;;;"}
|
|
@@ -267,7 +267,7 @@ class EdsPaginator {
|
|
|
267
267
|
});
|
|
268
268
|
}
|
|
269
269
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsPaginator, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
270
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EdsPaginator, isStandalone: true, selector: "eds-paginator", inputs: { e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, length: { classPropertyName: "length", publicName: "length", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, nbPageNumberNavigation: { classPropertyName: "nbPageNumberNavigation", publicName: "nbPageNumberNavigation", isSignal: true, isRequired: false, transformFunction: null }, isHidden: { classPropertyName: "isHidden", publicName: "isHidden", isSignal: true, isRequired: false, transformFunction: null }, isBasicMode: { classPropertyName: "isBasicMode", publicName: "isBasicMode", isSignal: true, isRequired: false, transformFunction: null }, hasPageNumberNavigation: { classPropertyName: "hasPageNumberNavigation", publicName: "hasPageNumberNavigation", isSignal: true, isRequired: false, transformFunction: null }, hasPageNumberNavigationCompact: { classPropertyName: "hasPageNumberNavigationCompact", publicName: "hasPageNumberNavigationCompact", isSignal: true, isRequired: false, transformFunction: null }, hasDynamicLength: { classPropertyName: "hasDynamicLength", publicName: "hasDynamicLength", isSignal: true, isRequired: false, transformFunction: null }, hasPageSize: { classPropertyName: "hasPageSize", publicName: "hasPageSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pageChange: "pageChange" }, host: { properties: { "class": "hostClasses()", "attr.data-e2e": "e2eAttr()" } }, ngImport: i0, template: "<div class=\"eds-paginator__page\">\n @if (!isBasicMode()) {\n @if (hasPageSize()) {\n <div class=\"eds-paginator__page-selector-wrapper\" [class.eds-paginator__page-selector-wrapper--compact]=\"hasPageNumberNavigationCompact()\">\n <div class=\"eds-paginator__page-selector\">\n <span class=\"eds-paginator__page-selector-label\">Items per page:</span>\n <select\n edsSelect\n class=\"eds-paginator__page-size-select\"\n [attr.aria-label]=\"'Items per page'\"\n (change)=\"onPageSizeChange($any($event.target).value)\">\n @for (option of pageSizeOptions(); track option) {\n <option [value]=\"option\" [selected]=\"option === internalPageSize()\">{{ option }}</option>\n }\n </select>\n </div>\n @if (internalLength() > 0) {\n <div class=\"eds-paginator__page-range-main\" role=\"status\">\n {{ range() }} of {{ rangeLength() }}\n </div>\n }\n </div>\n }\n }\n</div>\n\n<nav class=\"eds-paginator__navigation\" [attr.aria-label]=\"'Pagination navigation, ' + rangeLength() + ' total items'\">\n @if (isBasicMode()) {\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-left:core\"\n ariaLabel=\"Go to previous page\"\n [disabled]=\"isPrevDisabled()\"\n (buttonClick)=\"goPreviousPage()\">\n </button>\n </div>\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-right:core\"\n ariaLabel=\"Go to next page\"\n [disabled]=\"isNextDisabled()\"\n (buttonClick)=\"goNextPage()\">\n </button>\n </div>\n } @else {\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-double-left:core\"\n ariaLabel=\"Go to first page\"\n [disabled]=\"isPrevDisabled()\"\n (buttonClick)=\"goFirstPage()\">\n </button>\n </div>\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-left:core\"\n ariaLabel=\"Go to previous page\"\n [disabled]=\"isPrevDisabled()\"\n (buttonClick)=\"goPreviousPage()\">\n </button>\n </div>\n\n @if (hasPageNumberNavigation()) {\n <div class=\"eds-paginator__navigation-numbers\">\n @for (pageNumber of pageNumberNavigation(); track pageNumber) {\n <button
|
|
270
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EdsPaginator, isStandalone: true, selector: "eds-paginator", inputs: { e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, length: { classPropertyName: "length", publicName: "length", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, nbPageNumberNavigation: { classPropertyName: "nbPageNumberNavigation", publicName: "nbPageNumberNavigation", isSignal: true, isRequired: false, transformFunction: null }, isHidden: { classPropertyName: "isHidden", publicName: "isHidden", isSignal: true, isRequired: false, transformFunction: null }, isBasicMode: { classPropertyName: "isBasicMode", publicName: "isBasicMode", isSignal: true, isRequired: false, transformFunction: null }, hasPageNumberNavigation: { classPropertyName: "hasPageNumberNavigation", publicName: "hasPageNumberNavigation", isSignal: true, isRequired: false, transformFunction: null }, hasPageNumberNavigationCompact: { classPropertyName: "hasPageNumberNavigationCompact", publicName: "hasPageNumberNavigationCompact", isSignal: true, isRequired: false, transformFunction: null }, hasDynamicLength: { classPropertyName: "hasDynamicLength", publicName: "hasDynamicLength", isSignal: true, isRequired: false, transformFunction: null }, hasPageSize: { classPropertyName: "hasPageSize", publicName: "hasPageSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pageChange: "pageChange" }, host: { properties: { "class": "hostClasses()", "attr.data-e2e": "e2eAttr()" } }, ngImport: i0, template: "<div class=\"eds-paginator__page\">\n @if (!isBasicMode()) {\n @if (hasPageSize()) {\n <div class=\"eds-paginator__page-selector-wrapper\" [class.eds-paginator__page-selector-wrapper--compact]=\"hasPageNumberNavigationCompact()\">\n <div class=\"eds-paginator__page-selector\">\n <span class=\"eds-paginator__page-selector-label\">Items per page:</span>\n <select\n edsSelect\n class=\"eds-paginator__page-size-select\"\n [attr.aria-label]=\"'Items per page'\"\n (change)=\"onPageSizeChange($any($event.target).value)\">\n @for (option of pageSizeOptions(); track option) {\n <option [value]=\"option\" [selected]=\"option === internalPageSize()\">{{ option }}</option>\n }\n </select>\n </div>\n @if (internalLength() > 0) {\n <div class=\"eds-paginator__page-range-main\" role=\"status\">\n {{ range() }} of {{ rangeLength() }}\n </div>\n }\n </div>\n }\n }\n</div>\n\n<nav class=\"eds-paginator__navigation\" [attr.aria-label]=\"'Pagination navigation, ' + rangeLength() + ' total items'\">\n @if (isBasicMode()) {\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-left:core\"\n ariaLabel=\"Go to previous page\"\n [disabled]=\"isPrevDisabled()\"\n (buttonClick)=\"goPreviousPage()\">\n </button>\n </div>\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-right:core\"\n ariaLabel=\"Go to next page\"\n [disabled]=\"isNextDisabled()\"\n (buttonClick)=\"goNextPage()\">\n </button>\n </div>\n } @else {\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-double-left:core\"\n ariaLabel=\"Go to first page\"\n [disabled]=\"isPrevDisabled()\"\n (buttonClick)=\"goFirstPage()\">\n </button>\n </div>\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-left:core\"\n ariaLabel=\"Go to previous page\"\n [disabled]=\"isPrevDisabled()\"\n (buttonClick)=\"goPreviousPage()\">\n </button>\n </div>\n\n @if (hasPageNumberNavigation()) {\n <div class=\"eds-paginator__navigation-numbers\">\n @for (pageNumber of pageNumberNavigation(); track pageNumber) {\n <button edsButton size=\"s\" color=\"neutral\" variant=\"tertiary\" class=\"eds-paginator__page-number\" [class.eds-paginator__page-number--active]=\"pageNumber === internalPage()\" [attr.aria-current]=\"pageNumber === internalPage() ? 'page' : null\" [attr.aria-label]=\"'Page ' + (pageNumber + 1)\" (click)=\"goToPage(pageNumber)\">\n {{ pageNumber + 1 }}\n </button>\n }\n </div>\n }\n\n @if (internalLength() > 0) {\n <div class=\"eds-paginator__page-range\" role=\"status\">\n {{ range() }} of {{ rangeLength() }}\n </div>\n }\n\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-right:core\"\n ariaLabel=\"Go to next page\"\n [disabled]=\"isNextDisabled()\"\n (buttonClick)=\"goNextPage()\">\n </button>\n </div>\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-double-right:core\"\n ariaLabel=\"Go to last page\"\n [disabled]=\"isNextDisabled()\"\n (buttonClick)=\"goLastPage()\">\n </button>\n </div>\n }\n</nav>\n", styles: [".eui-21 :host{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:var(--eds-sp-s) 0;position:relative;width:100%}.eui-21 :host .eds-paginator__page{display:flex;flex-direction:column;font:var(--eds-f-paragraph-m)}.eui-21 :host .eds-paginator__page-selector-wrapper{display:flex;flex-wrap:wrap;flex-direction:column;gap:var(--eds-sp-2xs)}.eui-21 :host .eds-paginator__page-selector-wrapper--compact{flex-direction:row;align-items:center;gap:var(--eds-sp-s)}.eui-21 :host .eds-paginator__page-selector{align-items:center;display:flex;flex-wrap:wrap;gap:var(--eds-sp-xs);font:var(--eds-f-paragraph-s)}.eui-21 :host .eds-paginator__page-selector-label{white-space:nowrap}.eui-21 :host .eds-paginator__page-range-main{align-items:center;font:var(--eds-f-paragraph-s);color:var(--eds-c-foreground-subtler)}.eui-21 :host .eds-paginator__page-size-select{min-width:4rem}.eui-21 :host .eds-paginator__navigation{align-items:center;display:flex;gap:var(--eds-sp-2xs)}.eui-21 :host .eds-paginator__navigation-item{align-items:center;display:inline-flex}.eui-21 :host .eds-paginator__navigation-numbers{align-items:center;display:inline-flex;gap:var(--eds-sp-2xs)}.eui-21 :host .eds-paginator__page-range{align-items:center;font:var(--eds-f-paragraph-s);color:var(--eds-c-foreground-subtler);display:none;padding:0 var(--eds-sp-xs);white-space:nowrap}.eui-21 :host .eds-paginator__page-number{min-width:var(--eds-si-2xl);padding:0 var(--eds-sp-2xs)}.eui-21 :host .eds-paginator__page-number--active{font-weight:700;color:var(--eds-c-foreground-primary);border:1px solid var(--eds-c-border-primary)}.eui-21 :host.eds-paginator--hidden{display:none}@media screen and (max-width:767px){.eui-21 :host{align-items:center;display:flex;justify-content:center;width:100%}.eui-21 :host .eds-paginator__page{display:none}.eui-21 :host .eds-paginator__page-range{display:inline-flex}.eui-21 :host .eds-paginator__navigation-numbers{display:none}}\n"], dependencies: [{ kind: "component", type: i1.EdsIconButton, selector: "button[edsIconButton]", inputs: ["icon", "color", "size", "ariaLabel", "rounded", "disabled"], outputs: ["buttonClick"] }, { kind: "component", type: i2.EdsButton, selector: "button[edsButton]", inputs: ["e2eAttr", "id", "variant", "color", "size", "disabled", "block", "iconButton", "avatarButton", "lineWrap", "rounded", "isChecked"] }, { kind: "component", type: i3.EdsSelect, selector: "select[edsSelect]", inputs: ["e2eAttr", "placeholder", "readonly", "isInvalid", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
271
271
|
}
|
|
272
272
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsPaginator, decorators: [{
|
|
273
273
|
type: Component,
|
|
@@ -279,7 +279,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
|
|
|
279
279
|
], host: {
|
|
280
280
|
'[class]': 'hostClasses()',
|
|
281
281
|
'[attr.data-e2e]': 'e2eAttr()',
|
|
282
|
-
}, template: "<div class=\"eds-paginator__page\">\n @if (!isBasicMode()) {\n @if (hasPageSize()) {\n <div class=\"eds-paginator__page-selector-wrapper\" [class.eds-paginator__page-selector-wrapper--compact]=\"hasPageNumberNavigationCompact()\">\n <div class=\"eds-paginator__page-selector\">\n <span class=\"eds-paginator__page-selector-label\">Items per page:</span>\n <select\n edsSelect\n class=\"eds-paginator__page-size-select\"\n [attr.aria-label]=\"'Items per page'\"\n (change)=\"onPageSizeChange($any($event.target).value)\">\n @for (option of pageSizeOptions(); track option) {\n <option [value]=\"option\" [selected]=\"option === internalPageSize()\">{{ option }}</option>\n }\n </select>\n </div>\n @if (internalLength() > 0) {\n <div class=\"eds-paginator__page-range-main\" role=\"status\">\n {{ range() }} of {{ rangeLength() }}\n </div>\n }\n </div>\n }\n }\n</div>\n\n<nav class=\"eds-paginator__navigation\" [attr.aria-label]=\"'Pagination navigation, ' + rangeLength() + ' total items'\">\n @if (isBasicMode()) {\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-left:core\"\n ariaLabel=\"Go to previous page\"\n [disabled]=\"isPrevDisabled()\"\n (buttonClick)=\"goPreviousPage()\">\n </button>\n </div>\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-right:core\"\n ariaLabel=\"Go to next page\"\n [disabled]=\"isNextDisabled()\"\n (buttonClick)=\"goNextPage()\">\n </button>\n </div>\n } @else {\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-double-left:core\"\n ariaLabel=\"Go to first page\"\n [disabled]=\"isPrevDisabled()\"\n (buttonClick)=\"goFirstPage()\">\n </button>\n </div>\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-left:core\"\n ariaLabel=\"Go to previous page\"\n [disabled]=\"isPrevDisabled()\"\n (buttonClick)=\"goPreviousPage()\">\n </button>\n </div>\n\n @if (hasPageNumberNavigation()) {\n <div class=\"eds-paginator__navigation-numbers\">\n @for (pageNumber of pageNumberNavigation(); track pageNumber) {\n <button
|
|
282
|
+
}, template: "<div class=\"eds-paginator__page\">\n @if (!isBasicMode()) {\n @if (hasPageSize()) {\n <div class=\"eds-paginator__page-selector-wrapper\" [class.eds-paginator__page-selector-wrapper--compact]=\"hasPageNumberNavigationCompact()\">\n <div class=\"eds-paginator__page-selector\">\n <span class=\"eds-paginator__page-selector-label\">Items per page:</span>\n <select\n edsSelect\n class=\"eds-paginator__page-size-select\"\n [attr.aria-label]=\"'Items per page'\"\n (change)=\"onPageSizeChange($any($event.target).value)\">\n @for (option of pageSizeOptions(); track option) {\n <option [value]=\"option\" [selected]=\"option === internalPageSize()\">{{ option }}</option>\n }\n </select>\n </div>\n @if (internalLength() > 0) {\n <div class=\"eds-paginator__page-range-main\" role=\"status\">\n {{ range() }} of {{ rangeLength() }}\n </div>\n }\n </div>\n }\n }\n</div>\n\n<nav class=\"eds-paginator__navigation\" [attr.aria-label]=\"'Pagination navigation, ' + rangeLength() + ' total items'\">\n @if (isBasicMode()) {\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-left:core\"\n ariaLabel=\"Go to previous page\"\n [disabled]=\"isPrevDisabled()\"\n (buttonClick)=\"goPreviousPage()\">\n </button>\n </div>\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-right:core\"\n ariaLabel=\"Go to next page\"\n [disabled]=\"isNextDisabled()\"\n (buttonClick)=\"goNextPage()\">\n </button>\n </div>\n } @else {\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-double-left:core\"\n ariaLabel=\"Go to first page\"\n [disabled]=\"isPrevDisabled()\"\n (buttonClick)=\"goFirstPage()\">\n </button>\n </div>\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-left:core\"\n ariaLabel=\"Go to previous page\"\n [disabled]=\"isPrevDisabled()\"\n (buttonClick)=\"goPreviousPage()\">\n </button>\n </div>\n\n @if (hasPageNumberNavigation()) {\n <div class=\"eds-paginator__navigation-numbers\">\n @for (pageNumber of pageNumberNavigation(); track pageNumber) {\n <button edsButton size=\"s\" color=\"neutral\" variant=\"tertiary\" class=\"eds-paginator__page-number\" [class.eds-paginator__page-number--active]=\"pageNumber === internalPage()\" [attr.aria-current]=\"pageNumber === internalPage() ? 'page' : null\" [attr.aria-label]=\"'Page ' + (pageNumber + 1)\" (click)=\"goToPage(pageNumber)\">\n {{ pageNumber + 1 }}\n </button>\n }\n </div>\n }\n\n @if (internalLength() > 0) {\n <div class=\"eds-paginator__page-range\" role=\"status\">\n {{ range() }} of {{ rangeLength() }}\n </div>\n }\n\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-right:core\"\n ariaLabel=\"Go to next page\"\n [disabled]=\"isNextDisabled()\"\n (buttonClick)=\"goNextPage()\">\n </button>\n </div>\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-double-right:core\"\n ariaLabel=\"Go to last page\"\n [disabled]=\"isNextDisabled()\"\n (buttonClick)=\"goLastPage()\">\n </button>\n </div>\n }\n</nav>\n", styles: [".eui-21 :host{align-items:center;display:flex;flex-direction:row;justify-content:space-between;padding:var(--eds-sp-s) 0;position:relative;width:100%}.eui-21 :host .eds-paginator__page{display:flex;flex-direction:column;font:var(--eds-f-paragraph-m)}.eui-21 :host .eds-paginator__page-selector-wrapper{display:flex;flex-wrap:wrap;flex-direction:column;gap:var(--eds-sp-2xs)}.eui-21 :host .eds-paginator__page-selector-wrapper--compact{flex-direction:row;align-items:center;gap:var(--eds-sp-s)}.eui-21 :host .eds-paginator__page-selector{align-items:center;display:flex;flex-wrap:wrap;gap:var(--eds-sp-xs);font:var(--eds-f-paragraph-s)}.eui-21 :host .eds-paginator__page-selector-label{white-space:nowrap}.eui-21 :host .eds-paginator__page-range-main{align-items:center;font:var(--eds-f-paragraph-s);color:var(--eds-c-foreground-subtler)}.eui-21 :host .eds-paginator__page-size-select{min-width:4rem}.eui-21 :host .eds-paginator__navigation{align-items:center;display:flex;gap:var(--eds-sp-2xs)}.eui-21 :host .eds-paginator__navigation-item{align-items:center;display:inline-flex}.eui-21 :host .eds-paginator__navigation-numbers{align-items:center;display:inline-flex;gap:var(--eds-sp-2xs)}.eui-21 :host .eds-paginator__page-range{align-items:center;font:var(--eds-f-paragraph-s);color:var(--eds-c-foreground-subtler);display:none;padding:0 var(--eds-sp-xs);white-space:nowrap}.eui-21 :host .eds-paginator__page-number{min-width:var(--eds-si-2xl);padding:0 var(--eds-sp-2xs)}.eui-21 :host .eds-paginator__page-number--active{font-weight:700;color:var(--eds-c-foreground-primary);border:1px solid var(--eds-c-border-primary)}.eui-21 :host.eds-paginator--hidden{display:none}@media screen and (max-width:767px){.eui-21 :host{align-items:center;display:flex;justify-content:center;width:100%}.eui-21 :host .eds-paginator__page{display:none}.eui-21 :host .eds-paginator__page-range{display:inline-flex}.eui-21 :host .eds-paginator__navigation-numbers{display:none}}\n"] }]
|
|
283
283
|
}], ctorParameters: () => [], propDecorators: { e2eAttr: [{ type: i0.Input, args: [{ isSignal: true, alias: "e2eAttr", required: false }] }], length: [{ type: i0.Input, args: [{ isSignal: true, alias: "length", required: false }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }], page: [{ type: i0.Input, args: [{ isSignal: true, alias: "page", required: false }] }], pageSizeOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSizeOptions", required: false }] }], nbPageNumberNavigation: [{ type: i0.Input, args: [{ isSignal: true, alias: "nbPageNumberNavigation", required: false }] }], isHidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "isHidden", required: false }] }], isBasicMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "isBasicMode", required: false }] }], hasPageNumberNavigation: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasPageNumberNavigation", required: false }] }], hasPageNumberNavigationCompact: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasPageNumberNavigationCompact", required: false }] }], hasDynamicLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasDynamicLength", required: false }] }], hasPageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasPageSize", required: false }] }], pageChange: [{ type: i0.Output, args: ["pageChange"] }] } });
|
|
284
284
|
|
|
285
285
|
/** Convenience array for importing all eds-paginator components. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eui-eds-eds-paginator.mjs","sources":["../../eds-paginator/eds-paginator.ts","../../eds-paginator/eds-paginator.html","../../eds-paginator/index.ts","../../eds-paginator/eui-eds-eds-paginator.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n signal,\n booleanAttribute,\n numberAttribute,\n effect,\n} from '@angular/core';\nimport { DecimalPipe } from '@angular/common';\n\nimport { EDS_ICON_BUTTON } from '@eui/eds/eds-icon-button';\nimport { EDS_BUTTON } from '@eui/eds/eds-button';\nimport { EDS_SELECT } from '@eui/eds/eds-select';\n\nimport { EdsPaginationEvent } from './eds-pagination-event';\n\n/**\n * @description\n * The eds-paginator component provides pagination controls for splitting content across multiple pages.\n * It supports page size selection, first/previous/next/last navigation, optional page number buttons,\n * and a basic (minimal) mode.\n *\n * @usageNotes\n * ### Basic usage\n * ```html\n * <eds-paginator\n * [length]=\"totalItems\"\n * [pageSize]=\"10\"\n * (pageChange)=\"onPageChange($event)\">\n * </eds-paginator>\n * ```\n *\n * ### With page number navigation\n * ```html\n * <eds-paginator\n * [length]=\"100\"\n * [page]=\"2\"\n * [hasPageNumberNavigation]=\"true\"\n * [nbPageNumberNavigation]=\"5\"\n * (pageChange)=\"onPageChange($event)\">\n * </eds-paginator>\n * ```\n *\n * ### Basic mode (minimal UI)\n * ```html\n * <eds-paginator [length]=\"50\" [isBasicMode]=\"true\" (pageChange)=\"onPageChange($event)\"></eds-paginator>\n * ```\n *\n * ### Accessibility\n * - The navigation region has a descriptive `aria-label` announcing total items\n * - Navigation buttons have individual aria-labels (first, previous, next, last page)\n * - Current page in page number navigation uses `aria-current=\"page\"`\n * - Page range is announced via `role=\"status\"` for live updates\n * - Keyboard navigable with standard tab and enter interactions\n */\n@Component({\n selector: 'eds-paginator',\n templateUrl: './eds-paginator.html',\n styleUrl: './eds-paginator.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DecimalPipe,\n ...EDS_ICON_BUTTON,\n ...EDS_BUTTON,\n ...EDS_SELECT,\n ],\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-e2e]': 'e2eAttr()',\n },\n})\nexport class EdsPaginator {\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-paginator'\n */\n e2eAttr = input('eds-paginator');\n\n /**\n * Total number of items being paginated.\n * @default 0\n */\n length = input(0, { transform: numberAttribute });\n\n /**\n * Number of items displayed per page.\n * @default 10\n */\n pageSize = input(10, { transform: numberAttribute });\n\n /**\n * Current zero-based page index.\n * @default 0\n */\n page = input(0, { transform: numberAttribute });\n\n /**\n * Available page size options for the dropdown.\n * @default [5, 10, 25, 50, 100]\n */\n pageSizeOptions = input<number[]>([5, 10, 25, 50, 100]);\n\n /**\n * Maximum number of page number buttons displayed.\n * @default 5\n */\n nbPageNumberNavigation = input(5, { transform: numberAttribute });\n\n /**\n * Whether the paginator is hidden.\n * @default false\n */\n isHidden = input(false, { transform: booleanAttribute });\n\n /**\n * Whether the paginator shows only previous/next buttons (minimal UI).\n * @default false\n */\n isBasicMode = input(false, { transform: booleanAttribute });\n\n /**\n * Whether page number navigation buttons are displayed.\n * @default false\n */\n hasPageNumberNavigation = input(false, { transform: booleanAttribute });\n\n /**\n * Whether to show a compact page range next to page size selector.\n * @default false\n */\n hasPageNumberNavigationCompact = input(false, { transform: booleanAttribute });\n\n /**\n * Whether the total length can change dynamically (prevents resetting to page 0 on length change).\n * @default false\n */\n hasDynamicLength = input(false, { transform: booleanAttribute });\n\n /**\n * Whether the page size selector is displayed.\n * @default true\n */\n hasPageSize = input(true, { transform: booleanAttribute });\n\n /**\n * Emitted when the page, page size, or total pages change due to user interaction.\n */\n pageChange = output<EdsPaginationEvent>();\n\n // Internal writable state\n protected internalPage = signal(0);\n protected internalPageSize = signal(10);\n protected internalLength = signal(0);\n\n /** Total number of pages (computed). */\n protected nbPage = computed(() => {\n const len = this.internalLength();\n const size = this.internalPageSize();\n return size > 0 ? Math.ceil(len / size) : 0;\n });\n\n /** The effective number of page number buttons to show. */\n protected effectiveNbPageNumberNav = computed(() => {\n const total = this.nbPage();\n const requested = this.nbPageNumberNavigation();\n return total < requested ? total : requested;\n });\n\n /** The page numbers to display in the navigation. */\n protected pageNumberNavigation = computed(() => {\n const total = this.nbPage();\n const navCount = this.effectiveNbPageNumberNav();\n const currentPage = this.internalPage();\n\n if (navCount <= 0 || total <= 0) {\n return [];\n }\n\n const delta = Math.floor(navCount / 2);\n let start = currentPage - delta;\n\n if (total - currentPage <= navCount - (delta + 1)) {\n start = total - navCount;\n }\n\n if (start < 0) {\n start = 0;\n }\n\n const end = start + navCount;\n const pages: number[] = [];\n for (let i = start; i < end && i < total; i++) {\n pages.push(i);\n }\n return pages;\n });\n\n /** Display range string (e.g. \"1–10\"). */\n protected range = computed(() => {\n const len = this.internalLength();\n const pg = this.internalPage();\n const size = this.internalPageSize();\n\n if (len <= 0) {\n return '';\n }\n\n const from = pg * size + 1;\n const limit = pg * size + size;\n const to = limit <= len ? limit : len;\n return `${from}–${to}`;\n });\n\n /** Total items formatted for display. */\n protected rangeLength = computed(() => {\n const len = this.internalLength();\n return len > 0 ? len.toString() : '';\n });\n\n /** Whether the previous/first buttons should be disabled. */\n protected isPrevDisabled = computed(() => this.internalPage() === 0 || this.internalLength() === 0);\n\n /** Whether the next/last buttons should be disabled. */\n protected isNextDisabled = computed(() => this.internalPage() + 1 >= this.nbPage() || this.internalLength() === 0);\n\n hostClasses = computed(() => {\n return [\n 'eds-paginator',\n this.isHidden() ? 'eds-paginator--hidden' : '',\n ].join(' ').trim();\n });\n\n constructor() {\n // Sync inputs → internal signals\n effect(() => {\n this.internalPage.set(this.page());\n });\n\n effect(() => {\n this.internalPageSize.set(this.pageSize());\n });\n\n effect(() => {\n const len = this.length();\n const prevLen = this.internalLength();\n this.internalLength.set(len);\n\n // Reset to page 0 when length changes (unless dynamic length mode)\n if (len !== prevLen && !this.hasDynamicLength()) {\n this.internalPage.set(0);\n }\n });\n }\n\n /**\n * Navigate to the first page.\n */\n goFirstPage(): void {\n this.internalPage.set(0);\n this.emitPageChange();\n }\n\n /**\n * Navigate to the previous page.\n */\n goPreviousPage(): void {\n if (this.internalPage() <= 0) return;\n this.internalPage.update(p => p - 1);\n this.emitPageChange();\n }\n\n /**\n * Navigate to the next page.\n */\n goNextPage(): void {\n if (this.internalPage() + 1 >= this.nbPage()) return;\n this.internalPage.update(p => p + 1);\n this.emitPageChange();\n }\n\n /**\n * Navigate to the last page.\n */\n goLastPage(): void {\n const lastPage = Math.max(0, this.nbPage() - 1);\n this.internalPage.set(lastPage);\n this.emitPageChange();\n }\n\n /**\n * Navigate to a specific page.\n */\n goToPage(page: number): void {\n const clamped = Math.max(0, Math.min(page, this.nbPage() - 1));\n this.internalPage.set(clamped);\n this.emitPageChange();\n }\n\n /**\n * Handle page size change from the dropdown.\n */\n onPageSizeChange(size: string): void {\n this.internalPageSize.set(parseInt(size, 10));\n this.internalPage.set(0);\n this.emitPageChange();\n }\n\n private emitPageChange(): void {\n this.pageChange.emit({\n page: this.internalPage(),\n pageSize: this.internalPageSize(),\n nbPage: this.nbPage(),\n });\n }\n}\n","<div class=\"eds-paginator__page\">\n @if (!isBasicMode()) {\n @if (hasPageSize()) {\n <div class=\"eds-paginator__page-selector-wrapper\" [class.eds-paginator__page-selector-wrapper--compact]=\"hasPageNumberNavigationCompact()\">\n <div class=\"eds-paginator__page-selector\">\n <span class=\"eds-paginator__page-selector-label\">Items per page:</span>\n <select\n edsSelect\n class=\"eds-paginator__page-size-select\"\n [attr.aria-label]=\"'Items per page'\"\n (change)=\"onPageSizeChange($any($event.target).value)\">\n @for (option of pageSizeOptions(); track option) {\n <option [value]=\"option\" [selected]=\"option === internalPageSize()\">{{ option }}</option>\n }\n </select>\n </div>\n @if (internalLength() > 0) {\n <div class=\"eds-paginator__page-range-main\" role=\"status\">\n {{ range() }} of {{ rangeLength() }}\n </div>\n }\n </div>\n }\n }\n</div>\n\n<nav class=\"eds-paginator__navigation\" [attr.aria-label]=\"'Pagination navigation, ' + rangeLength() + ' total items'\">\n @if (isBasicMode()) {\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-left:core\"\n ariaLabel=\"Go to previous page\"\n [disabled]=\"isPrevDisabled()\"\n (buttonClick)=\"goPreviousPage()\">\n </button>\n </div>\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-right:core\"\n ariaLabel=\"Go to next page\"\n [disabled]=\"isNextDisabled()\"\n (buttonClick)=\"goNextPage()\">\n </button>\n </div>\n } @else {\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-double-left:core\"\n ariaLabel=\"Go to first page\"\n [disabled]=\"isPrevDisabled()\"\n (buttonClick)=\"goFirstPage()\">\n </button>\n </div>\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-left:core\"\n ariaLabel=\"Go to previous page\"\n [disabled]=\"isPrevDisabled()\"\n (buttonClick)=\"goPreviousPage()\">\n </button>\n </div>\n\n @if (hasPageNumberNavigation()) {\n <div class=\"eds-paginator__navigation-numbers\">\n @for (pageNumber of pageNumberNavigation(); track pageNumber) {\n <button\n edsButton\n edsSizeS\n edsNeutral\n edsButtonTertiary\n class=\"eds-paginator__page-number\"\n [class.eds-paginator__page-number--active]=\"pageNumber === internalPage()\"\n [attr.aria-current]=\"pageNumber === internalPage() ? 'page' : null\"\n [attr.aria-label]=\"'Page ' + (pageNumber + 1)\"\n (click)=\"goToPage(pageNumber)\">\n {{ pageNumber + 1 }}\n </button>\n }\n </div>\n }\n\n @if (internalLength() > 0) {\n <div class=\"eds-paginator__page-range\" role=\"status\">\n {{ range() }} of {{ rangeLength() }}\n </div>\n }\n\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-right:core\"\n ariaLabel=\"Go to next page\"\n [disabled]=\"isNextDisabled()\"\n (buttonClick)=\"goNextPage()\">\n </button>\n </div>\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-double-right:core\"\n ariaLabel=\"Go to last page\"\n [disabled]=\"isNextDisabled()\"\n (buttonClick)=\"goLastPage()\">\n </button>\n </div>\n }\n</nav>\n","import { EdsPaginator } from './eds-paginator';\n\nexport { EdsPaginator };\nexport * from './eds-pagination-event';\n\n/** Convenience array for importing all eds-paginator components. */\nexport const EDS_PAGINATOR = [\n EdsPaginator,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"eui-eds-eds-paginator.mjs","sources":["../../eds-paginator/eds-paginator.ts","../../eds-paginator/eds-paginator.html","../../eds-paginator/index.ts","../../eds-paginator/eui-eds-eds-paginator.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n signal,\n booleanAttribute,\n numberAttribute,\n effect,\n} from '@angular/core';\nimport { DecimalPipe } from '@angular/common';\n\nimport { EDS_ICON_BUTTON } from '@eui/eds/eds-icon-button';\nimport { EDS_BUTTON } from '@eui/eds/eds-button';\nimport { EDS_SELECT } from '@eui/eds/eds-select';\n\nimport { EdsPaginationEvent } from './eds-pagination-event';\n\n/**\n * @description\n * The eds-paginator component provides pagination controls for splitting content across multiple pages.\n * It supports page size selection, first/previous/next/last navigation, optional page number buttons,\n * and a basic (minimal) mode.\n *\n * @usageNotes\n * ### Basic usage\n * ```html\n * <eds-paginator\n * [length]=\"totalItems\"\n * [pageSize]=\"10\"\n * (pageChange)=\"onPageChange($event)\">\n * </eds-paginator>\n * ```\n *\n * ### With page number navigation\n * ```html\n * <eds-paginator\n * [length]=\"100\"\n * [page]=\"2\"\n * [hasPageNumberNavigation]=\"true\"\n * [nbPageNumberNavigation]=\"5\"\n * (pageChange)=\"onPageChange($event)\">\n * </eds-paginator>\n * ```\n *\n * ### Basic mode (minimal UI)\n * ```html\n * <eds-paginator [length]=\"50\" [isBasicMode]=\"true\" (pageChange)=\"onPageChange($event)\"></eds-paginator>\n * ```\n *\n * ### Accessibility\n * - The navigation region has a descriptive `aria-label` announcing total items\n * - Navigation buttons have individual aria-labels (first, previous, next, last page)\n * - Current page in page number navigation uses `aria-current=\"page\"`\n * - Page range is announced via `role=\"status\"` for live updates\n * - Keyboard navigable with standard tab and enter interactions\n */\n@Component({\n selector: 'eds-paginator',\n templateUrl: './eds-paginator.html',\n styleUrl: './eds-paginator.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n DecimalPipe,\n ...EDS_ICON_BUTTON,\n ...EDS_BUTTON,\n ...EDS_SELECT,\n ],\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-e2e]': 'e2eAttr()',\n },\n})\nexport class EdsPaginator {\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-paginator'\n */\n e2eAttr = input('eds-paginator');\n\n /**\n * Total number of items being paginated.\n * @default 0\n */\n length = input(0, { transform: numberAttribute });\n\n /**\n * Number of items displayed per page.\n * @default 10\n */\n pageSize = input(10, { transform: numberAttribute });\n\n /**\n * Current zero-based page index.\n * @default 0\n */\n page = input(0, { transform: numberAttribute });\n\n /**\n * Available page size options for the dropdown.\n * @default [5, 10, 25, 50, 100]\n */\n pageSizeOptions = input<number[]>([5, 10, 25, 50, 100]);\n\n /**\n * Maximum number of page number buttons displayed.\n * @default 5\n */\n nbPageNumberNavigation = input(5, { transform: numberAttribute });\n\n /**\n * Whether the paginator is hidden.\n * @default false\n */\n isHidden = input(false, { transform: booleanAttribute });\n\n /**\n * Whether the paginator shows only previous/next buttons (minimal UI).\n * @default false\n */\n isBasicMode = input(false, { transform: booleanAttribute });\n\n /**\n * Whether page number navigation buttons are displayed.\n * @default false\n */\n hasPageNumberNavigation = input(false, { transform: booleanAttribute });\n\n /**\n * Whether to show a compact page range next to page size selector.\n * @default false\n */\n hasPageNumberNavigationCompact = input(false, { transform: booleanAttribute });\n\n /**\n * Whether the total length can change dynamically (prevents resetting to page 0 on length change).\n * @default false\n */\n hasDynamicLength = input(false, { transform: booleanAttribute });\n\n /**\n * Whether the page size selector is displayed.\n * @default true\n */\n hasPageSize = input(true, { transform: booleanAttribute });\n\n /**\n * Emitted when the page, page size, or total pages change due to user interaction.\n */\n pageChange = output<EdsPaginationEvent>();\n\n // Internal writable state\n protected internalPage = signal(0);\n protected internalPageSize = signal(10);\n protected internalLength = signal(0);\n\n /** Total number of pages (computed). */\n protected nbPage = computed(() => {\n const len = this.internalLength();\n const size = this.internalPageSize();\n return size > 0 ? Math.ceil(len / size) : 0;\n });\n\n /** The effective number of page number buttons to show. */\n protected effectiveNbPageNumberNav = computed(() => {\n const total = this.nbPage();\n const requested = this.nbPageNumberNavigation();\n return total < requested ? total : requested;\n });\n\n /** The page numbers to display in the navigation. */\n protected pageNumberNavigation = computed(() => {\n const total = this.nbPage();\n const navCount = this.effectiveNbPageNumberNav();\n const currentPage = this.internalPage();\n\n if (navCount <= 0 || total <= 0) {\n return [];\n }\n\n const delta = Math.floor(navCount / 2);\n let start = currentPage - delta;\n\n if (total - currentPage <= navCount - (delta + 1)) {\n start = total - navCount;\n }\n\n if (start < 0) {\n start = 0;\n }\n\n const end = start + navCount;\n const pages: number[] = [];\n for (let i = start; i < end && i < total; i++) {\n pages.push(i);\n }\n return pages;\n });\n\n /** Display range string (e.g. \"1–10\"). */\n protected range = computed(() => {\n const len = this.internalLength();\n const pg = this.internalPage();\n const size = this.internalPageSize();\n\n if (len <= 0) {\n return '';\n }\n\n const from = pg * size + 1;\n const limit = pg * size + size;\n const to = limit <= len ? limit : len;\n return `${from}–${to}`;\n });\n\n /** Total items formatted for display. */\n protected rangeLength = computed(() => {\n const len = this.internalLength();\n return len > 0 ? len.toString() : '';\n });\n\n /** Whether the previous/first buttons should be disabled. */\n protected isPrevDisabled = computed(() => this.internalPage() === 0 || this.internalLength() === 0);\n\n /** Whether the next/last buttons should be disabled. */\n protected isNextDisabled = computed(() => this.internalPage() + 1 >= this.nbPage() || this.internalLength() === 0);\n\n hostClasses = computed(() => {\n return [\n 'eds-paginator',\n this.isHidden() ? 'eds-paginator--hidden' : '',\n ].join(' ').trim();\n });\n\n constructor() {\n // Sync inputs → internal signals\n effect(() => {\n this.internalPage.set(this.page());\n });\n\n effect(() => {\n this.internalPageSize.set(this.pageSize());\n });\n\n effect(() => {\n const len = this.length();\n const prevLen = this.internalLength();\n this.internalLength.set(len);\n\n // Reset to page 0 when length changes (unless dynamic length mode)\n if (len !== prevLen && !this.hasDynamicLength()) {\n this.internalPage.set(0);\n }\n });\n }\n\n /**\n * Navigate to the first page.\n */\n goFirstPage(): void {\n this.internalPage.set(0);\n this.emitPageChange();\n }\n\n /**\n * Navigate to the previous page.\n */\n goPreviousPage(): void {\n if (this.internalPage() <= 0) return;\n this.internalPage.update(p => p - 1);\n this.emitPageChange();\n }\n\n /**\n * Navigate to the next page.\n */\n goNextPage(): void {\n if (this.internalPage() + 1 >= this.nbPage()) return;\n this.internalPage.update(p => p + 1);\n this.emitPageChange();\n }\n\n /**\n * Navigate to the last page.\n */\n goLastPage(): void {\n const lastPage = Math.max(0, this.nbPage() - 1);\n this.internalPage.set(lastPage);\n this.emitPageChange();\n }\n\n /**\n * Navigate to a specific page.\n */\n goToPage(page: number): void {\n const clamped = Math.max(0, Math.min(page, this.nbPage() - 1));\n this.internalPage.set(clamped);\n this.emitPageChange();\n }\n\n /**\n * Handle page size change from the dropdown.\n */\n onPageSizeChange(size: string): void {\n this.internalPageSize.set(parseInt(size, 10));\n this.internalPage.set(0);\n this.emitPageChange();\n }\n\n private emitPageChange(): void {\n this.pageChange.emit({\n page: this.internalPage(),\n pageSize: this.internalPageSize(),\n nbPage: this.nbPage(),\n });\n }\n}\n","<div class=\"eds-paginator__page\">\n @if (!isBasicMode()) {\n @if (hasPageSize()) {\n <div class=\"eds-paginator__page-selector-wrapper\" [class.eds-paginator__page-selector-wrapper--compact]=\"hasPageNumberNavigationCompact()\">\n <div class=\"eds-paginator__page-selector\">\n <span class=\"eds-paginator__page-selector-label\">Items per page:</span>\n <select\n edsSelect\n class=\"eds-paginator__page-size-select\"\n [attr.aria-label]=\"'Items per page'\"\n (change)=\"onPageSizeChange($any($event.target).value)\">\n @for (option of pageSizeOptions(); track option) {\n <option [value]=\"option\" [selected]=\"option === internalPageSize()\">{{ option }}</option>\n }\n </select>\n </div>\n @if (internalLength() > 0) {\n <div class=\"eds-paginator__page-range-main\" role=\"status\">\n {{ range() }} of {{ rangeLength() }}\n </div>\n }\n </div>\n }\n }\n</div>\n\n<nav class=\"eds-paginator__navigation\" [attr.aria-label]=\"'Pagination navigation, ' + rangeLength() + ' total items'\">\n @if (isBasicMode()) {\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-left:core\"\n ariaLabel=\"Go to previous page\"\n [disabled]=\"isPrevDisabled()\"\n (buttonClick)=\"goPreviousPage()\">\n </button>\n </div>\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-right:core\"\n ariaLabel=\"Go to next page\"\n [disabled]=\"isNextDisabled()\"\n (buttonClick)=\"goNextPage()\">\n </button>\n </div>\n } @else {\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-double-left:core\"\n ariaLabel=\"Go to first page\"\n [disabled]=\"isPrevDisabled()\"\n (buttonClick)=\"goFirstPage()\">\n </button>\n </div>\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-left:core\"\n ariaLabel=\"Go to previous page\"\n [disabled]=\"isPrevDisabled()\"\n (buttonClick)=\"goPreviousPage()\">\n </button>\n </div>\n\n @if (hasPageNumberNavigation()) {\n <div class=\"eds-paginator__navigation-numbers\">\n @for (pageNumber of pageNumberNavigation(); track pageNumber) {\n <button edsButton size=\"s\" color=\"neutral\" variant=\"tertiary\" class=\"eds-paginator__page-number\" [class.eds-paginator__page-number--active]=\"pageNumber === internalPage()\" [attr.aria-current]=\"pageNumber === internalPage() ? 'page' : null\" [attr.aria-label]=\"'Page ' + (pageNumber + 1)\" (click)=\"goToPage(pageNumber)\">\n {{ pageNumber + 1 }}\n </button>\n }\n </div>\n }\n\n @if (internalLength() > 0) {\n <div class=\"eds-paginator__page-range\" role=\"status\">\n {{ range() }} of {{ rangeLength() }}\n </div>\n }\n\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-right:core\"\n ariaLabel=\"Go to next page\"\n [disabled]=\"isNextDisabled()\"\n (buttonClick)=\"goNextPage()\">\n </button>\n </div>\n <div class=\"eds-paginator__navigation-item\">\n <button\n edsIconButton\n size=\"s\"\n color=\"neutral\"\n icon=\"caret-double-right:core\"\n ariaLabel=\"Go to last page\"\n [disabled]=\"isNextDisabled()\"\n (buttonClick)=\"goLastPage()\">\n </button>\n </div>\n }\n</nav>\n","import { EdsPaginator } from './eds-paginator';\n\nexport { EdsPaginator };\nexport * from './eds-pagination-event';\n\n/** Convenience array for importing all eds-paginator components. */\nexport const EDS_PAGINATOR = [\n EdsPaginator,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCG;MAiBU,YAAY,CAAA;AAiKrB,IAAA,WAAA,GAAA;AAhKA;;;AAGG;QACH,IAAA,CAAA,OAAO,GAAG,KAAK,CAAC,eAAe;oFAAC;AAEhC;;;AAGG;QACH,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,CAAC,8EAAI,SAAS,EAAE,eAAe,EAAA,CAAG;AAEjD;;;AAGG;QACH,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,EAAE,gFAAI,SAAS,EAAE,eAAe,EAAA,CAAG;AAEpD;;;AAGG;QACH,IAAA,CAAA,IAAI,GAAG,KAAK,CAAC,CAAC,4EAAI,SAAS,EAAE,eAAe,EAAA,CAAG;AAE/C;;;AAGG;AACH,QAAA,IAAA,CAAA,eAAe,GAAG,KAAK,CAAW,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;4FAAC;AAEvD;;;AAGG;QACH,IAAA,CAAA,sBAAsB,GAAG,KAAK,CAAC,CAAC,8FAAI,SAAS,EAAE,eAAe,EAAA,CAAG;AAEjE;;;AAGG;QACH,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAExD;;;AAGG;QACH,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,KAAK,mFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE3D;;;AAGG;QACH,IAAA,CAAA,uBAAuB,GAAG,KAAK,CAAC,KAAK,+FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEvE;;;AAGG;QACH,IAAA,CAAA,8BAA8B,GAAG,KAAK,CAAC,KAAK,sGAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE9E;;;AAGG;QACH,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAC,KAAK,wFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAEhE;;;AAGG;QACH,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,IAAI,mFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AAE1D;;AAEG;QACH,IAAA,CAAA,UAAU,GAAG,MAAM,EAAsB;;QAG/B,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,CAAC;yFAAC;QACxB,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,EAAE;6FAAC;QAC7B,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,CAAC;2FAAC;;AAG1B,QAAA,IAAA,CAAA,MAAM,GAAG,QAAQ,CAAC,MAAK;AAC7B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE;AACjC,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACpC,YAAA,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QAC/C,CAAC;mFAAC;;AAGQ,QAAA,IAAA,CAAA,wBAAwB,GAAG,QAAQ,CAAC,MAAK;AAC/C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,EAAE;YAC/C,OAAO,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS;QAChD,CAAC;qGAAC;;AAGQ,QAAA,IAAA,CAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAK;AAC3C,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,EAAE;AAChD,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,EAAE;YAEvC,IAAI,QAAQ,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;AAC7B,gBAAA,OAAO,EAAE;YACb;YAEA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;AACtC,YAAA,IAAI,KAAK,GAAG,WAAW,GAAG,KAAK;AAE/B,YAAA,IAAI,KAAK,GAAG,WAAW,IAAI,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;AAC/C,gBAAA,KAAK,GAAG,KAAK,GAAG,QAAQ;YAC5B;AAEA,YAAA,IAAI,KAAK,GAAG,CAAC,EAAE;gBACX,KAAK,GAAG,CAAC;YACb;AAEA,YAAA,MAAM,GAAG,GAAG,KAAK,GAAG,QAAQ;YAC5B,MAAM,KAAK,GAAa,EAAE;AAC1B,YAAA,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;AAC3C,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACjB;AACA,YAAA,OAAO,KAAK;QAChB,CAAC;iGAAC;;AAGQ,QAAA,IAAA,CAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AAC5B,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE;AACjC,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE;AAC9B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAEpC,YAAA,IAAI,GAAG,IAAI,CAAC,EAAE;AACV,gBAAA,OAAO,EAAE;YACb;AAEA,YAAA,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC;AAC1B,YAAA,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;AAC9B,YAAA,MAAM,EAAE,GAAG,KAAK,IAAI,GAAG,GAAG,KAAK,GAAG,GAAG;AACrC,YAAA,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,EAAE,EAAE;QAC1B,CAAC;kFAAC;;AAGQ,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAClC,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE;AACjC,YAAA,OAAO,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxC,CAAC;wFAAC;;AAGQ,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC;2FAAC;;QAGzF,IAAA,CAAA,cAAc,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC;2FAAC;AAElH,QAAA,IAAA,CAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;YACxB,OAAO;gBACH,eAAe;gBACf,IAAI,CAAC,QAAQ,EAAE,GAAG,uBAAuB,GAAG,EAAE;AACjD,aAAA,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;QACtB,CAAC;wFAAC;;QAIE,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;AACtC,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC9C,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;AACzB,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;AACrC,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;;YAG5B,IAAI,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE;AAC7C,gBAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B;AACJ,QAAA,CAAC,CAAC;IACN;AAEA;;AAEG;IACH,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,cAAc,EAAE;IACzB;AAEA;;AAEG;IACH,cAAc,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;YAAE;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,cAAc,EAAE;IACzB;AAEA;;AAEG;IACH,UAAU,GAAA;QACN,IAAI,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;YAAE;AAC9C,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,cAAc,EAAE;IACzB;AAEA;;AAEG;IACH,UAAU,GAAA;AACN,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,cAAc,EAAE;IACzB;AAEA;;AAEG;AACH,IAAA,QAAQ,CAAC,IAAY,EAAA;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9D,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,cAAc,EAAE;IACzB;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,IAAY,EAAA;AACzB,QAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,cAAc,EAAE;IACzB;IAEQ,cAAc,GAAA;AAClB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACjB,YAAA,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE;AACzB,YAAA,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE;AACjC,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;AACxB,SAAA,CAAC;IACN;8GAlPS,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,65DC1EzB,snJAkHA,EAAA,MAAA,EAAA,CAAA,46DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,MAAA,EAAA,WAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FDxCa,YAAY,EAAA,UAAA,EAAA,CAAA;kBAhBxB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,eAAe,EAAA,eAAA,EAGR,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC;wBACL,WAAW;AACX,wBAAA,GAAG,eAAe;AAClB,wBAAA,GAAG,UAAU;AACb,wBAAA,GAAG,UAAU;qBAChB,EAAA,IAAA,EACK;AACF,wBAAA,SAAS,EAAE,eAAe;AAC1B,wBAAA,iBAAiB,EAAE,WAAW;AACjC,qBAAA,EAAA,QAAA,EAAA,snJAAA,EAAA,MAAA,EAAA,CAAA,46DAAA,CAAA,EAAA;;;AEnEL;AACO,MAAM,aAAa,GAAG;IACzB,YAAY;;;ACPhB;;AAEG;;;;"}
|
|
@@ -2,8 +2,8 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { numberAttribute, input, booleanAttribute, inject, computed, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
3
|
import * as i1 from '@eui/eds/shared';
|
|
4
4
|
import { EdsSizeDirective, EdsColorDirective } from '@eui/eds/shared';
|
|
5
|
-
import * as i2 from '@eui/eds/
|
|
6
|
-
import { EDS_ICON_STATE } from '@eui/eds/
|
|
5
|
+
import * as i2 from '@eui/eds/eds-icon-state';
|
|
6
|
+
import { EDS_ICON_STATE } from '@eui/eds/eds-icon-state';
|
|
7
7
|
|
|
8
8
|
/** Transform that clamps progress to 0–100 range. */
|
|
9
9
|
const progressTransform = (value) => Math.max(0, Math.min(numberAttribute(value, 0), 100));
|
|
@@ -68,7 +68,7 @@ class EdsProgressBar {
|
|
|
68
68
|
...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
69
69
|
}
|
|
70
70
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsProgressBar, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
71
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EdsProgressBar, isStandalone: true, selector: "eds-progress-bar", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, valueText: { classPropertyName: "valueText", publicName: "valueText", isSignal: true, isRequired: false, transformFunction: null }, progress: { classPropertyName: "progress", publicName: "progress", isSignal: true, isRequired: false, transformFunction: null }, isIndeterminate: { classPropertyName: "isIndeterminate", publicName: "isIndeterminate", isSignal: true, isRequired: false, transformFunction: null }, hasStatusIcon: { classPropertyName: "hasStatusIcon", publicName: "hasStatusIcon", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "progressbar" }, properties: { "class": "hostClasses()", "attr.data-e2e": "\"eds-progress-bar\"", "attr.aria-valuenow": "!isIndeterminate() ? progress() : null", "attr.aria-valuemin": "\"0\"", "attr.aria-valuemax": "\"100\"", "attr.aria-label": "label() || null", "attr.aria-valuetext": "valueText() || null" } }, hostDirectives: [{ directive: i1.EdsSizeDirective, inputs: ["edsSizeXS", "edsSizeXS", "edsSizeS", "edsSizeS", "edsSizeM", "edsSizeM", "edsSizeL", "edsSizeL", "edsSizeVariant", "edsSizeVariant"] }, { directive: i1.EdsColorDirective, inputs: ["edsSuccess", "edsSuccess", "edsInfo", "edsInfo", "edsWarning", "edsWarning", "edsCritical", "edsCritical", "edsColorVariant", "edsColorVariant"] }], ngImport: i0, template: "@if (label() || hasStatusIcon()) {\n <div class=\"eds-progress-bar__header\">\n @if (label()) {\n <span class=\"eds-progress-bar__header-label\">{{ label() }}</span>\n }\n @if (hasStatusIcon()) {\n <span class=\"eds-progress-bar__header-status\">\n <eds-icon-state [color]=\"$any(colorDirective.resolvedColor() || 'info')\" size=\"s\"/>\n </span>\n }\n </div>\n}\n<div class=\"eds-progress-bar__track\">\n <div class=\"eds-progress-bar__indicator\" [style.width]=\"!isIndeterminate() ? progress() + '%' : null\" [style.background-color]=\"color() || null\"></div>\n</div>\n", styles: [".eui-21 :host{display:flex;flex-direction:column;align-items:stretch;position:relative;width:100%}.eui-21 :host .eds-progress-bar__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--eds-sp-xs)}.eui-21 :host .eds-progress-bar__header-label{font:var(--eds-f-label-s-semibold);color:var(--eds-c-foreground)}.eui-21 :host .eds-progress-bar__header-status{display:flex;align-items:center}.eui-21 :host .eds-progress-bar__track{background-color:var(--eds-c-surface-elevation-sunken);border-radius:var(--eds-br-xs);height:var(--eds-sp-2xs);position:relative;overflow:hidden;width:100%}.eui-21 :host .eds-progress-bar__indicator{background-color:var(--eds-c-surface-primary);border-radius:var(--eds-br-xs);height:100%;transition:width .25s ease}.eui-21 :host.eds-progress-bar--size-xs .eds-progress-bar__track{height:var(--eds-sp-3xs)}.eui-21 :host.eds-progress-bar--size-s .eds-progress-bar__track{height:var(--eds-sp-2xs)}.eui-21 :host.eds-progress-bar--size-m .eds-progress-bar__track{height:var(--eds-sp-xs)}.eui-21 :host.eds-progress-bar--size-l .eds-progress-bar__track{height:var(--eds-sp-s)}.eui-21 :host.eds-progress-bar--success .eds-progress-bar__indicator{background-color:var(--eds-c-surface-success)}.eui-21 :host.eds-progress-bar--info .eds-progress-bar__indicator{background-color:var(--eds-c-surface-info)}.eui-21 :host.eds-progress-bar--warning .eds-progress-bar__indicator{background-color:var(--eds-c-surface-warning)}.eui-21 :host.eds-progress-bar--critical .eds-progress-bar__indicator{background-color:var(--eds-c-surface-critical)}.eui-21 :host.eds-progress-bar--indeterminate .eds-progress-bar__indicator{width:100%!important;background-color:transparent;background-image:linear-gradient(to right,transparent 0%,var(--eds-c-surface-primary) 30%,var(--eds-c-surface-primary) 60%,transparent 100%);background-size:40% 100%;background-repeat:no-repeat;animation:eds-progress-indeterminate 1.5s infinite ease-in-out}.eui-21 :host.eds-progress-bar--indeterminate.eds-progress-bar--success .eds-progress-bar__indicator{background-image:linear-gradient(to right,transparent 0%,var(--eds-c-surface-success) 30%,var(--eds-c-surface-success) 60%,transparent 100%)}.eui-21 :host.eds-progress-bar--indeterminate.eds-progress-bar--info .eds-progress-bar__indicator{background-image:linear-gradient(to right,transparent 0%,var(--eds-c-surface-info) 30%,var(--eds-c-surface-info) 60%,transparent 100%)}.eui-21 :host.eds-progress-bar--indeterminate.eds-progress-bar--warning .eds-progress-bar__indicator{background-image:linear-gradient(to right,transparent 0%,var(--eds-c-surface-warning) 30%,var(--eds-c-surface-warning) 60%,transparent 100%)}.eui-21 :host.eds-progress-bar--indeterminate.eds-progress-bar--critical .eds-progress-bar__indicator{background-image:linear-gradient(to right,transparent 0%,var(--eds-c-surface-critical) 30%,var(--eds-c-surface-critical) 60%,transparent 100%)}@keyframes eds-progress-indeterminate{0%{background-position:-40% 0}to{background-position:140% 0}}\n"], dependencies: [{ kind: "component", type: i2.EdsIconState, selector: "eds-icon-state", inputs: ["color", "size", "ariaLabel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
71
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EdsProgressBar, isStandalone: true, selector: "eds-progress-bar", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, valueText: { classPropertyName: "valueText", publicName: "valueText", isSignal: true, isRequired: false, transformFunction: null }, progress: { classPropertyName: "progress", publicName: "progress", isSignal: true, isRequired: false, transformFunction: null }, isIndeterminate: { classPropertyName: "isIndeterminate", publicName: "isIndeterminate", isSignal: true, isRequired: false, transformFunction: null }, hasStatusIcon: { classPropertyName: "hasStatusIcon", publicName: "hasStatusIcon", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "progressbar" }, properties: { "class": "hostClasses()", "attr.data-e2e": "\"eds-progress-bar\"", "attr.aria-valuenow": "!isIndeterminate() ? progress() : null", "attr.aria-valuemin": "\"0\"", "attr.aria-valuemax": "\"100\"", "attr.aria-label": "label() || null", "attr.aria-valuetext": "valueText() || null" } }, hostDirectives: [{ directive: i1.EdsSizeDirective, inputs: ["edsSizeXS", "edsSizeXS", "edsSizeS", "edsSizeS", "edsSizeM", "edsSizeM", "edsSizeL", "edsSizeL", "edsSizeVariant", "edsSizeVariant"] }, { directive: i1.EdsColorDirective, inputs: ["edsSuccess", "edsSuccess", "edsInfo", "edsInfo", "edsWarning", "edsWarning", "edsCritical", "edsCritical", "edsColorVariant", "edsColorVariant"] }], ngImport: i0, template: "@if (label() || hasStatusIcon()) {\n <div class=\"eds-progress-bar__header\">\n @if (label()) {\n <span class=\"eds-progress-bar__header-label\">{{ label() }}</span>\n }\n @if (hasStatusIcon()) {\n <span class=\"eds-progress-bar__header-status\">\n <eds-icon-state [color]=\"$any(colorDirective.resolvedColor() || 'info')\" size=\"s\"/>\n </span>\n }\n </div>\n}\n<div class=\"eds-progress-bar__track\">\n <div class=\"eds-progress-bar__indicator\" [style.width]=\"!isIndeterminate() ? progress() + '%' : null\" [style.background-color]=\"color() || null\"></div>\n</div>\n", styles: [".eui-21 :host{display:flex;flex-direction:column;align-items:stretch;position:relative;width:100%}.eui-21 :host .eds-progress-bar__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--eds-sp-xs)}.eui-21 :host .eds-progress-bar__header-label{font:var(--eds-f-label-s-semibold);color:var(--eds-c-foreground)}.eui-21 :host .eds-progress-bar__header-status{display:flex;align-items:center}.eui-21 :host .eds-progress-bar__track{background-color:var(--eds-c-surface-elevation-sunken);border-radius:var(--eds-br-xs);height:var(--eds-sp-2xs);position:relative;overflow:hidden;width:100%}.eui-21 :host .eds-progress-bar__indicator{background-color:var(--eds-c-surface-primary);border-radius:var(--eds-br-xs);height:100%;transition:width .25s ease}.eui-21 :host.eds-progress-bar--size-xs .eds-progress-bar__track{height:var(--eds-sp-3xs)}.eui-21 :host.eds-progress-bar--size-s .eds-progress-bar__track{height:var(--eds-sp-2xs)}.eui-21 :host.eds-progress-bar--size-m .eds-progress-bar__track{height:var(--eds-sp-xs)}.eui-21 :host.eds-progress-bar--size-l .eds-progress-bar__track{height:var(--eds-sp-s)}.eui-21 :host.eds-progress-bar--success .eds-progress-bar__indicator{background-color:var(--eds-c-surface-success)}.eui-21 :host.eds-progress-bar--info .eds-progress-bar__indicator{background-color:var(--eds-c-surface-info)}.eui-21 :host.eds-progress-bar--warning .eds-progress-bar__indicator{background-color:var(--eds-c-surface-warning)}.eui-21 :host.eds-progress-bar--critical .eds-progress-bar__indicator{background-color:var(--eds-c-surface-critical)}.eui-21 :host.eds-progress-bar--indeterminate .eds-progress-bar__indicator{width:100%!important;background-color:transparent;background-image:linear-gradient(to right,transparent 0%,var(--eds-c-surface-primary) 30%,var(--eds-c-surface-primary) 60%,transparent 100%);background-size:40% 100%;background-repeat:no-repeat;animation:eds-progress-indeterminate 1.5s infinite ease-in-out}.eui-21 :host.eds-progress-bar--indeterminate.eds-progress-bar--success .eds-progress-bar__indicator{background-image:linear-gradient(to right,transparent 0%,var(--eds-c-surface-success) 30%,var(--eds-c-surface-success) 60%,transparent 100%)}.eui-21 :host.eds-progress-bar--indeterminate.eds-progress-bar--info .eds-progress-bar__indicator{background-image:linear-gradient(to right,transparent 0%,var(--eds-c-surface-info) 30%,var(--eds-c-surface-info) 60%,transparent 100%)}.eui-21 :host.eds-progress-bar--indeterminate.eds-progress-bar--warning .eds-progress-bar__indicator{background-image:linear-gradient(to right,transparent 0%,var(--eds-c-surface-warning) 30%,var(--eds-c-surface-warning) 60%,transparent 100%)}.eui-21 :host.eds-progress-bar--indeterminate.eds-progress-bar--critical .eds-progress-bar__indicator{background-image:linear-gradient(to right,transparent 0%,var(--eds-c-surface-critical) 30%,var(--eds-c-surface-critical) 60%,transparent 100%)}@keyframes eds-progress-indeterminate{0%{background-position:-40% 0}to{background-position:140% 0}}\n"], dependencies: [{ kind: "component", type: i2.EdsIconState, selector: "eds-icon-state", inputs: ["color", "size", "ariaLabel", "e2eAttr"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
72
72
|
}
|
|
73
73
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsProgressBar, decorators: [{
|
|
74
74
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eui-eds-eds-progress-bar.mjs","sources":["../../eds-progress-bar/eds-progress-bar.ts","../../eds-progress-bar/eds-progress-bar.html","../../eds-progress-bar/index.ts","../../eds-progress-bar/eui-eds-eds-progress-bar.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n input,\n computed,\n inject,\n booleanAttribute,\n numberAttribute,\n} from '@angular/core';\nimport { EdsColorDirective, EdsSizeDirective } from '@eui/eds/shared';\nimport { EDS_ICON_STATE } from '@eui/eds/
|
|
1
|
+
{"version":3,"file":"eui-eds-eds-progress-bar.mjs","sources":["../../eds-progress-bar/eds-progress-bar.ts","../../eds-progress-bar/eds-progress-bar.html","../../eds-progress-bar/index.ts","../../eds-progress-bar/eui-eds-eds-progress-bar.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n input,\n computed,\n inject,\n booleanAttribute,\n numberAttribute,\n} from '@angular/core';\nimport { EdsColorDirective, EdsSizeDirective } from '@eui/eds/shared';\nimport { EDS_ICON_STATE } from '@eui/eds/eds-icon-state';\n\n/** Transform that clamps progress to 0–100 range. */\nconst progressTransform = (value: unknown): number => Math.max(0, Math.min(numberAttribute(value, 0), 100));\n\n/**\n * Horizontal progress indicator component that visualizes task completion or loading states.\n * Supports determinate progress with percentage values and indeterminate loading animations.\n * Provides optional labeling and status icons for contextual feedback.\n *\n * Supports color variants via EdsColorDirective (success, warning, critical, info)\n * and size variants via EdsSizeDirective (xs, s, m, l).\n */\n@Component({\n selector: 'eds-progress-bar',\n templateUrl: './eds-progress-bar.html',\n styleUrl: './eds-progress-bar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [...EDS_ICON_STATE],\n hostDirectives: [\n {\n directive: EdsSizeDirective,\n inputs: ['edsSizeXS', 'edsSizeS', 'edsSizeM', 'edsSizeL', 'edsSizeVariant'],\n },\n {\n directive: EdsColorDirective,\n inputs: ['edsSuccess', 'edsInfo', 'edsWarning', 'edsCritical', 'edsColorVariant'],\n },\n ],\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-e2e]': '\"eds-progress-bar\"',\n role: 'progressbar',\n '[attr.aria-valuenow]': '!isIndeterminate() ? progress() : null',\n '[attr.aria-valuemin]': '\"0\"',\n '[attr.aria-valuemax]': '\"100\"',\n '[attr.aria-label]': 'label() || null',\n '[attr.aria-valuetext]': 'valueText() || null',\n },\n})\nexport class EdsProgressBar {\n /** Optional label displayed above the progress bar. */\n label = input('');\n\n /**\n * Human-readable text alternative for the current value.\n * Use when the numeric percentage alone isn't meaningful\n * (e.g. \"Step 3 of 5\", \"Uploading file 2 of 10\").\n * Maps to aria-valuetext.\n */\n valueText = input('');\n\n /**\n * Current progress value (0–100).\n * Values outside the range are clamped automatically.\n * @default 0\n */\n progress = input(0, { transform: progressTransform });\n\n /**\n * When true, shows an indeterminate progress animation\n * instead of a specific progress value.\n * @default false\n */\n isIndeterminate = input(false, { transform: booleanAttribute });\n\n /**\n * When true, displays a status icon based on the current color variant\n * (success, warning, critical, info).\n * @default false\n */\n hasStatusIcon = input(false, { transform: booleanAttribute });\n\n /**\n * Custom CSS color value for the progress indicator fill.\n * When set, overrides the color variant class (e.g. `'#4285f4'`, `'var(--eds-c-foreground-info)'`).\n */\n color = input<string>('');\n\n protected sizeDirective = inject(EdsSizeDirective);\n protected colorDirective = inject(EdsColorDirective);\n\n hostClasses = computed(() => {\n const sizeClass = this.sizeDirective.getCssClass('eds-progress-bar');\n const colorClass = this.colorDirective.getCssClass('eds-progress-bar');\n\n return [\n 'eds-progress-bar',\n sizeClass || 'eds-progress-bar--size-s',\n colorClass,\n this.isIndeterminate() ? 'eds-progress-bar--indeterminate' : '',\n this.hasStatusIcon() ? 'eds-progress-bar--has-status-icon' : '',\n ].join(' ').trim();\n });\n}\n","@if (label() || hasStatusIcon()) {\n <div class=\"eds-progress-bar__header\">\n @if (label()) {\n <span class=\"eds-progress-bar__header-label\">{{ label() }}</span>\n }\n @if (hasStatusIcon()) {\n <span class=\"eds-progress-bar__header-status\">\n <eds-icon-state [color]=\"$any(colorDirective.resolvedColor() || 'info')\" size=\"s\"/>\n </span>\n }\n </div>\n}\n<div class=\"eds-progress-bar__track\">\n <div class=\"eds-progress-bar__indicator\" [style.width]=\"!isIndeterminate() ? progress() + '%' : null\" [style.background-color]=\"color() || null\"></div>\n</div>\n","import { EdsProgressBar } from './eds-progress-bar';\n\nexport { EdsProgressBar };\n\n/** Convenience array for importing all eds-progress-bar components. */\nexport const EDS_PROGRESS_BAR = [\n EdsProgressBar,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -33,6 +33,19 @@ class EdsRating {
|
|
|
33
33
|
* @default false
|
|
34
34
|
*/
|
|
35
35
|
this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
36
|
+
/**
|
|
37
|
+
* Whether the rating is read-only. The value is displayed but cannot be changed
|
|
38
|
+
* through user interaction. Unlike `disabled`, the control retains its normal
|
|
39
|
+
* (non-dimmed) appearance.
|
|
40
|
+
* @default false
|
|
41
|
+
*/
|
|
42
|
+
this.readonly = input(false, { ...(ngDevMode ? { debugName: "readonly" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
43
|
+
/**
|
|
44
|
+
* Whether the rating is in an invalid state. Reflected as the `invalid` host
|
|
45
|
+
* attribute and `aria-invalid` for assistive technologies.
|
|
46
|
+
* @default false
|
|
47
|
+
*/
|
|
48
|
+
this.invalid = input(false, { ...(ngDevMode ? { debugName: "invalid" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
36
49
|
/**
|
|
37
50
|
* Emitted when the rating changes.
|
|
38
51
|
* Payload: the new rating value (number).
|
|
@@ -43,6 +56,12 @@ class EdsRating {
|
|
|
43
56
|
...(ngDevMode ? [{ debugName: "internalRating" }] : /* istanbul ignore next */ []));
|
|
44
57
|
this.internalDisabled = signal(false, /* @ts-ignore */
|
|
45
58
|
...(ngDevMode ? [{ debugName: "internalDisabled" }] : /* istanbul ignore next */ []));
|
|
59
|
+
/**
|
|
60
|
+
* Combined non-interactive state — true when the control is disabled or read-only.
|
|
61
|
+
* Blocks all rating mutations (click + keyboard).
|
|
62
|
+
*/
|
|
63
|
+
this.isNonInteractive = computed(() => this.internalDisabled() || this.readonly(), /* @ts-ignore */
|
|
64
|
+
...(ngDevMode ? [{ debugName: "isNonInteractive" }] : /* istanbul ignore next */ []));
|
|
46
65
|
this.stars = computed(() => {
|
|
47
66
|
const count = this.numberOfStars();
|
|
48
67
|
const currentRating = this.internalRating();
|
|
@@ -52,15 +71,6 @@ class EdsRating {
|
|
|
52
71
|
}));
|
|
53
72
|
}, /* @ts-ignore */
|
|
54
73
|
...(ngDevMode ? [{ debugName: "stars" }] : /* istanbul ignore next */ []));
|
|
55
|
-
this.hostClasses = computed(() => {
|
|
56
|
-
return [
|
|
57
|
-
'eds-rating',
|
|
58
|
-
this.internalDisabled() ? 'eds-rating--disabled' : '',
|
|
59
|
-
]
|
|
60
|
-
.join(' ')
|
|
61
|
-
.trim();
|
|
62
|
-
}, /* @ts-ignore */
|
|
63
|
-
...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
64
74
|
this._onChange = () => { };
|
|
65
75
|
this._onTouched = () => { };
|
|
66
76
|
effect(() => {
|
|
@@ -107,7 +117,7 @@ class EdsRating {
|
|
|
107
117
|
* Handles clicking a star — toggles off if same star clicked again.
|
|
108
118
|
*/
|
|
109
119
|
onStarClick(starIndex) {
|
|
110
|
-
if (this.
|
|
120
|
+
if (this.isNonInteractive())
|
|
111
121
|
return;
|
|
112
122
|
const newRating = this.internalRating() === starIndex ? 0 : starIndex;
|
|
113
123
|
this.updateRating(newRating);
|
|
@@ -117,7 +127,7 @@ class EdsRating {
|
|
|
117
127
|
* Implements WAI-ARIA APG Radio Group pattern with wrapping arrows and Space key.
|
|
118
128
|
*/
|
|
119
129
|
onKeydown(event, starIndex) {
|
|
120
|
-
if (this.
|
|
130
|
+
if (this.isNonInteractive())
|
|
121
131
|
return;
|
|
122
132
|
const total = this.numberOfStars();
|
|
123
133
|
switch (event.key) {
|
|
@@ -173,20 +183,24 @@ class EdsRating {
|
|
|
173
183
|
}
|
|
174
184
|
}
|
|
175
185
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsRating, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
176
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EdsRating, isStandalone: true, selector: "eds-rating", inputs: { e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, numberOfStars: { classPropertyName: "numberOfStars", publicName: "numberOfStars", isSignal: true, isRequired: false, transformFunction: null }, rating: { classPropertyName: "rating", publicName: "rating", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ratingChange: "ratingChange" }, host: { attributes: { "role": "radiogroup" }, properties: { "
|
|
186
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.2", type: EdsRating, isStandalone: true, selector: "eds-rating", inputs: { e2eAttr: { classPropertyName: "e2eAttr", publicName: "e2eAttr", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, numberOfStars: { classPropertyName: "numberOfStars", publicName: "numberOfStars", isSignal: true, isRequired: false, transformFunction: null }, rating: { classPropertyName: "rating", publicName: "rating", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, invalid: { classPropertyName: "invalid", publicName: "invalid", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { ratingChange: "ratingChange" }, host: { attributes: { "role": "radiogroup" }, properties: { "attr.disabled": "internalDisabled() || null", "attr.readonly": "readonly() || null", "attr.invalid": "invalid() || null", "attr.aria-invalid": "invalid() || null", "attr.data-e2e": "e2eAttr()", "attr.aria-label": "ariaLabel()" }, classAttribute: "eds-rating" }, providers: [
|
|
177
187
|
{
|
|
178
188
|
provide: NG_VALUE_ACCESSOR,
|
|
179
189
|
useExisting: forwardRef(() => EdsRating),
|
|
180
190
|
multi: true,
|
|
181
191
|
},
|
|
182
|
-
], viewQueries: [{ propertyName: "starButtons", predicate: ["starButton"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "@for (star of stars(); track star.index) {\n <button\n #starButton\n type=\"button\"\n class=\"eds-rating__star\"\n [class.eds-rating__star--filled]=\"star.filled\"\n [disabled]=\"
|
|
192
|
+
], viewQueries: [{ propertyName: "starButtons", predicate: ["starButton"], descendants: true, read: ElementRef, isSignal: true }], ngImport: i0, template: "@for (star of stars(); track star.index) {\n <button\n #starButton\n type=\"button\"\n class=\"eds-rating__star\"\n [class.eds-rating__star--filled]=\"star.filled\"\n [disabled]=\"isNonInteractive()\"\n [attr.tabindex]=\"getTabIndex(star.index)\"\n [attr.role]=\"'radio'\"\n [attr.aria-checked]=\"star.index === internalRating()\"\n [attr.aria-label]=\"'Star ' + star.index + ' of ' + numberOfStars()\"\n (click)=\"onStarClick(star.index)\"\n (keydown)=\"onKeydown($event, star.index)\"\n (blur)=\"onBlur()\">\n @if (star.filled) {\n <eds-icon icon=\"star-fill:core\" size=\"s\"/>\n } @else {\n <eds-icon icon=\"star:core\" size=\"s\"/>\n }\n </button>\n}\n", styles: [":host{display:inline-flex;align-items:center}:host .eds-rating__star{display:inline-flex;align-items:center;justify-content:center;padding:var(--eds-sp-3xs);border:none;background:transparent;cursor:pointer;border-radius:var(--eds-br-s);color:var(--eds-c-foreground-subtler);transition:color .15s ease-in-out,transform .15s ease-in-out}:host .eds-rating__star:focus-visible:focus-visible:not([readonly]){outline:var(--eds-bw-s) solid var(--eds-c-border-primary)!important;outline-offset:1px!important;border-radius:var(--eds-br-full)!important}:host .eds-rating__star:hover:not(:disabled){transform:scale(1.15)}:host .eds-rating__star--filled{--_eds-rating-on-surface: var(--eds-c-foreground-primary);color:var(--eds-c-foreground-primary)}:host .eds-rating__star:disabled{cursor:not-allowed}:host([disabled]){opacity:.4}:host([readonly]) .eds-rating__star{cursor:default}:host([readonly]) .eds-rating__star:hover:not(:disabled){transform:none}:host([invalid]) .eds-rating__star{color:var(--eds-c-foreground-critical)}:host([invalid]) .eds-rating__star--filled{--_eds-rating-on-surface: var(--eds-c-foreground-critical);color:var(--eds-c-foreground-critical)}\n"], dependencies: [{ kind: "component", type: i1.EdsIcon, selector: "eds-icon, span[edsIcon]", inputs: ["icon", "set", "color", "size", "ariaLabel", "ariaHidden", "rounded", "isLoading"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
183
193
|
}
|
|
184
194
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImport: i0, type: EdsRating, decorators: [{
|
|
185
195
|
type: Component,
|
|
186
196
|
args: [{ selector: 'eds-rating', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
187
197
|
...EDS_ICON,
|
|
188
198
|
], host: {
|
|
189
|
-
|
|
199
|
+
class: 'eds-rating',
|
|
200
|
+
'[attr.disabled]': 'internalDisabled() || null',
|
|
201
|
+
'[attr.readonly]': 'readonly() || null',
|
|
202
|
+
'[attr.invalid]': 'invalid() || null',
|
|
203
|
+
'[attr.aria-invalid]': 'invalid() || null',
|
|
190
204
|
'[attr.data-e2e]': 'e2eAttr()',
|
|
191
205
|
role: 'radiogroup',
|
|
192
206
|
'[attr.aria-label]': 'ariaLabel()',
|
|
@@ -196,8 +210,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.2", ngImpor
|
|
|
196
210
|
useExisting: forwardRef(() => EdsRating),
|
|
197
211
|
multi: true,
|
|
198
212
|
},
|
|
199
|
-
], template: "@for (star of stars(); track star.index) {\n <button\n #starButton\n type=\"button\"\n class=\"eds-rating__star\"\n [class.eds-rating__star--filled]=\"star.filled\"\n [disabled]=\"
|
|
200
|
-
}], ctorParameters: () => [], propDecorators: { e2eAttr: [{ type: i0.Input, args: [{ isSignal: true, alias: "e2eAttr", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], numberOfStars: [{ type: i0.Input, args: [{ isSignal: true, alias: "numberOfStars", required: false }] }], rating: [{ type: i0.Input, args: [{ isSignal: true, alias: "rating", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], ratingChange: [{ type: i0.Output, args: ["ratingChange"] }], starButtons: [{ type: i0.ViewChildren, args: ['starButton', { ...{ read: ElementRef }, isSignal: true }] }] } });
|
|
213
|
+
], template: "@for (star of stars(); track star.index) {\n <button\n #starButton\n type=\"button\"\n class=\"eds-rating__star\"\n [class.eds-rating__star--filled]=\"star.filled\"\n [disabled]=\"isNonInteractive()\"\n [attr.tabindex]=\"getTabIndex(star.index)\"\n [attr.role]=\"'radio'\"\n [attr.aria-checked]=\"star.index === internalRating()\"\n [attr.aria-label]=\"'Star ' + star.index + ' of ' + numberOfStars()\"\n (click)=\"onStarClick(star.index)\"\n (keydown)=\"onKeydown($event, star.index)\"\n (blur)=\"onBlur()\">\n @if (star.filled) {\n <eds-icon icon=\"star-fill:core\" size=\"s\"/>\n } @else {\n <eds-icon icon=\"star:core\" size=\"s\"/>\n }\n </button>\n}\n", styles: [":host{display:inline-flex;align-items:center}:host .eds-rating__star{display:inline-flex;align-items:center;justify-content:center;padding:var(--eds-sp-3xs);border:none;background:transparent;cursor:pointer;border-radius:var(--eds-br-s);color:var(--eds-c-foreground-subtler);transition:color .15s ease-in-out,transform .15s ease-in-out}:host .eds-rating__star:focus-visible:focus-visible:not([readonly]){outline:var(--eds-bw-s) solid var(--eds-c-border-primary)!important;outline-offset:1px!important;border-radius:var(--eds-br-full)!important}:host .eds-rating__star:hover:not(:disabled){transform:scale(1.15)}:host .eds-rating__star--filled{--_eds-rating-on-surface: var(--eds-c-foreground-primary);color:var(--eds-c-foreground-primary)}:host .eds-rating__star:disabled{cursor:not-allowed}:host([disabled]){opacity:.4}:host([readonly]) .eds-rating__star{cursor:default}:host([readonly]) .eds-rating__star:hover:not(:disabled){transform:none}:host([invalid]) .eds-rating__star{color:var(--eds-c-foreground-critical)}:host([invalid]) .eds-rating__star--filled{--_eds-rating-on-surface: var(--eds-c-foreground-critical);color:var(--eds-c-foreground-critical)}\n"] }]
|
|
214
|
+
}], ctorParameters: () => [], propDecorators: { e2eAttr: [{ type: i0.Input, args: [{ isSignal: true, alias: "e2eAttr", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], numberOfStars: [{ type: i0.Input, args: [{ isSignal: true, alias: "numberOfStars", required: false }] }], rating: [{ type: i0.Input, args: [{ isSignal: true, alias: "rating", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], ratingChange: [{ type: i0.Output, args: ["ratingChange"] }], starButtons: [{ type: i0.ViewChildren, args: ['starButton', { ...{ read: ElementRef }, isSignal: true }] }] } });
|
|
201
215
|
|
|
202
216
|
/** Convenience array for importing all eds-rating components. */
|
|
203
217
|
const EDS_RATING = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eui-eds-eds-rating.mjs","sources":["../../eds-rating/eds-rating.ts","../../eds-rating/eds-rating.html","../../eds-rating/index.ts","../../eds-rating/eui-eds-eds-rating.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n booleanAttribute,\n numberAttribute,\n forwardRef,\n signal,\n effect,\n afterNextRender,\n viewChildren,\n ElementRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { EDS_ICON } from '@eui/eds/eds-icon';\n\n@Component({\n templateUrl: './eds-rating.html',\n selector: 'eds-rating',\n styleUrl: './eds-rating.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ...EDS_ICON,\n ],\n host: {\n '[class]': 'hostClasses()',\n '[attr.data-e2e]': 'e2eAttr()',\n role: 'radiogroup',\n '[attr.aria-label]': 'ariaLabel()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EdsRating),\n multi: true,\n },\n ],\n})\nexport class EdsRating implements ControlValueAccessor {\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-rating'\n */\n e2eAttr = input('eds-rating');\n\n /**\n * Accessible label for the rating group.\n * @default 'Rating'\n */\n ariaLabel = input('Rating');\n\n /**\n * Number of stars to display.\n * @default 5\n */\n numberOfStars = input(5, { transform: numberAttribute });\n\n /**\n * Current rating value.\n * @default 0\n */\n rating = input(0, { transform: numberAttribute });\n\n /**\n * Whether the rating is disabled.\n * @default false\n */\n disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Emitted when the rating changes.\n * Payload: the new rating value (number).\n */\n ratingChange = output<number>();\n\n protected readonly starButtons = viewChildren('starButton', { read: ElementRef });\n\n protected internalRating = signal(0);\n protected internalDisabled = signal(false);\n\n protected stars = computed(() => {\n const count = this.numberOfStars();\n const currentRating = this.internalRating();\n return Array.from({ length: count }, (_, i) => ({\n index: i + 1,\n filled: i + 1 <= currentRating,\n }));\n });\n\n hostClasses = computed(() => {\n return [\n 'eds-rating',\n this.internalDisabled() ? 'eds-rating--disabled' : '',\n ]\n .join(' ')\n .trim();\n });\n\n constructor() {\n effect(() => {\n const inputRating = this.rating();\n // Only sync input → internal when the input is explicitly set (non-zero).\n // writeValue from reactive forms also writes to internalRating directly.\n if (inputRating !== 0) {\n this.internalRating.set(inputRating);\n }\n });\n\n effect(() => {\n this.internalDisabled.set(this.disabled());\n });\n\n afterNextRender(() => {\n this.starButtons().forEach((buttonRef) => {\n buttonRef.nativeElement?.addEventListener('blur', () => this._onTouched());\n });\n });\n }\n\n // ControlValueAccessor\n writeValue(value: number): void {\n this.internalRating.set(value ?? 0);\n }\n\n registerOnChange(fn: (value: number) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.internalDisabled.set(isDisabled);\n }\n\n /**\n * Returns the tabindex for a star button (roving tabindex pattern).\n */\n protected getTabIndex(starIndex: number): number {\n const current = this.internalRating();\n if (current === 0) {\n return starIndex === 1 ? 0 : -1;\n }\n return starIndex === current ? 0 : -1;\n }\n\n /**\n * Handles clicking a star — toggles off if same star clicked again.\n */\n protected onStarClick(starIndex: number): void {\n if (this.internalDisabled()) return;\n const newRating = this.internalRating() === starIndex ? 0 : starIndex;\n this.updateRating(newRating);\n }\n\n /**\n * Handles keyboard navigation within the rating group.\n * Implements WAI-ARIA APG Radio Group pattern with wrapping arrows and Space key.\n */\n protected onKeydown(event: KeyboardEvent, starIndex: number): void {\n if (this.internalDisabled()) return;\n\n const total = this.numberOfStars();\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp': {\n event.preventDefault();\n const nextIndex = starIndex === total ? 1 : starIndex + 1;\n this.updateRating(nextIndex);\n this.focusStar(nextIndex - 1);\n break;\n }\n case 'ArrowLeft':\n case 'ArrowDown': {\n event.preventDefault();\n const prevIndex = starIndex === 1 ? total : starIndex - 1;\n this.updateRating(prevIndex);\n this.focusStar(prevIndex - 1);\n break;\n }\n case ' ': {\n event.preventDefault();\n if (this.internalRating() !== starIndex) {\n this.updateRating(starIndex);\n }\n break;\n }\n case 'Home': {\n event.preventDefault();\n this.updateRating(1);\n this.focusStar(0);\n break;\n }\n case 'End': {\n event.preventDefault();\n this.updateRating(total);\n this.focusStar(total - 1);\n break;\n }\n }\n }\n\n protected onBlur(): void {\n this._onTouched();\n }\n\n private updateRating(value: number): void {\n this.internalRating.set(value);\n this.ratingChange.emit(value);\n this._onChange(value);\n }\n\n private focusStar(arrayIndex: number): void {\n const buttons = this.starButtons();\n if (buttons[arrayIndex]) {\n buttons[arrayIndex].nativeElement.focus();\n }\n }\n\n private _onChange: (value: number) => void = () => {/* noop */};\n private _onTouched: () => void = () => {/* noop */};\n}\n","@for (star of stars(); track star.index) {\n <button\n #starButton\n type=\"button\"\n class=\"eds-rating__star\"\n [class.eds-rating__star--filled]=\"star.filled\"\n [disabled]=\"internalDisabled()\"\n [attr.tabindex]=\"getTabIndex(star.index)\"\n [attr.role]=\"'radio'\"\n [attr.aria-checked]=\"star.index === internalRating()\"\n [attr.aria-label]=\"'Star ' + star.index + ' of ' + numberOfStars()\"\n (click)=\"onStarClick(star.index)\"\n (keydown)=\"onKeydown($event, star.index)\"\n (blur)=\"onBlur()\">\n @if (star.filled) {\n <eds-icon icon=\"star-fill:core\" size=\"s\"/>\n } @else {\n <eds-icon icon=\"star:core\" size=\"s\"/>\n }\n </button>\n}\n","import { EdsRating } from './eds-rating';\n\nexport { EdsRating };\n\n/** Convenience array for importing all eds-rating components. */\nexport const EDS_RATING = [\n EdsRating,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"eui-eds-eds-rating.mjs","sources":["../../eds-rating/eds-rating.ts","../../eds-rating/eds-rating.html","../../eds-rating/index.ts","../../eds-rating/eui-eds-eds-rating.ts"],"sourcesContent":["import {\n Component,\n ChangeDetectionStrategy,\n input,\n output,\n computed,\n booleanAttribute,\n numberAttribute,\n forwardRef,\n signal,\n effect,\n afterNextRender,\n viewChildren,\n ElementRef,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { EDS_ICON } from '@eui/eds/eds-icon';\n\n@Component({\n templateUrl: './eds-rating.html',\n selector: 'eds-rating',\n styleUrl: './eds-rating.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n ...EDS_ICON,\n ],\n host: {\n class: 'eds-rating',\n '[attr.disabled]': 'internalDisabled() || null',\n '[attr.readonly]': 'readonly() || null',\n '[attr.invalid]': 'invalid() || null',\n '[attr.aria-invalid]': 'invalid() || null',\n '[attr.data-e2e]': 'e2eAttr()',\n role: 'radiogroup',\n '[attr.aria-label]': 'ariaLabel()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => EdsRating),\n multi: true,\n },\n ],\n})\nexport class EdsRating implements ControlValueAccessor {\n /**\n * Data attribute value for end-to-end testing identification.\n * @default 'eds-rating'\n */\n e2eAttr = input('eds-rating');\n\n /**\n * Accessible label for the rating group.\n * @default 'Rating'\n */\n ariaLabel = input('Rating');\n\n /**\n * Number of stars to display.\n * @default 5\n */\n numberOfStars = input(5, { transform: numberAttribute });\n\n /**\n * Current rating value.\n * @default 0\n */\n rating = input(0, { transform: numberAttribute });\n\n /**\n * Whether the rating is disabled.\n * @default false\n */\n disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Whether the rating is read-only. The value is displayed but cannot be changed\n * through user interaction. Unlike `disabled`, the control retains its normal\n * (non-dimmed) appearance.\n * @default false\n */\n readonly = input(false, { transform: booleanAttribute });\n\n /**\n * Whether the rating is in an invalid state. Reflected as the `invalid` host\n * attribute and `aria-invalid` for assistive technologies.\n * @default false\n */\n invalid = input(false, { transform: booleanAttribute });\n\n /**\n * Emitted when the rating changes.\n * Payload: the new rating value (number).\n */\n ratingChange = output<number>();\n\n protected readonly starButtons = viewChildren('starButton', { read: ElementRef });\n\n protected internalRating = signal(0);\n protected internalDisabled = signal(false);\n\n /**\n * Combined non-interactive state — true when the control is disabled or read-only.\n * Blocks all rating mutations (click + keyboard).\n */\n protected readonly isNonInteractive = computed(() => this.internalDisabled() || this.readonly());\n\n protected stars = computed(() => {\n const count = this.numberOfStars();\n const currentRating = this.internalRating();\n return Array.from({ length: count }, (_, i) => ({\n index: i + 1,\n filled: i + 1 <= currentRating,\n }));\n });\n\n constructor() {\n effect(() => {\n const inputRating = this.rating();\n // Only sync input → internal when the input is explicitly set (non-zero).\n // writeValue from reactive forms also writes to internalRating directly.\n if (inputRating !== 0) {\n this.internalRating.set(inputRating);\n }\n });\n\n effect(() => {\n this.internalDisabled.set(this.disabled());\n });\n\n afterNextRender(() => {\n this.starButtons().forEach((buttonRef) => {\n buttonRef.nativeElement?.addEventListener('blur', () => this._onTouched());\n });\n });\n }\n\n // ControlValueAccessor\n writeValue(value: number): void {\n this.internalRating.set(value ?? 0);\n }\n\n registerOnChange(fn: (value: number) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.internalDisabled.set(isDisabled);\n }\n\n /**\n * Returns the tabindex for a star button (roving tabindex pattern).\n */\n protected getTabIndex(starIndex: number): number {\n const current = this.internalRating();\n if (current === 0) {\n return starIndex === 1 ? 0 : -1;\n }\n return starIndex === current ? 0 : -1;\n }\n\n /**\n * Handles clicking a star — toggles off if same star clicked again.\n */\n protected onStarClick(starIndex: number): void {\n if (this.isNonInteractive()) return;\n const newRating = this.internalRating() === starIndex ? 0 : starIndex;\n this.updateRating(newRating);\n }\n\n /**\n * Handles keyboard navigation within the rating group.\n * Implements WAI-ARIA APG Radio Group pattern with wrapping arrows and Space key.\n */\n protected onKeydown(event: KeyboardEvent, starIndex: number): void {\n if (this.isNonInteractive()) return;\n\n const total = this.numberOfStars();\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp': {\n event.preventDefault();\n const nextIndex = starIndex === total ? 1 : starIndex + 1;\n this.updateRating(nextIndex);\n this.focusStar(nextIndex - 1);\n break;\n }\n case 'ArrowLeft':\n case 'ArrowDown': {\n event.preventDefault();\n const prevIndex = starIndex === 1 ? total : starIndex - 1;\n this.updateRating(prevIndex);\n this.focusStar(prevIndex - 1);\n break;\n }\n case ' ': {\n event.preventDefault();\n if (this.internalRating() !== starIndex) {\n this.updateRating(starIndex);\n }\n break;\n }\n case 'Home': {\n event.preventDefault();\n this.updateRating(1);\n this.focusStar(0);\n break;\n }\n case 'End': {\n event.preventDefault();\n this.updateRating(total);\n this.focusStar(total - 1);\n break;\n }\n }\n }\n\n protected onBlur(): void {\n this._onTouched();\n }\n\n private updateRating(value: number): void {\n this.internalRating.set(value);\n this.ratingChange.emit(value);\n this._onChange(value);\n }\n\n private focusStar(arrayIndex: number): void {\n const buttons = this.starButtons();\n if (buttons[arrayIndex]) {\n buttons[arrayIndex].nativeElement.focus();\n }\n }\n\n private _onChange: (value: number) => void = () => {/* noop */};\n private _onTouched: () => void = () => {/* noop */};\n}\n","@for (star of stars(); track star.index) {\n <button\n #starButton\n type=\"button\"\n class=\"eds-rating__star\"\n [class.eds-rating__star--filled]=\"star.filled\"\n [disabled]=\"isNonInteractive()\"\n [attr.tabindex]=\"getTabIndex(star.index)\"\n [attr.role]=\"'radio'\"\n [attr.aria-checked]=\"star.index === internalRating()\"\n [attr.aria-label]=\"'Star ' + star.index + ' of ' + numberOfStars()\"\n (click)=\"onStarClick(star.index)\"\n (keydown)=\"onKeydown($event, star.index)\"\n (blur)=\"onBlur()\">\n @if (star.filled) {\n <eds-icon icon=\"star-fill:core\" size=\"s\"/>\n } @else {\n <eds-icon icon=\"star:core\" size=\"s\"/>\n }\n </button>\n}\n","import { EdsRating } from './eds-rating';\n\nexport { EdsRating };\n\n/** Convenience array for importing all eds-rating components. */\nexport const EDS_RATING = [\n EdsRating,\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|