@weeehaoooz/talos-ui 0.1.1 → 0.1.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.
- package/README.md +2 -0
- package/fesm2022/{weeehaoooz-talos-ui-button-button-group.mjs → weeehaoooz-talos-ui-button.mjs} +91 -15
- package/fesm2022/weeehaoooz-talos-ui-button.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display.mjs +3110 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz.mjs +2414 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-dropdown.mjs +1039 -0
- package/fesm2022/weeehaoooz-talos-ui-dropdown.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback.mjs +2885 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form.mjs +10799 -0
- package/fesm2022/weeehaoooz-talos-ui-form.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-layout.mjs +1316 -7
- package/fesm2022/weeehaoooz-talos-ui-layout.mjs.map +1 -1
- package/fesm2022/weeehaoooz-talos-ui-nav.mjs +3 -3
- package/fesm2022/weeehaoooz-talos-ui-nav.mjs.map +1 -1
- package/fesm2022/weeehaoooz-talos-ui.mjs +21592 -16293
- package/fesm2022/weeehaoooz-talos-ui.mjs.map +1 -1
- package/package.json +20 -139
- package/styles/_breadcrumb.scss +16 -0
- package/styles/_button-group.scss +2 -1
- package/styles/_buttons.scss +51 -0
- package/styles/_dropdown.scss +438 -0
- package/styles/_form-controls.scss +13 -0
- package/styles/_progress-bar.scss +43 -0
- package/styles/_skeleton.scss +176 -0
- package/styles/_spinner.scss +58 -0
- package/styles/_variables.scss +33 -0
- package/styles/index.scss +6 -1
- package/types/weeehaoooz-talos-ui-button.d.ts +92 -0
- package/types/weeehaoooz-talos-ui-button.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-display.d.ts +1018 -0
- package/types/weeehaoooz-talos-ui-data-display.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-viz.d.ts +839 -0
- package/types/weeehaoooz-talos-ui-data-viz.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-dropdown.d.ts +187 -0
- package/types/weeehaoooz-talos-ui-dropdown.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-feedback.d.ts +1495 -0
- package/types/weeehaoooz-talos-ui-feedback.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form.d.ts +2639 -0
- package/types/weeehaoooz-talos-ui-form.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-layout.d.ts +851 -3
- package/types/weeehaoooz-talos-ui-layout.d.ts.map +1 -1
- package/types/weeehaoooz-talos-ui-nav.d.ts +1 -1
- package/types/weeehaoooz-talos-ui.d.ts +7148 -4629
- package/types/weeehaoooz-talos-ui.d.ts.map +1 -1
- package/fesm2022/weeehaoooz-talos-ui-button-button-group.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-button-button.mjs +0 -94
- package/fesm2022/weeehaoooz-talos-ui-button-button.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs +0 -233
- package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-data-display-data-grid.mjs +0 -1627
- package/fesm2022/weeehaoooz-talos-ui-data-display-data-grid.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs +0 -361
- package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs +0 -312
- package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs +0 -235
- package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs +0 -462
- package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs +0 -805
- package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs +0 -267
- package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs +0 -351
- package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs +0 -566
- package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs +0 -534
- package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs +0 -446
- package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs +0 -376
- package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs +0 -147
- package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs +0 -242
- package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs +0 -514
- package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs +0 -548
- package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs +0 -692
- package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs +0 -761
- package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs +0 -896
- package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs +0 -872
- package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs +0 -119
- package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs +0 -135
- package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs +0 -666
- package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs +0 -147
- package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-input.mjs +0 -33
- package/fesm2022/weeehaoooz-talos-ui-form-input.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs +0 -455
- package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs +0 -379
- package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs +0 -297
- package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs +0 -661
- package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs +0 -346
- package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs +0 -896
- package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs +0 -252
- package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs.map +0 -1
- package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs +0 -916
- package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs.map +0 -1
- package/types/weeehaoooz-talos-ui-button-button-group.d.ts +0 -62
- package/types/weeehaoooz-talos-ui-button-button-group.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-button-button.d.ts +0 -38
- package/types/weeehaoooz-talos-ui-button-button.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-data-display-badge.d.ts +0 -119
- package/types/weeehaoooz-talos-ui-data-display-badge.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-data-display-data-grid.d.ts +0 -272
- package/types/weeehaoooz-talos-ui-data-display-data-grid.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts +0 -135
- package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts +0 -144
- package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts +0 -83
- package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts +0 -255
- package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts +0 -204
- package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts +0 -101
- package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts +0 -138
- package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts +0 -161
- package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-feedback-alert.d.ts +0 -212
- package/types/weeehaoooz-talos-ui-feedback-alert.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts +0 -259
- package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts +0 -147
- package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts +0 -32
- package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-affix.d.ts +0 -88
- package/types/weeehaoooz-talos-ui-form-affix.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts +0 -113
- package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-checkbox.d.ts +0 -165
- package/types/weeehaoooz-talos-ui-form-checkbox.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-chips.d.ts +0 -152
- package/types/weeehaoooz-talos-ui-form-chips.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-color-picker.d.ts +0 -144
- package/types/weeehaoooz-talos-ui-form-color-picker.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-date-picker.d.ts +0 -138
- package/types/weeehaoooz-talos-ui-form-date-picker.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts +0 -148
- package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts +0 -44
- package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts +0 -48
- package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts +0 -227
- package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-form-field.d.ts +0 -42
- package/types/weeehaoooz-talos-ui-form-form-field.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-input.d.ts +0 -15
- package/types/weeehaoooz-talos-ui-form-input.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-otp.d.ts +0 -111
- package/types/weeehaoooz-talos-ui-form-otp.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-password-input.d.ts +0 -145
- package/types/weeehaoooz-talos-ui-form-password-input.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-radio.d.ts +0 -84
- package/types/weeehaoooz-talos-ui-form-radio.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-range-input.d.ts +0 -181
- package/types/weeehaoooz-talos-ui-form-range-input.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-rating.d.ts +0 -110
- package/types/weeehaoooz-talos-ui-form-rating.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-select-input.d.ts +0 -195
- package/types/weeehaoooz-talos-ui-form-select-input.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts +0 -79
- package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts.map +0 -1
- package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts +0 -192
- package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"weeehaoooz-talos-ui-data-viz-heatmap.mjs","sources":["../../../projects/talos-ui/data-viz/heatmap/heatmap.component.ts","../../../projects/talos-ui/data-viz/heatmap/heatmap.component.html","../../../projects/talos-ui/data-viz/heatmap/heatmap.module.ts","../../../projects/talos-ui/data-viz/heatmap/weeehaoooz-talos-ui-data-viz-heatmap.ts"],"sourcesContent":["import {\n Component,\n ElementRef,\n computed,\n effect,\n inject,\n input,\n model,\n output,\n signal\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n LucideRefreshCw,\n LucideUpload,\n LucideMaximize2,\n LucideMinimize2,\n LucideChevronDown,\n LucideCheck,\n LucideFileSpreadsheet,\n LucideFileJson,\n LucideCalendar,\n LucideClock,\n LucideArrowLeftRight\n} from '@lucide/angular';\nimport {\n addDays,\n addWeeks,\n endOfDay,\n endOfISOWeek,\n isBefore,\n isSameDay,\n isValid,\n startOfDay,\n startOfISOWeek,\n subWeeks\n} from 'date-fns';\nimport { formatDate } from '@weeehaoooz/talos-ui/core';\nimport { DateRangePickerComponent } from '@weeehaoooz/talos-ui/form/date-range-picker';\nimport type { DateRangePreset, DateRangeValue } from '@weeehaoooz/talos-ui/form/date-range-picker';\nimport { TalosTooltipDirective } from '@weeehaoooz/talos-ui/feedback/tooltip';\nimport {\n HeatmapCell,\n HeatmapCellClickEvent,\n HeatmapCellShape,\n HeatmapCellSize,\n HeatmapColorScheme,\n HeatmapDataInput,\n HeatmapDataPoint,\n HeatmapExportFormat,\n HeatmapInterval,\n HeatmapMatrixData,\n HeatmapMetric,\n HeatmapTimeFormat,\n HeatmapTimeRange,\n HeatmapTimestampData\n} from './heatmap.types';\n\nconst DEFAULT_DAYS = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];\n\ninterface ColorStop {\n r: number;\n g: number;\n b: number;\n}\n\nconst PALETTE_CONFIG: Record<\n HeatmapColorScheme,\n { zero: { bg: string; text: string }; min: ColorStop; max: ColorStop; gradientCss: string }\n> = {\n indigo: {\n zero: { bg: '#eef2ff', text: '#4338ca' },\n min: { r: 219, g: 228, b: 255 }, // #dbe4ff\n max: { r: 67, g: 56, b: 202 }, // #4338ca\n gradientCss: 'linear-gradient(90deg, #dbe4ff 0%, #818cf8 50%, #4338ca 100%)'\n },\n blue: {\n zero: { bg: '#eff6ff', text: '#1d4ed8' },\n min: { r: 219, g: 234, b: 254 }, // #dbeafe\n max: { r: 29, g: 78, b: 216 }, // #1d4ed8\n gradientCss: 'linear-gradient(90deg, #dbeafe 0%, #60a5fa 50%, #1d4ed8 100%)'\n },\n emerald: {\n zero: { bg: '#ecfdf5', text: '#047857' },\n min: { r: 209, g: 250, b: 229 }, // #d1fae5\n max: { r: 4, g: 120, b: 87 }, // #047857\n gradientCss: 'linear-gradient(90deg, #d1fae5 0%, #34d399 50%, #047857 100%)'\n },\n rose: {\n zero: { bg: '#fff1f2', text: '#be123c' },\n min: { r: 255, g: 228, b: 230 }, // #ffe4e6\n max: { r: 190, g: 18, b: 60 }, // #be123c\n gradientCss: 'linear-gradient(90deg, #ffe4e6 0%, #fb7185 50%, #be123c 100%)'\n },\n amber: {\n zero: { bg: '#fffbeb', text: '#b45309' },\n min: { r: 254, g: 243, b: 199 }, // #fef3c7\n max: { r: 180, g: 83, b: 9 }, // #b45309\n gradientCss: 'linear-gradient(90deg, #fef3c7 0%, #fbbf24 50%, #b45309 100%)'\n },\n violet: {\n zero: { bg: '#f5f3ff', text: '#6d28d9' },\n min: { r: 237, g: 233, b: 254 }, // #ede9fe\n max: { r: 109, g: 40, b: 217 }, // #6d28d9\n gradientCss: 'linear-gradient(90deg, #ede9fe 0%, #a78bfa 50%, #6d28d9 100%)'\n },\n slate: {\n zero: { bg: '#f8fafc', text: '#334155' },\n min: { r: 226, g: 232, b: 240 }, // #e2e8f0\n max: { r: 51, g: 65, b: 85 }, // #334155\n gradientCss: 'linear-gradient(90deg, #e2e8f0 0%, #94a3b8 50%, #334155 100%)'\n },\n custom: {\n zero: { bg: '#eef2ff', text: '#4338ca' },\n min: { r: 219, g: 228, b: 255 },\n max: { r: 67, g: 56, b: 202 },\n gradientCss: 'linear-gradient(90deg, #dbe4ff 0%, #4338ca 100%)'\n }\n};\n\n@Component({\n selector: 'talos-heatmap',\n imports: [\n FormsModule,\n DateRangePickerComponent,\n TalosTooltipDirective,\n LucideRefreshCw,\n LucideUpload,\n LucideMaximize2,\n LucideMinimize2,\n LucideChevronDown,\n LucideCheck,\n LucideFileSpreadsheet,\n LucideFileJson,\n LucideCalendar,\n LucideClock,\n LucideArrowLeftRight\n ],\n templateUrl: './heatmap.component.html',\n styleUrl: './heatmap.component.scss',\n host: {\n 'class': 'talos-heatmap',\n '[class.talos-heatmap-expanded]': 'isExpanded()',\n '[class.talos-heatmap-loading]': 'loading()',\n '[class.talos-heatmap-sm]': 'cellSize() === \"sm\"',\n '[class.talos-heatmap-md]': 'cellSize() === \"md\"',\n '[class.talos-heatmap-lg]': 'cellSize() === \"lg\"',\n '[class.talos-heatmap-pill]': 'cellShape() === \"pill\"',\n '[class.talos-heatmap-rounded]': 'cellShape() === \"rounded\"',\n '[class.talos-heatmap-square]': 'cellShape() === \"square\"',\n '[class.talos-heatmap-fit-width]': 'isFitWidth()',\n '[class.talos-heatmap-compact-square]': '!isFitWidth()',\n '[class.talos-heatmap-swapped-axes]': 'swapAxes()',\n '[attr.role]': '\"region\"',\n '[attr.aria-label]': 'title()'\n }\n})\nexport class TalosHeatmapComponent {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n // Inputs & Models\n readonly data = input<HeatmapDataInput>([]);\n readonly metrics = input<HeatmapMetric[]>([]);\n readonly selectedMetricId = model<string | undefined>(undefined);\n readonly interval = model<HeatmapInterval>('hour');\n readonly dateRange = model<DateRangeValue | null>(null);\n readonly swapAxes = model<boolean>(false);\n readonly title = input<string>('Busiest times');\n readonly hoursRange = input<[number, number]>([9, 17]);\n readonly timeFormat = input<HeatmapTimeFormat>('12h');\n readonly days = input<string[]>(DEFAULT_DAYS);\n readonly colorScheme = input<HeatmapColorScheme>('indigo');\n readonly customColorStops = input<[string, string] | undefined>(undefined);\n readonly showLegend = input<boolean>(true);\n readonly showValues = input<boolean>(true);\n readonly cellShape = input<HeatmapCellShape>('pill');\n readonly cellSize = input<HeatmapCellSize>('md');\n readonly fitWidth = input<boolean | undefined>(undefined);\n readonly loading = input<boolean>(false);\n readonly showToolbar = input<boolean>(true);\n readonly showRefresh = input<boolean>(true);\n readonly showExport = input<boolean>(true);\n readonly showExpand = input<boolean>(true);\n readonly showSwapAxes = input<boolean>(false);\n readonly showIntervalToggle = input<boolean>(false);\n readonly showDateRangePicker = input<boolean>(false);\n readonly dateRangePresets = input<DateRangePreset[] | null>(null);\n readonly unit = input<string>('');\n readonly maxValue = input<number | undefined>(undefined);\n readonly minValue = input<number | undefined>(undefined);\n\n // Outputs\n readonly cellClick = output<HeatmapCellClickEvent>();\n readonly cellHover = output<HeatmapCell | null>();\n readonly timeRangeChange = output<HeatmapTimeRange>();\n readonly refresh = output<void>();\n readonly metricChange = output<HeatmapMetric>();\n readonly export = output<{ format: HeatmapExportFormat; data: unknown }>();\n\n // State signals\n readonly isExpanded = signal<boolean>(false);\n readonly isMetricDropdownOpen = signal<boolean>(false);\n readonly isExportDropdownOpen = signal<boolean>(false);\n readonly hoveredCell = signal<HeatmapCell | null>(null);\n readonly focusedCoord = signal<{ colIndex: number; rowIndex: number } | null>(null);\n\n // Layout Fit computation\n readonly isFitWidth = computed<boolean>(() => {\n const fw = this.fitWidth();\n if (fw !== undefined) return fw;\n return this.cellShape() !== 'square';\n });\n\n // Active Metric computation\n readonly currentMetric = computed<HeatmapMetric | undefined>(() => {\n const list = this.metrics();\n if (!list || list.length === 0) return undefined;\n const selectedId = this.selectedMetricId();\n if (selectedId) {\n const found = list.find((m) => m.id === selectedId);\n if (found) return found;\n }\n return list[0];\n });\n\n // Effective Active Color Scheme\n readonly activeColorScheme = computed<HeatmapColorScheme>(() => {\n const metric = this.currentMetric();\n if (metric && metric.colorScheme) return metric.colorScheme;\n return this.colorScheme();\n });\n\n // Effective Unit\n readonly activeUnit = computed<string>(() => {\n const metric = this.currentMetric();\n if (metric && metric.unit !== undefined) return metric.unit;\n return this.unit();\n });\n\n // Effective Raw Data Input\n readonly activeDataInput = computed<HeatmapDataInput>(() => {\n const metric = this.currentMetric();\n if (metric) return metric.data;\n return this.data();\n });\n\n // Hours array from range (for hour-by-hour mode)\n readonly hours = computed<number[]>(() => {\n const [start, end] = this.hoursRange();\n const clampedStart = Math.max(0, Math.min(23, start));\n const clampedEnd = Math.max(clampedStart, Math.min(23, end));\n const result: number[] = [];\n for (let h = clampedStart; h <= clampedEnd; h++) {\n result.push(h);\n }\n return result;\n });\n\n // Resolved Date Range bounds\n readonly parsedDateRange = computed<{ start: Date | null; end: Date | null }>(() => {\n const dr = this.dateRange();\n if (!dr || (!dr.startDate && !dr.endDate)) {\n return { start: null, end: null };\n }\n const s = dr.startDate ? startOfDay(new Date(dr.startDate as any)) : null;\n const e = dr.endDate ? endOfDay(new Date(dr.endDate as any)) : (s ? endOfDay(s) : null);\n return { start: s, end: e };\n });\n\n // Day list for Day-by-Day mode (weeks grouping)\n readonly dayModeWeeks = computed<{ label: string; start: Date; end: Date; days: Date[] }[]>(() => {\n const { start, end } = this.parsedDateRange();\n const effectiveStart = start || startOfISOWeek(subWeeks(new Date(), 3));\n const effectiveEnd = end || endOfISOWeek(new Date());\n\n const weeks: { label: string; start: Date; end: Date; days: Date[] }[] = [];\n let currentWeekStart = startOfISOWeek(effectiveStart);\n const lastWeekEnd = endOfISOWeek(effectiveEnd);\n\n while (isSameDay(currentWeekStart, lastWeekEnd) || isBefore(currentWeekStart, lastWeekEnd)) {\n const currentWeekEnd = addDays(currentWeekStart, 6);\n const daysInWeek: Date[] = [];\n\n for (let i = 0; i < 7; i++) {\n daysInWeek.push(addDays(currentWeekStart, i));\n }\n\n const label = `${formatDate(currentWeekStart, 'MMM d')} - ${formatDate(currentWeekEnd, 'MMM d')}`;\n weeks.push({\n label,\n start: currentWeekStart,\n end: currentWeekEnd,\n days: daysInWeek\n });\n\n currentWeekStart = addWeeks(currentWeekStart, 1);\n }\n\n return weeks;\n });\n\n // Normalized Value Map:\n // For 'hour': Map<`${colKey}_${hour}`, { value, meta }>\n // For 'day': Map<`${yyyy-MM-dd}`, { value, meta }> AND Map<`${colKey}`, { value, meta }>\n readonly normalizedValueMap = computed<Map<string, { value: number; meta?: Record<string, unknown> }>>(() => {\n const map = new Map<string, { value: number; meta?: Record<string, unknown> }>();\n const rawInput = this.activeDataInput();\n const currentDays = this.days();\n const currentInterval = this.interval();\n\n if (!rawInput) return map;\n\n if (Array.isArray(rawInput)) {\n if (rawInput.length === 0) return map;\n\n const firstItem = rawInput[0];\n\n if (\n typeof firstItem === 'string' ||\n firstItem instanceof Date ||\n (typeof firstItem === 'number' && firstItem > 1000000000)\n ) {\n // Raw Timestamp list\n (rawInput as HeatmapTimestampData).forEach((ts) => {\n const date = new Date(ts);\n if (isValid(date)) {\n if (currentInterval === 'day') {\n const dayKey = formatDate(date, 'yyyy-MM-dd');\n const existing = map.get(dayKey);\n if (existing) existing.value += 1;\n else map.set(dayKey, { value: 1 });\n } else {\n const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n const dayName = dayNames[date.getDay()];\n const matchedDay = currentDays.find((d) => d.toLowerCase().startsWith(dayName.toLowerCase())) || dayName;\n const hour = date.getHours();\n const key = `${matchedDay}_${hour}`;\n const existing = map.get(key);\n if (existing) existing.value += 1;\n else map.set(key, { value: 1 });\n }\n }\n });\n } else {\n // HeatmapDataPoint array\n (rawInput as HeatmapDataPoint[]).forEach((point) => {\n if (currentInterval === 'day') {\n let dayKey = '';\n if (point.date) {\n dayKey = typeof point.date === 'string' && /^\\d{4}-\\d{2}-\\d{2}/.test(point.date)\n ? point.date.substring(0, 10)\n : formatDate(new Date(point.date), 'yyyy-MM-dd');\n } else if (point.day instanceof Date) {\n dayKey = formatDate(point.day, 'yyyy-MM-dd');\n } else if (typeof point.day === 'string' && /^\\d{4}-\\d{2}-\\d{2}/.test(point.day)) {\n dayKey = point.day.substring(0, 10);\n } else {\n dayKey = String(point.day ?? '');\n }\n\n if (dayKey) {\n const existing = map.get(dayKey);\n if (existing) {\n existing.value += point.value;\n if (point.meta) existing.meta = { ...existing.meta, ...point.meta };\n } else {\n map.set(dayKey, { value: point.value, meta: point.meta });\n }\n }\n } else {\n // Hour by hour\n let dayKey = '';\n if (point.day instanceof Date) {\n const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n const dayName = dayNames[point.day.getDay()];\n dayKey = currentDays.find((d) => d.toLowerCase().startsWith(dayName.toLowerCase())) || dayName;\n } else if (typeof point.day === 'number') {\n dayKey = currentDays[point.day] || String(point.day);\n } else {\n dayKey = String(point.day ?? '');\n }\n\n const hour = point.hour ?? 0;\n const key = `${dayKey}_${hour}`;\n const existing = map.get(key);\n if (existing) {\n existing.value += point.value;\n if (point.meta) existing.meta = { ...existing.meta, ...point.meta };\n } else {\n map.set(key, { value: point.value, meta: point.meta });\n }\n }\n });\n }\n } else if (typeof rawInput === 'object') {\n // HeatmapMatrixData\n const matrix = rawInput as HeatmapMatrixData;\n Object.entries(matrix).forEach(([outerKey, innerObj]) => {\n if (typeof innerObj === 'object' && innerObj !== null) {\n Object.entries(innerObj).forEach(([innerKey, val]) => {\n const numVal = Number(val) || 0;\n if (currentInterval === 'day') {\n const key = `${outerKey}_${innerKey}`;\n map.set(key, { value: numVal });\n } else {\n const isInnerHour = !isNaN(Number(innerKey));\n if (isInnerHour) {\n const hour = Number(innerKey);\n const key = `${outerKey}_${hour}`;\n map.set(key, { value: numVal });\n } else {\n const hour = Number(outerKey);\n const key = `${innerKey}_${hour}`;\n map.set(key, { value: numVal });\n }\n }\n });\n }\n });\n }\n\n return map;\n });\n\n // Effective min & max value for heat scale\n readonly computedScaleBounds = computed<{ min: number; max: number }>(() => {\n const customMin = this.minValue();\n const customMax = this.maxValue();\n const map = this.normalizedValueMap();\n\n let dataMax = 0;\n for (const item of map.values()) {\n if (item.value > dataMax) dataMax = item.value;\n }\n\n const min = customMin !== undefined ? customMin : 0;\n const max = customMax !== undefined ? customMax : Math.max(1, dataMax);\n\n return { min, max };\n });\n\n // Gradient CSS for Legend bar\n readonly legendGradientCss = computed<string>(() => {\n const scheme = this.activeColorScheme();\n return PALETTE_CONFIG[scheme]?.gradientCss || PALETTE_CONFIG.indigo.gradientCss;\n });\n\n // Column Headers computation (supports axis swapping)\n readonly columnHeaders = computed<{ key: string | number; label: string }[]>(() => {\n const isSwapped = this.swapAxes();\n const currentInterval = this.interval();\n\n if (!isSwapped) {\n return this.days().map((day) => ({ key: day, label: day }));\n }\n\n // When axes are swapped:\n if (currentInterval === 'day') {\n const weeks = this.dayModeWeeks();\n return weeks.map((w) => ({ key: w.label, label: w.label }));\n }\n\n const hoursList = this.hours();\n const format = this.timeFormat();\n return hoursList.map((hour) => ({\n key: hour,\n label: this.formatHourLabel(hour, format)\n }));\n });\n\n // Grid Matrix computation\n readonly gridRows = computed<{ key: string | number; label: string; cells: HeatmapCell[] }[]>(() => {\n const currentInterval = this.interval();\n const isSwapped = this.swapAxes();\n const map = this.normalizedValueMap();\n const { min, max } = this.computedScaleBounds();\n const scheme = this.activeColorScheme();\n const palette = PALETTE_CONFIG[scheme] || PALETTE_CONFIG.indigo;\n const unitStr = this.activeUnit();\n const unitSuffix = unitStr ? ` ${unitStr}` : '';\n const format = this.timeFormat();\n\n const getVisuals = (val: number) => {\n const intensity = max > min ? Math.max(0, Math.min(1, (val - min) / (max - min))) : 0;\n let bgColor = '';\n let textColor = '';\n if (val === 0) {\n bgColor = palette.zero.bg;\n textColor = palette.zero.text;\n } else {\n const r = Math.round(palette.min.r + (palette.max.r - palette.min.r) * intensity);\n const g = Math.round(palette.min.g + (palette.max.g - palette.min.g) * intensity);\n const b = Math.round(palette.min.b + (palette.max.b - palette.min.b) * intensity);\n bgColor = `rgb(${r}, ${g}, ${b})`;\n textColor = intensity >= 0.55 ? '#ffffff' : palette.zero.text;\n }\n return { intensity, bgColor, textColor };\n };\n\n // --- DAY-BY-DAY MODE ---\n if (currentInterval === 'day') {\n const weeks = this.dayModeWeeks();\n const dayLabels = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'];\n\n if (!isSwapped) {\n // Standard: Rows = Weeks, Columns = Days\n return weeks.map((week, weekIdx) => {\n const cells: HeatmapCell[] = week.days.map((d, dayIdx) => {\n const dateStr = formatDate(d, 'yyyy-MM-dd');\n const dayName = dayLabels[dayIdx];\n const entry = map.get(dateStr) || map.get(`${dayName}_${weekIdx}`);\n const val = entry?.value ?? 0;\n const { intensity, bgColor, textColor } = getVisuals(val);\n const tooltip = `${formatDate(d, 'EEEE, MMMM d, yyyy')}: ${val}${unitSuffix}`;\n\n return {\n id: dateStr,\n colKey: dayName,\n colLabel: `${dayName} (${formatDate(d, 'd')})`,\n rowKey: week.label,\n rowLabel: week.label,\n value: val,\n intensity,\n backgroundColor: bgColor,\n textColor,\n formattedValue: String(val),\n tooltipText: tooltip,\n date: d,\n meta: entry?.meta\n };\n });\n\n return {\n key: week.label,\n label: week.label,\n cells\n };\n });\n } else {\n // Swapped: Rows = Days (Mon..Sun), Columns = Weeks\n return dayLabels.map((dayName, dayIdx) => {\n const cells: HeatmapCell[] = weeks.map((week, weekIdx) => {\n const d = week.days[dayIdx];\n const dateStr = formatDate(d, 'yyyy-MM-dd');\n const entry = map.get(dateStr) || map.get(`${dayName}_${weekIdx}`);\n const val = entry?.value ?? 0;\n const { intensity, bgColor, textColor } = getVisuals(val);\n const tooltip = `${formatDate(d, 'EEEE, MMMM d, yyyy')}: ${val}${unitSuffix}`;\n\n return {\n id: `${dateStr}_swapped`,\n colKey: week.label,\n colLabel: week.label,\n rowKey: dayName,\n rowLabel: dayName,\n value: val,\n intensity,\n backgroundColor: bgColor,\n textColor,\n formattedValue: String(val),\n tooltipText: tooltip,\n date: d,\n meta: entry?.meta\n };\n });\n\n return {\n key: dayName,\n label: dayName,\n cells\n };\n });\n }\n }\n\n // --- HOUR-BY-HOUR MODE ---\n const hoursList = this.hours();\n const colsList = this.days();\n\n if (!isSwapped) {\n // Standard: Rows = Hours, Columns = Days\n return hoursList.map((hour) => {\n const hourLabel = this.formatHourLabel(hour, format);\n const cells: HeatmapCell[] = colsList.map((col) => {\n const key = `${col}_${hour}`;\n const entry = map.get(key);\n const val = entry?.value ?? 0;\n const { intensity, bgColor, textColor } = getVisuals(val);\n const tooltip = `${col}, ${hourLabel}: ${val}${unitSuffix}`;\n\n return {\n id: key,\n colKey: col,\n colLabel: col,\n rowKey: hour,\n rowLabel: hourLabel,\n value: val,\n intensity,\n backgroundColor: bgColor,\n textColor,\n formattedValue: String(val),\n tooltipText: tooltip,\n meta: entry?.meta\n };\n });\n\n return {\n key: hour,\n label: hourLabel,\n cells\n };\n });\n } else {\n // Swapped: Rows = Days, Columns = Hours\n return colsList.map((day) => {\n const cells: HeatmapCell[] = hoursList.map((hour) => {\n const hourLabel = this.formatHourLabel(hour, format);\n const key = `${day}_${hour}`;\n const entry = map.get(key);\n const val = entry?.value ?? 0;\n const { intensity, bgColor, textColor } = getVisuals(val);\n const tooltip = `${day}, ${hourLabel}: ${val}${unitSuffix}`;\n\n return {\n id: `${key}_swapped`,\n colKey: hour,\n colLabel: hourLabel,\n rowKey: day,\n rowLabel: day,\n value: val,\n intensity,\n backgroundColor: bgColor,\n textColor,\n formattedValue: String(val),\n tooltipText: tooltip,\n meta: entry?.meta\n };\n });\n\n return {\n key: day,\n label: day,\n cells\n };\n });\n }\n });\n\n constructor() {\n // Notify parent on time range boundaries changes\n effect(() => {\n const days = this.days();\n const hours = this.hours();\n const inter = this.interval();\n const dr = this.dateRange();\n const swapped = this.swapAxes();\n\n this.timeRangeChange.emit({\n interval: inter,\n startHour: hours.length > 0 ? hours[0] : undefined,\n endHour: hours.length > 0 ? hours[hours.length - 1] : undefined,\n days,\n startDate: dr?.startDate ? new Date(dr.startDate as any) : undefined,\n endDate: dr?.endDate ? new Date(dr.endDate as any) : undefined,\n dateRange: dr,\n swapAxes: swapped\n });\n });\n\n // Close dropdowns on outside click\n if (typeof document !== 'undefined') {\n document.addEventListener('click', (event: MouseEvent) => {\n const target = event.target as HTMLElement;\n if (!this.elementRef.nativeElement.contains(target)) {\n this.isMetricDropdownOpen.set(false);\n this.isExportDropdownOpen.set(false);\n }\n });\n }\n }\n\n formatHourLabel(hour: number, format: HeatmapTimeFormat): string {\n if (format === '24h') {\n return `${hour.toString().padStart(2, '0')}:00`;\n }\n if (hour === 0) return '12 AM';\n if (hour < 12) return `${hour} AM`;\n if (hour === 12) return '12 PM';\n return `${hour - 12} PM`;\n }\n\n setInterval(newInterval: HeatmapInterval): void {\n this.interval.set(newInterval);\n }\n\n toggleSwapAxes(): void {\n this.swapAxes.update((v) => !v);\n }\n\n onDateRangePickerChange(val: DateRangeValue | null): void {\n this.dateRange.set(val);\n }\n\n toggleExpand(): void {\n this.isExpanded.update((v) => !v);\n }\n\n toggleMetricDropdown(event: MouseEvent): void {\n event.stopPropagation();\n this.isMetricDropdownOpen.update((v) => !v);\n this.isExportDropdownOpen.set(false);\n }\n\n toggleExportDropdown(event: MouseEvent): void {\n event.stopPropagation();\n this.isExportDropdownOpen.update((v) => !v);\n this.isMetricDropdownOpen.set(false);\n }\n\n selectMetric(metric: HeatmapMetric): void {\n this.selectedMetricId.set(metric.id);\n this.isMetricDropdownOpen.set(false);\n this.metricChange.emit(metric);\n }\n\n onRefreshClick(): void {\n this.refresh.emit();\n }\n\n onCellMouseEnter(cell: HeatmapCell): void {\n this.hoveredCell.set(cell);\n this.cellHover.emit(cell);\n }\n\n onCellMouseLeave(): void {\n this.hoveredCell.set(null);\n this.cellHover.emit(null);\n }\n\n onCellClick(cell: HeatmapCell, event: MouseEvent): void {\n this.cellClick.emit({\n cell,\n colKey: cell.colKey,\n rowKey: cell.rowKey,\n value: cell.value,\n interval: this.interval(),\n event\n });\n }\n\n onKeydown(event: KeyboardEvent, colIdx: number, rowIdx: number): void {\n const rows = this.gridRows();\n const cols = this.columnHeaders();\n let targetRow = rowIdx;\n let targetCol = colIdx;\n\n if (event.key === 'ArrowUp') {\n targetRow = Math.max(0, rowIdx - 1);\n event.preventDefault();\n } else if (event.key === 'ArrowDown') {\n targetRow = Math.min(rows.length - 1, rowIdx + 1);\n event.preventDefault();\n } else if (event.key === 'ArrowLeft') {\n targetCol = Math.max(0, colIdx - 1);\n event.preventDefault();\n } else if (event.key === 'ArrowRight') {\n targetCol = Math.min(cols.length - 1, colIdx + 1);\n event.preventDefault();\n } else if (event.key === 'Enter' || event.key === ' ') {\n const cell = rows[rowIdx]?.cells[colIdx];\n if (cell) {\n this.cellClick.emit({\n cell,\n colKey: cell.colKey,\n rowKey: cell.rowKey,\n value: cell.value,\n interval: this.interval(),\n event\n });\n }\n event.preventDefault();\n return;\n }\n\n if (targetRow !== rowIdx || targetCol !== colIdx) {\n this.focusedCoord.set({ colIndex: targetCol, rowIndex: targetRow });\n const cellEl = this.elementRef.nativeElement.querySelector(\n `[data-cell-coord=\"${targetRow}_${targetCol}\"]`\n ) as HTMLElement;\n cellEl?.focus();\n }\n }\n\n triggerExport(format: HeatmapExportFormat): void {\n this.isExportDropdownOpen.set(false);\n const rows = this.gridRows();\n const cols = this.days();\n\n if (format === 'csv') {\n const header = ['Period', ...cols].join(',');\n const body = rows.map((r) => [r.label, ...r.cells.map((c) => c.value)].join(',')).join('\\n');\n const csvContent = `${header}\\n${body}`;\n\n this.downloadFile(csvContent, 'text/csv;charset=utf-8;', `heatmap_${this.title().toLowerCase().replace(/\\s+/g, '_')}.csv`);\n this.export.emit({ format: 'csv', data: csvContent });\n } else if (format === 'json') {\n const jsonRecords: Record<string, Record<string, number>> = {};\n rows.forEach((r) => {\n jsonRecords[r.label] = {};\n r.cells.forEach((c) => {\n jsonRecords[r.label][c.colKey] = c.value;\n });\n });\n const jsonStr = JSON.stringify(jsonRecords, null, 2);\n this.downloadFile(jsonStr, 'application/json;charset=utf-8;', `heatmap_${this.title().toLowerCase().replace(/\\s+/g, '_')}.json`);\n this.export.emit({ format: 'json', data: jsonRecords });\n }\n }\n\n private downloadFile(content: string, mimeType: string, filename: string): void {\n if (typeof window === 'undefined') return;\n const blob = new Blob([content], { type: mimeType });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n}\n","<div class=\"talos-heatmap-container\">\n <!-- Header Toolbar -->\n @if (showToolbar()) {\n <div class=\"talos-heatmap-header\">\n <div class=\"talos-heatmap-title-area\">\n <h3 class=\"talos-heatmap-title\">{{ title() }}</h3>\n </div>\n\n <div class=\"talos-heatmap-actions\">\n <!-- Interval Selector Toggle (Hour vs Day) -->\n @if (showIntervalToggle()) {\n <div class=\"talos-heatmap-interval-group\" role=\"radiogroup\" aria-label=\"Time Interval\">\n <button type=\"button\" class=\"talos-heatmap-interval-btn\" [class.is-active]=\"interval() === 'hour'\"\n (click)=\"setInterval('hour')\" role=\"radio\" [attr.aria-checked]=\"interval() === 'hour'\">\n <svg lucideClock [size]=\"13\"></svg>\n <span>Hour</span>\n </button>\n <button type=\"button\" class=\"talos-heatmap-interval-btn\" [class.is-active]=\"interval() === 'day'\"\n (click)=\"setInterval('day')\" role=\"radio\" [attr.aria-checked]=\"interval() === 'day'\">\n <svg lucideCalendar [size]=\"13\"></svg>\n <span>Day</span>\n </button>\n </div>\n }\n\n <!-- Date Range Picker Integration -->\n @if (showDateRangePicker()) {\n <div class=\"talos-heatmap-daterange-box\">\n <talos-date-range-picker size=\"sm\" [ngModel]=\"dateRange()\" (rangeChange)=\"onDateRangePickerChange($event)\"\n [presets]=\"dateRangePresets()\" placeholder=\"Select date range\" />\n </div>\n }\n\n <!-- Metric Dropdown Selector -->\n @if (metrics().length > 0) {\n <div class=\"talos-heatmap-dropdown-wrapper\">\n <button type=\"button\" class=\"talos-heatmap-dropdown-btn\" [class.is-open]=\"isMetricDropdownOpen()\"\n (click)=\"toggleMetricDropdown($event)\" aria-haspopup=\"listbox\" [attr.aria-expanded]=\"isMetricDropdownOpen()\">\n <span class=\"talos-heatmap-dropdown-label\">{{ currentMetric()?.label || 'Select metric' }}</span>\n <svg lucideChevronDown [size]=\"14\" class=\"talos-heatmap-dropdown-icon\"></svg>\n </button>\n\n @if (isMetricDropdownOpen()) {\n <div class=\"talos-heatmap-menu\" role=\"listbox\">\n @for (m of metrics(); track m.id) {\n <button type=\"button\" class=\"talos-heatmap-menu-item\" [class.is-selected]=\"m.id === currentMetric()?.id\"\n (click)=\"selectMetric(m)\" role=\"option\" [attr.aria-selected]=\"m.id === currentMetric()?.id\">\n <span>{{ m.label }}</span>\n @if (m.id === currentMetric()?.id) {\n <svg lucideCheck [size]=\"14\" class=\"talos-heatmap-check-icon\"></svg>\n }\n </button>\n }\n </div>\n }\n </div>\n }\n\n <!-- Refresh Button -->\n @if (showRefresh()) {\n <button type=\"button\" class=\"talos-heatmap-icon-btn\" [class.is-spinning]=\"loading()\" (click)=\"onRefreshClick()\"\n title=\"Refresh data\" aria-label=\"Refresh data\">\n <svg lucideRefreshCw [size]=\"16\" class=\"talos-heatmap-action-icon\"></svg>\n </button>\n }\n\n <!-- Export Dropdown Button -->\n @if (showExport()) {\n <div class=\"talos-heatmap-dropdown-wrapper\">\n <button type=\"button\" class=\"talos-heatmap-icon-btn\" (click)=\"toggleExportDropdown($event)\" title=\"Export data\"\n aria-label=\"Export data\">\n <svg lucideUpload [size]=\"16\" class=\"talos-heatmap-action-icon\"></svg>\n </button>\n\n @if (isExportDropdownOpen()) {\n <div class=\"talos-heatmap-menu talos-heatmap-export-menu\" role=\"menu\">\n <button type=\"button\" class=\"talos-heatmap-menu-item\" (click)=\"triggerExport('csv')\" role=\"menuitem\">\n <svg lucideFileSpreadsheet [size]=\"14\" class=\"talos-heatmap-menu-icon\"></svg>\n <span>Export to CSV</span>\n </button>\n <button type=\"button\" class=\"talos-heatmap-menu-item\" (click)=\"triggerExport('json')\" role=\"menuitem\">\n <svg lucideFileJson [size]=\"14\" class=\"talos-heatmap-menu-icon\"></svg>\n <span>Export to JSON</span>\n </button>\n </div>\n }\n </div>\n }\n\n <!-- Swap Axes Button -->\n @if (showSwapAxes()) {\n <button type=\"button\" class=\"talos-heatmap-icon-btn\" [class.is-active]=\"swapAxes()\" (click)=\"toggleSwapAxes()\"\n [title]=\"swapAxes() ? 'Reset axis orientation' : 'Swap axes (Days / Hours)'\"\n [attr.aria-label]=\"swapAxes() ? 'Reset axis orientation' : 'Swap axes (Days / Hours)'\">\n <svg lucideArrowLeftRight [size]=\"16\" class=\"talos-heatmap-action-icon\"></svg>\n </button>\n }\n\n <!-- Fullscreen / Expand Button -->\n @if (showExpand()) {\n <button type=\"button\" class=\"talos-heatmap-icon-btn\" (click)=\"toggleExpand()\"\n [title]=\"isExpanded() ? 'Minimize' : 'Expand'\" [aria-label]=\"isExpanded() ? 'Minimize' : 'Expand'\">\n @if (isExpanded()) {\n <svg lucideMinimize2 [size]=\"16\" class=\"talos-heatmap-action-icon\"></svg>\n } @else {\n <svg lucideMaximize2 [size]=\"16\" class=\"talos-heatmap-action-icon\"></svg>\n }\n </button>\n }\n </div>\n </div>\n }\n\n <!-- Heatmap Matrix Grid Wrapper -->\n <div class=\"talos-heatmap-body\" [class.is-loading]=\"loading()\">\n <!-- Grid Table -->\n <div class=\"talos-heatmap-grid\" role=\"grid\" [attr.aria-rowcount]=\"gridRows().length + 1\"\n [attr.aria-colcount]=\"columnHeaders().length + 1\">\n <!-- Column Headers -->\n <div class=\"talos-heatmap-row talos-heatmap-header-row\" role=\"row\" aria-rowindex=\"1\">\n <div class=\"talos-heatmap-corner-cell\" role=\"columnheader\"></div>\n @for (col of columnHeaders(); track col.key; let colIdx = $index) {\n <div class=\"talos-heatmap-col-header\" role=\"columnheader\" [attr.aria-colindex]=\"colIdx + 2\">\n {{ col.label }}\n </div>\n }\n </div>\n\n <!-- Data Rows -->\n @for (row of gridRows(); track row.key; let rowIdx = $index) {\n <div class=\"talos-heatmap-row\" role=\"row\" [attr.aria-rowindex]=\"rowIdx + 2\">\n <!-- Row Header (Hour or Week Range) -->\n <div class=\"talos-heatmap-row-header\" role=\"rowheader\" aria-colindex=\"1\" [title]=\"row.label\">\n {{ row.label }}\n </div>\n\n <!-- Heatmap Cells -->\n @for (cell of row.cells; track cell.id; let colIdx = $index) {\n <div class=\"talos-heatmap-cell-wrapper\" role=\"gridcell\" [attr.aria-colindex]=\"colIdx + 2\"\n [attr.aria-label]=\"cell.tooltipText\" tabindex=\"0\" [attr.data-cell-coord]=\"rowIdx + '_' + colIdx\"\n [talosTooltip]=\"cell.tooltipText\" (mouseenter)=\"onCellMouseEnter(cell)\" (mouseleave)=\"onCellMouseLeave()\"\n (click)=\"onCellClick(cell, $event)\" (keydown)=\"onKeydown($event, colIdx, rowIdx)\">\n <div class=\"talos-heatmap-pill\" [style.background-color]=\"cell.backgroundColor\" [style.color]=\"cell.textColor\"\n [class.has-value]=\"cell.value > 0\">\n @if (showValues()) {\n <span class=\"talos-heatmap-cell-value\">{{ cell.formattedValue }}</span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n\n <!-- Loading Skeleton Shimmer Overlay -->\n @if (loading()) {\n <div class=\"talos-heatmap-loading-overlay\" aria-hidden=\"true\">\n <div class=\"talos-heatmap-loading-spinner-box\">\n <svg lucideRefreshCw [size]=\"16\" class=\"talos-heatmap-loading-spinner\"></svg>\n <span>Loading data...</span>\n </div>\n </div>\n }\n </div>\n\n <!-- Bottom Legend Bar -->\n @if (showLegend()) {\n <div class=\"talos-heatmap-legend\">\n <span class=\"talos-heatmap-legend-bound\">{{ computedScaleBounds().min }}</span>\n <div class=\"talos-heatmap-legend-bar\" [style.background]=\"legendGradientCss()\" aria-hidden=\"true\"></div>\n <span class=\"talos-heatmap-legend-bound\">{{ computedScaleBounds().max }}</span>\n </div>\n }\n</div>","import { NgModule } from '@angular/core';\nimport { TalosHeatmapComponent } from './heatmap.component';\n\n@NgModule({\n imports: [TalosHeatmapComponent],\n exports: [TalosHeatmapComponent]\n})\nexport class TalosHeatmapModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, output, computed, Component, NgModule } from '@angular/core';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Types and interfaces for TalosMiniDonutComponent
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
const PRESET_COLORS = {
|
|
9
|
-
primary: '#2563eb',
|
|
10
|
-
blue: '#3b82f6',
|
|
11
|
-
success: '#16a34a',
|
|
12
|
-
emerald: '#10b981',
|
|
13
|
-
danger: '#ef4444',
|
|
14
|
-
rose: '#f43f5e',
|
|
15
|
-
warning: '#f59e0b',
|
|
16
|
-
amber: '#d97706',
|
|
17
|
-
info: '#0284c7',
|
|
18
|
-
cyan: '#06b6d4',
|
|
19
|
-
violet: '#8b5cf6',
|
|
20
|
-
purple: '#9333ea',
|
|
21
|
-
pink: '#ec4899',
|
|
22
|
-
slate: '#64748b'
|
|
23
|
-
};
|
|
24
|
-
const DEFAULT_PALETTE = ['#3b82f6', '#10b981', '#8b5cf6', '#f59e0b', '#ec4899', '#06b6d4'];
|
|
25
|
-
const SIZE_PRESETS = {
|
|
26
|
-
xs: { px: 24, stroke: 3 },
|
|
27
|
-
sm: { px: 32, stroke: 4 },
|
|
28
|
-
md: { px: 48, stroke: 5 },
|
|
29
|
-
lg: { px: 64, stroke: 6 },
|
|
30
|
-
xl: { px: 88, stroke: 8 }
|
|
31
|
-
};
|
|
32
|
-
class TalosMiniDonutComponent {
|
|
33
|
-
/** Single progress value (e.g. 75 or 450) */
|
|
34
|
-
value = input(null, /* @ts-ignore */
|
|
35
|
-
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
36
|
-
/** Minimum value for single progress mode */
|
|
37
|
-
min = input(0, /* @ts-ignore */
|
|
38
|
-
...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
39
|
-
/** Maximum value for single progress mode */
|
|
40
|
-
max = input(100, /* @ts-ignore */
|
|
41
|
-
...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
42
|
-
/** Multi-segment dataset */
|
|
43
|
-
segments = input(null, /* @ts-ignore */
|
|
44
|
-
...(ngDevMode ? [{ debugName: "segments" }] : /* istanbul ignore next */ []));
|
|
45
|
-
/** Size preset */
|
|
46
|
-
size = input('md', /* @ts-ignore */
|
|
47
|
-
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
48
|
-
/** Custom dimension override in px */
|
|
49
|
-
dimension = input(null, /* @ts-ignore */
|
|
50
|
-
...(ngDevMode ? [{ debugName: "dimension" }] : /* istanbul ignore next */ []));
|
|
51
|
-
/** Custom stroke width override */
|
|
52
|
-
strokeWidth = input(null, /* @ts-ignore */
|
|
53
|
-
...(ngDevMode ? [{ debugName: "strokeWidth" }] : /* istanbul ignore next */ []));
|
|
54
|
-
/** Color scheme or hex string for single progress mode */
|
|
55
|
-
color = input('primary', /* @ts-ignore */
|
|
56
|
-
...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
57
|
-
/** Background track ring color */
|
|
58
|
-
trackColor = input(null, /* @ts-ignore */
|
|
59
|
-
...(ngDevMode ? [{ debugName: "trackColor" }] : /* istanbul ignore next */ []));
|
|
60
|
-
/** Show background track */
|
|
61
|
-
showTrack = input(true, /* @ts-ignore */
|
|
62
|
-
...(ngDevMode ? [{ debugName: "showTrack" }] : /* istanbul ignore next */ []));
|
|
63
|
-
/** SVG stroke linecap */
|
|
64
|
-
lineCap = input('round', /* @ts-ignore */
|
|
65
|
-
...(ngDevMode ? [{ debugName: "lineCap" }] : /* istanbul ignore next */ []));
|
|
66
|
-
/** Gap spacing between segments in multi-segment mode (in px) */
|
|
67
|
-
gap = input(2, /* @ts-ignore */
|
|
68
|
-
...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
|
|
69
|
-
/** Show built-in center percentage or text */
|
|
70
|
-
showCenterText = input(false, /* @ts-ignore */
|
|
71
|
-
...(ngDevMode ? [{ debugName: "showCenterText" }] : /* istanbul ignore next */ []));
|
|
72
|
-
/** Explicit center primary text override */
|
|
73
|
-
centerText = input(null, /* @ts-ignore */
|
|
74
|
-
...(ngDevMode ? [{ debugName: "centerText" }] : /* istanbul ignore next */ []));
|
|
75
|
-
/** Secondary center subtext */
|
|
76
|
-
centerSubtext = input(null, /* @ts-ignore */
|
|
77
|
-
...(ngDevMode ? [{ debugName: "centerSubtext" }] : /* istanbul ignore next */ []));
|
|
78
|
-
/** Enable smooth CSS animation */
|
|
79
|
-
animated = input(true, /* @ts-ignore */
|
|
80
|
-
...(ngDevMode ? [{ debugName: "animated" }] : /* istanbul ignore next */ []));
|
|
81
|
-
/** Custom ARIA label */
|
|
82
|
-
ariaLabel = input(null, /* @ts-ignore */
|
|
83
|
-
...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
84
|
-
/** Segment click event */
|
|
85
|
-
segmentClick = output();
|
|
86
|
-
// Internal SVG coordinate constants (viewBox is 0 0 100 100)
|
|
87
|
-
svgSize = 100;
|
|
88
|
-
center = 50;
|
|
89
|
-
/** Computed pixel dimension */
|
|
90
|
-
pixelDimension = computed(() => {
|
|
91
|
-
const custom = this.dimension();
|
|
92
|
-
if (custom !== null)
|
|
93
|
-
return custom;
|
|
94
|
-
const s = this.size();
|
|
95
|
-
return s !== 'custom' ? SIZE_PRESETS[s].px : 48;
|
|
96
|
-
}, /* @ts-ignore */
|
|
97
|
-
...(ngDevMode ? [{ debugName: "pixelDimension" }] : /* istanbul ignore next */ []));
|
|
98
|
-
/** Computed stroke width in SVG coordinates */
|
|
99
|
-
computedStrokeWidth = computed(() => {
|
|
100
|
-
const custom = this.strokeWidth();
|
|
101
|
-
if (custom !== null) {
|
|
102
|
-
// Scale according to ratio with pixel dimension
|
|
103
|
-
const px = this.pixelDimension();
|
|
104
|
-
return (custom / px) * this.svgSize;
|
|
105
|
-
}
|
|
106
|
-
const s = this.size();
|
|
107
|
-
const preset = s !== 'custom' ? SIZE_PRESETS[s] : SIZE_PRESETS['md'];
|
|
108
|
-
return (preset.stroke / preset.px) * this.svgSize;
|
|
109
|
-
}, /* @ts-ignore */
|
|
110
|
-
...(ngDevMode ? [{ debugName: "computedStrokeWidth" }] : /* istanbul ignore next */ []));
|
|
111
|
-
/** Radius in SVG coordinates */
|
|
112
|
-
radius = computed(() => {
|
|
113
|
-
const sw = this.computedStrokeWidth();
|
|
114
|
-
return (this.svgSize - sw) / 2;
|
|
115
|
-
}, /* @ts-ignore */
|
|
116
|
-
...(ngDevMode ? [{ debugName: "radius" }] : /* istanbul ignore next */ []));
|
|
117
|
-
/** Circumference */
|
|
118
|
-
circumference = computed(() => {
|
|
119
|
-
return 2 * Math.PI * this.radius();
|
|
120
|
-
}, /* @ts-ignore */
|
|
121
|
-
...(ngDevMode ? [{ debugName: "circumference" }] : /* istanbul ignore next */ []));
|
|
122
|
-
/** Effective single progress color */
|
|
123
|
-
effectiveColor = computed(() => {
|
|
124
|
-
const c = this.color();
|
|
125
|
-
return PRESET_COLORS[c] || c;
|
|
126
|
-
}, /* @ts-ignore */
|
|
127
|
-
...(ngDevMode ? [{ debugName: "effectiveColor" }] : /* istanbul ignore next */ []));
|
|
128
|
-
/** Computed percentage for single progress mode */
|
|
129
|
-
singlePercentage = computed(() => {
|
|
130
|
-
const val = this.value();
|
|
131
|
-
if (val === null)
|
|
132
|
-
return 0;
|
|
133
|
-
const minVal = this.min();
|
|
134
|
-
const maxVal = this.max();
|
|
135
|
-
if (maxVal <= minVal)
|
|
136
|
-
return 0;
|
|
137
|
-
const pct = ((val - minVal) / (maxVal - minVal)) * 100;
|
|
138
|
-
return Math.min(100, Math.max(0, pct));
|
|
139
|
-
}, /* @ts-ignore */
|
|
140
|
-
...(ngDevMode ? [{ debugName: "singlePercentage" }] : /* istanbul ignore next */ []));
|
|
141
|
-
/** Single progress dash offset/array */
|
|
142
|
-
singleDashArray = computed(() => {
|
|
143
|
-
const circ = this.circumference();
|
|
144
|
-
const pct = this.singlePercentage();
|
|
145
|
-
const filled = (pct / 100) * circ;
|
|
146
|
-
return `${filled} ${circ}`;
|
|
147
|
-
}, /* @ts-ignore */
|
|
148
|
-
...(ngDevMode ? [{ debugName: "singleDashArray" }] : /* istanbul ignore next */ []));
|
|
149
|
-
/** Computed multi-segment values with offsets */
|
|
150
|
-
computedSegments = computed(() => {
|
|
151
|
-
const segs = this.segments();
|
|
152
|
-
if (!segs || segs.length === 0)
|
|
153
|
-
return [];
|
|
154
|
-
const circ = this.circumference();
|
|
155
|
-
const totalVal = segs.reduce((acc, s) => acc + Math.max(0, s.value), 0);
|
|
156
|
-
if (totalVal <= 0)
|
|
157
|
-
return [];
|
|
158
|
-
const gapPx = this.gap();
|
|
159
|
-
const count = segs.length;
|
|
160
|
-
const totalGap = count > 1 ? count * gapPx : 0;
|
|
161
|
-
const availableCirc = Math.max(0, circ - totalGap);
|
|
162
|
-
let accumulatedOffset = 0;
|
|
163
|
-
return segs.map((seg, idx) => {
|
|
164
|
-
const pct = (Math.max(0, seg.value) / totalVal) * 100;
|
|
165
|
-
const length = (Math.max(0, seg.value) / totalVal) * availableCirc;
|
|
166
|
-
const color = seg.color ? (PRESET_COLORS[seg.color] || seg.color) : DEFAULT_PALETTE[idx % DEFAULT_PALETTE.length];
|
|
167
|
-
const dashArray = `${length} ${circ}`;
|
|
168
|
-
// Dashoffset starts at accumulatedOffset (negative because SVG stroke-dashoffset clockwise)
|
|
169
|
-
const dashOffset = -accumulatedOffset;
|
|
170
|
-
accumulatedOffset += length + (count > 1 ? gapPx : 0);
|
|
171
|
-
return {
|
|
172
|
-
index: idx,
|
|
173
|
-
value: seg.value,
|
|
174
|
-
percentage: pct,
|
|
175
|
-
color,
|
|
176
|
-
label: seg.label,
|
|
177
|
-
tooltip: seg.tooltip,
|
|
178
|
-
dashArray,
|
|
179
|
-
dashOffset,
|
|
180
|
-
pathLength: circ
|
|
181
|
-
};
|
|
182
|
-
});
|
|
183
|
-
}, /* @ts-ignore */
|
|
184
|
-
...(ngDevMode ? [{ debugName: "computedSegments" }] : /* istanbul ignore next */ []));
|
|
185
|
-
/** Display text inside center */
|
|
186
|
-
computedCenterText = computed(() => {
|
|
187
|
-
const explicit = this.centerText();
|
|
188
|
-
if (explicit !== null)
|
|
189
|
-
return explicit;
|
|
190
|
-
if (this.value() !== null) {
|
|
191
|
-
return `${Math.round(this.singlePercentage())}%`;
|
|
192
|
-
}
|
|
193
|
-
return '';
|
|
194
|
-
}, /* @ts-ignore */
|
|
195
|
-
...(ngDevMode ? [{ debugName: "computedCenterText" }] : /* istanbul ignore next */ []));
|
|
196
|
-
/** ARIA attributes */
|
|
197
|
-
currentAriaValue = computed(() => {
|
|
198
|
-
if (this.value() !== null)
|
|
199
|
-
return this.value();
|
|
200
|
-
const segs = this.segments();
|
|
201
|
-
if (segs && segs.length > 0)
|
|
202
|
-
return segs.reduce((a, b) => a + b.value, 0);
|
|
203
|
-
return 0;
|
|
204
|
-
}, /* @ts-ignore */
|
|
205
|
-
...(ngDevMode ? [{ debugName: "currentAriaValue" }] : /* istanbul ignore next */ []));
|
|
206
|
-
computedAriaLabel = computed(() => {
|
|
207
|
-
const custom = this.ariaLabel();
|
|
208
|
-
if (custom)
|
|
209
|
-
return custom;
|
|
210
|
-
if (this.value() !== null) {
|
|
211
|
-
return `Progress: ${Math.round(this.singlePercentage())}%`;
|
|
212
|
-
}
|
|
213
|
-
const segs = this.segments();
|
|
214
|
-
if (segs && segs.length > 0) {
|
|
215
|
-
return `Donut chart with ${segs.length} categories`;
|
|
216
|
-
}
|
|
217
|
-
return 'Mini donut chart';
|
|
218
|
-
}, /* @ts-ignore */
|
|
219
|
-
...(ngDevMode ? [{ debugName: "computedAriaLabel" }] : /* istanbul ignore next */ []));
|
|
220
|
-
onSegmentClick(segIndex) {
|
|
221
|
-
const rawSegs = this.segments();
|
|
222
|
-
if (rawSegs && rawSegs[segIndex]) {
|
|
223
|
-
this.segmentClick.emit(rawSegs[segIndex]);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosMiniDonutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
227
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: TalosMiniDonutComponent, isStandalone: true, selector: "talos-mini-donut", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, segments: { classPropertyName: "segments", publicName: "segments", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, dimension: { classPropertyName: "dimension", publicName: "dimension", isSignal: true, isRequired: false, transformFunction: null }, strokeWidth: { classPropertyName: "strokeWidth", publicName: "strokeWidth", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, trackColor: { classPropertyName: "trackColor", publicName: "trackColor", isSignal: true, isRequired: false, transformFunction: null }, showTrack: { classPropertyName: "showTrack", publicName: "showTrack", isSignal: true, isRequired: false, transformFunction: null }, lineCap: { classPropertyName: "lineCap", publicName: "lineCap", isSignal: true, isRequired: false, transformFunction: null }, gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, showCenterText: { classPropertyName: "showCenterText", publicName: "showCenterText", isSignal: true, isRequired: false, transformFunction: null }, centerText: { classPropertyName: "centerText", publicName: "centerText", isSignal: true, isRequired: false, transformFunction: null }, centerSubtext: { classPropertyName: "centerSubtext", publicName: "centerSubtext", isSignal: true, isRequired: false, transformFunction: null }, animated: { classPropertyName: "animated", publicName: "animated", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { segmentClick: "segmentClick" }, host: { properties: { "class.talos-mini-donut-xs": "size() === \"xs\"", "class.talos-mini-donut-sm": "size() === \"sm\"", "class.talos-mini-donut-md": "size() === \"md\"", "class.talos-mini-donut-lg": "size() === \"lg\"", "class.talos-mini-donut-xl": "size() === \"xl\"", "class.talos-mini-donut-animated": "animated()", "style.width.px": "pixelDimension()", "style.height.px": "pixelDimension()", "attr.role": "\"meter\"", "attr.aria-valuenow": "currentAriaValue()", "attr.aria-valuemin": "min()", "attr.aria-valuemax": "max()", "attr.aria-label": "computedAriaLabel()" }, classAttribute: "talos-mini-donut" }, ngImport: i0, template: "<svg\n class=\"talos-mini-donut-svg\"\n [attr.viewBox]=\"'0 0 ' + svgSize + ' ' + svgSize\"\n aria-hidden=\"true\"\n>\n <!-- Background Track -->\n @if (showTrack()) {\n <circle\n class=\"talos-mini-donut-track\"\n [attr.cx]=\"center\"\n [attr.cy]=\"center\"\n [attr.r]=\"radius()\"\n [attr.stroke-width]=\"computedStrokeWidth()\"\n [attr.stroke]=\"trackColor() || 'var(--talos-border-color, #e2e8f0)'\"\n fill=\"none\"\n />\n }\n\n <!-- Single Value Progress Mode -->\n @if (segments() === null && value() !== null) {\n <circle\n class=\"talos-mini-donut-progress\"\n [attr.cx]=\"center\"\n [attr.cy]=\"center\"\n [attr.r]=\"radius()\"\n [attr.stroke-width]=\"computedStrokeWidth()\"\n [attr.stroke]=\"effectiveColor()\"\n [attr.stroke-dasharray]=\"singleDashArray()\"\n [attr.stroke-linecap]=\"lineCap()\"\n fill=\"none\"\n />\n }\n\n <!-- Multi-Segment Mode -->\n @if (segments() !== null) {\n @for (seg of computedSegments(); track seg.index) {\n <circle\n class=\"talos-mini-donut-segment\"\n [attr.cx]=\"center\"\n [attr.cy]=\"center\"\n [attr.r]=\"radius()\"\n [attr.stroke-width]=\"computedStrokeWidth()\"\n [attr.stroke]=\"seg.color\"\n [attr.stroke-dasharray]=\"seg.dashArray\"\n [attr.stroke-dashoffset]=\"seg.dashOffset\"\n [attr.stroke-linecap]=\"lineCap()\"\n fill=\"none\"\n (click)=\"onSegmentClick(seg.index)\"\n />\n }\n }\n</svg>\n\n<!-- Center Content Slot or Built-in Text -->\n<div class=\"talos-mini-donut-center\">\n <ng-content>\n @if (showCenterText() && computedCenterText()) {\n <span class=\"talos-mini-donut-center-text\">{{ computedCenterText() }}</span>\n @if (centerSubtext()) {\n <span class=\"talos-mini-donut-center-subtext\">{{ centerSubtext() }}</span>\n }\n }\n </ng-content>\n</div>\n", styles: [":host{position:relative;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;box-sizing:border-box;flex-shrink:0}:host .talos-mini-donut-svg{width:100%;height:100%;overflow:visible;transform:rotate(-90deg)}:host .talos-mini-donut-track{opacity:.7;transition:stroke .2s ease}:host .talos-mini-donut-progress,:host .talos-mini-donut-segment{cursor:pointer}:host.talos-mini-donut-animated .talos-mini-donut-progress,:host.talos-mini-donut-animated .talos-mini-donut-segment{transition:stroke-dasharray .4s cubic-bezier(.4,0,.2,1),stroke-dashoffset .4s cubic-bezier(.4,0,.2,1),stroke .2s ease}:host .talos-mini-donut-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;pointer-events:none;text-align:center;line-height:1}:host .talos-mini-donut-center .talos-mini-donut-center-text{font-weight:700;color:var(--talos-text-color, #0f172a);letter-spacing:-.02em}:host .talos-mini-donut-center .talos-mini-donut-center-subtext{font-size:.625rem;font-weight:500;color:var(--talos-text-muted, #64748b);margin-top:2px}:host.talos-mini-donut-xs .talos-mini-donut-center-text{font-size:.5625rem}:host.talos-mini-donut-sm .talos-mini-donut-center-text{font-size:.6875rem}:host.talos-mini-donut-md .talos-mini-donut-center-text{font-size:.8125rem}:host.talos-mini-donut-lg .talos-mini-donut-center-text{font-size:1rem}:host.talos-mini-donut-xl .talos-mini-donut-center-text{font-size:1.25rem}:root[data-theme=dark] :host .talos-mini-donut-track,:root.dark :host .talos-mini-donut-track,[data-theme=dark] :host .talos-mini-donut-track,[data-mode=dark] :host .talos-mini-donut-track,.dark :host .talos-mini-donut-track,.dark-theme :host .talos-mini-donut-track{stroke:var(--talos-border-color, #334155);opacity:.5}:root[data-theme=dark] :host .talos-mini-donut-center-text,:root.dark :host .talos-mini-donut-center-text,[data-theme=dark] :host .talos-mini-donut-center-text,[data-mode=dark] :host .talos-mini-donut-center-text,.dark :host .talos-mini-donut-center-text,.dark-theme :host .talos-mini-donut-center-text{color:var(--talos-text-color, #f8fafc)}:root[data-theme=dark] :host .talos-mini-donut-center-subtext,:root.dark :host .talos-mini-donut-center-subtext,[data-theme=dark] :host .talos-mini-donut-center-subtext,[data-mode=dark] :host .talos-mini-donut-center-subtext,.dark :host .talos-mini-donut-center-subtext,.dark-theme :host .talos-mini-donut-center-subtext{color:var(--talos-text-muted, #94a3b8)}\n"] });
|
|
228
|
-
}
|
|
229
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosMiniDonutComponent, decorators: [{
|
|
230
|
-
type: Component,
|
|
231
|
-
args: [{ selector: 'talos-mini-donut', host: {
|
|
232
|
-
'class': 'talos-mini-donut',
|
|
233
|
-
'[class.talos-mini-donut-xs]': 'size() === "xs"',
|
|
234
|
-
'[class.talos-mini-donut-sm]': 'size() === "sm"',
|
|
235
|
-
'[class.talos-mini-donut-md]': 'size() === "md"',
|
|
236
|
-
'[class.talos-mini-donut-lg]': 'size() === "lg"',
|
|
237
|
-
'[class.talos-mini-donut-xl]': 'size() === "xl"',
|
|
238
|
-
'[class.talos-mini-donut-animated]': 'animated()',
|
|
239
|
-
'[style.width.px]': 'pixelDimension()',
|
|
240
|
-
'[style.height.px]': 'pixelDimension()',
|
|
241
|
-
'[attr.role]': '"meter"',
|
|
242
|
-
'[attr.aria-valuenow]': 'currentAriaValue()',
|
|
243
|
-
'[attr.aria-valuemin]': 'min()',
|
|
244
|
-
'[attr.aria-valuemax]': 'max()',
|
|
245
|
-
'[attr.aria-label]': 'computedAriaLabel()'
|
|
246
|
-
}, template: "<svg\n class=\"talos-mini-donut-svg\"\n [attr.viewBox]=\"'0 0 ' + svgSize + ' ' + svgSize\"\n aria-hidden=\"true\"\n>\n <!-- Background Track -->\n @if (showTrack()) {\n <circle\n class=\"talos-mini-donut-track\"\n [attr.cx]=\"center\"\n [attr.cy]=\"center\"\n [attr.r]=\"radius()\"\n [attr.stroke-width]=\"computedStrokeWidth()\"\n [attr.stroke]=\"trackColor() || 'var(--talos-border-color, #e2e8f0)'\"\n fill=\"none\"\n />\n }\n\n <!-- Single Value Progress Mode -->\n @if (segments() === null && value() !== null) {\n <circle\n class=\"talos-mini-donut-progress\"\n [attr.cx]=\"center\"\n [attr.cy]=\"center\"\n [attr.r]=\"radius()\"\n [attr.stroke-width]=\"computedStrokeWidth()\"\n [attr.stroke]=\"effectiveColor()\"\n [attr.stroke-dasharray]=\"singleDashArray()\"\n [attr.stroke-linecap]=\"lineCap()\"\n fill=\"none\"\n />\n }\n\n <!-- Multi-Segment Mode -->\n @if (segments() !== null) {\n @for (seg of computedSegments(); track seg.index) {\n <circle\n class=\"talos-mini-donut-segment\"\n [attr.cx]=\"center\"\n [attr.cy]=\"center\"\n [attr.r]=\"radius()\"\n [attr.stroke-width]=\"computedStrokeWidth()\"\n [attr.stroke]=\"seg.color\"\n [attr.stroke-dasharray]=\"seg.dashArray\"\n [attr.stroke-dashoffset]=\"seg.dashOffset\"\n [attr.stroke-linecap]=\"lineCap()\"\n fill=\"none\"\n (click)=\"onSegmentClick(seg.index)\"\n />\n }\n }\n</svg>\n\n<!-- Center Content Slot or Built-in Text -->\n<div class=\"talos-mini-donut-center\">\n <ng-content>\n @if (showCenterText() && computedCenterText()) {\n <span class=\"talos-mini-donut-center-text\">{{ computedCenterText() }}</span>\n @if (centerSubtext()) {\n <span class=\"talos-mini-donut-center-subtext\">{{ centerSubtext() }}</span>\n }\n }\n </ng-content>\n</div>\n", styles: [":host{position:relative;display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;box-sizing:border-box;flex-shrink:0}:host .talos-mini-donut-svg{width:100%;height:100%;overflow:visible;transform:rotate(-90deg)}:host .talos-mini-donut-track{opacity:.7;transition:stroke .2s ease}:host .talos-mini-donut-progress,:host .talos-mini-donut-segment{cursor:pointer}:host.talos-mini-donut-animated .talos-mini-donut-progress,:host.talos-mini-donut-animated .talos-mini-donut-segment{transition:stroke-dasharray .4s cubic-bezier(.4,0,.2,1),stroke-dashoffset .4s cubic-bezier(.4,0,.2,1),stroke .2s ease}:host .talos-mini-donut-center{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;pointer-events:none;text-align:center;line-height:1}:host .talos-mini-donut-center .talos-mini-donut-center-text{font-weight:700;color:var(--talos-text-color, #0f172a);letter-spacing:-.02em}:host .talos-mini-donut-center .talos-mini-donut-center-subtext{font-size:.625rem;font-weight:500;color:var(--talos-text-muted, #64748b);margin-top:2px}:host.talos-mini-donut-xs .talos-mini-donut-center-text{font-size:.5625rem}:host.talos-mini-donut-sm .talos-mini-donut-center-text{font-size:.6875rem}:host.talos-mini-donut-md .talos-mini-donut-center-text{font-size:.8125rem}:host.talos-mini-donut-lg .talos-mini-donut-center-text{font-size:1rem}:host.talos-mini-donut-xl .talos-mini-donut-center-text{font-size:1.25rem}:root[data-theme=dark] :host .talos-mini-donut-track,:root.dark :host .talos-mini-donut-track,[data-theme=dark] :host .talos-mini-donut-track,[data-mode=dark] :host .talos-mini-donut-track,.dark :host .talos-mini-donut-track,.dark-theme :host .talos-mini-donut-track{stroke:var(--talos-border-color, #334155);opacity:.5}:root[data-theme=dark] :host .talos-mini-donut-center-text,:root.dark :host .talos-mini-donut-center-text,[data-theme=dark] :host .talos-mini-donut-center-text,[data-mode=dark] :host .talos-mini-donut-center-text,.dark :host .talos-mini-donut-center-text,.dark-theme :host .talos-mini-donut-center-text{color:var(--talos-text-color, #f8fafc)}:root[data-theme=dark] :host .talos-mini-donut-center-subtext,:root.dark :host .talos-mini-donut-center-subtext,[data-theme=dark] :host .talos-mini-donut-center-subtext,[data-mode=dark] :host .talos-mini-donut-center-subtext,.dark :host .talos-mini-donut-center-subtext,.dark-theme :host .talos-mini-donut-center-subtext{color:var(--talos-text-muted, #94a3b8)}\n"] }]
|
|
247
|
-
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], segments: [{ type: i0.Input, args: [{ isSignal: true, alias: "segments", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], dimension: [{ type: i0.Input, args: [{ isSignal: true, alias: "dimension", required: false }] }], strokeWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "strokeWidth", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], trackColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "trackColor", required: false }] }], showTrack: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTrack", required: false }] }], lineCap: [{ type: i0.Input, args: [{ isSignal: true, alias: "lineCap", required: false }] }], gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], showCenterText: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCenterText", required: false }] }], centerText: [{ type: i0.Input, args: [{ isSignal: true, alias: "centerText", required: false }] }], centerSubtext: [{ type: i0.Input, args: [{ isSignal: true, alias: "centerSubtext", required: false }] }], animated: [{ type: i0.Input, args: [{ isSignal: true, alias: "animated", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], segmentClick: [{ type: i0.Output, args: ["segmentClick"] }] } });
|
|
248
|
-
|
|
249
|
-
class TalosMiniDonutModule {
|
|
250
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosMiniDonutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
251
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.1.1", ngImport: i0, type: TalosMiniDonutModule, imports: [TalosMiniDonutComponent], exports: [TalosMiniDonutComponent] });
|
|
252
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosMiniDonutModule });
|
|
253
|
-
}
|
|
254
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosMiniDonutModule, decorators: [{
|
|
255
|
-
type: NgModule,
|
|
256
|
-
args: [{
|
|
257
|
-
imports: [TalosMiniDonutComponent],
|
|
258
|
-
exports: [TalosMiniDonutComponent]
|
|
259
|
-
}]
|
|
260
|
-
}] });
|
|
261
|
-
|
|
262
|
-
/**
|
|
263
|
-
* Generated bundle index. Do not edit.
|
|
264
|
-
*/
|
|
265
|
-
|
|
266
|
-
export { TalosMiniDonutComponent, TalosMiniDonutModule };
|
|
267
|
-
//# sourceMappingURL=weeehaoooz-talos-ui-data-viz-mini-donut.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"weeehaoooz-talos-ui-data-viz-mini-donut.mjs","sources":["../../../projects/talos-ui/data-viz/mini-donut/mini-donut.types.ts","../../../projects/talos-ui/data-viz/mini-donut/mini-donut.component.ts","../../../projects/talos-ui/data-viz/mini-donut/mini-donut.component.html","../../../projects/talos-ui/data-viz/mini-donut/mini-donut.module.ts","../../../projects/talos-ui/data-viz/mini-donut/weeehaoooz-talos-ui-data-viz-mini-donut.ts"],"sourcesContent":["/**\n * Types and interfaces for TalosMiniDonutComponent\n */\n\nexport type MiniDonutSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'custom';\n\nexport type MiniDonutLineCap = 'round' | 'butt';\n\nexport type MiniDonutColorScheme =\n | 'primary'\n | 'success'\n | 'danger'\n | 'warning'\n | 'info'\n | 'violet'\n | 'emerald'\n | 'rose'\n | 'amber'\n | 'cyan'\n | 'slate'\n | string;\n\nexport interface MiniDonutSegment {\n value: number;\n color?: string;\n label?: string;\n tooltip?: string;\n id?: string;\n}\n\nexport interface ComputedDonutSegment {\n index: number;\n value: number;\n percentage: number;\n color: string;\n label?: string;\n tooltip?: string;\n dashArray: string;\n dashOffset: number;\n pathLength: number;\n}\n","import { Component, computed, input, output } from '@angular/core';\nimport {\n ComputedDonutSegment,\n MiniDonutColorScheme,\n MiniDonutLineCap,\n MiniDonutSegment,\n MiniDonutSize\n} from './mini-donut.types';\n\nconst PRESET_COLORS: Record<string, string> = {\n primary: '#2563eb',\n blue: '#3b82f6',\n success: '#16a34a',\n emerald: '#10b981',\n danger: '#ef4444',\n rose: '#f43f5e',\n warning: '#f59e0b',\n amber: '#d97706',\n info: '#0284c7',\n cyan: '#06b6d4',\n violet: '#8b5cf6',\n purple: '#9333ea',\n pink: '#ec4899',\n slate: '#64748b'\n};\n\nconst DEFAULT_PALETTE = ['#3b82f6', '#10b981', '#8b5cf6', '#f59e0b', '#ec4899', '#06b6d4'];\n\nconst SIZE_PRESETS: Record<Exclude<MiniDonutSize, 'custom'>, { px: number; stroke: number }> = {\n xs: { px: 24, stroke: 3 },\n sm: { px: 32, stroke: 4 },\n md: { px: 48, stroke: 5 },\n lg: { px: 64, stroke: 6 },\n xl: { px: 88, stroke: 8 }\n};\n\n@Component({\n selector: 'talos-mini-donut',\n templateUrl: './mini-donut.component.html',\n styleUrl: './mini-donut.component.scss',\n host: {\n 'class': 'talos-mini-donut',\n '[class.talos-mini-donut-xs]': 'size() === \"xs\"',\n '[class.talos-mini-donut-sm]': 'size() === \"sm\"',\n '[class.talos-mini-donut-md]': 'size() === \"md\"',\n '[class.talos-mini-donut-lg]': 'size() === \"lg\"',\n '[class.talos-mini-donut-xl]': 'size() === \"xl\"',\n '[class.talos-mini-donut-animated]': 'animated()',\n '[style.width.px]': 'pixelDimension()',\n '[style.height.px]': 'pixelDimension()',\n '[attr.role]': '\"meter\"',\n '[attr.aria-valuenow]': 'currentAriaValue()',\n '[attr.aria-valuemin]': 'min()',\n '[attr.aria-valuemax]': 'max()',\n '[attr.aria-label]': 'computedAriaLabel()'\n }\n})\nexport class TalosMiniDonutComponent {\n /** Single progress value (e.g. 75 or 450) */\n readonly value = input<number | null>(null);\n\n /** Minimum value for single progress mode */\n readonly min = input<number>(0);\n\n /** Maximum value for single progress mode */\n readonly max = input<number>(100);\n\n /** Multi-segment dataset */\n readonly segments = input<MiniDonutSegment[] | null>(null);\n\n /** Size preset */\n readonly size = input<MiniDonutSize>('md');\n\n /** Custom dimension override in px */\n readonly dimension = input<number | null>(null);\n\n /** Custom stroke width override */\n readonly strokeWidth = input<number | null>(null);\n\n /** Color scheme or hex string for single progress mode */\n readonly color = input<MiniDonutColorScheme>('primary');\n\n /** Background track ring color */\n readonly trackColor = input<string | null>(null);\n\n /** Show background track */\n readonly showTrack = input<boolean>(true);\n\n /** SVG stroke linecap */\n readonly lineCap = input<MiniDonutLineCap>('round');\n\n /** Gap spacing between segments in multi-segment mode (in px) */\n readonly gap = input<number>(2);\n\n /** Show built-in center percentage or text */\n readonly showCenterText = input<boolean>(false);\n\n /** Explicit center primary text override */\n readonly centerText = input<string | null>(null);\n\n /** Secondary center subtext */\n readonly centerSubtext = input<string | null>(null);\n\n /** Enable smooth CSS animation */\n readonly animated = input<boolean>(true);\n\n /** Custom ARIA label */\n readonly ariaLabel = input<string | null>(null);\n\n /** Segment click event */\n readonly segmentClick = output<MiniDonutSegment>();\n\n // Internal SVG coordinate constants (viewBox is 0 0 100 100)\n protected readonly svgSize = 100;\n protected readonly center = 50;\n\n /** Computed pixel dimension */\n readonly pixelDimension = computed(() => {\n const custom = this.dimension();\n if (custom !== null) return custom;\n const s = this.size();\n return s !== 'custom' ? SIZE_PRESETS[s].px : 48;\n });\n\n /** Computed stroke width in SVG coordinates */\n readonly computedStrokeWidth = computed(() => {\n const custom = this.strokeWidth();\n if (custom !== null) {\n // Scale according to ratio with pixel dimension\n const px = this.pixelDimension();\n return (custom / px) * this.svgSize;\n }\n const s = this.size();\n const preset = s !== 'custom' ? SIZE_PRESETS[s] : SIZE_PRESETS['md'];\n return (preset.stroke / preset.px) * this.svgSize;\n });\n\n /** Radius in SVG coordinates */\n readonly radius = computed(() => {\n const sw = this.computedStrokeWidth();\n return (this.svgSize - sw) / 2;\n });\n\n /** Circumference */\n readonly circumference = computed(() => {\n return 2 * Math.PI * this.radius();\n });\n\n /** Effective single progress color */\n readonly effectiveColor = computed(() => {\n const c = this.color();\n return PRESET_COLORS[c] || c;\n });\n\n /** Computed percentage for single progress mode */\n readonly singlePercentage = computed(() => {\n const val = this.value();\n if (val === null) return 0;\n const minVal = this.min();\n const maxVal = this.max();\n if (maxVal <= minVal) return 0;\n const pct = ((val - minVal) / (maxVal - minVal)) * 100;\n return Math.min(100, Math.max(0, pct));\n });\n\n /** Single progress dash offset/array */\n readonly singleDashArray = computed(() => {\n const circ = this.circumference();\n const pct = this.singlePercentage();\n const filled = (pct / 100) * circ;\n return `${filled} ${circ}`;\n });\n\n /** Computed multi-segment values with offsets */\n readonly computedSegments = computed<ComputedDonutSegment[]>(() => {\n const segs = this.segments();\n if (!segs || segs.length === 0) return [];\n\n const circ = this.circumference();\n const totalVal = segs.reduce((acc, s) => acc + Math.max(0, s.value), 0);\n if (totalVal <= 0) return [];\n\n const gapPx = this.gap();\n const count = segs.length;\n const totalGap = count > 1 ? count * gapPx : 0;\n const availableCirc = Math.max(0, circ - totalGap);\n\n let accumulatedOffset = 0;\n\n return segs.map((seg, idx) => {\n const pct = (Math.max(0, seg.value) / totalVal) * 100;\n const length = (Math.max(0, seg.value) / totalVal) * availableCirc;\n const color = seg.color ? (PRESET_COLORS[seg.color] || seg.color) : DEFAULT_PALETTE[idx % DEFAULT_PALETTE.length];\n\n const dashArray = `${length} ${circ}`;\n // Dashoffset starts at accumulatedOffset (negative because SVG stroke-dashoffset clockwise)\n const dashOffset = -accumulatedOffset;\n\n accumulatedOffset += length + (count > 1 ? gapPx : 0);\n\n return {\n index: idx,\n value: seg.value,\n percentage: pct,\n color,\n label: seg.label,\n tooltip: seg.tooltip,\n dashArray,\n dashOffset,\n pathLength: circ\n };\n });\n });\n\n /** Display text inside center */\n readonly computedCenterText = computed(() => {\n const explicit = this.centerText();\n if (explicit !== null) return explicit;\n if (this.value() !== null) {\n return `${Math.round(this.singlePercentage())}%`;\n }\n return '';\n });\n\n /** ARIA attributes */\n readonly currentAriaValue = computed(() => {\n if (this.value() !== null) return this.value();\n const segs = this.segments();\n if (segs && segs.length > 0) return segs.reduce((a, b) => a + b.value, 0);\n return 0;\n });\n\n readonly computedAriaLabel = computed(() => {\n const custom = this.ariaLabel();\n if (custom) return custom;\n if (this.value() !== null) {\n return `Progress: ${Math.round(this.singlePercentage())}%`;\n }\n const segs = this.segments();\n if (segs && segs.length > 0) {\n return `Donut chart with ${segs.length} categories`;\n }\n return 'Mini donut chart';\n });\n\n protected onSegmentClick(segIndex: number): void {\n const rawSegs = this.segments();\n if (rawSegs && rawSegs[segIndex]) {\n this.segmentClick.emit(rawSegs[segIndex]);\n }\n }\n}\n","<svg\n class=\"talos-mini-donut-svg\"\n [attr.viewBox]=\"'0 0 ' + svgSize + ' ' + svgSize\"\n aria-hidden=\"true\"\n>\n <!-- Background Track -->\n @if (showTrack()) {\n <circle\n class=\"talos-mini-donut-track\"\n [attr.cx]=\"center\"\n [attr.cy]=\"center\"\n [attr.r]=\"radius()\"\n [attr.stroke-width]=\"computedStrokeWidth()\"\n [attr.stroke]=\"trackColor() || 'var(--talos-border-color, #e2e8f0)'\"\n fill=\"none\"\n />\n }\n\n <!-- Single Value Progress Mode -->\n @if (segments() === null && value() !== null) {\n <circle\n class=\"talos-mini-donut-progress\"\n [attr.cx]=\"center\"\n [attr.cy]=\"center\"\n [attr.r]=\"radius()\"\n [attr.stroke-width]=\"computedStrokeWidth()\"\n [attr.stroke]=\"effectiveColor()\"\n [attr.stroke-dasharray]=\"singleDashArray()\"\n [attr.stroke-linecap]=\"lineCap()\"\n fill=\"none\"\n />\n }\n\n <!-- Multi-Segment Mode -->\n @if (segments() !== null) {\n @for (seg of computedSegments(); track seg.index) {\n <circle\n class=\"talos-mini-donut-segment\"\n [attr.cx]=\"center\"\n [attr.cy]=\"center\"\n [attr.r]=\"radius()\"\n [attr.stroke-width]=\"computedStrokeWidth()\"\n [attr.stroke]=\"seg.color\"\n [attr.stroke-dasharray]=\"seg.dashArray\"\n [attr.stroke-dashoffset]=\"seg.dashOffset\"\n [attr.stroke-linecap]=\"lineCap()\"\n fill=\"none\"\n (click)=\"onSegmentClick(seg.index)\"\n />\n }\n }\n</svg>\n\n<!-- Center Content Slot or Built-in Text -->\n<div class=\"talos-mini-donut-center\">\n <ng-content>\n @if (showCenterText() && computedCenterText()) {\n <span class=\"talos-mini-donut-center-text\">{{ computedCenterText() }}</span>\n @if (centerSubtext()) {\n <span class=\"talos-mini-donut-center-subtext\">{{ centerSubtext() }}</span>\n }\n }\n </ng-content>\n</div>\n","import { NgModule } from '@angular/core';\nimport { TalosMiniDonutComponent } from './mini-donut.component';\n\n@NgModule({\n imports: [TalosMiniDonutComponent],\n exports: [TalosMiniDonutComponent]\n})\nexport class TalosMiniDonutModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|