@progress/kendo-angular-grid 21.4.1 → 22.0.0

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 (354) hide show
  1. package/column-menu/column-menu-item-base.d.ts +1 -1
  2. package/columns/column-base.d.ts +1 -1
  3. package/common/toolbar-tool-base.directive.d.ts +1 -1
  4. package/editing/toolbar-editing-tool-base.directive.d.ts +1 -1
  5. package/editing-directives/editing-directive-base.d.ts +1 -1
  6. package/editing-directives/row-editing-directive-base.d.ts +1 -1
  7. package/fesm2022/progress-kendo-angular-grid.mjs +666 -666
  8. package/filtering/base-filter-cell.component.d.ts +1 -1
  9. package/filtering/boolean-filter.component.d.ts +1 -1
  10. package/filtering/date-filter.component.d.ts +1 -1
  11. package/filtering/filter-host.directive.d.ts +1 -1
  12. package/filtering/filter-input-wrapper.component.d.ts +1 -1
  13. package/filtering/numeric-filter.component.d.ts +1 -1
  14. package/filtering/operators/filter-operator.base.d.ts +1 -1
  15. package/filtering/string-filter.component.d.ts +1 -1
  16. package/localization/messages.d.ts +1 -1
  17. package/package.json +28 -36
  18. package/schematics/ngAdd/index.js +7 -7
  19. package/selection/selection-default.d.ts +1 -1
  20. package/esm2022/adaptiveness/adaptive-mode.mjs +0 -5
  21. package/esm2022/adaptiveness/adaptive-renderer.component.mjs +0 -1270
  22. package/esm2022/aggregates/aggregate-types.mjs +0 -5
  23. package/esm2022/aggregates/selection-aggregate.service.mjs +0 -200
  24. package/esm2022/aggregates/status-bar-template.directive.mjs +0 -30
  25. package/esm2022/aggregates/status-bar.component.mjs +0 -70
  26. package/esm2022/column-menu/column-chooser-content.component.mjs +0 -318
  27. package/esm2022/column-menu/column-chooser.component.mjs +0 -230
  28. package/esm2022/column-menu/column-list-kb-nav.service.mjs +0 -40
  29. package/esm2022/column-menu/column-list.component.mjs +0 -478
  30. package/esm2022/column-menu/column-locked-change-event.mjs +0 -19
  31. package/esm2022/column-menu/column-menu-autosize-all.component.mjs +0 -89
  32. package/esm2022/column-menu/column-menu-autosize.component.mjs +0 -97
  33. package/esm2022/column-menu/column-menu-chooser.component.mjs +0 -151
  34. package/esm2022/column-menu/column-menu-container.component.mjs +0 -67
  35. package/esm2022/column-menu/column-menu-expandable-item.interface.mjs +0 -5
  36. package/esm2022/column-menu/column-menu-filter.component.mjs +0 -152
  37. package/esm2022/column-menu/column-menu-item-base.mjs +0 -44
  38. package/esm2022/column-menu/column-menu-item-content-template.directive.mjs +0 -45
  39. package/esm2022/column-menu/column-menu-item.component.mjs +0 -514
  40. package/esm2022/column-menu/column-menu-item.directive.mjs +0 -164
  41. package/esm2022/column-menu/column-menu-lock.component.mjs +0 -118
  42. package/esm2022/column-menu/column-menu-position.component.mjs +0 -196
  43. package/esm2022/column-menu/column-menu-settings.interface.mjs +0 -5
  44. package/esm2022/column-menu/column-menu-sort.component.mjs +0 -119
  45. package/esm2022/column-menu/column-menu-stick.component.mjs +0 -120
  46. package/esm2022/column-menu/column-menu-template.directive.mjs +0 -47
  47. package/esm2022/column-menu/column-menu.component.mjs +0 -839
  48. package/esm2022/column-menu/column-menu.service.mjs +0 -71
  49. package/esm2022/column-menu/column-sticky-change-event.mjs +0 -19
  50. package/esm2022/column-menu/column-visibility-change-event.mjs +0 -19
  51. package/esm2022/column-menu/utils.mjs +0 -52
  52. package/esm2022/column-resizing/column-handle.directive.mjs +0 -499
  53. package/esm2022/column-resizing/column-resize.interface.mjs +0 -5
  54. package/esm2022/column-resizing/column-resizing.service.mjs +0 -214
  55. package/esm2022/column-resizing/table.directive.mjs +0 -141
  56. package/esm2022/columns/cell-rowspan.mjs +0 -5
  57. package/esm2022/columns/checkbox-column.component.mjs +0 -106
  58. package/esm2022/columns/column-base.mjs +0 -432
  59. package/esm2022/columns/column-common.mjs +0 -73
  60. package/esm2022/columns/column-group.component.mjs +0 -135
  61. package/esm2022/columns/column-list.mjs +0 -94
  62. package/esm2022/columns/column.component.mjs +0 -198
  63. package/esm2022/columns/columns-container.mjs +0 -101
  64. package/esm2022/columns/command-column.component.mjs +0 -80
  65. package/esm2022/columns/reorder-column.component.mjs +0 -114
  66. package/esm2022/columns/sort-settings.mjs +0 -18
  67. package/esm2022/columns/span-column.component.mjs +0 -195
  68. package/esm2022/common/adaptiveness.service.mjs +0 -72
  69. package/esm2022/common/cell-click-event-args.interface.mjs +0 -5
  70. package/esm2022/common/clipboard-types.mjs +0 -5
  71. package/esm2022/common/clipboard.directive.mjs +0 -197
  72. package/esm2022/common/clipboard.service.mjs +0 -221
  73. package/esm2022/common/column-info.service.mjs +0 -92
  74. package/esm2022/common/create-form-group.mjs +0 -5
  75. package/esm2022/common/data-layout-mode.mjs +0 -5
  76. package/esm2022/common/default-track-by.mjs +0 -13
  77. package/esm2022/common/dom-events.service.mjs +0 -27
  78. package/esm2022/common/error-messages.mjs +0 -64
  79. package/esm2022/common/event-emitter.mjs +0 -39
  80. package/esm2022/common/fetch-data-callback.mjs +0 -5
  81. package/esm2022/common/field-datatype.mjs +0 -5
  82. package/esm2022/common/filter-descriptor-differ.mjs +0 -69
  83. package/esm2022/common/filter-operator.interface.mjs +0 -5
  84. package/esm2022/common/grid-col-size.mjs +0 -5
  85. package/esm2022/common/id.service.mjs +0 -59
  86. package/esm2022/common/pager-settings.mjs +0 -20
  87. package/esm2022/common/preventable-event.mjs +0 -24
  88. package/esm2022/common/provider.service.mjs +0 -42
  89. package/esm2022/common/remove-confirmation.mjs +0 -5
  90. package/esm2022/common/resizable-settings.mjs +0 -9
  91. package/esm2022/common/single-popup.service.mjs +0 -158
  92. package/esm2022/common/size-options.mjs +0 -5
  93. package/esm2022/common/sort.service.mjs +0 -14
  94. package/esm2022/common/toolbar-tool-base.directive.mjs +0 -85
  95. package/esm2022/constants.mjs +0 -16
  96. package/esm2022/data/change-event-args.interface.mjs +0 -5
  97. package/esm2022/data/change-notification.service.mjs +0 -30
  98. package/esm2022/data/data-item.interface.mjs +0 -5
  99. package/esm2022/data/data-mapping.service.mjs +0 -136
  100. package/esm2022/data/data.collection.mjs +0 -87
  101. package/esm2022/data/data.iterators.mjs +0 -221
  102. package/esm2022/data/grid-item.interface.mjs +0 -5
  103. package/esm2022/data/group-footer-item.interface.mjs +0 -5
  104. package/esm2022/data/group-item.interface.mjs +0 -5
  105. package/esm2022/databinding.directive.mjs +0 -233
  106. package/esm2022/directives.mjs +0 -504
  107. package/esm2022/dragdrop/column-reorder-config.mjs +0 -5
  108. package/esm2022/dragdrop/column-reorder-event.mjs +0 -31
  109. package/esm2022/dragdrop/column-reorder.service.mjs +0 -20
  110. package/esm2022/dragdrop/common.mjs +0 -69
  111. package/esm2022/dragdrop/context-types.mjs +0 -5
  112. package/esm2022/dragdrop/drag-and-drop.service.mjs +0 -65
  113. package/esm2022/dragdrop/drag-hint.service.mjs +0 -137
  114. package/esm2022/dragdrop/draggable-column.directive.mjs +0 -137
  115. package/esm2022/dragdrop/drop-cue.service.mjs +0 -46
  116. package/esm2022/dragdrop/drop-target.directive.mjs +0 -71
  117. package/esm2022/editing/add-command-tool.directive.mjs +0 -59
  118. package/esm2022/editing/add-command.directive.mjs +0 -93
  119. package/esm2022/editing/add-event-args.interface.mjs +0 -5
  120. package/esm2022/editing/cancel-command-tool.directive.mjs +0 -64
  121. package/esm2022/editing/cancel-command.directive.mjs +0 -127
  122. package/esm2022/editing/cancel-event-args.interface.mjs +0 -5
  123. package/esm2022/editing/cell-close-event.mjs +0 -38
  124. package/esm2022/editing/edit-command-tool.directive.mjs +0 -60
  125. package/esm2022/editing/edit-command.directive.mjs +0 -124
  126. package/esm2022/editing/edit-event-args.interface.mjs +0 -5
  127. package/esm2022/editing/edit-row-options.interface.mjs +0 -5
  128. package/esm2022/editing/edit-template.directive.mjs +0 -43
  129. package/esm2022/editing/edit.service.mjs +0 -182
  130. package/esm2022/editing/form/dialog-form.component.mjs +0 -102
  131. package/esm2022/editing/form/form-formfield.component.mjs +0 -188
  132. package/esm2022/editing/form/form.component.mjs +0 -169
  133. package/esm2022/editing/form/index.mjs +0 -8
  134. package/esm2022/editing/form/models.mjs +0 -5
  135. package/esm2022/editing/local-data-changes.service.mjs +0 -18
  136. package/esm2022/editing/remove-command-tool.directive.mjs +0 -61
  137. package/esm2022/editing/remove-command.directive.mjs +0 -123
  138. package/esm2022/editing/remove-event-args.interface.mjs +0 -5
  139. package/esm2022/editing/save-command-tool.directive.mjs +0 -65
  140. package/esm2022/editing/save-command.directive.mjs +0 -126
  141. package/esm2022/editing/save-event-args.interface.mjs +0 -5
  142. package/esm2022/editing/toolbar-editing-tool-base.directive.mjs +0 -99
  143. package/esm2022/editing-directives/create-form-group-args.interface.mjs +0 -5
  144. package/esm2022/editing-directives/edit-service.interface.mjs +0 -5
  145. package/esm2022/editing-directives/editing-directive-base.mjs +0 -167
  146. package/esm2022/editing-directives/external-editing.directive.mjs +0 -151
  147. package/esm2022/editing-directives/in-cell-editing.directive.mjs +0 -97
  148. package/esm2022/editing-directives/local-edit.service.mjs +0 -64
  149. package/esm2022/editing-directives/local-row-edit.service.mjs +0 -13
  150. package/esm2022/editing-directives/reactive-editing.directive.mjs +0 -60
  151. package/esm2022/editing-directives/row-editing-directive-base.mjs +0 -53
  152. package/esm2022/editing-directives/template-editing.directive.mjs +0 -72
  153. package/esm2022/editing-directives/utils.mjs +0 -18
  154. package/esm2022/excel/excel-command-tool.directive.mjs +0 -58
  155. package/esm2022/excel/excel-command.directive.mjs +0 -98
  156. package/esm2022/excel/excel-export-event.mjs +0 -18
  157. package/esm2022/excel/excel.component.mjs +0 -223
  158. package/esm2022/excel/excel.module.mjs +0 -45
  159. package/esm2022/excel/excel.service.mjs +0 -29
  160. package/esm2022/filtering/base-filter-cell.component.mjs +0 -174
  161. package/esm2022/filtering/boolean-filter.component.mjs +0 -83
  162. package/esm2022/filtering/cell/autocomplete-filter-cell.component.mjs +0 -114
  163. package/esm2022/filtering/cell/boolean-filter-cell.component.mjs +0 -113
  164. package/esm2022/filtering/cell/date-filter-cell.component.mjs +0 -141
  165. package/esm2022/filtering/cell/filter-cell-component.factory.mjs +0 -19
  166. package/esm2022/filtering/cell/filter-cell-host.directive.mjs +0 -33
  167. package/esm2022/filtering/cell/filter-cell-operators.component.mjs +0 -242
  168. package/esm2022/filtering/cell/filter-cell-template.directive.mjs +0 -46
  169. package/esm2022/filtering/cell/filter-cell-wrapper.component.mjs +0 -74
  170. package/esm2022/filtering/cell/filter-cell.component.mjs +0 -91
  171. package/esm2022/filtering/cell/numeric-filter-cell.component.mjs +0 -155
  172. package/esm2022/filtering/cell/string-filter-cell.component.mjs +0 -127
  173. package/esm2022/filtering/date-filter.component.mjs +0 -172
  174. package/esm2022/filtering/filter-component.interface.mjs +0 -5
  175. package/esm2022/filtering/filter-host.directive.mjs +0 -58
  176. package/esm2022/filtering/filter-input-wrapper.component.mjs +0 -119
  177. package/esm2022/filtering/filter-input.directive.mjs +0 -123
  178. package/esm2022/filtering/filter-row.component.mjs +0 -131
  179. package/esm2022/filtering/filter.service.mjs +0 -44
  180. package/esm2022/filtering/filterable.mjs +0 -16
  181. package/esm2022/filtering/menu/boolean-filter-menu.component.mjs +0 -167
  182. package/esm2022/filtering/menu/date-filter-menu-input.component.mjs +0 -179
  183. package/esm2022/filtering/menu/date-filter-menu.component.mjs +0 -212
  184. package/esm2022/filtering/menu/filter-menu-component.factory.mjs +0 -19
  185. package/esm2022/filtering/menu/filter-menu-container.component.mjs +0 -418
  186. package/esm2022/filtering/menu/filter-menu-dropdownlist.directive.mjs +0 -44
  187. package/esm2022/filtering/menu/filter-menu-host.directive.mjs +0 -46
  188. package/esm2022/filtering/menu/filter-menu-input-wrapper.component.mjs +0 -158
  189. package/esm2022/filtering/menu/filter-menu-template.directive.mjs +0 -48
  190. package/esm2022/filtering/menu/filter-menu.component.mjs +0 -221
  191. package/esm2022/filtering/menu/filter-radio-button.directive.mjs +0 -34
  192. package/esm2022/filtering/menu/menu-tabbing.service.mjs +0 -22
  193. package/esm2022/filtering/menu/numeric-filter-menu-input.component.mjs +0 -184
  194. package/esm2022/filtering/menu/numeric-filter-menu.component.mjs +0 -230
  195. package/esm2022/filtering/menu/string-filter-menu-input.component.mjs +0 -107
  196. package/esm2022/filtering/menu/string-filter-menu.component.mjs +0 -198
  197. package/esm2022/filtering/multicheckbox-filter.component.mjs +0 -324
  198. package/esm2022/filtering/numeric-filter.component.mjs +0 -145
  199. package/esm2022/filtering/operators/after-eq-filter-operator.component.mjs +0 -72
  200. package/esm2022/filtering/operators/after-filter-operator.component.mjs +0 -72
  201. package/esm2022/filtering/operators/before-eq-filter-operator.component.mjs +0 -72
  202. package/esm2022/filtering/operators/before-filter-operator.component.mjs +0 -72
  203. package/esm2022/filtering/operators/contains-filter-operator.component.mjs +0 -63
  204. package/esm2022/filtering/operators/ends-with-filter-operator.component.mjs +0 -63
  205. package/esm2022/filtering/operators/eq-filter-operator.component.mjs +0 -111
  206. package/esm2022/filtering/operators/filter-operator.base.mjs +0 -101
  207. package/esm2022/filtering/operators/gt-filter-operator.component.mjs +0 -63
  208. package/esm2022/filtering/operators/gte-filter-operator.component.mjs +0 -63
  209. package/esm2022/filtering/operators/is-empty-filter-operator.component.mjs +0 -63
  210. package/esm2022/filtering/operators/is-not-empty-filter-operator.component.mjs +0 -63
  211. package/esm2022/filtering/operators/is-not-null-filter-operator.component.mjs +0 -110
  212. package/esm2022/filtering/operators/isnull-filter-operator.component.mjs +0 -110
  213. package/esm2022/filtering/operators/lt-filter-operator.component.mjs +0 -63
  214. package/esm2022/filtering/operators/lte-filter-operator.component.mjs +0 -63
  215. package/esm2022/filtering/operators/neq-filter-operator.component.mjs +0 -110
  216. package/esm2022/filtering/operators/not-contains-filter-operator.component.mjs +0 -63
  217. package/esm2022/filtering/operators/starts-with-filter-operator.component.mjs +0 -63
  218. package/esm2022/filtering/string-filter.component.mjs +0 -90
  219. package/esm2022/grid.component.mjs +0 -4598
  220. package/esm2022/grid.module.mjs +0 -241
  221. package/esm2022/grouping/group-footer-template.directive.mjs +0 -44
  222. package/esm2022/grouping/group-header-column-template.directive.mjs +0 -45
  223. package/esm2022/grouping/group-header-template.directive.mjs +0 -46
  224. package/esm2022/grouping/group-header.component.mjs +0 -351
  225. package/esm2022/grouping/group-info.service.mjs +0 -43
  226. package/esm2022/grouping/group-key.interface.mjs +0 -5
  227. package/esm2022/grouping/group-panel.component.mjs +0 -487
  228. package/esm2022/grouping/group-rows-args.interface.mjs +0 -5
  229. package/esm2022/grouping/group-settings.mjs +0 -5
  230. package/esm2022/grouping/groups.service.mjs +0 -69
  231. package/esm2022/grouping/utils.mjs +0 -14
  232. package/esm2022/highlight/highlight-item.mjs +0 -5
  233. package/esm2022/highlight/highlight.directive.mjs +0 -132
  234. package/esm2022/index.mjs +0 -221
  235. package/esm2022/layout/browser-support.service.mjs +0 -94
  236. package/esm2022/layout/resizable.directive.mjs +0 -83
  237. package/esm2022/layout/resize.service.mjs +0 -29
  238. package/esm2022/layout/responsive.service.mjs +0 -34
  239. package/esm2022/layout/row-sync.mjs +0 -47
  240. package/esm2022/layout/sizing-options.service.mjs +0 -18
  241. package/esm2022/localization/custom-messages.component.mjs +0 -54
  242. package/esm2022/localization/localized-messages.directive.mjs +0 -39
  243. package/esm2022/localization/messages.mjs +0 -895
  244. package/esm2022/navigation/default-focusable-element.mjs +0 -50
  245. package/esm2022/navigation/focus-group.mjs +0 -73
  246. package/esm2022/navigation/focus-root.mjs +0 -50
  247. package/esm2022/navigation/focusable-element.interface.mjs +0 -5
  248. package/esm2022/navigation/focusable.directive.mjs +0 -150
  249. package/esm2022/navigation/grid-focusable-element.mjs +0 -28
  250. package/esm2022/navigation/item-map.mjs +0 -59
  251. package/esm2022/navigation/logical-cell.directive.mjs +0 -224
  252. package/esm2022/navigation/logical-cell.interface.mjs +0 -5
  253. package/esm2022/navigation/logical-row.directive.mjs +0 -131
  254. package/esm2022/navigation/logical-row.interface.mjs +0 -5
  255. package/esm2022/navigation/navigable-settings.mjs +0 -5
  256. package/esm2022/navigation/navigation-cell.interface.mjs +0 -5
  257. package/esm2022/navigation/navigation-change.interface.mjs +0 -5
  258. package/esm2022/navigation/navigation-cursor.mjs +0 -224
  259. package/esm2022/navigation/navigation-metadata.mjs +0 -35
  260. package/esm2022/navigation/navigation-mode.mjs +0 -5
  261. package/esm2022/navigation/navigation-model.mjs +0 -138
  262. package/esm2022/navigation/navigation-row.interface.mjs +0 -5
  263. package/esm2022/navigation/navigation.service.mjs +0 -998
  264. package/esm2022/navigation/toolbar-tool-name.mjs +0 -18
  265. package/esm2022/package-metadata.mjs +0 -16
  266. package/esm2022/pdf/export-element.mjs +0 -135
  267. package/esm2022/pdf/grid-query.mjs +0 -45
  268. package/esm2022/pdf/pdf-command-tool.directive.mjs +0 -60
  269. package/esm2022/pdf/pdf-command.directive.mjs +0 -98
  270. package/esm2022/pdf/pdf-export-event.mjs +0 -16
  271. package/esm2022/pdf/pdf-margin.component.mjs +0 -38
  272. package/esm2022/pdf/pdf-margin.interface.mjs +0 -5
  273. package/esm2022/pdf/pdf-template.directive.mjs +0 -43
  274. package/esm2022/pdf/pdf.component.mjs +0 -331
  275. package/esm2022/pdf/pdf.module.mjs +0 -47
  276. package/esm2022/pdf/pdf.service.mjs +0 -42
  277. package/esm2022/progress-kendo-angular-grid.mjs +0 -8
  278. package/esm2022/rendering/cell-loading.template.directive.mjs +0 -39
  279. package/esm2022/rendering/cell-template.directive.mjs +0 -44
  280. package/esm2022/rendering/cell.component.mjs +0 -717
  281. package/esm2022/rendering/common/cell-context.mjs +0 -13
  282. package/esm2022/rendering/common/col-group.component.mjs +0 -98
  283. package/esm2022/rendering/common/dom-queries.mjs +0 -162
  284. package/esm2022/rendering/common/field-accessor.pipe.mjs +0 -48
  285. package/esm2022/rendering/common/format.pipe.mjs +0 -37
  286. package/esm2022/rendering/common/loading.component.mjs +0 -60
  287. package/esm2022/rendering/common/row-args.mjs +0 -5
  288. package/esm2022/rendering/common/row-class.mjs +0 -5
  289. package/esm2022/rendering/common/spacer.component.mjs +0 -62
  290. package/esm2022/rendering/constants.mjs +0 -20
  291. package/esm2022/rendering/details/detail-collapse-event.mjs +0 -27
  292. package/esm2022/rendering/details/detail-expand-event.mjs +0 -27
  293. package/esm2022/rendering/details/detail-template.directive.mjs +0 -61
  294. package/esm2022/rendering/details/details.service.mjs +0 -56
  295. package/esm2022/rendering/details-expand.directive.mjs +0 -136
  296. package/esm2022/rendering/footer/footer-template.directive.mjs +0 -48
  297. package/esm2022/rendering/footer/footer.component.mjs +0 -266
  298. package/esm2022/rendering/grid-table.directive.mjs +0 -52
  299. package/esm2022/rendering/groups-expand.directive.mjs +0 -149
  300. package/esm2022/rendering/header/header-template.directive.mjs +0 -45
  301. package/esm2022/rendering/header/header.component.mjs +0 -1055
  302. package/esm2022/rendering/list.component.mjs +0 -1176
  303. package/esm2022/rendering/loading-template.directive.mjs +0 -38
  304. package/esm2022/rendering/no-records-template.directive.mjs +0 -38
  305. package/esm2022/rendering/rowspan.service.mjs +0 -24
  306. package/esm2022/rendering/table-body.component.mjs +0 -1250
  307. package/esm2022/rendering/toolbar/toolbar-focusable.directive.mjs +0 -83
  308. package/esm2022/rendering/toolbar/toolbar-navigation.service.mjs +0 -58
  309. package/esm2022/rendering/toolbar/toolbar-position.mjs +0 -5
  310. package/esm2022/rendering/toolbar/toolbar-template.directive.mjs +0 -55
  311. package/esm2022/rendering/toolbar/toolbar.component.mjs +0 -159
  312. package/esm2022/rendering/toolbar/tools/ai-assistant/ai-assistant.component.mjs +0 -272
  313. package/esm2022/rendering/toolbar/tools/ai-assistant/ai-request-response.service.mjs +0 -624
  314. package/esm2022/rendering/toolbar/tools/ai-assistant/ai-tool.directive.mjs +0 -273
  315. package/esm2022/rendering/toolbar/tools/ai-assistant/models.mjs +0 -43
  316. package/esm2022/rendering/toolbar/tools/ai-assistant/utils.mjs +0 -92
  317. package/esm2022/rendering/toolbar/tools/column-chooser-tool.directive.mjs +0 -238
  318. package/esm2022/rendering/toolbar/tools/filter-command-tool.directive.mjs +0 -219
  319. package/esm2022/rendering/toolbar/tools/filter-tool-wrapper.component.mjs +0 -151
  320. package/esm2022/rendering/toolbar/tools/filter-toolbar-tool.component.mjs +0 -223
  321. package/esm2022/rendering/toolbar/tools/group-command-tool.directive.mjs +0 -208
  322. package/esm2022/rendering/toolbar/tools/group-toolbar-tool.component.mjs +0 -451
  323. package/esm2022/rendering/toolbar/tools/select-all-command-tool.directive.mjs +0 -93
  324. package/esm2022/rendering/toolbar/tools/sort-command-tool.directive.mjs +0 -222
  325. package/esm2022/rendering/toolbar/tools/sort-toolbar-tool.component.mjs +0 -245
  326. package/esm2022/row-reordering/drag-handle-template.directive.mjs +0 -44
  327. package/esm2022/row-reordering/drag-hint-template.directive.mjs +0 -42
  328. package/esm2022/row-reordering/row-reorder.service.mjs +0 -280
  329. package/esm2022/row-reordering/types.mjs +0 -5
  330. package/esm2022/row-reordering/utils.mjs +0 -88
  331. package/esm2022/scrolling/content-scroll-event.mjs +0 -5
  332. package/esm2022/scrolling/row-height.service.mjs +0 -55
  333. package/esm2022/scrolling/scroll-bottom-event.mjs +0 -5
  334. package/esm2022/scrolling/scroll-request.service.mjs +0 -24
  335. package/esm2022/scrolling/scroll-sync.service.mjs +0 -80
  336. package/esm2022/scrolling/scroller.service.mjs +0 -254
  337. package/esm2022/scrolling/scrollmode.mjs +0 -5
  338. package/esm2022/scrolling/suspend.service.mjs +0 -17
  339. package/esm2022/selection/cell-selection.service.mjs +0 -349
  340. package/esm2022/selection/marquee.directive.mjs +0 -188
  341. package/esm2022/selection/pair-set.mjs +0 -158
  342. package/esm2022/selection/selectall-checkbox.directive.mjs +0 -143
  343. package/esm2022/selection/selection-checkbox.directive.mjs +0 -132
  344. package/esm2022/selection/selection-default.mjs +0 -208
  345. package/esm2022/selection/selection.directive.mjs +0 -53
  346. package/esm2022/selection/selection.service.mjs +0 -466
  347. package/esm2022/selection/types.mjs +0 -5
  348. package/esm2022/state-management/grid-state.models.mjs +0 -26
  349. package/esm2022/state-management/redo-command-tool.mjs +0 -74
  350. package/esm2022/state-management/undo-command-tool.mjs +0 -74
  351. package/esm2022/state-management/undo-redo.directive.mjs +0 -249
  352. package/esm2022/state-management/undo-redo.service.mjs +0 -21
  353. package/esm2022/state-management/undo-redo.stack.mjs +0 -238
  354. package/esm2022/utils.mjs +0 -216
@@ -1,4598 +0,0 @@
1
- /**-----------------------------------------------------------------------------------------
2
- * Copyright © 2026 Progress Software Corporation. All rights reserved.
3
- * Licensed under commercial license. See LICENSE.md in the project root for more information
4
- *-------------------------------------------------------------------------------------------*/
5
- import { Component, ContentChildren, ElementRef, EventEmitter, HostBinding, Input, Output, Renderer2, QueryList, ViewChild, isDevMode, NgZone, ViewChildren, ChangeDetectorRef, ViewEncapsulation, ViewContainerRef } from '@angular/core';
6
- import { ZoneAwareEventEmitter } from './common/event-emitter';
7
- import { FormControl, FormGroup } from '@angular/forms';
8
- import { merge } from 'rxjs';
9
- import { map, tap, take, filter, switchMap, takeUntil, flatMap } from 'rxjs/operators';
10
- import { validatePackage } from '@progress/kendo-licensing';
11
- import { packageMetadata } from './package-metadata';
12
- import { GridAIRequestResponseService } from './rendering/toolbar/tools/ai-assistant/ai-request-response.service';
13
- import { ColumnComponent, isColumnComponent } from './columns/column.component';
14
- import { isSpanColumnComponent } from './columns/span-column.component';
15
- import { isColumnGroupComponent, ColumnGroupComponent } from './columns/column-group.component';
16
- import { DetailTemplateDirective } from './rendering/details/detail-template.directive';
17
- import { normalize } from './common/pager-settings';
18
- import { isArray, anyChanged, isChanged, isPresent, isUniversal, observe, isTruthy, createPromise, hasObservers, roundDown, recursiveColumnsFlatMap } from './utils';
19
- import { BrowserSupportService } from './layout/browser-support.service';
20
- import { DataResultIterator, DataCollection } from './data/data.collection';
21
- import { SelectionService } from './selection/selection.service';
22
- import { Selection } from "./selection/selection-default";
23
- import { EditService } from './editing/edit.service';
24
- import { DetailsService } from './rendering/details/details.service';
25
- import { GroupsService } from './grouping/groups.service';
26
- import { ColumnsContainer } from './columns/columns-container';
27
- import { GroupInfoService } from './grouping/group-info.service';
28
- import { ChangeNotificationService } from './data/change-notification.service';
29
- import { NoRecordsTemplateDirective } from './rendering/no-records-template.directive';
30
- import { ColumnBase } from './columns/column-base';
31
- import { syncRowsHeight } from './layout/row-sync';
32
- import { CELL_CONTEXT, EMPTY_CELL_CONTEXT } from './rendering/common/cell-context';
33
- import { L10N_PREFIX, LocalizationService } from '@progress/kendo-angular-l10n';
34
- import { FilterService } from './filtering/filter.service';
35
- import { PDFService } from './pdf/pdf.service';
36
- import { PDFExportEvent } from './pdf/pdf-export-event';
37
- import { SuspendService } from './scrolling/suspend.service';
38
- import { ResponsiveService } from "./layout/responsive.service";
39
- import { ExcelService } from './excel/excel.service';
40
- import { ColumnList } from './columns/column-list';
41
- import { ToolbarTemplateDirective } from "./rendering/toolbar/toolbar-template.directive";
42
- import { expandColumns, expandColumnsWithSpan, isValidFieldName } from "./columns/column-common";
43
- import { ScrollSyncService } from "./scrolling/scroll-sync.service";
44
- import { ResizeService } from "./layout/resize.service";
45
- import { closest, matchesClasses, matchesNodeName } from './rendering/common/dom-queries';
46
- import { LocalDataChangesService } from './editing/local-data-changes.service';
47
- import { DomEventsService } from './common/dom-events.service';
48
- import { ColumnResizingService } from "./column-resizing/column-resizing.service";
49
- import { hasFilterRow } from './filtering/filterable';
50
- import { SinglePopupService } from './common/single-popup.service';
51
- import { DragAndDropService } from './dragdrop/drag-and-drop.service';
52
- import { DragHintService } from './dragdrop/drag-hint.service';
53
- import { DropCueService } from './dragdrop/drop-cue.service';
54
- import { ColumnReorderService } from './dragdrop/column-reorder.service';
55
- import { ColumnReorderEvent } from './dragdrop/column-reorder-event';
56
- import { FocusRoot } from './navigation/focus-root';
57
- import { NavigationService } from './navigation/navigation.service';
58
- import { NavigationMetadata } from './navigation/navigation-metadata';
59
- import { IdService } from './common/id.service';
60
- import { ColumnInfoService } from "./common/column-info.service";
61
- import { ScrollRequestService } from './scrolling/scroll-request.service';
62
- import { SortService } from './common/sort.service';
63
- import { ColumnMenuTemplateDirective } from './column-menu/column-menu-template.directive';
64
- import { ColumnVisibilityChangeEvent } from './column-menu/column-visibility-change-event';
65
- import { ColumnLockedChangeEvent } from './column-menu/column-locked-change-event';
66
- import { GROUP_CELL_WIDTH } from './constants';
67
- import { sortColumns } from './columns/column-common';
68
- import { defaultTrackBy } from './common/default-track-by';
69
- import { CellSelectionService } from './selection/cell-selection.service';
70
- import { ColumnStickyChangeEvent } from './column-menu/column-sticky-change-event';
71
- import { CellLoadingTemplateDirective } from './rendering/cell-loading.template.directive';
72
- import { ContextService } from './common/provider.service';
73
- import { LoadingTemplateDirective } from './rendering/loading-template.directive';
74
- import { SizingOptionsService } from './layout/sizing-options.service';
75
- import { DraggableDirective, ResizeSensorComponent, WatermarkOverlayComponent, guid, shouldShowValidationUI, getLicenseMessage } from '@progress/kendo-angular-common';
76
- import { DragTargetContainerDirective, DropTargetContainerDirective } from '@progress/kendo-angular-utils';
77
- import { RowReorderService } from './row-reordering/row-reorder.service';
78
- import { StatusBarTemplateDirective } from './aggregates/status-bar-template.directive';
79
- import { CellSelectionAggregateService } from './aggregates/selection-aggregate.service';
80
- import { ClipboardService } from './common/clipboard.service';
81
- import { ColumnConfigurationErrorMessages, GridConfigurationErrorMessages } from './common/error-messages';
82
- import { StatusBarComponent } from './aggregates/status-bar.component';
83
- import { LoadingComponent } from './rendering/common/loading.component';
84
- import { TableBodyComponent } from './rendering/table-body.component';
85
- import { FooterComponent } from './rendering/footer/footer.component';
86
- import { GridMarqueeDirective } from './selection/marquee.directive';
87
- import { ListComponent } from './rendering/list.component';
88
- import { ResizableContainerDirective } from './layout/resizable.directive';
89
- import { HeaderComponent } from './rendering/header/header.component';
90
- import { ColGroupComponent } from './rendering/common/col-group.component';
91
- import { GridTableDirective } from './rendering/grid-table.directive';
92
- import { TableDirective } from './column-resizing/table.directive';
93
- import { GroupPanelComponent } from './grouping/group-panel.component';
94
- import { NgTemplateOutlet } from '@angular/common';
95
- import { ToolbarComponent as GridToolbarComponent } from './rendering/toolbar/toolbar.component';
96
- import { LocalizedMessagesDirective } from './localization/localized-messages.directive';
97
- import { IconWrapperComponent } from '@progress/kendo-angular-icons';
98
- import { PagerTemplateDirective, PagerContextService, PagerNavigationService, KENDO_PAGER } from '@progress/kendo-angular-pager';
99
- import { RowspanService } from './rendering/rowspan.service';
100
- import { AdaptiveGridService } from './common/adaptiveness.service';
101
- import { AdaptiveRendererComponent } from './adaptiveness/adaptive-renderer.component';
102
- import { ColumnMenuService } from './column-menu/column-menu.service';
103
- import { MenuTabbingService } from './filtering/menu/menu-tabbing.service';
104
- import { DataMappingService } from './data/data-mapping.service';
105
- import * as i0 from "@angular/core";
106
- import * as i1 from "./layout/browser-support.service";
107
- import * as i2 from "./selection/selection.service";
108
- import * as i3 from "./selection/cell-selection.service";
109
- import * as i4 from "./grouping/group-info.service";
110
- import * as i5 from "./grouping/groups.service";
111
- import * as i6 from "./data/change-notification.service";
112
- import * as i7 from "./rendering/details/details.service";
113
- import * as i8 from "./editing/edit.service";
114
- import * as i9 from "./filtering/filter.service";
115
- import * as i10 from "./pdf/pdf.service";
116
- import * as i11 from "./layout/responsive.service";
117
- import * as i12 from "./excel/excel.service";
118
- import * as i13 from "./scrolling/scroll-sync.service";
119
- import * as i14 from "./common/dom-events.service";
120
- import * as i15 from "./column-resizing/column-resizing.service";
121
- import * as i16 from "./dragdrop/column-reorder.service";
122
- import * as i17 from "./common/column-info.service";
123
- import * as i18 from "./navigation/navigation.service";
124
- import * as i19 from "./common/sort.service";
125
- import * as i20 from "./scrolling/scroll-request.service";
126
- import * as i21 from "@progress/kendo-angular-l10n";
127
- import * as i22 from "./common/provider.service";
128
- import * as i23 from "./layout/sizing-options.service";
129
- import * as i24 from "./common/adaptiveness.service";
130
- import * as i25 from "./row-reordering/row-reorder.service";
131
- import * as i26 from "./data/data-mapping.service";
132
- import * as i27 from "./rendering/toolbar/tools/ai-assistant/ai-request-response.service";
133
- import * as i28 from "./common/id.service";
134
- import * as i29 from "@progress/kendo-angular-pager";
135
- const createControl = (source) => (acc, key) => {
136
- acc[key] = new FormControl(source[key]);
137
- return acc;
138
- };
139
- const validateColumnsField = (columns) => expandColumns(columns.toArray())
140
- .filter(isColumnComponent)
141
- .filter(({ field }) => !isValidFieldName(field))
142
- .forEach(({ field }) => console.warn(ColumnConfigurationErrorMessages.fieldName(field)));
143
- const handleExpandCollapseGroupsService = (service, expandEmitter, collapseEmitter, map) => (service.changes.pipe(filter(({ group, emit }) => emit && isPresent(group)))
144
- .subscribe((x) => x.expand ? expandEmitter.emit(map(x)) : collapseEmitter.emit(map(x))));
145
- const handleExpandCollapseDetailsService = (service, expandEmitter, collapseEmitter, map) => (service.changes.pipe(filter(({ dataItem }) => isPresent(dataItem)))
146
- .subscribe((x) => x.expand ? expandEmitter.emit(map(x)) : collapseEmitter.emit(map(x))));
147
- const isInEditedCell = (element, gridElement, isStacked = false) => (closest(element, matchesClasses('k-grid-edit-cell')) || (isStacked && closest(element, matchesClasses('k-grid-stack-edit-cell')))) &&
148
- closest(element, matchesNodeName('kendo-grid')) === gridElement;
149
- const NOTIFY_DELAY = 500;
150
- /**
151
- * Represents the Kendo UI for Angular Data Grid component.
152
- *
153
- * Use the `kendo-grid` component to display and manage tabular data.
154
- *
155
- * @example
156
- * ```html
157
- * <kendo-grid [data]="gridData"></kendo-grid>
158
- * ```
159
- *
160
- * @remarks
161
- * Supported children components are:
162
- * {@link CheckboxColumnComponent},
163
- * {@link ColumnChooserComponent},
164
- * {@link ColumnComponent},
165
- * {@link ColumnGroupComponent},
166
- * {@link ColumnMenuAutoSizeAllColumnsComponent},
167
- * {@link ColumnMenuAutoSizeColumnComponent},
168
- * {@link ColumnMenuChooserComponent},
169
- * {@link ColumnMenuComponent},
170
- * {@link ColumnMenuFilterComponent},
171
- * {@link ColumnMenuItemComponent},
172
- * {@link ColumnMenuLockComponent},
173
- * {@link ColumnMenuPositionComponent},
174
- * {@link ColumnMenuSortComponent},
175
- * {@link ColumnMenuStickComponent},
176
- * {@link CommandColumnComponent},
177
- * {@link CustomMessagesComponent},
178
- * {@link ExcelComponent},
179
- * {@link GridSpacerComponent},
180
- * {@link PDFComponent},
181
- * {@link RowReorderColumnComponent},
182
- * {@link SpanColumnComponent},
183
- * {@link ToolBarComponent}.
184
- */
185
- export class GridComponent {
186
- supportService;
187
- selectionService;
188
- cellSelectionService;
189
- wrapper;
190
- groupInfoService;
191
- groupsService;
192
- changeNotification;
193
- detailsService;
194
- editService;
195
- filterService;
196
- pdfService;
197
- responsiveService;
198
- renderer;
199
- excelService;
200
- ngZone;
201
- scrollSyncService;
202
- domEvents;
203
- columnResizingService;
204
- changeDetectorRef;
205
- columnReorderService;
206
- columnInfoService;
207
- navigationService;
208
- sortService;
209
- scrollRequestService;
210
- localization;
211
- ctx;
212
- sizingService;
213
- adaptiveGridService;
214
- rowReorderService;
215
- dataMappingService;
216
- aiRequestResponseService;
217
- idService;
218
- /**
219
- * Sets the data of the Grid. If you provide an array, the Grid gets the total count automatically.
220
- * ([more information and example]({% slug binding_grid %})).
221
- */
222
- set data(value) {
223
- this._data = value;
224
- if (this.selectable && this.selectableSettings?.enabled && this.isVirtual) {
225
- this.blockArrowSelection = false;
226
- }
227
- if (this.notifyTimeout) {
228
- clearTimeout(this.notifyTimeout);
229
- this.notifyTimeout = null;
230
- }
231
- if (this.rowReorderable) {
232
- this.ngZone.runOutsideAngular(() => {
233
- this.notifyTimeout = setTimeout(() => {
234
- this.notifyReorderContainers();
235
- }, NOTIFY_DELAY);
236
- });
237
- }
238
- }
239
- get data() {
240
- return this._data;
241
- }
242
- get hintText() {
243
- return this.rowReorderService.getDefaultHintText(this.columnList, this.flatData);
244
- }
245
- /**
246
- * @hidden
247
- */
248
- get customHintTemplate() {
249
- if (this.rowReorderable) {
250
- const allColumns = this.columnList.toArray();
251
- const rowReorderColumn = allColumns.find(column => column.isRowReorderColumn);
252
- return rowReorderColumn.rowDragHintTemplateRef;
253
- }
254
- }
255
- /**
256
- * @hidden
257
- */
258
- get hintContext() {
259
- if (this.customHintTemplate) {
260
- const draggedRow = this.rowReorderService?.getDraggedRow(this.flatData);
261
- return {
262
- $implicit: draggedRow?.dataItem,
263
- rowIndex: draggedRow?.rowIndex
264
- };
265
- }
266
- }
267
- /**
268
- * Defines the page size used by the Grid pager.
269
- * Required for the [`paging`]({% slug paging_grid %}) feature.
270
- */
271
- pageSize;
272
- /**
273
- * Defines the height in pixels for the Grid when `scrollable` is set.
274
- * You can also set the height using `style.height` with units like `px`, `%`, `em`, or `rem`.
275
- */
276
- height;
277
- /**
278
- * Sets the `style.height` attribute of each Grid data or group header/footer row (`tr`) element in the DOM in pixels.
279
- * If some row cells have content that requires more space, the row automatically expands to fit the content.
280
- */
281
- rowHeight;
282
- /**
283
- * Enables or disables adaptive mode. Adaptive rendering is off by default.
284
- *
285
- * @default 'none'
286
- */
287
- adaptiveMode = 'none';
288
- /**
289
- * Sets the `style.height` attribute of each Grid detail row (`tr.k-detail-row`) element in the DOM in pixels.
290
- * If the detail row has content that requires more space, the row automatically expands to fit the content.
291
- */
292
- detailRowHeight;
293
- /**
294
- * Defines the number of records to skip in the pager.
295
- * Required for the [`paging`]({% slug paging_grid %}) feature.
296
- */
297
- get skip() {
298
- return this._skip;
299
- }
300
- set skip(value) {
301
- if (typeof value === 'number' && value >= 0) {
302
- this._skip = this.rowReorderService.skip = value;
303
- }
304
- }
305
- /**
306
- * Defines the scroll mode for the Grid.
307
- *
308
- * @default 'scrollable'
309
- */
310
- scrollable = 'scrollable';
311
- /**
312
- * Enables the selection feature of the Grid. The `selectable` property can be set to `true`, `false`, or an object with additional settings.
313
- * [See example](slug:grid_row_selection).
314
- *
315
- * @default false
316
- */
317
- selectable = false;
318
- /**
319
- * Sets the descriptors for sorting the data ([see example](slug:manual_sorting_grid)).
320
- */
321
- set sort(value) {
322
- if (isArray(value)) {
323
- this._sort = value;
324
- }
325
- }
326
- get sort() {
327
- return this._sort;
328
- }
329
- /**
330
- * Specifies the sizing for Grid elements like tables, buttons, and inputs.
331
- *
332
- * @default 'medium'
333
- */
334
- set size(size) {
335
- this._size = size;
336
- if (size === 'none') {
337
- this.wrapper.nativeElement.classList.remove('k-grid-sm', 'k-grid-md');
338
- }
339
- this.sizingService.changes.next(this.size);
340
- }
341
- get size() {
342
- return this._size;
343
- }
344
- /**
345
- * A function that defines how to track changes for the data rows.
346
- * By default, the Grid tracks changes by the index of the data item.
347
- * Edited rows are tracked by reference.
348
- * [See example](slug:track_changes_grid).
349
- */
350
- trackBy = defaultTrackBy;
351
- /**
352
- * Sets the filter descriptor for the data ([see examples](slug:manual_filtering_grid)).
353
- */
354
- filter;
355
- /**
356
- * Sets the descriptors for grouping the data ([see example](slug:manual_grouping_grid)).
357
- */
358
- set group(value) {
359
- if (isArray(value)) {
360
- this._group = value;
361
- }
362
- }
363
- get group() {
364
- return this._group;
365
- }
366
- /**
367
- * If `true`, renders only columns in the current viewport.
368
- *
369
- * @default false
370
- */
371
- virtualColumns = false;
372
- /**
373
- * @hidden
374
- */
375
- get showStatusBar() {
376
- return !!(this.selectable);
377
- }
378
- /**
379
- * @hidden
380
- */
381
- get showTopToolbar() {
382
- return this.toolbarTemplate && ['top', 'both'].indexOf(this.toolbarTemplate.position) > -1;
383
- }
384
- /**
385
- * @hidden
386
- */
387
- get showBottomToolbar() {
388
- return this.toolbarTemplate && ['bottom', 'both'].indexOf(this.toolbarTemplate.position) > -1;
389
- }
390
- /**
391
- * @hidden
392
- */
393
- get isLocked() {
394
- return (this.lockedLeafColumns.length > 0 && !this.isStacked);
395
- }
396
- /**
397
- * @hidden
398
- */
399
- get showTopPager() {
400
- const position = this.pageable.position;
401
- return this.pageable !== false && ['top', 'both'].indexOf(position) > -1;
402
- }
403
- /**
404
- * @hidden
405
- */
406
- get showBottomPager() {
407
- const position = this.pageable.position;
408
- return this.pageable !== false && position !== 'top';
409
- }
410
- /**
411
- * @hidden
412
- */
413
- get hasPager() {
414
- return this.showTopPager || this.showBottomPager;
415
- }
416
- /**
417
- * @hidden
418
- */
419
- get showGroupPanel() {
420
- const isGroupable = this.groupable && this.groupable.enabled !== false;
421
- const isGrouped = this.group?.length > 0;
422
- return this.isStacked ? isGroupable && isGrouped : isGroupable;
423
- }
424
- /**
425
- * @hidden
426
- */
427
- get groupableEmptyText() {
428
- return this.groupable.emptyText;
429
- }
430
- /**
431
- * @hidden
432
- */
433
- get marqueeSelection() {
434
- return this.selectionService.enableMarquee || this.cellSelectionService.enableMarquee;
435
- }
436
- /**
437
- * @hidden
438
- */
439
- get isAdaptiveModeEnabled() {
440
- return this.adaptiveMode === 'auto';
441
- }
442
- /**
443
- * @hidden
444
- *
445
- * The `isOpen` property is used to determine if a Grid Popup or ActionSheet is open.
446
- */
447
- get isOpen() {
448
- return isPresent(this.adaptiveGridService.popupRef) || this.isActionSheetExpanded;
449
- }
450
- /**
451
- * @hidden
452
- */
453
- get isActionSheetExpanded() {
454
- return Boolean(this.adaptiveRenderer?.actionSheet?.expanded);
455
- }
456
- /**
457
- * @hidden
458
- */
459
- gridData = () => { return this.flatData; };
460
- /**
461
- * Enables the [filtering](slug:filtering_grid) feature of the Grid for columns with a `field` option.
462
- *
463
- * @default false
464
- */
465
- filterable = false;
466
- /**
467
- * Enables [sorting]({% slug sorting_grid %}) feature of the Grid for columns with a `field` option.
468
- * @default false
469
- */
470
- sortable = false;
471
- /**
472
- * Configures the Grid pager ([see example](slug:paging_grid_settings)).
473
- * @default false
474
- */
475
- pageable = false;
476
- get normalizedPageableSettings() {
477
- return normalize(this.pageable);
478
- }
479
- /**
480
- * If `true`, allows grouping by dragging column headers ([see example]({% slug grouping_grid %})).
481
- *
482
- * @default false
483
- */
484
- groupable = false;
485
- /**
486
- * Determines if the Grid can be resized.
487
- *
488
- * @default false
489
- */
490
- gridResizable = false;
491
- /**
492
- * Enables row reordering feature of the Grid ([see example]({% slug reordering_rows_grid %})).
493
- *
494
- * @default false
495
- */
496
- set rowReorderable(value) {
497
- this._rowReorderable = value;
498
- if (value) {
499
- this.rowReorderSubscription = this.rowReorderService.rowReorder.subscribe(args => {
500
- this.ngZone.run(() => {
501
- this.rowReorder.emit(args);
502
- });
503
- });
504
- }
505
- else {
506
- this.rowReorderSubscription?.unsubscribe();
507
- }
508
- }
509
- get rowReorderable() {
510
- return this._rowReorderable;
511
- }
512
- /**
513
- * By default, navigation is enabled. To disable, set to `false`.
514
- * To enable navigation for specific sections, provide a [`GridNavigableSection`](slug:api_grid_gridnavigablesection).
515
- */
516
- set navigable(value) {
517
- if (typeof value === 'boolean') {
518
- this._navigable = value ? ['table', 'pager', 'toolbar'] : [];
519
- this.ctx.navigable = value;
520
- return;
521
- }
522
- else {
523
- this.ctx.navigable = value.includes('table');
524
- }
525
- this._navigable = value;
526
- }
527
- get navigable() {
528
- return this._navigable;
529
- }
530
- /**
531
- * If `true`, resizes columns during initialization to fit headers and content.
532
- * Columns with `autoSize` set to `false` are excluded.
533
- * [See example](slug:resizing_columns_grid).
534
- *
535
- * @default false
536
- */
537
- autoSize = false;
538
- /**
539
- * Sets a function to apply custom CSS classes to each data row ([see example](slug:styling_grid_rows)).
540
- */
541
- set rowClass(fn) {
542
- if (isDevMode() && typeof fn !== 'function') {
543
- throw new Error(GridConfigurationErrorMessages.functionType('rowClass', fn));
544
- }
545
- this._rowClass = fn;
546
- }
547
- get rowClass() {
548
- return this._rowClass;
549
- }
550
- /**
551
- * Sets a function to determine if a data row is sticky (always visible after scrolling).
552
- */
553
- set rowSticky(fn) {
554
- if (isDevMode() && isPresent(fn) && typeof fn !== 'function') {
555
- throw new Error(GridConfigurationErrorMessages.functionType('rowSticky', fn));
556
- }
557
- if (isPresent(fn)) {
558
- this._rowSticky = fn;
559
- }
560
- }
561
- get rowSticky() {
562
- return this._rowSticky;
563
- }
564
- /**
565
- * Sets a function to determine if a data row is selected ([see example]({% slug grid_selection_custom %}#toc-setting-the-selected-rows)).
566
- */
567
- set rowSelected(fn) {
568
- if (isDevMode() && typeof fn !== 'function') {
569
- throw new Error(GridConfigurationErrorMessages.functionType('rowSelected', fn));
570
- }
571
- this._rowSelected = fn;
572
- }
573
- get rowSelected() {
574
- return this._rowSelected;
575
- }
576
- /**
577
- * Sets a function to determine if a data row is selectable.
578
- */
579
- set isRowSelectable(fn) {
580
- if (isDevMode() && typeof fn !== 'function') {
581
- throw new Error(GridConfigurationErrorMessages.functionType('isRowSelectable', fn));
582
- }
583
- this._isRowSelectable = fn;
584
- }
585
- get isRowSelectable() {
586
- return this._isRowSelectable;
587
- }
588
- /**
589
- * Sets a function to determine if a data cell is selected.
590
- * The function returns an object with `selected` and `item` properties ([see example]({% slug grid_selection_custom %}#toc-setting-the-selected-cells)).
591
- */
592
- set cellSelected(fn) {
593
- if (isDevMode() && typeof fn !== 'function') {
594
- throw new Error(GridConfigurationErrorMessages.functionType('cellSelected', fn));
595
- }
596
- this._cellSelected = fn;
597
- }
598
- get cellSelected() {
599
- return this._cellSelected;
600
- }
601
- /**
602
- * Returns the currently focused cell (if any).
603
- */
604
- get activeCell() {
605
- return this.navigationService.activeCell;
606
- }
607
- /**
608
- * Returns the currently focused row (if any).
609
- */
610
- get activeRow() {
611
- return this.navigationService.activeRow;
612
- }
613
- /**
614
- * Returns the current Grid selection.
615
- *
616
- * @hidden
617
- */
618
- get selection() {
619
- return (this.selectable || this.selectionDirective) ?
620
- this.defaultSelection ? this.defaultSelection.stateToArray() : this.selectionDirective.stateToArray() :
621
- [];
622
- }
623
- /**
624
- * Gets the current `GridState`, including data operations and column state.
625
- * Use this to store and restore the Grid state.
626
- */
627
- get currentState() {
628
- return {
629
- filter: this.filter,
630
- group: this.group,
631
- sort: this.sort,
632
- skip: this.skip,
633
- take: this.pageSize,
634
- columnsState: this.columns.toArray().flatMap(recursiveColumnsFlatMap),
635
- currentData: structuredClone(this.data)
636
- };
637
- }
638
- /**
639
- * If `true`, allows resizing columns by dragging header cell edges ([see example]({% slug resizing_columns_grid %})).
640
- *
641
- * @default false
642
- */
643
- resizable = false;
644
- /**
645
- * If `true`, allows reordering columns by dragging header cells ([see example]({% slug reordering_columns_grid %})).
646
- *
647
- * @default false
648
- */
649
- reorderable = false;
650
- /**
651
- * If `true`, displays the Grid loading indicator ([see example]({% slug binding_grid %})).
652
- *
653
- * @default false
654
- */
655
- set loading(value) {
656
- this._loading = value;
657
- this.rowReorderable && this.notifyReorderContainers();
658
- }
659
- get loading() {
660
- return this._loading;
661
- }
662
- /**
663
- * If `true`, displays the column menu for columns ([see example]({% slug columnmenu_grid %})).
664
- *
665
- * @default false
666
- */
667
- columnMenu = false;
668
- /**
669
- * If `true`, hides the Grid header. The header is visible by default.
670
- * The header includes column headers and the [filter row](slug:filter_row).
671
- *
672
- * @default false
673
- */
674
- hideHeader = false;
675
- /**
676
- * Specifies if the currently inactive toolbar tools will be visible. Applicable when the toolbar is configured using the `<kendo-toolbar>` component. By default, such tools are hidden.
677
- *
678
- * @default false
679
- */
680
- showInactiveTools = false;
681
- /**
682
- * Sets a function to determine if a specific row is expanded.
683
- */
684
- set isDetailExpanded(callback) {
685
- this.detailsService.userCallback = callback;
686
- }
687
- get isDetailExpanded() {
688
- return this.detailsService.userCallback;
689
- }
690
- /**
691
- * Sets a function to determine if a specific group row is expanded.
692
- */
693
- set isGroupExpanded(callback) {
694
- this.groupsService.userCallback = callback;
695
- this.groupable = isPresent(callback);
696
- }
697
- get isGroupExpanded() {
698
- return this.groupsService.userCallback;
699
- }
700
- /**
701
- * Sets the Grid data layout display mode.
702
- *
703
- * @default 'columns'
704
- */
705
- dataLayoutMode = 'columns';
706
- /**
707
- * Fires when the Grid data is filtered through the UI and the filter descriptor changes.
708
- */
709
- filterChange = new EventEmitter();
710
- /**
711
- * Fires when the page is changed through the UI ([see example]({% slug paging_grid %})).
712
- */
713
- pageChange = new EventEmitter();
714
- /**
715
- * Fires when the Grid data is grouped through the UI and the group descriptors change ([see example]({% slug grouping_grid %})).
716
- */
717
- groupChange;
718
- /**
719
- * Fires when the Grid data is sorted through the UI and the sort descriptors change ([see example]({% slug sorting_grid %})).
720
- */
721
- sortChange = new EventEmitter();
722
- /**
723
- * Fires when the Grid selection changes through the UI.
724
- */
725
- selectionChange = new EventEmitter();
726
- /**
727
- * Fires when a row is reordered through the UI.
728
- */
729
- rowReorder = new EventEmitter();
730
- /**
731
- * Fires when the data state of the Grid is changed.
732
- */
733
- dataStateChange = new EventEmitter();
734
- /**
735
- * Fires when the data or columns state of the Grid is changed.
736
- */
737
- gridStateChange = new EventEmitter();
738
- /**
739
- * Fires when a group is expanded through the UI.
740
- */
741
- groupExpand = new EventEmitter();
742
- /**
743
- * Fires when a group is collapsed through the UI.
744
- */
745
- groupCollapse = new EventEmitter();
746
- /**
747
- * Fires when a detail row is expanded through the UI.
748
- */
749
- detailExpand = new EventEmitter();
750
- /**
751
- * Fires when a detail row is collapsed through the UI.
752
- */
753
- detailCollapse = new EventEmitter();
754
- /**
755
- * Fires when a row enters edit mode ([see example](slug:inline_editing_grid#editing-records-1)).
756
- */
757
- edit = new EventEmitter();
758
- /**
759
- * Fires when editing is canceled by clicking the **Cancel** command button ([see example]({% slug inline_editing_grid %}#toc-canceling-editing-1)).
760
- */
761
- cancel = new EventEmitter();
762
- /**
763
- * Fires when a row is saved by clicking the **Save** command button ([see example]({% slug inline_editing_grid %}#toc-saving-records-1)).
764
- */
765
- save = new EventEmitter();
766
- /**
767
- * Fires when a row is removed by clicking the **Remove** command button ([see example]({% slug inline_editing_grid %}#toc-removing-records-1)).
768
- */
769
- remove = new EventEmitter();
770
- /**
771
- * Fires when a new row is added by clicking the **Add** command button ([see example]({% slug inline_editing_grid %}#toc-adding-records-1)).
772
- */
773
- add = new EventEmitter();
774
- /**
775
- * Fires when a cell edit is closed ([see example](slug:editing_incell_grid)).
776
- */
777
- cellClose = new EventEmitter();
778
- /**
779
- * Fires when a cell is clicked ([see example](slug:editing_incell_grid)).
780
- */
781
- cellClick;
782
- /**
783
- * Fires when the PDF export command is triggered.
784
- */
785
- pdfExport = new EventEmitter();
786
- /**
787
- * Fires when the Excel export command is triggered.
788
- */
789
- excelExport = new EventEmitter();
790
- /**
791
- * Fires when columns are resized.
792
- */
793
- columnResize;
794
- /**
795
- * Fires when columns are reordered.
796
- */
797
- columnReorder = new EventEmitter();
798
- /**
799
- * Fires when column visibility changes.
800
- */
801
- columnVisibilityChange = new EventEmitter();
802
- /**
803
- * Fires when columns are locked or unlocked.
804
- */
805
- columnLockedChange = new EventEmitter();
806
- /**
807
- * Fires when columns are made sticky or unsticky.
808
- */
809
- columnStickyChange = new EventEmitter();
810
- /**
811
- * Fires when the last record is scrolled into view ([see example]({% slug scrollmmodes_grid %}#toc-endless-scrolling)).
812
- */
813
- scrollBottom = new EventEmitter();
814
- /**
815
- * Fires when the grid content is scrolled.
816
- * The event is triggered outside the Angular zone for performance. Enter the Angular zone if you make changes that require change detection.
817
- */
818
- contentScroll = new EventEmitter();
819
- /**
820
- * A query list of all declared columns.
821
- */
822
- columns = new QueryList();
823
- get dir() {
824
- return this.direction;
825
- }
826
- hostClass = true;
827
- get sizeSmallClass() {
828
- return this.size === 'small';
829
- }
830
- get sizeMediumClass() {
831
- return this.size === 'medium' || !this.size;
832
- }
833
- get stackedClass() {
834
- return this.dataLayoutMode === 'stacked';
835
- }
836
- get lockedClasses() {
837
- return this.lockedLeafColumns.length > 0 && !this.isStacked;
838
- }
839
- get virtualClasses() {
840
- return this.isVirtual;
841
- }
842
- get noScrollbarClass() {
843
- return this.scrollbarWidth === 0;
844
- }
845
- get isResizable() {
846
- return Boolean(this.gridResizable);
847
- }
848
- get minWidth() {
849
- return this.gridResizable.minWidth;
850
- }
851
- get maxWidth() {
852
- return this.gridResizable.maxWidth;
853
- }
854
- get minHeight() {
855
- return this.gridResizable.minHeight;
856
- }
857
- get maxHeight() {
858
- return this.gridResizable.maxHeight;
859
- }
860
- detailTemplateChildren;
861
- get detailTemplate() {
862
- if (this._customDetailTemplate) {
863
- return this._customDetailTemplate;
864
- }
865
- return this.detailTemplateChildren ? this.detailTemplateChildren.first : undefined;
866
- }
867
- set detailTemplate(detailTemplate) {
868
- this._customDetailTemplate = detailTemplate;
869
- }
870
- cellLoadingTemplateChildren;
871
- get cellLoadingTemplate() {
872
- if (this._cellLoadingTemplate) {
873
- return this._cellLoadingTemplate;
874
- }
875
- return this.cellLoadingTemplateChildren ? this.cellLoadingTemplateChildren.first : undefined;
876
- }
877
- set cellLoadingTemplate(cellLoadingTemplate) {
878
- this._cellLoadingTemplate = cellLoadingTemplate;
879
- }
880
- loadingTemplateChildren;
881
- get loadingTemplate() {
882
- if (this._loadingTemplate) {
883
- return this._loadingTemplate;
884
- }
885
- return this.loadingTemplateChildren ? this.loadingTemplateChildren.first : undefined;
886
- }
887
- set loadingTemplate(loadingTemplate) {
888
- this._loadingTemplate = loadingTemplate;
889
- }
890
- statusBarTemplateChildren;
891
- get statusBarTemplate() {
892
- if (this._statusBarTemplate) {
893
- return this._statusBarTemplate;
894
- }
895
- return this.statusBarTemplateChildren ? this.statusBarTemplateChildren.first : undefined;
896
- }
897
- set statusBarTemplate(statusBarTemplate) {
898
- this._statusBarTemplate = statusBarTemplate;
899
- }
900
- noRecordsTemplateChildren;
901
- get noRecordsTemplate() {
902
- if (this._customNoRecordsTemplate) {
903
- return this._customNoRecordsTemplate;
904
- }
905
- return this.noRecordsTemplateChildren ? this.noRecordsTemplateChildren.first : undefined;
906
- }
907
- set noRecordsTemplate(customNoRecordsTemplate) {
908
- this._customNoRecordsTemplate = customNoRecordsTemplate;
909
- }
910
- pagerTemplateChildren;
911
- get pagerTemplate() {
912
- if (this._customPagerTemplate) {
913
- return this._customPagerTemplate;
914
- }
915
- return this.pagerTemplateChildren ? this.pagerTemplateChildren.first : undefined;
916
- }
917
- set pagerTemplate(customPagerTemplate) {
918
- this._customPagerTemplate = customPagerTemplate;
919
- }
920
- toolbarTemplateChildren;
921
- get toolbarTemplate() {
922
- if (this._customToolbarTemplate) {
923
- return this._customToolbarTemplate;
924
- }
925
- return this.toolbarTemplateChildren ? this.toolbarTemplateChildren.first : undefined;
926
- }
927
- set toolbarTemplate(customToolbarTemplate) {
928
- this._customToolbarTemplate = customToolbarTemplate;
929
- }
930
- columnMenuTemplates;
931
- lockedHeader;
932
- header;
933
- footer = new QueryList();
934
- ariaRoot;
935
- dragTargetContainer;
936
- dropTargetContainer;
937
- dialogContainer;
938
- windowContainer;
939
- adaptiveRenderer;
940
- listComponent;
941
- get scrollbarWidth() {
942
- return this.supportService.scrollbarWidth;
943
- }
944
- get showPagerInput() {
945
- return this._showPagerInput;
946
- }
947
- set showPagerInput(value) {
948
- if (this._showPagerInput === value) {
949
- return;
950
- }
951
- this._showPagerInput = value;
952
- }
953
- get showPagerPageText() {
954
- return this._showPagerPageText;
955
- }
956
- set showPagerPageText(value) {
957
- if (!this.normalizedPageableSettings?.responsive) {
958
- this._showPagerPageText = true;
959
- }
960
- if (this._showPagerPageText === value) {
961
- return;
962
- }
963
- this._showPagerPageText = value;
964
- }
965
- get showPagerItemsText() {
966
- return this._showPagerItemsText;
967
- }
968
- set showPagerItemsText(value) {
969
- if (!this.normalizedPageableSettings?.responsive) {
970
- this._showPagerItemsText = true;
971
- }
972
- if (this._showPagerItemsText === value) {
973
- return;
974
- }
975
- this._showPagerItemsText = value;
976
- }
977
- get headerPadding() {
978
- if (isUniversal()) {
979
- return '';
980
- }
981
- const padding = Math.max(0, this.scrollbarWidth) + 'px';
982
- const right = this.rtl ? 0 : padding;
983
- const left = this.rtl ? padding : 0;
984
- return `0 ${right} 0 ${left}`;
985
- }
986
- columnMenuOptions;
987
- columnList;
988
- selectionDirective = false;
989
- ariaRootId = `k-${guid()}`;
990
- showLicenseWatermark = false;
991
- /**
992
- * @hidden
993
- */
994
- licenseMessage;
995
- columnsContainer = new ColumnsContainer(() => this.columnList.filterHierarchy(column => {
996
- if (!isUniversal()) {
997
- column.matchesMedia = this.matchesMedia(column);
998
- }
999
- return column.isVisible;
1000
- }));
1001
- view = new DataCollection(() => new DataResultIterator(this.data, this.skip, this.hasGroupFooters));
1002
- get hasGroupFooters() {
1003
- return this.columnsContainer.hasGroupFooter;
1004
- }
1005
- get showFooter() {
1006
- return this.columnsContainer.hasFooter;
1007
- }
1008
- get showGroupFooters() {
1009
- return this.groupable && this.groupable.showFooter;
1010
- }
1011
- get ariaRowCount() {
1012
- return this.totalColumnLevels + 1 + this.view.total + (hasFilterRow(this.filterable) ? 1 : 0);
1013
- }
1014
- get ariaColCount() {
1015
- return this.columnsContainer.leafColumnsToRender.length;
1016
- }
1017
- get navigation() {
1018
- return this.navigationService;
1019
- }
1020
- /**
1021
- * @hidden
1022
- */
1023
- get flatData() {
1024
- return isArray(this.data) ? this.data : this.data.data;
1025
- }
1026
- shouldGenerateColumns = true;
1027
- direction;
1028
- notifyTimeout = null;
1029
- _sort = new Array();
1030
- _group = new Array();
1031
- _skip = 0;
1032
- _data = [];
1033
- cachedWindowWidth = 0;
1034
- defaultSelection;
1035
- _rowSelected = null;
1036
- _isRowSelectable = null;
1037
- _cellSelected = null;
1038
- _customDetailTemplate;
1039
- _cellLoadingTemplate;
1040
- _loadingTemplate;
1041
- _statusBarTemplate;
1042
- _customNoRecordsTemplate;
1043
- _customPagerTemplate;
1044
- _customToolbarTemplate;
1045
- _rowReorderable = false;
1046
- leafViewportColumns;
1047
- viewportColumns;
1048
- _navigable = ['table', 'pager', 'toolbar'];
1049
- _size = 'medium';
1050
- _loading = false;
1051
- _showPagerInput = true;
1052
- _showPagerPageText = true;
1053
- _showPagerItemsText = true;
1054
- get isVirtual() {
1055
- return this.scrollable === 'virtual';
1056
- }
1057
- get isScrollable() {
1058
- return this.scrollable !== 'none';
1059
- }
1060
- /**
1061
- * @hidden
1062
- */
1063
- get isStacked() {
1064
- return typeof this.dataLayoutMode === 'string' ? this.dataLayoutMode !== 'columns' : this.dataLayoutMode.mode !== 'columns';
1065
- }
1066
- get visibleColumns() {
1067
- return this.columnsContainer.allColumns;
1068
- }
1069
- get lockedColumns() {
1070
- return this.columnsContainer.lockedColumns;
1071
- }
1072
- get nonLockedColumns() {
1073
- return this.columnsContainer.nonLockedColumns;
1074
- }
1075
- get lockedLeafColumns() {
1076
- return this.columnsContainer.lockedLeafColumns;
1077
- }
1078
- get stickyColumns() {
1079
- return this.columns.filter(column => column.sticky);
1080
- }
1081
- get nonLockedLeafColumns() {
1082
- return this.columnsContainer.nonLockedLeafColumns;
1083
- }
1084
- get leafColumns() {
1085
- return this.columnsContainer.leafColumns;
1086
- }
1087
- get totalColumnLevels() {
1088
- return this.columnsContainer.totalLevels;
1089
- }
1090
- get headerColumns() {
1091
- if (this.virtualColumns && !this.pdfService.exporting) {
1092
- return this.viewportColumns;
1093
- }
1094
- return this.nonLockedColumns;
1095
- }
1096
- get headerLeafColumns() {
1097
- if (this.virtualColumns && !this.pdfService.exporting) {
1098
- return this.leafViewportColumns;
1099
- }
1100
- return this.nonLockedLeafColumns;
1101
- }
1102
- get lockedWidth() {
1103
- if (this.isStacked) {
1104
- return 0;
1105
- }
1106
- const groupCellsWidth = this.group.length * GROUP_CELL_WIDTH;
1107
- return expandColumns(this.lockedLeafColumns.toArray()).reduce((prev, curr) => prev + (curr.width || 0), groupCellsWidth);
1108
- }
1109
- get nonLockedWidth() {
1110
- if (((!this.rtl && this.lockedLeafColumns.length) || this.virtualColumns) && !this.isStacked) {
1111
- return !this.virtualColumns ? this.columnsContainer.unlockedWidth :
1112
- this.leafViewportColumns.reduce((acc, column) => acc + (column.width || 0), 0);
1113
- }
1114
- return undefined;
1115
- }
1116
- get selectableSettings() {
1117
- if (this.selectionService) {
1118
- return this.selectionService.options;
1119
- }
1120
- return undefined;
1121
- }
1122
- get columnMenuTemplate() {
1123
- const template = this.columnMenuTemplates.first;
1124
- return template ? template.templateRef : null;
1125
- }
1126
- get totalCount() {
1127
- if (this.isVirtual || !isPresent(this.pageSize)) {
1128
- return this.view.total;
1129
- }
1130
- return this.pageSize;
1131
- }
1132
- /**
1133
- * @hidden
1134
- */
1135
- getDefaultSelectors(type) {
1136
- return this.rowReorderService.defaultSelectors(this.isStacked)[type];
1137
- }
1138
- /**
1139
- * @hidden
1140
- */
1141
- getHintSettings(type) {
1142
- return this.rowReorderService[type];
1143
- }
1144
- /**
1145
- * @hidden
1146
- */
1147
- blockArrowSelection = false;
1148
- undoRedoService;
1149
- rowsToRender;
1150
- selectionSubscription;
1151
- stateChangeSubscription;
1152
- groupExpandCollapseSubscription;
1153
- editServiceSubscription;
1154
- detailsServiceSubscription;
1155
- filterSubscription;
1156
- sortSubscription;
1157
- columnsChangeSubscription;
1158
- pdfSubscription;
1159
- excelSubscription;
1160
- columnsContainerChangeSubscription;
1161
- cellClickSubscription;
1162
- footerChangeSubscription;
1163
- columnResizingSubscription;
1164
- columnReorderSubscription;
1165
- detachElementEventHandlers;
1166
- localizationSubscription;
1167
- columnVisibilityChangeSubscription;
1168
- columnLockedChangeSubscription;
1169
- columnStickyChangeSubscription;
1170
- focusElementSubscription;
1171
- columnRangeChangeSubscription;
1172
- rowReorderSubscription;
1173
- rtl = false;
1174
- _rowSticky;
1175
- constructor(supportService, selectionService, cellSelectionService, wrapper, groupInfoService, groupsService, changeNotification, detailsService, editService, filterService, pdfService, responsiveService, renderer, excelService, ngZone, scrollSyncService, domEvents, columnResizingService, changeDetectorRef, columnReorderService, columnInfoService, navigationService, sortService, scrollRequestService, localization, ctx, sizingService, adaptiveGridService, rowReorderService, dataMappingService, aiRequestResponseService, idService) {
1176
- this.supportService = supportService;
1177
- this.selectionService = selectionService;
1178
- this.cellSelectionService = cellSelectionService;
1179
- this.wrapper = wrapper;
1180
- this.groupInfoService = groupInfoService;
1181
- this.groupsService = groupsService;
1182
- this.changeNotification = changeNotification;
1183
- this.detailsService = detailsService;
1184
- this.editService = editService;
1185
- this.filterService = filterService;
1186
- this.pdfService = pdfService;
1187
- this.responsiveService = responsiveService;
1188
- this.renderer = renderer;
1189
- this.excelService = excelService;
1190
- this.ngZone = ngZone;
1191
- this.scrollSyncService = scrollSyncService;
1192
- this.domEvents = domEvents;
1193
- this.columnResizingService = columnResizingService;
1194
- this.changeDetectorRef = changeDetectorRef;
1195
- this.columnReorderService = columnReorderService;
1196
- this.columnInfoService = columnInfoService;
1197
- this.navigationService = navigationService;
1198
- this.sortService = sortService;
1199
- this.scrollRequestService = scrollRequestService;
1200
- this.localization = localization;
1201
- this.ctx = ctx;
1202
- this.sizingService = sizingService;
1203
- this.adaptiveGridService = adaptiveGridService;
1204
- this.rowReorderService = rowReorderService;
1205
- this.dataMappingService = dataMappingService;
1206
- this.aiRequestResponseService = aiRequestResponseService;
1207
- this.idService = idService;
1208
- const isValid = validatePackage(packageMetadata);
1209
- this.licenseMessage = getLicenseMessage(packageMetadata);
1210
- this.showLicenseWatermark = shouldShowValidationUI(isValid);
1211
- this.ctx.grid = this;
1212
- this.ctx.navigable = typeof this.navigable === 'boolean' ? this.navigable : this.navigable.includes('table');
1213
- this.groupChange = new ZoneAwareEventEmitter(this.ngZone);
1214
- this.cellClick = new ZoneAwareEventEmitter(this.ngZone);
1215
- this.columnResize = new ZoneAwareEventEmitter(this.ngZone);
1216
- this.localizationSubscription = this.localization.changes.subscribe(({ rtl }) => {
1217
- this.rtl = rtl;
1218
- this.direction = this.rtl ? 'rtl' : 'ltr';
1219
- });
1220
- this.groupInfoService.registerColumnsContainer(() => this.columnList);
1221
- this.columnInfoService.init(this.columnsContainer, () => this.columnList);
1222
- this.columnVisibilityChangeSubscription = this.columnInfoService.visibilityChange.subscribe((changed) => {
1223
- this.columnVisibilityChange.emit(new ColumnVisibilityChangeEvent(changed));
1224
- });
1225
- this.columnLockedChangeSubscription = this.columnInfoService.lockedChange.subscribe((changed) => {
1226
- this.columnLockedChange.emit(new ColumnLockedChangeEvent(changed));
1227
- });
1228
- this.columnStickyChangeSubscription = this.columnInfoService.stickyChange.subscribe((changed) => {
1229
- this.columnStickyChange.emit(new ColumnStickyChangeEvent(changed));
1230
- });
1231
- this.groupExpandCollapseSubscription = handleExpandCollapseGroupsService(groupsService, this.groupExpand, this.groupCollapse, ({ group, groupIndex, parentGroup }) => ({ group, groupIndex, parentGroup }));
1232
- this.detailsServiceSubscription = handleExpandCollapseDetailsService(detailsService, this.detailExpand, this.detailCollapse, args => args);
1233
- this.filterSubscription = this.filterService.changes.subscribe(x => {
1234
- this.filterChange.emit(x);
1235
- });
1236
- this.sortSubscription = this.sortService.changes.subscribe(x => {
1237
- this.sortChange.emit(x);
1238
- });
1239
- this.attachStateChangesEmitter();
1240
- this.attachEditHandlers();
1241
- this.attachDomEventHandlers();
1242
- this.pdfSubscription = this.pdfService.exportClick.subscribe(this.emitPDFExportEvent.bind(this));
1243
- this.excelSubscription = this.excelService.exportClick.subscribe(this.saveAsExcel.bind(this));
1244
- this.columnsContainerChange();
1245
- this.handleColumnResize();
1246
- this.columnList = new ColumnList(this.columns);
1247
- this.columnReorderSubscription = this.columnReorderService
1248
- .changes.subscribe(this.reorder.bind(this));
1249
- this.columnRangeChangeSubscription = this.columnInfoService.columnRangeChange.subscribe(this.onColumnRangeChange.bind(this));
1250
- this.columnsContainer.isStacked = this.isStacked;
1251
- }
1252
- /**
1253
- * Expands the master row at the specified data row index ([see example]({% slug hierarchy_grid %})).
1254
- *
1255
- * This method is for backwards compatibility with legacy versions that track expanded state by row index.
1256
- * For new development, use the [`kendoGridDetailsExpandBy` directive]({% slug api_grid_expanddetailsdirective %})
1257
- * or provide an `isDetailExpanded` callback. See [Controlling the Expanded State]({% slug master_detail_expanded_state_grid %}) for examples.
1258
- *
1259
- * @param index The data row index of the master row.
1260
- */
1261
- expandRow(index) {
1262
- this.toggleDetailRowLegacy(index, true);
1263
- }
1264
- /**
1265
- * Collapses the master row at the specified data row index ([see example]({% slug hierarchy_grid %})).
1266
- *
1267
- * This method is for backwards compatibility with legacy versions that track expanded state by row index.
1268
- * For new development, use the [`kendoGridDetailsExpandBy` directive]({% slug api_grid_expanddetailsdirective %})
1269
- * or provide an `isDetailExpanded` callback. See [Controlling the Expanded State]({% slug master_detail_expanded_state_grid %}) for examples.
1270
- *
1271
- * @param index The data row index of the master row.
1272
- */
1273
- collapseRow(index) {
1274
- this.toggleDetailRowLegacy(index, false);
1275
- }
1276
- /**
1277
- * Expands a group header at the given hierarchical index, such as `0_1` for the second inner group of the first master group.
1278
- *
1279
- * This method is for backwards compatibility with legacy versions that track expanded group state by hierarchical group index.
1280
- * If the Grid is pageable, the group indexes are offset by the current Grid [skip]({% slug api_grid_gridcomponent %}#toc-skip).
1281
- *
1282
- * @param {string} index The underscore-separated hierarchical index of the group.
1283
- */
1284
- expandGroup(index) {
1285
- this.toggleGroupRowLegacy(index, true);
1286
- }
1287
- /**
1288
- * Collapses a group header at the given hierarchical index, such as `0_1` for the second inner group of the first master group.
1289
- *
1290
- * This method is for backwards compatibility with legacy versions that track expanded group state by hierarchical group index.
1291
- * If the Grid is pageable, the group indexes are offset by the current Grid [skip]({% slug api_grid_gridcomponent %}#toc-skip).
1292
- *
1293
- * @param {string} index The underscore-separated hierarchical index of the group.
1294
- */
1295
- collapseGroup(index) {
1296
- this.toggleGroupRowLegacy(index, false);
1297
- }
1298
- /**
1299
- * @hidden
1300
- */
1301
- resetGroupsState() {
1302
- this.groupsService.reset();
1303
- }
1304
- /**
1305
- * Builds the request body for the AI service based on the provided prompt message.
1306
- * Allows developers to construct their own AI service requests.
1307
- *
1308
- * @param promptMessage - The prompt message to send to the AI service.
1309
- * @returns The request body object ready to be sent to the AI service.
1310
- *
1311
- * @example
1312
- * ```ts
1313
- * const requestBody = this.grid.getAIRequest('Sort by Product Name ascending');
1314
- *
1315
- * // Send to your AI service
1316
- * this.http.post('https://your-ai-service.com/api', requestBody).subscribe(response => {
1317
- * this.grid.handleAIResponse(response);
1318
- * });
1319
- * ```
1320
- */
1321
- getAIRequest(promptMessage) {
1322
- return this.aiRequestResponseService.buildRequestBody(promptMessage);
1323
- }
1324
- /**
1325
- * Processes an AI service response and applies the commands to the Grid.
1326
- * Allows developers to handle their own AI service responses manually.
1327
- *
1328
- * @param response - The AI service response containing optional message and commands array.
1329
- *
1330
- * @example
1331
- * ```ts
1332
- * const response = {
1333
- * message: 'Applying sorting',
1334
- * commands: [
1335
- * { type: 'GridSort', sort: { field: 'ProductName', dir: 'asc' }, message: 'Sorted by Product Name' }
1336
- * ]
1337
- * };
1338
- * this.grid.handleAIResponse(response);
1339
- * ```
1340
- */
1341
- handleAIResponse(response) {
1342
- const columns = this.columnInfoService.leafNamedColumns?.map((col) => ({ field: col.field })) || [];
1343
- const leafColumns = this.columnInfoService.leafNamedColumns || [];
1344
- this.aiRequestResponseService.processCommands(response.commands || [], columns, leafColumns);
1345
- }
1346
- /**
1347
- * @hidden
1348
- */
1349
- onDataChange() {
1350
- this.autoGenerateColumns();
1351
- this.changeNotification.notify();
1352
- this.pdfService.dataChanged.emit();
1353
- if (isPresent(this.defaultSelection)) {
1354
- this.defaultSelection.reset();
1355
- }
1356
- this.initSelectionService();
1357
- this.updateNavigationMetadata();
1358
- }
1359
- ngDoCheck() {
1360
- if (!this.isScrollable) {
1361
- this.rowsToRender = this.dataMappingService.dataMapper(this.view, this.nonLockedLeafColumns, this.lockedLeafColumns, this.detailTemplate, this.showGroupFooters);
1362
- }
1363
- }
1364
- ngOnChanges(changes) {
1365
- if (isChanged("data", changes)) {
1366
- this.onDataChange();
1367
- }
1368
- if (this.lockedLeafColumns.length && anyChanged(["pageSize", "skip", "sort", "group"], changes)) {
1369
- this.changeNotification.notify();
1370
- }
1371
- if (anyChanged(["pageSize", "scrollable", 'virtualColumns'], changes)) {
1372
- this.updateNavigationMetadata();
1373
- }
1374
- if (isChanged("virtualColumns", changes)) {
1375
- this.viewportColumns = this.leafViewportColumns = null;
1376
- }
1377
- if (isChanged("height", changes, false)) {
1378
- this.renderer.setStyle(this.wrapper.nativeElement, 'height', `${this.height}px`);
1379
- }
1380
- if (isChanged("filterable", changes) && this.lockedColumns.length) {
1381
- this.syncHeaderHeight(this.ngZone.onStable.asObservable().pipe(take(1)));
1382
- }
1383
- if (anyChanged(["columnMenu", "sortable", "filterable"], changes, false)) {
1384
- this.columnMenuOptions = this.columnMenu && Object.assign({
1385
- filter: Boolean(this.filterable),
1386
- sort: Boolean(this.sortable)
1387
- }, this.columnMenu);
1388
- }
1389
- if (isChanged("scrollable", changes) && this.isScrollable) {
1390
- this.ngZone.onStable.pipe(take(1)).subscribe(() => this.attachScrollSync());
1391
- }
1392
- if (isChanged("selectable", changes) && this.shouldResetSelection(changes['selectable'])) {
1393
- if (this.defaultSelection) {
1394
- this.defaultSelection.reset();
1395
- }
1396
- else if (this.selectionDirective) {
1397
- this.selectionDirective.reset();
1398
- }
1399
- }
1400
- if (isChanged('groupable', changes, true)) {
1401
- this.groupable = changes['groupable'].currentValue;
1402
- }
1403
- if (isChanged('navigable', changes, true)) {
1404
- if (this.navigationService.enabled) {
1405
- this.navigationService.setActiveSections(this.navigable);
1406
- }
1407
- else {
1408
- if (this.navigable.length) {
1409
- this.navigationService.init(this.navigationMetadata(), this.navigable);
1410
- }
1411
- }
1412
- }
1413
- if (isChanged('dataLayoutMode', changes)) {
1414
- if (this.isStacked) {
1415
- this.generateStackedColumns();
1416
- }
1417
- else {
1418
- this.stackedColumns = { columns: [], areDefault: false };
1419
- }
1420
- this.columnsContainer.isStacked = this.isStacked;
1421
- }
1422
- }
1423
- ngAfterContentInit() {
1424
- this.shouldGenerateColumns = !this.columns.length;
1425
- this.autoGenerateColumns();
1426
- this.columnList = new ColumnList(this.columns);
1427
- this.columnsChangeSubscription = this.columns.changes.subscribe(() => this.verifySettings());
1428
- }
1429
- ngAfterViewInit() {
1430
- this.attachScrollSync();
1431
- this.attachElementEventHandlers();
1432
- this.updateNavigationMetadata();
1433
- this.applyAutoSize();
1434
- const toolbarComponentWrapper = this.wrapper?.nativeElement?.querySelector('kendo-toolbar');
1435
- if (toolbarComponentWrapper) {
1436
- this.renderer.addClass(toolbarComponentWrapper, 'k-grid-toolbar');
1437
- }
1438
- }
1439
- ngAfterContentChecked() {
1440
- this.columnsContainer.refresh();
1441
- this.verifySettings();
1442
- this.initSelectionService();
1443
- }
1444
- ngOnInit() {
1445
- if (this.navigable.length) {
1446
- this.navigationService.init(this.navigationMetadata(), this.navigable);
1447
- }
1448
- this.isStacked && this.generateStackedColumns();
1449
- }
1450
- ngOnDestroy() {
1451
- if (this.selectionSubscription) {
1452
- this.selectionSubscription.unsubscribe();
1453
- }
1454
- if (this.rowReorderSubscription) {
1455
- this.rowReorderSubscription.unsubscribe();
1456
- }
1457
- if (this.columnReorderSubscription) {
1458
- this.columnReorderSubscription.unsubscribe();
1459
- }
1460
- if (this.stateChangeSubscription) {
1461
- this.stateChangeSubscription.unsubscribe();
1462
- }
1463
- if (this.groupExpandCollapseSubscription) {
1464
- this.groupExpandCollapseSubscription.unsubscribe();
1465
- }
1466
- if (this.detailsServiceSubscription) {
1467
- this.detailsServiceSubscription.unsubscribe();
1468
- }
1469
- if (this.editServiceSubscription) {
1470
- this.editServiceSubscription.unsubscribe();
1471
- }
1472
- if (this.pdfSubscription) {
1473
- this.pdfSubscription.unsubscribe();
1474
- }
1475
- if (this.filterSubscription) {
1476
- this.filterSubscription.unsubscribe();
1477
- }
1478
- if (this.sortSubscription) {
1479
- this.sortSubscription.unsubscribe();
1480
- }
1481
- if (this.columnsChangeSubscription) {
1482
- this.columnsChangeSubscription.unsubscribe();
1483
- }
1484
- if (this.excelSubscription) {
1485
- this.excelSubscription.unsubscribe();
1486
- }
1487
- if (this.columnsContainerChangeSubscription) {
1488
- this.columnsContainerChangeSubscription.unsubscribe();
1489
- }
1490
- if (this.scrollSyncService) {
1491
- this.scrollSyncService.destroy();
1492
- }
1493
- if (this.detachElementEventHandlers) {
1494
- this.detachElementEventHandlers();
1495
- }
1496
- if (this.defaultSelection) {
1497
- this.defaultSelection.destroy();
1498
- }
1499
- if (this.cellClickSubscription) {
1500
- this.cellClickSubscription.unsubscribe();
1501
- }
1502
- if (this.footerChangeSubscription) {
1503
- this.footerChangeSubscription.unsubscribe();
1504
- }
1505
- this.ngZone = null;
1506
- if (this.columnResizingSubscription) {
1507
- this.columnResizingSubscription.unsubscribe();
1508
- }
1509
- if (this.columnReorderSubscription) {
1510
- this.columnReorderSubscription.unsubscribe();
1511
- }
1512
- if (this.localizationSubscription) {
1513
- this.localizationSubscription.unsubscribe();
1514
- }
1515
- if (this.columnVisibilityChangeSubscription) {
1516
- this.columnVisibilityChangeSubscription.unsubscribe();
1517
- }
1518
- if (this.columnLockedChangeSubscription) {
1519
- this.columnLockedChangeSubscription.unsubscribe();
1520
- }
1521
- if (this.columnStickyChangeSubscription) {
1522
- this.columnStickyChangeSubscription.unsubscribe();
1523
- }
1524
- if (this.focusElementSubscription) {
1525
- this.focusElementSubscription.unsubscribe();
1526
- }
1527
- if (this.rowReorderSubscription) {
1528
- this.rowReorderSubscription.unsubscribe();
1529
- }
1530
- this.columnRangeChangeSubscription.unsubscribe();
1531
- }
1532
- /**
1533
- * @hidden
1534
- */
1535
- onResize() {
1536
- if (this.isVirtual) {
1537
- this.ctx.scroller.update();
1538
- this.listComponent.resetNavigationViewport();
1539
- }
1540
- }
1541
- /**
1542
- * @hidden
1543
- */
1544
- attachScrollSync() {
1545
- if (isUniversal()) {
1546
- return;
1547
- }
1548
- if (this.header) {
1549
- this.scrollSyncService.registerEmitter(this.header.nativeElement, "header");
1550
- }
1551
- if (this.footer) {
1552
- this.footerChangeSubscription = observe(this.footer)
1553
- .subscribe(footers => footers
1554
- .map(footer => footer.nativeElement)
1555
- .filter(isPresent)
1556
- .forEach(element => {
1557
- this.scrollSyncService.registerEmitter(element, "footer");
1558
- // sync footers and content scroll positions when footer visibility is changed dynamically
1559
- element.scrollLeft = this.wrapper.nativeElement.querySelector('.k-grid-content')?.scrollLeft;
1560
- }));
1561
- }
1562
- }
1563
- /**
1564
- * @hidden
1565
- */
1566
- get ariaLabel() {
1567
- return this.localization.get('gridLabel');
1568
- }
1569
- /**
1570
- * @hidden
1571
- */
1572
- messageFor = token => this.localization.get(token);
1573
- /**
1574
- * Switches the specified table row to edit mode ([see example]({% slug inline_editing_grid %}#toc-editing-records-1)).
1575
- *
1576
- * @param rowIndex The data row index to switch to edit mode.
1577
- * @param group The [`FormGroup`](link:site.data.urls.angular['formgroupapi']) that describes the edit form.
1578
- * @param options Additional options to configure the focus target when the editor opens.
1579
- */
1580
- editRow(rowIndex, group, options) {
1581
- this.editService.editRow(rowIndex, group);
1582
- if (isPresent(options) && options.skipFocus) {
1583
- return;
1584
- }
1585
- const row = `tr[data-kendo-grid-item-index="${rowIndex}"]`;
1586
- const columnIndex = options && options.columnIndex;
1587
- const target = isNaN(columnIndex) ? row : `${row} td[data-kendo-grid-column-index="${columnIndex}"]`;
1588
- this.focusEditElement(target);
1589
- }
1590
- /**
1591
- * @hidden
1592
- */
1593
- handleReorderEvents(ev, evType) {
1594
- this.rowReorderService[evType](ev);
1595
- }
1596
- /**
1597
- * Closes the editor for the specified row ([see example]({% slug inline_editing_grid %}#toc-canceling-editing-1)).
1598
- *
1599
- * @param {number} index The row index to switch out of edit mode. If you do not provide an index, the new item editor closes.
1600
- */
1601
- closeRow(index) {
1602
- this.editService.close(index);
1603
- this.isStacked && (this.navigationService.stackedCellEntered = false);
1604
- }
1605
- /**
1606
- * Creates a new row editor ([see example]({% slug inline_editing_grid %}#toc-adding-records-1)).
1607
- *
1608
- * @param {FormGroup} group The [`FormGroup`](link:site.data.urls.angular['formgroupapi']) that describes the edit form. If you pass a data item, the method builds the `FormGroup` from the data item fields.
1609
- */
1610
- addRow(group) {
1611
- const isFormGroup = group instanceof FormGroup;
1612
- if (!isFormGroup) {
1613
- const fields = Object.keys(group).reduce(createControl(group), {}); // FormBuilder?
1614
- group = new FormGroup(fields);
1615
- }
1616
- this.editService.addRow(group);
1617
- this.focusEditElement('.k-grid-add-row');
1618
- }
1619
- /**
1620
- * Puts the specified cell in edit mode ([see example](slug:editing_incell_grid)).
1621
- *
1622
- * @param {number} rowIndex The data row index to switch to edit mode.
1623
- * @param {number|string|any} column The leaf column index, field name, or column instance to edit.
1624
- * @param {FormGroup} group The [`FormGroup`](link:site.data.urls.angular['formgroupapi']) that describes the edit form.
1625
- */
1626
- editCell(rowIndex, column, group) {
1627
- const instance = this.columnInstance(column);
1628
- this.editService.editCell(rowIndex, instance, group);
1629
- this.focusEditElement(this.isStacked ? '.k-grid-stack-edit-cell' : '.k-grid-edit-cell');
1630
- }
1631
- /**
1632
- * Closes the current cell in edit mode and fires the [`cellClose`]({% slug api_grid_gridcomponent %}#toc-cellclose) event.
1633
- *
1634
- * @returns {boolean} `true` if the cell closed. Returns `false` if the [`cellClose`]({% slug api_grid_gridcomponent %}#toc-cellclose) event was prevented.
1635
- */
1636
- closeCell() {
1637
- return !this.editService.closeCell();
1638
- }
1639
- /**
1640
- * Closes the current cell in edit mode.
1641
- */
1642
- cancelCell() {
1643
- this.editService.cancelCell();
1644
- }
1645
- /**
1646
- * Returns `true` if a row or cell is currently edited.
1647
- *
1648
- * @returns {boolean} `true` if a row or cell is currently edited.
1649
- */
1650
- isEditing() {
1651
- return this.editService.isEditing();
1652
- }
1653
- /**
1654
- * Returns `true` if a cell is currently edited.
1655
- *
1656
- * @returns {boolean} `true` if a cell is currently being edited.
1657
- */
1658
- isEditingCell() {
1659
- return this.editService.isEditingCell();
1660
- }
1661
- /**
1662
- * Initiates the PDF export ([see example]({% slug pdfexport_grid %})).
1663
- */
1664
- saveAsPDF() {
1665
- this.pdfService.save(this);
1666
- }
1667
- /**
1668
- * Exports the Grid element to a Drawing [Group]({% slug api_kendo-drawing_group %}) using the `kendo-grid-pdf` component options
1669
- * ([see example]({% slug pdfexport_grid %}#toc-exporting-multiple-grids-to-the-same-pdf)).
1670
- *
1671
- * @returns {Promise} A promise that resolves with the Drawing `Group`.
1672
- */
1673
- drawPDF() {
1674
- const promise = createPromise();
1675
- this.pdfService.draw(this, promise);
1676
- return promise;
1677
- }
1678
- /**
1679
- * Initiates the Excel export ([see example]({% slug excelexport_grid %})).
1680
- */
1681
- saveAsExcel() {
1682
- this.excelService.save(this);
1683
- }
1684
- /**
1685
- * Applies the given `GridState` object to the Grid.
1686
- */
1687
- loadState(state) {
1688
- if (state.columnsState) {
1689
- this.traverseColumns(this.columns, (column) => {
1690
- const columnState = state.columnsState.find((col) => col.id === column.id);
1691
- if (columnState) {
1692
- column.width = columnState.width;
1693
- column.hidden = columnState.hidden;
1694
- column.locked = columnState.locked;
1695
- column.sticky = columnState.sticky;
1696
- column.orderIndex = columnState.orderIndex;
1697
- }
1698
- });
1699
- this.columns.reset(this.columns.toArray());
1700
- this.columnsContainer.refresh();
1701
- }
1702
- this.sort = state.sort;
1703
- this.group = state.group;
1704
- this.filter = state.filter;
1705
- this.skip = state.skip;
1706
- this.pageSize = state.take;
1707
- if (state.currentData) {
1708
- this.data = state.currentData;
1709
- }
1710
- this.changeDetectorRef.markForCheck();
1711
- }
1712
- traverseColumns(columns, callback) {
1713
- columns.forEach((column) => {
1714
- if (column.isColumnGroup || column.isSpanColumn) {
1715
- this.traverseColumns(column.children, callback);
1716
- }
1717
- else {
1718
- callback(column);
1719
- }
1720
- });
1721
- }
1722
- /**
1723
- * Applies the minimum possible width for the specified column so the whole text fits without wrapping.
1724
- * This method expects the Grid to be [`resizable`](slug:resizing_columns_grid). Run this method after the Grid is populated with data.
1725
- * [See example](slug:resizing_columns_grid#toc-auto-fitting-the-content)
1726
- */
1727
- autoFitColumn(column) {
1728
- this.columnResizingService.autoFit(column);
1729
- }
1730
- /**
1731
- * Adjusts the width of the specified columns to fit the entire content, including headers, without wrapping.
1732
- * If you do not specify columns, `autoFitColumns` applies to all columns. Run this method after the Grid is populated with data.
1733
- * [See example](slug:resizing_columns_grid#toc-auto-fitting-the-content)
1734
- */
1735
- autoFitColumns(columns = this.columns) {
1736
- let cols;
1737
- if (columns instanceof QueryList) {
1738
- cols = columns.toArray();
1739
- }
1740
- else {
1741
- cols = columns;
1742
- }
1743
- this.columnResizingService.autoFit(...cols);
1744
- }
1745
- /**
1746
- * Adjusts the width of the Grid columns to fit the entire Grid width.
1747
- * - when the sum of all columns widths is less than the available Grid width&mdash;the available space is distributed evenly between all columns.
1748
- * - when the sum of all columns widths is greater than the available Grid width&mdash;the columns are shrinked equally to fit the Grid width.
1749
- *
1750
- * Run this method after the Grid is populated with data.
1751
- */
1752
- autoFitColumnsToGrid() {
1753
- const gridElement = this.wrapper.nativeElement;
1754
- if (!gridElement) {
1755
- return;
1756
- }
1757
- const leafColumns = this.columnsContainer.leafColumns.toArray();
1758
- if (!leafColumns.length || leafColumns.length === 0) {
1759
- return;
1760
- }
1761
- this.columnResizingService.autoFitToGrid(gridElement, this.scrollbarWidth, ...leafColumns);
1762
- }
1763
- /**
1764
- * @hidden
1765
- */
1766
- notifyPageChange(source, event) {
1767
- if (source === "list" && !this.isVirtual) {
1768
- return;
1769
- }
1770
- this.pageChange.emit(event);
1771
- }
1772
- /**
1773
- * @hidden
1774
- */
1775
- handlePagerVisibilityChange(prop, ev) {
1776
- this[prop] = ev;
1777
- }
1778
- /**
1779
- * @hidden
1780
- */
1781
- notifyScrollBottom() {
1782
- if (this.scrollable === 'none') {
1783
- return;
1784
- }
1785
- if (hasObservers(this.scrollBottom)) {
1786
- this.ngZone.run(() => this.scrollBottom.emit({ sender: this }));
1787
- }
1788
- }
1789
- /**
1790
- * @hidden
1791
- */
1792
- focusEditElement(containerSelector) {
1793
- if (this.focusElementSubscription) {
1794
- this.focusElementSubscription.unsubscribe();
1795
- }
1796
- this.ngZone.runOutsideAngular(() => {
1797
- this.focusElementSubscription = this.ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {
1798
- const wrapper = this.wrapper.nativeElement;
1799
- if (!this.setEditFocus(wrapper.querySelector(containerSelector)) && this.isLocked) {
1800
- this.setEditFocus(wrapper.querySelector(`.k-grid-content ${containerSelector}`));
1801
- }
1802
- this.focusElementSubscription = null;
1803
- });
1804
- });
1805
- }
1806
- /**
1807
- * Focuses the last active or the first cell of the Grid.
1808
- *
1809
- * @returns {NavigationCell} The focused cell.
1810
- */
1811
- focus() {
1812
- this.assertNavigable();
1813
- return this.navigationService.focusCell();
1814
- }
1815
- /**
1816
- * Focuses the cell with the specified row and column index.
1817
- *
1818
- * The row index is based on the logical structure of the Grid and does not correspond to the data item index.
1819
- * Header rows are included, starting at index 0.
1820
- * Group headers and footers are included.
1821
- * The row indexing is absolute and does not change with paging.
1822
- *
1823
- * If the Grid is configured for scrolling, including virtual scrolling, the scroll position will be updated.
1824
- * If the row is not present on the current page, the method will have no effect.
1825
- *
1826
- * @param rowIndex The logical row index to focus. The top header row has an index 0.
1827
- * @param colIndex The column index to focus.
1828
- * @returns {NavigationCell} The focused cell.
1829
- *
1830
- */
1831
- focusCell(rowIndex, colIndex) {
1832
- this.assertNavigable();
1833
- return this.navigationService.focusCell(rowIndex, colIndex);
1834
- }
1835
- /**
1836
- * Focuses the next cell, optionally wrapping to the next row.
1837
- *
1838
- * @param wrap A Boolean value which indicates if the focus will move to the next row. Defaults to `true`.
1839
- * @returns {NavigationCell} The focused cell. If the focus is already on the last cell, returns `null`.
1840
- */
1841
- focusNextCell(wrap = true) {
1842
- this.assertNavigable();
1843
- return this.navigationService.focusNextCell(wrap);
1844
- }
1845
- /**
1846
- * Focuses the previous cell. Optionally wraps to the previous row.
1847
- *
1848
- * @param wrap - A Boolean value which indicates if the focus will move to the next row. Defaults to `true`.
1849
- * @returns {NavigationCell} The focused cell. If the focus is already on the first cell, returns `null`.
1850
- */
1851
- focusPrevCell(wrap = true) {
1852
- this.assertNavigable();
1853
- return this.navigationService.focusPrevCell(wrap);
1854
- }
1855
- /**
1856
- * Scrolls to the specified row and column ([see example](slug:scrollmmodes_grid#toc-scrolling-to-a-specific-row-and-column)).
1857
- */
1858
- scrollTo(request) {
1859
- this.scrollRequestService.scrollTo(request, false);
1860
- }
1861
- /**
1862
- * Scrolls to the specified data item and column ([see example](slug:scrollmmodes_grid#toc-scrolling-to-a-specific-item)).
1863
- */
1864
- scrollToItem(request) {
1865
- this.scrollRequestService.scrollToItem(request);
1866
- }
1867
- /**
1868
- * Changes the position of the specified column.
1869
- * The reordering of columns operates only on the level inferred by the source column.
1870
- * For this method to work, the `source` column must be visible.
1871
- *
1872
- * @param {ColumnBase} source The column to move.
1873
- * @param {number} destIndex The new position of the column.
1874
- * @param {ColumnReorderConfig} options Additional options.
1875
- */
1876
- reorderColumn(source, destIndex, options = { before: false }) {
1877
- const columnsForLevel = sortColumns(this.allColumnsForLevel(source.level));
1878
- let target = columnsForLevel[destIndex];
1879
- if (!target) {
1880
- return;
1881
- }
1882
- const lastNonLocked = target.isLocked &&
1883
- !source.isLocked &&
1884
- this.columnsContainer.nonLockedColumns.length === 1;
1885
- if (lastNonLocked) {
1886
- return;
1887
- }
1888
- if (isSpanColumnComponent(target) && !options.before) {
1889
- target = target.children.last;
1890
- }
1891
- this.reorder({
1892
- before: options.before,
1893
- source: source,
1894
- target: target
1895
- });
1896
- }
1897
- /**
1898
- * @hidden
1899
- */
1900
- updateNavigationMetadata() {
1901
- this.navigationService.metadata = this.navigationMetadata();
1902
- }
1903
- reorder({ target, source, before, changeContainer }) {
1904
- this.ngZone.run(() => {
1905
- const columnsForLevel = sortColumns(this.allColumnsForLevel(source.level));
1906
- let newIndex = columnsForLevel.indexOf(target);
1907
- if (target.parent && target.parent.isSpanColumn) {
1908
- newIndex = columnsForLevel.indexOf(target.parent);
1909
- if (before) {
1910
- target = target.parent;
1911
- }
1912
- }
1913
- const oldIndex = columnsForLevel.indexOf(source);
1914
- if (changeContainer) {
1915
- if (before && 0 < newIndex && oldIndex < newIndex) { // dropped before the first not locked column
1916
- newIndex--;
1917
- }
1918
- else if (!before && oldIndex > newIndex) { // dropped after the last locked column
1919
- newIndex++;
1920
- }
1921
- }
1922
- const args = new ColumnReorderEvent({
1923
- column: source,
1924
- oldIndex: oldIndex,
1925
- newIndex: newIndex
1926
- });
1927
- this.columnReorder.emit(args);
1928
- if (args.isDefaultPrevented()) {
1929
- return;
1930
- }
1931
- if (changeContainer) {
1932
- this.columnLockedChange.emit(new ColumnLockedChangeEvent([source]));
1933
- }
1934
- this.updateColumnIndices({ columnsForLevel, source, target, before });
1935
- if (source.locked !== target.locked) {
1936
- source.locked = target.locked;
1937
- }
1938
- this.columnsContainer.refresh();
1939
- if (this.virtualColumns) {
1940
- this.listComponent.updateViewportColumns();
1941
- }
1942
- this.changeDetectorRef.markForCheck();
1943
- });
1944
- }
1945
- updateColumnIndices({ columnsForLevel, source, target, before }) {
1946
- const expandedColumns = expandColumnsWithSpan(columnsForLevel);
1947
- const sourceColumnIndex = expandedColumns.indexOf(source);
1948
- let nextSourceIndex = 0;
1949
- let nextIndex = 0;
1950
- let toSkip = 1;
1951
- // Possible only when called from the API.
1952
- if (source.isSpanColumn) {
1953
- toSkip += source.children.length;
1954
- }
1955
- let i = 0;
1956
- while (i < expandedColumns.length) {
1957
- const column = expandedColumns[i];
1958
- if (column === target) {
1959
- nextSourceIndex = before ? nextIndex : nextIndex + 1;
1960
- nextIndex = before ? nextIndex + toSkip : nextIndex;
1961
- column.orderIndex = nextIndex;
1962
- if (nextSourceIndex === nextIndex + 1) {
1963
- nextIndex += toSkip;
1964
- }
1965
- }
1966
- else if (column === source) {
1967
- i += toSkip;
1968
- column.isReordered = true;
1969
- continue;
1970
- }
1971
- else {
1972
- column.orderIndex = nextIndex;
1973
- }
1974
- column.isReordered = true;
1975
- nextIndex++;
1976
- i++;
1977
- }
1978
- for (i = sourceColumnIndex; i < sourceColumnIndex + toSkip; i++) {
1979
- expandedColumns[i].orderIndex = nextSourceIndex++;
1980
- expandedColumns[i].isReordered = true;
1981
- }
1982
- this.updateIndicesForLevel(source.level + 1);
1983
- this.columnResizingService.areColumnsReordered = true;
1984
- }
1985
- updateIndicesForLevel(level) {
1986
- const colsForParentLevel = this.allColumnsForLevel(level - 1);
1987
- const colsForLevel = [];
1988
- sortColumns(colsForParentLevel).forEach((c) => {
1989
- if (c.isColumnGroup) {
1990
- colsForLevel.push(...c.childrenArray.sort((a, b) => a.orderIndex - b.orderIndex));
1991
- }
1992
- });
1993
- expandColumnsWithSpan(colsForLevel).forEach((c, i) => {
1994
- c.orderIndex = i;
1995
- c.isReordered = true;
1996
- });
1997
- if (level < this.columnList.totalColumnLevels()) {
1998
- this.updateIndicesForLevel(level + 1);
1999
- }
2000
- }
2001
- allColumnsForLevel(level) {
2002
- return this.columnList.toArray().filter(column => column.level === level);
2003
- }
2004
- initSelectionService() {
2005
- if (!this.selectable) {
2006
- this.selectionService.ngOnDestroy();
2007
- this.cellSelectionService.ngOnDestroy();
2008
- return;
2009
- }
2010
- if (!this.selectionDirective && !isPresent(this.defaultSelection)) {
2011
- this.defaultSelection = new Selection(this.ctx, this.changeDetectorRef);
2012
- }
2013
- const cellSelectionMode = this.selectable['cell'];
2014
- const activeService = cellSelectionMode ? this.cellSelectionService : this.selectionService;
2015
- const inactiveService = cellSelectionMode ? this.selectionService : this.cellSelectionService;
2016
- if (inactiveService.active) {
2017
- inactiveService.ngOnDestroy();
2018
- activeService.addSubscriptions();
2019
- inactiveService.active = false;
2020
- }
2021
- activeService.active = true;
2022
- activeService.init({
2023
- cellSelected: cellSelectionMode ? this.cellSelected : undefined,
2024
- rowSelected: cellSelectionMode ? undefined : this.rowSelected,
2025
- isRowSelectable: this.isRowSelectable,
2026
- selectable: this.selectable,
2027
- view: this.view,
2028
- columns: cellSelectionMode ? this.columnList.toArray() : undefined,
2029
- isStacked: this.isStacked
2030
- });
2031
- if (!this.selectionDirective && !this.selectableSettings.enabled) {
2032
- this.defaultSelection.reset();
2033
- }
2034
- if (this.selectionSubscription) {
2035
- this.selectionSubscription.unsubscribe();
2036
- }
2037
- if (cellSelectionMode) {
2038
- this.selectionSubscription = this.cellSelectionService.changes.subscribe((event) => {
2039
- this.ngZone.run(() => this.selectionChange.emit(event));
2040
- });
2041
- }
2042
- else {
2043
- this.selectionSubscription = this.selectionService.changes.subscribe((event) => {
2044
- this.ngZone.run(() => this.selectionChange.emit(event));
2045
- });
2046
- }
2047
- }
2048
- setEditFocus(element) {
2049
- if (element) {
2050
- return this.navigationService.tryFocus(element);
2051
- }
2052
- }
2053
- columnInstance(column) {
2054
- let instance;
2055
- if (typeof column === 'number') {
2056
- instance = this.columnsContainer.lockedLeafColumns.toArray()
2057
- .concat(this.columnsContainer.nonLockedLeafColumns.toArray())[column];
2058
- }
2059
- else if (typeof column === 'string') {
2060
- instance = this.columnList.filter((item) => item.field === column)[0];
2061
- }
2062
- else {
2063
- instance = column;
2064
- }
2065
- if (!instance && isDevMode()) {
2066
- throw new Error(ColumnConfigurationErrorMessages.invalidColumn(column));
2067
- }
2068
- return instance;
2069
- }
2070
- verifySettings() {
2071
- if (isDevMode()) {
2072
- const locked = this.lockedLeafColumns.length || (this.columnMenu && this.columnMenu.lock);
2073
- const stickyColumns = this.stickyColumns.length || (this.columnMenu && this.columnMenu.stick);
2074
- if (locked && this.detailTemplate) {
2075
- throw new Error(GridConfigurationErrorMessages.incompatibleFeatures('detail template', 'locked columns'));
2076
- }
2077
- if (stickyColumns && this.detailTemplate) {
2078
- throw new Error(GridConfigurationErrorMessages.incompatibleFeatures('detail template', 'sticky columns'));
2079
- }
2080
- if (this.lockedLeafColumns.length && !this.nonLockedLeafColumns.length) {
2081
- console.warn(GridConfigurationErrorMessages.nonLockedColumnPresent);
2082
- }
2083
- if (!this.isStacked && (locked || this.virtualColumns) && expandColumns(this.columnList.toArray()).filter(column => !column.width && !isColumnGroupComponent(column)).length) {
2084
- console.warn(ColumnConfigurationErrorMessages.requiredWidth(locked ? 'Locked' : 'Virtual'));
2085
- }
2086
- if (locked && !this.isScrollable) {
2087
- console.warn(ColumnConfigurationErrorMessages.requiredScroll('Locked'));
2088
- }
2089
- if (stickyColumns && !this.isScrollable) {
2090
- console.warn(ColumnConfigurationErrorMessages.requiredScroll('Sticky'));
2091
- }
2092
- if (this.virtualColumns && !this.isScrollable) {
2093
- console.warn(ColumnConfigurationErrorMessages.requiredScroll('Virtual'));
2094
- }
2095
- if (this.columnList.filter(isColumnGroupComponent).filter((x) => !x.hasChildren).length) {
2096
- throw new Error(ColumnConfigurationErrorMessages.groupColumnContent);
2097
- }
2098
- if (this.columnList.filter(x => x.locked && x.parent && !x.parent.isLocked).length) {
2099
- throw new Error(ColumnConfigurationErrorMessages.lockedParent);
2100
- }
2101
- if (!this.isStacked && stickyColumns && expandColumns(this.columnList.toArray()).filter(column => !column.width && !isColumnGroupComponent(column)).length) {
2102
- console.warn(ColumnConfigurationErrorMessages.requiredWidth('Sticky'));
2103
- }
2104
- if (this.rowSticky && this.scrollable === 'virtual') {
2105
- throw new Error(GridConfigurationErrorMessages.incompatibleFeatures('sticky rows', 'row virtualization (scrollable="virtual")'));
2106
- }
2107
- if (this.rowSticky && this.groupable) {
2108
- throw new Error(GridConfigurationErrorMessages.incompatibleFeatures('sticky rows', 'grouping'));
2109
- }
2110
- if (this.wrapper?.nativeElement?.querySelector('kendo-toolbar') && this.toolbarTemplate) {
2111
- console.warn(GridConfigurationErrorMessages.unsupportedToolbarConfig);
2112
- }
2113
- validateColumnsField(this.columnList);
2114
- }
2115
- }
2116
- autoGenerateColumns() {
2117
- if (this.shouldGenerateColumns && !this.columns.length && this.view.length) {
2118
- this.columns.reset(Object.keys(this.view.at(0)).map(field => {
2119
- const column = new ColumnComponent(undefined, this.idService);
2120
- column.field = field;
2121
- return column;
2122
- }));
2123
- }
2124
- }
2125
- /**
2126
- * @hidden
2127
- */
2128
- stackedColumns = { columns: [], areDefault: false };
2129
- generateStackedColumns() {
2130
- if (!this.isStacked || !isPresent(this.dataLayoutMode)) {
2131
- return;
2132
- }
2133
- this.stackedColumns.columns = [];
2134
- if (typeof this.dataLayoutMode === 'object') {
2135
- if (this.dataLayoutMode.mode === 'stacked' && this.dataLayoutMode.stackedCols) {
2136
- const columns = this.dataLayoutMode.stackedCols;
2137
- if (typeof columns === 'number') {
2138
- for (let i = 0; i < columns; i++) {
2139
- const currCol = { width: `${this.wrapper.nativeElement.clientWidth / columns}px` };
2140
- this.stackedColumns.columns.push(currCol);
2141
- }
2142
- this.stackedColumns.areDefault = true;
2143
- }
2144
- else if (Array.isArray(columns)) {
2145
- this.stackedColumns.columns = columns.map((colSize) => {
2146
- const stackedColumn = {};
2147
- if (typeof colSize === 'number') {
2148
- stackedColumn.width = `${colSize}px`;
2149
- }
2150
- else if (typeof colSize === 'object' && colSize?.width) {
2151
- stackedColumn.width = typeof colSize.width === 'number' ? `${colSize.width}px` : colSize.width;
2152
- }
2153
- else if (typeof colSize === 'string') {
2154
- stackedColumn.width = colSize;
2155
- }
2156
- return stackedColumn;
2157
- });
2158
- this.stackedColumns.areDefault = false;
2159
- }
2160
- }
2161
- }
2162
- else {
2163
- this.stackedColumns = { columns: [{ width: this.wrapper.nativeElement.clientWidth }], areDefault: true };
2164
- }
2165
- }
2166
- attachStateChangesEmitter() {
2167
- this.stateChangeSubscription =
2168
- merge(this.pageChange.pipe(tap(() => {
2169
- if (this.pageable) {
2170
- this.ctx.scroller?.reset();
2171
- }
2172
- }), map(x => ({
2173
- filter: this.filter, group: this.group, skip: x.skip, sort: this.sort, take: x.take
2174
- }))), this.sortChange.pipe(tap(() => {
2175
- this.ctx.scroller?.reset();
2176
- }), map(sort => ({ filter: this.filter, group: this.group, skip: this.isVirtual && !this.pageable ? 0 : this.skip, sort: sort, take: this.pageSize }))), this.groupChange.pipe(tap(() => {
2177
- this.ctx.scroller?.reset();
2178
- }), map(group => ({
2179
- filter: this.filter, group: group, skip: this.pageable ? this.skip : 0, sort: this.sort, take: (this.pageable || !group?.length) ? this.pageSize : undefined
2180
- }))), this.filterChange.pipe(tap(() => {
2181
- this.ctx.scroller?.reset();
2182
- }), map(filter => ({
2183
- filter: filter, group: this.group, skip: 0, sort: this.sort, take: this.pageSize
2184
- }))))
2185
- .subscribe(x => {
2186
- this.closeCell();
2187
- this.cancelCell();
2188
- if (this.selectable && this.selectableSettings?.enabled && this.isVirtual) {
2189
- this.blockArrowSelection = true;
2190
- }
2191
- this.isVirtual && this.ctx.scroller?.resetVirtualSkip();
2192
- this.dataStateChange.emit(x);
2193
- hasObservers(this.gridStateChange) && this.gridStateChange.emit({ ...this.currentState, ...x });
2194
- });
2195
- this.stateChangeSubscription.add(merge(this.columnReorder, this.columnResize, this.columnVisibilityChange, this.columnLockedChange, this.columnStickyChange).pipe(flatMap(() => this.ngZone.onStable.pipe(take(1))))
2196
- .subscribe(() => this.ngZone.run(() => {
2197
- hasObservers(this.gridStateChange) && this.gridStateChange.emit(this.currentState);
2198
- if (this.isVirtual) {
2199
- this.ctx.scroller?.update();
2200
- this.listComponent?.resetNavigationViewport();
2201
- }
2202
- })));
2203
- }
2204
- attachEditHandlers() {
2205
- if (!this.editService) {
2206
- return;
2207
- }
2208
- this.editServiceSubscription = this.editService
2209
- .changes.subscribe(this.emitCRUDEvent.bind(this));
2210
- }
2211
- emitCRUDEvent(args) {
2212
- const { action, rowIndex, formGroup } = args;
2213
- let dataItem = this.view.at(rowIndex - this.skip);
2214
- if (action !== 'add' && !dataItem) {
2215
- dataItem = formGroup.value;
2216
- }
2217
- this.closeCell();
2218
- Object.assign(args, {
2219
- dataItem: dataItem,
2220
- sender: this
2221
- });
2222
- switch (action) {
2223
- case 'add':
2224
- this.add.emit(args);
2225
- break;
2226
- case 'cancel':
2227
- this.cancel.emit(args);
2228
- break;
2229
- case 'edit':
2230
- this.edit.emit(args);
2231
- break;
2232
- case 'remove':
2233
- this.remove.emit(args);
2234
- break;
2235
- case 'save':
2236
- this.save.emit(args);
2237
- break;
2238
- case 'cellClose':
2239
- this.cellClose.emit(args);
2240
- break;
2241
- default: break;
2242
- }
2243
- }
2244
- attachDomEventHandlers() {
2245
- this.cellClickSubscription = this.domEvents.cellClick.subscribe((args) => {
2246
- if (this.isStacked && !isPresent(args.column)) {
2247
- return;
2248
- }
2249
- this.cellClick.emit(Object.assign({ sender: this }, args));
2250
- });
2251
- }
2252
- attachElementEventHandlers() {
2253
- if (isUniversal()) {
2254
- return;
2255
- }
2256
- const wrapper = this.wrapper.nativeElement;
2257
- const ariaRoot = this.ariaRoot.nativeElement;
2258
- this.ngZone.runOutsideAngular(() => {
2259
- const resizeCheck = this.resizeCheck.bind(this);
2260
- const resizeSubscription = this.renderer.listen('window', 'resize', resizeCheck);
2261
- const orientationSubscription = this.renderer.listen('window', 'orientationchange', resizeCheck);
2262
- const documentClickSubscription = this.renderer.listen('document', 'click', (args) => {
2263
- const activeElement = document.activeElement;
2264
- if (this.editService.shouldCloseCell() &&
2265
- !closest(args.target, matchesClasses('k-animation-container k-grid-ignore-click')) &&
2266
- !(activeElement &&
2267
- (closest(activeElement, matchesClasses('k-animation-container')) ||
2268
- isInEditedCell(activeElement, this.wrapper.nativeElement, this.isStacked)))) {
2269
- this.editService.closeCell(args);
2270
- }
2271
- });
2272
- const windowBlurSubscription = this.renderer.listen('window', 'blur', (args) => {
2273
- const activeElement = document.activeElement;
2274
- if (activeElement && !(matchesNodeName('input')(activeElement) && activeElement.type === 'file' &&
2275
- isInEditedCell(activeElement, this.wrapper.nativeElement, this.isStacked))) {
2276
- this.editService.closeCell(args);
2277
- }
2278
- this.domEvents.windowBlur.emit(args);
2279
- });
2280
- const clickSubscription = this.renderer.listen(wrapper, 'click', (args) => {
2281
- this.domEvents.click.emit(args);
2282
- });
2283
- const keydownSubscription = this.renderer.listen(wrapper, 'keydown', (args) => {
2284
- this.domEvents.keydown.emit(args);
2285
- });
2286
- const shiftKeyupSubscription = this.renderer.listen(wrapper, 'keyup', (args) => {
2287
- if (args.key === 'Shift') {
2288
- this.domEvents.shiftKeyup.emit(args);
2289
- }
2290
- });
2291
- // focusIn and focusOut are relative to the element with ARIA role "grid"
2292
- let focused = false;
2293
- const focusInSubscription = this.renderer.listen(ariaRoot, 'focusin', (args) => {
2294
- this.domEvents.focus.emit(args);
2295
- if (!focused) {
2296
- this.domEvents.focusIn.emit(args);
2297
- focused = true;
2298
- }
2299
- });
2300
- const focusOutSubscription = this.renderer.listen(ariaRoot, 'focusout', (args) => {
2301
- const next = args.relatedTarget || document.activeElement;
2302
- const outside = !closest(next, (node) => node === ariaRoot);
2303
- if (outside) {
2304
- this.domEvents.focusOut.emit(args);
2305
- this.domEvents.shiftKeyup.emit(args);
2306
- focused = false;
2307
- }
2308
- });
2309
- this.detachElementEventHandlers = () => {
2310
- resizeSubscription();
2311
- orientationSubscription();
2312
- documentClickSubscription();
2313
- windowBlurSubscription();
2314
- clickSubscription();
2315
- keydownSubscription();
2316
- shiftKeyupSubscription();
2317
- focusInSubscription();
2318
- focusOutSubscription();
2319
- };
2320
- });
2321
- }
2322
- matchesMedia(c) {
2323
- return this.responsiveService.matchesMedia(c.media);
2324
- }
2325
- resizeCheck() {
2326
- if (window.innerWidth !== this.cachedWindowWidth) {
2327
- this.cachedWindowWidth = window.innerWidth;
2328
- let hasChanges = false;
2329
- this.columnList.filterHierarchy(column => {
2330
- const matchesMedia = this.matchesMedia(column);
2331
- if (column.matchesMedia !== matchesMedia) {
2332
- hasChanges = true;
2333
- column.matchesMedia = matchesMedia;
2334
- }
2335
- return column.isVisible;
2336
- });
2337
- if (hasChanges) {
2338
- this.ngZone.run(() => {
2339
- this.changeDetectorRef.markForCheck();
2340
- });
2341
- }
2342
- }
2343
- }
2344
- emitPDFExportEvent() {
2345
- const args = new PDFExportEvent();
2346
- this.pdfExport.emit(args);
2347
- if (!args.isDefaultPrevented()) {
2348
- this.saveAsPDF();
2349
- }
2350
- }
2351
- syncHeaderHeight(observable) {
2352
- return observable
2353
- .pipe(filter(() => isPresent(this.lockedHeader)))
2354
- .subscribe(() => syncRowsHeight(this.lockedHeader.nativeElement.children[0], this.header.nativeElement.children[0]));
2355
- }
2356
- columnsContainerChange() {
2357
- this.columnsContainerChangeSubscription =
2358
- this.syncHeaderHeight(this.columnsContainer.changes.pipe(filter(() => this.lockedColumns.length > 0), switchMap(() => this.ngZone.onStable.asObservable().pipe(take(1)))));
2359
- }
2360
- handleColumnResize() {
2361
- const resizes = this.columnResizingService.changes;
2362
- this.columnResizingSubscription = resizes.pipe(tap(e => {
2363
- if (e.type === 'start') {
2364
- this.renderer.addClass(this.wrapper.nativeElement, 'k-grid-column-resizing');
2365
- }
2366
- else if (e.type === 'end') {
2367
- this.renderer.removeClass(this.wrapper.nativeElement, 'k-grid-column-resizing');
2368
- }
2369
- }), filter(e => e.type === 'start'), switchMap(() => resizes.pipe(takeUntil(resizes.pipe(filter(e => e.type === 'triggerAutoFit'))), filter(e => e.type === 'end'))))
2370
- .subscribe(this.notifyResize.bind(this));
2371
- }
2372
- notifyResize(e) {
2373
- const args = e.resizedColumns
2374
- .filter(item => isTruthy(item.column.resizable) && !item.column.isColumnGroup)
2375
- .map(item => ({
2376
- column: item.column,
2377
- newWidth: roundDown(item.column.width),
2378
- oldWidth: roundDown(item.oldWidth)
2379
- }));
2380
- this.columnResize.emit(args);
2381
- }
2382
- assertNavigable() {
2383
- if (isDevMode() && !this.navigationService.enabled) {
2384
- throw new Error(GridConfigurationErrorMessages.focusNavigable);
2385
- }
2386
- }
2387
- _rowClass = () => null;
2388
- navigationMetadata() {
2389
- const isVirtual = this.isVirtual;
2390
- const dataVirtualization = isVirtual && !this.pageable && !this.group?.length;
2391
- const groupedVirtual = isVirtual && this.group?.length > 0;
2392
- let dataRows;
2393
- if (this.pageable) {
2394
- dataRows = this.skip + Math.min(this.pageSize, this.view.length); // last page might have less rows than the rest
2395
- }
2396
- else {
2397
- dataRows = this.view.total;
2398
- }
2399
- if (groupedVirtual) {
2400
- dataRows = this.ctx.scroller?.total ?? 0;
2401
- if (!dataVirtualization) {
2402
- dataRows += this.skip;
2403
- }
2404
- }
2405
- const addRowOffset = this.editService.hasNewItem ? 1 : 0;
2406
- const filterRowOffset = hasFilterRow(this.filterable) ? 1 : 0;
2407
- const headerRows = this.isStacked ? 0 : this.totalColumnLevels + 1 + filterRowOffset + addRowOffset;
2408
- return new NavigationMetadata(dataRows, headerRows, isVirtual, this.hasPager, isPresent(this.detailTemplate), this.wrapper, this.virtualColumns, this.columnsContainer, this.showFooter ? 1 : 0, this.isStacked);
2409
- }
2410
- applyAutoSize() {
2411
- const cols = this.columns.filter((c) => this.autoSize ? c.autoSize !== false : c.autoSize);
2412
- if (cols.length > 0) {
2413
- this.ngZone.onStable.pipe(take(1)).subscribe(() => this.autoFitColumns(cols));
2414
- }
2415
- }
2416
- onColumnRangeChange(range) {
2417
- const viewportColumns = this.viewportColumns = [];
2418
- const columnsArray = this.columnsContainer.nonLockedLeafColumns.toArray();
2419
- let leafViewportColumns = columnsArray.slice(range.start, range.end + 1);
2420
- const stickyBeforeStart = columnsArray.slice(0, range.start).filter(c => c.sticky && !leafViewportColumns.some(col => col === c));
2421
- const stickyAfterEnd = columnsArray.slice(range.end, columnsArray.length).filter(c => c.sticky && !leafViewportColumns.some(col => col === c));
2422
- leafViewportColumns = [...stickyBeforeStart, ...leafViewportColumns, ...stickyAfterEnd];
2423
- for (let idx = 0; idx < leafViewportColumns.length; idx++) {
2424
- let column = leafViewportColumns[idx];
2425
- while (column.parent) {
2426
- column = column.parent;
2427
- }
2428
- const toAdd = [column];
2429
- while (toAdd.length) {
2430
- column = toAdd.shift();
2431
- viewportColumns.push(column);
2432
- if (column.isColumnGroup) {
2433
- const children = columnsArray.filter(c => c.parent && c.parent.id === column.id);
2434
- toAdd.unshift(...children);
2435
- }
2436
- }
2437
- const lastFromGroup = viewportColumns[viewportColumns.length - 1];
2438
- column = leafViewportColumns[idx];
2439
- while (column !== lastFromGroup && idx < leafViewportColumns.length) {
2440
- idx++;
2441
- column = leafViewportColumns[idx];
2442
- }
2443
- }
2444
- if (range.start > 0) {
2445
- const first = leafViewportColumns[0];
2446
- let offset = range.offset;
2447
- let current = viewportColumns[0];
2448
- let index = 0;
2449
- while (current !== first) {
2450
- offset -= current.isColumnGroup ? 0 : current.width;
2451
- index++;
2452
- current = viewportColumns[index];
2453
- }
2454
- if (offset > 0) {
2455
- const totalLevels = this.columnsContainer.totalLevels;
2456
- let previous;
2457
- for (let idx = 0; idx <= totalLevels; idx++) {
2458
- const offsetColumn = idx < totalLevels ? new ColumnGroupComponent(previous) : new ColumnBase(previous);
2459
- previous = offsetColumn;
2460
- offsetColumn.title = "\u00A0";
2461
- offsetColumn.width = offset;
2462
- viewportColumns.unshift(offsetColumn);
2463
- }
2464
- }
2465
- }
2466
- this.leafViewportColumns = viewportColumns.filter(c => !c.isColumnGroup);
2467
- }
2468
- toggleDetailRowLegacy(index, expand) {
2469
- const hasCallback = typeof this.isDetailExpanded === 'function';
2470
- if (isDevMode() && hasCallback) {
2471
- throw new Error(GridConfigurationErrorMessages.expandCollapseMethods('expandRow', 'collapseRow', 'kendoGridDetailsExpandBy', 'isDetailExpanded'));
2472
- }
2473
- if (!isDevMode() && hasCallback) {
2474
- return;
2475
- }
2476
- if (this.detailsService.isExpanded(index, null) !== expand) {
2477
- this.detailsService.toggleRow(index, null);
2478
- }
2479
- }
2480
- toggleGroupRowLegacy(index, expand) {
2481
- const hasCallback = typeof this.isGroupExpanded === 'function';
2482
- if (isDevMode() && hasCallback) {
2483
- throw new Error(GridConfigurationErrorMessages.expandCollapseMethods('expandGroup', 'collapseGroup', 'kendoGridExpandGroupBy', 'isGroupExpanded'));
2484
- }
2485
- if (!isDevMode() && hasCallback) {
2486
- return;
2487
- }
2488
- if (this.groupsService.isExpanded({ groupIndex: index }) !== expand) {
2489
- this.groupsService.toggleRow({ index }, false);
2490
- }
2491
- this.changeDetectorRef.markForCheck();
2492
- }
2493
- shouldResetSelection(selectableChanges) {
2494
- const previousValue = selectableChanges.previousValue;
2495
- if (!previousValue) {
2496
- // Selection was disabled, no need to reset.
2497
- return false;
2498
- }
2499
- const currentValue = selectableChanges.currentValue;
2500
- if (!currentValue || currentValue.enabled === false) {
2501
- // Selection disabled, reset.
2502
- return true;
2503
- }
2504
- return previousValue.cell !== currentValue.cell;
2505
- }
2506
- notifyReorderContainers() {
2507
- this.dragTargetContainer?.notify();
2508
- this.dropTargetContainer?.notify();
2509
- }
2510
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GridComponent, deps: [{ token: i1.BrowserSupportService }, { token: i2.SelectionService }, { token: i3.CellSelectionService }, { token: i0.ElementRef }, { token: i4.GroupInfoService }, { token: i5.GroupsService }, { token: i6.ChangeNotificationService }, { token: i7.DetailsService }, { token: i8.EditService }, { token: i9.FilterService }, { token: i10.PDFService }, { token: i11.ResponsiveService }, { token: i0.Renderer2 }, { token: i12.ExcelService }, { token: i0.NgZone }, { token: i13.ScrollSyncService }, { token: i14.DomEventsService }, { token: i15.ColumnResizingService }, { token: i0.ChangeDetectorRef }, { token: i16.ColumnReorderService }, { token: i17.ColumnInfoService }, { token: i18.NavigationService }, { token: i19.SortService }, { token: i20.ScrollRequestService }, { token: i21.LocalizationService }, { token: i22.ContextService }, { token: i23.SizingOptionsService }, { token: i24.AdaptiveGridService }, { token: i25.RowReorderService }, { token: i26.DataMappingService }, { token: i27.GridAIRequestResponseService }, { token: i28.IdService }], target: i0.ɵɵFactoryTarget.Component });
2511
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: GridComponent, isStandalone: true, selector: "kendo-grid", inputs: { data: "data", pageSize: "pageSize", height: "height", rowHeight: "rowHeight", adaptiveMode: "adaptiveMode", detailRowHeight: "detailRowHeight", skip: "skip", scrollable: "scrollable", selectable: "selectable", sort: "sort", size: "size", trackBy: "trackBy", filter: "filter", group: "group", virtualColumns: "virtualColumns", filterable: "filterable", sortable: "sortable", pageable: "pageable", groupable: "groupable", gridResizable: "gridResizable", rowReorderable: "rowReorderable", navigable: "navigable", autoSize: "autoSize", rowClass: "rowClass", rowSticky: "rowSticky", rowSelected: "rowSelected", isRowSelectable: "isRowSelectable", cellSelected: "cellSelected", resizable: "resizable", reorderable: "reorderable", loading: "loading", columnMenu: "columnMenu", hideHeader: "hideHeader", showInactiveTools: "showInactiveTools", isDetailExpanded: "isDetailExpanded", isGroupExpanded: "isGroupExpanded", dataLayoutMode: "dataLayoutMode" }, outputs: { filterChange: "filterChange", pageChange: "pageChange", groupChange: "groupChange", sortChange: "sortChange", selectionChange: "selectionChange", rowReorder: "rowReorder", dataStateChange: "dataStateChange", gridStateChange: "gridStateChange", groupExpand: "groupExpand", groupCollapse: "groupCollapse", detailExpand: "detailExpand", detailCollapse: "detailCollapse", edit: "edit", cancel: "cancel", save: "save", remove: "remove", add: "add", cellClose: "cellClose", cellClick: "cellClick", pdfExport: "pdfExport", excelExport: "excelExport", columnResize: "columnResize", columnReorder: "columnReorder", columnVisibilityChange: "columnVisibilityChange", columnLockedChange: "columnLockedChange", columnStickyChange: "columnStickyChange", scrollBottom: "scrollBottom", contentScroll: "contentScroll" }, host: { properties: { "attr.dir": "this.dir", "class.k-grid": "this.hostClass", "class.k-grid-sm": "this.sizeSmallClass", "class.k-grid-md": "this.sizeMediumClass", "class.k-grid-stack": "this.stackedClass", "class.k-grid-lockedcolumns": "this.lockedClasses", "class.k-grid-virtual": "this.virtualClasses", "class.k-grid-no-scrollbar": "this.noScrollbarClass", "class.k-grid-resizable": "this.isResizable", "style.minWidth": "this.minWidth", "style.maxWidth": "this.maxWidth", "style.minHeight": "this.minHeight", "style.maxHeight": "this.maxHeight" } }, providers: [
2512
- BrowserSupportService,
2513
- LocalizationService,
2514
- ColumnInfoService,
2515
- SelectionService,
2516
- CellSelectionService,
2517
- DetailsService,
2518
- GroupsService,
2519
- GroupInfoService,
2520
- ChangeNotificationService,
2521
- EditService,
2522
- PDFService,
2523
- SuspendService,
2524
- {
2525
- provide: CELL_CONTEXT,
2526
- useValue: EMPTY_CELL_CONTEXT
2527
- },
2528
- {
2529
- provide: L10N_PREFIX,
2530
- useValue: 'kendo.grid'
2531
- },
2532
- FilterService,
2533
- ResponsiveService,
2534
- PagerContextService,
2535
- PagerNavigationService,
2536
- ExcelService,
2537
- ScrollSyncService,
2538
- ResizeService,
2539
- LocalDataChangesService,
2540
- DomEventsService,
2541
- ColumnResizingService,
2542
- SinglePopupService,
2543
- DragAndDropService,
2544
- DragHintService,
2545
- DropCueService,
2546
- ColumnReorderService,
2547
- NavigationService,
2548
- FocusRoot,
2549
- IdService,
2550
- CellSelectionAggregateService,
2551
- ScrollRequestService,
2552
- SortService,
2553
- ContextService,
2554
- SizingOptionsService,
2555
- RowReorderService,
2556
- ClipboardService,
2557
- GridAIRequestResponseService,
2558
- RowspanService,
2559
- AdaptiveGridService,
2560
- ColumnMenuService,
2561
- MenuTabbingService,
2562
- DataMappingService
2563
- ], queries: [{ propertyName: "columns", predicate: ColumnBase }, { propertyName: "detailTemplateChildren", predicate: DetailTemplateDirective }, { propertyName: "cellLoadingTemplateChildren", predicate: CellLoadingTemplateDirective }, { propertyName: "loadingTemplateChildren", predicate: LoadingTemplateDirective }, { propertyName: "statusBarTemplateChildren", predicate: StatusBarTemplateDirective }, { propertyName: "noRecordsTemplateChildren", predicate: NoRecordsTemplateDirective }, { propertyName: "pagerTemplateChildren", predicate: PagerTemplateDirective }, { propertyName: "toolbarTemplateChildren", predicate: ToolbarTemplateDirective }, { propertyName: "columnMenuTemplates", predicate: ColumnMenuTemplateDirective }], viewQueries: [{ propertyName: "lockedHeader", first: true, predicate: ["lockedHeader"], descendants: true }, { propertyName: "header", first: true, predicate: ["header"], descendants: true }, { propertyName: "ariaRoot", first: true, predicate: ["ariaRoot"], descendants: true, static: true }, { propertyName: "dragTargetContainer", first: true, predicate: DragTargetContainerDirective, descendants: true }, { propertyName: "dropTargetContainer", first: true, predicate: DropTargetContainerDirective, descendants: true }, { propertyName: "dialogContainer", first: true, predicate: ["dialogContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "windowContainer", first: true, predicate: ["windowContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "adaptiveRenderer", first: true, predicate: AdaptiveRendererComponent, descendants: true }, { propertyName: "listComponent", first: true, predicate: ListComponent, descendants: true }, { propertyName: "footer", predicate: ["footer"], descendants: true }], exportAs: ["kendoGrid"], usesOnChanges: true, ngImport: i0, template: `
2564
- <ng-container kendoGridLocalizedMessages
2565
- i18n-groupPanelEmpty="kendo.grid.groupPanelEmpty|The label visible in the Grid group panel when it is empty"
2566
- groupPanelEmpty="Drag a column header and drop it here to group by that column"
2567
-
2568
- i18n-noRecords="kendo.grid.noRecords|The label visible in the Grid when there are no records"
2569
- noRecords="No records available."
2570
-
2571
- i18n-pagerLabel="kendo.grid.pagerLabel|The label for the Grid pager"
2572
- pagerLabel="{{ 'Page navigation, page {currentPage} of {totalPages}' }}"
2573
-
2574
- i18n-pagerFirstPage="kendo.grid.pagerFirstPage|The label for the first page button in Grid pager"
2575
- pagerFirstPage="Go to the first page"
2576
-
2577
- i18n-pagerPreviousPage="kendo.grid.pagerPreviousPage|The label for the previous page button in Grid pager"
2578
- pagerPreviousPage="Go to the previous page"
2579
-
2580
- i18n-pagerNextPage="kendo.grid.pagerNextPage|The label for the next page button in Grid pager"
2581
- pagerNextPage="Go to the next page"
2582
-
2583
- i18n-pagerLastPage="kendo.grid.pagerLastPage|The label for the last page button in Grid pager"
2584
- pagerLastPage="Go to the last page"
2585
-
2586
- i18n-pagerPage="kendo.grid.pagerPage|The label before the current page number in the Grid pager"
2587
- pagerPage="Page"
2588
-
2589
- i18n-pagerOf="kendo.grid.pagerOf|The label before the total pages number in the Grid pager"
2590
- pagerOf="of"
2591
-
2592
- i18n-pagerItems="kendo.grid.pagerItems|The label after the total pages number in the Grid pager"
2593
- pagerItems="items"
2594
-
2595
- i18n-pagerPageNumberInputTitle="kendo.grid.pagerPageNumberInputTitle|The label for the pager input in the Grid pager"
2596
- pagerPageNumberInputTitle="Page Number"
2597
-
2598
- i18n-pagerItemsPerPage="kendo.grid.pagerItemsPerPage|The label for the page size chooser in the Grid pager"
2599
- pagerItemsPerPage="items per page"
2600
-
2601
- i18n-pagerInputLabel="kendo.grid.pagerInputLabel|The text of the aria-label attribute applied to the input element for entering the page number"
2602
- pagerInputLabel="Type a page number"
2603
-
2604
- i18n-filter="kendo.grid.filter|The label of the filter cell or icon"
2605
- filter="Filter"
2606
-
2607
- i18n-filterInputLabel="kendo.grid.filterInputLabel|The label of the filter row and menu inputs"
2608
- filterInputLabel="{{ '{columnName} Filter' }}"
2609
-
2610
- i18n-filterMenuTitle="kendo.grid.filterMenuTitle|The title of the filter menu icon"
2611
- filterMenuTitle="{{ '{columnName} Filter Menu' }}"
2612
-
2613
- i18n-filterMenuOperatorsDropDownLabel="kendo.grid.filterMenuOperatorsDropDownLabel|The label of the filter menu operators dropdown"
2614
- filterMenuOperatorsDropDownLabel="{{ '{columnName} Filter Operators' }}"
2615
-
2616
- i18n-filterCellOperatorLabel="kendo.grid.filterCellOperatorLabel|The label of the filter cell operators dropdown"
2617
- filterCellOperatorLabel="{{ 'Filter cell operators for {columnName}' }}"
2618
-
2619
- i18n-booleanFilterCellLabel="kendo.grid.booleanFilterCellLabel|The label of the boolean filter cell dropdown"
2620
- booleanFilterCellLabel="{{ 'Boolean filter cell for {columnName}' }}"
2621
-
2622
- i18n-filterMenuLogicDropDownLabel="kendo.grid.filterMenuLogicDropDownLabel|The label of the filter menu logic dropdown"
2623
- filterMenuLogicDropDownLabel="{{ '{columnName} Filter Logic' }}"
2624
-
2625
- i18n-filterEqOperator="kendo.grid.filterEqOperator|The text of the equal filter operator"
2626
- filterEqOperator="Is equal to"
2627
-
2628
- i18n-filterNotEqOperator="kendo.grid.filterNotEqOperator|The text of the not equal filter operator"
2629
- filterNotEqOperator="Is not equal to"
2630
-
2631
- i18n-filterIsNullOperator="kendo.grid.filterIsNullOperator|The text of the is null filter operator"
2632
- filterIsNullOperator="Is null"
2633
-
2634
- i18n-filterIsNotNullOperator="kendo.grid.filterIsNotNullOperator|The text of the is not null filter operator"
2635
- filterIsNotNullOperator="Is not null"
2636
-
2637
- i18n-filterIsEmptyOperator="kendo.grid.filterIsEmptyOperator|The text of the is empty filter operator"
2638
- filterIsEmptyOperator="Is empty"
2639
-
2640
- i18n-filterIsNotEmptyOperator="kendo.grid.filterIsNotEmptyOperator|The text of the is not empty filter operator"
2641
- filterIsNotEmptyOperator="Is not empty"
2642
-
2643
- i18n-filterStartsWithOperator="kendo.grid.filterStartsWithOperator|The text of the starts with filter operator"
2644
- filterStartsWithOperator="Starts with"
2645
-
2646
- i18n-filterContainsOperator="kendo.grid.filterContainsOperator|The text of the contains filter operator"
2647
- filterContainsOperator="Contains"
2648
-
2649
- i18n-filterNotContainsOperator="kendo.grid.filterNotContainsOperator|The text of the does not contain filter operator"
2650
- filterNotContainsOperator="Does not contain"
2651
-
2652
- i18n-filterEndsWithOperator="kendo.grid.filterEndsWithOperator|The text of the ends with filter operator"
2653
- filterEndsWithOperator="Ends with"
2654
-
2655
- i18n-filterGteOperator="kendo.grid.filterGteOperator|The text of the greater than or equal filter operator"
2656
- filterGteOperator="Is greater than or equal to"
2657
-
2658
- i18n-filterGtOperator="kendo.grid.filterGtOperator|The text of the greater than filter operator"
2659
- filterGtOperator="Is greater than"
2660
-
2661
- i18n-filterLteOperator="kendo.grid.filterLteOperator|The text of the less than or equal filter operator"
2662
- filterLteOperator="Is less than or equal to"
2663
-
2664
- i18n-filterLtOperator="kendo.grid.filterLtOperator|The text of the less than filter operator"
2665
- filterLtOperator="Is less than"
2666
-
2667
- i18n-filterIsTrue="kendo.grid.filterIsTrue|The text of the IsTrue boolean filter option"
2668
- filterIsTrue="Is True"
2669
-
2670
- i18n-filterIsFalse="kendo.grid.filterIsFalse|The text of the IsFalse boolean filter option"
2671
- filterIsFalse="Is False"
2672
-
2673
- i18n-filterBooleanAll="kendo.grid.filterBooleanAll|The text of the (All) boolean filter option"
2674
- filterBooleanAll="(All)"
2675
-
2676
- i18n-filterAfterOrEqualOperator="kendo.grid.filterAfterOrEqualOperator|The text of the after or equal date filter operator"
2677
- filterAfterOrEqualOperator="Is after or equal to"
2678
-
2679
- i18n-filterAfterOperator="kendo.grid.filterAfterOperator|The text of the after date filter operator"
2680
- filterAfterOperator="Is after"
2681
-
2682
- i18n-filterBeforeOperator="kendo.grid.filterBeforeOperator|The text of the before date filter operator"
2683
- filterBeforeOperator="Is before"
2684
-
2685
- i18n-filterBeforeOrEqualOperator="kendo.grid.filterBeforeOrEqualOperator|The text of the before or equal date filter operator"
2686
- filterBeforeOrEqualOperator="Is before or equal to"
2687
-
2688
- i18n-filterFilterButton="kendo.grid.filterFilterButton|The text of the filter button"
2689
- filterFilterButton="Filter"
2690
-
2691
- i18n-filterClearButton="kendo.grid.filterClearButton|The text of the clear filter button"
2692
- filterClearButton="Clear"
2693
-
2694
- i18n-sortClearButton="kendo.grid.sortClearButton|The text of the clear sort button located in the Sort Toolbar Tool and adaptive Sort Toolbar Tool"
2695
- sortClearButton="Clear sorting"
2696
-
2697
- i18n-adaptiveCloseButtonTitle="kendo.grid.adaptiveCloseButtonTitle|The title of the Close button of the ActionSheet that is rendered instead of the Popup when using small screen devices in adaptive mode"
2698
- adaptiveCloseButtonTitle="Close"
2699
-
2700
- i18n-adaptiveBackButtonTitle="kendo.grid.adaptiveBackButtonTitle|The title of the Back button of the ActionSheet that is rendered instead of the Popup when using small screen devices in adaptive mode"
2701
- adaptiveBackButtonTitle="Back"
2702
-
2703
- i18n-filterClearAllButton="kendo.grid.filterClearAllButton|The text of the clear all filters button located in the Filter Toolbar Tool and adaptive Filter Toolbar Tool"
2704
- filterClearAllButton="Clear all filters"
2705
-
2706
- i18n-groupClearButton="kendo.grid.groupClearButton|The text of the clear grouping button in the Group Toolbar Tool and adaptive Group Toolbar Tool"
2707
- groupClearButton="Clear grouping"
2708
-
2709
- i18n-sortDoneButton="kendo.grid.sortDoneButton|The text of the done sort button"
2710
- sortDoneButton="Done"
2711
-
2712
- i18n-groupDoneButton="kendo.grid.groupDoneButton|The text of the done group button in the adaptive Group Toolbar Tool"
2713
- groupDoneButton="Done"
2714
-
2715
- i18n-filterAndLogic="kendo.grid.filterAndLogic|The text of the And filter logic"
2716
- filterAndLogic="And"
2717
-
2718
- i18n-filterOrLogic="kendo.grid.filterOrLogic|The text of the Or filter logic"
2719
- filterOrLogic="Or"
2720
-
2721
- i18n-filterToolbarToolText="kendo.grid.filterToolbarToolText|The button text of the Filter toolbar tool"
2722
- filterToolbarToolText="Filter"
2723
-
2724
- i18n-loading="kendo.grid.loading|The loading text"
2725
- loading="Loading"
2726
-
2727
- i18n-gridLabel="kendo.grid.gridLabel|The Grid aria-label"
2728
- gridLabel="Data table"
2729
-
2730
- i18n-columnMenu="kendo.grid.columnMenu|The title of the column menu icon"
2731
- columnMenu="{{ '{columnName} Column Menu' }}"
2732
-
2733
- i18n-columns="kendo.grid.columns|The text for the Grid Column Chooser and Column Chooser toolbar tool"
2734
- columns="Columns"
2735
-
2736
- i18n-columnsSubtitle="kendo.grid.columnsSubtitle|The subtitle for the adaptive Grid Column Chooser and Column Chooser toolbar tool"
2737
- columnsSubtitle="Selected fields are visible"
2738
-
2739
- i18n-adaptiveFilterTitle="kendo.grid.adaptiveFilterTitle|The title that is displayed in the adaptive Filter Toolbar Tool and Filter Menu"
2740
- adaptiveFilterTitle="Filter by"
2741
-
2742
- i18n-adaptiveFilterOperatorsTitle="kendo.grid.adaptiveFilterOperatorsTitle|The title that is displayed in the Operators Action Sheet"
2743
- adaptiveFilterOperatorsTitle="Operators"
2744
-
2745
- i18n-adaptiveSortTitle="kendo.grid.adaptiveSortTitle|The title that is displayed in the adaptive Sort Toolbar Tool"
2746
- adaptiveSortTitle="Sort by"
2747
-
2748
- i18n-adaptiveGroupTitle="kendo.grid.adaptiveGroupTitle|The title that is displayed in the adaptive Group Toolbar Tool."
2749
- adaptiveGroupTitle="Group by"
2750
-
2751
- i18n-lock="kendo.grid.lock|The text shown in the column menu for the lock item"
2752
- lock="Lock"
2753
-
2754
- i18n-unlock="kendo.grid.unlock|The text shown in the column menu for the unlock item"
2755
- unlock="Unlock"
2756
-
2757
- i18n-setColumnPosition="kendo.grid.setColumnPosition|The text shown in the column menu for the set column position item"
2758
- setColumnPosition="Set Column Position"
2759
-
2760
- i18n-stick="kendo.grid.stick|The text shown in the column menu for the stick item"
2761
- stick="Stick"
2762
-
2763
- i18n-unstick="kendo.grid.unstick|The text shown in the column menu for the unstick item"
2764
- unstick="Unstick"
2765
-
2766
- i18n-sortable="kendo.grid.sortable|The label of the sort icon"
2767
- sortable="Sortable"
2768
-
2769
- i18n-sortAscending="kendo.grid.sortAscending|The text shown in the column menu for the sort ascending item"
2770
- sortAscending="Sort Ascending"
2771
-
2772
- i18n-sortDescending="kendo.grid.sortDescending|The text shown in the column menu for the sort descending item"
2773
- sortDescending="Sort Descending"
2774
-
2775
- i18n-autosizeAllColumns="kendo.grid.autosizeAllColumns|The text shown in the column menu for the autosize all columns item"
2776
- autosizeAllColumns="Autosize All Columns"
2777
-
2778
- i18n-autosizeThisColumn="kendo.grid.autosizeThisColumn|The text shown in the column menu for the autosize this column item"
2779
- autosizeThisColumn="Autosize This Column"
2780
-
2781
- i18n-sortedDefault="kendo.grid.sortedDefault|The status announcement when a column is no longer sorted"
2782
- sortedDefault="Not Sorted"
2783
-
2784
- i18n-sortedAscending="kendo.grid.sortedAscending|The title of the Group Chip indicating the ascending sorting order of the groups"
2785
- sortedAscending="Sorted Ascending"
2786
-
2787
- i18n-sortedDescending="kendo.grid.sortedDescending|The title of the Group Chip indicating the descending sorting order of the groups"
2788
- sortedDescending="Sorted Descending"
2789
-
2790
- i18n-columnsApply="kendo.grid.columnsApply|The text shown in the column menu or column chooser for the columns apply button"
2791
- columnsApply="Apply"
2792
-
2793
- i18n-columnsReset="kendo.grid.columnsReset|The text shown in the column menu or column chooser for the columns reset button"
2794
- columnsReset="Reset"
2795
-
2796
- i18n-detailExpand="kendo.grid.detailExpand|The title of the expand icon of detail rows. Applies also to the expand button text in stacked mode."
2797
- detailExpand="Expand Details"
2798
-
2799
- i18n-detailCollapse="kendo.grid.detailCollapse|The title of the collapse icon of detail rows. Applies also to the collapse button text in stacked mode."
2800
- detailCollapse="Collapse Details"
2801
-
2802
- i18n-filterDateToday="kendo.grid.filterDateToday|The text of the Today button of the Date filter."
2803
- filterDateToday="TODAY"
2804
-
2805
- i18n-filterDateToggle="kendo.grid.filterDateToggle|The title of the Toggle button of the Date filter."
2806
- filterDateToggle="Toggle Calendar"
2807
-
2808
- i18n-filterNumericDecrement="kendo.grid.filterNumericDecrement|The title of the Decrement button of the Numeric filter."
2809
- filterNumericDecrement="Decrement"
2810
-
2811
- i18n-filterNumericIncrement="kendo.grid.filterNumericIncrement|The title of the Increment button of the Numeric filter."
2812
- filterNumericIncrement="Increment"
2813
-
2814
- i18n-selectionCheckboxLabel="kendo.grid.selectionCheckboxLabel|The labels of the checkbox column checkboxes."
2815
- selectionCheckboxLabel="Select Row"
2816
-
2817
- i18n-selectAllCheckboxLabel="kendo.grid.selectAllCheckboxLabel|The label of the checkbox column select all checkbox."
2818
- selectAllCheckboxLabel="Select All Rows"
2819
-
2820
- i18n-sortToolbarToolText="kendo.grid.sortToolbarToolText|The button text of the Sort toolbar tool."
2821
- sortToolbarToolText="Sort"
2822
-
2823
- i18n-groupCollapse="kendo.grid.groupCollapse|The text of the title and aria-label attributes applied to the collapse icon of group rows."
2824
- groupCollapse="Collapse Group"
2825
-
2826
- i18n-groupExpand="kendo.grid.groupExpand|The text of the title and aria-label attributes applied to the expand icon of group rows."
2827
- groupExpand="Expand Group"
2828
-
2829
- i18n-pagerSelectPage="kendo.grid.pagerSelectPage|The text of the title and aria-label attributes applied to the page chooser in the Grid Pager"
2830
- pagerSelectPage="Select page"
2831
-
2832
- i18n-topToolbarLabel="kendo.grid.topToolbarLabel|The label for the Grid top toolbar"
2833
- topToolbarLabel="Top toolbar"
2834
-
2835
- i18n-bottomToolbarLabel="kendo.grid.bottomToolbarLabel|The label for the Grid bottom toolbar"
2836
- bottomToolbarLabel="Bottom toolbar"
2837
-
2838
- i18n-editToolbarToolText="kendo.grid.editToolbarToolText|The text for the Grid Edit toolbar tool"
2839
- editToolbarToolText="Edit"
2840
-
2841
- i18n-saveToolbarToolText="kendo.grid.saveToolbarToolText|The text for the Grid Save toolbar tool"
2842
- saveToolbarToolText="Save"
2843
-
2844
- i18n-addToolbarToolText="kendo.grid.addToolbarToolText|The text for the Grid Add toolbar tool"
2845
- addToolbarToolText="Add"
2846
-
2847
- i18n-cancelToolbarToolText="kendo.grid.cancelToolbarToolText|The text for the Grid Cancel toolbar tool"
2848
- cancelToolbarToolText="Cancel"
2849
-
2850
- i18n-removeToolbarToolText="kendo.grid.removeToolbarToolText|The text for the Grid Remove toolbar tool"
2851
- removeToolbarToolText="Delete"
2852
-
2853
- i18n-excelExportToolbarToolText="kendo.grid.excelExportToolbarToolText|The text for the Grid Excel export toolbar tool"
2854
- excelExportToolbarToolText="Excel Export"
2855
-
2856
- i18n-pdfExportToolbarToolText="kendo.grid.pdfExportToolbarToolText|The text for the Grid PDF export toolbar tool"
2857
- pdfExportToolbarToolText="PDF Export"
2858
-
2859
- i18n-groupPanelLabel="kendo.grid.groupPanelLabel|The label for the Grid group panel toolbar"
2860
- groupPanelLabel="Group panel"
2861
-
2862
- i18n-dragRowHandleLabel="kendo.grid.dragRowHandleLabel|The label for the Grid drag row handle"
2863
- dragRowHandleLabel="Drag row"
2864
-
2865
- i18n-columnMenuFilterTabTitle="kendo.grid.columnMenuFilterTabTitle|The title for the column menu Filter tab"
2866
- columnMenuFilterTabTitle="Filter"
2867
-
2868
- i18n-columnMenuGeneralTabTitle="kendo.grid.columnMenuGeneralTabTitle|The title for the column menu General tab"
2869
- columnMenuGeneralTabTitle="General"
2870
-
2871
- i18n-columnMenuColumnsTabTitle="kendo.grid.columnMenuColumnsTabTitle|The title for the column menu Columns tab"
2872
- columnMenuColumnsTabTitle="Columns"
2873
-
2874
- i18n-groupChipMenuPrevious="kendo.grid.groupChipMenuPrevious|The text for the Group pane Chip Menu Move as previous item"
2875
- groupChipMenuPrevious="Move as previous"
2876
-
2877
- i18n-groupChipMenuNext="kendo.grid.groupChipMenuNext|The text for the Group pane Chip Menu Move as next item"
2878
- groupChipMenuNext="Move as next"
2879
-
2880
- i18n-groupToolbarToolText="kendo.grid.groupToolbarToolText|The button text of the Group toolbar tool"
2881
- groupToolbarToolText="Group"
2882
-
2883
- i18n-formValidationErrorText="kendo.grid.formValidationErrorText|The default text of a form validation error when using external editing."
2884
- formValidationErrorText="{{ 'The {fieldName} field has {errorName} validation error' }}"
2885
-
2886
- i18n-removeConfirmationDialogTitle="kendo.grid.removeConfirmationDialogTitle|The title of the built-in remove item confirmation Dialog"
2887
- removeConfirmationDialogTitle="Please confirm"
2888
-
2889
- i18n-removeConfirmationDialogContent="kendo.grid.removeConfirmationDialogContent|The content of the built-in remove item confirmation Dialog"
2890
- removeConfirmationDialogContent="Are you sure you want to delete this item?"
2891
-
2892
- i18n-removeConfirmationDialogConfirmText="kendo.grid.removeConfirmationDialogConfirmText|The text of the built-in remove item confirmation Dialog confirm action button"
2893
- removeConfirmationDialogConfirmText="Yes"
2894
-
2895
- i18n-removeConfirmationDialogRejectText="kendo.grid.removeConfirmationDialogRejectText|The text of the built-in remove item confirmation Dialog reject action button"
2896
- removeConfirmationDialogRejectText="No"
2897
-
2898
- i18n-externalEditingTitle="kendo.grid.externalEditingTitle|The title of the built-in external editing form container when editing an item"
2899
- externalEditingTitle="Edit"
2900
-
2901
- i18n-externalEditingAddTitle="kendo.grid.externalEditingAddTitle|The title of the built-in external editing form container when adding a new item"
2902
- externalEditingAddTitle="Add"
2903
-
2904
- i18n-externalEditingSaveText="kendo.grid.externalEditingSaveText|The text of the external editing form Save button"
2905
- externalEditingSaveText="Save"
2906
-
2907
- i18n-externalEditingCancelText="kendo.grid.externalEditingCancelText|The text of the external editing form Cancel button"
2908
- externalEditingCancelText="Cancel"
2909
-
2910
- i18n-aiAssistantToolbarToolText="kendo.grid.aiAssistantToolbarToolText|The text of the AI Assistant toolbar tool"
2911
- aiAssistantToolbarToolText="AI Assistant"
2912
-
2913
- i18n-aiAssistantWindowTitle="kendo.grid.aiAssistantWindowTitle|The text of the AI Assistant Window title"
2914
- aiAssistantWindowTitle="AI Assistant"
2915
-
2916
- i18n-aiAssistantApplyButtonText="kendo.grid.aiAssistantApplyButtonText|The text of the AI Assistant Apply button"
2917
- aiAssistantApplyButtonText="Apply"
2918
-
2919
- i18n-aiAssistantWindowCloseTitle="kendo.grid.aiAssistantWindowCloseTitle|The title of the AI Assistant Window close button"
2920
- aiAssistantWindowCloseTitle="Close"
2921
-
2922
- i18n-aiAssistantWindowMaximizeTitle="kendo.grid.aiAssistantWindowMaximizeTitle|The title of the AI Assistant Window maximize button"
2923
- aiAssistantWindowMaximizeTitle="Maximize"
2924
-
2925
- i18n-aiAssistantWindowMinimizeTitle="kendo.grid.aiAssistantWindowMinimizeTitle|The title of the AI Assistant Window minimize button"
2926
- aiAssistantWindowMinimizeTitle="Minimize"
2927
-
2928
- i18n-aiAssistantWindowRestoreTitle="kendo.grid.aiAssistantWindowRestoreTitle|The title of the AI Assistant Window restore button"
2929
- aiAssistantWindowRestoreTitle="Restore"
2930
-
2931
- i18n-aiAssistantOutputCardTitle="kendo.grid.aiAssistantOutputCardTitle|The title of the AI Assistant Prompt Output Card"
2932
- aiAssistantOutputCardTitle="Generated with AI"
2933
-
2934
- i18n-aiAssistantOutputCardBodyContent="kendo.grid.aiAssistantOutputCardBodyContent|The success message dispayed in the AI Assistant Prompt Output Card's body"
2935
- aiAssistantOutputCardBodyContent="Operation is successful. Data is:"
2936
-
2937
- i18n-aiAssistantSelectionNotEnabled="kendo.grid.aiAssistantSelectionNotEnabled|The message shown when AI selection requires the Grid selectable option"
2938
- aiAssistantSelectionNotEnabled="Selection can be applied only when the Grid selectable option is enabled."
2939
-
2940
- i18n-aiAssistantSelectionRowModeRequired="kendo.grid.aiAssistantSelectionRowModeRequired|The message shown when AI selection requires row selection mode"
2941
- aiAssistantSelectionRowModeRequired="Selection can be applied only when row selection mode is enabled."
2942
-
2943
- i18n-aiAssistantSelectionCellModeRequired="kendo.grid.aiAssistantSelectionCellModeRequired|The message shown when AI selection requires cell selection mode"
2944
- aiAssistantSelectionCellModeRequired="Selection can be applied only when cell selection mode is enabled."
2945
-
2946
- i18n-columnChooserSelectAll="kendo.grid.columnChooserSelectAll|The text for the Select all checkbox in the Column Chooser"
2947
- columnChooserSelectAll="Select all"
2948
-
2949
- i18n-columnChooserSelectedColumnsCount="kendo.grid.columnChooserSelectedColumnsCount|The text displayed in the Column Chooser for the number of selected columns"
2950
- columnChooserSelectedColumnsCount="{{ '{selectedColumnsCount} Selected items' }}"
2951
-
2952
- i18n-multiCheckboxFilterSearchPlaceholder="kendo.grid.multiCheckboxFilterSearchPlaceholder|The placeholder text for the multi-checkbox filter search input"
2953
- multiCheckboxFilterSearchPlaceholder="Search..."
2954
-
2955
- i18n-multiCheckboxFilterSelectAllLabel="kendo.grid.multiCheckboxFilterSelectAllLabel|The label for the multi-checkbox filter select all option"
2956
- multiCheckboxFilterSelectAllLabel="Select all"
2957
-
2958
- i18n-multiCheckboxFilterSelectedItemsCount="kendo.grid.multiCheckboxFilterSelectedItemsCount|The text for the multi-checkbox filter selected items count"
2959
- multiCheckboxFilterSelectedItemsCount="{{ '{selectedItemsCount} selected items' }}"
2960
- >
2961
- </ng-container>
2962
- @if (showTopToolbar) {
2963
- <kendo-grid-toolbar
2964
- [size]="size"
2965
- [attr.aria-label]="messageFor('topToolbarLabel')"
2966
- [navigable]="navigation.toolbarEnabled"
2967
- [attr.aria-controls]="ariaRootId"
2968
- position="top"></kendo-grid-toolbar>
2969
- }
2970
- <ng-content select="kendo-toolbar"></ng-content>
2971
- @if (showTopPager) {
2972
- <kendo-pager
2973
- #topPager
2974
- [navigable]="navigation.pagerEnabled"
2975
- class="k-grid-pager k-grid-pager-top"
2976
- [pageSize]="pageSize"
2977
- [total]="view.total"
2978
- [skip]="skip"
2979
- [size]="size"
2980
- [responsive]="normalizedPageableSettings.responsive && !pagerTemplate"
2981
- [buttonCount]="normalizedPageableSettings.buttonCount"
2982
- [info]="normalizedPageableSettings.info"
2983
- [pageSizeValues]="normalizedPageableSettings.pageSizes"
2984
- [previousNext]="normalizedPageableSettings.previousNext"
2985
- [type]="normalizedPageableSettings.type"
2986
- (pageChange)="notifyPageChange('pager', $event)"
2987
- (pagerInputVisibilityChange)="handlePagerVisibilityChange('showPagerInput', $event)"
2988
- (pageTextVisibilityChange)="handlePagerVisibilityChange('showPagerPageText', $event)"
2989
- (itemsTextVisibilityChange)="handlePagerVisibilityChange('showPagerItemsText', $event)">
2990
- <ng-template kendoPagerTemplate>
2991
- <ng-container
2992
- [ngTemplateOutlet]="pagerTemplate ? pagerTemplate?.templateRef : defaultPager"
2993
- [ngTemplateOutletContext]="topPager.templateContext"></ng-container>
2994
- </ng-template>
2995
- <kendo-pager-messages
2996
- [ariaLabel]="messageFor('pagerLabel')"
2997
- [firstPage]="messageFor('pagerFirstPage')"
2998
- [inputLabel]="messageFor('pagerInputLabel')"
2999
- [previousPage]="messageFor('pagerPreviousPage')"
3000
- [nextPage]="messageFor('pagerNextPage')"
3001
- [lastPage]="messageFor('pagerLastPage')"
3002
- [selectPage]="messageFor('pagerSelectPage')"
3003
- [page]="messageFor('pagerPage')"
3004
- [itemsPerPage]="messageFor('pagerItemsPerPage')"
3005
- [items]="messageFor('pagerItems')"
3006
- [of]="messageFor('pagerOf')"
3007
- [pageNumberInputTitle]="messageFor('pagerPageNumberInputTitle')">
3008
- </kendo-pager-messages>
3009
- </kendo-pager>
3010
- }
3011
- @if (showGroupPanel) {
3012
- <kendo-grid-group-panel
3013
- [navigable]="navigation.toolbarEnabled"
3014
- [text]="groupableEmptyText"
3015
- [groups]="group"
3016
- role="toolbar"
3017
- [attr.aria-label]="messageFor('groupPanelLabel')"
3018
- [attr.aria-controls]="ariaRootId"
3019
- (change)="groupChange.emit($event)">
3020
- </kendo-grid-group-panel>
3021
- }
3022
- <div #ariaRoot
3023
- class="k-grid-aria-root"
3024
- role="grid"
3025
- kendoDragTargetContainer
3026
- kendoDropTargetContainer
3027
- mode="manual"
3028
- [dragDisabled]="!rowReorderable"
3029
- [dropDisabled]="!rowReorderable"
3030
- [dragTargetFilter]="getDefaultSelectors('dragTarget')"
3031
- [dropTargetFilter]="getDefaultSelectors('dropTarget')"
3032
- [dragHandle]="getDefaultSelectors('handle')"
3033
- [hint]="{hintTemplate: customHintTemplate || defaultHint}"
3034
- [hintContext]="hintContext"
3035
- (onPress)="handleReorderEvents($event, 'press')"
3036
- (onDragStart)="handleReorderEvents($event, 'dragStart')"
3037
- (onDrag)="handleReorderEvents($event, 'drag')"
3038
- (onDragEnter)="handleReorderEvents($event, 'dragEnter')"
3039
- (onDragLeave)="handleReorderEvents($event, 'dragLeave')"
3040
- (onDragEnd)="handleReorderEvents($event, 'dragEnd')"
3041
- (onDrop)="handleReorderEvents($event, 'drop')"
3042
- [dragData]="gridData"
3043
- [id]="ariaRootId"
3044
- [attr.aria-label]="ariaLabel"
3045
- [attr.aria-rowcount]="ariaRowCount"
3046
- [attr.aria-colcount]="ariaColCount">
3047
- @if (isScrollable) {
3048
- @if (!hideHeader && !isStacked) {
3049
- <div
3050
- class="k-grid-header"
3051
- [class.k-grid-draggable-header]="groupable || reorderable"
3052
- role="presentation"
3053
- [style.padding]="headerPadding">
3054
- @if (isLocked) {
3055
- <div
3056
- #lockedHeader
3057
- role="presentation"
3058
- class="k-grid-header-locked"
3059
- [style.width.px]="lockedWidth">
3060
- <table
3061
- kendoGridResizableTable
3062
- [locked]="true"
3063
- role="presentation"
3064
- class="k-grid-header-table"
3065
- [style.width.px]="lockedWidth"
3066
- kendoGridTable
3067
- [size]="size">
3068
- <colgroup kendoGridColGroup
3069
- [columns]="$any(lockedLeafColumns)"
3070
- [groups]="group"
3071
- [detailTemplate]="detailTemplate">
3072
- </colgroup>
3073
- <thead kendoGridHeader
3074
- role="rowgroup"
3075
- [resizable]="resizable"
3076
- [scrollable]="true"
3077
- [columns]="$any(lockedColumns)"
3078
- [totalColumnLevels]="totalColumnLevels"
3079
- [sort]="sort"
3080
- [groups]="group"
3081
- [filter]="filter"
3082
- [filterable]="filterable"
3083
- [groupable]="showGroupPanel"
3084
- [reorderable]="reorderable"
3085
- [sortable]="sortable"
3086
- [columnMenu]="columnMenuOptions"
3087
- [columnMenuTemplate]="columnMenuTemplate"
3088
- [totalColumnsCount]="leafColumns.length"
3089
- [totalColumns]="columnsContainer"
3090
- [detailTemplate]="detailTemplate"
3091
- [tabIndex]="navigation.tableEnabled ? '-1' : '0'">
3092
- </thead>
3093
- </table>
3094
- </div>
3095
- }
3096
- <div #header class="k-grid-header-wrap" role="presentation" data-scrollable
3097
- [kendoGridResizableContainer]="lockedLeafColumns.length > 0"
3098
- [lockedWidth]="lockedWidth + scrollbarWidth + 2">
3099
- <table
3100
- role="presentation"
3101
- class="k-grid-header-table"
3102
- [style.width.px]="nonLockedWidth"
3103
- kendoGridResizableTable
3104
- [virtualColumns]="virtualColumns"
3105
- kendoGridTable
3106
- [size]="size">
3107
- <colgroup kendoGridColGroup
3108
- [columns]="headerLeafColumns"
3109
- [groups]="isLocked ? [] : group"
3110
- [detailTemplate]="detailTemplate">
3111
- </colgroup>
3112
- <thead kendoGridHeader
3113
- [resizable]="resizable"
3114
- role="rowgroup"
3115
- [scrollable]="true"
3116
- [columns]="headerColumns"
3117
- [totalColumnLevels]="totalColumnLevels"
3118
- [sort]="sort"
3119
- [filter]="filter"
3120
- [filterable]="filterable"
3121
- [groupable]="showGroupPanel"
3122
- [reorderable]="reorderable"
3123
- [groups]="isLocked ? [] : group"
3124
- [sortable]="sortable"
3125
- [columnMenu]="columnMenuOptions"
3126
- [columnMenuTemplate]="columnMenuTemplate"
3127
- [lockedColumnsCount]="lockedLeafColumns.length"
3128
- [totalColumnsCount]="leafColumns.length"
3129
- [totalColumns]="columnsContainer"
3130
- [detailTemplate]="detailTemplate"
3131
- [tabIndex]="navigation.tableEnabled ? '-1' : '0'">
3132
- </thead>
3133
- </table>
3134
- @if (virtualColumns) {
3135
- <div class="k-width-container" role="presentation">
3136
- <div [style.width.px]="columnsContainer.unlockedWidth"></div>
3137
- </div>
3138
- }
3139
- </div>
3140
- </div>
3141
- }
3142
- <kendo-grid-list
3143
- [data]="$any(view)"
3144
- [rowHeight]="rowHeight"
3145
- [detailRowHeight]="detailRowHeight"
3146
- [total]="totalCount"
3147
- [take]="pageSize"
3148
- [groups]="group"
3149
- [groupable]="groupable"
3150
- [skip]="skip"
3151
- [trackBy]="trackBy"
3152
- [columns]="columnsContainer"
3153
- [selectable]="selectable"
3154
- [filterable]="filterable"
3155
- [detailTemplate]="detailTemplate"
3156
- [noRecordsTemplate]="noRecordsTemplate"
3157
- [size]="size"
3158
- (pageChange)="notifyPageChange('list', $event)"
3159
- [rowClass]="rowClass"
3160
- [rowSticky]="rowSticky"
3161
- [loading]="loading"
3162
- [isVirtual]="isVirtual"
3163
- [cellLoadingTemplate]="cellLoadingTemplate?.templateRef"
3164
- [loadingTemplate]="loadingTemplate?.templateRef"
3165
- [virtualColumns]="virtualColumns"
3166
- (scrollBottom)="notifyScrollBottom()"
3167
- (contentScroll)="contentScroll.emit($event)"
3168
- kendoDraggable
3169
- kendoGridSelectionMarquee
3170
- [enableDrag]="marqueeSelection"
3171
- [sort]="sort">
3172
- </kendo-grid-list>
3173
- @if (showFooter) {
3174
- <div
3175
- class="k-grid-footer"
3176
- [style.padding]="headerPadding">
3177
- @if (lockedLeafColumns.length && !isStacked) {
3178
- <div
3179
- class="k-grid-footer-locked"
3180
- [style.width.px]="lockedWidth">
3181
- <table
3182
- role="presentation"
3183
- class="k-grid-footer-table"
3184
- kendoGridResizableTable
3185
- [locked]="true"
3186
- [style.width.px]="lockedWidth"
3187
- kendoGridTable
3188
- [size]="size">
3189
- @if (!isStacked) {
3190
- <colgroup kendoGridColGroup
3191
- [columns]="$any(lockedLeafColumns)"
3192
- [groups]="group"
3193
- [detailTemplate]="detailTemplate">
3194
- </colgroup>
3195
- }
3196
- <tfoot kendoGridFooter
3197
- [scrollable]="true"
3198
- [groups]="group"
3199
- [columns]="$any(lockedLeafColumns)"
3200
- [detailTemplate]="detailTemplate"
3201
- [logicalRowIndex]="ariaRowCount"
3202
- [totalColumns]="columnsContainer"
3203
- [totalColumnsCount]="leafColumns.length">
3204
- </tfoot>
3205
- </table>
3206
- </div>
3207
- }
3208
- <div #footer
3209
- class="k-grid-footer-wrap" data-scrollable
3210
- [kendoGridResizableContainer]="lockedLeafColumns.length > 0 && !isStacked"
3211
- [lockedWidth]="lockedWidth + scrollbarWidth + 3">
3212
- <table
3213
- role="presentation"
3214
- class="k-grid-footer-table"
3215
- [style.width.px]="nonLockedWidth"
3216
- kendoGridTable
3217
- kendoGridResizableTable
3218
- [size]="size">
3219
- @if (!isStacked) {
3220
- <colgroup kendoGridColGroup
3221
- [columns]="$any(headerLeafColumns)"
3222
- [groups]="isLocked ? [] : group"
3223
- [detailTemplate]="detailTemplate">
3224
- </colgroup>
3225
- }
3226
- <tfoot kendoGridFooter
3227
- [logicalRowIndex]="ariaRowCount"
3228
- [scrollable]="true"
3229
- [groups]="isLocked ? [] : group"
3230
- [columns]="$any(headerColumns)"
3231
- [lockedColumnsCount]="isStacked ? 0 : lockedLeafColumns.length"
3232
- [detailTemplate]="detailTemplate"
3233
- [totalColumns]="columnsContainer"
3234
- [totalColumnsCount]="leafColumns.length">
3235
- </tfoot>
3236
- </table>
3237
- </div>
3238
- </div>
3239
- }
3240
- }
3241
- @if (!isScrollable) {
3242
- <table
3243
- [style.table-layout]="resizable ? 'fixed' : null"
3244
- kendoGridTable
3245
- kendoGridResizableTable
3246
- class="k-grid-table"
3247
- role="presentation"
3248
- [size]="size">
3249
- <colgroup kendoGridColGroup
3250
- [columns]="$any(leafColumns)"
3251
- [groups]="group"
3252
- [sort]="sort"
3253
- [detailTemplate]="detailTemplate">
3254
- </colgroup>
3255
- @if (!hideHeader && !isStacked) {
3256
- <thead kendoGridHeader
3257
- class="k-grid-header"
3258
- [class.k-grid-draggable-header]="groupable || reorderable"
3259
- role="rowgroup"
3260
- [resizable]="resizable"
3261
- [scrollable]="false"
3262
- [columns]="$any(visibleColumns)"
3263
- [totalColumnLevels]="totalColumnLevels"
3264
- [totalColumns]="columnsContainer"
3265
- [groups]="group"
3266
- [groupable]="showGroupPanel"
3267
- [reorderable]="reorderable"
3268
- [sort]="sort"
3269
- [sortable]="sortable"
3270
- [filter]="filter"
3271
- [filterable]="filterable"
3272
- [columnMenu]="columnMenuOptions"
3273
- [columnMenuTemplate]="columnMenuTemplate"
3274
- [detailTemplate]="detailTemplate"
3275
- [tabIndex]="navigation.tableEnabled ? '-1' : '0'">
3276
- </thead>
3277
- }
3278
- <tbody kendoGridTableBody
3279
- [isLoading]="loading"
3280
- [rowHeight]="rowHeight"
3281
- [detailRowHeight]="detailRowHeight"
3282
- [groups]="group"
3283
- [rowsToRender]="rowsToRender"
3284
- [skip]="skip"
3285
- [columns]="$any(leafColumns)"
3286
- [totalColumnsCount]="leafColumns.length"
3287
- [totalColumns]="columnsContainer"
3288
- [selectable]="selectable"
3289
- [filterable]="filterable"
3290
- [noRecordsTemplate]="noRecordsTemplate"
3291
- [detailTemplate]="detailTemplate"
3292
- [trackBy]="trackBy"
3293
- [rowClass]="rowClass"
3294
- kendoDraggable
3295
- kendoGridSelectionMarquee
3296
- [enableDrag]="marqueeSelection">
3297
- </tbody>
3298
- @if (showFooter) {
3299
- <tfoot kendoGridFooter
3300
- [scrollable]="false"
3301
- [logicalRowIndex]="ariaRowCount"
3302
- [groups]="group"
3303
- [columns]="$any(leafColumns)"
3304
- [detailTemplate]="detailTemplate"
3305
- [totalColumns]="columnsContainer"
3306
- [totalColumnsCount]="leafColumns.length">
3307
- </tfoot>
3308
- }
3309
- </table>
3310
- }
3311
- @if (loading) {
3312
- <div [loadingTemplate]="loadingTemplate" kendoGridLoading></div>
3313
- }
3314
- </div>
3315
- @if (showStatusBar) {
3316
- <kendo-grid-status-bar
3317
- [statusBarTemplate]="statusBarTemplate">
3318
- </kendo-grid-status-bar>
3319
- }
3320
- @if (showBottomPager) {
3321
- <kendo-pager
3322
- #bottomPager
3323
- class="k-grid-pager"
3324
- [navigable]="navigation.pagerEnabled"
3325
- [pageSize]="pageSize"
3326
- [total]="view.total"
3327
- [skip]="skip"
3328
- [size]="size"
3329
- [responsive]="normalizedPageableSettings.responsive && !pagerTemplate"
3330
- [buttonCount]="normalizedPageableSettings.buttonCount"
3331
- [info]="normalizedPageableSettings.info"
3332
- [pageSizeValues]="normalizedPageableSettings.pageSizes"
3333
- [previousNext]="normalizedPageableSettings.previousNext"
3334
- [type]="normalizedPageableSettings.type"
3335
- (pageChange)="notifyPageChange('pager', $event)"
3336
- (pagerInputVisibilityChange)="handlePagerVisibilityChange('showPagerInput', $event)"
3337
- (pageTextVisibilityChange)="handlePagerVisibilityChange('showPagerPageText', $event)"
3338
- (itemsTextVisibilityChange)="handlePagerVisibilityChange('showPagerItemsText', $event)">
3339
- <ng-template kendoPagerTemplate>
3340
- <ng-container
3341
- [ngTemplateOutlet]="pagerTemplate ? pagerTemplate?.templateRef : defaultPager"
3342
- [ngTemplateOutletContext]="bottomPager.templateContext"></ng-container>
3343
- </ng-template>
3344
- <kendo-pager-messages
3345
- [ariaLabel]="messageFor('pagerLabel')"
3346
- [firstPage]="messageFor('pagerFirstPage')"
3347
- [inputLabel]="messageFor('pagerInputLabel')"
3348
- [previousPage]="messageFor('pagerPreviousPage')"
3349
- [nextPage]="messageFor('pagerNextPage')"
3350
- [lastPage]="messageFor('pagerLastPage')"
3351
- [selectPage]="messageFor('pagerSelectPage')"
3352
- [page]="messageFor('pagerPage')"
3353
- [itemsPerPage]="messageFor('pagerItemsPerPage')"
3354
- [items]="messageFor('pagerItems')"
3355
- [of]="messageFor('pagerOf')"
3356
- [pageNumberInputTitle]="messageFor('pagerPageNumberInputTitle')">
3357
- </kendo-pager-messages>
3358
- </kendo-pager>
3359
- }
3360
- @if (showBottomToolbar) {
3361
- <kendo-grid-toolbar
3362
- class="k-grid-toolbar-bottom"
3363
- [size]="size"
3364
- [navigable]="navigation.toolbarEnabled"
3365
- [attr.aria-label]="messageFor('bottomToolbarLabel')"
3366
- [attr.aria-controls]="ariaRootId"
3367
- position="bottom">
3368
- </kendo-grid-toolbar>
3369
- }
3370
-
3371
- <ng-template #defaultHint>
3372
- <kendo-icon-wrapper
3373
- [name]="getHintSettings('hintIcon')"
3374
- [svgIcon]="getHintSettings('hintSVGIcon')"
3375
- innerCssClass="k-drag-status">
3376
- </kendo-icon-wrapper>
3377
- {{hintText}}
3378
- </ng-template>
3379
-
3380
- <ng-template #defaultPager>
3381
- <div class="k-pager-numbers-wrap">
3382
- @if (normalizedPageableSettings.previousNext) {
3383
- <kendo-pager-prev-buttons [size]="size"></kendo-pager-prev-buttons>
3384
- }
3385
- @if (normalizedPageableSettings.type === 'numeric' && normalizedPageableSettings.buttonCount > 0) {
3386
- <kendo-pager-numeric-buttons
3387
- [size]="size"
3388
- [buttonCount]="normalizedPageableSettings.buttonCount">
3389
- </kendo-pager-numeric-buttons>
3390
- }
3391
- @if (normalizedPageableSettings.type === 'input' || showPagerInput) {
3392
- <kendo-pager-input [size]="size" [showPageText]="showPagerPageText"></kendo-pager-input>
3393
- }
3394
- @if (normalizedPageableSettings.previousNext) {
3395
- <kendo-pager-next-buttons [size]="size"></kendo-pager-next-buttons>
3396
- }
3397
- </div>
3398
- @if (normalizedPageableSettings.pageSizes) {
3399
- <kendo-pager-page-sizes
3400
- [size]="size"
3401
- [pageSizes]="normalizedPageableSettings.pageSizes"
3402
- [showItemsText]="showPagerItemsText">
3403
- </kendo-pager-page-sizes>
3404
- }
3405
- @if (normalizedPageableSettings.info) {
3406
- <kendo-pager-info>
3407
- </kendo-pager-info>
3408
- }
3409
- </ng-template>
3410
- <div #dialogContainer></div>
3411
- <div #windowContainer></div>
3412
-
3413
- @if (isAdaptiveModeEnabled) {
3414
- <kendo-grid-adaptive-renderer></kendo-grid-adaptive-renderer>
3415
- }
3416
- @if (isVirtual) {
3417
- <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
3418
- }
3419
-
3420
- @if (showLicenseWatermark) {
3421
- <div kendoWatermarkOverlay [licenseMessage]="licenseMessage"></div>
3422
- }
3423
- `, isInline: true, dependencies: [{ kind: "directive", type: LocalizedMessagesDirective, selector: "[kendoGridLocalizedMessages]" }, { kind: "component", type: GridToolbarComponent, selector: "kendo-grid-toolbar", inputs: ["position", "size", "navigable"] }, { kind: "component", type: GroupPanelComponent, selector: "kendo-grid-group-panel", inputs: ["text", "navigable", "groups"], outputs: ["change"] }, { kind: "directive", type: TableDirective, selector: "[kendoGridResizableTable]", inputs: ["locked", "virtualColumns"] }, { kind: "directive", type: GridTableDirective, selector: "[kendoGridTable]", inputs: ["size"] }, { kind: "component", type: ColGroupComponent, selector: "[kendoGridColGroup]", inputs: ["columns", "groups", "detailTemplate", "sort"] }, { kind: "component", type: HeaderComponent, selector: "[kendoGridHeader]", inputs: ["totalColumnLevels", "columns", "groups", "detailTemplate", "scrollable", "filterable", "sort", "filter", "sortable", "groupable", "lockedColumnsCount", "resizable", "reorderable", "columnMenu", "columnMenuTemplate", "totalColumnsCount", "totalColumns", "tabIndex", "size"] }, { kind: "directive", type: ResizableContainerDirective, selector: "[kendoGridResizableContainer]", inputs: ["lockedWidth", "kendoGridResizableContainer"] }, { kind: "component", type: ListComponent, selector: "kendo-grid-list", inputs: ["data", "groups", "total", "rowHeight", "detailRowHeight", "take", "skip", "columns", "detailTemplate", "noRecordsTemplate", "selectable", "groupable", "filterable", "rowClass", "rowSticky", "loading", "trackBy", "virtualColumns", "isVirtual", "cellLoadingTemplate", "loadingTemplate", "sort", "size"], outputs: ["contentScroll", "pageChange", "scrollBottom"] }, { kind: "directive", type: DragTargetContainerDirective, selector: "[kendoDragTargetContainer]", inputs: ["hint", "dragTargetFilter", "dragHandle", "dragDelay", "threshold", "dragTargetId", "dragData", "dragDisabled", "mode", "cursorStyle", "hintContext"], outputs: ["onDragReady", "onPress", "onDragStart", "onDrag", "onRelease", "onDragEnd"], exportAs: ["kendoDragTargetContainer"] }, { kind: "directive", type: DropTargetContainerDirective, selector: "[kendoDropTargetContainer]", inputs: ["dropTargetFilter", "dropDisabled"], outputs: ["onDragEnter", "onDragOver", "onDragLeave", "onDrop"], exportAs: ["kendoDropTargetContainer"] }, { kind: "directive", type: DraggableDirective, selector: "[kendoDraggable]", inputs: ["enableDrag"], outputs: ["kendoPress", "kendoDrag", "kendoRelease"] }, { kind: "directive", type: GridMarqueeDirective, selector: "[kendoGridSelectionMarquee]" }, { kind: "component", type: FooterComponent, selector: "[kendoGridFooter]", inputs: ["columns", "groups", "detailTemplate", "scrollable", "lockedColumnsCount", "logicalRowIndex", "totalColumns", "totalColumnsCount"] }, { kind: "component", type: TableBodyComponent, selector: "[kendoGridTableBody]", inputs: ["columns", "allColumns", "groups", "detailTemplate", "noRecordsTemplate", "rowsToRender", "skip", "selectable", "filterable", "noRecordsText", "isLocked", "isLoading", "isVirtual", "cellLoadingTemplate", "skipGroupDecoration", "lockedColumnsCount", "totalColumnsCount", "virtualColumns", "trackBy", "rowSticky", "totalColumns", "rowClass", "rowHeight", "detailRowHeight"] }, { kind: "component", type: LoadingComponent, selector: "[kendoGridLoading]", inputs: ["loadingTemplate"] }, { kind: "component", type: StatusBarComponent, selector: "kendo-grid-status-bar", inputs: ["statusBarTemplate"] }, { kind: "component", type: IconWrapperComponent, selector: "kendo-icon-wrapper", inputs: ["name", "svgIcon", "innerCssClass", "customFontClass", "size"], exportAs: ["kendoIconWrapper"] }, { kind: "component", type: WatermarkOverlayComponent, selector: "div[kendoWatermarkOverlay]", inputs: ["licenseMessage"] }, { kind: "component", type: i29.CustomMessagesComponent, selector: "kendo-datapager-messages, kendo-pager-messages" }, { kind: "component", type: i29.PagerInfoComponent, selector: "kendo-datapager-info, kendo-pager-info" }, { kind: "component", type: i29.PagerInputComponent, selector: "kendo-datapager-input, kendo-pager-input", inputs: ["showPageText", "size"] }, { kind: "component", type: i29.PagerNextButtonsComponent, selector: "kendo-datapager-next-buttons, kendo-pager-next-buttons", inputs: ["size"] }, { kind: "component", type: i29.PagerNumericButtonsComponent, selector: "kendo-datapager-numeric-buttons, kendo-pager-numeric-buttons", inputs: ["buttonCount", "size"] }, { kind: "component", type: i29.PagerPageSizesComponent, selector: "kendo-datapager-page-sizes, kendo-pager-page-sizes", inputs: ["showItemsText", "pageSizes", "size", "adaptiveMode"] }, { kind: "component", type: i29.PagerPrevButtonsComponent, selector: "kendo-datapager-prev-buttons, kendo-pager-prev-buttons", inputs: ["size"] }, { kind: "directive", type: i29.PagerTemplateDirective, selector: "[kendoDataPagerTemplate], [kendoPagerTemplate]" }, { kind: "component", type: i29.PagerComponent, selector: "kendo-datapager, kendo-pager", inputs: ["externalTemplate", "total", "skip", "pageSize", "buttonCount", "info", "type", "pageSizeValues", "previousNext", "navigable", "size", "responsive", "adaptiveMode"], outputs: ["pageChange", "pageSizeChange", "pagerInputVisibilityChange", "pageTextVisibilityChange", "itemsTextVisibilityChange"], exportAs: ["kendoDataPager", "kendoPager"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AdaptiveRendererComponent, selector: "kendo-grid-adaptive-renderer" }, { kind: "component", type: ResizeSensorComponent, selector: "kendo-resize-sensor", inputs: ["rateLimit"], outputs: ["resize"] }], encapsulation: i0.ViewEncapsulation.None });
3424
- }
3425
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GridComponent, decorators: [{
3426
- type: Component,
3427
- args: [{
3428
- encapsulation: ViewEncapsulation.None,
3429
- exportAs: 'kendoGrid',
3430
- providers: [
3431
- BrowserSupportService,
3432
- LocalizationService,
3433
- ColumnInfoService,
3434
- SelectionService,
3435
- CellSelectionService,
3436
- DetailsService,
3437
- GroupsService,
3438
- GroupInfoService,
3439
- ChangeNotificationService,
3440
- EditService,
3441
- PDFService,
3442
- SuspendService,
3443
- {
3444
- provide: CELL_CONTEXT,
3445
- useValue: EMPTY_CELL_CONTEXT
3446
- },
3447
- {
3448
- provide: L10N_PREFIX,
3449
- useValue: 'kendo.grid'
3450
- },
3451
- FilterService,
3452
- ResponsiveService,
3453
- PagerContextService,
3454
- PagerNavigationService,
3455
- ExcelService,
3456
- ScrollSyncService,
3457
- ResizeService,
3458
- LocalDataChangesService,
3459
- DomEventsService,
3460
- ColumnResizingService,
3461
- SinglePopupService,
3462
- DragAndDropService,
3463
- DragHintService,
3464
- DropCueService,
3465
- ColumnReorderService,
3466
- NavigationService,
3467
- FocusRoot,
3468
- IdService,
3469
- CellSelectionAggregateService,
3470
- ScrollRequestService,
3471
- SortService,
3472
- ContextService,
3473
- SizingOptionsService,
3474
- RowReorderService,
3475
- ClipboardService,
3476
- GridAIRequestResponseService,
3477
- RowspanService,
3478
- AdaptiveGridService,
3479
- ColumnMenuService,
3480
- MenuTabbingService,
3481
- DataMappingService
3482
- ],
3483
- selector: 'kendo-grid',
3484
- template: `
3485
- <ng-container kendoGridLocalizedMessages
3486
- i18n-groupPanelEmpty="kendo.grid.groupPanelEmpty|The label visible in the Grid group panel when it is empty"
3487
- groupPanelEmpty="Drag a column header and drop it here to group by that column"
3488
-
3489
- i18n-noRecords="kendo.grid.noRecords|The label visible in the Grid when there are no records"
3490
- noRecords="No records available."
3491
-
3492
- i18n-pagerLabel="kendo.grid.pagerLabel|The label for the Grid pager"
3493
- pagerLabel="{{ 'Page navigation, page {currentPage} of {totalPages}' }}"
3494
-
3495
- i18n-pagerFirstPage="kendo.grid.pagerFirstPage|The label for the first page button in Grid pager"
3496
- pagerFirstPage="Go to the first page"
3497
-
3498
- i18n-pagerPreviousPage="kendo.grid.pagerPreviousPage|The label for the previous page button in Grid pager"
3499
- pagerPreviousPage="Go to the previous page"
3500
-
3501
- i18n-pagerNextPage="kendo.grid.pagerNextPage|The label for the next page button in Grid pager"
3502
- pagerNextPage="Go to the next page"
3503
-
3504
- i18n-pagerLastPage="kendo.grid.pagerLastPage|The label for the last page button in Grid pager"
3505
- pagerLastPage="Go to the last page"
3506
-
3507
- i18n-pagerPage="kendo.grid.pagerPage|The label before the current page number in the Grid pager"
3508
- pagerPage="Page"
3509
-
3510
- i18n-pagerOf="kendo.grid.pagerOf|The label before the total pages number in the Grid pager"
3511
- pagerOf="of"
3512
-
3513
- i18n-pagerItems="kendo.grid.pagerItems|The label after the total pages number in the Grid pager"
3514
- pagerItems="items"
3515
-
3516
- i18n-pagerPageNumberInputTitle="kendo.grid.pagerPageNumberInputTitle|The label for the pager input in the Grid pager"
3517
- pagerPageNumberInputTitle="Page Number"
3518
-
3519
- i18n-pagerItemsPerPage="kendo.grid.pagerItemsPerPage|The label for the page size chooser in the Grid pager"
3520
- pagerItemsPerPage="items per page"
3521
-
3522
- i18n-pagerInputLabel="kendo.grid.pagerInputLabel|The text of the aria-label attribute applied to the input element for entering the page number"
3523
- pagerInputLabel="Type a page number"
3524
-
3525
- i18n-filter="kendo.grid.filter|The label of the filter cell or icon"
3526
- filter="Filter"
3527
-
3528
- i18n-filterInputLabel="kendo.grid.filterInputLabel|The label of the filter row and menu inputs"
3529
- filterInputLabel="{{ '{columnName} Filter' }}"
3530
-
3531
- i18n-filterMenuTitle="kendo.grid.filterMenuTitle|The title of the filter menu icon"
3532
- filterMenuTitle="{{ '{columnName} Filter Menu' }}"
3533
-
3534
- i18n-filterMenuOperatorsDropDownLabel="kendo.grid.filterMenuOperatorsDropDownLabel|The label of the filter menu operators dropdown"
3535
- filterMenuOperatorsDropDownLabel="{{ '{columnName} Filter Operators' }}"
3536
-
3537
- i18n-filterCellOperatorLabel="kendo.grid.filterCellOperatorLabel|The label of the filter cell operators dropdown"
3538
- filterCellOperatorLabel="{{ 'Filter cell operators for {columnName}' }}"
3539
-
3540
- i18n-booleanFilterCellLabel="kendo.grid.booleanFilterCellLabel|The label of the boolean filter cell dropdown"
3541
- booleanFilterCellLabel="{{ 'Boolean filter cell for {columnName}' }}"
3542
-
3543
- i18n-filterMenuLogicDropDownLabel="kendo.grid.filterMenuLogicDropDownLabel|The label of the filter menu logic dropdown"
3544
- filterMenuLogicDropDownLabel="{{ '{columnName} Filter Logic' }}"
3545
-
3546
- i18n-filterEqOperator="kendo.grid.filterEqOperator|The text of the equal filter operator"
3547
- filterEqOperator="Is equal to"
3548
-
3549
- i18n-filterNotEqOperator="kendo.grid.filterNotEqOperator|The text of the not equal filter operator"
3550
- filterNotEqOperator="Is not equal to"
3551
-
3552
- i18n-filterIsNullOperator="kendo.grid.filterIsNullOperator|The text of the is null filter operator"
3553
- filterIsNullOperator="Is null"
3554
-
3555
- i18n-filterIsNotNullOperator="kendo.grid.filterIsNotNullOperator|The text of the is not null filter operator"
3556
- filterIsNotNullOperator="Is not null"
3557
-
3558
- i18n-filterIsEmptyOperator="kendo.grid.filterIsEmptyOperator|The text of the is empty filter operator"
3559
- filterIsEmptyOperator="Is empty"
3560
-
3561
- i18n-filterIsNotEmptyOperator="kendo.grid.filterIsNotEmptyOperator|The text of the is not empty filter operator"
3562
- filterIsNotEmptyOperator="Is not empty"
3563
-
3564
- i18n-filterStartsWithOperator="kendo.grid.filterStartsWithOperator|The text of the starts with filter operator"
3565
- filterStartsWithOperator="Starts with"
3566
-
3567
- i18n-filterContainsOperator="kendo.grid.filterContainsOperator|The text of the contains filter operator"
3568
- filterContainsOperator="Contains"
3569
-
3570
- i18n-filterNotContainsOperator="kendo.grid.filterNotContainsOperator|The text of the does not contain filter operator"
3571
- filterNotContainsOperator="Does not contain"
3572
-
3573
- i18n-filterEndsWithOperator="kendo.grid.filterEndsWithOperator|The text of the ends with filter operator"
3574
- filterEndsWithOperator="Ends with"
3575
-
3576
- i18n-filterGteOperator="kendo.grid.filterGteOperator|The text of the greater than or equal filter operator"
3577
- filterGteOperator="Is greater than or equal to"
3578
-
3579
- i18n-filterGtOperator="kendo.grid.filterGtOperator|The text of the greater than filter operator"
3580
- filterGtOperator="Is greater than"
3581
-
3582
- i18n-filterLteOperator="kendo.grid.filterLteOperator|The text of the less than or equal filter operator"
3583
- filterLteOperator="Is less than or equal to"
3584
-
3585
- i18n-filterLtOperator="kendo.grid.filterLtOperator|The text of the less than filter operator"
3586
- filterLtOperator="Is less than"
3587
-
3588
- i18n-filterIsTrue="kendo.grid.filterIsTrue|The text of the IsTrue boolean filter option"
3589
- filterIsTrue="Is True"
3590
-
3591
- i18n-filterIsFalse="kendo.grid.filterIsFalse|The text of the IsFalse boolean filter option"
3592
- filterIsFalse="Is False"
3593
-
3594
- i18n-filterBooleanAll="kendo.grid.filterBooleanAll|The text of the (All) boolean filter option"
3595
- filterBooleanAll="(All)"
3596
-
3597
- i18n-filterAfterOrEqualOperator="kendo.grid.filterAfterOrEqualOperator|The text of the after or equal date filter operator"
3598
- filterAfterOrEqualOperator="Is after or equal to"
3599
-
3600
- i18n-filterAfterOperator="kendo.grid.filterAfterOperator|The text of the after date filter operator"
3601
- filterAfterOperator="Is after"
3602
-
3603
- i18n-filterBeforeOperator="kendo.grid.filterBeforeOperator|The text of the before date filter operator"
3604
- filterBeforeOperator="Is before"
3605
-
3606
- i18n-filterBeforeOrEqualOperator="kendo.grid.filterBeforeOrEqualOperator|The text of the before or equal date filter operator"
3607
- filterBeforeOrEqualOperator="Is before or equal to"
3608
-
3609
- i18n-filterFilterButton="kendo.grid.filterFilterButton|The text of the filter button"
3610
- filterFilterButton="Filter"
3611
-
3612
- i18n-filterClearButton="kendo.grid.filterClearButton|The text of the clear filter button"
3613
- filterClearButton="Clear"
3614
-
3615
- i18n-sortClearButton="kendo.grid.sortClearButton|The text of the clear sort button located in the Sort Toolbar Tool and adaptive Sort Toolbar Tool"
3616
- sortClearButton="Clear sorting"
3617
-
3618
- i18n-adaptiveCloseButtonTitle="kendo.grid.adaptiveCloseButtonTitle|The title of the Close button of the ActionSheet that is rendered instead of the Popup when using small screen devices in adaptive mode"
3619
- adaptiveCloseButtonTitle="Close"
3620
-
3621
- i18n-adaptiveBackButtonTitle="kendo.grid.adaptiveBackButtonTitle|The title of the Back button of the ActionSheet that is rendered instead of the Popup when using small screen devices in adaptive mode"
3622
- adaptiveBackButtonTitle="Back"
3623
-
3624
- i18n-filterClearAllButton="kendo.grid.filterClearAllButton|The text of the clear all filters button located in the Filter Toolbar Tool and adaptive Filter Toolbar Tool"
3625
- filterClearAllButton="Clear all filters"
3626
-
3627
- i18n-groupClearButton="kendo.grid.groupClearButton|The text of the clear grouping button in the Group Toolbar Tool and adaptive Group Toolbar Tool"
3628
- groupClearButton="Clear grouping"
3629
-
3630
- i18n-sortDoneButton="kendo.grid.sortDoneButton|The text of the done sort button"
3631
- sortDoneButton="Done"
3632
-
3633
- i18n-groupDoneButton="kendo.grid.groupDoneButton|The text of the done group button in the adaptive Group Toolbar Tool"
3634
- groupDoneButton="Done"
3635
-
3636
- i18n-filterAndLogic="kendo.grid.filterAndLogic|The text of the And filter logic"
3637
- filterAndLogic="And"
3638
-
3639
- i18n-filterOrLogic="kendo.grid.filterOrLogic|The text of the Or filter logic"
3640
- filterOrLogic="Or"
3641
-
3642
- i18n-filterToolbarToolText="kendo.grid.filterToolbarToolText|The button text of the Filter toolbar tool"
3643
- filterToolbarToolText="Filter"
3644
-
3645
- i18n-loading="kendo.grid.loading|The loading text"
3646
- loading="Loading"
3647
-
3648
- i18n-gridLabel="kendo.grid.gridLabel|The Grid aria-label"
3649
- gridLabel="Data table"
3650
-
3651
- i18n-columnMenu="kendo.grid.columnMenu|The title of the column menu icon"
3652
- columnMenu="{{ '{columnName} Column Menu' }}"
3653
-
3654
- i18n-columns="kendo.grid.columns|The text for the Grid Column Chooser and Column Chooser toolbar tool"
3655
- columns="Columns"
3656
-
3657
- i18n-columnsSubtitle="kendo.grid.columnsSubtitle|The subtitle for the adaptive Grid Column Chooser and Column Chooser toolbar tool"
3658
- columnsSubtitle="Selected fields are visible"
3659
-
3660
- i18n-adaptiveFilterTitle="kendo.grid.adaptiveFilterTitle|The title that is displayed in the adaptive Filter Toolbar Tool and Filter Menu"
3661
- adaptiveFilterTitle="Filter by"
3662
-
3663
- i18n-adaptiveFilterOperatorsTitle="kendo.grid.adaptiveFilterOperatorsTitle|The title that is displayed in the Operators Action Sheet"
3664
- adaptiveFilterOperatorsTitle="Operators"
3665
-
3666
- i18n-adaptiveSortTitle="kendo.grid.adaptiveSortTitle|The title that is displayed in the adaptive Sort Toolbar Tool"
3667
- adaptiveSortTitle="Sort by"
3668
-
3669
- i18n-adaptiveGroupTitle="kendo.grid.adaptiveGroupTitle|The title that is displayed in the adaptive Group Toolbar Tool."
3670
- adaptiveGroupTitle="Group by"
3671
-
3672
- i18n-lock="kendo.grid.lock|The text shown in the column menu for the lock item"
3673
- lock="Lock"
3674
-
3675
- i18n-unlock="kendo.grid.unlock|The text shown in the column menu for the unlock item"
3676
- unlock="Unlock"
3677
-
3678
- i18n-setColumnPosition="kendo.grid.setColumnPosition|The text shown in the column menu for the set column position item"
3679
- setColumnPosition="Set Column Position"
3680
-
3681
- i18n-stick="kendo.grid.stick|The text shown in the column menu for the stick item"
3682
- stick="Stick"
3683
-
3684
- i18n-unstick="kendo.grid.unstick|The text shown in the column menu for the unstick item"
3685
- unstick="Unstick"
3686
-
3687
- i18n-sortable="kendo.grid.sortable|The label of the sort icon"
3688
- sortable="Sortable"
3689
-
3690
- i18n-sortAscending="kendo.grid.sortAscending|The text shown in the column menu for the sort ascending item"
3691
- sortAscending="Sort Ascending"
3692
-
3693
- i18n-sortDescending="kendo.grid.sortDescending|The text shown in the column menu for the sort descending item"
3694
- sortDescending="Sort Descending"
3695
-
3696
- i18n-autosizeAllColumns="kendo.grid.autosizeAllColumns|The text shown in the column menu for the autosize all columns item"
3697
- autosizeAllColumns="Autosize All Columns"
3698
-
3699
- i18n-autosizeThisColumn="kendo.grid.autosizeThisColumn|The text shown in the column menu for the autosize this column item"
3700
- autosizeThisColumn="Autosize This Column"
3701
-
3702
- i18n-sortedDefault="kendo.grid.sortedDefault|The status announcement when a column is no longer sorted"
3703
- sortedDefault="Not Sorted"
3704
-
3705
- i18n-sortedAscending="kendo.grid.sortedAscending|The title of the Group Chip indicating the ascending sorting order of the groups"
3706
- sortedAscending="Sorted Ascending"
3707
-
3708
- i18n-sortedDescending="kendo.grid.sortedDescending|The title of the Group Chip indicating the descending sorting order of the groups"
3709
- sortedDescending="Sorted Descending"
3710
-
3711
- i18n-columnsApply="kendo.grid.columnsApply|The text shown in the column menu or column chooser for the columns apply button"
3712
- columnsApply="Apply"
3713
-
3714
- i18n-columnsReset="kendo.grid.columnsReset|The text shown in the column menu or column chooser for the columns reset button"
3715
- columnsReset="Reset"
3716
-
3717
- i18n-detailExpand="kendo.grid.detailExpand|The title of the expand icon of detail rows. Applies also to the expand button text in stacked mode."
3718
- detailExpand="Expand Details"
3719
-
3720
- i18n-detailCollapse="kendo.grid.detailCollapse|The title of the collapse icon of detail rows. Applies also to the collapse button text in stacked mode."
3721
- detailCollapse="Collapse Details"
3722
-
3723
- i18n-filterDateToday="kendo.grid.filterDateToday|The text of the Today button of the Date filter."
3724
- filterDateToday="TODAY"
3725
-
3726
- i18n-filterDateToggle="kendo.grid.filterDateToggle|The title of the Toggle button of the Date filter."
3727
- filterDateToggle="Toggle Calendar"
3728
-
3729
- i18n-filterNumericDecrement="kendo.grid.filterNumericDecrement|The title of the Decrement button of the Numeric filter."
3730
- filterNumericDecrement="Decrement"
3731
-
3732
- i18n-filterNumericIncrement="kendo.grid.filterNumericIncrement|The title of the Increment button of the Numeric filter."
3733
- filterNumericIncrement="Increment"
3734
-
3735
- i18n-selectionCheckboxLabel="kendo.grid.selectionCheckboxLabel|The labels of the checkbox column checkboxes."
3736
- selectionCheckboxLabel="Select Row"
3737
-
3738
- i18n-selectAllCheckboxLabel="kendo.grid.selectAllCheckboxLabel|The label of the checkbox column select all checkbox."
3739
- selectAllCheckboxLabel="Select All Rows"
3740
-
3741
- i18n-sortToolbarToolText="kendo.grid.sortToolbarToolText|The button text of the Sort toolbar tool."
3742
- sortToolbarToolText="Sort"
3743
-
3744
- i18n-groupCollapse="kendo.grid.groupCollapse|The text of the title and aria-label attributes applied to the collapse icon of group rows."
3745
- groupCollapse="Collapse Group"
3746
-
3747
- i18n-groupExpand="kendo.grid.groupExpand|The text of the title and aria-label attributes applied to the expand icon of group rows."
3748
- groupExpand="Expand Group"
3749
-
3750
- i18n-pagerSelectPage="kendo.grid.pagerSelectPage|The text of the title and aria-label attributes applied to the page chooser in the Grid Pager"
3751
- pagerSelectPage="Select page"
3752
-
3753
- i18n-topToolbarLabel="kendo.grid.topToolbarLabel|The label for the Grid top toolbar"
3754
- topToolbarLabel="Top toolbar"
3755
-
3756
- i18n-bottomToolbarLabel="kendo.grid.bottomToolbarLabel|The label for the Grid bottom toolbar"
3757
- bottomToolbarLabel="Bottom toolbar"
3758
-
3759
- i18n-editToolbarToolText="kendo.grid.editToolbarToolText|The text for the Grid Edit toolbar tool"
3760
- editToolbarToolText="Edit"
3761
-
3762
- i18n-saveToolbarToolText="kendo.grid.saveToolbarToolText|The text for the Grid Save toolbar tool"
3763
- saveToolbarToolText="Save"
3764
-
3765
- i18n-addToolbarToolText="kendo.grid.addToolbarToolText|The text for the Grid Add toolbar tool"
3766
- addToolbarToolText="Add"
3767
-
3768
- i18n-cancelToolbarToolText="kendo.grid.cancelToolbarToolText|The text for the Grid Cancel toolbar tool"
3769
- cancelToolbarToolText="Cancel"
3770
-
3771
- i18n-removeToolbarToolText="kendo.grid.removeToolbarToolText|The text for the Grid Remove toolbar tool"
3772
- removeToolbarToolText="Delete"
3773
-
3774
- i18n-excelExportToolbarToolText="kendo.grid.excelExportToolbarToolText|The text for the Grid Excel export toolbar tool"
3775
- excelExportToolbarToolText="Excel Export"
3776
-
3777
- i18n-pdfExportToolbarToolText="kendo.grid.pdfExportToolbarToolText|The text for the Grid PDF export toolbar tool"
3778
- pdfExportToolbarToolText="PDF Export"
3779
-
3780
- i18n-groupPanelLabel="kendo.grid.groupPanelLabel|The label for the Grid group panel toolbar"
3781
- groupPanelLabel="Group panel"
3782
-
3783
- i18n-dragRowHandleLabel="kendo.grid.dragRowHandleLabel|The label for the Grid drag row handle"
3784
- dragRowHandleLabel="Drag row"
3785
-
3786
- i18n-columnMenuFilterTabTitle="kendo.grid.columnMenuFilterTabTitle|The title for the column menu Filter tab"
3787
- columnMenuFilterTabTitle="Filter"
3788
-
3789
- i18n-columnMenuGeneralTabTitle="kendo.grid.columnMenuGeneralTabTitle|The title for the column menu General tab"
3790
- columnMenuGeneralTabTitle="General"
3791
-
3792
- i18n-columnMenuColumnsTabTitle="kendo.grid.columnMenuColumnsTabTitle|The title for the column menu Columns tab"
3793
- columnMenuColumnsTabTitle="Columns"
3794
-
3795
- i18n-groupChipMenuPrevious="kendo.grid.groupChipMenuPrevious|The text for the Group pane Chip Menu Move as previous item"
3796
- groupChipMenuPrevious="Move as previous"
3797
-
3798
- i18n-groupChipMenuNext="kendo.grid.groupChipMenuNext|The text for the Group pane Chip Menu Move as next item"
3799
- groupChipMenuNext="Move as next"
3800
-
3801
- i18n-groupToolbarToolText="kendo.grid.groupToolbarToolText|The button text of the Group toolbar tool"
3802
- groupToolbarToolText="Group"
3803
-
3804
- i18n-formValidationErrorText="kendo.grid.formValidationErrorText|The default text of a form validation error when using external editing."
3805
- formValidationErrorText="{{ 'The {fieldName} field has {errorName} validation error' }}"
3806
-
3807
- i18n-removeConfirmationDialogTitle="kendo.grid.removeConfirmationDialogTitle|The title of the built-in remove item confirmation Dialog"
3808
- removeConfirmationDialogTitle="Please confirm"
3809
-
3810
- i18n-removeConfirmationDialogContent="kendo.grid.removeConfirmationDialogContent|The content of the built-in remove item confirmation Dialog"
3811
- removeConfirmationDialogContent="Are you sure you want to delete this item?"
3812
-
3813
- i18n-removeConfirmationDialogConfirmText="kendo.grid.removeConfirmationDialogConfirmText|The text of the built-in remove item confirmation Dialog confirm action button"
3814
- removeConfirmationDialogConfirmText="Yes"
3815
-
3816
- i18n-removeConfirmationDialogRejectText="kendo.grid.removeConfirmationDialogRejectText|The text of the built-in remove item confirmation Dialog reject action button"
3817
- removeConfirmationDialogRejectText="No"
3818
-
3819
- i18n-externalEditingTitle="kendo.grid.externalEditingTitle|The title of the built-in external editing form container when editing an item"
3820
- externalEditingTitle="Edit"
3821
-
3822
- i18n-externalEditingAddTitle="kendo.grid.externalEditingAddTitle|The title of the built-in external editing form container when adding a new item"
3823
- externalEditingAddTitle="Add"
3824
-
3825
- i18n-externalEditingSaveText="kendo.grid.externalEditingSaveText|The text of the external editing form Save button"
3826
- externalEditingSaveText="Save"
3827
-
3828
- i18n-externalEditingCancelText="kendo.grid.externalEditingCancelText|The text of the external editing form Cancel button"
3829
- externalEditingCancelText="Cancel"
3830
-
3831
- i18n-aiAssistantToolbarToolText="kendo.grid.aiAssistantToolbarToolText|The text of the AI Assistant toolbar tool"
3832
- aiAssistantToolbarToolText="AI Assistant"
3833
-
3834
- i18n-aiAssistantWindowTitle="kendo.grid.aiAssistantWindowTitle|The text of the AI Assistant Window title"
3835
- aiAssistantWindowTitle="AI Assistant"
3836
-
3837
- i18n-aiAssistantApplyButtonText="kendo.grid.aiAssistantApplyButtonText|The text of the AI Assistant Apply button"
3838
- aiAssistantApplyButtonText="Apply"
3839
-
3840
- i18n-aiAssistantWindowCloseTitle="kendo.grid.aiAssistantWindowCloseTitle|The title of the AI Assistant Window close button"
3841
- aiAssistantWindowCloseTitle="Close"
3842
-
3843
- i18n-aiAssistantWindowMaximizeTitle="kendo.grid.aiAssistantWindowMaximizeTitle|The title of the AI Assistant Window maximize button"
3844
- aiAssistantWindowMaximizeTitle="Maximize"
3845
-
3846
- i18n-aiAssistantWindowMinimizeTitle="kendo.grid.aiAssistantWindowMinimizeTitle|The title of the AI Assistant Window minimize button"
3847
- aiAssistantWindowMinimizeTitle="Minimize"
3848
-
3849
- i18n-aiAssistantWindowRestoreTitle="kendo.grid.aiAssistantWindowRestoreTitle|The title of the AI Assistant Window restore button"
3850
- aiAssistantWindowRestoreTitle="Restore"
3851
-
3852
- i18n-aiAssistantOutputCardTitle="kendo.grid.aiAssistantOutputCardTitle|The title of the AI Assistant Prompt Output Card"
3853
- aiAssistantOutputCardTitle="Generated with AI"
3854
-
3855
- i18n-aiAssistantOutputCardBodyContent="kendo.grid.aiAssistantOutputCardBodyContent|The success message dispayed in the AI Assistant Prompt Output Card's body"
3856
- aiAssistantOutputCardBodyContent="Operation is successful. Data is:"
3857
-
3858
- i18n-aiAssistantSelectionNotEnabled="kendo.grid.aiAssistantSelectionNotEnabled|The message shown when AI selection requires the Grid selectable option"
3859
- aiAssistantSelectionNotEnabled="Selection can be applied only when the Grid selectable option is enabled."
3860
-
3861
- i18n-aiAssistantSelectionRowModeRequired="kendo.grid.aiAssistantSelectionRowModeRequired|The message shown when AI selection requires row selection mode"
3862
- aiAssistantSelectionRowModeRequired="Selection can be applied only when row selection mode is enabled."
3863
-
3864
- i18n-aiAssistantSelectionCellModeRequired="kendo.grid.aiAssistantSelectionCellModeRequired|The message shown when AI selection requires cell selection mode"
3865
- aiAssistantSelectionCellModeRequired="Selection can be applied only when cell selection mode is enabled."
3866
-
3867
- i18n-columnChooserSelectAll="kendo.grid.columnChooserSelectAll|The text for the Select all checkbox in the Column Chooser"
3868
- columnChooserSelectAll="Select all"
3869
-
3870
- i18n-columnChooserSelectedColumnsCount="kendo.grid.columnChooserSelectedColumnsCount|The text displayed in the Column Chooser for the number of selected columns"
3871
- columnChooserSelectedColumnsCount="{{ '{selectedColumnsCount} Selected items' }}"
3872
-
3873
- i18n-multiCheckboxFilterSearchPlaceholder="kendo.grid.multiCheckboxFilterSearchPlaceholder|The placeholder text for the multi-checkbox filter search input"
3874
- multiCheckboxFilterSearchPlaceholder="Search..."
3875
-
3876
- i18n-multiCheckboxFilterSelectAllLabel="kendo.grid.multiCheckboxFilterSelectAllLabel|The label for the multi-checkbox filter select all option"
3877
- multiCheckboxFilterSelectAllLabel="Select all"
3878
-
3879
- i18n-multiCheckboxFilterSelectedItemsCount="kendo.grid.multiCheckboxFilterSelectedItemsCount|The text for the multi-checkbox filter selected items count"
3880
- multiCheckboxFilterSelectedItemsCount="{{ '{selectedItemsCount} selected items' }}"
3881
- >
3882
- </ng-container>
3883
- @if (showTopToolbar) {
3884
- <kendo-grid-toolbar
3885
- [size]="size"
3886
- [attr.aria-label]="messageFor('topToolbarLabel')"
3887
- [navigable]="navigation.toolbarEnabled"
3888
- [attr.aria-controls]="ariaRootId"
3889
- position="top"></kendo-grid-toolbar>
3890
- }
3891
- <ng-content select="kendo-toolbar"></ng-content>
3892
- @if (showTopPager) {
3893
- <kendo-pager
3894
- #topPager
3895
- [navigable]="navigation.pagerEnabled"
3896
- class="k-grid-pager k-grid-pager-top"
3897
- [pageSize]="pageSize"
3898
- [total]="view.total"
3899
- [skip]="skip"
3900
- [size]="size"
3901
- [responsive]="normalizedPageableSettings.responsive && !pagerTemplate"
3902
- [buttonCount]="normalizedPageableSettings.buttonCount"
3903
- [info]="normalizedPageableSettings.info"
3904
- [pageSizeValues]="normalizedPageableSettings.pageSizes"
3905
- [previousNext]="normalizedPageableSettings.previousNext"
3906
- [type]="normalizedPageableSettings.type"
3907
- (pageChange)="notifyPageChange('pager', $event)"
3908
- (pagerInputVisibilityChange)="handlePagerVisibilityChange('showPagerInput', $event)"
3909
- (pageTextVisibilityChange)="handlePagerVisibilityChange('showPagerPageText', $event)"
3910
- (itemsTextVisibilityChange)="handlePagerVisibilityChange('showPagerItemsText', $event)">
3911
- <ng-template kendoPagerTemplate>
3912
- <ng-container
3913
- [ngTemplateOutlet]="pagerTemplate ? pagerTemplate?.templateRef : defaultPager"
3914
- [ngTemplateOutletContext]="topPager.templateContext"></ng-container>
3915
- </ng-template>
3916
- <kendo-pager-messages
3917
- [ariaLabel]="messageFor('pagerLabel')"
3918
- [firstPage]="messageFor('pagerFirstPage')"
3919
- [inputLabel]="messageFor('pagerInputLabel')"
3920
- [previousPage]="messageFor('pagerPreviousPage')"
3921
- [nextPage]="messageFor('pagerNextPage')"
3922
- [lastPage]="messageFor('pagerLastPage')"
3923
- [selectPage]="messageFor('pagerSelectPage')"
3924
- [page]="messageFor('pagerPage')"
3925
- [itemsPerPage]="messageFor('pagerItemsPerPage')"
3926
- [items]="messageFor('pagerItems')"
3927
- [of]="messageFor('pagerOf')"
3928
- [pageNumberInputTitle]="messageFor('pagerPageNumberInputTitle')">
3929
- </kendo-pager-messages>
3930
- </kendo-pager>
3931
- }
3932
- @if (showGroupPanel) {
3933
- <kendo-grid-group-panel
3934
- [navigable]="navigation.toolbarEnabled"
3935
- [text]="groupableEmptyText"
3936
- [groups]="group"
3937
- role="toolbar"
3938
- [attr.aria-label]="messageFor('groupPanelLabel')"
3939
- [attr.aria-controls]="ariaRootId"
3940
- (change)="groupChange.emit($event)">
3941
- </kendo-grid-group-panel>
3942
- }
3943
- <div #ariaRoot
3944
- class="k-grid-aria-root"
3945
- role="grid"
3946
- kendoDragTargetContainer
3947
- kendoDropTargetContainer
3948
- mode="manual"
3949
- [dragDisabled]="!rowReorderable"
3950
- [dropDisabled]="!rowReorderable"
3951
- [dragTargetFilter]="getDefaultSelectors('dragTarget')"
3952
- [dropTargetFilter]="getDefaultSelectors('dropTarget')"
3953
- [dragHandle]="getDefaultSelectors('handle')"
3954
- [hint]="{hintTemplate: customHintTemplate || defaultHint}"
3955
- [hintContext]="hintContext"
3956
- (onPress)="handleReorderEvents($event, 'press')"
3957
- (onDragStart)="handleReorderEvents($event, 'dragStart')"
3958
- (onDrag)="handleReorderEvents($event, 'drag')"
3959
- (onDragEnter)="handleReorderEvents($event, 'dragEnter')"
3960
- (onDragLeave)="handleReorderEvents($event, 'dragLeave')"
3961
- (onDragEnd)="handleReorderEvents($event, 'dragEnd')"
3962
- (onDrop)="handleReorderEvents($event, 'drop')"
3963
- [dragData]="gridData"
3964
- [id]="ariaRootId"
3965
- [attr.aria-label]="ariaLabel"
3966
- [attr.aria-rowcount]="ariaRowCount"
3967
- [attr.aria-colcount]="ariaColCount">
3968
- @if (isScrollable) {
3969
- @if (!hideHeader && !isStacked) {
3970
- <div
3971
- class="k-grid-header"
3972
- [class.k-grid-draggable-header]="groupable || reorderable"
3973
- role="presentation"
3974
- [style.padding]="headerPadding">
3975
- @if (isLocked) {
3976
- <div
3977
- #lockedHeader
3978
- role="presentation"
3979
- class="k-grid-header-locked"
3980
- [style.width.px]="lockedWidth">
3981
- <table
3982
- kendoGridResizableTable
3983
- [locked]="true"
3984
- role="presentation"
3985
- class="k-grid-header-table"
3986
- [style.width.px]="lockedWidth"
3987
- kendoGridTable
3988
- [size]="size">
3989
- <colgroup kendoGridColGroup
3990
- [columns]="$any(lockedLeafColumns)"
3991
- [groups]="group"
3992
- [detailTemplate]="detailTemplate">
3993
- </colgroup>
3994
- <thead kendoGridHeader
3995
- role="rowgroup"
3996
- [resizable]="resizable"
3997
- [scrollable]="true"
3998
- [columns]="$any(lockedColumns)"
3999
- [totalColumnLevels]="totalColumnLevels"
4000
- [sort]="sort"
4001
- [groups]="group"
4002
- [filter]="filter"
4003
- [filterable]="filterable"
4004
- [groupable]="showGroupPanel"
4005
- [reorderable]="reorderable"
4006
- [sortable]="sortable"
4007
- [columnMenu]="columnMenuOptions"
4008
- [columnMenuTemplate]="columnMenuTemplate"
4009
- [totalColumnsCount]="leafColumns.length"
4010
- [totalColumns]="columnsContainer"
4011
- [detailTemplate]="detailTemplate"
4012
- [tabIndex]="navigation.tableEnabled ? '-1' : '0'">
4013
- </thead>
4014
- </table>
4015
- </div>
4016
- }
4017
- <div #header class="k-grid-header-wrap" role="presentation" data-scrollable
4018
- [kendoGridResizableContainer]="lockedLeafColumns.length > 0"
4019
- [lockedWidth]="lockedWidth + scrollbarWidth + 2">
4020
- <table
4021
- role="presentation"
4022
- class="k-grid-header-table"
4023
- [style.width.px]="nonLockedWidth"
4024
- kendoGridResizableTable
4025
- [virtualColumns]="virtualColumns"
4026
- kendoGridTable
4027
- [size]="size">
4028
- <colgroup kendoGridColGroup
4029
- [columns]="headerLeafColumns"
4030
- [groups]="isLocked ? [] : group"
4031
- [detailTemplate]="detailTemplate">
4032
- </colgroup>
4033
- <thead kendoGridHeader
4034
- [resizable]="resizable"
4035
- role="rowgroup"
4036
- [scrollable]="true"
4037
- [columns]="headerColumns"
4038
- [totalColumnLevels]="totalColumnLevels"
4039
- [sort]="sort"
4040
- [filter]="filter"
4041
- [filterable]="filterable"
4042
- [groupable]="showGroupPanel"
4043
- [reorderable]="reorderable"
4044
- [groups]="isLocked ? [] : group"
4045
- [sortable]="sortable"
4046
- [columnMenu]="columnMenuOptions"
4047
- [columnMenuTemplate]="columnMenuTemplate"
4048
- [lockedColumnsCount]="lockedLeafColumns.length"
4049
- [totalColumnsCount]="leafColumns.length"
4050
- [totalColumns]="columnsContainer"
4051
- [detailTemplate]="detailTemplate"
4052
- [tabIndex]="navigation.tableEnabled ? '-1' : '0'">
4053
- </thead>
4054
- </table>
4055
- @if (virtualColumns) {
4056
- <div class="k-width-container" role="presentation">
4057
- <div [style.width.px]="columnsContainer.unlockedWidth"></div>
4058
- </div>
4059
- }
4060
- </div>
4061
- </div>
4062
- }
4063
- <kendo-grid-list
4064
- [data]="$any(view)"
4065
- [rowHeight]="rowHeight"
4066
- [detailRowHeight]="detailRowHeight"
4067
- [total]="totalCount"
4068
- [take]="pageSize"
4069
- [groups]="group"
4070
- [groupable]="groupable"
4071
- [skip]="skip"
4072
- [trackBy]="trackBy"
4073
- [columns]="columnsContainer"
4074
- [selectable]="selectable"
4075
- [filterable]="filterable"
4076
- [detailTemplate]="detailTemplate"
4077
- [noRecordsTemplate]="noRecordsTemplate"
4078
- [size]="size"
4079
- (pageChange)="notifyPageChange('list', $event)"
4080
- [rowClass]="rowClass"
4081
- [rowSticky]="rowSticky"
4082
- [loading]="loading"
4083
- [isVirtual]="isVirtual"
4084
- [cellLoadingTemplate]="cellLoadingTemplate?.templateRef"
4085
- [loadingTemplate]="loadingTemplate?.templateRef"
4086
- [virtualColumns]="virtualColumns"
4087
- (scrollBottom)="notifyScrollBottom()"
4088
- (contentScroll)="contentScroll.emit($event)"
4089
- kendoDraggable
4090
- kendoGridSelectionMarquee
4091
- [enableDrag]="marqueeSelection"
4092
- [sort]="sort">
4093
- </kendo-grid-list>
4094
- @if (showFooter) {
4095
- <div
4096
- class="k-grid-footer"
4097
- [style.padding]="headerPadding">
4098
- @if (lockedLeafColumns.length && !isStacked) {
4099
- <div
4100
- class="k-grid-footer-locked"
4101
- [style.width.px]="lockedWidth">
4102
- <table
4103
- role="presentation"
4104
- class="k-grid-footer-table"
4105
- kendoGridResizableTable
4106
- [locked]="true"
4107
- [style.width.px]="lockedWidth"
4108
- kendoGridTable
4109
- [size]="size">
4110
- @if (!isStacked) {
4111
- <colgroup kendoGridColGroup
4112
- [columns]="$any(lockedLeafColumns)"
4113
- [groups]="group"
4114
- [detailTemplate]="detailTemplate">
4115
- </colgroup>
4116
- }
4117
- <tfoot kendoGridFooter
4118
- [scrollable]="true"
4119
- [groups]="group"
4120
- [columns]="$any(lockedLeafColumns)"
4121
- [detailTemplate]="detailTemplate"
4122
- [logicalRowIndex]="ariaRowCount"
4123
- [totalColumns]="columnsContainer"
4124
- [totalColumnsCount]="leafColumns.length">
4125
- </tfoot>
4126
- </table>
4127
- </div>
4128
- }
4129
- <div #footer
4130
- class="k-grid-footer-wrap" data-scrollable
4131
- [kendoGridResizableContainer]="lockedLeafColumns.length > 0 && !isStacked"
4132
- [lockedWidth]="lockedWidth + scrollbarWidth + 3">
4133
- <table
4134
- role="presentation"
4135
- class="k-grid-footer-table"
4136
- [style.width.px]="nonLockedWidth"
4137
- kendoGridTable
4138
- kendoGridResizableTable
4139
- [size]="size">
4140
- @if (!isStacked) {
4141
- <colgroup kendoGridColGroup
4142
- [columns]="$any(headerLeafColumns)"
4143
- [groups]="isLocked ? [] : group"
4144
- [detailTemplate]="detailTemplate">
4145
- </colgroup>
4146
- }
4147
- <tfoot kendoGridFooter
4148
- [logicalRowIndex]="ariaRowCount"
4149
- [scrollable]="true"
4150
- [groups]="isLocked ? [] : group"
4151
- [columns]="$any(headerColumns)"
4152
- [lockedColumnsCount]="isStacked ? 0 : lockedLeafColumns.length"
4153
- [detailTemplate]="detailTemplate"
4154
- [totalColumns]="columnsContainer"
4155
- [totalColumnsCount]="leafColumns.length">
4156
- </tfoot>
4157
- </table>
4158
- </div>
4159
- </div>
4160
- }
4161
- }
4162
- @if (!isScrollable) {
4163
- <table
4164
- [style.table-layout]="resizable ? 'fixed' : null"
4165
- kendoGridTable
4166
- kendoGridResizableTable
4167
- class="k-grid-table"
4168
- role="presentation"
4169
- [size]="size">
4170
- <colgroup kendoGridColGroup
4171
- [columns]="$any(leafColumns)"
4172
- [groups]="group"
4173
- [sort]="sort"
4174
- [detailTemplate]="detailTemplate">
4175
- </colgroup>
4176
- @if (!hideHeader && !isStacked) {
4177
- <thead kendoGridHeader
4178
- class="k-grid-header"
4179
- [class.k-grid-draggable-header]="groupable || reorderable"
4180
- role="rowgroup"
4181
- [resizable]="resizable"
4182
- [scrollable]="false"
4183
- [columns]="$any(visibleColumns)"
4184
- [totalColumnLevels]="totalColumnLevels"
4185
- [totalColumns]="columnsContainer"
4186
- [groups]="group"
4187
- [groupable]="showGroupPanel"
4188
- [reorderable]="reorderable"
4189
- [sort]="sort"
4190
- [sortable]="sortable"
4191
- [filter]="filter"
4192
- [filterable]="filterable"
4193
- [columnMenu]="columnMenuOptions"
4194
- [columnMenuTemplate]="columnMenuTemplate"
4195
- [detailTemplate]="detailTemplate"
4196
- [tabIndex]="navigation.tableEnabled ? '-1' : '0'">
4197
- </thead>
4198
- }
4199
- <tbody kendoGridTableBody
4200
- [isLoading]="loading"
4201
- [rowHeight]="rowHeight"
4202
- [detailRowHeight]="detailRowHeight"
4203
- [groups]="group"
4204
- [rowsToRender]="rowsToRender"
4205
- [skip]="skip"
4206
- [columns]="$any(leafColumns)"
4207
- [totalColumnsCount]="leafColumns.length"
4208
- [totalColumns]="columnsContainer"
4209
- [selectable]="selectable"
4210
- [filterable]="filterable"
4211
- [noRecordsTemplate]="noRecordsTemplate"
4212
- [detailTemplate]="detailTemplate"
4213
- [trackBy]="trackBy"
4214
- [rowClass]="rowClass"
4215
- kendoDraggable
4216
- kendoGridSelectionMarquee
4217
- [enableDrag]="marqueeSelection">
4218
- </tbody>
4219
- @if (showFooter) {
4220
- <tfoot kendoGridFooter
4221
- [scrollable]="false"
4222
- [logicalRowIndex]="ariaRowCount"
4223
- [groups]="group"
4224
- [columns]="$any(leafColumns)"
4225
- [detailTemplate]="detailTemplate"
4226
- [totalColumns]="columnsContainer"
4227
- [totalColumnsCount]="leafColumns.length">
4228
- </tfoot>
4229
- }
4230
- </table>
4231
- }
4232
- @if (loading) {
4233
- <div [loadingTemplate]="loadingTemplate" kendoGridLoading></div>
4234
- }
4235
- </div>
4236
- @if (showStatusBar) {
4237
- <kendo-grid-status-bar
4238
- [statusBarTemplate]="statusBarTemplate">
4239
- </kendo-grid-status-bar>
4240
- }
4241
- @if (showBottomPager) {
4242
- <kendo-pager
4243
- #bottomPager
4244
- class="k-grid-pager"
4245
- [navigable]="navigation.pagerEnabled"
4246
- [pageSize]="pageSize"
4247
- [total]="view.total"
4248
- [skip]="skip"
4249
- [size]="size"
4250
- [responsive]="normalizedPageableSettings.responsive && !pagerTemplate"
4251
- [buttonCount]="normalizedPageableSettings.buttonCount"
4252
- [info]="normalizedPageableSettings.info"
4253
- [pageSizeValues]="normalizedPageableSettings.pageSizes"
4254
- [previousNext]="normalizedPageableSettings.previousNext"
4255
- [type]="normalizedPageableSettings.type"
4256
- (pageChange)="notifyPageChange('pager', $event)"
4257
- (pagerInputVisibilityChange)="handlePagerVisibilityChange('showPagerInput', $event)"
4258
- (pageTextVisibilityChange)="handlePagerVisibilityChange('showPagerPageText', $event)"
4259
- (itemsTextVisibilityChange)="handlePagerVisibilityChange('showPagerItemsText', $event)">
4260
- <ng-template kendoPagerTemplate>
4261
- <ng-container
4262
- [ngTemplateOutlet]="pagerTemplate ? pagerTemplate?.templateRef : defaultPager"
4263
- [ngTemplateOutletContext]="bottomPager.templateContext"></ng-container>
4264
- </ng-template>
4265
- <kendo-pager-messages
4266
- [ariaLabel]="messageFor('pagerLabel')"
4267
- [firstPage]="messageFor('pagerFirstPage')"
4268
- [inputLabel]="messageFor('pagerInputLabel')"
4269
- [previousPage]="messageFor('pagerPreviousPage')"
4270
- [nextPage]="messageFor('pagerNextPage')"
4271
- [lastPage]="messageFor('pagerLastPage')"
4272
- [selectPage]="messageFor('pagerSelectPage')"
4273
- [page]="messageFor('pagerPage')"
4274
- [itemsPerPage]="messageFor('pagerItemsPerPage')"
4275
- [items]="messageFor('pagerItems')"
4276
- [of]="messageFor('pagerOf')"
4277
- [pageNumberInputTitle]="messageFor('pagerPageNumberInputTitle')">
4278
- </kendo-pager-messages>
4279
- </kendo-pager>
4280
- }
4281
- @if (showBottomToolbar) {
4282
- <kendo-grid-toolbar
4283
- class="k-grid-toolbar-bottom"
4284
- [size]="size"
4285
- [navigable]="navigation.toolbarEnabled"
4286
- [attr.aria-label]="messageFor('bottomToolbarLabel')"
4287
- [attr.aria-controls]="ariaRootId"
4288
- position="bottom">
4289
- </kendo-grid-toolbar>
4290
- }
4291
-
4292
- <ng-template #defaultHint>
4293
- <kendo-icon-wrapper
4294
- [name]="getHintSettings('hintIcon')"
4295
- [svgIcon]="getHintSettings('hintSVGIcon')"
4296
- innerCssClass="k-drag-status">
4297
- </kendo-icon-wrapper>
4298
- {{hintText}}
4299
- </ng-template>
4300
-
4301
- <ng-template #defaultPager>
4302
- <div class="k-pager-numbers-wrap">
4303
- @if (normalizedPageableSettings.previousNext) {
4304
- <kendo-pager-prev-buttons [size]="size"></kendo-pager-prev-buttons>
4305
- }
4306
- @if (normalizedPageableSettings.type === 'numeric' && normalizedPageableSettings.buttonCount > 0) {
4307
- <kendo-pager-numeric-buttons
4308
- [size]="size"
4309
- [buttonCount]="normalizedPageableSettings.buttonCount">
4310
- </kendo-pager-numeric-buttons>
4311
- }
4312
- @if (normalizedPageableSettings.type === 'input' || showPagerInput) {
4313
- <kendo-pager-input [size]="size" [showPageText]="showPagerPageText"></kendo-pager-input>
4314
- }
4315
- @if (normalizedPageableSettings.previousNext) {
4316
- <kendo-pager-next-buttons [size]="size"></kendo-pager-next-buttons>
4317
- }
4318
- </div>
4319
- @if (normalizedPageableSettings.pageSizes) {
4320
- <kendo-pager-page-sizes
4321
- [size]="size"
4322
- [pageSizes]="normalizedPageableSettings.pageSizes"
4323
- [showItemsText]="showPagerItemsText">
4324
- </kendo-pager-page-sizes>
4325
- }
4326
- @if (normalizedPageableSettings.info) {
4327
- <kendo-pager-info>
4328
- </kendo-pager-info>
4329
- }
4330
- </ng-template>
4331
- <div #dialogContainer></div>
4332
- <div #windowContainer></div>
4333
-
4334
- @if (isAdaptiveModeEnabled) {
4335
- <kendo-grid-adaptive-renderer></kendo-grid-adaptive-renderer>
4336
- }
4337
- @if (isVirtual) {
4338
- <kendo-resize-sensor (resize)="onResize()"></kendo-resize-sensor>
4339
- }
4340
-
4341
- @if (showLicenseWatermark) {
4342
- <div kendoWatermarkOverlay [licenseMessage]="licenseMessage"></div>
4343
- }
4344
- `,
4345
- standalone: true,
4346
- imports: [
4347
- LocalizedMessagesDirective,
4348
- GridToolbarComponent,
4349
- GroupPanelComponent,
4350
- TableDirective,
4351
- GridTableDirective,
4352
- ColGroupComponent,
4353
- HeaderComponent,
4354
- ResizableContainerDirective,
4355
- ListComponent,
4356
- DragTargetContainerDirective,
4357
- DropTargetContainerDirective,
4358
- DraggableDirective,
4359
- GridMarqueeDirective,
4360
- FooterComponent,
4361
- TableBodyComponent,
4362
- LoadingComponent,
4363
- StatusBarComponent,
4364
- IconWrapperComponent,
4365
- WatermarkOverlayComponent,
4366
- ...KENDO_PAGER,
4367
- NgTemplateOutlet,
4368
- AdaptiveRendererComponent,
4369
- ResizeSensorComponent
4370
- ]
4371
- }]
4372
- }], ctorParameters: () => [{ type: i1.BrowserSupportService }, { type: i2.SelectionService }, { type: i3.CellSelectionService }, { type: i0.ElementRef }, { type: i4.GroupInfoService }, { type: i5.GroupsService }, { type: i6.ChangeNotificationService }, { type: i7.DetailsService }, { type: i8.EditService }, { type: i9.FilterService }, { type: i10.PDFService }, { type: i11.ResponsiveService }, { type: i0.Renderer2 }, { type: i12.ExcelService }, { type: i0.NgZone }, { type: i13.ScrollSyncService }, { type: i14.DomEventsService }, { type: i15.ColumnResizingService }, { type: i0.ChangeDetectorRef }, { type: i16.ColumnReorderService }, { type: i17.ColumnInfoService }, { type: i18.NavigationService }, { type: i19.SortService }, { type: i20.ScrollRequestService }, { type: i21.LocalizationService }, { type: i22.ContextService }, { type: i23.SizingOptionsService }, { type: i24.AdaptiveGridService }, { type: i25.RowReorderService }, { type: i26.DataMappingService }, { type: i27.GridAIRequestResponseService }, { type: i28.IdService }], propDecorators: { data: [{
4373
- type: Input
4374
- }], pageSize: [{
4375
- type: Input
4376
- }], height: [{
4377
- type: Input
4378
- }], rowHeight: [{
4379
- type: Input
4380
- }], adaptiveMode: [{
4381
- type: Input
4382
- }], detailRowHeight: [{
4383
- type: Input
4384
- }], skip: [{
4385
- type: Input
4386
- }], scrollable: [{
4387
- type: Input
4388
- }], selectable: [{
4389
- type: Input
4390
- }], sort: [{
4391
- type: Input
4392
- }], size: [{
4393
- type: Input
4394
- }], trackBy: [{
4395
- type: Input
4396
- }], filter: [{
4397
- type: Input
4398
- }], group: [{
4399
- type: Input
4400
- }], virtualColumns: [{
4401
- type: Input
4402
- }], filterable: [{
4403
- type: Input
4404
- }], sortable: [{
4405
- type: Input
4406
- }], pageable: [{
4407
- type: Input
4408
- }], groupable: [{
4409
- type: Input
4410
- }], gridResizable: [{
4411
- type: Input
4412
- }], rowReorderable: [{
4413
- type: Input
4414
- }], navigable: [{
4415
- type: Input
4416
- }], autoSize: [{
4417
- type: Input
4418
- }], rowClass: [{
4419
- type: Input
4420
- }], rowSticky: [{
4421
- type: Input
4422
- }], rowSelected: [{
4423
- type: Input
4424
- }], isRowSelectable: [{
4425
- type: Input
4426
- }], cellSelected: [{
4427
- type: Input
4428
- }], resizable: [{
4429
- type: Input
4430
- }], reorderable: [{
4431
- type: Input
4432
- }], loading: [{
4433
- type: Input
4434
- }], columnMenu: [{
4435
- type: Input
4436
- }], hideHeader: [{
4437
- type: Input
4438
- }], showInactiveTools: [{
4439
- type: Input
4440
- }], isDetailExpanded: [{
4441
- type: Input
4442
- }], isGroupExpanded: [{
4443
- type: Input
4444
- }], dataLayoutMode: [{
4445
- type: Input
4446
- }], filterChange: [{
4447
- type: Output
4448
- }], pageChange: [{
4449
- type: Output
4450
- }], groupChange: [{
4451
- type: Output
4452
- }], sortChange: [{
4453
- type: Output
4454
- }], selectionChange: [{
4455
- type: Output
4456
- }], rowReorder: [{
4457
- type: Output
4458
- }], dataStateChange: [{
4459
- type: Output
4460
- }], gridStateChange: [{
4461
- type: Output
4462
- }], groupExpand: [{
4463
- type: Output
4464
- }], groupCollapse: [{
4465
- type: Output
4466
- }], detailExpand: [{
4467
- type: Output
4468
- }], detailCollapse: [{
4469
- type: Output
4470
- }], edit: [{
4471
- type: Output
4472
- }], cancel: [{
4473
- type: Output
4474
- }], save: [{
4475
- type: Output
4476
- }], remove: [{
4477
- type: Output
4478
- }], add: [{
4479
- type: Output
4480
- }], cellClose: [{
4481
- type: Output
4482
- }], cellClick: [{
4483
- type: Output
4484
- }], pdfExport: [{
4485
- type: Output
4486
- }], excelExport: [{
4487
- type: Output
4488
- }], columnResize: [{
4489
- type: Output
4490
- }], columnReorder: [{
4491
- type: Output
4492
- }], columnVisibilityChange: [{
4493
- type: Output
4494
- }], columnLockedChange: [{
4495
- type: Output
4496
- }], columnStickyChange: [{
4497
- type: Output
4498
- }], scrollBottom: [{
4499
- type: Output
4500
- }], contentScroll: [{
4501
- type: Output
4502
- }], columns: [{
4503
- type: ContentChildren,
4504
- args: [ColumnBase]
4505
- }], dir: [{
4506
- type: HostBinding,
4507
- args: ['attr.dir']
4508
- }], hostClass: [{
4509
- type: HostBinding,
4510
- args: ['class.k-grid']
4511
- }], sizeSmallClass: [{
4512
- type: HostBinding,
4513
- args: ['class.k-grid-sm']
4514
- }], sizeMediumClass: [{
4515
- type: HostBinding,
4516
- args: ['class.k-grid-md']
4517
- }], stackedClass: [{
4518
- type: HostBinding,
4519
- args: ['class.k-grid-stack']
4520
- }], lockedClasses: [{
4521
- type: HostBinding,
4522
- args: ['class.k-grid-lockedcolumns']
4523
- }], virtualClasses: [{
4524
- type: HostBinding,
4525
- args: ['class.k-grid-virtual']
4526
- }], noScrollbarClass: [{
4527
- type: HostBinding,
4528
- args: ['class.k-grid-no-scrollbar']
4529
- }], isResizable: [{
4530
- type: HostBinding,
4531
- args: ['class.k-grid-resizable']
4532
- }], minWidth: [{
4533
- type: HostBinding,
4534
- args: ['style.minWidth']
4535
- }], maxWidth: [{
4536
- type: HostBinding,
4537
- args: ['style.maxWidth']
4538
- }], minHeight: [{
4539
- type: HostBinding,
4540
- args: ['style.minHeight']
4541
- }], maxHeight: [{
4542
- type: HostBinding,
4543
- args: ['style.maxHeight']
4544
- }], detailTemplateChildren: [{
4545
- type: ContentChildren,
4546
- args: [DetailTemplateDirective]
4547
- }], cellLoadingTemplateChildren: [{
4548
- type: ContentChildren,
4549
- args: [CellLoadingTemplateDirective]
4550
- }], loadingTemplateChildren: [{
4551
- type: ContentChildren,
4552
- args: [LoadingTemplateDirective]
4553
- }], statusBarTemplateChildren: [{
4554
- type: ContentChildren,
4555
- args: [StatusBarTemplateDirective]
4556
- }], noRecordsTemplateChildren: [{
4557
- type: ContentChildren,
4558
- args: [NoRecordsTemplateDirective]
4559
- }], pagerTemplateChildren: [{
4560
- type: ContentChildren,
4561
- args: [PagerTemplateDirective]
4562
- }], toolbarTemplateChildren: [{
4563
- type: ContentChildren,
4564
- args: [ToolbarTemplateDirective]
4565
- }], columnMenuTemplates: [{
4566
- type: ContentChildren,
4567
- args: [ColumnMenuTemplateDirective]
4568
- }], lockedHeader: [{
4569
- type: ViewChild,
4570
- args: ['lockedHeader']
4571
- }], header: [{
4572
- type: ViewChild,
4573
- args: ['header']
4574
- }], footer: [{
4575
- type: ViewChildren,
4576
- args: ['footer']
4577
- }], ariaRoot: [{
4578
- type: ViewChild,
4579
- args: ['ariaRoot', { static: true }]
4580
- }], dragTargetContainer: [{
4581
- type: ViewChild,
4582
- args: [DragTargetContainerDirective]
4583
- }], dropTargetContainer: [{
4584
- type: ViewChild,
4585
- args: [DropTargetContainerDirective]
4586
- }], dialogContainer: [{
4587
- type: ViewChild,
4588
- args: ['dialogContainer', { read: ViewContainerRef }]
4589
- }], windowContainer: [{
4590
- type: ViewChild,
4591
- args: ['windowContainer', { read: ViewContainerRef }]
4592
- }], adaptiveRenderer: [{
4593
- type: ViewChild,
4594
- args: [AdaptiveRendererComponent]
4595
- }], listComponent: [{
4596
- type: ViewChild,
4597
- args: [ListComponent]
4598
- }] } });