@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
@@ -1,32 +1,12 @@
1
- export const resizeLinesHandler = (resizeStart, resizeEnd, col, widthPx, scrollHeight, columnWidths, e) => {
2
- resizeStart.style.display = 'block';
3
- resizeEnd.style.display = 'block';
4
- resizeStart.style.height = scrollHeight + 'px';
5
- resizeEnd.style.height = scrollHeight + 'px';
6
- if (col === 0) {
7
- resizeStart.style.left = `${Math.max(60, widthPx) - 6}px`;
8
- resizeEnd.style.left = `${Math.max(60, widthPx) - 2}px`;
9
- }
10
- else {
11
- let totalWidth = 0;
12
- if (e.target.getAttribute('colspan') &&
13
- parseInt(e.target.getAttribute('colspan')) > 1) {
14
- widthPx = widthPx - columnWidths[col - 1];
15
- for (let i = 0; i < col; i++) {
16
- totalWidth += columnWidths[i];
17
- }
18
- }
19
- else {
20
- for (let i = 0; i < col; i++) {
21
- totalWidth += columnWidths[i];
22
- }
23
- }
24
- resizeStart.style.left = `${totalWidth + Math.max(60, widthPx) - 6}px`;
25
- resizeEnd.style.left = `${totalWidth + Math.max(60, widthPx) - 2}px`;
26
- }
27
- };
1
+ /** listenToEventListeners
2
+ * @param nileGrid Grid element to attach listeners on
3
+ * @param onResize Handler for 'nile-column-resize'
4
+ * @param slotEl Slot element to watch for 'slotchange'
5
+ * @param _attachObserverAndLayout Callback to reattach observer + layout
6
+ * @returns void
7
+ */
28
8
  export const listenToEventListeners = (nileGrid, onResize, slotEl, _attachObserverAndLayout) => {
29
- nileGrid.addEventListener('nile-resize', onResize);
9
+ nileGrid.addEventListener('nile-column-resize', onResize);
30
10
  nileGrid.addEventListener('nile-resize-start', () => {
31
11
  nileGrid.resizeStart.style.display = 'block';
32
12
  });
@@ -36,8 +16,15 @@ export const listenToEventListeners = (nileGrid, onResize, slotEl, _attachObserv
36
16
  });
37
17
  slotEl.addEventListener('slotchange', () => _attachObserverAndLayout());
38
18
  };
19
+ /** removeEventListeners
20
+ * @param nileGrid Grid element to detach listeners from
21
+ * @param onResize Handler previously attached to 'nile-column-resize'
22
+ * @param slotEl Slot element to remove 'slotchange' from
23
+ * @param _attachObserverAndLayout Callback reference used during attach
24
+ * @returns void
25
+ */
39
26
  export const removeEventListeners = (nileGrid, onResize, slotEl, _attachObserverAndLayout) => {
40
- nileGrid.removeEventListener('nile-resize', onResize);
27
+ nileGrid.removeEventListener('nile-column-resize', onResize);
41
28
  nileGrid.removeEventListener('nile-resize-start', () => {
42
29
  nileGrid.resizeStart.style.display = 'block';
43
30
  });
@@ -47,124 +34,20 @@ export const removeEventListeners = (nileGrid, onResize, slotEl, _attachObserver
47
34
  });
48
35
  slotEl.removeEventListener('slotchange', () => _attachObserverAndLayout());
49
36
  };
37
+ /** getHead
38
+ * @param slotEl Slot element containing assigned nodes
39
+ * @returns <nile-grid-head> element or null
40
+ */
50
41
  export const getHead = (slotEl) => {
51
42
  const nodes = slotEl?.assignedElements() ?? [];
52
43
  return (nodes.find((n) => n.tagName.toLowerCase() === 'nile-grid-head') || null);
53
44
  };
45
+ /** getBody
46
+ * @param slotEl Slot element containing assigned nodes
47
+ * @returns <nile-grid-body> element or null
48
+ */
54
49
  export const getBody = (slotEl) => {
55
50
  const nodes = slotEl?.assignedElements() ?? [];
56
51
  return (nodes.find((n) => n.tagName.toLowerCase() === 'nile-grid-body') || null);
57
52
  };
58
- export const rebuildTemplate = (colCount, columnWidths) => {
59
- const parts = [];
60
- for (let i = 0; i < colCount; i++) {
61
- const explicit = columnWidths[i];
62
- if (i === colCount - 1) {
63
- parts.push(`minmax(${explicit}px, auto)`);
64
- }
65
- else {
66
- parts.push(`${explicit}px`);
67
- }
68
- }
69
- return parts.join(' ');
70
- };
71
- export const applyTemplate = (head, body, colTemplate) => {
72
- if (head)
73
- head.style.gridTemplateColumns = colTemplate;
74
- if (body) {
75
- body.style.gridTemplateColumns = colTemplate;
76
- body.style.overflowX = 'auto';
77
- }
78
- };
79
- function computeHeadLayout(headRows, carryHead, colCount) {
80
- headRows.forEach((row, rIdx) => {
81
- let c = 1;
82
- const cells = Array.from(row.querySelectorAll('nile-grid-head-item, nile-grid-cell'));
83
- const rStart = rIdx + 1;
84
- cells.forEach(cell => {
85
- while (carryHead[c - 1] > 0)
86
- c++;
87
- const colspan = Math.max(1, Number(cell.getAttribute('colspan')) || 1);
88
- const rowspan = Math.max(1, Number(cell.getAttribute('rowspan')) || 1);
89
- const cStart = c, cEnd = c + colspan;
90
- const rEnd = rStart + rowspan;
91
- cell.style.gridColumn = `${cStart} / ${cEnd}`;
92
- cell.style.gridRow = `${rStart} / ${rEnd}`;
93
- cell.dataset.cStart = String(cStart);
94
- for (let k = 0; k < colspan; k++) {
95
- const idx = c - 1 + k;
96
- carryHead[idx] = Math.max(carryHead[idx] || 0, rowspan);
97
- }
98
- c = cEnd;
99
- colCount = Math.max(colCount, cEnd - 1);
100
- });
101
- for (let i = 0; i < carryHead.length; i++)
102
- if (carryHead[i] > 0)
103
- carryHead[i]--;
104
- });
105
- return colCount;
106
- }
107
- function computeBodyLayout(bodyRows, carryBody, colCount) {
108
- bodyRows.forEach((row, rIdx) => {
109
- let c = 1;
110
- const cells = Array.from(row.querySelectorAll('nile-grid-cell, nile-grid-header'));
111
- const rStart = rIdx + 1;
112
- let maxRowspan = 1;
113
- const bg = row.shadowRoot?.querySelector('[data-row-bg]');
114
- if (bg)
115
- bg.style.gridColumn = `1 / -1`;
116
- cells.forEach(cell => {
117
- while (carryBody[c - 1] > 0)
118
- c++;
119
- const colspan = Math.max(1, Number(cell.getAttribute('colspan')) || 1);
120
- const rowspan = Math.max(1, Number(cell.getAttribute('rowspan')) || 1);
121
- const cStart = c, cEnd = c + colspan;
122
- const rEnd = rStart + rowspan;
123
- cell.style.gridColumn = `${cStart} / ${cEnd}`;
124
- cell.style.gridRow = `${rStart} / ${rEnd}`;
125
- cell.dataset.cStart = String(cStart);
126
- for (let k = 0; k < colspan; k++) {
127
- const idx = c - 1 + k;
128
- carryBody[idx] = Math.max(carryBody[idx] || 0, rowspan);
129
- }
130
- maxRowspan = Math.max(maxRowspan, rowspan);
131
- c = cEnd;
132
- colCount = Math.max(colCount, cEnd - 1);
133
- });
134
- if (bg) {
135
- const rEnd = rStart + maxRowspan;
136
- bg.style.gridRow = `${rStart} / ${rEnd}`;
137
- }
138
- for (let i = 0; i < carryBody.length; i++)
139
- if (carryBody[i] > 0)
140
- carryBody[i]--;
141
- });
142
- return colCount;
143
- }
144
- function computeColumnWidths(nileGrid, colCount, columnWidths) {
145
- for (let col = 0; col < colCount; col++) {
146
- const containerWidth = (nileGrid.getBoundingClientRect().width || 1) - 2;
147
- columnWidths[col] =
148
- nileGrid.customWidths[col] || containerWidth / Math.max(colCount, 1);
149
- }
150
- }
151
- export const layout = (nileGrid, slotEl, ensureWidths, rebuildTemplate, applyTemplate, columnWidths) => {
152
- const head = getHead(slotEl);
153
- const body = getBody(slotEl);
154
- if (!body)
155
- return;
156
- const headRows = head
157
- ? Array.from(head.querySelectorAll('nile-grid-row'))
158
- : [];
159
- const bodyRows = Array.from(body.querySelectorAll('nile-grid-row'));
160
- let colCount = 0;
161
- colCount = computeHeadLayout(headRows, [], colCount);
162
- colCount = computeBodyLayout(bodyRows, [], colCount);
163
- computeColumnWidths(nileGrid, colCount, columnWidths);
164
- ensureWidths(colCount);
165
- body.style.gridAutoRows = 'auto';
166
- body.style.overflowY = 'auto';
167
- nileGrid.colTemplate = rebuildTemplate(colCount, columnWidths);
168
- applyTemplate(head, body, nileGrid.colTemplate, nileGrid.colTemplate);
169
- };
170
53
  //# sourceMappingURL=nile-grid.utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nile-grid.utils.js","sourceRoot":"","sources":["../../../src/nile-grid/nile-grid.utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { NileGrid } from './nile-grid';\n\nexport const resizeLinesHandler = (\n resizeStart: any,\n resizeEnd: any,\n col: number,\n widthPx: number,\n scrollHeight: any,\n columnWidths: any,\n e: any\n) => {\n resizeStart.style.display = 'block';\n resizeEnd.style.display = 'block';\n resizeStart.style.height = scrollHeight + 'px';\n resizeEnd.style.height = scrollHeight + 'px';\n if (col === 0) {\n resizeStart.style.left = `${Math.max(60, widthPx) - 6}px`;\n resizeEnd.style.left = `${Math.max(60, widthPx) - 2}px`;\n } else {\n let totalWidth = 0;\n if (\n (e.target as HTMLElement).getAttribute('colspan') &&\n parseInt((e.target as HTMLElement).getAttribute('colspan')!) > 1\n ) {\n widthPx = widthPx - columnWidths[col - 1];\n for (let i = 0; i < col; i++) {\n totalWidth += columnWidths[i];\n }\n } else {\n for (let i = 0; i < col; i++) {\n totalWidth += columnWidths[i];\n }\n }\n resizeStart.style.left = `${totalWidth + Math.max(60, widthPx) - 6}px`;\n resizeEnd.style.left = `${totalWidth + Math.max(60, widthPx) - 2}px`;\n }\n};\n\nexport const listenToEventListeners = (\n nileGrid: NileGrid,\n onResize: any,\n slotEl: any,\n _attachObserverAndLayout: any\n) => {\n nileGrid.addEventListener('nile-resize', onResize);\n nileGrid.addEventListener('nile-resize-start', () => {\n nileGrid.resizeStart.style.display = 'block';\n });\n nileGrid.addEventListener('nile-resize-end', () => {\n nileGrid.resizeStart.style.display = 'none';\n nileGrid.resizeEnd.style.display = 'none';\n });\n slotEl.addEventListener('slotchange', () => _attachObserverAndLayout());\n};\n\nexport const removeEventListeners = (\n nileGrid: NileGrid,\n onResize: any,\n slotEl: any,\n _attachObserverAndLayout: any\n) => {\n nileGrid.removeEventListener('nile-resize', onResize);\n nileGrid.removeEventListener('nile-resize-start', () => {\n nileGrid.resizeStart.style.display = 'block';\n });\n nileGrid.removeEventListener('nile-resize-end', () => {\n nileGrid.resizeStart.style.display = 'none';\n nileGrid.resizeEnd.style.display = 'none';\n });\n slotEl.removeEventListener('slotchange', () => _attachObserverAndLayout());\n};\n\nexport const getHead = (slotEl: any) => {\n const nodes = slotEl?.assignedElements() ?? [];\n return (\n (nodes.find(\n (n: any) => n.tagName.toLowerCase() === 'nile-grid-head'\n ) as HTMLElement) || null\n );\n};\n\nexport const getBody = (slotEl: any) => {\n const nodes = slotEl?.assignedElements() ?? [];\n return (\n (nodes.find(\n (n: any) => n.tagName.toLowerCase() === 'nile-grid-body'\n ) as HTMLElement) || null\n );\n};\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\nexport const applyTemplate = (\n head: HTMLElement | null,\n body: HTMLElement | null,\n colTemplate: string\n) => {\n if (head) head.style.gridTemplateColumns = colTemplate;\n if (body) {\n body.style.gridTemplateColumns = colTemplate;\n body.style.overflowX = 'auto';\n }\n};\n\nfunction computeHeadLayout(\n headRows: HTMLElement[],\n carryHead: number[],\n colCount: number\n): number {\n headRows.forEach((row, rIdx) => {\n let c = 1;\n const cells = Array.from(\n row.querySelectorAll('nile-grid-head-item, nile-grid-cell')\n ) as HTMLElement[];\n const rStart = rIdx + 1;\n\n cells.forEach(cell => {\n while (carryHead[c - 1] > 0) c++;\n const colspan = Math.max(1, Number(cell.getAttribute('colspan')) || 1);\n const rowspan = Math.max(1, Number(cell.getAttribute('rowspan')) || 1);\n\n const cStart = c,\n cEnd = c + colspan;\n const rEnd = rStart + rowspan;\n\n cell.style.gridColumn = `${cStart} / ${cEnd}`;\n cell.style.gridRow = `${rStart} / ${rEnd}`;\n (cell as any).dataset.cStart = String(cStart);\n\n for (let k = 0; k < colspan; k++) {\n const idx = c - 1 + k;\n carryHead[idx] = Math.max(carryHead[idx] || 0, rowspan);\n }\n c = cEnd;\n colCount = Math.max(colCount, cEnd - 1);\n });\n\n for (let i = 0; i < carryHead.length; i++)\n if (carryHead[i] > 0) carryHead[i]--;\n });\n return colCount;\n}\n\nfunction computeBodyLayout(\n bodyRows: HTMLElement[],\n carryBody: number[],\n colCount: number\n) {\n bodyRows.forEach((row, rIdx) => {\n let c = 1;\n const cells = Array.from(\n row.querySelectorAll('nile-grid-cell, nile-grid-header')\n ) as HTMLElement[];\n const rStart = rIdx + 1;\n let maxRowspan = 1;\n\n const bg = row.shadowRoot?.querySelector<HTMLElement>('[data-row-bg]');\n if (bg) bg.style.gridColumn = `1 / -1`;\n\n cells.forEach(cell => {\n while (carryBody[c - 1] > 0) c++;\n const colspan = Math.max(1, Number(cell.getAttribute('colspan')) || 1);\n const rowspan = Math.max(1, Number(cell.getAttribute('rowspan')) || 1);\n\n const cStart = c,\n cEnd = c + colspan;\n const rEnd = rStart + rowspan;\n\n cell.style.gridColumn = `${cStart} / ${cEnd}`;\n cell.style.gridRow = `${rStart} / ${rEnd}`;\n (cell as any).dataset.cStart = String(cStart);\n\n for (let k = 0; k < colspan; k++) {\n const idx = c - 1 + k;\n carryBody[idx] = Math.max(carryBody[idx] || 0, rowspan);\n }\n maxRowspan = Math.max(maxRowspan, rowspan);\n c = cEnd;\n colCount = Math.max(colCount, cEnd - 1);\n });\n\n if (bg) {\n const rEnd = rStart + maxRowspan;\n bg.style.gridRow = `${rStart} / ${rEnd}`;\n }\n\n for (let i = 0; i < carryBody.length; i++)\n if (carryBody[i] > 0) carryBody[i]--;\n });\n\n return colCount;\n}\n\nfunction computeColumnWidths(\n nileGrid: NileGrid,\n colCount: number,\n columnWidths: number[]\n) {\n for (let col = 0; col < colCount; col++) {\n const containerWidth = (nileGrid.getBoundingClientRect().width || 1) - 2;\n columnWidths[col] =\n nileGrid.customWidths[col] || containerWidth / Math.max(colCount, 1);\n }\n}\n\nexport const layout = (\n nileGrid: NileGrid,\n slotEl: any,\n ensureWidths: any,\n rebuildTemplate: any,\n applyTemplate: any,\n columnWidths: any\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\n colCount = computeHeadLayout(headRows, [], colCount);\n colCount = computeBodyLayout(bodyRows, [], colCount);\n\n computeColumnWidths(nileGrid, colCount, columnWidths);\n\n ensureWidths(colCount);\n body.style.gridAutoRows = 'auto';\n body.style.overflowY = 'auto';\n nileGrid.colTemplate = rebuildTemplate(colCount, columnWidths);\n applyTemplate(head, body, nileGrid.colTemplate, nileGrid.colTemplate);\n};\n"]}
1
+ {"version":3,"file":"nile-grid.utils.js","sourceRoot":"","sources":["../../../src/nile-grid/nile-grid.utils.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,QAAkB,EAClB,QAAa,EACb,MAAW,EACX,wBAA6B,EAC7B,EAAE;IACF,QAAQ,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IAC1D,QAAQ,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAClD,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAChD,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAC5C,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAC5C,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,wBAAwB,EAAE,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,QAAkB,EAClB,QAAa,EACb,MAAW,EACX,wBAA6B,EAC7B,EAAE;IACF,QAAQ,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;IAC7D,QAAQ,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACrD,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IAC/C,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,GAAG,EAAE;QACnD,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAC5C,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAC5C,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,wBAAwB,EAAE,CAAC,CAAC;AAC7E,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,MAAW,EAAE,EAAE;IACrC,MAAM,KAAK,GAAG,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;IAC/C,OAAO,CACJ,KAAK,CAAC,IAAI,CACT,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,gBAAgB,CACzC,IAAI,IAAI,CAC1B,CAAC;AACJ,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,MAAW,EAAE,EAAE;IACrC,MAAM,KAAK,GAAG,MAAM,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;IAC/C,OAAO,CACJ,KAAK,CAAC,IAAI,CACT,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,gBAAgB,CACzC,IAAI,IAAI,CAC1B,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { NileGrid } from './nile-grid';\nimport { HeadItemEl } from './nile-grid.types';\n\n/** listenToEventListeners\n * @param nileGrid Grid element to attach listeners on\n * @param onResize Handler for 'nile-column-resize'\n * @param slotEl Slot element to watch for 'slotchange'\n * @param _attachObserverAndLayout Callback to reattach observer + layout\n * @returns void\n */\nexport const listenToEventListeners = (\n nileGrid: NileGrid,\n onResize: any,\n slotEl: any,\n _attachObserverAndLayout: any\n) => {\n nileGrid.addEventListener('nile-column-resize', onResize);\n nileGrid.addEventListener('nile-resize-start', () => {\n nileGrid.resizeStart.style.display = 'block';\n });\n nileGrid.addEventListener('nile-resize-end', () => {\n nileGrid.resizeStart.style.display = 'none';\n nileGrid.resizeEnd.style.display = 'none';\n });\n slotEl.addEventListener('slotchange', () => _attachObserverAndLayout());\n};\n\n/** removeEventListeners\n * @param nileGrid Grid element to detach listeners from\n * @param onResize Handler previously attached to 'nile-column-resize'\n * @param slotEl Slot element to remove 'slotchange' from\n * @param _attachObserverAndLayout Callback reference used during attach\n * @returns void\n */\nexport const removeEventListeners = (\n nileGrid: NileGrid,\n onResize: any,\n slotEl: any,\n _attachObserverAndLayout: any\n) => {\n nileGrid.removeEventListener('nile-column-resize', onResize);\n nileGrid.removeEventListener('nile-resize-start', () => {\n nileGrid.resizeStart.style.display = 'block';\n });\n nileGrid.removeEventListener('nile-resize-end', () => {\n nileGrid.resizeStart.style.display = 'none';\n nileGrid.resizeEnd.style.display = 'none';\n });\n slotEl.removeEventListener('slotchange', () => _attachObserverAndLayout());\n};\n\n/** getHead\n * @param slotEl Slot element containing assigned nodes\n * @returns <nile-grid-head> element or null\n */\nexport const getHead = (slotEl: any) => {\n const nodes = slotEl?.assignedElements() ?? [];\n return (\n (nodes.find(\n (n: any) => n.tagName.toLowerCase() === 'nile-grid-head'\n ) as HTMLElement) || null\n );\n};\n\n/** getBody\n * @param slotEl Slot element containing assigned nodes\n * @returns <nile-grid-body> element or null\n */\nexport const getBody = (slotEl: any) => {\n const nodes = slotEl?.assignedElements() ?? [];\n return (\n (nodes.find(\n (n: any) => n.tagName.toLowerCase() === 'nile-grid-body'\n ) as HTMLElement) || null\n );\n};"]}
@@ -0,0 +1,25 @@
1
+ import { NileGrid } from './nile-grid';
2
+ /** computeColumnWidths
3
+ * @param nileGrid Grid instance (reads minColumnWidth, columnWidths)
4
+ * @param colCount Total columns
5
+ * @param columnWidths Mutable widths array to fill/update
6
+ * @param slotEl Slot element (to read head for desired widths)
7
+ * @returns void
8
+ */
9
+ export declare function computeColumnWidths(nileGrid: NileGrid, colCount: number, columnWidths: number[], slotEl: any): void;
10
+ /**
11
+ * @param columnWidths Current widths array
12
+ * @param minCol Minimum column width
13
+ * @returns Total reducible pixels
14
+ */
15
+ export declare function totalReducible(widths: number[], start: number, floor: number): number;
16
+ /**
17
+ * @param columnWidths Current widths
18
+ * @param amount Pixels to remove from rightmost columns
19
+ */
20
+ export declare function takeFromRight(widths: number[], start: number, needInit: number, floor: number): number;
21
+ /**
22
+ * @param columnWidths Current widths
23
+ * @param amount Pixels to add to rightmost columns
24
+ */
25
+ export declare function giveToRight(widths: number[], start: number, giveInit: number): number;
@@ -0,0 +1,301 @@
1
+ import { applyColumnsTemplate } from './nile-grid.layout';
2
+ import { getHead } from './nile-grid.utils';
3
+ /** computeColumnWidths
4
+ * @param nileGrid Grid instance (reads minColumnWidth, columnWidths)
5
+ * @param colCount Total columns
6
+ * @param columnWidths Mutable widths array to fill/update
7
+ * @param slotEl Slot element (to read head for desired widths)
8
+ * @returns void
9
+ */
10
+ export function computeColumnWidths(nileGrid, colCount, columnWidths, slotEl) {
11
+ const minCol = nileGrid.minColumnWidth;
12
+ const containerWidth = getContainerWidth(nileGrid);
13
+ const desired = readDesiredFromHead(slotEl, colCount, containerWidth, nileGrid, columnWidths);
14
+ const isSeeded = seedWidthsFromDesired(desired, columnWidths, minCol);
15
+ distributeFlex(columnWidths, isSeeded, containerWidth, minCol);
16
+ normalizeToContainer(columnWidths, containerWidth, minCol);
17
+ clampAndRound(columnWidths, minCol);
18
+ applyColumnsTemplate(nileGrid, columnWidths);
19
+ }
20
+ /** getContainerWidth
21
+ * @param nileGrid Grid root element
22
+ * @returns Numeric container width in pixels (accounting for padding/offset)
23
+ */
24
+ function getContainerWidth(nileGrid) {
25
+ return Math.max(0, (nileGrid.getBoundingClientRect().width || 0) - 4);
26
+ }
27
+ /**
28
+ * @param slotEl The slot element containing head rows
29
+ * @param colCount Number of columns
30
+ * @param containerWidth Width of the parent container
31
+ * @param prevWidths Previously computed column widths
32
+ * @returns Array of desired column widths
33
+ */
34
+ function readDesiredFromHead(slotEl, colCount, containerWidth, nileGrid, prevWidths) {
35
+ const desired = Array(colCount).fill(null);
36
+ const head = getHead(slotEl);
37
+ if (head)
38
+ fillDesiredFromHeadRows(head, desired, colCount, containerWidth);
39
+ if (prevWidths?.length === colCount)
40
+ fillFromPrevWidths(desired, prevWidths, nileGrid);
41
+ return desired;
42
+ }
43
+ /**
44
+ * @param head Head element containing grid header rows
45
+ * @param desired Desired widths array to fill
46
+ * @param colCount Column count
47
+ * @param containerWidth Grid container width
48
+ */
49
+ function fillDesiredFromHeadRows(head, desired, colCount, containerWidth) {
50
+ const headRows = [...head.children].filter(el => el.tagName.toLowerCase() === 'nile-grid-row');
51
+ for (const row of headRows) {
52
+ fillFromHeadRow(row, desired, colCount, containerWidth);
53
+ }
54
+ }
55
+ /**
56
+ * @param row A single header row element
57
+ * @param desired Desired widths array
58
+ * @param colCount Total number of columns
59
+ * @param containerWidth Container width
60
+ */
61
+ function fillFromHeadRow(row, desired, colCount, containerWidth) {
62
+ const items = [...row.children].filter(el => el.tagName.toLowerCase() === 'nile-grid-head-item');
63
+ const parsed = items
64
+ .map(h => parseHeadItemWidth(h, containerWidth))
65
+ .filter(x => x.cw != null);
66
+ parsed.sort((a, b) => a.colspan - b.colspan);
67
+ parsed.forEach(({ cStart, colspan, cw }) => {
68
+ assignWidth(desired, cStart, colspan, cw, colCount);
69
+ });
70
+ }
71
+ /**
72
+ * @param h Header item element
73
+ * @param containerWidth Width of parent container
74
+ * @returns Parsed object containing start, colspan, and computed width
75
+ */
76
+ function parseHeadItemWidth(h, containerWidth) {
77
+ const cStart = Number(h.dataset?.cStart) || 1;
78
+ const colspan = Math.max(1, Number(h.getAttribute('colspan')) || 1);
79
+ const raw = h.width ?? h.getAttribute('width') ?? null;
80
+ const cw = parseCustomWidth(raw, containerWidth);
81
+ return { cStart, colspan, cw };
82
+ }
83
+ /**
84
+ * @param desired Array of desired widths
85
+ * @param cStart Start column index
86
+ * @param colspan Column span value
87
+ * @param cw Computed width value
88
+ * @param colCount Total column count
89
+ */
90
+ function assignWidth(desired, cStart, colspan, cw, colCount) {
91
+ const perCol = Math.round(cw / colspan);
92
+ for (let k = 0; k < colspan; k++) {
93
+ const idx = cStart - 1 + k;
94
+ if (idx >= 0 && idx < colCount && desired[idx] == null) {
95
+ desired[idx] = perCol;
96
+ }
97
+ }
98
+ }
99
+ /**
100
+ * @param desired Desired widths array
101
+ * @param prevWidths Previous column widths
102
+ */
103
+ function fillFromPrevWidths(desired, prevWidths, nileGrid) {
104
+ for (let i = 0; i < prevWidths.length; i++) {
105
+ if (desired[i] == null && Number.isFinite(prevWidths[i])) {
106
+ desired[i] = Math.max(nileGrid.minColumnWidth, Math.round(prevWidths[i]));
107
+ }
108
+ }
109
+ }
110
+ /** parseCustomWidth
111
+ * @param raw User-specified width (number | string like "120px" or "20%")
112
+ * @param containerWidth Container width for % resolution
113
+ * @returns Width in pixels or null if invalid
114
+ */
115
+ function parseCustomWidth(raw, containerWidth) {
116
+ if (raw == null)
117
+ return null;
118
+ if (typeof raw === 'number' && Number.isFinite(raw))
119
+ return raw;
120
+ const s = String(raw).trim().toLowerCase();
121
+ if (!s)
122
+ return null;
123
+ if (s.endsWith('px')) {
124
+ const v = parseFloat(s);
125
+ return Number.isFinite(v) ? v : null;
126
+ }
127
+ if (s.endsWith('%')) {
128
+ const v = parseFloat(s);
129
+ return Number.isFinite(v) ? (v / 100) * containerWidth : null;
130
+ }
131
+ const v = parseFloat(s);
132
+ return Number.isFinite(v) ? v : null;
133
+ }
134
+ /** seedWidthsFromDesired
135
+ * @param desired Array of desired widths (px) or nulls
136
+ * @param columnWidths Output array to seed (mutated)
137
+ * @param minCol Minimum per-column width
138
+ * @returns Boolean[] flags indicating which columns were seeded
139
+ */
140
+ function seedWidthsFromDesired(desired, columnWidths, minCol) {
141
+ const isSeeded = Array(desired.length).fill(false);
142
+ for (let i = 0; i < desired.length; i++) {
143
+ const w = desired[i] ?? null;
144
+ columnWidths[i] =
145
+ w != null && !Number.isNaN(w) ? Math.max(minCol, Number(w)) : 0;
146
+ isSeeded[i] = w != null && !Number.isNaN(w);
147
+ }
148
+ return isSeeded;
149
+ }
150
+ /** distributeFlex
151
+ * @param columnWidths Mutable widths array
152
+ * @param isSeeded Boolean[] indicating fixed/seeded columns
153
+ * @param containerWidth Total width to fill
154
+ * @param minCol Minimum width per flexible column
155
+ * @returns void
156
+ */
157
+ function distributeFlex(columnWidths, isSeeded, containerWidth, minCol) {
158
+ const sumSeed = columnWidths.reduce((a, b) => a + b, 0);
159
+ const remaining = containerWidth - sumSeed;
160
+ const flexIdxs = Array.from({ length: columnWidths.length }, (_, i) => i).filter(i => !isSeeded[i]);
161
+ if (flexIdxs.length === 0)
162
+ return;
163
+ const each = remaining / flexIdxs.length;
164
+ for (const i of flexIdxs)
165
+ columnWidths[i] = Math.max(minCol, each);
166
+ }
167
+ // Normalization (container fitting): adjust total column widths to match the container width proportionally.
168
+ /**
169
+ * @param columnWidths Array of current column widths
170
+ * @param containerWidth Total grid container width
171
+ * @param minCol Minimum allowed column width
172
+ */
173
+ function normalizeToContainer(columnWidths, containerWidth, minCol) {
174
+ let total = sumWidths(columnWidths);
175
+ if (total < containerWidth) {
176
+ expandWidths(columnWidths, containerWidth, total);
177
+ }
178
+ else if (total > containerWidth) {
179
+ shrinkWidths(columnWidths, containerWidth, total, minCol);
180
+ }
181
+ }
182
+ /**
183
+ * @param widths Array of column widths
184
+ * @returns Sum of all column widths
185
+ */
186
+ function sumWidths(widths) {
187
+ return widths.reduce((a, b) => a + b, 0);
188
+ }
189
+ /**
190
+ * @param columnWidths Current column widths
191
+ * @param containerWidth Container total width
192
+ * @param total Current total width
193
+ */
194
+ function expandWidths(columnWidths, containerWidth, total) {
195
+ if (!columnWidths.length)
196
+ return;
197
+ const add = containerWidth - total;
198
+ const weight = total || 1;
199
+ for (let i = 0; i < columnWidths.length; i++) {
200
+ columnWidths[i] += add * (columnWidths[i] / weight);
201
+ }
202
+ }
203
+ /**
204
+ * @param columnWidths Current widths
205
+ * @param containerWidth Container width
206
+ * @param total Current total
207
+ * @param minCol Minimum width constraint
208
+ */
209
+ function shrinkWidths(columnWidths, containerWidth, total, minCol) {
210
+ let need = total - containerWidth;
211
+ for (let iter = 0; iter < 8 && need > 0.5; iter++) {
212
+ const { candidates, weightSum } = collectReducible(columnWidths, minCol);
213
+ if (!candidates.length || weightSum <= 0)
214
+ break;
215
+ const reduced = reduceWidths(columnWidths, candidates, weightSum, need, minCol);
216
+ need -= reduced;
217
+ if (reduced < 0.5)
218
+ break;
219
+ }
220
+ }
221
+ /**
222
+ * @param columnWidths Current widths
223
+ * @param minCol Minimum column width
224
+ * @returns Reducible column indexes and weight sum
225
+ */
226
+ function collectReducible(columnWidths, minCol) {
227
+ const candidates = [];
228
+ let weightSum = 0;
229
+ for (let i = 0; i < columnWidths.length; i++) {
230
+ const reducible = Math.max(0, columnWidths[i] - minCol);
231
+ if (reducible > 0) {
232
+ candidates.push(i);
233
+ weightSum += columnWidths[i];
234
+ }
235
+ }
236
+ return { candidates, weightSum };
237
+ }
238
+ /**
239
+ * @param columnWidths Current widths array
240
+ * @param candidates Reducible column indexes
241
+ * @param weightSum Sum of reducible widths
242
+ * @param need Total amount to reduce
243
+ * @param minCol Minimum width
244
+ * @returns Total reduced width
245
+ */
246
+ function reduceWidths(columnWidths, candidates, weightSum, need, minCol) {
247
+ let reduced = 0;
248
+ for (const i of candidates) {
249
+ const reducible = Math.max(0, columnWidths[i] - minCol);
250
+ const share = columnWidths[i] / weightSum;
251
+ const cut = Math.min(reducible, need * share);
252
+ columnWidths[i] -= cut;
253
+ reduced += cut;
254
+ }
255
+ return reduced;
256
+ }
257
+ function clampAndRound(columnWidths, minCol) {
258
+ for (let i = 0; i < columnWidths.length; i++) {
259
+ columnWidths[i] = Math.max(minCol, Math.round(columnWidths[i]));
260
+ }
261
+ }
262
+ /**
263
+ * @param columnWidths Current widths array
264
+ * @param minCol Minimum column width
265
+ * @returns Total reducible pixels
266
+ */
267
+ export function totalReducible(widths, start, floor) {
268
+ let sum = 0;
269
+ for (let i = start; i < widths.length; i++)
270
+ sum += Math.max(0, widths[i] - floor);
271
+ return sum;
272
+ }
273
+ /**
274
+ * @param columnWidths Current widths
275
+ * @param amount Pixels to remove from rightmost columns
276
+ */
277
+ export function takeFromRight(widths, start, needInit, floor) {
278
+ let need = needInit;
279
+ for (let i = start; i < widths.length && need > 0; i++) {
280
+ const reducible = Math.max(0, widths[i] - floor);
281
+ const cut = Math.min(reducible, need);
282
+ if (cut > 0) {
283
+ widths[i] -= cut;
284
+ need -= cut;
285
+ }
286
+ }
287
+ return need;
288
+ }
289
+ /**
290
+ * @param columnWidths Current widths
291
+ * @param amount Pixels to add to rightmost columns
292
+ */
293
+ export function giveToRight(widths, start, giveInit) {
294
+ let give = giveInit;
295
+ if (start < widths.length && give > 0) {
296
+ widths[start] += give;
297
+ give = 0;
298
+ }
299
+ return give;
300
+ }
301
+ //# sourceMappingURL=nile-grid.width.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nile-grid.width.js","sourceRoot":"","sources":["../../../src/nile-grid/nile-grid.width.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAkB,EAClB,QAAgB,EAChB,YAAsB,EACtB,MAAW;IAEX,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC;IACvC,MAAM,cAAc,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,mBAAmB,CACjC,MAAM,EACN,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,YAAY,CACb,CAAC;IACF,MAAM,QAAQ,GAAG,qBAAqB,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAEtE,cAAc,CAAC,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;IAC/D,oBAAoB,CAAC,YAAY,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;IAC3D,aAAa,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACpC,oBAAoB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,SAAS,iBAAiB,CAAC,QAAkB;IAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,qBAAqB,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mBAAmB,CAC1B,MAAW,EACX,QAAgB,EAChB,cAAsB,EACtB,QAAkB,EAClB,UAAqB;IAErB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAuB,CAAC;IACnD,IAAI,IAAI;QAAE,uBAAuB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC3E,IAAI,UAAU,EAAE,MAAM,KAAK,QAAQ;QAAE,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACvF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,SAAS,uBAAuB,CAC9B,IAAiB,EACjB,OAA0B,EAC1B,QAAgB,EAChB,cAAsB;IAEtB,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CACxC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,eAAe,CAClC,CAAC;IACnB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CACtB,GAAgB,EAChB,OAA0B,EAC1B,QAAgB,EAChB,cAAsB;IAEtB,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CACpC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,qBAAqB,CACzC,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK;SACjB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;SAC/C,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;IAC7B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE;QACzC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAG,EAAE,QAAQ,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,CAAa,EAAE,cAAsB;IAC/D,MAAM,MAAM,GAAG,MAAM,CAAE,CAAS,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,MAAM,GAAG,GAAI,CAAS,CAAC,KAAK,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IAChE,MAAM,EAAE,GAAG,gBAAgB,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACjD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACjC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAClB,OAA0B,EAC1B,MAAc,EACd,OAAe,EACf,EAAU,EACV,QAAgB;IAEhB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QACxB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,kBAAkB,CAAC,OAA0B,EAAE,UAAoB,EAAE,QAAkB;IAC9F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;YAC1D,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,GAAQ,EAAE,cAAsB;IACxD,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAChE,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpB,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvC,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;IAChE,CAAC;IACD,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAC5B,OAA0B,EAC1B,YAAsB,EACtB,MAAc;IAEd,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAC7B,YAAY,CAAC,CAAC,CAAC;YACb,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CACrB,YAAsB,EACtB,QAAmB,EACnB,cAAsB,EACtB,MAAc;IAEd,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,cAAc,GAAG,OAAO,CAAC;IAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CACzB,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,EAC/B,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CACZ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAElC,MAAM,IAAI,GAAG,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,QAAQ;QAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACrE,CAAC;AAGD,6GAA6G;AAC7G;;;;GAIG;AACH,SAAS,oBAAoB,CAC3B,YAAsB,EACtB,cAAsB,EACtB,MAAc;IAEd,IAAI,KAAK,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IACpC,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;QAC3B,YAAY,CAAC,YAAY,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;SAAM,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;QAClC,YAAY,CAAC,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,MAAgB;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAGD;;;;GAIG;AACH,SAAS,YAAY,CACnB,YAAsB,EACtB,cAAsB,EACtB,KAAa;IAEb,IAAI,CAAC,YAAY,CAAC,MAAM;QAAE,OAAO;IACjC,MAAM,GAAG,GAAG,cAAc,GAAG,KAAK,CAAC;IACnC,MAAM,MAAM,GAAG,KAAK,IAAI,CAAC,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CACnB,YAAsB,EACtB,cAAsB,EACtB,KAAa,EACb,MAAc;IAEd,IAAI,IAAI,GAAG,KAAK,GAAG,cAAc,CAAC;IAClC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;QAClD,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,SAAS,IAAI,CAAC;YAAE,MAAM;QAChD,MAAM,OAAO,GAAG,YAAY,CAC1B,YAAY,EACZ,UAAU,EACV,SAAS,EACT,IAAI,EACJ,MAAM,CACP,CAAC;QACF,IAAI,IAAI,OAAO,CAAC;QAChB,IAAI,OAAO,GAAG,GAAG;YAAE,MAAM;IAC3B,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,YAAsB,EAAE,MAAc;IAC9D,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QACxD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,SAAS,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AACnC,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CACnB,YAAsB,EACtB,UAAoB,EACpB,SAAiB,EACjB,IAAY,EACZ,MAAc;IAEd,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,GAAG,KAAK,CAAC,CAAC;QAC9C,YAAY,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QACvB,OAAO,IAAI,GAAG,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,YAAsB,EAAE,MAAc;IAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAgB,EAAE,KAAa,EAAE,KAAa;IAC3E,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;QACxC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IACxC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAgB,EAChB,KAAa,EACb,QAAgB,EAChB,KAAa;IAEb,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACtC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;YACjB,IAAI,IAAI,GAAG,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,MAAgB,EAAE,KAAa,EAAE,QAAgB;IAC3E,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;QACtB,IAAI,GAAG,CAAC,CAAC;IACX,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { NileGrid } from './nile-grid';\nimport { HeadItemEl } from './nile-grid.types';\nimport { applyColumnsTemplate } from './nile-grid.layout';\nimport { getHead } from './nile-grid.utils';\n\n/** computeColumnWidths\n * @param nileGrid Grid instance (reads minColumnWidth, columnWidths)\n * @param colCount Total columns\n * @param columnWidths Mutable widths array to fill/update\n * @param slotEl Slot element (to read head for desired widths)\n * @returns void\n */\nexport function computeColumnWidths(\n nileGrid: NileGrid,\n colCount: number,\n columnWidths: number[],\n slotEl: any\n) {\n const minCol = nileGrid.minColumnWidth;\n const containerWidth = getContainerWidth(nileGrid);\n const desired = readDesiredFromHead(\n slotEl,\n colCount,\n containerWidth,\n nileGrid,\n columnWidths\n );\n const isSeeded = seedWidthsFromDesired(desired, columnWidths, minCol);\n\n distributeFlex(columnWidths, isSeeded, containerWidth, minCol);\n normalizeToContainer(columnWidths, containerWidth, minCol);\n clampAndRound(columnWidths, minCol);\n applyColumnsTemplate(nileGrid, columnWidths);\n}\n\n/** getContainerWidth\n * @param nileGrid Grid root element\n * @returns Numeric container width in pixels (accounting for padding/offset)\n */\nfunction getContainerWidth(nileGrid: NileGrid): number {\n return Math.max(0, (nileGrid.getBoundingClientRect().width || 0) - 4);\n}\n\n/**\n * @param slotEl The slot element containing head rows\n * @param colCount Number of columns\n * @param containerWidth Width of the parent container\n * @param prevWidths Previously computed column widths\n * @returns Array of desired column widths\n */\nfunction readDesiredFromHead(\n slotEl: any,\n colCount: number,\n containerWidth: number,\n nileGrid: NileGrid,\n prevWidths?: number[]\n): (number | null)[] {\n const desired = Array(colCount).fill(null);\n const head = getHead(slotEl) as HTMLElement | null;\n if (head) fillDesiredFromHeadRows(head, desired, colCount, containerWidth);\n if (prevWidths?.length === colCount) fillFromPrevWidths(desired, prevWidths, nileGrid);\n return desired;\n}\n\n/**\n * @param head Head element containing grid header rows\n * @param desired Desired widths array to fill\n * @param colCount Column count\n * @param containerWidth Grid container width\n */\nfunction fillDesiredFromHeadRows(\n head: HTMLElement,\n desired: (number | null)[],\n colCount: number,\n containerWidth: number\n) {\n const headRows = [...head.children].filter(\n el => el.tagName.toLowerCase() === 'nile-grid-row'\n ) as HTMLElement[];\n for (const row of headRows) {\n fillFromHeadRow(row, desired, colCount, containerWidth);\n }\n}\n\n/**\n * @param row A single header row element\n * @param desired Desired widths array\n * @param colCount Total number of columns\n * @param containerWidth Container width\n */\nfunction fillFromHeadRow(\n row: HTMLElement,\n desired: (number | null)[],\n colCount: number,\n containerWidth: number\n) {\n const items = [...row.children].filter(\n el => el.tagName.toLowerCase() === 'nile-grid-head-item'\n ) as HeadItemEl[];\n const parsed = items\n .map(h => parseHeadItemWidth(h, containerWidth))\n .filter(x => x.cw != null);\n parsed.sort((a, b) => a.colspan - b.colspan);\n parsed.forEach(({ cStart, colspan, cw }) => {\n assignWidth(desired, cStart, colspan, cw!, colCount);\n });\n}\n\n/**\n * @param h Header item element\n * @param containerWidth Width of parent container\n * @returns Parsed object containing start, colspan, and computed width\n */\nfunction parseHeadItemWidth(h: HeadItemEl, containerWidth: number) {\n const cStart = Number((h as any).dataset?.cStart) || 1;\n const colspan = Math.max(1, Number(h.getAttribute('colspan')) || 1);\n const raw = (h as any).width ?? h.getAttribute('width') ?? null;\n const cw = parseCustomWidth(raw, containerWidth);\n return { cStart, colspan, cw };\n}\n\n/**\n * @param desired Array of desired widths\n * @param cStart Start column index\n * @param colspan Column span value\n * @param cw Computed width value\n * @param colCount Total column count\n */\nfunction assignWidth(\n desired: (number | null)[],\n cStart: number,\n colspan: number,\n cw: number,\n colCount: number\n) {\n const perCol = Math.round(cw / colspan);\n for (let k = 0; k < colspan; k++) {\n const idx = cStart - 1 + k;\n if (idx >= 0 && idx < colCount && desired[idx] == null) {\n desired[idx] = perCol;\n }\n }\n}\n\n/**\n * @param desired Desired widths array\n * @param prevWidths Previous column widths\n */\nfunction fillFromPrevWidths(desired: (number | null)[], prevWidths: number[], nileGrid: NileGrid) {\n for (let i = 0; i < prevWidths.length; i++) {\n if (desired[i] == null && Number.isFinite(prevWidths[i]!)) {\n desired[i] = Math.max(nileGrid.minColumnWidth, Math.round(prevWidths[i]!));\n }\n }\n}\n\n/** parseCustomWidth\n * @param raw User-specified width (number | string like \"120px\" or \"20%\")\n * @param containerWidth Container width for % resolution\n * @returns Width in pixels or null if invalid\n */\nfunction parseCustomWidth(raw: any, containerWidth: number): number | null {\n if (raw == null) return null;\n if (typeof raw === 'number' && Number.isFinite(raw)) return raw;\n const s = String(raw).trim().toLowerCase();\n if (!s) return null;\n\n if (s.endsWith('px')) {\n const v = parseFloat(s);\n return Number.isFinite(v) ? v : null;\n }\n if (s.endsWith('%')) {\n const v = parseFloat(s);\n return Number.isFinite(v) ? (v / 100) * containerWidth : null;\n }\n const v = parseFloat(s);\n return Number.isFinite(v) ? v : null;\n}\n\n/** seedWidthsFromDesired\n * @param desired Array of desired widths (px) or nulls\n * @param columnWidths Output array to seed (mutated)\n * @param minCol Minimum per-column width\n * @returns Boolean[] flags indicating which columns were seeded\n */\nfunction seedWidthsFromDesired(\n desired: (number | null)[],\n columnWidths: number[],\n minCol: number\n): boolean[] {\n const isSeeded = Array(desired.length).fill(false);\n\n for (let i = 0; i < desired.length; i++) {\n const w = desired[i] ?? null;\n columnWidths[i] =\n w != null && !Number.isNaN(w) ? Math.max(minCol, Number(w)) : 0;\n isSeeded[i] = w != null && !Number.isNaN(w);\n }\n return isSeeded;\n}\n\n/** distributeFlex\n * @param columnWidths Mutable widths array\n * @param isSeeded Boolean[] indicating fixed/seeded columns\n * @param containerWidth Total width to fill\n * @param minCol Minimum width per flexible column\n * @returns void\n */\nfunction distributeFlex(\n columnWidths: number[],\n isSeeded: boolean[],\n containerWidth: number,\n minCol: number\n) {\n const sumSeed = columnWidths.reduce((a, b) => a + b, 0);\n const remaining = containerWidth - sumSeed;\n const flexIdxs = Array.from(\n { length: columnWidths.length },\n (_, i) => i\n ).filter(i => !isSeeded[i]);\n if (flexIdxs.length === 0) return;\n\n const each = remaining / flexIdxs.length;\n for (const i of flexIdxs) columnWidths[i] = Math.max(minCol, each);\n}\n\n\n// Normalization (container fitting): adjust total column widths to match the container width proportionally.\n/**\n * @param columnWidths Array of current column widths\n * @param containerWidth Total grid container width\n * @param minCol Minimum allowed column width\n */\nfunction normalizeToContainer(\n columnWidths: number[],\n containerWidth: number,\n minCol: number\n) {\n let total = sumWidths(columnWidths);\n if (total < containerWidth) {\n expandWidths(columnWidths, containerWidth, total);\n } else if (total > containerWidth) {\n shrinkWidths(columnWidths, containerWidth, total, minCol);\n }\n}\n\n/**\n * @param widths Array of column widths\n * @returns Sum of all column widths\n */\nfunction sumWidths(widths: number[]) {\n return widths.reduce((a, b) => a + b, 0);\n}\n\n\n/**\n * @param columnWidths Current column widths\n * @param containerWidth Container total width\n * @param total Current total width\n */\nfunction expandWidths(\n columnWidths: number[],\n containerWidth: number,\n total: number\n) {\n if (!columnWidths.length) return;\n const add = containerWidth - total;\n const weight = total || 1;\n for (let i = 0; i < columnWidths.length; i++) {\n columnWidths[i] += add * (columnWidths[i] / weight);\n }\n}\n\n/**\n * @param columnWidths Current widths\n * @param containerWidth Container width\n * @param total Current total\n * @param minCol Minimum width constraint\n */\nfunction shrinkWidths(\n columnWidths: number[],\n containerWidth: number,\n total: number,\n minCol: number\n) {\n let need = total - containerWidth;\n for (let iter = 0; iter < 8 && need > 0.5; iter++) {\n const { candidates, weightSum } = collectReducible(columnWidths, minCol);\n if (!candidates.length || weightSum <= 0) break;\n const reduced = reduceWidths(\n columnWidths,\n candidates,\n weightSum,\n need,\n minCol\n );\n need -= reduced;\n if (reduced < 0.5) break;\n }\n}\n\n/**\n * @param columnWidths Current widths\n * @param minCol Minimum column width\n * @returns Reducible column indexes and weight sum\n */\nfunction collectReducible(columnWidths: number[], minCol: number) {\n const candidates: number[] = [];\n let weightSum = 0;\n for (let i = 0; i < columnWidths.length; i++) {\n const reducible = Math.max(0, columnWidths[i] - minCol);\n if (reducible > 0) {\n candidates.push(i);\n weightSum += columnWidths[i];\n }\n }\n return { candidates, weightSum };\n}\n\n/**\n * @param columnWidths Current widths array\n * @param candidates Reducible column indexes\n * @param weightSum Sum of reducible widths\n * @param need Total amount to reduce\n * @param minCol Minimum width\n * @returns Total reduced width\n */\nfunction reduceWidths(\n columnWidths: number[],\n candidates: number[],\n weightSum: number,\n need: number,\n minCol: number\n) {\n let reduced = 0;\n for (const i of candidates) {\n const reducible = Math.max(0, columnWidths[i] - minCol);\n const share = columnWidths[i] / weightSum;\n const cut = Math.min(reducible, need * share);\n columnWidths[i] -= cut;\n reduced += cut;\n }\n return reduced;\n}\n\nfunction clampAndRound(columnWidths: number[], minCol: number) {\n for (let i = 0; i < columnWidths.length; i++) {\n columnWidths[i] = Math.max(minCol, Math.round(columnWidths[i]));\n }\n}\n\n/**\n * @param columnWidths Current widths array\n * @param minCol Minimum column width\n * @returns Total reducible pixels\n */\nexport function totalReducible(widths: number[], start: number, floor: number) {\n let sum = 0;\n for (let i = start; i < widths.length; i++)\n sum += Math.max(0, widths[i] - floor);\n return sum;\n}\n\n/**\n * @param columnWidths Current widths\n * @param amount Pixels to remove from rightmost columns\n */\nexport function takeFromRight(\n widths: number[],\n start: number,\n needInit: number,\n floor: number\n) {\n let need = needInit;\n for (let i = start; i < widths.length && need > 0; i++) {\n const reducible = Math.max(0, widths[i] - floor);\n const cut = Math.min(reducible, need);\n if (cut > 0) {\n widths[i] -= cut;\n need -= cut;\n }\n }\n return need;\n}\n\n/**\n * @param columnWidths Current widths\n * @param amount Pixels to add to rightmost columns\n */\nexport function giveToRight(widths: number[], start: number, giveInit: number) {\n let give = giveInit;\n if (start < widths.length && give > 0) {\n widths[start] += give;\n give = 0;\n }\n return give;\n}"]}
@@ -1,6 +1,6 @@
1
1
  // Version utility - placeholders will be replaced during build
2
- export const NILE_ELEMENTS_VERSION = '1.2.1';
3
- export const NILE_VERSION = '1.0.8';
2
+ export const NILE_ELEMENTS_VERSION = '1.2.2';
3
+ export const NILE_VERSION = '1.0.9';
4
4
  // Set global versions for runtime access
5
5
  if (typeof window !== 'undefined') {
6
6
  window.nileElementsVersion = NILE_ELEMENTS_VERSION;
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,MAAM,CAAC,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AACjE,MAAM,CAAC,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAE/C,yCAAyC;AACzC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IACjC,MAAc,CAAC,mBAAmB,GAAG,qBAAqB,CAAC;IAC3D,MAAc,CAAC,WAAW,GAAG,YAAY,CAAC;AAC7C,CAAC","sourcesContent":["// Version utility - placeholders will be replaced during build\nexport const NILE_ELEMENTS_VERSION = '1.2.1';\nexport const NILE_VERSION = '1.0.8';\n\n// Set global versions for runtime access\nif (typeof window !== 'undefined') {\n (window as any).nileElementsVersion = NILE_ELEMENTS_VERSION;\n (window as any).nileVersion = NILE_VERSION;\n}\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,MAAM,CAAC,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AACjE,MAAM,CAAC,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAE/C,yCAAyC;AACzC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IACjC,MAAc,CAAC,mBAAmB,GAAG,qBAAqB,CAAC;IAC3D,MAAc,CAAC,WAAW,GAAG,YAAY,CAAC;AAC7C,CAAC","sourcesContent":["// Version utility - placeholders will be replaced during build\nexport const NILE_ELEMENTS_VERSION = '1.2.2';\nexport const NILE_VERSION = '1.0.9';\n\n// Set global versions for runtime access\nif (typeof window !== 'undefined') {\n (window as any).nileElementsVersion = NILE_ELEMENTS_VERSION;\n (window as any).nileVersion = NILE_VERSION;\n}\n"]}