@kirbydesign/designsystem 11.11.4 → 12.0.0-dev-286cdc0
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/README.md +7 -0
- package/fesm2022/kirbydesign-designsystem-accordion.mjs +246 -135
- package/fesm2022/kirbydesign-designsystem-accordion.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-action-group.mjs +229 -134
- package/fesm2022/kirbydesign-designsystem-action-group.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-avatar.mjs +102 -55
- package/fesm2022/kirbydesign-designsystem-avatar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-badge.mjs +85 -42
- package/fesm2022/kirbydesign-designsystem-badge.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-button.mjs +203 -170
- package/fesm2022/kirbydesign-designsystem-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-calendar.mjs +524 -516
- package/fesm2022/kirbydesign-designsystem-calendar.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-card.mjs +439 -205
- package/fesm2022/kirbydesign-designsystem-card.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-chart.mjs +1388 -1469
- package/fesm2022/kirbydesign-designsystem-chart.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs +223 -176
- package/fesm2022/kirbydesign-designsystem-checkbox.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-config.mjs +50 -96
- package/fesm2022/kirbydesign-designsystem-config.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-data-table.mjs +180 -83
- package/fesm2022/kirbydesign-designsystem-data-table.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-divider.mjs +46 -19
- package/fesm2022/kirbydesign-designsystem-divider.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-dropdown.mjs +878 -752
- package/fesm2022/kirbydesign-designsystem-dropdown.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs +175 -91
- package/fesm2022/kirbydesign-designsystem-empty-state.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs +213 -85
- package/fesm2022/kirbydesign-designsystem-fab-sheet.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-flag.mjs +67 -33
- package/fesm2022/kirbydesign-designsystem-flag.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-form-field.mjs +1260 -891
- package/fesm2022/kirbydesign-designsystem-form-field.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-gesture.mjs +38 -23
- package/fesm2022/kirbydesign-designsystem-gesture.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-header.mjs +422 -182
- package/fesm2022/kirbydesign-designsystem-header.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-helpers-scss.mjs +16 -14
- package/fesm2022/kirbydesign-designsystem-helpers-scss.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-helpers.mjs +251 -361
- package/fesm2022/kirbydesign-designsystem-helpers.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-icon.mjs +881 -296
- package/fesm2022/kirbydesign-designsystem-icon.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item-group.mjs +52 -23
- package/fesm2022/kirbydesign-designsystem-item-group.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item-sliding.mjs +147 -43
- package/fesm2022/kirbydesign-designsystem-item-sliding.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-item.mjs +395 -151
- package/fesm2022/kirbydesign-designsystem-item.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-kirby-app.mjs +136 -54
- package/fesm2022/kirbydesign-designsystem-kirby-app.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-list.mjs +1188 -697
- package/fesm2022/kirbydesign-designsystem-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs +166 -76
- package/fesm2022/kirbydesign-designsystem-loading-overlay.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-menu.mjs +420 -311
- package/fesm2022/kirbydesign-designsystem-menu.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-modal.mjs +2476 -1912
- package/fesm2022/kirbydesign-designsystem-modal.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-page.mjs +1526 -905
- package/fesm2022/kirbydesign-designsystem-page.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-popover.mjs +204 -169
- package/fesm2022/kirbydesign-designsystem-popover.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-progress-circle.mjs +209 -158
- package/fesm2022/kirbydesign-designsystem-progress-circle.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-radio.mjs +537 -365
- package/fesm2022/kirbydesign-designsystem-radio.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-range.mjs +207 -150
- package/fesm2022/kirbydesign-designsystem-range.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs +217 -104
- package/fesm2022/kirbydesign-designsystem-reorder-list.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-router-outlet.mjs +113 -38
- package/fesm2022/kirbydesign-designsystem-router-outlet.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-section-header.mjs +56 -18
- package/fesm2022/kirbydesign-designsystem-section-header.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-segmented-control.mjs +276 -232
- package/fesm2022/kirbydesign-designsystem-segmented-control.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs +328 -382
- package/fesm2022/kirbydesign-designsystem-shared-floating.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared-portal.mjs +73 -84
- package/fesm2022/kirbydesign-designsystem-shared-portal.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-shared.mjs +665 -531
- package/fesm2022/kirbydesign-designsystem-shared.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-slide-button.mjs +140 -91
- package/fesm2022/kirbydesign-designsystem-slide-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-slide.mjs +360 -158
- package/fesm2022/kirbydesign-designsystem-slide.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-spinner.mjs +90 -32
- package/fesm2022/kirbydesign-designsystem-spinner.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs +348 -181
- package/fesm2022/kirbydesign-designsystem-tab-navigation.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-tabs.mjs +286 -121
- package/fesm2022/kirbydesign-designsystem-tabs.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs +6234 -3164
- package/fesm2022/kirbydesign-designsystem-testing-base.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs +118 -95
- package/fesm2022/kirbydesign-designsystem-testing-jasmine.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing-jest.mjs +128 -101
- package/fesm2022/kirbydesign-designsystem-testing-jest.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-testing.mjs +236 -243
- package/fesm2022/kirbydesign-designsystem-testing.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toast.mjs +98 -62
- package/fesm2022/kirbydesign-designsystem-toast.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toggle-button.mjs +155 -127
- package/fesm2022/kirbydesign-designsystem-toggle-button.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-toggle.mjs +180 -150
- package/fesm2022/kirbydesign-designsystem-toggle.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem-types.mjs +39 -24
- package/fesm2022/kirbydesign-designsystem-types.mjs.map +1 -1
- package/fesm2022/kirbydesign-designsystem.mjs +516 -407
- package/fesm2022/kirbydesign-designsystem.mjs.map +1 -1
- package/icons/svg/megaphone.svg +3 -0
- package/icons/svg/person-blocked.svg +3 -0
- package/icons/svg/person-check.svg +3 -0
- package/icons/svg/person-close.svg +3 -0
- package/icons/svg/person-cloud.svg +3 -0
- package/icons/svg/person-power.svg +3 -0
- package/icons/svg/person-warning.svg +3 -0
- package/icons/svg/phone-device-pin.svg +3 -0
- package/icons/svg/phone-device.svg +3 -2
- package/package.json +10 -10
- package/readme.md +37 -0
- package/types/kirbydesign-designsystem-accordion.d.ts +72 -39
- package/types/kirbydesign-designsystem-accordion.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-action-group.d.ts +46 -39
- package/types/kirbydesign-designsystem-action-group.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-avatar.d.ts +62 -26
- package/types/kirbydesign-designsystem-avatar.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-badge.d.ts +30 -19
- package/types/kirbydesign-designsystem-badge.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-button.d.ts +70 -45
- package/types/kirbydesign-designsystem-button.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-calendar.d.ts +193 -132
- package/types/kirbydesign-designsystem-calendar.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-card.d.ts +130 -66
- package/types/kirbydesign-designsystem-card.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-chart.d.ts +198 -172
- package/types/kirbydesign-designsystem-chart.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-checkbox.d.ts +102 -68
- package/types/kirbydesign-designsystem-checkbox.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-config.d.ts +17 -21
- package/types/kirbydesign-designsystem-config.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-data-table.d.ts +46 -26
- package/types/kirbydesign-designsystem-data-table.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-divider.d.ts +11 -9
- package/types/kirbydesign-designsystem-divider.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-dropdown.d.ts +219 -166
- package/types/kirbydesign-designsystem-dropdown.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-empty-state.d.ts +58 -35
- package/types/kirbydesign-designsystem-empty-state.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-fab-sheet.d.ts +34 -28
- package/types/kirbydesign-designsystem-fab-sheet.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-flag.d.ts +18 -13
- package/types/kirbydesign-designsystem-flag.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-form-field.d.ts +409 -242
- package/types/kirbydesign-designsystem-form-field.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-gesture.d.ts +41 -46
- package/types/kirbydesign-designsystem-gesture.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-header.d.ts +102 -64
- package/types/kirbydesign-designsystem-header.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-helpers-scss.d.ts +6 -8
- package/types/kirbydesign-designsystem-helpers-scss.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-helpers.d.ts +83 -97
- package/types/kirbydesign-designsystem-helpers.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-icon.d.ts +63 -59
- package/types/kirbydesign-designsystem-icon.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-item-group.d.ts +6 -9
- package/types/kirbydesign-designsystem-item-group.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-item-sliding.d.ts +30 -26
- package/types/kirbydesign-designsystem-item-sliding.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-item.d.ts +93 -54
- package/types/kirbydesign-designsystem-item.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-kirby-app.d.ts +18 -19
- package/types/kirbydesign-designsystem-kirby-app.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-list.d.ts +392 -263
- package/types/kirbydesign-designsystem-list.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-loading-overlay.d.ts +35 -24
- package/types/kirbydesign-designsystem-loading-overlay.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-menu.d.ts +119 -69
- package/types/kirbydesign-designsystem-menu.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-modal.d.ts +578 -455
- package/types/kirbydesign-designsystem-modal.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-page.d.ts +308 -226
- package/types/kirbydesign-designsystem-page.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-popover.d.ts +48 -40
- package/types/kirbydesign-designsystem-popover.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-progress-circle.d.ts +59 -61
- package/types/kirbydesign-designsystem-progress-circle.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-radio.d.ts +147 -98
- package/types/kirbydesign-designsystem-radio.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-range.d.ts +90 -45
- package/types/kirbydesign-designsystem-range.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-reorder-list.d.ts +44 -32
- package/types/kirbydesign-designsystem-reorder-list.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-router-outlet.d.ts +23 -18
- package/types/kirbydesign-designsystem-router-outlet.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-section-header.d.ts +5 -8
- package/types/kirbydesign-designsystem-section-header.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-segmented-control.d.ts +123 -100
- package/types/kirbydesign-designsystem-segmented-control.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-shared-floating.d.ts +183 -128
- package/types/kirbydesign-designsystem-shared-floating.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-shared-portal.d.ts +29 -28
- package/types/kirbydesign-designsystem-shared-portal.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-shared.d.ts +143 -139
- package/types/kirbydesign-designsystem-shared.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-slide-button.d.ts +43 -34
- package/types/kirbydesign-designsystem-slide-button.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-slide.d.ts +80 -59
- package/types/kirbydesign-designsystem-slide.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-spinner.d.ts +13 -14
- package/types/kirbydesign-designsystem-spinner.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-tab-navigation.d.ts +78 -55
- package/types/kirbydesign-designsystem-tab-navigation.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-tabs.d.ts +50 -45
- package/types/kirbydesign-designsystem-tabs.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-testing-base.d.ts +2435 -815
- package/types/kirbydesign-designsystem-testing-base.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-testing-jasmine.d.ts +9 -10
- package/types/kirbydesign-designsystem-testing-jasmine.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-testing-jest.d.ts +9 -10
- package/types/kirbydesign-designsystem-testing-jest.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-testing.d.ts +52 -58
- package/types/kirbydesign-designsystem-testing.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-toast.d.ts +25 -31
- package/types/kirbydesign-designsystem-toast.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-toggle-button.d.ts +62 -56
- package/types/kirbydesign-designsystem-toggle-button.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-toggle.d.ts +71 -63
- package/types/kirbydesign-designsystem-toggle.d.ts.map +1 -1
- package/types/kirbydesign-designsystem-types.d.ts +15 -22
- package/types/kirbydesign-designsystem-types.d.ts.map +1 -1
- package/types/kirbydesign-designsystem.d.ts +135 -123
- package/types/kirbydesign-designsystem.d.ts.map +1 -1
- package/accordion/package.json +0 -4
- package/action-group/package.json +0 -4
- package/avatar/package.json +0 -4
- package/badge/package.json +0 -4
- package/button/package.json +0 -4
- package/calendar/package.json +0 -4
- package/card/package.json +0 -4
- package/chart/package.json +0 -4
- package/checkbox/package.json +0 -4
- package/config/package.json +0 -4
- package/data-table/package.json +0 -4
- package/divider/package.json +0 -4
- package/dropdown/package.json +0 -4
- package/empty-state/package.json +0 -4
- package/fab-sheet/package.json +0 -4
- package/flag/package.json +0 -4
- package/form-field/package.json +0 -4
- package/gesture/package.json +0 -4
- package/header/package.json +0 -4
- package/helpers/package.json +0 -4
- package/helpers/scss/package.json +0 -4
- package/icon/package.json +0 -4
- package/item/package.json +0 -4
- package/item-group/package.json +0 -4
- package/item-sliding/package.json +0 -4
- package/kirby-app/package.json +0 -4
- package/list/package.json +0 -4
- package/loading-overlay/package.json +0 -4
- package/menu/package.json +0 -4
- package/modal/package.json +0 -4
- package/page/package.json +0 -4
- package/popover/package.json +0 -4
- package/progress-circle/package.json +0 -4
- package/radio/package.json +0 -4
- package/range/package.json +0 -4
- package/reorder-list/package.json +0 -4
- package/router-outlet/package.json +0 -4
- package/section-header/package.json +0 -4
- package/segmented-control/package.json +0 -4
- package/shared/floating/package.json +0 -4
- package/shared/package.json +0 -4
- package/shared/portal/package.json +0 -4
- package/slide/package.json +0 -4
- package/slide-button/package.json +0 -4
- package/spinner/package.json +0 -4
- package/tab-navigation/package.json +0 -4
- package/tabs/package.json +0 -4
- package/testing/package.json +0 -4
- package/testing-base/package.json +0 -4
- package/testing-jasmine/package.json +0 -4
- package/testing-jest/package.json +0 -4
- package/toast/package.json +0 -4
- package/toggle/package.json +0 -4
- package/toggle-button/package.json +0 -4
- package/types/package.json +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kirbydesign-designsystem-radio.mjs","sources":["../../radio/src/radio.component.ts","../../radio/src/radio.component.html","../../radio/src/radio-group/radio-group.component.ts","../../radio/src/radio-group/radio-group.component.html","../../radio/src/radio-module.ts","../../radio/src/kirbydesign-designsystem-radio.ts"],"sourcesContent":["import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { IonRadio } from '@ionic/angular/standalone';\nimport { IonicElementPartHelper } from '@kirbydesign/designsystem/helpers';\nimport { inheritAriaLabelText, setAccessibleLabel } from '@kirbydesign/designsystem/shared';\n\n@Component({\n selector: 'kirby-radio',\n templateUrl: './radio.component.html',\n styleUrls: ['./radio.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [IonicElementPartHelper],\n imports: [IonRadio],\n})\nexport class RadioComponent implements AfterViewInit, OnInit, AfterContentInit {\n @ViewChild(IonRadio, { read: ElementRef, static: true })\n private ionRadioElement?: ElementRef<HTMLIonRadioElement>;\n\n @Input()\n value: any;\n\n @Input()\n text: string;\n\n @HostBinding('class')\n @Input()\n size: 'xs' | 'sm' | 'md' = 'md';\n\n @Input()\n disabled: boolean;\n @HostBinding('attr.disabled')\n get _isDisabled() {\n return this.disabled ? 'disabled' : null;\n }\n\n @HostBinding('class.has-hidden-label') _labelText: string;\n\n get buttonTabIndex(): number {\n return this.ionRadioElement ? this.ionRadioElement.nativeElement.tabIndex : -1;\n }\n\n _justify: 'start' | 'end' | 'space-between' = 'start';\n _labelPlacement: 'end' | 'fixed' | 'stacked' | 'start' = 'end';\n _hasSlottedContent: boolean;\n\n constructor(\n private element: ElementRef<HTMLElement>,\n private ionicElementPartHelper: IonicElementPartHelper\n ) {}\n\n ngOnInit(): void {\n /**\n * We cannot query ion-checkbox for slotted content at this point as the slot has not been rendered.\n * But we need to know if content is slotted to set justify and labelPlacement BEFORE ion-checkbox is rendered.\n * So it has to be done by querying an additional wrapper around the default content slot like this.\n */\n this._hasSlottedContent = this.element.nativeElement\n .querySelector('.default-content')\n .hasChildNodes();\n\n const slot = this.element.nativeElement.getAttribute('slot');\n if (slot === 'end' && this._hasSlottedContent) {\n this._justify = 'space-between';\n this._labelPlacement = 'start';\n }\n }\n\n ngAfterViewInit(): void {\n this.ionicElementPartHelper.setPart('label', this.ionRadioElement, '.radio-wrapper');\n this.ionicElementPartHelper.setPart(\n 'label-text-wrapper',\n this.ionRadioElement,\n '.label-text-wrapper'\n );\n this.ionicElementPartHelper.setPart('native-wrapper', this.ionRadioElement, '.native-wrapper');\n }\n\n ngAfterContentInit(): void {\n this._labelText = inheritAriaLabelText(this.element.nativeElement);\n\n if (!this.text && !this._labelText && !this._hasSlottedContent) {\n // if no label has been set try to find a label in an item and use its text content\n this._labelText = setAccessibleLabel(this.element.nativeElement);\n }\n }\n\n focus() {\n this.ionRadioElement?.nativeElement.focus();\n }\n}\n","<ion-radio\n [value]=\"value\"\n [disabled]=\"disabled\"\n mode=\"md\"\n [labelPlacement]=\"_labelPlacement\"\n [justify]=\"_justify\"\n>\n @if (_labelText) {\n <span class=\"hidden-label\">{{ _labelText }}</span>\n }\n @if (text) {\n <span [attr.aria-hidden]=\"_labelText ? true : undefined\">{{ text }}</span>\n }\n <span class=\"default-content\" [attr.aria-hidden]=\"_labelText ? true : undefined\">\n <ng-content></ng-content>\n </span>\n</ion-radio>\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Output,\n QueryList,\n Renderer2,\n TemplateRef,\n ViewChildren,\n} from '@angular/core';\nimport { Component, HostListener, Input } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ListItemTemplateDirective } from '@kirbydesign/designsystem/list';\nimport { FORM_FIELD_CONTROL, FormFieldControl } from '@kirbydesign/designsystem/types';\n\nimport { forwardAttributes } from '@kirbydesign/designsystem/shared';\nimport { IonRadioGroup } from '@ionic/angular/standalone';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RadioComponent } from '../radio.component';\n\n@Component({\n selector: 'kirby-radio-group',\n templateUrl: './radio-group.component.html',\n styles: ['ion-radio-group { display: inherit; flex-wrap: inherit}'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: RadioGroupComponent,\n multi: true,\n },\n { provide: FORM_FIELD_CONTROL, useExisting: RadioGroupComponent },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [IonRadioGroup, NgTemplateOutlet, RadioComponent],\n})\nexport class RadioGroupComponent\n implements AfterContentInit, ControlValueAccessor, FormFieldControl, AfterViewInit\n{\n constructor(\n private cdr: ChangeDetectorRef,\n private element: ElementRef<HTMLElement>,\n private renderer: Renderer2\n ) {}\n\n // #region public properties\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n @Input() set disabled(value: boolean) {\n this._disabled = value;\n this.setProjectedRadiosDisabledState(value);\n }\n\n private _hasError: boolean = false;\n\n @HostBinding('class.error')\n @Input()\n get hasError(): boolean {\n return this._hasError;\n }\n\n set hasError(value: boolean) {\n if (this._hasError !== value) {\n this._hasError = value;\n this.hasErrorChange.emit(this._hasError);\n }\n }\n\n @Output() hasErrorChange = new EventEmitter<boolean>();\n\n get interactiveElement(): HTMLElement {\n return this.element?.nativeElement?.querySelector('ion-radio-group');\n }\n\n get items(): string[] | any[] {\n return this._items || []; // Ensure items return empty array even if set to null/undefined\n }\n\n @Input() set items(value: string[] | any[]) {\n if ((!value || !value.length) && !this.items.length) return; // Nothing changed, no items before or after\n this._items = value;\n this.refreshSelectionState();\n }\n\n @Input()\n itemTextProperty = 'text';\n\n @Input()\n itemDisabledProperty = 'disabled';\n\n get selectedIndex(): number {\n return this._selectedIndex;\n }\n\n @Input() set selectedIndex(value: number) {\n if (typeof value === 'string') value = parseInt(value); // Ensure data type number, e.g. when used with template syntax without binding: <... selectedIndex=\"1\"\n if (value === undefined || value === null || Number.isNaN(value)) value = -1;\n if (value === this.selectedIndex) return;\n this._selectedIndex = value;\n this._value = this.getValueFromSelectedIndex() || null;\n }\n\n get value(): string | any {\n return this._value;\n }\n\n @Input() set value(value: string | any) {\n this.setSelectedItem(value);\n }\n\n private get hasValue(): boolean {\n return this.value !== undefined && this.value !== null;\n }\n\n /**\n * Emitted when an option is selected\n */\n @Output() valueChange: EventEmitter<string | any> = new EventEmitter<string | any>();\n // #endregion public properties\n\n // #region \"protected\" properties used by template\n @ContentChild(ListItemTemplateDirective, { read: TemplateRef })\n _customItemTemplate: TemplateRef<any>;\n // #endregion \"protected\" properties used by template\n\n // #region private fields\n private _disabled = false;\n private _items: string[] | any[] = [];\n private _onChangeCallback: (value: any) => void = () => {};\n private _onTouched = () => {};\n private _selectedIndex: number = -1;\n private _value?: string | any = null;\n private _attributesToForward = ['aria-label', 'aria-labelledby'];\n\n @ViewChildren(RadioComponent)\n private radioButtons: QueryList<RadioComponent>;\n @ContentChildren(RadioComponent, { descendants: true })\n private projectedRadioButtons: QueryList<RadioComponent>;\n\n private get hasItemsFromContentProjection(): boolean {\n return (\n !this.items.length &&\n !this._customItemTemplate &&\n this.projectedRadioButtons &&\n this.projectedRadioButtons.length > 0\n );\n }\n\n // #endregion private fields\n\n // #region public methods\n focus() {\n const findFocusable = (radios: QueryList<RadioComponent>) =>\n radios && radios.find((radio) => !isNaN(radio.buttonTabIndex) && radio.buttonTabIndex !== -1);\n const focusable = findFocusable(this.radioButtons) || findFocusable(this.projectedRadioButtons);\n focusable?.focus();\n }\n\n ngAfterContentInit(): void {\n this.initSelectionStateFromProjectedContent();\n this.listenForProjectedRadiosChange();\n }\n\n ngAfterViewInit(): void {\n forwardAttributes(\n this.element.nativeElement,\n this._attributesToForward,\n this.renderer,\n this.element.nativeElement.querySelector('ion-radio-group')\n );\n }\n\n registerOnChange(fn: any): void {\n this._onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n writeValue(value: any): void {\n this.value = value;\n this.cdr.markForCheck();\n }\n\n // #endregion public methods\n\n // #region \"protected\" methods used by template\n _getTextFromItem(item: string | any): string {\n if (!item) return null;\n return typeof item === 'string' ? item : item[this.itemTextProperty];\n }\n\n _getDisabledStateFromItem(item: string | any): boolean {\n if (!item) return undefined;\n return typeof item === 'string' ? undefined : item[this.itemDisabledProperty];\n }\n\n get _hasItems(): boolean {\n return this.items.length > 0 || this.hasItemsFromContentProjection;\n }\n\n _onChange(value: string | any) {\n if (value === this._value) return;\n this.setSelectedItem(value);\n this.valueChange.emit(value);\n this._onChangeCallback(value);\n }\n\n @HostListener('ionBlur')\n _onRadioBlur() {\n this._onTouched();\n }\n\n // #endregion \"protected\" methods used by template\n\n // #region private methods\n private getIndexOfSelectedValue() {\n if (!this.hasValue) return -1;\n return this.hasItemsFromContentProjection\n ? this.getIndexOfProjectedRadio(this.value)\n : this.items.indexOf(this.value);\n }\n\n private getIndexOfProjectedRadio(value: string | any): number {\n let selectedIndex = -1;\n this.projectedRadioButtons?.find((radio, i) => {\n const found = radio.value === value;\n if (found) {\n selectedIndex = i;\n }\n return found;\n });\n return selectedIndex;\n }\n\n private getValueFromSelectedIndex(): string | any {\n if (this.selectedIndex === -1) return;\n return this.hasItemsFromContentProjection\n ? this.getValueFromProjectedRadios(this.selectedIndex)\n : this.items[this.selectedIndex];\n }\n\n private getValueFromProjectedRadios(index: number): string | any {\n const radio =\n this.projectedRadioButtons &&\n this.projectedRadioButtons.find((_, i) => {\n return i === index;\n });\n return radio && radio.value;\n }\n\n private initSelectionStateFromProjectedContent() {\n if (this.hasItemsFromContentProjection) {\n this.refreshSelectionState(); // Initialize selected index and value from projected radios\n }\n }\n\n private listenForProjectedRadiosChange() {\n this.projectedRadioButtons.changes.subscribe(() => {\n this.refreshStateFromProjectedContent();\n\n if (this.disabled) {\n // Ensure disabled state propagates when re-rendering projected radios.\n // setTimeout prevents ExpressionChangedAfterItHasBeenCheckedError when updating the DOM in QueryList.changes:\n setTimeout(() => this.setProjectedRadiosDisabledState(this.disabled));\n }\n });\n }\n\n private refreshSelectionState() {\n if (this.hasValue) {\n this._selectedIndex = this.getIndexOfSelectedValue(); // Ensure selectedIndex reflects value within items\n }\n\n const valueFromSelectedIndex = this.getValueFromSelectedIndex();\n this._value = valueFromSelectedIndex !== undefined ? valueFromSelectedIndex : null;\n }\n\n private refreshStateFromProjectedContent() {\n if (this._customItemTemplate) return; // Only refresh on changes to projected content, not when re-rendering custom template\n this.cdr.markForCheck(); // Ensure changes to projected content gets checked in next change detection cycle\n this.refreshSelectionState(); // Sync selected index and value from projected radios\n }\n\n private setSelectedItem(value: string | any) {\n if (value === this._value) return; // Nothing changed\n this._value = value;\n this._selectedIndex = this.getIndexOfSelectedValue();\n }\n\n private setProjectedRadiosDisabledState(isDisabled: boolean) {\n if (!this.projectedRadioButtons || !this.projectedRadioButtons.length) return;\n this.projectedRadioButtons.forEach((radio, index) => {\n // Disable all radios when group is disabled, otherwise fall back to each item's disabled state, if defined:\n radio.disabled = isDisabled || this._getDisabledStateFromItem(this.items[index]);\n });\n }\n\n // #endregion private methods\n}\n","@if (_hasItems) {\n <ion-radio-group\n [value]=\"value\"\n (ionChange)=\"_onChange($event.detail.value)\"\n [attr.aria-invalid]=\"hasError\"\n >\n @if (!items || !items.length) {\n <ng-content></ng-content>\n } @else {\n @for (item of items; track _getTextFromItem(item)) {\n <ng-container\n *ngTemplateOutlet=\"\n _customItemTemplate || defaultItemTemplate;\n context: { $implicit: item, selected: $index === selectedIndex, index: $index }\n \"\n ></ng-container>\n }\n }\n </ion-radio-group>\n}\n\n<ng-template #defaultItemTemplate let-item>\n <kirby-radio\n [value]=\"item\"\n [disabled]=\"disabled || _getDisabledStateFromItem(item)\"\n [text]=\"_getTextFromItem(item)\"\n ></kirby-radio>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { IonRadio, IonRadioGroup } from '@ionic/angular/standalone';\nimport { RadioGroupComponent } from './radio-group/radio-group.component';\nimport { RadioComponent } from './radio.component';\n\nconst declarations = [RadioComponent, RadioGroupComponent];\n\n@NgModule({\n imports: [CommonModule, IonRadio, IonRadioGroup, ...declarations],\n exports: [...declarations],\n})\nexport class RadioModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kirbydesign-designsystem-radio.mjs","names":[],"sources":["../../radio/src/radio.component.ts","../../radio/src/radio.component.html","../../radio/src/radio-group/radio-group.component.ts","../../radio/src/radio-group/radio-group.component.html","../../radio/src/radio-module.ts"],"sourcesContent":["import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n HostBinding,\n Input,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { IonRadio } from '@ionic/angular';\nimport { IonicElementPartHelper } from '@kirbydesign/designsystem/helpers';\nimport { inheritAriaLabelText, setAccessibleLabel } from '@kirbydesign/designsystem/shared';\n\n@Component({\n selector: 'kirby-radio',\n templateUrl: './radio.component.html',\n styleUrls: ['./radio.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [IonicElementPartHelper],\n imports: [IonRadio],\n})\nexport class RadioComponent implements AfterViewInit, OnInit, AfterContentInit {\n @ViewChild(IonRadio, { read: ElementRef, static: true })\n private ionRadioElement?: ElementRef<HTMLIonRadioElement>;\n\n @Input()\n value: any;\n\n @Input()\n text: string;\n\n @HostBinding('class')\n @Input()\n size: 'xs' | 'sm' | 'md' = 'md';\n\n @Input()\n disabled: boolean;\n @HostBinding('attr.disabled')\n get _isDisabled() {\n return this.disabled ? 'disabled' : null;\n }\n\n @HostBinding('class.has-hidden-label') _labelText: string;\n\n get buttonTabIndex(): number {\n return this.ionRadioElement ? this.ionRadioElement.nativeElement.tabIndex : -1;\n }\n\n _justify: 'start' | 'end' | 'space-between' = 'start';\n _labelPlacement: 'end' | 'fixed' | 'stacked' | 'start' = 'end';\n _hasSlottedContent: boolean;\n\n constructor(\n private element: ElementRef<HTMLElement>,\n private ionicElementPartHelper: IonicElementPartHelper\n ) {}\n\n ngOnInit(): void {\n /**\n * We cannot query ion-checkbox for slotted content at this point as the slot has not been rendered.\n * But we need to know if content is slotted to set justify and labelPlacement BEFORE ion-checkbox is rendered.\n * So it has to be done by querying an additional wrapper around the default content slot like this.\n */\n this._hasSlottedContent = this.element.nativeElement\n .querySelector('.default-content')\n .hasChildNodes();\n\n const slot = this.element.nativeElement.getAttribute('slot');\n if (slot === 'end' && this._hasSlottedContent) {\n this._justify = 'space-between';\n this._labelPlacement = 'start';\n }\n }\n\n ngAfterViewInit(): void {\n this.ionicElementPartHelper.setPart('label', this.ionRadioElement, '.radio-wrapper');\n this.ionicElementPartHelper.setPart(\n 'label-text-wrapper',\n this.ionRadioElement,\n '.label-text-wrapper'\n );\n this.ionicElementPartHelper.setPart('native-wrapper', this.ionRadioElement, '.native-wrapper');\n }\n\n ngAfterContentInit(): void {\n this._labelText = inheritAriaLabelText(this.element.nativeElement);\n\n if (!this.text && !this._labelText && !this._hasSlottedContent) {\n // if no label has been set try to find a label in an item and use its text content\n this._labelText = setAccessibleLabel(this.element.nativeElement);\n }\n }\n\n focus() {\n this.ionRadioElement?.nativeElement.focus();\n }\n}\n","<ion-radio\n [value]=\"value\"\n [disabled]=\"disabled\"\n mode=\"md\"\n [labelPlacement]=\"_labelPlacement\"\n [justify]=\"_justify\"\n>\n @if (_labelText) {\n <span class=\"hidden-label\">{{ _labelText }}</span>\n }\n @if (text) {\n <span [attr.aria-hidden]=\"_labelText ? true : undefined\">{{ text }}</span>\n }\n <span class=\"default-content\" [attr.aria-hidden]=\"_labelText ? true : undefined\">\n <ng-content></ng-content>\n </span>\n</ion-radio>\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n ContentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Output,\n QueryList,\n Renderer2,\n TemplateRef,\n ViewChildren,\n} from '@angular/core';\nimport { Component, HostListener, Input } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ListItemTemplateDirective } from '@kirbydesign/designsystem/list';\nimport { FORM_FIELD_CONTROL, FormFieldControl } from '@kirbydesign/designsystem/types';\n\nimport { forwardAttributes } from '@kirbydesign/designsystem/shared';\nimport { IonRadioGroup } from '@ionic/angular';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RadioComponent } from '../radio.component';\n\n@Component({\n selector: 'kirby-radio-group',\n templateUrl: './radio-group.component.html',\n styles: ['ion-radio-group { display: inherit; flex-wrap: inherit}'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: RadioGroupComponent,\n multi: true,\n },\n { provide: FORM_FIELD_CONTROL, useExisting: RadioGroupComponent },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [IonRadioGroup, NgTemplateOutlet, RadioComponent],\n})\nexport class RadioGroupComponent\n implements AfterContentInit, ControlValueAccessor, FormFieldControl, AfterViewInit\n{\n constructor(\n private cdr: ChangeDetectorRef,\n private element: ElementRef<HTMLElement>,\n private renderer: Renderer2\n ) {}\n\n // #region public properties\n\n get disabled(): boolean {\n return this._disabled;\n }\n\n @Input() set disabled(value: boolean) {\n this._disabled = value;\n this.setProjectedRadiosDisabledState(value);\n }\n\n private _hasError: boolean = false;\n\n @HostBinding('class.error')\n @Input()\n get hasError(): boolean {\n return this._hasError;\n }\n\n set hasError(value: boolean) {\n if (this._hasError !== value) {\n this._hasError = value;\n this.hasErrorChange.emit(this._hasError);\n }\n }\n\n @Output() hasErrorChange = new EventEmitter<boolean>();\n\n get interactiveElement(): HTMLElement {\n return this.element?.nativeElement?.querySelector('ion-radio-group');\n }\n\n get items(): string[] | any[] {\n return this._items || []; // Ensure items return empty array even if set to null/undefined\n }\n\n @Input() set items(value: string[] | any[]) {\n if ((!value || !value.length) && !this.items.length) return; // Nothing changed, no items before or after\n this._items = value;\n this.refreshSelectionState();\n }\n\n @Input()\n itemTextProperty = 'text';\n\n @Input()\n itemDisabledProperty = 'disabled';\n\n get selectedIndex(): number {\n return this._selectedIndex;\n }\n\n @Input() set selectedIndex(value: number) {\n if (typeof value === 'string') value = parseInt(value); // Ensure data type number, e.g. when used with template syntax without binding: <... selectedIndex=\"1\"\n if (value === undefined || value === null || Number.isNaN(value)) value = -1;\n if (value === this.selectedIndex) return;\n this._selectedIndex = value;\n this._value = this.getValueFromSelectedIndex() || null;\n }\n\n get value(): string | any {\n return this._value;\n }\n\n @Input() set value(value: string | any) {\n this.setSelectedItem(value);\n }\n\n private get hasValue(): boolean {\n return this.value !== undefined && this.value !== null;\n }\n\n /**\n * Emitted when an option is selected\n */\n @Output() valueChange: EventEmitter<string | any> = new EventEmitter<string | any>();\n // #endregion public properties\n\n // #region \"protected\" properties used by template\n @ContentChild(ListItemTemplateDirective, { read: TemplateRef })\n _customItemTemplate: TemplateRef<any>;\n // #endregion \"protected\" properties used by template\n\n // #region private fields\n private _disabled = false;\n private _items: string[] | any[] = [];\n private _onChangeCallback: (value: any) => void = () => {};\n private _onTouched = () => {};\n private _selectedIndex: number = -1;\n private _value?: string | any = null;\n private _attributesToForward = ['aria-label', 'aria-labelledby'];\n\n @ViewChildren(RadioComponent)\n private radioButtons: QueryList<RadioComponent>;\n @ContentChildren(RadioComponent, { descendants: true })\n private projectedRadioButtons: QueryList<RadioComponent>;\n\n private get hasItemsFromContentProjection(): boolean {\n return (\n !this.items.length &&\n !this._customItemTemplate &&\n this.projectedRadioButtons &&\n this.projectedRadioButtons.length > 0\n );\n }\n\n // #endregion private fields\n\n // #region public methods\n focus() {\n const findFocusable = (radios: QueryList<RadioComponent>) =>\n radios && radios.find((radio) => !isNaN(radio.buttonTabIndex) && radio.buttonTabIndex !== -1);\n const focusable = findFocusable(this.radioButtons) || findFocusable(this.projectedRadioButtons);\n focusable?.focus();\n }\n\n ngAfterContentInit(): void {\n this.initSelectionStateFromProjectedContent();\n this.listenForProjectedRadiosChange();\n }\n\n ngAfterViewInit(): void {\n forwardAttributes(\n this.element.nativeElement,\n this._attributesToForward,\n this.renderer,\n this.element.nativeElement.querySelector('ion-radio-group')\n );\n }\n\n registerOnChange(fn: any): void {\n this._onChangeCallback = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n writeValue(value: any): void {\n this.value = value;\n this.cdr.markForCheck();\n }\n\n // #endregion public methods\n\n // #region \"protected\" methods used by template\n _getTextFromItem(item: string | any): string {\n if (!item) return null;\n return typeof item === 'string' ? item : item[this.itemTextProperty];\n }\n\n _getDisabledStateFromItem(item: string | any): boolean {\n if (!item) return undefined;\n return typeof item === 'string' ? undefined : item[this.itemDisabledProperty];\n }\n\n _onChange(value: string | any) {\n if (value === this._value) return;\n this.setSelectedItem(value);\n this.valueChange.emit(value);\n this._onChangeCallback(value);\n }\n\n @HostListener('ionBlur')\n _onRadioBlur() {\n this._onTouched();\n }\n\n // #endregion \"protected\" methods used by template\n\n // #region private methods\n private getIndexOfSelectedValue() {\n if (!this.hasValue) return -1;\n return this.hasItemsFromContentProjection\n ? this.getIndexOfProjectedRadio(this.value)\n : this.items.indexOf(this.value);\n }\n\n private getIndexOfProjectedRadio(value: string | any): number {\n let selectedIndex = -1;\n this.projectedRadioButtons?.find((radio, i) => {\n const found = radio.value === value;\n if (found) {\n selectedIndex = i;\n }\n return found;\n });\n return selectedIndex;\n }\n\n private getValueFromSelectedIndex(): string | any {\n if (this.selectedIndex === -1) return;\n return this.hasItemsFromContentProjection\n ? this.getValueFromProjectedRadios(this.selectedIndex)\n : this.items[this.selectedIndex];\n }\n\n private getValueFromProjectedRadios(index: number): string | any {\n const radio =\n this.projectedRadioButtons &&\n this.projectedRadioButtons.find((_, i) => {\n return i === index;\n });\n return radio && radio.value;\n }\n\n private initSelectionStateFromProjectedContent() {\n if (this.hasItemsFromContentProjection) {\n this.refreshSelectionState(); // Initialize selected index and value from projected radios\n }\n }\n\n private listenForProjectedRadiosChange() {\n this.projectedRadioButtons.changes.subscribe(() => {\n this.refreshStateFromProjectedContent();\n\n if (this.disabled) {\n // Ensure disabled state propagates when re-rendering projected radios.\n // setTimeout prevents ExpressionChangedAfterItHasBeenCheckedError when updating the DOM in QueryList.changes:\n setTimeout(() => this.setProjectedRadiosDisabledState(this.disabled));\n }\n });\n }\n\n private refreshSelectionState() {\n if (this.hasValue) {\n this._selectedIndex = this.getIndexOfSelectedValue(); // Ensure selectedIndex reflects value within items\n }\n\n const valueFromSelectedIndex = this.getValueFromSelectedIndex();\n this._value = valueFromSelectedIndex !== undefined ? valueFromSelectedIndex : null;\n }\n\n private refreshStateFromProjectedContent() {\n if (this._customItemTemplate) return; // Only refresh on changes to projected content, not when re-rendering custom template\n this.cdr.markForCheck(); // Ensure changes to projected content gets checked in next change detection cycle\n this.refreshSelectionState(); // Sync selected index and value from projected radios\n }\n\n private setSelectedItem(value: string | any) {\n if (value === this._value) return; // Nothing changed\n this._value = value;\n this._selectedIndex = this.getIndexOfSelectedValue();\n }\n\n private setProjectedRadiosDisabledState(isDisabled: boolean) {\n if (!this.projectedRadioButtons || !this.projectedRadioButtons.length) return;\n this.projectedRadioButtons.forEach((radio, index) => {\n // Disable all radios when group is disabled, otherwise fall back to each item's disabled state, if defined:\n radio.disabled = isDisabled || this._getDisabledStateFromItem(this.items[index]);\n });\n }\n\n // #endregion private methods\n}\n","<ion-radio-group\n [value]=\"value\"\n (ionChange)=\"_onChange($event.detail.value)\"\n [attr.aria-invalid]=\"hasError\"\n>\n @if (!items || !items.length) {\n <ng-content></ng-content>\n } @else {\n @for (item of items; track _getTextFromItem(item)) {\n <ng-container\n *ngTemplateOutlet=\"\n _customItemTemplate || defaultItemTemplate;\n context: { $implicit: item, selected: $index === selectedIndex, index: $index }\n \"\n ></ng-container>\n }\n }\n</ion-radio-group>\n\n<ng-template #defaultItemTemplate let-item>\n <kirby-radio\n [value]=\"item\"\n [disabled]=\"disabled || _getDisabledStateFromItem(item)\"\n [text]=\"_getTextFromItem(item)\"\n ></kirby-radio>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { IonRadio, IonRadioGroup } from '@ionic/angular';\nimport { RadioGroupComponent } from './radio-group/radio-group.component';\nimport { RadioComponent } from './radio.component';\n\nconst declarations = [RadioComponent, RadioGroupComponent];\n\n@NgModule({\n imports: [CommonModule, IonRadio, IonRadioGroup, ...declarations],\n exports: [...declarations],\n})\nexport class RadioModule {}\n"],"mappings":"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"}
|
|
@@ -1,151 +1,208 @@
|
|
|
1
|
-
import * as i0 from
|
|
2
|
-
import {
|
|
3
|
-
import { NG_VALUE_ACCESSOR } from
|
|
4
|
-
import { IonRange } from
|
|
5
|
-
import { forwardAttributes } from
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, forwardRef } from "@angular/core";
|
|
3
|
+
import { NG_VALUE_ACCESSOR } from "@angular/forms";
|
|
4
|
+
import { IonRange } from "@ionic/angular";
|
|
5
|
+
import { forwardAttributes } from "@kirbydesign/designsystem/shared";
|
|
6
|
+
var RangeComponent = class RangeComponent {
|
|
7
|
+
set value(value) {
|
|
8
|
+
if (value !== this.currentValue) {
|
|
9
|
+
this.currentValue = value;
|
|
10
|
+
this.propagateChange(this.currentValue);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
get value() {
|
|
14
|
+
return this.currentValue;
|
|
15
|
+
}
|
|
16
|
+
constructor(cdr, element, renderer) {
|
|
17
|
+
this.cdr = cdr;
|
|
18
|
+
this.element = element;
|
|
19
|
+
this.renderer = renderer;
|
|
20
|
+
this.step = 1;
|
|
21
|
+
this.disabled = false;
|
|
22
|
+
this.pinFormatter = this.defaultPinFormatter;
|
|
23
|
+
this.change = new EventEmitter();
|
|
24
|
+
this.move = new EventEmitter();
|
|
25
|
+
this._attributesToForward = ["aria-label", "aria-labelledby"];
|
|
26
|
+
this.onTouched = () => {};
|
|
27
|
+
this.propagateChange = (_) => {};
|
|
28
|
+
}
|
|
29
|
+
ngOnInit() {
|
|
30
|
+
this.initializeMoveEventEmitter();
|
|
31
|
+
}
|
|
32
|
+
ngOnChanges() {
|
|
33
|
+
if (!this.ticks) return;
|
|
34
|
+
if ((this.max - this.min) / this.step > 9) this.step = (this.max - this.min) / 9;
|
|
35
|
+
this.value = this.getTicks().reduce((a, b) => {
|
|
36
|
+
return Math.abs(b - this.value) < Math.abs(a - this.value) ? b : a;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
ngAfterViewInit() {
|
|
40
|
+
forwardAttributes(this.element.nativeElement, this._attributesToForward, this.renderer, this.element.nativeElement.querySelector("ion-range"));
|
|
41
|
+
}
|
|
42
|
+
getTicks() {
|
|
43
|
+
const ticks = [];
|
|
44
|
+
for (let value = Number(this.min); value <= Number(this.max); value += Number(this.step)) ticks.push(value);
|
|
45
|
+
return ticks;
|
|
46
|
+
}
|
|
47
|
+
initializeMoveEventEmitter() {
|
|
48
|
+
if (this.move.observed) this.ionRange.ionInput.subscribe((rangeEvent) => {
|
|
49
|
+
this._onRangeKnobMove(rangeEvent);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
defaultPinFormatter(value) {
|
|
53
|
+
return value;
|
|
54
|
+
}
|
|
55
|
+
setDisabledState(isDisabled) {
|
|
56
|
+
this.disabled = isDisabled;
|
|
57
|
+
this.cdr.markForCheck();
|
|
58
|
+
}
|
|
59
|
+
_onRangeValueChange($event) {
|
|
60
|
+
this.writeValue($event.detail.value);
|
|
61
|
+
this.change.emit(this.currentValue);
|
|
62
|
+
}
|
|
63
|
+
_onRangeKnobMove($event) {
|
|
64
|
+
this.writeValue($event.detail.value);
|
|
65
|
+
this.move.emit(this.currentValue);
|
|
66
|
+
}
|
|
67
|
+
writeValue(value) {
|
|
68
|
+
if (value !== void 0) {
|
|
69
|
+
this.value = value;
|
|
70
|
+
this.cdr.markForCheck();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
registerOnTouched(fn) {
|
|
74
|
+
this.onTouched = fn;
|
|
75
|
+
}
|
|
76
|
+
registerOnChange(fn) {
|
|
77
|
+
this.propagateChange = fn;
|
|
78
|
+
}
|
|
79
|
+
static {
|
|
80
|
+
this.ɵfac = i0.ɵɵngDeclareFactory({
|
|
81
|
+
minVersion: "12.0.0",
|
|
82
|
+
version: "22.2.3",
|
|
83
|
+
ngImport: i0,
|
|
84
|
+
type: RangeComponent,
|
|
85
|
+
deps: [
|
|
86
|
+
{ token: i0.ChangeDetectorRef },
|
|
87
|
+
{ token: i0.ElementRef },
|
|
88
|
+
{ token: i0.Renderer2 }
|
|
89
|
+
],
|
|
90
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
static {
|
|
94
|
+
this.ɵcmp = i0.ɵɵngDeclareComponent({
|
|
95
|
+
minVersion: "17.0.0",
|
|
96
|
+
version: "22.2.3",
|
|
97
|
+
type: RangeComponent,
|
|
98
|
+
isStandalone: true,
|
|
99
|
+
selector: "kirby-range",
|
|
100
|
+
inputs: {
|
|
101
|
+
minLabel: "minLabel",
|
|
102
|
+
maxLabel: "maxLabel",
|
|
103
|
+
debounce: "debounce",
|
|
104
|
+
max: "max",
|
|
105
|
+
min: "min",
|
|
106
|
+
pin: "pin",
|
|
107
|
+
step: "step",
|
|
108
|
+
ticks: "ticks",
|
|
109
|
+
disabled: "disabled",
|
|
110
|
+
pinFormatter: "pinFormatter",
|
|
111
|
+
value: "value"
|
|
112
|
+
},
|
|
113
|
+
outputs: {
|
|
114
|
+
change: "change",
|
|
115
|
+
move: "move"
|
|
116
|
+
},
|
|
117
|
+
providers: [{
|
|
118
|
+
provide: NG_VALUE_ACCESSOR,
|
|
119
|
+
multi: true,
|
|
120
|
+
useExisting: forwardRef((() => RangeComponent))
|
|
121
|
+
}],
|
|
122
|
+
viewQueries: [{
|
|
123
|
+
propertyName: "ionRange",
|
|
124
|
+
first: true,
|
|
125
|
+
predicate: IonRange,
|
|
126
|
+
descendants: true,
|
|
127
|
+
static: true
|
|
128
|
+
}],
|
|
129
|
+
usesOnChanges: true,
|
|
130
|
+
ngImport: i0,
|
|
131
|
+
template: "<ion-range\n (ionChange)=\"_onRangeValueChange($event)\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [value]=\"value\"\n [pin]=\"pin\"\n [pinFormatter]=\"pinFormatter\"\n [snaps]=\"ticks\"\n [ticks]=\"ticks\"\n [debounce]=\"debounce\"\n [disabled]=\"disabled\"\n></ion-range>\n\n@if (minLabel) {\n <label class=\"min-label\">{{ minLabel }}</label>\n}\n@if (maxLabel) {\n <label class=\"max-label\">{{ maxLabel }}</label>\n}\n",
|
|
132
|
+
styles: [".kirby-line-clamp{display:-webkit-box;-webkit-line-clamp:var(--line-clamp, none);-webkit-box-orient:vertical;overflow:hidden}:host{display:flex;justify-content:space-between;flex-wrap:wrap}ion-range{--knob-background: var(--kirby-color-fill-brand-loud);--knob-box-shadow: 0 0 0 2px var(--kirby-color-fill-base);--knob-size: var(--kirby-spacing-s);--knob-handle-size: var(--kirby-size-fat-finger);--pin-color: var(--kirby-color-content-brand-loud);--pin-background: var(--kirby-color-fill-brand-loud);--bar-background: var(--kirby-color-border-base-quiet);--bar-background-active: var(--kirby-color-fill-brand-loud);--bar-border-radius: var(--kirby-spacing-xxxs);--bar-height: var(--kirby-spacing-xxxxs);flex:1 1 100%;padding:0}ion-range.range-disabled{opacity:var(--kirby-opacity-40)}ion-range.range-has-pin{padding:0 calc(var(--kirby-spacing-xxs) / 2)}ion-range::part(knob){transition:all 80ms linear 0ms;transition-property:background,transform}ion-range::part(knob hover){--knob-background: var(--kirby-color-fill-brand-loud-hover)}ion-range::part(knob activated),ion-range::part(knob pressed){--knob-background: var(--kirby-color-fill-brand-loud-active)}ion-range::part(knob hover),ion-range::part(knob activated),ion-range::part(knob pressed){transform:scale(1.25)}ion-range::part(knob focused){box-shadow:var(--kirby-focus-ring-md-outer)}ion-range::part(pin){font-size:var(--kirby-font-size-xs);color:var(--pin-color);background-color:var(--pin-background);padding:var(--kirby-spacing-xxxxs) var(--kirby-spacing-xxs);border-radius:var(--kirby-spacing-xxxs);min-width:var(--kirby-spacing-m);top:calc(-1 * var(--kirby-spacing-xxs))}ion-range::part(pin):before{content:\"\";position:absolute;top:100%;left:50%;transform:translate(-50%);display:block;border:solid transparent 6px;border-top-color:var(--pin-background)}ion-range::part(tick),ion-range::part(tick-active){border-radius:var(--kirby-border-radius-circle);width:var(--kirby-spacing-xxs);height:var(--kirby-spacing-xxs);margin-inline-start:calc(var(--kirby-spacing-xxs) / -2);z-index:1}ion-range::part(tick){background:var(--kirby-color-border-base-quiet)}label{font-size:var(--kirby-font-size-xs);line-height:var(--kirby-line-height-xs);color:var(--kirby-color-content-base-quiet);margin-top:calc(-1 * var(--kirby-spacing-xxxs))}\n"],
|
|
133
|
+
dependencies: [{
|
|
134
|
+
kind: "component",
|
|
135
|
+
type: IonRange,
|
|
136
|
+
selector: "ion-range",
|
|
137
|
+
inputs: [
|
|
138
|
+
"activeBarStart",
|
|
139
|
+
"color",
|
|
140
|
+
"debounce",
|
|
141
|
+
"disabled",
|
|
142
|
+
"dualKnobs",
|
|
143
|
+
"label",
|
|
144
|
+
"labelPlacement",
|
|
145
|
+
"max",
|
|
146
|
+
"min",
|
|
147
|
+
"mode",
|
|
148
|
+
"name",
|
|
149
|
+
"pin",
|
|
150
|
+
"pinFormatter",
|
|
151
|
+
"snaps",
|
|
152
|
+
"step",
|
|
153
|
+
"ticks",
|
|
154
|
+
"value"
|
|
155
|
+
]
|
|
156
|
+
}],
|
|
157
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
162
|
+
minVersion: "12.0.0",
|
|
163
|
+
version: "22.2.3",
|
|
164
|
+
ngImport: i0,
|
|
165
|
+
type: RangeComponent,
|
|
166
|
+
decorators: [{
|
|
167
|
+
type: Component,
|
|
168
|
+
args: [{
|
|
169
|
+
imports: [IonRange],
|
|
170
|
+
selector: "kirby-range",
|
|
171
|
+
providers: [{
|
|
172
|
+
provide: NG_VALUE_ACCESSOR,
|
|
173
|
+
multi: true,
|
|
174
|
+
useExisting: forwardRef((() => RangeComponent))
|
|
175
|
+
}],
|
|
176
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
177
|
+
template: "<ion-range\n (ionChange)=\"_onRangeValueChange($event)\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [value]=\"value\"\n [pin]=\"pin\"\n [pinFormatter]=\"pinFormatter\"\n [snaps]=\"ticks\"\n [ticks]=\"ticks\"\n [debounce]=\"debounce\"\n [disabled]=\"disabled\"\n></ion-range>\n\n@if (minLabel) {\n <label class=\"min-label\">{{ minLabel }}</label>\n}\n@if (maxLabel) {\n <label class=\"max-label\">{{ maxLabel }}</label>\n}\n",
|
|
178
|
+
styles: [".kirby-line-clamp{display:-webkit-box;-webkit-line-clamp:var(--line-clamp, none);-webkit-box-orient:vertical;overflow:hidden}:host{display:flex;justify-content:space-between;flex-wrap:wrap}ion-range{--knob-background: var(--kirby-color-fill-brand-loud);--knob-box-shadow: 0 0 0 2px var(--kirby-color-fill-base);--knob-size: var(--kirby-spacing-s);--knob-handle-size: var(--kirby-size-fat-finger);--pin-color: var(--kirby-color-content-brand-loud);--pin-background: var(--kirby-color-fill-brand-loud);--bar-background: var(--kirby-color-border-base-quiet);--bar-background-active: var(--kirby-color-fill-brand-loud);--bar-border-radius: var(--kirby-spacing-xxxs);--bar-height: var(--kirby-spacing-xxxxs);flex:1 1 100%;padding:0}ion-range.range-disabled{opacity:var(--kirby-opacity-40)}ion-range.range-has-pin{padding:0 calc(var(--kirby-spacing-xxs) / 2)}ion-range::part(knob){transition:all 80ms linear 0ms;transition-property:background,transform}ion-range::part(knob hover){--knob-background: var(--kirby-color-fill-brand-loud-hover)}ion-range::part(knob activated),ion-range::part(knob pressed){--knob-background: var(--kirby-color-fill-brand-loud-active)}ion-range::part(knob hover),ion-range::part(knob activated),ion-range::part(knob pressed){transform:scale(1.25)}ion-range::part(knob focused){box-shadow:var(--kirby-focus-ring-md-outer)}ion-range::part(pin){font-size:var(--kirby-font-size-xs);color:var(--pin-color);background-color:var(--pin-background);padding:var(--kirby-spacing-xxxxs) var(--kirby-spacing-xxs);border-radius:var(--kirby-spacing-xxxs);min-width:var(--kirby-spacing-m);top:calc(-1 * var(--kirby-spacing-xxs))}ion-range::part(pin):before{content:\"\";position:absolute;top:100%;left:50%;transform:translate(-50%);display:block;border:solid transparent 6px;border-top-color:var(--pin-background)}ion-range::part(tick),ion-range::part(tick-active){border-radius:var(--kirby-border-radius-circle);width:var(--kirby-spacing-xxs);height:var(--kirby-spacing-xxs);margin-inline-start:calc(var(--kirby-spacing-xxs) / -2);z-index:1}ion-range::part(tick){background:var(--kirby-color-border-base-quiet)}label{font-size:var(--kirby-font-size-xs);line-height:var(--kirby-line-height-xs);color:var(--kirby-color-content-base-quiet);margin-top:calc(-1 * var(--kirby-spacing-xxxs))}\n"]
|
|
179
|
+
}]
|
|
180
|
+
}],
|
|
181
|
+
ctorParameters: () => [
|
|
182
|
+
{ type: i0.ChangeDetectorRef },
|
|
183
|
+
{ type: i0.ElementRef },
|
|
184
|
+
{ type: i0.Renderer2 }
|
|
185
|
+
],
|
|
186
|
+
propDecorators: {
|
|
187
|
+
minLabel: [{ type: Input }],
|
|
188
|
+
maxLabel: [{ type: Input }],
|
|
189
|
+
debounce: [{ type: Input }],
|
|
190
|
+
max: [{ type: Input }],
|
|
191
|
+
min: [{ type: Input }],
|
|
192
|
+
pin: [{ type: Input }],
|
|
193
|
+
step: [{ type: Input }],
|
|
194
|
+
ticks: [{ type: Input }],
|
|
195
|
+
disabled: [{ type: Input }],
|
|
196
|
+
pinFormatter: [{ type: Input }],
|
|
197
|
+
value: [{ type: Input }],
|
|
198
|
+
change: [{ type: Output }],
|
|
199
|
+
move: [{ type: Output }],
|
|
200
|
+
ionRange: [{
|
|
201
|
+
type: ViewChild,
|
|
202
|
+
args: [IonRange, { static: true }]
|
|
203
|
+
}]
|
|
204
|
+
}
|
|
205
|
+
});
|
|
150
206
|
export { RangeComponent };
|
|
151
|
-
|
|
207
|
+
|
|
208
|
+
//# sourceMappingURL=kirbydesign-designsystem-range.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kirbydesign-designsystem-range.mjs","sources":["../../range/src/range.component.ts","../../range/src/range.component.html"
|
|
1
|
+
{"version":3,"file":"kirbydesign-designsystem-range.mjs","names":[],"sources":["../../range/src/range.component.ts","../../range/src/range.component.html"],"sourcesContent":["import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnChanges,\n OnInit,\n Output,\n Renderer2,\n ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { IonRange } from '@ionic/angular';\nimport { forwardAttributes } from '@kirbydesign/designsystem/shared';\n\n@Component({\n imports: [IonRange],\n selector: 'kirby-range',\n templateUrl: './range.component.html',\n styleUrls: ['./range.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => RangeComponent),\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RangeComponent implements OnChanges, OnInit, ControlValueAccessor, AfterViewInit {\n @Input() minLabel: string;\n @Input() maxLabel: string;\n @Input() debounce: number;\n @Input() max: number;\n @Input() min: number;\n @Input() pin: boolean;\n @Input() step = 1;\n @Input() ticks: boolean;\n @Input() disabled = false;\n @Input() pinFormatter: (value: number) => string | number = this.defaultPinFormatter;\n @Input()\n set value(value: number) {\n if (value !== this.currentValue) {\n this.currentValue = value;\n this.propagateChange(this.currentValue);\n }\n }\n\n get value(): number {\n return this.currentValue;\n }\n\n @Output() change: EventEmitter<number> = new EventEmitter<number>();\n @Output() move: EventEmitter<number> = new EventEmitter<number>();\n\n @ViewChild(IonRange, { static: true }) private ionRange: IonRange;\n\n private currentValue: number;\n private _attributesToForward = ['aria-label', 'aria-labelledby'];\n\n constructor(\n private cdr: ChangeDetectorRef,\n private element: ElementRef<HTMLElement>,\n private renderer: Renderer2\n ) {}\n\n ngOnInit() {\n this.initializeMoveEventEmitter();\n }\n\n ngOnChanges() {\n if (!this.ticks) return;\n\n /*\n * Max 10 ticks are allowed\n */\n const amountOfTicks = (this.max - this.min) / this.step;\n if (amountOfTicks > 9) {\n this.step = (this.max - this.min) / 9;\n }\n\n /*\n * Set value to the nearest tick\n */\n this.value = this.getTicks().reduce((a, b) => {\n return Math.abs(b - this.value) < Math.abs(a - this.value) ? b : a;\n });\n }\n\n ngAfterViewInit(): void {\n forwardAttributes(\n this.element.nativeElement,\n this._attributesToForward,\n this.renderer,\n this.element.nativeElement.querySelector('ion-range')\n );\n }\n\n private getTicks() {\n const ticks = [];\n for (let value = Number(this.min); value <= Number(this.max); value += Number(this.step)) {\n ticks.push(value);\n }\n return ticks;\n }\n\n private initializeMoveEventEmitter() {\n // We subscribe to ionRange's ionInput imperatively instead of in markup\n // to avoid doing work when no-one is listening to the move event.\n if (this.move.observed) {\n this.ionRange.ionInput.subscribe((rangeEvent) => {\n this._onRangeKnobMove(rangeEvent);\n });\n }\n }\n\n private defaultPinFormatter(value: number): number {\n return value;\n }\n\n public setDisabledState?(isDisabled: boolean): void {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n\n public _onRangeValueChange($event: any): void {\n this.writeValue($event.detail.value);\n this.change.emit(this.currentValue);\n }\n\n public _onRangeKnobMove($event: any): void {\n this.writeValue($event.detail.value);\n this.move.emit(this.currentValue);\n }\n\n public onTouched = () => {};\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public propagateChange = (_: any) => {};\n\n public writeValue(value: any): void {\n if (value !== undefined) {\n this.value = value;\n this.cdr.markForCheck();\n }\n }\n\n public registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n public registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n}\n","<ion-range\n (ionChange)=\"_onRangeValueChange($event)\"\n [min]=\"min\"\n [max]=\"max\"\n [step]=\"step\"\n [value]=\"value\"\n [pin]=\"pin\"\n [pinFormatter]=\"pinFormatter\"\n [snaps]=\"ticks\"\n [ticks]=\"ticks\"\n [debounce]=\"debounce\"\n [disabled]=\"disabled\"\n></ion-range>\n\n@if (minLabel) {\n <label class=\"min-label\">{{ minLabel }}</label>\n}\n@if (maxLabel) {\n <label class=\"max-label\">{{ maxLabel }}</label>\n}\n"],"mappings":"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"}
|