@genexus/genexus-ide-ui 0.0.108 → 0.0.109

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 (267) hide show
  1. package/dist/cjs/ch-dropdown_2.cjs.entry.js +1 -1
  2. package/dist/cjs/ch-dropdown_2.cjs.entry.js.map +1 -1
  3. package/dist/cjs/ch-grid_8.cjs.entry.js +339 -321
  4. package/dist/cjs/ch-grid_8.cjs.entry.js.map +1 -1
  5. package/dist/cjs/ch-icon_5.cjs.entry.js +3 -1
  6. package/dist/cjs/ch-icon_5.cjs.entry.js.map +1 -1
  7. package/dist/cjs/ch-suggest_4.cjs.entry.js +1 -1
  8. package/dist/cjs/ch-suggest_4.cjs.entry.js.map +1 -1
  9. package/dist/cjs/ch-tree-view_5.cjs.entry.js +41 -20
  10. package/dist/cjs/ch-tree-view_5.cjs.entry.js.map +1 -1
  11. package/dist/cjs/{common-103f62f6.js → common-2e355c7d.js} +31 -1
  12. package/dist/cjs/common-2e355c7d.js.map +1 -0
  13. package/dist/cjs/genexus-ide-ui.cjs.js +1 -1
  14. package/dist/cjs/gx-ide-add-module-servers.cjs.entry.js +98 -0
  15. package/dist/cjs/gx-ide-add-module-servers.cjs.entry.js.map +1 -0
  16. package/dist/cjs/{gx-ide-container_2.cjs.entry.js → gx-ide-container_3.cjs.entry.js} +47 -4
  17. package/dist/cjs/gx-ide-container_3.cjs.entry.js.map +1 -0
  18. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js +2 -2
  19. package/dist/cjs/gx-ide-create-kb-from-server.cjs.entry.js.map +1 -1
  20. package/dist/cjs/gx-ide-edit-module-servers.cjs.entry.js +98 -0
  21. package/dist/cjs/gx-ide-edit-module-servers.cjs.entry.js.map +1 -0
  22. package/dist/cjs/gx-ide-empty-state_2.cjs.entry.js.map +1 -1
  23. package/dist/cjs/gx-ide-import-from-design.cjs.entry.js +1 -1
  24. package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js +232 -0
  25. package/dist/cjs/gx-ide-manage-module-references.cjs.entry.js.map +1 -0
  26. package/dist/cjs/gx-ide-new-environment.cjs.entry.js +1 -1
  27. package/dist/cjs/gx-ide-new-kb.cjs.entry.js +1 -1
  28. package/dist/cjs/gx-ide-share-kb.cjs.entry.js +1 -1
  29. package/dist/cjs/gx-ide-status-buttons.cjs.entry.js +81 -0
  30. package/dist/cjs/gx-ide-status-buttons.cjs.entry.js.map +1 -0
  31. package/dist/cjs/gx-ide-ww-images.cjs.entry.js +1 -1
  32. package/dist/cjs/gxg-buttons-container_2.cjs.entry.js +184 -0
  33. package/dist/cjs/gxg-buttons-container_2.cjs.entry.js.map +1 -0
  34. package/dist/cjs/loader.cjs.js +1 -1
  35. package/dist/collection/collection-manifest.json +3 -0
  36. package/dist/collection/common/common.js +21 -0
  37. package/dist/collection/common/common.js.map +1 -1
  38. package/dist/collection/components/_helpers/container/container.css +6 -0
  39. package/dist/collection/components/_helpers/container/container.js +40 -0
  40. package/dist/collection/components/_helpers/container/container.js.map +1 -1
  41. package/dist/collection/components/_helpers/list-selector/list-selector-item/list-selector-item.js +1 -1
  42. package/dist/collection/components/_helpers/list-selector/list-selector.js +1 -1
  43. package/dist/collection/components/create-kb-from-server/create-kb-from-server.js +1 -1
  44. package/dist/collection/components/create-kb-from-server/create-kb-from-server.js.map +1 -1
  45. package/dist/collection/components/modules/add-module-servers/add-module-servers.css +560 -0
  46. package/dist/collection/components/modules/add-module-servers/add-module-servers.js +251 -0
  47. package/dist/collection/components/modules/add-module-servers/add-module-servers.js.map +1 -0
  48. package/dist/collection/components/modules/add-module-servers/gx-ide-assets/add-module-servers/langs/add-module-servers.lang.en.json +11 -0
  49. package/dist/collection/components/modules/add-module-servers/gx-ide-assets/add-module-servers/langs/add-module-servers.lang.ja.json +3 -0
  50. package/dist/collection/components/modules/add-module-servers/gx-ide-assets/add-module-servers/langs/add-module-servers.lang.zh.json +3 -0
  51. package/dist/collection/components/modules/edit-module-servers/edit-module-servers.css +560 -0
  52. package/dist/collection/components/modules/edit-module-servers/edit-module-servers.js +251 -0
  53. package/dist/collection/components/modules/edit-module-servers/edit-module-servers.js.map +1 -0
  54. package/dist/collection/components/modules/edit-module-servers/gx-ide-assets/edit-module-servers/langs/edit-module-servers.lang.en.json +11 -0
  55. package/dist/collection/components/modules/edit-module-servers/gx-ide-assets/edit-module-servers/langs/edit-module-servers.lang.ja.json +3 -0
  56. package/dist/collection/components/modules/edit-module-servers/gx-ide-assets/edit-module-servers/langs/edit-module-servers.lang.zh.json +3 -0
  57. package/dist/collection/components/modules/manage-module-references/gx-ide-assets/manage-module-references/langs/manage-module-references.lang.en.json +29 -0
  58. package/dist/collection/components/modules/manage-module-references/gx-ide-assets/manage-module-references/langs/manage-module-references.lang.ja.json +3 -0
  59. package/dist/collection/components/modules/manage-module-references/gx-ide-assets/manage-module-references/langs/manage-module-references.lang.zh.json +3 -0
  60. package/dist/collection/components/modules/manage-module-references/manage-module-references.css +723 -0
  61. package/dist/collection/components/modules/manage-module-references/manage-module-references.js +397 -0
  62. package/dist/collection/components/modules/manage-module-references/manage-module-references.js.map +1 -0
  63. package/dist/collection/components/modules/types.js +2 -0
  64. package/dist/collection/components/modules/types.js.map +1 -0
  65. package/dist/collection/pages/assets/common.js +7 -0
  66. package/dist/components/buttons-container.js +8 -3
  67. package/dist/components/buttons-container.js.map +1 -1
  68. package/dist/components/card.js.map +1 -1
  69. package/dist/components/ch-grid-column2.js +4 -1
  70. package/dist/components/ch-grid-column2.js.map +1 -1
  71. package/dist/components/ch-grid2.js +342 -322
  72. package/dist/components/ch-grid2.js.map +1 -1
  73. package/dist/components/combo-box.js +1 -1
  74. package/dist/components/common.js +30 -1
  75. package/dist/components/common.js.map +1 -1
  76. package/dist/components/container.js +9 -3
  77. package/dist/components/container.js.map +1 -1
  78. package/dist/components/dropdown.js +1 -1
  79. package/dist/components/dropdown.js.map +1 -1
  80. package/dist/components/form-checkbox.js +1 -1
  81. package/dist/components/form-radio-group.js +1 -1
  82. package/dist/components/form-text.js +1 -1
  83. package/dist/components/form-textarea.js +1 -1
  84. package/dist/components/form.js +1 -1
  85. package/dist/components/gx-ide-add-module-servers.d.ts +11 -0
  86. package/dist/components/gx-ide-add-module-servers.js +186 -0
  87. package/dist/components/gx-ide-add-module-servers.js.map +1 -0
  88. package/dist/components/gx-ide-ai-assistant.js +1 -1
  89. package/dist/components/gx-ide-bpm-app-declaration.js +2 -2
  90. package/dist/components/gx-ide-create-kb-from-server.js +3 -3
  91. package/dist/components/gx-ide-create-kb-from-server.js.map +1 -1
  92. package/dist/components/gx-ide-dashboard-home.js +2 -2
  93. package/dist/components/gx-ide-data-selector.js +2 -2
  94. package/dist/components/gx-ide-edit-module-servers.d.ts +11 -0
  95. package/dist/components/gx-ide-edit-module-servers.js +186 -0
  96. package/dist/components/gx-ide-edit-module-servers.js.map +1 -0
  97. package/dist/components/gx-ide-empty-state2.js +2 -2
  98. package/dist/components/gx-ide-import-from-design.js +2 -2
  99. package/dist/components/gx-ide-kb-manager-export.js +2 -2
  100. package/dist/components/gx-ide-kb-manager-import.js +2 -2
  101. package/dist/components/gx-ide-manage-module-references.d.ts +11 -0
  102. package/dist/components/gx-ide-manage-module-references.js +432 -0
  103. package/dist/components/gx-ide-manage-module-references.js.map +1 -0
  104. package/dist/components/gx-ide-new-environment.js +2 -2
  105. package/dist/components/gx-ide-new-kb.js +2 -2
  106. package/dist/components/gx-ide-new-object.js +2 -2
  107. package/dist/components/gx-ide-object-selector.js +2 -2
  108. package/dist/components/gx-ide-references.js +2 -2
  109. package/dist/components/gx-ide-share-kb.js +2 -2
  110. package/dist/components/gx-ide-start-page.js +2 -2
  111. package/dist/components/gx-ide-status-buttons2.js +1 -1
  112. package/dist/components/gx-ide-team-dev-commit.js +2 -2
  113. package/dist/components/gx-ide-team-dev-select-recent-comment.js +2 -2
  114. package/dist/components/gx-ide-team-dev-update-partial-selection.js +2 -2
  115. package/dist/components/gx-ide-team-dev-update-to-revision.js +2 -2
  116. package/dist/components/gx-ide-team-dev-update.js +2 -2
  117. package/dist/components/gx-ide-template.js +2 -2
  118. package/dist/components/gx-ide-title.js +1 -1
  119. package/dist/components/gx-ide-top-bar.js +1 -1
  120. package/dist/components/gx-ide-ww-images.js +2 -2
  121. package/dist/components/gxg-container.js +1 -1
  122. package/dist/components/gxg-form-checkbox-group2.js +1 -1
  123. package/dist/components/gxg-menu-slim-list.js +1 -1
  124. package/dist/components/gxg-title.js +1 -1
  125. package/dist/components/gxg-top-state-bar2.js +17 -8
  126. package/dist/components/gxg-top-state-bar2.js.map +1 -1
  127. package/dist/components/icon2.js +3 -1
  128. package/dist/components/icon2.js.map +1 -1
  129. package/dist/components/ide-loader.js +1 -1
  130. package/dist/components/list-box.js +1 -1
  131. package/dist/components/list-selector.js +1 -1
  132. package/dist/components/recent-news.js +2 -2
  133. package/dist/components/suggest.js +2 -2
  134. package/dist/components/suggest.js.map +1 -1
  135. package/dist/components/title-editable.js +1 -1
  136. package/dist/components/title.js +32 -31
  137. package/dist/components/title.js.map +1 -1
  138. package/dist/components/title2.js +31 -32
  139. package/dist/components/title2.js.map +1 -1
  140. package/dist/components/tree-view-item.js +8 -2
  141. package/dist/components/tree-view-item.js.map +1 -1
  142. package/dist/components/tree-view2.js +32 -15
  143. package/dist/components/tree-view2.js.map +1 -1
  144. package/dist/esm/ch-dropdown_2.entry.js +1 -1
  145. package/dist/esm/ch-dropdown_2.entry.js.map +1 -1
  146. package/dist/esm/ch-grid_8.entry.js +339 -321
  147. package/dist/esm/ch-grid_8.entry.js.map +1 -1
  148. package/dist/esm/ch-icon_5.entry.js +3 -1
  149. package/dist/esm/ch-icon_5.entry.js.map +1 -1
  150. package/dist/esm/ch-suggest_4.entry.js +1 -1
  151. package/dist/esm/ch-suggest_4.entry.js.map +1 -1
  152. package/dist/esm/ch-tree-view_5.entry.js +41 -20
  153. package/dist/esm/ch-tree-view_5.entry.js.map +1 -1
  154. package/dist/esm/{common-f2983db2.js → common-aaad5759.js} +31 -2
  155. package/dist/esm/common-aaad5759.js.map +1 -0
  156. package/dist/esm/genexus-ide-ui.js +1 -1
  157. package/dist/esm/gx-ide-add-module-servers.entry.js +94 -0
  158. package/dist/esm/gx-ide-add-module-servers.entry.js.map +1 -0
  159. package/dist/esm/{gx-ide-container_2.entry.js → gx-ide-container_3.entry.js} +47 -5
  160. package/dist/esm/gx-ide-container_3.entry.js.map +1 -0
  161. package/dist/esm/gx-ide-create-kb-from-server.entry.js +2 -2
  162. package/dist/esm/gx-ide-create-kb-from-server.entry.js.map +1 -1
  163. package/dist/esm/gx-ide-edit-module-servers.entry.js +94 -0
  164. package/dist/esm/gx-ide-edit-module-servers.entry.js.map +1 -0
  165. package/dist/esm/gx-ide-empty-state_2.entry.js.map +1 -1
  166. package/dist/esm/gx-ide-import-from-design.entry.js +1 -1
  167. package/dist/esm/gx-ide-manage-module-references.entry.js +228 -0
  168. package/dist/esm/gx-ide-manage-module-references.entry.js.map +1 -0
  169. package/dist/esm/gx-ide-new-environment.entry.js +1 -1
  170. package/dist/esm/gx-ide-new-kb.entry.js +1 -1
  171. package/dist/esm/gx-ide-share-kb.entry.js +1 -1
  172. package/dist/esm/gx-ide-status-buttons.entry.js +77 -0
  173. package/dist/esm/gx-ide-status-buttons.entry.js.map +1 -0
  174. package/dist/esm/gx-ide-ww-images.entry.js +1 -1
  175. package/dist/esm/gxg-buttons-container_2.entry.js +179 -0
  176. package/dist/esm/gxg-buttons-container_2.entry.js.map +1 -0
  177. package/dist/esm/loader.js +1 -1
  178. package/dist/genexus-ide-ui/genexus-ide-ui.css +5 -3
  179. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js +1 -1
  180. package/dist/genexus-ide-ui/genexus-ide-ui.esm.js.map +1 -1
  181. package/dist/genexus-ide-ui/gx-ide-assets/add-module-servers/langs/add-module-servers.lang.en.json +11 -0
  182. package/dist/genexus-ide-ui/gx-ide-assets/add-module-servers/langs/add-module-servers.lang.ja.json +3 -0
  183. package/dist/genexus-ide-ui/gx-ide-assets/add-module-servers/langs/add-module-servers.lang.zh.json +3 -0
  184. package/dist/genexus-ide-ui/gx-ide-assets/edit-module-servers/langs/edit-module-servers.lang.en.json +11 -0
  185. package/dist/genexus-ide-ui/gx-ide-assets/edit-module-servers/langs/edit-module-servers.lang.ja.json +3 -0
  186. package/dist/genexus-ide-ui/gx-ide-assets/edit-module-servers/langs/edit-module-servers.lang.zh.json +3 -0
  187. package/dist/genexus-ide-ui/gx-ide-assets/manage-module-references/langs/manage-module-references.lang.en.json +29 -0
  188. package/dist/genexus-ide-ui/gx-ide-assets/manage-module-references/langs/manage-module-references.lang.ja.json +3 -0
  189. package/dist/genexus-ide-ui/gx-ide-assets/manage-module-references/langs/manage-module-references.lang.zh.json +3 -0
  190. package/dist/genexus-ide-ui/{p-2c1f414f.entry.js → p-0c0c3f1d.entry.js} +53 -53
  191. package/dist/genexus-ide-ui/{p-2c1f414f.entry.js.map → p-0c0c3f1d.entry.js.map} +1 -1
  192. package/dist/genexus-ide-ui/{p-b571e9c0.entry.js → p-0df39b62.entry.js} +5 -2
  193. package/dist/genexus-ide-ui/{p-b571e9c0.entry.js.map → p-0df39b62.entry.js.map} +1 -1
  194. package/dist/genexus-ide-ui/{p-419b2877.entry.js → p-1cb2d0df.entry.js} +80 -47
  195. package/dist/genexus-ide-ui/p-1cb2d0df.entry.js.map +1 -0
  196. package/dist/genexus-ide-ui/p-350f49ac.js +101 -0
  197. package/dist/genexus-ide-ui/p-350f49ac.js.map +1 -0
  198. package/dist/genexus-ide-ui/p-36544e00.entry.js +138 -0
  199. package/dist/genexus-ide-ui/p-36544e00.entry.js.map +1 -0
  200. package/dist/genexus-ide-ui/{p-ca7233a5.entry.js → p-39337325.entry.js} +81 -10
  201. package/dist/genexus-ide-ui/p-39337325.entry.js.map +1 -0
  202. package/dist/genexus-ide-ui/p-40121554.entry.js.map +1 -1
  203. package/dist/genexus-ide-ui/p-41ac8e60.entry.js +211 -0
  204. package/dist/genexus-ide-ui/p-41ac8e60.entry.js.map +1 -0
  205. package/dist/genexus-ide-ui/{p-001e085a.entry.js → p-51e86542.entry.js} +2 -2
  206. package/dist/genexus-ide-ui/{p-d14b5546.entry.js → p-6f5b13a7.entry.js} +4 -2
  207. package/dist/genexus-ide-ui/{p-d14b5546.entry.js.map → p-6f5b13a7.entry.js.map} +1 -1
  208. package/dist/genexus-ide-ui/{p-94015503.entry.js → p-786e5448.entry.js} +374 -380
  209. package/dist/genexus-ide-ui/p-786e5448.entry.js.map +1 -0
  210. package/dist/genexus-ide-ui/p-a46794f4.entry.js +138 -0
  211. package/dist/genexus-ide-ui/p-a46794f4.entry.js.map +1 -0
  212. package/dist/genexus-ide-ui/p-adaf7aff.entry.js +365 -0
  213. package/dist/genexus-ide-ui/p-adaf7aff.entry.js.map +1 -0
  214. package/dist/genexus-ide-ui/{p-afce38d4.entry.js → p-b2099890.entry.js} +2 -2
  215. package/dist/genexus-ide-ui/{p-513ec2ad.entry.js → p-b4e526d6.entry.js} +2 -2
  216. package/dist/genexus-ide-ui/p-b7d0697f.entry.js +138 -0
  217. package/dist/genexus-ide-ui/p-b7d0697f.entry.js.map +1 -0
  218. package/dist/genexus-ide-ui/{p-8e8bb528.entry.js → p-c14b6b77.entry.js} +2 -2
  219. package/dist/genexus-ide-ui/{p-8e8bb528.entry.js.map → p-c14b6b77.entry.js.map} +1 -1
  220. package/dist/genexus-ide-ui/{p-2c733995.entry.js → p-d5903356.entry.js} +2 -2
  221. package/dist/genexus-ide-ui/{p-05102700.entry.js → p-df72101e.entry.js} +2 -2
  222. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/dropdown/dropdown.css +28 -28
  223. package/dist/node_modules/@genexus/chameleon-controls-library/dist/collection/components/tree-view/tree-view-item/tree-view-item.css +0 -2
  224. package/dist/node_modules/@genexus/gemini/dist/collection/components/buttons-container/buttons-container.css +11 -0
  225. package/dist/node_modules/@genexus/gemini/dist/collection/components/suggest/styles.css +1 -0
  226. package/dist/node_modules/@genexus/gemini/dist/collection/components/top-state-bar/gxg-top-state-bar.css +32 -41
  227. package/dist/node_modules/@genexus/gemini/dist/collection/components/tree-view/tree-view.css +37 -54
  228. package/dist/types/common/common.d.ts +2 -0
  229. package/dist/types/components/_helpers/container/container.d.ts +8 -0
  230. package/dist/types/components/modules/add-module-servers/add-module-servers.d.ts +60 -0
  231. package/dist/types/components/modules/edit-module-servers/edit-module-servers.d.ts +60 -0
  232. package/dist/types/components/modules/manage-module-references/manage-module-references.d.ts +98 -0
  233. package/dist/types/components/modules/types.d.ts +40 -0
  234. package/dist/types/components.d.ts +312 -52
  235. package/package.json +3 -3
  236. package/dist/cjs/common-103f62f6.js.map +0 -1
  237. package/dist/cjs/gx-ide-container_2.cjs.entry.js.map +0 -1
  238. package/dist/cjs/gx-ide-status-buttons_2.cjs.entry.js +0 -187
  239. package/dist/cjs/gx-ide-status-buttons_2.cjs.entry.js.map +0 -1
  240. package/dist/cjs/gxg-buttons-container.cjs.entry.js +0 -65
  241. package/dist/cjs/gxg-buttons-container.cjs.entry.js.map +0 -1
  242. package/dist/cjs/gxg-title.cjs.entry.js +0 -47
  243. package/dist/cjs/gxg-title.cjs.entry.js.map +0 -1
  244. package/dist/esm/common-f2983db2.js.map +0 -1
  245. package/dist/esm/gx-ide-container_2.entry.js.map +0 -1
  246. package/dist/esm/gx-ide-status-buttons_2.entry.js +0 -182
  247. package/dist/esm/gx-ide-status-buttons_2.entry.js.map +0 -1
  248. package/dist/esm/gxg-buttons-container.entry.js +0 -61
  249. package/dist/esm/gxg-buttons-container.entry.js.map +0 -1
  250. package/dist/esm/gxg-title.entry.js +0 -43
  251. package/dist/esm/gxg-title.entry.js.map +0 -1
  252. package/dist/genexus-ide-ui/p-419b2877.entry.js.map +0 -1
  253. package/dist/genexus-ide-ui/p-67406b36.entry.js +0 -71
  254. package/dist/genexus-ide-ui/p-67406b36.entry.js.map +0 -1
  255. package/dist/genexus-ide-ui/p-67ea84e8.js +0 -74
  256. package/dist/genexus-ide-ui/p-67ea84e8.js.map +0 -1
  257. package/dist/genexus-ide-ui/p-94015503.entry.js.map +0 -1
  258. package/dist/genexus-ide-ui/p-ca7233a5.entry.js.map +0 -1
  259. package/dist/genexus-ide-ui/p-cf5c3c10.entry.js +0 -270
  260. package/dist/genexus-ide-ui/p-cf5c3c10.entry.js.map +0 -1
  261. package/dist/genexus-ide-ui/p-d50b5b9a.entry.js +0 -67
  262. package/dist/genexus-ide-ui/p-d50b5b9a.entry.js.map +0 -1
  263. /package/dist/genexus-ide-ui/{p-001e085a.entry.js.map → p-51e86542.entry.js.map} +0 -0
  264. /package/dist/genexus-ide-ui/{p-afce38d4.entry.js.map → p-b2099890.entry.js.map} +0 -0
  265. /package/dist/genexus-ide-ui/{p-513ec2ad.entry.js.map → p-b4e526d6.entry.js.map} +0 -0
  266. /package/dist/genexus-ide-ui/{p-2c733995.entry.js.map → p-d5903356.entry.js.map} +0 -0
  267. /package/dist/genexus-ide-ui/{p-05102700.entry.js.map → p-df72101e.entry.js.map} +0 -0
@@ -11,11 +11,26 @@ import { d as defineCustomElement$1 } from './ch-window-close2.js';
11
11
  */
12
12
  class HTMLChGridRowElement extends HTMLElement {
13
13
  parentGrid;
14
+ static get observedAttributes() {
15
+ return ["selected", "marked"];
16
+ }
14
17
  constructor() {
15
18
  super();
16
19
  }
17
20
  connectedCallback() {
18
21
  this.addEventListener("cellCaretClicked", this.cellCaretClickedHandler);
22
+ if (this.selected || this.marked) {
23
+ this.grid.syncRowState(this);
24
+ }
25
+ }
26
+ attributeChangedCallback(name, _oldValue, value) {
27
+ if (name === "selected") {
28
+ this.selected = value !== null ? value !== "false" : false;
29
+ }
30
+ if (name === "marked") {
31
+ this.marked = value !== null ? value !== "false" : false;
32
+ }
33
+ this.grid?.syncRowState(this);
19
34
  }
20
35
  /**
21
36
  * Returns the parent ch-grid element of the grid row.
@@ -59,7 +74,9 @@ class HTMLChGridRowElement extends HTMLElement {
59
74
  set selected(value) {
60
75
  const selectedClasses = this.grid.rowSelectedClass?.split(" ");
61
76
  if (value === true) {
62
- this.setAttribute("selected", "");
77
+ if (!this.hasAttribute("selected")) {
78
+ this.setAttribute("selected", "");
79
+ }
63
80
  if (this.grid.rowSelectedClass) {
64
81
  this.classList.add(...selectedClasses);
65
82
  }
@@ -80,7 +97,9 @@ class HTMLChGridRowElement extends HTMLElement {
80
97
  set marked(value) {
81
98
  const markedClasses = this.grid.rowMarkedClass?.split(" ");
82
99
  if (value === true) {
83
- this.setAttribute("marked", "");
100
+ if (!this.hasAttribute("marked")) {
101
+ this.setAttribute("marked", "");
102
+ }
84
103
  if (this.grid.rowMarkedClass) {
85
104
  this.classList.add(...markedClasses);
86
105
  }
@@ -345,12 +364,15 @@ class HTMLChGridCellElement extends HTMLElement {
345
364
  this.cellType = value;
346
365
  }
347
366
  if (name === "row-drag") {
367
+ this.cellType = ChGridCellType.Rich;
348
368
  this.rowDrag = value !== null ? value !== "false" : false;
349
369
  }
350
370
  if (name === "row-selector") {
371
+ this.cellType = ChGridCellType.Rich;
351
372
  this.rowSelector = value !== null ? value !== "false" : false;
352
373
  }
353
374
  if (name === "row-actions") {
375
+ this.cellType = ChGridCellType.Rich;
354
376
  this.rowActions = value !== null ? value !== "false" : false;
355
377
  }
356
378
  }
@@ -405,6 +427,20 @@ class HTMLChGridCellElement extends HTMLElement {
405
427
  this.removeAttribute("selected");
406
428
  }
407
429
  }
430
+ /**
431
+ * A boolean value indicating whether the cell is focused.
432
+ */
433
+ get focused() {
434
+ return this.hasAttribute("focused");
435
+ }
436
+ set focused(value) {
437
+ if (value === true) {
438
+ this.setAttribute("focused", "");
439
+ }
440
+ else {
441
+ this.removeAttribute("focused");
442
+ }
443
+ }
408
444
  /**
409
445
  * A boolean value indicates whether the grid cell is visible.
410
446
  */
@@ -520,9 +556,11 @@ class HTMLChGridCellElement extends HTMLElement {
520
556
  if (this.rowSelector) {
521
557
  this.selector = this.shadowRoot.querySelector("[part='selector']");
522
558
  this.selector.addEventListener("mousedown", (eventInfo) => eventInfo.stopPropagation());
559
+ this.selector.addEventListener("touchend", (eventInfo) => eventInfo.stopPropagation());
523
560
  this.selector.addEventListener("click", this.selectorClickHandler.bind(this));
524
561
  this.selectorLabel = this.shadowRoot.querySelector("[part='selector-label']");
525
562
  this.selectorLabel.addEventListener("mousedown", (eventInfo) => eventInfo.stopPropagation());
563
+ this.selectorLabel.addEventListener("touchend", (eventInfo) => eventInfo.stopPropagation());
526
564
  this.selectorLabel.addEventListener("click", this.selectorLabelClickHandler.bind(this));
527
565
  }
528
566
  }
@@ -956,26 +994,45 @@ class ChGridManagerSelection {
956
994
  selectionStateNone = {
957
995
  rowFocused: null,
958
996
  rowsSelected: [],
997
+ cellFocused: null,
959
998
  cellSelected: null
960
999
  };
1000
+ touch;
961
1001
  selecting;
962
1002
  selectingRow;
963
1003
  selectingCell;
964
1004
  constructor(manager) {
965
1005
  this.manager = manager;
966
1006
  }
967
- select(state, row, cell, append, range, context) {
968
- if (this.manager.grid.rowSelectionMode === "none") {
1007
+ touchStart(touchEvent) {
1008
+ this.touch = {
1009
+ clientX: touchEvent.touches[0].clientX,
1010
+ clientY: touchEvent.touches[0].clientY
1011
+ };
1012
+ }
1013
+ isTouchEndSelection(touchEvent) {
1014
+ return (Math.abs(this.touch.clientX - touchEvent.changedTouches[0].clientX) <
1015
+ 10 &&
1016
+ Math.abs(this.touch.clientY - touchEvent.changedTouches[0].clientY) <
1017
+ 10 &&
1018
+ touchEvent.cancelable);
1019
+ }
1020
+ select(state, row, cell, select, append, range, context) {
1021
+ const grid = this.manager.grid;
1022
+ if (grid.keyboardNavigationMode === "none" &&
1023
+ grid.rowSelectionMode === "none") {
969
1024
  return this.selectionStateNone;
970
1025
  }
971
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1026
+ if (grid.rowSelectionMode === "none") {
1027
+ select = false;
1028
+ }
1029
+ if (grid.rowSelectionMode !== "multiple") {
972
1030
  append = false;
973
1031
  range = false;
974
1032
  }
975
- let rowFocused = state.rowFocused;
976
- let rowsSelected = state.rowsSelected;
977
- let cellSelected = state.cellSelected;
1033
+ let { rowFocused, rowsSelected, cellFocused, cellSelected } = state;
978
1034
  rowFocused = row;
1035
+ cellFocused = cell;
979
1036
  if (range) {
980
1037
  const rangeRows = this.manager.getRowsRange(this.rangeStart ?? row, row);
981
1038
  if (this.rangeValue) {
@@ -983,8 +1040,7 @@ class ChGridManagerSelection {
983
1040
  rowsSelected = Array.from(new Set(rowsSelected.concat(rangeRows)));
984
1041
  }
985
1042
  else {
986
- rowsSelected =
987
- rowsSelected.length === rangeRows.length ? rowsSelected : rangeRows;
1043
+ rowsSelected = this.preserveInstanceIfSame(rangeRows, state.rowsSelected);
988
1044
  }
989
1045
  cellSelected =
990
1046
  cell ||
@@ -1000,7 +1056,7 @@ class ChGridManagerSelection {
1000
1056
  this.rangeValue = !row.selected;
1001
1057
  if (rowsSelected.includes(row)) {
1002
1058
  rowsSelected = rowsSelected.filter(rowSelected => rowSelected !== row);
1003
- cellSelected = null;
1059
+ cellSelected = state.cellSelected?.row === row ? null : cellSelected;
1004
1060
  }
1005
1061
  else {
1006
1062
  rowsSelected = [...rowsSelected, row];
@@ -1012,15 +1068,16 @@ class ChGridManagerSelection {
1012
1068
  else {
1013
1069
  this.rangeStart = row;
1014
1070
  this.rangeValue = true;
1015
- if (!(rowsSelected.length === 1 && rowsSelected[0] === row) &&
1016
- !(context && rowsSelected.includes(row))) {
1017
- rowsSelected = [row];
1071
+ if (select) {
1072
+ if (!(context && state.rowsSelected.includes(row))) {
1073
+ rowsSelected = this.preserveInstanceIfSame([row], state.rowsSelected);
1074
+ }
1075
+ cellSelected =
1076
+ cell ||
1077
+ row.getCell(cellSelected?.column || this.manager.getFirstColumn());
1018
1078
  }
1019
- cellSelected =
1020
- cell ||
1021
- row.getCell(cellSelected?.column || this.manager.getFirstColumn());
1022
1079
  }
1023
- return { rowFocused, rowsSelected, cellSelected };
1080
+ return { rowFocused, rowsSelected, cellFocused, cellSelected };
1024
1081
  }
1025
1082
  selectAll(state, value = true) {
1026
1083
  if (this.manager.grid.rowSelectionMode === "none") {
@@ -1029,18 +1086,19 @@ class ChGridManagerSelection {
1029
1086
  const rows = this.manager.getRows();
1030
1087
  let rowFocused = state.rowFocused;
1031
1088
  let rowsSelected = state.rowsSelected;
1089
+ let cellFocused = state.cellFocused;
1032
1090
  let cellSelected = state.cellSelected;
1091
+ rowFocused ??= this.manager.getFirstRow();
1092
+ cellFocused ??= rowFocused.getCell(state.cellFocused?.column || this.manager.getFirstColumn());
1033
1093
  if (value) {
1034
- rowFocused ??= this.manager.getFirstRow();
1035
1094
  rowsSelected = rows;
1036
- cellSelected = rowFocused.getCell(state.cellSelected?.column || this.manager.getFirstColumn());
1095
+ cellSelected = cellFocused;
1037
1096
  }
1038
1097
  else {
1039
- rowFocused ??= this.manager.getFirstRow();
1040
1098
  rowsSelected = [];
1041
1099
  cellSelected = null;
1042
1100
  }
1043
- return { rowFocused, rowsSelected, cellSelected };
1101
+ return { rowFocused, rowsSelected, cellFocused, cellSelected };
1044
1102
  }
1045
1103
  selectSet(state, row, cell, value = true) {
1046
1104
  let append = true;
@@ -1052,8 +1110,10 @@ class ChGridManagerSelection {
1052
1110
  }
1053
1111
  let rowFocused = state.rowFocused;
1054
1112
  let rowsSelected = state.rowsSelected;
1113
+ let cellFocused = state.cellFocused;
1055
1114
  let cellSelected = state.cellSelected;
1056
1115
  rowFocused = row;
1116
+ cellFocused = cell;
1057
1117
  if (value) {
1058
1118
  if (append) {
1059
1119
  rowsSelected = rowsSelected.includes(row)
@@ -1071,224 +1131,67 @@ class ChGridManagerSelection {
1071
1131
  : rowsSelected.filter(rowSelected => rowSelected !== row);
1072
1132
  cellSelected = null;
1073
1133
  }
1074
- return { rowFocused, rowsSelected, cellSelected };
1134
+ return { rowFocused, rowsSelected, cellFocused, cellSelected };
1075
1135
  }
1076
- selectFirstRow(state, append) {
1077
- if (this.manager.grid.rowSelectionMode === "none") {
1078
- return this.selectionStateNone;
1079
- }
1080
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1081
- append = false;
1082
- }
1136
+ moveFirstRow(state, select, range, append) {
1083
1137
  const firstRow = this.manager.getFirstRow();
1084
- let rowFocused = state.rowFocused;
1085
- let rowsSelected = state.rowsSelected;
1086
- let cellSelected = state.cellSelected;
1087
1138
  if (firstRow) {
1088
- if (append) {
1089
- const rangeRows = this.manager.getRowsRange(rowFocused ?? firstRow, firstRow);
1090
- rowsSelected = Array.from(new Set(rowsSelected.concat(rangeRows)));
1091
- }
1092
- else {
1093
- rowsSelected = [firstRow];
1094
- }
1095
- rowFocused = firstRow;
1096
- cellSelected = firstRow.getCell(state.cellSelected?.column || this.manager.getFirstColumn());
1139
+ return this.select(state, firstRow, firstRow.getCell(state.cellFocused.column), select, append, range, false);
1097
1140
  }
1098
- return { rowFocused, rowsSelected, cellSelected };
1141
+ return state;
1099
1142
  }
1100
- selectPreviousRow(state, append) {
1101
- if (this.manager.grid.rowSelectionMode === "none") {
1102
- return this.selectionStateNone;
1103
- }
1104
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1105
- append = false;
1106
- }
1143
+ movePreviousRow(state, select, range, append) {
1107
1144
  const previousRow = this.manager.getPreviousRow(state.rowFocused);
1108
- let rowFocused = state.rowFocused;
1109
- let rowsSelected = state.rowsSelected;
1110
- let cellSelected = state.cellSelected;
1111
1145
  if (previousRow) {
1112
- if (append) {
1113
- const sortedRowsSelected = this.sortRowsSelected(rowsSelected);
1114
- const isContiguousSelection = this.isContiguousSelection(sortedRowsSelected);
1115
- if (isContiguousSelection && rowFocused === sortedRowsSelected[0]) {
1116
- rowsSelected = [...rowsSelected, previousRow];
1117
- }
1118
- else if (isContiguousSelection &&
1119
- rowFocused === sortedRowsSelected[sortedRowsSelected.length - 1]) {
1120
- rowsSelected = rowsSelected.slice(0, -1);
1121
- }
1122
- else {
1123
- rowsSelected = [rowFocused, previousRow];
1124
- }
1125
- }
1126
- else {
1127
- rowsSelected = [previousRow];
1128
- }
1129
- rowFocused = previousRow;
1130
- cellSelected = previousRow.getCell(cellSelected?.column || this.manager.getFirstColumn());
1146
+ return this.select(state, previousRow, previousRow.getCell(state.cellFocused.column), select, append, range, false);
1131
1147
  }
1132
- return { rowFocused, rowsSelected, cellSelected };
1148
+ return state;
1133
1149
  }
1134
- selectNextRow(state, append) {
1135
- if (this.manager.grid.rowSelectionMode === "none") {
1136
- return this.selectionStateNone;
1137
- }
1138
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1139
- append = false;
1140
- }
1150
+ moveNextRow(state, select, range, append) {
1141
1151
  const nextRow = this.manager.getNextRow(state.rowFocused);
1142
- let rowFocused = state.rowFocused;
1143
- let rowsSelected = state.rowsSelected;
1144
- let cellSelected = state.cellSelected;
1145
1152
  if (nextRow) {
1146
- if (append) {
1147
- const sortedRowsSelected = this.sortRowsSelected(rowsSelected);
1148
- const isContiguousSelection = this.isContiguousSelection(sortedRowsSelected);
1149
- if (isContiguousSelection &&
1150
- rowFocused === sortedRowsSelected[sortedRowsSelected.length - 1]) {
1151
- rowsSelected = [...rowsSelected, nextRow];
1152
- }
1153
- else if (isContiguousSelection &&
1154
- rowFocused === sortedRowsSelected[0]) {
1155
- rowsSelected = rowsSelected.slice(1);
1156
- }
1157
- else {
1158
- rowsSelected = [rowFocused, nextRow];
1159
- }
1160
- }
1161
- else {
1162
- rowsSelected = [nextRow];
1163
- }
1164
- rowFocused = nextRow;
1165
- cellSelected = nextRow.getCell(cellSelected?.column || this.manager.getFirstColumn());
1153
+ return this.select(state, nextRow, nextRow.getCell(state.cellFocused.column), select, append, range, false);
1166
1154
  }
1167
- return { rowFocused, rowsSelected, cellSelected };
1155
+ return state;
1168
1156
  }
1169
- selectLastRow(state, append) {
1170
- if (this.manager.grid.rowSelectionMode === "none") {
1171
- return this.selectionStateNone;
1172
- }
1173
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1174
- append = false;
1175
- }
1176
- const firstRow = this.manager.getLastRow();
1177
- let rowFocused = state.rowFocused;
1178
- let rowsSelected = state.rowsSelected;
1179
- let cellSelected = state.cellSelected;
1180
- if (firstRow) {
1181
- if (append) {
1182
- const rangeRows = this.manager.getRowsRange(rowFocused ?? firstRow, firstRow);
1183
- rowsSelected = Array.from(new Set(rowsSelected.concat(rangeRows)));
1184
- }
1185
- else {
1186
- rowsSelected = [firstRow];
1187
- }
1188
- rowFocused = firstRow;
1189
- cellSelected = firstRow.getCell(state.cellSelected?.column || this.manager.getFirstColumn());
1157
+ moveLastRow(state, select, range, append) {
1158
+ const lastRow = this.manager.getLastRow();
1159
+ if (lastRow) {
1160
+ return this.select(state, lastRow, lastRow.getCell(state.cellFocused.column), select, append, range, false);
1190
1161
  }
1191
- return { rowFocused, rowsSelected, cellSelected };
1162
+ return state;
1192
1163
  }
1193
- selectPreviousPageRow(state, append) {
1194
- if (this.manager.grid.rowSelectionMode === "none") {
1195
- return this.selectionStateNone;
1196
- }
1197
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1198
- append = false;
1199
- }
1164
+ movePreviousPageRow(state, select, range, append) {
1200
1165
  const rows = this.manager.getRows();
1201
1166
  const rowsPerPage = this.manager.getRowsPerPage();
1202
- let rowFocused = state.rowFocused;
1203
- let rowsSelected = state.rowsSelected;
1204
- let cellSelected = state.cellSelected;
1205
- const previousPageRow = rows[Math.max(rows.indexOf(rowFocused) - rowsPerPage, 0)];
1167
+ const previousPageRow = rows[Math.max(rows.indexOf(state.rowFocused) - rowsPerPage, 0)];
1206
1168
  if (previousPageRow) {
1207
- if (append) {
1208
- const rangeRows = this.manager.getRowsRange(rowFocused ?? previousPageRow, previousPageRow);
1209
- rowsSelected = Array.from(new Set(rowsSelected.concat(rangeRows)));
1210
- }
1211
- else {
1212
- rowsSelected =
1213
- rowsSelected.length === 1 && rowsSelected[0] === previousPageRow
1214
- ? rowsSelected
1215
- : [previousPageRow];
1216
- }
1217
- rowFocused = previousPageRow;
1218
- cellSelected = previousPageRow.getCell(state.cellSelected?.column || this.manager.getFirstColumn());
1169
+ return this.select(state, previousPageRow, previousPageRow.getCell(state.cellFocused.column), select, append, range, false);
1219
1170
  }
1220
- return { rowFocused, rowsSelected, cellSelected };
1171
+ return state;
1221
1172
  }
1222
- selectNextPageRow(state, append) {
1223
- if (this.manager.grid.rowSelectionMode === "none") {
1224
- return this.selectionStateNone;
1225
- }
1226
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1227
- append = false;
1228
- }
1173
+ moveNextPageRow(state, select, range, append) {
1229
1174
  const rows = this.manager.getRows();
1230
1175
  const rowsPerPage = this.manager.getRowsPerPage();
1231
- let rowFocused = state.rowFocused;
1232
- let rowsSelected = state.rowsSelected;
1233
- let cellSelected = state.cellSelected;
1234
- const nextPageRow = rows[Math.min(rows.indexOf(rowFocused) + rowsPerPage, rows.length - 1)];
1176
+ const nextPageRow = rows[Math.min(rows.indexOf(state.rowFocused) + rowsPerPage, rows.length - 1)];
1235
1177
  if (nextPageRow) {
1236
- if (append) {
1237
- const rangeRows = this.manager.getRowsRange(rowFocused ?? nextPageRow, nextPageRow);
1238
- rowsSelected = Array.from(new Set(rowsSelected.concat(rangeRows)));
1239
- }
1240
- else {
1241
- rowsSelected =
1242
- rowsSelected.length === 1 && rowsSelected[0] === nextPageRow
1243
- ? rowsSelected
1244
- : [nextPageRow];
1245
- }
1246
- rowFocused = nextPageRow;
1247
- cellSelected = nextPageRow.getCell(state.cellSelected?.column || this.manager.getFirstColumn());
1178
+ return this.select(state, nextPageRow, nextPageRow.getCell(state.cellFocused.column), select, append, range, false);
1248
1179
  }
1249
- return { rowFocused, rowsSelected, cellSelected };
1180
+ return state;
1250
1181
  }
1251
- selectPreviousCell(state) {
1252
- if (this.manager.grid.rowSelectionMode === "none") {
1253
- return this.selectionStateNone;
1254
- }
1255
- const rowFocused = state.rowFocused;
1256
- let rowsSelected = state.rowsSelected;
1257
- let cellSelected = state.cellSelected;
1258
- if (cellSelected) {
1259
- const nextCell = this.manager.getPreviousCell(cellSelected);
1260
- if (nextCell) {
1261
- cellSelected = nextCell;
1262
- }
1182
+ movePreviousCell(state, select, range) {
1183
+ const previousCell = this.manager.getPreviousCell(state.cellFocused);
1184
+ if (previousCell) {
1185
+ return this.select(state, state.rowFocused, previousCell, select, false, range, false);
1263
1186
  }
1264
- else {
1265
- if (!rowsSelected.includes(rowFocused)) {
1266
- rowsSelected = [...rowsSelected, rowFocused];
1267
- }
1268
- cellSelected ||= rowFocused.getCell(this.manager.getFirstColumn());
1269
- }
1270
- return { rowFocused, rowsSelected, cellSelected };
1187
+ return state;
1271
1188
  }
1272
- selectNextCell(state) {
1273
- if (this.manager.grid.rowSelectionMode === "none") {
1274
- return this.selectionStateNone;
1275
- }
1276
- const rowFocused = state.rowFocused;
1277
- let rowsSelected = state.rowsSelected;
1278
- let cellSelected = state.cellSelected;
1279
- if (cellSelected) {
1280
- const nextCell = this.manager.getNextCell(cellSelected);
1281
- if (nextCell) {
1282
- cellSelected = nextCell;
1283
- }
1189
+ moveNextCell(state, select, range) {
1190
+ const nextCell = this.manager.getNextCell(state.cellFocused);
1191
+ if (nextCell) {
1192
+ return this.select(state, state.rowFocused, nextCell, select, false, range, false);
1284
1193
  }
1285
- else {
1286
- if (!rowsSelected.includes(rowFocused)) {
1287
- rowsSelected = [...rowsSelected, rowFocused];
1288
- }
1289
- cellSelected ||= rowFocused.getCell(this.manager.getFirstColumn());
1290
- }
1291
- return { rowFocused, rowsSelected, cellSelected };
1194
+ return state;
1292
1195
  }
1293
1196
  markRow(row, checked, range, currentRowsMarked) {
1294
1197
  if (row) {
@@ -1311,6 +1214,15 @@ class ChGridManagerSelection {
1311
1214
  }
1312
1215
  return currentRowsMarked;
1313
1216
  }
1217
+ markRows(rowFocused, rowsMarked, rowsSelected) {
1218
+ const rows = rowsSelected.includes(rowFocused)
1219
+ ? rowsSelected
1220
+ : [rowFocused];
1221
+ if (rows.some(row => !row.marked)) {
1222
+ return Array.from(new Set(rowsMarked.concat(rows)));
1223
+ }
1224
+ return rowsMarked.filter(row => !rows.includes(row));
1225
+ }
1314
1226
  markAllRows(value = true) {
1315
1227
  if (value) {
1316
1228
  return this.manager.getRows();
@@ -1333,42 +1245,26 @@ class ChGridManagerSelection {
1333
1245
  const cell = row.children[indexColumnSelector];
1334
1246
  cell.setSelectorChecked(true);
1335
1247
  });
1336
- if (rows.length === 0) {
1337
- columnSelector.richRowSelectorState = "";
1338
- }
1339
- else if (rows.length === this.manager.getRows().length) {
1340
- columnSelector.richRowSelectorState = "checked";
1341
- }
1342
- else {
1343
- columnSelector.richRowSelectorState = "indeterminate";
1344
- }
1248
+ this.syncColumnSelector(rows.length, columnSelector);
1345
1249
  }
1346
1250
  }
1347
- sortRowsSelected(rowsSelected) {
1348
- const rows = Array.from(this.manager.grid.querySelectorAll("ch-grid-row"));
1349
- return rowsSelected.sort((rowA, rowB) => {
1350
- const rowAIndex = rows.indexOf(rowA);
1351
- const rowBIndex = rows.indexOf(rowB);
1352
- if (rowAIndex < rowBIndex) {
1353
- return -1;
1354
- }
1355
- if (rowAIndex > rowBIndex) {
1356
- return 1;
1357
- }
1358
- return 0;
1359
- });
1360
- }
1361
- isContiguousSelection(sortedRowsSelected) {
1362
- const rows = Array.from(this.manager.grid.querySelectorAll("ch-grid-row")).filter(row => row.isVisible());
1363
- if (sortedRowsSelected.length === 0) {
1364
- return false;
1251
+ syncColumnSelector(length, columnSelector) {
1252
+ columnSelector ??= this.manager.columns.getColumnSelector();
1253
+ if (length === 0) {
1254
+ columnSelector.richRowSelectorState = "";
1365
1255
  }
1366
- if (sortedRowsSelected.length === 1) {
1367
- return true;
1256
+ else if (length === this.manager.getRows().length) {
1257
+ columnSelector.richRowSelectorState = "checked";
1258
+ }
1259
+ else {
1260
+ columnSelector.richRowSelectorState = "indeterminate";
1368
1261
  }
1369
- const startIndex = rows.indexOf(sortedRowsSelected[0]);
1370
- const endIndex = rows.indexOf(sortedRowsSelected[sortedRowsSelected.length - 1]);
1371
- return endIndex - startIndex + 1 === sortedRowsSelected.length;
1262
+ }
1263
+ preserveInstanceIfSame(newSelection, oldSelection) {
1264
+ return newSelection.length === oldSelection.length &&
1265
+ newSelection.every(item => oldSelection.includes(item))
1266
+ ? oldSelection
1267
+ : newSelection;
1372
1268
  }
1373
1269
  }
1374
1270
 
@@ -1728,9 +1624,6 @@ class ChGridManager {
1728
1624
  }
1729
1625
  return rows;
1730
1626
  }
1731
- getRowsSelected() {
1732
- return Array.from(this.grid.querySelectorAll(`ch-grid-row[selected]`));
1733
- }
1734
1627
  getRowsRange(start, end) {
1735
1628
  const rows = this.getRows();
1736
1629
  const indexStart = rows.indexOf(start);
@@ -1990,12 +1883,14 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
1990
1883
  this.rowEnterPressed = createEvent(this, "rowEnterPressed", 7);
1991
1884
  this.rowContextMenu = createEvent(this, "rowContextMenu", 7);
1992
1885
  this.rowFocused = undefined;
1886
+ this.cellFocused = undefined;
1993
1887
  this.rowHighlighted = undefined;
1994
1888
  this.rowsMarked = [];
1995
1889
  this.rowsSelected = [];
1996
1890
  this.cellSelected = undefined;
1997
1891
  this.gridStyle = undefined;
1998
1892
  this.rowSelectionMode = "single";
1893
+ this.keyboardNavigationMode = "select";
1999
1894
  this.rowHighlightEnabled = "auto";
2000
1895
  this.rowSelectedClass = undefined;
2001
1896
  this.rowHighlightedClass = undefined;
@@ -2014,6 +1909,14 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
2014
1909
  previous.focused = false;
2015
1910
  }
2016
1911
  }
1912
+ cellFocusedHandler(cell, previous) {
1913
+ if (cell) {
1914
+ cell.focused = true;
1915
+ }
1916
+ if (previous) {
1917
+ previous.focused = false;
1918
+ }
1919
+ }
2017
1920
  rowHighlightedHandler(row, previous) {
2018
1921
  var _a, _b;
2019
1922
  // highlight
@@ -2033,18 +1936,7 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
2033
1936
  }
2034
1937
  rowsMarkedHandler(rows, previous) {
2035
1938
  this.manager.selection.syncRowSelector(rows, previous, "mark");
2036
- this.rowMarkingChanged.emit({
2037
- rowsId: rows.map(row => row.rowId),
2038
- addedRowsId: rows
2039
- .filter(row => !previous.includes(row))
2040
- .map(row => row.rowId),
2041
- removedRowsId: previous
2042
- .filter(row => !rows.includes(row))
2043
- .map(row => row.rowId),
2044
- unalteredRowsId: rows
2045
- .filter(row => previous.includes(row))
2046
- .map(row => row.rowId)
2047
- });
1939
+ this.rowMarkingChanged.emit(this.getChangedEventDetail(rows, previous));
2048
1940
  }
2049
1941
  rowsSelectedHandler(rows, previous) {
2050
1942
  if (previous) {
@@ -2056,7 +1948,7 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
2056
1948
  rows.forEach(row => (row.selected = true));
2057
1949
  }
2058
1950
  this.manager.selection.syncRowSelector(rows, previous, "select");
2059
- this.selectionChanged.emit({ rowsId: rows.map(row => row.rowId) });
1951
+ this.selectionChanged.emit(this.getChangedEventDetail(rows, previous));
2060
1952
  }
2061
1953
  cellSelectedHandler(cell, previous) {
2062
1954
  if (cell) {
@@ -2074,7 +1966,6 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
2074
1966
  componentWillLoad() {
2075
1967
  this.manager = new ChGridManager(this.el);
2076
1968
  this.gridStyle = this.manager.getGridStyle();
2077
- this.rowsSelected = this.manager.getRowsSelected();
2078
1969
  }
2079
1970
  componentDidLoad() {
2080
1971
  this.manager.componentDidLoad(this.gridLayoutElement);
@@ -2089,14 +1980,18 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
2089
1980
  }
2090
1981
  }
2091
1982
  focusHandler() {
2092
- if (this.rowSelectionMode !== "none") {
2093
- this.rowFocused = this.rowsSelected[0] || this.manager.getFirstRow();
1983
+ var _a, _b, _c;
1984
+ if (this.keyboardNavigationMode !== "none") {
1985
+ this.rowFocused || (this.rowFocused = (_a = this.rowsSelected[0]) !== null && _a !== void 0 ? _a : this.manager.getFirstRow());
1986
+ this.cellFocused = (_b = this.rowFocused) === null || _b === void 0 ? void 0 : _b.getCell(((_c = this.cellSelected) === null || _c === void 0 ? void 0 : _c.column) || this.manager.getFirstColumn());
1987
+ this.selectByKeyboardEvent(false, false);
2094
1988
  }
2095
1989
  }
2096
1990
  blurHandler() {
2097
1991
  this.rowFocused = null;
1992
+ this.cellFocused = null;
2098
1993
  }
2099
- cellFocusedHandler(eventInfo) {
1994
+ cellFocusedEventHandler(eventInfo) {
2100
1995
  const cell = eventInfo.target;
2101
1996
  if (this.rowSelectionMode !== "none" && !cell.selected) {
2102
1997
  this.setCellSelected(cell);
@@ -2121,10 +2016,13 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
2121
2016
  }
2122
2017
  }
2123
2018
  keyDownHandler(eventInfo) {
2124
- if (focusComposedPath()[0] === this.el) {
2019
+ if (focusComposedPath()[0] === this.el &&
2020
+ this.keyboardNavigationMode !== "none") {
2021
+ const range = eventInfo.shiftKey;
2022
+ const append = mouseEventModifierKey(eventInfo);
2125
2023
  switch (eventInfo.key) {
2126
2024
  case " ":
2127
- this.toggleRowsMarked();
2025
+ this.spacePressedEvent(mouseEventModifierKey(eventInfo), eventInfo.shiftKey);
2128
2026
  break;
2129
2027
  case "+":
2130
2028
  this.setRowCollapsed(this.rowFocused, false);
@@ -2133,28 +2031,28 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
2133
2031
  this.setRowCollapsed(this.rowFocused, true);
2134
2032
  break;
2135
2033
  case "Home":
2136
- this.selectByKeyboardEvent(this.manager.selection.selectFirstRow.bind(this.manager.selection), eventInfo.shiftKey);
2034
+ this.moveByKeyboardEvent(this.manager.selection.moveFirstRow, range, append);
2137
2035
  break;
2138
2036
  case "End":
2139
- this.selectByKeyboardEvent(this.manager.selection.selectLastRow.bind(this.manager.selection), eventInfo.shiftKey);
2037
+ this.moveByKeyboardEvent(this.manager.selection.moveLastRow, range, append);
2140
2038
  break;
2141
2039
  case "PageUp":
2142
- this.selectByKeyboardEvent(this.manager.selection.selectPreviousPageRow.bind(this.manager.selection), eventInfo.shiftKey);
2040
+ this.moveByKeyboardEvent(this.manager.selection.movePreviousPageRow, range, append);
2143
2041
  break;
2144
2042
  case "PageDown":
2145
- this.selectByKeyboardEvent(this.manager.selection.selectNextPageRow.bind(this.manager.selection), eventInfo.shiftKey);
2043
+ this.moveByKeyboardEvent(this.manager.selection.moveNextPageRow, range, append);
2146
2044
  break;
2147
2045
  case "ArrowUp":
2148
- this.selectByKeyboardEvent(this.manager.selection.selectPreviousRow.bind(this.manager.selection), eventInfo.shiftKey);
2046
+ this.moveByKeyboardEvent(this.manager.selection.movePreviousRow, range, append);
2149
2047
  break;
2150
2048
  case "ArrowDown":
2151
- this.selectByKeyboardEvent(this.manager.selection.selectNextRow.bind(this.manager.selection), eventInfo.shiftKey);
2049
+ this.moveByKeyboardEvent(this.manager.selection.moveNextRow, range, append);
2152
2050
  break;
2153
2051
  case "ArrowLeft":
2154
- this.selectByKeyboardEvent(this.manager.selection.selectPreviousCell.bind(this.manager.selection), eventInfo.shiftKey);
2052
+ this.moveByKeyboardEvent(this.manager.selection.movePreviousCell, range, append);
2155
2053
  break;
2156
2054
  case "ArrowRight":
2157
- this.selectByKeyboardEvent(this.manager.selection.selectNextCell.bind(this.manager.selection), eventInfo.shiftKey);
2055
+ this.moveByKeyboardEvent(this.manager.selection.moveNextCell, range, append);
2158
2056
  break;
2159
2057
  case "Enter":
2160
2058
  this.enterPressedHandler();
@@ -2199,17 +2097,15 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
2199
2097
  const row = this.manager.getRowEventTarget(eventInfo);
2200
2098
  const cell = this.manager.getCellEventTarget(eventInfo);
2201
2099
  if (row) {
2202
- this.rowClicked.emit({
2203
- rowId: row.rowId,
2204
- cellId: cell === null || cell === void 0 ? void 0 : cell.cellId,
2205
- columnId: cell === null || cell === void 0 ? void 0 : cell.column.columnId
2206
- });
2207
2100
  this.manager.selection.selecting = true;
2208
2101
  this.selectByPointerEvent(row, cell, mouseEventModifierKey(eventInfo), eventInfo.shiftKey, eventInfo.button === MouseEventButton.RIGHT);
2209
2102
  }
2210
2103
  }
2211
2104
  mouseUpHandler() {
2212
- this.stopSelecting();
2105
+ if (this.manager.selection.selecting) {
2106
+ this.stopSelecting();
2107
+ this.emitRowClicked(this.rowFocused, this.cellFocused);
2108
+ }
2213
2109
  }
2214
2110
  dblclickHandler(eventInfo) {
2215
2111
  const row = this.manager.getRowEventTarget(eventInfo);
@@ -2222,6 +2118,23 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
2222
2118
  });
2223
2119
  }
2224
2120
  }
2121
+ touchstartHandler(eventInfo) {
2122
+ this.manager.selection.touchStart(eventInfo);
2123
+ }
2124
+ touchendHandler(eventInfo) {
2125
+ if (eventInfo.cancelable) {
2126
+ eventInfo.preventDefault();
2127
+ }
2128
+ if (this.manager.selection.isTouchEndSelection(eventInfo)) {
2129
+ const columnSelector = this.manager.columns.getColumnSelector();
2130
+ const row = this.manager.getRowEventTarget(eventInfo);
2131
+ const cell = this.manager.getCellEventTarget(eventInfo);
2132
+ if (row) {
2133
+ this.selectByPointerEvent(row, cell, (columnSelector === null || columnSelector === void 0 ? void 0 : columnSelector.richRowSelectorMode) !== "select", false, false);
2134
+ this.emitRowClicked(row, cell);
2135
+ }
2136
+ }
2137
+ }
2225
2138
  contextmenuHandler(eventInfo) {
2226
2139
  var _a, _b;
2227
2140
  let targetRow;
@@ -2341,6 +2254,16 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
2341
2254
  async getMarkedRows() {
2342
2255
  return this.rowsMarked.map(row => row.rowId);
2343
2256
  }
2257
+ /**
2258
+ * Retrieves information about the currently focused cell.
2259
+ */
2260
+ async getFocusedCell() {
2261
+ return {
2262
+ cellId: this.cellFocused ? this.cellFocused.cellId : null,
2263
+ rowId: this.cellFocused ? this.cellFocused.row.rowId : null,
2264
+ columnId: this.cellFocused ? this.cellFocused.column.columnId : null
2265
+ };
2266
+ }
2344
2267
  /**
2345
2268
  * Retrieves information about the currently selected cell.
2346
2269
  */
@@ -2359,13 +2282,15 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
2359
2282
  async selectRow(rowId, selected = true) {
2360
2283
  const row = this.manager.getRow(rowId);
2361
2284
  if (row) {
2362
- const { rowFocused, rowsSelected, cellSelected } = this.manager.selection.selectSet({
2285
+ const { rowFocused, rowsSelected, cellFocused, cellSelected } = this.manager.selection.selectSet({
2363
2286
  rowFocused: this.rowFocused,
2364
2287
  rowsSelected: this.rowsSelected,
2288
+ cellFocused: this.cellFocused,
2365
2289
  cellSelected: this.cellSelected
2366
2290
  }, row, null, selected);
2367
2291
  this.rowFocused = rowFocused;
2368
2292
  this.rowsSelected = rowsSelected;
2293
+ this.cellFocused = cellFocused;
2369
2294
  this.cellSelected = cellSelected;
2370
2295
  rowFocused === null || rowFocused === void 0 ? void 0 : rowFocused.ensureVisible();
2371
2296
  }
@@ -2490,76 +2415,155 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
2490
2415
  columnId: nextCell ? nextCell.column.columnId : null
2491
2416
  };
2492
2417
  }
2418
+ /**
2419
+ * Synchronizes the state of a row in the grid.
2420
+ */
2421
+ async syncRowState(el) {
2422
+ const row = el;
2423
+ const columnSelector = this.manager.columns.getColumnSelector();
2424
+ if (this.rowSelectionMode !== "none") {
2425
+ this.syncRowStateSelected(row);
2426
+ }
2427
+ if ((columnSelector === null || columnSelector === void 0 ? void 0 : columnSelector.richRowSelectorMode) === "mark") {
2428
+ this.syncRowStateMarked(row);
2429
+ }
2430
+ if (columnSelector) {
2431
+ this.syncRowStateSelector(row, columnSelector);
2432
+ if (columnSelector.richRowSelectorMode === "select") {
2433
+ this.manager.selection.syncColumnSelector(this.rowsSelected.length, columnSelector);
2434
+ }
2435
+ else if (columnSelector.richRowSelectorMode === "mark") {
2436
+ this.manager.selection.syncColumnSelector(this.rowsMarked.length, columnSelector);
2437
+ }
2438
+ }
2439
+ }
2440
+ syncRowStateSelected(row) {
2441
+ if (row.selected && this.rowSelectionMode === "single") {
2442
+ this.rowsSelected[0] = row;
2443
+ }
2444
+ if (row.selected &&
2445
+ this.rowSelectionMode === "multiple" &&
2446
+ !this.rowsSelected.includes(row)) {
2447
+ this.rowsSelected.push(row);
2448
+ }
2449
+ if (!row.selected) {
2450
+ const index = this.rowsSelected.indexOf(row);
2451
+ if (index !== -1) {
2452
+ this.rowsSelected.splice(index, 1);
2453
+ }
2454
+ }
2455
+ }
2456
+ syncRowStateMarked(row) {
2457
+ if (row.marked && !this.rowsMarked.includes(row)) {
2458
+ this.rowsMarked.push(row);
2459
+ }
2460
+ if (!row.marked) {
2461
+ const index = this.rowsMarked.indexOf(row);
2462
+ if (index !== -1) {
2463
+ this.rowsMarked.splice(index, 1);
2464
+ }
2465
+ }
2466
+ }
2467
+ syncRowStateSelector(row, columnSelector) {
2468
+ const cell = row.getCell(columnSelector);
2469
+ const value = (columnSelector.richRowSelectorMode === "select" && row.selected) ||
2470
+ (columnSelector.richRowSelectorMode === "mark" && row.marked);
2471
+ cell.setSelectorChecked(value);
2472
+ }
2473
+ getChangedEventDetail(rows, previous) {
2474
+ return {
2475
+ rowsId: rows.map(row => row.rowId),
2476
+ addedRowsId: rows
2477
+ .filter(row => !previous.includes(row))
2478
+ .map(row => row.rowId),
2479
+ removedRowsId: previous
2480
+ .filter(row => !rows.includes(row))
2481
+ .map(row => row.rowId),
2482
+ unalteredRowsId: rows
2483
+ .filter(row => previous.includes(row))
2484
+ .map(row => row.rowId)
2485
+ };
2486
+ }
2493
2487
  enterPressedHandler() {
2494
- var _a;
2495
2488
  if (this.rowFocused) {
2496
- const cellFocused = ((_a = this.cellSelected) === null || _a === void 0 ? void 0 : _a.row) === this.rowFocused ? this.cellSelected : null;
2497
2489
  this.rowEnterPressed.emit({
2498
2490
  rowId: this.rowFocused.rowId,
2499
- cellId: cellFocused ? cellFocused.cellId : null,
2500
- columnId: cellFocused ? cellFocused.column.columnId : null
2491
+ cellId: this.cellFocused ? this.cellFocused.cellId : null,
2492
+ columnId: this.cellFocused ? this.cellFocused.column.columnId : null
2501
2493
  });
2502
2494
  }
2503
2495
  }
2504
- toggleRowsMarked() {
2496
+ spacePressedEvent(ctrl, shift) {
2497
+ if (this.keyboardNavigationMode === "focus") {
2498
+ this.selectByKeyboardEvent(ctrl, shift);
2499
+ }
2500
+ else if (this.keyboardNavigationMode === "select") {
2501
+ this.markByKeyboardEvent();
2502
+ }
2503
+ this.emitRowClicked(this.rowFocused, this.cellFocused);
2504
+ }
2505
+ markByKeyboardEvent() {
2505
2506
  const columnSelector = this.manager.columns.getColumnSelector();
2506
2507
  if ((columnSelector === null || columnSelector === void 0 ? void 0 : columnSelector.richRowSelectorMode) === "mark") {
2507
- const value = !this.rowFocused.marked;
2508
- if (value) {
2509
- this.rowsMarked = Array.from(new Set(this.rowsMarked.concat(this.rowsSelected)));
2510
- }
2511
- else {
2512
- this.rowsMarked = this.rowsMarked.filter(row => !this.rowsSelected.includes(row));
2513
- }
2508
+ this.rowsMarked = this.manager.selection.markRows(this.rowFocused, this.rowsMarked, this.rowsSelected);
2514
2509
  }
2515
2510
  }
2511
+ selectByKeyboardEvent(append, range) {
2512
+ var _a;
2513
+ const { rowFocused, rowsSelected, cellFocused, cellSelected } = this.manager.selection.select({
2514
+ rowFocused: this.rowFocused,
2515
+ rowsSelected: this.rowsSelected,
2516
+ cellFocused: this.cellFocused,
2517
+ cellSelected: this.cellSelected
2518
+ }, this.rowFocused, this.cellFocused, true, append, range, false);
2519
+ this.rowFocused = rowFocused;
2520
+ this.rowsSelected = rowsSelected;
2521
+ this.cellFocused = cellFocused;
2522
+ this.cellSelected = cellSelected;
2523
+ (_a = (cellFocused || rowFocused)) === null || _a === void 0 ? void 0 : _a.ensureVisible();
2524
+ }
2516
2525
  selectByPointerEvent(row, cell, append, range, context) {
2517
- const { rowFocused, rowsSelected, cellSelected } = this.manager.selection.select({
2526
+ var _a;
2527
+ const { rowFocused, rowsSelected, cellFocused, cellSelected } = this.manager.selection.select({
2518
2528
  rowFocused: this.rowFocused,
2519
2529
  rowsSelected: this.rowsSelected,
2530
+ cellFocused: this.cellFocused,
2520
2531
  cellSelected: this.cellSelected
2521
- }, row, cell, append, range, context);
2532
+ }, row, cell, true, append, range, context);
2522
2533
  this.rowFocused = rowFocused;
2523
2534
  this.rowsSelected = rowsSelected;
2535
+ this.cellFocused = cellFocused;
2524
2536
  this.cellSelected = cellSelected;
2525
- if (cellSelected) {
2526
- cellSelected.ensureVisible();
2527
- }
2528
- else {
2529
- rowFocused === null || rowFocused === void 0 ? void 0 : rowFocused.ensureVisible();
2530
- }
2537
+ (_a = (cellFocused || rowFocused)) === null || _a === void 0 ? void 0 : _a.ensureVisible();
2531
2538
  }
2532
- selectByKeyboardEvent(fn, append) {
2533
- const { rowFocused, rowsSelected, cellSelected } = fn({
2539
+ moveByKeyboardEvent(fn, range, append) {
2540
+ var _a;
2541
+ const { rowFocused, rowsSelected, cellFocused, cellSelected } = fn.call(this.manager.selection, {
2534
2542
  rowFocused: this.rowFocused,
2535
2543
  rowsSelected: this.rowsSelected,
2544
+ cellFocused: this.cellFocused,
2536
2545
  cellSelected: this.cellSelected
2537
- }, append);
2546
+ }, this.rowSelectionMode !== "none" &&
2547
+ this.keyboardNavigationMode === "select", this.rowSelectionMode === "multiple" ? range : false, this.rowSelectionMode === "multiple" ? range && append : false);
2538
2548
  this.rowFocused = rowFocused;
2539
2549
  this.rowsSelected = rowsSelected;
2550
+ this.cellFocused = cellFocused;
2540
2551
  this.cellSelected = cellSelected;
2541
- if (cellSelected) {
2542
- cellSelected.ensureVisible();
2543
- }
2544
- else {
2545
- rowFocused === null || rowFocused === void 0 ? void 0 : rowFocused.ensureVisible();
2546
- }
2552
+ (_a = (cellFocused || rowFocused)) === null || _a === void 0 ? void 0 : _a.ensureVisible();
2547
2553
  }
2548
2554
  selectAll(value = true) {
2549
- const { rowFocused, rowsSelected, cellSelected } = this.manager.selection.selectAll({
2555
+ var _a;
2556
+ const { rowFocused, rowsSelected, cellFocused, cellSelected } = this.manager.selection.selectAll({
2550
2557
  rowFocused: this.rowFocused,
2551
2558
  rowsSelected: this.rowsSelected,
2559
+ cellFocused: this.cellFocused,
2552
2560
  cellSelected: this.cellSelected
2553
2561
  }, value);
2554
2562
  this.rowFocused = rowFocused;
2555
2563
  this.rowsSelected = rowsSelected;
2564
+ this.cellFocused = cellFocused;
2556
2565
  this.cellSelected = cellSelected;
2557
- if (cellSelected) {
2558
- cellSelected.ensureVisible();
2559
- }
2560
- else {
2561
- rowFocused === null || rowFocused === void 0 ? void 0 : rowFocused.ensureVisible();
2562
- }
2566
+ (_a = (cellFocused || rowFocused)) === null || _a === void 0 ? void 0 : _a.ensureVisible();
2563
2567
  }
2564
2568
  setRowCollapsed(row, collapsed) {
2565
2569
  if (row && collapsed) {
@@ -2572,15 +2576,25 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
2572
2576
  }
2573
2577
  }
2574
2578
  setCellSelected(cell, selected = true) {
2575
- const { rowFocused, rowsSelected, cellSelected } = this.manager.selection.selectSet({
2579
+ var _a;
2580
+ const { rowFocused, rowsSelected, cellFocused, cellSelected } = this.manager.selection.selectSet({
2576
2581
  rowFocused: this.rowFocused,
2577
2582
  rowsSelected: this.rowsSelected,
2583
+ cellFocused: this.cellFocused,
2578
2584
  cellSelected: this.cellSelected
2579
2585
  }, cell.row, cell, selected);
2580
2586
  this.rowFocused = rowFocused;
2581
2587
  this.rowsSelected = rowsSelected;
2588
+ this.cellFocused = cellFocused;
2582
2589
  this.cellSelected = cellSelected;
2583
- rowFocused === null || rowFocused === void 0 ? void 0 : rowFocused.ensureVisible();
2590
+ (_a = (cellFocused || rowFocused)) === null || _a === void 0 ? void 0 : _a.ensureVisible();
2591
+ }
2592
+ emitRowClicked(row, cell) {
2593
+ this.rowClicked.emit({
2594
+ rowId: row.rowId,
2595
+ cellId: cell === null || cell === void 0 ? void 0 : cell.cellId,
2596
+ columnId: cell === null || cell === void 0 ? void 0 : cell.column.columnId
2597
+ });
2584
2598
  }
2585
2599
  stopSelecting() {
2586
2600
  this.manager.selection.selecting = false;
@@ -2591,10 +2605,11 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
2591
2605
  return (h("ch-grid-settings", { grid: this.el, ref: el => (this.settingsUI = el), exportparts: "\n mask:settings-mask,\n window:settings-window,\n header:settings-header,\n caption:settings-caption,\n close:settings-close,\n main:settings-main,\n footer:settings-footer\n " }, h("slot", { name: "settings" }, h("ch-grid-settings-columns", { part: "settings-columns", columns: [...this.manager.getColumns()], exportparts: "\n column:settings-columns-item,\n column-label:settings-columns-label,\n column-visible:settings-columns-visible,\n column-visible-checked:settings-columns-visible-checked\n " }))));
2592
2606
  }
2593
2607
  render() {
2594
- return (h(Host, { tabindex: this.rowSelectionMode !== "none" ? "0" : false }, h("header", { part: "header" }, h("slot", { name: "header" })), h("section", { class: "main", style: this.gridStyle, part: "main", ref: el => (this.gridLayoutElement = el) }, h("slot", null)), h("aside", null, this.renderSettings(), h("slot", { name: "column-display" }), h("slot", { name: "row-actions" })), h("footer", { part: "footer" }, h("slot", { name: "footer" }))));
2608
+ return (h(Host, { tabindex: this.keyboardNavigationMode !== "none" ? "0" : false }, h("header", { part: "header" }, h("slot", { name: "header" })), h("section", { class: "main", style: this.gridStyle, part: "main", ref: el => (this.gridLayoutElement = el) }, h("slot", null)), h("aside", null, this.renderSettings(), h("slot", { name: "column-display" }), h("slot", { name: "row-actions" })), h("footer", { part: "footer" }, h("slot", { name: "footer" }))));
2595
2609
  }
2596
2610
  static get watchers() { return {
2597
2611
  "rowFocused": ["rowFocusedHandler"],
2612
+ "cellFocused": ["cellFocusedHandler"],
2598
2613
  "rowHighlighted": ["rowHighlightedHandler"],
2599
2614
  "rowsMarked": ["rowsMarkedHandler"],
2600
2615
  "rowsSelected": ["rowsSelectedHandler"],
@@ -2603,6 +2618,7 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
2603
2618
  static get style() { return chGridCss; }
2604
2619
  }, [1, "ch-grid", {
2605
2620
  "rowSelectionMode": [1, "row-selection-mode"],
2621
+ "keyboardNavigationMode": [1, "keyboard-navigation-mode"],
2606
2622
  "rowHighlightEnabled": [8, "row-highlight-enabled"],
2607
2623
  "rowSelectedClass": [1, "row-selected-class"],
2608
2624
  "rowHighlightedClass": [1, "row-highlighted-class"],
@@ -2612,6 +2628,7 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
2612
2628
  "columnResizeMode": [1, "column-resize-mode"],
2613
2629
  "localization": [16],
2614
2630
  "rowFocused": [32],
2631
+ "cellFocused": [32],
2615
2632
  "rowHighlighted": [32],
2616
2633
  "rowsMarked": [32],
2617
2634
  "rowsSelected": [32],
@@ -2621,6 +2638,7 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
2621
2638
  "getHoveredRow": [64],
2622
2639
  "getSelectedRows": [64],
2623
2640
  "getMarkedRows": [64],
2641
+ "getFocusedCell": [64],
2624
2642
  "getSelectedCell": [64],
2625
2643
  "selectRow": [64],
2626
2644
  "selectAllRows": [64],
@@ -2634,9 +2652,11 @@ const ChGrid = /*@__PURE__*/ proxyCustomElement(class ChGrid extends HTMLElement
2634
2652
  "getPreviousRow": [64],
2635
2653
  "getNextRow": [64],
2636
2654
  "getPreviousCell": [64],
2637
- "getNextCell": [64]
2638
- }, [[1, "focus", "focusHandler"], [1, "blur", "blurHandler"], [1, "cellFocused", "cellFocusedHandler"], [8, "keydown", "windowKeyDownHandler"], [1, "keydown", "keyDownHandler"], [1, "mousemove", "mouseMoveHandler"], [1, "mouseleave", "mouseLeaveHandler"], [1, "mousedown", "clickHandler"], [1, "mouseup", "mouseUpHandler"], [1, "dblclick", "dblclickHandler"], [0, "contextmenu", "contextmenuHandler"], [1, "columnSelectorClicked", "columnSelectorClickedHandler"], [1, "cellSelectorClicked", "cellSelectorClickedHandler"], [1, "cellRowActionClicked", "cellRowActionClickedHandler"], [0, "columnHiddenChanged", "columnStyleChangedHandler"], [0, "columnOrderChanged", "columnStyleChangedHandler"], [0, "columnFreezeChanged", "columnStyleChangedHandler"], [0, "columnSizeChanging", "columnStyleChangedHandler"], [0, "columnFreezeChanged", "columnFreezeChangedHandler"], [0, "columnResizeStarted", "columnResizeStartedHandler"], [0, "columnResizing", "columnResizingHandler"], [0, "columnResizeFinished", "columnResizeFinishedHandler"], [0, "columnDragStarted", "columnDragStartHandler"], [0, "columnDragging", "columnDraggingHandler"], [0, "columnDragEnded", "columnDragEndHandler"], [0, "rowDragStarted", "rowDragStartHandler"], [0, "rowEnsureVisible", "rowEnsureVisibleHandler"], [0, "cellEnsureVisible", "cellEnsureVisibleHandler"], [0, "settingsShowClicked", "settingsShowClickedHandler"], [0, "settingsCloseClicked", "settingsCloseClickedHandler"]], {
2655
+ "getNextCell": [64],
2656
+ "syncRowState": [64]
2657
+ }, [[1, "focus", "focusHandler"], [1, "blur", "blurHandler"], [1, "cellFocused", "cellFocusedEventHandler"], [8, "keydown", "windowKeyDownHandler"], [1, "keydown", "keyDownHandler"], [1, "mousemove", "mouseMoveHandler"], [1, "mouseleave", "mouseLeaveHandler"], [1, "mousedown", "clickHandler"], [1, "mouseup", "mouseUpHandler"], [1, "dblclick", "dblclickHandler"], [1, "touchstart", "touchstartHandler"], [0, "touchend", "touchendHandler"], [0, "contextmenu", "contextmenuHandler"], [1, "columnSelectorClicked", "columnSelectorClickedHandler"], [1, "cellSelectorClicked", "cellSelectorClickedHandler"], [1, "cellRowActionClicked", "cellRowActionClickedHandler"], [0, "columnHiddenChanged", "columnStyleChangedHandler"], [0, "columnOrderChanged", "columnStyleChangedHandler"], [0, "columnFreezeChanged", "columnStyleChangedHandler"], [0, "columnSizeChanging", "columnStyleChangedHandler"], [0, "columnFreezeChanged", "columnFreezeChangedHandler"], [0, "columnResizeStarted", "columnResizeStartedHandler"], [0, "columnResizing", "columnResizingHandler"], [0, "columnResizeFinished", "columnResizeFinishedHandler"], [0, "columnDragStarted", "columnDragStartHandler"], [0, "columnDragging", "columnDraggingHandler"], [0, "columnDragEnded", "columnDragEndHandler"], [0, "rowDragStarted", "rowDragStartHandler"], [0, "rowEnsureVisible", "rowEnsureVisibleHandler"], [0, "cellEnsureVisible", "cellEnsureVisibleHandler"], [0, "settingsShowClicked", "settingsShowClickedHandler"], [0, "settingsCloseClicked", "settingsCloseClickedHandler"]], {
2639
2658
  "rowFocused": ["rowFocusedHandler"],
2659
+ "cellFocused": ["cellFocusedHandler"],
2640
2660
  "rowHighlighted": ["rowHighlightedHandler"],
2641
2661
  "rowsMarked": ["rowsMarkedHandler"],
2642
2662
  "rowsSelected": ["rowsSelectedHandler"],