@neural-ui/core 1.6.1 → 1.6.3

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 (202) hide show
  1. package/accordion/package.json +4 -0
  2. package/alert/package.json +4 -0
  3. package/autocomplete/package.json +4 -0
  4. package/avatar/package.json +4 -0
  5. package/badge/package.json +4 -0
  6. package/block-ui/package.json +4 -0
  7. package/breadcrumb/package.json +4 -0
  8. package/button/package.json +4 -0
  9. package/calendar/package.json +4 -0
  10. package/card/package.json +4 -0
  11. package/chart/package.json +4 -0
  12. package/checkbox/package.json +4 -0
  13. package/chip/package.json +4 -0
  14. package/code-block/package.json +4 -0
  15. package/color-picker/package.json +4 -0
  16. package/command-palette/package.json +4 -0
  17. package/confirm-dialog/package.json +4 -0
  18. package/context-menu/package.json +4 -0
  19. package/dashboard-grid/package.json +4 -0
  20. package/date-input/package.json +4 -0
  21. package/divider/package.json +4 -0
  22. package/empty-state/package.json +4 -0
  23. package/fesm2022/neural-ui-core-accordion.mjs +7 -11
  24. package/fesm2022/neural-ui-core-accordion.mjs.map +1 -1
  25. package/fesm2022/neural-ui-core-alert.mjs +14 -25
  26. package/fesm2022/neural-ui-core-alert.mjs.map +1 -1
  27. package/fesm2022/neural-ui-core-autocomplete.mjs +28 -53
  28. package/fesm2022/neural-ui-core-autocomplete.mjs.map +1 -1
  29. package/fesm2022/neural-ui-core-avatar.mjs +13 -23
  30. package/fesm2022/neural-ui-core-avatar.mjs.map +1 -1
  31. package/fesm2022/neural-ui-core-badge.mjs +9 -15
  32. package/fesm2022/neural-ui-core-badge.mjs.map +1 -1
  33. package/fesm2022/neural-ui-core-block-ui.mjs +11 -16
  34. package/fesm2022/neural-ui-core-block-ui.mjs.map +1 -1
  35. package/fesm2022/neural-ui-core-breadcrumb.mjs +6 -8
  36. package/fesm2022/neural-ui-core-breadcrumb.mjs.map +1 -1
  37. package/fesm2022/neural-ui-core-button.mjs +16 -29
  38. package/fesm2022/neural-ui-core-button.mjs.map +1 -1
  39. package/fesm2022/neural-ui-core-calendar.mjs +20 -37
  40. package/fesm2022/neural-ui-core-calendar.mjs.map +1 -1
  41. package/fesm2022/neural-ui-core-card.mjs +8 -13
  42. package/fesm2022/neural-ui-core-card.mjs.map +1 -1
  43. package/fesm2022/neural-ui-core-chart.mjs +24 -45
  44. package/fesm2022/neural-ui-core-chart.mjs.map +1 -1
  45. package/fesm2022/neural-ui-core-checkbox.mjs +9 -15
  46. package/fesm2022/neural-ui-core-checkbox.mjs.map +1 -1
  47. package/fesm2022/neural-ui-core-chip.mjs +13 -23
  48. package/fesm2022/neural-ui-core-chip.mjs.map +1 -1
  49. package/fesm2022/neural-ui-core-code-block.mjs +17 -31
  50. package/fesm2022/neural-ui-core-code-block.mjs.map +1 -1
  51. package/fesm2022/neural-ui-core-color-picker.mjs +11 -19
  52. package/fesm2022/neural-ui-core-color-picker.mjs.map +1 -1
  53. package/fesm2022/neural-ui-core-command-palette.mjs +11 -16
  54. package/fesm2022/neural-ui-core-command-palette.mjs.map +1 -1
  55. package/fesm2022/neural-ui-core-confirm-dialog.mjs +6 -6
  56. package/fesm2022/neural-ui-core-confirm-dialog.mjs.map +1 -1
  57. package/fesm2022/neural-ui-core-context-menu.mjs +9 -12
  58. package/fesm2022/neural-ui-core-context-menu.mjs.map +1 -1
  59. package/fesm2022/neural-ui-core-dashboard-grid.mjs +7 -11
  60. package/fesm2022/neural-ui-core-dashboard-grid.mjs.map +1 -1
  61. package/fesm2022/neural-ui-core-date-input.mjs +57 -111
  62. package/fesm2022/neural-ui-core-date-input.mjs.map +1 -1
  63. package/fesm2022/neural-ui-core-divider.mjs +5 -7
  64. package/fesm2022/neural-ui-core-divider.mjs.map +1 -1
  65. package/fesm2022/neural-ui-core-empty-state.mjs +8 -13
  66. package/fesm2022/neural-ui-core-empty-state.mjs.map +1 -1
  67. package/fesm2022/neural-ui-core-filter-bar.mjs +11 -19
  68. package/fesm2022/neural-ui-core-filter-bar.mjs.map +1 -1
  69. package/fesm2022/neural-ui-core-icon.mjs +7 -11
  70. package/fesm2022/neural-ui-core-icon.mjs.map +1 -1
  71. package/fesm2022/neural-ui-core-image-gallery.mjs +13 -23
  72. package/fesm2022/neural-ui-core-image-gallery.mjs.map +1 -1
  73. package/fesm2022/neural-ui-core-image-viewer.mjs +14 -22
  74. package/fesm2022/neural-ui-core-image-viewer.mjs.map +1 -1
  75. package/fesm2022/neural-ui-core-input-otp.mjs +11 -19
  76. package/fesm2022/neural-ui-core-input-otp.mjs.map +1 -1
  77. package/fesm2022/neural-ui-core-input.mjs +35 -67
  78. package/fesm2022/neural-ui-core-input.mjs.map +1 -1
  79. package/fesm2022/neural-ui-core-kanban.mjs +9 -15
  80. package/fesm2022/neural-ui-core-kanban.mjs.map +1 -1
  81. package/fesm2022/neural-ui-core-knob.mjs +22 -41
  82. package/fesm2022/neural-ui-core-knob.mjs.map +1 -1
  83. package/fesm2022/neural-ui-core-meter-group.mjs +13 -23
  84. package/fesm2022/neural-ui-core-meter-group.mjs.map +1 -1
  85. package/fesm2022/neural-ui-core-modal.mjs +11 -16
  86. package/fesm2022/neural-ui-core-modal.mjs.map +1 -1
  87. package/fesm2022/neural-ui-core-multiselect.mjs +39 -72
  88. package/fesm2022/neural-ui-core-multiselect.mjs.map +1 -1
  89. package/fesm2022/neural-ui-core-nav.mjs +13 -22
  90. package/fesm2022/neural-ui-core-nav.mjs.map +1 -1
  91. package/fesm2022/neural-ui-core-notification-center.mjs +9 -12
  92. package/fesm2022/neural-ui-core-notification-center.mjs.map +1 -1
  93. package/fesm2022/neural-ui-core-number-input.mjs +19 -35
  94. package/fesm2022/neural-ui-core-number-input.mjs.map +1 -1
  95. package/fesm2022/neural-ui-core-pagination.mjs +9 -15
  96. package/fesm2022/neural-ui-core-pagination.mjs.map +1 -1
  97. package/fesm2022/neural-ui-core-popover.mjs +14 -22
  98. package/fesm2022/neural-ui-core-popover.mjs.map +1 -1
  99. package/fesm2022/neural-ui-core-progress-bar.mjs +11 -19
  100. package/fesm2022/neural-ui-core-progress-bar.mjs.map +1 -1
  101. package/fesm2022/neural-ui-core-radio.mjs +15 -24
  102. package/fesm2022/neural-ui-core-radio.mjs.map +1 -1
  103. package/fesm2022/neural-ui-core-rating.mjs +8 -13
  104. package/fesm2022/neural-ui-core-rating.mjs.map +1 -1
  105. package/fesm2022/neural-ui-core-rich-text-editor.mjs +28 -53
  106. package/fesm2022/neural-ui-core-rich-text-editor.mjs.map +1 -1
  107. package/fesm2022/neural-ui-core-scheduler-gantt.mjs +22 -41
  108. package/fesm2022/neural-ui-core-scheduler-gantt.mjs.map +1 -1
  109. package/fesm2022/neural-ui-core-select.mjs +43 -77
  110. package/fesm2022/neural-ui-core-select.mjs.map +1 -1
  111. package/fesm2022/neural-ui-core-sidebar.mjs +12 -21
  112. package/fesm2022/neural-ui-core-sidebar.mjs.map +1 -1
  113. package/fesm2022/neural-ui-core-skeleton.mjs +7 -11
  114. package/fesm2022/neural-ui-core-skeleton.mjs.map +1 -1
  115. package/fesm2022/neural-ui-core-slider.mjs +13 -23
  116. package/fesm2022/neural-ui-core-slider.mjs.map +1 -1
  117. package/fesm2022/neural-ui-core-spinner.mjs +10 -17
  118. package/fesm2022/neural-ui-core-spinner.mjs.map +1 -1
  119. package/fesm2022/neural-ui-core-split-button.mjs +15 -27
  120. package/fesm2022/neural-ui-core-split-button.mjs.map +1 -1
  121. package/fesm2022/neural-ui-core-splitter.mjs +6 -9
  122. package/fesm2022/neural-ui-core-splitter.mjs.map +1 -1
  123. package/fesm2022/neural-ui-core-stats-card.mjs +11 -19
  124. package/fesm2022/neural-ui-core-stats-card.mjs.map +1 -1
  125. package/fesm2022/neural-ui-core-stepper.mjs +8 -13
  126. package/fesm2022/neural-ui-core-stepper.mjs.map +1 -1
  127. package/fesm2022/neural-ui-core-switch.mjs +9 -15
  128. package/fesm2022/neural-ui-core-switch.mjs.map +1 -1
  129. package/fesm2022/neural-ui-core-table.mjs +124 -242
  130. package/fesm2022/neural-ui-core-table.mjs.map +1 -1
  131. package/fesm2022/neural-ui-core-tabs.mjs +18 -30
  132. package/fesm2022/neural-ui-core-tabs.mjs.map +1 -1
  133. package/fesm2022/neural-ui-core-textarea.mjs +23 -43
  134. package/fesm2022/neural-ui-core-textarea.mjs.map +1 -1
  135. package/fesm2022/neural-ui-core-timeline-grid.mjs +12 -21
  136. package/fesm2022/neural-ui-core-timeline-grid.mjs.map +1 -1
  137. package/fesm2022/neural-ui-core-timeline.mjs +4 -5
  138. package/fesm2022/neural-ui-core-timeline.mjs.map +1 -1
  139. package/fesm2022/neural-ui-core-toast.mjs +8 -10
  140. package/fesm2022/neural-ui-core-toast.mjs.map +1 -1
  141. package/fesm2022/neural-ui-core-toggle-button-group.mjs +10 -17
  142. package/fesm2022/neural-ui-core-toggle-button-group.mjs.map +1 -1
  143. package/fesm2022/neural-ui-core-toolbar.mjs +8 -13
  144. package/fesm2022/neural-ui-core-toolbar.mjs.map +1 -1
  145. package/fesm2022/neural-ui-core-tooltip.mjs +11 -16
  146. package/fesm2022/neural-ui-core-tooltip.mjs.map +1 -1
  147. package/fesm2022/neural-ui-core-tree-table.mjs +30 -57
  148. package/fesm2022/neural-ui-core-tree-table.mjs.map +1 -1
  149. package/fesm2022/neural-ui-core-tree.mjs +17 -31
  150. package/fesm2022/neural-ui-core-tree.mjs.map +1 -1
  151. package/fesm2022/neural-ui-core-uploader.mjs +47 -91
  152. package/fesm2022/neural-ui-core-uploader.mjs.map +1 -1
  153. package/fesm2022/neural-ui-core-url-state.mjs +5 -7
  154. package/fesm2022/neural-ui-core-url-state.mjs.map +1 -1
  155. package/fesm2022/neural-ui-core-virtual-list.mjs +19 -32
  156. package/fesm2022/neural-ui-core-virtual-list.mjs.map +1 -1
  157. package/filter-bar/package.json +4 -0
  158. package/icon/package.json +4 -0
  159. package/image-gallery/package.json +4 -0
  160. package/image-viewer/package.json +4 -0
  161. package/input/package.json +4 -0
  162. package/input-otp/package.json +4 -0
  163. package/kanban/package.json +4 -0
  164. package/knob/package.json +4 -0
  165. package/meter-group/package.json +4 -0
  166. package/modal/package.json +4 -0
  167. package/multiselect/package.json +4 -0
  168. package/nav/package.json +4 -0
  169. package/notification-center/package.json +4 -0
  170. package/number-input/package.json +4 -0
  171. package/package.json +6 -6
  172. package/pagination/package.json +4 -0
  173. package/popover/package.json +4 -0
  174. package/progress-bar/package.json +4 -0
  175. package/radio/package.json +4 -0
  176. package/rating/package.json +4 -0
  177. package/rich-text-editor/package.json +4 -0
  178. package/scheduler-gantt/package.json +4 -0
  179. package/select/package.json +4 -0
  180. package/sidebar/package.json +4 -0
  181. package/skeleton/package.json +4 -0
  182. package/slider/package.json +4 -0
  183. package/spinner/package.json +4 -0
  184. package/split-button/package.json +4 -0
  185. package/splitter/package.json +4 -0
  186. package/stats-card/package.json +4 -0
  187. package/stepper/package.json +4 -0
  188. package/switch/package.json +4 -0
  189. package/table/package.json +4 -0
  190. package/tabs/package.json +4 -0
  191. package/textarea/package.json +4 -0
  192. package/timeline/package.json +4 -0
  193. package/timeline-grid/package.json +4 -0
  194. package/toast/package.json +4 -0
  195. package/toggle-button-group/package.json +4 -0
  196. package/toolbar/package.json +4 -0
  197. package/tooltip/package.json +4 -0
  198. package/tree/package.json +4 -0
  199. package/tree-table/package.json +4 -0
  200. package/uploader/package.json +4 -0
  201. package/url-state/package.json +4 -0
  202. package/virtual-list/package.json +4 -0
@@ -14,32 +14,23 @@ import { NeuIconComponent } from '@neural-ui/core/icon';
14
14
  */
15
15
  class NeuButtonComponent {
16
16
  /** Variante visual del botón / Visual button variant */
17
- variant = input('primary', /* @ts-ignore */
18
- ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
17
+ variant = input('primary', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
19
18
  /** Tamaño del botón / Button size */
20
- size = input('md', /* @ts-ignore */
21
- ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
19
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
22
20
  /** Deshabilita el botón y bloquea la interacción / Disables the button and blocks interaction */
23
- disabled = input(false, /* @ts-ignore */
24
- ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
21
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
25
22
  /** Muestra un spinner y deshabilita mientras se procesa / Shows a spinner and disables while processing */
26
- loading = input(false, /* @ts-ignore */
27
- ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
23
+ loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
28
24
  /** Ocupa el 100% del ancho de su contenedor / Takes up 100% of its container width */
29
- fullWidth = input(false, /* @ts-ignore */
30
- ...(ngDevMode ? [{ debugName: "fullWidth" }] : /* istanbul ignore next */ []));
25
+ fullWidth = input(false, ...(ngDevMode ? [{ debugName: "fullWidth" }] : /* istanbul ignore next */ []));
31
26
  /** Nombre del icono Lucide (ej: 'lucideSave', 'lucidePlus') / Lucide icon name (e.g. 'lucideSave', 'lucidePlus') */
32
- icon = input('', /* @ts-ignore */
33
- ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
27
+ icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
34
28
  /** Posición del icono respecto al texto */
35
- iconPosition = input('left', /* @ts-ignore */
36
- ...(ngDevMode ? [{ debugName: "iconPosition" }] : /* istanbul ignore next */ []));
29
+ iconPosition = input('left', ...(ngDevMode ? [{ debugName: "iconPosition" }] : /* istanbul ignore next */ []));
37
30
  /** Modo solo-icono: aplica padding cuadrado y oculta el ng-content / Icon-only mode: applies square padding and hides ng-content */
38
- iconOnly = input(false, /* @ts-ignore */
39
- ...(ngDevMode ? [{ debugName: "iconOnly" }] : /* istanbul ignore next */ []));
31
+ iconOnly = input(false, ...(ngDevMode ? [{ debugName: "iconOnly" }] : /* istanbul ignore next */ []));
40
32
  /** Etiqueta accesible obligatoria cuando se usa iconOnly (WCAG 4.1.2) / Required accessible label when using iconOnly (WCAG 4.1.2) */
41
- ariaLabel = input('', /* @ts-ignore */
42
- ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
33
+ ariaLabel = input('', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
43
34
  /** Emite el evento de click cuando el botón está activo / Emits the click event when the button is active */
44
35
  neuClick = output();
45
36
  /** @internal — reenvía el click nativo al output Angular / forwards the native click to the Angular output */
@@ -48,15 +39,12 @@ class NeuButtonComponent {
48
39
  this.neuClick.emit(event);
49
40
  }
50
41
  }
51
- isDisabled = computed(() => this.disabled() || this.loading(), /* @ts-ignore */
52
- ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
53
- hasIcon = computed(() => !!this.icon(), /* @ts-ignore */
54
- ...(ngDevMode ? [{ debugName: "hasIcon" }] : /* istanbul ignore next */ []));
42
+ isDisabled = computed(() => this.disabled() || this.loading(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
43
+ hasIcon = computed(() => !!this.icon(), ...(ngDevMode ? [{ debugName: "hasIcon" }] : /* istanbul ignore next */ []));
55
44
  iconSize = computed(() => {
56
45
  const map = { sm: '14px', md: '16px', lg: '18px' };
57
46
  return map[this.size()];
58
- }, /* @ts-ignore */
59
- ...(ngDevMode ? [{ debugName: "iconSize" }] : /* istanbul ignore next */ []));
47
+ }, ...(ngDevMode ? [{ debugName: "iconSize" }] : /* istanbul ignore next */ []));
60
48
  hostClasses = computed(() => ({
61
49
  'neu-button': true,
62
50
  [`neu-button--${this.variant()}`]: true,
@@ -65,10 +53,9 @@ class NeuButtonComponent {
65
53
  'neu-button--disabled': this.isDisabled(),
66
54
  'neu-button--full-width': this.fullWidth(),
67
55
  'neu-button--icon-only': this.iconOnly(),
68
- }), /* @ts-ignore */
69
- ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
70
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
71
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NeuButtonComponent, isStandalone: true, selector: "button[neu-button]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconPosition: { classPropertyName: "iconPosition", publicName: "iconPosition", isSignal: true, isRequired: false, transformFunction: null }, iconOnly: { classPropertyName: "iconOnly", publicName: "iconOnly", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { neuClick: "neuClick" }, host: { listeners: { "click": "_onHostClick($event)" }, properties: { "class": "hostClasses()", "attr.disabled": "isDisabled() ? \"\" : null", "attr.aria-disabled": "isDisabled()", "attr.aria-busy": "loading()", "attr.aria-label": "ariaLabel() || null" } }, ngImport: i0, template: `
56
+ }), ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
57
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
58
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: NeuButtonComponent, isStandalone: true, selector: "button[neu-button]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconPosition: { classPropertyName: "iconPosition", publicName: "iconPosition", isSignal: true, isRequired: false, transformFunction: null }, iconOnly: { classPropertyName: "iconOnly", publicName: "iconOnly", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { neuClick: "neuClick" }, host: { listeners: { "click": "_onHostClick($event)" }, properties: { "class": "hostClasses()", "attr.disabled": "isDisabled() ? \"\" : null", "attr.aria-disabled": "isDisabled()", "attr.aria-busy": "loading()", "attr.aria-label": "ariaLabel() || null" } }, ngImport: i0, template: `
72
59
  @if (loading()) {
73
60
  <span class="neu-button__spinner" aria-hidden="true">
74
61
  <svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
@@ -94,7 +81,7 @@ class NeuButtonComponent {
94
81
  }
95
82
  `, isInline: true, styles: [".neu-button{display:inline-flex;align-items:center;justify-content:center;gap:var(--neu-space-2);border:1px solid transparent;border-radius:var(--neu-radius);font-family:var(--neu-font-sans);font-weight:500;line-height:1;cursor:pointer;text-decoration:none;white-space:nowrap;-webkit-user-select:none;user-select:none;transition:background-color var(--neu-transition),border-color var(--neu-transition),color var(--neu-transition),box-shadow var(--neu-transition),opacity var(--neu-transition);outline:none}.neu-button:focus-visible{box-shadow:var(--neu-focus-ring-strong)}.neu-button--sm{padding:var(--neu-space-2) var(--neu-space-3);font-size:var(--neu-text-sm);border-radius:var(--neu-radius-sm)}.neu-button--md{padding:var(--neu-space-2) var(--neu-space-5);font-size:var(--neu-text-base)}@media(min-width:400px){.neu-button--md{padding:.625rem var(--neu-space-6)}}.neu-button--lg{padding:var(--neu-space-3) var(--neu-space-8);font-size:var(--neu-text-lg)}.neu-button--full-width{width:100%}.neu-button--primary{background:var(--neu-primary-solid, var(--neu-primary-dark, var(--neu-primary)));color:var(--neu-primary-solid-fg, var(--neu-primary-fg));border-color:var(--neu-primary-solid, var(--neu-primary-dark, var(--neu-primary)))}.neu-button--primary:hover:not(:disabled):not(.neu-button--disabled){background:var(--neu-primary-solid-hover, var(--neu-primary-dark));border-color:var(--neu-primary-solid-hover, var(--neu-primary-dark));box-shadow:var(--neu-shadow-glow)}.neu-button--primary:active:not(:disabled){background:var(--neu-primary-solid-hover, var(--neu-primary-dark));transform:translateY(1px)}.neu-button--secondary{background:#475569;color:#fff;border-color:#475569}.neu-button--secondary:hover:not(:disabled):not(.neu-button--disabled){background:#334155;border-color:#334155}.neu-button--outline{background:transparent;color:var(--neu-primary-dark, var(--neu-primary));border-color:var(--neu-primary)}.neu-button--outline:hover:not(:disabled):not(.neu-button--disabled){background:var(--neu-primary-50);border-color:var(--neu-primary-dark, var(--neu-primary))}.neu-button--ghost{background:transparent;color:var(--neu-text-muted);border-color:transparent}.neu-button--ghost:hover:not(:disabled):not(.neu-button--disabled){background:var(--neu-surface-2);color:var(--neu-text)}.neu-button--danger{background:var(--neu-error);color:var(--neu-primary-fg);border-color:var(--neu-error)}.neu-button--danger:hover:not(:disabled):not(.neu-button--disabled){background:#dc2626;border-color:#dc2626}.neu-button--disabled,.neu-button:disabled{opacity:.45;cursor:not-allowed;pointer-events:none}.neu-button--loading{cursor:wait;pointer-events:none}.neu-button--icon-only{gap:0;align-items:center;justify-content:center;aspect-ratio:1/1;line-height:1}.neu-button--icon-only.neu-button--sm{width:30px;height:30px;padding:0}.neu-button--icon-only.neu-button--md{width:38px;height:38px;padding:0}.neu-button--icon-only.neu-button--lg{width:46px;height:46px;padding:0}.neu-button--icon-only .neu-icon,.neu-button--icon-only neu-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;margin:0;line-height:1}.neu-button--icon-only .neu-icon ng-icon,.neu-button--icon-only neu-icon ng-icon{display:inline-flex;align-items:center;justify-content:center;width:var(--ng-icon__size, 1em);height:var(--ng-icon__size, 1em);line-height:1}.neu-button--icon-only .neu-icon svg,.neu-button--icon-only neu-icon svg{display:block;width:100%;height:100%}.neu-button__spinner{display:inline-flex;flex-shrink:0;width:1em;height:1em}.neu-button__spinner svg{width:100%;height:100%;animation:neu-spin .8s linear infinite}@keyframes neu-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "component", type: NeuIconComponent, selector: "neu-icon", inputs: ["name", "strokeWidth", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
96
83
  }
97
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuButtonComponent, decorators: [{
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuButtonComponent, decorators: [{
98
85
  type: Component,
99
86
  args: [{ selector: 'button[neu-button]', imports: [NeuIconComponent], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
100
87
  '[class]': 'hostClasses()',
@@ -1 +1 @@
1
- {"version":3,"file":"neural-ui-core-button.mjs","sources":["../../../../projects/ui-core/button/neu-button.component.ts","../../../../projects/ui-core/button/neural-ui-core-button.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n} from '@angular/core';\nimport { NeuIconComponent } from '@neural-ui/core/icon';\n\nexport type NeuButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger' | 'outline';\nexport type NeuButtonSize = 'sm' | 'md' | 'lg';\nexport type NeuButtonIconPosition = 'left' | 'right';\n\n/**\n * NeuralUI Button Component\n *\n * Uso: <button neu-button variant=\"primary\" size=\"md\">Texto</button>\n * Con icono: <button neu-button icon=\"lucideSave\">Guardar</button>\n * Solo icono: <button neu-button icon=\"lucideTrash2\" [iconOnly]=\"true\" />\n *\n * Signals: variant, size, disabled, loading, fullWidth, icon, iconPosition, iconOnly\n * son inputs reactivos. El estado se computa automáticamente con computed().\n */\n@Component({\n selector: 'button[neu-button]',\n imports: [NeuIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.disabled]': 'isDisabled() ? \"\" : null',\n '[attr.aria-disabled]': 'isDisabled()',\n '[attr.aria-busy]': 'loading()',\n '[attr.aria-label]': 'ariaLabel() || null',\n '(click)': '_onHostClick($event)',\n },\n template: `\n @if (loading()) {\n <span class=\"neu-button__spinner\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"31.416\"\n stroke-dashoffset=\"10\"\n />\n </svg>\n </span>\n }\n @if (hasIcon() && iconPosition() === 'left') {\n <neu-icon [name]=\"icon()\" [size]=\"iconSize()\" strokeWidth=\"2\" aria-hidden=\"true\" />\n }\n <ng-content />\n @if (hasIcon() && iconPosition() === 'right') {\n <neu-icon [name]=\"icon()\" [size]=\"iconSize()\" strokeWidth=\"2\" aria-hidden=\"true\" />\n }\n `,\n styleUrl: './neu-button.component.scss',\n})\nexport class NeuButtonComponent {\n /** Variante visual del botón / Visual button variant */\n variant = input<NeuButtonVariant>('primary');\n\n /** Tamaño del botón / Button size */\n size = input<NeuButtonSize>('md');\n\n /** Deshabilita el botón y bloquea la interacción / Disables the button and blocks interaction */\n disabled = input<boolean>(false);\n\n /** Muestra un spinner y deshabilita mientras se procesa / Shows a spinner and disables while processing */\n loading = input<boolean>(false);\n\n /** Ocupa el 100% del ancho de su contenedor / Takes up 100% of its container width */\n fullWidth = input<boolean>(false);\n\n /** Nombre del icono Lucide (ej: 'lucideSave', 'lucidePlus') / Lucide icon name (e.g. 'lucideSave', 'lucidePlus') */\n icon = input<string>('');\n\n /** Posición del icono respecto al texto */\n iconPosition = input<NeuButtonIconPosition>('left');\n\n /** Modo solo-icono: aplica padding cuadrado y oculta el ng-content / Icon-only mode: applies square padding and hides ng-content */\n iconOnly = input<boolean>(false);\n\n /** Etiqueta accesible obligatoria cuando se usa iconOnly (WCAG 4.1.2) / Required accessible label when using iconOnly (WCAG 4.1.2) */\n ariaLabel = input<string>('');\n\n /** Emite el evento de click cuando el botón está activo / Emits the click event when the button is active */\n neuClick = output<MouseEvent>();\n\n /** @internal — reenvía el click nativo al output Angular / forwards the native click to the Angular output */\n _onHostClick(event: MouseEvent): void {\n if (!this.isDisabled()) {\n this.neuClick.emit(event);\n }\n }\n\n readonly isDisabled = computed(() => this.disabled() || this.loading());\n readonly hasIcon = computed(() => !!this.icon());\n\n readonly iconSize = computed(() => {\n const map: Record<NeuButtonSize, string> = { sm: '14px', md: '16px', lg: '18px' };\n return map[this.size()];\n });\n\n readonly hostClasses = computed(() => ({\n 'neu-button': true,\n [`neu-button--${this.variant()}`]: true,\n [`neu-button--${this.size()}`]: true,\n 'neu-button--loading': this.loading(),\n 'neu-button--disabled': this.isDisabled(),\n 'neu-button--full-width': this.fullWidth(),\n 'neu-button--icon-only': this.iconOnly(),\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-button.mjs","sources":["../../../../projects/ui-core/button/neu-button.component.ts","../../../../projects/ui-core/button/neural-ui-core-button.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n} from '@angular/core';\nimport { NeuIconComponent } from '@neural-ui/core/icon';\n\nexport type NeuButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger' | 'outline';\nexport type NeuButtonSize = 'sm' | 'md' | 'lg';\nexport type NeuButtonIconPosition = 'left' | 'right';\n\n/**\n * NeuralUI Button Component\n *\n * Uso: <button neu-button variant=\"primary\" size=\"md\">Texto</button>\n * Con icono: <button neu-button icon=\"lucideSave\">Guardar</button>\n * Solo icono: <button neu-button icon=\"lucideTrash2\" [iconOnly]=\"true\" />\n *\n * Signals: variant, size, disabled, loading, fullWidth, icon, iconPosition, iconOnly\n * son inputs reactivos. El estado se computa automáticamente con computed().\n */\n@Component({\n selector: 'button[neu-button]',\n imports: [NeuIconComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.disabled]': 'isDisabled() ? \"\" : null',\n '[attr.aria-disabled]': 'isDisabled()',\n '[attr.aria-busy]': 'loading()',\n '[attr.aria-label]': 'ariaLabel() || null',\n '(click)': '_onHostClick($event)',\n },\n template: `\n @if (loading()) {\n <span class=\"neu-button__spinner\" aria-hidden=\"true\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"31.416\"\n stroke-dashoffset=\"10\"\n />\n </svg>\n </span>\n }\n @if (hasIcon() && iconPosition() === 'left') {\n <neu-icon [name]=\"icon()\" [size]=\"iconSize()\" strokeWidth=\"2\" aria-hidden=\"true\" />\n }\n <ng-content />\n @if (hasIcon() && iconPosition() === 'right') {\n <neu-icon [name]=\"icon()\" [size]=\"iconSize()\" strokeWidth=\"2\" aria-hidden=\"true\" />\n }\n `,\n styleUrl: './neu-button.component.scss',\n})\nexport class NeuButtonComponent {\n /** Variante visual del botón / Visual button variant */\n variant = input<NeuButtonVariant>('primary');\n\n /** Tamaño del botón / Button size */\n size = input<NeuButtonSize>('md');\n\n /** Deshabilita el botón y bloquea la interacción / Disables the button and blocks interaction */\n disabled = input<boolean>(false);\n\n /** Muestra un spinner y deshabilita mientras se procesa / Shows a spinner and disables while processing */\n loading = input<boolean>(false);\n\n /** Ocupa el 100% del ancho de su contenedor / Takes up 100% of its container width */\n fullWidth = input<boolean>(false);\n\n /** Nombre del icono Lucide (ej: 'lucideSave', 'lucidePlus') / Lucide icon name (e.g. 'lucideSave', 'lucidePlus') */\n icon = input<string>('');\n\n /** Posición del icono respecto al texto */\n iconPosition = input<NeuButtonIconPosition>('left');\n\n /** Modo solo-icono: aplica padding cuadrado y oculta el ng-content / Icon-only mode: applies square padding and hides ng-content */\n iconOnly = input<boolean>(false);\n\n /** Etiqueta accesible obligatoria cuando se usa iconOnly (WCAG 4.1.2) / Required accessible label when using iconOnly (WCAG 4.1.2) */\n ariaLabel = input<string>('');\n\n /** Emite el evento de click cuando el botón está activo / Emits the click event when the button is active */\n neuClick = output<MouseEvent>();\n\n /** @internal — reenvía el click nativo al output Angular / forwards the native click to the Angular output */\n _onHostClick(event: MouseEvent): void {\n if (!this.isDisabled()) {\n this.neuClick.emit(event);\n }\n }\n\n readonly isDisabled = computed(() => this.disabled() || this.loading());\n readonly hasIcon = computed(() => !!this.icon());\n\n readonly iconSize = computed(() => {\n const map: Record<NeuButtonSize, string> = { sm: '14px', md: '16px', lg: '18px' };\n return map[this.size()];\n });\n\n readonly hostClasses = computed(() => ({\n 'neu-button': true,\n [`neu-button--${this.variant()}`]: true,\n [`neu-button--${this.size()}`]: true,\n 'neu-button--loading': this.loading(),\n 'neu-button--disabled': this.isDisabled(),\n 'neu-button--full-width': this.fullWidth(),\n 'neu-button--icon-only': this.iconOnly(),\n }));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -48,43 +48,32 @@ function defaultCalendarLabels(locale) {
48
48
  return locale.toLowerCase().startsWith('es') ? ES_CALENDAR_LABELS : EN_CALENDAR_LABELS;
49
49
  }
50
50
  class NeuCalendarComponent {
51
- events = input([], /* @ts-ignore */
52
- ...(ngDevMode ? [{ debugName: "events" }] : /* istanbul ignore next */ []));
53
- view = input('month', /* @ts-ignore */
54
- ...(ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []));
55
- selectedDate = input(new Date(), /* @ts-ignore */
56
- ...(ngDevMode ? [{ debugName: "selectedDate" }] : /* istanbul ignore next */ []));
57
- locale = input(defaultCalendarLocale(), /* @ts-ignore */
58
- ...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
59
- maxVisibleEvents = input(3, /* @ts-ignore */
60
- ...(ngDevMode ? [{ debugName: "maxVisibleEvents" }] : /* istanbul ignore next */ []));
61
- showHeader = input(true, /* @ts-ignore */
62
- ...(ngDevMode ? [{ debugName: "showHeader" }] : /* istanbul ignore next */ []));
63
- labels = input({}, /* @ts-ignore */
64
- ...(ngDevMode ? [{ debugName: "labels" }] : /* istanbul ignore next */ []));
51
+ events = input([], ...(ngDevMode ? [{ debugName: "events" }] : /* istanbul ignore next */ []));
52
+ view = input('month', ...(ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []));
53
+ selectedDate = input(new Date(), ...(ngDevMode ? [{ debugName: "selectedDate" }] : /* istanbul ignore next */ []));
54
+ locale = input(defaultCalendarLocale(), ...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
55
+ maxVisibleEvents = input(3, ...(ngDevMode ? [{ debugName: "maxVisibleEvents" }] : /* istanbul ignore next */ []));
56
+ showHeader = input(true, ...(ngDevMode ? [{ debugName: "showHeader" }] : /* istanbul ignore next */ []));
57
+ labels = input({}, ...(ngDevMode ? [{ debugName: "labels" }] : /* istanbul ignore next */ []));
65
58
  selectedDateChange = output();
66
59
  dateSelect = output();
67
60
  eventClick = output();
68
- _selectedDate = signal(startOfDay(new Date()), /* @ts-ignore */
69
- ...(ngDevMode ? [{ debugName: "_selectedDate" }] : /* istanbul ignore next */ []));
61
+ _selectedDate = signal(startOfDay(new Date()), ...(ngDevMode ? [{ debugName: "_selectedDate" }] : /* istanbul ignore next */ []));
70
62
  resolvedLabels = computed(() => ({
71
63
  ...defaultCalendarLabels(this.locale()),
72
64
  ...this.labels(),
73
- }), /* @ts-ignore */
74
- ...(ngDevMode ? [{ debugName: "resolvedLabels" }] : /* istanbul ignore next */ []));
65
+ }), ...(ngDevMode ? [{ debugName: "resolvedLabels" }] : /* istanbul ignore next */ []));
75
66
  normalizedEvents = computed(() => this.events()
76
67
  .map((event) => ({
77
68
  ...event,
78
69
  start: this.coerceDate(event.start),
79
70
  end: event.end ? this.coerceDate(event.end) : undefined,
80
71
  }))
81
- .sort((a, b) => a.start.getTime() - b.start.getTime()), /* @ts-ignore */
82
- ...(ngDevMode ? [{ debugName: "normalizedEvents" }] : /* istanbul ignore next */ []));
72
+ .sort((a, b) => a.start.getTime() - b.start.getTime()), ...(ngDevMode ? [{ debugName: "normalizedEvents" }] : /* istanbul ignore next */ []));
83
73
  weekdays = computed(() => {
84
74
  const base = startOfWeek(new Date(2026, 0, 5));
85
75
  return Array.from({ length: 7 }, (_, index) => new Intl.DateTimeFormat(this.locale(), { weekday: 'short' }).format(addDays(base, index)));
86
- }, /* @ts-ignore */
87
- ...(ngDevMode ? [{ debugName: "weekdays" }] : /* istanbul ignore next */ []));
76
+ }, ...(ngDevMode ? [{ debugName: "weekdays" }] : /* istanbul ignore next */ []));
88
77
  monthDays = computed(() => {
89
78
  const selected = this._selectedDate();
90
79
  const firstDayOfMonth = new Date(selected.getFullYear(), selected.getMonth(), 1);
@@ -93,23 +82,18 @@ class NeuCalendarComponent {
93
82
  const date = addDays(gridStart, index);
94
83
  return this.buildDayCell(date, date.getMonth() === selected.getMonth());
95
84
  });
96
- }, /* @ts-ignore */
97
- ...(ngDevMode ? [{ debugName: "monthDays" }] : /* istanbul ignore next */ []));
85
+ }, ...(ngDevMode ? [{ debugName: "monthDays" }] : /* istanbul ignore next */ []));
98
86
  weekDays = computed(() => {
99
87
  const start = startOfWeek(this._selectedDate());
100
88
  return Array.from({ length: 7 }, (_, index) => this.buildDayCell(addDays(start, index), true));
101
- }, /* @ts-ignore */
102
- ...(ngDevMode ? [{ debugName: "weekDays" }] : /* istanbul ignore next */ []));
103
- selectedDay = computed(() => this.buildDayCell(this._selectedDate(), true), /* @ts-ignore */
104
- ...(ngDevMode ? [{ debugName: "selectedDay" }] : /* istanbul ignore next */ []));
105
- selectedDayEvents = computed(() => this.selectedDay().events, /* @ts-ignore */
106
- ...(ngDevMode ? [{ debugName: "selectedDayEvents" }] : /* istanbul ignore next */ []));
89
+ }, ...(ngDevMode ? [{ debugName: "weekDays" }] : /* istanbul ignore next */ []));
90
+ selectedDay = computed(() => this.buildDayCell(this._selectedDate(), true), ...(ngDevMode ? [{ debugName: "selectedDay" }] : /* istanbul ignore next */ []));
91
+ selectedDayEvents = computed(() => this.selectedDay().events, ...(ngDevMode ? [{ debugName: "selectedDayEvents" }] : /* istanbul ignore next */ []));
107
92
  selectedAgendaLabel = computed(() => new Intl.DateTimeFormat(this.locale(), {
108
93
  weekday: 'long',
109
94
  month: 'long',
110
95
  day: 'numeric',
111
- }).format(this._selectedDate()), /* @ts-ignore */
112
- ...(ngDevMode ? [{ debugName: "selectedAgendaLabel" }] : /* istanbul ignore next */ []));
96
+ }).format(this._selectedDate()), ...(ngDevMode ? [{ debugName: "selectedAgendaLabel" }] : /* istanbul ignore next */ []));
113
97
  currentLabel = computed(() => {
114
98
  const selected = this._selectedDate();
115
99
  if (this.view() === 'month') {
@@ -119,8 +103,7 @@ class NeuCalendarComponent {
119
103
  const weekEnd = addDays(weekStart, 6);
120
104
  const formatter = new Intl.DateTimeFormat(this.locale(), { month: 'short', day: 'numeric' });
121
105
  return `${formatter.format(weekStart)} - ${formatter.format(weekEnd)}`;
122
- }, /* @ts-ignore */
123
- ...(ngDevMode ? [{ debugName: "currentLabel" }] : /* istanbul ignore next */ []));
106
+ }, ...(ngDevMode ? [{ debugName: "currentLabel" }] : /* istanbul ignore next */ []));
124
107
  constructor() {
125
108
  effect(() => {
126
109
  this._selectedDate.set(this.coerceDate(this.selectedDate()));
@@ -222,8 +205,8 @@ class NeuCalendarComponent {
222
205
  const candidate = value instanceof Date ? value : new Date(value);
223
206
  return Number.isNaN(candidate.getTime()) ? startOfDay(new Date()) : startOfDay(candidate);
224
207
  }
225
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuCalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
226
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NeuCalendarComponent, isStandalone: true, selector: "neu-calendar", inputs: { events: { classPropertyName: "events", publicName: "events", isSignal: true, isRequired: false, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: true, isRequired: false, transformFunction: null }, selectedDate: { classPropertyName: "selectedDate", publicName: "selectedDate", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleEvents: { classPropertyName: "maxVisibleEvents", publicName: "maxVisibleEvents", isSignal: true, isRequired: false, transformFunction: null }, showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null }, labels: { classPropertyName: "labels", publicName: "labels", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedDateChange: "selectedDateChange", dateSelect: "dateSelect", eventClick: "eventClick" }, ngImport: i0, template: `
208
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuCalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
209
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: NeuCalendarComponent, isStandalone: true, selector: "neu-calendar", inputs: { events: { classPropertyName: "events", publicName: "events", isSignal: true, isRequired: false, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: true, isRequired: false, transformFunction: null }, selectedDate: { classPropertyName: "selectedDate", publicName: "selectedDate", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleEvents: { classPropertyName: "maxVisibleEvents", publicName: "maxVisibleEvents", isSignal: true, isRequired: false, transformFunction: null }, showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null }, labels: { classPropertyName: "labels", publicName: "labels", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedDateChange: "selectedDateChange", dateSelect: "dateSelect", eventClick: "eventClick" }, ngImport: i0, template: `
227
210
  <div
228
211
  class="neu-calendar"
229
212
  [class.neu-calendar--month]="view() === 'month'"
@@ -394,7 +377,7 @@ class NeuCalendarComponent {
394
377
  </div>
395
378
  `, isInline: true, styles: [".neu-calendar{display:grid;gap:var(--neu-space-4);padding:var(--neu-space-4);overflow:hidden;border-radius:calc(var(--neu-radius-lg) + 4px);background:radial-gradient(circle at top left,color-mix(in srgb,var(--neu-primary) 6%,transparent 94%),transparent 30%),linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 82%,var(--neu-surface) 18%),var(--neu-surface));border:1px solid color-mix(in srgb,var(--neu-border) 92%,transparent 8%);box-shadow:var(--neu-shadow-sm)}.neu-calendar--month .neu-calendar__weekdays,.neu-calendar--month .neu-calendar__month-grid{min-width:800px}.neu-calendar--month .neu-calendar__month-grid{grid-auto-rows:172px}.neu-calendar--month .neu-calendar__day{min-height:0;height:100%}.neu-calendar--month .neu-calendar__event-list{max-height:100%}.neu-calendar--week .neu-calendar__weekdays,.neu-calendar--week .neu-calendar__week-grid{min-width:0}.neu-calendar__viewport{display:grid;gap:8px;overflow-x:auto;overflow-y:hidden;min-width:0;scrollbar-gutter:stable}.neu-calendar__viewport{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--neu-border) 88%,transparent 12%) transparent}.neu-calendar__viewport::-webkit-scrollbar{height:8px}.neu-calendar__viewport::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px}.neu-calendar__header{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-4);flex-wrap:wrap}.neu-calendar__nav{display:inline-flex;align-items:center;gap:var(--neu-space-2)}.neu-calendar__title{margin:0;font-size:clamp(1.05rem,1vw + .9rem,1.35rem);font-weight:700;color:var(--neu-text);text-transform:capitalize}.neu-calendar__nav-btn{min-width:36px;height:36px;border:1px solid color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px;background:color-mix(in srgb,var(--neu-surface) 88%,var(--neu-surface-2) 12%);color:var(--neu-text);cursor:pointer;transition:transform var(--neu-transition),border-color var(--neu-transition),background var(--neu-transition)}.neu-calendar__nav-btn:hover,.neu-calendar__today:hover{transform:translateY(-1px);border-color:color-mix(in srgb,var(--neu-primary) 45%,var(--neu-border) 55%)}.neu-calendar__today{height:36px;padding:0 var(--neu-space-3);border:1px solid color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px;background:color-mix(in srgb,var(--neu-surface-2) 92%,var(--neu-surface) 8%);color:var(--neu-text);cursor:pointer;font-weight:600;transition:transform var(--neu-transition),border-color var(--neu-transition),background var(--neu-transition)}.neu-calendar__weekdays,.neu-calendar__month-grid,.neu-calendar__week-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;background:transparent;border:none;border-radius:0;overflow:visible}.neu-calendar__weekday{padding:0 8px 6px;text-align:center;background:transparent;color:var(--neu-text-muted);font-size:var(--neu-text-xs);font-weight:700;text-transform:uppercase;letter-spacing:.04em}.neu-calendar__day{min-height:110px;padding:10px;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-radius:18px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface) 96%,var(--neu-surface-2) 4%),color-mix(in srgb,var(--neu-surface) 88%,black 12%));display:grid;grid-template-rows:auto minmax(0,1fr);align-content:start;gap:var(--neu-space-2);cursor:pointer;text-align:left;box-sizing:border-box;min-width:0;overflow:hidden;box-shadow:0 12px 24px -24px color-mix(in srgb,black 32%,transparent 68%),inset 0 1px color-mix(in srgb,white 8%,transparent 92%);transition:background var(--neu-transition),box-shadow var(--neu-transition),border-color var(--neu-transition),transform var(--neu-transition)}.neu-calendar__day--outside{background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 90%,black 10%),color-mix(in srgb,var(--neu-surface-2) 82%,black 18%));box-shadow:none;opacity:.72}.neu-calendar__day--today{border-color:color-mix(in srgb,var(--neu-primary) 36%,var(--neu-border) 64%);background:linear-gradient(180deg,color-mix(in srgb,var(--neu-primary) 10%,var(--neu-surface) 90%),color-mix(in srgb,var(--neu-primary) 6%,var(--neu-surface) 94%));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--neu-primary) 22%,transparent 78%),0 12px 26px -24px color-mix(in srgb,var(--neu-primary) 18%,transparent 82%)}.neu-calendar__day--selected{background:linear-gradient(180deg,color-mix(in srgb,var(--neu-primary) 14%,var(--neu-surface) 86%),color-mix(in srgb,var(--neu-primary) 8%,var(--neu-surface) 92%));border-color:color-mix(in srgb,var(--neu-primary) 38%,var(--neu-border) 62%);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--neu-primary) 22%,transparent 78%),0 12px 24px -24px color-mix(in srgb,var(--neu-primary) 18%,transparent 82%)}.neu-calendar__day:hover,.neu-calendar__week-day:hover{background:color-mix(in srgb,var(--neu-primary) 4%,var(--neu-surface) 96%);border-color:color-mix(in srgb,var(--neu-primary) 22%,var(--neu-border) 78%);transform:translateY(-1px)}.neu-calendar__day-select:focus-visible,.neu-calendar__event:focus-visible,.neu-calendar__nav-btn:focus-visible,.neu-calendar__today:focus-visible{outline:2px solid color-mix(in srgb,var(--neu-primary) 75%,white 25%);outline-offset:-2px}.neu-calendar__day-top{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-2);min-width:0}.neu-calendar__day-select{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-2);width:100%;min-width:0;padding:0;border:0;border-radius:999px;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.neu-calendar__day-count{display:inline-flex;align-items:center;min-height:22px;padding:0 8px;border-radius:999px;background:color-mix(in srgb,var(--neu-primary) 10%,var(--neu-surface) 90%);color:var(--neu-text);font-size:11px;font-weight:700;flex-shrink:0}.neu-calendar__day-number{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:999px;font-size:var(--neu-text-sm);color:var(--neu-text)}.neu-calendar__day--selected .neu-calendar__day-number{background:color-mix(in srgb,var(--neu-primary) 78%,black 22%);color:#fff}.neu-calendar__event-list{display:grid;gap:4px;align-content:start;overflow-x:hidden;overflow-y:auto;min-height:0;min-width:0;width:100%;padding-right:2px;scrollbar-gutter:stable}.neu-calendar__event-list{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--neu-border) 88%,transparent 12%) transparent}.neu-calendar__event-list::-webkit-scrollbar{width:6px}.neu-calendar__event-list::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--neu-border) 88%,transparent 12%);border-radius:999px}.neu-calendar__event{display:grid;gap:2px;width:100%;justify-self:stretch;align-self:start;padding:8px;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-left:2px solid var(--neu-primary);border-radius:14px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 46%,var(--neu-surface) 54%),color-mix(in srgb,var(--neu-surface) 74%,black 26%));text-align:left;cursor:pointer;box-shadow:inset 0 1px color-mix(in srgb,white 6%,transparent 94%),0 10px 18px -20px color-mix(in srgb,black 34%,transparent 66%);min-width:0;box-sizing:border-box;max-width:100%;overflow:hidden}.neu-calendar__event--compact{gap:1px;padding:5px 6px;border-radius:12px;box-shadow:none}.neu-calendar__event--compact .neu-calendar__event-title,.neu-calendar__event--compact .neu-calendar__event-meta{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-calendar__event--compact .neu-calendar__event-title{font-size:11px}.neu-calendar__event--compact .neu-calendar__event-meta{font-size:10px}.neu-calendar__event--default{border-left-color:var(--neu-primary)}.neu-calendar__event--success{border-left-color:var(--neu-success)}.neu-calendar__event--warning{border-left-color:var(--neu-warning)}.neu-calendar__event--danger{border-left-color:var(--neu-danger)}.neu-calendar__event--info{border-left-color:#0ea5e9}.neu-calendar__event-title{font-size:var(--neu-text-xs);font-weight:700;color:var(--neu-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-calendar__event-meta{font-size:11px;color:var(--neu-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-calendar__more{display:inline-flex;align-items:center;justify-content:center;min-height:28px;width:100%;padding:0 8px;border-radius:12px;border:1px dashed color-mix(in srgb,var(--neu-border) 92%,transparent 8%);background:color-mix(in srgb,var(--neu-surface-2) 72%,var(--neu-surface) 28%);font-size:11px;color:var(--neu-text-muted);box-sizing:border-box}.neu-calendar__more--summary{font-weight:700;letter-spacing:.01em}.neu-calendar__agenda{display:grid;gap:var(--neu-space-3);padding:14px;min-width:0;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-radius:18px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface) 94%,var(--neu-surface-2) 6%),color-mix(in srgb,var(--neu-surface) 86%,black 14%));box-shadow:0 12px 24px -24px color-mix(in srgb,black 28%,transparent 72%),inset 0 1px color-mix(in srgb,white 8%,transparent 92%)}.neu-calendar__agenda-header{display:flex;align-items:center;justify-content:space-between;gap:var(--neu-space-3);flex-wrap:wrap}.neu-calendar__agenda-title{margin:0;font-size:var(--neu-text-base);font-weight:700;color:var(--neu-text);text-transform:capitalize}.neu-calendar__agenda-count{display:inline-flex;align-items:center;min-height:24px;padding:0 10px;border-radius:999px;background:color-mix(in srgb,var(--neu-primary) 10%,var(--neu-surface) 90%);color:var(--neu-text);font-size:11px;font-weight:700}.neu-calendar__agenda-list{display:grid;gap:8px}.neu-calendar__agenda-event{min-height:48px}.neu-calendar__agenda-empty{margin:0;color:var(--neu-text-muted);font-size:var(--neu-text-sm)}.neu-calendar__week-day{min-height:220px;border:1px solid color-mix(in srgb,var(--neu-border) 94%,transparent 6%);border-radius:18px;background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface) 94%,var(--neu-surface-2) 6%),color-mix(in srgb,var(--neu-surface) 84%,black 16%));display:grid;grid-template-rows:auto 1fr;text-align:left;box-sizing:border-box;min-width:0;overflow:hidden;box-shadow:0 12px 24px -24px color-mix(in srgb,black 32%,transparent 68%),inset 0 1px color-mix(in srgb,white 8%,transparent 92%)}.neu-calendar__week-head{display:grid;gap:4px;width:100%;padding:14px 12px 12px;border:0;border-bottom:1px solid color-mix(in srgb,var(--neu-border) 90%,transparent 10%);background:linear-gradient(180deg,color-mix(in srgb,var(--neu-surface-2) 78%,transparent 22%),transparent);border-radius:18px 18px 0 0;cursor:pointer}.neu-calendar__week-date{font-size:var(--neu-text-xs);color:var(--neu-text-muted)}.neu-calendar__week-events{scrollbar-width:none}.neu-calendar__week-events::-webkit-scrollbar{display:none}.neu-calendar__week-events{padding:12px;display:grid;align-content:start;gap:var(--neu-space-2);overflow:hidden;min-height:0;min-width:0}.neu-calendar__empty{margin:0;font-size:var(--neu-text-sm);color:var(--neu-text-muted);line-height:1.35}@media(max-width:860px){.neu-calendar{padding:var(--neu-space-3)}.neu-calendar--month .neu-calendar__weekdays,.neu-calendar--month .neu-calendar__month-grid{min-width:760px}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
396
379
  }
397
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuCalendarComponent, decorators: [{
380
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuCalendarComponent, decorators: [{
398
381
  type: Component,
399
382
  args: [{ selector: 'neu-calendar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: `
400
383
  <div
@@ -1 +1 @@
1
- {"version":3,"file":"neural-ui-core-calendar.mjs","sources":["../../../../projects/ui-core/calendar/neu-calendar.component.ts","../../../../projects/ui-core/calendar/neural-ui-core-calendar.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n effect,\n input,\n output,\n signal,\n} from '@angular/core';\n\nexport type NeuCalendarView = 'month' | 'week';\nexport type NeuCalendarEventVariant = 'default' | 'success' | 'warning' | 'danger' | 'info';\n\nexport interface NeuCalendarEvent {\n id: string;\n title: string;\n start: string | Date;\n end?: string | Date;\n description?: string;\n meta?: string;\n allDay?: boolean;\n variant?: NeuCalendarEventVariant;\n}\n\nexport interface NeuCalendarLabels {\n previousButtonAriaLabel: string;\n nextButtonAriaLabel: string;\n todayButton: string;\n allDay: string;\n noEvents: string;\n eventCount: (count: number) => string;\n moreEvents: (count: number) => string;\n}\n\nexport type NeuCalendarLabelOverrides = Partial<NeuCalendarLabels>;\n\ninterface NormalizedCalendarEvent extends Omit<NeuCalendarEvent, 'start' | 'end'> {\n start: Date;\n end?: Date;\n}\n\ninterface CalendarDayCell {\n date: Date;\n inCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n events: NormalizedCalendarEvent[];\n}\n\nfunction startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\nfunction sameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nfunction addDays(date: Date, amount: number): Date {\n const next = new Date(date);\n next.setDate(next.getDate() + amount);\n return next;\n}\n\nfunction addMonths(date: Date, amount: number): Date {\n return new Date(date.getFullYear(), date.getMonth() + amount, date.getDate());\n}\n\nfunction startOfWeek(date: Date): Date {\n const normalized = startOfDay(date);\n const day = normalized.getDay();\n const diff = day === 0 ? -6 : 1 - day;\n return addDays(normalized, diff);\n}\n\nconst EN_CALENDAR_LABELS: NeuCalendarLabels = {\n previousButtonAriaLabel: 'Previous',\n nextButtonAriaLabel: 'Next',\n todayButton: 'Today',\n allDay: 'All day',\n noEvents: 'No events',\n eventCount: (count) => `${count} ${count === 1 ? 'event' : 'events'}`,\n moreEvents: (count) => `+${count} more`,\n};\n\nconst ES_CALENDAR_LABELS: NeuCalendarLabels = {\n previousButtonAriaLabel: 'Anterior',\n nextButtonAriaLabel: 'Siguiente',\n todayButton: 'Hoy',\n allDay: 'Todo el dia',\n noEvents: 'Sin eventos',\n eventCount: (count) => `${count} evento${count === 1 ? '' : 's'}`,\n moreEvents: (count) => `+${count} mas`,\n};\n\nfunction defaultCalendarLocale(): string {\n return typeof navigator !== 'undefined' && navigator.language ? navigator.language : 'en-US';\n}\n\nfunction defaultCalendarLabels(locale: string): NeuCalendarLabels {\n return locale.toLowerCase().startsWith('es') ? ES_CALENDAR_LABELS : EN_CALENDAR_LABELS;\n}\n\n@Component({\n selector: 'neu-calendar',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"neu-calendar\"\n [class.neu-calendar--month]=\"view() === 'month'\"\n [class.neu-calendar--week]=\"view() === 'week'\"\n >\n @if (showHeader()) {\n <header class=\"neu-calendar__header\">\n <div>\n <h3 class=\"neu-calendar__title\">{{ currentLabel() }}</h3>\n </div>\n\n <div class=\"neu-calendar__nav\">\n <button\n type=\"button\"\n class=\"neu-calendar__nav-btn\"\n [attr.aria-label]=\"resolvedLabels().previousButtonAriaLabel\"\n (click)=\"prev()\"\n >\n ‹\n </button>\n <button type=\"button\" class=\"neu-calendar__today\" (click)=\"today()\">\n {{ resolvedLabels().todayButton }}\n </button>\n <button\n type=\"button\"\n class=\"neu-calendar__nav-btn\"\n [attr.aria-label]=\"resolvedLabels().nextButtonAriaLabel\"\n (click)=\"next()\"\n >\n ›\n </button>\n </div>\n </header>\n }\n\n <div class=\"neu-calendar__viewport\">\n <div class=\"neu-calendar__weekdays\">\n @for (weekday of weekdays(); track $index) {\n <div class=\"neu-calendar__weekday\">{{ weekday }}</div>\n }\n </div>\n\n @if (view() === 'month') {\n <div class=\"neu-calendar__month-grid\">\n @for (day of monthDays(); track day.date.toISOString()) {\n <article\n class=\"neu-calendar__day\"\n [attr.aria-label]=\"formatDayAriaLabel(day)\"\n [class.neu-calendar__day--outside]=\"!day.inCurrentMonth\"\n [class.neu-calendar__day--today]=\"day.isToday\"\n [class.neu-calendar__day--selected]=\"day.isSelected\"\n >\n <div class=\"neu-calendar__day-top\">\n <button\n type=\"button\"\n class=\"neu-calendar__day-select\"\n [attr.aria-label]=\"formatDayAriaLabel(day)\"\n (click)=\"selectDate(day.date)\"\n >\n <span class=\"neu-calendar__day-number\">{{ day.date.getDate() }}</span>\n @if (day.events.length > 0) {\n <span class=\"neu-calendar__day-count\">{{ day.events.length }}</span>\n }\n </button>\n </div>\n <div class=\"neu-calendar__event-list\">\n @for (event of monthVisibleEvents(day.events); track event.id) {\n <button\n type=\"button\"\n class=\"neu-calendar__event neu-calendar__event--compact\"\n [class]=\"\n 'neu-calendar__event neu-calendar__event--compact neu-calendar__event--' +\n (event.variant || 'default')\n \"\n [attr.title]=\"eventTooltip(event)\"\n [attr.aria-label]=\"eventTooltip(event)\"\n (click)=\"onEventClick($event, event)\"\n >\n <span class=\"neu-calendar__event-title\">{{ event.title }}</span>\n <span class=\"neu-calendar__event-meta\">{{ formatEventMeta(event) }}</span>\n </button>\n }\n </div>\n </article>\n }\n </div>\n } @else {\n <div class=\"neu-calendar__week-grid\">\n @for (day of weekDays(); track day.date.toISOString()) {\n <article\n class=\"neu-calendar__week-day\"\n [attr.aria-label]=\"formatDayAriaLabel(day)\"\n [class.neu-calendar__day--today]=\"day.isToday\"\n [class.neu-calendar__day--selected]=\"day.isSelected\"\n >\n <button\n type=\"button\"\n class=\"neu-calendar__week-head neu-calendar__day-select\"\n [attr.aria-label]=\"formatDayAriaLabel(day)\"\n (click)=\"selectDate(day.date)\"\n >\n <span class=\"neu-calendar__day-number\">{{ day.date.getDate() }}</span>\n <span class=\"neu-calendar__week-date\">{{ formatWeekDate(day.date) }}</span>\n </button>\n\n <div class=\"neu-calendar__week-events\">\n @if (day.events.length === 0) {\n <p class=\"neu-calendar__empty\">{{ resolvedLabels().noEvents }}</p>\n }\n\n @for (event of visibleEvents(day.events); track event.id) {\n <button\n type=\"button\"\n class=\"neu-calendar__event\"\n [class]=\"\n 'neu-calendar__event neu-calendar__event--' + (event.variant || 'default')\n \"\n [attr.title]=\"eventTooltip(event)\"\n [attr.aria-label]=\"eventTooltip(event)\"\n (click)=\"onEventClick($event, event)\"\n >\n <span class=\"neu-calendar__event-title\">{{ event.title }}</span>\n <span class=\"neu-calendar__event-meta\">{{ formatEventMeta(event) }}</span>\n </button>\n }\n\n @if (day.events.length > maxVisibleEvents()) {\n <span class=\"neu-calendar__more\">{{\n resolvedLabels().moreEvents(day.events.length - maxVisibleEvents())\n }}</span>\n }\n </div>\n </article>\n }\n </div>\n }\n </div>\n\n <section class=\"neu-calendar__agenda\" aria-live=\"polite\">\n <div class=\"neu-calendar__agenda-header\">\n <h4 class=\"neu-calendar__agenda-title\">{{ selectedAgendaLabel() }}</h4>\n <span class=\"neu-calendar__agenda-count\">{{\n resolvedLabels().eventCount(selectedDayEvents().length)\n }}</span>\n </div>\n\n @if (selectedDayEvents().length === 0) {\n <p class=\"neu-calendar__agenda-empty\">{{ resolvedLabels().noEvents }}</p>\n } @else {\n <div class=\"neu-calendar__agenda-list\">\n @for (event of selectedDayEvents(); track event.id) {\n <button\n type=\"button\"\n class=\"neu-calendar__agenda-event neu-calendar__event neu-calendar__event--{{\n event.variant || 'default'\n }}\"\n [attr.title]=\"eventTooltip(event)\"\n [attr.aria-label]=\"eventTooltip(event)\"\n (click)=\"onEventClick($event, event)\"\n >\n <span class=\"neu-calendar__event-title\">{{ event.title }}</span>\n <span class=\"neu-calendar__event-meta\">{{ formatEventMeta(event) }}</span>\n </button>\n }\n </div>\n }\n </section>\n </div>\n `,\n styleUrl: './neu-calendar.component.scss',\n})\nexport class NeuCalendarComponent {\n readonly events = input<NeuCalendarEvent[]>([]);\n readonly view = input<NeuCalendarView>('month');\n readonly selectedDate = input<Date | string>(new Date());\n readonly locale = input<string>(defaultCalendarLocale());\n readonly maxVisibleEvents = input<number>(3);\n readonly showHeader = input<boolean>(true);\n readonly labels = input<NeuCalendarLabelOverrides>({});\n\n readonly selectedDateChange = output<Date>();\n readonly dateSelect = output<Date>();\n readonly eventClick = output<NeuCalendarEvent>();\n\n private readonly _selectedDate = signal(startOfDay(new Date()));\n\n readonly resolvedLabels = computed<NeuCalendarLabels>(() => ({\n ...defaultCalendarLabels(this.locale()),\n ...this.labels(),\n }));\n\n readonly normalizedEvents = computed<NormalizedCalendarEvent[]>(() =>\n this.events()\n .map((event) => ({\n ...event,\n start: this.coerceDate(event.start),\n end: event.end ? this.coerceDate(event.end) : undefined,\n }))\n .sort((a, b) => a.start.getTime() - b.start.getTime()),\n );\n\n readonly weekdays = computed(() => {\n const base = startOfWeek(new Date(2026, 0, 5));\n return Array.from({ length: 7 }, (_, index) =>\n new Intl.DateTimeFormat(this.locale(), { weekday: 'short' }).format(addDays(base, index)),\n );\n });\n\n readonly monthDays = computed<CalendarDayCell[]>(() => {\n const selected = this._selectedDate();\n const firstDayOfMonth = new Date(selected.getFullYear(), selected.getMonth(), 1);\n const gridStart = startOfWeek(firstDayOfMonth);\n return Array.from({ length: 42 }, (_, index) => {\n const date = addDays(gridStart, index);\n return this.buildDayCell(date, date.getMonth() === selected.getMonth());\n });\n });\n\n readonly weekDays = computed<CalendarDayCell[]>(() => {\n const start = startOfWeek(this._selectedDate());\n return Array.from({ length: 7 }, (_, index) => this.buildDayCell(addDays(start, index), true));\n });\n\n readonly selectedDay = computed<CalendarDayCell>(() =>\n this.buildDayCell(this._selectedDate(), true),\n );\n\n readonly selectedDayEvents = computed<NormalizedCalendarEvent[]>(() => this.selectedDay().events);\n\n readonly selectedAgendaLabel = computed(() =>\n new Intl.DateTimeFormat(this.locale(), {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n }).format(this._selectedDate()),\n );\n\n readonly currentLabel = computed(() => {\n const selected = this._selectedDate();\n if (this.view() === 'month') {\n return new Intl.DateTimeFormat(this.locale(), { month: 'long', year: 'numeric' }).format(\n selected,\n );\n }\n\n const weekStart = startOfWeek(selected);\n const weekEnd = addDays(weekStart, 6);\n const formatter = new Intl.DateTimeFormat(this.locale(), { month: 'short', day: 'numeric' });\n return `${formatter.format(weekStart)} - ${formatter.format(weekEnd)}`;\n });\n\n constructor() {\n effect(() => {\n this._selectedDate.set(this.coerceDate(this.selectedDate()));\n });\n }\n\n prev(): void {\n this.selectDate(\n this.view() === 'month'\n ? addMonths(this._selectedDate(), -1)\n : addDays(this._selectedDate(), -7),\n );\n }\n\n next(): void {\n this.selectDate(\n this.view() === 'month'\n ? addMonths(this._selectedDate(), 1)\n : addDays(this._selectedDate(), 7),\n );\n }\n\n today(): void {\n this.selectDate(new Date());\n }\n\n selectDate(date: Date): void {\n const nextDate = startOfDay(date);\n this._selectedDate.set(nextDate);\n this.selectedDateChange.emit(nextDate);\n this.dateSelect.emit(nextDate);\n }\n\n visibleEvents(events: NormalizedCalendarEvent[]): NormalizedCalendarEvent[] {\n return events.slice(0, this.maxVisibleEvents());\n }\n\n monthVisibleEvents(events: NormalizedCalendarEvent[]): NormalizedCalendarEvent[] {\n return events.slice(0, this.monthVisibleEventLimit(events.length));\n }\n\n formatEventMeta(event: NormalizedCalendarEvent): string {\n if (event.meta) return event.meta;\n if (event.allDay) return this.resolvedLabels().allDay;\n return new Intl.DateTimeFormat(this.locale(), {\n hour: '2-digit',\n minute: '2-digit',\n }).format(event.start);\n }\n\n eventTooltip(event: NormalizedCalendarEvent): string {\n const meta = this.formatEventMeta(event);\n return meta ? `${event.title} · ${meta}` : event.title;\n }\n\n formatWeekDate(date: Date): string {\n return new Intl.DateTimeFormat(this.locale(), { month: 'short', day: 'numeric' }).format(date);\n }\n\n formatDayAriaLabel(day: CalendarDayCell): string {\n const dateLabel = new Intl.DateTimeFormat(this.locale(), {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n }).format(day.date);\n const eventLabel = this.resolvedLabels().eventCount(day.events.length);\n return `${dateLabel}, ${eventLabel}`;\n }\n\n onDaySpace(event: Event, date: Date): void {\n event.preventDefault();\n this.selectDate(date);\n }\n\n onDayKeydown(event: KeyboardEvent, date: Date): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n this.selectDate(date);\n return;\n }\n\n if (event.key === ' ' || event.key === 'Spacebar') {\n this.onDaySpace(event, date);\n }\n }\n\n onEventClick(event: MouseEvent, calendarEvent: NormalizedCalendarEvent): void {\n event.stopPropagation();\n this.eventClick.emit({\n ...calendarEvent,\n start: new Date(calendarEvent.start),\n end: calendarEvent.end ? new Date(calendarEvent.end) : undefined,\n });\n }\n\n private buildDayCell(date: Date, inCurrentMonth: boolean): CalendarDayCell {\n const normalizedDate = startOfDay(date);\n const today = startOfDay(new Date());\n return {\n date: normalizedDate,\n inCurrentMonth,\n isToday: sameDay(normalizedDate, today),\n isSelected: sameDay(normalizedDate, this._selectedDate()),\n events: this.normalizedEvents().filter((event) => sameDay(event.start, normalizedDate)),\n };\n }\n\n private monthVisibleEventLimit(eventCount: number): number {\n const limit = this.maxVisibleEvents();\n if (eventCount <= limit || limit <= 1) {\n return limit;\n }\n\n return limit - 1;\n }\n\n private coerceDate(value: Date | string): Date {\n const candidate = value instanceof Date ? value : new Date(value);\n return Number.isNaN(candidate.getTime()) ? startOfDay(new Date()) : startOfDay(candidate);\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-calendar.mjs","sources":["../../../../projects/ui-core/calendar/neu-calendar.component.ts","../../../../projects/ui-core/calendar/neural-ui-core-calendar.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n effect,\n input,\n output,\n signal,\n} from '@angular/core';\n\nexport type NeuCalendarView = 'month' | 'week';\nexport type NeuCalendarEventVariant = 'default' | 'success' | 'warning' | 'danger' | 'info';\n\nexport interface NeuCalendarEvent {\n id: string;\n title: string;\n start: string | Date;\n end?: string | Date;\n description?: string;\n meta?: string;\n allDay?: boolean;\n variant?: NeuCalendarEventVariant;\n}\n\nexport interface NeuCalendarLabels {\n previousButtonAriaLabel: string;\n nextButtonAriaLabel: string;\n todayButton: string;\n allDay: string;\n noEvents: string;\n eventCount: (count: number) => string;\n moreEvents: (count: number) => string;\n}\n\nexport type NeuCalendarLabelOverrides = Partial<NeuCalendarLabels>;\n\ninterface NormalizedCalendarEvent extends Omit<NeuCalendarEvent, 'start' | 'end'> {\n start: Date;\n end?: Date;\n}\n\ninterface CalendarDayCell {\n date: Date;\n inCurrentMonth: boolean;\n isToday: boolean;\n isSelected: boolean;\n events: NormalizedCalendarEvent[];\n}\n\nfunction startOfDay(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n}\n\nfunction sameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nfunction addDays(date: Date, amount: number): Date {\n const next = new Date(date);\n next.setDate(next.getDate() + amount);\n return next;\n}\n\nfunction addMonths(date: Date, amount: number): Date {\n return new Date(date.getFullYear(), date.getMonth() + amount, date.getDate());\n}\n\nfunction startOfWeek(date: Date): Date {\n const normalized = startOfDay(date);\n const day = normalized.getDay();\n const diff = day === 0 ? -6 : 1 - day;\n return addDays(normalized, diff);\n}\n\nconst EN_CALENDAR_LABELS: NeuCalendarLabels = {\n previousButtonAriaLabel: 'Previous',\n nextButtonAriaLabel: 'Next',\n todayButton: 'Today',\n allDay: 'All day',\n noEvents: 'No events',\n eventCount: (count) => `${count} ${count === 1 ? 'event' : 'events'}`,\n moreEvents: (count) => `+${count} more`,\n};\n\nconst ES_CALENDAR_LABELS: NeuCalendarLabels = {\n previousButtonAriaLabel: 'Anterior',\n nextButtonAriaLabel: 'Siguiente',\n todayButton: 'Hoy',\n allDay: 'Todo el dia',\n noEvents: 'Sin eventos',\n eventCount: (count) => `${count} evento${count === 1 ? '' : 's'}`,\n moreEvents: (count) => `+${count} mas`,\n};\n\nfunction defaultCalendarLocale(): string {\n return typeof navigator !== 'undefined' && navigator.language ? navigator.language : 'en-US';\n}\n\nfunction defaultCalendarLabels(locale: string): NeuCalendarLabels {\n return locale.toLowerCase().startsWith('es') ? ES_CALENDAR_LABELS : EN_CALENDAR_LABELS;\n}\n\n@Component({\n selector: 'neu-calendar',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div\n class=\"neu-calendar\"\n [class.neu-calendar--month]=\"view() === 'month'\"\n [class.neu-calendar--week]=\"view() === 'week'\"\n >\n @if (showHeader()) {\n <header class=\"neu-calendar__header\">\n <div>\n <h3 class=\"neu-calendar__title\">{{ currentLabel() }}</h3>\n </div>\n\n <div class=\"neu-calendar__nav\">\n <button\n type=\"button\"\n class=\"neu-calendar__nav-btn\"\n [attr.aria-label]=\"resolvedLabels().previousButtonAriaLabel\"\n (click)=\"prev()\"\n >\n ‹\n </button>\n <button type=\"button\" class=\"neu-calendar__today\" (click)=\"today()\">\n {{ resolvedLabels().todayButton }}\n </button>\n <button\n type=\"button\"\n class=\"neu-calendar__nav-btn\"\n [attr.aria-label]=\"resolvedLabels().nextButtonAriaLabel\"\n (click)=\"next()\"\n >\n ›\n </button>\n </div>\n </header>\n }\n\n <div class=\"neu-calendar__viewport\">\n <div class=\"neu-calendar__weekdays\">\n @for (weekday of weekdays(); track $index) {\n <div class=\"neu-calendar__weekday\">{{ weekday }}</div>\n }\n </div>\n\n @if (view() === 'month') {\n <div class=\"neu-calendar__month-grid\">\n @for (day of monthDays(); track day.date.toISOString()) {\n <article\n class=\"neu-calendar__day\"\n [attr.aria-label]=\"formatDayAriaLabel(day)\"\n [class.neu-calendar__day--outside]=\"!day.inCurrentMonth\"\n [class.neu-calendar__day--today]=\"day.isToday\"\n [class.neu-calendar__day--selected]=\"day.isSelected\"\n >\n <div class=\"neu-calendar__day-top\">\n <button\n type=\"button\"\n class=\"neu-calendar__day-select\"\n [attr.aria-label]=\"formatDayAriaLabel(day)\"\n (click)=\"selectDate(day.date)\"\n >\n <span class=\"neu-calendar__day-number\">{{ day.date.getDate() }}</span>\n @if (day.events.length > 0) {\n <span class=\"neu-calendar__day-count\">{{ day.events.length }}</span>\n }\n </button>\n </div>\n <div class=\"neu-calendar__event-list\">\n @for (event of monthVisibleEvents(day.events); track event.id) {\n <button\n type=\"button\"\n class=\"neu-calendar__event neu-calendar__event--compact\"\n [class]=\"\n 'neu-calendar__event neu-calendar__event--compact neu-calendar__event--' +\n (event.variant || 'default')\n \"\n [attr.title]=\"eventTooltip(event)\"\n [attr.aria-label]=\"eventTooltip(event)\"\n (click)=\"onEventClick($event, event)\"\n >\n <span class=\"neu-calendar__event-title\">{{ event.title }}</span>\n <span class=\"neu-calendar__event-meta\">{{ formatEventMeta(event) }}</span>\n </button>\n }\n </div>\n </article>\n }\n </div>\n } @else {\n <div class=\"neu-calendar__week-grid\">\n @for (day of weekDays(); track day.date.toISOString()) {\n <article\n class=\"neu-calendar__week-day\"\n [attr.aria-label]=\"formatDayAriaLabel(day)\"\n [class.neu-calendar__day--today]=\"day.isToday\"\n [class.neu-calendar__day--selected]=\"day.isSelected\"\n >\n <button\n type=\"button\"\n class=\"neu-calendar__week-head neu-calendar__day-select\"\n [attr.aria-label]=\"formatDayAriaLabel(day)\"\n (click)=\"selectDate(day.date)\"\n >\n <span class=\"neu-calendar__day-number\">{{ day.date.getDate() }}</span>\n <span class=\"neu-calendar__week-date\">{{ formatWeekDate(day.date) }}</span>\n </button>\n\n <div class=\"neu-calendar__week-events\">\n @if (day.events.length === 0) {\n <p class=\"neu-calendar__empty\">{{ resolvedLabels().noEvents }}</p>\n }\n\n @for (event of visibleEvents(day.events); track event.id) {\n <button\n type=\"button\"\n class=\"neu-calendar__event\"\n [class]=\"\n 'neu-calendar__event neu-calendar__event--' + (event.variant || 'default')\n \"\n [attr.title]=\"eventTooltip(event)\"\n [attr.aria-label]=\"eventTooltip(event)\"\n (click)=\"onEventClick($event, event)\"\n >\n <span class=\"neu-calendar__event-title\">{{ event.title }}</span>\n <span class=\"neu-calendar__event-meta\">{{ formatEventMeta(event) }}</span>\n </button>\n }\n\n @if (day.events.length > maxVisibleEvents()) {\n <span class=\"neu-calendar__more\">{{\n resolvedLabels().moreEvents(day.events.length - maxVisibleEvents())\n }}</span>\n }\n </div>\n </article>\n }\n </div>\n }\n </div>\n\n <section class=\"neu-calendar__agenda\" aria-live=\"polite\">\n <div class=\"neu-calendar__agenda-header\">\n <h4 class=\"neu-calendar__agenda-title\">{{ selectedAgendaLabel() }}</h4>\n <span class=\"neu-calendar__agenda-count\">{{\n resolvedLabels().eventCount(selectedDayEvents().length)\n }}</span>\n </div>\n\n @if (selectedDayEvents().length === 0) {\n <p class=\"neu-calendar__agenda-empty\">{{ resolvedLabels().noEvents }}</p>\n } @else {\n <div class=\"neu-calendar__agenda-list\">\n @for (event of selectedDayEvents(); track event.id) {\n <button\n type=\"button\"\n class=\"neu-calendar__agenda-event neu-calendar__event neu-calendar__event--{{\n event.variant || 'default'\n }}\"\n [attr.title]=\"eventTooltip(event)\"\n [attr.aria-label]=\"eventTooltip(event)\"\n (click)=\"onEventClick($event, event)\"\n >\n <span class=\"neu-calendar__event-title\">{{ event.title }}</span>\n <span class=\"neu-calendar__event-meta\">{{ formatEventMeta(event) }}</span>\n </button>\n }\n </div>\n }\n </section>\n </div>\n `,\n styleUrl: './neu-calendar.component.scss',\n})\nexport class NeuCalendarComponent {\n readonly events = input<NeuCalendarEvent[]>([]);\n readonly view = input<NeuCalendarView>('month');\n readonly selectedDate = input<Date | string>(new Date());\n readonly locale = input<string>(defaultCalendarLocale());\n readonly maxVisibleEvents = input<number>(3);\n readonly showHeader = input<boolean>(true);\n readonly labels = input<NeuCalendarLabelOverrides>({});\n\n readonly selectedDateChange = output<Date>();\n readonly dateSelect = output<Date>();\n readonly eventClick = output<NeuCalendarEvent>();\n\n private readonly _selectedDate = signal(startOfDay(new Date()));\n\n readonly resolvedLabels = computed<NeuCalendarLabels>(() => ({\n ...defaultCalendarLabels(this.locale()),\n ...this.labels(),\n }));\n\n readonly normalizedEvents = computed<NormalizedCalendarEvent[]>(() =>\n this.events()\n .map((event) => ({\n ...event,\n start: this.coerceDate(event.start),\n end: event.end ? this.coerceDate(event.end) : undefined,\n }))\n .sort((a, b) => a.start.getTime() - b.start.getTime()),\n );\n\n readonly weekdays = computed(() => {\n const base = startOfWeek(new Date(2026, 0, 5));\n return Array.from({ length: 7 }, (_, index) =>\n new Intl.DateTimeFormat(this.locale(), { weekday: 'short' }).format(addDays(base, index)),\n );\n });\n\n readonly monthDays = computed<CalendarDayCell[]>(() => {\n const selected = this._selectedDate();\n const firstDayOfMonth = new Date(selected.getFullYear(), selected.getMonth(), 1);\n const gridStart = startOfWeek(firstDayOfMonth);\n return Array.from({ length: 42 }, (_, index) => {\n const date = addDays(gridStart, index);\n return this.buildDayCell(date, date.getMonth() === selected.getMonth());\n });\n });\n\n readonly weekDays = computed<CalendarDayCell[]>(() => {\n const start = startOfWeek(this._selectedDate());\n return Array.from({ length: 7 }, (_, index) => this.buildDayCell(addDays(start, index), true));\n });\n\n readonly selectedDay = computed<CalendarDayCell>(() =>\n this.buildDayCell(this._selectedDate(), true),\n );\n\n readonly selectedDayEvents = computed<NormalizedCalendarEvent[]>(() => this.selectedDay().events);\n\n readonly selectedAgendaLabel = computed(() =>\n new Intl.DateTimeFormat(this.locale(), {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n }).format(this._selectedDate()),\n );\n\n readonly currentLabel = computed(() => {\n const selected = this._selectedDate();\n if (this.view() === 'month') {\n return new Intl.DateTimeFormat(this.locale(), { month: 'long', year: 'numeric' }).format(\n selected,\n );\n }\n\n const weekStart = startOfWeek(selected);\n const weekEnd = addDays(weekStart, 6);\n const formatter = new Intl.DateTimeFormat(this.locale(), { month: 'short', day: 'numeric' });\n return `${formatter.format(weekStart)} - ${formatter.format(weekEnd)}`;\n });\n\n constructor() {\n effect(() => {\n this._selectedDate.set(this.coerceDate(this.selectedDate()));\n });\n }\n\n prev(): void {\n this.selectDate(\n this.view() === 'month'\n ? addMonths(this._selectedDate(), -1)\n : addDays(this._selectedDate(), -7),\n );\n }\n\n next(): void {\n this.selectDate(\n this.view() === 'month'\n ? addMonths(this._selectedDate(), 1)\n : addDays(this._selectedDate(), 7),\n );\n }\n\n today(): void {\n this.selectDate(new Date());\n }\n\n selectDate(date: Date): void {\n const nextDate = startOfDay(date);\n this._selectedDate.set(nextDate);\n this.selectedDateChange.emit(nextDate);\n this.dateSelect.emit(nextDate);\n }\n\n visibleEvents(events: NormalizedCalendarEvent[]): NormalizedCalendarEvent[] {\n return events.slice(0, this.maxVisibleEvents());\n }\n\n monthVisibleEvents(events: NormalizedCalendarEvent[]): NormalizedCalendarEvent[] {\n return events.slice(0, this.monthVisibleEventLimit(events.length));\n }\n\n formatEventMeta(event: NormalizedCalendarEvent): string {\n if (event.meta) return event.meta;\n if (event.allDay) return this.resolvedLabels().allDay;\n return new Intl.DateTimeFormat(this.locale(), {\n hour: '2-digit',\n minute: '2-digit',\n }).format(event.start);\n }\n\n eventTooltip(event: NormalizedCalendarEvent): string {\n const meta = this.formatEventMeta(event);\n return meta ? `${event.title} · ${meta}` : event.title;\n }\n\n formatWeekDate(date: Date): string {\n return new Intl.DateTimeFormat(this.locale(), { month: 'short', day: 'numeric' }).format(date);\n }\n\n formatDayAriaLabel(day: CalendarDayCell): string {\n const dateLabel = new Intl.DateTimeFormat(this.locale(), {\n weekday: 'long',\n month: 'long',\n day: 'numeric',\n year: 'numeric',\n }).format(day.date);\n const eventLabel = this.resolvedLabels().eventCount(day.events.length);\n return `${dateLabel}, ${eventLabel}`;\n }\n\n onDaySpace(event: Event, date: Date): void {\n event.preventDefault();\n this.selectDate(date);\n }\n\n onDayKeydown(event: KeyboardEvent, date: Date): void {\n if (event.key === 'Enter') {\n event.preventDefault();\n this.selectDate(date);\n return;\n }\n\n if (event.key === ' ' || event.key === 'Spacebar') {\n this.onDaySpace(event, date);\n }\n }\n\n onEventClick(event: MouseEvent, calendarEvent: NormalizedCalendarEvent): void {\n event.stopPropagation();\n this.eventClick.emit({\n ...calendarEvent,\n start: new Date(calendarEvent.start),\n end: calendarEvent.end ? new Date(calendarEvent.end) : undefined,\n });\n }\n\n private buildDayCell(date: Date, inCurrentMonth: boolean): CalendarDayCell {\n const normalizedDate = startOfDay(date);\n const today = startOfDay(new Date());\n return {\n date: normalizedDate,\n inCurrentMonth,\n isToday: sameDay(normalizedDate, today),\n isSelected: sameDay(normalizedDate, this._selectedDate()),\n events: this.normalizedEvents().filter((event) => sameDay(event.start, normalizedDate)),\n };\n }\n\n private monthVisibleEventLimit(eventCount: number): number {\n const limit = this.maxVisibleEvents();\n if (eventCount <= limit || limit <= 1) {\n return limit;\n }\n\n return limit - 1;\n }\n\n private coerceDate(value: Date | string): Date {\n const candidate = value instanceof Date ? value : new Date(value);\n return Number.isNaN(candidate.getTime()) ? startOfDay(new Date()) : startOfDay(candidate);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -16,26 +16,21 @@ import { input, computed, ChangeDetectionStrategy, ViewEncapsulation, Component
16
16
  */
17
17
  class NeuCardComponent {
18
18
  /** Espaciado interior del cuerpo / Inner body padding */
19
- padding = input('md', /* @ts-ignore */
20
- ...(ngDevMode ? [{ debugName: "padding" }] : /* istanbul ignore next */ []));
19
+ padding = input('md', ...(ngDevMode ? [{ debugName: "padding" }] : /* istanbul ignore next */ []));
21
20
  /** Efecto hover con elevación de sombra / Hover effect with shadow elevation */
22
- hoverable = input(false, /* @ts-ignore */
23
- ...(ngDevMode ? [{ debugName: "hoverable" }] : /* istanbul ignore next */ []));
21
+ hoverable = input(false, ...(ngDevMode ? [{ debugName: "hoverable" }] : /* istanbul ignore next */ []));
24
22
  /** Borde con acento de color primario / Border with primary color accent */
25
- bordered = input(false, /* @ts-ignore */
26
- ...(ngDevMode ? [{ debugName: "bordered" }] : /* istanbul ignore next */ []));
23
+ bordered = input(false, ...(ngDevMode ? [{ debugName: "bordered" }] : /* istanbul ignore next */ []));
27
24
  /** Card compacta sin bordes ni sombras / Compact card without borders or shadows */
28
- flat = input(false, /* @ts-ignore */
29
- ...(ngDevMode ? [{ debugName: "flat" }] : /* istanbul ignore next */ []));
25
+ flat = input(false, ...(ngDevMode ? [{ debugName: "flat" }] : /* istanbul ignore next */ []));
30
26
  hostClasses = computed(() => ({
31
27
  'neu-card': true,
32
28
  'neu-card--hoverable': this.hoverable(),
33
29
  'neu-card--bordered': this.bordered(),
34
30
  'neu-card--flat': this.flat(),
35
- }), /* @ts-ignore */
36
- ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
37
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
38
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.4", type: NeuCardComponent, isStandalone: true, selector: "neu-card", inputs: { padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, hoverable: { classPropertyName: "hoverable", publicName: "hoverable", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, flat: { classPropertyName: "flat", publicName: "flat", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: `
31
+ }), ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
32
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
33
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.17", type: NeuCardComponent, isStandalone: true, selector: "neu-card", inputs: { padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, hoverable: { classPropertyName: "hoverable", publicName: "hoverable", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, flat: { classPropertyName: "flat", publicName: "flat", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: `
39
34
  <div class="neu-card__inner">
40
35
  <div class="neu-card__header">
41
36
  <ng-content select="[neu-card-header]" />
@@ -49,7 +44,7 @@ class NeuCardComponent {
49
44
  </div>
50
45
  `, isInline: true, styles: [".neu-card{display:block;background:var(--neu-surface);border:1px solid var(--neu-border);border-radius:var(--neu-radius-lg);box-shadow:var(--neu-shadow-sm);overflow:visible;transition:box-shadow var(--neu-transition),border-color var(--neu-transition)}.neu-card--hoverable{cursor:pointer}.neu-card--hoverable:hover{box-shadow:var(--neu-shadow-lg);border-color:var(--neu-border-hover)}.neu-card--bordered{border-color:var(--neu-primary)}.neu-card--flat{box-shadow:none;border-color:var(--neu-border)}.neu-card--flat:hover{box-shadow:none}.neu-card__header{padding:var(--neu-space-4) var(--neu-space-5);border-bottom:1px solid var(--neu-border);font-size:var(--neu-text-sm);font-weight:600;color:var(--neu-text)}.neu-card__header:empty,.neu-card__header:not(:has(*)){display:none}.neu-card__body--none{padding:0}.neu-card__body--sm{padding:var(--neu-space-3) var(--neu-space-4)}.neu-card__body--md{padding:var(--neu-space-5)}.neu-card__body--lg{padding:var(--neu-space-6) var(--neu-space-8)}.neu-card__footer{padding:var(--neu-space-4) var(--neu-space-5);border-top:1px solid var(--neu-border);background:var(--neu-surface-2);display:flex;align-items:center;gap:var(--neu-space-3)}.neu-card__footer:empty,.neu-card__footer:not(:has(*)){display:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
51
46
  }
52
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuCardComponent, decorators: [{
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuCardComponent, decorators: [{
53
48
  type: Component,
54
49
  args: [{ selector: 'neu-card', imports: [], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { '[class]': 'hostClasses()' }, template: `
55
50
  <div class="neu-card__inner">
@@ -1 +1 @@
1
- {"version":3,"file":"neural-ui-core-card.mjs","sources":["../../../../projects/ui-core/card/neu-card.component.ts","../../../../projects/ui-core/card/neural-ui-core-card.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\n\nexport type NeuCardPadding = 'none' | 'sm' | 'md' | 'lg';\n\n/**\n * NeuralUI Card Component\n *\n * Contenedor con sombras y bordes Neural. Soporta header, body y footer\n * via content projection.\n *\n * Uso:\n * <neu-card>\n * <div neu-card-header>Título</div>\n * <p>Contenido</p>\n * <div neu-card-footer>Acciones</div>\n * </neu-card>\n */\n@Component({\n selector: 'neu-card',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'hostClasses()' },\n template: `\n <div class=\"neu-card__inner\">\n <div class=\"neu-card__header\">\n <ng-content select=\"[neu-card-header]\" />\n </div>\n <div class=\"neu-card__body\" [class]=\"'neu-card__body--' + padding()\">\n <ng-content />\n </div>\n <div class=\"neu-card__footer\">\n <ng-content select=\"[neu-card-footer]\" />\n </div>\n </div>\n `,\n styleUrl: './neu-card.component.scss',\n})\nexport class NeuCardComponent {\n /** Espaciado interior del cuerpo / Inner body padding */\n padding = input<NeuCardPadding>('md');\n\n /** Efecto hover con elevación de sombra / Hover effect with shadow elevation */\n hoverable = input<boolean>(false);\n\n /** Borde con acento de color primario / Border with primary color accent */\n bordered = input<boolean>(false);\n\n /** Card compacta sin bordes ni sombras / Compact card without borders or shadows */\n flat = input<boolean>(false);\n\n readonly hostClasses = computed(() => ({\n 'neu-card': true,\n 'neu-card--hoverable': this.hoverable(),\n 'neu-card--bordered': this.bordered(),\n 'neu-card--flat': this.flat(),\n }));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;AAUA;;;;;;;;;;;;AAYG;MAsBU,gBAAgB,CAAA;;IAE3B,OAAO,GAAG,KAAK,CAAiB,IAAI;gFAAC;;IAGrC,SAAS,GAAG,KAAK,CAAU,KAAK;kFAAC;;IAGjC,QAAQ,GAAG,KAAK,CAAU,KAAK;iFAAC;;IAGhC,IAAI,GAAG,KAAK,CAAU,KAAK;6EAAC;AAEnB,IAAA,WAAW,GAAG,QAAQ,CAAC,OAAO;AACrC,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,qBAAqB,EAAE,IAAI,CAAC,SAAS,EAAE;AACvC,QAAA,oBAAoB,EAAE,IAAI,CAAC,QAAQ,EAAE;AACrC,QAAA,gBAAgB,EAAE,IAAI,CAAC,IAAI,EAAE;KAC9B,CAAC;oFAAC;uGAlBQ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAfjB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,muCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAGU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBArB5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,WACX,EAAE,EAAA,aAAA,EACI,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,QACzC,EAAE,SAAS,EAAE,eAAe,EAAE,EAAA,QAAA,EAC1B;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,muCAAA,CAAA,EAAA;;;ACzCH;;AAEG;;;;"}
1
+ {"version":3,"file":"neural-ui-core-card.mjs","sources":["../../../../projects/ui-core/card/neu-card.component.ts","../../../../projects/ui-core/card/neural-ui-core-card.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\n\nexport type NeuCardPadding = 'none' | 'sm' | 'md' | 'lg';\n\n/**\n * NeuralUI Card Component\n *\n * Contenedor con sombras y bordes Neural. Soporta header, body y footer\n * via content projection.\n *\n * Uso:\n * <neu-card>\n * <div neu-card-header>Título</div>\n * <p>Contenido</p>\n * <div neu-card-footer>Acciones</div>\n * </neu-card>\n */\n@Component({\n selector: 'neu-card',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class]': 'hostClasses()' },\n template: `\n <div class=\"neu-card__inner\">\n <div class=\"neu-card__header\">\n <ng-content select=\"[neu-card-header]\" />\n </div>\n <div class=\"neu-card__body\" [class]=\"'neu-card__body--' + padding()\">\n <ng-content />\n </div>\n <div class=\"neu-card__footer\">\n <ng-content select=\"[neu-card-footer]\" />\n </div>\n </div>\n `,\n styleUrl: './neu-card.component.scss',\n})\nexport class NeuCardComponent {\n /** Espaciado interior del cuerpo / Inner body padding */\n padding = input<NeuCardPadding>('md');\n\n /** Efecto hover con elevación de sombra / Hover effect with shadow elevation */\n hoverable = input<boolean>(false);\n\n /** Borde con acento de color primario / Border with primary color accent */\n bordered = input<boolean>(false);\n\n /** Card compacta sin bordes ni sombras / Compact card without borders or shadows */\n flat = input<boolean>(false);\n\n readonly hostClasses = computed(() => ({\n 'neu-card': true,\n 'neu-card--hoverable': this.hoverable(),\n 'neu-card--bordered': this.bordered(),\n 'neu-card--flat': this.flat(),\n }));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;AAUA;;;;;;;;;;;;AAYG;MAsBU,gBAAgB,CAAA;;AAE3B,IAAA,OAAO,GAAG,KAAK,CAAiB,IAAI,8EAAC;;AAGrC,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,gFAAC;;AAGjC,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,+EAAC;;AAGhC,IAAA,IAAI,GAAG,KAAK,CAAU,KAAK,2EAAC;AAEnB,IAAA,WAAW,GAAG,QAAQ,CAAC,OAAO;AACrC,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,qBAAqB,EAAE,IAAI,CAAC,SAAS,EAAE;AACvC,QAAA,oBAAoB,EAAE,IAAI,CAAC,QAAQ,EAAE;AACrC,QAAA,gBAAgB,EAAE,IAAI,CAAC,IAAI,EAAE;AAC9B,KAAA,CAAC,kFAAC;wGAlBQ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAfjB;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,muCAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FAGU,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBArB5B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,UAAU,WACX,EAAE,EAAA,aAAA,EACI,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,QACzC,EAAE,SAAS,EAAE,eAAe,EAAE,EAAA,QAAA,EAC1B;;;;;;;;;;;;AAYT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,muCAAA,CAAA,EAAA;;;ACzCH;;AAEG;;;;"}