@aquera/nile-elements 1.2.1 → 1.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. package/README.md +4 -0
  2. package/demo/variables.css +4 -2
  3. package/dist/index.cjs.js +1 -1
  4. package/dist/index.esm.js +1 -1
  5. package/dist/index.js +167 -88
  6. package/dist/nile-grid/index.cjs.js +1 -1
  7. package/dist/nile-grid/index.esm.js +1 -1
  8. package/dist/nile-grid/nile-grid-body/index.cjs.js +2 -0
  9. package/dist/{nile-grid-body → nile-grid/nile-grid-body}/index.esm.js +1 -1
  10. package/dist/{nile-grid-cell-item/nile-grid-cell-item.cjs.js → nile-grid/nile-grid-body/nile-grid-body.cjs.js} +2 -2
  11. package/dist/nile-grid/nile-grid-body/nile-grid-body.cjs.js.map +1 -0
  12. package/dist/{nile-grid-body → nile-grid/nile-grid-body}/nile-grid-body.css.cjs.js +1 -1
  13. package/dist/nile-grid/nile-grid-body/nile-grid-body.css.cjs.js.map +1 -0
  14. package/dist/{nile-grid-body → nile-grid/nile-grid-body}/nile-grid-body.css.esm.js +0 -4
  15. package/dist/nile-grid/nile-grid-body/nile-grid-body.esm.js +5 -0
  16. package/dist/nile-grid/nile-grid-cell-item/index.cjs.js +2 -0
  17. package/dist/{nile-grid-cell-item → nile-grid/nile-grid-cell-item}/index.esm.js +1 -1
  18. package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.cjs.js +2 -0
  19. package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.cjs.js.map +1 -0
  20. package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.css.cjs.js +2 -0
  21. package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.css.cjs.js.map +1 -0
  22. package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.css.esm.js +67 -0
  23. package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.esm.js +12 -0
  24. package/dist/nile-grid/nile-grid-cell-item/nile-grid-cell-item.utils.cjs.js.map +1 -0
  25. package/dist/nile-grid/nile-grid-head/index.cjs.js +2 -0
  26. package/dist/{nile-grid-head → nile-grid/nile-grid-head}/index.esm.js +1 -1
  27. package/dist/nile-grid/nile-grid-head/nile-grid-head.cjs.js +2 -0
  28. package/dist/nile-grid/nile-grid-head/nile-grid-head.cjs.js.map +1 -0
  29. package/dist/nile-grid/nile-grid-head/nile-grid-head.css.cjs.js.map +1 -0
  30. package/dist/nile-grid/nile-grid-head/nile-grid-head.esm.js +5 -0
  31. package/dist/nile-grid/nile-grid-head-item/index.cjs.js +2 -0
  32. package/dist/{nile-grid-head-item → nile-grid/nile-grid-head-item}/index.esm.js +1 -1
  33. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.cjs.js +2 -0
  34. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.cjs.js.map +1 -0
  35. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.css.cjs.js +2 -0
  36. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.css.cjs.js.map +1 -0
  37. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.css.esm.js +59 -0
  38. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.esm.js +13 -0
  39. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.cjs.js +2 -0
  40. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.cjs.js.map +1 -0
  41. package/dist/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.esm.js +1 -0
  42. package/dist/nile-grid/nile-grid-row/index.cjs.js +2 -0
  43. package/dist/{nile-grid-row → nile-grid/nile-grid-row}/index.esm.js +1 -1
  44. package/dist/nile-grid/nile-grid-row/nile-grid-row.cjs.js +2 -0
  45. package/dist/nile-grid/nile-grid-row/nile-grid-row.cjs.js.map +1 -0
  46. package/dist/nile-grid/nile-grid-row/nile-grid-row.css.cjs.js +2 -0
  47. package/dist/nile-grid/nile-grid-row/nile-grid-row.css.cjs.js.map +1 -0
  48. package/dist/nile-grid/nile-grid-row/nile-grid-row.css.esm.js +36 -0
  49. package/dist/nile-grid/nile-grid-row/nile-grid-row.esm.js +8 -0
  50. package/dist/nile-grid/nile-grid.cjs.js +1 -1
  51. package/dist/nile-grid/nile-grid.cjs.js.map +1 -1
  52. package/dist/nile-grid/nile-grid.css.cjs.js +1 -1
  53. package/dist/nile-grid/nile-grid.css.cjs.js.map +1 -1
  54. package/dist/nile-grid/nile-grid.css.esm.js +9 -6
  55. package/dist/nile-grid/nile-grid.esm.js +6 -6
  56. package/dist/nile-grid/nile-grid.layout.cjs.js +2 -0
  57. package/dist/nile-grid/nile-grid.layout.cjs.js.map +1 -0
  58. package/dist/nile-grid/nile-grid.layout.esm.js +1 -0
  59. package/dist/nile-grid/nile-grid.resize.cjs.js +2 -0
  60. package/dist/nile-grid/nile-grid.resize.cjs.js.map +1 -0
  61. package/dist/nile-grid/nile-grid.resize.esm.js +1 -0
  62. package/dist/nile-grid/nile-grid.types.cjs.js +2 -0
  63. package/dist/nile-grid/nile-grid.types.cjs.js.map +1 -0
  64. package/dist/nile-grid/nile-grid.types.esm.js +1 -0
  65. package/dist/nile-grid/nile-grid.utils.cjs.js +1 -1
  66. package/dist/nile-grid/nile-grid.utils.cjs.js.map +1 -1
  67. package/dist/nile-grid/nile-grid.utils.esm.js +1 -1
  68. package/dist/nile-grid/nile-grid.width.cjs.js +2 -0
  69. package/dist/nile-grid/nile-grid.width.cjs.js.map +1 -0
  70. package/dist/nile-grid/nile-grid.width.esm.js +1 -0
  71. package/dist/src/index.d.ts +5 -5
  72. package/dist/src/index.js +5 -5
  73. package/dist/src/index.js.map +1 -1
  74. package/dist/src/nile-grid/nile-grid-body/index.js.map +1 -0
  75. package/dist/src/{nile-grid-body → nile-grid/nile-grid-body}/nile-grid-body.css.js +0 -4
  76. package/dist/src/nile-grid/nile-grid-body/nile-grid-body.css.js.map +1 -0
  77. package/dist/src/{nile-grid-body → nile-grid/nile-grid-body}/nile-grid-body.d.ts +1 -1
  78. package/dist/src/{nile-grid-body → nile-grid/nile-grid-body}/nile-grid-body.js +2 -2
  79. package/dist/src/nile-grid/nile-grid-body/nile-grid-body.js.map +1 -0
  80. package/dist/src/nile-grid/nile-grid-cell-item/index.js.map +1 -0
  81. package/dist/src/nile-grid/nile-grid-cell-item/nile-grid-cell-item.css.js +79 -0
  82. package/dist/src/nile-grid/nile-grid-cell-item/nile-grid-cell-item.css.js.map +1 -0
  83. package/dist/src/{nile-grid-cell-item → nile-grid/nile-grid-cell-item}/nile-grid-cell-item.d.ts +1 -4
  84. package/dist/src/{nile-grid-cell-item → nile-grid/nile-grid-cell-item}/nile-grid-cell-item.js +2 -12
  85. package/dist/src/nile-grid/nile-grid-cell-item/nile-grid-cell-item.js.map +1 -0
  86. package/dist/src/nile-grid/nile-grid-cell-item/nile-grid-cell-item.utils.js.map +1 -0
  87. package/dist/src/nile-grid/nile-grid-head/index.js.map +1 -0
  88. package/dist/src/nile-grid/nile-grid-head/nile-grid-head.css.js.map +1 -0
  89. package/dist/src/{nile-grid-head → nile-grid/nile-grid-head}/nile-grid-head.d.ts +2 -1
  90. package/dist/src/{nile-grid-head → nile-grid/nile-grid-head}/nile-grid-head.js +11 -3
  91. package/dist/src/nile-grid/nile-grid-head/nile-grid-head.js.map +1 -0
  92. package/dist/src/nile-grid/nile-grid-head-item/index.js.map +1 -0
  93. package/dist/src/{nile-grid-head-item → nile-grid/nile-grid-head-item}/nile-grid-head-item.css.js +30 -5
  94. package/dist/src/nile-grid/nile-grid-head-item/nile-grid-head-item.css.js.map +1 -0
  95. package/dist/src/{nile-grid-head-item → nile-grid/nile-grid-head-item}/nile-grid-head-item.d.ts +3 -4
  96. package/dist/src/{nile-grid-head-item → nile-grid/nile-grid-head-item}/nile-grid-head-item.js +12 -15
  97. package/dist/src/nile-grid/nile-grid-head-item/nile-grid-head-item.js.map +1 -0
  98. package/dist/src/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.d.ts +34 -0
  99. package/dist/src/{nile-grid-head-item → nile-grid/nile-grid-head-item}/nile-grid-head-item.utils.js +27 -4
  100. package/dist/src/nile-grid/nile-grid-head-item/nile-grid-head-item.utils.js.map +1 -0
  101. package/dist/src/nile-grid/nile-grid-row/index.js.map +1 -0
  102. package/dist/src/nile-grid/nile-grid-row/nile-grid-row.css.js +48 -0
  103. package/dist/src/nile-grid/nile-grid-row/nile-grid-row.css.js.map +1 -0
  104. package/dist/src/{nile-grid-row → nile-grid/nile-grid-row}/nile-grid-row.d.ts +5 -2
  105. package/dist/src/{nile-grid-row → nile-grid/nile-grid-row}/nile-grid-row.js +23 -6
  106. package/dist/src/nile-grid/nile-grid-row/nile-grid-row.js.map +1 -0
  107. package/dist/src/nile-grid/nile-grid.css.js +7 -4
  108. package/dist/src/nile-grid/nile-grid.css.js.map +1 -1
  109. package/dist/src/nile-grid/nile-grid.d.ts +19 -4
  110. package/dist/src/nile-grid/nile-grid.js +76 -23
  111. package/dist/src/nile-grid/nile-grid.js.map +1 -1
  112. package/dist/src/nile-grid/nile-grid.layout.d.ts +28 -0
  113. package/dist/src/nile-grid/nile-grid.layout.js +346 -0
  114. package/dist/src/nile-grid/nile-grid.layout.js.map +1 -0
  115. package/dist/src/nile-grid/nile-grid.resize.d.ts +58 -0
  116. package/dist/src/nile-grid/nile-grid.resize.js +100 -0
  117. package/dist/src/nile-grid/nile-grid.resize.js.map +1 -0
  118. package/dist/src/nile-grid/nile-grid.types.d.ts +3 -0
  119. package/dist/src/nile-grid/nile-grid.types.js +2 -0
  120. package/dist/src/nile-grid/nile-grid.types.js.map +1 -0
  121. package/dist/src/nile-grid/nile-grid.utils.d.ts +22 -4
  122. package/dist/src/nile-grid/nile-grid.utils.js +24 -141
  123. package/dist/src/nile-grid/nile-grid.utils.js.map +1 -1
  124. package/dist/src/nile-grid/nile-grid.width.d.ts +25 -0
  125. package/dist/src/nile-grid/nile-grid.width.js +301 -0
  126. package/dist/src/nile-grid/nile-grid.width.js.map +1 -0
  127. package/dist/src/version.js +2 -2
  128. package/dist/src/version.js.map +1 -1
  129. package/dist/tsconfig.tsbuildinfo +1 -1
  130. package/package.json +1 -1
  131. package/src/index.ts +5 -5
  132. package/src/{nile-grid-body → nile-grid/nile-grid-body}/nile-grid-body.css.ts +0 -4
  133. package/src/{nile-grid-body → nile-grid/nile-grid-body}/nile-grid-body.ts +3 -3
  134. package/src/nile-grid/nile-grid-cell-item/nile-grid-cell-item.css.ts +81 -0
  135. package/src/{nile-grid-cell-item → nile-grid/nile-grid-cell-item}/nile-grid-cell-item.ts +5 -15
  136. package/src/{nile-grid-head → nile-grid/nile-grid-head}/nile-grid-head.ts +6 -4
  137. package/src/{nile-grid-head-item → nile-grid/nile-grid-head-item}/nile-grid-head-item.css.ts +30 -5
  138. package/src/{nile-grid-head-item → nile-grid/nile-grid-head-item}/nile-grid-head-item.ts +10 -25
  139. package/src/{nile-grid-head-item → nile-grid/nile-grid-head-item}/nile-grid-head-item.utils.ts +30 -4
  140. package/src/nile-grid/nile-grid-row/nile-grid-row.css.ts +50 -0
  141. package/src/{nile-grid-row → nile-grid/nile-grid-row}/nile-grid-row.ts +13 -8
  142. package/src/nile-grid/nile-grid.css.ts +7 -4
  143. package/src/nile-grid/nile-grid.layout.ts +514 -0
  144. package/src/nile-grid/nile-grid.resize.ts +143 -0
  145. package/src/nile-grid/nile-grid.ts +79 -53
  146. package/src/nile-grid/nile-grid.types.ts +1 -0
  147. package/src/nile-grid/nile-grid.utils.ts +27 -203
  148. package/src/nile-grid/nile-grid.width.ts +397 -0
  149. package/vscode-html-custom-data.json +48 -65
  150. package/dist/nile-grid-body/index.cjs.js +0 -2
  151. package/dist/nile-grid-body/nile-grid-body.cjs.js +0 -2
  152. package/dist/nile-grid-body/nile-grid-body.cjs.js.map +0 -1
  153. package/dist/nile-grid-body/nile-grid-body.css.cjs.js.map +0 -1
  154. package/dist/nile-grid-body/nile-grid-body.esm.js +0 -5
  155. package/dist/nile-grid-cell-item/index.cjs.js +0 -2
  156. package/dist/nile-grid-cell-item/nile-grid-cell-item.cjs.js.map +0 -1
  157. package/dist/nile-grid-cell-item/nile-grid-cell-item.css.cjs.js +0 -2
  158. package/dist/nile-grid-cell-item/nile-grid-cell-item.css.cjs.js.map +0 -1
  159. package/dist/nile-grid-cell-item/nile-grid-cell-item.css.esm.js +0 -35
  160. package/dist/nile-grid-cell-item/nile-grid-cell-item.esm.js +0 -12
  161. package/dist/nile-grid-cell-item/nile-grid-cell-item.utils.cjs.js.map +0 -1
  162. package/dist/nile-grid-head/index.cjs.js +0 -2
  163. package/dist/nile-grid-head/nile-grid-head.cjs.js +0 -2
  164. package/dist/nile-grid-head/nile-grid-head.cjs.js.map +0 -1
  165. package/dist/nile-grid-head/nile-grid-head.css.cjs.js.map +0 -1
  166. package/dist/nile-grid-head/nile-grid-head.esm.js +0 -5
  167. package/dist/nile-grid-head-item/index.cjs.js +0 -2
  168. package/dist/nile-grid-head-item/nile-grid-head-item.cjs.js +0 -2
  169. package/dist/nile-grid-head-item/nile-grid-head-item.cjs.js.map +0 -1
  170. package/dist/nile-grid-head-item/nile-grid-head-item.css.cjs.js +0 -2
  171. package/dist/nile-grid-head-item/nile-grid-head-item.css.cjs.js.map +0 -1
  172. package/dist/nile-grid-head-item/nile-grid-head-item.css.esm.js +0 -34
  173. package/dist/nile-grid-head-item/nile-grid-head-item.esm.js +0 -12
  174. package/dist/nile-grid-head-item/nile-grid-head-item.utils.cjs.js +0 -2
  175. package/dist/nile-grid-head-item/nile-grid-head-item.utils.cjs.js.map +0 -1
  176. package/dist/nile-grid-head-item/nile-grid-head-item.utils.esm.js +0 -1
  177. package/dist/nile-grid-row/index.cjs.js +0 -2
  178. package/dist/nile-grid-row/nile-grid-row.cjs.js +0 -2
  179. package/dist/nile-grid-row/nile-grid-row.cjs.js.map +0 -1
  180. package/dist/nile-grid-row/nile-grid-row.css.cjs.js +0 -2
  181. package/dist/nile-grid-row/nile-grid-row.css.cjs.js.map +0 -1
  182. package/dist/nile-grid-row/nile-grid-row.css.esm.js +0 -15
  183. package/dist/nile-grid-row/nile-grid-row.esm.js +0 -7
  184. package/dist/src/nile-grid-body/index.js.map +0 -1
  185. package/dist/src/nile-grid-body/nile-grid-body.css.js.map +0 -1
  186. package/dist/src/nile-grid-body/nile-grid-body.js.map +0 -1
  187. package/dist/src/nile-grid-cell-item/index.js.map +0 -1
  188. package/dist/src/nile-grid-cell-item/nile-grid-cell-item.css.js +0 -47
  189. package/dist/src/nile-grid-cell-item/nile-grid-cell-item.css.js.map +0 -1
  190. package/dist/src/nile-grid-cell-item/nile-grid-cell-item.js.map +0 -1
  191. package/dist/src/nile-grid-cell-item/nile-grid-cell-item.utils.js.map +0 -1
  192. package/dist/src/nile-grid-head/index.js.map +0 -1
  193. package/dist/src/nile-grid-head/nile-grid-head.css.js.map +0 -1
  194. package/dist/src/nile-grid-head/nile-grid-head.js.map +0 -1
  195. package/dist/src/nile-grid-head-item/index.js.map +0 -1
  196. package/dist/src/nile-grid-head-item/nile-grid-head-item.css.js.map +0 -1
  197. package/dist/src/nile-grid-head-item/nile-grid-head-item.js.map +0 -1
  198. package/dist/src/nile-grid-head-item/nile-grid-head-item.utils.d.ts +0 -10
  199. package/dist/src/nile-grid-head-item/nile-grid-head-item.utils.js.map +0 -1
  200. package/dist/src/nile-grid-row/index.js.map +0 -1
  201. package/dist/src/nile-grid-row/nile-grid-row.css.js +0 -27
  202. package/dist/src/nile-grid-row/nile-grid-row.css.js.map +0 -1
  203. package/dist/src/nile-grid-row/nile-grid-row.js.map +0 -1
  204. package/src/nile-grid-cell-item/nile-grid-cell-item.css.ts +0 -49
  205. package/src/nile-grid-row/nile-grid-row.css.ts +0 -29
  206. /package/dist/{nile-grid-body → nile-grid/nile-grid-body}/index.cjs.js.map +0 -0
  207. /package/dist/{nile-grid-cell-item → nile-grid/nile-grid-cell-item}/index.cjs.js.map +0 -0
  208. /package/dist/{nile-grid-cell-item → nile-grid/nile-grid-cell-item}/nile-grid-cell-item.utils.cjs.js +0 -0
  209. /package/dist/{nile-grid-cell-item → nile-grid/nile-grid-cell-item}/nile-grid-cell-item.utils.esm.js +0 -0
  210. /package/dist/{nile-grid-head → nile-grid/nile-grid-head}/index.cjs.js.map +0 -0
  211. /package/dist/{nile-grid-head → nile-grid/nile-grid-head}/nile-grid-head.css.cjs.js +0 -0
  212. /package/dist/{nile-grid-head → nile-grid/nile-grid-head}/nile-grid-head.css.esm.js +0 -0
  213. /package/dist/{nile-grid-head-item → nile-grid/nile-grid-head-item}/index.cjs.js.map +0 -0
  214. /package/dist/{nile-grid-row → nile-grid/nile-grid-row}/index.cjs.js.map +0 -0
  215. /package/dist/src/{nile-grid-body → nile-grid/nile-grid-body}/index.d.ts +0 -0
  216. /package/dist/src/{nile-grid-body → nile-grid/nile-grid-body}/index.js +0 -0
  217. /package/dist/src/{nile-grid-body → nile-grid/nile-grid-body}/nile-grid-body.css.d.ts +0 -0
  218. /package/dist/src/{nile-grid-cell-item → nile-grid/nile-grid-cell-item}/index.d.ts +0 -0
  219. /package/dist/src/{nile-grid-cell-item → nile-grid/nile-grid-cell-item}/index.js +0 -0
  220. /package/dist/src/{nile-grid-cell-item → nile-grid/nile-grid-cell-item}/nile-grid-cell-item.css.d.ts +0 -0
  221. /package/dist/src/{nile-grid-cell-item → nile-grid/nile-grid-cell-item}/nile-grid-cell-item.utils.d.ts +0 -0
  222. /package/dist/src/{nile-grid-cell-item → nile-grid/nile-grid-cell-item}/nile-grid-cell-item.utils.js +0 -0
  223. /package/dist/src/{nile-grid-head → nile-grid/nile-grid-head}/index.d.ts +0 -0
  224. /package/dist/src/{nile-grid-head → nile-grid/nile-grid-head}/index.js +0 -0
  225. /package/dist/src/{nile-grid-head → nile-grid/nile-grid-head}/nile-grid-head.css.d.ts +0 -0
  226. /package/dist/src/{nile-grid-head → nile-grid/nile-grid-head}/nile-grid-head.css.js +0 -0
  227. /package/dist/src/{nile-grid-head-item → nile-grid/nile-grid-head-item}/index.d.ts +0 -0
  228. /package/dist/src/{nile-grid-head-item → nile-grid/nile-grid-head-item}/index.js +0 -0
  229. /package/dist/src/{nile-grid-head-item → nile-grid/nile-grid-head-item}/nile-grid-head-item.css.d.ts +0 -0
  230. /package/dist/src/{nile-grid-row → nile-grid/nile-grid-row}/index.d.ts +0 -0
  231. /package/dist/src/{nile-grid-row → nile-grid/nile-grid-row}/index.js +0 -0
  232. /package/dist/src/{nile-grid-row → nile-grid/nile-grid-row}/nile-grid-row.css.d.ts +0 -0
  233. /package/src/{nile-grid-body → nile-grid/nile-grid-body}/index.ts +0 -0
  234. /package/src/{nile-grid-cell-item → nile-grid/nile-grid-cell-item}/index.ts +0 -0
  235. /package/src/{nile-grid-cell-item → nile-grid/nile-grid-cell-item}/nile-grid-cell-item.utils.ts +0 -0
  236. /package/src/{nile-grid-head → nile-grid/nile-grid-head}/index.ts +0 -0
  237. /package/src/{nile-grid-head → nile-grid/nile-grid-head}/nile-grid-head.css.ts +0 -0
  238. /package/src/{nile-grid-head-item → nile-grid/nile-grid-head-item}/index.ts +0 -0
  239. /package/src/{nile-grid-row → nile-grid/nile-grid-row}/index.ts +0 -0
@@ -0,0 +1,346 @@
1
+ import { getHead, getBody } from './nile-grid.utils';
2
+ import { getScrollbarComp } from './nile-grid.resize';
3
+ import { computeColumnWidths } from './nile-grid.width';
4
+ /**
5
+ * @param nileGrid Parent NileGrid instance
6
+ * @param slotEl <slot> element hosting head/body
7
+ * @param ensureWidths Function to ensure columnWidths length matches colCount
8
+ * @param rebuildTemplate Function(colCount, widths) -> grid-template string
9
+ * @param stickyLeftIndexes Mutable list of left-sticky column indexes
10
+ * @param stickyRightIndexes Mutable list of right-sticky column indexes
11
+ * @returns void
12
+ */
13
+ export const layout = (nileGrid, slotEl, ensureWidths, rebuildTemplate, stickyLeftIndexes, stickyRightIndexes) => {
14
+ const head = getHead(slotEl);
15
+ const body = getBody(slotEl);
16
+ if (!body)
17
+ return;
18
+ const headRows = head
19
+ ? Array.from(head.querySelectorAll('nile-grid-row'))
20
+ : [];
21
+ const bodyRows = Array.from(body.querySelectorAll('nile-grid-row'));
22
+ let colCount = 0;
23
+ colCount = computeHeadLayout(nileGrid, headRows, [], colCount, stickyLeftIndexes, stickyRightIndexes, nileGrid.columnWidths);
24
+ if (colCount) {
25
+ computeBodyLayout(nileGrid, bodyRows, [], colCount, stickyLeftIndexes, stickyRightIndexes, nileGrid.columnWidths);
26
+ }
27
+ else {
28
+ colCount = computeBodyLayout(nileGrid, bodyRows, [], colCount, stickyLeftIndexes, stickyRightIndexes, nileGrid.columnWidths);
29
+ }
30
+ setTimeout(() => {
31
+ computeColumnWidths(nileGrid, colCount, nileGrid.columnWidths, slotEl);
32
+ });
33
+ ensureWidths(colCount);
34
+ nileGrid.colTemplate = rebuildTemplate(colCount, nileGrid.columnWidths);
35
+ };
36
+ /**
37
+ * @param nileGrid The parent NileGrid instance
38
+ * @param rows Array of grid row elements
39
+ * @param carry Array tracking rowspan, colspan continuation
40
+ * @param colCount Total column count
41
+ * @param stickyLeftIndexes List of sticky-left column indexes
42
+ * @param stickyRightIndexes List of sticky-right column indexes
43
+ * @param columnWidths Computed column widths
44
+ * @param opts Options controlling layout behavior
45
+ * @returns Final computed column count
46
+ */
47
+ function layoutRows(nileGrid, rows, carry, colCount, stickyLeftIndexes, stickyRightIndexes, columnWidths, opts) {
48
+ rows.forEach((row, rIdx) => {
49
+ if (nileGrid.hoverable)
50
+ row.setAttribute('hover', 'true');
51
+ colCount = layoutSingleRow(nileGrid, row, rIdx, carry, colCount, stickyLeftIndexes, stickyRightIndexes, columnWidths, opts);
52
+ });
53
+ return colCount;
54
+ }
55
+ /**
56
+ * @param nileGrid The grid element being processed
57
+ * @param row Single row element to layout
58
+ * @param rIdx Row index in the grid
59
+ * @param carry Rowspan tracking array
60
+ * @param colCount Current column count
61
+ * @param stickyLeftIndexes Sticky-left indexes
62
+ * @param stickyRightIndexes Sticky-right indexes
63
+ * @param columnWidths Column widths array
64
+ * @param opts Layout options
65
+ * @returns Updated column count
66
+ */
67
+ function layoutSingleRow(nileGrid, row, rIdx, carry, colCount, stickyLeftIndexes, stickyRightIndexes, columnWidths, opts) {
68
+ let c = 1;
69
+ const rStart = rIdx + 1;
70
+ const items = [...row.querySelectorAll(opts.itemSelector)];
71
+ for (const el of items) {
72
+ while ((carry[c - 1] || 0) > 0)
73
+ c++;
74
+ ({ c, colCount } = layoutCell(nileGrid, el, c, rStart, carry, colCount, stickyLeftIndexes, stickyRightIndexes, columnWidths, opts));
75
+ }
76
+ decrementCarry(carry);
77
+ return colCount;
78
+ }
79
+ /**
80
+ * @param nileGrid The parent grid
81
+ * @param el Cell element being laid out
82
+ * @param c Current column index
83
+ * @param rStart Row start index
84
+ * @param carry Rowspan carry array
85
+ * @param colCount Current max column count
86
+ * @param stickyLeftIndexes Left sticky indexes
87
+ * @param stickyRightIndexes Right sticky indexes
88
+ * @param columnWidths Column widths
89
+ * @param opts Sticky and layout options
90
+ * @returns Updated column index and column count
91
+ */
92
+ function layoutCell(nileGrid, el, c, rStart, carry, colCount, stickyLeftIndexes, stickyRightIndexes, columnWidths, opts) {
93
+ const colspan = Math.max(1, +el.getAttribute('colspan') || 1);
94
+ const rowspan = Math.max(1, +el.getAttribute('rowspan') || 1);
95
+ handleRowspan(nileGrid, el, rowspan);
96
+ const cStart = c;
97
+ const cEnd = c + colspan;
98
+ setGridPosition(el, cStart, cEnd, rStart, rowspan);
99
+ handleSticky(el, cStart, opts, stickyLeftIndexes, stickyRightIndexes, columnWidths);
100
+ for (let k = 0; k < colspan; k++) {
101
+ carry[c - 1 + k] = Math.max(carry[c - 1 + k] || 0, rowspan);
102
+ }
103
+ return {
104
+ c: cEnd,
105
+ colCount: Math.max(colCount, cEnd - 1),
106
+ };
107
+ }
108
+ /**
109
+ * @param nileGrid The grid container
110
+ * @param el Element that spans multiple rows
111
+ * @param rowspan Number of rows to span
112
+ */
113
+ function handleRowspan(nileGrid, el, rowspan) {
114
+ if (rowspan <= 1)
115
+ return;
116
+ nileGrid.cellHeight || (nileGrid.cellHeight = el.getBoundingClientRect().height);
117
+ el.style.position = 'absolute';
118
+ el.style.height = `${nileGrid.cellHeight * rowspan}px`;
119
+ el.style.zIndex = '2';
120
+ }
121
+ /**
122
+ * @param el Grid item element
123
+ * @param cStart Starting column index
124
+ * @param cEnd Ending column index
125
+ * @param rStart Starting row index
126
+ * @param rowspan Row span value
127
+ */
128
+ function setGridPosition(el, cStart, cEnd, rStart, rowspan) {
129
+ const rEnd = rStart + rowspan;
130
+ el.style.gridColumn = `${cStart} / ${cEnd}`;
131
+ el.style.gridRow = `${rStart} / ${rEnd}`;
132
+ el.dataset.cStart = String(cStart);
133
+ }
134
+ /**
135
+ * @param el Grid item element
136
+ * @param cStart Column start index
137
+ * @param opts Sticky configuration options
138
+ * @param stickyLeftIndexes Left sticky indexes
139
+ * @param stickyRightIndexes Right sticky indexes
140
+ * @param columnWidths Array of column widths
141
+ */
142
+ function handleSticky(el, cStart, opts, stickyLeftIndexes, stickyRightIndexes, columnWidths) {
143
+ if (opts.useStickyAttr && el.getAttribute('sticky') === "left" && !stickyLeftIndexes.includes(cStart - 1)) {
144
+ stickyLeftIndexes.push(cStart - 1);
145
+ }
146
+ if (opts.useStickyAttr && el.getAttribute('sticky') === "right" && !stickyRightIndexes.includes(cStart - 1)) {
147
+ stickyRightIndexes.push(cStart - 1);
148
+ }
149
+ applySticky(el, cStart - 1, stickyLeftIndexes, stickyRightIndexes, columnWidths);
150
+ }
151
+ /**
152
+ * @param carry Rowspan tracking array
153
+ */
154
+ function decrementCarry(carry) {
155
+ for (let i = 0; i < carry.length; i++) {
156
+ if (carry[i] > 0) {
157
+ carry[i]--;
158
+ }
159
+ }
160
+ }
161
+ /**
162
+ * @param el Target grid cell element
163
+ * @param colIndex Column index
164
+ * @param stickyLeftIndexes Sticky-left indexes
165
+ * @param stickyRightIndexes Sticky-right indexes
166
+ * @param columnWidths Column widths array
167
+ */
168
+ function applySticky(el, colIndex, stickyLeftIndexes, stickyRightIndexes, columnWidths) {
169
+ const onLeft = stickyLeftIndexes.includes(colIndex);
170
+ const onRight = stickyRightIndexes.includes(colIndex);
171
+ if (!onLeft && !onRight)
172
+ return;
173
+ prepareStickyElement(el);
174
+ if (onLeft && !onRight) {
175
+ applyLeftSticky(el, colIndex, stickyLeftIndexes, columnWidths);
176
+ }
177
+ else {
178
+ applyRightSticky(el, colIndex, stickyRightIndexes, columnWidths);
179
+ }
180
+ }
181
+ /**
182
+ * @param el Grid item element to prepare for sticky positioning
183
+ */
184
+ function prepareStickyElement(el) {
185
+ el.style.position = 'sticky';
186
+ el.style.zIndex = '2';
187
+ el.style.left = '';
188
+ el.style.right = '';
189
+ el.removeAttribute('data-sticky');
190
+ }
191
+ /**
192
+ * @param el Target element
193
+ * @param colIndex Column index
194
+ * @param stickyLeftIndexes Sticky-left column indexes
195
+ * @param columnWidths Column width array
196
+ */
197
+ function applyLeftSticky(el, colIndex, stickyLeftIndexes, columnWidths) {
198
+ el.setAttribute('data-sticky', 'left');
199
+ const leftOrder = [...stickyLeftIndexes].sort((a, b) => a - b);
200
+ const pos = leftOrder.indexOf(colIndex);
201
+ const left = computeOffset(leftOrder, pos, columnWidths);
202
+ el.style.left = `${Math.max(0, Math.round(left))}px`;
203
+ }
204
+ /**
205
+ * @param el Target element
206
+ * @param colIndex Column index
207
+ * @param stickyRightIndexes Sticky-right indexes
208
+ * @param columnWidths Column widths array
209
+ */
210
+ function applyRightSticky(el, colIndex, stickyRightIndexes, columnWidths) {
211
+ el.setAttribute('data-sticky', 'right');
212
+ const rightOrder = [...stickyRightIndexes].sort((a, b) => b - a);
213
+ const pos = rightOrder.indexOf(colIndex);
214
+ const scrollbarComp = getScrollbarComp(el);
215
+ const right = computeOffset(rightOrder, pos, columnWidths, scrollbarComp);
216
+ el.style.right = `${Math.max(0, Math.round(right - 2))}px`;
217
+ }
218
+ /**
219
+ * @param nileGrid Grid instance to sync shadows for
220
+ */
221
+ export function syncStickyShadows(nileGrid) {
222
+ const { showRightOnLeftStickies, showLeftOnRightStickies } = getShadowStates(nileGrid);
223
+ const { head, body } = getHeadAndBody(nileGrid);
224
+ toggleStickyShadow(head, 'nile-grid-head-item', 'left', 'shadow-right', showRightOnLeftStickies);
225
+ toggleStickyShadow(body, 'nile-grid-cell-item', 'left', 'shadow-right', showRightOnLeftStickies);
226
+ toggleStickyShadow(head, 'nile-grid-head-item', 'right', 'shadow-left', showLeftOnRightStickies);
227
+ toggleStickyShadow(body, 'nile-grid-cell-item', 'right', 'shadow-left', showLeftOnRightStickies);
228
+ }
229
+ /**
230
+ * @param nileGrid Grid instance
231
+ * @returns Object containing booleans for left/right shadow visibility
232
+ */
233
+ function getShadowStates(nileGrid) {
234
+ const max = Math.max(0, nileGrid.scrollWidth - nileGrid.clientWidth);
235
+ return {
236
+ showRightOnLeftStickies: nileGrid.scrollLeft > 0,
237
+ showLeftOnRightStickies: nileGrid.scrollLeft < max
238
+ };
239
+ }
240
+ /**
241
+ * @param root Root element (head or body)
242
+ * @param tag Target tag selector
243
+ * @param side Sticky side ('left' or 'right')
244
+ * @param cls Shadow CSS class to toggle
245
+ * @param on Whether to apply or remove the shadow
246
+ */
247
+ function toggleStickyShadow(root, tag, side, cls, on) {
248
+ if (!root)
249
+ return;
250
+ const sel = `${tag}[data-sticky="${side}"]`;
251
+ root.querySelectorAll(sel).forEach(el => el.classList.toggle(cls, on));
252
+ }
253
+ /** rebuildTemplate
254
+ * @param colCount Number of columns
255
+ * @param columnWidths Array of explicit column widths (px)
256
+ * @returns CSS grid-template-columns string
257
+ */
258
+ export const rebuildTemplate = (colCount, columnWidths) => {
259
+ const parts = [];
260
+ for (let i = 0; i < colCount; i++) {
261
+ const explicit = columnWidths[i];
262
+ if (i === colCount - 1) {
263
+ parts.push(`minmax(${explicit}px, auto)`);
264
+ }
265
+ else {
266
+ parts.push(`${explicit}px`);
267
+ }
268
+ }
269
+ return parts.join(' ');
270
+ };
271
+ /** computeHeadLayout
272
+ * @param nileGrid Grid instance
273
+ * @param headRows Header rows (<nile-grid-row>[])
274
+ * @param carryHead Rowspan carry tracking array
275
+ * @param colCount Current column count
276
+ * @param stickyLeftIndexes Left-sticky indexes
277
+ * @param stickyRightIndexes Right-sticky indexes
278
+ * @param columnWidths Column widths array
279
+ * @returns Final column count after header layout
280
+ */
281
+ function computeHeadLayout(nileGrid, headRows, carryHead, colCount, stickyLeftIndexes, stickyRightIndexes, columnWidths) {
282
+ return layoutRows(nileGrid, headRows, carryHead, colCount, stickyLeftIndexes, stickyRightIndexes, columnWidths, {
283
+ itemSelector: 'nile-grid-head-item',
284
+ useStickyAttr: true,
285
+ handleRowBg: false,
286
+ });
287
+ }
288
+ /** computeBodyLayout
289
+ * @param nileGrid Grid instance
290
+ * @param bodyRows Body rows (<nile-grid-row>[])
291
+ * @param carryBody Rowspan carry tracking array
292
+ * @param colCount Current column count
293
+ * @param stickyLeftIndexes Left-sticky indexes
294
+ * @param stickyRightIndexes Right-sticky indexes
295
+ * @param columnWidths Column widths array
296
+ * @returns Final column count after body layout
297
+ */
298
+ function computeBodyLayout(nileGrid, bodyRows, carryBody, colCount, stickyLeftIndexes, stickyRightIndexes, columnWidths) {
299
+ return layoutRows(nileGrid, bodyRows, carryBody, colCount, stickyLeftIndexes, stickyRightIndexes, columnWidths, {
300
+ itemSelector: 'nile-grid-cell-item',
301
+ useStickyAttr: false,
302
+ handleRowBg: true,
303
+ });
304
+ }
305
+ /**
306
+ * @param nileGrid Grid container element
307
+ * @param colCount Total number of columns
308
+ * @param columnWidths Column width array
309
+ * @param headElement Header element for template update
310
+ */
311
+ export function applyColumnsTemplate(nileGrid, columnWidths) {
312
+ const cols = columnWidths
313
+ .map((w, idx) => {
314
+ if (idx === columnWidths.length - 1) {
315
+ return `minmax(${Math.round(w)}px, auto)`;
316
+ }
317
+ return `${Math.max(0, Math.round(w))}px`;
318
+ })
319
+ .join(' ');
320
+ nileGrid.style.setProperty('--nile-grid-columns', cols);
321
+ }
322
+ /**
323
+ * @param order Array of sticky column indexes
324
+ * @param pos Current position within order
325
+ * @param widths Column widths
326
+ * @param base Base offset value
327
+ * @returns Computed pixel offset
328
+ */
329
+ function computeOffset(order, pos, widths, base = 0) {
330
+ let total = base;
331
+ for (let i = 0; i < pos; i++)
332
+ total += widths[order[i]] ?? 0;
333
+ return total;
334
+ }
335
+ /**
336
+ * @param nileGrid Grid instance
337
+ * @returns Head and body elements from the grid slot
338
+ */
339
+ function getHeadAndBody(nileGrid) {
340
+ if (!nileGrid.shadowRoot)
341
+ return { head: undefined, body: undefined };
342
+ const assigned = nileGrid.slotEl.assignedElements();
343
+ const find = (tag) => assigned.find(n => n.tagName.toLowerCase() === tag);
344
+ return { head: find('nile-grid-head'), body: find('nile-grid-body') };
345
+ }
346
+ //# sourceMappingURL=nile-grid.layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nile-grid.layout.js","sourceRoot":"","sources":["../../../src/nile-grid/nile-grid.layout.ts"],"names":[],"mappings":"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","sourcesContent":["import { NileGrid } from './nile-grid';\nimport { HeadItemEl } from './nile-grid.types';\nimport { getHead, getBody } from './nile-grid.utils';\nimport { getScrollbarComp } from './nile-grid.resize';\nimport { computeColumnWidths } from './nile-grid.width';\n\n/**\n * @param nileGrid Parent NileGrid instance\n * @param slotEl <slot> element hosting head/body\n * @param ensureWidths Function to ensure columnWidths length matches colCount\n * @param rebuildTemplate Function(colCount, widths) -> grid-template string\n * @param stickyLeftIndexes Mutable list of left-sticky column indexes\n * @param stickyRightIndexes Mutable list of right-sticky column indexes\n * @returns void\n */\nexport const layout = (\n nileGrid: NileGrid,\n slotEl: any,\n ensureWidths: any,\n rebuildTemplate: any,\n stickyLeftIndexes: number[],\n stickyRightIndexes: number[]\n) => {\n const head = getHead(slotEl);\n const body = getBody(slotEl);\n if (!body) return;\n\n const headRows = head\n ? (Array.from(head.querySelectorAll('nile-grid-row')) as HTMLElement[])\n : [];\n const bodyRows = Array.from(\n body.querySelectorAll('nile-grid-row')\n ) as HTMLElement[];\n\n let colCount = 0;\n colCount = computeHeadLayout(nileGrid, headRows, [], colCount, stickyLeftIndexes, stickyRightIndexes, nileGrid.columnWidths);\n if (colCount) {\n computeBodyLayout(nileGrid, bodyRows, [], colCount, stickyLeftIndexes, stickyRightIndexes, nileGrid.columnWidths);\n } else {\n colCount = computeBodyLayout(nileGrid, bodyRows, [], colCount, stickyLeftIndexes, stickyRightIndexes, nileGrid.columnWidths);\n }\n\n setTimeout(() => {\n computeColumnWidths(nileGrid, colCount, nileGrid.columnWidths, slotEl); \n });\n ensureWidths(colCount);\n nileGrid.colTemplate = rebuildTemplate(colCount, nileGrid.columnWidths);\n};\n\n/** \n * @param nileGrid The parent NileGrid instance\n * @param rows Array of grid row elements\n * @param carry Array tracking rowspan, colspan continuation\n * @param colCount Total column count\n * @param stickyLeftIndexes List of sticky-left column indexes\n * @param stickyRightIndexes List of sticky-right column indexes\n * @param columnWidths Computed column widths\n * @param opts Options controlling layout behavior\n * @returns Final computed column count\n */\nfunction layoutRows(\n nileGrid: NileGrid,\n rows: HTMLElement[],\n carry: number[],\n colCount: number,\n stickyLeftIndexes: number[],\n stickyRightIndexes: number[],\n columnWidths: number[],\n opts: { itemSelector: string; useStickyAttr?: boolean; handleRowBg?: boolean }\n): number {\n rows.forEach((row, rIdx) => {\n if (nileGrid.hoverable) row.setAttribute('hover', 'true');\n colCount = layoutSingleRow(\n nileGrid,\n row,\n rIdx,\n carry,\n colCount,\n stickyLeftIndexes,\n stickyRightIndexes,\n columnWidths,\n opts\n );\n });\n return colCount;\n}\n\n/**\n * @param nileGrid The grid element being processed\n * @param row Single row element to layout\n * @param rIdx Row index in the grid\n * @param carry Rowspan tracking array\n * @param colCount Current column count\n * @param stickyLeftIndexes Sticky-left indexes\n * @param stickyRightIndexes Sticky-right indexes\n * @param columnWidths Column widths array\n * @param opts Layout options\n * @returns Updated column count\n */\nfunction layoutSingleRow(\n nileGrid: NileGrid,\n row: HTMLElement,\n rIdx: number,\n carry: number[],\n colCount: number,\n stickyLeftIndexes: number[],\n stickyRightIndexes: number[],\n columnWidths: number[],\n opts: { itemSelector: string; useStickyAttr?: boolean }\n): number {\n let c = 1;\n const rStart = rIdx + 1;\n const items = [...row.querySelectorAll(opts.itemSelector)] as HTMLElement[];\n\n for (const el of items) {\n while ((carry[c - 1] || 0) > 0) c++;\n ({ c, colCount } = layoutCell(\n nileGrid,\n el,\n c,\n rStart,\n carry,\n colCount,\n stickyLeftIndexes,\n stickyRightIndexes,\n columnWidths,\n opts\n ));\n }\n decrementCarry(carry);\n return colCount;\n}\n\n/**\n * @param nileGrid The parent grid\n * @param el Cell element being laid out\n * @param c Current column index\n * @param rStart Row start index\n * @param carry Rowspan carry array\n * @param colCount Current max column count\n * @param stickyLeftIndexes Left sticky indexes\n * @param stickyRightIndexes Right sticky indexes\n * @param columnWidths Column widths\n * @param opts Sticky and layout options\n * @returns Updated column index and column count\n */\nfunction layoutCell(\n nileGrid: NileGrid,\n el: HTMLElement,\n c: number,\n rStart: number,\n carry: number[],\n colCount: number,\n stickyLeftIndexes: number[],\n stickyRightIndexes: number[],\n columnWidths: number[],\n opts: { useStickyAttr?: boolean }\n) {\n const colspan = Math.max(1, +el.getAttribute('colspan')! || 1);\n const rowspan = Math.max(1, +el.getAttribute('rowspan')! || 1);\n handleRowspan(nileGrid, el, rowspan);\n\n const cStart = c;\n const cEnd = c + colspan;\n setGridPosition(el, cStart, cEnd, rStart, rowspan);\n handleSticky(\n el,\n cStart,\n opts,\n stickyLeftIndexes,\n stickyRightIndexes,\n columnWidths\n );\n\n for (let k = 0; k < colspan; k++) {\n carry[c - 1 + k] = Math.max(carry[c - 1 + k] || 0, rowspan);\n }\n return {\n c: cEnd,\n colCount: Math.max(colCount, cEnd - 1),\n };\n}\n\n/** \n * @param nileGrid The grid container \n * @param el Element that spans multiple rows \n * @param rowspan Number of rows to span \n */\nfunction handleRowspan(nileGrid: NileGrid, el: HTMLElement, rowspan: number) {\n if (rowspan <= 1) return;\n nileGrid.cellHeight ||= el.getBoundingClientRect().height;\n el.style.position = 'absolute';\n el.style.height = `${nileGrid.cellHeight * rowspan}px`;\n el.style.zIndex = '2';\n}\n\n/**\n * @param el Grid item element\n * @param cStart Starting column index\n * @param cEnd Ending column index\n * @param rStart Starting row index\n * @param rowspan Row span value\n */\nfunction setGridPosition(\n el: HTMLElement,\n cStart: number,\n cEnd: number,\n rStart: number,\n rowspan: number\n) {\n const rEnd = rStart + rowspan;\n el.style.gridColumn = `${cStart} / ${cEnd}`;\n el.style.gridRow = `${rStart} / ${rEnd}`;\n (el as any).dataset.cStart = String(cStart);\n}\n\n/**\n * @param el Grid item element\n * @param cStart Column start index\n * @param opts Sticky configuration options\n * @param stickyLeftIndexes Left sticky indexes\n * @param stickyRightIndexes Right sticky indexes\n * @param columnWidths Array of column widths\n */\nfunction handleSticky(\n el: HTMLElement,\n cStart: number,\n opts: { useStickyAttr?: boolean },\n stickyLeftIndexes: number[],\n stickyRightIndexes: number[],\n columnWidths: number[]\n) {\n if (opts.useStickyAttr && el.getAttribute('sticky') === \"left\" && !stickyLeftIndexes.includes(cStart - 1)) {\n stickyLeftIndexes.push(cStart - 1);\n }\n if (opts.useStickyAttr && el.getAttribute('sticky') === \"right\" && !stickyRightIndexes.includes(cStart - 1)) {\n stickyRightIndexes.push(cStart - 1);\n }\n applySticky(el, cStart - 1, stickyLeftIndexes, stickyRightIndexes, columnWidths);\n}\n\n/**\n * @param carry Rowspan tracking array\n */\nfunction decrementCarry(carry: number[]) {\n for (let i = 0; i < carry.length; i++) {\n if (carry[i] > 0) {\n carry[i]--;\n }\n }\n}\n\n/**\n * @param el Target grid cell element\n * @param colIndex Column index\n * @param stickyLeftIndexes Sticky-left indexes\n * @param stickyRightIndexes Sticky-right indexes\n * @param columnWidths Column widths array\n */\nfunction applySticky(\n el: HTMLElement,\n colIndex: number,\n stickyLeftIndexes: number[],\n stickyRightIndexes: number[],\n columnWidths: number[]\n) {\n const onLeft = stickyLeftIndexes.includes(colIndex);\n const onRight = stickyRightIndexes.includes(colIndex);\n if (!onLeft && !onRight) return;\n\n prepareStickyElement(el);\n if (onLeft && !onRight) {\n applyLeftSticky(el, colIndex, stickyLeftIndexes, columnWidths);\n } else {\n applyRightSticky(el, colIndex, stickyRightIndexes, columnWidths);\n }\n}\n\n/**\n * @param el Grid item element to prepare for sticky positioning\n */\nfunction prepareStickyElement(el: HTMLElement) {\n el.style.position = 'sticky';\n el.style.zIndex = '2';\n el.style.left = '';\n el.style.right = '';\n el.removeAttribute('data-sticky');\n}\n\n/**\n * @param el Target element\n * @param colIndex Column index\n * @param stickyLeftIndexes Sticky-left column indexes\n * @param columnWidths Column width array\n */\nfunction applyLeftSticky(\n el: HTMLElement,\n colIndex: number,\n stickyLeftIndexes: number[],\n columnWidths: number[]\n) {\n el.setAttribute('data-sticky', 'left');\n const leftOrder = [...stickyLeftIndexes].sort((a, b) => a - b);\n const pos = leftOrder.indexOf(colIndex);\n const left = computeOffset(leftOrder, pos, columnWidths);\n el.style.left = `${Math.max(0, Math.round(left))}px`;\n}\n\n/**\n * @param el Target element\n * @param colIndex Column index\n * @param stickyRightIndexes Sticky-right indexes\n * @param columnWidths Column widths array\n */\nfunction applyRightSticky(\n el: HTMLElement,\n colIndex: number,\n stickyRightIndexes: number[],\n columnWidths: number[]\n) {\n el.setAttribute('data-sticky', 'right');\n const rightOrder = [...stickyRightIndexes].sort((a, b) => b - a);\n const pos = rightOrder.indexOf(colIndex);\n const scrollbarComp = getScrollbarComp(el);\n const right = computeOffset(rightOrder, pos, columnWidths, scrollbarComp);\n el.style.right = `${Math.max(0, Math.round(right - 2))}px`;\n}\n\n/**\n * @param nileGrid Grid instance to sync shadows for\n */\nexport function syncStickyShadows(nileGrid: NileGrid) {\n const { showRightOnLeftStickies, showLeftOnRightStickies } = getShadowStates(nileGrid);\n const { head, body } = getHeadAndBody(nileGrid);\n\n toggleStickyShadow(head, 'nile-grid-head-item', 'left', 'shadow-right', showRightOnLeftStickies);\n toggleStickyShadow(body, 'nile-grid-cell-item', 'left', 'shadow-right', showRightOnLeftStickies);\n toggleStickyShadow(head, 'nile-grid-head-item', 'right', 'shadow-left', showLeftOnRightStickies);\n toggleStickyShadow(body, 'nile-grid-cell-item', 'right', 'shadow-left', showLeftOnRightStickies);\n}\n\n/**\n * @param nileGrid Grid instance\n * @returns Object containing booleans for left/right shadow visibility\n */\nfunction getShadowStates(nileGrid: NileGrid) {\n const max = Math.max(0, nileGrid.scrollWidth - nileGrid.clientWidth);\n return {\n showRightOnLeftStickies: nileGrid.scrollLeft > 0,\n showLeftOnRightStickies: nileGrid.scrollLeft < max\n };\n}\n\n/**\n * @param root Root element (head or body)\n * @param tag Target tag selector\n * @param side Sticky side ('left' or 'right')\n * @param cls Shadow CSS class to toggle\n * @param on Whether to apply or remove the shadow\n */\nfunction toggleStickyShadow(\n root: HTMLElement | undefined,\n tag: string,\n side: 'left' | 'right',\n cls: string,\n on: boolean\n) {\n if (!root) return;\n const sel = `${tag}[data-sticky=\"${side}\"]`;\n root.querySelectorAll<HTMLElement>(sel).forEach(el => el.classList.toggle(cls, on));\n}\n\n/** rebuildTemplate\n * @param colCount Number of columns\n * @param columnWidths Array of explicit column widths (px)\n * @returns CSS grid-template-columns string\n */\nexport const rebuildTemplate = (\n colCount: number,\n columnWidths: number[]\n): string => {\n const parts: string[] = [];\n\n for (let i = 0; i < colCount; i++) {\n const explicit = columnWidths[i];\n if (i === colCount - 1) {\n parts.push(`minmax(${explicit}px, auto)`);\n } else {\n parts.push(`${explicit}px`);\n }\n }\n return parts.join(' ');\n};\n\n/** computeHeadLayout\n * @param nileGrid Grid instance\n * @param headRows Header rows (<nile-grid-row>[])\n * @param carryHead Rowspan carry tracking array\n * @param colCount Current column count\n * @param stickyLeftIndexes Left-sticky indexes\n * @param stickyRightIndexes Right-sticky indexes\n * @param columnWidths Column widths array\n * @returns Final column count after header layout\n */\nfunction computeHeadLayout(\n nileGrid: NileGrid,\n headRows: HTMLElement[],\n carryHead: number[],\n colCount: number,\n stickyLeftIndexes: number[],\n stickyRightIndexes: number[],\n columnWidths: number[]\n): number {\n return layoutRows(\n nileGrid,\n headRows,\n carryHead,\n colCount,\n stickyLeftIndexes,\n stickyRightIndexes,\n columnWidths,\n {\n itemSelector: 'nile-grid-head-item',\n useStickyAttr: true,\n handleRowBg: false,\n }\n );\n}\n\n/** computeBodyLayout\n * @param nileGrid Grid instance\n * @param bodyRows Body rows (<nile-grid-row>[])\n * @param carryBody Rowspan carry tracking array\n * @param colCount Current column count\n * @param stickyLeftIndexes Left-sticky indexes\n * @param stickyRightIndexes Right-sticky indexes\n * @param columnWidths Column widths array\n * @returns Final column count after body layout\n */\nfunction computeBodyLayout(\n nileGrid: NileGrid,\n bodyRows: HTMLElement[],\n carryBody: number[],\n colCount: number,\n stickyLeftIndexes: number[],\n stickyRightIndexes: number[],\n columnWidths: number[]\n): number {\n return layoutRows(\n nileGrid,\n bodyRows,\n carryBody,\n colCount,\n stickyLeftIndexes,\n stickyRightIndexes,\n columnWidths,\n {\n itemSelector: 'nile-grid-cell-item',\n useStickyAttr: false,\n handleRowBg: true,\n }\n );\n}\n\n/**\n * @param nileGrid Grid container element\n * @param colCount Total number of columns\n * @param columnWidths Column width array\n * @param headElement Header element for template update\n */\nexport function applyColumnsTemplate(\n nileGrid: NileGrid,\n columnWidths: number[]\n) {\n const cols = columnWidths\n .map((w, idx) => {\n if (idx === columnWidths.length - 1) {\n return `minmax(${Math.round(w)}px, auto)`;\n }\n return `${Math.max(0, Math.round(w))}px`;\n })\n .join(' ');\n nileGrid.style.setProperty('--nile-grid-columns', cols);\n}\n\n/**\n * @param order Array of sticky column indexes\n * @param pos Current position within order\n * @param widths Column widths\n * @param base Base offset value\n * @returns Computed pixel offset\n */\nfunction computeOffset(\n order: number[],\n pos: number,\n widths: number[],\n base = 0\n) {\n let total = base;\n for (let i = 0; i < pos; i++) total += widths[order[i]] ?? 0;\n return total;\n}\n\n/**\n * @param nileGrid Grid instance\n * @returns Head and body elements from the grid slot\n */\nfunction getHeadAndBody(nileGrid: NileGrid) {\n if (!nileGrid.shadowRoot) return { head: undefined, body: undefined };\n const assigned = nileGrid.slotEl.assignedElements();\n const find = (tag: string) =>\n assigned.find(n => n.tagName.toLowerCase() === tag) as HTMLElement | undefined;\n return { head: find('nile-grid-head'), body: find('nile-grid-body') };\n}"]}
@@ -0,0 +1,58 @@
1
+ import { NileGrid } from './nile-grid';
2
+ /**
3
+ * @param minColumnWidth Minimum allowed column width
4
+ * @param resizeStart Guide line element (start)
5
+ * @param resizeEnd Guide line element (end)
6
+ * @param col Active column index
7
+ * @param scrollHeight Height to apply to guides
8
+ * @param columnWidths Current column widths
9
+ * @returns void
10
+ */
11
+ export declare const resizeLinesHandler: (minColumnWidth: number, resizeStart: HTMLElement, resizeEnd: HTMLElement, col: number, scrollHeight: number, columnWidths: number[]) => void;
12
+ /**
13
+ * @param targetWidth New computed width in pixels
14
+ * @param min Minimum allowed width
15
+ * @param max Maximum allowed width
16
+ * @returns Adjusted column width
17
+ */
18
+ export declare function computeNewWidth(opts: {
19
+ target: HTMLElement;
20
+ col: number;
21
+ widthPx: number;
22
+ floor: number;
23
+ columnWidths: number[];
24
+ }): {
25
+ prevW: number;
26
+ newW: number;
27
+ delta0: number;
28
+ };
29
+ /**
30
+ * @param columnWidths Current widths array
31
+ * @param containerWidth Container total width
32
+ */
33
+ export declare function resizeNoScroll(opts: {
34
+ grid: NileGrid;
35
+ col: number;
36
+ prevW: number;
37
+ newW: number;
38
+ floor: number;
39
+ }): void;
40
+ /**
41
+ * @param columnWidths Current widths
42
+ * @param containerWidth Container width
43
+ */
44
+ export declare function resizeWithScroll(opts: {
45
+ grid: NileGrid;
46
+ col: number;
47
+ newW: number;
48
+ }): void;
49
+ /**
50
+ * @param el Target element within grid
51
+ * @returns Scrollbar width compensation value
52
+ */
53
+ export declare function getScrollbarComp(el: HTMLElement): number;
54
+ /**
55
+ * @param nileGrid The parent grid
56
+ * @param columnWidths New column width array
57
+ */
58
+ export declare function applyAfterResize(grid: any, col: number): void;
@@ -0,0 +1,100 @@
1
+ import { totalReducible, takeFromRight, giveToRight } from './nile-grid.width';
2
+ import { rebuildTemplate, syncStickyShadows, applyColumnsTemplate } from './nile-grid.layout';
3
+ /**
4
+ * @param minColumnWidth Minimum allowed column width
5
+ * @param resizeStart Guide line element (start)
6
+ * @param resizeEnd Guide line element (end)
7
+ * @param col Active column index
8
+ * @param scrollHeight Height to apply to guides
9
+ * @param columnWidths Current column widths
10
+ * @returns void
11
+ */
12
+ export const resizeLinesHandler = (minColumnWidth, resizeStart, resizeEnd, col, scrollHeight, columnWidths) => {
13
+ resizeStart.style.display = 'block';
14
+ resizeEnd.style.display = 'block';
15
+ resizeStart.style.height = scrollHeight + 'px';
16
+ resizeEnd.style.height = scrollHeight + 'px';
17
+ const floor = minColumnWidth;
18
+ const safe = (n) => Math.max(0, Math.round(n || 0));
19
+ const sum = (arr, endExclusive) => safe(arr.slice(0, Math.max(0, endExclusive)).reduce((a, b) => a + (b || 0), 0));
20
+ const totalGridWidth = safe(columnWidths.reduce((a, b) => a + (b || 0), 0));
21
+ const baseLeft = sum(columnWidths, col);
22
+ const appliedColWidth = safe(Math.max(floor, columnWidths[col] ?? floor));
23
+ let handleLeft = baseLeft + appliedColWidth;
24
+ const minEdge = baseLeft + floor;
25
+ const maxEdge = totalGridWidth;
26
+ handleLeft = Math.min(Math.max(handleLeft, minEdge), maxEdge);
27
+ handleLeft = Math.max(handleLeft, 20);
28
+ resizeStart.style.left = `${handleLeft - 6}px`;
29
+ resizeEnd.style.left = `${handleLeft - 2}px`;
30
+ };
31
+ /**
32
+ * @param targetWidth New computed width in pixels
33
+ * @param min Minimum allowed width
34
+ * @param max Maximum allowed width
35
+ * @returns Adjusted column width
36
+ */
37
+ export function computeNewWidth(opts) {
38
+ const { target, col, widthPx, floor, columnWidths } = opts;
39
+ const hasSpan = !!target.getAttribute('colspan') &&
40
+ parseInt(target.getAttribute('colspan'), 10) > 1;
41
+ const prevW = columnWidths[col] ?? floor;
42
+ const newWraw = hasSpan ? widthPx - (columnWidths[col - 1] ?? 0) : widthPx;
43
+ const newW = Math.max(floor, Math.round(Number.isFinite(newWraw) ? newWraw : prevW));
44
+ return { prevW, newW, delta0: newW - prevW };
45
+ }
46
+ /**
47
+ * @param columnWidths Current widths array
48
+ * @param containerWidth Container total width
49
+ */
50
+ export function resizeNoScroll(opts) {
51
+ const { grid, col, prevW, newW, floor } = opts;
52
+ let delta = newW - prevW;
53
+ if (delta > 0) {
54
+ const rightReducible = totalReducible(grid.columnWidths, col + 1, floor);
55
+ if (rightReducible <= 0)
56
+ return;
57
+ delta = Math.min(delta, rightReducible);
58
+ grid.columnWidths[col] = prevW + delta;
59
+ if (delta > 0)
60
+ takeFromRight(grid.columnWidths, col + 1, delta, floor);
61
+ }
62
+ else {
63
+ if (col === grid.columnWidths.length - 1)
64
+ return;
65
+ const shrink = -delta;
66
+ const newColW = Math.max(floor, prevW - shrink);
67
+ const actualShrink = prevW - newColW;
68
+ grid.columnWidths[col] = newColW;
69
+ const remaining = giveToRight(grid.columnWidths, col + 1, actualShrink);
70
+ if (remaining > 0)
71
+ grid.columnWidths[col] = prevW;
72
+ }
73
+ }
74
+ /**
75
+ * @param columnWidths Current widths
76
+ * @param containerWidth Container width
77
+ */
78
+ export function resizeWithScroll(opts) {
79
+ const { grid, col, newW } = opts;
80
+ grid.columnWidths[col] = newW;
81
+ }
82
+ /**
83
+ * @param el Target element within grid
84
+ * @returns Scrollbar width compensation value
85
+ */
86
+ export function getScrollbarComp(el) {
87
+ const scroller = el.closest('nile-grid');
88
+ return scroller ? scroller.offsetWidth - scroller.clientWidth : 0;
89
+ }
90
+ /**
91
+ * @param nileGrid The parent grid
92
+ * @param columnWidths New column width array
93
+ */
94
+ export function applyAfterResize(grid, col) {
95
+ resizeLinesHandler(grid.minColumnWidth, grid.resizeStart, grid.resizeEnd, col, grid.scrollHeight, grid.columnWidths);
96
+ grid.colTemplate = rebuildTemplate(grid.columnWidths.length, grid.columnWidths);
97
+ syncStickyShadows(grid);
98
+ applyColumnsTemplate(grid, grid.columnWidths);
99
+ }
100
+ //# sourceMappingURL=nile-grid.resize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nile-grid.resize.js","sourceRoot":"","sources":["../../../src/nile-grid/nile-grid.resize.ts"],"names":[],"mappings":"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","sourcesContent":["import { NileGrid } from './nile-grid';\nimport { HeadItemEl } from './nile-grid.types';\nimport { totalReducible, takeFromRight, giveToRight } from './nile-grid.width';\nimport { rebuildTemplate, syncStickyShadows, applyColumnsTemplate } from './nile-grid.layout';\n\n/**\n * @param minColumnWidth Minimum allowed column width\n * @param resizeStart Guide line element (start)\n * @param resizeEnd Guide line element (end)\n * @param col Active column index\n * @param scrollHeight Height to apply to guides\n * @param columnWidths Current column widths\n * @returns void\n */\nexport const resizeLinesHandler = (\n minColumnWidth: number,\n resizeStart: HTMLElement,\n resizeEnd: HTMLElement,\n col: number,\n scrollHeight: number,\n columnWidths: number[],\n) => {\n resizeStart.style.display = 'block';\n resizeEnd.style.display = 'block';\n resizeStart.style.height = scrollHeight + 'px';\n resizeEnd.style.height = scrollHeight + 'px';\n const floor = minColumnWidth;\n const safe = (n: number) => Math.max(0, Math.round(n || 0));\n const sum = (arr: number[], endExclusive: number) => safe(arr.slice(0, Math.max(0, endExclusive)).reduce((a, b) => a + (b || 0), 0));\n\n const totalGridWidth = safe(columnWidths.reduce((a, b) => a + (b || 0), 0));\n const baseLeft = sum(columnWidths, col);\n const appliedColWidth = safe(Math.max(floor, columnWidths[col] ?? floor));\n let handleLeft = baseLeft + appliedColWidth;\n\n const minEdge = baseLeft + floor;\n const maxEdge = totalGridWidth;\n handleLeft = Math.min(Math.max(handleLeft, minEdge), maxEdge);\n handleLeft = Math.max(handleLeft, 20);\n\n resizeStart.style.left = `${handleLeft - 6}px`;\n resizeEnd.style.left = `${handleLeft - 2}px`;\n};\n\n/**\n * @param targetWidth New computed width in pixels\n * @param min Minimum allowed width\n * @param max Maximum allowed width\n * @returns Adjusted column width\n */\nexport function computeNewWidth(opts: {\n target: HTMLElement;\n col: number;\n widthPx: number;\n floor: number;\n columnWidths: number[];\n}) {\n const { target, col, widthPx, floor, columnWidths } = opts;\n const hasSpan =\n !!target.getAttribute('colspan') &&\n parseInt(target.getAttribute('colspan')!, 10) > 1;\n const prevW = columnWidths[col] ?? floor;\n const newWraw = hasSpan ? widthPx - (columnWidths[col - 1] ?? 0) : widthPx;\n const newW = Math.max(\n floor,\n Math.round(Number.isFinite(newWraw) ? newWraw : prevW)\n );\n return { prevW, newW, delta0: newW - prevW };\n}\n\n/**\n * @param columnWidths Current widths array\n * @param containerWidth Container total width\n */\nexport function resizeNoScroll(opts: {\n grid: NileGrid;\n col: number;\n prevW: number;\n newW: number;\n floor: number;\n}) {\n const { grid, col, prevW, newW, floor } = opts;\n let delta = newW - prevW;\n\n if (delta > 0) {\n const rightReducible = totalReducible(grid.columnWidths, col + 1, floor);\n if (rightReducible <= 0) return;\n delta = Math.min(delta, rightReducible);\n grid.columnWidths[col] = prevW + delta;\n if (delta > 0) takeFromRight(grid.columnWidths, col + 1, delta, floor);\n } else {\n if (col === grid.columnWidths.length - 1) return;\n const shrink = -delta;\n const newColW = Math.max(floor, prevW - shrink);\n const actualShrink = prevW - newColW;\n grid.columnWidths[col] = newColW;\n const remaining = giveToRight(grid.columnWidths, col + 1, actualShrink);\n if (remaining > 0) grid.columnWidths[col] = prevW;\n }\n}\n\n/**\n * @param columnWidths Current widths\n * @param containerWidth Container width\n */\nexport function resizeWithScroll(opts: {\n grid: NileGrid;\n col: number;\n newW: number;\n}) {\n const { grid, col, newW } = opts;\n grid.columnWidths[col] = newW;\n}\n\n/**\n * @param el Target element within grid\n * @returns Scrollbar width compensation value\n */\nexport function getScrollbarComp(el: HTMLElement) {\n const scroller = el.closest('nile-grid') as HTMLElement | null;\n return scroller ? scroller.offsetWidth - scroller.clientWidth : 0;\n}\n\n/**\n * @param nileGrid The parent grid\n * @param columnWidths New column width array\n */\nexport function applyAfterResize(grid: any, col: number) {\n resizeLinesHandler(\n grid.minColumnWidth,\n grid.resizeStart,\n grid.resizeEnd,\n col,\n grid.scrollHeight,\n grid.columnWidths\n );\n grid.colTemplate = rebuildTemplate(\n grid.columnWidths.length,\n grid.columnWidths\n );\n syncStickyShadows(grid);\n applyColumnsTemplate(grid, grid.columnWidths);\n}"]}
@@ -0,0 +1,3 @@
1
+ export type HeadItemEl = HTMLElement & {
2
+ width?: number | null;
3
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=nile-grid.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nile-grid.types.js","sourceRoot":"","sources":["../../../src/nile-grid/nile-grid.types.ts"],"names":[],"mappings":"","sourcesContent":["export type HeadItemEl = HTMLElement & { width?: number | null };"]}
@@ -1,9 +1,27 @@
1
1
  import { NileGrid } from './nile-grid';
2
- export declare const resizeLinesHandler: (resizeStart: any, resizeEnd: any, col: number, widthPx: number, scrollHeight: any, columnWidths: any, e: any) => void;
2
+ /** listenToEventListeners
3
+ * @param nileGrid Grid element to attach listeners on
4
+ * @param onResize Handler for 'nile-column-resize'
5
+ * @param slotEl Slot element to watch for 'slotchange'
6
+ * @param _attachObserverAndLayout Callback to reattach observer + layout
7
+ * @returns void
8
+ */
3
9
  export declare const listenToEventListeners: (nileGrid: NileGrid, onResize: any, slotEl: any, _attachObserverAndLayout: any) => void;
10
+ /** removeEventListeners
11
+ * @param nileGrid Grid element to detach listeners from
12
+ * @param onResize Handler previously attached to 'nile-column-resize'
13
+ * @param slotEl Slot element to remove 'slotchange' from
14
+ * @param _attachObserverAndLayout Callback reference used during attach
15
+ * @returns void
16
+ */
4
17
  export declare const removeEventListeners: (nileGrid: NileGrid, onResize: any, slotEl: any, _attachObserverAndLayout: any) => void;
18
+ /** getHead
19
+ * @param slotEl Slot element containing assigned nodes
20
+ * @returns <nile-grid-head> element or null
21
+ */
5
22
  export declare const getHead: (slotEl: any) => HTMLElement;
23
+ /** getBody
24
+ * @param slotEl Slot element containing assigned nodes
25
+ * @returns <nile-grid-body> element or null
26
+ */
6
27
  export declare const getBody: (slotEl: any) => HTMLElement;
7
- export declare const rebuildTemplate: (colCount: number, columnWidths: number[]) => string;
8
- export declare const applyTemplate: (head: HTMLElement | null, body: HTMLElement | null, colTemplate: string) => void;
9
- export declare const layout: (nileGrid: NileGrid, slotEl: any, ensureWidths: any, rebuildTemplate: any, applyTemplate: any, columnWidths: any) => void;