@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.
Files changed (190) hide show
  1. package/README.md +2 -0
  2. package/fesm2022/{weeehaoooz-talos-ui-button-button-group.mjs → weeehaoooz-talos-ui-button.mjs} +91 -15
  3. package/fesm2022/weeehaoooz-talos-ui-button.mjs.map +1 -0
  4. package/fesm2022/weeehaoooz-talos-ui-data-display.mjs +3110 -0
  5. package/fesm2022/weeehaoooz-talos-ui-data-display.mjs.map +1 -0
  6. package/fesm2022/weeehaoooz-talos-ui-data-viz.mjs +2414 -0
  7. package/fesm2022/weeehaoooz-talos-ui-data-viz.mjs.map +1 -0
  8. package/fesm2022/weeehaoooz-talos-ui-dropdown.mjs +1039 -0
  9. package/fesm2022/weeehaoooz-talos-ui-dropdown.mjs.map +1 -0
  10. package/fesm2022/weeehaoooz-talos-ui-feedback.mjs +2885 -0
  11. package/fesm2022/weeehaoooz-talos-ui-feedback.mjs.map +1 -0
  12. package/fesm2022/weeehaoooz-talos-ui-form.mjs +10799 -0
  13. package/fesm2022/weeehaoooz-talos-ui-form.mjs.map +1 -0
  14. package/fesm2022/weeehaoooz-talos-ui-layout.mjs +1316 -7
  15. package/fesm2022/weeehaoooz-talos-ui-layout.mjs.map +1 -1
  16. package/fesm2022/weeehaoooz-talos-ui-nav.mjs +3 -3
  17. package/fesm2022/weeehaoooz-talos-ui-nav.mjs.map +1 -1
  18. package/fesm2022/weeehaoooz-talos-ui.mjs +21592 -16293
  19. package/fesm2022/weeehaoooz-talos-ui.mjs.map +1 -1
  20. package/package.json +20 -139
  21. package/styles/_breadcrumb.scss +16 -0
  22. package/styles/_button-group.scss +2 -1
  23. package/styles/_buttons.scss +51 -0
  24. package/styles/_dropdown.scss +438 -0
  25. package/styles/_form-controls.scss +13 -0
  26. package/styles/_progress-bar.scss +43 -0
  27. package/styles/_skeleton.scss +176 -0
  28. package/styles/_spinner.scss +58 -0
  29. package/styles/_variables.scss +33 -0
  30. package/styles/index.scss +6 -1
  31. package/types/weeehaoooz-talos-ui-button.d.ts +92 -0
  32. package/types/weeehaoooz-talos-ui-button.d.ts.map +1 -0
  33. package/types/weeehaoooz-talos-ui-data-display.d.ts +1018 -0
  34. package/types/weeehaoooz-talos-ui-data-display.d.ts.map +1 -0
  35. package/types/weeehaoooz-talos-ui-data-viz.d.ts +839 -0
  36. package/types/weeehaoooz-talos-ui-data-viz.d.ts.map +1 -0
  37. package/types/weeehaoooz-talos-ui-dropdown.d.ts +187 -0
  38. package/types/weeehaoooz-talos-ui-dropdown.d.ts.map +1 -0
  39. package/types/weeehaoooz-talos-ui-feedback.d.ts +1495 -0
  40. package/types/weeehaoooz-talos-ui-feedback.d.ts.map +1 -0
  41. package/types/weeehaoooz-talos-ui-form.d.ts +2639 -0
  42. package/types/weeehaoooz-talos-ui-form.d.ts.map +1 -0
  43. package/types/weeehaoooz-talos-ui-layout.d.ts +851 -3
  44. package/types/weeehaoooz-talos-ui-layout.d.ts.map +1 -1
  45. package/types/weeehaoooz-talos-ui-nav.d.ts +1 -1
  46. package/types/weeehaoooz-talos-ui.d.ts +7148 -4629
  47. package/types/weeehaoooz-talos-ui.d.ts.map +1 -1
  48. package/fesm2022/weeehaoooz-talos-ui-button-button-group.mjs.map +0 -1
  49. package/fesm2022/weeehaoooz-talos-ui-button-button.mjs +0 -94
  50. package/fesm2022/weeehaoooz-talos-ui-button-button.mjs.map +0 -1
  51. package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs +0 -233
  52. package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs.map +0 -1
  53. package/fesm2022/weeehaoooz-talos-ui-data-display-data-grid.mjs +0 -1627
  54. package/fesm2022/weeehaoooz-talos-ui-data-display-data-grid.mjs.map +0 -1
  55. package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs +0 -361
  56. package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs.map +0 -1
  57. package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs +0 -312
  58. package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs.map +0 -1
  59. package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs +0 -235
  60. package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs.map +0 -1
  61. package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs +0 -462
  62. package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs.map +0 -1
  63. package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs +0 -805
  64. package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs.map +0 -1
  65. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs +0 -267
  66. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs.map +0 -1
  67. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs +0 -351
  68. package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs.map +0 -1
  69. package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs +0 -566
  70. package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs.map +0 -1
  71. package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs +0 -534
  72. package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs.map +0 -1
  73. package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs +0 -446
  74. package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs.map +0 -1
  75. package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs +0 -376
  76. package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs.map +0 -1
  77. package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs +0 -147
  78. package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs.map +0 -1
  79. package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs +0 -242
  80. package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs.map +0 -1
  81. package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs +0 -514
  82. package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs.map +0 -1
  83. package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs +0 -548
  84. package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs.map +0 -1
  85. package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs +0 -692
  86. package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs.map +0 -1
  87. package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs +0 -761
  88. package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs.map +0 -1
  89. package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs +0 -896
  90. package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs.map +0 -1
  91. package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs +0 -872
  92. package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs.map +0 -1
  93. package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs +0 -119
  94. package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs.map +0 -1
  95. package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs +0 -135
  96. package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs.map +0 -1
  97. package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs +0 -666
  98. package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs.map +0 -1
  99. package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs +0 -147
  100. package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs.map +0 -1
  101. package/fesm2022/weeehaoooz-talos-ui-form-input.mjs +0 -33
  102. package/fesm2022/weeehaoooz-talos-ui-form-input.mjs.map +0 -1
  103. package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs +0 -455
  104. package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs.map +0 -1
  105. package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs +0 -379
  106. package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs.map +0 -1
  107. package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs +0 -297
  108. package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs.map +0 -1
  109. package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs +0 -661
  110. package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs.map +0 -1
  111. package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs +0 -346
  112. package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs.map +0 -1
  113. package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs +0 -896
  114. package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs.map +0 -1
  115. package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs +0 -252
  116. package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs.map +0 -1
  117. package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs +0 -916
  118. package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs.map +0 -1
  119. package/types/weeehaoooz-talos-ui-button-button-group.d.ts +0 -62
  120. package/types/weeehaoooz-talos-ui-button-button-group.d.ts.map +0 -1
  121. package/types/weeehaoooz-talos-ui-button-button.d.ts +0 -38
  122. package/types/weeehaoooz-talos-ui-button-button.d.ts.map +0 -1
  123. package/types/weeehaoooz-talos-ui-data-display-badge.d.ts +0 -119
  124. package/types/weeehaoooz-talos-ui-data-display-badge.d.ts.map +0 -1
  125. package/types/weeehaoooz-talos-ui-data-display-data-grid.d.ts +0 -272
  126. package/types/weeehaoooz-talos-ui-data-display-data-grid.d.ts.map +0 -1
  127. package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts +0 -135
  128. package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts.map +0 -1
  129. package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts +0 -144
  130. package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts.map +0 -1
  131. package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts +0 -83
  132. package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts.map +0 -1
  133. package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts +0 -255
  134. package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts.map +0 -1
  135. package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts +0 -204
  136. package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts.map +0 -1
  137. package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts +0 -101
  138. package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts.map +0 -1
  139. package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts +0 -138
  140. package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts.map +0 -1
  141. package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts +0 -161
  142. package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts.map +0 -1
  143. package/types/weeehaoooz-talos-ui-feedback-alert.d.ts +0 -212
  144. package/types/weeehaoooz-talos-ui-feedback-alert.d.ts.map +0 -1
  145. package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts +0 -259
  146. package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts.map +0 -1
  147. package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts +0 -147
  148. package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts.map +0 -1
  149. package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts +0 -32
  150. package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts.map +0 -1
  151. package/types/weeehaoooz-talos-ui-form-affix.d.ts +0 -88
  152. package/types/weeehaoooz-talos-ui-form-affix.d.ts.map +0 -1
  153. package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts +0 -113
  154. package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts.map +0 -1
  155. package/types/weeehaoooz-talos-ui-form-checkbox.d.ts +0 -165
  156. package/types/weeehaoooz-talos-ui-form-checkbox.d.ts.map +0 -1
  157. package/types/weeehaoooz-talos-ui-form-chips.d.ts +0 -152
  158. package/types/weeehaoooz-talos-ui-form-chips.d.ts.map +0 -1
  159. package/types/weeehaoooz-talos-ui-form-color-picker.d.ts +0 -144
  160. package/types/weeehaoooz-talos-ui-form-color-picker.d.ts.map +0 -1
  161. package/types/weeehaoooz-talos-ui-form-date-picker.d.ts +0 -138
  162. package/types/weeehaoooz-talos-ui-form-date-picker.d.ts.map +0 -1
  163. package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts +0 -148
  164. package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts.map +0 -1
  165. package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts +0 -44
  166. package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts.map +0 -1
  167. package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts +0 -48
  168. package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts.map +0 -1
  169. package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts +0 -227
  170. package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts.map +0 -1
  171. package/types/weeehaoooz-talos-ui-form-form-field.d.ts +0 -42
  172. package/types/weeehaoooz-talos-ui-form-form-field.d.ts.map +0 -1
  173. package/types/weeehaoooz-talos-ui-form-input.d.ts +0 -15
  174. package/types/weeehaoooz-talos-ui-form-input.d.ts.map +0 -1
  175. package/types/weeehaoooz-talos-ui-form-otp.d.ts +0 -111
  176. package/types/weeehaoooz-talos-ui-form-otp.d.ts.map +0 -1
  177. package/types/weeehaoooz-talos-ui-form-password-input.d.ts +0 -145
  178. package/types/weeehaoooz-talos-ui-form-password-input.d.ts.map +0 -1
  179. package/types/weeehaoooz-talos-ui-form-radio.d.ts +0 -84
  180. package/types/weeehaoooz-talos-ui-form-radio.d.ts.map +0 -1
  181. package/types/weeehaoooz-talos-ui-form-range-input.d.ts +0 -181
  182. package/types/weeehaoooz-talos-ui-form-range-input.d.ts.map +0 -1
  183. package/types/weeehaoooz-talos-ui-form-rating.d.ts +0 -110
  184. package/types/weeehaoooz-talos-ui-form-rating.d.ts.map +0 -1
  185. package/types/weeehaoooz-talos-ui-form-select-input.d.ts +0 -195
  186. package/types/weeehaoooz-talos-ui-form-select-input.d.ts.map +0 -1
  187. package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts +0 -79
  188. package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts.map +0 -1
  189. package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts +0 -192
  190. package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"weeehaoooz-talos-ui-data-display-data-grid.mjs","sources":["../../../projects/talos-ui/data-display/data-grid/data-grid-status-cell.component.ts","../../../projects/talos-ui/data-display/data-grid/data-grid-actions-cell.component.ts","../../../projects/talos-ui/data-display/data-grid/data-grid-filter-dialog.component.ts","../../../projects/talos-ui/data-display/data-grid/data-grid-format.pipe.ts","../../../projects/talos-ui/data-display/data-grid/data-grid.component.ts","../../../projects/talos-ui/data-display/data-grid/data-grid.component.html","../../../projects/talos-ui/data-display/data-grid/data-grid.module.ts","../../../projects/talos-ui/data-display/data-grid/weeehaoooz-talos-ui-data-display-data-grid.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\nimport {\n TalosStatusTagComponent,\n TalosCanonicalWorkflowStatus,\n TalosStatusTagShape,\n TalosStatusTagSize,\n TalosStatusTagVariant,\n TalosWorkflowStatus,\n} from '@weeehaoooz/talos-ui/data-display/status-tag';\nimport { TalosGridColDef } from './data-grid.types';\n\n@Component({\n selector: 'talos-grid-status-cell',\n imports: [TalosStatusTagComponent],\n template: `\n <talos-status-tag\n [status]=\"status()\"\n [variant]=\"variant()\"\n [size]=\"size()\"\n [shape]=\"shape()\"\n [showIcon]=\"showIcon()\"\n >\n {{ label() }}\n </talos-status-tag>\n `,\n host: {\n class: 'talos-grid-status-cell',\n },\n})\nexport class TalosGridStatusCellComponent {\n readonly row = input.required<any>();\n readonly column = input.required<TalosGridColDef>();\n readonly rawValue = input<any>();\n\n protected readonly value = computed(() => {\n const directVal = this.rawValue();\n if (directVal !== undefined) {\n return directVal;\n }\n const r = this.row();\n const col = this.column();\n if (!r || !col?.field) return '';\n return r[col.field];\n });\n\n protected readonly status = computed<TalosWorkflowStatus | TalosCanonicalWorkflowStatus>(() => {\n const val = this.value();\n const r = this.row();\n const config = this.column().statusConfig;\n if (config?.statusMap) {\n return config.statusMap(val, r);\n }\n return (val ?? 'PENDING') as TalosWorkflowStatus;\n });\n\n protected readonly label = computed<string>(() => {\n const val = this.value();\n const r = this.row();\n const col = this.column();\n if (col.formatter) {\n return col.formatter(val, r);\n }\n return String(val ?? '');\n });\n\n protected readonly variant = computed<TalosStatusTagVariant>(() => {\n return this.column().statusConfig?.variant ?? 'subtle';\n });\n\n protected readonly size = computed<TalosStatusTagSize>(() => {\n return this.column().statusConfig?.size ?? 'sm';\n });\n\n protected readonly shape = computed<TalosStatusTagShape>(() => {\n return this.column().statusConfig?.shape ?? 'rounded';\n });\n\n protected readonly showIcon = computed<boolean>(() => {\n return this.column().statusConfig?.showIcon ?? true;\n });\n}\n","import { Component, input, output } from '@angular/core';\nimport { NgComponentOutlet } from '@angular/common';\nimport { TalosButtonDirective } from '@weeehaoooz/talos-ui/button/button';\nimport { TalosTooltipDirective } from '@weeehaoooz/talos-ui/feedback/tooltip';\nimport { TalosGridActionClickEvent, TalosGridActionDef } from './data-grid.types';\n\n@Component({\n selector: 'talos-grid-actions-cell',\n imports: [NgComponentOutlet, TalosButtonDirective, TalosTooltipDirective],\n template: `\n <div class=\"talos-grid-actions-wrapper\">\n @for (action of visibleActions(); track action.id) {\n <button\n talosButton\n type=\"button\"\n [variant]=\"action.variant ?? 'ghost'\"\n [size]=\"action.size ?? 'xs'\"\n [iconOnly]=\"action.iconOnly ?? !action.label\"\n [disabled]=\"isActionDisabled(action)\"\n [talosTooltip]=\"getActionTooltip(action)\"\n [tooltipDisabled]=\"!getActionTooltip(action)\"\n (click)=\"onActionClick(action, $event)\"\n >\n @if (action.icon) {\n <ng-container *ngComponentOutlet=\"action.icon\" />\n }\n @if (action.label && !action.iconOnly) {\n <span class=\"action-label\">{{ action.label }}</span>\n }\n </button>\n }\n </div>\n `,\n styles: [\n `\n .talos-grid-actions-wrapper {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n flex-wrap: nowrap;\n }\n .action-label {\n margin-left: 2px;\n font-size: 11.5px;\n font-weight: 500;\n }\n :host ::ng-deep button.talos-btn {\n svg,\n .lucide {\n width: 13px;\n height: 13px;\n }\n }\n `,\n ],\n host: {\n class: 'talos-grid-actions-cell',\n },\n})\nexport class TalosGridActionsCellComponent {\n readonly row = input.required<any>();\n readonly rowIndex = input.required<number>();\n readonly actions = input<TalosGridActionDef[]>([]);\n\n readonly actionClick = output<TalosGridActionClickEvent>();\n\n protected visibleActions(): TalosGridActionDef[] {\n const r = this.row();\n return (this.actions() || []).filter((a) => {\n if (typeof a.hidden === 'function') {\n return !a.hidden(r);\n }\n return !a.hidden;\n });\n }\n\n protected isActionDisabled(action: TalosGridActionDef): boolean {\n if (typeof action.disabled === 'function') {\n return action.disabled(this.row());\n }\n return !!action.disabled;\n }\n\n protected getActionTooltip(action: TalosGridActionDef): string {\n if (typeof action.tooltip === 'function') {\n return action.tooltip(this.row());\n }\n return action.tooltip || '';\n }\n\n protected onActionClick(action: TalosGridActionDef, event: MouseEvent): void {\n event.stopPropagation();\n if (this.isActionDisabled(action)) return;\n\n if (action.onClick) {\n action.onClick(this.row(), this.rowIndex(), event);\n }\n this.actionClick.emit({\n actionId: action.id,\n row: this.row(),\n index: this.rowIndex(),\n });\n }\n}\n","import { Component, OnInit, computed, input, output, signal, Type } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgComponentOutlet } from '@angular/common';\nimport { LucideSearch, LucideCheck, LucideChevronDown, LucideX } from '@lucide/angular';\nimport { TalosButtonDirective } from '@weeehaoooz/talos-ui/button/button';\nimport { DatePickerComponent } from '@weeehaoooz/talos-ui/form/date-picker';\nimport {\n TalosGridColDef,\n TalosGridColumnFilter,\n TalosGridFilterMode,\n TalosGridOperator,\n} from './data-grid.types';\n\n@Component({\n selector: 'talos-grid-filter-dialog',\n imports: [FormsModule, NgComponentOutlet, TalosButtonDirective, DatePickerComponent],\n host: {\n '[class.align-right]': \"align() === 'right'\",\n '(keydown.escape)': 'closed.emit()',\n },\n template: `\n <div class=\"filter-dialog-container\" (click)=\"$event.stopPropagation()\">\n @if (filterMode() === 'set') {\n <!-- MODE A: Searchable Checkbox List (for text / select / status) -->\n <div class=\"mode-a-wrapper\">\n <!-- Search input -->\n <div class=\"search-input-wrapper\">\n <span class=\"search-icon\">\n <ng-container *ngComponentOutlet=\"searchIcon\" />\n </span>\n <input\n type=\"text\"\n class=\"filter-search-input\"\n placeholder=\"Search...\"\n [ngModel]=\"searchTerm()\"\n (ngModelChange)=\"searchTerm.set($event)\"\n (keydown.enter)=\"onSearchEnter()\"\n autofocus\n />\n @if (searchTerm()) {\n <button type=\"button\" class=\"clear-search-btn\" (click)=\"searchTerm.set('')\">\n <ng-container *ngComponentOutlet=\"xIcon\" />\n </button>\n }\n </div>\n\n <!-- Checkbox List -->\n <div class=\"checkbox-list-wrapper\">\n <!-- (Select All) item -->\n <label class=\"checkbox-item select-all-item\">\n <input\n type=\"checkbox\"\n class=\"filter-checkbox\"\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isIndeterminate()\"\n (change)=\"toggleSelectAll($event)\"\n />\n <span\n class=\"checkbox-custom\"\n [class.is-checked]=\"isAllSelected()\"\n [class.is-indeterminate]=\"isIndeterminate()\"\n >\n @if (isAllSelected()) {\n <ng-container *ngComponentOutlet=\"checkIcon\" />\n } @else if (isIndeterminate()) {\n <span class=\"indeterminate-bar\"></span>\n }\n </span>\n <span class=\"checkbox-label\">\n {{ searchTerm() ? '(Select All Matches)' : '(Select All)' }}\n </span>\n </label>\n\n <!-- Distinct item checkboxes -->\n @for (val of visibleDistinctValues(); track val) {\n <label class=\"checkbox-item\">\n <input\n type=\"checkbox\"\n class=\"filter-checkbox\"\n [checked]=\"isValSelected(val)\"\n (change)=\"toggleVal(val, $event)\"\n />\n <span class=\"checkbox-custom\" [class.is-checked]=\"isValSelected(val)\">\n @if (isValSelected(val)) {\n <ng-container *ngComponentOutlet=\"checkIcon\" />\n }\n </span>\n <span class=\"checkbox-label\">{{ val || '(Blank)' }}</span>\n </label>\n }\n\n @if (visibleDistinctValues().length === 0) {\n <div class=\"no-matches-msg\">No matching values</div>\n }\n </div>\n </div>\n } @else {\n <!-- MODE B: Operator Dropdown & Filter Input (for numbers / dates) -->\n <div class=\"mode-b-wrapper\">\n <!-- Operator Dropdown -->\n <div class=\"operator-dropdown-wrapper\">\n <select\n class=\"operator-select\"\n [ngModel]=\"selectedOperator()\"\n (ngModelChange)=\"selectedOperator.set($event)\"\n >\n @for (op of operatorOptions(); track op.value) {\n <option [value]=\"op.value\">{{ op.label }}</option>\n }\n </select>\n <span class=\"dropdown-arrow\">\n <ng-container *ngComponentOutlet=\"chevronDownIcon\" />\n </span>\n </div>\n\n <!-- Filter Value Input -->\n @if (selectedOperator() !== 'blank' && selectedOperator() !== 'notBlank') {\n @if (isDateField()) {\n <div class=\"date-picker-wrapper\" (keydown.enter)=\"applyConditionFilter()\">\n <talos-date-picker\n [ngModel]=\"filterVal()\"\n (ngModelChange)=\"onDateFilterValChange($event)\"\n size=\"sm\"\n placeholder=\"Select date\"\n />\n </div>\n } @else {\n <div class=\"search-input-wrapper\">\n <span class=\"search-icon\">\n <ng-container *ngComponentOutlet=\"searchIcon\" />\n </span>\n <input\n type=\"text\"\n class=\"filter-search-input\"\n placeholder=\"Filter...\"\n [ngModel]=\"filterVal()\"\n (ngModelChange)=\"filterVal.set($event)\"\n (keydown.enter)=\"applyConditionFilter()\"\n autofocus\n />\n </div>\n }\n\n <!-- Second input for Between -->\n @if (selectedOperator() === 'between') {\n @if (isDateField()) {\n <div class=\"date-picker-wrapper\" style=\"margin-top: 6px;\" (keydown.enter)=\"applyConditionFilter()\">\n <talos-date-picker\n [ngModel]=\"filterVal2()\"\n (ngModelChange)=\"onDateFilterVal2Change($event)\"\n size=\"sm\"\n placeholder=\"And max date\"\n />\n </div>\n } @else {\n <div class=\"search-input-wrapper\" style=\"margin-top: 6px;\">\n <span class=\"search-icon\">\n <ng-container *ngComponentOutlet=\"searchIcon\" />\n </span>\n <input\n type=\"text\"\n class=\"filter-search-input\"\n placeholder=\"And max value...\"\n [ngModel]=\"filterVal2()\"\n (ngModelChange)=\"filterVal2.set($event)\"\n (keydown.enter)=\"applyConditionFilter()\"\n />\n </div>\n }\n }\n }\n </div>\n }\n\n <!-- Dialog Footer -->\n <div class=\"dialog-footer\">\n <button talosButton variant=\"ghost\" size=\"sm\" type=\"button\" (click)=\"clearFilter()\">\n Clear\n </button>\n <button talosButton variant=\"primary\" size=\"sm\" type=\"button\" (click)=\"applyFilter()\">\n Apply\n </button>\n </div>\n </div>\n `,\n styles: [\n `\n :host {\n display: block;\n font-family: var(--talos-font-sans, system-ui, sans-serif);\n font-size: 13px;\n }\n\n .filter-dialog-container {\n background: var(--talos-dropdown-bg, var(--talos-bg-surface, #ffffff));\n color: var(--talos-text-primary, #0f172a);\n border: 1px solid var(--talos-border-default, #cbd5e1);\n border-radius: var(--talos-radius-md, 8px);\n box-shadow:\n 0 12px 28px -4px rgba(0, 0, 0, 0.25),\n 0 4px 10px rgba(0, 0, 0, 0.1);\n width: 240px;\n padding: 10px;\n box-sizing: border-box;\n user-select: none;\n }\n\n /* Search & Filter Inputs */\n .date-picker-wrapper {\n width: 100%;\n\n talos-date-picker {\n display: block;\n width: 100%;\n }\n }\n\n .search-input-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n width: 100%;\n }\n\n .search-icon {\n position: absolute;\n left: 9px;\n width: 14px;\n height: 14px;\n opacity: 0.6;\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: none;\n color: var(--talos-text-muted, #94a3b8);\n\n ::ng-deep svg,\n svg {\n width: 13px;\n height: 13px;\n display: block;\n }\n }\n\n .filter-search-input {\n width: 100%;\n height: 32px;\n padding: 0 24px 0 28px;\n background: var(--talos-bg-subtle, #f8fafc);\n border: 1px solid var(--talos-border-default, #cbd5e1);\n border-radius: var(--talos-radius-sm, 6px);\n color: var(--talos-text-primary, #0f172a);\n font-size: 13px;\n outline: none;\n box-sizing: border-box;\n transition:\n border-color 0.15s,\n box-shadow 0.15s;\n\n &::placeholder {\n color: var(--talos-text-muted, #94a3b8);\n }\n\n &:focus {\n border-color: var(--talos-primary, #2563eb);\n box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.25);\n }\n }\n\n .clear-search-btn {\n position: absolute;\n right: 6px;\n background: transparent;\n border: none;\n color: var(--talos-text-muted, #94a3b8);\n cursor: pointer;\n padding: 0;\n width: 16px;\n height: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n\n ::ng-deep svg,\n svg {\n width: 12px;\n height: 12px;\n display: block;\n }\n\n &:hover {\n color: var(--talos-text-primary, #0f172a);\n }\n }\n\n /* Mode A Checkbox List */\n .checkbox-list-wrapper {\n margin-top: 8px;\n max-height: 175px;\n overflow-y: auto;\n overflow-x: hidden;\n padding-right: 4px;\n scrollbar-width: thin;\n scrollbar-color: var(--talos-border-default, #cbd5e1) transparent;\n\n &::-webkit-scrollbar {\n width: 5px;\n }\n &::-webkit-scrollbar-thumb {\n background: var(--talos-border-default, #cbd5e1);\n border-radius: 4px;\n }\n }\n\n .checkbox-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 5px 6px;\n border-radius: 4px;\n cursor: pointer;\n color: var(--talos-text-primary, #0f172a);\n transition: background-color 0.12s;\n\n &:hover {\n background: var(--talos-neutral-subtle-bg-hover, rgba(0, 0, 0, 0.05));\n }\n\n &.select-all-item {\n font-weight: 500;\n border-bottom: 1px solid var(--talos-border-subtle, rgba(0, 0, 0, 0.08));\n margin-bottom: 3px;\n padding-bottom: 6px;\n }\n }\n\n .filter-checkbox {\n position: absolute;\n opacity: 0;\n width: 0;\n height: 0;\n pointer-events: none;\n }\n\n .checkbox-custom {\n width: 16px;\n height: 16px;\n border-radius: 4px;\n border: 1.5px solid var(--talos-border-hover, #94a3b8);\n background: transparent;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: all 0.12s;\n\n ::ng-deep svg,\n svg {\n width: 12px;\n height: 12px;\n display: block;\n }\n\n &.is-checked,\n &.is-indeterminate {\n background: var(--talos-primary, #2563eb);\n border-color: var(--talos-primary, #2563eb);\n color: #ffffff;\n }\n\n .indeterminate-bar {\n width: 8px;\n height: 2px;\n background: #ffffff;\n border-radius: 1px;\n }\n }\n\n .checkbox-label {\n font-size: 12.5px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n flex: 1;\n }\n\n .no-matches-msg {\n padding: 12px;\n text-align: center;\n color: var(--talos-text-muted, #94a3b8);\n font-size: 12px;\n }\n\n /* Mode B Operator Dropdown */\n .operator-dropdown-wrapper {\n position: relative;\n margin-bottom: 8px;\n }\n\n .operator-select {\n width: 100%;\n height: 32px;\n padding: 0 24px 0 10px;\n background: var(--talos-bg-subtle, #f8fafc);\n border: 1px solid var(--talos-border-default, #cbd5e1);\n border-radius: var(--talos-radius-sm, 6px);\n color: var(--talos-text-primary, #0f172a);\n font-size: 13px;\n outline: none;\n cursor: pointer;\n appearance: none;\n box-sizing: border-box;\n\n &:focus {\n border-color: var(--talos-primary, #2563eb);\n box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.25);\n }\n }\n\n .dropdown-arrow {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n pointer-events: none;\n opacity: 0.6;\n width: 14px;\n height: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--talos-text-muted, #94a3b8);\n\n ::ng-deep svg,\n svg {\n width: 13px;\n height: 13px;\n display: block;\n }\n }\n\n /* Footer */\n .dialog-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 6px;\n margin-top: 10px;\n padding-top: 8px;\n border-top: 1px solid var(--talos-border-subtle, rgba(0, 0, 0, 0.08));\n }\n `,\n ],\n})\nexport class TalosGridFilterDialogComponent implements OnInit {\n readonly column = input.required<TalosGridColDef>();\n readonly distinctValues = input<string[]>([]);\n readonly currentFilter = input<TalosGridColumnFilter | undefined>(undefined);\n readonly align = input<'left' | 'right'>('left');\n\n readonly filterApplied = output<TalosGridColumnFilter>();\n readonly filterCleared = output<void>();\n readonly closed = output<void>();\n\n // Template icons\n protected readonly searchIcon: Type<unknown> = LucideSearch;\n protected readonly checkIcon: Type<unknown> = LucideCheck;\n protected readonly chevronDownIcon: Type<unknown> = LucideChevronDown;\n protected readonly xIcon: Type<unknown> = LucideX;\n\n // Filter mode derived from column:\n // Mode A: text, select, status\n // Mode B: number, date\n readonly filterMode = computed<TalosGridFilterMode>(() => {\n const col = this.column();\n if (col.filterMode) return col.filterMode;\n if (\n col.type === 'number' ||\n col.sortType === 'number' ||\n col.type === 'date' ||\n col.sortType === 'date'\n ) {\n return 'condition';\n }\n return 'set';\n });\n\n // Mode A local state\n readonly searchTerm = signal<string>('');\n readonly selectedSet = signal<Set<string>>(new Set());\n\n // Mode B local state\n readonly selectedOperator = signal<TalosGridOperator>('eq');\n readonly filterVal = signal<string>('');\n readonly filterVal2 = signal<string>('');\n\n readonly operatorOptions = computed(() => {\n if (this.isDateField()) {\n return [\n { value: 'eq', label: 'Is on' },\n { value: 'neq', label: 'Is not on' },\n { value: 'gt', label: 'After' },\n { value: 'gte', label: 'On or after' },\n { value: 'lt', label: 'Before' },\n { value: 'lte', label: 'On or before' },\n { value: 'between', label: 'Between' },\n { value: 'blank', label: 'Blank' },\n { value: 'notBlank', label: 'Not blank' },\n ];\n }\n if (this.isNumberField()) {\n return [\n { value: 'eq', label: 'Equals' },\n { value: 'neq', label: 'Does not equal' },\n { value: 'gt', label: 'Greater than' },\n { value: 'gte', label: 'Greater than or equal to' },\n { value: 'lt', label: 'Less than' },\n { value: 'lte', label: 'Less than or equal to' },\n { value: 'between', label: 'Between' },\n { value: 'blank', label: 'Blank' },\n { value: 'notBlank', label: 'Not blank' },\n ];\n }\n return [\n { value: 'contains', label: 'Contains' },\n { value: 'eq', label: 'Equals' },\n { value: 'neq', label: 'Does not equal' },\n { value: 'startsWith', label: 'Starts with' },\n { value: 'endsWith', label: 'Ends with' },\n { value: 'blank', label: 'Blank' },\n { value: 'notBlank', label: 'Not blank' },\n ];\n });\n\n ngOnInit(): void {\n this.initFromCurrentFilter();\n }\n\n initFromCurrentFilter(): void {\n const cf = this.currentFilter();\n const all = this.distinctValues();\n\n if (this.filterMode() === 'set') {\n if (cf && cf.mode === 'set' && cf.selectedValues) {\n this.selectedSet.set(new Set(cf.selectedValues));\n } else {\n // Default: all selected\n this.selectedSet.set(new Set(all));\n }\n } else {\n if (cf && cf.mode === 'condition') {\n this.selectedOperator.set(cf.operator || 'eq');\n this.filterVal.set(cf.value !== undefined && cf.value !== null ? String(cf.value) : '');\n this.filterVal2.set(\n cf.secondValue !== undefined && cf.secondValue !== null ? String(cf.secondValue) : '',\n );\n } else {\n const defaultOp = this.isDateField() || this.isNumberField() ? 'eq' : 'contains';\n this.selectedOperator.set(defaultOp);\n this.filterVal.set('');\n this.filterVal2.set('');\n }\n }\n }\n\n isDateField(): boolean {\n const col = this.column();\n return col.type === 'date' || col.sortType === 'date';\n }\n\n isNumberField(): boolean {\n const col = this.column();\n return col.type === 'number' || col.sortType === 'number';\n }\n\n onDateFilterValChange(val: unknown): void {\n if (!val) {\n this.filterVal.set('');\n } else if (val instanceof Date) {\n const y = val.getFullYear();\n const m = String(val.getMonth() + 1).padStart(2, '0');\n const d = String(val.getDate()).padStart(2, '0');\n this.filterVal.set(`${y}-${m}-${d}`);\n } else {\n this.filterVal.set(String(val));\n }\n }\n\n onDateFilterVal2Change(val: unknown): void {\n if (!val) {\n this.filterVal2.set('');\n } else if (val instanceof Date) {\n const y = val.getFullYear();\n const m = String(val.getMonth() + 1).padStart(2, '0');\n const d = String(val.getDate()).padStart(2, '0');\n this.filterVal2.set(`${y}-${m}-${d}`);\n } else {\n this.filterVal2.set(String(val));\n }\n }\n\n // Mode A Helpers\n readonly visibleDistinctValues = computed(() => {\n const term = this.searchTerm().toLowerCase().trim();\n const all = this.distinctValues();\n if (!term) return all;\n return all.filter((v) => (v || '').toLowerCase().includes(term));\n });\n\n isAllSelected(): boolean {\n const visible = this.visibleDistinctValues();\n if (visible.length === 0) return false;\n const sel = this.selectedSet();\n return visible.every((v) => sel.has(v));\n }\n\n isIndeterminate(): boolean {\n const visible = this.visibleDistinctValues();\n if (visible.length === 0) return false;\n const sel = this.selectedSet();\n const count = visible.filter((v) => sel.has(v)).length;\n return count > 0 && count < visible.length;\n }\n\n toggleSelectAll(event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n const sel = new Set(this.selectedSet());\n const visible = this.visibleDistinctValues();\n\n if (checked) {\n visible.forEach((v) => sel.add(v));\n } else {\n visible.forEach((v) => sel.delete(v));\n }\n this.selectedSet.set(sel);\n }\n\n isValSelected(val: string): boolean {\n return this.selectedSet().has(val);\n }\n\n toggleVal(val: string, event: Event): void {\n const checked = (event.target as HTMLInputElement).checked;\n const sel = new Set(this.selectedSet());\n if (checked) {\n sel.add(val);\n } else {\n sel.delete(val);\n }\n this.selectedSet.set(sel);\n }\n\n onSearchEnter(): void {\n const term = this.searchTerm().trim();\n if (term) {\n const visible = this.visibleDistinctValues();\n this.selectedSet.set(new Set(visible));\n }\n this.applySetFilter();\n }\n\n // Apply Actions\n applyFilter(): void {\n if (this.filterMode() === 'set') {\n this.applySetFilter();\n } else {\n this.applyConditionFilter();\n }\n }\n\n applySetFilter(): void {\n const field = this.column().field;\n const all = this.distinctValues();\n let sel = Array.from(this.selectedSet());\n\n // If search term is present and user hadn't changed individual checkboxes (still all selected),\n // narrow selection to the visible search matches\n const term = this.searchTerm().trim();\n if (term && sel.length === all.length) {\n sel = this.visibleDistinctValues();\n this.selectedSet.set(new Set(sel));\n }\n\n // If all distinct values are selected and no search term, it's effectively no filter\n if (sel.length === all.length && all.every((v) => this.selectedSet().has(v))) {\n this.clearFilter();\n return;\n }\n\n this.filterApplied.emit({\n field,\n mode: 'set',\n selectedValues: sel,\n });\n this.closed.emit();\n }\n\n applyConditionFilter(): void {\n const field = this.column().field;\n const op = this.selectedOperator();\n const val = this.filterVal().trim();\n const val2 = this.filterVal2().trim();\n\n if (op !== 'blank' && op !== 'notBlank' && val === '') {\n this.clearFilter();\n return;\n }\n\n this.filterApplied.emit({\n field,\n mode: 'condition',\n operator: op,\n value: val,\n secondValue: op === 'between' ? val2 : undefined,\n });\n this.closed.emit();\n }\n\n clearFilter(): void {\n this.filterCleared.emit();\n this.closed.emit();\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TalosGridColDef } from './data-grid.types';\n\n@Pipe({\n name: 'talosGridCellFormat',\n pure: true,\n})\nexport class TalosGridCellFormatPipe implements PipeTransform {\n private readonly fieldPartsCache = new Map<string, string[]>();\n\n transform<T = any>(row: T, col: TalosGridColDef<T>): string {\n if (!row || !col) return '';\n const val = this.extractFieldValue(row, col.field);\n if (col.formatter) {\n return col.formatter(val, row);\n }\n if (val === null || val === undefined) {\n return '';\n }\n if (col.type === 'date' && val instanceof Date) {\n return val.toLocaleDateString();\n }\n return String(val);\n }\n\n private extractFieldValue(item: any, field: string): any {\n if (!item || !field) return undefined;\n if (!field.includes('.')) {\n return item[field];\n }\n let parts = this.fieldPartsCache.get(field);\n if (!parts) {\n parts = field.split('.');\n this.fieldPartsCache.set(field, parts);\n }\n let cur = item;\n for (let i = 0; i < parts.length; i++) {\n if (cur == null) return undefined;\n cur = cur[parts[i]];\n }\n return cur;\n }\n}\n","import { Component, computed, effect, input, output, signal, Type } from '@angular/core';\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\nimport {\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n ConnectedPosition,\n OverlayModule,\n} from '@angular/cdk/overlay';\nimport {\n LucideArrowUp,\n LucideArrowDown,\n LucideArrowUpDown,\n LucideChevronLeft,\n LucideChevronRight,\n LucideChevronsLeft,\n LucideChevronsRight,\n LucideX,\n LucideInbox,\n LucideLoader2,\n LucideFilter,\n} from '@lucide/angular';\nimport { TalosButtonDirective } from '@weeehaoooz/talos-ui/button/button';\nimport { TalosGridStatusCellComponent } from './data-grid-status-cell.component';\nimport { TalosGridActionsCellComponent } from './data-grid-actions-cell.component';\nimport { TalosGridFilterDialogComponent } from './data-grid-filter-dialog.component';\nimport { TalosGridCellFormatPipe } from './data-grid-format.pipe';\nimport {\n TalosGridActionClickEvent,\n TalosGridColDef,\n TalosGridColumnFilter,\n TalosGridColumnResizeEvent,\n TalosGridDensity,\n TalosGridPaginationState,\n TalosGridSortDirection,\n TalosGridSortState,\n TalosGridSortType,\n} from './data-grid.types';\n\n@Component({\n selector: 'talos-data-grid',\n imports: [\n NgComponentOutlet,\n NgTemplateOutlet,\n OverlayModule,\n CdkConnectedOverlay,\n CdkOverlayOrigin,\n TalosButtonDirective,\n TalosGridStatusCellComponent,\n TalosGridActionsCellComponent,\n TalosGridFilterDialogComponent,\n TalosGridCellFormatPipe,\n ],\n templateUrl: './data-grid.component.html',\n styleUrl: './data-grid.component.scss',\n host: {\n class: 'talos-data-grid-host',\n },\n})\nexport class TalosDataGridComponent<T = any> {\n // Inputs\n readonly data = input.required<T[]>();\n readonly columns = input.required<TalosGridColDef<T>[]>();\n readonly density = input<TalosGridDensity>('comfortable');\n readonly filterable = input<boolean>(false);\n readonly pagination = input<boolean>(false);\n readonly pageSize = input<number>(10);\n readonly pageSizeOptions = input<number[]>([5, 10, 20, 50]);\n readonly pageIndex = input<number>(0);\n readonly totalItems = input<number | null>(null);\n readonly trackBy = input<((index: number, item: T) => any) | null>(null);\n readonly striped = input<boolean>(false);\n readonly bordered = input<boolean>(true);\n readonly hoverable = input<boolean>(true);\n readonly emptyMessage = input<string>('No records to display');\n readonly loading = input<boolean>(false);\n readonly clientSort = input<boolean>(true);\n readonly clientPagination = input<boolean>(true);\n readonly clientFilter = input<boolean>(true);\n readonly resizable = input<boolean>(false);\n readonly rowKey = input<keyof T | string | null>(null);\n\n // Outputs\n readonly sortChange = output<TalosGridSortState>();\n readonly filterChange = output<TalosGridColumnFilter[]>();\n readonly pageChange = output<TalosGridPaginationState>();\n readonly rowClick = output<{ row: T; index: number }>();\n readonly actionClick = output<TalosGridActionClickEvent<T>>();\n readonly columnResize = output<TalosGridColumnResizeEvent<T>>();\n\n // Icons for template\n protected readonly arrowUpIcon: Type<unknown> = LucideArrowUp;\n protected readonly arrowDownIcon: Type<unknown> = LucideArrowDown;\n protected readonly arrowUpDownIcon: Type<unknown> = LucideArrowUpDown;\n protected readonly chevronLeftIcon: Type<unknown> = LucideChevronLeft;\n protected readonly chevronRightIcon: Type<unknown> = LucideChevronRight;\n protected readonly chevronsLeftIcon: Type<unknown> = LucideChevronsLeft;\n protected readonly chevronsRightIcon: Type<unknown> = LucideChevronsRight;\n protected readonly xIcon: Type<unknown> = LucideX;\n protected readonly inboxIcon: Type<unknown> = LucideInbox;\n protected readonly loaderIcon: Type<unknown> = LucideLoader2;\n protected readonly filterIcon: Type<unknown> = LucideFilter;\n\n // Internal reactive states\n readonly internalSortState = signal<TalosGridSortState>({ field: '', direction: null });\n readonly internalFilterStates = signal<Map<string, TalosGridColumnFilter>>(new Map());\n readonly internalPageIndex = signal<number>(0);\n readonly internalPageSize = signal<number>(10);\n readonly activeFilterCol = signal<string | null>(null);\n readonly columnWidths = signal<Record<string, number>>({});\n readonly resizingColumn = signal<string | null>(null);\n readonly isResizing = computed<boolean>(() => this.resizingColumn() !== null);\n readonly hasResizableColumns = computed<boolean>(() => {\n return this.resizable() || this.columns().some((c) => c.resizable === true);\n });\n\n // CDK Connected Overlay Positions\n readonly overlayPositions: ConnectedPosition[] = [\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n offsetY: 6,\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n offsetY: -6,\n },\n {\n originX: 'end',\n originY: 'top',\n overlayX: 'end',\n overlayY: 'bottom',\n offsetY: -6,\n },\n ];\n\n constructor() {\n effect(() => {\n this.internalPageIndex.set(this.pageIndex());\n });\n effect(() => {\n this.internalPageSize.set(this.pageSize());\n });\n }\n\n // Active filters list\n protected readonly activeFiltersList = computed(() => {\n return Array.from(this.internalFilterStates().values());\n });\n\n protected readonly hasActiveFilters = computed(() => {\n return this.internalFilterStates().size > 0;\n });\n\n // Cached distinct values for the currently active filter column\n readonly activeColumnDistinctValues = computed<string[]>(() => {\n const field = this.activeFilterCol();\n if (!field) return [];\n const col = this.columns().find((c) => c.field === field);\n if (!col) return [];\n return this.getDistinctValues(col);\n });\n\n // Multi-Stage Processing Pipeline:\n // Stage 1: Filtered Data\n readonly filteredData = computed<T[]>(() => {\n const raw = this.data() || [];\n if (!this.clientFilter() || this.internalFilterStates().size === 0) {\n return raw;\n }\n\n const filters = this.internalFilterStates();\n const colsMap = new Map(this.columns().map((c) => [c.field, c]));\n\n return raw.filter((item) => {\n for (const [field, filter] of filters.entries()) {\n const rawVal = this.extractFieldValue(item, field);\n const col = colsMap.get(field);\n if (!this.matchesFilter(rawVal, filter, col)) {\n return false;\n }\n }\n return true;\n });\n });\n\n // Stage 2: Sorted Data\n readonly sortedData = computed<T[]>(() => {\n const base = this.filteredData();\n const sort = this.internalSortState();\n\n if (!this.clientSort() || !sort.direction || !sort.field) {\n return base;\n }\n\n const col = this.columns().find((c) => c.field === sort.field);\n const sortType = sort.sortType || col?.sortType || this.inferSortType(col);\n const dir = sort.direction === 'asc' ? 1 : -1;\n\n // Schwartzian transform: Pre-extract and parse sort keys in an O(N) pass\n // to eliminate reflection, string conversions, and Date parsing from the O(N log N) comparator\n const mapped = base.map((item, index) => {\n const raw = this.extractFieldValue(item, sort.field);\n let sortKey: any = null;\n\n if (raw !== null && raw !== undefined && raw !== '') {\n switch (sortType) {\n case 'number': {\n const num = Number(raw);\n sortKey = isNaN(num) ? null : num;\n break;\n }\n case 'date': {\n const time = raw instanceof Date ? raw.getTime() : new Date(raw).getTime();\n sortKey = isNaN(time) ? null : time;\n break;\n }\n case 'string':\n default:\n sortKey = String(raw);\n break;\n }\n }\n\n return { item, index, sortKey };\n });\n\n mapped.sort((a, b) => {\n if (a.sortKey === b.sortKey) return a.index - b.index;\n if (a.sortKey === null) return 1;\n if (b.sortKey === null) return -1;\n\n if (sortType === 'number' || sortType === 'date') {\n const diff = (a.sortKey - b.sortKey) * dir;\n return diff !== 0 ? diff : a.index - b.index;\n }\n\n // string\n const cmp =\n (a.sortKey as string).localeCompare(b.sortKey as string, undefined, {\n numeric: true,\n sensitivity: 'base',\n }) * dir;\n return cmp !== 0 ? cmp : a.index - b.index;\n });\n\n return mapped.map((m) => m.item);\n });\n\n // Stage 3: Paged Data\n readonly pagedData = computed<T[]>(() => {\n const sorted = this.sortedData();\n if (!this.pagination() || !this.clientPagination()) {\n return sorted;\n }\n\n const pageSize = this.internalPageSize();\n const pageIndex = this.internalPageIndex();\n const start = pageIndex * pageSize;\n return sorted.slice(start, start + pageSize);\n });\n\n // Stage 4: Pagination Metrics\n readonly totalCount = computed<number>(() => {\n const externalTotal = this.totalItems();\n if (externalTotal !== null && externalTotal !== undefined) {\n return externalTotal;\n }\n return this.filteredData().length;\n });\n\n readonly totalPages = computed<number>(() => {\n const count = this.totalCount();\n const size = this.internalPageSize();\n if (count <= 0 || size <= 0) return 1;\n return Math.ceil(count / size);\n });\n\n readonly startRecord = computed<number>(() => {\n const total = this.totalCount();\n if (total === 0) return 0;\n return this.internalPageIndex() * this.internalPageSize() + 1;\n });\n\n readonly endRecord = computed<number>(() => {\n const total = this.totalCount();\n if (total === 0) return 0;\n return Math.min(total, (this.internalPageIndex() + 1) * this.internalPageSize());\n });\n\n get hasRowClickListeners(): boolean {\n return true;\n }\n\n // Row Identification for TrackBy\n trackByRow(index: number, row: T): any {\n const customTrack = this.trackBy();\n if (customTrack) {\n return customTrack(index, row);\n }\n const customKey = this.rowKey();\n if (customKey && row && typeof row === 'object') {\n return (row as any)[customKey];\n }\n if (row && typeof row === 'object') {\n const anyRow = row as any;\n return anyRow.id ?? anyRow._id ?? anyRow.uuid ?? anyRow.key ?? index;\n }\n return index;\n }\n\n // Header & Sorting helpers\n isSortable(col: TalosGridColDef<T>): boolean {\n if (col.type === 'actions') return false;\n if (col.sortable !== undefined) return col.sortable;\n return !!col.sortType;\n }\n\n isSorted(col: TalosGridColDef<T>): boolean {\n return (\n this.internalSortState().field === col.field && this.internalSortState().direction !== null\n );\n }\n\n getSortDirection(col: TalosGridColDef<T>): TalosGridSortDirection {\n if (this.internalSortState().field !== col.field) {\n return null;\n }\n return this.internalSortState().direction;\n }\n\n getAriaSort(col: TalosGridColDef<T>): 'ascending' | 'descending' | 'none' | null {\n if (!this.isSortable(col)) return null;\n const dir = this.getSortDirection(col);\n if (dir === 'asc') return 'ascending';\n if (dir === 'desc') return 'descending';\n return 'none';\n }\n\n onHeaderClick(col: TalosGridColDef<T>): void {\n if (!this.isSortable(col)) return;\n\n const current = this.internalSortState();\n let nextDirection: TalosGridSortDirection;\n\n if (current.field !== col.field) {\n nextDirection = 'asc';\n } else if (current.direction === 'asc') {\n nextDirection = 'desc';\n } else if (current.direction === 'desc') {\n nextDirection = null;\n } else {\n nextDirection = 'asc';\n }\n\n const sortType = col.sortType || this.inferSortType(col);\n const newState: TalosGridSortState = {\n field: nextDirection ? col.field : '',\n direction: nextDirection,\n sortType,\n };\n\n this.internalSortState.set(newState);\n this.sortChange.emit(newState);\n }\n\n // Column Resizing Helpers & Handlers\n isResizable(col: TalosGridColDef<T>): boolean {\n if (col.resizable !== undefined) {\n return col.resizable;\n }\n if (col.type === 'actions') {\n return false;\n }\n return this.resizable();\n }\n\n isColumnResizing(field: string): boolean {\n return this.resizingColumn() === field;\n }\n\n getColumnWidth(col: TalosGridColDef<T>): string | undefined {\n const dynamic = this.columnWidths()[col.field];\n if (dynamic !== undefined) {\n return `${dynamic}px`;\n }\n return col.width || col.minWidth;\n }\n\n setColumnWidth(field: string, width: number): void {\n this.columnWidths.update((prev) => ({\n ...prev,\n [field]: width,\n }));\n }\n\n resetColumnWidths(): void {\n this.columnWidths.set({});\n }\n\n onResizeStart(col: TalosGridColDef<T>, event: MouseEvent | TouchEvent, thEl: HTMLElement): void {\n if (!this.isResizable(col)) return;\n event.preventDefault();\n event.stopPropagation();\n\n const startX = 'touches' in event ? event.touches[0].clientX : event.clientX;\n const startWidth = thEl.getBoundingClientRect().width;\n\n const minW = col.minWidth ? parseInt(col.minWidth, 10) : 50;\n const maxW = col.maxWidth ? parseInt(col.maxWidth, 10) : undefined;\n\n this.resizingColumn.set(col.field);\n if (typeof document !== 'undefined') {\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n }\n\n let lastWidth = startWidth;\n\n const onMove = (moveEvent: MouseEvent | TouchEvent) => {\n const currentX = 'touches' in moveEvent ? moveEvent.touches[0].clientX : moveEvent.clientX;\n const deltaX = currentX - startX;\n let newWidth = Math.round(startWidth + deltaX);\n if (minW !== undefined && newWidth < minW) newWidth = minW;\n if (maxW !== undefined && newWidth > maxW) newWidth = maxW;\n\n lastWidth = newWidth;\n this.columnWidths.update((prev) => ({\n ...prev,\n [col.field]: newWidth,\n }));\n };\n\n const onEnd = () => {\n if (typeof document !== 'undefined') {\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onEnd);\n document.removeEventListener('touchmove', onMove);\n document.removeEventListener('touchend', onEnd);\n document.body.style.cursor = '';\n document.body.style.userSelect = '';\n }\n\n this.resizingColumn.set(null);\n this.columnResize.emit({ column: col, width: lastWidth });\n };\n\n if (typeof document !== 'undefined') {\n document.addEventListener('mousemove', onMove);\n document.addEventListener('mouseup', onEnd);\n document.addEventListener('touchmove', onMove, { passive: true });\n document.addEventListener('touchend', onEnd);\n }\n }\n\n onResizeDoubleClick(col: TalosGridColDef<T>, event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.columnWidths.update((prev) => {\n const next = { ...prev };\n delete next[col.field];\n return next;\n });\n\n if (col.width) {\n const parsed = parseInt(col.width, 10);\n if (!isNaN(parsed)) {\n this.columnResize.emit({ column: col, width: parsed });\n }\n }\n }\n\n onResizeKeydown(col: TalosGridColDef<T>, event: KeyboardEvent, thEl: HTMLElement): void {\n if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\n event.preventDefault();\n event.stopPropagation();\n const currentWidth = this.columnWidths()[col.field] ?? thEl.getBoundingClientRect().width;\n const step = event.key === 'ArrowRight' ? 10 : -10;\n const minW = col.minWidth ? parseInt(col.minWidth, 10) : 50;\n const maxW = col.maxWidth ? parseInt(col.maxWidth, 10) : undefined;\n let newWidth = Math.round(currentWidth + step);\n if (minW !== undefined && newWidth < minW) newWidth = minW;\n if (maxW !== undefined && newWidth > maxW) newWidth = maxW;\n\n this.columnWidths.update((prev) => ({\n ...prev,\n [col.field]: newWidth,\n }));\n this.columnResize.emit({ column: col, width: newWidth });\n }\n }\n\n // Filter Helpers & Dialog Management\n isFilterable(col: TalosGridColDef<T>): boolean {\n if (col.type === 'actions') return false;\n if (col.filterable !== undefined) return col.filterable;\n return this.filterable();\n }\n\n isFilterDialogOpen(field: string): boolean {\n return this.activeFilterCol() === field;\n }\n\n toggleFilterDialog(field: string, event: MouseEvent): void {\n event.stopPropagation();\n if (this.activeFilterCol() === field) {\n this.activeFilterCol.set(null);\n } else {\n this.activeFilterCol.set(field);\n }\n }\n\n closeFilterDialog(): void {\n this.activeFilterCol.set(null);\n }\n\n onOverlayOutsideClick(event: MouseEvent, field: string): void {\n const target = event.target as HTMLElement;\n if (\n target &&\n (target.closest(`.filter-anchor-${field}`) ||\n target.closest('.datepicker-dropdown-panel') ||\n target.closest('.talos-datepicker-host'))\n ) {\n return;\n }\n this.closeFilterDialog();\n }\n\n getDistinctValues(col: TalosGridColDef<T>): string[] {\n const raw = this.data() || [];\n const valuesSet = new Set<string>();\n\n for (const item of raw) {\n const val = this.extractFieldValue(item, col.field);\n if (val === null || val === undefined) {\n valuesSet.add('');\n } else {\n valuesSet.add(String(val));\n }\n }\n\n return Array.from(valuesSet).sort((a, b) => {\n if (a === '') return 1;\n if (b === '') return -1;\n return a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' });\n });\n }\n\n getFilter(field: string): TalosGridColumnFilter | undefined {\n return this.internalFilterStates().get(field);\n }\n\n hasFilter(field: string): boolean {\n return this.internalFilterStates().has(field);\n }\n\n onFilterApplied(filter: TalosGridColumnFilter): void {\n const map = new Map(this.internalFilterStates());\n map.set(filter.field, filter);\n this.internalFilterStates.set(map);\n this.internalPageIndex.set(0);\n this.filterChange.emit(this.activeFiltersList());\n }\n\n onFilterCleared(field: string): void {\n const map = new Map(this.internalFilterStates());\n map.delete(field);\n this.internalFilterStates.set(map);\n this.internalPageIndex.set(0);\n this.filterChange.emit(this.activeFiltersList());\n }\n\n clearAllFilters(): void {\n this.internalFilterStates.set(new Map());\n this.internalPageIndex.set(0);\n this.filterChange.emit([]);\n }\n\n // Filter Matching Evaluator\n private matchesFilter(\n rawValue: any,\n filter: TalosGridColumnFilter,\n col?: TalosGridColDef<T>,\n ): boolean {\n // Mode A: Set Filter (text / select / status)\n if (filter.mode === 'set') {\n if (!filter.selectedValues) return true;\n const strVal = rawValue === null || rawValue === undefined ? '' : String(rawValue);\n return filter.selectedValues.includes(strVal);\n }\n\n // Mode B: Condition Filter (numbers / dates / text)\n const op = filter.operator || 'eq';\n\n if (op === 'blank') {\n return rawValue === null || rawValue === undefined || rawValue === '';\n }\n if (op === 'notBlank') {\n return rawValue !== null && rawValue !== undefined && rawValue !== '';\n }\n\n if (rawValue === null || rawValue === undefined || rawValue === '') {\n return false;\n }\n\n const filterVal = filter.value;\n const secondVal = filter.secondValue;\n\n // Check if comparing dates\n const isDate =\n col?.type === 'date' ||\n col?.sortType === 'date' ||\n filterVal instanceof Date ||\n (typeof filterVal === 'string' && /^\\d{4}-\\d{2}-\\d{2}/.test(filterVal)) ||\n rawValue instanceof Date;\n\n if (isDate) {\n const rowDate = this.normalizeDateToYMD(rawValue);\n const targetDate = this.normalizeDateToYMD(filterVal);\n const targetDate2 = secondVal ? this.normalizeDateToYMD(secondVal) : '';\n\n switch (op) {\n case 'eq':\n return rowDate === targetDate;\n case 'neq':\n return rowDate !== targetDate;\n case 'gt':\n return rowDate > targetDate;\n case 'gte':\n return rowDate >= targetDate;\n case 'lt':\n return rowDate < targetDate;\n case 'lte':\n return rowDate <= targetDate;\n case 'between': {\n if (!targetDate2) return rowDate >= targetDate;\n const minD = targetDate <= targetDate2 ? targetDate : targetDate2;\n const maxD = targetDate <= targetDate2 ? targetDate2 : targetDate;\n return rowDate >= minD && rowDate <= maxD;\n }\n default:\n return true;\n }\n }\n\n // Check if comparing numbers\n const isNumber = col?.type === 'number' || col?.sortType === 'number';\n const hasFilterNum =\n filterVal !== '' &&\n filterVal !== null &&\n filterVal !== undefined &&\n !isNaN(Number(filterVal));\n const numRaw = Number(rawValue);\n\n if ((isNumber || hasFilterNum) && !isNaN(numRaw)) {\n const numFilter = Number(filterVal);\n const numFilter2 =\n secondVal !== '' && secondVal !== null && secondVal !== undefined ? Number(secondVal) : NaN;\n\n switch (op) {\n case 'eq':\n return numRaw === numFilter;\n case 'neq':\n return numRaw !== numFilter;\n case 'gt':\n return numRaw > numFilter;\n case 'gte':\n return numRaw >= numFilter;\n case 'lt':\n return numRaw < numFilter;\n case 'lte':\n return numRaw <= numFilter;\n case 'between': {\n if (isNaN(numFilter2)) return numRaw >= numFilter;\n const minN = Math.min(numFilter, numFilter2);\n const maxN = Math.max(numFilter, numFilter2);\n return numRaw >= minN && numRaw <= maxN;\n }\n default:\n return true;\n }\n }\n\n // String / Text comparison\n const strRaw = String(rawValue).toLowerCase().trim();\n const strFilter = String(filterVal ?? '')\n .toLowerCase()\n .trim();\n switch (op) {\n case 'eq':\n return strRaw === strFilter;\n case 'neq':\n return strRaw !== strFilter;\n case 'startsWith':\n return strRaw.startsWith(strFilter);\n case 'endsWith':\n return strRaw.endsWith(strFilter);\n case 'contains':\n default:\n return strRaw.includes(strFilter);\n }\n }\n\n private normalizeDateToYMD(val: any): string {\n if (!val) return '';\n if (typeof val === 'string' && /^\\d{4}-\\d{2}-\\d{2}$/.test(val)) {\n return val;\n }\n const d = new Date(val);\n if (isNaN(d.getTime())) return '';\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, '0');\n const day = String(d.getDate()).padStart(2, '0');\n return `${y}-${m}-${day}`;\n }\n\n // Pagination Handlers\n setPage(pageIndex: number): void {\n const validPage = Math.max(0, Math.min(pageIndex, this.totalPages() - 1));\n if (validPage !== this.internalPageIndex()) {\n this.internalPageIndex.set(validPage);\n this.pageChange.emit({\n pageIndex: validPage,\n pageSize: this.internalPageSize(),\n totalItems: this.totalCount(),\n });\n }\n }\n\n onPageSizeChange(event: Event): void {\n const target = event.target as HTMLSelectElement;\n const newSize = Number(target.value);\n this.internalPageSize.set(newSize);\n this.internalPageIndex.set(0);\n this.pageChange.emit({\n pageIndex: 0,\n pageSize: newSize,\n totalItems: this.totalCount(),\n });\n }\n\n // Cell Content & Row Click Helpers\n getCellValue(row: T, col: TalosGridColDef<T>): any {\n return this.extractFieldValue(row, col.field);\n }\n\n formatCellValue(row: T, col: TalosGridColDef<T>): string {\n const val = this.getCellValue(row, col);\n if (col.formatter) {\n return col.formatter(val, row);\n }\n if (val === null || val === undefined) {\n return '';\n }\n if (col.type === 'date' && val instanceof Date) {\n return val.toLocaleDateString();\n }\n return String(val);\n }\n\n onRowClick(row: T, index: number): void {\n this.rowClick.emit({ row, index });\n }\n\n private readonly fieldPartsCache = new Map<string, string[]>();\n\n private extractFieldValue(item: any, field: string): any {\n if (!item || !field) return undefined;\n if (!field.includes('.')) {\n return item[field];\n }\n let parts = this.fieldPartsCache.get(field);\n if (!parts) {\n parts = field.split('.');\n this.fieldPartsCache.set(field, parts);\n }\n let cur = item;\n for (let i = 0; i < parts.length; i++) {\n if (cur == null) return undefined;\n cur = cur[parts[i]];\n }\n return cur;\n }\n\n private inferSortType(col?: TalosGridColDef<T>): TalosGridSortType {\n if (!col) return 'string';\n if (col.type === 'number') return 'number';\n if (col.type === 'date') return 'date';\n return 'string';\n }\n}\n","<div\n class=\"talos-data-grid-container\"\n [class.density-compact]=\"density() === 'compact'\"\n [class.density-comfortable]=\"density() === 'comfortable'\"\n [class.density-spacious]=\"density() === 'spacious'\"\n [class.is-bordered]=\"bordered()\"\n [class.is-striped]=\"striped()\"\n [class.is-resizing]=\"isResizing()\"\n>\n <!-- Loading overlay -->\n @if (loading()) {\n <div class=\"talos-data-grid-loading-overlay\">\n <ng-container *ngComponentOutlet=\"loaderIcon\" />\n </div>\n }\n\n <!-- Main Scrollable Table Wrapper -->\n <div class=\"talos-data-grid-table-wrapper\">\n <table class=\"talos-data-grid-table\" [class.has-resizable-columns]=\"hasResizableColumns()\" role=\"grid\">\n <thead>\n <!-- Header Column Row -->\n <tr>\n @for (col of columns(); track col.field) {\n <th\n #thEl\n [style.width]=\"getColumnWidth(col)\"\n [style.min-width]=\"col.minWidth\"\n [style.max-width]=\"col.maxWidth\"\n [class.align-left]=\"!col.align || col.align === 'left'\"\n [class.align-center]=\"col.align === 'center'\"\n [class.align-right]=\"col.align === 'right'\"\n [class.is-sortable]=\"isSortable(col)\"\n [class.is-sorted]=\"isSorted(col)\"\n [class.is-resizable]=\"isResizable(col)\"\n [class.is-resizing]=\"isColumnResizing(col.field)\"\n (click)=\"onHeaderClick(col)\"\n role=\"columnheader\"\n [attr.aria-sort]=\"getAriaSort(col)\"\n >\n <div class=\"header-content-wrapper\">\n <span class=\"header-title\" [title]=\"col.header\">{{ col.header }}</span>\n @if (isSortable(col) || isFilterable(col)) {\n <div class=\"header-tools\">\n @if (isSortable(col)) {\n <button\n talosButton\n variant=\"ghost\"\n size=\"xs\"\n [iconOnly]=\"true\"\n type=\"button\"\n class=\"header-sort-btn\"\n [class.is-sorted]=\"isSorted(col)\"\n (click)=\"$event.stopPropagation(); onHeaderClick(col)\"\n [attr.aria-label]=\"'Sort by ' + col.header\"\n [title]=\"'Sort by ' + col.header\"\n >\n @if (getSortDirection(col) === 'asc') {\n <ng-container *ngComponentOutlet=\"arrowUpIcon\" />\n } @else if (getSortDirection(col) === 'desc') {\n <ng-container *ngComponentOutlet=\"arrowDownIcon\" />\n } @else {\n <ng-container *ngComponentOutlet=\"arrowUpDownIcon\" />\n }\n </button>\n }\n @if (isFilterable(col)) {\n <div\n class=\"talos-grid-filter-anchor\"\n [class]=\"'filter-anchor-' + col.field\"\n cdkOverlayOrigin\n #filterOrigin=\"cdkOverlayOrigin\"\n (click)=\"$event.stopPropagation()\"\n >\n <button\n talosButton\n variant=\"ghost\"\n size=\"xs\"\n [iconOnly]=\"true\"\n type=\"button\"\n class=\"header-filter-btn\"\n [class.is-active]=\"hasFilter(col.field)\"\n [class.is-open]=\"isFilterDialogOpen(col.field)\"\n (click)=\"toggleFilterDialog(col.field, $event)\"\n [attr.aria-label]=\"'Filter ' + col.header\"\n title=\"Filter\"\n >\n <ng-container *ngComponentOutlet=\"filterIcon\" />\n </button>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"filterOrigin\"\n [cdkConnectedOverlayOpen]=\"isFilterDialogOpen(col.field)\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"onOverlayOutsideClick($event, col.field)\"\n >\n <talos-grid-filter-dialog\n [column]=\"col\"\n [distinctValues]=\"activeColumnDistinctValues()\"\n [currentFilter]=\"getFilter(col.field)\"\n [align]=\"col.align === 'right' ? 'right' : 'left'\"\n (filterApplied)=\"onFilterApplied($event)\"\n (filterCleared)=\"onFilterCleared(col.field)\"\n (closed)=\"closeFilterDialog()\"\n />\n </ng-template>\n </div>\n }\n </div>\n }\n </div>\n @if (isResizable(col)) {\n <div\n class=\"talos-grid-resize-handle\"\n [class.is-resizing]=\"isColumnResizing(col.field)\"\n (mousedown)=\"onResizeStart(col, $event, thEl)\"\n (touchstart)=\"onResizeStart(col, $event, thEl)\"\n (dblclick)=\"onResizeDoubleClick(col, $event)\"\n (click)=\"$event.stopPropagation()\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n tabindex=\"0\"\n [attr.aria-label]=\"'Resize ' + col.header + ' column'\"\n (keydown)=\"onResizeKeydown(col, $event, thEl)\"\n ></div>\n }\n </th>\n }\n </tr>\n </thead>\n\n <!-- Table Body with TrackBy for Optimal Refresh Performance -->\n <tbody>\n @for (row of pagedData(); track trackByRow($index, row)) {\n <tr\n [class.is-hoverable]=\"hoverable()\"\n [class.is-clickable]=\"hasRowClickListeners\"\n (click)=\"onRowClick(row, $index)\"\n role=\"row\"\n >\n @for (col of columns(); track col.field) {\n <td\n [class.align-left]=\"!col.align || col.align === 'left'\"\n [class.align-center]=\"col.align === 'center'\"\n [class.align-right]=\"col.align === 'right'\"\n role=\"gridcell\"\n >\n @if (col.cellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n col.cellTemplate;\n context: {\n $implicit: getCellValue(row, col),\n row: row,\n index: $index,\n column: col,\n }\n \"\n />\n } @else if (col.type === 'status') {\n <talos-grid-status-cell\n [row]=\"row\"\n [column]=\"col\"\n [rawValue]=\"getCellValue(row, col)\"\n />\n } @else if (col.type === 'actions' && col.actionsConfig) {\n <talos-grid-actions-cell\n [row]=\"row\"\n [rowIndex]=\"$index\"\n [actions]=\"col.actionsConfig\"\n (actionClick)=\"actionClick.emit($event)\"\n />\n } @else {\n {{ row | talosGridCellFormat: col }}\n }\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n\n <!-- Empty State -->\n @if (pagedData().length === 0) {\n <div class=\"talos-data-grid-empty\">\n <div class=\"empty-icon\">\n <ng-container *ngComponentOutlet=\"inboxIcon\" />\n </div>\n <div class=\"empty-text\">\n @if (hasActiveFilters()) {\n <span>No results matching the active filters.</span>\n } @else {\n <span>{{ emptyMessage() }}</span>\n }\n </div>\n @if (hasActiveFilters()) {\n <button talosButton variant=\"outline\" size=\"sm\" (click)=\"clearAllFilters()\">\n Clear Filters\n </button>\n }\n </div>\n }\n </div>\n\n <!-- Pagination Bar -->\n @if (pagination()) {\n <div class=\"talos-data-grid-pagination\">\n <div class=\"pagination-left\">\n <span class=\"pagination-info\">\n Showing {{ startRecord() }} to {{ endRecord() }} of {{ totalCount() }} entries\n </span>\n\n @if (pageSizeOptions().length > 1) {\n <div class=\"pagination-size-selector\">\n <span>Rows per page:</span>\n <select\n [value]=\"internalPageSize()\"\n (change)=\"onPageSizeChange($event)\"\n aria-label=\"Select page size\"\n >\n @for (size of pageSizeOptions(); track size) {\n <option [value]=\"size\">{{ size }}</option>\n }\n </select>\n </div>\n }\n </div>\n\n <div class=\"pagination-right\">\n <button\n talosButton\n variant=\"ghost\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [disabled]=\"internalPageIndex() <= 0\"\n (click)=\"setPage(0)\"\n title=\"First page\"\n aria-label=\"First page\"\n >\n <ng-container *ngComponentOutlet=\"chevronsLeftIcon\" />\n </button>\n\n <button\n talosButton\n variant=\"ghost\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [disabled]=\"internalPageIndex() <= 0\"\n (click)=\"setPage(internalPageIndex() - 1)\"\n title=\"Previous page\"\n aria-label=\"Previous page\"\n >\n <ng-container *ngComponentOutlet=\"chevronLeftIcon\" />\n </button>\n\n <span class=\"page-indicator\">\n Page {{ internalPageIndex() + 1 }} of {{ totalPages() }}\n </span>\n\n <button\n talosButton\n variant=\"ghost\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [disabled]=\"internalPageIndex() >= totalPages() - 1\"\n (click)=\"setPage(internalPageIndex() + 1)\"\n title=\"Next page\"\n aria-label=\"Next page\"\n >\n <ng-container *ngComponentOutlet=\"chevronRightIcon\" />\n </button>\n\n <button\n talosButton\n variant=\"ghost\"\n size=\"sm\"\n [iconOnly]=\"true\"\n [disabled]=\"internalPageIndex() >= totalPages() - 1\"\n (click)=\"setPage(totalPages() - 1)\"\n title=\"Last page\"\n aria-label=\"Last page\"\n >\n <ng-container *ngComponentOutlet=\"chevronsRightIcon\" />\n </button>\n </div>\n </div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { TalosDataGridComponent } from './data-grid.component';\nimport { TalosGridStatusCellComponent } from './data-grid-status-cell.component';\nimport { TalosGridActionsCellComponent } from './data-grid-actions-cell.component';\nimport { TalosGridFilterDialogComponent } from './data-grid-filter-dialog.component';\nimport { TalosGridCellFormatPipe } from './data-grid-format.pipe';\n\n@NgModule({\n imports: [\n TalosDataGridComponent,\n TalosGridStatusCellComponent,\n TalosGridActionsCellComponent,\n TalosGridFilterDialogComponent,\n TalosGridCellFormatPipe,\n ],\n exports: [\n TalosDataGridComponent,\n TalosGridStatusCellComponent,\n TalosGridActionsCellComponent,\n TalosGridFilterDialogComponent,\n TalosGridCellFormatPipe,\n ],\n})\nexport class TalosDataGridModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}