@neural-ui/core 1.5.14 → 1.6.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 (137) hide show
  1. package/fesm2022/neural-ui-core-accordion.mjs +13 -9
  2. package/fesm2022/neural-ui-core-accordion.mjs.map +1 -1
  3. package/fesm2022/neural-ui-core-alert.mjs +25 -14
  4. package/fesm2022/neural-ui-core-alert.mjs.map +1 -1
  5. package/fesm2022/neural-ui-core-autocomplete.mjs +53 -28
  6. package/fesm2022/neural-ui-core-autocomplete.mjs.map +1 -1
  7. package/fesm2022/neural-ui-core-avatar.mjs +23 -13
  8. package/fesm2022/neural-ui-core-avatar.mjs.map +1 -1
  9. package/fesm2022/neural-ui-core-badge.mjs +15 -9
  10. package/fesm2022/neural-ui-core-badge.mjs.map +1 -1
  11. package/fesm2022/neural-ui-core-block-ui.mjs +16 -11
  12. package/fesm2022/neural-ui-core-block-ui.mjs.map +1 -1
  13. package/fesm2022/neural-ui-core-breadcrumb.mjs +8 -6
  14. package/fesm2022/neural-ui-core-breadcrumb.mjs.map +1 -1
  15. package/fesm2022/neural-ui-core-button.mjs +29 -16
  16. package/fesm2022/neural-ui-core-button.mjs.map +1 -1
  17. package/fesm2022/neural-ui-core-calendar.mjs +75 -50
  18. package/fesm2022/neural-ui-core-calendar.mjs.map +1 -1
  19. package/fesm2022/neural-ui-core-card.mjs +13 -8
  20. package/fesm2022/neural-ui-core-card.mjs.map +1 -1
  21. package/fesm2022/neural-ui-core-chart.mjs +45 -24
  22. package/fesm2022/neural-ui-core-chart.mjs.map +1 -1
  23. package/fesm2022/neural-ui-core-checkbox.mjs +15 -9
  24. package/fesm2022/neural-ui-core-checkbox.mjs.map +1 -1
  25. package/fesm2022/neural-ui-core-chip.mjs +23 -13
  26. package/fesm2022/neural-ui-core-chip.mjs.map +1 -1
  27. package/fesm2022/neural-ui-core-code-block.mjs +32 -17
  28. package/fesm2022/neural-ui-core-code-block.mjs.map +1 -1
  29. package/fesm2022/neural-ui-core-color-picker.mjs +19 -11
  30. package/fesm2022/neural-ui-core-color-picker.mjs.map +1 -1
  31. package/fesm2022/neural-ui-core-command-palette.mjs +16 -11
  32. package/fesm2022/neural-ui-core-command-palette.mjs.map +1 -1
  33. package/fesm2022/neural-ui-core-confirm-dialog.mjs +6 -6
  34. package/fesm2022/neural-ui-core-context-menu.mjs +12 -9
  35. package/fesm2022/neural-ui-core-context-menu.mjs.map +1 -1
  36. package/fesm2022/neural-ui-core-dashboard-grid.mjs +11 -7
  37. package/fesm2022/neural-ui-core-dashboard-grid.mjs.map +1 -1
  38. package/fesm2022/neural-ui-core-date-input.mjs +111 -57
  39. package/fesm2022/neural-ui-core-date-input.mjs.map +1 -1
  40. package/fesm2022/neural-ui-core-divider.mjs +7 -5
  41. package/fesm2022/neural-ui-core-divider.mjs.map +1 -1
  42. package/fesm2022/neural-ui-core-empty-state.mjs +13 -8
  43. package/fesm2022/neural-ui-core-empty-state.mjs.map +1 -1
  44. package/fesm2022/neural-ui-core-filter-bar.mjs +19 -11
  45. package/fesm2022/neural-ui-core-filter-bar.mjs.map +1 -1
  46. package/fesm2022/neural-ui-core-icon.mjs +11 -7
  47. package/fesm2022/neural-ui-core-icon.mjs.map +1 -1
  48. package/fesm2022/neural-ui-core-image-gallery.mjs +23 -13
  49. package/fesm2022/neural-ui-core-image-gallery.mjs.map +1 -1
  50. package/fesm2022/neural-ui-core-image-viewer.mjs +22 -14
  51. package/fesm2022/neural-ui-core-image-viewer.mjs.map +1 -1
  52. package/fesm2022/neural-ui-core-input-otp.mjs +19 -11
  53. package/fesm2022/neural-ui-core-input-otp.mjs.map +1 -1
  54. package/fesm2022/neural-ui-core-input.mjs +67 -35
  55. package/fesm2022/neural-ui-core-input.mjs.map +1 -1
  56. package/fesm2022/neural-ui-core-kanban.mjs +17 -11
  57. package/fesm2022/neural-ui-core-kanban.mjs.map +1 -1
  58. package/fesm2022/neural-ui-core-knob.mjs +41 -22
  59. package/fesm2022/neural-ui-core-knob.mjs.map +1 -1
  60. package/fesm2022/neural-ui-core-meter-group.mjs +23 -13
  61. package/fesm2022/neural-ui-core-meter-group.mjs.map +1 -1
  62. package/fesm2022/neural-ui-core-modal.mjs +16 -11
  63. package/fesm2022/neural-ui-core-modal.mjs.map +1 -1
  64. package/fesm2022/neural-ui-core-multiselect.mjs +72 -39
  65. package/fesm2022/neural-ui-core-multiselect.mjs.map +1 -1
  66. package/fesm2022/neural-ui-core-nav.mjs +22 -13
  67. package/fesm2022/neural-ui-core-nav.mjs.map +1 -1
  68. package/fesm2022/neural-ui-core-notification-center.mjs +27 -10
  69. package/fesm2022/neural-ui-core-notification-center.mjs.map +1 -1
  70. package/fesm2022/neural-ui-core-number-input.mjs +35 -19
  71. package/fesm2022/neural-ui-core-number-input.mjs.map +1 -1
  72. package/fesm2022/neural-ui-core-pagination.mjs +15 -9
  73. package/fesm2022/neural-ui-core-pagination.mjs.map +1 -1
  74. package/fesm2022/neural-ui-core-popover.mjs +22 -14
  75. package/fesm2022/neural-ui-core-popover.mjs.map +1 -1
  76. package/fesm2022/neural-ui-core-progress-bar.mjs +19 -11
  77. package/fesm2022/neural-ui-core-progress-bar.mjs.map +1 -1
  78. package/fesm2022/neural-ui-core-radio.mjs +24 -15
  79. package/fesm2022/neural-ui-core-radio.mjs.map +1 -1
  80. package/fesm2022/neural-ui-core-rating.mjs +13 -8
  81. package/fesm2022/neural-ui-core-rating.mjs.map +1 -1
  82. package/fesm2022/neural-ui-core-rich-text-editor.mjs +773 -0
  83. package/fesm2022/neural-ui-core-rich-text-editor.mjs.map +1 -0
  84. package/fesm2022/neural-ui-core-scheduler-gantt.mjs +41 -22
  85. package/fesm2022/neural-ui-core-scheduler-gantt.mjs.map +1 -1
  86. package/fesm2022/neural-ui-core-select.mjs +77 -43
  87. package/fesm2022/neural-ui-core-select.mjs.map +1 -1
  88. package/fesm2022/neural-ui-core-sidebar.mjs +23 -14
  89. package/fesm2022/neural-ui-core-sidebar.mjs.map +1 -1
  90. package/fesm2022/neural-ui-core-skeleton.mjs +11 -7
  91. package/fesm2022/neural-ui-core-skeleton.mjs.map +1 -1
  92. package/fesm2022/neural-ui-core-slider.mjs +23 -13
  93. package/fesm2022/neural-ui-core-slider.mjs.map +1 -1
  94. package/fesm2022/neural-ui-core-spinner.mjs +17 -10
  95. package/fesm2022/neural-ui-core-spinner.mjs.map +1 -1
  96. package/fesm2022/neural-ui-core-split-button.mjs +27 -15
  97. package/fesm2022/neural-ui-core-split-button.mjs.map +1 -1
  98. package/fesm2022/neural-ui-core-splitter.mjs +9 -6
  99. package/fesm2022/neural-ui-core-splitter.mjs.map +1 -1
  100. package/fesm2022/neural-ui-core-stats-card.mjs +19 -11
  101. package/fesm2022/neural-ui-core-stats-card.mjs.map +1 -1
  102. package/fesm2022/neural-ui-core-stepper.mjs +13 -8
  103. package/fesm2022/neural-ui-core-stepper.mjs.map +1 -1
  104. package/fesm2022/neural-ui-core-switch.mjs +15 -9
  105. package/fesm2022/neural-ui-core-switch.mjs.map +1 -1
  106. package/fesm2022/neural-ui-core-table.mjs +242 -124
  107. package/fesm2022/neural-ui-core-table.mjs.map +1 -1
  108. package/fesm2022/neural-ui-core-tabs.mjs +30 -18
  109. package/fesm2022/neural-ui-core-tabs.mjs.map +1 -1
  110. package/fesm2022/neural-ui-core-textarea.mjs +43 -23
  111. package/fesm2022/neural-ui-core-textarea.mjs.map +1 -1
  112. package/fesm2022/neural-ui-core-timeline-grid.mjs +21 -12
  113. package/fesm2022/neural-ui-core-timeline-grid.mjs.map +1 -1
  114. package/fesm2022/neural-ui-core-timeline.mjs +5 -4
  115. package/fesm2022/neural-ui-core-timeline.mjs.map +1 -1
  116. package/fesm2022/neural-ui-core-toast.mjs +25 -9
  117. package/fesm2022/neural-ui-core-toast.mjs.map +1 -1
  118. package/fesm2022/neural-ui-core-toggle-button-group.mjs +17 -10
  119. package/fesm2022/neural-ui-core-toggle-button-group.mjs.map +1 -1
  120. package/fesm2022/neural-ui-core-toolbar.mjs +13 -8
  121. package/fesm2022/neural-ui-core-toolbar.mjs.map +1 -1
  122. package/fesm2022/neural-ui-core-tooltip.mjs +16 -11
  123. package/fesm2022/neural-ui-core-tooltip.mjs.map +1 -1
  124. package/fesm2022/neural-ui-core-tree-table.mjs +57 -30
  125. package/fesm2022/neural-ui-core-tree-table.mjs.map +1 -1
  126. package/fesm2022/neural-ui-core-tree.mjs +31 -17
  127. package/fesm2022/neural-ui-core-tree.mjs.map +1 -1
  128. package/fesm2022/neural-ui-core-uploader.mjs +91 -47
  129. package/fesm2022/neural-ui-core-uploader.mjs.map +1 -1
  130. package/fesm2022/neural-ui-core-url-state.mjs +7 -5
  131. package/fesm2022/neural-ui-core-url-state.mjs.map +1 -1
  132. package/fesm2022/neural-ui-core-virtual-list.mjs +32 -19
  133. package/fesm2022/neural-ui-core-virtual-list.mjs.map +1 -1
  134. package/package.json +5 -1
  135. package/types/neural-ui-core-notification-center.d.ts +2 -0
  136. package/types/neural-ui-core-rich-text-editor.d.ts +97 -0
  137. package/types/neural-ui-core-toast.d.ts +2 -0
@@ -14,15 +14,20 @@ import { input, output, signal, computed, ChangeDetectionStrategy, ViewEncapsula
14
14
  class NeuRatingComponent {
15
15
  Math = Math;
16
16
  /** Valor actual (1 a stars) / Current value (1 to stars) */
17
- value = input(0, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
17
+ value = input(0, /* @ts-ignore */
18
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
18
19
  /** Número de estrellas / Number of stars */
19
- stars = input(5, ...(ngDevMode ? [{ debugName: "stars" }] : /* istanbul ignore next */ []));
20
+ stars = input(5, /* @ts-ignore */
21
+ ...(ngDevMode ? [{ debugName: "stars" }] : /* istanbul ignore next */ []));
20
22
  /** Modo solo lectura / Read-only mode */
21
- readonly = input(false, ...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
23
+ readonly = input(false, /* @ts-ignore */
24
+ ...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
22
25
  /** Emite el nuevo valor al seleccionar / Emits the new value on selection */
23
26
  valueChange = output();
24
- hovered = signal(null, ...(ngDevMode ? [{ debugName: "hovered" }] : /* istanbul ignore next */ []));
25
- starsArray = computed(() => Array.from({ length: this.stars() }, (_, i) => i + 1), ...(ngDevMode ? [{ debugName: "starsArray" }] : /* istanbul ignore next */ []));
27
+ hovered = signal(null, /* @ts-ignore */
28
+ ...(ngDevMode ? [{ debugName: "hovered" }] : /* istanbul ignore next */ []));
29
+ starsArray = computed(() => Array.from({ length: this.stars() }, (_, i) => i + 1), /* @ts-ignore */
30
+ ...(ngDevMode ? [{ debugName: "starsArray" }] : /* istanbul ignore next */ []));
26
31
  onHover(i) {
27
32
  if (!this.readonly())
28
33
  this.hovered.set(i);
@@ -47,8 +52,8 @@ class NeuRatingComponent {
47
52
  return `url(#half-${i})`;
48
53
  return 'transparent';
49
54
  }
50
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NeuRatingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
51
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: NeuRatingComponent, isStandalone: true, selector: "neu-rating", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, stars: { classPropertyName: "stars", publicName: "stars", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: `
55
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuRatingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
56
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NeuRatingComponent, isStandalone: true, selector: "neu-rating", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, stars: { classPropertyName: "stars", publicName: "stars", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: `
52
57
  <div
53
58
  class="neu-rating"
54
59
  [class.neu-rating--readonly]="readonly()"
@@ -94,7 +99,7 @@ class NeuRatingComponent {
94
99
  </div>
95
100
  `, isInline: true, styles: [".neu-rating{display:inline-flex;align-items:center;gap:2px;font-family:var(--neu-font-sans)}.neu-rating--readonly{pointer-events:none}.neu-rating__star{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;background:transparent;border:none;border-radius:var(--neu-radius-sm);cursor:pointer;color:var(--neu-surface-3);padding:2px;transition:transform .15s ease,color .15s ease;outline:none}.neu-rating__star--filled{color:#f59e0b}.neu-rating__star:hover:not(:disabled){transform:scale(1.15)}.neu-rating__star:focus-visible{outline:2px solid var(--neu-primary);outline-offset:2px}.neu-rating__star:disabled{cursor:default}.neu-rating__icon{width:22px;height:22px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
96
101
  }
97
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImport: i0, type: NeuRatingComponent, decorators: [{
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuRatingComponent, decorators: [{
98
103
  type: Component,
99
104
  args: [{ selector: 'neu-rating', imports: [], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: `
100
105
  <div
@@ -1 +1 @@
1
- {"version":3,"file":"neural-ui-core-rating.mjs","sources":["../../../../projects/ui-core/rating/neu-rating.component.ts","../../../../projects/ui-core/rating/neural-ui-core-rating.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n signal,\n} from '@angular/core';\n\n/**\n * NeuralUI Rating Component\n *\n * Selector de valoración con estrellas (o icono personalizable).\n * Soporta valores medios (half-star) y modo solo-lectura.\n *\n * Uso:\n * <neu-rating [value]=\"rating\" (valueChange)=\"rating = $event\" />\n * <neu-rating [value]=\"4.5\" [readonly]=\"true\" />\n */\n@Component({\n selector: 'neu-rating',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"neu-rating\"\n [class.neu-rating--readonly]=\"readonly()\"\n [attr.role]=\"readonly() ? null : 'radiogroup'\"\n [attr.aria-label]=\"'Valoración: ' + value() + ' de ' + stars() + ' estrellas'\"\n >\n @for (i of starsArray(); track i) {\n <button\n class=\"neu-rating__star\"\n [class.neu-rating__star--filled]=\"i <= (hovered() ?? value())\"\n [class.neu-rating__star--half]=\"\n !isInteger(hovered() ?? value()) && i === Math.ceil(hovered() ?? value())\n \"\n type=\"button\"\n [disabled]=\"readonly()\"\n [attr.aria-label]=\"i + ' star' + (i > 1 ? 's' : '')\"\n [attr.aria-checked]=\"i === value()\"\n [attr.role]=\"'radio'\"\n (mouseenter)=\"onHover(i)\"\n (mouseleave)=\"onLeave()\"\n (click)=\"select(i)\"\n (keydown.left)=\"select(value() - 1)\"\n (keydown.right)=\"select(value() + 1)\"\n >\n <svg class=\"neu-rating__icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <defs>\n <linearGradient [id]=\"'half-' + i\" x1=\"0\" x2=\"1\" y1=\"0\" y2=\"0\">\n <stop offset=\"50%\" stop-color=\"currentColor\" />\n <stop offset=\"50%\" stop-color=\"transparent\" />\n </linearGradient>\n </defs>\n <polygon\n points=\"12,2 15.09,8.26 22,9.27 17,14.14 18.18,21.02 12,17.77 5.82,21.02 7,14.14 2,9.27 8.91,8.26\"\n [attr.fill]=\"getFill(i)\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n }\n </div>\n `,\n styleUrl: './neu-rating.component.scss',\n})\nexport class NeuRatingComponent {\n protected readonly Math = Math;\n\n /** Valor actual (1 a stars) / Current value (1 to stars) */\n value = input<number>(0);\n\n /** Número de estrellas / Number of stars */\n stars = input<number>(5);\n\n /** Modo solo lectura / Read-only mode */\n readonly = input<boolean>(false);\n\n /** Emite el nuevo valor al seleccionar / Emits the new value on selection */\n valueChange = output<number>();\n\n protected readonly hovered = signal<number | null>(null);\n readonly starsArray = computed(() => Array.from({ length: this.stars() }, (_, i) => i + 1));\n\n onHover(i: number): void {\n if (!this.readonly()) this.hovered.set(i);\n }\n\n onLeave(): void {\n this.hovered.set(null);\n }\n\n select(i: number): void {\n if (this.readonly()) return;\n const clamped = Math.min(this.stars(), Math.max(1, i));\n this.valueChange.emit(clamped);\n }\n\n isInteger(n: number): boolean {\n return Number.isInteger(n);\n }\n\n getFill(i: number): string {\n const val = this.hovered() ?? this.value();\n if (i <= Math.floor(val)) return 'currentColor';\n if (!Number.isInteger(val) && i === Math.ceil(val)) return `url(#half-${i})`;\n return 'transparent';\n }\n}\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":"neural-ui-core-rating.mjs","sources":["../../../../projects/ui-core/rating/neu-rating.component.ts","../../../../projects/ui-core/rating/neural-ui-core-rating.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n signal,\n} from '@angular/core';\n\n/**\n * NeuralUI Rating Component\n *\n * Selector de valoración con estrellas (o icono personalizable).\n * Soporta valores medios (half-star) y modo solo-lectura.\n *\n * Uso:\n * <neu-rating [value]=\"rating\" (valueChange)=\"rating = $event\" />\n * <neu-rating [value]=\"4.5\" [readonly]=\"true\" />\n */\n@Component({\n selector: 'neu-rating',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"neu-rating\"\n [class.neu-rating--readonly]=\"readonly()\"\n [attr.role]=\"readonly() ? null : 'radiogroup'\"\n [attr.aria-label]=\"'Valoración: ' + value() + ' de ' + stars() + ' estrellas'\"\n >\n @for (i of starsArray(); track i) {\n <button\n class=\"neu-rating__star\"\n [class.neu-rating__star--filled]=\"i <= (hovered() ?? value())\"\n [class.neu-rating__star--half]=\"\n !isInteger(hovered() ?? value()) && i === Math.ceil(hovered() ?? value())\n \"\n type=\"button\"\n [disabled]=\"readonly()\"\n [attr.aria-label]=\"i + ' star' + (i > 1 ? 's' : '')\"\n [attr.aria-checked]=\"i === value()\"\n [attr.role]=\"'radio'\"\n (mouseenter)=\"onHover(i)\"\n (mouseleave)=\"onLeave()\"\n (click)=\"select(i)\"\n (keydown.left)=\"select(value() - 1)\"\n (keydown.right)=\"select(value() + 1)\"\n >\n <svg class=\"neu-rating__icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <defs>\n <linearGradient [id]=\"'half-' + i\" x1=\"0\" x2=\"1\" y1=\"0\" y2=\"0\">\n <stop offset=\"50%\" stop-color=\"currentColor\" />\n <stop offset=\"50%\" stop-color=\"transparent\" />\n </linearGradient>\n </defs>\n <polygon\n points=\"12,2 15.09,8.26 22,9.27 17,14.14 18.18,21.02 12,17.77 5.82,21.02 7,14.14 2,9.27 8.91,8.26\"\n [attr.fill]=\"getFill(i)\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n }\n </div>\n `,\n styleUrl: './neu-rating.component.scss',\n})\nexport class NeuRatingComponent {\n protected readonly Math = Math;\n\n /** Valor actual (1 a stars) / Current value (1 to stars) */\n value = input<number>(0);\n\n /** Número de estrellas / Number of stars */\n stars = input<number>(5);\n\n /** Modo solo lectura / Read-only mode */\n readonly = input<boolean>(false);\n\n /** Emite el nuevo valor al seleccionar / Emits the new value on selection */\n valueChange = output<number>();\n\n protected readonly hovered = signal<number | null>(null);\n readonly starsArray = computed(() => Array.from({ length: this.stars() }, (_, i) => i + 1));\n\n onHover(i: number): void {\n if (!this.readonly()) this.hovered.set(i);\n }\n\n onLeave(): void {\n this.hovered.set(null);\n }\n\n select(i: number): void {\n if (this.readonly()) return;\n const clamped = Math.min(this.stars(), Math.max(1, i));\n this.valueChange.emit(clamped);\n }\n\n isInteger(n: number): boolean {\n return Number.isInteger(n);\n }\n\n getFill(i: number): string {\n const val = this.hovered() ?? this.value();\n if (i <= Math.floor(val)) return 'currentColor';\n if (!Number.isInteger(val) && i === Math.ceil(val)) return `url(#half-${i})`;\n return 'transparent';\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}