@neural-ui/core 1.6.1 → 1.6.2

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 (135) hide show
  1. package/fesm2022/neural-ui-core-accordion.mjs +7 -11
  2. package/fesm2022/neural-ui-core-accordion.mjs.map +1 -1
  3. package/fesm2022/neural-ui-core-alert.mjs +14 -25
  4. package/fesm2022/neural-ui-core-alert.mjs.map +1 -1
  5. package/fesm2022/neural-ui-core-autocomplete.mjs +28 -53
  6. package/fesm2022/neural-ui-core-autocomplete.mjs.map +1 -1
  7. package/fesm2022/neural-ui-core-avatar.mjs +13 -23
  8. package/fesm2022/neural-ui-core-avatar.mjs.map +1 -1
  9. package/fesm2022/neural-ui-core-badge.mjs +9 -15
  10. package/fesm2022/neural-ui-core-badge.mjs.map +1 -1
  11. package/fesm2022/neural-ui-core-block-ui.mjs +11 -16
  12. package/fesm2022/neural-ui-core-block-ui.mjs.map +1 -1
  13. package/fesm2022/neural-ui-core-breadcrumb.mjs +6 -8
  14. package/fesm2022/neural-ui-core-breadcrumb.mjs.map +1 -1
  15. package/fesm2022/neural-ui-core-button.mjs +16 -29
  16. package/fesm2022/neural-ui-core-button.mjs.map +1 -1
  17. package/fesm2022/neural-ui-core-calendar.mjs +20 -37
  18. package/fesm2022/neural-ui-core-calendar.mjs.map +1 -1
  19. package/fesm2022/neural-ui-core-card.mjs +8 -13
  20. package/fesm2022/neural-ui-core-card.mjs.map +1 -1
  21. package/fesm2022/neural-ui-core-chart.mjs +24 -45
  22. package/fesm2022/neural-ui-core-chart.mjs.map +1 -1
  23. package/fesm2022/neural-ui-core-checkbox.mjs +9 -15
  24. package/fesm2022/neural-ui-core-checkbox.mjs.map +1 -1
  25. package/fesm2022/neural-ui-core-chip.mjs +13 -23
  26. package/fesm2022/neural-ui-core-chip.mjs.map +1 -1
  27. package/fesm2022/neural-ui-core-code-block.mjs +17 -31
  28. package/fesm2022/neural-ui-core-code-block.mjs.map +1 -1
  29. package/fesm2022/neural-ui-core-color-picker.mjs +11 -19
  30. package/fesm2022/neural-ui-core-color-picker.mjs.map +1 -1
  31. package/fesm2022/neural-ui-core-command-palette.mjs +11 -16
  32. package/fesm2022/neural-ui-core-command-palette.mjs.map +1 -1
  33. package/fesm2022/neural-ui-core-confirm-dialog.mjs +6 -6
  34. package/fesm2022/neural-ui-core-confirm-dialog.mjs.map +1 -1
  35. package/fesm2022/neural-ui-core-context-menu.mjs +9 -12
  36. package/fesm2022/neural-ui-core-context-menu.mjs.map +1 -1
  37. package/fesm2022/neural-ui-core-dashboard-grid.mjs +7 -11
  38. package/fesm2022/neural-ui-core-dashboard-grid.mjs.map +1 -1
  39. package/fesm2022/neural-ui-core-date-input.mjs +57 -111
  40. package/fesm2022/neural-ui-core-date-input.mjs.map +1 -1
  41. package/fesm2022/neural-ui-core-divider.mjs +5 -7
  42. package/fesm2022/neural-ui-core-divider.mjs.map +1 -1
  43. package/fesm2022/neural-ui-core-empty-state.mjs +8 -13
  44. package/fesm2022/neural-ui-core-empty-state.mjs.map +1 -1
  45. package/fesm2022/neural-ui-core-filter-bar.mjs +11 -19
  46. package/fesm2022/neural-ui-core-filter-bar.mjs.map +1 -1
  47. package/fesm2022/neural-ui-core-icon.mjs +7 -11
  48. package/fesm2022/neural-ui-core-icon.mjs.map +1 -1
  49. package/fesm2022/neural-ui-core-image-gallery.mjs +13 -23
  50. package/fesm2022/neural-ui-core-image-gallery.mjs.map +1 -1
  51. package/fesm2022/neural-ui-core-image-viewer.mjs +14 -22
  52. package/fesm2022/neural-ui-core-image-viewer.mjs.map +1 -1
  53. package/fesm2022/neural-ui-core-input-otp.mjs +11 -19
  54. package/fesm2022/neural-ui-core-input-otp.mjs.map +1 -1
  55. package/fesm2022/neural-ui-core-input.mjs +35 -67
  56. package/fesm2022/neural-ui-core-input.mjs.map +1 -1
  57. package/fesm2022/neural-ui-core-kanban.mjs +9 -15
  58. package/fesm2022/neural-ui-core-kanban.mjs.map +1 -1
  59. package/fesm2022/neural-ui-core-knob.mjs +22 -41
  60. package/fesm2022/neural-ui-core-knob.mjs.map +1 -1
  61. package/fesm2022/neural-ui-core-meter-group.mjs +13 -23
  62. package/fesm2022/neural-ui-core-meter-group.mjs.map +1 -1
  63. package/fesm2022/neural-ui-core-modal.mjs +11 -16
  64. package/fesm2022/neural-ui-core-modal.mjs.map +1 -1
  65. package/fesm2022/neural-ui-core-multiselect.mjs +39 -72
  66. package/fesm2022/neural-ui-core-multiselect.mjs.map +1 -1
  67. package/fesm2022/neural-ui-core-nav.mjs +13 -22
  68. package/fesm2022/neural-ui-core-nav.mjs.map +1 -1
  69. package/fesm2022/neural-ui-core-notification-center.mjs +9 -12
  70. package/fesm2022/neural-ui-core-notification-center.mjs.map +1 -1
  71. package/fesm2022/neural-ui-core-number-input.mjs +19 -35
  72. package/fesm2022/neural-ui-core-number-input.mjs.map +1 -1
  73. package/fesm2022/neural-ui-core-pagination.mjs +9 -15
  74. package/fesm2022/neural-ui-core-pagination.mjs.map +1 -1
  75. package/fesm2022/neural-ui-core-popover.mjs +14 -22
  76. package/fesm2022/neural-ui-core-popover.mjs.map +1 -1
  77. package/fesm2022/neural-ui-core-progress-bar.mjs +11 -19
  78. package/fesm2022/neural-ui-core-progress-bar.mjs.map +1 -1
  79. package/fesm2022/neural-ui-core-radio.mjs +15 -24
  80. package/fesm2022/neural-ui-core-radio.mjs.map +1 -1
  81. package/fesm2022/neural-ui-core-rating.mjs +8 -13
  82. package/fesm2022/neural-ui-core-rating.mjs.map +1 -1
  83. package/fesm2022/neural-ui-core-rich-text-editor.mjs +28 -53
  84. package/fesm2022/neural-ui-core-rich-text-editor.mjs.map +1 -1
  85. package/fesm2022/neural-ui-core-scheduler-gantt.mjs +22 -41
  86. package/fesm2022/neural-ui-core-scheduler-gantt.mjs.map +1 -1
  87. package/fesm2022/neural-ui-core-select.mjs +43 -77
  88. package/fesm2022/neural-ui-core-select.mjs.map +1 -1
  89. package/fesm2022/neural-ui-core-sidebar.mjs +12 -21
  90. package/fesm2022/neural-ui-core-sidebar.mjs.map +1 -1
  91. package/fesm2022/neural-ui-core-skeleton.mjs +7 -11
  92. package/fesm2022/neural-ui-core-skeleton.mjs.map +1 -1
  93. package/fesm2022/neural-ui-core-slider.mjs +13 -23
  94. package/fesm2022/neural-ui-core-slider.mjs.map +1 -1
  95. package/fesm2022/neural-ui-core-spinner.mjs +10 -17
  96. package/fesm2022/neural-ui-core-spinner.mjs.map +1 -1
  97. package/fesm2022/neural-ui-core-split-button.mjs +15 -27
  98. package/fesm2022/neural-ui-core-split-button.mjs.map +1 -1
  99. package/fesm2022/neural-ui-core-splitter.mjs +6 -9
  100. package/fesm2022/neural-ui-core-splitter.mjs.map +1 -1
  101. package/fesm2022/neural-ui-core-stats-card.mjs +11 -19
  102. package/fesm2022/neural-ui-core-stats-card.mjs.map +1 -1
  103. package/fesm2022/neural-ui-core-stepper.mjs +8 -13
  104. package/fesm2022/neural-ui-core-stepper.mjs.map +1 -1
  105. package/fesm2022/neural-ui-core-switch.mjs +9 -15
  106. package/fesm2022/neural-ui-core-switch.mjs.map +1 -1
  107. package/fesm2022/neural-ui-core-table.mjs +124 -242
  108. package/fesm2022/neural-ui-core-table.mjs.map +1 -1
  109. package/fesm2022/neural-ui-core-tabs.mjs +18 -30
  110. package/fesm2022/neural-ui-core-tabs.mjs.map +1 -1
  111. package/fesm2022/neural-ui-core-textarea.mjs +23 -43
  112. package/fesm2022/neural-ui-core-textarea.mjs.map +1 -1
  113. package/fesm2022/neural-ui-core-timeline-grid.mjs +12 -21
  114. package/fesm2022/neural-ui-core-timeline-grid.mjs.map +1 -1
  115. package/fesm2022/neural-ui-core-timeline.mjs +4 -5
  116. package/fesm2022/neural-ui-core-timeline.mjs.map +1 -1
  117. package/fesm2022/neural-ui-core-toast.mjs +8 -10
  118. package/fesm2022/neural-ui-core-toast.mjs.map +1 -1
  119. package/fesm2022/neural-ui-core-toggle-button-group.mjs +10 -17
  120. package/fesm2022/neural-ui-core-toggle-button-group.mjs.map +1 -1
  121. package/fesm2022/neural-ui-core-toolbar.mjs +8 -13
  122. package/fesm2022/neural-ui-core-toolbar.mjs.map +1 -1
  123. package/fesm2022/neural-ui-core-tooltip.mjs +11 -16
  124. package/fesm2022/neural-ui-core-tooltip.mjs.map +1 -1
  125. package/fesm2022/neural-ui-core-tree-table.mjs +30 -57
  126. package/fesm2022/neural-ui-core-tree-table.mjs.map +1 -1
  127. package/fesm2022/neural-ui-core-tree.mjs +17 -31
  128. package/fesm2022/neural-ui-core-tree.mjs.map +1 -1
  129. package/fesm2022/neural-ui-core-uploader.mjs +47 -91
  130. package/fesm2022/neural-ui-core-uploader.mjs.map +1 -1
  131. package/fesm2022/neural-ui-core-url-state.mjs +5 -7
  132. package/fesm2022/neural-ui-core-url-state.mjs.map +1 -1
  133. package/fesm2022/neural-ui-core-virtual-list.mjs +19 -32
  134. package/fesm2022/neural-ui-core-virtual-list.mjs.map +1 -1
  135. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"neural-ui-core-chart.mjs","sources":["../../../../projects/ui-core/chart/neu-chart.component.ts","../../../../projects/ui-core/chart/neural-ui-core-chart.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\nimport { ChartComponent } from 'ng-apexcharts';\n\nexport type NeuChartType =\n | 'line'\n | 'area'\n | 'bar'\n | 'bar-stacked'\n | 'bar-horizontal'\n | 'bar-horizontal-stacked'\n | 'pareto'\n | 'donut'\n | 'pie'\n | 'radialBar';\n\nexport interface NeuChartSeries {\n name: string;\n data: number[];\n}\n\n/** Paleta por defecto Neural-Blue / Default Neural-Blue palette */\nconst DEFAULT_COLORS = ['#007aff', '#5856d6', '#34c759', '#ff9f0a', '#ff3b30', '#64748b'];\n\n/** Calcula la línea acumulada porcentual para un diagrama de Pareto. / Calculates the cumulative percentage line for a Pareto chart. */\nfunction computeParetoCumulative(data: number[]): number[] {\n const total = data.reduce((s, v) => s + Math.abs(v), 0);\n if (total === 0) return data.map(() => 0);\n let cum = 0;\n return data.map((v) => {\n cum += Math.abs(v);\n return Math.round((cum / total) * 1000) / 10;\n });\n}\n\n/**\n * NeuChart — Wrapper reactivo de ApexCharts con estética Neural-Blue.\n *\n * Tipos soportados:\n * line · area · bar · bar-stacked · bar-horizontal · bar-horizontal-stacked · pareto · donut · pie · radialBar\n *\n * Uso:\n * <neu-chart\n * type=\"bar-stacked\"\n * [series]=\"series()\"\n * [categories]=\"months()\"\n * height=\"280\"\n * />\n */\n@Component({\n selector: 'neu-chart',\n imports: [ChartComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'neu-chart' },\n template: `\n <apx-chart\n [chart]=\"chartConfig()\"\n [series]=\"resolvedSeries()\"\n [labels]=\"labels()\"\n [xaxis]=\"xaxisConfig()\"\n [yaxis]=\"yaxisConfig()\"\n [colors]=\"resolvedColors()\"\n [stroke]=\"strokeConfig()\"\n [fill]=\"fillConfig()\"\n [dataLabels]=\"dataLabelsConfig()\"\n [grid]=\"gridConfig()\"\n [legend]=\"legendConfig()\"\n [tooltip]=\"tooltipConfig()\"\n [plotOptions]=\"plotOptionsConfig()\"\n />\n `,\n styleUrl: './neu-chart.component.scss',\n})\nexport class NeuChartComponent {\n /** Tipo de gráfica. / Chart type. */\n type = input<NeuChartType>('line');\n /** Series para gráficas de ejes (line, area, bar, pareto…). / Series for axis-based charts (line, area, bar, pareto…). */\n series = input<NeuChartSeries[]>([]);\n /** Series para gráficas sin ejes (donut, pie). / Series for non-axis charts (donut, pie). */\n pieSeries = input<number[]>([]);\n /** Etiquetas del eje X. / X-axis labels. */\n categories = input<string[]>([]);\n /** Etiquetas para donut/pie. / Labels for donut/pie. */\n labels = input<string[]>([]);\n /** Altura en px. / Height in px. */\n height = input<number>(280);\n /** Colores custom. Si no se proveen, usa la paleta Neural-Blue. / Custom colors. If not provided, uses the Neural-Blue palette. */\n colors = input<string[]>([]);\n /** Muestra/oculta las etiquetas de datos. / Shows/hides data labels. */\n showDataLabels = input<boolean>(false);\n /** Título de la gráfica. / Chart title. */\n title = input<string>('');\n\n // --------------------------------------------------\n // Helpers privados\n // --------------------------------------------------\n\n private get _isBar(): boolean {\n return ['bar', 'bar-stacked', 'bar-horizontal', 'bar-horizontal-stacked', 'pareto'].includes(\n this.type(),\n );\n }\n\n private get _isStacked(): boolean {\n return ['bar-stacked', 'bar-horizontal-stacked'].includes(this.type());\n }\n\n private get _isHorizontal(): boolean {\n return ['bar-horizontal', 'bar-horizontal-stacked'].includes(this.type());\n }\n\n // --------------------------------------------------\n // Configs computadas\n // --------------------------------------------------\n\n protected readonly resolvedColors = computed(() =>\n this.colors().length ? this.colors() : DEFAULT_COLORS,\n );\n\n protected readonly resolvedSeries = computed((): any => {\n const t = this.type();\n if (t === 'donut' || t === 'pie' || t === 'radialBar') return this.pieSeries();\n if (t === 'pareto') {\n const first = this.series()[0];\n if (!first) return [];\n const cumulative = computeParetoCumulative(first.data);\n return [\n { name: first.name, type: 'bar', data: first.data },\n { name: 'Cumulative %', type: 'line', data: cumulative },\n ];\n }\n return this.series();\n });\n\n protected readonly chartConfig = computed(() => {\n const t = this.type();\n const apexType: string =\n t === 'bar-stacked' || t === 'bar-horizontal' || t === 'bar-horizontal-stacked'\n ? 'bar'\n : t === 'pareto'\n ? 'bar'\n : t;\n return {\n type: apexType as any,\n height: this.height(),\n stacked: this._isStacked,\n fontFamily: 'Inter, system-ui, -apple-system, sans-serif',\n foreColor: '#64748b',\n background: 'transparent',\n toolbar: { show: false },\n sparkline: { enabled: false },\n zoom: { enabled: false },\n animations: { enabled: true, speed: 500 },\n };\n });\n\n protected readonly xaxisConfig = computed(() => ({\n categories: this.categories(),\n labels: {\n style: { fontSize: '12px', fontFamily: 'inherit', colors: '#94a3b8' },\n },\n axisBorder: { show: false },\n axisTicks: { show: false },\n }));\n\n protected readonly yaxisConfig = computed((): any => {\n const labelStyle = { fontSize: '12px', fontFamily: 'inherit', colors: '#94a3b8' };\n if (this.type() === 'pareto') {\n return [\n { labels: { style: labelStyle } },\n {\n opposite: true,\n min: 0,\n max: 100,\n tickAmount: 5,\n labels: {\n style: labelStyle,\n formatter: (v: number) => `${v}%`,\n },\n },\n ];\n }\n return { labels: { style: labelStyle } };\n });\n\n protected readonly strokeConfig = computed(() => {\n const t = this.type();\n if (t === 'pareto') {\n return {\n show: true,\n width: [0, 2],\n curve: ['straight', 'smooth'] as any,\n lineCap: 'round' as const,\n };\n }\n if (this._isBar || t === 'donut' || t === 'pie' || t === 'radialBar') return { show: false };\n return { curve: 'smooth' as const, width: 2 };\n });\n\n protected readonly fillConfig = computed(() => {\n const t = this.type();\n if (t === 'area') {\n return {\n type: 'gradient' as const,\n gradient: { shadeIntensity: 1, opacityFrom: 0.35, opacityTo: 0.02, stops: [0, 100] },\n };\n }\n return { opacity: 0.85 };\n });\n\n protected readonly dataLabelsConfig = computed(() => ({\n enabled: this.showDataLabels(),\n style: { fontSize: '11px', fontFamily: 'inherit' },\n }));\n\n protected readonly gridConfig = computed(() => ({\n borderColor: '#e2e8f0',\n strokeDashArray: 4,\n xaxis: { lines: { show: false } },\n yaxis: { lines: { show: true } },\n padding: { left: 4, right: 4 },\n }));\n\n protected readonly legendConfig = computed(() => ({\n position: 'bottom' as const,\n fontFamily: 'inherit',\n fontSize: '12px',\n markers: { size: 6 },\n itemMargin: { horizontal: 8 },\n }));\n\n protected readonly tooltipConfig = computed(() => {\n const base = {\n theme: 'light' as const,\n style: { fontSize: '12px', fontFamily: 'inherit' },\n x: { show: true },\n };\n if (this.type() === 'pareto') {\n return {\n ...base,\n y: [\n { formatter: (v: number) => String(v) },\n { formatter: (v: number) => `${v.toFixed(1)}%` },\n ],\n };\n }\n return base;\n });\n\n protected readonly plotOptionsConfig = computed(() => {\n const t = this.type();\n if (t === 'donut' || t === 'pie') {\n return { pie: { donut: { size: '68%' } } };\n }\n if (t === 'radialBar') {\n return {\n radialBar: {\n hollow: { margin: 4, size: '55%' },\n track: { background: 'var(--neu-surface-2, #f1f5f9)', strokeWidth: '100%', margin: 4 },\n dataLabels: {\n name: {\n fontSize: '14px',\n fontFamily: 'inherit',\n color: 'var(--neu-text-secondary, #64748b)',\n offsetY: -6,\n },\n value: {\n fontSize: '20px',\n fontFamily: 'inherit',\n fontWeight: 600,\n color: 'var(--neu-text-primary, #0f172a)',\n offsetY: 4,\n formatter: (v: number) => `${Math.round(v)}%`,\n },\n total: {\n show: true,\n label: 'Average',\n fontSize: '13px',\n fontFamily: 'inherit',\n color: 'var(--neu-text-secondary, #64748b)',\n formatter: (w: any) => {\n const vals: number[] = w.globals.series;\n const avg = vals.reduce((s: number, v: number) => s + v, 0) / vals.length;\n return `${Math.round(avg)}%`;\n },\n },\n },\n },\n };\n }\n if (this._isBar || t === 'pareto') {\n return {\n bar: {\n horizontal: this._isHorizontal,\n borderRadius: this._isStacked ? 0 : 4,\n columnWidth: '60%',\n barHeight: '70%',\n dataLabels: { total: { enabled: false } },\n },\n };\n }\n return {};\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;AA0BA;AACA,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;AAEzF;AACA,SAAS,uBAAuB,CAAC,IAAc,EAAA;IAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvD,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,GAAG,GAAG,CAAC;AACX,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AACpB,QAAA,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAClB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE;AAC9C,IAAA,CAAC,CAAC;AACJ;AAEA;;;;;;;;;;;;;AAaG;MA0BU,iBAAiB,CAAA;;IAE5B,IAAI,GAAG,KAAK,CAAe,MAAM;6EAAC;;IAElC,MAAM,GAAG,KAAK,CAAmB,EAAE;+EAAC;;IAEpC,SAAS,GAAG,KAAK,CAAW,EAAE;kFAAC;;IAE/B,UAAU,GAAG,KAAK,CAAW,EAAE;mFAAC;;IAEhC,MAAM,GAAG,KAAK,CAAW,EAAE;+EAAC;;IAE5B,MAAM,GAAG,KAAK,CAAS,GAAG;+EAAC;;IAE3B,MAAM,GAAG,KAAK,CAAW,EAAE;+EAAC;;IAE5B,cAAc,GAAG,KAAK,CAAU,KAAK;uFAAC;;IAEtC,KAAK,GAAG,KAAK,CAAS,EAAE;8EAAC;;;;AAMzB,IAAA,IAAY,MAAM,GAAA;AAChB,QAAA,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAC1F,IAAI,CAAC,IAAI,EAAE,CACZ;IACH;AAEA,IAAA,IAAY,UAAU,GAAA;AACpB,QAAA,OAAO,CAAC,aAAa,EAAE,wBAAwB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACxE;AAEA,IAAA,IAAY,aAAa,GAAA;AACvB,QAAA,OAAO,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC3E;;;;IAMmB,cAAc,GAAG,QAAQ,CAAC,MAC3C,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,cAAc;uFACtD;AAEkB,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAU;AACrD,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,WAAW;AAAE,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE;AAC9E,QAAA,IAAI,CAAC,KAAK,QAAQ,EAAE;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,EAAE;YACrB,MAAM,UAAU,GAAG,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC;YACtD,OAAO;AACL,gBAAA,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE;gBACnD,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE;aACzD;QACH;AACA,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE;IACtB,CAAC;uFAAC;AAEiB,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC7C,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;AACrB,QAAA,MAAM,QAAQ,GACZ,CAAC,KAAK,aAAa,IAAI,CAAC,KAAK,gBAAgB,IAAI,CAAC,KAAK;AACrD,cAAE;cACA,CAAC,KAAK;AACN,kBAAE;kBACA,CAAC;QACT,OAAO;AACL,YAAA,IAAI,EAAE,QAAe;AACrB,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;YACrB,OAAO,EAAE,IAAI,CAAC,UAAU;AACxB,YAAA,UAAU,EAAE,6CAA6C;AACzD,YAAA,SAAS,EAAE,SAAS;AACpB,YAAA,UAAU,EAAE,aAAa;AACzB,YAAA,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;AACxB,YAAA,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;AAC7B,YAAA,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;YACxB,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;SAC1C;IACH,CAAC;oFAAC;AAEiB,IAAA,WAAW,GAAG,QAAQ,CAAC,OAAO;AAC/C,QAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,QAAA,MAAM,EAAE;AACN,YAAA,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;AACtE,SAAA;AACD,QAAA,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;AAC3B,QAAA,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;KAC3B,CAAC;oFAAC;AAEgB,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAU;AAClD,QAAA,MAAM,UAAU,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE;AACjF,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,EAAE;YAC5B,OAAO;AACL,gBAAA,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;AACjC,gBAAA;AACE,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,GAAG,EAAE,CAAC;AACN,oBAAA,GAAG,EAAE,GAAG;AACR,oBAAA,UAAU,EAAE,CAAC;AACb,oBAAA,MAAM,EAAE;AACN,wBAAA,KAAK,EAAE,UAAU;wBACjB,SAAS,EAAE,CAAC,CAAS,KAAK,CAAA,EAAG,CAAC,CAAA,CAAA,CAAG;AAClC,qBAAA;AACF,iBAAA;aACF;QACH;QACA,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;IAC1C,CAAC;oFAAC;AAEiB,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,KAAK,QAAQ,EAAE;YAClB,OAAO;AACL,gBAAA,IAAI,EAAE,IAAI;AACV,gBAAA,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACb,gBAAA,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAQ;AACpC,gBAAA,OAAO,EAAE,OAAgB;aAC1B;QACH;AACA,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,WAAW;AAAE,YAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;QAC5F,OAAO,EAAE,KAAK,EAAE,QAAiB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC/C,CAAC;qFAAC;AAEiB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC5C,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,KAAK,MAAM,EAAE;YAChB,OAAO;AACL,gBAAA,IAAI,EAAE,UAAmB;gBACzB,QAAQ,EAAE,EAAE,cAAc,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;aACrF;QACH;AACA,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAC1B,CAAC;mFAAC;AAEiB,IAAA,gBAAgB,GAAG,QAAQ,CAAC,OAAO;AACpD,QAAA,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE;QAC9B,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE;KACnD,CAAC;yFAAC;AAEgB,IAAA,UAAU,GAAG,QAAQ,CAAC,OAAO;AAC9C,QAAA,WAAW,EAAE,SAAS;AACtB,QAAA,eAAe,EAAE,CAAC;QAClB,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACjC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;QAChC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;KAC/B,CAAC;mFAAC;AAEgB,IAAA,YAAY,GAAG,QAAQ,CAAC,OAAO;AAChD,QAAA,QAAQ,EAAE,QAAiB;AAC3B,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;AACpB,QAAA,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;KAC9B,CAAC;qFAAC;AAEgB,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC/C,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,KAAK,EAAE,OAAgB;YACvB,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE;AAClD,YAAA,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;SAClB;AACD,QAAA,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,EAAE;YAC5B,OAAO;AACL,gBAAA,GAAG,IAAI;AACP,gBAAA,CAAC,EAAE;oBACD,EAAE,SAAS,EAAE,CAAC,CAAS,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE;AACvC,oBAAA,EAAE,SAAS,EAAE,CAAC,CAAS,KAAK,CAAA,EAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE;AACjD,iBAAA;aACF;QACH;AACA,QAAA,OAAO,IAAI;IACb,CAAC;sFAAC;AAEiB,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AACnD,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK,EAAE;AAChC,YAAA,OAAO,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;QAC5C;AACA,QAAA,IAAI,CAAC,KAAK,WAAW,EAAE;YACrB,OAAO;AACL,gBAAA,SAAS,EAAE;oBACT,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;AAClC,oBAAA,KAAK,EAAE,EAAE,UAAU,EAAE,+BAA+B,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE;AACtF,oBAAA,UAAU,EAAE;AACV,wBAAA,IAAI,EAAE;AACJ,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,UAAU,EAAE,SAAS;AACrB,4BAAA,KAAK,EAAE,oCAAoC;4BAC3C,OAAO,EAAE,CAAC,CAAC;AACZ,yBAAA;AACD,wBAAA,KAAK,EAAE;AACL,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,UAAU,EAAE,SAAS;AACrB,4BAAA,UAAU,EAAE,GAAG;AACf,4BAAA,KAAK,EAAE,kCAAkC;AACzC,4BAAA,OAAO,EAAE,CAAC;AACV,4BAAA,SAAS,EAAE,CAAC,CAAS,KAAK,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG;AAC9C,yBAAA;AACD,wBAAA,KAAK,EAAE;AACL,4BAAA,IAAI,EAAE,IAAI;AACV,4BAAA,KAAK,EAAE,SAAS;AAChB,4BAAA,QAAQ,EAAE,MAAM;AAChB,4BAAA,UAAU,EAAE,SAAS;AACrB,4BAAA,KAAK,EAAE,oCAAoC;AAC3C,4BAAA,SAAS,EAAE,CAAC,CAAM,KAAI;AACpB,gCAAA,MAAM,IAAI,GAAa,CAAC,CAAC,OAAO,CAAC,MAAM;gCACvC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,CAAS,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM;gCACzE,OAAO,CAAA,EAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG;4BAC9B,CAAC;AACF,yBAAA;AACF,qBAAA;AACF,iBAAA;aACF;QACH;QACA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,QAAQ,EAAE;YACjC,OAAO;AACL,gBAAA,GAAG,EAAE;oBACH,UAAU,EAAE,IAAI,CAAC,aAAa;oBAC9B,YAAY,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC;AACrC,oBAAA,WAAW,EAAE,KAAK;AAClB,oBAAA,SAAS,EAAE,KAAK;oBAChB,UAAU,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;AAC1C,iBAAA;aACF;QACH;AACA,QAAA,OAAO,EAAE;IACX,CAAC;0FAAC;uGArOS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,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,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,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,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAnBlB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,2pCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EApBS,cAAc,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,aAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,aAAA,EAAA,YAAA,EAAA,OAAA,EAAA,OAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;2FAuBb,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAzB7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,WACZ,CAAC,cAAc,CAAC,EAAA,aAAA,EACV,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAA,QAAA,EAClB;;;;;;;;;;;;;;;;AAgBT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,2pCAAA,CAAA,EAAA;;;AC5EH;;AAEG;;;;"}
1
+ {"version":3,"file":"neural-ui-core-chart.mjs","sources":["../../../../projects/ui-core/chart/neu-chart.component.ts","../../../../projects/ui-core/chart/neural-ui-core-chart.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n} from '@angular/core';\nimport { ChartComponent } from 'ng-apexcharts';\n\nexport type NeuChartType =\n | 'line'\n | 'area'\n | 'bar'\n | 'bar-stacked'\n | 'bar-horizontal'\n | 'bar-horizontal-stacked'\n | 'pareto'\n | 'donut'\n | 'pie'\n | 'radialBar';\n\nexport interface NeuChartSeries {\n name: string;\n data: number[];\n}\n\n/** Paleta por defecto Neural-Blue / Default Neural-Blue palette */\nconst DEFAULT_COLORS = ['#007aff', '#5856d6', '#34c759', '#ff9f0a', '#ff3b30', '#64748b'];\n\n/** Calcula la línea acumulada porcentual para un diagrama de Pareto. / Calculates the cumulative percentage line for a Pareto chart. */\nfunction computeParetoCumulative(data: number[]): number[] {\n const total = data.reduce((s, v) => s + Math.abs(v), 0);\n if (total === 0) return data.map(() => 0);\n let cum = 0;\n return data.map((v) => {\n cum += Math.abs(v);\n return Math.round((cum / total) * 1000) / 10;\n });\n}\n\n/**\n * NeuChart — Wrapper reactivo de ApexCharts con estética Neural-Blue.\n *\n * Tipos soportados:\n * line · area · bar · bar-stacked · bar-horizontal · bar-horizontal-stacked · pareto · donut · pie · radialBar\n *\n * Uso:\n * <neu-chart\n * type=\"bar-stacked\"\n * [series]=\"series()\"\n * [categories]=\"months()\"\n * height=\"280\"\n * />\n */\n@Component({\n selector: 'neu-chart',\n imports: [ChartComponent],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'neu-chart' },\n template: `\n <apx-chart\n [chart]=\"chartConfig()\"\n [series]=\"resolvedSeries()\"\n [labels]=\"labels()\"\n [xaxis]=\"xaxisConfig()\"\n [yaxis]=\"yaxisConfig()\"\n [colors]=\"resolvedColors()\"\n [stroke]=\"strokeConfig()\"\n [fill]=\"fillConfig()\"\n [dataLabels]=\"dataLabelsConfig()\"\n [grid]=\"gridConfig()\"\n [legend]=\"legendConfig()\"\n [tooltip]=\"tooltipConfig()\"\n [plotOptions]=\"plotOptionsConfig()\"\n />\n `,\n styleUrl: './neu-chart.component.scss',\n})\nexport class NeuChartComponent {\n /** Tipo de gráfica. / Chart type. */\n type = input<NeuChartType>('line');\n /** Series para gráficas de ejes (line, area, bar, pareto…). / Series for axis-based charts (line, area, bar, pareto…). */\n series = input<NeuChartSeries[]>([]);\n /** Series para gráficas sin ejes (donut, pie). / Series for non-axis charts (donut, pie). */\n pieSeries = input<number[]>([]);\n /** Etiquetas del eje X. / X-axis labels. */\n categories = input<string[]>([]);\n /** Etiquetas para donut/pie. / Labels for donut/pie. */\n labels = input<string[]>([]);\n /** Altura en px. / Height in px. */\n height = input<number>(280);\n /** Colores custom. Si no se proveen, usa la paleta Neural-Blue. / Custom colors. If not provided, uses the Neural-Blue palette. */\n colors = input<string[]>([]);\n /** Muestra/oculta las etiquetas de datos. / Shows/hides data labels. */\n showDataLabels = input<boolean>(false);\n /** Título de la gráfica. / Chart title. */\n title = input<string>('');\n\n // --------------------------------------------------\n // Helpers privados\n // --------------------------------------------------\n\n private get _isBar(): boolean {\n return ['bar', 'bar-stacked', 'bar-horizontal', 'bar-horizontal-stacked', 'pareto'].includes(\n this.type(),\n );\n }\n\n private get _isStacked(): boolean {\n return ['bar-stacked', 'bar-horizontal-stacked'].includes(this.type());\n }\n\n private get _isHorizontal(): boolean {\n return ['bar-horizontal', 'bar-horizontal-stacked'].includes(this.type());\n }\n\n // --------------------------------------------------\n // Configs computadas\n // --------------------------------------------------\n\n protected readonly resolvedColors = computed(() =>\n this.colors().length ? this.colors() : DEFAULT_COLORS,\n );\n\n protected readonly resolvedSeries = computed((): any => {\n const t = this.type();\n if (t === 'donut' || t === 'pie' || t === 'radialBar') return this.pieSeries();\n if (t === 'pareto') {\n const first = this.series()[0];\n if (!first) return [];\n const cumulative = computeParetoCumulative(first.data);\n return [\n { name: first.name, type: 'bar', data: first.data },\n { name: 'Cumulative %', type: 'line', data: cumulative },\n ];\n }\n return this.series();\n });\n\n protected readonly chartConfig = computed(() => {\n const t = this.type();\n const apexType: string =\n t === 'bar-stacked' || t === 'bar-horizontal' || t === 'bar-horizontal-stacked'\n ? 'bar'\n : t === 'pareto'\n ? 'bar'\n : t;\n return {\n type: apexType as any,\n height: this.height(),\n stacked: this._isStacked,\n fontFamily: 'Inter, system-ui, -apple-system, sans-serif',\n foreColor: '#64748b',\n background: 'transparent',\n toolbar: { show: false },\n sparkline: { enabled: false },\n zoom: { enabled: false },\n animations: { enabled: true, speed: 500 },\n };\n });\n\n protected readonly xaxisConfig = computed(() => ({\n categories: this.categories(),\n labels: {\n style: { fontSize: '12px', fontFamily: 'inherit', colors: '#94a3b8' },\n },\n axisBorder: { show: false },\n axisTicks: { show: false },\n }));\n\n protected readonly yaxisConfig = computed((): any => {\n const labelStyle = { fontSize: '12px', fontFamily: 'inherit', colors: '#94a3b8' };\n if (this.type() === 'pareto') {\n return [\n { labels: { style: labelStyle } },\n {\n opposite: true,\n min: 0,\n max: 100,\n tickAmount: 5,\n labels: {\n style: labelStyle,\n formatter: (v: number) => `${v}%`,\n },\n },\n ];\n }\n return { labels: { style: labelStyle } };\n });\n\n protected readonly strokeConfig = computed(() => {\n const t = this.type();\n if (t === 'pareto') {\n return {\n show: true,\n width: [0, 2],\n curve: ['straight', 'smooth'] as any,\n lineCap: 'round' as const,\n };\n }\n if (this._isBar || t === 'donut' || t === 'pie' || t === 'radialBar') return { show: false };\n return { curve: 'smooth' as const, width: 2 };\n });\n\n protected readonly fillConfig = computed(() => {\n const t = this.type();\n if (t === 'area') {\n return {\n type: 'gradient' as const,\n gradient: { shadeIntensity: 1, opacityFrom: 0.35, opacityTo: 0.02, stops: [0, 100] },\n };\n }\n return { opacity: 0.85 };\n });\n\n protected readonly dataLabelsConfig = computed(() => ({\n enabled: this.showDataLabels(),\n style: { fontSize: '11px', fontFamily: 'inherit' },\n }));\n\n protected readonly gridConfig = computed(() => ({\n borderColor: '#e2e8f0',\n strokeDashArray: 4,\n xaxis: { lines: { show: false } },\n yaxis: { lines: { show: true } },\n padding: { left: 4, right: 4 },\n }));\n\n protected readonly legendConfig = computed(() => ({\n position: 'bottom' as const,\n fontFamily: 'inherit',\n fontSize: '12px',\n markers: { size: 6 },\n itemMargin: { horizontal: 8 },\n }));\n\n protected readonly tooltipConfig = computed(() => {\n const base = {\n theme: 'light' as const,\n style: { fontSize: '12px', fontFamily: 'inherit' },\n x: { show: true },\n };\n if (this.type() === 'pareto') {\n return {\n ...base,\n y: [\n { formatter: (v: number) => String(v) },\n { formatter: (v: number) => `${v.toFixed(1)}%` },\n ],\n };\n }\n return base;\n });\n\n protected readonly plotOptionsConfig = computed(() => {\n const t = this.type();\n if (t === 'donut' || t === 'pie') {\n return { pie: { donut: { size: '68%' } } };\n }\n if (t === 'radialBar') {\n return {\n radialBar: {\n hollow: { margin: 4, size: '55%' },\n track: { background: 'var(--neu-surface-2, #f1f5f9)', strokeWidth: '100%', margin: 4 },\n dataLabels: {\n name: {\n fontSize: '14px',\n fontFamily: 'inherit',\n color: 'var(--neu-text-secondary, #64748b)',\n offsetY: -6,\n },\n value: {\n fontSize: '20px',\n fontFamily: 'inherit',\n fontWeight: 600,\n color: 'var(--neu-text-primary, #0f172a)',\n offsetY: 4,\n formatter: (v: number) => `${Math.round(v)}%`,\n },\n total: {\n show: true,\n label: 'Average',\n fontSize: '13px',\n fontFamily: 'inherit',\n color: 'var(--neu-text-secondary, #64748b)',\n formatter: (w: any) => {\n const vals: number[] = w.globals.series;\n const avg = vals.reduce((s: number, v: number) => s + v, 0) / vals.length;\n return `${Math.round(avg)}%`;\n },\n },\n },\n },\n };\n }\n if (this._isBar || t === 'pareto') {\n return {\n bar: {\n horizontal: this._isHorizontal,\n borderRadius: this._isStacked ? 0 : 4,\n columnWidth: '60%',\n barHeight: '70%',\n dataLabels: { total: { enabled: false } },\n },\n };\n }\n return {};\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -12,20 +12,14 @@ let _neuCheckboxIdSeq = 0;
12
12
  * <neu-checkbox label="Acepto los términos" [formControl]="termsCtrl" />
13
13
  */
14
14
  class NeuCheckboxComponent {
15
- label = input('', /* @ts-ignore */
16
- ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
17
- name = input('', /* @ts-ignore */
18
- ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
19
- disabled = input(false, /* @ts-ignore */
20
- ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
15
+ label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
16
+ name = input('', ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
17
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
21
18
  _id = `neu-checkbox-${_neuCheckboxIdSeq++}`;
22
- _checked = signal(false, /* @ts-ignore */
23
- ...(ngDevMode ? [{ debugName: "_checked" }] : /* istanbul ignore next */ []));
19
+ _checked = signal(false, ...(ngDevMode ? [{ debugName: "_checked" }] : /* istanbul ignore next */ []));
24
20
  /** Estado disabled interno — combina el input `disabled` con el CVA setDisabledState / Internal disabled state — combines the `disabled` input with CVA setDisabledState */
25
- _cvaDisabled = signal(false, /* @ts-ignore */
26
- ...(ngDevMode ? [{ debugName: "_cvaDisabled" }] : /* istanbul ignore next */ []));
27
- _isDisabled = computed(() => this.disabled() || this._cvaDisabled(), /* @ts-ignore */
28
- ...(ngDevMode ? [{ debugName: "_isDisabled" }] : /* istanbul ignore next */ []));
21
+ _cvaDisabled = signal(false, ...(ngDevMode ? [{ debugName: "_cvaDisabled" }] : /* istanbul ignore next */ []));
22
+ _isDisabled = computed(() => this.disabled() || this._cvaDisabled(), ...(ngDevMode ? [{ debugName: "_isDisabled" }] : /* istanbul ignore next */ []));
29
23
  _onChange = () => { };
30
24
  _onTouched = () => { };
31
25
  onChange(event) {
@@ -48,8 +42,8 @@ class NeuCheckboxComponent {
48
42
  setDisabledState(isDisabled) {
49
43
  this._cvaDisabled.set(isDisabled);
50
44
  }
51
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuCheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
52
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NeuCheckboxComponent, isStandalone: true, selector: "neu-checkbox", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "neu-checkbox-host" }, providers: [
45
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuCheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
46
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: NeuCheckboxComponent, isStandalone: true, selector: "neu-checkbox", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "neu-checkbox-host" }, providers: [
53
47
  {
54
48
  provide: NG_VALUE_ACCESSOR,
55
49
  useExisting: forwardRef(() => NeuCheckboxComponent),
@@ -91,7 +85,7 @@ class NeuCheckboxComponent {
91
85
  </label>
92
86
  `, isInline: true, styles: [".neu-checkbox-host{display:inline-block}.neu-checkbox{display:inline-flex;align-items:center;gap:var(--neu-space-3);cursor:pointer;-webkit-user-select:none;user-select:none}.neu-checkbox--disabled{opacity:.5;pointer-events:none}.neu-checkbox__input{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.neu-checkbox__input:focus-visible+.neu-checkbox__box{outline:2px solid var(--neu-primary);outline-offset:2px}.neu-checkbox__box{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:18px;height:18px;background:var(--neu-surface);border:1.5px solid var(--neu-border-hover);border-radius:var(--neu-radius-sm);transition:background-color var(--neu-transition),border-color var(--neu-transition),box-shadow var(--neu-transition)}.neu-checkbox__box--checked{background:var(--neu-primary);border-color:var(--neu-primary);box-shadow:var(--neu-focus-ring-strong)}.neu-checkbox__check{width:12px;height:10px;opacity:0;transform:scale(.6);transition:opacity .15s ease,transform .15s ease}.neu-checkbox__check--visible{opacity:1;transform:scale(1)}.neu-checkbox__label{font-family:var(--neu-font-sans);font-size:var(--neu-text-sm);color:var(--neu-text);font-weight:500;line-height:1}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
93
87
  }
94
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuCheckboxComponent, decorators: [{
88
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuCheckboxComponent, decorators: [{
95
89
  type: Component,
96
90
  args: [{ selector: 'neu-checkbox', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: { class: 'neu-checkbox-host' }, providers: [
97
91
  {
@@ -1 +1 @@
1
- {"version":3,"file":"neural-ui-core-checkbox.mjs","sources":["../../../../projects/ui-core/checkbox/neu-checkbox.component.ts","../../../../projects/ui-core/checkbox/neural-ui-core-checkbox.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nlet _neuCheckboxIdSeq = 0;\n\n/**\n * NeuralUI Checkbox Component\n *\n * Checkbox personalizado y accesible para Angular Forms.\n *\n * Uso:\n * <neu-checkbox label=\"Acepto los términos\" [formControl]=\"termsCtrl\" />\n */\n@Component({\n selector: 'neu-checkbox',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'neu-checkbox-host' },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuCheckboxComponent),\n multi: true,\n },\n ],\n template: `\n <label class=\"neu-checkbox\" [class.neu-checkbox--disabled]=\"_isDisabled()\" [for]=\"_id\">\n <input\n type=\"checkbox\"\n class=\"neu-checkbox__input\"\n [id]=\"_id\"\n [attr.name]=\"name() || null\"\n [checked]=\"_checked()\"\n [disabled]=\"_isDisabled()\"\n (change)=\"onChange($event)\"\n (blur)=\"onBlur()\"\n />\n <span class=\"neu-checkbox__box\" [class.neu-checkbox__box--checked]=\"_checked()\">\n <svg\n class=\"neu-checkbox__check\"\n viewBox=\"0 0 12 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n [class.neu-checkbox__check--visible]=\"_checked()\"\n >\n <path\n d=\"M1 5L4.5 8.5L11 1\"\n stroke=\"white\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n @if (label()) {\n <span class=\"neu-checkbox__label\">{{ label() }}</span>\n }\n </label>\n `,\n styleUrl: './neu-checkbox.component.scss',\n})\nexport class NeuCheckboxComponent implements ControlValueAccessor {\n readonly label = input<string>('');\n readonly name = input<string>('');\n readonly disabled = input<boolean>(false);\n\n readonly _id = `neu-checkbox-${_neuCheckboxIdSeq++}`;\n\n protected readonly _checked = signal(false);\n /** Estado disabled interno — combina el input `disabled` con el CVA setDisabledState / Internal disabled state — combines the `disabled` input with CVA setDisabledState */\n private readonly _cvaDisabled = signal(false);\n protected readonly _isDisabled = computed(() => this.disabled() || this._cvaDisabled());\n\n private _onChange: (v: boolean) => void = () => {};\n private _onTouched: () => void = () => {};\n\n onChange(event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n this._checked.set(checked);\n this._onChange(checked);\n }\n\n onBlur(): void {\n this._onTouched();\n }\n\n writeValue(val: unknown): void {\n this._checked.set(!!val);\n }\n\n registerOnChange(fn: (v: boolean) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._cvaDisabled.set(isDisabled);\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-checkbox.mjs","sources":["../../../../projects/ui-core/checkbox/neu-checkbox.component.ts","../../../../projects/ui-core/checkbox/neural-ui-core-checkbox.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n forwardRef,\n input,\n signal,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nlet _neuCheckboxIdSeq = 0;\n\n/**\n * NeuralUI Checkbox Component\n *\n * Checkbox personalizado y accesible para Angular Forms.\n *\n * Uso:\n * <neu-checkbox label=\"Acepto los términos\" [formControl]=\"termsCtrl\" />\n */\n@Component({\n selector: 'neu-checkbox',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { class: 'neu-checkbox-host' },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NeuCheckboxComponent),\n multi: true,\n },\n ],\n template: `\n <label class=\"neu-checkbox\" [class.neu-checkbox--disabled]=\"_isDisabled()\" [for]=\"_id\">\n <input\n type=\"checkbox\"\n class=\"neu-checkbox__input\"\n [id]=\"_id\"\n [attr.name]=\"name() || null\"\n [checked]=\"_checked()\"\n [disabled]=\"_isDisabled()\"\n (change)=\"onChange($event)\"\n (blur)=\"onBlur()\"\n />\n <span class=\"neu-checkbox__box\" [class.neu-checkbox__box--checked]=\"_checked()\">\n <svg\n class=\"neu-checkbox__check\"\n viewBox=\"0 0 12 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n [class.neu-checkbox__check--visible]=\"_checked()\"\n >\n <path\n d=\"M1 5L4.5 8.5L11 1\"\n stroke=\"white\"\n stroke-width=\"1.8\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n @if (label()) {\n <span class=\"neu-checkbox__label\">{{ label() }}</span>\n }\n </label>\n `,\n styleUrl: './neu-checkbox.component.scss',\n})\nexport class NeuCheckboxComponent implements ControlValueAccessor {\n readonly label = input<string>('');\n readonly name = input<string>('');\n readonly disabled = input<boolean>(false);\n\n readonly _id = `neu-checkbox-${_neuCheckboxIdSeq++}`;\n\n protected readonly _checked = signal(false);\n /** Estado disabled interno — combina el input `disabled` con el CVA setDisabledState / Internal disabled state — combines the `disabled` input with CVA setDisabledState */\n private readonly _cvaDisabled = signal(false);\n protected readonly _isDisabled = computed(() => this.disabled() || this._cvaDisabled());\n\n private _onChange: (v: boolean) => void = () => {};\n private _onTouched: () => void = () => {};\n\n onChange(event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n this._checked.set(checked);\n this._onChange(checked);\n }\n\n onBlur(): void {\n this._onTouched();\n }\n\n writeValue(val: unknown): void {\n this._checked.set(!!val);\n }\n\n registerOnChange(fn: (v: boolean) => void): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._cvaDisabled.set(isDisabled);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -14,23 +14,17 @@ import { input, output, computed, ChangeDetectionStrategy, ViewEncapsulation, Co
14
14
  */
15
15
  class NeuChipComponent {
16
16
  /** Variante de color / Color variant */
17
- variant = input('default', /* @ts-ignore */
18
- ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
17
+ variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
19
18
  /** Tamaño / 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
  /** Estado seleccionado / Selected state */
23
- selected = input(false, /* @ts-ignore */
24
- ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
21
+ selected = input(false, ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
25
22
  /** Muestra botón de cierre / Shows close button */
26
- removable = input(false, /* @ts-ignore */
27
- ...(ngDevMode ? [{ debugName: "removable" }] : /* istanbul ignore next */ []));
23
+ removable = input(false, ...(ngDevMode ? [{ debugName: "removable" }] : /* istanbul ignore next */ []));
28
24
  /** Deshabilitado / Disabled */
29
- disabled = input(false, /* @ts-ignore */
30
- ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
25
+ disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
31
26
  /** Aria-label del botón de eliminar / Aria-label for the delete button */
32
- removeAriaLabel = input('Eliminar', /* @ts-ignore */
33
- ...(ngDevMode ? [{ debugName: "removeAriaLabel" }] : /* istanbul ignore next */ []));
27
+ removeAriaLabel = input('Eliminar', ...(ngDevMode ? [{ debugName: "removeAriaLabel" }] : /* istanbul ignore next */ []));
34
28
  /** Emite al hacer clic o pulsar espacio/enter / Emits on click or space/enter press */
35
29
  selectedChange = output();
36
30
  /** Emite al pulsar el botón de cierre / Emits when the close button is pressed */
@@ -42,21 +36,17 @@ class NeuChipComponent {
42
36
  'neu-chip--selected': this.selected(),
43
37
  'neu-chip--removable': this.removable(),
44
38
  'neu-chip--disabled': this.disabled(),
45
- }), /* @ts-ignore */
46
- ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
39
+ }), ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
47
40
  /** Rol ARIA del host: 'button' cuando seleccionable, 'group' cuando también eliminable / Host ARIA role: 'button' when selectable, 'group' when removable */
48
- _hostRole = computed(() => (this.removable() ? 'group' : 'button'), /* @ts-ignore */
49
- ...(ngDevMode ? [{ debugName: "_hostRole" }] : /* istanbul ignore next */ []));
41
+ _hostRole = computed(() => (this.removable() ? 'group' : 'button'), ...(ngDevMode ? [{ debugName: "_hostRole" }] : /* istanbul ignore next */ []));
50
42
  /** aria-pressed solo cuando actúa como botón toggle / aria-pressed only when acting as toggle button */
51
- _hostAriaPressed = computed(() => this.removable() ? null : this.selected(), /* @ts-ignore */
52
- ...(ngDevMode ? [{ debugName: "_hostAriaPressed" }] : /* istanbul ignore next */ []));
43
+ _hostAriaPressed = computed(() => this.removable() ? null : this.selected(), ...(ngDevMode ? [{ debugName: "_hostAriaPressed" }] : /* istanbul ignore next */ []));
53
44
  /** tabindex nulo en el host grupo para no saturar el orden de foco / null tabindex on group host to not saturate focus order */
54
45
  _hostTabindex = computed(() => {
55
46
  if (this.removable())
56
47
  return null;
57
48
  return this.disabled() ? -1 : 0;
58
- }, /* @ts-ignore */
59
- ...(ngDevMode ? [{ debugName: "_hostTabindex" }] : /* istanbul ignore next */ []));
49
+ }, ...(ngDevMode ? [{ debugName: "_hostTabindex" }] : /* istanbul ignore next */ []));
60
50
  onToggle() {
61
51
  if (!this.disabled() && !this.removable()) {
62
52
  this.selectedChange.emit(!this.selected());
@@ -67,8 +57,8 @@ class NeuChipComponent {
67
57
  this.removed.emit();
68
58
  }
69
59
  }
70
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuChipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
71
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NeuChipComponent, isStandalone: true, selector: "neu-chip", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, removable: { classPropertyName: "removable", publicName: "removable", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, removeAriaLabel: { classPropertyName: "removeAriaLabel", publicName: "removeAriaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedChange: "selectedChange", removed: "removed" }, host: { listeners: { "keydown.space": "onToggle()", "keydown.enter": "onToggle()" }, properties: { "class": "hostClasses()", "attr.role": "_hostRole()", "attr.aria-pressed": "_hostAriaPressed()", "attr.tabindex": "_hostTabindex()" } }, ngImport: i0, template: `
60
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuChipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
61
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: NeuChipComponent, isStandalone: true, selector: "neu-chip", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, removable: { classPropertyName: "removable", publicName: "removable", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, removeAriaLabel: { classPropertyName: "removeAriaLabel", publicName: "removeAriaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedChange: "selectedChange", removed: "removed" }, host: { listeners: { "keydown.space": "onToggle()", "keydown.enter": "onToggle()" }, properties: { "class": "hostClasses()", "attr.role": "_hostRole()", "attr.aria-pressed": "_hostAriaPressed()", "attr.tabindex": "_hostTabindex()" } }, ngImport: i0, template: `
72
62
  <ng-content />
73
63
  @if (removable()) {
74
64
  <button
@@ -95,7 +85,7 @@ class NeuChipComponent {
95
85
  }
96
86
  `, isInline: true, styles: [".neu-chip{display:inline-flex;align-items:center;gap:6px;font-family:var(--neu-font-sans);font-weight:500;white-space:nowrap;cursor:pointer;border:1.5px solid transparent;transition:background var(--neu-transition),border-color var(--neu-transition),color var(--neu-transition),box-shadow var(--neu-transition);-webkit-user-select:none;user-select:none;outline:none}.neu-chip:focus-visible{outline:2px solid var(--neu-primary);outline-offset:2px}.neu-chip--sm{padding:3px 10px;font-size:var(--neu-text-xs);border-radius:var(--neu-radius-full)}.neu-chip--md{padding:5px 14px;font-size:var(--neu-text-sm);border-radius:var(--neu-radius-full)}.neu-chip--default{background:var(--neu-surface-2);color:var(--neu-text-muted);border-color:var(--neu-border)}.neu-chip--default:hover:not(.neu-chip--disabled){background:var(--neu-surface-3);border-color:var(--neu-border-hover)}.neu-chip--default.neu-chip--selected{background:var(--neu-primary-100);color:var(--neu-primary);border-color:var(--neu-primary)}.neu-chip--primary{background:var(--neu-primary-50);color:var(--neu-primary-dark, var(--neu-primary));border-color:color-mix(in srgb,var(--neu-primary-dark, var(--neu-primary)) 28%,transparent)}.neu-chip--primary:hover:not(.neu-chip--disabled){background:var(--neu-primary-100);color:var(--neu-primary-dark, var(--neu-primary))}.neu-chip--primary.neu-chip--selected{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-chip--success{background:var(--neu-success-bg);color:var(--neu-success-text);border-color:transparent}.neu-chip--success.neu-chip--selected{background:var(--neu-success);color:var(--neu-primary-fg)}.neu-chip--warning{background:var(--neu-warning-bg);color:var(--neu-warning-text);border-color:transparent}.neu-chip--warning.neu-chip--selected{background:var(--neu-warning);color:var(--neu-primary-fg)}.neu-chip--danger{background:var(--neu-error-bg);color:var(--neu-error-text);border-color:transparent}.neu-chip--danger.neu-chip--selected{background:var(--neu-error);color:var(--neu-primary-fg)}.neu-chip--disabled{background:var(--neu-surface-2);color:var(--neu-text-muted);border-color:var(--neu-border);cursor:not-allowed;pointer-events:none}.neu-chip__remove{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;margin-left:2px;border:none;border-radius:50%;background:transparent;cursor:pointer;color:currentColor;opacity:.6;padding:0;flex-shrink:0;transition:opacity var(--neu-transition),background var(--neu-transition);outline:none}.neu-chip__remove:hover{opacity:1;background:var(--neu-alert-dismiss-hover-bg)}.neu-chip__remove:focus-visible{outline:2px solid currentColor;outline-offset:1px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
97
87
  }
98
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuChipComponent, decorators: [{
88
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuChipComponent, decorators: [{
99
89
  type: Component,
100
90
  args: [{ selector: 'neu-chip', imports: [], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
101
91
  '[class]': 'hostClasses()',
@@ -1 +1 @@
1
- {"version":3,"file":"neural-ui-core-chip.mjs","sources":["../../../../projects/ui-core/chip/neu-chip.component.ts","../../../../projects/ui-core/chip/neural-ui-core-chip.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n} from '@angular/core';\n\nexport type NeuChipVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger';\nexport type NeuChipSize = 'sm' | 'md';\n\n/**\n * NeuralUI Chip Component\n *\n * Etiqueta compacta seleccionable y/o eliminable. Ideal para filtros,\n * listas de tags y multiselección visual.\n *\n * Uso:\n * <neu-chip>Angular</neu-chip>\n * <neu-chip [removable]=\"true\" (removed)=\"onRemove()\">CSS</neu-chip>\n * <neu-chip [selected]=\"true\" (selectedChange)=\"toggle()\">TypeScript</neu-chip>\n */\n@Component({\n selector: 'neu-chip',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.role]': '_hostRole()',\n '[attr.aria-pressed]': '_hostAriaPressed()',\n '[attr.tabindex]': '_hostTabindex()',\n '(keydown.space)': 'onToggle()',\n '(keydown.enter)': 'onToggle()',\n },\n template: `\n <ng-content />\n @if (removable()) {\n <button\n class=\"neu-chip__remove\"\n type=\"button\"\n [disabled]=\"disabled()\"\n (click)=\"$event.stopPropagation(); onRemove()\"\n [attr.aria-label]=\"removeAriaLabel()\"\n >\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n `,\n styleUrl: './neu-chip.component.scss',\n})\nexport class NeuChipComponent {\n /** Variante de color / Color variant */\n variant = input<NeuChipVariant>('default');\n\n /** Tamaño / Size */\n size = input<NeuChipSize>('md');\n\n /** Estado seleccionado / Selected state */\n selected = input<boolean>(false);\n\n /** Muestra botón de cierre / Shows close button */\n removable = input<boolean>(false);\n\n /** Deshabilitado / Disabled */\n disabled = input<boolean>(false);\n\n /** Aria-label del botón de eliminar / Aria-label for the delete button */\n removeAriaLabel = input<string>('Eliminar');\n\n /** Emite al hacer clic o pulsar espacio/enter / Emits on click or space/enter press */\n selectedChange = output<boolean>();\n\n /** Emite al pulsar el botón de cierre / Emits when the close button is pressed */\n removed = output<void>();\n\n readonly hostClasses = computed(() => ({\n 'neu-chip': true,\n [`neu-chip--${this.variant()}`]: true,\n [`neu-chip--${this.size()}`]: true,\n 'neu-chip--selected': this.selected(),\n 'neu-chip--removable': this.removable(),\n 'neu-chip--disabled': this.disabled(),\n }));\n\n /** Rol ARIA del host: 'button' cuando seleccionable, 'group' cuando también eliminable / Host ARIA role: 'button' when selectable, 'group' when removable */\n readonly _hostRole = computed(() => (this.removable() ? 'group' : 'button'));\n\n /** aria-pressed solo cuando actúa como botón toggle / aria-pressed only when acting as toggle button */\n readonly _hostAriaPressed = computed<boolean | null>(() =>\n this.removable() ? null : this.selected(),\n );\n\n /** tabindex nulo en el host grupo para no saturar el orden de foco / null tabindex on group host to not saturate focus order */\n readonly _hostTabindex = computed<number | null>(() => {\n if (this.removable()) return null;\n return this.disabled() ? -1 : 0;\n });\n\n onToggle(): void {\n if (!this.disabled() && !this.removable()) {\n this.selectedChange.emit(!this.selected());\n }\n }\n\n onRemove(): void {\n if (!this.disabled()) {\n this.removed.emit();\n }\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-chip.mjs","sources":["../../../../projects/ui-core/chip/neu-chip.component.ts","../../../../projects/ui-core/chip/neural-ui-core-chip.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n input,\n output,\n} from '@angular/core';\n\nexport type NeuChipVariant = 'default' | 'primary' | 'success' | 'warning' | 'danger';\nexport type NeuChipSize = 'sm' | 'md';\n\n/**\n * NeuralUI Chip Component\n *\n * Etiqueta compacta seleccionable y/o eliminable. Ideal para filtros,\n * listas de tags y multiselección visual.\n *\n * Uso:\n * <neu-chip>Angular</neu-chip>\n * <neu-chip [removable]=\"true\" (removed)=\"onRemove()\">CSS</neu-chip>\n * <neu-chip [selected]=\"true\" (selectedChange)=\"toggle()\">TypeScript</neu-chip>\n */\n@Component({\n selector: 'neu-chip',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'hostClasses()',\n '[attr.role]': '_hostRole()',\n '[attr.aria-pressed]': '_hostAriaPressed()',\n '[attr.tabindex]': '_hostTabindex()',\n '(keydown.space)': 'onToggle()',\n '(keydown.enter)': 'onToggle()',\n },\n template: `\n <ng-content />\n @if (removable()) {\n <button\n class=\"neu-chip__remove\"\n type=\"button\"\n [disabled]=\"disabled()\"\n (click)=\"$event.stopPropagation(); onRemove()\"\n [attr.aria-label]=\"removeAriaLabel()\"\n >\n <svg\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n aria-hidden=\"true\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n }\n `,\n styleUrl: './neu-chip.component.scss',\n})\nexport class NeuChipComponent {\n /** Variante de color / Color variant */\n variant = input<NeuChipVariant>('default');\n\n /** Tamaño / Size */\n size = input<NeuChipSize>('md');\n\n /** Estado seleccionado / Selected state */\n selected = input<boolean>(false);\n\n /** Muestra botón de cierre / Shows close button */\n removable = input<boolean>(false);\n\n /** Deshabilitado / Disabled */\n disabled = input<boolean>(false);\n\n /** Aria-label del botón de eliminar / Aria-label for the delete button */\n removeAriaLabel = input<string>('Eliminar');\n\n /** Emite al hacer clic o pulsar espacio/enter / Emits on click or space/enter press */\n selectedChange = output<boolean>();\n\n /** Emite al pulsar el botón de cierre / Emits when the close button is pressed */\n removed = output<void>();\n\n readonly hostClasses = computed(() => ({\n 'neu-chip': true,\n [`neu-chip--${this.variant()}`]: true,\n [`neu-chip--${this.size()}`]: true,\n 'neu-chip--selected': this.selected(),\n 'neu-chip--removable': this.removable(),\n 'neu-chip--disabled': this.disabled(),\n }));\n\n /** Rol ARIA del host: 'button' cuando seleccionable, 'group' cuando también eliminable / Host ARIA role: 'button' when selectable, 'group' when removable */\n readonly _hostRole = computed(() => (this.removable() ? 'group' : 'button'));\n\n /** aria-pressed solo cuando actúa como botón toggle / aria-pressed only when acting as toggle button */\n readonly _hostAriaPressed = computed<boolean | null>(() =>\n this.removable() ? null : this.selected(),\n );\n\n /** tabindex nulo en el host grupo para no saturar el orden de foco / null tabindex on group host to not saturate focus order */\n readonly _hostTabindex = computed<number | null>(() => {\n if (this.removable()) return null;\n return this.disabled() ? -1 : 0;\n });\n\n onToggle(): void {\n if (!this.disabled() && !this.removable()) {\n this.selectedChange.emit(!this.selected());\n }\n }\n\n onRemove(): void {\n if (!this.disabled()) {\n this.removed.emit();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -19,18 +19,15 @@ class NeuCodeBlockComponent {
19
19
  doc = inject(DOCUMENT);
20
20
  destroyRef = inject(DestroyRef);
21
21
  /** Código fuente a mostrar / Source code to display */
22
- code = input('', /* @ts-ignore */
23
- ...(ngDevMode ? [{ debugName: "code" }] : /* istanbul ignore next */ []));
22
+ code = input('', ...(ngDevMode ? [{ debugName: "code" }] : /* istanbul ignore next */ []));
24
23
  /** Nombre del lenguaje (decorativo) / Language name (decorative) */
25
- lang = input('', /* @ts-ignore */
26
- ...(ngDevMode ? [{ debugName: "lang" }] : /* istanbul ignore next */ []));
24
+ lang = input('', ...(ngDevMode ? [{ debugName: "lang" }] : /* istanbul ignore next */ []));
27
25
  /**
28
26
  * Identificador de lenguaje estándar (typescript, scss, html, bash…).
29
27
  * Genera automáticamente el label legible para el badge.
30
28
  * Language identifier — auto-generates a readable badge label.
31
29
  */
32
- language = input('', /* @ts-ignore */
33
- ...(ngDevMode ? [{ debugName: "language" }] : /* istanbul ignore next */ []));
30
+ language = input('', ...(ngDevMode ? [{ debugName: "language" }] : /* istanbul ignore next */ []));
34
31
  /** Label legible derivado de lang o language / Readable label derived from lang or language */
35
32
  displayLang = computed(() => {
36
33
  const explicit = this.lang();
@@ -58,32 +55,21 @@ class NeuCodeBlockComponent {
58
55
  tsx: 'TSX',
59
56
  };
60
57
  return map[id] ?? (id ? id.toUpperCase() : 'TypeScript');
61
- }, /* @ts-ignore */
62
- ...(ngDevMode ? [{ debugName: "displayLang" }] : /* istanbul ignore next */ []));
58
+ }, ...(ngDevMode ? [{ debugName: "displayLang" }] : /* istanbul ignore next */ []));
63
59
  /** Texto del botón cuando no se ha copiado / Button text when not yet copied */
64
- copyLabel = input(undefined, /* @ts-ignore */
65
- ...(ngDevMode ? [{ debugName: "copyLabel" }] : /* istanbul ignore next */ []));
60
+ copyLabel = input(undefined, ...(ngDevMode ? [{ debugName: "copyLabel" }] : /* istanbul ignore next */ []));
66
61
  /** Texto del botón tras copiar / Button text after copying */
67
- copiedLabel = input(undefined, /* @ts-ignore */
68
- ...(ngDevMode ? [{ debugName: "copiedLabel" }] : /* istanbul ignore next */ []));
62
+ copiedLabel = input(undefined, ...(ngDevMode ? [{ debugName: "copiedLabel" }] : /* istanbul ignore next */ []));
69
63
  /** Aria-label del botón copiar / Aria-label for the copy button */
70
- copyAriaLabel = input(undefined, /* @ts-ignore */
71
- ...(ngDevMode ? [{ debugName: "copyAriaLabel" }] : /* istanbul ignore next */ []));
64
+ copyAriaLabel = input(undefined, ...(ngDevMode ? [{ debugName: "copyAriaLabel" }] : /* istanbul ignore next */ []));
72
65
  /** Aria-label del botón tras copiar / Aria-label for the button after copying */
73
- copiedAriaLabel = input(undefined, /* @ts-ignore */
74
- ...(ngDevMode ? [{ debugName: "copiedAriaLabel" }] : /* istanbul ignore next */ []));
75
- localeLabels = signal(this._getLocaleLabels(), /* @ts-ignore */
76
- ...(ngDevMode ? [{ debugName: "localeLabels" }] : /* istanbul ignore next */ []));
77
- resolvedCopyLabel = computed(() => this._resolveInputLabel(this.copyLabel()) ?? this.localeLabels().copyLabel, /* @ts-ignore */
78
- ...(ngDevMode ? [{ debugName: "resolvedCopyLabel" }] : /* istanbul ignore next */ []));
79
- resolvedCopiedLabel = computed(() => this._resolveInputLabel(this.copiedLabel()) ?? this.localeLabels().copiedLabel, /* @ts-ignore */
80
- ...(ngDevMode ? [{ debugName: "resolvedCopiedLabel" }] : /* istanbul ignore next */ []));
81
- resolvedCopyAriaLabel = computed(() => this._resolveInputLabel(this.copyAriaLabel()) ?? this.localeLabels().copyAriaLabel, /* @ts-ignore */
82
- ...(ngDevMode ? [{ debugName: "resolvedCopyAriaLabel" }] : /* istanbul ignore next */ []));
83
- resolvedCopiedAriaLabel = computed(() => this._resolveInputLabel(this.copiedAriaLabel()) ?? this.localeLabels().copiedAriaLabel, /* @ts-ignore */
84
- ...(ngDevMode ? [{ debugName: "resolvedCopiedAriaLabel" }] : /* istanbul ignore next */ []));
85
- copied = signal(false, /* @ts-ignore */
86
- ...(ngDevMode ? [{ debugName: "copied" }] : /* istanbul ignore next */ []));
66
+ copiedAriaLabel = input(undefined, ...(ngDevMode ? [{ debugName: "copiedAriaLabel" }] : /* istanbul ignore next */ []));
67
+ localeLabels = signal(this._getLocaleLabels(), ...(ngDevMode ? [{ debugName: "localeLabels" }] : /* istanbul ignore next */ []));
68
+ resolvedCopyLabel = computed(() => this._resolveInputLabel(this.copyLabel()) ?? this.localeLabels().copyLabel, ...(ngDevMode ? [{ debugName: "resolvedCopyLabel" }] : /* istanbul ignore next */ []));
69
+ resolvedCopiedLabel = computed(() => this._resolveInputLabel(this.copiedLabel()) ?? this.localeLabels().copiedLabel, ...(ngDevMode ? [{ debugName: "resolvedCopiedLabel" }] : /* istanbul ignore next */ []));
70
+ resolvedCopyAriaLabel = computed(() => this._resolveInputLabel(this.copyAriaLabel()) ?? this.localeLabels().copyAriaLabel, ...(ngDevMode ? [{ debugName: "resolvedCopyAriaLabel" }] : /* istanbul ignore next */ []));
71
+ resolvedCopiedAriaLabel = computed(() => this._resolveInputLabel(this.copiedAriaLabel()) ?? this.localeLabels().copiedAriaLabel, ...(ngDevMode ? [{ debugName: "resolvedCopiedAriaLabel" }] : /* istanbul ignore next */ []));
72
+ copied = signal(false, ...(ngDevMode ? [{ debugName: "copied" }] : /* istanbul ignore next */ []));
87
73
  _copyTimer;
88
74
  constructor() {
89
75
  const root = this.doc.documentElement;
@@ -149,8 +135,8 @@ class NeuCodeBlockComponent {
149
135
  const trimmed = value?.trim();
150
136
  return trimmed ? value : undefined;
151
137
  }
152
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuCodeBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
153
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NeuCodeBlockComponent, isStandalone: true, selector: "neu-code-block", inputs: { code: { classPropertyName: "code", publicName: "code", isSignal: true, isRequired: false, transformFunction: null }, lang: { classPropertyName: "lang", publicName: "lang", isSignal: true, isRequired: false, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: false, transformFunction: null }, copyLabel: { classPropertyName: "copyLabel", publicName: "copyLabel", isSignal: true, isRequired: false, transformFunction: null }, copiedLabel: { classPropertyName: "copiedLabel", publicName: "copiedLabel", isSignal: true, isRequired: false, transformFunction: null }, copyAriaLabel: { classPropertyName: "copyAriaLabel", publicName: "copyAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, copiedAriaLabel: { classPropertyName: "copiedAriaLabel", publicName: "copiedAriaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.lang": "null" } }, ngImport: i0, template: `
138
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuCodeBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
139
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: NeuCodeBlockComponent, isStandalone: true, selector: "neu-code-block", inputs: { code: { classPropertyName: "code", publicName: "code", isSignal: true, isRequired: false, transformFunction: null }, lang: { classPropertyName: "lang", publicName: "lang", isSignal: true, isRequired: false, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: false, transformFunction: null }, copyLabel: { classPropertyName: "copyLabel", publicName: "copyLabel", isSignal: true, isRequired: false, transformFunction: null }, copiedLabel: { classPropertyName: "copiedLabel", publicName: "copiedLabel", isSignal: true, isRequired: false, transformFunction: null }, copyAriaLabel: { classPropertyName: "copyAriaLabel", publicName: "copyAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, copiedAriaLabel: { classPropertyName: "copiedAriaLabel", publicName: "copiedAriaLabel", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.lang": "null" } }, ngImport: i0, template: `
154
140
  <div class="neu-code-block">
155
141
  <!-- Encabezado del editor -->
156
142
  <div class="neu-code-block__header">
@@ -202,7 +188,7 @@ class NeuCodeBlockComponent {
202
188
  </div>
203
189
  `, isInline: true, styles: [".neu-code-block{border-radius:var(--neu-radius-lg);overflow:hidden;border:1px solid var(--neu-code-block-border);font-family:var(--neu-font-mono)}.neu-code-block__header{display:flex;align-items:center;gap:var(--neu-space-3);padding:10px 16px;background:var(--neu-code-block-bar-bg);border-bottom:1px solid var(--neu-code-block-border)}.neu-code-block__dots{display:flex;gap:6px;flex-shrink:0}.neu-code-block__dots span{display:block;width:12px;height:12px;border-radius:50%}.neu-code-block__dots span:nth-child(1){background:#ff5f57}.neu-code-block__dots span:nth-child(2){background:#febc2e}.neu-code-block__dots span:nth-child(3){background:#28c840}.neu-code-block__lang{flex:1;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:var(--neu-code-block-accent);font-family:var(--neu-font-mono)}.neu-code-block__copy{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;background:var(--neu-code-block-border);border:1px solid var(--neu-code-block-copy-border);border-radius:6px;font-size:11px;font-weight:500;color:var(--neu-code-block-copy-text);cursor:pointer;font-family:var(--neu-font-sans);transition:all var(--neu-transition);flex-shrink:0}.neu-code-block__copy svg{width:12px;height:12px;flex-shrink:0}.neu-code-block__copy:hover{background:var(--neu-code-block-copy-hover-bg);color:var(--neu-code-block-copy-hover-text);border-color:var(--neu-code-block-copy-hover-border)}.neu-code-block__pre{margin:0;padding:20px 24px;background:var(--neu-code-block-bg);overflow-x:auto;scrollbar-width:thin;scrollbar-color:var(--neu-code-block-muted) transparent}.neu-code-block__pre::-webkit-scrollbar{height:4px}.neu-code-block__pre::-webkit-scrollbar-track{background:transparent}.neu-code-block__pre::-webkit-scrollbar-thumb{background:var(--neu-code-block-muted);border-radius:99px}.neu-code-block__code{display:block;font-size:13.5px;line-height:1.75;color:var(--neu-code-block-text);font-family:inherit;white-space:pre;tab-size:2}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
204
190
  }
205
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuCodeBlockComponent, decorators: [{
191
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuCodeBlockComponent, decorators: [{
206
192
  type: Component,
207
193
  args: [{ selector: 'neu-code-block', imports: [], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: `
208
194
  <div class="neu-code-block">
@@ -1 +1 @@
1
- {"version":3,"file":"neural-ui-core-code-block.mjs","sources":["../../../../projects/ui-core/code-block/neu-code-block.component.ts","../../../../projects/ui-core/code-block/neural-ui-core-code-block.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ViewEncapsulation,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * NeuralUI Code Block\n *\n * Bloque de código con estilo editor oscuro (Tokyo Night).\n * Incluye botón de copiar al portapapeles, badge del lenguaje\n * y soporte para resaltado futuro con ngx-highlightjs.\n *\n * Uso:\n * <neu-code-block [code]=\"snippet\" lang=\"TypeScript\" />\n *\n * Con ngx-highlightjs instalado, envuelve el <pre> con\n * [highlight]=\"code\" para resaltado automático.\n */\n@Component({\n selector: 'neu-code-block',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"neu-code-block\">\n <!-- Encabezado del editor -->\n <div class=\"neu-code-block__header\">\n <!-- Traffic lights decorativos -->\n <div class=\"neu-code-block__dots\" aria-hidden=\"true\">\n <span></span><span></span><span></span>\n </div>\n <span class=\"neu-code-block__lang\">{{ displayLang() }}</span>\n <button\n class=\"neu-code-block__copy\"\n type=\"button\"\n [attr.aria-label]=\"copied() ? resolvedCopiedAriaLabel() : resolvedCopyAriaLabel()\"\n (click)=\"copy()\"\n >\n @if (copied()) {\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n {{ resolvedCopiedLabel() }}\n } @else {\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\" />\n </svg>\n {{ resolvedCopyLabel() }}\n }\n </button>\n </div>\n\n <!-- Bloque de código -->\n <pre\n class=\"neu-code-block__pre\"\n tabindex=\"0\"\n ><code class=\"neu-code-block__code\">{{ code() }}</code></pre>\n </div>\n `,\n host: { '[attr.lang]': 'null' },\n styleUrl: './neu-code-block.component.scss',\n})\nexport class NeuCodeBlockComponent {\n private readonly doc = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n\n /** Código fuente a mostrar / Source code to display */\n code = input<string>('');\n\n /** Nombre del lenguaje (decorativo) / Language name (decorative) */\n lang = input<string>('');\n\n /**\n * Identificador de lenguaje estándar (typescript, scss, html, bash…).\n * Genera automáticamente el label legible para el badge.\n * Language identifier — auto-generates a readable badge label.\n */\n language = input<string>('');\n\n /** Label legible derivado de lang o language / Readable label derived from lang or language */\n protected readonly displayLang = computed(() => {\n const explicit = this.lang();\n if (explicit) return explicit;\n const id = this.language().toLowerCase().trim();\n const map: Record<string, string> = {\n typescript: 'TypeScript',\n javascript: 'JavaScript',\n ts: 'TypeScript',\n js: 'JavaScript',\n scss: 'SCSS',\n css: 'CSS',\n less: 'Less',\n html: 'HTML',\n xml: 'XML',\n bash: 'Bash',\n shell: 'Shell',\n sh: 'Shell',\n json: 'JSON',\n yaml: 'YAML',\n yml: 'YAML',\n angular: 'Angular',\n jsx: 'JSX',\n tsx: 'TSX',\n };\n return map[id] ?? (id ? id.toUpperCase() : 'TypeScript');\n });\n\n /** Texto del botón cuando no se ha copiado / Button text when not yet copied */\n copyLabel = input<string | undefined>(undefined);\n\n /** Texto del botón tras copiar / Button text after copying */\n copiedLabel = input<string | undefined>(undefined);\n\n /** Aria-label del botón copiar / Aria-label for the copy button */\n copyAriaLabel = input<string | undefined>(undefined);\n\n /** Aria-label del botón tras copiar / Aria-label for the button after copying */\n copiedAriaLabel = input<string | undefined>(undefined);\n\n private readonly localeLabels = signal(this._getLocaleLabels());\n\n protected readonly resolvedCopyLabel = computed(\n () => this._resolveInputLabel(this.copyLabel()) ?? this.localeLabels().copyLabel,\n );\n\n protected readonly resolvedCopiedLabel = computed(\n () => this._resolveInputLabel(this.copiedLabel()) ?? this.localeLabels().copiedLabel,\n );\n\n protected readonly resolvedCopyAriaLabel = computed(\n () => this._resolveInputLabel(this.copyAriaLabel()) ?? this.localeLabels().copyAriaLabel,\n );\n\n protected readonly resolvedCopiedAriaLabel = computed(\n () => this._resolveInputLabel(this.copiedAriaLabel()) ?? this.localeLabels().copiedAriaLabel,\n );\n\n protected readonly copied = signal(false);\n private _copyTimer?: ReturnType<typeof setTimeout>;\n\n constructor() {\n const root = this.doc.documentElement;\n const win = this.doc.defaultView;\n\n this.destroyRef.onDestroy(() => clearTimeout(this._copyTimer));\n\n if (!root || !win?.MutationObserver) return;\n\n const observer = new win.MutationObserver(() => {\n this.localeLabels.set(this._getLocaleLabels());\n });\n\n observer.observe(root, {\n attributes: true,\n attributeFilter: ['lang'],\n });\n\n this.destroyRef.onDestroy(() => observer.disconnect());\n }\n\n copy(): void {\n const text = this.code();\n const win = this.doc.defaultView;\n\n if (win?.navigator?.clipboard) {\n void win.navigator.clipboard.writeText(text).then(() => this._markCopied());\n } else {\n // Fallback para HTTP o navegadores sin Clipboard API\n const ta = this.doc.createElement('textarea');\n ta.value = text;\n ta.style.cssText = 'position:fixed;top:0;left:0;opacity:0;pointer-events:none';\n this.doc.body.appendChild(ta);\n ta.focus();\n ta.select();\n try {\n this.doc.execCommand('copy');\n this._markCopied();\n } finally {\n this.doc.body.removeChild(ta);\n }\n }\n }\n\n private _markCopied(): void {\n this.copied.set(true);\n clearTimeout(this._copyTimer);\n this._copyTimer = setTimeout(() => this.copied.set(false), 2000);\n }\n\n private _getLocaleLabels(): {\n copyLabel: string;\n copiedLabel: string;\n copyAriaLabel: string;\n copiedAriaLabel: string;\n } {\n const lang = this.doc.documentElement?.lang?.toLowerCase() ?? 'en';\n\n if (lang.startsWith('es')) {\n return {\n copyLabel: 'Copiar',\n copiedLabel: 'Copiado',\n copyAriaLabel: 'Copiar código',\n copiedAriaLabel: 'Código copiado',\n };\n }\n\n return {\n copyLabel: 'Copy',\n copiedLabel: 'Copied',\n copyAriaLabel: 'Copy code',\n copiedAriaLabel: 'Code copied',\n };\n }\n\n private _resolveInputLabel(value: string | undefined): string | undefined {\n const trimmed = value?.trim();\n return trimmed ? value : undefined;\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-code-block.mjs","sources":["../../../../projects/ui-core/code-block/neu-code-block.component.ts","../../../../projects/ui-core/code-block/neural-ui-core-code-block.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ViewEncapsulation,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * NeuralUI Code Block\n *\n * Bloque de código con estilo editor oscuro (Tokyo Night).\n * Incluye botón de copiar al portapapeles, badge del lenguaje\n * y soporte para resaltado futuro con ngx-highlightjs.\n *\n * Uso:\n * <neu-code-block [code]=\"snippet\" lang=\"TypeScript\" />\n *\n * Con ngx-highlightjs instalado, envuelve el <pre> con\n * [highlight]=\"code\" para resaltado automático.\n */\n@Component({\n selector: 'neu-code-block',\n imports: [],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"neu-code-block\">\n <!-- Encabezado del editor -->\n <div class=\"neu-code-block__header\">\n <!-- Traffic lights decorativos -->\n <div class=\"neu-code-block__dots\" aria-hidden=\"true\">\n <span></span><span></span><span></span>\n </div>\n <span class=\"neu-code-block__lang\">{{ displayLang() }}</span>\n <button\n class=\"neu-code-block__copy\"\n type=\"button\"\n [attr.aria-label]=\"copied() ? resolvedCopiedAriaLabel() : resolvedCopyAriaLabel()\"\n (click)=\"copy()\"\n >\n @if (copied()) {\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n {{ resolvedCopiedLabel() }}\n } @else {\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1\" />\n </svg>\n {{ resolvedCopyLabel() }}\n }\n </button>\n </div>\n\n <!-- Bloque de código -->\n <pre\n class=\"neu-code-block__pre\"\n tabindex=\"0\"\n ><code class=\"neu-code-block__code\">{{ code() }}</code></pre>\n </div>\n `,\n host: { '[attr.lang]': 'null' },\n styleUrl: './neu-code-block.component.scss',\n})\nexport class NeuCodeBlockComponent {\n private readonly doc = inject(DOCUMENT);\n private readonly destroyRef = inject(DestroyRef);\n\n /** Código fuente a mostrar / Source code to display */\n code = input<string>('');\n\n /** Nombre del lenguaje (decorativo) / Language name (decorative) */\n lang = input<string>('');\n\n /**\n * Identificador de lenguaje estándar (typescript, scss, html, bash…).\n * Genera automáticamente el label legible para el badge.\n * Language identifier — auto-generates a readable badge label.\n */\n language = input<string>('');\n\n /** Label legible derivado de lang o language / Readable label derived from lang or language */\n protected readonly displayLang = computed(() => {\n const explicit = this.lang();\n if (explicit) return explicit;\n const id = this.language().toLowerCase().trim();\n const map: Record<string, string> = {\n typescript: 'TypeScript',\n javascript: 'JavaScript',\n ts: 'TypeScript',\n js: 'JavaScript',\n scss: 'SCSS',\n css: 'CSS',\n less: 'Less',\n html: 'HTML',\n xml: 'XML',\n bash: 'Bash',\n shell: 'Shell',\n sh: 'Shell',\n json: 'JSON',\n yaml: 'YAML',\n yml: 'YAML',\n angular: 'Angular',\n jsx: 'JSX',\n tsx: 'TSX',\n };\n return map[id] ?? (id ? id.toUpperCase() : 'TypeScript');\n });\n\n /** Texto del botón cuando no se ha copiado / Button text when not yet copied */\n copyLabel = input<string | undefined>(undefined);\n\n /** Texto del botón tras copiar / Button text after copying */\n copiedLabel = input<string | undefined>(undefined);\n\n /** Aria-label del botón copiar / Aria-label for the copy button */\n copyAriaLabel = input<string | undefined>(undefined);\n\n /** Aria-label del botón tras copiar / Aria-label for the button after copying */\n copiedAriaLabel = input<string | undefined>(undefined);\n\n private readonly localeLabels = signal(this._getLocaleLabels());\n\n protected readonly resolvedCopyLabel = computed(\n () => this._resolveInputLabel(this.copyLabel()) ?? this.localeLabels().copyLabel,\n );\n\n protected readonly resolvedCopiedLabel = computed(\n () => this._resolveInputLabel(this.copiedLabel()) ?? this.localeLabels().copiedLabel,\n );\n\n protected readonly resolvedCopyAriaLabel = computed(\n () => this._resolveInputLabel(this.copyAriaLabel()) ?? this.localeLabels().copyAriaLabel,\n );\n\n protected readonly resolvedCopiedAriaLabel = computed(\n () => this._resolveInputLabel(this.copiedAriaLabel()) ?? this.localeLabels().copiedAriaLabel,\n );\n\n protected readonly copied = signal(false);\n private _copyTimer?: ReturnType<typeof setTimeout>;\n\n constructor() {\n const root = this.doc.documentElement;\n const win = this.doc.defaultView;\n\n this.destroyRef.onDestroy(() => clearTimeout(this._copyTimer));\n\n if (!root || !win?.MutationObserver) return;\n\n const observer = new win.MutationObserver(() => {\n this.localeLabels.set(this._getLocaleLabels());\n });\n\n observer.observe(root, {\n attributes: true,\n attributeFilter: ['lang'],\n });\n\n this.destroyRef.onDestroy(() => observer.disconnect());\n }\n\n copy(): void {\n const text = this.code();\n const win = this.doc.defaultView;\n\n if (win?.navigator?.clipboard) {\n void win.navigator.clipboard.writeText(text).then(() => this._markCopied());\n } else {\n // Fallback para HTTP o navegadores sin Clipboard API\n const ta = this.doc.createElement('textarea');\n ta.value = text;\n ta.style.cssText = 'position:fixed;top:0;left:0;opacity:0;pointer-events:none';\n this.doc.body.appendChild(ta);\n ta.focus();\n ta.select();\n try {\n this.doc.execCommand('copy');\n this._markCopied();\n } finally {\n this.doc.body.removeChild(ta);\n }\n }\n }\n\n private _markCopied(): void {\n this.copied.set(true);\n clearTimeout(this._copyTimer);\n this._copyTimer = setTimeout(() => this.copied.set(false), 2000);\n }\n\n private _getLocaleLabels(): {\n copyLabel: string;\n copiedLabel: string;\n copyAriaLabel: string;\n copiedAriaLabel: string;\n } {\n const lang = this.doc.documentElement?.lang?.toLowerCase() ?? 'en';\n\n if (lang.startsWith('es')) {\n return {\n copyLabel: 'Copiar',\n copiedLabel: 'Copiado',\n copyAriaLabel: 'Copiar código',\n copiedAriaLabel: 'Código copiado',\n };\n }\n\n return {\n copyLabel: 'Copy',\n copiedLabel: 'Copied',\n copyAriaLabel: 'Copy code',\n copiedAriaLabel: 'Code copied',\n };\n }\n\n private _resolveInputLabel(value: string | undefined): string | undefined {\n const trimmed = value?.trim();\n return trimmed ? value : undefined;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -101,8 +101,7 @@ let _seq = 0;
101
101
  */
102
102
  class NeuColorPickerComponent {
103
103
  // ── Inputs / Outputs ────────────────────────────────────────────
104
- mode = input('hex', /* @ts-ignore */
105
- ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
104
+ mode = input('hex', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
106
105
  /** Emitido al cambiar el color / Emitted when color changes */
107
106
  colorChange = output();
108
107
  // ── Internal state ───────────────────────────────────────────────
@@ -120,16 +119,11 @@ class NeuColorPickerComponent {
120
119
  '#a855f7',
121
120
  '#ec4899',
122
121
  ];
123
- _isOpen = signal(false, /* @ts-ignore */
124
- ...(ngDevMode ? [{ debugName: "_isOpen" }] : /* istanbul ignore next */ []));
125
- _cvaDisabled = signal(false, /* @ts-ignore */
126
- ...(ngDevMode ? [{ debugName: "_cvaDisabled" }] : /* istanbul ignore next */ []));
127
- _hue = signal(210, /* @ts-ignore */
128
- ...(ngDevMode ? [{ debugName: "_hue" }] : /* istanbul ignore next */ []));
129
- _sv = signal({ s: 80, v: 90 }, /* @ts-ignore */
130
- ...(ngDevMode ? [{ debugName: "_sv" }] : /* istanbul ignore next */ []));
131
- _activeMode = linkedSignal(() => this.mode(), /* @ts-ignore */
132
- ...(ngDevMode ? [{ debugName: "_activeMode" }] : /* istanbul ignore next */ []));
122
+ _isOpen = signal(false, ...(ngDevMode ? [{ debugName: "_isOpen" }] : /* istanbul ignore next */ []));
123
+ _cvaDisabled = signal(false, ...(ngDevMode ? [{ debugName: "_cvaDisabled" }] : /* istanbul ignore next */ []));
124
+ _hue = signal(210, ...(ngDevMode ? [{ debugName: "_hue" }] : /* istanbul ignore next */ []));
125
+ _sv = signal({ s: 80, v: 90 }, ...(ngDevMode ? [{ debugName: "_sv" }] : /* istanbul ignore next */ []));
126
+ _activeMode = linkedSignal(() => this.mode(), ...(ngDevMode ? [{ debugName: "_activeMode" }] : /* istanbul ignore next */ []));
133
127
  _dragging = false;
134
128
  _onChange = () => { };
135
129
  _onTouched = () => { };
@@ -169,8 +163,7 @@ class NeuColorPickerComponent {
169
163
  }
170
164
  }
171
165
  // ── Computed ──────────────────────────────────────────────────
172
- _hexValue = computed(() => hsvToHex(this._hue(), this._sv().s, this._sv().v), /* @ts-ignore */
173
- ...(ngDevMode ? [{ debugName: "_hexValue" }] : /* istanbul ignore next */ []));
166
+ _hexValue = computed(() => hsvToHex(this._hue(), this._sv().s, this._sv().v), ...(ngDevMode ? [{ debugName: "_hexValue" }] : /* istanbul ignore next */ []));
174
167
  _textValue = computed(() => {
175
168
  const hex = this._hexValue();
176
169
  const rgb = hexToRgb(hex);
@@ -186,8 +179,7 @@ class NeuColorPickerComponent {
186
179
  default:
187
180
  return hex;
188
181
  }
189
- }, /* @ts-ignore */
190
- ...(ngDevMode ? [{ debugName: "_textValue" }] : /* istanbul ignore next */ []));
182
+ }, ...(ngDevMode ? [{ debugName: "_textValue" }] : /* istanbul ignore next */ []));
191
183
  // ── Canvas interactions ───────────────────────────────────────
192
184
  _canvasDown(e) {
193
185
  this._dragging = true;
@@ -268,8 +260,8 @@ class NeuColorPickerComponent {
268
260
  setDisabledState(d) {
269
261
  this._cvaDisabled.set(d);
270
262
  }
271
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuColorPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
272
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.4", type: NeuColorPickerComponent, isStandalone: true, selector: "neu-color-picker", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { colorChange: "colorChange" }, host: { listeners: { "document:mousedown": "_outsideClick($event)" }, properties: { "class.neu-cp--open": "_isOpen()", "class.neu-cp--disabled": "_cvaDisabled()" }, classAttribute: "neu-cp" }, providers: [
263
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuColorPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
264
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: NeuColorPickerComponent, isStandalone: true, selector: "neu-color-picker", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { colorChange: "colorChange" }, host: { listeners: { "document:mousedown": "_outsideClick($event)" }, properties: { "class.neu-cp--open": "_isOpen()", "class.neu-cp--disabled": "_cvaDisabled()" }, classAttribute: "neu-cp" }, providers: [
273
265
  {
274
266
  provide: NG_VALUE_ACCESSOR,
275
267
  useExisting: forwardRef(() => NeuColorPickerComponent),
@@ -373,7 +365,7 @@ class NeuColorPickerComponent {
373
365
  </ng-template>
374
366
  `, isInline: true, styles: ["@charset \"UTF-8\";.neu-cp{position:relative;display:inline-block}.neu-cp--disabled{opacity:.55;pointer-events:none}.neu-cp__trigger{all:unset;display:inline-flex;align-items:center;gap:8px;padding:6px 12px 6px 8px;border:1px solid var(--neu-border-color, #d1d5db);border-radius:var(--neu-radius-md, 8px);background:var(--neu-surface-1, #ffffff);cursor:pointer;box-sizing:border-box;transition:border-color .12s}.neu-cp__trigger:hover:not([disabled]){border-color:var(--neu-color-primary, #0ea5e9)}.neu-cp__trigger[disabled]{background:var(--neu-surface-2, #f3f4f6)}.neu-cp__swatch{width:22px;height:22px;border-radius:var(--neu-radius-sm, 4px);border:1px solid rgba(0,0,0,.1);display:inline-block}.neu-cp__swatch-sm{width:28px;height:28px;border-radius:var(--neu-radius-md, 8px);border:1px solid rgba(0,0,0,.1);display:inline-block;flex-shrink:0}.neu-cp__hex-label{font-size:.8125rem;color:var(--neu-text-primary, #111);font-family:monospace}.neu-cp__panel{position:relative;width:272px;background:var(--neu-surface-1, #ffffff);border:1px solid var(--neu-border-color, #e5e7eb);border-radius:var(--neu-radius-xl, 16px);box-shadow:0 10px 24px -4px #00000024;padding:16px;z-index:1001;display:flex;flex-direction:column;gap:12px;animation:neu-cp-in 80ms ease}@keyframes neu-cp-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.neu-cp__canvas-wrap{position:relative;width:100%;height:150px;border-radius:var(--neu-radius-md, 8px);overflow:hidden;cursor:crosshair;-webkit-user-select:none;user-select:none;touch-action:none}.neu-cp__canvas-wrap:before{content:\"\";position:absolute;inset:0;background:linear-gradient(to right,#fff,transparent)}.neu-cp__canvas-wrap:after{content:\"\";position:absolute;inset:0;background:linear-gradient(to top,#000,transparent)}.neu-cp__canvas-cursor{position:absolute;width:14px;height:14px;border-radius:50%;border:2px solid #fff;box-shadow:0 1px 4px #00000073;transform:translate(-50%,-50%);pointer-events:none;z-index:1}.neu-cp__hue-slider{width:100%;height:10px;border-radius:999px;cursor:pointer;appearance:none;-webkit-appearance:none;background:linear-gradient(to right,red,#ff8000,#ff0,#80ff00,#0f0,#00ff80,#0ff,#0080ff,#00f,#7f00ff,#f0f,#ff0080,red)}.neu-cp__hue-slider::-webkit-slider-thumb{-webkit-appearance:none;width:16px;height:16px;border-radius:50%;background:#fff;border:2px solid rgba(0,0,0,.25);box-shadow:0 1px 3px #0003;cursor:pointer}.neu-cp__hue-slider::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:#fff;border:2px solid rgba(0,0,0,.25);box-shadow:0 1px 3px #0003;cursor:pointer}.neu-cp__swatches{display:flex;gap:5px;flex-wrap:wrap}.neu-cp__sw{all:unset;box-sizing:border-box;width:20px;height:20px;border-radius:4px;cursor:pointer;border:1.5px solid rgba(0,0,0,.1);transition:transform 80ms}.neu-cp__sw:hover{transform:scale(1.2)}.neu-cp__sw:focus-visible{outline:2px solid var(--neu-color-primary, #0ea5e9);outline-offset:1px}.neu-cp__mode-tabs{display:flex;background:var(--neu-surface-2, #f3f4f6);border-radius:var(--neu-radius-md, 8px);padding:3px;gap:2px}.neu-cp__mode-btn{all:unset;flex:1;text-align:center;font-size:.6875rem;font-weight:600;padding:4px 0;border-radius:6px;cursor:pointer;transition:background 80ms,color 80ms}.neu-cp__mode-btn--active{background:var(--neu-surface-1, #ffffff);color:var(--neu-color-primary, #0ea5e9);box-shadow:0 1px 4px #00000014}.neu-cp__input-row{display:flex;gap:8px;align-items:center}.neu-cp__text-input{flex:1;padding:6px 10px;border:1px solid var(--neu-border-color, #d1d5db);border-radius:var(--neu-radius-md, 8px);font-size:.8125rem;font-family:monospace;background:var(--neu-surface-1, #fff);color:var(--neu-text-primary, #111);outline:none}.neu-cp__text-input:focus{border-color:var(--neu-color-primary, #0ea5e9)}\n"], dependencies: [{ kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
375
367
  }
376
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.4", ngImport: i0, type: NeuColorPickerComponent, decorators: [{
368
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: NeuColorPickerComponent, decorators: [{
377
369
  type: Component,
378
370
  args: [{ selector: 'neu-color-picker', imports: [OverlayModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
379
371
  {