@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
@@ -5,20 +5,13 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
 
8
- import { LitElement, html, CSSResultArray, TemplateResult } from 'lit';
8
+ import { html, CSSResultArray, TemplateResult } from 'lit';
9
9
  import { customElement, property, query, state } from 'lit/decorators.js';
10
10
  import { styles } from './nile-grid.css';
11
11
  import NileElement from '../internal/nile-element';
12
- import {
13
- resizeLinesHandler,
14
- listenToEventListeners,
15
- removeEventListeners,
16
- getHead,
17
- getBody,
18
- rebuildTemplate,
19
- applyTemplate,
20
- layout,
21
- } from './nile-grid.utils';
12
+ import { rebuildTemplate, syncStickyShadows, layout } from './nile-grid.layout';
13
+ import { listenToEventListeners, removeEventListeners, getHead, getBody } from './nile-grid.utils';
14
+ import { computeNewWidth, resizeWithScroll, applyAfterResize, resizeNoScroll } from './nile-grid.resize';
22
15
 
23
16
  /**
24
17
  * Nile grid component.
@@ -35,17 +28,15 @@ export class NileGrid extends NileElement {
35
28
  public static get styles(): CSSResultArray {
36
29
  return [styles];
37
30
  }
38
- /** User can pass custom widths for the columns */
39
- @property({ type: Array, attribute: true }) customWidths: number[] = [];
40
31
 
41
32
  /** To set the grid template columns in rebuildTemplate method */
42
33
  @state() public colTemplate = '';
43
34
 
44
35
  /** To store the column widths in the beginning and after resizing */
45
- @state() private columnWidths: number[] = [...this.customWidths];
36
+ @state() public columnWidths: number[] = [];
46
37
 
47
38
  /** To get the slot element */
48
- @query('slot') private slotEl!: HTMLSlotElement;
39
+ @query('slot') public slotEl!: HTMLSlotElement;
49
40
 
50
41
  /** To get the first resize line to show the resize handle */
51
42
  @query('.nile-resize-start') resizeStart: HTMLElement;
@@ -53,12 +44,38 @@ export class NileGrid extends NileElement {
53
44
  /** To get the last resize line to show the resize handle */
54
45
  @query('.nile-resize-end') resizeEnd: HTMLElement;
55
46
 
47
+ /** To enable horizontal scrolling when user is resizing */
48
+ @property({ type: Boolean, attribute: true, reflect: true }) enableResizeScroll: boolean = false;
49
+
50
+ /** To enable hoverable rows */
51
+ @property({ type: Boolean, attribute: true, reflect: true }) hoverable: boolean = false;
52
+
56
53
  /** To store the mutation observer */
57
54
  private mo?: MutationObserver;
58
55
 
56
+ /** To store the resize observer */
57
+ private resizeObserver?: ResizeObserver;
58
+
59
+ private resizeObserverStickyShadows?: ResizeObserver;
60
+
59
61
  /** To store the request animation frame */
60
62
  private raf = 0;
61
63
 
64
+ /** Minimum column width */
65
+ @property({ type: Number, reflect: true, attribute: true }) minColumnWidth = 40;
66
+
67
+ /** To store the sticky index's */
68
+ @state() public stickyLeftIndexes: number[] = [];
69
+
70
+ /** To store the sticky index's */
71
+ @state() public stickyRightIndexes: number[] = [];
72
+
73
+ /** To calculate the rowspan height */
74
+ @state() public cellHeight: number | null = null;
75
+
76
+ /** To check if the widths are initialized */
77
+ @state() public widthsInitialized = false;
78
+
62
79
  private scheduleLayout() {
63
80
  if (this.raf) cancelAnimationFrame(this.raf);
64
81
  this.raf = requestAnimationFrame(() => {
@@ -68,9 +85,10 @@ export class NileGrid extends NileElement {
68
85
  this.slotEl,
69
86
  this.ensureWidths.bind(this),
70
87
  rebuildTemplate,
71
- applyTemplate,
72
- this.columnWidths
88
+ this.stickyLeftIndexes,
89
+ this.stickyRightIndexes
73
90
  );
91
+ syncStickyShadows(this);
74
92
  });
75
93
  }
76
94
 
@@ -81,36 +99,34 @@ export class NileGrid extends NileElement {
81
99
  }
82
100
 
83
101
  private onResize = (e: Event) => {
102
+ e.stopPropagation();
103
+ this.emit('nile-resize', {
104
+ columnNumber: (e as CustomEvent).detail.col,
105
+ columnWidth: (e as CustomEvent).detail.widthPx,
106
+ });
84
107
  const { col, widthPx } = (e as CustomEvent).detail as {
85
108
  col: number;
86
109
  widthPx: number;
87
110
  };
88
- let w: any;
89
- const floor = 60;
90
-
91
- if (
92
- (e.target as HTMLElement).getAttribute('colspan') &&
93
- parseInt((e.target as HTMLElement).getAttribute('colspan')!) > 1
94
- ) {
95
- w = Math.max(floor, Math.round(widthPx - this.columnWidths[col - 1]));
96
- } else {
97
- w = Math.max(floor, Math.round(widthPx));
98
- }
99
- this.columnWidths[col] = w;
100
- resizeLinesHandler(
101
- this.resizeStart,
102
- this.resizeEnd,
111
+ const { prevW, newW, delta0 } = computeNewWidth({
112
+ target: e.target as HTMLElement,
103
113
  col,
104
114
  widthPx,
105
- this.scrollHeight,
106
- this.columnWidths,
107
- e
108
- );
109
- this.colTemplate = rebuildTemplate(
110
- this.columnWidths.length,
111
- this.columnWidths
112
- );
113
- applyTemplate(getHead(this.slotEl), getBody(this.slotEl), this.colTemplate);
115
+ floor: this.minColumnWidth,
116
+ columnWidths: this.columnWidths,
117
+ });
118
+
119
+ if (delta0 === 0) {
120
+ applyAfterResize(this, col);
121
+ return;
122
+ }
123
+
124
+ if (!this.enableResizeScroll) {
125
+ resizeNoScroll({ grid: this, col, prevW, newW, floor: this.minColumnWidth });
126
+ } else {
127
+ resizeWithScroll({ grid: this, col, newW });
128
+ }
129
+ applyAfterResize(this, col);
114
130
  };
115
131
 
116
132
  protected firstUpdated() {
@@ -121,6 +137,10 @@ export class NileGrid extends NileElement {
121
137
  this.slotEl,
122
138
  this._attachObserverAndLayout.bind(this)
123
139
  );
140
+ this.addEventListener('scroll', () => syncStickyShadows(this));
141
+ this.resizeObserverStickyShadows = new ResizeObserver(() => syncStickyShadows(this));
142
+ this.resizeObserverStickyShadows.observe(this);
143
+ syncStickyShadows(this);
124
144
  }
125
145
 
126
146
  private _attachObserverAndLayout() {
@@ -128,6 +148,17 @@ export class NileGrid extends NileElement {
128
148
  this.mo = new MutationObserver(() => {
129
149
  this.scheduleLayout();
130
150
  });
151
+ this.resizeObserver?.disconnect();
152
+ this.resizeObserver = new ResizeObserver(() => {
153
+ layout(
154
+ this,
155
+ this.slotEl,
156
+ this.ensureWidths.bind(this),
157
+ rebuildTemplate,
158
+ this.stickyLeftIndexes,
159
+ this.stickyRightIndexes
160
+ );
161
+ });
131
162
 
132
163
  const head = getHead(this.slotEl);
133
164
  const body = getBody(this.slotEl);
@@ -140,22 +171,15 @@ export class NileGrid extends NileElement {
140
171
  attributes: true,
141
172
  attributeFilter: ['colspan', 'rowspan'],
142
173
  });
143
- layout(
144
- this,
145
- this.slotEl,
146
- this.ensureWidths.bind(this),
147
- rebuildTemplate,
148
- applyTemplate,
149
- this.columnWidths
150
- );
174
+ this.resizeObserver?.observe(this);
151
175
  }
152
176
 
153
177
  public render(): TemplateResult {
154
178
  return html`
155
- <div>
156
- <slot></slot>
157
- <div class="nile-resize-start"></div>
158
- <div class="nile-resize-end"></div>
179
+ <div part="grid-base" class="nile-grid-base">
180
+ <slot part="grid-slot"></slot>
181
+ <div part="resize-start" class="nile-resize-start"></div>
182
+ <div part="resize-end" class="nile-resize-end"></div>
159
183
  </div>
160
184
  `;
161
185
  }
@@ -163,6 +187,8 @@ export class NileGrid extends NileElement {
163
187
  disconnectedCallback(): void {
164
188
  super.disconnectedCallback?.();
165
189
  this.mo?.disconnect();
190
+ this.resizeObserver?.disconnect();
191
+ this.resizeObserverStickyShadows?.disconnect();
166
192
 
167
193
  if (this.raf) cancelAnimationFrame(this.raf);
168
194
  removeEventListeners(
@@ -0,0 +1 @@
1
+ export type HeadItemEl = HTMLElement & { width?: number | null };
@@ -1,48 +1,20 @@
1
1
  import { NileGrid } from './nile-grid';
2
-
3
- export const resizeLinesHandler = (
4
- resizeStart: any,
5
- resizeEnd: any,
6
- col: number,
7
- widthPx: number,
8
- scrollHeight: any,
9
- columnWidths: any,
10
- e: any
11
- ) => {
12
- resizeStart.style.display = 'block';
13
- resizeEnd.style.display = 'block';
14
- resizeStart.style.height = scrollHeight + 'px';
15
- resizeEnd.style.height = scrollHeight + 'px';
16
- if (col === 0) {
17
- resizeStart.style.left = `${Math.max(60, widthPx) - 6}px`;
18
- resizeEnd.style.left = `${Math.max(60, widthPx) - 2}px`;
19
- } else {
20
- let totalWidth = 0;
21
- if (
22
- (e.target as HTMLElement).getAttribute('colspan') &&
23
- parseInt((e.target as HTMLElement).getAttribute('colspan')!) > 1
24
- ) {
25
- widthPx = widthPx - columnWidths[col - 1];
26
- for (let i = 0; i < col; i++) {
27
- totalWidth += columnWidths[i];
28
- }
29
- } else {
30
- for (let i = 0; i < col; i++) {
31
- totalWidth += columnWidths[i];
32
- }
33
- }
34
- resizeStart.style.left = `${totalWidth + Math.max(60, widthPx) - 6}px`;
35
- resizeEnd.style.left = `${totalWidth + Math.max(60, widthPx) - 2}px`;
36
- }
37
- };
38
-
2
+ import { HeadItemEl } from './nile-grid.types';
3
+
4
+ /** listenToEventListeners
5
+ * @param nileGrid Grid element to attach listeners on
6
+ * @param onResize Handler for 'nile-column-resize'
7
+ * @param slotEl Slot element to watch for 'slotchange'
8
+ * @param _attachObserverAndLayout Callback to reattach observer + layout
9
+ * @returns void
10
+ */
39
11
  export const listenToEventListeners = (
40
12
  nileGrid: NileGrid,
41
13
  onResize: any,
42
14
  slotEl: any,
43
15
  _attachObserverAndLayout: any
44
16
  ) => {
45
- nileGrid.addEventListener('nile-resize', onResize);
17
+ nileGrid.addEventListener('nile-column-resize', onResize);
46
18
  nileGrid.addEventListener('nile-resize-start', () => {
47
19
  nileGrid.resizeStart.style.display = 'block';
48
20
  });
@@ -53,13 +25,20 @@ export const listenToEventListeners = (
53
25
  slotEl.addEventListener('slotchange', () => _attachObserverAndLayout());
54
26
  };
55
27
 
28
+ /** removeEventListeners
29
+ * @param nileGrid Grid element to detach listeners from
30
+ * @param onResize Handler previously attached to 'nile-column-resize'
31
+ * @param slotEl Slot element to remove 'slotchange' from
32
+ * @param _attachObserverAndLayout Callback reference used during attach
33
+ * @returns void
34
+ */
56
35
  export const removeEventListeners = (
57
36
  nileGrid: NileGrid,
58
37
  onResize: any,
59
38
  slotEl: any,
60
39
  _attachObserverAndLayout: any
61
40
  ) => {
62
- nileGrid.removeEventListener('nile-resize', onResize);
41
+ nileGrid.removeEventListener('nile-column-resize', onResize);
63
42
  nileGrid.removeEventListener('nile-resize-start', () => {
64
43
  nileGrid.resizeStart.style.display = 'block';
65
44
  });
@@ -70,6 +49,10 @@ export const removeEventListeners = (
70
49
  slotEl.removeEventListener('slotchange', () => _attachObserverAndLayout());
71
50
  };
72
51
 
52
+ /** getHead
53
+ * @param slotEl Slot element containing assigned nodes
54
+ * @returns <nile-grid-head> element or null
55
+ */
73
56
  export const getHead = (slotEl: any) => {
74
57
  const nodes = slotEl?.assignedElements() ?? [];
75
58
  return (
@@ -79,6 +62,10 @@ export const getHead = (slotEl: any) => {
79
62
  );
80
63
  };
81
64
 
65
+ /** getBody
66
+ * @param slotEl Slot element containing assigned nodes
67
+ * @returns <nile-grid-body> element or null
68
+ */
82
69
  export const getBody = (slotEl: any) => {
83
70
  const nodes = slotEl?.assignedElements() ?? [];
84
71
  return (
@@ -86,167 +73,4 @@ export const getBody = (slotEl: any) => {
86
73
  (n: any) => n.tagName.toLowerCase() === 'nile-grid-body'
87
74
  ) as HTMLElement) || null
88
75
  );
89
- };
90
-
91
- export const rebuildTemplate = (
92
- colCount: number,
93
- columnWidths: number[]
94
- ): string => {
95
- const parts: string[] = [];
96
-
97
- for (let i = 0; i < colCount; i++) {
98
- const explicit = columnWidths[i];
99
- if (i === colCount - 1) {
100
- parts.push(`minmax(${explicit}px, auto)`);
101
- } else {
102
- parts.push(`${explicit}px`);
103
- }
104
- }
105
- return parts.join(' ');
106
- };
107
-
108
- export const applyTemplate = (
109
- head: HTMLElement | null,
110
- body: HTMLElement | null,
111
- colTemplate: string
112
- ) => {
113
- if (head) head.style.gridTemplateColumns = colTemplate;
114
- if (body) {
115
- body.style.gridTemplateColumns = colTemplate;
116
- body.style.overflowX = 'auto';
117
- }
118
- };
119
-
120
- function computeHeadLayout(
121
- headRows: HTMLElement[],
122
- carryHead: number[],
123
- colCount: number
124
- ): number {
125
- headRows.forEach((row, rIdx) => {
126
- let c = 1;
127
- const cells = Array.from(
128
- row.querySelectorAll('nile-grid-head-item, nile-grid-cell')
129
- ) as HTMLElement[];
130
- const rStart = rIdx + 1;
131
-
132
- cells.forEach(cell => {
133
- while (carryHead[c - 1] > 0) c++;
134
- const colspan = Math.max(1, Number(cell.getAttribute('colspan')) || 1);
135
- const rowspan = Math.max(1, Number(cell.getAttribute('rowspan')) || 1);
136
-
137
- const cStart = c,
138
- cEnd = c + colspan;
139
- const rEnd = rStart + rowspan;
140
-
141
- cell.style.gridColumn = `${cStart} / ${cEnd}`;
142
- cell.style.gridRow = `${rStart} / ${rEnd}`;
143
- (cell as any).dataset.cStart = String(cStart);
144
-
145
- for (let k = 0; k < colspan; k++) {
146
- const idx = c - 1 + k;
147
- carryHead[idx] = Math.max(carryHead[idx] || 0, rowspan);
148
- }
149
- c = cEnd;
150
- colCount = Math.max(colCount, cEnd - 1);
151
- });
152
-
153
- for (let i = 0; i < carryHead.length; i++)
154
- if (carryHead[i] > 0) carryHead[i]--;
155
- });
156
- return colCount;
157
- }
158
-
159
- function computeBodyLayout(
160
- bodyRows: HTMLElement[],
161
- carryBody: number[],
162
- colCount: number
163
- ) {
164
- bodyRows.forEach((row, rIdx) => {
165
- let c = 1;
166
- const cells = Array.from(
167
- row.querySelectorAll('nile-grid-cell, nile-grid-header')
168
- ) as HTMLElement[];
169
- const rStart = rIdx + 1;
170
- let maxRowspan = 1;
171
-
172
- const bg = row.shadowRoot?.querySelector<HTMLElement>('[data-row-bg]');
173
- if (bg) bg.style.gridColumn = `1 / -1`;
174
-
175
- cells.forEach(cell => {
176
- while (carryBody[c - 1] > 0) c++;
177
- const colspan = Math.max(1, Number(cell.getAttribute('colspan')) || 1);
178
- const rowspan = Math.max(1, Number(cell.getAttribute('rowspan')) || 1);
179
-
180
- const cStart = c,
181
- cEnd = c + colspan;
182
- const rEnd = rStart + rowspan;
183
-
184
- cell.style.gridColumn = `${cStart} / ${cEnd}`;
185
- cell.style.gridRow = `${rStart} / ${rEnd}`;
186
- (cell as any).dataset.cStart = String(cStart);
187
-
188
- for (let k = 0; k < colspan; k++) {
189
- const idx = c - 1 + k;
190
- carryBody[idx] = Math.max(carryBody[idx] || 0, rowspan);
191
- }
192
- maxRowspan = Math.max(maxRowspan, rowspan);
193
- c = cEnd;
194
- colCount = Math.max(colCount, cEnd - 1);
195
- });
196
-
197
- if (bg) {
198
- const rEnd = rStart + maxRowspan;
199
- bg.style.gridRow = `${rStart} / ${rEnd}`;
200
- }
201
-
202
- for (let i = 0; i < carryBody.length; i++)
203
- if (carryBody[i] > 0) carryBody[i]--;
204
- });
205
-
206
- return colCount;
207
- }
208
-
209
- function computeColumnWidths(
210
- nileGrid: NileGrid,
211
- colCount: number,
212
- columnWidths: number[]
213
- ) {
214
- for (let col = 0; col < colCount; col++) {
215
- const containerWidth = (nileGrid.getBoundingClientRect().width || 1) - 2;
216
- columnWidths[col] =
217
- nileGrid.customWidths[col] || containerWidth / Math.max(colCount, 1);
218
- }
219
- }
220
-
221
- export const layout = (
222
- nileGrid: NileGrid,
223
- slotEl: any,
224
- ensureWidths: any,
225
- rebuildTemplate: any,
226
- applyTemplate: any,
227
- columnWidths: any
228
- ) => {
229
- const head = getHead(slotEl);
230
- const body = getBody(slotEl);
231
- if (!body) return;
232
-
233
- const headRows = head
234
- ? (Array.from(head.querySelectorAll('nile-grid-row')) as HTMLElement[])
235
- : [];
236
- const bodyRows = Array.from(
237
- body.querySelectorAll('nile-grid-row')
238
- ) as HTMLElement[];
239
-
240
- let colCount = 0;
241
-
242
- colCount = computeHeadLayout(headRows, [], colCount);
243
- colCount = computeBodyLayout(bodyRows, [], colCount);
244
-
245
- computeColumnWidths(nileGrid, colCount, columnWidths);
246
-
247
- ensureWidths(colCount);
248
- body.style.gridAutoRows = 'auto';
249
- body.style.overflowY = 'auto';
250
- nileGrid.colTemplate = rebuildTemplate(colCount, columnWidths);
251
- applyTemplate(head, body, nileGrid.colTemplate, nileGrid.colTemplate);
252
- };
76
+ };