@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
@@ -12,11 +12,26 @@ const store = require('./store-ea3722c0.js');
12
12
  */
13
13
  class HTMLChGridRowElement extends HTMLElement {
14
14
  parentGrid;
15
+ static get observedAttributes() {
16
+ return ["selected", "marked"];
17
+ }
15
18
  constructor() {
16
19
  super();
17
20
  }
18
21
  connectedCallback() {
19
22
  this.addEventListener("cellCaretClicked", this.cellCaretClickedHandler);
23
+ if (this.selected || this.marked) {
24
+ this.grid.syncRowState(this);
25
+ }
26
+ }
27
+ attributeChangedCallback(name, _oldValue, value) {
28
+ if (name === "selected") {
29
+ this.selected = value !== null ? value !== "false" : false;
30
+ }
31
+ if (name === "marked") {
32
+ this.marked = value !== null ? value !== "false" : false;
33
+ }
34
+ this.grid?.syncRowState(this);
20
35
  }
21
36
  /**
22
37
  * Returns the parent ch-grid element of the grid row.
@@ -60,7 +75,9 @@ class HTMLChGridRowElement extends HTMLElement {
60
75
  set selected(value) {
61
76
  const selectedClasses = this.grid.rowSelectedClass?.split(" ");
62
77
  if (value === true) {
63
- this.setAttribute("selected", "");
78
+ if (!this.hasAttribute("selected")) {
79
+ this.setAttribute("selected", "");
80
+ }
64
81
  if (this.grid.rowSelectedClass) {
65
82
  this.classList.add(...selectedClasses);
66
83
  }
@@ -81,7 +98,9 @@ class HTMLChGridRowElement extends HTMLElement {
81
98
  set marked(value) {
82
99
  const markedClasses = this.grid.rowMarkedClass?.split(" ");
83
100
  if (value === true) {
84
- this.setAttribute("marked", "");
101
+ if (!this.hasAttribute("marked")) {
102
+ this.setAttribute("marked", "");
103
+ }
85
104
  if (this.grid.rowMarkedClass) {
86
105
  this.classList.add(...markedClasses);
87
106
  }
@@ -346,12 +365,15 @@ class HTMLChGridCellElement extends HTMLElement {
346
365
  this.cellType = value;
347
366
  }
348
367
  if (name === "row-drag") {
368
+ this.cellType = ChGridCellType.Rich;
349
369
  this.rowDrag = value !== null ? value !== "false" : false;
350
370
  }
351
371
  if (name === "row-selector") {
372
+ this.cellType = ChGridCellType.Rich;
352
373
  this.rowSelector = value !== null ? value !== "false" : false;
353
374
  }
354
375
  if (name === "row-actions") {
376
+ this.cellType = ChGridCellType.Rich;
355
377
  this.rowActions = value !== null ? value !== "false" : false;
356
378
  }
357
379
  }
@@ -406,6 +428,20 @@ class HTMLChGridCellElement extends HTMLElement {
406
428
  this.removeAttribute("selected");
407
429
  }
408
430
  }
431
+ /**
432
+ * A boolean value indicating whether the cell is focused.
433
+ */
434
+ get focused() {
435
+ return this.hasAttribute("focused");
436
+ }
437
+ set focused(value) {
438
+ if (value === true) {
439
+ this.setAttribute("focused", "");
440
+ }
441
+ else {
442
+ this.removeAttribute("focused");
443
+ }
444
+ }
409
445
  /**
410
446
  * A boolean value indicates whether the grid cell is visible.
411
447
  */
@@ -521,9 +557,11 @@ class HTMLChGridCellElement extends HTMLElement {
521
557
  if (this.rowSelector) {
522
558
  this.selector = this.shadowRoot.querySelector("[part='selector']");
523
559
  this.selector.addEventListener("mousedown", (eventInfo) => eventInfo.stopPropagation());
560
+ this.selector.addEventListener("touchend", (eventInfo) => eventInfo.stopPropagation());
524
561
  this.selector.addEventListener("click", this.selectorClickHandler.bind(this));
525
562
  this.selectorLabel = this.shadowRoot.querySelector("[part='selector-label']");
526
563
  this.selectorLabel.addEventListener("mousedown", (eventInfo) => eventInfo.stopPropagation());
564
+ this.selectorLabel.addEventListener("touchend", (eventInfo) => eventInfo.stopPropagation());
527
565
  this.selectorLabel.addEventListener("click", this.selectorLabelClickHandler.bind(this));
528
566
  }
529
567
  }
@@ -957,26 +995,45 @@ class ChGridManagerSelection {
957
995
  selectionStateNone = {
958
996
  rowFocused: null,
959
997
  rowsSelected: [],
998
+ cellFocused: null,
960
999
  cellSelected: null
961
1000
  };
1001
+ touch;
962
1002
  selecting;
963
1003
  selectingRow;
964
1004
  selectingCell;
965
1005
  constructor(manager) {
966
1006
  this.manager = manager;
967
1007
  }
968
- select(state, row, cell, append, range, context) {
969
- if (this.manager.grid.rowSelectionMode === "none") {
1008
+ touchStart(touchEvent) {
1009
+ this.touch = {
1010
+ clientX: touchEvent.touches[0].clientX,
1011
+ clientY: touchEvent.touches[0].clientY
1012
+ };
1013
+ }
1014
+ isTouchEndSelection(touchEvent) {
1015
+ return (Math.abs(this.touch.clientX - touchEvent.changedTouches[0].clientX) <
1016
+ 10 &&
1017
+ Math.abs(this.touch.clientY - touchEvent.changedTouches[0].clientY) <
1018
+ 10 &&
1019
+ touchEvent.cancelable);
1020
+ }
1021
+ select(state, row, cell, select, append, range, context) {
1022
+ const grid = this.manager.grid;
1023
+ if (grid.keyboardNavigationMode === "none" &&
1024
+ grid.rowSelectionMode === "none") {
970
1025
  return this.selectionStateNone;
971
1026
  }
972
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1027
+ if (grid.rowSelectionMode === "none") {
1028
+ select = false;
1029
+ }
1030
+ if (grid.rowSelectionMode !== "multiple") {
973
1031
  append = false;
974
1032
  range = false;
975
1033
  }
976
- let rowFocused = state.rowFocused;
977
- let rowsSelected = state.rowsSelected;
978
- let cellSelected = state.cellSelected;
1034
+ let { rowFocused, rowsSelected, cellFocused, cellSelected } = state;
979
1035
  rowFocused = row;
1036
+ cellFocused = cell;
980
1037
  if (range) {
981
1038
  const rangeRows = this.manager.getRowsRange(this.rangeStart ?? row, row);
982
1039
  if (this.rangeValue) {
@@ -984,8 +1041,7 @@ class ChGridManagerSelection {
984
1041
  rowsSelected = Array.from(new Set(rowsSelected.concat(rangeRows)));
985
1042
  }
986
1043
  else {
987
- rowsSelected =
988
- rowsSelected.length === rangeRows.length ? rowsSelected : rangeRows;
1044
+ rowsSelected = this.preserveInstanceIfSame(rangeRows, state.rowsSelected);
989
1045
  }
990
1046
  cellSelected =
991
1047
  cell ||
@@ -1001,7 +1057,7 @@ class ChGridManagerSelection {
1001
1057
  this.rangeValue = !row.selected;
1002
1058
  if (rowsSelected.includes(row)) {
1003
1059
  rowsSelected = rowsSelected.filter(rowSelected => rowSelected !== row);
1004
- cellSelected = null;
1060
+ cellSelected = state.cellSelected?.row === row ? null : cellSelected;
1005
1061
  }
1006
1062
  else {
1007
1063
  rowsSelected = [...rowsSelected, row];
@@ -1013,15 +1069,16 @@ class ChGridManagerSelection {
1013
1069
  else {
1014
1070
  this.rangeStart = row;
1015
1071
  this.rangeValue = true;
1016
- if (!(rowsSelected.length === 1 && rowsSelected[0] === row) &&
1017
- !(context && rowsSelected.includes(row))) {
1018
- rowsSelected = [row];
1072
+ if (select) {
1073
+ if (!(context && state.rowsSelected.includes(row))) {
1074
+ rowsSelected = this.preserveInstanceIfSame([row], state.rowsSelected);
1075
+ }
1076
+ cellSelected =
1077
+ cell ||
1078
+ row.getCell(cellSelected?.column || this.manager.getFirstColumn());
1019
1079
  }
1020
- cellSelected =
1021
- cell ||
1022
- row.getCell(cellSelected?.column || this.manager.getFirstColumn());
1023
1080
  }
1024
- return { rowFocused, rowsSelected, cellSelected };
1081
+ return { rowFocused, rowsSelected, cellFocused, cellSelected };
1025
1082
  }
1026
1083
  selectAll(state, value = true) {
1027
1084
  if (this.manager.grid.rowSelectionMode === "none") {
@@ -1030,18 +1087,19 @@ class ChGridManagerSelection {
1030
1087
  const rows = this.manager.getRows();
1031
1088
  let rowFocused = state.rowFocused;
1032
1089
  let rowsSelected = state.rowsSelected;
1090
+ let cellFocused = state.cellFocused;
1033
1091
  let cellSelected = state.cellSelected;
1092
+ rowFocused ??= this.manager.getFirstRow();
1093
+ cellFocused ??= rowFocused.getCell(state.cellFocused?.column || this.manager.getFirstColumn());
1034
1094
  if (value) {
1035
- rowFocused ??= this.manager.getFirstRow();
1036
1095
  rowsSelected = rows;
1037
- cellSelected = rowFocused.getCell(state.cellSelected?.column || this.manager.getFirstColumn());
1096
+ cellSelected = cellFocused;
1038
1097
  }
1039
1098
  else {
1040
- rowFocused ??= this.manager.getFirstRow();
1041
1099
  rowsSelected = [];
1042
1100
  cellSelected = null;
1043
1101
  }
1044
- return { rowFocused, rowsSelected, cellSelected };
1102
+ return { rowFocused, rowsSelected, cellFocused, cellSelected };
1045
1103
  }
1046
1104
  selectSet(state, row, cell, value = true) {
1047
1105
  let append = true;
@@ -1053,8 +1111,10 @@ class ChGridManagerSelection {
1053
1111
  }
1054
1112
  let rowFocused = state.rowFocused;
1055
1113
  let rowsSelected = state.rowsSelected;
1114
+ let cellFocused = state.cellFocused;
1056
1115
  let cellSelected = state.cellSelected;
1057
1116
  rowFocused = row;
1117
+ cellFocused = cell;
1058
1118
  if (value) {
1059
1119
  if (append) {
1060
1120
  rowsSelected = rowsSelected.includes(row)
@@ -1072,224 +1132,67 @@ class ChGridManagerSelection {
1072
1132
  : rowsSelected.filter(rowSelected => rowSelected !== row);
1073
1133
  cellSelected = null;
1074
1134
  }
1075
- return { rowFocused, rowsSelected, cellSelected };
1135
+ return { rowFocused, rowsSelected, cellFocused, cellSelected };
1076
1136
  }
1077
- selectFirstRow(state, append) {
1078
- if (this.manager.grid.rowSelectionMode === "none") {
1079
- return this.selectionStateNone;
1080
- }
1081
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1082
- append = false;
1083
- }
1137
+ moveFirstRow(state, select, range, append) {
1084
1138
  const firstRow = this.manager.getFirstRow();
1085
- let rowFocused = state.rowFocused;
1086
- let rowsSelected = state.rowsSelected;
1087
- let cellSelected = state.cellSelected;
1088
1139
  if (firstRow) {
1089
- if (append) {
1090
- const rangeRows = this.manager.getRowsRange(rowFocused ?? firstRow, firstRow);
1091
- rowsSelected = Array.from(new Set(rowsSelected.concat(rangeRows)));
1092
- }
1093
- else {
1094
- rowsSelected = [firstRow];
1095
- }
1096
- rowFocused = firstRow;
1097
- cellSelected = firstRow.getCell(state.cellSelected?.column || this.manager.getFirstColumn());
1140
+ return this.select(state, firstRow, firstRow.getCell(state.cellFocused.column), select, append, range, false);
1098
1141
  }
1099
- return { rowFocused, rowsSelected, cellSelected };
1142
+ return state;
1100
1143
  }
1101
- selectPreviousRow(state, append) {
1102
- if (this.manager.grid.rowSelectionMode === "none") {
1103
- return this.selectionStateNone;
1104
- }
1105
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1106
- append = false;
1107
- }
1144
+ movePreviousRow(state, select, range, append) {
1108
1145
  const previousRow = this.manager.getPreviousRow(state.rowFocused);
1109
- let rowFocused = state.rowFocused;
1110
- let rowsSelected = state.rowsSelected;
1111
- let cellSelected = state.cellSelected;
1112
1146
  if (previousRow) {
1113
- if (append) {
1114
- const sortedRowsSelected = this.sortRowsSelected(rowsSelected);
1115
- const isContiguousSelection = this.isContiguousSelection(sortedRowsSelected);
1116
- if (isContiguousSelection && rowFocused === sortedRowsSelected[0]) {
1117
- rowsSelected = [...rowsSelected, previousRow];
1118
- }
1119
- else if (isContiguousSelection &&
1120
- rowFocused === sortedRowsSelected[sortedRowsSelected.length - 1]) {
1121
- rowsSelected = rowsSelected.slice(0, -1);
1122
- }
1123
- else {
1124
- rowsSelected = [rowFocused, previousRow];
1125
- }
1126
- }
1127
- else {
1128
- rowsSelected = [previousRow];
1129
- }
1130
- rowFocused = previousRow;
1131
- cellSelected = previousRow.getCell(cellSelected?.column || this.manager.getFirstColumn());
1147
+ return this.select(state, previousRow, previousRow.getCell(state.cellFocused.column), select, append, range, false);
1132
1148
  }
1133
- return { rowFocused, rowsSelected, cellSelected };
1149
+ return state;
1134
1150
  }
1135
- selectNextRow(state, append) {
1136
- if (this.manager.grid.rowSelectionMode === "none") {
1137
- return this.selectionStateNone;
1138
- }
1139
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1140
- append = false;
1141
- }
1151
+ moveNextRow(state, select, range, append) {
1142
1152
  const nextRow = this.manager.getNextRow(state.rowFocused);
1143
- let rowFocused = state.rowFocused;
1144
- let rowsSelected = state.rowsSelected;
1145
- let cellSelected = state.cellSelected;
1146
1153
  if (nextRow) {
1147
- if (append) {
1148
- const sortedRowsSelected = this.sortRowsSelected(rowsSelected);
1149
- const isContiguousSelection = this.isContiguousSelection(sortedRowsSelected);
1150
- if (isContiguousSelection &&
1151
- rowFocused === sortedRowsSelected[sortedRowsSelected.length - 1]) {
1152
- rowsSelected = [...rowsSelected, nextRow];
1153
- }
1154
- else if (isContiguousSelection &&
1155
- rowFocused === sortedRowsSelected[0]) {
1156
- rowsSelected = rowsSelected.slice(1);
1157
- }
1158
- else {
1159
- rowsSelected = [rowFocused, nextRow];
1160
- }
1161
- }
1162
- else {
1163
- rowsSelected = [nextRow];
1164
- }
1165
- rowFocused = nextRow;
1166
- cellSelected = nextRow.getCell(cellSelected?.column || this.manager.getFirstColumn());
1154
+ return this.select(state, nextRow, nextRow.getCell(state.cellFocused.column), select, append, range, false);
1167
1155
  }
1168
- return { rowFocused, rowsSelected, cellSelected };
1156
+ return state;
1169
1157
  }
1170
- selectLastRow(state, append) {
1171
- if (this.manager.grid.rowSelectionMode === "none") {
1172
- return this.selectionStateNone;
1173
- }
1174
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1175
- append = false;
1176
- }
1177
- const firstRow = this.manager.getLastRow();
1178
- let rowFocused = state.rowFocused;
1179
- let rowsSelected = state.rowsSelected;
1180
- let cellSelected = state.cellSelected;
1181
- if (firstRow) {
1182
- if (append) {
1183
- const rangeRows = this.manager.getRowsRange(rowFocused ?? firstRow, firstRow);
1184
- rowsSelected = Array.from(new Set(rowsSelected.concat(rangeRows)));
1185
- }
1186
- else {
1187
- rowsSelected = [firstRow];
1188
- }
1189
- rowFocused = firstRow;
1190
- cellSelected = firstRow.getCell(state.cellSelected?.column || this.manager.getFirstColumn());
1158
+ moveLastRow(state, select, range, append) {
1159
+ const lastRow = this.manager.getLastRow();
1160
+ if (lastRow) {
1161
+ return this.select(state, lastRow, lastRow.getCell(state.cellFocused.column), select, append, range, false);
1191
1162
  }
1192
- return { rowFocused, rowsSelected, cellSelected };
1163
+ return state;
1193
1164
  }
1194
- selectPreviousPageRow(state, append) {
1195
- if (this.manager.grid.rowSelectionMode === "none") {
1196
- return this.selectionStateNone;
1197
- }
1198
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1199
- append = false;
1200
- }
1165
+ movePreviousPageRow(state, select, range, append) {
1201
1166
  const rows = this.manager.getRows();
1202
1167
  const rowsPerPage = this.manager.getRowsPerPage();
1203
- let rowFocused = state.rowFocused;
1204
- let rowsSelected = state.rowsSelected;
1205
- let cellSelected = state.cellSelected;
1206
- const previousPageRow = rows[Math.max(rows.indexOf(rowFocused) - rowsPerPage, 0)];
1168
+ const previousPageRow = rows[Math.max(rows.indexOf(state.rowFocused) - rowsPerPage, 0)];
1207
1169
  if (previousPageRow) {
1208
- if (append) {
1209
- const rangeRows = this.manager.getRowsRange(rowFocused ?? previousPageRow, previousPageRow);
1210
- rowsSelected = Array.from(new Set(rowsSelected.concat(rangeRows)));
1211
- }
1212
- else {
1213
- rowsSelected =
1214
- rowsSelected.length === 1 && rowsSelected[0] === previousPageRow
1215
- ? rowsSelected
1216
- : [previousPageRow];
1217
- }
1218
- rowFocused = previousPageRow;
1219
- cellSelected = previousPageRow.getCell(state.cellSelected?.column || this.manager.getFirstColumn());
1170
+ return this.select(state, previousPageRow, previousPageRow.getCell(state.cellFocused.column), select, append, range, false);
1220
1171
  }
1221
- return { rowFocused, rowsSelected, cellSelected };
1172
+ return state;
1222
1173
  }
1223
- selectNextPageRow(state, append) {
1224
- if (this.manager.grid.rowSelectionMode === "none") {
1225
- return this.selectionStateNone;
1226
- }
1227
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1228
- append = false;
1229
- }
1174
+ moveNextPageRow(state, select, range, append) {
1230
1175
  const rows = this.manager.getRows();
1231
1176
  const rowsPerPage = this.manager.getRowsPerPage();
1232
- let rowFocused = state.rowFocused;
1233
- let rowsSelected = state.rowsSelected;
1234
- let cellSelected = state.cellSelected;
1235
- const nextPageRow = rows[Math.min(rows.indexOf(rowFocused) + rowsPerPage, rows.length - 1)];
1177
+ const nextPageRow = rows[Math.min(rows.indexOf(state.rowFocused) + rowsPerPage, rows.length - 1)];
1236
1178
  if (nextPageRow) {
1237
- if (append) {
1238
- const rangeRows = this.manager.getRowsRange(rowFocused ?? nextPageRow, nextPageRow);
1239
- rowsSelected = Array.from(new Set(rowsSelected.concat(rangeRows)));
1240
- }
1241
- else {
1242
- rowsSelected =
1243
- rowsSelected.length === 1 && rowsSelected[0] === nextPageRow
1244
- ? rowsSelected
1245
- : [nextPageRow];
1246
- }
1247
- rowFocused = nextPageRow;
1248
- cellSelected = nextPageRow.getCell(state.cellSelected?.column || this.manager.getFirstColumn());
1179
+ return this.select(state, nextPageRow, nextPageRow.getCell(state.cellFocused.column), select, append, range, false);
1249
1180
  }
1250
- return { rowFocused, rowsSelected, cellSelected };
1181
+ return state;
1251
1182
  }
1252
- selectPreviousCell(state) {
1253
- if (this.manager.grid.rowSelectionMode === "none") {
1254
- return this.selectionStateNone;
1255
- }
1256
- const rowFocused = state.rowFocused;
1257
- let rowsSelected = state.rowsSelected;
1258
- let cellSelected = state.cellSelected;
1259
- if (cellSelected) {
1260
- const nextCell = this.manager.getPreviousCell(cellSelected);
1261
- if (nextCell) {
1262
- cellSelected = nextCell;
1263
- }
1264
- }
1265
- else {
1266
- if (!rowsSelected.includes(rowFocused)) {
1267
- rowsSelected = [...rowsSelected, rowFocused];
1268
- }
1269
- cellSelected ||= rowFocused.getCell(this.manager.getFirstColumn());
1183
+ movePreviousCell(state, select, range) {
1184
+ const previousCell = this.manager.getPreviousCell(state.cellFocused);
1185
+ if (previousCell) {
1186
+ return this.select(state, state.rowFocused, previousCell, select, false, range, false);
1270
1187
  }
1271
- return { rowFocused, rowsSelected, cellSelected };
1188
+ return state;
1272
1189
  }
1273
- selectNextCell(state) {
1274
- if (this.manager.grid.rowSelectionMode === "none") {
1275
- return this.selectionStateNone;
1276
- }
1277
- const rowFocused = state.rowFocused;
1278
- let rowsSelected = state.rowsSelected;
1279
- let cellSelected = state.cellSelected;
1280
- if (cellSelected) {
1281
- const nextCell = this.manager.getNextCell(cellSelected);
1282
- if (nextCell) {
1283
- cellSelected = nextCell;
1284
- }
1285
- }
1286
- else {
1287
- if (!rowsSelected.includes(rowFocused)) {
1288
- rowsSelected = [...rowsSelected, rowFocused];
1289
- }
1290
- cellSelected ||= rowFocused.getCell(this.manager.getFirstColumn());
1190
+ moveNextCell(state, select, range) {
1191
+ const nextCell = this.manager.getNextCell(state.cellFocused);
1192
+ if (nextCell) {
1193
+ return this.select(state, state.rowFocused, nextCell, select, false, range, false);
1291
1194
  }
1292
- return { rowFocused, rowsSelected, cellSelected };
1195
+ return state;
1293
1196
  }
1294
1197
  markRow(row, checked, range, currentRowsMarked) {
1295
1198
  if (row) {
@@ -1312,6 +1215,15 @@ class ChGridManagerSelection {
1312
1215
  }
1313
1216
  return currentRowsMarked;
1314
1217
  }
1218
+ markRows(rowFocused, rowsMarked, rowsSelected) {
1219
+ const rows = rowsSelected.includes(rowFocused)
1220
+ ? rowsSelected
1221
+ : [rowFocused];
1222
+ if (rows.some(row => !row.marked)) {
1223
+ return Array.from(new Set(rowsMarked.concat(rows)));
1224
+ }
1225
+ return rowsMarked.filter(row => !rows.includes(row));
1226
+ }
1315
1227
  markAllRows(value = true) {
1316
1228
  if (value) {
1317
1229
  return this.manager.getRows();
@@ -1334,42 +1246,26 @@ class ChGridManagerSelection {
1334
1246
  const cell = row.children[indexColumnSelector];
1335
1247
  cell.setSelectorChecked(true);
1336
1248
  });
1337
- if (rows.length === 0) {
1338
- columnSelector.richRowSelectorState = "";
1339
- }
1340
- else if (rows.length === this.manager.getRows().length) {
1341
- columnSelector.richRowSelectorState = "checked";
1342
- }
1343
- else {
1344
- columnSelector.richRowSelectorState = "indeterminate";
1345
- }
1249
+ this.syncColumnSelector(rows.length, columnSelector);
1346
1250
  }
1347
1251
  }
1348
- sortRowsSelected(rowsSelected) {
1349
- const rows = Array.from(this.manager.grid.querySelectorAll("ch-grid-row"));
1350
- return rowsSelected.sort((rowA, rowB) => {
1351
- const rowAIndex = rows.indexOf(rowA);
1352
- const rowBIndex = rows.indexOf(rowB);
1353
- if (rowAIndex < rowBIndex) {
1354
- return -1;
1355
- }
1356
- if (rowAIndex > rowBIndex) {
1357
- return 1;
1358
- }
1359
- return 0;
1360
- });
1361
- }
1362
- isContiguousSelection(sortedRowsSelected) {
1363
- const rows = Array.from(this.manager.grid.querySelectorAll("ch-grid-row")).filter(row => row.isVisible());
1364
- if (sortedRowsSelected.length === 0) {
1365
- return false;
1252
+ syncColumnSelector(length, columnSelector) {
1253
+ columnSelector ??= this.manager.columns.getColumnSelector();
1254
+ if (length === 0) {
1255
+ columnSelector.richRowSelectorState = "";
1366
1256
  }
1367
- if (sortedRowsSelected.length === 1) {
1368
- return true;
1257
+ else if (length === this.manager.getRows().length) {
1258
+ columnSelector.richRowSelectorState = "checked";
1259
+ }
1260
+ else {
1261
+ columnSelector.richRowSelectorState = "indeterminate";
1369
1262
  }
1370
- const startIndex = rows.indexOf(sortedRowsSelected[0]);
1371
- const endIndex = rows.indexOf(sortedRowsSelected[sortedRowsSelected.length - 1]);
1372
- return endIndex - startIndex + 1 === sortedRowsSelected.length;
1263
+ }
1264
+ preserveInstanceIfSame(newSelection, oldSelection) {
1265
+ return newSelection.length === oldSelection.length &&
1266
+ newSelection.every(item => oldSelection.includes(item))
1267
+ ? oldSelection
1268
+ : newSelection;
1373
1269
  }
1374
1270
  }
1375
1271
 
@@ -1729,9 +1625,6 @@ class ChGridManager {
1729
1625
  }
1730
1626
  return rows;
1731
1627
  }
1732
- getRowsSelected() {
1733
- return Array.from(this.grid.querySelectorAll(`ch-grid-row[selected]`));
1734
- }
1735
1628
  getRowsRange(start, end) {
1736
1629
  const rows = this.getRows();
1737
1630
  const indexStart = rows.indexOf(start);
@@ -1989,12 +1882,14 @@ const ChGrid = class {
1989
1882
  this.rowEnterPressed = index.createEvent(this, "rowEnterPressed", 7);
1990
1883
  this.rowContextMenu = index.createEvent(this, "rowContextMenu", 7);
1991
1884
  this.rowFocused = undefined;
1885
+ this.cellFocused = undefined;
1992
1886
  this.rowHighlighted = undefined;
1993
1887
  this.rowsMarked = [];
1994
1888
  this.rowsSelected = [];
1995
1889
  this.cellSelected = undefined;
1996
1890
  this.gridStyle = undefined;
1997
1891
  this.rowSelectionMode = "single";
1892
+ this.keyboardNavigationMode = "select";
1998
1893
  this.rowHighlightEnabled = "auto";
1999
1894
  this.rowSelectedClass = undefined;
2000
1895
  this.rowHighlightedClass = undefined;
@@ -2013,6 +1908,14 @@ const ChGrid = class {
2013
1908
  previous.focused = false;
2014
1909
  }
2015
1910
  }
1911
+ cellFocusedHandler(cell, previous) {
1912
+ if (cell) {
1913
+ cell.focused = true;
1914
+ }
1915
+ if (previous) {
1916
+ previous.focused = false;
1917
+ }
1918
+ }
2016
1919
  rowHighlightedHandler(row, previous) {
2017
1920
  var _a, _b;
2018
1921
  // highlight
@@ -2032,18 +1935,7 @@ const ChGrid = class {
2032
1935
  }
2033
1936
  rowsMarkedHandler(rows, previous) {
2034
1937
  this.manager.selection.syncRowSelector(rows, previous, "mark");
2035
- this.rowMarkingChanged.emit({
2036
- rowsId: rows.map(row => row.rowId),
2037
- addedRowsId: rows
2038
- .filter(row => !previous.includes(row))
2039
- .map(row => row.rowId),
2040
- removedRowsId: previous
2041
- .filter(row => !rows.includes(row))
2042
- .map(row => row.rowId),
2043
- unalteredRowsId: rows
2044
- .filter(row => previous.includes(row))
2045
- .map(row => row.rowId)
2046
- });
1938
+ this.rowMarkingChanged.emit(this.getChangedEventDetail(rows, previous));
2047
1939
  }
2048
1940
  rowsSelectedHandler(rows, previous) {
2049
1941
  if (previous) {
@@ -2055,7 +1947,7 @@ const ChGrid = class {
2055
1947
  rows.forEach(row => (row.selected = true));
2056
1948
  }
2057
1949
  this.manager.selection.syncRowSelector(rows, previous, "select");
2058
- this.selectionChanged.emit({ rowsId: rows.map(row => row.rowId) });
1950
+ this.selectionChanged.emit(this.getChangedEventDetail(rows, previous));
2059
1951
  }
2060
1952
  cellSelectedHandler(cell, previous) {
2061
1953
  if (cell) {
@@ -2073,7 +1965,6 @@ const ChGrid = class {
2073
1965
  componentWillLoad() {
2074
1966
  this.manager = new ChGridManager(this.el);
2075
1967
  this.gridStyle = this.manager.getGridStyle();
2076
- this.rowsSelected = this.manager.getRowsSelected();
2077
1968
  }
2078
1969
  componentDidLoad() {
2079
1970
  this.manager.componentDidLoad(this.gridLayoutElement);
@@ -2088,14 +1979,18 @@ const ChGrid = class {
2088
1979
  }
2089
1980
  }
2090
1981
  focusHandler() {
2091
- if (this.rowSelectionMode !== "none") {
2092
- this.rowFocused = this.rowsSelected[0] || this.manager.getFirstRow();
1982
+ var _a, _b, _c;
1983
+ if (this.keyboardNavigationMode !== "none") {
1984
+ this.rowFocused || (this.rowFocused = (_a = this.rowsSelected[0]) !== null && _a !== void 0 ? _a : this.manager.getFirstRow());
1985
+ 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());
1986
+ this.selectByKeyboardEvent(false, false);
2093
1987
  }
2094
1988
  }
2095
1989
  blurHandler() {
2096
1990
  this.rowFocused = null;
1991
+ this.cellFocused = null;
2097
1992
  }
2098
- cellFocusedHandler(eventInfo) {
1993
+ cellFocusedEventHandler(eventInfo) {
2099
1994
  const cell = eventInfo.target;
2100
1995
  if (this.rowSelectionMode !== "none" && !cell.selected) {
2101
1996
  this.setCellSelected(cell);
@@ -2120,10 +2015,13 @@ const ChGrid = class {
2120
2015
  }
2121
2016
  }
2122
2017
  keyDownHandler(eventInfo) {
2123
- if (helpers.focusComposedPath()[0] === this.el) {
2018
+ if (helpers.focusComposedPath()[0] === this.el &&
2019
+ this.keyboardNavigationMode !== "none") {
2020
+ const range = eventInfo.shiftKey;
2021
+ const append = helpers.mouseEventModifierKey(eventInfo);
2124
2022
  switch (eventInfo.key) {
2125
2023
  case " ":
2126
- this.toggleRowsMarked();
2024
+ this.spacePressedEvent(helpers.mouseEventModifierKey(eventInfo), eventInfo.shiftKey);
2127
2025
  break;
2128
2026
  case "+":
2129
2027
  this.setRowCollapsed(this.rowFocused, false);
@@ -2132,28 +2030,28 @@ const ChGrid = class {
2132
2030
  this.setRowCollapsed(this.rowFocused, true);
2133
2031
  break;
2134
2032
  case "Home":
2135
- this.selectByKeyboardEvent(this.manager.selection.selectFirstRow.bind(this.manager.selection), eventInfo.shiftKey);
2033
+ this.moveByKeyboardEvent(this.manager.selection.moveFirstRow, range, append);
2136
2034
  break;
2137
2035
  case "End":
2138
- this.selectByKeyboardEvent(this.manager.selection.selectLastRow.bind(this.manager.selection), eventInfo.shiftKey);
2036
+ this.moveByKeyboardEvent(this.manager.selection.moveLastRow, range, append);
2139
2037
  break;
2140
2038
  case "PageUp":
2141
- this.selectByKeyboardEvent(this.manager.selection.selectPreviousPageRow.bind(this.manager.selection), eventInfo.shiftKey);
2039
+ this.moveByKeyboardEvent(this.manager.selection.movePreviousPageRow, range, append);
2142
2040
  break;
2143
2041
  case "PageDown":
2144
- this.selectByKeyboardEvent(this.manager.selection.selectNextPageRow.bind(this.manager.selection), eventInfo.shiftKey);
2042
+ this.moveByKeyboardEvent(this.manager.selection.moveNextPageRow, range, append);
2145
2043
  break;
2146
2044
  case "ArrowUp":
2147
- this.selectByKeyboardEvent(this.manager.selection.selectPreviousRow.bind(this.manager.selection), eventInfo.shiftKey);
2045
+ this.moveByKeyboardEvent(this.manager.selection.movePreviousRow, range, append);
2148
2046
  break;
2149
2047
  case "ArrowDown":
2150
- this.selectByKeyboardEvent(this.manager.selection.selectNextRow.bind(this.manager.selection), eventInfo.shiftKey);
2048
+ this.moveByKeyboardEvent(this.manager.selection.moveNextRow, range, append);
2151
2049
  break;
2152
2050
  case "ArrowLeft":
2153
- this.selectByKeyboardEvent(this.manager.selection.selectPreviousCell.bind(this.manager.selection), eventInfo.shiftKey);
2051
+ this.moveByKeyboardEvent(this.manager.selection.movePreviousCell, range, append);
2154
2052
  break;
2155
2053
  case "ArrowRight":
2156
- this.selectByKeyboardEvent(this.manager.selection.selectNextCell.bind(this.manager.selection), eventInfo.shiftKey);
2054
+ this.moveByKeyboardEvent(this.manager.selection.moveNextCell, range, append);
2157
2055
  break;
2158
2056
  case "Enter":
2159
2057
  this.enterPressedHandler();
@@ -2198,17 +2096,15 @@ const ChGrid = class {
2198
2096
  const row = this.manager.getRowEventTarget(eventInfo);
2199
2097
  const cell = this.manager.getCellEventTarget(eventInfo);
2200
2098
  if (row) {
2201
- this.rowClicked.emit({
2202
- rowId: row.rowId,
2203
- cellId: cell === null || cell === void 0 ? void 0 : cell.cellId,
2204
- columnId: cell === null || cell === void 0 ? void 0 : cell.column.columnId
2205
- });
2206
2099
  this.manager.selection.selecting = true;
2207
2100
  this.selectByPointerEvent(row, cell, helpers.mouseEventModifierKey(eventInfo), eventInfo.shiftKey, eventInfo.button === helpers.MouseEventButton.RIGHT);
2208
2101
  }
2209
2102
  }
2210
2103
  mouseUpHandler() {
2211
- this.stopSelecting();
2104
+ if (this.manager.selection.selecting) {
2105
+ this.stopSelecting();
2106
+ this.emitRowClicked(this.rowFocused, this.cellFocused);
2107
+ }
2212
2108
  }
2213
2109
  dblclickHandler(eventInfo) {
2214
2110
  const row = this.manager.getRowEventTarget(eventInfo);
@@ -2221,6 +2117,23 @@ const ChGrid = class {
2221
2117
  });
2222
2118
  }
2223
2119
  }
2120
+ touchstartHandler(eventInfo) {
2121
+ this.manager.selection.touchStart(eventInfo);
2122
+ }
2123
+ touchendHandler(eventInfo) {
2124
+ if (eventInfo.cancelable) {
2125
+ eventInfo.preventDefault();
2126
+ }
2127
+ if (this.manager.selection.isTouchEndSelection(eventInfo)) {
2128
+ const columnSelector = this.manager.columns.getColumnSelector();
2129
+ const row = this.manager.getRowEventTarget(eventInfo);
2130
+ const cell = this.manager.getCellEventTarget(eventInfo);
2131
+ if (row) {
2132
+ this.selectByPointerEvent(row, cell, (columnSelector === null || columnSelector === void 0 ? void 0 : columnSelector.richRowSelectorMode) !== "select", false, false);
2133
+ this.emitRowClicked(row, cell);
2134
+ }
2135
+ }
2136
+ }
2224
2137
  contextmenuHandler(eventInfo) {
2225
2138
  var _a, _b;
2226
2139
  let targetRow;
@@ -2340,6 +2253,16 @@ const ChGrid = class {
2340
2253
  async getMarkedRows() {
2341
2254
  return this.rowsMarked.map(row => row.rowId);
2342
2255
  }
2256
+ /**
2257
+ * Retrieves information about the currently focused cell.
2258
+ */
2259
+ async getFocusedCell() {
2260
+ return {
2261
+ cellId: this.cellFocused ? this.cellFocused.cellId : null,
2262
+ rowId: this.cellFocused ? this.cellFocused.row.rowId : null,
2263
+ columnId: this.cellFocused ? this.cellFocused.column.columnId : null
2264
+ };
2265
+ }
2343
2266
  /**
2344
2267
  * Retrieves information about the currently selected cell.
2345
2268
  */
@@ -2358,13 +2281,15 @@ const ChGrid = class {
2358
2281
  async selectRow(rowId, selected = true) {
2359
2282
  const row = this.manager.getRow(rowId);
2360
2283
  if (row) {
2361
- const { rowFocused, rowsSelected, cellSelected } = this.manager.selection.selectSet({
2284
+ const { rowFocused, rowsSelected, cellFocused, cellSelected } = this.manager.selection.selectSet({
2362
2285
  rowFocused: this.rowFocused,
2363
2286
  rowsSelected: this.rowsSelected,
2287
+ cellFocused: this.cellFocused,
2364
2288
  cellSelected: this.cellSelected
2365
2289
  }, row, null, selected);
2366
2290
  this.rowFocused = rowFocused;
2367
2291
  this.rowsSelected = rowsSelected;
2292
+ this.cellFocused = cellFocused;
2368
2293
  this.cellSelected = cellSelected;
2369
2294
  rowFocused === null || rowFocused === void 0 ? void 0 : rowFocused.ensureVisible();
2370
2295
  }
@@ -2489,76 +2414,155 @@ const ChGrid = class {
2489
2414
  columnId: nextCell ? nextCell.column.columnId : null
2490
2415
  };
2491
2416
  }
2417
+ /**
2418
+ * Synchronizes the state of a row in the grid.
2419
+ */
2420
+ async syncRowState(el) {
2421
+ const row = el;
2422
+ const columnSelector = this.manager.columns.getColumnSelector();
2423
+ if (this.rowSelectionMode !== "none") {
2424
+ this.syncRowStateSelected(row);
2425
+ }
2426
+ if ((columnSelector === null || columnSelector === void 0 ? void 0 : columnSelector.richRowSelectorMode) === "mark") {
2427
+ this.syncRowStateMarked(row);
2428
+ }
2429
+ if (columnSelector) {
2430
+ this.syncRowStateSelector(row, columnSelector);
2431
+ if (columnSelector.richRowSelectorMode === "select") {
2432
+ this.manager.selection.syncColumnSelector(this.rowsSelected.length, columnSelector);
2433
+ }
2434
+ else if (columnSelector.richRowSelectorMode === "mark") {
2435
+ this.manager.selection.syncColumnSelector(this.rowsMarked.length, columnSelector);
2436
+ }
2437
+ }
2438
+ }
2439
+ syncRowStateSelected(row) {
2440
+ if (row.selected && this.rowSelectionMode === "single") {
2441
+ this.rowsSelected[0] = row;
2442
+ }
2443
+ if (row.selected &&
2444
+ this.rowSelectionMode === "multiple" &&
2445
+ !this.rowsSelected.includes(row)) {
2446
+ this.rowsSelected.push(row);
2447
+ }
2448
+ if (!row.selected) {
2449
+ const index = this.rowsSelected.indexOf(row);
2450
+ if (index !== -1) {
2451
+ this.rowsSelected.splice(index, 1);
2452
+ }
2453
+ }
2454
+ }
2455
+ syncRowStateMarked(row) {
2456
+ if (row.marked && !this.rowsMarked.includes(row)) {
2457
+ this.rowsMarked.push(row);
2458
+ }
2459
+ if (!row.marked) {
2460
+ const index = this.rowsMarked.indexOf(row);
2461
+ if (index !== -1) {
2462
+ this.rowsMarked.splice(index, 1);
2463
+ }
2464
+ }
2465
+ }
2466
+ syncRowStateSelector(row, columnSelector) {
2467
+ const cell = row.getCell(columnSelector);
2468
+ const value = (columnSelector.richRowSelectorMode === "select" && row.selected) ||
2469
+ (columnSelector.richRowSelectorMode === "mark" && row.marked);
2470
+ cell.setSelectorChecked(value);
2471
+ }
2472
+ getChangedEventDetail(rows, previous) {
2473
+ return {
2474
+ rowsId: rows.map(row => row.rowId),
2475
+ addedRowsId: rows
2476
+ .filter(row => !previous.includes(row))
2477
+ .map(row => row.rowId),
2478
+ removedRowsId: previous
2479
+ .filter(row => !rows.includes(row))
2480
+ .map(row => row.rowId),
2481
+ unalteredRowsId: rows
2482
+ .filter(row => previous.includes(row))
2483
+ .map(row => row.rowId)
2484
+ };
2485
+ }
2492
2486
  enterPressedHandler() {
2493
- var _a;
2494
2487
  if (this.rowFocused) {
2495
- const cellFocused = ((_a = this.cellSelected) === null || _a === void 0 ? void 0 : _a.row) === this.rowFocused ? this.cellSelected : null;
2496
2488
  this.rowEnterPressed.emit({
2497
2489
  rowId: this.rowFocused.rowId,
2498
- cellId: cellFocused ? cellFocused.cellId : null,
2499
- columnId: cellFocused ? cellFocused.column.columnId : null
2490
+ cellId: this.cellFocused ? this.cellFocused.cellId : null,
2491
+ columnId: this.cellFocused ? this.cellFocused.column.columnId : null
2500
2492
  });
2501
2493
  }
2502
2494
  }
2503
- toggleRowsMarked() {
2495
+ spacePressedEvent(ctrl, shift) {
2496
+ if (this.keyboardNavigationMode === "focus") {
2497
+ this.selectByKeyboardEvent(ctrl, shift);
2498
+ }
2499
+ else if (this.keyboardNavigationMode === "select") {
2500
+ this.markByKeyboardEvent();
2501
+ }
2502
+ this.emitRowClicked(this.rowFocused, this.cellFocused);
2503
+ }
2504
+ markByKeyboardEvent() {
2504
2505
  const columnSelector = this.manager.columns.getColumnSelector();
2505
2506
  if ((columnSelector === null || columnSelector === void 0 ? void 0 : columnSelector.richRowSelectorMode) === "mark") {
2506
- const value = !this.rowFocused.marked;
2507
- if (value) {
2508
- this.rowsMarked = Array.from(new Set(this.rowsMarked.concat(this.rowsSelected)));
2509
- }
2510
- else {
2511
- this.rowsMarked = this.rowsMarked.filter(row => !this.rowsSelected.includes(row));
2512
- }
2507
+ this.rowsMarked = this.manager.selection.markRows(this.rowFocused, this.rowsMarked, this.rowsSelected);
2513
2508
  }
2514
2509
  }
2510
+ selectByKeyboardEvent(append, range) {
2511
+ var _a;
2512
+ const { rowFocused, rowsSelected, cellFocused, cellSelected } = this.manager.selection.select({
2513
+ rowFocused: this.rowFocused,
2514
+ rowsSelected: this.rowsSelected,
2515
+ cellFocused: this.cellFocused,
2516
+ cellSelected: this.cellSelected
2517
+ }, this.rowFocused, this.cellFocused, true, append, range, false);
2518
+ this.rowFocused = rowFocused;
2519
+ this.rowsSelected = rowsSelected;
2520
+ this.cellFocused = cellFocused;
2521
+ this.cellSelected = cellSelected;
2522
+ (_a = (cellFocused || rowFocused)) === null || _a === void 0 ? void 0 : _a.ensureVisible();
2523
+ }
2515
2524
  selectByPointerEvent(row, cell, append, range, context) {
2516
- const { rowFocused, rowsSelected, cellSelected } = this.manager.selection.select({
2525
+ var _a;
2526
+ const { rowFocused, rowsSelected, cellFocused, cellSelected } = this.manager.selection.select({
2517
2527
  rowFocused: this.rowFocused,
2518
2528
  rowsSelected: this.rowsSelected,
2529
+ cellFocused: this.cellFocused,
2519
2530
  cellSelected: this.cellSelected
2520
- }, row, cell, append, range, context);
2531
+ }, row, cell, true, append, range, context);
2521
2532
  this.rowFocused = rowFocused;
2522
2533
  this.rowsSelected = rowsSelected;
2534
+ this.cellFocused = cellFocused;
2523
2535
  this.cellSelected = cellSelected;
2524
- if (cellSelected) {
2525
- cellSelected.ensureVisible();
2526
- }
2527
- else {
2528
- rowFocused === null || rowFocused === void 0 ? void 0 : rowFocused.ensureVisible();
2529
- }
2536
+ (_a = (cellFocused || rowFocused)) === null || _a === void 0 ? void 0 : _a.ensureVisible();
2530
2537
  }
2531
- selectByKeyboardEvent(fn, append) {
2532
- const { rowFocused, rowsSelected, cellSelected } = fn({
2538
+ moveByKeyboardEvent(fn, range, append) {
2539
+ var _a;
2540
+ const { rowFocused, rowsSelected, cellFocused, cellSelected } = fn.call(this.manager.selection, {
2533
2541
  rowFocused: this.rowFocused,
2534
2542
  rowsSelected: this.rowsSelected,
2543
+ cellFocused: this.cellFocused,
2535
2544
  cellSelected: this.cellSelected
2536
- }, append);
2545
+ }, this.rowSelectionMode !== "none" &&
2546
+ this.keyboardNavigationMode === "select", this.rowSelectionMode === "multiple" ? range : false, this.rowSelectionMode === "multiple" ? range && append : false);
2537
2547
  this.rowFocused = rowFocused;
2538
2548
  this.rowsSelected = rowsSelected;
2549
+ this.cellFocused = cellFocused;
2539
2550
  this.cellSelected = cellSelected;
2540
- if (cellSelected) {
2541
- cellSelected.ensureVisible();
2542
- }
2543
- else {
2544
- rowFocused === null || rowFocused === void 0 ? void 0 : rowFocused.ensureVisible();
2545
- }
2551
+ (_a = (cellFocused || rowFocused)) === null || _a === void 0 ? void 0 : _a.ensureVisible();
2546
2552
  }
2547
2553
  selectAll(value = true) {
2548
- const { rowFocused, rowsSelected, cellSelected } = this.manager.selection.selectAll({
2554
+ var _a;
2555
+ const { rowFocused, rowsSelected, cellFocused, cellSelected } = this.manager.selection.selectAll({
2549
2556
  rowFocused: this.rowFocused,
2550
2557
  rowsSelected: this.rowsSelected,
2558
+ cellFocused: this.cellFocused,
2551
2559
  cellSelected: this.cellSelected
2552
2560
  }, value);
2553
2561
  this.rowFocused = rowFocused;
2554
2562
  this.rowsSelected = rowsSelected;
2563
+ this.cellFocused = cellFocused;
2555
2564
  this.cellSelected = cellSelected;
2556
- if (cellSelected) {
2557
- cellSelected.ensureVisible();
2558
- }
2559
- else {
2560
- rowFocused === null || rowFocused === void 0 ? void 0 : rowFocused.ensureVisible();
2561
- }
2565
+ (_a = (cellFocused || rowFocused)) === null || _a === void 0 ? void 0 : _a.ensureVisible();
2562
2566
  }
2563
2567
  setRowCollapsed(row, collapsed) {
2564
2568
  if (row && collapsed) {
@@ -2571,15 +2575,25 @@ const ChGrid = class {
2571
2575
  }
2572
2576
  }
2573
2577
  setCellSelected(cell, selected = true) {
2574
- const { rowFocused, rowsSelected, cellSelected } = this.manager.selection.selectSet({
2578
+ var _a;
2579
+ const { rowFocused, rowsSelected, cellFocused, cellSelected } = this.manager.selection.selectSet({
2575
2580
  rowFocused: this.rowFocused,
2576
2581
  rowsSelected: this.rowsSelected,
2582
+ cellFocused: this.cellFocused,
2577
2583
  cellSelected: this.cellSelected
2578
2584
  }, cell.row, cell, selected);
2579
2585
  this.rowFocused = rowFocused;
2580
2586
  this.rowsSelected = rowsSelected;
2587
+ this.cellFocused = cellFocused;
2581
2588
  this.cellSelected = cellSelected;
2582
- rowFocused === null || rowFocused === void 0 ? void 0 : rowFocused.ensureVisible();
2589
+ (_a = (cellFocused || rowFocused)) === null || _a === void 0 ? void 0 : _a.ensureVisible();
2590
+ }
2591
+ emitRowClicked(row, cell) {
2592
+ this.rowClicked.emit({
2593
+ rowId: row.rowId,
2594
+ cellId: cell === null || cell === void 0 ? void 0 : cell.cellId,
2595
+ columnId: cell === null || cell === void 0 ? void 0 : cell.column.columnId
2596
+ });
2583
2597
  }
2584
2598
  stopSelecting() {
2585
2599
  this.manager.selection.selecting = false;
@@ -2590,10 +2604,11 @@ const ChGrid = class {
2590
2604
  return (index.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 " }, index.h("slot", { name: "settings" }, index.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 " }))));
2591
2605
  }
2592
2606
  render() {
2593
- return (index.h(index.Host, { tabindex: this.rowSelectionMode !== "none" ? "0" : false }, index.h("header", { part: "header" }, index.h("slot", { name: "header" })), index.h("section", { class: "main", style: this.gridStyle, part: "main", ref: el => (this.gridLayoutElement = el) }, index.h("slot", null)), index.h("aside", null, this.renderSettings(), index.h("slot", { name: "column-display" }), index.h("slot", { name: "row-actions" })), index.h("footer", { part: "footer" }, index.h("slot", { name: "footer" }))));
2607
+ return (index.h(index.Host, { tabindex: this.keyboardNavigationMode !== "none" ? "0" : false }, index.h("header", { part: "header" }, index.h("slot", { name: "header" })), index.h("section", { class: "main", style: this.gridStyle, part: "main", ref: el => (this.gridLayoutElement = el) }, index.h("slot", null)), index.h("aside", null, this.renderSettings(), index.h("slot", { name: "column-display" }), index.h("slot", { name: "row-actions" })), index.h("footer", { part: "footer" }, index.h("slot", { name: "footer" }))));
2594
2608
  }
2595
2609
  static get watchers() { return {
2596
2610
  "rowFocused": ["rowFocusedHandler"],
2611
+ "cellFocused": ["cellFocusedHandler"],
2597
2612
  "rowHighlighted": ["rowHighlightedHandler"],
2598
2613
  "rowsMarked": ["rowsMarkedHandler"],
2599
2614
  "rowsSelected": ["rowsSelectedHandler"],
@@ -2620,6 +2635,9 @@ const ChGridColumn = class {
2620
2635
  });
2621
2636
  eventInfo.stopPropagation();
2622
2637
  };
2638
+ this.selectorTouchEndHandler = (eventInfo) => {
2639
+ eventInfo.stopPropagation();
2640
+ };
2623
2641
  index.registerInstance(this, hostRef);
2624
2642
  this.columnHiddenChanged = index.createEvent(this, "columnHiddenChanged", 7);
2625
2643
  this.columnSizeChanging = index.createEvent(this, "columnSizeChanging", 7);
@@ -2759,7 +2777,7 @@ const ChGridColumn = class {
2759
2777
  renderSelector() {
2760
2778
  return (index.h("li", { class: "selector", part: "bar-selector", hidden: !(this.columnType === "rich" && this.richRowSelector) }, index.h("label", { part: "selector-label" }, index.h("input", { type: "checkbox", part: ["selector", this.richRowSelectorState]
2761
2779
  .filter(part => part !== "")
2762
- .join(" "), onClick: this.selectorClickHandler, checked: this.richRowSelectorState === "checked", indeterminate: this.richRowSelectorState === "indeterminate" }))));
2780
+ .join(" "), onClick: this.selectorClickHandler, onTouchEnd: this.selectorTouchEndHandler, checked: this.richRowSelectorState === "checked", indeterminate: this.richRowSelectorState === "indeterminate" }))));
2763
2781
  }
2764
2782
  renderName() {
2765
2783
  return (index.h("li", { class: "name", part: "bar-name", title: this.columnTooltip ||