@agorapulse/ui-components 21.1.16 → 22.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/agorapulse-ui-components-22.0.1.tgz +0 -0
  2. package/fesm2022/agorapulse-ui-components-action-dropdown.mjs +26 -16
  3. package/fesm2022/agorapulse-ui-components-action-dropdown.mjs.map +1 -1
  4. package/fesm2022/agorapulse-ui-components-add-comment.mjs +3 -3
  5. package/fesm2022/agorapulse-ui-components-add-comment.mjs.map +1 -1
  6. package/fesm2022/agorapulse-ui-components-autocomplete.mjs +11 -7
  7. package/fesm2022/agorapulse-ui-components-autocomplete.mjs.map +1 -1
  8. package/fesm2022/agorapulse-ui-components-avatar-group.mjs +17 -10
  9. package/fesm2022/agorapulse-ui-components-avatar-group.mjs.map +1 -1
  10. package/fesm2022/agorapulse-ui-components-avatar.mjs +33 -18
  11. package/fesm2022/agorapulse-ui-components-avatar.mjs.map +1 -1
  12. package/fesm2022/agorapulse-ui-components-badge.mjs +3 -3
  13. package/fesm2022/agorapulse-ui-components-badge.mjs.map +1 -1
  14. package/fesm2022/agorapulse-ui-components-button.mjs +17 -10
  15. package/fesm2022/agorapulse-ui-components-button.mjs.map +1 -1
  16. package/fesm2022/agorapulse-ui-components-checkbox.mjs +3 -3
  17. package/fesm2022/agorapulse-ui-components-checkbox.mjs.map +1 -1
  18. package/fesm2022/agorapulse-ui-components-close-button.mjs +9 -6
  19. package/fesm2022/agorapulse-ui-components-close-button.mjs.map +1 -1
  20. package/fesm2022/agorapulse-ui-components-confirm-modal.mjs +3 -3
  21. package/fesm2022/agorapulse-ui-components-confirm-modal.mjs.map +1 -1
  22. package/fesm2022/agorapulse-ui-components-counter.mjs +11 -7
  23. package/fesm2022/agorapulse-ui-components-counter.mjs.map +1 -1
  24. package/fesm2022/agorapulse-ui-components-datepicker.mjs +106 -53
  25. package/fesm2022/agorapulse-ui-components-datepicker.mjs.map +1 -1
  26. package/fesm2022/agorapulse-ui-components-directives.mjs +28 -26
  27. package/fesm2022/agorapulse-ui-components-directives.mjs.map +1 -1
  28. package/fesm2022/agorapulse-ui-components-dot-stepper.mjs +3 -3
  29. package/fesm2022/agorapulse-ui-components-dot-stepper.mjs.map +1 -1
  30. package/fesm2022/agorapulse-ui-components-dropdown-base.mjs +7 -5
  31. package/fesm2022/agorapulse-ui-components-dropdown-base.mjs.map +1 -1
  32. package/fesm2022/agorapulse-ui-components-filter-chips-list.mjs +28 -17
  33. package/fesm2022/agorapulse-ui-components-filter-chips-list.mjs.map +1 -1
  34. package/fesm2022/agorapulse-ui-components-filter-dropdown.mjs +174 -99
  35. package/fesm2022/agorapulse-ui-components-filter-dropdown.mjs.map +1 -1
  36. package/fesm2022/agorapulse-ui-components-form-field.mjs +3 -3
  37. package/fesm2022/agorapulse-ui-components-form-field.mjs.map +1 -1
  38. package/fesm2022/agorapulse-ui-components-form-message.mjs +7 -5
  39. package/fesm2022/agorapulse-ui-components-form-message.mjs.map +1 -1
  40. package/fesm2022/agorapulse-ui-components-icon-button.mjs +5 -4
  41. package/fesm2022/agorapulse-ui-components-icon-button.mjs.map +1 -1
  42. package/fesm2022/agorapulse-ui-components-infobox.mjs +5 -4
  43. package/fesm2022/agorapulse-ui-components-infobox.mjs.map +1 -1
  44. package/fesm2022/agorapulse-ui-components-input-group.mjs +6 -6
  45. package/fesm2022/agorapulse-ui-components-input-group.mjs.map +1 -1
  46. package/fesm2022/agorapulse-ui-components-input-search.mjs +16 -10
  47. package/fesm2022/agorapulse-ui-components-input-search.mjs.map +1 -1
  48. package/fesm2022/agorapulse-ui-components-input.mjs +3 -3
  49. package/fesm2022/agorapulse-ui-components-input.mjs.map +1 -1
  50. package/fesm2022/agorapulse-ui-components-labels-selector.mjs +7 -5
  51. package/fesm2022/agorapulse-ui-components-labels-selector.mjs.map +1 -1
  52. package/fesm2022/agorapulse-ui-components-labels.mjs +6 -6
  53. package/fesm2022/agorapulse-ui-components-labels.mjs.map +1 -1
  54. package/fesm2022/agorapulse-ui-components-legacy-input.mjs +6 -5
  55. package/fesm2022/agorapulse-ui-components-legacy-input.mjs.map +1 -1
  56. package/fesm2022/agorapulse-ui-components-legacy-select.mjs +33 -17
  57. package/fesm2022/agorapulse-ui-components-legacy-select.mjs.map +1 -1
  58. package/fesm2022/agorapulse-ui-components-legacy-textarea.mjs +6 -5
  59. package/fesm2022/agorapulse-ui-components-legacy-textarea.mjs.map +1 -1
  60. package/fesm2022/agorapulse-ui-components-media-display-overlay.mjs +3 -3
  61. package/fesm2022/agorapulse-ui-components-media-display-overlay.mjs.map +1 -1
  62. package/fesm2022/agorapulse-ui-components-modal.mjs +3 -3
  63. package/fesm2022/agorapulse-ui-components-modal.mjs.map +1 -1
  64. package/fesm2022/agorapulse-ui-components-nav-selector.mjs +241 -146
  65. package/fesm2022/agorapulse-ui-components-nav-selector.mjs.map +1 -1
  66. package/fesm2022/agorapulse-ui-components-neo-datepicker.mjs +6 -6
  67. package/fesm2022/agorapulse-ui-components-neo-datepicker.mjs.map +1 -1
  68. package/fesm2022/agorapulse-ui-components-notification.mjs +3 -3
  69. package/fesm2022/agorapulse-ui-components-notification.mjs.map +1 -1
  70. package/fesm2022/agorapulse-ui-components-paginator.mjs +6 -6
  71. package/fesm2022/agorapulse-ui-components-paginator.mjs.map +1 -1
  72. package/fesm2022/agorapulse-ui-components-password-input.mjs +7 -5
  73. package/fesm2022/agorapulse-ui-components-password-input.mjs.map +1 -1
  74. package/fesm2022/agorapulse-ui-components-phone-number-input.mjs +8 -6
  75. package/fesm2022/agorapulse-ui-components-phone-number-input.mjs.map +1 -1
  76. package/fesm2022/agorapulse-ui-components-popmenu.mjs +19 -16
  77. package/fesm2022/agorapulse-ui-components-popmenu.mjs.map +1 -1
  78. package/fesm2022/agorapulse-ui-components-radio-button-card.mjs +47 -25
  79. package/fesm2022/agorapulse-ui-components-radio-button-card.mjs.map +1 -1
  80. package/fesm2022/agorapulse-ui-components-radio.mjs +6 -6
  81. package/fesm2022/agorapulse-ui-components-radio.mjs.map +1 -1
  82. package/fesm2022/agorapulse-ui-components-range-slider.mjs +8 -6
  83. package/fesm2022/agorapulse-ui-components-range-slider.mjs.map +1 -1
  84. package/fesm2022/agorapulse-ui-components-segmented-control.mjs +15 -9
  85. package/fesm2022/agorapulse-ui-components-segmented-control.mjs.map +1 -1
  86. package/fesm2022/agorapulse-ui-components-select.mjs +129 -85
  87. package/fesm2022/agorapulse-ui-components-select.mjs.map +1 -1
  88. package/fesm2022/agorapulse-ui-components-selection-dropdown.mjs +60 -33
  89. package/fesm2022/agorapulse-ui-components-selection-dropdown.mjs.map +1 -1
  90. package/fesm2022/agorapulse-ui-components-slide-toggle.mjs +8 -6
  91. package/fesm2022/agorapulse-ui-components-slide-toggle.mjs.map +1 -1
  92. package/fesm2022/agorapulse-ui-components-snackbars-thread.mjs +10 -8
  93. package/fesm2022/agorapulse-ui-components-snackbars-thread.mjs.map +1 -1
  94. package/fesm2022/agorapulse-ui-components-social-button.mjs +7 -5
  95. package/fesm2022/agorapulse-ui-components-social-button.mjs.map +1 -1
  96. package/fesm2022/agorapulse-ui-components-split-button.mjs +21 -12
  97. package/fesm2022/agorapulse-ui-components-split-button.mjs.map +1 -1
  98. package/fesm2022/agorapulse-ui-components-status-card.mjs +3 -3
  99. package/fesm2022/agorapulse-ui-components-status-card.mjs.map +1 -1
  100. package/fesm2022/agorapulse-ui-components-status.mjs +3 -3
  101. package/fesm2022/agorapulse-ui-components-status.mjs.map +1 -1
  102. package/fesm2022/agorapulse-ui-components-stepper.mjs +3 -3
  103. package/fesm2022/agorapulse-ui-components-stepper.mjs.map +1 -1
  104. package/fesm2022/agorapulse-ui-components-tabs.mjs +36 -21
  105. package/fesm2022/agorapulse-ui-components-tabs.mjs.map +1 -1
  106. package/fesm2022/agorapulse-ui-components-tag.mjs +9 -6
  107. package/fesm2022/agorapulse-ui-components-tag.mjs.map +1 -1
  108. package/fesm2022/agorapulse-ui-components-text-measurement.mjs +3 -3
  109. package/fesm2022/agorapulse-ui-components-text-measurement.mjs.map +1 -1
  110. package/fesm2022/agorapulse-ui-components-textarea.mjs +3 -3
  111. package/fesm2022/agorapulse-ui-components-textarea.mjs.map +1 -1
  112. package/fesm2022/agorapulse-ui-components-toggle.mjs +3 -3
  113. package/fesm2022/agorapulse-ui-components-toggle.mjs.map +1 -1
  114. package/fesm2022/agorapulse-ui-components-tooltip.mjs +56 -34
  115. package/fesm2022/agorapulse-ui-components-tooltip.mjs.map +1 -1
  116. package/fesm2022/agorapulse-ui-components.mjs +4 -4
  117. package/fesm2022/agorapulse-ui-components.mjs.map +1 -1
  118. package/package.json +11 -11
  119. package/types/agorapulse-ui-components-datepicker.d.ts +5 -1
  120. package/types/agorapulse-ui-components-filter-dropdown.d.ts +1 -1
  121. package/types/agorapulse-ui-components-password-input.d.ts +1 -0
  122. package/types/agorapulse-ui-components-phone-number-input.d.ts +1 -0
  123. package/types/agorapulse-ui-components-popmenu.d.ts +3 -3
  124. package/types/agorapulse-ui-components-range-slider.d.ts +1 -0
  125. package/types/agorapulse-ui-components-select.d.ts +5 -3
  126. package/types/agorapulse-ui-components-slide-toggle.d.ts +1 -0
  127. package/agorapulse-ui-components-21.1.16.tgz +0 -0
@@ -91,10 +91,10 @@ class RadioControlRegistry {
91
91
  }
92
92
  return radioComponent.name === accessor.name;
93
93
  }
94
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: RadioControlRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
95
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: RadioControlRegistry, providedIn: 'root' });
94
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RadioControlRegistry, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
95
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RadioControlRegistry, providedIn: 'root' });
96
96
  }
97
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: RadioControlRegistry, decorators: [{
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RadioControlRegistry, decorators: [{
98
98
  type: Injectable,
99
99
  args: [{
100
100
  providedIn: 'root',
@@ -263,10 +263,10 @@ class RadioComponent {
263
263
  must match. Ex: <p-radioButton formControlName="food" name="food"></p-radioButton>
264
264
  `);
265
265
  }
266
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: RadioComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
267
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "21.2.16", type: RadioComponent, isStandalone: true, selector: "ap-radio", inputs: { ariaLabel: ["aria-label", "ariaLabel"], ariaLabelledby: ["aria-labelledby", "ariaLabelledby"], ariaDescribedby: ["aria-describedby", "ariaDescribedby"], disabled: ["disabled", "disabled", booleanAttribute], labelPosition: "labelPosition", radioId: "radioId", formControlName: "formControlName", value: "value", required: ["required", "required", booleanAttribute], name: "name" }, outputs: { onClick: "onClick", onFocus: "onFocus", onBlur: "onBlur" }, providers: [RADIO_VALUE_ACCESSOR], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true, static: true }, { propertyName: "labelElement", first: true, predicate: ["label"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"radio-button-container\"\n [class.required]=\"required\"\n [class.label-left]=\"labelPosition === 'left'\">\n <input\n #input\n type=\"radio\"\n tabindex=\"0\"\n [attr.id]=\"inputId\"\n [attr.name]=\"name + '-radio-' + radioIndex\"\n [attr.value]=\"value\"\n [attr.aria-checked]=\"checked\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n [attr.data-test]=\"hostDataTest ?? name\"\n [checked]=\"checked\"\n [required]=\"required\"\n [class.disabled]=\"disabled\"\n (change)=\"onChange($event)\"\n (blur)=\"onInputBlur($event)\"\n (focus)=\"onInputFocus($event)\" />\n <div\n class=\"radio-button\"\n [class.disabled]=\"disabled\"\n (click)=\"select($event)\"></div>\n <label\n [for]=\"inputId\"\n (click)=\"select($event)\">\n <ng-content />\n </label>\n</div>\n", styles: ["ap-radio .radio-button-container{display:flex;align-items:center;gap:var(--ref-spacing-xxs)}ap-radio .radio-button-container.label-left{flex-direction:row-reverse}ap-radio .radio-button-container input[type=radio]{transform:scale(0);position:absolute}ap-radio .radio-button-container input[type=radio]:checked~.radio-button{border-color:var(--ref-color-electric-blue-100);box-shadow:inset 0 0 0 3px var(--ref-color-white)}ap-radio .radio-button-container input[type=radio]:checked~.radio-button.disabled{background:var(--ref-color-grey-40);box-shadow:inset 0 0 0 3px var(--ref-color-grey-10)}ap-radio .radio-button-container input[type=radio]:checked:focus~.radio-button{border-color:var(--ref-color-electric-blue-100)}ap-radio .radio-button-container input[type=radio].disabled~.radio-button{pointer-events:none;cursor:default;box-shadow:inset 0 0 0 16px var(--ref-color-grey-10);border-color:var(--ref-color-grey-20)}ap-radio .radio-button-container input[type=radio].disabled~label{pointer-events:none;cursor:default;color:var(--ref-color-grey-60)}ap-radio .radio-button-container input[type=radio]:focus~.radio-button{outline:3px solid var(--ref-color-electric-blue-100);border-color:var(--ref-color-grey-80);outline-offset:1px}ap-radio .radio-button-container .radio-button{width:16px;height:16px;border-radius:100%;border:1px solid var(--ref-color-grey-60);background:var(--ref-color-electric-blue-100);box-shadow:inset 0 0 0 16px var(--ref-color-white);transition:box-shadow var(--comp-radio-transition-duration);flex-shrink:0}ap-radio .radio-button-container .radio-button:hover:not(.disabled){cursor:pointer;border-color:var(--ref-color-grey-80)}ap-radio .radio-button-container label{display:flex;align-items:center;font-family:var(--sys-text-style-body-font-family);font-size:var(--sys-text-style-body-size);font-weight:var(--sys-text-style-body-weight);line-height:var(--sys-text-style-body-line-height);color:var(--ref-color-grey-100)}ap-radio .radio-button-container label:empty{display:none}ap-radio .radio-button-container label.disabled{color:var(--ref-color-grey-60)}ap-radio .radio-button-container label:hover:not(.disabled){cursor:pointer}ap-radio.ng-invalid.ng-dirty .radio-button{border-color:var(--ref-color-red-100)}ap-radio.ng-invalid.ng-dirty .radio-button:hover{border-color:var(--ref-color-red-60)}ap-radio.ng-invalid.ng-dirty input[type=radio]:focus~.radio-button{border-color:var(--ref-color-red-60)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
266
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RadioComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
267
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "22.0.5", type: RadioComponent, isStandalone: true, selector: "ap-radio", inputs: { ariaLabel: ["aria-label", "ariaLabel"], ariaLabelledby: ["aria-labelledby", "ariaLabelledby"], ariaDescribedby: ["aria-describedby", "ariaDescribedby"], disabled: ["disabled", "disabled", booleanAttribute], labelPosition: "labelPosition", radioId: "radioId", formControlName: "formControlName", value: "value", required: ["required", "required", booleanAttribute], name: "name" }, outputs: { onClick: "onClick", onFocus: "onFocus", onBlur: "onBlur" }, providers: [RADIO_VALUE_ACCESSOR], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["input"], descendants: true, static: true }, { propertyName: "labelElement", first: true, predicate: ["label"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"radio-button-container\"\n [class.required]=\"required\"\n [class.label-left]=\"labelPosition === 'left'\">\n <input\n #input\n type=\"radio\"\n tabindex=\"0\"\n [attr.id]=\"inputId\"\n [attr.name]=\"name + '-radio-' + radioIndex\"\n [attr.value]=\"value\"\n [attr.aria-checked]=\"checked\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n [attr.data-test]=\"hostDataTest ?? name\"\n [checked]=\"checked\"\n [required]=\"required\"\n [class.disabled]=\"disabled\"\n (change)=\"onChange($event)\"\n (blur)=\"onInputBlur($event)\"\n (focus)=\"onInputFocus($event)\" />\n <div\n class=\"radio-button\"\n [class.disabled]=\"disabled\"\n (click)=\"select($event)\"></div>\n <label\n [for]=\"inputId\"\n (click)=\"select($event)\">\n <ng-content />\n </label>\n</div>\n", styles: ["ap-radio .radio-button-container{display:flex;align-items:center;gap:var(--ref-spacing-xxs)}ap-radio .radio-button-container.label-left{flex-direction:row-reverse}ap-radio .radio-button-container input[type=radio]{transform:scale(0);position:absolute}ap-radio .radio-button-container input[type=radio]:checked~.radio-button{border-color:var(--ref-color-electric-blue-100);box-shadow:inset 0 0 0 3px var(--ref-color-white)}ap-radio .radio-button-container input[type=radio]:checked~.radio-button.disabled{background:var(--ref-color-grey-40);box-shadow:inset 0 0 0 3px var(--ref-color-grey-10)}ap-radio .radio-button-container input[type=radio]:checked:focus~.radio-button{border-color:var(--ref-color-electric-blue-100)}ap-radio .radio-button-container input[type=radio].disabled~.radio-button{pointer-events:none;cursor:default;box-shadow:inset 0 0 0 16px var(--ref-color-grey-10);border-color:var(--ref-color-grey-20)}ap-radio .radio-button-container input[type=radio].disabled~label{pointer-events:none;cursor:default;color:var(--ref-color-grey-60)}ap-radio .radio-button-container input[type=radio]:focus~.radio-button{outline:3px solid var(--ref-color-electric-blue-100);border-color:var(--ref-color-grey-80);outline-offset:1px}ap-radio .radio-button-container .radio-button{width:16px;height:16px;border-radius:100%;border:1px solid var(--ref-color-grey-60);background:var(--ref-color-electric-blue-100);box-shadow:inset 0 0 0 16px var(--ref-color-white);transition:box-shadow var(--comp-radio-transition-duration);flex-shrink:0}ap-radio .radio-button-container .radio-button:hover:not(.disabled){cursor:pointer;border-color:var(--ref-color-grey-80)}ap-radio .radio-button-container label{display:flex;align-items:center;font-family:var(--sys-text-style-body-font-family);font-size:var(--sys-text-style-body-size);font-weight:var(--sys-text-style-body-weight);line-height:var(--sys-text-style-body-line-height);color:var(--ref-color-grey-100)}ap-radio .radio-button-container label:empty{display:none}ap-radio .radio-button-container label.disabled{color:var(--ref-color-grey-60)}ap-radio .radio-button-container label:hover:not(.disabled){cursor:pointer}ap-radio.ng-invalid.ng-dirty .radio-button{border-color:var(--ref-color-red-100)}ap-radio.ng-invalid.ng-dirty .radio-button:hover{border-color:var(--ref-color-red-60)}ap-radio.ng-invalid.ng-dirty input[type=radio]:focus~.radio-button{border-color:var(--ref-color-red-60)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
268
268
  }
269
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: RadioComponent, decorators: [{
269
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RadioComponent, decorators: [{
270
270
  type: Component,
271
271
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ap-radio', standalone: true, providers: [RADIO_VALUE_ACCESSOR], encapsulation: ViewEncapsulation.None, template: "<div\n class=\"radio-button-container\"\n [class.required]=\"required\"\n [class.label-left]=\"labelPosition === 'left'\">\n <input\n #input\n type=\"radio\"\n tabindex=\"0\"\n [attr.id]=\"inputId\"\n [attr.name]=\"name + '-radio-' + radioIndex\"\n [attr.value]=\"value\"\n [attr.aria-checked]=\"checked\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n [attr.data-test]=\"hostDataTest ?? name\"\n [checked]=\"checked\"\n [required]=\"required\"\n [class.disabled]=\"disabled\"\n (change)=\"onChange($event)\"\n (blur)=\"onInputBlur($event)\"\n (focus)=\"onInputFocus($event)\" />\n <div\n class=\"radio-button\"\n [class.disabled]=\"disabled\"\n (click)=\"select($event)\"></div>\n <label\n [for]=\"inputId\"\n (click)=\"select($event)\">\n <ng-content />\n </label>\n</div>\n", styles: ["ap-radio .radio-button-container{display:flex;align-items:center;gap:var(--ref-spacing-xxs)}ap-radio .radio-button-container.label-left{flex-direction:row-reverse}ap-radio .radio-button-container input[type=radio]{transform:scale(0);position:absolute}ap-radio .radio-button-container input[type=radio]:checked~.radio-button{border-color:var(--ref-color-electric-blue-100);box-shadow:inset 0 0 0 3px var(--ref-color-white)}ap-radio .radio-button-container input[type=radio]:checked~.radio-button.disabled{background:var(--ref-color-grey-40);box-shadow:inset 0 0 0 3px var(--ref-color-grey-10)}ap-radio .radio-button-container input[type=radio]:checked:focus~.radio-button{border-color:var(--ref-color-electric-blue-100)}ap-radio .radio-button-container input[type=radio].disabled~.radio-button{pointer-events:none;cursor:default;box-shadow:inset 0 0 0 16px var(--ref-color-grey-10);border-color:var(--ref-color-grey-20)}ap-radio .radio-button-container input[type=radio].disabled~label{pointer-events:none;cursor:default;color:var(--ref-color-grey-60)}ap-radio .radio-button-container input[type=radio]:focus~.radio-button{outline:3px solid var(--ref-color-electric-blue-100);border-color:var(--ref-color-grey-80);outline-offset:1px}ap-radio .radio-button-container .radio-button{width:16px;height:16px;border-radius:100%;border:1px solid var(--ref-color-grey-60);background:var(--ref-color-electric-blue-100);box-shadow:inset 0 0 0 16px var(--ref-color-white);transition:box-shadow var(--comp-radio-transition-duration);flex-shrink:0}ap-radio .radio-button-container .radio-button:hover:not(.disabled){cursor:pointer;border-color:var(--ref-color-grey-80)}ap-radio .radio-button-container label{display:flex;align-items:center;font-family:var(--sys-text-style-body-font-family);font-size:var(--sys-text-style-body-size);font-weight:var(--sys-text-style-body-weight);line-height:var(--sys-text-style-body-line-height);color:var(--ref-color-grey-100)}ap-radio .radio-button-container label:empty{display:none}ap-radio .radio-button-container label.disabled{color:var(--ref-color-grey-60)}ap-radio .radio-button-container label:hover:not(.disabled){cursor:pointer}ap-radio.ng-invalid.ng-dirty .radio-button{border-color:var(--ref-color-red-100)}ap-radio.ng-invalid.ng-dirty .radio-button:hover{border-color:var(--ref-color-red-60)}ap-radio.ng-invalid.ng-dirty input[type=radio]:focus~.radio-button{border-color:var(--ref-color-red-60)}\n"] }]
272
272
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { inputElement: [{
@@ -1 +1 @@
1
- {"version":3,"file":"agorapulse-ui-components-radio.mjs","sources":["../../../libs/ui-components/radio/src/radio.component.ts","../../../libs/ui-components/radio/src/radio.component.html","../../../libs/ui-components/radio/src/agorapulse-ui-components-radio.ts"],"sourcesContent":["import {\n AfterContentInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n Injectable,\n Injector,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Provider,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';\nimport { filter, fromEvent, Subject, takeUntil } from 'rxjs';\n\nexport const RADIO_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioComponent),\n multi: true,\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RadioControlRegistry {\n private accessors: [NgControl, RadioComponent][] = [];\n\n add(control: NgControl, accessor: RadioComponent) {\n this.accessors.push([control, accessor]);\n }\n\n remove(accessor: RadioComponent) {\n this.accessors = this.accessors.filter(([, radioComponent]) => {\n return radioComponent !== accessor;\n });\n }\n\n select(accessor: RadioComponent) {\n this.accessors.forEach(([ngControl, radioComponent]) => {\n if (this.isSameGroup(ngControl, radioComponent, accessor) && radioComponent !== accessor) {\n radioComponent.writeValue(accessor.value);\n }\n });\n }\n\n getIndex(accessor: RadioComponent): number {\n return this.accessors.findIndex(([, radioComponent]) => {\n return radioComponent === accessor;\n });\n }\n\n getNextRadio(accessor: RadioComponent): RadioComponent | null {\n const index = this.getIndex(accessor);\n const nextIndex = index + 1;\n if (nextIndex >= this.accessors.length) {\n return this.accessors[0][1];\n }\n const nextRadio = this.accessors[nextIndex];\n return nextRadio ? nextRadio[1] : null;\n }\n\n getPreviousRadio(accessor: RadioComponent): RadioComponent | null {\n const index = this.getIndex(accessor);\n if (index === 0) {\n return this.accessors[this.accessors.length - 1][1];\n }\n const previousIndex = index - 1;\n const previousRadio = this.accessors[previousIndex];\n return previousRadio ? previousRadio[1] : null;\n }\n\n blurAllGroup(accessor: RadioComponent): void {\n this.accessors.forEach(([, radioComponent]) => {\n if (this.isSameGroup(accessor.control, radioComponent, accessor)) {\n radioComponent.inputElement.nativeElement.blur();\n }\n });\n }\n\n setNegativeTabIndexToAllExcept(accessor: RadioComponent): void {\n this.accessors.forEach(([, radioComponent]) => {\n if (this.isSameGroup(accessor.control, radioComponent, accessor)) {\n if (accessor.radioId !== radioComponent.radioId) {\n radioComponent.inputElement.nativeElement.tabIndex = -1;\n } else {\n radioComponent.inputElement.nativeElement.tabIndex = 0;\n }\n }\n });\n }\n\n focusPrevious(accessor: RadioComponent): void {\n const previousRadio = this.getPreviousRadio(accessor);\n if (previousRadio) {\n previousRadio.inputElement.nativeElement.focus();\n }\n }\n\n focusNext(accessor: RadioComponent): void {\n const nextRadio = this.getNextRadio(accessor);\n if (nextRadio) {\n nextRadio.inputElement.nativeElement.focus();\n }\n }\n\n getFirstCheckedRadio(): RadioComponent | null {\n const checkedRadio = this.accessors.find(([, radioComponent]) => {\n return radioComponent.checked;\n });\n return checkedRadio ? checkedRadio[1] : null;\n }\n\n private isSameGroup(ngControl: NgControl, radioComponent: RadioComponent, accessor: RadioComponent): boolean {\n if (!ngControl.control) {\n return false;\n }\n return radioComponent.name === accessor.name;\n }\n}\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'ap-radio',\n styleUrls: ['./radio.component.scss'],\n standalone: true,\n providers: [RADIO_VALUE_ACCESSOR],\n templateUrl: './radio.component.html',\n encapsulation: ViewEncapsulation.None,\n})\nexport class RadioComponent implements ControlValueAccessor, AfterContentInit, OnChanges, OnInit, OnDestroy {\n public readonly injector: Injector = inject(Injector);\n private readonly changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n private readonly radioControlRegistry: RadioControlRegistry = inject(RadioControlRegistry);\n private readonly ngZone: NgZone = inject(NgZone);\n\n @ViewChild('input', { static: true }) inputElement!: ElementRef<HTMLInputElement>;\n @ViewChild('label', { static: true }) labelElement!: ElementRef<HTMLInputElement>;\n @Input('aria-label') ariaLabel = '';\n @Input('aria-labelledby') ariaLabelledby: string | null = null;\n @Input('aria-describedby') ariaDescribedby = '';\n @Input({\n transform: booleanAttribute,\n })\n set disabled(disabled: boolean) {\n this._disabled = disabled;\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n @Input() labelPosition: 'left' | 'right' = 'right';\n @Input({\n required: true,\n })\n radioId = '';\n @Input() formControlName!: string;\n @Input({\n required: true,\n })\n value: unknown;\n @Input({\n transform: booleanAttribute,\n })\n required = false;\n @Input() name = '';\n\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onClick: EventEmitter<{\n originalEvent: Event;\n value: unknown;\n }> = new EventEmitter();\n\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onFocus: EventEmitter<FocusEvent> = new EventEmitter();\n\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onBlur: EventEmitter<FocusEvent> = new EventEmitter();\n\n inputId = '';\n _disabled = false;\n hasLabel = false;\n hostDataTest: string | undefined;\n control!: NgControl;\n checked = false;\n focused = false;\n radioIndex = 0;\n private readonly destroy$: Subject<void> = new Subject<void>();\n\n public onModelChange: (value: unknown) => void = () => {\n // ignore\n };\n\n public onModelTouched: () => void = () => {\n // ignore\n };\n\n constructor(private elementRef: ElementRef) {\n this.hostDataTest = elementRef.nativeElement.getAttribute('data-test');\n\n this.ngZone.runOutsideAngular(() => {\n fromEvent(window, 'keydown')\n .pipe(\n filter((event): event is KeyboardEvent => 'key' in event),\n takeUntil(this.destroy$)\n )\n .subscribe((event: KeyboardEvent) => {\n // Handle keydown event\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n this.ngZone.run(() => {\n if (this.focused) {\n event.stopImmediatePropagation();\n this.radioControlRegistry.blurAllGroup(this);\n this.radioControlRegistry.focusNext(this);\n }\n });\n break;\n case 'ArrowUp':\n case 'ArrowLeft':\n this.ngZone.run(() => {\n if (this.focused) {\n event.stopImmediatePropagation();\n this.radioControlRegistry.blurAllGroup(this);\n this.radioControlRegistry.focusPrevious(this);\n }\n });\n break;\n default:\n return;\n }\n });\n });\n }\n\n ngOnChanges(): void {\n if (this.labelElement) {\n this.hasLabel = !!this.labelElement.nativeElement.textContent?.trim();\n }\n }\n\n ngOnInit() {\n this.control = this.injector.get(NgControl);\n this.checkName();\n this.radioControlRegistry.add(this.control, this);\n this.radioIndex = this.radioControlRegistry.getIndex(this);\n this.inputId = `${this.radioId}-${this.radioIndex}`;\n }\n\n ngAfterContentInit(): void {\n if (this.labelElement) {\n this.hasLabel = !!this.labelElement.nativeElement.textContent?.trim();\n }\n }\n\n ngOnDestroy() {\n this.radioControlRegistry.remove(this);\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n handleClick(event: MouseEvent, radioButton: HTMLInputElement) {\n event.preventDefault();\n\n if (this.disabled) {\n return;\n }\n this.select(event);\n radioButton.focus();\n }\n\n select(event: Event) {\n if (!this.disabled && !this.checked) {\n this.inputElement.nativeElement.checked = true;\n this.checked = true;\n this.onModelChange(this.value);\n this.radioControlRegistry.select(this);\n this.onClick.emit({ originalEvent: event, value: this.value });\n }\n }\n\n writeValue(value: unknown): void {\n this.checked = value == this.value;\n\n if (this.inputElement?.nativeElement) {\n this.inputElement.nativeElement.checked = this.checked;\n }\n\n this.changeDetectorRef.markForCheck();\n }\n\n registerOnChange(fn: () => void): void {\n this.onModelChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onModelTouched = fn;\n }\n\n onInputFocus(event: FocusEvent) {\n this.focused = true;\n if (!this.disabled && !this.checked) {\n this.radioControlRegistry.setNegativeTabIndexToAllExcept(this);\n this.inputElement.nativeElement.checked = true;\n this.checked = true;\n this.onModelChange(this.value);\n this.onFocus.emit(event);\n }\n }\n\n onInputBlur(event: FocusEvent) {\n this.focused = false;\n this.onModelTouched();\n this.onBlur.emit(event);\n }\n\n onChange(event: Event) {\n this.select(event);\n }\n\n private checkName() {\n if (this.name && this.formControlName && this.name !== this.formControlName) {\n this.throwNameError();\n }\n if (!this.name && this.formControlName) {\n this.name = this.formControlName;\n }\n }\n\n private throwNameError() {\n throw new Error(`\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: <p-radioButton formControlName=\"food\" name=\"food\"></p-radioButton>\n `);\n }\n}\n","<div\n class=\"radio-button-container\"\n [class.required]=\"required\"\n [class.label-left]=\"labelPosition === 'left'\">\n <input\n #input\n type=\"radio\"\n tabindex=\"0\"\n [attr.id]=\"inputId\"\n [attr.name]=\"name + '-radio-' + radioIndex\"\n [attr.value]=\"value\"\n [attr.aria-checked]=\"checked\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n [attr.data-test]=\"hostDataTest ?? name\"\n [checked]=\"checked\"\n [required]=\"required\"\n [class.disabled]=\"disabled\"\n (change)=\"onChange($event)\"\n (blur)=\"onInputBlur($event)\"\n (focus)=\"onInputFocus($event)\" />\n <div\n class=\"radio-button\"\n [class.disabled]=\"disabled\"\n (click)=\"select($event)\"></div>\n <label\n [for]=\"inputId\"\n (click)=\"select($event)\">\n <ng-content />\n </label>\n</div>\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":"agorapulse-ui-components-radio.mjs","sources":["../../../libs/ui-components/radio/src/radio.component.ts","../../../libs/ui-components/radio/src/radio.component.html","../../../libs/ui-components/radio/src/agorapulse-ui-components-radio.ts"],"sourcesContent":["import {\n AfterContentInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n Injectable,\n Injector,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Provider,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';\nimport { filter, fromEvent, Subject, takeUntil } from 'rxjs';\n\nexport const RADIO_VALUE_ACCESSOR: Provider = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RadioComponent),\n multi: true,\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class RadioControlRegistry {\n private accessors: [NgControl, RadioComponent][] = [];\n\n add(control: NgControl, accessor: RadioComponent) {\n this.accessors.push([control, accessor]);\n }\n\n remove(accessor: RadioComponent) {\n this.accessors = this.accessors.filter(([, radioComponent]) => {\n return radioComponent !== accessor;\n });\n }\n\n select(accessor: RadioComponent) {\n this.accessors.forEach(([ngControl, radioComponent]) => {\n if (this.isSameGroup(ngControl, radioComponent, accessor) && radioComponent !== accessor) {\n radioComponent.writeValue(accessor.value);\n }\n });\n }\n\n getIndex(accessor: RadioComponent): number {\n return this.accessors.findIndex(([, radioComponent]) => {\n return radioComponent === accessor;\n });\n }\n\n getNextRadio(accessor: RadioComponent): RadioComponent | null {\n const index = this.getIndex(accessor);\n const nextIndex = index + 1;\n if (nextIndex >= this.accessors.length) {\n return this.accessors[0][1];\n }\n const nextRadio = this.accessors[nextIndex];\n return nextRadio ? nextRadio[1] : null;\n }\n\n getPreviousRadio(accessor: RadioComponent): RadioComponent | null {\n const index = this.getIndex(accessor);\n if (index === 0) {\n return this.accessors[this.accessors.length - 1][1];\n }\n const previousIndex = index - 1;\n const previousRadio = this.accessors[previousIndex];\n return previousRadio ? previousRadio[1] : null;\n }\n\n blurAllGroup(accessor: RadioComponent): void {\n this.accessors.forEach(([, radioComponent]) => {\n if (this.isSameGroup(accessor.control, radioComponent, accessor)) {\n radioComponent.inputElement.nativeElement.blur();\n }\n });\n }\n\n setNegativeTabIndexToAllExcept(accessor: RadioComponent): void {\n this.accessors.forEach(([, radioComponent]) => {\n if (this.isSameGroup(accessor.control, radioComponent, accessor)) {\n if (accessor.radioId !== radioComponent.radioId) {\n radioComponent.inputElement.nativeElement.tabIndex = -1;\n } else {\n radioComponent.inputElement.nativeElement.tabIndex = 0;\n }\n }\n });\n }\n\n focusPrevious(accessor: RadioComponent): void {\n const previousRadio = this.getPreviousRadio(accessor);\n if (previousRadio) {\n previousRadio.inputElement.nativeElement.focus();\n }\n }\n\n focusNext(accessor: RadioComponent): void {\n const nextRadio = this.getNextRadio(accessor);\n if (nextRadio) {\n nextRadio.inputElement.nativeElement.focus();\n }\n }\n\n getFirstCheckedRadio(): RadioComponent | null {\n const checkedRadio = this.accessors.find(([, radioComponent]) => {\n return radioComponent.checked;\n });\n return checkedRadio ? checkedRadio[1] : null;\n }\n\n private isSameGroup(ngControl: NgControl, radioComponent: RadioComponent, accessor: RadioComponent): boolean {\n if (!ngControl.control) {\n return false;\n }\n return radioComponent.name === accessor.name;\n }\n}\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'ap-radio',\n styleUrls: ['./radio.component.scss'],\n standalone: true,\n providers: [RADIO_VALUE_ACCESSOR],\n templateUrl: './radio.component.html',\n encapsulation: ViewEncapsulation.None,\n})\nexport class RadioComponent implements ControlValueAccessor, AfterContentInit, OnChanges, OnInit, OnDestroy {\n public readonly injector: Injector = inject(Injector);\n private readonly changeDetectorRef: ChangeDetectorRef = inject(ChangeDetectorRef);\n private readonly radioControlRegistry: RadioControlRegistry = inject(RadioControlRegistry);\n private readonly ngZone: NgZone = inject(NgZone);\n\n @ViewChild('input', { static: true }) inputElement!: ElementRef<HTMLInputElement>;\n @ViewChild('label', { static: true }) labelElement!: ElementRef<HTMLInputElement>;\n @Input('aria-label') ariaLabel = '';\n @Input('aria-labelledby') ariaLabelledby: string | null = null;\n @Input('aria-describedby') ariaDescribedby = '';\n @Input({\n transform: booleanAttribute,\n })\n set disabled(disabled: boolean) {\n this._disabled = disabled;\n }\n\n get disabled(): boolean {\n return this._disabled;\n }\n @Input() labelPosition: 'left' | 'right' = 'right';\n @Input({\n required: true,\n })\n radioId = '';\n @Input() formControlName!: string;\n @Input({\n required: true,\n })\n value: unknown;\n @Input({\n transform: booleanAttribute,\n })\n required = false;\n @Input() name = '';\n\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onClick: EventEmitter<{\n originalEvent: Event;\n value: unknown;\n }> = new EventEmitter();\n\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onFocus: EventEmitter<FocusEvent> = new EventEmitter();\n\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onBlur: EventEmitter<FocusEvent> = new EventEmitter();\n\n inputId = '';\n _disabled = false;\n hasLabel = false;\n hostDataTest: string | undefined;\n control!: NgControl;\n checked = false;\n focused = false;\n radioIndex = 0;\n private readonly destroy$: Subject<void> = new Subject<void>();\n\n public onModelChange: (value: unknown) => void = () => {\n // ignore\n };\n\n public onModelTouched: () => void = () => {\n // ignore\n };\n\n constructor(private elementRef: ElementRef) {\n this.hostDataTest = elementRef.nativeElement.getAttribute('data-test');\n\n this.ngZone.runOutsideAngular(() => {\n fromEvent(window, 'keydown')\n .pipe(\n filter((event): event is KeyboardEvent => 'key' in event),\n takeUntil(this.destroy$)\n )\n .subscribe((event: KeyboardEvent) => {\n // Handle keydown event\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n this.ngZone.run(() => {\n if (this.focused) {\n event.stopImmediatePropagation();\n this.radioControlRegistry.blurAllGroup(this);\n this.radioControlRegistry.focusNext(this);\n }\n });\n break;\n case 'ArrowUp':\n case 'ArrowLeft':\n this.ngZone.run(() => {\n if (this.focused) {\n event.stopImmediatePropagation();\n this.radioControlRegistry.blurAllGroup(this);\n this.radioControlRegistry.focusPrevious(this);\n }\n });\n break;\n default:\n return;\n }\n });\n });\n }\n\n ngOnChanges(): void {\n if (this.labelElement) {\n this.hasLabel = !!this.labelElement.nativeElement.textContent?.trim();\n }\n }\n\n ngOnInit() {\n this.control = this.injector.get(NgControl);\n this.checkName();\n this.radioControlRegistry.add(this.control, this);\n this.radioIndex = this.radioControlRegistry.getIndex(this);\n this.inputId = `${this.radioId}-${this.radioIndex}`;\n }\n\n ngAfterContentInit(): void {\n if (this.labelElement) {\n this.hasLabel = !!this.labelElement.nativeElement.textContent?.trim();\n }\n }\n\n ngOnDestroy() {\n this.radioControlRegistry.remove(this);\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n handleClick(event: MouseEvent, radioButton: HTMLInputElement) {\n event.preventDefault();\n\n if (this.disabled) {\n return;\n }\n this.select(event);\n radioButton.focus();\n }\n\n select(event: Event) {\n if (!this.disabled && !this.checked) {\n this.inputElement.nativeElement.checked = true;\n this.checked = true;\n this.onModelChange(this.value);\n this.radioControlRegistry.select(this);\n this.onClick.emit({ originalEvent: event, value: this.value });\n }\n }\n\n writeValue(value: unknown): void {\n this.checked = value == this.value;\n\n if (this.inputElement?.nativeElement) {\n this.inputElement.nativeElement.checked = this.checked;\n }\n\n this.changeDetectorRef.markForCheck();\n }\n\n registerOnChange(fn: () => void): void {\n this.onModelChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onModelTouched = fn;\n }\n\n onInputFocus(event: FocusEvent) {\n this.focused = true;\n if (!this.disabled && !this.checked) {\n this.radioControlRegistry.setNegativeTabIndexToAllExcept(this);\n this.inputElement.nativeElement.checked = true;\n this.checked = true;\n this.onModelChange(this.value);\n this.onFocus.emit(event);\n }\n }\n\n onInputBlur(event: FocusEvent) {\n this.focused = false;\n this.onModelTouched();\n this.onBlur.emit(event);\n }\n\n onChange(event: Event) {\n this.select(event);\n }\n\n private checkName() {\n if (this.name && this.formControlName && this.name !== this.formControlName) {\n this.throwNameError();\n }\n if (!this.name && this.formControlName) {\n this.name = this.formControlName;\n }\n }\n\n private throwNameError() {\n throw new Error(`\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: <p-radioButton formControlName=\"food\" name=\"food\"></p-radioButton>\n `);\n }\n}\n","<div\n class=\"radio-button-container\"\n [class.required]=\"required\"\n [class.label-left]=\"labelPosition === 'left'\">\n <input\n #input\n type=\"radio\"\n tabindex=\"0\"\n [attr.id]=\"inputId\"\n [attr.name]=\"name + '-radio-' + radioIndex\"\n [attr.value]=\"value\"\n [attr.aria-checked]=\"checked\"\n [attr.aria-label]=\"ariaLabel || null\"\n [attr.aria-labelledby]=\"ariaLabelledby\"\n [attr.aria-describedby]=\"ariaDescribedby\"\n [attr.data-test]=\"hostDataTest ?? name\"\n [checked]=\"checked\"\n [required]=\"required\"\n [class.disabled]=\"disabled\"\n (change)=\"onChange($event)\"\n (blur)=\"onInputBlur($event)\"\n (focus)=\"onInputFocus($event)\" />\n <div\n class=\"radio-button\"\n [class.disabled]=\"disabled\"\n (click)=\"select($event)\"></div>\n <label\n [for]=\"inputId\"\n (click)=\"select($event)\">\n <ng-content />\n </label>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { forwardRef, Input, Component } from '@angular/core';
2
+ import { inject, ChangeDetectorRef, forwardRef, Input, ChangeDetectionStrategy, Component } from '@angular/core';
3
3
  import * as i1 from '@angular/forms';
4
4
  import { Validators, ReactiveFormsModule, NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
5
5
  import * as i2 from '@angular/material/slider';
@@ -22,6 +22,7 @@ class RangeSliderComponent {
22
22
  return this.maxFormControl.getRawValue();
23
23
  }
24
24
  rangeSliderFormGroup;
25
+ cdr = inject(ChangeDetectorRef);
25
26
  constructor(fb) {
26
27
  this.fb = fb;
27
28
  const minimumValidator = (control) => {
@@ -106,6 +107,7 @@ class RangeSliderComponent {
106
107
  writeValue(inputRange) {
107
108
  this.minFormControl.setValue(inputRange.min);
108
109
  this.maxFormControl.setValue(inputRange.max);
110
+ this.cdr.markForCheck();
109
111
  }
110
112
  change() {
111
113
  if (this.propagateChange) {
@@ -119,8 +121,8 @@ class RangeSliderComponent {
119
121
  validate() {
120
122
  return this.rangeSliderFormGroup.errors;
121
123
  }
122
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: RangeSliderComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
123
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.16", type: RangeSliderComponent, isStandalone: true, selector: "ap-range-slider", inputs: { min: "min", max: "max" }, providers: [
124
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RangeSliderComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
125
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.5", type: RangeSliderComponent, isStandalone: true, selector: "ap-range-slider", inputs: { min: "min", max: "max" }, providers: [
124
126
  {
125
127
  provide: NG_VALUE_ACCESSOR,
126
128
  useExisting: forwardRef(() => RangeSliderComponent),
@@ -131,11 +133,11 @@ class RangeSliderComponent {
131
133
  useExisting: forwardRef(() => RangeSliderComponent),
132
134
  multi: true,
133
135
  },
134
- ], ngImport: i0, template: "<div\n class=\"slider-wrapper\"\n [formGroup]=\"rangeSliderFormGroup\">\n <div class=\"number\">\n <span>{{ min }}</span>\n </div>\n <mat-slider\n class=\"slider\"\n [min]=\"minimum\"\n [max]=\"maximum\">\n <input\n matSliderStartThumb\n formControlName=\"min\"\n (change)=\"change()\" />\n <input\n matSliderEndThumb\n formControlName=\"max\"\n (change)=\"change()\" />\n </mat-slider>\n <div class=\"number\">\n <span>{{ max > maximum ? max + '+' : max }}</span>\n </div>\n</div>\n", styles: [":host{width:100%;height:52px}:host .slider-wrapper{display:flex;justify-content:space-between;align-items:center;gap:var(--ref-spacing-xxs)}:host .slider-wrapper .slider{flex-grow:2}:host .slider-wrapper .slider .mat-slider-thumb{background-color:var(--ref-color-electric-blue-100)}:host .slider-wrapper .number{flex-shrink:0;display:flex;justify-content:center;align-items:center;width:46px;height:36px;border:1px solid var(--ref-color-grey-20);border-radius:3px}::ng-deep .slider-wrapper .mat-mdc-slider .mdc-slider__thumb--focused .mdc-slider__thumb-knob{background-color:var(--ref-color-white);border:3px solid var(--ref-color-electric-blue-100)}::ng-deep .slider-wrapper .mat-mdc-slider .mdc-slider__thumb-knob{background-color:var(--ref-color-white);border:3px solid var(--ref-color-electric-blue-100);width:var(--ref-spacing-md);height:var(--ref-spacing-md)}::ng-deep .slider-wrapper .mat-mdc-slider .mdc-slider__track--active_fill{border-color:var(--ref-color-electric-blue-150)}::ng-deep .slider-wrapper .mat-mdc-slider .mdc-slider__track--active{height:var(--ref-spacing-xxxs)}::ng-deep .slider-wrapper .mat-mdc-slider .mdc-slider__track--inactive{background-color:var(--ref-color-grey-20)}\n"], dependencies: [{ kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: i2.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i2.MatSliderRangeThumb, selector: "input[matSliderStartThumb], input[matSliderEndThumb]", exportAs: ["matSliderRangeThumb"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
136
+ ], ngImport: i0, template: "<div\n class=\"slider-wrapper\"\n [formGroup]=\"rangeSliderFormGroup\">\n <div class=\"number\">\n <span>{{ min }}</span>\n </div>\n <mat-slider\n class=\"slider\"\n [min]=\"minimum\"\n [max]=\"maximum\">\n <input\n matSliderStartThumb\n formControlName=\"min\"\n (change)=\"change()\" />\n <input\n matSliderEndThumb\n formControlName=\"max\"\n (change)=\"change()\" />\n </mat-slider>\n <div class=\"number\">\n <span>{{ max > maximum ? max + '+' : max }}</span>\n </div>\n</div>\n", styles: [":host{width:100%;height:52px}:host .slider-wrapper{display:flex;justify-content:space-between;align-items:center;gap:var(--ref-spacing-xxs)}:host .slider-wrapper .slider{flex-grow:2}:host .slider-wrapper .slider .mat-slider-thumb{background-color:var(--ref-color-electric-blue-100)}:host .slider-wrapper .number{flex-shrink:0;display:flex;justify-content:center;align-items:center;width:46px;height:36px;border:1px solid var(--ref-color-grey-20);border-radius:3px}::ng-deep .slider-wrapper .mat-mdc-slider .mdc-slider__thumb--focused .mdc-slider__thumb-knob{background-color:var(--ref-color-white);border:3px solid var(--ref-color-electric-blue-100)}::ng-deep .slider-wrapper .mat-mdc-slider .mdc-slider__thumb-knob{background-color:var(--ref-color-white);border:3px solid var(--ref-color-electric-blue-100);width:var(--ref-spacing-md);height:var(--ref-spacing-md)}::ng-deep .slider-wrapper .mat-mdc-slider .mdc-slider__track--active_fill{border-color:var(--ref-color-electric-blue-150)}::ng-deep .slider-wrapper .mat-mdc-slider .mdc-slider__track--active{height:var(--ref-spacing-xxxs)}::ng-deep .slider-wrapper .mat-mdc-slider .mdc-slider__track--inactive{background-color:var(--ref-color-grey-20)}\n"], dependencies: [{ kind: "ngmodule", type: MatSliderModule }, { kind: "component", type: i2.MatSlider, selector: "mat-slider", inputs: ["disabled", "discrete", "showTickMarks", "min", "color", "disableRipple", "max", "step", "displayWith"], exportAs: ["matSlider"] }, { kind: "directive", type: i2.MatSliderRangeThumb, selector: "input[matSliderStartThumb], input[matSliderEndThumb]", exportAs: ["matSliderRangeThumb"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
135
137
  }
136
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: RangeSliderComponent, decorators: [{
138
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: RangeSliderComponent, decorators: [{
137
139
  type: Component,
138
- args: [{ selector: 'ap-range-slider', imports: [MatSliderModule, ReactiveFormsModule], providers: [
140
+ args: [{ selector: 'ap-range-slider', imports: [MatSliderModule, ReactiveFormsModule], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
139
141
  {
140
142
  provide: NG_VALUE_ACCESSOR,
141
143
  useExisting: forwardRef(() => RangeSliderComponent),
@@ -1 +1 @@
1
- {"version":3,"file":"agorapulse-ui-components-range-slider.mjs","sources":["../../../libs/ui-components/range-slider/src/range-slider.component.ts","../../../libs/ui-components/range-slider/src/range-slider.component.html","../../../libs/ui-components/range-slider/src/agorapulse-ui-components-range-slider.ts"],"sourcesContent":["import { Component, forwardRef, Input } from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormGroup,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validator,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { MatSliderModule } from '@angular/material/slider';\n\nexport type RangeSlider = { min: number; max: number };\ntype RangeFormValue = {\n minimum: number;\n maximum: number;\n min: number;\n max: number;\n};\n\n@Component({\n selector: 'ap-range-slider',\n templateUrl: './range-slider.component.html',\n styleUrls: ['./range-slider.component.scss'],\n imports: [MatSliderModule, ReactiveFormsModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RangeSliderComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => RangeSliderComponent),\n multi: true,\n },\n ],\n})\nexport class RangeSliderComponent implements ControlValueAccessor, Validator {\n @Input()\n set min(min: number) {\n this.minimumFormControl.setValue(min);\n this.change();\n }\n\n get min(): number {\n return this.minFormControl.getRawValue();\n }\n\n @Input()\n set max(max: number) {\n this.maximumFormControl.setValue(max);\n this.change();\n }\n\n get max(): number {\n return this.maxFormControl.getRawValue();\n }\n\n rangeSliderFormGroup: FormGroup<{\n maximum: FormControl<number>;\n minimum: FormControl<number>;\n min: FormControl<number | undefined>;\n max: FormControl<number | undefined>;\n }>;\n\n constructor(private fb: FormBuilder) {\n const minimumValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n let errors: ValidationErrors | null = null;\n const rangeFormValue = control.getRawValue() as RangeFormValue;\n if (rangeFormValue.min && rangeFormValue.minimum && rangeFormValue.min < rangeFormValue.minimum) {\n errors = {\n minimumError: {\n expectedMin: rangeFormValue.minimum,\n currentMin: rangeFormValue.min,\n },\n };\n }\n return errors;\n };\n\n const minimumRequiredValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n let errors: ValidationErrors | null = null;\n const rangeFormValue = control.getRawValue() as RangeFormValue;\n if (rangeFormValue.min == undefined) {\n errors = {\n minimumRequired: true,\n };\n }\n return errors;\n };\n\n const maximumValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n let errors: ValidationErrors | null = null;\n const rangeFormValue = control.getRawValue() as RangeFormValue;\n if (rangeFormValue.max && rangeFormValue.maximum && rangeFormValue.max > rangeFormValue.maximum) {\n errors = {\n maximumError: {\n expectedMax: rangeFormValue.maximum,\n currentMax: rangeFormValue.max,\n },\n };\n }\n return errors;\n };\n\n const maximumRequiredValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n let errors: ValidationErrors | null = null;\n const rangeFormValue = control.getRawValue() as RangeFormValue;\n if (rangeFormValue.max == undefined) {\n errors = {\n maximumRequired: true,\n };\n }\n return errors;\n };\n\n this.rangeSliderFormGroup = fb.group(\n {\n maximum: fb.control(0, { nonNullable: true }),\n minimum: fb.control(100, { nonNullable: true }),\n min: fb.control<number | undefined>(undefined, { nonNullable: true }),\n max: fb.control<number | undefined>(undefined, { nonNullable: true }),\n },\n { validators: Validators.compose([minimumRequiredValidator, maximumRequiredValidator, minimumValidator, maximumValidator]) }\n );\n }\n\n propagateChange: ((v: RangeSlider) => void) | null = null;\n\n propagateOnTouch: (() => void) | null = null;\n\n registerOnChange(fn: (v: RangeSlider) => void): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.propagateOnTouch = fn;\n }\n\n get minimum(): number {\n return this.minimumFormControl.getRawValue();\n }\n\n get maximum(): number {\n return this.maximumFormControl.getRawValue();\n }\n\n get minFormControl(): FormControl {\n return this.rangeSliderFormGroup.controls.min;\n }\n\n get minimumFormControl(): FormControl {\n return this.rangeSliderFormGroup.controls.minimum;\n }\n\n get maximumFormControl(): FormControl {\n return this.rangeSliderFormGroup.controls.maximum;\n }\n\n get maxFormControl(): FormControl {\n return this.rangeSliderFormGroup.controls.max;\n }\n\n writeValue(inputRange: RangeSlider): void {\n this.minFormControl.setValue(inputRange.min);\n this.maxFormControl.setValue(inputRange.max);\n }\n\n change(): void {\n if (this.propagateChange) {\n const formValue = this.rangeSliderFormGroup.getRawValue();\n this.propagateChange({\n min: formValue.min,\n max: formValue.max,\n } as RangeSlider);\n }\n }\n\n validate(): ValidationErrors | null {\n return this.rangeSliderFormGroup.errors;\n }\n}\n","<div\n class=\"slider-wrapper\"\n [formGroup]=\"rangeSliderFormGroup\">\n <div class=\"number\">\n <span>{{ min }}</span>\n </div>\n <mat-slider\n class=\"slider\"\n [min]=\"minimum\"\n [max]=\"maximum\">\n <input\n matSliderStartThumb\n formControlName=\"min\"\n (change)=\"change()\" />\n <input\n matSliderEndThumb\n formControlName=\"max\"\n (change)=\"change()\" />\n </mat-slider>\n <div class=\"number\">\n <span>{{ max > maximum ? max + '+' : max }}</span>\n </div>\n</div>\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":"agorapulse-ui-components-range-slider.mjs","sources":["../../../libs/ui-components/range-slider/src/range-slider.component.ts","../../../libs/ui-components/range-slider/src/range-slider.component.html","../../../libs/ui-components/range-slider/src/agorapulse-ui-components-range-slider.ts"],"sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, inject, Input } from '@angular/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n FormBuilder,\n FormControl,\n FormGroup,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n ValidationErrors,\n Validator,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport { MatSliderModule } from '@angular/material/slider';\n\nexport type RangeSlider = { min: number; max: number };\ntype RangeFormValue = {\n minimum: number;\n maximum: number;\n min: number;\n max: number;\n};\n\n@Component({\n selector: 'ap-range-slider',\n templateUrl: './range-slider.component.html',\n styleUrls: ['./range-slider.component.scss'],\n imports: [MatSliderModule, ReactiveFormsModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => RangeSliderComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => RangeSliderComponent),\n multi: true,\n },\n ],\n})\nexport class RangeSliderComponent implements ControlValueAccessor, Validator {\n @Input()\n set min(min: number) {\n this.minimumFormControl.setValue(min);\n this.change();\n }\n\n get min(): number {\n return this.minFormControl.getRawValue();\n }\n\n @Input()\n set max(max: number) {\n this.maximumFormControl.setValue(max);\n this.change();\n }\n\n get max(): number {\n return this.maxFormControl.getRawValue();\n }\n\n rangeSliderFormGroup: FormGroup<{\n maximum: FormControl<number>;\n minimum: FormControl<number>;\n min: FormControl<number | undefined>;\n max: FormControl<number | undefined>;\n }>;\n\n private readonly cdr = inject(ChangeDetectorRef);\n\n constructor(private fb: FormBuilder) {\n const minimumValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n let errors: ValidationErrors | null = null;\n const rangeFormValue = control.getRawValue() as RangeFormValue;\n if (rangeFormValue.min && rangeFormValue.minimum && rangeFormValue.min < rangeFormValue.minimum) {\n errors = {\n minimumError: {\n expectedMin: rangeFormValue.minimum,\n currentMin: rangeFormValue.min,\n },\n };\n }\n return errors;\n };\n\n const minimumRequiredValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n let errors: ValidationErrors | null = null;\n const rangeFormValue = control.getRawValue() as RangeFormValue;\n if (rangeFormValue.min == undefined) {\n errors = {\n minimumRequired: true,\n };\n }\n return errors;\n };\n\n const maximumValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n let errors: ValidationErrors | null = null;\n const rangeFormValue = control.getRawValue() as RangeFormValue;\n if (rangeFormValue.max && rangeFormValue.maximum && rangeFormValue.max > rangeFormValue.maximum) {\n errors = {\n maximumError: {\n expectedMax: rangeFormValue.maximum,\n currentMax: rangeFormValue.max,\n },\n };\n }\n return errors;\n };\n\n const maximumRequiredValidator: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {\n let errors: ValidationErrors | null = null;\n const rangeFormValue = control.getRawValue() as RangeFormValue;\n if (rangeFormValue.max == undefined) {\n errors = {\n maximumRequired: true,\n };\n }\n return errors;\n };\n\n this.rangeSliderFormGroup = fb.group(\n {\n maximum: fb.control(0, { nonNullable: true }),\n minimum: fb.control(100, { nonNullable: true }),\n min: fb.control<number | undefined>(undefined, { nonNullable: true }),\n max: fb.control<number | undefined>(undefined, { nonNullable: true }),\n },\n { validators: Validators.compose([minimumRequiredValidator, maximumRequiredValidator, minimumValidator, maximumValidator]) }\n );\n }\n\n propagateChange: ((v: RangeSlider) => void) | null = null;\n\n propagateOnTouch: (() => void) | null = null;\n\n registerOnChange(fn: (v: RangeSlider) => void): void {\n this.propagateChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.propagateOnTouch = fn;\n }\n\n get minimum(): number {\n return this.minimumFormControl.getRawValue();\n }\n\n get maximum(): number {\n return this.maximumFormControl.getRawValue();\n }\n\n get minFormControl(): FormControl {\n return this.rangeSliderFormGroup.controls.min;\n }\n\n get minimumFormControl(): FormControl {\n return this.rangeSliderFormGroup.controls.minimum;\n }\n\n get maximumFormControl(): FormControl {\n return this.rangeSliderFormGroup.controls.maximum;\n }\n\n get maxFormControl(): FormControl {\n return this.rangeSliderFormGroup.controls.max;\n }\n\n writeValue(inputRange: RangeSlider): void {\n this.minFormControl.setValue(inputRange.min);\n this.maxFormControl.setValue(inputRange.max);\n this.cdr.markForCheck();\n }\n\n change(): void {\n if (this.propagateChange) {\n const formValue = this.rangeSliderFormGroup.getRawValue();\n this.propagateChange({\n min: formValue.min,\n max: formValue.max,\n } as RangeSlider);\n }\n }\n\n validate(): ValidationErrors | null {\n return this.rangeSliderFormGroup.errors;\n }\n}\n","<div\n class=\"slider-wrapper\"\n [formGroup]=\"rangeSliderFormGroup\">\n <div class=\"number\">\n <span>{{ min }}</span>\n </div>\n <mat-slider\n class=\"slider\"\n [min]=\"minimum\"\n [max]=\"maximum\">\n <input\n matSliderStartThumb\n formControlName=\"min\"\n (change)=\"change()\" />\n <input\n matSliderEndThumb\n formControlName=\"max\"\n (change)=\"change()\" />\n </mat-slider>\n <div class=\"number\">\n <span>{{ max > maximum ? max + '+' : max }}</span>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -17,22 +17,28 @@ import { inject, input, model, effect, untracked, ViewEncapsulation, ChangeDetec
17
17
  */
18
18
  class SegmentedControlComponent {
19
19
  symbolRegistry = inject(SymbolRegistry);
20
- options = input.required(...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
20
+ options = input.required(/* @ts-ignore */
21
+ ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
21
22
  /** The currently selected value. Supports two-way binding via `[(value)]`. Defaults to the first option's value when unset. */
22
- value = model('', ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
23
+ value = model('', /* @ts-ignore */
24
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
23
25
  /** Disables the whole control. */
24
- disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
26
+ disabled = input(false, /* @ts-ignore */
27
+ ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
25
28
  /** When true, the control fills its container width and segments share it equally instead of fitting their text. */
26
- fullWidth = input(false, ...(ngDevMode ? [{ debugName: "fullWidth" }] : /* istanbul ignore next */ []));
29
+ fullWidth = input(false, /* @ts-ignore */
30
+ ...(ngDevMode ? [{ debugName: "fullWidth" }] : /* istanbul ignore next */ []));
27
31
  /** Accessible name for the group of segments. */
28
- ariaLabel = input('', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
32
+ ariaLabel = input('', /* @ts-ignore */
33
+ ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
29
34
  // Keep `value` defined: fall back to the first option whenever it is unset.
30
35
  defaultValueEffect = effect(() => {
31
36
  const [firstOption] = this.options();
32
37
  if (!this.value() && firstOption) {
33
38
  untracked(() => this.value.set(firstOption.value));
34
39
  }
35
- }, ...(ngDevMode ? [{ debugName: "defaultValueEffect" }] : /* istanbul ignore next */ []));
40
+ }, /* @ts-ignore */
41
+ ...(ngDevMode ? [{ debugName: "defaultValueEffect" }] : /* istanbul ignore next */ []));
36
42
  constructor() {
37
43
  this.symbolRegistry.withSymbols(...(inject(UI_COMPONENTS_SYMBOLS, { optional: true })?.flat() ?? []));
38
44
  }
@@ -42,10 +48,10 @@ class SegmentedControlComponent {
42
48
  }
43
49
  this.value.set(option.value);
44
50
  }
45
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: SegmentedControlComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
46
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.16", type: SegmentedControlComponent, isStandalone: true, selector: "ap-segmented-control", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "class.ap-segmented-control--full-width": "fullWidth()" } }, ngImport: i0, template: "<div\n class=\"ap-segmented-control\"\n role=\"group\"\n [attr.aria-label]=\"ariaLabel() || null\">\n @for (option of options(); track option.value) {\n <button\n type=\"button\"\n class=\"ap-segmented-control__segment\"\n [class.ap-segmented-control__segment--selected]=\"value() === option.value\"\n [attr.aria-pressed]=\"value() === option.value\"\n [disabled]=\"disabled() || (option.disabled ?? false)\"\n (click)=\"select(option)\">\n @if (option.symbolId) {\n <ap-symbol\n class=\"ap-segmented-control__icon\"\n [symbolId]=\"option.symbolId\"\n [size]=\"16\"\n [color]=\"value() === option.value ? 'blue' : 'grey-blue'\" />\n }\n <span class=\"ap-segmented-control__label\">{{ option.label }}</span>\n </button>\n }\n</div>\n", styles: ["ap-segmented-control{display:inline-block}ap-segmented-control.ap-segmented-control--full-width{display:block}ap-segmented-control.ap-segmented-control--full-width .ap-segmented-control{display:flex;width:100%}ap-segmented-control.ap-segmented-control--full-width .ap-segmented-control__segment{flex:1 1 0}.ap-segmented-control{display:inline-flex;align-items:center}.ap-segmented-control .ap-segmented-control__segment{display:inline-flex;align-items:center;justify-content:center;gap:var(--ref-spacing-xxs);box-sizing:border-box;min-height:36px;margin:0;padding:var(--ref-spacing-xxs) var(--ref-spacing-sm);border:1px solid var(--ref-color-grey-20);background-color:var(--ref-color-white);color:var(--ref-color-grey-100);font-family:var(--ref-font-family);font-size:var(--ref-font-size-sm);font-weight:var(--ref-font-weight-bold);line-height:var(--ref-font-line-height-md);white-space:nowrap;cursor:pointer;transition:color .15s ease,border-color .15s ease,background-color .15s ease}.ap-segmented-control .ap-segmented-control__segment:not(:first-child){margin-left:-1px}.ap-segmented-control .ap-segmented-control__segment:first-child{border-top-left-radius:var(--ref-border-radius-sm);border-bottom-left-radius:var(--ref-border-radius-sm)}.ap-segmented-control .ap-segmented-control__segment:last-child{border-top-right-radius:var(--ref-border-radius-sm);border-bottom-right-radius:var(--ref-border-radius-sm)}.ap-segmented-control .ap-segmented-control__segment:hover:not(:disabled){z-index:1;border-color:var(--ref-color-electric-blue-100)}.ap-segmented-control .ap-segmented-control__segment:focus-visible{z-index:2;outline:none;border-color:var(--ref-color-electric-blue-100);box-shadow:0 0 0 1px var(--ref-color-white),0 0 0 3px var(--ref-color-electric-blue-100)}.ap-segmented-control .ap-segmented-control__segment.ap-segmented-control__segment--selected{z-index:1;border-color:var(--ref-color-electric-blue-100);color:var(--ref-color-electric-blue-100)}.ap-segmented-control .ap-segmented-control__segment:disabled{border-color:var(--ref-color-grey-20);background-color:var(--ref-color-grey-05);color:var(--ref-color-grey-40);cursor:not-allowed}.ap-segmented-control .ap-segmented-control__label{font:inherit;min-width:0;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "component", type: SymbolComponent, selector: "ap-symbol", inputs: ["symbolId", "color", "size"], outputs: ["sizeChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
51
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SegmentedControlComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
52
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.5", type: SegmentedControlComponent, isStandalone: true, selector: "ap-segmented-control", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { properties: { "class.ap-segmented-control--full-width": "fullWidth()" } }, ngImport: i0, template: "<div\n class=\"ap-segmented-control\"\n role=\"group\"\n [attr.aria-label]=\"ariaLabel() || null\">\n @for (option of options(); track option.value) {\n <button\n type=\"button\"\n class=\"ap-segmented-control__segment\"\n [class.ap-segmented-control__segment--selected]=\"value() === option.value\"\n [attr.aria-pressed]=\"value() === option.value\"\n [disabled]=\"disabled() || (option.disabled ?? false)\"\n (click)=\"select(option)\">\n @if (option.symbolId) {\n <ap-symbol\n class=\"ap-segmented-control__icon\"\n [symbolId]=\"option.symbolId\"\n [size]=\"16\"\n [color]=\"value() === option.value ? 'blue' : 'grey-blue'\" />\n }\n <span class=\"ap-segmented-control__label\">{{ option.label }}</span>\n </button>\n }\n</div>\n", styles: ["ap-segmented-control{display:inline-block}ap-segmented-control.ap-segmented-control--full-width{display:block}ap-segmented-control.ap-segmented-control--full-width .ap-segmented-control{display:flex;width:100%}ap-segmented-control.ap-segmented-control--full-width .ap-segmented-control__segment{flex:1 1 0}.ap-segmented-control{display:inline-flex;align-items:center}.ap-segmented-control .ap-segmented-control__segment{display:inline-flex;align-items:center;justify-content:center;gap:var(--ref-spacing-xxs);box-sizing:border-box;min-height:36px;margin:0;padding:var(--ref-spacing-xxs) var(--ref-spacing-sm);border:1px solid var(--ref-color-grey-20);background-color:var(--ref-color-white);color:var(--ref-color-grey-100);font-family:var(--ref-font-family);font-size:var(--ref-font-size-sm);font-weight:var(--ref-font-weight-bold);line-height:var(--ref-font-line-height-md);white-space:nowrap;cursor:pointer;transition:color .15s ease,border-color .15s ease,background-color .15s ease}.ap-segmented-control .ap-segmented-control__segment:not(:first-child){margin-left:-1px}.ap-segmented-control .ap-segmented-control__segment:first-child{border-top-left-radius:var(--ref-border-radius-sm);border-bottom-left-radius:var(--ref-border-radius-sm)}.ap-segmented-control .ap-segmented-control__segment:last-child{border-top-right-radius:var(--ref-border-radius-sm);border-bottom-right-radius:var(--ref-border-radius-sm)}.ap-segmented-control .ap-segmented-control__segment:hover:not(:disabled){z-index:1;border-color:var(--ref-color-electric-blue-100)}.ap-segmented-control .ap-segmented-control__segment:focus-visible{z-index:2;outline:none;border-color:var(--ref-color-electric-blue-100);box-shadow:0 0 0 1px var(--ref-color-white),0 0 0 3px var(--ref-color-electric-blue-100)}.ap-segmented-control .ap-segmented-control__segment.ap-segmented-control__segment--selected{z-index:1;border-color:var(--ref-color-electric-blue-100);color:var(--ref-color-electric-blue-100)}.ap-segmented-control .ap-segmented-control__segment:disabled{border-color:var(--ref-color-grey-20);background-color:var(--ref-color-grey-05);color:var(--ref-color-grey-40);cursor:not-allowed}.ap-segmented-control .ap-segmented-control__label{font:inherit;min-width:0;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "component", type: SymbolComponent, selector: "ap-symbol", inputs: ["symbolId", "color", "size"], outputs: ["sizeChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
47
53
  }
48
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImport: i0, type: SegmentedControlComponent, decorators: [{
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: SegmentedControlComponent, decorators: [{
49
55
  type: Component,
50
56
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'ap-segmented-control', imports: [SymbolComponent], host: {
51
57
  '[class.ap-segmented-control--full-width]': 'fullWidth()',
@@ -1 +1 @@
1
- {"version":3,"file":"agorapulse-ui-components-segmented-control.mjs","sources":["../../../libs/ui-components/segmented-control/src/segmented-control.component.ts","../../../libs/ui-components/segmented-control/src/segmented-control.component.html","../../../libs/ui-components/segmented-control/src/agorapulse-ui-components-segmented-control.ts"],"sourcesContent":["import { UI_COMPONENTS_SYMBOLS } from '@agorapulse/ui-components/providers';\nimport { agorapulseSymbol, SymbolComponent, SymbolRegistry } from '@agorapulse/ui-symbol';\nimport { ChangeDetectionStrategy, Component, effect, inject, input, model, untracked, ViewEncapsulation } from '@angular/core';\n\nexport interface SegmentedControlOption {\n /** The value bound to the control when this option is selected. */\n value: string;\n /** The text shown on the segment. */\n label: string;\n /** Optional leading icon symbol id. */\n symbolId?: agorapulseSymbol;\n /** Disables this segment only. */\n disabled?: boolean;\n}\n\n/**\n * A single-select control for switching between a small set (2–4) of mutually\n * exclusive options laid out side by side.\n *\n * @example\n * ```html\n * <ap-segmented-control\n * [options]=\"[{ value: 'list', label: 'List' }, { value: 'board', label: 'Board' }]\"\n * [(value)]=\"view\"\n * ariaLabel=\"Choose a view\" />\n * ```\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'ap-segmented-control',\n templateUrl: './segmented-control.component.html',\n styleUrls: ['./segmented-control.component.scss'],\n imports: [SymbolComponent],\n host: {\n '[class.ap-segmented-control--full-width]': 'fullWidth()',\n },\n // Emit plain, global `.ap-segmented-control*` classes (no Angular scoping) so the\n // styling stays framework-agnostic and readable/reusable outside Angular.\n encapsulation: ViewEncapsulation.None,\n})\nexport class SegmentedControlComponent {\n private readonly symbolRegistry = inject(SymbolRegistry);\n\n readonly options = input.required<SegmentedControlOption[]>();\n /** The currently selected value. Supports two-way binding via `[(value)]`. Defaults to the first option's value when unset. */\n readonly value = model<string>('');\n /** Disables the whole control. */\n readonly disabled = input(false);\n /** When true, the control fills its container width and segments share it equally instead of fitting their text. */\n readonly fullWidth = input(false);\n /** Accessible name for the group of segments. */\n readonly ariaLabel = input('');\n\n // Keep `value` defined: fall back to the first option whenever it is unset.\n private readonly defaultValueEffect = effect(() => {\n const [firstOption] = this.options();\n if (!this.value() && firstOption) {\n untracked(() => this.value.set(firstOption.value));\n }\n });\n\n constructor() {\n this.symbolRegistry.withSymbols(...(inject(UI_COMPONENTS_SYMBOLS, { optional: true })?.flat() ?? []));\n }\n\n protected select(option: SegmentedControlOption): void {\n if (this.disabled() || option.disabled) {\n return;\n }\n this.value.set(option.value);\n }\n}\n","<div\n class=\"ap-segmented-control\"\n role=\"group\"\n [attr.aria-label]=\"ariaLabel() || null\">\n @for (option of options(); track option.value) {\n <button\n type=\"button\"\n class=\"ap-segmented-control__segment\"\n [class.ap-segmented-control__segment--selected]=\"value() === option.value\"\n [attr.aria-pressed]=\"value() === option.value\"\n [disabled]=\"disabled() || (option.disabled ?? false)\"\n (click)=\"select(option)\">\n @if (option.symbolId) {\n <ap-symbol\n class=\"ap-segmented-control__icon\"\n [symbolId]=\"option.symbolId\"\n [size]=\"16\"\n [color]=\"value() === option.value ? 'blue' : 'grey-blue'\" />\n }\n <span class=\"ap-segmented-control__label\">{{ option.label }}</span>\n </button>\n }\n</div>\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":"agorapulse-ui-components-segmented-control.mjs","sources":["../../../libs/ui-components/segmented-control/src/segmented-control.component.ts","../../../libs/ui-components/segmented-control/src/segmented-control.component.html","../../../libs/ui-components/segmented-control/src/agorapulse-ui-components-segmented-control.ts"],"sourcesContent":["import { UI_COMPONENTS_SYMBOLS } from '@agorapulse/ui-components/providers';\nimport { agorapulseSymbol, SymbolComponent, SymbolRegistry } from '@agorapulse/ui-symbol';\nimport { ChangeDetectionStrategy, Component, effect, inject, input, model, untracked, ViewEncapsulation } from '@angular/core';\n\nexport interface SegmentedControlOption {\n /** The value bound to the control when this option is selected. */\n value: string;\n /** The text shown on the segment. */\n label: string;\n /** Optional leading icon symbol id. */\n symbolId?: agorapulseSymbol;\n /** Disables this segment only. */\n disabled?: boolean;\n}\n\n/**\n * A single-select control for switching between a small set (2–4) of mutually\n * exclusive options laid out side by side.\n *\n * @example\n * ```html\n * <ap-segmented-control\n * [options]=\"[{ value: 'list', label: 'List' }, { value: 'board', label: 'Board' }]\"\n * [(value)]=\"view\"\n * ariaLabel=\"Choose a view\" />\n * ```\n */\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'ap-segmented-control',\n templateUrl: './segmented-control.component.html',\n styleUrls: ['./segmented-control.component.scss'],\n imports: [SymbolComponent],\n host: {\n '[class.ap-segmented-control--full-width]': 'fullWidth()',\n },\n // Emit plain, global `.ap-segmented-control*` classes (no Angular scoping) so the\n // styling stays framework-agnostic and readable/reusable outside Angular.\n encapsulation: ViewEncapsulation.None,\n})\nexport class SegmentedControlComponent {\n private readonly symbolRegistry = inject(SymbolRegistry);\n\n readonly options = input.required<SegmentedControlOption[]>();\n /** The currently selected value. Supports two-way binding via `[(value)]`. Defaults to the first option's value when unset. */\n readonly value = model<string>('');\n /** Disables the whole control. */\n readonly disabled = input(false);\n /** When true, the control fills its container width and segments share it equally instead of fitting their text. */\n readonly fullWidth = input(false);\n /** Accessible name for the group of segments. */\n readonly ariaLabel = input('');\n\n // Keep `value` defined: fall back to the first option whenever it is unset.\n private readonly defaultValueEffect = effect(() => {\n const [firstOption] = this.options();\n if (!this.value() && firstOption) {\n untracked(() => this.value.set(firstOption.value));\n }\n });\n\n constructor() {\n this.symbolRegistry.withSymbols(...(inject(UI_COMPONENTS_SYMBOLS, { optional: true })?.flat() ?? []));\n }\n\n protected select(option: SegmentedControlOption): void {\n if (this.disabled() || option.disabled) {\n return;\n }\n this.value.set(option.value);\n }\n}\n","<div\n class=\"ap-segmented-control\"\n role=\"group\"\n [attr.aria-label]=\"ariaLabel() || null\">\n @for (option of options(); track option.value) {\n <button\n type=\"button\"\n class=\"ap-segmented-control__segment\"\n [class.ap-segmented-control__segment--selected]=\"value() === option.value\"\n [attr.aria-pressed]=\"value() === option.value\"\n [disabled]=\"disabled() || (option.disabled ?? false)\"\n (click)=\"select(option)\">\n @if (option.symbolId) {\n <ap-symbol\n class=\"ap-segmented-control__icon\"\n [symbolId]=\"option.symbolId\"\n [size]=\"16\"\n [color]=\"value() === option.value ? 'blue' : 'grey-blue'\" />\n }\n <span class=\"ap-segmented-control__label\">{{ option.label }}</span>\n </button>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}