@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
@@ -8,11 +8,26 @@ import { s as state } from './store-d2c5d5bd.js';
8
8
  */
9
9
  class HTMLChGridRowElement extends HTMLElement {
10
10
  parentGrid;
11
+ static get observedAttributes() {
12
+ return ["selected", "marked"];
13
+ }
11
14
  constructor() {
12
15
  super();
13
16
  }
14
17
  connectedCallback() {
15
18
  this.addEventListener("cellCaretClicked", this.cellCaretClickedHandler);
19
+ if (this.selected || this.marked) {
20
+ this.grid.syncRowState(this);
21
+ }
22
+ }
23
+ attributeChangedCallback(name, _oldValue, value) {
24
+ if (name === "selected") {
25
+ this.selected = value !== null ? value !== "false" : false;
26
+ }
27
+ if (name === "marked") {
28
+ this.marked = value !== null ? value !== "false" : false;
29
+ }
30
+ this.grid?.syncRowState(this);
16
31
  }
17
32
  /**
18
33
  * Returns the parent ch-grid element of the grid row.
@@ -56,7 +71,9 @@ class HTMLChGridRowElement extends HTMLElement {
56
71
  set selected(value) {
57
72
  const selectedClasses = this.grid.rowSelectedClass?.split(" ");
58
73
  if (value === true) {
59
- this.setAttribute("selected", "");
74
+ if (!this.hasAttribute("selected")) {
75
+ this.setAttribute("selected", "");
76
+ }
60
77
  if (this.grid.rowSelectedClass) {
61
78
  this.classList.add(...selectedClasses);
62
79
  }
@@ -77,7 +94,9 @@ class HTMLChGridRowElement extends HTMLElement {
77
94
  set marked(value) {
78
95
  const markedClasses = this.grid.rowMarkedClass?.split(" ");
79
96
  if (value === true) {
80
- this.setAttribute("marked", "");
97
+ if (!this.hasAttribute("marked")) {
98
+ this.setAttribute("marked", "");
99
+ }
81
100
  if (this.grid.rowMarkedClass) {
82
101
  this.classList.add(...markedClasses);
83
102
  }
@@ -342,12 +361,15 @@ class HTMLChGridCellElement extends HTMLElement {
342
361
  this.cellType = value;
343
362
  }
344
363
  if (name === "row-drag") {
364
+ this.cellType = ChGridCellType.Rich;
345
365
  this.rowDrag = value !== null ? value !== "false" : false;
346
366
  }
347
367
  if (name === "row-selector") {
368
+ this.cellType = ChGridCellType.Rich;
348
369
  this.rowSelector = value !== null ? value !== "false" : false;
349
370
  }
350
371
  if (name === "row-actions") {
372
+ this.cellType = ChGridCellType.Rich;
351
373
  this.rowActions = value !== null ? value !== "false" : false;
352
374
  }
353
375
  }
@@ -402,6 +424,20 @@ class HTMLChGridCellElement extends HTMLElement {
402
424
  this.removeAttribute("selected");
403
425
  }
404
426
  }
427
+ /**
428
+ * A boolean value indicating whether the cell is focused.
429
+ */
430
+ get focused() {
431
+ return this.hasAttribute("focused");
432
+ }
433
+ set focused(value) {
434
+ if (value === true) {
435
+ this.setAttribute("focused", "");
436
+ }
437
+ else {
438
+ this.removeAttribute("focused");
439
+ }
440
+ }
405
441
  /**
406
442
  * A boolean value indicates whether the grid cell is visible.
407
443
  */
@@ -517,9 +553,11 @@ class HTMLChGridCellElement extends HTMLElement {
517
553
  if (this.rowSelector) {
518
554
  this.selector = this.shadowRoot.querySelector("[part='selector']");
519
555
  this.selector.addEventListener("mousedown", (eventInfo) => eventInfo.stopPropagation());
556
+ this.selector.addEventListener("touchend", (eventInfo) => eventInfo.stopPropagation());
520
557
  this.selector.addEventListener("click", this.selectorClickHandler.bind(this));
521
558
  this.selectorLabel = this.shadowRoot.querySelector("[part='selector-label']");
522
559
  this.selectorLabel.addEventListener("mousedown", (eventInfo) => eventInfo.stopPropagation());
560
+ this.selectorLabel.addEventListener("touchend", (eventInfo) => eventInfo.stopPropagation());
523
561
  this.selectorLabel.addEventListener("click", this.selectorLabelClickHandler.bind(this));
524
562
  }
525
563
  }
@@ -953,26 +991,45 @@ class ChGridManagerSelection {
953
991
  selectionStateNone = {
954
992
  rowFocused: null,
955
993
  rowsSelected: [],
994
+ cellFocused: null,
956
995
  cellSelected: null
957
996
  };
997
+ touch;
958
998
  selecting;
959
999
  selectingRow;
960
1000
  selectingCell;
961
1001
  constructor(manager) {
962
1002
  this.manager = manager;
963
1003
  }
964
- select(state, row, cell, append, range, context) {
965
- if (this.manager.grid.rowSelectionMode === "none") {
1004
+ touchStart(touchEvent) {
1005
+ this.touch = {
1006
+ clientX: touchEvent.touches[0].clientX,
1007
+ clientY: touchEvent.touches[0].clientY
1008
+ };
1009
+ }
1010
+ isTouchEndSelection(touchEvent) {
1011
+ return (Math.abs(this.touch.clientX - touchEvent.changedTouches[0].clientX) <
1012
+ 10 &&
1013
+ Math.abs(this.touch.clientY - touchEvent.changedTouches[0].clientY) <
1014
+ 10 &&
1015
+ touchEvent.cancelable);
1016
+ }
1017
+ select(state, row, cell, select, append, range, context) {
1018
+ const grid = this.manager.grid;
1019
+ if (grid.keyboardNavigationMode === "none" &&
1020
+ grid.rowSelectionMode === "none") {
966
1021
  return this.selectionStateNone;
967
1022
  }
968
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1023
+ if (grid.rowSelectionMode === "none") {
1024
+ select = false;
1025
+ }
1026
+ if (grid.rowSelectionMode !== "multiple") {
969
1027
  append = false;
970
1028
  range = false;
971
1029
  }
972
- let rowFocused = state.rowFocused;
973
- let rowsSelected = state.rowsSelected;
974
- let cellSelected = state.cellSelected;
1030
+ let { rowFocused, rowsSelected, cellFocused, cellSelected } = state;
975
1031
  rowFocused = row;
1032
+ cellFocused = cell;
976
1033
  if (range) {
977
1034
  const rangeRows = this.manager.getRowsRange(this.rangeStart ?? row, row);
978
1035
  if (this.rangeValue) {
@@ -980,8 +1037,7 @@ class ChGridManagerSelection {
980
1037
  rowsSelected = Array.from(new Set(rowsSelected.concat(rangeRows)));
981
1038
  }
982
1039
  else {
983
- rowsSelected =
984
- rowsSelected.length === rangeRows.length ? rowsSelected : rangeRows;
1040
+ rowsSelected = this.preserveInstanceIfSame(rangeRows, state.rowsSelected);
985
1041
  }
986
1042
  cellSelected =
987
1043
  cell ||
@@ -997,7 +1053,7 @@ class ChGridManagerSelection {
997
1053
  this.rangeValue = !row.selected;
998
1054
  if (rowsSelected.includes(row)) {
999
1055
  rowsSelected = rowsSelected.filter(rowSelected => rowSelected !== row);
1000
- cellSelected = null;
1056
+ cellSelected = state.cellSelected?.row === row ? null : cellSelected;
1001
1057
  }
1002
1058
  else {
1003
1059
  rowsSelected = [...rowsSelected, row];
@@ -1009,15 +1065,16 @@ class ChGridManagerSelection {
1009
1065
  else {
1010
1066
  this.rangeStart = row;
1011
1067
  this.rangeValue = true;
1012
- if (!(rowsSelected.length === 1 && rowsSelected[0] === row) &&
1013
- !(context && rowsSelected.includes(row))) {
1014
- rowsSelected = [row];
1068
+ if (select) {
1069
+ if (!(context && state.rowsSelected.includes(row))) {
1070
+ rowsSelected = this.preserveInstanceIfSame([row], state.rowsSelected);
1071
+ }
1072
+ cellSelected =
1073
+ cell ||
1074
+ row.getCell(cellSelected?.column || this.manager.getFirstColumn());
1015
1075
  }
1016
- cellSelected =
1017
- cell ||
1018
- row.getCell(cellSelected?.column || this.manager.getFirstColumn());
1019
1076
  }
1020
- return { rowFocused, rowsSelected, cellSelected };
1077
+ return { rowFocused, rowsSelected, cellFocused, cellSelected };
1021
1078
  }
1022
1079
  selectAll(state, value = true) {
1023
1080
  if (this.manager.grid.rowSelectionMode === "none") {
@@ -1026,18 +1083,19 @@ class ChGridManagerSelection {
1026
1083
  const rows = this.manager.getRows();
1027
1084
  let rowFocused = state.rowFocused;
1028
1085
  let rowsSelected = state.rowsSelected;
1086
+ let cellFocused = state.cellFocused;
1029
1087
  let cellSelected = state.cellSelected;
1088
+ rowFocused ??= this.manager.getFirstRow();
1089
+ cellFocused ??= rowFocused.getCell(state.cellFocused?.column || this.manager.getFirstColumn());
1030
1090
  if (value) {
1031
- rowFocused ??= this.manager.getFirstRow();
1032
1091
  rowsSelected = rows;
1033
- cellSelected = rowFocused.getCell(state.cellSelected?.column || this.manager.getFirstColumn());
1092
+ cellSelected = cellFocused;
1034
1093
  }
1035
1094
  else {
1036
- rowFocused ??= this.manager.getFirstRow();
1037
1095
  rowsSelected = [];
1038
1096
  cellSelected = null;
1039
1097
  }
1040
- return { rowFocused, rowsSelected, cellSelected };
1098
+ return { rowFocused, rowsSelected, cellFocused, cellSelected };
1041
1099
  }
1042
1100
  selectSet(state, row, cell, value = true) {
1043
1101
  let append = true;
@@ -1049,8 +1107,10 @@ class ChGridManagerSelection {
1049
1107
  }
1050
1108
  let rowFocused = state.rowFocused;
1051
1109
  let rowsSelected = state.rowsSelected;
1110
+ let cellFocused = state.cellFocused;
1052
1111
  let cellSelected = state.cellSelected;
1053
1112
  rowFocused = row;
1113
+ cellFocused = cell;
1054
1114
  if (value) {
1055
1115
  if (append) {
1056
1116
  rowsSelected = rowsSelected.includes(row)
@@ -1068,224 +1128,67 @@ class ChGridManagerSelection {
1068
1128
  : rowsSelected.filter(rowSelected => rowSelected !== row);
1069
1129
  cellSelected = null;
1070
1130
  }
1071
- return { rowFocused, rowsSelected, cellSelected };
1131
+ return { rowFocused, rowsSelected, cellFocused, cellSelected };
1072
1132
  }
1073
- selectFirstRow(state, append) {
1074
- if (this.manager.grid.rowSelectionMode === "none") {
1075
- return this.selectionStateNone;
1076
- }
1077
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1078
- append = false;
1079
- }
1133
+ moveFirstRow(state, select, range, append) {
1080
1134
  const firstRow = this.manager.getFirstRow();
1081
- let rowFocused = state.rowFocused;
1082
- let rowsSelected = state.rowsSelected;
1083
- let cellSelected = state.cellSelected;
1084
1135
  if (firstRow) {
1085
- if (append) {
1086
- const rangeRows = this.manager.getRowsRange(rowFocused ?? firstRow, firstRow);
1087
- rowsSelected = Array.from(new Set(rowsSelected.concat(rangeRows)));
1088
- }
1089
- else {
1090
- rowsSelected = [firstRow];
1091
- }
1092
- rowFocused = firstRow;
1093
- cellSelected = firstRow.getCell(state.cellSelected?.column || this.manager.getFirstColumn());
1136
+ return this.select(state, firstRow, firstRow.getCell(state.cellFocused.column), select, append, range, false);
1094
1137
  }
1095
- return { rowFocused, rowsSelected, cellSelected };
1138
+ return state;
1096
1139
  }
1097
- selectPreviousRow(state, append) {
1098
- if (this.manager.grid.rowSelectionMode === "none") {
1099
- return this.selectionStateNone;
1100
- }
1101
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1102
- append = false;
1103
- }
1140
+ movePreviousRow(state, select, range, append) {
1104
1141
  const previousRow = this.manager.getPreviousRow(state.rowFocused);
1105
- let rowFocused = state.rowFocused;
1106
- let rowsSelected = state.rowsSelected;
1107
- let cellSelected = state.cellSelected;
1108
1142
  if (previousRow) {
1109
- if (append) {
1110
- const sortedRowsSelected = this.sortRowsSelected(rowsSelected);
1111
- const isContiguousSelection = this.isContiguousSelection(sortedRowsSelected);
1112
- if (isContiguousSelection && rowFocused === sortedRowsSelected[0]) {
1113
- rowsSelected = [...rowsSelected, previousRow];
1114
- }
1115
- else if (isContiguousSelection &&
1116
- rowFocused === sortedRowsSelected[sortedRowsSelected.length - 1]) {
1117
- rowsSelected = rowsSelected.slice(0, -1);
1118
- }
1119
- else {
1120
- rowsSelected = [rowFocused, previousRow];
1121
- }
1122
- }
1123
- else {
1124
- rowsSelected = [previousRow];
1125
- }
1126
- rowFocused = previousRow;
1127
- cellSelected = previousRow.getCell(cellSelected?.column || this.manager.getFirstColumn());
1143
+ return this.select(state, previousRow, previousRow.getCell(state.cellFocused.column), select, append, range, false);
1128
1144
  }
1129
- return { rowFocused, rowsSelected, cellSelected };
1145
+ return state;
1130
1146
  }
1131
- selectNextRow(state, append) {
1132
- if (this.manager.grid.rowSelectionMode === "none") {
1133
- return this.selectionStateNone;
1134
- }
1135
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1136
- append = false;
1137
- }
1147
+ moveNextRow(state, select, range, append) {
1138
1148
  const nextRow = this.manager.getNextRow(state.rowFocused);
1139
- let rowFocused = state.rowFocused;
1140
- let rowsSelected = state.rowsSelected;
1141
- let cellSelected = state.cellSelected;
1142
1149
  if (nextRow) {
1143
- if (append) {
1144
- const sortedRowsSelected = this.sortRowsSelected(rowsSelected);
1145
- const isContiguousSelection = this.isContiguousSelection(sortedRowsSelected);
1146
- if (isContiguousSelection &&
1147
- rowFocused === sortedRowsSelected[sortedRowsSelected.length - 1]) {
1148
- rowsSelected = [...rowsSelected, nextRow];
1149
- }
1150
- else if (isContiguousSelection &&
1151
- rowFocused === sortedRowsSelected[0]) {
1152
- rowsSelected = rowsSelected.slice(1);
1153
- }
1154
- else {
1155
- rowsSelected = [rowFocused, nextRow];
1156
- }
1157
- }
1158
- else {
1159
- rowsSelected = [nextRow];
1160
- }
1161
- rowFocused = nextRow;
1162
- cellSelected = nextRow.getCell(cellSelected?.column || this.manager.getFirstColumn());
1150
+ return this.select(state, nextRow, nextRow.getCell(state.cellFocused.column), select, append, range, false);
1163
1151
  }
1164
- return { rowFocused, rowsSelected, cellSelected };
1152
+ return state;
1165
1153
  }
1166
- selectLastRow(state, append) {
1167
- if (this.manager.grid.rowSelectionMode === "none") {
1168
- return this.selectionStateNone;
1169
- }
1170
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1171
- append = false;
1172
- }
1173
- const firstRow = this.manager.getLastRow();
1174
- let rowFocused = state.rowFocused;
1175
- let rowsSelected = state.rowsSelected;
1176
- let cellSelected = state.cellSelected;
1177
- if (firstRow) {
1178
- if (append) {
1179
- const rangeRows = this.manager.getRowsRange(rowFocused ?? firstRow, firstRow);
1180
- rowsSelected = Array.from(new Set(rowsSelected.concat(rangeRows)));
1181
- }
1182
- else {
1183
- rowsSelected = [firstRow];
1184
- }
1185
- rowFocused = firstRow;
1186
- cellSelected = firstRow.getCell(state.cellSelected?.column || this.manager.getFirstColumn());
1154
+ moveLastRow(state, select, range, append) {
1155
+ const lastRow = this.manager.getLastRow();
1156
+ if (lastRow) {
1157
+ return this.select(state, lastRow, lastRow.getCell(state.cellFocused.column), select, append, range, false);
1187
1158
  }
1188
- return { rowFocused, rowsSelected, cellSelected };
1159
+ return state;
1189
1160
  }
1190
- selectPreviousPageRow(state, append) {
1191
- if (this.manager.grid.rowSelectionMode === "none") {
1192
- return this.selectionStateNone;
1193
- }
1194
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1195
- append = false;
1196
- }
1161
+ movePreviousPageRow(state, select, range, append) {
1197
1162
  const rows = this.manager.getRows();
1198
1163
  const rowsPerPage = this.manager.getRowsPerPage();
1199
- let rowFocused = state.rowFocused;
1200
- let rowsSelected = state.rowsSelected;
1201
- let cellSelected = state.cellSelected;
1202
- const previousPageRow = rows[Math.max(rows.indexOf(rowFocused) - rowsPerPage, 0)];
1164
+ const previousPageRow = rows[Math.max(rows.indexOf(state.rowFocused) - rowsPerPage, 0)];
1203
1165
  if (previousPageRow) {
1204
- if (append) {
1205
- const rangeRows = this.manager.getRowsRange(rowFocused ?? previousPageRow, previousPageRow);
1206
- rowsSelected = Array.from(new Set(rowsSelected.concat(rangeRows)));
1207
- }
1208
- else {
1209
- rowsSelected =
1210
- rowsSelected.length === 1 && rowsSelected[0] === previousPageRow
1211
- ? rowsSelected
1212
- : [previousPageRow];
1213
- }
1214
- rowFocused = previousPageRow;
1215
- cellSelected = previousPageRow.getCell(state.cellSelected?.column || this.manager.getFirstColumn());
1166
+ return this.select(state, previousPageRow, previousPageRow.getCell(state.cellFocused.column), select, append, range, false);
1216
1167
  }
1217
- return { rowFocused, rowsSelected, cellSelected };
1168
+ return state;
1218
1169
  }
1219
- selectNextPageRow(state, append) {
1220
- if (this.manager.grid.rowSelectionMode === "none") {
1221
- return this.selectionStateNone;
1222
- }
1223
- if (this.manager.grid.rowSelectionMode !== "multiple") {
1224
- append = false;
1225
- }
1170
+ moveNextPageRow(state, select, range, append) {
1226
1171
  const rows = this.manager.getRows();
1227
1172
  const rowsPerPage = this.manager.getRowsPerPage();
1228
- let rowFocused = state.rowFocused;
1229
- let rowsSelected = state.rowsSelected;
1230
- let cellSelected = state.cellSelected;
1231
- const nextPageRow = rows[Math.min(rows.indexOf(rowFocused) + rowsPerPage, rows.length - 1)];
1173
+ const nextPageRow = rows[Math.min(rows.indexOf(state.rowFocused) + rowsPerPage, rows.length - 1)];
1232
1174
  if (nextPageRow) {
1233
- if (append) {
1234
- const rangeRows = this.manager.getRowsRange(rowFocused ?? nextPageRow, nextPageRow);
1235
- rowsSelected = Array.from(new Set(rowsSelected.concat(rangeRows)));
1236
- }
1237
- else {
1238
- rowsSelected =
1239
- rowsSelected.length === 1 && rowsSelected[0] === nextPageRow
1240
- ? rowsSelected
1241
- : [nextPageRow];
1242
- }
1243
- rowFocused = nextPageRow;
1244
- cellSelected = nextPageRow.getCell(state.cellSelected?.column || this.manager.getFirstColumn());
1175
+ return this.select(state, nextPageRow, nextPageRow.getCell(state.cellFocused.column), select, append, range, false);
1245
1176
  }
1246
- return { rowFocused, rowsSelected, cellSelected };
1177
+ return state;
1247
1178
  }
1248
- selectPreviousCell(state) {
1249
- if (this.manager.grid.rowSelectionMode === "none") {
1250
- return this.selectionStateNone;
1251
- }
1252
- const rowFocused = state.rowFocused;
1253
- let rowsSelected = state.rowsSelected;
1254
- let cellSelected = state.cellSelected;
1255
- if (cellSelected) {
1256
- const nextCell = this.manager.getPreviousCell(cellSelected);
1257
- if (nextCell) {
1258
- cellSelected = nextCell;
1259
- }
1260
- }
1261
- else {
1262
- if (!rowsSelected.includes(rowFocused)) {
1263
- rowsSelected = [...rowsSelected, rowFocused];
1264
- }
1265
- cellSelected ||= rowFocused.getCell(this.manager.getFirstColumn());
1179
+ movePreviousCell(state, select, range) {
1180
+ const previousCell = this.manager.getPreviousCell(state.cellFocused);
1181
+ if (previousCell) {
1182
+ return this.select(state, state.rowFocused, previousCell, select, false, range, false);
1266
1183
  }
1267
- return { rowFocused, rowsSelected, cellSelected };
1184
+ return state;
1268
1185
  }
1269
- selectNextCell(state) {
1270
- if (this.manager.grid.rowSelectionMode === "none") {
1271
- return this.selectionStateNone;
1272
- }
1273
- const rowFocused = state.rowFocused;
1274
- let rowsSelected = state.rowsSelected;
1275
- let cellSelected = state.cellSelected;
1276
- if (cellSelected) {
1277
- const nextCell = this.manager.getNextCell(cellSelected);
1278
- if (nextCell) {
1279
- cellSelected = nextCell;
1280
- }
1281
- }
1282
- else {
1283
- if (!rowsSelected.includes(rowFocused)) {
1284
- rowsSelected = [...rowsSelected, rowFocused];
1285
- }
1286
- cellSelected ||= rowFocused.getCell(this.manager.getFirstColumn());
1186
+ moveNextCell(state, select, range) {
1187
+ const nextCell = this.manager.getNextCell(state.cellFocused);
1188
+ if (nextCell) {
1189
+ return this.select(state, state.rowFocused, nextCell, select, false, range, false);
1287
1190
  }
1288
- return { rowFocused, rowsSelected, cellSelected };
1191
+ return state;
1289
1192
  }
1290
1193
  markRow(row, checked, range, currentRowsMarked) {
1291
1194
  if (row) {
@@ -1308,6 +1211,15 @@ class ChGridManagerSelection {
1308
1211
  }
1309
1212
  return currentRowsMarked;
1310
1213
  }
1214
+ markRows(rowFocused, rowsMarked, rowsSelected) {
1215
+ const rows = rowsSelected.includes(rowFocused)
1216
+ ? rowsSelected
1217
+ : [rowFocused];
1218
+ if (rows.some(row => !row.marked)) {
1219
+ return Array.from(new Set(rowsMarked.concat(rows)));
1220
+ }
1221
+ return rowsMarked.filter(row => !rows.includes(row));
1222
+ }
1311
1223
  markAllRows(value = true) {
1312
1224
  if (value) {
1313
1225
  return this.manager.getRows();
@@ -1330,42 +1242,26 @@ class ChGridManagerSelection {
1330
1242
  const cell = row.children[indexColumnSelector];
1331
1243
  cell.setSelectorChecked(true);
1332
1244
  });
1333
- if (rows.length === 0) {
1334
- columnSelector.richRowSelectorState = "";
1335
- }
1336
- else if (rows.length === this.manager.getRows().length) {
1337
- columnSelector.richRowSelectorState = "checked";
1338
- }
1339
- else {
1340
- columnSelector.richRowSelectorState = "indeterminate";
1341
- }
1245
+ this.syncColumnSelector(rows.length, columnSelector);
1342
1246
  }
1343
1247
  }
1344
- sortRowsSelected(rowsSelected) {
1345
- const rows = Array.from(this.manager.grid.querySelectorAll("ch-grid-row"));
1346
- return rowsSelected.sort((rowA, rowB) => {
1347
- const rowAIndex = rows.indexOf(rowA);
1348
- const rowBIndex = rows.indexOf(rowB);
1349
- if (rowAIndex < rowBIndex) {
1350
- return -1;
1351
- }
1352
- if (rowAIndex > rowBIndex) {
1353
- return 1;
1354
- }
1355
- return 0;
1356
- });
1357
- }
1358
- isContiguousSelection(sortedRowsSelected) {
1359
- const rows = Array.from(this.manager.grid.querySelectorAll("ch-grid-row")).filter(row => row.isVisible());
1360
- if (sortedRowsSelected.length === 0) {
1361
- return false;
1248
+ syncColumnSelector(length, columnSelector) {
1249
+ columnSelector ??= this.manager.columns.getColumnSelector();
1250
+ if (length === 0) {
1251
+ columnSelector.richRowSelectorState = "";
1362
1252
  }
1363
- if (sortedRowsSelected.length === 1) {
1364
- return true;
1253
+ else if (length === this.manager.getRows().length) {
1254
+ columnSelector.richRowSelectorState = "checked";
1255
+ }
1256
+ else {
1257
+ columnSelector.richRowSelectorState = "indeterminate";
1365
1258
  }
1366
- const startIndex = rows.indexOf(sortedRowsSelected[0]);
1367
- const endIndex = rows.indexOf(sortedRowsSelected[sortedRowsSelected.length - 1]);
1368
- return endIndex - startIndex + 1 === sortedRowsSelected.length;
1259
+ }
1260
+ preserveInstanceIfSame(newSelection, oldSelection) {
1261
+ return newSelection.length === oldSelection.length &&
1262
+ newSelection.every(item => oldSelection.includes(item))
1263
+ ? oldSelection
1264
+ : newSelection;
1369
1265
  }
1370
1266
  }
1371
1267
 
@@ -1725,9 +1621,6 @@ class ChGridManager {
1725
1621
  }
1726
1622
  return rows;
1727
1623
  }
1728
- getRowsSelected() {
1729
- return Array.from(this.grid.querySelectorAll(`ch-grid-row[selected]`));
1730
- }
1731
1624
  getRowsRange(start, end) {
1732
1625
  const rows = this.getRows();
1733
1626
  const indexStart = rows.indexOf(start);
@@ -1985,12 +1878,14 @@ const ChGrid = class {
1985
1878
  this.rowEnterPressed = createEvent(this, "rowEnterPressed", 7);
1986
1879
  this.rowContextMenu = createEvent(this, "rowContextMenu", 7);
1987
1880
  this.rowFocused = undefined;
1881
+ this.cellFocused = undefined;
1988
1882
  this.rowHighlighted = undefined;
1989
1883
  this.rowsMarked = [];
1990
1884
  this.rowsSelected = [];
1991
1885
  this.cellSelected = undefined;
1992
1886
  this.gridStyle = undefined;
1993
1887
  this.rowSelectionMode = "single";
1888
+ this.keyboardNavigationMode = "select";
1994
1889
  this.rowHighlightEnabled = "auto";
1995
1890
  this.rowSelectedClass = undefined;
1996
1891
  this.rowHighlightedClass = undefined;
@@ -2009,6 +1904,14 @@ const ChGrid = class {
2009
1904
  previous.focused = false;
2010
1905
  }
2011
1906
  }
1907
+ cellFocusedHandler(cell, previous) {
1908
+ if (cell) {
1909
+ cell.focused = true;
1910
+ }
1911
+ if (previous) {
1912
+ previous.focused = false;
1913
+ }
1914
+ }
2012
1915
  rowHighlightedHandler(row, previous) {
2013
1916
  var _a, _b;
2014
1917
  // highlight
@@ -2028,18 +1931,7 @@ const ChGrid = class {
2028
1931
  }
2029
1932
  rowsMarkedHandler(rows, previous) {
2030
1933
  this.manager.selection.syncRowSelector(rows, previous, "mark");
2031
- this.rowMarkingChanged.emit({
2032
- rowsId: rows.map(row => row.rowId),
2033
- addedRowsId: rows
2034
- .filter(row => !previous.includes(row))
2035
- .map(row => row.rowId),
2036
- removedRowsId: previous
2037
- .filter(row => !rows.includes(row))
2038
- .map(row => row.rowId),
2039
- unalteredRowsId: rows
2040
- .filter(row => previous.includes(row))
2041
- .map(row => row.rowId)
2042
- });
1934
+ this.rowMarkingChanged.emit(this.getChangedEventDetail(rows, previous));
2043
1935
  }
2044
1936
  rowsSelectedHandler(rows, previous) {
2045
1937
  if (previous) {
@@ -2051,7 +1943,7 @@ const ChGrid = class {
2051
1943
  rows.forEach(row => (row.selected = true));
2052
1944
  }
2053
1945
  this.manager.selection.syncRowSelector(rows, previous, "select");
2054
- this.selectionChanged.emit({ rowsId: rows.map(row => row.rowId) });
1946
+ this.selectionChanged.emit(this.getChangedEventDetail(rows, previous));
2055
1947
  }
2056
1948
  cellSelectedHandler(cell, previous) {
2057
1949
  if (cell) {
@@ -2069,7 +1961,6 @@ const ChGrid = class {
2069
1961
  componentWillLoad() {
2070
1962
  this.manager = new ChGridManager(this.el);
2071
1963
  this.gridStyle = this.manager.getGridStyle();
2072
- this.rowsSelected = this.manager.getRowsSelected();
2073
1964
  }
2074
1965
  componentDidLoad() {
2075
1966
  this.manager.componentDidLoad(this.gridLayoutElement);
@@ -2084,14 +1975,18 @@ const ChGrid = class {
2084
1975
  }
2085
1976
  }
2086
1977
  focusHandler() {
2087
- if (this.rowSelectionMode !== "none") {
2088
- this.rowFocused = this.rowsSelected[0] || this.manager.getFirstRow();
1978
+ var _a, _b, _c;
1979
+ if (this.keyboardNavigationMode !== "none") {
1980
+ this.rowFocused || (this.rowFocused = (_a = this.rowsSelected[0]) !== null && _a !== void 0 ? _a : this.manager.getFirstRow());
1981
+ 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());
1982
+ this.selectByKeyboardEvent(false, false);
2089
1983
  }
2090
1984
  }
2091
1985
  blurHandler() {
2092
1986
  this.rowFocused = null;
1987
+ this.cellFocused = null;
2093
1988
  }
2094
- cellFocusedHandler(eventInfo) {
1989
+ cellFocusedEventHandler(eventInfo) {
2095
1990
  const cell = eventInfo.target;
2096
1991
  if (this.rowSelectionMode !== "none" && !cell.selected) {
2097
1992
  this.setCellSelected(cell);
@@ -2116,10 +2011,13 @@ const ChGrid = class {
2116
2011
  }
2117
2012
  }
2118
2013
  keyDownHandler(eventInfo) {
2119
- if (focusComposedPath()[0] === this.el) {
2014
+ if (focusComposedPath()[0] === this.el &&
2015
+ this.keyboardNavigationMode !== "none") {
2016
+ const range = eventInfo.shiftKey;
2017
+ const append = mouseEventModifierKey(eventInfo);
2120
2018
  switch (eventInfo.key) {
2121
2019
  case " ":
2122
- this.toggleRowsMarked();
2020
+ this.spacePressedEvent(mouseEventModifierKey(eventInfo), eventInfo.shiftKey);
2123
2021
  break;
2124
2022
  case "+":
2125
2023
  this.setRowCollapsed(this.rowFocused, false);
@@ -2128,28 +2026,28 @@ const ChGrid = class {
2128
2026
  this.setRowCollapsed(this.rowFocused, true);
2129
2027
  break;
2130
2028
  case "Home":
2131
- this.selectByKeyboardEvent(this.manager.selection.selectFirstRow.bind(this.manager.selection), eventInfo.shiftKey);
2029
+ this.moveByKeyboardEvent(this.manager.selection.moveFirstRow, range, append);
2132
2030
  break;
2133
2031
  case "End":
2134
- this.selectByKeyboardEvent(this.manager.selection.selectLastRow.bind(this.manager.selection), eventInfo.shiftKey);
2032
+ this.moveByKeyboardEvent(this.manager.selection.moveLastRow, range, append);
2135
2033
  break;
2136
2034
  case "PageUp":
2137
- this.selectByKeyboardEvent(this.manager.selection.selectPreviousPageRow.bind(this.manager.selection), eventInfo.shiftKey);
2035
+ this.moveByKeyboardEvent(this.manager.selection.movePreviousPageRow, range, append);
2138
2036
  break;
2139
2037
  case "PageDown":
2140
- this.selectByKeyboardEvent(this.manager.selection.selectNextPageRow.bind(this.manager.selection), eventInfo.shiftKey);
2038
+ this.moveByKeyboardEvent(this.manager.selection.moveNextPageRow, range, append);
2141
2039
  break;
2142
2040
  case "ArrowUp":
2143
- this.selectByKeyboardEvent(this.manager.selection.selectPreviousRow.bind(this.manager.selection), eventInfo.shiftKey);
2041
+ this.moveByKeyboardEvent(this.manager.selection.movePreviousRow, range, append);
2144
2042
  break;
2145
2043
  case "ArrowDown":
2146
- this.selectByKeyboardEvent(this.manager.selection.selectNextRow.bind(this.manager.selection), eventInfo.shiftKey);
2044
+ this.moveByKeyboardEvent(this.manager.selection.moveNextRow, range, append);
2147
2045
  break;
2148
2046
  case "ArrowLeft":
2149
- this.selectByKeyboardEvent(this.manager.selection.selectPreviousCell.bind(this.manager.selection), eventInfo.shiftKey);
2047
+ this.moveByKeyboardEvent(this.manager.selection.movePreviousCell, range, append);
2150
2048
  break;
2151
2049
  case "ArrowRight":
2152
- this.selectByKeyboardEvent(this.manager.selection.selectNextCell.bind(this.manager.selection), eventInfo.shiftKey);
2050
+ this.moveByKeyboardEvent(this.manager.selection.moveNextCell, range, append);
2153
2051
  break;
2154
2052
  case "Enter":
2155
2053
  this.enterPressedHandler();
@@ -2194,17 +2092,15 @@ const ChGrid = class {
2194
2092
  const row = this.manager.getRowEventTarget(eventInfo);
2195
2093
  const cell = this.manager.getCellEventTarget(eventInfo);
2196
2094
  if (row) {
2197
- this.rowClicked.emit({
2198
- rowId: row.rowId,
2199
- cellId: cell === null || cell === void 0 ? void 0 : cell.cellId,
2200
- columnId: cell === null || cell === void 0 ? void 0 : cell.column.columnId
2201
- });
2202
2095
  this.manager.selection.selecting = true;
2203
2096
  this.selectByPointerEvent(row, cell, mouseEventModifierKey(eventInfo), eventInfo.shiftKey, eventInfo.button === MouseEventButton.RIGHT);
2204
2097
  }
2205
2098
  }
2206
2099
  mouseUpHandler() {
2207
- this.stopSelecting();
2100
+ if (this.manager.selection.selecting) {
2101
+ this.stopSelecting();
2102
+ this.emitRowClicked(this.rowFocused, this.cellFocused);
2103
+ }
2208
2104
  }
2209
2105
  dblclickHandler(eventInfo) {
2210
2106
  const row = this.manager.getRowEventTarget(eventInfo);
@@ -2217,6 +2113,23 @@ const ChGrid = class {
2217
2113
  });
2218
2114
  }
2219
2115
  }
2116
+ touchstartHandler(eventInfo) {
2117
+ this.manager.selection.touchStart(eventInfo);
2118
+ }
2119
+ touchendHandler(eventInfo) {
2120
+ if (eventInfo.cancelable) {
2121
+ eventInfo.preventDefault();
2122
+ }
2123
+ if (this.manager.selection.isTouchEndSelection(eventInfo)) {
2124
+ const columnSelector = this.manager.columns.getColumnSelector();
2125
+ const row = this.manager.getRowEventTarget(eventInfo);
2126
+ const cell = this.manager.getCellEventTarget(eventInfo);
2127
+ if (row) {
2128
+ this.selectByPointerEvent(row, cell, (columnSelector === null || columnSelector === void 0 ? void 0 : columnSelector.richRowSelectorMode) !== "select", false, false);
2129
+ this.emitRowClicked(row, cell);
2130
+ }
2131
+ }
2132
+ }
2220
2133
  contextmenuHandler(eventInfo) {
2221
2134
  var _a, _b;
2222
2135
  let targetRow;
@@ -2336,6 +2249,16 @@ const ChGrid = class {
2336
2249
  async getMarkedRows() {
2337
2250
  return this.rowsMarked.map(row => row.rowId);
2338
2251
  }
2252
+ /**
2253
+ * Retrieves information about the currently focused cell.
2254
+ */
2255
+ async getFocusedCell() {
2256
+ return {
2257
+ cellId: this.cellFocused ? this.cellFocused.cellId : null,
2258
+ rowId: this.cellFocused ? this.cellFocused.row.rowId : null,
2259
+ columnId: this.cellFocused ? this.cellFocused.column.columnId : null
2260
+ };
2261
+ }
2339
2262
  /**
2340
2263
  * Retrieves information about the currently selected cell.
2341
2264
  */
@@ -2354,13 +2277,15 @@ const ChGrid = class {
2354
2277
  async selectRow(rowId, selected = true) {
2355
2278
  const row = this.manager.getRow(rowId);
2356
2279
  if (row) {
2357
- const { rowFocused, rowsSelected, cellSelected } = this.manager.selection.selectSet({
2280
+ const { rowFocused, rowsSelected, cellFocused, cellSelected } = this.manager.selection.selectSet({
2358
2281
  rowFocused: this.rowFocused,
2359
2282
  rowsSelected: this.rowsSelected,
2283
+ cellFocused: this.cellFocused,
2360
2284
  cellSelected: this.cellSelected
2361
2285
  }, row, null, selected);
2362
2286
  this.rowFocused = rowFocused;
2363
2287
  this.rowsSelected = rowsSelected;
2288
+ this.cellFocused = cellFocused;
2364
2289
  this.cellSelected = cellSelected;
2365
2290
  rowFocused === null || rowFocused === void 0 ? void 0 : rowFocused.ensureVisible();
2366
2291
  }
@@ -2485,76 +2410,155 @@ const ChGrid = class {
2485
2410
  columnId: nextCell ? nextCell.column.columnId : null
2486
2411
  };
2487
2412
  }
2413
+ /**
2414
+ * Synchronizes the state of a row in the grid.
2415
+ */
2416
+ async syncRowState(el) {
2417
+ const row = el;
2418
+ const columnSelector = this.manager.columns.getColumnSelector();
2419
+ if (this.rowSelectionMode !== "none") {
2420
+ this.syncRowStateSelected(row);
2421
+ }
2422
+ if ((columnSelector === null || columnSelector === void 0 ? void 0 : columnSelector.richRowSelectorMode) === "mark") {
2423
+ this.syncRowStateMarked(row);
2424
+ }
2425
+ if (columnSelector) {
2426
+ this.syncRowStateSelector(row, columnSelector);
2427
+ if (columnSelector.richRowSelectorMode === "select") {
2428
+ this.manager.selection.syncColumnSelector(this.rowsSelected.length, columnSelector);
2429
+ }
2430
+ else if (columnSelector.richRowSelectorMode === "mark") {
2431
+ this.manager.selection.syncColumnSelector(this.rowsMarked.length, columnSelector);
2432
+ }
2433
+ }
2434
+ }
2435
+ syncRowStateSelected(row) {
2436
+ if (row.selected && this.rowSelectionMode === "single") {
2437
+ this.rowsSelected[0] = row;
2438
+ }
2439
+ if (row.selected &&
2440
+ this.rowSelectionMode === "multiple" &&
2441
+ !this.rowsSelected.includes(row)) {
2442
+ this.rowsSelected.push(row);
2443
+ }
2444
+ if (!row.selected) {
2445
+ const index = this.rowsSelected.indexOf(row);
2446
+ if (index !== -1) {
2447
+ this.rowsSelected.splice(index, 1);
2448
+ }
2449
+ }
2450
+ }
2451
+ syncRowStateMarked(row) {
2452
+ if (row.marked && !this.rowsMarked.includes(row)) {
2453
+ this.rowsMarked.push(row);
2454
+ }
2455
+ if (!row.marked) {
2456
+ const index = this.rowsMarked.indexOf(row);
2457
+ if (index !== -1) {
2458
+ this.rowsMarked.splice(index, 1);
2459
+ }
2460
+ }
2461
+ }
2462
+ syncRowStateSelector(row, columnSelector) {
2463
+ const cell = row.getCell(columnSelector);
2464
+ const value = (columnSelector.richRowSelectorMode === "select" && row.selected) ||
2465
+ (columnSelector.richRowSelectorMode === "mark" && row.marked);
2466
+ cell.setSelectorChecked(value);
2467
+ }
2468
+ getChangedEventDetail(rows, previous) {
2469
+ return {
2470
+ rowsId: rows.map(row => row.rowId),
2471
+ addedRowsId: rows
2472
+ .filter(row => !previous.includes(row))
2473
+ .map(row => row.rowId),
2474
+ removedRowsId: previous
2475
+ .filter(row => !rows.includes(row))
2476
+ .map(row => row.rowId),
2477
+ unalteredRowsId: rows
2478
+ .filter(row => previous.includes(row))
2479
+ .map(row => row.rowId)
2480
+ };
2481
+ }
2488
2482
  enterPressedHandler() {
2489
- var _a;
2490
2483
  if (this.rowFocused) {
2491
- const cellFocused = ((_a = this.cellSelected) === null || _a === void 0 ? void 0 : _a.row) === this.rowFocused ? this.cellSelected : null;
2492
2484
  this.rowEnterPressed.emit({
2493
2485
  rowId: this.rowFocused.rowId,
2494
- cellId: cellFocused ? cellFocused.cellId : null,
2495
- columnId: cellFocused ? cellFocused.column.columnId : null
2486
+ cellId: this.cellFocused ? this.cellFocused.cellId : null,
2487
+ columnId: this.cellFocused ? this.cellFocused.column.columnId : null
2496
2488
  });
2497
2489
  }
2498
2490
  }
2499
- toggleRowsMarked() {
2491
+ spacePressedEvent(ctrl, shift) {
2492
+ if (this.keyboardNavigationMode === "focus") {
2493
+ this.selectByKeyboardEvent(ctrl, shift);
2494
+ }
2495
+ else if (this.keyboardNavigationMode === "select") {
2496
+ this.markByKeyboardEvent();
2497
+ }
2498
+ this.emitRowClicked(this.rowFocused, this.cellFocused);
2499
+ }
2500
+ markByKeyboardEvent() {
2500
2501
  const columnSelector = this.manager.columns.getColumnSelector();
2501
2502
  if ((columnSelector === null || columnSelector === void 0 ? void 0 : columnSelector.richRowSelectorMode) === "mark") {
2502
- const value = !this.rowFocused.marked;
2503
- if (value) {
2504
- this.rowsMarked = Array.from(new Set(this.rowsMarked.concat(this.rowsSelected)));
2505
- }
2506
- else {
2507
- this.rowsMarked = this.rowsMarked.filter(row => !this.rowsSelected.includes(row));
2508
- }
2503
+ this.rowsMarked = this.manager.selection.markRows(this.rowFocused, this.rowsMarked, this.rowsSelected);
2509
2504
  }
2510
2505
  }
2506
+ selectByKeyboardEvent(append, range) {
2507
+ var _a;
2508
+ const { rowFocused, rowsSelected, cellFocused, cellSelected } = this.manager.selection.select({
2509
+ rowFocused: this.rowFocused,
2510
+ rowsSelected: this.rowsSelected,
2511
+ cellFocused: this.cellFocused,
2512
+ cellSelected: this.cellSelected
2513
+ }, this.rowFocused, this.cellFocused, true, append, range, false);
2514
+ this.rowFocused = rowFocused;
2515
+ this.rowsSelected = rowsSelected;
2516
+ this.cellFocused = cellFocused;
2517
+ this.cellSelected = cellSelected;
2518
+ (_a = (cellFocused || rowFocused)) === null || _a === void 0 ? void 0 : _a.ensureVisible();
2519
+ }
2511
2520
  selectByPointerEvent(row, cell, append, range, context) {
2512
- const { rowFocused, rowsSelected, cellSelected } = this.manager.selection.select({
2521
+ var _a;
2522
+ const { rowFocused, rowsSelected, cellFocused, cellSelected } = this.manager.selection.select({
2513
2523
  rowFocused: this.rowFocused,
2514
2524
  rowsSelected: this.rowsSelected,
2525
+ cellFocused: this.cellFocused,
2515
2526
  cellSelected: this.cellSelected
2516
- }, row, cell, append, range, context);
2527
+ }, row, cell, true, append, range, context);
2517
2528
  this.rowFocused = rowFocused;
2518
2529
  this.rowsSelected = rowsSelected;
2530
+ this.cellFocused = cellFocused;
2519
2531
  this.cellSelected = cellSelected;
2520
- if (cellSelected) {
2521
- cellSelected.ensureVisible();
2522
- }
2523
- else {
2524
- rowFocused === null || rowFocused === void 0 ? void 0 : rowFocused.ensureVisible();
2525
- }
2532
+ (_a = (cellFocused || rowFocused)) === null || _a === void 0 ? void 0 : _a.ensureVisible();
2526
2533
  }
2527
- selectByKeyboardEvent(fn, append) {
2528
- const { rowFocused, rowsSelected, cellSelected } = fn({
2534
+ moveByKeyboardEvent(fn, range, append) {
2535
+ var _a;
2536
+ const { rowFocused, rowsSelected, cellFocused, cellSelected } = fn.call(this.manager.selection, {
2529
2537
  rowFocused: this.rowFocused,
2530
2538
  rowsSelected: this.rowsSelected,
2539
+ cellFocused: this.cellFocused,
2531
2540
  cellSelected: this.cellSelected
2532
- }, append);
2541
+ }, this.rowSelectionMode !== "none" &&
2542
+ this.keyboardNavigationMode === "select", this.rowSelectionMode === "multiple" ? range : false, this.rowSelectionMode === "multiple" ? range && append : false);
2533
2543
  this.rowFocused = rowFocused;
2534
2544
  this.rowsSelected = rowsSelected;
2545
+ this.cellFocused = cellFocused;
2535
2546
  this.cellSelected = cellSelected;
2536
- if (cellSelected) {
2537
- cellSelected.ensureVisible();
2538
- }
2539
- else {
2540
- rowFocused === null || rowFocused === void 0 ? void 0 : rowFocused.ensureVisible();
2541
- }
2547
+ (_a = (cellFocused || rowFocused)) === null || _a === void 0 ? void 0 : _a.ensureVisible();
2542
2548
  }
2543
2549
  selectAll(value = true) {
2544
- const { rowFocused, rowsSelected, cellSelected } = this.manager.selection.selectAll({
2550
+ var _a;
2551
+ const { rowFocused, rowsSelected, cellFocused, cellSelected } = this.manager.selection.selectAll({
2545
2552
  rowFocused: this.rowFocused,
2546
2553
  rowsSelected: this.rowsSelected,
2554
+ cellFocused: this.cellFocused,
2547
2555
  cellSelected: this.cellSelected
2548
2556
  }, value);
2549
2557
  this.rowFocused = rowFocused;
2550
2558
  this.rowsSelected = rowsSelected;
2559
+ this.cellFocused = cellFocused;
2551
2560
  this.cellSelected = cellSelected;
2552
- if (cellSelected) {
2553
- cellSelected.ensureVisible();
2554
- }
2555
- else {
2556
- rowFocused === null || rowFocused === void 0 ? void 0 : rowFocused.ensureVisible();
2557
- }
2561
+ (_a = (cellFocused || rowFocused)) === null || _a === void 0 ? void 0 : _a.ensureVisible();
2558
2562
  }
2559
2563
  setRowCollapsed(row, collapsed) {
2560
2564
  if (row && collapsed) {
@@ -2567,15 +2571,25 @@ const ChGrid = class {
2567
2571
  }
2568
2572
  }
2569
2573
  setCellSelected(cell, selected = true) {
2570
- const { rowFocused, rowsSelected, cellSelected } = this.manager.selection.selectSet({
2574
+ var _a;
2575
+ const { rowFocused, rowsSelected, cellFocused, cellSelected } = this.manager.selection.selectSet({
2571
2576
  rowFocused: this.rowFocused,
2572
2577
  rowsSelected: this.rowsSelected,
2578
+ cellFocused: this.cellFocused,
2573
2579
  cellSelected: this.cellSelected
2574
2580
  }, cell.row, cell, selected);
2575
2581
  this.rowFocused = rowFocused;
2576
2582
  this.rowsSelected = rowsSelected;
2583
+ this.cellFocused = cellFocused;
2577
2584
  this.cellSelected = cellSelected;
2578
- rowFocused === null || rowFocused === void 0 ? void 0 : rowFocused.ensureVisible();
2585
+ (_a = (cellFocused || rowFocused)) === null || _a === void 0 ? void 0 : _a.ensureVisible();
2586
+ }
2587
+ emitRowClicked(row, cell) {
2588
+ this.rowClicked.emit({
2589
+ rowId: row.rowId,
2590
+ cellId: cell === null || cell === void 0 ? void 0 : cell.cellId,
2591
+ columnId: cell === null || cell === void 0 ? void 0 : cell.column.columnId
2592
+ });
2579
2593
  }
2580
2594
  stopSelecting() {
2581
2595
  this.manager.selection.selecting = false;
@@ -2586,10 +2600,11 @@ const ChGrid = class {
2586
2600
  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 " }))));
2587
2601
  }
2588
2602
  render() {
2589
- 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" }))));
2603
+ 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" }))));
2590
2604
  }
2591
2605
  static get watchers() { return {
2592
2606
  "rowFocused": ["rowFocusedHandler"],
2607
+ "cellFocused": ["cellFocusedHandler"],
2593
2608
  "rowHighlighted": ["rowHighlightedHandler"],
2594
2609
  "rowsMarked": ["rowsMarkedHandler"],
2595
2610
  "rowsSelected": ["rowsSelectedHandler"],
@@ -2616,6 +2631,9 @@ const ChGridColumn = class {
2616
2631
  });
2617
2632
  eventInfo.stopPropagation();
2618
2633
  };
2634
+ this.selectorTouchEndHandler = (eventInfo) => {
2635
+ eventInfo.stopPropagation();
2636
+ };
2619
2637
  registerInstance(this, hostRef);
2620
2638
  this.columnHiddenChanged = createEvent(this, "columnHiddenChanged", 7);
2621
2639
  this.columnSizeChanging = createEvent(this, "columnSizeChanging", 7);
@@ -2755,7 +2773,7 @@ const ChGridColumn = class {
2755
2773
  renderSelector() {
2756
2774
  return (h("li", { class: "selector", part: "bar-selector", hidden: !(this.columnType === "rich" && this.richRowSelector) }, h("label", { part: "selector-label" }, h("input", { type: "checkbox", part: ["selector", this.richRowSelectorState]
2757
2775
  .filter(part => part !== "")
2758
- .join(" "), onClick: this.selectorClickHandler, checked: this.richRowSelectorState === "checked", indeterminate: this.richRowSelectorState === "indeterminate" }))));
2776
+ .join(" "), onClick: this.selectorClickHandler, onTouchEnd: this.selectorTouchEndHandler, checked: this.richRowSelectorState === "checked", indeterminate: this.richRowSelectorState === "indeterminate" }))));
2759
2777
  }
2760
2778
  renderName() {
2761
2779
  return (h("li", { class: "name", part: "bar-name", title: this.columnTooltip ||